{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "### R version: Microsoft R open 3.5.3\n",
    "# Package version: data.table_1.12.2\n",
    "#                             stringr_1.4.0\n",
    "#                             survival_2.43.3\n",
    "#                             GGally_1.4.0\n",
    "#                             alpaca_0.3.2\n",
    "#                             ggplot2_3.3.2\n",
    "\n",
    "suppressMessages(suppressWarnings({\n",
    "    library(data.table)\n",
    "    library(stringr)\n",
    "    library(survival)\n",
    "    library(ggplot2)\n",
    "    library(GGally)\n",
    "    library(alpaca)\n",
    "    library(htmlwidgets)\n",
    "    library(texreg)\n",
    "    library(plotly)\n",
    "}))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fig 4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.plotly.v1+json": {
       "attrs": {
        "47d05bd8271d": {
         "colour": {},
         "linetype": {},
         "type": "scatter",
         "x": {},
         "y": {}
        }
       },
       "base_url": "https://plot.ly",
       "config": {
        "doubleClick": "reset",
        "showSendToCloud": false
       },
       "cur_data": "47d05bd8271d",
       "data": [
        {
         "hoverinfo": "text",
         "hoveron": "points",
         "legendgroup": "Post-follow (loss)",
         "line": {
          "color": "rgba(31,119,180,1)",
          "dash": "solid",
          "shape": "hv",
          "width": 1.8898
         },
         "mode": "lines",
         "name": "Post-follow (loss)",
         "showlegend": true,
         "text": [
          "time:   0<br />surv: 1.0000000",
          "time:   0<br />surv: 0.9979787",
          "time:   1<br />surv: 0.9938459",
          "time:   2<br />surv: 0.9891666",
          "time:   3<br />surv: 0.9860488",
          "time:   4<br />surv: 0.9813980",
          "time:   5<br />surv: 0.9780559",
          "time:   6<br />surv: 0.9749900",
          "time:   7<br />surv: 0.9714791",
          "time:   8<br />surv: 0.9695125",
          "time:   9<br />surv: 0.9682880",
          "time:  10<br />surv: 0.9671110",
          "time:  11<br />surv: 0.9656355",
          "time:  12<br />surv: 0.9643936",
          "time:  13<br />surv: 0.9631247",
          "time:  14<br />surv: 0.9616910",
          "time:  15<br />surv: 0.9606135",
          "time:  16<br />surv: 0.9598192",
          "time:  17<br />surv: 0.9590622",
          "time:  18<br />surv: 0.9580760",
          "time:  19<br />surv: 0.9571267",
          "time:  20<br />surv: 0.9561215",
          "time:  21<br />surv: 0.9548059",
          "time:  22<br />surv: 0.9539806",
          "time:  23<br />surv: 0.9533362",
          "time:  24<br />surv: 0.9528441",
          "time:  25<br />surv: 0.9523225",
          "time:  26<br />surv: 0.9518978",
          "time:  27<br />surv: 0.9514007",
          "time:  28<br />surv: 0.9507372",
          "time:  29<br />surv: 0.9499624",
          "time:  30<br />surv: 0.9495425",
          "time:  31<br />surv: 0.9490911",
          "time:  32<br />surv: 0.9486322",
          "time:  33<br />surv: 0.9481412",
          "time:  34<br />surv: 0.9473170",
          "time:  35<br />surv: 0.9466018",
          "time:  36<br />surv: 0.9458922",
          "time:  37<br />surv: 0.9454348",
          "time:  38<br />surv: 0.9450240",
          "time:  39<br />surv: 0.9443837",
          "time:  40<br />surv: 0.9439308",
          "time:  41<br />surv: 0.9435853",
          "time:  42<br />surv: 0.9429962",
          "time:  43<br />surv: 0.9424513",
          "time:  44<br />surv: 0.9422654",
          "time:  45<br />surv: 0.9419501",
          "time:  46<br />surv: 0.9414053",
          "time:  47<br />surv: 0.9411775",
          "time:  48<br />surv: 0.9408135",
          "time:  49<br />surv: 0.9404752",
          "time:  50<br />surv: 0.9397453",
          "time:  51<br />surv: 0.9395321",
          "time:  52<br />surv: 0.9393153",
          "time:  53<br />surv: 0.9388751",
          "time:  54<br />surv: 0.9385025",
          "time:  55<br />surv: 0.9380481",
          "time:  56<br />surv: 0.9372359",
          "time:  57<br />surv: 0.9365606",
          "time:  58<br />surv: 0.9361142",
          "time:  59<br />surv: 0.9358256",
          "time:  60<br />surv: 0.9349474",
          "time:  61<br />surv: 0.9345235",
          "time:  62<br />surv: 0.9341367",
          "time:  63<br />surv: 0.9332171",
          "time:  64<br />surv: 0.9327686",
          "time:  65<br />surv: 0.9326313",
          "time:  66<br />surv: 0.9322596",
          "time:  67<br />surv: 0.9320712",
          "time:  68<br />surv: 0.9315937",
          "time:  69<br />surv: 0.9313513",
          "time:  70<br />surv: 0.9309066",
          "time:  71<br />surv: 0.9306535",
          "time:  72<br />surv: 0.9303954",
          "time:  73<br />surv: 0.9301333",
          "time:  74<br />surv: 0.9297615",
          "time:  75<br />surv: 0.9293310",
          "time:  76<br />surv: 0.9291126",
          "time:  77<br />surv: 0.9287789",
          "time:  78<br />surv: 0.9283808",
          "time:  79<br />surv: 0.9283228",
          "time:  80<br />surv: 0.9282053",
          "time:  81<br />surv: 0.9280265",
          "time:  82<br />surv: 0.9277247",
          "time:  83<br />surv: 0.9272353",
          "time:  84<br />surv: 0.9267991",
          "time:  85<br />surv: 0.9263529",
          "time:  86<br />surv: 0.9260283",
          "time:  87<br />surv: 0.9256333",
          "time:  88<br />surv: 0.9252997",
          "time:  89<br />surv: 0.9249617",
          "time:  90<br />surv: 0.9246875",
          "time:  91<br />surv: 0.9241985",
          "time:  92<br />surv: 0.9239126",
          "time:  93<br />surv: 0.9237668",
          "time:  94<br />surv: 0.9233228",
          "time:  95<br />surv: 0.9230227",
          "time:  96<br />surv: 0.9227946",
          "time:  97<br />surv: 0.9227175",
          "time:  98<br />surv: 0.9224028",
          "time:  99<br />surv: 0.9220801",
          "time: 100<br />surv: 0.9219153",
          "time: 101<br />surv: 0.9214971",
          "time: 102<br />surv: 0.9212427",
          "time: 103<br />surv: 0.9211567",
          "time: 104<br />surv: 0.9208948",
          "time: 105<br />surv: 0.9205385",
          "time: 106<br />surv: 0.9200818",
          "time: 107<br />surv: 0.9197090",
          "time: 108<br />surv: 0.9192360",
          "time: 109<br />surv: 0.9188524",
          "time: 110<br />surv: 0.9186579",
          "time: 111<br />surv: 0.9182628",
          "time: 112<br />surv: 0.9176584",
          "time: 113<br />surv: 0.9169361",
          "time: 114<br />surv: 0.9169361",
          "time: 115<br />surv: 0.9166154",
          "time: 116<br />surv: 0.9166154",
          "time: 117<br />surv: 0.9163951",
          "time: 118<br />surv: 0.9160591",
          "time: 119<br />surv: 0.9159446",
          "time: 120<br />surv: 0.9152385",
          "time: 121<br />surv: 0.9149976",
          "time: 122<br />surv: 0.9149976",
          "time: 123<br />surv: 0.9148730",
          "time: 124<br />surv: 0.9148730",
          "time: 125<br />surv: 0.9146159",
          "time: 126<br />surv: 0.9143532",
          "time: 127<br />surv: 0.9140834",
          "time: 128<br />surv: 0.9139452",
          "time: 129<br />surv: 0.9138044",
          "time: 130<br />surv: 0.9135181",
          "time: 131<br />surv: 0.9132270",
          "time: 132<br />surv: 0.9127822",
          "time: 133<br />surv: 0.9126305",
          "time: 134<br />surv: 0.9124742",
          "time: 135<br />surv: 0.9119935",
          "time: 136<br />surv: 0.9118301",
          "time: 137<br />surv: 0.9116640",
          "time: 138<br />surv: 0.9116640",
          "time: 139<br />surv: 0.9113192",
          "time: 140<br />surv: 0.9104336",
          "time: 141<br />surv: 0.9097004",
          "time: 142<br />surv: 0.9097004",
          "time: 143<br />surv: 0.9095078",
          "time: 144<br />surv: 0.9093114",
          "time: 145<br />surv: 0.9091119",
          "time: 146<br />surv: 0.9089085",
          "time: 147<br />surv: 0.9089085",
          "time: 148<br />surv: 0.9084762",
          "time: 149<br />surv: 0.9080309",
          "time: 150<br />surv: 0.9073475",
          "time: 151<br />surv: 0.9073475",
          "time: 152<br />surv: 0.9071103",
          "time: 153<br />surv: 0.9068677",
          "time: 154<br />surv: 0.9066173",
          "time: 155<br />surv: 0.9050528",
          "time: 156<br />surv: 0.9042437",
          "time: 157<br />surv: 0.9039673",
          "time: 158<br />surv: 0.9036848",
          "time: 159<br />surv: 0.9036848",
          "time: 160<br />surv: 0.9033888",
          "time: 161<br />surv: 0.9030826",
          "time: 162<br />surv: 0.9021232",
          "time: 163<br />surv: 0.9017913",
          "time: 164<br />surv: 0.9014498",
          "time: 165<br />surv: 0.9010995",
          "time: 166<br />surv: 0.9000268",
          "time: 167<br />surv: 0.8992917",
          "time: 168<br />surv: 0.8985261",
          "time: 169<br />surv: 0.8973216",
          "time: 170<br />surv: 0.8973216",
          "time: 171<br />surv: 0.8968885",
          "time: 172<br />surv: 0.8968885",
          "time: 173<br />surv: 0.8959691",
          "time: 174<br />surv: 0.8954936",
          "time: 175<br />surv: 0.8954936",
          "time: 176<br />surv: 0.8954936",
          "time: 177<br />surv: 0.8954936",
          "time: 178<br />surv: 0.8943291",
          "time: 179<br />surv: 0.8943291",
          "time: 180<br />surv: 0.8943291",
          "time: 181<br />surv: 0.8943291",
          "time: 182<br />surv: 0.8936282",
          "time: 183<br />surv: 0.8936282",
          "time: 184<br />surv: 0.8919656",
          "time: 185<br />surv: 0.8910745",
          "time: 186<br />surv: 0.8891827",
          "time: 187<br />surv: 0.8881858",
          "time: 188<br />surv: 0.8881858",
          "time: 189<br />surv: 0.8881858",
          "time: 190<br />surv: 0.8854655",
          "time: 191<br />surv: 0.8808051",
          "time: 192<br />surv: 0.8808051",
          "time: 193<br />surv: 0.8788169",
          "time: 194<br />surv: 0.8788169",
          "time: 195<br />surv: 0.8788169",
          "time: 196<br />surv: 0.8788169",
          "time: 197<br />surv: 0.8788169",
          "time: 198<br />surv: 0.8788169",
          "time: 199<br />surv: 0.8788169"
         ],
         "type": "scatter",
         "x": [
          0,
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28,
          29,
          30,
          31,
          32,
          33,
          34,
          35,
          36,
          37,
          38,
          39,
          40,
          41,
          42,
          43,
          44,
          45,
          46,
          47,
          48,
          49,
          50,
          51,
          52,
          53,
          54,
          55,
          56,
          57,
          58,
          59,
          60,
          61,
          62,
          63,
          64,
          65,
          66,
          67,
          68,
          69,
          70,
          71,
          72,
          73,
          74,
          75,
          76,
          77,
          78,
          79,
          80,
          81,
          82,
          83,
          84,
          85,
          86,
          87,
          88,
          89,
          90,
          91,
          92,
          93,
          94,
          95,
          96,
          97,
          98,
          99,
          100,
          101,
          102,
          103,
          104,
          105,
          106,
          107,
          108,
          109,
          110,
          111,
          112,
          113,
          114,
          115,
          116,
          117,
          118,
          119,
          120,
          121,
          122,
          123,
          124,
          125,
          126,
          127,
          128,
          129,
          130,
          131,
          132,
          133,
          134,
          135,
          136,
          137,
          138,
          139,
          140,
          141,
          142,
          143,
          144,
          145,
          146,
          147,
          148,
          149,
          150,
          151,
          152,
          153,
          154,
          155,
          156,
          157,
          158,
          159,
          160,
          161,
          162,
          163,
          164,
          165,
          166,
          167,
          168,
          169,
          170,
          171,
          172,
          173,
          174,
          175,
          176,
          177,
          178,
          179,
          180,
          181,
          182,
          183,
          184,
          185,
          186,
          187,
          188,
          189,
          190,
          191,
          192,
          193,
          194,
          195,
          196,
          197,
          198,
          199
         ],
         "xaxis": "x",
         "y": [
          1,
          0.998,
          0.9938,
          0.9892,
          0.986,
          0.9814,
          0.9781,
          0.975,
          0.9715,
          0.9695,
          0.9683,
          0.9671,
          0.9656,
          0.9644,
          0.9631,
          0.9617,
          0.9606,
          0.9598,
          0.9591,
          0.9581,
          0.9571,
          0.9561,
          0.9548,
          0.954,
          0.9533,
          0.9528,
          0.9523,
          0.9519,
          0.9514,
          0.9507,
          0.95,
          0.9495,
          0.9491,
          0.9486,
          0.9481,
          0.9473,
          0.9466,
          0.9459,
          0.9454,
          0.945,
          0.9444,
          0.9439,
          0.9436,
          0.943,
          0.9425,
          0.9423,
          0.942,
          0.9414,
          0.9412,
          0.9408,
          0.9405,
          0.9397,
          0.9395,
          0.9393,
          0.9389,
          0.9385,
          0.938,
          0.9372,
          0.9366,
          0.9361,
          0.9358,
          0.9349,
          0.9345,
          0.9341,
          0.9332,
          0.9328,
          0.9326,
          0.9323,
          0.9321,
          0.9316,
          0.9314,
          0.9309,
          0.9307,
          0.9304,
          0.9301,
          0.9298,
          0.9293,
          0.9291,
          0.9288,
          0.9284,
          0.9283,
          0.9282,
          0.928,
          0.9277,
          0.9272,
          0.9268,
          0.9264,
          0.926,
          0.9256,
          0.9253,
          0.925,
          0.9247,
          0.9242,
          0.9239,
          0.9238,
          0.9233,
          0.923,
          0.9228,
          0.9227,
          0.9224,
          0.9221,
          0.9219,
          0.9215,
          0.9212,
          0.9212,
          0.9209,
          0.9205,
          0.9201,
          0.9197,
          0.9192,
          0.9189,
          0.9187,
          0.9183,
          0.9177,
          0.9169,
          0.9169,
          0.9166,
          0.9166,
          0.9164,
          0.9161,
          0.9159,
          0.9152,
          0.915,
          0.915,
          0.9149,
          0.9149,
          0.9146,
          0.9144,
          0.9141,
          0.9139,
          0.9138,
          0.9135,
          0.9132,
          0.9128,
          0.9126,
          0.9125,
          0.912,
          0.9118,
          0.9117,
          0.9117,
          0.9113,
          0.9104,
          0.9097,
          0.9097,
          0.9095,
          0.9093,
          0.9091,
          0.9089,
          0.9089,
          0.9085,
          0.908,
          0.9073,
          0.9073,
          0.9071,
          0.9069,
          0.9066,
          0.9051,
          0.9042,
          0.904,
          0.9037,
          0.9037,
          0.9034,
          0.9031,
          0.9021,
          0.9018,
          0.9014,
          0.9011,
          0.9,
          0.8993,
          0.8985,
          0.8973,
          0.8973,
          0.8969,
          0.8969,
          0.896,
          0.8955,
          0.8955,
          0.8955,
          0.8955,
          0.8943,
          0.8943,
          0.8943,
          0.8943,
          0.8936,
          0.8936,
          0.892,
          0.8911,
          0.8892,
          0.8882,
          0.8882,
          0.8882,
          0.8855,
          0.8808,
          0.8808,
          0.8788,
          0.8788,
          0.8788,
          0.8788,
          0.8788,
          0.8788,
          0.8788
         ],
         "yaxis": "y"
        },
        {
         "hoverinfo": "text",
         "hoveron": "points",
         "legendgroup": "Pre-follow (loss)",
         "line": {
          "color": "rgba(255,127,14,1)",
          "dash": "solid",
          "shape": "hv",
          "width": 1.8898
         },
         "mode": "lines",
         "name": "Pre-follow (loss)",
         "showlegend": true,
         "text": [
          "time:   0<br />surv: 1.0000000",
          "time:   0<br />surv: 0.9976294",
          "time:   1<br />surv: 0.9925629",
          "time:   2<br />surv: 0.9869475",
          "time:   3<br />surv: 0.9834470",
          "time:   4<br />surv: 0.9791346",
          "time:   5<br />surv: 0.9753033",
          "time:   6<br />surv: 0.9712716",
          "time:   7<br />surv: 0.9675504",
          "time:   8<br />surv: 0.9652335",
          "time:   9<br />surv: 0.9635060",
          "time:  10<br />surv: 0.9621338",
          "time:  11<br />surv: 0.9607117",
          "time:  12<br />surv: 0.9592520",
          "time:  13<br />surv: 0.9573300",
          "time:  14<br />surv: 0.9554006",
          "time:  15<br />surv: 0.9540173",
          "time:  16<br />surv: 0.9530591",
          "time:  17<br />surv: 0.9519785",
          "time:  18<br />surv: 0.9511969",
          "time:  19<br />surv: 0.9502239",
          "time:  20<br />surv: 0.9491204",
          "time:  21<br />surv: 0.9477807",
          "time:  22<br />surv: 0.9469241",
          "time:  23<br />surv: 0.9461206",
          "time:  24<br />surv: 0.9453999",
          "time:  25<br />surv: 0.9448275",
          "time:  26<br />surv: 0.9441385",
          "time:  27<br />surv: 0.9433067",
          "time:  28<br />surv: 0.9422322",
          "time:  29<br />surv: 0.9416191",
          "time:  30<br />surv: 0.9410357",
          "time:  31<br />surv: 0.9406075",
          "time:  32<br />surv: 0.9402923",
          "time:  33<br />surv: 0.9395259",
          "time:  34<br />surv: 0.9388700",
          "time:  35<br />surv: 0.9382486",
          "time:  36<br />surv: 0.9377939",
          "time:  37<br />surv: 0.9375743",
          "time:  38<br />surv: 0.9371545",
          "time:  39<br />surv: 0.9366124",
          "time:  40<br />surv: 0.9361763",
          "time:  41<br />surv: 0.9358206",
          "time:  42<br />surv: 0.9351519",
          "time:  43<br />surv: 0.9348070",
          "time:  44<br />surv: 0.9344534",
          "time:  45<br />surv: 0.9341260",
          "time:  46<br />surv: 0.9338925",
          "time:  47<br />surv: 0.9336548",
          "time:  48<br />surv: 0.9333090",
          "time:  49<br />surv: 0.9325649",
          "time:  50<br />surv: 0.9321632",
          "time:  51<br />surv: 0.9319760",
          "time:  52<br />surv: 0.9314802",
          "time:  53<br />surv: 0.9311304",
          "time:  54<br />surv: 0.9308532",
          "time:  55<br />surv: 0.9306112",
          "time:  56<br />surv: 0.9301149",
          "time:  57<br />surv: 0.9298588",
          "time:  58<br />surv: 0.9295528",
          "time:  59<br />surv: 0.9292410",
          "time:  60<br />surv: 0.9291956",
          "time:  61<br />surv: 0.9288725",
          "time:  62<br />surv: 0.9284498",
          "time:  63<br />surv: 0.9281129",
          "time:  64<br />surv: 0.9276668",
          "time:  65<br />surv: 0.9272097",
          "time:  66<br />surv: 0.9270545",
          "time:  67<br />surv: 0.9267383",
          "time:  68<br />surv: 0.9265775",
          "time:  69<br />surv: 0.9260861",
          "time:  70<br />surv: 0.9256387",
          "time:  71<br />surv: 0.9253504",
          "time:  72<br />surv: 0.9249366",
          "time:  73<br />surv: 0.9244550",
          "time:  74<br />surv: 0.9243937",
          "time:  75<br />surv: 0.9242063",
          "time:  76<br />surv: 0.9239518",
          "time:  77<br />surv: 0.9235610",
          "time:  78<br />surv: 0.9230248",
          "time:  79<br />surv: 0.9228189",
          "time:  80<br />surv: 0.9224697",
          "time:  81<br />surv: 0.9218297",
          "time:  82<br />surv: 0.9213957",
          "time:  83<br />surv: 0.9213221",
          "time:  84<br />surv: 0.9209450",
          "time:  85<br />surv: 0.9208673",
          "time:  86<br />surv: 0.9207083",
          "time:  87<br />surv: 0.9201414",
          "time:  88<br />surv: 0.9199764",
          "time:  89<br />surv: 0.9197245",
          "time:  90<br />surv: 0.9194679",
          "time:  91<br />surv: 0.9186792",
          "time:  92<br />surv: 0.9185889",
          "time:  93<br />surv: 0.9181260",
          "time:  94<br />surv: 0.9178429",
          "time:  95<br />surv: 0.9177467",
          "time:  96<br />surv: 0.9174531",
          "time:  97<br />surv: 0.9170549",
          "time:  98<br />surv: 0.9164428",
          "time:  99<br />surv: 0.9162325",
          "time: 100<br />surv: 0.9160172",
          "time: 101<br />surv: 0.9156880",
          "time: 102<br />surv: 0.9156880",
          "time: 103<br />surv: 0.9155741",
          "time: 104<br />surv: 0.9153420",
          "time: 105<br />surv: 0.9147479",
          "time: 106<br />surv: 0.9143804",
          "time: 107<br />surv: 0.9140042",
          "time: 108<br />surv: 0.9137486",
          "time: 109<br />surv: 0.9136183",
          "time: 110<br />surv: 0.9133531",
          "time: 111<br />surv: 0.9129483",
          "time: 112<br />surv: 0.9125331",
          "time: 113<br />surv: 0.9116767",
          "time: 114<br />surv: 0.9113840",
          "time: 115<br />surv: 0.9110856",
          "time: 116<br />surv: 0.9106282",
          "time: 117<br />surv: 0.9101623",
          "time: 118<br />surv: 0.9100042",
          "time: 119<br />surv: 0.9095172",
          "time: 120<br />surv: 0.9093496",
          "time: 121<br />surv: 0.9091776",
          "time: 122<br />surv: 0.9088261",
          "time: 123<br />surv: 0.9088261",
          "time: 124<br />surv: 0.9084605",
          "time: 125<br />surv: 0.9080885",
          "time: 126<br />surv: 0.9077069",
          "time: 127<br />surv: 0.9075095",
          "time: 128<br />surv: 0.9073067",
          "time: 129<br />surv: 0.9073067",
          "time: 130<br />surv: 0.9070945",
          "time: 131<br />surv: 0.9070945",
          "time: 132<br />surv: 0.9068745",
          "time: 133<br />surv: 0.9066484",
          "time: 134<br />surv: 0.9064145",
          "time: 135<br />surv: 0.9064145",
          "time: 136<br />surv: 0.9061685",
          "time: 137<br />surv: 0.9061685",
          "time: 138<br />surv: 0.9059113",
          "time: 139<br />surv: 0.9059113",
          "time: 140<br />surv: 0.9056411",
          "time: 141<br />surv: 0.9056411",
          "time: 142<br />surv: 0.9056411",
          "time: 143<br />surv: 0.9050501",
          "time: 144<br />surv: 0.9050501",
          "time: 145<br />surv: 0.9050501",
          "time: 146<br />surv: 0.9047338",
          "time: 147<br />surv: 0.9040813",
          "time: 148<br />surv: 0.9027228",
          "time: 149<br />surv: 0.9027228",
          "time: 150<br />surv: 0.9027228",
          "time: 151<br />surv: 0.9023545",
          "time: 152<br />surv: 0.9016003",
          "time: 153<br />surv: 0.9016003",
          "time: 154<br />surv: 0.9011996",
          "time: 155<br />surv: 0.9003613",
          "time: 156<br />surv: 0.8999278",
          "time: 157<br />surv: 0.8999278",
          "time: 158<br />surv: 0.8990113",
          "time: 159<br />surv: 0.8990113",
          "time: 160<br />surv: 0.8985306",
          "time: 161<br />surv: 0.8985306",
          "time: 162<br />surv: 0.8980073",
          "time: 163<br />surv: 0.8980073",
          "time: 164<br />surv: 0.8974450",
          "time: 165<br />surv: 0.8968641",
          "time: 166<br />surv: 0.8956643",
          "time: 167<br />surv: 0.8950419",
          "time: 168<br />surv: 0.8950419",
          "time: 169<br />surv: 0.8943502",
          "time: 170<br />surv: 0.8943502",
          "time: 171<br />surv: 0.8943502",
          "time: 172<br />surv: 0.8943502",
          "time: 173<br />surv: 0.8943502",
          "time: 174<br />surv: 0.8935033",
          "time: 175<br />surv: 0.8917073",
          "time: 176<br />surv: 0.8917073",
          "time: 177<br />surv: 0.8906928",
          "time: 178<br />surv: 0.8906928",
          "time: 179<br />surv: 0.8906928",
          "time: 180<br />surv: 0.8906928",
          "time: 181<br />surv: 0.8906928",
          "time: 182<br />surv: 0.8906928",
          "time: 183<br />surv: 0.8906928",
          "time: 184<br />surv: 0.8859635",
          "time: 185<br />surv: 0.8843012",
          "time: 186<br />surv: 0.8843012",
          "time: 187<br />surv: 0.8843012",
          "time: 188<br />surv: 0.8843012",
          "time: 189<br />surv: 0.8843012",
          "time: 190<br />surv: 0.8843012",
          "time: 191<br />surv: 0.8843012",
          "time: 192<br />surv: 0.8843012",
          "time: 193<br />surv: 0.8805060",
          "time: 194<br />surv: 0.8761685",
          "time: 195<br />surv: 0.8710146",
          "time: 196<br />surv: 0.8710146",
          "time: 197<br />surv: 0.8710146",
          "time: 198<br />surv: 0.8520795",
          "time: 199<br />surv: 0.8520795"
         ],
         "type": "scatter",
         "x": [
          0,
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28,
          29,
          30,
          31,
          32,
          33,
          34,
          35,
          36,
          37,
          38,
          39,
          40,
          41,
          42,
          43,
          44,
          45,
          46,
          47,
          48,
          49,
          50,
          51,
          52,
          53,
          54,
          55,
          56,
          57,
          58,
          59,
          60,
          61,
          62,
          63,
          64,
          65,
          66,
          67,
          68,
          69,
          70,
          71,
          72,
          73,
          74,
          75,
          76,
          77,
          78,
          79,
          80,
          81,
          82,
          83,
          84,
          85,
          86,
          87,
          88,
          89,
          90,
          91,
          92,
          93,
          94,
          95,
          96,
          97,
          98,
          99,
          100,
          101,
          102,
          103,
          104,
          105,
          106,
          107,
          108,
          109,
          110,
          111,
          112,
          113,
          114,
          115,
          116,
          117,
          118,
          119,
          120,
          121,
          122,
          123,
          124,
          125,
          126,
          127,
          128,
          129,
          130,
          131,
          132,
          133,
          134,
          135,
          136,
          137,
          138,
          139,
          140,
          141,
          142,
          143,
          144,
          145,
          146,
          147,
          148,
          149,
          150,
          151,
          152,
          153,
          154,
          155,
          156,
          157,
          158,
          159,
          160,
          161,
          162,
          163,
          164,
          165,
          166,
          167,
          168,
          169,
          170,
          171,
          172,
          173,
          174,
          175,
          176,
          177,
          178,
          179,
          180,
          181,
          182,
          183,
          184,
          185,
          186,
          187,
          188,
          189,
          190,
          191,
          192,
          193,
          194,
          195,
          196,
          197,
          198,
          199
         ],
         "xaxis": "x",
         "y": [
          1,
          0.9976,
          0.9926,
          0.9869,
          0.9834,
          0.9791,
          0.9753,
          0.9713,
          0.9676,
          0.9652,
          0.9635,
          0.9621,
          0.9607,
          0.9593,
          0.9573,
          0.9554,
          0.954,
          0.9531,
          0.952,
          0.9512,
          0.9502,
          0.9491,
          0.9478,
          0.9469,
          0.9461,
          0.9454,
          0.9448,
          0.9441,
          0.9433,
          0.9422,
          0.9416,
          0.941,
          0.9406,
          0.9403,
          0.9395,
          0.9389,
          0.9382,
          0.9378,
          0.9376,
          0.9372,
          0.9366,
          0.9362,
          0.9358,
          0.9352,
          0.9348,
          0.9345,
          0.9341,
          0.9339,
          0.9337,
          0.9333,
          0.9326,
          0.9322,
          0.932,
          0.9315,
          0.9311,
          0.9309,
          0.9306,
          0.9301,
          0.9299,
          0.9296,
          0.9292,
          0.9292,
          0.9289,
          0.9284,
          0.9281,
          0.9277,
          0.9272,
          0.9271,
          0.9267,
          0.9266,
          0.9261,
          0.9256,
          0.9254,
          0.9249,
          0.9245,
          0.9244,
          0.9242,
          0.924,
          0.9236,
          0.923,
          0.9228,
          0.9225,
          0.9218,
          0.9214,
          0.9213,
          0.9209,
          0.9209,
          0.9207,
          0.9201,
          0.92,
          0.9197,
          0.9195,
          0.9187,
          0.9186,
          0.9181,
          0.9178,
          0.9177,
          0.9175,
          0.9171,
          0.9164,
          0.9162,
          0.916,
          0.9157,
          0.9157,
          0.9156,
          0.9153,
          0.9147,
          0.9144,
          0.914,
          0.9137,
          0.9136,
          0.9134,
          0.9129,
          0.9125,
          0.9117,
          0.9114,
          0.9111,
          0.9106,
          0.9102,
          0.91,
          0.9095,
          0.9093,
          0.9092,
          0.9088,
          0.9088,
          0.9085,
          0.9081,
          0.9077,
          0.9075,
          0.9073,
          0.9073,
          0.9071,
          0.9071,
          0.9069,
          0.9066,
          0.9064,
          0.9064,
          0.9062,
          0.9062,
          0.9059,
          0.9059,
          0.9056,
          0.9056,
          0.9056,
          0.9051,
          0.9051,
          0.9051,
          0.9047,
          0.9041,
          0.9027,
          0.9027,
          0.9027,
          0.9024,
          0.9016,
          0.9016,
          0.9012,
          0.9004,
          0.8999,
          0.8999,
          0.899,
          0.899,
          0.8985,
          0.8985,
          0.898,
          0.898,
          0.8974,
          0.8969,
          0.8957,
          0.895,
          0.895,
          0.8944,
          0.8944,
          0.8944,
          0.8944,
          0.8944,
          0.8935,
          0.8917,
          0.8917,
          0.8907,
          0.8907,
          0.8907,
          0.8907,
          0.8907,
          0.8907,
          0.8907,
          0.886,
          0.8843,
          0.8843,
          0.8843,
          0.8843,
          0.8843,
          0.8843,
          0.8843,
          0.8843,
          0.8805,
          0.8762,
          0.871,
          0.871,
          0.871,
          0.8521,
          0.8521
         ],
         "yaxis": "y"
        },
        {
         "hoverinfo": "text",
         "hoveron": "points",
         "legendgroup": "Pre-follow (gain)",
         "line": {
          "color": "rgba(255,127,14,1)",
          "dash": "dashdot",
          "shape": "hv",
          "width": 1.8898
         },
         "mode": "lines",
         "name": "Pre-follow (gain)",
         "showlegend": true,
         "text": [
          "time:   0<br />surv: 1.0000000",
          "time:   0<br />surv: 0.9951660",
          "time:   1<br />surv: 0.9714024",
          "time:   2<br />surv: 0.9658324",
          "time:   3<br />surv: 0.9571866",
          "time:   4<br />surv: 0.9526419",
          "time:   5<br />surv: 0.9481982",
          "time:   6<br />surv: 0.9445088",
          "time:   7<br />surv: 0.9408016",
          "time:   8<br />surv: 0.9385317",
          "time:   9<br />surv: 0.9369611",
          "time:  10<br />surv: 0.9352643",
          "time:  11<br />surv: 0.9335001",
          "time:  12<br />surv: 0.9317546",
          "time:  13<br />surv: 0.9300852",
          "time:  14<br />surv: 0.9282283",
          "time:  15<br />surv: 0.9268176",
          "time:  16<br />surv: 0.9258758",
          "time:  17<br />surv: 0.9250414",
          "time:  18<br />surv: 0.9240999",
          "time:  19<br />surv: 0.9230461",
          "time:  20<br />surv: 0.9216460",
          "time:  21<br />surv: 0.9203863",
          "time:  22<br />surv: 0.9196019",
          "time:  23<br />surv: 0.9190474",
          "time:  24<br />surv: 0.9184095",
          "time:  25<br />surv: 0.9178949",
          "time:  26<br />surv: 0.9174338",
          "time:  27<br />surv: 0.9165806",
          "time:  28<br />surv: 0.9156604",
          "time:  29<br />surv: 0.9149878",
          "time:  30<br />surv: 0.9143209",
          "time:  31<br />surv: 0.9137011",
          "time:  32<br />surv: 0.9133043",
          "time:  33<br />surv: 0.9128368",
          "time:  34<br />surv: 0.9120903",
          "time:  35<br />surv: 0.9113257",
          "time:  36<br />surv: 0.9106870",
          "time:  37<br />surv: 0.9102832",
          "time:  38<br />surv: 0.9098434",
          "time:  39<br />surv: 0.9094099",
          "time:  40<br />surv: 0.9089245",
          "time:  41<br />surv: 0.9083706",
          "time:  42<br />surv: 0.9075588",
          "time:  43<br />surv: 0.9069909",
          "time:  44<br />surv: 0.9066518",
          "time:  45<br />surv: 0.9061914",
          "time:  46<br />surv: 0.9058230",
          "time:  47<br />surv: 0.9053972",
          "time:  48<br />surv: 0.9049470",
          "time:  49<br />surv: 0.9042922",
          "time:  50<br />surv: 0.9037644",
          "time:  51<br />surv: 0.9032434",
          "time:  52<br />surv: 0.9028837",
          "time:  53<br />surv: 0.9026525",
          "time:  54<br />surv: 0.9021622",
          "time:  55<br />surv: 0.9017632",
          "time:  56<br />surv: 0.9013958",
          "time:  57<br />surv: 0.9010807",
          "time:  58<br />surv: 0.9007583",
          "time:  59<br />surv: 0.9004083",
          "time:  60<br />surv: 0.8998519",
          "time:  61<br />surv: 0.8995123",
          "time:  62<br />surv: 0.8990980",
          "time:  63<br />surv: 0.8985803",
          "time:  64<br />surv: 0.8982413",
          "time:  65<br />surv: 0.8978946",
          "time:  66<br />surv: 0.8976425",
          "time:  67<br />surv: 0.8973859",
          "time:  68<br />surv: 0.8970205",
          "time:  69<br />surv: 0.8965960",
          "time:  70<br />surv: 0.8961621",
          "time:  71<br />surv: 0.8959945",
          "time:  72<br />surv: 0.8955659",
          "time:  73<br />surv: 0.8953623",
          "time:  74<br />surv: 0.8951252",
          "time:  75<br />surv: 0.8947635",
          "time:  76<br />surv: 0.8943345",
          "time:  77<br />surv: 0.8938957",
          "time:  78<br />surv: 0.8936375",
          "time:  79<br />surv: 0.8931751",
          "time:  80<br />surv: 0.8930069",
          "time:  81<br />surv: 0.8926646",
          "time:  82<br />surv: 0.8924557",
          "time:  83<br />surv: 0.8921373",
          "time:  84<br />surv: 0.8919202",
          "time:  85<br />surv: 0.8916220",
          "time:  86<br />surv: 0.8913548",
          "time:  87<br />surv: 0.8911214",
          "time:  88<br />surv: 0.8906854",
          "time:  89<br />surv: 0.8904838",
          "time:  90<br />surv: 0.8899092",
          "time:  91<br />surv: 0.8895730",
          "time:  92<br />surv: 0.8893131",
          "time:  93<br />surv: 0.8890022",
          "time:  94<br />surv: 0.8888664",
          "time:  95<br />surv: 0.8885897",
          "time:  96<br />surv: 0.8884020",
          "time:  97<br />surv: 0.8879723",
          "time:  98<br />surv: 0.8873369",
          "time:  99<br />surv: 0.8871354",
          "time: 100<br />surv: 0.8868772",
          "time: 101<br />surv: 0.8867191",
          "time: 102<br />surv: 0.8863972",
          "time: 103<br />surv: 0.8860154",
          "time: 104<br />surv: 0.8857381",
          "time: 105<br />surv: 0.8854543",
          "time: 106<br />surv: 0.8852203",
          "time: 107<br />surv: 0.8849204",
          "time: 108<br />surv: 0.8845534",
          "time: 109<br />surv: 0.8844288",
          "time: 110<br />surv: 0.8839847",
          "time: 111<br />surv: 0.8837265",
          "time: 112<br />surv: 0.8836603",
          "time: 113<br />surv: 0.8833873",
          "time: 114<br />surv: 0.8831071",
          "time: 115<br />surv: 0.8828211",
          "time: 116<br />surv: 0.8827482",
          "time: 117<br />surv: 0.8825252",
          "time: 118<br />surv: 0.8822223",
          "time: 119<br />surv: 0.8815228",
          "time: 120<br />surv: 0.8812017",
          "time: 121<br />surv: 0.8809544",
          "time: 122<br />surv: 0.8805339",
          "time: 123<br />surv: 0.8804482",
          "time: 124<br />surv: 0.8801860",
          "time: 125<br />surv: 0.8800079",
          "time: 126<br />surv: 0.8795511",
          "time: 127<br />surv: 0.8793623",
          "time: 128<br />surv: 0.8791683",
          "time: 129<br />surv: 0.8788714",
          "time: 130<br />surv: 0.8786696",
          "time: 131<br />surv: 0.8786696",
          "time: 132<br />surv: 0.8785645",
          "time: 133<br />surv: 0.8780246",
          "time: 134<br />surv: 0.8778011",
          "time: 135<br />surv: 0.8775712",
          "time: 136<br />surv: 0.8772191",
          "time: 137<br />surv: 0.8769791",
          "time: 138<br />surv: 0.8768565",
          "time: 139<br />surv: 0.8767312",
          "time: 140<br />surv: 0.8767312",
          "time: 141<br />surv: 0.8765971",
          "time: 142<br />surv: 0.8761828",
          "time: 143<br />surv: 0.8757592",
          "time: 144<br />surv: 0.8747484",
          "time: 145<br />surv: 0.8744531",
          "time: 146<br />surv: 0.8741509",
          "time: 147<br />surv: 0.8732164",
          "time: 148<br />surv: 0.8730547",
          "time: 149<br />surv: 0.8723873",
          "time: 150<br />surv: 0.8723873",
          "time: 151<br />surv: 0.8722123",
          "time: 152<br />surv: 0.8718541",
          "time: 153<br />surv: 0.8716706",
          "time: 154<br />surv: 0.8711019",
          "time: 155<br />surv: 0.8703107",
          "time: 156<br />surv: 0.8699009",
          "time: 157<br />surv: 0.8694798",
          "time: 158<br />surv: 0.8690477",
          "time: 159<br />surv: 0.8686041",
          "time: 160<br />surv: 0.8683762",
          "time: 161<br />surv: 0.8679024",
          "time: 162<br />surv: 0.8676536",
          "time: 163<br />surv: 0.8673948",
          "time: 164<br />surv: 0.8671285",
          "time: 165<br />surv: 0.8671285",
          "time: 166<br />surv: 0.8668457",
          "time: 167<br />surv: 0.8665541",
          "time: 168<br />surv: 0.8665541",
          "time: 169<br />surv: 0.8659132",
          "time: 170<br />surv: 0.8659132",
          "time: 171<br />surv: 0.8652213",
          "time: 172<br />surv: 0.8648629",
          "time: 173<br />surv: 0.8644905",
          "time: 174<br />surv: 0.8633296",
          "time: 175<br />surv: 0.8633296",
          "time: 176<br />surv: 0.8633296",
          "time: 177<br />surv: 0.8628685",
          "time: 178<br />surv: 0.8614231",
          "time: 179<br />surv: 0.8609202",
          "time: 180<br />surv: 0.8609202",
          "time: 181<br />surv: 0.8603655",
          "time: 182<br />surv: 0.8597722",
          "time: 183<br />surv: 0.8578240",
          "time: 184<br />surv: 0.8571232",
          "time: 185<br />surv: 0.8571232",
          "time: 186<br />surv: 0.8563310",
          "time: 187<br />surv: 0.8546387",
          "time: 188<br />surv: 0.8537285",
          "time: 189<br />surv: 0.8527158",
          "time: 190<br />surv: 0.8527158",
          "time: 191<br />surv: 0.8527158",
          "time: 192<br />surv: 0.8527158",
          "time: 193<br />surv: 0.8527158",
          "time: 194<br />surv: 0.8508124",
          "time: 195<br />surv: 0.8486082",
          "time: 196<br />surv: 0.8402613",
          "time: 197<br />surv: 0.8402613",
          "time: 198<br />surv: 0.8402613",
          "time: 199<br />surv: 0.8402613"
         ],
         "type": "scatter",
         "x": [
          0,
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28,
          29,
          30,
          31,
          32,
          33,
          34,
          35,
          36,
          37,
          38,
          39,
          40,
          41,
          42,
          43,
          44,
          45,
          46,
          47,
          48,
          49,
          50,
          51,
          52,
          53,
          54,
          55,
          56,
          57,
          58,
          59,
          60,
          61,
          62,
          63,
          64,
          65,
          66,
          67,
          68,
          69,
          70,
          71,
          72,
          73,
          74,
          75,
          76,
          77,
          78,
          79,
          80,
          81,
          82,
          83,
          84,
          85,
          86,
          87,
          88,
          89,
          90,
          91,
          92,
          93,
          94,
          95,
          96,
          97,
          98,
          99,
          100,
          101,
          102,
          103,
          104,
          105,
          106,
          107,
          108,
          109,
          110,
          111,
          112,
          113,
          114,
          115,
          116,
          117,
          118,
          119,
          120,
          121,
          122,
          123,
          124,
          125,
          126,
          127,
          128,
          129,
          130,
          131,
          132,
          133,
          134,
          135,
          136,
          137,
          138,
          139,
          140,
          141,
          142,
          143,
          144,
          145,
          146,
          147,
          148,
          149,
          150,
          151,
          152,
          153,
          154,
          155,
          156,
          157,
          158,
          159,
          160,
          161,
          162,
          163,
          164,
          165,
          166,
          167,
          168,
          169,
          170,
          171,
          172,
          173,
          174,
          175,
          176,
          177,
          178,
          179,
          180,
          181,
          182,
          183,
          184,
          185,
          186,
          187,
          188,
          189,
          190,
          191,
          192,
          193,
          194,
          195,
          196,
          197,
          198,
          199
         ],
         "xaxis": "x",
         "y": [
          1,
          0.9952,
          0.9714,
          0.9658,
          0.9572,
          0.9526,
          0.9482,
          0.9445,
          0.9408,
          0.9385,
          0.937,
          0.9353,
          0.9335,
          0.9318,
          0.9301,
          0.9282,
          0.9268,
          0.9259,
          0.925,
          0.9241,
          0.923,
          0.9216,
          0.9204,
          0.9196,
          0.919,
          0.9184,
          0.9179,
          0.9174,
          0.9166,
          0.9157,
          0.915,
          0.9143,
          0.9137,
          0.9133,
          0.9128,
          0.9121,
          0.9113,
          0.9107,
          0.9103,
          0.9098,
          0.9094,
          0.9089,
          0.9084,
          0.9076,
          0.907,
          0.9067,
          0.9062,
          0.9058,
          0.9054,
          0.9049,
          0.9043,
          0.9038,
          0.9032,
          0.9029,
          0.9027,
          0.9022,
          0.9018,
          0.9014,
          0.9011,
          0.9008,
          0.9004,
          0.8999,
          0.8995,
          0.8991,
          0.8986,
          0.8982,
          0.8979,
          0.8976,
          0.8974,
          0.897,
          0.8966,
          0.8962,
          0.896,
          0.8956,
          0.8954,
          0.8951,
          0.8948,
          0.8943,
          0.8939,
          0.8936,
          0.8932,
          0.893,
          0.8927,
          0.8925,
          0.8921,
          0.8919,
          0.8916,
          0.8914,
          0.8911,
          0.8907,
          0.8905,
          0.8899,
          0.8896,
          0.8893,
          0.889,
          0.8889,
          0.8886,
          0.8884,
          0.888,
          0.8873,
          0.8871,
          0.8869,
          0.8867,
          0.8864,
          0.886,
          0.8857,
          0.8855,
          0.8852,
          0.8849,
          0.8846,
          0.8844,
          0.884,
          0.8837,
          0.8837,
          0.8834,
          0.8831,
          0.8828,
          0.8827,
          0.8825,
          0.8822,
          0.8815,
          0.8812,
          0.881,
          0.8805,
          0.8804,
          0.8802,
          0.88,
          0.8796,
          0.8794,
          0.8792,
          0.8789,
          0.8787,
          0.8787,
          0.8786,
          0.878,
          0.8778,
          0.8776,
          0.8772,
          0.877,
          0.8769,
          0.8767,
          0.8767,
          0.8766,
          0.8762,
          0.8758,
          0.8747,
          0.8745,
          0.8742,
          0.8732,
          0.8731,
          0.8724,
          0.8724,
          0.8722,
          0.8719,
          0.8717,
          0.8711,
          0.8703,
          0.8699,
          0.8695,
          0.869,
          0.8686,
          0.8684,
          0.8679,
          0.8677,
          0.8674,
          0.8671,
          0.8671,
          0.8668,
          0.8666,
          0.8666,
          0.8659,
          0.8659,
          0.8652,
          0.8649,
          0.8645,
          0.8633,
          0.8633,
          0.8633,
          0.8629,
          0.8614,
          0.8609,
          0.8609,
          0.8604,
          0.8598,
          0.8578,
          0.8571,
          0.8571,
          0.8563,
          0.8546,
          0.8537,
          0.8527,
          0.8527,
          0.8527,
          0.8527,
          0.8527,
          0.8508,
          0.8486,
          0.8403,
          0.8403,
          0.8403,
          0.8403
         ],
         "yaxis": "y"
        },
        {
         "hoverinfo": "text",
         "hoveron": "points",
         "legendgroup": "Post-follow (gain)",
         "line": {
          "color": "rgba(31,119,180,1)",
          "dash": "dashdot",
          "shape": "hv",
          "width": 1.8898
         },
         "mode": "lines",
         "name": "Post-follow (gain)",
         "showlegend": true,
         "text": [
          "time:   0<br />surv: 1.0000000",
          "time:   0<br />surv: 0.9962775",
          "time:   1<br />surv: 0.9785345",
          "time:   2<br />surv: 0.9739933",
          "time:   3<br />surv: 0.9674262",
          "time:   4<br />surv: 0.9634829",
          "time:   5<br />surv: 0.9603267",
          "time:   6<br />surv: 0.9569761",
          "time:   7<br />surv: 0.9537888",
          "time:   8<br />surv: 0.9519014",
          "time:   9<br />surv: 0.9505804",
          "time:  10<br />surv: 0.9492378",
          "time:  11<br />surv: 0.9477030",
          "time:  12<br />surv: 0.9463399",
          "time:  13<br />surv: 0.9448675",
          "time:  14<br />surv: 0.9432723",
          "time:  15<br />surv: 0.9420742",
          "time:  16<br />surv: 0.9413220",
          "time:  17<br />surv: 0.9402006",
          "time:  18<br />surv: 0.9390407",
          "time:  19<br />surv: 0.9381327",
          "time:  20<br />surv: 0.9370512",
          "time:  21<br />surv: 0.9358548",
          "time:  22<br />surv: 0.9349809",
          "time:  23<br />surv: 0.9343967",
          "time:  24<br />surv: 0.9339075",
          "time:  25<br />surv: 0.9330673",
          "time:  26<br />surv: 0.9323313",
          "time:  27<br />surv: 0.9314509",
          "time:  28<br />surv: 0.9304781",
          "time:  29<br />surv: 0.9297111",
          "time:  30<br />surv: 0.9291987",
          "time:  31<br />surv: 0.9286886",
          "time:  32<br />surv: 0.9281810",
          "time:  33<br />surv: 0.9275388",
          "time:  34<br />surv: 0.9266997",
          "time:  35<br />surv: 0.9257235",
          "time:  36<br />surv: 0.9250878",
          "time:  37<br />surv: 0.9247507",
          "time:  38<br />surv: 0.9242686",
          "time:  39<br />surv: 0.9235852",
          "time:  40<br />surv: 0.9232445",
          "time:  41<br />surv: 0.9226989",
          "time:  42<br />surv: 0.9218161",
          "time:  43<br />surv: 0.9210353",
          "time:  44<br />surv: 0.9207079",
          "time:  45<br />surv: 0.9202018",
          "time:  46<br />surv: 0.9198935",
          "time:  47<br />surv: 0.9194167",
          "time:  48<br />surv: 0.9188725",
          "time:  49<br />surv: 0.9182405",
          "time:  50<br />surv: 0.9179246",
          "time:  51<br />surv: 0.9175058",
          "time:  52<br />surv: 0.9170480",
          "time:  53<br />surv: 0.9166000",
          "time:  54<br />surv: 0.9162632",
          "time:  55<br />surv: 0.9158189",
          "time:  56<br />surv: 0.9152266",
          "time:  57<br />surv: 0.9145837",
          "time:  58<br />surv: 0.9143651",
          "time:  59<br />surv: 0.9140138",
          "time:  60<br />surv: 0.9135447",
          "time:  61<br />surv: 0.9132208",
          "time:  62<br />surv: 0.9126018",
          "time:  63<br />surv: 0.9121283",
          "time:  64<br />surv: 0.9116430",
          "time:  65<br />surv: 0.9113749",
          "time:  66<br />surv: 0.9109352",
          "time:  67<br />surv: 0.9107014",
          "time:  68<br />surv: 0.9103346",
          "time:  69<br />surv: 0.9098750",
          "time:  70<br />surv: 0.9094512",
          "time:  71<br />surv: 0.9089255",
          "time:  72<br />surv: 0.9086692",
          "time:  73<br />surv: 0.9082200",
          "time:  74<br />surv: 0.9079800",
          "time:  75<br />surv: 0.9076635",
          "time:  76<br />surv: 0.9073177",
          "time:  77<br />surv: 0.9070158",
          "time:  78<br />surv: 0.9066808",
          "time:  79<br />surv: 0.9063130",
          "time:  80<br />surv: 0.9058593",
          "time:  81<br />surv: 0.9055885",
          "time:  82<br />surv: 0.9054236",
          "time:  83<br />surv: 0.9051168",
          "time:  84<br />surv: 0.9045487",
          "time:  85<br />surv: 0.9040537",
          "time:  86<br />surv: 0.9037272",
          "time:  87<br />surv: 0.9033054",
          "time:  88<br />surv: 0.9030606",
          "time:  89<br />surv: 0.9027500",
          "time:  90<br />surv: 0.9024979",
          "time:  91<br />surv: 0.9021122",
          "time:  92<br />surv: 0.9016838",
          "time:  93<br />surv: 0.9015157",
          "time:  94<br />surv: 0.9011745",
          "time:  95<br />surv: 0.9009666",
          "time:  96<br />surv: 0.9005797",
          "time:  97<br />surv: 0.9002942",
          "time:  98<br />surv: 0.9000029",
          "time:  99<br />surv: 0.8996669",
          "time: 100<br />surv: 0.8995526",
          "time: 101<br />surv: 0.8993977",
          "time: 102<br />surv: 0.8990041",
          "time: 103<br />surv: 0.8985248",
          "time: 104<br />surv: 0.8982409",
          "time: 105<br />surv: 0.8978269",
          "time: 106<br />surv: 0.8974442",
          "time: 107<br />surv: 0.8971834",
          "time: 108<br />surv: 0.8968737",
          "time: 109<br />surv: 0.8966486",
          "time: 110<br />surv: 0.8963741",
          "time: 111<br />surv: 0.8958630",
          "time: 112<br />surv: 0.8954356",
          "time: 113<br />surv: 0.8949473",
          "time: 114<br />surv: 0.8945973",
          "time: 115<br />surv: 0.8944445",
          "time: 116<br />surv: 0.8943927",
          "time: 117<br />surv: 0.8942344",
          "time: 118<br />surv: 0.8940731",
          "time: 119<br />surv: 0.8937428",
          "time: 120<br />surv: 0.8931749",
          "time: 121<br />surv: 0.8927674",
          "time: 122<br />surv: 0.8925300",
          "time: 123<br />surv: 0.8924091",
          "time: 124<br />surv: 0.8921627",
          "time: 125<br />surv: 0.8917863",
          "time: 126<br />surv: 0.8911440",
          "time: 127<br />surv: 0.8908127",
          "time: 128<br />surv: 0.8905409",
          "time: 129<br />surv: 0.8903329",
          "time: 130<br />surv: 0.8902622",
          "time: 131<br />surv: 0.8900464",
          "time: 132<br />surv: 0.8896069",
          "time: 133<br />surv: 0.8893067",
          "time: 134<br />surv: 0.8888421",
          "time: 135<br />surv: 0.8884451",
          "time: 136<br />surv: 0.8882022",
          "time: 137<br />surv: 0.8879545",
          "time: 138<br />surv: 0.8876177",
          "time: 139<br />surv: 0.8873604",
          "time: 140<br />surv: 0.8869204",
          "time: 141<br />surv: 0.8867383",
          "time: 142<br />surv: 0.8866446",
          "time: 143<br />surv: 0.8863569",
          "time: 144<br />surv: 0.8858665",
          "time: 145<br />surv: 0.8857661",
          "time: 146<br />surv: 0.8853556",
          "time: 147<br />surv: 0.8849332",
          "time: 148<br />surv: 0.8844944",
          "time: 149<br />surv: 0.8841547",
          "time: 150<br />surv: 0.8838068",
          "time: 151<br />surv: 0.8833321",
          "time: 152<br />surv: 0.8832106",
          "time: 153<br />surv: 0.8828381",
          "time: 154<br />surv: 0.8823263",
          "time: 155<br />surv: 0.8817931",
          "time: 156<br />surv: 0.8815173",
          "time: 157<br />surv: 0.8813755",
          "time: 158<br />surv: 0.8813755",
          "time: 159<br />surv: 0.8812260",
          "time: 160<br />surv: 0.8809196",
          "time: 161<br />surv: 0.8806028",
          "time: 162<br />surv: 0.8806028",
          "time: 163<br />surv: 0.8806028",
          "time: 164<br />surv: 0.8802471",
          "time: 165<br />surv: 0.8796975",
          "time: 166<br />surv: 0.8781880",
          "time: 167<br />surv: 0.8776061",
          "time: 168<br />surv: 0.8772029",
          "time: 169<br />surv: 0.8769906",
          "time: 170<br />surv: 0.8767687",
          "time: 171<br />surv: 0.8763081",
          "time: 172<br />surv: 0.8760692",
          "time: 173<br />surv: 0.8753249",
          "time: 174<br />surv: 0.8745539",
          "time: 175<br />surv: 0.8740142",
          "time: 176<br />surv: 0.8737259",
          "time: 177<br />surv: 0.8731164",
          "time: 178<br />surv: 0.8731164",
          "time: 179<br />surv: 0.8717804",
          "time: 180<br />surv: 0.8700270",
          "time: 181<br />surv: 0.8681853",
          "time: 182<br />surv: 0.8677933",
          "time: 183<br />surv: 0.8660817",
          "time: 184<br />surv: 0.8660817",
          "time: 185<br />surv: 0.8651003",
          "time: 186<br />surv: 0.8640561",
          "time: 187<br />surv: 0.8640561",
          "time: 188<br />surv: 0.8634610",
          "time: 189<br />surv: 0.8628094",
          "time: 190<br />surv: 0.8620630",
          "time: 191<br />surv: 0.8595175",
          "time: 192<br />surv: 0.8585751",
          "time: 193<br />surv: 0.8543612",
          "time: 194<br />surv: 0.8531680",
          "time: 195<br />surv: 0.8517941",
          "time: 196<br />surv: 0.8517941",
          "time: 197<br />surv: 0.8492438",
          "time: 198<br />surv: 0.8449763",
          "time: 199<br />surv: 0.8361744"
         ],
         "type": "scatter",
         "x": [
          0,
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28,
          29,
          30,
          31,
          32,
          33,
          34,
          35,
          36,
          37,
          38,
          39,
          40,
          41,
          42,
          43,
          44,
          45,
          46,
          47,
          48,
          49,
          50,
          51,
          52,
          53,
          54,
          55,
          56,
          57,
          58,
          59,
          60,
          61,
          62,
          63,
          64,
          65,
          66,
          67,
          68,
          69,
          70,
          71,
          72,
          73,
          74,
          75,
          76,
          77,
          78,
          79,
          80,
          81,
          82,
          83,
          84,
          85,
          86,
          87,
          88,
          89,
          90,
          91,
          92,
          93,
          94,
          95,
          96,
          97,
          98,
          99,
          100,
          101,
          102,
          103,
          104,
          105,
          106,
          107,
          108,
          109,
          110,
          111,
          112,
          113,
          114,
          115,
          116,
          117,
          118,
          119,
          120,
          121,
          122,
          123,
          124,
          125,
          126,
          127,
          128,
          129,
          130,
          131,
          132,
          133,
          134,
          135,
          136,
          137,
          138,
          139,
          140,
          141,
          142,
          143,
          144,
          145,
          146,
          147,
          148,
          149,
          150,
          151,
          152,
          153,
          154,
          155,
          156,
          157,
          158,
          159,
          160,
          161,
          162,
          163,
          164,
          165,
          166,
          167,
          168,
          169,
          170,
          171,
          172,
          173,
          174,
          175,
          176,
          177,
          178,
          179,
          180,
          181,
          182,
          183,
          184,
          185,
          186,
          187,
          188,
          189,
          190,
          191,
          192,
          193,
          194,
          195,
          196,
          197,
          198,
          199
         ],
         "xaxis": "x",
         "y": [
          1,
          0.9963,
          0.9785,
          0.974,
          0.9674,
          0.9635,
          0.9603,
          0.957,
          0.9538,
          0.9519,
          0.9506,
          0.9492,
          0.9477,
          0.9463,
          0.9449,
          0.9433,
          0.9421,
          0.9413,
          0.9402,
          0.939,
          0.9381,
          0.9371,
          0.9359,
          0.935,
          0.9344,
          0.9339,
          0.9331,
          0.9323,
          0.9315,
          0.9305,
          0.9297,
          0.9292,
          0.9287,
          0.9282,
          0.9275,
          0.9267,
          0.9257,
          0.9251,
          0.9248,
          0.9243,
          0.9236,
          0.9232,
          0.9227,
          0.9218,
          0.921,
          0.9207,
          0.9202,
          0.9199,
          0.9194,
          0.9189,
          0.9182,
          0.9179,
          0.9175,
          0.917,
          0.9166,
          0.9163,
          0.9158,
          0.9152,
          0.9146,
          0.9144,
          0.914,
          0.9135,
          0.9132,
          0.9126,
          0.9121,
          0.9116,
          0.9114,
          0.9109,
          0.9107,
          0.9103,
          0.9099,
          0.9095,
          0.9089,
          0.9087,
          0.9082,
          0.908,
          0.9077,
          0.9073,
          0.907,
          0.9067,
          0.9063,
          0.9059,
          0.9056,
          0.9054,
          0.9051,
          0.9045,
          0.9041,
          0.9037,
          0.9033,
          0.9031,
          0.9028,
          0.9025,
          0.9021,
          0.9017,
          0.9015,
          0.9012,
          0.901,
          0.9006,
          0.9003,
          0.9,
          0.8997,
          0.8996,
          0.8994,
          0.899,
          0.8985,
          0.8982,
          0.8978,
          0.8974,
          0.8972,
          0.8969,
          0.8966,
          0.8964,
          0.8959,
          0.8954,
          0.8949,
          0.8946,
          0.8944,
          0.8944,
          0.8942,
          0.8941,
          0.8937,
          0.8932,
          0.8928,
          0.8925,
          0.8924,
          0.8922,
          0.8918,
          0.8911,
          0.8908,
          0.8905,
          0.8903,
          0.8903,
          0.89,
          0.8896,
          0.8893,
          0.8888,
          0.8884,
          0.8882,
          0.888,
          0.8876,
          0.8874,
          0.8869,
          0.8867,
          0.8866,
          0.8864,
          0.8859,
          0.8858,
          0.8854,
          0.8849,
          0.8845,
          0.8842,
          0.8838,
          0.8833,
          0.8832,
          0.8828,
          0.8823,
          0.8818,
          0.8815,
          0.8814,
          0.8814,
          0.8812,
          0.8809,
          0.8806,
          0.8806,
          0.8806,
          0.8802,
          0.8797,
          0.8782,
          0.8776,
          0.8772,
          0.877,
          0.8768,
          0.8763,
          0.8761,
          0.8753,
          0.8746,
          0.874,
          0.8737,
          0.8731,
          0.8731,
          0.8718,
          0.87,
          0.8682,
          0.8678,
          0.8661,
          0.8661,
          0.8651,
          0.8641,
          0.8641,
          0.8635,
          0.8628,
          0.8621,
          0.8595,
          0.8586,
          0.8544,
          0.8532,
          0.8518,
          0.8518,
          0.8492,
          0.845,
          0.8362
         ],
         "yaxis": "y"
        }
       ],
       "highlight": {
        "debounce": 0,
        "dynamic": false,
        "on": "plotly_click",
        "opacityDim": 0.2,
        "persistent": false,
        "selected": {
         "opacity": 1
        },
        "selectize": false
       },
       "layout": {
        "annotations": [
         {
          "ax": 0,
          "ay": 0,
          "font": {
           "color": "rgba(0,0,0,1)",
           "family": "",
           "size": 14.6119
          },
          "legendTitle": true,
          "showarrow": false,
          "text": "state",
          "textangle": 0,
          "x": 1.02,
          "xanchor": "left",
          "xref": "paper",
          "y": 1,
          "yanchor": "bottom",
          "yref": "paper"
         }
        ],
        "autosize": false,
        "barmode": "relative",
        "font": {
         "color": "rgba(0,0,0,1)",
         "family": "",
         "size": 14.6119
        },
        "hovermode": "closest",
        "legend": {
         "bgcolor": {},
         "bordercolor": {},
         "borderwidth": 0,
         "font": {
          "color": "rgba(0,0,0,1)",
          "family": "",
          "size": 11.6895
         },
         "x": 0.7,
         "y": 0.95
        },
        "margin": {
         "b": 25.5708,
         "l": 25.5708,
         "r": 7.3059,
         "t": 23.3059
        },
        "shapes": [
         {
          "line": {
           "linetype": [],
           "width": 0
          },
          "type": "rect",
          "x0": 0,
          "x1": 1,
          "xref": "paper",
          "y0": 0,
          "y1": 1,
          "yref": "paper"
         }
        ],
        "showlegend": true,
        "xaxis": {
         "anchor": "y",
         "automargin": true,
         "autorange": false,
         "categoryarray": null,
         "categoryorder": "array",
         "domain": [
          0,
          1
         ],
         "gridcolor": "rgba(235,235,235,1)",
         "gridwidth": 0.6642,
         "hoverformat": ".2f",
         "linecolor": {},
         "linewidth": 0,
         "nticks": {},
         "range": [
          -9.95,
          208.95
         ],
         "showgrid": true,
         "showline": false,
         "showticklabels": true,
         "tickangle": 0,
         "tickcolor": {},
         "tickfont": {
          "color": "rgba(77,77,77,1)",
          "family": "",
          "size": 11.6895
         },
         "ticklen": 100,
         "tickmode": "array",
         "ticks": "",
         "ticktext": null,
         "tickwidth": 0,
         "title": {
          "font": {
           "color": "rgba(0,0,0,1)",
           "family": "",
           "size": 14.6119
          },
          "text": "Holding period (days)"
         },
         "type": "linear",
         "zeroline": true
        },
        "yaxis": {
         "anchor": "x",
         "automargin": true,
         "autorange": false,
         "categoryarray": null,
         "categoryorder": "array",
         "domain": [
          0,
          1
         ],
         "gridcolor": "rgba(235,235,235,1)",
         "gridwidth": 0.6642,
         "hoverformat": ".2f",
         "linecolor": {},
         "linewidth": 0,
         "nticks": {},
         "rang": [
          0.9,
          1
         ],
         "range": [
          0.828,
          1.0082
         ],
         "showgrid": true,
         "showline": false,
         "showticklabels": true,
         "tickangle": 0,
         "tickcolor": {},
         "tickfont": {
          "color": "rgba(77,77,77,1)",
          "family": "",
          "size": 11.6895
         },
         "ticklen": 3.653,
         "tickmode": "array",
         "ticks": "",
         "ticktext": null,
         "tickwidth": 0,
         "title": {
          "font": {
           "color": "rgba(0,0,0,1)",
           "family": "",
           "size": 14.6119
          },
          "text": "Remaining position"
         },
         "type": "linear",
         "zeroline": false
        }
       },
       "shinyEvents": [
        "plotly_hover",
        "plotly_click",
        "plotly_selected",
        "plotly_relayout",
        "plotly_brushed",
        "plotly_brushing",
        "plotly_clickannotation",
        "plotly_doubleclick",
        "plotly_deselect",
        "plotly_afterplot"
       ],
       "source": "A",
       "visdat": {
        "47d05bd8271d": [
         "function (y) ",
         "x"
        ]
       }
      },
      "text/html": [
       "<!doctype html>\n",
       "<html>\n",
       "\t<head>\n",
       "\t\t<meta charset=\"utf-8\">\n",
       "\t\t<script title=\"htmlwidgets\" src=\"data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbChjb2RlKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCFlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICByZXN1bHQgPSBldmFsKCIoIiArIGNvZGUgKyAiKSIpOwogICAgICB9IGNhdGNoKGUpIHsKICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBpbml0U2l6aW5nKGVsKSB7CiAgICB2YXIgc2l6aW5nID0gc2l6aW5nUG9saWN5KGVsKTsKICAgIGlmICghc2l6aW5nKQogICAgICByZXR1cm47CgogICAgdmFyIGNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodG1sd2lkZ2V0X2NvbnRhaW5lciIpOwogICAgaWYgKCFjZWwpCiAgICAgIHJldHVybjsKCiAgICBpZiAodHlwZW9mKHNpemluZy5wYWRkaW5nKSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAiMCI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZyA9IHBhZGRpbmdUb0Nzcyh1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKSk7CiAgICB9CgogICAgaWYgKHNpemluZy5maWxsKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgaWYgKGNlbCkgewogICAgICAgIGNlbC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICAgdmFyIHBhZCA9IHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpOwogICAgICAgIGNlbC5zdHlsZS50b3AgPSBwYWQudG9wICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUucmlnaHQgPSBwYWQucmlnaHQgKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5ib3R0b20gPSBwYWQuYm90dG9tICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUubGVmdCA9IHBhZC5sZWZ0ICsgInB4IjsKICAgICAgICBlbC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIH0KCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwub2Zmc2V0SGVpZ2h0OyB9CiAgICAgIH07CgogICAgfSBlbHNlIHsKICAgICAgZWwuc3R5bGUud2lkdGggPSBweChzaXppbmcud2lkdGgpOwogICAgICBlbC5zdHlsZS5oZWlnaHQgPSBweChzaXppbmcuaGVpZ2h0KTsKCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0V2lkdGg7IH0sCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwogICAgfQogIH0KCiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgZm9yIG1ldGhvZHMKICB2YXIgZGVmYXVsdHMgPSB7CiAgICBmaW5kOiBmdW5jdGlvbihzY29wZSkgewogICAgICByZXR1cm4gcXVlcnlTZWxlY3RvckFsbChzY29wZSwgIi4iICsgdGhpcy5uYW1lKTsKICAgIH0sCiAgICByZW5kZXJFcnJvcjogZnVuY3Rpb24oZWwsIGVycikgewogICAgICB2YXIgJGVsID0gJChlbCk7CgogICAgICB0aGlzLmNsZWFyRXJyb3IoZWwpOwoKICAgICAgLy8gQWRkIGFsbCB0aGVzZSBlcnJvciBjbGFzc2VzLCBhcyBTaGlueSBkb2VzCiAgICAgIHZhciBlcnJDbGFzcyA9ICJzaGlueS1vdXRwdXQtZXJyb3IiOwogICAgICBpZiAoZXJyLnR5cGUgIT09IG51bGwpIHsKICAgICAgICAvLyB1c2UgdGhlIGNsYXNzZXMgb2YgdGhlIGVycm9yIGNvbmRpdGlvbiBhcyBDU1MgY2xhc3MgbmFtZXMKICAgICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiAiICsgJC5tYXAoYXNBcnJheShlcnIudHlwZSksIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICAgIHJldHVybiBlcnJDbGFzcyArICItIiArIHR5cGU7CiAgICAgICAgfSkuam9pbigiICIpOwogICAgICB9CiAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiIGh0bWx3aWRnZXRzLWVycm9yIjsKCiAgICAgIC8vIElzIGVsIGlubGluZSBvciBibG9jaz8gSWYgaW5saW5lIG9yIGlubGluZS1ibG9jaywganVzdCBkaXNwbGF5Om5vbmUgaXQKICAgICAgLy8gYW5kIGFkZCBhbiBpbmxpbmUgZXJyb3IuCiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmNzcygiZGlzcGxheSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBkaXNwbGF5KTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgICRlbC5oaWRlKCk7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yU3BhbiA9ICQoIjxzcGFuPiIpLmFkZENsYXNzKGVyckNsYXNzKTsKICAgICAgICAgIGVycm9yU3Bhbi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvclNwYW4pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKSB7CiAgICAgICAgLy8gSWYgYmxvY2ssIGFkZCBhbiBlcnJvciBqdXN0IGFmdGVyIHRoZSBlbCwgc2V0IHZpc2liaWxpdHk6bm9uZSBvbiB0aGUKICAgICAgICAvLyBlbCwgYW5kIHBvc2l0aW9uIHRoZSBlcnJvciB0byBiZSBvbiB0b3Agb2YgdGhlIGVsLgogICAgICAgIC8vIE1hcmsgaXQgd2l0aCBhIHVuaXF1ZSBJRCBhbmQgQ1NTIGNsYXNzIHNvIHdlIGNhbiByZW1vdmUgaXQgbGF0ZXIuCiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JEaXYgPSAkKCI8ZGl2PiIpLmFkZENsYXNzKGVyckNsYXNzKS5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIikKICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgLy8gc2V0dGluZyB3aWR0aCBjYW4gcHVzaCBvdXQgdGhlIHBhZ2Ugc2l6ZSwgZm9yY2luZyBvdGhlcndpc2UKICAgICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgc2Nyb2xsYmFycyB0byBhcHBlYXIgYW5kIG1ha2luZyBpdCBpbXBvc3NpYmxlIGZvcgogICAgICAgICAgICAvLyB0aGUgZWxlbWVudCB0byBzaHJpbms7IHNvIHVzZSBtYXgtd2lkdGggaW5zdGVhZAogICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgZXJyb3JEaXYudGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JEaXYpOwoKICAgICAgICAgIC8vIFJlYWxseSBkdW1iIHdheSB0byBrZWVwIHRoZSBzaXplL3Bvc2l0aW9uIG9mIHRoZSBlcnJvciBpbiBzeW5jIHdpdGgKICAgICAgICAgIC8vIHRoZSBwYXJlbnQgZWxlbWVudCBhcyB0aGUgd2luZG93IGlzIHJlc2l6ZWQgb3Igd2hhdGV2ZXIuCiAgICAgICAgICB2YXIgaW50SWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFlcnJvckRpdlswXS5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRJZCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yRGl2CiAgICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZWwpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwogICAgICB2YXIgZGlzcGxheSA9ICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBudWxsKTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgIGlmIChkaXNwbGF5KQogICAgICAgICAgJGVsLmNzcygiZGlzcGxheSIsIGRpc3BsYXkpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIil7CiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJpbmhlcml0Iik7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfQogICAgfSwKICAgIHNpemluZzoge30KICB9OwoKICAvLyBDYWxsZWQgYnkgd2lkZ2V0IGJpbmRpbmdzIHRvIHJlZ2lzdGVyIGEgbmV3IHR5cGUgb2Ygd2lkZ2V0LiBUaGUgZGVmaW5pdGlvbgogIC8vIG9iamVjdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAgLy8gLSBuYW1lIChyZXF1aXJlZCkgLSBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBiaW5kaW5nIG5hbWUsIHdoaWNoIHdpbGwgYmUKICAvLyAgIHVzZWQgYnkgZGVmYXVsdCBhcyB0aGUgQ1NTIGNsYXNzbmFtZSB0byBsb29rIGZvci4KICAvLyAtIGluaXRpYWxpemUgKG9wdGlvbmFsKSAtIEEgZnVuY3Rpb24oZWwpIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIHdpZGdldCBlbGVtZW50OyBpZiBhIHZhbHVlIGlzIHJldHVybmVkLCBpdCB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgdGhpcmQKICAvLyAgIHZhbHVlIHRvIHJlbmRlclZhbHVlLgogIC8vIC0gcmVuZGVyVmFsdWUgKHJlcXVpcmVkKSAtIEEgZnVuY3Rpb24oZWwsIGRhdGEsIGluaXRWYWx1ZSkgdGhhdCB3aWxsIGJlCiAgLy8gICBjYWxsZWQgd2l0aCBkYXRhLiBTdGF0aWMgY29udGV4dHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgZWxlbWVudDsgU2hpbnkgYXBwcyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlcgogIC8vICAgZWxlbWVudCwgYXMgdGhlIGRhdGEgY2hhbmdlcy4KICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0ID0gZnVuY3Rpb24oZGVmaW5pdGlvbikgewogICAgaWYgKCFkZWZpbml0aW9uLm5hbWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgfQogICAgaWYgKCFkZWZpbml0aW9uLnR5cGUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgdHlwZSIpOwogICAgfQogICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBvdXRwdXQgd2lkZ2V0cwogICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gIm91dHB1dCIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgd2lkZ2V0IHR5cGUgJyIgKyBkZWZpbml0aW9uLnR5cGUgKyAiJyIpOwogICAgfQogICAgLy8gVE9ETzogVmVyaWZ5IHRoYXQgLm5hbWUgaXMgYSB2YWxpZCBDU1MgY2xhc3NuYW1lCgogICAgLy8gU3VwcG9ydCBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMuIE9sZC1zdHlsZSBjbGFzcy1ib3VuZAogICAgLy8gZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0ICJvYmplY3QiIHBlciB3aWRnZXQgcGVyIHR5cGUvY2xhc3Mgb2YKICAgIC8vIHdpZGdldDsgdGhlIHJlbmRlclZhbHVlIGFuZCByZXNpemUgbWV0aG9kcyBvbiBzdWNoIHdpZGdldCBvYmplY3RzCiAgICAvLyB0YWtlIGVsIGFuZCBpbnN0YW5jZSBhcmd1bWVudHMsIGJlY2F1c2UgdGhlIHdpZGdldCBvYmplY3QgY2FuJ3QKICAgIC8vIHN0b3JlIHRoZW0uIE5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQKICAgIC8vIG9iamVjdCBwZXIgd2lkZ2V0IGluc3RhbmNlOyB0aGUgZGVmaW5pdGlvbiB0aGF0J3MgcGFzc2VkIGluIGRvZXNuJ3QKICAgIC8vIHByb3ZpZGUgcmVuZGVyVmFsdWUgb3IgcmVzaXplIG1ldGhvZHMgYXQgYWxsLCBqdXN0IHRoZSBzaW5nbGUgbWV0aG9kCiAgICAvLyAgIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpCiAgICAvLyB3aGljaCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGhhcyByZW5kZXJWYWx1ZSh4KSBhbmQgcmVzaXplKHcsIGgpLgogICAgLy8gVGhpcyBlbmFibGVzIGEgZmFyIG1vcmUgbmF0dXJhbCBwcm9ncmFtbWluZyBzdHlsZSBmb3IgdGhlIHdpZGdldAogICAgLy8gYXV0aG9yLCB3aG8gY2FuIHN0b3JlIHBlci1pbnN0YW5jZSBzdGF0ZSB1c2luZyBlaXRoZXIgT08tc3R5bGUKICAgIC8vIGluc3RhbmNlIGZpZWxkcyBvciBmdW5jdGlvbmFsLXN0eWxlIGNsb3N1cmUgdmFyaWFibGVzIChJIGd1ZXNzIHRoaXMKICAgIC8vIGlzIGluIGNvbnRyYXN0IHRvIHdoYXQgY2FuIG9ubHkgYmUgY2FsbGVkIEMtc3R5bGUgcHNldWRvLU9PIHdoaWNoIGlzCiAgICAvLyB3aGF0IHdlIHJlcXVpcmVkIGJlZm9yZSkuCiAgICBpZiAoZGVmaW5pdGlvbi5mYWN0b3J5KSB7CiAgICAgIGRlZmluaXRpb24gPSBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZpbml0aW9uKTsKICAgIH0KCiAgICBpZiAoIWRlZmluaXRpb24ucmVuZGVyVmFsdWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgcmVuZGVyVmFsdWUgZnVuY3Rpb24iKTsKICAgIH0KCiAgICAvLyBGb3Igc3RhdGljIHJlbmRlcmluZyAobm9uLVNoaW55KSwgdXNlIGEgc2ltcGxlIHdpZGdldCByZWdpc3RyYXRpb24KICAgIC8vIHNjaGVtZS4gV2UgYWxzbyB1c2UgdGhpcyBzY2hlbWUgZm9yIFNoaW55IGFwcHMvZG9jdW1lbnRzIHRoYXQgYWxzbwogICAgLy8gY29udGFpbiBzdGF0aWMgd2lkZ2V0cy4KICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICAvLyBNZXJnZSBkZWZhdWx0cyBpbnRvIHRoZSBkZWZpbml0aW9uOyBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24uCiAgICB2YXIgc3RhdGljQmluZGluZyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwogICAgb3ZlcnJpZGVNZXRob2Qoc3RhdGljQmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBzdXBlcmZ1bmMoc2NvcGUpOwogICAgICAgIC8vIEZpbHRlciBvdXQgU2hpbnkgb3V0cHV0cywgd2Ugb25seSB3YW50IHRoZSBzdGF0aWMga2luZAogICAgICAgIHJldHVybiBmaWx0ZXJCeUNsYXNzKHJlc3VsdHMsICJodG1sLXdpZGdldC1vdXRwdXQiLCBmYWxzZSk7CiAgICAgIH07CiAgICB9KTsKICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzLnB1c2goc3RhdGljQmluZGluZyk7CgogICAgaWYgKHNoaW55TW9kZSkgewogICAgICAvLyBTaGlueSBpcyBydW5uaW5nLiBSZWdpc3RlciB0aGUgZGVmaW5pdGlvbiB3aXRoIGFuIG91dHB1dCBiaW5kaW5nLgogICAgICAvLyBUaGUgZGVmaW5pdGlvbiBpdHNlbGYgd2lsbCBub3QgYmUgdGhlIG91dHB1dCBiaW5kaW5nLCBpbnN0ZWFkCiAgICAgIC8vIHdlIHdpbGwgbWFrZSBhbiBvdXRwdXQgYmluZGluZyBvYmplY3QgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlCiAgICAgIC8vIGRlZmluaXRpb24uIFRoaXMgaXMgYmVjYXVzZSB3ZSBmb29saXNobHkgdXNlZCB0aGUgc2FtZSBtZXRob2QKICAgICAgLy8gbmFtZSAocmVuZGVyVmFsdWUpIGZvciBodG1sd2lkZ2V0cyBkZWZpbml0aW9uIGFuZCBTaGlueSBiaW5kaW5ncwogICAgICAvLyBidXQgdGhleSBhY3R1YWxseSBoYXZlIHF1aXRlIGRpZmZlcmVudCBzZW1hbnRpY3MgKHRoZSBTaGlueQogICAgICAvLyBiaW5kaW5ncyByZWNlaXZlIGRhdGEgdGhhdCBpbmNsdWRlcyBsb3RzIG9mIG1ldGFkYXRhIHRoYXQgaXQKICAgICAgLy8gc3RyaXBzIG9mZiBiZWZvcmUgY2FsbGluZyBodG1sd2lkZ2V0cyByZW5kZXJWYWx1ZSkuIFdlIGNhbid0CiAgICAgIC8vIGp1c3QgaWdub3JlIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgaW4gc29tZSB3aWRnZXRzIGl0J3MgaGVscGZ1bAogICAgICAvLyB0byBjYWxsIHRoaXMucmVuZGVyVmFsdWUoKSBmcm9tIGluc2lkZSBvZiByZXNpemUoKSwgYW5kIGlmCiAgICAgIC8vIHdlJ3JlIG5vdCBkZWxlZ2F0aW5nLCB0aGVuIHRoYXQgY2FsbCB3aWxsIGdvIHRvIHRoZSBTaGlueQogICAgICAvLyB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIGh0bWx3aWRnZXRzIHZlcnNpb24uCgogICAgICAvLyBNZXJnZSBkZWZhdWx0cyB3aXRoIGRlZmluaXRpb24sIHdpdGhvdXQgbXV0YXRpbmcgZWl0aGVyLgogICAgICB2YXIgYmluZGluZ0RlZiA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwoKICAgICAgLy8gVGhpcyBvYmplY3Qgd2lsbCBiZSBvdXIgYWN0dWFsIFNoaW55IGJpbmRpbmcuCiAgICAgIHZhciBzaGlueUJpbmRpbmcgPSBuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpOwoKICAgICAgLy8gV2l0aCBhIGZldyBleGNlcHRpb25zLCB3ZSdsbCB3YW50IHRvIHNpbXBseSB1c2UgdGhlIGJpbmRpbmdEZWYncwogICAgICAvLyB2ZXJzaW9uIG9mIG1ldGhvZHMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCiAgICAgIC8vIFNoaW55J3MgZGVmYXVsdHMuIE5PVEU6IElmIFNoaW55J3Mgb3V0cHV0IGJpbmRpbmdzIGdhaW4gYWRkaXRpb25hbAogICAgICAvLyBtZXRob2RzIGluIHRoZSBmdXR1cmUsIGFuZCB3ZSB3YW50IHRoZW0gdG8gYmUgb3ZlcnJpZGVhYmxlIGJ5CiAgICAgIC8vIEhUTUxXaWRnZXQgYmluZGluZyBkZWZpbml0aW9ucywgdGhlbiB3ZSdsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoaXMKICAgICAgLy8gbGlzdC4KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiZ2V0SWQiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUNoYW5nZSIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAicmVuZGVyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiY2xlYXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJzaG93UHJvZ3Jlc3MiKTsKCiAgICAgIC8vIFRoZSBmaW5kLCByZW5kZXJWYWx1ZSwgYW5kIHJlc2l6ZSBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB3ZQogICAgICAvLyB3YW50IHRvIGFjdHVhbGx5IGRlY29yYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgYmluZGluZ0RlZiBtZXRob2RzLgoKICAgICAgc2hpbnlCaW5kaW5nLmZpbmQgPSBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gYmluZGluZ0RlZi5maW5kKHNjb3BlKTsKCiAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzCiAgICAgICAgdmFyIGR5bmFtaWNSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoIi5odG1sLXdpZGdldC1vdXRwdXQiKTsKCiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdoYXRldmVyIGNhdXNlZCBTaGlueSB0byB0aGluayB0aGVyZSBtaWdodCBiZQogICAgICAgIC8vIG5ldyBkeW5hbWljIG91dHB1dHMsIGFsc28gY2F1c2VkIHRoZXJlIHRvIGJlIG5ldyBzdGF0aWMgb3V0cHV0cy4KICAgICAgICAvLyBTaW5jZSB0aGVyZSBtaWdodCBiZSBsb3RzIG9mIGRpZmZlcmVudCBodG1sd2lkZ2V0cyBiaW5kaW5ncywgd2UKICAgICAgICAvLyBzY2hlZHVsZSBleGVjdXRpb24gZm9yIGxhdGVyLS1ubyBuZWVkIHRvIHN0YXRpY1JlbmRlciBtdWx0aXBsZQogICAgICAgIC8vIHRpbWVzLgogICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gZHluYW1pY1Jlc3VsdHMubGVuZ3RoKQogICAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXIoKTsKCiAgICAgICAgcmV0dXJuIGR5bmFtaWNSZXN1bHRzOwogICAgICB9OwoKICAgICAgLy8gV3JhcCByZW5kZXJWYWx1ZSB0byBoYW5kbGUgaW5pdGlhbGl6YXRpb24sIHdoaWNoIHVuZm9ydHVuYXRlbHkgaXNuJ3QKICAgICAgLy8gc3VwcG9ydGVkIG5hdGl2ZWx5IGJ5IFNoaW55IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4KCiAgICAgIHNoaW55QmluZGluZy5yZW5kZXJWYWx1ZSA9IGZ1bmN0aW9uKGVsLCBkYXRhKSB7CiAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7CiAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICBpZiAoIShkYXRhLmV2YWxzIGluc3RhbmNlb2YgQXJyYXkpKSBkYXRhLmV2YWxzID0gW2RhdGEuZXZhbHNdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBkYXRhLmV2YWxzICYmIGkgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2ldKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFiaW5kaW5nRGVmLnJlbmRlck9uTnVsbFZhbHVlKSB7CiAgICAgICAgICBpZiAoZGF0YS54ID09PSBudWxsKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJpbmhlcml0IjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgIGluaXRTaXppbmcoZWwpOwoKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiLCB0cnVlKTsKICAgICAgICAgIGlmIChiaW5kaW5nRGVmLmluaXRpYWxpemUpIHsKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJpbmRpbmdEZWYuaW5pdGlhbGl6ZShlbCwgZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSwgW2VsLCBkYXRhLnhdKTsKICAgICAgfTsKCiAgICAgIC8vIE9ubHkgb3ZlcnJpZGUgcmVzaXplIGlmIGJpbmRpbmdEZWYgaW1wbGVtZW50cyBpdAogICAgICBpZiAoYmluZGluZ0RlZi5yZXNpemUpIHsKICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICAgIC8vIFNoaW55IGNhbiBjYWxsIHJlc2l6ZSBiZWZvcmUgaW5pdGlhbGl6ZS9yZW5kZXJWYWx1ZSBoYXZlIGJlZW4KICAgICAgICAgIC8vIGNhbGxlZCwgd2hpY2ggZG9lc24ndCBtYWtlIHNlbnNlIGZvciB3aWRnZXRzLgogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgICBiaW5kaW5nRGVmLnJlc2l6ZShlbCwgd2lkdGgsIGhlaWdodCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CgogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7CiAgICB9CiAgfTsKCiAgdmFyIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgZnVuY3Rpb24gc2NoZWR1bGVTdGF0aWNSZW5kZXIoKSB7CiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgewogICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9LCAxKTsKICAgIH0KICB9CgogIC8vIFJlbmRlciBzdGF0aWMgd2lkZ2V0cyBhZnRlciB0aGUgZG9jdW1lbnQgZmluaXNoZXMgbG9hZGluZwogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzCiAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGJpbmRpbmdzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7CiAgICAgIHZhciBtYXRjaGVzID0gYmluZGluZy5maW5kKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICAgIGZvckVhY2gobWF0Y2hlcywgZnVuY3Rpb24oZWwpIHsKICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOwoKICAgICAgICBpZiAoaGFzQ2xhc3MoZWwsICJodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUgKyAiIGh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCI7CgogICAgICAgIHZhciBpbml0UmVzdWx0OwogICAgICAgIGlmIChiaW5kaW5nLmluaXRpYWxpemUpIHsKICAgICAgICAgIGluaXRSZXN1bHQgPSBiaW5kaW5nLmluaXRpYWxpemUoZWwsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICk7CiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsKICAgICAgICAgIHZhciBsYXN0U2l6ZSA9IHsKICAgICAgICAgICAgdzogc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgfTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCgogIGZ1bmN0aW9uIGhhc19qUXVlcnkzKCkgewogICAgaWYgKCF3aW5kb3cualF1ZXJ5KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciAkdmVyc2lvbiA9IHdpbmRvdy5qUXVlcnkuZm4uanF1ZXJ5OwogICAgdmFyICRtYWpvcl92ZXJzaW9uID0gcGFyc2VJbnQoJHZlcnNpb24uc3BsaXQoIi4iKVswXSk7CiAgICByZXR1cm4gJG1ham9yX3ZlcnNpb24gPj0gMzsKICB9CgogIC8qCiAgLyBTaGlueSAxLjQgYnVtcGVkIGpRdWVyeSBmcm9tIDEueCB0byAzLnggd2hpY2ggbWVhbnMgalF1ZXJ5J3MKICAvIG9uLXJlYWR5IGhhbmRsZXIgKGkuZS4sICQoZm4pKSBpcyBub3cgYXN5bmNyb25vdXMgKGkuZS4sIGl0IG5vdwogIC8gcmVhbGx5IG1lYW5zICQoc2V0VGltZW91dChmbikpLgogIC8gaHR0cHM6Ly9qcXVlcnkuY29tL3VwZ3JhZGUtZ3VpZGUvMy4wLyNicmVha2luZy1jaGFuZ2UtZG9jdW1lbnQtcmVhZHktaGFuZGxlcnMtYXJlLW5vdy1hc3luY2hyb25vdXMKICAvCiAgLyBTaW5jZSBTaGlueSB1c2VzICQoKSB0byBzY2hlZHVsZSBpbml0U2hpbnksIHNoaW55Pj0xLjQgY2FsbHMgaW5pdFNoaW55CiAgLyBvbmUgdGljayBsYXRlciB0aGFuIGl0IGRpZCBiZWZvcmUsIHdoaWNoIG1lYW5zIHN0YXRpY1JlbmRlcigpIGlzCiAgLyBjYWxsZWQgcmVuZGVyVmFsdWUoKSBlYXJsaWVyIHRoYW4gKGFkdmFuY2VkKSB3aWRnZXQgYXV0aG9ycyBtaWdodCBiZSBleHBlY3RpbmcuCiAgLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9zaGlueS9pc3N1ZXMvMjYzMAogIC8KICAvIEZvciBhIGNvbmNyZXRlIGV4YW1wbGUsIGxlYWZsZXQgaGFzIHNvbWUgbWV0aG9kcyAoZS5nLiwgdXBkYXRlQm91bmRzKQogIC8gd2hpY2ggcmVmZXJlbmNlIFNoaW55IG1ldGhvZHMgcmVnaXN0ZXJlZCBpbiBpbml0U2hpbnkgKGUuZy4sIHNldElucHV0VmFsdWUpLgogIC8gU2luY2UgbGVhZmxldCBpcyBwcml2eSB0byB0aGlzIGxpZmUtY3ljbGUsIGl0IGtub3dzIHRvIHVzZSBzZXRUaW1lb3V0KCkgdG8KICAvIGRlbGF5IGV4ZWN1dGlvbiBvZiB0aG9zZSBtZXRob2RzICh1bnRpbCBTaGlueSBtZXRob2RzIGFyZSByZWFkeSkKICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvYmxvYi8xOGVjOTgxL2phdmFzY3JpcHQvc3JjL2luZGV4LmpzI0wyNjYtTDI2OAogIC8KICAvIElkZWFsbHkgd2lkZ2V0IGF1dGhvcnMgd291bGRuJ3QgbmVlZCB0byB1c2UgdGhpcyBzZXRUaW1lb3V0KCkgaGFjayB0aGF0CiAgLyBsZWFmbGV0IHVzZXMgdG8gY2FsbCBTaGlueSBtZXRob2RzIG9uIGEgc3RhdGljUmVuZGVyKCkuIEluIHRoZSBsb25nIHJ1biwKICAvIHRoZSBsb2dpYyBpbml0U2hpbnkgc2hvdWxkIGJlIGJyb2tlbiB1cCBzbyB0aGF0IG1ldGhvZCByZWdpc3RyYXRpb24gaGFwcGVucwogIC8gcmlnaHQgYXdheSwgYnV0IGJpbmRpbmcgaGFwcGVucyBsYXRlci4KICAqLwogIGZ1bmN0aW9uIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKSB7CiAgICBpZiAoc2hpbnlNb2RlICYmIGhhc19qUXVlcnkzKCkpIHsKICAgICAgd2luZG93LmpRdWVyeSh3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgIH0KICB9CgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBhcmd1bWVudHMuY2FsbGVlLCBmYWxzZSk7CiAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgIH0sIGZhbHNlKTsKICB9IGVsc2UgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7CiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUpOwogICAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgICAgfQogICAgfSk7CiAgfQoKCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsKICAgIC8vIElmIG5vIGtleSwgZGVmYXVsdCB0byB0aGUgZmlyc3QgaXRlbQogICAgaWYgKHR5cGVvZihrZXkpID09PSAidW5kZWZpbmVkIikKICAgICAga2V5ID0gMTsKCiAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlcG5hbWUgKyAiLSIgKyBrZXkgKyAiLWF0dGFjaG1lbnQiKTsKICAgIGlmICghbGluaykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0dGFjaG1lbnQgIiArIGRlcG5hbWUgKyAiLyIgKyBrZXkgKyAiIG5vdCBmb3VuZCBpbiBkb2N1bWVudCIpOwogICAgfQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgewogICAgdmFyIG5hbWVzID0gW107CiAgICB2YXIgbGVuZ3RoOwogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgewogICAgICAgIGlmIChkZi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGxlbmd0aCkgIT09ICJ1bmRlZmluZWQiICYmIGxlbmd0aCAhPT0gZGZbbmFtZV0ubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoID0gZGZbbmFtZV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBpdGVtOwogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgewogICAgICAgIGl0ZW0gPSB7fTsKICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuYW1lcy5sZW5ndGg7IGNvbCsrKSB7CiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOwogICAgICAgIH0KICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMudHJhbnNwb3NlQXJyYXkyRCA9IGZ1bmN0aW9uKGFycmF5KSB7CiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBhcnJheTsKICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgewogICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbihyb3cpIHsKICAgICAgICAgICAgICByZXR1cm4gcm93W2ldCiAgICAgICAgICB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ld0FycmF5OwogIH07CiAgLy8gU3BsaXQgdmFsdWUgYXQgc3BsaXRDaGFyLCBidXQgYWxsb3cgc3BsaXRDaGFyIHRvIGJlIGVzY2FwZWQKICAvLyB1c2luZyBlc2NhcGVDaGFyLiBBbnkgb3RoZXIgY2hhcmFjdGVycyBlc2NhcGVkIGJ5IGVzY2FwZUNoYXIKICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLgogIGZ1bmN0aW9uIHNwbGl0V2l0aEVzY2FwZSh2YWx1ZSwgc3BsaXRDaGFyLCBlc2NhcGVDaGFyKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgIHZhciBjdXJyZW50UmVzdWx0ID0gIiI7CiAgICBmb3IgKHZhciBwb3MgPSAwOyBwb3MgPCB2YWx1ZS5sZW5ndGg7IHBvcysrKSB7CiAgICAgIGlmICghZXNjYXBlTW9kZSkgewogICAgICAgIGlmICh2YWx1ZVtwb3NdID09PSBzcGxpdENoYXIpIHsKICAgICAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW3Bvc10gPT09IGVzY2FwZUNoYXIpIHsKICAgICAgICAgIGVzY2FwZU1vZGUgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICBlc2NhcGVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChjdXJyZW50UmVzdWx0ICE9PSAiIikgewogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CiAgLy8gRnVuY3Rpb24gYXV0aG9yZWQgYnkgWWlodWkvSkogQWxsYWlyZQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlciA9IGZ1bmN0aW9uKG8sIG1lbWJlcikgewogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsKICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07CiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQogICAgICBpZiAobyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gIm9iamVjdCIgJiYgcGFydCBpbiBvKSB7CiAgICAgICAgaWYgKGkgPT0gKGwgLSAxKSkgeyAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGVuIGV2YWx1bGF0ZQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikKICAgICAgICAgICAgb1twYXJ0XSA9IHRyeUV2YWwob1twYXJ0XSk7CiAgICAgICAgfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHRvIG5leHQgZW1iZWRkZWQgb2JqZWN0CiAgICAgICAgICBvID0gb1twYXJ0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuCiAgLy8gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCwgb3IgbnVsbCBpZiBub25lLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICByZXR1cm4gZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpOwogIH07CgogIC8vIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzY29wZSB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLAogIC8vIGFuZCByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YKICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVsZW1lbnQsIGlmIGFueS4gSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZQogIC8vIHNlbGVjdG9yLCBvciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8gSFRNTFdpZGdldAogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAoZWwgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKGVsKTsKICAgIH0KICB9OwoKICAvLyBGaW5kcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLCBhbmQKICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50cywgaW4gYW4gYXJyYXkuIElmIGVsZW1lbnRzIHRoYXQKICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQKICAvLyBpbnN0YW5jZSwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbiBudWxscy4KICAvLwogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4KICB3aW5kb3cuSFRNTFdpZGdldHMuZmluZEFsbCA9IGZ1bmN0aW9uKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICBzZWxlY3RvciA9IHNjb3BlOwogICAgICBzY29wZSA9IGRvY3VtZW50OwogICAgfQoKICAgIHZhciBub2RlcyA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0cy5wdXNoKHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShub2Rlc1tpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOwogIGZ1bmN0aW9uIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpIHsKICAgIHdoaWxlIChwb3N0UmVuZGVySGFuZGxlcnMubGVuZ3RoKSB7CiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7CiAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgaGFuZGxlcigpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZWdpc3RlciB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUKICAvLyBuZXh0IHRpbWUgc3RhdGljIHdpZGdldHMgYXJlIHJlbmRlcmVkLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICBwb3N0UmVuZGVySGFuZGxlcnMucHVzaChjYWxsYmFjayk7CiAgfTsKCiAgLy8gVGFrZXMgYSBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbiwgYW5kIHJldHVybnMgYW4KICAvLyBvbGQtc3R5bGUgY2xhc3MtYm91bmQgZGVmaW5pdGlvbi4gVGhpcyBzYXZlcyB1cyBmcm9tIGhhdmluZwogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoCiAgLy8gdHlwZXMgb2YgZGVmaW5pdGlvbnMuCiAgZnVuY3Rpb24gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmbikgewogICAgdmFyIHJlc3VsdCA9IHsKICAgICAgbmFtZTogZGVmbi5uYW1lLAogICAgICB0eXBlOiBkZWZuLnR5cGUsCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGRlZm4uZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0sCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyVmFsdWUoeCk7CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgfQogICAgfTsKCiAgICBpZiAoZGVmbi5maW5kKQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsKICAgIGlmIChkZWZuLnJlbmRlckVycm9yKQogICAgICByZXN1bHQucmVuZGVyRXJyb3IgPSBkZWZuLnJlbmRlckVycm9yOwogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikKICAgICAgcmVzdWx0LmNsZWFyRXJyb3IgPSBkZWZuLmNsZWFyRXJyb3I7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0pKCk7Cgo=\"></script>\n",
       "<script title=\"plotly-binding\" src=\"data:application/javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICByZXR1cm4ge307CiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgIGlmIChpbnN0YW5jZS5hdXRvc2l6ZSkgewogICAgICB2YXIgd2lkdGggPSBpbnN0YW5jZS53aWR0aCB8fCB3aWR0aDsKICAgICAgdmFyIGhlaWdodCA9IGluc3RhbmNlLmhlaWdodCB8fCBoZWlnaHQ7CiAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwge3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgIH0KICB9LCAgCiAgCiAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgCiAgICAvKiAKICAgIC8gJ2luZm9ybSB0aGUgd29ybGQnIGFib3V0IGhpZ2hsaWdodGluZyBvcHRpb25zIHRoaXMgaXMgc28gb3RoZXIKICAgIC8gY3Jvc3N0YWxrIGxpYnJhcmllcyBoYXZlIGEgY2hhbmNlIHRvIHJlc3BvbmQgdG8gc3BlY2lhbCBzZXR0aW5ncyAKICAgIC8gc3VjaCBhcyBwZXJzaXN0ZW50IHNlbGVjdGlvbi4gCiAgICAvIEFGQUlLLCBsZWFmbGV0IGlzIHRoZSBvbmx5IGxpYnJhcnkgd2l0aCBzdWNoIGludGVyZ3JhdGlvbgogICAgLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9sZWFmbGV0L3B1bGwvMzQ2L2ZpbGVzI2RpZmYtYWQwYzJkNTFjZTVmZGY4YzkwYzczOTViMTAyZjQyNjVSMTU0CiAgICAqLwogICAgdmFyIGN0Q29uZmlnID0gY3Jvc3N0YWxrLnZhcigncGxvdGx5Q3Jvc3N0YWxrT3B0cycpLnNldCh4LmhpZ2hsaWdodCk7CiAgICAgIAogICAgaWYgKHR5cGVvZih3aW5kb3cpICE9PSAidW5kZWZpbmVkIikgewogICAgICAvLyBtYWtlIHN1cmUgcGxvdHMgZG9uJ3QgZ2V0IGNyZWF0ZWQgb3V0c2lkZSB0aGUgbmV0d29yayAoZm9yIG9uLXByZW0pCiAgICAgIHdpbmRvdy5QTE9UTFlFTlYgPSB3aW5kb3cuUExPVExZRU5WIHx8IHt9OwogICAgICB3aW5kb3cuUExPVExZRU5WLkJBU0VfVVJMID0geC5iYXNlX3VybDsKICAgICAgCiAgICAgIC8vIEVuYWJsZSBwZXJzaXN0ZW50IHNlbGVjdGlvbiB3aGVuIHNoaWZ0IGtleSBpcyBkb3duCiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4Mjg2MTMvY2hlY2staWYtYS1rZXktaXMtZG93bgogICAgICB2YXIgcGVyc2lzdE9uU2hpZnQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKCFlKSB3aW5kb3cuZXZlbnQ7CiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50ID0gdHJ1ZTsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50U2hpZnQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50ID0gZmFsc2U7IAogICAgICAgICAgeC5oaWdobGlnaHQucGVyc2lzdGVudFNoaWZ0ID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9OwogICAgICAKICAgICAgLy8gT25seSByZWxldmFudCBpZiB3ZSBoYXZlbid0IGZvcmNlZCBwZXJzaXN0ZW50IG1vZGUgYXQgY29tbWFuZCBsaW5lCiAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgIHdpbmRvdy5vbm1vdXNlbW92ZSA9IHBlcnNpc3RPblNoaWZ0OwogICAgICB9CiAgICB9CgogICAgdmFyIGdyYXBoRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwuaWQpOwogICAgCiAgICAvLyBUT0RPOiBtb3ZlIHRoZSBjb250cm9sIHBhbmVsIGluamVjdGlvbiBzdHJhdGVneSBpbnNpZGUgaGVyZS4uLgogICAgSFRNTFdpZGdldHMuYWRkUG9zdFJlbmRlckhhbmRsZXIoZnVuY3Rpb24oKSB7CiAgICAgIAogICAgICAvLyBsb3dlciB0aGUgei1pbmRleCBvZiB0aGUgbW9kZWJhciB0byBwcmV2ZW50IGl0IGZyb20gaGlnaGphY2tpbmcgaG92ZXIKICAgICAgLy8gKFRPRE86IGRvIHRoaXMgdmlhIENTUz8pCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yb3BlbnNjaS9wbG90bHkvaXNzdWVzLzk1NgogICAgICAvLyBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL3Byb3Bfc3R5bGVfemluZGV4LmFzcAogICAgICB2YXIgbW9kZWJhcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSAubW9kZWJhciIpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGViYXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbW9kZWJhcnNbaV0uc3R5bGUuekluZGV4ID0gMTsKICAgICAgfQogICAgfSk7CiAgICAgIAogICAgICAvLyBpbmplY3QgYSAiY29udHJvbCBwYW5lbCIgaG9sZGluZyBzZWxlY3RpemUvZHluYW1pYyBjb2xvciB3aWRnZXQocykKICAgIGlmICh4LnNlbGVjdGl6ZSB8fCB4LmhpZ2hsaWdodC5keW5hbWljICYmICFpbnN0YW5jZS5wbG90bHkpIHsKICAgICAgdmFyIGZsZXggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgZmxleC5jbGFzcyA9ICJwbG90bHktY3Jvc3N0YWxrLWNvbnRyb2wtcGFuZWwiOwogICAgICBmbGV4LnN0eWxlID0gImRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcCI7CiAgICAgIAogICAgICAvLyBpbmplY3QgdGhlIGNvbG91cnBpY2tlciBIVE1MIGNvbnRhaW5lciBpbnRvIHRoZSBmbGV4Ym94CiAgICAgIGlmICh4LmhpZ2hsaWdodC5keW5hbWljKSB7CiAgICAgICAgdmFyIHBpY2tlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIAogICAgICAgIHZhciBwaWNrZXJJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICAgICAgcGlja2VySW5wdXQuaWQgPSBlbC5pZCArICItY29sb3VycGlja2VyIjsKICAgICAgICBwaWNrZXJJbnB1dC5wbGFjZWhvbGRlciA9ICJhc2Rhc2QiOwogICAgICAgIAogICAgICAgIHZhciBwaWNrZXJMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CiAgICAgICAgcGlja2VyTGFiZWwuZm9yID0gcGlja2VySW5wdXQuaWQ7CiAgICAgICAgcGlja2VyTGFiZWwuaW5uZXJIVE1MID0gIkJydXNoIGNvbG9yJm5ic3A7Jm5ic3A7IjsKICAgICAgICAKICAgICAgICBwaWNrZXJEaXYuYXBwZW5kQ2hpbGQocGlja2VyTGFiZWwpOwogICAgICAgIHBpY2tlckRpdi5hcHBlbmRDaGlsZChwaWNrZXJJbnB1dCk7CiAgICAgICAgZmxleC5hcHBlbmRDaGlsZChwaWNrZXJEaXYpOwogICAgICB9CiAgICAgIAogICAgICAvLyBpbmplY3Qgc2VsZWN0aXplIEhUTUwgY29udGFpbmVycyAob25lIGZvciBldmVyeSBjcm9zc3RhbGsgZ3JvdXApCiAgICAgIGlmICh4LnNlbGVjdGl6ZSkgewogICAgICAgIHZhciBpZHMgPSBPYmplY3Qua2V5cyh4LnNlbGVjdGl6ZSk7CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIGNvbnRhaW5lci5pZCA9IGlkc1tpXTsKICAgICAgICAgIGNvbnRhaW5lci5zdHlsZSA9ICJ3aWR0aDogODAlOyBoZWlnaHQ6IDEwJSI7CiAgICAgICAgICBjb250YWluZXIuY2xhc3MgPSAiZm9ybS1ncm91cCBjcm9zc3RhbGstaW5wdXQtcGxvdGx5LWhpZ2hsaWdodCI7CiAgICAgICAgICAKICAgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CiAgICAgICAgICBsYWJlbC5mb3IgPSBpZHNbaV07CiAgICAgICAgICBsYWJlbC5pbm5lckhUTUwgPSB4LnNlbGVjdGl6ZVtpZHNbaV1dLmdyb3VwOwogICAgICAgICAgbGFiZWwuY2xhc3MgPSAiY29udHJvbC1sYWJlbCI7CiAgICAgICAgICAKICAgICAgICAgIHZhciBzZWxlY3REaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKICAgICAgICAgIHNlbGVjdC5tdWx0aXBsZSA9IHRydWU7CiAgICAgICAgICAKICAgICAgICAgIHNlbGVjdERpdi5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsKTsKICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxlY3REaXYpOwogICAgICAgICAgZmxleC5hcHBlbmRDaGlsZChjb250YWluZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLy8gZmluYWxseSwgaW5zZXJ0IHRoZSBmbGV4Ym94IGluc2lkZSB0aGUgaHRtbHdpZGdldCBjb250YWluZXIsCiAgICAgIC8vIGJ1dCBiZWZvcmUgdGhlIHBsb3RseSBncmFwaCBkaXYKICAgICAgZ3JhcGhEaXYucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoZmxleCwgZ3JhcGhEaXYpOwogICAgICAKICAgICAgaWYgKHguaGlnaGxpZ2h0LmR5bmFtaWMpIHsKICAgICAgICB2YXIgcGlja2VyID0gJCgiIyIgKyBwaWNrZXJJbnB1dC5pZCk7CiAgICAgICAgdmFyIGNvbG9ycyA9IHguaGlnaGxpZ2h0LmNvbG9yIHx8IFtdOwogICAgICAgIC8vIFRPRE86IGxldCB1c2VycyBzcGVjaWZ5IG9wdGlvbnM/CiAgICAgICAgdmFyIG9wdHMgPSB7CiAgICAgICAgICB2YWx1ZTogY29sb3JzWzBdLAogICAgICAgICAgc2hvd0NvbG91cjogImJvdGgiLAogICAgICAgICAgcGFsZXR0ZTogImxpbWl0ZWQiLAogICAgICAgICAgYWxsb3dlZENvbHM6IGNvbG9ycy5qb2luKCIgIiksCiAgICAgICAgICB3aWR0aDogIjIwJSIsCiAgICAgICAgICBoZWlnaHQ6ICIxMCUiCiAgICAgICAgfTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKHtjaGFuZ2VEZWxheTogMH0pOwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoInNldHRpbmdzIiwgb3B0cyk7CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcigidmFsdWUiLCBvcHRzLnZhbHVlKTsKICAgICAgICAvLyBpbmZvcm0gY3Jvc3N0YWxrIGFib3V0IGEgY2hhbmdlIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBjb2xvdXIKICAgICAgICB2YXIgZ3JwcyA9IHguaGlnaGxpZ2h0LmN0R3JvdXBzIHx8IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3Jwcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgY3Jvc3N0YWxrLmdyb3VwKGdycHNbaV0pLnZhcigncGxvdGx5U2VsZWN0aW9uQ29sb3VyJykKICAgICAgICAgICAgLnNldChwaWNrZXIuY29sb3VycGlja2VyKCd2YWx1ZScpKTsKICAgICAgICB9CiAgICAgICAgcGlja2VyLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3Jwcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBjcm9zc3RhbGsuZ3JvdXAoZ3Jwc1tpXSkudmFyKCdwbG90bHlTZWxlY3Rpb25Db2xvdXInKQogICAgICAgICAgICAgIC5zZXQocGlja2VyLmNvbG91cnBpY2tlcigndmFsdWUnKSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gaWYgbm8gcGxvdCBleGlzdHMgeWV0LCBjcmVhdGUgb25lIHdpdGggYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24KICAgIGlmICghaW5zdGFuY2UucGxvdGx5KSB7CiAgICAgIAogICAgICB2YXIgcGxvdCA9IFBsb3RseS5wbG90KGdyYXBoRGl2LCB4KTsKICAgICAgaW5zdGFuY2UucGxvdGx5ID0gdHJ1ZTsKICAgICAgaW5zdGFuY2UuYXV0b3NpemUgPSB4LmxheW91dC5hdXRvc2l6ZSB8fCB0cnVlOwogICAgICBpbnN0YW5jZS53aWR0aCA9IHgubGF5b3V0LndpZHRoOwogICAgICBpbnN0YW5jZS5oZWlnaHQgPSB4LmxheW91dC5oZWlnaHQ7CiAgICAgIAogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIC8vIG5ldyB4IGRhdGEgY291bGQgY29udGFpbiBhIG5ldyBoZWlnaHQvd2lkdGguLi4KICAgICAgLy8gYXR0YWNoIHRvIGluc3RhbmNlIHNvIHRoYXQgcmVzaXplIGxvZ2ljIGtub3dzIGFib3V0IHRoZSBuZXcgc2l6ZQogICAgICBpbnN0YW5jZS53aWR0aCA9IHgubGF5b3V0LndpZHRoIHx8IGluc3RhbmNlLndpZHRoOwogICAgICBpbnN0YW5jZS5oZWlnaHQgPSB4LmxheW91dC5oZWlnaHQgfHwgaW5zdGFuY2UuaGVpZ2h0OwogICAgICAKICAgICAgLy8gdGhpcyBpcyBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIFBsb3RseS5uZXdQbG90KCksIGJ1dCBhdm9pZHMgY3JlYXRpbmcgCiAgICAgIC8vIGEgbmV3IHdlYmdsIGNvbnRleHQKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Bsb3RseS9wbG90bHkuanMvYmxvYi8yYjI0ZjlkZWY5MDE4MzFlNjEyODIwNzZjZjNmODM1NTk4ZDU2ZjBlL3NyYy9wbG90X2FwaS9wbG90X2FwaS5qcyNMNTMxLUw1MzIKCiAgICAgIC8vIFRPRE86IHJlc3RvcmUgY3Jvc3N0YWxrIHNlbGVjdGlvbnM/CiAgICAgIFBsb3RseS5wdXJnZShncmFwaERpdik7CiAgICAgIC8vIFRPRE86IHdoeSBpcyB0aGlzIG5lY2Vzc2FyeSB0byBnZXQgY3Jvc3N0YWxrIHdvcmtpbmc/CiAgICAgIGdyYXBoRGl2LmRhdGEgPSB1bmRlZmluZWQ7CiAgICAgIGdyYXBoRGl2LmxheW91dCA9IHVuZGVmaW5lZDsKICAgICAgdmFyIHBsb3QgPSBQbG90bHkucGxvdChncmFwaERpdiwgeCk7CiAgICB9CiAgICAKICAgIC8vIFRyaWdnZXIgcGxvdGx5LmpzIGNhbGxzIGRlZmluZWQgdmlhIGBwbG90bHlQcm94eSgpYAogICAgcGxvdC50aGVuKGZ1bmN0aW9uKCkgewogICAgICBpZiAoSFRNTFdpZGdldHMuc2hpbnlNb2RlKSB7CiAgICAgICAgU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoInBsb3RseS1jYWxscyIsIGZ1bmN0aW9uKG1zZykgewogICAgICAgICAgdmFyIGdkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobXNnLmlkKTsKICAgICAgICAgIGlmICghZ2QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBmaW5kIHBsb3RseSBncmFwaCB3aXRoIGlkOiAiICsgbXNnLmlkKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIFRoaXMgaXNuJ3QgYW4gb2ZmaWNpYWwgcGxvdGx5LmpzIG1ldGhvZCwgYnV0IGl0J3MgdGhlIG9ubHkgY3VycmVudCB3YXkgdG8gCiAgICAgICAgICAvLyBjaGFuZ2UganVzdCB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHBsb3QgCiAgICAgICAgICAvLyBodHRwczovL2NvbW11bml0eS5wbG90Lmx5L3QvdXBkYXRlLWNvbmZpZy1mdW5jdGlvbi85MDU3CiAgICAgICAgICBpZiAobXNnLm1ldGhvZCA9PSAicmVjb25maWciKSB7CiAgICAgICAgICAgIFBsb3RseS5yZWFjdChnZCwgZ2QuZGF0YSwgZ2QubGF5b3V0LCBtc2cuYXJncyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghUGxvdGx5W21zZy5tZXRob2RdKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXRob2QgIiArIG1zZy5tZXRob2QpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGFyZ3MgPSBbZ2RdLmNvbmNhdChtc2cuYXJncyk7CiAgICAgICAgICBQbG90bHlbbXNnLm1ldGhvZF0uYXBwbHkobnVsbCwgYXJncyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgCiAgICAgIC8vIHBsb3RseSdzIG1hcGJveCBBUEkgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBzZXR0aW5nIGJvdW5kaW5nIGJveGVzCiAgICAgIC8vIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZml0Ym91bmRzLwogICAgICAvLyBzbyB3ZSBkbyB0aGlzIG1hbnVhbGx5Li4uCiAgICAgIC8vIFRPRE86IG1ha2Ugc3VyZSB0aGlzIHRyaWdnZXJzIG9uIGEgcmVkcmF3IGFuZCByZWxheW91dCBhcyB3ZWxsIGFzIG9uIGluaXRpYWwgZHJhdwogICAgICB2YXIgbWFwYm94SURzID0gZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLm1hcGJveCB8fCBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBib3hJRHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgaWQgPSBtYXBib3hJRHNbaV07CiAgICAgICAgdmFyIG1hcE9wdHMgPSB4LmxheW91dFtpZF0gfHwge307CiAgICAgICAgdmFyIGFyZ3MgPSBtYXBPcHRzLl9maXRCb3VuZHMgfHwge307CiAgICAgICAgaWYgKCFhcmdzKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdmFyIG1hcE9iaiA9IGdyYXBoRGl2Ll9mdWxsTGF5b3V0W2lkXS5fc3VicGxvdC5tYXA7CiAgICAgICAgbWFwT2JqLmZpdEJvdW5kcyhhcmdzLmJvdW5kcywgYXJncy5vcHRpb25zKTsKICAgICAgfQogICAgICAKICAgIH0pOwogICAgCiAgICAvLyBBdHRhY2ggYXR0cmlidXRlcyAoZS5nLiwgImtleSIsICJ6IikgdG8gcGxvdGx5IGV2ZW50IGRhdGEKICAgIGZ1bmN0aW9uIGV2ZW50RGF0YVdpdGhLZXkoZXZlbnREYXRhKSB7CiAgICAgIGlmIChldmVudERhdGEgPT09IHVuZGVmaW5lZCB8fCAhZXZlbnREYXRhLmhhc093blByb3BlcnR5KCJwb2ludHMiKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBldmVudERhdGEucG9pbnRzLm1hcChmdW5jdGlvbihwdCkgewogICAgICAgIHZhciBvYmogPSB7CiAgICAgICAgICBjdXJ2ZU51bWJlcjogcHQuY3VydmVOdW1iZXIsIAogICAgICAgICAgcG9pbnROdW1iZXI6IHB0LnBvaW50TnVtYmVyLCAKICAgICAgICAgIHg6IHB0LngsCiAgICAgICAgICB5OiBwdC55CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICAvLyBJZiAneicgaXMgcmVwb3J0ZWQgd2l0aCB0aGUgZXZlbnQgZGF0YSwgdGhlbiB1c2UgaXQhCiAgICAgICAgaWYgKHB0Lmhhc093blByb3BlcnR5KCJ6IikpIHsKICAgICAgICAgIG9iai56ID0gcHQuejsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHB0Lmhhc093blByb3BlcnR5KCJjdXN0b21kYXRhIikpIHsKICAgICAgICAgIG9iai5jdXN0b21kYXRhID0gcHQuY3VzdG9tZGF0YTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogCiAgICAgICAgICBUTDtEUjogKEkgdGhpbmspIHdlIGhhdmUgdG8gc2VsZWN0IHRoZSBncmFwaCBkaXYgKGFnYWluKSB0byBhdHRhY2gga2V5cy4uLgogICAgICAgICAgCiAgICAgICAgICBXaHk/IFJlbWVtYmVyIHRoYXQgY3Jvc3N0YWxrIHdpbGwgZHluYW1pY2FsbHkgYWRkL2RlbGV0ZSB0cmFjZXMgCiAgICAgICAgICAoc2VlIHRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlU2VsZWN0aW9uKCkgYmVsb3cpCiAgICAgICAgICBGb3IgdGhpcyByZWFzb24sIHdlIGNhbid0IHNpbXBseSBncmFiIGtleXMgZnJvbSB4LmRhdGEgKGxpa2Ugd2UgZGlkIHByZXZpb3VzbHkpCiAgICAgICAgICBNb3Jlb3Zlciwgd2UgY2FuJ3QgdXNlIF9mdWxsRGF0YSwgc2luY2UgdGhhdCBkb2Vzbid0IGluY2x1ZGUgCiAgICAgICAgICB1bm9mZmljaWFsIGF0dHJpYnV0ZXMuIEl0J3MgdHJ1ZSB0aGF0IGNsaWNrL2hvdmVyIGV2ZW50cyBmaXJlIHdpdGggCiAgICAgICAgICBwdC5kYXRhLCBidXQgZHJhZyBldmVudHMgZG9uJ3QuLi4KICAgICAgICAqLwogICAgICAgIHZhciBnZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsLmlkKTsKICAgICAgICB2YXIgdHJhY2UgPSBnZC5kYXRhW3B0LmN1cnZlTnVtYmVyXTsKICAgICAgICAKICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgdmFyIGF0dHJzVG9BdHRhY2ggPSBbImtleSJdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBzaW1wbGUga2V5cyBmaXJlIHRoZSB3aG9sZSBrZXkKICAgICAgICAgIG9iai5rZXkgPSB0cmFjZS5rZXk7CiAgICAgICAgICB2YXIgYXR0cnNUb0F0dGFjaCA9IFtdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzVG9BdHRhY2gubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBhdHRyID0gdHJhY2VbYXR0cnNUb0F0dGFjaFtpXV07CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyKSkgewogICAgICAgICAgICAgIC8vIHBvaW50TnVtYmVyIGNhbiBiZSBhbiBhcnJheSAoZS5nLiwgaGVhdG1hcHMpCiAgICAgICAgICAgICAgLy8gVE9ETzogY2FuIHBvaW50TnVtYmVyIGJlIDNEPwogICAgICAgICAgICAgIG9ialthdHRyc1RvQXR0YWNoW2ldXSA9IHR5cGVvZiBwdC5wb2ludE51bWJlciA9PT0gIm51bWJlciIgPyAKICAgICAgICAgICAgICAgIGF0dHJbcHQucG9pbnROdW1iZXJdIDogYXR0cltwdC5wb2ludE51bWJlclswXV1bcHQucG9pbnROdW1iZXJbMV1dOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqOwogICAgICB9KTsKICAgIH0KICAgIAogICAgCiAgICB2YXIgbGVnZW5kRXZlbnREYXRhID0gZnVuY3Rpb24oZCkgewogICAgICAvLyBpZiBsZWdlbmRncm91cCBpcyBub3QgcmVsZXZhbnQganVzdCByZXR1cm4gdGhlIHRyYWNlCiAgICAgIHZhciB0cmFjZSA9IGQuZGF0YVtkLmN1cnZlTnVtYmVyXTsKICAgICAgaWYgKCF0cmFjZS5sZWdlbmRncm91cCkgcmV0dXJuIHRyYWNlOwogICAgICAKICAgICAgLy8gaWYgbGVnZW5kZ3JvdXAgd2FzIHNwZWNpZmllZCwgcmV0dXJuIGFsbCB0cmFjZXMgdGhhdCBtYXRjaCB0aGUgZ3JvdXAKICAgICAgdmFyIGxlZ2VuZGdycHMgPSBkLmRhdGEubWFwKGZ1bmN0aW9uKHRyYWNlKXsgcmV0dXJuIHRyYWNlLmxlZ2VuZGdyb3VwOyB9KTsKICAgICAgdmFyIHRyYWNlcyA9IFtdOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbGVnZW5kZ3Jwcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChsZWdlbmRncnBzW2ldID09IHRyYWNlLmxlZ2VuZGdyb3VwKSB7CiAgICAgICAgICB0cmFjZXMucHVzaChkLmRhdGFbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgcmV0dXJuIHRyYWNlczsKICAgIH07CgogICAgCiAgICAvLyBzZW5kIHVzZXIgaW5wdXQgZXZlbnQgZGF0YSB0byBzaGlueQogICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSkgewogICAgICAKICAgICAgLy8gU29tZSBldmVudHMgY2xlYXIgb3RoZXIgaW5wdXQgdmFsdWVzCiAgICAgIC8vIFRPRE86IGFsd2F5cyByZWdpc3RlciB0aGVzZT8KICAgICAgdmFyIGV2ZW50Q2xlYXJNYXAgPSB7CiAgICAgICAgcGxvdGx5X2Rlc2VsZWN0OiBbInBsb3RseV9zZWxlY3RlZCIsICJwbG90bHlfc2VsZWN0aW5nIiwgInBsb3RseV9icnVzaGVkIiwgInBsb3RseV9icnVzaGluZyIsICJwbG90bHlfY2xpY2siXSwKICAgICAgICBwbG90bHlfdW5ob3ZlcjogWyJwbG90bHlfaG92ZXIiXSwKICAgICAgICBwbG90bHlfZG91YmxlY2xpY2s6IFsicGxvdGx5X2NsaWNrIl0KICAgICAgfTsKICAgIAogICAgICBPYmplY3Qua2V5cyhldmVudENsZWFyTWFwKS5tYXAoZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgZ3JhcGhEaXYub24oZXZ0LCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBpbnB1dHNUb0NsZWFyID0gZXZlbnRDbGVhck1hcFtldnRdOwogICAgICAgICAgaW5wdXRzVG9DbGVhci5tYXAoZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShpbnB1dCArICItIiArIHguc291cmNlLCBudWxsLCB7cHJpb3JpdHk6ICJldmVudCJ9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgCiAgICAgIHZhciBldmVudERhdGFGdW5jdGlvbk1hcCA9IHsKICAgICAgICBwbG90bHlfY2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X2hvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIHBsb3RseV91bmhvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIC8vIElmICdwbG90bHlfc2VsZWN0ZWQnIGhhcyBhbHJlYWR5IGJlZW4gZmlyZWQsIGFuZCB5b3UgY2xpY2sKICAgICAgICAvLyBvbiB0aGUgcGxvdCBhZnRlcndhcmRzLCB0aGlzIGV2ZW50IGZpcmVzIGB1bmRlZmluZWRgPyE/CiAgICAgICAgLy8gVGhhdCBtaWdodCBiZSBjb25zaWRlcmVkIGEgcGxvdGx5LmpzIGJ1ZywgYnV0IGl0IGRvZXNuJ3QgbWFrZSAKICAgICAgICAvLyBzZW5zZSBmb3IgdGhpcyBpbnB1dCBjaGFuZ2UgdG8gb2NjdXIgaWYgYGRgIGlzIGZhbHN5IGJlY2F1c2UsCiAgICAgICAgLy8gZXZlbiBpbiB0aGUgZW1wdHkgc2VsZWN0aW9uIGNhc2UsIGBkYCBpcyB0cnV0aHkgKGFuIG9iamVjdCksCiAgICAgICAgLy8gYW5kIHRoZSAncGxvdGx5X2Rlc2VsZWN0JyBldmVudCB3aWxsIHJlc2V0IHRoaXMgaW5wdXQKICAgICAgICBwbG90bHlfc2VsZWN0ZWQ6IGZ1bmN0aW9uKGQpIHsgaWYgKGQpIHsgcmV0dXJuIGV2ZW50RGF0YVdpdGhLZXkoZCk7IH0gfSwKICAgICAgICBwbG90bHlfc2VsZWN0aW5nOiBmdW5jdGlvbihkKSB7IGlmIChkKSB7IHJldHVybiBldmVudERhdGFXaXRoS2V5KGQpOyB9IH0sCiAgICAgICAgcGxvdGx5X2JydXNoZWQ6IGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIGlmIChkKSB7IHJldHVybiBkLnJhbmdlID8gZC5yYW5nZSA6IGQubGFzc29Qb2ludHM7IH0KICAgICAgICB9LAogICAgICAgIHBsb3RseV9icnVzaGluZzogZnVuY3Rpb24oZCkgewogICAgICAgICAgaWYgKGQpIHsgcmV0dXJuIGQucmFuZ2UgPyBkLnJhbmdlIDogZC5sYXNzb1BvaW50czsgfQogICAgICAgIH0sCiAgICAgICAgcGxvdGx5X2xlZ2VuZGNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2NsaWNrYW5ub3RhdGlvbjogZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5mdWxsQW5ub3RhdGlvbiB9CiAgICAgIH07CiAgICAgIAogICAgICB2YXIgcmVnaXN0ZXJTaGlueVZhbHVlID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB2YXIgZXZlbnREYXRhUHJlUHJvY2Vzc29yID0gZXZlbnREYXRhRnVuY3Rpb25NYXBbZXZlbnRdIHx8IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQgPyBkIDogZWwuaWQgfTsKICAgICAgICAvLyBzb21lIGV2ZW50cyBhcmUgdW5pcXVlIHRvIHRoZSBSIHBhY2thZ2UKICAgICAgICB2YXIgcGxvdGx5SlNldmVudCA9IChldmVudCA9PSAicGxvdGx5X2JydXNoZWQiKSA/ICJwbG90bHlfc2VsZWN0ZWQiIDogKGV2ZW50ID09ICJwbG90bHlfYnJ1c2hpbmciKSA/ICJwbG90bHlfc2VsZWN0aW5nIiA6IGV2ZW50OwogICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBldmVudAogICAgICAgIGdyYXBoRGl2Lm9uKHBsb3RseUpTZXZlbnQsIGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIFNoaW55LnNldElucHV0VmFsdWUoCiAgICAgICAgICAgIGV2ZW50ICsgIi0iICsgeC5zb3VyY2UsCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVByZVByb2Nlc3NvcihkKSksCiAgICAgICAgICAgIHtwcmlvcml0eTogImV2ZW50In0KICAgICAgICAgICk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIAogICAgICB2YXIgc2hpbnlFdmVudHMgPSB4LnNoaW55RXZlbnRzIHx8IFtdOwogICAgICBzaGlueUV2ZW50cy5tYXAocmVnaXN0ZXJTaGlueVZhbHVlKTsKICAgIH0KICAgIAogICAgLy8gR2l2ZW4gYW4gYXJyYXkgb2Yge2N1cnZlTnVtYmVyOiB4LCBwb2ludE51bWJlcjogeX0gb2JqZWN0cywKICAgIC8vIHJldHVybiBhIGhhc2ggb2YgewogICAgLy8gICBzZXQxOiB7dmFsdWU6IFtrZXkxLCBrZXkyLCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfSwgCiAgICAvLyAgIHNldDI6IHt2YWx1ZTogW2tleTMsIGtleTQsIC4uLl0sIF9pc1NpbXBsZUtleTogZmFsc2V9CiAgICAvLyB9CiAgICBmdW5jdGlvbiBwb2ludHNUb0tleXMocG9pbnRzKSB7CiAgICAgIHZhciBrZXlzQnlTZXQgPSB7fTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAKICAgICAgICB2YXIgdHJhY2UgPSBncmFwaERpdi5kYXRhW3BvaW50c1tpXS5jdXJ2ZU51bWJlcl07CiAgICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgIXRyYWNlLnNldCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHNldCBkZWZhdWx0cyBmb3IgdGhpcyBrZXlTZXQKICAgICAgICAvLyBub3RlIHRoYXQgd2UgZG9uJ3QgdHJhY2sgdGhlIG5lc3RlZCBwcm9wZXJ0eSAoeWV0KSBzaW5jZSB3ZSBhbHdheXMgCiAgICAgICAgLy8gZW1pdCB0aGUgdW5pb24gLS0gaHR0cDovL2Nwc2lldmVydC5naXRodWIuaW8vdGFsa3MvMjAxNjEyMTJiLyMyMQogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdID0ga2V5c0J5U2V0W3RyYWNlLnNldF0gfHwgewogICAgICAgICAgdmFsdWU6IFtdLAogICAgICAgICAgX2lzU2ltcGxlS2V5OiB0cmFjZS5faXNTaW1wbGVLZXkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIFVzZSBwb2ludE51bWJlciBieSBkZWZhdWx0LCBidXQgYWdncmVnYXRlZCB0cmFjZXMgc2hvdWxkIGVtaXQgcG9pbnROdW1iZXJzCiAgICAgICAgdmFyIHB0TnVtID0gcG9pbnRzW2ldLnBvaW50TnVtYmVyOwogICAgICAgIHZhciBoYXNQdE51bSA9IHR5cGVvZiBwdE51bSA9PT0gIm51bWJlciI7CiAgICAgICAgdmFyIHB0TnVtID0gaGFzUHROdW0gPyBwdE51bSA6IHBvaW50c1tpXS5wb2ludE51bWJlcnM7CiAgICAgICAgCiAgICAgICAgLy8gc2VsZWN0aW5nIGEgcG9pbnQgb2YgYSAic2ltcGxlIiB0cmFjZSBtZWFuczogc2VsZWN0IHRoZSAKICAgICAgICAvLyBlbnRpcmUga2V5IGF0dGFjaGVkIHRvIHRoaXMgdHJhY2UsIHdoaWNoIGlzIHVzZWZ1bCBmb3IsCiAgICAgICAgLy8gc2F5IGNsaWNraW5nIG9uIGEgZml0dGVkIGxpbmUgdG8gc2VsZWN0IGNvcnJlc3BvbmRpbmcgb2JzZXJ2YXRpb25zIAogICAgICAgIHZhciBrZXkgPSB0cmFjZS5faXNTaW1wbGVLZXkgPyB0cmFjZS5rZXkgOiBBcnJheS5pc0FycmF5KHB0TnVtKSA/IHB0TnVtLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIHRyYWNlLmtleVtpZHhdOyB9KSA6IHRyYWNlLmtleVtwdE51bV07CiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDg2NTAyNS9tZXJnZS1mbGF0dGVuLWFuLWFycmF5LW9mLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgdmFyIGtleUZsYXQgPSB0cmFjZS5faXNOZXN0ZWRLZXkgPyBbXS5jb25jYXQuYXBwbHkoW10sIGtleSkgOiBrZXk7CiAgICAgICAgCiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHRvIG9ubHkgYWRkIG5ldyB2YWx1ZXM/CiAgICAgICAga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUgPSBrZXlzQnlTZXRbdHJhY2Uuc2V0XS52YWx1ZS5jb25jYXQoa2V5RmxhdCk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBrZXlzQnlTZXQ7CiAgICB9CiAgICAKICAgIAogICAgeC5oaWdobGlnaHQuY29sb3IgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgIC8vIG1ha2Ugc3VyZSBoaWdobGlnaHQgY29sb3IgaXMgYW4gYXJyYXkKICAgIGlmICghQXJyYXkuaXNBcnJheSh4LmhpZ2hsaWdodC5jb2xvcikpIHsKICAgICAgeC5oaWdobGlnaHQuY29sb3IgPSBbeC5oaWdobGlnaHQuY29sb3JdOwogICAgfQoKICAgIHZhciB0cmFjZU1hbmFnZXIgPSBuZXcgVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCB4LmhpZ2hsaWdodCk7CgogICAgLy8gR2F0aGVyIGFsbCAqdW5pcXVlKiBzZXRzLgogICAgdmFyIGFsbFNldHMgPSBbXTsKICAgIGZvciAodmFyIGN1cnZlSWR4ID0gMDsgY3VydmVJZHggPCB4LmRhdGEubGVuZ3RoOyBjdXJ2ZUlkeCsrKSB7CiAgICAgIHZhciBuZXdTZXQgPSB4LmRhdGFbY3VydmVJZHhdLnNldDsKICAgICAgaWYgKG5ld1NldCkgewogICAgICAgIGlmIChhbGxTZXRzLmluZGV4T2YobmV3U2V0KSA9PT0gLTEpIHsKICAgICAgICAgIGFsbFNldHMucHVzaChuZXdTZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVycyBmb3IgYWxsIHNldHMKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsU2V0cy5sZW5ndGg7IGkrKykgewogICAgICAKICAgICAgdmFyIHNldCA9IGFsbFNldHNbaV07CiAgICAgIHZhciBzZWxlY3Rpb24gPSBuZXcgY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShzZXQpOwogICAgICB2YXIgZmlsdGVyID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoc2V0KTsKICAgICAgCiAgICAgIHZhciBmaWx0ZXJDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVGaWx0ZXIoc2V0LCBlLnZhbHVlKTsKICAgICAgfTsKICAgICAgZmlsdGVyLm9uKCJjaGFuZ2UiLCBmaWx0ZXJDaGFuZ2UpOwogICAgICAKICAgICAgCiAgICAgIHZhciBzZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgCiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgJ3Bsb3RseV9zZWxlY3RlZCcgbm93IGZpcmluZyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgLy8gcG9pbnRzIChpbiBhZGRpdGlvbiB0byBuZXcgb25lcykgd2hlbiBob2xkaW5nIHNoaWZ0IGtleS4gSW4gb3VyIGNhc2UsCiAgICAgICAgLy8gd2UganVzdCB3YW50IHRoZSBuZXcga2V5cyAKICAgICAgICBpZiAoeC5oaWdobGlnaHQub24gPT09ICJwbG90bHlfc2VsZWN0ZWQiICYmIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCkgewogICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4NzUxOC9ob3ctdG8tZ2V0LXRoZS1kaWZmZXJlbmNlLWJldHdlZW4tdHdvLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZGlmZiA9IGZ1bmN0aW9uKGEpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaSkge3JldHVybiBhLmluZGV4T2YoaSkgPCAwO30pOwogICAgICAgICAgfTsKICAgICAgICAgIGUudmFsdWUgPSBlLnZhbHVlLmRpZmYoZS5vbGRWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGFycmF5IG9mICJldmVudCBvYmplY3RzIiB0cmFja2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICAvLyB0aGlzIGlzIHVzZWQgdG8gYXZvaWQgYWRkaW5nIHJlZHVuZGFudCBzZWxlY3Rpb25zCiAgICAgICAgdmFyIHNlbGVjdGlvbkhpc3RvcnkgPSBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5IikuZ2V0KCkgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gQ29uc3RydWN0IGFuIGV2ZW50IG9iamVjdCAiZGVmaW5pbmciIHRoZSBjdXJyZW50IGV2ZW50LiAKICAgICAgICB2YXIgZXZlbnQgPSB7CiAgICAgICAgICByZWNlaXZlcklEOiB0cmFjZU1hbmFnZXIuZ2QuaWQsCiAgICAgICAgICBwbG90bHlTZWxlY3Rpb25Db2xvdXI6IGNyb3NzdGFsay5ncm91cChzZXQpLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkKICAgICAgICB9OwogICAgICAgIGV2ZW50W3NldF0gPSBlLnZhbHVlOwogICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgc21hcnRlciB3YXkgdG8gY2hlY2sgb2JqZWN0IGVxdWFsaXR5PwogICAgICAgIGlmIChzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhciBldiA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2VsID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0aW9uSGlzdG9yeVtpXSk7CiAgICAgICAgICAgIGlmIChzZWwgPT0gZXYpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWNjdW11bGF0ZSBoaXN0b3J5IGZvciBwZXJzaXN0ZW50IHNlbGVjdGlvbgogICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeSA9IFtldmVudF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdGlvbkhpc3RvcnkucHVzaChldmVudCk7CiAgICAgICAgfQogICAgICAgIGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5zZXQoc2VsZWN0aW9uSGlzdG9yeSk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0cmFjZXMsIGZyYW1lcywgYW5kIHRoZSBzZWxlY3RpemUgd2lkZ2V0CiAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIGUudmFsdWUpOwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3RpemUvc2VsZWN0aXplLmpzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpLm1kI21ldGhvZHNfaXRlbXMKICAgICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCB8fCBlLnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGVjdGl6ZS5jbGVhcih0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdGl6ZS5hZGRJdGVtcyhlLnZhbHVlLCB0cnVlKTsKICAgICAgICAgIHNlbGVjdGl6ZS5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZWxlY3Rpb24ub24oImNoYW5nZSIsIHNlbGVjdGlvbkNoYW5nZSk7CiAgICAgIAogICAgICAvLyBTZXQgYSBjcm9zc3RhbGsgdmFyaWFibGUgc2VsZWN0aW9uIHZhbHVlLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZQogICAgICB2YXIgdHVybk9uID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChlKSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0gcG9pbnRzVG9LZXlzKGUucG9pbnRzKTsKICAgICAgICAgIC8vIEtleXMgYXJlIGdyb3VwIG5hbWVzLCB2YWx1ZXMgYXJlIGFycmF5IG9mIHNlbGVjdGVkIGtleXMgZnJvbSBncm91cC4KICAgICAgICAgIGZvciAodmFyIHNldCBpbiBzZWxlY3RlZEtleXMpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkS2V5cy5oYXNPd25Qcm9wZXJ0eShzZXQpKSB7CiAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3RlZEtleXNbc2V0XS52YWx1ZSwge3NlbmRlcjogZWx9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKHguaGlnaGxpZ2h0LmRlYm91bmNlID4gMCkgewogICAgICAgIHR1cm5PbiA9IGRlYm91bmNlKHR1cm5PbiwgeC5oaWdobGlnaHQuZGVib3VuY2UpOwogICAgICB9CiAgICAgIGdyYXBoRGl2Lm9uKHguaGlnaGxpZ2h0Lm9uLCB0dXJuT24pOwogICAgICAKICAgICAgZ3JhcGhEaXYub24oeC5oaWdobGlnaHQub2ZmLCBmdW5jdGlvbiB0dXJuT2ZmKGUpIHsKICAgICAgICAvLyByZW1vdmUgYW55IHZpc3VhbCBjbHVlcwogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAvLyByZW1vdmUgYW55IHNlbGVjdGlvbiBoaXN0b3J5CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChudWxsKTsKICAgICAgICAvLyB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiBzZWxlY3Rpb24gdHJhY2VzCiAgICAgICAgc2VsZWN0aW9uLnNldChudWxsLCB7c2VuZGVyOiBlbH0pOwogICAgICB9KTsKICAgICAgICAgIAogICAgICAvLyByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBzZWxlY3RpemUgc28gdGhhdCB0aGVyZSBpcyBiaS1kaXJlY3Rpb25hbAogICAgICAvLyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHdpZGdldCBhbmQgZGlyZWN0IG1hbmlwdWxhdGlvbiBldmVudHMKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIHNlbGVjdGl6ZUlEID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpW2ldOwogICAgICAgIHZhciBpdGVtcyA9IHguc2VsZWN0aXplW3NlbGVjdGl6ZUlEXS5pdGVtczsKICAgICAgICB2YXIgZmlyc3QgPSBbe3ZhbHVlOiAiIiwgbGFiZWw6ICIoQWxsKSJ9XTsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIG9wdGlvbnM6IGZpcnN0LmNvbmNhdChpdGVtcyksCiAgICAgICAgICBzZWFyY2hGaWVsZDogImxhYmVsIiwKICAgICAgICAgIHZhbHVlRmllbGQ6ICJ2YWx1ZSIsCiAgICAgICAgICBsYWJlbEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgbWF4SXRlbXM6IDUwCiAgICAgICAgfTsKICAgICAgICB2YXIgc2VsZWN0ID0gJCgiIyIgKyBzZWxlY3RpemVJRCkuZmluZCgic2VsZWN0IilbMF07CiAgICAgICAgdmFyIHNlbGVjdGl6ZSA9ICQoc2VsZWN0KS5zZWxlY3RpemUob3B0cylbMF0uc2VsZWN0aXplOwogICAgICAgIC8vIE5PVEU6IHRoaXMgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gKmRpcmVjdGx5KiBhbHRlcmluZyAKICAgICAgICAvLyBkcm9wZG93biBpdGVtcwogICAgICAgIHNlbGVjdGl6ZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgY3VycmVudEl0ZW1zID0gdHJhY2VNYW5hZ2VyLmdyb3VwU2VsZWN0aW9uc1tzZXRdIHx8IFtdOwogICAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBzZWxlY3RpemUucmVtb3ZlSXRlbShjdXJyZW50SXRlbXNbaV0sIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBzZWxlY3RpemUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGlkeCkgeyAKICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtcy5pbmRleE9mKGlkeCkgPCAwOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgbmV3SXRlbXMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSXRlbSBoYXMgYmVlbiByZW1vdmVkLi4uCiAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgbG9naWMgd29uJ3Qgd29yayBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgcGFsZXR0ZSAKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIG51bGwpOwogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgc2VsZWN0aXplLml0ZW1zKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSAvLyBlbmQgb2Ygc2VsZWN0aW9uQ2hhbmdlCiAgICAKICB9IC8vIGVuZCBvZiByZW5kZXJWYWx1ZQp9KTsgLy8gZW5kIG9mIHdpZGdldCBkZWZpbml0aW9uCgovKioKICogQHBhcmFtIGdyYXBoRGl2IFRoZSBQbG90bHkgZ3JhcGggZGl2CiAqIEBwYXJhbSBoaWdobGlnaHQgQW4gb2JqZWN0IHdpdGggb3B0aW9ucyBmb3IgdXBkYXRpbmcgc2VsZWN0aW9uKHMpCiAqLwpmdW5jdGlvbiBUcmFjZU1hbmFnZXIoZ3JhcGhEaXYsIGhpZ2hsaWdodCkgewogIC8vIFRoZSBQbG90bHkgZ3JhcGggZGl2CiAgdGhpcy5nZCA9IGdyYXBoRGl2OwoKICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZGF0YS4KICAvLyBUT0RPOiB0cnkgdXNpbmcgTGliLmV4dGVuZEZsYXQoKSBhcyBkb25lIGluICAKICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgdGhpcy5vcmlnRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JhcGhEaXYuZGF0YSkpOwogIAogIC8vIGF2b2lkIGRvaW5nIHRoaXMgb3ZlciBhbmQgb3ZlcgogIHRoaXMub3JpZ09wYWNpdHkgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgIHRoaXMub3JpZ09wYWNpdHlbaV0gPSB0aGlzLm9yaWdEYXRhW2ldLm9wYWNpdHkgPT09IDAgPyAwIDogKHRoaXMub3JpZ0RhdGFbaV0ub3BhY2l0eSB8fCAxKTsKICB9CgogIC8vIGtleTogZ3JvdXAgbmFtZSwgdmFsdWU6IG51bGwgb3IgYXJyYXkgb2Yga2V5cyByZXByZXNlbnRpbmcgdGhlCiAgLy8gbW9zdCByZWNlbnRseSByZWNlaXZlZCBzZWxlY3Rpb24gZm9yIHRoYXQgZ3JvdXAuCiAgdGhpcy5ncm91cFNlbGVjdGlvbnMgPSB7fTsKICAKICAvLyBzZWxlY3Rpb24gcGFyYW1ldGVycyAoZS5nLiwgdHJhbnNpZW50IHZlcnN1cyBwZXJzaXN0ZW50IHNlbGVjdGlvbikKICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKfQoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewogIC8vIFRPRE86IFVuaG9vayBhbGwgZXZlbnQgaGFuZGxlcnMKfTsKClRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlRmlsdGVyID0gZnVuY3Rpb24oZ3JvdXAsIGtleXMpIHsKCiAgaWYgKHR5cGVvZihrZXlzKSA9PT0gInVuZGVmaW5lZCIgfHwga2V5cyA9PT0gbnVsbCkgewogICAgCiAgICB0aGlzLmdkLmRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ0RhdGEpKTsKICAgIAogIH0gZWxzZSB7CiAgCiAgICB2YXIgdHJhY2VzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHRyYWNlID0gdGhpcy5vcmlnRGF0YVtpXTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICAvLyBzdWJzZXRBcnJheUF0dHJzIGRvZXNuJ3QgbXV0YXRlIHRyYWNlIChpdCBtYWtlcyBhIG1vZGlmaWVkIGNsb25lKQogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgdHJhY2VzLnB1c2godHJhY2UpOwogICAgICB9CiAgICB9CiAgfQogIAogIHRoaXMuZ2QuZGF0YSA9IHRyYWNlczsKICBQbG90bHkucmVkcmF3KHRoaXMuZ2QpOwogIAogIC8vIE5PVEU6IHdlIHB1cnBvc2VseSBkbyBfbm90XyByZXN0b3JlIHNlbGVjdGlvbihzKSwgc2luY2Ugb24gZmlsdGVyLAogIC8vIGF4aXMgbGlrZWx5IHdpbGwgdXBkYXRlLCBjaGFuZ2luZyB0aGUgcGl4ZWwgLT4gZGF0YSBtYXBwaW5nLCBsZWFkaW5nIAogIC8vIHRvIGEgbGlrZWx5IG1pc21hdGNoIGluIHRoZSBicnVzaCBvdXRsaW5lIGFuZCBoaWdobGlnaHRlZCBtYXJrcwogIAp9OwoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihncm91cCwga2V5cykgewogIAogIGlmIChrZXlzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGtleXMpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5cyBhcmd1bWVudDsgbnVsbCBvciBhcnJheSBleHBlY3RlZCIpOwogIH0KICAKICAvLyBpZiBzZWxlY3Rpb24gaGFzIGJlZW4gY2xlYXJlZCwgb3IgaWYgdGhpcyBpcyB0cmFuc2llbnQKICAvLyBzZWxlY3Rpb24sIGRlbGV0ZSB0aGUgInNlbGVjdGlvbiB0cmFjZXMiCiAgdmFyIG5OZXdUcmFjZXMgPSB0aGlzLmdkLmRhdGEubGVuZ3RoIC0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgaWYgKGtleXMgPT09IG51bGwgfHwgIXRoaXMuaGlnaGxpZ2h0LnBlcnNpc3RlbnQgJiYgbk5ld1RyYWNlcyA+IDApIHsKICAgIHZhciB0cmFjZXNUb1JlbW92ZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdkLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXMuZ2QuZGF0YVtpXS5faXNDcm9zc3RhbGtUcmFjZSkgdHJhY2VzVG9SZW1vdmUucHVzaChpKTsKICAgIH0KICAgIFBsb3RseS5kZWxldGVUcmFjZXModGhpcy5nZCwgdHJhY2VzVG9SZW1vdmUpOwogICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdID0ga2V5czsKICB9IGVsc2UgewogICAgLy8gYWRkIHRvIHRoZSBncm91cFNlbGVjdGlvbiwgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgaXQKICAgIC8vIFRPRE86IGNhbiB0aGlzIGJlIHJlbW92ZWQ/CiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gPSB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gfHwgW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGsgPSBrZXlzW2ldOwogICAgICBpZiAodGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLmluZGV4T2YoaykgPCAwKSB7CiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLnB1c2goayk7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgaWYgKGtleXMgPT09IG51bGwpIHsKICAgIAogICAgUGxvdGx5LnJlc3R5bGUodGhpcy5nZCwgeyJvcGFjaXR5IjogdGhpcy5vcmlnT3BhY2l0eX0pOwogICAgCiAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA+PSAxKSB7CiAgICAKICAgIC8vIHBsYWNlaG9sZGVyIGZvciBuZXcgInNlbGVjdGlvbiB0cmFjZXMiCiAgICB2YXIgdHJhY2VzID0gW107CiAgICAvLyB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBSL2hpZ2hsaWdodC5SCiAgICB2YXIgc2VsZWN0aW9uQ29sb3VyID0gY3Jvc3N0YWxrLmdyb3VwKGdyb3VwKS52YXIoInBsb3RseVNlbGVjdGlvbkNvbG91ciIpLmdldCgpIHx8IAogICAgICB0aGlzLmhpZ2hsaWdodC5jb2xvclswXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvcGxvdGx5LmpzL3B1bGwvMTEzNiAKICAgICAgdmFyIHRyYWNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdkLmRhdGFbaV0pKTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIEdldCBzb3J0ZWQgYXJyYXkgb2YgbWF0Y2hpbmcgaW5kaWNlcyBpbiB0cmFjZS5rZXkKICAgICAgdmFyIG1hdGNoRnVuYyA9IGdldE1hdGNoRnVuYyh0cmFjZSk7CiAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hGdW5jKHRyYWNlLmtleSwga2V5cyk7CiAgICAgIAogICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gSWYgdGhpcyBpcyBhICJzaW1wbGUiIGtleSwgdGhhdCBtZWFucyBzZWxlY3QgdGhlIGVudGlyZSB0cmFjZQogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB0cmFjZSA9IHN1YnNldEFycmF5QXR0cnModHJhY2UsIG1hdGNoZXMpOwogICAgICAgIH0KICAgICAgICAvLyByZWFjaCBpbnRvIHRoZSBmdWxsIHRyYWNlIG9iamVjdCBzbyB3ZSBjYW4gcHJvcGVybHkgcmVmbGVjdCB0aGUgCiAgICAgICAgLy8gc2VsZWN0aW9uIGF0dHJpYnV0ZXMgaW4gZXZlcnkgdmlldwogICAgICAgIHZhciBkID0gdGhpcy5nZC5fZnVsbERhdGFbaV07CiAgICAgICAgCiAgICAgICAgLyogCiAgICAgICAgLyBSZWN1cnNpdmVseSBpbmhlcml0IHNlbGVjdGlvbiBhdHRyaWJ1dGVzIGZyb20gdmFyaW91cyBzb3VyY2VzLCAKICAgICAgICAvIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6CiAgICAgICAgLyAgKDEpIG9mZmljaWFsIHBsb3RseS5qcyBzZWxlY3RlZCBhdHRyaWJ1dGUKICAgICAgICAvICAoMikgaGlnaGxpZ2h0KHNlbGVjdGVkID0gYXR0cnNfc2VsZWN0ZWQoLi4uKSkKICAgICAgICAqLwogICAgICAgIC8vIFRPRE86IGl0IHdvdWxkIGJlIG5lYXQgdG8gaGF2ZSBhIGRyb3Bkb3duIHRvIGR5bmFtaWNhbGx5IHNwZWNpZnkgdGhlc2UhCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdHJhY2UsIHRoaXMuaGlnaGxpZ2h0LnNlbGVjdGVkKTsKICAgICAgICAKICAgICAgICAvLyBpZiBpdCBpcyBkZWZpbmVkLCBvdmVycmlkZSBjb2xvciB3aXRoIHRoZSAiZHluYW1pYyBicnVzaCBjb2xvciIiCiAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICB0cmFjZS5tYXJrZXIgPSB0cmFjZS5tYXJrZXIgfHwge307CiAgICAgICAgICB0cmFjZS5tYXJrZXIuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLm1hcmtlci5jb2xvciB8fCBkLm1hcmtlci5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgdHJhY2UubGluZSA9IHRyYWNlLmxpbmUgfHwge307CiAgICAgICAgICB0cmFjZS5saW5lLmNvbG9yID0gIHNlbGVjdGlvbkNvbG91ciB8fCB0cmFjZS5saW5lLmNvbG9yIHx8IGQubGluZS5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQudGV4dGZvbnQpIHsKICAgICAgICAgIHRyYWNlLnRleHRmb250ID0gdHJhY2UudGV4dGZvbnQgfHwge307CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udC5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UudGV4dGZvbnQuY29sb3IgfHwgZC50ZXh0Zm9udC5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQuZmlsbGNvbG9yKSB7CiAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgc2VsZWN0aW9uQ29sb3VyIGluaGVyaXQgYWxwaGEgZnJvbSB0aGUgZXhpc3RpbmcgZmlsbGNvbG9yPwogICAgICAgICAgdHJhY2UuZmlsbGNvbG9yID0gc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLmZpbGxjb2xvciB8fCBkLmZpbGxjb2xvcjsKICAgICAgICB9CiAgICAgICAgLy8gYXR0YWNoIGEgc2Vuc2libGUgbmFtZS9sZWdlbmRncm91cAogICAgICAgIHRyYWNlLm5hbWUgPSB0cmFjZS5uYW1lIHx8IGtleXMuam9pbigiPGJyIC8+Iik7CiAgICAgICAgdHJhY2UubGVnZW5kZ3JvdXAgPSB0cmFjZS5sZWdlbmRncm91cCB8fCBrZXlzLmpvaW4oIjxiciAvPiIpOwogICAgICAgIAogICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbWFwcGluZyBiZXR3ZWVuIHRoaXMgbmV3IHRyYWNlIGFuZCB0aGUgdHJhY2UgaXQgdGFyZ2V0cwogICAgICAgIC8vIChuZWNlc3NhcnkgZm9yIHVwZGF0aW5nIGZyYW1lcyB0byByZWZsZWN0IHRoZSBzZWxlY3Rpb24gdHJhY2VzKQogICAgICAgIHRyYWNlLl9vcmlnaW5hbEluZGV4ID0gaTsKICAgICAgICB0cmFjZS5fbmV3SW5kZXggPSB0aGlzLmdkLl9mdWxsRGF0YS5sZW5ndGggKyB0cmFjZXMubGVuZ3RoOwogICAgICAgIHRyYWNlLl9pc0Nyb3NzdGFsa1RyYWNlID0gdHJ1ZTsKICAgICAgICB0cmFjZXMucHVzaCh0cmFjZSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHRyYWNlcy5sZW5ndGggPiAwKSB7CiAgICAgIAogICAgICBQbG90bHkuYWRkVHJhY2VzKHRoaXMuZ2QsIHRyYWNlcykudGhlbihmdW5jdGlvbihnZCkgewogICAgICAgIC8vIGluY3JlbWVudGFsbHkgYWRkIHNlbGVjdGlvbiB0cmFjZXMgdG8gZnJhbWVzCiAgICAgICAgLy8gKHRoaXMgaXMgaGVhdmlseSBpbnNwaXJlZCBieSBQbG90bHkuUGxvdHMubW9kaWZ5RnJhbWVzKCkgCiAgICAgICAgLy8gaW4gc3JjL3Bsb3RzL3Bsb3RzLmpzKQogICAgICAgIHZhciBfaGFzaCA9IGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoOwogICAgICAgIHZhciBfZnJhbWVzID0gZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMgfHwgW107CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZnJhbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkZCB0byBfZnJhbWVzW2ldLnRyYWNlcyAqaWYqIHRoaXMgZnJhbWUgcmVmZXJlbmNlcyBzZWxlY3RlZCB0cmFjZShzKQogICAgICAgICAgdmFyIG5ld0luZGljZXMgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdHJhY2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHZhciB0ciA9IHRyYWNlc1tqXTsKICAgICAgICAgICAgaWYgKF9mcmFtZXNbaV0udHJhY2VzLmluZGV4T2YodHIuX29yaWdpbmFsSW5kZXgpID4gLTEpIHsKICAgICAgICAgICAgICBuZXdJbmRpY2VzLnB1c2godHIuX25ld0luZGV4KTsKICAgICAgICAgICAgICBfZnJhbWVzW2ldLnRyYWNlcy5wdXNoKHRyLl9uZXdJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gbm90aGluZyB0byBkby4uLgogICAgICAgICAgaWYgKG5ld0luZGljZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICB2YXIgY3RyID0gMDsKICAgICAgICAgIHZhciBuRnJhbWVUcmFjZXMgPSBfZnJhbWVzW2ldLmRhdGEubGVuZ3RoOwogICAgICAgICAgCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5GcmFtZVRyYWNlczsgaisrKSB7CiAgICAgICAgICAgIHZhciBmcmFtZVRyYWNlID0gX2ZyYW1lc1tpXS5kYXRhW2pdOwogICAgICAgICAgICBpZiAoIWZyYW1lVHJhY2Uua2V5IHx8IGZyYW1lVHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKGZyYW1lVHJhY2UpOwogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyhmcmFtZVRyYWNlLmtleSwga2V5cyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgaWYgKCF0cmFjZS5faXNTaW1wbGVLZXkpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKGZyYW1lVHJhY2UsIG1hdGNoZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgZCA9IGdkLl9mdWxsRGF0YVtuZXdJbmRpY2VzW2N0cl1dOwogICAgICAgICAgICAgIGlmIChkLm1hcmtlcikgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5tYXJrZXIgPSBkLm1hcmtlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5saW5lID0gZC5saW5lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZC50ZXh0Zm9udCkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS50ZXh0Zm9udCA9IGQudGV4dGZvbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGN0ciA9IGN0ciArIDE7CiAgICAgICAgICAgICAgX2ZyYW1lc1tpXS5kYXRhLnB1c2goZnJhbWVUcmFjZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gdXBkYXRlIGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoCiAgICAgICAgICBfaGFzaFtfZnJhbWVzW2ldLm5hbWVdID0gX2ZyYW1lc1tpXTsKICAgICAgICB9CiAgICAgIAogICAgICB9KTsKICAgICAgCiAgICAgIC8vIGRpbSB0cmFjZXMgdGhhdCBoYXZlIGEgc2V0IG1hdGNoaW5nIHRoZSBzZXQgb2Ygc2VsZWN0aW9uIHNldHMKICAgICAgdmFyIHRyYWNlc1RvRGltID0gW10sCiAgICAgICAgICBvcGFjaXRpZXMgPSBbXSwKICAgICAgICAgIHNldHMgPSBPYmplY3Qua2V5cyh0aGlzLmdyb3VwU2VsZWN0aW9ucyksCiAgICAgICAgICBuID0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgICAgICAgICAKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2YXIgb3BhY2l0eSA9IHRoaXMub3JpZ09wYWNpdHlbaV0gfHwgMTsKICAgICAgICAvLyBoYXZlIHdlIGFscmVhZHkgZGltbWVkIHRoaXMgdHJhY2U/IE9yIGlzIHRoaXMgZXZlbiB3b3J0aCBkb2luZz8KICAgICAgICBpZiAob3BhY2l0eSAhPT0gdGhpcy5nZC5fZnVsbERhdGFbaV0ub3BhY2l0eSB8fCB0aGlzLmhpZ2hsaWdodC5vcGFjaXR5RGltID09PSAxKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gaXMgdGhpcyBzZXQgYW4gZWxlbWVudCBvZiB0aGUgc2V0IG9mIHNlbGVjdGlvbiBzZXRzPwogICAgICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoZXMoc2V0cywgW3RoaXMuZ2QuZGF0YVtpXS5zZXRdKTsKICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIHsKICAgICAgICAgIHRyYWNlc1RvRGltLnB1c2goaSk7CiAgICAgICAgICBvcGFjaXRpZXMucHVzaChvcGFjaXR5ICogdGhpcy5oaWdobGlnaHQub3BhY2l0eURpbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZiAodHJhY2VzVG9EaW0ubGVuZ3RoID4gMCkgewogICAgICAgIFBsb3RseS5yZXN0eWxlKHRoaXMuZ2QsIHsib3BhY2l0eSI6IG9wYWNpdGllc30sIHRyYWNlc1RvRGltKTsKICAgICAgICAvLyB0dXJuIG9mZiB0aGUgc2VsZWN0ZWQvdW5zZWxlY3RlZCBBUEkKICAgICAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7InNlbGVjdGVkcG9pbnRzIjogbnVsbH0pOwogICAgICB9CiAgICAgIAogICAgfQogICAgCiAgfQp9OwoKLyogCk5vdGU6IGluIGFsbCBvZiB0aGVzZSBtYXRjaCBmdW5jdGlvbnMsIHdlIGFzc3VtZSBuZWVkbGVTZXQgKGkuZS4gdGhlIHNlbGVjdGVkIGtleXMpCmlzIGEgMUQgKG9yIGZsYXQpIGFycmF5LiBUaGUgcmVhbCBkaWZmZXJlbmNlIGlzIHRoZSBtZWFuaW5nIG9mIGhheXN0YWNrLgpmaW5kTWF0Y2hlcygpIGRvZXMgdGhlIHVzdWFsIHRoaW5nIHlvdSdkIGV4cGVjdCBmb3IgCmxpbmtlZCBicnVzaGluZyBvbiBhIHNjYXR0ZXJwbG90IG1hdHJpeC4gZmluZFNpbXBsZU1hdGNoZXMoKSByZXR1cm5zIGEgbWF0Y2ggaWZmIApoYXlzdGFjayBpcyBhIHN1YnNldCBvZiB0aGUgbmVlZGxlU2V0LiBmaW5kTmVzdGVkTWF0Y2hlcygpIHJldHVybnMgCiovCgpmdW5jdGlvbiBnZXRNYXRjaEZ1bmModHJhY2UpIHsKICByZXR1cm4gKHRyYWNlLl9pc05lc3RlZEtleSkgPyBmaW5kTmVzdGVkTWF0Y2hlcyA6IAogICAgKHRyYWNlLl9pc1NpbXBsZUtleSkgPyBmaW5kU2ltcGxlTWF0Y2hlcyA6IGZpbmRNYXRjaGVzOwp9CgovLyBmaW5kIG1hdGNoZXMgZm9yICJmbGF0IiBrZXlzCmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2hlcyA9IFtdOwogIGhheXN0YWNrLmZvckVhY2goZnVuY3Rpb24ob2JqLCBpKSB7CiAgICBpZiAob2JqID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKG9iaikgPj0gMCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgInNpbXBsZSIga2V5cwpmdW5jdGlvbiBmaW5kU2ltcGxlTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoID0gaGF5c3RhY2suZXZlcnkoZnVuY3Rpb24odmFsKSB7CiAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsKICB9KTsKICAvLyB5ZXMsIHRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2Ugb3RoZXIgdGhhbiBjb25mb3JtaW5nIAogIC8vIHRvIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgb3RoZXIgbWF0Y2ggZnVuY3Rpb25zCiAgcmV0dXJuIChtYXRjaCkgPyBbMF0gOiBbXQp9CgovLyBmaW5kIG1hdGNoZXMgZm9yIGEgIm5lc3RlZCIgaGF5c3RhY2sgKDJEIGFycmF5cykKZnVuY3Rpb24gZmluZE5lc3RlZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgdmFyIGhheSA9IGhheXN0YWNrW2ldOwogICAgdmFyIG1hdGNoID0gaGF5LmV2ZXJ5KGZ1bmN0aW9uKHZhbCkgeyAKICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBuZWVkbGVTZXQuaW5kZXhPZih2YWwpID49IDA7IAogICAgfSk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgbWF0Y2hlcy5wdXNoKGkpOwogICAgfQogIH0KICByZXR1cm4gbWF0Y2hlczsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gKAogICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmCiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZQogICk7Cn0KCmZ1bmN0aW9uIHN1YnNldEFycmF5QXR0cnMob2JqLCBpbmRpY2VzKSB7CiAgdmFyIG5ld09iaiA9IHt9OwogIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICB2YXIgdmFsID0gb2JqW2tdOwoKICAgIGlmIChrLmNoYXJBdCgwKSA9PT0gIl8iKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoayA9PT0gInRyYW5zZm9ybXMiICYmIEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICBuZXdPYmpba10gPSB2YWwubWFwKGZ1bmN0aW9uKHRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBzdWJzZXRBcnJheUF0dHJzKHRyYW5zZm9ybSwgaW5kaWNlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChrID09PSAiY29sb3JzY2FsZSIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5QXR0cnModmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5KHZhbCwgaW5kaWNlcyk7CiAgICB9IGVsc2UgewogICAgICBuZXdPYmpba10gPSB2YWw7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld09iajsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXkoYXJyLCBpbmRpY2VzKSB7CiAgdmFyIHJlc3VsdCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0LnB1c2goYXJyW2luZGljZXNbaV1dKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlbW92aW5nIHBsb3RseSdzIGJydXNoIApmdW5jdGlvbiByZW1vdmVCcnVzaChlbCkgewogIHZhciBvdXRsaW5lcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWxlY3Qtb3V0bGluZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0bGluZXMubGVuZ3RoOyBpKyspIHsKICAgIG91dGxpbmVzW2ldLnJlbW92ZSgpOwogIH0KfQoKCi8vIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24KCi8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QKLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvcgovLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUKLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy4KZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7Cgl2YXIgdGltZW91dDsKCXJldHVybiBmdW5jdGlvbigpIHsKCQl2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CgkJdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CgkJCXRpbWVvdXQgPSBudWxsOwoJCQlpZiAoIWltbWVkaWF0ZSkgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKCQl9OwoJCXZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0OwoJCWNsZWFyVGltZW91dCh0aW1lb3V0KTsKCQl0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CgkJaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Cgl9Owp9Owo=\"></script>\n",
       "<script title=\"typedarray\" src=\"data:application/javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw==\"></script>\n",
       "<script title=\"jquery\" src=\"data:application/javascript;base64,LyohIGpRdWVyeSB2My40LjEgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKEMsZSl7InVzZSBzdHJpY3QiO3ZhciB0PVtdLEU9Qy5kb2N1bWVudCxyPU9iamVjdC5nZXRQcm90b3R5cGVPZixzPXQuc2xpY2UsZz10LmNvbmNhdCx1PXQucHVzaCxpPXQuaW5kZXhPZixuPXt9LG89bi50b1N0cmluZyx2PW4uaGFzT3duUHJvcGVydHksYT12LnRvU3RyaW5nLGw9YS5jYWxsKE9iamVjdCkseT17fSxtPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYibnVtYmVyIiE9dHlwZW9mIGUubm9kZVR5cGV9LHg9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd30sYz17dHlwZTohMCxzcmM6ITAsbm9uY2U6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0aW9uIGIoZSx0LG4pe3ZhciByLGksbz0obj1ufHxFKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpZihvLnRleHQ9ZSx0KWZvcihyIGluIGMpKGk9dFtyXXx8dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKHIpKSYmby5zZXRBdHRyaWJ1dGUocixpKTtuLmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB3KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9uW28uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBmPSIzLjQuMSIsaz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgay5mbi5pbml0KGUsdCl9LHA9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nO2Z1bmN0aW9uIGQoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49dyhlKTtyZXR1cm4hbShlKSYmIXgoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9ay5mbj1rLnByb3RvdHlwZT17anF1ZXJ5OmYsY29uc3RydWN0b3I6ayxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3MuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ay5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGsuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGsubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2socy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soMDw9biYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDp1LHNvcnQ6dC5zb3J0LHNwbGljZTp0LnNwbGljZX0say5leHRlbmQ9ay5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgYSYmKGw9YSxhPWFyZ3VtZW50c1tzXXx8e30scysrKSwib2JqZWN0Ij09dHlwZW9mIGF8fG0oYSl8fChhPXt9KSxzPT09dSYmKGE9dGhpcyxzLS0pO3M8dTtzKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW3NdKSlmb3IodCBpbiBlKXI9ZVt0XSwiX19wcm90b19fIiE9PXQmJmEhPT1yJiYobCYmciYmKGsuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhuPWFbdF0sbz1pJiYhQXJyYXkuaXNBcnJheShuKT9bXTppfHxrLmlzUGxhaW5PYmplY3Qobik/bjp7fSxpPSExLGFbdF09ay5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LGsuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhmK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1vLmNhbGwoZSkpJiYoISh0PXIoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj12LmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJmEuY2FsbChuKT09PWwpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSx0KXtiKGUse25vbmNlOnQmJnQubm9uY2V9KX0sZWFjaDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MDtpZihkKGUpKXtmb3Iobj1lLmxlbmd0aDtyPG47cisrKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVha31lbHNlIGZvcihyIGluIGUpaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKHAsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKGQoT2JqZWN0KGUpKT9rLm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTp1LmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ/LTE6aS5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUubGVuZ3RoO3I8bjtyKyspZVtpKytdPXRbcl07cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPVtdLGk9MCxvPWUubGVuZ3RoLGE9IW47aTxvO2krKykhdChlW2ldLGkpIT09YSYmci5wdXNoKGVbaV0pO3JldHVybiByfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz0wLGE9W107aWYoZChlKSlmb3Iocj1lLmxlbmd0aDtvPHI7bysrKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO2Vsc2UgZm9yKG8gaW4gZSludWxsIT0oaT10KGVbb10sbyxuKSkmJmEucHVzaChpKTtyZXR1cm4gZy5hcHBseShbXSxhKX0sZ3VpZDoxLHN1cHBvcnQ6eX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihrLmZuW1N5bWJvbC5pdGVyYXRvcl09dFtTeW1ib2wuaXRlcmF0b3JdKSxrLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7blsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTt2YXIgaD1mdW5jdGlvbihuKXt2YXIgZSxkLGIsbyxpLGgsZixnLHcsdSxsLFQsQyxhLEUsdixzLGMseSxrPSJzaXp6bGUiKzEqbmV3IERhdGUsbT1uLmRvY3VtZW50LFM9MCxyPTAscD11ZSgpLHg9dWUoKSxOPXVlKCksQT11ZSgpLEQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQmJihsPSEwKSwwfSxqPXt9Lmhhc093blByb3BlcnR5LHQ9W10scT10LnBvcCxMPXQucHVzaCxIPXQucHVzaCxPPXQuc2xpY2UsUD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihlW25dPT09dClyZXR1cm4gbjtyZXR1cm4tMX0sUj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLE09IltcXHgyMFxcdFxcclxcblxcZl0iLEk9Iig/OlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIixXPSJcXFsiK00rIiooIitJKyIpKD86IitNKyIqKFsqXiR8IX5dPz0pIitNKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrSSsiKSl8KSIrTSsiKlxcXSIsJD0iOigiK0krIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK1crIikqKXwuKilcXCl8KSIsRj1uZXcgUmVnRXhwKE0rIisiLCJnIiksQj1uZXcgUmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89bmV3IFJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSx6PW5ldyBSZWdFeHAoIl4iK00rIiooWz4rfl18IitNKyIpIitNKyIqIiksVT1uZXcgUmVnRXhwKE0rInw+IiksWD1uZXcgUmVnRXhwKCQpLFY9bmV3IFJlZ0V4cCgiXiIrSSsiJCIpLEc9e0lEOm5ldyBSZWdFeHAoIl4jKCIrSSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitJKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitJKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrVyksUFNFVURPOm5ldyBSZWdFeHAoIl4iKyQpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L0hUTUwkL2ksUT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLEo9L15oXGQkL2ksSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGVlPS9bK35dLyx0ZT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIiksbmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNjtyZXR1cm4gciE9cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxvZT1mdW5jdGlvbigpe1QoKX0sYWU9YmUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0guYXBwbHkodD1PLmNhbGwobS5jaGlsZE5vZGVzKSxtLmNoaWxkTm9kZXMpLHRbbS5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7SD17YXBwbHk6dC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtMLmFwcGx5KGUsTy5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gc2UodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQscD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1wJiY5IT09cCYmMTEhPT1wKXJldHVybiBuO2lmKCFyJiYoKGU/ZS5vd25lckRvY3VtZW50fHxlOm0pIT09QyYmVChlKSxlPWV8fEMsRSkpe2lmKDExIT09cCYmKHU9Wi5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1wKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYoZiYmKGE9Zi5nZXRFbGVtZW50QnlJZChpKSkmJnkoZSxhKSYmYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gSC5hcHBseShuLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLG47aWYoKGk9dVszXSkmJmQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKGQucXNhJiYhQVt0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigxIT09cHx8Im9iamVjdCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtpZihjPXQsZj1lLDE9PT1wJiZVLnRlc3QodCkpeyhzPWUuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXMucmVwbGFjZShyZSxpZSk6ZS5zZXRBdHRyaWJ1dGUoImlkIixzPWspLG89KGw9aCh0KSkubGVuZ3RoO3doaWxlKG8tLSlsW29dPSIjIitzKyIgIit4ZShsW29dKTtjPWwuam9pbigiLCIpLGY9ZWUudGVzdCh0KSYmeWUoZS5wYXJlbnROb2RlKXx8ZX10cnl7cmV0dXJuIEguYXBwbHkobixmLnF1ZXJ5U2VsZWN0b3JBbGwoYykpLG59Y2F0Y2goZSl7QSh0LCEwKX1maW5hbGx5e3M9PT1rJiZlLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBnKHQucmVwbGFjZShCLCIkMSIpLGUsbixyKX1mdW5jdGlvbiB1ZSgpe3ZhciByPVtdO3JldHVybiBmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHIucHVzaCh0KyIgIik+Yi5jYWNoZUxlbmd0aCYmZGVsZXRlIGVbci5zaGlmdCgpXSxlW3QrIiAiXT1ufX1mdW5jdGlvbiBsZShlKXtyZXR1cm4gZVtrXT0hMCxlfWZ1bmN0aW9uIGNlKGUpe3ZhciB0PUMuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKGUpe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBmZShlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxyPW4ubGVuZ3RoO3doaWxlKHItLSliLmF0dHJIYW5kbGVbbltyXV09dH1mdW5jdGlvbiBwZShlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJmUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRleDtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJmUudHlwZT09PXR9fWZ1bmN0aW9uIGhlKG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT10fHwiYnV0dG9uIj09PXQpJiZlLnR5cGU9PT1ufX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImZvcm0iaW4gZT9lLnBhcmVudE5vZGUmJiExPT09ZS5kaXNhYmxlZD8ibGFiZWwiaW4gZT8ibGFiZWwiaW4gZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5kaXNhYmxlZD09PXQ6ZS5kaXNhYmxlZD09PXQ6ZS5pc0Rpc2FibGVkPT09dHx8ZS5pc0Rpc2FibGVkIT09IXQmJmFlKGUpPT09dDplLmRpc2FibGVkPT09dDoibGFiZWwiaW4gZSYmZS5kaXNhYmxlZD09PXR9fWZ1bmN0aW9uIHZlKGEpe3JldHVybiBsZShmdW5jdGlvbihvKXtyZXR1cm4gbz0rbyxsZShmdW5jdGlvbihlLHQpe3ZhciBuLHI9YShbXSxlLmxlbmd0aCxvKSxpPXIubGVuZ3RoO3doaWxlKGktLSllW249cltpXV0mJihlW25dPSEodFtuXT1lW25dKSl9KX0pfWZ1bmN0aW9uIHllKGUpe3JldHVybiBlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmV9Zm9yKGUgaW4gZD1zZS5zdXBwb3J0PXt9LGk9c2UuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lc3BhY2VVUkksbj0oZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIVkudGVzdCh0fHxuJiZuLm5vZGVOYW1lfHwiSFRNTCIpfSxUPXNlLnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lP2Uub3duZXJEb2N1bWVudHx8ZTptO3JldHVybiByIT09QyYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50JiYoYT0oQz1yKS5kb2N1bWVudEVsZW1lbnQsRT0haShDKSxtIT09QyYmKG49Qy5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsb2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNoRXZlbnQoIm9udW5sb2FkIixvZSkpLGQuYXR0cmlidXRlcz1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxkLmdldEVsZW1lbnRzQnlUYWdOYW1lPWNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKEMuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPUsudGVzdChDLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGQuZ2V0QnlJZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5pZD1rLCFDLmdldEVsZW1lbnRzQnlOYW1lfHwhQy5nZXRFbGVtZW50c0J5TmFtZShrKS5sZW5ndGh9KSxkLmdldEJ5SWQ/KGIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0ZSxuZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4/W25dOltdfX0pOihiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgbj1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiB0JiZ0LnZhbHVlPT09bn19LGIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmRSl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb107aT10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDt3aGlsZShvPWlbcisrXSlpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119cmV0dXJuW119fSksYi5maW5kLlRBRz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6ZC5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoIioiPT09ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gb30sYi5maW5kLkNMQVNTPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmRSlyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxzPVtdLHY9W10sKGQucXNhPUsudGVzdChDLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGNlKGZ1bmN0aW9uKGUpe2EuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIitrKyInPjwvYT48c2VsZWN0IGlkPSciK2srIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmdi5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49IitrKyItXSIpLmxlbmd0aHx8di5wdXNoKCJ+PSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHYucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitrKyIrKiIpLmxlbmd0aHx8di5wdXNoKCIuIy4rWyt+XSIpfSksY2UoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmdi5wdXNoKCJuYW1lIitNKyIqWypeJHwhfl0/PSIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJnYucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSx2LnB1c2goIiwuKjoiKX0pKSwoZC5tYXRjaGVzU2VsZWN0b3I9Sy50ZXN0KGM9YS5tYXRjaGVzfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEub01hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcikpJiZjZShmdW5jdGlvbihlKXtkLmRpc2Nvbm5lY3RlZE1hdGNoPWMuY2FsbChlLCIqIiksYy5jYWxsKGUsIltzIT0nJ106eCIpLHMucHVzaCgiIT0iLCQpfSksdj12Lmxlbmd0aCYmbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSkscz1zLmxlbmd0aCYmbmV3IFJlZ0V4cChzLmpvaW4oInwiKSksdD1LLnRlc3QoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseT10fHxLLnRlc3QoYS5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBufHwoMSYobj0oZS5vd25lckRvY3VtZW50fHxlKT09PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFkLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09PUN8fGUub3duZXJEb2N1bWVudD09PW0mJnkobSxlKT8tMTp0PT09Q3x8dC5vd25lckRvY3VtZW50PT09bSYmeShtLHQpPzE6dT9QKHUsZSktUCh1LHQpOjA6NCZuPy0xOjEpfTpmdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBsPSEwLDA7dmFyIG4scj0wLGk9ZS5wYXJlbnROb2RlLG89dC5wYXJlbnROb2RlLGE9W2VdLHM9W3RdO2lmKCFpfHwhbylyZXR1cm4gZT09PUM/LTE6dD09PUM/MTppPy0xOm8/MTp1P1AodSxlKS1QKHUsdCk6MDtpZihpPT09bylyZXR1cm4gcGUoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP3BlKGFbcl0sc1tyXSk6YVtyXT09PW0/LTE6c1tyXT09PW0/MTowfSksQ30sc2UubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBzZShlLG51bGwsbnVsbCx0KX0sc2UubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1DJiZUKGUpLGQubWF0Y2hlc1NlbGVjdG9yJiZFJiYhQVt0KyIgIl0mJighc3x8IXMudGVzdCh0KSkmJighdnx8IXYudGVzdCh0KSkpdHJ5e3ZhciBuPWMuY2FsbChlLHQpO2lmKG58fGQuZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gbn1jYXRjaChlKXtBKHQsITApfXJldHVybiAwPHNlKHQsQyxudWxsLFtlXSkubGVuZ3RofSxzZS5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1lbnR8fGUpIT09QyYmVChlKSx5KGUsdCl9LHNlLmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PUMmJlQoZSk7dmFyIG49Yi5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZqLmNhbGwoYi5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUUpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmQuYXR0cmlidXRlc3x8IUU/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSxzZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UocmUsaWUpfSxzZS5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHNlLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wO2lmKGw9IWQuZGV0ZWN0RHVwbGljYXRlcyx1PSFkLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KEQpLGwpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSllLnNwbGljZShuW3JdLDEpfXJldHVybiB1PW51bGwsZX0sbz1zZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKHQ9ZVtyKytdKW4rPW8odCk7cmV0dXJuIG59LChiPXNlLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmxlLG1hdGNoOkcsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh0ZSxuZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UodGUsbmUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxzZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZzZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gRy5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWgobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1wW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJnAoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24obixyLGkpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1zZS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UoRiwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oaCxlLHQsZyx2KXt2YXIgeT0ibnRoIiE9PWguc2xpY2UoMCwzKSxtPSJsYXN0IiE9PWguc2xpY2UoLTQpLHg9Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWcmJjA9PT12P2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9eSE9PW0/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixjPWUucGFyZW50Tm9kZSxmPXgmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPSFuJiYheCxkPSExO2lmKGMpe2lmKHkpe3doaWxlKGwpe2E9ZTt3aGlsZShhPWFbbF0paWYoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKXJldHVybiExO3U9bD0ib25seSI9PT1oJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVttP2MuZmlyc3RDaGlsZDpjLmxhc3RDaGlsZF0sbSYmcCl7ZD0ocz0ocj0oaT0obz0oYT1jKVtrXXx8KGFba109e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09UyYmclsxXSkmJnJbMl0sYT1zJiZjLmNoaWxkTm9kZXNbc107d2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoMT09PWEubm9kZVR5cGUmJisrZCYmYT09PWUpe2lbaF09W1MscyxkXTticmVha319ZWxzZSBpZihwJiYoZD1zPShyPShpPShvPShhPWUpW2tdfHwoYVtrXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1TJiZyWzFdKSwhMT09PWQpd2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoKHg/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSkmJisrZCYmKHAmJigoaT0obz1hW2tdfHwoYVtrXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdPVtTLGRdKSxhPT09ZSkpYnJlYWs7cmV0dXJuKGQtPXYpPT09Z3x8ZCVnPT0wJiYwPD1kL2d9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbyl7dmFyIHQsYT1iLnBzZXVkb3NbZV18fGIuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBhW2tdP2Eobyk6MTxhLmxlbmd0aD8odD1bZSxlLCIiLG9dLGIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2xlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPVAoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpsZShmdW5jdGlvbihlKXt2YXIgcj1bXSxpPVtdLHM9ZihlLnJlcGxhY2UoQiwiJDEiKSk7cmV0dXJuIHNba10/bGUoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpsZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8c2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6bGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHRlLG5lKSxmdW5jdGlvbihlKXtyZXR1cm4tMTwoZS50ZXh0Q29udGVudHx8byhlKSkuaW5kZXhPZih0KX19KSxsYW5nOmxlKGZ1bmN0aW9uKG4pe3JldHVybiBWLnRlc3Qobnx8IiIpfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIituKSxuPW4ucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUU/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PW4ubG9jYXRpb24mJm4ubG9jYXRpb24uaGFzaDtyZXR1cm4gdCYmdC5zbGljZSgxKT09PWUuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUMuYWN0aXZlRWxlbWVudCYmKCFDLmhhc0ZvY3VzfHxDLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmdlKCExKSxkaXNhYmxlZDpnZSghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWIucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBKLnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBRLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OnZlKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp2ZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dmUoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnZlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDp0PG4/dDpuOzA8PS0tcjspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0pLnBzZXVkb3MubnRoPWIucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pYi5wc2V1ZG9zW2VdPWRlKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0pYi5wc2V1ZG9zW2VdPWhlKGUpO2Z1bmN0aW9uIG1lKCl7fWZ1bmN0aW9uIHhlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gYmUocyxlLHQpe3ZhciB1PWUuZGlyLGw9ZS5uZXh0LGM9bHx8dSxmPXQmJiJwYXJlbnROb2RlIj09PWMscD1yKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe3doaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1bUyxwXTtpZihuKXt3aGlsZShlPWVbdV0paWYoKDE9PT1lLm5vZGVUeXBlfHxmKSYmcyhlLHQsbikpcmV0dXJuITB9ZWxzZSB3aGlsZShlPWVbdV0paWYoMT09PWUubm9kZVR5cGV8fGYpaWYoaT0obz1lW2tdfHwoZVtrXT17fSkpW2UudW5pcXVlSURdfHwob1tlLnVuaXF1ZUlEXT17fSksbCYmbD09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSllPWVbdV18fGU7ZWxzZXtpZigocj1pW2NdKSYmclswXT09PVMmJnJbMV09PT1wKXJldHVybiBhWzJdPXJbMl07aWYoKGlbY109YSlbMl09cyhlLHQsbikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHdlKGkpe3JldHVybiAxPGkubGVuZ3RoP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmxlbmd0aDt3aGlsZShyLS0paWYoIWlbcl0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTppWzBdfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQ2UoZCxoLGcsdix5LGUpe3JldHVybiB2JiYhdltrXSYmKHY9Q2UodikpLHkmJiF5W2tdJiYoeT1DZSh5LGUpKSxsZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1bXSx1PVtdLGw9dC5sZW5ndGgsYz1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKXNlKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGY9IWR8fCFlJiZoP2M6VGUoYyxzLGQsbixyKSxwPWc/eXx8KGU/ZDpsfHx2KT9bXTp0OmY7aWYoZyYmZyhmLHAsbixyKSx2KXtpPVRlKHAsdSksdihpLFtdLG4sciksbz1pLmxlbmd0aDt3aGlsZShvLS0pKGE9aVtvXSkmJihwW3Vbb11dPSEoZlt1W29dXT1hKSl9aWYoZSl7aWYoeXx8ZCl7aWYoeSl7aT1bXSxvPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmaS5wdXNoKGZbb109YSk7eShudWxsLHA9W10saSxyKX1vPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmLTE8KGk9eT9QKGUsYSk6c1tvXSkmJihlW2ldPSEodFtpXT1hKSl9fWVsc2UgcD1UZShwPT09dD9wLnNwbGljZShsLHAubGVuZ3RoKTpwKSx5P3kobnVsbCx0LHAscik6SC5hcHBseSh0LHApfSl9ZnVuY3Rpb24gRWUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89Yi5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8Yi5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT1iZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PWl9LGEsITApLGw9YmUoZnVuY3Rpb24oZSl7cmV0dXJuLTE8UChpLGUpfSxhLCEwKSxjPVtmdW5jdGlvbihlLHQsbil7dmFyIHI9IW8mJihufHx0IT09dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PWIucmVsYXRpdmVbZVtzXS50eXBlXSljPVtiZSh3ZShjKSx0KV07ZWxzZXtpZigodD1iLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSlba10pe2ZvcihuPSsrcztuPHI7bisrKWlmKGIucmVsYXRpdmVbZVtuXS50eXBlXSlicmVhaztyZXR1cm4gQ2UoMTxzJiZ3ZShjKSwxPHMmJnhlKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtzLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoQiwiJDEiKSx0LHM8biYmRWUoZS5zbGljZShzLG4pKSxuPHImJkVlKGU9ZS5zbGljZShuKSksbjxyJiZ4ZShlKSl9Yy5wdXNoKHQpfXJldHVybiB3ZShjKX1yZXR1cm4gbWUucHJvdG90eXBlPWIuZmlsdGVycz1iLnBzZXVkb3MsYi5zZXRGaWx0ZXJzPW5ldyBtZSxoPXNlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD14W2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PWIucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj1fLmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj16LmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKEIsIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpLGIuZmlsdGVyKSEocj1HW29dLmV4ZWMoYSkpfHx1W29dJiYhKHI9dVtvXShyKSl8fChuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpvLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/c2UuZXJyb3IoZSk6eChlLHMpLnNsaWNlKDApfSxmPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbix2LHksbSx4LHIsaT1bXSxvPVtdLGE9TltlKyIgIl07aWYoIWEpe3R8fCh0PWgoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPUVlKHRbbl0pKVtrXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPU4oZSwodj1vLG09MDwoeT1pKS5sZW5ndGgseD0wPHYubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxwPXcsZD1lfHx4JiZiLmZpbmQuVEFHKCIqIixpKSxoPVMrPW51bGw9PXA/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPWQubGVuZ3RoO2ZvcihpJiYodz10PT09Q3x8dHx8aSk7bCE9PWcmJm51bGwhPShvPWRbbF0pO2wrKyl7aWYoeCYmbyl7YT0wLHR8fG8ub3duZXJEb2N1bWVudD09PUN8fChUKG8pLG49IUUpO3doaWxlKHM9dlthKytdKWlmKHMobyx0fHxDLG4pKXtyLnB1c2gobyk7YnJlYWt9aSYmKFM9aCl9bSYmKChvPSFzJiZvKSYmdS0tLGUmJmMucHVzaChvKSl9aWYodSs9bCxtJiZsIT09dSl7YT0wO3doaWxlKHM9eVthKytdKXMoYyxmLHQsbik7aWYoZSl7aWYoMDx1KXdoaWxlKGwtLSljW2xdfHxmW2xdfHwoZltsXT1xLmNhbGwocikpO2Y9VGUoZil9SC5hcHBseShyLGYpLGkmJiFlJiYwPGYubGVuZ3RoJiYxPHUreS5sZW5ndGgmJnNlLnVuaXF1ZVNvcnQocil9cmV0dXJuIGkmJihTPWgsdz1wKSxjfSxtP2xlKHIpOnIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gYX0sZz1zZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLGM9IXImJmgoZT1sLnNlbGVjdG9yfHxlKTtpZihuPW58fFtdLDE9PT1jLmxlbmd0aCl7aWYoMjwobz1jWzBdPWNbMF0uc2xpY2UoMCkpLmxlbmd0aCYmIklEIj09PShhPW9bMF0pLnR5cGUmJjk9PT10Lm5vZGVUeXBlJiZFJiZiLnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEodD0oYi5maW5kLklEKGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtsJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPUcubmVlZHNDb250ZXh0LnRlc3QoZSk/MDpvLmxlbmd0aDt3aGlsZShpLS0pe2lmKGE9b1tpXSxiLnJlbGF0aXZlW3M9YS50eXBlXSlicmVhaztpZigodT1iLmZpbmRbc10pJiYocj11KGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSxlZS50ZXN0KG9bMF0udHlwZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoby5zcGxpY2UoaSwxKSwhKGU9ci5sZW5ndGgmJnhlKG8pKSlyZXR1cm4gSC5hcHBseShuLHIpLG47YnJlYWt9fX1yZXR1cm4obHx8ZihlLGMpKShyLHQsIUUsbiwhdHx8ZWUudGVzdChlKSYmeWUodC5wYXJlbnROb2RlKXx8dCksbn0sZC5zb3J0U3RhYmxlPWsuc3BsaXQoIiIpLnNvcnQoRCkuam9pbigiIik9PT1rLGQuZGV0ZWN0RHVwbGljYXRlcz0hIWwsVCgpLGQuc29ydERldGFjaGVkPWNlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oQy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGZlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxkLmF0dHJpYnV0ZXMmJmNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGZlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxmZShSLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHNlfShDKTtrLmZpbmQ9aCxrLmV4cHI9aC5zZWxlY3RvcnMsay5leHByWyI6Il09ay5leHByLnBzZXVkb3Msay51bmlxdWVTb3J0PWsudW5pcXVlPWgudW5pcXVlU29ydCxrLnRleHQ9aC5nZXRUZXh0LGsuaXNYTUxEb2M9aC5pc1hNTCxrLmNvbnRhaW5zPWguY29udGFpbnMsay5lc2NhcGVTZWxlY3Rvcj1oLmVzY2FwZTt2YXIgVD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmayhlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LFM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LE49ay5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBBKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX12YXIgRD0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaTtmdW5jdGlvbiBqKGUsbixyKXtyZXR1cm4gbShuKT9rLmdyZXAoZSxmdW5jdGlvbihlLHQpe3JldHVybiEhbi5jYWxsKGUsdCxlKSE9PXJ9KTpuLm5vZGVUeXBlP2suZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09biE9PXJ9KToic3RyaW5nIiE9dHlwZW9mIG4/ay5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuLTE8aS5jYWxsKG4sZSkhPT1yfSk6ay5maWx0ZXIobixlLHIpfWsuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP2suZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106ay5maW5kLm1hdGNoZXMoZSxrLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGsuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxpPXRoaXM7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayhrKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihrLmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKWsuZmluZChlLGlbdF0sbik7cmV0dXJuIDE8cj9rLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFqKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZOLnRlc3QoZSk/ayhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBxLEw9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsoay5mbi5pbml0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8cSwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCEocj0iPCI9PT1lWzBdJiYiPiI9PT1lW2UubGVuZ3RoLTFdJiYzPD1lLmxlbmd0aD9bbnVsbCxlLG51bGxdOkwuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2Ygaz90WzBdOnQsay5tZXJnZSh0aGlzLGsucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6RSwhMCkpLEQudGVzdChyWzFdKSYmay5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpbSh0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlzfXJldHVybihpPUUuZ2V0RWxlbWVudEJ5SWQoclsyXSkpJiYodGhpc1swXT1pLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0oZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoayk6ay5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT1rLmZuLHE9ayhFKTt2YXIgSD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxPPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2Z1bmN0aW9uIFAoZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfWsuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9ayhlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihrLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT0ic3RyaW5nIiE9dHlwZW9mIGUmJmsoZSk7aWYoIU4udGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT8tMTxhLmluZGV4KG4pOjE9PT1uLm5vZGVUeXBlJiZrLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8by5sZW5ndGg/ay51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/aS5jYWxsKGsoZSksdGhpc1swXSk6aS5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhrLnVuaXF1ZVNvcnQoay5tZXJnZSh0aGlzLmdldCgpLGsoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksay5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBUKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVChlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gUChlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBQKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBUKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIFQoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFQoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBUKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBTKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gUyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGUuY29udGVudERvY3VtZW50P2UuY29udGVudERvY3VtZW50OihBKGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksay5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKHIsaSl7ay5mbltyXT1mdW5jdGlvbihlLHQpe3ZhciBuPWsubWFwKHRoaXMsaSxlKTtyZXR1cm4iVW50aWwiIT09ci5zbGljZSgtNSkmJih0PWUpLHQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG49ay5maWx0ZXIodCxuKSksMTx0aGlzLmxlbmd0aCYmKE9bcl18fGsudW5pcXVlU29ydChuKSxILnRlc3QocikmJm4ucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUj0vW15ceDIwXHRcclxuXGZdKy9nO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIGV9ZnVuY3Rpb24gSShlKXt0aHJvdyBlfWZ1bmN0aW9uIFcoZSx0LG4scil7dmFyIGk7dHJ5e2UmJm0oaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmbShpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fWsuQ2FsbGJhY2tzPWZ1bmN0aW9uKHIpe3ZhciBlLG47cj0ic3RyaW5nIj09dHlwZW9mIHI/KGU9cixuPXt9LGsuZWFjaChlLm1hdGNoKFIpfHxbXSxmdW5jdGlvbihlLHQpe25bdF09ITB9KSxuKTprLmV4dGVuZCh7fSxyKTt2YXIgaSx0LG8sYSxzPVtdLHU9W10sbD0tMSxjPWZ1bmN0aW9uKCl7Zm9yKGE9YXx8ci5vbmNlLG89aT0hMDt1Lmxlbmd0aDtsPS0xKXt0PXUuc2hpZnQoKTt3aGlsZSgrK2w8cy5sZW5ndGgpITE9PT1zW2xdLmFwcGx5KHRbMF0sdFsxXSkmJnIuc3RvcE9uRmFsc2UmJihsPXMubGVuZ3RoLHQ9ITEpfXIubWVtb3J5fHwodD0hMSksaT0hMSxhJiYocz10P1tdOiIiKX0sZj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIHMmJih0JiYhaSYmKGw9cy5sZW5ndGgtMSx1LnB1c2godCkpLGZ1bmN0aW9uIG4oZSl7ay5lYWNoKGUsZnVuY3Rpb24oZSx0KXttKHQpP3IudW5pcXVlJiZmLmhhcyh0KXx8cy5wdXNoKHQpOnQmJnQubGVuZ3RoJiYic3RyaW5nIiE9PXcodCkmJm4odCl9KX0oYXJndW1lbnRzKSx0JiYhaSYmYygpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKC0xPChuPWsuaW5BcnJheSh0LHMsbikpKXMuc3BsaWNlKG4sMSksbjw9bCYmbC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlPy0xPGsuaW5BcnJheShlLHMpOjA8cy5sZW5ndGh9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHMmJihzPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT1bXSxzPXQ9IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hc30sbG9jazpmdW5jdGlvbigpe3JldHVybiBhPXU9W10sdHx8aXx8KHM9dD0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFhfSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiBhfHwodD1bZSwodD10fHxbXSkuc2xpY2U/dC5zbGljZSgpOnRdLHUucHVzaCh0KSxpfHxjKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99fTtyZXR1cm4gZn0say5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciBvPVtbIm5vdGlmeSIsInByb2dyZXNzIixrLkNhbGxiYWNrcygibWVtb3J5Iiksay5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLGsuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGsuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixrLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxrLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxpPSJwZW5kaW5nIixhPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBpfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGEudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGk9YXJndW1lbnRzO3JldHVybiBrLkRlZmVycmVkKGZ1bmN0aW9uKHIpe2suZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49bShpW3RbNF1dKSYmaVt0WzRdXTtzW3RbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmbShlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHIubm90aWZ5KS5kb25lKHIucmVzb2x2ZSkuZmFpbChyLnJlamVjdCk6clt0WzBdKyJXaXRoIl0odGhpcyxuP1tlXTphcmd1bWVudHMpfSl9KSxpPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxuLHIpe3ZhciB1PTA7ZnVuY3Rpb24gbChpLG8sYSxzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzLGU9ZnVuY3Rpb24oKXt2YXIgZSx0O2lmKCEoaTx1KSl7aWYoKGU9YS5hcHBseShuLHIpKT09PW8ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO3Q9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sbSh0KT9zP3QuY2FsbChlLGwodSxvLE0scyksbCh1LG8sSSxzKSk6KHUrKyx0LmNhbGwoZSxsKHUsbyxNLHMpLGwodSxvLEkscyksbCh1LG8sTSxvLm5vdGlmeVdpdGgpKSk6KGEhPT1NJiYobj12b2lkIDAscj1bZV0pLChzfHxvLnJlc29sdmVXaXRoKShuLHIpKX19LHQ9cz9lOmZ1bmN0aW9uKCl7dHJ5e2UoKX1jYXRjaChlKXtrLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJmsuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLHQuc3RhY2tUcmFjZSksdTw9aSsxJiYoYSE9PUkmJihuPXZvaWQgMCxyPVtlXSksby5yZWplY3RXaXRoKG4scikpfX07aT90KCk6KGsuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYodC5zdGFja1RyYWNlPWsuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLEMuc2V0VGltZW91dCh0KSl9fXJldHVybiBrLkRlZmVycmVkKGZ1bmN0aW9uKGUpe29bMF1bM10uYWRkKGwoMCxlLG0ocik/cjpNLGUubm90aWZ5V2l0aCkpLG9bMV1bM10uYWRkKGwoMCxlLG0odCk/dDpNKSksb1syXVszXS5hZGQobCgwLGUsbShuKT9uOkkpKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT9rLmV4dGVuZChlLGEpOmF9fSxzPXt9O3JldHVybiBrLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPXRbMl0scj10WzVdO2FbdFsxXV09bi5hZGQsciYmbi5hZGQoZnVuY3Rpb24oKXtpPXJ9LG9bMy1lXVsyXS5kaXNhYmxlLG9bMy1lXVszXS5kaXNhYmxlLG9bMF1bMl0ubG9jayxvWzBdWzNdLmxvY2spLG4uYWRkKHRbM10uZmlyZSksc1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBzW3RbMF0rIldpdGgiXSh0aGlzPT09cz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LHNbdFswXSsiV2l0aCJdPW4uZmlyZVdpdGh9KSxhLnByb21pc2UocyksZSYmZS5jYWxsKHMscyksc30sd2hlbjpmdW5jdGlvbihlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9bixyPUFycmF5KHQpLGk9cy5jYWxsKGFyZ3VtZW50cyksbz1rLkRlZmVycmVkKCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7clt0XT10aGlzLGlbdF09MTxhcmd1bWVudHMubGVuZ3RoP3MuY2FsbChhcmd1bWVudHMpOmUsLS1ufHxvLnJlc29sdmVXaXRoKHIsaSl9fTtpZihuPD0xJiYoVyhlLG8uZG9uZShhKHQpKS5yZXNvbHZlLG8ucmVqZWN0LCFuKSwicGVuZGluZyI9PT1vLnN0YXRlKCl8fG0oaVt0XSYmaVt0XS50aGVuKSkpcmV0dXJuIG8udGhlbigpO3doaWxlKHQtLSlXKGlbdF0sYSh0KSxvLnJlamVjdCk7cmV0dXJuIG8ucHJvbWlzZSgpfX0pO3ZhciAkPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO2suRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihlLHQpe0MuY29uc29sZSYmQy5jb25zb2xlLndhcm4mJmUmJiQudGVzdChlLm5hbWUpJiZDLmNvbnNvbGUud2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UsZS5zdGFjayx0KX0say5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbihlKXtDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9O3ZhciBGPWsuRGVmZXJyZWQoKTtmdW5jdGlvbiBCKCl7RS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEIpLGsucmVhZHkoKX1rLmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBGLnRoZW4oZSlbImNhdGNoIl0oZnVuY3Rpb24oZSl7ay5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LGsuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS1rLnJlYWR5V2FpdDprLmlzUmVhZHkpfHwoay5pc1JlYWR5PSEwKSE9PWUmJjA8LS1rLnJlYWR5V2FpdHx8Ri5yZXNvbHZlV2l0aChFLFtrXSl9fSksay5yZWFkeS50aGVuPUYudGhlbiwiY29tcGxldGUiPT09RS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1FLnJlYWR5U3RhdGUmJiFFLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9DLnNldFRpbWVvdXQoay5yZWFkeSk6KEUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixCKSk7dmFyIF89ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXcobikpZm9yKHMgaW4gaT0hMCxuKV8oZSx0LHMsbltzXSwhMCxvLGEpO2Vsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsbShyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbChrKGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LHo9L14tbXMtLyxVPS8tKFthLXpdKS9nO2Z1bmN0aW9uIFgoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuIGUucmVwbGFjZSh6LCJtcy0iKS5yZXBsYWNlKFUsWCl9dmFyIEc9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfTtmdW5jdGlvbiBZKCl7dGhpcy5leHBhbmRvPWsuZXhwYW5kbytZLnVpZCsrfVkudWlkPTEsWS5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sRyhlKSYmKGUubm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdGhpcy5leHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuY2FjaGUoZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbVih0KV09bjtlbHNlIGZvcihyIGluIHQpaVtWKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW1YodCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKFYpOih0PVYodCkpaW4gcj9bdF06dC5tYXRjaChSKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fGsuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIWsuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBRPW5ldyBZLEo9bmV3IFksSz0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLFo9L1tBLVpdL2c7ZnVuY3Rpb24gZWUoZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShaLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPSJ0cnVlIj09PShpPW4pfHwiZmFsc2UiIT09aSYmKCJudWxsIj09PWk/bnVsbDppPT09K2krIiI/K2k6Sy50ZXN0KGkpP0pTT04ucGFyc2UoaSk6aSl9Y2F0Y2goZSl7fUouc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufWsuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBKLmhhc0RhdGEoZSl8fFEuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEouYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0oucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1EucmVtb3ZlKGUsdCl9fSksay5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT1KLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVEuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9VihyLnNsaWNlKDUpKSxlZShvLHIsaVtyXSkpO1Euc2V0KG8sImhhc0RhdGFBdHRycyIsITApfXJldHVybiBpfXJldHVybiJvYmplY3QiPT10eXBlb2Ygbj90aGlzLmVhY2goZnVuY3Rpb24oKXtKLnNldCh0aGlzLG4pfSk6Xyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0O2lmKG8mJnZvaWQgMD09PWUpcmV0dXJuIHZvaWQgMCE9PSh0PUouZ2V0KG8sbikpP3Q6dm9pZCAwIT09KHQ9ZWUobyxuKSk/dDp2b2lkIDA7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Si5zZXQodGhpcyxuLGUpfSl9LG51bGwsZSwxPGFyZ3VtZW50cy5sZW5ndGgsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0oucmVtb3ZlKHRoaXMsZSl9KX19KSxrLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1RLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPVEuYWNjZXNzKGUsdCxrLm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj1rLnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPWsuX3F1ZXVlSG9va3MoZSx0KTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsZnVuY3Rpb24oKXtrLmRlcXVldWUoZSx0KX0sbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gUS5nZXQoZSxuKXx8US5hY2Nlc3MoZSxuLHtlbXB0eTprLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtRLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxrLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxuKXt2YXIgZT0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSJmeCIsZS0tKSxhcmd1bWVudHMubGVuZ3RoPGU/ay5xdWV1ZSh0aGlzWzBdLHQpOnZvaWQgMD09PW4/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1rLnF1ZXVlKHRoaXMsdCxuKTtrLl9xdWV1ZUhvb2tzKHRoaXMsdCksImZ4Ij09PXQmJiJpbnByb2dyZXNzIiE9PWVbMF0mJmsuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2suZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT1rLkRlZmVycmVkKCksbz10aGlzLGE9dGhpcy5sZW5ndGgscz1mdW5jdGlvbigpey0tcnx8aS5yZXNvbHZlV2l0aChvLFtvXSl9OyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiZngiO3doaWxlKGEtLSkobj1RLmdldChvW2FdLGUrInF1ZXVlSG9va3MiKSkmJm4uZW1wdHkmJihyKyssbi5lbXB0eS5hZGQocykpO3JldHVybiBzKCksaS5wcm9taXNlKHQpfX0pO3ZhciB0ZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSxuZT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrdGUrIikoW2EteiVdKikkIiwiaSIpLHJlPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0saWU9RS5kb2N1bWVudEVsZW1lbnQsb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfSxhZT17Y29tcG9zZWQ6ITB9O2llLmdldFJvb3ROb2RlJiYob2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHxlLmdldFJvb3ROb2RlKGFlKT09PWUub3duZXJEb2N1bWVudH0pO3ZhciBzZT1mdW5jdGlvbihlLHQpe3JldHVybiJub25lIj09PShlPXR8fGUpLnN0eWxlLmRpc3BsYXl8fCIiPT09ZS5zdHlsZS5kaXNwbGF5JiZvZShlKSYmIm5vbmUiPT09ay5jc3MoZSwiZGlzcGxheSIpfSx1ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGE9e307Zm9yKG8gaW4gdClhW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2ZvcihvIGluIGk9bi5hcHBseShlLHJ8fFtdKSx0KWUuc3R5bGVbb109YVtvXTtyZXR1cm4gaX07ZnVuY3Rpb24gbGUoZSx0LG4scil7dmFyIGksbyxhPTIwLHM9cj9mdW5jdGlvbigpe3JldHVybiByLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBrLmNzcyhlLHQsIiIpfSx1PXMoKSxsPW4mJm5bM118fChrLmNzc051bWJlclt0XT8iIjoicHgiKSxjPWUubm9kZVR5cGUmJihrLmNzc051bWJlclt0XXx8InB4IiE9PWwmJit1KSYmbmUuZXhlYyhrLmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pay5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLGsuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgY2U9e307ZnVuY3Rpb24gZmUoZSx0KXtmb3IodmFyIG4scixpLG8sYSxzLHUsbD1bXSxjPTAsZj1lLmxlbmd0aDtjPGY7YysrKShyPWVbY10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKGxbY109US5nZXQociwiZGlzcGxheSIpfHxudWxsLGxbY118fChyLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmc2UocikmJihsW2NdPSh1PWE9bz12b2lkIDAsYT0oaT1yKS5vd25lckRvY3VtZW50LHM9aS5ub2RlTmFtZSwodT1jZVtzXSl8fChvPWEuYm9keS5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQocykpLHU9ay5jc3MobywiZGlzcGxheSIpLG8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSwibm9uZSI9PT11JiYodT0iYmxvY2siKSxjZVtzXT11KSkpKToibm9uZSIhPT1uJiYobFtjXT0ibm9uZSIsUS5zZXQociwiZGlzcGxheSIsbikpKTtmb3IoYz0wO2M8ZjtjKyspbnVsbCE9bFtjXSYmKGVbY10uc3R5bGUuZGlzcGxheT1sW2NdKTtyZXR1cm4gZX1rLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtzZSh0aGlzKT9rKHRoaXMpLnNob3coKTprKHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKikvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksZ2U9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtmdW5jdGlvbiB2ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmQShlLHQpP2subWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24geWUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspUS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fFEuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9Z2Uub3B0Z3JvdXA9Z2Uub3B0aW9uLGdlLnRib2R5PWdlLnRmb290PWdlLmNvbGdyb3VwPWdlLmNhcHRpb249Z2UudGhlYWQsZ2UudGg9Z2UudGQ7dmFyIG1lLHhlLGJlPS88fCYjP1x3KzsvO2Z1bmN0aW9uIHdlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGEscyx1LGwsYyxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHA9W10sZD0wLGg9ZS5sZW5ndGg7ZDxoO2QrKylpZigobz1lW2RdKXx8MD09PW8paWYoIm9iamVjdCI9PT13KG8pKWsubWVyZ2UocCxvLm5vZGVUeXBlP1tvXTpvKTtlbHNlIGlmKGJlLnRlc3Qobykpe2E9YXx8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShkZS5leGVjKG8pfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLHU9Z2Vbc118fGdlLl9kZWZhdWx0LGEuaW5uZXJIVE1MPXVbMV0ray5odG1sUHJlZmlsdGVyKG8pK3VbMl0sYz11WzBdO3doaWxlKGMtLSlhPWEubGFzdENoaWxkO2subWVyZ2UocCxhLmNoaWxkTm9kZXMpLChhPWYuZmlyc3RDaGlsZCkudGV4dENvbnRlbnQ9IiJ9ZWxzZSBwLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7Zi50ZXh0Q29udGVudD0iIixkPTA7d2hpbGUobz1wW2QrK10paWYociYmLTE8ay5pbkFycmF5KG8scikpaSYmaS5wdXNoKG8pO2Vsc2UgaWYobD1vZShvKSxhPXZlKGYuYXBwZW5kQ2hpbGQobyksInNjcmlwdCIpLGwmJnllKGEpLG4pe2M9MDt3aGlsZShvPWFbYysrXSloZS50ZXN0KG8udHlwZXx8IiIpJiZuLnB1c2gobyl9cmV0dXJuIGZ9bWU9RS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoRS5jcmVhdGVFbGVtZW50KCJkaXYiKSksKHhlPUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSx4ZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIikseGUuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLG1lLmFwcGVuZENoaWxkKHhlKSx5LmNoZWNrQ2xvbmU9bWUuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLG1lLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIseS5ub0Nsb25lQ2hlY2tlZD0hIW1lLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTt2YXIgVGU9L15rZXkvLENlPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxFZT0vXihbXi5dKikoPzpcLiguKyl8KS87ZnVuY3Rpb24ga2UoKXtyZXR1cm4hMH1mdW5jdGlvbiBTZSgpe3JldHVybiExfWZ1bmN0aW9uIE5lKGUsdCl7cmV0dXJuIGU9PT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gRS5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319KCk9PSgiZm9jdXMiPT09dCl9ZnVuY3Rpb24gQWUoZSx0LG4scixpLG8pe3ZhciBhLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtmb3IocyBpbiJzdHJpbmciIT10eXBlb2YgbiYmKHI9cnx8bixuPXZvaWQgMCksdClBZShlLHMsbixyLHRbc10sbyk7cmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12b2lkIDApOm51bGw9PWkmJigic3RyaW5nIj09dHlwZW9mIG4/KGk9cixyPXZvaWQgMCk6KGk9cixyPW4sbj12b2lkIDApKSwhMT09PWkpaT1TZTtlbHNlIGlmKCFpKXJldHVybiBlO3JldHVybiAxPT09byYmKGE9aSwoaT1mdW5jdGlvbihlKXtyZXR1cm4gaygpLm9mZihlKSxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLmd1aWQ9YS5ndWlkfHwoYS5ndWlkPWsuZ3VpZCsrKSksZS5lYWNoKGZ1bmN0aW9uKCl7ay5ldmVudC5hZGQodGhpcyx0LGkscixuKX0pfWZ1bmN0aW9uIERlKGUsaSxvKXtvPyhRLnNldChlLGksITEpLGsuZXZlbnQuYWRkKGUsaSx7bmFtZXNwYWNlOiExLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPVEuZ2V0KHRoaXMsaSk7aWYoMSZlLmlzVHJpZ2dlciYmdGhpc1tpXSl7aWYoci5sZW5ndGgpKGsuZXZlbnQuc3BlY2lhbFtpXXx8e30pLmRlbGVnYXRlVHlwZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtlbHNlIGlmKHI9cy5jYWxsKGFyZ3VtZW50cyksUS5zZXQodGhpcyxpLHIpLHQ9byh0aGlzLGkpLHRoaXNbaV0oKSxyIT09KG49US5nZXQodGhpcyxpKSl8fHQ/US5zZXQodGhpcyxpLCExKTpuPXt9LHIhPT1uKXJldHVybiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSxuLnZhbHVlfWVsc2Ugci5sZW5ndGgmJihRLnNldCh0aGlzLGkse3ZhbHVlOmsuZXZlbnQudHJpZ2dlcihrLmV4dGVuZChyWzBdLGsuRXZlbnQucHJvdG90eXBlKSxyLnNsaWNlKDEpLHRoaXMpfSksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSkpOnZvaWQgMD09PVEuZ2V0KGUsaSkmJmsuZXZlbnQuYWRkKGUsaSxrZSl9ay5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcsdj1RLmdldCh0KTtpZih2KXtuLmhhbmRsZXImJihuPShvPW4pLmhhbmRsZXIsaT1vLnNlbGVjdG9yKSxpJiZrLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGllLGkpLG4uZ3VpZHx8KG4uZ3VpZD1rLmd1aWQrKyksKHU9di5ldmVudHMpfHwodT12LmV2ZW50cz17fSksKGE9di5oYW5kbGUpfHwoYT12LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGsmJmsuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlP2suZXZlbnQuZGlzcGF0Y2guYXBwbHkodCxhcmd1bWVudHMpOnZvaWQgMH0pLGw9KGU9KGV8fCIiKS5tYXRjaChSKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9RWUuZXhlYyhlW2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KGk/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LGM9ay5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmay5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGkpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwodCxyLGgsYSl8fHQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbCh0LGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSxrLmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9US5oYXNEYXRhKGUpJiZRLmdldChlKTtpZih2JiYodT12LmV2ZW50cykpe2w9KHQ9KHR8fCIiKS5tYXRjaChSKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlpZihkPWc9KHM9RWUuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtmPWsuZXZlbnQuc3BlY2lhbFtkXXx8e30scD11W2Q9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGRdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksYT1vPXAubGVuZ3RoO3doaWxlKG8tLSljPXBbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx2LmhhbmRsZSl8fGsucmVtb3ZlRXZlbnQoZSxkLHYuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KWsuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7ay5pc0VtcHR5T2JqZWN0KHUpJiZRLnJlbW92ZShlLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1rLmV2ZW50LmZpeChlKSx1PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxsPShRLmdldCh0aGlzLCJldmVudHMiKXx8e30pW3MudHlwZV18fFtdLGM9ay5ldmVudC5zcGVjaWFsW3MudHlwZV18fHt9O2Zvcih1WzBdPXMsdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspdVt0XT1hcmd1bWVudHNbdF07aWYocy5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLHMpKXthPWsuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHMsbCksdD0wO3doaWxlKChpPWFbdCsrXSkmJiFzLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3MuY3VycmVudFRhcmdldD1pLmVsZW0sbj0wO3doaWxlKChvPWkuaGFuZGxlcnNbbisrXSkmJiFzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcy5ybmFtZXNwYWNlJiYhMSE9PW8ubmFtZXNwYWNlJiYhcy5ybmFtZXNwYWNlLnRlc3Qoby5uYW1lc3BhY2UpfHwocy5oYW5kbGVPYmo9byxzLmRhdGE9by5kYXRhLHZvaWQgMCE9PShyPSgoay5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSx1KSkmJiExPT09KHMucmVzdWx0PXIpJiYocy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyxzKSxzLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQ7aWYodSYmbC5ub2RlVHlwZSYmISgiY2xpY2siPT09ZS50eXBlJiYxPD1lLmJ1dHRvbikpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKCJjbGljayIhPT1lLnR5cGV8fCEwIT09bC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30sbj0wO248dTtuKyspdm9pZCAwPT09YVtpPShyPXRbbl0pLnNlbGVjdG9yKyIgIl0mJihhW2ldPXIubmVlZHNDb250ZXh0Py0xPGsoaSx0aGlzKS5pbmRleChsKTprLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLGFbaV0mJm8ucHVzaChyKTtvLmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6dC5zbGljZSh1KX0pLHN9LGFkZFByb3A6ZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoay5FdmVudC5wcm90b3R5cGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0Om0oZSk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIGUodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFt0XX0sc2V0OmZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX19KX0sZml4OmZ1bmN0aW9uKGUpe3JldHVybiBlW2suZXhwYW5kb10/ZTpuZXcgay5FdmVudChlKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOntzZXR1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmRGUodCwiY2xpY2siLGtlKSwhMX0sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmRGUodCwiY2xpY2siKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZRLmdldCh0LCJjbGljayIpfHxBKHQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUucmVzdWx0JiZlLm9yaWdpbmFsRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19fSxrLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSxrLkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2Ygay5FdmVudCkpcmV0dXJuIG5ldyBrLkV2ZW50KGUsdCk7ZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09ZS5kZWZhdWx0UHJldmVudGVkJiYhMT09PWUucmV0dXJuVmFsdWU/a2U6U2UsdGhpcy50YXJnZXQ9ZS50YXJnZXQmJjM9PT1lLnRhcmdldC5ub2RlVHlwZT9lLnRhcmdldC5wYXJlbnROb2RlOmUudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1lLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PWUucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPWUsdCYmay5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKSx0aGlzW2suZXhwYW5kb109ITB9LGsuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjprLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDpTZSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpTZSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpTZSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1rZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1rZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9a2UsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LGsuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCwiY2hhciI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmVGUudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJkNlLnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSxrLmV2ZW50LmFkZFByb3ApLGsuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtrLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIERlKHRoaXMsZSxOZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gRGUodGhpcyxlKSwhMH0sZGVsZWdhdGVUeXBlOnR9fSksay5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe2suZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxrLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxrLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEFlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gQWUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosayhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49U2UpLHRoaXMuZWFjaChmdW5jdGlvbigpe2suZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIGplPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0qKVtePl0qKVwvPi9naSxxZT0vPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxMZT0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSxIZT0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2c7ZnVuY3Rpb24gT2UoZSx0KXtyZXR1cm4gQShlLCJ0YWJsZSIpJiZBKDExIT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKSYmayhlKS5jaGlsZHJlbigidGJvZHkiKVswXXx8ZX1mdW5jdGlvbiBQZShlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIFJlKGUpe3JldHVybiJ0cnVlLyI9PT0oZS50eXBlfHwiIikuc2xpY2UoMCw1KT9lLnR5cGU9ZS50eXBlLnNsaWNlKDUpOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBNZShlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw7aWYoMT09PXQubm9kZVR5cGUpe2lmKFEuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1RLnNldCh0LG8pLGw9by5ldmVudHMpKWZvcihpIGluIGRlbGV0ZSBhLmhhbmRsZSxhLmV2ZW50cz17fSxsKWZvcihuPTAscj1sW2ldLmxlbmd0aDtuPHI7bisrKWsuZXZlbnQuYWRkKHQsaSxsW2ldW25dKTtKLmhhc0RhdGEoZSkmJihzPUouYWNjZXNzKGUpLHU9ay5leHRlbmQoe30scyksSi5zZXQodCx1KSl9fWZ1bmN0aW9uIEllKG4scixpLG8pe3I9Zy5hcHBseShbXSxyKTt2YXIgZSx0LGEscyx1LGwsYz0wLGY9bi5sZW5ndGgscD1mLTEsZD1yWzBdLGg9bShkKTtpZihofHwxPGYmJiJzdHJpbmciPT10eXBlb2YgZCYmIXkuY2hlY2tDbG9uZSYmTGUudGVzdChkKSlyZXR1cm4gbi5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW4uZXEoZSk7aCYmKHJbMF09ZC5jYWxsKHRoaXMsZSx0Lmh0bWwoKSkpLEllKHQscixpLG8pfSk7aWYoZiYmKHQ9KGU9d2UocixuWzBdLm93bmVyRG9jdW1lbnQsITEsbixvKSkuZmlyc3RDaGlsZCwxPT09ZS5jaGlsZE5vZGVzLmxlbmd0aCYmKGU9dCksdHx8bykpe2ZvcihzPShhPWsubWFwKHZlKGUsInNjcmlwdCIpLFBlKSkubGVuZ3RoO2M8ZjtjKyspdT1lLGMhPT1wJiYodT1rLmNsb25lKHUsITAsITApLHMmJmsubWVyZ2UoYSx2ZSh1LCJzY3JpcHQiKSkpLGkuY2FsbChuW2NdLHUsYyk7aWYocylmb3IobD1hW2EubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsay5tYXAoYSxSZSksYz0wO2M8cztjKyspdT1hW2NdLGhlLnRlc3QodS50eXBlfHwiIikmJiFRLmFjY2Vzcyh1LCJnbG9iYWxFdmFsIikmJmsuY29udGFpbnMobCx1KSYmKHUuc3JjJiYibW9kdWxlIiE9PSh1LnR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpP2suX2V2YWxVcmwmJiF1Lm5vTW9kdWxlJiZrLl9ldmFsVXJsKHUuc3JjLHtub25jZTp1Lm5vbmNlfHx1LmdldEF0dHJpYnV0ZSgibm9uY2UiKX0pOmIodS50ZXh0Q29udGVudC5yZXBsYWNlKEhlLCIiKSx1LGwpKX1yZXR1cm4gbn1mdW5jdGlvbiBXZShlLHQsbil7Zm9yKHZhciByLGk9dD9rLmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlbb10pO28rKylufHwxIT09ci5ub2RlVHlwZXx8ay5jbGVhbkRhdGEodmUocikpLHIucGFyZW50Tm9kZSYmKG4mJm9lKHIpJiZ5ZSh2ZShyLCJzY3JpcHQiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX1rLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGplLCI8JDE+PC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGM9ZS5jbG9uZU5vZGUoITApLGY9b2UoZSk7aWYoISh5Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHxrLmlzWE1MRG9jKGUpKSlmb3IoYT12ZShjKSxyPTAsaT0obz12ZShlKSkubGVuZ3RoO3I8aTtyKyspcz1vW3JdLHU9YVtyXSx2b2lkIDAsImlucHV0Ij09PShsPXUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkmJnBlLnRlc3Qocy50eXBlKT91LmNoZWNrZWQ9cy5jaGVja2VkOiJpbnB1dCIhPT1sJiYidGV4dGFyZWEiIT09bHx8KHUuZGVmYXVsdFZhbHVlPXMuZGVmYXVsdFZhbHVlKTtpZih0KWlmKG4pZm9yKG89b3x8dmUoZSksYT1hfHx2ZShjKSxyPTAsaT1vLmxlbmd0aDtyPGk7cisrKU1lKG9bcl0sYVtyXSk7ZWxzZSBNZShlLGMpO3JldHVybiAwPChhPXZlKGMsInNjcmlwdCIpKS5sZW5ndGgmJnllKGEsIWYmJnZlKGUsInNjcmlwdCIpKSxjfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpPWsuZXZlbnQuc3BlY2lhbCxvPTA7dm9pZCAwIT09KG49ZVtvXSk7bysrKWlmKEcobikpe2lmKHQ9bltRLmV4cGFuZG9dKXtpZih0LmV2ZW50cylmb3IociBpbiB0LmV2ZW50cylpW3JdP2suZXZlbnQucmVtb3ZlKG4scik6ay5yZW1vdmVFdmVudChuLHIsdC5oYW5kbGUpO25bUS5leHBhbmRvXT12b2lkIDB9bltKLmV4cGFuZG9dJiYobltKLmV4cGFuZG9dPXZvaWQgMCl9fX0pLGsuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFdlKHRoaXMsZSwhMCl9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gV2UodGhpcyxlKX0sdGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gXyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP2sudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHwodGhpcy50ZXh0Q29udGVudD1lKX0pfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiBJZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8T2UodGhpcyxlKS5hcHBlbmRDaGlsZChlKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1PZSh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9kZVR5cGUmJihrLmNsZWFuRGF0YSh2ZShlLCExKSksZS50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbCE9ZSYmZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGsuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIF8odGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1lJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYhcWUudGVzdChlKSYmIWdlWyhkZS5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1rLmh0bWxQcmVmaWx0ZXIoZSk7dHJ5e2Zvcig7bjxyO24rKykxPT09KHQ9dGhpc1tuXXx8e30pLm5vZGVUeXBlJiYoay5jbGVhbkRhdGEodmUodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChlKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gSWUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2suaW5BcnJheSh0aGlzLG4pPDAmJihrLmNsZWFuRGF0YSh2ZSh0aGlzKSksdCYmdC5yZXBsYWNlQ2hpbGQoZSx0aGlzKSl9LG4pfX0pLGsuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsYSl7ay5mbltlXT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXSxyPWsoZSksaT1yLmxlbmd0aC0xLG89MDtvPD1pO28rKyl0PW89PT1pP3RoaXM6dGhpcy5jbG9uZSghMCksayhyW29dKVthXSh0KSx1LmFwcGx5KG4sdC5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4pfX0pO3ZhciAkZT1uZXcgUmVnRXhwKCJeKCIrdGUrIikoPyFweClbYS16JV0rJCIsImkiKSxGZT1mdW5jdGlvbihlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIHQmJnQub3BlbmVyfHwodD1DKSx0LmdldENvbXB1dGVkU3R5bGUoZSl9LEJlPW5ldyBSZWdFeHAocmUuam9pbigifCIpLCJpIik7ZnVuY3Rpb24gX2UoZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5zdHlsZTtyZXR1cm4obj1ufHxGZShlKSkmJigiIiE9PShhPW4uZ2V0UHJvcGVydHlWYWx1ZSh0KXx8blt0XSl8fG9lKGUpfHwoYT1rLnN0eWxlKGUsdCkpLCF5LnBpeGVsQm94U3R5bGVzKCkmJiRlLnRlc3QoYSkmJkJlLnRlc3QodCkmJihyPXMud2lkdGgsaT1zLm1pbldpZHRoLG89cy5tYXhXaWR0aCxzLm1pbldpZHRoPXMubWF4V2lkdGg9cy53aWR0aD1hLGE9bi53aWR0aCxzLndpZHRoPXIscy5taW5XaWR0aD1pLHMubWF4V2lkdGg9bykpLHZvaWQgMCE9PWE/YSsiIjphfWZ1bmN0aW9uIHplKGUsdCl7cmV0dXJue2dldDpmdW5jdGlvbigpe2lmKCFlKCkpcmV0dXJuKHRoaXMuZ2V0PXQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtkZWxldGUgdGhpcy5nZXR9fX0hZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aWYodSl7cy5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowIix1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjYwJTt0b3A6MSUiLGllLmFwcGVuZENoaWxkKHMpLmFwcGVuZENoaWxkKHUpO3ZhciBlPUMuZ2V0Q29tcHV0ZWRTdHlsZSh1KTtuPSIxJSIhPT1lLnRvcCxhPTEyPT09dChlLm1hcmdpbkxlZnQpLHUuc3R5bGUucmlnaHQ9IjYwJSIsbz0zNj09PXQoZS5yaWdodCkscj0zNj09PXQoZS53aWR0aCksdS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGk9MTI9PT10KHUub2Zmc2V0V2lkdGgvMyksaWUucmVtb3ZlQ2hpbGQocyksdT1udWxsfX1mdW5jdGlvbiB0KGUpe3JldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZSkpfXZhciBuLHIsaSxvLGEscz1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LnN0eWxlJiYodS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLHUuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIix5LmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09dS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxrLmV4dGVuZCh5LHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBlKCkscn0scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG99LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG59LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBlKCksYX0sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiBlKCksaX19KSl9KCk7dmFyIFVlPVsiV2Via2l0IiwiTW96IiwibXMiXSxYZT1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLFZlPXt9O2Z1bmN0aW9uIEdlKGUpe3ZhciB0PWsuY3NzUHJvcHNbZV18fFZlW2VdO3JldHVybiB0fHwoZSBpbiBYZT9lOlZlW2VdPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49VWUubGVuZ3RoO3doaWxlKG4tLSlpZigoZT1VZVtuXSt0KWluIFhlKXJldHVybiBlfShlKXx8ZSl9dmFyIFllPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxRZT0vXi0tLyxKZT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sS2U9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9O2Z1bmN0aW9uIFplKGUsdCxuKXt2YXIgcj1uZS5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsyXS0obnx8MCkpKyhyWzNdfHwicHgiKTp0fWZ1bmN0aW9uIGV0KGUsdCxuLHIsaSxvKXt2YXIgYT0id2lkdGgiPT09dD8xOjAscz0wLHU9MDtpZihuPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKSJtYXJnaW4iPT09biYmKHUrPWsuY3NzKGUsbityZVthXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKHUtPWsuY3NzKGUsInBhZGRpbmciK3JlW2FdLCEwLGkpKSwibWFyZ2luIiE9PW4mJih1LT1rLmNzcyhlLCJib3JkZXIiK3JlW2FdKyJXaWR0aCIsITAsaSkpKToodSs9ay5jc3MoZSwicGFkZGluZyIrcmVbYV0sITAsaSksInBhZGRpbmciIT09bj91Kz1rLmNzcyhlLCJib3JkZXIiK3JlW2FdKyJXaWR0aCIsITAsaSk6cys9ay5jc3MoZSwiYm9yZGVyIityZVthXSsiV2lkdGgiLCEwLGkpKTtyZXR1cm4hciYmMDw9byYmKHUrPU1hdGgubWF4KDAsTWF0aC5jZWlsKGVbIm9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLW8tdS1zLS41KSl8fDApLHV9ZnVuY3Rpb24gdHQoZSx0LG4pe3ZhciByPUZlKGUpLGk9KCF5LmJveFNpemluZ1JlbGlhYmxlKCl8fG4pJiYiYm9yZGVyLWJveCI9PT1rLmNzcyhlLCJib3hTaXppbmciLCExLHIpLG89aSxhPV9lKGUsdCxyKSxzPSJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO2lmKCRlLnRlc3QoYSkpe2lmKCFuKXJldHVybiBhO2E9ImF1dG8ifXJldHVybigheS5ib3hTaXppbmdSZWxpYWJsZSgpJiZpfHwiYXV0byI9PT1hfHwhcGFyc2VGbG9hdChhKSYmImlubGluZSI9PT1rLmNzcyhlLCJkaXNwbGF5IiwhMSxyKSkmJmUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJihpPSJib3JkZXItYm94Ij09PWsuY3NzKGUsImJveFNpemluZyIsITEsciksKG89cyBpbiBlKSYmKGE9ZVtzXSkpLChhPXBhcnNlRmxvYXQoYSl8fDApK2V0KGUsdCxufHwoaT8iYm9yZGVyIjoiY29udGVudCIpLG8scixhKSsicHgifWZ1bmN0aW9uIG50KGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBudC5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfWsuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49X2UoZSwib3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsZ3JpZEFyZWE6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TdGFydDohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1N0YXJ0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1WKHQpLHU9UWUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9R2UocykpLGE9ay5jc3NIb29rc1t0XXx8ay5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiYiZ2V0ImluIGEmJnZvaWQgMCE9PShpPWEuZ2V0KGUsITEscikpP2k6bFt0XTsic3RyaW5nIj09PShvPXR5cGVvZiBuKSYmKGk9bmUuZXhlYyhuKSkmJmlbMV0mJihuPWxlKGUsdCxpKSxvPSJudW1iZXIiKSxudWxsIT1uJiZuPT1uJiYoIm51bWJlciIhPT1vfHx1fHwobis9aSYmaVszXXx8KGsuY3NzTnVtYmVyW3NdPyIiOiJweCIpKSx5LmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChsW3RdPSJpbmhlcml0IiksYSYmInNldCJpbiBhJiZ2b2lkIDA9PT0obj1hLnNldChlLG4scikpfHwodT9sLnNldFByb3BlcnR5KHQsbik6bFt0XT1uKSl9fSxjc3M6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHM9Vih0KTtyZXR1cm4gUWUudGVzdCh0KXx8KHQ9R2UocykpLChhPWsuY3NzSG9va3NbdF18fGsuY3NzSG9va3Nbc10pJiYiZ2V0ImluIGEmJihpPWEuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkmJihpPV9lKGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIEtlJiYoaT1LZVt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksITA9PT1ufHxpc0Zpbml0ZShvKT9vfHwwOmkpOml9fSksay5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHUpe2suY3NzSG9va3NbdV09e2dldDpmdW5jdGlvbihlLHQsbil7aWYodClyZXR1cm4hWWUudGVzdChrLmNzcyhlLCJkaXNwbGF5IikpfHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoP3R0KGUsdSxuKTp1ZShlLEplLGZ1bmN0aW9uKCl7cmV0dXJuIHR0KGUsdSxuKX0pfSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9RmUoZSksbz0heS5zY3JvbGxib3hTaXplKCkmJiJhYnNvbHV0ZSI9PT1pLnBvc2l0aW9uLGE9KG98fG4pJiYiYm9yZGVyLWJveCI9PT1rLmNzcyhlLCJib3hTaXppbmciLCExLGkpLHM9bj9ldChlLHUsbixhLGkpOjA7cmV0dXJuIGEmJm8mJihzLT1NYXRoLmNlaWwoZVsib2Zmc2V0Iit1WzBdLnRvVXBwZXJDYXNlKCkrdS5zbGljZSgxKV0tcGFyc2VGbG9hdChpW3VdKS1ldChlLHUsImJvcmRlciIsITEsaSktLjUpKSxzJiYocj1uZS5leGVjKHQpKSYmInB4IiE9PShyWzNdfHwicHgiKSYmKGUuc3R5bGVbdV09dCx0PWsuY3NzKGUsdSkpLFplKDAsdCxzKX19fSksay5jc3NIb29rcy5tYXJnaW5MZWZ0PXplKHkucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4ocGFyc2VGbG9hdChfZShlLCJtYXJnaW5MZWZ0IikpfHxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdWUoZSx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkrInB4In0pLGsuZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGksbyl7ay5jc3NIb29rc1tpK29dPXtleHBhbmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj17fSxyPSJzdHJpbmciPT10eXBlb2YgZT9lLnNwbGl0KCIgIik6W2VdO3Q8NDt0KyspbltpK3JlW3RdK29dPXJbdF18fHJbdC0yXXx8clswXTtyZXR1cm4gbn19LCJtYXJnaW4iIT09aSYmKGsuY3NzSG9va3NbaStvXS5zZXQ9WmUpfSksay5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiBfKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fSxhPTA7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHI9RmUoZSksaT10Lmxlbmd0aDthPGk7YSsrKW9bdFthXV09ay5jc3MoZSx0W2FdLCExLHIpO3JldHVybiBvfXJldHVybiB2b2lkIDAhPT1uP2suc3R5bGUoZSx0LG4pOmsuY3NzKGUsdCl9LGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfX0pLCgoay5Ud2Vlbj1udCkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpudCxpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHxrLmVhc2luZy5fZGVmYXVsdCx0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KGsuY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1udC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6bnQucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49bnQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz10PWsuZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPXQ9ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpudC5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSkuaW5pdC5wcm90b3R5cGU9bnQucHJvdG90eXBlLChudC5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGwhPWUuZWxlbVtlLnByb3BdJiZudWxsPT1lLmVsZW0uc3R5bGVbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXToodD1rLmNzcyhlLmVsZW0sZS5wcm9wLCIiKSkmJiJhdXRvIiE9PXQ/dDowfSxzZXQ6ZnVuY3Rpb24oZSl7ay5meC5zdGVwW2UucHJvcF0/ay5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5ub2RlVHlwZXx8IWsuY3NzSG9va3NbZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW0dlKGUucHJvcCldP2UuZWxlbVtlLnByb3BdPWUubm93Omsuc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpfX19KS5zY3JvbGxUb3A9bnQucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0say5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfSxfZGVmYXVsdDoic3dpbmcifSxrLmZ4PW50LnByb3RvdHlwZS5pbml0LGsuZnguc3RlcD17fTt2YXIgcnQsaXQsb3QsYXQsc3Q9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLHV0PS9xdWV1ZUhvb2tzJC87ZnVuY3Rpb24gbHQoKXtpdCYmKCExPT09RS5oaWRkZW4mJkMucmVxdWVzdEFuaW1hdGlvbkZyYW1lP0MucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGx0KTpDLnNldFRpbWVvdXQobHQsay5meC5pbnRlcnZhbCksay5meC50aWNrKCkpfWZ1bmN0aW9uIGN0KCl7cmV0dXJuIEMuc2V0VGltZW91dChmdW5jdGlvbigpe3J0PXZvaWQgMH0pLHJ0PURhdGUubm93KCl9ZnVuY3Rpb24gZnQoZSx0KXt2YXIgbixyPTAsaT17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowO3I8NDtyKz0yLXQpaVsibWFyZ2luIisobj1yZVtyXSldPWlbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihpLm9wYWNpdHk9aS53aWR0aD1lKSxpfWZ1bmN0aW9uIHB0KGUsdCxuKXtmb3IodmFyIHIsaT0oZHQudHdlZW5lcnNbdF18fFtdKS5jb25jYXQoZHQudHdlZW5lcnNbIioiXSksbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gZHQobyxlLHQpe3ZhciBuLGEscj0wLGk9ZHQucHJlZmlsdGVycy5sZW5ndGgscz1rLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihhKXJldHVybiExO2Zvcih2YXIgZT1ydHx8Y3QoKSx0PU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi1lKSxuPTEtKHQvbC5kdXJhdGlvbnx8MCkscj0wLGk9bC50d2VlbnMubGVuZ3RoO3I8aTtyKyspbC50d2VlbnNbcl0ucnVuKG4pO3JldHVybiBzLm5vdGlmeVdpdGgobyxbbCxuLHRdKSxuPDEmJmk/dDooaXx8cy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsXSksITEpfSxsPXMucHJvbWlzZSh7ZWxlbTpvLHByb3BzOmsuZXh0ZW5kKHt9LGUpLG9wdHM6ay5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOmsuZWFzaW5nLl9kZWZhdWx0fSx0KSxvcmlnaW5hbFByb3BlcnRpZXM6ZSxvcmlnaW5hbE9wdGlvbnM6dCxzdGFydFRpbWU6cnR8fGN0KCksZHVyYXRpb246dC5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj1rLlR3ZWVuKG8sbC5vcHRzLGUsdCxsLm9wdHMuc3BlY2lhbEVhc2luZ1tlXXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gobiksbn0sc3RvcDpmdW5jdGlvbihlKXt2YXIgdD0wLG49ZT9sLnR3ZWVucy5sZW5ndGg6MDtpZihhKXJldHVybiB0aGlzO2ZvcihhPSEwO3Q8bjt0KyspbC50d2VlbnNbdF0ucnVuKDEpO3JldHVybiBlPyhzLm5vdGlmeVdpdGgobyxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKG8sW2wsZV0pKTpzLnJlamVjdFdpdGgobyxbbCxlXSksdGhpc319KSxjPWwucHJvcHM7Zm9yKCFmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihpPXRbcj1WKG4pXSxvPWVbbl0sQXJyYXkuaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLChhPWsuY3NzSG9va3Nbcl0pJiYiZXhwYW5kImluIGEpZm9yKG4gaW4gbz1hLmV4cGFuZChvKSxkZWxldGUgZVtyXSxvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpO2Vsc2UgdFtyXT1pfShjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtyPGk7cisrKWlmKG49ZHQucHJlZmlsdGVyc1tyXS5jYWxsKGwsbyxjLGwub3B0cykpcmV0dXJuIG0obi5zdG9wKSYmKGsuX3F1ZXVlSG9va3MobC5lbGVtLGwub3B0cy5xdWV1ZSkuc3RvcD1uLnN0b3AuYmluZChuKSksbjtyZXR1cm4gay5tYXAoYyxwdCxsKSxtKGwub3B0cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKG8sbCksbC5wcm9ncmVzcyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyksay5meC50aW1lcihrLmV4dGVuZCh1LHtlbGVtOm8sYW5pbTpsLHF1ZXVlOmwub3B0cy5xdWV1ZX0pKSxsfWsuQW5pbWF0aW9uPWsuZXh0ZW5kKGR0LHt0d2VlbmVyczp7IioiOltmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KTtyZXR1cm4gbGUobi5lbGVtLGUsbmUuZXhlYyh0KSxuKSxufV19LHR3ZWVuZXI6ZnVuY3Rpb24oZSx0KXttKGUpPyh0PWUsZT1bIioiXSk6ZT1lLm1hdGNoKFIpO2Zvcih2YXIgbixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW49ZVtyXSxkdC50d2VlbmVyc1tuXT1kdC50d2VlbmVyc1tuXXx8W10sZHQudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGMsZj0id2lkdGgiaW4gdHx8ImhlaWdodCJpbiB0LHA9dGhpcyxkPXt9LGg9ZS5zdHlsZSxnPWUubm9kZVR5cGUmJnNlKGUpLHY9US5nZXQoZSwiZnhzaG93Iik7Zm9yKHIgaW4gbi5xdWV1ZXx8KG51bGw9PShhPWsuX3F1ZXVlSG9va3MoZSwiZngiKSkudW5xdWV1ZWQmJihhLnVucXVldWVkPTAscz1hLmVtcHR5LmZpcmUsYS5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7YS51bnF1ZXVlZHx8cygpfSksYS51bnF1ZXVlZCsrLHAuYWx3YXlzKGZ1bmN0aW9uKCl7cC5hbHdheXMoZnVuY3Rpb24oKXthLnVucXVldWVkLS0say5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8YS5lbXB0eS5maXJlKCl9KX0pKSx0KWlmKGk9dFtyXSxzdC50ZXN0KGkpKXtpZihkZWxldGUgdFtyXSxvPW98fCJ0b2dnbGUiPT09aSxpPT09KGc/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWl8fCF2fHx2b2lkIDA9PT12W3JdKWNvbnRpbnVlO2c9ITB9ZFtyXT12JiZ2W3JdfHxrLnN0eWxlKGUscil9aWYoKHU9IWsuaXNFbXB0eU9iamVjdCh0KSl8fCFrLmlzRW1wdHlPYmplY3QoZCkpZm9yKHIgaW4gZiYmMT09PWUubm9kZVR5cGUmJihuLm92ZXJmbG93PVtoLm92ZXJmbG93LGgub3ZlcmZsb3dYLGgub3ZlcmZsb3dZXSxudWxsPT0obD12JiZ2LmRpc3BsYXkpJiYobD1RLmdldChlLCJkaXNwbGF5IikpLCJub25lIj09PShjPWsuY3NzKGUsImRpc3BsYXkiKSkmJihsP2M9bDooZmUoW2VdLCEwKSxsPWUuc3R5bGUuZGlzcGxheXx8bCxjPWsuY3NzKGUsImRpc3BsYXkiKSxmZShbZV0pKSksKCJpbmxpbmUiPT09Y3x8ImlubGluZS1ibG9jayI9PT1jJiZudWxsIT1sKSYmIm5vbmUiPT09ay5jc3MoZSwiZmxvYXQiKSYmKHV8fChwLmRvbmUoZnVuY3Rpb24oKXtoLmRpc3BsYXk9bH0pLG51bGw9PWwmJihjPWguZGlzcGxheSxsPSJub25lIj09PWM/IiI6YykpLGguZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihoLm92ZXJmbG93PSJoaWRkZW4iLHAuYWx3YXlzKGZ1bmN0aW9uKCl7aC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGgub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0saC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKSx1PSExLGQpdXx8KHY/ImhpZGRlbiJpbiB2JiYoZz12LmhpZGRlbik6dj1RLmFjY2VzcyhlLCJmeHNob3ciLHtkaXNwbGF5Omx9KSxvJiYodi5oaWRkZW49IWcpLGcmJmZlKFtlXSwhMCkscC5kb25lKGZ1bmN0aW9uKCl7Zm9yKHIgaW4gZ3x8ZmUoW2VdKSxRLnJlbW92ZShlLCJmeHNob3ciKSxkKWsuc3R5bGUoZSxyLGRbcl0pfSkpLHU9cHQoZz92W3JdOjAscixwKSxyIGluIHZ8fCh2W3JdPXUuc3RhcnQsZyYmKHUuZW5kPXUuc3RhcnQsdS5zdGFydD0wKSl9XSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P2R0LnByZWZpbHRlcnMudW5zaGlmdChlKTpkdC5wcmVmaWx0ZXJzLnB1c2goZSl9fSksay5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP2suZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8bShlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYhbSh0KSYmdH07cmV0dXJuIGsuZngub2ZmP3IuZHVyYXRpb249MDoibnVtYmVyIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIGsuZnguc3BlZWRzP3IuZHVyYXRpb249ay5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJhdGlvbj1rLmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXttKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZrLmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0say5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoc2UpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWsuaXNFbXB0eU9iamVjdCh0KSxvPWsuc3BlZWQoZSxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgZT1kdCh0aGlzLGsuZXh0ZW5kKHt9LHQpLG8pOyhpfHxRLmdldCh0aGlzLCJmaW5pc2giKSkmJmUuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGksZSxvKXt2YXIgYT1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG8pfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGkmJihvPWUsZT1pLGk9dm9pZCAwKSxlJiYhMSE9PWkmJnRoaXMucXVldWUoaXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9ITAsdD1udWxsIT1pJiZpKyJxdWV1ZUhvb2tzIixuPWsudGltZXJzLHI9US5nZXQodGhpcyk7aWYodClyW3RdJiZyW3RdLnN0b3AmJmEoclt0XSk7ZWxzZSBmb3IodCBpbiByKXJbdF0mJnJbdF0uc3RvcCYmdXQudGVzdCh0KSYmYShyW3RdKTtmb3IodD1uLmxlbmd0aDt0LS07KW5bdF0uZWxlbSE9PXRoaXN8fG51bGwhPWkmJm5bdF0ucXVldWUhPT1pfHwoblt0XS5hbmltLnN0b3AobyksZT0hMSxuLnNwbGljZSh0LDEpKTshZSYmb3x8ay5kZXF1ZXVlKHRoaXMsaSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiExIT09YSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdD1RLmdldCh0aGlzKSxuPXRbYSsicXVldWUiXSxyPXRbYSsicXVldWVIb29rcyJdLGk9ay50aW1lcnMsbz1uP24ubGVuZ3RoOjA7Zm9yKHQuZmluaXNoPSEwLGsucXVldWUodGhpcyxhLFtdKSxyJiZyLnN0b3AmJnIuc3RvcC5jYWxsKHRoaXMsITApLGU9aS5sZW5ndGg7ZS0tOylpW2VdLmVsZW09PT10aGlzJiZpW2VdLnF1ZXVlPT09YSYmKGlbZV0uYW5pbS5zdG9wKCEwKSxpLnNwbGljZShlLDEpKTtmb3IoZT0wO2U8bztlKyspbltlXSYmbltlXS5maW5pc2gmJm5bZV0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIHQuZmluaXNofSl9fSksay5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHIpe3ZhciBpPWsuZm5bcl07ay5mbltyXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGZ0KHIsITApLGUsdCxuKX19KSxrLmVhY2goe3NsaWRlRG93bjpmdCgic2hvdyIpLHNsaWRlVXA6ZnQoImhpZGUiKSxzbGlkZVRvZ2dsZTpmdCgidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHIpe2suZm5bZV09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmFuaW1hdGUocixlLHQsbil9fSksay50aW1lcnM9W10say5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD0wLG49ay50aW1lcnM7Zm9yKHJ0PURhdGUubm93KCk7dDxuLmxlbmd0aDt0KyspKGU9blt0XSkoKXx8blt0XSE9PWV8fG4uc3BsaWNlKHQtLSwxKTtuLmxlbmd0aHx8ay5meC5zdG9wKCkscnQ9dm9pZCAwfSxrLmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2sudGltZXJzLnB1c2goZSksay5meC5zdGFydCgpfSxrLmZ4LmludGVydmFsPTEzLGsuZnguc3RhcnQ9ZnVuY3Rpb24oKXtpdHx8KGl0PSEwLGx0KCkpfSxrLmZ4LnN0b3A9ZnVuY3Rpb24oKXtpdD1udWxsfSxrLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxrLmZuLmRlbGF5PWZ1bmN0aW9uKHIsZSl7cmV0dXJuIHI9ay5meCYmay5meC5zcGVlZHNbcl18fHIsZT1lfHwiZngiLHRoaXMucXVldWUoZSxmdW5jdGlvbihlLHQpe3ZhciBuPUMuc2V0VGltZW91dChlLHIpO3Quc3RvcD1mdW5jdGlvbigpe0MuY2xlYXJUaW1lb3V0KG4pfX0pfSxvdD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYXQ9RS5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChFLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxvdC50eXBlPSJjaGVja2JveCIseS5jaGVja09uPSIiIT09b3QudmFsdWUseS5vcHRTZWxlY3RlZD1hdC5zZWxlY3RlZCwob3Q9RS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS52YWx1ZT0idCIsb3QudHlwZT0icmFkaW8iLHkucmFkaW9WYWx1ZT0idCI9PT1vdC52YWx1ZTt2YXIgaHQsZ3Q9ay5leHByLmF0dHJIYW5kbGU7ay5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gXyh0aGlzLGsuYXR0cixlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ay5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSxrLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGUuZ2V0QXR0cmlidXRlP2sucHJvcChlLHQsbik6KDE9PT1vJiZrLmlzWE1MRG9jKGUpfHwoaT1rLmF0dHJIb29rc1t0LnRvTG93ZXJDYXNlKCldfHwoay5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9odDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgay5yZW1vdmVBdHRyKGUsdCk6aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6KGUuc2V0QXR0cmlidXRlKHQsbisiIiksbik6aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjpudWxsPT0ocj1rLmZpbmQuYXR0cihlLHQpKT92b2lkIDA6cil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXkucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJkEoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10JiZ0Lm1hdGNoKFIpO2lmKGkmJjE9PT1lLm5vZGVUeXBlKXdoaWxlKG49aVtyKytdKWUucmVtb3ZlQXR0cmlidXRlKG4pfX0pLGh0PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD9rLnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSxrLmVhY2goay5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgYT1ndFt0XXx8ay5maW5kLmF0dHI7Z3RbdF09ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIG58fChpPWd0W29dLGd0W29dPXIscj1udWxsIT1hKGUsdCxuKT9vOm51bGwsZ3Rbb109aSkscn19KTt2YXIgdnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSx5dD0vXig/OmF8YXJlYSkkL2k7ZnVuY3Rpb24gbXQoZSl7cmV0dXJuKGUubWF0Y2goUil8fFtdKS5qb2luKCIgIil9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiJ9ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZToic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goUil8fFtdfWsuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIF8odGhpcyxrLnByb3AsZSx0LDE8YXJndW1lbnRzLmxlbmd0aCl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2sucHJvcEZpeFtlXXx8ZV19KX19KSxrLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4gMT09PW8mJmsuaXNYTUxEb2MoZSl8fCh0PWsucHJvcEZpeFt0XXx8dCxpPWsucHJvcEhvb2tzW3RdKSx2b2lkIDAhPT1uP2kmJiJzZXQiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOmVbdF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD1rLmZpbmQuYXR0cihlLCJ0YWJpbmRleCIpO3JldHVybiB0P3BhcnNlSW50KHQsMTApOnZ0LnRlc3QoZS5ub2RlTmFtZSl8fHl0LnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOi0xfX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifX0pLHkub3B0U2VsZWN0ZWR8fChrLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3QmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksay5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtrLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSksay5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYSxzLHU9MDtpZihtKHQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7ayh0aGlzKS5hZGRDbGFzcyh0LmNhbGwodGhpcyxlLHh0KHRoaXMpKSl9KTtpZigoZT1idCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9eHQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK210KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXIuaW5kZXhPZigiICIrbysiICIpPDAmJihyKz1vKyIgIik7aSE9PShzPW10KHIpKSYmbi5zZXRBdHRyaWJ1dGUoImNsYXNzIixzKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLnJlbW92ZUNsYXNzKHQuY2FsbCh0aGlzLGUseHQodGhpcykpKX0pO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLmF0dHIoImNsYXNzIiwiIik7aWYoKGU9YnQodCkpLmxlbmd0aCl3aGlsZShuPXRoaXNbdSsrXSlpZihpPXh0KG4pLHI9MT09PW4ubm9kZVR5cGUmJiIgIittdChpKSsiICIpe2E9MDt3aGlsZShvPWVbYSsrXSl3aGlsZSgtMTxyLmluZGV4T2YoIiAiK28rIiAiKSlyPXIucmVwbGFjZSgiICIrbysiICIsIiAiKTtpIT09KHM9bXQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihpLHQpe3ZhciBvPXR5cGVvZiBpLGE9InN0cmluZyI9PT1vfHxBcnJheS5pc0FycmF5KGkpO3JldHVybiJib29sZWFuIj09dHlwZW9mIHQmJmE/dD90aGlzLmFkZENsYXNzKGkpOnRoaXMucmVtb3ZlQ2xhc3MoaSk6bShpKT90aGlzLmVhY2goZnVuY3Rpb24oZSl7ayh0aGlzKS50b2dnbGVDbGFzcyhpLmNhbGwodGhpcyxlLHh0KHRoaXMpLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7aWYoYSl7dD0wLG49ayh0aGlzKSxyPWJ0KGkpO3doaWxlKGU9clt0KytdKW4uaGFzQ2xhc3MoZSk/bi5yZW1vdmVDbGFzcyhlKTpuLmFkZENsYXNzKGUpfWVsc2Ugdm9pZCAwIT09aSYmImJvb2xlYW4iIT09b3x8KChlPXh0KHRoaXMpKSYmUS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsZSksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKCJjbGFzcyIsZXx8ITE9PT1pPyIiOlEuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpKX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHI9MDt0PSIgIitlKyIgIjt3aGlsZShuPXRoaXNbcisrXSlpZigxPT09bi5ub2RlVHlwZSYmLTE8KCIgIittdCh4dChuKSkrIiAiKS5pbmRleE9mKHQpKXJldHVybiEwO3JldHVybiExfX0pO3ZhciB3dD0vXHIvZztrLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKG4pe3ZhciByLGUsaSx0PXRoaXNbMF07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bShuKSx0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ7MT09PXRoaXMubm9kZVR5cGUmJihudWxsPT0odD1pP24uY2FsbCh0aGlzLGUsayh0aGlzKS52YWwoKSk6bik/dD0iIjoibnVtYmVyIj09dHlwZW9mIHQ/dCs9IiI6QXJyYXkuaXNBcnJheSh0KSYmKHQ9ay5tYXAodCxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifSkpLChyPWsudmFsSG9va3NbdGhpcy50eXBlXXx8ay52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmInNldCJpbiByJiZ2b2lkIDAhPT1yLnNldCh0aGlzLHQsInZhbHVlIil8fCh0aGlzLnZhbHVlPXQpKX0pKTp0PyhyPWsudmFsSG9va3NbdC50eXBlXXx8ay52YWxIb29rc1t0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmImdldCJpbiByJiZ2b2lkIDAhPT0oZT1yLmdldCh0LCJ2YWx1ZSIpKT9lOiJzdHJpbmciPT10eXBlb2YoZT10LnZhbHVlKT9lLnJlcGxhY2Uod3QsIiIpOm51bGw9PWU/IiI6ZTp2b2lkIDB9fSksay5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD1rLmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVybiBudWxsIT10P3Q6bXQoay50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUub3B0aW9ucyxvPWUuc2VsZWN0ZWRJbmRleCxhPSJzZWxlY3Qtb25lIj09PWUudHlwZSxzPWE/bnVsbDpbXSx1PWE/bysxOmkubGVuZ3RoO2ZvcihyPW88MD91OmE/bzowO3I8dTtyKyspaWYoKChuPWlbcl0pLnNlbGVjdGVkfHxyPT09bykmJiFuLmRpc2FibGVkJiYoIW4ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IUEobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD1rKG4pLnZhbCgpLGEpcmV0dXJuIHQ7cy5wdXNoKHQpfXJldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5vcHRpb25zLG89ay5tYWtlQXJyYXkodCksYT1pLmxlbmd0aDt3aGlsZShhLS0pKChyPWlbYV0pLnNlbGVjdGVkPS0xPGsuaW5BcnJheShrLnZhbEhvb2tzLm9wdGlvbi5nZXQociksbykpJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX19KSxrLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtrLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmNoZWNrZWQ9LTE8ay5pbkFycmF5KGsoZSkudmFsKCksdCl9fSx5LmNoZWNrT258fChrLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSkseS5mb2N1c2luPSJvbmZvY3VzaW4iaW4gQzt2YXIgVHQ9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLEN0PWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9O2suZXh0ZW5kKGsuZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsLGMsZixwPVtufHxFXSxkPXYuY2FsbChlLCJ0eXBlIik/ZS50eXBlOmUsaD12LmNhbGwoZSwibmFtZXNwYWNlIik/ZS5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihvPWY9YT1uPW58fEUsMyE9PW4ubm9kZVR5cGUmJjghPT1uLm5vZGVUeXBlJiYhVHQudGVzdChkK2suZXZlbnQudHJpZ2dlcmVkKSYmKC0xPGQuaW5kZXhPZigiLiIpJiYoZD0oaD1kLnNwbGl0KCIuIikpLnNoaWZ0KCksaC5zb3J0KCkpLHU9ZC5pbmRleE9mKCI6Iik8MCYmIm9uIitkLChlPWVbay5leHBhbmRvXT9lOm5ldyBrLkV2ZW50KGQsIm9iamVjdCI9PXR5cGVvZiBlJiZlKSkuaXNUcmlnZ2VyPXI/MjozLGUubmFtZXNwYWNlPWguam9pbigiLiIpLGUucm5hbWVzcGFjZT1lLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsZS5yZXN1bHQ9dm9pZCAwLGUudGFyZ2V0fHwoZS50YXJnZXQ9biksdD1udWxsPT10P1tlXTprLm1ha2VBcnJheSh0LFtlXSksYz1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LHJ8fCFjLnRyaWdnZXJ8fCExIT09Yy50cmlnZ2VyLmFwcGx5KG4sdCkpKXtpZighciYmIWMubm9CdWJibGUmJiF4KG4pKXtmb3Iocz1jLmRlbGVnYXRlVHlwZXx8ZCxUdC50ZXN0KHMrZCl8fChvPW8ucGFyZW50Tm9kZSk7bztvPW8ucGFyZW50Tm9kZSlwLnB1c2gobyksYT1vO2E9PT0obi5vd25lckRvY3VtZW50fHxFKSYmcC5wdXNoKGEuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93fHxDKX1pPTA7d2hpbGUoKG89cFtpKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlmPW8sZS50eXBlPTE8aT9zOmMuYmluZFR5cGV8fGQsKGw9KFEuZ2V0KG8sImV2ZW50cyIpfHx7fSlbZS50eXBlXSYmUS5nZXQobywiaGFuZGxlIikpJiZsLmFwcGx5KG8sdCksKGw9dSYmb1t1XSkmJmwuYXBwbHkmJkcobykmJihlLnJlc3VsdD1sLmFwcGx5KG8sdCksITE9PT1lLnJlc3VsdCYmZS5wcmV2ZW50RGVmYXVsdCgpKTtyZXR1cm4gZS50eXBlPWQscnx8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Yy5fZGVmYXVsdCYmITEhPT1jLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksdCl8fCFHKG4pfHx1JiZtKG5bZF0pJiYheChuKSYmKChhPW5bdV0pJiYoblt1XT1udWxsKSxrLmV2ZW50LnRyaWdnZXJlZD1kLGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmZi5hZGRFdmVudExpc3RlbmVyKGQsQ3QpLG5bZF0oKSxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLEN0KSxrLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsYSYmKG5bdV09YSkpLGUucmVzdWx0fX0sc2ltdWxhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWsuZXh0ZW5kKG5ldyBrLkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMH0pO2suZXZlbnQudHJpZ2dlcihyLG51bGwsdCl9fSksay5mbi5leHRlbmQoe3RyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ay5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXNbMF07aWYobilyZXR1cm4gay5ldmVudC50cmlnZ2VyKGUsdCxuLCEwKX19KSx5LmZvY3VzaW58fGsuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24obixyKXt2YXIgaT1mdW5jdGlvbihlKXtrLmV2ZW50LnNpbXVsYXRlKHIsZS50YXJnZXQsay5ldmVudC5maXgoZSkpfTtrLmV2ZW50LnNwZWNpYWxbcl09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLHQ9US5hY2Nlc3MoZSxyKTt0fHxlLmFkZEV2ZW50TGlzdGVuZXIobixpLCEwKSxRLmFjY2VzcyhlLHIsKHR8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyx0PVEuYWNjZXNzKGUsciktMTt0P1EuYWNjZXNzKGUscix0KTooZS5yZW1vdmVFdmVudExpc3RlbmVyKG4saSwhMCksUS5yZW1vdmUoZSxyKSl9fX0pO3ZhciBFdD1DLmxvY2F0aW9uLGt0PURhdGUubm93KCksU3Q9L1w/LztrLnBhcnNlWE1MPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e3Q9KG5ldyBDLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIil9Y2F0Y2goZSl7dD12b2lkIDB9cmV0dXJuIHQmJiF0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8ay5lcnJvcigiSW52YWxpZCBYTUw6ICIrZSksdH07dmFyIE50PS9cW1xdJC8sQXQ9L1xyP1xuL2csRHQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGp0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBxdChuLGUscixpKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKWsuZWFjaChlLGZ1bmN0aW9uKGUsdCl7cnx8TnQudGVzdChuKT9pKG4sdCk6cXQobisiWyIrKCJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dD9lOiIiKSsiXSIsdCxyLGkpfSk7ZWxzZSBpZihyfHwib2JqZWN0IiE9PXcoZSkpaShuLGUpO2Vsc2UgZm9yKHQgaW4gZSlxdChuKyJbIit0KyJdIixlW3RdLHIsaSl9ay5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPW0odCk/dCgpOnQ7cltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQobnVsbD09bj8iIjpuKX07aWYobnVsbD09ZSlyZXR1cm4iIjtpZihBcnJheS5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIWsuaXNQbGFpbk9iamVjdChlKSlrLmVhY2goZSxmdW5jdGlvbigpe2kodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IobiBpbiBlKXF0KG4sZVtuXSx0LGkpO3JldHVybiByLmpvaW4oIiYiKX0say5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBrLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9ay5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGU/ay5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhayh0aGlzKS5pcygiOmRpc2FibGVkIikmJmp0LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFEdC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhcGUudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj1rKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1uP251bGw6QXJyYXkuaXNBcnJheShuKT9rLm1hcChuLGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2UoQXQsIlxyXG4iKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKEF0LCJcclxuIil9fSkuZ2V0KCl9fSk7dmFyIEx0PS8lMjAvZyxIdD0vIy4qJC8sT3Q9LyhbPyZdKV89W14mXSovLFB0PS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvZ20sUnQ9L14oPzpHRVR8SEVBRCkkLyxNdD0vXlwvXC8vLEl0PXt9LFd0PXt9LCR0PSIqLyIuY29uY2F0KCIqIiksRnQ9RS5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gQnQobyl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7InN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9IioiKTt2YXIgbixyPTAsaT1lLnRvTG93ZXJDYXNlKCkubWF0Y2goUil8fFtdO2lmKG0odCkpd2hpbGUobj1pW3IrK10pIisiPT09blswXT8obj1uLnNsaWNlKDEpfHwiKiIsKG9bbl09b1tuXXx8W10pLnVuc2hpZnQodCkpOihvW25dPW9bbl18fFtdKS5wdXNoKHQpfX1mdW5jdGlvbiBfdCh0LGksbyxhKXt2YXIgcz17fSx1PXQ9PT1XdDtmdW5jdGlvbiBsKGUpe3ZhciByO3JldHVybiBzW2VdPSEwLGsuZWFjaCh0W2VdfHxbXSxmdW5jdGlvbihlLHQpe3ZhciBuPXQoaSxvLGEpO3JldHVybiJzdHJpbmciIT10eXBlb2Ygbnx8dXx8c1tuXT91PyEocj1uKTp2b2lkIDA6KGkuZGF0YVR5cGVzLnVuc2hpZnQobiksbChuKSwhMSl9KSxyfXJldHVybiBsKGkuZGF0YVR5cGVzWzBdKXx8IXNbIioiXSYmbCgiKiIpfWZ1bmN0aW9uIHp0KGUsdCl7dmFyIG4scixpPWsuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJmsuZXh0ZW5kKCEwLGUsciksZX1GdC5ocmVmPUV0LmhyZWYsay5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOkV0LmhyZWYsdHlwZToiR0VUIixpc0xvY2FsOi9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLnRlc3QoRXQucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6JHQsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6SlNPTi5wYXJzZSwidGV4dCB4bWwiOmsucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P3p0KHp0KGUsay5hamF4U2V0dGluZ3MpLHQpOnp0KGsuYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOkJ0KEl0KSxhamF4VHJhbnNwb3J0OkJ0KFd0KSxhamF4OmZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dm9pZCAwKSx0PXR8fHt9O3ZhciBjLGYscCxuLGQscixoLGcsaSxvLHY9ay5hamF4U2V0dXAoe30sdCkseT12LmNvbnRleHR8fHYsbT12LmNvbnRleHQmJih5Lm5vZGVUeXBlfHx5LmpxdWVyeSk/ayh5KTprLmV2ZW50LHg9ay5EZWZlcnJlZCgpLGI9ay5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksdz12LnN0YXR1c0NvZGV8fHt9LGE9e30scz17fSx1PSJjYW5jZWxlZCIsVD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGgpe2lmKCFuKXtuPXt9O3doaWxlKHQ9UHQuZXhlYyhwKSluW3RbMV0udG9Mb3dlckNhc2UoKSsiICJdPShuW3RbMV0udG9Mb3dlckNhc2UoKSsiICJdfHxbXSkuY29uY2F0KHRbMl0pfXQ9bltlLnRvTG93ZXJDYXNlKCkrIiAiXX1yZXR1cm4gbnVsbD09dD9udWxsOnQuam9pbigiLCAiKX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGg/cDpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWgmJihlPXNbZS50b0xvd2VyQ2FzZSgpXT1zW2UudG9Mb3dlckNhc2UoKV18fGUsYVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1oJiYodi5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoaClULmFsd2F5cyhlW1Quc3RhdHVzXSk7ZWxzZSBmb3IodCBpbiBlKXdbdF09W3dbdF0sZVt0XV07cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fHU7cmV0dXJuIGMmJmMuYWJvcnQodCksbCgwLHQpLHRoaXN9fTtpZih4LnByb21pc2UoVCksdi51cmw9KChlfHx2LnVybHx8RXQuaHJlZikrIiIpLnJlcGxhY2UoTXQsRXQucHJvdG9jb2wrIi8vIiksdi50eXBlPXQubWV0aG9kfHx0LnR5cGV8fHYubWV0aG9kfHx2LnR5cGUsdi5kYXRhVHlwZXM9KHYuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChSKXx8WyIiXSxudWxsPT12LmNyb3NzRG9tYWluKXtyPUUuY3JlYXRlRWxlbWVudCgiYSIpO3RyeXtyLmhyZWY9di51cmwsci5ocmVmPXIuaHJlZix2LmNyb3NzRG9tYWluPUZ0LnByb3RvY29sKyIvLyIrRnQuaG9zdCE9ci5wcm90b2NvbCsiLy8iK3IuaG9zdH1jYXRjaChlKXt2LmNyb3NzRG9tYWluPSEwfX1pZih2LmRhdGEmJnYucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2Ygdi5kYXRhJiYodi5kYXRhPWsucGFyYW0odi5kYXRhLHYudHJhZGl0aW9uYWwpKSxfdChJdCx2LHQsVCksaClyZXR1cm4gVDtmb3IoaSBpbihnPWsuZXZlbnQmJnYuZ2xvYmFsKSYmMD09ay5hY3RpdmUrKyYmay5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSx2LnR5cGU9di50eXBlLnRvVXBwZXJDYXNlKCksdi5oYXNDb250ZW50PSFSdC50ZXN0KHYudHlwZSksZj12LnVybC5yZXBsYWNlKEh0LCIiKSx2Lmhhc0NvbnRlbnQ/di5kYXRhJiZ2LnByb2Nlc3NEYXRhJiYwPT09KHYuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmKHYuZGF0YT12LmRhdGEucmVwbGFjZShMdCwiKyIpKToobz12LnVybC5zbGljZShmLmxlbmd0aCksdi5kYXRhJiYodi5wcm9jZXNzRGF0YXx8InN0cmluZyI9PXR5cGVvZiB2LmRhdGEpJiYoZis9KFN0LnRlc3QoZik/IiYiOiI/Iikrdi5kYXRhLGRlbGV0ZSB2LmRhdGEpLCExPT09di5jYWNoZSYmKGY9Zi5yZXBsYWNlKE90LCIkMSIpLG89KFN0LnRlc3QoZik/IiYiOiI/IikrIl89IitrdCsrK28pLHYudXJsPWYrbyksdi5pZk1vZGlmaWVkJiYoay5sYXN0TW9kaWZpZWRbZl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGsubGFzdE1vZGlmaWVkW2ZdKSxrLmV0YWdbZl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsay5ldGFnW2ZdKSksKHYuZGF0YSYmdi5oYXNDb250ZW50JiYhMSE9PXYuY29udGVudFR5cGV8fHQuY29udGVudFR5cGUpJiZULnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsdi5jb250ZW50VHlwZSksVC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLHYuZGF0YVR5cGVzWzBdJiZ2LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dP3YuYWNjZXB0c1t2LmRhdGFUeXBlc1swXV0rKCIqIiE9PXYuZGF0YVR5cGVzWzBdPyIsICIrJHQrIjsgcT0wLjAxIjoiIik6di5hY2NlcHRzWyIqIl0pLHYuaGVhZGVycylULnNldFJlcXVlc3RIZWFkZXIoaSx2LmhlYWRlcnNbaV0pO2lmKHYuYmVmb3JlU2VuZCYmKCExPT09di5iZWZvcmVTZW5kLmNhbGwoeSxULHYpfHxoKSlyZXR1cm4gVC5hYm9ydCgpO2lmKHU9ImFib3J0IixiLmFkZCh2LmNvbXBsZXRlKSxULmRvbmUodi5zdWNjZXNzKSxULmZhaWwodi5lcnJvciksYz1fdChXdCx2LHQsVCkpe2lmKFQucmVhZHlTdGF0ZT0xLGcmJm0udHJpZ2dlcigiYWpheFNlbmQiLFtULHZdKSxoKXJldHVybiBUO3YuYXN5bmMmJjA8di50aW1lb3V0JiYoZD1DLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtULmFib3J0KCJ0aW1lb3V0Iil9LHYudGltZW91dCkpO3RyeXtoPSExLGMuc2VuZChhLGwpfWNhdGNoKGUpe2lmKGgpdGhyb3cgZTtsKC0xLGUpfX1lbHNlIGwoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGwoZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPXQ7aHx8KGg9ITAsZCYmQy5jbGVhclRpbWVvdXQoZCksYz12b2lkIDAscD1yfHwiIixULnJlYWR5U3RhdGU9MDxlPzQ6MCxpPTIwMDw9ZSYmZTwzMDB8fDMwND09PWUsbiYmKHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5jb250ZW50cyx1PWUuZGF0YVR5cGVzO3doaWxlKCIqIj09PXVbMF0pdS5zaGlmdCgpLHZvaWQgMD09PXImJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihyKWZvcihpIGluIHMpaWYoc1tpXSYmc1tpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpKyIgIit1WzBdXSl7bz1pO2JyZWFrfWF8fChhPWkpfW89b3x8YX1pZihvKXJldHVybiBvIT09dVswXSYmdS51bnNoaWZ0KG8pLG5bb119KHYsVCxuKSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoay5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKGsuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLWsuYWN0aXZlfHxrLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGsuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBrLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxrLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtrW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksay5hamF4KGsuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxrLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxrLl9ldmFsVXJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGsuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0IixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbigpe319LGRhdGFGaWx0ZXI6ZnVuY3Rpb24oZSl7ay5nbG9iYWxFdmFsKGUsdCl9fSl9LGsuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PWsoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1rKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtrKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLGsuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hay5leHByLnBzZXVkb3MudmlzaWJsZShlKX0say5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LGsuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIFV0PXswOjIwMCwxMjIzOjIwNH0sWHQ9ay5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhWHQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gWHQseS5hamF4PVh0PSEhWHQsay5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHxYdCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChVdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksay5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxrLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gay5nbG9iYWxFdmFsKGUpLGV9fX0pLGsuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxrLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1rKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgVnQsR3Q9W10sWXQ9Lyg9KVw/KD89JnwkKXxcP1w/LztrLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9R3QucG9wKCl8fGsuZXhwYW5kbysiXyIra3QrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLGsuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPSExIT09ZS5qc29ucCYmKFl0LnRlc3QoZS51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgZS5kYXRhJiYwPT09KGUuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmWXQudGVzdChlLmRhdGEpJiYiZGF0YSIpO2lmKGF8fCJqc29ucCI9PT1lLmRhdGFUeXBlc1swXSlyZXR1cm4gcj1lLmpzb25wQ2FsbGJhY2s9bShlLmpzb25wQ2FsbGJhY2spP2UuanNvbnBDYWxsYmFjaygpOmUuanNvbnBDYWxsYmFjayxhP2VbYV09ZVthXS5yZXBsYWNlKFl0LCIkMSIrcik6ITEhPT1lLmpzb25wJiYoZS51cmwrPShTdC50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmpzb25wKyI9IityKSxlLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gb3x8ay5lcnJvcihyKyIgd2FzIG5vdCBjYWxsZWQiKSxvWzBdfSxlLmRhdGFUeXBlc1swXT0ianNvbiIsaT1DW3JdLENbcl09ZnVuY3Rpb24oKXtvPWFyZ3VtZW50c30sbi5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1pP2soQykucmVtb3ZlUHJvcChyKTpDW3JdPWksZVtyXSYmKGUuanNvbnBDYWxsYmFjaz10Lmpzb25wQ2FsbGJhY2ssR3QucHVzaChyKSksbyYmbShpKSYmaShvWzBdKSxvPWk9dm9pZCAwfSksInNjcmlwdCJ9KSx5LmNyZWF0ZUhUTUxEb2N1bWVudD0oKFZ0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKS5ib2R5KS5pbm5lckhUTUw9Ijxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IiwyPT09VnQuY2hpbGROb2Rlcy5sZW5ndGgpLGsucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/W106KCJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdHx8KHkuY3JlYXRlSFRNTERvY3VtZW50Pygocj0odD1FLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikpLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSkuaHJlZj1FLmxvY2F0aW9uLmhyZWYsdC5oZWFkLmFwcGVuZENoaWxkKHIpKTp0PUUpLG89IW4mJltdLChpPUQuZXhlYyhlKSk/W3QuY3JlYXRlRWxlbWVudChpWzFdKV06KGk9d2UoW2VdLHQsbyksbyYmby5sZW5ndGgmJmsobykucmVtb3ZlKCksay5tZXJnZShbXSxpLmNoaWxkTm9kZXMpKSk7dmFyIHIsaSxvfSxrLmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPXRoaXMscz1lLmluZGV4T2YoIiAiKTtyZXR1cm4tMTxzJiYocj1tdChlLnNsaWNlKHMpKSxlPWUuc2xpY2UoMCxzKSksbSh0KT8obj10LHQ9dm9pZCAwKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihpPSJQT1NUIiksMDxhLmxlbmd0aCYmay5hamF4KHt1cmw6ZSx0eXBlOml8fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLGEuaHRtbChyP2soIjxkaXY+IikuYXBwZW5kKGsucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuYWx3YXlzKG4mJmZ1bmN0aW9uKGUsdCl7YS5lYWNoKGZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pfSksdGhpc30say5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oZSx0KXtrLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKHQsZSl9fSksay5leHByLnBzZXVkb3MuYW5pbWF0ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGsuZ3JlcChrLnRpbWVycyxmdW5jdGlvbihlKXtyZXR1cm4gdD09PWUuZWxlbX0pLmxlbmd0aH0say5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9ay5jc3MoZSwicG9zaXRpb24iKSxjPWsoZSksZj17fTsic3RhdGljIj09PWwmJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHM9Yy5vZmZzZXQoKSxvPWsuY3NzKGUsInRvcCIpLHU9ay5jc3MoZSwibGVmdCIpLCgiYWJzb2x1dGUiPT09bHx8ImZpeGVkIj09PWwpJiYtMTwobyt1KS5pbmRleE9mKCJhdXRvIik/KGE9KHI9Yy5wb3NpdGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxtKHQpJiYodD10LmNhbGwoZSxuLGsuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LXMubGVmdCtpKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTpjLmNzcyhmKX19LGsuZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihlKXtrLm9mZnNldC5zZXRPZmZzZXQodGhpcyx0LGUpfSk7dmFyIGUsbixyPXRoaXNbMF07cmV0dXJuIHI/ci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD8oZT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LHt0b3A6ZS50b3Arbi5wYWdlWU9mZnNldCxsZWZ0OmUubGVmdCtuLnBhZ2VYT2Zmc2V0fSk6e3RvcDowLGxlZnQ6MH06dm9pZCAwfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbixyPXRoaXNbMF0saT17dG9wOjAsbGVmdDowfTtpZigiZml4ZWQiPT09ay5jc3MociwicG9zaXRpb24iKSl0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt0PXRoaXMub2Zmc2V0KCksbj1yLm93bmVyRG9jdW1lbnQsZT1yLm9mZnNldFBhcmVudHx8bi5kb2N1bWVudEVsZW1lbnQ7d2hpbGUoZSYmKGU9PT1uLmJvZHl8fGU9PT1uLmRvY3VtZW50RWxlbWVudCkmJiJzdGF0aWMiPT09ay5jc3MoZSwicG9zaXRpb24iKSllPWUucGFyZW50Tm9kZTtlJiZlIT09ciYmMT09PWUubm9kZVR5cGUmJigoaT1rKGUpLm9mZnNldCgpKS50b3ArPWsuY3NzKGUsImJvcmRlclRvcFdpZHRoIiwhMCksaS5sZWZ0Kz1rLmNzcyhlLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSl9cmV0dXJue3RvcDp0LnRvcC1pLnRvcC1rLmNzcyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1pLmxlZnQtay5jc3MociwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50O3doaWxlKGUmJiJzdGF0aWMiPT09ay5jc3MoZSwicG9zaXRpb24iKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxpZX0pfX0pLGsuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbih0LGkpe3ZhciBvPSJwYWdlWU9mZnNldCI9PT1pO2suZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIF8odGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoeChlKT9yPWU6OT09PWUubm9kZVR5cGUmJihyPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PW4pcmV0dXJuIHI/cltpXTplW3RdO3I/ci5zY3JvbGxUbyhvP3IucGFnZVhPZmZzZXQ6bixvP246ci5wYWdlWU9mZnNldCk6ZVt0XT1ufSx0LGUsYXJndW1lbnRzLmxlbmd0aCl9fSksay5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsbil7ay5jc3NIb29rc1tuXT16ZSh5LnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiB0PV9lKGUsbiksJGUudGVzdCh0KT9rKGUpLnBvc2l0aW9uKClbbl0rInB4Ijp0fSl9KSxrLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLHMpe2suZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpzLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24ocixvKXtrLmZuW29dPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCYmKHJ8fCJib29sZWFuIiE9dHlwZW9mIGUpLGk9cnx8KCEwPT09ZXx8ITA9PT10PyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gXyh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4geChlKT8wPT09by5pbmRleE9mKCJvdXRlciIpP2VbImlubmVyIithXTplLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09ZS5ub2RlVHlwZT8ocj1lLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChlLmJvZHlbInNjcm9sbCIrYV0sclsic2Nyb2xsIithXSxlLmJvZHlbIm9mZnNldCIrYV0sclsib2Zmc2V0IithXSxyWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09bj9rLmNzcyhlLHQsaSk6ay5zdHlsZShlLHQsbixpKX0scyxuP2U6dm9pZCAwLG4pfX0pfSksay5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsbil7ay5mbltuXT1mdW5jdGlvbihlLHQpe3JldHVybiAwPGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vbihuLG51bGwsZSx0KTp0aGlzLnRyaWdnZXIobil9fSksay5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLGsuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KSxrLnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxtKGUpKXJldHVybiByPXMuY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHMuY2FsbChhcmd1bWVudHMpKSl9KS5ndWlkPWUuZ3VpZD1lLmd1aWR8fGsuZ3VpZCsrLGl9LGsuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/ay5yZWFkeVdhaXQrKzprLnJlYWR5KCEwKX0say5pc0FycmF5PUFycmF5LmlzQXJyYXksay5wYXJzZUpTT049SlNPTi5wYXJzZSxrLm5vZGVOYW1lPUEsay5pc0Z1bmN0aW9uPW0say5pc1dpbmRvdz14LGsuY2FtZWxDYXNlPVYsay50eXBlPXcsay5ub3c9RGF0ZS5ub3csay5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9ay50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4ga30pO3ZhciBRdD1DLmpRdWVyeSxKdD1DLiQ7cmV0dXJuIGsubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gQy4kPT09ayYmKEMuJD1KdCksZSYmQy5qUXVlcnk9PT1rJiYoQy5qUXVlcnk9UXQpLGt9LGV8fChDLmpRdWVyeT1DLiQ9ayksa30pOwo=\"></script>\n",
       "<script title=\"crosstalk\" src=\"data:application/javascript;base64,IWZ1bmN0aW9uIG8odSxhLGwpe2Z1bmN0aW9uIHMobixlKXtpZighYVtuXSl7aWYoIXVbbl0pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFlJiZ0KXJldHVybiB0KG4sITApO2lmKGYpcmV0dXJuIGYobiwhMCk7dmFyIHI9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbisiJyIpO3Rocm93IHIuY29kZT0iTU9EVUxFX05PVF9GT1VORCIscn12YXIgaT1hW25dPXtleHBvcnRzOnt9fTt1W25dWzBdLmNhbGwoaS5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXVbbl1bMV1bZV07cmV0dXJuIHModHx8ZSl9LGksaS5leHBvcnRzLG8sdSxhLGwpfXJldHVybiBhW25dLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGwubGVuZ3RoO2UrKylzKGxbZV0pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCk7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fdHlwZXM9e30sdGhpcy5fc2VxPTB9cmV0dXJuIHIoZSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdHlwZXNbZV07bnx8KG49dGhpcy5fdHlwZXNbZV09e30pO3ZhciByPSJzdWIiK3RoaXMuX3NlcSsrO3JldHVybiBuW3JdPXQscn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90eXBlc1tlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl7Zm9yKHZhciByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSYmbltyXT09PXQpcmV0dXJuIGRlbGV0ZSBuW3JdLHI7cmV0dXJuITF9aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiEoIW58fCFuW3RdKSYmKGRlbGV0ZSBuW3RdLHQpO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIGZvciBsaXN0ZW5lciIpfX0se2tleToidHJpZ2dlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3R5cGVzW2VdO2Zvcih2YXIgaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJnJbaV0uY2FsbChuLHQpfX1dKSxlfSgpO24uZGVmYXVsdD1pfSx7fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5GaWx0ZXJIYW5kbGU9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGk9bChlKCIuL2V2ZW50cyIpKSxvPWwoZSgiLi9maWx0ZXJzZXQiKSksdT1sKGUoIi4vZ3JvdXAiKSksYT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPTE7bi5GaWx0ZXJIYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IGEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPWEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5faWQ9ImZpbHRlciIrcysrLHRoaXMuc2V0R3JvdXAoZSl9cmV0dXJuIHIobixbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzO2lmKHRoaXMuX2dyb3VwIT09ZSYmKCh0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl9maWx0ZXJWYXImJih0aGlzLl9maWx0ZXJWYXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLmNsZWFyKCksdGhpcy5fdmFyT25DaGFuZ2VTdWI9bnVsbCx0aGlzLl9maWx0ZXJWYXI9bnVsbCx0aGlzLl9maWx0ZXJTZXQ9bnVsbCksdGhpcy5fZ3JvdXA9ZSkpKXtlPSgwLHUuZGVmYXVsdCkoZSksdGhpcy5fZmlsdGVyU2V0PSh0PWUudmFyKCJmaWx0ZXJzZXQiKSwobj10LmdldCgpKXx8KG49bmV3IG8uZGVmYXVsdCx0LnNldChuKSksbiksdGhpcy5fZmlsdGVyVmFyPSgwLHUuZGVmYXVsdCkoZSkudmFyKCJmaWx0ZXIiKTt2YXIgaT10aGlzLl9maWx0ZXJWYXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7ci5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUscil9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1pfX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShlKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxlKSx0aGlzLl9vbkNoYW5nZSh0KSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihlLHQpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihlLHQpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGUpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksbn0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxhPWUoIi4vdXRpbCIpO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZT09PXQ/MDplPHQ/LTE6dDxlPzE6dm9pZCAwfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gcihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzPXt9LHRoaXMuX2tleXM9e30sdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl9hY3RpdmVIYW5kbGVzPTB9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7bnVsbCE9PXQmJih0PXQuc2xpY2UoMCkpLnNvcnQobCk7dmFyIG49KDAsYS5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbZV0sdCkscj1uLmFkZGVkLGk9bi5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbZV09dDtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl0aGlzLl9rZXlzW3Jbb11dPSh0aGlzLl9rZXlzW3Jbb11dfHwwKSsxO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXRoaXMuX2tleXNbaVt1XV0tLTt0aGlzLl91cGRhdGVWYWx1ZSh0KX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyx0PU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09dCl0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3RoaXMuX2tleXNbZVtuXV09PT10JiZ0aGlzLl92YWx1ZS5wdXNoKGVbbl0pfX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dGhpcy5faGFuZGxlc1tlXSl7dmFyIHQ9dGhpcy5faGFuZGxlc1tlXTt0fHwodD1bXSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5fa2V5c1t0W25dXS0tO2RlbGV0ZSB0aGlzLl9oYW5kbGVzW2VdLHRoaXMuX3VwZGF0ZVZhbHVlKCl9fX0se2tleToidmFsdWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19LHtrZXk6Il9hbGxLZXlzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Qua2V5cyh0aGlzLl9rZXlzKTtyZXR1cm4gZS5zb3J0KGwpLGV9fV0pLGV9KCk7bi5kZWZhdWx0PWl9LHsiLi91dGlsIjoxMX1dLDQ6W2Z1bmN0aW9uKGwsZSxzKXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtzLmRlZmF1bHQ9ZnVuY3Rpb24gZSh0KXt7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1Lmhhc093blByb3BlcnR5KHQpfHwodVt0XT1uZXcgYSh0KSksdVt0XTtpZigib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnIodCkpJiZ0Ll92YXJzJiZ0LnZhcilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYxPT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdKXJldHVybiBlKHRbMF0pO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBncm91cE5hbWUgYXJndW1lbnQiKX19O3ZhciB0LGk9bCgiLi92YXIiKSxvPSh0PWkpJiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fTtlLl9fY3Jvc3N0YWxrX2dyb3Vwcz1lLl9fY3Jvc3N0YWxrX2dyb3Vwc3x8e307dmFyIHU9ZS5fX2Nyb3NzdGFsa19ncm91cHM7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMubmFtZT1lLHRoaXMuX3ZhcnM9e319cmV0dXJuIG4odCxbe2tleToidmFyIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YXIgbmFtZSIpO3JldHVybiB0aGlzLl92YXJzLmhhc093blByb3BlcnR5KGUpfHwodGhpcy5fdmFyc1tlXT1uZXcgby5kZWZhdWx0KHRoaXMsZSkpLHRoaXMuX3ZhcnNbZV19fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoZSl9fV0pLHR9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi92YXIiOjEyfV0sNTpbZnVuY3Rpb24oZixlLGMpeyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0LG49ZigiLi9ncm91cCIpLHI9KHQ9bikmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9LGk9ZigiLi9zZWxlY3Rpb24iKSxvPWYoIi4vZmlsdGVyIiksdT1mKCIuL2lucHV0Iik7ZigiLi9pbnB1dF9zZWxlY3RpemUiKSxmKCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiKSxmKCIuL2lucHV0X3NsaWRlciIpO3ZhciBhPSgwLHIuZGVmYXVsdCkoImRlZmF1bHQiKTtmdW5jdGlvbiBsKGUpe3JldHVybiBhLnZhcihlKX1lLlNoaW55JiZlLlNoaW55LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJ1cGRhdGUtY2xpZW50LXZhbHVlIixmdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGUuZ3JvdXA/KDAsci5kZWZhdWx0KShlLmdyb3VwKS52YXIoZS5uYW1lKS5zZXQoZS52YWx1ZSk6bChlLm5hbWUpLnNldChlLnZhbHVlKX0pO3ZhciBzPXtncm91cDpyLmRlZmF1bHQsdmFyOmwsaGFzOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhcyhlKX0sU2VsZWN0aW9uSGFuZGxlOmkuU2VsZWN0aW9uSGFuZGxlLEZpbHRlckhhbmRsZTpvLkZpbHRlckhhbmRsZSxiaW5kOnUuYmluZH07Yy5kZWZhdWx0PXMsZS5jcm9zc3RhbGs9c30pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9ncm91cCI6NCwiLi9pbnB1dCI6NiwiLi9pbnB1dF9jaGVja2JveGdyb3VwIjo3LCIuL2lucHV0X3NlbGVjdGl6ZSI6OCwiLi9pbnB1dF9zbGlkZXIiOjksIi4vc2VsZWN0aW9uIjoxMH1dLDY6W2Z1bmN0aW9uKGUsdCxhKXsoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxhLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3JbZS5jbGFzc05hbWVdPWUsdC5kb2N1bWVudCYmImNvbXBsZXRlIiE9PXQuZG9jdW1lbnQucmVhZHlTdGF0ZT9vKGZ1bmN0aW9uKCl7bigpfSk6dC5kb2N1bWVudCYmc2V0VGltZW91dChuLDEwMCl9LGEuYmluZD1uO3ZhciBvPXQualF1ZXJ5LHI9e307ZnVuY3Rpb24gbigpe09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cltlXTtvKCIuIituLmNsYXNzTmFtZSkubm90KCIuY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikuZWFjaChmdW5jdGlvbihlLHQpe2kobix0KX0pfSl9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPW8odCkuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIit0LmlkLnJlcGxhY2UoLyhbISIjJCUmJygpKissLi86Ozw9Pj9AW1xcXF1eYHt8fX5dKS9nLCJcXCQxIikrIiddIikscj1KU09OLnBhcnNlKG5bMF0uaW5uZXJUZXh0KSxpPWUuZmFjdG9yeSh0LHIpO28odCkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIixpKSxvKHQpLmFkZENsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKX1pZih0LlNoaW55KXt2YXIgZT1uZXcgdC5TaGlueS5JbnB1dEJpbmRpbmcsdT10LmpRdWVyeTt1LmV4dGVuZChlLHtmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpLmZpbmQoIi5jcm9zc3RhbGstaW5wdXQiKX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgdCxuO3UoZSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHwobj1vKHQ9ZSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXtuLmhhc0NsYXNzKGUpJiYhbi5oYXNDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikmJmkocltlXSx0KX0pKX0sZ2V0SWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9LGdldFZhbHVlOmZ1bmN0aW9uKGUpe30sc2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt9LHJlY2VpdmVNZXNzYWdlOmZ1bmN0aW9uKGUsdCl7fSxzdWJzY3JpYmU6ZnVuY3Rpb24oZSx0KXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnJlc3VtZSgpfSx1bnN1YnNjcmliZTpmdW5jdGlvbihlKXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnN1c3BlbmQoKX19KSx0LlNoaW55LmlucHV0QmluZGluZ3MucmVnaXN0ZXIoZSwiY3Jvc3N0YWxrLmlucHV0QmluZGluZyIpfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDc6W2Z1bmN0aW9uKHIsZSx0KXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShyKCIuL2lucHV0IikpLG49cigiLi9maWx0ZXIiKTt2YXIgYT1lLmpRdWVyeTt0LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1jaGVja2JveGdyb3VwIixmYWN0b3J5OmZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IG4uRmlsdGVySGFuZGxlKHIuZ3JvdXApLG89dm9pZCAwLHU9YShlKTtyZXR1cm4gdS5vbigiY2hhbmdlIiwiaW5wdXRbdHlwZT0nY2hlY2tib3gnXSIsZnVuY3Rpb24oKXt2YXIgZT11LmZpbmQoImlucHV0W3R5cGU9J2NoZWNrYm94J106Y2hlY2tlZCIpO2lmKDA9PT1lLmxlbmd0aClvPW51bGwsaS5jbGVhcigpO2Vsc2V7dmFyIHQ9e307ZS5lYWNoKGZ1bmN0aW9uKCl7ci5tYXBbdGhpcy52YWx1ZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLnNvcnQoKSxvPW4saS5zZXQobil9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXtpLmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe28mJmkuc2V0KG8pfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjZ9XSw4OltmdW5jdGlvbihyLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1uKHIoIi4vaW5wdXQiKSksbD1uKHIoIi4vdXRpbCIpKSxzPXIoIi4vZmlsdGVyIik7ZnVuY3Rpb24gbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9dmFyIGY9ZS5qUXVlcnk7dC5yZWdpc3Rlcih7Y2xhc3NOYW1lOiJjcm9zc3RhbGstaW5wdXQtc2VsZWN0IixmYWN0b3J5OmZ1bmN0aW9uKGUsbil7dmFyIHQ9bC5kYXRhZnJhbWVUb0QzKG4uaXRlbXMpLHI9e29wdGlvbnM6W3t2YWx1ZToiIixsYWJlbDoiKEFsbCkifV0uY29uY2F0KHQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0saT1mKGUpLmZpbmQoInNlbGVjdCIpWzBdLG89ZihpKS5zZWxlY3RpemUocilbMF0uc2VsZWN0aXplLHU9bmV3IHMuRmlsdGVySGFuZGxlKG4uZ3JvdXApLGE9dm9pZCAwO3JldHVybiBvLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7aWYoMD09PW8uaXRlbXMubGVuZ3RoKWE9bnVsbCx1LmNsZWFyKCk7ZWxzZXt2YXIgdD17fTtvLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7bi5tYXBbZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgZT1PYmplY3Qua2V5cyh0KTtlLnNvcnQoKSxhPWUsdS5zZXQoZSl9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXt1LmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe2EmJnUuc2V0KGEpfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjYsIi4vdXRpbCI6MTF9XSw5OltmdW5jdGlvbihuLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyPSEwLGk9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0odT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2godS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe2k9ITAsbz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIG59KGUsdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSx0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShuKCIuL2lucHV0IikpLGE9bigiLi9maWx0ZXIiKTt2YXIgdj1lLmpRdWVyeSxwPWUuc3RyZnRpbWU7ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbj1lLnRvU3RyaW5nKCk7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn10LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oZSxsKXt2YXIgcz1uZXcgYS5GaWx0ZXJIYW5kbGUobC5ncm91cCksdD17fSxmPXYoZSkuZmluZCgiaW5wdXQiKSxuPWYuZGF0YSgiZGF0YS10eXBlIikscj1mLmRhdGEoInRpbWUtZm9ybWF0IiksaT1mLmRhdGEoInJvdW5kIiksbz12b2lkIDA7aWYoImRhdGUiPT09bilvPXAudXRjKCksdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX07ZWxzZSBpZigiZGF0ZXRpbWUiPT09bil7dmFyIHU9Zi5kYXRhKCJ0aW1lem9uZSIpO289dT9wLnRpbWV6b25lKHUpOnAsdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX19ZWxzZSJudW1iZXIiPT09biYmdm9pZCAwIT09aSYmKHQucHJldHRpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5wb3coMTAsaSk7cmV0dXJuIE1hdGgucm91bmQoZSp0KS90fSk7ZnVuY3Rpb24gYygpe3ZhciBlPWYuZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5yZXN1bHQsdD12b2lkIDAsbj1mLmRhdGEoImRhdGEtdHlwZSIpO3JldHVybiB0PSJkYXRlIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9bmV3IERhdGUoK2UpKWluc3RhbmNlb2YgRGF0ZT90LmdldFVUQ0Z1bGxZZWFyKCkrIi0iK3kodC5nZXRVVENNb250aCgpKzEsMikrIi0iK3kodC5nZXRVVENEYXRlKCksMik6bnVsbDt2YXIgdH06ImRhdGV0aW1lIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuK2UvMWUzfTpmdW5jdGlvbihlKXtyZXR1cm4rZX0sImRvdWJsZSI9PT1mLmRhdGEoImlvblJhbmdlU2xpZGVyIikub3B0aW9ucy50eXBlP1t0KGUuZnJvbSksdChlLnRvKV06dChlLmZyb20pfWYuaW9uUmFuZ2VTbGlkZXIodCk7dmFyIGg9bnVsbDtyZXR1cm4gZi5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihlKXtpZighZi5kYXRhKCJ1cGRhdGluZyIpJiYhZi5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciB0PWMoKSxuPWQodCwyKSxyPW5bMF0saT1uWzFdLG89W10sdT0wO3U8bC52YWx1ZXMubGVuZ3RoO3UrKyl7dmFyIGE9bC52YWx1ZXNbdV07cjw9YSYmYTw9aSYmby5wdXNoKGwua2V5c1t1XSl9by5zb3J0KCkscy5zZXQobyksaD1vfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7cy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtoJiZzLnNldChoKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uU2VsZWN0aW9uSGFuZGxlPXZvaWQgMDt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxpPWEoZSgiLi9ldmVudHMiKSksbz1hKGUoIi4vZ3JvdXAiKSksdT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW4uU2VsZWN0aW9uSGFuZGxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHUuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXUuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5zZXRHcm91cChlKX1yZXR1cm4gcihuLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLl9ncm91cCE9PWUmJih0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1lKSl7dGhpcy5fdmFyPSgwLG8uZGVmYXVsdCkoZSkudmFyKCJzZWxlY3Rpb24iKTt2YXIgbj10aGlzLl92YXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dC5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUsdCl9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1ufX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoZSx0aGlzLl9tZXJnZUV4dHJhSW5mbyh0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oZSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oZSx0KX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoZSx0KX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxufSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O2Z1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PTE7dDxlLmxlbmd0aDt0KyspaWYoZVt0XTw9ZVt0LTFdKXRocm93IG5ldyBFcnJvcigiTGlzdCBpcyBub3Qgc29ydGVkIG9yIGNvbnRhaW5zIGR1cGxpY2F0ZSIpfW4uZXh0ZW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoMTx0P3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKG51bGwhPW8pZm9yKHZhciB1IGluIG8pby5oYXNPd25Qcm9wZXJ0eSh1KSYmKGVbdV09b1t1XSl9cmV0dXJuIGV9LG4uY2hlY2tTb3J0ZWQ9dSxuLmRpZmZTb3J0ZWRMaXN0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0wO2V8fChlPVtdKTt0fHwodD1bXSk7dmFyIGk9W10sbz1bXTt1KGUpLHUodCk7Zm9yKDtuPGUubGVuZ3RoJiZyPHQubGVuZ3RoOyllW25dPT09dFtyXT8obisrLHIrKyk6ZVtuXTx0W3JdP2kucHVzaChlW24rK10pOm8ucHVzaCh0W3IrK10pO248ZS5sZW5ndGgmJihpPWkuY29uY2F0KGUuc2xpY2UobikpKTtyPHQubGVuZ3RoJiYobz1vLmNvbmNhdCh0LnNsaWNlKHIpKSk7cmV0dXJue3JlbW92ZWQ6aSxhZGRlZDpvfX0sbi5kYXRhZnJhbWVUb0QzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49dm9pZCAwO2Zvcih2YXIgciBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KHIpJiZ0LnB1c2gociksIm9iamVjdCIhPT1sKGVbcl0pfHx2b2lkIDA9PT1lW3JdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTtpZih2b2lkIDAhPT1uJiZuIT09ZVtyXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO249ZVtyXS5sZW5ndGh9Zm9yKHZhciBpPVtdLG89dm9pZCAwLHU9MDt1PG47dSsrKXtvPXt9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKW9bdFthXV09ZVt0W2FdXVt1XTtpLnB1c2gobyl9cmV0dXJuIGl9O24uU3Vic2NyaXB0aW9uVHJhY2tlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5fZW1pdHRlcj1lLHRoaXMuX3N1YnM9e319cmV0dXJuIHIodCxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZW1pdHRlci5vbihlLHQpO3JldHVybiB0aGlzLl9zdWJzW25dPWUsbn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9lbWl0dGVyLm9mZihlLHQpO3JldHVybiBuJiZkZWxldGUgdGhpcy5fc3Vic1tuXSxufX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll9lbWl0dGVyLm9mZihuW2VdLGUpfSl9fV0pLHR9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxlLGwpeyhmdW5jdGlvbihvKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlLHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCksbj1hKCIuL2V2ZW50cyIpLGk9KGU9bikmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9O3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsciksdGhpcy5fZ3JvdXA9ZSx0aGlzLl9uYW1lPXQsdGhpcy5fdmFsdWU9bix0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gdChyLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX3ZhbHVlIT09ZSl7dmFyIG49dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9ZTt2YXIgcj17fTtpZih0JiYib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnUodCkpKWZvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPXRbaV0pO3Iub2xkVmFsdWU9bixyLnZhbHVlPWUsdGhpcy5fZXZlbnRzLnRyaWdnZXIoImNoYW5nZSIscix0aGlzKSxvLlNoaW55JiZvLlNoaW55Lm9uSW5wdXRDaGFuZ2UmJm8uU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLSIrKG51bGwhPT10aGlzLl9ncm91cC5uYW1lP3RoaXMuX2dyb3VwLm5hbWUrIi0iOiIiKSt0aGlzLl9uYW1lLHZvaWQgMD09PWU/bnVsbDplKX19fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZXZlbnRzLm9uKGUsdCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2V2ZW50cy5vZmYoZSx0KX19XSkscn0oKTtsLmRlZmF1bHQ9cn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2V2ZW50cyI6MX1dfSx7fSxbNV0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1jcm9zc3RhbGsubWluLmpzLm1hcA==\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LyogQWRqdXN0IG1hcmdpbnMgb3V0d2FyZHMsIHNvIGNvbHVtbiBjb250ZW50cyBsaW5lIHVwIHdpdGggdGhlIGVkZ2VzIG9mIHRoZQogICBwYXJlbnQgb2YgY29udGFpbmVyLWZsdWlkLiAqLwouY29udGFpbmVyLWZsdWlkLmNyb3NzdGFsay1ic2NvbHMgewogIG1hcmdpbi1sZWZ0OiAtMzBweDsKICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogIHdoaXRlLXNwYWNlOiBub3JtYWw7Cn0KCi8qIEJ1dCBkb24ndCBhZGp1c3QgdGhlIG1hcmdpbnMgb3V0d2FyZHMgaWYgd2UncmUgZGlyZWN0bHkgdW5kZXIgdGhlIGJvZHksCiAgIGkuZS4gd2Ugd2VyZSB0aGUgdG9wLWxldmVsIG9mIHNvbWV0aGluZyBhdCB0aGUgY29uc29sZS4gKi8KYm9keSA+IC5jb250YWluZXItZmx1aWQuY3Jvc3N0YWxrLWJzY29scyB7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9CgouY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW4gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwYWRkaW5nLXJpZ2h0OiAxMnB4OwogIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCkgewogIC5jcm9zc3RhbGstaW5wdXQtY2hlY2tib3hncm91cCAuY3Jvc3N0YWxrLW9wdGlvbnMtZ3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWNvbHVtbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBhZGRpbmctcmlnaHQ6IGluaGVyaXQ7CiAgfQp9Cg==\" rel=\"stylesheet\" />\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LyoKanVzdCBoZXJlIHNvIHRoYXQgcGxvdGx5IHdvcmtzCmNvcnJlY3RseSB3aXRoIGlvc2xpZGVzLgpzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JvcGVuc2NpL3Bsb3RseS9pc3N1ZXMvNDYzCiovCgpzbGlkZTpub3QoLmN1cnJlbnQpIC5wbG90bHkuaHRtbC13aWRnZXR7CiAgZGlzcGxheTogbm9uZTsKfQo=\" rel=\"stylesheet\" />\n",
       "<script title=\"plotly-main\" src=\"data:application/javascript;base64,LyoqCiogcGxvdGx5LmpzIHYxLjQ2LjEKKiBDb3B5cmlnaHQgMjAxMi0yMDE5LCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNleygidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLlBsb3RseT10KCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXtmdW5jdGlvbiBpKG8scyl7aWYoIXJbb10pe2lmKCFlW29dKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmbClyZXR1cm4gbChvLCEwKTtpZihhKXJldHVybiBhKG8sITApO3ZhciBjPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBjLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGN9dmFyIHU9cltvXT17ZXhwb3J0czp7fX07ZVtvXVswXS5jYWxsKHUuZXhwb3J0cyxmdW5jdGlvbih0KXtyZXR1cm4gaShlW29dWzFdW3RdfHx0KX0sdSx1LmV4cG9ydHMsdCxlLHIsbil9cmV0dXJuIHJbb10uZXhwb3J0c31mb3IodmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsbz0wO288bi5sZW5ndGg7bysrKWkobltvXSk7cmV0dXJuIGl9fSgpKHsxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NyYy9saWIiKSxpPXsiWCxYIGRpdiI6ImRpcmVjdGlvbjpsdHI7Zm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDsiLCJYIGlucHV0LFggYnV0dG9uIjoiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOyIsIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXMiOiJvdXRsaW5lOm5vbmU7IiwiWCBhIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCBhOmhvdmVyIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCAuY3Jpc3AiOiJzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC51c2VyLXNlbGVjdC1ub25lIjoiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7IiwiWCBzdmciOiJvdmVyZmxvdzpoaWRkZW47IiwiWCBzdmcgYSI6ImZpbGw6IzQ0N2FkYjsiLCJYIHN2ZyBhOmhvdmVyIjoiZmlsbDojM2M2ZGM1OyIsIlggLm1haW4tc3ZnIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7IiwiWCAubWFpbi1zdmcgLmRyYWdsYXllciI6InBvaW50ZXItZXZlbnRzOmFsbDsiLCJYIC5jdXJzb3ItZGVmYXVsdCI6ImN1cnNvcjpkZWZhdWx0OyIsIlggLmN1cnNvci1wb2ludGVyIjoiY3Vyc29yOnBvaW50ZXI7IiwiWCAuY3Vyc29yLWNyb3NzaGFpciI6ImN1cnNvcjpjcm9zc2hhaXI7IiwiWCAuY3Vyc29yLW1vdmUiOiJjdXJzb3I6bW92ZTsiLCJYIC5jdXJzb3ItY29sLXJlc2l6ZSI6ImN1cnNvcjpjb2wtcmVzaXplOyIsIlggLmN1cnNvci1yb3ctcmVzaXplIjoiY3Vyc29yOnJvdy1yZXNpemU7IiwiWCAuY3Vyc29yLW5zLXJlc2l6ZSI6ImN1cnNvcjpucy1yZXNpemU7IiwiWCAuY3Vyc29yLWV3LXJlc2l6ZSI6ImN1cnNvcjpldy1yZXNpemU7IiwiWCAuY3Vyc29yLXN3LXJlc2l6ZSI6ImN1cnNvcjpzdy1yZXNpemU7IiwiWCAuY3Vyc29yLXMtcmVzaXplIjoiY3Vyc29yOnMtcmVzaXplOyIsIlggLmN1cnNvci1zZS1yZXNpemUiOiJjdXJzb3I6c2UtcmVzaXplOyIsIlggLmN1cnNvci13LXJlc2l6ZSI6ImN1cnNvcjp3LXJlc2l6ZTsiLCJYIC5jdXJzb3ItZS1yZXNpemUiOiJjdXJzb3I6ZS1yZXNpemU7IiwiWCAuY3Vyc29yLW53LXJlc2l6ZSI6ImN1cnNvcjpudy1yZXNpemU7IiwiWCAuY3Vyc29yLW4tcmVzaXplIjoiY3Vyc29yOm4tcmVzaXplOyIsIlggLmN1cnNvci1uZS1yZXNpemUiOiJjdXJzb3I6bmUtcmVzaXplOyIsIlggLmN1cnNvci1ncmFiIjoiY3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYjsiLCJYIC5tb2RlYmFyIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDtyaWdodDoycHg7IiwiWCAuZWFzZS1iZyI6Ii13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzOyIsIlggLm1vZGViYXItLWhvdmVyPjpub3QoLndhdGVybWFyaykiOiJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7IiwiWDpob3ZlciAubW9kZWJhci0taG92ZXIgLm1vZGViYXItZ3JvdXAiOiJvcGFjaXR5OjE7IiwiWCAubW9kZWJhci1ncm91cCI6ImZsb2F0OmxlZnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDo4cHg7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDsiLCJYIC5tb2RlYmFyLWJ0biI6InBvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6M3B4IDRweDtoZWlnaHQ6MjJweDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDpub3JtYWw7Ym94LXNpemluZzpib3JkZXItYm94OyIsIlggLm1vZGViYXItYnRuIHN2ZyI6InBvc2l0aW9uOnJlbGF0aXZlO3RvcDoycHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCI6ImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOndyYXA7YWxpZ24tY29udGVudDpmbGV4LWVuZDttYXgtaGVpZ2h0OjEwMCU7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCBzdmciOiJ0b3A6LTFweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIjoiZGlzcGxheTpibG9jaztmbG9hdDpub25lO3BhZGRpbmctbGVmdDowcHg7cGFkZGluZy1ib3R0b206OHB4OyIsIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXAgLm1vZGViYXItYnRuIjoiZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmNlbnRlcjsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUsWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7ZGlzcGxheTpub25lO29wYWNpdHk6MDt6LWluZGV4OjEwMDE7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MTEwJTtyaWdodDo1MCU7IiwiWCBbZGF0YS10aXRsZV06aG92ZXI6YmVmb3JlLFggW2RhdGEtdGl0bGVdOmhvdmVyOmFmdGVyIjoiZGlzcGxheTpibG9jaztvcGFjaXR5OjE7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlIjoiY29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7ei1pbmRleDoxMDAyO21hcmdpbi10b3A6LTEycHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjk3MzhhO21hcmdpbi1yaWdodDotNnB4OyIsIlggW2RhdGEtdGl0bGVdOmFmdGVyIjoiY29udGVudDphdHRyKGRhdGEtdGl0bGUpO2JhY2tncm91bmQ6IzY5NzM4YTtjb2xvcjp3aGl0ZTtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlLFggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTphZnRlciI6InRvcDowJTtyaWdodDoyMDAlOyIsIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmUiOiJib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiM2OTczOGE7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0zMHB4OyIsIlggLnNlbGVjdC1vdXRsaW5lIjoiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnNlbGVjdC1vdXRsaW5lLTEiOiJzdHJva2U6d2hpdGU7IiwiWCAuc2VsZWN0LW91dGxpbmUtMiI6InN0cm9rZTpibGFjaztzdHJva2UtZGFzaGFycmF5OjJweCAycHg7IixZOiJmb250LWZhbWlseTonT3BlbiBTYW5zJztwb3NpdGlvbjpmaXhlZDt0b3A6NTBweDtyaWdodDoyMHB4O3otaW5kZXg6MTAwMDA7Zm9udC1zaXplOjEwcHQ7bWF4LXdpZHRoOjE4MHB4OyIsIlkgcCI6Im1hcmdpbjowOyIsIlkgLm5vdGlmaWVyLW5vdGUiOiJtaW4td2lkdGg6MTgwcHg7bWF4LXdpZHRoOjI1MHB4O2JvcmRlcjoxcHggc29saWQgI2ZmZjt6LWluZGV4OjMwMDA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojOGM5N2FmO2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDAsMTUxLDE3NSwwLjkpO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4O292ZXJmbG93LXdyYXA6YnJlYWstd29yZDt3b3JkLXdyYXA6YnJlYWstd29yZDstbXMtaHlwaGVuczphdXRvOy13ZWJraXQtaHlwaGVuczphdXRvO2h5cGhlbnM6YXV0bzsiLCJZIC5ub3RpZmllci1jbG9zZSI6ImNvbG9yOiNmZmY7b3BhY2l0eTowLjg7ZmxvYXQ6cmlnaHQ7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4OyIsIlkgLm5vdGlmaWVyLWNsb3NlOmhvdmVyIjoiY29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjsifTtmb3IodmFyIGEgaW4gaSl7dmFyIG89YS5yZXBsYWNlKC9eLC8sIiAsIikucmVwbGFjZSgvWC9nLCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSIpLnJlcGxhY2UoL1kvZywiLnBsb3RseS1ub3RpZmllciIpO24uYWRkU3R5bGVSdWxlKG8saVthXSl9fSx7Ii4uL3NyYy9saWIiOjcwMH1dLDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt1bmRvOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0saG9tZTp7d2lkdGg6OTI4LjYsaGVpZ2h0OjFlMyxwYXRoOiJtNzg2IDI5NnYtMjY3cTAtMTUtMTEtMjZ0LTI1LTEwaC0yMTR2MjE0aC0xNDN2LTIxNGgtMjE0cS0xNSAwLTI1IDEwdC0xMSAyNnYyNjdxMCAxIDAgMnQwIDJsMzIxIDI2NCAzMjEtMjY0cTEtMSAxLTR6IG0xMjQgMzlsLTM0LTQxcS01LTUtMTItNmgtMnEtNyAwLTEyIDNsLTM4NiAzMjItMzg2LTMyMnEtNy00LTEzLTQtNyAyLTEyIDdsLTM1IDQxcS00IDUtMyAxM3Q2IDEybDQwMSAzMzRxMTggMTUgNDIgMTV0NDMtMTVsMTM2LTExNHYxMDlxMCA4IDUgMTN0MTMgNWgxMDdxOCAwIDEzLTV0NS0xM3YtMjI3bDEyMi0xMDJxNS01IDYtMTJ0LTQtMTN6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiY2FtZXJhLXJldHJvIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTUxOCAzODZxMCA4LTUgMTN0LTEzIDVxLTM3IDAtNjMtMjd0LTI2LTYzcTAtOCA1LTEzdDEzLTUgMTIgNSA1IDEzcTAgMjMgMTYgMzh0MzggMTZxOCAwIDEzIDV0NSAxM3ogbTEyNS03M3EwLTU5LTQyLTEwMXQtMTAxLTQyLTEwMSA0Mi00MiAxMDEgNDIgMTAxIDEwMSA0MiAxMDEtNDIgNDItMTAxeiBtLTU3Mi0zMjBoODU4djcxaC04NTh2LTcxeiBtNjQzIDMyMHEwIDg5LTYyIDE1MnQtMTUyIDYyLTE1MS02Mi02My0xNTIgNjMtMTUxIDE1MS02MyAxNTIgNjMgNjIgMTUxeiBtLTU3MSAzNThoMjE0djcyaC0yMTR2LTcyeiBtLTcyLTEwN2g4NTh2MTQzaC00NjJsLTM2LTcxaC0zNjB2LTcyeiBtOTI5IDE0M3YtNzE0cTAtMzAtMjEtNTF0LTUwLTIxaC04NThxLTI5IDAtNTAgMjF0LTIxIDUxdjcxNHEwIDMwIDIxIDUxdDUwIDIxaDg1OHEyOSAwIDUwLTIxdDIxLTUxeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbWJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTEwMDAtMjVsLTI1MCAyNTFjNDAgNjMgNjMgMTM4IDYzIDIxOCAwIDIyNC0xODIgNDA2LTQwNyA0MDYtMjI0IDAtNDA2LTE4Mi00MDYtNDA2czE4My00MDYgNDA3LTQwNmM4MCAwIDE1NSAyMiAyMTggNjJsMjUwLTI1MCAxMjUgMTI1eiBtLTgxMiAyNTBsMCA0MzggNDM3IDAgMC00MzgtNDM3IDB6IG02MiAzNzVsMzEzIDAgMC0zMTItMzEzIDAgMCAzMTJ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxwYW46e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0xMDAwIDM1MGwtMTg3IDE4OCAwLTEyNS0yNTAgMCAwIDI1MCAxMjUgMC0xODggMTg3LTE4Ny0xODcgMTI1IDAgMC0yNTAtMjUwIDAgMCAxMjUtMTg4LTE4OCAxODYtMTg3IDAgMTI1IDI1MiAwIDAtMjUwLTEyNSAwIDE4Ny0xODggMTg4IDE4OC0xMjUgMCAwIDI1MCAyNTAgMCAwLTEyNiAxODcgMTg4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbV9wbHVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOiJtMSA3ODdsMC04NzUgODc1IDAgMCA4NzUtODc1IDB6IG02ODctNTAwbC0xODcgMCAwLTE4Ny0xMjUgMCAwIDE4Ny0xODggMCAwIDEyNSAxODggMCAwIDE4NyAxMjUgMCAwLTE4NyAxODcgMCAwLTEyNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21fbWludXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6Im0wIDc4OGwwLTg3NiA4NzUgMCAwIDg3Ni04NzUgMHogbTY4OC01MDBsLTUwMCAwIDAgMTI1IDUwMCAwIDAtMTI1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sYXV0b3NjYWxlOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMjUwIDg1MGwtMTg3IDAtNjMgMCAwLTYyIDAtMTg4IDYzIDAgMCAxODggMTg3IDAgMCA2MnogbTY4OCAwbC0xODggMCAwLTYyIDE4OCAwIDAtMTg4IDYyIDAgMCAxODggMCA2Mi02MiAweiBtLTg3NS05MzhsMCAxODgtNjMgMCAwLTE4OCAwLTYyIDYzIDAgMTg3IDAgMCA2Mi0xODcgMHogbTg3NSAxODhsMC0xODgtMTg4IDAgMC02MiAxODggMCA2MiAwIDAgNjIgMCAxODgtNjIgMHogbS0xMjUgMTg4bC0xIDAtOTMtOTQtMTU2IDE1NiAxNTYgMTU2IDkyLTkzIDIgMCAwIDI1MC0yNTAgMCAwLTIgOTMtOTItMTU2LTE1Ni0xNTYgMTU2IDk0IDkyIDAgMi0yNTAgMCAwLTI1MCAwIDAgOTMgOTMgMTU3LTE1Ni0xNTctMTU2LTkzIDk0IDAgMCAwLTI1MCAyNTAgMCAwIDAtOTQgOTMgMTU2IDE1NyAxNTYtMTU3LTkzLTkzIDAgMCAyNTAgMCAwIDI1MHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAsaGVpZ2h0OjFlMyxwYXRoOiJtMzc1IDcyNWwwIDAtMzc1LTM3NSAzNzUtMzc0IDAtMSAxMTI1IDAgMCA3NTAtMTEyNSAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sdG9vbHRpcF9jb21wYXJlOnt3aWR0aDoxMTI1LGhlaWdodDoxZTMscGF0aDoibTE4NyA3ODZsMCAyLTE4Ny0xODggMTg4LTE4NyAwIDAgOTM3IDAgMCAzNzMtOTM4IDB6IG0wLTQ5OWwwIDEtMTg3LTE4OCAxODgtMTg4IDAgMCA5MzcgMCAwIDM3Ni05MzgtMXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHBsb3RseWxvZ286e3dpZHRoOjE1NDIsaGVpZ2h0OjFlMyxwYXRoOiJtMC0xMGgxODJ2LTE0MGgtMTgydjE0MHogbTIyOCAxNDZoMTgzdi0yODZoLTE4M3YyODZ6IG0yMjUgNzE0aDE4MnYtMTAwMGgtMTgydjEwMDB6IG0yMjUtMjg1aDE4MnYtNzE1aC0xODJ2NzE1eiBtMjI1IDE0MmgxODN2LTg1N2gtMTgzdjg1N3ogbTIzMS00MjhoMTgydi00MjloLTE4MnY0Mjl6IG0yMjUtMjkxaDE4M3YtMTM4aC0xODN2MTM4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sInotYXhpcyI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im04MzMgNWwtMTcgMTA4djQxbC0xMzAtNjUgMTMwLTY2YzAgMCAwIDM4IDAgMzkgMC0xIDM2LTE0IDM5LTI1IDQtMTUtNi0yMi0xNi0zMC0xNS0xMi0zOS0xNi01Ni0yMC05MC0yMi0xODctMjMtMjc5LTIzLTI2MSAwLTM0MSAzNC0zNTMgNTkgMyA2MCAyMjggMTEwIDIyOCAxMTAtMTQwLTgtMzUxLTM1LTM1MS0xMTYgMC0xMjAgMjkzLTE0MiA0NzQtMTQyIDE1NSAwIDQ3NyAyMiA0NzcgMTQyIDAgNTAtNzQgNzktMTYzIDk2eiBtLTM3NCA5NGMtNTgtNS05OS0yMS05OS00MCAwLTI0IDY1LTQzIDE0NC00MyA3OSAwIDE0MyAxOSAxNDMgNDMgMCAxOS00MiAzNC05OCA0MHYyMTZoODdsLTEzMiAxMzUtMTMzLTEzNWg4OHYtMjE2eiBtMTY3IDUxNWgtMTM2djFjMTYgMTYgMzEgMzQgNDYgNTJsODQgMTA5djU0aC0yMzB2LTcxaDEyNHYtMWMtMTYtMTctMjgtMzItNDQtNTFsLTg5LTExNHYtNTFoMjQ1djcyeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sIjNkX3JvdGF0ZSI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sY2FtZXJhOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDQ1MGMtODMgMC0xNTAtNjctMTUwLTE1MCAwLTgzIDY3LTE1MCAxNTAtMTUwIDgzIDAgMTUwIDY3IDE1MCAxNTAgMCA4My02NyAxNTAtMTUwIDE1MHogbTQwMCAxNTBoLTEyMGMtMTYgMC0zNCAxMy0zOSAyOWwtMzEgOTNjLTYgMTUtMjMgMjgtNDAgMjhoLTM0MGMtMTYgMC0zNC0xMy0zOS0yOGwtMzEtOTRjLTYtMTUtMjMtMjgtNDAtMjhoLTEyMGMtNTUgMC0xMDAtNDUtMTAwLTEwMHYtNDUwYzAtNTUgNDUtMTAwIDEwMC0xMDBoODAwYzU1IDAgMTAwIDQ1IDEwMCAxMDB2NDUwYzAgNTUtNDUgMTAwLTEwMCAxMDB6IG0tNDAwLTU1MGMtMTM4IDAtMjUwIDExMi0yNTAgMjUwIDAgMTM4IDExMiAyNTAgMjUwIDI1MCAxMzggMCAyNTAtMTEyIDI1MC0yNTAgMC0xMzgtMTEyLTI1MC0yNTAtMjUweiBtMzY1IDM4MGMtMTkgMC0zNSAxNi0zNSAzNSAwIDE5IDE2IDM1IDM1IDM1IDE5IDAgMzUtMTYgMzUtMzUgMC0xOS0xNi0zNS0zNS0zNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LG1vdmllOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtOTM4IDQxM2wtMTg4LTEyNWMwIDM3LTE3IDcxLTQ0IDk0IDY0IDM4IDEwNyAxMDcgMTA3IDE4NyAwIDEyMS05OCAyMTktMjE5IDIxOS0xMjEgMC0yMTktOTgtMjE5LTIxOSAwLTYxIDI1LTExNyA2Ni0xNTZoLTExNWMzMCAzMyA0OSA3NiA0OSAxMjUgMCAxMDMtODQgMTg3LTE4NyAxODdzLTE4OC04NC0xODgtMTg3YzAtNTcgMjYtMTA3IDY1LTE0MS0zOC0yMi02NS02Mi02NS0xMDl2LTI1MGMwLTcwIDU2LTEyNiAxMjUtMTI2aDUwMGM2OSAwIDEyNSA1NiAxMjUgMTI2bDE4OC0xMjZjMzQgMCA2MiAyOCA2MiA2M3YzNzVjMCAzNS0yOCA2My02MiA2M3ogbS03NTAgMGMtNjkgMC0xMjUgNTYtMTI1IDEyNXM1NiAxMjUgMTI1IDEyNSAxMjUtNTYgMTI1LTEyNS01Ni0xMjUtMTI1LTEyNXogbTQwNi0xYy04NyAwLTE1NyA3MC0xNTcgMTU3IDAgODYgNzAgMTU2IDE1NyAxNTZzMTU2LTcwIDE1Ni0xNTYtNzAtMTU3LTE1Ni0xNTd6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxxdWVzdGlvbjp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZGlzazp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtMjE0LTdoNDI5djIxNGgtNDI5di0yMTR6IG01MDAgMGg3MnY1MDBxMCA4LTYgMjF0LTExIDIwbC0xNTcgMTU2cS01IDYtMTkgMTJ0LTIyIDV2LTIzMnEwLTIyLTE1LTM4dC0zOC0xNmgtMzIycS0yMiAwLTM3IDE2dC0xNiAzOHYyMzJoLTcydi03MTRoNzJ2MjMycTAgMjIgMTYgMzh0MzcgMTZoNDY1cTIyIDAgMzgtMTZ0MTUtMzh2LTIzMnogbS0yMTQgNTE4djE3OHEwIDgtNSAxM3QtMTMgNWgtMTA3cS03IDAtMTMtNXQtNS0xM3YtMTc4cTAtOCA1LTEzdDEzLTVoMTA3cTcgMCAxMyA1dDUgMTN6IG0zNTctMTh2LTUxOHEwLTIyLTE1LTM4dC0zOC0xNmgtNzUwcS0yMyAwLTM4IDE2dC0xNiAzOHY3NTBxMCAyMiAxNiAzOHQzOCAxNmg1MTdxMjMgMCA1MC0xMnQ0Mi0yNmwxNTYtMTU3cTE2LTE1IDI3LTQydDExLTQ5eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sbGFzc286e3dpZHRoOjEwMzEsaGVpZ2h0OjFlMyxwYXRoOiJtMTAxOCA1MzhjLTM2IDIwNy0yOTAgMzM2LTU2OCAyODYtMjc3LTQ4LTQ3My0yNTYtNDM2LTQ2MyAxMC01NyAzNi0xMDggNzYtMTUxLTEzLTY2IDExLTEzNyA2OC0xODMgMzQtMjggNzUtNDEgMTE0LTQybC01NS03MCAwIDBjLTItMS0zLTItNC0zLTEwLTE0LTgtMzQgNS00NSAxNC0xMSAzNC04IDQ1IDQgMSAxIDIgMyAyIDVsMCAwIDExMyAxNDBjMTYgMTEgMzEgMjQgNDUgNDAgNCAzIDYgNyA4IDExIDQ4LTMgMTAwIDAgMTUxIDkgMjc4IDQ4IDQ3MyAyNTUgNDM2IDQ2MnogbS02MjQtMzc5Yy04MCAxNC0xNDkgNDgtMTk3IDk2IDQyIDQyIDEwOSA0NyAxNTYgOSAzMy0yNiA0Ny02NiA0MS0xMDV6IG0tMTg3LTc0Yy0xOSAxNi0zMyAzNy0zOSA2MCA1MC0zMiAxMDktNTUgMTc0LTY4LTQyLTI1LTk1LTI0LTEzNSA4eiBtMzYwIDc1Yy0zNC03LTY5LTktMTAyLTggOCA2Mi0xNiAxMjgtNjggMTcwLTczIDU5LTE3NSA1NC0yNDQtNS05IDIwLTE2IDQwLTIwIDYxLTI4IDE1OSAxMjEgMzE3IDMzMyAzNTRzNDA3LTYwIDQzNC0yMTdjMjgtMTU5LTEyMS0zMTgtMzMzLTM1NXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHNlbGVjdGJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTAgODUwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg1bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHNwaWtlbGluZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoiTTUxMiA0MDljMC01Ny00Ni0xMDQtMTAzLTEwNC01NyAwLTEwNCA0Ny0xMDQgMTA0IDAgNTcgNDcgMTAzIDEwNCAxMDMgNTcgMCAxMDMtNDYgMTAzLTEwM3ogbS0zMjctMzlsOTIgMCAwIDkyLTkyIDB6IG0tMTg1IDBsOTIgMCAwIDkyLTkyIDB6IG0zNzAtMTg2bDkyIDAgMCA5My05MiAweiBtMC0xODRsOTIgMCAwIDkyLTkyIDB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxLjUgMCAwIC0xLjUgMCA4NTApIn0sbmV3cGxvdGx5bG9nbzp7bmFtZToibmV3cGxvdGx5bG9nbyIsc3ZnOiI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDEzMiAxMzInPjxkZWZzPjxzdHlsZT4uY2xzLTEge2ZpbGw6ICMxMTlkZmY7fSAuY2xzLTIge2ZpbGw6ICMyNWZlZmQ7fSAuY2xzLTMge2ZpbGw6ICNmZmY7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5wbG90bHktbG9nb21hcms8L3RpdGxlPjxnIGlkPSdzeW1ib2wnPjxyZWN0IGNsYXNzPSdjbHMtMScgd2lkdGg9JzEzMicgaGVpZ2h0PScxMzInIHJ4PSc2JyByeT0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSc1NCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMTAyJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzU0JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nNTQnIHI9JzYnLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00zMCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCwzMCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J003OCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCw3OCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J001NCw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCw1NCw0OFonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00xMDIsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsMTAyLDQ4WicvPjwvZz48L3N2Zz4ifX19LHt9XSwzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiOjExODN9XSw0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhciIpfSx7Ii4uL3NyYy90cmFjZXMvYmFyIjo4NDZ9XSw1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhcnBvbGFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXJwb2xhciI6ODU4fV0sNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9ib3giKX0seyIuLi9zcmMvdHJhY2VzL2JveCI6ODY4fV0sNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIil9LHsiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIjo1NzV9XSw4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIil9LHsiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGljayI6ODc3fV0sOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL2NhcnBldCI6ODk2fV0sMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY2hvcm9wbGV0aCIpfSx7Ii4uL3NyYy90cmFjZXMvY2hvcm9wbGV0aCI6OTEwfV0sMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29uZSIpfSx7Ii4uL3NyYy90cmFjZXMvY29uZSI6OTE4fV0sMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29udG91ciIpfSx7Ii4uL3NyYy90cmFjZXMvY29udG91ciI6OTMzfV0sMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldCI6OTQ0fV0sMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb3JlIil9LHsiLi4vc3JjL2NvcmUiOjY3OX1dLDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXIiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXIiOjExODR9XSwxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZ3JvdXBieSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnkiOjExODV9XSwxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIil9LHsiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIjo5NTZ9XSwxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwZ2wiKX0seyIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCI6OTY1fV0sMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjk3N31dLDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZCI6OTg0fV0sMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRjb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiOjk4OH1dLDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29yZSIpO24ucmVnaXN0ZXIoW3QoIi4vYmFyIiksdCgiLi9ib3giKSx0KCIuL2hlYXRtYXAiKSx0KCIuL2hpc3RvZ3JhbSIpLHQoIi4vaGlzdG9ncmFtMmQiKSx0KCIuL2hpc3RvZ3JhbTJkY29udG91ciIpLHQoIi4vY29udG91ciIpLHQoIi4vc2NhdHRlcnRlcm5hcnkiKSx0KCIuL3Zpb2xpbiIpLHQoIi4vd2F0ZXJmYWxsIiksdCgiLi9waWUiKSx0KCIuL3N1bmJ1cnN0IiksdCgiLi9zY2F0dGVyM2QiKSx0KCIuL3N1cmZhY2UiKSx0KCIuL2lzb3N1cmZhY2UiKSx0KCIuL21lc2gzZCIpLHQoIi4vY29uZSIpLHQoIi4vc3RyZWFtdHViZSIpLHQoIi4vc2NhdHRlcmdlbyIpLHQoIi4vY2hvcm9wbGV0aCIpLHQoIi4vc2NhdHRlcmdsIiksdCgiLi9zcGxvbSIpLHQoIi4vcG9pbnRjbG91ZCIpLHQoIi4vaGVhdG1hcGdsIiksdCgiLi9wYXJjb29yZHMiKSx0KCIuL3BhcmNhdHMiKSx0KCIuL3NjYXR0ZXJtYXBib3giKSx0KCIuL3NhbmtleSIpLHQoIi4vdGFibGUiKSx0KCIuL2NhcnBldCIpLHQoIi4vc2NhdHRlcmNhcnBldCIpLHQoIi4vY29udG91cmNhcnBldCIpLHQoIi4vb2hsYyIpLHQoIi4vY2FuZGxlc3RpY2siKSx0KCIuL3NjYXR0ZXJwb2xhciIpLHQoIi4vc2NhdHRlcnBvbGFyZ2wiKSx0KCIuL2JhcnBvbGFyIildKSxuLnJlZ2lzdGVyKFt0KCIuL2FnZ3JlZ2F0ZSIpLHQoIi4vZmlsdGVyIiksdCgiLi9ncm91cGJ5IiksdCgiLi9zb3J0IildKSxuLnJlZ2lzdGVyKFt0KCIuL2NhbGVuZGFycyIpXSksZS5leHBvcnRzPW59LHsiLi9hZ2dyZWdhdGUiOjMsIi4vYmFyIjo0LCIuL2JhcnBvbGFyIjo1LCIuL2JveCI6NiwiLi9jYWxlbmRhcnMiOjcsIi4vY2FuZGxlc3RpY2siOjgsIi4vY2FycGV0Ijo5LCIuL2Nob3JvcGxldGgiOjEwLCIuL2NvbmUiOjExLCIuL2NvbnRvdXIiOjEyLCIuL2NvbnRvdXJjYXJwZXQiOjEzLCIuL2NvcmUiOjE0LCIuL2ZpbHRlciI6MTUsIi4vZ3JvdXBieSI6MTYsIi4vaGVhdG1hcCI6MTcsIi4vaGVhdG1hcGdsIjoxOCwiLi9oaXN0b2dyYW0iOjE5LCIuL2hpc3RvZ3JhbTJkIjoyMCwiLi9oaXN0b2dyYW0yZGNvbnRvdXIiOjIxLCIuL2lzb3N1cmZhY2UiOjIzLCIuL21lc2gzZCI6MjQsIi4vb2hsYyI6MjUsIi4vcGFyY2F0cyI6MjYsIi4vcGFyY29vcmRzIjoyNywiLi9waWUiOjI4LCIuL3BvaW50Y2xvdWQiOjI5LCIuL3NhbmtleSI6MzAsIi4vc2NhdHRlcjNkIjozMSwiLi9zY2F0dGVyY2FycGV0IjozMiwiLi9zY2F0dGVyZ2VvIjozMywiLi9zY2F0dGVyZ2wiOjM0LCIuL3NjYXR0ZXJtYXBib3giOjM1LCIuL3NjYXR0ZXJwb2xhciI6MzYsIi4vc2NhdHRlcnBvbGFyZ2wiOjM3LCIuL3NjYXR0ZXJ0ZXJuYXJ5IjozOCwiLi9zb3J0IjozOSwiLi9zcGxvbSI6NDAsIi4vc3RyZWFtdHViZSI6NDEsIi4vc3VuYnVyc3QiOjQyLCIuL3N1cmZhY2UiOjQzLCIuL3RhYmxlIjo0NCwiLi92aW9saW4iOjQ1LCIuL3dhdGVyZmFsbCI6NDZ9XSwyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlIjo5OTN9XSwyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9tZXNoM2QiKX0seyIuLi9zcmMvdHJhY2VzL21lc2gzZCI6OTk4fV0sMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvb2hsYyIpfSx7Ii4uL3NyYy90cmFjZXMvb2hsYyI6MTAwM31dLDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BhcmNhdHMiKX0seyIuLi9zcmMvdHJhY2VzL3BhcmNhdHMiOjEwMTJ9XSwyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9wYXJjb29yZHMiKX0seyIuLi9zcmMvdHJhY2VzL3BhcmNvb3JkcyI6MTAyMX1dLDI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BpZSIpfSx7Ii4uL3NyYy90cmFjZXMvcGllIjoxMDMyfV0sMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZCIpfSx7Ii4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZCI6MTA0MX1dLDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NhbmtleSIpfSx7Ii4uL3NyYy90cmFjZXMvc2Fua2V5IjoxMDQ3fV0sMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2QiOjEwODN9XSwzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0IjoxMDg5fV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyI6MTA5Nn1dLDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdsIjoxMTA0fV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveCI6MTExMH1dLDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhciIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyIjoxMTE3fV0sMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsIjoxMTIxfV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5IjoxMTI3fV0sMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0IjoxMTg3fV0sNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3Bsb20iKX0seyIuLi9zcmMvdHJhY2VzL3NwbG9tIjoxMTMyfV0sNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3RyZWFtdHViZSIpfSx7Ii4uL3NyYy90cmFjZXMvc3RyZWFtdHViZSI6MTEzN31dLDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0Iil9LHsiLi4vc3JjL3RyYWNlcy9zdW5idXJzdCI6MTE0M31dLDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N1cmZhY2UiKX0seyIuLi9zcmMvdHJhY2VzL3N1cmZhY2UiOjExNTJ9XSw0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy90YWJsZSIpfSx7Ii4uL3NyYy90cmFjZXMvdGFibGUiOjExNjB9XSw0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy92aW9saW4iKX0seyIuLi9zcmMvdHJhY2VzL3Zpb2xpbiI6MTE2OH1dLDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3dhdGVyZmFsbCIpfSx7Ii4uL3NyYy90cmFjZXMvd2F0ZXJmYWxsIjoxMTc4fV0sNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5leWV8fFswLDAsMV0scj10LmNlbnRlcnx8WzAsMCwwXSxzPXQudXB8fFswLDEsMF0sbD10LmRpc3RhbmNlTGltaXRzfHxbMCwxLzBdLGM9dC5tb2RlfHwidHVybnRhYmxlIix1PW4oKSxmPWkoKSxoPWEoKTtyZXR1cm4gdS5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLHUubG9va0F0KDAsZSxyLHMpLGYuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxmLmxvb2tBdCgwLGUscixzKSxoLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksaC5sb29rQXQoMCxlLHIscyksbmV3IG8oe3R1cm50YWJsZTp1LG9yYml0OmYsbWF0cml4Omh9LGMpfTt2YXIgbj10KCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiKSxpPXQoIm9yYml0LWNhbWVyYS1jb250cm9sbGVyIiksYT10KCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiKTtmdW5jdGlvbiBvKHQsZSl7dGhpcy5fY29udHJvbGxlck5hbWVzPU9iamVjdC5rZXlzKHQpLHRoaXMuX2NvbnRyb2xsZXJMaXN0PXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSx0aGlzLl9tb2RlPWUsdGhpcy5fYWN0aXZlPXRbZV0sdGhpcy5fYWN0aXZlfHwodGhpcy5fbW9kZT0idHVybnRhYmxlIix0aGlzLl9hY3RpdmU9dC50dXJudGFibGUpLHRoaXMubW9kZXM9dGhpcy5fY29udHJvbGxlck5hbWVzLHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c312YXIgcz1vLnByb3RvdHlwZTtbWyJmbHVzaCIsMV0sWyJpZGxlIiwxXSxbImxvb2tBdCIsNF0sWyJyb3RhdGUiLDRdLFsicGFuIiw0XSxbInRyYW5zbGF0ZSIsNF0sWyJzZXRNYXRyaXgiLDJdLFsic2V0RGlzdGFuY2VMaW1pdHMiLDJdLFsic2V0RGlzdGFuY2UiLDJdXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLHI9W10sbj0wO248dFsxXTsrK24pci5wdXNoKCJhIituKTt2YXIgaT0idmFyIGNjPXRoaXMuX2NvbnRyb2xsZXJMaXN0O2Zvcih2YXIgaT0wO2k8Y2MubGVuZ3RoOysraSl7Y2NbaV0uIit0WzBdKyIoIityLmpvaW4oKSsiKX0iO3NbZV09RnVuY3Rpb24uYXBwbHkobnVsbCxyLmNvbmNhdChpKSl9KSxzLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLl9hY3RpdmUucmVjYWxjTWF0cml4KHQpfSxzLmdldERpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2UodCl9LHMuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZUxpbWl0cyh0KX0scy5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmUubGFzdFQoKX0scy5zZXRNb2RlPWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLl9tb2RlKXt2YXIgZT10aGlzLl9jb250cm9sbGVyTmFtZXMuaW5kZXhPZih0KTtpZighKGU8MCkpe3ZhciByPXRoaXMuX2FjdGl2ZSxuPXRoaXMuX2NvbnRyb2xsZXJMaXN0W2VdLGk9TWF0aC5tYXgoci5sYXN0VCgpLG4ubGFzdFQoKSk7ci5yZWNhbGNNYXRyaXgoaSksbi5zZXRNYXRyaXgoaSxyLmNvbXB1dGVkTWF0cml4KSx0aGlzLl9hY3RpdmU9bix0aGlzLl9tb2RlPXQsdGhpcy5jb21wdXRlZE1hdHJpeD10aGlzLl9hY3RpdmUuY29tcHV0ZWRNYXRyaXgsdGhpcy5jb21wdXRlZEV5ZT10aGlzLl9hY3RpdmUuY29tcHV0ZWRFeWUsdGhpcy5jb21wdXRlZFVwPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFVwLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5fYWN0aXZlLmNvbXB1dGVkQ2VudGVyLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5fYWN0aXZlLmNvbXB1dGVkUmFkaXVzfX19LHMuZ2V0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RlfX0seyJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiOjQyNSwib3JiaXQtY2FtZXJhLWNvbnRyb2xsZXIiOjQ0OCwidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyIjo1MjZ9XSw0ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlLHIsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBjKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYyh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiB1KHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGYodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBoKHQpe3JldHVybiBmKHQuc291cmNlKSp0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGYodC50YXJnZXQpKnQudmFsdWV9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBnKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiB5KHQpe3JldHVyblt0LnNvdXJjZS54MSx0LnkwXX1mdW5jdGlvbiB4KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX10LnNhbmtleT1mdW5jdGlvbigpe3ZhciB0PTAsbj0wLGk9MSx5PTEseD0yNCxiPTgsXz1kLHc9YSxrPWcsVD12LEE9MzIsTT0yLzM7ZnVuY3Rpb24gUygpe3ZhciBhPXtub2RlczprLmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczpULmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIGZ1bmN0aW9uKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KTt2YXIgZT1yLm1hcCh0Lm5vZGVzLF8pO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbih0LHIpe3QuaW5kZXg9cjt2YXIgbj10LnNvdXJjZSxpPXQudGFyZ2V0OyJvYmplY3QiIT10eXBlb2YgbiYmKG49dC5zb3VyY2U9bShlLG4pKSwib2JqZWN0IiE9dHlwZW9mIGkmJihpPXQudGFyZ2V0PW0oZSxpKSksbi5zb3VyY2VMaW5rcy5wdXNoKHQpLGkudGFyZ2V0TGlua3MucHVzaCh0KX0pfShhKSxmdW5jdGlvbih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC52YWx1ZT1NYXRoLm1heChlLnN1bSh0LnNvdXJjZUxpbmtzLHUpLGUuc3VtKHQudGFyZ2V0TGlua3MsdSkpfSl9KGEpLGZ1bmN0aW9uKGUpe3ZhciByLG4sYTtmb3Iocj1lLm5vZGVzLG49W10sYT0wO3IubGVuZ3RoOysrYSxyPW4sbj1bXSlyLmZvckVhY2goZnVuY3Rpb24odCl7dC5kZXB0aD1hLHQuc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtuLmluZGV4T2YodC50YXJnZXQpPDAmJm4ucHVzaCh0LnRhcmdldCl9KX0pO2ZvcihyPWUubm9kZXMsbj1bXSxhPTA7ci5sZW5ndGg7KythLHI9bixuPVtdKXIuZm9yRWFjaChmdW5jdGlvbih0KXt0LmhlaWdodD1hLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtuLmluZGV4T2YodC5zb3VyY2UpPDAmJm4ucHVzaCh0LnNvdXJjZSl9KX0pO3ZhciBvPShpLXQteCkvKGEtMSk7ZS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UueDE9KGUueDA9dCtNYXRoLm1heCgwLE1hdGgubWluKGEtMSxNYXRoLmZsb29yKHcuY2FsbChudWxsLGUsYSkpKSkqbykreH0pfShhKSxmdW5jdGlvbih0KXt2YXIgaT1yLm5lc3QoKS5rZXkoZnVuY3Rpb24odCl7cmV0dXJuIHQueDB9KS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyh0Lm5vZGVzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSk7KGZ1bmN0aW9uKCl7dmFyIHI9ZS5tYXgoaSxmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KSxhPU0qKHktbikvKHItMSk7Yj5hJiYoYj1hKTt2YXIgbz1lLm1pbihpLGZ1bmN0aW9uKHQpe3JldHVybih5LW4tKHQubGVuZ3RoLTEpKmIpL2Uuc3VtKHQsdSl9KTtpLmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC55MT0odC55MD1lKSt0LnZhbHVlKm99KX0pLHQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqb30pfSkoKSxkKCk7Zm9yKHZhciBhPTEsbz1BO28+MDstLW8pbChhKj0uOTkpLGQoKSxzKGEpLGQoKTtmdW5jdGlvbiBzKHQpe2kuZm9yRWFjaChmdW5jdGlvbihyKXtyLmZvckVhY2goZnVuY3Rpb24ocil7aWYoci50YXJnZXRMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnRhcmdldExpbmtzLGgpL2Uuc3VtKHIudGFyZ2V0TGlua3MsdSktZihyKSkqdDtyLnkwKz1uLHIueTErPW59fSl9KX1mdW5jdGlvbiBsKHQpe2kuc2xpY2UoKS5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbihyKXtyLmZvckVhY2goZnVuY3Rpb24ocil7aWYoci5zb3VyY2VMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnNvdXJjZUxpbmtzLHApL2Uuc3VtKHIuc291cmNlTGlua3MsdSktZihyKSkqdDtyLnkwKz1uLHIueTErPW59fSl9KX1mdW5jdGlvbiBkKCl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhPW4sbz10Lmxlbmd0aDtmb3IodC5zb3J0KGMpLGk9MDtpPG87KytpKWU9dFtpXSwocj1hLWUueTApPjAmJihlLnkwKz1yLGUueTErPXIpLGE9ZS55MStiO2lmKChyPWEtYi15KT4wKWZvcihhPWUueTAtPXIsZS55MS09cixpPW8tMjtpPj0wOy0taSllPXRbaV0sKHI9ZS55MStiLWEpPjAmJihlLnkwLT1yLGUueTEtPXIpLGE9ZS55MH0pfX0oYSksRShhKSxhfWZ1bmN0aW9uIEUodCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydChsKSx0LnRhcmdldExpbmtzLnNvcnQocyl9KSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC55MCxyPWU7dC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aH0pLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnkxPXIrdC53aWR0aC8yLHIrPXQud2lkdGh9KX0pfXJldHVybiBTLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gRSh0KSx0fSxTLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om8odCksUyk6X30sUy5ub2RlQWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLFMpOnd9LFMubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PSt0LFMpOnh9LFMubm9kZVBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K3QsUyk6Yn0sUy5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om8odCksUyk6a30sUy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om8odCksUyk6VH0sUy5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW49MCxpPStlWzBdLHk9K2VbMV0sUyk6W2ktdCx5LW5dfSxTLmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZVswXVswXSxpPStlWzFdWzBdLG49K2VbMF1bMV0seT0rZVsxXVsxXSxTKTpbW3Qsbl0sW2kseV1dfSxTLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9K3QsUyk6QX0sU30sdC5zYW5rZXlDZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/ZS5taW4odC5zb3VyY2VMaW5rcyxpKS0xOjB9LHQuc2Fua2V5TGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZXB0aH0sdC5zYW5rZXlSaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9LHQuc2Fua2V5SnVzdGlmeT1hLHQuc2Fua2V5TGlua0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbi5saW5rSG9yaXpvbnRhbCgpLnNvdXJjZSh5KS50YXJnZXQoeCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/aShyLHQoImQzLWFycmF5IiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLXNoYXBlIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyl9LHsiZDMtYXJyYXkiOjE0MiwiZDMtY29sbGVjdGlvbiI6MTQzLCJkMy1zaGFwZSI6MTUyfV0sNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWstbWFwIik6V2Vha01hcCxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz1uZXcgbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodCkscj1lJiYoZS5fdHJpYW5nbGVCdWZmZXIuaGFuZGxlfHxlLl90cmlhbmdsZUJ1ZmZlci5idWZmZXIpO2lmKCFyfHwhdC5pc0J1ZmZlcihyKSl7dmFyIG49aSh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTsoZT1hKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pKS5fdHJpYW5nbGVCdWZmZXI9bixvLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9fSx7ImdsLWJ1ZmZlciI6MjM3LCJnbC12YW8iOjMxOSwid2Vhay1tYXAiOjUzNn1dLDUwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49MCxpPTA7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBhPSh0PXQuc2xpY2UoKSlbMF0sbz1hLnRvVXBwZXJDYXNlKCk7aWYoYSE9bylzd2l0Y2godFswXT1vLGEpe2Nhc2UiYSI6dFs2XSs9bix0WzddKz1pO2JyZWFrO2Nhc2UidiI6dFsxXSs9aTticmVhaztjYXNlImgiOnRbMV0rPW47YnJlYWs7ZGVmYXVsdDpmb3IodmFyIHM9MTtzPHQubGVuZ3RoOyl0W3MrK10rPW4sdFtzKytdKz1pfXN3aXRjaChvKXtjYXNlIloiOm49ZSxpPXI7YnJlYWs7Y2FzZSJIIjpuPXRbMV07YnJlYWs7Y2FzZSJWIjppPXRbMV07YnJlYWs7Y2FzZSJNIjpuPWU9dFsxXSxpPXI9dFsyXTticmVhaztkZWZhdWx0Om49dFt0Lmxlbmd0aC0yXSxpPXRbdC5sZW5ndGgtMV19cmV0dXJuIHR9KX19LHt9XSw1MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInBhZC1sZWZ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPSJudW1iZXIiPT10eXBlb2YgZT9lOjEscj1yfHwiOiAiO3ZhciBpPXQuc3BsaXQoL1xyP1xuLyksYT1TdHJpbmcoaS5sZW5ndGgrZS0xKS5sZW5ndGg7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKHQsaSl7dmFyIG89aStlLHM9U3RyaW5nKG8pLmxlbmd0aCxsPW4obyxhLXMpO3JldHVybiBsK3IrdH0pLmpvaW4oIlxuIil9fSx7InBhZC1sZWZ0Ijo0NDl9XSw1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuWzBdO2Zvcih2YXIgcj10WzBdLmxlbmd0aCxuPVt0WzBdXSxhPVswXSxvPTE7bzxlOysrbylpZihuLnB1c2godFtvXSksaShuLHIpKXtpZihhLnB1c2gobyksYS5sZW5ndGg9PT1yKzEpcmV0dXJuIGF9ZWxzZSBuLnBvcCgpO3JldHVybiBhfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKTtmdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKzEpLGk9MDtpPHQubGVuZ3RoOysraSlyW2ldPXRbaV07Zm9yKGk9MDtpPD10Lmxlbmd0aDsrK2kpe2Zvcih2YXIgYT10Lmxlbmd0aDthPD1lOysrYSl7Zm9yKHZhciBvPW5ldyBBcnJheShlKSxzPTA7czxlOysrcylvW3NdPU1hdGgucG93KGErMS1pLHMpO3JbYV09b31pZihuLmFwcGx5KHZvaWQgMCxyKSlyZXR1cm4hMH1yZXR1cm4hMX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo0OTR9XSw1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlKS5maWx0ZXIoZnVuY3Rpb24ocil7Zm9yKHZhciBuPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKW5bYV09ZVtyW2FdXTtyZXR1cm4gaShuKSp0PDF9KX07dmFyIG49dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxpPXQoImNpcmN1bXJhZGl1cyIpfSx7Y2lyY3VtcmFkaXVzOjEwNCwiZGVsYXVuYXktdHJpYW5ndWxhdGUiOjE1Nn1dLDU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkobih0LGUpKX07dmFyIG49dCgiYWxwaGEtY29tcGxleCIpLGk9dCgic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5Iil9LHsiYWxwaGEtY29tcGxleCI6NTMsInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeSI6NTAxfV0sNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtlPW51bGw9PWU/MTpNYXRoLmZsb29yKGUpO2Zvcih2YXIgcj1BcnJheSgyKmUpLG49MDtuPGU7bisrKXtmb3IodmFyIGk9LTEvMCxhPTEvMCxvPW4scz10Lmxlbmd0aDtvPHM7bys9ZSl0W29dPmkmJihpPXRbb10pLHRbb108YSYmKGE9dFtvXSk7cltuXT1hLHJbZStuXT1pfXJldHVybiByfX0se31dLDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImFycmF5LWJvdW5kcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtudWxsPT1lJiYoZT0xKTtudWxsPT1yJiYocj1uKHQsZSkpO2Zvcih2YXIgaT0wO2k8ZTtpKyspe3ZhciBhPXJbZStpXSxvPXJbaV0scz1pLGw9dC5sZW5ndGg7aWYoYT09PTEvMCYmbz09PS0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6dFtzXT09PW8/MDouNTtlbHNlIGlmKGE9PT0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6MDtlbHNlIGlmKG89PT0tMS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09bz8wOjE7ZWxzZXt2YXIgYz1hLW87Zm9yKHM9aTtzPGw7cys9ZSl0W3NdPTA9PT1jPy41Oih0W3NdLW8pL2N9fXJldHVybiB0fX0seyJhcnJheS1ib3VuZHMiOjU1fV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0ibnVtYmVyIj09dHlwZW9mIHQsbj0ibnVtYmVyIj09dHlwZW9mIGU7ciYmIW4/KGU9dCx0PTApOnJ8fG58fCh0PTAsZT0wKTt2YXIgaT0oZXw9MCktKHR8PTApO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoImFycmF5IGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7Zm9yKHZhciBhPW5ldyBBcnJheShpKSxvPTAscz10O288aTtvKysscysrKWFbb109cztyZXR1cm4gYX19LHt9XSw1ODpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5CdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiByLkJ1ZmZlci5pc0J1ZmZlcj9yLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9dmFyIGE9dCgidXRpbC8iKSxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz1BcnJheS5wcm90b3R5cGUuc2xpY2UsbD0iZm9vIj09PWZ1bmN0aW9uKCl7fS5uYW1lO2Z1bmN0aW9uIGModCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB1KHQpe3JldHVybiFpKHQpJiYoImZ1bmN0aW9uIj09dHlwZW9mIHIuQXJyYXlCdWZmZXImJigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyh0KTohIXQmJih0IGluc3RhbmNlb2YgRGF0YVZpZXd8fCEhKHQuYnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkpKX12YXIgZj1lLmV4cG9ydHM9bSxoPS9ccypmdW5jdGlvblxzKyhbXlwoXHNdKilccyovO2Z1bmN0aW9uIHAodCl7aWYoYS5pc0Z1bmN0aW9uKHQpKXtpZihsKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLm1hdGNoKGgpO3JldHVybiBlJiZlWzFdfX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QubGVuZ3RoPGU/dDp0LnNsaWNlKDAsZSk6dH1mdW5jdGlvbiBnKHQpe2lmKGx8fCFhLmlzRnVuY3Rpb24odCkpcmV0dXJuIGEuaW5zcGVjdCh0KTt2YXIgZT1wKHQpO3JldHVybiJbRnVuY3Rpb24iKyhlPyI6ICIrZToiIikrIl0ifWZ1bmN0aW9uIHYodCxlLHIsbixpKXt0aHJvdyBuZXcgZi5Bc3NlcnRpb25FcnJvcih7bWVzc2FnZTpyLGFjdHVhbDp0LGV4cGVjdGVkOmUsb3BlcmF0b3I6bixzdGFja1N0YXJ0RnVuY3Rpb246aX0pfWZ1bmN0aW9uIG0odCxlKXt0fHx2KHQsITAsZSwiPT0iLGYub2spfWZ1bmN0aW9uIHkodCxlLHIsbyl7aWYodD09PWUpcmV0dXJuITA7aWYoaSh0KSYmaShlKSlyZXR1cm4gMD09PW4odCxlKTtpZihhLmlzRGF0ZSh0KSYmYS5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYoYS5pc1JlZ0V4cCh0KSYmYS5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKHUodCkmJnUoZSkmJmModCk9PT1jKGUpJiYhKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpKXJldHVybiAwPT09bihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKTtpZihpKHQpIT09aShlKSlyZXR1cm4hMTt2YXIgbD0obz1vfHx7YWN0dWFsOltdLGV4cGVjdGVkOltdfSkuYWN0dWFsLmluZGV4T2YodCk7cmV0dXJuLTEhPT1sJiZsPT09by5leHBlY3RlZC5pbmRleE9mKGUpfHwoby5hY3R1YWwucHVzaCh0KSxvLmV4cGVjdGVkLnB1c2goZSksZnVuY3Rpb24odCxlLHIsbil7aWYobnVsbD09dHx8bnVsbD09ZSlyZXR1cm4hMTtpZihhLmlzUHJpbWl0aXZlKHQpfHxhLmlzUHJpbWl0aXZlKGUpKXJldHVybiB0PT09ZTtpZihyJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITE7dmFyIGk9eCh0KSxvPXgoZSk7aWYoaSYmIW98fCFpJiZvKXJldHVybiExO2lmKGkpcmV0dXJuIHQ9cy5jYWxsKHQpLGU9cy5jYWxsKGUpLHkodCxlLHIpO3ZhciBsLGMsdT13KHQpLGY9dyhlKTtpZih1Lmxlbmd0aCE9PWYubGVuZ3RoKXJldHVybiExO2Zvcih1LnNvcnQoKSxmLnNvcnQoKSxjPXUubGVuZ3RoLTE7Yz49MDtjLS0paWYodVtjXSE9PWZbY10pcmV0dXJuITE7Zm9yKGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZihsPXVbY10sIXkodFtsXSxlW2xdLHIsbikpcmV0dXJuITE7cmV0dXJuITB9KHQsZSxyLG8pKX1yZXR1cm4gcj90PT09ZTp0PT1lfWZ1bmN0aW9uIHgodCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBiKHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKCJbb2JqZWN0IFJlZ0V4cF0iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiYhMD09PWUuY2FsbCh7fSx0KX1mdW5jdGlvbiBfKHQsZSxyLG4pe3ZhciBpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJibG9jayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksaT1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dCgpfWNhdGNoKHQpe2U9dH1yZXR1cm4gZX0oZSksbj0ociYmci5uYW1lPyIgKCIrci5uYW1lKyIpLiI6Ii4iKSsobj8iICIrbjoiLiIpLHQmJiFpJiZ2KGksciwiTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24iK24pO3ZhciBvPSJzdHJpbmciPT10eXBlb2YgbixzPSF0JiZpJiYhcjtpZigoIXQmJmEuaXNFcnJvcihpKSYmbyYmYihpLHIpfHxzKSYmdihpLHIsIkdvdCB1bndhbnRlZCBleGNlcHRpb24iK24pLHQmJmkmJnImJiFiKGkscil8fCF0JiZpKXRocm93IGl9Zi5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLmFjdHVhbD10LmFjdHVhbCx0aGlzLmV4cGVjdGVkPXQuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj10Lm9wZXJhdG9yLHQubWVzc2FnZT8odGhpcy5tZXNzYWdlPXQubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9ZChnKChlPXRoaXMpLmFjdHVhbCksMTI4KSsiICIrZS5vcGVyYXRvcisiICIrZChnKGUuZXhwZWN0ZWQpLDEyOCksdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSEwKTt2YXIgcj10LnN0YWNrU3RhcnRGdW5jdGlvbnx8djtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHIpO2Vsc2V7dmFyIG49bmV3IEVycm9yO2lmKG4uc3RhY2spe3ZhciBpPW4uc3RhY2ssYT1wKHIpLG89aS5pbmRleE9mKCJcbiIrYSk7aWYobz49MCl7dmFyIHM9aS5pbmRleE9mKCJcbiIsbysxKTtpPWkuc3Vic3RyaW5nKHMrMSl9dGhpcy5zdGFjaz1pfX19LGEuaW5oZXJpdHMoZi5Bc3NlcnRpb25FcnJvcixFcnJvciksZi5mYWlsPXYsZi5vaz1tLGYuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPWUmJnYodCxlLHIsIj09IixmLmVxdWFsKX0sZi5ub3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09ZSYmdih0LGUsciwiIT0iLGYubm90RXF1YWwpfSxmLmRlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7eSh0LGUsITEpfHx2KHQsZSxyLCJkZWVwRXF1YWwiLGYuZGVlcEVxdWFsKX0sZi5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3kodCxlLCEwKXx8dih0LGUsciwiZGVlcFN0cmljdEVxdWFsIixmLmRlZXBTdHJpY3RFcXVhbCl9LGYubm90RGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSwhMSkmJnYodCxlLHIsIm5vdERlZXBFcXVhbCIsZi5ub3REZWVwRXF1YWwpfSxmLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiB0KGUscixuKXt5KGUsciwhMCkmJnYoZSxyLG4sIm5vdERlZXBTdHJpY3RFcXVhbCIsdCl9LGYuc3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPT1lJiZ2KHQsZSxyLCI9PT0iLGYuc3RyaWN0RXF1YWwpfSxmLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT09ZSYmdih0LGUsciwiIT09IixmLm5vdFN0cmljdEVxdWFsKX0sZi50aHJvd3M9ZnVuY3Rpb24odCxlLHIpe18oITAsdCxlLHIpfSxmLmRvZXNOb3RUaHJvdz1mdW5jdGlvbih0LGUscil7XyghMSx0LGUscil9LGYuaWZFcnJvcj1mdW5jdGlvbih0KXtpZih0KXRocm93IHR9O3ZhciB3PU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdClvLmNhbGwodCxyKSYmZS5wdXNoKHIpO3JldHVybiBlfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJ1dGlsLyI6NjF9XSw1OTpbZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSx7fV0sNjA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZFVJbnQ4fX0se31dLDYxOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUsbil7dmFyIGk9LyVbc2RqJV0vZztyLmZvcm1hdD1mdW5jdGlvbih0KXtpZighbSh0KSl7Zm9yKHZhciBlPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWUucHVzaChzKGFyZ3VtZW50c1tyXSkpO3JldHVybiBlLmpvaW4oIiAiKX1yPTE7Zm9yKHZhciBuPWFyZ3VtZW50cyxhPW4ubGVuZ3RoLG89U3RyaW5nKHQpLnJlcGxhY2UoaSxmdW5jdGlvbih0KXtpZigiJSUiPT09dClyZXR1cm4iJSI7aWYocj49YSlyZXR1cm4gdDtzd2l0Y2godCl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIobltyKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5bcisrXSl9Y2F0Y2godCl7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIHR9fSksbD1uW3JdO3I8YTtsPW5bKytyXSlnKGwpfHwhYihsKT9vKz0iICIrbDpvKz0iICIrcyhsKTtyZXR1cm4gb30sci5kZXByZWNhdGU9ZnVuY3Rpb24odCxpKXtpZih5KG4ucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVwcmVjYXRlKHQsaSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PWUubm9EZXByZWNhdGlvbilyZXR1cm4gdDt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighYSl7aWYoZS50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihpKTtlLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShpKTpjb25zb2xlLmVycm9yKGkpLGE9ITB9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIGEsbz17fTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49e3NlZW46W10sc3R5bGl6ZTpjfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKG4uZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYobi5jb2xvcnM9YXJndW1lbnRzWzNdKSxkKGUpP24uc2hvd0hpZGRlbj1lOmUmJnIuX2V4dGVuZChuLGUpLHkobi5zaG93SGlkZGVuKSYmKG4uc2hvd0hpZGRlbj0hMSkseShuLmRlcHRoKSYmKG4uZGVwdGg9MikseShuLmNvbG9ycykmJihuLmNvbG9ycz0hMSkseShuLmN1c3RvbUluc3BlY3QpJiYobi5jdXN0b21JbnNwZWN0PSEwKSxuLmNvbG9ycyYmKG4uc3R5bGl6ZT1sKSx1KG4sdCxuLmRlcHRoKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9cy5zdHlsZXNbZV07cmV0dXJuIHI/Ilx4MWJbIitzLmNvbG9yc1tyXVswXSsibSIrdCsiXHgxYlsiK3MuY29sb3JzW3JdWzFdKyJtIjp0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdH1mdW5jdGlvbiB1KHQsZSxuKXtpZih0LmN1c3RvbUluc3BlY3QmJmUmJmsoZS5pbnNwZWN0KSYmZS5pbnNwZWN0IT09ci5pbnNwZWN0JiYoIWUuY29uc3RydWN0b3J8fGUuY29uc3RydWN0b3IucHJvdG90eXBlIT09ZSkpe3ZhciBpPWUuaW5zcGVjdChuLHQpO3JldHVybiBtKGkpfHwoaT11KHQsaSxuKSksaX12YXIgYT1mdW5jdGlvbih0LGUpe2lmKHkoZSkpcmV0dXJuIHQuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYobShlKSl7dmFyIHI9IiciK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHQuc3R5bGl6ZShyLCJzdHJpbmciKX1pZih2KGUpKXJldHVybiB0LnN0eWxpemUoIiIrZSwibnVtYmVyIik7aWYoZChlKSlyZXR1cm4gdC5zdHlsaXplKCIiK2UsImJvb2xlYW4iKTtpZihnKGUpKXJldHVybiB0LnN0eWxpemUoIm51bGwiLCJudWxsIil9KHQsZSk7aWYoYSlyZXR1cm4gYTt2YXIgbz1PYmplY3Qua2V5cyhlKSxzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCxyKXtlW3RdPSEwfSksZX0obyk7aWYodC5zaG93SGlkZGVuJiYobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSksdyhlKSYmKG8uaW5kZXhPZigibWVzc2FnZSIpPj0wfHxvLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBmKGUpO2lmKDA9PT1vLmxlbmd0aCl7aWYoayhlKSl7dmFyIGw9ZS5uYW1lPyI6ICIrZS5uYW1lOiIiO3JldHVybiB0LnN0eWxpemUoIltGdW5jdGlvbiIrbCsiXSIsInNwZWNpYWwiKX1pZih4KGUpKXJldHVybiB0LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJyZWdleHAiKTtpZihfKGUpKXJldHVybiB0LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwiZGF0ZSIpO2lmKHcoZSkpcmV0dXJuIGYoZSl9dmFyIGMsYj0iIixUPSExLEE9WyJ7IiwifSJdOyhwKGUpJiYoVD0hMCxBPVsiWyIsIl0iXSksayhlKSkmJihiPSIgW0Z1bmN0aW9uIisoZS5uYW1lPyI6ICIrZS5uYW1lOiIiKSsiXSIpO3JldHVybiB4KGUpJiYoYj0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKSxfKGUpJiYoYj0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChlKSksdyhlKSYmKGI9IiAiK2YoZSkpLDAhPT1vLmxlbmd0aHx8VCYmMCE9ZS5sZW5ndGg/bjwwP3goZSk/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik6dC5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKToodC5zZWVuLnB1c2goZSksYz1UP2Z1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPWUubGVuZ3RoO288czsrK28pUyhlLFN0cmluZyhvKSk/YS5wdXNoKGgodCxlLHIsbixTdHJpbmcobyksITApKTphLnB1c2goIiIpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxkKyQvKXx8YS5wdXNoKGgodCxlLHIsbixpLCEwKSl9KSxhfSh0LGUsbixzLG8pOm8ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBoKHQsZSxuLHMscixUKX0pLHQuc2Vlbi5wb3AoKSxmdW5jdGlvbih0LGUscil7aWYodC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gMCxlLmluZGV4T2YoIlxuIik+PTAmJjAsdCtlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MClyZXR1cm4gclswXSsoIiI9PT1lPyIiOmUrIlxuICIpKyIgIit0LmpvaW4oIixcbiAgIikrIiAiK3JbMV07cmV0dXJuIHJbMF0rZSsiICIrdC5qb2luKCIsICIpKyIgIityWzFdfShjLGIsQSkpOkFbMF0rYitBWzFdfWZ1bmN0aW9uIGYodCl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKyJdIn1mdW5jdGlvbiBoKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7aWYoKGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpfHx7dmFsdWU6ZVtpXX0pLmdldD9zPWwuc2V0P3Quc3R5bGl6ZSgiW0dldHRlci9TZXR0ZXJdIiwic3BlY2lhbCIpOnQuc3R5bGl6ZSgiW0dldHRlcl0iLCJzcGVjaWFsIik6bC5zZXQmJihzPXQuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLFMobixpKXx8KG89IlsiK2krIl0iKSxzfHwodC5zZWVuLmluZGV4T2YobC52YWx1ZSk8MD8ocz1nKHIpP3UodCxsLnZhbHVlLG51bGwpOnUodCxsLnZhbHVlLHItMSkpLmluZGV4T2YoIlxuIik+LTEmJihzPWE/cy5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiAgIit0fSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitzLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iICAgIit0fSkuam9pbigiXG4iKSk6cz10LnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLHkobykpe2lmKGEmJmkubWF0Y2goL15cZCskLykpcmV0dXJuIHM7KG89SlNPTi5zdHJpbmdpZnkoIiIraSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KG89by5zdWJzdHIoMSxvLmxlbmd0aC0yKSxvPXQuc3R5bGl6ZShvLCJuYW1lIikpOihvPW8ucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLG89dC5zdHlsaXplKG8sInN0cmluZyIpKX1yZXR1cm4gbysiOiAiK3N9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBkKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHR9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbnVsbD09PXR9ZnVuY3Rpb24gdih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiB4KHQpe3JldHVybiBiKHQpJiYiW29iamVjdCBSZWdFeHBdIj09PVQodCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIF8odCl7cmV0dXJuIGIodCkmJiJbb2JqZWN0IERhdGVdIj09PVQodCl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gYih0KSYmKCJbb2JqZWN0IEVycm9yXSI9PT1UKHQpfHx0IGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIGsodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIHQ8MTA/IjAiK3QudG9TdHJpbmcoMTApOnQudG9TdHJpbmcoMTApfXIuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoeShhKSYmKGE9ZS5lbnYuTk9ERV9ERUJVR3x8IiIpLHQ9dC50b1VwcGVyQ2FzZSgpLCFvW3RdKWlmKG5ldyBSZWdFeHAoIlxcYiIrdCsiXFxiIiwiaSIpLnRlc3QoYSkpe3ZhciBuPWUucGlkO29bdF09ZnVuY3Rpb24oKXt2YXIgZT1yLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIix0LG4sZSl9fWVsc2Ugb1t0XT1mdW5jdGlvbigpe307cmV0dXJuIG9bdF19LHIuaW5zcGVjdD1zLHMuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxzLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LHIuaXNBcnJheT1wLHIuaXNCb29sZWFuPWQsci5pc051bGw9ZyxyLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fSxyLmlzTnVtYmVyPXYsci5pc1N0cmluZz1tLHIuaXNTeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fSxyLmlzVW5kZWZpbmVkPXksci5pc1JlZ0V4cD14LHIuaXNPYmplY3Q9YixyLmlzRGF0ZT1fLHIuaXNFcnJvcj13LHIuaXNGdW5jdGlvbj1rLHIuaXNQcmltaXRpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8InN5bWJvbCI9PXR5cGVvZiB0fHwidW5kZWZpbmVkIj09dHlwZW9mIHR9LHIuaXNCdWZmZXI9dCgiLi9zdXBwb3J0L2lzQnVmZmVyIik7dmFyIE09WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBTKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXIubG9nPWZ1bmN0aW9uKCl7dmFyIHQsZTtjb25zb2xlLmxvZygiJXMgLSAlcyIsKHQ9bmV3IERhdGUsZT1bQSh0LmdldEhvdXJzKCkpLEEodC5nZXRNaW51dGVzKCkpLEEodC5nZXRTZWNvbmRzKCkpXS5qb2luKCI6IiksW3QuZ2V0RGF0ZSgpLE1bdC5nZXRNb250aCgpXSxlXS5qb2luKCIgIikpLHIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKSl9LHIuaW5oZXJpdHM9dCgiaW5oZXJpdHMiKSxyLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtpZighZXx8IWIoZSkpcmV0dXJuIHQ7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyl0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9zdXBwb3J0L2lzQnVmZmVyIjo2MCxfcHJvY2Vzczo0NzQsaW5oZXJpdHM6NTl9XSw2MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYXRvYih0KX19LHt9XSw2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsYT1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBzPW5ldyBBcnJheShyKzEpLGw9MDtsPD1yOysrbClzW2xdPXRbbF1bb107YVtvXT1zfWFbcl09bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBvPTA7bzw9cjsrK28pYVtyXVtvXT0xO2Zvcih2YXIgYz1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyljW29dPWVbb107Y1tyXT0xO3ZhciB1PW4oYSxjKSxmPWkodVtyKzFdKTswPT09ZiYmKGY9MSk7Zm9yKHZhciBoPW5ldyBBcnJheShyKzEpLG89MDtvPD1yOysrbyloW29dPWkodVtvXSkvZjtyZXR1cm4gaH07dmFyIG49dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl07cmV0dXJuIGV9fSx7InJvYnVzdC1saW5lYXItc29sdmUiOjQ5M31dLDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuYnl0ZUxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT1jKHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIDMqKHIrbikvNC1ufSxyLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPWModCksbj1yWzBdLG89clsxXSxzPW5ldyBhKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMyooZStyKS80LXJ9KDAsbixvKSksbD0wLHU9bz4wP24tNDpuLGY9MDtmPHU7Zis9NCllPWlbdC5jaGFyQ29kZUF0KGYpXTw8MTh8aVt0LmNoYXJDb2RlQXQoZisxKV08PDEyfGlbdC5jaGFyQ29kZUF0KGYrMildPDw2fGlbdC5jaGFyQ29kZUF0KGYrMyldLHNbbCsrXT1lPj4xNiYyNTUsc1tsKytdPWU+PjgmMjU1LHNbbCsrXT0yNTUmZTsyPT09byYmKGU9aVt0LmNoYXJDb2RlQXQoZildPDwyfGlbdC5jaGFyQ29kZUF0KGYrMSldPj40LHNbbCsrXT0yNTUmZSk7MT09PW8mJihlPWlbdC5jaGFyQ29kZUF0KGYpXTw8MTB8aVt0LmNoYXJDb2RlQXQoZisxKV08PDR8aVt0LmNoYXJDb2RlQXQoZisyKV0+PjIsc1tsKytdPWU+PjgmMjU1LHNbbCsrXT0yNTUmZSk7cmV0dXJuIHN9LHIuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxpPXIlMyxhPVtdLG89MCxzPXItaTtvPHM7bys9MTYzODMpYS5wdXNoKHUodCxvLG8rMTYzODM+cz9zOm8rMTYzODMpKTsxPT09aT8oZT10W3ItMV0sYS5wdXNoKG5bZT4+Ml0rbltlPDw0JjYzXSsiPT0iKSk6Mj09PWkmJihlPSh0W3ItMl08PDgpK3Rbci0xXSxhLnB1c2gobltlPj4xMF0rbltlPj40JjYzXStuW2U8PDImNjNdKyI9IikpO3JldHVybiBhLmpvaW4oIiIpfTtmb3IodmFyIG49W10saT1bXSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHM9MCxsPW8ubGVuZ3RoO3M8bDsrK3MpbltzXT1vW3NdLGlbby5jaGFyQ29kZUF0KHMpXT1zO2Z1bmN0aW9uIGModCl7dmFyIGU9dC5sZW5ndGg7aWYoZSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIHI9dC5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1yJiYocj1lKSxbcixyPT09ZT8wOjQtciU0XX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIGksYSxvPVtdLHM9ZTtzPHI7cys9MylpPSh0W3NdPDwxNiYxNjcxMTY4MCkrKHRbcysxXTw8OCY2NTI4MCkrKDI1NSZ0W3MrMl0pLG8ucHVzaChuWyhhPWkpPj4xOCY2M10rblthPj4xMiY2M10rblthPj42JjYzXStuWzYzJmFdKTtyZXR1cm4gby5qb2luKCIiKX1pWyItIi5jaGFyQ29kZUF0KDApXT02MixpWyJfIi5jaGFyQ29kZUF0KDApXT02M30se31dLDY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuYWRkKGVbMF0ubXVsKHRbMV0pKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo3NX1dLDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLm11bChlWzFdKS5jbXAoZVswXS5tdWwodFsxXSkpfX0se31dLDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSksdFsxXS5tdWwoZVswXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6NzV9XSw2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXJhdCIpLGk9dCgiLi9saWIvaXMtYm4iKSxhPXQoIi4vbGliL251bS10by1ibiIpLG89dCgiLi9saWIvc3RyLXRvLWJuIikscz10KCIuL2xpYi9yYXRpb25hbGl6ZSIpLGw9dCgiLi9kaXYiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2lmKG4oZSkpcmV0dXJuIHI/bChlLHQocikpOltlWzBdLmNsb25lKCksZVsxXS5jbG9uZSgpXTt2YXIgYz0wO3ZhciB1LGY7aWYoaShlKSl1PWUuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSl1PW8oZSk7ZWxzZXtpZigwPT09ZSlyZXR1cm5bYSgwKSxhKDEpXTtpZihlPT09TWF0aC5mbG9vcihlKSl1PWEoZSk7ZWxzZXtmb3IoO2UhPT1NYXRoLmZsb29yKGUpOyllKj1NYXRoLnBvdygyLDI1NiksYy09MjU2O3U9YShlKX19aWYobihyKSl1Lm11bChyWzFdKSxmPXJbMF0uY2xvbmUoKTtlbHNlIGlmKGkocikpZj1yLmNsb25lKCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHIpZj1vKHIpO2Vsc2UgaWYocilpZihyPT09TWF0aC5mbG9vcihyKSlmPWEocik7ZWxzZXtmb3IoO3IhPT1NYXRoLmZsb29yKHIpOylyKj1NYXRoLnBvdygyLDI1NiksYys9MjU2O2Y9YShyKX1lbHNlIGY9YSgxKTtjPjA/dT11LnVzaGxuKGMpOmM8MCYmKGY9Zi51c2hsbigtYykpO3JldHVybiBzKHUsZil9fSx7Ii4vZGl2Ijo2NywiLi9pcy1yYXQiOjY5LCIuL2xpYi9pcy1ibiI6NzMsIi4vbGliL251bS10by1ibiI6NzQsIi4vbGliL3JhdGlvbmFsaXplIjo3NSwiLi9saWIvc3RyLXRvLWJuIjo3Nn1dLDY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2lzLWJuIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYyPT09dC5sZW5ndGgmJm4odFswXSkmJm4odFsxXSl9fSx7Ii4vbGliL2lzLWJuIjo3M31dLDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNtcChuZXcgbigwKSl9fSx7ImJuLmpzIjo4NH1dLDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYm4tc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxyPXQud29yZHMsaT0wO2lmKDE9PT1lKWk9clswXTtlbHNlIGlmKDI9PT1lKWk9clswXSs2NzEwODg2NCpyWzFdO2Vsc2UgZm9yKHZhciBhPTA7YTxlO2ErKyl7dmFyIG89clthXTtpKz1vKk1hdGgucG93KDY3MTA4ODY0LGEpfXJldHVybiBuKHQpKml9fSx7Ii4vYm4tc2lnbiI6NzB9XSw3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGk9dCgiYml0LXR3aWRkbGUiKS5jb3VudFRyYWlsaW5nWmVyb3M7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkobi5sbyh0KSk7aWYoZTwzMilyZXR1cm4gZTt2YXIgcj1pKG4uaGkodCkpO2lmKHI+MjApcmV0dXJuIDUyO3JldHVybiByKzMyfX0seyJiaXQtdHdpZGRsZSI6ODIsImRvdWJsZS1iaXRzIjoxNTh9XSw3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt0KCJibi5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZCb29sZWFuKHQud29yZHMpfX0seyJibi5qcyI6ODR9XSw3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJibi5qcyIpLGk9dCgiZG91YmxlLWJpdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aS5leHBvbmVudCh0KTtyZXR1cm4gZTw1Mj9uZXcgbih0KTpuZXcgbih0Kk1hdGgucG93KDIsNTItZSkpLnVzaGxuKGUtNTIpfX0seyJibi5qcyI6ODQsImRvdWJsZS1iaXRzIjoxNTh9XSw3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL251bS10by1ibiIpLGk9dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0KSxhPWkoZSk7aWYoMD09PXIpcmV0dXJuW24oMCksbigxKV07aWYoMD09PWEpcmV0dXJuW24oMCksbigwKV07YTwwJiYodD10Lm5lZygpLGU9ZS5uZWcoKSk7dmFyIG89dC5nY2QoZSk7aWYoby5jbXBuKDEpKXJldHVyblt0LmRpdihvKSxlLmRpdihvKV07cmV0dXJuW3QsZV19fSx7Ii4vYm4tc2lnbiI6NzAsIi4vbnVtLXRvLWJuIjo3NH1dLDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX19LHsiYm4uanMiOjg0fV0sNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzBdKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo3NX1dLDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odFswXSkqbih0WzFdKX19LHsiLi9saWIvYm4tc2lnbiI6NzB9XSw3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLnN1Yih0WzFdLm11bChlWzBdKSksdFsxXS5tdWwoZVsxXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6NzV9XSw4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9ibi10by1udW0iKSxpPXQoIi4vbGliL2N0eiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXTtpZigwPT09ZS5jbXBuKDApKXJldHVybiAwO3ZhciBhPWUuYWJzKCkuZGl2bW9kKHIuYWJzKCkpLG89YS5kaXYscz1uKG8pLGw9YS5tb2QsYz1lLm5lZ2F0aXZlIT09ci5uZWdhdGl2ZT8tMToxO2lmKDA9PT1sLmNtcG4oMCkpcmV0dXJuIGMqcztpZihzKXt2YXIgdT1pKHMpKzQsZj1uKGwudXNobG4odSkuZGl2Um91bmQocikpO3JldHVybiBjKihzK2YqTWF0aC5wb3coMiwtdSkpfXZhciBoPXIuYml0TGVuZ3RoKCktbC5iaXRMZW5ndGgoKSs1MyxmPW4obC51c2hsbihoKS5kaXZSb3VuZChyKSk7cmV0dXJuIGg8MTAyMz9jKmYqTWF0aC5wb3coMiwtaCk6KGYqPU1hdGgucG93KDIsLTEwMjMpLGMqZipNYXRoLnBvdygyLDEwMjMtaCkpfX0seyIuL2xpYi9ibi10by1udW0iOjcxLCIuL2xpYi9jdHoiOjcyfV0sODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dmFyIG89WyJmdW5jdGlvbiAiLHQsIihhLGwsaCwiLG4uam9pbigiLCIpLCIpeyIsYT8iIjoidmFyIGk9IixyPyJsLTEiOiJoKzEiLCI7d2hpbGUobDw9aCl7dmFyIG09KGwraCk+Pj4xLHg9YSIsaT8iLmdldChtKSI6IlttXSJdO3JldHVybiBhP2UuaW5kZXhPZigiYyIpPDA/by5wdXNoKCI7aWYoeD09PXkpe3JldHVybiBtfWVsc2UgaWYoeDw9eSl7Iik6by5wdXNoKCI7dmFyIHA9Yyh4LHkpO2lmKHA9PT0wKXtyZXR1cm4gbX1lbHNlIGlmKHA8PTApeyIpOm8ucHVzaCgiO2lmKCIsZSwiKXtpPW07Iikscj9vLnB1c2goImw9bSsxfWVsc2V7aD1tLTF9Iik6by5wdXNoKCJoPW0tMX1lbHNle2w9bSsxfSIpLG8ucHVzaCgifSIpLGE/by5wdXNoKCJyZXR1cm4gLTF9OyIpOm8ucHVzaCgicmV0dXJuIGl9OyIpLG8uam9pbigiIil9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtuKCJBIiwieCIrdCsieSIsZSxbInkiXSwhMSxpKSxuKCJCIiwieCIrdCsieSIsZSxbInkiXSwhMCxpKSxuKCJQIiwiYyh4LHkpIit0KyIwIixlLFsieSIsImMiXSwhMSxpKSxuKCJRIiwiYyh4LHkpIit0KyIwIixlLFsieSIsImMiXSwhMCxpKSwiZnVuY3Rpb24gZGlzcGF0Y2hCc2VhcmNoIixyLCIoYSx5LGMsbCxoKXtpZihhLnNoYXBlKXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUShhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmh8MCx5LGMpfWVsc2V7cmV0dXJuIEIoYSwoYz09PXVuZGVmaW5lZCk/MDpjfDAsKGw9PT11bmRlZmluZWQpP2Euc2hhcGVbMF0tMTpsfDAseSl9fWVsc2V7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXVuZGVmaW5lZCk/MDpsfDAsKGg9PT11bmRlZmluZWQpP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpsfDAseSl9fX1yZXR1cm4gZGlzcGF0Y2hCc2VhcmNoIixyXS5qb2luKCIiKSkoKX1lLmV4cG9ydHM9e2dlOmkoIj49IiwhMSwiR0UiKSxndDppKCI+IiwhMSwiR1QiKSxsdDppKCI8IiwhMCwiTFQiKSxsZTppKCI8PSIsITAsIkxFIiksZXE6aSgiLSIsITAsIkVRIiwhMCl9fSx7fV0sODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT0zMjtyZXR1cm4odCY9LXQpJiZlLS0sNjU1MzUmdCYmKGUtPTE2KSwxNjcxMTkzNSZ0JiYoZS09OCksMjUyNjQ1MTM1JnQmJihlLT00KSw4NTg5OTM0NTkmdCYmKGUtPTIpLDE0MzE2NTU3NjUmdCYmKGUtPTEpLGV9ci5JTlRfQklUUz0zMixyLklOVF9NQVg9MjE0NzQ4MzY0NyxyLklOVF9NSU49LTE8PDMxLHIuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4odD4wKS0odDwwKX0sci5hYnM9ZnVuY3Rpb24odCl7dmFyIGU9dD4+MzE7cmV0dXJuKHReZSktZX0sci5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZV4odF5lKSYtKHQ8ZSl9LHIubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReKHReZSkmLSh0PGUpfSxyLmlzUG93Mj1mdW5jdGlvbih0KXtyZXR1cm4hKHQmdC0xfHwhdCl9LHIubG9nMj1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiBlPSh0PjY1NTM1KTw8NCxlfD1yPSgodD4+Pj1lKT4yNTUpPDwzLGV8PXI9KCh0Pj4+PXIpPjE1KTw8MiwoZXw9cj0oKHQ+Pj49cik+Myk8PDEpfCh0Pj4+PXIpPj4xfSxyLmxvZzEwPWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xZTk/OTp0Pj0xZTg/ODp0Pj0xZTc/Nzp0Pj0xZTY/Njp0Pj0xZTU/NTp0Pj0xZTQ/NDp0Pj0xZTM/Mzp0Pj0xMDA/Mjp0Pj0xMD8xOjB9LHIucG9wQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDE2ODQzMDA5KigodD0oODU4OTkzNDU5Jih0LT10Pj4+MSYxNDMxNjU1NzY1KSkrKHQ+Pj4yJjg1ODk5MzQ1OSkpKyh0Pj4+NCkmMjUyNjQ1MTM1KT4+PjI0fSxyLmNvdW50VHJhaWxpbmdaZXJvcz1uLHIubmV4dFBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHQrPTA9PT10LC0tdCx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KSsxfSxyLnByZXZQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KS0odD4+PjEpfSxyLnBhcml0eT1mdW5jdGlvbih0KXtyZXR1cm4gdF49dD4+PjE2LHRePXQ+Pj44LHRePXQ+Pj40LDI3MDMwPj4+KHQmPTE1KSYxfTt2YXIgaT1uZXcgQXJyYXkoMjU2KTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwyNTY7KytlKXt2YXIgcj1lLG49ZSxpPTc7Zm9yKHI+Pj49MTtyO3I+Pj49MSluPDw9MSxufD0xJnIsLS1pO3RbZV09bjw8aSYyNTV9fShpKSxyLnJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGlbMjU1JnRdPDwyNHxpW3Q+Pj44JjI1NV08PDE2fGlbdD4+PjE2JjI1NV08PDh8aVt0Pj4+MjQmMjU1XX0sci5pbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQmPTY1NTM1KXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZSY9NjU1MzUpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX0sci5kZWludGVybGVhdmUyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9NjU1MzUmKCh0PTE2NzExOTM1JigodD0yNTI2NDUxMzUmKCh0PTg1ODk5MzQ1OSYoKHQ9dD4+PmUmMTQzMTY1NTc2NSl8dD4+PjEpKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjE2KSk8PDE2Pj4xNn0sci5pbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9MTIyNzEzMzUxMyYoKHQ9MzI3MjM1NjAzNSYoKHQ9MjUxNzE5Njk1JigodD00Mjc4MTkwMzM1JigodCY9MTAyMyl8dDw8MTYpKXx0PDw4KSl8dDw8NCkpfHQ8PDIpLCh0fD0oZT0xMjI3MTMzNTEzJigoZT0zMjcyMzU2MDM1JigoZT0yNTE3MTk2OTUmKChlPTQyNzgxOTAzMzUmKChlJj0xMDIzKXxlPDwxNikpfGU8PDgpKXxlPDw0KSl8ZTw8MikpPDwxKXwocj0xMjI3MTMzNTEzJigocj0zMjcyMzU2MDM1Jigocj0yNTE3MTk2OTUmKChyPTQyNzgxOTAzMzUmKChyJj0xMDIzKXxyPDwxNikpfHI8PDgpKXxyPDw0KSl8cjw8MikpPDwyfSxyLmRlaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xMDIzJigodD00Mjc4MTkwMzM1JigodD0yNTE3MTk2OTUmKCh0PTMyNzIzNTYwMzUmKCh0PXQ+Pj5lJjEyMjcxMzM1MTMpfHQ+Pj4yKSl8dD4+PjQpKXx0Pj4+OCkpfHQ+Pj4xNikpPDwyMj4+MjJ9LHIubmV4dENvbWJpbmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXR8dC0xO3JldHVybiBlKzF8KH5lJi1+ZSktMT4+Pm4odCkrMX19LHt9XSw4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjbGFtcCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXt9KTt2YXIgcixvLHMsbCxjLHUsZixoLHAsZCxnLHY9bnVsbD09ZS5jdXRvZmY/LjI1OmUuY3V0b2ZmLG09bnVsbD09ZS5yYWRpdXM/ODplLnJhZGl1cyx5PWUuY2hhbm5lbHx8MDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fEFycmF5LmlzQXJyYXkodCkpe2lmKCFlLndpZHRofHwhZS5oZWlnaHQpdGhyb3cgRXJyb3IoIkZvciByYXcgZGF0YSB3aWR0aCBhbmQgaGVpZ2h0IHNob3VsZCBiZSBwcm92aWRlZCBieSBvcHRpb25zIik7cj1lLndpZHRoLG89ZS5oZWlnaHQsbD10LHU9ZS5zdHJpZGU/ZS5zdHJpZGU6TWF0aC5mbG9vcih0Lmxlbmd0aC9yL28pfWVsc2Ugd2luZG93LkhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50PyhmPShoPXQpLmdldENvbnRleHQoIjJkIikscj1oLndpZHRoLG89aC5oZWlnaHQscD1mLmdldEltYWdlRGF0YSgwLDAscixvKSxsPXAuZGF0YSx1PTQpOndpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQmJnQgaW5zdGFuY2VvZiB3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPyhoPXQuY2FudmFzLGY9dCxyPWgud2lkdGgsbz1oLmhlaWdodCxwPWYuZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkltYWdlRGF0YSYmdCBpbnN0YW5jZW9mIHdpbmRvdy5JbWFnZURhdGEmJihwPXQscj10LndpZHRoLG89dC5oZWlnaHQsbD1wLmRhdGEsdT00KTtpZihzPU1hdGgubWF4KHIsbyksd2luZG93LlVpbnQ4Q2xhbXBlZEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4Q2xhbXBlZEFycmF5fHx3aW5kb3cuVWludDhBcnJheSYmbCBpbnN0YW5jZW9mIHdpbmRvdy5VaW50OEFycmF5KWZvcihjPWwsbD1BcnJheShyKm8pLGQ9MCxnPWMubGVuZ3RoO2Q8ZztkKyspbFtkXT1jW2QqdSt5XS8yNTU7ZWxzZSBpZigxIT09dSl0aHJvdyBFcnJvcigiUmF3IGRhdGEgY2FuIGhhdmUgb25seSAxIHZhbHVlIHBlciBwaXhlbCIpO3ZhciB4PUFycmF5KHIqbyksYj1BcnJheShyKm8pLF89QXJyYXkocyksdz1BcnJheShzKSxrPUFycmF5KHMrMSksVD1BcnJheShzKTtmb3IoZD0wLGc9cipvO2Q8ZztkKyspe3ZhciBBPWxbZF07eFtkXT0xPT09QT8wOjA9PT1BP2k6TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1BKSwyKSxiW2RdPTE9PT1BP2k6MD09PUE/MDpNYXRoLnBvdyhNYXRoLm1heCgwLEEtLjUpLDIpfWEoeCxyLG8sXyx3LFQsayksYShiLHIsbyxfLHcsVCxrKTt2YXIgTT13aW5kb3cuRmxvYXQzMkFycmF5P25ldyBGbG9hdDMyQXJyYXkocipvKTpuZXcgQXJyYXkocipvKTtmb3IoZD0wLGc9cipvO2Q8ZztkKyspTVtkXT1uKDEtKCh4W2RdLWJbZF0pL20rdiksMCwxKTtyZXR1cm4gTX07dmFyIGk9MWUyMDtmdW5jdGlvbiBhKHQsZSxyLG4saSxhLHMpe2Zvcih2YXIgbD0wO2w8ZTtsKyspe2Zvcih2YXIgYz0wO2M8cjtjKyspbltjXT10W2MqZStsXTtmb3IobyhuLGksYSxzLHIpLGM9MDtjPHI7YysrKXRbYyplK2xdPWlbY119Zm9yKGM9MDtjPHI7YysrKXtmb3IobD0wO2w8ZTtsKyspbltsXT10W2MqZStsXTtmb3IobyhuLGksYSxzLGUpLGw9MDtsPGU7bCsrKXRbYyplK2xdPU1hdGguc3FydChpW2xdKX19ZnVuY3Rpb24gbyh0LGUscixuLGEpe3JbMF09MCxuWzBdPS1pLG5bMV09K2k7Zm9yKHZhciBvPTEscz0wO288YTtvKyspe2Zvcih2YXIgbD0odFtvXStvKm8tKHRbcltzXV0rcltzXSpyW3NdKSkvKDIqby0yKnJbc10pO2w8PW5bc107KXMtLSxsPSh0W29dK28qby0odFtyW3NdXStyW3NdKnJbc10pKS8oMipvLTIqcltzXSk7clsrK3NdPW8sbltzXT1sLG5bcysxXT0raX1mb3Iobz0wLHM9MDtvPGE7bysrKXtmb3IoO25bcysxXTxvOylzKys7ZVtvXT0oby1yW3NdKSooby1yW3NdKSt0W3Jbc11dfX19LHtjbGFtcDoxMDV9XSw4NDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gYSh0LGUscil7aWYoYS5pc0JOKHQpKXJldHVybiB0O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT10JiYoImxlIiE9PWUmJiJiZSIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHwiYmUiKSl9dmFyIG87Im9iamVjdCI9PXR5cGVvZiBlP2UuZXhwb3J0cz1hOnIuQk49YSxhLkJOPWEsYS53b3JkU2l6ZT0yNjt0cnl7bz10KCJidWZmZXIiKS5CdWZmZXJ9Y2F0Y2godCl7fWZ1bmN0aW9uIHModCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksYT1lO2E8aTthKyspe3ZhciBvPXQuY2hhckNvZGVBdChhKS00ODtuPDw9NCxufD1vPj00OSYmbzw9NTQ/by00OSsxMDpvPj0xNyYmbzw9MjI/by0xNysxMDoxNSZvfXJldHVybiBufWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxhO28rKyl7dmFyIHM9dC5jaGFyQ29kZUF0KG8pLTQ4O2kqPW4saSs9cz49NDk/cy00OSsxMDpzPj0xNz9zLTE3KzEwOnN9cmV0dXJuIGl9YS5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYXx8bnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWEud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LGEubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxhLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sYS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdE51bWJlcih0LGUscik7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpOyJoZXgiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNik7dmFyIGk9MDsiLSI9PT0odD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmaSsrLDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGkpOnRoaXMuX3BhcnNlQmFzZSh0LGUsaSksIi0iPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLCJsZSI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxhLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHQsZSxyKXtpZihuKCJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIGEsbyxzPTA7aWYoImJlIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxhPTA7aT49MDtpLT0zKW89dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7ZWxzZSBpZigibGUiPT09cilmb3IoaT0wLGE9MDtpPHQubGVuZ3RoO2krPTMpbz10W2ldfHRbaSsxXTw8OHx0W2krMl08PDE2LHRoaXMud29yZHNbYV18PW88PHMmNjcxMDg4NjMsdGhpcy53b3Jkc1thKzFdPW8+Pj4yNi1zJjY3MTA4ODYzLChzKz0yNCk+PTI2JiYocy09MjYsYSsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24odCxlKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPTA7dmFyIG4saSxhPTA7Zm9yKHI9dC5sZW5ndGgtNixuPTA7cj49ZTtyLT02KWk9cyh0LHIscis2KSx0aGlzLndvcmRzW25dfD1pPDxhJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LWEmNDE5NDMwMywoYSs9MjQpPj0yNiYmKGEtPTI2LG4rKyk7cis2IT09ZSYmKGk9cyh0LGUscis2KSx0aGlzLndvcmRzW25dfD1pPDxhJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LWEmNDE5NDMwMyksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGk9MTtpPD02NzEwODg2MztpKj1lKW4rKztuLS0saT1pL2V8MDtmb3IodmFyIGE9dC5sZW5ndGgtcixvPWElbixzPU1hdGgubWluKGEsYS1vKStyLGM9MCx1PXI7dTxzO3UrPW4pYz1sKHQsdSx1K24sZSksdGhpcy5pbXVsbihpKSx0aGlzLndvcmRzWzBdK2M8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9Yzp0aGlzLl9pYWRkbihjKTtpZigwIT09byl7dmFyIGY9MTtmb3IoYz1sKHQsdSx0Lmxlbmd0aCxlKSx1PTA7dTxvO3UrKylmKj1lO3RoaXMuaW11bG4oZiksdGhpcy53b3Jkc1swXStjPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWM6dGhpcy5faWFkZG4oYyl9fSxhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxhLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0sYS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxhLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sYS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgYz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSx1PVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGY9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gaCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLGE9MHxlLndvcmRzWzBdLG89aSphLHM9NjcxMDg4NjMmbyxsPW8vNjcxMDg4NjR8MDtyLndvcmRzWzBdPXM7Zm9yKHZhciBjPTE7YzxuO2MrKyl7Zm9yKHZhciB1PWw+Pj4yNixmPTY3MTA4ODYzJmwsaD1NYXRoLm1pbihjLGUubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxjLXQubGVuZ3RoKzEpO3A8PWg7cCsrKXt2YXIgZD1jLXB8MDt1Kz0obz0oaT0wfHQud29yZHNbZF0pKihhPTB8ZS53b3Jkc1twXSkrZikvNjcxMDg4NjR8MCxmPTY3MTA4ODYzJm99ci53b3Jkc1tjXT0wfGYsbD0wfHV9cmV0dXJuIDAhPT1sP3Iud29yZHNbY109MHxsOnIubGVuZ3RoLS0sci5zdHJpcCgpfWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoZT0wfGV8fDEsMTY9PT0odD10fHwxMCl8fCJoZXgiPT09dCl7cj0iIjtmb3IodmFyIGk9MCxhPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihzPDxpfGEpKS50b1N0cmluZygxNik7cj0wIT09KGE9cz4+PjI0LWkmMTY3NzcyMTUpfHxvIT09dGhpcy5sZW5ndGgtMT9jWzYtbC5sZW5ndGhdK2wrcjpsK3IsKGkrPTIpPj0yNiYmKGktPTI2LG8tLSl9Zm9yKDAhPT1hJiYocj1hLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT0wOylyPSIwIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9Ii0iK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIGg9dVt0XSxwPWZbdF07cj0iIjt2YXIgZD10aGlzLmNsb25lKCk7Zm9yKGQubmVnYXRpdmU9MDshZC5pc1plcm8oKTspe3ZhciBnPWQubW9kbihwKS50b1N0cmluZyh0KTtyPShkPWQuaWRpdm4ocCkpLmlzWmVybygpP2crcjpjW2gtZy5sZW5ndGhdK2crcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9IjAiK3IpO3IubGVuZ3RoJWUhPTA7KXI9IjAiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj0iLSIrcikscn1uKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGEucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxhLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKCJ1bmRlZmluZWQiIT10eXBlb2YgbyksdGhpcy50b0FycmF5TGlrZShvLHQsZSl9LGEucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5ieXRlTGVuZ3RoKCksYT1yfHxNYXRoLm1heCgxLGkpO24oaTw9YSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG4oYT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIG8scyxsPSJsZSI9PT1lLGM9bmV3IHQoYSksdT10aGlzLmNsb25lKCk7aWYobCl7Zm9yKHM9MDshdS5pc1plcm8oKTtzKyspbz11LmFuZGxuKDI1NSksdS5pdXNocm4oOCksY1tzXT1vO2Zvcig7czxhO3MrKyljW3NdPTB9ZWxzZXtmb3Iocz0wO3M8YS1pO3MrKyljW3NdPTA7Zm9yKHM9MDshdS5pc1plcm8oKTtzKyspbz11LmFuZGxuKDI1NSksdS5pdXNocm4oOCksY1thLXMtMV09b31yZXR1cm4gY30sTWF0aC5jbHozMj9hLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTphLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0sYS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT0oMSZlKSYmcisrLHJ9LGEucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxhLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sYS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sYS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sYS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sYS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGEucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxhLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxhLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0sYS5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0sYS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0sYS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sYS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sYS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sYS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LGEucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LGEucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LGEucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LGEucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIHI9dC8yNnwwLGk9dCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXT1lP3RoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGk9MCxhPTA7YTxuLmxlbmd0aDthKyspZT0oMHxyLndvcmRzW2FdKSsoMHxuLndvcmRzW2FdKStpLHRoaXMud29yZHNbYV09NjcxMDg4NjMmZSxpPWU+Pj4yNjtmb3IoOzAhPT1pJiZhPHIubGVuZ3RoO2ErKyllPSgwfHIud29yZHNbYV0pK2ksdGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7YTxyLmxlbmd0aDthKyspdGhpcy53b3Jkc1thXT1yLndvcmRzW2FdO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odC5uZWdhdGl2ZT0wLGU9dGhpcy5zdWIodCksdC5uZWdhdGl2ZV49MSxlKTowPT09dC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxlPXQuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxlKTp0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh0KTp0LmNsb25lKCkuaWFkZCh0aGlzKX0sYS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0KXtpZigwIT09dC5uZWdhdGl2ZSl7dC5uZWdhdGl2ZT0wO3ZhciBlPXRoaXMuaWFkZCh0KTtyZXR1cm4gdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHIsbixpPXRoaXMuY21wKHQpO2lmKDA9PT1pKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztpPjA/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGE9MCxvPTA7bzxuLmxlbmd0aDtvKyspYT0oZT0oMHxyLndvcmRzW29dKS0oMHxuLndvcmRzW29dKSthKT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlO2Zvcig7MCE9PWEmJm88ci5sZW5ndGg7bysrKWE9KGU9KDB8ci53b3Jkc1tvXSkrYSk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtpZigwPT09YSYmbzxyLmxlbmd0aCYmciE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLG8pLHIhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbz10LndvcmRzLHM9ZS53b3JkcyxsPXIud29yZHMsYz0wLHU9MHxvWzBdLGY9ODE5MSZ1LGg9dT4+PjEzLHA9MHxvWzFdLGQ9ODE5MSZwLGc9cD4+PjEzLHY9MHxvWzJdLG09ODE5MSZ2LHk9dj4+PjEzLHg9MHxvWzNdLGI9ODE5MSZ4LF89eD4+PjEzLHc9MHxvWzRdLGs9ODE5MSZ3LFQ9dz4+PjEzLEE9MHxvWzVdLE09ODE5MSZBLFM9QT4+PjEzLEU9MHxvWzZdLEM9ODE5MSZFLEw9RT4+PjEzLHo9MHxvWzddLE89ODE5MSZ6LEk9ej4+PjEzLEQ9MHxvWzhdLFA9ODE5MSZELFI9RD4+PjEzLEY9MHxvWzldLEI9ODE5MSZGLE49Rj4+PjEzLGo9MHxzWzBdLFY9ODE5MSZqLFU9aj4+PjEzLHE9MHxzWzFdLEg9ODE5MSZxLEc9cT4+PjEzLFk9MHxzWzJdLFc9ODE5MSZZLFg9WT4+PjEzLFo9MHxzWzNdLCQ9ODE5MSZaLEo9Wj4+PjEzLEs9MHxzWzRdLFE9ODE5MSZLLHR0PUs+Pj4xMyxldD0wfHNbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8c1s2XSxhdD04MTkxJml0LG90PWl0Pj4+MTMsc3Q9MHxzWzddLGx0PTgxOTEmc3QsY3Q9c3Q+Pj4xMyx1dD0wfHNbOF0sZnQ9ODE5MSZ1dCxodD11dD4+PjEzLHB0PTB8c1s5XSxkdD04MTkxJnB0LGd0PXB0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTk7dmFyIHZ0PShjKyhuPU1hdGguaW11bChmLFYpKXwwKSsoKDgxOTEmKGk9KGk9TWF0aC5pbXVsKGYsVSkpK01hdGguaW11bChoLFYpfDApKTw8MTMpfDA7Yz0oKGE9TWF0aC5pbXVsKGgsVSkpKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChkLFYpLGk9KGk9TWF0aC5pbXVsKGQsVSkpK01hdGguaW11bChnLFYpfDAsYT1NYXRoLmltdWwoZyxVKTt2YXIgbXQ9KGMrKG49bitNYXRoLmltdWwoZixIKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixHKXwwKStNYXRoLmltdWwoaCxIKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsRyl8MCkrKGk+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKG0sViksaT0oaT1NYXRoLmltdWwobSxVKSkrTWF0aC5pbXVsKHksVil8MCxhPU1hdGguaW11bCh5LFUpLG49bitNYXRoLmltdWwoZCxIKXwwLGk9KGk9aStNYXRoLmltdWwoZCxHKXwwKStNYXRoLmltdWwoZyxIKXwwLGE9YStNYXRoLmltdWwoZyxHKXwwO3ZhciB5dD0oYysobj1uK01hdGguaW11bChmLFcpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLFgpfDApK01hdGguaW11bChoLFcpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxYKXwwKSsoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoYixWKSxpPShpPU1hdGguaW11bChiLFUpKStNYXRoLmltdWwoXyxWKXwwLGE9TWF0aC5pbXVsKF8sVSksbj1uK01hdGguaW11bChtLEgpfDAsaT0oaT1pK01hdGguaW11bChtLEcpfDApK01hdGguaW11bCh5LEgpfDAsYT1hK01hdGguaW11bCh5LEcpfDAsbj1uK01hdGguaW11bChkLFcpfDAsaT0oaT1pK01hdGguaW11bChkLFgpfDApK01hdGguaW11bChnLFcpfDAsYT1hK01hdGguaW11bChnLFgpfDA7dmFyIHh0PShjKyhuPW4rTWF0aC5pbXVsKGYsJCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsSil8MCkrTWF0aC5pbXVsKGgsJCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLEopfDApKyhpPj4+MTMpfDApKyh4dD4+PjI2KXwwLHh0Jj02NzEwODg2MyxuPU1hdGguaW11bChrLFYpLGk9KGk9TWF0aC5pbXVsKGssVSkpK01hdGguaW11bChULFYpfDAsYT1NYXRoLmltdWwoVCxVKSxuPW4rTWF0aC5pbXVsKGIsSCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsRyl8MCkrTWF0aC5pbXVsKF8sSCl8MCxhPWErTWF0aC5pbXVsKF8sRyl8MCxuPW4rTWF0aC5pbXVsKG0sVyl8MCxpPShpPWkrTWF0aC5pbXVsKG0sWCl8MCkrTWF0aC5pbXVsKHksVyl8MCxhPWErTWF0aC5pbXVsKHksWCl8MCxuPW4rTWF0aC5pbXVsKGQsJCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsSil8MCkrTWF0aC5pbXVsKGcsJCl8MCxhPWErTWF0aC5pbXVsKGcsSil8MDt2YXIgYnQ9KGMrKG49bitNYXRoLmltdWwoZixRKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZix0dCl8MCkrTWF0aC5pbXVsKGgsUSl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLHR0KXwwKSsoaT4+PjEzKXwwKSsoYnQ+Pj4yNil8MCxidCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoTSxWKSxpPShpPU1hdGguaW11bChNLFUpKStNYXRoLmltdWwoUyxWKXwwLGE9TWF0aC5pbXVsKFMsVSksbj1uK01hdGguaW11bChrLEgpfDAsaT0oaT1pK01hdGguaW11bChrLEcpfDApK01hdGguaW11bChULEgpfDAsYT1hK01hdGguaW11bChULEcpfDAsbj1uK01hdGguaW11bChiLFcpfDAsaT0oaT1pK01hdGguaW11bChiLFgpfDApK01hdGguaW11bChfLFcpfDAsYT1hK01hdGguaW11bChfLFgpfDAsbj1uK01hdGguaW11bChtLCQpfDAsaT0oaT1pK01hdGguaW11bChtLEopfDApK01hdGguaW11bCh5LCQpfDAsYT1hK01hdGguaW11bCh5LEopfDAsbj1uK01hdGguaW11bChkLFEpfDAsaT0oaT1pK01hdGguaW11bChkLHR0KXwwKStNYXRoLmltdWwoZyxRKXwwLGE9YStNYXRoLmltdWwoZyx0dCl8MDt2YXIgX3Q9KGMrKG49bitNYXRoLmltdWwoZixydCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsbnQpfDApK01hdGguaW11bChoLHJ0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsbnQpfDApKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChDLFYpLGk9KGk9TWF0aC5pbXVsKEMsVSkpK01hdGguaW11bChMLFYpfDAsYT1NYXRoLmltdWwoTCxVKSxuPW4rTWF0aC5pbXVsKE0sSCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sRyl8MCkrTWF0aC5pbXVsKFMsSCl8MCxhPWErTWF0aC5pbXVsKFMsRyl8MCxuPW4rTWF0aC5pbXVsKGssVyl8MCxpPShpPWkrTWF0aC5pbXVsKGssWCl8MCkrTWF0aC5pbXVsKFQsVyl8MCxhPWErTWF0aC5pbXVsKFQsWCl8MCxuPW4rTWF0aC5pbXVsKGIsJCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsSil8MCkrTWF0aC5pbXVsKF8sJCl8MCxhPWErTWF0aC5pbXVsKF8sSil8MCxuPW4rTWF0aC5pbXVsKG0sUSl8MCxpPShpPWkrTWF0aC5pbXVsKG0sdHQpfDApK01hdGguaW11bCh5LFEpfDAsYT1hK01hdGguaW11bCh5LHR0KXwwLG49bitNYXRoLmltdWwoZCxydCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsbnQpfDApK01hdGguaW11bChnLHJ0KXwwLGE9YStNYXRoLmltdWwoZyxudCl8MDt2YXIgd3Q9KGMrKG49bitNYXRoLmltdWwoZixhdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsb3QpfDApK01hdGguaW11bChoLGF0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsb3QpfDApKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChPLFYpLGk9KGk9TWF0aC5pbXVsKE8sVSkpK01hdGguaW11bChJLFYpfDAsYT1NYXRoLmltdWwoSSxVKSxuPW4rTWF0aC5pbXVsKEMsSCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsRyl8MCkrTWF0aC5pbXVsKEwsSCl8MCxhPWErTWF0aC5pbXVsKEwsRyl8MCxuPW4rTWF0aC5pbXVsKE0sVyl8MCxpPShpPWkrTWF0aC5pbXVsKE0sWCl8MCkrTWF0aC5pbXVsKFMsVyl8MCxhPWErTWF0aC5pbXVsKFMsWCl8MCxuPW4rTWF0aC5pbXVsKGssJCl8MCxpPShpPWkrTWF0aC5pbXVsKGssSil8MCkrTWF0aC5pbXVsKFQsJCl8MCxhPWErTWF0aC5pbXVsKFQsSil8MCxuPW4rTWF0aC5pbXVsKGIsUSl8MCxpPShpPWkrTWF0aC5pbXVsKGIsdHQpfDApK01hdGguaW11bChfLFEpfDAsYT1hK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwobSxydCl8MCxpPShpPWkrTWF0aC5pbXVsKG0sbnQpfDApK01hdGguaW11bCh5LHJ0KXwwLGE9YStNYXRoLmltdWwoeSxudCl8MCxuPW4rTWF0aC5pbXVsKGQsYXQpfDAsaT0oaT1pK01hdGguaW11bChkLG90KXwwKStNYXRoLmltdWwoZyxhdCl8MCxhPWErTWF0aC5pbXVsKGcsb3QpfDA7dmFyIGt0PShjKyhuPW4rTWF0aC5pbXVsKGYsbHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLGN0KXwwKStNYXRoLmltdWwoaCxsdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLGN0KXwwKSsoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUCxWKSxpPShpPU1hdGguaW11bChQLFUpKStNYXRoLmltdWwoUixWKXwwLGE9TWF0aC5pbXVsKFIsVSksbj1uK01hdGguaW11bChPLEgpfDAsaT0oaT1pK01hdGguaW11bChPLEcpfDApK01hdGguaW11bChJLEgpfDAsYT1hK01hdGguaW11bChJLEcpfDAsbj1uK01hdGguaW11bChDLFcpfDAsaT0oaT1pK01hdGguaW11bChDLFgpfDApK01hdGguaW11bChMLFcpfDAsYT1hK01hdGguaW11bChMLFgpfDAsbj1uK01hdGguaW11bChNLCQpfDAsaT0oaT1pK01hdGguaW11bChNLEopfDApK01hdGguaW11bChTLCQpfDAsYT1hK01hdGguaW11bChTLEopfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT0oaT1pK01hdGguaW11bChrLHR0KXwwKStNYXRoLmltdWwoVCxRKXwwLGE9YStNYXRoLmltdWwoVCx0dCl8MCxuPW4rTWF0aC5pbXVsKGIscnQpfDAsaT0oaT1pK01hdGguaW11bChiLG50KXwwKStNYXRoLmltdWwoXyxydCl8MCxhPWErTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bChtLGF0KXwwLGk9KGk9aStNYXRoLmltdWwobSxvdCl8MCkrTWF0aC5pbXVsKHksYXQpfDAsYT1hK01hdGguaW11bCh5LG90KXwwLG49bitNYXRoLmltdWwoZCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsY3QpfDApK01hdGguaW11bChnLGx0KXwwLGE9YStNYXRoLmltdWwoZyxjdCl8MDt2YXIgVHQ9KGMrKG49bitNYXRoLmltdWwoZixmdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsaHQpfDApK01hdGguaW11bChoLGZ0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsaHQpfDApKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLFYpLGk9KGk9TWF0aC5pbXVsKEIsVSkpK01hdGguaW11bChOLFYpfDAsYT1NYXRoLmltdWwoTixVKSxuPW4rTWF0aC5pbXVsKFAsSCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsRyl8MCkrTWF0aC5pbXVsKFIsSCl8MCxhPWErTWF0aC5pbXVsKFIsRyl8MCxuPW4rTWF0aC5pbXVsKE8sVyl8MCxpPShpPWkrTWF0aC5pbXVsKE8sWCl8MCkrTWF0aC5pbXVsKEksVyl8MCxhPWErTWF0aC5pbXVsKEksWCl8MCxuPW4rTWF0aC5pbXVsKEMsJCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsSil8MCkrTWF0aC5pbXVsKEwsJCl8MCxhPWErTWF0aC5pbXVsKEwsSil8MCxuPW4rTWF0aC5pbXVsKE0sUSl8MCxpPShpPWkrTWF0aC5pbXVsKE0sdHQpfDApK01hdGguaW11bChTLFEpfDAsYT1hK01hdGguaW11bChTLHR0KXwwLG49bitNYXRoLmltdWwoayxydCl8MCxpPShpPWkrTWF0aC5pbXVsKGssbnQpfDApK01hdGguaW11bChULHJ0KXwwLGE9YStNYXRoLmltdWwoVCxudCl8MCxuPW4rTWF0aC5pbXVsKGIsYXQpfDAsaT0oaT1pK01hdGguaW11bChiLG90KXwwKStNYXRoLmltdWwoXyxhdCl8MCxhPWErTWF0aC5pbXVsKF8sb3QpfDAsbj1uK01hdGguaW11bChtLGx0KXwwLGk9KGk9aStNYXRoLmltdWwobSxjdCl8MCkrTWF0aC5pbXVsKHksbHQpfDAsYT1hK01hdGguaW11bCh5LGN0KXwwLG49bitNYXRoLmltdWwoZCxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsaHQpfDApK01hdGguaW11bChnLGZ0KXwwLGE9YStNYXRoLmltdWwoZyxodCl8MDt2YXIgQXQ9KGMrKG49bitNYXRoLmltdWwoZixkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsZ3QpfDApK01hdGguaW11bChoLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsZ3QpfDApKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLEgpLGk9KGk9TWF0aC5pbXVsKEIsRykpK01hdGguaW11bChOLEgpfDAsYT1NYXRoLmltdWwoTixHKSxuPW4rTWF0aC5pbXVsKFAsVyl8MCxpPShpPWkrTWF0aC5pbXVsKFAsWCl8MCkrTWF0aC5pbXVsKFIsVyl8MCxhPWErTWF0aC5pbXVsKFIsWCl8MCxuPW4rTWF0aC5pbXVsKE8sJCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sSil8MCkrTWF0aC5pbXVsKEksJCl8MCxhPWErTWF0aC5pbXVsKEksSil8MCxuPW4rTWF0aC5pbXVsKEMsUSl8MCxpPShpPWkrTWF0aC5pbXVsKEMsdHQpfDApK01hdGguaW11bChMLFEpfDAsYT1hK01hdGguaW11bChMLHR0KXwwLG49bitNYXRoLmltdWwoTSxydCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sbnQpfDApK01hdGguaW11bChTLHJ0KXwwLGE9YStNYXRoLmltdWwoUyxudCl8MCxuPW4rTWF0aC5pbXVsKGssYXQpfDAsaT0oaT1pK01hdGguaW11bChrLG90KXwwKStNYXRoLmltdWwoVCxhdCl8MCxhPWErTWF0aC5pbXVsKFQsb3QpfDAsbj1uK01hdGguaW11bChiLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoYixjdCl8MCkrTWF0aC5pbXVsKF8sbHQpfDAsYT1hK01hdGguaW11bChfLGN0KXwwLG49bitNYXRoLmltdWwobSxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKG0saHQpfDApK01hdGguaW11bCh5LGZ0KXwwLGE9YStNYXRoLmltdWwoeSxodCl8MDt2YXIgTXQ9KGMrKG49bitNYXRoLmltdWwoZCxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGQsZ3QpfDApK01hdGguaW11bChnLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGcsZ3QpfDApKyhpPj4+MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2MyxuPU1hdGguaW11bChCLFcpLGk9KGk9TWF0aC5pbXVsKEIsWCkpK01hdGguaW11bChOLFcpfDAsYT1NYXRoLmltdWwoTixYKSxuPW4rTWF0aC5pbXVsKFAsJCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsSil8MCkrTWF0aC5pbXVsKFIsJCl8MCxhPWErTWF0aC5pbXVsKFIsSil8MCxuPW4rTWF0aC5pbXVsKE8sUSl8MCxpPShpPWkrTWF0aC5pbXVsKE8sdHQpfDApK01hdGguaW11bChJLFEpfDAsYT1hK01hdGguaW11bChJLHR0KXwwLG49bitNYXRoLmltdWwoQyxydCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsbnQpfDApK01hdGguaW11bChMLHJ0KXwwLGE9YStNYXRoLmltdWwoTCxudCl8MCxuPW4rTWF0aC5pbXVsKE0sYXQpfDAsaT0oaT1pK01hdGguaW11bChNLG90KXwwKStNYXRoLmltdWwoUyxhdCl8MCxhPWErTWF0aC5pbXVsKFMsb3QpfDAsbj1uK01hdGguaW11bChrLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoayxjdCl8MCkrTWF0aC5pbXVsKFQsbHQpfDAsYT1hK01hdGguaW11bChULGN0KXwwLG49bitNYXRoLmltdWwoYixmdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsaHQpfDApK01hdGguaW11bChfLGZ0KXwwLGE9YStNYXRoLmltdWwoXyxodCl8MDt2YXIgU3Q9KGMrKG49bitNYXRoLmltdWwobSxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKG0sZ3QpfDApK01hdGguaW11bCh5LGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKHksZ3QpfDApKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLCQpLGk9KGk9TWF0aC5pbXVsKEIsSikpK01hdGguaW11bChOLCQpfDAsYT1NYXRoLmltdWwoTixKKSxuPW4rTWF0aC5pbXVsKFAsUSl8MCxpPShpPWkrTWF0aC5pbXVsKFAsdHQpfDApK01hdGguaW11bChSLFEpfDAsYT1hK01hdGguaW11bChSLHR0KXwwLG49bitNYXRoLmltdWwoTyxydCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sbnQpfDApK01hdGguaW11bChJLHJ0KXwwLGE9YStNYXRoLmltdWwoSSxudCl8MCxuPW4rTWF0aC5pbXVsKEMsYXQpfDAsaT0oaT1pK01hdGguaW11bChDLG90KXwwKStNYXRoLmltdWwoTCxhdCl8MCxhPWErTWF0aC5pbXVsKEwsb3QpfDAsbj1uK01hdGguaW11bChNLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxjdCl8MCkrTWF0aC5pbXVsKFMsbHQpfDAsYT1hK01hdGguaW11bChTLGN0KXwwLG49bitNYXRoLmltdWwoayxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKGssaHQpfDApK01hdGguaW11bChULGZ0KXwwLGE9YStNYXRoLmltdWwoVCxodCl8MDt2YXIgRXQ9KGMrKG49bitNYXRoLmltdWwoYixkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGIsZ3QpfDApK01hdGguaW11bChfLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKF8sZ3QpfDApKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLFEpLGk9KGk9TWF0aC5pbXVsKEIsdHQpKStNYXRoLmltdWwoTixRKXwwLGE9TWF0aC5pbXVsKE4sdHQpLG49bitNYXRoLmltdWwoUCxydCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsbnQpfDApK01hdGguaW11bChSLHJ0KXwwLGE9YStNYXRoLmltdWwoUixudCl8MCxuPW4rTWF0aC5pbXVsKE8sYXQpfDAsaT0oaT1pK01hdGguaW11bChPLG90KXwwKStNYXRoLmltdWwoSSxhdCl8MCxhPWErTWF0aC5pbXVsKEksb3QpfDAsbj1uK01hdGguaW11bChDLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxjdCl8MCkrTWF0aC5pbXVsKEwsbHQpfDAsYT1hK01hdGguaW11bChMLGN0KXwwLG49bitNYXRoLmltdWwoTSxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKE0saHQpfDApK01hdGguaW11bChTLGZ0KXwwLGE9YStNYXRoLmltdWwoUyxodCl8MDt2YXIgQ3Q9KGMrKG49bitNYXRoLmltdWwoayxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGssZ3QpfDApK01hdGguaW11bChULGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFQsZ3QpfDApKyhpPj4+MTMpfDApKyhDdD4+PjI2KXwwLEN0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLHJ0KSxpPShpPU1hdGguaW11bChCLG50KSkrTWF0aC5pbXVsKE4scnQpfDAsYT1NYXRoLmltdWwoTixudCksbj1uK01hdGguaW11bChQLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxvdCl8MCkrTWF0aC5pbXVsKFIsYXQpfDAsYT1hK01hdGguaW11bChSLG90KXwwLG49bitNYXRoLmltdWwoTyxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sY3QpfDApK01hdGguaW11bChJLGx0KXwwLGE9YStNYXRoLmltdWwoSSxjdCl8MCxuPW4rTWF0aC5pbXVsKEMsZnQpfDAsaT0oaT1pK01hdGguaW11bChDLGh0KXwwKStNYXRoLmltdWwoTCxmdCl8MCxhPWErTWF0aC5pbXVsKEwsaHQpfDA7dmFyIEx0PShjKyhuPW4rTWF0aC5pbXVsKE0sZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChNLGd0KXwwKStNYXRoLmltdWwoUyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChTLGd0KXwwKSsoaT4+PjEzKXwwKSsoTHQ+Pj4yNil8MCxMdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixhdCksaT0oaT1NYXRoLmltdWwoQixvdCkpK01hdGguaW11bChOLGF0KXwwLGE9TWF0aC5pbXVsKE4sb3QpLG49bitNYXRoLmltdWwoUCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsY3QpfDApK01hdGguaW11bChSLGx0KXwwLGE9YStNYXRoLmltdWwoUixjdCl8MCxuPW4rTWF0aC5pbXVsKE8sZnQpfDAsaT0oaT1pK01hdGguaW11bChPLGh0KXwwKStNYXRoLmltdWwoSSxmdCl8MCxhPWErTWF0aC5pbXVsKEksaHQpfDA7dmFyIHp0PShjKyhuPW4rTWF0aC5pbXVsKEMsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChDLGd0KXwwKStNYXRoLmltdWwoTCxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChMLGd0KXwwKSsoaT4+PjEzKXwwKSsoenQ+Pj4yNil8MCx6dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixsdCksaT0oaT1NYXRoLmltdWwoQixjdCkpK01hdGguaW11bChOLGx0KXwwLGE9TWF0aC5pbXVsKE4sY3QpLG49bitNYXRoLmltdWwoUCxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsaHQpfDApK01hdGguaW11bChSLGZ0KXwwLGE9YStNYXRoLmltdWwoUixodCl8MDt2YXIgT3Q9KGMrKG49bitNYXRoLmltdWwoTyxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKE8sZ3QpfDApK01hdGguaW11bChJLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKEksZ3QpfDApKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGZ0KSxpPShpPU1hdGguaW11bChCLGh0KSkrTWF0aC5pbXVsKE4sZnQpfDAsYT1NYXRoLmltdWwoTixodCk7dmFyIEl0PShjKyhuPW4rTWF0aC5pbXVsKFAsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChQLGd0KXwwKStNYXRoLmltdWwoUixkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChSLGd0KXwwKSsoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjM7dmFyIER0PShjKyhuPU1hdGguaW11bChCLGR0KSl8MCkrKCg4MTkxJihpPShpPU1hdGguaW11bChCLGd0KSkrTWF0aC5pbXVsKE4sZHQpfDApKTw8MTMpfDA7cmV0dXJuIGM9KChhPU1hdGguaW11bChOLGd0KSkrKGk+Pj4xMyl8MCkrKER0Pj4+MjYpfDAsRHQmPTY3MTA4ODYzLGxbMF09dnQsbFsxXT1tdCxsWzJdPXl0LGxbM109eHQsbFs0XT1idCxsWzVdPV90LGxbNl09d3QsbFs3XT1rdCxsWzhdPVR0LGxbOV09QXQsbFsxMF09TXQsbFsxMV09U3QsbFsxMl09RXQsbFsxM109Q3QsbFsxNF09THQsbFsxNV09enQsbFsxNl09T3QsbFsxN109SXQsbFsxOF09RHQsMCE9PWMmJihsWzE5XT1jLHIubGVuZ3RoKyspLHJ9O2Z1bmN0aW9uIGQodCxlLHIpe3JldHVybihuZXcgZykubXVscCh0LGUscil9ZnVuY3Rpb24gZyh0LGUpe3RoaXMueD10LHRoaXMueT1lfU1hdGguaW11bHx8KHA9aCksYS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aCt0Lmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT10Lmxlbmd0aD9wKHRoaXMsdCxlKTpyPDYzP2godGhpcyx0LGUpOnI8MTAyND9mdW5jdGlvbih0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLGE9MDthPHIubGVuZ3RoLTE7YSsrKXt2YXIgbz1pO2k9MDtmb3IodmFyIHM9NjcxMDg4NjMmbixsPU1hdGgubWluKGEsZS5sZW5ndGgtMSksYz1NYXRoLm1heCgwLGEtdC5sZW5ndGgrMSk7Yzw9bDtjKyspe3ZhciB1PWEtYyxmPSgwfHQud29yZHNbdV0pKigwfGUud29yZHNbY10pLGg9NjcxMDg4NjMmZjtzPTY3MTA4ODYzJihoPWgrc3wwKSxpKz0obz0obz1vKyhmLzY3MTA4ODY0fDApfDApKyhoPj4+MjYpfDApPj4+MjYsbyY9NjcxMDg4NjN9ci53b3Jkc1thXT1zLG49byxvPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbYV09bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX0odGhpcyx0LGUpOmQodGhpcyx0LGUpfSxnLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj1hLnByb3RvdHlwZS5fY291bnRCaXRzKHQpLTEsbj0wO248dDtuKyspZVtuXT10aGlzLnJldkJpbihuLHIsdCk7cmV0dXJuIGV9LGcucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbih0LGUscil7aWYoMD09PXR8fHQ9PT1yLTEpcmV0dXJuIHQ7Zm9yKHZhciBuPTAsaT0wO2k8ZTtpKyspbnw9KDEmdCk8PGUtaS0xLHQ+Pj0xO3JldHVybiBufSxnLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPGE7bysrKW5bb109ZVt0W29dXSxpW29dPXJbdFtvXV19LGcucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5wZXJtdXRlKGEsdCxlLHIsbixpKTtmb3IodmFyIG89MTtvPGk7bzw8PTEpZm9yKHZhciBzPW88PDEsbD1NYXRoLmNvcygyKk1hdGguUEkvcyksYz1NYXRoLnNpbigyKk1hdGguUEkvcyksdT0wO3U8aTt1Kz1zKWZvcih2YXIgZj1sLGg9YyxwPTA7cDxvO3ArKyl7dmFyIGQ9clt1K3BdLGc9blt1K3BdLHY9clt1K3Arb10sbT1uW3UrcCtvXSx5PWYqdi1oKm07bT1mKm0raCp2LHY9eSxyW3UrcF09ZCt2LG5bdStwXT1nK20sclt1K3Arb109ZC12LG5bdStwK29dPWctbSxwIT09cyYmKHk9bCpmLWMqaCxoPWwqaCtjKmYsZj15KX19LGcucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MXxNYXRoLm1heChlLHQpLG49MSZyLGk9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStufSxnLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgaT10W25dO3Rbbl09dFtyLW4tMV0sdFtyLW4tMV09aSxpPWVbbl0sZVtuXT0tZVtyLW4tMV0sZVtyLW4tMV09LWl9fSxnLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTA7bjxlLzI7bisrKXt2YXIgaT04MTkyKk1hdGgucm91bmQodFsyKm4rMV0vZSkrTWF0aC5yb3VuZCh0WzIqbl0vZSkrcjt0W25dPTY3MTA4ODYzJmkscj1pPDY3MTA4ODY0PzA6aS82NzEwODg2NHwwfXJldHVybiB0fSxnLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgYT0wLG89MDtvPGU7bysrKWErPTB8dFtvXSxyWzIqb109ODE5MSZhLGE+Pj49MTMsclsyKm8rMV09ODE5MSZhLGE+Pj49MTM7Zm9yKG89MiplO288aTsrK28pcltvXT0wO24oMD09PWEpLG4oMD09KC04MTkyJmEpKX0sZy5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09MDtyZXR1cm4gZX0sZy5wcm90b3R5cGUubXVscD1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKHQubGVuZ3RoLGUubGVuZ3RoKSxpPXRoaXMubWFrZVJCVChuKSxhPXRoaXMuc3R1YihuKSxvPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxmPW5ldyBBcnJheShuKSxoPXIud29yZHM7aC5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IodC53b3Jkcyx0Lmxlbmd0aCxvLG4pLHRoaXMuY29udmVydDEzYihlLndvcmRzLGUubGVuZ3RoLGMsbiksdGhpcy50cmFuc2Zvcm0obyxhLHMsbCxuLGkpLHRoaXMudHJhbnNmb3JtKGMsYSx1LGYsbixpKTtmb3IodmFyIHA9MDtwPG47cCsrKXt2YXIgZD1zW3BdKnVbcF0tbFtwXSpmW3BdO2xbcF09c1twXSpmW3BdK2xbcF0qdVtwXSxzW3BdPWR9cmV0dXJuIHRoaXMuY29uanVnYXRlKHMsbCxuKSx0aGlzLnRyYW5zZm9ybShzLGwsaCxhLG4saSksdGhpcy5jb25qdWdhdGUoaCxhLG4pLHRoaXMubm9ybWFsaXplMTNiKGgsbiksci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGgsci5zdHJpcCgpfSxhLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGEobnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSx0aGlzLm11bFRvKHQsZSl9LGEucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGEobnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSxkKHRoaXMsdCxlKX0sYS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHQsdGhpcyl9LGEucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxhPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1hPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZhfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxhLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LGEucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sYS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sYS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfSh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBhKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LGEucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsYT02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBvPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHM9dGhpcy53b3Jkc1tlXSZhLGw9KDB8dGhpcy53b3Jkc1tlXSktczw8cjt0aGlzLndvcmRzW2VdPWx8byxvPXM+Pj4yNi1yfW8mJih0aGlzLndvcmRzW2VdPW8sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LGEucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7dmFyIGk7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApLGk9ZT8oZS1lJTI2KS8yNjowO3ZhciBhPXQlMjYsbz1NYXRoLm1pbigodC1hKS8yNix0aGlzLmxlbmd0aCkscz02NzEwODg2M142NzEwODg2Mz4+PmE8PGEsbD1yO2lmKGktPW8saT1NYXRoLm1heCgwLGkpLGwpe2Zvcih2YXIgYz0wO2M8bztjKyspbC53b3Jkc1tjXT10aGlzLndvcmRzW2NdO2wubGVuZ3RoPW99aWYoMD09PW8pO2Vsc2UgaWYodGhpcy5sZW5ndGg+bylmb3IodGhpcy5sZW5ndGgtPW8sYz0wO2M8dGhpcy5sZW5ndGg7YysrKXRoaXMud29yZHNbY109dGhpcy53b3Jkc1tjK29dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHU9MDtmb3IoYz10aGlzLmxlbmd0aC0xO2M+PTAmJigwIT09dXx8Yz49aSk7Yy0tKXt2YXIgZj0wfHRoaXMud29yZHNbY107dGhpcy53b3Jkc1tjXT11PDwyNi1hfGY+Pj5hLHU9ZiZzfXJldHVybiBsJiYwIT09dSYmKGwud29yZHNbbC5sZW5ndGgrK109dSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LGEucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sYS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LGEucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sYS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LGEucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO3JldHVybiEodGhpcy5sZW5ndGg8PXIpJiYhISh0aGlzLndvcmRzW3JdJmkpfSxhLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sYS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sYS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LGEucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LGEucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sYS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sYS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGEucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBzPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7YT0oMHx0aGlzLndvcmRzW2krcl0pK3M7dmFyIGw9KDB8dC53b3Jkc1tpXSkqZTtzPSgoYS09NjcxMDg4NjMmbCk+PjI2KS0obC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYX1mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspcz0oYT0oMHx0aGlzLndvcmRzW2krcl0pK3MpPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYTtpZigwPT09cylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKC0xPT09cykscz0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylzPShhPS0oMHx0aGlzLndvcmRzW2ldKStzKT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZhO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPSh0aGlzLmxlbmd0aCx0Lmxlbmd0aCksbj10aGlzLmNsb25lKCksaT10LG89MHxpLndvcmRzW2kubGVuZ3RoLTFdOzAhPT0ocj0yNi10aGlzLl9jb3VudEJpdHMobykpJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLG89MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyxsPW4ubGVuZ3RoLWkubGVuZ3RoO2lmKCJtb2QiIT09ZSl7KHM9bmV3IGEobnVsbCkpLmxlbmd0aD1sKzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgYz0wO2M8cy5sZW5ndGg7YysrKXMud29yZHNbY109MH12YXIgdT1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSxsKTswPT09dS5uZWdhdGl2ZSYmKG49dSxzJiYocy53b3Jkc1tsXT0xKSk7Zm9yKHZhciBmPWwtMTtmPj0wO2YtLSl7dmFyIGg9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtmXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtmLTFdKTtmb3IoaD1NYXRoLm1pbihoL298MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxoLGYpOzAhPT1uLm5lZ2F0aXZlOyloLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxmKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbZl09aCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksImRpdiIhPT1lJiYwIT09ciYmbi5pdXNocm4ocikse2RpdjpzfHxudWxsLG1vZDpufX0sYS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBhKDApLG1vZDpuZXcgYSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksIm1vZCIhPT1lJiYoaT1zLmRpdi5uZWcoKSksImRpdiIhPT1lJiYobz1zLm1vZC5uZWcoKSxyJiYwIT09by5uZWdhdGl2ZSYmby5pYWRkKHQpKSx7ZGl2OmksbW9kOm99KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmU/KHM9dGhpcy5kaXZtb2QodC5uZWcoKSxlKSwibW9kIiE9PWUmJihpPXMuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOnMubW9kfSk6MCE9KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KHM9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSwiZGl2IiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlzdWIodCkpLHtkaXY6cy5kaXYsbW9kOm99KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBhKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/ImRpdiI9PT1lP3tkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgYSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IGEodGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpO3ZhciBpLG8sc30sYS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJkaXYiLCExKS5kaXZ9LGEucHJvdG90eXBlLm1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwibW9kIiwhMSkubW9kfSxhLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJtb2QiLCEwKS5tb2R9LGEucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLGE9ci5jbXAobik7cmV0dXJuIGE8MHx8MT09PWkmJjA9PT1hP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sYS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxhLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LGEucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBhKDEpLG89bmV3IGEoMCkscz1uZXcgYSgwKSxsPW5ldyBhKDEpLGM9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK2M7Zm9yKHZhciB1PXIuY2xvbmUoKSxmPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgaD0wLHA9MTswPT0oZS53b3Jkc1swXSZwKSYmaDwyNjsrK2gscDw8PTEpO2lmKGg+MClmb3IoZS5pdXNocm4oaCk7aC0tID4wOykoaS5pc09kZCgpfHxvLmlzT2RkKCkpJiYoaS5pYWRkKHUpLG8uaXN1YihmKSksaS5pdXNocm4oMSksby5pdXNocm4oMSk7Zm9yKHZhciBkPTAsZz0xOzA9PShyLndvcmRzWzBdJmcpJiZkPDI2OysrZCxnPDw9MSk7aWYoZD4wKWZvcihyLml1c2hybihkKTtkLS0gPjA7KShzLmlzT2RkKCl8fGwuaXNPZGQoKSkmJihzLmlhZGQodSksbC5pc3ViKGYpKSxzLml1c2hybigxKSxsLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihzKSxvLmlzdWIobCkpOihyLmlzdWIoZSkscy5pc3ViKGkpLGwuaXN1YihvKSl9cmV0dXJue2E6cyxiOmwsZ2NkOnIuaXVzaGxuKGMpfX0sYS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaSxvPW5ldyBhKDEpLHM9bmV3IGEoMCksbD1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBjPTAsdT0xOzA9PShlLndvcmRzWzBdJnUpJiZjPDI2OysrYyx1PDw9MSk7aWYoYz4wKWZvcihlLml1c2hybihjKTtjLS0gPjA7KW8uaXNPZGQoKSYmby5pYWRkKGwpLG8uaXVzaHJuKDEpO2Zvcih2YXIgZj0wLGg9MTswPT0oci53b3Jkc1swXSZoKSYmZjwyNjsrK2YsaDw8PTEpO2lmKGY+MClmb3Ioci5pdXNocm4oZik7Zi0tID4wOylzLmlzT2RkKCkmJnMuaWFkZChsKSxzLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLG8uaXN1YihzKSk6KHIuaXN1YihlKSxzLmlzdWIobykpfXJldHVybihpPTA9PT1lLmNtcG4oMSk/bzpzKS5jbXBuKDApPDAmJmkuaWFkZCh0KSxpfSxhLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIGE9ZTtlPXIscj1hfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sYS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sYS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxhLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sYS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIGE9aSxvPXI7MCE9PWEmJm88dGhpcy5sZW5ndGg7bysrKXt2YXIgcz0wfHRoaXMud29yZHNbb107YT0ocys9YSk+Pj4yNixzJj02NzEwODg2Myx0aGlzLndvcmRzW29dPXN9cmV0dXJuIDAhPT1hJiYodGhpcy53b3Jkc1tvXT1hLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxhLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhcilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmcilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSllPTE7ZWxzZXtyJiYodD0tdCksbih0PD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgaT0wfHRoaXMud29yZHNbMF07ZT1pPT09dD8wOmk8dD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LGEucHJvdG90eXBlLmNtcD1mdW5jdGlvbih0KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBlPXRoaXMudWNtcCh0KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxhLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPnQubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHx0LndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0sYS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5ndD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wKHQpfSxhLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk+PTB9LGEucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk+PTB9LGEucHJvdG90eXBlLmx0bj1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcCh0KX0sYS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxhLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxhLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LGEucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdyh0KX0sYS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbigwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LGEucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxhLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30sYS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQodCl9LGEucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5tdWwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sYS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxhLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sYS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LGEucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCYmIXQucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgdj17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIG0odCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IGEoZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IGEoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHkoKXttLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24geCgpe20uY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7bS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIF8oKXttLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdyh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPWEuX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXQsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGsodCl7dy5jYWxsKHRoaXMsdCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgYSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1tLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxtLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkb3t0aGlzLnNwbGl0KHIsdGhpcy50bXApLGU9KHI9KHI9dGhpcy5pbXVsSyhyKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LG0ucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LG0ucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saSh5LG0pLHkucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLDkpLG49MDtuPHI7bisrKWUud29yZHNbbl09dC53b3Jkc1tuXTtpZihlLmxlbmd0aD1yLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgaT10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPTQxOTQzMDMmaSxuPTEwO248dC5sZW5ndGg7bisrKXt2YXIgYT0wfHQud29yZHNbbl07dC53b3Jkc1tuLTEwXT0oNDE5NDMwMyZhKTw8NHxpPj4+MjIsaT1hfWk+Pj49MjIsdC53b3Jkc1tuLTEwXT1pLDA9PT1pJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saSh4LG0pLGkoYixtKSxpKF8sbSksXy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxhLl9wcmltZT1mdW5jdGlvbih0KXtpZih2W3RdKXJldHVybiB2W3RdO3ZhciBlO2lmKCJrMjU2Ij09PXQpZT1uZXcgeTtlbHNlIGlmKCJwMjI0Ij09PXQpZT1uZXcgeDtlbHNlIGlmKCJwMTkyIj09PXQpZT1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09dCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit0KTtlPW5ldyBffXJldHVybiB2W3RdPWUsZX0sdy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHcucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHcucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSx3LnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sdy5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgYSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxvPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylvKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIHM9bmV3IGEoMSkudG9SZWQodGhpcyksbD1zLnJlZE5lZygpLGM9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHU9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih1PW5ldyBhKDIqdSp1KS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3codSxjKS5jbXAobCk7KXUucmVkSUFkZChsKTtmb3IodmFyIGY9dGhpcy5wb3codSxpKSxoPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSkscD10aGlzLnBvdyh0LGkpLGQ9bzswIT09cC5jbXAocyk7KXtmb3IodmFyIGc9cCx2PTA7MCE9PWcuY21wKHMpO3YrKylnPWcucmVkU3FyKCk7bih2PGQpO3ZhciBtPXRoaXMucG93KGYsbmV3IGEoMSkuaXVzaGxuKGQtdi0xKSk7aD1oLnJlZE11bChtKSxmPW0ucmVkU3FyKCkscD1wLnJlZE11bChmKSxkPXZ9cmV0dXJuIGh9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMSkudG9SZWQodGhpcyk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPW5ldyBBcnJheSgxNik7clswXT1uZXcgYSgxKS50b1JlZCh0aGlzKSxyWzFdPXQ7Zm9yKHZhciBuPTI7bjxyLmxlbmd0aDtuKyspcltuXT10aGlzLm11bChyW24tMV0sdCk7dmFyIGk9clswXSxvPTAscz0wLGw9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2Zvcih2YXIgYz1lLndvcmRzW25dLHU9bC0xO3U+PTA7dS0tKXt2YXIgZj1jPj51JjE7aSE9PXJbMF0mJihpPXRoaXMuc3FyKGkpKSwwIT09Znx8MCE9PW8/KG88PD0xLG98PWYsKDQ9PT0rK3N8fDA9PT1uJiYwPT09dSkmJihpPXRoaXMubXVsKGkscltvXSkscz0wLG89MCkpOnM9MH1sPTI2fXJldHVybiBpfSx3LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSx3LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sYS5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgayh0KX0saShrLHcpLGsucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxrLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0say5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBhKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxrLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KCJ1bmRlZmluZWQiPT10eXBlb2YgZXx8ZSx0aGlzKX0se2J1ZmZlcjo5M31dLDg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPTA7Zm9yKGU9MDtlPGk7KytlKWErPXRbZV0ubGVuZ3RoO3ZhciBvPW5ldyBBcnJheShhKSxzPTA7Zm9yKGU9MDtlPGk7KytlKXt2YXIgbD10W2VdLGM9bC5sZW5ndGg7Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1vW3MrK109bmV3IEFycmF5KGMtMSksZj0wO2ZvcihuPTA7bjxjOysrbiluIT09ciYmKHVbZisrXT1sW25dKTtpZigxJnIpe3ZhciBoPXVbMV07dVsxXT11WzBdLHVbMF09aH19fXJldHVybiBvfX0se31dLDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gbj1bXSxjKGk9dCxpLHUsITApLG47Y2FzZSAyOnJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2ModCx0LGUsITApOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG49W10sYyh0LGUsdSwhMSksbn0odCxlKTtjYXNlIDM6cmV0dXJuIGModCxlLHIsITEpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJib3gtaW50ZXJzZWN0OiBJbnZhbGlkIGFyZ3VtZW50cyIpfXZhciBpfTt2YXIgbixpPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgiLi9saWIvc3dlZXAiKSxvPXQoIi4vbGliL2ludGVyc2VjdCIpO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPHQ7KytyKWlmKCEoZVtyXTw9ZVtyK3RdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBsKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9MCxvPTAsbD10Lmxlbmd0aDtvPGw7KytvKXt2YXIgYz10W29dO2lmKCFzKGUsYykpe2Zvcih2YXIgdT0wO3U8MiplOysrdSlyW2krK109Y1t1XTtuW2ErK109b319cmV0dXJuIGF9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgcz10Lmxlbmd0aCxjPWUubGVuZ3RoO2lmKCEoczw9MHx8Yzw9MCkpe3ZhciB1PXRbMF0ubGVuZ3RoPj4+MTtpZighKHU8PTApKXt2YXIgZixoPWkubWFsbG9jRG91YmxlKDIqdSpzKSxwPWkubWFsbG9jSW50MzIocyk7aWYoKHM9bCh0LHUsaCxwKSk+MCl7aWYoMT09PXUmJm4pYS5pbml0KHMpLGY9YS5zd2VlcENvbXBsZXRlKHUsciwwLHMsaCxwLDAscyxoLHApO2Vsc2V7dmFyIGQ9aS5tYWxsb2NEb3VibGUoMip1KmMpLGc9aS5tYWxsb2NJbnQzMihjKTsoYz1sKGUsdSxkLGcpKT4wJiYoYS5pbml0KHMrYyksZj0xPT09dT9hLnN3ZWVwQmlwYXJ0aXRlKHUsciwwLHMsaCxwLDAsYyxkLGcpOm8odSxyLG4scyxoLHAsYyxkLGcpLGkuZnJlZShkKSxpLmZyZWUoZykpfWkuZnJlZShoKSxpLmZyZWUocCl9cmV0dXJuIGZ9fX1mdW5jdGlvbiB1KHQsZSl7bi5wdXNoKFt0LGVdKX19LHsiLi9saWIvaW50ZXJzZWN0Ijo4OCwiLi9saWIvc3dlZXAiOjkyLCJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPSJkIixpPSJheCIsYT0idnYiLG89ImZwIixzPSJlcyIsbD0icnMiLGM9InJlIix1PSJyYiIsZj0icmkiLGg9InJwIixwPSJicyIsZD0iYmUiLGc9ImJiIix2PSJiaSIsbT0iYnAiLHk9InJ2Iix4PSJRIixiPVtuLGksYSxsLGMsdSxmLHAsZCxnLHZdO2Z1bmN0aW9uIF8odCl7dmFyIGU9ImJydXRlRm9yY2UiKyh0PyJGdWxsIjoiUGFydGlhbCIpLHI9W10sXz1iLnNsaWNlKCk7dHx8Xy5zcGxpY2UoMywwLG8pO3ZhciB3PVsiZnVuY3Rpb24gIitlKyIoIitfLmpvaW4oKSsiKXsiXTtmdW5jdGlvbiBrKGUsbyl7dmFyIF89ZnVuY3Rpb24odCxlLHIpe3ZhciBvPSJicnV0ZUZvcmNlIisodD8iUmVkIjoiQmx1ZSIpKyhlPyJGbGlwIjoiIikrKHI/IkZ1bGwiOiIiKSxfPVsiZnVuY3Rpb24gIixvLCIoIixiLmpvaW4oKSwiKXsiLCJ2YXIgIixzLCI9MioiLG4sIjsiXSx3PSJmb3IodmFyIGk9IitsKyIsIitoKyI9IitzKyIqIitsKyI7aTwiK2MrIjsrK2ksIitoKyIrPSIrcysiKXt2YXIgeDA9Iit1KyJbIitpKyIrIitoKyJdLHgxPSIrdSsiWyIraSsiKyIraCsiKyIrbisiXSx4aT0iK2YrIltpXTsiLGs9ImZvcih2YXIgaj0iK3ArIiwiK20rIj0iK3MrIioiK3ArIjtqPCIrZCsiOysraiwiK20rIis9IitzKyIpe3ZhciB5MD0iK2crIlsiK2krIisiK20rIl0sIisocj8ieTE9IitnKyJbIitpKyIrIittKyIrIituKyJdLCI6IiIpKyJ5aT0iK3YrIltqXTsiO3JldHVybiB0P18ucHVzaCh3LHgsIjoiLGspOl8ucHVzaChrLHgsIjoiLHcpLHI/Xy5wdXNoKCJpZih5MTx4MHx8eDE8eTApY29udGludWU7Iik6ZT9fLnB1c2goImlmKHkwPD14MHx8eDE8eTApY29udGludWU7Iik6Xy5wdXNoKCJpZih5MDx4MHx8eDE8eTApY29udGludWU7IiksXy5wdXNoKCJmb3IodmFyIGs9IitpKyIrMTtrPCIrbisiOysrayl7dmFyIHIwPSIrdSsiW2srIitoKyJdLHIxPSIrdSsiW2srIituKyIrIitoKyJdLGIwPSIrZysiW2srIittKyJdLGIxPSIrZysiW2srIituKyIrIittKyJdO2lmKHIxPGIwfHxiMTxyMCljb250aW51ZSAiK3grIjt9dmFyICIreSsiPSIrYSsiKCIpLGU/Xy5wdXNoKCJ5aSx4aSIpOl8ucHVzaCgieGkseWkiKSxfLnB1c2goIik7aWYoIit5KyIhPT12b2lkIDApcmV0dXJuICIreSsiO319fSIpLHtuYW1lOm8sY29kZTpfLmpvaW4oIiIpfX0oZSxvLHQpO3IucHVzaChfLmNvZGUpLHcucHVzaCgicmV0dXJuICIrXy5uYW1lKyIoIitiLmpvaW4oKSsiKTsiKX13LnB1c2goImlmKCIrYysiLSIrbCsiPiIrZCsiLSIrcCsiKXsiKSx0PyhrKCEwLCExKSx3LnB1c2goIn1lbHNleyIpLGsoITEsITEpKToody5wdXNoKCJpZigiK28rIil7IiksayghMCwhMCksdy5wdXNoKCJ9ZWxzZXsiKSxrKCEwLCExKSx3LnB1c2goIn19ZWxzZXtpZigiK28rIil7IiksayghMSwhMCksdy5wdXNoKCJ9ZWxzZXsiKSxrKCExLCExKSx3LnB1c2goIn0iKSksdy5wdXNoKCJ9fXJldHVybiAiK2UpO3ZhciBUPXIuam9pbigiIikrdy5qb2luKCIiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFQpKCl9ci5wYXJ0aWFsPV8oITEpLHIuZnVsbD1fKCEwKX0se31dLDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHUsUyxFLEMsTCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9OCppLmxvZzIoZSsxKSoodCsxKXwwLGE9aS5uZXh0UG93MihiKnIpO3cubGVuZ3RoPGEmJihuLmZyZWUodyksdz1uLm1hbGxvY0ludDMyKGEpKTt2YXIgbz1pLm5leHRQb3cyKF8qcik7azxvJiYobi5mcmVlKGspLGs9bi5tYWxsb2NEb3VibGUobykpfSh0LGErRSk7dmFyIHosTz0wLEk9Mip0O1QoTysrLDAsMCxhLDAsRSxyPzE2OjAsLTEvMCwxLzApLHJ8fFQoTysrLDAsMCxFLDAsYSwxLC0xLzAsMS8wKTtmb3IoO08+MDspe3ZhciBEPShPLT0xKSpiLFA9d1tEXSxSPXdbRCsxXSxGPXdbRCsyXSxCPXdbRCszXSxOPXdbRCs0XSxqPXdbRCs1XSxWPU8qXyxVPWtbVl0scT1rW1YrMV0sSD0xJmosRz0hISgxNiZqKSxZPXUsVz1TLFg9QyxaPUw7aWYoSCYmKFk9QyxXPUwsWD11LFo9UyksISgyJmomJihGPXYodCxQLFIsRixZLFcscSksUj49Ril8fDQmaiYmKFI9bSh0LFAsUixGLFksVyxVKSk+PUYpKXt2YXIgJD1GLVIsSj1OLUI7aWYoRyl7aWYodCokKigkK0opPHApe2lmKHZvaWQgMCE9PSh6PWwuc2NhbkNvbXBsZXRlKHQsUCxlLFIsRixZLFcsQixOLFgsWikpKXJldHVybiB6O2NvbnRpbnVlfX1lbHNle2lmKHQqTWF0aC5taW4oJCxKKTxmKXtpZih2b2lkIDAhPT0oej1vKHQsUCxlLEgsUixGLFksVyxCLE4sWCxaKSkpcmV0dXJuIHo7Y29udGludWV9aWYodCokKko8aCl7aWYodm9pZCAwIT09KHo9bC5zY2FuQmlwYXJ0aXRlKHQsUCxlLEgsUixGLFksVyxCLE4sWCxaKSkpcmV0dXJuIHo7Y29udGludWV9fXZhciBLPWQodCxQLFIsRixZLFcsVSxxKTtpZihSPEspaWYodCooSy1SKTxmKXtpZih2b2lkIDAhPT0oej1zKHQsUCsxLGUsUixLLFksVyxCLE4sWCxaKSkpcmV0dXJuIHp9ZWxzZSBpZihQPT09dC0yKXtpZih2b2lkIDAhPT0oej1IP2wuc3dlZXBCaXBhcnRpdGUodCxlLEIsTixYLFosUixLLFksVyk6bC5zd2VlcEJpcGFydGl0ZSh0LGUsUixLLFksVyxCLE4sWCxaKSkpcmV0dXJuIHp9ZWxzZSBUKE8rKyxQKzEsUixLLEIsTixILC0xLzAsMS8wKSxUKE8rKyxQKzEsQixOLFIsSywxXkgsLTEvMCwxLzApO2lmKEs8Ril7dmFyIFE9Yyh0LFAsQixOLFgsWiksdHQ9WFtJKlErUF0sZXQ9Zyh0LFAsUSxOLFgsWix0dCk7aWYoZXQ8TiYmVChPKyssUCxLLEYsZXQsTiwoNHxIKSsoRz8xNjowKSx0dCxxKSxCPFEmJlQoTysrLFAsSyxGLEIsUSwoMnxIKSsoRz8xNjowKSxVLHR0KSxRKzE9PT1ldCl7aWYodm9pZCAwIT09KHo9Rz9NKHQsUCxlLEssRixZLFcsUSxYLFpbUV0pOkEodCxQLGUsSCxLLEYsWSxXLFEsWCxaW1FdKSkpcmV0dXJuIHp9ZWxzZSBpZihRPGV0KXt2YXIgcnQ7aWYoRyl7aWYocnQ9eSh0LFAsSyxGLFksVyx0dCksSzxydCl7dmFyIG50PWcodCxQLEsscnQsWSxXLHR0KTtpZihQPT09dC0yKXtpZihLPG50JiZ2b2lkIDAhPT0oej1sLnN3ZWVwQ29tcGxldGUodCxlLEssbnQsWSxXLFEsZXQsWCxaKSkpcmV0dXJuIHo7aWYobnQ8cnQmJnZvaWQgMCE9PSh6PWwuc3dlZXBCaXBhcnRpdGUodCxlLG50LHJ0LFksVyxRLGV0LFgsWikpKXJldHVybiB6fWVsc2UgSzxudCYmVChPKyssUCsxLEssbnQsUSxldCwxNiwtMS8wLDEvMCksbnQ8cnQmJihUKE8rKyxQKzEsbnQscnQsUSxldCwwLC0xLzAsMS8wKSxUKE8rKyxQKzEsUSxldCxudCxydCwxLC0xLzAsMS8wKSl9fWVsc2UgcnQ9SD94KHQsUCxLLEYsWSxXLHR0KTp5KHQsUCxLLEYsWSxXLHR0KSxLPHJ0JiYoUD09PXQtMj96PUg/bC5zd2VlcEJpcGFydGl0ZSh0LGUsUSxldCxYLFosSyxydCxZLFcpOmwuc3dlZXBCaXBhcnRpdGUodCxlLEsscnQsWSxXLFEsZXQsWCxaKTooVChPKyssUCsxLEsscnQsUSxldCxILC0xLzAsMS8wKSxUKE8rKyxQKzEsUSxldCxLLHJ0LDFeSCwtMS8wLDEvMCkpKX19fX19O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoIi4vYnJ1dGUiKSxvPWEucGFydGlhbCxzPWEuZnVsbCxsPXQoIi4vc3dlZXAiKSxjPXQoIi4vbWVkaWFuIiksdT10KCIuL3BhcnRpdGlvbiIpLGY9MTI4LGg9MTw8MjIscD0xPDwyMixkPXUoIiEobG8+PXAwKSYmIShwMT49aGkpIixbInAwIiwicDEiXSksZz11KCJsbz09PXAwIixbInAwIl0pLHY9dSgibG88cDAiLFsicDAiXSksbT11KCJoaTw9cDAiLFsicDAiXSkseT11KCJsbzw9cDAmJnAwPD1oaSIsWyJwMCJdKSx4PXUoImxvPHAwJiZwMDw9aGkiLFsicDAiXSksYj02LF89Mix3PW4ubWFsbG9jSW50MzIoMTAyNCksaz1uLm1hbGxvY0RvdWJsZSgxMDI0KTtmdW5jdGlvbiBUKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1iKnQ7d1tjXT1lLHdbYysxXT1yLHdbYysyXT1uLHdbYyszXT1pLHdbYys0XT1hLHdbYys1XT1vO3ZhciB1PV8qdDtrW3VdPXMsa1t1KzFdPWx9ZnVuY3Rpb24gQSh0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPTIqdCxoPWwqZixwPWNbaCtlXTt0OmZvcih2YXIgZD1pLGc9aSpmO2Q8YTsrK2QsZys9Zil7dmFyIHY9b1tnK2VdLG09b1tnK2UrdF07aWYoIShwPHZ8fG08cCkmJighbnx8cCE9PXYpKXtmb3IodmFyIHkseD1zW2RdLGI9ZSsxO2I8dDsrK2Ipe3Y9b1tnK2JdLG09b1tnK2IrdF07dmFyIF89Y1toK2JdLHc9Y1toK2IrdF07aWYobTxffHx3PHYpY29udGludWUgdH1pZih2b2lkIDAhPT0oeT1uP3IodSx4KTpyKHgsdSkpKXJldHVybiB5fX19ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT0yKnQsZj1zKnUsaD1sW2YrZV07dDpmb3IodmFyIHA9bixkPW4qdTtwPGk7KytwLGQrPXUpe3ZhciBnPW9bcF07aWYoZyE9PWMpe3ZhciB2PWFbZCtlXSxtPWFbZCtlK3RdO2lmKCEoaDx2fHxtPGgpKXtmb3IodmFyIHk9ZSsxO3k8dDsrK3kpe3Y9YVtkK3ldLG09YVtkK3krdF07dmFyIHg9bFtmK3ldLGI9bFtmK3krdF07aWYobTx4fHxiPHYpY29udGludWUgdH12YXIgXz1yKGcsYyk7aWYodm9pZCAwIT09XylyZXR1cm4gX319fX19LHsiLi9icnV0ZSI6ODcsIi4vbWVkaWFuIjo4OSwiLi9wYXJ0aXRpb24iOjkwLCIuL3N3ZWVwIjo5MiwiYml0LXR3aWRkbGUiOjgyLCJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7aWYobzw9cisxKXJldHVybiByO3ZhciBjPXIsdT1vLGY9bytyPj4+MSxoPTIqdCxwPWYsZD1zW2gqZitlXTtmb3IoO2M8dTspe2lmKHUtYzxpKXthKHQsZSxjLHUscyxsKSxkPXNbaCpmK2VdO2JyZWFrfXZhciBnPXUtYyx2PU1hdGgucmFuZG9tKCkqZytjfDAsbT1zW2gqditlXSx5PU1hdGgucmFuZG9tKCkqZytjfDAseD1zW2gqeStlXSxiPU1hdGgucmFuZG9tKCkqZytjfDAsXz1zW2gqYitlXTttPD14P18+PXg/KHA9eSxkPXgpOm0+PV8/KHA9dixkPW0pOihwPWIsZD1fKTp4Pj1fPyhwPXksZD14KTpfPj1tPyhwPXYsZD1tKToocD1iLGQ9Xyk7Zm9yKHZhciB3PWgqKHUtMSksaz1oKnAsVD0wO1Q8aDsrK1QsKyt3LCsrayl7dmFyIEE9c1t3XTtzW3ddPXNba10sc1trXT1BfXZhciBNPWxbdS0xXTtsW3UtMV09bFtwXSxsW3BdPU0scD1uKHQsZSxjLHUtMSxzLGwsZCk7Zm9yKHZhciB3PWgqKHUtMSksaz1oKnAsVD0wO1Q8aDsrK1QsKyt3LCsrayl7dmFyIEE9c1t3XTtzW3ddPXNba10sc1trXT1BfXZhciBNPWxbdS0xXTtpZihsW3UtMV09bFtwXSxsW3BdPU0sZjxwKXtmb3IodT1wLTE7Yzx1JiZzW2gqKHUtMSkrZV09PT1kOyl1LT0xO3UrPTF9ZWxzZXtpZighKHA8ZikpYnJlYWs7Zm9yKGM9cCsxO2M8dSYmc1toKmMrZV09PT1kOyljKz0xfX1yZXR1cm4gbih0LGUscixmLHMsbCxzW2gqZitlXSl9O3ZhciBuPXQoIi4vcGFydGl0aW9uIikoImxvPHAwIixbInAwIl0pLGk9ODtmdW5jdGlvbiBhKHQsZSxyLG4saSxhKXtmb3IodmFyIG89Mip0LHM9byoocisxKStlLGw9cisxO2w8bjsrK2wscys9bylmb3IodmFyIGM9aVtzXSx1PWwsZj1vKihsLTEpO3U+ciYmaVtmK2VdPmM7LS11LGYtPW8pe2Zvcih2YXIgaD1mLHA9ZitvLGQ9MDtkPG87KytkLCsraCwrK3Ape3ZhciBnPWlbaF07aVtoXT1pW3BdLGlbcF09Z312YXIgdj1hW3VdO2FbdV09YVt1LTFdLGFbdS0xXT12fX19LHsiLi9wYXJ0aXRpb24iOjkwfV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ImFiY2RlZiIuc3BsaXQoIiIpLmNvbmNhdChlKSxpPVtdO3QuaW5kZXhPZigibG8iKT49MCYmaS5wdXNoKCJsbz1lW2srbl0iKTt0LmluZGV4T2YoImhpIik+PTAmJmkucHVzaCgiaGk9ZVtrK29dIik7cmV0dXJuIHIucHVzaChuLnJlcGxhY2UoIl8iLGkuam9pbigpKS5yZXBsYWNlKCIkIix0KSksRnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpfTt2YXIgbj0iZm9yKHZhciBqPTIqYSxrPWoqYyxsPWssbT1jLG49YixvPWErYixwPWM7ZD5wOysrcCxrKz1qKXt2YXIgXztpZigkKWlmKG09PT1wKW0rPTEsbCs9ajtlbHNle2Zvcih2YXIgcz0wO2o+czsrK3Mpe3ZhciB0PWVbaytzXTtlW2src109ZVtsXSxlW2wrK109dH12YXIgdT1mW3BdO2ZbcF09ZlttXSxmW20rK109dX19cmV0dXJuIG0ifSx7fV0sOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZTw9NCpuP2koMCxlLTEsdCk6ZnVuY3Rpb24gdChlLHIsZil7dmFyIGg9KHItZSsxKS82fDAscD1lK2gsZD1yLWgsZz1lK3I+PjEsdj1nLWgsbT1nK2gseT1wLHg9dixiPWcsXz1tLHc9ZCxrPWUrMSxUPXItMSxBPTA7Yyh5LHgsZikmJihBPXkseT14LHg9QSk7YyhfLHcsZikmJihBPV8sXz13LHc9QSk7Yyh5LGIsZikmJihBPXkseT1iLGI9QSk7Yyh4LGIsZikmJihBPXgseD1iLGI9QSk7Yyh5LF8sZikmJihBPXkseT1fLF89QSk7YyhiLF8sZikmJihBPWIsYj1fLF89QSk7Yyh4LHcsZikmJihBPXgseD13LHc9QSk7Yyh4LGIsZikmJihBPXgseD1iLGI9QSk7YyhfLHcsZikmJihBPV8sXz13LHc9QSk7dmFyIE09ZlsyKnhdO3ZhciBTPWZbMip4KzFdO3ZhciBFPWZbMipfXTt2YXIgQz1mWzIqXysxXTt2YXIgTD0yKnk7dmFyIHo9MipiO3ZhciBPPTIqdzt2YXIgST0yKnA7dmFyIEQ9MipnO3ZhciBQPTIqZDtmb3IodmFyIFI9MDtSPDI7KytSKXt2YXIgRj1mW0wrUl0sQj1mW3orUl0sTj1mW08rUl07ZltJK1JdPUYsZltEK1JdPUIsZltQK1JdPU59byh2LGUsZik7byhtLHIsZik7Zm9yKHZhciBqPWs7ajw9VDsrK2opaWYodShqLE0sUyxmKSlqIT09ayYmYShqLGssZiksKytrO2Vsc2UgaWYoIXUoaixFLEMsZikpZm9yKDs7KXtpZih1KFQsRSxDLGYpKXt1KFQsTSxTLGYpPyhzKGosayxULGYpLCsraywtLVQpOihhKGosVCxmKSwtLVQpO2JyZWFrfWlmKC0tVDxqKWJyZWFrfWwoZSxrLTEsTSxTLGYpO2wocixUKzEsRSxDLGYpO2stMi1lPD1uP2koZSxrLTIsZik6dChlLGstMixmKTtyLShUKzIpPD1uP2koVCsyLHIsZik6dChUKzIscixmKTtULWs8PW4/aShrLFQsZik6dChrLFQsZil9KDAsZS0xLHQpfTt2YXIgbj0zMjtmdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49MioodCsxKSxpPXQrMTtpPD1lOysraSl7Zm9yKHZhciBhPXJbbisrXSxvPXJbbisrXSxzPWksbD1uLTI7cy0tID50Oyl7dmFyIGM9cltsLTJdLHU9cltsLTFdO2lmKGM8YSlicmVhaztpZihjPT09YSYmdTxvKWJyZWFrO3JbbF09YyxyW2wrMV09dSxsLT0yfXJbbF09YSxyW2wrMV09b319ZnVuY3Rpb24gYSh0LGUscil7ZSo9Mjt2YXIgbj1yW3QqPTJdLGk9clt0KzFdO3JbdF09cltlXSxyW3QrMV09cltlKzFdLHJbZV09bixyW2UrMV09aX1mdW5jdGlvbiBvKHQsZSxyKXtlKj0yLHJbdCo9Ml09cltlXSxyW3QrMV09cltlKzFdfWZ1bmN0aW9uIHModCxlLHIsbil7ZSo9MixyKj0yO3ZhciBpPW5bdCo9Ml0sYT1uW3QrMV07blt0XT1uW2VdLG5bdCsxXT1uW2UrMV0sbltlXT1uW3JdLG5bZSsxXT1uW3IrMV0sbltyXT1pLG5bcisxXT1hfWZ1bmN0aW9uIGwodCxlLHIsbixpKXtlKj0yLGlbdCo9Ml09aVtlXSxpW2VdPXIsaVt0KzFdPWlbZSsxXSxpW2UrMV09bn1mdW5jdGlvbiBjKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0saT1yW2VdO3JldHVybiEobjxpKSYmKG4hPT1pfHxyW3QrMV0+cltlKzFdKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPW5bdCo9Ml07cmV0dXJuIGk8ZXx8aT09PWUmJm5bdCsxXTxyfX0se31dLDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT1pLm5leHRQb3cyKHQpO3MubGVuZ3RoPGUmJihuLmZyZWUocykscz1uLm1hbGxvY0ludDMyKGUpKTtsLmxlbmd0aDxlJiYobi5mcmVlKGwpLGw9bi5tYWxsb2NJbnQzMihlKSk7Yy5sZW5ndGg8ZSYmKG4uZnJlZShjKSxjPW4ubWFsbG9jSW50MzIoZSkpO3UubGVuZ3RoPGUmJihuLmZyZWUodSksdT1uLm1hbGxvY0ludDMyKGUpKTtmLmxlbmd0aDxlJiYobi5mcmVlKGYpLGY9bi5tYWxsb2NJbnQzMihlKSk7aC5sZW5ndGg8ZSYmKG4uZnJlZShoKSxoPW4ubWFsbG9jSW50MzIoZSkpO3ZhciByPTgqZTtwLmxlbmd0aDxyJiYobi5mcmVlKHApLHA9bi5tYWxsb2NEb3VibGUocikpfSxzd2VlcEJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksZixoLHYsbSx5KXtmb3IodmFyIHg9MCxiPTIqdCxfPXQtMSx3PWItMSxrPXI7azxuOysrayl7dmFyIFQ9ZltrXSxBPWIqaztwW3grK109aVtBK19dLHBbeCsrXT0tKFQrMSkscFt4KytdPWlbQSt3XSxwW3grK109VH1mb3IodmFyIGs9aDtrPHY7KytrKXt2YXIgVD15W2tdK28sTT1iKms7cFt4KytdPW1bTStfXSxwW3grK109LVQscFt4KytdPW1bTSt3XSxwW3grK109VH12YXIgUz14Pj4+MTthKHAsUyk7Zm9yKHZhciBFPTAsQz0wLGs9MDtrPFM7KytrKXt2YXIgTD0wfHBbMiprKzFdO2lmKEw+PW8pZChjLHUsQy0tLEw9TC1vfDApO2Vsc2UgaWYoTD49MClkKHMsbCxFLS0sTCk7ZWxzZSBpZihMPD0tbyl7TD0tTC1vfDA7Zm9yKHZhciB6PTA7ejxFOysreil7dmFyIE89ZShzW3pdLEwpO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE99ZyhjLHUsQysrLEwpfWVsc2V7TD0tTC0xfDA7Zm9yKHZhciB6PTA7ejxDOysreil7dmFyIE89ZShMLGNbel0pO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE99ZyhzLGwsRSsrLEwpfX19LHN3ZWVwQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLG8sdixtLHkseCl7Zm9yKHZhciBiPTAsXz0yKnQsdz10LTEsaz1fLTEsVD1yO1Q8bjsrK1Qpe3ZhciBBPW9bVF0rMTw8MSxNPV8qVDtwW2IrK109aVtNK3ddLHBbYisrXT0tQSxwW2IrK109aVtNK2tdLHBbYisrXT1BfWZvcih2YXIgVD12O1Q8bTsrK1Qpe3ZhciBBPXhbVF0rMTw8MSxTPV8qVDtwW2IrK109eVtTK3ddLHBbYisrXT0xfC1BLHBbYisrXT15W1Mra10scFtiKytdPTF8QX12YXIgRT1iPj4+MTthKHAsRSk7Zm9yKHZhciBDPTAsTD0wLHo9MCxUPTA7VDxFOysrVCl7dmFyIE89MHxwWzIqVCsxXSxJPTEmTztpZihUPEUtMSYmTz4+MT09cFsyKlQrM10+PjEmJihJPTIsVCs9MSksTzwwKXtmb3IodmFyIEQ9LShPPj4xKS0xLFA9MDtQPHo7KytQKXt2YXIgUj1lKGZbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigwIT09SSlmb3IodmFyIFA9MDtQPEM7KytQKXt2YXIgUj1lKHNbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigxIT09SSlmb3IodmFyIFA9MDtQPEw7KytQKXt2YXIgUj1lKGNbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn0wPT09ST9nKHMsbCxDKyssRCk6MT09PUk/ZyhjLHUsTCsrLEQpOjI9PT1JJiZnKGYsaCx6KyssRCl9ZWxzZXt2YXIgRD0oTz4+MSktMTswPT09ST9kKHMsbCxDLS0sRCk6MT09PUk/ZChjLHUsTC0tLEQpOjI9PT1JJiZkKGYsaCx6LS0sRCl9fX0sc2NhbkJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksYyx1LGYsaCx2LG0seSl7dmFyIHg9MCxiPTIqdCxfPWUsdz1lK3Qsaz0xLFQ9MTtuP1Q9bzprPW87Zm9yKHZhciBBPWk7QTxjOysrQSl7dmFyIE09QStrLFM9YipBO3BbeCsrXT11W1MrX10scFt4KytdPS1NLHBbeCsrXT11W1Mrd10scFt4KytdPU19Zm9yKHZhciBBPWg7QTx2OysrQSl7dmFyIE09QStULEU9YipBO3BbeCsrXT1tW0UrX10scFt4KytdPS1NfXZhciBDPXg+Pj4xO2EocCxDKTtmb3IodmFyIEw9MCxBPTA7QTxDOysrQSl7dmFyIHo9MHxwWzIqQSsxXTtpZih6PDApe3ZhciBNPS16LE89ITE7aWYoTT49bz8oTz0hbixNLT1vKTooTz0hIW4sTS09MSksTylnKHMsbCxMKyssTSk7ZWxzZXt2YXIgST15W01dLEQ9YipNLFA9bVtEK2UrMV0sUj1tW0QrZSsxK3RdO3Q6Zm9yKHZhciBGPTA7RjxMOysrRil7dmFyIEI9c1tGXSxOPWIqQjtpZighKFI8dVtOK2UrMV18fHVbTitlKzErdF08UCkpe2Zvcih2YXIgaj1lKzI7ajx0OysrailpZihtW0Qrait0XTx1W04ral18fHVbTitqK3RdPG1bRCtqXSljb250aW51ZSB0O3ZhciBWLFU9ZltCXTtpZih2b2lkIDAhPT0oVj1uP3IoSSxVKTpyKFUsSSkpKXJldHVybiBWfX19fWVsc2UgZChzLGwsTC0tLHotayl9fSxzY2FuQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLGwsYyx1LGYsaCxkKXtmb3IodmFyIGc9MCx2PTIqdCxtPWUseT1lK3QseD1uO3g8aTsrK3gpe3ZhciBiPXgrbyxfPXYqeDtwW2crK109bFtfK21dLHBbZysrXT0tYixwW2crK109bFtfK3ldLHBbZysrXT1ifWZvcih2YXIgeD11O3g8ZjsrK3gpe3ZhciBiPXgrMSx3PXYqeDtwW2crK109aFt3K21dLHBbZysrXT0tYn12YXIgaz1nPj4+MTthKHAsayk7Zm9yKHZhciBUPTAseD0wO3g8azsrK3gpe3ZhciBBPTB8cFsyKngrMV07aWYoQTwwKXt2YXIgYj0tQTtpZihiPj1vKXNbVCsrXT1iLW87ZWxzZXt2YXIgTT1kW2ItPTFdLFM9dipiLEU9aFtTK2UrMV0sQz1oW1MrZSsxK3RdO3Q6Zm9yKHZhciBMPTA7TDxUOysrTCl7dmFyIHo9c1tMXSxPPWNbel07aWYoTz09PU0pYnJlYWs7dmFyIEk9dip6O2lmKCEoQzxsW0krZSsxXXx8bFtJK2UrMSt0XTxFKSl7Zm9yKHZhciBEPWUrMjtEPHQ7KytEKWlmKGhbUytEK3RdPGxbSStEXXx8bFtJK0QrdF08aFtTK0RdKWNvbnRpbnVlIHQ7dmFyIFA9cihPLE0pO2lmKHZvaWQgMCE9PVApcmV0dXJuIFB9fX19ZWxzZXtmb3IodmFyIGI9QS1vLEw9VC0xO0w+PTA7LS1MKWlmKHNbTF09PT1iKXtmb3IodmFyIEQ9TCsxO0Q8VDsrK0Qpc1tELTFdPXNbRF07YnJlYWt9LS1UfX19fTt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoImJpdC10d2lkZGxlIiksYT10KCIuL3NvcnQiKSxvPTE8PDI4LHM9bi5tYWxsb2NJbnQzMigxMDI0KSxsPW4ubWFsbG9jSW50MzIoMTAyNCksYz1uLm1hbGxvY0ludDMyKDEwMjQpLHU9bi5tYWxsb2NJbnQzMigxMDI0KSxmPW4ubWFsbG9jSW50MzIoMTAyNCksaD1uLm1hbGxvY0ludDMyKDEwMjQpLHA9bi5tYWxsb2NEb3VibGUoODE5Mik7ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1lW25dLGE9dFtyLTFdO3RbaV09YSxlW2FdPWl9ZnVuY3Rpb24gZyh0LGUscixuKXt0W3JdPW4sZVtuXT1yfX0seyIuL3NvcnQiOjkxLCJiaXQtdHdpZGRsZSI6ODIsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sOTM6W2Z1bmN0aW9uKHQsZSxyKXt9LHt9XSw5NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZS5wcm90b3R5cGU9dCxuZXcgZX0saT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gcn0sYT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fTtmdW5jdGlvbiBvKCl7dGhpcy5fZXZlbnRzJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcywiX2V2ZW50cyIpfHwodGhpcy5fZXZlbnRzPW4obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfWUuZXhwb3J0cz1vLG8uRXZlbnRFbWl0dGVyPW8sby5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsby5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIHMsbD0xMDt0cnl7dmFyIGM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYywieCIse3ZhbHVlOjB9KSxzPTA9PT1jLnh9Y2F0Y2godCl7cz0hMX1mdW5jdGlvbiB1KHQpe3JldHVybiB2b2lkIDA9PT10Ll9tYXhMaXN0ZW5lcnM/by5kZWZhdWx0TWF4TGlzdGVuZXJzOnQuX21heExpc3RlbmVyc31mdW5jdGlvbiBmKHQsZSxyLGkpe3ZhciBhLG8scztpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKChvPXQuX2V2ZW50cyk/KG8ubmV3TGlzdGVuZXImJih0LmVtaXQoIm5ld0xpc3RlbmVyIixlLHIubGlzdGVuZXI/ci5saXN0ZW5lcjpyKSxvPXQuX2V2ZW50cykscz1vW2VdKToobz10Ll9ldmVudHM9bihudWxsKSx0Ll9ldmVudHNDb3VudD0wKSxzKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcz9zPW9bZV09aT9bcixzXTpbcyxyXTppP3MudW5zaGlmdChyKTpzLnB1c2gociksIXMud2FybmVkJiYoYT11KHQpKSYmYT4wJiZzLmxlbmd0aD5hKXtzLndhcm5lZD0hMDt2YXIgbD1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitzLmxlbmd0aCsnICInK1N0cmluZyhlKSsnIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicpO2wubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixsLmVtaXR0ZXI9dCxsLnR5cGU9ZSxsLmNvdW50PXMubGVuZ3RoLCJvYmplY3QiPT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIiVzOiAlcyIsbC5uYW1lLGwubWVzc2FnZSl9fWVsc2Ugcz1vW2VdPXIsKyt0Ll9ldmVudHNDb3VudDtyZXR1cm4gdH1mdW5jdGlvbiBoKCl7aWYoIXRoaXMuZmlyZWQpc3dpdGNoKHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCxhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7Y2FzZSAxOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQsYXJndW1lbnRzWzBdKTtjYXNlIDI6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTtjYXNlIDM6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7ZGVmYXVsdDpmb3IodmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdPWFyZ3VtZW50c1tlXTt0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LHQpfX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6dCx0eXBlOmUsbGlzdGVuZXI6cn0saT1hLmNhbGwoaCxuKTtyZXR1cm4gaS5saXN0ZW5lcj1yLG4ud3JhcEZuPWksaX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj10Ll9ldmVudHM7aWYoIW4pcmV0dXJuW107dmFyIGk9bltlXTtyZXR1cm4gaT8iZnVuY3Rpb24iPT10eXBlb2YgaT9yP1tpLmxpc3RlbmVyfHxpXTpbaV06cj9mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT10W3JdLmxpc3RlbmVyfHx0W3JdO3JldHVybiBlfShpKTp2KGksaS5sZW5ndGgpOltdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dGhpcy5fZXZlbnRzO2lmKGUpe3ZhciByPWVbdF07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIDE7aWYocilyZXR1cm4gci5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gdih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dO3JldHVybiByfXM/T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXQ6ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQhPXQpdGhyb3cgbmV3IFR5cGVFcnJvcignImRlZmF1bHRNYXhMaXN0ZW5lcnMiIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtsPXR9fSk6by5kZWZhdWx0TWF4TGlzdGVuZXJzPWwsby5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHxpc05hTih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibiIgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxvLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKX0sby5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz0iZXJyb3IiPT09dDtpZihvPXRoaXMuX2V2ZW50cylzPXMmJm51bGw9PW8uZXJyb3I7ZWxzZSBpZighcylyZXR1cm4hMTtpZihzKXtpZihhcmd1bWVudHMubGVuZ3RoPjEmJihlPWFyZ3VtZW50c1sxXSksZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGU7dmFyIGw9bmV3IEVycm9yKCdVbmhhbmRsZWQgImVycm9yIiBldmVudC4gKCcrZSsiKSIpO3Rocm93IGwuY29udGV4dD1lLGx9aWYoIShyPW9bdF0pKXJldHVybiExO3ZhciBjPSJmdW5jdGlvbiI9PXR5cGVvZiByO3N3aXRjaChuPWFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTohZnVuY3Rpb24odCxlLHIpe2lmKGUpdC5jYWxsKHIpO2Vsc2UgZm9yKHZhciBuPXQubGVuZ3RoLGk9dih0LG4pLGE9MDthPG47KythKWlbYV0uY2FsbChyKX0ocixjLHRoaXMpO2JyZWFrO2Nhc2UgMjohZnVuY3Rpb24odCxlLHIsbil7aWYoZSl0LmNhbGwocixuKTtlbHNlIGZvcih2YXIgaT10Lmxlbmd0aCxhPXYodCxpKSxvPTA7bzxpOysrbylhW29dLmNhbGwocixuKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6IWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZSl0LmNhbGwocixuLGkpO2Vsc2UgZm9yKHZhciBhPXQubGVuZ3RoLG89dih0LGEpLHM9MDtzPGE7KytzKW9bc10uY2FsbChyLG4saSl9KHIsYyx0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2Nhc2UgNDohZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKGUpdC5jYWxsKHIsbixpLGEpO2Vsc2UgZm9yKHZhciBvPXQubGVuZ3RoLHM9dih0LG8pLGw9MDtsPG87KytsKXNbbF0uY2FsbChyLG4saSxhKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10pO2JyZWFrO2RlZmF1bHQ6Zm9yKGk9bmV3IEFycmF5KG4tMSksYT0xO2E8bjthKyspaVthLTFdPWFyZ3VtZW50c1thXTshZnVuY3Rpb24odCxlLHIsbil7aWYoZSl0LmFwcGx5KHIsbik7ZWxzZSBmb3IodmFyIGk9dC5sZW5ndGgsYT12KHQsaSksbz0wO288aTsrK28pYVtvXS5hcHBseShyLG4pfShyLGMsdGhpcyxpKX1yZXR1cm4hMH0sby5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0aGlzLHQsZSwhMSl9LG8ucHJvdG90eXBlLm9uPW8ucHJvdG90eXBlLmFkZExpc3RlbmVyLG8ucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBmKHRoaXMsdCxlLCEwKX0sby5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMub24odCxwKHRoaXMsdCxlKSksdGhpc30sby5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMucHJlcGVuZExpc3RlbmVyKHQscCh0aGlzLHQsZSkpLHRoaXN9LG8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scztpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKCEoaT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCEocj1pW3RdKSlyZXR1cm4gdGhpcztpZihyPT09ZXx8ci5saXN0ZW5lcj09PWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bihudWxsKTooZGVsZXRlIGlbdF0saS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxyLmxpc3RlbmVyfHxlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil7Zm9yKGE9LTEsbz1yLmxlbmd0aC0xO28+PTA7by0tKWlmKHJbb109PT1lfHxyW29dLmxpc3RlbmVyPT09ZSl7cz1yW29dLmxpc3RlbmVyLGE9bzticmVha31pZihhPDApcmV0dXJuIHRoaXM7MD09PWE/ci5zaGlmdCgpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUsbj1yKzEsaT10Lmxlbmd0aDtuPGk7cis9MSxuKz0xKXRbcl09dFtuXTt0LnBvcCgpfShyLGEpLDE9PT1yLmxlbmd0aCYmKGlbdF09clswXSksaS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxzfHxlKX1yZXR1cm4gdGhpc30sby5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYTtpZighKHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZighci5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1uKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnJbdF0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1uKG51bGwpOmRlbGV0ZSByW3RdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgbyxzPWkocik7Zm9yKGE9MDthPHMubGVuZ3RoOysrYSkicmVtb3ZlTGlzdGVuZXIiIT09KG89c1thXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKG8pO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9bihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKGU9clt0XSkpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGUpO2Vsc2UgaWYoZSlmb3IoYT1lLmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlW2FdKTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMCl9LG8ucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gZCh0aGlzLHQsITEpfSxvLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5saXN0ZW5lckNvdW50P3QubGlzdGVuZXJDb3VudChlKTpnLmNhbGwodCxlKX0sby5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1nLG8ucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX19LHt9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiYXNlNjQtanMiKSxpPXQoImllZWU3NTQiKTtyLkJ1ZmZlcj1zLHIuU2xvd0J1ZmZlcj1mdW5jdGlvbih0KXsrdCE9dCYmKHQ9MCk7cmV0dXJuIHMuYWxsb2MoK3QpfSxyLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBhPTIxNDc0ODM2NDc7ZnVuY3Rpb24gbyh0KXtpZih0PmEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189cy5wcm90b3R5cGUsZX1mdW5jdGlvbiBzKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gdSh0KX1yZXR1cm4gbCh0LGUscil9ZnVuY3Rpb24gbCh0LGUscil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBmdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgZSYmIiIhPT1lfHwoZT0idXRmOCIpO2lmKCFzLmlzRW5jb2RpbmcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTt2YXIgcj0wfHAodCxlKSxuPW8ociksaT1uLndyaXRlKHQsZSk7aSE9PXImJihuPW4uc2xpY2UoMCxpKSk7cmV0dXJuIG59KHQsZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBmKHQpO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiB0KTtpZihqKHQsQXJyYXlCdWZmZXIpfHx0JiZqKHQuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKHQuYnl0ZUxlbmd0aDxlKyhyfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIG47bj12b2lkIDA9PT1lJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUscik7cmV0dXJuIG4uX19wcm90b19fPXMucHJvdG90eXBlLG59KHQsZSxyKTtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIG49dC52YWx1ZU9mJiZ0LnZhbHVlT2YoKTtpZihudWxsIT1uJiZuIT09dClyZXR1cm4gcy5mcm9tKG4sZSxyKTt2YXIgaT1mdW5jdGlvbih0KXtpZihzLmlzQnVmZmVyKHQpKXt2YXIgZT0wfGgodC5sZW5ndGgpLHI9byhlKTtyZXR1cm4gMD09PXIubGVuZ3RoP3I6KHQuY29weShyLDAsMCxlKSxyKX1pZih2b2lkIDAhPT10Lmxlbmd0aClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHxWKHQubGVuZ3RoKT9vKDApOmYodCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gZih0LmRhdGEpfSh0KTtpZihpKXJldHVybiBpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIHMuZnJvbSh0W1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLGUscik7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gYyh0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiB1KHQpe3JldHVybiBjKHQpLG8odDwwPzA6MHxoKHQpKX1mdW5jdGlvbiBmKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDwwPzA6MHxoKHQubGVuZ3RoKSxyPW8oZSksbj0wO248ZTtuKz0xKXJbbl09MjU1JnRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0KXtpZih0Pj1hKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IithLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8dH1mdW5jdGlvbiBwKHQsZSl7aWYocy5pc0J1ZmZlcih0KSlyZXR1cm4gdC5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpfHxqKHQsQXJyYXlCdWZmZXIpKXJldHVybiB0LmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTt2YXIgcj10Lmxlbmd0aCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIW4mJjA9PT1yKXJldHVybiAwO2Zvcih2YXIgaT0hMTs7KXN3aXRjaChlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEYodCkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBCKHQpLmxlbmd0aDtkZWZhdWx0OmlmKGkpcmV0dXJuIG4/LTE6Rih0KS5sZW5ndGg7ZT0oIiIrZSkudG9Mb3dlckNhc2UoKSxpPSEwfX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZyh0LGUscixuLGkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLFYocj0rcikmJihyPWk/MDp0Lmxlbmd0aC0xKSxyPDAmJihyPXQubGVuZ3RoK3IpLHI+PXQubGVuZ3RoKXtpZihpKXJldHVybi0xO3I9dC5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWkpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9cy5mcm9tKGUsbikpLHMuaXNCdWZmZXIoZSkpcmV0dXJuIDA9PT1lLmxlbmd0aD8tMTp2KHQsZSxyLG4saSk7aWYoIm51bWJlciI9PXR5cGVvZiBlKXJldHVybiBlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodCxlLHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwodCxlLHIpOnYodCxbZV0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgYSxvPTEscz10Lmxlbmd0aCxsPWUubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKHQubGVuZ3RoPDJ8fGUubGVuZ3RoPDIpcmV0dXJuLTE7bz0yLHMvPTIsbC89MixyLz0yfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gMT09PW8/dFtlXTp0LnJlYWRVSW50MTZCRShlKm8pfWlmKGkpe3ZhciB1PS0xO2ZvcihhPXI7YTxzO2ErKylpZihjKHQsYSk9PT1jKGUsLTE9PT11PzA6YS11KSl7aWYoLTE9PT11JiYodT1hKSxhLXUrMT09PWwpcmV0dXJuIHUqb31lbHNlLTEhPT11JiYoYS09YS11KSx1PS0xfWVsc2UgZm9yKHIrbD5zJiYocj1zLWwpLGE9cjthPj0wO2EtLSl7Zm9yKHZhciBmPSEwLGg9MDtoPGw7aCsrKWlmKGModCxhK2gpIT09YyhlLGgpKXtmPSExO2JyZWFrfWlmKGYpcmV0dXJuIGF9cmV0dXJuLTF9ZnVuY3Rpb24gbSh0LGUscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT10Lmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIGE9ZS5sZW5ndGg7bj5hLzImJihuPWEvMik7Zm9yKHZhciBvPTA7bzxuOysrbyl7dmFyIHM9cGFyc2VJbnQoZS5zdWJzdHIoMipvLDIpLDE2KTtpZihWKHMpKXJldHVybiBvO3RbcitvXT1zfXJldHVybiBvfWZ1bmN0aW9uIHkodCxlLHIsbil7cmV0dXJuIE4oRihlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiBOKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKDI1NSZ0LmNoYXJDb2RlQXQocikpO3JldHVybiBlfShlKSx0LHIsbil9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4geCh0LGUscixuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiBOKEIoZSksdCxyLG4pfWZ1bmN0aW9uIHcodCxlLHIsbil7cmV0dXJuIE4oZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9W10sbz0wO288dC5sZW5ndGgmJiEoKGUtPTIpPDApOysrbylyPXQuY2hhckNvZGVBdChvKSxuPXI+PjgsaT1yJTI1NixhLnB1c2goaSksYS5wdXNoKG4pO3JldHVybiBhfShlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBrKHQsZSxyKXtyZXR1cm4gMD09PWUmJnI9PT10Lmxlbmd0aD9uLmZyb21CeXRlQXJyYXkodCk6bi5mcm9tQnl0ZUFycmF5KHQuc2xpY2UoZSxyKSl9ZnVuY3Rpb24gVCh0LGUscil7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49W10saT1lO2k8cjspe3ZhciBhLG8scyxsLGM9dFtpXSx1PW51bGwsZj1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkrZjw9cilzd2l0Y2goZil7Y2FzZSAxOmM8MTI4JiYodT1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihhPXRbaSsxXSkpJiYobD0oMzEmYyk8PDZ8NjMmYSk+MTI3JiYodT1sKTticmVhaztjYXNlIDM6YT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJihsPSgxNSZjKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPjIwNDcmJihsPDU1Mjk2fHxsPjU3MzQzKSYmKHU9bCk7YnJlYWs7Y2FzZSA0OmE9dFtpKzFdLG89dFtpKzJdLHM9dFtpKzNdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihsPSgxNSZjKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+NjU1MzUmJmw8MTExNDExMiYmKHU9bCl9bnVsbD09PXU/KHU9NjU1MzMsZj0xKTp1PjY1NTM1JiYodS09NjU1MzYsbi5wdXNoKHU+Pj4xMCYxMDIzfDU1Mjk2KSx1PTU2MzIwfDEwMjMmdSksbi5wdXNoKHUpLGkrPWZ9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PUEpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQpO3ZhciByPSIiLG49MDtmb3IoO248ZTspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdC5zbGljZShuLG4rPUEpKTtyZXR1cm4gcn0obil9ci5rTWF4TGVuZ3RoPWEscy5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybiB0Ll9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09dC5mb28oKX1jYXRjaCh0KXtyZXR1cm4hMX19KCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHMuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSwidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnNwZWNpZXMmJnNbU3ltYm9sLnNwZWNpZXNdPT09cyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITF9KSxzLnBvb2xTaXplPTgxOTIscy5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbCh0LGUscil9LHMucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxzLl9fcHJvdG9fXz1VaW50OEFycmF5LHMuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscil7cmV0dXJuIGModCksdDw9MD9vKHQpOnZvaWQgMCE9PWU/InN0cmluZyI9PXR5cGVvZiByP28odCkuZmlsbChlLHIpOm8odCkuZmlsbChlKTpvKHQpfSh0LGUscil9LHMuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7cmV0dXJuIHUodCl9LHMuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfSxzLmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYhMD09PXQuX2lzQnVmZmVyJiZ0IT09cy5wcm90b3R5cGV9LHMuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKGoodCxVaW50OEFycmF5KSYmKHQ9cy5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksaihlLFVpbnQ4QXJyYXkpJiYoZT1zLmZyb20oZSxlLm9mZnNldCxlLmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcih0KXx8IXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wLGE9TWF0aC5taW4ocixuKTtpPGE7KytpKWlmKHRbaV0hPT1lW2ldKXtyPXRbaV0sbj1lW2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0scy5pc0VuY29kaW5nPWZ1bmN0aW9uKHQpe3N3aXRjaChTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxzLmNvbmNhdD1mdW5jdGlvbih0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHMuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09ZSlmb3IoZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdLmxlbmd0aDt2YXIgbj1zLmFsbG9jVW5zYWZlKGUpLGk9MDtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgYT10W3JdO2lmKGooYSxVaW50OEFycmF5KSYmKGE9cy5mcm9tKGEpKSwhcy5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KG4saSksaSs9YS5sZW5ndGh9cmV0dXJuIG59LHMuYnl0ZUxlbmd0aD1wLHMucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxzLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTIpZCh0aGlzLGUsZSsxKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz00KWQodGhpcyxlLGUrMyksZCh0aGlzLGUrMSxlKzIpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTgpZCh0aGlzLGUsZSs3KSxkKHRoaXMsZSsxLGUrNiksZCh0aGlzLGUrMixlKzUpLGQodGhpcyxlKzMsZSs0KTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/VCh0aGlzLDAsdCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PShlPj4+PTApKXJldHVybiIiO2Zvcih0fHwodD0idXRmOCIpOzspc3dpdGNoKHQpe2Nhc2UiaGV4IjpyZXR1cm4gRSh0aGlzLGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gVCh0aGlzLGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIE0odGhpcyxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFModGhpcyxlLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gayh0aGlzLGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBDKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0KTt0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHMucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPXMucHJvdG90eXBlLnRvU3RyaW5nLHMucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT10fHwwPT09cy5jb21wYXJlKHRoaXMsdCl9LHMucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgdD0iIixlPXIuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLGUpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+ZSYmKHQrPSIgLi4uICIpLCI8QnVmZmVyICIrdCsiPiJ9LHMucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlLHIsbixpKXtpZihqKHQsVWludDhBcnJheSkmJih0PXMuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PXImJihyPXQ/dC5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLGU8MHx8cj50Lmxlbmd0aHx8bjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1pJiZlPj1yKXJldHVybiAwO2lmKG4+PWkpcmV0dXJuLTE7aWYoZT49cilyZXR1cm4gMTtpZih0aGlzPT09dClyZXR1cm4gMDtmb3IodmFyIGE9KGk+Pj49MCktKG4+Pj49MCksbz0ocj4+Pj0wKS0oZT4+Pj0wKSxsPU1hdGgubWluKGEsbyksYz10aGlzLnNsaWNlKG4saSksdT10LnNsaWNlKGUsciksZj0wO2Y8bDsrK2YpaWYoY1tmXSE9PXVbZl0pe2E9Y1tmXSxvPXVbZl07YnJlYWt9cmV0dXJuIGE8bz8tMTpvPGE/MTowfSxzLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YodCxlLHIpfSxzLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZyh0aGlzLHQsZSxyLCEwKX0scy5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBnKHRoaXMsdCxlLHIsITEpfSxzLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT1lKW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiBlKW49ZSxyPXRoaXMubGVuZ3RoLGU9MDtlbHNle2lmKCFpc0Zpbml0ZShlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7ZT4+Pj0wLGlzRmluaXRlKHIpPyhyPj4+PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtZTtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksdC5sZW5ndGg+MCYmKHI8MHx8ZTwwKXx8ZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgYT0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIG0odGhpcyx0LGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4geSh0aGlzLHQsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBiKHRoaXMsdCxlLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gXyh0aGlzLHQsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHcodGhpcyx0LGUscik7ZGVmYXVsdDppZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxhPSEwfX0scy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgQT00MDk2O2Z1bmN0aW9uIE0odCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZ0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBTKHQsZSxyKXt2YXIgbj0iIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10Lmxlbmd0aDsoIWV8fGU8MCkmJihlPTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsYT1lO2E8cjsrK2EpaSs9Uih0W2FdKTtyZXR1cm4gaX1mdW5jdGlvbiBDKHQsZSxyKXtmb3IodmFyIG49dC5zbGljZShlLHIpLGk9IiIsYT0wO2E8bi5sZW5ndGg7YSs9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bYV0rMjU2Km5bYSsxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gTCh0LGUscil7aWYodCUxIT0wfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKHQrZT5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24geih0LGUscixuLGksYSl7aWYoIXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKGU+aXx8ZTxhKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIE8odCxlLHIsbixpLGEpe2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBJKHQsZSxyLG4sYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fE8odCwwLHIsNCksaS53cml0ZSh0LGUscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBEKHQsZSxyLG4sYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fE8odCwwLHIsOCksaS53cml0ZSh0LGUscixuLDUyLDgpLHIrOH1zLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoOyh0PX5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSwoZT12b2lkIDA9PT1lP3I6fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLGU8dCYmKGU9dCk7dmFyIG49dGhpcy5zdWJhcnJheSh0LGUpO3JldHVybiBuLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxufSxzLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEwodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIG59LHMucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3QrLS1lXSxpPTE7ZT4wJiYoaSo9MjU2KTspbis9dGhpc1t0Ky0tZV0qaTtyZXR1cm4gbn0scy5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0scy5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LHMucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDh8dGhpc1t0KzFdfSxzLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSxzLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxzLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbj49KGkqPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqZSkpLG59LHMucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxMKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPWUsaT0xLGE9dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspYSs9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gYT49KGkqPTEyOCkmJihhLT1NYXRoLnBvdygyLDgqZSkpLGF9LHMucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/LTEqKDI1NS10aGlzW3RdKzEpOnRoaXNbdF19LHMucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fEwodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3RdfHRoaXNbdCsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0scy5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxzLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0scy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdPDwyNHx0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM119LHMucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsNCx0aGlzLmxlbmd0aCksaS5yZWFkKHRoaXMsdCwhMCwyMyw0KX0scy5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCExLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw4LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCEwLDUyLDgpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw4LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCExLDUyLDgpfSxzLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHx6KHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihpKj0yNTYpOyl0aGlzW2UrYV09dC9pJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHx6KHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLGE9MTtmb3IodGhpc1tlK2ldPTI1NSZ0Oy0taT49MCYmKGEqPTI1Nik7KXRoaXNbZStpXT10L2EmMjU1O3JldHVybiBlK3J9LHMucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDEsMjU1LDApLHRoaXNbZV09MjU1JnQsZSsxfSxzLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0scy5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMiw2NTUzNSwwKSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LHMucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2UrM109dD4+PjI0LHRoaXNbZSsyXT10Pj4+MTYsdGhpc1tlKzFdPXQ+Pj44LHRoaXNbZV09MjU1JnQsZSs0fSxzLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0scy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7eih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9MCxvPTEscz0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrYTxyJiYobyo9MjU2KTspdDwwJiYwPT09cyYmMCE9PXRoaXNbZSthLTFdJiYocz0xKSx0aGlzW2UrYV09KHQvbz4+MCktcyYyNTU7cmV0dXJuIGUrcn0scy5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7eih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9ci0xLG89MSxzPTA7Zm9yKHRoaXNbZSthXT0yNTUmdDstLWE+PTAmJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2ErMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDEsMTI3LC0xMjgpLHQ8MCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LHMucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0scy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSxzLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0LGUrNH0scy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LHMucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITAscil9LHMucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITEscil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBEKHRoaXMsdCxlLCEwLHIpfSxzLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRCh0aGlzLHQsZSwhMSxyKX0scy5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0LGUscixuKXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLGU+PXQubGVuZ3RoJiYoZT10Lmxlbmd0aCksZXx8KGU9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT10Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksdC5sZW5ndGgtZTxuLXImJihuPXQubGVuZ3RoLWUrcik7dmFyIGk9bi1yO2lmKHRoaXM9PT10JiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbil0aGlzLmNvcHlXaXRoaW4oZSxyLG4pO2Vsc2UgaWYodGhpcz09PXQmJnI8ZSYmZTxuKWZvcih2YXIgYT1pLTE7YT49MDstLWEpdFthK2VdPXRoaXNbYStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHQsdGhpcy5zdWJhcnJheShyLG4pLGUpO3JldHVybiBpfSxzLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoInN0cmluZyI9PXR5cGVvZiBlPyhuPWUsZT0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIXMuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIGk9dC5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1uJiZpPDEyOHx8ImxhdGluMSI9PT1uKSYmKHQ9aSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHQmJih0Jj0yNTUpO2lmKGU8MHx8dGhpcy5sZW5ndGg8ZXx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9ZSlyZXR1cm4gdGhpczt2YXIgYTtpZihlPj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLHR8fCh0PTApLCJudW1iZXIiPT10eXBlb2YgdClmb3IoYT1lO2E8cjsrK2EpdGhpc1thXT10O2Vsc2V7dmFyIG89cy5pc0J1ZmZlcih0KT90OnMuZnJvbSh0LG4pLGw9by5sZW5ndGg7aWYoMD09PWwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihhPTA7YTxyLWU7KythKXRoaXNbYStlXT1vW2ElbF19cmV0dXJuIHRoaXN9O3ZhciBQPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQ8MTY/IjAiK3QudG9TdHJpbmcoMTYpOnQudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEYodCxlKXt2YXIgcjtlPWV8fDEvMDtmb3IodmFyIG49dC5sZW5ndGgsaT1udWxsLGE9W10sbz0wO288bjsrK28pe2lmKChyPXQuY2hhckNvZGVBdChvKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYobysxPT09bil7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKGUtPTEpPDApYnJlYWs7YS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigoZS09Mik8MClicmVhazthLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKGUtPTMpPDApYnJlYWs7YS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoZS09NCk8MClicmVhazthLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBhfWZ1bmN0aW9uIEIodCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24odCl7aWYoKHQ9KHQ9dC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShQLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDt0Lmxlbmd0aCU0IT0wOyl0Kz0iPSI7cmV0dXJuIHR9KHQpKX1mdW5jdGlvbiBOKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PWUubGVuZ3RofHxpPj10Lmxlbmd0aCk7KytpKWVbaStyXT10W2ldO3JldHVybiBpfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fG51bGwhPXQmJm51bGwhPXQuY29uc3RydWN0b3ImJm51bGwhPXQuY29uc3RydWN0b3IubmFtZSYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09ZS5uYW1lfWZ1bmN0aW9uIFYodCl7cmV0dXJuIHQhPXR9fSx7ImJhc2U2NC1qcyI6NjQsaWVlZTc1NDo0MDR9XSw5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9tb25vdG9uZSIpLGk9dCgiLi9saWIvdHJpYW5ndWxhdGlvbiIpLGE9dCgiLi9saWIvZGVsYXVuYXkiKSxvPXQoIi4vbGliL2ZpbHRlciIpO2Z1bmN0aW9uIHModCl7cmV0dXJuW01hdGgubWluKHRbMF0sdFsxXSksTWF0aC5tYXgodFswXSx0WzFdKV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkoZSk/KHI9cnx8e30sZT1lfHxbXSk6KHI9ZXx8e30sZT1bXSk7dmFyIHU9ISFjKHIsImRlbGF1bmF5IiwhMCksZj0hIWMociwiaW50ZXJpb3IiLCEwKSxoPSEhYyhyLCJleHRlcmlvciIsITApLHA9ISFjKHIsImluZmluaXR5IiwhMSk7aWYoIWYmJiFofHwwPT09dC5sZW5ndGgpcmV0dXJuW107dmFyIGQ9bih0LGUpO2lmKHV8fGYhPT1ofHxwKXtmb3IodmFyIGc9aSh0Lmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuc29ydChsKX0oZSkpLHY9MDt2PGQubGVuZ3RoOysrdil7dmFyIG09ZFt2XTtnLmFkZFRyaWFuZ2xlKG1bMF0sbVsxXSxtWzJdKX1yZXR1cm4gdSYmYSh0LGcpLGg/Zj9wP28oZywwLHApOmcuY2VsbHMoKTpvKGcsMSxwKTpvKGcsLTEpfXJldHVybiBkfX0seyIuL2xpYi9kZWxhdW5heSI6OTcsIi4vbGliL2ZpbHRlciI6OTgsIi4vbGliL21vbm90b25lIjo5OSwiLi9saWIvdHJpYW5ndWxhdGlvbiI6MTAwfV0sOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicm9idXN0LWluLXNwaGVyZSIpWzRdO3QoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gaSh0LGUscixpLGEsbyl7dmFyIHM9ZS5vcHBvc2l0ZShpLGEpO2lmKCEoczwwKSl7aWYoYTxpKXt2YXIgbD1pO2k9YSxhPWwsbD1vLG89cyxzPWx9ZS5pc0NvbnN0cmFpbnQoaSxhKXx8bih0W2ldLHRbYV0sdFtvXSx0W3NdKTwwJiZyLnB1c2goaSxhKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGE9dC5sZW5ndGgsbz1lLnN0YXJzLHM9MDtzPGE7KytzKWZvcih2YXIgbD1vW3NdLGM9MTtjPGwubGVuZ3RoO2MrPTIpe3ZhciB1PWxbY107aWYoISh1PHMpJiYhZS5pc0NvbnN0cmFpbnQocyx1KSl7Zm9yKHZhciBmPWxbYy0xXSxoPS0xLHA9MTtwPGwubGVuZ3RoO3ArPTIpaWYobFtwLTFdPT09dSl7aD1sW3BdO2JyZWFrfWg8MHx8bih0W3NdLHRbdV0sdFtmXSx0W2hdKTwwJiZyLnB1c2gocyx1KX19Zm9yKDtyLmxlbmd0aD4wOyl7Zm9yKHZhciB1PXIucG9wKCkscz1yLnBvcCgpLGY9LTEsaD0tMSxsPW9bc10sZD0xO2Q8bC5sZW5ndGg7ZCs9Mil7dmFyIGc9bFtkLTFdLHY9bFtkXTtnPT09dT9oPXY6dj09PXUmJihmPWcpfWY8MHx8aDwwfHwobih0W3NdLHRbdV0sdFtmXSx0W2hdKT49MHx8KGUuZmxpcChzLHUpLGkodCxlLHIsZixzLGgpLGkodCxlLHIscyxoLGYpLGkodCxlLHIsaCx1LGYpLGkodCxlLHIsdSxmLGgpKSl9fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAxLCJyb2J1c3QtaW4tc3BoZXJlIjo0OTJ9XSw5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0aGlzLmNlbGxzPXQsdGhpcy5uZWlnaGJvcj1lLHRoaXMuZmxhZ3M9bix0aGlzLmNvbnN0cmFpbnQ9cix0aGlzLmFjdGl2ZT1pLHRoaXMubmV4dD1hLHRoaXMuYm91bmRhcnk9b31mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfHx0WzJdLWVbMl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNlbGxzKCksbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIHM9cltpXSxsPXNbMF0sYz1zWzFdLHU9c1syXTtjPHU/YzxsJiYoc1swXT1jLHNbMV09dSxzWzJdPWwpOnU8bCYmKHNbMF09dSxzWzFdPWwsc1syXT1jKX1yLnNvcnQobyk7Zm9yKHZhciBmPW5ldyBBcnJheShuKSxpPTA7aTxmLmxlbmd0aDsrK2kpZltpXT0wO3ZhciBoPVtdLHA9W10sZD1uZXcgQXJyYXkoMypuKSxnPW5ldyBBcnJheSgzKm4pLHY9bnVsbDtlJiYodj1bXSk7Zm9yKHZhciBtPW5ldyBhKHIsZCxnLGYsaCxwLHYpLGk9MDtpPG47KytpKWZvcih2YXIgcz1yW2ldLHk9MDt5PDM7Kyt5KXt2YXIgbD1zW3ldLGM9c1soeSsxKSUzXSx4PWRbMyppK3ldPW0ubG9jYXRlKGMsbCx0Lm9wcG9zaXRlKGMsbCkpLGI9Z1szKmkreV09dC5pc0NvbnN0cmFpbnQobCxjKTt4PDAmJihiP3AucHVzaChpKTooaC5wdXNoKGkpLGZbaV09MSksZSYmdi5wdXNoKFtjLGwsLTFdKSl9cmV0dXJuIG19KHQscik7aWYoMD09PWUpcmV0dXJuIHI/bi5jZWxscy5jb25jYXQobi5ib3VuZGFyeSk6bi5jZWxsczt2YXIgaT0xLHM9bi5hY3RpdmUsbD1uLm5leHQsYz1uLmZsYWdzLHU9bi5jZWxscyxmPW4uY29uc3RyYWludCxoPW4ubmVpZ2hib3I7Zm9yKDtzLmxlbmd0aD4wfHxsLmxlbmd0aD4wOyl7Zm9yKDtzLmxlbmd0aD4wOyl7dmFyIHA9cy5wb3AoKTtpZihjW3BdIT09LWkpe2NbcF09aTt1W3BdO2Zvcih2YXIgZD0wO2Q8MzsrK2Qpe3ZhciBnPWhbMypwK2RdO2c+PTAmJjA9PT1jW2ddJiYoZlszKnArZF0/bC5wdXNoKGcpOihzLnB1c2goZyksY1tnXT1pKSl9fX12YXIgdj1sO2w9cyxzPXYsbC5sZW5ndGg9MCxpPS1pfXZhciBtPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT09PXImJih0W24rK109dFtpXSk7cmV0dXJuIHQubGVuZ3RoPW4sdH0odSxjLGUpO2lmKHIpcmV0dXJuIG0uY29uY2F0KG4uYm91bmRhcnkpO3JldHVybiBtfSxhLnByb3RvdHlwZS5sb2NhdGU9KG49WzAsMCwwXSxmdW5jdGlvbih0LGUscil7dmFyIGE9dCxzPWUsbD1yO3JldHVybiBlPHI/ZTx0JiYoYT1lLHM9cixsPXQpOnI8dCYmKGE9cixzPXQsbD1lKSxhPDA/LTE6KG5bMF09YSxuWzFdPXMsblsyXT1sLGkuZXEodGhpcy5jZWxscyxuLG8pKX0pfSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDF9XSw5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgicm9idXN0LW9yaWVudGF0aW9uIilbM10sYT0wLG89MSxzPTI7ZnVuY3Rpb24gbCh0LGUscixuLGkpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuaWR4PXIsdGhpcy5sb3dlcklkcz1uLHRoaXMudXBwZXJJZHM9aX1mdW5jdGlvbiBjKHQsZSxyLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMudHlwZT1yLHRoaXMuaWR4PW59ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuYVswXS1lLmFbMF18fHQuYVsxXS1lLmFbMV18fHQudHlwZS1lLnR5cGU7cmV0dXJuIHJ8fCh0LnR5cGUhPT1hJiYocj1pKHQuYSx0LmIsZS5iKSk/cjp0LmlkeC1lLmlkeCl9ZnVuY3Rpb24gZih0LGUpe3JldHVybiBpKHQuYSx0LmIsZSl9ZnVuY3Rpb24gaCh0LGUscixhLG8pe2Zvcih2YXIgcz1uLmx0KGUsYSxmKSxsPW4uZ3QoZSxhLGYpLGM9cztjPGw7KytjKXtmb3IodmFyIHU9ZVtjXSxoPXUubG93ZXJJZHMscD1oLmxlbmd0aDtwPjEmJmkocltoW3AtMl1dLHJbaFtwLTFdXSxhKT4wOyl0LnB1c2goW2hbcC0xXSxoW3AtMl0sb10pLHAtPTE7aC5sZW5ndGg9cCxoLnB1c2gobyk7dmFyIGQ9dS51cHBlcklkcztmb3IocD1kLmxlbmd0aDtwPjEmJmkocltkW3AtMl1dLHJbZFtwLTFdXSxhKTwwOyl0LnB1c2goW2RbcC0yXSxkW3AtMV0sb10pLHAtPTE7ZC5sZW5ndGg9cCxkLnB1c2gobyl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcjtyZXR1cm4ocj10LmFbMF08ZS5hWzBdP2kodC5hLHQuYixlLmEpOmkoZS5iLGUuYSx0LmEpKT9yOihyPWUuYlswXTx0LmJbMF0/aSh0LmEsdC5iLGUuYik6aShlLmIsZS5hLHQuYikpfHx0LmlkeC1lLmlkeH1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgaT1uLmxlKHQscixwKSxhPXRbaV0sbz1hLnVwcGVySWRzLHM9b1tvLmxlbmd0aC0xXTthLnVwcGVySWRzPVtzXSx0LnNwbGljZShpKzEsMCxuZXcgbChyLmEsci5iLHIuaWR4LFtzXSxvKSl9ZnVuY3Rpb24gZyh0LGUscil7dmFyIGk9ci5hO3IuYT1yLmIsci5iPWk7dmFyIGE9bi5lcSh0LHIscCksbz10W2FdO3RbYS0xXS51cHBlcklkcz1vLnVwcGVySWRzLHQuc3BsaWNlKGEsMSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT1bXSxmPTA7ZjxyOysrZilpLnB1c2gobmV3IGModFtmXSxudWxsLGEsZikpO2Zvcih2YXIgZj0wO2Y8bjsrK2Ype3ZhciBwPWVbZl0sdj10W3BbMF1dLG09dFtwWzFdXTt2WzBdPG1bMF0/aS5wdXNoKG5ldyBjKHYsbSxzLGYpLG5ldyBjKG0sdixvLGYpKTp2WzBdPm1bMF0mJmkucHVzaChuZXcgYyhtLHYscyxmKSxuZXcgYyh2LG0sbyxmKSl9aS5zb3J0KHUpO2Zvcih2YXIgeT1pWzBdLmFbMF0tKDErTWF0aC5hYnMoaVswXS5hWzBdKSkqTWF0aC5wb3coMiwtNTIpLHg9W25ldyBsKFt5LDFdLFt5LDBdLC0xLFtdLFtdLFtdLFtdKV0sYj1bXSxmPTAsXz1pLmxlbmd0aDtmPF87KytmKXt2YXIgdz1pW2ZdLGs9dy50eXBlO2s9PT1hP2goYix4LHQsdy5hLHcuaWR4KTprPT09cz9kKHgsdCx3KTpnKHgsdCx3KX1yZXR1cm4gYn19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjEwMSwicm9idXN0LW9yaWVudGF0aW9uIjo0OTR9XSwxMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09W107cmV0dXJuIG5ldyBpKHIsZSl9O3ZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0xLGk9dC5sZW5ndGg7bjxpO24rPTIpaWYodFtuLTFdPT09ZSYmdFtuXT09PXIpcmV0dXJuIHRbbi0xXT10W2ktMl0sdFtuXT10W2ktMV0sdm9pZCh0Lmxlbmd0aD1pLTIpfWEuaXNDb25zdHJhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF07ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1yZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdFswXT1NYXRoLm1pbihyLGkpLHRbMV09TWF0aC5tYXgocixpKSxuLmVxKHRoaXMuZWRnZXMsdCxlKT49MH19KCksYS5yZW1vdmVUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztvKG5bdF0sZSxyKSxvKG5bZV0scix0KSxvKG5bcl0sdCxlKX0sYS5hZGRUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztuW3RdLnB1c2goZSxyKSxuW2VdLnB1c2gocix0KSxuW3JdLnB1c2godCxlKX0sYS5vcHBvc2l0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN0YXJzW2VdLG49MSxpPXIubGVuZ3RoO248aTtuKz0yKWlmKHJbbl09PT10KXJldHVybiByW24tMV07cmV0dXJuLTF9LGEuZmxpcD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub3Bwb3NpdGUodCxlKSxuPXRoaXMub3Bwb3NpdGUoZSx0KTt0aGlzLnJlbW92ZVRyaWFuZ2xlKHQsZSxyKSx0aGlzLnJlbW92ZVRyaWFuZ2xlKGUsdCxuKSx0aGlzLmFkZFRyaWFuZ2xlKHQsbixyKSx0aGlzLmFkZFRyaWFuZ2xlKGUscixuKX0sYS5lZGdlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9MillLnB1c2goW2lbYV0saVthKzFdXSk7cmV0dXJuIGV9LGEuY2VsbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdGFycyxlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvO2ErPTIpe3ZhciBzPWlbYV0sbD1pW2ErMV07cjxNYXRoLm1pbihzLGwpJiZlLnB1c2goW3IscyxsXSl9cmV0dXJuIGV9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDF9XSwxMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPVsiZnVuY3Rpb24gIix0LCIoYSxsLGgsIixuLmpvaW4oIiwiKSwiKXsiLGk/IiI6InZhciBpPSIscj8ibC0xIjoiaCsxIiwiO3doaWxlKGw8PWgpe3ZhciBtPShsK2gpPj4+MSx4PWFbbV0iXTtyZXR1cm4gaT9lLmluZGV4T2YoImMiKTwwP2EucHVzaCgiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpeyIpOmEucHVzaCgiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXsiKTphLnB1c2goIjtpZigiLGUsIil7aT1tOyIpLHI/YS5wdXNoKCJsPW0rMX1lbHNle2g9bS0xfSIpOmEucHVzaCgiaD1tLTF9ZWxzZXtsPW0rMX0iKSxhLnB1c2goIn0iKSxpP2EucHVzaCgicmV0dXJuIC0xfTsiKTphLnB1c2goInJldHVybiBpfTsiKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIGkodCxlLHIsaSl7cmV0dXJuIG5ldyBGdW5jdGlvbihbbigiQSIsIngiK3QrInkiLGUsWyJ5Il0saSksbigiUCIsImMoeCx5KSIrdCsiMCIsZSxbInkiLCJjIl0saSksImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaCIsciwiKGEseSxjLGwsaCl7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXZvaWQgMCk/MDpsfDAsKGg9PT12b2lkIDApP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dm9pZCAwKT8wOmN8MCwobD09PXZvaWQgMCk/YS5sZW5ndGgtMTpsfDAseSl9fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSwxMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9fSx7fV0sMTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImR1cCIpLGk9dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk9MDtpPG47KytpKXIrPXRbaV0qZVtpXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO3RbMF0ubGVuZ3RoO3ZhciByPW4oW3QubGVuZ3RoKzEsdC5sZW5ndGgrMV0sMSksbz1uKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBzPTA7czxlOysrcyl7Zm9yKHZhciBsPTA7bDw9czsrK2wpcltsXVtzXT1yW3NdW2xdPTIqYSh0W3NdLHRbbF0pO29bc109YSh0W3NdLHRbc10pfXZhciBjPWkocixvKSx1PTAsZj1jW2UrMV07Zm9yKHM9MDtzPGYubGVuZ3RoOysrcyl1Kz1mW3NdO3ZhciBoPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8ZTsrK3Mpe2Y9Y1tzXTt2YXIgcD0wO2ZvcihsPTA7bDxmLmxlbmd0aDsrK2wpcCs9ZltsXTtoW3NdPXAvdX1yZXR1cm4gaH1mdW5jdGlvbiBzKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1uKFtlXSksaT1vKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qaVthXTtyZXR1cm4gcn1zLmJhcnljZW5ldHJpYz1vLGUuZXhwb3J0cz1zfSx7ZHVwOjE2MSwicm9idXN0LWxpbmVhci1zb2x2ZSI6NDkzfV0sMTA0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHQpLHI9MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288ZS5sZW5ndGg7KytvKXIrPU1hdGgucG93KGFbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KHIvdC5sZW5ndGgpfTt2YXIgbj10KCJjaXJjdW1jZW50ZXIiKX0se2NpcmN1bWNlbnRlcjoxMDN9XSwxMDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHI/dDxlP2U6dD5yP3I6dDp0PHI/cjp0PmU/ZTp0fX0se31dLDEwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHIpe249ZTtmb3IodmFyIGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07aVthXT1bb1swXSxvWzFdLHJbYV1dfWU9aX12YXIgcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZCh0LFtdLHAodCkpO3JldHVybiBtKGUsbixyKSwhIW59KHQsZSwhIXIpO2Zvcig7eSh0LGUsISFyKTspcz0hMDtpZihyJiZzKXtuLmxlbmd0aD0wLHIubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07bi5wdXNoKFtvWzBdLG9bMV1dKSxyLnB1c2gob1syXSl9fXJldHVybiBzfTt2YXIgbj10KCJ1bmlvbi1maW5kIiksaT10KCJib3gtaW50ZXJzZWN0IiksYT10KCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiKSxvPXQoImJpZy1yYXQiKSxzPXQoImJpZy1yYXQvY21wIiksbD10KCJiaWctcmF0L3RvLWZsb2F0IiksYz10KCJyYXQtdmVjIiksdT10KCJuZXh0YWZ0ZXIiKSxmPXQoIi4vbGliL3JhdC1zZWctaW50ZXJzZWN0Iik7ZnVuY3Rpb24gaCh0KXt2YXIgZT1sKHQpO3JldHVyblt1KGUsLTEvMCksdShlLDEvMCldfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2Vbcl09W3UoblswXSwtMS8wKSx1KG5bMV0sLTEvMCksdShuWzBdLDEvMCksdShuWzFdLDEvMCldfXJldHVybiBlfWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPW5ldyBuKGEpLHM9W10sbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgYz1lW2xdLGY9aChjWzBdKSxwPWgoY1sxXSk7cy5wdXNoKFt1KGZbMF0sLTEvMCksdShwWzBdLC0xLzApLHUoZlsxXSwxLzApLHUocFsxXSwxLzApXSl9aShzLGZ1bmN0aW9uKHQsZSl7by5saW5rKHQsZSl9KTt2YXIgZD0hMCxnPW5ldyBBcnJheShhKTtmb3IobD0wO2w8YTsrK2wpeyhtPW8uZmluZChsKSkhPT1sJiYoZD0hMSx0W21dPVtNYXRoLm1pbih0W2xdWzBdLHRbbV1bMF0pLE1hdGgubWluKHRbbF1bMV0sdFttXVsxXSldKX1pZihkKXJldHVybiBudWxsO3ZhciB2PTA7Zm9yKGw9MDtsPGE7KytsKXt2YXIgbTsobT1vLmZpbmQobCkpPT09bD8oZ1tsXT12LHRbdisrXT10W2xdKTpnW2xdPS0xfXQubGVuZ3RoPXY7Zm9yKGw9MDtsPGE7KytsKWdbbF08MCYmKGdbbF09Z1tvLmZpbmQobCldKTtyZXR1cm4gZ31mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10WzBdLWVbMF18fHRbMV0tZVsxXTtyZXR1cm4gcnx8KHRbMl08ZVsyXT8tMTp0WzJdPmVbMl0/MTowKX1mdW5jdGlvbiBtKHQsZSxyKXtpZigwIT09dC5sZW5ndGgpe2lmKGUpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPWVbKG89dFtuXSlbMF1dLGE9ZVtvWzFdXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfWVsc2UgZm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIG87aT0obz10W25dKVswXSxhPW9bMV07b1swXT1NYXRoLm1pbihpLGEpLG9bMV09TWF0aC5tYXgoaSxhKX1yP3Quc29ydCh2KTp0LnNvcnQoZyk7dmFyIHM9MTtmb3Iobj0xO248dC5sZW5ndGg7KytuKXt2YXIgbD10W24tMV0sYz10W25dOyhjWzBdIT09bFswXXx8Y1sxXSE9PWxbMV18fHImJmNbMl0hPT1sWzJdKSYmKHRbcysrXT1jKX10Lmxlbmd0aD1zfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGk9ZVtuXSxhPXRbaVswXV0sbz10W2lbMV1dO3Jbbl09W3UoTWF0aC5taW4oYVswXSxvWzBdKSwtMS8wKSx1KE1hdGgubWluKGFbMV0sb1sxXSksLTEvMCksdShNYXRoLm1heChhWzBdLG9bMF0pLDEvMCksdShNYXRoLm1heChhWzFdLG9bMV0pLDEvMCldfXJldHVybiByfSh0LGUpLGg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdO3JldHVybiBpKHIsZnVuY3Rpb24ocixpKXt2YXIgbz1lW3JdLHM9ZVtpXTtpZihvWzBdIT09c1swXSYmb1swXSE9PXNbMV0mJm9bMV0hPT1zWzBdJiZvWzFdIT09c1sxXSl7dmFyIGw9dFtvWzBdXSxjPXRbb1sxXV0sdT10W3NbMF1dLGY9dFtzWzFdXTthKGwsYyx1LGYpJiZuLnB1c2goW3IsaV0pfX0pLG59KHQsZSxuKSxnPXAodCksdj1mdW5jdGlvbih0LGUscixuKXt2YXIgbz1bXTtyZXR1cm4gaShyLG4sZnVuY3Rpb24ocixuKXt2YXIgaT1lW3JdO2lmKGlbMF0hPT1uJiZpWzFdIT09bil7dmFyIHM9dFtuXSxsPXRbaVswXV0sYz10W2lbMV1dO2EobCxjLHMscykmJm8ucHVzaChbcixuXSl9fSksb30odCxlLG4sZykseT1kKHQsZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSx1LGg9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW28odFswXSksbyh0WzFdKV19KTtmb3IoYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgcD1yW2FdO3U9cFswXTt2YXIgZD1wWzFdLGc9ZVt1XSx2PWVbZF0sbT1mKGModFtnWzBdXSksYyh0W2dbMV1dKSxjKHRbdlswXV0pLGModFt2WzFdXSkpO2lmKG0pe3ZhciB5PXQubGVuZ3RoO3QucHVzaChbbChtWzBdKSxsKG1bMV0pXSksaC5wdXNoKG0pLG4ucHVzaChbdSx5XSxbZCx5XSl9fWZvcihuLnNvcnQoZnVuY3Rpb24odCxlKXtpZih0WzBdIT09ZVswXSlyZXR1cm4gdFswXS1lWzBdO3ZhciByPWhbdFsxXV0sbj1oW2VbMV1dO3JldHVybiBzKHJbMF0sblswXSl8fHMoclsxXSxuWzFdKX0pLGE9bi5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIHg9ZVt1PShTPW5bYV0pWzBdXSxiPXhbMF0sXz14WzFdLHc9dFtiXSxrPXRbX107aWYoKHdbMF0ta1swXXx8d1sxXS1rWzFdKTwwKXt2YXIgVD1iO2I9XyxfPVR9eFswXT1iO3ZhciBBLE09eFsxXT1TWzFdO2ZvcihpJiYoQT14WzJdKTthPjAmJm5bYS0xXVswXT09PXU7KXt2YXIgUyxFPShTPW5bLS1hXSlbMV07aT9lLnB1c2goW00sRSxBXSk6ZS5wdXNoKFtNLEVdKSxNPUV9aT9lLnB1c2goW00sXyxBXSk6ZS5wdXNoKFtNLF9dKX1yZXR1cm4gaH0odCxlLGgsdixyKSk7cmV0dXJuIG0oZSx5LHIpLCEheXx8KGgubGVuZ3RoPjB8fHYubGVuZ3RoPjApfX0seyIuL2xpYi9yYXQtc2VnLWludGVyc2VjdCI6MTA3LCJiaWctcmF0Ijo2OCwiYmlnLXJhdC9jbXAiOjY2LCJiaWctcmF0L3RvLWZsb2F0Ijo4MCwiYm94LWludGVyc2VjdCI6ODYsbmV4dGFmdGVyOjQ0MywicmF0LXZlYyI6NDc4LCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiOjQ5NywidW5pb24tZmluZCI6NTMwfV0sMTA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1zKGUsdCksZj1zKG4sciksaD11KGEsZik7aWYoMD09PW8oaCkpcmV0dXJuIG51bGw7dmFyIHA9cyh0LHIpLGQ9dShmLHApLGc9aShkLGgpLHY9YyhhLGcpO3JldHVybiBsKHQsdil9O3ZhciBuPXQoImJpZy1yYXQvbXVsIiksaT10KCJiaWctcmF0L2RpdiIpLGE9dCgiYmlnLXJhdC9zdWIiKSxvPXQoImJpZy1yYXQvc2lnbiIpLHM9dCgicmF0LXZlYy9zdWIiKSxsPXQoInJhdC12ZWMvYWRkIiksYz10KCJyYXQtdmVjL211bHMiKTtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGEobih0WzBdLGVbMV0pLG4odFsxXSxlWzBdKSl9fSx7ImJpZy1yYXQvZGl2Ijo2NywiYmlnLXJhdC9tdWwiOjc3LCJiaWctcmF0L3NpZ24iOjc4LCJiaWctcmF0L3N1YiI6NzksInJhdC12ZWMvYWRkIjo0NzcsInJhdC12ZWMvbXVscyI6NDc5LCJyYXQtdmVjL3N1YiI6NDgwfV0sMTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNsYW1wIik7ZnVuY3Rpb24gaSh0LGUpe251bGw9PWUmJihlPSEwKTt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz10WzNdO3JldHVybiBudWxsPT1vJiYobz1lPzE6MjU1KSxlJiYocio9MjU1LGkqPTI1NSxhKj0yNTUsbyo9MjU1KSwxNjc3NzIxNioocj0yNTUmbihyLDAsMjU1KSkrKChpPTI1NSZuKGksMCwyNTUpKTw8MTYpKygoYT0yNTUmbihhLDAsMjU1KSk8PDgpKyhvPTI1NSZuKG8sMCwyNTUpKX1lLmV4cG9ydHM9aSxlLmV4cG9ydHMudG89aSxlLmV4cG9ydHMuZnJvbT1mdW5jdGlvbih0LGUpe3ZhciByPSh0PSt0KT4+PjI0LG49KDE2NzExNjgwJnQpPj4+MTYsaT0oNjUyODAmdCk+Pj44LGE9MjU1JnQ7cmV0dXJuITE9PT1lP1tyLG4saSxhXTpbci8yNTUsbi8yNTUsaS8yNTUsYS8yNTVdfX0se2NsYW1wOjEwNX1dLDEwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSwxMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItcmdiYSIpLGk9dCgiY2xhbXAiKSxhPXQoImR0eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ImZsb2F0IiE9PWUmJmV8fChlPSJhcnJheSIpLCJ1aW50Ij09PWUmJihlPSJ1aW50OCIpLCJ1aW50X2NsYW1wZWQiPT09ZSYmKGU9InVpbnQ4X2NsYW1wZWQiKTt2YXIgcj1uZXcoYShlKSkoNCksbz0idWludDgiIT09ZSYmInVpbnQ4X2NsYW1wZWQiIT09ZTtyZXR1cm4gdC5sZW5ndGgmJiJzdHJpbmciIT10eXBlb2YgdHx8KCh0PW4odCkpWzBdLz0yNTUsdFsxXS89MjU1LHRbMl0vPTI1NSksZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fCEhKEFycmF5LmlzQXJyYXkodCkmJih0WzBdPjF8fDA9PT10WzBdKSYmKHRbMV0+MXx8MD09PXRbMV0pJiYodFsyXT4xfHwwPT09dFsyXSkmJighdFszXXx8dFszXT4xKSl9KHQpPyhyWzBdPXRbMF0sclsxXT10WzFdLHJbMl09dFsyXSxyWzNdPW51bGwhPXRbM10/dFszXToyNTUsbyYmKHJbMF0vPTI1NSxyWzFdLz0yNTUsclsyXS89MjU1LHJbM10vPTI1NSkscik6KG8/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjEpOihyWzBdPWkoTWF0aC5mbG9vcigyNTUqdFswXSksMCwyNTUpLHJbMV09aShNYXRoLmZsb29yKDI1NSp0WzFdKSwwLDI1NSksclsyXT1pKE1hdGguZmxvb3IoMjU1KnRbMl0pLDAsMjU1KSxyWzNdPW51bGw9PXRbM10/MjU1OmkoTWF0aC5mbG9vcigyNTUqdFszXSksMCwyNTUpKSxyKX19LHtjbGFtcDoxMDUsImNvbG9yLXJnYmEiOjExMixkdHlwZToxNjB9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5hbWUiKSxpPXQoImlzLXBsYWluLW9iaiIpLGE9dCgiZGVmaW5lZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxzLGw9W10sYz0xO2lmKCJzdHJpbmciPT10eXBlb2YgdClpZihuW3RdKWw9blt0XS5zbGljZSgpLHM9InJnYiI7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT09dCljPTAscz0icmdiIixsPVswLDAsMF07ZWxzZSBpZigvXiNbQS1GYS1mMC05XSskLy50ZXN0KHQpKXt2YXIgdT10LnNsaWNlKDEpLGY9dS5sZW5ndGgsaD1mPD00O2M9MSxoPyhsPVtwYXJzZUludCh1WzBdK3VbMF0sMTYpLHBhcnNlSW50KHVbMV0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzJdLDE2KV0sND09PWYmJihjPXBhcnNlSW50KHVbM10rdVszXSwxNikvMjU1KSk6KGw9W3BhcnNlSW50KHVbMF0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzNdLDE2KSxwYXJzZUludCh1WzRdK3VbNV0sMTYpXSw4PT09ZiYmKGM9cGFyc2VJbnQodVs2XSt1WzddLDE2KS8yNTUpKSxsWzBdfHwobFswXT0wKSxsWzFdfHwobFsxXT0wKSxsWzJdfHwobFsyXT0wKSxzPSJyZ2IifWVsc2UgaWYoZT0vXigoPzpyZ2J8aHNbbHZiXXxod2J8Y215az98eHlbenldfGdyYXl8bGFifGxjaHU/dj98W2x5XXV2fGxtcylhPylccypcKChbXlwpXSopXCkvLmV4ZWModCkpe3ZhciBwPWVbMV0sdT1wLnJlcGxhY2UoL2EkLywiIik7cz11O3ZhciBmPSJjbXlrIj09PXU/NDoiZ3JheSI9PT11PzE6MztsPWVbMl0udHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKGZ1bmN0aW9uKHQsZSl7aWYoLyUkLy50ZXN0KHQpKXJldHVybiBlPT09Zj9wYXJzZUZsb2F0KHQpLzEwMDoicmdiIj09PXU/MjU1KnBhcnNlRmxvYXQodCkvMTAwOnBhcnNlRmxvYXQodCk7aWYoImgiPT09dVtlXSl7aWYoL2RlZyQvLnRlc3QodCkpcmV0dXJuIHBhcnNlRmxvYXQodCk7aWYodm9pZCAwIT09b1t0XSlyZXR1cm4gb1t0XX1yZXR1cm4gcGFyc2VGbG9hdCh0KX0pLHA9PT11JiZsLnB1c2goMSksYz12b2lkIDA9PT1sW2ZdPzE6bFtmXSxsPWwuc2xpY2UoMCxmKX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcc3xcLykvLnRlc3QodCkmJihsPXQubWF0Y2goLyhbMC05XSspL2cpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pLHM9dC5tYXRjaCgvKFthLXpdKS9naSkuam9pbigiIikudG9Mb3dlckNhc2UoKSk7ZWxzZSBpZihpc05hTih0KSlpZihpKHQpKXt2YXIgZD1hKHQucix0LnJlZCx0LlIsbnVsbCk7bnVsbCE9PWQ/KHM9InJnYiIsbD1bZCxhKHQuZyx0LmdyZWVuLHQuRyksYSh0LmIsdC5ibHVlLHQuQildKToocz0iaHNsIixsPVthKHQuaCx0Lmh1ZSx0LkgpLGEodC5zLHQuc2F0dXJhdGlvbix0LlMpLGEodC5sLHQubGlnaHRuZXNzLHQuTCx0LmIsdC5icmlnaHRuZXNzKV0pLGM9YSh0LmEsdC5hbHBoYSx0Lm9wYWNpdHksMSksbnVsbCE9dC5vcGFjaXR5JiYoYy89MTAwKX1lbHNlKEFycmF5LmlzQXJyYXkodCl8fHIuQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpKSYmKGw9W3RbMF0sdFsxXSx0WzJdXSxzPSJyZ2IiLGM9ND09PXQubGVuZ3RoP3RbM106MSk7ZWxzZSBzPSJyZ2IiLGw9W3Q+Pj4xNiwoNjUyODAmdCk+Pj44LDI1NSZ0XTtyZXR1cm57c3BhY2U6cyx2YWx1ZXM6bCxhbHBoYTpjfX07dmFyIG89e3JlZDowLG9yYW5nZTo2MCx5ZWxsb3c6MTIwLGdyZWVuOjE4MCxibHVlOjI0MCxwdXJwbGU6MzAwfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJjb2xvci1uYW1lIjoxMDksZGVmaW5lZDoxNTUsImlzLXBsYWluLW9iaiI6NDE0fV0sMTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLXBhcnNlIiksaT10KCJjb2xvci1zcGFjZS9oc2wiKSxhPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9bih0KTtyZXR1cm4gci5zcGFjZT8oKGU9QXJyYXkoMykpWzBdPWEoci52YWx1ZXNbMF0sMCwyNTUpLGVbMV09YShyLnZhbHVlc1sxXSwwLDI1NSksZVsyXT1hKHIudmFsdWVzWzJdLDAsMjU1KSwiaCI9PT1yLnNwYWNlWzBdJiYoZT1pLnJnYihlKSksZS5wdXNoKGEoci5hbHBoYSwwLDEpKSxlKTpbXX19LHtjbGFtcDoxMDUsImNvbG9yLXBhcnNlIjoxMTEsImNvbG9yLXNwYWNlL2hzbCI6MTEzfV0sMTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcmdiIik7ZS5leHBvcnRzPXtuYW1lOiJoc2wiLG1pbjpbMCwwLDBdLG1heDpbMzYwLDEwMCwxMDBdLGNoYW5uZWw6WyJodWUiLCJzYXR1cmF0aW9uIiwibGlnaHRuZXNzIl0sYWxpYXM6WyJIU0wiXSxyZ2I6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRbMF0vMzYwLHM9dFsxXS8xMDAsbD10WzJdLzEwMDtpZigwPT09cylyZXR1cm5bYT0yNTUqbCxhLGFdO2U9MipsLShyPWw8LjU/bCooMStzKTpsK3MtbCpzKSxpPVswLDAsMF07Zm9yKHZhciBjPTA7YzwzO2MrKykobj1vKzEvMyotKGMtMSkpPDA/bisrOm4+MSYmbi0tLGE9NipuPDE/ZSs2KihyLWUpKm46MipuPDE/cjozKm48Mj9lKyhyLWUpKigyLzMtbikqNjplLGlbY109MjU1KmE7cmV0dXJuIGl9fSxuLmhzbD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dFswXS8yNTUsaT10WzFdLzI1NSxhPXRbMl0vMjU1LG89TWF0aC5taW4obixpLGEpLHM9TWF0aC5tYXgobixpLGEpLGw9cy1vO3JldHVybiBzPT09bz9lPTA6bj09PXM/ZT0oaS1hKS9sOmk9PT1zP2U9MisoYS1uKS9sOmE9PT1zJiYoZT00KyhuLWkpL2wpLChlPU1hdGgubWluKDYwKmUsMzYwKSk8MCYmKGUrPTM2MCkscj0obytzKS8yLFtlLDEwMCoocz09PW8/MDpyPD0uNT9sLyhzK28pOmwvKDItcy1vKSksMTAwKnJdfX0seyIuL3JnYiI6MTE0fV0sMTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmdiIixtaW46WzAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1XSxjaGFubmVsOlsicmVkIiwiZ3JlZW4iLCJibHVlIl0sYWxpYXM6WyJSR0IiXX19LHt9XSwxMTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzAsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMjU1XX1dLHNwcmluZzpbe2luZGV4OjAscmdiOlsyNTUsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSxzdW1tZXI6W3tpbmRleDowLHJnYjpbMCwxMjgsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDEwMl19XSxhdXR1bW46W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHdpbnRlcjpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlswLDI1NSwxMjhdfV0sYm9uZTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMzc2LHJnYjpbODQsODQsMTE2XX0se2luZGV4Oi43NTMscmdiOlsxNjksMjAwLDIwMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29wcGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi44MDQscmdiOlsyNTUsMTYwLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDE5OSwxMjddfV0sZ3JleXM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLHlpZ25idTpbe2luZGV4OjAscmdiOls4LDI5LDg4XX0se2luZGV4Oi4xMjUscmdiOlszNyw1MiwxNDhdfSx7aW5kZXg6LjI1LHJnYjpbMzQsOTQsMTY4XX0se2luZGV4Oi4zNzUscmdiOlsyOSwxNDUsMTkyXX0se2luZGV4Oi41LHJnYjpbNjUsMTgyLDE5Nl19LHtpbmRleDouNjI1LHJnYjpbMTI3LDIwNSwxODddfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxODBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIzNywyNDgsMjE3XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIxN119XSxncmVlbnM6W3tpbmRleDowLHJnYjpbMCw2OCwyN119LHtpbmRleDouMTI1LHJnYjpbMCwxMDksNDRdfSx7aW5kZXg6LjI1LHJnYjpbMzUsMTM5LDY5XX0se2luZGV4Oi4zNzUscmdiOls2NSwxNzEsOTNdfSx7aW5kZXg6LjUscmdiOlsxMTYsMTk2LDExOF19LHtpbmRleDouNjI1LHJnYjpbMTYxLDIxNywxNTVdfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxOTJdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIyOSwyNDUsMjI0XX0se2luZGV4OjEscmdiOlsyNDcsMjUyLDI0NV19XSx5aW9ycmQ6W3tpbmRleDowLHJnYjpbMTI4LDAsMzhdfSx7aW5kZXg6LjEyNSxyZ2I6WzE4OSwwLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzIyNywyNiwyOF19LHtpbmRleDouMzc1LHJnYjpbMjUyLDc4LDQyXX0se2luZGV4Oi41LHJnYjpbMjUzLDE0MSw2MF19LHtpbmRleDouNjI1LHJnYjpbMjU0LDE3OCw3Nl19LHtpbmRleDouNzUscmdiOlsyNTQsMjE3LDExOF19LHtpbmRleDouODc1LHJnYjpbMjU1LDIzNywxNjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjA0XX1dLGJsdWVyZWQ6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyZGJ1Olt7aW5kZXg6MCxyZ2I6WzUsMTAsMTcyXX0se2luZGV4Oi4zNSxyZ2I6WzEwNiwxMzcsMjQ3XX0se2luZGV4Oi41LHJnYjpbMTkwLDE5MCwxOTBdfSx7aW5kZXg6LjYscmdiOlsyMjAsMTcwLDEzMl19LHtpbmRleDouNyxyZ2I6WzIzMCwxNDUsOTBdfSx7aW5kZXg6MSxyZ2I6WzE3OCwxMCwyOF19XSxwaWNuaWM6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDouMSxyZ2I6WzUxLDE1MywyNTVdfSx7aW5kZXg6LjIscmdiOlsxMDIsMjA0LDI1NV19LHtpbmRleDouMyxyZ2I6WzE1MywyMDQsMjU1XX0se2luZGV4Oi40LHJnYjpbMjA0LDIwNCwyNTVdfSx7aW5kZXg6LjUscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDouNixyZ2I6WzI1NSwyMDQsMjU1XX0se2luZGV4Oi43LHJnYjpbMjU1LDE1MywyNTVdfSx7aW5kZXg6LjgscmdiOlsyNTUsMTAyLDIwNF19LHtpbmRleDouOSxyZ2I6WzI1NSwxMDIsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJhaW5ib3c6W3tpbmRleDowLHJnYjpbMTUwLDAsOTBdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMCwyMDBdfSx7aW5kZXg6LjI1LHJnYjpbMCwyNSwyNTVdfSx7aW5kZXg6LjM3NSxyZ2I6WzAsMTUyLDI1NV19LHtpbmRleDouNSxyZ2I6WzQ0LDI1NSwxNTBdfSx7aW5kZXg6LjYyNSxyZ2I6WzE1MSwyNTUsMF19LHtpbmRleDouNzUscmdiOlsyNTUsMjM0LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwxMTEsMF19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxwb3J0bGFuZDpbe2luZGV4OjAscmdiOlsxMiw1MSwxMzFdfSx7aW5kZXg6LjI1LHJnYjpbMTAsMTM2LDE4Nl19LHtpbmRleDouNSxyZ2I6WzI0MiwyMTEsNTZdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0Myw1Nl19LHtpbmRleDoxLHJnYjpbMjE3LDMwLDMwXX1dLGJsYWNrYm9keTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMixyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjEwLDBdfSx7aW5kZXg6LjcscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMTYwLDIwMCwyNTVdfV0sZWFydGg6W3tpbmRleDowLHJnYjpbMCwwLDEzMF19LHtpbmRleDouMSxyZ2I6WzAsMTgwLDE4MF19LHtpbmRleDouMixyZ2I6WzQwLDIxMCw0MF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMzAsNTBdfSx7aW5kZXg6LjYscmdiOlsxMjAsNzAsMjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGVsZWN0cmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4xNSxyZ2I6WzMwLDAsMTAwXX0se2luZGV4Oi40LHJnYjpbMTIwLDAsMTAwXX0se2luZGV4Oi42LHJnYjpbMTYwLDkwLDBdfSx7aW5kZXg6LjgscmdiOlsyMzAsMjAwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTAsMjIwXX1dLGFscGhhOlt7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1LDFdfV0sdmlyaWRpczpbe2luZGV4OjAscmdiOls2OCwxLDg0XX0se2luZGV4Oi4xMyxyZ2I6WzcxLDQ0LDEyMl19LHtpbmRleDouMjUscmdiOls1OSw4MSwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNDQsMTEzLDE0Ml19LHtpbmRleDouNSxyZ2I6WzMzLDE0NCwxNDFdfSx7aW5kZXg6LjYzLHJnYjpbMzksMTczLDEyOV19LHtpbmRleDouNzUscmdiOls5MiwyMDAsOTldfSx7aW5kZXg6Ljg4LHJnYjpbMTcwLDIyMCw1MF19LHtpbmRleDoxLHJnYjpbMjUzLDIzMSwzN119XSxpbmZlcm5vOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzMxLDEyLDcyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDE1LDEwOV19LHtpbmRleDouMzgscmdiOlsxMzYsMzQsMTA2XX0se2luZGV4Oi41LHJnYjpbMTg2LDU0LDg1XX0se2luZGV4Oi42MyxyZ2I6WzIyNyw4OSw1MV19LHtpbmRleDouNzUscmdiOlsyNDksMTQwLDEwXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwyMDEsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTUsMTY0XX1dLG1hZ21hOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzI4LDE2LDY4XX0se2luZGV4Oi4yNSxyZ2I6Wzc5LDE4LDEyM119LHtpbmRleDouMzgscmdiOlsxMjksMzcsMTI5XX0se2luZGV4Oi41LHJnYjpbMTgxLDU0LDEyMl19LHtpbmRleDouNjMscmdiOlsyMjksODAsMTAwXX0se2luZGV4Oi43NSxyZ2I6WzI1MSwxMzUsOTddfSx7aW5kZXg6Ljg4LHJnYjpbMjU0LDE5NCwxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTMsMTkxXX1dLHBsYXNtYTpbe2luZGV4OjAscmdiOlsxMyw4LDEzNV19LHtpbmRleDouMTMscmdiOls3NSwzLDE2MV19LHtpbmRleDouMjUscmdiOlsxMjUsMywxNjhdfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDM0LDE1MF19LHtpbmRleDouNSxyZ2I6WzIwMyw3MCwxMjFdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDEwNyw5M119LHtpbmRleDouNzUscmdiOlsyNDgsMTQ4LDY1XX0se2luZGV4Oi44OCxyZ2I6WzI1MywxOTUsNDBdfSx7aW5kZXg6MSxyZ2I6WzI0MCwyNDksMzNdfV0sd2FybTpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTcyLDAsMTg3XX0se2luZGV4Oi4yNSxyZ2I6WzIxOSwwLDE3MF19LHtpbmRleDouMzgscmdiOlsyNTUsMCwxMzBdfSx7aW5kZXg6LjUscmdiOlsyNTUsNjMsNzRdfSx7aW5kZXg6LjYzLHJnYjpbMjU1LDEyMywwXX0se2luZGV4Oi43NSxyZ2I6WzIzNCwxNzYsMF19LHtpbmRleDouODgscmdiOlsxOTAsMjI4LDBdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxMTYsMCwyMThdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNzQsMjM3XX0se2luZGV4Oi4zOCxyZ2I6WzY4LDE0NiwyMzFdfSx7aW5kZXg6LjUscmdiOlswLDIwNCwxOTddfSx7aW5kZXg6LjYzLHJnYjpbMCwyNDcsMTQ2XX0se2luZGV4Oi43NSxyZ2I6WzAsMjU1LDg4XX0se2luZGV4Oi44OCxyZ2I6WzQwLDI1NSw4XX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sInJhaW5ib3ctc29mdCI6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xLHJnYjpbMTk5LDAsMTgwXX0se2luZGV4Oi4yLHJnYjpbMjU1LDAsMTIxXX0se2luZGV4Oi4zLHJnYjpbMjU1LDEwOCwwXX0se2luZGV4Oi40LHJnYjpbMjIyLDE5NCwwXX0se2luZGV4Oi41LHJnYjpbMTUwLDI1NSwwXX0se2luZGV4Oi42LHJnYjpbMCwyNTUsNTVdfSx7aW5kZXg6LjcscmdiOlswLDI0NiwxNTBdfSx7aW5kZXg6LjgscmdiOls1MCwxNjcsMjIyXX0se2luZGV4Oi45LHJnYjpbMTAzLDUxLDIzNV19LHtpbmRleDoxLHJnYjpbMTI0LDAsMTg2XX1dLGJhdGh5bWV0cnk6W3tpbmRleDowLHJnYjpbNDAsMjYsNDRdfSx7aW5kZXg6LjEzLHJnYjpbNTksNDksOTBdfSx7aW5kZXg6LjI1LHJnYjpbNjQsNzYsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzYzLDExMCwxNTFdfSx7aW5kZXg6LjUscmdiOls3MiwxNDIsMTU4XX0se2luZGV4Oi42MyxyZ2I6Wzg1LDE3NCwxNjNdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwNiwxNjNdfSx7aW5kZXg6Ljg4LHJnYjpbMTg3LDIzMCwxNzJdfSx7aW5kZXg6MSxyZ2I6WzI1MywyNTQsMjA0XX1dLGNkb206W3tpbmRleDowLHJnYjpbNDcsMTUsNjJdfSx7aW5kZXg6LjEzLHJnYjpbODcsMjMsODZdfSx7aW5kZXg6LjI1LHJnYjpbMTMwLDI4LDk5XX0se2luZGV4Oi4zOCxyZ2I6WzE3MSw0MSw5Nl19LHtpbmRleDouNSxyZ2I6WzIwNiw2Nyw4Nl19LHtpbmRleDouNjMscmdiOlsyMzAsMTA2LDg0XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDksMTAzXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTMsMTM1XX0se2luZGV4OjEscmdiOlsyNTQsMjM3LDE3Nl19XSxjaGxvcm9waHlsbDpbe2luZGV4OjAscmdiOlsxOCwzNiwyMF19LHtpbmRleDouMTMscmdiOlsyNSw2Myw0MV19LHtpbmRleDouMjUscmdiOlsyNCw5MSw1OV19LHtpbmRleDouMzgscmdiOlsxMywxMTksNzJdfSx7aW5kZXg6LjUscmdiOlsxOCwxNDgsODBdfSx7aW5kZXg6LjYzLHJnYjpbODAsMTczLDg5XX0se2luZGV4Oi43NSxyZ2I6WzEzMiwxOTYsMTIyXX0se2luZGV4Oi44OCxyZ2I6WzE3NSwyMjEsMTYyXX0se2luZGV4OjEscmdiOlsyMTUsMjQ5LDIwOF19XSxkZW5zaXR5Olt7aW5kZXg6MCxyZ2I6WzU0LDE0LDM2XX0se2luZGV4Oi4xMyxyZ2I6Wzg5LDIzLDgwXX0se2luZGV4Oi4yNSxyZ2I6WzExMCw0NSwxMzJdfSx7aW5kZXg6LjM4LHJnYjpbMTIwLDc3LDE3OF19LHtpbmRleDouNSxyZ2I6WzEyMCwxMTMsMjEzXX0se2luZGV4Oi42MyxyZ2I6WzExNSwxNTEsMjI4XX0se2luZGV4Oi43NSxyZ2I6WzEzNCwxODUsMjI3XX0se2luZGV4Oi44OCxyZ2I6WzE3NywyMTQsMjI3XX0se2luZGV4OjEscmdiOlsyMzAsMjQxLDI0MV19XSwiZnJlZXN1cmZhY2UtYmx1ZSI6W3tpbmRleDowLHJnYjpbMzAsNCwxMTBdfSx7aW5kZXg6LjEzLHJnYjpbNDcsMTQsMTc2XX0se2luZGV4Oi4yNSxyZ2I6WzQxLDQ1LDIzNl19LHtpbmRleDouMzgscmdiOlsyNSw5OSwyMTJdfSx7aW5kZXg6LjUscmdiOls2OCwxMzEsMjAwXX0se2luZGV4Oi42MyxyZ2I6WzExNCwxNTYsMTk3XX0se2luZGV4Oi43NSxyZ2I6WzE1NywxODEsMjAzXX0se2luZGV4Oi44OCxyZ2I6WzIwMCwyMDgsMjE2XX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSwiZnJlZXN1cmZhY2UtcmVkIjpbe2luZGV4OjAscmdiOls2MCw5LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzEwMCwxNywyN119LHtpbmRleDouMjUscmdiOlsxNDIsMjAsMjldfSx7aW5kZXg6LjM4LHJnYjpbMTc3LDQzLDI3XX0se2luZGV4Oi41LHJnYjpbMTkyLDg3LDYzXX0se2luZGV4Oi42MyxyZ2I6WzIwNSwxMjUsMTA1XX0se2luZGV4Oi43NSxyZ2I6WzIxNiwxNjIsMTQ4XX0se2luZGV4Oi44OCxyZ2I6WzIyNywxOTksMTkzXX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSxveHlnZW46W3tpbmRleDowLHJnYjpbNjQsNSw1XX0se2luZGV4Oi4xMyxyZ2I6WzEwNiw2LDE1XX0se2luZGV4Oi4yNSxyZ2I6WzE0NCwyNiw3XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCw2NCwzXX0se2luZGV4Oi41LHJnYjpbMTg4LDEwMCw0XX0se2luZGV4Oi42MyxyZ2I6WzIwNiwxMzYsMTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjIwLDE3NCwyNV19LHtpbmRleDouODgscmdiOlsyMzEsMjE1LDQ0XX0se2luZGV4OjEscmdiOlsyNDgsMjU0LDEwNV19XSxwYXI6W3tpbmRleDowLHJnYjpbNTEsMjAsMjRdfSx7aW5kZXg6LjEzLHJnYjpbOTAsMzIsMzVdfSx7aW5kZXg6LjI1LHJnYjpbMTI5LDQ0LDM0XX0se2luZGV4Oi4zOCxyZ2I6WzE1OSw2OCwyNV19LHtpbmRleDouNSxyZ2I6WzE4Miw5OSwxOV19LHtpbmRleDouNjMscmdiOlsxOTksMTM0LDIyXX0se2luZGV4Oi43NSxyZ2I6WzIxMiwxNzEsMzVdfSx7aW5kZXg6Ljg4LHJnYjpbMjIxLDIxMCw1NF19LHtpbmRleDoxLHJnYjpbMjI1LDI1Myw3NV19XSxwaGFzZTpbe2luZGV4OjAscmdiOlsxNDUsMTA1LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzE4NCw3MSwzOF19LHtpbmRleDouMjUscmdiOlsxODYsNTgsMTE1XX0se2luZGV4Oi4zOCxyZ2I6WzE2MCw3MSwxODVdfSx7aW5kZXg6LjUscmdiOlsxMTAsOTcsMjE4XX0se2luZGV4Oi42MyxyZ2I6WzUwLDEyMywxNjRdfSx7aW5kZXg6Ljc1LHJnYjpbMzEsMTMxLDExMF19LHtpbmRleDouODgscmdiOls3NywxMjksMzRdfSx7aW5kZXg6MSxyZ2I6WzE0NSwxMDUsMThdfV0sc2FsaW5pdHk6W3tpbmRleDowLHJnYjpbNDIsMjQsMTA4XX0se2luZGV4Oi4xMyxyZ2I6WzMzLDUwLDE2Ml19LHtpbmRleDouMjUscmdiOlsxNSw5MCwxNDVdfSx7aW5kZXg6LjM4LHJnYjpbNDAsMTE4LDEzN119LHtpbmRleDouNSxyZ2I6WzU5LDE0NiwxMzVdfSx7aW5kZXg6LjYzLHJnYjpbNzksMTc1LDEyNl19LHtpbmRleDouNzUscmdiOlsxMjAsMjAzLDEwNF19LHtpbmRleDouODgscmdiOlsxOTMsMjIxLDEwMF19LHtpbmRleDoxLHJnYjpbMjUzLDIzOSwxNTRdfV0sdGVtcGVyYXR1cmU6W3tpbmRleDowLHJnYjpbNCwzNSw1MV19LHtpbmRleDouMTMscmdiOlsyMyw1MSwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbODUsNTksMTU3XX0se2luZGV4Oi4zOCxyZ2I6WzEyOSw3OSwxNDNdfSx7aW5kZXg6LjUscmdiOlsxNzUsOTUsMTMwXX0se2luZGV4Oi42MyxyZ2I6WzIyMiwxMTIsMTAxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDYsNjZdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5Niw2NV19LHtpbmRleDoxLHJnYjpbMjMyLDI1MCw5MV19XSx0dXJiaWRpdHk6W3tpbmRleDowLHJnYjpbMzQsMzEsMjddfSx7aW5kZXg6LjEzLHJnYjpbNjUsNTAsNDFdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNjksNTJdfSx7aW5kZXg6LjM4LHJnYjpbMTMxLDg5LDU3XX0se2luZGV4Oi41LHJnYjpbMTYxLDExMiw1OV19LHtpbmRleDouNjMscmdiOlsxODUsMTQwLDY2XX0se2luZGV4Oi43NSxyZ2I6WzIwMiwxNzQsODhdfSx7aW5kZXg6Ljg4LHJnYjpbMjE2LDIwOSwxMjZdfSx7aW5kZXg6MSxyZ2I6WzIzMywyNDYsMTcxXX1dLCJ2ZWxvY2l0eS1ibHVlIjpbe2luZGV4OjAscmdiOlsxNywzMiw2NF19LHtpbmRleDouMTMscmdiOlszNSw1MiwxMTZdfSx7aW5kZXg6LjI1LHJnYjpbMjksODEsMTU2XX0se2luZGV4Oi4zOCxyZ2I6WzMxLDExMywxNjJdfSx7aW5kZXg6LjUscmdiOls1MCwxNDQsMTY5XX0se2luZGV4Oi42MyxyZ2I6Wzg3LDE3MywxNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMTQ5LDE5NiwxODldfSx7aW5kZXg6Ljg4LHJnYjpbMjAzLDIyMSwyMTFdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyNTEsMjMwXX1dLCJ2ZWxvY2l0eS1ncmVlbiI6W3tpbmRleDowLHJnYjpbMjMsMzUsMTldfSx7aW5kZXg6LjEzLHJnYjpbMjQsNjQsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTEsOTUsNDVdfSx7aW5kZXg6LjM4LHJnYjpbMzksMTIzLDM1XX0se2luZGV4Oi41LHJnYjpbOTUsMTQ2LDEyXX0se2luZGV4Oi42MyxyZ2I6WzE1MiwxNjUsMThdfSx7aW5kZXg6Ljc1LHJnYjpbMjAxLDE4Niw2OV19LHtpbmRleDouODgscmdiOlsyMzMsMjE2LDEzN119LHtpbmRleDoxLHJnYjpbMjU1LDI1MywyMDVdfV0sY3ViZWhlbGl4Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4wNyxyZ2I6WzIyLDUsNTldfSx7aW5kZXg6LjEzLHJnYjpbNjAsNCwxMDVdfSx7aW5kZXg6LjIscmdiOlsxMDksMSwxMzVdfSx7aW5kZXg6LjI3LHJnYjpbMTYxLDAsMTQ3XX0se2luZGV4Oi4zMyxyZ2I6WzIxMCwyLDE0Ml19LHtpbmRleDouNCxyZ2I6WzI1MSwxMSwxMjNdfSx7aW5kZXg6LjQ3LHJnYjpbMjU1LDI5LDk3XX0se2luZGV4Oi41MyxyZ2I6WzI1NSw1NCw2OV19LHtpbmRleDouNixyZ2I6WzI1NSw4NSw0Nl19LHtpbmRleDouNjcscmdiOlsyNTUsMTIwLDM0XX0se2luZGV4Oi43MyxyZ2I6WzI1NSwxNTcsMzddfSx7aW5kZXg6LjgscmdiOlsyNDEsMTkxLDU3XX0se2luZGV4Oi44NyxyZ2I6WzIyNCwyMjAsOTNdfSx7aW5kZXg6LjkzLHJnYjpbMjE4LDI0MSwxNDJdfSx7aW5kZXg6MSxyZ2I6WzIyNywyNTMsMTk4XX1dfX0se31dLDExNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbG9yU2NhbGUiKSxpPXQoImxlcnAiKTtmdW5jdGlvbiBhKHQpe3JldHVyblt0WzBdLzI1NSx0WzFdLzI1NSx0WzJdLzI1NSx0WzNdXX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZSxyPSIjIixuPTA7bjwzOysrbilyKz0oIjAwIisoZT0oZT10W25dKS50b1N0cmluZygxNikpKS5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiByfWZ1bmN0aW9uIHModCl7cmV0dXJuInJnYmEoIit0LmpvaW4oIiwiKSsiKSJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHUsZixoLHAsZCxnO3R8fCh0PXt9KTtwPSh0Lm5zaGFkZXN8fDcyKS0xLGg9dC5mb3JtYXR8fCJoZXgiLChmPXQuY29sb3JtYXApfHwoZj0iamV0Iik7aWYoInN0cmluZyI9PXR5cGVvZiBmKXtpZihmPWYudG9Mb3dlckNhc2UoKSwhbltmXSl0aHJvdyBFcnJvcihmKyIgbm90IGEgc3VwcG9ydGVkIGNvbG9yc2NhbGUiKTt1PW5bZl19ZWxzZXtpZighQXJyYXkuaXNBcnJheShmKSl0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgY29sb3JtYXAgb3B0aW9uIixmKTt1PWYuc2xpY2UoKX1pZih1Lmxlbmd0aD5wKzEpdGhyb3cgbmV3IEVycm9yKGYrIiBtYXAgcmVxdWlyZXMgbnNoYWRlcyB0byBiZSBhdCBsZWFzdCBzaXplICIrdS5sZW5ndGgpO2Q9QXJyYXkuaXNBcnJheSh0LmFscGhhKT8yIT09dC5hbHBoYS5sZW5ndGg/WzEsMV06dC5hbHBoYS5zbGljZSgpOiJudW1iZXIiPT10eXBlb2YgdC5hbHBoYT9bdC5hbHBoYSx0LmFscGhhXTpbMSwxXTtlPXUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQuaW5kZXgqcCl9KSxkWzBdPU1hdGgubWluKE1hdGgubWF4KGRbMF0sMCksMSksZFsxXT1NYXRoLm1pbihNYXRoLm1heChkWzFdLDApLDEpO3ZhciB2PXUubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dVtlXS5pbmRleCxuPXVbZV0ucmdiLnNsaWNlKCk7cmV0dXJuIDQ9PT1uLmxlbmd0aCYmblszXT49MCYmblszXTw9MT9uOihuWzNdPWRbMF0rKGRbMV0tZFswXSkqcixuKX0pLG09W107Zm9yKGc9MDtnPGUubGVuZ3RoLTE7KytnKXtjPWVbZysxXS1lW2ddLHI9dltnXSxsPXZbZysxXTtmb3IodmFyIHk9MDt5PGM7eSsrKXt2YXIgeD15L2M7bS5wdXNoKFtNYXRoLnJvdW5kKGkoclswXSxsWzBdLHgpKSxNYXRoLnJvdW5kKGkoclsxXSxsWzFdLHgpKSxNYXRoLnJvdW5kKGkoclsyXSxsWzJdLHgpKSxpKHJbM10sbFszXSx4KV0pfX1tLnB1c2godVt1Lmxlbmd0aC0xXS5yZ2IuY29uY2F0KGRbMV0pKSwiaGV4Ij09PWg/bT1tLm1hcChvKToicmdiYVN0cmluZyI9PT1oP209bS5tYXAocyk6ImZsb2F0Ij09PWgmJihtPW0ubWFwKGEpKTtyZXR1cm4gbX19LHsiLi9jb2xvclNjYWxlIjoxMTUsbGVycDo0MTd9XSwxMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4oZSxyLGEpO2lmKDA9PT1vKXt2YXIgcz1pKG4odCxlLHIpKSxjPWkobih0LGUsYSkpO2lmKHM9PT1jKXtpZigwPT09cyl7dmFyIHU9bCh0LGUsciksZj1sKHQsZSxhKTtyZXR1cm4gdT09PWY/MDp1PzE6LTF9cmV0dXJuIDB9cmV0dXJuIDA9PT1jP3M+MD8tMTpsKHQsZSxhKT8tMToxOjA9PT1zP2M+MD8xOmwodCxlLHIpPzE6LTE6aShjLXMpfXZhciBoPW4odCxlLHIpO2lmKGg+MClyZXR1cm4gbz4wJiZuKHQsZSxhKT4wPzE6LTE7aWYoaDwwKXJldHVybiBvPjB8fG4odCxlLGEpPjA/MTotMTt2YXIgcD1uKHQsZSxhKTtyZXR1cm4gcD4wPzE6bCh0LGUscik/MTotMX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaWdudW0iKSxhPXQoInR3by1zdW0iKSxvPXQoInJvYnVzdC1wcm9kdWN0Iikscz10KCJyb2J1c3Qtc3VtIik7ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49YSh0WzBdLC1lWzBdKSxpPWEodFsxXSwtZVsxXSksbD1hKHJbMF0sLWVbMF0pLGM9YShyWzFdLC1lWzFdKSx1PXMobyhuLGwpLG8oaSxjKSk7cmV0dXJuIHVbdS5sZW5ndGgtMV0+PTB9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NDk0LCJyb2J1c3QtcHJvZHVjdCI6NDk1LCJyb2J1c3Qtc3VtIjo0OTksc2lnbnVtOjUwMCwidHdvLXN1bSI6NTI4fV0sMTE4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgsYT10Lmxlbmd0aC1lLmxlbmd0aDtpZihhKXJldHVybiBhO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybiB0WzBdK3RbMV0tZVswXS1lWzFdfHxuKHRbMF0sdFsxXSktbihlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgbz10WzBdK3RbMV0scz1lWzBdK2VbMV07aWYoYT1vK3RbMl0tKHMrZVsyXSkpcmV0dXJuIGE7dmFyIGw9bih0WzBdLHRbMV0pLGM9bihlWzBdLGVbMV0pO3JldHVybiBuKGwsdFsyXSktbihjLGVbMl0pfHxuKGwrdFsyXSxvKS1uKGMrZVsyXSxzKTtjYXNlIDQ6dmFyIHU9dFswXSxmPXRbMV0saD10WzJdLHA9dFszXSxkPWVbMF0sZz1lWzFdLHY9ZVsyXSxtPWVbM107cmV0dXJuIHUrZitoK3AtKGQrZyt2K20pfHxuKHUsZixoLHApLW4oZCxnLHYsbSxkKXx8bih1K2YsdStoLHUrcCxmK2gsZitwLGgrcCktbihkK2csZCt2LGQrbSxnK3YsZyttLHYrbSl8fG4odStmK2gsdStmK3AsdStoK3AsZitoK3ApLW4oZCtnK3YsZCtnK20sZCt2K20sZyt2K20pO2RlZmF1bHQ6Zm9yKHZhciB5PXQuc2xpY2UoKS5zb3J0KGkpLHg9ZS5zbGljZSgpLnNvcnQoaSksYj0wO2I8cjsrK2IpaWYoYT15W2JdLXhbYl0pcmV0dXJuIGE7cmV0dXJuIDB9fTt2YXIgbj1NYXRoLm1pbjtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZX19LHt9XSwxMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksaT10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKXx8aSh0KS1pKGUpfX0seyJjZWxsLW9yaWVudGF0aW9uIjoxMDIsImNvbXBhcmUtY2VsbCI6MTE4fV0sMTIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NoMWQiKSxpPXQoIi4vbGliL2NoMmQiKSxhPXQoIi4vbGliL2NobmQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuW1swXV07dmFyIHI9dFswXS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107aWYoMT09PXIpcmV0dXJuIG4odCk7aWYoMj09PXIpcmV0dXJuIGkodCk7cmV0dXJuIGEodCxyKX19LHsiLi9saWIvY2gxZCI6MTIxLCIuL2xpYi9jaDJkIjoxMjIsIi4vbGliL2NobmQiOjEyM31dLDEyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49MTtuPHQubGVuZ3RoOysrbil0W25dWzBdPHRbZV1bMF0mJihlPW4pLHRbbl1bMF0+dFtyXVswXSYmKHI9bik7cmV0dXJuIGU8cj9bW2VdLFtyXV06ZT5yP1tbcl0sW2VdXTpbW2VdXX19LHt9XSwxMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1lLmxlbmd0aDtpZihyPD0yKXJldHVybltdO2Zvcih2YXIgaT1uZXcgQXJyYXkociksYT1lW3ItMV0sbz0wO288cjsrK28pe3ZhciBzPWVbb107aVtvXT1bYSxzXSxhPXN9cmV0dXJuIGl9O3ZhciBuPXQoIm1vbm90b25lLWNvbnZleC1odWxsLTJkIil9LHsibW9ub3RvbmUtY29udmV4LWh1bGwtMmQiOjQyNn1dLDEyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIG4odCwhMCl9Y2F0Y2gocyl7dmFyIHI9aSh0KTtpZihyLmxlbmd0aDw9ZSlyZXR1cm5bXTt2YXIgYT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxlLmxlbmd0aDsrK2kpbltpXT10W2VbaV1dO2Zvcih2YXIgYT1lLmxlbmd0aCxpPTA7aTxyOysraSllLmluZGV4T2YoaSk8MCYmKG5bYSsrXT10W2ldKTtyZXR1cm4gbn0odCxyKSxvPW4oYSwhMCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288YS5sZW5ndGg7KytvKXt2YXIgcz1hW29dO2lmKHM8bilhW29dPWVbc107ZWxzZXtzLT1uO2Zvcih2YXIgbD0wO2w8bjsrK2wpcz49ZVtsXSYmKHMrPTEpO2Fbb109c319cmV0dXJuIHR9KG8scil9fTt2YXIgbj10KCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCIpLGk9dCgiYWZmaW5lLWh1bGwiKX0seyJhZmZpbmUtaHVsbCI6NTIsImluY3JlbWVudGFsLWNvbnZleC1odWxsIjo0MDV9XSwxMjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0FGRzoiYWZnaGFuIixBTEE6IlxcYlxcd2xhbmQiLEFMQjoiYWxiYW5pYSIsRFpBOiJhbGdlcmlhIixBU006Il4oPz0uKmFtZXJpYykuKnNhbW9hIixBTkQ6ImFuZG9ycmEiLEFHTzoiYW5nb2xhIixBSUE6ImFuZ3VpbGw/YSIsQVRBOiJhbnRhcmN0aWNhIixBVEc6ImFudGlndWEiLEFSRzoiYXJnZW50aW4iLEFSTToiYXJtZW5pYSIsQUJXOiJeKD8hLipib25haXJlKS4qXFxiYXJ1YmEiLEFVUzoiYXVzdHJhbGlhIixBVVQ6Il4oPyEuKmh1bmdhcnkpLiphdXN0cmlhfFxcYmF1c3RyaS4qXFxiZW1wIixBWkU6ImF6ZXJiYWlqYW4iLEJIUzoiYmFoYW1hcyIsQkhSOiJiYWhyYWluIixCR0Q6ImJhbmdsYWRlc2h8Xig/PS4qZWFzdCkuKnBha2k/c3RhbiIsQlJCOiJiYXJiYWRvcyIsQkxSOiJiZWxhcnVzfGJ5ZWxvIixCRUw6Il4oPyEuKmx1eGVtKS4qYmVsZ2l1bSIsQkxaOiJiZWxpemV8Xig/PS4qYnJpdGlzaCkuKmhvbmR1cmFzIixCRU46ImJlbmlufGRhaG9tZSIsQk1VOiJiZXJtdWRhIixCVE46ImJodXRhbiIsQk9MOiJib2xpdmlhIixCRVM6Il4oPz0uKmJvbmFpcmUpLipldXN0YXRpdXN8Xig/PS4qY2FyaWIpLipuZXRoZXJsYW5kc3xcXGJiZXMuP2lzbGFuZHMiLEJJSDoiaGVyemVnb3ZpbmF8Ym9zbmlhIixCV0E6ImJvdHN3YW5hfGJlY2h1YW5hIixCVlQ6ImJvdXZldCIsQlJBOiJicmF6aWwiLElPVDoiYnJpdGlzaC4/aW5kaWFuLj9vY2VhbiIsQlJOOiJicnVuZWkiLEJHUjoiYnVsZ2FyaWEiLEJGQToiYnVya2luYXxcXGJmYXNvfHVwcGVyLj92b2x0YSIsQkRJOiJidXJ1bmRpIixDUFY6InZlcmRlIixLSE06ImNhbWJvZGlhfGthbXB1Y2hlYXxraG1lciIsQ01SOiJjYW1lcm9vbiIsQ0FOOiJjYW5hZGEiLENZTToiY2F5bWFuIixDQUY6IlxcYmNlbnRyYWwuYWZyaWNhbi5yZXB1YmxpYyIsVENEOiJcXGJjaGFkIixDSEw6IlxcYmNoaWxlIixDSE46Il4oPyEuKlxcYm1hYykoPyEuKlxcYmhvbmcpKD8hLipcXGJ0YWkpKD8hLipcXGJyZXApLipjaGluYXxeKD89LipwZW8pKD89LipyZXApLipjaGluYSIsQ1hSOiJjaHJpc3RtYXMiLENDSzoiXFxiY29jb3N8a2VlbGluZyIsQ09MOiJjb2xvbWJpYSIsQ09NOiJjb21vcm8iLENPRzoiXig/IS4qXFxiZGVtKSg/IS4qXFxiZFtcXC5dP3IpKD8hLipraW5zaGFzYSkoPyEuKnphaXJlKSg/IS4qYmVsZykoPyEuKmwub3BvbGR2aWxsZSkoPyEuKmZyZWUpLipcXGJjb25nbyIsQ09LOiJcXGJjb29rIixDUkk6ImNvc3RhLj9yaWNhIixDSVY6Iml2b2lyZXxpdm9yeSIsSFJWOiJjcm9hdGlhIixDVUI6IlxcYmN1YmEiLENVVzoiXig/IS4qYm9uYWlyZSkuKlxcYmN1cmEoY3xceGU3KWFvIixDWVA6ImN5cHJ1cyIsQ1NLOiJjemVjaG9zbG92YWtpYSIsQ1pFOiJeKD89LipyZXApLipjemVjaHxjemVjaGlhfGJvaGVtaWEiLENPRDoiXFxiZGVtLipjb25nb3xjb25nby4qXFxiZGVtfGNvbmdvLipcXGJkW1xcLl0/cnxcXGJkW1xcLl0/ci4qY29uZ298YmVsZ2lhbi4/Y29uZ298Y29uZ28uP2ZyZWUuP3N0YXRlfGtpbnNoYXNhfHphaXJlfGwub3BvbGR2aWxsZXxkcmN8ZHJvY3xyZGMiLEROSzoiZGVubWFyayIsREpJOiJkamlib3V0aSIsRE1BOiJkb21pbmljYSg/IW4pIixET006ImRvbWluaWNhbi5yZXAiLEVDVToiZWN1YWRvciIsRUdZOiJlZ3lwdCIsU0xWOiJlbC4/c2FsdmFkb3IiLEdOUToiZ3VpbmUuKmVxfGVxLipndWluZXxeKD89LipzcGFuKS4qZ3VpbmVhIixFUkk6ImVyaXRyZWEiLEVTVDoiZXN0b25pYSIsRVRIOiJldGhpb3BpYXxhYnlzc2luaWEiLEZMSzoiZmFsa2xhbmR8bWFsdmluYXMiLEZSTzoiZmFyb2V8ZmFlcm9lIixGSkk6ImZpamkiLEZJTjoiZmlubGFuZCIsRlJBOiJeKD8hLipcXGJkZXApKD8hLiptYXJ0aW5pcXVlKS4qZnJhbmNlfGZyZW5jaC4/cmVwdWJsaWN8XFxiZ2F1bCIsR1VGOiJeKD89LipmcmVuY2gpLipndWlhbmEiLFBZRjoiZnJlbmNoLj9wb2x5bmVzaWF8dGFoaXRpIixBVEY6ImZyZW5jaC4/c291dGhlcm4iLEdBQjoiZ2Fib24iLEdNQjoiZ2FtYmlhIixHRU86Il4oPyEuKnNvdXRoKS4qZ2VvcmdpYSIsRERSOiJnZXJtYW4uP2RlbW9jcmF0aWMuP3JlcHVibGljfGRlbW9jcmF0aWMuP3JlcHVibGljLipnZXJtYW55fGVhc3QuZ2VybWFueSIsREVVOiJeKD8hLiplYXN0KS4qZ2VybWFueXxeKD89LipcXGJmZWQuKlxcYnJlcCkuKmdlcm1hbiIsR0hBOiJnaGFuYXxnb2xkLj9jb2FzdCIsR0lCOiJnaWJyYWx0YXIiLEdSQzoiZ3JlZWNlfGhlbGxlbmljfGhlbGxhcyIsR1JMOiJncmVlbmxhbmQiLEdSRDoiZ3JlbmFkYSIsR0xQOiJndWFkZWxvdXBlIixHVU06IlxcYmd1YW0iLEdUTToiZ3VhdGVtYWxhIixHR1k6Imd1ZXJuc2V5IixHSU46Il4oPyEuKmVxKSg/IS4qc3BhbikoPyEuKmJpc3NhdSkoPyEuKnBvcnR1KSg/IS4qbmV3KS4qZ3VpbmVhIixHTkI6ImJpc3NhdXxeKD89Lipwb3J0dSkuKmd1aW5lYSIsR1VZOiJndXlhbmF8YnJpdGlzaC4/Z3VpYW5hIixIVEk6ImhhaXRpIixITUQ6ImhlYXJkLiptY2RvbmFsZCIsVkFUOiJob2x5Lj9zZWV8dmF0aWNhbnxwYXBhbC4/c3QiLEhORDoiXig/IS4qYnJpdCkuKmhvbmR1cmFzIixIS0c6ImhvbmcuP2tvbmciLEhVTjoiXig/IS4qYXVzdHIpLipodW5nYXJ5IixJU0w6ImljZWxhbmQiLElORDoiaW5kaWEoPyEuKm9jZWEpIixJRE46ImluZG9uZXNpYSIsSVJOOiJcXGJpcmFufHBlcnNpYSIsSVJROiJcXGJpcmFxfG1lc29wb3RhbWlhIixJUkw6IiheaXJlbGFuZCl8KF5yZXB1YmxpYy4qaXJlbGFuZCkiLElNTjoiXig/PS4qaXNsZSkuKlxcYm1hbiIsSVNSOiJpc3JhZWwiLElUQToiaXRhbHkiLEpBTToiamFtYWljYSIsSlBOOiJqYXBhbiIsSkVZOiJqZXJzZXkiLEpPUjoiam9yZGFuIixLQVo6ImthemFrIixLRU46ImtlbnlhfGJyaXRpc2guP2Vhc3QuP2FmcmljYXxlYXN0Lj9hZnJpY2EuP3Byb3QiLEtJUjoia2lyaWJhdGkiLFBSSzoiXig/PS4qZGVtb2NyYXR8cGVvcGxlfG5vcnRofGQuKnAuKi5yKS4qXFxia29yZWF8ZHBya3xrb3JlYS4qKGQuKnAuKnIpIixLV1Q6Imt1d2FpdCIsS0daOiJreXJneXp8a2lyZ2hpeiIsTEFPOiJcXGJsYW9zP1xcYiIsTFZBOiJsYXR2aWEiLExCTjoibGViYW5vbiIsTFNPOiJsZXNvdGhvfGJhc3V0byIsTEJSOiJsaWJlcmlhIixMQlk6ImxpYnlhIixMSUU6ImxpZWNodGVuc3RlaW4iLExUVToibGl0aHVhbmlhIixMVVg6Il4oPyEuKmJlbGcpLipsdXhlbSIsTUFDOiJtYWNhKG98dSkiLE1ERzoibWFkYWdhc2NhcnxtYWxhZ2FzeSIsTVdJOiJtYWxhd2l8bnlhc2EiLE1ZUzoibWFsYXlzaWEiLE1EVjoibWFsZGl2ZSIsTUxJOiJcXGJtYWxpXFxiIixNTFQ6IlxcYm1hbHRhIixNSEw6Im1hcnNoYWxsIixNVFE6Im1hcnRpbmlxdWUiLE1SVDoibWF1cml0YW5pYSIsTVVTOiJtYXVyaXRpdXMiLE1ZVDoiXFxibWF5b3R0ZSIsTUVYOiJcXGJtZXhpYyIsRlNNOiJmZWQuKm1pY3JvbmVzaWF8bWljcm9uZXNpYS4qZmVkIixNQ086Im1vbmFjbyIsTU5HOiJtb25nb2xpYSIsTU5FOiJeKD8hLipzZXJiaWEpLiptb250ZW5lZ3JvIixNU1I6Im1vbnRzZXJyYXQiLE1BUjoibW9yb2Njb3xcXGJtYXJvYyIsTU9aOiJtb3phbWJpcXVlIixNTVI6Im15YW5tYXJ8YnVybWEiLE5BTToibmFtaWJpYSIsTlJVOiJuYXVydSIsTlBMOiJuZXBhbCIsTkxEOiJeKD8hLipcXGJhbnQpKD8hLipcXGJjYXJpYikuKm5ldGhlcmxhbmRzIixBTlQ6Il4oPz0uKlxcYmFudCkuKihuZXRoZXJ8ZHV0Y2gpIixOQ0w6Im5ldy4/Y2FsZWRvbmlhIixOWkw6Im5ldy4/emVhbGFuZCIsTklDOiJuaWNhcmFndWEiLE5FUjoiXFxibmlnZXIoPyFpYSkiLE5HQToibmlnZXJpYSIsTklVOiJuaXVlIixORks6Im5vcmZvbGsiLE1OUDoibWFyaWFuYSIsTk9SOiJub3J3YXkiLE9NTjoiXFxib21hbnx0cnVjaWFsIixQQUs6Il4oPyEuKmVhc3QpLipwYWtpP3N0YW4iLFBMVzoicGFsYXUiLFBTRToicGFsZXN0aW58XFxiZ2F6YXx3ZXN0Lj9iYW5rIixQQU46InBhbmFtYSIsUE5HOiJwYXB1YXxuZXcuP2d1aW5lYSIsUFJZOiJwYXJhZ3VheSIsUEVSOiJwZXJ1IixQSEw6InBoaWxpcHBpbmVzIixQQ046InBpdGNhaXJuIixQT0w6InBvbGFuZCIsUFJUOiJwb3J0dWdhbCIsUFJJOiJwdWVydG8uP3JpY28iLFFBVDoicWF0YXIiLEtPUjoiXig/IS4qZC4qcC4qcikoPyEuKmRlbW9jcmF0KSg/IS4qcGVvcGxlKSg/IS4qbm9ydGgpLipcXGJrb3JlYSg/IS4qZC4qcC4qcikiLE1EQToibW9sZG92fGIoYXxlKXNzYXJhYmlhIixSRVU6InIoZXxceGU5KXVuaW9uIixST1U6InIob3x1fG91KW1hbmlhIixSVVM6IlxcYnJ1c3NpYXxzb3ZpZXQuP3VuaW9ufHVcXC4/c1xcLj9zXFwuP3J8c29jaWFsaXN0Lj9yZXB1YmxpY3MiLFJXQToicndhbmRhIixCTE06ImJhcnRoKGV8XHhlOSlsZW15IixTSE46ImhlbGVuYSIsS05BOiJraXR0c3xcXGJuZXZpcyIsTENBOiJcXGJsdWNpYSIsTUFGOiJeKD89Lipjb2xsZWN0aXZpdHkpLiptYXJ0aW58Xig/PS4qZnJhbmNlKS4qbWFydGluKD8haXF1ZSl8Xig/PS4qZnJlbmNoKS4qbWFydGluKD8haXF1ZSkiLFNQTToibWlxdWVsb24iLFZDVDoidmluY2VudCIsV1NNOiJeKD8hLiphbWVyKS4qc2Ftb2EiLFNNUjoic2FuLj9tYXJpbm8iLFNUUDoiXFxicyhhfFx4ZTMpby4/dG9tKGV8XHhlOSkiLFNBVToiXFxic2FcXHcqLj9hcmFiaWEiLFNFTjoic2VuZWdhbCIsU1JCOiJeKD8hLiptb250ZSkuKnNlcmJpYSIsU1lDOiJzZXljaGVsbCIsU0xFOiJzaWVycmEiLFNHUDoic2luZ2Fwb3JlIixTWE06Il4oPyEuKm1hcnRpbikoPyEuKnNhYmEpLiptYWFydGVuIixTVks6Il4oPyEuKmN6ZSkuKnNsb3ZhayIsU1ZOOiJzbG92ZW5pYSIsU0xCOiJzb2xvbW9uIixTT006InNvbWFsaSIsWkFGOiJzb3V0aC5hZnJpY2F8c1xcXFwuLj9hZnJpY2EiLFNHUzoic291dGguP2dlb3JnaWF8c2FuZHdpY2giLFNTRDoiXFxic1xcdyouP3N1ZGFuIixFU1A6InNwYWluIixMS0E6InNyaS4/bGFua2F8Y2V5bG9uIixTRE46Il4oPyEuKlxcYnMoPyF1KSkuKnN1ZGFuIixTVVI6InN1cmluYW18ZHV0Y2guP2d1aWFuYSIsU0pNOiJzdmFsYmFyZCIsU1daOiJzd2F6aWxhbmQiLFNXRToic3dlZGVuIixDSEU6InN3aXR6fHN3aXNzIixTWVI6InN5cmlhIixUV046InRhaXdhbnx0YWlwZWl8Zm9ybW9zYXxeKD8hLipwZW8pKD89LipyZXApLipjaGluYSIsVEpLOiJ0YWppayIsVEhBOiJ0aGFpbGFuZHxcXGJzaWFtIixNS0Q6Im1hY2Vkb25pYXxmeXJvbSIsVExTOiJeKD89LipsZXN0ZSkuKnRpbW9yfF4oPz0uKmVhc3QpLip0aW1vciIsVEdPOiJ0b2dvIixUS0w6InRva2VsYXUiLFRPTjoidG9uZ2EiLFRUTzoidHJpbmlkYWR8dG9iYWdvIixUVU46InR1bmlzaWEiLFRVUjoidHVya2V5IixUS006InR1cmttZW4iLFRDQToidHVya3MiLFRVVjoidHV2YWx1IixVR0E6InVnYW5kYSIsVUtSOiJ1a3JhaW4iLEFSRToiZW1pcmF0ZXN8XnVcXC4/YVxcLj9lXFwuPyR8dW5pdGVkLj9hcmFiLj9lbSIsR0JSOiJ1bml0ZWQuP2tpbmdkb218YnJpdGFpbnxedVxcLj9rXFwuPyQiLFRaQToidGFuemFuaWEiLFVTQToidW5pdGVkLj9zdGF0ZXNcXGIoPyEuKmlzbGFuZHMpfFxcYnVcXC4/c1xcLj9hXFwuP1xcYnxeXFxzKnVcXC4/c1xcLj9cXGIoPyEuKmlzbGFuZHMpIixVTUk6Im1pbm9yLj9vdXRseWluZy4/aXMiLFVSWToidXJ1Z3VheSIsVVpCOiJ1emJlayIsVlVUOiJ2YW51YXR1fG5ldy4/aGVicmlkZXMiLFZFTjoidmVuZXp1ZWxhIixWTk06Il4oPyEuKnJlcHVibGljKS4qdmlldC4/bmFtfF4oPz0uKnNvY2lhbGlzdCkuKnZpZXQuP25hbSIsVkdCOiJeKD89LipcXGJ1XFwuP1xccz9rKS4qdmlyZ2lufF4oPz0uKmJyaXQpLip2aXJnaW58Xig/PS4qa2luZ2RvbSkuKnZpcmdpbiIsVklSOiJeKD89LipcXGJ1XFwuP1xccz9zKS4qdmlyZ2lufF4oPz0uKnN0YXRlcykuKnZpcmdpbiIsV0xGOiJmdXR1bmF8d2FsbGlzIixFU0g6Indlc3Rlcm4uc2FoYXJhIixZRU06Il4oPyEuKmFyYWIpKD8hLipub3J0aCkoPyEuKnNhbmEpKD8hLipwZW8pKD8hLipkZW0pKD8hLipzb3V0aCkoPyEuKmFkZW4pKD8hLipcXGJwXFwuP2RcXC4/cikuKnllbWVuIixZTUQ6Il4oPz0uKnBlbykuKnllbWVufF4oPyEuKnJlcCkoPz0uKmRlbSkuKnllbWVufF4oPz0uKnNvdXRoKS4qeWVtZW58Xig/PS4qYWRlbikuKnllbWVufF4oPz0uKlxcYnBcXC4/ZFxcLj9yKS4qeWVtZW4iLFlVRzoieXVnb3NsYXZpYSIsWk1COiJ6YW1iaWF8bm9ydGhlcm4uP3Job2Rlc2lhIixFQVo6InphbnppYmFyIixaV0U6InppbWJhYndlfF4oPyEuKm5vcnRoZXJuKS4qcmhvZGVzaWEifX0se31dLDEyNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInh4LXNtYWxsIiwieC1zbWFsbCIsInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJ4LWxhcmdlIiwieHgtbGFyZ2UiLCJsYXJnZXIiLCJzbWFsbGVyIl19LHt9XSwxMjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJjb25kZW5zZWQiLCJzZW1pLWNvbmRlbnNlZCIsImV4dHJhLWNvbmRlbnNlZCIsInVsdHJhLWNvbmRlbnNlZCIsImV4cGFuZGVkIiwic2VtaS1leHBhbmRlZCIsImV4dHJhLWV4cGFuZGVkIiwidWx0cmEtZXhwYW5kZWQiXX0se31dLDEyNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIm5vcm1hbCIsIml0YWxpYyIsIm9ibGlxdWUiXX0se31dLDEyODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIiwiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIl19LHt9XSwxMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwYXJzZTp0KCIuL3BhcnNlIiksc3RyaW5naWZ5OnQoIi4vc3RyaW5naWZ5Iil9fSx7Ii4vcGFyc2UiOjEzMSwiLi9zdHJpbmdpZnkiOjEzMn1dLDEzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udC1zaXplLWtleXdvcmRzIik7ZS5leHBvcnRzPXtpc1NpemU6ZnVuY3Rpb24odCl7cmV0dXJuL15bXGRcLl0vLnRlc3QodCl8fC0xIT09dC5pbmRleE9mKCIvIil8fC0xIT09bi5pbmRleE9mKHQpfX19LHsiY3NzLWZvbnQtc2l6ZS1rZXl3b3JkcyI6MTI1fV0sMTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInVucXVvdGUiKSxpPXQoImNzcy1nbG9iYWwta2V5d29yZHMiKSxhPXQoImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyIpLG89dCgiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIikscz10KCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyIpLGw9dCgiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyIpLGM9dCgic3RyaW5nLXNwbGl0LWJ5IiksdT10KCIuL2xpYi91dGlsIikuaXNTaXplO2UuZXhwb3J0cz1oO3ZhciBmPWguY2FjaGU9e307ZnVuY3Rpb24gaCh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJGb250IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIik7aWYoZlt0XSlyZXR1cm4gZlt0XTtpZigiIj09PXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGFyc2UgYW4gZW1wdHkgc3RyaW5nLiIpO2lmKC0xIT09YS5pbmRleE9mKHQpKXJldHVybiBmW3RdPXtzeXN0ZW06dH07Zm9yKHZhciBlLHI9e3N0eWxlOiJub3JtYWwiLHZhcmlhbnQ6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHN0cmV0Y2g6Im5vcm1hbCIsbGluZUhlaWdodDoibm9ybWFsIixzaXplOiIxcmVtIixmYW1pbHk6WyJzZXJpZiJdfSxoPWModCwvXHMrLyk7ZT1oLnNoaWZ0KCk7KXtpZigtMSE9PWkuaW5kZXhPZihlKSlyZXR1cm5bInN0eWxlIiwidmFyaWFudCIsIndlaWdodCIsInN0cmV0Y2giXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09ZX0pLGZbdF09cjtpZigtMT09PXMuaW5kZXhPZihlKSlpZigibm9ybWFsIiE9PWUmJiJzbWFsbC1jYXBzIiE9PWUpaWYoLTE9PT1sLmluZGV4T2YoZSkpe2lmKC0xPT09by5pbmRleE9mKGUpKXtpZih1KGUpKXt2YXIgZD1jKGUsIi8iKTtpZihyLnNpemU9ZFswXSxudWxsIT1kWzFdP3IubGluZUhlaWdodD1wKGRbMV0pOiIvIj09PWhbMF0mJihoLnNoaWZ0KCksci5saW5lSGVpZ2h0PXAoaC5zaGlmdCgpKSksIWgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCBmb250LWZhbWlseS4iKTtyZXR1cm4gci5mYW1pbHk9YyhoLmpvaW4oIiAiKSwvXHMqLFxzKi8pLm1hcChuKSxmW3RdPXJ9dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG9yIHVuc3VwcG9ydGVkIGZvbnQgdG9rZW46ICIrZSl9ci53ZWlnaHQ9ZX1lbHNlIHIuc3RyZXRjaD1lO2Vsc2Ugci52YXJpYW50PWU7ZWxzZSByLnN0eWxlPWV9dGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGZvbnQtc2l6ZS4iKX1mdW5jdGlvbiBwKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGUudG9TdHJpbmcoKT09PXQ/ZTp0fX0seyIuL2xpYi91dGlsIjoxMzAsImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiOjEyNiwiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjEyNywiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIjoxMjgsImNzcy1nbG9iYWwta2V5d29yZHMiOjEzMywiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIjoxMzQsInN0cmluZy1zcGxpdC1ieSI6NTEzLHVucXVvdGU6NTMyfV0sMTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKSxpPXQoIi4vbGliL3V0aWwiKS5pc1NpemUsYT1nKHQoImNzcy1nbG9iYWwta2V5d29yZHMiKSksbz1nKHQoImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyIpKSxzPWcodCgiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIikpLGw9Zyh0KCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyIpKSxjPWcodCgiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyIpKSx1PXtub3JtYWw6MSwic21hbGwtY2FwcyI6MX0sZj17c2VyaWY6MSwic2Fucy1zZXJpZiI6MSxtb25vc3BhY2U6MSxjdXJzaXZlOjEsZmFudGFzeToxLCJzeXN0ZW0tdWkiOjF9LGg9IjFyZW0iLHA9InNlcmlmIjtmdW5jdGlvbiBkKHQsZSl7aWYodCYmIWVbdF0mJiFhW3RdKXRocm93IEVycm9yKCJVbmtub3duIGtleXdvcmQgYCIrdCsiYCIpO3JldHVybiB0fWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPTE7cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCh0PW4odCx7c3R5bGU6InN0eWxlIGZvbnRzdHlsZSBmb250U3R5bGUgZm9udC1zdHlsZSBzbG9wZSBkaXN0aW5jdGlvbiIsdmFyaWFudDoidmFyaWFudCBmb250LXZhcmlhbnQgZm9udFZhcmlhbnQgZm9udHZhcmlhbnQgdmFyIGNhcGl0YWxpemF0aW9uIix3ZWlnaHQ6IndlaWdodCB3IGZvbnQtd2VpZ2h0IGZvbnRXZWlnaHQgZm9udHdlaWdodCIsc3RyZXRjaDoic3RyZXRjaCBmb250LXN0cmV0Y2ggZm9udFN0cmV0Y2ggZm9udHN0cmV0Y2ggd2lkdGgiLHNpemU6InNpemUgcyBmb250LXNpemUgZm9udFNpemUgZm9udHNpemUgaGVpZ2h0IGVtIGVtU2l6ZSIsbGluZUhlaWdodDoibGggbGluZS1oZWlnaHQgbGluZUhlaWdodCBsaW5laGVpZ2h0IGxlYWRpbmciLGZhbWlseToiZm9udCBmYW1pbHkgZm9udEZhbWlseSBmb250LWZhbWlseSBmb250ZmFtaWx5IHR5cGUgdHlwZWZhY2UgZmFjZSIsc3lzdGVtOiJzeXN0ZW0gcmVzZXJ2ZWQgZGVmYXVsdCBnbG9iYWwifSkpLnN5c3RlbSlyZXR1cm4gdC5zeXN0ZW0mJmQodC5zeXN0ZW0sbyksdC5zeXN0ZW07aWYoZCh0LnN0eWxlLGwpLGQodC52YXJpYW50LHUpLGQodC53ZWlnaHQscyksZCh0LnN0cmV0Y2gsYyksbnVsbD09dC5zaXplJiYodC5zaXplPWgpLCJudW1iZXIiPT10eXBlb2YgdC5zaXplJiYodC5zaXplKz0icHgiKSwhaSl0aHJvdyBFcnJvcigiQmFkIHNpemUgdmFsdWUgYCIrdC5zaXplKyJgIik7dC5mYW1pbHl8fCh0LmZhbWlseT1wKSxBcnJheS5pc0FycmF5KHQuZmFtaWx5KSYmKHQuZmFtaWx5Lmxlbmd0aHx8KHQuZmFtaWx5PVtwXSksdC5mYW1pbHk9dC5mYW1pbHkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBmW3RdP3Q6JyInK3QrJyInfSkuam9pbigiLCAiKSk7dmFyIGU9W107cmV0dXJuIGUucHVzaCh0LnN0eWxlKSx0LnZhcmlhbnQhPT10LnN0eWxlJiZlLnB1c2godC52YXJpYW50KSx0LndlaWdodCE9PXQudmFyaWFudCYmdC53ZWlnaHQhPT10LnN0eWxlJiZlLnB1c2godC53ZWlnaHQpLHQuc3RyZXRjaCE9PXQud2VpZ2h0JiZ0LnN0cmV0Y2ghPT10LnZhcmlhbnQmJnQuc3RyZXRjaCE9PXQuc3R5bGUmJmUucHVzaCh0LnN0cmV0Y2gpLGUucHVzaCh0LnNpemUrKG51bGw9PXQubGluZUhlaWdodHx8Im5vcm1hbCI9PT10LmxpbmVIZWlnaHR8fHQubGluZUhlaWdodCsiIj09IjEiPyIiOiIvIit0LmxpbmVIZWlnaHQpKSxlLnB1c2godC5mYW1pbHkpLGUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKX19LHsiLi9saWIvdXRpbCI6MTMwLCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIjoxMjYsImNzcy1mb250LXN0eWxlLWtleXdvcmRzIjoxMjcsImNzcy1mb250LXdlaWdodC1rZXl3b3JkcyI6MTI4LCJjc3MtZ2xvYmFsLWtleXdvcmRzIjoxMzMsImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyI6MTM0LCJwaWNrLWJ5LWFsaWFzIjo0NTd9XSwxMzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJpbmhlcml0IiwiaW5pdGlhbCIsInVuc2V0Il19LHt9XSwxMzQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJjYXB0aW9uIiwiaWNvbiIsIm1lbnUiLCJtZXNzYWdlLWJveCIsInNtYWxsLWNhcHRpb24iLCJzdGF0dXMtYmFyIl19LHt9XSwxMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pLTEscz1pKmksbD1vKm8sYz0oMSsyKmkpKmwsdT1pKmwsZj1zKigzLTIqaSksaD1zKm87aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgcD10Lmxlbmd0aC0xO3A+PTA7LS1wKWFbcF09Yyp0W3BdK3UqZVtwXStmKnJbcF0raCpuW3BdO3JldHVybiBhfXJldHVybiBjKnQrdSplK2YqcitoKm59LGUuZXhwb3J0cy5kZXJpdmF0aXZlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz02KmkqaS02Kmkscz0zKmkqaS00KmkrMSxsPS02KmkqaSs2KmksYz0zKmkqaS0yKmk7aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgdT10Lmxlbmd0aC0xO3U+PTA7LS11KWFbdV09byp0W3VdK3MqZVt1XStsKnJbdV0rYypuW3VdO3JldHVybiBhfXJldHVybiBvKnQrcyplK2wqclt1XStjKm59fSx7fV0sMTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3RodW5rLmpzIik7ZnVuY3Rpb24gaSgpe3RoaXMuYXJnVHlwZXM9W10sdGhpcy5zaGltQXJncz1bXSx0aGlzLmFycmF5QXJncz1bXSx0aGlzLmFycmF5QmxvY2tJbmRpY2VzPVtdLHRoaXMuc2NhbGFyQXJncz1bXSx0aGlzLm9mZnNldEFyZ3M9W10sdGhpcy5vZmZzZXRBcmdJbmRleD1bXSx0aGlzLmluZGV4QXJncz1bXSx0aGlzLnNoYXBlQXJncz1bXSx0aGlzLmZ1bmNOYW1lPSIiLHRoaXMucHJlPW51bGwsdGhpcy5ib2R5PW51bGwsdGhpcy5wb3N0PW51bGwsdGhpcy5kZWJ1Zz0hMX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGk7ZS5wcmU9dC5wcmUsZS5ib2R5PXQuYm9keSxlLnBvc3Q9dC5wb3N0O3ZhciByPXQuYXJncy5zbGljZSgwKTtlLmFyZ1R5cGVzPXI7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBvPXJbYV07aWYoImFycmF5Ij09PW98fCJvYmplY3QiPT10eXBlb2YgbyYmby5ibG9ja0luZGljZXMpe2lmKGUuYXJnVHlwZXNbYV09ImFycmF5IixlLmFycmF5QXJncy5wdXNoKGEpLGUuYXJyYXlCbG9ja0luZGljZXMucHVzaChvLmJsb2NrSW5kaWNlcz9vLmJsb2NrSW5kaWNlczowKSxlLnNoaW1BcmdzLnB1c2goImFycmF5IithKSxhPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJncyIpO2lmKGE8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBhcmdzIil9ZWxzZSBpZigic2NhbGFyIj09PW8pZS5zY2FsYXJBcmdzLnB1c2goYSksZS5zaGltQXJncy5wdXNoKCJzY2FsYXIiK2EpO2Vsc2UgaWYoImluZGV4Ij09PW8pe2lmKGUuaW5kZXhBcmdzLnB1c2goYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGluZGV4Iik7aWYoYTxlLmJvZHkuYXJncy5sZW5ndGgmJmUuYm9keS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBib2R5KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBpbmRleCIpO2lmKGE8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleCIpfWVsc2UgaWYoInNoYXBlIj09PW8pe2lmKGUuc2hhcGVBcmdzLnB1c2goYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZSIpO2lmKGE8ZS5ib2R5LmFyZ3MubGVuZ3RoJiZlLmJvZHkuYXJnc1thXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGUiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IHNoYXBlIil9ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIG98fCFvLm9mZnNldCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBVbmtub3duIGFyZ3VtZW50IHR5cGUgIityW2FdKTtlLmFyZ1R5cGVzW2FdPSJvZmZzZXQiLGUub2Zmc2V0QXJncy5wdXNoKHthcnJheTpvLmFycmF5LG9mZnNldDpvLm9mZnNldH0pLGUub2Zmc2V0QXJnSW5kZXgucHVzaChhKX19aWYoZS5hcnJheUFyZ3MubGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IE5vIGFycmF5IGFyZ3VtZW50cyBzcGVjaWZpZWQiKTtpZihlLnByZS5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcHJlKCkgYmxvY2siKTtpZihlLmJvZHkuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIGJvZHkoKSBibG9jayIpO2lmKGUucG9zdC5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcG9zdCgpIGJsb2NrIik7cmV0dXJuIGUuZGVidWc9ISF0LnByaW50Q29kZXx8ISF0LmRlYnVnLGUuZnVuY05hbWU9dC5mdW5jTmFtZXx8ImN3aXNlIixlLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZXx8NjQsbihlKX19LHsiLi9saWIvdGh1bmsuanMiOjEzOH1dLDEzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ1bmlxIik7ZnVuY3Rpb24gaSh0LGUscil7dmFyIG4saSxhPXQubGVuZ3RoLG89ZS5hcnJheUFyZ3MubGVuZ3RoLHM9ZS5pbmRleEFyZ3MubGVuZ3RoPjAsbD1bXSxjPVtdLHU9MCxmPTA7Zm9yKG49MDtuPGE7KytuKWMucHVzaChbImkiLG4sIj0wIl0uam9pbigiIikpO2ZvcihpPTA7aTxvOysraSlmb3Iobj0wO248YTsrK24pZj11LHU9dFtuXSwwPT09bj9jLnB1c2goWyJkIixpLCJzIixuLCI9dCIsaSwicCIsdV0uam9pbigiIikpOmMucHVzaChbImQiLGksInMiLG4sIj0odCIsaSwicCIsdSwiLXMiLGYsIip0IixpLCJwIixmLCIpIl0uam9pbigiIikpO2ZvcihjLmxlbmd0aD4wJiZsLnB1c2goInZhciAiK2Muam9pbigiLCIpKSxuPWEtMTtuPj0wOy0tbil1PXRbbl0sbC5wdXNoKFsiZm9yKGkiLG4sIj0wO2kiLG4sIjxzIix1LCI7KytpIixuLCIpeyJdLmpvaW4oIiIpKTtmb3IobC5wdXNoKHIpLG49MDtuPGE7KytuKXtmb3IoZj11LHU9dFtuXSxpPTA7aTxvOysraSlsLnB1c2goWyJwIixpLCIrPWQiLGksInMiLG5dLmpvaW4oIiIpKTtzJiYobj4wJiZsLnB1c2goWyJpbmRleFsiLGYsIl0tPXMiLGZdLmpvaW4oIiIpKSxsLnB1c2goWyIrK2luZGV4WyIsdSwiXSJdLmpvaW4oIiIpKSksbC5wdXNoKCJ9Iil9cmV0dXJuIGwuam9pbigiXG4iKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49dC5ib2R5LGk9W10sYT1bXSxvPTA7bzx0LmFyZ3MubGVuZ3RoOysrbyl7dmFyIHM9dC5hcmdzW29dO2lmKCEocy5jb3VudDw9MCkpe3ZhciBsPW5ldyBSZWdFeHAocy5uYW1lLCJnIiksYz0iIix1PWUuYXJyYXlBcmdzLmluZGV4T2Yobyk7c3dpdGNoKGUuYXJnVHlwZXNbb10pe2Nhc2Uib2Zmc2V0Ijp2YXIgZj1lLm9mZnNldEFyZ0luZGV4LmluZGV4T2Yobyk7dT1lLm9mZnNldEFyZ3NbZl0uYXJyYXksYz0iK3EiK2Y7Y2FzZSJhcnJheSI6Yz0icCIrdStjO3ZhciBoPSJsIitvLHA9ImEiK3U7aWYoMD09PWUuYXJyYXlCbG9ja0luZGljZXNbdV0pMT09PXMuY291bnQ/ImdlbmVyaWMiPT09clt1XT9zLmx2YWx1ZT8oaS5wdXNoKFsidmFyICIsaCwiPSIscCwiLmdldCgiLGMsIikiXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxoKSxhLnB1c2goW3AsIi5zZXQoIixjLCIsIixoLCIpIl0uam9pbigiIikpKTpuPW4ucmVwbGFjZShsLFtwLCIuZ2V0KCIsYywiKSJdLmpvaW4oIiIpKTpuPW4ucmVwbGFjZShsLFtwLCJbIixjLCJdIl0uam9pbigiIikpOiJnZW5lcmljIj09PXJbdV0/KGkucHVzaChbInZhciAiLGgsIj0iLHAsIi5nZXQoIixjLCIpIl0uam9pbigiIikpLG49bi5yZXBsYWNlKGwsaCkscy5sdmFsdWUmJmEucHVzaChbcCwiLnNldCgiLGMsIiwiLGgsIikiXS5qb2luKCIiKSkpOihpLnB1c2goWyJ2YXIgIixoLCI9IixwLCJbIixjLCJdIl0uam9pbigiIikpLG49bi5yZXBsYWNlKGwsaCkscy5sdmFsdWUmJmEucHVzaChbcCwiWyIsYywiXT0iLGhdLmpvaW4oIiIpKSk7ZWxzZXtmb3IodmFyIGQ9W3MubmFtZV0sZz1bY10sdj0wO3Y8TWF0aC5hYnMoZS5hcnJheUJsb2NrSW5kaWNlc1t1XSk7disrKWQucHVzaCgiXFxzKlxcWyhbXlxcXV0rKVxcXSIpLGcucHVzaCgiJCIrKHYrMSkrIip0Iit1KyJiIit2KTtpZihsPW5ldyBSZWdFeHAoZC5qb2luKCIiKSwiZyIpLGM9Zy5qb2luKCIrIiksImdlbmVyaWMiPT09clt1XSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBHZW5lcmljIGFycmF5cyBub3Qgc3VwcG9ydGVkIGluIGNvbWJpbmF0aW9uIHdpdGggYmxvY2tzISIpO249bi5yZXBsYWNlKGwsW3AsIlsiLGMsIl0iXS5qb2luKCIiKSl9YnJlYWs7Y2FzZSJzY2FsYXIiOm49bi5yZXBsYWNlKGwsIlkiK2Uuc2NhbGFyQXJncy5pbmRleE9mKG8pKTticmVhaztjYXNlImluZGV4IjpuPW4ucmVwbGFjZShsLCJpbmRleCIpO2JyZWFrO2Nhc2Uic2hhcGUiOm49bi5yZXBsYWNlKGwsInNoYXBlIil9fX1yZXR1cm5baS5qb2luKCJcbiIpLG4sYS5qb2luKCJcbiIpXS5qb2luKCJcbiIpLnRyaW0oKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVsxXS5sZW5ndGgtTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSl8MCxvPW5ldyBBcnJheSh0LmFycmF5QXJncy5sZW5ndGgpLHM9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksbD0wO2w8dC5hcnJheUFyZ3MubGVuZ3RoOysrbClzW2xdPWVbMipsXSxvW2xdPWVbMipsKzFdO3ZhciBjPVtdLHU9W10sZj1bXSxoPVtdLHA9W107Zm9yKGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpe3QuYXJyYXlCbG9ja0luZGljZXNbbF08MD8oZi5wdXNoKDApLGgucHVzaChyKSxjLnB1c2gociksdS5wdXNoKHIrdC5hcnJheUJsb2NrSW5kaWNlc1tsXSkpOihmLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tsXSksaC5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbbF0rciksYy5wdXNoKDApLHUucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKSk7Zm9yKHZhciBkPVtdLGc9MDtnPG9bbF0ubGVuZ3RoO2crKylmW2xdPD1vW2xdW2ddJiZvW2xdW2ddPGhbbF0mJmQucHVzaChvW2xdW2ddLWZbbF0pO3AucHVzaChkKX12YXIgdj1bIlNTIl0sbT1bIid1c2Ugc3RyaWN0JyJdLHk9W107Zm9yKGc9MDtnPHI7KytnKXkucHVzaChbInMiLGcsIj1TU1siLGcsIl0iXS5qb2luKCIiKSk7Zm9yKGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpe2Zvcih2LnB1c2goImEiK2wpLHYucHVzaCgidCIrbCksdi5wdXNoKCJwIitsKSxnPTA7ZzxyOysrZyl5LnB1c2goWyJ0IixsLCJwIixnLCI9dCIsbCwiWyIsZltsXStnLCJdIl0uam9pbigiIikpO2ZvcihnPTA7ZzxNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKTsrK2cpeS5wdXNoKFsidCIsbCwiYiIsZywiPXQiLGwsIlsiLGNbbF0rZywiXSJdLmpvaW4oIiIpKX1mb3IobD0wO2w8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK2wpdi5wdXNoKCJZIitsKTtpZih0LnNoYXBlQXJncy5sZW5ndGg+MCYmeS5wdXNoKCJzaGFwZT1TUy5zbGljZSgwKSIpLHQuaW5kZXhBcmdzLmxlbmd0aD4wKXt2YXIgeD1uZXcgQXJyYXkocik7Zm9yKGw9MDtsPHI7KytsKXhbbF09IjAiO3kucHVzaChbImluZGV4PVsiLHguam9pbigiLCIpLCJdIl0uam9pbigiIikpfWZvcihsPTA7bDx0Lm9mZnNldEFyZ3MubGVuZ3RoOysrbCl7dmFyIGI9dC5vZmZzZXRBcmdzW2xdLF89W107Zm9yKGc9MDtnPGIub2Zmc2V0Lmxlbmd0aDsrK2cpMCE9PWIub2Zmc2V0W2ddJiYoMT09PWIub2Zmc2V0W2ddP18ucHVzaChbInQiLGIuYXJyYXksInAiLGddLmpvaW4oIiIpKTpfLnB1c2goW2Iub2Zmc2V0W2ddLCIqdCIsYi5hcnJheSwicCIsZ10uam9pbigiIikpKTswPT09Xy5sZW5ndGg/eS5wdXNoKCJxIitsKyI9MCIpOnkucHVzaChbInEiLGwsIj0iLF8uam9pbigiKyIpXS5qb2luKCIiKSl9dmFyIHc9bihbXS5jb25jYXQodC5wcmUudGhpc1ZhcnMpLmNvbmNhdCh0LmJvZHkudGhpc1ZhcnMpLmNvbmNhdCh0LnBvc3QudGhpc1ZhcnMpKTtmb3IoKHk9eS5jb25jYXQodykpLmxlbmd0aD4wJiZtLnB1c2goInZhciAiK3kuam9pbigiLCIpKSxsPTA7bDx0LmFycmF5QXJncy5sZW5ndGg7KytsKW0ucHVzaCgicCIrbCsifD0wIik7dC5wcmUuYm9keS5sZW5ndGg+MyYmbS5wdXNoKGEodC5wcmUsdCxzKSk7dmFyIGs9YSh0LmJvZHksdCxzKSxUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dFswXS5sZW5ndGg7ZTxyOyl7Zm9yKHZhciBuPTE7bjx0Lmxlbmd0aDsrK24paWYodFtuXVtlXSE9PXRbMF1bZV0pcmV0dXJuIGU7KytlfXJldHVybiBlfShwKTtUPHI/bS5wdXNoKGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXIuYXJyYXlBcmdzLmxlbmd0aCxzPXIuYmxvY2tTaXplLGw9ci5pbmRleEFyZ3MubGVuZ3RoPjAsYz1bXSx1PTA7dTxvOysrdSljLnB1c2goWyJ2YXIgb2Zmc2V0Iix1LCI9cCIsdV0uam9pbigiIikpO2Zvcih1PXQ7dTxhOysrdSljLnB1c2goWyJmb3IodmFyIGoiK3UrIj1TU1siLGVbdV0sIl18MDtqIix1LCI+MDspeyJdLmpvaW4oIiIpKSxjLnB1c2goWyJpZihqIix1LCI8IixzLCIpeyJdLmpvaW4oIiIpKSxjLnB1c2goWyJzIixlW3VdLCI9aiIsdV0uam9pbigiIikpLGMucHVzaChbImoiLHUsIj0wIl0uam9pbigiIikpLGMucHVzaChbIn1lbHNle3MiLGVbdV0sIj0iLHNdLmpvaW4oIiIpKSxjLnB1c2goWyJqIix1LCItPSIscywifSJdLmpvaW4oIiIpKSxsJiZjLnB1c2goWyJpbmRleFsiLGVbdV0sIl09aiIsdV0uam9pbigiIikpO2Zvcih1PTA7dTxvOysrdSl7Zm9yKHZhciBmPVsib2Zmc2V0Iit1XSxoPXQ7aDxhOysraClmLnB1c2goWyJqIixoLCIqdCIsdSwicCIsZVtoXV0uam9pbigiIikpO2MucHVzaChbInAiLHUsIj0oIixmLmpvaW4oIisiKSwiKSJdLmpvaW4oIiIpKX1mb3IoYy5wdXNoKGkoZSxyLG4pKSx1PXQ7dTxhOysrdSljLnB1c2goIn0iKTtyZXR1cm4gYy5qb2luKCJcbiIpfShULHBbMF0sdCxrKSk6bS5wdXNoKGkocFswXSx0LGspKSx0LnBvc3QuYm9keS5sZW5ndGg+MyYmbS5wdXNoKGEodC5wb3N0LHQscykpLHQuZGVidWcmJmNvbnNvbGUubG9nKCItLS0tLUdlbmVyYXRlZCBjd2lzZSByb3V0aW5lIGZvciAiLGUsIjpcbiIrbS5qb2luKCJcbiIpKyJcbi0tLS0tLS0tLS0iKTt2YXIgQT1bdC5mdW5jTmFtZXx8InVubmFtZWQiLCJfY3dpc2VfbG9vcF8iLG9bMF0uam9pbigicyIpLCJtIixULGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9ITAsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT10W25dLGE9aS5tYXRjaCgvXGQrLyk7YT1hP2FbMF06IiIsMD09PWkuY2hhckF0KDApP2Vbbl09InUiK2kuY2hhckF0KDEpK2E6ZVtuXT1pLmNoYXJBdCgwKSthLG4+MCYmKHI9ciYmZVtuXT09PWVbbi0xXSl9cmV0dXJuIHI/ZVswXTplLmpvaW4oIiIpfShzKV0uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbihbImZ1bmN0aW9uICIsQSwiKCIsdi5qb2luKCIsIiksIil7IixtLmpvaW4oIlxuIiksIn0gcmV0dXJuICIsQV0uam9pbigiIikpKCl9fSx7dW5pcTo1MzF9XSwxMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb21waWxlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVsiJ3VzZSBzdHJpY3QnIiwidmFyIENBQ0hFRD17fSJdLHI9W10saT10LmZ1bmNOYW1lKyJfY3dpc2VfdGh1bmsiO2UucHVzaChbInJldHVybiBmdW5jdGlvbiAiLGksIigiLHQuc2hpbUFyZ3Muam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIGE9W10sbz1bXSxzPVtbImFycmF5Iix0LmFycmF5QXJnc1swXSwiLnNoYXBlLnNsaWNlKCIsTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSx0LmFycmF5QmxvY2tJbmRpY2VzWzBdPDA/IiwiK3QuYXJyYXlCbG9ja0luZGljZXNbMF0rIikiOiIpIl0uam9pbigiIildLGw9W10sYz1bXSx1PTA7dTx0LmFycmF5QXJncy5sZW5ndGg7Kyt1KXt2YXIgZj10LmFycmF5QXJnc1t1XTtyLnB1c2goWyJ0IixmLCI9YXJyYXkiLGYsIi5kdHlwZSwiLCJyIixmLCI9YXJyYXkiLGYsIi5vcmRlciJdLmpvaW4oIiIpKSxhLnB1c2goInQiK2YpLGEucHVzaCgiciIrZiksby5wdXNoKCJ0IitmKSxvLnB1c2goInIiK2YrIi5qb2luKCkiKSxzLnB1c2goImFycmF5IitmKyIuZGF0YSIpLHMucHVzaCgiYXJyYXkiK2YrIi5zdHJpZGUiKSxzLnB1c2goImFycmF5IitmKyIub2Zmc2V0fDAiKSx1PjAmJihsLnB1c2goImFycmF5Iit0LmFycmF5QXJnc1swXSsiLnNoYXBlLmxlbmd0aD09PWFycmF5IitmKyIuc2hhcGUubGVuZ3RoKyIrKE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLU1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbdV0pKSksYy5wdXNoKCJhcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZVtzaGFwZUluZGV4KyIrTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiXT09PWFycmF5IitmKyIuc2hhcGVbc2hhcGVJbmRleCsiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1t1XSkrIl0iKSl9Zm9yKHQuYXJyYXlBcmdzLmxlbmd0aD4xJiYoZS5wdXNoKCJpZiAoISgiK2wuam9pbigiICYmICIpKyIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5IScpIiksZS5wdXNoKCJmb3IodmFyIHNoYXBlSW5kZXg9YXJyYXkiK3QuYXJyYXlBcmdzWzBdKyIuc2hhcGUubGVuZ3RoLSIrTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSkrIjsgc2hhcGVJbmRleC0tXHgzZTA7KSB7IiksZS5wdXNoKCJpZiAoISgiK2Muam9pbigiICYmICIpKyIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIHNoYXBlIScpIiksZS5wdXNoKCJ9IikpLHU9MDt1PHQuc2NhbGFyQXJncy5sZW5ndGg7Kyt1KXMucHVzaCgic2NhbGFyIit0LnNjYWxhckFyZ3NbdV0pO3JldHVybiByLnB1c2goWyJ0eXBlPVsiLG8uam9pbigiLCIpLCJdLmpvaW4oKSJdLmpvaW4oIiIpKSxyLnB1c2goInByb2M9Q0FDSEVEW3R5cGVdIiksZS5wdXNoKCJ2YXIgIityLmpvaW4oIiwiKSksZS5wdXNoKFsiaWYoIXByb2MpeyIsIkNBQ0hFRFt0eXBlXT1wcm9jPWNvbXBpbGUoWyIsYS5qb2luKCIsIiksIl0pfSIsInJldHVybiBwcm9jKCIscy5qb2luKCIsIiksIil9Il0uam9pbigiIikpLHQuZGVidWcmJmNvbnNvbGUubG9nKCItLS0tLUdlbmVyYXRlZCB0aHVuazpcbiIrZS5qb2luKCJcbiIpKyJcbi0tLS0tLS0tLS0iKSxuZXcgRnVuY3Rpb24oImNvbXBpbGUiLGUuam9pbigiXG4iKSkobi5iaW5kKHZvaWQgMCx0KSl9fSx7Ii4vY29tcGlsZS5qcyI6MTM3fV0sMTM5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIil9LHsiY3dpc2UtY29tcGlsZXIiOjEzNn1dLDE0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L2NvcHkiKSxhPXQoImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIiksbz10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLHM9dCgiZXM1LWV4dC9vYmplY3QvbWFwIiksbD10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGM9dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSx1PUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5LGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhPWMoZSkmJmwoZS52YWx1ZSk7cmV0dXJuIGRlbGV0ZShuPWkoZSkpLndyaXRhYmxlLGRlbGV0ZSBuLnZhbHVlLG4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIXIub3ZlcndyaXRlRGVmaW5pdGlvbiYmaC5jYWxsKHRoaXMsdCk/YTooZS52YWx1ZT11LmNhbGwoYSxyLnJlc29sdmVDb250ZXh0P3IucmVzb2x2ZUNvbnRleHQodGhpcyk6dGhpcyksZih0aGlzLHQsZSksdGhpc1t0XSl9LG59LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hKGFyZ3VtZW50c1sxXSk7cmV0dXJuIG51bGwhPWUucmVzb2x2ZUNvbnRleHQmJm8oZS5yZXNvbHZlQ29udGV4dCkscyh0LGZ1bmN0aW9uKHQscil7cmV0dXJuIG4ocix0LGUpfSl9fSx7ImVzNS1leHQvb2JqZWN0L2NvcHkiOjE4MSwiZXM1LWV4dC9vYmplY3QvbWFwIjoxOTAsImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIjoxOTEsImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIjoxOTUsImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIjoxOTd9XSwxNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM1LWV4dC9vYmplY3QvYXNzaWduIiksaT10KCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9ucyIpLGE9dCgiZXM1LWV4dC9vYmplY3QvaXMtY2FsbGFibGUiKSxvPXQoImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxzLGwsYztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyfHwic3RyaW5nIiE9dHlwZW9mIHQ/KGw9ZSxlPXQsdD1udWxsKTpsPWFyZ3VtZW50c1syXSxudWxsPT10PyhyPXM9ITAsYT0hMSk6KHI9by5jYWxsKHQsImMiKSxhPW8uY2FsbCh0LCJlIikscz1vLmNhbGwodCwidyIpKSxjPXt2YWx1ZTplLGNvbmZpZ3VyYWJsZTpyLGVudW1lcmFibGU6YSx3cml0YWJsZTpzfSxsP24oaShsKSxjKTpjfSkuZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBzLGwsYyx1O3JldHVybiJzdHJpbmciIT10eXBlb2YgdD8oYz1yLHI9ZSxlPXQsdD1udWxsKTpjPWFyZ3VtZW50c1szXSxudWxsPT1lP2U9dm9pZCAwOmEoZSk/bnVsbD09cj9yPXZvaWQgMDphKHIpfHwoYz1yLHI9dm9pZCAwKTooYz1lLGU9cj12b2lkIDApLG51bGw9PXQ/KHM9ITAsbD0hMSk6KHM9by5jYWxsKHQsImMiKSxsPW8uY2FsbCh0LCJlIikpLHU9e2dldDplLHNldDpyLGNvbmZpZ3VyYWJsZTpzLGVudW1lcmFibGU6bH0sYz9uKGkoYyksdSk6dX19LHsiZXM1LWV4dC9vYmplY3QvYXNzaWduIjoxNzgsImVzNS1leHQvb2JqZWN0L2lzLWNhbGxhYmxlIjoxODQsImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIjoxOTEsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjE5OH1dLDE0MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiByKHQpe3ZhciByO3JldHVybiAxPT09dC5sZW5ndGgmJihyPXQsdD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHIodCksbil9KSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dmFyIG49cihlKSxpPW4ucmlnaHQsYT1uLmxlZnQ7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9MCxvPS0xLGw9MCxjPTA7aWYobnVsbD09ZSlmb3IoOysrbzxpOylpc05hTihyPXModFtvXSkpfHwoYys9KG49ci1sKSooci0obCs9bi8rK2EpKSk7ZWxzZSBmb3IoOysrbzxpOylpc05hTihyPXMoZSh0W29dLG8sdCkpKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2lmKGE+MSlyZXR1cm4gYy8oYS0xKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9bCh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9dFtvXSkmJihuPnImJihuPXIpLGk8ciYmKGk9cikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KHI9ZSh0W29dLG8sdCkpJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9ZSh0W29dLG8sdCkpJiYobj5yJiYobj1yKSxpPHImJihpPXIpKTtyZXR1cm5bbixpXX12YXIgZj1BcnJheS5wcm90b3R5cGUsaD1mLnNsaWNlLHA9Zi5tYXA7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdH1mdW5jdGlvbiB2KHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfXZhciBtPU1hdGguc3FydCg1MCkseT1NYXRoLnNxcnQoMTApLHg9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj1tPzEwOmE+PXk/NTphPj14PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49bT8xMDphPj15PzU6YT49eD8yOjEpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PW0/aSo9MTA6YT49eT9pKj01OmE+PXgmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiB3KHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIGsodCxlLHIpe2lmKG51bGw9PXImJihyPXMpLG49dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8bjwyKXJldHVybityKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybityKHRbbi0xXSxuLTEsdCk7dmFyIG4saT0obi0xKSplLGE9TWF0aC5mbG9vcihpKSxvPStyKHRbYV0sYSx0KTtyZXR1cm4gbysoK3IodFthKzFdLGErMSx0KS1vKSooaS1hKX19ZnVuY3Rpb24gVCh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9VCh0LE0pLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksYT0tMSxvPW5bZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIG59ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3Q9aSx0LmJpc2VjdFJpZ2h0PWksdC5iaXNlY3RMZWZ0PWEsdC5hc2NlbmRpbmc9ZSx0LmJpc2VjdG9yPXIsdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLHMsbD10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KGwqYyk7Zm9yKG51bGw9PXImJihyPW8pLG49YT0wO248bDsrK24pZm9yKHM9dFtuXSxpPTA7aTxjOysraSwrK2EpdVthXT1yKHMsZVtpXSk7cmV0dXJuIHV9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5kZXZpYXRpb249Yyx0LmV4dGVudD11LHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxlPXUscj13O2Z1bmN0aW9uIG4obil7dmFyIGEsbyxzPW4ubGVuZ3RoLGw9bmV3IEFycmF5KHMpO2ZvcihhPTA7YTxzOysrYSlsW2FdPXQoblthXSxhLG4pO3ZhciBjPWUobCksdT1jWzBdLGY9Y1sxXSxoPXIobCx1LGYpO0FycmF5LmlzQXJyYXkoaCl8fChoPV8odSxmLGgpLGg9dihNYXRoLmNlaWwodS9oKSpoLGYsaCkpO2Zvcih2YXIgcD1oLmxlbmd0aDtoWzBdPD11OyloLnNoaWZ0KCksLS1wO2Zvcig7aFtwLTFdPmY7KWgucG9wKCksLS1wO3ZhciBkLGc9bmV3IEFycmF5KHArMSk7Zm9yKGE9MDthPD1wOysrYSkoZD1nW2FdPVtdKS54MD1hPjA/aFthLTFdOnUsZC54MT1hPHA/aFthXTpmO2ZvcihhPTA7YTxzOysrYSl1PD0obz1sW2FdKSYmbzw9ZiYmZ1tpKGgsbywwLHApXS5wdXNoKG5bYV0pO3JldHVybiBnfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZChlKSxuKTp0fSxuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmQoW3RbMF0sdFsxXV0pLG4pOmV9LG4udGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZChoLmNhbGwodCkpOmQodCksbik6cn0sbn0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdD1wLmNhbGwodCxzKS5zb3J0KGUpLE1hdGguY2VpbCgobi1yKS8oMiooayh0LC43NSktayh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmNlaWwoKHItZSkvKDMuNSpjKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU3R1cmdlcz13LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9bixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPG47KWlzTmFOKHI9cyh0W2FdKSk/LS1pOm8rPXI7ZWxzZSBmb3IoOysrYTxuOylpc05hTihyPXMoZSh0W2FdLGEsdCkpKT8tLWk6bys9cjtpZihpKXJldHVybiBvL2l9LHQubWVkaWFuPWZ1bmN0aW9uKHQscil7dmFyIG4saT10Lmxlbmd0aCxhPS0xLG89W107aWYobnVsbD09cilmb3IoOysrYTxpOylpc05hTihuPXModFthXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrYTxpOylpc05hTihuPXMocih0W2FdLGEsdCkpKXx8by5wdXNoKG4pO3JldHVybiBrKG8uc29ydChlKSwuNSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sdC5taW49VCx0LnBhaXJzPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9byk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09ZShpLGk9dFsrK3JdKTtyZXR1cm4gYX0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnF1YW50aWxlPWssdC5yYW5nZT12LHQuc2Nhbj1mdW5jdGlvbih0LHIpe2lmKG49dC5sZW5ndGgpe3ZhciBuLGksYT0wLG89MCxzPXRbb107Zm9yKG51bGw9PXImJihyPWUpOysrYTxuOykocihpPXRbYV0scyk8MHx8MCE9PXIocyxzKSkmJihzPWksbz1hKTtyZXR1cm4gMD09PXIocyxzKT9vOnZvaWQgMH19LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0obnVsbD09cj90Lmxlbmd0aDpyKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxuOykocj0rdFtpXSkmJihhKz1yKTtlbHNlIGZvcig7KytpPG47KShyPStlKHRbaV0saSx0KSkmJihhKz1yKTtyZXR1cm4gYX0sdC50aWNrcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz0tMTtpZihyPStyLCh0PSt0KT09KGU9K2UpJiZyPjApcmV0dXJuW3RdO2lmKChuPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShvPWIodCxlLHIpKXx8IWlzRmluaXRlKG8pKXJldHVybltdO2lmKG8+MClmb3IodD1NYXRoLmNlaWwodC9vKSxlPU1hdGguZmxvb3IoZS9vKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrczxpOylhW3NdPSh0K3MpKm87ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqbyksZT1NYXRoLmNlaWwoZSpvKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrczxpOylhW3NdPSh0LXMpL287cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9LHQudGlja0luY3JlbWVudD1iLHQudGlja1N0ZXA9Xyx0LnRyYW5zcG9zZT1BLHQudmFyaWFuY2U9bCx0LnppcD1mdW5jdGlvbigpe3JldHVybiBBKGFyZ3VtZW50cyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiByKHQscil7dmFyIG49bmV3IGU7aWYodCBpbnN0YW5jZW9mIGUpdC5lYWNoKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGksYT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PXIpZm9yKDsrK2E8bzspbi5zZXQoYSx0W2FdKTtlbHNlIGZvcig7KythPG87KW4uc2V0KHIoaT10W2FdLGEsdCksaSl9ZWxzZSBpZih0KWZvcih2YXIgcyBpbiB0KW4uc2V0KHMsdFtzXSk7cmV0dXJuIG59ZS5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiIkIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzWyIkIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT0iJCIrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcykiJCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZigiJCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbigpe3JldHVybnt9fWZ1bmN0aW9uIGkodCxlLHIpe3RbZV09cn1mdW5jdGlvbiBhKCl7cmV0dXJuIHIoKX1mdW5jdGlvbiBvKHQsZSxyKXt0LnNldChlLHIpfWZ1bmN0aW9uIHMoKXt9dmFyIGw9ci5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPW5ldyBzO2lmKHQgaW5zdGFuY2VvZiBzKXQuZWFjaChmdW5jdGlvbih0KXtyLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIG49LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytuPGk7KXIuYWRkKHRbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQoZSh0W25dLG4sdCkpfXJldHVybiByfXMucHJvdG90eXBlPWMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGhhczpsLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmwucmVtb3ZlLGNsZWFyOmwuY2xlYXIsdmFsdWVzOmwua2V5cyxzaXplOmwuc2l6ZSxlbXB0eTpsLmVtcHR5LGVhY2g6bC5lYWNofTt0Lm5lc3Q9ZnVuY3Rpb24oKXt2YXIgdCxlLHMsbD1bXSxjPVtdO2Z1bmN0aW9uIHUobixpLGEsbyl7aWYoaT49bC5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJm4uc29ydCh0KSxudWxsIT1lP2Uobik6bjtmb3IodmFyIHMsYyxmLGg9LTEscD1uLmxlbmd0aCxkPWxbaSsrXSxnPXIoKSx2PWEoKTsrK2g8cDspKGY9Zy5nZXQocz1kKGM9bltoXSkrIiIpKT9mLnB1c2goYyk6Zy5zZXQocyxbY10pO3JldHVybiBnLmVhY2goZnVuY3Rpb24odCxlKXtvKHYsZSx1KHQsaSxhLG8pKX0pLHZ9cmV0dXJuIHM9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsbixpKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxhLG8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7aWYoKytuPmwubGVuZ3RoKXJldHVybiByO3ZhciBpLGE9Y1tuLTFdO3JldHVybiBudWxsIT1lJiZuPj1sLmxlbmd0aD9pPXIuZW50cmllcygpOihpPVtdLHIuZWFjaChmdW5jdGlvbihlLHIpe2kucHVzaCh7a2V5OnIsdmFsdWVzOnQoZSxuKX0pfSkpLG51bGwhPWE/aS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodC5rZXksZS5rZXkpfSk6aX0odSh0LDAsYSxvKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBsLnB1c2godCksc30sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGNbbC5sZW5ndGgtMV09dCxzfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsc30scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsc319fSx0LnNldD1jLHQubWFwPXIsdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gcih0LGUpe3ZhciByPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBuKCl7fXZhciBpPSJcXHMqKFsrLV0/XFxkKylcXHMqIixhPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG89IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHM9L14jKFswLTlhLWZdezN9KSQvLGw9L14jKFswLTlhLWZdezZ9KSQvLGM9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2ksaSxpXSsiXFwpJCIpLHU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW28sbyxvXSsiXFwpJCIpLGY9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tpLGksaSxhXSsiXFwpJCIpLGg9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tvLG8sbyxhXSsiXFwpJCIpLHA9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2EsbyxvXSsiXFwpJCIpLGQ9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1thLG8sbyxhXSsiXFwpJCIpLGc9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gdih0KXt2YXIgZTtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9cy5leGVjKHQpKT9uZXcgXygoZT1wYXJzZUludChlWzFdLDE2KSk+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTooZT1sLmV4ZWModCkpP20ocGFyc2VJbnQoZVsxXSwxNikpOihlPWMuZXhlYyh0KSk/bmV3IF8oZVsxXSxlWzJdLGVbM10sMSk6KGU9dS5leGVjKHQpKT9uZXcgXygyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1mLmV4ZWModCkpP3koZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9aC5leGVjKHQpKT95KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPXAuZXhlYyh0KSk/ayhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPWQuZXhlYyh0KSk/ayhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOmcuaGFzT3duUHJvcGVydHkodCk/bShnW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgXyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBfKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3JldHVybiBuPD0wJiYodD1lPXI9TmFOKSxuZXcgXyh0LGUscixuKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbnx8KHQ9dih0KSksdD9uZXcgXygodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgX31mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD94KHQpOm5ldyBfKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB3KHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gayh0LGUscixuKXtyZXR1cm4gbjw9MD90PWU9cj1OYU46cjw9MHx8cj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IEEodCxlLHIsbil9ZnVuY3Rpb24gVCh0LGUscixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEEpcmV0dXJuIG5ldyBBKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIG58fCh0PXYodCkpLCF0KXJldHVybiBuZXcgQTtpZih0IGluc3RhbmNlb2YgQSlyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxyPXQuZy8yNTUsaT10LmIvMjU1LGE9TWF0aC5taW4oZSxyLGkpLG89TWF0aC5tYXgoZSxyLGkpLHM9TmFOLGw9by1hLGM9KG8rYSkvMjtyZXR1cm4gbD8ocz1lPT09bz8oci1pKS9sKzYqKHI8aSk6cj09PW8/KGktZSkvbCsyOihlLXIpL2wrNCxsLz1jPC41P28rYToyLW8tYSxzKj02MCk6bD1jPjAmJmM8MT8wOnMsbmV3IEEocyxsLGMsdC5vcGFjaXR5KX0odCk6bmV3IEEodCxlLHIsbnVsbD09aT8xOmkpfWZ1bmN0aW9uIEEodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIE0odCxlLHIpe3JldHVybiAyNTUqKHQ8NjA/ZSsoci1lKSp0LzYwOnQ8MTgwP3I6dDwyNDA/ZSsoci1lKSooMjQwLXQpLzYwOmUpfWUobix2LHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmhleCgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLGUoXyxiLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IF8odGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IF8odGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4iIyIrdyh0aGlzLnIpK3codGhpcy5nKSt3KHRoaXMuYil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpLGUoQSxULHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEEodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgQSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKmUsaT0yKnItbjtyZXR1cm4gbmV3IF8oTSh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxuKSxNKHQsaSxuKSxNKHQ8MTIwP3QrMjQwOnQtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBTPU1hdGguUEkvMTgwLEU9MTgwL01hdGguUEksQz0uOTY0MjIsTD0xLHo9LjgyNTIxLE89NC8yOSxJPTYvMjksRD0zKkkqSSxQPUkqSSpJO2Z1bmN0aW9uIFIodCl7aWYodCBpbnN0YW5jZW9mIEIpcmV0dXJuIG5ldyBCKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEcpe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBCKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqUztyZXR1cm4gbmV3IEIodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgX3x8KHQ9eCh0KSk7dmFyIHIsbixpPVUodC5yKSxhPVUodC5nKSxvPVUodC5iKSxzPU4oKC4yMjI1MDQ1KmkrLjcxNjg3ODYqYSsuMDYwNjE2OSpvKS9MKTtyZXR1cm4gaT09PWEmJmE9PT1vP3I9bj1zOihyPU4oKC40MzYwNzQ3KmkrLjM4NTA2NDkqYSsuMTQzMDgwNCpvKS9DKSxuPU4oKC4wMTM5MzIyKmkrLjA5NzEwNDUqYSsuNzE0MTczMypvKS96KSksbmV3IEIoMTE2KnMtMTYsNTAwKihyLXMpLDIwMCoocy1uKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEYodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1IodCk6bmV3IEIodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIEIodCxlLHIsbil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQ+UD9NYXRoLnBvdyh0LDEvMyk6dC9EK099ZnVuY3Rpb24gaih0KXtyZXR1cm4gdD5JP3QqdCp0OkQqKHQtTyl9ZnVuY3Rpb24gVih0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gcSh0KXtpZih0IGluc3RhbmNlb2YgRylyZXR1cm4gbmV3IEcodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgQnx8KHQ9Uih0KSksMD09PXQuYSYmMD09PXQuYilyZXR1cm4gbmV3IEcoTmFOLDAsdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpFO3JldHVybiBuZXcgRyhlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBIKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9xKHQpOm5ldyBHKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBHKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1lKEIsRixyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQih0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEIodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IF8oVigzLjEzMzg1NjEqKGU9QypqKGUpKS0xLjYxNjg2NjcqKHQ9TCpqKHQpKS0uNDkwNjE0Nioocj16KmoocikpKSxWKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqciksViguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3KnIpLHRoaXMub3BhY2l0eSl9fSkpLGUoRyxILHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRyh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBSKHRoaXMpLnJnYigpfX0pKTt2YXIgWT0tLjE0ODYxLFc9MS43ODI3NyxYPS0uMjkyMjcsWj0tLjkwNjQ5LCQ9MS45NzI5NCxKPSQqWixLPSQqVyxRPVcqWC1aKlk7ZnVuY3Rpb24gdHQodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBldClyZXR1cm4gbmV3IGV0KHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIF98fCh0PXgodCkpO3ZhciBlPXQuci8yNTUscj10LmcvMjU1LG49dC5iLzI1NSxpPShRKm4rSiplLUsqcikvKFErSi1LKSxhPW4taSxvPSgkKihyLWkpLVgqYSkvWixzPU1hdGguc3FydChvKm8rYSphKS8oJCppKigxLWkpKSxsPXM/TWF0aC5hdGFuMihvLGEpKkUtMTIwOk5hTjtyZXR1cm4gbmV3IGV0KGw8MD9sKzM2MDpsLHMsaSx0Lm9wYWNpdHkpfSh0KTpuZXcgZXQodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIGV0KHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1lKGV0LHR0LHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IGV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IGV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpTLGU9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxuPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBfKDI1NSooZStyKihZKm4rVyppKSksMjU1KihlK3IqKFgqbitaKmkpKSwyNTUqKGUrciooJCpuKSksdGhpcy5vcGFjaXR5KX19KSksdC5jb2xvcj12LHQucmdiPWIsdC5oc2w9VCx0LmxhYj1GLHQuaGNsPUgsdC5sY2g9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3EodCk6bmV3IEcocixlLHQsbnVsbD09bj8xOm4pfSx0LmdyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEIodCwwLDAsbnVsbD09ZT8xOmUpfSx0LmN1YmVoZWxpeD10dCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHIoKXtmb3IodmFyIHQsZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8cjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IG4oaSl9ZnVuY3Rpb24gbih0KXt0aGlzLl89dH1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByLG49MCxpPXQubGVuZ3RoO248aTsrK24paWYoKHI9dFtuXSkubmFtZT09PWUpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24gYSh0LHIsbil7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDtpPGE7KytpKWlmKHRbaV0ubmFtZT09PXIpe3RbaV09ZSx0PXQuc2xpY2UoMCxpKS5jb25jYXQodC5zbGljZShpKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOnIsdmFsdWU6bn0pLHR9bi5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm4sb246ZnVuY3Rpb24odCxlKXt2YXIgcixuLG89dGhpcy5fLHM9KG49bywodCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihlPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIW4uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOmV9fSkpLGw9LTEsYz1zLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbDxjOylpZihyPSh0PXNbbF0pLnR5cGUpb1tyXT1hKG9bcl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IociBpbiBvKW9bcl09YShvW3JdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbDxjOylpZigocj0odD1zW2xdKS50eXBlKSYmKHI9aShvW3JdLHQubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBuKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKHI9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcixuLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT0wLHI9KG49dGhpcy5fW3RdKS5sZW5ndGg7YTxyOysrYSluW2FdLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgbj10aGlzLl9bdF0saT0wLGE9bi5sZW5ndGg7aTxhOysraSluW2ldLnZhbHVlLmFwcGx5KGUscil9fSx0LmRpc3BhdGNoPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSgib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQ2OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG89ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC55fXZhciBwPTEwLGQ9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO3QuZm9yY2VDZW50ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBuKCl7dmFyIG4saSxhPXIubGVuZ3RoLG89MCxzPTA7Zm9yKG49MDtuPGE7KytuKW8rPShpPXJbbl0pLngscys9aS55O2ZvcihvPW8vYS10LHM9cy9hLWUsbj0wO248YTsrK24pKGk9cltuXSkueC09byxpLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXR9LG4ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxuKTp0fSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qsbik6ZX0sbn0sdC5mb3JjZUNvbGxpZGU9ZnVuY3Rpb24odCl7dmFyIHIsbixpPTEsYz0xO2Z1bmN0aW9uIHUoKXtmb3IodmFyIHQsYSx1LGgscCxkLGcsdj1yLmxlbmd0aCxtPTA7bTxjOysrbSlmb3IoYT1lLnF1YWR0cmVlKHIscyxsKS52aXNpdEFmdGVyKGYpLHQ9MDt0PHY7Kyt0KXU9clt0XSxkPW5bdS5pbmRleF0sZz1kKmQsaD11LngrdS52eCxwPXUueSt1LnZ5LGEudmlzaXQoeSk7ZnVuY3Rpb24geSh0LGUscixuLGEpe3ZhciBzPXQuZGF0YSxsPXQucixjPWQrbDtpZighcylyZXR1cm4gZT5oK2N8fG48aC1jfHxyPnArY3x8YTxwLWM7aWYocy5pbmRleD51LmluZGV4KXt2YXIgZj1oLXMueC1zLnZ4LHY9cC1zLnktcy52eSxtPWYqZit2KnY7bTxjKmMmJigwPT09ZiYmKG0rPShmPW8oKSkqZiksMD09PXYmJihtKz0odj1vKCkpKnYpLG09KGMtKG09TWF0aC5zcXJ0KG0pKSkvbSppLHUudngrPShmKj1tKSooYz0obCo9bCkvKGcrbCkpLHUudnkrPSh2Kj1tKSpjLHMudngtPWYqKGM9MS1jKSxzLnZ5LT12KmMpfX19ZnVuY3Rpb24gZih0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1uW3QuZGF0YS5pbmRleF07Zm9yKHZhciBlPXQucj0wO2U8NDsrK2UpdFtlXSYmdFtlXS5yPnQuciYmKHQucj10W2VdLnIpfWZ1bmN0aW9uIGgoKXtpZihyKXt2YXIgZSxpLGE9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLGU9MDtlPGE7KytlKWk9cltlXSxuW2kuaW5kZXhdPSt0KGksZSxyKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8xOit0KSksdS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxoKCl9LHUuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCx1KTpjfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LHUpOml9LHUucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSksaCgpLHUpOnR9LHV9LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxzLGwsZj1jLGg9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oc1t0LnNvdXJjZS5pbmRleF0sc1t0LnRhcmdldC5pbmRleF0pfSxwPWEoMzApLGQ9MTtmdW5jdGlvbiBnKHIpe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxkOysraSlmb3IodmFyIHMsYyx1LGYsaCxwLGcsdj0wO3Y8YTsrK3YpYz0ocz10W3ZdKS5zb3VyY2UsZj0odT1zLnRhcmdldCkueCt1LnZ4LWMueC1jLnZ4fHxvKCksaD11LnkrdS52eS1jLnktYy52eXx8bygpLGYqPXA9KChwPU1hdGguc3FydChmKmYraCpoKSktblt2XSkvcCpyKmVbdl0saCo9cCx1LnZ4LT1mKihnPWxbdl0pLHUudnktPWgqZyxjLnZ4Kz1mKihnPTEtZyksYy52eSs9aCpnfWZ1bmN0aW9uIHYoKXtpZihpKXt2YXIgYSxvLGM9aS5sZW5ndGgsaD10Lmxlbmd0aCxwPXIubWFwKGksZik7Zm9yKGE9MCxzPW5ldyBBcnJheShjKTthPGg7KythKShvPXRbYV0pLmluZGV4PWEsIm9iamVjdCIhPXR5cGVvZiBvLnNvdXJjZSYmKG8uc291cmNlPXUocCxvLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2Ygby50YXJnZXQmJihvLnRhcmdldD11KHAsby50YXJnZXQpKSxzW28uc291cmNlLmluZGV4XT0oc1tvLnNvdXJjZS5pbmRleF18fDApKzEsc1tvLnRhcmdldC5pbmRleF09KHNbby50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihhPTAsbD1uZXcgQXJyYXkoaCk7YTxoOysrYSlvPXRbYV0sbFthXT1zW28uc291cmNlLmluZGV4XS8oc1tvLnNvdXJjZS5pbmRleF0rc1tvLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGgpLG0oKSxuPW5ldyBBcnJheShoKSx5KCl9fWZ1bmN0aW9uIG0oKXtpZihpKWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPStoKHRbcl0scix0KX1mdW5jdGlvbiB5KCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rcCh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxnLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LHYoKX0sZy5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHYoKSxnKTp0fSxnLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXQsZyk6Zn0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LGcpOmR9LGcuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxtKCksZyk6aH0sZy5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHkoKSxnKTpwfSxnfSx0LmZvcmNlTWFueUJvZHk9ZnVuY3Rpb24oKXt2YXIgdCxyLG4saSxzPWEoLTMwKSxsPTEsYz0xLzAsdT0uODE7ZnVuY3Rpb24gcChpKXt2YXIgYSxvPXQubGVuZ3RoLHM9ZS5xdWFkdHJlZSh0LGYsaCkudmlzaXRBZnRlcihnKTtmb3Iobj1pLGE9MDthPG87KythKXI9dFthXSxzLnZpc2l0KHYpfWZ1bmN0aW9uIGQoKXtpZih0KXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKXI9dFtlXSxpW3IuaW5kZXhdPStzKHIsZSx0KX19ZnVuY3Rpb24gZyh0KXt2YXIgZSxyLG4sYSxvLHM9MCxsPTA7aWYodC5sZW5ndGgpe2ZvcihuPWE9bz0wO288NDsrK28pKGU9dFtvXSkmJihyPU1hdGguYWJzKGUudmFsdWUpKSYmKHMrPWUudmFsdWUsbCs9cixuKz1yKmUueCxhKz1yKmUueSk7dC54PW4vbCx0Lnk9YS9sfWVsc2V7KGU9dCkueD1lLmRhdGEueCxlLnk9ZS5kYXRhLnk7ZG97cys9aVtlLmRhdGEuaW5kZXhdfXdoaWxlKGU9ZS5uZXh0KX10LnZhbHVlPXN9ZnVuY3Rpb24gdih0LGUsYSxzKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgZj10Lngtci54LGg9dC55LXIueSxwPXMtZSxkPWYqZitoKmg7aWYocCpwL3U8ZClyZXR1cm4gZDxjJiYoMD09PWYmJihkKz0oZj1vKCkpKmYpLDA9PT1oJiYoZCs9KGg9bygpKSpoKSxkPGwmJihkPU1hdGguc3FydChsKmQpKSxyLnZ4Kz1mKnQudmFsdWUqbi9kLHIudnkrPWgqdC52YWx1ZSpuL2QpLCEwO2lmKCEodC5sZW5ndGh8fGQ+PWMpKXsodC5kYXRhIT09cnx8dC5uZXh0KSYmKDA9PT1mJiYoZCs9KGY9bygpKSpmKSwwPT09aCYmKGQrPShoPW8oKSkqaCksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSkpO2Rve3QuZGF0YSE9PXImJihwPWlbdC5kYXRhLmluZGV4XSpuL2Qsci52eCs9ZipwLHIudnkrPWgqcCl9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gcC5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSxkKCl9LHAuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxkKCkscCk6c30scC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10KnQscCk6TWF0aC5zcXJ0KGwpfSxwLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQqdCxwKTpNYXRoLnNxcnQoYyl9LHAudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCp0LHApOk1hdGguc3FydCh1KX0scH0sdC5mb3JjZVJhZGlhbD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLHM9YSguMSk7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2Epe3ZhciBsPW5bYV0sYz1sLngtZXx8MWUtNix1PWwueS1yfHwxZS02LGY9TWF0aC5zcXJ0KGMqYyt1KnUpLGg9KG9bYV0tZikqaVthXSp0L2Y7bC52eCs9YypoLGwudnkrPXUqaH19ZnVuY3Rpb24gYygpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKW9bZV09K3QobltlXSxlLG4pLGlbZV09aXNOYU4ob1tlXSk/MDorcyhuW2VdLGUsbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09ciYmKHI9MCksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxjKCl9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxjKCksbCk6c30sbC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxjKCksbCk6dH0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxsKTpyfSxsfSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxhPTEsbz0uMDAxLHM9MS1NYXRoLnBvdyhvLDEvMzAwKSxsPTAsYz0uNix1PXIubWFwKCksZj1pLnRpbWVyKGcpLGg9bi5kaXNwYXRjaCgidGljayIsImVuZCIpO2Z1bmN0aW9uIGcoKXt2KCksaC5jYWxsKCJ0aWNrIixlKSxhPG8mJihmLnN0b3AoKSxoLmNhbGwoImVuZCIsZSkpfWZ1bmN0aW9uIHYoKXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGErPShsLWEpKnMsdS5lYWNoKGZ1bmN0aW9uKHQpe3QoYSl9KSxlPTA7ZTxuOysrZSludWxsPT0ocj10W2VdKS5meD9yLngrPXIudngqPWM6KHIueD1yLmZ4LHIudng9MCksbnVsbD09ci5meT9yLnkrPXIudnkqPWM6KHIueT1yLmZ5LHIudnk9MCl9ZnVuY3Rpb24gbSgpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtpZigoZT10W3JdKS5pbmRleD1yLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciBpPXAqTWF0aC5zcXJ0KHIpLGE9cipkO2UueD1pKk1hdGguY29zKGEpLGUueT1pKk1hdGguc2luKGEpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiB5KGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksbSgpLGU9e3RpY2s6dixyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGYucmVzdGFydChnKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGYuc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIsbSgpLHUuZWFjaCh5KSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxlKTphfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxlKTpvfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGUpOitzfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxlKTpsfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTEtdCxlKToxLWN9LGZvcmNlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09cj91LnJlbW92ZSh0KTp1LnNldCh0LHkocikpLGUpOnUuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUscixuKXt2YXIgaSxhLG8scyxsLGM9MCx1PXQubGVuZ3RoO2ZvcihudWxsPT1uP249MS8wOm4qPW4sYz0wO2M8dTsrK2MpKG89KGk9ZS0ocz10W2NdKS54KSppKyhhPXItcy55KSphKTxuJiYobD1zLG49byk7cmV0dXJuIGx9LG9uOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oaC5vbih0LHIpLGUpOmgub24odCl9fX0sdC5mb3JjZVg9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9YSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eCs9KG5bYV0taS54KSpyW2FdKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGE9MDthPG87KythKXJbYV09aXNOYU4oblthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YShudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHMoKSxvKTppfSxvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxzKCksbyk6dH0sb30sdC5mb3JjZVk9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9YSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eSs9KG5bYV0taS55KSpyW2FdKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGE9MDthPG87KythKXJbYV09aXNOYU4oblthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YShudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHMoKSxvKTppfSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxzKCksbyk6dH0sb30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9pKHIsdCgiZDMtcXVhZHRyZWUiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtZGlzcGF0Y2giKSx0KCJkMy10aW1lciIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMsbi5kMyl9LHsiZDMtY29sbGVjdGlvbiI6MTQzLCJkMy1kaXNwYXRjaCI6MTQ1LCJkMy1xdWFkdHJlZSI6MTUwLCJkMy10aW1lciI6MTUzfV0sMTQ3OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT0wLHI9dC5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKG4pZm9yKDstLW4+PTA7KWUrPXJbbl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIGEodCxlKXt2YXIgcixuLGksYSxzLHU9bmV3IGModCksZj0rdC52YWx1ZSYmKHUudmFsdWU9dC52YWx1ZSksaD1bdV07Zm9yKG51bGw9PWUmJihlPW8pO3I9aC5wb3AoKTspaWYoZiYmKHIudmFsdWU9K3IuZGF0YS52YWx1ZSksKGk9ZShyLmRhdGEpKSYmKHM9aS5sZW5ndGgpKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzKSxhPXMtMTthPj0wOy0tYSloLnB1c2gobj1yLmNoaWxkcmVuW2FdPW5ldyBjKGlbYV0pKSxuLnBhcmVudD1yLG4uZGVwdGg9ci5kZXB0aCsxO3JldHVybiB1LmVhY2hCZWZvcmUobCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBzKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBsKHQpe3ZhciBlPTA7ZG97dC5oZWlnaHQ9ZX13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrZSl9ZnVuY3Rpb24gYyh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1jLnByb3RvdHlwZT1hLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Yyxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihpKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXRoaXMsbz1bYV07ZG97Zm9yKGU9by5yZXZlcnNlKCksbz1bXTthPWUucG9wKCk7KWlmKHQoYSkscj1hLmNoaWxkcmVuKWZvcihuPTAsaT1yLmxlbmd0aDtuPGk7KytuKW8ucHVzaChyW25dKX13aGlsZShvLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dGhpcyxhPVtpXSxvPVtdO2k9YS5wb3AoKTspaWYoby5wdXNoKGkpLGU9aS5jaGlsZHJlbilmb3Iocj0wLG49ZS5sZW5ndGg7cjxuOysrcilhLnB1c2goZVtyXSk7Zm9yKDtpPW8ucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10aGlzLGk9W25dO249aS5wb3AoKTspaWYodChuKSxlPW4uY2hpbGRyZW4pZm9yKHI9ZS5sZW5ndGgtMTtyPj0wOy0tcilpLnB1c2goZVtyXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7Zm9yKHZhciByPSt0KGUuZGF0YSl8fDAsbj1lLmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO2UudmFsdWU9cn0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXQuYW5jZXN0b3JzKCksbj1lLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1yLnBvcCgpLGU9bi5wb3AoKTt0PT09ZTspaT10LHQ9ci5wb3AoKSxlPW4ucG9wKCk7cmV0dXJuIGl9KGUsdCksbj1bZV07ZSE9PXI7KWU9ZS5wYXJlbnQsbi5wdXNoKGUpO2Zvcih2YXIgaT1uLmxlbmd0aDt0IT09cjspbi5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIG59LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKS5lYWNoQmVmb3JlKHMpfX07dmFyIHU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGYodCl7Zm9yKHZhciBlLHIsbj0wLGk9KHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10Lmxlbmd0aDtuOylyPU1hdGgucmFuZG9tKCkqbi0tfDAsZT10W25dLHRbbl09dFtyXSx0W3JdPWU7cmV0dXJuIHR9KHUuY2FsbCh0KSkpLmxlbmd0aCxhPVtdO248aTspZT10W25dLHImJmQocixlKT8rK246KHI9dihhPWgoYSxlKSksbj0wKTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7dmFyIHIsbjtpZihnKGUsdCkpcmV0dXJuW2VdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpaWYocChlLHRbcl0pJiZnKG0odFtyXSxlKSx0KSlyZXR1cm5bdFtyXSxlXTtmb3Iocj0wO3I8dC5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248dC5sZW5ndGg7KytuKWlmKHAobSh0W3JdLHRbbl0pLGUpJiZwKG0odFtyXSxlKSx0W25dKSYmcChtKHRbbl0sZSksdFtyXSkmJmcoeSh0W3JdLHRbbl0sZSksdCkpcmV0dXJuW3Rbcl0sdFtuXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXQuci1lLnIsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcjwwfHxyKnI8bipuK2kqaX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5yLWUucisxZS02LG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWlmKCFkKHQsZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdih0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIG0odFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHkodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10Lngsbj10LnksaT10LnIsYT1lLngsbz1lLnkscz1lLnIsbD1hLXIsYz1vLW4sdT1zLWksZj1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrYStsL2YqdSkvMix5OihuK28rYy9mKnUpLzIscjooZitpK3MpLzJ9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXQueCxpPXQueSxhPXQucixvPWUueCxzPWUueSxsPWUucixjPXIueCx1PXIueSxmPXIucixoPW4tbyxwPW4tYyxkPWktcyxnPWktdSx2PWwtYSxtPWYtYSx5PW4qbitpKmktYSphLHg9eS1vKm8tcypzK2wqbCxiPXktYypjLXUqdStmKmYsXz1wKmQtaCpnLHc9KGQqYi1nKngpLygyKl8pLW4saz0oZyp2LWQqbSkvXyxUPShwKngtaCpiKS8oMipfKS1pLEE9KGgqbS1wKnYpL18sTT1rKmsrQSpBLTEsUz0yKihhK3cqaytUKkEpLEU9dyp3K1QqVC1hKmEsQz0tKE0/KFMrTWF0aC5zcXJ0KFMqUy00Kk0qRSkpLygyKk0pOkUvUyk7cmV0dXJue3g6bit3K2sqQyx5OmkrVCtBKkMscjpDfX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbixpLGEsbyxzPXQueC1lLngsbD10LnktZS55LGM9cypzK2wqbDtjPyhpPWUucityLnIsaSo9aSxvPXQucityLnIsaT4obyo9byk/KG49KGMrby1pKS8oMipjKSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vYy1uKm4pKSxyLng9dC54LW4qcy1hKmwsci55PXQueS1uKmwrYSpzKToobj0oYytpLW8pLygyKmMpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS9jLW4qbikpLHIueD1lLngrbipzLWEqbCxyLnk9ZS55K24qbCthKnMpKTooci54PWUueCtyLnIsci55PWUueSl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQucitlLnItMWUtNixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIF8odCl7dmFyIGU9dC5fLHI9dC5uZXh0Ll8sbj1lLnIrci5yLGk9KGUueCpyLnIrci54KmUucikvbixhPShlLnkqci5yK3IueSplLnIpL247cmV0dXJuIGkqaSthKmF9ZnVuY3Rpb24gdyh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gayh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEoaT4xKSlyZXR1cm4gZS5yO2lmKHI9dFsxXSxlLng9LXIucixyLng9ZS5yLHIueT0wLCEoaT4yKSlyZXR1cm4gZS5yK3Iucjt4KHIsZSxuPXRbMl0pLGU9bmV3IHcoZSkscj1uZXcgdyhyKSxuPW5ldyB3KG4pLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz1lO3Q6Zm9yKHM9MztzPGk7KytzKXt4KGUuXyxyLl8sbj10W3NdKSxuPW5ldyB3KG4pLGw9ci5uZXh0LGM9ZS5wcmV2aW91cyx1PXIuXy5yLGg9ZS5fLnI7ZG97aWYodTw9aCl7aWYoYihsLl8sbi5fKSl7cj1sLGUubmV4dD1yLHIucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGIoYy5fLG4uXykpeyhlPWMpLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz1lLG4ubmV4dD1yLGUubmV4dD1yLnByZXZpb3VzPXI9bixhPV8oZSk7KG49bi5uZXh0KSE9PXI7KShvPV8obikpPGEmJihlPW4sYT1vKTtyPWUubmV4dH1mb3IoZT1bci5fXSxuPXI7KG49bi5uZXh0KSE9PXI7KWUucHVzaChuLl8pO2ZvcihuPWYoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09bi54LGUueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gVCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gQSgpe3JldHVybiAwfWZ1bmN0aW9uIE0odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFModCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBFKHQpe3JldHVybiBmdW5jdGlvbihlKXtlLmNoaWxkcmVufHwoZS5yPU1hdGgubWF4KDAsK3QoZSl8fDApKX19ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtpZihuPXIuY2hpbGRyZW4pe3ZhciBuLGksYSxvPW4ubGVuZ3RoLHM9dChyKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKW5baV0ucis9cztpZihhPWsobikscylmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1zO3Iucj1hK3N9fX1mdW5jdGlvbiBMKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lLnBhcmVudDtlLnIqPXQsciYmKGUueD1yLngrdCplLngsZS55PXIueSt0KmUueSl9fWZ1bmN0aW9uIHoodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfWZ1bmN0aW9uIE8odCxlLHIsbixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihuLWUpL3QudmFsdWU7KytzPGw7KShhPW9bc10pLnkwPXIsYS55MT1pLGEueDA9ZSxhLngxPWUrPWEudmFsdWUqY312YXIgST0iJCIsRD17ZGVwdGg6LTF9LFA9e307ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBGKHQpe3JldHVybiB0LnBhcmVudElkfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gTih0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIFUodCxlLHIpe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOnJ9ZnVuY3Rpb24gcSh0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfWZ1bmN0aW9uIEgodCxlLHIsbixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihpLXIpL3QudmFsdWU7KytzPGw7KShhPW9bc10pLngwPWUsYS54MT1uLGEueTA9cixhLnkxPXIrPWEudmFsdWUqY31xLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTt2YXIgRz0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gWSh0LGUscixuLGksYSl7Zm9yKHZhciBvLHMsbCxjLHUsZixoLHAsZCxnLHYsbT1bXSx5PWUuY2hpbGRyZW4seD0wLGI9MCxfPXkubGVuZ3RoLHc9ZS52YWx1ZTt4PF87KXtsPWktcixjPWEtbjtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjxfKTtmb3IoZj1oPXUsdj11KnUqKGc9TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGQ9TWF0aC5tYXgoaC92LHYvZik7YjxfOysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8ZiYmKGY9cykscz5oJiYoaD1zKSx2PXUqdSpnLChwPU1hdGgubWF4KGgvdix2L2YpKT5kKXt1LT1zO2JyZWFrfWQ9cH1tLnB1c2gobz17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHgsYil9KSxvLmRpY2U/TyhvLHIsbixpLHc/bis9Yyp1L3c6YSk6SChvLHIsbix3P3IrPWwqdS93OmksYSksdy09dSx4PWJ9cmV0dXJuIG19dmFyIFc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7WShlLHQscixuLGksYSl9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dmFyIFg9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7aWYoKG89dC5fc3F1YXJpZnkpJiZvLnJhdGlvPT09ZSlmb3IodmFyIG8scyxsLGMsdSxmPS0xLGg9by5sZW5ndGgscD10LnZhbHVlOysrZjxoOyl7Zm9yKGw9KHM9b1tmXSkuY2hpbGRyZW4sYz1zLnZhbHVlPTAsdT1sLmxlbmd0aDtjPHU7KytjKXMudmFsdWUrPWxbY10udmFsdWU7cy5kaWNlP08ocyxyLG4saSxuKz0oYS1uKSpzLnZhbHVlL3ApOkgocyxyLG4scis9KGktcikqcy52YWx1ZS9wLGEpLHAtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1vPVkoZSx0LHIsbixpLGEpLG8ucmF0aW89ZX1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxyfShHKTt0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1lLGk9MSxhPTEsbz0hMTtmdW5jdGlvbiBzKGUpe3ZhciBzLGw9MDtlLmVhY2hBZnRlcihmdW5jdGlvbihlKXt2YXIgaT1lLmNoaWxkcmVuO2k/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UociwwKS90Lmxlbmd0aH0oaSksZS55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKG4sMCl9KGkpKTooZS54PXM/bCs9dChlLHMpOjAsZS55PTAscz1lKX0pO3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oZSksdT1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGUpLGY9Yy54LXQoYyx1KS8yLGg9dS54K3QodSxjKS8yO3JldHVybiBlLmVhY2hBZnRlcihvP2Z1bmN0aW9uKHQpe3QueD0odC54LWUueCkqaSx0Lnk9KGUueS10LnkpKmF9OmZ1bmN0aW9uKHQpe3QueD0odC54LWYpLyhoLWYpKmksdC55PSgxLShlLnk/dC55L2UueToxKSkqYX0pfXJldHVybiBzLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxzKTp0fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ITEsaT0rdFswXSxhPSt0WzFdLHMpOm8/bnVsbDpbaSxhXX0scy5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMCxpPSt0WzBdLGE9K3RbMV0scyk6bz9baSxhXTpudWxsfSxzfSx0LmhpZXJhcmNoeT1hLHQucGFjaz1mdW5jdGlvbigpe3ZhciB0PW51bGwsZT0xLHI9MSxuPUE7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9ci8yLHQ/aS5lYWNoQmVmb3JlKEUodCkpLmVhY2hBZnRlcihDKG4sLjUpKS5lYWNoQmVmb3JlKEwoMSkpOmkuZWFjaEJlZm9yZShFKFMpKS5lYWNoQWZ0ZXIoQyhBLDEpKS5lYWNoQWZ0ZXIoQyhuLGkuci9NYXRoLm1pbihlLHIpKSkuZWFjaEJlZm9yZShMKE1hdGgubWluKGUscikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PShyPWUpP251bGw6VChyKSxpKTp0O3ZhciByfSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxpKTpbZSxyXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TSgrdCksaSk6bn0saX0sdC5wYWNrU2libGluZ3M9ZnVuY3Rpb24odCl7cmV0dXJuIGsodCksdH0sdC5wYWNrRW5jbG9zZT1mLHQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9MSxlPTEscj0wLG49ITE7ZnVuY3Rpb24gaShpKXt2YXIgYT1pLmhlaWdodCsxO3JldHVybiBpLngwPWkueTA9cixpLngxPXQsaS55MT1lL2EsaS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uY2hpbGRyZW4mJk8obixuLngwLHQqKG4uZGVwdGgrMSkvZSxuLngxLHQqKG4uZGVwdGgrMikvZSk7dmFyIGk9bi54MCxhPW4ueTAsbz1uLngxLXIscz1uLnkxLXI7bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxuLngwPWksbi55MD1hLG4ueDE9byxuLnkxPXN9fShlLGEpKSxuJiZpLmVhY2hCZWZvcmUoeiksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hIXQsaSk6bn0saS5zaXplPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStyWzBdLGU9K3JbMV0saSk6W3QsZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxpKTpyfSxpfSx0LnN0cmF0aWZ5PWZ1bmN0aW9uKCl7dmFyIHQ9UixlPUY7ZnVuY3Rpb24gcihyKXt2YXIgbixpLGEsbyxzLHUsZixoPXIubGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9e307Zm9yKGk9MDtpPGg7KytpKW49cltpXSxzPXBbaV09bmV3IGMobiksbnVsbCE9KHU9dChuLGkscikpJiYodSs9IiIpJiYoZFtmPUkrKHMuaWQ9dSldPWYgaW4gZD9QOnMpO2ZvcihpPTA7aTxoOysraSlpZihzPXBbaV0sbnVsbCE9KHU9ZShyW2ldLGkscikpJiYodSs9IiIpKXtpZighKG89ZFtJK3VdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrdSk7aWYobz09PVApdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIrdSk7by5jaGlsZHJlbj9vLmNoaWxkcmVuLnB1c2gocyk6by5jaGlsZHJlbj1bc10scy5wYXJlbnQ9b31lbHNle2lmKGEpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO2E9c31pZighYSl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihhLnBhcmVudD1ELGEuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1ofSkuZWFjaEJlZm9yZShsKSxhLnBhcmVudD1udWxsLGg+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIGF9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VChlKSxyKTp0fSxyLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVQodCkscik6ZX0scn0sdC50cmVlPWZ1bmN0aW9uKCl7dmFyIHQ9QixlPTEscj0xLG49bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG89bmV3IHEodCwwKSxzPVtvXTtlPXMucG9wKCk7KWlmKG49ZS5fLmNoaWxkcmVuKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhPW4ubGVuZ3RoKSxpPWEtMTtpPj0wOy0taSlzLnB1c2gocj1lLmNoaWxkcmVuW2ldPW5ldyBxKG5baV0saSkpLHIucGFyZW50PWU7cmV0dXJuKG8ucGFyZW50PW5ldyBxKG51bGwsMCkpLmNoaWxkcmVuPVtvXSxvfShpKTtpZihsLmVhY2hBZnRlcihhKSxsLnBhcmVudC5tPS1sLnosbC5lYWNoQmVmb3JlKG8pLG4paS5lYWNoQmVmb3JlKHMpO2Vsc2V7dmFyIGM9aSx1PWksZj1pO2kuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng8Yy54JiYoYz10KSx0Lng+dS54JiYodT10KSx0LmRlcHRoPmYuZGVwdGgmJihmPXQpfSk7dmFyIGg9Yz09PXU/MTp0KGMsdSkvMixwPWgtYy54LGQ9ZS8odS54K2grcCksZz1yLyhmLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PSh0LngrcCkqZCx0Lnk9dC5kZXB0aCpnfSl9cmV0dXJuIGl9ZnVuY3Rpb24gYShlKXt2YXIgcj1lLmNoaWxkcmVuLG49ZS5wYXJlbnQuY2hpbGRyZW4saT1lLmk/bltlLmktMV06bnVsbDtpZihyKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9MCxuPTAsaT10LmNoaWxkcmVuLGE9aS5sZW5ndGg7LS1hPj0wOykoZT1pW2FdKS56Kz1yLGUubSs9cixyKz1lLnMrKG4rPWUuYyl9KGUpO3ZhciBhPShyWzBdLnorcltyLmxlbmd0aC0xXS56KS8yO2k/KGUuej1pLnordChlLl8saS5fKSxlLm09ZS56LWEpOmUuej1hfWVsc2UgaSYmKGUuej1pLnordChlLl8saS5fKSk7ZS5wYXJlbnQuQT1mdW5jdGlvbihlLHIsbil7aWYocil7Zm9yKHZhciBpLGE9ZSxvPWUscz1yLGw9YS5wYXJlbnQuY2hpbGRyZW5bMF0sYz1hLm0sdT1vLm0sZj1zLm0saD1sLm07cz1qKHMpLGE9TihhKSxzJiZhOylsPU4obCksKG89aihvKSkuYT1lLChpPXMueitmLWEuei1jK3Qocy5fLGEuXykpPjAmJihWKFUocyxlLG4pLGUsaSksYys9aSx1Kz1pKSxmKz1zLm0sYys9YS5tLGgrPWwubSx1Kz1vLm07cyYmIWoobykmJihvLnQ9cyxvLm0rPWYtdSksYSYmIU4obCkmJihsLnQ9YSxsLm0rPWMtaCxuPWUpfXJldHVybiBufShlLGksZS5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gbyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcyh0KXt0LngqPWUsdC55PXQuZGVwdGgqcn1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSExLGU9K3RbMF0scj0rdFsxXSxpKTpuP251bGw6W2Uscl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITAsZT0rdFswXSxyPSt0WzFdLGkpOm4/W2Uscl06bnVsbH0saX0sdC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIHQ9VyxlPSExLHI9MSxuPTEsaT1bMF0sYT1BLG89QSxzPUEsbD1BLGM9QTtmdW5jdGlvbiB1KHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPXIsdC55MT1uLHQuZWFjaEJlZm9yZShmKSxpPVswXSxlJiZ0LmVhY2hCZWZvcmUoeiksdH1mdW5jdGlvbiBmKGUpe3ZhciByPWlbZS5kZXB0aF0sbj1lLngwK3IsdT1lLnkwK3IsZj1lLngxLXIsaD1lLnkxLXI7ZjxuJiYobj1mPShuK2YpLzIpLGg8dSYmKHU9aD0odStoKS8yKSxlLngwPW4sZS55MD11LGUueDE9ZixlLnkxPWgsZS5jaGlsZHJlbiYmKHI9aVtlLmRlcHRoKzFdPWEoZSkvMixuKz1jKGUpLXIsdSs9byhlKS1yLChmLT1zKGUpLXIpPG4mJihuPWY9KG4rZikvMiksKGgtPWwoZSktcik8dSYmKHU9aD0odStoKS8yKSx0KGUsbix1LGYsaCkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCx1KTplfSx1LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF0sbj0rdFsxXSx1KTpbcixuXX0sdS50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVQoZSksdSk6dH0sdS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKHQpLnBhZGRpbmdPdXRlcih0KTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok0oK3QpLHUpOmF9LHUucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ1RvcCh0KS5wYWRkaW5nUmlnaHQodCkucGFkZGluZ0JvdHRvbSh0KS5wYWRkaW5nTGVmdCh0KTp1LnBhZGRpbmdUb3AoKX0sdS5wYWRkaW5nVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6b30sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTpsfSx1LnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6Y30sdX0sdC50cmVlbWFwQmluYXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPXQuY2hpbGRyZW4sbD1zLmxlbmd0aCxjPW5ldyBBcnJheShsKzEpO2ZvcihjWzBdPW89YT0wO2E8bDsrK2EpY1thKzFdPW8rPXNbYV0udmFsdWU7IWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8sbCl7aWYoZT49ci0xKXt2YXIgdT1zW2VdO3JldHVybiB1LngwPWksdS55MD1hLHUueDE9byx2b2lkKHUueTE9bCl9Zm9yKHZhciBmPWNbZV0saD1uLzIrZixwPWUrMSxkPXItMTtwPGQ7KXt2YXIgZz1wK2Q+Pj4xO2NbZ108aD9wPWcrMTpkPWd9aC1jW3AtMV08Y1twXS1oJiZlKzE8cCYmLS1wO3ZhciB2PWNbcF0tZixtPW4tdjtpZihvLWk+bC1hKXt2YXIgeT0oaSptK28qdikvbjt0KGUscCx2LGksYSx5LGwpLHQocCxyLG0seSxhLG8sbCl9ZWxzZXt2YXIgeD0oYSptK2wqdikvbjt0KGUscCx2LGksYSxvLHgpLHQocCxyLG0saSx4LG8sbCl9fSgwLGwsdC52YWx1ZSxlLHIsbixpKX0sdC50cmVlbWFwRGljZT1PLHQudHJlZW1hcFNsaWNlPUgsdC50cmVlbWFwU2xpY2VEaWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7KDEmdC5kZXB0aD9IOk8pKHQsZSxyLG4saSl9LHQudHJlZW1hcFNxdWFyaWZ5PVcsdC50cmVlbWFwUmVzcXVhcmlmeT1YLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUscixuLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKnIrKDErMyp0KzMqYS0zKm8pKm4rbyppKS82fWZ1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGE9dFtpXSxvPXRbaSsxXSxzPWk+MD90W2ktMV06MiphLW8sbD1pPGUtMT90W2krMl06MipvLWE7cmV0dXJuIHIoKG4taS9lKSplLHMsYSxvLGwpfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksYT10WyhpK2UtMSklZV0sbz10W2klZV0scz10WyhpKzEpJWVdLGw9dFsoaSsyKSVlXTtyZXR1cm4gcigobi1pL2UpKmUsYSxvLHMsbCl9fWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQrciplfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOmEoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBsKHQpe3JldHVybiAxPT0odD0rdCk/YzpmdW5jdGlvbihlLHIpe3JldHVybiByLWU/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PU1hdGgucG93KHQsciksZT1NYXRoLnBvdyhlLHIpLXQscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQrbiplLHIpfX0oZSxyLHQpOmEoaXNOYU4oZSk/cjplKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9vKHQscik6YShpc05hTih0KT9lOnQpfXZhciB1PWZ1bmN0aW9uIHQocil7dmFyIG49bChyKTtmdW5jdGlvbiBpKHQscil7dmFyIGk9bigodD1lLnJnYih0KSkuciwocj1lLnJnYihyKSkuciksYT1uKHQuZyxyLmcpLG89bih0LmIsci5iKSxzPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9YShlKSx0LmI9byhlKSx0Lm9wYWNpdHk9cyhlKSx0KyIifX1yZXR1cm4gaS5nYW1tYT10LGl9KDEpO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKTtmb3Iobj0wO248YTsrK24paT1lLnJnYihyW25dKSxvW25dPWkucnx8MCxzW25dPWkuZ3x8MCxsW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLHM9dChzKSxsPXQobCksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1zKHQpLGkuYj1sKHQpLGkrIiJ9fX12YXIgaD1mKG4pLHA9ZihpKTtmdW5jdGlvbiBkKHQsZSl7dmFyIHIsbj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKG4sdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkobik7Zm9yKHI9MDtyPGk7KytyKWFbcl09Xyh0W3JdLGVbcl0pO2Zvcig7cjxuOysrcilvW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxpOysrcilvW3JdPWFbcl0odCk7cmV0dXJuIG99fWZ1bmN0aW9uIGcodCxlKXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKHQrZSpuKSxyfX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIHQrZSpyfX1mdW5jdGlvbiBtKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSlyIGluIHQ/bltyXT1fKHRbcl0sZVtyXSk6aVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19dmFyIHk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHg9bmV3IFJlZ0V4cCh5LnNvdXJjZSwiZyIpO2Z1bmN0aW9uIGIodCxlKXt2YXIgcixuLGksYT15Lmxhc3RJbmRleD14Lmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj15LmV4ZWModCkpJiYobj14LmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDp2KHIsbil9KSksYT14Lmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShsWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gXyh0LHIpe3ZhciBuLGk9dHlwZW9mIHI7cmV0dXJuIG51bGw9PXJ8fCJib29sZWFuIj09PWk/YShyKTooIm51bWJlciI9PT1pP3Y6InN0cmluZyI9PT1pPyhuPWUuY29sb3IocikpPyhyPW4sdSk6YjpyIGluc3RhbmNlb2YgZS5jb2xvcj91OnIgaW5zdGFuY2VvZiBEYXRlP2c6QXJyYXkuaXNBcnJheShyKT9kOiJmdW5jdGlvbiIhPXR5cGVvZiByLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiByLnRvU3RyaW5nfHxpc05hTihyKT9tOnYpKHQscil9dmFyIHcsayxULEEsTT0xODAvTWF0aC5QSSxTPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIEUodCxlLHIsbixpLGEpe3ZhciBvLHMsbDtyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwobD10KnIrZSpuKSYmKHItPXQqbCxuLT1lKmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksdCpuPGUqciYmKHQ9LXQsZT0tZSxsPS1sLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqTSxza2V3WDpNYXRoLmF0YW4obCkqTSxzY2FsZVg6byxzY2FsZVk6c319ZnVuY3Rpb24gQyh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxsPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQsbixpLGEsbyxzKXtpZih0IT09aXx8biE9PWEpe3ZhciBsPW8ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwscik7cy5wdXNoKHtpOmwtNCx4OnYodCxpKX0se2k6bC0yLHg6dihuLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrYStyKX0oYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLHMsbCksZnVuY3Rpb24odCxlLHIsYSl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLGEucHVzaCh7aTpyLnB1c2goaShyKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6dih0LGUpfSkpOmUmJnIucHVzaChpKHIpKyJyb3RhdGUoIitlK24pfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lP2EucHVzaCh7aTpyLnB1c2goaShyKSsic2tld1goIixudWxsLG4pLTIseDp2KHQsZSl9KTplJiZyLnB1c2goaShyKSsic2tld1goIitlK24pfShhLnNrZXdYLG8uc2tld1gscyxsKSxmdW5jdGlvbih0LGUscixuLGEsbyl7aWYodCE9PXJ8fGUhPT1uKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OnYodCxyKX0se2k6cy0yLHg6dihlLG4pfSl9ZWxzZSAxPT09ciYmMT09PW58fGEucHVzaChpKGEpKyJzY2FsZSgiK3IrIiwiK24rIikiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxsKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPWwubGVuZ3RoOysrcjxuOylzWyhlPWxbcl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBMPUMoZnVuY3Rpb24odCl7cmV0dXJuIm5vbmUiPT09dD9TOih3fHwodz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxrPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxUPWRvY3VtZW50LmRlZmF1bHRWaWV3KSx3LnN0eWxlLnRyYW5zZm9ybT10LHQ9VC5nZXRDb21wdXRlZFN0eWxlKGsuYXBwZW5kQ2hpbGQodyksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksay5yZW1vdmVDaGlsZCh3KSxFKCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9LCJweCwgIiwicHgpIiwiZGVnKSIpLHo9QyhmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9TOihBfHwoQT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxBLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1BLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP0UoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6Uyl9LCIsICIsIikiLCIpIiksTz1NYXRoLlNRUlQyLEk9MixEPTQsUD0xZS0xMjtmdW5jdGlvbiBSKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIEYodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhzbChyKSkuaCwobj1lLmhzbChuKSkuaCksYT1jKHIucyxuLnMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLnM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyKyIifX19dmFyIEI9RihzKSxOPUYoYyk7ZnVuY3Rpb24gaih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaGNsKHIpKS5oLChuPWUuaGNsKG4pKS5oKSxhPWMoci5jLG4uYyksbz1jKHIubCxuLmwpLHM9YyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIuYz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1zKHQpLHIrIiJ9fX12YXIgVj1qKHMpLFU9aihjKTtmdW5jdGlvbiBxKHQpe3JldHVybiBmdW5jdGlvbiByKG4pe2Z1bmN0aW9uIGkocixpKXt2YXIgYT10KChyPWUuY3ViZWhlbGl4KHIpKS5oLChpPWUuY3ViZWhlbGl4KGkpKS5oKSxvPWMoci5zLGkucykscz1jKHIubCxpLmwpLGw9YyhyLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1hKHQpLHIucz1vKHQpLHIubD1zKE1hdGgucG93KHQsbikpLHIub3BhY2l0eT1sKHQpLHIrIiJ9fXJldHVybiBuPStuLGkuZ2FtbWE9cixpfSgxKX12YXIgSD1xKHMpLEc9cShjKTt0LmludGVycG9sYXRlPV8sdC5pbnRlcnBvbGF0ZUFycmF5PWQsdC5pbnRlcnBvbGF0ZUJhc2lzPW4sdC5pbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkPWksdC5pbnRlcnBvbGF0ZURhdGU9Zyx0LmludGVycG9sYXRlRGlzY3JldGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IociplKSkpXX19LHQuaW50ZXJwb2xhdGVIdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1zKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9cih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSx0LmludGVycG9sYXRlTnVtYmVyPXYsdC5pbnRlcnBvbGF0ZU9iamVjdD1tLHQuaW50ZXJwb2xhdGVSb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQrZSpyKX19LHQuaW50ZXJwb2xhdGVTdHJpbmc9Yix0LmludGVycG9sYXRlVHJhbnNmb3JtQ3NzPUwsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Zz16LHQuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxmPWwtYSxoPXUqdStmKmY7aWYoaDxQKW49TWF0aC5sb2coYy9vKS9PLHI9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCp1LGErdCpmLG8qTWF0aC5leHAoTyp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoaCksZD0oYypjLW8qbytEKmgpLygyKm8qSSpwKSxnPShjKmMtbypvLUQqaCkvKDIqYypJKnApLHY9TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSxtPU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0obS12KS9PLHI9ZnVuY3Rpb24odCl7dmFyIGUscj10Km4scz1SKHYpLGw9by8oSSpwKSoocyooZT1PKnIrdiwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfSh2KSk7cmV0dXJuW2krbCp1LGErbCpmLG8qcy9SKE8qcit2KV19fXJldHVybiByLmR1cmF0aW9uPTFlMypuLHJ9LHQuaW50ZXJwb2xhdGVSZ2I9dSx0LmludGVycG9sYXRlUmdiQmFzaXM9aCx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9cCx0LmludGVycG9sYXRlSHNsPUIsdC5pbnRlcnBvbGF0ZUhzbExvbmc9Tix0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKHQscil7dmFyIG49YygodD1lLmxhYih0KSkubCwocj1lLmxhYihyKSkubCksaT1jKHQuYSxyLmEpLGE9Yyh0LmIsci5iKSxvPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX0sdC5pbnRlcnBvbGF0ZUhjbD1WLHQuaW50ZXJwb2xhdGVIY2xMb25nPVUsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1ILHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPUcsdC5waWVjZXdpc2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KG48MD8wOm4pO3I8bjspYVtyXT10KGksaT1lWysrcl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKHQqPW4pKSk7cmV0dXJuIGFbZV0odC1lKX19LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dChuLyhlLTEpKTtyZXR1cm4gcn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9pKHIsdCgiZDMtY29sb3IiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMpfSx7ImQzLWNvbG9yIjoxNDR9XSwxNDk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPU1hdGguUEkscj0yKmUsbj1yLTFlLTY7ZnVuY3Rpb24gaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGEoKXtyZXR1cm4gbmV3IGl9aS5wcm90b3R5cGU9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQscixuLGksYSl7dD0rdCxyPStyLG49K24saT0raSxhPSthO3ZhciBvPXRoaXMuX3gxLHM9dGhpcy5feTEsbD1uLXQsYz1pLXIsdT1vLXQsZj1zLXIsaD11KnUrZipmO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIithKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9cik7ZWxzZSBpZihoPjFlLTYpaWYoTWF0aC5hYnMoZipsLWMqdSk+MWUtNiYmYSl7dmFyIHA9bi1vLGQ9aS1zLGc9bCpsK2MqYyx2PXAqcCtkKmQsbT1NYXRoLnNxcnQoZykseT1NYXRoLnNxcnQoaCkseD1hKk1hdGgudGFuKChlLU1hdGguYWNvcygoZytoLXYpLygyKm0qeSkpKS8yKSxiPXgveSxfPXgvbTtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisocitiKmYpKSx0aGlzLl8rPSJBIithKyIsIithKyIsMCwwLCIrICsoZipwPnUqZCkrIiwiKyh0aGlzLl94MT10K18qbCkrIiwiKyh0aGlzLl95MT1yK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1yKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsaSxhLG8scyxsKXt0PSt0LGk9K2k7dmFyIGM9KGE9K2EpKk1hdGguY29zKG8pLHU9YSpNYXRoLnNpbihvKSxmPXQrYyxoPWkrdSxwPTFebCxkPWw/by1zOnMtbztpZihhPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrYSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2YrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLWYpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWgpPjFlLTYpJiYodGhpcy5fKz0iTCIrZisiLCIraCksYSYmKGQ8MCYmKGQ9ZCVyK3IpLGQ+bj90aGlzLl8rPSJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHQtYykrIiwiKyhpLXUpKyJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHRoaXMuX3gxPWYpKyIsIisodGhpcy5feTE9aCk6ZD4xZS02JiYodGhpcy5fKz0iQSIrYSsiLCIrYSsiLDAsIisgKyhkPj1lKSsiLCIrcCsiLCIrKHRoaXMuX3gxPXQrYSpNYXRoLmNvcyhzKSkrIiwiKyh0aGlzLl95MT1pK2EqTWF0aC5zaW4ocykpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX0sdC5wYXRoPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSgib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTUwOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD10Ll9yb290LGQ9e2RhdGE6bn0sZz10Ll94MCx2PXQuX3kwLG09dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1kLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KGE9KGcrbSkvMikpP2c9YTptPWEsKHU9cj49KG89KHYreSkvMikpP3Y9bzp5PW8saT1wLCEocD1wW2Y9dTw8MXxjXSkpcmV0dXJuIGlbZl09ZCx0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmcj09PWwpcmV0dXJuIGQubmV4dD1wLGk/aVtmXT1kOnQuX3Jvb3Q9ZCx0O2Rve2k9aT9pW2ZdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0oYT0oZyttKS8yKSk/Zz1hOm09YSwodT1yPj0obz0odit5KS8yKSk/dj1vOnk9b313aGlsZSgoZj11PDwxfGMpPT0oaD0obD49byk8PDF8cz49YSkpO3JldHVybiBpW2hdPXAsaVtmXT1kLHR9dmFyIHI9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9O2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgYT1uZXcgbyhudWxsPT1lP246ZSxudWxsPT1yP2k6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P2E6YS5hZGRBbGwodCl9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0scj1lO3Q9dC5uZXh0OylyPXIubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBsPWEucHJvdG90eXBlPW8ucHJvdG90eXBlO2wuY29weT1mdW5jdGlvbigpe3ZhciB0LGUscj1uZXcgbyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLG49dGhpcy5fcm9vdDtpZighbilyZXR1cm4gcjtpZighbi5sZW5ndGgpcmV0dXJuIHIuX3Jvb3Q9cyhuKSxyO2Zvcih0PVt7c291cmNlOm4sdGFyZ2V0OnIuX3Jvb3Q9bmV3IEFycmF5KDQpfV07bj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShlPW4uc291cmNlW2ldKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0Om4udGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOm4udGFyZ2V0W2ldPXMoZSkpO3JldHVybiByfSxsLmFkZD1mdW5jdGlvbih0KXt2YXIgcj0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGUodGhpcy5jb3ZlcihyLG4pLHIsbix0KX0sbC5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIHIsbixpLGEsbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTEvMCx1PTEvMCxmPS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCxyPXRbbl0pKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwscikpfHwoc1tuXT1pLGxbbl09YSxpPGMmJihjPWkpLGk+ZiYmKGY9aSksYTx1JiYodT1hKSxhPmgmJihoPWEpKTtmb3IoZjxjJiYoYz10aGlzLl94MCxmPXRoaXMuX3gxKSxoPHUmJih1PXRoaXMuX3kwLGg9dGhpcy5feTEpLHRoaXMuY292ZXIoYyx1KS5jb3ZlcihmLGgpLG49MDtuPG87KytuKWUodGhpcyxzW25dLGxbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LGwuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy5feDAsbj10aGlzLl95MCxpPXRoaXMuX3gxLGE9dGhpcy5feTE7aWYoaXNOYU4ocikpaT0ocj1NYXRoLmZsb29yKHQpKSsxLGE9KG49TWF0aC5mbG9vcihlKSkrMTtlbHNle2lmKCEocj50fHx0Pml8fG4+ZXx8ZT5hKSlyZXR1cm4gdGhpczt2YXIgbyxzLGw9aS1yLGM9dGhpcy5fcm9vdDtzd2l0Y2gocz0oZTwobithKS8yKTw8MXx0PChyK2kpLzIpe2Nhc2UgMDpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKGE9bisobCo9MiksdD4oaT1yK2wpfHxlPmEpO2JyZWFrO2Nhc2UgMTpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKGE9bisobCo9MiksKHI9aS1sKT50fHxlPmEpO2JyZWFrO2Nhc2UgMjpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKG49YS0obCo9MiksdD4oaT1yK2wpfHxuPmUpO2JyZWFrO2Nhc2UgMzpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKG49YS0obCo9MiksKHI9aS1sKT50fHxuPmUpfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1jKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzfSxsLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSksdH0sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LGwuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIGksYSxvLHMsbCxjLHUsZj10aGlzLl94MCxoPXRoaXMuX3kwLHA9dGhpcy5feDEsZD10aGlzLl95MSxnPVtdLHY9dGhpcy5fcm9vdDtmb3IodiYmZy5wdXNoKG5ldyByKHYsZixoLHAsZCkpLG51bGw9PW4/bj0xLzA6KGY9dC1uLGg9ZS1uLHA9dCtuLGQ9ZStuLG4qPW4pO2M9Zy5wb3AoKTspaWYoISghKHY9Yy5ub2RlKXx8KGE9Yy54MCk+cHx8KG89Yy55MCk+ZHx8KHM9Yy54MSk8Znx8KGw9Yy55MSk8aCkpaWYodi5sZW5ndGgpe3ZhciBtPShhK3MpLzIseT0obytsKS8yO2cucHVzaChuZXcgcih2WzNdLG0seSxzLGwpLG5ldyByKHZbMl0sYSx5LG0sbCksbmV3IHIodlsxXSxtLG8scyx5KSxuZXcgcih2WzBdLGEsbyxtLHkpKSwodT0oZT49eSk8PDF8dD49bSkmJihjPWdbZy5sZW5ndGgtMV0sZ1tnLmxlbmd0aC0xXT1nW2cubGVuZ3RoLTEtdV0sZ1tnLmxlbmd0aC0xLXVdPWMpfWVsc2V7dmFyIHg9dC0rdGhpcy5feC5jYWxsKG51bGwsdi5kYXRhKSxiPWUtK3RoaXMuX3kuY2FsbChudWxsLHYuZGF0YSksXz14KngrYipiO2lmKF88bil7dmFyIHc9TWF0aC5zcXJ0KG49Xyk7Zj10LXcsaD1lLXcscD10K3csZD1lK3csaT12LmRhdGF9fXJldHVybiBpfSxsLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihhPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscD10aGlzLl9yb290LGQ9dGhpcy5feDAsZz10aGlzLl95MCx2PXRoaXMuX3gxLG09dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigoYz1hPj0ocz0oZCt2KS8yKSk/ZD1zOnY9cywodT1vPj0obD0oZyttKS8yKSk/Zz1sOm09bCxlPXAsIShwPXBbZj11PDwxfGNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KGVbZisxJjNdfHxlW2YrMiYzXXx8ZVtmKzMmM10pJiYocj1lLGg9Zil9Zm9yKDtwLmRhdGEhPT10OylpZihuPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxuPyhpP24ubmV4dD1pOmRlbGV0ZSBuLm5leHQsdGhpcyk6ZT8oaT9lW2ZdPWk6ZGVsZXRlIGVbZl0sKHA9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJnA9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFwLmxlbmd0aCYmKHI/cltoXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0sbC5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxsLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sbC5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pLHR9LGwudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixpLGEsbyxzLGw9W10sYz10aGlzLl9yb290O2ZvcihjJiZsLnB1c2gobmV3IHIoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bC5wb3AoKTspaWYoIXQoYz1lLm5vZGUsaT1lLngwLGE9ZS55MCxvPWUueDEscz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShpK28pLzIsZj0oYStzKS8yOyhuPWNbM10pJiZsLnB1c2gobmV3IHIobix1LGYsbyxzKSksKG49Y1syXSkmJmwucHVzaChuZXcgcihuLGksZix1LHMpKSwobj1jWzFdKSYmbC5wdXNoKG5ldyByKG4sdSxhLG8sZikpLChuPWNbMF0pJiZsLnB1c2gobmV3IHIobixpLGEsdSxmKSl9cmV0dXJuIHRoaXN9LGwudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgcih0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGE9ZS5ub2RlO2lmKGEubGVuZ3RoKXt2YXIgbyxzPWUueDAsbD1lLnkwLGM9ZS54MSx1PWUueTEsZj0ocytjKS8yLGg9KGwrdSkvMjsobz1hWzBdKSYmbi5wdXNoKG5ldyByKG8scyxsLGYsaCkpLChvPWFbMV0pJiZuLnB1c2gobmV3IHIobyxmLGwsYyxoKSksKG89YVsyXSkmJm4ucHVzaChuZXcgcihvLHMsaCxmLHUpKSwobz1hWzNdKSYmbi5wdXNoKG5ldyByKG8sZixoLGMsdSkpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LHQucXVhZHRyZWU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpO249dGhpcyxpPWZ1bmN0aW9uKHQsZSxyLG4saSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19aT1pJiZpLmhhc093blByb3BlcnR5KCJkZWZhdWx0Iik/aS5kZWZhdWx0Omk7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9O2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gZih0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGYodC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LnBhcnRPZkN5Y2xlPT09ZS5wYXJ0T2ZDeWNsZT90LnkwLWUueTA6InRvcCI9PT10LmNpcmN1bGFyTGlua1R5cGV8fCJib3R0b20iPT09ZS5jaXJjdWxhckxpbmtUeXBlPy0xOjF9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBwKHQpe3JldHVybih0LnkwK3QueTEpLzJ9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gcCh0LnNvdXJjZSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gcCh0LnRhcmdldCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBtKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24geCh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuIGUodCl9dmFyIF89MjUsdz0xMCxrPS4zO2Z1bmN0aW9uIFQodCxlKXt2YXIgcj0wLG49MDt0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24oaSl7aS5jaXJjdWxhciYmKGkuc291cmNlLmNpcmN1bGFyTGlua1R5cGV8fGkudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU/aS5jaXJjdWxhckxpbmtUeXBlPWkuc291cmNlLmNpcmN1bGFyTGlua1R5cGU/aS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZTppLnRhcmdldC5jaXJjdWxhckxpbmtUeXBlOmkuY2lyY3VsYXJMaW5rVHlwZT1yPG4/InRvcCI6ImJvdHRvbSIsInRvcCI9PWkuY2lyY3VsYXJMaW5rVHlwZT9yKz0xOm4rPTEsdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IodCxlKSE9YihpLnNvdXJjZSxlKSYmYih0LGUpIT1iKGkudGFyZ2V0LGUpfHwodC5jaXJjdWxhckxpbmtUeXBlPWkuY2lyY3VsYXJMaW5rVHlwZSl9KSl9KSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9PXQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGUmJih0LmNpcmN1bGFyTGlua1R5cGU9dC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZSksWSh0LGUpJiYodC5jaXJjdWxhckxpbmtUeXBlPXQuc291cmNlLmNpcmN1bGFyTGlua1R5cGUpKX0pfWZ1bmN0aW9uIEEodCl7dmFyIGU9TWF0aC5hYnModC55MS10LnkwKSxyPU1hdGguYWJzKHQudGFyZ2V0LngwLXQuc291cmNlLngxKTtyZXR1cm4gTWF0aC5hdGFuKHIvZSl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPTA7dC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3I9dC5jaXJjdWxhciYmIVkodCxlKT9yKzE6cn0pO3ZhciBuPTA7cmV0dXJuIHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtuPXQuY2lyY3VsYXImJiFZKHQsZSk/bisxOm59KSxyK259ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnNvdXJjZS5zb3VyY2VMaW5rcyxyPTA7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3I9dC5jaXJjdWxhcj9yKzE6cn0pO3ZhciBuPXQudGFyZ2V0LnRhcmdldExpbmtzLGk9MDtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2k9dC5jaXJjdWxhcj9pKzE6aX0pLCEocj4xfHxpPjEpfWZ1bmN0aW9uIEUodCxlLHIpe3JldHVybiB0LnNvcnQoTCksdC5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7dmFyIGEsbyxzPTA7aWYoWShuLHIpJiZTKG4pKW4uY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcj1zK24ud2lkdGgvMjtlbHNle2Zvcih2YXIgbD0wO2w8aTtsKyspaWYoYT10W2ldLG89dFtsXSwhKGEuc291cmNlLmNvbHVtbjxvLnRhcmdldC5jb2x1bW58fGEudGFyZ2V0LmNvbHVtbj5vLnNvdXJjZS5jb2x1bW4pKXt2YXIgYz10W2xdLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIrdFtsXS53aWR0aC8yK2U7cz1jPnM/YzpzfW4uY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcj1zK24ud2lkdGgvMn19KSx0fWZ1bmN0aW9uIEModCxyLGksYSl7dmFyIG89ZS5taW4odC5saW5rcyxmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UueTB9KTt0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuY2lyY3VsYXJQYXRoRGF0YT17fSl9KSxFKHQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGV9KSxyLGEpLEUodC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZX0pLHIsYSksdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUuY2lyY3VsYXIpe2lmKGUuY2lyY3VsYXJQYXRoRGF0YS5hcmNSYWRpdXM9ZS53aWR0aCt3LGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXI9NSxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGg9ZS5zb3VyY2UueDEtZS5zb3VyY2UueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVg9ZS5zb3VyY2UueDArZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVdpZHRoLGUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYPWUudGFyZ2V0LngwLGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZPWUueTAsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk9ZS55MSxZKGUsYSkmJlMoZSkpZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz13K2Uud2lkdGgvMixlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yLCJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9ZS5zb3VyY2UueTErXytlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpOihlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PWUuc291cmNlLnkwLV8tZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTtlbHNle3ZhciBzPWUuc291cmNlLmNvbHVtbixsPWUuY2lyY3VsYXJMaW5rVHlwZSxjPXQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvdXJjZS5jb2x1bW49PXMmJnQuY2lyY3VsYXJMaW5rVHlwZT09bH0pOyJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/Yy5zb3J0KE8pOmMuc29ydCh6KTt2YXIgdT0wO2MuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yK3UsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cz13K2Uud2lkdGgvMituKnIrdSksdSs9dC53aWR0aH0pLHM9ZS50YXJnZXQuY29sdW1uLGM9dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0LmNvbHVtbj09cyYmdC5jaXJjdWxhckxpbmtUeXBlPT1sfSksImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT9jLnNvcnQoRCk6Yy5zb3J0KEkpLHU9MCxjLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9dytlLndpZHRoLzIrdSxlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cz13K2Uud2lkdGgvMituKnIrdSksdSs9dC53aWR0aH0pLCJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9TWF0aC5tYXgoaSxlLnNvdXJjZS55MSxlLnRhcmdldC55MSkrXytlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpOihlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PW8tXy1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpfWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnROb2RlQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYLWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYK2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnROb2RlQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcn1pZihlLmNpcmN1bGFyKWUucGF0aD1mdW5jdGlvbih0KXt2YXIgZT0iIjtlPSJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/Ik0iK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYKyIgIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50KyIgIisodC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVktdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cykrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAwIDAgMCAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WS10LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cykrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMrIiAwIDAgMCAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYKyIgIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WToiTSIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSt0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiIDAgMCAxICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cysiIDAgMCAxICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZO3JldHVybiBlfShlKTtlbHNle3ZhciBmPW4ubGlua0hvcml6b250YWwoKS5zb3VyY2UoZnVuY3Rpb24odCl7cmV0dXJuW3Quc291cmNlLngwKyh0LnNvdXJjZS54MS10LnNvdXJjZS54MCksdC55MF19KS50YXJnZXQoZnVuY3Rpb24odCl7cmV0dXJuW3QudGFyZ2V0LngwLHQueTFdfSk7ZS5wYXRoPWYoZSl9fSl9ZnVuY3Rpb24gTCh0LGUpe3JldHVybiBQKHQpPT1QKGUpPyJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGU/Tyh0LGUpOnoodCxlKTpQKGUpLVAodCl9ZnVuY3Rpb24geih0LGUpe3JldHVybiB0LnkwLWUueTB9ZnVuY3Rpb24gTyh0LGUpe3JldHVybiBlLnkwLXQueTB9ZnVuY3Rpb24gSSh0LGUpe3JldHVybiB0LnkxLWUueTF9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiBlLnkxLXQueTF9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gdC50YXJnZXQuY29sdW1uLXQuc291cmNlLmNvbHVtbn1mdW5jdGlvbiBSKHQpe3JldHVybiB0LnRhcmdldC54MC10LnNvdXJjZS54MX1mdW5jdGlvbiBGKHQsZSl7dmFyIHI9QSh0KSxuPVIoZSkvTWF0aC50YW4ocik7cmV0dXJuInVwIj09Ryh0KT90LnkxK246dC55MS1ufWZ1bmN0aW9uIEIodCxlKXt2YXIgcj1BKHQpLG49UihlKS9NYXRoLnRhbihyKTtyZXR1cm4idXAiPT1HKHQpP3QueTEtbjp0LnkxK259ZnVuY3Rpb24gTih0LGUscixuKXt0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoIWkuY2lyY3VsYXImJmkudGFyZ2V0LmNvbHVtbi1pLnNvdXJjZS5jb2x1bW4+MSl7dmFyIGE9aS5zb3VyY2UuY29sdW1uKzEsbz1pLnRhcmdldC5jb2x1bW4tMSxzPTEsbD1vLWErMTtmb3Iocz0xO2E8PW87YSsrLHMrKyl0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby5jb2x1bW49PWEpe3ZhciBjLHU9cy8obCsxKSxmPU1hdGgucG93KDEtdSwzKSxoPTMqdSpNYXRoLnBvdygxLXUsMikscD0zKk1hdGgucG93KHUsMikqKDEtdSksZD1NYXRoLnBvdyh1LDMpLGc9ZippLnkwK2gqaS55MCtwKmkueTErZCppLnkxLHY9Zy1pLndpZHRoLzIsbT1nK2kud2lkdGgvMjt2Pm8ueTAmJnY8by55MT8oYz1vLnkxLXYrMTAsYz0iYm90dG9tIj09by5jaXJjdWxhckxpbmtUeXBlP2M6LWMsbz1WKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtiKHQsbikhPWIobyxuKSYmdC5jb2x1bW49PW8uY29sdW1uJiZqKG8sdCkmJlYodCxjLGUscil9KSk6bT5vLnkwJiZtPG8ueTE/KGM9bS1vLnkwKzEwLG89VihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmdC55MDxvLnkxJiZ0LnkxPm8ueTEmJlYodCxjLGUscil9KSk6djxvLnkwJiZtPm8ueTEmJihjPW0tby55MCsxMCxvPVYobyxjLGUsciksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJnQueTA8by55MSYmdC55MT5vLnkxJiZWKHQsYyxlLHIpfSkpfX0pfX0pfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdC55MD5lLnkwJiZ0LnkwPGUueTF8fCh0LnkxPmUueTAmJnQueTE8ZS55MXx8dC55MDxlLnkwJiZ0LnkxPmUueTEpfWZ1bmN0aW9uIFYodCxlLHIsbil7cmV0dXJuIHQueTArZT49ciYmdC55MStlPD1uJiYodC55MD10LnkwK2UsdC55MT10LnkxK2UsdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTE9dC55MStlfSksdC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9dC55MCtlfSkpLHR9ZnVuY3Rpb24gVSh0LGUscixuKXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24oaSl7biYmaS55KyhpLnkxLWkueTApPmUmJihpLnk9aS55LShpLnkrKGkueTEtaS55MCktZSkpO3ZhciBhPXQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQuc291cmNlLHIpPT1iKGkscil9KSxvPWEubGVuZ3RoO28+MSYmYS5zb3J0KGZ1bmN0aW9uKHQsZSl7aWYoIXQuY2lyY3VsYXImJiFlLmNpcmN1bGFyKXtpZih0LnRhcmdldC5jb2x1bW49PWUudGFyZ2V0LmNvbHVtbilyZXR1cm4gdC55MS1lLnkxO2lmKCFIKHQsZSkpcmV0dXJuIHQueTEtZS55MTtpZih0LnRhcmdldC5jb2x1bW4+ZS50YXJnZXQuY29sdW1uKXt2YXIgcj1CKGUsdCk7cmV0dXJuIHQueTEtcn1pZihlLnRhcmdldC5jb2x1bW4+dC50YXJnZXQuY29sdW1uKXJldHVybiBCKHQsZSktZS55MX1yZXR1cm4gdC5jaXJjdWxhciYmIWUuY2lyY3VsYXI/InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOmUuY2lyY3VsYXImJiF0LmNpcmN1bGFyPyJ0b3AiPT1lLmNpcmN1bGFyTGlua1R5cGU/MTotMTp0LmNpcmN1bGFyJiZlLmNpcmN1bGFyP3QuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmInRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/dC50YXJnZXQueTEtZS50YXJnZXQueTE6ZS50YXJnZXQuY29sdW1uLXQudGFyZ2V0LmNvbHVtbjp0LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJiJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGU/dC50YXJnZXQuY29sdW1uPT09ZS50YXJnZXQuY29sdW1uP2UudGFyZ2V0LnkxLXQudGFyZ2V0LnkxOnQudGFyZ2V0LmNvbHVtbi1lLnRhcmdldC5jb2x1bW46InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOnZvaWQgMH0pO3ZhciBzPWkueTA7YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9cyt0LndpZHRoLzIscys9dC53aWR0aH0pLGEuZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKCJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgcj1lKzEsbj0wO3I8bztyKyspbis9YVtyXS53aWR0aDt0LnkwPWkueTEtbi10LndpZHRoLzJ9fSl9KX1mdW5jdGlvbiBxKHQsZSxyKXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGIodC50YXJnZXQscik9PWIoZSxyKX0pLGk9bi5sZW5ndGg7aT4xJiZuLnNvcnQoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQuc291cmNlLmNvbHVtbj09ZS5zb3VyY2UuY29sdW1uKXJldHVybiB0LnkwLWUueTA7aWYoIUgodCxlKSlyZXR1cm4gdC55MC1lLnkwO2lmKGUuc291cmNlLmNvbHVtbjx0LnNvdXJjZS5jb2x1bW4pe3ZhciByPUYoZSx0KTtyZXR1cm4gdC55MC1yfWlmKHQuc291cmNlLmNvbHVtbjxlLnNvdXJjZS5jb2x1bW4pcmV0dXJuIEYodCxlKS1lLnkwfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTp0LnNvdXJjZS5jb2x1bW4tZS5zb3VyY2UuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnNvdXJjZS5jb2x1bW49PT1lLnNvdXJjZS5jb2x1bW4/dC5zb3VyY2UueTEtZS5zb3VyY2UueTE6ZS5zb3VyY2UuY29sdW1uLXQuc291cmNlLmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSk7dmFyIGE9ZS55MDtuLmZvckVhY2goZnVuY3Rpb24odCl7dC55MT1hK3Qud2lkdGgvMixhKz10LndpZHRofSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQscil7aWYoImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZSl7Zm9yKHZhciBhPXIrMSxvPTA7YTxpO2ErKylvKz1uW2FdLndpZHRoO3QueTE9ZS55MS1vLXQud2lkdGgvMn19KX0pfWZ1bmN0aW9uIEgodCxlKXtyZXR1cm4gRyh0KT09RyhlKX1mdW5jdGlvbiBHKHQpe3JldHVybiB0LnkwLXQueTE+MD8idXAiOiJkb3duIn1mdW5jdGlvbiBZKHQsZSl7cmV0dXJuIGIodC5zb3VyY2UsZSk9PWIodC50YXJnZXQsZSl9dC5zYW5rZXlDaXJjdWxhcj1mdW5jdGlvbigpe3ZhciB0LG4sYT0wLGI9MCxBPTEsUz0xLEU9MjQsTD12LHo9byxPPW0sST15LEQ9MzIsUD0yLFI9bnVsbDtmdW5jdGlvbiBGKCl7dmFyIG89e25vZGVzOk8uYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOkkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTshZnVuY3Rpb24odCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pO3ZhciBlPXIubWFwKHQubm9kZXMsTCk7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7Im9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBuPyJ1bmRlZmluZWQiOmwobikpJiYobj10LnNvdXJjZT14KGUsbikpLCJvYmplY3QiIT09KCJ1bmRlZmluZWQiPT10eXBlb2YgaT8idW5kZWZpbmVkIjpsKGkpKSYmKGk9dC50YXJnZXQ9eChlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSl9KG8pLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0wO2lmKG51bGw9PT1yKXtmb3IodmFyIGE9W10sbz0wO288dC5saW5rcy5sZW5ndGg7bysrKXt2YXIgcz10LmxpbmtzW29dLGw9cy5zb3VyY2UuaW5kZXgsYz1zLnRhcmdldC5pbmRleDthW2xdfHwoYVtsXT1bXSksYVtjXXx8KGFbY109W10pLC0xPT09YVtsXS5pbmRleE9mKGMpJiZhW2xdLnB1c2goYyl9dmFyIHU9aShhKTt1LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KTt2YXIgZj17fTtmb3Iobz0wO288dS5sZW5ndGg7bysrKXtmb3IodmFyIGg9dVtvXSxwPSExLGQ9MDtkPGgubGVuZ3RoLTE7ZCsrKWlmKGZbaFtkXV18fChmW2hbZF1dPXt9KSxmW2hbZF1dJiZmW2hbZF1dW2hbZCsxXV0pe3A9ITA7YnJlYWt9aWYoIXApe3ZhciBnPWguc2xpY2UoLTIpO2ZbZ1swXV1bZ1sxXV09ITB9fXQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldC5pbmRleCxyPXQuc291cmNlLmluZGV4O2U9PT1yfHxmW3JdJiZmW3JdW2VdPyh0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKTp0LmNpcmN1bGFyPSExfSl9ZWxzZSB0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zb3VyY2Vbcl08dC50YXJnZXRbcl0/dC5jaXJjdWxhcj0hMToodC5jaXJjdWxhcj0hMCx0LmNpcmN1bGFyTGlua0lEPW4sbis9MSl9KX0obywwLFIpLGZ1bmN0aW9uKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcnRPZkN5Y2xlPSExLHQudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyxoKSxlLnN1bSh0LnRhcmdldExpbmtzLGgpKSx0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KX0pfShvKSxmdW5jdGlvbih0KXt2YXIgZSxyLG47Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9bix0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7ci5pbmRleE9mKHQudGFyZ2V0KTwwJiYhdC5jaXJjdWxhciYmci5wdXNoKHQudGFyZ2V0KX0pfSk7Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuaGVpZ2h0PW4sdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnNvdXJjZSk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnNvdXJjZSl9KX0pO3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNvbHVtbj1NYXRoLmZsb29yKHouY2FsbChudWxsLHQsbikpfSl9KG8pLFQobyxMKSxmdW5jdGlvbihpLG8scyl7dmFyIGw9ci5uZXN0KCkua2V5KGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKGkubm9kZXMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZXN9KTsoZnVuY3Rpb24ocil7aWYobil7dmFyIG89MS8wO2wuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1TKm4vKHQubGVuZ3RoKzEpO289ZTxvP2U6b30pLHQ9b312YXIgcz1lLm1pbihsLGZ1bmN0aW9uKHIpe3JldHVybihTLWItKHIubGVuZ3RoLTEpKnQpL2Uuc3VtKHIsaCl9KTtzKj1rLGkubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqc30pO3ZhciBjPWZ1bmN0aW9uKHQpe3ZhciByPTAsbj0wLGk9MCxhPTAsbz1lLm1heCh0Lm5vZGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pO3JldHVybiB0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKCJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/cis9dC53aWR0aDpuKz10LndpZHRoLDA9PXQudGFyZ2V0LmNvbHVtbiYmKGErPXQud2lkdGgpLHQuc291cmNlLmNvbHVtbj09byYmKGkrPXQud2lkdGgpKX0pLHt0b3A6cj1yPjA/citfK3c6cixib3R0b206bj1uPjA/bitfK3c6bixsZWZ0OmE9YT4wP2ErXyt3OmEscmlnaHQ6aT1pPjA/aStfK3c6aX19KGkpLHU9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLm1heCh0Lm5vZGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pLGk9QS1hLG89Uy1iLHM9aStyLnJpZ2h0K3IubGVmdCxsPW8rci50b3Arci5ib3R0b20sYz1pL3MsdT1vL2w7cmV0dXJuIGE9YSpjK3IubGVmdCxBPTA9PXIucmlnaHQ/QTpBKmMsYj1iKnUrci50b3AsUyo9dSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC54MD1hK3QuY29sdW1uKigoQS1hLUUpL24pLHQueDE9dC54MCtFfSksdX0oaSxjKTtzKj11LGkubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqc30pLGwuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0LmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmRlcHRoPT1sLmxlbmd0aC0xJiYxPT1lPyh0LnkwPVMvMi10LnZhbHVlKnMsdC55MT10LnkwK3QudmFsdWUqcyk6MD09dC5kZXB0aCYmMT09ZT8odC55MD1TLzItdC52YWx1ZSpzLHQueTE9dC55MCt0LnZhbHVlKnMpOnQucGFydE9mQ3ljbGU/MD09TSh0LHIpPyh0LnkwPVMvMituLHQueTE9dC55MCt0LnZhbHVlKnMpOiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/KHQueTA9YituLHQueTE9dC55MCt0LnZhbHVlKnMpOih0LnkwPVMtdC52YWx1ZSpzLW4sdC55MT10LnkwK3QudmFsdWUqcyk6MD09Yy50b3B8fDA9PWMuYm90dG9tPyh0LnkwPShTLWIpL2Uqbix0LnkxPXQueTArdC52YWx1ZSpzKToodC55MD0oUy1iKS8yLWUvMituLHQueTE9dC55MCt0LnZhbHVlKnMpfSl9KX0pKHMpLG0oKTtmb3IodmFyIGM9MSx1PW87dT4wOy0tdSl2KGMqPS45OSxzKSxtKCk7ZnVuY3Rpb24gdih0LHIpe3ZhciBuPWwubGVuZ3RoO2wuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgYT1pLmxlbmd0aCxvPWlbMF0uZGVwdGg7aS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzO2lmKGkuc291cmNlTGlua3MubGVuZ3RofHxpLnRhcmdldExpbmtzLmxlbmd0aClpZihpLnBhcnRPZkN5Y2xlJiZNKGkscik+MCk7ZWxzZSBpZigwPT1vJiYxPT1hKXM9aS55MS1pLnkwLGkueTA9Uy8yLXMvMixpLnkxPVMvMitzLzI7ZWxzZSBpZihvPT1uLTEmJjE9PWEpcz1pLnkxLWkueTAsaS55MD1TLzItcy8yLGkueTE9Uy8yK3MvMjtlbHNle3ZhciBsPWUubWVhbihpLnNvdXJjZUxpbmtzLGcpLGM9ZS5tZWFuKGkudGFyZ2V0TGlua3MsZCksdT0oKGwmJmM/KGwrYykvMjpsfHxjKS1wKGkpKSp0O2kueTArPXUsaS55MSs9dX19KX0pfWZ1bmN0aW9uIG0oKXtsLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHIsbixpLGE9YixvPWUubGVuZ3RoO2ZvcihlLnNvcnQoZiksaT0wO2k8bzsrK2kpcj1lW2ldLChuPWEtci55MCk+MCYmKHIueTArPW4sci55MSs9biksYT1yLnkxK3Q7aWYoKG49YS10LVMpPjApZm9yKGE9ci55MC09bixyLnkxLT1uLGk9by0yO2k+PTA7LS1pKXI9ZVtpXSwobj1yLnkxK3QtYSk+MCYmKHIueTAtPW4sci55MS09biksYT1yLnkwfSl9fShvLEQsTCksQihvKTtmb3IodmFyIHM9MDtzPDQ7cysrKVUobyxTLEwpLHEobywwLEwpLE4obyxiLFMsTCksVShvLFMsTCkscShvLDAsTCk7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT10Lm5vZGVzLGE9dC5saW5rcyxvPSExLHM9ITE7aWYoYS5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/bz0hMDoiYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlJiYocz0hMCl9KSwwPT1vfHwwPT1zKXt2YXIgbD1lLm1pbihpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnkwfSksYz1lLm1heChpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxfSksdT1jLWwsZj1uLXIsaD1mL3U7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnkxLXQueTApKmg7dC55MD0odC55MC1sKSpoLHQueTE9dC55MCtlfSksYS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9KHQueTAtbCkqaCx0LnkxPSh0LnkxLWwpKmgsdC53aWR0aD10LndpZHRoKmh9KX19KG8sYixTKSxDKG8sUCxTLEwpLG99ZnVuY3Rpb24gQih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zb3VyY2VMaW5rcy5zb3J0KHUpLHQudGFyZ2V0TGlua3Muc29ydChjKX0pLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnkwLHI9ZSxuPXQueTEsaT1uO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyPyh0LnkwPW4tdC53aWR0aC8yLG4tPXQud2lkdGgpOih0LnkwPWUrdC53aWR0aC8yLGUrPXQud2lkdGgpfSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTE9aS10LndpZHRoLzIsaS09dC53aWR0aCk6KHQueTE9cit0LndpZHRoLzIscis9dC53aWR0aCl9KX0pfXJldHVybiBGLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksRik6TH0sRi5ub2RlQWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHo9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLEYpOnp9LEYubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPSt0LEYpOkV9LEYubm9kZVBhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsRik6dH0sRi5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksRik6T30sRi5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oST0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksRik6SX0sRi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWI9MCxBPSt0WzBdLFM9K3RbMV0sRik6W0EtYSxTLWJdfSxGLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdFswXVswXSxBPSt0WzFdWzBdLGI9K3RbMF1bMV0sUz0rdFsxXVsxXSxGKTpbW2EsYl0sW0EsU11dfSxGLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEQ9K3QsRik6RH0sRi5jaXJjdWxhckxpbmtHYXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9K3QsRik6UH0sRi5ub2RlUGFkZGluZ1JhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LEYpOm59LEYuc29ydE5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhSPXQsRik6Un0sRi51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIFQodCxMKSxCKHQpLHQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhckxpbmtUeXBlPXQueTArdC55MTxTPyJ0b3AiOiJib3R0b20iLHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlLHQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlKX0pLFUodCxTLEwsITEpLHEodCwwLEwpLEModCxQLFMsTCksdH0sRn0sdC5zYW5rZXlDZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/ZS5taW4odC5zb3VyY2VMaW5rcyxhKS0xOjB9LHQuc2Fua2V5TGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZXB0aH0sdC5zYW5rZXlSaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9LHQuc2Fua2V5SnVzdGlmeT1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/aShyLHQoImQzLWFycmF5IiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLXNoYXBlIiksdCgiZWxlbWVudGFyeS1jaXJjdWl0cy1kaXJlY3RlZC1ncmFwaCIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMsbnVsbCl9LHsiZDMtYXJyYXkiOjE0MiwiZDMtY29sbGVjdGlvbiI6MTQzLCJkMy1zaGFwZSI6MTUyLCJlbGVtZW50YXJ5LWNpcmN1aXRzLWRpcmVjdGVkLWdyYXBoIjoxNjR9XSwxNTI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpO249dGhpcyxpPWZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBuPU1hdGguYWJzLGk9TWF0aC5hdGFuMixhPU1hdGguY29zLG89TWF0aC5tYXgscz1NYXRoLm1pbixsPU1hdGguc2luLGM9TWF0aC5zcXJ0LHU9MWUtMTIsZj1NYXRoLlBJLGg9Zi8yLHA9MipmO2Z1bmN0aW9uIGQodCl7cmV0dXJuIHQ+PTE/aDp0PD0tMT8taDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiB2KHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiB5KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gYih0LGUscixuLGksYSxzKXt2YXIgbD10LXIsdT1lLW4sZj0ocz9hOi1hKS9jKGwqbCt1KnUpLGg9Zip1LHA9LWYqbCxkPXQraCxnPWUrcCx2PXIraCxtPW4rcCx5PShkK3YpLzIseD0oZyttKS8yLGI9di1kLF89bS1nLHc9YipiK18qXyxrPWktYSxUPWQqbS12KmcsQT0oXzwwPy0xOjEpKmMobygwLGsqayp3LVQqVCkpLE09KFQqXy1iKkEpL3csUz0oLVQqYi1fKkEpL3csRT0oVCpfK2IqQSkvdyxDPSgtVCpiK18qQSkvdyxMPU0teSx6PVMteCxPPUUteSxJPUMteDtyZXR1cm4gTCpMK3oqej5PKk8rSSpJJiYoTT1FLFM9Qykse2N4Ok0sY3k6Uyx4MDE6LWgseTAxOi1wLHgxMTpNKihpL2stMSkseTExOlMqKGkvay0xKX19ZnVuY3Rpb24gXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbmV3IF8odCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBUKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIEEoKXt2YXIgdD1rLG49VCxpPXIoITApLGE9bnVsbCxvPXcscz1udWxsO2Z1bmN0aW9uIGwocil7dmFyIGwsYyx1LGY9ci5sZW5ndGgsaD0hMTtmb3IobnVsbD09YSYmKHM9byh1PWUucGF0aCgpKSksbD0wO2w8PWY7KytsKSEobDxmJiZpKGM9cltsXSxsLHIpKT09PWgmJigoaD0haCk/cy5saW5lU3RhcnQoKTpzLmxpbmVFbmQoKSksaCYmcy5wb2ludCgrdChjLGwsciksK24oYyxsLHIpKTtpZih1KXJldHVybiBzPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSksbCk6dH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6bn0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cighIXQpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxudWxsIT1hJiYocz1vKGEpKSxsKTpvfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/YT1zPW51bGw6cz1vKGE9dCksbCk6YX0sbH1mdW5jdGlvbiBNKCl7dmFyIHQ9ayxuPW51bGwsaT1yKDApLGE9VCxvPXIoITApLHM9bnVsbCxsPXcsYz1udWxsO2Z1bmN0aW9uIHUocil7dmFyIHUsZixoLHAsZCxnPXIubGVuZ3RoLHY9ITEsbT1uZXcgQXJyYXkoZykseT1uZXcgQXJyYXkoZyk7Zm9yKG51bGw9PXMmJihjPWwoZD1lLnBhdGgoKSkpLHU9MDt1PD1nOysrdSl7aWYoISh1PGcmJm8ocD1yW3VdLHUscikpPT09dilpZih2PSF2KWY9dSxjLmFyZWFTdGFydCgpLGMubGluZVN0YXJ0KCk7ZWxzZXtmb3IoYy5saW5lRW5kKCksYy5saW5lU3RhcnQoKSxoPXUtMTtoPj1mOy0taCljLnBvaW50KG1baF0seVtoXSk7Yy5saW5lRW5kKCksYy5hcmVhRW5kKCl9diYmKG1bdV09K3QocCx1LHIpLHlbdV09K2kocCx1LHIpLGMucG9pbnQobj8rbihwLHUscik6bVt1XSxhPythKHAsdSxyKTp5W3VdKSl9aWYoZClyZXR1cm4gYz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gZigpe3JldHVybiBBKCkuZGVmaW5lZChvKS5jdXJ2ZShsKS5jb250ZXh0KHMpfXJldHVybiB1Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxuPW51bGwsdSk6dH0sdS54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLHUpOnR9LHUueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksdSk6bn0sdS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYT1udWxsLHUpOml9LHUueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTppfSx1LnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHUpOmF9LHUubGluZVgwPXUubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KHQpLnkoaSl9LHUubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KHQpLnkoYSl9LHUubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KG4pLnkoaSl9LHUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoISF0KSx1KTpvfSx1LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsbnVsbCE9cyYmKGM9bChzKSksdSk6bH0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3M9Yz1udWxsOmM9bChzPXQpLHUpOnN9LHV9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBFKHQpe3JldHVybiB0fV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEM9eih3KTtmdW5jdGlvbiBMKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24geih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgTCh0KGUpKX1yZXR1cm4gZS5fY3VydmU9dCxlfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2Uoeih0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBJKCl7cmV0dXJuIE8oQSgpLmN1cnZlKEMpKX1mdW5jdGlvbiBEKCl7dmFyIHQ9TSgpLmN1cnZlKEMpLGU9dC5jdXJ2ZSxyPXQubGluZVgwLG49dC5saW5lWDEsaT10LmxpbmVZMCxhPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhyKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhuKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHoodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gUCh0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX1MLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIFI9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEYodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIE4odCl7dmFyIG49RixpPUIsYT1rLG89VCxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciByLGw9Ui5jYWxsKGFyZ3VtZW50cyksYz1uLmFwcGx5KHRoaXMsbCksdT1pLmFwcGx5KHRoaXMsbCk7aWYoc3x8KHM9cj1lLnBhdGgoKSksdChzLCthLmFwcGx5KHRoaXMsKGxbMF09YyxsKSksK28uYXBwbHkodGhpcyxsKSwrYS5hcHBseSh0aGlzLChsWzBdPXUsbCkpLCtvLmFwcGx5KHRoaXMsbCkpLHIpcmV0dXJuIHM9bnVsbCxyKyIifHxudWxsfXJldHVybiBsLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGwpOm59LGwudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbCk6aX0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6YX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGwpOnN9LGx9ZnVuY3Rpb24gaih0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIFYodCxlLHIsbixpKXt0Lm1vdmVUbyhlLHIpLHQuYmV6aWVyQ3VydmVUbyhlLHI9KHIraSkvMixuLHIsbixpKX1mdW5jdGlvbiBVKHQsZSxyLG4saSl7dmFyIGE9UChlLHIpLG89UChlLHI9KHIraSkvMikscz1QKG4sciksbD1QKG4saSk7dC5tb3ZlVG8oYVswXSxhWzFdKSx0LmJlemllckN1cnZlVG8ob1swXSxvWzFdLHNbMF0sc1sxXSxsWzBdLGxbMV0pfXZhciBxPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvZik7dC5tb3ZlVG8ociwwKSx0LmFyYygwLDAsciwwLHApfX0sSD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqciwtciksdC5saW5lVG8oLXIsLXIpLHQubGluZVRvKC1yLC0zKnIpLHQubGluZVRvKHIsLTMqciksdC5saW5lVG8ociwtciksdC5saW5lVG8oMypyLC1yKSx0LmxpbmVUbygzKnIsciksdC5saW5lVG8ocixyKSx0LmxpbmVUbyhyLDMqciksdC5saW5lVG8oLXIsMypyKSx0LmxpbmVUbygtcixyKSx0LmxpbmVUbygtMypyLHIpLHQuY2xvc2VQYXRoKCl9fSxHPU1hdGguc3FydCgxLzMpLFk9MipHLFc9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9ZKSxuPXIqRzt0Lm1vdmVUbygwLC1yKSx0LmxpbmVUbyhuLDApLHQubGluZVRvKDAsciksdC5saW5lVG8oLW4sMCksdC5jbG9zZVBhdGgoKX19LFg9TWF0aC5zaW4oZi8xMCkvTWF0aC5zaW4oNypmLzEwKSxaPU1hdGguc2luKHAvMTApKlgsJD0tTWF0aC5jb3MocC8xMCkqWCxKPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLG49WipyLGk9JCpyO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4saSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89cCphLzUscz1NYXRoLmNvcyhvKSxsPU1hdGguc2luKG8pO3QubGluZVRvKGwqciwtcypyKSx0LmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfXQuY2xvc2VQYXRoKCl9fSxLPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUpLG49LXIvMjt0LnJlY3QobixuLHIscil9fSxRPU1hdGguc3FydCgzKSx0dD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPS1NYXRoLnNxcnQoZS8oMypRKSk7dC5tb3ZlVG8oMCwyKnIpLHQubGluZVRvKC1RKnIsLXIpLHQubGluZVRvKFEqciwtciksdC5jbG9zZVBhdGgoKX19LGV0PS0uNSxydD1NYXRoLnNxcnQoMykvMixudD0xL01hdGguc3FydCgxMiksaXQ9MyoobnQvMisxKSxhdD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL2l0KSxuPXIvMixpPXIqbnQsYT1uLG89cipudCtyLHM9LWEsbD1vO3QubW92ZVRvKG4saSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGwpLHQubGluZVRvKGV0Km4tcnQqaSxydCpuK2V0KmkpLHQubGluZVRvKGV0KmEtcnQqbyxydCphK2V0Km8pLHQubGluZVRvKGV0KnMtcnQqbCxydCpzK2V0KmwpLHQubGluZVRvKGV0Km4rcnQqaSxldCppLXJ0Km4pLHQubGluZVRvKGV0KmErcnQqbyxldCpvLXJ0KmEpLHQubGluZVRvKGV0KnMrcnQqbCxldCpsLXJ0KnMpLHQuY2xvc2VQYXRoKCl9fSxvdD1bcSxILFcsSyxKLHR0LGF0XTtmdW5jdGlvbiBzdCgpe31mdW5jdGlvbiBsdCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gY3QodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHV0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBmdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gaHQodCxlKXt0aGlzLl9iYXNpcz1uZXcgY3QodCksdGhpcy5fYmV0YT1lfWN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6bHQodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6bHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LHV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0Omx0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Omx0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxodC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGgtMTtpZihyPjApZm9yKHZhciBuLGk9dFswXSxhPWVbMF0sbz10W3JdLWkscz1lW3JdLWEsbD0tMTsrK2w8PXI7KW49bC9yLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtsXSsoMS10aGlzLl9iZXRhKSooaStuKm8pLHRoaXMuX2JldGEqZVtsXSsoMS10aGlzLl9iZXRhKSooYStuKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIHB0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gMT09PWU/bmV3IGN0KHQpOm5ldyBodCh0LGUpfXJldHVybiByLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguODUpO2Z1bmN0aW9uIGR0KHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1yKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gZ3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWd0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpkdCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6ZHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciB2dD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyBndCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiBtdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9bXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OmR0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgeXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgbXQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24geHQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXh0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmR0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgYnQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgeHQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24gX3QodCxlLHIpe3ZhciBuPXQuX3gxLGk9dC5feTEsYT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPnUpe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO249KG4qcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9sLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9sfWlmKHQuX2wyM19hPnUpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGY9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2Ysbz0obypjK3QuX3kxKnQuX2wyM18yYS1yKnQuX2wxMl8yYSkvZn10Ll9jb250ZXh0LmJlemllckN1cnZlVG8obixpLGEsbyx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gd3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX13dC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ol90KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGt0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgd3QodCxlKTpuZXcgZ3QodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBUdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVR0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6X3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgQXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBUdCh0LGUpOm5ldyBtdCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIE10KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9TXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ol90KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFN0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgTXQodCxlKTpuZXcgeHQodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBFdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQ3QodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIEx0KHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxvPShyLXQuX3kxKS8oaXx8bjwwJiYtMCkscz0oYSppK28qbikvKG4raSk7cmV0dXJuKEN0KGEpK0N0KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24genQodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIE90KHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqZSxhLXMsby1zKnIsYSxvKX1mdW5jdGlvbiBJdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRHQodCl7dGhpcy5fY29udGV4dD1uZXcgUHQodCl9ZnVuY3Rpb24gUHQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFJ0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBGdCh0KXt2YXIgZSxyLG49dC5sZW5ndGgtMSxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPG4tMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtuLTFdPTIsYVtuLTFdPTcsb1tuLTFdPTgqdFtuLTFdK3Rbbl0sZT0xO2U8bjsrK2Upcj1pW2VdL2FbZS0xXSxhW2VdLT1yLG9bZV0tPXIqb1tlLTFdO2ZvcihpW24tMV09b1tuLTFdL2Fbbi0xXSxlPW4tMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtuLTFdPSh0W25dK2lbbi0xXSkvMixlPTA7ZTxuLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIEJ0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBOdCh0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKG49byxvPXRbZVthXV0scj0wO3I8czsrK3Ipb1tyXVsxXSs9b1tyXVswXT1pc05hTihuW3JdWzFdKT9uW3JdWzBdOm5bcl1bMV19ZnVuY3Rpb24ganQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpOy0tZT49MDspcltlXT1lO3JldHVybiByfWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIHRbZV19ZnVuY3Rpb24gVXQodCl7dmFyIGU9dC5tYXAocXQpO3JldHVybiBqdCh0KS5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGVbdF0tZVtyXX0pfWZ1bmN0aW9uIHF0KHQpe2Zvcih2YXIgZSxyPS0xLG49MCxpPXQubGVuZ3RoLGE9LTEvMDsrK3I8aTspKGU9K3Rbcl1bMV0pPmEmJihhPWUsbj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBIdCh0KXt2YXIgZT10Lm1hcChHdCk7cmV0dXJuIGp0KHQpLnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSl9ZnVuY3Rpb24gR3QodCl7Zm9yKHZhciBlLHI9MCxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KShlPSt0W25dWzFdKSYmKHIrPWUpO3JldHVybiByfUV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0sSXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOk90KHRoaXMsdGhpcy5fdDAsenQodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLE90KHRoaXMsenQodGhpcyxyPUx0KHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDpPdCh0aGlzLHRoaXMuX3QwLHI9THQodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19fSwoRHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSXQucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtJdC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LFB0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxuLHIsYSxpKX19LFJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09cil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBuPUZ0KHQpLGk9RnQoZSksYT0wLG89MTtvPHI7KythLCsrbyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVthXSxpWzBdW2FdLG5bMV1bYV0saVsxXVthXSx0W29dLGVbb10pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXIpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19LHQuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxvPXYsXz1yKDApLHc9bnVsbCxrPW0sVD15LEE9eCxNPW51bGw7ZnVuY3Rpb24gUygpe3ZhciByLGcsdixtPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx5PStvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx4PWsuYXBwbHkodGhpcyxhcmd1bWVudHMpLWgsUz1ULmFwcGx5KHRoaXMsYXJndW1lbnRzKS1oLEU9bihTLXgpLEM9Uz54O2lmKE18fChNPXI9ZS5wYXRoKCkpLHk8bSYmKGc9eSx5PW0sbT1nKSx5PnUpaWYoRT5wLXUpTS5tb3ZlVG8oeSphKHgpLHkqbCh4KSksTS5hcmMoMCwwLHkseCxTLCFDKSxtPnUmJihNLm1vdmVUbyhtKmEoUyksbSpsKFMpKSxNLmFyYygwLDAsbSxTLHgsQykpO2Vsc2V7dmFyIEwseixPPXgsST1TLEQ9eCxQPVMsUj1FLEY9RSxCPUEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTj1CPnUmJih3Pyt3LmFwcGx5KHRoaXMsYXJndW1lbnRzKTpjKG0qbSt5KnkpKSxqPXMobih5LW0pLzIsK18uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxWPWosVT1qO2lmKE4+dSl7dmFyIHE9ZChOL20qbChCKSksSD1kKE4veSpsKEIpKTsoUi09MipxKT51PyhEKz1xKj1DPzE6LTEsUC09cSk6KFI9MCxEPVA9KHgrUykvMiksKEYtPTIqSCk+dT8oTys9SCo9Qz8xOi0xLEktPUgpOihGPTAsTz1JPSh4K1MpLzIpfXZhciBHPXkqYShPKSxZPXkqbChPKSxXPW0qYShQKSxYPW0qbChQKTtpZihqPnUpe3ZhciBaLCQ9eSphKEkpLEo9eSpsKEkpLEs9bSphKEQpLFE9bSpsKEQpO2lmKEU8ZiYmKFo9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD1yLXQsYz1uLWUsZj1vLWksaD1zLWEscD1oKmwtZipjO2lmKCEocCpwPHUpKXJldHVyblt0KyhwPShmKihlLWEpLWgqKHQtaSkpL3ApKmwsZStwKmNdfShHLFksSyxRLCQsSixXLFgpKSl7dmFyIHR0PUctWlswXSxldD1ZLVpbMV0scnQ9JC1aWzBdLG50PUotWlsxXSxpdD0xL2woKCh2PSh0dCpydCtldCpudCkvKGModHQqdHQrZXQqZXQpKmMocnQqcnQrbnQqbnQpKSk+MT8wOnY8LTE/ZjpNYXRoLmFjb3ModikpLzIpLGF0PWMoWlswXSpaWzBdK1pbMV0qWlsxXSk7Vj1zKGosKG0tYXQpLyhpdC0xKSksVT1zKGosKHktYXQpLyhpdCsxKSl9fUY+dT9VPnU/KEw9YihLLFEsRyxZLHksVSxDKSx6PWIoJCxKLFcsWCx5LFUsQyksTS5tb3ZlVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxVPGo/TS5hcmMoTC5jeCxMLmN5LFUsaShMLnkwMSxMLngwMSksaSh6LnkwMSx6LngwMSksIUMpOihNLmFyYyhMLmN4LEwuY3ksVSxpKEwueTAxLEwueDAxKSxpKEwueTExLEwueDExKSwhQyksTS5hcmMoMCwwLHksaShMLmN5K0wueTExLEwuY3grTC54MTEpLGkoei5jeSt6LnkxMSx6LmN4K3oueDExKSwhQyksTS5hcmMoei5jeCx6LmN5LFUsaSh6LnkxMSx6LngxMSksaSh6LnkwMSx6LngwMSksIUMpKSk6KE0ubW92ZVRvKEcsWSksTS5hcmMoMCwwLHksTyxJLCFDKSk6TS5tb3ZlVG8oRyxZKSxtPnUmJlI+dT9WPnU/KEw9YihXLFgsJCxKLG0sLVYsQyksej1iKEcsWSxLLFEsbSwtVixDKSxNLmxpbmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLFY8aj9NLmFyYyhMLmN4LEwuY3ksVixpKEwueTAxLEwueDAxKSxpKHoueTAxLHoueDAxKSwhQyk6KE0uYXJjKEwuY3gsTC5jeSxWLGkoTC55MDEsTC54MDEpLGkoTC55MTEsTC54MTEpLCFDKSxNLmFyYygwLDAsbSxpKEwuY3krTC55MTEsTC5jeCtMLngxMSksaSh6LmN5K3oueTExLHouY3grei54MTEpLEMpLE0uYXJjKHouY3gsei5jeSxWLGkoei55MTEsei54MTEpLGkoei55MDEsei54MDEpLCFDKSkpOk0uYXJjKDAsMCxtLFAsRCxDKTpNLmxpbmVUbyhXLFgpfWVsc2UgTS5tb3ZlVG8oMCwwKTtpZihNLmNsb3NlUGF0aCgpLHIpcmV0dXJuIE09bnVsbCxyKyIifHxudWxsfXJldHVybiBTLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGU9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK1QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWYvMjtyZXR1cm5bYShyKSplLGwocikqZV19LFMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxTKTp0fSxTLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksUyk6b30sUy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTpffSxTLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTp3fSxTLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTprfSxTLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksUyk6VH0sUy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLFMpOkF9LFMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT1udWxsPT10P251bGw6dCxTKTpNfSxTfSx0LmFyZWE9TSx0LmxpbmU9QSx0LnBpZT1mdW5jdGlvbigpe3ZhciB0PUUsZT1TLG49bnVsbCxpPXIoMCksYT1yKHApLG89cigwKTtmdW5jdGlvbiBzKHIpe3ZhciBzLGwsYyx1LGYsaD1yLmxlbmd0aCxkPTAsZz1uZXcgQXJyYXkoaCksdj1uZXcgQXJyYXkoaCksbT0raS5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1NYXRoLm1pbihwLE1hdGgubWF4KC1wLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLW0pKSx4PU1hdGgubWluKE1hdGguYWJzKHkpL2gsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooeTwwPy0xOjEpO2ZvcihzPTA7czxoOysrcykoZj12W2dbc109c109K3QocltzXSxzLHIpKT4wJiYoZCs9Zik7Zm9yKG51bGwhPWU/Zy5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodlt0XSx2W3JdKX0pOm51bGwhPW4mJmcuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBuKHJbdF0scltlXSl9KSxzPTAsYz1kPyh5LWgqYikvZDowO3M8aDsrK3MsbT11KWw9Z1tzXSx1PW0rKChmPXZbbF0pPjA/ZipjOjApK2IsdltsXT17ZGF0YTpyW2xdLGluZGV4OnMsdmFsdWU6ZixzdGFydEFuZ2xlOm0sZW5kQW5nbGU6dSxwYWRBbmdsZTp4fTtyZXR1cm4gdn1yZXR1cm4gcy52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLHMpOnR9LHMuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxzKTplfSxzLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwscyk6bn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCkscyk6aX0scy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTpvfSxzfSx0LmFyZWFSYWRpYWw9RCx0LnJhZGlhbEFyZWE9RCx0LmxpbmVSYWRpYWw9SSx0LnJhZGlhbExpbmU9SSx0LnBvaW50UmFkaWFsPVAsdC5saW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBOKGopfSx0LmxpbmtWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiBOKFYpfSx0LmxpbmtSYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1OKFUpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHQuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9cihxKSxuPXIoNjQpLGk9bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHI7aWYoaXx8KGk9cj1lLnBhdGgoKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhpLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscilyZXR1cm4gaT1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIGEudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoZSksYSk6dH0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYSk6bn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDp0LGEpOml9LGF9LHQuc3ltYm9scz1vdCx0LnN5bWJvbENpcmNsZT1xLHQuc3ltYm9sQ3Jvc3M9SCx0LnN5bWJvbERpYW1vbmQ9Vyx0LnN5bWJvbFNxdWFyZT1LLHQuc3ltYm9sU3Rhcj1KLHQuc3ltYm9sVHJpYW5nbGU9dHQsdC5zeW1ib2xXeWU9YXQsdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdXQodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmdCh0KX0sdC5jdXJ2ZUJhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgY3QodCl9LHQuY3VydmVCdW5kbGU9cHQsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPXl0LHQuY3VydmVDYXJkaW5hbE9wZW49YnQsdC5jdXJ2ZUNhcmRpbmFsPXZ0LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPUF0LHQuY3VydmVDYXRtdWxsUm9tT3Blbj1TdCx0LmN1cnZlQ2F0bXVsbFJvbT1rdCx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRXQodCl9LHQuY3VydmVMaW5lYXI9dyx0LmN1cnZlTW9ub3RvbmVYPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSXQodCl9LHQuY3VydmVNb25vdG9uZVk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEdCh0KX0sdC5jdXJ2ZU5hdHVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBSdCh0KX0sdC5jdXJ2ZVN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCdCh0LC41KX0sdC5jdXJ2ZVN0ZXBBZnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJ0KHQsMSl9LHQuY3VydmVTdGVwQmVmb3JlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnQodCwwKX0sdC5zdGFjaz1mdW5jdGlvbigpe3ZhciB0PXIoW10pLGU9anQsbj1OdCxpPVZ0O2Z1bmN0aW9uIGEocil7dmFyIGEsbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGw9ci5sZW5ndGgsYz1zLmxlbmd0aCx1PW5ldyBBcnJheShjKTtmb3IoYT0wO2E8YzsrK2Epe2Zvcih2YXIgZixoPXNbYV0scD11W2FdPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZClwW2RdPWY9WzAsK2kocltkXSxoLGQscildLGYuZGF0YT1yW2RdO3Aua2V5PWh9Zm9yKGE9MCxvPWUodSk7YTxjOysrYSl1W29bYV1dLmluZGV4PWE7cmV0dXJuIG4odSxvKSx1fXJldHVybiBhLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKFIuY2FsbChlKSksYSk6dH0sYS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLGEpOml9LGEub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9qdDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoUi5jYWxsKHQpKSxhKTplfSxhLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P050OnQsYSk6bn0sYX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLGE9MCxvPXRbMF0ubGVuZ3RoO2E8bzsrK2Epe2ZvcihpPXI9MDtyPG47KytyKWkrPXRbcl1bYV1bMV18fDA7aWYoaSlmb3Iocj0wO3I8bjsrK3IpdFtyXVthXVsxXS89aX1OdCh0LGUpfX0sdC5zdGFja09mZnNldERpdmVyZ2luZz1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYSxvLHMsbD0wLGM9dFtlWzBdXS5sZW5ndGg7bDxjOysrbClmb3IoYT1vPTAscj0wO3I8czsrK3IpKGk9KG49dFtlW3JdXVtsXSlbMV0tblswXSk+PTA/KG5bMF09YSxuWzFdPWErPWkpOmk8MD8oblsxXT1vLG5bMF09bys9aSk6blswXT1hfSx0LnN0YWNrT2Zmc2V0Tm9uZT1OdCx0LnN0YWNrT2Zmc2V0U2lsaG91ZXR0ZT1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO248YTsrK24pe2Zvcih2YXIgbz0wLHM9MDtvPHI7KytvKXMrPXRbb11bbl1bMV18fDA7aVtuXVsxXSs9aVtuXVswXT0tcy8yfU50KHQsZSl9fSx0LnN0YWNrT2Zmc2V0V2lnZ2xlPWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihuPShyPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxhPTAsbz0xO288bjsrK28pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxpOysrcyl7Zm9yKHZhciB1PXRbZVtzXV0sZj11W29dWzFdfHwwLGg9KGYtKHVbby0xXVsxXXx8MCkpLzIscD0wO3A8czsrK3Ape3ZhciBkPXRbZVtwXV07aCs9KGRbb11bMV18fDApLShkW28tMV1bMV18fDApfWwrPWYsYys9aCpmfXJbby0xXVsxXSs9cltvLTFdWzBdPWEsbCYmKGEtPWMvbCl9cltvLTFdWzFdKz1yW28tMV1bMF09YSxOdCh0LGUpfX0sdC5zdGFja09yZGVyQXBwZWFyYW5jZT1VdCx0LnN0YWNrT3JkZXJBc2NlbmRpbmc9SHQsdC5zdGFja09yZGVyRGVzY2VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gSHQodCkucmV2ZXJzZSgpfSx0LnN0YWNrT3JkZXJJbnNpZGVPdXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXQubGVuZ3RoLGk9dC5tYXAoR3QpLGE9VXQodCksbz0wLHM9MCxsPVtdLGM9W107Zm9yKGU9MDtlPG47KytlKXI9YVtlXSxvPHM/KG8rPWlbcl0sbC5wdXNoKHIpKToocys9aVtyXSxjLnB1c2gocikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9LHQuc3RhY2tPcmRlck5vbmU9anQsdC5zdGFja09yZGVyUmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4ganQodCkucmV2ZXJzZSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2kocix0KCJkMy1wYXRoIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzKX0seyJkMy1wYXRoIjoxNDl9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlLHIsbj0wLGk9MCxhPTAsbz0xZTMscz0wLGw9MCxjPTAsdT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxmPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gbHx8KGYocCksbD11Lm5vdygpK2MpfWZ1bmN0aW9uIHAoKXtsPTB9ZnVuY3Rpb24gZCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ucmVzdGFydCh0LGUsciksbn1mdW5jdGlvbiB2KCl7aCgpLCsrbjtmb3IodmFyIHQscj1lO3I7KSh0PWwtci5fdGltZSk+PTAmJnIuX2NhbGwuY2FsbChudWxsLHQpLHI9ci5fbmV4dDstLW59ZnVuY3Rpb24gbSgpe2w9KHM9dS5ub3coKSkrYyxuPWk9MDt0cnl7digpfWZpbmFsbHl7bj0wLGZ1bmN0aW9uKCl7dmFyIHQsbixpPWUsYT0xLzA7Zm9yKDtpOylpLl9jYWxsPyhhPmkuX3RpbWUmJihhPWkuX3RpbWUpLHQ9aSxpPWkuX25leHQpOihuPWkuX25leHQsaS5fbmV4dD1udWxsLGk9dD90Ll9uZXh0PW46ZT1uKTtyPXQseChhKX0oKSxsPTB9fWZ1bmN0aW9uIHkoKXt2YXIgdD11Lm5vdygpLGU9dC1zO2U+byYmKGMtPWUscz10KX1mdW5jdGlvbiB4KHQpe258fChpJiYoaT1jbGVhclRpbWVvdXQoaSkpLHQtbD4yND8odDwxLzAmJihpPXNldFRpbWVvdXQobSx0LXUubm93KCktYykpLGEmJihhPWNsZWFySW50ZXJ2YWwoYSkpKTooYXx8KHM9dS5ub3coKSxhPXNldEludGVydmFsKHksbykpLG49MSxmKG0pKSl9ZC5wcm90b3R5cGU9Zy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmQscmVzdGFydDpmdW5jdGlvbih0LG4saSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtpPShudWxsPT1pP2goKToraSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8cj09PXRoaXN8fChyP3IuX25leHQ9dGhpczplPXRoaXMscj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1pLHgoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAseCgpKX19O3Qubm93PWgsdC50aW1lcj1nLHQudGltZXJGbHVzaD12LHQudGltZW91dD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIGU9bnVsbD09ZT8wOitlLG4ucmVzdGFydChmdW5jdGlvbihyKXtuLnN0b3AoKSx0KHIrZSl9LGUsciksbn0sdC5pbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IGQsaT1lO3JldHVybiBudWxsPT1lPyhuLnJlc3RhcnQodCxlLHIpLG4pOihlPStlLHI9bnVsbD09cj9oKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIGEobyl7bys9aSxuLnJlc3RhcnQoYSxpKz1lLHIpLHQobyl9LGUsciksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE1NDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpe3ZhciB0PXt2ZXJzaW9uOiIzLjUuMTcifSxyPVtdLnNsaWNlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KX0saT10aGlzLmRvY3VtZW50O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBvKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWlmKGkpdHJ5e24oaS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGV9Y2F0Y2godCl7bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxpKXRyeXtpLmNyZWF0ZUVsZW1lbnQoIkRJViIpLnN0eWxlLnNldFByb3BlcnR5KCJvcGFjaXR5IiwwLCIiKX1jYXRjaCh0KXt2YXIgcz10aGlzLkVsZW1lbnQucHJvdG90eXBlLGw9cy5zZXRBdHRyaWJ1dGUsYz1zLnNldEF0dHJpYnV0ZU5TLHU9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxmPXUuc2V0UHJvcGVydHk7cy5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtsLmNhbGwodGhpcyx0LGUrIiIpfSxzLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxyKXtjLmNhbGwodGhpcyx0LGUscisiIil9LHUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2YuY2FsbCh0aGlzLHQsZSsiIixyKX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gZCh0KXtyZXR1cm4haXNOYU4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm57bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik+MD9pPWE6bj1hKzF9cmV0dXJuIG59fX10LmFzY2VuZGluZz1oLHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5taW49ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmcj5uJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJnI+biYmKHI9bil9cmV0dXJuIHJ9LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPnImJihyPW4pfXJldHVybiByfSx0LmV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPS0xLG89dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZXtmb3IoOysrYTxvOylpZihudWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfXJldHVybltyLGldfSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLGE9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPSt0W2FdKSYmKG4rPXIpO2Vsc2UgZm9yKDsrK2E8aTspZChyPStlLmNhbGwodCx0W2FdLGEpKSYmKG4rPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xLG89aTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylkKHI9cCh0W2FdKSk/bis9cjotLW87ZWxzZSBmb3IoOysrYTxpOylkKHI9cChlLmNhbGwodCx0W2FdLGEpKSk/bis9cjotLW87aWYobylyZXR1cm4gbi9vfSx0LnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksaT0rdFtuLTFdLGE9ci1uO3JldHVybiBhP2krYSoodFtuXS1pKTppfSx0Lm1lZGlhbj1mdW5jdGlvbihlLHIpe3ZhciBuLGk9W10sYT1lLmxlbmd0aCxvPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGE7KWQobj1wKGVbb10pKSYmaS5wdXNoKG4pO2Vsc2UgZm9yKDsrK288YTspZChuPXAoci5jYWxsKGUsZVtvXSxvKSkpJiZpLnB1c2gobik7aWYoaS5sZW5ndGgpcmV0dXJuIHQucXVhbnRpbGUoaS5zb3J0KGgpLC41KX0sdC52YXJpYW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0wLHM9LTEsbD0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytzPGk7KWQocj1wKHRbc10pKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2Vsc2UgZm9yKDsrK3M8aTspZChyPXAoZS5jYWxsKHQsdFtzXSxzKSkpJiYobys9KG49ci1hKSooci0oYSs9bi8rK2wpKSk7aWYobD4xKXJldHVybiBvLyhsLTEpfSx0LmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlP01hdGguc3FydChlKTplfTt2YXIgdj1nKGgpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0TGVmdD12LmxlZnQsdC5iaXNlY3Q9dC5iaXNlY3RSaWdodD12LnJpZ2h0LHQuYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGcoMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIGgodChlKSxyKX06dCl9LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7KGE9YXJndW1lbnRzLmxlbmd0aCk8MyYmKHI9dC5sZW5ndGgsYTwyJiYoZT0wKSk7Zm9yKHZhciBuLGksYT1yLWU7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLG49dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5wYWlycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj10WzBdLGk9bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspaVtlXT1bbixuPXRbKytlXV07cmV0dXJuIGl9LHQudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe2lmKCEoYT1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciByPS0xLG49dC5taW4oZSxtKSxpPW5ldyBBcnJheShuKTsrK3I8bjspZm9yKHZhciBhLG89LTEscz1pW3JdPW5ldyBBcnJheShhKTsrK288YTspc1tvXT1lW29dW3JdO3JldHVybiBpfSx0LnppcD1mdW5jdGlvbigpe3JldHVybiB0LnRyYW5zcG9zZShhcmd1bWVudHMpfSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShuPXRbaV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeT1NYXRoLmFicztmdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLHIse3ZhbHVlOmVbcl0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIGIoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX10LnJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCkpLChlLXQpL3I9PTEvMCl0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIHJhbmdlIik7dmFyIG4saT1bXSxhPWZ1bmN0aW9uKHQpe3ZhciBlPTE7Zm9yKDt0KmUlMTspZSo9MTA7cmV0dXJuIGV9KHkocikpLG89LTE7aWYodCo9YSxlKj1hLChyKj1hKTwwKWZvcig7KG49dCtyKisrbyk+ZTspaS5wdXNoKG4vYSk7ZWxzZSBmb3IoOyhuPXQrciorK28pPGU7KWkucHVzaChuL2EpO3JldHVybiBpfSx0Lm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBiO2lmKHQgaW5zdGFuY2VvZiBiKXQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOylyLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspci5zZXQoZS5jYWxsKHQsbj10W2ldLGkpLG4pfWVsc2UgZm9yKHZhciBvIGluIHQpci5zZXQobyx0W29dKTtyZXR1cm4gcn07dmFyIF89Il9fcHJvdG9fXyIsdz0iXDAiO2Z1bmN0aW9uIGsodCl7cmV0dXJuKHQrPSIiKT09PV98fHRbMF09PT13P3crdDp0fWZ1bmN0aW9uIFQodCl7cmV0dXJuKHQrPSIiKVswXT09PXc/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIEEodCl7cmV0dXJuIGsodClpbiB0aGlzLl99ZnVuY3Rpb24gTSh0KXtyZXR1cm4odD1rKHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiBTKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goVChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gRSgpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gQygpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTCgpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIHoodCl7cmV0dXJuIHR9ZnVuY3Rpb24gTyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24gSSh0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPUQubGVuZ3RoO3I8bjsrK3Ipe3ZhciBpPURbcl0rZTtpZihpIGluIHQpcmV0dXJuIGl9fXgoYix7aGFzOkEsZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0KV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9bayh0KV09ZX0scmVtb3ZlOk0sa2V5czpTLHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHRoaXMuX1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh7a2V5OlQoZSksdmFsdWU6dGhpcy5fW2VdfSk7cmV0dXJuIHR9LHNpemU6RSxlbXB0eTpDLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpLHRoaXMuX1tlXSl9fSksdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9W10sYT1bXTtmdW5jdGlvbiBvKHQsYSxzKXtpZihzPj1pLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwobixhKTplP2Euc29ydChlKTphO2Zvcih2YXIgbCxjLHUsZixoPS0xLHA9YS5sZW5ndGgsZD1pW3MrK10sZz1uZXcgYjsrK2g8cDspKGY9Zy5nZXQobD1kKGM9YVtoXSkpKT9mLnB1c2goYyk6Zy5zZXQobCxbY10pO3JldHVybiB0PyhjPXQoKSx1PWZ1bmN0aW9uKGUscil7Yy5zZXQoZSxvKHQscixzKSl9KTooYz17fSx1PWZ1bmN0aW9uKGUscil7Y1tlXT1vKHQscixzKX0pLGcuZm9yRWFjaCh1KSxjfXJldHVybiBuLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBvKGUsdCwwKX0sbi5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYocj49aS5sZW5ndGgpcmV0dXJuIGU7dmFyIG49W10sbz1hW3IrK107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLGkpe24ucHVzaCh7a2V5OmUsdmFsdWVzOnQoaSxyKX0pfSksbz9uLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LmtleSxlLmtleSl9KTpufShvKHQubWFwLGUsMCksMCl9LG4ua2V5PWZ1bmN0aW9uKHQpe3JldHVybiBpLnB1c2godCksbn0sbi5zb3J0S2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYVtpLmxlbmd0aC0xXT10LG59LG4uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gZT10LG59LG4ucm9sbHVwPWZ1bmN0aW9uKHQpe3JldHVybiByPXQsbn0sbn0sdC5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEw7aWYodClmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZS5hZGQodFtyXSk7cmV0dXJuIGV9LHgoTCx7aGFzOkEsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0Kz0iIildPSEwLHR9LHJlbW92ZTpNLHZhbHVlczpTLHNpemU6RSxlbXB0eTpDLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpKX19KSx0LmJlaGF2aW9yPXt9LHQucmViaW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49MSxpPWFyZ3VtZW50cy5sZW5ndGg7KytuPGk7KXRbcj1hcmd1bWVudHNbbl1dPU8odCxlLGVbcl0pO3JldHVybiB0fTt2YXIgRD1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTtmdW5jdGlvbiBQKCl7fWZ1bmN0aW9uIFIoKXt9ZnVuY3Rpb24gRih0KXt2YXIgZT1bXSxyPW5ldyBiO2Z1bmN0aW9uIG4oKXtmb3IodmFyIHIsbj1lLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspKHI9bltpXS5vbikmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0fXJldHVybiBuLm9uPWZ1bmN0aW9uKG4saSl7dmFyIGEsbz1yLmdldChuKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsZT1lLnNsaWNlKDAsYT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKGErMSkpLHIucmVtb3ZlKG4pKSxpJiZlLnB1c2goci5zZXQobix7b246aX0pKSx0KX0sbn1mdW5jdGlvbiBCKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIE4oKXtmb3IodmFyIGUscj10LmV2ZW50O2U9ci5zb3VyY2VFdmVudDspcj1lO3JldHVybiByfWZ1bmN0aW9uIGooZSl7Zm9yKHZhciByPW5ldyBSLG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7KytuPGk7KXJbYXJndW1lbnRzW25dXT1GKHIpO3JldHVybiByLm9mPWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RyeXt2YXIgbz1hLnNvdXJjZUV2ZW50PXQuZXZlbnQ7YS50YXJnZXQ9ZSx0LmV2ZW50PWEsclthLnR5cGVdLmFwcGx5KG4saSl9ZmluYWxseXt0LmV2ZW50PW99fX0scn10LmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBSLGU9LTEscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2FyZ3VtZW50c1tlXV09Rih0KTtyZXR1cm4gdH0sUi5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgcj10LmluZGV4T2YoIi4iKSxuPSIiO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbdF0ub24obik6dGhpc1t0XS5vbihuLGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT1lKWZvcih0IGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpc1t0XS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sdC5ldmVudD1udWxsLHQucmVxdW90ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKFYsIlxcJCYiKX07dmFyIFY9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLFU9e30uX19wcm90b19fP2Z1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX06ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19O2Z1bmN0aW9uIHEodCl7cmV0dXJuIFUodCxXKSx0fXZhciBIPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3Rvcih0KX0sRz1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodCl9LFk9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hdGNoZXN8fHRbSSh0LCJtYXRjaGVzU2VsZWN0b3IiKV07cmV0dXJuKFk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5jYWxsKHQsZSl9KSh0LGUpfTsiZnVuY3Rpb24iPT10eXBlb2YgU2l6emxlJiYoSD1mdW5jdGlvbih0LGUpe3JldHVybiBTaXp6bGUodCxlKVswXXx8bnVsbH0sRz1TaXp6bGUsWT1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yKSx0LnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LnNlbGVjdChpLmRvY3VtZW50RWxlbWVudCl9O3ZhciBXPXQuc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtmdW5jdGlvbiBYKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0LHRoaXMpfX1mdW5jdGlvbiBaKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gRyh0LHRoaXMpfX1XLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdO3Q9WCh0KTtmb3IodmFyIG89LTEscz10aGlzLmxlbmd0aDsrK288czspe2EucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KG49dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEsYz1uLmxlbmd0aDsrK2w8YzspKGk9bltsXSk/KGUucHVzaChyPXQuY2FsbChpLGkuX19kYXRhX18sbCxvKSksciYmIl9fZGF0YV9fImluIGkmJihyLl9fZGF0YV9fPWkuX19kYXRhX18pKTplLnB1c2gobnVsbCl9cmV0dXJuIHEoYSl9LFcuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaT1bXTt0PVoodCk7Zm9yKHZhciBhPS0xLG89dGhpcy5sZW5ndGg7KythPG87KWZvcih2YXIgcz10aGlzW2FdLGw9LTEsYz1zLmxlbmd0aDsrK2w8YzspKHI9c1tsXSkmJihpLnB1c2goZT1uKHQuY2FsbChyLHIuX19kYXRhX18sbCxhKSkpLGUucGFyZW50Tm9kZT1yKTtyZXR1cm4gcShpKX07dmFyICQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBLKGUscil7cmV0dXJuIGU9dC5ucy5xdWFsaWZ5KGUpLG51bGw9PXI/ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX06ImZ1bmN0aW9uIj09dHlwZW9mIHI/ZS5sb2NhbD9mdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfTpmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX06ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfTpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFEodCl7cmV0dXJuIHQudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gdHQoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3QucmVxdW90ZShlKSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiBldCh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHJ0KHQsZSl7dmFyIHI9KHQ9ZXQodCkubWFwKG50KSkubGVuZ3RoO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7KytuPHI7KXRbbl0odGhpcyxpKX06ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPHI7KXRbbl0odGhpcyxlKX19ZnVuY3Rpb24gbnQodCl7dmFyIGU9dHQodCk7cmV0dXJuIGZ1bmN0aW9uKHIsbil7aWYoaT1yLmNsYXNzTGlzdClyZXR1cm4gbj9pLmFkZCh0KTppLnJlbW92ZSh0KTt2YXIgaT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiI7bj8oZS5sYXN0SW5kZXg9MCxlLnRlc3QoaSl8fHIuc2V0QXR0cmlidXRlKCJjbGFzcyIsUShpKyIgIit0KSkpOnIuc2V0QXR0cmlidXRlKCJjbGFzcyIsUShpLnJlcGxhY2UoZSwiICIpKSl9fWZ1bmN0aW9uIGl0KHQsZSxyKXtyZXR1cm4gbnVsbD09ZT9mdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLHIpfTpmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfX1mdW5jdGlvbiBhdCh0LGUpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9OmZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBvdChlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOihlPXQubnMucXVhbGlmeShlKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09JCYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09JD90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gc3QoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBsdCh0KXtyZXR1cm57X19kYXRhX186dH19ZnVuY3Rpb24gY3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFkodGhpcyx0KX19ZnVuY3Rpb24gdXQodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBpLGE9dFtyXSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKShpPWFbb10pJiZlKGksbyxyKTtyZXR1cm4gdH1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gVSh0LGh0KSx0fXQubnM9e3ByZWZpeDpKLHF1YWxpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI6Iikscj10O3JldHVybiBlPj0wJiYieG1sbnMiIT09KHI9dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSxKLmhhc093blByb3BlcnR5KHIpP3tzcGFjZTpKW3JdLGxvY2FsOnR9OnR9fSxXLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuKGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUoZSl9Zm9yKHIgaW4gZSl0aGlzLmVhY2goSyhyLGVbcl0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKEsoZSxyKSl9LFcuY2xhc3NlZD1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10aGlzLm5vZGUoKSxuPSh0PWV0KHQpKS5sZW5ndGgsaT0tMTtpZihlPXIuY2xhc3NMaXN0KXtmb3IoOysraTxuOylpZighZS5jb250YWlucyh0W2ldKSlyZXR1cm4hMX1lbHNlIGZvcihlPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysraTxuOylpZighdHQodFtpXSkudGVzdChlKSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IoZSBpbiB0KXRoaXMuZWFjaChydChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKHJ0KHQsZSkpfSxXLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSIiKSx0KXRoaXMuZWFjaChpdChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG8oaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKGl0KHQsZSxyKSl9LFcucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdGhpcy5ub2RlKClbdF07Zm9yKGUgaW4gdCl0aGlzLmVhY2goYXQoZSx0W2VdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChhdCh0LGUpKX0sVy50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sVy5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LFcuYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0PW90KHQpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LFcuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9b3QodCksZT1YKGUpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxXLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goc3QpfSxXLmRhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKHQ9bmV3IEFycmF5KGE9KHI9dGhpc1swXSkubGVuZ3RoKTsrK2k8YTspKG49cltpXSkmJih0W2ldPW4uX19kYXRhX18pO3JldHVybiB0fWZ1bmN0aW9uIG8odCxyKXt2YXIgbixpLGEsbz10Lmxlbmd0aCx1PXIubGVuZ3RoLGY9TWF0aC5taW4obyx1KSxoPW5ldyBBcnJheSh1KSxwPW5ldyBBcnJheSh1KSxkPW5ldyBBcnJheShvKTtpZihlKXt2YXIgZyx2PW5ldyBiLG09bmV3IEFycmF5KG8pO2ZvcihuPS0xOysrbjxvOykoaT10W25dKSYmKHYuaGFzKGc9ZS5jYWxsKGksaS5fX2RhdGFfXyxuKSk/ZFtuXT1pOnYuc2V0KGcsaSksbVtuXT1nKTtmb3Iobj0tMTsrK248dTspKGk9di5nZXQoZz1lLmNhbGwocixhPXJbbl0sbikpKT8hMCE9PWkmJihoW25dPWksaS5fX2RhdGFfXz1hKTpwW25dPWx0KGEpLHYuc2V0KGcsITApO2ZvcihuPS0xOysrbjxvOyluIGluIG0mJiEwIT09di5nZXQobVtuXSkmJihkW25dPXRbbl0pfWVsc2V7Zm9yKG49LTE7KytuPGY7KWk9dFtuXSxhPXJbbl0saT8oaS5fX2RhdGFfXz1hLGhbbl09aSk6cFtuXT1sdChhKTtmb3IoO248dTsrK24pcFtuXT1sdChyW25dKTtmb3IoO248bzsrK24pZFtuXT10W25dfXAudXBkYXRlPWgscC5wYXJlbnROb2RlPWgucGFyZW50Tm9kZT1kLnBhcmVudE5vZGU9dC5wYXJlbnROb2RlLHMucHVzaChwKSxsLnB1c2goaCksYy5wdXNoKGQpfXZhciBzPWZ0KFtdKSxsPXEoW10pLGM9cShbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKDsrK2k8YTspbyhyPXRoaXNbaV0sdC5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGkpKTtlbHNlIGZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQpO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiBjfSxsfSxXLmRhdHVtPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxXLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgYT0wLG89dGhpcy5sZW5ndGg7YTxvO2ErKyl7aS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0ocj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIHEoaSl9LFcub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciByLG49dGhpc1t0XSxpPW4ubGVuZ3RoLTEsYT1uW2ldOy0taT49MDspKHI9bltpXSkmJihhJiZhIT09ci5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LFcuc29ydD1mdW5jdGlvbih0KXt0PWZ1bmN0aW9uKHQpe2FyZ3VtZW50cy5sZW5ndGh8fCh0PWgpO3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiBlJiZyP3QoZS5fX2RhdGFfXyxyLl9fZGF0YV9fKTohZS0hcn19LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGU9LTEscj10aGlzLmxlbmd0aDsrK2U8cjspdGhpc1tlXS5zb3J0KHQpO3JldHVybiB0aGlzLm9yZGVyKCl9LFcuZWFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdXQodGhpcyxmdW5jdGlvbihlLHIsbil7dC5jYWxsKGUsZS5fX2RhdGFfXyxyLG4pfSl9LFcuY2FsbD1mdW5jdGlvbih0KXt2YXIgZT1uKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LFcuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LFcubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylmb3IodmFyIHI9dGhpc1t0XSxuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXt2YXIgYT1yW25dO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LFcuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHV0KHRoaXMsZnVuY3Rpb24oKXsrK3R9KSx0fTt2YXIgaHQ9W107ZnVuY3Rpb24gcHQoZSxyLGkpe3ZhciBhPSJfX29uIitlLG89ZS5pbmRleE9mKCIuIikscz1ndDtvPjAmJihlPWUuc2xpY2UoMCxvKSk7dmFyIGw9ZHQuZ2V0KGUpO2Z1bmN0aW9uIGMoKXt2YXIgdD10aGlzW2FdO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LHQuJCksZGVsZXRlIHRoaXNbYV0pfXJldHVybiBsJiYoZT1sLHM9dnQpLG8/cj9mdW5jdGlvbigpe3ZhciB0PXMocixuKGFyZ3VtZW50cykpO2MuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzW2FdPXQsdC4kPWkpLHQuXz1yfTpjOnI/UDpmdW5jdGlvbigpe3ZhciByLG49bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIit0LnJlcXVvdGUoZSkrIiQiKTtmb3IodmFyIGkgaW4gdGhpcylpZihyPWkubWF0Y2gobikpe3ZhciBhPXRoaXNbaV07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHJbMV0sYSxhLiQpLGRlbGV0ZSB0aGlzW2ldfX19dC5zZWxlY3Rpb24uZW50ZXI9ZnQsdC5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPWh0LGh0LmFwcGVuZD1XLmFwcGVuZCxodC5lbXB0eT1XLmVtcHR5LGh0Lm5vZGU9Vy5ub2RlLGh0LmNhbGw9Vy5jYWxsLGh0LnNpemU9Vy5zaXplLGh0LnNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPVtdLHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe249KGk9dGhpc1tzXSkudXBkYXRlLG8ucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9aS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSx1PWkubGVuZ3RoOysrYzx1OykoYT1pW2NdKT8oZS5wdXNoKG5bY109cj10LmNhbGwoaS5wYXJlbnROb2RlLGEuX19kYXRhX18sYyxzKSksci5fX2RhdGFfXz1hLl9fZGF0YV9fKTplLnB1c2gobnVsbCl9cmV0dXJuIHEobyl9LGh0Lmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByLG4saTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYocj10aGlzLGU9ZnVuY3Rpb24odCxlLGEpe3ZhciBvLHM9clthXS51cGRhdGUsbD1zLmxlbmd0aDtmb3IoYSE9aSYmKGk9YSxuPTApLGU+PW4mJihuPWUrMSk7IShvPXNbbl0pJiYrK248bDspO3JldHVybiBvfSksVy5pbnNlcnQuY2FsbCh0aGlzLHQsZSl9LHQuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1bSCh0LGkpXSkucGFyZW50Tm9kZT1pLmRvY3VtZW50RWxlbWVudDooZT1bdF0pLnBhcmVudE5vZGU9YSh0KSxxKFtlXSl9LHQuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1uKEcodCxpKSkpLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9bih0KSkucGFyZW50Tm9kZT1udWxsLHEoW2VdKX0sVy5vbj1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0hMSksdCl0aGlzLmVhY2gocHQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpcmV0dXJuKG49dGhpcy5ub2RlKClbIl9fb24iK3RdKSYmbi5fO3I9ITF9cmV0dXJuIHRoaXMuZWFjaChwdCh0LGUscikpfTt2YXIgZHQ9dC5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7ZnVuY3Rpb24gZ3QoZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9dC5ldmVudDt0LmV2ZW50PW4sclswXT10aGlzLl9fZGF0YV9fO3RyeXtlLmFwcGx5KHRoaXMscil9ZmluYWxseXt0LmV2ZW50PWl9fX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPWd0KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHIuY2FsbCh0aGlzLHQpfX1pJiZkdC5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJvbiIrdCBpbiBpJiZkdC5yZW1vdmUodCl9KTt2YXIgbXQseXQ9MDtmdW5jdGlvbiB4dChlKXt2YXIgcj0iLmRyYWdzdXBwcmVzcy0iKyArK3l0LG49ImNsaWNrIityLGk9dC5zZWxlY3QobyhlKSkub24oInRvdWNobW92ZSIrcixCKS5vbigiZHJhZ3N0YXJ0IityLEIpLm9uKCJzZWxlY3RzdGFydCIrcixCKTtpZihudWxsPT1tdCYmKG10PSEoIm9uc2VsZWN0c3RhcnQiaW4gZSkmJkkoZS5zdHlsZSwidXNlclNlbGVjdCIpKSxtdCl7dmFyIHM9YShlKS5zdHlsZSxsPXNbbXRdO3NbbXRdPSJub25lIn1yZXR1cm4gZnVuY3Rpb24odCl7aWYoaS5vbihyLG51bGwpLG10JiYoc1ttdF09bCksdCl7dmFyIGU9ZnVuY3Rpb24oKXtpLm9uKG4sbnVsbCl9O2kub24obixmdW5jdGlvbigpe0IoKSxlKCl9LCEwKSxzZXRUaW1lb3V0KGUsMCl9fX10Lm1vdXNlPWZ1bmN0aW9uKHQpe3JldHVybiBfdCh0LE4oKSl9O3ZhciBidD10aGlzLm5hdmlnYXRvciYmL1dlYktpdC8udGVzdCh0aGlzLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7ZnVuY3Rpb24gX3QoZSxyKXtyLmNoYW5nZWRUb3VjaGVzJiYocj1yLmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgbj1lLm93bmVyU1ZHRWxlbWVudHx8ZTtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgaT1uLmNyZWF0ZVNWR1BvaW50KCk7aWYoYnQ8MCl7dmFyIGE9byhlKTtpZihhLnNjcm9sbFh8fGEuc2Nyb2xsWSl7dmFyIHM9KG49dC5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpKVswXVswXS5nZXRTY3JlZW5DVE0oKTtidD0hKHMuZnx8cy5lKSxuLnJlbW92ZSgpfX1yZXR1cm4gYnQ/KGkueD1yLnBhZ2VYLGkueT1yLnBhZ2VZKTooaS54PXIuY2xpZW50WCxpLnk9ci5jbGllbnRZKSxbKGk9aS5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGkueV19dmFyIGw9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bci5jbGllbnRYLWwubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLWwudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiB3dCgpe3JldHVybiB0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9dC50b3VjaD1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj1lLGU9TigpLmNoYW5nZWRUb3VjaGVzKSxlKWZvcih2YXIgbixpPTAsYT1lLmxlbmd0aDtpPGE7KytpKWlmKChuPWVbaV0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBfdCh0LG4pfSx0LmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXt2YXIgZT1qKGEsImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIikscj1udWxsLG49cyhQLHQubW91c2UsbywibW91c2Vtb3ZlIiwibW91c2V1cCIpLGk9cyh3dCx0LnRvdWNoLHosInRvdWNobW92ZSIsInRvdWNoZW5kIik7ZnVuY3Rpb24gYSgpe3RoaXMub24oIm1vdXNlZG93bi5kcmFnIixuKS5vbigidG91Y2hzdGFydC5kcmFnIixpKX1mdW5jdGlvbiBzKG4saSxhLG8scyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGwsYz10LmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8dC5ldmVudC50YXJnZXQsdT10aGlzLnBhcmVudE5vZGUsZj1lLm9mKHRoaXMsYXJndW1lbnRzKSxoPTAscD1uKCksZD0iLmRyYWciKyhudWxsPT1wPyIiOiItIitwKSxnPXQuc2VsZWN0KGEoYykpLm9uKG8rZCxmdW5jdGlvbigpe3ZhciB0LGUscj1pKHUscCk7aWYoIXIpcmV0dXJuO3Q9clswXS1tWzBdLGU9clsxXS1tWzFdLGh8PXR8ZSxtPXIsZih7dHlwZToiZHJhZyIseDpyWzBdK2xbMF0seTpyWzFdK2xbMV0sZHg6dCxkeTplfSl9KS5vbihzK2QsZnVuY3Rpb24oKXtpZighaSh1LHApKXJldHVybjtnLm9uKG8rZCxudWxsKS5vbihzK2QsbnVsbCksdihoKSxmKHt0eXBlOiJkcmFnZW5kIn0pfSksdj14dChjKSxtPWkodSxwKTtsPXI/WyhsPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKS54LW1bMF0sbC55LW1bMV1dOlswLDBdLGYoe3R5cGU6ImRyYWdzdGFydCJ9KX19cmV0dXJuIGEub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sdC5yZWJpbmQoYSxlLCJvbiIpfSx0LnRvdWNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1OKCkudG91Y2hlcyksZT9uKGUpLm1hcChmdW5jdGlvbihlKXt2YXIgcj1fdCh0LGUpO3JldHVybiByLmlkZW50aWZpZXI9ZS5pZGVudGlmaWVyLHJ9KTpbXX07dmFyIGt0PTFlLTYsVHQ9a3Qqa3QsQXQ9TWF0aC5QSSxNdD0yKkF0LFN0PU10LWt0LEV0PUF0LzIsQ3Q9QXQvMTgwLEx0PTE4MC9BdDtmdW5jdGlvbiB6dCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gT3QodCxlLHIpe3JldHVybihlWzBdLXRbMF0pKihyWzFdLXRbMV0pLShlWzFdLXRbMV0pKihyWzBdLXRbMF0pfWZ1bmN0aW9uIEl0KHQpe3JldHVybiB0PjE/MDp0PC0xP0F0Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4gdD4xP0V0OnQ8LTE/LUV0Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBQdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBSdCh0KXtyZXR1cm4odD1NYXRoLnNpbih0LzIpKSp0fXZhciBGdD1NYXRoLlNRUlQyO3QuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxmPWwtYSxoPXUqdStmKmY7aWYoaDxUdCluPU1hdGgubG9nKGMvbykvRnQscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmYsbypNYXRoLmV4cChGdCp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoaCksZD0oYypjLW8qbys0KmgpLygyKm8qMipwKSxnPShjKmMtbypvLTQqaCkvKDIqYyoyKnApLHY9TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSxtPU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0obS12KS9GdCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9UHQodiksbD1vLygyKnApKihzKihlPUZ0KnIrdiwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfSh2KSk7cmV0dXJuW2krbCp1LGErbCpmLG8qcy9QdChGdCpyK3YpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7dmFyIGUscixuLGEscyxsLGMsdSxmLGg9e3g6MCx5OjAsazoxfSxwPVs5NjAsNTAwXSxkPWp0LGc9MjUwLHY9MCxtPSJtb3VzZWRvd24uem9vbSIseT0ibW91c2Vtb3ZlLnpvb20iLHg9Im1vdXNldXAuem9vbSIsYj0idG91Y2hzdGFydC56b29tIixfPWoodywiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKTtmdW5jdGlvbiB3KHQpe3Qub24obSx6KS5vbihOdCsiLnpvb20iLEkpLm9uKCJkYmxjbGljay56b29tIixEKS5vbihiLE8pfWZ1bmN0aW9uIGsodCl7cmV0dXJuWyh0WzBdLWgueCkvaC5rLCh0WzFdLWgueSkvaC5rXX1mdW5jdGlvbiBUKHQpe2guaz1NYXRoLm1heChkWzBdLE1hdGgubWluKGRbMV0sdCkpfWZ1bmN0aW9uIEEodCxlKXtlPWZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKmguaytoLngsdFsxXSpoLmsraC55XX0oZSksaC54Kz10WzBdLWVbMF0saC55Kz10WzFdLWVbMV19ZnVuY3Rpb24gTShlLG4saSxhKXtlLl9fY2hhcnRfXz17eDpoLngseTpoLnksazpoLmt9LFQoTWF0aC5wb3coMixhKSksQShyPW4saSksZT10LnNlbGVjdChlKSxnPjAmJihlPWUudHJhbnNpdGlvbigpLmR1cmF0aW9uKGcpKSxlLmNhbGwody5ldmVudCl9ZnVuY3Rpb24gUygpe2MmJmMuZG9tYWluKGwucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtaC54KS9oLmt9KS5tYXAobC5pbnZlcnQpKSxmJiZmLmRvbWFpbih1LnJhbmdlKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LWgueSkvaC5rfSkubWFwKHUuaW52ZXJ0KSl9ZnVuY3Rpb24gRSh0KXt2Kyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBDKHQpe1MoKSx0KHt0eXBlOiJ6b29tIixzY2FsZTpoLmssdHJhbnNsYXRlOltoLngsaC55XX0pfWZ1bmN0aW9uIEwodCl7LS12fHwodCh7dHlwZToiem9vbWVuZCJ9KSxyPW51bGwpfWZ1bmN0aW9uIHooKXt2YXIgZT10aGlzLHI9Xy5vZihlLGFyZ3VtZW50cyksbj0wLGk9dC5zZWxlY3QobyhlKSkub24oeSxmdW5jdGlvbigpe249MSxBKHQubW91c2UoZSksYSksQyhyKX0pLm9uKHgsZnVuY3Rpb24oKXtpLm9uKHksbnVsbCkub24oeCxudWxsKSxzKG4pLEwocil9KSxhPWsodC5tb3VzZShlKSkscz14dChlKTtmcy5jYWxsKGUpLEUocil9ZnVuY3Rpb24gTygpe3ZhciBlLHI9dGhpcyxuPV8ub2Yocixhcmd1bWVudHMpLGk9e30sYT0wLG89Ii56b29tLSIrdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyLGw9InRvdWNobW92ZSIrbyxjPSJ0b3VjaGVuZCIrbyx1PVtdLGY9dC5zZWxlY3QocikscD14dChyKTtmdW5jdGlvbiBkKCl7dmFyIG49dC50b3VjaGVzKHIpO3JldHVybiBlPWguayxuLmZvckVhY2goZnVuY3Rpb24odCl7dC5pZGVudGlmaWVyIGluIGkmJihpW3QuaWRlbnRpZmllcl09ayh0KSl9KSxufWZ1bmN0aW9uIGcoKXt2YXIgZT10LmV2ZW50LnRhcmdldDt0LnNlbGVjdChlKS5vbihsLHYpLm9uKGMseSksdS5wdXNoKGUpO2Zvcih2YXIgbj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89MCxmPW4ubGVuZ3RoO288ZjsrK28paVtuW29dLmlkZW50aWZpZXJdPW51bGw7dmFyIHA9ZCgpLGc9RGF0ZS5ub3coKTtpZigxPT09cC5sZW5ndGgpe2lmKGctczw1MDApe3ZhciBtPXBbMF07TShyLG0saVttLmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coaC5rKS9NYXRoLkxOMikrMSksQigpfXM9Z31lbHNlIGlmKHAubGVuZ3RoPjEpe209cFswXTt2YXIgeD1wWzFdLGI9bVswXS14WzBdLF89bVsxXS14WzFdO2E9YipiK18qX319ZnVuY3Rpb24gdigpe3ZhciBvLGwsYyx1LGY9dC50b3VjaGVzKHIpO2ZzLmNhbGwocik7Zm9yKHZhciBoPTAscD1mLmxlbmd0aDtoPHA7KytoLHU9bnVsbClpZihjPWZbaF0sdT1pW2MuaWRlbnRpZmllcl0pe2lmKGwpYnJlYWs7bz1jLGw9dX1pZih1KXt2YXIgZD0oZD1jWzBdLW9bMF0pKmQrKGQ9Y1sxXS1vWzFdKSpkLGc9YSYmTWF0aC5zcXJ0KGQvYSk7bz1bKG9bMF0rY1swXSkvMiwob1sxXStjWzFdKS8yXSxsPVsobFswXSt1WzBdKS8yLChsWzFdK3VbMV0pLzJdLFQoZyplKX1zPW51bGwsQShvLGwpLEMobil9ZnVuY3Rpb24geSgpe2lmKHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgZT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxhPWUubGVuZ3RoO3I8YTsrK3IpZGVsZXRlIGlbZVtyXS5pZGVudGlmaWVyXTtmb3IodmFyIHMgaW4gaSlyZXR1cm4gdm9pZCBkKCl9dC5zZWxlY3RBbGwodSkub24obyxudWxsKSxmLm9uKG0seikub24oYixPKSxwKCksTChuKX1nKCksRShuKSxmLm9uKG0sbnVsbCkub24oYixnKX1mdW5jdGlvbiBJKCl7dmFyIGk9Xy5vZih0aGlzLGFyZ3VtZW50cyk7YT9jbGVhclRpbWVvdXQoYSk6KGZzLmNhbGwodGhpcyksZT1rKHI9bnx8dC5tb3VzZSh0aGlzKSksRShpKSksYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YT1udWxsLEwoaSl9LDUwKSxCKCksVChNYXRoLnBvdygyLC4wMDIqQnQoKSkqaC5rKSxBKHIsZSksQyhpKX1mdW5jdGlvbiBEKCl7dmFyIGU9dC5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGguaykvTWF0aC5MTjI7TSh0aGlzLGUsayhlKSx0LmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChyKS0xOk1hdGguZmxvb3IocikrMSl9cmV0dXJuIE50fHwoTnQ9Im9ud2hlZWwiaW4gaT8oQnQ9ZnVuY3Rpb24oKXtyZXR1cm4tdC5ldmVudC5kZWx0YVkqKHQuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBpPyhCdD1mdW5jdGlvbigpe3JldHVybiB0LmV2ZW50LndoZWVsRGVsdGF9LCJtb3VzZXdoZWVsIik6KEJ0PWZ1bmN0aW9uKCl7cmV0dXJuLXQuZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSx3LmV2ZW50PWZ1bmN0aW9uKGUpe2UuZWFjaChmdW5jdGlvbigpe3ZhciBlPV8ub2YodGhpcyxhcmd1bWVudHMpLG49aDtkcz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtoPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LEUoZSl9KS50d2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBpPXBbMF0sYT1wWzFdLG89cj9yWzBdOmkvMixzPXI/clsxXTphLzIsbD10LmludGVycG9sYXRlWm9vbShbKG8taC54KS9oLmssKHMtaC55KS9oLmssaS9oLmtdLFsoby1uLngpL24uaywocy1uLnkpL24uayxpL24ua10pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1sKHQpLG49aS9yWzJdO3RoaXMuX19jaGFydF9fPWg9e3g6by1yWzBdKm4seTpzLXJbMV0qbixrOm59LEMoZSl9fSkuZWFjaCgiaW50ZXJydXB0Lnpvb20iLGZ1bmN0aW9uKCl7TChlKX0pLmVhY2goImVuZC56b29tIixmdW5jdGlvbigpe0woZSl9KToodGhpcy5fX2NoYXJ0X189aCxFKGUpLEMoZSksTChlKSl9KX0sdy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9e3g6K3RbMF0seTordFsxXSxrOmgua30sUygpLHcpOltoLngsaC55XX0sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD17eDpoLngseTpoLnksazpudWxsfSxUKCt0KSxTKCksdyk6aC5rfSx3LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PXQ/anQ6Wyt0WzBdLCt0WzFdXSx3KTpkfSx3LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10JiZbK3RbMF0sK3RbMV1dLHcpOm59LHcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10JiZbK3RbMF0sK3RbMV1dLHcpOnB9LHcuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3Qsdyk6Z30sdy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbD10LmNvcHkoKSxoPXt4OjAseTowLGs6MX0sdyk6Y30sdy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXQsdT10LmNvcHkoKSxoPXt4OjAseTowLGs6MX0sdyk6Zn0sdC5yZWJpbmQodyxfLCJvbiIpfTt2YXIgQnQsTnQsanQ9WzAsMS8wXTtmdW5jdGlvbiBWdCgpe31mdW5jdGlvbiBVdCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBVdD8odGhpcy5oPSt0LHRoaXMucz0rZSx2b2lkKHRoaXMubD0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgVXQ/bmV3IFV0KHQuaCx0LnMsdC5sKTp1ZSgiIit0LGZlLFV0KTpuZXcgVXQodCxlLHIpfXQuY29sb3I9VnQsVnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LHQuaHNsPVV0O3ZhciBxdD1VdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIEh0KHQsZSxyKXt2YXIgbixpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KmZ1bmN0aW9uKHQpe3JldHVybiB0PjM2MD90LT0zNjA6dDwwJiYodCs9MzYwKSx0PDYwP24rKGktbikqdC82MDp0PDE4MD9pOnQ8MjQwP24rKGktbikqKDI0MC10KS82MDpufSh0KSl9cmV0dXJuIHQ9aXNOYU4odCk/MDoodCU9MzYwKTwwP3QrMzYwOnQsZT1pc05hTihlKT8wOmU8MD8wOmU+MT8xOmUsbj0yKihyPXI8MD8wOnI+MT8xOnIpLShpPXI8PS41P3IqKDErZSk6citlLXIqZSksbmV3IGFlKGEodCsxMjApLGEodCksYSh0LTEyMCkpfWZ1bmN0aW9uIEd0KGUscixuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEd0Pyh0aGlzLmg9K2UsdGhpcy5jPStyLHZvaWQodGhpcy5sPStuKSk6YXJndW1lbnRzLmxlbmd0aDwyP2UgaW5zdGFuY2VvZiBHdD9uZXcgR3QoZS5oLGUuYyxlLmwpOmVlKGUgaW5zdGFuY2VvZiBYdD9lLmw6KGU9aGUoKGU9dC5yZ2IoZSkpLnIsZS5nLGUuYikpLmwsZS5hLGUuYik6bmV3IEd0KGUscixuKX1xdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IFV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL3QpfSxxdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBVdCh0aGlzLmgsdGhpcy5zLHQqdGhpcy5sKX0scXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sdC5oY2w9R3Q7dmFyIFl0PUd0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gV3QodCxlLHIpe3JldHVybiBpc05hTih0KSYmKHQ9MCksaXNOYU4oZSkmJihlPTApLG5ldyBYdChyLE1hdGguY29zKHQqPUN0KSplLE1hdGguc2luKHQpKmUpfWZ1bmN0aW9uIFh0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFh0Pyh0aGlzLmw9K3QsdGhpcy5hPStlLHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBYdD9uZXcgWHQodC5sLHQuYSx0LmIpOnQgaW5zdGFuY2VvZiBHdD9XdCh0LmgsdC5jLHQubCk6aGUoKHQ9YWUodCkpLnIsdC5nLHQuYik6bmV3IFh0KHQsZSxyKX1ZdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtadCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFl0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtWnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxZdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gV3QodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSx0LmxhYj1YdDt2YXIgWnQ9MTgsJHQ9Ljk1MDQ3LEp0PTEsS3Q9MS4wODg4MyxRdD1YdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj0odCsxNikvMTE2LGk9bitlLzUwMCxhPW4tci8yMDA7cmV0dXJuIG5ldyBhZShpZSgzLjI0MDQ1NDIqKGk9cmUoaSkqJHQpLTEuNTM3MTM4NSoobj1yZShuKSpKdCktLjQ5ODUzMTQqKGE9cmUoYSkqS3QpKSxpZSgtLjk2OTI2NippKzEuODc2MDEwOCpuKy4wNDE1NTYqYSksaWUoLjA1NTY0MzQqaS0uMjA0MDI1OSpuKzEuMDU3MjI1MiphKSl9ZnVuY3Rpb24gZWUodCxlLHIpe3JldHVybiB0PjA/bmV3IEd0KE1hdGguYXRhbjIocixlKSpMdCxNYXRoLnNxcnQoZSplK3IqciksdCk6bmV3IEd0KE5hTixOYU4sdCl9ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ+LjIwNjg5MzAzND90KnQqdDoodC00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD4uMDA4ODU2P01hdGgucG93KHQsMS8zKTo3Ljc4NzAzNyp0KzQvMjl9ZnVuY3Rpb24gaWUodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Kih0PD0uMDAzMDQ/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gYWUodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYWU/KHRoaXMucj1+fnQsdGhpcy5nPX5+ZSx2b2lkKHRoaXMuYj1+fnIpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIGFlP25ldyBhZSh0LnIsdC5nLHQuYik6dWUoIiIrdCxhZSxIdCk6bmV3IGFlKHQsZSxyKX1mdW5jdGlvbiBvZSh0KXtyZXR1cm4gbmV3IGFlKHQ+PjE2LHQ+PjgmMjU1LDI1NSZ0KX1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gb2UodCkrIiJ9UXQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1pbigxMDAsdGhpcy5sK1p0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxRdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1heCgwLHRoaXMubC1adCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sUXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHRlKHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sdC5yZ2I9YWU7dmFyIGxlPWFlLnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gY2UodCl7cmV0dXJuIHQ8MTY/IjAiK01hdGgubWF4KDAsdCkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx0KS50b1N0cmluZygxNil9ZnVuY3Rpb24gdWUodCxlLHIpe3ZhciBuLGksYSxvPTAscz0wLGw9MDtpZihuPS8oW2Etel0rKVwoKC4qKVwpLy5leGVjKHQ9dC50b0xvd2VyQ2FzZSgpKSlzd2l0Y2goaT1uWzJdLnNwbGl0KCIsIiksblsxXSl7Y2FzZSJoc2wiOnJldHVybiByKHBhcnNlRmxvYXQoaVswXSkscGFyc2VGbG9hdChpWzFdKS8xMDAscGFyc2VGbG9hdChpWzJdKS8xMDApO2Nhc2UicmdiIjpyZXR1cm4gZShkZShpWzBdKSxkZShpWzFdKSxkZShpWzJdKSl9cmV0dXJuKGE9Z2UuZ2V0KHQpKT9lKGEucixhLmcsYS5iKToobnVsbD09dHx8IiMiIT09dC5jaGFyQXQoMCl8fGlzTmFOKGE9cGFyc2VJbnQodC5zbGljZSgxKSwxNikpfHwoND09PXQubGVuZ3RoPyhvPSgzODQwJmEpPj40LG98PW8+PjQscz0yNDAmYSxzfD1zPj40LGw9MTUmYSxsfD1sPDw0KTo3PT09dC5sZW5ndGgmJihvPSgxNjcxMTY4MCZhKT4+MTYscz0oNjUyODAmYSk+PjgsbD0yNTUmYSkpLGUobyxzLGwpKX1mdW5jdGlvbiBmZSh0LGUscil7dmFyIG4saSxhPU1hdGgubWluKHQvPTI1NSxlLz0yNTUsci89MjU1KSxvPU1hdGgubWF4KHQsZSxyKSxzPW8tYSxsPShvK2EpLzI7cmV0dXJuIHM/KGk9bDwuNT9zLyhvK2EpOnMvKDItby1hKSxuPXQ9PW8/KGUtcikvcysoZTxyPzY6MCk6ZT09bz8oci10KS9zKzI6KHQtZSkvcys0LG4qPTYwKToobj1OYU4saT1sPjAmJmw8MT8wOm4pLG5ldyBVdChuLGksbCl9ZnVuY3Rpb24gaGUodCxlLHIpe3ZhciBuPW5lKCguNDEyNDU2NCoodD1wZSh0KSkrLjM1NzU3NjEqKGU9cGUoZSkpKy4xODA0Mzc1KihyPXBlKHIpKSkvJHQpLGk9bmUoKC4yMTI2NzI5KnQrLjcxNTE1MjIqZSsuMDcyMTc1KnIpL0p0KTtyZXR1cm4gWHQoMTE2KmktMTYsNTAwKihuLWkpLDIwMCooaS1uZSgoLjAxOTMzMzkqdCsuMTE5MTkyKmUrLjk1MDMwNDEqcikvS3QpKSl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZGUodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4iJSI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqZSk6ZX1sZS5icmlnaHRlcj1mdW5jdGlvbih0KXt0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKTt2YXIgZT10aGlzLnIscj10aGlzLmcsbj10aGlzLmIsaT0zMDtyZXR1cm4gZXx8cnx8bj8oZSYmZTxpJiYoZT1pKSxyJiZyPGkmJihyPWkpLG4mJm48aSYmKG49aSksbmV3IGFlKE1hdGgubWluKDI1NSxlL3QpLE1hdGgubWluKDI1NSxyL3QpLE1hdGgubWluKDI1NSxuL3QpKSk6bmV3IGFlKGksaSxpKX0sbGUuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYWUoKHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpKSp0aGlzLnIsdCp0aGlzLmcsdCp0aGlzLmIpfSxsZS5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gZmUodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxsZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIjIitjZSh0aGlzLnIpK2NlKHRoaXMuZykrY2UodGhpcy5iKX07dmFyIGdlPXQubWFwKHthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9KTtmdW5jdGlvbiB2ZSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG1lKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKG49cixyPW51bGwpLHllKGUscix0LG4pfX1mdW5jdGlvbiB5ZShlLHIsaSxhKXt2YXIgbz17fSxzPXQuZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGw9e30sYz1uZXcgWE1MSHR0cFJlcXVlc3QsdT1udWxsO2Z1bmN0aW9uIGYoKXt2YXIgdCxlPWMuc3RhdHVzO2lmKCFlJiZmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlVHlwZTtyZXR1cm4gZSYmInRleHQiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fShjKXx8ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSl7dHJ5e3Q9aS5jYWxsKG8sYyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcy5lcnJvci5jYWxsKG8sdCl9cy5sb2FkLmNhbGwobyx0KX1lbHNlIHMuZXJyb3IuY2FsbChvLGMpfXJldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3QoZSl8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj1mOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJmYoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKGUpe3ZhciByPXQuZXZlbnQ7dC5ldmVudD1lO3RyeXtzLnByb2dyZXNzLmNhbGwobyxjKX1maW5hbGx5e3QuZXZlbnQ9cn19LG8uaGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2xbdF06KG51bGw9PWU/ZGVsZXRlIGxbdF06bFt0XT1lKyIiLG8pfSxvLm1pbWVUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDp0KyIiLG8pOnJ9LG8ucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbyk6dX0sby5yZXNwb25zZT1mdW5jdGlvbih0KXtyZXR1cm4gaT10LG99LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24odCl7b1t0XT1mdW5jdGlvbigpe3JldHVybiBvLnNlbmQuYXBwbHkobyxbdF0uY29uY2F0KG4oYXJndW1lbnRzKSkpfX0pLG8uc2VuZD1mdW5jdGlvbih0LG4saSl7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49bnVsbCksYy5vcGVuKHQsZSwhMCksbnVsbD09cnx8ImFjY2VwdCJpbiBsfHwobC5hY2NlcHQ9cisiLCovKiIpLGMuc2V0UmVxdWVzdEhlYWRlcilmb3IodmFyIGEgaW4gbCljLnNldFJlcXVlc3RIZWFkZXIoYSxsW2FdKTtyZXR1cm4gbnVsbCE9ciYmYy5vdmVycmlkZU1pbWVUeXBlJiZjLm92ZXJyaWRlTWltZVR5cGUociksbnVsbCE9dSYmKGMucmVzcG9uc2VUeXBlPXUpLG51bGwhPWkmJm8ub24oImVycm9yIixpKS5vbigibG9hZCIsZnVuY3Rpb24odCl7aShudWxsLHQpfSkscy5iZWZvcmVzZW5kLmNhbGwobyxjKSxjLnNlbmQobnVsbD09bj9udWxsOm4pLG99LG8uYWJvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5hYm9ydCgpLG99LHQucmViaW5kKG8scywib24iKSxudWxsPT1hP286by5nZXQoZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3QobnVsbD09ZT9yOm51bGwpfTp0fShhKSl9Z2UuZm9yRWFjaChmdW5jdGlvbih0LGUpe2dlLnNldCh0LG9lKGUpKX0pLHQuZnVuY3Rvcj12ZSx0Lnhocj1tZSh6KSx0LmRzdj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBSZWdFeHAoJ1siJyt0KyJcbl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBpKHQscixuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPXIscj1udWxsKTt2YXIgaT15ZSh0LGUsbnVsbD09cj9hOm8ociksbik7cmV0dXJuIGkucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kucmVzcG9uc2UobnVsbD09KHI9dCk/YTpvKHQpKTpyfSxpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGkucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBpLnBhcnNlKGUucmVzcG9uc2VUZXh0LHQpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLm1hcChsKS5qb2luKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIudGVzdCh0KT8nIicrdC5yZXBsYWNlKC9cIi9nLCciIicpKyciJzp0fXJldHVybiBpLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIGkucGFyc2VSb3dzKHQsZnVuY3Rpb24odCxuKXtpZihyKXJldHVybiByKHQsbi0xKTt2YXIgaT1uZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkuam9pbigiLCIpKyJ9Iik7cj1lP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUoaSh0KSxyKX06aX0pfSxpLnBhcnNlUm93cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT17fSxvPXt9LHM9W10sbD10Lmxlbmd0aCxjPTAsdT0wO2Z1bmN0aW9uIGYoKXtpZihjPj1sKXJldHVybiBvO2lmKGkpcmV0dXJuIGk9ITEsYTt2YXIgZT1jO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8bDspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBjPXIrMiwxMz09PShzPXQuY2hhckNvZGVBdChyKzEpKT8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09cyYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M8bDspe3ZhciBzLHU9MTtpZigxMD09PShzPXQuY2hhckNvZGVBdChjKyspKSlpPSEwO2Vsc2UgaWYoMTM9PT1zKWk9ITAsMTA9PT10LmNoYXJDb2RlQXQoYykmJigrK2MsKyt1KTtlbHNlIGlmKHMhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGUsYy11KX1yZXR1cm4gdC5zbGljZShlKX1mb3IoOyhyPWYoKSkhPT1vOyl7Zm9yKHZhciBoPVtdO3IhPT1hJiZyIT09bzspaC5wdXNoKHIpLHI9ZigpO2UmJm51bGw9PShoPWUoaCx1KyspKXx8cy5wdXNoKGgpfXJldHVybiBzfSxpLmZvcm1hdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiBpLmZvcm1hdFJvd3MoZSk7dmFyIHI9bmV3IEwsbj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KXIuaGFzKGUpfHxuLnB1c2goci5hZGQoZSkpfSksW24ubWFwKGwpLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGwoZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LGkuZm9ybWF0Um93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuam9pbigiXG4iKX0saX0sdC5jc3Y9dC5kc3YoIiwiLCJ0ZXh0L2NzdiIpLHQudHN2PXQuZHN2KCJcdCIsInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiKTt2YXIgeGUsYmUsX2Usd2Usa2U9dGhpc1tJKHRoaXMsInJlcXVlc3RBbmltYXRpb25GcmFtZSIpXXx8ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gVGUodCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7bjwyJiYoZT0wKSxuPDMmJihyPURhdGUubm93KCkpO3ZhciBpPXtjOnQsdDpyK2UsbjpudWxsfTtyZXR1cm4gYmU/YmUubj1pOnhlPWksYmU9aSxfZXx8KHdlPWNsZWFyVGltZW91dCh3ZSksX2U9MSxrZShBZSkpLGl9ZnVuY3Rpb24gQWUoKXt2YXIgdD1NZSgpLGU9U2UoKS10O2U+MjQ/KGlzRmluaXRlKGUpJiYoY2xlYXJUaW1lb3V0KHdlKSx3ZT1zZXRUaW1lb3V0KEFlLGUpKSxfZT0wKTooX2U9MSxrZShBZSkpfWZ1bmN0aW9uIE1lKCl7Zm9yKHZhciB0PURhdGUubm93KCksZT14ZTtlOyl0Pj1lLnQmJmUuYyh0LWUudCkmJihlLmM9bnVsbCksZT1lLm47cmV0dXJuIHR9ZnVuY3Rpb24gU2UoKXtmb3IodmFyIHQsZT14ZSxyPTEvMDtlOyllLmM/KGUudDxyJiYocj1lLnQpLGU9KHQ9ZSkubik6ZT10P3Qubj1lLm46eGU9ZS5uO3JldHVybiBiZT10LHJ9ZnVuY3Rpb24gRWUodCxlKXtyZXR1cm4gZS0odD9NYXRoLmNlaWwoTWF0aC5sb2codCkvTWF0aC5MTjEwKToxKX10LnRpbWVyPWZ1bmN0aW9uKCl7VGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0LnRpbWVyLmZsdXNoPWZ1bmN0aW9uKCl7TWUoKSxTZSgpfSx0LnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/TWF0aC5yb3VuZCh0KihlPU1hdGgucG93KDEwLGUpKSkvZTpNYXRoLnJvdW5kKHQpfTt2YXIgQ2U9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0ubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMTAsMyp5KDgtZSkpO3JldHVybntzY2FsZTplPjg/ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sc3ltYm9sOnR9fSk7dC5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wO3JldHVybihlPStlKSYmKGU8MCYmKGUqPS0xKSxyJiYoZT10LnJvdW5kKGUsRWUoZSxyKSkpLG49MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKGUpL01hdGguTE4xMCksbj1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChuLTEpLzMpKSkpLENlWzgrbi8zXX07dmFyIExlPS8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1wtIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLi0/XGQrKT8oW2EteiVdKT8vaSx6ZT10Lm1hcCh7YjpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0KX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZyg4KX0seDpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNil9LFg6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxyOmZ1bmN0aW9uKGUscil7cmV0dXJuKGU9dC5yb3VuZChlLEVlKGUscikpKS50b0ZpeGVkKE1hdGgubWF4KDAsTWF0aC5taW4oMjAsRWUoZSooMSsxZS0xNSkscikpKSl9fSk7ZnVuY3Rpb24gT2UodCl7cmV0dXJuIHQrIiJ9dmFyIEllPXQudGltZT17fSxEZT1EYXRlO2Z1bmN0aW9uIFBlKCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1QZS5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdldFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7UmUuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7UmUuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe1JlLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe1JlLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtSZS5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtSZS5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe1JlLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1bmN0aW9uKCl7UmUuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0VGltZTpmdW5jdGlvbigpe1JlLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2YXIgUmU9RGF0ZS5wcm90b3R5cGU7ZnVuY3Rpb24gRmUodCxlLHIpe2Z1bmN0aW9uIG4oZSl7dmFyIHI9dChlKSxuPWEociwxKTtyZXR1cm4gZS1yPG4tZT9yOm59ZnVuY3Rpb24gaShyKXtyZXR1cm4gZShyPXQobmV3IERlKHItMSkpLDEpLHJ9ZnVuY3Rpb24gYSh0LHIpe3JldHVybiBlKHQ9bmV3IERlKCt0KSxyKSx0fWZ1bmN0aW9uIG8odCxuLGEpe3ZhciBvPWkodCkscz1bXTtpZihhPjEpZm9yKDtvPG47KXIobyklYXx8cy5wdXNoKG5ldyBEYXRlKCtvKSksZShvLDEpO2Vsc2UgZm9yKDtvPG47KXMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtyZXR1cm4gc310LmZsb29yPXQsdC5yb3VuZD1uLHQuY2VpbD1pLHQub2Zmc2V0PWEsdC5yYW5nZT1vO3ZhciBzPXQudXRjPUJlKHQpO3JldHVybiBzLmZsb29yPXMscy5yb3VuZD1CZShuKSxzLmNlaWw9QmUoaSkscy5vZmZzZXQ9QmUoYSkscy5yYW5nZT1mdW5jdGlvbih0LGUscil7dHJ5e0RlPVBlO3ZhciBuPW5ldyBQZTtyZXR1cm4gbi5fPXQsbyhuLGUscil9ZmluYWxseXtEZT1EYXRlfX0sdH1mdW5jdGlvbiBCZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt0cnl7RGU9UGU7dmFyIG49bmV3IFBlO3JldHVybiBuLl89ZSx0KG4scikuX31maW5hbGx5e0RlPURhdGV9fX1JZS55ZWFyPUZlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0TW9udGgoMCwxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSksSWUueWVhcnM9SWUueWVhci5yYW5nZSxJZS55ZWFycy51dGM9SWUueWVhci51dGMucmFuZ2UsSWUuZGF5PUZlKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEZSgyZTMsMCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSksZX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSksSWUuZGF5cz1JZS5kYXkucmFuZ2UsSWUuZGF5cy51dGM9SWUuZGF5LnV0Yy5yYW5nZSxJZS5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9SWUueWVhcih0KTtyZXR1cm4gTWF0aC5mbG9vcigodC1lLTZlNCoodC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0sWyJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlkYXkiLCJzYXR1cmRheSJdLmZvckVhY2goZnVuY3Rpb24odCxlKXtlPTctZTt2YXIgcj1JZVt0XT1GZShmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrZSklNyksdH0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7dmFyIHI9SWUueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoSWUuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpLShyIT09ZSl9KTtJZVt0KyJzIl09ci5yYW5nZSxJZVt0KyJzIl0udXRjPXIudXRjLnJhbmdlLEllW3QrIk9mWWVhciJdPWZ1bmN0aW9uKHQpe3ZhciByPUllLnllYXIodCkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKEllLmRheU9mWWVhcih0KSsocitlKSU3KS83KX19KSxJZS53ZWVrPUllLnN1bmRheSxJZS53ZWVrcz1JZS5zdW5kYXkucmFuZ2UsSWUud2Vla3MudXRjPUllLnN1bmRheS51dGMucmFuZ2UsSWUud2Vla09mWWVhcj1JZS5zdW5kYXlPZlllYXI7dmFyIE5lPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGplPS9eXHMqXGQrLyxWZT0vXiUvO2Z1bmN0aW9uIFVlKHQsZSxyKXt2YXIgbj10PDA/Ii0iOiIiLGk9KG4/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIHFlKGUpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86IitlLm1hcCh0LnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBIZSh0KXtmb3IodmFyIGU9bmV3IGIscj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnNldCh0W3JdLnRvTG93ZXJDYXNlKCkscik7cmV0dXJuIGV9ZnVuY3Rpb24gR2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8odC55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFplKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbixpPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBpPyh0Lnk9KG49K2lbMF0pKyhuPjY4PzE5MDA6MmUzKSxyK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkZSh0LGUscil7cmV0dXJuL15bKy1dXGR7NH0kLy50ZXN0KGU9ZS5zbGljZShyLHIrNSkpPyh0Llo9LWUscis1KTotMX1mdW5jdGlvbiBKZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lmo9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdHIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXIodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpLHI9ZT4wPyItIjoiKyIsbj15KGUpLzYwfDAsaT15KGUpJTYwO3JldHVybiByK1VlKG4sIjAiLDIpK1VlKGksIjAiLDIpfWZ1bmN0aW9uIGFyKHQsZSxyKXtWZS5sYXN0SW5kZXg9MDt2YXIgbj1WZS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIG9yKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPS0xOysrcjxlOyl0W3JdWzBdPXRoaXModFtyXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49dFtyXTshblsxXShlKTspbj10Wysrcl07cmV0dXJuIG5bMF0oZSl9fXQubG9jYWxlPWZ1bmN0aW9uKGUpe3JldHVybntudW1iZXJGb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHI9ZS5kZWNpbWFsLG49ZS50aG91c2FuZHMsaT1lLmdyb3VwaW5nLGE9ZS5jdXJyZW5jeSxvPWkmJm4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsYT1bXSxvPTAscz1pWzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmUmJihzPU1hdGgubWF4KDEsZS1sKSksYS5wdXNoKHQuc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5lKSk7KXM9aVtvPShvKzEpJWkubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX06ejtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49TGUuZXhlYyhlKSxpPW5bMV18fCIgIixzPW5bMl18fCI+IixsPW5bM118fCItIixjPW5bNF18fCIiLHU9bls1XSxmPStuWzZdLGg9bls3XSxwPW5bOF0sZD1uWzldLGc9MSx2PSIiLG09IiIseT0hMSx4PSEwO3N3aXRjaChwJiYocD0rcC5zdWJzdHJpbmcoMSkpLCh1fHwiMCI9PT1pJiYiPSI9PT1zKSYmKHU9aT0iMCIscz0iPSIpLGQpe2Nhc2UibiI6aD0hMCxkPSJnIjticmVhaztjYXNlIiUiOmc9MTAwLG09IiUiLGQ9ImYiO2JyZWFrO2Nhc2UicCI6Zz0xMDAsbT0iJSIsZD0iciI7YnJlYWs7Y2FzZSJiIjpjYXNlIm8iOmNhc2UieCI6Y2FzZSJYIjoiIyI9PT1jJiYodj0iMCIrZC50b0xvd2VyQ2FzZSgpKTtjYXNlImMiOng9ITE7Y2FzZSJkIjp5PSEwLHA9MDticmVhaztjYXNlInMiOmc9LTEsZD0iciJ9IiQiPT09YyYmKHY9YVswXSxtPWFbMV0pLCJyIiE9ZHx8cHx8KGQ9ImciKSxudWxsIT1wJiYoImciPT1kP3A9TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwKSk6ImUiIT1kJiYiZiIhPWR8fChwPU1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpKSksZD16ZS5nZXQoZCl8fE9lO3ZhciBiPXUmJmg7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW07aWYoeSYmZSUxKXJldHVybiIiO3ZhciBhPWU8MHx8MD09PWUmJjEvZTwwPyhlPS1lLCItIik6Ii0iPT09bD8iIjpsO2lmKGc8MCl7dmFyIGM9dC5mb3JtYXRQcmVmaXgoZSxwKTtlPWMuc2NhbGUoZSksbj1jLnN5bWJvbCttfWVsc2UgZSo9Zzt2YXIgXyx3LGs9KGU9ZChlLHApKS5sYXN0SW5kZXhPZigiLiIpO2lmKGs8MCl7dmFyIFQ9eD9lLmxhc3RJbmRleE9mKCJlIik6LTE7VDwwPyhfPWUsdz0iIik6KF89ZS5zdWJzdHJpbmcoMCxUKSx3PWUuc3Vic3RyaW5nKFQpKX1lbHNlIF89ZS5zdWJzdHJpbmcoMCxrKSx3PXIrZS5zdWJzdHJpbmcoaysxKTshdSYmaCYmKF89byhfLDEvMCkpO3ZhciBBPXYubGVuZ3RoK18ubGVuZ3RoK3cubGVuZ3RoKyhiPzA6YS5sZW5ndGgpLE09QTxmP25ldyBBcnJheShBPWYtQSsxKS5qb2luKGkpOiIiO3JldHVybiBiJiYoXz1vKE0rXyxNLmxlbmd0aD9mLXcubGVuZ3RoOjEvMCkpLGErPXYsZT1fK3csKCI8Ij09PXM/YStlK006Ij4iPT09cz9NK2ErZToiXiI9PT1zP00uc3Vic3RyaW5nKDAsQT4+PTEpK2ErZStNLnN1YnN0cmluZyhBKTphKyhiP2U6TStlKSkrbn19fShlKSx0aW1lRm9ybWF0OmZ1bmN0aW9uKGUpe3ZhciByPWUuZGF0ZVRpbWUsbj1lLmRhdGUsaT1lLnRpbWUsYT1lLnBlcmlvZHMsbz1lLmRheXMscz1lLnNob3J0RGF5cyxsPWUubW9udGhzLGM9ZS5zaG9ydE1vbnRocztmdW5jdGlvbiB1KHQpe3ZhciBlPXQubGVuZ3RoO2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYSxvPVtdLHM9LTEsbD0wOysrczxlOykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShpPU5lW249dC5jaGFyQXQoKytzKV0pJiYobj10LmNoYXJBdCgrK3MpKSwoYT1fW25dKSYmKG49YShyLG51bGw9PWk/ImUiPT09bj8iICI6IjAiOmkpKSxvLnB1c2gobiksbD1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShsLHMpKSxvLmpvaW4oIiIpfXJldHVybiByLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxsfTtpZihmKHIsdCxlLDApIT1lLmxlbmd0aClyZXR1cm4gbnVsbDsicCJpbiByJiYoci5IPXIuSCUxMisxMipyLnApO3ZhciBuPW51bGwhPXIuWiYmRGUhPT1QZSxpPW5ldyhuP1BlOkRlKTtyZXR1cm4iaiJpbiByP2kuc2V0RnVsbFllYXIoci55LDAsci5qKToiVyJpbiByfHwiVSJpbiByPygidyJpbiByfHwoci53PSJXImluIHI/MTowKSxpLnNldEZ1bGxZZWFyKHIueSwwLDEpLGkuc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcrNypyLlctKGkuZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKGkuZ2V0RGF5KCkrNiklNykpOmkuc2V0RnVsbFllYXIoci55LHIubSxyLmQpLGkuc2V0SG91cnMoci5IKyhyLlovMTAwfDApLHIuTStyLlolMTAwLHIuUyxyLkwpLG4/aS5fOml9LHIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0scn1mdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0wLGw9ZS5sZW5ndGgsYz1yLmxlbmd0aDtzPGw7KXtpZihuPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KHMrKykpKXtpZihvPWUuY2hhckF0KHMrKyksIShhPXdbbyBpbiBOZT9lLmNoYXJBdChzKyspOm9dKXx8KG49YSh0LHIsbikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1yLmNoYXJDb2RlQXQobisrKSlyZXR1cm4tMX1yZXR1cm4gbn11LnV0Yz1mdW5jdGlvbih0KXt2YXIgZT11KHQpO2Z1bmN0aW9uIHIodCl7dHJ5e3ZhciByPW5ldyhEZT1QZSk7cmV0dXJuIHIuXz10LGUocil9ZmluYWxseXtEZT1EYXRlfX1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0KXt0cnl7RGU9UGU7dmFyIHI9ZS5wYXJzZSh0KTtyZXR1cm4gciYmci5ffWZpbmFsbHl7RGU9RGF0ZX19LHIudG9TdHJpbmc9ZS50b1N0cmluZyxyfSx1Lm11bHRpPXUudXRjLm11bHRpPW9yO3ZhciBoPXQubWFwKCkscD1xZShvKSxkPUhlKG8pLGc9cWUocyksdj1IZShzKSxtPXFlKGwpLHk9SGUobCkseD1xZShjKSxiPUhlKGMpO2EuZm9yRWFjaChmdW5jdGlvbih0LGUpe2guc2V0KHQudG9Mb3dlckNhc2UoKSxlKX0pO3ZhciBfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRNb250aCgpXX0sYzp1KHIpLGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXREYXRlKCksZSwyKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldERhdGUoKSxlLDIpfSxIOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSxlLDIpfSxJOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX0sajpmdW5jdGlvbih0LGUpe3JldHVybiBVZSgxK0llLmRheU9mWWVhcih0KSxlLDMpfSxMOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX0sbTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldE1vbnRoKCkrMSxlLDIpfSxNOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0TWludXRlcygpLGUsMil9LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGFbKyh0LmdldEhvdXJzKCk+PTEyKV19LFM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXRTZWNvbmRzKCksZSwyKX0sVTpmdW5jdGlvbih0LGUpe3JldHVybiBVZShJZS5zdW5kYXlPZlllYXIodCksZSwyKX0sdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sVzpmdW5jdGlvbih0LGUpe3JldHVybiBVZShJZS5tb25kYXlPZlllYXIodCksZSwyKX0seDp1KG4pLFg6dShpKSx5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX0sWTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9LFo6aXIsIiUiOmZ1bmN0aW9uKCl7cmV0dXJuIiUifX0sdz17YTpmdW5jdGlvbih0LGUscil7Zy5sYXN0SW5kZXg9MDt2YXIgbj1nLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz12LmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxyKXtwLmxhc3RJbmRleD0wO3ZhciBuPXAuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PWQuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLHIpe3gubGFzdEluZGV4PTA7dmFyIG49eC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09Yi5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUscil7bS5sYXN0SW5kZXg9MDt2YXIgbj1tLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT15LmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZih0LF8uYy50b1N0cmluZygpLGUscil9LGQ6S2UsZTpLZSxIOnRyLEk6dHIsajpRZSxMOm5yLG06SmUsTTplcixwOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1oLmdldChlLnNsaWNlKHIscis9MikudG9Mb3dlckNhc2UoKSk7cmV0dXJuIG51bGw9PW4/LTE6KHQucD1uLHIpfSxTOnJyLFU6WWUsdzpHZSxXOldlLHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmKHQsXy54LnRvU3RyaW5nKCksZSxyKX0sWDpmdW5jdGlvbih0LGUscil7cmV0dXJuIGYodCxfLlgudG9TdHJpbmcoKSxlLHIpfSx5OlplLFk6WGUsWjokZSwiJSI6YXJ9O3JldHVybiB1fShlKX19O3ZhciBzcj10LmxvY2FsZSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlbS8lZC8lWSIsdGltZToiJUg6JU06JVMiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gbHIoKXt9dC5mb3JtYXQ9c3IubnVtYmVyRm9ybWF0LHQuZ2VvPXt9LGxyLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24odCl7dXIodCx0aGlzLnQsY3IpLHVyKGNyLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWNyLnQ6dGhpcy5zPWNyLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBjcj1uZXcgbHI7ZnVuY3Rpb24gdXIodCxlLHIpe3ZhciBuPXIucz10K2UsaT1uLXQsYT1uLWk7ci50PXQtYSsoZS1pKX1mdW5jdGlvbiBmcih0LGUpe3QmJnByLmhhc093blByb3BlcnR5KHQudHlwZSkmJnByW3QudHlwZV0odCxlKX10Lmdlby5zdHJlYW09ZnVuY3Rpb24odCxlKXt0JiZoci5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP2hyW3QudHlwZV0odCxlKTpmcih0LGUpfTt2YXIgaHI9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtmcih0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZnIocltuXS5nZW9tZXRyeSxlKX19LHByPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspdD1yW25dLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7ZHIodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWRyKHJbbl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe2dyKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZ3IocltuXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWZyKHJbbl0sZSl9fTtmdW5jdGlvbiBkcih0LGUscil7dmFyIG4saT0tMSxhPXQubGVuZ3RoLXI7Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KW49dFtpXSxlLnBvaW50KG5bMF0sblsxXSxuWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBncih0LGUpe3ZhciByPS0xLG49dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytyPG47KWRyKHRbcl0sZSwxKTtlLnBvbHlnb25FbmQoKX10Lmdlby5hcmVhPWZ1bmN0aW9uKGUpe3JldHVybiB2cj0wLHQuZ2VvLnN0cmVhbShlLENyKSx2cn07dmFyIHZyLG1yLHlyLHhyLGJyLF9yLHdyLGtyLFRyLEFyLE1yLFNyLEVyPW5ldyBscixDcj17c3BoZXJlOmZ1bmN0aW9uKCl7dnIrPTQqQXR9LHBvaW50OlAsbGluZVN0YXJ0OlAsbGluZUVuZDpQLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0VyLnJlc2V0KCksQ3IubGluZVN0YXJ0PUxyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9MipFcjt2cis9dDwwPzQqQXQrdDp0LENyLmxpbmVTdGFydD1Dci5saW5lRW5kPUNyLnBvaW50PVB9fTtmdW5jdGlvbiBMcigpe3ZhciB0LGUscixuLGk7ZnVuY3Rpb24gYSh0LGUpe2U9ZSpDdC8yK0F0LzQ7dmFyIGE9KHQqPUN0KS1yLG89YT49MD8xOi0xLHM9byphLGw9TWF0aC5jb3MoZSksYz1NYXRoLnNpbihlKSx1PWkqYyxmPW4qbCt1Kk1hdGguY29zKHMpLGg9dSpvKk1hdGguc2luKHMpO0VyLmFkZChNYXRoLmF0YW4yKGgsZikpLHI9dCxuPWwsaT1jfUNyLnBvaW50PWZ1bmN0aW9uKG8scyl7Q3IucG9pbnQ9YSxyPSh0PW8pKkN0LG49TWF0aC5jb3Mocz0oZT1zKSpDdC8yK0F0LzQpLGk9TWF0aC5zaW4ocyl9LENyLmxpbmVFbmQ9ZnVuY3Rpb24oKXthKHQsZSl9fWZ1bmN0aW9uIHpyKHQpe3ZhciBlPXRbMF0scj10WzFdLG49TWF0aC5jb3Mocik7cmV0dXJuW24qTWF0aC5jb3MoZSksbipNYXRoLnNpbihlKSxNYXRoLnNpbihyKV19ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gSXIodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIERyKHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gUHIodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIFJyKHQpe3ZhciBlPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89ZSx0WzFdLz1lLHRbMl0vPWV9ZnVuY3Rpb24gRnIodCl7cmV0dXJuW01hdGguYXRhbjIodFsxXSx0WzBdKSxEdCh0WzJdKV19ZnVuY3Rpb24gQnIodCxlKXtyZXR1cm4geSh0WzBdLWVbMF0pPGt0JiZ5KHRbMV0tZVsxXSk8a3R9dC5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsZixoPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoLnBvaW50PW0saC5saW5lU3RhcnQ9eCxoLmxpbmVFbmQ9YixjPTAsQ3IucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtDci5wb2x5Z29uRW5kKCksaC5wb2ludD1wLGgubGluZVN0YXJ0PWcsaC5saW5lRW5kPXYsRXI8MD8oZT0tKG49MTgwKSxyPS0oaT05MCkpOmM+a3Q/aT05MDpjPC1rdCYmKHI9LTkwKSxmWzBdPWUsZlsxXT1ufX07ZnVuY3Rpb24gcCh0LGEpe3UucHVzaChmPVtlPXQsbj10XSksYTxyJiYocj1hKSxhPmkmJihpPWEpfWZ1bmN0aW9uIGQodCxvKXt2YXIgcz16cihbdCpDdCxvKkN0XSk7aWYobCl7dmFyIGM9SXIobCxzKSx1PUlyKFtjWzFdLC1jWzBdLDBdLGMpO1JyKHUpLHU9RnIodSk7dmFyIGY9dC1hLGg9Zj4wPzE6LTEsZD11WzBdKkx0KmgsZz15KGYpPjE4MDtpZihnXihoKmE8ZCYmZDxoKnQpKSh2PXVbMV0qTHQpPmkmJihpPXYpO2Vsc2UgaWYoZ14oaCphPChkPShkKzM2MCklMzYwLTE4MCkmJmQ8aCp0KSl7dmFyIHY7KHY9LXVbMV0qTHQpPHImJihyPXYpfWVsc2UgbzxyJiYocj1vKSxvPmkmJihpPW8pO2c/dDxhP18oZSx0KT5fKGUsbikmJihuPXQpOl8odCxuKT5fKGUsbikmJihlPXQpOm4+PWU/KHQ8ZSYmKGU9dCksdD5uJiYobj10KSk6dD5hP18oZSx0KT5fKGUsbikmJihuPXQpOl8odCxuKT5fKGUsbikmJihlPXQpfWVsc2UgcCh0LG8pO2w9cyxhPXR9ZnVuY3Rpb24gZygpe2gucG9pbnQ9ZH1mdW5jdGlvbiB2KCl7ZlswXT1lLGZbMV09bixoLnBvaW50PXAsbD1udWxsfWZ1bmN0aW9uIG0odCxlKXtpZihsKXt2YXIgcj10LWE7Yys9eShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyfWVsc2Ugbz10LHM9ZTtDci5wb2ludCh0LGUpLGQodCxlKX1mdW5jdGlvbiB4KCl7Q3IubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYigpe20obyxzKSxDci5saW5lRW5kKCkseShjKT5rdCYmKGU9LShuPTE4MCkpLGZbMF09ZSxmWzFdPW4sbD1udWxsfWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4gZVswXTw9ZVsxXT9lWzBdPD10JiZ0PD1lWzFdOnQ8ZVswXXx8ZVsxXTx0fXJldHVybiBmdW5jdGlvbihhKXtpZihpPW49LShlPXI9MS8wKSx1PVtdLHQuZ2VvLnN0cmVhbShhLGgpLGM9dS5sZW5ndGgpe3Uuc29ydCh3KTtmb3IodmFyIG89MSxzPVtnPXVbMF1dO288YzsrK28paygocD11W29dKVswXSxnKXx8ayhwWzFdLGcpPyhfKGdbMF0scFsxXSk+XyhnWzBdLGdbMV0pJiYoZ1sxXT1wWzFdKSxfKHBbMF0sZ1sxXSk+XyhnWzBdLGdbMV0pJiYoZ1swXT1wWzBdKSk6cy5wdXNoKGc9cCk7Zm9yKHZhciBsLGMscCxkPS0xLzAsZz0obz0wLHNbYz1zLmxlbmd0aC0xXSk7bzw9YztnPXAsKytvKXA9c1tvXSwobD1fKGdbMV0scFswXSkpPmQmJihkPWwsZT1wWzBdLG49Z1sxXSl9cmV0dXJuIHU9Zj1udWxsLGU9PT0xLzB8fHI9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZSxyXSxbbixpXV19fSgpLHQuZ2VvLmNlbnRyb2lkPWZ1bmN0aW9uKGUpe21yPXlyPXhyPWJyPV9yPXdyPWtyPVRyPUFyPU1yPVNyPTAsdC5nZW8uc3RyZWFtKGUsTnIpO3ZhciByPUFyLG49TXIsaT1TcixhPXIqcituKm4raSppO3JldHVybiBhPFR0JiYocj13cixuPWtyLGk9VHIseXI8a3QmJihyPXhyLG49YnIsaT1fciksKGE9cipyK24qbitpKmkpPFR0KT9bTmFOLE5hTl06W01hdGguYXRhbjIobixyKSpMdCxEdChpL01hdGguc3FydChhKSkqTHRdfTt2YXIgTnI9e3NwaGVyZTpQLHBvaW50OmpyLGxpbmVTdGFydDpVcixsaW5lRW5kOnFyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe05yLmxpbmVTdGFydD1Icn0scG9seWdvbkVuZDpmdW5jdGlvbigpe05yLmxpbmVTdGFydD1Vcn19O2Z1bmN0aW9uIGpyKHQsZSl7dCo9Q3Q7dmFyIHI9TWF0aC5jb3MoZSo9Q3QpO1ZyKHIqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKSl9ZnVuY3Rpb24gVnIodCxlLHIpe3hyKz0odC14cikvKyttcixicis9KGUtYnIpL21yLF9yKz0oci1fcikvbXJ9ZnVuY3Rpb24gVXIoKXt2YXIgdCxlLHI7ZnVuY3Rpb24gbihuLGkpe24qPUN0O3ZhciBhPU1hdGguY29zKGkqPUN0KSxvPWEqTWF0aC5jb3Mobikscz1hKk1hdGguc2luKG4pLGw9TWF0aC5zaW4oaSksYz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYz1lKmwtcipzKSpjKyhjPXIqby10KmwpKmMrKGM9dCpzLWUqbykqYyksdCpvK2UqcytyKmwpO3lyKz1jLHdyKz1jKih0Kyh0PW8pKSxrcis9YyooZSsoZT1zKSksVHIrPWMqKHIrKHI9bCkpLFZyKHQsZSxyKX1Oci5wb2ludD1mdW5jdGlvbihpLGEpe2kqPUN0O3ZhciBvPU1hdGguY29zKGEqPUN0KTt0PW8qTWF0aC5jb3MoaSksZT1vKk1hdGguc2luKGkpLHI9TWF0aC5zaW4oYSksTnIucG9pbnQ9bixWcih0LGUscil9fWZ1bmN0aW9uIHFyKCl7TnIucG9pbnQ9anJ9ZnVuY3Rpb24gSHIoKXt2YXIgdCxlLHIsbixpO2Z1bmN0aW9uIGEodCxlKXt0Kj1DdDt2YXIgYT1NYXRoLmNvcyhlKj1DdCksbz1hKk1hdGguY29zKHQpLHM9YSpNYXRoLnNpbih0KSxsPU1hdGguc2luKGUpLGM9bipsLWkqcyx1PWkqby1yKmwsZj1yKnMtbipvLGg9TWF0aC5zcXJ0KGMqYyt1KnUrZipmKSxwPXIqbytuKnMraSpsLGQ9aCYmLUl0KHApL2gsZz1NYXRoLmF0YW4yKGgscCk7QXIrPWQqYyxNcis9ZCp1LFNyKz1kKmYseXIrPWcsd3IrPWcqKHIrKHI9bykpLGtyKz1nKihuKyhuPXMpKSxUcis9ZyooaSsoaT1sKSksVnIocixuLGkpfU5yLnBvaW50PWZ1bmN0aW9uKG8scyl7dD1vLGU9cyxOci5wb2ludD1hLG8qPUN0O3ZhciBsPU1hdGguY29zKHMqPUN0KTtyPWwqTWF0aC5jb3Mobyksbj1sKk1hdGguc2luKG8pLGk9TWF0aC5zaW4ocyksVnIocixuLGkpfSxOci5saW5lRW5kPWZ1bmN0aW9uKCl7YSh0LGUpLE5yLmxpbmVFbmQ9cXIsTnIucG9pbnQ9anJ9fWZ1bmN0aW9uIEdyKHQsZSl7ZnVuY3Rpb24gcihyLG4pe3JldHVybiByPXQocixuKSxlKHJbMF0sclsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7cmV0dXJuKHI9ZS5pbnZlcnQocixuKSkmJnQuaW52ZXJ0KHJbMF0sclsxXSl9KSxyfWZ1bmN0aW9uIFlyKCl7cmV0dXJuITB9ZnVuY3Rpb24gV3IodCxlLHIsbixpKXt2YXIgYT1bXSxvPVtdO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUscj10WzBdLG49dFtlXTtpZihCcihyLG4pKXtpLmxpbmVTdGFydCgpO2Zvcih2YXIgcz0wO3M8ZTsrK3MpaS5wb2ludCgocj10W3NdKVswXSxyWzFdKTtpLmxpbmVFbmQoKX1lbHNle3ZhciBsPW5ldyBacihyLHQsbnVsbCwhMCksYz1uZXcgWnIocixudWxsLGwsITEpO2wubz1jLGEucHVzaChsKSxvLnB1c2goYyksbD1uZXcgWnIobix0LG51bGwsITEpLGM9bmV3IFpyKG4sbnVsbCxsLCEwKSxsLm89YyxhLnB1c2gobCksby5wdXNoKGMpfX19KSxvLnNvcnQoZSksWHIoYSksWHIobyksYS5sZW5ndGgpe2Zvcih2YXIgcz0wLGw9cixjPW8ubGVuZ3RoO3M8YzsrK3Mpb1tzXS5lPWw9IWw7Zm9yKHZhciB1LGYsaD1hWzBdOzspe2Zvcih2YXIgcD1oLGQ9ITA7cC52OylpZigocD1wLm4pPT09aClyZXR1cm47dT1wLnosaS5saW5lU3RhcnQoKTtkb3tpZihwLnY9cC5vLnY9ITAscC5lKXtpZihkKWZvcihzPTAsYz11Lmxlbmd0aDtzPGM7KytzKWkucG9pbnQoKGY9dVtzXSlbMF0sZlsxXSk7ZWxzZSBuKHAueCxwLm4ueCwxLGkpO3A9cC5ufWVsc2V7aWYoZClmb3Iocz0odT1wLnAueikubGVuZ3RoLTE7cz49MDstLXMpaS5wb2ludCgoZj11W3NdKVswXSxmWzFdKTtlbHNlIG4ocC54LHAucC54LC0xLGkpO3A9cC5wfXU9KHA9cC5vKS56LGQ9IWR9d2hpbGUoIXAudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBYcih0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUscixuPTAsaT10WzBdOysrbjxlOylpLm49cj10W25dLHIucD1pLGk9cjtpLm49cj10WzBdLHIucD1pfX1mdW5jdGlvbiBacih0LGUscixuKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89cix0aGlzLmU9bix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uICRyKGUscixuLGkpe3JldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzLGw9cihvKSxjPWEuaW52ZXJ0KGlbMF0saVsxXSksdT17cG9pbnQ6ZixsaW5lU3RhcnQ6cCxsaW5lRW5kOmQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dS5wb2ludD1iLHUubGluZVN0YXJ0PV8sdS5saW5lRW5kPXcscz1bXSxnPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dS5wb2ludD1mLHUubGluZVN0YXJ0PXAsdS5saW5lRW5kPWQscz10Lm1lcmdlKHMpO3ZhciBlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT1bTWF0aC5zaW4ociksLU1hdGguY29zKHIpLDBdLGE9MCxvPTA7RXIucmVzZXQoKTtmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDsrK3Mpe3ZhciBjPWVbc10sdT1jLmxlbmd0aDtpZih1KWZvcih2YXIgZj1jWzBdLGg9ZlswXSxwPWZbMV0vMitBdC80LGQ9TWF0aC5zaW4ocCksZz1NYXRoLmNvcyhwKSx2PTE7Oyl7dj09PXUmJih2PTApO3ZhciBtPSh0PWNbdl0pWzBdLHk9dFsxXS8yK0F0LzQseD1NYXRoLnNpbih5KSxiPU1hdGguY29zKHkpLF89bS1oLHc9Xz49MD8xOi0xLGs9dypfLFQ9az5BdCxBPWQqeDtpZihFci5hZGQoTWF0aC5hdGFuMihBKncqTWF0aC5zaW4oayksZypiK0EqTWF0aC5jb3MoaykpKSxhKz1UP18rdypNdDpfLFReaD49cl5tPj1yKXt2YXIgTT1Jcih6cihmKSx6cih0KSk7UnIoTSk7dmFyIFM9SXIoaSxNKTtScihTKTt2YXIgRT0oVF5fPj0wPy0xOjEpKkR0KFNbMl0pOyhuPkV8fG49PT1FJiYoTVswXXx8TVsxXSkpJiYobys9VF5fPj0wPzE6LTEpfWlmKCF2KyspYnJlYWs7aD1tLGQ9eCxnPWIsZj10fX1yZXR1cm4oYTwta3R8fGE8a3QmJkVyPC1rdCleMSZvfShjLGcpO3MubGVuZ3RoPyh4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxXcihzLFFyLGUsbixvKSk6ZSYmKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSkseCYmKG8ucG9seWdvbkVuZCgpLHg9ITEpLHM9Zz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtvLnBvbHlnb25TdGFydCgpLG8ubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSxvLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIGYodCxyKXt2YXIgbj1hKHQscik7ZSh0PW5bMF0scj1uWzFdKSYmby5wb2ludCh0LHIpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1hKHQsZSk7bC5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIHAoKXt1LnBvaW50PWgsbC5saW5lU3RhcnQoKX1mdW5jdGlvbiBkKCl7dS5wb2ludD1mLGwubGluZUVuZCgpfXZhciBnLHYsbT1LcigpLHk9cihtKSx4PSExO2Z1bmN0aW9uIGIodCxlKXt2LnB1c2goW3QsZV0pO3ZhciByPWEodCxlKTt5LnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gXygpe3kubGluZVN0YXJ0KCksdj1bXX1mdW5jdGlvbiB3KCl7Yih2WzBdWzBdLHZbMF1bMV0pLHkubGluZUVuZCgpO3ZhciB0LGU9eS5jbGVhbigpLHI9bS5idWZmZXIoKSxuPXIubGVuZ3RoO2lmKHYucG9wKCksZy5wdXNoKHYpLHY9bnVsbCxuKWlmKDEmZSl7dmFyIGksYT0tMTtpZigobj0odD1yWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCk7KythPG47KW8ucG9pbnQoKGk9dFthXSlbMF0saVsxXSk7by5saW5lRW5kKCl9fWVsc2Ugbj4xJiYyJmUmJnIucHVzaChyLnBvcCgpLmNvbmNhdChyLnNoaWZ0KCkpKSxzLnB1c2goci5maWx0ZXIoSnIpKX1yZXR1cm4gdX19ZnVuY3Rpb24gSnIodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gS3IoKXt2YXIgdCxlPVtdO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LHBvaW50OmZ1bmN0aW9uKGUscil7dC5wdXNoKFtlLHJdKX0sbGluZUVuZDpQLGJ1ZmZlcjpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9LHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX19fWZ1bmN0aW9uIFFyKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLUV0LWt0OkV0LXRbMV0pLSgoZT1lLngpWzBdPDA/ZVsxXS1FdC1rdDpFdC1lWzFdKX12YXIgdG49JHIoWXIsZnVuY3Rpb24odCl7dmFyIGUscj1OYU4sbj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihhLG8pe3ZhciBzPWE+MD9BdDotQXQsbD15KGEtcik7eShsLUF0KTxrdD8odC5wb2ludChyLG49KG4rbykvMj4wP0V0Oi1FdCksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLG4pLHQucG9pbnQoYSxuKSxlPTApOmkhPT1zJiZsPj1BdCYmKHkoci1pKTxrdCYmKHItPWkqa3QpLHkoYS1zKTxrdCYmKGEtPXMqa3QpLG49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPU1hdGguc2luKHQtcik7cmV0dXJuIHkobyk+a3Q/TWF0aC5hdGFuKChNYXRoLnNpbihlKSooYT1NYXRoLmNvcyhuKSkqTWF0aC5zaW4ociktTWF0aC5zaW4obikqKGk9TWF0aC5jb3MoZSkpKk1hdGguc2luKHQpKS8oaSphKm8pKTooZStuKS8yfShyLG4sYSxvKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksZT0wKSx0LnBvaW50KHI9YSxuPW8pLGk9c30sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLHI9bj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSxmdW5jdGlvbih0LGUscixuKXt2YXIgaTtpZihudWxsPT10KWk9cipFdCxuLnBvaW50KC1BdCxpKSxuLnBvaW50KDAsaSksbi5wb2ludChBdCxpKSxuLnBvaW50KEF0LDApLG4ucG9pbnQoQXQsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQXQsLWkpLG4ucG9pbnQoLUF0LDApLG4ucG9pbnQoLUF0LGkpO2Vsc2UgaWYoeSh0WzBdLWVbMF0pPmt0KXt2YXIgYT10WzBdPGVbMF0/QXQ6LUF0O2k9ciphLzIsbi5wb2ludCgtYSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChhLGkpfWVsc2Ugbi5wb2ludChlWzBdLGVbMV0pfSxbLUF0LC1BdC8yXSk7ZnVuY3Rpb24gZW4odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBhLG89aS5hLHM9aS5iLGw9by54LGM9by55LHU9MCxmPTEsaD1zLngtbCxwPXMueS1jO2lmKGE9dC1sLGh8fCEoYT4wKSl7aWYoYS89aCxoPDApe2lmKGE8dSlyZXR1cm47YTxmJiYoZj1hKX1lbHNlIGlmKGg+MCl7aWYoYT5mKXJldHVybjthPnUmJih1PWEpfWlmKGE9ci1sLGh8fCEoYTwwKSl7aWYoYS89aCxoPDApe2lmKGE+ZilyZXR1cm47YT51JiYodT1hKX1lbHNlIGlmKGg+MCl7aWYoYTx1KXJldHVybjthPGYmJihmPWEpfWlmKGE9ZS1jLHB8fCEoYT4wKSl7aWYoYS89cCxwPDApe2lmKGE8dSlyZXR1cm47YTxmJiYoZj1hKX1lbHNlIGlmKHA+MCl7aWYoYT5mKXJldHVybjthPnUmJih1PWEpfWlmKGE9bi1jLHB8fCEoYTwwKSl7aWYoYS89cCxwPDApe2lmKGE+ZilyZXR1cm47YT51JiYodT1hKX1lbHNlIGlmKHA+MCl7aWYoYTx1KXJldHVybjthPGYmJihmPWEpfXJldHVybiB1PjAmJihpLmE9e3g6bCt1KmgseTpjK3UqcH0pLGY8MSYmKGkuYj17eDpsK2YqaCx5OmMrZipwfSksaX19fX19fXZhciBybj0xZTk7ZnVuY3Rpb24gbm4oZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjLHUsZixoLHAsZCxnLHYsbSx5LHgsYj1sLF89S3IoKSx3PWVuKGUscixuLGkpLGs9e3BvaW50Ok0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ay5wb2ludD1TLHUmJnUucHVzaChmPVtdKTt5PSEwLG09ITEsZz12PU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2MmJihTKGgscCksZCYmbSYmXy5yZWpvaW4oKSxjLnB1c2goXy5idWZmZXIoKSkpO2sucG9pbnQ9TSxtJiZsLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bD1fLGM9W10sdT1bXSx4PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bD1iLGM9dC5tZXJnZShjKTt2YXIgcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXUubGVuZ3RoLG49dFsxXSxpPTA7aTxyOysraSlmb3IodmFyIGEsbz0xLHM9dVtpXSxsPXMubGVuZ3RoLGM9c1swXTtvPGw7KytvKWE9c1tvXSxjWzFdPD1uP2FbMV0+biYmT3QoYyxhLHQpPjAmJisrZTphWzFdPD1uJiZPdChjLGEsdCk8MCYmLS1lLGM9YTtyZXR1cm4gMCE9PWV9KFtlLGldKSxuPXgmJnIsYT1jLmxlbmd0aDsobnx8YSkmJihsLnBvbHlnb25TdGFydCgpLG4mJihsLmxpbmVTdGFydCgpLFQobnVsbCxudWxsLDEsbCksbC5saW5lRW5kKCkpLGEmJldyKGMsbyxyLFQsbCksbC5wb2x5Z29uRW5kKCkpLGM9dT1mPW51bGx9fTtmdW5jdGlvbiBUKHQsbyxsLGMpe3ZhciB1PTAsZj0wO2lmKG51bGw9PXR8fCh1PWEodCxsKSkhPT0oZj1hKG8sbCkpfHxzKHQsbyk8MF5sPjApZG97Yy5wb2ludCgwPT09dXx8Mz09PXU/ZTpuLHU+MT9pOnIpfXdoaWxlKCh1PSh1K2wrNCklNCkhPT1mKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBBKHQsYSl7cmV0dXJuIGU8PXQmJnQ8PW4mJnI8PWEmJmE8PWl9ZnVuY3Rpb24gTSh0LGUpe0EodCxlKSYmbC5wb2ludCh0LGUpfWZ1bmN0aW9uIFModCxlKXt2YXIgcj1BKHQ9TWF0aC5tYXgoLXJuLE1hdGgubWluKHJuLHQpKSxlPU1hdGgubWF4KC1ybixNYXRoLm1pbihybixlKSkpO2lmKHUmJmYucHVzaChbdCxlXSkseSloPXQscD1lLGQ9cix5PSExLHImJihsLmxpbmVTdGFydCgpLGwucG9pbnQodCxlKSk7ZWxzZSBpZihyJiZtKWwucG9pbnQodCxlKTtlbHNle3ZhciBuPXthOnt4OmcseTp2fSxiOnt4OnQseTplfX07dyhuKT8obXx8KGwubGluZVN0YXJ0KCksbC5wb2ludChuLmEueCxuLmEueSkpLGwucG9pbnQobi5iLngsbi5iLnkpLHJ8fGwubGluZUVuZCgpLHg9ITEpOnImJihsLmxpbmVTdGFydCgpLGwucG9pbnQodCxlKSx4PSExKX1nPXQsdj1lLG09cn1yZXR1cm4ga307ZnVuY3Rpb24gYSh0LGkpe3JldHVybiB5KHRbMF0tZSk8a3Q/aT4wPzA6Mzp5KHRbMF0tbik8a3Q/aT4wPzI6MTp5KHRbMV0tcik8a3Q/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gcyh0LngsZS54KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9YSh0LDEpLG49YShlLDEpO3JldHVybiByIT09bj9yLW46MD09PXI/ZVsxXS10WzFdOjE9PT1yP3RbMF0tZVswXToyPT09cj90WzFdLWVbMV06ZVswXS10WzBdfX1mdW5jdGlvbiBhbih0KXt2YXIgZT0wLHI9QXQvMyxuPUNuKHQpLGk9bihlLHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGU9dFswXSpBdC8xODAscj10WzFdKkF0LzE4MCk6W2UvQXQqMTgwLHIvQXQqMTgwXX0saX1mdW5jdGlvbiBvbih0LGUpe3ZhciByPU1hdGguc2luKHQpLG49KHIrTWF0aC5zaW4oZSkpLzIsaT0xK3IqKDIqbi1yKSxhPU1hdGguc3FydChpKS9uO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1NYXRoLnNxcnQoaS0yKm4qTWF0aC5zaW4oZSkpL247cmV0dXJuW3IqTWF0aC5zaW4odCo9biksYS1yKk1hdGguY29zKHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1hLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9uLER0KChpLSh0KnQrcipyKSpuKm4pLygyKm4pKV19LG99dC5nZW8uY2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksYSxvPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJihpLnZhbGlkPSExKSwoaT1hKHQpKS52YWxpZD0hMCxpfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bm4odD0rc1swXVswXSxlPStzWzBdWzFdLHI9K3NbMV1bMF0sbj0rc1sxXVsxXSksaSYmKGkudmFsaWQ9ITEsaT1udWxsKSxvKTpbW3QsZV0sW3Isbl1dfX07cmV0dXJuIG8uZXh0ZW50KFtbMCwwXSxbOTYwLDUwMF1dKX0sKHQuZ2VvLmNvbmljRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGFuKG9uKX0pLnJhdz1vbix0Lmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKX0sdC5nZW8uYWxiZXJzVXNhPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYT10Lmdlby5hbGJlcnMoKSxvPXQuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxzPXQuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGw9e3BvaW50OmZ1bmN0aW9uKHQscil7ZT1bdCxyXX19O2Z1bmN0aW9uIGModCl7dmFyIGE9dFswXSxvPXRbMV07cmV0dXJuIGU9bnVsbCxyKGEsbyksZXx8KG4oYSxvKSxlKXx8aShhLG8pLGV9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPWEuc2NhbGUoKSxyPWEudHJhbnNsYXRlKCksbj0odFswXS1yWzBdKS9lLGk9KHRbMV0tclsxXSkvZTtyZXR1cm4oaT49LjEyJiZpPC4yMzQmJm4+PS0uNDI1JiZuPC0uMjE0P286aT49LjE2NiYmaTwuMjM0JiZuPj0tLjIxNCYmbjwtLjExNT9zOmEpLmludmVydCh0KX0sYy5zdHJlYW09ZnVuY3Rpb24odCl7dmFyIGU9YS5zdHJlYW0odCkscj1vLnN0cmVhbSh0KSxuPXMuc3RyZWFtKHQpO3JldHVybntwb2ludDpmdW5jdGlvbih0LGkpe2UucG9pbnQodCxpKSxyLnBvaW50KHQsaSksbi5wb2ludCh0LGkpfSxzcGhlcmU6ZnVuY3Rpb24oKXtlLnNwaGVyZSgpLHIuc3BoZXJlKCksbi5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxyLmxpbmVTdGFydCgpLG4ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSxyLmxpbmVFbmQoKSxuLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSxyLnBvbHlnb25TdGFydCgpLG4ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSxyLnBvbHlnb25FbmQoKSxuLnBvbHlnb25FbmQoKX19fSxjLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5wcmVjaXNpb24odCksby5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksYyk6YS5wcmVjaXNpb24oKX0sYy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5zY2FsZSh0KSxvLnNjYWxlKC4zNSp0KSxzLnNjYWxlKHQpLGMudHJhbnNsYXRlKGEudHJhbnNsYXRlKCkpKTphLnNjYWxlKCl9LGMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhLnRyYW5zbGF0ZSgpO3ZhciBlPWEuc2NhbGUoKSx1PSt0WzBdLGY9K3RbMV07cmV0dXJuIHI9YS50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW3UtLjQ1NSplLGYtLjIzOCplXSxbdSsuNDU1KmUsZisuMjM4KmVdXSkuc3RyZWFtKGwpLnBvaW50LG49by50cmFuc2xhdGUoW3UtLjMwNyplLGYrLjIwMSplXSkuY2xpcEV4dGVudChbW3UtLjQyNSplK2t0LGYrLjEyKmUra3RdLFt1LS4yMTQqZS1rdCxmKy4yMzQqZS1rdF1dKS5zdHJlYW0obCkucG9pbnQsaT1zLnRyYW5zbGF0ZShbdS0uMjA1KmUsZisuMjEyKmVdKS5jbGlwRXh0ZW50KFtbdS0uMjE0KmUra3QsZisuMTY2KmUra3RdLFt1LS4xMTUqZS1rdCxmKy4yMzQqZS1rdF1dKS5zdHJlYW0obCkucG9pbnQsY30sYy5zY2FsZSgxMDcwKX07dmFyIHNuLGxuLGNuLHVuLGZuLGhuLHBuPXtwb2ludDpQLGxpbmVTdGFydDpQLGxpbmVFbmQ6UCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtsbj0wLHBuLmxpbmVTdGFydD1kbn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3BuLmxpbmVTdGFydD1wbi5saW5lRW5kPXBuLnBvaW50PVAsc24rPXkobG4vMil9fTtmdW5jdGlvbiBkbigpe3ZhciB0LGUscixuO2Z1bmN0aW9uIGkodCxlKXtsbis9bip0LXIqZSxyPXQsbj1lfXBuLnBvaW50PWZ1bmN0aW9uKGEsbyl7cG4ucG9pbnQ9aSx0PXI9YSxlPW49b30scG4ubGluZUVuZD1mdW5jdGlvbigpe2kodCxlKX19dmFyIGduPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8Y24mJihjbj10KTt0PmZuJiYoZm49dCk7ZTx1biYmKHVuPWUpO2U+aG4mJihobj1lKX0sbGluZVN0YXJ0OlAsbGluZUVuZDpQLHBvbHlnb25TdGFydDpQLHBvbHlnb25FbmQ6UH07ZnVuY3Rpb24gdm4oKXt2YXIgdD1tbig0LjUpLGU9W10scj17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtyLnBvaW50PWl9LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9c30scG9seWdvbkVuZDpmdW5jdGlvbigpe3IubGluZUVuZD1vLHIucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHQ9bW4oZSkscn0scmVzdWx0OmZ1bmN0aW9uKCl7aWYoZS5sZW5ndGgpe3ZhciB0PWUuam9pbigiIik7cmV0dXJuIGU9W10sdH19fTtmdW5jdGlvbiBuKHIsbil7ZS5wdXNoKCJNIixyLCIsIixuLHQpfWZ1bmN0aW9uIGkodCxuKXtlLnB1c2goIk0iLHQsIiwiLG4pLHIucG9pbnQ9YX1mdW5jdGlvbiBhKHQscil7ZS5wdXNoKCJMIix0LCIsIixyKX1mdW5jdGlvbiBvKCl7ci5wb2ludD1ufWZ1bmN0aW9uIHMoKXtlLnB1c2goIloiKX1yZXR1cm4gcn1mdW5jdGlvbiBtbih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In12YXIgeW4seG49e3BvaW50OmJuLGxpbmVTdGFydDpfbixsaW5lRW5kOnduLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3huLmxpbmVTdGFydD1rbn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3huLnBvaW50PWJuLHhuLmxpbmVTdGFydD1fbix4bi5saW5lRW5kPXdufX07ZnVuY3Rpb24gYm4odCxlKXt4cis9dCxicis9ZSwrK19yfWZ1bmN0aW9uIF9uKCl7dmFyIHQsZTtmdW5jdGlvbiByKHIsbil7dmFyIGk9ci10LGE9bi1lLG89TWF0aC5zcXJ0KGkqaSthKmEpO3dyKz1vKih0K3IpLzIsa3IrPW8qKGUrbikvMixUcis9byxibih0PXIsZT1uKX14bi5wb2ludD1mdW5jdGlvbihuLGkpe3huLnBvaW50PXIsYm4odD1uLGU9aSl9fWZ1bmN0aW9uIHduKCl7eG4ucG9pbnQ9Ym59ZnVuY3Rpb24ga24oKXt2YXIgdCxlLHIsbjtmdW5jdGlvbiBpKHQsZSl7dmFyIGk9dC1yLGE9ZS1uLG89TWF0aC5zcXJ0KGkqaSthKmEpO3dyKz1vKihyK3QpLzIsa3IrPW8qKG4rZSkvMixUcis9byxBcis9KG89bip0LXIqZSkqKHIrdCksTXIrPW8qKG4rZSksU3IrPTMqbyxibihyPXQsbj1lKX14bi5wb2ludD1mdW5jdGlvbihhLG8pe3huLnBvaW50PWksYm4odD1yPWEsZT1uPW8pfSx4bi5saW5lRW5kPWZ1bmN0aW9uKCl7aSh0LGUpfX1mdW5jdGlvbiBUbih0KXt2YXIgZT00LjUscj17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtyLnBvaW50PWl9LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9c30scG9seWdvbkVuZDpmdW5jdGlvbigpe3IubGluZUVuZD1vLHIucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxyfSxyZXN1bHQ6UH07ZnVuY3Rpb24gbihyLG4pe3QubW92ZVRvKHIrZSxuKSx0LmFyYyhyLG4sZSwwLE10KX1mdW5jdGlvbiBpKGUsbil7dC5tb3ZlVG8oZSxuKSxyLnBvaW50PWF9ZnVuY3Rpb24gYShlLHIpe3QubGluZVRvKGUscil9ZnVuY3Rpb24gbygpe3IucG9pbnQ9bn1mdW5jdGlvbiBzKCl7dC5jbG9zZVBhdGgoKX1yZXR1cm4gcn1mdW5jdGlvbiBBbih0KXt2YXIgZT0uNSxyPU1hdGguY29zKDMwKkN0KSxuPTE2O2Z1bmN0aW9uIGkoZSl7cmV0dXJuKG4/ZnVuY3Rpb24oZSl7dmFyIHIsaSxvLHMsbCxjLHUsZixoLHAsZCxnLHY9e3BvaW50Om0sbGluZVN0YXJ0OnksbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksdi5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHYubGluZVN0YXJ0PXl9fTtmdW5jdGlvbiBtKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIHkoKXtmPU5hTix2LnBvaW50PXgsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB4KHIsaSl7dmFyIG89enIoW3IsaV0pLHM9dChyLGkpO2EoZixoLHUscCxkLGcsZj1zWzBdLGg9c1sxXSx1PXIscD1vWzBdLGQ9b1sxXSxnPW9bMl0sbixlKSxlLnBvaW50KGYsaCl9ZnVuY3Rpb24gYigpe3YucG9pbnQ9bSxlLmxpbmVFbmQoKX1mdW5jdGlvbiBfKCl7eSgpLHYucG9pbnQ9dyx2LmxpbmVFbmQ9a31mdW5jdGlvbiB3KHQsZSl7eChyPXQsZSksaT1mLG89aCxzPXAsbD1kLGM9Zyx2LnBvaW50PXh9ZnVuY3Rpb24gaygpe2EoZixoLHUscCxkLGcsaSxvLHIscyxsLGMsbixlKSx2LmxpbmVFbmQ9YixiKCl9cmV0dXJuIHZ9OmZ1bmN0aW9uKGUpe3JldHVybiBTbihlLGZ1bmN0aW9uKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfSl9KShlKX1mdW5jdGlvbiBhKG4saSxvLHMsbCxjLHUsZixoLHAsZCxnLHYsbSl7dmFyIHg9dS1uLGI9Zi1pLF89eCp4K2IqYjtpZihfPjQqZSYmdi0tKXt2YXIgdz1zK3Asaz1sK2QsVD1jK2csQT1NYXRoLnNxcnQodyp3K2sqaytUKlQpLE09TWF0aC5hc2luKFQvPUEpLFM9eSh5KFQpLTEpPGt0fHx5KG8taCk8a3Q/KG8raCkvMjpNYXRoLmF0YW4yKGssdyksRT10KFMsTSksQz1FWzBdLEw9RVsxXSx6PUMtbixPPUwtaSxJPWIqei14Kk87KEkqSS9fPmV8fHkoKHgqeitiKk8pL18tLjUpPi4zfHxzKnArbCpkK2MqZzxyKSYmKGEobixpLG8scyxsLGMsQyxMLFMsdy89QSxrLz1BLFQsdixtKSxtLnBvaW50KEMsTCksYShDLEwsUyx3LGssVCx1LGYsaCxwLGQsZyx2LG0pKX19cmV0dXJuIGkucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPShlPXQqdCk+MCYmMTYsaSk6TWF0aC5zcXJ0KGUpfSxpfWZ1bmN0aW9uIE1uKHQpe3RoaXMuc3RyZWFtPXR9ZnVuY3Rpb24gU24odCxlKXtyZXR1cm57cG9pbnQ6ZSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIEVuKHQpe3JldHVybiBDbihmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBDbihlKXt2YXIgcixuLGksYSxvLHMsbD1BbihmdW5jdGlvbih0LGUpe3JldHVyblsodD1yKHQsZSkpWzBdKmMrYSxvLXRbMV0qY119KSxjPTE1MCx1PTQ4MCxmPTI1MCxoPTAscD0wLGQ9MCxnPTAsdj0wLG09dG4seD16LGI9bnVsbCxfPW51bGw7ZnVuY3Rpb24gdyh0KXtyZXR1cm5bKHQ9aSh0WzBdKkN0LHRbMV0qQ3QpKVswXSpjK2Esby10WzFdKmNdfWZ1bmN0aW9uIGsodCl7cmV0dXJuKHQ9aS5pbnZlcnQoKHRbMF0tYSkvYywoby10WzFdKS9jKSkmJlt0WzBdKkx0LHRbMV0qTHRdfWZ1bmN0aW9uIFQoKXtpPUdyKG49SW4oZCxnLHYpLHIpO3ZhciB0PXIoaCxwKTtyZXR1cm4gYT11LXRbMF0qYyxvPWYrdFsxXSpjLEEoKX1mdW5jdGlvbiBBKCl7cmV0dXJuIHMmJihzLnZhbGlkPSExLHM9bnVsbCksd31yZXR1cm4gdy5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIHMmJihzLnZhbGlkPSExKSwocz1MbihtKG4sbCh4KHQpKSkpKS52YWxpZD0hMCxzfSx3LmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1udWxsPT10PyhiPXQsdG4pOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguY29zKHQpLHI9ZT4wLG49eShlKT5rdDtyZXR1cm4gJHIoaSxmdW5jdGlvbih0KXt2YXIgZSxzLGwsYyx1O3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtjPWw9ITEsdT0xfSxwb2ludDpmdW5jdGlvbihmLGgpe3ZhciBwLGQ9W2YsaF0sZz1pKGYsaCksdj1yP2c/MDpvKGYsaCk6Zz9vKGYrKGY8MD9BdDotQXQpLGgpOjA7aWYoIWUmJihjPWw9ZykmJnQubGluZVN0YXJ0KCksZyE9PWwmJihwPWEoZSxkKSwoQnIoZSxwKXx8QnIoZCxwKSkmJihkWzBdKz1rdCxkWzFdKz1rdCxnPWkoZFswXSxkWzFdKSkpLGchPT1sKXU9MCxnPyh0LmxpbmVTdGFydCgpLHA9YShkLGUpLHQucG9pbnQocFswXSxwWzFdKSk6KHA9YShlLGQpLHQucG9pbnQocFswXSxwWzFdKSx0LmxpbmVFbmQoKSksZT1wO2Vsc2UgaWYobiYmZSYmcl5nKXt2YXIgbTt2JnN8fCEobT1hKGQsZSwhMCkpfHwodT0wLHI/KHQubGluZVN0YXJ0KCksdC5wb2ludChtWzBdWzBdLG1bMF1bMV0pLHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdKSkpfSFnfHxlJiZCcihlLGQpfHx0LnBvaW50KGRbMF0sZFsxXSksZT1kLGw9ZyxzPXZ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHV8KGMmJmwpPDwxfX19LEZuKHQsNipDdCkscj9bMCwtdF06Wy1BdCx0LUF0XSk7ZnVuY3Rpb24gaSh0LHIpe3JldHVybiBNYXRoLmNvcyh0KSpNYXRoLmNvcyhyKT5lfWZ1bmN0aW9uIGEodCxyLG4pe3ZhciBpPVsxLDAsMF0sYT1Jcih6cih0KSx6cihyKSksbz1PcihhLGEpLHM9YVswXSxsPW8tcypzO2lmKCFsKXJldHVybiFuJiZ0O3ZhciBjPWUqby9sLHU9LWUqcy9sLGY9SXIoaSxhKSxoPVByKGksYyk7RHIoaCxQcihhLHUpKTt2YXIgcD1mLGQ9T3IoaCxwKSxnPU9yKHAscCksdj1kKmQtZyooT3IoaCxoKS0xKTtpZighKHY8MCkpe3ZhciBtPU1hdGguc3FydCh2KSx4PVByKHAsKC1kLW0pL2cpO2lmKERyKHgsaCkseD1Gcih4KSwhbilyZXR1cm4geDt2YXIgYixfPXRbMF0sdz1yWzBdLGs9dFsxXSxUPXJbMV07dzxfJiYoYj1fLF89dyx3PWIpO3ZhciBBPXctXyxNPXkoQS1BdCk8a3Q7aWYoIU0mJlQ8ayYmKGI9ayxrPVQsVD1iKSxNfHxBPGt0P00/aytUPjBeeFsxXTwoeSh4WzBdLV8pPGt0P2s6VCk6azw9eFsxXSYmeFsxXTw9VDpBPkF0XihfPD14WzBdJiZ4WzBdPD13KSl7dmFyIFM9UHIocCwoLWQrbSkvZyk7cmV0dXJuIERyKFMsaCksW3gsRnIoUyldfX19ZnVuY3Rpb24gbyhlLG4pe3ZhciBpPXI/dDpBdC10LGE9MDtyZXR1cm4gZTwtaT9hfD0xOmU+aSYmKGF8PTIpLG48LWk/YXw9NDpuPmkmJihhfD04KSxhfX0oKGI9K3QpKkN0KSxBKCkpOmJ9LHcuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz10LHg9dD9ubih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKTp6LEEoKSk6X30sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxUKCkpOmN9LHcudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0WzBdLGY9K3RbMV0sVCgpKTpbdSxmXX0sdy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9dFswXSUzNjAqQ3QscD10WzFdJTM2MCpDdCxUKCkpOltoKkx0LHAqTHRdfSx3LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10WzBdJTM2MCpDdCxnPXRbMV0lMzYwKkN0LHY9dC5sZW5ndGg+Mj90WzJdJTM2MCpDdDowLFQoKSk6W2QqTHQsZypMdCx2Kkx0XX0sdC5yZWJpbmQodyxsLCJwcmVjaXNpb24iKSxmdW5jdGlvbigpe3JldHVybiByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHcuaW52ZXJ0PXIuaW52ZXJ0JiZrLFQoKX19ZnVuY3Rpb24gTG4odCl7cmV0dXJuIFNuKHQsZnVuY3Rpb24oZSxyKXt0LnBvaW50KGUqQ3QscipDdCl9KX1mdW5jdGlvbiB6bih0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIE9uKHQsZSl7cmV0dXJuW3Q+QXQ/dC1NdDp0PC1BdD90K010OnQsZV19ZnVuY3Rpb24gSW4odCxlLHIpe3JldHVybiB0P2V8fHI/R3IoUG4odCksUm4oZSxyKSk6UG4odCk6ZXx8cj9SbihlLHIpOk9ufWZ1bmN0aW9uIERuKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblsoZSs9dCk+QXQ/ZS1NdDplPC1BdD9lK010OmUscl19fWZ1bmN0aW9uIFBuKHQpe3ZhciBlPURuKHQpO3JldHVybiBlLmludmVydD1EbigtdCksZX1mdW5jdGlvbiBSbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT1NYXRoLmNvcyhlKSxhPU1hdGguc2luKGUpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbz1NYXRoLmNvcyhlKSxzPU1hdGguY29zKHQpKm8sbD1NYXRoLnNpbih0KSpvLGM9TWF0aC5zaW4oZSksdT1jKnIrcypuO3JldHVybltNYXRoLmF0YW4yKGwqaS11KmEscypyLWMqbiksRHQodSppK2wqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqbyxsPU1hdGguc2luKHQpKm8sYz1NYXRoLnNpbihlKSx1PWMqaS1sKmE7cmV0dXJuW01hdGguYXRhbjIobCppK2MqYSxzKnIrdSpuKSxEdCh1KnItcypuKV19LG99ZnVuY3Rpb24gRm4odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD1vKmU7bnVsbCE9aT8oaT1CbihyLGkpLGE9Qm4ocixhKSwobz4wP2k8YTppPmEpJiYoaSs9bypNdCkpOihpPXQrbypNdCxhPXQtLjUqbCk7Zm9yKHZhciBjLHU9aTtvPjA/dT5hOnU8YTt1LT1sKXMucG9pbnQoKGM9RnIoW3IsLW4qTWF0aC5jb3ModSksLW4qTWF0aC5zaW4odSldKSlbMF0sY1sxXSl9fWZ1bmN0aW9uIEJuKHQsZSl7dmFyIHI9enIoZSk7clswXS09dCxScihyKTt2YXIgbj1JdCgtclsxXSk7cmV0dXJuKCgtclsyXTwwPy1uOm4pKzIqTWF0aC5QSS1rdCklKDIqTWF0aC5QSSl9ZnVuY3Rpb24gTm4oZSxyLG4pe3ZhciBpPXQucmFuZ2UoZSxyLWt0LG4pLmNvbmNhdChyKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSl9fWZ1bmN0aW9uIGpuKGUscixuKXt2YXIgaT10LnJhbmdlKGUsci1rdCxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pfX1mdW5jdGlvbiBWbih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gVW4odCl7cmV0dXJuIHQudGFyZ2V0fXQuZ2VvLnBhdGg9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG89NC41O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJigiZnVuY3Rpb24iPT10eXBlb2YgbyYmaS5wb2ludFJhZGl1cygrby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGEmJmEudmFsaWR8fChhPW4oaSkpLHQuZ2VvLnN0cmVhbShlLGEpKSxpLnJlc3VsdCgpfWZ1bmN0aW9uIGwoKXtyZXR1cm4gYT1udWxsLHN9cmV0dXJuIHMuYXJlYT1mdW5jdGlvbihlKXtyZXR1cm4gc249MCx0Lmdlby5zdHJlYW0oZSxuKHBuKSksc259LHMuY2VudHJvaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHhyPWJyPV9yPXdyPWtyPVRyPUFyPU1yPVNyPTAsdC5nZW8uc3RyZWFtKGUsbih4bikpLFNyP1tBci9TcixNci9Tcl06VHI/W3dyL1RyLGtyL1RyXTpfcj9beHIvX3IsYnIvX3JdOltOYU4sTmFOXX0scy5ib3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZuPWhuPS0oY249dW49MS8wKSx0Lmdlby5zdHJlYW0oZSxuKGduKSksW1tjbix1bl0sW2ZuLGhuXV19LHMucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0oZT10KT90LnN0cmVhbXx8KHI9dCxpPUFuKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoW3QqTHQsZSpMdF0pfSksZnVuY3Rpb24odCl7cmV0dXJuIExuKGkodCkpfSk6eixsKCkpOmU7dmFyIHIsaX0scy5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShyPXQpP25ldyB2bjpuZXcgVG4odCksImZ1bmN0aW9uIiE9dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMobyksbCgpKTpyfSxzLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxzKTpvfSxzLnByb2plY3Rpb24odC5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCl9LHQuZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciByPW5ldyBNbihlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9fX0sTW4ucHJvdG90eXBlPXtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSx0Lmdlby5wcm9qZWN0aW9uPUVuLHQuZ2VvLnByb2plY3Rpb25NdXRhdG9yPUNuLCh0Lmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oem4pfSkucmF3PXpuLmludmVydD16bix0Lmdlby5yb3RhdGlvbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpDdCxlWzFdKkN0KSlbMF0qPUx0LGVbMV0qPUx0LGV9cmV0dXJuIHQ9SW4odFswXSUzNjAqQ3QsdFsxXSpDdCx0Lmxlbmd0aD4yP3RbMl0qQ3Q6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSpDdCxlWzFdKkN0KSlbMF0qPUx0LGVbMV0qPUx0LGV9LGV9LE9uLmludmVydD16bix0Lmdlby5jaXJjbGU9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9WzAsMF0sbj02O2Z1bmN0aW9uIGkoKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyLG49SW4oLXRbMF0qQ3QsLXRbMV0qQ3QsMCkuaW52ZXJ0LGk9W107cmV0dXJuIGUobnVsbCxudWxsLDEse3BvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQ9bih0LGUpKSx0WzBdKj1MdCx0WzFdKj1MdH19KSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2ldfX1yZXR1cm4gaS5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUZuKCh0PStyKSpDdCxuKkN0KSxpKTp0fSxpLnByZWNpc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Gbih0KkN0LChuPStyKSpDdCksaSk6bn0saS5hbmdsZSg5MCl9LHQuZ2VvLmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0oZVswXS10WzBdKSpDdCxpPXRbMV0qQ3QsYT1lWzFdKkN0LG89TWF0aC5zaW4obikscz1NYXRoLmNvcyhuKSxsPU1hdGguc2luKGkpLGM9TWF0aC5jb3MoaSksdT1NYXRoLnNpbihhKSxmPU1hdGguY29zKGEpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgocj1mKm8pKnIrKHI9Yyp1LWwqZipzKSpyKSxsKnUrYypmKnMpfSx0Lmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscD0xMCxkPXAsZz05MCx2PTM2MCxtPTIuNTtmdW5jdGlvbiB4KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6YigpfX1mdW5jdGlvbiBiKCl7cmV0dXJuIHQucmFuZ2UoTWF0aC5jZWlsKGkvZykqZyxuLGcpLm1hcChmKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwobC92KSp2LHMsdikubWFwKGgpKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwoci9wKSpwLGUscCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQlZyk+a3R9KS5tYXAoYykpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChvL2QpKmQsYSxkKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHkodCV2KT5rdH0pLm1hcCh1KSl9cmV0dXJuIHgubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYigpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KX0seC5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltmKGkpLmNvbmNhdChoKHMpLnNsaWNlKDEpLGYobikucmV2ZXJzZSgpLnNsaWNlKDEpLGgobCkucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx4LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQpOngubWlub3JFeHRlbnQoKX0seC5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxuPSt0WzFdWzBdLGw9K3RbMF1bMV0scz0rdFsxXVsxXSxpPm4mJih0PWksaT1uLG49dCksbD5zJiYodD1sLGw9cyxzPXQpLHgucHJlY2lzaW9uKG0pKTpbW2ksbF0sW24sc11dfSx4Lm1pbm9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sbz0rdFswXVsxXSxhPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSxvPmEmJih0PW8sbz1hLGE9dCkseC5wcmVjaXNpb24obSkpOltbcixvXSxbZSxhXV19LHguc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yU3RlcCh0KS5taW5vclN0ZXAodCk6eC5taW5vclN0ZXAoKX0seC5tYWpvclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3RbMF0sdj0rdFsxXSx4KTpbZyx2XX0seC5taW5vclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sZD0rdFsxXSx4KTpbcCxkXX0seC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3QsYz1ObihvLGEsOTApLHU9am4ocixlLG0pLGY9Tm4obCxzLDkwKSxoPWpuKGksbixtKSx4KTptfSx4Lm1ham9yRXh0ZW50KFtbLTE4MCwtOTAra3RdLFsxODAsOTAta3RdXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1rdF0sWzE4MCw4MCtrdF1dKX0sdC5nZW8uZ3JlYXRBcmM9ZnVuY3Rpb24oKXt2YXIgZSxyLG49Vm4saT1VbjtmdW5jdGlvbiBhKCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOltlfHxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyfHxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKV19fXJldHVybiBhLmRpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2VvLmRpc3RhbmNlKGV8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sYS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P251bGw6dCxhKTpufSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bnVsbDp0LGEpOml9LGEucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YTowfSxhfSx0Lmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiByPXRbMF0qQ3Qsbj10WzFdKkN0LGk9ZVswXSpDdCxhPWVbMV0qQ3Qsbz1NYXRoLmNvcyhuKSxzPU1hdGguc2luKG4pLGw9TWF0aC5jb3MoYSksYz1NYXRoLnNpbihhKSx1PW8qTWF0aC5jb3MociksZj1vKk1hdGguc2luKHIpLGg9bCpNYXRoLmNvcyhpKSxwPWwqTWF0aC5zaW4oaSksZD0yKk1hdGguYXNpbihNYXRoLnNxcnQoUnQoYS1uKStvKmwqUnQoaS1yKSkpLGc9MS9NYXRoLnNpbihkKSwodj1kP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGguc2luKHQqPWQpKmcscj1NYXRoLnNpbihkLXQpKmcsbj1yKnUrZSpoLGk9cipmK2UqcCxhPXIqcytlKmM7cmV0dXJuW01hdGguYXRhbjIoaSxuKSpMdCxNYXRoLmF0YW4yKGEsTWF0aC5zcXJ0KG4qbitpKmkpKSpMdF19OmZ1bmN0aW9uKCl7cmV0dXJuW3IqTHQsbipMdF19KS5kaXN0YW5jZT1kLHY7dmFyIHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsZyx2fSx0Lmdlby5sZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHluPTAsdC5nZW8uc3RyZWFtKGUscW4pLHlufTt2YXIgcW49e3NwaGVyZTpQLHBvaW50OlAsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixpKXt2YXIgYT1NYXRoLnNpbihpKj1DdCksbz1NYXRoLmNvcyhpKSxzPXkoKG4qPUN0KS10KSxsPU1hdGguY29zKHMpO3luKz1NYXRoLmF0YW4yKE1hdGguc3FydCgocz1vKk1hdGguc2luKHMpKSpzKyhzPXIqYS1lKm8qbCkqcyksZSphK3IqbypsKSx0PW4sZT1hLHI9b31xbi5wb2ludD1mdW5jdGlvbihpLGEpe3Q9aSpDdCxlPU1hdGguc2luKGEqPUN0KSxyPU1hdGguY29zKGEpLHFuLnBvaW50PW59LHFuLmxpbmVFbmQ9ZnVuY3Rpb24oKXtxbi5wb2ludD1xbi5saW5lRW5kPVB9fSxsaW5lRW5kOlAscG9seWdvblN0YXJ0OlAscG9seWdvbkVuZDpQfTtmdW5jdGlvbiBIbih0LGUpe2Z1bmN0aW9uIHIoZSxyKXt2YXIgbj1NYXRoLmNvcyhlKSxpPU1hdGguY29zKHIpLGE9dChuKmkpO3JldHVyblthKmkqTWF0aC5zaW4oZSksYSpNYXRoLnNpbihyKV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7dmFyIG49TWF0aC5zcXJ0KHQqdCtyKnIpLGk9ZShuKSxhPU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSk7cmV0dXJuW01hdGguYXRhbjIodCphLG4qbyksTWF0aC5hc2luKG4mJnIqYS9uKV19LHJ9dmFyIEduPUhuKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoMi8oMSt0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXNpbih0LzIpfSk7KHQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBFbihHbil9KS5yYXc9R247dmFyIFluPUhuKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguYWNvcyh0KTtyZXR1cm4gZSYmZS9NYXRoLnNpbihlKX0seik7ZnVuY3Rpb24gV24odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnRhbihBdC80K3QvMil9LGk9dD09PWU/TWF0aC5zaW4odCk6TWF0aC5sb2coci9NYXRoLmNvcyhlKSkvTWF0aC5sb2cobihlKS9uKHQpKSxhPXIqTWF0aC5wb3cobih0KSxpKS9pO2lmKCFpKXJldHVybiAkbjtmdW5jdGlvbiBvKHQsZSl7YT4wP2U8LUV0K2t0JiYoZT0tRXQra3QpOmU+RXQta3QmJihlPUV0LWt0KTt2YXIgcj1hL01hdGgucG93KG4oZSksaSk7cmV0dXJuW3IqTWF0aC5zaW4oaSp0KSxhLXIqTWF0aC5jb3MoaSp0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lLG49enQoaSkqTWF0aC5zcXJ0KHQqdCtyKnIpO3JldHVybltNYXRoLmF0YW4yKHQscikvaSwyKk1hdGguYXRhbihNYXRoLnBvdyhhL24sMS9pKSktRXRdfSxvfWZ1bmN0aW9uIFhuKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj10PT09ZT9NYXRoLnNpbih0KTooci1NYXRoLmNvcyhlKSkvKGUtdCksaT1yL24rdDtpZih5KG4pPGt0KXJldHVybiB6bjtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aS1lO3JldHVybltyKk1hdGguc2luKG4qdCksaS1yKk1hdGguY29zKG4qdCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWktZTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL24saS16dChuKSpNYXRoLnNxcnQodCp0K3IqcildfSxhfSh0Lmdlby5hemltdXRoYWxFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBFbihZbil9KS5yYXc9WW4sKHQuZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIGFuKFduKX0pLnJhdz1XbiwodC5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBhbihYbil9KS5yYXc9WG47dmFyIFpuPUhuKGZ1bmN0aW9uKHQpe3JldHVybiAxL3R9LE1hdGguYXRhbik7ZnVuY3Rpb24gJG4odCxlKXtyZXR1cm5bdCxNYXRoLmxvZyhNYXRoLnRhbihBdC80K2UvMikpXX1mdW5jdGlvbiBKbih0KXt2YXIgZSxyPUVuKHQpLG49ci5zY2FsZSxpPXIudHJhbnNsYXRlLGE9ci5jbGlwRXh0ZW50O3JldHVybiByLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gdD09PXI/ZT9yLmNsaXBFeHRlbnQobnVsbCk6cjp0fSxyLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5hcHBseShyLGFyZ3VtZW50cyk7aWYobz09PXIpe2lmKGU9bnVsbD09dCl7dmFyIHM9QXQqbigpLGw9aSgpO2EoW1tsWzBdLXMsbFsxXS1zXSxbbFswXStzLGxbMV0rc11dKX19ZWxzZSBlJiYobz1udWxsKTtyZXR1cm4gb30sci5jbGlwRXh0ZW50KG51bGwpfSh0Lmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBFbihabil9KS5yYXc9Wm4sJG4uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMipNYXRoLmF0YW4oTWF0aC5leHAoZSkpLUV0XX0sKHQuZ2VvLm1lcmNhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIEpuKCRuKX0pLnJhdz0kbjt2YXIgS249SG4oZnVuY3Rpb24oKXtyZXR1cm4gMX0sTWF0aC5hc2luKTsodC5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEVuKEtuKX0pLnJhdz1Lbjt2YXIgUW49SG4oZnVuY3Rpb24odCl7cmV0dXJuIDEvKDErdCl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXRhbih0KX0pO2Z1bmN0aW9uIHRpKHQsZSl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKEF0LzQrZS8yKSksLXRdfWZ1bmN0aW9uIGVpKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIHJpKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVswLDFdLG49MixpPTI7aTxlO2krKyl7Zm9yKDtuPjEmJk90KHRbcltuLTJdXSx0W3Jbbi0xXV0sdFtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGlpKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfSh0Lmdlby5zdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEVuKFFuKX0pLnJhdz1Rbix0aS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLUV0XX0sKHQuZ2VvLnRyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PUpuKHRpKSxlPXQuY2VudGVyLHI9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0P2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0P3IoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9cigpKVswXSx0WzFdLHRbMl0tOTBdfSxyKFswLDAsOTBdKX0pLnJhdz10aSx0Lmdlb209e30sdC5nZW9tLmh1bGw9ZnVuY3Rpb24odCl7dmFyIGU9ZWkscj1yaTtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuKHQpO2Z1bmN0aW9uIG4odCl7aWYodC5sZW5ndGg8MylyZXR1cm5bXTt2YXIgbixpPXZlKGUpLGE9dmUociksbz10Lmxlbmd0aCxzPVtdLGw9W107Zm9yKG49MDtuPG87bisrKXMucHVzaChbK2kuY2FsbCh0aGlzLHRbbl0sbiksK2EuY2FsbCh0aGlzLHRbbl0sbiksbl0pO2ZvcihzLnNvcnQoaWkpLG49MDtuPG87bisrKWwucHVzaChbc1tuXVswXSwtc1tuXVsxXV0pO3ZhciBjPW5pKHMpLHU9bmkobCksZj11WzBdPT09Y1swXSxoPXVbdS5sZW5ndGgtMV09PT1jW2MubGVuZ3RoLTFdLHA9W107Zm9yKG49Yy5sZW5ndGgtMTtuPj0wOy0tbilwLnB1c2godFtzW2Nbbl1dWzJdXSk7Zm9yKG49K2Y7bjx1Lmxlbmd0aC1oOysrbilwLnB1c2godFtzW3Vbbl1dWzJdXSk7cmV0dXJuIHB9cmV0dXJuIG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKHQpe3JldHVybiBVKHQsYWkpLHR9O3ZhciBhaT10Lmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gb2kodCxlLHIpe3JldHVybihyWzBdLWVbMF0pKih0WzFdLWVbMV0pPChyWzFdLWVbMV0pKih0WzBdLWVbMF0pfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPXRbMF0sYT1yWzBdLG89ZVswXS1pLHM9blswXS1hLGw9dFsxXSxjPXJbMV0sdT1lWzFdLWwsZj1uWzFdLWMsaD0ocyoobC1jKS1mKihpLWEpKS8oZipvLXMqdSk7cmV0dXJuW2kraCpvLGwraCp1XX1mdW5jdGlvbiBsaSh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4hKGVbMF0tclswXXx8ZVsxXS1yWzFdKX1haS5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9LTEscj10aGlzLmxlbmd0aCxuPXRoaXNbci0xXSxpPTA7KytlPHI7KXQ9bixuPXRoaXNbZV0saSs9dFsxXSpuWzBdLXRbMF0qblsxXTtyZXR1cm4uNSppfSxhaS5jZW50cm9pZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10aGlzLmxlbmd0aCxhPTAsbz0wLHM9dGhpc1tpLTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwodD0tMS8oNip0aGlzLmFyZWEoKSkpOysrbjxpOyllPXMscz10aGlzW25dLHI9ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpyLG8rPShlWzFdK3NbMV0pKnI7cmV0dXJuW2EqdCxvKnRdfSxhaS5jbGlwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scz1saSh0KSxsPS0xLGM9dGhpcy5sZW5ndGgtbGkodGhpcyksdT10aGlzW2MtMV07KytsPGM7KXtmb3IoZT10LnNsaWNlKCksdC5sZW5ndGg9MCxpPXRoaXNbbF0sYT1lWyhuPWUubGVuZ3RoLXMpLTFdLHI9LTE7KytyPG47KW9pKG89ZVtyXSx1LGkpPyhvaShhLHUsaSl8fHQucHVzaChzaShhLG8sdSxpKSksdC5wdXNoKG8pKTpvaShhLHUsaSkmJnQucHVzaChzaShhLG8sdSxpKSksYT1vO3MmJnQucHVzaCh0WzBdKSx1PWl9cmV0dXJuIHR9O3ZhciBjaSx1aSxmaSxoaSxwaSxkaT1bXSxnaT1bXTtmdW5jdGlvbiB2aSgpe0RpKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBtaSh0KXt2YXIgZT1kaS5wb3AoKXx8bmV3IHZpO3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIHlpKHQpe1NpKHQpLGZpLnJlbW92ZSh0KSxkaS5wdXNoKHQpLERpKHQpfWZ1bmN0aW9uIHhpKHQpe3ZhciBlPXQuY2lyY2xlLHI9ZS54LG49ZS5jeSxpPXt4OnIseTpufSxhPXQuUCxvPXQuTixzPVt0XTt5aSh0KTtmb3IodmFyIGw9YTtsLmNpcmNsZSYmeShyLWwuY2lyY2xlLngpPGt0JiZ5KG4tbC5jaXJjbGUuY3kpPGt0OylhPWwuUCxzLnVuc2hpZnQobCkseWkobCksbD1hO3MudW5zaGlmdChsKSxTaShsKTtmb3IodmFyIGM9bztjLmNpcmNsZSYmeShyLWMuY2lyY2xlLngpPGt0JiZ5KG4tYy5jaXJjbGUuY3kpPGt0OylvPWMuTixzLnB1c2goYykseWkoYyksYz1vO3MucHVzaChjKSxTaShjKTt2YXIgdSxmPXMubGVuZ3RoO2Zvcih1PTE7dTxmOysrdSljPXNbdV0sbD1zW3UtMV0semkoYy5lZGdlLGwuc2l0ZSxjLnNpdGUsaSk7bD1zWzBdLChjPXNbZi0xXSkuZWRnZT1MaShsLnNpdGUsYy5zaXRlLG51bGwsaSksTWkobCksTWkoYyl9ZnVuY3Rpb24gYmkodCl7Zm9yKHZhciBlLHIsbixpLGE9dC54LG89dC55LHM9ZmkuXztzOylpZigobj1faShzLG8pLWEpPmt0KXM9cy5MO2Vsc2V7aWYoISgoaT1hLXdpKHMsbykpPmt0KSl7bj4ta3Q/KGU9cy5QLHI9cyk6aT4ta3Q/KGU9cyxyPXMuTik6ZT1yPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfXZhciBsPW1pKHQpO2lmKGZpLmluc2VydChlLGwpLGV8fHIpe2lmKGU9PT1yKXJldHVybiBTaShlKSxyPW1pKGUuc2l0ZSksZmkuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1MaShlLnNpdGUsbC5zaXRlKSxNaShlKSx2b2lkIE1pKHIpO2lmKHIpe1NpKGUpLFNpKHIpO3ZhciBjPWUuc2l0ZSx1PWMueCxmPWMueSxoPXQueC11LHA9dC55LWYsZD1yLnNpdGUsZz1kLngtdSx2PWQueS1mLG09MiooaCp2LXAqZykseT1oKmgrcCpwLHg9ZypnK3YqdixiPXt4Oih2KnktcCp4KS9tK3UseTooaCp4LWcqeSkvbStmfTt6aShyLmVkZ2UsYyxkLGIpLGwuZWRnZT1MaShjLHQsbnVsbCxiKSxyLmVkZ2U9TGkodCxkLG51bGwsYiksTWkoZSksTWkocil9ZWxzZSBsLmVkZ2U9TGkoZS5zaXRlLGwuc2l0ZSl9fWZ1bmN0aW9uIF9pKHQsZSl7dmFyIHI9dC5zaXRlLG49ci54LGk9ci55LGE9aS1lO2lmKCFhKXJldHVybiBuO3ZhciBvPXQuUDtpZighbylyZXR1cm4tMS8wO3ZhciBzPShyPW8uc2l0ZSkueCxsPXIueSxjPWwtZTtpZighYylyZXR1cm4gczt2YXIgdT1zLW4sZj0xL2EtMS9jLGg9dS9jO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZioodSp1LygtMipjKS1sK2MvMitpLWEvMikpKS9mK246KG4rcykvMn1mdW5jdGlvbiB3aSh0LGUpe3ZhciByPXQuTjtpZihyKXJldHVybiBfaShyLGUpO3ZhciBuPXQuc2l0ZTtyZXR1cm4gbi55PT09ZT9uLng6MS8wfWZ1bmN0aW9uIGtpKHQpe3RoaXMuc2l0ZT10LHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gVGkodCxlKXtyZXR1cm4gZS5hbmdsZS10LmFuZ2xlfWZ1bmN0aW9uIEFpKCl7RGkodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE1pKHQpe3ZhciBlPXQuUCxyPXQuTjtpZihlJiZyKXt2YXIgbj1lLnNpdGUsaT10LnNpdGUsYT1yLnNpdGU7aWYobiE9PWEpe3ZhciBvPWkueCxzPWkueSxsPW4ueC1vLGM9bi55LXMsdT1hLngtbyxmPTIqKGwqKHY9YS55LXMpLWMqdSk7aWYoIShmPj0tVHQpKXt2YXIgaD1sKmwrYypjLHA9dSp1K3YqdixkPSh2KmgtYypwKS9mLGc9KGwqcC11KmgpL2Ysdj1nK3MsbT1naS5wb3AoKXx8bmV3IEFpO20uYXJjPXQsbS5zaXRlPWksbS54PWQrbyxtLnk9ditNYXRoLnNxcnQoZCpkK2cqZyksbS5jeT12LHQuY2lyY2xlPW07Zm9yKHZhciB5PW51bGwseD1waS5fO3g7KWlmKG0ueTx4Lnl8fG0ueT09PXgueSYmbS54PD14Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9eC5SfXBpLmluc2VydCh5LG0pLHl8fChoaT1tKX19fX1mdW5jdGlvbiBTaSh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoaGk9ZS5OKSxwaS5yZW1vdmUoZSksZ2kucHVzaChlKSxEaShlKSx0LmNpcmNsZT1udWxsKX1mdW5jdGlvbiBFaSh0LGUpe3ZhciByPXQuYjtpZihyKXJldHVybiEwO3ZhciBuLGksYT10LmEsbz1lWzBdWzBdLHM9ZVsxXVswXSxsPWVbMF1bMV0sYz1lWzFdWzFdLHU9dC5sLGY9dC5yLGg9dS54LHA9dS55LGQ9Zi54LGc9Zi55LHY9KGgrZCkvMixtPShwK2cpLzI7aWYoZz09PXApe2lmKHY8b3x8dj49cylyZXR1cm47aWYoaD5kKXtpZihhKXtpZihhLnk+PWMpcmV0dXJufWVsc2UgYT17eDp2LHk6bH07cj17eDp2LHk6Y319ZWxzZXtpZihhKXtpZihhLnk8bClyZXR1cm59ZWxzZSBhPXt4OnYseTpjfTtyPXt4OnYseTpsfX19ZWxzZSBpZihpPW0tKG49KGgtZCkvKGctcCkpKnYsbjwtMXx8bj4xKWlmKGg+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6KGwtaSkvbix5Omx9O3I9e3g6KGMtaSkvbix5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDooYy1pKS9uLHk6Y307cj17eDoobC1pKS9uLHk6bH19ZWxzZSBpZihwPGcpe2lmKGEpe2lmKGEueD49cylyZXR1cm59ZWxzZSBhPXt4Om8seTpuKm8raX07cj17eDpzLHk6bipzK2l9fWVsc2V7aWYoYSl7aWYoYS54PG8pcmV0dXJufWVsc2UgYT17eDpzLHk6bipzK2l9O3I9e3g6byx5Om4qbytpfX1yZXR1cm4gdC5hPWEsdC5iPXIsITB9ZnVuY3Rpb24gQ2kodCxlKXt0aGlzLmw9dCx0aGlzLnI9ZSx0aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gTGkodCxlLHIsbil7dmFyIGk9bmV3IENpKHQsZSk7cmV0dXJuIGNpLnB1c2goaSksciYmemkoaSx0LGUsciksbiYmemkoaSxlLHQsbiksdWlbdC5pXS5lZGdlcy5wdXNoKG5ldyBPaShpLHQsZSkpLHVpW2UuaV0uZWRnZXMucHVzaChuZXcgT2koaSxlLHQpKSxpfWZ1bmN0aW9uIHppKHQsZSxyLG4pe3QuYXx8dC5iP3QubD09PXI/dC5iPW46dC5hPW46KHQuYT1uLHQubD1lLHQucj1yKX1mdW5jdGlvbiBPaSh0LGUscil7dmFyIG49dC5hLGk9dC5iO3RoaXMuZWRnZT10LHRoaXMuc2l0ZT1lLHRoaXMuYW5nbGU9cj9NYXRoLmF0YW4yKHIueS1lLnksci54LWUueCk6dC5sPT09ZT9NYXRoLmF0YW4yKGkueC1uLngsbi55LWkueSk6TWF0aC5hdGFuMihuLngtaS54LGkueS1uLnkpfWZ1bmN0aW9uIElpKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gRGkodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBQaSh0LGUpe3ZhciByPWUsbj1lLlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gUmkodCxlKXt2YXIgcj1lLG49ZS5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIEZpKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1mdW5jdGlvbiBCaSh0LGUpe3ZhciByLG4saSxhPXQuc29ydChOaSkucG9wKCk7Zm9yKGNpPVtdLHVpPW5ldyBBcnJheSh0Lmxlbmd0aCksZmk9bmV3IElpLHBpPW5ldyBJaTs7KWlmKGk9aGksYSYmKCFpfHxhLnk8aS55fHxhLnk9PT1pLnkmJmEueDxpLngpKWEueD09PXImJmEueT09PW58fCh1aVthLmldPW5ldyBraShhKSxiaShhKSxyPWEueCxuPWEueSksYT10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7eGkoaS5hcmMpfWUmJihmdW5jdGlvbih0KXtmb3IodmFyIGUscj1jaSxuPWVuKHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0pLGk9ci5sZW5ndGg7aS0tOykoIUVpKGU9cltpXSx0KXx8IW4oZSl8fHkoZS5hLngtZS5iLngpPGt0JiZ5KGUuYS55LWUuYi55KTxrdCkmJihlLmE9ZS5iPW51bGwsci5zcGxpY2UoaSwxKSl9KGUpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmPXRbMF1bMF0saD10WzFdWzBdLHA9dFswXVsxXSxkPXRbMV1bMV0sZz11aSx2PWcubGVuZ3RoO3YtLTspaWYoKGE9Z1t2XSkmJmEucHJlcGFyZSgpKWZvcihsPShzPWEuZWRnZXMpLmxlbmd0aCxvPTA7bzxsOyluPSh1PXNbb10uZW5kKCkpLngsaT11LnksZT0oYz1zWysrbyVsXS5zdGFydCgpKS54LHI9Yy55LCh5KG4tZSk+a3R8fHkoaS1yKT5rdCkmJihzLnNwbGljZShvLDAsbmV3IE9pKChtPWEuc2l0ZSx4PXUsYj15KG4tZik8a3QmJmQtaT5rdD97eDpmLHk6eShlLWYpPGt0P3I6ZH06eShpLWQpPGt0JiZoLW4+a3Q/e3g6eShyLWQpPGt0P2U6aCx5OmR9Onkobi1oKTxrdCYmaS1wPmt0P3t4OmgseTp5KGUtaCk8a3Q/cjpwfTp5KGktcCk8a3QmJm4tZj5rdD97eDp5KHItcCk8a3Q/ZTpmLHk6cH06bnVsbCxfPXZvaWQgMCxfPW5ldyBDaShtLG51bGwpLF8uYT14LF8uYj1iLGNpLnB1c2goXyksXyksYS5zaXRlLG51bGwpKSwrK2wpO3ZhciBtLHgsYixffShlKSk7dmFyIG89e2NlbGxzOnVpLGVkZ2VzOmNpfTtyZXR1cm4gZmk9cGk9Y2k9dWk9bnVsbCxvfWZ1bmN0aW9uIE5pKHQsZSl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9a2kucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLmVkZ2VzLHI9ZS5sZW5ndGg7ci0tOykodD1lW3JdLmVkZ2UpLmImJnQuYXx8ZS5zcGxpY2UociwxKTtyZXR1cm4gZS5zb3J0KFRpKSxlLmxlbmd0aH0sT2kucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYTp0aGlzLmVkZ2UuYn0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5iOnRoaXMuZWRnZS5hfX0sSWkucHJvdG90eXBlPXtpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7cj10fWVsc2UgdGhpcy5fPyh0PUZpKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLHI9dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxyPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPXIsZS5DPSEwLHQ9ZTtyJiZyLkM7KXI9PT0obj1yLlUpLkw/KGk9bi5SKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5SJiYoUGkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsUmkodGhpcyxuKSk6KGk9bi5MKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5MJiYoUmkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsUGkodGhpcyxuKSkscj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLHIsbixpPXQuVSxhPXQuTCxvPXQuUjtpZihyPWE/bz9GaShvKTphOm8saT9pLkw9PT10P2kuTD1yOmkuUj1yOnRoaXMuXz1yLGEmJm8/KG49ci5DLHIuQz10LkMsci5MPWEsYS5VPXIsciE9PW8/KGk9ci5VLHIuVT10LlUsdD1yLlIsaS5MPXQsci5SPW8sby5VPXIpOihyLlU9aSxpPXIsdD1yLlIpKToobj10LkMsdD1yKSx0JiYodC5VPWkpLCFuKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsUGkodGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxSaSh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxQaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsUmkodGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxQaSh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxSaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX0sdC5nZW9tLnZvcm9ub2k9ZnVuY3Rpb24odCl7dmFyIGU9ZWkscj1yaSxuPWUsaT1yLGE9amk7aWYodClyZXR1cm4gbyh0KTtmdW5jdGlvbiBvKHQpe3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj1hWzBdWzBdLG49YVswXVsxXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBCaShzKHQpLGEpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oYSxzKXt2YXIgbD1hLmVkZ2VzLGM9YS5zaXRlOyhlW3NdPWwubGVuZ3RoP2wubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhcnQoKTtyZXR1cm5bZS54LGUueV19KTpjLng+PXImJmMueDw9aSYmYy55Pj1uJiZjLnk8PW8/W1tyLG9dLFtpLG9dLFtpLG5dLFtyLG5dXTpbXSkucG9pbnQ9dFtzXX0pLGV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm57eDpNYXRoLnJvdW5kKG4odCxlKS9rdCkqa3QseTpNYXRoLnJvdW5kKGkodCxlKS9rdCkqa3QsaTplfX0pfXJldHVybiBvLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBCaShzKHQpKS5lZGdlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubCYmdC5yfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dFtlLmwuaV0sdGFyZ2V0OnRbZS5yLmldfX0pfSxvLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gQmkocyh0KSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihyLG4pe2Zvcih2YXIgaSxhLG8scyxsPXIuc2l0ZSxjPXIuZWRnZXMuc29ydChUaSksdT0tMSxmPWMubGVuZ3RoLGg9Y1tmLTFdLmVkZ2UscD1oLmw9PT1sP2gucjpoLmw7Kyt1PGY7KWgsaT1wLHA9KGg9Y1t1XS5lZGdlKS5sPT09bD9oLnI6aC5sLG48aS5pJiZuPHAuaSYmKG89aSxzPXAsKChhPWwpLngtcy54KSooby55LWEueSktKGEueC1vLngpKihzLnktYS55KTwwKSYmZS5wdXNoKFt0W25dLHRbaS5pXSx0W3AuaV1dKX0pLGV9LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj12ZShlPXQpLG8pOmV9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT12ZShyPXQpLG8pOnJ9LG8uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P2ppOnQsbyk6YT09PWppP251bGw6YX0sby5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28uY2xpcEV4dGVudCh0JiZbWzAsMF0sdF0pOmE9PT1qaT9udWxsOmEmJmFbMV19LG99O3ZhciBqaT1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTtmdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIFVpKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gcWkoZSxyKXtlPXQucmdiKGUpLHI9dC5yZ2Iocik7dmFyIG49ZS5yLGk9ZS5nLGE9ZS5iLG89ci5yLW4scz1yLmctaSxsPXIuYi1hO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iIyIrY2UoTWF0aC5yb3VuZChuK28qdCkpK2NlKE1hdGgucm91bmQoaStzKnQpKStjZShNYXRoLnJvdW5kKGErbCp0KSl9fWZ1bmN0aW9uIEhpKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIHQpciBpbiBlP25bcl09WmkodFtyXSxlW3JdKTppW3JdPXRbcl07Zm9yKHIgaW4gZSlyIGluIHR8fChpW3JdPWVbcl0pO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19ZnVuY3Rpb24gR2kodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiB0KigxLXIpK2Uqcn19ZnVuY3Rpb24gWWkodCxlKXt2YXIgcixuLGksYT1XaS5sYXN0SW5kZXg9WGkubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhyPVdpLmV4ZWModCkpJiYobj1YaS5leGVjKGUpKTspKGk9bi5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKHI9clswXSk9PT0obj1uWzBdKT9zW29dP3Nbb10rPW46c1srK29dPW46KHNbKytvXT1udWxsLGwucHVzaCh7aTpvLHg6R2kocixuKX0pKSxhPVhpLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT8oZT1sWzBdLngsZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9KTpmdW5jdGlvbigpe3JldHVybiBlfTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbigiIil9KX10Lmdlb20uZGVsYXVuYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKGUpfSx0Lmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvPWVpLHM9cmk7aWYoYT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBvPVZpLHM9VWksMz09PWEmJihpPXIsbj1lLHI9ZT0wKSxsKHQpO2Z1bmN0aW9uIGwodCl7dmFyIGwsYyx1LGYsaCxwLGQsZyx2LG09dmUobykseD12ZShzKTtpZihudWxsIT1lKXA9ZSxkPXIsZz1uLHY9aTtlbHNlIGlmKGc9dj0tKHA9ZD0xLzApLGM9W10sdT1bXSxoPXQubGVuZ3RoLGEpZm9yKGY9MDtmPGg7KytmKShsPXRbZl0pLng8cCYmKHA9bC54KSxsLnk8ZCYmKGQ9bC55KSxsLng+ZyYmKGc9bC54KSxsLnk+diYmKHY9bC55KSxjLnB1c2gobC54KSx1LnB1c2gobC55KTtlbHNlIGZvcihmPTA7ZjxoOysrZil7dmFyIGI9K20obD10W2ZdLGYpLF89K3gobCxmKTtiPHAmJihwPWIpLF88ZCYmKGQ9XyksYj5nJiYoZz1iKSxfPnYmJih2PV8pLGMucHVzaChiKSx1LnB1c2goXyl9dmFyIHc9Zy1wLGs9di1kO2Z1bmN0aW9uIFQodCxlLHIsbixpLGEsbyxzKXtpZighaXNOYU4ocikmJiFpc05hTihuKSlpZih0LmxlYWYpe3ZhciBsPXQueCxjPXQueTtpZihudWxsIT1sKWlmKHkobC1yKSt5KGMtbik8LjAxKUEodCxlLHIsbixpLGEsbyxzKTtlbHNle3ZhciB1PXQucG9pbnQ7dC54PXQueT10LnBvaW50PW51bGwsQSh0LHUsbCxjLGksYSxvLHMpLEEodCxlLHIsbixpLGEsbyxzKX1lbHNlIHQueD1yLHQueT1uLHQucG9pbnQ9ZX1lbHNlIEEodCxlLHIsbixpLGEsbyxzKX1mdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9LjUqKGkrbyksYz0uNSooYStzKSx1PXI+PWwsZj1uPj1jLGg9Zjw8MXx1O3QubGVhZj0hMSx1P2k9bDpvPWwsZj9hPWM6cz1jLFQodD10Lm5vZGVzW2hdfHwodC5ub2Rlc1toXT17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGwsYWRkOmZ1bmN0aW9uKHQpe1QoTSx0LCttKHQsKytmKSwreCh0LGYpLHAsZCxnLHYpfX0pLGUscixuLGksYSxvLHMpfXc+az92PWQrdzpnPXArazt2YXIgTT17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGwsYWRkOmZ1bmN0aW9uKHQpe1QoTSx0LCttKHQsKytmKSwreCh0LGYpLHAsZCxnLHYpfX07aWYoTS52aXNpdD1mdW5jdGlvbih0KXshZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7aWYoIWUocixuLGksYSxvKSl7dmFyIHM9LjUqKG4rYSksbD0uNSooaStvKSxjPXIubm9kZXM7Y1swXSYmdChlLGNbMF0sbixpLHMsbCksY1sxXSYmdChlLGNbMV0scyxpLGEsbCksY1syXSYmdChlLGNbMl0sbixsLHMsbyksY1szXSYmdChlLGNbM10scyxsLGEsbyl9fSh0LE0scCxkLGcsdil9LE0uZmluZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIHQoYyx1LGYsaCxwKXtpZighKHU+YXx8Zj5vfHxoPG58fHA8aSkpe2lmKGQ9Yy5wb2ludCl7dmFyIGQsZz1lLWMueCx2PXItYy55LG09ZypnK3YqdjtpZihtPGwpe3ZhciB5PU1hdGguc3FydChsPW0pO249ZS15LGk9ci15LGE9ZSt5LG89cit5LHM9ZH19Zm9yKHZhciB4PWMubm9kZXMsYj0uNSoodStoKSxfPS41KihmK3ApLHc9KHI+PV8pPDwxfGU+PWIsaz13KzQ7dzxrOysrdylpZihjPXhbMyZ3XSlzd2l0Y2goMyZ3KXtjYXNlIDA6dChjLHUsZixiLF8pO2JyZWFrO2Nhc2UgMTp0KGMsYixmLGgsXyk7YnJlYWs7Y2FzZSAyOnQoYyx1LF8sYixwKTticmVhaztjYXNlIDM6dChjLGIsXyxoLHApfX19KHQsbixpLGEsbyksc30oTSx0WzBdLHRbMV0scCxkLGcsdil9LGY9LTEsbnVsbD09ZSl7Zm9yKDsrK2Y8aDspVChNLHRbZl0sY1tmXSx1W2ZdLHAsZCxnLHYpOy0tZn1lbHNlIHQuZm9yRWFjaChNLmFkZCk7cmV0dXJuIGM9dT10PWw9bnVsbCxNfXJldHVybiBsLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxsKTpvfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxsKTpzfSxsLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9lPXI9bj1pPW51bGw6KGU9K3RbMF1bMF0scj0rdFswXVsxXSxuPSt0WzFdWzBdLGk9K3RbMV1bMV0pLGwpOm51bGw9PWU/bnVsbDpbW2Uscl0sW24saV1dfSxsLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPXI9MCxuPSt0WzBdLGk9K3RbMV0pLGwpOm51bGw9PWU/bnVsbDpbbi1lLGktcl19LGx9LHQuaW50ZXJwb2xhdGVSZ2I9cWksdC5pbnRlcnBvbGF0ZU9iamVjdD1IaSx0LmludGVycG9sYXRlTnVtYmVyPUdpLHQuaW50ZXJwb2xhdGVTdHJpbmc9WWk7dmFyIFdpPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxYaT1uZXcgUmVnRXhwKFdpLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFppKGUscil7Zm9yKHZhciBuLGk9dC5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLWk+PTAmJiEobj10LmludGVycG9sYXRvcnNbaV0oZSxyKSk7KTtyZXR1cm4gbn1mdW5jdGlvbiAkaSh0LGUpe3ZhciByLG49W10saT1bXSxhPXQubGVuZ3RoLG89ZS5sZW5ndGgscz1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk7Zm9yKHI9MDtyPHM7KytyKW4ucHVzaChaaSh0W3JdLGVbcl0pKTtmb3IoO3I8YTsrK3IpaVtyXT10W3JdO2Zvcig7cjxvOysrcilpW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxzOysrcilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fXQuaW50ZXJwb2xhdGU9WmksdC5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbih0LGUpe3ZhciByPXR5cGVvZiBlO3JldHVybigic3RyaW5nIj09PXI/Z2UuaGFzKGUudG9Mb3dlckNhc2UoKSl8fC9eKCN8cmdiXCh8aHNsXCgpL2kudGVzdChlKT9xaTpZaTplIGluc3RhbmNlb2YgVnQ/cWk6QXJyYXkuaXNBcnJheShlKT8kaToib2JqZWN0Ij09PXImJmlzTmFOKGUpP0hpOkdpKSh0LGUpfV0sdC5pbnRlcnBvbGF0ZUFycmF5PSRpO3ZhciBKaT1mdW5jdGlvbigpe3JldHVybiB6fSxLaT10Lm1hcCh7bGluZWFyOkppLHBvbHk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhlLHQpfX0scXVhZDpmdW5jdGlvbigpe3JldHVybiByYX0sY3ViaWM6ZnVuY3Rpb24oKXtyZXR1cm4gbmF9LHNpbjpmdW5jdGlvbigpe3JldHVybiBhYX0sZXhwOmZ1bmN0aW9uKCl7cmV0dXJuIG9hfSxjaXJjbGU6ZnVuY3Rpb24oKXtyZXR1cm4gc2F9LGVsYXN0aWM6ZnVuY3Rpb24odCxlKXt2YXIgcjthcmd1bWVudHMubGVuZ3RoPDImJihlPS40NSk7YXJndW1lbnRzLmxlbmd0aD9yPWUvTXQqTWF0aC5hc2luKDEvdCk6KHQ9MSxyPWUvNCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiAxK3QqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqTXQvZSl9fSxiYWNrOmZ1bmN0aW9uKHQpe3R8fCh0PTEuNzAxNTgpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZSplKigodCsxKSplLXQpfX0sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIGxhfX0pLFFpPXQubWFwKHtpbjp6LG91dDp0YSwiaW4tb3V0IjplYSwib3V0LWluIjpmdW5jdGlvbih0KXtyZXR1cm4gZWEodGEodCkpfX0pO2Z1bmN0aW9uIHRhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMS10KDEtZSl9fWZ1bmN0aW9uIGVhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4uNSooZTwuNT90KDIqZSk6Mi10KDItMiplKSl9fWZ1bmN0aW9uIHJhKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gbmEodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIGlhKHQpe2lmKHQ8PTApcmV0dXJuIDA7aWYodD49MSlyZXR1cm4gMTt2YXIgZT10KnQscj1lKnQ7cmV0dXJuIDQqKHQ8LjU/cjozKih0LWUpK3ItLjc1KX1mdW5jdGlvbiBhYSh0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KkV0KX1mdW5jdGlvbiBvYSh0KXtyZXR1cm4gTWF0aC5wb3coMiwxMCoodC0xKSl9ZnVuY3Rpb24gc2EodCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX1mdW5jdGlvbiBsYSh0KXtyZXR1cm4gdDwxLzIuNzU/Ny41NjI1KnQqdDp0PDIvMi43NT83LjU2MjUqKHQtPTEuNS8yLjc1KSp0Ky43NTp0PDIuNS8yLjc1PzcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1OjcuNTYyNSoodC09Mi42MjUvMi43NSkqdCsuOTg0Mzc1fWZ1bmN0aW9uIGNhKHQsZSl7cmV0dXJuIGUtPXQsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCtlKnIpfX1mdW5jdGlvbiB1YSh0KXt2YXIgZSxyLG4saT1bdC5hLHQuYl0sYT1bdC5jLHQuZF0sbz1oYShpKSxzPWZhKGksYSksbD1oYSgoKGU9YSlbMF0rPShuPS1zKSoocj1pKVswXSxlWzFdKz1uKnJbMV0sZSkpfHwwO2lbMF0qYVsxXTxhWzBdKmlbMV0mJihpWzBdKj0tMSxpWzFdKj0tMSxvKj0tMSxzKj0tMSksdGhpcy5yb3RhdGU9KG8/TWF0aC5hdGFuMihpWzFdLGlbMF0pOk1hdGguYXRhbjIoLWFbMF0sYVsxXSkpKkx0LHRoaXMudHJhbnNsYXRlPVt0LmUsdC5mXSx0aGlzLnNjYWxlPVtvLGxdLHRoaXMuc2tldz1sP01hdGguYXRhbjIocyxsKSpMdDowfWZ1bmN0aW9uIGZhKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV19ZnVuY3Rpb24gaGEodCl7dmFyIGU9TWF0aC5zcXJ0KGZhKHQsdCkpO3JldHVybiBlJiYodFswXS89ZSx0WzFdLz1lKSxlfXQuZWFzZT1mdW5jdGlvbih0KXt2YXIgZSxuPXQuaW5kZXhPZigiLSIpLGk9bj49MD90LnNsaWNlKDAsbik6dCxhPW4+PTA/dC5zbGljZShuKzEpOiJpbiI7cmV0dXJuIGk9S2kuZ2V0KGkpfHxKaSxhPVFpLmdldChhKXx8eixlPWEoaS5hcHBseShudWxsLHIuY2FsbChhcmd1bWVudHMsMSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD8wOnQ+PTE/MTplKHQpfX0sdC5pbnRlcnBvbGF0ZUhjbD1mdW5jdGlvbihlLHIpe2U9dC5oY2woZSkscj10LmhjbChyKTt2YXIgbj1lLmgsaT1lLmMsYT1lLmwsbz1yLmgtbixzPXIuYy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLmM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFd0KG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVIc2w9ZnVuY3Rpb24oZSxyKXtlPXQuaHNsKGUpLHI9dC5oc2wocik7dmFyIG49ZS5oLGk9ZS5zLGE9ZS5sLG89ci5oLW4scz1yLnMtaSxsPXIubC1hO2lzTmFOKHMpJiYocz0wLGk9aXNOYU4oaSk/ci5zOmkpO2lzTmFOKG8pPyhvPTAsbj1pc05hTihuKT9yLmg6bik6bz4xODA/by09MzYwOm88LTE4MCYmKG8rPTM2MCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBIdChuK28qdCxpK3MqdCxhK2wqdCkrIiJ9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKGUscil7ZT10LmxhYihlKSxyPXQubGFiKHIpO3ZhciBuPWUubCxpPWUuYSxhPWUuYixvPXIubC1uLHM9ci5hLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHRlKG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVSb3VuZD1jYSx0LnRyYW5zZm9ybT1mdW5jdGlvbihlKXt2YXIgcj1pLmNyZWF0ZUVsZW1lbnROUyh0Lm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4odC50cmFuc2Zvcm09ZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7ci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCk7dmFyIGU9ci50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpfXJldHVybiBuZXcgdWEoZT9lLm1hdHJpeDpwYSl9KShlKX0sdWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3RoaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBwYT17YToxLGI6MCxjOjAsZDoxLGU6MCxmOjB9O2Z1bmN0aW9uIGRhKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIsIjoiIn1mdW5jdGlvbiBnYShlLHIpe3ZhciBuPVtdLGk9W107cmV0dXJuIGU9dC50cmFuc2Zvcm0oZSkscj10LnRyYW5zZm9ybShyKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaCgidHJhbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO24ucHVzaCh7aTppLTQseDpHaSh0WzBdLGVbMF0pfSx7aTppLTIseDpHaSh0WzFdLGVbMV0pfSl9ZWxzZShlWzBdfHxlWzFdKSYmci5wdXNoKCJ0cmFuc2xhdGUoIitlKyIpIil9KGUudHJhbnNsYXRlLHIudHJhbnNsYXRlLG4saSksZnVuY3Rpb24odCxlLHIsbil7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG4ucHVzaCh7aTpyLnB1c2goZGEocikrInJvdGF0ZSgiLG51bGwsIikiKS0yLHg6R2kodCxlKX0pKTplJiZyLnB1c2goZGEocikrInJvdGF0ZSgiK2UrIikiKX0oZS5yb3RhdGUsci5yb3RhdGUsbixpKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT9uLnB1c2goe2k6ci5wdXNoKGRhKHIpKyJza2V3WCgiLG51bGwsIikiKS0yLHg6R2kodCxlKX0pOmUmJnIucHVzaChkYShyKSsic2tld1goIitlKyIpIil9KGUuc2tldyxyLnNrZXcsbixpKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaChkYShyKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OkdpKHRbMF0sZVswXSl9LHtpOmktMix4OkdpKHRbMV0sZVsxXSl9KX1lbHNlIDE9PT1lWzBdJiYxPT09ZVsxXXx8ci5wdXNoKGRhKHIpKyJzY2FsZSgiK2UrIikiKX0oZS5zY2FsZSxyLnNjYWxlLG4saSksZT1yPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsYT1pLmxlbmd0aDsrK3I8YTspblsoZT1pW3JdKS5pXT1lLngodCk7cmV0dXJuIG4uam9pbigiIil9fWZ1bmN0aW9uIHZhKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX19ZnVuY3Rpb24gbWEodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChyLXQpL2UpKX19ZnVuY3Rpb24geWEodCl7Zm9yKHZhciBlPXQuc291cmNlLHI9dC50YXJnZXQsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXhhKHQpLG49eGEoZSksaT1yLnBvcCgpLGE9bi5wb3AoKSxvPW51bGw7Zm9yKDtpPT09YTspbz1pLGk9ci5wb3AoKSxhPW4ucG9wKCk7cmV0dXJuIG99KGUsciksaT1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsaS5wdXNoKGUpO2Zvcih2YXIgYT1pLmxlbmd0aDtyIT09bjspaS5zcGxpY2UoYSwwLHIpLHI9ci5wYXJlbnQ7cmV0dXJuIGl9ZnVuY3Rpb24geGEodCl7Zm9yKHZhciBlPVtdLHI9dC5wYXJlbnQ7bnVsbCE9cjspZS5wdXNoKHQpLHQ9cixyPXIucGFyZW50O3JldHVybiBlLnB1c2godCksZX1mdW5jdGlvbiBiYSh0KXt0LmZpeGVkfD0yfWZ1bmN0aW9uIF9hKHQpe3QuZml4ZWQmPS03fWZ1bmN0aW9uIHdhKHQpe3QuZml4ZWR8PTQsdC5weD10LngsdC5weT10Lnl9ZnVuY3Rpb24ga2EodCl7dC5maXhlZCY9LTV9dC5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1nYSx0LmxheW91dD17fSx0LmxheW91dC5idW5kbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9LTEsbj10Lmxlbmd0aDsrK3I8bjspZS5wdXNoKHlhKHRbcl0pKTtyZXR1cm4gZX19LHQubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbD17fSxjPTA7ZnVuY3Rpb24gdSgpe3ZhciBsLHUsaCxwLGQsZz17fSx2PVtdLG09dC5yYW5nZShpKSx5PVtdO2ZvcihlPVtdLHI9W10sbD0wLHA9LTE7KytwPGk7KXtmb3IodT0wLGQ9LTE7KytkPGk7KXUrPW5bcF1bZF07di5wdXNoKHUpLHkucHVzaCh0LnJhbmdlKGkpKSxsKz11fWZvcihhJiZtLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh2W3RdLHZbZV0pfSksbyYmeS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIG8obltlXVt0XSxuW2VdW3JdKX0pfSksbD0oTXQtYyppKS9sLHU9MCxwPS0xOysrcDxpOyl7Zm9yKGg9dSxkPS0xOysrZDxpOyl7dmFyIHg9bVtwXSxiPXlbeF1bZF0sXz1uW3hdW2JdLHc9dSxrPXUrPV8qbDtnW3grIi0iK2JdPXtpbmRleDp4LHN1YmluZGV4OmIsc3RhcnRBbmdsZTp3LGVuZEFuZ2xlOmssdmFsdWU6X319clt4XT17aW5kZXg6eCxzdGFydEFuZ2xlOmgsZW5kQW5nbGU6dSx2YWx1ZTp2W3hdfSx1Kz1jfWZvcihwPS0xOysrcDxpOylmb3IoZD1wLTE7KytkPGk7KXt2YXIgVD1nW3ArIi0iK2RdLEE9Z1tkKyItIitwXTsoVC52YWx1ZXx8QS52YWx1ZSkmJmUucHVzaChULnZhbHVlPEEudmFsdWU/e3NvdXJjZTpBLHRhcmdldDpUfTp7c291cmNlOlQsdGFyZ2V0OkF9KX1zJiZmKCl9ZnVuY3Rpb24gZigpe2Uuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBzKCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMiwoZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUpLzIpfSl9cmV0dXJuIGwubWF0cml4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPShuPXQpJiZuLmxlbmd0aCxlPXI9bnVsbCxsKTpufSxsLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxlPXI9bnVsbCxsKTpjfSxsLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxlPXI9bnVsbCxsKTphfSxsLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxlPW51bGwsbCk6b30sbC5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZSYmZigpLGwpOnN9LGwuY2hvcmRzPWZ1bmN0aW9uKCl7cmV0dXJuIGV8fHUoKSxlfSxsLmdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiByfHx1KCkscn0sbH0sdC5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scz17fSxsPXQuZGlzcGF0Y2goInN0YXJ0IiwidGljayIsImVuZCIpLGM9WzEsMV0sdT0uOSxmPVRhLGg9QWEscD0tMzAsZD1NYSxnPS4xLHY9LjY0LG09W10seT1bXTtmdW5jdGlvbiB4KHQpe3JldHVybiBmdW5jdGlvbihlLHIsbixpKXtpZihlLnBvaW50IT09dCl7dmFyIGE9ZS5jeC10Lngsbz1lLmN5LXQueSxzPWktcixsPWEqYStvKm87aWYocypzL3Y8bCl7aWYobDxkKXt2YXIgYz1lLmNoYXJnZS9sO3QucHgtPWEqYyx0LnB5LT1vKmN9cmV0dXJuITB9aWYoZS5wb2ludCYmbCYmbDxkKXtjPWUucG9pbnRDaGFyZ2UvbDt0LnB4LT1hKmMsdC5weS09bypjfX1yZXR1cm4hZS5jaGFyZ2V9fWZ1bmN0aW9uIGIoZSl7ZS5weD10LmV2ZW50LngsZS5weT10LmV2ZW50Lnkscy5yZXN1bWUoKX1yZXR1cm4gcy50aWNrPWZ1bmN0aW9uKCl7aWYoKG4qPS45OSk8LjAwNSlyZXR1cm4gZT1udWxsLGwuZW5kKHt0eXBlOiJlbmQiLGFscGhhOm49MH0pLCEwO3ZhciByLHMsZixoLGQsdixiLF8sdyxrPW0ubGVuZ3RoLFQ9eS5sZW5ndGg7Zm9yKHM9MDtzPFQ7KytzKWg9KGY9eVtzXSkuc291cmNlLCh2PShfPShkPWYudGFyZ2V0KS54LWgueCkqXysodz1kLnktaC55KSp3KSYmKF8qPXY9biphW3NdKigodj1NYXRoLnNxcnQodikpLWlbc10pL3Ysdyo9dixkLngtPV8qKGI9aC53ZWlnaHQrZC53ZWlnaHQ/aC53ZWlnaHQvKGgud2VpZ2h0K2Qud2VpZ2h0KTouNSksZC55LT13KmIsaC54Kz1fKihiPTEtYiksaC55Kz13KmIpO2lmKChiPW4qZykmJihfPWNbMF0vMix3PWNbMV0vMixzPS0xLGIpKWZvcig7KytzPGs7KShmPW1bc10pLngrPShfLWYueCkqYixmLnkrPSh3LWYueSkqYjtpZihwKWZvcighZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPTA7ZS5jaGFyZ2U9MDtpZighZS5sZWFmKWZvcih2YXIgbyxzPWUubm9kZXMsbD1zLmxlbmd0aCxjPS0xOysrYzxsOyludWxsIT0obz1zW2NdKSYmKHQobyxyLG4pLGUuY2hhcmdlKz1vLmNoYXJnZSxpKz1vLmNoYXJnZSpvLmN4LGErPW8uY2hhcmdlKm8uY3kpO2lmKGUucG9pbnQpe2UubGVhZnx8KGUucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxlLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PXIqbltlLnBvaW50LmluZGV4XTtlLmNoYXJnZSs9ZS5wb2ludENoYXJnZT11LGkrPXUqZS5wb2ludC54LGErPXUqZS5wb2ludC55fWUuY3g9aS9lLmNoYXJnZTtlLmN5PWEvZS5jaGFyZ2V9KHI9dC5nZW9tLnF1YWR0cmVlKG0pLG4sbykscz0tMTsrK3M8azspKGY9bVtzXSkuZml4ZWR8fHIudmlzaXQoeChmKSk7Zm9yKHM9LTE7KytzPGs7KShmPW1bc10pLmZpeGVkPyhmLng9Zi5weCxmLnk9Zi5weSk6KGYueC09KGYucHgtKGYucHg9Zi54KSkqdSxmLnktPShmLnB5LShmLnB5PWYueSkpKnUpO2wudGljayh7dHlwZToidGljayIsYWxwaGE6bn0pfSxzLm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXQscyk6bX0scy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10LHMpOnl9LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHMpOmN9LHMubGlua0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3Qscyk6Zn0scy5kaXN0YW5jZT1zLmxpbmtEaXN0YW5jZSxzLmxpbmtTdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LHMpOmh9LHMuZnJpY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qscyk6dX0scy5jaGFyZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxzKTpwfSxzLmNoYXJnZURpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQqdCxzKTpNYXRoLnNxcnQoZCl9LHMuZ3Jhdml0eT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rdCxzKTpnfSxzLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQqdCxzKTpNYXRoLnNxcnQodil9LHMuYWxwaGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3Qsbj90PjA/bj10OihlLmM9bnVsbCxlLnQ9TmFOLGU9bnVsbCxsLmVuZCh7dHlwZToiZW5kIixhbHBoYTpuPTB9KSk6dD4wJiYobC5zdGFydCh7dHlwZToic3RhcnQiLGFscGhhOm49dH0pLGU9VGUocy50aWNrKSkscyk6bn0scy5zdGFydD1mdW5jdGlvbigpe3ZhciB0LGUscixuPW0ubGVuZ3RoLGw9eS5sZW5ndGgsdT1jWzBdLGQ9Y1sxXTtmb3IodD0wO3Q8bjsrK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7dDxsOysrdCkibnVtYmVyIj09dHlwZW9mKHI9eVt0XSkuc291cmNlJiYoci5zb3VyY2U9bVtyLnNvdXJjZV0pLCJudW1iZXIiPT10eXBlb2Ygci50YXJnZXQmJihyLnRhcmdldD1tW3IudGFyZ2V0XSksKytyLnNvdXJjZS53ZWlnaHQsKytyLnRhcmdldC53ZWlnaHQ7Zm9yKHQ9MDt0PG47Kyt0KXI9bVt0XSxpc05hTihyLngpJiYoci54PWcoIngiLHUpKSxpc05hTihyLnkpJiYoci55PWcoInkiLGQpKSxpc05hTihyLnB4KSYmKHIucHg9ci54KSxpc05hTihyLnB5KSYmKHIucHk9ci55KTtpZihpPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBmKWZvcih0PTA7dDxsOysrdClpW3RdPStmLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PGw7Kyt0KWlbdF09ZjtpZihhPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBoKWZvcih0PTA7dDxsOysrdClhW3RdPStoLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PGw7Kyt0KWFbdF09aDtpZihvPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBwKWZvcih0PTA7dDxuOysrdClvW3RdPStwLmNhbGwodGhpcyxtW3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PG47Kyt0KW9bdF09cDtmdW5jdGlvbiBnKHIsaSl7aWYoIWUpe2ZvcihlPW5ldyBBcnJheShuKSxjPTA7YzxuOysrYyllW2NdPVtdO2ZvcihjPTA7YzxsOysrYyl7dmFyIGE9eVtjXTtlW2Euc291cmNlLmluZGV4XS5wdXNoKGEudGFyZ2V0KSxlW2EudGFyZ2V0LmluZGV4XS5wdXNoKGEuc291cmNlKX19Zm9yKHZhciBvLHM9ZVt0XSxjPS0xLHU9cy5sZW5ndGg7KytjPHU7KWlmKCFpc05hTihvPXNbY11bcl0pKXJldHVybiBvO3JldHVybiBNYXRoLnJhbmRvbSgpKml9cmV0dXJuIHMucmVzdW1lKCl9LHMucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHMuYWxwaGEoLjEpfSxzLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSgwKX0scy5kcmFnPWZ1bmN0aW9uKCl7aWYocnx8KHI9dC5iZWhhdmlvci5kcmFnKCkub3JpZ2luKHopLm9uKCJkcmFnc3RhcnQuZm9yY2UiLGJhKS5vbigiZHJhZy5mb3JjZSIsYikub24oImRyYWdlbmQuZm9yY2UiLF9hKSksIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7dGhpcy5vbigibW91c2VvdmVyLmZvcmNlIix3YSkub24oIm1vdXNlb3V0LmZvcmNlIixrYSkuY2FsbChyKX0sdC5yZWJpbmQocyxsLCJvbiIpfTt2YXIgVGE9MjAsQWE9MSxNYT0xLzA7ZnVuY3Rpb24gU2EoZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLCJzb3J0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIpLGUubm9kZXM9ZSxlLmxpbmtzPUlhLGV9ZnVuY3Rpb24gRWEodCxlKXtmb3IodmFyIHI9W3RdO251bGwhPSh0PXIucG9wKCkpOylpZihlKHQpLChpPXQuY2hpbGRyZW4pJiYobj1pLmxlbmd0aCkpZm9yKHZhciBuLGk7LS1uPj0wOylyLnB1c2goaVtuXSl9ZnVuY3Rpb24gQ2EodCxlKXtmb3IodmFyIHI9W3RdLG49W107bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKG4ucHVzaCh0KSwoYT10LmNoaWxkcmVuKSYmKGk9YS5sZW5ndGgpKWZvcih2YXIgaSxhLG89LTE7KytvPGk7KXIucHVzaChhW29dKTtmb3IoO251bGwhPSh0PW4ucG9wKCkpOyllKHQpfWZ1bmN0aW9uIExhKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHphKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIE9hKHQsZSl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBJYShlKXtyZXR1cm4gdC5tZXJnZShlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC5jaGlsZHJlbnx8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnQsdGFyZ2V0OmV9fSl9KSl9dC5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7dmFyIHQ9T2EsZT1MYSxyPXphO2Z1bmN0aW9uIG4oaSl7dmFyIGEsbz1baV0scz1bXTtmb3IoaS5kZXB0aD0wO251bGwhPShhPW8ucG9wKCkpOylpZihzLnB1c2goYSksKGM9ZS5jYWxsKG4sYSxhLmRlcHRoKSkmJihsPWMubGVuZ3RoKSl7Zm9yKHZhciBsLGMsdTstLWw+PTA7KW8ucHVzaCh1PWNbbF0pLHUucGFyZW50PWEsdS5kZXB0aD1hLmRlcHRoKzE7ciYmKGEudmFsdWU9MCksYS5jaGlsZHJlbj1jfWVsc2UgciYmKGEudmFsdWU9K3IuY2FsbChuLGEsYS5kZXB0aCl8fDApLGRlbGV0ZSBhLmNoaWxkcmVuO3JldHVybiBDYShpLGZ1bmN0aW9uKGUpe3ZhciBuLGk7dCYmKG49ZS5jaGlsZHJlbikmJm4uc29ydCh0KSxyJiYoaT1lLnBhcmVudCkmJihpLnZhbHVlKz1lLnZhbHVlKX0pLHN9cmV0dXJuIG4uc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiByJiYoRWEodCxmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiYodC52YWx1ZT0wKX0pLENhKHQsZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQudmFsdWU9K3IuY2FsbChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUudmFsdWUrPXQudmFsdWUpfSkpLHR9LG59LHQubGF5b3V0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLHI9WzEsMV07ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWUuY2FsbCh0aGlzLHQsbik7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtpZihlLng9cixlLnk9ZS5kZXB0aCppLGUuZHg9bixlLmR5PWksYSYmKG89YS5sZW5ndGgpKXt2YXIgbyxzLGwsYz0tMTtmb3Iobj1lLnZhbHVlP24vZS52YWx1ZTowOysrYzxvOyl0KHM9YVtjXSxyLGw9cy52YWx1ZSpuLGkpLHIrPWx9fShpWzBdLDAsclswXSxyWzFdL2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPTA7aWYociYmKGk9ci5sZW5ndGgpKWZvcih2YXIgaSxhPS0xOysrYTxpOyluPU1hdGgubWF4KG4sdChyW2FdKSk7cmV0dXJuIDErbn0oaVswXSkpLGl9cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LFNhKG4sZSl9LHQubGF5b3V0LnBpZT1mdW5jdGlvbigpe3ZhciBlPU51bWJlcixyPURhLG49MCxpPU10LGE9MDtmdW5jdGlvbiBvKHMpe3ZhciBsLGM9cy5sZW5ndGgsdT1zLm1hcChmdW5jdGlvbih0LHIpe3JldHVybitlLmNhbGwobyx0LHIpfSksZj0rKCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLGg9KCJmdW5jdGlvbiI9PXR5cGVvZiBpP2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOmkpLWYscD1NYXRoLm1pbihNYXRoLmFicyhoKS9jLCsoImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YSkpLGQ9cCooaDwwPy0xOjEpLGc9dC5zdW0odSksdj1nPyhoLWMqZCkvZzowLG09dC5yYW5nZShjKSx5PVtdO3JldHVybiBudWxsIT1yJiZtLnNvcnQocj09PURhP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHVbZV0tdVt0XX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihzW3RdLHNbZV0pfSksbS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3lbdF09e2RhdGE6c1t0XSx2YWx1ZTpsPXVbdF0sc3RhcnRBbmdsZTpmLGVuZEFuZ2xlOmYrPWwqditkLHBhZEFuZ2xlOnB9fSkseX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG8pOnJ9LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvKTppfSxvLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbyk6YX0sb307dmFyIERhPXt9O2Z1bmN0aW9uIFBhKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gUmEodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBGYSh0LGUscil7dC55MD1lLHQueT1yfXQubGF5b3V0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIGU9eixyPWphLG49VmEsaT1GYSxhPVBhLG89UmE7ZnVuY3Rpb24gcyhsLGMpe2lmKCEocD1sLmxlbmd0aCkpcmV0dXJuIGw7dmFyIHU9bC5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5jYWxsKHMsdCxyKX0pLGY9dS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2EuY2FsbChzLHQsZSksby5jYWxsKHMsdCxlKV19KX0pLGg9ci5jYWxsKHMsZixjKTt1PXQucGVybXV0ZSh1LGgpLGY9dC5wZXJtdXRlKGYsaCk7dmFyIHAsZCxnLHYsbT1uLmNhbGwocyxmLGMpLHk9dVswXS5sZW5ndGg7Zm9yKGc9MDtnPHk7KytnKWZvcihpLmNhbGwocyx1WzBdW2ddLHY9bVtnXSxmWzBdW2ddWzFdKSxkPTE7ZDxwOysrZClpLmNhbGwocyx1W2RdW2ddLHYrPWZbZC0xXVtnXVsxXSxmW2RdW2ddWzFdKTtyZXR1cm4gbH1yZXR1cm4gcy52YWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QmEuZ2V0KHQpfHxqYSxzKTpyfSxzLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hLmdldCh0KXx8VmEscyk6bn0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30scy5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKTppfSxzfTt2YXIgQmE9dC5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1lLm1hcChVYSksbz1lLm1hcChxYSkscz10LnJhbmdlKGkpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYVt0XS1hW2VdfSksbD0wLGM9MCx1PVtdLGY9W107Zm9yKHI9MDtyPGk7KytyKW49c1tyXSxsPGM/KGwrPW9bbl0sdS5wdXNoKG4pKTooYys9b1tuXSxmLnB1c2gobikpO3JldHVybiBmLnJldmVyc2UoKS5jb25jYXQodSl9LHJldmVyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpLnJldmVyc2UoKX0sZGVmYXVsdDpqYX0pLE5hPXQubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz1bXSxzPTAsbD1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtuPnMmJihzPW4pLG8ucHVzaChuKX1mb3Iocj0wO3I8YTsrK3IpbFtyXT0ocy1vW3JdKS8yO3JldHVybiBsfSx3aWdnbGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHU9dC5sZW5ndGgsZj10WzBdLGg9Zi5sZW5ndGgscD1bXTtmb3IocFswXT1sPWM9MCxyPTE7cjxoOysrcil7Zm9yKGU9MCxpPTA7ZTx1OysrZSlpKz10W2VdW3JdWzFdO2ZvcihlPTAsYT0wLHM9ZltyXVswXS1mW3ItMV1bMF07ZTx1OysrZSl7Zm9yKG49MCxvPSh0W2VdW3JdWzFdLXRbZV1bci0xXVsxXSkvKDIqcyk7bjxlOysrbilvKz0odFtuXVtyXVsxXS10W25dW3ItMV1bMV0pL3M7YSs9byp0W2VdW3JdWzFdfXBbcl09bC09aT9hL2kqczowLGw8YyYmKGM9bCl9Zm9yKHI9MDtyPGg7KytyKXBbcl0tPWM7cmV0dXJuIHB9LGV4cGFuZDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPXRbMF0ubGVuZ3RoLG89MS9pLHM9W107Zm9yKHI9MDtyPGE7KytyKXtmb3IoZT0wLG49MDtlPGk7ZSsrKW4rPXRbZV1bcl1bMV07aWYobilmb3IoZT0wO2U8aTtlKyspdFtlXVtyXVsxXS89bjtlbHNlIGZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdPW99Zm9yKHI9MDtyPGE7KytyKXNbcl09MDtyZXR1cm4gc30semVybzpWYX0pO2Z1bmN0aW9uIGphKGUpe3JldHVybiB0LnJhbmdlKGUubGVuZ3RoKX1mdW5jdGlvbiBWYSh0KXtmb3IodmFyIGU9LTEscj10WzBdLmxlbmd0aCxuPVtdOysrZTxyOyluW2VdPTA7cmV0dXJuIG59ZnVuY3Rpb24gVWEodCl7Zm9yKHZhciBlLHI9MSxuPTAsaT10WzBdWzFdLGE9dC5sZW5ndGg7cjxhOysrcikoZT10W3JdWzFdKT5pJiYobj1yLGk9ZSk7cmV0dXJuIG59ZnVuY3Rpb24gcWEodCl7cmV0dXJuIHQucmVkdWNlKEhhLDApfWZ1bmN0aW9uIEhhKHQsZSl7cmV0dXJuIHQrZVsxXX1mdW5jdGlvbiBHYSh0LGUpe3JldHVybiBZYSh0LE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIrMSkpfWZ1bmN0aW9uIFlhKHQsZSl7Zm9yKHZhciByPS0xLG49K3RbMF0saT0odFsxXS1uKS9lLGE9W107KytyPD1lOylhW3JdPWkqcituO3JldHVybiBhfWZ1bmN0aW9uIFdhKGUpe3JldHVyblt0Lm1pbihlKSx0Lm1heChlKV19ZnVuY3Rpb24gWGEodCxlKXtyZXR1cm4gdC52YWx1ZS1lLnZhbHVlfWZ1bmN0aW9uIFphKHQsZSl7dmFyIHI9dC5fcGFja19uZXh0O3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10LGUuX3BhY2tfbmV4dD1yLHIuX3BhY2tfcHJldj1lfWZ1bmN0aW9uICRhKHQsZSl7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXR9ZnVuY3Rpb24gSmEodCxlKXt2YXIgcj1lLngtdC54LG49ZS55LXQueSxpPXQucitlLnI7cmV0dXJuLjk5OSppKmk+cipyK24qbn1mdW5jdGlvbiBLYSh0KXtpZigoZT10LmNoaWxkcmVuKSYmKGw9ZS5sZW5ndGgpKXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MS8wLHU9LTEvMCxmPTEvMCxoPS0xLzA7aWYoZS5mb3JFYWNoKFFhKSwocj1lWzBdKS54PS1yLnIsci55PTAseChyKSxsPjEmJigobj1lWzFdKS54PW4ucixuLnk9MCx4KG4pLGw+MikpZm9yKGVvKHIsbixpPWVbMl0pLHgoaSksWmEocixpKSxyLl9wYWNrX3ByZXY9aSxaYShpLG4pLG49ci5fcGFja19uZXh0LGE9MzthPGw7YSsrKXtlbyhyLG4saT1lW2FdKTt2YXIgcD0wLGQ9MSxnPTE7Zm9yKG89bi5fcGFja19uZXh0O28hPT1uO289by5fcGFja19uZXh0LGQrKylpZihKYShvLGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3Iocz1yLl9wYWNrX3ByZXY7cyE9PW8uX3BhY2tfcHJldiYmIUphKHMsaSk7cz1zLl9wYWNrX3ByZXYsZysrKTtwPyhkPGd8fGQ9PWcmJm4ucjxyLnI/JGEocixuPW8pOiRhKHI9cyxuKSxhLS0pOihaYShyLGkpLG49aSx4KGkpKX12YXIgdj0oYyt1KS8yLG09KGYraCkvMix5PTA7Zm9yKGE9MDthPGw7YSsrKShpPWVbYV0pLngtPXYsaS55LT1tLHk9TWF0aC5tYXgoeSxpLnIrTWF0aC5zcXJ0KGkueCppLngraS55KmkueSkpO3Qucj15LGUuZm9yRWFjaCh0byl9ZnVuY3Rpb24geCh0KXtjPU1hdGgubWluKHQueC10LnIsYyksdT1NYXRoLm1heCh0LngrdC5yLHUpLGY9TWF0aC5taW4odC55LXQucixmKSxoPU1hdGgubWF4KHQueSt0LnIsaCl9fWZ1bmN0aW9uIFFhKHQpe3QuX3BhY2tfbmV4dD10Ll9wYWNrX3ByZXY9dH1mdW5jdGlvbiB0byh0KXtkZWxldGUgdC5fcGFja19uZXh0LGRlbGV0ZSB0Ll9wYWNrX3ByZXZ9ZnVuY3Rpb24gZW8odCxlLHIpe3ZhciBuPXQucityLnIsaT1lLngtdC54LGE9ZS55LXQueTtpZihuJiYoaXx8YSkpe3ZhciBvPWUucityLnIscz1pKmkrYSphLGw9LjUrKChuKj1uKS0obyo9bykpLygyKnMpLGM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihuK3MpLShuLT1zKSpuLW8qbykpLygyKnMpO3IueD10LngrbCppK2MqYSxyLnk9dC55K2wqYS1jKml9ZWxzZSByLng9dC54K24sci55PXQueX1mdW5jdGlvbiBybyh0LGUpe3JldHVybiB0LnBhcmVudD09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIG5vKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGUubGVuZ3RoP2VbMF06dC50fWZ1bmN0aW9uIGlvKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4oZT1yLmxlbmd0aCk/cltlLTFdOnQudH1mdW5jdGlvbiBhbyh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBvbyh0LGUscil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6cn1mdW5jdGlvbiBzbyh0KXtyZXR1cm57eDp0LngseTp0LnksZHg6dC5keCxkeTp0LmR5fX1mdW5jdGlvbiBsbyh0LGUpe3ZhciByPXQueCtlWzNdLG49dC55K2VbMF0saT10LmR4LWVbMV0tZVszXSxhPXQuZHktZVswXS1lWzJdO3JldHVybiBpPDAmJihyKz1pLzIsaT0wKSxhPDAmJihuKz1hLzIsYT0wKSx7eDpyLHk6bixkeDppLGR5OmF9fWZ1bmN0aW9uIGNvKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBlPHI/W2Uscl06W3IsZV19ZnVuY3Rpb24gdW8odCl7cmV0dXJuIHQucmFuZ2VFeHRlbnQ/dC5yYW5nZUV4dGVudCgpOmNvKHQucmFuZ2UoKSl9ZnVuY3Rpb24gZm8odCxlLHIsbil7dmFyIGk9cih0WzBdLHRbMV0pLGE9bihlWzBdLGVbMV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gaG8odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aC0xLGE9dFtuXSxvPXRbaV07cmV0dXJuIG88YSYmKHI9bixuPWksaT1yLHI9YSxhPW8sbz1yKSx0W25dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBwbyh0KXtyZXR1cm4gdD97Zmxvb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90KSp0fSxjZWlsOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZS90KSp0fX06Z299dC5sYXlvdXQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIGU9ITAscj1OdW1iZXIsbj1XYSxpPUdhO2Z1bmN0aW9uIGEoYSxvKXtmb3IodmFyIHMsbCxjPVtdLHU9YS5tYXAocix0aGlzKSxmPW4uY2FsbCh0aGlzLHUsbyksaD1pLmNhbGwodGhpcyxmLHUsbykscD0obz0tMSx1Lmxlbmd0aCksZD1oLmxlbmd0aC0xLGc9ZT8xOjEvcDsrK288ZDspKHM9Y1tvXT1bXSkuZHg9aFtvKzFdLShzLng9aFtvXSkscy55PTA7aWYoZD4wKWZvcihvPS0xOysrbzxwOykobD11W29dKT49ZlswXSYmbDw9ZlsxXSYmKChzPWNbdC5iaXNlY3QoaCxsLDEsZCktMV0pLnkrPWcscy5wdXNoKGFbb10pKTtyZXR1cm4gY31yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dmUodCksYSk6bn0sYS5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJudW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihlKXtyZXR1cm4gWWEoZSx0KX06dmUodCksYSk6aX0sYS5mcmVxdWVuY3k9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LGEpOmV9LGF9LHQubGF5b3V0LnBhY2s9ZnVuY3Rpb24oKXt2YXIgZSxyPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQoWGEpLG49MCxpPVsxLDFdO2Z1bmN0aW9uIGEodCxhKXt2YXIgbz1yLmNhbGwodGhpcyx0LGEpLHM9b1swXSxsPWlbMF0sYz1pWzFdLHU9bnVsbD09ZT9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTtpZihzLng9cy55PTAsQ2EocyxmdW5jdGlvbih0KXt0LnI9K3UodC52YWx1ZSl9KSxDYShzLEthKSxuKXt2YXIgZj1uKihlPzE6TWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSkvMjtDYShzLGZ1bmN0aW9uKHQpe3Qucis9Zn0pLENhKHMsS2EpLENhKHMsZnVuY3Rpb24odCl7dC5yLT1mfSl9cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtlLng9cis9aSplLng7ZS55PW4rPWkqZS55O2Uucio9aTtpZihhKWZvcih2YXIgbz0tMSxzPWEubGVuZ3RoOysrbzxzOyl0KGFbb10scixuLGkpfShzLGwvMixjLzIsZT8xOjEvTWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSksb31yZXR1cm4gYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsYSk6aX0sYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxhKTplfSxhLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsYSk6bn0sU2EoYSxyKX0sdC5sYXlvdXQudHJlZT1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1ybyxuPVsxLDFdLGk9bnVsbDtmdW5jdGlvbiBhKHQsYSl7dmFyIGM9ZS5jYWxsKHRoaXMsdCxhKSx1PWNbMF0sZj1mdW5jdGlvbih0KXt2YXIgZSxyPXtBOm51bGwsY2hpbGRyZW46W3RdfSxuPVtyXTtmb3IoO251bGwhPShlPW4ucG9wKCkpOylmb3IodmFyIGksYT1lLmNoaWxkcmVuLG89MCxzPWEubGVuZ3RoO288czsrK28pbi5wdXNoKChhW29dPWk9e186YVtvXSxwYXJlbnQ6ZSxjaGlsZHJlbjooaT1hW29dLmNoaWxkcmVuKSYmaS5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT1pKTtyZXR1cm4gci5jaGlsZHJlblswXX0odSk7aWYoQ2EoZixvKSxmLnBhcmVudC5tPS1mLnosRWEoZixzKSxpKUVhKHUsbCk7ZWxzZXt2YXIgaD11LHA9dSxkPXU7RWEodSxmdW5jdGlvbih0KXt0Lng8aC54JiYoaD10KSx0Lng+cC54JiYocD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSk7dmFyIGc9cihoLHApLzItaC54LHY9blswXS8ocC54K3IocCxoKS8yK2cpLG09blsxXS8oZC5kZXB0aHx8MSk7RWEodSxmdW5jdGlvbih0KXt0Lng9KHQueCtnKSp2LHQueT10LmRlcHRoKm19KX1yZXR1cm4gY31mdW5jdGlvbiBvKHQpe3ZhciBlPXQuY2hpbGRyZW4sbj10LnBhcmVudC5jaGlsZHJlbixpPXQuaT9uW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXshZnVuY3Rpb24odCl7dmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDtmb3IoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfSh0KTt2YXIgYT0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K3IodC5fLGkuXyksdC5tPXQuei1hKTp0Lno9YX1lbHNlIGkmJih0Lno9aS56K3IodC5fLGkuXykpO3QucGFyZW50LkE9ZnVuY3Rpb24odCxlLG4pe2lmKGUpe2Zvcih2YXIgaSxhPXQsbz10LHM9ZSxsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGY9cy5tLGg9bC5tO3M9aW8ocyksYT1ubyhhKSxzJiZhOylsPW5vKGwpLChvPWlvKG8pKS5hPXQsKGk9cy56K2YtYS56LWMrcihzLl8sYS5fKSk+MCYmKGFvKG9vKHMsdCxuKSx0LGkpLGMrPWksdSs9aSksZis9cy5tLGMrPWEubSxoKz1sLm0sdSs9by5tO3MmJiFpbyhvKSYmKG8udD1zLG8ubSs9Zi11KSxhJiYhbm8obCkmJihsLnQ9YSxsLm0rPWMtaCxuPXQpfXJldHVybiBufSh0LGksdC5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gcyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gbCh0KXt0LngqPW5bMF0sdC55PXQuZGVwdGgqblsxXX1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP2w6bnVsbCxhKTppP251bGw6bn0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9udWxsOmwsYSk6aT9uOm51bGx9LFNhKGEsZSl9LHQubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgZT10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9cm8sbj1bMSwxXSxpPSExO2Z1bmN0aW9uIGEoYSxvKXt2YXIgcyxsPWUuY2FsbCh0aGlzLGEsbyksYz1sWzBdLHU9MDtDYShjLGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47biYmbi5sZW5ndGg/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLnh9LDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIDErdC5tYXgoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC55fSl9KG4pKTooZS54PXM/dSs9cihlLHMpOjAsZS55PTAscz1lKX0pO3ZhciBmPWZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbjtyZXR1cm4gciYmci5sZW5ndGg/dChyWzBdKTplfShjKSxoPWZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLmNoaWxkcmVuO3JldHVybiBuJiYocj1uLmxlbmd0aCk/dChuW3ItMV0pOmV9KGMpLHA9Zi54LXIoZixoKS8yLGQ9aC54K3IoaCxmKS8yO3JldHVybiBDYShjLGk/ZnVuY3Rpb24odCl7dC54PSh0LngtYy54KSpuWzBdLHQueT0oYy55LXQueSkqblsxXX06ZnVuY3Rpb24odCl7dC54PSh0LngtcCkvKGQtcCkqblswXSx0Lnk9KDEtKGMueT90LnkvYy55OjEpKSpuWzFdfSksbH1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShuPXQpLGEpOmk/bjpudWxsfSxTYShhLGUpfSx0LmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKSxuPU1hdGgucm91bmQsaT1bMSwxXSxhPW51bGwsbz1zbyxzPSExLGw9InNxdWFyaWZ5IixjPS41KigxK01hdGguc3FydCg1KSk7ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspbj0ocj10W2ldKS52YWx1ZSooZTwwPzA6ZSksci5hcmVhPWlzTmFOKG4pfHxuPD0wPzA6bn1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG4saSxhPW8odCkscz1bXSxjPWUuc2xpY2UoKSxoPTEvMCxnPSJzbGljZSI9PT1sP2EuZHg6ImRpY2UiPT09bD9hLmR5OiJzbGljZS1kaWNlIj09PWw/MSZ0LmRlcHRoP2EuZHk6YS5keDpNYXRoLm1pbihhLmR4LGEuZHkpO2Zvcih1KGMsYS5keCphLmR5L3QudmFsdWUpLHMuYXJlYT0wOyhpPWMubGVuZ3RoKT4wOylzLnB1c2gocj1jW2ktMV0pLHMuYXJlYSs9ci5hcmVhLCJzcXVhcmlmeSIhPT1sfHwobj1wKHMsZykpPD1oPyhjLnBvcCgpLGg9bik6KHMuYXJlYS09cy5wb3AoKS5hcmVhLGQocyxnLGEsITEpLGc9TWF0aC5taW4oYS5keCxhLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxoPTEvMCk7cy5sZW5ndGgmJihkKHMsZyxhLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksZS5mb3JFYWNoKGYpfX1mdW5jdGlvbiBoKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG49byh0KSxpPWUuc2xpY2UoKSxhPVtdO2Zvcih1KGksbi5keCpuLmR5L3QudmFsdWUpLGEuYXJlYT0wO3I9aS5wb3AoKTspYS5wdXNoKHIpLGEuYXJlYSs9ci5hcmVhLG51bGwhPXIueiYmKGQoYSxyLno/bi5keDpuLmR5LG4sIWkubGVuZ3RoKSxhLmxlbmd0aD1hLmFyZWE9MCk7ZS5mb3JFYWNoKGgpfX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxhPTEvMCxvPS0xLHM9dC5sZW5ndGg7KytvPHM7KShyPXRbb10uYXJlYSkmJihyPGEmJihhPXIpLHI+aSYmKGk9cikpO3JldHVybiBlKj1lLChuKj1uKT9NYXRoLm1heChlKmkqYy9uLG4vKGUqYSpjKSk6MS8wfWZ1bmN0aW9uIGQodCxlLHIsaSl7dmFyIGEsbz0tMSxzPXQubGVuZ3RoLGw9ci54LGM9ci55LHU9ZT9uKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2ZvcigoaXx8dT5yLmR5KSYmKHU9ci5keSk7KytvPHM7KShhPXRbb10pLng9bCxhLnk9YyxhLmR5PXUsbCs9YS5keD1NYXRoLm1pbihyLngrci5keC1sLHU/bihhLmFyZWEvdSk6MCk7YS56PSEwLGEuZHgrPXIueCtyLmR4LWwsci55Kz11LHIuZHktPXV9ZWxzZXtmb3IoKGl8fHU+ci5keCkmJih1PXIuZHgpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keD11LGMrPWEuZHk9TWF0aC5taW4oci55K3IuZHktYyx1P24oYS5hcmVhL3UpOjApO2Euej0hMSxhLmR5Kz1yLnkrci5keS1jLHIueCs9dSxyLmR4LT11fX1mdW5jdGlvbiBnKHQpe3ZhciBuPWV8fHIodCksYT1uWzBdO3JldHVybiBhLng9YS55PTAsYS52YWx1ZT8oYS5keD1pWzBdLGEuZHk9aVsxXSk6YS5keD1hLmR5PTAsZSYmci5yZXZhbHVlKGEpLHUoW2FdLGEuZHgqYS5keS9hLnZhbHVlKSwoZT9oOmYpKGEpLHMmJihlPW4pLG59cmV0dXJuIGcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGcpOml9LGcucGFkZGluZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYTtmdW5jdGlvbiBlKGUpe3JldHVybiBsbyhlLHQpfXZhciByO3JldHVybiBvPW51bGw9PShhPXQpP3NvOiJmdW5jdGlvbiI9PShyPXR5cGVvZiB0KT9mdW5jdGlvbihlKXt2YXIgcj10LmNhbGwoZyxlLGUuZGVwdGgpO3JldHVybiBudWxsPT1yP3NvKGUpOmxvKGUsIm51bWJlciI9PXR5cGVvZiByP1tyLHIscixyXTpyKX06Im51bWJlciI9PT1yPyh0PVt0LHQsdCx0XSxlKTplLGd9LGcucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD9NYXRoLnJvdW5kOk51bWJlcixnKTpuIT1OdW1iZXJ9LGcuc3RpY2t5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZT1udWxsLGcpOnN9LGcucmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxnKTpjfSxnLm1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCsiIixnKTpsfSxTYShnLHIpfSx0LnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcjwyJiYoZT0xKSxyPDEmJih0PTApLGZ1bmN0aW9uKCl7dmFyIHIsbixpO2Rve2k9KHI9MipNYXRoLnJhbmRvbSgpLTEpKnIrKG49MipNYXRoLnJhbmRvbSgpLTEpKm59d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrZSpyKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19LGxvZ05vcm1hbDpmdW5jdGlvbigpe3ZhciBlPXQucmFuZG9tLm5vcm1hbC5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGUoKSl9fSxiYXRlczpmdW5jdGlvbihlKXt2YXIgcj10LnJhbmRvbS5pcndpbkhhbGwoZSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9lfX0saXJ3aW5IYWxsOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MDtyPHQ7cisrKWUrPU1hdGgucmFuZG9tKCk7cmV0dXJuIGV9fX0sdC5zY2FsZT17fTt2YXIgZ289e2Zsb29yOnosY2VpbDp6fTtmdW5jdGlvbiB2byhlLHIsbixpKXt2YXIgYT1bXSxvPVtdLHM9MCxsPU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKS0xO2ZvcihlW2xdPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCkscj1yLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8PWw7KWEucHVzaChuKGVbcy0xXSxlW3NdKSksby5wdXNoKGkocltzLTFdLHJbc10pKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dC5iaXNlY3QoZSxyLDEsbCktMTtyZXR1cm4gb1tuXShhW25dKHIpKX19ZnVuY3Rpb24gbW8oZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24geW8odCxlKXtyZXR1cm4gaG8odCxwbyh4byh0LGUpWzJdKSksaG8odCxwbyh4byh0LGUpWzJdKSksdH1mdW5jdGlvbiB4byh0LGUpe251bGw9PWUmJihlPTEwKTt2YXIgcj1jbyh0KSxuPXJbMV0tclswXSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobi9lKS9NYXRoLkxOMTApKSxhPWUvbippO3JldHVybiBhPD0uMTU/aSo9MTA6YTw9LjM1P2kqPTU6YTw9Ljc1JiYoaSo9MiksclswXT1NYXRoLmNlaWwoclswXS9pKSppLHJbMV09TWF0aC5mbG9vcihyWzFdL2kpKmkrLjUqaSxyWzJdPWkscn1mdW5jdGlvbiBibyhlLHIpe3JldHVybiB0LnJhbmdlLmFwcGx5KHQseG8oZSxyKSl9ZnVuY3Rpb24gX28oZSxyLG4pe3ZhciBpPXhvKGUscik7aWYobil7dmFyIGE9TGUuZXhlYyhuKTtpZihhLnNoaWZ0KCksInMiPT09YVs4XSl7dmFyIG89dC5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoeShpWzBdKSx5KGlbMV0pKSk7cmV0dXJuIGFbN118fChhWzddPSIuIitrbyhvLnNjYWxlKGlbMl0pKSksYVs4XT0iZiIsbj10LmZvcm1hdChhLmpvaW4oIiIpKSxmdW5jdGlvbih0KXtyZXR1cm4gbihvLnNjYWxlKHQpKStvLnN5bWJvbH19YVs3XXx8KGFbN109Ii4iK2Z1bmN0aW9uKHQsZSl7dmFyIHI9a28oZVsyXSk7cmV0dXJuIHQgaW4gd28/TWF0aC5hYnMoci1rbyhNYXRoLm1heCh5KGVbMF0pLHkoZVsxXSkpKSkrICsoImUiIT09dCk6ci0yKigiJSI9PT10KX0oYVs4XSxpKSksbj1hLmpvaW4oIiIpfWVsc2Ugbj0iLC4iK2tvKGlbMl0pKyJmIjtyZXR1cm4gdC5mb3JtYXQobil9dC5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYSxvO2Z1bmN0aW9uIHMoKXt2YXIgdD1NYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCk+Mj92bzpmbyxzPWk/bWE6dmE7cmV0dXJuIGE9dChlLHIscyxuKSxvPXQocixlLHMsWmkpLGx9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYSh0KX1sLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbyh0KX07bC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAoTnVtYmVyKSxzKCkpOmV9O2wucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxzKCkpOnJ9O2wucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gbC5yYW5nZSh0KS5pbnRlcnBvbGF0ZShjYSl9O2wuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKCkpOml9O2wuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59O2wudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKGUsdCl9O2wudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBfbyhlLHQscil9O2wubmljZT1mdW5jdGlvbih0KXtyZXR1cm4geW8oZSx0KSxzKCl9O2wuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuLGkpfTtyZXR1cm4gcygpfShbMCwxXSxbMCwxXSxaaSwhMSl9O3ZhciB3bz17czoxLGc6MSxwOjEscjoxLGU6MX07ZnVuY3Rpb24ga28odCl7cmV0dXJuLU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKy4wMSl9dC5zY2FsZS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4saSxhKXtmdW5jdGlvbiBvKHQpe3JldHVybihpP01hdGgubG9nKHQ8MD8wOnQpOi1NYXRoLmxvZyh0PjA/MDotdCkpL01hdGgubG9nKG4pfWZ1bmN0aW9uIHModCl7cmV0dXJuIGk/TWF0aC5wb3cobix0KTotTWF0aC5wb3cobiwtdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcihvKHQpKX1sLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gcyhyLmludmVydCh0KSl9O2wuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXRbMF0+PTAsci5kb21haW4oKGE9dC5tYXAoTnVtYmVyKSkubWFwKG8pKSxsKTphfTtsLmJhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3Qsci5kb21haW4oYS5tYXAobykpLGwpOm59O2wubmljZT1mdW5jdGlvbigpe3ZhciB0PWhvKGEubWFwKG8pLGk/TWF0aDpBbyk7cmV0dXJuIHIuZG9tYWluKHQpLGE9dC5tYXAocyksbH07bC50aWNrcz1mdW5jdGlvbigpe3ZhciB0PWNvKGEpLGU9W10scj10WzBdLGw9dFsxXSxjPU1hdGguZmxvb3IobyhyKSksdT1NYXRoLmNlaWwobyhsKSksZj1uJTE/MjpuO2lmKGlzRmluaXRlKHUtYykpe2lmKGkpe2Zvcig7Yzx1O2MrKylmb3IodmFyIGg9MTtoPGY7aCsrKWUucHVzaChzKGMpKmgpO2UucHVzaChzKGMpKX1lbHNlIGZvcihlLnB1c2gocyhjKSk7YysrPHU7KWZvcih2YXIgaD1mLTE7aD4wO2gtLSllLnB1c2gocyhjKSpoKTtmb3IoYz0wO2VbY108cjtjKyspO2Zvcih1PWUubGVuZ3RoO2VbdS0xXT5sO3UtLSk7ZT1lLnNsaWNlKGMsdSl9cmV0dXJuIGV9O2wudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBUbzthcmd1bWVudHMubGVuZ3RoPDI/cj1UbzoiZnVuY3Rpb24iIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpO3ZhciBpPU1hdGgubWF4KDEsbiplL2wudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10L3MoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIGUqbjxuLS41JiYoZSo9biksZTw9aT9yKHQpOiIifX07bC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUoci5jb3B5KCksbixpLGEpfTtyZXR1cm4gbW8obCxyKX0odC5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBUbz10LmZvcm1hdCgiLjBlIiksQW89e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmNlaWwoLXQpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmZsb29yKC10KX19O2Z1bmN0aW9uIE1vKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfX10LnNjYWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT1NbyhyKSxhPU1vKDEvcik7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZShpKHQpKX1vLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gYShlLmludmVydCh0KSl9O28uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbigobj10Lm1hcChOdW1iZXIpKS5tYXAoaSkpLG8pOm59O28udGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKG4sdCl9O28udGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBfbyhuLHQsZSl9O28ubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gby5kb21haW4oeW8obix0KSl9O28uZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9TW8ocj10KSxhPU1vKDEvciksZS5kb21haW4obi5tYXAoaSkpLG8pOnJ9O28uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUuY29weSgpLHIsbil9O3JldHVybiBtbyhvLGUpfSh0LnNjYWxlLmxpbmVhcigpLDEsWzAsMV0pfSx0LnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LHQuc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7dmFyIGksYSxvO2Z1bmN0aW9uIHModCl7cmV0dXJuIGFbKChpLmdldCh0KXx8KCJyYW5nZSI9PT1uLnQ/aS5zZXQodCxyLnB1c2godCkpOk5hTikpLTEpJWEubGVuZ3RoXX1mdW5jdGlvbiBsKGUsbil7cmV0dXJuIHQucmFuZ2Uoci5sZW5ndGgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZStuKnR9KX1zLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjtyPVtdLGk9bmV3IGI7Zm9yKHZhciBlLGE9LTEsbz10Lmxlbmd0aDsrK2E8bzspaS5oYXMoZT10W2FdKXx8aS5zZXQoZSxyLnB1c2goZSkpO3JldHVybiBzW24udF0uYXBwbHkocyxuLmEpfTtzLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbz0wLG49e3Q6InJhbmdlIixhOmFyZ3VtZW50c30scyk6YX07cy5yYW5nZVBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPShpK2MpLzIsMCk6KGMtaSkvKHIubGVuZ3RoLTErZSk7cmV0dXJuIGE9bChpK3UqZS8yLHUpLG89MCxuPXt0OiJyYW5nZVBvaW50cyIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VSb3VuZFBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPWM9TWF0aC5yb3VuZCgoaStjKS8yKSwwKTooYy1pKS8oci5sZW5ndGgtMStlKXwwO3JldHVybiBhPWwoaStNYXRoLnJvdW5kKHUqZS8yKyhjLWktKHIubGVuZ3RoLTErZSkqdSkvMiksdSksbz0wLG49e3Q6InJhbmdlUm91bmRQb2ludHMiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0sZj10WzEtY10saD0oZi11KS8oci5sZW5ndGgtZSsyKmkpO3JldHVybiBhPWwodStoKmksaCksYyYmYS5yZXZlcnNlKCksbz1oKigxLWUpLG49e3Q6InJhbmdlQmFuZHMiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbih0LGUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihpPWUpO3ZhciBjPXRbMV08dFswXSx1PXRbYy0wXSxmPXRbMS1jXSxoPU1hdGguZmxvb3IoKGYtdSkvKHIubGVuZ3RoLWUrMippKSk7cmV0dXJuIGE9bCh1K01hdGgucm91bmQoKGYtdS0oci5sZW5ndGgtZSkqaCkvMiksaCksYyYmYS5yZXZlcnNlKCksbz1NYXRoLnJvdW5kKGgqKDEtZSkpLG49e3Q6InJhbmdlUm91bmRCYW5kcyIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG99O3MucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gY28obi5hWzBdKX07cy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX07cmV0dXJuIHMuZG9tYWluKHIpfShbXSx7dDoicmFuZ2UiLGE6W1tdXX0pfSx0LnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoU28pfSx0LnNjYWxlLmNhdGVnb3J5MjA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoRW8pfSx0LnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKENvKX0sdC5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShMbyl9O3ZhciBTbz1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcChzZSksRW89WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAoc2UpLENvPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcChzZSksTG89WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcChzZSk7ZnVuY3Rpb24gem8oKXtyZXR1cm4gMH10LnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXt2YXIgaTtmdW5jdGlvbiBhKCl7dmFyIGU9MCxhPW4ubGVuZ3RoO2ZvcihpPVtdOysrZTxhOylpW2UtMV09dC5xdWFudGlsZShyLGUvYSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtpZighaXNOYU4oZT0rZSkpcmV0dXJuIG5bdC5iaXNlY3QoaSxlKV19by5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dC5tYXAocCkuZmlsdGVyKGQpLnNvcnQoaCksYSgpKTpyfTtvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSgpKTpufTtvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpfTtvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4odD1uLmluZGV4T2YodCkpPDA/W05hTixOYU5dOlt0PjA/aVt0LTFdOnJbMF0sdDxpLmxlbmd0aD9pW3RdOnJbci5sZW5ndGgtMV1dfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfTtyZXR1cm4gYSgpfShbXSxbXSl9LHQuc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7dmFyIGksYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuW01hdGgubWF4KDAsTWF0aC5taW4oYSxNYXRoLmZsb29yKGkqKHQtZSkpKSldfWZ1bmN0aW9uIHMoKXtyZXR1cm4gaT1uLmxlbmd0aC8oci1lKSxhPW4ubGVuZ3RoLTEsb31vLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0W3QubGVuZ3RoLTFdLHMoKSk6W2Uscl19O28ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59O28uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVyblt0PSh0PW4uaW5kZXhPZih0KSk8MD9OYU46dC9pK2UsdCsxL2ldfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbil9O3JldHVybiBzKCl9KDAsMSxbMCwxXSl9LHQuc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXtmdW5jdGlvbiBpKGUpe2lmKGU8PWUpcmV0dXJuIG5bdC5iaXNlY3QocixlKV19aS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfTtpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn07aS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bi5pbmRleE9mKHQpLFtyW3QtMV0sclt0XV19O2kuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9O3JldHVybiBpfShbLjVdLFswLDFdKX0sdC5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuK3R9ci5pbnZlcnQ9cjtyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKHIpLHIpOmV9O3IudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKGUsdCl9O3IudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBfbyhlLHQscil9O3IuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpfTtyZXR1cm4gcn0oWzAsMV0pfSx0LnN2Zz17fSx0LnN2Zy5hcmM9ZnVuY3Rpb24oKXt2YXIgdD1JbyxlPURvLHI9em8sbj1PbyxpPVBvLGE9Um8sbz1GbztmdW5jdGlvbiBzKCl7dmFyIHM9TWF0aC5tYXgoMCwrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGM9TWF0aC5tYXgoMCwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHU9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktRXQsZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxoPU1hdGguYWJzKGYtdSkscD11PmY/MDoxO2lmKGM8cyYmKGQ9YyxjPXMscz1kKSxoPj1TdClyZXR1cm4gbChjLHApKyhzP2wocywxLXApOiIiKSsiWiI7dmFyIGQsZyx2LG0seSx4LGIsXyx3LGssVCxBLE09MCxTPTAsRT1bXTtpZigobT0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwKS8yKSYmKHY9bj09PU9vP01hdGguc3FydChzKnMrYypjKTorbi5hcHBseSh0aGlzLGFyZ3VtZW50cykscHx8KFMqPS0xKSxjJiYoUz1EdCh2L2MqTWF0aC5zaW4obSkpKSxzJiYoTT1EdCh2L3MqTWF0aC5zaW4obSkpKSksYyl7eT1jKk1hdGguY29zKHUrUykseD1jKk1hdGguc2luKHUrUyksYj1jKk1hdGguY29zKGYtUyksXz1jKk1hdGguc2luKGYtUyk7dmFyIEM9TWF0aC5hYnMoZi11LTIqUyk8PUF0PzA6MTtpZihTJiZCbyh5LHgsYixfKT09PXBeQyl7dmFyIEw9KHUrZikvMjt5PWMqTWF0aC5jb3MoTCkseD1jKk1hdGguc2luKEwpLGI9Xz1udWxsfX1lbHNlIHk9eD0wO2lmKHMpe3c9cypNYXRoLmNvcyhmLU0pLGs9cypNYXRoLnNpbihmLU0pLFQ9cypNYXRoLmNvcyh1K00pLEE9cypNYXRoLnNpbih1K00pO3ZhciB6PU1hdGguYWJzKHUtZisyKk0pPD1BdD8wOjE7aWYoTSYmQm8odyxrLFQsQSk9PT0xLXBeeil7dmFyIE89KHUrZikvMjt3PXMqTWF0aC5jb3MoTyksaz1zKk1hdGguc2luKE8pLFQ9QT1udWxsfX1lbHNlIHc9az0wO2lmKGg+a3QmJihkPU1hdGgubWluKE1hdGguYWJzKGMtcykvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpKT4uMDAxKXtnPXM8Y15wPzA6MTt2YXIgST1kLEQ9ZDtpZihoPEF0KXt2YXIgUD1udWxsPT1UP1t3LGtdOm51bGw9PWI/W3kseF06c2koW3kseF0sW1QsQV0sW2IsX10sW3csa10pLFI9eS1QWzBdLEY9eC1QWzFdLEI9Yi1QWzBdLE49Xy1QWzFdLGo9MS9NYXRoLnNpbihNYXRoLmFjb3MoKFIqQitGKk4pLyhNYXRoLnNxcnQoUipSK0YqRikqTWF0aC5zcXJ0KEIqQitOKk4pKSkvMiksVj1NYXRoLnNxcnQoUFswXSpQWzBdK1BbMV0qUFsxXSk7RD1NYXRoLm1pbihkLChzLVYpLyhqLTEpKSxJPU1hdGgubWluKGQsKGMtVikvKGorMSkpfWlmKG51bGwhPWIpe3ZhciBVPU5vKG51bGw9PVQ/W3csa106W1QsQV0sW3kseF0sYyxJLHApLHE9Tm8oW2IsX10sW3csa10sYyxJLHApO2Q9PT1JP0UucHVzaCgiTSIsVVswXSwiQSIsSSwiLCIsSSwiIDAgMCwiLGcsIiAiLFVbMV0sIkEiLGMsIiwiLGMsIiAwICIsMS1wXkJvKFVbMV1bMF0sVVsxXVsxXSxxWzFdWzBdLHFbMV1bMV0pLCIsIixwLCIgIixxWzFdLCJBIixJLCIsIixJLCIgMCAwLCIsZywiICIscVswXSk6RS5wdXNoKCJNIixVWzBdLCJBIixJLCIsIixJLCIgMCAxLCIsZywiICIscVswXSl9ZWxzZSBFLnB1c2goIk0iLHksIiwiLHgpO2lmKG51bGwhPVQpe3ZhciBIPU5vKFt5LHhdLFtULEFdLHMsLUQscCksRz1ObyhbdyxrXSxudWxsPT1iP1t5LHhdOltiLF9dLHMsLUQscCk7ZD09PUQ/RS5wdXNoKCJMIixHWzBdLCJBIixELCIsIixELCIgMCAwLCIsZywiICIsR1sxXSwiQSIscywiLCIscywiIDAgIixwXkJvKEdbMV1bMF0sR1sxXVsxXSxIWzFdWzBdLEhbMV1bMV0pLCIsIiwxLXAsIiAiLEhbMV0sIkEiLEQsIiwiLEQsIiAwIDAsIixnLCIgIixIWzBdKTpFLnB1c2goIkwiLEdbMF0sIkEiLEQsIiwiLEQsIiAwIDAsIixnLCIgIixIWzBdKX1lbHNlIEUucHVzaCgiTCIsdywiLCIsayl9ZWxzZSBFLnB1c2goIk0iLHksIiwiLHgpLG51bGwhPWImJkUucHVzaCgiQSIsYywiLCIsYywiIDAgIixDLCIsIixwLCIgIixiLCIsIixfKSxFLnB1c2goIkwiLHcsIiwiLGspLG51bGwhPVQmJkUucHVzaCgiQSIscywiLCIscywiIDAgIix6LCIsIiwxLXAsIiAiLFQsIiwiLEEpO3JldHVybiBFLnB1c2goIloiKSxFLmpvaW4oIiIpfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4iTTAsIit0KyJBIit0KyIsIit0KyIgMCAxLCIrZSsiIDAsIistdCsiQSIrdCsiLCIrdCsiIDAgMSwiK2UrIiAwLCIrdH1yZXR1cm4gcy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxzKTp0fSxzLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXZlKHQpLHMpOmV9LHMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXZlKHQpLHMpOnJ9LHMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQ9PU9vP09vOnZlKHQpLHMpOm59LHMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT12ZSh0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXZlKHQpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dmUodCkscyk6b30scy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciByPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixuPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1FdDtyZXR1cm5bTWF0aC5jb3MobikqcixNYXRoLnNpbihuKSpyXX0sc307dmFyIE9vPSJhdXRvIjtmdW5jdGlvbiBJbyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBEbyh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBQbyh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIFJvKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIEZvKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIEJvKHQsZSxyLG4pe3JldHVybih0LXIpKmUtKGUtbikqdD4wPzA6MX1mdW5jdGlvbiBObyh0LGUscixuLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPShpP246LW4pL01hdGguc3FydChhKmErbypvKSxsPXMqbyxjPS1zKmEsdT10WzBdK2wsZj10WzFdK2MsaD1lWzBdK2wscD1lWzFdK2MsZD0odStoKS8yLGc9KGYrcCkvMix2PWgtdSxtPXAtZix5PXYqdittKm0seD1yLW4sYj11KnAtaCpmLF89KG08MD8tMToxKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCx4KngqeS1iKmIpKSx3PShiKm0tdipfKS95LGs9KC1iKnYtbSpfKS95LFQ9KGIqbSt2Kl8pL3ksQT0oLWIqdittKl8pL3ksTT13LWQsUz1rLWcsRT1ULWQsQz1BLWc7cmV0dXJuIE0qTStTKlM+RSpFK0MqQyYmKHc9VCxrPUEpLFtbdy1sLGstY10sW3cqci94LGsqci94XV19ZnVuY3Rpb24gam8odCl7dmFyIGU9ZWkscj1yaSxuPVlyLGk9VW8sYT1pLmtleSxvPS43O2Z1bmN0aW9uIHMoYSl7dmFyIHMsbD1bXSxjPVtdLHU9LTEsZj1hLmxlbmd0aCxoPXZlKGUpLHA9dmUocik7ZnVuY3Rpb24gZCgpe2wucHVzaCgiTSIsaSh0KGMpLG8pKX1mb3IoOysrdTxmOyluLmNhbGwodGhpcyxzPWFbdV0sdSk/Yy5wdXNoKFsraC5jYWxsKHRoaXMscyx1KSwrcC5jYWxsKHRoaXMscyx1KV0pOmMubGVuZ3RoJiYoZCgpLGM9W10pO3JldHVybiBjLmxlbmd0aCYmZCgpLGwubGVuZ3RoP2wuam9pbigiIik6bnVsbH1yZXR1cm4gcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscyk6cn0scy5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscyk6bn0scy5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD9pPXQ6KGk9Vm8uZ2V0KHQpfHxVbykua2V5LHMpOmF9LHMudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHMpOm99LHN9dC5zdmcubGluZT1mdW5jdGlvbigpe3JldHVybiBqbyh6KX07dmFyIFZvPXQubWFwKHtsaW5lYXI6VW8sImxpbmVhci1jbG9zZWQiOnFvLHN0ZXA6ZnVuY3Rpb24odCl7dmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTtmb3IoOysrZTxyOylpLnB1c2goIkgiLChuWzBdKyhuPXRbZV0pWzBdKS8yLCJWIixuWzFdKTtyPjEmJmkucHVzaCgiSCIsblswXSk7cmV0dXJuIGkuam9pbigiIil9LCJzdGVwLWJlZm9yZSI6SG8sInN0ZXAtYWZ0ZXIiOkdvLGJhc2lzOlhvLCJiYXNpcy1vcGVuIjpmdW5jdGlvbih0KXtpZih0Lmxlbmd0aDw0KXJldHVybiBVbyh0KTt2YXIgZSxyPVtdLG49LTEsaT10Lmxlbmd0aCxhPVswXSxvPVswXTtmb3IoOysrbjwzOyllPXRbbl0sYS5wdXNoKGVbMF0pLG8ucHVzaChlWzFdKTtyLnB1c2goWm8oS28sYSkrIiwiK1pvKEtvLG8pKSwtLW47Zm9yKDsrK248aTspZT10W25dLGEuc2hpZnQoKSxhLnB1c2goZVswXSksby5zaGlmdCgpLG8ucHVzaChlWzFdKSxRbyhyLGEsbyk7cmV0dXJuIHIuam9pbigiIil9LCJiYXNpcy1jbG9zZWQiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0tMSxpPXQubGVuZ3RoLGE9aSs0LG89W10scz1bXTtmb3IoOysrbjw0OylyPXRbbiVpXSxvLnB1c2goclswXSkscy5wdXNoKHJbMV0pO2U9W1pvKEtvLG8pLCIsIixabyhLbyxzKV0sLS1uO2Zvcig7KytuPGE7KXI9dFtuJWldLG8uc2hpZnQoKSxvLnB1c2goclswXSkscy5zaGlmdCgpLHMucHVzaChyWzFdKSxRbyhlLG8scyk7cmV0dXJuIGUuam9pbigiIil9LGJ1bmRsZTpmdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLTE7aWYocilmb3IodmFyIG4saSxhPXRbMF1bMF0sbz10WzBdWzFdLHM9dFtyXVswXS1hLGw9dFtyXVsxXS1vLGM9LTE7KytjPD1yOyluPXRbY10saT1jL3IsblswXT1lKm5bMF0rKDEtZSkqKGEraSpzKSxuWzFdPWUqblsxXSsoMS1lKSoobytpKmwpO3JldHVybiBYbyh0KX0sY2FyZGluYWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9Vbyh0KTp0WzBdK1lvKHQsV28odCxlKSl9LCJjYXJkaW5hbC1vcGVuIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDw0P1VvKHQpOnRbMV0rWW8odC5zbGljZSgxLC0xKSxXbyh0LGUpKX0sImNhcmRpbmFsLWNsb3NlZCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9xbyh0KTp0WzBdK1lvKCh0LnB1c2godFswXSksdCksV28oW3RbdC5sZW5ndGgtMl1dLmNvbmNhdCh0LFt0WzFdXSksZSkpfSxtb25vdG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg8Mz9Vbyh0KTp0WzBdK1lvKHQsZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT1bXSxvPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj10Lmxlbmd0aC0xLG49W10saT10WzBdLGE9dFsxXSxvPW5bMF09dHMoaSxhKTtmb3IoOysrZTxyOyluW2VdPShvKyhvPXRzKGk9YSxhPXRbZSsxXSkpKS8yO3JldHVybiBuW2VdPW8sbn0odCkscz0tMSxsPXQubGVuZ3RoLTE7Zm9yKDsrK3M8bDspZT10cyh0W3NdLHRbcysxXSkseShlKTxrdD9vW3NdPW9bcysxXT0wOihyPW9bc10vZSxuPW9bcysxXS9lLChpPXIqcituKm4pPjkmJihpPTMqZS9NYXRoLnNxcnQoaSksb1tzXT1pKnIsb1tzKzFdPWkqbikpO3M9LTE7Zm9yKDsrK3M8PWw7KWk9KHRbTWF0aC5taW4obCxzKzEpXVswXS10W01hdGgubWF4KDAscy0xKV1bMF0pLyg2KigxK29bc10qb1tzXSkpLGEucHVzaChbaXx8MCxvW3NdKml8fDBdKTtyZXR1cm4gYX0odCkpfX0pO2Z1bmN0aW9uIFVvKHQpe3JldHVybiB0Lmxlbmd0aD4xP3Quam9pbigiTCIpOnQrIloifWZ1bmN0aW9uIHFvKHQpe3JldHVybiB0LmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gSG8odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07KytlPHI7KWkucHVzaCgiViIsKG49dFtlXSlbMV0sIkgiLG5bMF0pO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIEdvKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dOysrZTxyOylpLnB1c2goIkgiLChuPXRbZV0pWzBdLCJWIixuWzFdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBZbyh0LGUpe2lmKGUubGVuZ3RoPDF8fHQubGVuZ3RoIT1lLmxlbmd0aCYmdC5sZW5ndGghPWUubGVuZ3RoKzIpcmV0dXJuIFVvKHQpO3ZhciByPXQubGVuZ3RoIT1lLmxlbmd0aCxuPSIiLGk9dFswXSxhPXRbMV0sbz1lWzBdLHM9byxsPTE7aWYociYmKG4rPSJRIisoYVswXS0yKm9bMF0vMykrIiwiKyhhWzFdLTIqb1sxXS8zKSsiLCIrYVswXSsiLCIrYVsxXSxpPXRbMV0sbD0yKSxlLmxlbmd0aD4xKXtzPWVbMV0sYT10W2xdLGwrKyxuKz0iQyIrKGlbMF0rb1swXSkrIiwiKyhpWzFdK29bMV0pKyIsIisoYVswXS1zWzBdKSsiLCIrKGFbMV0tc1sxXSkrIiwiK2FbMF0rIiwiK2FbMV07Zm9yKHZhciBjPTI7YzxlLmxlbmd0aDtjKyssbCsrKWE9dFtsXSxzPWVbY10sbis9IlMiKyhhWzBdLXNbMF0pKyIsIisoYVsxXS1zWzFdKSsiLCIrYVswXSsiLCIrYVsxXX1pZihyKXt2YXIgdT10W2xdO24rPSJRIisoYVswXSsyKnNbMF0vMykrIiwiKyhhWzFdKzIqc1sxXS8zKSsiLCIrdVswXSsiLCIrdVsxXX1yZXR1cm4gbn1mdW5jdGlvbiBXbyh0LGUpe2Zvcih2YXIgcixuPVtdLGk9KDEtZSkvMixhPXRbMF0sbz10WzFdLHM9MSxsPXQubGVuZ3RoOysrczxsOylyPWEsYT1vLG89dFtzXSxuLnB1c2goW2kqKG9bMF0tclswXSksaSoob1sxXS1yWzFdKV0pO3JldHVybiBufWZ1bmN0aW9uIFhvKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIFVvKHQpO3ZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT1uWzBdLGE9blsxXSxvPVtpLGksaSwobj10WzFdKVswXV0scz1bYSxhLGEsblsxXV0sbD1baSwiLCIsYSwiTCIsWm8oS28sbyksIiwiLFpvKEtvLHMpXTtmb3IodC5wdXNoKHRbci0xXSk7KytlPD1yOyluPXRbZV0sby5zaGlmdCgpLG8ucHVzaChuWzBdKSxzLnNoaWZ0KCkscy5wdXNoKG5bMV0pLFFvKGwsbyxzKTtyZXR1cm4gdC5wb3AoKSxsLnB1c2goIkwiLG4pLGwuam9pbigiIil9ZnVuY3Rpb24gWm8odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl0rdFszXSplWzNdfVZvLmZvckVhY2goZnVuY3Rpb24odCxlKXtlLmtleT10LGUuY2xvc2VkPS8tY2xvc2VkJC8udGVzdCh0KX0pO3ZhciAkbz1bMCwyLzMsMS8zLDBdLEpvPVswLDEvMywyLzMsMF0sS289WzAsMS82LDIvMywxLzZdO2Z1bmN0aW9uIFFvKHQsZSxyKXt0LnB1c2goIkMiLFpvKCRvLGUpLCIsIixabygkbyxyKSwiLCIsWm8oSm8sZSksIiwiLFpvKEpvLHIpLCIsIixabyhLbyxlKSwiLCIsWm8oS28scikpfWZ1bmN0aW9uIHRzKHQsZSl7cmV0dXJuKGVbMV0tdFsxXSkvKGVbMF0tdFswXSl9ZnVuY3Rpb24gZXModCl7Zm9yKHZhciBlLHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXI9KGU9dFtpXSlbMF0sbj1lWzFdLUV0LGVbMF09cipNYXRoLmNvcyhuKSxlWzFdPXIqTWF0aC5zaW4obik7cmV0dXJuIHR9ZnVuY3Rpb24gcnModCl7dmFyIGU9ZWkscj1laSxuPTAsaT1yaSxhPVlyLG89VW8scz1vLmtleSxsPW8sYz0iTCIsdT0uNztmdW5jdGlvbiBmKHMpe3ZhciBmLGgscCxkPVtdLGc9W10sdj1bXSxtPS0xLHk9cy5sZW5ndGgseD12ZShlKSxiPXZlKG4pLF89ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gaH06dmUociksdz1uPT09aT9mdW5jdGlvbigpe3JldHVybiBwfTp2ZShpKTtmdW5jdGlvbiBrKCl7ZC5wdXNoKCJNIixvKHQodiksdSksYyxsKHQoZy5yZXZlcnNlKCkpLHUpLCJaIil9Zm9yKDsrK208eTspYS5jYWxsKHRoaXMsZj1zW21dLG0pPyhnLnB1c2goW2g9K3guY2FsbCh0aGlzLGYsbSkscD0rYi5jYWxsKHRoaXMsZixtKV0pLHYucHVzaChbK18uY2FsbCh0aGlzLGYsbSksK3cuY2FsbCh0aGlzLGYsbSldKSk6Zy5sZW5ndGgmJihrKCksZz1bXSx2PVtdKTtyZXR1cm4gZy5sZW5ndGgmJmsoKSxkLmxlbmd0aD9kLmpvaW4oIiIpOm51bGx9cmV0dXJuIGYueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yPXQsZik6cn0sZi54MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGYpOmV9LGYueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxmKTpyfSxmLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aT10LGYpOml9LGYueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxmKTpufSxmLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZik6aX0sZi5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZik6YX0sZi5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD9vPXQ6KG89Vm8uZ2V0KHQpfHxVbykua2V5LGw9by5yZXZlcnNlfHxvLGM9by5jbG9zZWQ/Ik0iOiJMIixmKTpzfSxmLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxmKTp1fSxmfWZ1bmN0aW9uIG5zKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBpcyh0KXtyZXR1cm5bdC54LHQueV19ZnVuY3Rpb24gYXMoKXtyZXR1cm4gNjR9ZnVuY3Rpb24gb3MoKXtyZXR1cm4iY2lyY2xlIn1mdW5jdGlvbiBzcyh0KXt2YXIgZT1NYXRoLnNxcnQodC9BdCk7cmV0dXJuIk0wLCIrZSsiQSIrZSsiLCIrZSsiIDAgMSwxIDAsIistZSsiQSIrZSsiLCIrZSsiIDAgMSwxIDAsIitlKyJaIn10LnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PWpvKGVzKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0fSxIby5yZXZlcnNlPUdvLEdvLnJldmVyc2U9SG8sdC5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiBycyh6KX0sdC5zdmcuYXJlYS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1ycyhlcyk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuaW5uZXJSYWRpdXM9dC54MCxkZWxldGUgdC54MCx0Lm91dGVyUmFkaXVzPXQueDEsZGVsZXRlIHQueDEsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0LnN0YXJ0QW5nbGU9dC55MCxkZWxldGUgdC55MCx0LmVuZEFuZ2xlPXQueTEsZGVsZXRlIHQueTEsdH0sdC5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPVVuLHI9bnMsbj1QbyxpPVJvO2Z1bmN0aW9uIGEocixuKXt2YXIgaSxhLGM9byh0aGlzLHQscixuKSx1PW8odGhpcyxlLHIsbik7cmV0dXJuIk0iK2MucDArcyhjLnIsYy5wMSxjLmExLWMuYTApKyhhPXUsKGk9YykuYTA9PWEuYTAmJmkuYTE9PWEuYTE/bChjLnIsYy5wMSxjLnIsYy5wMCk6bChjLnIsYy5wMSx1LnIsdS5wMCkrcyh1LnIsdS5wMSx1LmExLXUuYTApK2wodS5yLHUucDEsYy5yLGMucDApKSsiWiJ9ZnVuY3Rpb24gbyh0LGUsYSxvKXt2YXIgcz1lLmNhbGwodCxhLG8pLGw9ci5jYWxsKHQscyxvKSxjPW4uY2FsbCh0LHMsbyktRXQsdT1pLmNhbGwodCxzLG8pLUV0O3JldHVybntyOmwsYTA6YyxhMTp1LHAwOltsKk1hdGguY29zKGMpLGwqTWF0aC5zaW4oYyldLHAxOltsKk1hdGguY29zKHUpLGwqTWF0aC5zaW4odSldfX1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4iQSIrdCsiLCIrdCsiIDAgIisgKyhyPkF0KSsiLDEgIitlfWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuIlEgMCwwICIrbn1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dmUodCksYSk6cn0sYS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dmUoZSksYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dmUodCksYSk6ZX0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXZlKHQpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dmUodCksYSk6aX0sYX0sdC5zdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPVVuLHI9aXM7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPXQuY2FsbCh0aGlzLG4saSksbz1lLmNhbGwodGhpcyxuLGkpLHM9KGEueStvLnkpLzIsbD1bYSx7eDphLngseTpzfSx7eDpvLngseTpzfSxvXTtyZXR1cm4iTSIrKGw9bC5tYXAocikpWzBdKyJDIitsWzFdKyIgIitsWzJdKyIgIitsWzNdfXJldHVybiBuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxuKTp0fSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSh0KSxuKTplfSxuLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0LnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgZT10LnN2Zy5kaWFnb25hbCgpLHI9aXMsbj1lLnByb2plY3Rpb247cmV0dXJuIGUucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZVswXSxuPWVbMV0tRXQ7cmV0dXJuW3IqTWF0aC5jb3MobikscipNYXRoLnNpbihuKV19fShyPXQpKTpyfSxlfSx0LnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1vcyxlPWFzO2Z1bmN0aW9uIHIocixuKXtyZXR1cm4obHMuZ2V0KHQuY2FsbCh0aGlzLHIsbikpfHxzcykoZS5jYWxsKHRoaXMscixuKSl9cmV0dXJuIHIudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dmUodCkscik6ZX0scn07dmFyIGxzPXQubWFwKHtjaXJjbGU6c3MsY3Jvc3M6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvNSkvMjtyZXR1cm4iTSIrLTMqZSsiLCIrLWUrIkgiKy1lKyJWIistMyplKyJIIitlKyJWIistZSsiSCIrMyplKyJWIitlKyJIIitlKyJWIiszKmUrIkgiKy1lKyJWIitlKyJIIistMyplKyJaIn0sZGlhbW9uZDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC8oMip1cykpLHI9ZSp1cztyZXR1cm4iTTAsIistZSsiTCIrcisiLDAgMCwiK2UrIiAiKy1yKyIsMFoifSxzcXVhcmU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQpLzI7cmV0dXJuIk0iKy1lKyIsIistZSsiTCIrZSsiLCIrLWUrIiAiK2UrIiwiK2UrIiAiKy1lKyIsIitlKyJaIn0sInRyaWFuZ2xlLWRvd24iOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L2NzKSxyPWUqY3MvMjtyZXR1cm4iTTAsIityKyJMIitlKyIsIistcisiICIrLWUrIiwiKy1yKyJaIn0sInRyaWFuZ2xlLXVwIjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC9jcykscj1lKmNzLzI7cmV0dXJuIk0wLCIrLXIrIkwiK2UrIiwiK3IrIiAiKy1lKyIsIityKyJaIn19KTt0LnN2Zy5zeW1ib2xUeXBlcz1scy5rZXlzKCk7dmFyIGNzPU1hdGguc3FydCgzKSx1cz1NYXRoLnRhbigzMCpDdCk7Vy50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49ZHN8fCsrbXMsaT1icyh0KSxhPVtdLG89Z3N8fHt0aW1lOkRhdGUubm93KCksZWFzZTppYSxkZWxheTowLGR1cmF0aW9uOjI1MH0scz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7YS5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsZj1jLmxlbmd0aDsrK3U8ZjspKHI9Y1t1XSkmJl9zKHIsdSxpLG4sbyksZS5wdXNoKHIpfXJldHVybiBwcyhhLGksbil9LFcuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2gobnVsbD09dD9mczpocyhicyh0KSkpfTt2YXIgZnM9aHMoYnMoKSk7ZnVuY3Rpb24gaHModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscixuOyhlPXRoaXNbdF0pJiYobj1lW3I9ZS5hY3RpdmVdKSYmKG4udGltZXIuYz1udWxsLG4udGltZXIudD1OYU4sLS1lLmNvdW50P2RlbGV0ZSBlW3JdOmRlbGV0ZSB0aGlzW3RdLGUuYWN0aXZlKz0uNSxuLmV2ZW50JiZuLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxuLmluZGV4KSl9fWZ1bmN0aW9uIHBzKHQsZSxyKXtyZXR1cm4gVSh0LHZzKSx0Lm5hbWVzcGFjZT1lLHQuaWQ9cix0fXZhciBkcyxncyx2cz1bXSxtcz0wO2Z1bmN0aW9uIHlzKHQsZSxyLG4pe3ZhciBpPXQuaWQsYT10Lm5hbWVzcGFjZTtyZXR1cm4gdXQodCwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbih0LG8scyl7dFthXVtpXS50d2Vlbi5zZXQoZSxuKHIuY2FsbCh0LHQuX19kYXRhX18sbyxzKSkpfToocj1uKHIpLGZ1bmN0aW9uKHQpe3RbYV1baV0udHdlZW4uc2V0KGUscil9KSl9ZnVuY3Rpb24geHModCl7cmV0dXJuIG51bGw9PXQmJih0PSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gYnModCl7cmV0dXJuIG51bGw9PXQ/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrdCsiX18ifWZ1bmN0aW9uIF9zKHQsZSxyLG4saSl7dmFyIGEsbyxzLGwsYyx1PXRbcl18fCh0W3JdPXthY3RpdmU6MCxjb3VudDowfSksZj11W25dO2Z1bmN0aW9uIGgocil7dmFyIGk9dS5hY3RpdmUsaD11W2ldO2Zvcih2YXIgZCBpbiBoJiYoaC50aW1lci5jPW51bGwsaC50aW1lci50PU5hTiwtLXUuY291bnQsZGVsZXRlIHVbaV0saC5ldmVudCYmaC5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0LHQuX19kYXRhX18saC5pbmRleCkpLHUpaWYoK2Q8bil7dmFyIGc9dVtkXTtnLnRpbWVyLmM9bnVsbCxnLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtkXX1vLmM9cCxUZShmdW5jdGlvbigpe3JldHVybiBvLmMmJnAocnx8MSkmJihvLmM9bnVsbCxvLnQ9TmFOKSwxfSwwLGEpLHUuYWN0aXZlPW4sZi5ldmVudCYmZi5ldmVudC5zdGFydC5jYWxsKHQsdC5fX2RhdGFfXyxlKSxjPVtdLGYudHdlZW4uZm9yRWFjaChmdW5jdGlvbihyLG4peyhuPW4uY2FsbCh0LHQuX19kYXRhX18sZSkpJiZjLnB1c2gobil9KSxsPWYuZWFzZSxzPWYuZHVyYXRpb259ZnVuY3Rpb24gcChpKXtmb3IodmFyIGE9aS9zLG89bChhKSxoPWMubGVuZ3RoO2g+MDspY1stLWhdLmNhbGwodCxvKTtpZihhPj0xKXJldHVybiBmLmV2ZW50JiZmLmV2ZW50LmVuZC5jYWxsKHQsdC5fX2RhdGFfXyxlKSwtLXUuY291bnQ/ZGVsZXRlIHVbbl06ZGVsZXRlIHRbcl0sMX1mfHwoYT1pLnRpbWUsbz1UZShmdW5jdGlvbih0KXt2YXIgZT1mLmRlbGF5O2lmKG8udD1lK2EsZTw9dClyZXR1cm4gaCh0LWUpO28uYz1ofSwwLGEpLGY9dVtuXT17dHdlZW46bmV3IGIsdGltZTphLHRpbWVyOm8sZGVsYXk6aS5kZWxheSxkdXJhdGlvbjppLmR1cmF0aW9uLGVhc2U6aS5lYXNlLGluZGV4OmV9LGk9bnVsbCwrK3UuY291bnQpfXZzLmNhbGw9Vy5jYWxsLHZzLmVtcHR5PVcuZW1wdHksdnMubm9kZT1XLm5vZGUsdnMuc2l6ZT1XLnNpemUsdC50cmFuc2l0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJmUudHJhbnNpdGlvbj9kcz9lLnRyYW5zaXRpb24ocik6ZTp0LnNlbGVjdGlvbigpLnRyYW5zaXRpb24oZSl9LHQudHJhbnNpdGlvbi5wcm90b3R5cGU9dnMsdnMuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRoaXMuaWQsYT10aGlzLm5hbWVzcGFjZSxvPVtdO3Q9WCh0KTtmb3IodmFyIHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe28ucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGY9Yy5sZW5ndGg7Kyt1PGY7KShuPWNbdV0pJiYocj10LmNhbGwobixuLl9fZGF0YV9fLHUscykpPygiX19kYXRhX18iaW4gbiYmKHIuX19kYXRhX189bi5fX2RhdGFfXyksX3Mocix1LGEsaSxuW2FdW2ldKSxlLnB1c2gocikpOmUucHVzaChudWxsKX1yZXR1cm4gcHMobyxhLGkpfSx2cy5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRoaXMuaWQscz10aGlzLm5hbWVzcGFjZSxsPVtdO3Q9Wih0KTtmb3IodmFyIGM9LTEsdT10aGlzLmxlbmd0aDsrK2M8dTspZm9yKHZhciBmPXRoaXNbY10saD0tMSxwPWYubGVuZ3RoOysraDxwOylpZihuPWZbaF0pe2E9bltzXVtvXSxyPXQuY2FsbChuLG4uX19kYXRhX18saCxjKSxsLnB1c2goZT1bXSk7Zm9yKHZhciBkPS0xLGc9ci5sZW5ndGg7KytkPGc7KShpPXJbZF0pJiZfcyhpLGQscyxvLGEpLGUucHVzaChpKX1yZXR1cm4gcHMobCxzLG8pfSx2cy5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1jdCh0KSk7Zm9yKHZhciBpPTAsYT10aGlzLmxlbmd0aDtpPGE7aSsrKXtuLnB1c2goZT1bXSk7Zm9yKHZhciBvLHM9MCxsPShvPXRoaXNbaV0pLmxlbmd0aDtzPGw7cysrKShyPW9bc10pJiZ0LmNhbGwocixyLl9fZGF0YV9fLHMsaSkmJmUucHVzaChyKX1yZXR1cm4gcHMobix0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0sdnMudHdlZW49ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtuXVtyXS50d2Vlbi5nZXQodCk6dXQodGhpcyxudWxsPT1lP2Z1bmN0aW9uKGUpe2Vbbl1bcl0udHdlZW4ucmVtb3ZlKHQpfTpmdW5jdGlvbihpKXtpW25dW3JdLnR3ZWVuLnNldCh0LGUpfSl9LHZzLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2ZvcihyIGluIGUpdGhpcy5hdHRyKHIsZVtyXSk7cmV0dXJuIHRoaXN9dmFyIG49InRyYW5zZm9ybSI9PWU/Z2E6WmksaT10Lm5zLnF1YWxpZnkoZSk7ZnVuY3Rpb24gYSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfWZ1bmN0aW9uIG8oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9cmV0dXJuIHlzKHRoaXMsImF0dHIuIitlLHIsaS5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9vOih0Kz0iIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGUodCkpfSl9KX06ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/YToodCs9IiIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlKGkpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKGksZSh0KSl9KX0pfSl9LHZzLmF0dHJUd2Vlbj1mdW5jdGlvbihlLHIpe3ZhciBuPXQubnMucXVhbGlmeShlKTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK2Usbi5sb2NhbD9mdW5jdGlvbih0LGUpe3ZhciBpPXIuY2FsbCh0aGlzLHQsZSx0aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCkpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxpKHQpKX19OmZ1bmN0aW9uKHQsZSl7dmFyIGk9ci5jYWxsKHRoaXMsdCxlLHRoaXMuZ2V0QXR0cmlidXRlKG4pKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUobixpKHQpKX19KX0sdnMuc3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9IiIpLHQpdGhpcy5zdHlsZShyLHRbcl0sZSk7cmV0dXJuIHRoaXN9cj0iIn1mdW5jdGlvbiBpKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX1yZXR1cm4geXModGhpcywic3R5bGUuIit0LGUsZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/aTooZSs9IiIsZnVuY3Rpb24oKXt2YXIgbixpPW8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIGkhPT1lJiYobj1aaShpLGUpLGZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuKGUpLHIpfSl9KX0pfSx2cy5zdHlsZVR3ZWVuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj0iIiksdGhpcy50d2Vlbigic3R5bGUuIit0LGZ1bmN0aW9uKG4saSl7dmFyIGE9ZS5jYWxsKHRoaXMsbixpLG8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCkpO3JldHVybiBhJiZmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsYShlKSxyKX19KX0sdnMudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4geXModGhpcywidGV4dCIsdCx4cyl9LHZzLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubmFtZXNwYWNlO3JldHVybiB0aGlzLmVhY2goImVuZC50cmFuc2l0aW9uIixmdW5jdGlvbigpe3ZhciBlO3RoaXNbdF0uY291bnQ8MiYmKGU9dGhpcy5wYXJlbnROb2RlKSYmZS5yZW1vdmVDaGlsZCh0aGlzKX0pfSx2cy5lYXNlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW25dW3JdLmVhc2U6KCJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT10LmVhc2UuYXBwbHkodCxhcmd1bWVudHMpKSx1dCh0aGlzLGZ1bmN0aW9uKHQpe3Rbbl1bcl0uZWFzZT1lfSkpfSx2cy5kZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kZWxheTp1dCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmRlbGF5PSt0LmNhbGwobixuLl9fZGF0YV9fLGksYSl9Oih0PSt0LGZ1bmN0aW9uKG4pe25bcl1bZV0uZGVsYXk9dH0pKX0sdnMuZHVyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZHVyYXRpb246dXQodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbihuLGksYSl7bltyXVtlXS5kdXJhdGlvbj1NYXRoLm1heCgxLHQuY2FsbChuLG4uX19kYXRhX18saSxhKSl9Oih0PU1hdGgubWF4KDEsdCksZnVuY3Rpb24obil7bltyXVtlXS5kdXJhdGlvbj10fSkpfSx2cy5lYWNoPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5pZCxpPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9Z3Msbz1kczt0cnl7ZHM9bix1dCh0aGlzLGZ1bmN0aW9uKHQscixhKXtncz10W2ldW25dLGUuY2FsbCh0LHQuX19kYXRhX18scixhKX0pfWZpbmFsbHl7Z3M9YSxkcz1vfX1lbHNlIHV0KHRoaXMsZnVuY3Rpb24oYSl7dmFyIG89YVtpXVtuXTsoby5ldmVudHx8KG8uZXZlbnQ9dC5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSkpLm9uKGUscil9KTtyZXR1cm4gdGhpc30sdnMudHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbj10aGlzLmlkLGk9KyttcyxhPXRoaXMubmFtZXNwYWNlLG89W10scz0wLGw9dGhpcy5sZW5ndGg7czxsO3MrKyl7by5wdXNoKHQ9W10pO2Zvcih2YXIgYyx1PTAsZj0oYz10aGlzW3NdKS5sZW5ndGg7dTxmO3UrKykoZT1jW3VdKSYmX3MoZSx1LGEsaSx7dGltZToocj1lW2FdW25dKS50aW1lLGVhc2U6ci5lYXNlLGRlbGF5OnIuZGVsYXkrci5kdXJhdGlvbixkdXJhdGlvbjpyLmR1cmF0aW9ufSksdC5wdXNoKGUpfXJldHVybiBwcyhvLGEsaSl9LHQuc3ZnLmF4aXM9ZnVuY3Rpb24oKXt2YXIgZSxyPXQuc2NhbGUubGluZWFyKCksaT13cyxhPTYsbz02LHM9MyxsPVsxMF0sYz1udWxsO2Z1bmN0aW9uIHUobil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG4sdT10LnNlbGVjdCh0aGlzKSxmPXRoaXMuX19jaGFydF9ffHxyLGg9dGhpcy5fX2NoYXJ0X189ci5jb3B5KCkscD1udWxsPT1jP2gudGlja3M/aC50aWNrcy5hcHBseShoLGwpOmguZG9tYWluKCk6YyxkPW51bGw9PWU/aC50aWNrRm9ybWF0P2gudGlja0Zvcm1hdC5hcHBseShoLGwpOno6ZSxnPXUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEocCxoKSx2PWcuZW50ZXIoKS5pbnNlcnQoImciLCIuZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLGt0KSxtPXQudHJhbnNpdGlvbihnLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLGt0KS5yZW1vdmUoKSx5PXQudHJhbnNpdGlvbihnLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5IiwxKSx4PU1hdGgubWF4KGEsMCkrcyxiPXVvKGgpLF89dS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksdz0oXy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiksdC50cmFuc2l0aW9uKF8pKTt2LmFwcGVuZCgibGluZSIpLHYuYXBwZW5kKCJ0ZXh0Iik7dmFyIGssVCxBLE0sUz12LnNlbGVjdCgibGluZSIpLEU9eS5zZWxlY3QoImxpbmUiKSxDPWcuc2VsZWN0KCJ0ZXh0IikudGV4dChkKSxMPXYuc2VsZWN0KCJ0ZXh0IiksTz15LnNlbGVjdCgidGV4dCIpLEk9InRvcCI9PT1pfHwibGVmdCI9PT1pPy0xOjE7aWYoImJvdHRvbSI9PT1pfHwidG9wIj09PWk/KG49VHMsaz0ieCIsQT0ieSIsVD0ieDIiLE09InkyIixDLmF0dHIoImR5IixJPDA/IjBlbSI6Ii43MWVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksdy5hdHRyKCJkIiwiTSIrYlswXSsiLCIrSSpvKyJWMEgiK2JbMV0rIlYiK0kqbykpOihuPUFzLGs9InkiLEE9IngiLFQ9InkyIixNPSJ4MiIsQy5hdHRyKCJkeSIsIi4zMmVtIikuc3R5bGUoInRleHQtYW5jaG9yIixJPDA/ImVuZCI6InN0YXJ0Iiksdy5hdHRyKCJkIiwiTSIrSSpvKyIsIitiWzBdKyJIMFYiK2JbMV0rIkgiK0kqbykpLFMuYXR0cihNLEkqYSksTC5hdHRyKEEsSSp4KSxFLmF0dHIoVCwwKS5hdHRyKE0sSSphKSxPLmF0dHIoaywwKS5hdHRyKEEsSSp4KSxoLnJhbmdlQmFuZCl7dmFyIEQ9aCxQPUQucmFuZ2VCYW5kKCkvMjtmPWg9ZnVuY3Rpb24odCl7cmV0dXJuIEQodCkrUH19ZWxzZSBmLnJhbmdlQmFuZD9mPWg6bS5jYWxsKG4saCxmKTt2LmNhbGwobixmLGgpLHkuY2FsbChuLGgsaCl9KX1yZXR1cm4gdS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHUpOnJ9LHUub3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQgaW4ga3M/dCsiIjp3cyx1KTppfSx1LnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bihhcmd1bWVudHMpLHUpOmx9LHUudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHUpOmN9LHUudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHUpOmV9LHUudGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZT8oYT0rdCxvPSthcmd1bWVudHNbZS0xXSx1KTphfSx1LmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsdSk6YX0sdS5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LHUpOm99LHUudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdSk6c30sdS50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnV9LHV9O3ZhciB3cz0iYm90dG9tIixrcz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2Z1bmN0aW9uIFRzKHQsZSxyKXt0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrKGlzRmluaXRlKG4pP246cih0KSkrIiwwKSJ9KX1mdW5jdGlvbiBBcyh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKG4pP246cih0KSkrIikifSl9dC5zdmcuYnJ1c2g9ZnVuY3Rpb24oKXt2YXIgZSxyLG49aihoLCJicnVzaHN0YXJ0IiwiYnJ1c2giLCJicnVzaGVuZCIpLGk9bnVsbCxhPW51bGwscz1bMCwwXSxsPVswLDBdLGM9ITAsdT0hMCxmPVNzWzBdO2Z1bmN0aW9uIGgoZSl7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dC5zZWxlY3QodGhpcykuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIix2KS5vbigidG91Y2hzdGFydC5icnVzaCIsdikscj1lLnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoImN1cnNvciIsImNyb3NzaGFpciIpLGUuc2VsZWN0QWxsKCIuZXh0ZW50IikuZGF0YShbMF0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJleHRlbnQiKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpO3ZhciBuPWUuc2VsZWN0QWxsKCIucmVzaXplIikuZGF0YShmLHopO24uZXhpdCgpLnJlbW92ZSgpLG4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInJlc2l6ZSAiK3R9KS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4gTXNbdF19KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4vW2V3XSQvLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybi9eW25zXS8udGVzdCh0KT8tMzpudWxsfSkuYXR0cigid2lkdGgiLDYpLmF0dHIoImhlaWdodCIsNikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKSxuLnN0eWxlKCJkaXNwbGF5IixoLmVtcHR5KCk/Im5vbmUiOm51bGwpO3ZhciBvLHM9dC50cmFuc2l0aW9uKGUpLGw9dC50cmFuc2l0aW9uKHIpO2kmJihvPXVvKGkpLGwuYXR0cigieCIsb1swXSkuYXR0cigid2lkdGgiLG9bMV0tb1swXSksZChzKSksYSYmKG89dW8oYSksbC5hdHRyKCJ5IixvWzBdKS5hdHRyKCJoZWlnaHQiLG9bMV0tb1swXSksZyhzKSkscChzKX0pfWZ1bmN0aW9uIHAodCl7dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitzWysvZSQvLnRlc3QodCldKyIsIitsWysvXnMvLnRlc3QodCldKyIpIn0pfWZ1bmN0aW9uIGQodCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ4IixzWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwubj5yZWN0LC5zPnJlY3QiKS5hdHRyKCJ3aWR0aCIsc1sxXS1zWzBdKX1mdW5jdGlvbiBnKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsbFswXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0cigiaGVpZ2h0IixsWzFdLWxbMF0pfWZ1bmN0aW9uIHYoKXt2YXIgZix2LG09dGhpcyx5PXQuc2VsZWN0KHQuZXZlbnQudGFyZ2V0KSx4PW4ub2YobSxhcmd1bWVudHMpLGI9dC5zZWxlY3QobSksXz15LmRhdHVtKCksdz0hL14obnxzKSQvLnRlc3QoXykmJmksaz0hL14oZXx3KSQvLnRlc3QoXykmJmEsVD15LmNsYXNzZWQoImV4dGVudCIpLEE9eHQobSksTT10Lm1vdXNlKG0pLFM9dC5zZWxlY3QobyhtKSkub24oImtleWRvd24uYnJ1c2giLGZ1bmN0aW9uKCl7MzI9PXQuZXZlbnQua2V5Q29kZSYmKFR8fChmPW51bGwsTVswXS09c1sxXSxNWzFdLT1sWzFdLFQ9MiksQigpKX0pLm9uKCJrZXl1cC5icnVzaCIsZnVuY3Rpb24oKXszMj09dC5ldmVudC5rZXlDb2RlJiYyPT1UJiYoTVswXSs9c1sxXSxNWzFdKz1sWzFdLFQ9MCxCKCkpfSk7aWYodC5ldmVudC5jaGFuZ2VkVG91Y2hlcz9TLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLEwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsTyk6Uy5vbigibW91c2Vtb3ZlLmJydXNoIixMKS5vbigibW91c2V1cC5icnVzaCIsTyksYi5pbnRlcnJ1cHQoKS5zZWxlY3RBbGwoIioiKS5pbnRlcnJ1cHQoKSxUKU1bMF09c1swXS1NWzBdLE1bMV09bFswXS1NWzFdO2Vsc2UgaWYoXyl7dmFyIEU9Ky93JC8udGVzdChfKSxDPSsvXm4vLnRlc3QoXyk7dj1bc1sxLUVdLU1bMF0sbFsxLUNdLU1bMV1dLE1bMF09c1tFXSxNWzFdPWxbQ119ZWxzZSB0LmV2ZW50LmFsdEtleSYmKGY9TS5zbGljZSgpKTtmdW5jdGlvbiBMKCl7dmFyIGU9dC5tb3VzZShtKSxyPSExO3YmJihlWzBdKz12WzBdLGVbMV0rPXZbMV0pLFR8fCh0LmV2ZW50LmFsdEtleT8oZnx8KGY9WyhzWzBdK3NbMV0pLzIsKGxbMF0rbFsxXSkvMl0pLE1bMF09c1srKGVbMF08ZlswXSldLE1bMV09bFsrKGVbMV08ZlsxXSldKTpmPW51bGwpLHcmJnooZSxpLDApJiYoZChiKSxyPSEwKSxrJiZ6KGUsYSwxKSYmKGcoYikscj0hMCksciYmKHAoYikseCh7dHlwZToiYnJ1c2giLG1vZGU6VD8ibW92ZSI6InJlc2l6ZSJ9KSl9ZnVuY3Rpb24geih0LG4saSl7dmFyIGEsbyxoPXVvKG4pLHA9aFswXSxkPWhbMV0sZz1NW2ldLHY9aT9sOnMsbT12WzFdLXZbMF07aWYoVCYmKHAtPWcsZC09bStnKSxhPShpP3U6Yyk/TWF0aC5tYXgocCxNYXRoLm1pbihkLHRbaV0pKTp0W2ldLFQ/bz0oYSs9ZykrbTooZiYmKGc9TWF0aC5tYXgocCxNYXRoLm1pbihkLDIqZltpXS1hKSkpLGc8YT8obz1hLGE9Zyk6bz1nKSx2WzBdIT1hfHx2WzFdIT1vKXJldHVybiBpP3I9bnVsbDplPW51bGwsdlswXT1hLHZbMV09bywhMH1mdW5jdGlvbiBPKCl7TCgpLGIuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLGguZW1wdHkoKT8ibm9uZSI6bnVsbCksdC5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxTLm9uKCJtb3VzZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigidG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwpLm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwpLEEoKSx4KHt0eXBlOiJicnVzaGVuZCJ9KX1iLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksdC5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIix5LnN0eWxlKCJjdXJzb3IiKSkseCh7dHlwZToiYnJ1c2hzdGFydCJ9KSxMKCl9cmV0dXJuIGguZXZlbnQ9ZnVuY3Rpb24oaSl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9bi5vZih0aGlzLGFyZ3VtZW50cyksYT17eDpzLHk6bCxpOmUsajpyfSxvPXRoaXMuX19jaGFydF9ffHxhO3RoaXMuX19jaGFydF9fPWEsZHM/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe2U9by5pLHI9by5qLHM9by54LGw9by55LGkoe3R5cGU6ImJydXNoc3RhcnQifSl9KS50d2VlbigiYnJ1c2g6YnJ1c2giLGZ1bmN0aW9uKCl7dmFyIHQ9JGkocyxhLngpLG49JGkobCxhLnkpO3JldHVybiBlPXI9bnVsbCxmdW5jdGlvbihlKXtzPWEueD10KGUpLGw9YS55PW4oZSksaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KS5lYWNoKCJlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7ZT1hLmkscj1hLmosaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxpKHt0eXBlOiJicnVzaGVuZCJ9KX0pOihpKHt0eXBlOiJicnVzaHN0YXJ0In0pLGkoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksaSh7dHlwZToiYnJ1c2hlbmQifSkpfSl9LGgueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1Tc1shKGk9dCk8PDF8IWFdLGgpOml9LGgueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1Tc1shaTw8MXwhKGE9dCldLGgpOmF9LGguY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkmJmE/KGM9ISF0WzBdLHU9ISF0WzFdKTppP2M9ISF0OmEmJih1PSEhdCksaCk6aSYmYT9bYyx1XTppP2M6YT91Om51bGx9LGguZXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuLG8sYyx1LGY7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkmJihuPXRbMF0sbz10WzFdLGEmJihuPW5bMF0sbz1vWzBdKSxlPVtuLG9dLGkuaW52ZXJ0JiYobj1pKG4pLG89aShvKSksbzxuJiYoZj1uLG49byxvPWYpLG49PXNbMF0mJm89PXNbMV18fChzPVtuLG9dKSksYSYmKGM9dFswXSx1PXRbMV0saSYmKGM9Y1sxXSx1PXVbMV0pLHI9W2MsdV0sYS5pbnZlcnQmJihjPWEoYyksdT1hKHUpKSx1PGMmJihmPWMsYz11LHU9ZiksYz09bFswXSYmdT09bFsxXXx8KGw9W2MsdV0pKSxoKTooaSYmKGU/KG49ZVswXSxvPWVbMV0pOihuPXNbMF0sbz1zWzFdLGkuaW52ZXJ0JiYobj1pLmludmVydChuKSxvPWkuaW52ZXJ0KG8pKSxvPG4mJihmPW4sbj1vLG89ZikpKSxhJiYocj8oYz1yWzBdLHU9clsxXSk6KGM9bFswXSx1PWxbMV0sYS5pbnZlcnQmJihjPWEuaW52ZXJ0KGMpLHU9YS5pbnZlcnQodSkpLHU8YyYmKGY9YyxjPXUsdT1mKSkpLGkmJmE/W1tuLGNdLFtvLHVdXTppP1tuLG9dOmEmJltjLHVdKX0saC5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBoLmVtcHR5KCl8fChzPVswLDBdLGw9WzAsMF0sZT1yPW51bGwpLGh9LGguZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIWkmJnNbMF09PXNbMV18fCEhYSYmbFswXT09bFsxXX0sdC5yZWJpbmQoaCxuLCJvbiIpfTt2YXIgTXM9e246Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sU3M9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sRXM9SWUuZm9ybWF0PXNyLnRpbWVGb3JtYXQsQ3M9RXMudXRjLExzPUNzKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTtmdW5jdGlvbiB6cyh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIE9zKGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiBlKHQpfWZ1bmN0aW9uIGEoZSxuKXt2YXIgaT0oZVsxXS1lWzBdKS9uLGE9dC5iaXNlY3QoRHMsaSk7cmV0dXJuIGE9PURzLmxlbmd0aD9bci55ZWFyLHhvKGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LzMxNTM2ZTZ9KSxuKVsyXV06YT9yW2kvRHNbYS0xXTxEc1thXS9pP2EtMTphXTpbRnMseG8oZSxuKVsyXV19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBJcyhlLmludmVydCh0KSl9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbih0KSxpKTplLmRvbWFpbigpLm1hcChJcyl9LGkubmljZT1mdW5jdGlvbih0LGUpe3ZhciByPWkuZG9tYWluKCksbj1jbyhyKSxvPW51bGw9PXQ/YShuLDEwKToibnVtYmVyIj09dHlwZW9mIHQmJmEobix0KTtmdW5jdGlvbiBzKHIpe3JldHVybiFpc05hTihyKSYmIXQucmFuZ2UocixJcygrcisxKSxlKS5sZW5ndGh9cmV0dXJuIG8mJih0PW9bMF0sZT1vWzFdKSxpLmRvbWFpbihobyhyLGU+MT97Zmxvb3I6ZnVuY3Rpb24oZSl7Zm9yKDtzKGU9dC5mbG9vcihlKSk7KWU9SXMoZS0xKTtyZXR1cm4gZX0sY2VpbDpmdW5jdGlvbihlKXtmb3IoO3MoZT10LmNlaWwoZSkpOyllPUlzKCtlKzEpO3JldHVybiBlfX06dCkpfSxpLnRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Y28oaS5kb21haW4oKSksbj1udWxsPT10P2EociwxMCk6Im51bWJlciI9PXR5cGVvZiB0P2Eocix0KTohdC5yYW5nZSYmW3tyYW5nZTp0fSxlXTtyZXR1cm4gbiYmKHQ9blswXSxlPW5bMV0pLHQucmFuZ2UoclswXSxJcygrclsxXSsxKSxlPDE/MTplKX0saS50aWNrRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIG59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBPcyhlLmNvcHkoKSxyLG4pfSxtbyhpLGUpfWZ1bmN0aW9uIElzKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1Fcy5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcmJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/enM6THMsenMucGFyc2U9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX0senMudG9TdHJpbmc9THMudG9TdHJpbmcsSWUuc2Vjb25kPUZlKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrMWUzKk1hdGguZmxvb3IoZSkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCl9KSxJZS5zZWNvbmRzPUllLnNlY29uZC5yYW5nZSxJZS5zZWNvbmRzLnV0Yz1JZS5zZWNvbmQudXRjLnJhbmdlLEllLm1pbnV0ZT1GZShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERlKDZlNCpNYXRoLmZsb29yKHQvNmU0KSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksSWUubWludXRlcz1JZS5taW51dGUucmFuZ2UsSWUubWludXRlcy51dGM9SWUubWludXRlLnV0Yy5yYW5nZSxJZS5ob3VyPUZlKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1cm4gbmV3IERlKDM2ZTUqKE1hdGguZmxvb3IodC8zNmU1LWUpK2UpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLEllLmhvdXJzPUllLmhvdXIucmFuZ2UsSWUuaG91cnMudXRjPUllLmhvdXIudXRjLnJhbmdlLEllLm1vbnRoPUZlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0RGF0ZSgxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksSWUubW9udGhzPUllLm1vbnRoLnJhbmdlLEllLm1vbnRocy51dGM9SWUubW9udGgudXRjLnJhbmdlO3ZhciBEcz1bMWUzLDVlMywxNWUzLDNlNCw2ZTQsM2U1LDllNSwxOGU1LDM2ZTUsMTA4ZTUsMjE2ZTUsNDMyZTUsODY0ZTUsMTcyOGU1LDYwNDhlNSwyNTkyZTYsNzc3NmU2LDMxNTM2ZTZdLFBzPVtbSWUuc2Vjb25kLDFdLFtJZS5zZWNvbmQsNV0sW0llLnNlY29uZCwxNV0sW0llLnNlY29uZCwzMF0sW0llLm1pbnV0ZSwxXSxbSWUubWludXRlLDVdLFtJZS5taW51dGUsMTVdLFtJZS5taW51dGUsMzBdLFtJZS5ob3VyLDFdLFtJZS5ob3VyLDNdLFtJZS5ob3VyLDZdLFtJZS5ob3VyLDEyXSxbSWUuZGF5LDFdLFtJZS5kYXksMl0sW0llLndlZWssMV0sW0llLm1vbnRoLDFdLFtJZS5tb250aCwzXSxbSWUueWVhciwxXV0sUnM9RXMubXVsdGkoW1siLiVMIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCkmJjEhPXQuZ2V0RGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24odCl7cmV0dXJuIDEhPXQuZ2V0RGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX1dLFsiJVkiLFlyXV0pLEZzPXtyYW5nZTpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQucmFuZ2UoTWF0aC5jZWlsKGUvbikqbiwrcixuKS5tYXAoSXMpfSxmbG9vcjp6LGNlaWw6en07UHMueWVhcj1JZS55ZWFyLEllLnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIE9zKHQuc2NhbGUubGluZWFyKCksUHMsUnMpfTt2YXIgQnM9UHMubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdLnV0Yyx0WzFdXX0pLE5zPUNzLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RheSgpJiYxIT10LmdldFVUQ0RhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKHQpe3JldHVybiAxIT10LmdldFVUQ0RhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9XSxbIiVZIixZcl1dKTtmdW5jdGlvbiBqcyh0KXtyZXR1cm4gSlNPTi5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gVnModCl7dmFyIGU9aS5jcmVhdGVSYW5nZSgpO3JldHVybiBlLnNlbGVjdE5vZGUoaS5ib2R5KSxlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9QnMueWVhcj1JZS55ZWFyLnV0YyxJZS5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gT3ModC5zY2FsZS5saW5lYXIoKSxCcyxOcyl9LHQudGV4dD1tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVRleHR9KSx0Lmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4geWUodCwiYXBwbGljYXRpb24vanNvbiIsanMsZSl9LHQuaHRtbD1mdW5jdGlvbih0LGUpe3JldHVybiB5ZSh0LCJ0ZXh0L2h0bWwiLFZzLGUpfSx0LnhtbD1tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVhNTH0pLCJvYmplY3QiPT10eXBlb2YgZSYmZS5leHBvcnRzP2UuZXhwb3J0cz10OnRoaXMuZDM9dH0oKX0se31dLDE1NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspaWYodm9pZCAwIT09YXJndW1lbnRzW3RdKXJldHVybiBhcmd1bWVudHNbdF19fSx7fV0sMTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImluY3JlbWVudGFsLWNvbnZleC1odWxsIiksaT10KCJ1bmlxIik7ZnVuY3Rpb24gYSh0LGUpe3RoaXMucG9pbnQ9dCx0aGlzLmluZGV4PWV9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj10LnBvaW50LG49ZS5wb2ludCxpPXIubGVuZ3RoLGE9MDthPGk7KythKXt2YXIgbz1uW2FdLXJbYV07aWYobylyZXR1cm4gb31yZXR1cm4gMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTt2YXIgcz10WzBdLmxlbmd0aDtpZihzPDEpcmV0dXJuW107aWYoMT09PXMpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZigxPT09dClyZXR1cm4gcj9bWy0xLDBdXTpbXTt2YXIgbj1lLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdLGVdfSk7bi5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pO2Zvcih2YXIgaT1uZXcgQXJyYXkodC0xKSxhPTE7YTx0OysrYSl7dmFyIG89blthLTFdLHM9blthXTtpW2EtMV09W29bMV0sc1sxXV19ciYmaS5wdXNoKFstMSxpWzBdWzFdXSxbaVt0LTFdWzFdLC0xXSk7cmV0dXJuIGl9KHIsdCxlKTtmb3IodmFyIGw9bmV3IEFycmF5KHIpLGM9MSx1PTA7dTxyOysrdSl7Zm9yKHZhciBmPXRbdV0saD1uZXcgQXJyYXkocysxKSxwPTAsZD0wO2Q8czsrK2Qpe3ZhciBnPWZbZF07aFtkXT1nLHArPWcqZ31oW3NdPXAsbFt1XT1uZXcgYShoLHUpLGM9TWF0aC5tYXgocCxjKX1pKGwsbykscj1sLmxlbmd0aDtmb3IodmFyIHY9bmV3IEFycmF5KHIrcysxKSxtPW5ldyBBcnJheShyK3MrMSkseT0ocysxKSoocysxKSpjLHg9bmV3IEFycmF5KHMrMSksdT0wO3U8PXM7Kyt1KXhbdV09MDt4W3NdPXksdlswXT14LnNsaWNlKCksbVswXT0tMTtmb3IodmFyIHU9MDt1PD1zOysrdSl7dmFyIGg9eC5zbGljZSgpO2hbdV09MSx2W3UrMV09aCxtW3UrMV09LTF9Zm9yKHZhciB1PTA7dTxyOysrdSl7dmFyIGI9bFt1XTt2W3UrcysxXT1iLnBvaW50LG1bdStzKzFdPWIuaW5kZXh9dmFyIF89bih2LCExKTtfPWU/Xy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PXM7KytyKXt2YXIgbj1tW3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pOl8uZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8PXM7KytlKXt2YXIgcj1tW3RbZV1dO2lmKHI8MClyZXR1cm4hMTt0W2VdPXJ9cmV0dXJuITB9KTtpZigxJnMpZm9yKHZhciB1PTA7dTxfLmxlbmd0aDsrK3Upe3ZhciBiPV9bdV0saD1iWzBdO2JbMF09YlsxXSxiWzFdPWh9cmV0dXJuIF99fSx7ImluY3JlbWVudGFsLWNvbnZleC1odWxsIjo0MDUsdW5pcTo1MzF9XSwxNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWE7dmFyIG49KGEuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS5nZXRDb250ZXh0KCIyZCIpLGk9byhbMzIsMTI2XSk7ZnVuY3Rpb24gYSh0LGUpe0FycmF5LmlzQXJyYXkodCkmJih0PXQuam9pbigiLCAiKSk7dmFyIHIsYT17fSxzPTE2LGw9LjA1O2UmJigyPT09ZS5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgZVswXT9yPW8oZSk6QXJyYXkuaXNBcnJheShlKT9yPWU6KGUubz9yPW8oZS5vKTplLnBhaXJzJiYocj1lLnBhaXJzKSxlLmZvbnRTaXplJiYocz1lLmZvbnRTaXplKSxudWxsIT1lLnRocmVzaG9sZCYmKGw9ZS50aHJlc2hvbGQpKSkscnx8KHI9aSksbi5mb250PXMrInB4ICIrdDtmb3IodmFyIGM9MDtjPHIubGVuZ3RoO2MrKyl7dmFyIHU9cltjXSxmPW4ubWVhc3VyZVRleHQodVswXSkud2lkdGgrbi5tZWFzdXJlVGV4dCh1WzFdKS53aWR0aCxoPW4ubWVhc3VyZVRleHQodSkud2lkdGg7aWYoTWF0aC5hYnMoZi1oKT5zKmwpe3ZhciBwPShoLWYpL3M7YVt1XT0xZTMqcH19cmV0dXJuIGF9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj10WzBdO3I8PXRbMV07cisrKWZvcih2YXIgbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLGk9dFswXTtpPHRbMV07aSsrKXt2YXIgYT1uK1N0cmluZy5mcm9tQ2hhckNvZGUoaSk7ZS5wdXNoKGEpfXJldHVybiBlfWEuY3JlYXRlUGFpcnM9byxhLmFzY2lpPWl9LHt9XSwxNTg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7dmFyIHI9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDY0QXJyYXkpe3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoMSksaT1uZXcgVWludDMyQXJyYXkobi5idWZmZXIpO2lmKG5bMF09MSxyPSEwLDEwNzI2OTMyNDg9PT1pWzFdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVswXSxpWzFdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVswXT10LGlbMV09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfX1lbHNlIGlmKDEwNzI2OTMyNDg9PT1pWzBdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVsxXSxpWzBdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVsxXT10LGlbMF09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfX1lbHNlIHI9ITF9aWYoIXIpe3ZhciBhPW5ldyB0KDgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksW2EucmVhZFVJbnQzMkxFKDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS53cml0ZVVJbnQzMkxFKHQsMCwhMCksYS53cml0ZVVJbnQzMkxFKGUsNCwhMCksYS5yZWFkRG91YmxlTEUoMCwhMCl9LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoMCwhMCl9LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoNCwhMCl9fWUuZXhwb3J0cy5zaWduPWZ1bmN0aW9uKHQpe3JldHVybiBlLmV4cG9ydHMuaGkodCk+Pj4zMX0sZS5leHBvcnRzLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybihlLmV4cG9ydHMuaGkodCk8PDE+Pj4yMSktMTAyM30sZS5leHBvcnRzLmZyYWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciByPWUuZXhwb3J0cy5sbyh0KSxuPWUuZXhwb3J0cy5oaSh0KSxpPTEwNDg1NzUmbjtyZXR1cm4gMjE0NjQzNTA3MiZuJiYoaSs9MTw8MjApLFtyLGldfSxlLmV4cG9ydHMuZGVub3JtYWxpemVkPWZ1bmN0aW9uKHQpe3JldHVybiEoMjE0NjQzNTA3MiZlLmV4cG9ydHMuaGkodCkpfX0pLmNhbGwodGhpcyx0KCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjk1fV0sMTU5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiYWJzLXN2Zy1wYXRoIiksaT10KCJub3JtYWxpemUtc3ZnLXBhdGgiKSxhPXtNOiJtb3ZlVG8iLEM6ImJlemllckN1cnZlVG8ifTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmJlZ2luUGF0aCgpLGkobihlKSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLG49ZS5zbGljZSgxKTt0W2Fbcl1dLmFwcGx5KHQsbil9KSx0LmNsb3NlUGF0aCgpfX0seyJhYnMtc3ZnLXBhdGgiOjUwLCJub3JtYWxpemUtc3ZnLXBhdGgiOjQ0NH1dLDE2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJpbnQ4IjpyZXR1cm4gSW50OEFycmF5O2Nhc2UiaW50MTYiOnJldHVybiBJbnQxNkFycmF5O2Nhc2UiaW50MzIiOnJldHVybiBJbnQzMkFycmF5O2Nhc2UidWludDgiOnJldHVybiBVaW50OEFycmF5O2Nhc2UidWludDE2IjpyZXR1cm4gVWludDE2QXJyYXk7Y2FzZSJ1aW50MzIiOnJldHVybiBVaW50MzJBcnJheTtjYXNlImZsb2F0MzIiOnJldHVybiBGbG9hdDMyQXJyYXk7Y2FzZSJmbG9hdDY0IjpyZXR1cm4gRmxvYXQ2NEFycmF5O2Nhc2UiYXJyYXkiOnJldHVybiBBcnJheTtjYXNlInVpbnQ4X2NsYW1wZWQiOnJldHVybiBVaW50OENsYW1wZWRBcnJheX19fSx7fV0sMTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3N3aXRjaCgidW5kZWZpbmVkIj09dHlwZW9mIGUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn0oMHx0LGUpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wfGVbbl07aWYoaTw9MClyZXR1cm5bXTt2YXIgYSxvPW5ldyBBcnJheShpKTtpZihuPT09ZS5sZW5ndGgtMSlmb3IoYT0wO2E8aTsrK2Epb1thXT1yO2Vsc2UgZm9yKGE9MDthPGk7KythKW9bYV09dChlLHIsbisxKTtyZXR1cm4gb30odCxlLDApfXJldHVybltdfX0se31dLDE2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyPXJ8fDI7dmFyIG4scyxsLGMsdSxwLGcsdj1lJiZlLmxlbmd0aCxtPXY/ZVswXSpyOnQubGVuZ3RoLHk9aSh0LDAsbSxyLCEwKSx4PVtdO2lmKCF5KXJldHVybiB4O2lmKHYmJih5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBvLHMsbCxjLHUscD1bXTtmb3Iobz0wLHM9ZS5sZW5ndGg7bzxzO28rKylsPWVbb10qbixjPW88cy0xP2VbbysxXSpuOnQubGVuZ3RoLCh1PWkodCxsLGMsbiwhMSkpPT09dS5uZXh0JiYodS5zdGVpbmVyPSEwKSxwLnB1c2goZCh1KSk7Zm9yKHAuc29ydChmKSxvPTA7bzxwLmxlbmd0aDtvKyspaChwW29dLHIpLHI9YShyLHIubmV4dCk7cmV0dXJuIHJ9KHQsZSx5LHIpKSx0Lmxlbmd0aD44MCpyKXtuPWw9dFswXSxzPWM9dFsxXTtmb3IodmFyIGI9cjtiPG07Yis9cikodT10W2JdKTxuJiYobj11KSwocD10W2IrMV0pPHMmJihzPXApLHU+bCYmKGw9dSkscD5jJiYoYz1wKTtnPTAhPT0oZz1NYXRoLm1heChsLW4sYy1zKSk/MS9nOjB9cmV0dXJuIG8oeSx4LHIsbixzLGcpLHh9ZnVuY3Rpb24gaSh0LGUscixuLGkpe3ZhciBhLG87aWYoaT09PUEodCxlLHIsbik+MClmb3IoYT1lO2E8cjthKz1uKW89dyhhLHRbYV0sdFthKzFdLG8pO2Vsc2UgZm9yKGE9ci1uO2E+PWU7YS09bilvPXcoYSx0W2FdLHRbYSsxXSxvKTtyZXR1cm4gbyYmeShvLG8ubmV4dCkmJihrKG8pLG89by5uZXh0KSxvfWZ1bmN0aW9uIGEodCxlKXtpZighdClyZXR1cm4gdDtlfHwoZT10KTt2YXIgcixuPXQ7ZG97aWYocj0hMSxuLnN0ZWluZXJ8fCF5KG4sbi5uZXh0KSYmMCE9PW0obi5wcmV2LG4sbi5uZXh0KSluPW4ubmV4dDtlbHNle2lmKGsobiksKG49ZT1uLnByZXYpPT09bi5uZXh0KWJyZWFrO3I9ITB9fXdoaWxlKHJ8fG4hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSxyLG4saSxmLGgpe2lmKHQpeyFoJiZmJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10O2Rve251bGw9PT1pLnomJihpLno9cChpLngsaS55LGUscixuKSksaS5wcmV2Wj1pLnByZXYsaS5uZXh0Wj1pLm5leHQsaT1pLm5leHR9d2hpbGUoaSE9PXQpO2kucHJldloubmV4dFo9bnVsbCxpLnByZXZaPW51bGwsZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjPTE7ZG97Zm9yKHI9dCx0PW51bGwsYT1udWxsLG89MDtyOyl7Zm9yKG8rKyxuPXIscz0wLGU9MDtlPGMmJihzKyssbj1uLm5leHRaKTtlKyspO2ZvcihsPWM7cz4wfHxsPjAmJm47KTAhPT1zJiYoMD09PWx8fCFufHxyLno8PW4ueik/KGk9cixyPXIubmV4dFoscy0tKTooaT1uLG49bi5uZXh0WixsLS0pLGE/YS5uZXh0Wj1pOnQ9aSxpLnByZXZaPWEsYT1pO3I9bn1hLm5leHRaPW51bGwsYyo9Mn13aGlsZShvPjEpfShpKX0odCxuLGksZik7Zm9yKHZhciBkLGcsdj10O3QucHJldiE9PXQubmV4dDspaWYoZD10LnByZXYsZz10Lm5leHQsZj9sKHQsbixpLGYpOnModCkpZS5wdXNoKGQuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChnLmkvciksayh0KSx0PWcubmV4dCx2PWcubmV4dDtlbHNlIGlmKCh0PWcpPT09dil7aD8xPT09aD9vKHQ9Yyh0LGUsciksZSxyLG4saSxmLDIpOjI9PT1oJiZ1KHQsZSxyLG4saSxmKTpvKGEodCksZSxyLG4saSxmLDEpO2JyZWFrfX19ZnVuY3Rpb24gcyh0KXt2YXIgZT10LnByZXYscj10LG49dC5uZXh0O2lmKG0oZSxyLG4pPj0wKXJldHVybiExO2Zvcih2YXIgaT10Lm5leHQubmV4dDtpIT09dC5wcmV2Oyl7aWYoZyhlLngsZS55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmbShpLnByZXYsaSxpLm5leHQpPj0wKXJldHVybiExO2k9aS5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIGwodCxlLHIsbil7dmFyIGk9dC5wcmV2LGE9dCxvPXQubmV4dDtpZihtKGksYSxvKT49MClyZXR1cm4hMTtmb3IodmFyIHM9aS54PGEueD9pLng8by54P2kueDpvLng6YS54PG8ueD9hLng6by54LGw9aS55PGEueT9pLnk8by55P2kueTpvLnk6YS55PG8ueT9hLnk6by55LGM9aS54PmEueD9pLng+by54P2kueDpvLng6YS54Pm8ueD9hLng6by54LHU9aS55PmEueT9pLnk+by55P2kueTpvLnk6YS55Pm8ueT9hLnk6by55LGY9cChzLGwsZSxyLG4pLGg9cChjLHUsZSxyLG4pLGQ9dC5wcmV2Wix2PXQubmV4dFo7ZCYmZC56Pj1mJiZ2JiZ2Lno8PWg7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZtKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7aWYoZD1kLnByZXZaLHYhPT10LnByZXYmJnYhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnksdi54LHYueSkmJm0odi5wcmV2LHYsdi5uZXh0KT49MClyZXR1cm4hMTt2PXYubmV4dFp9Zm9yKDtkJiZkLno+PWY7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZtKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLnByZXZafWZvcig7diYmdi56PD1oOyl7aWYodiE9PXQucHJldiYmdiE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSx2Lngsdi55KSYmbSh2LnByZXYsdix2Lm5leHQpPj0wKXJldHVybiExO3Y9di5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj10O2Rve3ZhciBpPW4ucHJldixhPW4ubmV4dC5uZXh0OyF5KGksYSkmJngoaSxuLG4ubmV4dCxhKSYmYihpLGEpJiZiKGEsaSkmJihlLnB1c2goaS5pL3IpLGUucHVzaChuLmkvciksZS5wdXNoKGEuaS9yKSxrKG4pLGsobi5uZXh0KSxuPXQ9YSksbj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiBufWZ1bmN0aW9uIHUodCxlLHIsbixpLHMpe3ZhciBsPXQ7ZG97Zm9yKHZhciBjPWwubmV4dC5uZXh0O2MhPT1sLnByZXY7KXtpZihsLmkhPT1jLmkmJnYobCxjKSl7dmFyIHU9XyhsLGMpO3JldHVybiBsPWEobCxsLm5leHQpLHU9YSh1LHUubmV4dCksbyhsLGUscixuLGkscyksdm9pZCBvKHUsZSxyLG4saSxzKX1jPWMubmV4dH1sPWwubmV4dH13aGlsZShsIT09dCl9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIGgodCxlKXtpZihlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9dC54LGE9dC55LG89LTEvMDtkb3tpZihhPD1uLnkmJmE+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7dmFyIHM9bi54KyhhLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9aSYmcz5vKXtpZihvPXMscz09PWkpe2lmKGE9PT1uLnkpcmV0dXJuIG47aWYoYT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gci5wcmV2O3ZhciBsLGM9cix1PXIueCxmPXIueSxoPTEvMDtuPXIubmV4dDtmb3IoO24hPT1jOylpPj1uLngmJm4ueD49dSYmaSE9PW4ueCYmZyhhPGY/aTpvLGEsdSxmLGE8Zj9vOmksYSxuLngsbi55KSYmKChsPU1hdGguYWJzKGEtbi55KS8oaS1uLngpKTxofHxsPT09aCYmbi54PnIueCkmJmIobix0KSYmKHI9bixoPWwpLG49bi5uZXh0O3JldHVybiByfSh0LGUpKXt2YXIgcj1fKGUsdCk7YShyLHIubmV4dCl9fWZ1bmN0aW9uIHAodCxlLHIsbixpKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LXIpKmkpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLW4pKmkpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQscj10O2Rve2UueDxyLngmJihyPWUpLGU9ZS5uZXh0fXdoaWxlKGUhPT10KTtyZXR1cm4gcn1mdW5jdGlvbiBnKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuKGktbykqKGUtcyktKHQtbykqKGEtcyk+PTAmJih0LW8pKihuLXMpLShyLW8pKihlLXMpPj0wJiYoci1vKSooYS1zKS0oaS1vKSoobi1zKT49MH1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZ4KHIsci5uZXh0LHQsZSkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiExfSh0LGUpJiZiKHQsZSkmJmIoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4oZS55LXQueSkqKHIueC1lLngpLShlLngtdC54KSooci55LWUueSl9ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiEhKHkodCxlKSYmeShyLG4pfHx5KHQsbikmJnkocixlKSl8fG0odCxlLHIpPjAhPW0odCxlLG4pPjAmJm0ocixuLHQpPjAhPW0ocixuLGUpPjB9ZnVuY3Rpb24gYih0LGUpe3JldHVybiBtKHQucHJldix0LHQubmV4dCk8MD9tKHQsZSx0Lm5leHQpPj0wJiZtKHQsdC5wcmV2LGUpPj0wOm0odCxlLHQucHJldik8MHx8bSh0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1uZXcgVCh0LmksdC54LHQueSksbj1uZXcgVChlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGEubmV4dD1uLG4ucHJldj1hLG59ZnVuY3Rpb24gdyh0LGUscixuKXt2YXIgaT1uZXcgVCh0LGUscik7cmV0dXJuIG4/KGkubmV4dD1uLm5leHQsaS5wcmV2PW4sbi5uZXh0LnByZXY9aSxuLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIGsodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBUKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBBKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZSxvPXItbjthPHI7YSs9bilpKz0odFtvXS10W2FdKSoodFthKzFdK3RbbysxXSksbz1hO3JldHVybiBpfWUuZXhwb3J0cz1uLGUuZXhwb3J0cy5kZWZhdWx0PW4sbi5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKEEodCwwLGEscikpO2lmKGkpZm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7cysrKXt2YXIgYz1lW3NdKnIsdT1zPGwtMT9lW3MrMV0qcjp0Lmxlbmd0aDtvLT1NYXRoLmFicyhBKHQsYyx1LHIpKX12YXIgZj0wO2ZvcihzPTA7czxuLmxlbmd0aDtzKz0zKXt2YXIgaD1uW3NdKnIscD1uW3MrMV0qcixkPW5bcysyXSpyO2YrPU1hdGguYWJzKCh0W2hdLXRbZF0pKih0W3ArMV0tdFtoKzFdKS0odFtoXS10W3BdKSoodFtkKzFdLXRbaCsxXSkpfXJldHVybiAwPT09byYmMD09PWY/MDpNYXRoLmFicygoZi1vKS9vKX0sbi5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn19LHt9XSwxNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoIm51bWJlciIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtlPU1hdGgubWF4KGUsYVswXSxhWzFdKX1lPTErKDB8ZSl9ZXw9MDtmb3IodmFyIG89bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW9baV09W107Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtvW2FbMF1dLnB1c2goYVsxXSksb1thWzFdXS5wdXNoKGFbMF0pfWZvcih2YXIgcz0wO3M8ZTsrK3MpbihvW3NdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO3JldHVybiBvfTt2YXIgbj10KCJ1bmlxIil9LHt1bmlxOjUzMX1dLDE2NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9W10saT1bXSxhPVtdLG89e30scz1bXTtmdW5jdGlvbiBsKHQpe3ZhciByLG4sdT0hMTtmb3IoaS5wdXNoKHQpLGFbdF09ITAscj0wO3I8c1t0XS5sZW5ndGg7cisrKShuPXNbdF1bcl0pPT09ZT8oYyhlLGkpLHU9ITApOmFbbl18fCh1PWwobikpO2lmKHUpIWZ1bmN0aW9uIHQoZSl7YVtlXT0hMSxvLmhhc093blByb3BlcnR5KGUpJiZPYmplY3Qua2V5cyhvW2VdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2RlbGV0ZSBvW2VdW3JdLGFbcl0mJnQocil9KX0odCk7ZWxzZSBmb3Iocj0wO3I8c1t0XS5sZW5ndGg7cisrKXtuPXNbdF1bcl07dmFyIGY9b1tuXTtmfHwoZj17fSxvW25dPWYpLGZbbl09ITB9cmV0dXJuIGkucG9wKCksdX1mdW5jdGlvbiBjKHQsZSl7dmFyIG49W10uY29uY2F0KGUpLmNvbmNhdCh0KTtyLnB1c2gobil9ZnVuY3Rpb24gdShlKXshZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspcjxlJiYodFtyXT1bXSksdFtyXT10W3JdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdD49ZX0pfShlKTtmb3IodmFyIHIsaT1uKHQpLmNvbXBvbmVudHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSksYT0xLzAsbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8aVtvXS5sZW5ndGg7cysrKWlbb11bc108YSYmKGE9aVtvXVtzXSxyPW8pO3ZhciBsPWlbcl07cmV0dXJuISFsJiZ7bGVhc3RWZXJ0ZXg6YSxhZGpMaXN0OnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuLTE9PT1sLmluZGV4T2YoZSk/W106dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1sLmluZGV4T2YodCl9KX0pfX1lPTA7Zm9yKHZhciBmPXQubGVuZ3RoO2U8Zjspe3ZhciBoPXUoZSk7aWYoZT1oLmxlYXN0VmVydGV4LHM9aC5hZGpMaXN0KXtmb3IodmFyIHA9MDtwPHMubGVuZ3RoO3ArKylmb3IodmFyIGQ9MDtkPHNbcF0ubGVuZ3RoO2QrKyl7dmFyIGc9c1twXVtkXTthWytnXT0hMSxvW2ddPXt9fWwoZSksZSs9MX1lbHNlIGU9Zn1yZXR1cm4gcn19LHsic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiOjUxNH1dLDE2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzKS5sZW5ndGg9MCx0aGlzfX0seyIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjE5N31dLDE2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/QXJyYXkuZnJvbTp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxNjcsIi4vc2hpbSI6MTY4fV0sMTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUscj1BcnJheS5mcm9tO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZT1yKHQ9WyJyYXoiLCJkd2EiXSksQm9vbGVhbihlJiZlIT09dCYmImR3YSI9PT1lWzFdKSl9fSx7fV0sMTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcixpPXQoIi4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGE9dCgiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb24iKSxvPXQoIi4uLy4uL251bWJlci90by1wb3MtaW50ZWdlciIpLHM9dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIiksbD10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKSxjPXQoIi4uLy4uL29iamVjdC9pcy12YWx1ZSIpLHU9dCgiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyIpLGY9QXJyYXkuaXNBcnJheSxoPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLHA9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9LGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGcsdixtLHkseCxiLF8sdyxrPWFyZ3VtZW50c1sxXSxUPWFyZ3VtZW50c1syXTtpZih0PU9iamVjdChsKHQpKSxjKGspJiZzKGspLHRoaXMmJnRoaXMhPT1BcnJheSYmYSh0aGlzKSllPXRoaXM7ZWxzZXtpZighayl7aWYoaSh0KSlyZXR1cm4gMSE9PShtPXQubGVuZ3RoKT9BcnJheS5hcHBseShudWxsLHQpOigodj1uZXcgQXJyYXkoMSkpWzBdPXRbMF0sdik7aWYoZih0KSl7Zm9yKHY9bmV3IEFycmF5KG09dC5sZW5ndGgpLHI9MDtyPG07KytyKXZbcl09dFtyXTtyZXR1cm4gdn19dj1bXX1pZighZih0KSlpZih2b2lkIDAhPT0oXz10W25dKSl7Zm9yKHg9cyhfKS5jYWxsKHQpLGUmJih2PW5ldyBlKSxiPXgubmV4dCgpLHI9MDshYi5kb25lOyl3PWs/aC5jYWxsKGssVCxiLnZhbHVlLHIpOmIudmFsdWUsZT8ocC52YWx1ZT13LGQodixyLHApKTp2W3JdPXcsYj14Lm5leHQoKSwrK3I7bT1yfWVsc2UgaWYodSh0KSl7Zm9yKG09dC5sZW5ndGgsZSYmKHY9bmV3IGUpLHI9MCxnPTA7cjxtOysrcil3PXRbcl0scisxPG0mJih5PXcuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZ5PD01NjMxOSYmKHcrPXRbKytyXSksdz1rP2guY2FsbChrLFQsdyxnKTp3LGU/KHAudmFsdWU9dyxkKHYsZyxwKSk6dltnXT13LCsrZzttPWd9aWYodm9pZCAwPT09bSlmb3IobT1vKHQubGVuZ3RoKSxlJiYodj1uZXcgZShtKSkscj0wO3I8bTsrK3Ipdz1rP2guY2FsbChrLFQsdFtyXSxyKTp0W3JdLGU/KHAudmFsdWU9dyxkKHYscixwKSk6dltyXT13O3JldHVybiBlJiYocC52YWx1ZT1udWxsLHYubGVuZ3RoPW0pLHZ9fSx7Ii4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTY5LCIuLi8uLi9mdW5jdGlvbi9pcy1mdW5jdGlvbiI6MTcwLCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXIiOjE3NiwiLi4vLi4vb2JqZWN0L2lzLXZhbHVlIjoxODYsIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZSI6MTk1LCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjE5NywiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyI6MjAxLCJlczYtc3ltYm9sIjoyMTF9XSwxNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHQpPT09aX19LHt9XSwxNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbCh0KCIuL25vb3AiKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZuLmNhbGwodCk9PT1pfX0seyIuL25vb3AiOjE3MX1dLDE3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sMTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9NYXRoLnNpZ246dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTczLCIuL3NoaW0iOjE3NH1dLDE3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnNpZ247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJigxPT09dCgxMCkmJi0xPT09dCgtMjApKX19LHt9XSwxNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PU51bWJlcih0KSxpc05hTih0KXx8MD09PXQ/dDp0PjA/MTotMX19LHt9XSwxNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbWF0aC9zaWduIiksaT1NYXRoLmFicyxhPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0KT8wOjAhPT0odD1OdW1iZXIodCkpJiZpc0Zpbml0ZSh0KT9uKHQpKmEoaSh0KSk6dH19LHsiLi4vbWF0aC9zaWduIjoxNzJ9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90by1pbnRlZ2VyIiksaT1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkoMCxuKHQpKX19LHsiLi90by1pbnRlZ2VyIjoxNzV9XSwxNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZC1jYWxsYWJsZSIpLGk9dCgiLi92YWxpZC12YWx1ZSIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsbz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxzPU9iamVjdC5rZXlzLGw9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixjKXt2YXIgdSxmPWFyZ3VtZW50c1syXSxoPWFyZ3VtZW50c1szXTtyZXR1cm4gcj1PYmplY3QoaShyKSksbihjKSx1PXMociksaCYmdS5zb3J0KCJmdW5jdGlvbiI9PXR5cGVvZiBoP2EuY2FsbChoLHIpOnZvaWQgMCksImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXVbdF0pLG8uY2FsbCh0LHUsZnVuY3Rpb24odCxuKXtyZXR1cm4gbC5jYWxsKHIsdCk/by5jYWxsKGMsZixyW3RdLHQscixuKTplfSl9fX0seyIuL3ZhbGlkLWNhbGxhYmxlIjoxOTUsIi4vdmFsaWQtdmFsdWUiOjE5N31dLDE3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LmFzc2lnbjp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxNzksIi4vc2hpbSI6MTgwfV0sMTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmFzc2lnbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmKGUodD17Zm9vOiJyYXoifSx7YmFyOiJkd2EifSx7dHJ6eToidHJ6eSJ9KSx0LmZvbyt0LmJhcit0LnRyenk9PT0icmF6ZHdhdHJ6eSIpfX0se31dLDE4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9rZXlzIiksaT10KCIuLi92YWxpZC12YWx1ZSIpLGE9TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxzLGw9YShhcmd1bWVudHMubGVuZ3RoLDIpO2Zvcih0PU9iamVjdChpKHQpKSxzPWZ1bmN0aW9uKG4pe3RyeXt0W25dPWVbbl19Y2F0Y2godCl7cnx8KHI9dCl9fSxvPTE7bzxsOysrbyllPWFyZ3VtZW50c1tvXSxuKGUpLmZvckVhY2gocyk7aWYodm9pZCAwIT09cil0aHJvdyByO3JldHVybiB0fX0seyIuLi9rZXlzIjoxODcsIi4uL3ZhbGlkLXZhbHVlIjoxOTd9XSwxODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYXJyYXkvZnJvbSIpLGk9dCgiLi9hc3NpZ24iKSxhPXQoIi4vdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGEodCkpLHI9YXJndW1lbnRzWzFdLG89T2JqZWN0KGFyZ3VtZW50c1syXSk7aWYoZSE9PXQmJiFyKXJldHVybiBlO3ZhciBzPXt9O3JldHVybiByP24ocixmdW5jdGlvbihlKXsoby5lbnN1cmV8fGUgaW4gdCkmJihzW2VdPXRbZV0pfSk6aShzLHQpLHN9fSx7Ii4uL2FycmF5L2Zyb20iOjE2NiwiLi9hc3NpZ24iOjE3OCwiLi92YWxpZC12YWx1ZSI6MTk3fV0sMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYSxvLHM9T2JqZWN0LmNyZWF0ZTt0KCIuL3NldC1wcm90b3R5cGUtb2YvaXMtaW1wbGVtZW50ZWQiKSgpfHwobj10KCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSIpKSxlLmV4cG9ydHM9bj8xIT09bi5sZXZlbD9zOihpPXt9LGE9e30sbz17Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09Il9fcHJvdG9fXyIhPT10P286e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJudWxsUG9seWZpbGwiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSx2YWx1ZTppfSksZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhudWxsPT09dD9pOnQsZSl9KTpzfSx7Ii4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZCI6MTkzLCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSI6MTk0fV0sMTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL19pdGVyYXRlIikoImZvckVhY2giKX0seyIuL19pdGVyYXRlIjoxNzd9XSwxODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fX0se31dLDE4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksaT17ZnVuY3Rpb246ITAsb2JqZWN0OiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCkmJmlbdHlwZW9mIHRdfHwhMX19LHsiLi9pcy12YWx1ZSI6MTg2fV0sMTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Z1bmN0aW9uL25vb3AiKSgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PW4mJm51bGwhPT10fX0seyIuLi9mdW5jdGlvbi9ub29wIjoxNzF9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP09iamVjdC5rZXlzOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE4OCwiLi9zaGltIjoxODl9XSwxODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3Qua2V5cygicHJpbWl0aXZlIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0se31dLDE4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9pcy12YWx1ZSIpLGk9T2JqZWN0LmtleXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCk/T2JqZWN0KHQpOnQpfX0seyIuLi9pcy12YWx1ZSI6MTg2fV0sMTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdmFsaWQtY2FsbGFibGUiKSxpPXQoIi4vZm9yLWVhY2giKSxhPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9LG89YXJndW1lbnRzWzJdO3JldHVybiBuKGUpLGkodCxmdW5jdGlvbih0LG4saSxzKXtyW25dPWEuY2FsbChlLG8sdCxuLGkscyl9KSxyfX0seyIuL2Zvci1lYWNoIjoxODMsIi4vdmFsaWQtY2FsbGFibGUiOjE5NX1dLDE5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksaT1BcnJheS5wcm90b3R5cGUuZm9yRWFjaCxhPU9iamVjdC5jcmVhdGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEobnVsbCk7cmV0dXJuIGkuY2FsbChhcmd1bWVudHMsZnVuY3Rpb24odCl7bih0KSYmZnVuY3Rpb24odCxlKXt2YXIgcjtmb3IociBpbiB0KWVbcl09dFtyXX0oT2JqZWN0KHQpLGUpfSksZX19LHsiLi9pcy12YWx1ZSI6MTg2fV0sMTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3Quc2V0UHJvdG90eXBlT2Y6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTkzLCIuL3NoaW0iOjE5NH1dLDE5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlLGk9T2JqZWN0LmdldFByb3RvdHlwZU9mLGE9e307ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mLGU9YXJndW1lbnRzWzBdfHxuO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZpKHQoZShudWxsKSxhKSk9PT1hfX0se31dLDE5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbyxzPXQoIi4uL2lzLW9iamVjdCIpLGw9dCgiLi4vdmFsaWQtdmFsdWUiKSxjPU9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZix1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9O249ZnVuY3Rpb24odCxlKXtpZihsKHQpLG51bGw9PT1lfHxzKGUpKXJldHVybiB0O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3RvdHlwZSBtdXN0IGJlIG51bGwgb3IgYW4gb2JqZWN0Iil9LGUuZXhwb3J0cz0oaT1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXt9LG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKTtpZihuKXt0cnl7KHQ9bi5zZXQpLmNhbGwoZSxyKX1jYXRjaCh0KXt9aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cilyZXR1cm57c2V0OnQsbGV2ZWw6Mn19cmV0dXJuIGUuX19wcm90b19fPXIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cj97bGV2ZWw6Mn06KChlPXt9KS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yJiZ7bGV2ZWw6MX0pfSgpKT8oMj09PWkubGV2ZWw/aS5zZXQ/KG89aS5zZXQsYT1mdW5jdGlvbih0LGUpe3JldHVybiBvLmNhbGwobih0LGUpLGUpLHR9KTphPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKS5fX3Byb3RvX189ZSx0fTphPWZ1bmN0aW9uIHQoZSxyKXt2YXIgaTtyZXR1cm4gbihlLHIpLChpPWMuY2FsbCh0Lm51bGxQb2x5ZmlsbCxlKSkmJmRlbGV0ZSB0Lm51bGxQb2x5ZmlsbC5fX3Byb3RvX18sbnVsbD09PXImJihyPXQubnVsbFBvbHlmaWxsKSxlLl9fcHJvdG9fXz1yLGkmJnUodC5udWxsUG9seWZpbGwsIl9fcHJvdG9fXyIsZiksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImxldmVsIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6aS5sZXZlbH0pKTpudWxsLHQoIi4uL2NyZWF0ZSIpfSx7Ii4uL2NyZWF0ZSI6MTgyLCIuLi9pcy1vYmplY3QiOjE4NSwiLi4vdmFsaWQtdmFsdWUiOjE5N31dLDE5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gdH19LHt9XSwxOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1vYmplY3QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGFuIE9iamVjdCIpO3JldHVybiB0fX0seyIuL2lzLW9iamVjdCI6MTg1fV0sMTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiB0fX0seyIuL2lzLXZhbHVlIjoxODZ9XSwxOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP1N0cmluZy5wcm90b3R5cGUuY29udGFpbnM6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTk5LCIuL3NoaW0iOjIwMH1dLDE5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0icmF6ZHdhdHJ6eSI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4uY29udGFpbnMmJighMD09PW4uY29udGFpbnMoImR3YSIpJiYhMT09PW4uY29udGFpbnMoImZvbyIpKX19LHt9XSwyMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxhcmd1bWVudHNbMV0pPi0xfX0se31dLDIwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9bi5jYWxsKCIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHx0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0IGluc3RhbmNlb2YgU3RyaW5nfHxuLmNhbGwodCk9PT1pKXx8ITF9fSx7fV0sMjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksaT1NYXRoLnJhbmRvbTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdDtkb3t0PWkoKS50b1N0cmluZygzNikuc2xpY2UoMil9d2hpbGUoblt0XSk7cmV0dXJuIHR9fSx7fV0sMjAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyIpLG89dCgiZCIpLHM9dCgiZXM2LXN5bWJvbCIpLGw9dCgiLi8iKSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7bC5jYWxsKHRoaXMsdCksZT1lP2EuY2FsbChlLCJrZXkrdmFsdWUiKT8ia2V5K3ZhbHVlIjphLmNhbGwoZSwia2V5Iik/ImtleSI6InZhbHVlIjoidmFsdWUiLGModGhpcywiX19raW5kX18iLG8oIiIsZSkpfSxpJiZpKG4sbCksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobC5wcm90b3R5cGUse19yZXNvbHZlOm8oZnVuY3Rpb24odCl7cmV0dXJuInZhbHVlIj09PXRoaXMuX19raW5kX18/dGhpcy5fX2xpc3RfX1t0XToia2V5K3ZhbHVlIj09PXRoaXMuX19raW5kX18/W3QsdGhpcy5fX2xpc3RfX1t0XV06dH0pfSksYyhuLnByb3RvdHlwZSxzLnRvU3RyaW5nVGFnLG8oImMiLCJBcnJheSBJdGVyYXRvciIpKX0seyIuLyI6MjA2LGQ6MTQxLCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoxOTIsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjE5OCwiZXM2LXN5bWJvbCI6MjExfV0sMjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCIuL2dldCIpLHM9QXJyYXkuaXNBcnJheSxsPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGM9QXJyYXkucHJvdG90eXBlLnNvbWU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxmLGgscCxkLGcsdixtPWFyZ3VtZW50c1syXTtpZihzKHQpfHxuKHQpP3I9ImFycmF5IjphKHQpP3I9InN0cmluZyI6dD1vKHQpLGkoZSksZj1mdW5jdGlvbigpe2g9ITB9LCJhcnJheSIhPT1yKWlmKCJzdHJpbmciIT09cilmb3IodT10Lm5leHQoKTshdS5kb25lOyl7aWYobC5jYWxsKGUsbSx1LnZhbHVlLGYpLGgpcmV0dXJuO3U9dC5uZXh0KCl9ZWxzZSBmb3IoZD10Lmxlbmd0aCxwPTA7cDxkJiYoZz10W3BdLHArMTxkJiYodj1nLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmdjw9NTYzMTkmJihnKz10WysrcF0pLGwuY2FsbChlLG0sZyxmKSwhaCk7KytwKTtlbHNlIGMuY2FsbCh0LGZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwoZSxtLHQsZiksaH0pfX0seyIuL2dldCI6MjA1LCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTY5LCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSI6MTk1LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjIwMX1dLDIwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGk9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksYT10KCIuL2FycmF5Iiksbz10KCIuL3N0cmluZyIpLHM9dCgiLi92YWxpZC1pdGVyYWJsZSIpLGw9dCgiZXM2LXN5bWJvbCIpLml0ZXJhdG9yO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcyh0KVtsXT90W2xdKCk6bih0KT9uZXcgYSh0KTppKHQpP25ldyBvKHQpOm5ldyBhKHQpfX0seyIuL2FycmF5IjoyMDMsIi4vc3RyaW5nIjoyMDgsIi4vdmFsaWQtaXRlcmFibGUiOjIwOSwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjE2OSwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIjoyMDEsImVzNi1zeW1ib2wiOjIxMX1dLDIwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvYXJyYXkvIy9jbGVhciIpLGE9dCgiZXM1LWV4dC9vYmplY3QvYXNzaWduIiksbz10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLHM9dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSxsPXQoImQiKSxjPXQoImQvYXV0by1iaW5kIiksdT10KCJlczYtc3ltYm9sIiksZj1PYmplY3QuZGVmaW5lUHJvcGVydHksaD1PYmplY3QuZGVmaW5lUHJvcGVydGllcztlLmV4cG9ydHM9bj1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7aCh0aGlzLHtfX2xpc3RfXzpsKCJ3IixzKHQpKSxfX2NvbnRleHRfXzpsKCJ3IixlKSxfX25leHRJbmRleF9fOmwoInciLDApfSksZSYmKG8oZS5vbiksZS5vbigiX2FkZCIsdGhpcy5fb25BZGQpLGUub24oIl9kZWxldGUiLHRoaXMuX29uRGVsZXRlKSxlLm9uKCJfY2xlYXIiLHRoaXMuX29uQ2xlYXIpKX0sZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGgobi5wcm90b3R5cGUsYSh7X25leHQ6bChmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19yZWRvX18mJnZvaWQgMCE9PSh0PXRoaXMuX19yZWRvX18uc2hpZnQoKSk/dDp0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xpc3RfXy5sZW5ndGg/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pLG5leHQ6bChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKX0pLF9jcmVhdGVSZXN1bHQ6bChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD97ZG9uZTohMCx2YWx1ZTp2b2lkIDB9Ontkb25lOiExLHZhbHVlOnRoaXMuX3Jlc29sdmUodCl9fSksX3Jlc29sdmU6bChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2xpc3RfX1t0XX0pLF91bkJpbmQ6bChmdW5jdGlvbigpe3RoaXMuX19saXN0X189bnVsbCxkZWxldGUgdGhpcy5fX3JlZG9fXyx0aGlzLl9fY29udGV4dF9fJiYodGhpcy5fX2NvbnRleHRfXy5vZmYoIl9hZGQiLHRoaXMuX29uQWRkKSx0aGlzLl9fY29udGV4dF9fLm9mZigiX2RlbGV0ZSIsdGhpcy5fb25EZWxldGUpLHRoaXMuX19jb250ZXh0X18ub2ZmKCJfY2xlYXIiLHRoaXMuX29uQ2xlYXIpLHRoaXMuX19jb250ZXh0X189bnVsbCl9KSx0b1N0cmluZzpsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIisodGhpc1t1LnRvU3RyaW5nVGFnXXx8Ik9iamVjdCIpKyJdIn0pfSxjKHtfb25BZGQ6bChmdW5jdGlvbih0KXt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgrK3RoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fPyh0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlPj10JiYodGhpcy5fX3JlZG9fX1tyXT0rK2UpfSx0aGlzKSx0aGlzLl9fcmVkb19fLnB1c2godCkpOmYodGhpcywiX19yZWRvX18iLGwoImMiLFt0XSkpKX0pLF9vbkRlbGV0ZTpsKGZ1bmN0aW9uKHQpe3ZhciBlO3Q+PXRoaXMuX19uZXh0SW5kZXhfX3x8KC0tdGhpcy5fX25leHRJbmRleF9fLHRoaXMuX19yZWRvX18mJigtMSE9PShlPXRoaXMuX19yZWRvX18uaW5kZXhPZih0KSkmJnRoaXMuX19yZWRvX18uc3BsaWNlKGUsMSksdGhpcy5fX3JlZG9fXy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7ZT50JiYodGhpcy5fX3JlZG9fX1tyXT0tLWUpfSx0aGlzKSkpfSksX29uQ2xlYXI6bChmdW5jdGlvbigpe3RoaXMuX19yZWRvX18mJmkuY2FsbCh0aGlzLl9fcmVkb19fKSx0aGlzLl9fbmV4dEluZGV4X189MH0pfSkpKSxmKG4ucHJvdG90eXBlLHUuaXRlcmF0b3IsbChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpfSx7ZDoxNDEsImQvYXV0by1iaW5kIjoxNDAsImVzNS1leHQvYXJyYXkvIy9jbGVhciI6MTY1LCJlczUtZXh0L29iamVjdC9hc3NpZ24iOjE3OCwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjE5NSwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiOjE5NywiZXM2LXN5bWJvbCI6MjExfV0sMjA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCJlczYtc3ltYm9sIikuaXRlcmF0b3Iscz1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighIXModCl8fCghIWEodCl8fCghIW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0W29dKSkpfX0seyJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTY5LCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSI6MTg2LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjIwMSwiZXM2LXN5bWJvbCI6MjExfV0sMjA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGE9dCgiZCIpLG89dCgiZXM2LXN5bWJvbCIpLHM9dCgiLi8iKSxsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO3Q9U3RyaW5nKHQpLHMuY2FsbCh0aGlzLHQpLGwodGhpcywiX19sZW5ndGhfXyIsYSgiIix0Lmxlbmd0aCkpfSxpJiZpKG4scyksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocy5wcm90b3R5cGUse19uZXh0OmEoZnVuY3Rpb24oKXtpZih0aGlzLl9fbGlzdF9fKXJldHVybiB0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xlbmd0aF9fP3RoaXMuX19uZXh0SW5kZXhfXysrOnZvaWQgdGhpcy5fdW5CaW5kKCl9KSxfcmVzb2x2ZTphKGZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fX2xpc3RfX1t0XTtyZXR1cm4gdGhpcy5fX25leHRJbmRleF9fPT09dGhpcy5fX2xlbmd0aF9fP3I6KGU9ci5jaGFyQ29kZUF0KDApKT49NTUyOTYmJmU8PTU2MzE5P3IrdGhpcy5fX2xpc3RfX1t0aGlzLl9fbmV4dEluZGV4X18rK106cn0pfSksbChuLnByb3RvdHlwZSxvLnRvU3RyaW5nVGFnLGEoImMiLCJTdHJpbmcgSXRlcmF0b3IiKSl9LHsiLi8iOjIwNixkOjE0MSwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiI6MTkyLCJlczYtc3ltYm9sIjoyMTF9XSwyMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1pdGVyYWJsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gdH19LHsiLi9pcy1pdGVyYWJsZSI6MjA3fV0sMjEwOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKG4saSl7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/ZS5leHBvcnRzPW4oKTp0LkVTNlByb21pc2U9bigpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9dmFyIHI9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LGE9MCxvPXZvaWQgMCxzPXZvaWQgMCxsPWZ1bmN0aW9uKHQsZSl7Z1thXT10LGdbYSsxXT1lLDI9PT0oYSs9MikmJihzP3Modik6XygpKX07dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCx1PWN8fHt9LGY9dS5NdXRhdGlvbk9ic2VydmVyfHx1LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsaD0idW5kZWZpbmVkIj09dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgbiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChuKSxwPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbDtmdW5jdGlvbiBkKCl7dmFyIHQ9c2V0VGltZW91dDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh2LDEpfX12YXIgZz1uZXcgQXJyYXkoMWUzKTtmdW5jdGlvbiB2KCl7Zm9yKHZhciB0PTA7dDxhO3QrPTIpeygwLGdbdF0pKGdbdCsxXSksZ1t0XT12b2lkIDAsZ1t0KzFdPXZvaWQgMH1hPTB9dmFyIG0seSx4LGIsXz12b2lkIDA7ZnVuY3Rpb24gdyh0LGUpe3ZhciByPWFyZ3VtZW50cyxuPXRoaXMsaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihBKTt2b2lkIDA9PT1pW1RdJiZVKGkpO3ZhciBhLG89bi5fc3RhdGU7cmV0dXJuIG8/KGE9cltvLTFdLGwoZnVuY3Rpb24oKXtyZXR1cm4gaihvLGksYSxuLl9yZXN1bHQpfSkpOlIobixpLHQsZSksaX1mdW5jdGlvbiBrKHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvcj09PXRoaXMpcmV0dXJuIHQ7dmFyIGU9bmV3IHRoaXMoQSk7cmV0dXJuIE8oZSx0KSxlfWg/Xz1mdW5jdGlvbigpe3JldHVybiBuLm5leHRUaWNrKHYpfTpmPyh5PTAseD1uZXcgZih2KSxiPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSx4Lm9ic2VydmUoYix7Y2hhcmFjdGVyRGF0YTohMH0pLF89ZnVuY3Rpb24oKXtiLmRhdGE9eT0rK3klMn0pOnA/KChtPW5ldyBNZXNzYWdlQ2hhbm5lbCkucG9ydDEub25tZXNzYWdlPXYsXz1mdW5jdGlvbigpe3JldHVybiBtLnBvcnQyLnBvc3RNZXNzYWdlKDApfSk6Xz12b2lkIDA9PT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3RyeXt2YXIgZT10KCJ2ZXJ0eCIpO3JldHVybiBvPWUucnVuT25Mb29wfHxlLnJ1bk9uQ29udGV4dCxmdW5jdGlvbigpe28odil9fWNhdGNoKHQpe3JldHVybiBkKCl9fSgpOmQoKTt2YXIgVD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO2Z1bmN0aW9uIEEoKXt9dmFyIE09dm9pZCAwLFM9MSxFPTIsQz1uZXcgQjtmdW5jdGlvbiBMKHQpe3RyeXtyZXR1cm4gdC50aGVufWNhdGNoKHQpe3JldHVybiBDLmVycm9yPXQsQ319ZnVuY3Rpb24geih0LHIsbil7ci5jb25zdHJ1Y3Rvcj09PXQuY29uc3RydWN0b3ImJm49PT13JiZyLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1rP2Z1bmN0aW9uKHQsZSl7ZS5fc3RhdGU9PT1TP0QodCxlLl9yZXN1bHQpOmUuX3N0YXRlPT09RT9QKHQsZS5fcmVzdWx0KTpSKGUsdm9pZCAwLGZ1bmN0aW9uKGUpe3JldHVybiBPKHQsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBQKHQsZSl9KX0odCxyKTpuPT09Qz9QKHQsQy5lcnJvcik6dm9pZCAwPT09bj9EKHQscik6ZShuKT9mdW5jdGlvbih0LGUscil7bChmdW5jdGlvbih0KXt2YXIgbj0hMSxpPWZ1bmN0aW9uKHQsZSxyLG4pe3RyeXt0LmNhbGwoZSxyLG4pfWNhdGNoKHQpe3JldHVybiB0fX0ocixlLGZ1bmN0aW9uKHIpe258fChuPSEwLGUhPT1yP08odCxyKTpEKHQscikpfSxmdW5jdGlvbihlKXtufHwobj0hMCxQKHQsZSkpfSx0Ll9sYWJlbCk7IW4mJmkmJihuPSEwLFAodCxpKSl9LHQpfSh0LHIsbik6RCh0LHIpfWZ1bmN0aW9uIE8odCxlKXt2YXIgcjt0PT09ZT9QKHQsbmV3IFR5cGVFcnJvcigiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKToiZnVuY3Rpb24iPT10eXBlb2Yocj1lKXx8Im9iamVjdCI9PXR5cGVvZiByJiZudWxsIT09cj96KHQsZSxMKGUpKTpEKHQsZSl9ZnVuY3Rpb24gSSh0KXt0Ll9vbmVycm9yJiZ0Ll9vbmVycm9yKHQuX3Jlc3VsdCksRih0KX1mdW5jdGlvbiBEKHQsZSl7dC5fc3RhdGU9PT1NJiYodC5fcmVzdWx0PWUsdC5fc3RhdGU9UywwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZsKEYsdCkpfWZ1bmN0aW9uIFAodCxlKXt0Ll9zdGF0ZT09PU0mJih0Ll9zdGF0ZT1FLHQuX3Jlc3VsdD1lLGwoSSx0KSl9ZnVuY3Rpb24gUih0LGUscixuKXt2YXIgaT10Ll9zdWJzY3JpYmVycyxhPWkubGVuZ3RoO3QuX29uZXJyb3I9bnVsbCxpW2FdPWUsaVthK1NdPXIsaVthK0VdPW4sMD09PWEmJnQuX3N0YXRlJiZsKEYsdCl9ZnVuY3Rpb24gRih0KXt2YXIgZT10Ll9zdWJzY3JpYmVycyxyPXQuX3N0YXRlO2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBuPXZvaWQgMCxpPXZvaWQgMCxhPXQuX3Jlc3VsdCxvPTA7bzxlLmxlbmd0aDtvKz0zKW49ZVtvXSxpPWVbbytyXSxuP2oocixuLGksYSk6aShhKTt0Ll9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gQigpe3RoaXMuZXJyb3I9bnVsbH12YXIgTj1uZXcgQjtmdW5jdGlvbiBqKHQscixuLGkpe3ZhciBhPWUobiksbz12b2lkIDAscz12b2lkIDAsbD12b2lkIDAsYz12b2lkIDA7aWYoYSl7aWYoKG89ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2godCl7cmV0dXJuIE4uZXJyb3I9dCxOfX0obixpKSk9PT1OPyhjPSEwLHM9by5lcnJvcixvPW51bGwpOmw9ITAscj09PW8pcmV0dXJuIHZvaWQgUChyLG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4iKSl9ZWxzZSBvPWksbD0hMDtyLl9zdGF0ZSE9PU18fChhJiZsP08ocixvKTpjP1AocixzKTp0PT09Uz9EKHIsbyk6dD09PUUmJlAocixvKSl9dmFyIFY9MDtmdW5jdGlvbiBVKHQpe3RbVF09VisrLHQuX3N0YXRlPXZvaWQgMCx0Ll9yZXN1bHQ9dm9pZCAwLHQuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIHEodCxlKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPXQsdGhpcy5wcm9taXNlPW5ldyB0KEEpLHRoaXMucHJvbWlzZVtUXXx8VSh0aGlzLnByb21pc2UpLHIoZSk/KHRoaXMuX2lucHV0PWUsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWUubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9EKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoKSwwPT09dGhpcy5fcmVtYWluaW5nJiZEKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6UCh0aGlzLnByb21pc2UsbmV3IEVycm9yKCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXkiKSl9ZnVuY3Rpb24gSCh0KXt0aGlzW1RdPVYrKyx0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3N1YnNjcmliZXJzPVtdLEEhPT10JiYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvciIpfSgpLHRoaXMgaW5zdGFuY2VvZiBIP2Z1bmN0aW9uKHQsZSl7dHJ5e2UoZnVuY3Rpb24oZSl7Tyh0LGUpfSxmdW5jdGlvbihlKXtQKHQsZSl9KX1jYXRjaChlKXtQKHQsZSl9fSh0aGlzLHQpOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIil9KCkpfWZ1bmN0aW9uIEcoKXt2YXIgdD12b2lkIDA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBpKXQ9aTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZil0PXNlbGY7ZWxzZSB0cnl7dD1GdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKHQpe3Rocm93IG5ldyBFcnJvcigicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Iil9dmFyIGU9dC5Qcm9taXNlO2lmKGUpe3ZhciByPW51bGw7dHJ5e3I9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUucmVzb2x2ZSgpKX1jYXRjaCh0KXt9aWYoIltvYmplY3QgUHJvbWlzZV0iPT09ciYmIWUuY2FzdClyZXR1cm59dC5Qcm9taXNlPUh9cmV0dXJuIHEucHJvdG90eXBlLl9lbnVtZXJhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5sZW5ndGgsZT10aGlzLl9pbnB1dCxyPTA7dGhpcy5fc3RhdGU9PT1NJiZyPHQ7cisrKXRoaXMuX2VhY2hFbnRyeShlW3JdLHIpfSxxLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixuPXIucmVzb2x2ZTtpZihuPT09ayl7dmFyIGk9TCh0KTtpZihpPT09dyYmdC5fc3RhdGUhPT1NKXRoaXMuX3NldHRsZWRBdCh0Ll9zdGF0ZSxlLHQuX3Jlc3VsdCk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgaSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbZV09dDtlbHNlIGlmKHI9PT1IKXt2YXIgYT1uZXcgcihBKTt6KGEsdCxpKSx0aGlzLl93aWxsU2V0dGxlQXQoYSxlKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgcihmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pLGUpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG4odCksZSl9LHEucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucHJvbWlzZTtuLl9zdGF0ZT09PU0mJih0aGlzLl9yZW1haW5pbmctLSx0PT09RT9QKG4scik6dGhpcy5fcmVzdWx0W2VdPXIpLDA9PT10aGlzLl9yZW1haW5pbmcmJkQobix0aGlzLl9yZXN1bHQpfSxxLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztSKHQsdm9pZCAwLGZ1bmN0aW9uKHQpe3JldHVybiByLl9zZXR0bGVkQXQoUyxlLHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gci5fc2V0dGxlZEF0KEUsZSx0KX0pfSxILmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHEodGhpcyx0KS5wcm9taXNlfSxILnJhY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gcih0KT9uZXcgZShmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTA7YTxpO2ErKyllLnJlc29sdmUodFthXSkudGhlbihyLG4pfSk6bmV3IGUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZShuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuIikpfSl9LEgucmVzb2x2ZT1rLEgucmVqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzKEEpO3JldHVybiBQKGUsdCksZX0sSC5fc2V0U2NoZWR1bGVyPWZ1bmN0aW9uKHQpe3M9dH0sSC5fc2V0QXNhcD1mdW5jdGlvbih0KXtsPXR9LEguX2FzYXA9bCxILnByb3RvdHlwZT17Y29uc3RydWN0b3I6SCx0aGVuOncsY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbihudWxsLHQpfX0sRygpLEgucG9seWZpbGw9RyxILlByb21pc2U9SCxIfSl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjQ3NH1dLDIxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/U3ltYm9sOnQoIi4vcG9seWZpbGwiKX0seyIuL2lzLWltcGxlbWVudGVkIjoyMTIsIi4vcG9seWZpbGwiOjIxNH1dLDIxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17b2JqZWN0OiEwLHN5bWJvbDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbClyZXR1cm4hMTt0PVN5bWJvbCgidGVzdCBzeW1ib2wiKTt0cnl7U3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEhblt0eXBlb2YgU3ltYm9sLml0ZXJhdG9yXSYmKCEhblt0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlXSYmISFuW3R5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWddKX19LHt9XSwyMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKCJzeW1ib2wiPT10eXBlb2YgdHx8ISF0LmNvbnN0cnVjdG9yJiYoIlN5bWJvbCI9PT10LmNvbnN0cnVjdG9yLm5hbWUmJiJTeW1ib2wiPT09dFt0LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSkpfX0se31dLDIxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbyxzPXQoImQiKSxsPXQoIi4vdmFsaWRhdGUtc3ltYm9sIiksYz1PYmplY3QuY3JlYXRlLHU9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsZj1PYmplY3QuZGVmaW5lUHJvcGVydHksaD1PYmplY3QucHJvdG90eXBlLHA9YyhudWxsKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sKXtuPVN5bWJvbDt0cnl7U3RyaW5nKG4oKSksbz0hMH1jYXRjaCh0KXt9fXZhciBkLGc9KGQ9YyhudWxsKSxmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPTA7ZFt0KyhufHwiIildOykrK247cmV0dXJuIGRbdCs9bnx8IiJdPSEwLGYoaCxlPSJAQCIrdCxzLmdzKG51bGwsZnVuY3Rpb24odCl7cnx8KHI9ITAsZih0aGlzLGUscyh0KSkscj0hMSl9KSksZX0pO2E9ZnVuY3Rpb24odCl7aWYodGhpcyBpbnN0YW5jZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7cmV0dXJuIGkodCl9LGUuZXhwb3J0cz1pPWZ1bmN0aW9uIHQoZSl7dmFyIHI7aWYodGhpcyBpbnN0YW5jZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7cmV0dXJuIG8/bihlKToocj1jKGEucHJvdG90eXBlKSxlPXZvaWQgMD09PWU/IiI6U3RyaW5nKGUpLHUocix7X19kZXNjcmlwdGlvbl9fOnMoIiIsZSksX19uYW1lX186cygiIixnKGUpKX0pKX0sdShpLHtmb3I6cyhmdW5jdGlvbih0KXtyZXR1cm4gcFt0XT9wW3RdOnBbdF09aShTdHJpbmcodCkpfSksa2V5Rm9yOnMoZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGUgaW4gbCh0KSxwKWlmKHBbZV09PT10KXJldHVybiBlfSksaGFzSW5zdGFuY2U6cygiIixuJiZuLmhhc0luc3RhbmNlfHxpKCJoYXNJbnN0YW5jZSIpKSxpc0NvbmNhdFNwcmVhZGFibGU6cygiIixuJiZuLmlzQ29uY2F0U3ByZWFkYWJsZXx8aSgiaXNDb25jYXRTcHJlYWRhYmxlIikpLGl0ZXJhdG9yOnMoIiIsbiYmbi5pdGVyYXRvcnx8aSgiaXRlcmF0b3IiKSksbWF0Y2g6cygiIixuJiZuLm1hdGNofHxpKCJtYXRjaCIpKSxyZXBsYWNlOnMoIiIsbiYmbi5yZXBsYWNlfHxpKCJyZXBsYWNlIikpLHNlYXJjaDpzKCIiLG4mJm4uc2VhcmNofHxpKCJzZWFyY2giKSksc3BlY2llczpzKCIiLG4mJm4uc3BlY2llc3x8aSgic3BlY2llcyIpKSxzcGxpdDpzKCIiLG4mJm4uc3BsaXR8fGkoInNwbGl0IikpLHRvUHJpbWl0aXZlOnMoIiIsbiYmbi50b1ByaW1pdGl2ZXx8aSgidG9QcmltaXRpdmUiKSksdG9TdHJpbmdUYWc6cygiIixuJiZuLnRvU3RyaW5nVGFnfHxpKCJ0b1N0cmluZ1RhZyIpKSx1bnNjb3BhYmxlczpzKCIiLG4mJm4udW5zY29wYWJsZXN8fGkoInVuc2NvcGFibGVzIikpfSksdShhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6cyhpKSx0b1N0cmluZzpzKCIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uYW1lX199KX0pLHUoaS5wcm90b3R5cGUse3RvU3RyaW5nOnMoZnVuY3Rpb24oKXtyZXR1cm4iU3ltYm9sICgiK2wodGhpcykuX19kZXNjcmlwdGlvbl9fKyIpIn0pLHZhbHVlT2Y6cyhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMpfSl9KSxmKGkucHJvdG90eXBlLGkudG9QcmltaXRpdmUscygiIixmdW5jdGlvbigpe3ZhciB0PWwodGhpcyk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dC50b1N0cmluZygpfSkpLGYoaS5wcm90b3R5cGUsaS50b1N0cmluZ1RhZyxzKCJjIiwiU3ltYm9sIikpLGYoYS5wcm90b3R5cGUsaS50b1N0cmluZ1RhZyxzKCJjIixpLnByb3RvdHlwZVtpLnRvU3RyaW5nVGFnXSkpLGYoYS5wcm90b3R5cGUsaS50b1ByaW1pdGl2ZSxzKCJjIixpLnByb3RvdHlwZVtpLnRvUHJpbWl0aXZlXSkpfSx7Ii4vdmFsaWRhdGUtc3ltYm9sIjoyMTUsZDoxNDF9XSwyMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1zeW1ib2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgc3ltYm9sIik7cmV0dXJuIHR9fSx7Ii4vaXMtc3ltYm9sIjoyMTN9XSwyMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP1dlYWtNYXA6dCgiLi9wb2x5ZmlsbCIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIxNywiLi9wb2x5ZmlsbCI6MjE5fV0sMjE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFdlYWtNYXApcmV0dXJuITE7dHJ5e3Q9bmV3IFdlYWtNYXAoW1tlPXt9LCJvbmUiXSxbe30sInR3byJdLFt7fSwidGhyZWUiXV0pfWNhdGNoKHQpe3JldHVybiExfXJldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PVN0cmluZyh0KSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNldCYmKHQuc2V0KHt9LDEpPT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlbGV0ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmhhcyYmIm9uZSI9PT10LmdldChlKSkpKSl9fSx7fV0sMjE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCYmIltvYmplY3QgV2Vha01hcF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBXZWFrTWFwKX0se31dLDIxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiKSxhPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLW9iamVjdCIpLG89dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSxzPXQoImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxIiksbD10KCJkIiksYz10KCJlczYtaXRlcmF0b3IvZ2V0IiksdT10KCJlczYtaXRlcmF0b3IvZm9yLW9mIiksZj10KCJlczYtc3ltYm9sIikudG9TdHJpbmdUYWcsaD10KCIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZCIpLHA9QXJyYXkuaXNBcnJheSxkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxnPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdj1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7ZS5leHBvcnRzPW49ZnVuY3Rpb24oKXt2YXIgdCxlPWFyZ3VtZW50c1swXTtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO3JldHVybiB0PWgmJmkmJldlYWtNYXAhPT1uP2kobmV3IFdlYWtNYXAsdih0aGlzKSk6dGhpcyxudWxsIT1lJiYocChlKXx8KGU9YyhlKSkpLGQodCwiX193ZWFrTWFwRGF0YV9fIixsKCJjIiwiJHdlYWtNYXAkIitzKCkpKSxlPyh1KGUsZnVuY3Rpb24oZSl7byhlKSx0LnNldChlWzBdLGVbMV0pfSksdCk6dH0saCYmKGkmJmkobixXZWFrTWFwKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFdlYWtNYXAucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpsKG4pfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLHtkZWxldGU6bChmdW5jdGlvbih0KXtyZXR1cm4hIWcuY2FsbChhKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKSYmKGRlbGV0ZSB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXSwhMCl9KSxnZXQ6bChmdW5jdGlvbih0KXtpZihnLmNhbGwoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXykpcmV0dXJuIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dfSksaGFzOmwoZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChhKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKX0pLHNldDpsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXyxsKCJjIixlKSksdGhpc30pLHRvU3RyaW5nOmwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBXZWFrTWFwXSJ9KX0pLGQobi5wcm90b3R5cGUsZixsKCJjIiwiV2Vha01hcCIpKX0seyIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZCI6MjE4LGQ6MTQxLCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoxOTIsImVzNS1leHQvb2JqZWN0L3ZhbGlkLW9iamVjdCI6MTk2LCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSI6MTk3LCJlczUtZXh0L3N0cmluZy9yYW5kb20tdW5pcSI6MjAyLCJlczYtaXRlcmF0b3IvZm9yLW9mIjoyMDQsImVzNi1pdGVyYXRvci9nZXQiOjIwNSwiZXM2LXN5bWJvbCI6MjExfV0sMjIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZXx8MCxpPXJ8fDE7cmV0dXJuW1t0WzEyXSt0WzBdLHRbMTNdK3RbMV0sdFsxNF0rdFsyXSx0WzE1XSt0WzNdXSxbdFsxMl0tdFswXSx0WzEzXS10WzFdLHRbMTRdLXRbMl0sdFsxNV0tdFszXV0sW3RbMTJdK3RbNF0sdFsxM10rdFs1XSx0WzE0XSt0WzZdLHRbMTVdK3RbN11dLFt0WzEyXS10WzRdLHRbMTNdLXRbNV0sdFsxNF0tdFs2XSx0WzE1XS10WzddXSxbbip0WzEyXSt0WzhdLG4qdFsxM10rdFs5XSxuKnRbMTRdK3RbMTBdLG4qdFsxNV0rdFsxMV1dLFtpKnRbMTJdLXRbOF0saSp0WzEzXS10WzldLGkqdFsxNF0tdFsxMF0saSp0WzE1XS10WzExXV1dfX0se31dLDIyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpcy1zdHJpbmctYmxhbmsiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7aWYoInN0cmluZyI9PT1lKXt2YXIgcj10O2lmKDA9PT0odD0rdCkmJm4ocikpcmV0dXJuITF9ZWxzZSBpZigibnVtYmVyIiE9PWUpcmV0dXJuITE7cmV0dXJuIHQtdDwxfX0seyJpcy1zdHJpbmctYmxhbmsiOjQxNX1dLDIyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBvKFswXSxbMF0sMCk7Y2FzZSAxOmlmKCJudW1iZXIiPT10eXBlb2YgdCl7dmFyIG49bCh0KTtyZXR1cm4gbmV3IG8obixuLDApfXJldHVybiBuZXcgbyh0LGwodC5sZW5ndGgpLDApO2Nhc2UgMjppZigibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBuPWwodC5sZW5ndGgpO3JldHVybiBuZXcgbyh0LG4sK2UpfXI9MDtjYXNlIDM6aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInN0YXRlIGFuZCB2ZWxvY2l0eSBsZW5ndGhzIG11c3QgbWF0Y2giKTtyZXR1cm4gbmV3IG8odCxlLHIpfX07dmFyIG49dCgiY3ViaWMtaGVybWl0ZSIpLGk9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4oZSxNYXRoLm1heCh0LHIpKX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10Lmxlbmd0aCx0aGlzLmJvdW5kcz1bbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKSxuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pXTtmb3IodmFyIG49MDtuPHRoaXMuZGltZW5zaW9uOysrbil0aGlzLmJvdW5kc1swXVtuXT0tMS8wLHRoaXMuYm91bmRzWzFdW25dPTEvMDt0aGlzLl9zdGF0ZT10LnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3ZlbG9jaXR5PWUuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdGltZT1bcl0sdGhpcy5fc2NyYXRjaD1bdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKV19dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1zLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZ3QodGhpcy5fdGltZSx0KS0xO2U8PTB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX3N0YXRlLnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pLHRoaXMuX3ZlbG9jaXR5LnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pKX0scy5jdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsbz1pLmxlKGUsdCkscz10aGlzLl9zY3JhdGNoWzBdLGw9dGhpcy5fc3RhdGUsYz10aGlzLl92ZWxvY2l0eSx1PXRoaXMuZGltZW5zaW9uLGY9dGhpcy5ib3VuZHM7aWYobzwwKWZvcih2YXIgaD11LTEscD0wO3A8dTsrK3AsLS1oKXNbcF09bFtoXTtlbHNlIGlmKG8+PXItMSl7aD1sLmxlbmd0aC0xO3ZhciBkPXQtZVtyLTFdO2ZvcihwPTA7cDx1OysrcCwtLWgpc1twXT1sW2hdK2QqY1toXX1lbHNle2g9dSoobysxKS0xO3ZhciBnPWVbb10sdj1lW28rMV0tZ3x8MSxtPXRoaXMuX3NjcmF0Y2hbMV0seT10aGlzLl9zY3JhdGNoWzJdLHg9dGhpcy5fc2NyYXRjaFszXSxiPXRoaXMuX3NjcmF0Y2hbNF0sXz0hMDtmb3IocD0wO3A8dTsrK3AsLS1oKW1bcF09bFtoXSx4W3BdPWNbaF0qdix5W3BdPWxbaCt1XSxiW3BdPWNbaCt1XSp2LF89XyYmbVtwXT09PXlbcF0mJnhbcF09PT1iW3BdJiYwPT09eFtwXTtpZihfKWZvcihwPTA7cDx1OysrcClzW3BdPW1bcF07ZWxzZSBuKG0seCx5LGIsKHQtZykvdixzKX12YXIgdz1mWzBdLGs9ZlsxXTtmb3IocD0wO3A8dTsrK3Apc1twXT1hKHdbcF0sa1twXSxzW3BdKTtyZXR1cm4gc30scy5kY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLGE9aS5sZShlLHQpLG89dGhpcy5fc2NyYXRjaFswXSxzPXRoaXMuX3N0YXRlLGw9dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbjtpZihhPj1yLTEpZm9yKHZhciB1PXMubGVuZ3RoLTEsZj0oZVtyLTFdLDApO2Y8YzsrK2YsLS11KW9bZl09bFt1XTtlbHNle3U9YyooYSsxKS0xO3ZhciBoPWVbYV0scD1lW2ErMV0taHx8MSxkPXRoaXMuX3NjcmF0Y2hbMV0sZz10aGlzLl9zY3JhdGNoWzJdLHY9dGhpcy5fc2NyYXRjaFszXSxtPXRoaXMuX3NjcmF0Y2hbNF0seT0hMDtmb3IoZj0wO2Y8YzsrK2YsLS11KWRbZl09c1t1XSx2W2ZdPWxbdV0qcCxnW2ZdPXNbdStjXSxtW2ZdPWxbdStjXSpwLHk9eSYmZFtmXT09PWdbZl0mJnZbZl09PT1tW2ZdJiYwPT09dltmXTtpZih5KWZvcihmPTA7ZjxjOysrZilvW2ZdPTA7ZWxzZXtuLmRlcml2YXRpdmUoZCx2LGcsbSwodC1oKS9wLG8pO2ZvcihmPTA7ZjxjOysrZilvW2ZdLz1wfX1yZXR1cm4gb30scy5sYXN0VD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbWU7cmV0dXJuIHRbdC5sZW5ndGgtMV19LHMuc3RhYmxlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZlbG9jaXR5LGU9dC5sZW5ndGgscj10aGlzLmRpbWVuc2lvbi0xO3I+PTA7LS1yKWlmKHRbLS1lXSlyZXR1cm4hMTtyZXR1cm4hMH0scy5qdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXTt0aGlzLl90aW1lLnB1c2goZSx0KTtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgZj0wO2Y8cjsrK2Ypbi5wdXNoKG5bbysrXSksaS5wdXNoKDApO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IoZj1yO2Y+MDstLWYpbi5wdXNoKGEobFtmLTFdLGNbZi0xXSxhcmd1bWVudHNbZl0pKSxpLnB1c2goMCl9fSxzLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10LWUsbD10aGlzLmJvdW5kcyxjPWxbMF0sdT1sWzFdLGY9cz4xZS02PzEvczowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9cjtoPjA7LS1oKXt2YXIgcD1hKGNbaC0xXSx1W2gtMV0sYXJndW1lbnRzW2hdKTtuLnB1c2gocCksaS5wdXNoKChwLW5bbysrXSkqZil9fX0scy5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaW1lbnNpb247aWYoISh0PHRoaXMubGFzdFQoKXx8YXJndW1lbnRzLmxlbmd0aCE9PWUrMSkpe3ZhciByPXRoaXMuX3N0YXRlLG49dGhpcy5fdmVsb2NpdHksaT10aGlzLmJvdW5kcyxvPWlbMF0scz1pWzFdO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGw9ZTtsPjA7LS1sKXIucHVzaChhKG9bbC0xXSxzW2wtMV0sYXJndW1lbnRzW2xdKSksbi5wdXNoKDApfX0scy5tb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDw9ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV0sdT10LWUsZj11PjFlLTY/MS91OjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgaD1yO2g+MDstLWgpe3ZhciBwPWFyZ3VtZW50c1toXTtuLnB1c2goYShsW2gtMV0sY1toLTFdLG5bbysrXStwKSksaS5wdXNoKHAqZil9fX0scy5pZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKTtpZighKHQ8ZSkpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXIscz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9ci0xO2Y+PTA7LS1mKW4ucHVzaChhKGxbZl0sY1tmXSxuW29dK3UqaVtvXSkpLGkucHVzaCgwKSxvKz0xfX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgxLCJjdWJpYy1oZXJtaXRlIjoxMzV9XSwyMjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJkdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBzcGVjaWZ5IGRhdGEgYXMgZmlyc3QgcGFyYW1ldGVyIik7aWYocj0wfCsocnx8MCksQXJyYXkuaXNBcnJheSh0KSYmdFswXSYmIm51bWJlciI9PXR5cGVvZiB0WzBdWzBdKXt2YXIgaSxhLG8scyxsPXRbMF0ubGVuZ3RoLGM9dC5sZW5ndGgqbDtlJiYic3RyaW5nIiE9dHlwZW9mIGV8fChlPW5ldyhuKGV8fCJmbG9hdDMyIikpKGMrcikpO3ZhciB1PWUubGVuZ3RoLXI7aWYoYyE9PXUpdGhyb3cgbmV3IEVycm9yKCJzb3VyY2UgbGVuZ3RoICIrYysiICgiK2wrIngiK3QubGVuZ3RoKyIpIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIGxlbmd0aCAiK3UpO2ZvcihpPTAsbz1yO2k8dC5sZW5ndGg7aSsrKWZvcihhPTA7YTxsO2ErKyllW28rK109bnVsbD09PXRbaV1bYV0/TmFOOnRbaV1bYV19ZWxzZSBpZihlJiYic3RyaW5nIiE9dHlwZW9mIGUpZS5zZXQodCxyKTtlbHNle3ZhciBmPW4oZXx8ImZsb2F0MzIiKTtpZihBcnJheS5pc0FycmF5KHQpfHwiYXJyYXkiPT09ZSlmb3IoZT1uZXcgZih0Lmxlbmd0aCtyKSxpPTAsbz1yLHM9ZS5sZW5ndGg7bzxzO28rKyxpKyspZVtvXT1udWxsPT09dFtpXT9OYU46dFtpXTtlbHNlIDA9PT1yP2U9bmV3IGYodCk6KGU9bmV3IGYodC5sZW5ndGgrcikpLnNldCh0LHIpfXJldHVybiBlfX0se2R0eXBlOjE2MH1dLDIyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udC9zdHJpbmdpZnkiKSxpPVszMiwxMjZdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuc2hhcGU/dC5zaGFwZTp0LmNhbnZhcz9bdC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0XTpbNTEyLDUxMl0scj10LmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYT10LmZvbnQsbz0ibnVtYmVyIj09dHlwZW9mIHQuc3RlcD9bdC5zdGVwLHQuc3RlcF06dC5zdGVwfHxbMzIsMzJdLHM9dC5jaGFyc3x8aTthJiYic3RyaW5nIiE9dHlwZW9mIGEmJihhPW4oYSkpO2lmKEFycmF5LmlzQXJyYXkocykpe2lmKDI9PT1zLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiBzWzBdJiYibnVtYmVyIj09dHlwZW9mIHNbMV0pe2Zvcih2YXIgbD1bXSxjPXNbMF0sdT0wO2M8PXNbMV07YysrKWxbdSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpO3M9bH19ZWxzZSBzPVN0cmluZyhzKS5zcGxpdCgiIik7ZT1lLnNsaWNlKCksci53aWR0aD1lWzBdLHIuaGVpZ2h0PWVbMV07dmFyIGY9ci5nZXRDb250ZXh0KCIyZCIpO2YuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KSxmLmZvbnQ9YSxmLnRleHRBbGlnbj0iY2VudGVyIixmLnRleHRCYXNlbGluZT0ibWlkZGxlIixmLmZpbGxTdHlsZT0iI2ZmZiI7Zm9yKHZhciBoPW9bMF0vMixwPW9bMV0vMixjPTA7YzxzLmxlbmd0aDtjKyspZi5maWxsVGV4dChzW2NdLGgscCksKGgrPW9bMF0pPmVbMF0tb1swXS8yJiYoaD1vWzBdLzIscCs9b1sxXSk7cmV0dXJuIHJ9fSx7ImNzcy1mb250L3N0cmluZ2lmeSI6MTMyfV0sMjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtlfHwoZT17fSksKCJzdHJpbmciPT10eXBlb2YgdHx8QXJyYXkuaXNBcnJheSh0KSkmJihlLmZhbWlseT10KTt2YXIgcj1BcnJheS5pc0FycmF5KGUuZmFtaWx5KT9lLmZhbWlseS5qb2luKCIsICIpOmUuZmFtaWx5O2lmKCFyKXRocm93IEVycm9yKCJgZmFtaWx5YCBtdXN0IGJlIGRlZmluZWQiKTt2YXIgcz1lLnNpemV8fGUuZm9udFNpemV8fGUuZW18fDQ4LGw9ZS53ZWlnaHR8fGUuZm9udFdlaWdodHx8IiIsYz0odD1bZS5zdHlsZXx8ZS5mb250U3R5bGV8fCIiLGwsc10uam9pbigiICIpKyJweCAiK3IsZS5vcmlnaW58fCJ0b3AiKTtpZihuLmNhY2hlW3JdJiZzPD1uLmNhY2hlW3JdLmVtKXJldHVybiBpKG4uY2FjaGVbcl0sYyk7dmFyIHU9ZS5jYW52YXN8fG4uY2FudmFzLGY9dS5nZXRDb250ZXh0KCIyZCIpLGg9e3VwcGVyOnZvaWQgMCE9PWUudXBwZXI/ZS51cHBlcjoiSCIsbG93ZXI6dm9pZCAwIT09ZS5sb3dlcj9lLmxvd2VyOiJ4IixkZXNjZW50OnZvaWQgMCE9PWUuZGVzY2VudD9lLmRlc2NlbnQ6InAiLGFzY2VudDp2b2lkIDAhPT1lLmFzY2VudD9lLmFzY2VudDoiaCIsdGl0dGxlOnZvaWQgMCE9PWUudGl0dGxlP2UudGl0dGxlOiJpIixvdmVyc2hvb3Q6dm9pZCAwIT09ZS5vdmVyc2hvb3Q/ZS5vdmVyc2hvb3Q6Ik8ifSxwPU1hdGguY2VpbCgxLjUqcyk7dS5oZWlnaHQ9cCx1LndpZHRoPS41KnAsZi5mb250PXQ7dmFyIGQ9e3RvcDowfTtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxTdHlsZT0iYmxhY2siLGYuZmlsbFRleHQoIkgiLDAsMCk7dmFyIGc9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7Zi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9ImJvdHRvbSIsZi5maWxsVGV4dCgiSCIsMCxwKTt2YXIgdj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLmxpbmVIZWlnaHQ9ZC5ib3R0b209cC12K2csZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiLGYuZmlsbFRleHQoIkgiLDAscCk7dmFyIG09cC1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKS0xK2c7ZC5iYXNlbGluZT1kLmFscGhhYmV0aWM9bSxmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0ibWlkZGxlIixmLmZpbGxUZXh0KCJIIiwwLC41KnApO3ZhciB5PWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubWVkaWFuPWQubWlkZGxlPXAteS0xK2ctLjUqcCxmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iaGFuZ2luZyIsZi5maWxsVGV4dCgiSCIsMCwuNSpwKTt2YXIgeD1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLmhhbmdpbmc9cC14LTErZy0uNSpwLGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJpZGVvZ3JhcGhpYyIsZi5maWxsVGV4dCgiSCIsMCxwKTt2YXIgYj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtpZihkLmlkZW9ncmFwaGljPXAtYi0xK2csaC51cHBlciYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC51cHBlciwwLDApLGQudXBwZXI9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSksZC5jYXBIZWlnaHQ9ZC5iYXNlbGluZS1kLnVwcGVyKSxoLmxvd2VyJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLmxvd2VyLDAsMCksZC5sb3dlcj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLnhIZWlnaHQ9ZC5iYXNlbGluZS1kLmxvd2VyKSxoLnRpdHRsZSYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC50aXR0bGUsMCwwKSxkLnRpdHRsZT1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksaC5hc2NlbnQmJihmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGguYXNjZW50LDAsMCksZC5hc2NlbnQ9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGguZGVzY2VudCYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC5kZXNjZW50LDAsMCksZC5kZXNjZW50PW8oZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpKSxoLm92ZXJzaG9vdCl7Zi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLm92ZXJzaG9vdCwwLDApO3ZhciBfPW8oZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2Qub3ZlcnNob290PV8tbX1mb3IodmFyIHcgaW4gZClkW3ddLz1zO3JldHVybiBkLmVtPXMsbi5jYWNoZVtyXT1kLGkoZCxjKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9e307Zm9yKHZhciBuIGluInN0cmluZyI9PXR5cGVvZiBlJiYoZT10W2VdKSx0KSJlbSIhPT1uJiYocltuXT10W25dLWUpO3JldHVybiByfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPXQuaGVpZ2h0LHI9dC5kYXRhLG49MztuPHIubGVuZ3RoO24rPTQpaWYoMCE9PXJbbl0pcmV0dXJuIE1hdGguZmxvb3IoLjI1KihuLTMpL2UpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXQuaGVpZ2h0LHI9dC5kYXRhLG49ci5sZW5ndGgtMTtuPjA7bi09NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZS5leHBvcnRzPW4sbi5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbi5jYWNoZT17fX0se31dLDIyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjKHR8fGQsbnVsbCl9O3ZhciBuPTAsaT0xO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEpe3RoaXMuX2NvbG9yPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPXIsdGhpcy5sZWZ0PW4sdGhpcy5yaWdodD1pLHRoaXMuX2NvdW50PWF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbmV3IGEodC5fY29sb3IsdC5rZXksdC52YWx1ZSx0LmxlZnQsdC5yaWdodCx0Ll9jb3VudCl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBuZXcgYSh0LGUua2V5LGUudmFsdWUsZS5sZWZ0LGUucmlnaHQsZS5fY291bnQpfWZ1bmN0aW9uIGwodCl7dC5fY291bnQ9MSsodC5sZWZ0P3QubGVmdC5fY291bnQ6MCkrKHQucmlnaHQ/dC5yaWdodC5fY291bnQ6MCl9ZnVuY3Rpb24gYyh0LGUpe3RoaXMuX2NvbXBhcmU9dCx0aGlzLnJvb3Q9ZX12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBmKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodSwia2V5cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0LnB1c2goZSl9KSx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LCJ2YWx1ZXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dC5wdXNoKHIpfSksdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuX2NvdW50OjB9fSksdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5fY29tcGFyZSxvPXRoaXMucm9vdCx1PVtdLGY9W107bzspe3ZhciBoPXIodCxvLmtleSk7dS5wdXNoKG8pLGYucHVzaChoKSxvPWg8PTA/by5sZWZ0Om8ucmlnaHR9dS5wdXNoKG5ldyBhKG4sdCxlLG51bGwsbnVsbCwxKSk7Zm9yKHZhciBwPXUubGVuZ3RoLTI7cD49MDstLXApe289dVtwXTtmW3BdPD0wP3VbcF09bmV3IGEoby5fY29sb3Isby5rZXksby52YWx1ZSx1W3ArMV0sby5yaWdodCxvLl9jb3VudCsxKTp1W3BdPW5ldyBhKG8uX2NvbG9yLG8ua2V5LG8udmFsdWUsby5sZWZ0LHVbcCsxXSxvLl9jb3VudCsxKX1mb3IocD11Lmxlbmd0aC0xO3A+MTstLXApe3ZhciBkPXVbcC0xXTtvPXVbcF07aWYoZC5fY29sb3I9PT1pfHxvLl9jb2xvcj09PWkpYnJlYWs7dmFyIGc9dVtwLTJdO2lmKGcubGVmdD09PWQpaWYoZC5sZWZ0PT09byl7aWYoISh2PWcucmlnaHQpfHx2Ll9jb2xvciE9PW4pe2lmKGcuX2NvbG9yPW4sZy5sZWZ0PWQucmlnaHQsZC5fY29sb3I9aSxkLnJpZ2h0PWcsdVtwLTJdPWQsdVtwLTFdPW8sbChnKSxsKGQpLHA+PTMpKG09dVtwLTNdKS5sZWZ0PT09Zz9tLmxlZnQ9ZDptLnJpZ2h0PWQ7YnJlYWt9ZC5fY29sb3I9aSxnLnJpZ2h0PXMoaSx2KSxnLl9jb2xvcj1uLHAtPTF9ZWxzZXtpZighKHY9Zy5yaWdodCl8fHYuX2NvbG9yIT09bil7aWYoZC5yaWdodD1vLmxlZnQsZy5fY29sb3I9bixnLmxlZnQ9by5yaWdodCxvLl9jb2xvcj1pLG8ubGVmdD1kLG8ucmlnaHQ9Zyx1W3AtMl09byx1W3AtMV09ZCxsKGcpLGwoZCksbChvKSxwPj0zKShtPXVbcC0zXSkubGVmdD09PWc/bS5sZWZ0PW86bS5yaWdodD1vO2JyZWFrfWQuX2NvbG9yPWksZy5yaWdodD1zKGksdiksZy5fY29sb3I9bixwLT0xfWVsc2UgaWYoZC5yaWdodD09PW8pe2lmKCEodj1nLmxlZnQpfHx2Ll9jb2xvciE9PW4pe2lmKGcuX2NvbG9yPW4sZy5yaWdodD1kLmxlZnQsZC5fY29sb3I9aSxkLmxlZnQ9Zyx1W3AtMl09ZCx1W3AtMV09byxsKGcpLGwoZCkscD49MykobT11W3AtM10pLnJpZ2h0PT09Zz9tLnJpZ2h0PWQ6bS5sZWZ0PWQ7YnJlYWt9ZC5fY29sb3I9aSxnLmxlZnQ9cyhpLHYpLGcuX2NvbG9yPW4scC09MX1lbHNle3ZhciB2O2lmKCEodj1nLmxlZnQpfHx2Ll9jb2xvciE9PW4pe3ZhciBtO2lmKGQubGVmdD1vLnJpZ2h0LGcuX2NvbG9yPW4sZy5yaWdodD1vLmxlZnQsby5fY29sb3I9aSxvLnJpZ2h0PWQsby5sZWZ0PWcsdVtwLTJdPW8sdVtwLTFdPWQsbChnKSxsKGQpLGwobykscD49MykobT11W3AtM10pLnJpZ2h0PT09Zz9tLnJpZ2h0PW86bS5sZWZ0PW87YnJlYWt9ZC5fY29sb3I9aSxnLmxlZnQ9cyhpLHYpLGcuX2NvbG9yPW4scC09MX19cmV0dXJuIHVbMF0uX2NvbG9yPWksbmV3IGMocix1WzBdKX0sdS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnJvb3Qpc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24gdChlLHIpe3ZhciBuO2lmKHIubGVmdCYmKG49dChlLHIubGVmdCkpKXJldHVybiBuO3JldHVybihuPWUoci5rZXksci52YWx1ZSkpfHwoci5yaWdodD90KGUsci5yaWdodCk6dm9pZCAwKX0odCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXtpZihyKGUsaS5rZXkpPD0wKXt2YXIgYTtpZihpLmxlZnQmJihhPXQoZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYoYT1uKGkua2V5LGkudmFsdWUpKXJldHVybiBhfWlmKGkucmlnaHQpcmV0dXJuIHQoZSxyLG4saS5yaWdodCl9KGUsdGhpcy5fY29tcGFyZSx0LHRoaXMucm9vdCk7Y2FzZSAzOmlmKHRoaXMuX2NvbXBhcmUoZSxyKT49MClyZXR1cm47cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSxhKXt2YXIgbyxzPW4oZSxhLmtleSksbD1uKHIsYS5rZXkpO2lmKHM8PTApe2lmKGEubGVmdCYmKG89dChlLHIsbixpLGEubGVmdCkpKXJldHVybiBvO2lmKGw+MCYmKG89aShhLmtleSxhLnZhbHVlKSkpcmV0dXJuIG99aWYobD4wJiZhLnJpZ2h0KXJldHVybiB0KGUscixuLGksYS5yaWdodCl9KGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LCJiZWdpbiIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7cmV0dXJuIG5ldyBmKHRoaXMsdCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsImVuZCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgZih0aGlzLHQpfX0pLHUuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgZih0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgZih0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgZih0aGlzLFtdKX0sdS5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgZih0aGlzLG4pfSx1Lmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgZih0aGlzLG4pfSx1Lmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGYodGhpcyxuKX0sdS5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBmKHRoaXMsbil9LHUuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGYodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBmKHRoaXMsW10pfSx1LnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSx1LmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgaD1mLnByb3RvdHlwZTtmdW5jdGlvbiBwKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJub2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wP3RoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXTpudWxsfSxlbnVtZXJhYmxlOiEwfSksaC5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZih0aGlzLnRyZWUsdGhpcy5fc3RhY2suc2xpY2UoKSl9LGgucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLnRyZWU7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPXRbdC5sZW5ndGgtMV07ZVtlLmxlbmd0aC0xXT1uZXcgYShyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxyLnJpZ2h0LHIuX2NvdW50KTtmb3IodmFyIHU9dC5sZW5ndGgtMjt1Pj0wOy0tdSl7KHI9dFt1XSkubGVmdD09PXRbdSsxXT9lW3VdPW5ldyBhKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsZVt1KzFdLHIucmlnaHQsci5fY291bnQpOmVbdV09bmV3IGEoci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVt1KzFdLHIuX2NvdW50KX1pZigocj1lW2UubGVuZ3RoLTFdKS5sZWZ0JiZyLnJpZ2h0KXt2YXIgZj1lLmxlbmd0aDtmb3Iocj1yLmxlZnQ7ci5yaWdodDspZS5wdXNoKHIpLHI9ci5yaWdodDt2YXIgaD1lW2YtMV07ZS5wdXNoKG5ldyBhKHIuX2NvbG9yLGgua2V5LGgudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpKSxlW2YtMV0ua2V5PXIua2V5LGVbZi0xXS52YWx1ZT1yLnZhbHVlO2Zvcih1PWUubGVuZ3RoLTI7dT49ZjstLXUpcj1lW3VdLGVbdV09bmV3IGEoci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVt1KzFdLHIuX2NvdW50KTtlW2YtMV0ubGVmdD1lW2ZdfWlmKChyPWVbZS5sZW5ndGgtMV0pLl9jb2xvcj09PW4pe3ZhciBkPWVbZS5sZW5ndGgtMl07ZC5sZWZ0PT09cj9kLmxlZnQ9bnVsbDpkLnJpZ2h0PT09ciYmKGQucmlnaHQ9bnVsbCksZS5wb3AoKTtmb3IodT0wO3U8ZS5sZW5ndGg7Kyt1KWVbdV0uX2NvdW50LS07cmV0dXJuIG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX1pZihyLmxlZnR8fHIucmlnaHQpe3IubGVmdD9wKHIsci5sZWZ0KTpyLnJpZ2h0JiZwKHIsci5yaWdodCksci5fY29sb3I9aTtmb3IodT0wO3U8ZS5sZW5ndGgtMTsrK3UpZVt1XS5fY291bnQtLTtyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKDE9PT1lLmxlbmd0aClyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLG51bGwpO2Zvcih1PTA7dTxlLmxlbmd0aDsrK3UpZVt1XS5fY291bnQtLTt2YXIgZz1lW2UubGVuZ3RoLTJdO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscixhLGMsdT10Lmxlbmd0aC0xO3U+PTA7LS11KXtpZihlPXRbdV0sMD09PXUpcmV0dXJuIHZvaWQoZS5fY29sb3I9aSk7aWYoKHI9dFt1LTFdKS5sZWZ0PT09ZSl7aWYoKGE9ci5yaWdodCkucmlnaHQmJmEucmlnaHQuX2NvbG9yPT09bilyZXR1cm4gYz0oYT1yLnJpZ2h0PW8oYSkpLnJpZ2h0PW8oYS5yaWdodCksci5yaWdodD1hLmxlZnQsYS5sZWZ0PXIsYS5yaWdodD1jLGEuX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPWksci5fY29sb3I9aSxjLl9jb2xvcj1pLGwociksbChhKSx1PjEmJigoZj10W3UtMl0pLmxlZnQ9PT1yP2YubGVmdD1hOmYucmlnaHQ9YSksdm9pZCh0W3UtMV09YSk7aWYoYS5sZWZ0JiZhLmxlZnQuX2NvbG9yPT09bilyZXR1cm4gYz0oYT1yLnJpZ2h0PW8oYSkpLmxlZnQ9byhhLmxlZnQpLHIucmlnaHQ9Yy5sZWZ0LGEubGVmdD1jLnJpZ2h0LGMubGVmdD1yLGMucmlnaHQ9YSxjLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj1pLGEuX2NvbG9yPWksZS5fY29sb3I9aSxsKHIpLGwoYSksbChjKSx1PjEmJigoZj10W3UtMl0pLmxlZnQ9PT1yP2YubGVmdD1jOmYucmlnaHQ9Yyksdm9pZCh0W3UtMV09Yyk7aWYoYS5fY29sb3I9PT1pKXtpZihyLl9jb2xvcj09PW4pcmV0dXJuIHIuX2NvbG9yPWksdm9pZChyLnJpZ2h0PXMobixhKSk7ci5yaWdodD1zKG4sYSk7Y29udGludWV9YT1vKGEpLHIucmlnaHQ9YS5sZWZ0LGEubGVmdD1yLGEuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPW4sbChyKSxsKGEpLHU+MSYmKChmPXRbdS0yXSkubGVmdD09PXI/Zi5sZWZ0PWE6Zi5yaWdodD1hKSx0W3UtMV09YSx0W3VdPXIsdSsxPHQubGVuZ3RoP3RbdSsxXT1lOnQucHVzaChlKSx1Kz0yfWVsc2V7aWYoKGE9ci5sZWZ0KS5sZWZ0JiZhLmxlZnQuX2NvbG9yPT09bilyZXR1cm4gYz0oYT1yLmxlZnQ9byhhKSkubGVmdD1vKGEubGVmdCksci5sZWZ0PWEucmlnaHQsYS5yaWdodD1yLGEubGVmdD1jLGEuX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPWksci5fY29sb3I9aSxjLl9jb2xvcj1pLGwociksbChhKSx1PjEmJigoZj10W3UtMl0pLnJpZ2h0PT09cj9mLnJpZ2h0PWE6Zi5sZWZ0PWEpLHZvaWQodFt1LTFdPWEpO2lmKGEucmlnaHQmJmEucmlnaHQuX2NvbG9yPT09bilyZXR1cm4gYz0oYT1yLmxlZnQ9byhhKSkucmlnaHQ9byhhLnJpZ2h0KSxyLmxlZnQ9Yy5yaWdodCxhLnJpZ2h0PWMubGVmdCxjLnJpZ2h0PXIsYy5sZWZ0PWEsYy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9aSxhLl9jb2xvcj1pLGUuX2NvbG9yPWksbChyKSxsKGEpLGwoYyksdT4xJiYoKGY9dFt1LTJdKS5yaWdodD09PXI/Zi5yaWdodD1jOmYubGVmdD1jKSx2b2lkKHRbdS0xXT1jKTtpZihhLl9jb2xvcj09PWkpe2lmKHIuX2NvbG9yPT09bilyZXR1cm4gci5fY29sb3I9aSx2b2lkKHIubGVmdD1zKG4sYSkpO3IubGVmdD1zKG4sYSk7Y29udGludWV9dmFyIGY7YT1vKGEpLHIubGVmdD1hLnJpZ2h0LGEucmlnaHQ9cixhLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj1uLGwociksbChhKSx1PjEmJigoZj10W3UtMl0pLnJpZ2h0PT09cj9mLnJpZ2h0PWE6Zi5sZWZ0PWEpLHRbdS0xXT1hLHRbdV09cix1KzE8dC5sZW5ndGg/dFt1KzFdPWU6dC5wdXNoKGUpLHUrPTJ9fX0oZSksZy5sZWZ0PT09cj9nLmxlZnQ9bnVsbDpnLnJpZ2h0PW51bGwsbmV3IGModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwia2V5Iix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2subGVuZ3RoPjApcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS5rZXl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdLnZhbHVlfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImluZGV4Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9MCxlPXRoaXMuX3N0YWNrO2lmKDA9PT1lLmxlbmd0aCl7dmFyIHI9dGhpcy50cmVlLnJvb3Q7cmV0dXJuIHI/ci5fY291bnQ6MH1lW2UubGVuZ3RoLTFdLmxlZnQmJih0PWVbZS5sZW5ndGgtMV0ubGVmdC5fY291bnQpO2Zvcih2YXIgbj1lLmxlbmd0aC0yO24+PTA7LS1uKWVbbisxXT09PWVbbl0ucmlnaHQmJigrK3QsZVtuXS5sZWZ0JiYodCs9ZVtuXS5sZWZ0Ll9jb3VudCkpO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksaC5uZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMCE9PXQubGVuZ3RoKXt2YXIgZT10W3QubGVuZ3RoLTFdO2lmKGUucmlnaHQpZm9yKGU9ZS5yaWdodDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7ZWxzZSBmb3IodC5wb3AoKTt0Lmxlbmd0aD4wJiZ0W3QubGVuZ3RoLTFdLnJpZ2h0PT09ZTspZT10W3QubGVuZ3RoLTFdLHQucG9wKCl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiaGFzTmV4dCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4hMTtpZih0W3QubGVuZ3RoLTFdLnJpZ2h0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLmxlZnQ9PT10W2VdKXJldHVybiEwO3JldHVybiExfX0pLGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N0YWNrO2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbid0IHVwZGF0ZSBlbXB0eSBub2RlISIpO3ZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj1lW2UubGVuZ3RoLTFdO3Jbci5sZW5ndGgtMV09bmV3IGEobi5fY29sb3Isbi5rZXksdCxuLmxlZnQsbi5yaWdodCxuLl9jb3VudCk7Zm9yKHZhciBpPWUubGVuZ3RoLTI7aT49MDstLWkpKG49ZVtpXSkubGVmdD09PWVbaSsxXT9yW2ldPW5ldyBhKG4uX2NvbG9yLG4ua2V5LG4udmFsdWUscltpKzFdLG4ucmlnaHQsbi5fY291bnQpOnJbaV09bmV3IGEobi5fY29sb3Isbi5rZXksbi52YWx1ZSxuLmxlZnQscltpKzFdLG4uX2NvdW50KTtyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLHJbMF0pfSxoLnByZXY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5sZWZ0KWZvcihlPWUubGVmdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5sZWZ0PT09ZTspZT10W3QubGVuZ3RoLTFdLHQucG9wKCl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiaGFzUHJldiIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4hMTtpZih0W3QubGVuZ3RoLTFdLmxlZnQpcmV0dXJuITA7Zm9yKHZhciBlPXQubGVuZ3RoLTE7ZT4wOy0tZSlpZih0W2UtMV0ucmlnaHQ9PT10W2VdKXJldHVybiEwO3JldHVybiExfX0pfSx7fV0sMjI3OltmdW5jdGlvbih0LGUscil7dmFyIG49Wy45OTk5OTk5OTk5OTk4MDk5LDY3Ni41MjAzNjgxMjE4ODUxLC0xMjU5LjEzOTIxNjcyMjQwMjgsNzcxLjMyMzQyODc3NzY1MzEsLTE3Ni42MTUwMjkxNjIxNDA2LDEyLjUwNzM0MzI3ODY4NjkwNSwtLjEzODU3MTA5NTI2NTcyMDEyLDk5ODQzNjk1NzgwMTk1NzJlLTIxLDEuNTA1NjMyNzM1MTQ5MzExNmUtN10saT02MDcvMTI4LGE9Wy45OTk5OTk5OTk5OTk5OTcxLDU3LjE1NjIzNTY2NTg2MjkyLC01OS41OTc5NjAzNTU0NzU0OSwxNC4xMzYwOTc5NzQ3NDE3NDYsLS40OTE5MTM4MTYwOTc2MjAyLDMzOTk0NjQ5OTg0ODExODllLTIwLDQ2NTIzNjI4OTI3MDQ4NThlLTIwLC05ODM3NDQ3NTMwNDg3OTU2ZS0yMCwuMDAwMTU4MDg4NzAzMjI0OTEyNSwtLjAwMDIxMDI2NDQ0MTcyNDEwNDg4LC4wMDAyMTc0Mzk2MTgxMTUyMTI2NSwtLjAwMDE2NDMxODEwNjUzNjc2MzksODQ0MTgyMjM5ODM4NTI3NWUtMjAsLTI2MTkwODM4NDAxNTgxNDA4ZS0yMSwzNjg5OTE4MjY1OTUzMTYyNWUtMjJdO2Z1bmN0aW9uIG8odCl7aWYodDwwKXJldHVybiBOdW1iZXIoIjAvMCIpO2Zvcih2YXIgZT1hWzBdLHI9YS5sZW5ndGgtMTtyPjA7LS1yKWUrPWFbcl0vKHQrcik7dmFyIG49dCtpKy41O3JldHVybi41Kk1hdGgubG9nKDIqTWF0aC5QSSkrKHQrLjUpKk1hdGgubG9nKG4pLW4rTWF0aC5sb2coZSktTWF0aC5sb2codCl9ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSl7aWYoZTwuNSlyZXR1cm4gTWF0aC5QSS8oTWF0aC5zaW4oTWF0aC5QSSplKSp0KDEtZSkpO2lmKGU+MTAwKXJldHVybiBNYXRoLmV4cChvKGUpKTtlLT0xO2Zvcih2YXIgcj1uWzBdLGk9MTtpPDk7aSsrKXIrPW5baV0vKGUraSk7dmFyIGE9ZSs3Ky41O3JldHVybiBNYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLnBvdyhhLGUrLjUpKk1hdGguZXhwKC1hKSpyfSxlLmV4cG9ydHMubG9nPW99LHt9XSwyMjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBzcGVjaWZ5IHR5cGUgc3RyaW5nIik7aWYoZT1lfHx7fSwidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50JiYhZS5jYW52YXMpcmV0dXJuIG51bGw7dmFyIHI9ZS5jYW52YXN8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOyJudW1iZXIiPT10eXBlb2YgZS53aWR0aCYmKHIud2lkdGg9ZS53aWR0aCk7Im51bWJlciI9PXR5cGVvZiBlLmhlaWdodCYmKHIuaGVpZ2h0PWUuaGVpZ2h0KTt2YXIgbixpPWU7dHJ5e3ZhciBhPVt0XTswPT09dC5pbmRleE9mKCJ3ZWJnbCIpJiZhLnB1c2goImV4cGVyaW1lbnRhbC0iK3QpO2Zvcih2YXIgbz0wO288YS5sZW5ndGg7bysrKWlmKG49ci5nZXRDb250ZXh0KGFbb10saSkpcmV0dXJuIG59Y2F0Y2godCl7bj1udWxsfXJldHVybiBufHxudWxsfX0se31dLDIyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdSh0KTtyZXR1cm4gci51cGRhdGUoZSkscn07dmFyIG49dCgiLi9saWIvdGV4dC5qcyIpLGk9dCgiLi9saWIvbGluZXMuanMiKSxhPXQoIi4vbGliL2JhY2tncm91bmQuanMiKSxvPXQoIi4vbGliL2N1YmUuanMiKSxzPXQoIi4vbGliL3RpY2tzLmpzIiksbD1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSk7ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fWZ1bmN0aW9uIHUodCl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLmF1dG9UaWNrcz0hMCx0aGlzLnRpY2tTcGFjaW5nPVsxLDEsMV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy50aWNrRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMudGlja1NpemU9WzEyLDEyLDEyXSx0aGlzLnRpY2tBbmdsZT1bMCwwLDBdLHRoaXMudGlja0FsaWduPVsiYXV0byIsImF1dG8iLCJhdXRvIl0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzEwLDEwLDEwXSx0aGlzLmxhc3RDdWJlUHJvcHM9e2N1YmVFZGdlczpbMCwwLDBdLGF4aXM6WzAsMCwwXX0sdGhpcy5sYWJlbHM9WyJ4IiwieSIsInoiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5sYWJlbEZvbnQ9InNhbnMtc2VyaWYiLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbEFuZ2xlPVswLDAsMF0sdGhpcy5sYWJlbEFsaWduPVsiYXV0byIsImF1dG8iLCJhdXRvIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMTAsMTAsMTBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzAsMCwwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMSwhMSwhMV0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9maXJzdEluaXQ9ITAsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fYmFja2dyb3VuZD1hKHQpfXZhciBmPXUucHJvdG90eXBlO2Z1bmN0aW9uIGgoKXt0aGlzLnByaW1hbE9mZnNldD1bMCwwLDBdLHRoaXMucHJpbWFsTWlub3I9WzAsMCwwXSx0aGlzLm1pcnJvck9mZnNldD1bMCwwLDBdLHRoaXMubWlycm9yTWlub3I9WzAsMCwwXX1mLnVwZGF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXtpZihuIGluIHQpe3ZhciBpLGE9dFtuXSxvPXRoaXNbbl07KGU/QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShhWzBdKTpBcnJheS5pc0FycmF5KGEpKT90aGlzW25dPWk9W3IoYVswXSkscihhWzFdKSxyKGFbMl0pXTp0aGlzW25dPWk9W3IoYSkscihhKSxyKGEpXTtmb3IodmFyIHM9MDtzPDM7KytzKWlmKGlbc10hPT1vW3NdKXJldHVybiEwfXJldHVybiExfXQ9dHx8e307dmFyIHIsYT1lLmJpbmQodGhpcywhMSxOdW1iZXIpLG89ZS5iaW5kKHRoaXMsITEsQm9vbGVhbiksbD1lLmJpbmQodGhpcywhMSxTdHJpbmcpLGM9ZS5iaW5kKHRoaXMsITAsZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMz09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwxXTtpZig0PT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdXX1yZXR1cm5bMCwwLDAsMV19KSx1PSExLGY9ITE7aWYoImJvdW5kcyJpbiB0KWZvcih2YXIgaD10LmJvdW5kcyxwPTA7cDwyOysrcClmb3IodmFyIGQ9MDtkPDM7KytkKWhbcF1bZF0hPT10aGlzLmJvdW5kc1twXVtkXSYmKGY9ITApLHRoaXMuYm91bmRzW3BdW2RdPWhbcF1bZF07aWYoInRpY2tzImluIHQpe3I9dC50aWNrcyx1PSEwLHRoaXMuYXV0b1RpY2tzPSExO2ZvcihwPTA7cDwzOysrcCl0aGlzLnRpY2tTcGFjaW5nW3BdPTB9ZWxzZSBhKCJ0aWNrU3BhY2luZyIpJiYodGhpcy5hdXRvVGlja3M9ITAsZj0hMCk7aWYodGhpcy5fZmlyc3RJbml0JiYoInRpY2tzImluIHR8fCJ0aWNrU3BhY2luZyJpbiB0fHwodGhpcy5hdXRvVGlja3M9ITApLGY9ITAsdT0hMCx0aGlzLl9maXJzdEluaXQ9ITEpLGYmJnRoaXMuYXV0b1RpY2tzJiYocj1zLmNyZWF0ZSh0aGlzLmJvdW5kcyx0aGlzLnRpY2tTcGFjaW5nKSx1PSEwKSx1KXtmb3IocD0wO3A8MzsrK3ApcltwXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KTtzLmVxdWFsKHIsdGhpcy50aWNrcyk/dT0hMTp0aGlzLnRpY2tzPXJ9bygidGlja0VuYWJsZSIpLGwoInRpY2tGb250IikmJih1PSEwKSxhKCJ0aWNrU2l6ZSIpLGEoInRpY2tBbmdsZSIpLGEoInRpY2tQYWQiKSxjKCJ0aWNrQ29sb3IiKTt2YXIgZz1sKCJsYWJlbHMiKTtsKCJsYWJlbEZvbnQiKSYmKGc9ITApLG8oImxhYmVsRW5hYmxlIiksYSgibGFiZWxTaXplIiksYSgibGFiZWxQYWQiKSxjKCJsYWJlbENvbG9yIiksbygibGluZUVuYWJsZSIpLG8oImxpbmVNaXJyb3IiKSxhKCJsaW5lV2lkdGgiKSxjKCJsaW5lQ29sb3IiKSxvKCJsaW5lVGlja0VuYWJsZSIpLG8oImxpbmVUaWNrTWlycm9yIiksYSgibGluZVRpY2tMZW5ndGgiKSxhKCJsaW5lVGlja1dpZHRoIiksYygibGluZVRpY2tDb2xvciIpLG8oImdyaWRFbmFibGUiKSxhKCJncmlkV2lkdGgiKSxjKCJncmlkQ29sb3IiKSxvKCJ6ZXJvRW5hYmxlIiksYygiemVyb0xpbmVDb2xvciIpLGEoInplcm9MaW5lV2lkdGgiKSxvKCJiYWNrZ3JvdW5kRW5hYmxlIiksYygiYmFja2dyb3VuZENvbG9yIiksdGhpcy5fdGV4dD90aGlzLl90ZXh0JiYoZ3x8dSkmJnRoaXMuX3RleHQudXBkYXRlKHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCk6dGhpcy5fdGV4dD1uKHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KSx0aGlzLl9saW5lcyYmdSYmKHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsKSx0aGlzLl9saW5lc3x8KHRoaXMuX2xpbmVzPWkodGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLnRpY2tzKSl9O3ZhciBwPVtuZXcgaCxuZXcgaCxuZXcgaF07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT10LnByaW1hbE9mZnNldCxvPXQucHJpbWFsTWlub3Iscz10Lm1pcnJvck9mZnNldCxsPXQubWlycm9yTWlub3IsYz1uW2VdLHU9MDt1PDM7Kyt1KWlmKGUhPT11KXt2YXIgZj1hLGg9cyxwPW8sZD1sO2MmMTw8dSYmKGY9cyxoPWEscD1sLGQ9byksZlt1XT1yWzBdW3VdLGhbdV09clsxXVt1XSxpW3VdPjA/KHBbdV09LTEsZFt1XT0wKToocFt1XT0wLGRbdV09MSl9fXZhciBnPVswLDAsMF0sdj17bW9kZWw6bCx2aWV3OmwscHJvamVjdGlvbjpsLF9vcnRobzohMX07Zi5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxmLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZi5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fTt2YXIgbT1bMCwwLDBdLHk9WzAsMCwwXSx4PVswLDAsMF07Zi5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8djtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGwsbj10LnZpZXd8fGwsaT10LnByb2plY3Rpb258fGwsYT10aGlzLmJvdW5kcyxzPXQuX29ydGhvfHwhMSx1PW8ocixuLGksYSxzKSxmPXUuY3ViZUVkZ2VzLGg9dS5heGlzLGI9blsxMl0sXz1uWzEzXSx3PW5bMTRdLGs9blsxNV0sVD0ocz8yOjEpKnRoaXMucGl4ZWxSYXRpbyooaVszXSpiK2lbN10qXytpWzExXSp3K2lbMTVdKmspL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxBPTA7QTwzOysrQSl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW0FdPWZbQV0sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNbQV09aFtBXTt2YXIgTT1wO2ZvcihBPTA7QTwzOysrQSlkKHBbQV0sQSx0aGlzLmJvdW5kcyxmLGgpO2U9dGhpcy5nbDt2YXIgUyxFPWc7Zm9yKEE9MDtBPDM7KytBKXRoaXMuYmFja2dyb3VuZEVuYWJsZVtBXT9FW0FdPWhbQV06RVtBXT0wO3RoaXMuX2JhY2tncm91bmQuZHJhdyhyLG4saSxhLEUsdGhpcy5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuX2xpbmVzLmJpbmQocixuLGksdGhpcyk7Zm9yKEE9MDtBPDM7KytBKXt2YXIgQz1bMCwwLDBdO2hbQV0+MD9DW0FdPWFbMV1bQV06Q1tBXT1hWzBdW0FdO2Zvcih2YXIgTD0wO0w8MjsrK0wpe3ZhciB6PShBKzErTCklMyxPPShBKzErKDFeTCkpJTM7dGhpcy5ncmlkRW5hYmxlW3pdJiZ0aGlzLl9saW5lcy5kcmF3R3JpZCh6LE8sdGhpcy5ib3VuZHMsQyx0aGlzLmdyaWRDb2xvclt6XSx0aGlzLmdyaWRXaWR0aFt6XSp0aGlzLnBpeGVsUmF0aW8pfWZvcihMPTA7TDwyOysrTCl7ej0oQSsxK0wpJTMsTz0oQSsxKygxXkwpKSUzO3RoaXMuemVyb0VuYWJsZVtPXSYmTWF0aC5taW4oYVswXVtPXSxhWzFdW09dKTw9MCYmTWF0aC5tYXgoYVswXVtPXSxhWzFdW09dKT49MCYmdGhpcy5fbGluZXMuZHJhd1plcm8oeixPLHRoaXMuYm91bmRzLEMsdGhpcy56ZXJvTGluZUNvbG9yW09dLHRoaXMuemVyb0xpbmVXaWR0aFtPXSp0aGlzLnBpeGVsUmF0aW8pfX1mb3IoQT0wO0E8MzsrK0Epe3RoaXMubGluZUVuYWJsZVtBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKEEsdGhpcy5ib3VuZHMsTVtBXS5wcmltYWxPZmZzZXQsdGhpcy5saW5lQ29sb3JbQV0sdGhpcy5saW5lV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKSx0aGlzLmxpbmVNaXJyb3JbQV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzTGluZShBLHRoaXMuYm91bmRzLE1bQV0ubWlycm9yT2Zmc2V0LHRoaXMubGluZUNvbG9yW0FdLHRoaXMubGluZVdpZHRoW0FdKnRoaXMucGl4ZWxSYXRpbyk7dmFyIEk9YyhtLE1bQV0ucHJpbWFsTWlub3IpLEQ9Yyh5LE1bQV0ubWlycm9yTWlub3IpLFA9dGhpcy5saW5lVGlja0xlbmd0aDtmb3IoTD0wO0w8MzsrK0wpe3ZhciBSPVQvcls1KkxdO0lbTF0qPVBbTF0qUixEW0xdKj1QW0xdKlJ9dGhpcy5saW5lVGlja0VuYWJsZVtBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhBLE1bQV0ucHJpbWFsT2Zmc2V0LEksdGhpcy5saW5lVGlja0NvbG9yW0FdLHRoaXMubGluZVRpY2tXaWR0aFtBXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZVRpY2tNaXJyb3JbQV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzVGlja3MoQSxNW0FdLm1pcnJvck9mZnNldCxELHRoaXMubGluZVRpY2tDb2xvcltBXSx0aGlzLmxpbmVUaWNrV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKX10aGlzLl9saW5lcy51bmJpbmQoKSx0aGlzLl90ZXh0LmJpbmQocixuLGksdGhpcy5waXhlbFJhdGlvKTt2YXIgRixCO2Z1bmN0aW9uIE4odCl7KEI9WzAsMCwwXSlbdF09MX1mdW5jdGlvbiBqKHQsZSxyKXt2YXIgbj0odCsxKSUzLGk9KHQrMiklMyxhPWVbbl0sbz1lW2ldLHM9cltuXSxsPXJbaV07YT4wJiZsPjA/TihuKTphPjAmJmw8MD9OKG4pOmE8MCYmbD4wP04obik6YTwwJiZsPDA/TihuKTpvPjAmJnM+MD9OKGkpOm8+MCYmczwwP04oaSk6bzwwJiZzPjA/TihpKTpvPDAmJnM8MCYmTihpKX1mb3IoQT0wO0E8MzsrK0Epe3ZhciBWPU1bQV0ucHJpbWFsTWlub3IsVT1NW0FdLm1pcnJvck1pbm9yLHE9Yyh4LE1bQV0ucHJpbWFsT2Zmc2V0KTtmb3IoTD0wO0w8MzsrK0wpdGhpcy5saW5lVGlja0VuYWJsZVtBXSYmKHFbTF0rPVQqVltMXSpNYXRoLm1heCh0aGlzLmxpbmVUaWNrTGVuZ3RoW0xdLDApL3JbNSpMXSk7dmFyIEg9WzAsMCwwXTtpZihIW0FdPTEsdGhpcy50aWNrRW5hYmxlW0FdKXstMzYwMD09PXRoaXMudGlja0FuZ2xlW0FdPyh0aGlzLnRpY2tBbmdsZVtBXT0wLHRoaXMudGlja0FsaWduW0FdPSJhdXRvIik6dGhpcy50aWNrQWxpZ25bQV09LTEsRj0xLCJhdXRvIj09PShTPVt0aGlzLnRpY2tBbGlnbltBXSwuNSxGXSlbMF0/U1swXT0wOlNbMF09cGFyc2VJbnQoIiIrU1swXSksQj1bMCwwLDBdLGooQSxWLFUpO2ZvcihMPTA7TDwzOysrTClxW0xdKz1UKlZbTF0qdGhpcy50aWNrUGFkW0xdL3JbNSpMXTt0aGlzLl90ZXh0LmRyYXdUaWNrcyhBLHRoaXMudGlja1NpemVbQV0sdGhpcy50aWNrQW5nbGVbQV0scSx0aGlzLnRpY2tDb2xvcltBXSxILEIsUyl9aWYodGhpcy5sYWJlbEVuYWJsZVtBXSl7Rj0wLEI9WzAsMCwwXSx0aGlzLmxhYmVsc1tBXS5sZW5ndGg+NCYmKE4oQSksRj0xKSwiYXV0byI9PT0oUz1bdGhpcy5sYWJlbEFsaWduW0FdLC41LEZdKVswXT9TWzBdPTA6U1swXT1wYXJzZUludCgiIitTWzBdKTtmb3IoTD0wO0w8MzsrK0wpcVtMXSs9VCpWW0xdKnRoaXMubGFiZWxQYWRbTF0vcls1KkxdO3FbQV0rPS41KihhWzBdW0FdK2FbMV1bQV0pLHRoaXMuX3RleHQuZHJhd0xhYmVsKEEsdGhpcy5sYWJlbFNpemVbQV0sdGhpcy5sYWJlbEFuZ2xlW0FdLHEsdGhpcy5sYWJlbENvbG9yW0FdLFswLDAsMF0sQixTKX19dGhpcy5fdGV4dC51bmJpbmQoKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dC5kaXNwb3NlKCksdGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2JhY2tncm91bmQuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2JhY2tncm91bmQ9bnVsbCx0aGlzLmdsPW51bGx9fSx7Ii4vbGliL2JhY2tncm91bmQuanMiOjIzMCwiLi9saWIvY3ViZS5qcyI6MjMxLCIuL2xpYi9saW5lcy5qcyI6MjMyLCIuL2xpYi90ZXh0LmpzIjoyMzQsIi4vbGliL3RpY2tzLmpzIjoyMzV9XSwyMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPVtdLHM9MCxsPTA7bDwzOysrbClmb3IodmFyIGM9KGwrMSklMyx1PShsKzIpJTMsZj1bMCwwLDBdLGg9WzAsMCwwXSxwPS0xO3A8PTE7cCs9Mil7ci5wdXNoKHMscysyLHMrMSxzKzEscysyLHMrMyksZltsXT1wLGhbbF09cDtmb3IodmFyIGQ9LTE7ZDw9MTtkKz0yKXtmW2NdPWQ7Zm9yKHZhciBnPS0xO2c8PTE7Zys9MilmW3VdPWcsZS5wdXNoKGZbMF0sZlsxXSxmWzJdLGhbMF0saFsxXSxoWzJdKSxzKz0xfXZhciB2PWM7Yz11LHU9dn12YXIgbT1uKHQsbmV3IEZsb2F0MzJBcnJheShlKSkseT1uKHQsbmV3IFVpbnQxNkFycmF5KHIpLHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLHg9aSh0LFt7YnVmZmVyOm0sdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6MjR9LHtidWZmZXI6bSx0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6MjR9XSx5KSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGIuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MSxuZXcgbyh0LG0seCxiKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycyIpLmJnO2Z1bmN0aW9uIG8odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1ufXZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPSExLHM9MDtzPDM7KytzKW89b3x8aVtzXTtpZihvKXt2YXIgbD10aGlzLmdsO2wuZW5hYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCksbC5wb2x5Z29uT2Zmc2V0KDEsMiksdGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zPXttb2RlbDp0LHZpZXc6ZSxwcm9qZWN0aW9uOnIsYm91bmRzOm4sZW5hYmxlOmksY29sb3JzOmF9LHRoaXMudmFvLmJpbmQoKSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDM2KSx0aGlzLnZhby51bmJpbmQoKSxsLmRpc2FibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKX19LHMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjIzMywiZ2wtYnVmZmVyIjoyMzcsImdsLXZhbyI6MzE5fV0sMjMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHApe2kocyxlLHQpLGkocyxyLHMpO2Zvcih2YXIgeT0wLHg9MDt4PDI7Kyt4KXt1WzJdPWFbeF1bMl07Zm9yKHZhciBiPTA7YjwyOysrYil7dVsxXT1hW2JdWzFdO2Zvcih2YXIgXz0wO188MjsrK18pdVswXT1hW19dWzBdLGgobFt5XSx1LHMpLHkrPTF9fWZvcih2YXIgdz0tMSx4PTA7eDw4OysreCl7Zm9yKHZhciBrPWxbeF1bM10sVD0wO1Q8MzsrK1QpY1t4XVtUXT1sW3hdW1RdL2s7cCYmKGNbeF1bMl0qPS0xKSxrPDAmJih3PDA/dz14OmNbeF1bMl08Y1t3XVsyXSYmKHc9eCkpfWlmKHc8MCl7dz0wO2Zvcih2YXIgQT0wO0E8MzsrK0Epe2Zvcih2YXIgTT0oQSsyKSUzLFM9KEErMSklMyxFPS0xLEM9LTEsTD0wO0w8MjsrK0wpe3ZhciB6PUw8PEEsTz16KyhMPDxNKSsoMS1MPDxTKSxJPXorKDEtTDw8TSkrKEw8PFMpO28oY1t6XSxjW09dLGNbSV0sZik8MHx8KEw/RT0xOkM9MSl9aWYoRTwwfHxDPDApQz5FJiYod3w9MTw8QSk7ZWxzZXtmb3IodmFyIEw9MDtMPDI7KytMKXt2YXIgej1MPDxBLE89eisoTDw8TSkrKDEtTDw8UyksST16KygxLUw8PE0pKyhMPDxTKSxEPWQoW2xbel0sbFtPXSxsW0ldLGxbeisoMTw8TSkrKDE8PFMpXV0pO0w/RT1EOkM9RH1DPkUmJih3fD0xPDxBKX19fWZvcih2YXIgUD03XncsUj0tMSx4PTA7eDw4OysreCl4IT09dyYmeCE9PVAmJihSPDA/Uj14OmNbUl1bMV0+Y1t4XVsxXSYmKFI9eCkpO2Zvcih2YXIgRj0tMSx4PTA7eDwzOysreCl7dmFyIEI9Ul4xPDx4O2lmKEIhPT13JiZCIT09UCl7RjwwJiYoRj1CKTt2YXIgUz1jW0JdO1NbMF08Y1tGXVswXSYmKEY9Qil9fWZvcih2YXIgTj0tMSx4PTA7eDwzOysreCl7dmFyIEI9Ul4xPDx4O2lmKEIhPT13JiZCIT09UCYmQiE9PUYpe048MCYmKE49Qik7dmFyIFM9Y1tCXTtTWzBdPmNbTl1bMF0mJihOPUIpfX12YXIgaj1nO2pbMF09alsxXT1qWzJdPTAsaltuLmxvZzIoRl5SKV09UiZGLGpbbi5sb2cyKFJeTildPVImTjt2YXIgVj03Xk47Vj09PXd8fFY9PT1QPyhWPTdeRixqW24ubG9nMihOXlYpXT1WJk4pOmpbbi5sb2cyKEZeVildPVYmRjtmb3IodmFyIFU9dixxPXcsQT0wO0E8MzsrK0EpVVtBXT1xJjE8PEE/LTE6MTtyZXR1cm4gbX07dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxhPXQoInNwbGl0LXBvbHlnb24iKSxvPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLHM9bmV3IEFycmF5KDE2KSxsPW5ldyBBcnJheSg4KSxjPW5ldyBBcnJheSg4KSx1PW5ldyBBcnJheSgzKSxmPVswLDAsMF07ZnVuY3Rpb24gaCh0LGUscil7Zm9yKHZhciBuPTA7bjw0Oysrbil7dFtuXT1yWzEyK25dO2Zvcih2YXIgaT0wO2k8MzsrK2kpdFtuXSs9ZVtpXSpyWzQqaStuXX19IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDw4OysrdClsW3RdPVsxLDEsMSwxXSxjW3RdPVsxLDEsMV19KCk7dmFyIHA9W1swLDAsMSwwLDBdLFswLDAsLTEsMSwwXSxbMCwtMSwwLDEsMF0sWzAsMSwwLDEsMF0sWy0xLDAsMCwxLDBdLFsxLDAsMCwxLDBdXTtmdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT0wO2U8cC5sZW5ndGg7KytlKWlmKCh0PWEucG9zaXRpdmUodCxwW2VdKSkubGVuZ3RoPDMpcmV0dXJuIDA7dmFyIHI9dFswXSxuPXJbMF0vclszXSxpPXJbMV0vclszXSxvPTA7Zm9yKGU9MTtlKzE8dC5sZW5ndGg7KytlKXt2YXIgcz10W2VdLGw9dFtlKzFdLGM9c1swXS9zWzNdLW4sdT1zWzFdL3NbM10taSxmPWxbMF0vbFszXS1uLGg9bFsxXS9sWzNdLWk7bys9TWF0aC5hYnMoYypoLXUqZil9cmV0dXJuIG99dmFyIGc9WzEsMSwxXSx2PVswLDAsMF0sbT17Y3ViZUVkZ2VzOmcsYXhpczp2fX0seyJiaXQtdHdpZGRsZSI6ODIsImdsLW1hdDQvbXVsdGlwbHkiOjI2Mywicm9idXN0LW9yaWVudGF0aW9uIjo0OTQsInNwbGl0LXBvbHlnb24iOjUxMX1dLDIzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPVtdLHM9WzAsMCwwXSxsPVswLDAsMF0sYz1bMCwwLDBdLHU9WzAsMCwwXTtvLnB1c2goMCwwLDEsMCwxLDEsMCwwLC0xLDAsMCwtMSwwLDEsMSwwLDEsLTEpO2Zvcih2YXIgZj0wO2Y8MzsrK2Ype2Zvcih2YXIgaD1vLmxlbmd0aC8zfDAsZD0wO2Q8cltmXS5sZW5ndGg7KytkKXt2YXIgZz0rcltmXVtkXS54O28ucHVzaChnLDAsMSxnLDEsMSxnLDAsLTEsZywwLC0xLGcsMSwxLGcsMSwtMSl9dmFyIHY9by5sZW5ndGgvM3wwO3NbZl09aCxsW2ZdPXYtaDtmb3IodmFyIGg9by5sZW5ndGgvM3wwLG09MDttPHJbZl0ubGVuZ3RoOysrbSl7dmFyIGc9K3JbZl1bbV0ueDtvLnB1c2goZywwLDEsZywxLDEsZywwLC0xLGcsMCwtMSxnLDEsMSxnLDEsLTEpfXZhciB2PW8ubGVuZ3RoLzN8MDtjW2ZdPWgsdVtmXT12LWh9dmFyIHk9bih0LG5ldyBGbG9hdDMyQXJyYXkobykpLHg9aSh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBwKHQseSx4LGIsbCxzLHUsYyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMiKS5saW5lLG89WzAsMCwwXSxzPVswLDAsMF0sbD1bMCwwLDBdLGM9WzAsMCwwXSx1PVsxLDFdO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gcCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfXZhciBkPXAucHJvdG90eXBlO2QuYmluZD1mdW5jdGlvbih0LGUscil7dGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXQsdGhpcy5zaGFkZXIudW5pZm9ybXMudmlldz1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb249cix1WzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHVbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlblNoYXBlPXUsdGhpcy52YW8uYmluZCgpfSxkLnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSxkLmRyYXdBeGlzTGluZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWYocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPXMsYVt0XT1lWzFdW3RdLWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPWE7dmFyIG8sdT1oKGMscik7dVt0XSs9ZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLChvPWYobCkpWyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNiksKG89ZihsKSlbKHQrMSklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kcmF3QXhpc1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodGhpcy50aWNrQ291bnRbdF0pe3ZhciBhPWYobyk7YVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWk7dmFyIHM9ZihsKTtzW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKX19LGQuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZ3JpZENvdW50W3RdKXt2YXIgdT1mKHMpO3VbZV09clsxXVtlXS1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz11O3ZhciBwPWgoYyxuKTtwW2VdKz1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1wO3ZhciBkPWYobyk7ZFt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1kO3ZhciBnPWYobCk7Z1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Zyx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5ncmlkQ291bnRbdF0sdGhpcy5ncmlkT2Zmc2V0W3RdKX19LGQuZHJhd1plcm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWYocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPW8sb1t0XT1yWzFdW3RdLXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPW87dmFyIHU9aChjLG4pO3VbdF0rPXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXU7dmFyIHA9ZihsKTtwW2VdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1wLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMudmVydEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjIzMywiZ2wtYnVmZmVyIjoyMzcsImdsLXZhbyI6MzE5fV0sMjMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBtYWpvckF4aXMsIG1pbm9yQXhpcywgc2NyZWVuQXhpcztcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xuXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBtYWpvciA9IHBvc2l0aW9uLnggKiBtYWpvckF4aXM7XG4gIHZlYzMgbWlub3IgPSBwb3NpdGlvbi55ICogbWlub3JBeGlzO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gbWFqb3IgKyBtaW5vciArIG9mZnNldDtcbiAgdmVjMyBwUG9zaXRpb24gPSBwcm9qZWN0KHZQb3NpdGlvbik7XG4gIHZlYzMgb2Zmc2V0ID0gcHJvamVjdCh2UG9zaXRpb24gKyBzY3JlZW5BeGlzICogcG9zaXRpb24ueik7XG5cbiAgdmVjMiBzY3JlZW4gPSBub3JtYWxpemUoKG9mZnNldCAtIHBQb3NpdGlvbikueHkgKiBzY3JlZW5TaGFwZSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocFBvc2l0aW9uICsgdmVjMygwLjUgKiBzY3JlZW4gKiBsaW5lV2lkdGgsIDApLCAxLjApO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59Il0pO3IubGluZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTt2YXIgcz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIGF4aXMsIGFsaWduRGlyLCBhbGlnbk9wdDtcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIGFuZ2xlLCBwaXhlbFNjYWxlO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG5cbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcbiAgdmVjNCBwcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG4gIHJldHVybiBwcC54eXogLyBtYXgocHAudywgMC4wMDAxKTtcbn1cblxuZmxvYXQgY29tcHV0ZVZpZXdBbmdsZSh2ZWMzIGEsIHZlYzMgYikge1xuICB2ZWMzIEEgPSBwcm9qZWN0KGEpO1xuICB2ZWMzIEIgPSBwcm9qZWN0KGIpO1xuXG4gIHJldHVybiBhdGFuKFxuICAgIChCLnkgLSBBLnkpICogcmVzb2x1dGlvbi55LFxuICAgIChCLnggLSBBLngpICogcmVzb2x1dGlvbi54XG4gICk7XG59XG5cbmNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI7XG5jb25zdCBmbG9hdCBUV09fUEkgPSAyLjAgKiBQSTtcbmNvbnN0IGZsb2F0IEhBTEZfUEkgPSAwLjUgKiBQSTtcbmNvbnN0IGZsb2F0IE9ORV9BTkRfSEFMRl9QSSA9IDEuNSAqIFBJO1xuXG5pbnQgb3B0aW9uID0gaW50KGZsb29yKGFsaWduT3B0LnggKyAwLjAwMSkpO1xuZmxvYXQgaHZfcmF0aW8gPSAgICAgICBhbGlnbk9wdC55O1xuYm9vbCBlbmFibGVBbGlnbiA9ICAgIChhbGlnbk9wdC56ICE9IDAuMCk7XG5cbmZsb2F0IG1vZF9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2QoYSwgUEkpO1xufVxuXG5mbG9hdCBwb3NpdGl2ZV9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2RfYW5nbGUoKGEgPCAwLjApID9cbiAgICBhICsgVFdPX1BJIDpcbiAgICBhXG4gICk7XG59XG5cbmZsb2F0IGxvb2tfdXB3YXJkcyhmbG9hdCBhKSB7XG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcbiAgcmV0dXJuICgoYiA+IEhBTEZfUEkpICYmIChiIDw9IE9ORV9BTkRfSEFMRl9QSSkpID9cbiAgICBiIC0gUEkgOlxuICAgIGI7XG59XG5cbmZsb2F0IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChmbG9hdCBhLCBmbG9hdCByYXRpbykge1xuICAvLyByYXRpbyBjb250cm9scyB0aGUgcmF0aW8gYmV0d2VlbiBiZWluZyBob3Jpem9udGFsIHRvICh2ZXJ0aWNhbCArIGhvcml6b250YWwpXG4gIC8vIGlmIHJhdGlvIGlzIHNldCB0byAwLjUgdGhlbiBpdCBpcyA1MCUsIDUwJS5cbiAgLy8gd2hlbiB1c2luZyBhIGhpZ2hlciByYXRpbyBlLmcuIDAuNzUgdGhlIHJlc3VsdCB3b3VsZFxuICAvLyBsaWtlbHkgYmUgbW9yZSBob3Jpem9udGFsIHRoYW4gdmVydGljYWwuXG5cbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuXG4gIHJldHVyblxuICAgIChiIDwgKCAgICAgIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcbiAgICAoYiA8ICgyLjAgLSByYXRpbykgKiBIQUxGX1BJKSA/IC1IQUxGX1BJIDpcbiAgICAoYiA8ICgyLjAgKyByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XG4gICAgKGIgPCAoNC4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDtcbn1cblxuZmxvYXQgcm91bmRUbyhmbG9hdCBhLCBmbG9hdCBiKSB7XG4gIHJldHVybiBmbG9hdChiICogZmxvb3IoKGEgKyAwLjUgKiBiKSAvIGIpKTtcbn1cblxuZmxvYXQgbG9va19yb3VuZF9uX2RpcmVjdGlvbnMoZmxvYXQgYSwgaW50IG4pIHtcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuICBmbG9hdCBkaXYgPSBUV09fUEkgLyBmbG9hdChuKTtcbiAgZmxvYXQgYyA9IHJvdW5kVG8oYiwgZGl2KTtcbiAgcmV0dXJuIGxvb2tfdXB3YXJkcyhjKTtcbn1cblxuZmxvYXQgYXBwbHlBbGlnbk9wdGlvbihmbG9hdCByYXdBbmdsZSwgZmxvYXQgZGVsdGEpIHtcbiAgcmV0dXJuXG4gICAgKG9wdGlvbiA+ICAyKSA/IGxvb2tfcm91bmRfbl9kaXJlY3Rpb25zKHJhd0FuZ2xlICsgZGVsdGEsIG9wdGlvbikgOiAgICAgICAvLyBvcHRpb24gMy1uOiByb3VuZCB0byBuIGRpcmVjdGlvbnNcbiAgICAob3B0aW9uID09IDIpID8gbG9va19ob3Jpem9udGFsX29yX3ZlcnRpY2FsKHJhd0FuZ2xlICsgZGVsdGEsIGh2X3JhdGlvKSA6IC8vIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAgICAob3B0aW9uID09IDEpID8gcmF3QW5nbGUgKyBkZWx0YSA6ICAgICAgIC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgZmxpcCB0byBhbGlnbiB3aXRoIG9uZSBkaXJlY3Rpb24gb2YgdGhlIGF4aXNcbiAgICAob3B0aW9uID09IDApID8gbG9va191cHdhcmRzKHJhd0FuZ2xlKSA6IC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgc3RheSB1cHdhcmRzXG4gICAgKG9wdGlvbiA9PS0xKSA/IDAuMCA6ICAgICAgICAgICAgICAgICAgICAvLyB1c2VmdWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGFsbCB0ZXh0cyByZW1haW5zIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgcmF3QW5nbGU7ICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSByZXR1cm4gYmFjayByYXcgaW5wdXQgYW5nbGVcbn1cblxuYm9vbCBpc0F4aXNUaXRsZSA9IChheGlzLnggPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnkgPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnogPT0gMC4wKTtcblxudm9pZCBtYWluKCkge1xuICAvL0NvbXB1dGUgd29ybGQgb2Zmc2V0XG4gIGZsb2F0IGF4aXNEaXN0YW5jZSA9IHBvc2l0aW9uLno7XG4gIHZlYzMgZGF0YVBvc2l0aW9uID0gYXhpc0Rpc3RhbmNlICogYXhpcyArIG9mZnNldDtcblxuICBmbG9hdCBiZXRhID0gYW5nbGU7IC8vIGkuZS4gdXNlciBkZWZpbmVkIGF0dHJpYnV0ZXMgZm9yIGVhY2ggdGlja1xuXG4gIGZsb2F0IGF4aXNBbmdsZTtcbiAgZmxvYXQgY2xpcEFuZ2xlO1xuICBmbG9hdCBmbGlwO1xuXG4gIGlmIChlbmFibGVBbGlnbikge1xuICAgIGF4aXNBbmdsZSA9IChpc0F4aXNUaXRsZSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYXhpcyk7XG4gICAgY2xpcEFuZ2xlID0gY29tcHV0ZVZpZXdBbmdsZShkYXRhUG9zaXRpb24sIGRhdGFQb3NpdGlvbiArIGFsaWduRGlyKTtcblxuICAgIGF4aXNBbmdsZSArPSAoc2luKGF4aXNBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XG4gICAgY2xpcEFuZ2xlICs9IChzaW4oY2xpcEFuZ2xlKSA8IDAuMCkgPyBQSSA6IDAuMDtcblxuICAgIGZsaXAgPSAoZG90KHZlYzIoY29zKGF4aXNBbmdsZSksIHNpbihheGlzQW5nbGUpKSxcbiAgICAgICAgICAgICAgICB2ZWMyKHNpbihjbGlwQW5nbGUpLC1jb3MoY2xpcEFuZ2xlKSkpID4gMC4wKSA/IDEuMCA6IDAuMDtcblxuICAgIGJldGEgKz0gYXBwbHlBbGlnbk9wdGlvbihjbGlwQW5nbGUsIGZsaXAgKiBQSSk7XG4gIH1cblxuICAvL0NvbXB1dGUgcGxhbmUgb2Zmc2V0XG4gIHZlYzIgcGxhbmVDb29yZCA9IHBvc2l0aW9uLnh5ICogcGl4ZWxTY2FsZTtcblxuICBtYXQyIHBsYW5lWGZvcm0gPSBzY2FsZSAqIG1hdDIoXG4gICAgIGNvcyhiZXRhKSwgc2luKGJldGEpLFxuICAgIC1zaW4oYmV0YSksIGNvcyhiZXRhKVxuICApO1xuXG4gIHZlYzIgdmlld09mZnNldCA9IDIuMCAqIHBsYW5lWGZvcm0gKiBwbGFuZUNvb3JkIC8gcmVzb2x1dGlvbjtcblxuICAvL0NvbXB1dGUgY2xpcCBwb3NpdGlvblxuICB2ZWMzIGNsaXBQb3NpdGlvbiA9IHByb2plY3QoZGF0YVBvc2l0aW9uKTtcblxuICAvL0FwcGx5IHRleHQgb2Zmc2V0IGluIGNsaXAgY29vcmRpbmF0ZXNcbiAgY2xpcFBvc2l0aW9uICs9IHZlYzModmlld09mZnNldCwgMC4wKTtcblxuICAvL0RvbmVcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBQb3NpdGlvbiwgMS4wKTtcbn0iXSksbD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn0iXSk7ci50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBpKHQscyxsLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XSl9O3ZhciBjPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGVuYWJsZTtcbnVuaWZvcm0gdmVjMyBib3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcblxuICB2ZWMzIHNpZ25BeGlzID0gc2lnbihib3VuZHNbMV0gLSBib3VuZHNbMF0pO1xuXG4gIHZlYzMgcmVhbE5vcm1hbCA9IHNpZ25BeGlzICogbm9ybWFsO1xuXG4gIGlmKGRvdChyZWFsTm9ybWFsLCBlbmFibGUpID4gMC4wKSB7XG4gICAgdmVjMyBtaW5SYW5nZSA9IG1pbihib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBtYXhSYW5nZSA9IG1heChib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBuUG9zaXRpb24gPSBtaXgobWluUmFuZ2UsIG1heFJhbmdlLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5Qb3NpdGlvbiwgMS4wKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH1cblxuICBjb2xvckNoYW5uZWwgPSBhYnMocmVhbE5vcm1hbCk7XG59Il0pLHU9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3JDaGFubmVsLnggKiBjb2xvcnNbMF0gK1xuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueSAqIGNvbG9yc1sxXSArXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC56ICogY29sb3JzWzJdO1xufSJdKTtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYyx1LG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pfX0seyJnbC1zaGFkZXIiOjI5NyxnbHNsaWZ5OjQwMX1dLDIzNDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyxsKXt2YXIgdT1uKHQpLGY9aSh0LFt7YnVmZmVyOnUsc2l6ZTozfV0pLGg9byh0KTtoLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MDt2YXIgcD1uZXcgYyh0LGgsdSxmKTtyZXR1cm4gcC51cGRhdGUoZSxyLGEscyxsKSxwfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgidmVjdG9yaXplLXRleHQiKSxvPXQoIi4vc2hhZGVycyIpLnRleHQscz13aW5kb3d8fHIuZ2xvYmFsfHx7fSxsPXMuX19URVhUX0NBQ0hFfHx7fTtzLl9fVEVYVF9DQUNIRT17fTtmdW5jdGlvbiBjKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMuYnVmZmVyPXIsdGhpcy52YW89bix0aGlzLnRpY2tPZmZzZXQ9dGhpcy50aWNrQ291bnQ9dGhpcy5sYWJlbE9mZnNldD10aGlzLmxhYmVsQ291bnQ9bnVsbH12YXIgdT1jLnByb3RvdHlwZSxmPVswLDBdO3UuYmluZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnZhby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpO3ZhciBpPXRoaXMuc2hhZGVyLnVuaWZvcm1zO2kubW9kZWw9dCxpLnZpZXc9ZSxpLnByb2plY3Rpb249cixpLnBpeGVsU2NhbGU9bixmWzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnJlc29sdXRpb249Zn0sdS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnZhby51bmJpbmQoKX0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1bXTtmdW5jdGlvbiBzKHQsZSxyLG4saSxzKXt2YXIgYz1sW3JdO2N8fChjPWxbcl09e30pO3ZhciB1PWNbZV07dXx8KHU9Y1tlXT1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gYSh0LGUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLndhcm4oJ2Vycm9yIHZlY3Rvcml6aW5nIHRleHQ6IicrdCsnIiBlcnJvcjonLGUpLHtjZWxsczpbXSxwb3NpdGlvbnM6W119fX0oZSx7dHJpYW5nbGVzOiEwLGZvbnQ6cix0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVTcGFjaW5nOmksc3R5bGV0YWdzOnN9KSk7Zm9yKHZhciBmPShufHwxMikvMTIsaD11LnBvc2l0aW9ucyxwPXUuY2VsbHMsZD0wLGc9cC5sZW5ndGg7ZDxnOysrZClmb3IodmFyIHY9cFtkXSxtPTI7bT49MDstLW0pe3ZhciB5PWhbdlttXV07by5wdXNoKGYqeVswXSwtZip5WzFdLHQpfX1mb3IodmFyIGM9WzAsMCwwXSx1PVswLDAsMF0sZj1bMCwwLDBdLGg9WzAsMCwwXSxwPXticmVha2xpbmVzOiEwLGJvbGRzOiEwLGl0YWxpY3M6ITAsc3Vic2NyaXB0czohMCxzdXBlcnNjcmlwdHM6ITB9LGQ9MDtkPDM7KytkKXtmW2RdPW8ubGVuZ3RoLzN8MCxzKC41Kih0WzBdW2RdK3RbMV1bZF0pLGVbZF0scltkXSwxMiwxLjI1LHApLGhbZF09KG8ubGVuZ3RoLzN8MCktZltkXSxjW2RdPW8ubGVuZ3RoLzN8MDtmb3IodmFyIGc9MDtnPG5bZF0ubGVuZ3RoOysrZyluW2RdW2ddLnRleHQmJnMobltkXVtnXS54LG5bZF1bZ10udGV4dCxuW2RdW2ddLmZvbnR8fGksbltkXVtnXS5mb250U2l6ZXx8MTIsMS4yNSxwKTt1W2RdPShvLmxlbmd0aC8zfDApLWNbZF19dGhpcy5idWZmZXIudXBkYXRlKG8pLHRoaXMudGlja09mZnNldD1jLHRoaXMudGlja0NvdW50PXUsdGhpcy5sYWJlbE9mZnNldD1mLHRoaXMubGFiZWxDb3VudD1ofSx1LmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMudGlja0NvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduRGlyPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25PcHQ9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSkpfSx1LmRyYXdMYWJlbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMubGFiZWxDb3VudFt0XSYmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbkRpcj1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduT3B0PXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLmxhYmVsQ291bnRbdF0sdGhpcy5sYWJlbE9mZnNldFt0XSkpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX19KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHsiLi9zaGFkZXJzIjoyMzMsX3Byb2Nlc3M6NDc0LCJnbC1idWZmZXIiOjIzNywiZ2wtdmFvIjozMTksInZlY3Rvcml6ZS10ZXh0Ijo1MzR9XSwyMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQrIiIsbj1yLmluZGV4T2YoIi4iKSxpPTA7bj49MCYmKGk9ci5sZW5ndGgtbi0xKTt2YXIgYT1NYXRoLnBvdygxMCxpKSxvPU1hdGgucm91bmQodCplKmEpLHM9bysiIjtpZihzLmluZGV4T2YoImUiKT49MClyZXR1cm4gczt2YXIgbD1vL2EsYz1vJWE7bzwwPyhsPTB8LU1hdGguY2VpbChsKSxjPTB8LWMpOihsPTB8TWF0aC5mbG9vcihsKSxjfD0wKTt2YXIgdT0iIitsO2lmKG88MCYmKHU9Ii0iK3UpLGkpe2Zvcih2YXIgZj0iIitjO2YubGVuZ3RoPGk7KWY9IjAiK2Y7cmV0dXJuIHUrIi4iK2Z9cmV0dXJuIHV9ci5jcmVhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10saT0wO2k8MzsrK2kpe2Zvcih2YXIgYT1bXSxvPSh0WzBdW2ldLHRbMV1baV0sMCk7byplW2ldPD10WzFdW2ldOysrbylhLnB1c2goe3g6byplW2ldLHRleHQ6bihlW2ldLG8pfSk7Zm9yKHZhciBvPS0xO28qZVtpXT49dFswXVtpXTstLW8pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO3IucHVzaChhKX1yZXR1cm4gcn0sci5lcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDsrK24pe3ZhciBpPXRbcl1bbl0sYT1lW3JdW25dO2lmKGkueCE9PWEueHx8aS50ZXh0IT09YS50ZXh0fHxpLmZvbnQhPT1hLmZvbnR8fGkuZm9udENvbG9yIT09YS5mb250Q29sb3J8fGkuZm9udFNpemUhPT1hLmZvbnRTaXplfHxpLmR4IT09YS5keHx8aS5keSE9PWEuZHkpcmV0dXJuITF9fXJldHVybiEwfX0se31dLDIzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxmKXt2YXIgaD1lLm1vZGVsfHxjLHA9ZS52aWV3fHxjLG09ZS5wcm9qZWN0aW9ufHxjLHk9ZS5fb3J0aG98fCExLHg9dC5ib3VuZHMsYj0oZj1mfHxhKGgscCxtLHgseSkpLmF4aXM7byh1LHAsaCksbyh1LG0sdSk7Zm9yKHZhciBfPWcsdz0wO3c8MzsrK3cpX1t3XS5sbz0xLzAsX1t3XS5oaT0tMS8wLF9bd10ucGl4ZWxzUGVyRGF0YVVuaXQ9MS8wO3ZhciBrPW4ocyh1LHUpKTtzKHUsdSk7Zm9yKHZhciBUPTA7VDwzOysrVCl7dmFyIEE9KFQrMSklMyxNPShUKzIpJTMsUz12O3Q6Zm9yKHZhciB3PTA7dzwyOysrdyl7dmFyIEU9W107aWYoYltUXTwwIT0hIXcpe1NbVF09eFt3XVtUXTtmb3IodmFyIEM9MDtDPDI7KytDKXtTW0FdPXhbQ153XVtBXTtmb3IodmFyIEw9MDtMPDI7KytMKVNbTV09eFtMXkNed11bTV0sRS5wdXNoKFMuc2xpY2UoKSl9Zm9yKHZhciB6PXk/NTo0LEM9ejtDPT09ejsrK0Mpe2lmKDA9PT1FLmxlbmd0aCljb250aW51ZSB0O0U9aS5wb3NpdGl2ZShFLGtbQ10pfWZvcih2YXIgQz0wO0M8RS5sZW5ndGg7KytDKWZvcih2YXIgTT1FW0NdLE89ZCh2LHUsTSxyLGwpLEw9MDtMPDM7KytMKV9bTF0ubG89TWF0aC5taW4oX1tMXS5sbyxNW0xdKSxfW0xdLmhpPU1hdGgubWF4KF9bTF0uaGksTVtMXSksTCE9PVQmJihfW0xdLnBpeGVsc1BlckRhdGFVbml0PU1hdGgubWluKF9bTF0ucGl4ZWxzUGVyRGF0YVVuaXQsTWF0aC5hYnMoT1tMXSkpKX19fXJldHVybiBffTt2YXIgbj10KCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIiksaT10KCJzcGxpdC1wb2x5Z29uIiksYT10KCIuL2xpYi9jdWJlLmpzIiksbz10KCJnbC1tYXQ0L211bHRpcGx5Iikscz10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGw9dCgiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IiksYz1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtmdW5jdGlvbiBmKHQsZSxyKXt0aGlzLmxvPXQsdGhpcy5oaT1lLHRoaXMucGl4ZWxzUGVyRGF0YVVuaXQ9cn12YXIgaD1bMCwwLDAsMV0scD1bMCwwLDAsMV07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8MzsrK2Epe2Zvcih2YXIgbz1oLHM9cCxjPTA7YzwzOysrYylzW2NdPW9bY109cltjXTtzWzNdPW9bM109MSxzW2FdKz0xLGwocyxzLGUpLHNbM108MCYmKHRbYV09MS8wKSxvW2FdLT0xLGwobyxvLGUpLG9bM108MCYmKHRbYV09MS8wKTt2YXIgdT0ob1swXS9vWzNdLXNbMF0vc1szXSkqbixmPShvWzFdL29bM10tc1sxXS9zWzNdKSppO3RbYV09LjI1Kk1hdGguc3FydCh1KnUrZipmKX1yZXR1cm4gdH12YXIgZz1bbmV3IGYoMS8wLC0xLzAsMS8wKSxuZXcgZigxLzAsLTEvMCwxLzApLG5ldyBmKDEvMCwtMS8wLDEvMCldLHY9WzAsMCwwXX0seyIuL2xpYi9jdWJlLmpzIjoyMzEsImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXMiOjIyMCwiZ2wtbWF0NC9tdWx0aXBseSI6MjYzLCJnbC1tYXQ0L3RyYW5zcG9zZSI6MjcyLCJnbC12ZWM0L3RyYW5zZm9ybU1hdDQiOjM5MCwic3BsaXQtcG9seWdvbiI6NTExfV0sMjM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgibmRhcnJheS1vcHMiKSxhPXQoIm5kYXJyYXkiKSxvPVsidWludDgiLCJ1aW50OF9jbGFtcGVkIiwidWludDE2IiwidWludDMyIiwiaW50OCIsImludDE2IiwiaW50MzIiLCJmbG9hdDMyIl07ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMuZ2w9dCx0aGlzLnR5cGU9ZSx0aGlzLmhhbmRsZT1yLHRoaXMubGVuZ3RoPW4sdGhpcy51c2FnZT1pfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlLHIsbixpLGEpe3ZhciBvPWkubGVuZ3RoKmkuQllURVNfUEVSX0VMRU1FTlQ7aWYoYTwwKXJldHVybiB0LmJ1ZmZlckRhdGEoZSxpLG4pLG87aWYobythPnIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IElmIHJlc2l6aW5nIGJ1ZmZlciwgbXVzdCBub3Qgc3BlY2lmeSBvZmZzZXQiKTtyZXR1cm4gdC5idWZmZXJTdWJEYXRhKGUsYSxpKSxyfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bi5tYWxsb2ModC5sZW5ndGgsZSksaT10Lmxlbmd0aCxhPTA7YTxpOysrYSlyW2FdPXRbYV07cmV0dXJuIHJ9bC5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmhhbmRsZSl9LGwudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSxudWxsKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5oYW5kbGUpfSxsLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSYmKGU9LTEpLHRoaXMuYmluZCgpLCJvYmplY3QiPT10eXBlb2YgdCYmInVuZGVmaW5lZCIhPXR5cGVvZiB0LnNoYXBlKXt2YXIgcj10LmR0eXBlO2lmKG8uaW5kZXhPZihyKTwwJiYocj0iZmxvYXQzMiIpLHRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIpcj1nbC5nZXRFeHRlbnNpb24oIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSYmInVpbnQxNiIhPT1yPyJ1aW50MzIiOiJ1aW50MTYiO2lmKHI9PT10LmR0eXBlJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7aWYoZVtuXSE9PXIpcmV0dXJuITE7cio9dFtuXX1yZXR1cm4hMH0odC5zaGFwZSx0LnN0cmlkZSkpMD09PXQub2Zmc2V0JiZ0LmRhdGEubGVuZ3RoPT09dC5zaGFwZVswXT90aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLGUpOnRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEuc3ViYXJyYXkodC5vZmZzZXQsdC5zaGFwZVswXSksZSk7ZWxzZXt2YXIgcz1uLm1hbGxvYyh0LnNpemUsciksbD1hKHMsdC5zaGFwZSk7aS5hc3NpZ24obCx0KSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP3M6cy5zdWJhcnJheSgwLHQuc2l6ZSksZSksbi5mcmVlKHMpfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBmO2Y9dGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUj91KHQsInVpbnQxNiIpOnUodCwiZmxvYXQzMiIpLHRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSxlPDA/ZjpmLnN1YmFycmF5KDAsdC5sZW5ndGgpLGUpLG4uZnJlZShmKX1lbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdCxlKTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgdCYmdm9pZCAwIT09dCl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCBkYXRhIHR5cGUiKTtpZihlPj0wKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBDYW5ub3Qgc3BlY2lmeSBvZmZzZXQgd2hlbiByZXNpemluZyBidWZmZXIiKTsodHw9MCk8PTAmJih0PTEpLHRoaXMuZ2wuYnVmZmVyRGF0YSh0aGlzLnR5cGUsMHx0LHRoaXMudXNhZ2UpLHRoaXMubGVuZ3RoPXR9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYocj1yfHx0LkFSUkFZX0JVRkZFUixuPW58fHQuRFlOQU1JQ19EUkFXLHIhPT10LkFSUkFZX0JVRkZFUiYmciE9PXQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgdHlwZSBmb3Igd2ViZ2wgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5BUlJBWV9CVUZGRVIgb3IgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTtpZihuIT09dC5EWU5BTUlDX0RSQVcmJm4hPT10LlNUQVRJQ19EUkFXJiZuIT09dC5TVFJFQU1fRFJBVyl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCB1c2FnZSBmb3IgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5EWU5BTUlDX0RSQVcsIGdsLlNUQVRJQ19EUkFXIG9yIGdsLlNUUkVBTV9EUkFXIik7dmFyIGk9dC5jcmVhdGVCdWZmZXIoKSxhPW5ldyBzKHQscixpLDAsbik7cmV0dXJuIGEudXBkYXRlKGUpLGF9fSx7bmRhcnJheTo0NDIsIm5kYXJyYXktb3BzIjo0MzYsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sMjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXZlYzMiKSxpPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXT49ZSlyZXR1cm4gci0xO3JldHVybiByfSxhPW4uY3JlYXRlKCksbz1uLmNyZWF0ZSgpLHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxsPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPXRbMF0sdT10WzFdLGY9dFsyXSxoPXJbMF0ubGVuZ3RoLHA9clsxXS5sZW5ndGgsZD1yWzJdLmxlbmd0aCxnPWkoclswXSxjKSx2PWkoclsxXSx1KSxtPWkoclsyXSxmKSx5PWcrMSx4PXYrMSxiPW0rMTtpZihsJiYoZz1zKGcsMCxoLTEpLHk9cyh5LDAsaC0xKSx2PXModiwwLHAtMSkseD1zKHgsMCxwLTEpLG09cyhtLDAsZC0xKSxiPXMoYiwwLGQtMSkpLGc8MHx8djwwfHxtPDB8fHk+PWh8fHg+PXB8fGI+PWQpcmV0dXJuIG4uY3JlYXRlKCk7dmFyIF89KGMtclswXVtnXSkvKHJbMF1beV0tclswXVtnXSksdz0odS1yWzFdW3ZdKS8oclsxXVt4XS1yWzFdW3ZdKSxrPShmLXJbMl1bbV0pLyhyWzJdW2JdLXJbMl1bbV0pOyhfPDB8fF8+MXx8aXNOYU4oXykpJiYoXz0wKSwodzwwfHx3PjF8fGlzTmFOKHcpKSYmKHc9MCksKGs8MHx8az4xfHxpc05hTihrKSkmJihrPTApO3ZhciBUPW0qaCpwLEE9YipoKnAsTT12KmgsUz14KmgsRT1nLEM9eSxMPWVbTStUK0VdLHo9ZVtNK1QrQ10sTz1lW1MrVCtFXSxJPWVbUytUK0NdLEQ9ZVtNK0ErRV0sUD1lW00rQStDXSxSPWVbUytBK0VdLEY9ZVtTK0ErQ10sQj1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoQixMLHosXyksbi5sZXJwKGEsTyxJLF8pLG4ubGVycChCLEIsYSx3KSxuLmxlcnAoYSxELFAsXyksbi5sZXJwKG8sUixGLF8pLG4ubGVycChhLGEsbyx3KSxuLmxlcnAoQixCLGEsayksQn07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cj10LnBvc2l0aW9ucz90LnBvc2l0aW9uczpmdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKWkucHVzaChbblthXSxyW29dLGVbc11dKTtyZXR1cm4gaX0odC5tZXNoZ3JpZCk7dmFyIGk9dC5tZXNoZ3JpZCxhPXQudmVjdG9ycyxvPXtwb3NpdGlvbnM6W10sdmVydGV4SW50ZW5zaXR5OltdLHZlcnRleEludGVuc2l0eUJvdW5kczp0LnZlcnRleEludGVuc2l0eUJvdW5kcyx2ZXJ0ZXhOb3JtYWxzOltdLHZlY3RvcnM6W10sY2VsbHM6W10sY29uZU9mZnNldDp0LmNvbmVPZmZzZXQsY29sb3JtYXA6dC5jb2xvcm1hcH07aWYoMD09PXQucG9zaXRpb25zLmxlbmd0aClyZXR1cm4gZSYmKGVbMF09WzAsMCwwXSxlWzFdPVswLDAsMF0pLG87Zm9yKHZhciBzPTAsYz0xLzAsdT0tMS8wLGY9MS8wLGg9LTEvMCxwPTEvMCxkPS0xLzAsZz1udWxsLHY9bnVsbCxtPVtdLHk9MS8wLHg9MDt4PHIubGVuZ3RoO3grKyl7dmFyIGIsXz1yW3hdO2M9TWF0aC5taW4oX1swXSxjKSx1PU1hdGgubWF4KF9bMF0sdSksZj1NYXRoLm1pbihfWzFdLGYpLGg9TWF0aC5tYXgoX1sxXSxoKSxwPU1hdGgubWluKF9bMl0scCksZD1NYXRoLm1heChfWzJdLGQpLGI9aT9sKF8sYSxpLCEwKTphW3hdLG4ubGVuZ3RoKGIpPnMmJihzPW4ubGVuZ3RoKGIpKSx4JiYoeT1NYXRoLm1pbih5LDIqbi5kaXN0YW5jZShnLF8pLyhuLmxlbmd0aCh2KStuLmxlbmd0aChiKSkpKSxnPV8sdj1iLG0ucHVzaChiKX12YXIgdz1bYyxmLHBdLGs9W3UsaCxkXTtlJiYoZVswXT13LGVbMV09ayksMD09PXMmJihzPTEpO3ZhciBUPTEvcztpc0Zpbml0ZSh5KSYmIWlzTmFOKHkpfHwoeT0xKSxvLnZlY3RvclNjYWxlPXk7dmFyIEE9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PXQmJm4uc2V0KGksdCxlLHIpLGl9KDAsMSwwKSxNPXQuY29uZVNpemV8fC41O3QuYWJzb2x1dGVDb25lU2l6ZSYmKE09dC5hYnNvbHV0ZUNvbmVTaXplKlQpLG8uY29uZVNjYWxlPU07eD0wO2Zvcih2YXIgUz0wO3g8ci5sZW5ndGg7eCsrKWZvcih2YXIgRT0oXz1yW3hdKVswXSxDPV9bMV0sTD1fWzJdLHo9bVt4XSxPPW4ubGVuZ3RoKHopKlQsST0wO0k8ODtJKyspe28ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVydGV4SW50ZW5zaXR5LnB1c2goTyxPLE8pLG8udmVydGV4SW50ZW5zaXR5LnB1c2goTyxPLE8pLG8udmVydGV4Tm9ybWFscy5wdXNoKEEsQSxBKSxvLnZlcnRleE5vcm1hbHMucHVzaChBLEEsQSk7dmFyIEQ9by5wb3NpdGlvbnMubGVuZ3RoO28uY2VsbHMucHVzaChbRC02LEQtNSxELTRdLFtELTMsRC0yLEQtMV0pfXJldHVybiBvfSxlLmV4cG9ydHMuY3JlYXRlQ29uZU1lc2g9dCgiLi9saWIvY29uZW1lc2giKX0seyIuL2xpYi9jb25lbWVzaCI6MjM5LCJnbC12ZWMzIjozMzh9XSwyMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJub3JtYWxzIiksbD10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L2ludmVydCIpLHU9dCgibmRhcnJheSIpLGY9dCgiY29sb3JtYXAiKSxoPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIikscD10KCJ0eXBlZGFycmF5LXBvb2wiKSxkPXQoIi4vc2hhZGVycyIpLGc9ZC5tZXNoU2hhZGVyLHY9ZC5waWNrU2hhZGVyLG09WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHkodCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsZyx2LHkseCxiLF8sdyxrLFQpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLnBpY2tTaGFkZXI9bix0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWksdGhpcy50cmlhbmdsZVZlY3RvcnM9YSx0aGlzLnRyaWFuZ2xlQ29sb3JzPXMsdGhpcy50cmlhbmdsZU5vcm1hbHM9Yyx0aGlzLnRyaWFuZ2xlVVZzPWwsdGhpcy50cmlhbmdsZUlkcz1vLHRoaXMudHJpYW5nbGVWQU89dSx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuZWRnZVBvc2l0aW9ucz1mLHRoaXMuZWRnZUNvbG9ycz1wLHRoaXMuZWRnZVVWcz1kLHRoaXMuZWRnZUlkcz1oLHRoaXMuZWRnZVZBTz1nLHRoaXMuZWRnZUNvdW50PTAsdGhpcy5wb2ludFBvc2l0aW9ucz12LHRoaXMucG9pbnRDb2xvcnM9eCx0aGlzLnBvaW50VVZzPWIsdGhpcy5wb2ludFNpemVzPV8sdGhpcy5wb2ludElkcz15LHRoaXMucG9pbnRWQU89dyx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbnRvdXJMaW5lV2lkdGg9MSx0aGlzLmNvbnRvdXJQb3NpdGlvbnM9ayx0aGlzLmNvbnRvdXJWQU89VCx0aGlzLmNvbnRvdXJDb3VudD0wLHRoaXMuY29udG91ckNvbG9yPVswLDAsMF0sdGhpcy5jb250b3VyRW5hYmxlPSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuY29uZVNjYWxlPTIsdGhpcy52ZWN0b3JTY2FsZT0xLHRoaXMuY29uZU9mZnNldD0uMjUsdGhpcy5fbW9kZWw9bSx0aGlzLl92aWV3PW0sdGhpcy5fcHJvamVjdGlvbj1tLHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIHg9eS5wcm90b3R5cGU7ZnVuY3Rpb24gYih0KXt2YXIgZT1uKHQsdi52ZXJ0ZXgsdi5mcmFnbWVudCxudWxsLHYuYXR0cmlidXRlcyk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy52ZWN0b3IubG9jYXRpb249NSxlfXguaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSx4LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LHgucGlja1Nsb3RzPTEseC5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx4LmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZih0JiZ0aGlzLmNvbnRvdXJFbmFibGUpe2Zvcih2YXIgZT1oKHRoaXMuY2VsbHMsdGhpcy5pbnRlbnNpdHksdC5pbnRlbnNpdHkpLHI9ZS5jZWxscyxuPWUudmVydGV4SWRzLGk9ZS52ZXJ0ZXhXZWlnaHRzLGE9ci5sZW5ndGgsbz1wLm1hbGxvY0Zsb2F0MzIoNiphKSxzPTAsbD0wO2w8YTsrK2wpZm9yKHZhciBjPXJbbF0sdT0wO3U8MjsrK3Upe3ZhciBmPWNbMF07Mj09PWMubGVuZ3RoJiYoZj1jW3VdKTtmb3IodmFyIGQ9bltmXVswXSxnPW5bZl1bMV0sdj1pW2ZdLG09MS12LHk9dGhpcy5wb3NpdGlvbnNbZF0seD10aGlzLnBvc2l0aW9uc1tnXSxiPTA7YjwzOysrYilvW3MrK109dip5W2JdK20qeFtiXX10aGlzLmNvbnRvdXJDb3VudD1zLzN8MCx0aGlzLmNvbnRvdXJQb3NpdGlvbnMudXBkYXRlKG8uc3ViYXJyYXkoMCxzKSkscC5mcmVlKG8pfWVsc2UgdGhpcy5jb250b3VyQ291bnQ9MH0seC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsImNvbnRvdXJFbmFibGUiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPXQuY29udG91ckNvbG9yKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImxpZ2h0UG9zaXRpb24iaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHZvaWQgMCE9PXQudmVjdG9yU2NhbGUmJih0aGlzLnZlY3RvclNjYWxlPXQudmVjdG9yU2NhbGUpLHZvaWQgMCE9PXQuY29uZVNjYWxlJiYodGhpcy5jb25lU2NhbGU9dC5jb25lU2NhbGUpLHZvaWQgMCE9PXQuY29uZU9mZnNldCYmKHRoaXMuY29uZU9mZnNldD10LmNvbmVPZmZzZXQpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPWYoe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OiJyZ2JhIn0pLHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj0wO248MjU2Oysrbil7Zm9yKHZhciBpPWVbbl0sYT0wO2E8MzsrK2Epcls0Km4rYV09aVthXTtyWzQqbiszXT0yNTUqaVszXX1yZXR1cm4gdShyLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucyxpPXQudmVjdG9ycztpZihuJiZyJiZpKXt2YXIgYT1bXSxsPVtdLGM9W10saD1bXSxwPVtdLGQ9W10sZz1bXSx2PVtdLG09W10seT1bXSx4PVtdLGI9W10sXz1bXSx3PVtdLGs9W107dGhpcy5jZWxscz1yLHRoaXMucG9zaXRpb25zPW47dmFyIFQ9dC52ZXJ0ZXhOb3JtYWxzLEE9dC5jZWxsTm9ybWFscyxNPXZvaWQgMD09PXQudmVydGV4Tm9ybWFsc0Vwc2lsb24/MWUtNjp0LnZlcnRleE5vcm1hbHNFcHNpbG9uLFM9dm9pZCAwPT09dC5mYWNlTm9ybWFsc0Vwc2lsb24/MWUtNjp0LmZhY2VOb3JtYWxzRXBzaWxvbjt0LnVzZUZhY2V0Tm9ybWFscyYmIUEmJihBPXMuZmFjZU5vcm1hbHMocixuLFMpKSxBfHxUfHwoVD1zLnZlcnRleE5vcm1hbHMocixuLE0pKTt2YXIgRT10LnZlcnRleENvbG9ycyxDPXQuY2VsbENvbG9ycyxMPXQubWVzaENvbG9yfHxbMSwxLDEsMV0sej10LnZlcnRleFVWcyxPPXQudmVydGV4SW50ZW5zaXR5LEk9dC5jZWxsVVZzLEQ9dC5jZWxsSW50ZW5zaXR5LFA9MS8wLFI9LTEvMDtpZigheiYmIUkpaWYoTylpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcylQPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxSPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgRj0wO0Y8Ty5sZW5ndGg7KytGKXt2YXIgQj1PW0ZdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9ZWxzZSBpZihEKWZvcihGPTA7RjxELmxlbmd0aDsrK0Ype0I9RFtGXTtQPU1hdGgubWluKFAsQiksUj1NYXRoLm1heChSLEIpfWVsc2UgZm9yKEY9MDtGPG4ubGVuZ3RoOysrRil7Qj1uW0ZdWzJdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9dGhpcy5pbnRlbnNpdHk9T3x8KEQ/ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT0wO3ZhciBhPXQubGVuZ3RoO2ZvcihpPTA7aTxhOysraSlmb3IodmFyIG89dFtpXSxzPTA7czxvLmxlbmd0aDsrK3MpbltvW3NdXT1yW2ldO3JldHVybiBufShyLG4ubGVuZ3RoLEQpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pKTt2YXIgTj10LnBvaW50U2l6ZXMsaj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoRj0wO0Y8bi5sZW5ndGg7KytGKWZvcih2YXIgVj1uW0ZdLFU9MDtVPDM7KytVKSFpc05hTihWW1VdKSYmaXNGaW5pdGUoVltVXSkmJih0aGlzLmJvdW5kc1swXVtVXT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVtVXSxWW1VdKSx0aGlzLmJvdW5kc1sxXVtVXT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVtVXSxWW1VdKSk7dmFyIHE9MCxIPTAsRz0wO3Q6Zm9yKEY9MDtGPHIubGVuZ3RoOysrRil7dmFyIFk9cltGXTtzd2l0Y2goWS5sZW5ndGgpe2Nhc2UgMTpmb3IoVj1uW1g9WVswXV0sVT0wO1U8MzsrK1UpaWYoaXNOYU4oVltVXSl8fCFpc0Zpbml0ZShWW1VdKSljb250aW51ZSB0O3gucHVzaChWWzBdLFZbMV0sVlsyXSxWWzNdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOmIucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLF8ucHVzaCgkWzBdLCRbMV0pLE4/dy5wdXNoKE5bWF0pOncucHVzaChqKSxrLnB1c2goRiksRys9MTticmVhaztjYXNlIDI6Zm9yKFU9MDtVPDI7KytVKXtWPW5bWD1ZW1VdXTtmb3IodmFyIFc9MDtXPDM7KytXKWlmKGlzTmFOKFZbV10pfHwhaXNGaW5pdGUoVltXXSkpY29udGludWUgdH1mb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVlbVV1dO2cucHVzaChWWzBdLFZbMV0sVlsyXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP3YucHVzaChaWzBdLFpbMV0sWlsyXSwxKTp2LnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxtLnB1c2goJFswXSwkWzFdKSx5LnB1c2goRil9SCs9MTticmVhaztjYXNlIDM6Zm9yKFU9MDtVPDM7KytVKWZvcihWPW5bWD1ZW1VdXSxXPTA7VzwzOysrVylpZihpc05hTihWW1ddKXx8IWlzRmluaXRlKFZbV10pKWNvbnRpbnVlIHQ7Zm9yKFU9MDtVPDM7KytVKXt2YXIgWDtWPW5bWD1ZWzItVV1dO2EucHVzaChWWzBdLFZbMV0sVlsyXSxWWzNdKTt2YXIgWiwkLEosSz1pW1hdO2wucHVzaChLWzBdLEtbMV0sS1syXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP2MucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpjLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxwLnB1c2goJFswXSwkWzFdKSxKPVQ/VFtYXTpBW0ZdLGgucHVzaChKWzBdLEpbMV0sSlsyXSksZC5wdXNoKEYpfXErPTF9fXRoaXMucG9pbnRDb3VudD1HLHRoaXMuZWRnZUNvdW50PUgsdGhpcy50cmlhbmdsZUNvdW50PXEsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUoeCksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoYiksdGhpcy5wb2ludFVWcy51cGRhdGUoXyksdGhpcy5wb2ludFNpemVzLnVwZGF0ZSh3KSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUoZyksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZSh2KSx0aGlzLmVkZ2VVVnMudXBkYXRlKG0pLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KHkpKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShhKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy51cGRhdGUobCksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYyksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUocCksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGgpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShkKSl9fSx4LmRyYXdUcmFuc3BhcmVudD14LmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fG0sbj10LnZpZXd8fG0saT10LnByb2plY3Rpb258fG0sYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDptLnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3MuaW52ZXJzZU1vZGVsPWMocy5pbnZlcnNlTW9kZWwscy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgZj11WzE1XTtmb3Iobz0wO288MzsrK28pZis9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBoPXVbMTIrb10scD0wO3A8MzsrK3ApaCs9dVs0KnArb10qdGhpcy5saWdodFBvc2l0aW9uW3BdO3MubGlnaHRQb3NpdGlvbltvXT1oL2Z9aWYodGhpcy50cmlhbmdsZUNvdW50PjApe3ZhciBkPXRoaXMudHJpU2hhZGVyO2QuYmluZCgpLGQudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKX19LHguZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fG0sbj10LnZpZXd8fG0saT10LnByb2plY3Rpb258fG0sYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSx2ZWN0b3JTY2FsZTp0aGlzLnZlY3RvclNjYWxlLGNvbmVTY2FsZTp0aGlzLmNvbmVTY2FsZSxjb25lT2Zmc2V0OnRoaXMuY29uZU9mZnNldCxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fSxsPXRoaXMucGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSl9LHgucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyk7cmV0dXJue2luZGV4Ok1hdGguZmxvb3IoclsxXS80OCkscG9zaXRpb246bixkYXRhQ29vcmRpbmF0ZTpufX0seC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZU5vcm1hbHMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpLHRoaXMuZWRnZVZBTy5kaXNwb3NlKCksdGhpcy5lZGdlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmVkZ2VDb2xvcnMuZGlzcG9zZSgpLHRoaXMuZWRnZVVWcy5kaXNwb3NlKCksdGhpcy5lZGdlSWRzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VkFPLmRpc3Bvc2UoKSx0aGlzLnBvaW50UG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnBvaW50Q29sb3JzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VVZzLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2l6ZXMuZGlzcG9zZSgpLHRoaXMucG9pbnRJZHMuZGlzcG9zZSgpLHRoaXMuY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5jb250b3VyUG9zaXRpb25zLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKTt2YXIgcj1lLnRyaVNoYWRlcnx8ZnVuY3Rpb24odCl7dmFyIGU9bih0LGcudmVydGV4LGcuZnJhZ21lbnQsbnVsbCxnLmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX0odCkscz1iKHQpLGw9byh0LHUobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtsLmdlbmVyYXRlTWlwbWFwKCksbC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixsLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgYz1pKHQpLGY9aSh0KSxoPWkodCkscD1pKHQpLGQ9aSh0KSx2PWkodCksbT1hKHQsW3tidWZmZXI6Yyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnYsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6aCx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnAsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpkLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Zix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pLHg9aSh0KSxfPWkodCksdz1pKHQpLGs9aSh0KSxUPWEodCxbe2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6ayx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpfLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfV0pLEE9aSh0KSxNPWkodCksUz1pKHQpLEU9aSh0KSxDPWkodCksTD1hKHQsW3tidWZmZXI6QSx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkMsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6TSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOlMsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpFLHR5cGU6dC5GTE9BVCxzaXplOjF9XSksej1pKHQpLE89bmV3IHkodCxsLHIscyxjLGYsdixoLHAsZCxtLHgsayxfLHcsVCxBLEMsTSxTLEUsTCx6LGEodCxbe2J1ZmZlcjp6LHR5cGU6dC5GTE9BVCxzaXplOjN9XSkpO3JldHVybiBPLnVwZGF0ZShlKSxPfX0seyIuL3NoYWRlcnMiOjI0MCxjb2xvcm1hcDoxMTYsImdsLWJ1ZmZlciI6MjM3LCJnbC1tYXQ0L2ludmVydCI6MjYxLCJnbC1tYXQ0L211bHRpcGx5IjoyNjMsImdsLXNoYWRlciI6Mjk3LCJnbC10ZXh0dXJlMmQiOjMxNCwiZ2wtdmFvIjozMTksbmRhcnJheTo0NDIsbm9ybWFsczo0NDUsInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIjo1MDIsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sMjQwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBjb25lIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIGNvbmUgd2l0aCBpdHMgdG9wIGF0IG9yaWdpbiBhbmQgaGVpZ2h0IG9mIDEuMCxcbi8vIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhdHRyaWJ1dGUuXG4vL1xuLy8gRWFjaCBjb25lIGlzIG1hZGUgdXAgb2YgYSB0b3AgdmVydGV4LCBhIGNlbnRlciBiYXNlIHZlcnRleCBhbmQgYmFzZSBwZXJpbWV0ZXIgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIGNvbmUgYnkgdGhlIGZvbGxvd2luZzpcbi8vICAgc2VnbWVudCArIDAgdG9wIHZlcnRleFxuLy8gICBzZWdtZW50ICsgMSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gICBzZWdtZW50ICsgMiBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDMgY2VudGVyIGJhc2UgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyA0IHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgNSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gV2hlcmUgc2VnbWVudCBpcyB0aGUgbnVtYmVyIG9mIHRoZSByYWRpYWwgc2VnbWVudCAqIDYgYW5kIGEgaXMgdGhlIGFuZ2xlIGF0IHRoYXQgcmFkaWFsIHNlZ21lbnQuXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQsIGZsb29yKGluZGV4IC8gNilcbi8vIFRvIGdvIGZyb20gc2VnbWVudCB0byBhbmdsZSwgMipwaSAqIChzZWdtZW50L3NlZ21lbnRDb3VudClcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCBpbmRleCwgaW5kZXggLSAoc2VnbWVudCo2KVxuLy9cbnZlYzMgZ2V0Q29uZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgcmF3SW5kZXgsIGZsb2F0IGNvbmVPZmZzZXQsIG91dCB2ZWMzIG5vcm1hbCkge1xuXG4gIGNvbnN0IGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBpbmRleCA9IHJhd0luZGV4IC0gZmxvb3IocmF3SW5kZXggL1xuICAgIChzZWdtZW50Q291bnQgKiA2LjApKSAqXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCk7XG5cbiAgZmxvYXQgc2VnbWVudCA9IGZsb29yKDAuMDAxICsgaW5kZXgvNi4wKTtcbiAgZmxvYXQgc2VnbWVudEluZGV4ID0gaW5kZXggLSAoc2VnbWVudCo2LjApO1xuXG4gIG5vcm1hbCA9IC1ub3JtYWxpemUoZCk7XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA+IDIuOTkgJiYgc2VnbWVudEluZGV4IDwgMy4wMSkge1xuICAgIHJldHVybiBtaXgodmVjMygwLjApLCAtZCwgY29uZU9mZnNldCk7XG4gIH1cblxuICBmbG9hdCBuZXh0QW5nbGUgPSAoXG4gICAgKHNlZ21lbnRJbmRleCA+IDAuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDEuMDEpIHx8XG4gICAgKHNlZ21lbnRJbmRleCA+IDQuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDUuMDEpXG4gICkgPyAxLjAgOiAwLjA7XG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqICgoc2VnbWVudCArIG5leHRBbmdsZSkgLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdjEgPSBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgdmVjMyB2MiA9IHYxIC0gZDtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XG4gIHZlYzMgdjMgPSB2MiArIHggKyB5O1xuICBpZiAoc2VnbWVudEluZGV4IDwgMy4wKSB7XG4gICAgdmVjMyB0eCA9IHUgKiBzaW4oYW5nbGUpO1xuICAgIHZlYzMgdHkgPSB2ICogLWNvcyhhbmdsZSk7XG4gICAgdmVjMyB0YW5nZW50ID0gdHggKyB0eTtcbiAgICBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3ModjMgLSB2MSwgdGFuZ2VudCkpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAwLjApIHtcbiAgICByZXR1cm4gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIH1cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGU7XG51bmlmb3JtIGZsb2F0IGNvbmVTY2FsZTtcblxudW5pZm9ybSBmbG9hdCBjb25lT2Zmc2V0O1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvblxuICAgICAgICAgICAsIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YVxuICAgICAgICAgICAsIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIC8vIFNjYWxlIHRoZSB2ZWN0b3IgbWFnbml0dWRlIHRvIHN0YXkgY29uc3RhbnQgd2l0aFxuICAvLyBtb2RlbCAmIHZpZXcgY2hhbmdlcy5cbiAgdmVjMyBub3JtYWw7XG4gIHZlYzMgWFlaID0gZ2V0Q29uZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKCh2ZWN0b3JTY2FsZSAqIGNvbmVTY2FsZSkgKiB2ZWN0b3IpLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIGNvbmVQb3NpdGlvbjtcbiAgY2FtZXJhQ29vcmRpbmF0ZS54eXogLz0gY2FtZXJhQ29vcmRpbmF0ZS53O1xuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9ub3JtYWwgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChjb25lUG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdF9wb3NpdGlvbiAgPSB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gY29uZVBvc2l0aW9uLnh5ejtcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufVxuIl0pLGE9bihbIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MsXG4gIGZsb2F0IGZyZXNuZWwpIHtcblxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG5cbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcblxuICAvL0dlb21ldHJpYyB0ZXJtXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcbiAgXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xuXG4gIC8vRnJlc25lbCB0ZXJtXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xuXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzXG4gICAgICAgICAgICAsIGZyZXNuZWxcbiAgICAgICAgICAgICwga2FtYmllbnRcbiAgICAgICAgICAgICwga2RpZmZ1c2VcbiAgICAgICAgICAgICwga3NwZWN1bGFyXG4gICAgICAgICAgICAsIG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGFcbiAgICAgICAgICAgLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtaW4oMS4wLCBtYXgoMC4wLCBjb29rVG9ycmFuY2VTcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MsIGZyZXNuZWwpKSk7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgY29uZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSBjb25lIHdpdGggaXRzIHRvcCBhdCBvcmlnaW4gYW5kIGhlaWdodCBvZiAxLjAsXG4vLyBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSB2ZWN0b3IgYXR0cmlidXRlLlxuLy9cbi8vIEVhY2ggY29uZSBpcyBtYWRlIHVwIG9mIGEgdG9wIHZlcnRleCwgYSBjZW50ZXIgYmFzZSB2ZXJ0ZXggYW5kIGJhc2UgcGVyaW1ldGVyIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSBjb25lIGJ5IHRoZSBmb2xsb3dpbmc6XG4vLyAgIHNlZ21lbnQgKyAwIHRvcCB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDEgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vICAgc2VnbWVudCArIDIgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyAzIGNlbnRlciBiYXNlIHZlcnRleFxuLy8gICBzZWdtZW50ICsgNCBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDUgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vIFdoZXJlIHNlZ21lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmFkaWFsIHNlZ21lbnQgKiA2IGFuZCBhIGlzIHRoZSBhbmdsZSBhdCB0aGF0IHJhZGlhbCBzZWdtZW50LlxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50LCBmbG9vcihpbmRleCAvIDYpXG4vLyBUbyBnbyBmcm9tIHNlZ21lbnQgdG8gYW5nbGUsIDIqcGkgKiAoc2VnbWVudC9zZWdtZW50Q291bnQpXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQgaW5kZXgsIGluZGV4IC0gKHNlZ21lbnQqNilcbi8vXG52ZWMzIGdldENvbmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IHJhd0luZGV4LCBmbG9hdCBjb25lT2Zmc2V0LCBvdXQgdmVjMyBub3JtYWwpIHtcblxuICBjb25zdCBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgaW5kZXggPSByYXdJbmRleCAtIGZsb29yKHJhd0luZGV4IC9cbiAgICAoc2VnbWVudENvdW50ICogNi4wKSkgKlxuICAgIChzZWdtZW50Q291bnQgKiA2LjApO1xuXG4gIGZsb2F0IHNlZ21lbnQgPSBmbG9vcigwLjAwMSArIGluZGV4LzYuMCk7XG4gIGZsb2F0IHNlZ21lbnRJbmRleCA9IGluZGV4IC0gKHNlZ21lbnQqNi4wKTtcblxuICBub3JtYWwgPSAtbm9ybWFsaXplKGQpO1xuXG4gIGlmIChzZWdtZW50SW5kZXggPiAyLjk5ICYmIHNlZ21lbnRJbmRleCA8IDMuMDEpIHtcbiAgICByZXR1cm4gbWl4KHZlYzMoMC4wKSwgLWQsIGNvbmVPZmZzZXQpO1xuICB9XG5cbiAgZmxvYXQgbmV4dEFuZ2xlID0gKFxuICAgIChzZWdtZW50SW5kZXggPiAwLjk5ICYmICBzZWdtZW50SW5kZXggPCAxLjAxKSB8fFxuICAgIChzZWdtZW50SW5kZXggPiA0Ljk5ICYmICBzZWdtZW50SW5kZXggPCA1LjAxKVxuICApID8gMS4wIDogMC4wO1xuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoKHNlZ21lbnQgKyBuZXh0QW5nbGUpIC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHYxID0gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIHZlYzMgdjIgPSB2MSAtIGQ7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcbiAgaWYgKHNlZ21lbnRJbmRleCA8IDMuMCkge1xuICAgIHZlYzMgdHggPSB1ICogc2luKGFuZ2xlKTtcbiAgICB2ZWMzIHR5ID0gdiAqIC1jb3MoYW5nbGUpO1xuICAgIHZlYzMgdGFuZ2VudCA9IHR4ICsgdHk7XG4gICAgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKHYzIC0gdjEsIHRhbmdlbnQpKTtcbiAgfVxuXG4gIGlmIChzZWdtZW50SW5kZXggPT0gMC4wKSB7XG4gICAgcmV0dXJuIG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB9XG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzMgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlO1xudW5pZm9ybSBmbG9hdCBjb25lU2NhbGU7XG51bmlmb3JtIGZsb2F0IGNvbmVPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBub3JtYWw7XG4gIHZlYzMgWFlaID0gZ2V0Q29uZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKCh2ZWN0b3JTY2FsZSAqIGNvbmVTY2FsZSkgKiB2ZWN0b3IpLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIGNvbmVQb3NpdGlvbjtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InZlY3RvciIsdHlwZToidmVjMyJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6byxmcmFnbWVudDpzLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzMifV19fSx7Z2xzbGlmeTo0MDF9XSwyNDE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ezA6Ik5PTkUiLDE6Ik9ORSIsMjoiTElORV9MT09QIiwzOiJMSU5FX1NUUklQIiw0OiJUUklBTkdMRVMiLDU6IlRSSUFOR0xFX1NUUklQIiw2OiJUUklBTkdMRV9GQU4iLDI1NjoiREVQVEhfQlVGRkVSX0JJVCIsNTEyOiJORVZFUiIsNTEzOiJMRVNTIiw1MTQ6IkVRVUFMIiw1MTU6IkxFUVVBTCIsNTE2OiJHUkVBVEVSIiw1MTc6Ik5PVEVRVUFMIiw1MTg6IkdFUVVBTCIsNTE5OiJBTFdBWVMiLDc2ODoiU1JDX0NPTE9SIiw3Njk6Ik9ORV9NSU5VU19TUkNfQ09MT1IiLDc3MDoiU1JDX0FMUEhBIiw3NzE6Ik9ORV9NSU5VU19TUkNfQUxQSEEiLDc3MjoiRFNUX0FMUEhBIiw3NzM6Ik9ORV9NSU5VU19EU1RfQUxQSEEiLDc3NDoiRFNUX0NPTE9SIiw3NzU6Ik9ORV9NSU5VU19EU1RfQ09MT1IiLDc3NjoiU1JDX0FMUEhBX1NBVFVSQVRFIiwxMDI0OiJTVEVOQ0lMX0JVRkZFUl9CSVQiLDEwMjg6IkZST05UIiwxMDI5OiJCQUNLIiwxMDMyOiJGUk9OVF9BTkRfQkFDSyIsMTI4MDoiSU5WQUxJRF9FTlVNIiwxMjgxOiJJTlZBTElEX1ZBTFVFIiwxMjgyOiJJTlZBTElEX09QRVJBVElPTiIsMTI4NToiT1VUX09GX01FTU9SWSIsMTI4NjoiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iLDIzMDQ6IkNXIiwyMzA1OiJDQ1ciLDI4NDk6IkxJTkVfV0lEVEgiLDI4ODQ6IkNVTExfRkFDRSIsMjg4NToiQ1VMTF9GQUNFX01PREUiLDI4ODY6IkZST05UX0ZBQ0UiLDI5Mjg6IkRFUFRIX1JBTkdFIiwyOTI5OiJERVBUSF9URVNUIiwyOTMwOiJERVBUSF9XUklURU1BU0siLDI5MzE6IkRFUFRIX0NMRUFSX1ZBTFVFIiwyOTMyOiJERVBUSF9GVU5DIiwyOTYwOiJTVEVOQ0lMX1RFU1QiLDI5NjE6IlNURU5DSUxfQ0xFQVJfVkFMVUUiLDI5NjI6IlNURU5DSUxfRlVOQyIsMjk2MzoiU1RFTkNJTF9WQUxVRV9NQVNLIiwyOTY0OiJTVEVOQ0lMX0ZBSUwiLDI5NjU6IlNURU5DSUxfUEFTU19ERVBUSF9GQUlMIiwyOTY2OiJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyIsMjk2NzoiU1RFTkNJTF9SRUYiLDI5Njg6IlNURU5DSUxfV1JJVEVNQVNLIiwyOTc4OiJWSUVXUE9SVCIsMzAyNDoiRElUSEVSIiwzMDQyOiJCTEVORCIsMzA4ODoiU0NJU1NPUl9CT1giLDMwODk6IlNDSVNTT1JfVEVTVCIsMzEwNjoiQ09MT1JfQ0xFQVJfVkFMVUUiLDMxMDc6IkNPTE9SX1dSSVRFTUFTSyIsMzMxNzoiVU5QQUNLX0FMSUdOTUVOVCIsMzMzMzoiUEFDS19BTElHTk1FTlQiLDMzNzk6Ik1BWF9URVhUVVJFX1NJWkUiLDMzODY6Ik1BWF9WSUVXUE9SVF9ESU1TIiwzNDA4OiJTVUJQSVhFTF9CSVRTIiwzNDEwOiJSRURfQklUUyIsMzQxMToiR1JFRU5fQklUUyIsMzQxMjoiQkxVRV9CSVRTIiwzNDEzOiJBTFBIQV9CSVRTIiwzNDE0OiJERVBUSF9CSVRTIiwzNDE1OiJTVEVOQ0lMX0JJVFMiLDM1NTM6IlRFWFRVUkVfMkQiLDQzNTI6IkRPTlRfQ0FSRSIsNDM1MzoiRkFTVEVTVCIsNDM1NDoiTklDRVNUIiw1MTIwOiJCWVRFIiw1MTIxOiJVTlNJR05FRF9CWVRFIiw1MTIyOiJTSE9SVCIsNTEyMzoiVU5TSUdORURfU0hPUlQiLDUxMjQ6IklOVCIsNTEyNToiVU5TSUdORURfSU5UIiw1MTI2OiJGTE9BVCIsNTM4NjoiSU5WRVJUIiw1ODkwOiJURVhUVVJFIiw2NDAxOiJTVEVOQ0lMX0lOREVYIiw2NDAyOiJERVBUSF9DT01QT05FTlQiLDY0MDY6IkFMUEhBIiw2NDA3OiJSR0IiLDY0MDg6IlJHQkEiLDY0MDk6IkxVTUlOQU5DRSIsNjQxMDoiTFVNSU5BTkNFX0FMUEhBIiw3NjgwOiJLRUVQIiw3NjgxOiJSRVBMQUNFIiw3NjgyOiJJTkNSIiw3NjgzOiJERUNSIiw3OTM2OiJWRU5ET1IiLDc5Mzc6IlJFTkRFUkVSIiw3OTM4OiJWRVJTSU9OIiw5NzI4OiJORUFSRVNUIiw5NzI5OiJMSU5FQVIiLDk5ODQ6Ik5FQVJFU1RfTUlQTUFQX05FQVJFU1QiLDk5ODU6IkxJTkVBUl9NSVBNQVBfTkVBUkVTVCIsOTk4NjoiTkVBUkVTVF9NSVBNQVBfTElORUFSIiw5OTg3OiJMSU5FQVJfTUlQTUFQX0xJTkVBUiIsMTAyNDA6IlRFWFRVUkVfTUFHX0ZJTFRFUiIsMTAyNDE6IlRFWFRVUkVfTUlOX0ZJTFRFUiIsMTAyNDI6IlRFWFRVUkVfV1JBUF9TIiwxMDI0MzoiVEVYVFVSRV9XUkFQX1QiLDEwNDk3OiJSRVBFQVQiLDEwNzUyOiJQT0xZR09OX09GRlNFVF9VTklUUyIsMTYzODQ6IkNPTE9SX0JVRkZFUl9CSVQiLDMyNzY5OiJDT05TVEFOVF9DT0xPUiIsMzI3NzA6Ik9ORV9NSU5VU19DT05TVEFOVF9DT0xPUiIsMzI3NzE6IkNPTlNUQU5UX0FMUEhBIiwzMjc3MjoiT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIiwzMjc3MzoiQkxFTkRfQ09MT1IiLDMyNzc0OiJGVU5DX0FERCIsMzI3Nzc6IkJMRU5EX0VRVUFUSU9OX1JHQiIsMzI3Nzg6IkZVTkNfU1VCVFJBQ1QiLDMyNzc5OiJGVU5DX1JFVkVSU0VfU1VCVFJBQ1QiLDMyODE5OiJVTlNJR05FRF9TSE9SVF80XzRfNF80IiwzMjgyMDoiVU5TSUdORURfU0hPUlRfNV81XzVfMSIsMzI4MjM6IlBPTFlHT05fT0ZGU0VUX0ZJTEwiLDMyODI0OiJQT0xZR09OX09GRlNFVF9GQUNUT1IiLDMyODU0OiJSR0JBNCIsMzI4NTU6IlJHQjVfQTEiLDMyODczOiJURVhUVVJFX0JJTkRJTkdfMkQiLDMyOTI2OiJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLDMyOTI4OiJTQU1QTEVfQ09WRVJBR0UiLDMyOTM2OiJTQU1QTEVfQlVGRkVSUyIsMzI5Mzc6IlNBTVBMRVMiLDMyOTM4OiJTQU1QTEVfQ09WRVJBR0VfVkFMVUUiLDMyOTM5OiJTQU1QTEVfQ09WRVJBR0VfSU5WRVJUIiwzMjk2ODoiQkxFTkRfRFNUX1JHQiIsMzI5Njk6IkJMRU5EX1NSQ19SR0IiLDMyOTcwOiJCTEVORF9EU1RfQUxQSEEiLDMyOTcxOiJCTEVORF9TUkNfQUxQSEEiLDMzMDcxOiJDTEFNUF9UT19FREdFIiwzMzE3MDoiR0VORVJBVEVfTUlQTUFQX0hJTlQiLDMzMTg5OiJERVBUSF9DT01QT05FTlQxNiIsMzMzMDY6IkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCIsMzM2MzU6IlVOU0lHTkVEX1NIT1JUXzVfNl81IiwzMzY0ODoiTUlSUk9SRURfUkVQRUFUIiwzMzkwMToiQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFIiwzMzkwMjoiQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFIiwzMzk4NDoiVEVYVFVSRTAiLDMzOTg1OiJURVhUVVJFMSIsMzM5ODY6IlRFWFRVUkUyIiwzMzk4NzoiVEVYVFVSRTMiLDMzOTg4OiJURVhUVVJFNCIsMzM5ODk6IlRFWFRVUkU1IiwzMzk5MDoiVEVYVFVSRTYiLDMzOTkxOiJURVhUVVJFNyIsMzM5OTI6IlRFWFRVUkU4IiwzMzk5MzoiVEVYVFVSRTkiLDMzOTk0OiJURVhUVVJFMTAiLDMzOTk1OiJURVhUVVJFMTEiLDMzOTk2OiJURVhUVVJFMTIiLDMzOTk3OiJURVhUVVJFMTMiLDMzOTk4OiJURVhUVVJFMTQiLDMzOTk5OiJURVhUVVJFMTUiLDM0MDAwOiJURVhUVVJFMTYiLDM0MDAxOiJURVhUVVJFMTciLDM0MDAyOiJURVhUVVJFMTgiLDM0MDAzOiJURVhUVVJFMTkiLDM0MDA0OiJURVhUVVJFMjAiLDM0MDA1OiJURVhUVVJFMjEiLDM0MDA2OiJURVhUVVJFMjIiLDM0MDA3OiJURVhUVVJFMjMiLDM0MDA4OiJURVhUVVJFMjQiLDM0MDA5OiJURVhUVVJFMjUiLDM0MDEwOiJURVhUVVJFMjYiLDM0MDExOiJURVhUVVJFMjciLDM0MDEyOiJURVhUVVJFMjgiLDM0MDEzOiJURVhUVVJFMjkiLDM0MDE0OiJURVhUVVJFMzAiLDM0MDE1OiJURVhUVVJFMzEiLDM0MDE2OiJBQ1RJVkVfVEVYVFVSRSIsMzQwMjQ6Ik1BWF9SRU5ERVJCVUZGRVJfU0laRSIsMzQwNDE6IkRFUFRIX1NURU5DSUwiLDM0MDU1OiJJTkNSX1dSQVAiLDM0MDU2OiJERUNSX1dSQVAiLDM0MDY3OiJURVhUVVJFX0NVQkVfTUFQIiwzNDA2ODoiVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQIiwzNDA2OToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YIiwzNDA3MDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIiwzNDA3MToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIiwzNDA3MjoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZIiwzNDA3MzoiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIiwzNDA3NDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIiwzNDA3NjoiTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSIsMzQzMzg6IlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIsMzQzMzk6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSIsMzQzNDA6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFIiwzNDM0MToiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwzNDM0MjoiQ1VSUkVOVF9WRVJURVhfQVRUUklCIiwzNDM3MzoiVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSIiwzNDQ2NjoiTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIiwzNDQ2NzoiQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NjYwOiJCVUZGRVJfU0laRSIsMzQ2NjE6IkJVRkZFUl9VU0FHRSIsMzQ4MTY6IlNURU5DSUxfQkFDS19GVU5DIiwzNDgxNzoiU1RFTkNJTF9CQUNLX0ZBSUwiLDM0ODE4OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMIiwzNDgxOToiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyIsMzQ4Nzc6IkJMRU5EX0VRVUFUSU9OX0FMUEhBIiwzNDkyMToiTUFYX1ZFUlRFWF9BVFRSSUJTIiwzNDkyMjoiVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEIiwzNDkzMDoiTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM0OTYyOiJBUlJBWV9CVUZGRVIiLDM0OTYzOiJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsMzQ5NjQ6IkFSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk2NToiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIsMzQ5NzU6IlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM1MDQwOiJTVFJFQU1fRFJBVyIsMzUwNDQ6IlNUQVRJQ19EUkFXIiwzNTA0ODoiRFlOQU1JQ19EUkFXIiwzNTYzMjoiRlJBR01FTlRfU0hBREVSIiwzNTYzMzoiVkVSVEVYX1NIQURFUiIsMzU2NjA6Ik1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzU2NjE6Ik1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MzoiU0hBREVSX1RZUEUiLDM1NjY0OiJGTE9BVF9WRUMyIiwzNTY2NToiRkxPQVRfVkVDMyIsMzU2NjY6IkZMT0FUX1ZFQzQiLDM1NjY3OiJJTlRfVkVDMiIsMzU2Njg6IklOVF9WRUMzIiwzNTY2OToiSU5UX1ZFQzQiLDM1NjcwOiJCT09MIiwzNTY3MToiQk9PTF9WRUMyIiwzNTY3MjoiQk9PTF9WRUMzIiwzNTY3MzoiQk9PTF9WRUM0IiwzNTY3NDoiRkxPQVRfTUFUMiIsMzU2NzU6IkZMT0FUX01BVDMiLDM1Njc2OiJGTE9BVF9NQVQ0IiwzNTY3ODoiU0FNUExFUl8yRCIsMzU2ODA6IlNBTVBMRVJfQ1VCRSIsMzU3MTI6IkRFTEVURV9TVEFUVVMiLDM1NzEzOiJDT01QSUxFX1NUQVRVUyIsMzU3MTQ6IkxJTktfU1RBVFVTIiwzNTcxNToiVkFMSURBVEVfU1RBVFVTIiwzNTcxNjoiSU5GT19MT0dfTEVOR1RIIiwzNTcxNzoiQVRUQUNIRURfU0hBREVSUyIsMzU3MTg6IkFDVElWRV9VTklGT1JNUyIsMzU3MTk6IkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEgiLDM1NzIwOiJTSEFERVJfU09VUkNFX0xFTkdUSCIsMzU3MjE6IkFDVElWRV9BVFRSSUJVVEVTIiwzNTcyMjoiQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIiwzNTcyNDoiU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OIiwzNTcyNToiQ1VSUkVOVF9QUk9HUkFNIiwzNjAwMzoiU1RFTkNJTF9CQUNLX1JFRiIsMzYwMDQ6IlNURU5DSUxfQkFDS19WQUxVRV9NQVNLIiwzNjAwNToiU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyIsMzYwMDY6IkZSQU1FQlVGRkVSX0JJTkRJTkciLDM2MDA3OiJSRU5ERVJCVUZGRVJfQklORElORyIsMzYwNDg6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUiLDM2MDQ5OiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FIiwzNjA1MDoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMIiwzNjA1MToiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UiLDM2MDUzOiJGUkFNRUJVRkZFUl9DT01QTEVURSIsMzYwNTQ6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCIsMzYwNTU6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIiwzNjA1NzoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIiwzNjA2MToiRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQiLDM2MDY0OiJDT0xPUl9BVFRBQ0hNRU5UMCIsMzYwOTY6IkRFUFRIX0FUVEFDSE1FTlQiLDM2MTI4OiJTVEVOQ0lMX0FUVEFDSE1FTlQiLDM2MTYwOiJGUkFNRUJVRkZFUiIsMzYxNjE6IlJFTkRFUkJVRkZFUiIsMzYxNjI6IlJFTkRFUkJVRkZFUl9XSURUSCIsMzYxNjM6IlJFTkRFUkJVRkZFUl9IRUlHSFQiLDM2MTY0OiJSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUIiwzNjE2ODoiU1RFTkNJTF9JTkRFWDgiLDM2MTc2OiJSRU5ERVJCVUZGRVJfUkVEX1NJWkUiLDM2MTc3OiJSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSIsMzYxNzg6IlJFTkRFUkJVRkZFUl9CTFVFX1NJWkUiLDM2MTc5OiJSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSIsMzYxODA6IlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFIiwzNjE4MToiUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSIsMzYxOTQ6IlJHQjU2NSIsMzYzMzY6IkxPV19GTE9BVCIsMzYzMzc6Ik1FRElVTV9GTE9BVCIsMzYzMzg6IkhJR0hfRkxPQVQiLDM2MzM5OiJMT1dfSU5UIiwzNjM0MDoiTUVESVVNX0lOVCIsMzYzNDE6IkhJR0hfSU5UIiwzNjM0NjoiU0hBREVSX0NPTVBJTEVSIiwzNjM0NzoiTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMiLDM2MzQ4OiJNQVhfVkFSWUlOR19WRUNUT1JTIiwzNjM0OToiTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyIsMzc0NDA6IlVOUEFDS19GTElQX1lfV0VCR0wiLDM3NDQxOiJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiLDM3NDQyOiJDT05URVhUX0xPU1RfV0VCR0wiLDM3NDQzOiJVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwzNzQ0NDoiQlJPV1NFUl9ERUZBVUxUX1dFQkdMIn19LHt9XSwyNDI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLzEuMC9udW1iZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfX0seyIuLzEuMC9udW1iZXJzIjoyNDF9XSwyNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLG89aShlLFt7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTo0LG9mZnNldDoxMixzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDoyOCxzdHJpZGU6NDB9XSksbD1hKGUpO2wuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGwuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLGwuYXR0cmlidXRlcy5vZmZzZXQubG9jYXRpb249Mjt2YXIgYz1uZXcgcyhlLHIsbyxsKTtyZXR1cm4gYy51cGRhdGUodCksY307dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycy9pbmRleCIpLG89WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPW4sdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMuY2FwU2l6ZT1bMTAsMTAsMTBdLHRoaXMubGluZUNvdW50PVswLDAsMF0sdGhpcy5saW5lT2Zmc2V0PVswLDAsMF0sdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil0WzBdW3JdPU1hdGgubWluKHRbMF1bcl0sZVtyXSksdFsxXVtyXT1NYXRoLm1heCh0WzFdW3JdLGVbcl0pfWwuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LGwuZHJhd1RyYW5zcGFyZW50PWwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIudW5pZm9ybXM7dGhpcy5zaGFkZXIuYmluZCgpO3ZhciBuPXIudmlldz10LnZpZXd8fG8saT1yLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxvO3IubW9kZWw9dC5tb2RlbHx8byxyLmNsaXBCb3VuZHM9dGhpcy5jbGlwQm91bmRzLHIub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGE9blsxMl0scz1uWzEzXSxsPW5bMTRdLGM9blsxNV0sdT0odC5fb3J0aG98fCExPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmEraVs3XSpzK2lbMTFdKmwraVsxNV0qYykvZS5kcmF3aW5nQnVmZmVySGVpZ2h0O3RoaXMudmFvLmJpbmQoKTtmb3IodmFyIGY9MDtmPDM7KytmKWUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoW2ZdKnRoaXMucGl4ZWxSYXRpbyksci5jYXBTaXplPXRoaXMuY2FwU2l6ZVtmXSp1LHRoaXMubGluZUNvdW50W2ZdJiZlLmRyYXdBcnJheXMoZS5MSU5FUyx0aGlzLmxpbmVPZmZzZXRbZl0sdGhpcy5saW5lQ291bnRbZl0pO3RoaXMudmFvLnVuYmluZCgpfTt2YXIgdT1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoMyksZT0wO2U8MzsrK2Upe2Zvcih2YXIgcj1bXSxuPTE7bjw9MjsrK24pZm9yKHZhciBpPS0xO2k8PTE7aSs9Mil7dmFyIGE9WzAsMCwwXTthWyhuK2UpJTNdPWksci5wdXNoKGEpfXRbZV09cn1yZXR1cm4gdH0oKTtmdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaT11W25dLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXTt0LnB1c2goZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0sclszXSxvWzBdLG9bMV0sb1syXSl9cmV0dXJuIGkubGVuZ3RofWwudXBkYXRlPWZ1bmN0aW9uKHQpeyJsaW5lV2lkdGgiaW4odD10fHx7fSkmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCxBcnJheS5pc0FycmF5KHRoaXMubGluZVdpZHRoKXx8KHRoaXMubGluZVdpZHRoPVt0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aF0pKSwiY2FwU2l6ZSJpbiB0JiYodGhpcy5jYXBTaXplPXQuY2FwU2l6ZSxBcnJheS5pc0FycmF5KHRoaXMuY2FwU2l6ZSl8fCh0aGlzLmNhcFNpemU9W3RoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplXSkpLHRoaXMuaGFzQWxwaGE9ITEsIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpO3ZhciBlPXQuY29sb3J8fFtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0scj10LnBvc2l0aW9uLG49dC5lcnJvcjtpZihBcnJheS5pc0FycmF5KGVbMF0pfHwoZT1bZSxlLGVdKSxyJiZuKXt2YXIgaT1bXSxhPXIubGVuZ3RoLG89MDt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdO2Zvcih2YXIgcz0wO3M8MzsrK3Mpe3RoaXMubGluZU9mZnNldFtzXT1vO3Q6Zm9yKHZhciBsPTA7bDxhOysrbCl7Zm9yKHZhciB1PXJbbF0saD0wO2g8MzsrK2gpaWYoaXNOYU4odVtoXSl8fCFpc0Zpbml0ZSh1W2hdKSljb250aW51ZSB0O3ZhciBwPW5bbF0sZD1lW3NdO2lmKEFycmF5LmlzQXJyYXkoZFswXSkmJihkPWVbbF0pLDM9PT1kLmxlbmd0aD9kPVtkWzBdLGRbMV0sZFsyXSwxXTo0PT09ZC5sZW5ndGgmJihkPVtkWzBdLGRbMV0sZFsyXSxkWzNdXSwhdGhpcy5oYXNBbHBoYSYmZFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLCFpc05hTihwWzBdW3NdKSYmIWlzTmFOKHBbMV1bc10pKXt2YXIgZztpZihwWzBdW3NdPDApKGc9dS5zbGljZSgpKVtzXSs9cFswXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxnWzBdLGdbMV0sZ1syXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLGcpLG8rPTIrZihpLGcsZCxzKTtpZihwWzFdW3NdPjApKGc9dS5zbGljZSgpKVtzXSs9cFsxXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxnWzBdLGdbMV0sZ1syXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLGcpLG8rPTIrZihpLGcsZCxzKX19dGhpcy5saW5lQ291bnRbc109by10aGlzLmxpbmVPZmZzZXRbc119dGhpcy5idWZmZXIudXBkYXRlKGkpfX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycy9pbmRleCI6MjQ0LCJnbC1idWZmZXIiOjIzNywiZ2wtdmFvIjozMTl9XSwyNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG9mZnNldDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBjYXBTaXplO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgd29ybGRQb3NpdGlvbiAgICAgICA9ICh3b3JsZFBvc2l0aW9uIC8gd29ybGRQb3NpdGlvbi53KSArIHZlYzQoY2FwU2l6ZSAqIG9mZnNldCwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gICAgICAgICA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZnJhZ0NvbG9yICAgICAgICAgICA9IGNvbG9yO1xuICBmcmFnUG9zaXRpb24gICAgICAgID0gcG9zaXRpb247XG59Il0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZyYWdQb3NpdGlvbikgfHxcbiAgICBmcmFnQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cbiAgKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHkgKiBmcmFnQ29sb3I7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToib2Zmc2V0Iix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjoyOTcsZ2xzbGlmeTo0MDF9XSwyNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdGV4dHVyZTJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2l8fChpPXQuRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQsYT10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCxvPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TLHM9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCk7dmFyIGM9dC5nZXRFeHRlbnNpb24oIldFQkdMX2RyYXdfYnVmZmVycyIpOyFsJiZjJiZmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTtsPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2Zvcih2YXIgYT1uO2E8cjsrK2EpaVthXT10Lk5PTkU7bFtuXT1pfX0odCxjKTtBcnJheS5pc0FycmF5KGUpJiYobj1yLHI9MHxlWzFdLGU9MHxlWzBdKTtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE1pc3Npbmcgc2hhcGUgcGFyYW1ldGVyIik7dmFyIHU9dC5nZXRQYXJhbWV0ZXIodC5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT51fHxyPDB8fHI+dSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogUGFyYW1ldGVycyBhcmUgdG9vIGxhcmdlIGZvciBGQk8iKTt2YXIgZj0xO2lmKCJjb2xvciJpbihuPW58fHt9KSl7aWYoKGY9TWF0aC5tYXgoMHxuLmNvbG9yLDApKTwwKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNdXN0IHNwZWNpZnkgYSBub25uZWdhdGl2ZSBudW1iZXIgb2YgY29sb3JzIik7aWYoZj4xKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVsdGlwbGUgZHJhdyBidWZmZXIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQiKTtpZihmPnQuZ2V0UGFyYW1ldGVyKGMuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0ICIrZisiIGRyYXcgYnVmZmVycyIpfX12YXIgaD10LlVOU0lHTkVEX0JZVEUscD10LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKTtpZihuLmZsb2F0JiZmPjApe2lmKCFwKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMiKTtoPXQuRkxPQVR9ZWxzZSBuLnByZWZlckZsb2F0JiZmPjAmJnAmJihoPXQuRkxPQVQpO3ZhciBnPSEwOyJkZXB0aCJpbiBuJiYoZz0hIW4uZGVwdGgpO3ZhciB2PSExOyJzdGVuY2lsImluIG4mJih2PSEhbi5zdGVuY2lsKTtyZXR1cm4gbmV3IGQodCxlLHIsaCxmLGcsdixjKX07dmFyIGksYSxvLHMsbD1udWxsO2Z1bmN0aW9uIGModCl7cmV0dXJuW3QuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5SRU5ERVJCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5URVhUVVJFX0JJTkRJTkdfMkQpXX1mdW5jdGlvbiB1KHQsZSl7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlWzBdKSx0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsZVsxXSksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZVsyXSl9ZnVuY3Rpb24gZih0KXtzd2l0Y2godCl7Y2FzZSBpOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciB1bnN1cHBvcnRlZCIpO2Nhc2UgYTp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBhdHRhY2htZW50Iik7Y2FzZSBvOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGRpbWVuc2lvbnMiKTtjYXNlIHM6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgbWlzc2luZyBhdHRhY2htZW50Iik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgZmFpbGVkIGZvciB1bnNwZWNpZmllZCByZWFzb24iKX19ZnVuY3Rpb24gaCh0LGUscixpLGEsbyl7aWYoIWkpcmV0dXJuIG51bGw7dmFyIHM9bih0LGUscixhLGkpO3JldHVybiBzLm1hZ0ZpbHRlcj10Lk5FQVJFU1Qscy5taW5GaWx0ZXI9dC5ORUFSRVNULHMubWlwU2FtcGxlcz0xLHMuYmluZCgpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQodC5GUkFNRUJVRkZFUixvLHQuVEVYVFVSRV8yRCxzLmhhbmRsZSwwKSxzfWZ1bmN0aW9uIHAodCxlLHIsbixpKXt2YXIgYT10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsYSksdC5yZW5kZXJidWZmZXJTdG9yYWdlKHQuUkVOREVSQlVGRkVSLG4sZSxyKSx0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHQuRlJBTUVCVUZGRVIsaSx0LlJFTkRFUkJVRkZFUixhKSxhfWZ1bmN0aW9uIGQodCxlLHIsbixpLGEsbyxzKXt0aGlzLmdsPXQsdGhpcy5fc2hhcGU9WzB8ZSwwfHJdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9leHQ9cyx0aGlzLmNvbG9yPW5ldyBBcnJheShpKTtmb3IodmFyIGQ9MDtkPGk7KytkKXRoaXMuY29sb3JbZF09bnVsbDt0aGlzLl9jb2xvcl9yYj1udWxsLHRoaXMuZGVwdGg9bnVsbCx0aGlzLl9kZXB0aF9yYj1udWxsLHRoaXMuX2NvbG9yVHlwZT1uLHRoaXMuX3VzZURlcHRoPWEsdGhpcy5fdXNlU3RlbmNpbD1vO3ZhciBnPXRoaXMsdj1bMHxlLDB8cl07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModix7MDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcud2lkdGg9dH19LDE6e2dldDpmdW5jdGlvbigpe3JldHVybiBnLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBnLmhlaWdodD10fX19KSx0aGlzLl9zaGFwZVZlY3Rvcj12LGZ1bmN0aW9uKHQpe3ZhciBlPWModC5nbCkscj10LmdsLG49dC5oYW5kbGU9ci5jcmVhdGVGcmFtZWJ1ZmZlcigpLGk9dC5fc2hhcGVbMF0sYT10Ll9zaGFwZVsxXSxvPXQuY29sb3IubGVuZ3RoLHM9dC5fZXh0LGQ9dC5fdXNlU3RlbmNpbCxnPXQuX3VzZURlcHRoLHY9dC5fY29sb3JUeXBlO3IuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbik7Zm9yKHZhciBtPTA7bTxvOysrbSl0LmNvbG9yW21dPWgocixpLGEsdixyLlJHQkEsci5DT0xPUl9BVFRBQ0hNRU5UMCttKTswPT09bz8odC5fY29sb3JfcmI9cChyLGksYSxyLlJHQkE0LHIuQ09MT1JfQVRUQUNITUVOVDApLHMmJnMuZHJhd0J1ZmZlcnNXRUJHTChsWzBdKSk6bz4xJiZzLmRyYXdCdWZmZXJzV0VCR0wobFtvXSk7dmFyIHk9ci5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKTt5P2Q/dC5kZXB0aD1oKHIsaSxhLHkuVU5TSUdORURfSU5UXzI0XzhfV0VCR0wsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTpnJiYodC5kZXB0aD1oKHIsaSxhLHIuVU5TSUdORURfU0hPUlQsci5ERVBUSF9DT01QT05FTlQsci5ERVBUSF9BVFRBQ0hNRU5UKSk6ZyYmZD90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6Zz90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfQ09NUE9ORU5UMTYsci5ERVBUSF9BVFRBQ0hNRU5UKTpkJiYodC5fZGVwdGhfcmI9cChyLGksYSxyLlNURU5DSUxfSU5ERVgsci5TVEVOQ0lMX0FUVEFDSE1FTlQpKTt2YXIgeD1yLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoci5GUkFNRUJVRkZFUik7aWYoeCE9PXIuRlJBTUVCVUZGRVJfQ09NUExFVEUpe2Zvcih0Ll9kZXN0cm95ZWQ9ITAsci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmRlbGV0ZUZyYW1lYnVmZmVyKHQuaGFuZGxlKSx0LmhhbmRsZT1udWxsLHQuZGVwdGgmJih0LmRlcHRoLmRpc3Bvc2UoKSx0LmRlcHRoPW51bGwpLHQuX2RlcHRoX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fZGVwdGhfcmIpLHQuX2RlcHRoX3JiPW51bGwpLG09MDttPHQuY29sb3IubGVuZ3RoOysrbSl0LmNvbG9yW21dLmRpc3Bvc2UoKSx0LmNvbG9yW21dPW51bGw7dC5fY29sb3JfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9jb2xvcl9yYiksdC5fY29sb3JfcmI9bnVsbCksdShyLGUpLGYoeCl9dShyLGUpfSh0aGlzKX12YXIgZz1kLnByb3RvdHlwZTtmdW5jdGlvbiB2KHQsZSxyKXtpZih0Ll9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBkZXN0cm95ZWQgRkJPIik7aWYodC5fc2hhcGVbMF0hPT1lfHx0Ll9zaGFwZVsxXSE9PXIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDYW4ndCByZXNpemUgRkJPLCBpbnZhbGlkIGRpbWVuc2lvbnMiKTt0Ll9zaGFwZVswXT1lLHQuX3NoYXBlWzFdPXI7Zm9yKHZhciBhPWMobiksbz0wO288dC5jb2xvci5sZW5ndGg7KytvKXQuY29sb3Jbb10uc2hhcGU9dC5fc2hhcGU7dC5fY29sb3JfcmImJihuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsdC5fY29sb3JfcmIpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlJHQkE0LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksdC5kZXB0aCYmKHQuZGVwdGguc2hhcGU9dC5fc2hhcGUpLHQuX2RlcHRoX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2RlcHRoX3JiKSx0Ll91c2VEZXB0aCYmdC5fdXNlU3RlbmNpbD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9TVEVOQ0lMLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VEZXB0aD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9DT01QT05FTlQxNix0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlU3RlbmNpbCYmbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uU1RFTkNJTF9JTkRFWCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsdC5oYW5kbGUpO3ZhciBzPW4uY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhuLkZSQU1FQlVGRkVSKTtzIT09bi5GUkFNRUJVRkZFUl9DT01QTEVURSYmKHQuZGlzcG9zZSgpLHUobixhKSxmKHMpKSx1KG4sYSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGcse3NoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkP1swLDBdOnRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9WzB8dCwwfHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IFNoYXBlIHZlY3RvciBtdXN0IGJlIGxlbmd0aCAyIik7dmFyIGU9MHx0WzBdLHI9MHx0WzFdO3JldHVybiB2KHRoaXMsZSxyKSxbZSxyXX0sZW51bWVyYWJsZTohMX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB2KHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH0sZW51bWVyYWJsZTohMX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCx2KHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxnLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LGcuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHsiZ2wtdGV4dHVyZTJkIjozMTR9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJzcHJpbnRmLWpzIikuc3ByaW50ZixpPXQoImdsLWNvbnN0YW50cy9sb29rdXAiKSxhPXQoImdsc2wtc2hhZGVyLW5hbWUiKSxvPXQoImFkZC1saW5lLW51bWJlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgcz1hKGUpfHwib2YgdW5rbm93biBuYW1lIChzZWUgbnBtIGdsc2wtc2hhZGVyLW5hbWUpIixsPSJ1bmtub3duIHR5cGUiO3ZvaWQgMCE9PXImJihsPXI9PT1pLkZSQUdNRU5UX1NIQURFUj8iZnJhZ21lbnQiOiJ2ZXJ0ZXgiKTtmb3IodmFyIGM9bigiRXJyb3IgY29tcGlsaW5nICVzIHNoYWRlciAlczpcbiIsbCxzKSx1PW4oIiVzJXMiLGMsdCksZj10LnNwbGl0KCJcbiIpLGg9e30scD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgZD1mW3BdO2lmKCIiIT09ZCYmIlwwIiE9PWQpe3ZhciBnPXBhcnNlSW50KGQuc3BsaXQoIjoiKVsyXSk7aWYoaXNOYU4oZykpdGhyb3cgbmV3IEVycm9yKG4oIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXMiLGQpKTtoW2ddPWR9fWZvcih2YXIgdj1vKGUpLnNwbGl0KCJcbiIpLHA9MDtwPHYubGVuZ3RoO3ArKylpZihoW3ArM118fGhbcCsyXXx8aFtwKzFdKXt2YXIgbT12W3BdO2lmKGMrPW0rIlxuIixoW3ArMV0pe3ZhciB5PWhbcCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoIjoiLDMpLmpvaW4oIjoiKS5sZW5ndGgrMSkudHJpbSgpLGMrPW4oIl5eXiAlc1xuXG4iLHkpfX1yZXR1cm57bG9uZzpjLnRyaW0oKSxzaG9ydDp1LnRyaW0oKX19fSx7ImFkZC1saW5lLW51bWJlcnMiOjUxLCJnbC1jb25zdGFudHMvbG9va3VwIjoyNDIsImdsc2wtc2hhZGVyLW5hbWUiOjM5Mywic3ByaW50Zi1qcyI6NTEyfV0sMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsbj1vKHIsbC52ZXJ0ZXgsbC5mcmFnbWVudCksaT1vKHIsbC5waWNrVmVydGV4LGwucGlja0ZyYWdtZW50KSxhPXMociksdT1zKHIpLGY9cyhyKSxoPXMocikscD1uZXcgYyh0LG4saSxhLHUsZixoKTtyZXR1cm4gcC51cGRhdGUoZSksdC5hZGRPYmplY3QocCkscH07dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoImlvdGEtYXJyYXkiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpLG89dCgiZ2wtc2hhZGVyIikscz10KCJnbC1idWZmZXIiKSxsPXQoIi4vbGliL3NoYWRlcnMiKTtmdW5jdGlvbiBjKHQsZSxyLG4saSxhLG8pe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5wb3NpdGlvbkJ1ZmZlcj1uLHRoaXMud2VpZ2h0QnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuaWRCdWZmZXI9byx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy5zaGFwZT1bMCwwXSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMucGlja09mZnNldD0wfXZhciB1LGY9Yy5wcm90b3R5cGUsaD1bMCwwLDEsMCwwLDEsMSwwLDEsMSwwLDFdO2YuZHJhdz0odT1bMSwwLDAsMCwxLDAsMCwwLDFdLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zaGFkZXIscj10aGlzLmJvdW5kcyxuPXRoaXMubnVtVmVydGljZXM7aWYoIShuPD0wKSl7dmFyIGk9dC5nbCxhPXQuZGF0YUJveCxvPXJbMl0tclswXSxzPXJbM10tclsxXSxsPWFbMl0tYVswXSxjPWFbM10tYVsxXTt1WzBdPTIqby9sLHVbNF09MipzL2MsdVs2XT0yKihyWzBdLWFbMF0pL2wtMSx1WzddPTIqKHJbMV0tYVsxXSkvYy0xLGUuYmluZCgpO3ZhciBmPWUudW5pZm9ybXM7Zi52aWV3VHJhbnNmb3JtPXUsZi5zaGFwZT10aGlzLnNoYXBlO3ZhciBoPWUuYXR0cmlidXRlczt0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxoLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksaC53ZWlnaHQucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGguY29sb3IucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITApLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUywwLG4pfX0pLGYuZHJhd1BpY2s9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwLDAsMCwxLDAsMCwwLDFdLGU9WzAsMCwwLDBdO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10aGlzLnBsb3QsaT10aGlzLnBpY2tTaGFkZXIsYT10aGlzLmJvdW5kcyxvPXRoaXMubnVtVmVydGljZXM7aWYoIShvPD0wKSl7dmFyIHM9bi5nbCxsPW4uZGF0YUJveCxjPWFbMl0tYVswXSx1PWFbM10tYVsxXSxmPWxbMl0tbFswXSxoPWxbM10tbFsxXTt0WzBdPTIqYy9mLHRbNF09Mip1L2gsdFs2XT0yKihhWzBdLWxbMF0pL2YtMSx0WzddPTIqKGFbMV0tbFsxXSkvaC0xO2Zvcih2YXIgcD0wO3A8NDsrK3ApZVtwXT1yPj44KnAmMjU1O3RoaXMucGlja09mZnNldD1yLGkuYmluZCgpO3ZhciBkPWkudW5pZm9ybXM7ZC52aWV3VHJhbnNmb3JtPXQsZC5waWNrT2Zmc2V0PWUsZC5zaGFwZT10aGlzLnNoYXBlO3ZhciBnPWkuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5wb3NpdGlvbkJ1ZmZlci5iaW5kKCksZy5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLGcud2VpZ2h0LnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmlkQnVmZmVyLmJpbmQoKSxnLnBpY2tJZC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVTLDAsbykscit0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV19fX0oKSxmLnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXTtpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLnhEYXRhLHM9dGhpcy55RGF0YTtyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDphLGRhdGFDb29yZDpbb1thJXRoaXMuc2hhcGVbMF1dLHNbYS90aGlzLnNoYXBlWzBdfDBdXX19LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZXx8WzAsMF0scj10Lnh8fGkoZVswXSksbz10Lnl8fGkoZVsxXSkscz10Lnp8fG5ldyBGbG9hdDMyQXJyYXkoZVswXSplWzFdKTt0aGlzLnhEYXRhPXIsdGhpcy55RGF0YT1vO3ZhciBsPXQuY29sb3JMZXZlbHN8fFswXSxjPXQuY29sb3JWYWx1ZXN8fFswLDAsMCwxXSx1PWwubGVuZ3RoLGY9dGhpcy5ib3VuZHMscD1mWzBdPXJbMF0sZD1mWzFdPW9bMF0sZz0xLygoZlsyXT1yW3IubGVuZ3RoLTFdKS1wKSx2PTEvKChmWzNdPW9bby5sZW5ndGgtMV0pLWQpLG09ZVswXSx5PWVbMV07dGhpcy5zaGFwZT1bbSx5XTt2YXIgeD0obS0xKSooeS0xKSooaC5sZW5ndGg+Pj4xKTt0aGlzLm51bVZlcnRpY2VzPXg7Zm9yKHZhciBiPWEubWFsbG9jVWludDgoNCp4KSxfPWEubWFsbG9jRmxvYXQzMigyKngpLHc9YS5tYWxsb2NVaW50OCgyKngpLGs9YS5tYWxsb2NVaW50MzIoeCksVD0wLEE9MDtBPHktMTsrK0EpZm9yKHZhciBNPXYqKG9bQV0tZCksUz12KihvW0ErMV0tZCksRT0wO0U8bS0xOysrRSlmb3IodmFyIEM9ZyoocltFXS1wKSxMPWcqKHJbRSsxXS1wKSx6PTA7ejxoLmxlbmd0aDt6Kz0yKXt2YXIgTyxJLEQsUCxSPWhbel0sRj1oW3orMV0sQj1zWyhBK0YpKm0rKEUrUildLE49bi5sZShsLEIpO2lmKE48MClPPWNbMF0sST1jWzFdLEQ9Y1syXSxQPWNbM107ZWxzZSBpZihOPT09dS0xKU89Y1s0KnUtNF0sST1jWzQqdS0zXSxEPWNbNCp1LTJdLFA9Y1s0KnUtMV07ZWxzZXt2YXIgaj0oQi1sW05dKS8obFtOKzFdLWxbTl0pLFY9MS1qLFU9NCpOLHE9NCooTisxKTtPPVYqY1tVXStqKmNbcV0sST1WKmNbVSsxXStqKmNbcSsxXSxEPVYqY1tVKzJdK2oqY1txKzJdLFA9VipjW1UrM10raipjW3ErM119Yls0KlRdPTI1NSpPLGJbNCpUKzFdPTI1NSpJLGJbNCpUKzJdPTI1NSpELGJbNCpUKzNdPTI1NSpQLF9bMipUXT0uNSpDKy41KkwsX1syKlQrMV09LjUqTSsuNSpTLHdbMipUXT1SLHdbMipUKzFdPUYsa1tUXT1BKm0rRSxUKz0xfXRoaXMucG9zaXRpb25CdWZmZXIudXBkYXRlKF8pLHRoaXMud2VpZ2h0QnVmZmVyLnVwZGF0ZSh3KSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShiKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShrKSxhLmZyZWUoXyksYS5mcmVlKGIpLGEuZnJlZSh3KSxhLmZyZWUoayl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9zaXRpb25CdWZmZXIuZGlzcG9zZSgpLHRoaXMud2VpZ2h0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjoyNDgsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoyNDksImdsLWJ1ZmZlciI6MjM3LCJnbC1zaGFkZXIiOjI5NywiaW90YS1hcnJheSI6NDA4LCJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDI0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5Iik7ZS5leHBvcnRzPXtmcmFnbWVudDpuKFsicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiICogZnJhZ0NvbG9yLmEsIGZyYWdDb2xvci5hKTtcbn1cbiJdKSx2ZXJ0ZXg6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiJdKSxwaWNrRnJhZ21lbnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGQgPSBzdGVwKC41LCB2V2VpZ2h0KTtcbiAgdmVjNCBpZCA9IGZyYWdJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnggKz0gZC54ICsgZC55KnNoYXBlLng7XG5cbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gaWQvMjU1Ljtcbn1cbiJdKSxwaWNrVmVydGV4Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xuYXR0cmlidXRlIHZlYzIgd2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIG1hdDMgdmlld1RyYW5zZm9ybTtcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG52b2lkIG1haW4oKSB7XG4gIHZXZWlnaHQgPSB3ZWlnaHQ7XG5cbiAgZnJhZ0lkID0gcGlja0lkO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiJdKX19LHtnbHNsaWZ5OjQwMX1dLDI0OTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDF9XSwyNTA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbmV4dFBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IGFyY0xlbmd0aCwgbGluZVdpZHRoO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5cbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcblxudmVjNCBwcm9qZWN0KHZlYzMgcCkge1xuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHN0YXJ0UG9pbnQgPSBwcm9qZWN0KHBvc2l0aW9uKTtcbiAgdmVjNCBlbmRQb2ludCAgID0gcHJvamVjdChuZXh0UG9zaXRpb24pO1xuXG4gIHZlYzIgQSA9IHN0YXJ0UG9pbnQueHkgLyBzdGFydFBvaW50Lnc7XG4gIHZlYzIgQiA9ICAgZW5kUG9pbnQueHkgLyAgIGVuZFBvaW50Lnc7XG5cbiAgZmxvYXQgY2xpcEFuZ2xlID0gYXRhbihcbiAgICAoQi55IC0gQS55KSAqIHNjcmVlblNoYXBlLnksXG4gICAgKEIueCAtIEEueCkgKiBzY3JlZW5TaGFwZS54XG4gICk7XG5cbiAgdmVjMiBvZmZzZXQgPSAwLjUgKiBwaXhlbFJhdGlvICogbGluZVdpZHRoICogdmVjMihcbiAgICBzaW4oY2xpcEFuZ2xlKSxcbiAgICAtY29zKGNsaXBBbmdsZSlcbiAgKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzdGFydFBvaW50Lnh5ICsgc3RhcnRQb2ludC53ICogb2Zmc2V0LCBzdGFydFBvaW50Lnp3KTtcblxuICB3b3JsZFBvc2l0aW9uID0gcG9zaXRpb247XG4gIHBpeGVsQXJjTGVuZ3RoID0gYXJjTGVuZ3RoO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICAgICAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hUZXh0dXJlO1xudW5pZm9ybSBmbG9hdCAgICAgZGFzaFNjYWxlO1xudW5pZm9ybSBmbG9hdCAgICAgb3BhY2l0eTtcblxudmFyeWluZyB2ZWMzICAgIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0ICAgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgICAgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pIHx8XG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcblxuICBmbG9hdCBkYXNoV2VpZ2h0ID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKGRhc2hTY2FsZSAqIHBpeGVsQXJjTGVuZ3RoLCAwKSkucjtcbiAgaWYoZGFzaFdlaWdodCA8IDAuNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XG5cbmxvd3AgdmVjNCBlbmNvZGVfZmxvYXRfMTU0MDI1OTEzMChoaWdocCBmbG9hdCB2KSB7XG4gIGhpZ2hwIGZsb2F0IGF2ID0gYWJzKHYpO1xuXG4gIC8vSGFuZGxlIHNwZWNpYWwgY2FzZXNcbiAgaWYoYXYgPCBGTE9BVF9NSU4pIHtcbiAgICByZXR1cm4gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2UgaWYodiA+IEZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDEyNy4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH0gZWxzZSBpZih2IDwgLUZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDI1NS4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH1cblxuICBoaWdocCB2ZWM0IGMgPSB2ZWM0KDAsMCwwLDApO1xuXG4gIC8vQ29tcHV0ZSBleHBvbmVudCBhbmQgbWFudGlzc2FcbiAgaGlnaHAgZmxvYXQgZSA9IGZsb29yKGxvZzIoYXYpKTtcbiAgaGlnaHAgZmxvYXQgbSA9IGF2ICogcG93KDIuMCwgLWUpIC0gMS4wO1xuICBcbiAgLy9VbnBhY2sgbWFudGlzc2FcbiAgY1sxXSA9IGZsb29yKDEyOC4wICogbSk7XG4gIG0gLT0gY1sxXSAvIDEyOC4wO1xuICBjWzJdID0gZmxvb3IoMzI3NjguMCAqIG0pO1xuICBtIC09IGNbMl0gLyAzMjc2OC4wO1xuICBjWzNdID0gZmxvb3IoODM4ODYwOC4wICogbSk7XG4gIFxuICAvL1VucGFjayBleHBvbmVudFxuICBoaWdocCBmbG9hdCBlYmlhcyA9IGUgKyAxMjcuMDtcbiAgY1swXSA9IGZsb29yKGViaWFzIC8gMi4wKTtcbiAgZWJpYXMgLT0gY1swXSAqIDIuMDtcbiAgY1sxXSArPSBmbG9vcihlYmlhcykgKiAxMjguMDsgXG5cbiAgLy9VbnBhY2sgc2lnbiBiaXRcbiAgY1swXSArPSAxMjguMCAqIHN0ZXAoMC4wLCAtdik7XG5cbiAgLy9TY2FsZSBiYWNrIHRvIHJhbmdlXG4gIHJldHVybiBjIC8gMjU1LjA7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzMgd29ybGRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLzI1NS4wLCBlbmNvZGVfZmxvYXRfMTU0MDI1OTEzMChwaXhlbEFyY0xlbmd0aCkueHl6KTtcbn0iXSksbD1be25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5leHRQb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJhcmNMZW5ndGgiLHR5cGU6ImZsb2F0In0se25hbWU6ImxpbmVXaWR0aCIsdHlwZToiZmxvYXQifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifV07ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxsKX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxzLG51bGwsbCl9fSx7ImdsLXNoYWRlciI6Mjk3LGdsc2xpZnk6NDAxfV0sMjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsfHx0LnNjZW5lJiZ0LnNjZW5lLmdsLHI9dShlKTtyLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsci5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLHIuYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxyLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDt2YXIgbz1mKGUpO28uYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG8uYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxvLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsby5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLG8uYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O2Zvcih2YXIgcz1uKGUpLGM9aShlLFt7YnVmZmVyOnMsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZToxLG9mZnNldDoyNCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjEsb2Zmc2V0OjI4LHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6NCxvZmZzZXQ6MzIsc3RyaWRlOjQ4fV0pLGg9bChuZXcgQXJyYXkoMTAyNCksWzI1NiwxLDRdKSxwPTA7cDwxMDI0OysrcCloLmRhdGFbcF09MjU1O3ZhciBkPWEoZSxoKTtkLndyYXA9ZS5SRVBFQVQ7dmFyIGc9bmV3IHYoZSxyLG8scyxjLGQpO3JldHVybiBnLnVwZGF0ZSh0KSxnfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiZ2wtdGV4dHVyZTJkIiksbz10KCJnbHNsLXJlYWQtZmxvYXQiKSxzPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbD10KCJuZGFycmF5IiksYz10KCIuL2xpYi9zaGFkZXJzIiksdT1jLmNyZWF0ZVNoYWRlcixmPWMuY3JlYXRlUGlja1NoYWRlcixoPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPTAsbj0wO248MzsrK24pe3ZhciBpPXRbbl0tZVtuXTtyKz1pKml9cmV0dXJuIE1hdGguc3FydChyKX1mdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxyPTA7cjwzOysrcillWzBdW3JdPU1hdGgubWF4KHRbMF1bcl0sZVswXVtyXSksZVsxXVtyXT1NYXRoLm1pbih0WzFdW3JdLGVbMV1bcl0pO3JldHVybiBlfWZ1bmN0aW9uIGcodCxlLHIsbil7dGhpcy5hcmNMZW5ndGg9dCx0aGlzLnBvc2l0aW9uPWUsdGhpcy5pbmRleD1yLHRoaXMuZGF0YUNvb3JkaW5hdGU9bn1mdW5jdGlvbiB2KHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLmJ1ZmZlcj1uLHRoaXMudmFvPWksdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMucG9pbnRzPVtdLHRoaXMuYXJjTGVuZ3RoPVtdLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmJvdW5kcz1bWzAsMCwwXSxbMCwwLDBdXSx0aGlzLnBpY2tJZD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy50ZXh0dXJlPWEsdGhpcy5kYXNoU2NhbGU9MSx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExLHRoaXMuZGlydHk9ITAsdGhpcy5waXhlbFJhdGlvPTF9dmFyIG09di5wcm90b3R5cGU7bS5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LG0uaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbS5waWNrU2xvdHM9MSxtLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LG0uZHJhd1RyYW5zcGFyZW50PW0uZHJhdz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIsbj10aGlzLnZhbztyLmJpbmQoKSxyLnVuaWZvcm1zPXttb2RlbDp0Lm1vZGVsfHxoLHZpZXc6dC52aWV3fHxoLHByb2plY3Rpb246dC5wcm9qZWN0aW9ufHxoLGNsaXBCb3VuZHM6ZCh0aGlzLmNsaXBCb3VuZHMpLGRhc2hUZXh0dXJlOnRoaXMudGV4dHVyZS5iaW5kKCksZGFzaFNjYWxlOnRoaXMuZGFzaFNjYWxlL3RoaXMuYXJjTGVuZ3RoW3RoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xXSxvcGFjaXR5OnRoaXMub3BhY2l0eSxzY3JlZW5TaGFwZTpbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb30sbi5iaW5kKCksbi5kcmF3KGUuVFJJQU5HTEVfU1RSSVAsdGhpcy52ZXJ0ZXhDb3VudCksbi51bmJpbmQoKX19LG0uZHJhd1BpY2s9ZnVuY3Rpb24odCl7aWYodGhpcy52ZXJ0ZXhDb3VudCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMucGlja1NoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fGgsdmlldzp0LnZpZXd8fGgscHJvamVjdGlvbjp0LnByb2plY3Rpb258fGgscGlja0lkOnRoaXMucGlja0lkLGNsaXBCb3VuZHM6ZCh0aGlzLmNsaXBCb3VuZHMpLHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0sbS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmRpcnR5PSEwO3ZhciBuPSEhdC5jb25uZWN0R2FwczsiZGFzaFNjYWxlImluIHQmJih0aGlzLmRhc2hTY2FsZT10LmRhc2hTY2FsZSksdGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSk7dmFyIGk9W10sYT1bXSxvPVtdLGM9MCx1PTAsZj1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxoPXQucG9zaXRpb258fHQucG9zaXRpb25zO2lmKGgpe3ZhciBkPXQuY29sb3J8fHQuY29sb3JzfHxbMCwwLDAsMV0sZz10LmxpbmVXaWR0aHx8MSx2PSExO3Q6Zm9yKGU9MTtlPGgubGVuZ3RoOysrZSl7dmFyIG0seSx4LGI9aFtlLTFdLF89aFtlXTtmb3IoYS5wdXNoKGMpLG8ucHVzaChiLnNsaWNlKCkpLHI9MDtyPDM7KytyKXtpZihpc05hTihiW3JdKXx8aXNOYU4oX1tyXSl8fCFpc0Zpbml0ZShiW3JdKXx8IWlzRmluaXRlKF9bcl0pKXtpZighbiYmaS5sZW5ndGg+MCl7Zm9yKHZhciB3PTA7dzwyNDsrK3cpaS5wdXNoKGlbaS5sZW5ndGgtMTJdKTt1Kz0yLHY9ITB9Y29udGludWUgdH1mWzBdW3JdPU1hdGgubWluKGZbMF1bcl0sYltyXSxfW3JdKSxmWzFdW3JdPU1hdGgubWF4KGZbMV1bcl0sYltyXSxfW3JdKX1BcnJheS5pc0FycmF5KGRbMF0pPyhtPWQubGVuZ3RoPmUtMT9kW2UtMV06ZC5sZW5ndGg+MD9kW2QubGVuZ3RoLTFdOlswLDAsMCwxXSx5PWQubGVuZ3RoPmU/ZFtlXTpkLmxlbmd0aD4wP2RbZC5sZW5ndGgtMV06WzAsMCwwLDFdKTptPXk9ZCwzPT09bS5sZW5ndGgmJihtPVttWzBdLG1bMV0sbVsyXSwxXSksMz09PXkubGVuZ3RoJiYoeT1beVswXSx5WzFdLHlbMl0sMV0pLCF0aGlzLmhhc0FscGhhJiZtWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSx4PUFycmF5LmlzQXJyYXkoZyk/Zy5sZW5ndGg+ZS0xP2dbZS0xXTpnLmxlbmd0aD4wP2dbZy5sZW5ndGgtMV06WzAsMCwwLDFdOmc7dmFyIGs9YztpZihjKz1wKGIsXyksdil7Zm9yKHI9MDtyPDI7KytyKWkucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLHgsbVswXSxtWzFdLG1bMl0sbVszXSk7dSs9Mix2PSExfWkucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLHgsbVswXSxtWzFdLG1bMl0sbVszXSxiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLC14LG1bMF0sbVsxXSxtWzJdLG1bM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0sYywteCx5WzBdLHlbMV0seVsyXSx5WzNdLF9bMF0sX1sxXSxfWzJdLGJbMF0sYlsxXSxiWzJdLGMseCx5WzBdLHlbMV0seVsyXSx5WzNdKSx1Kz00fX1pZih0aGlzLmJ1ZmZlci51cGRhdGUoaSksYS5wdXNoKGMpLG8ucHVzaChoW2gubGVuZ3RoLTFdLnNsaWNlKCkpLHRoaXMuYm91bmRzPWYsdGhpcy52ZXJ0ZXhDb3VudD11LHRoaXMucG9pbnRzPW8sdGhpcy5hcmNMZW5ndGg9YSwiZGFzaGVzImluIHQpe3ZhciBUPXQuZGFzaGVzLnNsaWNlKCk7Zm9yKFQudW5zaGlmdCgwKSxlPTE7ZTxULmxlbmd0aDsrK2UpVFtlXT1UW2UtMV0rVFtlXTt2YXIgQT1sKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pO2ZvcihlPTA7ZTwyNTY7KytlKXtmb3Iocj0wO3I8NDsrK3IpQS5zZXQoZSwwLHIsMCk7MSZzLmxlKFQsVFtULmxlbmd0aC0xXSplLzI1NSk/QS5zZXQoZSwwLDAsMCk6QS5zZXQoZSwwLDAsMjU1KX10aGlzLnRleHR1cmUuc2V0UGl4ZWxzKEEpfX0sbS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9LG0ucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9byh0LnZhbHVlWzBdLHQudmFsdWVbMV0sdC52YWx1ZVsyXSwwKSxyPXMubGUodGhpcy5hcmNMZW5ndGgsZSk7aWYocjwwKXJldHVybiBudWxsO2lmKHI9PT10aGlzLmFyY0xlbmd0aC5sZW5ndGgtMSlyZXR1cm4gbmV3IGcodGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLHRoaXMucG9pbnRzW3RoaXMucG9pbnRzLmxlbmd0aC0xXS5zbGljZSgpLHIpO2Zvcih2YXIgbj10aGlzLnBvaW50c1tyXSxpPXRoaXMucG9pbnRzW01hdGgubWluKHIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSldLGE9KGUtdGhpcy5hcmNMZW5ndGhbcl0pLyh0aGlzLmFyY0xlbmd0aFtyKzFdLXRoaXMuYXJjTGVuZ3RoW3JdKSxsPTEtYSxjPVswLDAsMF0sdT0wO3U8MzsrK3UpY1t1XT1sKm5bdV0rYSppW3VdO3ZhciBmPU1hdGgubWluKGE8LjU/cjpyKzEsdGhpcy5wb2ludHMubGVuZ3RoLTEpO3JldHVybiBuZXcgZyhlLGMsZix0aGlzLnBvaW50c1tmXSl9fSx7Ii4vbGliL3NoYWRlcnMiOjI1MCwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjI1MiwiZ2wtYnVmZmVyIjoyMzcsImdsLXRleHR1cmUyZCI6MzE0LCJnbC12YW8iOjMxOSwiZ2xzbC1yZWFkLWZsb2F0IjozOTIsbmRhcnJheTo0NDJ9XSwyNTI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAxXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAxfV0sMjUzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqYS1pKm47cmV0dXJuIG8/KG89MS9vLHRbMF09YSpvLHRbMV09LW4qbyx0WzJdPS1pKm8sdFszXT1yKm8sdCk6bnVsbH19LHt9XSwyNTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0sZj11Km8tcypjLGg9LXUqYStzKmwscD1jKmEtbypsLGQ9cipmK24qaCtpKnA7cmV0dXJuIGQ/KGQ9MS9kLHRbMF09ZipkLHRbMV09KC11Km4raSpjKSpkLHRbMl09KHMqbi1pKm8pKmQsdFszXT1oKmQsdFs0XT0odSpyLWkqbCkqZCx0WzVdPSgtcypyK2kqYSkqZCx0WzZdPXAqZCx0WzddPSgtYypyK24qbCkqZCx0WzhdPShvKnItbiphKSpkLHQpOm51bGx9fSx7fV0sMjU1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX19LHt9XSwyNTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjU3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XSx1PXRbOV0sZj10WzEwXSxoPXRbMTFdLHA9dFsxMl0sZD10WzEzXSxnPXRbMTRdLHY9dFsxNV07cmV0dXJuKGUqby1yKmEpKihmKnYtaCpnKS0oZSpzLW4qYSkqKHUqdi1oKmQpKyhlKmwtaSphKSoodSpnLWYqZCkrKHIqcy1uKm8pKihjKnYtaCpwKS0ocipsLWkqbykqKGMqZy1mKnApKyhuKmwtaSpzKSooYypkLXUqcCl9fSx7fV0sMjU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIrcixzPW4rbixsPWkraSxjPXIqbyx1PW4qbyxmPW4qcyxoPWkqbyxwPWkqcyxkPWkqbCxnPWEqbyx2PWEqcyxtPWEqbDtyZXR1cm4gdFswXT0xLWYtZCx0WzFdPXUrbSx0WzJdPWgtdix0WzNdPTAsdFs0XT11LW0sdFs1XT0xLWMtZCx0WzZdPXArZyx0WzddPTAsdFs4XT1oK3YsdFs5XT1wLWcsdFsxMF09MS1jLWYsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjU5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9bituLGw9aStpLGM9YSthLHU9bipzLGY9bipsLGg9bipjLHA9aSpsLGQ9aSpjLGc9YSpjLHY9bypzLG09bypsLHk9bypjO3JldHVybiB0WzBdPTEtKHArZyksdFsxXT1mK3ksdFsyXT1oLW0sdFszXT0wLHRbNF09Zi15LHRbNV09MS0odStnKSx0WzZdPWQrdix0WzddPTAsdFs4XT1oK20sdFs5XT1kLXYsdFsxMF09MS0odStwKSx0WzExXT0wLHRbMTJdPXJbMF0sdFsxM109clsxXSx0WzE0XT1yWzJdLHRbMTVdPTEsdH19LHt9XSwyNjA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sYz1lWzddLHU9ZVs4XSxmPWVbOV0saD1lWzEwXSxwPWVbMTFdLGQ9ZVsxMl0sZz1lWzEzXSx2PWVbMTRdLG09ZVsxNV0seT1yKnMtbipvLHg9cipsLWkqbyxiPXIqYy1hKm8sXz1uKmwtaSpzLHc9bipjLWEqcyxrPWkqYy1hKmwsVD11KmctZipkLEE9dSp2LWgqZCxNPXUqbS1wKmQsUz1mKnYtaCpnLEU9ZiptLXAqZyxDPWgqbS1wKnYsTD15KkMteCpFK2IqUytfKk0tdypBK2sqVDtpZighTClyZXR1cm4gbnVsbDtyZXR1cm4gTD0xL0wsdFswXT0ocypDLWwqRStjKlMpKkwsdFsxXT0oaSpFLW4qQy1hKlMpKkwsdFsyXT0oZyprLXYqdyttKl8pKkwsdFszXT0oaCp3LWYqay1wKl8pKkwsdFs0XT0obCpNLW8qQy1jKkEpKkwsdFs1XT0ocipDLWkqTSthKkEpKkwsdFs2XT0odipiLWQqay1tKngpKkwsdFs3XT0odSprLWgqYitwKngpKkwsdFs4XT0obypFLXMqTStjKlQpKkwsdFs5XT0obipNLXIqRS1hKlQpKkwsdFsxMF09KGQqdy1nKmIrbSp5KSpMLHRbMTFdPShmKmItdSp3LXAqeSkqTCx0WzEyXT0ocypBLW8qUy1sKlQpKkwsdFsxM109KHIqUy1uKkEraSpUKSpMLHRbMTRdPShnKngtZCpfLXYqeSkqTCx0WzE1XT0odSpfLWYqeCtoKnkpKkwsdH19LHt9XSwyNjI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2lkZW50aXR5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsLGMsdSxmLGgscCxkLGc9ZVswXSx2PWVbMV0sbT1lWzJdLHk9aVswXSx4PWlbMV0sYj1pWzJdLF89clswXSx3PXJbMV0saz1yWzJdO2lmKE1hdGguYWJzKGctXyk8MWUtNiYmTWF0aC5hYnModi13KTwxZS02JiZNYXRoLmFicyhtLWspPDFlLTYpcmV0dXJuIG4odCk7Zj1nLV8saD12LXcscD1tLWssZD0xL01hdGguc3FydChmKmYraCpoK3AqcCksYT14KihwKj1kKS1iKihoKj1kKSxvPWIqKGYqPWQpLXkqcCxzPXkqaC14KmYsKGQ9TWF0aC5zcXJ0KGEqYStvKm8rcypzKSk/KGEqPWQ9MS9kLG8qPWQscyo9ZCk6KGE9MCxvPTAscz0wKTtsPWgqcy1wKm8sYz1wKmEtZipzLHU9ZipvLWgqYSwoZD1NYXRoLnNxcnQobCpsK2MqYyt1KnUpKT8obCo9ZD0xL2QsYyo9ZCx1Kj1kKToobD0wLGM9MCx1PTApO3JldHVybiB0WzBdPWEsdFsxXT1sLHRbMl09Zix0WzNdPTAsdFs0XT1vLHRbNV09Yyx0WzZdPWgsdFs3XT0wLHRbOF09cyx0WzldPXUsdFsxMF09cCx0WzExXT0wLHRbMTJdPS0oYSpnK28qditzKm0pLHRbMTNdPS0obCpnK2Mqdit1Km0pLHRbMTRdPS0oZipnK2gqditwKm0pLHRbMTVdPTEsdH19LHsiLi9pZGVudGl0eSI6MjYwfV0sMjYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSxnPWVbMTJdLHY9ZVsxM10sbT1lWzE0XSx5PWVbMTVdLHg9clswXSxiPXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT14Km4rYipzK18qZit3KmcsdFsxXT14KmkrYipsK18qaCt3KnYsdFsyXT14KmErYipjK18qcCt3Km0sdFszXT14Km8rYip1K18qZCt3KnkseD1yWzRdLGI9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09eCpuK2IqcytfKmYrdypnLHRbNV09eCppK2IqbCtfKmgrdyp2LHRbNl09eCphK2IqYytfKnArdyptLHRbN109eCpvK2IqdStfKmQrdyp5LHg9cls4XSxiPXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09eCpuK2IqcytfKmYrdypnLHRbOV09eCppK2IqbCtfKmgrdyp2LHRbMTBdPXgqYStiKmMrXypwK3cqbSx0WzExXT14Km8rYip1K18qZCt3KnkseD1yWzEyXSxiPXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT14Km4rYipzK18qZit3KmcsdFsxM109eCppK2IqbCtfKmgrdyp2LHRbMTRdPXgqYStiKmMrXypwK3cqbSx0WzE1XT14Km8rYip1K18qZCt3KnksdH19LHt9XSwyNjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oZS1yKSxsPTEvKG4taSksYz0xLyhhLW8pO3JldHVybiB0WzBdPS0yKnMsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09LTIqbCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MipjLHRbMTFdPTAsdFsxMl09KGUrcikqcyx0WzEzXT0oaStuKSpsLHRbMTRdPShvK2EpKmMsdFsxNV09MSx0fX0se31dLDI2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fX0se31dLDI2NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscCxkLGcsdixtLHkseCxiLF8sdyxrLFQsQSxNLFMsRT1uWzBdLEM9blsxXSxMPW5bMl0sej1NYXRoLnNxcnQoRSpFK0MqQytMKkwpO2lmKE1hdGguYWJzKHopPDFlLTYpcmV0dXJuIG51bGw7RSo9ej0xL3osQyo9eixMKj16LGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxvPTEtYSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PWVbM10sZj1lWzRdLGg9ZVs1XSxwPWVbNl0sZD1lWzddLGc9ZVs4XSx2PWVbOV0sbT1lWzEwXSx5PWVbMTFdLHg9RSpFKm8rYSxiPUMqRSpvK0wqaSxfPUwqRSpvLUMqaSx3PUUqQypvLUwqaSxrPUMqQypvK2EsVD1MKkMqbytFKmksQT1FKkwqbytDKmksTT1DKkwqby1FKmksUz1MKkwqbythLHRbMF09cyp4K2YqYitnKl8sdFsxXT1sKngraCpiK3YqXyx0WzJdPWMqeCtwKmIrbSpfLHRbM109dSp4K2QqYit5Kl8sdFs0XT1zKncrZiprK2cqVCx0WzVdPWwqdytoKmsrdipULHRbNl09Yyp3K3AqayttKlQsdFs3XT11KncrZCprK3kqVCx0WzhdPXMqQStmKk0rZypTLHRbOV09bCpBK2gqTSt2KlMsdFsxMF09YypBK3AqTSttKlMsdFsxMV09dSpBK2QqTSt5KlMsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHR9fSx7fV0sMjY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkrZipuLHRbN109bCppK2gqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWYqaS1zKm4sdFsxMV09aCppLWwqbix0fX0se31dLDI2ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07ZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaS1jKm4sdFsxXT1vKmktdSpuLHRbMl09cyppLWYqbix0WzNdPWwqaS1oKm4sdFs4XT1hKm4rYyppLHRbOV09bypuK3UqaSx0WzEwXT1zKm4rZippLHRbMTFdPWwqbitoKmksdH19LHt9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs0XSx1PWVbNV0sZj1lWzZdLGg9ZVs3XTtlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaStjKm4sdFsxXT1vKmkrdSpuLHRbMl09cyppK2Yqbix0WzNdPWwqaStoKm4sdFs0XT1jKmktYSpuLHRbNV09dSppLW8qbix0WzZdPWYqaS1zKm4sdFs3XT1oKmktbCpuLHR9fSx7fV0sMjcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDI3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGc9clswXSx2PXJbMV0sbT1yWzJdO2U9PT10Pyh0WzEyXT1lWzBdKmcrZVs0XSp2K2VbOF0qbStlWzEyXSx0WzEzXT1lWzFdKmcrZVs1XSp2K2VbOV0qbStlWzEzXSx0WzE0XT1lWzJdKmcrZVs2XSp2K2VbMTBdKm0rZVsxNF0sdFsxNV09ZVszXSpnK2VbN10qditlWzExXSptK2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09Zix0WzldPWgsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qZytzKnYrZiptK2VbMTJdLHRbMTNdPWkqZytsKnYraCptK2VbMTNdLHRbMTRdPWEqZytjKnYrcCptK2VbMTRdLHRbMTVdPW8qZyt1KnYrZCptK2VbMTVdKTtyZXR1cm4gdH19LHt9XSwyNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9fSx7fV0sMjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0WzBdPTEvZVswXTticmVhaztjYXNlIDQ6bih0LGUpO2JyZWFrO2Nhc2UgOTppKHQsZSk7YnJlYWs7Y2FzZSAxNjphKHQsZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImN1cnJlbnRseSBzdXBwb3J0cyBtYXRyaWNlcyB1cCB0byA0eDQiKX1yZXR1cm4gdH07dmFyIG49dCgiZ2wtbWF0Mi9pbnZlcnQiKSxpPXQoImdsLW1hdDMvaW52ZXJ0IiksYT10KCJnbC1tYXQ0L2ludmVydCIpfSx7ImdsLW1hdDIvaW52ZXJ0IjoyNTMsImdsLW1hdDMvaW52ZXJ0IjoyNTQsImdsLW1hdDQvaW52ZXJ0IjoyNjF9XSwyNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmFyeWNlbnRyaWMiKSxpPXQoInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanMiKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVswLDAsMCwwXSxuPTA7bjw0Oysrbilmb3IodmFyIGk9MDtpPDQ7KytpKXJbaV0rPXRbNCpuK2ldKmVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0LGUscixuLGkpe2Zvcih2YXIgbz1hKG4sYShyLGEoZSxbdFswXSx0WzFdLHRbMl0sMV0pKSkscz0wO3M8MzsrK3Mpb1tzXS89b1szXTtyZXR1cm5bLjUqaVswXSooMStvWzBdKSwuNSppWzFdKigxLW9bMV0pXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxzLGwpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm5bMCx0WzBdLnNsaWNlKCldO2Zvcih2YXIgYz1uZXcgQXJyYXkodC5sZW5ndGgpLHU9MDt1PHQubGVuZ3RoOysrdSljW3VdPW8odFt1XSxyLGEscyxsKTtmb3IodmFyIGY9MCxoPTEvMCx1PTA7dTxjLmxlbmd0aDsrK3Upe2Zvcih2YXIgcD0wLGQ9MDtkPDI7KytkKXArPU1hdGgucG93KGNbdV1bZF0tZVtkXSwyKTtwPGgmJihoPXAsZj11KX1mb3IodmFyIGc9ZnVuY3Rpb24odCxlKXtpZigyPT09dC5sZW5ndGgpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzwyOysrbylyKz1NYXRoLnBvdyhlW29dLXRbMF1bb10sMiksYSs9TWF0aC5wb3coZVtvXS10WzFdW29dLDIpO3JldHVybiByPU1hdGguc3FydChyKSxhPU1hdGguc3FydChhKSxyK2E8MWUtNj9bMSwwXTpbYS8ocithKSxyLyhhK3IpXX1pZigzPT09dC5sZW5ndGgpe3ZhciBzPVswLDBdO3JldHVybiBpKHRbMF0sdFsxXSx0WzJdLGUscyksbih0LHMpfXJldHVybltdfShjLGUpLHY9MCx1PTA7dTwzOysrdSl7aWYoZ1t1XTwtLjAwMXx8Z1t1XT4xLjAwMDEpcmV0dXJuIG51bGw7dis9Z1t1XX1pZihNYXRoLmFicyh2LTEpPi4wMDEpcmV0dXJuIG51bGw7cmV0dXJuW2YsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9WzAsMCwwXSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0sYT1lW25dLG89MDtvPDM7KytvKXJbb10rPWEqaVtvXTtyZXR1cm4gcn0odCxnKSxnXX19LHtiYXJ5Y2VudHJpYzo2MywicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyI6NDczfV0sMjc1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBub3JtYWw7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvblxuICAgICAgICAgICAsIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZlYzQgcHJvamVjdCh2ZWMzIHApIHtcbiAgcmV0dXJuIHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3QocG9zaXRpb24pO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogdmVjNChwb3NpdGlvbiAsIDEuMCk7XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfbm9ybWFsICA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gcG9zaXRpb247XG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcbn1cbiJdKSxhPW4oWyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcblxuICAvL0ZyZXNuZWwgdGVybVxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcblxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xufVxuXG4vLyNwcmFnbWEgZ2xzbGlmeTogYmVja21hbm4gPSByZXF1aXJlKGdsc2wtc3BlY3VsYXItYmVja21hbm4pIC8vIHVzZWQgaW4gZ2wtc3VyZmFjZTNkXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzXG4gICAgICAgICAgICAsIGZyZXNuZWxcbiAgICAgICAgICAgICwga2FtYmllbnRcbiAgICAgICAgICAgICwga2RpZmZ1c2VcbiAgICAgICAgICAgICwga3NwZWN1bGFyXG4gICAgICAgICAgICAsIG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGE7XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSkpIGRpc2NhcmQ7XG5cbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtaW4oMS4wLCBtYXgoMC4wLCBjb29rVG9ycmFuY2VTcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MsIGZyZXNuZWwpKSk7XG4gIC8vZmxvYXQgc3BlY3VsYXIgPSBtYXgoMC4wLCBiZWNrbWFubihMLCBWLCBOLCByb3VnaG5lc3MpKTsgLy8gdXNlZCBpbiBnbC1zdXJmYWNlM2RcblxuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl9kYXRhICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgID0gdXY7XG59Il0pLHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSkpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XG59Il0pLGw9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICB9XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgZl9jb2xvciA9IGNvbG9yO1xuICBmX3V2ID0gdXY7XG59Il0pLGM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb2ludFIgPSBnbF9Qb2ludENvb3JkLnh5IC0gdmVjMigwLjUsMC41KTtcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSJdKSx1PW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbjtcbn0iXSksZj1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pLGg9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyAgcG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuYXR0cmlidXRlIHZlYzQgIGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG4gIH1cbiAgZl9pZCAgICAgICAgID0gaWQ7XG4gIGZfcG9zaXRpb24gICA9IHBvc2l0aW9uO1xufSJdKSxwPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG59Il0pLGQ9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyBjb250b3VyQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb250b3VyQ29sb3IsMSk7XG59XG4iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifV19LHIud2lyZVNoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifV19LHIucG9pbnRTaGFkZXI9e3ZlcnRleDpsLGZyYWdtZW50OmMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifV19LHIucGlja1NoYWRlcj17dmVydGV4OnUsZnJhZ21lbnQ6ZixhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIucG9pbnRQaWNrU2hhZGVyPXt2ZXJ0ZXg6aCxmcmFnbWVudDpmLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJwb2ludFNpemUiLHR5cGU6ImZsb2F0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dfSxyLmNvbnRvdXJTaGFkZXI9e3ZlcnRleDpwLGZyYWdtZW50OmQsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn1dfX0se2dsc2xpZnk6NDAxfV0sMjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoImdsLXRleHR1cmUyZCIpLHM9dCgibm9ybWFscyIpLGw9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGM9dCgiZ2wtbWF0NC9pbnZlcnQiKSx1PXQoIm5kYXJyYXkiKSxmPXQoImNvbG9ybWFwIiksaD10KCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91ciIpLHA9dCgidHlwZWRhcnJheS1wb29sIiksZD10KCIuL2xpYi9zaGFkZXJzIiksZz10KCIuL2xpYi9jbG9zZXN0LXBvaW50Iiksdj1kLm1lc2hTaGFkZXIsbT1kLndpcmVTaGFkZXIseT1kLnBvaW50U2hhZGVyLHg9ZC5waWNrU2hhZGVyLGI9ZC5wb2ludFBpY2tTaGFkZXIsXz1kLmNvbnRvdXJTaGFkZXIsdz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gayh0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxnLHYsbSx5LHgsYixfLGssVCxBLE0sUyl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMubGluZVNoYWRlcj1uLHRoaXMucG9pbnRTaGFkZXI9aSx0aGlzLnBpY2tTaGFkZXI9YSx0aGlzLnBvaW50UGlja1NoYWRlcj1vLHRoaXMuY29udG91clNoYWRlcj1zLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9bCx0aGlzLnRyaWFuZ2xlQ29sb3JzPXUsdGhpcy50cmlhbmdsZU5vcm1hbHM9aCx0aGlzLnRyaWFuZ2xlVVZzPWYsdGhpcy50cmlhbmdsZUlkcz1jLHRoaXMudHJpYW5nbGVWQU89cCx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuZWRnZVBvc2l0aW9ucz1kLHRoaXMuZWRnZUNvbG9ycz12LHRoaXMuZWRnZVVWcz1tLHRoaXMuZWRnZUlkcz1nLHRoaXMuZWRnZVZBTz15LHRoaXMuZWRnZUNvdW50PTAsdGhpcy5wb2ludFBvc2l0aW9ucz14LHRoaXMucG9pbnRDb2xvcnM9Xyx0aGlzLnBvaW50VVZzPWssdGhpcy5wb2ludFNpemVzPVQsdGhpcy5wb2ludElkcz1iLHRoaXMucG9pbnRWQU89QSx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbnRvdXJMaW5lV2lkdGg9MSx0aGlzLmNvbnRvdXJQb3NpdGlvbnM9TSx0aGlzLmNvbnRvdXJWQU89Uyx0aGlzLmNvbnRvdXJDb3VudD0wLHRoaXMuY29udG91ckNvbG9yPVswLDAsMF0sdGhpcy5jb250b3VyRW5hYmxlPSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuX21vZGVsPXcsdGhpcy5fdmlldz13LHRoaXMuX3Byb2plY3Rpb249dyx0aGlzLl9yZXNvbHV0aW9uPVsxLDFdfXZhciBUPWsucHJvdG90eXBlO2Z1bmN0aW9uIEEodCl7dmFyIGU9bih0LHkudmVydGV4LHkuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBNKHQpe3ZhciBlPW4odCx4LnZlcnRleCx4LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZX1mdW5jdGlvbiBTKHQpe3ZhciBlPW4odCxiLnZlcnRleCxiLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gRSh0KXt2YXIgZT1uKHQsXy52ZXJ0ZXgsXy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGV9VC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LFQuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0sVC5waWNrU2xvdHM9MSxULnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LFQuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWgodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGY9Y1swXTsyPT09Yy5sZW5ndGgmJihmPWNbdV0pO2Zvcih2YXIgZD1uW2ZdWzBdLGc9bltmXVsxXSx2PWlbZl0sbT0xLXYseT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW2ddLGI9MDtiPDM7KytiKW9bcysrXT12KnlbYl0rbSp4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSxULnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCwiY29udG91ckVuYWJsZSJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwibGlnaHRQb3NpdGlvbiJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLCJhbWJpZW50ImluIHQmJih0aGlzLmFtYmllbnRMaWdodD10LmFtYmllbnQpLCJkaWZmdXNlImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLCJzcGVjdWxhciJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLCJyb3VnaG5lc3MiaW4gdCYmKHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzKSwiZnJlc25lbCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0KXtmb3IodmFyIGU9Zih7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIGk9ZVtuXSxhPTA7YTwzOysrYSlyWzQqbithXT1pW2FdO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiB1KHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXApKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zO2lmKG4mJnIpe3ZhciBpPVtdLGE9W10sbD1bXSxjPVtdLGg9W10scD1bXSxkPVtdLGc9W10sdj1bXSxtPVtdLHk9W10seD1bXSxiPVtdLF89W107dGhpcy5jZWxscz1yLHRoaXMucG9zaXRpb25zPW47dmFyIHc9dC52ZXJ0ZXhOb3JtYWxzLGs9dC5jZWxsTm9ybWFscyxUPXZvaWQgMD09PXQudmVydGV4Tm9ybWFsc0Vwc2lsb24/MWUtNjp0LnZlcnRleE5vcm1hbHNFcHNpbG9uLEE9dm9pZCAwPT09dC5mYWNlTm9ybWFsc0Vwc2lsb24/MWUtNjp0LmZhY2VOb3JtYWxzRXBzaWxvbjt0LnVzZUZhY2V0Tm9ybWFscyYmIWsmJihrPXMuZmFjZU5vcm1hbHMocixuLEEpKSxrfHx3fHwodz1zLnZlcnRleE5vcm1hbHMocixuLFQpKTt2YXIgTT10LnZlcnRleENvbG9ycyxTPXQuY2VsbENvbG9ycyxFPXQubWVzaENvbG9yfHxbMSwxLDEsMV0sQz10LnZlcnRleFVWcyxMPXQudmVydGV4SW50ZW5zaXR5LHo9dC5jZWxsVVZzLE89dC5jZWxsSW50ZW5zaXR5LEk9MS8wLEQ9LTEvMDtpZighQyYmIXopaWYoTClpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcylJPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxEPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgUD0wO1A8TC5sZW5ndGg7KytQKXt2YXIgUj1MW1BdO0k9TWF0aC5taW4oSSxSKSxEPU1hdGgubWF4KEQsUil9ZWxzZSBpZihPKWZvcihQPTA7UDxPLmxlbmd0aDsrK1Ape1I9T1tQXTtJPU1hdGgubWluKEksUiksRD1NYXRoLm1heChELFIpfWVsc2UgZm9yKFA9MDtQPG4ubGVuZ3RoOysrUCl7Uj1uW1BdWzJdO0k9TWF0aC5taW4oSSxSKSxEPU1hdGgubWF4KEQsUil9dGhpcy5pbnRlbnNpdHk9THx8KE8/ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT0wO3ZhciBhPXQubGVuZ3RoO2ZvcihpPTA7aTxhOysraSlmb3IodmFyIG89dFtpXSxzPTA7czxvLmxlbmd0aDsrK3MpbltvW3NdXT1yW2ldO3JldHVybiBufShyLG4ubGVuZ3RoLE8pOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pKTt2YXIgRj10LnBvaW50U2l6ZXMsQj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoUD0wO1A8bi5sZW5ndGg7KytQKWZvcih2YXIgTj1uW1BdLGo9MDtqPDM7KytqKSFpc05hTihOW2pdKSYmaXNGaW5pdGUoTltqXSkmJih0aGlzLmJvdW5kc1swXVtqXT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVtqXSxOW2pdKSx0aGlzLmJvdW5kc1sxXVtqXT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVtqXSxOW2pdKSk7dmFyIFY9MCxVPTAscT0wO3Q6Zm9yKFA9MDtQPHIubGVuZ3RoOysrUCl7dmFyIEg9cltQXTtzd2l0Y2goSC5sZW5ndGgpe2Nhc2UgMTpmb3IoTj1uW1k9SFswXV0saj0wO2o8MzsrK2opaWYoaXNOYU4oTltqXSl8fCFpc0Zpbml0ZShOW2pdKSljb250aW51ZSB0O20ucHVzaChOWzBdLE5bMV0sTlsyXSksMz09PShXPU0/TVtZXTpTP1NbUF06RSkubGVuZ3RoP3kucHVzaChXWzBdLFdbMV0sV1syXSwxKTp5LnB1c2goV1swXSxXWzFdLFdbMl0sV1szXSksWD1DP0NbWV06TD9bKExbWV0tSSkvKEQtSSksMF06ej96W1BdOk8/WyhPW1BdLUkpLyhELUkpLDBdOlsoTlsyXS1JKS8oRC1JKSwwXSx4LnB1c2goWFswXSxYWzFdKSxGP2IucHVzaChGW1ldKTpiLnB1c2goQiksXy5wdXNoKFApLHErPTE7YnJlYWs7Y2FzZSAyOmZvcihqPTA7ajwyOysrail7Tj1uW1k9SFtqXV07Zm9yKHZhciBHPTA7RzwzOysrRylpZihpc05hTihOW0ddKXx8IWlzRmluaXRlKE5bR10pKWNvbnRpbnVlIHR9Zm9yKGo9MDtqPDI7KytqKXtOPW5bWT1IW2pdXTtwLnB1c2goTlswXSxOWzFdLE5bMl0pLDM9PT0oVz1NP01bWV06Uz9TW1BdOkUpLmxlbmd0aD9kLnB1c2goV1swXSxXWzFdLFdbMl0sMSk6ZC5wdXNoKFdbMF0sV1sxXSxXWzJdLFdbM10pLFg9Qz9DW1ldOkw/WyhMW1ldLUkpLyhELUkpLDBdOno/eltQXTpPP1soT1tQXS1JKS8oRC1JKSwwXTpbKE5bMl0tSSkvKEQtSSksMF0sZy5wdXNoKFhbMF0sWFsxXSksdi5wdXNoKFApfVUrPTE7YnJlYWs7Y2FzZSAzOmZvcihqPTA7ajwzOysrailmb3IoTj1uW1k9SFtqXV0sRz0wO0c8MzsrK0cpaWYoaXNOYU4oTltHXSl8fCFpc0Zpbml0ZShOW0ddKSljb250aW51ZSB0O2ZvcihqPTA7ajwzOysrail7dmFyIFksVyxYLFo7Tj1uW1k9SFsyLWpdXTtpLnB1c2goTlswXSxOWzFdLE5bMl0pLDM9PT0oVz1NP01bWV06Uz9TW1BdOkUpLmxlbmd0aD9hLnB1c2goV1swXSxXWzFdLFdbMl0sMSk6YS5wdXNoKFdbMF0sV1sxXSxXWzJdLFdbM10pLFg9Qz9DW1ldOkw/WyhMW1ldLUkpLyhELUkpLDBdOno/eltQXTpPP1soT1tQXS1JKS8oRC1JKSwwXTpbKE5bMl0tSSkvKEQtSSksMF0sYy5wdXNoKFhbMF0sWFsxXSksWj13P3dbWV06a1tQXSxsLnB1c2goWlswXSxaWzFdLFpbMl0pLGgucHVzaChQKX1WKz0xfX10aGlzLnBvaW50Q291bnQ9cSx0aGlzLmVkZ2VDb3VudD1VLHRoaXMudHJpYW5nbGVDb3VudD1WLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKG0pLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKHkpLHRoaXMucG9pbnRVVnMudXBkYXRlKHgpLHRoaXMucG9pbnRTaXplcy51cGRhdGUoYiksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KF8pKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKHApLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUoZCksdGhpcy5lZGdlVVZzLnVwZGF0ZShnKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheSh2KSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoaSksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUoYyksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShoKSl9fSxULmRyYXdUcmFuc3BhcmVudD1ULmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsaT10LnByb2plY3Rpb258fHcsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDp3LnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3MuaW52ZXJzZU1vZGVsPWMocy5pbnZlcnNlTW9kZWwscy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgZixoPXVbMTVdO2ZvcihvPTA7bzwzOysrbyloKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIHA9dVsxMitvXSxkPTA7ZDwzOysrZClwKz11WzQqZCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bZF07cy5saWdodFBvc2l0aW9uW29dPXAvaH10aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKChmPXRoaXMudHJpU2hhZGVyKS5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKTt0aGlzLmVkZ2VDb3VudD4wJiZ0aGlzLmxpbmVXaWR0aD4wJiYoKGY9dGhpcy5saW5lU2hhZGVyKS5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSk7dGhpcy5wb2ludENvdW50PjAmJigoZj10aGlzLnBvaW50U2hhZGVyKS5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSk7dGhpcy5jb250b3VyRW5hYmxlJiZ0aGlzLmNvbnRvdXJDb3VudD4wJiZ0aGlzLmNvbnRvdXJMaW5lV2lkdGg+MCYmKChmPXRoaXMuY29udG91clNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLmNvbnRvdXJWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsdGhpcy5jb250b3VyQ291bnQpLHRoaXMuY29udG91clZBTy51bmJpbmQoKSl9LFQuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsaT10LnByb2plY3Rpb258fHcsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcyxsPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9Oygocz10aGlzLnBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSksdGhpcy5wb2ludENvdW50PjApJiYoKHM9dGhpcy5wb2ludFBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpKX0sVC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zLGk9bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpaVthXT1uW3JbYV1dO3ZhciBvPWcoaSxbdC5jb29yZFswXSx0aGlzLl9yZXNvbHV0aW9uWzFdLXQuY29vcmRbMV1dLHRoaXMuX21vZGVsLHRoaXMuX3ZpZXcsdGhpcy5fcHJvamVjdGlvbix0aGlzLl9yZXNvbHV0aW9uKTtpZighbylyZXR1cm4gbnVsbDt2YXIgcz1vWzJdLGw9MDtmb3IoYT0wO2E8ci5sZW5ndGg7KythKWwrPXNbYV0qdGhpcy5pbnRlbnNpdHlbclthXV07cmV0dXJue3Bvc2l0aW9uOm9bMV0saW5kZXg6cltvWzBdXSxjZWxsOnIsY2VsbElkOmUsaW50ZW5zaXR5OmwsZGF0YUNvb3JkaW5hdGU6dGhpcy5wb3NpdGlvbnNbcltvWzBdXV19fSxULmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmxpbmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5jb250b3VyU2hhZGVyLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKSwhKHQuZ2V0RXh0ZW5zaW9uKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkpdGhyb3cgbmV3IEVycm9yKCJkZXJpdmF0aXZlcyBub3Qgc3VwcG9ydGVkIik7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTQsZX0odCkscz1mdW5jdGlvbih0KXt2YXIgZT1uKHQsbS52ZXJ0ZXgsbS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGV9KHQpLGw9QSh0KSxjPU0odCksZj1TKHQpLGg9RSh0KSxwPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7cC5nZW5lcmF0ZU1pcG1hcCgpLHAubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIscC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGQ9aSh0KSxnPWkodCkseT1pKHQpLHg9aSh0KSxiPWkodCksXz1hKHQsW3tidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmIsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9XSksdz1pKHQpLFQ9aSh0KSxDPWkodCksTD1pKHQpLHo9YSh0LFt7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpMLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOlQsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpDLHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksTz1pKHQpLEk9aSh0KSxEPWkodCksUD1pKHQpLFI9aSh0KSxGPWEodCxbe2J1ZmZlcjpPLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Uix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpJLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6RCx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOlAsdHlwZTp0LkZMT0FULHNpemU6MX1dKSxCPWkodCksTj1uZXcgayh0LHAscixzLGwsYyxmLGgsZCxiLGcseSx4LF8sdyxMLFQsQyx6LE8sUixJLEQsUCxGLEIsYSh0LFt7YnVmZmVyOkIsdHlwZTp0LkZMT0FULHNpemU6M31dKSk7cmV0dXJuIE4udXBkYXRlKGUpLE59fSx7Ii4vbGliL2Nsb3Nlc3QtcG9pbnQiOjI3NCwiLi9saWIvc2hhZGVycyI6Mjc1LGNvbG9ybWFwOjExNiwiZ2wtYnVmZmVyIjoyMzcsImdsLW1hdDQvaW52ZXJ0IjoyNjEsImdsLW1hdDQvbXVsdGlwbHkiOjI2MywiZ2wtc2hhZGVyIjoyOTcsImdsLXRleHR1cmUyZCI6MzE0LCJnbC12YW8iOjMxOSxuZGFycmF5OjQ0Mixub3JtYWxzOjQ0NSwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXIiOjUwMiwidHlwZWRhcnJheS1wb29sIjo1Mjl9XSwyNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWzAsMCwwLDEsMSwwLDEsMV0pLHM9aShlLGEuYm94VmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3Qm94PShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLnBsb3Qsbz10aGlzLnNoYWRlcixjPWEuZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLG8udW5pZm9ybXMubG89cyxvLnVuaWZvcm1zLmhpPWwsby51bmlmb3Jtcy5jb2xvcj1pLGMuZHJhd0FycmF5cyhjLlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI4MCwiZ2wtYnVmZmVyIjoyMzcsImdsLXNoYWRlciI6Mjk3fV0sMjc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxvLmdyaWRWZXJ0LG8uZ3JpZEZyYWcpLGw9aShlLG8udGlja1ZlcnQsby5ncmlkRnJhZyk7cmV0dXJuIG5ldyBzKHQscixhLGwpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxvPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja1NoYWRlcj1uLHRoaXMudGlja3M9W1tdLFtdXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQtZX12YXIgYyx1LGYsaCxwLGQ9cy5wcm90b3R5cGU7ZC5kcmF3PShjPVswLDBdLHU9WzAsMF0sZj1bMCwwXSxmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBsb3QsZT10aGlzLnZibyxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrcyxpPXQuZ2wsYT10Ll90aWNrQm91bmRzLG89dC5kYXRhQm94LHM9dC52aWV3Qm94LGw9dC5ncmlkTGluZVdpZHRoLGg9dC5ncmlkTGluZUNvbG9yLHA9dC5ncmlkTGluZUVuYWJsZSxkPXQucGl4ZWxSYXRpbyxnPTA7ZzwyOysrZyl7dmFyIHY9YVtnXSxtPWFbZysyXS12LHk9LjUqKG9bZysyXStvW2ddKSx4PW9bZysyXS1vW2ddO3VbZ109MiptL3gsY1tnXT0yKih2LXkpL3h9ci5iaW5kKCksZS5iaW5kKCksci5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCksci51bmlmb3Jtcy5kYXRhU2hpZnQ9YyxyLnVuaWZvcm1zLmRhdGFTY2FsZT11O3ZhciBiPTA7Zm9yKGc9MDtnPDI7KytnKXtmWzBdPWZbMV09MCxmW2ddPTEsci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMubGluZVdpZHRoPWxbZ10vKHNbZysyXS1zW2ddKSpkLHIudW5pZm9ybXMuY29sb3I9aFtnXTt2YXIgXz02Km5bZ10ubGVuZ3RoO3BbZ10mJl8mJmkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUyxiLF8pLGIrPV99fSksZC5kcmF3VGlja01hcmtzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVsxLDBdLG49WzAsMV0saT1bMCwwXSxvPVswLDBdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcz10aGlzLnBsb3QsYz10aGlzLnZibyx1PXRoaXMudGlja1NoYWRlcixmPXRoaXMudGlja3MsaD1zLmdsLHA9cy5fdGlja0JvdW5kcyxkPXMuZGF0YUJveCxnPXMudmlld0JveCx2PXMucGl4ZWxSYXRpbyxtPXMuc2NyZWVuQm94LHk9bVsyXS1tWzBdLHg9bVszXS1tWzFdLGI9Z1syXS1nWzBdLF89Z1szXS1nWzFdLHc9MDt3PDI7Kyt3KXt2YXIgaz1wW3ddLFQ9cFt3KzJdLWssQT0uNSooZFt3KzJdK2Rbd10pLE09ZFt3KzJdLWRbd107ZVt3XT0yKlQvTSx0W3ddPTIqKGstQSkvTX1lWzBdKj1iL3ksdFswXSo9Yi95LGVbMV0qPV8veCx0WzFdKj1fL3gsdS5iaW5kKCksYy5iaW5kKCksdS5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCk7dmFyIFM9dS51bmlmb3JtcztTLmRhdGFTaGlmdD10LFMuZGF0YVNjYWxlPWU7dmFyIEU9cy50aWNrTWFya0xlbmd0aCxDPXMudGlja01hcmtXaWR0aCxMPXMudGlja01hcmtDb2xvcix6PTYqZlswXS5sZW5ndGgsTz1NYXRoLm1pbihhLmdlKGZbMF0sKGRbMF0tcFswXSkvKHBbMl0tcFswXSksbCksZlswXS5sZW5ndGgpLEk9TWF0aC5taW4oYS5ndChmWzBdLChkWzJdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGZbMF0ubGVuZ3RoKSxEPTArNipPLFA9NipNYXRoLm1heCgwLEktTyksUj1NYXRoLm1pbihhLmdlKGZbMV0sKGRbMV0tcFsxXSkvKHBbM10tcFsxXSksbCksZlsxXS5sZW5ndGgpLEY9TWF0aC5taW4oYS5ndChmWzFdLChkWzNdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGZbMV0ubGVuZ3RoKSxCPXorNipSLE49NipNYXRoLm1heCgwLEYtUik7aVswXT0yKihnWzBdLUVbMV0pL3ktMSxpWzFdPShnWzNdK2dbMV0pL3gtMSxvWzBdPUVbMV0qdi95LG9bMV09Q1sxXSp2L3gsTiYmKFMuY29sb3I9TFsxXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9bixTLnNjcmVlbk9mZnNldD1pLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyxCLE4pKSxpWzBdPShnWzJdK2dbMF0pL3ktMSxpWzFdPTIqKGdbMV0tRVswXSkveC0xLG9bMF09Q1swXSp2L3ksb1sxXT1FWzBdKnYveCxQJiYoUy5jb2xvcj1MWzBdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1yLFMuc2NyZWVuT2Zmc2V0PWksaC5kcmF3QXJyYXlzKGguVFJJQU5HTEVTLEQsUCkpLGlbMF09MiooZ1syXStFWzNdKS95LTEsaVsxXT0oZ1szXStnWzFdKS94LTEsb1swXT1FWzNdKnYveSxvWzFdPUNbM10qdi94LE4mJihTLmNvbG9yPUxbM10sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9aSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsQixOKSksaVswXT0oZ1syXStnWzBdKS95LTEsaVsxXT0yKihnWzNdK0VbMl0pL3gtMSxvWzBdPUNbMl0qdi95LG9bMV09RVsyXSp2L3gsUCYmKFMuY29sb3I9TFsyXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1pLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyxELFApKX19KCksZC51cGRhdGU9KGg9WzEsMSwtMSwtMSwxLC0xXSxwPVsxLC0xLDEsMSwtMSwtMV0sZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQudGlja3Mscj10LmJvdW5kcyxuPW5ldyBGbG9hdDMyQXJyYXkoMTgqKGVbMF0ubGVuZ3RoK2VbMV0ubGVuZ3RoKSksaT0odGhpcy5wbG90Lnplcm9MaW5lRW5hYmxlLDApLGE9W1tdLFtdXSxvPTA7bzwyOysrbylmb3IodmFyIHM9YVtvXSxsPWVbb10sYz1yW29dLHU9cltvKzJdLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIGQ9KGxbZl0ueC1jKS8odS1jKTtzLnB1c2goZCk7Zm9yKHZhciBnPTA7Zzw2OysrZyluW2krK109ZCxuW2krK109aFtnXSxuW2krK109cFtnXX10aGlzLnRpY2tzPWEsdGhpcy52Ym8udXBkYXRlKG4pfSksZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRpY2tTaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI4MCwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjI4MiwiZ2wtYnVmZmVyIjoyMzcsImdsLXNoYWRlciI6Mjk3fV0sMjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFstMSwtMSwtMSwxLDEsLTEsMSwxXSkscz1pKGUsYS5saW5lVmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3TGluZT0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLnBsb3QsYz10aGlzLnNoYWRlcix1PW8uZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLGMudW5pZm9ybXMuc3RhcnQ9cyxjLnVuaWZvcm1zLmVuZD1sLGMudW5pZm9ybXMud2lkdGg9aSpvLnBpeGVsUmF0aW8sYy51bmlmb3Jtcy5jb2xvcj1hLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI4MCwiZ2wtYnVmZmVyIjoyMzcsImdsLXNoYWRlciI6Mjk3fV0sMjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IueHl6ICogY29sb3IudywgY29sb3Iudyk7XG59XG4iXSk7ZS5leHBvcnRzPXtsaW5lVmVydDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcblxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcbnVuaWZvcm0gdmVjMiBzdGFydCwgZW5kO1xudW5pZm9ybSBmbG9hdCB3aWR0aDtcblxudmVjMiBwZXJwKHZlYzIgdikge1xuICByZXR1cm4gdmVjMih2LnksIC12LngpO1xufVxuXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgZGVsdGEgPSBub3JtYWxpemUocGVycChzdGFydCAtIGVuZCkpO1xuICB2ZWMyIG9mZnNldCA9IG1peChzdGFydCwgZW5kLCAwLjUgKiAoY29vcmQueSsxLjApKTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihvZmZzZXQgKyAwLjUgKiB3aWR0aCAqIGRlbHRhICogY29vcmQueCksIDAsIDEpO1xufVxuIl0pLGxpbmVGcmFnOmksdGV4dFZlcnQ6bihbIiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyB0ZXh0Q29vcmRpbmF0ZTtcblxudW5pZm9ybSB2ZWMyIGRhdGFTY2FsZSwgZGF0YVNoaWZ0LCBkYXRhQXhpcywgc2NyZWVuT2Zmc2V0LCB0ZXh0U2NhbGU7XG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRhdGFPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUuejtcbiAgdmVjMiBnbHlwaE9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS54eTtcbiAgbWF0MiBnbHlwaE1hdHJpeCA9IG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSwgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xuICB2ZWMyIHNjcmVlbkNvb3JkaW5hdGUgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhT2Zmc2V0ICsgZGF0YVNoaWZ0KSArXG4gICAgZ2x5cGhNYXRyaXggKiBnbHlwaE9mZnNldCAqIHRleHRTY2FsZSArIHNjcmVlbk9mZnNldDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbkNvb3JkaW5hdGUsIDAsIDEpO1xufVxuIl0pLHRleHRGcmFnOmksZ3JpZFZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb3MgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhQ29vcmQueCArIGRhdGFTaGlmdCk7XG4gIHBvcyArPSAxMC4wICogZGF0YUNvb3JkLnkgKiB2ZWMyKGRhdGFBeGlzLnksIC1kYXRhQXhpcy54KSArIGRhdGFDb29yZC56ICogbGluZVdpZHRoO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLCAwLCAxKTtcbn1cbiJdKSxncmlkRnJhZzppLGJveFZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XG5cbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XG51bmlmb3JtIHZlYzIgbG8sIGhpO1xuXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4obWl4KGxvLCBoaSwgY29vcmQpKSwgMCwgMSk7XG59XG4iXSksdGlja1ZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlLCBzY3JlZW5PZmZzZXQsIHRpY2tTY2FsZTtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyArIHRpY2tTY2FsZSpkYXRhQ29vcmQueXogKyBzY3JlZW5PZmZzZXQsIDAsIDEpO1xufVxuIl0pfX0se2dsc2xpZnk6NDAxfV0sMjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxzLnRleHRWZXJ0LHMudGV4dEZyYWcpO3JldHVybiBuZXcgbCh0LHIsYSl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtc2hhZGVyIiksYT10KCJ0ZXh0LWNhY2hlIiksbz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHM9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbCh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja09mZnNldD1bW10sW11dLHRoaXMudGlja1g9W1tdLFtdXSx0aGlzLmxhYmVsT2Zmc2V0PVswLDBdLHRoaXMubGFiZWxDb3VudD1bMCwwXX12YXIgYyx1LGYsaCxwLGQsZz1sLnByb3RvdHlwZTtnLmRyYXdUaWNrcz0oYz1bMCwwXSx1PVswLDBdLGY9WzAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wbG90LHI9dGhpcy5zaGFkZXIsbj10aGlzLnRpY2tYW3RdLGk9dGhpcy50aWNrT2Zmc2V0W3RdLGE9ZS5nbCxzPWUudmlld0JveCxsPWUuZGF0YUJveCxoPWUuc2NyZWVuQm94LHA9ZS5waXhlbFJhdGlvLGQ9ZS50aWNrRW5hYmxlLGc9ZS50aWNrUGFkLHY9ZS50aWNrQ29sb3IsbT1lLnRpY2tBbmdsZSx5PWUubGFiZWxFbmFibGUseD1lLmxhYmVsUGFkLGI9ZS5sYWJlbENvbG9yLF89ZS5sYWJlbEFuZ2xlLHc9dGhpcy5sYWJlbE9mZnNldFt0XSxrPXRoaXMubGFiZWxDb3VudFt0XSxUPW8ubHQobixsW3RdKSxBPW8ubGUobixsW3QrMl0pO2NbMF09Y1sxXT0wLGNbdF09MSx1W3RdPShzWzIrdF0rc1t0XSkvKGhbMit0XS1oW3RdKS0xO3ZhciBNPTIvaFsyKygxXnQpXS1oWzFedF07dVsxXnRdPU0qc1sxXnRdLTEsZFt0XSYmKHVbMV50XS09TSpwKmdbdF0sVDxBJiZpW0FdPmlbVF0mJihyLnVuaWZvcm1zLmRhdGFBeGlzPWMsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPXZbdF0sci51bmlmb3Jtcy5hbmdsZT1tW3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW1RdLGlbQV0taVtUXSkpKSx5W3RdJiZrJiYodVsxXnRdLT1NKnAqeFt0XSxyLnVuaWZvcm1zLmRhdGFBeGlzPWYsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdF0sci51bmlmb3Jtcy5hbmdsZT1fW3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyx3LGspKSx1WzFedF09TSpzWzIrKDFedCldLTEsZFt0KzJdJiYodVsxXnRdKz1NKnAqZ1t0KzJdLFQ8QSYmaVtBXT5pW1RdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj12W3QrMl0sci51bmlmb3Jtcy5hbmdsZT1tW3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLGlbVF0saVtBXS1pW1RdKSkpLHlbdCsyXSYmayYmKHVbMV50XSs9TSpwKnhbdCsyXSxyLnVuaWZvcm1zLmRhdGFBeGlzPWYsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdCsyXSxyLnVuaWZvcm1zLmFuZ2xlPV9bdCsyXSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxrKSl9KSxnLmRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5wbG90LG49dGhpcy5zaGFkZXIsaT1yLmdsLGE9ci5zY3JlZW5Cb3gsbz1yLnRpdGxlQ2VudGVyLHM9ci50aXRsZUFuZ2xlLGw9ci50aXRsZUNvbG9yLGM9ci5waXhlbFJhdGlvO2lmKHRoaXMudGl0bGVDb3VudCl7Zm9yKHZhciB1PTA7dTwyOysrdSllW3VdPTIqKG9bdV0qYy1hW3VdKS8oYVsyK3VdLWFbdV0pLTE7bi5iaW5kKCksbi51bmlmb3Jtcy5kYXRhQXhpcz10LG4udW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsbi51bmlmb3Jtcy5hbmdsZT1zLG4udW5pZm9ybXMuY29sb3I9bCxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsdGhpcy50aXRsZU9mZnNldCx0aGlzLnRpdGxlQ291bnQpfX19KCksZy5iaW5kPShoPVswLDBdLHA9WzAsMF0sZD1bMCwwXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2hhZGVyLHI9dC5fdGlja0JvdW5kcyxuPXQuZGF0YUJveCxpPXQuc2NyZWVuQm94LGE9dC52aWV3Qm94O2UuYmluZCgpO2Zvcih2YXIgbz0wO288MjsrK28pe3ZhciBzPXJbb10sbD1yW28rMl0tcyxjPS41KihuW28rMl0rbltvXSksdT1uW28rMl0tbltvXSxmPWFbb10sZz1hW28rMl0tZix2PWlbb10sbT1pW28rMl0tdjtwW29dPTIqbC91KmcvbSxoW29dPTIqKHMtYykvdSpnL219ZFsxXT0yKnQucGl4ZWxSYXRpby8oaVszXS1pWzFdKSxkWzBdPWRbMV0qKGlbM10taVsxXSkvKGlbMl0taVswXSksZS51bmlmb3Jtcy5kYXRhU2NhbGU9cCxlLnVuaWZvcm1zLmRhdGFTaGlmdD1oLGUudW5pZm9ybXMudGV4dFNjYWxlPWQsdGhpcy52Ym8uYmluZCgpLGUuYXR0cmlidXRlcy50ZXh0Q29vcmRpbmF0ZS5wb2ludGVyKCl9KSxnLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxvLHM9W10sbD10LnRpY2tzLGM9dC5ib3VuZHM7Zm9yKG89MDtvPDI7KytvKXt2YXIgdT1bTWF0aC5mbG9vcihzLmxlbmd0aC8zKV0sZj1bLTEvMF0saD1sW29dO2ZvcihlPTA7ZTxoLmxlbmd0aDsrK2Upe3ZhciBwPWhbZV0sZD1wLngsZz1wLnRleHQsdj1wLmZvbnR8fCJzYW5zLXNlcmlmIjtpPXAuZm9udFNpemV8fDEyO2Zvcih2YXIgbT0xLyhjW28rMl0tY1tvXSkseT1jW29dLHg9Zy5zcGxpdCgiXG4iKSxiPTA7Yjx4Lmxlbmd0aDtiKyspZm9yKG49YSh2LHhbYl0pLmRhdGEscj0wO3I8bi5sZW5ndGg7cis9MilzLnB1c2gobltyXSppLC1uW3IrMV0qaS1iKmkqMS4yLChkLXkpKm0pO3UucHVzaChNYXRoLmZsb29yKHMubGVuZ3RoLzMpKSxmLnB1c2goZCl9dGhpcy50aWNrT2Zmc2V0W29dPXUsdGhpcy50aWNrWFtvXT1mfWZvcihvPTA7bzwyOysrbyl7Zm9yKHRoaXMubGFiZWxPZmZzZXRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWEodC5sYWJlbEZvbnRbb10sdC5sYWJlbHNbb10se3RleHRBbGlnbjoiY2VudGVyIn0pLmRhdGEsaT10LmxhYmVsU2l6ZVtvXSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMubGFiZWxDb3VudFtvXT1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMubGFiZWxPZmZzZXRbb119Zm9yKHRoaXMudGl0bGVPZmZzZXQ9TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWEodC50aXRsZUZvbnQsdC50aXRsZSkuZGF0YSxpPXQudGl0bGVTaXplLGU9MDtlPG4ubGVuZ3RoO2UrPTIpcy5wdXNoKG5bZV0qaSwtbltlKzFdKmksMCk7dGhpcy50aXRsZUNvdW50PU1hdGguZmxvb3Iocy5sZW5ndGgvMyktdGhpcy50aXRsZU9mZnNldCx0aGlzLnZiby51cGRhdGUocyl9LGcuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjgwLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MjgyLCJnbC1idWZmZXIiOjIzNywiZ2wtc2hhZGVyIjoyOTcsInRleHQtY2FjaGUiOjUyMH1dLDI4MjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDF9XSwyODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsW2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0pLGM9bmV3IGwoZSxyKTtyZXR1cm4gYy5ncmlkPWkoYyksYy50ZXh0PWEoYyksYy5saW5lPW8oYyksYy5ib3g9cyhjKSxjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KCJnbC1zZWxlY3Qtc3RhdGljIiksaT10KCIuL2xpYi9ncmlkIiksYT10KCIuL2xpYi90ZXh0Iiksbz10KCIuL2xpYi9saW5lIikscz10KCIuL2xpYi9ib3giKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5nbD10LHRoaXMucGlja0J1ZmZlcj1lLHRoaXMuc2NyZWVuQm94PVswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx0aGlzLnZpZXdCb3g9WzAsMCwwLDBdLHRoaXMuZGF0YUJveD1bLTEwLC0xMCwxMCwxMF0sdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGVDZW50ZXI9WzAsMF0sdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVs0LDRdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzIsMiwyLDJdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZD1udWxsLHRoaXMudGV4dD1udWxsLHRoaXMubGluZT1udWxsLHRoaXMuYm94PW51bGwsdGhpcy5vYmplY3RzPVtdLHRoaXMub3ZlcmxheXM9W10sdGhpcy5fdGlja0JvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuc3RhdGljPSExLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH12YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC54LWUueH1jLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sYy5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxjLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7aWYodGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHRoaXMuYm9yZGVyQ29sb3Ipe3Quc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIGM9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKX10LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciB1PXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcih1WzBdKnVbM10sdVsxXSp1WzNdLHVbMl0qdVszXSx1WzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGY9dGhpcy56ZXJvTGluZUVuYWJsZSxoPXRoaXMuemVyb0xpbmVDb2xvcixwPXRoaXMuemVyb0xpbmVXaWR0aDtpZihmWzBdfHxmWzFdKXtvLmJpbmQoKTtmb3IodmFyIGQ9MDtkPDI7KytkKWlmKGZbZF0mJm5bZF08PTAmJm5bZCsyXT49MCl7dmFyIGc9ZVtkXS1uW2RdKihlW2QrMl0tZVtkXSkvKG5bZCsyXS1uW2RdKTswPT09ZD9vLmRyYXdMaW5lKGcsZVsxXSxnLGVbM10scFtkXSxoW2RdKTpvLmRyYXdMaW5lKGVbMF0sZyxlWzJdLGcscFtkXSxoW2RdKX19Zm9yKGQ9MDtkPGwubGVuZ3RoOysrZClsW2RdLmRyYXcoKTt0LnZpZXdwb3J0KGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHRoaXMuZ3JpZC5kcmF3VGlja01hcmtzKCksby5iaW5kKCk7dmFyIHY9dGhpcy5ib3JkZXJMaW5lRW5hYmxlLG09dGhpcy5ib3JkZXJMaW5lV2lkdGgseT10aGlzLmJvcmRlckxpbmVDb2xvcjtmb3IodlsxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqbVsxXSppLHJbMF0sclszXSsuNSptWzNdKmksbVsxXSx5WzFdKSx2WzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqbVswXSppLHJbMV0sclsyXSsuNSptWzJdKmksclsxXSxtWzBdLHlbMF0pLHZbM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41Km1bMV0qaSxyWzJdLHJbM10rLjUqbVszXSppLG1bM10seVszXSksdlsyXSYmby5kcmF3TGluZShyWzBdLS41Km1bMF0qaSxyWzNdLHJbMl0rLjUqbVsyXSppLHJbM10sbVsyXSx5WzJdKSxzLmJpbmQoKSxkPTA7ZDwyOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO3ZhciB4PXRoaXMub3ZlcmxheXM7Zm9yKGQ9MDtkPHgubGVuZ3RoOysrZCl4W2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fSxjLmRyYXdQaWNrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbDt0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8saT10aGlzLnZpZXdCb3gsYT0wfE1hdGgucm91bmQoKHQtaVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1pWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGEsbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgZj1jW3VdLnBpY2soYSxvLGwpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9fSxjLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sYy5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGMuc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsaT0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9pLDEwLDEwL2ldKSx0aGlzLmJvcmRlckNvbG9yPSExIT09dC5ib3JkZXJDb2xvciYmKHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9dSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPXUodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj11KHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0JiYhdC50aXRsZUVuYWJsZSksdGhpcy50aXRsZUFuZ2xlPXQudGl0bGVBbmdsZXx8MCx0aGlzLnRpdGxlQ29sb3I9KHQudGl0bGVDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMubGFiZWxQYWQ9KHQubGFiZWxQYWR8fFsxNSwxNSwxNSwxNV0pLnNsaWNlKCksdGhpcy5sYWJlbEFuZ2xlPSh0LmxhYmVsQW5nbGV8fFswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSkuc2xpY2UoKSx0aGlzLmxhYmVsRW5hYmxlPSh0LmxhYmVsRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMubGFiZWxDb2xvcj11KHQubGFiZWxDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja1BhZD0odC50aWNrUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMudGlja0FuZ2xlPSh0LnRpY2tBbmdsZXx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja0VuYWJsZT0odC50aWNrRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMudGlja0NvbG9yPXUodC50aWNrQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLmJvcmRlckxpbmVFbmFibGU9KHQuYm9yZGVyTGluZUVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVXaWR0aD0odC5ib3JkZXJMaW5lV2lkdGh8fFsyLDIsMiwyXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVDb2xvcj11KHQuYm9yZGVyTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSk7dmFyIGE9dC50aWNrc3x8W1tdLFtdXSxvPXRoaXMuX3RpY2tCb3VuZHM7b1swXT1vWzFdPTEvMCxvWzJdPW9bM109LTEvMDtmb3IodmFyIHM9MDtzPDI7KytzKXt2YXIgbD1hW3NdLnNsaWNlKDApOzAhPT1sLmxlbmd0aCYmKGwuc29ydChmKSxvW3NdPU1hdGgubWluKG9bc10sbFswXS54KSxvW3MrMl09TWF0aC5tYXgob1tzKzJdLGxbbC5sZW5ndGgtMV0ueCkpfXRoaXMuZ3JpZC51cGRhdGUoe2JvdW5kczpvLHRpY2tzOmF9KSx0aGlzLnRleHQudXBkYXRlKHtib3VuZHM6byx0aWNrczphLGxhYmVsczp0LmxhYmVsc3x8WyJ4IiwieSJdLGxhYmVsU2l6ZTp0LmxhYmVsU2l6ZXx8WzEyLDEyXSxsYWJlbEZvbnQ6dC5sYWJlbEZvbnR8fFsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aXRsZTp0LnRpdGxlfHwiIix0aXRsZVNpemU6dC50aXRsZVNpemV8fDE4LHRpdGxlRm9udDp0LnRpdGxlRm9udHx8InNhbnMtc2VyaWYifSksdGhpcy5zdGF0aWM9ISF0LnN0YXRpYyx0aGlzLnNldERpcnR5KCl9LGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuYm94LmRpc3Bvc2UoKSx0aGlzLmdyaWQuZGlzcG9zZSgpLHRoaXMudGV4dC5kaXNwb3NlKCksdGhpcy5saW5lLmRpc3Bvc2UoKTtmb3IodmFyIHQ9dGhpcy5vYmplY3RzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub2JqZWN0c1t0XS5kaXNwb3NlKCk7dGhpcy5vYmplY3RzLmxlbmd0aD0wO2Zvcih0PXRoaXMub3ZlcmxheXMubGVuZ3RoLTE7dD49MDstLXQpdGhpcy5vdmVybGF5c1t0XS5kaXNwb3NlKCk7dGhpcy5vdmVybGF5cy5sZW5ndGg9MCx0aGlzLmdsPW51bGx9LGMuYWRkT2JqZWN0PWZ1bmN0aW9uKHQpe3RoaXMub2JqZWN0cy5pbmRleE9mKHQpPDAmJih0aGlzLm9iamVjdHMucHVzaCh0KSx0aGlzLnNldERpcnR5KCkpfSxjLnJlbW92ZU9iamVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5vYmplY3RzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT09dCl7ZS5zcGxpY2UociwxKSx0aGlzLnNldERpcnR5KCk7YnJlYWt9fSxjLmFkZE92ZXJsYXk9ZnVuY3Rpb24odCl7dGhpcy5vdmVybGF5cy5pbmRleE9mKHQpPDAmJih0aGlzLm92ZXJsYXlzLnB1c2godCksdGhpcy5zZXRPdmVybGF5RGlydHkoKSl9LGMucmVtb3ZlT3ZlcmxheT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5vdmVybGF5cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXRPdmVybGF5RGlydHkoKTticmVha319fSx7Ii4vbGliL2JveCI6Mjc3LCIuL2xpYi9ncmlkIjoyNzgsIi4vbGliL2xpbmUiOjI3OSwiLi9saWIvdGV4dCI6MjgxLCJnbC1zZWxlY3Qtc3RhdGljIjoyOTZ9XSwyODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dD10fHxkb2N1bWVudC5ib2R5LGU9ZXx8e307dmFyIHI9Wy4wMSwxLzBdOyJkaXN0YW5jZUxpbWl0cyJpbiBlJiYoclswXT1lLmRpc3RhbmNlTGltaXRzWzBdLHJbMV09ZS5kaXN0YW5jZUxpbWl0c1sxXSk7Inpvb21NaW4iaW4gZSYmKHJbMF09ZS56b29tTWluKTsiem9vbU1heCJpbiBlJiYoclsxXT1lLnpvb21NYXgpO3ZhciBjPWkoe2NlbnRlcjplLmNlbnRlcnx8WzAsMCwwXSx1cDplLnVwfHxbMCwxLDBdLGV5ZTplLmV5ZXx8WzAsMCwxMF0sbW9kZTplLm1vZGV8fCJvcmJpdCIsZGlzdGFuY2VMaW1pdHM6cn0pLHU9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLGY9MCxoPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxkPXtrZXlCaW5kaW5nTW9kZToicm90YXRlIixlbmFibGVXaGVlbDohMCx2aWV3OmMsZWxlbWVudDp0LGRlbGF5OmUuZGVsYXl8fDE2LHJvdGF0ZVNwZWVkOmUucm90YXRlU3BlZWR8fDEsem9vbVNwZWVkOmUuem9vbVNwZWVkfHwxLHRyYW5zbGF0ZVNwZWVkOmUudHJhbnNsYXRlU3BlZWR8fDEsZmxpcFg6ISFlLmZsaXBYLGZsaXBZOiEhZS5mbGlwWSxtb2RlczpjLm1vZGVzLF9vcnRobzplLl9vcnRob3x8ZS5wcm9qZWN0aW9uJiYib3J0aG9ncmFwaGljIj09PWUucHJvamVjdGlvbi50eXBlfHwhMSx0aWNrOmZ1bmN0aW9uKCl7dmFyIGU9bigpLHI9dGhpcy5kZWxheSxpPWUtMipyO2MuaWRsZShlLXIpLGMucmVjYWxjTWF0cml4KGkpLGMuZmx1c2goZS0oMTAwKzIqcikpO2Zvcih2YXIgYT0hMCxvPWMuY29tcHV0ZWRNYXRyaXgscz0wO3M8MTY7KytzKWE9YSYmdVtzXT09PW9bc10sdVtzXT1vW3NdO3ZhciBsPXQuY2xpZW50V2lkdGg9PT1oJiZ0LmNsaWVudEhlaWdodD09PXA7cmV0dXJuIGg9dC5jbGllbnRXaWR0aCxwPXQuY2xpZW50SGVpZ2h0LGE/IWw6KGY9TWF0aC5leHAoYy5jb21wdXRlZFJhZGl1c1swXSksITApfSxsb29rQXQ6ZnVuY3Rpb24odCxlLHIpe2MubG9va0F0KGMubGFzdFQoKSx0LGUscil9LHJvdGF0ZTpmdW5jdGlvbih0LGUscil7Yy5yb3RhdGUoYy5sYXN0VCgpLHQsZSxyKX0scGFuOmZ1bmN0aW9uKHQsZSxyKXtjLnBhbihjLmxhc3RUKCksdCxlLHIpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlLHIpe2MudHJhbnNsYXRlKGMubGFzdFQoKSx0LGUscil9fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZCx7bWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZE1hdHJpeH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldE1hdHJpeChjLmxhc3RUKCksdCksYy5jb21wdXRlZE1hdHJpeH0sZW51bWVyYWJsZTohMH0sbW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0TW9kZSgpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9Yy5jb21wdXRlZFVwLnNsaWNlKCkscj1jLmNvbXB1dGVkRXllLnNsaWNlKCksaT1jLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCk7aWYoYy5zZXRNb2RlKHQpLCJ0dXJudGFibGUiPT09dCl7dmFyIGE9bigpO2MuX2FjdGl2ZS5sb29rQXQoYSxyLGksZSksYy5fYWN0aXZlLmxvb2tBdChhKzUwMCxyLGksWzAsMCwxXSksYy5fYWN0aXZlLmZsdXNoKGEpfXJldHVybiBjLmdldE1vZGUoKX0sZW51bWVyYWJsZTohMH0sY2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZENlbnRlcn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCx0KSxjLmNvbXB1dGVkQ2VudGVyfSxlbnVtZXJhYmxlOiEwfSxleWU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkRXllfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMubG9va0F0KGMubGFzdFQoKSx0KSxjLmNvbXB1dGVkRXllfSxlbnVtZXJhYmxlOiEwfSx1cDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRVcH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCxudWxsLHQpLGMuY29tcHV0ZWRVcH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBmfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0RGlzdGFuY2UoYy5sYXN0VCgpLHQpLHR9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlTGltaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXREaXN0YW5jZUxpbWl0cyhyKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlTGltaXRzKHQpLHR9LGVudW1lcmFibGU6ITB9fSksdC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMX0pLGQuX2xhc3RYPS0xLGQuX2xhc3RZPS0xLGQuX2xhc3RNb2RzPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsaSxhKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9InJvdGF0ZSI9PT1vLGw9InBhbiI9PT1vLHU9Inpvb20iPT09byxoPSEhYS5jb250cm9sLHA9ISFhLmFsdCxnPSEhYS5zaGlmdCx2PSEhKDEmZSksbT0hISgyJmUpLHk9ISEoNCZlKSx4PTEvdC5jbGllbnRIZWlnaHQsYj14KihyLWQuX2xhc3RYKSxfPXgqKGktZC5fbGFzdFkpLHc9ZC5mbGlwWD8xOi0xLGs9ZC5mbGlwWT8xOi0xLFQ9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLEE9bigpO2lmKC0xIT09ZC5fbGFzdFgmJi0xIT09ZC5fbGFzdFkmJigocyYmdiYmIWgmJiFwJiYhZ3x8diYmIWgmJiFwJiZnKSYmYy5yb3RhdGUoQSx3KlQqYiwtaypUKl8sMCksKGwmJnYmJiFoJiYhcCYmIWd8fG18fHYmJmgmJiFwJiYhZykmJmMucGFuKEEsLWQudHJhbnNsYXRlU3BlZWQqYipmLGQudHJhbnNsYXRlU3BlZWQqXypmLDApLHUmJnYmJiFoJiYhcCYmIWd8fHl8fHYmJiFoJiZwJiYhZykpe3ZhciBNPS1kLnpvb21TcGVlZCpfL3dpbmRvdy5pbm5lckhlaWdodCooQS1jLmxhc3RUKCkpKjEwMDtjLnBhbihBLDAsMCxmKihNYXRoLmV4cChNKS0xKSl9cmV0dXJuIGQuX2xhc3RYPXIsZC5fbGFzdFk9aSxkLl9sYXN0TW9kcz1hLCEwfX1kLm1vdXNlTGlzdGVuZXI9YSh0LGUpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24ocil7dmFyIG49cyhyLmNoYW5nZWRUb3VjaGVzWzBdLHQpO2UoMCxuWzBdLG5bMV0sZC5fbGFzdE1vZHMpLGUoMSxuWzBdLG5bMV0sZC5fbGFzdE1vZHMpLHIucHJldmVudERlZmF1bHQoKX0sISFsJiZ7cGFzc2l2ZTohMX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbihyKXt2YXIgbj1zKHIuY2hhbmdlZFRvdWNoZXNbMF0sdCk7ZSgxLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksci5wcmV2ZW50RGVmYXVsdCgpfSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsZnVuY3Rpb24odCl7ZSgwLGQuX2xhc3RYLGQuX2xhc3RZLGQuX2xhc3RNb2RzKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhbCYme3Bhc3NpdmU6ITF9KSxkLndoZWVsTGlzdGVuZXI9byh0LGZ1bmN0aW9uKHQsZSl7aWYoITEhPT1kLmtleUJpbmRpbmdNb2RlJiZkLmVuYWJsZVdoZWVsKXt2YXIgcj1kLmZsaXBYPzE6LTEsaT1kLmZsaXBZPzE6LTEsYT1uKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpYy5yb3RhdGUoYSwwLDAsLXQqcipNYXRoLlBJKmQucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2UgaWYoIWQuX29ydGhvKXt2YXIgbz0tZC56b29tU3BlZWQqaSplL3dpbmRvdy5pbm5lckhlaWdodCooYS1jLmxhc3RUKCkpLzIwO2MucGFuKGEsMCwwLGYqKE1hdGguZXhwKG8pLTEpKX19fSwhMCl9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxkfTt2YXIgbj10KCJyaWdodC1ub3ciKSxpPXQoIjNkLXZpZXciKSxhPXQoIm1vdXNlLWNoYW5nZSIpLG89dCgibW91c2Utd2hlZWwiKSxzPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGw9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIil9LHsiM2QtdmlldyI6NDcsImhhcy1wYXNzaXZlLWV2ZW50cyI6NDAzLCJtb3VzZS1jaGFuZ2UiOjQyNywibW91c2UtZXZlbnQtb2Zmc2V0Ijo0MjgsIm1vdXNlLXdoZWVsIjo0MzAsInJpZ2h0LW5vdyI6NDg4fV0sMjg1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdXY7XG52b2lkIG1haW4oKSB7XG4gIHV2ID0gcG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMCwgMSk7XG59Il0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjI5NyxnbHNsaWZ5OjQwMX1dLDI4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbWVyYS5qcyIpLGk9dCgiZ2wtYXhlczNkIiksYT10KCJnbC1heGVzM2QvcHJvcGVydGllcyIpLG89dCgiZ2wtc3Bpa2VzM2QiKSxzPXQoImdsLXNlbGVjdC1zdGF0aWMiKSxsPXQoImdsLWZibyIpLGM9dCgiYS1iaWctdHJpYW5nbGUiKSx1PXQoIm1vdXNlLWNoYW5nZSIpLGY9dCgibW91c2Utd2hlZWwiKSxoPXQoImdsLW1hdDQvcGVyc3BlY3RpdmUiKSxwPXQoImdsLW1hdDQvb3J0aG8iKSxkPXQoIi4vbGliL3NoYWRlciIpLGc9dCgiaXMtbW9iaWxlIikoe3RhYmxldDohMH0pO2Z1bmN0aW9uIHYoKXt0aGlzLm1vdXNlPVstMSwtMV0sdGhpcy5zY3JlZW49bnVsbCx0aGlzLmRpc3RhbmNlPTEvMCx0aGlzLmluZGV4PW51bGwsdGhpcy5kYXRhQ29vcmRpbmF0ZT1udWxsLHRoaXMuZGF0YVBvc2l0aW9uPW51bGwsdGhpcy5vYmplY3Q9bnVsbCx0aGlzLmRhdGE9bnVsbH1mdW5jdGlvbiBtKHQpe3ZhciBlPU1hdGgucm91bmQoTWF0aC5sb2coTWF0aC5hYnModCkpL01hdGgubG9nKDEwKSk7aWYoZTwwKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLC1lKSk7cmV0dXJuIE1hdGguY2VpbCh0KnIpL3J9aWYoZT4wKXtyPU1hdGgucm91bmQoTWF0aC5wb3coMTAsZSkpO3JldHVybiBNYXRoLmNlaWwodC9yKSpyfXJldHVybiBNYXRoLmNlaWwodCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4iYm9vbGVhbiIhPXR5cGVvZiB0fHx0fWUuZXhwb3J0cz17Y3JlYXRlU2NlbmU6ZnVuY3Rpb24odCl7KHQ9dHx8e30pLmNhbWVyYT10LmNhbWVyYXx8e307dmFyIGU9dC5jYW52YXM7aWYoIWUpaWYoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0LmNvbnRhaW5lcil7dmFyIHI9dC5jb250YWluZXI7ci5hcHBlbmRDaGlsZChlKX1lbHNlIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7dmFyIHg9dC5nbDt4fHwoeD1mdW5jdGlvbih0LGUpe3ZhciByPW51bGw7dHJ5eyhyPXQuZ2V0Q29udGV4dCgid2ViZ2wiLGUpKXx8KHI9dC5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLGUpKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH1yZXR1cm4gcn0oZSx0LmdsT3B0aW9uc3x8e3ByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITAscHJlc2VydmVEcmF3aW5nQnVmZmVyOmd9KSk7aWYoIXgpdGhyb3cgbmV3IEVycm9yKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkIik7dmFyIGI9dC5ib3VuZHN8fFtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLF89bmV3IHYsdz1sKHgsW3guZHJhd2luZ0J1ZmZlcldpZHRoLHguZHJhd2luZ0J1ZmZlckhlaWdodF0se3ByZWZlckZsb2F0OiFnfSksaz1kKHgpLFQ9dC5jYW1lcmFPYmplY3QmJiEwPT09dC5jYW1lcmFPYmplY3QuX29ydGhvfHx0LmNhbWVyYS5wcm9qZWN0aW9uJiYib3J0aG9ncmFwaGljIj09PXQuY2FtZXJhLnByb2plY3Rpb24udHlwZXx8ITEsQT17ZXllOnQuY2FtZXJhLmV5ZXx8WzIsMCwwXSxjZW50ZXI6dC5jYW1lcmEuY2VudGVyfHxbMCwwLDBdLHVwOnQuY2FtZXJhLnVwfHxbMCwxLDBdLHpvb21NaW46dC5jYW1lcmEuem9vbU1heHx8LjEsem9vbU1heDp0LmNhbWVyYS56b29tTWlufHwxMDAsbW9kZTp0LmNhbWVyYS5tb2RlfHwidHVybnRhYmxlIixfb3J0aG86VH0sTT10LmF4ZXN8fHt9LFM9aSh4LE0pO1MuZW5hYmxlPSFNLmRpc2FibGU7dmFyIEU9dC5zcGlrZXN8fHt9LEM9byh4LEUpLEw9W10sej1bXSxPPVtdLEk9W10sRD0hMCxQPSEwLFI9bmV3IEFycmF5KDE2KSxGPW5ldyBBcnJheSgxNiksQj17dmlldzpudWxsLHByb2plY3Rpb246Uixtb2RlbDpGLF9vcnRobzohMX0sUD0hMCxOPVt4LmRyYXdpbmdCdWZmZXJXaWR0aCx4LmRyYXdpbmdCdWZmZXJIZWlnaHRdLGo9dC5jYW1lcmFPYmplY3R8fG4oZSxBKSxWPXtnbDp4LGNvbnRleHRMb3N0OiExLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfHwxLGNhbnZhczplLHNlbGVjdGlvbjpfLGNhbWVyYTpqLGF4ZXM6UyxheGVzUGl4ZWxzOm51bGwsc3Bpa2VzOkMsYm91bmRzOmIsb2JqZWN0czpMLHNoYXBlOk4sYXNwZWN0OnQuYXNwZWN0UmF0aW98fFsxLDEsMV0scGlja1JhZGl1czp0LnBpY2tSYWRpdXN8fDEwLHpOZWFyOnQuek5lYXJ8fC4wMSx6RmFyOnQuekZhcnx8MWUzLGZvdnk6dC5mb3Z5fHxNYXRoLlBJLzQsY2xlYXJDb2xvcjp0LmNsZWFyQ29sb3J8fFswLDAsMCwwXSxhdXRvUmVzaXplOnkodC5hdXRvUmVzaXplKSxhdXRvQm91bmRzOnkodC5hdXRvQm91bmRzKSxhdXRvU2NhbGU6ISF0LmF1dG9TY2FsZSxhdXRvQ2VudGVyOnkodC5hdXRvQ2VudGVyKSxjbGlwVG9Cb3VuZHM6eSh0LmNsaXBUb0JvdW5kcyksc25hcFRvRGF0YTohIXQuc25hcFRvRGF0YSxvbnNlbGVjdDp0Lm9uc2VsZWN0fHxudWxsLG9ucmVuZGVyOnQub25yZW5kZXJ8fG51bGwsb25jbGljazp0Lm9uY2xpY2t8fG51bGwsY2FtZXJhUGFyYW1zOkIsb25jb250ZXh0bG9zczpudWxsLG1vdXNlTGlzdGVuZXI6bnVsbCxfc3RvcHBlZDohMX0sVT1beC5kcmF3aW5nQnVmZmVyV2lkdGgvVi5waXhlbFJhdGlvfDAseC5kcmF3aW5nQnVmZmVySGVpZ2h0L1YucGl4ZWxSYXRpb3wwXTtmdW5jdGlvbiBxKCl7aWYoIVYuX3N0b3BwZWQmJlYuYXV0b1Jlc2l6ZSl7dmFyIHQ9ZS5wYXJlbnROb2RlLHI9MSxuPTE7dCYmdCE9PWRvY3VtZW50LmJvZHk/KHI9dC5jbGllbnRXaWR0aCxuPXQuY2xpZW50SGVpZ2h0KToocj13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodCk7dmFyIGk9MHxNYXRoLmNlaWwocipWLnBpeGVsUmF0aW8pLGE9MHxNYXRoLmNlaWwobipWLnBpeGVsUmF0aW8pO2lmKGkhPT1lLndpZHRofHxhIT09ZS5oZWlnaHQpe2Uud2lkdGg9aSxlLmhlaWdodD1hO3ZhciBvPWUuc3R5bGU7by5wb3NpdGlvbj1vLnBvc2l0aW9ufHwiYWJzb2x1dGUiLG8ubGVmdD0iMHB4IixvLnRvcD0iMHB4IixvLndpZHRoPXIrInB4IixvLmhlaWdodD1uKyJweCIsRD0hMH19fVYuYXV0b1Jlc2l6ZSYmcSgpO2Z1bmN0aW9uIEgoKXtmb3IodmFyIHQ9TC5sZW5ndGgsZT1JLmxlbmd0aCxyPTA7cjxlOysrcilPW3JdPTA7dDpmb3IodmFyIHI9MDtyPHQ7KytyKXt2YXIgbj1MW3JdLGk9bi5waWNrU2xvdHM7aWYoaSl7Zm9yKHZhciBhPTA7YTxlOysrYSlpZihPW2FdK2k8MjU1KXt6W3JdPWEsbi5zZXRQaWNrQmFzZShPW2FdKzEpLE9bYV0rPWk7Y29udGludWUgdH12YXIgbz1zKHgsTik7eltyXT1lLEkucHVzaChvKSxPLnB1c2goaSksbi5zZXRQaWNrQmFzZSgxKSxlKz0xfWVsc2UgeltyXT0tMX1mb3IoO2U+MCYmMD09PU9bZS0xXTspTy5wb3AoKSxJLnBvcCgpLmRpc3Bvc2UoKX1mdW5jdGlvbiBHKCl7aWYoVi5jb250ZXh0TG9zdClyZXR1cm4hMDt4LmlzQ29udGV4dExvc3QoKSYmKFYuY29udGV4dExvc3Q9ITAsVi5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsVi5zZWxlY3Rpb24ub2JqZWN0PW51bGwsVi5vbmNvbnRleHRsb3NzJiZWLm9uY29udGV4dGxvc3MoKSl9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIscSksVi51cGRhdGU9ZnVuY3Rpb24odCl7Vi5fc3RvcHBlZHx8KHQ9dHx8e30sRD0hMCxQPSEwKX0sVi5hZGQ9ZnVuY3Rpb24odCl7Vi5fc3RvcHBlZHx8KHQuYXhlcz1TLEwucHVzaCh0KSx6LnB1c2goLTEpLEQ9ITAsUD0hMCxIKCkpfSxWLnJlbW92ZT1mdW5jdGlvbih0KXtpZighVi5fc3RvcHBlZCl7dmFyIGU9TC5pbmRleE9mKHQpO2U8MHx8KEwuc3BsaWNlKGUsMSksei5wb3AoKSxEPSEwLFA9ITAsSCgpKX19LFYuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCFWLl9zdG9wcGVkJiYoVi5fc3RvcHBlZD0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixxKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEcpLFYubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLCFWLmNvbnRleHRMb3N0KSl7Uy5kaXNwb3NlKCksQy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxMLmxlbmd0aDsrK3QpTFt0XS5kaXNwb3NlKCk7dy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxJLmxlbmd0aDsrK3QpSVt0XS5kaXNwb3NlKCk7ay5kaXNwb3NlKCkseD1udWxsLFM9bnVsbCxDPW51bGwsTD1bXX19LFYud2hlZWxMaXN0ZW5lcj1mKGUsZnVuY3Rpb24odCxlKXtpZighMSE9PWoua2V5QmluZGluZ01vZGUmJmouZW5hYmxlV2hlZWwmJmouX29ydGhvKXt2YXIgcj10PmU/MS4xOjEvMS4xO1YuYXNwZWN0WzBdKj1yLFYuYXNwZWN0WzFdKj1yLFYuYXNwZWN0WzJdKj1yLFYucmVkcmF3KCl9fSwhMCksVi5fbW91c2VSb3RhdGluZz0hMSxWLl9wcmV2QnV0dG9ucz0wLFYuZW5hYmxlTW91c2VMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtWLm1vdXNlTGlzdGVuZXI9dShlLGZ1bmN0aW9uKHQsZSxyKXtpZighVi5fc3RvcHBlZCl7dmFyIG49SS5sZW5ndGgsaT1MLmxlbmd0aCxhPV8ub2JqZWN0O18uZGlzdGFuY2U9MS8wLF8ubW91c2VbMF09ZSxfLm1vdXNlWzFdPXIsXy5vYmplY3Q9bnVsbCxfLnNjcmVlbj1udWxsLF8uZGF0YUNvb3JkaW5hdGU9Xy5kYXRhUG9zaXRpb249bnVsbDt2YXIgbz0hMTtpZih0JiZWLl9wcmV2QnV0dG9ucylWLl9tb3VzZVJvdGF0aW5nPSEwO2Vsc2V7Vi5fbW91c2VSb3RhdGluZyYmKFA9ITApLFYuX21vdXNlUm90YXRpbmc9ITE7Zm9yKHZhciBzPTA7czxuOysrcyl7dmFyIGw9SVtzXS5xdWVyeShlLFVbMV0tci0xLFYucGlja1JhZGl1cyk7aWYobCl7aWYobC5kaXN0YW5jZT5fLmRpc3RhbmNlKWNvbnRpbnVlO2Zvcih2YXIgYz0wO2M8aTsrK2Mpe3ZhciB1PUxbY107aWYoeltjXT09PXMpe3ZhciBmPXUucGljayhsKTtmJiYoXy5idXR0b25zPXQsXy5zY3JlZW49bC5jb29yZCxfLmRpc3RhbmNlPWwuZGlzdGFuY2UsXy5vYmplY3Q9dSxfLmluZGV4PWYuZGlzdGFuY2UsXy5kYXRhUG9zaXRpb249Zi5wb3NpdGlvbixfLmRhdGFDb29yZGluYXRlPWYuZGF0YUNvb3JkaW5hdGUsXy5kYXRhPWYsbz0hMCl9fX19fWEmJmEhPT1fLm9iamVjdCYmKGEuaGlnaGxpZ2h0JiZhLmhpZ2hsaWdodChudWxsKSxEPSEwKSxfLm9iamVjdCYmKF8ub2JqZWN0LmhpZ2hsaWdodCYmXy5vYmplY3QuaGlnaGxpZ2h0KF8uZGF0YSksRD0hMCksKG89b3x8Xy5vYmplY3QhPT1hKSYmVi5vbnNlbGVjdCYmVi5vbnNlbGVjdChfKSwxJnQmJiEoMSZWLl9wcmV2QnV0dG9ucykmJlYub25jbGljayYmVi5vbmNsaWNrKF8pLFYuX3ByZXZCdXR0b25zPXR9fSl9LGUuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsRyk7dmFyIFk9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sVz1bWVswXS5zbGljZSgpLFlbMV0uc2xpY2UoKV07ZnVuY3Rpb24gWCgpe2lmKCFHKCkpe3EoKTt2YXIgdD1WLmNhbWVyYS50aWNrKCk7Qi52aWV3PVYuY2FtZXJhLm1hdHJpeCxEPUR8fHQsUD1QfHx0LFMucGl4ZWxSYXRpbz1WLnBpeGVsUmF0aW8sQy5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbzt2YXIgZT1MLmxlbmd0aCxyPVlbMF0sbj1ZWzFdO3JbMF09clsxXT1yWzJdPTEvMCxuWzBdPW5bMV09blsyXT0tMS8wO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbyxvLmF4ZXM9Vi5heGVzLEQ9RHx8ISFvLmRpcnR5LFA9UHx8ISFvLmRpcnR5O3ZhciBzPW8uYm91bmRzO2lmKHMpZm9yKHZhciBsPXNbMF0sdT1zWzFdLGY9MDtmPDM7KytmKXJbZl09TWF0aC5taW4ocltmXSxsW2ZdKSxuW2ZdPU1hdGgubWF4KG5bZl0sdVtmXSl9dmFyIGQ9Vi5ib3VuZHM7aWYoVi5hdXRvQm91bmRzKWZvcih2YXIgZj0wO2Y8MzsrK2Ype2lmKG5bZl08cltmXSlyW2ZdPS0xLG5bZl09MTtlbHNle3JbZl09PT1uW2ZdJiYocltmXS09MSxuW2ZdKz0xKTt2YXIgZz0uMDUqKG5bZl0tcltmXSk7cltmXT1yW2ZdLWcsbltmXT1uW2ZdK2d9ZFswXVtmXT1yW2ZdLGRbMV1bZl09bltmXX1mb3IodmFyIHY9ITEsZj0wO2Y8MzsrK2Ypdj12fHxXWzBdW2ZdIT09ZFswXVtmXXx8V1sxXVtmXSE9PWRbMV1bZl0sV1swXVtmXT1kWzBdW2ZdLFdbMV1bZl09ZFsxXVtmXTtpZihQPVB8fHYsRD1EfHx2KXtpZih2KXtmb3IodmFyIHk9WzAsMCwwXSxpPTA7aTwzOysraSl5W2ldPW0oKGRbMV1baV0tZFswXVtpXSkvMTApO1MuYXV0b1RpY2tzP1MudXBkYXRlKHtib3VuZHM6ZCx0aWNrU3BhY2luZzp5fSk6Uy51cGRhdGUoe2JvdW5kczpkfSl9dmFyIGI9eC5kcmF3aW5nQnVmZmVyV2lkdGgsQT14LmRyYXdpbmdCdWZmZXJIZWlnaHQ7TlswXT1iLE5bMV09QSxVWzBdPTB8TWF0aC5tYXgoYi9WLnBpeGVsUmF0aW8sMSksVVsxXT0wfE1hdGgubWF4KEEvVi5waXhlbFJhdGlvLDEpLFQ/KHAoUiwtYi9BLGIvQSwtMSwxLFYuek5lYXIsVi56RmFyKSxCLl9vcnRobz0hMCk6KGgoUixWLmZvdnksYi9BLFYuek5lYXIsVi56RmFyKSxCLl9vcnRobz0hMSk7Zm9yKHZhciBpPTA7aTwxNjsrK2kpRltpXT0wO0ZbMTVdPTE7Zm9yKHZhciBNPTAsaT0wO2k8MzsrK2kpTT1NYXRoLm1heChNLGRbMV1baV0tZFswXVtpXSk7Zm9yKHZhciBpPTA7aTwzOysraSlWLmF1dG9TY2FsZT9GWzUqaV09Vi5hc3BlY3RbaV0vKGRbMV1baV0tZFswXVtpXSk6Rls1KmldPTEvTSxWLmF1dG9DZW50ZXImJihGWzEyK2ldPS41Ki1GWzUqaV0qKGRbMF1baV0rZFsxXVtpXSkpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5heGVzQm91bmRzPWQsVi5jbGlwVG9Cb3VuZHMmJihvLmNsaXBCb3VuZHM9ZCl9Xy5vYmplY3QmJihWLnNuYXBUb0RhdGE/Qy5wb3NpdGlvbj1fLmRhdGFDb29yZGluYXRlOkMucG9zaXRpb249Xy5kYXRhUG9zaXRpb24sQy5ib3VuZHM9ZCksUCYmKFA9ITEsZnVuY3Rpb24oKXtpZihHKCkpcmV0dXJuO3guY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx4LmRlcHRoTWFzayghMCkseC5kaXNhYmxlKHguQkxFTkQpLHguZW5hYmxlKHguREVQVEhfVEVTVCk7Zm9yKHZhciB0PUwubGVuZ3RoLGU9SS5sZW5ndGgscj0wO3I8ZTsrK3Ipe3ZhciBuPUlbcl07bi5zaGFwZT1VLG4uYmVnaW4oKTtmb3IodmFyIGk9MDtpPHQ7KytpKWlmKHpbaV09PT1yKXt2YXIgYT1MW2ldO2EuZHJhd1BpY2smJihhLnBpeGVsUmF0aW89MSxhLmRyYXdQaWNrKEIpKX1uLmVuZCgpfX0oKSksVi5heGVzUGl4ZWxzPWEoVi5heGVzLEIsYixBKSxWLm9ucmVuZGVyJiZWLm9ucmVuZGVyKCkseC5iaW5kRnJhbWVidWZmZXIoeC5GUkFNRUJVRkZFUixudWxsKSx4LnZpZXdwb3J0KDAsMCxiLEEpO3ZhciBFPVYuY2xlYXJDb2xvcjt4LmNsZWFyQ29sb3IoRVswXSxFWzFdLEVbMl0sRVszXSkseC5jbGVhcih4LkNPTE9SX0JVRkZFUl9CSVR8eC5ERVBUSF9CVUZGRVJfQklUKSx4LmRlcHRoTWFzayghMCkseC5jb2xvck1hc2soITAsITAsITAsITApLHguZW5hYmxlKHguREVQVEhfVEVTVCkseC5kZXB0aEZ1bmMoeC5MRVFVQUwpLHguZGlzYWJsZSh4LkJMRU5EKSx4LmRpc2FibGUoeC5DVUxMX0ZBQ0UpO3ZhciBPPSExO1MuZW5hYmxlJiYoTz1PfHxTLmlzVHJhbnNwYXJlbnQoKSxTLmRyYXcoQikpLEMuYXhlcz1TLF8ub2JqZWN0JiZDLmRyYXcoQikseC5kaXNhYmxlKHguQ1VMTF9GQUNFKTtmb3IodmFyIGk9MDtpPGU7KytpKXt2YXIgbz1MW2ldO28uYXhlcz1TLG8ucGl4ZWxSYXRpbz1WLnBpeGVsUmF0aW8sby5pc09wYXF1ZSYmby5pc09wYXF1ZSgpJiZvLmRyYXcoQiksby5pc1RyYW5zcGFyZW50JiZvLmlzVHJhbnNwYXJlbnQoKSYmKE89ITApfWlmKE8pe3cuc2hhcGU9Tix3LmJpbmQoKSx4LmNsZWFyKHguREVQVEhfQlVGRkVSX0JJVCkseC5jb2xvck1hc2soITEsITEsITEsITEpLHguZGVwdGhNYXNrKCEwKSx4LmRlcHRoRnVuYyh4LkxFU1MpLFMuZW5hYmxlJiZTLmlzVHJhbnNwYXJlbnQoKSYmUy5kcmF3VHJhbnNwYXJlbnQoQik7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89TFtpXTtvLmlzT3BhcXVlJiZvLmlzT3BhcXVlKCkmJm8uZHJhdyhCKX14LmVuYWJsZSh4LkJMRU5EKSx4LmJsZW5kRXF1YXRpb24oeC5GVU5DX0FERCkseC5ibGVuZEZ1bmMoeC5PTkUseC5PTkVfTUlOVVNfU1JDX0FMUEhBKSx4LmNvbG9yTWFzayghMCwhMCwhMCwhMCkseC5kZXB0aE1hc2soITEpLHguY2xlYXJDb2xvcigwLDAsMCwwKSx4LmNsZWFyKHguQ09MT1JfQlVGRkVSX0JJVCksUy5pc1RyYW5zcGFyZW50KCkmJlMuZHJhd1RyYW5zcGFyZW50KEIpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5pc1RyYW5zcGFyZW50JiZvLmlzVHJhbnNwYXJlbnQoKSYmby5kcmF3VHJhbnNwYXJlbnQoQil9eC5iaW5kRnJhbWVidWZmZXIoeC5GUkFNRUJVRkZFUixudWxsKSx4LmJsZW5kRnVuYyh4Lk9ORSx4Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHguZGlzYWJsZSh4LkRFUFRIX1RFU1QpLGsuYmluZCgpLHcuY29sb3JbMF0uYmluZCgwKSxrLnVuaWZvcm1zLmFjY3VtQnVmZmVyPTAsYyh4KSx4LmRpc2FibGUoeC5CTEVORCl9RD0hMTtmb3IodmFyIGk9MDtpPGU7KytpKUxbaV0uZGlydHk9ITF9fX1yZXR1cm4gVi5lbmFibGVNb3VzZUxpc3RlbmVycygpLGZ1bmN0aW9uIHQoKXtWLl9zdG9wcGVkfHxWLmNvbnRleHRMb3N0fHwoWCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KSl9KCksVi5yZWRyYXc9ZnVuY3Rpb24oKXtWLl9zdG9wcGVkfHwoRD0hMCxYKCkpfSxWfSxjcmVhdGVDYW1lcmE6bn19LHsiLi9jYW1lcmEuanMiOjI4NCwiLi9saWIvc2hhZGVyIjoyODUsImEtYmlnLXRyaWFuZ2xlIjo0OSwiZ2wtYXhlczNkIjoyMjksImdsLWF4ZXMzZC9wcm9wZXJ0aWVzIjoyMzYsImdsLWZibyI6MjQ1LCJnbC1tYXQ0L29ydGhvIjoyNjQsImdsLW1hdDQvcGVyc3BlY3RpdmUiOjI2NSwiZ2wtc2VsZWN0LXN0YXRpYyI6Mjk2LCJnbC1zcGlrZXMzZCI6MzA2LCJpcy1tb2JpbGUiOjQxMiwibW91c2UtY2hhbmdlIjo0MjcsIm1vdXNlLXdoZWVsIjo0MzB9XSwyODc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5Iik7ci5wb2ludFZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xuXG5oaWdocCBmbG9hdCByYW5kKHZlYzIgY28pIHtcbiAgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTg7XG4gIGhpZ2hwIGZsb2F0IGIgPSA3OC4yMzM7XG4gIGhpZ2hwIGZsb2F0IGMgPSA0Mzc1OC41NDUzO1xuICBoaWdocCBmbG9hdCBkID0gZG90KGNvLnh5LCB2ZWMyKGEsIGIpKTtcbiAgaGlnaHAgZmxvYXQgZSA9IG1vZChkLCAzLjE0KTtcbiAgcmV0dXJuIGZyYWN0KHNpbihlKSAqIGMpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XG4gICAgLy8gaWYgd2UgZG9uJ3Qgaml0dGVyIHRoZSBwb2ludCBzaXplIGEgYml0LCBvdmVyYWxsIHBvaW50IGNsb3VkXG4gICAgLy8gc2F0dXJhdGlvbiAnanVtcHMnIG9uIHpvb21pbmcsIHdoaWNoIGlzIGRpc3R1cmJpbmcgYW5kIGNvbmZ1c2luZ1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemUgKiAoKDE5LjUgKyByYW5kKHBvc2l0aW9uKSkgLyAyMC4wKTtcbiAgaWYocG9pbnRDbG91ZCAhPSAwLjApIHsgLy8gcG9pbnRDbG91ZCBpcyB0cnV0aHlcbiAgICAvLyBnZXQgdGhlIHNhbWUgc3F1YXJlIHN1cmZhY2UgYXMgY2lyY2xlIHdvdWxkIGJlXG4gICAgZ2xfUG9pbnRTaXplICo9IDAuODg2O1xuICB9XG59Il0pLHIucG9pbnRGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3IsIGJvcmRlckNvbG9yO1xudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXM7XG4gIHZlYzQgYmFzZUNvbG9yO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIGlmKGNlbnRlckZyYWN0aW9uID09IDEuMCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIGNlbnRlckZyYWN0aW9uKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICAgIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgICAgZGlzY2FyZDtcbiAgICB9XG4gICAgYmFzZUNvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgc3RlcChyYWRpdXMsIGNlbnRlckZyYWN0aW9uKSk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IucmdiICogYmFzZUNvbG9yLmEsIGJhc2VDb2xvci5hKTtcbiAgfVxufVxuIl0pLHIucGlja1ZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuXG4gIHZlYzQgaWQgPSBwaWNrSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC55ICs9IGZsb29yKGlkLnggLyAyNTYuMCk7XG4gIGlkLnggLT0gZmxvb3IoaWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLnogKz0gZmxvb3IoaWQueSAvIDI1Ni4wKTtcbiAgaWQueSAtPSBmbG9vcihpZC55IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQudyArPSBmbG9vcihpZC56IC8gMjU2LjApO1xuICBpZC56IC09IGZsb29yKGlkLnogLyAyNTYuMCkgKiAyNTYuMDtcblxuICBmcmFnSWQgPSBpZDtcbn1cbiJdKSxyLnBpY2tGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcbiAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBmcmFnSWQgLyAyNTUuMDtcbn1cbiJdKX0se2dsc2xpZnk6NDAxfV0sMjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJ0eXBlZGFycmF5LXBvb2wiKSxvPXQoIi4vbGliL3NoYWRlciIpO2Z1bmN0aW9uIHModCxlLHIsbixpKXt0aGlzLnBsb3Q9dCx0aGlzLm9mZnNldEJ1ZmZlcj1lLHRoaXMucGlja0J1ZmZlcj1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waWNrU2hhZGVyPWksdGhpcy5zaXplTWluPS41LHRoaXMuc2l6ZU1pbkNhcD0yLHRoaXMuc2l6ZU1heD0yMCx0aGlzLmFyZWFSYXRpbz0xLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29sb3I9WzEsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuYmxlbmQ9ITEsdGhpcy5waWNrT2Zmc2V0PTAsdGhpcy5wb2ludHM9bnVsbH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLGE9aShyKSxsPWkociksYz1uKHIsby5wb2ludFZlcnRleCxvLnBvaW50RnJhZ21lbnQpLHU9bihyLG8ucGlja1ZlcnRleCxvLnBpY2tGcmFnbWVudCksZj1uZXcgcyh0LGEsbCxjLHUpO3JldHVybiBmLnVwZGF0ZShlKSx0LmFkZE9iamVjdChmKSxmfTt2YXIgbCxjLHU9cy5wcm90b3R5cGU7dS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5vZmZzZXRCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGlja0J1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU7ZnVuY3Rpb24gcihlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfXQ9dHx8e30sdGhpcy5zaXplTWluPXIoInNpemVNaW4iLC41KSx0aGlzLnNpemVNYXg9cigic2l6ZU1heCIsMjApLHRoaXMuY29sb3I9cigiY29sb3IiLFsxLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmFyZWFSYXRpbz1yKCJhcmVhUmF0aW8iLDEpLHRoaXMuYm9yZGVyQ29sb3I9cigiYm9yZGVyQ29sb3IiLFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJsZW5kPXIoImJsZW5kIiwhMSk7dmFyIG49dC5wb3NpdGlvbnMubGVuZ3RoPj4+MSxpPXQucG9zaXRpb25zIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LG89dC5pZFRvSW5kZXggaW5zdGFuY2VvZiBJbnQzMkFycmF5JiZ0LmlkVG9JbmRleC5sZW5ndGg+PW4scz10LnBvc2l0aW9ucyxsPWk/czphLm1hbGxvY0Zsb2F0MzIocy5sZW5ndGgpLGM9bz90LmlkVG9JbmRleDphLm1hbGxvY0ludDMyKG4pO2lmKGl8fGwuc2V0KHMpLCFvKWZvcihsLnNldChzKSxlPTA7ZTxuO2UrKyljW2VdPWU7dGhpcy5wb2ludHM9cyx0aGlzLm9mZnNldEJ1ZmZlci51cGRhdGUobCksdGhpcy5waWNrQnVmZmVyLnVwZGF0ZShjKSxpfHxhLmZyZWUobCksb3x8YS5mcmVlKGMpLHRoaXMucG9pbnRDb3VudD1uLHRoaXMucGlja09mZnNldD0wfSx1LnVuaWZpZWREcmF3PShsPVsxLDAsMCwwLDEsMCwwLDAsMV0sYz1bMCwwLDAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwIT09dCxyPWU/dGhpcy5waWNrU2hhZGVyOnRoaXMuc2hhZGVyLG49dGhpcy5wbG90LmdsLGk9dGhpcy5wbG90LmRhdGFCb3g7aWYoMD09PXRoaXMucG9pbnRDb3VudClyZXR1cm4gdDt2YXIgYT1pWzJdLWlbMF0sbz1pWzNdLWlbMV0scz1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoPj4+MTtmb3Iocj0wO3I8aTtyKyspe3ZhciBhPXRbMipyXSxvPXRbMipyKzFdO2E+PWVbMF0mJmE8PWVbMl0mJm8+PWVbMV0mJm88PWVbM10mJm4rK31yZXR1cm4gbn0odGhpcy5wb2ludHMsaSksdT10aGlzLnBsb3QucGlja1BpeGVsUmF0aW8qTWF0aC5tYXgoTWF0aC5taW4odGhpcy5zaXplTWluQ2FwLHRoaXMuc2l6ZU1pbiksTWF0aC5taW4odGhpcy5zaXplTWF4LHRoaXMuc2l6ZU1heC9NYXRoLnBvdyhzLC4zMzMzMykpKTtsWzBdPTIvYSxsWzRdPTIvbyxsWzZdPS0yKmlbMF0vYS0xLGxbN109LTIqaVsxXS9vLTEsdGhpcy5vZmZzZXRCdWZmZXIuYmluZCgpLHIuYmluZCgpLHIuYXR0cmlidXRlcy5wb3NpdGlvbi5wb2ludGVyKCksci51bmlmb3Jtcy5tYXRyaXg9bCxyLnVuaWZvcm1zLmNvbG9yPXRoaXMuY29sb3Isci51bmlmb3Jtcy5ib3JkZXJDb2xvcj10aGlzLmJvcmRlckNvbG9yLHIudW5pZm9ybXMucG9pbnRDbG91ZD11PDUsci51bmlmb3Jtcy5wb2ludFNpemU9dSxyLnVuaWZvcm1zLmNlbnRlckZyYWN0aW9uPU1hdGgubWluKDEsTWF0aC5tYXgoMCxNYXRoLnNxcnQoMS10aGlzLmFyZWFSYXRpbykpKSxlJiYoY1swXT0yNTUmdCxjWzFdPXQ+PjgmMjU1LGNbMl09dD4+MTYmMjU1LGNbM109dD4+MjQmMjU1LHRoaXMucGlja0J1ZmZlci5iaW5kKCksci5hdHRyaWJ1dGVzLnBpY2tJZC5wb2ludGVyKG4uVU5TSUdORURfQllURSksci51bmlmb3Jtcy5waWNrT2Zmc2V0PWMsdGhpcy5waWNrT2Zmc2V0PXQpO3ZhciBmPW4uZ2V0UGFyYW1ldGVyKG4uQkxFTkQpLGg9bi5nZXRQYXJhbWV0ZXIobi5ESVRIRVIpO3JldHVybiBmJiYhdGhpcy5ibGVuZCYmbi5kaXNhYmxlKG4uQkxFTkQpLGgmJm4uZGlzYWJsZShuLkRJVEhFUiksbi5kcmF3QXJyYXlzKG4uUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSxmJiYhdGhpcy5ibGVuZCYmbi5lbmFibGUobi5CTEVORCksaCYmbi5lbmFibGUobi5ESVRIRVIpLHQrdGhpcy5wb2ludENvdW50fSksdS5kcmF3PXUudW5pZmllZERyYXcsdS5kcmF3UGljaz11LnVuaWZpZWREcmF3LHUucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5wb2ludENvdW50O2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMucG9pbnRzO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvWzIqYV0sb1syKmErMV1dfX19LHsiLi9saWIvc2hhZGVyIjoyODcsImdsLWJ1ZmZlciI6MjM3LCJnbC1zaGFkZXIiOjI5NywidHlwZWRhcnJheS1wb29sIjo1Mjl9XSwyODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPWVbMF0sdT1lWzFdLGY9ZVsyXSxoPWVbM10scD1yWzBdLGQ9clsxXSxnPXJbMl0sdj1yWzNdOyhhPWMqcCt1KmQrZipnK2gqdik8MCYmKGE9LWEscD0tcCxkPS1kLGc9LWcsdj0tdik7MS1hPjFlLTY/KGk9TWF0aC5hY29zKGEpLG89TWF0aC5zaW4oaSkscz1NYXRoLnNpbigoMS1uKSppKS9vLGw9TWF0aC5zaW4obippKS9vKToocz0xLW4sbD1uKTtyZXR1cm4gdFswXT1zKmMrbCpwLHRbMV09cyp1K2wqZCx0WzJdPXMqZitsKmcsdFszXT1zKmgrbCp2LHR9fSx7fV0sMjkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdHx8MD09PXQ/dC50b1N0cmluZygpOiIifX0se31dLDI5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ2ZWN0b3JpemUtdGV4dCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9aVtlXTthfHwoYT1pW2VdPXt9KTtpZih0IGluIGEpcmV0dXJuIGFbdF07dmFyIG89e3RleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZUhlaWdodDoxLGZvbnQ6ZSxsaW5lU3BhY2luZzoxLjI1LHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfSx0cmlhbmdsZXM6ITB9LHM9bih0LG8pO28udHJpYW5nbGVzPSExO3ZhciBsLGMsdT1uKHQsbyk7aWYociYmMSE9PXIpe2ZvcihsPTA7bDxzLnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7YzxzLnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXMucG9zaXRpb25zW2xdW2NdLz1yO2ZvcihsPTA7bDx1LnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7Yzx1LnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXUucG9zaXRpb25zW2xdW2NdLz1yfXZhciBmPVtbMS8wLDEvMF0sWy0xLzAsLTEvMF1dLGg9dS5wb3NpdGlvbnMubGVuZ3RoO2ZvcihsPTA7bDxoOysrbCl7dmFyIHA9dS5wb3NpdGlvbnNbbF07Zm9yKGM9MDtjPDI7KytjKWZbMF1bY109TWF0aC5taW4oZlswXVtjXSxwW2NdKSxmWzFdW2NdPU1hdGgubWF4KGZbMV1bY10scFtjXSl9cmV0dXJuIGFbdF09W3MsdSxmXX07dmFyIGk9e319LHsidmVjdG9yaXplLXRleHQiOjUzNH1dLDI5MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2xzbGlmeSIpLGE9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IHNjYWxlID0gMS4wO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcbiAgICAgIHNjYWxlID0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICAgIHZpZXdQb3NpdGlvbiA9IHZpZXdQb3NpdGlvbiAvIHZpZXdQb3NpdGlvbi53O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqICh2aWV3UG9zaXRpb24gKyBzY2FsZSAqIHZlYzQoZ2x5cGgueCwgLWdseXBoLnksIDAsIDApKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxvPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlLCBwaXhlbFJhdGlvO1xudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IHNjYWxlID0gcGl4ZWxSYXRpbztcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZC5iZ3IsIGlkLmJncikgPCAwLjAwMSkge1xuICAgICAgc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlld1Bvc2l0aW9uO1xuICAgIGNsaXBQb3NpdGlvbiAvPSBjbGlwUG9zaXRpb24udztcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uICsgdmVjNChzY3JlZW5TaXplICogc2NhbGUgKiB2ZWMyKGdseXBoLngsIC1nbHlwaC55KSwgMC4wLCAwLjApO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxzPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG51bmlmb3JtIHZlYzMgYXhlc1syXTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHNjYWxlLCBwaXhlbFJhdGlvO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IGxzY2FsZSA9IHBpeGVsUmF0aW8gKiBzY2FsZTtcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZCwgaWQpIDwgMC4wMDAxKSB7XG4gICAgICBsc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCBjbGlwQ2VudGVyICAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XG4gICAgdmVjMyBkYXRhUG9zaXRpb24gPSBwb3NpdGlvbiArIDAuNSpsc2NhbGUqKGF4ZXNbMF0gKiBnbHlwaC54ICsgYXhlc1sxXSAqIGdseXBoLnkpICogY2xpcENlbnRlci53ICogc2NyZWVuU2l6ZS55O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoZGF0YVBvc2l0aW9uLCAxKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBkYXRhUG9zaXRpb247XG4gIH1cbn1cbiJdKSxsPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGZyYWdDbGlwQm91bmRzWzBdLCBmcmFnQ2xpcEJvdW5kc1sxXSwgZGF0YUNvb3JkaW5hdGUpIHx8XG4gICAgaW50ZXJwQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cbiAgKSBkaXNjYXJkO1xuICBnbF9GcmFnQ29sb3IgPSBpbnRlcnBDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksYz1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0dyb3VwO1xuXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGZyYWdDbGlwQm91bmRzWzBdLCBmcmFnQ2xpcEJvdW5kc1sxXSwgZGF0YUNvb3JkaW5hdGUpKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0dyb3VwLCBwaWNrSWQuYmdyKTtcbn0iXSksdT1be25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6ImdseXBoIix0eXBlOiJ2ZWMyIn0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dLGY9e3ZlcnRleDphLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxoPXt2ZXJ0ZXg6byxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0scD17dmVydGV4OnMsZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LGQ9e3ZlcnRleDphLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fSxnPXt2ZXJ0ZXg6byxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX0sdj17dmVydGV4OnMsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9O2Z1bmN0aW9uIG0odCxlKXt2YXIgcj1uKHQsZSksaT1yLmF0dHJpYnV0ZXM7cmV0dXJuIGkucG9zaXRpb24ubG9jYXRpb249MCxpLmNvbG9yLmxvY2F0aW9uPTEsaS5nbHlwaC5sb2NhdGlvbj0yLGkuaWQubG9jYXRpb249MyxyfXIuY3JlYXRlUGVyc3BlY3RpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxmKX0sci5jcmVhdGVPcnRobz1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LGgpfSxyLmNyZWF0ZVByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxwKX0sci5jcmVhdGVQaWNrUGVyc3BlY3RpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxkKX0sci5jcmVhdGVQaWNrT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxnKX0sci5jcmVhdGVQaWNrUHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LHYpfX0seyJnbC1zaGFkZXIiOjI5NyxnbHNsaWZ5OjQwMX1dLDI5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpcy1zdHJpbmctYmxhbmsiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJ0eXBlZGFycmF5LXBvb2wiKSxzPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxsPXQoIi4vbGliL3NoYWRlcnMiKSxjPXQoIi4vbGliL2dseXBocyIpLHU9dCgiLi9saWIvZ2V0LXNpbXBsZS1zdHJpbmciKSxmPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBoKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXTtyZXR1cm4gdFswXT1lWzBdKnIrZVs0XSpuK2VbOF0qaStlWzEyXSphLHRbMV09ZVsxXSpyK2VbNV0qbitlWzldKmkrZVsxM10qYSx0WzJdPWVbMl0qcitlWzZdKm4rZVsxMF0qaStlWzE0XSphLHRbM109ZVszXSpyK2VbN10qbitlWzExXSppK2VbMTVdKmEsdH1mdW5jdGlvbiBwKHQsZSxyLG4pe3JldHVybiBoKG4sbiksaChuLG4pLGgobixuKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy5pbmRleD10LHRoaXMuZGF0YUNvb3JkaW5hdGU9dGhpcy5wb3NpdGlvbj1lfWZ1bmN0aW9uIGcodCl7cmV0dXJuITA9PT10PzE6dD4xPzE6dH1mdW5jdGlvbiB2KHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5zaGFkZXI9ZSx0aGlzLm9ydGhvU2hhZGVyPXIsdGhpcy5wcm9qZWN0U2hhZGVyPW4sdGhpcy5wb2ludEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9YSx0aGlzLmdseXBoQnVmZmVyPW8sdGhpcy5pZEJ1ZmZlcj1zLHRoaXMudmFvPWwsdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMubGluZVZlcnRleENvdW50PTAsdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMSx0aGlzLmxpbmVXaWR0aD0wLHRoaXMucHJvamVjdFNjYWxlPVsyLzMsMi8zLDIvM10sdGhpcy5wcm9qZWN0T3BhY2l0eT1bMSwxLDFdLHRoaXMucHJvamVjdEhhc0FscGhhPSExLHRoaXMucGlja0lkPTAsdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXI9Yyx0aGlzLnBpY2tPcnRob1NoYWRlcj11LHRoaXMucGlja1Byb2plY3RTaGFkZXI9Zix0aGlzLnBvaW50cz1bXSx0aGlzLl9zZWxlY3RSZXN1bHQ9bmV3IGQoMCxbMCwwLDBdKSx0aGlzLnVzZU9ydGhvPSEwLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuYXhlc1Byb2plY3Q9WyEwLCEwLCEwXSx0aGlzLmF4ZXNCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV0sdGhpcy5oaWdobGlnaHRTY2FsZT0yLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmRpcnR5PSEwfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bC5jcmVhdGVQZXJzcGVjdGl2ZShlKSxuPWwuY3JlYXRlT3J0aG8oZSksbz1sLmNyZWF0ZVByb2plY3QoZSkscz1sLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZShlKSxjPWwuY3JlYXRlUGlja09ydGhvKGUpLHU9bC5jcmVhdGVQaWNrUHJvamVjdChlKSxmPWkoZSksaD1pKGUpLHA9aShlKSxkPWkoZSksZz1hKGUsW3tidWZmZXI6ZixzaXplOjMsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmgsc2l6ZTo0LHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpwLHNpemU6Mix0eXBlOmUuRkxPQVR9LHtidWZmZXI6ZCxzaXplOjQsdHlwZTplLlVOU0lHTkVEX0JZVEUsbm9ybWFsaXplZDohMH1dKSxtPW5ldyB2KGUscixuLG8sZixoLHAsZCxnLHMsYyx1KTtyZXR1cm4gbS51cGRhdGUodCksbX07dmFyIG09di5wcm90b3R5cGU7bS5waWNrU2xvdHM9MSxtLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LG0uaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe2lmKHRoaXMuaGFzQWxwaGEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLmF4ZXNQcm9qZWN0W3RdJiZ0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX0sbS5pc09wYXF1ZT1mdW5jdGlvbigpe2lmKCF0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmIXRoaXMucHJvamVjdEhhc0FscGhhKXJldHVybiEwO3JldHVybiExfTt2YXIgeT1bMCwwXSx4PVswLDAsMF0sYj1bMCwwLDBdLF89WzAsMCwwLDFdLHc9WzAsMCwwLDFdLGs9Zi5zbGljZSgpLFQ9WzAsMCwwXSxBPVtbMCwwLDBdLFswLDAsMF1dO2Z1bmN0aW9uIE0odCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBTKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109MSx0fWZ1bmN0aW9uIEUodCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbcl09bix0fWZ1bmN0aW9uIEModCxlLHIsbil7dmFyIGksYT1lLmF4ZXNQcm9qZWN0LG89ZS5nbCxsPXQudW5pZm9ybXMsYz1yLm1vZGVsfHxmLHU9ci52aWV3fHxmLGg9ci5wcm9qZWN0aW9ufHxmLGQ9ZS5heGVzQm91bmRzLGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUEscj0wO3I8MjsrK3IpZm9yKHZhciBuPTA7bjwzOysrbillW3JdW25dPU1hdGgubWF4KE1hdGgubWluKHRbcl1bbl0sMWU4KSwtMWU4KTtyZXR1cm4gZX0oZS5jbGlwQm91bmRzKTtpPWUuYXhlcyYmZS5heGVzLmxhc3RDdWJlUHJvcHM/ZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpczpbMSwxLDFdLHlbMF09Mi9vLmRyYXdpbmdCdWZmZXJXaWR0aCx5WzFdPTIvby5kcmF3aW5nQnVmZmVySGVpZ2h0LHQuYmluZCgpLGwudmlldz11LGwucHJvamVjdGlvbj1oLGwuc2NyZWVuU2l6ZT15LGwuaGlnaGxpZ2h0SWQ9ZS5oaWdobGlnaHRJZCxsLmhpZ2hsaWdodFNjYWxlPWUuaGlnaGxpZ2h0U2NhbGUsbC5jbGlwQm91bmRzPWcsbC5waWNrR3JvdXA9ZS5waWNrSWQvMjU1LGwucGl4ZWxSYXRpbz1uO2Zvcih2YXIgdj0wO3Y8MzsrK3YpaWYoYVt2XSl7bC5zY2FsZT1lLnByb2plY3RTY2FsZVt2XSxsLm9wYWNpdHk9ZS5wcm9qZWN0T3BhY2l0eVt2XTtmb3IodmFyIG09ayxDPTA7QzwxNjsrK0MpbVtDXT0wO2ZvcihDPTA7Qzw0OysrQyltWzUqQ109MTttWzUqdl09MCxpW3ZdPDA/bVsxMit2XT1kWzBdW3ZdOm1bMTIrdl09ZFsxXVt2XSxzKG0sYyxtKSxsLm1vZGVsPW07dmFyIEw9KHYrMSklMyx6PSh2KzIpJTMsTz1NKHgpLEk9TShiKTtPW0xdPTEsSVt6XT0xO3ZhciBEPXAoMCwwLDAsUyhfLE8pKSxQPXAoMCwwLDAsUyh3LEkpKTtpZihNYXRoLmFicyhEWzFdKT5NYXRoLmFicyhQWzFdKSl7dmFyIFI9RDtEPVAsUD1SLFI9TyxPPUksST1SO3ZhciBGPUw7TD16LHo9Rn1EWzBdPDAmJihPW0xdPS0xKSxQWzFdPjAmJihJW3pdPS0xKTt2YXIgQj0wLE49MDtmb3IoQz0wO0M8NDsrK0MpQis9TWF0aC5wb3coY1s0KkwrQ10sMiksTis9TWF0aC5wb3coY1s0KnorQ10sMik7T1tMXS89TWF0aC5zcXJ0KEIpLElbel0vPU1hdGguc3FydChOKSxsLmF4ZXNbMF09TyxsLmF4ZXNbMV09SSxsLmZyYWdDbGlwQm91bmRzWzBdPUUoVCxnWzBdLHYsLTFlOCksbC5mcmFnQ2xpcEJvdW5kc1sxXT1FKFQsZ1sxXSx2LDFlOCksZS52YW8uYmluZCgpLGUudmFvLmRyYXcoby5UUklBTkdMRVMsZS52ZXJ0ZXhDb3VudCksZS5saW5lV2lkdGg+MCYmKG8ubGluZVdpZHRoKGUubGluZVdpZHRoKm4pLGUudmFvLmRyYXcoby5MSU5FUyxlLmxpbmVWZXJ0ZXhDb3VudCxlLnZlcnRleENvdW50KSksZS52YW8udW5iaW5kKCl9fXZhciBMPVtbLTFlOCwtMWU4LC0xZThdLFsxZTgsMWU4LDFlOF1dO2Z1bmN0aW9uIHoodCxlLHIsbixpLGEsbyl7dmFyIHM9ci5nbDtpZigoYT09PXIucHJvamVjdEhhc0FscGhhfHxvKSYmQyhlLHIsbixpKSxhPT09ci5oYXNBbHBoYXx8byl7dC5iaW5kKCk7dmFyIGw9dC51bmlmb3JtcztsLm1vZGVsPW4ubW9kZWx8fGYsbC52aWV3PW4udmlld3x8ZixsLnByb2plY3Rpb249bi5wcm9qZWN0aW9ufHxmLHlbMF09Mi9zLmRyYXdpbmdCdWZmZXJXaWR0aCx5WzFdPTIvcy5kcmF3aW5nQnVmZmVySGVpZ2h0LGwuc2NyZWVuU2l6ZT15LGwuaGlnaGxpZ2h0SWQ9ci5oaWdobGlnaHRJZCxsLmhpZ2hsaWdodFNjYWxlPXIuaGlnaGxpZ2h0U2NhbGUsbC5mcmFnQ2xpcEJvdW5kcz1MLGwuY2xpcEJvdW5kcz1yLmF4ZXMuYm91bmRzLGwub3BhY2l0eT1yLm9wYWNpdHksbC5waWNrR3JvdXA9ci5waWNrSWQvMjU1LGwucGl4ZWxSYXRpbz1pLHIudmFvLmJpbmQoKSxyLnZhby5kcmF3KHMuVFJJQU5HTEVTLHIudmVydGV4Q291bnQpLHIubGluZVdpZHRoPjAmJihzLmxpbmVXaWR0aChyLmxpbmVXaWR0aCppKSxyLnZhby5kcmF3KHMuTElORVMsci5saW5lVmVydGV4Q291bnQsci52ZXJ0ZXhDb3VudCkpLHIudmFvLnVuYmluZCgpfX1mdW5jdGlvbiBPKHQsZSxyLGkpe3ZhciBhO2E9QXJyYXkuaXNBcnJheSh0KT9lPHQubGVuZ3RoP3RbZV06dm9pZCAwOnQsYT11KGEpO3ZhciBvPSEwO24oYSkmJihhPSJcdTI1YmMiLG89ITEpO3ZhciBzPWMoYSxyLGkpO3JldHVybnttZXNoOnNbMF0sbGluZXM6c1sxXSxib3VuZHM6c1syXSx2aXNpYmxlOm99fW0uZHJhdz1mdW5jdGlvbih0KXt6KHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMSwhMSl9LG0uZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe3oodGhpcy51c2VPcnRobz90aGlzLm9ydGhvU2hhZGVyOnRoaXMuc2hhZGVyLHRoaXMucHJvamVjdFNoYWRlcix0aGlzLHQsdGhpcy5waXhlbFJhdGlvLCEwLCExKX0sbS5kcmF3UGljaz1mdW5jdGlvbih0KXt6KHRoaXMudXNlT3J0aG8/dGhpcy5waWNrT3J0aG9TaGFkZXI6dGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIsdGhpcy5waWNrUHJvamVjdFNoYWRlcix0aGlzLHQsMSwhMCwhMCl9LG0ucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVsyXSsodC52YWx1ZVsxXTw8OCkrKHQudmFsdWVbMF08PDE2KTtpZihlPj10aGlzLnBvaW50Q291bnR8fGU8MClyZXR1cm4gbnVsbDt2YXIgcj10aGlzLnBvaW50c1tlXSxuPXRoaXMuX3NlbGVjdFJlc3VsdDtuLmluZGV4PWU7Zm9yKHZhciBpPTA7aTwzOysraSluLnBvc2l0aW9uW2ldPW4uZGF0YUNvb3JkaW5hdGVbaV09cltpXTtyZXR1cm4gbn0sbS5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9dC5pbmRleCxyPTI1NSZlLG49ZT4+OCYyNTUsaT1lPj4xNiYyNTU7dGhpcy5oaWdobGlnaHRJZD1bci8yNTUsbi8yNTUsaS8yNTUsMF19ZWxzZSB0aGlzLmhpZ2hsaWdodElkPVsxLDEsMSwxXX0sbS51cGRhdGU9ZnVuY3Rpb24odCl7aWYoInBlcnNwZWN0aXZlImluKHQ9dHx8e30pJiYodGhpcy51c2VPcnRobz0hdC5wZXJzcGVjdGl2ZSksIm9ydGhvZ3JhcGhpYyJpbiB0JiYodGhpcy51c2VPcnRobz0hIXQub3J0aG9ncmFwaGljKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksInByb2plY3QiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdCkpdGhpcy5heGVzUHJvamVjdD10LnByb2plY3Q7ZWxzZXt2YXIgZT0hIXQucHJvamVjdDt0aGlzLmF4ZXNQcm9qZWN0PVtlLGUsZV19aWYoInByb2plY3RTY2FsZSJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0U2NhbGUpKXRoaXMucHJvamVjdFNjYWxlPXQucHJvamVjdFNjYWxlLnNsaWNlKCk7ZWxzZXt2YXIgcj0rdC5wcm9qZWN0U2NhbGU7dGhpcy5wcm9qZWN0U2NhbGU9W3IscixyXX1pZih0aGlzLnByb2plY3RIYXNBbHBoYT0hMSwicHJvamVjdE9wYWNpdHkiaW4gdCl7aWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RPcGFjaXR5KSl0aGlzLnByb2plY3RPcGFjaXR5PXQucHJvamVjdE9wYWNpdHkuc2xpY2UoKTtlbHNle3I9K3QucHJvamVjdE9wYWNpdHk7dGhpcy5wcm9qZWN0T3BhY2l0eT1bcixyLHJdfWZvcih2YXIgbj0wO248MzsrK24pdGhpcy5wcm9qZWN0T3BhY2l0eVtuXT1nKHRoaXMucHJvamVjdE9wYWNpdHlbbl0pLHRoaXMucHJvamVjdE9wYWNpdHlbbl08MSYmKHRoaXMucHJvamVjdEhhc0FscGhhPSEwKX10aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9Zyh0Lm9wYWNpdHkpLHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLHRoaXMuZGlydHk9ITA7dmFyIGksYSxzPXQucG9zaXRpb24sbD10LmZvbnR8fCJub3JtYWwiLGM9dC5hbGlnbm1lbnR8fFswLDBdO2lmKDI9PT1jLmxlbmd0aClpPWNbMF0sYT1jWzFdO2Vsc2V7aT1bXSxhPVtdO2ZvcihuPTA7bjxjLmxlbmd0aDsrK24paVtuXT1jW25dWzBdLGFbbl09Y1tuXVsxXX12YXIgdT1bMS8wLDEvMCwxLzBdLGY9Wy0xLzAsLTEvMCwtMS8wXSxoPXQuZ2x5cGgscD10LmNvbG9yLGQ9dC5zaXplLHY9dC5hbmdsZSxtPXQubGluZUNvbG9yLHk9LTEseD0wLGI9MCxfPTA7aWYocy5sZW5ndGgpe189cy5sZW5ndGg7dDpmb3Iobj0wO248XzsrK24pe2Zvcih2YXIgdz1zW25dLGs9MDtrPDM7KytrKWlmKGlzTmFOKHdba10pfHwhaXNGaW5pdGUod1trXSkpY29udGludWUgdDt2YXIgVD0oTj1PKGgsbixsLHRoaXMucGl4ZWxSYXRpbykpLm1lc2gsQT1OLmxpbmVzLE09Ti5ib3VuZHM7eCs9MypULmNlbGxzLmxlbmd0aCxiKz0yKkEuZWRnZXMubGVuZ3RofX12YXIgUz14K2IsRT1vLm1hbGxvY0Zsb2F0KDMqUyksQz1vLm1hbGxvY0Zsb2F0KDQqUyksTD1vLm1hbGxvY0Zsb2F0KDIqUyksej1vLm1hbGxvY1VpbnQzMihTKTtpZihTPjApe3ZhciBJPTAsRD14LFA9WzAsMCwwLDFdLFI9WzAsMCwwLDFdLEY9QXJyYXkuaXNBcnJheShwKSYmQXJyYXkuaXNBcnJheShwWzBdKSxCPUFycmF5LmlzQXJyYXkobSkmJkFycmF5LmlzQXJyYXkobVswXSk7dDpmb3Iobj0wO248XzsrK24pe3krPTE7Zm9yKHc9c1tuXSxrPTA7azwzOysrayl7aWYoaXNOYU4od1trXSl8fCFpc0Zpbml0ZSh3W2tdKSljb250aW51ZSB0O2Zba109TWF0aC5tYXgoZltrXSx3W2tdKSx1W2tdPU1hdGgubWluKHVba10sd1trXSl9VD0oTj1PKGgsbixsLHRoaXMucGl4ZWxSYXRpbykpLm1lc2gsQT1OLmxpbmVzLE09Ti5ib3VuZHM7dmFyIE4saj1OLnZpc2libGU7aWYoailpZihBcnJheS5pc0FycmF5KHApKXtpZigzPT09KFY9Rj9uPHAubGVuZ3RoP3Bbbl06WzAsMCwwLDBdOnApLmxlbmd0aCl7Zm9yKGs9MDtrPDM7KytrKVBba109VltrXTtQWzNdPTF9ZWxzZSBpZig0PT09Vi5sZW5ndGgpe2ZvcihrPTA7azw0OysraylQW2tdPVZba107IXRoaXMuaGFzQWxwaGEmJlZbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApfX1lbHNlIFBbMF09UFsxXT1QWzJdPTAsUFszXT0xO2Vsc2UgUD1bMSwxLDEsMF07aWYoailpZihBcnJheS5pc0FycmF5KG0pKXt2YXIgVjtpZigzPT09KFY9Qj9uPG0ubGVuZ3RoP21bbl06WzAsMCwwLDBdOm0pLmxlbmd0aCl7Zm9yKGs9MDtrPDM7KytrKVJba109VltrXTtSW2tdPTF9ZWxzZSBpZig0PT09Vi5sZW5ndGgpe2ZvcihrPTA7azw0OysraylSW2tdPVZba107IXRoaXMuaGFzQWxwaGEmJlZbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApfX1lbHNlIFJbMF09UlsxXT1SWzJdPTAsUlszXT0xO2Vsc2UgUj1bMSwxLDEsMF07dmFyIFU9LjU7aj9BcnJheS5pc0FycmF5KGQpP1U9bjxkLmxlbmd0aD8rZFtuXToxMjpkP1U9K2Q6dGhpcy51c2VPcnRobyYmKFU9MTIpOlU9MDt2YXIgcT0wO0FycmF5LmlzQXJyYXkodik/cT1uPHYubGVuZ3RoPyt2W25dOjA6diYmKHE9K3YpO3ZhciBIPU1hdGguY29zKHEpLEc9TWF0aC5zaW4ocSk7Zm9yKHc9c1tuXSxrPTA7azwzOysraylmW2tdPU1hdGgubWF4KGZba10sd1trXSksdVtrXT1NYXRoLm1pbih1W2tdLHdba10pO3ZhciBZPWksVz1hO1k9MDtBcnJheS5pc0FycmF5KGkpP1k9bjxpLmxlbmd0aD9pW25dOjA6aSYmKFk9aSk7Vz0wO0FycmF5LmlzQXJyYXkoYSk/Vz1uPGEubGVuZ3RoP2Fbbl06MDphJiYoVz1hKTt2YXIgWD1bWSo9WT4wPzEtTVswXVswXTpZPDA/MStNWzFdWzBdOjEsVyo9Vz4wPzEtTVswXVsxXTpXPDA/MStNWzFdWzFdOjFdLFo9VC5jZWxsc3x8W10sJD1ULnBvc2l0aW9uc3x8W107Zm9yKGs9MDtrPFoubGVuZ3RoOysraylmb3IodmFyIEo9WltrXSxLPTA7SzwzOysrSyl7Zm9yKHZhciBRPTA7UTwzOysrUSlFWzMqSStRXT13W1FdO2ZvcihRPTA7UTw0OysrUSlDWzQqSStRXT1QW1FdO3pbSV09eTt2YXIgdHQ9JFtKW0tdXTtMWzIqSV09VSooSCp0dFswXS1HKnR0WzFdK1hbMF0pLExbMipJKzFdPVUqKEcqdHRbMF0rSCp0dFsxXStYWzFdKSxJKz0xfWZvcihaPUEuZWRnZXMsJD1BLnBvc2l0aW9ucyxrPTA7azxaLmxlbmd0aDsrK2spZm9yKEo9WltrXSxLPTA7SzwyOysrSyl7Zm9yKFE9MDtRPDM7KytRKUVbMypEK1FdPXdbUV07Zm9yKFE9MDtRPDQ7KytRKUNbNCpEK1FdPVJbUV07eltEXT15O3R0PSRbSltLXV07TFsyKkRdPVUqKEgqdHRbMF0tRyp0dFsxXStYWzBdKSxMWzIqRCsxXT1VKihHKnR0WzBdK0gqdHRbMV0rWFsxXSksRCs9MX19fXRoaXMuYm91bmRzPVt1LGZdLHRoaXMucG9pbnRzPXMsdGhpcy5wb2ludENvdW50PXMubGVuZ3RoLHRoaXMudmVydGV4Q291bnQ9eCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD1iLHRoaXMucG9pbnRCdWZmZXIudXBkYXRlKEUpLHRoaXMuY29sb3JCdWZmZXIudXBkYXRlKEMpLHRoaXMuZ2x5cGhCdWZmZXIudXBkYXRlKEwpLHRoaXMuaWRCdWZmZXIudXBkYXRlKHopLG8uZnJlZShFKSxvLmZyZWUoQyksby5mcmVlKEwpLG8uZnJlZSh6KX0sbS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMub3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tPcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMucG9pbnRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuY29sb3JCdWZmZXIuZGlzcG9zZSgpLHRoaXMuZ2x5cGhCdWZmZXIuZGlzcG9zZSgpLHRoaXMuaWRCdWZmZXIuZGlzcG9zZSgpfX0seyIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZyI6MjkwLCIuL2xpYi9nbHlwaHMiOjI5MSwiLi9saWIvc2hhZGVycyI6MjkyLCJnbC1idWZmZXIiOjIzNywiZ2wtbWF0NC9tdWx0aXBseSI6MjYzLCJnbC12YW8iOjMxOSwiaXMtc3RyaW5nLWJsYW5rIjo0MTUsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sMjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKTtyLmJveFZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiB2ZXJ0ZXg7XG5cbnVuaWZvcm0gdmVjMiBjb3JuZXJBLCBjb3JuZXJCO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChtaXgoY29ybmVyQSwgY29ybmVyQiwgdmVydGV4KSwgMCwgMSk7XG59XG4iXSksci5ib3hGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59XG4iXSl9LHtnbHNsaWZ5OjQwMX1dLDI5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiLi9saWIvc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMuYm94QnVmZmVyPWUsdGhpcy5ib3hTaGFkZXI9cix0aGlzLmVuYWJsZWQ9ITAsdGhpcy5zZWxlY3RCb3g9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmlubmVyRmlsbD0hMSx0aGlzLmlubmVyQ29sb3I9WzAsMCwwLC4yNV0sdGhpcy5vdXRlckZpbGw9ITAsdGhpcy5vdXRlckNvbG9yPVswLDAsMCwuNV0sdGhpcy5ib3JkZXJXaWR0aD0xMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLHM9aShyLFswLDAsMCwxLDEsMCwxLDFdKSxsPW4ocixhLmJveFZlcnRleCxhLmJveEZyYWdtZW50KSxjPW5ldyBvKHQscyxsKTtyZXR1cm4gYy51cGRhdGUoZSksdC5hZGRPdmVybGF5KGMpLGN9O3ZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMuZW5hYmxlZCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zZWxlY3RCb3gscj10aGlzLmJvcmRlcldpZHRoLG49KHRoaXMuaW5uZXJGaWxsLHRoaXMuaW5uZXJDb2xvciksaT0odGhpcy5vdXRlckZpbGwsdGhpcy5vdXRlckNvbG9yKSxhPXRoaXMuYm9yZGVyQ29sb3Isbz10LmJveCxzPXQuc2NyZWVuQm94LGw9dC5kYXRhQm94LGM9dC52aWV3Qm94LHU9dC5waXhlbFJhdGlvLGY9KGVbMF0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxoPShlWzFdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV0scD0oZVsyXS1sWzBdKSooY1syXS1jWzBdKS8obFsyXS1sWzBdKStjWzBdLGQ9KGVbM10tbFsxXSkqKGNbM10tY1sxXSkvKGxbM10tbFsxXSkrY1sxXTtpZihmPU1hdGgubWF4KGYsY1swXSksaD1NYXRoLm1heChoLGNbMV0pLHA9TWF0aC5taW4ocCxjWzJdKSxkPU1hdGgubWluKGQsY1szXSksIShwPGZ8fGQ8aCkpe28uYmluZCgpO3ZhciBnPXNbMl0tc1swXSx2PXNbM10tc1sxXTtpZih0aGlzLm91dGVyRmlsbCYmKG8uZHJhd0JveCgwLDAsZyxoLGkpLG8uZHJhd0JveCgwLGgsZixkLGkpLG8uZHJhd0JveCgwLGQsZyx2LGkpLG8uZHJhd0JveChwLGgsZyxkLGkpKSx0aGlzLmlubmVyRmlsbCYmby5kcmF3Qm94KGYsaCxwLGQsbikscj4wKXt2YXIgbT1yKnU7by5kcmF3Qm94KGYtbSxoLW0scCttLGgrbSxhKSxvLmRyYXdCb3goZi1tLGQtbSxwK20sZCttLGEpLG8uZHJhd0JveChmLW0saC1tLGYrbSxkK20sYSksby5kcmF3Qm94KHAtbSxoLW0scCttLGQrbSxhKX19fX0scy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmlubmVyRmlsbD0hIXQuaW5uZXJGaWxsLHRoaXMub3V0ZXJGaWxsPSEhdC5vdXRlckZpbGwsdGhpcy5pbm5lckNvbG9yPSh0LmlubmVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5vdXRlckNvbG9yPSh0Lm91dGVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5ib3JkZXJDb2xvcj0odC5ib3JkZXJDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYm9yZGVyV2lkdGg9dC5ib3JkZXJXaWR0aHx8MCx0aGlzLnNlbGVjdEJveD0odC5zZWxlY3RCb3h8fHRoaXMuc2VsZWN0Qm94KS5zbGljZSgpfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5ib3hTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjoyOTQsImdsLWJ1ZmZlciI6MjM3LCJnbC1zaGFkZXIiOjI5N31dLDI5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZSksYT1pLm1hbGxvY1VpbnQ4KGVbMF0qZVsxXSo0KTtyZXR1cm4gbmV3IGModCxyLGEpfTt2YXIgbj10KCJnbC1mYm8iKSxpPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgibmRhcnJheSIpLG89dCgiYml0LXR3aWRkbGUiKS5uZXh0UG93MixzPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJhcnJheSIse29mZnNldDpbMCwwLDFdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwyXSxhcnJheTowfSx7b2Zmc2V0OlswLDAsM10sYXJyYXk6MH0sInNjYWxhciIsInNjYWxhciIsImluZGV4Il0scHJlOntib2R5OiJ7dGhpc19jbG9zZXN0RDI9MWU4LHRoaXNfY2xvc2VzdFg9LTEsdGhpc19jbG9zZXN0WT0tMX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV8xNl9hcmcwXzwyNTV8fF9pbmxpbmVfMTZfYXJnMV88MjU1fHxfaW5saW5lXzE2X2FyZzJfPDI1NXx8X2lubGluZV8xNl9hcmczXzwyNTUpe3ZhciBfaW5saW5lXzE2X2w9X2lubGluZV8xNl9hcmc0Xy1faW5saW5lXzE2X2FyZzZfWzBdLF9pbmxpbmVfMTZfYT1faW5saW5lXzE2X2FyZzVfLV9pbmxpbmVfMTZfYXJnNl9bMV0sX2lubGluZV8xNl9mPV9pbmxpbmVfMTZfbCpfaW5saW5lXzE2X2wrX2lubGluZV8xNl9hKl9pbmxpbmVfMTZfYTtfaW5saW5lXzE2X2Y8dGhpc19jbG9zZXN0RDImJih0aGlzX2Nsb3Nlc3REMj1faW5saW5lXzE2X2YsdGhpc19jbG9zZXN0WD1faW5saW5lXzE2X2FyZzZfWzBdLHRoaXNfY2xvc2VzdFk9X2lubGluZV8xNl9hcmc2X1sxXSl9fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMTZfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnNV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnNl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLHRoaXNWYXJzOlsidGhpc19jbG9zZXN0RDIiLCJ0aGlzX2Nsb3Nlc3RYIiwidGhpc19jbG9zZXN0WSJdLGxvY2FsVmFyczpbIl9pbmxpbmVfMTZfYSIsIl9pbmxpbmVfMTZfZiIsIl9pbmxpbmVfMTZfbCJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuW3RoaXNfY2xvc2VzdFgsdGhpc19jbG9zZXN0WSx0aGlzX2Nsb3Nlc3REMl19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19jbG9zZXN0RDIiLCJ0aGlzX2Nsb3Nlc3RYIiwidGhpc19jbG9zZXN0WSJdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6ImN3aXNlIixibG9ja1NpemU6NjR9KTtmdW5jdGlvbiBsKHQsZSxyLG4saSl7dGhpcy5jb29yZD1bdCxlXSx0aGlzLmlkPXIsdGhpcy52YWx1ZT1uLHRoaXMuZGlzdGFuY2U9aX1mdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5mYm89ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMuX3JlYWRUaW1lb3V0PW51bGw7dmFyIG49dGhpczt0aGlzLl9yZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtuLmdsJiYoZS5iaW5kKCksdC5yZWFkUGl4ZWxzKDAsMCxlLnNoYXBlWzBdLGUuc2hhcGVbMV0sdC5SR0JBLHQuVU5TSUdORURfQllURSxuLmJ1ZmZlciksbi5fcmVhZFRpbWVvdXQ9bnVsbCl9fXZhciB1PWMucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LCJzaGFwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdsP3RoaXMuZmJvLnNoYXBlLnNsaWNlKCk6WzAsMF19LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmdsKXt0aGlzLmZiby5zaGFwZT10O3ZhciBlPXRoaXMuZmJvLnNoYXBlWzBdLHI9dGhpcy5mYm8uc2hhcGVbMV07aWYociplKjQ+dGhpcy5idWZmZXIubGVuZ3RoKXtpLmZyZWUodGhpcy5idWZmZXIpO2Zvcih2YXIgbj10aGlzLmJ1ZmZlcj1pLm1hbGxvY1VpbnQ4KG8ociplKjQpKSxhPTA7YTxyKmUqNDsrK2EpblthXT0yNTV9cmV0dXJuIHR9fX0pLHUuYmVnaW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3RoaXMuc2hhcGU7dCYmKHRoaXMuZmJvLmJpbmQoKSx0LmNsZWFyQ29sb3IoMSwxLDEsMSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKSl9LHUuZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0JiYodC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0aGlzLl9yZWFkVGltZW91dHx8Y2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSx0aGlzLl9yZWFkVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX3JlYWRDYWxsYmFjaywxKSl9LHUucXVlcnk9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLmdsKXJldHVybiBudWxsO3ZhciBuPXRoaXMuZmJvLnNoYXBlLnNsaWNlKCk7dHw9MCxlfD0wLCJudW1iZXIiIT10eXBlb2YgciYmKHI9MSk7dmFyIGk9MHxNYXRoLm1pbihNYXRoLm1heCh0LXIsMCksblswXSksbz0wfE1hdGgubWluKE1hdGgubWF4KHQrciwwKSxuWzBdKSxjPTB8TWF0aC5taW4oTWF0aC5tYXgoZS1yLDApLG5bMV0pLHU9MHxNYXRoLm1pbihNYXRoLm1heChlK3IsMCksblsxXSk7aWYobzw9aXx8dTw9YylyZXR1cm4gbnVsbDt2YXIgZj1bby1pLHUtY10saD1hKHRoaXMuYnVmZmVyLFtmWzBdLGZbMV0sNF0sWzQsNCpuWzBdLDFdLDQqKGkrblswXSpjKSkscD1zKGguaGkoZlswXSxmWzFdLDEpLHIsciksZD1wWzBdLGc9cFsxXTtyZXR1cm4gZDwwfHxNYXRoLnBvdyh0aGlzLnJhZGl1cywyKTxwWzJdP251bGw6bmV3IGwoZCtpfDAsZytjfDAsaC5nZXQoZCxnLDApLFtoLmdldChkLGcsMSksaC5nZXQoZCxnLDIpLGguZ2V0KGQsZywzKV0sTWF0aC5zcXJ0KHBbMl0pKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbCYmKHRoaXMuZmJvLmRpc3Bvc2UoKSxpLmZyZWUodGhpcy5idWZmZXIpLHRoaXMuZ2w9bnVsbCx0aGlzLl9yZWFkVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSl9fSx7ImJpdC10d2lkZGxlIjo4MiwiY3dpc2UvbGliL3dyYXBwZXIiOjEzOSwiZ2wtZmJvIjoyNDUsbmRhcnJheTo0NDIsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sMjk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NyZWF0ZS11bmlmb3JtcyIpLGk9dCgiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiKSxhPXQoIi4vbGliL3JlZmxlY3QiKSxvPXQoIi4vbGliL3NoYWRlci1jYWNoZSIpLHM9dCgiLi9saWIvcnVudGltZS1yZWZsZWN0IiksbD10KCIuL2xpYi9HTEVycm9yIik7ZnVuY3Rpb24gYyh0KXt0aGlzLmdsPXQsdGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9MCx0aGlzLl92cmVmPXRoaXMuX2ZyZWY9dGhpcy5fcmVsaW5rPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuYXR0cmlidXRlcz10aGlzLnVuaWZvcm1zPXRoaXMudHlwZXM9bnVsbH12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQubmFtZTxlLm5hbWU/LTE6MX11LmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLnByb2dyYW18fHRoaXMuX3JlbGluaygpO3ZhciBlPXRoaXMuZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sdGhpcy5nbC5BQ1RJVkVfQVRUUklCVVRFUykscj10aGlzLmdsLmxhc3RBdHRyaWJDb3VudDtpZihlPnIpZm9yKHQ9cjt0PGU7dCsrKXRoaXMuZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodCk7ZWxzZSBpZihyPmUpZm9yKHQ9ZTt0PHI7dCsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PWUsdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdsLmxhc3RBdHRyaWJDb3VudCxlPTA7ZTx0O2UrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX2ZyZWYmJnRoaXMuX2ZyZWYuZGlzcG9zZSgpLHRoaXMuX3ZyZWYmJnRoaXMuX3ZyZWYuZGlzcG9zZSgpLHRoaXMuYXR0cmlidXRlcz10aGlzLnR5cGVzPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuX3JlbGluaz10aGlzLl9mcmVmPXRoaXMuX3ZyZWY9bnVsbH0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsYyl7aWYoIWV8fDE9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgdT10O3Q9dS52ZXJ0ZXgsZT11LmZyYWdtZW50LHI9dS51bmlmb3JtcyxjPXUuYXR0cmlidXRlc312YXIgaD10aGlzLHA9aC5nbCxkPWguX3ZyZWY7aC5fdnJlZj1vLnNoYWRlcihwLHAuVkVSVEVYX1NIQURFUix0KSxkJiZkLmRpc3Bvc2UoKSxoLnZlcnRTaGFkZXI9aC5fdnJlZi5zaGFkZXI7dmFyIGc9dGhpcy5fZnJlZjtpZihoLl9mcmVmPW8uc2hhZGVyKHAscC5GUkFHTUVOVF9TSEFERVIsZSksZyYmZy5kaXNwb3NlKCksaC5mcmFnU2hhZGVyPWguX2ZyZWYuc2hhZGVyLCFyfHwhYyl7dmFyIHY9cC5jcmVhdGVQcm9ncmFtKCk7aWYocC5hdHRhY2hTaGFkZXIodixoLmZyYWdTaGFkZXIpLHAuYXR0YWNoU2hhZGVyKHYsaC52ZXJ0U2hhZGVyKSxwLmxpbmtQcm9ncmFtKHYpLCFwLmdldFByb2dyYW1QYXJhbWV0ZXIodixwLkxJTktfU1RBVFVTKSl7dmFyIG09cC5nZXRQcm9ncmFtSW5mb0xvZyh2KTt0aHJvdyBuZXcgbChtLCJFcnJvciBsaW5raW5nIHByb2dyYW06IittKX1yPXJ8fHMudW5pZm9ybXMocCx2KSxjPWN8fHMuYXR0cmlidXRlcyhwLHYpLHAuZGVsZXRlUHJvZ3JhbSh2KX0oYz1jLnNsaWNlKCkpLnNvcnQoZik7dmFyIHkseD1bXSxiPVtdLF89W107Zm9yKHk9MDt5PGMubGVuZ3RoOysreSl7dmFyIHc9Y1t5XTtpZih3LnR5cGUuaW5kZXhPZigibWF0Iik+PTApe2Zvcih2YXIgaz0wfHcudHlwZS5jaGFyQXQody50eXBlLmxlbmd0aC0xKSxUPW5ldyBBcnJheShrKSxBPTA7QTxrOysrQSlUW0FdPV8ubGVuZ3RoLGIucHVzaCh3Lm5hbWUrIlsiK0ErIl0iKSwibnVtYmVyIj09dHlwZW9mIHcubG9jYXRpb24/Xy5wdXNoKHcubG9jYXRpb24rQSk6QXJyYXkuaXNBcnJheSh3LmxvY2F0aW9uKSYmdy5sb2NhdGlvbi5sZW5ndGg9PT1rJiYibnVtYmVyIj09dHlwZW9mIHcubG9jYXRpb25bQV0/Xy5wdXNoKDB8dy5sb2NhdGlvbltBXSk6Xy5wdXNoKC0xKTt4LnB1c2goe25hbWU6dy5uYW1lLHR5cGU6dy50eXBlLGxvY2F0aW9uczpUfSl9ZWxzZSB4LnB1c2goe25hbWU6dy5uYW1lLHR5cGU6dy50eXBlLGxvY2F0aW9uczpbXy5sZW5ndGhdfSksYi5wdXNoKHcubmFtZSksIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uP18ucHVzaCgwfHcubG9jYXRpb24pOl8ucHVzaCgtMSl9dmFyIE09MDtmb3IoeT0wO3k8Xy5sZW5ndGg7Kyt5KWlmKF9beV08MCl7Zm9yKDtfLmluZGV4T2YoTSk+PTA7KU0rPTE7X1t5XT1NfXZhciBTPW5ldyBBcnJheShyLmxlbmd0aCk7ZnVuY3Rpb24gRSgpe2gucHJvZ3JhbT1vLnByb2dyYW0ocCxoLl92cmVmLGguX2ZyZWYsYixfKTtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClTW3RdPXAuZ2V0VW5pZm9ybUxvY2F0aW9uKGgucHJvZ3JhbSxyW3RdLm5hbWUpfUUoKSxoLl9yZWxpbms9RSxoLnR5cGVzPXt1bmlmb3JtczphKHIpLGF0dHJpYnV0ZXM6YShjKX0saC5hdHRyaWJ1dGVzPWkocCxoLHgsXyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInVuaWZvcm1zIixuKHAsaCxyLFMpKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bmV3IGModCk7cmV0dXJuIGEudXBkYXRlKGUscixuLGkpLGF9fSx7Ii4vbGliL0dMRXJyb3IiOjI5OCwiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiOjI5OSwiLi9saWIvY3JlYXRlLXVuaWZvcm1zIjozMDAsIi4vbGliL3JlZmxlY3QiOjMwMSwiLi9saWIvcnVudGltZS1yZWZsZWN0IjozMDIsIi4vbGliL3NoYWRlci1jYWNoZSI6MzAzfV0sMjk4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zaG9ydE1lc3NhZ2U9ZXx8IiIsdGhpcy5sb25nTWVzc2FnZT1yfHwiIix0aGlzLnJhd0Vycm9yPXR8fCIiLHRoaXMubWVzc2FnZT0iZ2wtc2hhZGVyOiAiKyhlfHx0fHwiIikrKHI/IlxuIityOiIiKSx0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfW4ucHJvdG90eXBlPW5ldyBFcnJvcixuLnByb3RvdHlwZS5uYW1lPSJHTEVycm9yIixuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLGUuZXhwb3J0cz1ufSx7fV0sMjk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIGE9e30sbD0wLGM9ci5sZW5ndGg7bDxjOysrbCl7dmFyIHU9cltsXSxmPXUubmFtZSxoPXUudHlwZSxwPXUubG9jYXRpb25zO3N3aXRjaChoKXtjYXNlImJvb2wiOmNhc2UiaW50IjpjYXNlImZsb2F0IjpvKHQsZSxwWzBdLGksMSxhLGYpO2JyZWFrO2RlZmF1bHQ6aWYoaC5pbmRleE9mKCJ2ZWMiKT49MCl7dmFyIGQ9aC5jaGFyQ29kZUF0KGgubGVuZ3RoLTEpLTQ4O2lmKGQ8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO28odCxlLHBbMF0saSxkLGEsZil9ZWxzZXtpZighKGguaW5kZXhPZigibWF0Iik+PTApKXRocm93IG5ldyBuKCIiLCJVbmtub3duIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO3ZhciBkPWguY2hhckNvZGVBdChoLmxlbmd0aC0xKS00ODtpZihkPDJ8fGQ+NCl0aHJvdyBuZXcgbigiIiwiSW52YWxpZCBkYXRhIHR5cGUgZm9yIGF0dHJpYnV0ZSAiK2YrIjogIitoKTtzKHQsZSxwLGksZCxhLGYpfX19cmV0dXJuIGF9O3ZhciBuPXQoIi4vR0xFcnJvciIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEpe3RoaXMuX2dsPXQsdGhpcy5fd3JhcHBlcj1lLHRoaXMuX2luZGV4PXIsdGhpcy5fbG9jYXRpb25zPW4sdGhpcy5fZGltZW5zaW9uPWksdGhpcy5fY29uc3RGdW5jPWF9dmFyIGE9aS5wcm90b3R5cGU7ZnVuY3Rpb24gbyh0LGUscixuLGEsbyxzKXtmb3IodmFyIGw9WyJnbCIsInYiXSxjPVtdLHU9MDt1PGE7Kyt1KWwucHVzaCgieCIrdSksYy5wdXNoKCJ4Iit1KTtsLnB1c2goImlmKHgwLmxlbmd0aD09PXZvaWQgMCl7cmV0dXJuIGdsLnZlcnRleEF0dHJpYiIrYSsiZih2LCIrYy5qb2luKCkrIil9ZWxzZXtyZXR1cm4gZ2wudmVydGV4QXR0cmliIithKyJmdih2LHgwKX0iKTt2YXIgZj1GdW5jdGlvbi5hcHBseShudWxsLGwpLGg9bmV3IGkodCxlLHIsbixhLGYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHMse3NldDpmdW5jdGlvbihlKXtyZXR1cm4gdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobltyXSksZih0LG5bcl0sZSksZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGh9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhLHMpe2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1uZXcgQXJyYXkoaSksdT0wO3U8aTsrK3Upbyh0LGUsclt1XSxuLGksbCx1KSxjW3VdPWxbdV07T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxvY2F0aW9uIix7c2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXRbZV07ZWxzZSBmb3IoZT0wO2U8aTsrK2UpY1tlXS5sb2NhdGlvbj10K2U7cmV0dXJuIHR9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoaSksZT0wO2U8aTsrK2UpdFtlXT1uW3JbZV1dO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksbC5wb2ludGVyPWZ1bmN0aW9uKGUsYSxvLHMpe2U9ZXx8dC5GTE9BVCxhPSEhYSxvPW98fGkqaSxzPXN8fDA7Zm9yKHZhciBsPTA7bDxpOysrbCl7dmFyIGM9bltyW2xdXTt0LnZlcnRleEF0dHJpYlBvaW50ZXIoYyxpLGUsYSxvLHMrbCppKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpfX07dmFyIGY9bmV3IEFycmF5KGkpLGg9dFsidmVydGV4QXR0cmliIitpKyJmdiJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHMse3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGE9MDthPGk7KythKXt2YXIgbz1uW3JbYV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpaC5jYWxsKHQsbyxlW2FdKTtlbHNle2Zvcih2YXIgcz0wO3M8aTsrK3MpZltzXT1lW2kqYStzXTtoLmNhbGwodCxvLGYpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX1hLnBvaW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZ2wsYT10aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdO2kudmVydGV4QXR0cmliUG9pbnRlcihhLHRoaXMuX2RpbWVuc2lvbix0fHxpLkZMT0FULCEhZSxyfHwwLG58fDApLGkuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSl9LGEuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF0mJih0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdPTB8dCx0aGlzLl93cmFwcGVyLnByb2dyYW09bnVsbCksMHx0fX0pfSx7Ii4vR0xFcnJvciI6Mjk4fV0sMzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcmVmbGVjdCIpLGk9dCgiLi9HTEVycm9yIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJ5IiwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHl9IikodCl9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHQsZSxyKXtzd2l0Y2gocil7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOnJldHVybiJnbC51bmlmb3JtMWkobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2Nhc2UiZmxvYXQiOnJldHVybiJnbC51bmlmb3JtMWYobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2RlZmF1bHQ6dmFyIG49ci5pbmRleE9mKCJ2ZWMiKTtpZighKDA8PW4mJm48PTEmJnIubGVuZ3RoPT09NCtuKSl7aWYoMD09PXIuaW5kZXhPZigibWF0IikmJjQ9PT1yLmxlbmd0aCl7dmFyIGE9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpLTQ4O2lmKGE8Mnx8YT40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCAiK25hbWUrIjogIityKTtyZXR1cm4iZ2wudW5pZm9ybU1hdHJpeCIrYSsiZnYobG9jYXRpb25zWyIrZSsiXSxmYWxzZSxvYmoiK3QrIikifXRocm93IG5ldyBpKCIiLCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciAiK25hbWUrIjogIityKX12YXIgYT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSktNDg7aWYoYTwyfHxhPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgZGF0YSB0eXBlIik7c3dpdGNoKHIuY2hhckF0KDApKXtjYXNlImIiOmNhc2UiaSI6cmV0dXJuImdsLnVuaWZvcm0iK2ErIml2KGxvY2F0aW9uc1siK2UrIl0sb2JqIit0KyIpIjtjYXNlInYiOnJldHVybiJnbC51bmlmb3JtIithKyJmdihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7ZGVmYXVsdDp0aHJvdyBuZXcgaSgiIiwiVW5yZWNvZ25pemVkIGRhdGEgdHlwZSBmb3IgdmVjdG9yICIrbmFtZSsiOiAiK3IpfX19ZnVuY3Rpb24gYyhlKXtmb3IodmFyIG49WyJyZXR1cm4gZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqKXsiXSxpPWZ1bmN0aW9uIHQoZSxyKXtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuW1tlLHJdXTt2YXIgbj1bXTtmb3IodmFyIGkgaW4gcil7dmFyIGE9cltpXSxvPWU7cGFyc2VJbnQoaSkrIiI9PT1pP28rPSJbIitpKyJdIjpvKz0iLiIraSwib2JqZWN0Ij09dHlwZW9mIGE/bi5wdXNoLmFwcGx5KG4sdChvLGEpKTpuLnB1c2goW28sYV0pfXJldHVybiBufSgiIixlKSxhPTA7YTxpLmxlbmd0aDsrK2Epe3ZhciBvPWlbYV0sYz1vWzBdLHU9b1sxXTtzW3VdJiZuLnB1c2gobChjLHUsclt1XS50eXBlKSl9bi5wdXNoKCJyZXR1cm4gb2JqfSIpO3ZhciBmPW5ldyBGdW5jdGlvbigiZ2wiLCJsb2NhdGlvbnMiLG4uam9pbigiXG4iKSk7cmV0dXJuIGYodCxzKX1mdW5jdGlvbiB1KG4sbCx1KXtpZigib2JqZWN0Ij09dHlwZW9mIHUpe3ZhciBoPWYodSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sbCx7Z2V0OmEoaCksc2V0OmModSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KX1lbHNlIHNbdV0/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sbCx7Z2V0OihwPXUsbmV3IEZ1bmN0aW9uKCJnbCIsIndyYXBwZXIiLCJsb2NhdGlvbnMiLCJyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2wuZ2V0VW5pZm9ybSh3cmFwcGVyLnByb2dyYW0sbG9jYXRpb25zWyIrcCsiXSl9IikodCxlLHMpKSxzZXQ6Yyh1KSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pOm5bbF09ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiYm9vbCI6cmV0dXJuITE7Y2FzZSJpbnQiOmNhc2Uic2FtcGxlcjJEIjpjYXNlInNhbXBsZXJDdWJlIjpjYXNlImZsb2F0IjpyZXR1cm4gMDtkZWZhdWx0OnZhciBlPXQuaW5kZXhPZigidmVjIik7aWYoMDw9ZSYmZTw9MSYmdC5sZW5ndGg9PT00K2Upe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9vKHIsITEpOm8ociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDg7aWYocjwyfHxyPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3QpO3JldHVybiBvKHIqciwwKX10aHJvdyBuZXcgaSgiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrdCl9fShyW3VdLnR5cGUpO3ZhciBwfWZ1bmN0aW9uIGYodCl7dmFyIGU7aWYoQXJyYXkuaXNBcnJheSh0KSl7ZT1uZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXUoZSxyLHRbcl0pfWVsc2UgZm9yKHZhciBuIGluIGU9e30sdCl1KGUsbix0W25dKTtyZXR1cm4gZX12YXIgaD1uKHIsITApO3JldHVybntnZXQ6YShmKGgpKSxzZXQ6YyhoKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19fSx7Ii4vR0xFcnJvciI6Mjk4LCIuL3JlZmxlY3QiOjMwMX1dLDMwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLm5hbWUsYT1pLnNwbGl0KCIuIiksbz1yLHM9MDtzPGEubGVuZ3RoOysrcyl7dmFyIGw9YVtzXS5zcGxpdCgiWyIpO2lmKGwubGVuZ3RoPjEpe2xbMF1pbiBvfHwob1tsWzBdXT1bXSksbz1vW2xbMF1dO2Zvcih2YXIgYz0xO2M8bC5sZW5ndGg7KytjKXt2YXIgdT1wYXJzZUludChsW2NdKTtjPGwubGVuZ3RoLTF8fHM8YS5sZW5ndGgtMT8odSBpbiBvfHwoYzxsLmxlbmd0aC0xP29bdV09W106b1t1XT17fSksbz1vW3VdKTpvW3VdPWU/bjp0W25dLnR5cGV9fWVsc2UgczxhLmxlbmd0aC0xPyhsWzBdaW4gb3x8KG9bbFswXV09e30pLG89b1tsWzBdXSk6b1tsWzBdXT1lP246dFtuXS50eXBlfXJldHVybiByfX0se31dLDMwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHQuQUNUSVZFX1VOSUZPUk1TKSxuPVtdLGk9MDtpPHI7KytpKXt2YXIgbz10LmdldEFjdGl2ZVVuaWZvcm0oZSxpKTtpZihvKXt2YXIgcz1hKHQsby50eXBlKTtpZihvLnNpemU+MSlmb3IodmFyIGw9MDtsPG8uc2l6ZTsrK2wpbi5wdXNoKHtuYW1lOm8ubmFtZS5yZXBsYWNlKCJbMF0iLCJbIitsKyJdIiksdHlwZTpzfSk7ZWxzZSBuLnB1c2goe25hbWU6by5uYW1lLHR5cGU6c30pfX1yZXR1cm4gbn0sci5hdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHQuQUNUSVZFX0FUVFJJQlVURVMpLG49W10saT0wO2k8cjsrK2kpe3ZhciBvPXQuZ2V0QWN0aXZlQXR0cmliKGUsaSk7byYmbi5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOmEodCxvLnR5cGUpfSl9cmV0dXJuIG59O3ZhciBuPXtGTE9BVDoiZmxvYXQiLEZMT0FUX1ZFQzI6InZlYzIiLEZMT0FUX1ZFQzM6InZlYzMiLEZMT0FUX1ZFQzQ6InZlYzQiLElOVDoiaW50IixJTlRfVkVDMjoiaXZlYzIiLElOVF9WRUMzOiJpdmVjMyIsSU5UX1ZFQzQ6Iml2ZWM0IixCT09MOiJib29sIixCT09MX1ZFQzI6ImJ2ZWMyIixCT09MX1ZFQzM6ImJ2ZWMzIixCT09MX1ZFQzQ6ImJ2ZWM0IixGTE9BVF9NQVQyOiJtYXQyIixGTE9BVF9NQVQzOiJtYXQzIixGTE9BVF9NQVQ0OiJtYXQ0IixTQU1QTEVSXzJEOiJzYW1wbGVyMkQiLFNBTVBMRVJfQ1VCRToic2FtcGxlckN1YmUifSxpPW51bGw7ZnVuY3Rpb24gYSh0LGUpe2lmKCFpKXt2YXIgcj1PYmplY3Qua2V5cyhuKTtpPXt9O2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbz1yW2FdO2lbdFtvXV09bltvXX19cmV0dXJuIGlbZV19fSx7fV0sMzAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3Iuc2hhZGVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdSh0KS5nZXRTaGFkZXJSZWZlcmVuY2UoZSxyKX0sci5wcm9ncmFtPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHUodCkuZ2V0UHJvZ3JhbShlLHIsbixpKX07dmFyIG49dCgiLi9HTEVycm9yIiksaT10KCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiKSxhPW5ldygidW5kZWZpbmVkIj09dHlwZW9mIFdlYWtNYXA/dCgid2Vha21hcC1zaGltIik6V2Vha01hcCksbz0wO2Z1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dGhpcy5pZD10LHRoaXMuc3JjPWUsdGhpcy50eXBlPXIsdGhpcy5zaGFkZXI9bix0aGlzLmNvdW50PWEsdGhpcy5wcm9ncmFtcz1bXSx0aGlzLmNhY2hlPW99ZnVuY3Rpb24gbCh0KXt0aGlzLmdsPXQsdGhpcy5zaGFkZXJzPVt7fSx7fV0sdGhpcy5wcm9ncmFtcz17fX1zLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoMD09LS10aGlzLmNvdW50KXtmb3IodmFyIHQ9dGhpcy5jYWNoZSxlPXQuZ2wscj10aGlzLnByb2dyYW1zLG49MCxpPXIubGVuZ3RoO248aTsrK24pe3ZhciBhPXQucHJvZ3JhbXNbcltuXV07YSYmKGRlbGV0ZSB0LnByb2dyYW1zW25dLGUuZGVsZXRlUHJvZ3JhbShhKSl9ZS5kZWxldGVTaGFkZXIodGhpcy5zaGFkZXIpLGRlbGV0ZSB0LnNoYWRlcnNbdGhpcy50eXBlPT09ZS5GUkFHTUVOVF9TSEFERVJ8MF1bdGhpcy5zcmNdfX07dmFyIGM9bC5wcm90b3R5cGU7ZnVuY3Rpb24gdSh0KXt2YXIgZT1hLmdldCh0KTtyZXR1cm4gZXx8KGU9bmV3IGwodCksYS5zZXQodCxlKSksZX1jLmdldFNoYWRlclJlZmVyZW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2wsYT10aGlzLnNoYWRlcnNbdD09PXIuRlJBR01FTlRfU0hBREVSfDBdLGw9YVtlXTtpZihsJiZyLmlzU2hhZGVyKGwuc2hhZGVyKSlsLmNvdW50Kz0xO2Vsc2V7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuY3JlYXRlU2hhZGVyKGUpO2lmKHQuc2hhZGVyU291cmNlKGEsciksdC5jb21waWxlU2hhZGVyKGEpLCF0LmdldFNoYWRlclBhcmFtZXRlcihhLHQuQ09NUElMRV9TVEFUVVMpKXt2YXIgbz10LmdldFNoYWRlckluZm9Mb2coYSk7dHJ5e3ZhciBzPWkobyxyLGUpfWNhdGNoKHQpe3Rocm93IGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZvcm1hdCBjb21waWxlciBlcnJvcjogIit0KSxuZXcgbihvLCJFcnJvciBjb21waWxpbmcgc2hhZGVyOlxuIitvKX10aHJvdyBuZXcgbihvLHMuc2hvcnQscy5sb25nKX1yZXR1cm4gYX0ocix0LGUpO2w9YVtlXT1uZXcgcyhvKyssZSx0LGMsW10sMSx0aGlzKX1yZXR1cm4gbH0sYy5nZXRQcm9ncmFtPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPVt0LmlkLGUuaWQsci5qb2luKCI6IiksaS5qb2luKCI6IildLmpvaW4oIkAiKSxvPXRoaXMucHJvZ3JhbXNbYV07cmV0dXJuIG8mJnRoaXMuZ2wuaXNQcm9ncmFtKG8pfHwodGhpcy5wcm9ncmFtc1thXT1vPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89dC5jcmVhdGVQcm9ncmFtKCk7dC5hdHRhY2hTaGFkZXIobyxlKSx0LmF0dGFjaFNoYWRlcihvLHIpO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7KytzKXQuYmluZEF0dHJpYkxvY2F0aW9uKG8sYVtzXSxpW3NdKTtpZih0LmxpbmtQcm9ncmFtKG8pLCF0LmdldFByb2dyYW1QYXJhbWV0ZXIobyx0LkxJTktfU1RBVFVTKSl7dmFyIGw9dC5nZXRQcm9ncmFtSW5mb0xvZyhvKTt0aHJvdyBuZXcgbihsLCJFcnJvciBsaW5raW5nIHByb2dyYW06ICIrbCl9cmV0dXJuIG99KHRoaXMuZ2wsdC5zaGFkZXIsZS5zaGFkZXIscixpKSx0LnByb2dyYW1zLnB1c2goYSksZS5wcm9ncmFtcy5wdXNoKGEpKSxvfX0seyIuL0dMRXJyb3IiOjI5OCwiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIjoyNDYsIndlYWttYXAtc2hpbSI6NTM5fV0sMzA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5wbG90PXQsdGhpcy5lbmFibGU9WyEwLCEwLCExLCExXSx0aGlzLndpZHRoPVsxLDEsMSwxXSx0aGlzLmNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuY2VudGVyPVsxLzAsMS8wXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbih0KTtyZXR1cm4gci51cGRhdGUoZSksdC5hZGRPdmVybGF5KHIpLHJ9O3ZhciBpPW4ucHJvdG90eXBlO2kudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5lbmFibGU9KHQuZW5hYmxlfHxbITAsITAsITEsITFdKS5zbGljZSgpLHRoaXMud2lkdGg9KHQud2lkdGh8fFsxLDEsMSwxXSkuc2xpY2UoKSx0aGlzLmNvbG9yPSh0LmNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KSx0aGlzLmNlbnRlcj0odC5jZW50ZXJ8fFsxLzAsMS8wXSkuc2xpY2UoKSx0aGlzLnBsb3Quc2V0T3ZlcmxheURpcnR5KCl9LGkuZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZW5hYmxlLGU9dGhpcy53aWR0aCxyPXRoaXMuY29sb3Isbj10aGlzLmNlbnRlcixpPXRoaXMucGxvdCxhPWkubGluZSxvPWkuZGF0YUJveCxzPWkudmlld0JveDtpZihhLmJpbmQoKSxvWzBdPD1uWzBdJiZuWzBdPD1vWzJdJiZvWzFdPD1uWzFdJiZuWzFdPD1vWzNdKXt2YXIgbD1zWzBdKyhuWzBdLW9bMF0pLyhvWzJdLW9bMF0pKihzWzJdLXNbMF0pLGM9c1sxXSsoblsxXS1vWzFdKS8ob1szXS1vWzFdKSooc1szXS1zWzFdKTt0WzBdJiZhLmRyYXdMaW5lKGwsYyxzWzBdLGMsZVswXSxyWzBdKSx0WzFdJiZhLmRyYXdMaW5lKGwsYyxsLHNbMV0sZVsxXSxyWzFdKSx0WzJdJiZhLmRyYXdMaW5lKGwsYyxzWzJdLGMsZVsyXSxyWzJdKSx0WzNdJiZhLmRyYXdMaW5lKGwsYyxsLHNbM10sZVszXSxyWzNdKX19LGkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0se31dLDMwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjb29yZGluYXRlc1szXTtcbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIHZlcnRleFBvc2l0aW9uID0gbWl4KGNvb3JkaW5hdGVzWzBdLFxuICAgIG1peChjb29yZGluYXRlc1syXSwgY29vcmRpbmF0ZXNbMV0sIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpLCBhYnMocG9zaXRpb24pKTtcblxuICB2ZWM0IGNsaXBQb3MgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNCh2ZXJ0ZXhQb3NpdGlvbiwgMS4wKTtcbiAgdmVjMiBjbGlwT2Zmc2V0ID0gKHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGNvbG9yLCAwLjApKS54eTtcbiAgdmVjMiBkZWx0YSA9IHdlaWdodCAqIGNsaXBPZmZzZXQgKiBzY3JlZW5TaGFwZTtcbiAgdmVjMiBsaW5lT2Zmc2V0ID0gbm9ybWFsaXplKHZlYzIoZGVsdGEueSwgLWRlbHRhLngpKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uICAgPSB2ZWM0KGNsaXBQb3MueHkgKyBjbGlwUG9zLncgKiAwLjUgKiBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0LCBjbGlwUG9zLnosIGNsaXBQb3Mudyk7XG4gIGZyYWdDb2xvciAgICAgPSBjb2xvci54ICogY29sb3JzWzBdICsgY29sb3IueSAqIGNvbG9yc1sxXSArIGNvbG9yLnogKiBjb2xvcnNbMl07XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn0iXSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjMyJ9LHtuYW1lOiJ3ZWlnaHQiLHR5cGU6ImZsb2F0In1dKX19LHsiZ2wtc2hhZGVyIjoyOTcsZ2xzbGlmeTo0MDF9XSwzMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycy9pbmRleCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Z1bmN0aW9uIG8odCxlLG4saSxhLG8pe3ZhciBzPVt0LGUsbiwwLDAsMCwxXTtzW2krM109MSxzW2ldPWEsci5wdXNoLmFwcGx5KHIscyksc1s2XT0tMSxyLnB1c2guYXBwbHkocixzKSxzW2ldPW8sci5wdXNoLmFwcGx5KHIscyksci5wdXNoLmFwcGx5KHIscyksc1s2XT0xLHIucHVzaC5hcHBseShyLHMpLHNbaV09YSxyLnB1c2guYXBwbHkocixzKX1vKDAsMCwwLDAsMCwxKSxvKDAsMCwwLDEsMCwxKSxvKDAsMCwwLDIsMCwxKSxvKDEsMCwwLDEsLTEsMSksbygxLDAsMCwyLC0xLDEpLG8oMCwxLDAsMCwtMSwxKSxvKDAsMSwwLDIsLTEsMSksbygwLDAsMSwwLC0xLDEpLG8oMCwwLDEsMSwtMSwxKTt2YXIgbD1uKHQsciksYz1pKHQsW3t0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZToyOH1dKSx1PWEodCk7dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsdS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsdS5hdHRyaWJ1dGVzLndlaWdodC5sb2NhdGlvbj0yO3ZhciBmPW5ldyBzKHQsbCxjLHUpO3JldHVybiBmLnVwZGF0ZShlKSxmfTt2YXIgbz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMWUzLC0xZTMsLTFlM10sWzFlMywxZTMsMWUzXV0sdGhpcy5wb3NpdGlvbj1bMCwwLDBdLHRoaXMubGluZVdpZHRoPVsyLDIsMl0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMuYXhlcz1udWxsfXZhciBsPXMucHJvdG90eXBlLGM9WzAsMCwwXSx1PVswLDAsMF0sZj1bMCwwXTtsLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fSxsLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMudmFvLG49dGhpcy5zaGFkZXI7ci5iaW5kKCksbi5iaW5kKCk7dmFyIGksYT10Lm1vZGVsfHxvLHM9dC52aWV3fHxvLGw9dC5wcm9qZWN0aW9ufHxvO3RoaXMuYXhlcyYmKGk9dGhpcy5heGVzLmxhc3RDdWJlUHJvcHMuYXhpcyk7Zm9yKHZhciBoPWMscD11LGQ9MDtkPDM7KytkKWkmJmlbZF08MD8oaFtkXT10aGlzLmJvdW5kc1swXVtkXSxwW2RdPXRoaXMuYm91bmRzWzFdW2RdKTooaFtkXT10aGlzLmJvdW5kc1sxXVtkXSxwW2RdPXRoaXMuYm91bmRzWzBdW2RdKTtmWzBdPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09ZS5kcmF3aW5nQnVmZmVySGVpZ2h0LG4udW5pZm9ybXMubW9kZWw9YSxuLnVuaWZvcm1zLnZpZXc9cyxuLnVuaWZvcm1zLnByb2plY3Rpb249bCxuLnVuaWZvcm1zLmNvb3JkaW5hdGVzPVt0aGlzLnBvc2l0aW9uLGgscF0sbi51bmlmb3Jtcy5jb2xvcnM9dGhpcy5jb2xvcnMsbi51bmlmb3Jtcy5zY3JlZW5TaGFwZT1mO2ZvcihkPTA7ZDwzOysrZCluLnVuaWZvcm1zLmxpbmVXaWR0aD10aGlzLmxpbmVXaWR0aFtkXSp0aGlzLnBpeGVsUmF0aW8sdGhpcy5lbmFibGVkW2RdJiYoci5kcmF3KGUuVFJJQU5HTEVTLDYsNipkKSx0aGlzLmRyYXdTaWRlc1tkXSYmci5kcmF3KGUuVFJJQU5HTEVTLDEyLDE4KzEyKmQpKTtyLnVuYmluZCgpfSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0JiYoImJvdW5kcyJpbiB0JiYodGhpcy5ib3VuZHM9dC5ib3VuZHMpLCJwb3NpdGlvbiJpbiB0JiYodGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImNvbG9ycyJpbiB0JiYodGhpcy5jb2xvcnM9dC5jb2xvcnMpLCJlbmFibGVkImluIHQmJih0aGlzLmVuYWJsZWQ9dC5lbmFibGVkKSwiZHJhd1NpZGVzImluIHQmJih0aGlzLmRyYXdTaWRlcz10LmRyYXdTaWRlcykpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4IjozMDUsImdsLWJ1ZmZlciI6MjM3LCJnbC12YW8iOjMxOX1dLDMwNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgdHViZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSB0dWJlIHJpbmcgd2l0aCBpdHMgY2VudGVyIGF0IG9yaWdpbiwgcmFkaXVzIG9mIGxlbmd0aChkKSwgcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiBkLlxuLy9cbi8vIEVhY2ggdHViZSBzZWdtZW50IGlzIG1hZGUgdXAgb2YgYSByaW5nIG9mIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSB0dWJlIGJ5IGNvbm5lY3RpbmcgdGhlbSB0b2dldGhlciBpbiB0aGUgdmVydGV4IGFycmF5LlxuLy8gVGhlIGluZGV4ZXMgb2YgdHViZSBzZWdtZW50cyBydW4gZnJvbSAwIHRvIDguXG4vL1xudmVjMyBnZXRUdWJlUG9zaXRpb24odmVjMyBkLCBmbG9hdCBpbmRleCwgb3V0IHZlYzMgbm9ybWFsKSB7XG4gIGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoaW5kZXggLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHYzID0geCArIHk7XG5cbiAgbm9ybWFsID0gbm9ybWFsaXplKHYzKTtcblxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yLCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZTtcbnVuaWZvcm0gZmxvYXQgdHViZVNjYWxlO1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvblxuICAgICAgICAgICAsIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YVxuICAgICAgICAgICAsIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIC8vIFNjYWxlIHRoZSB2ZWN0b3IgbWFnbml0dWRlIHRvIHN0YXkgY29uc3RhbnQgd2l0aFxuICAvLyBtb2RlbCAmIHZpZXcgY2hhbmdlcy5cbiAgdmVjMyBub3JtYWw7XG4gIHZlYzMgWFlaID0gZ2V0VHViZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKHR1YmVTY2FsZSAqIHZlY3Rvci53ICogbm9ybWFsaXplKHZlY3Rvci54eXopKSwgcG9zaXRpb24udywgbm9ybWFsKTtcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB0dWJlUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xuXG4gIC8vIHZlYzQgbV9wb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQodHViZVBvc2l0aW9uLCAxLjApO1xuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3Rpb24gKiB0X3Bvc2l0aW9uO1xuXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9kYXRhICAgICAgICAgICA9IHR1YmVQb3NpdGlvbi54eXo7XG4gIGZfcG9zaXRpb24gICAgICAgPSBwb3NpdGlvbi54eXo7XG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcbn1cbiJdKSxhPW4oWyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcblxuICAvL0ZyZXNuZWwgdGVybVxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcblxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzc1xuICAgICAgICAgICAgLCBmcmVzbmVsXG4gICAgICAgICAgICAsIGthbWJpZW50XG4gICAgICAgICAgICAsIGtkaWZmdXNlXG4gICAgICAgICAgICAsIGtzcGVjdWxhclxuICAgICAgICAgICAgLCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXG4gICAgICAgICAgICwgZl9saWdodERpcmVjdGlvblxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9kYXRhXG4gICAgICAgICAgICwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHR1YmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cbi8vXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cbi8vIFRoZSBpbmRleGVzIG9mIHR1YmUgc2VnbWVudHMgcnVuIGZyb20gMCB0byA4LlxuLy9cbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xuICBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB2MyA9IHggKyB5O1xuXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XG5cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IHR1YmVTY2FsZTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uLnh5ejtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWM0In1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWM0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In0se25hbWU6InZlY3RvciIsdHlwZToidmVjNCJ9XX19LHtnbHNsaWZ5OjQwMX1dLDMwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJnbC10ZXh0dXJlMmQiKSxzPXQoIm5vcm1hbHMiKSxsPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxjPXQoImdsLW1hdDQvaW52ZXJ0IiksdT10KCJuZGFycmF5IiksZj10KCJjb2xvcm1hcCIpLGg9dCgic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXIiKSxwPXQoInR5cGVkYXJyYXktcG9vbCIpLGQ9dCgiLi9zaGFkZXJzIiksZz1kLm1lc2hTaGFkZXIsdj1kLnBpY2tTaGFkZXIsbT1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24geSh0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxnLHYseSx4LGIsXyx3LGssVCl7dGhpcy5nbD10LHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMucGlja1NoYWRlcj1uLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9aSx0aGlzLnRyaWFuZ2xlVmVjdG9ycz1hLHRoaXMudHJpYW5nbGVDb2xvcnM9cyx0aGlzLnRyaWFuZ2xlTm9ybWFscz1jLHRoaXMudHJpYW5nbGVVVnM9bCx0aGlzLnRyaWFuZ2xlSWRzPW8sdGhpcy50cmlhbmdsZVZBTz11LHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWYsdGhpcy5lZGdlQ29sb3JzPXAsdGhpcy5lZGdlVVZzPWQsdGhpcy5lZGdlSWRzPWgsdGhpcy5lZGdlVkFPPWcsdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXYsdGhpcy5wb2ludENvbG9ycz14LHRoaXMucG9pbnRVVnM9Yix0aGlzLnBvaW50U2l6ZXM9Xyx0aGlzLnBvaW50SWRzPXksdGhpcy5wb2ludFZBTz13LHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1rLHRoaXMuY29udG91clZBTz1ULHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITEsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy50dWJlU2NhbGU9MSx0aGlzLl9tb2RlbD1tLHRoaXMuX3ZpZXc9bSx0aGlzLl9wcm9qZWN0aW9uPW0sdGhpcy5fcmVzb2x1dGlvbj1bMSwxXSx0aGlzLnBpeGVsUmF0aW89MX12YXIgeD15LnByb3RvdHlwZTtmdW5jdGlvbiBiKHQpe3ZhciBlPW4odCx2LnZlcnRleCx2LmZyYWdtZW50LG51bGwsdi5hdHRyaWJ1dGVzKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj01LGV9eC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHguaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0seC5waWNrU2xvdHM9MSx4LnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHguaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWgodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGY9Y1swXTsyPT09Yy5sZW5ndGgmJihmPWNbdV0pO2Zvcih2YXIgZD1uW2ZdWzBdLGc9bltmXVsxXSx2PWlbZl0sbT0xLXYseT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW2ddLGI9MDtiPDM7KytiKW9bcysrXT12KnlbYl0rbSp4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSx4LnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCwiY29udG91ckVuYWJsZSJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwibGlnaHRQb3NpdGlvbiJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLCJhbWJpZW50ImluIHQmJih0aGlzLmFtYmllbnRMaWdodD10LmFtYmllbnQpLCJkaWZmdXNlImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLCJzcGVjdWxhciJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLCJyb3VnaG5lc3MiaW4gdCYmKHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzKSwiZnJlc25lbCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0KXtmb3IodmFyIGU9Zih7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIGk9ZVtuXSxhPTA7YTwzOysrYSlyWzQqbithXT1pW2FdO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiB1KHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXApKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzO2lmKG4mJnImJmkpe3ZvaWQgMCE9PXQudHViZVNjYWxlJiYodGhpcy50dWJlU2NhbGU9dC50dWJlU2NhbGUpO3ZhciBhPVtdLGw9W10sYz1bXSxoPVtdLHA9W10sZD1bXSxnPVtdLHY9W10sbT1bXSx5PVtdLHg9W10sYj1bXSxfPVtdLHc9W10saz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bix0aGlzLnZlY3RvcnM9aTt2YXIgVD10LnZlcnRleE5vcm1hbHMsQT10LmNlbGxOb3JtYWxzLE09dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sUz12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhQSYmKEE9cy5mYWNlTm9ybWFscyhyLG4sUykpLEF8fFR8fChUPXMudmVydGV4Tm9ybWFscyhyLG4sTSkpO3ZhciBFPXQudmVydGV4Q29sb3JzLEM9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSx6PXQudmVydGV4VVZzLE89dC52ZXJ0ZXhJbnRlbnNpdHksST10LmNlbGxVVnMsRD10LmNlbGxJbnRlbnNpdHksUD0xLzAsUj0tMS8wO2lmKCF6JiYhSSlpZihPKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKVA9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLFI9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBGPTA7RjxPLmxlbmd0aDsrK0Ype3ZhciBCPU9bRl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX1lbHNlIGlmKEQpZm9yKEY9MDtGPEQubGVuZ3RoOysrRil7Qj1EW0ZdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9ZWxzZSBmb3IoRj0wO0Y8bi5sZW5ndGg7KytGKXtCPW5bRl1bMl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX10aGlzLmludGVuc2l0eT1PfHwoRD9mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPTA7dmFyIGE9dC5sZW5ndGg7Zm9yKGk9MDtpPGE7KytpKWZvcih2YXIgbz10W2ldLHM9MDtzPG8ubGVuZ3RoOysrcyluW29bc11dPXJbaV07cmV0dXJuIG59KHIsbi5sZW5ndGgsRCk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obikpO3ZhciBOPXQucG9pbnRTaXplcyxqPXQucG9pbnRTaXplfHwxO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihGPTA7RjxuLmxlbmd0aDsrK0YpZm9yKHZhciBWPW5bRl0sVT0wO1U8MzsrK1UpIWlzTmFOKFZbVV0pJiZpc0Zpbml0ZShWW1VdKSYmKHRoaXMuYm91bmRzWzBdW1VdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW1VdLFZbVV0pLHRoaXMuYm91bmRzWzFdW1VdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW1VdLFZbVV0pKTt2YXIgcT0wLEg9MCxHPTA7dDpmb3IoRj0wO0Y8ci5sZW5ndGg7KytGKXt2YXIgWT1yW0ZdO3N3aXRjaChZLmxlbmd0aCl7Y2FzZSAxOmZvcihWPW5bWD1ZWzBdXSxVPTA7VTwzOysrVSlpZihpc05hTihWW1VdKXx8IWlzRmluaXRlKFZbVV0pKWNvbnRpbnVlIHQ7eC5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD9iLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0sXy5wdXNoKCRbMF0sJFsxXSksTj93LnB1c2goTltYXSk6dy5wdXNoKGopLGsucHVzaChGKSxHKz0xO2JyZWFrO2Nhc2UgMjpmb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVlbVV1dO2Zvcih2YXIgVz0wO1c8MzsrK1cpaWYoaXNOYU4oVltXXSl8fCFpc0Zpbml0ZShWW1ddKSljb250aW51ZSB0fWZvcihVPTA7VTwyOysrVSl7Vj1uW1g9WVtVXV07Zy5wdXNoKFZbMF0sVlsxXSxWWzJdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/di5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOnYucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLG0ucHVzaCgkWzBdLCRbMV0pLHkucHVzaChGKX1IKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVT0wO1U8MzsrK1UpZm9yKFY9bltYPVlbVV1dLFc9MDtXPDM7KytXKWlmKGlzTmFOKFZbV10pfHwhaXNGaW5pdGUoVltXXSkpY29udGludWUgdDtmb3IoVT0wO1U8MzsrK1Upe3ZhciBYO1Y9bltYPVlbMi1VXV07YS5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pO3ZhciBaLCQsSixLPWlbWF07bC5wdXNoKEtbMF0sS1sxXSxLWzJdLEtbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD9jLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yy5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0scC5wdXNoKCRbMF0sJFsxXSksSj1UP1RbWF06QVtGXSxoLnB1c2goSlswXSxKWzFdLEpbMl0pLGQucHVzaChGKX1xKz0xfX10aGlzLnBvaW50Q291bnQ9Ryx0aGlzLmVkZ2VDb3VudD1ILHRoaXMudHJpYW5nbGVDb3VudD1xLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKHgpLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKGIpLHRoaXMucG9pbnRVVnMudXBkYXRlKF8pLHRoaXMucG9pbnRTaXplcy51cGRhdGUodyksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGspKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKGcpLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUodiksdGhpcy5lZGdlVVZzLnVwZGF0ZShtKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheSh5KSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVZlY3RvcnMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKHApLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShoKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZCkpfX0seC5kcmF3VHJhbnNwYXJlbnQ9eC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxtLG49dC52aWV3fHxtLGk9dC5wcm9qZWN0aW9ufHxtLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6bS5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUsY29udG91ckNvbG9yOnRoaXMuY29udG91ckNvbG9yLHRleHR1cmU6MH07cy5pbnZlcnNlTW9kZWw9YyhzLmludmVyc2VNb2RlbCxzLm1vZGVsKSxlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpLHRoaXMudGV4dHVyZS5iaW5kKDApO3ZhciB1PW5ldyBBcnJheSgxNik7bCh1LHMudmlldyxzLm1vZGVsKSxsKHUscy5wcm9qZWN0aW9uLHUpLGModSx1KTtmb3Iobz0wO288MzsrK28pcy5leWVQb3NpdGlvbltvXT11WzEyK29dL3VbMTVdO3ZhciBmPXVbMTVdO2ZvcihvPTA7bzwzOysrbylmKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIGg9dVsxMitvXSxwPTA7cDwzOysrcCloKz11WzQqcCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bcF07cy5saWdodFBvc2l0aW9uW29dPWgvZn1pZih0aGlzLnRyaWFuZ2xlQ291bnQ+MCl7dmFyIGQ9dGhpcy50cmlTaGFkZXI7ZC5iaW5kKCksZC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpfX0seC5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bSxuPXQudmlld3x8bSxpPXQucHJvamVjdGlvbnx8bSxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHR1YmVTY2FsZTp0aGlzLnR1YmVTY2FsZSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fSxsPXRoaXMucGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSl9LHgucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyk7cmV0dXJue2luZGV4OmUscG9zaXRpb246bixpbnRlbnNpdHk6dGhpcy5pbnRlbnNpdHlbclsxXV0sdmVsb2NpdHk6dGhpcy52ZWN0b3JzW3JbMV1dLnNsaWNlKDAsMyksZGl2ZXJnZW5jZTp0aGlzLnZlY3RvcnNbclsxXV1bM10sZGF0YUNvb3JkaW5hdGU6bn19LHguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50cmlTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZBTy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZlY3RvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHI9ZS50cmlTaGFkZXJ8fGZ1bmN0aW9uKHQpe3ZhciBlPW4odCxnLnZlcnRleCxnLmZyYWdtZW50LG51bGwsZy5hdHRyaWJ1dGVzKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj01LGV9KHQpLHM9Yih0KSxsPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7bC5nZW5lcmF0ZU1pcG1hcCgpLGwubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIsbC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGM9aSh0KSxmPWkodCksaD1pKHQpLHA9aSh0KSxkPWkodCksdj1pKHQpLG09YSh0LFt7YnVmZmVyOmMsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp2LHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOmgsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpwLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmYsdHlwZTp0LkZMT0FULHNpemU6NH1dKSx4PWkodCksXz1pKHQpLHc9aSh0KSxrPWkodCksVD1hKHQsW3tidWZmZXI6eCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmssdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Xyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSxBPWkodCksTT1pKHQpLFM9aSh0KSxFPWkodCksQz1pKHQpLEw9YSh0LFt7YnVmZmVyOkEsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpDLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOk0sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpTLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6RSx0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLHo9aSh0KSxPPW5ldyB5KHQsbCxyLHMsYyxmLHYsaCxwLGQsbSx4LGssXyx3LFQsQSxDLE0sUyxFLEwseixhKHQsW3tidWZmZXI6eix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pKTtyZXR1cm4gTy51cGRhdGUoZSksT319LHsiLi9zaGFkZXJzIjozMDcsY29sb3JtYXA6MTE2LCJnbC1idWZmZXIiOjIzNywiZ2wtbWF0NC9pbnZlcnQiOjI2MSwiZ2wtbWF0NC9tdWx0aXBseSI6MjYzLCJnbC1zaGFkZXIiOjI5NywiZ2wtdGV4dHVyZTJkIjozMTQsImdsLXZhbyI6MzE5LG5kYXJyYXk6NDQyLG5vcm1hbHM6NDQ1LCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91ciI6NTAyLCJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDMwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC12ZWMzIiksaT10KCJnbC12ZWM0IiksYT1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10udmVsb2NpdGllcyxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PW4ubGVuZ3RoKGxbY10pO3U+byYmKG89dSl9dmFyIGY9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbCxjPXQucG9pbnRzLHU9dC52ZWxvY2l0aWVzLGY9dC5kaXZlcmdlbmNlcztuLnNldChuLmNyZWF0ZSgpLDAsMSwwKSxuLmNyZWF0ZSgpLG4uY3JlYXRlKCk7bi5jcmVhdGUoKTtmb3IodmFyIGg9W10scD1bXSxkPVtdLGc9W10sdj1bXSxtPVtdLHk9MCx4PTAsYj1pLmNyZWF0ZSgpLF89aS5jcmVhdGUoKSx3PTA7dzxjLmxlbmd0aDt3Kyspe289Y1t3XSxzPXVbd10sbD1mW3ddLDA9PT1lJiYobD0uMDUqcikseD1uLmxlbmd0aChzKS9hLGI9aS5jcmVhdGUoKSxuLmNvcHkoYixzKSxiWzNdPWw7Zm9yKHZhciBrPTA7azw4O2srKyl2W2tdPVtvWzBdLG9bMV0sb1syXSxrXTtpZihnLmxlbmd0aD4wKWZvcihrPTA7azw4O2srKyl7dmFyIFQ9KGsrMSklODtoLnB1c2goZ1trXSx2W2tdLHZbVF0sdltUXSxnW1RdLGdba10pLGQucHVzaChfLGIsYixiLF8sXyksbS5wdXNoKHkseCx4LHgseSx5KSxwLnB1c2goW2gubGVuZ3RoLTYsaC5sZW5ndGgtNSxoLmxlbmd0aC00XSxbaC5sZW5ndGgtMyxoLmxlbmd0aC0yLGgubGVuZ3RoLTFdKX12YXIgQT1nO2c9dix2PUEsQT1fLF89YixiPUEsQT15LHk9eCx4PUF9cmV0dXJue3Bvc2l0aW9uczpoLGNlbGxzOnAsdmVjdG9yczpkLHZlcnRleEludGVuc2l0eTptfX0odCxyLGEsbyl9KSxoPVtdLHA9W10sZD1bXSxnPVtdO2ZvcihzPTA7czxmLmxlbmd0aDtzKyspe3ZhciB2PWZbc10sbT1oLmxlbmd0aDtoPWguY29uY2F0KHYucG9zaXRpb25zKSxkPWQuY29uY2F0KHYudmVjdG9ycyksZz1nLmNvbmNhdCh2LnZlcnRleEludGVuc2l0eSk7Zm9yKGM9MDtjPHYuY2VsbHMubGVuZ3RoO2MrKyl7dmFyIHk9di5jZWxsc1tjXSx4PVtdO3AucHVzaCh4KTtmb3IodmFyIGI9MDtiPHkubGVuZ3RoO2IrKyl4LnB1c2goeVtiXSttKX19cmV0dXJue3Bvc2l0aW9uczpoLGNlbGxzOnAsdmVjdG9yczpkLHZlcnRleEludGVuc2l0eTpnLGNvbG9ybWFwOmV9fSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5jcmVhdGUoKSxpPTFlLTQ7bi5hZGQocix0LFtpLDAsMF0pO3ZhciBhPXRoaXMuZ2V0VmVsb2NpdHkocik7bi5zdWJ0cmFjdChhLGEsZSksbi5zY2FsZShhLGEsMWU0KSxuLmFkZChyLHQsWzAsaSwwXSk7dmFyIG89dGhpcy5nZXRWZWxvY2l0eShyKTtuLnN1YnRyYWN0KG8sbyxlKSxuLnNjYWxlKG8sbywxZTQpLG4uYWRkKHIsdCxbMCwwLGldKTt2YXIgcz10aGlzLmdldFZlbG9jaXR5KHIpO3JldHVybiBuLnN1YnRyYWN0KHMscyxlKSxuLnNjYWxlKHMscywxZTQpLG4uYWRkKHIsYSxvKSxuLmFkZChyLHIscykscn0scz1mdW5jdGlvbih0KXtyZXR1cm4gaCh0LHRoaXMudmVjdG9ycyx0aGlzLm1lc2hncmlkLHRoaXMuY2xhbXBCb3JkZXJzKX0sbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKG49PT1lKXJldHVybiByO2lmKG4+ZSlyZXR1cm4gci0xfXJldHVybiByfSxjPW4uY3JlYXRlKCksdT1uLmNyZWF0ZSgpLGY9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxoPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXRbMF0sbz10WzFdLHM9dFsyXSxoPXJbMF0ubGVuZ3RoLHA9clsxXS5sZW5ndGgsZD1yWzJdLmxlbmd0aCxnPWwoclswXSxhKSx2PWwoclsxXSxvKSxtPWwoclsyXSxzKSx5PWcrMSx4PXYrMSxiPW0rMTtpZihyWzBdW2ddPT09YSYmKHk9ZyksclsxXVt2XT09PW8mJih4PXYpLHJbMl1bbV09PT1zJiYoYj1tKSxpJiYoZz1mKGcsMCxoLTEpLHk9Zih5LDAsaC0xKSx2PWYodiwwLHAtMSkseD1mKHgsMCxwLTEpLG09ZihtLDAsZC0xKSxiPWYoYiwwLGQtMSkpLGc8MHx8djwwfHxtPDB8fHk+PWh8fHg+PXB8fGI+PWQpcmV0dXJuIG4uY3JlYXRlKCk7dmFyIF89KGEtclswXVtnXSkvKHJbMF1beV0tclswXVtnXSksdz0oby1yWzFdW3ZdKS8oclsxXVt4XS1yWzFdW3ZdKSxrPShzLXJbMl1bbV0pLyhyWzJdW2JdLXJbMl1bbV0pOyhfPDB8fF8+MXx8aXNOYU4oXykpJiYoXz0wKSwodzwwfHx3PjF8fGlzTmFOKHcpKSYmKHc9MCksKGs8MHx8az4xfHxpc05hTihrKSkmJihrPTApO3ZhciBUPW0qaCpwLEE9YipoKnAsTT12KmgsUz14KmgsRT1nLEM9eSxMPWVbTStUK0VdLHo9ZVtNK1QrQ10sTz1lW1MrVCtFXSxJPWVbUytUK0NdLEQ9ZVtNK0ErRV0sUD1lW00rQStDXSxSPWVbUytBK0VdLEY9ZVtTK0ErQ10sQj1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoQixMLHosXyksbi5sZXJwKGMsTyxJLF8pLG4ubGVycChCLEIsYyx3KSxuLmxlcnAoYyxELFAsXyksbi5sZXJwKHUsUixGLF8pLG4ubGVycChjLGMsdSx3KSxuLmxlcnAoQixCLGMsayksQn0scD1mdW5jdGlvbih0KXt2YXIgZT0xLzA7dC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1NYXRoLmFicyh0W3JdLXRbci0xXSk7bjxlJiYoZT1uKX1yZXR1cm4gZX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGluZ1Bvc2l0aW9ucyxpPXQubWF4TGVuZ3RofHwxZTMsbD10LnR1YmVTaXplfHwxLGM9dC5hYnNvbHV0ZVR1YmVTaXplO3QuZ2V0RGl2ZXJnZW5jZXx8KHQuZ2V0RGl2ZXJnZW5jZT1vKSx0LmdldFZlbG9jaXR5fHwodC5nZXRWZWxvY2l0eT1zKSx2b2lkIDA9PT10LmNsYW1wQm9yZGVycyYmKHQuY2xhbXBCb3JkZXJzPSEwKTt2YXIgdT1bXSxmPWVbMF1bMF0saD1lWzBdWzFdLGQ9ZVswXVsyXSxnPWVbMV1bMF0sdj1lWzFdWzFdLG09ZVsxXVsyXSx5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdO3JldHVybiByPj1mJiZyPD1nJiZuPj1oJiZuPD12JiZpPj1kJiZpPD1tfSx4PTEwKm4uZGlzdGFuY2UoZVswXSxlWzFdKS9pLGI9eCp4LF89MSx3PTA7bi5jcmVhdGUoKTtyLmxlbmd0aD49MiYmKF89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10sbj1bXSxpPXt9LGE9e30sbz17fSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc10sYz1sWzBdLHU9bFsxXSxmPWxbMl07aVtjXXx8KGUucHVzaChjKSxpW2NdPSEwKSxhW3VdfHwoci5wdXNoKHUpLGFbdV09ITApLG9bZl18fChuLnB1c2goZiksb1tmXT0hMCl9dmFyIGg9cChlKSxkPXAociksZz1wKG4pLHY9TWF0aC5taW4oaCxkLGcpO3JldHVybiBpc0Zpbml0ZSh2KT92OjF9KHIpKTtmb3IodmFyIGs9MDtrPHIubGVuZ3RoO2srKyl7dmFyIFQ9bi5jcmVhdGUoKTtuLmNvcHkoVCxyW2tdKTt2YXIgQT1bVF0sTT1bXSxTPXQuZ2V0VmVsb2NpdHkoVCksRT1UO00ucHVzaChTKTt2YXIgQz1bXSxMPXQuZ2V0RGl2ZXJnZW5jZShULFMpOyhEPW4ubGVuZ3RoKEwpKT53JiYhaXNOYU4oRCkmJmlzRmluaXRlKEQpJiYodz1EKSxDLnB1c2goRCksdS5wdXNoKHtwb2ludHM6QSx2ZWxvY2l0aWVzOk0sZGl2ZXJnZW5jZXM6Q30pO2Zvcih2YXIgej0wO3o8MTAwKmkmJkEubGVuZ3RoPGkmJnkoMCxUKTspe3orKzt2YXIgTz1uLmNsb25lKFMpLEk9bi5zcXVhcmVkTGVuZ3RoKE8pO2lmKDA9PT1JKWJyZWFrO2lmKEk+YiYmbi5zY2FsZShPLE8seC9NYXRoLnNxcnQoSSkpLG4uYWRkKE8sTyxUKSxTPXQuZ2V0VmVsb2NpdHkoTyksbi5zcXVhcmVkRGlzdGFuY2UoRSxPKS1iPi0xZS00KmIpe0EucHVzaChPKSxFPU8sTS5wdXNoKFMpO0w9dC5nZXREaXZlcmdlbmNlKE8sUyk7KEQ9bi5sZW5ndGgoTCkpPncmJiFpc05hTihEKSYmaXNGaW5pdGUoRCkmJih3PUQpLEMucHVzaChEKX1UPU99fWZvcihrPTA7azxDLmxlbmd0aDtrKyspe3ZhciBEPUNba107IWlzTmFOKEQpJiZpc0Zpbml0ZShEKXx8KENba109dyl9dmFyIFA9YSh1LHQuY29sb3JtYXAsdyxfKTtyZXR1cm4gYz9QLnR1YmVTY2FsZT1jOigwPT09dyYmKHc9MSksUC50dWJlU2NhbGU9LjUqbCpfL3cpLFB9LGUuZXhwb3J0cy5jcmVhdGVUdWJlTWVzaD10KCIuL2xpYi90dWJlbWVzaCIpfSx7Ii4vbGliL3R1YmVtZXNoIjozMDgsImdsLXZlYzMiOjMzOCwiZ2wtdmVjNCI6Mzc0fV0sMzEwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbHNsaWZ5IiksYT1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgdmVjMyBmO1xuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbiwgZXllUG9zaXRpb247XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbG9jYWxDb29yZGluYXRlID0gdmVjMyh1di56dywgZi54KTtcbiAgd29ybGRDb29yZGluYXRlID0gb2JqZWN0T2Zmc2V0ICsgbG9jYWxDb29yZGluYXRlO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIGtpbGwgPSBmLnk7XG4gIHZhbHVlID0gZi56O1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di54eTtcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBleWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIHN1cmZhY2VOb3JtYWwgID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwKSAqIGludmVyc2VNb2RlbCkueHl6KTtcbn1cbiJdKSxvPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGJlY2ttYW5uU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MpIHtcbiAgcmV0dXJuIGJlY2ttYW5uRGlzdHJpYnV0aW9uKGRvdChzdXJmYWNlTm9ybWFsLCBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKSksIHJvdWdobmVzcyk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZDtcbnVuaWZvcm0gZmxvYXQgY29udG91clRpbnQ7XG51bmlmb3JtIHZlYzQgY29udG91ckNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgdmVydGV4Q29sb3I7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmICgoa2lsbCA+IDAuMCkgfHxcbiAgICAgIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkQ29vcmRpbmF0ZSkpKSBkaXNjYXJkO1xuXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShzdXJmYWNlTm9ybWFsKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGV5ZURpcmVjdGlvbik7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbik7XG5cbiAgaWYoZ2xfRnJvbnRGYWNpbmcpIHtcbiAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IG1heChiZWNrbWFublNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcyksIDAuKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgLy9kZWNpZGUgaG93IHRvIGludGVycG9sYXRlIGNvbG9yIFx1MjAxNCBpbiB2ZXJ0ZXggb3IgaW4gZnJhZ21lbnRcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPVxuICAgIHN0ZXAodmVydGV4Q29sb3IsIC41KSAqIHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKSArXG4gICAgc3RlcCguNSwgdmVydGV4Q29sb3IpICogdkNvbG9yO1xuXG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBtaXgobGl0Q29sb3IsIGNvbnRvdXJDb2xvciwgY29udG91clRpbnQpICogb3BhY2l0eTtcbn1cbiJdKSxzPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCB1djtcbmF0dHJpYnV0ZSBmbG9hdCBmO1xuXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xudW5pZm9ybSBtYXQzIHBlcm11dGF0aW9uO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBoZWlnaHQsIHpPZmZzZXQ7XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgZGF0YUNvb3JkaW5hdGUgPSBwZXJtdXRhdGlvbiAqIHZlYzModXYueHksIGhlaWdodCk7XG4gIHdvcmxkQ29vcmRpbmF0ZSA9IG9iamVjdE9mZnNldCArIGRhdGFDb29yZGluYXRlO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuXG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjbGlwUG9zaXRpb24ueiArPSB6T2Zmc2V0O1xuXG4gIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICB2YWx1ZSA9IGYgKyBvYmplY3RPZmZzZXQuejtcbiAga2lsbCA9IC0xLjA7XG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnp3O1xuXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcblxuICAvL0Rvbid0IGRvIGxpZ2h0aW5nIGZvciBjb250b3Vyc1xuICBzdXJmYWNlTm9ybWFsICAgPSB2ZWMzKDEsMCwwKTtcbiAgZXllRGlyZWN0aW9uICAgID0gdmVjMygwLDEsMCk7XG4gIGxpZ2h0RGlyZWN0aW9uICA9IHZlYzMoMCwwLDEpO1xufVxuIl0pLGw9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgc3VyZmFjZU5vcm1hbDtcblxudmVjMiBzcGxpdEZsb2F0KGZsb2F0IHYpIHtcbiAgZmxvYXQgdmggPSAyNTUuMCAqIHY7XG4gIGZsb2F0IHVwcGVyID0gZmxvb3IodmgpO1xuICBmbG9hdCBsb3dlciA9IGZyYWN0KHZoKTtcbiAgcmV0dXJuIHZlYzIodXBwZXIgLyAyNTUuMCwgZmxvb3IobG93ZXIgKiAxNi4wKSAvIDE2LjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGlmICgoa2lsbCA+IDAuMCkgfHxcbiAgICAgIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkQ29vcmRpbmF0ZSkpKSBkaXNjYXJkO1xuXG4gIHZlYzIgdXggPSBzcGxpdEZsb2F0KHBsYW5lQ29vcmRpbmF0ZS54IC8gc2hhcGUueCk7XG4gIHZlYzIgdXkgPSBzcGxpdEZsb2F0KHBsYW5lQ29vcmRpbmF0ZS55IC8gc2hhcGUueSk7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCB1eC54LCB1eS54LCB1eC55ICsgKHV5LnkvMTYuMCkpO1xufVxuIl0pO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLG8sbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLGwsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLG8sbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6ImZsb2F0In1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfSxyLmNyZWF0ZVBpY2tDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLGwsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6ImZsb2F0In1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfX0seyJnbC1zaGFkZXIiOjI5NyxnbHNsaWZ5OjQwMX1dLDMxMTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDF9XSwzMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj15KGUpLG49YihlKSxzPXgoZSksbD1fKGUpLGM9aShlKSx1PWEoZSxbe2J1ZmZlcjpjLHNpemU6NCxzdHJpZGU6dyxvZmZzZXQ6MH0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6dyxvZmZzZXQ6MTZ9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOncsb2Zmc2V0OjI4fV0pLGY9aShlKSxoPWEoZSxbe2J1ZmZlcjpmLHNpemU6NCxzdHJpZGU6MjAsb2Zmc2V0OjB9LHtidWZmZXI6ZixzaXplOjEsc3RyaWRlOjIwLG9mZnNldDoxNn1dKSxwPWkoZSksZD1hKGUsW3tidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfV0pLGc9byhlLDEsUyxlLlJHQkEsZS5VTlNJR05FRF9CWVRFKTtnLm1pbkZpbHRlcj1lLkxJTkVBUixnLm1hZ0ZpbHRlcj1lLkxJTkVBUjt2YXIgdj1uZXcgRShlLFswLDBdLFtbMCwwLDBdLFswLDAsMF1dLHIsbixjLHUsZyxzLGwsZixoLHAsZCxbMCwwLDBdKSxtPXtsZXZlbHM6W1tdLFtdLFtdXX07Zm9yKHZhciBrIGluIHQpbVtrXT10W2tdO3JldHVybiBtLmNvbG9ybWFwPW0uY29sb3JtYXB8fCJqZXQiLHYudXBkYXRlKG0pLHZ9O3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJ0eXBlZGFycmF5LXBvb2wiKSxsPXQoImNvbG9ybWFwIiksYz10KCJuZGFycmF5LW9wcyIpLHU9dCgibmRhcnJheS1wYWNrIiksZj10KCJuZGFycmF5IiksaD10KCJzdXJmYWNlLW5ldHMiKSxwPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxkPXQoImdsLW1hdDQvaW52ZXJ0IiksZz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHY9dCgibmRhcnJheS1ncmFkaWVudCIpLG09dCgiLi9saWIvc2hhZGVycyIpLHk9bS5jcmVhdGVTaGFkZXIseD1tLmNyZWF0ZUNvbnRvdXJTaGFkZXIsYj1tLmNyZWF0ZVBpY2tTaGFkZXIsXz1tLmNyZWF0ZVBpY2tDb250b3VyU2hhZGVyLHc9NDAsaz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sVD1bWzAsMF0sWzAsMV0sWzEsMF0sWzEsMV0sWzEsMF0sWzAsMV1dLEE9W1swLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdXTtmdW5jdGlvbiBNKHQsZSxyLG4saSl7dGhpcy5wb3NpdGlvbj10LHRoaXMuaW5kZXg9ZSx0aGlzLnV2PXIsdGhpcy5sZXZlbD1uLHRoaXMuZGF0YUNvb3JkaW5hdGU9aX0hZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7Kyt0KXt2YXIgZT1BW3RdLHI9KHQrMiklMztlWyh0KzEpJTMrMF09MSxlW3IrM109MSxlW3QrNl09MX19KCk7dmFyIFM9MjU2O2Z1bmN0aW9uIEUodCxlLHIsbixpLGEsbyxsLGMsdSxoLHAsZCxnLHYpe3RoaXMuZ2w9dCx0aGlzLnNoYXBlPWUsdGhpcy5ib3VuZHM9cix0aGlzLm9iamVjdE9mZnNldD12LHRoaXMuaW50ZW5zaXR5Qm91bmRzPVtdLHRoaXMuX3NoYWRlcj1uLHRoaXMuX3BpY2tTaGFkZXI9aSx0aGlzLl9jb29yZGluYXRlQnVmZmVyPWEsdGhpcy5fdmFvPW8sdGhpcy5fY29sb3JNYXA9bCx0aGlzLl9jb250b3VyU2hhZGVyPWMsdGhpcy5fY29udG91clBpY2tTaGFkZXI9dSx0aGlzLl9jb250b3VyQnVmZmVyPWgsdGhpcy5fY29udG91clZBTz1wLHRoaXMuX2NvbnRvdXJPZmZzZXRzPVtbXSxbXSxbXV0sdGhpcy5fY29udG91ckNvdW50cz1bW10sW10sW11dLHRoaXMuX3ZlcnRleENvdW50PTAsdGhpcy5fcGlja1Jlc3VsdD1uZXcgTShbMCwwLDBdLFswLDBdLFswLDBdLFswLDAsMF0sWzAsMCwwXSksdGhpcy5fZHluYW1pY0J1ZmZlcj1kLHRoaXMuX2R5bmFtaWNWQU89Zyx0aGlzLl9keW5hbWljT2Zmc2V0cz1bMCwwLDBdLHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmNvbnRvdXJXaWR0aD1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bWzFdLFsxXSxbMV1dLHRoaXMuY29udG91clRpbnQ9WzAsMCwwXSx0aGlzLmNvbnRvdXJDb2xvcj1bWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV1dLHRoaXMuc2hvd0NvbnRvdXI9ITAsdGhpcy5zaG93U3VyZmFjZT0hMCx0aGlzLmVuYWJsZUhpZ2hsaWdodD1bITAsITAsITBdLHRoaXMuaGlnaGxpZ2h0Q29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmhpZ2hsaWdodFRpbnQ9WzEsMSwxXSx0aGlzLmhpZ2hsaWdodExldmVsPVstMSwtMSwtMV0sdGhpcy5lbmFibGVEeW5hbWljPVshMCwhMCwhMF0sdGhpcy5keW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx0aGlzLmR5bmFtaWNDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZHluYW1pY1RpbnQ9WzEsMSwxXSx0aGlzLmR5bmFtaWNXaWR0aD1bMSwxLDFdLHRoaXMuYXhlc0JvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLnN1cmZhY2VQcm9qZWN0PVshMSwhMSwhMV0sdGhpcy5jb250b3VyUHJvamVjdD1bWyExLCExLCExXSxbITEsITEsITFdLFshMSwhMSwhMV1dLHRoaXMuY29sb3JCb3VuZHM9WyExLCExXSx0aGlzLl9maWVsZD1bZihzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxmKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pLGYocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSldLHRoaXMucGlja0lkPTEsdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuc25hcFRvRGF0YT0hMSx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLm9wYWNpdHk9MSx0aGlzLmxpZ2h0UG9zaXRpb249WzEwLDFlNCwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMudmVydGV4Q29sb3I9MCx0aGlzLmRpcnR5PSEwfXZhciBDPUUucHJvdG90eXBlO0MuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0sQy5pc09wYXF1ZT1mdW5jdGlvbigpe2lmKHRoaXMub3BhY2l0eT49MSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PDM7Kyt0KWlmKHRoaXMuX2NvbnRvdXJDb3VudHNbdF0ubGVuZ3RoPjB8fHRoaXMuX2R5bmFtaWNDb3VudHNbdF0+MClyZXR1cm4hMDtyZXR1cm4hMX0sQy5waWNrU2xvdHM9MSxDLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9O3ZhciBMPVswLDAsMF0sej17c2hvd1N1cmZhY2U6ITEsc2hvd0NvbnRvdXI6ITEscHJvamVjdGlvbnM6W2suc2xpY2UoKSxrLnNsaWNlKCksay5zbGljZSgpXSxjbGlwQm91bmRzOltbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXV19O2Z1bmN0aW9uIE8odCxlKXt2YXIgcixuLGksYT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXN8fEwsbz1lLnNob3dTdXJmYWNlLHM9ZS5zaG93Q29udG91cjtmb3Iocj0wO3I8MzsrK3IpZm9yKG89b3x8ZS5zdXJmYWNlUHJvamVjdFtyXSxuPTA7bjwzOysrbilzPXN8fGUuY29udG91clByb2plY3Rbcl1bbl07Zm9yKHI9MDtyPDM7KytyKXt2YXIgbD16LnByb2plY3Rpb25zW3JdO2ZvcihuPTA7bjwxNjsrK24pbFtuXT0wO2ZvcihuPTA7bjw0OysrbilsWzUqbl09MTtsWzUqcl09MCxsWzEyK3JdPWUuYXhlc0JvdW5kc1srKGFbcl0+MCldW3JdLHAobCx0Lm1vZGVsLGwpO3ZhciBjPXouY2xpcEJvdW5kc1tyXTtmb3IoaT0wO2k8MjsrK2kpZm9yKG49MDtuPDM7KytuKWNbaV1bbl09dC5jbGlwQm91bmRzW2ldW25dO2NbMF1bcl09LTFlOCxjWzFdW3JdPTFlOH1yZXR1cm4gei5zaG93U3VyZmFjZT1vLHouc2hvd0NvbnRvdXI9cyx6fXZhciBJPXttb2RlbDprLHZpZXc6ayxwcm9qZWN0aW9uOmssaW52ZXJzZU1vZGVsOmsuc2xpY2UoKSxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLGNvbG9yTWFwOjAsY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxjb250b3VyVGludDowLGNvbnRvdXJDb2xvcjpbMCwwLDAsMV0scGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSx6T2Zmc2V0Oi0xZS00LG9iamVjdE9mZnNldDpbMCwwLDBdLGthbWJpZW50OjEsa2RpZmZ1c2U6MSxrc3BlY3VsYXI6MSxsaWdodFBvc2l0aW9uOlsxZTMsMWUzLDFlM10sZXllUG9zaXRpb246WzAsMCwwXSxyb3VnaG5lc3M6MSxmcmVzbmVsOjEsb3BhY2l0eToxLHZlcnRleENvbG9yOjB9LEQ9ay5zbGljZSgpLFA9WzEsMCwwLDAsMSwwLDAsMCwxXTtmdW5jdGlvbiBSKHQsZSl7dD10fHx7fTt2YXIgcj10aGlzLmdsO3IuZGlzYWJsZShyLkNVTExfRkFDRSksdGhpcy5fY29sb3JNYXAuYmluZCgwKTt2YXIgbj1JO24ubW9kZWw9dC5tb2RlbHx8ayxuLnZpZXc9dC52aWV3fHxrLG4ucHJvamVjdGlvbj10LnByb2plY3Rpb258fGssbi5sb3dlckJvdW5kPVt0aGlzLmJvdW5kc1swXVswXSx0aGlzLmJvdW5kc1swXVsxXSx0aGlzLmNvbG9yQm91bmRzWzBdfHx0aGlzLmJvdW5kc1swXVsyXV0sbi51cHBlckJvdW5kPVt0aGlzLmJvdW5kc1sxXVswXSx0aGlzLmJvdW5kc1sxXVsxXSx0aGlzLmNvbG9yQm91bmRzWzFdfHx0aGlzLmJvdW5kc1sxXVsyXV0sbi5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsbi5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbMF0sbi5pbnZlcnNlTW9kZWw9ZChuLmludmVyc2VNb2RlbCxuLm1vZGVsKTtmb3IodmFyIGk9MDtpPDI7KytpKWZvcih2YXIgYT1uLmNsaXBCb3VuZHNbaV0sbz0wO288MzsrK28pYVtvXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbaV1bb10sLTFlOCksMWU4KTtuLmthbWJpZW50PXRoaXMuYW1iaWVudExpZ2h0LG4ua2RpZmZ1c2U9dGhpcy5kaWZmdXNlTGlnaHQsbi5rc3BlY3VsYXI9dGhpcy5zcGVjdWxhckxpZ2h0LG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzLG4uZnJlc25lbD10aGlzLmZyZXNuZWwsbi5vcGFjaXR5PXRoaXMub3BhY2l0eSxuLmhlaWdodD0wLG4ucGVybXV0YXRpb249UCxuLnZlcnRleENvbG9yPXRoaXMudmVydGV4Q29sb3I7dmFyIHM9RDtmb3IocChzLG4udmlldyxuLm1vZGVsKSxwKHMsbi5wcm9qZWN0aW9uLHMpLGQocyxzKSxpPTA7aTwzOysraSluLmV5ZVBvc2l0aW9uW2ldPXNbMTIraV0vc1sxNV07dmFyIGw9c1sxNV07Zm9yKGk9MDtpPDM7KytpKWwrPXRoaXMubGlnaHRQb3NpdGlvbltpXSpzWzQqaSszXTtmb3IoaT0wO2k8MzsrK2kpe3ZhciBjPXNbMTIraV07Zm9yKG89MDtvPDM7KytvKWMrPXNbNCpvK2ldKnRoaXMubGlnaHRQb3NpdGlvbltvXTtuLmxpZ2h0UG9zaXRpb25baV09Yy9sfXZhciB1PU8obix0aGlzKTtpZih1LnNob3dTdXJmYWNlJiZlPT09dGhpcy5vcGFjaXR5PDEpe2Zvcih0aGlzLl9zaGFkZXIuYmluZCgpLHRoaXMuX3NoYWRlci51bmlmb3Jtcz1uLHRoaXMuX3Zhby5iaW5kKCksdGhpcy5zaG93U3VyZmFjZSYmdGhpcy5fdmVydGV4Q291bnQmJnRoaXMuX3Zhby5kcmF3KHIuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSxpPTA7aTwzOysraSl0aGlzLnN1cmZhY2VQcm9qZWN0W2ldJiZ0aGlzLnZlcnRleENvdW50JiYodGhpcy5fc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbaV0sdGhpcy5fc2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW2ldLHRoaXMuX3Zhby5kcmF3KHIuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKHUuc2hvd0NvbnRvdXImJiFlKXt2YXIgZj10aGlzLl9jb250b3VyU2hhZGVyO24ua2FtYmllbnQ9MSxuLmtkaWZmdXNlPTAsbi5rc3BlY3VsYXI9MCxuLm9wYWNpdHk9MSxmLmJpbmQoKSxmLnVuaWZvcm1zPW47dmFyIGg9dGhpcy5fY29udG91clZBTztmb3IoaC5iaW5kKCksaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMucGVybXV0YXRpb249QVtpXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtpXSp0aGlzLnBpeGVsUmF0aW8pLG89MDtvPHRoaXMuY29udG91ckxldmVsc1tpXS5sZW5ndGg7KytvKW89PT10aGlzLmhpZ2hsaWdodExldmVsW2ldPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W2ldKTowIT09byYmby0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtpXSksdGhpcy5fY29udG91ckNvdW50c1tpXVtvXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tpXVtvXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2ldW29dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2ldW29dKSk7Zm9yKGk9MDtpPDM7KytpKWZvcihmLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbaV0sZi51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSxvPTA7bzwzOysrbylpZih0aGlzLmNvbnRvdXJQcm9qZWN0W2ldW29dKXtmLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbb10sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbb10qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIGc9MDtnPHRoaXMuY29udG91ckxldmVsc1tvXS5sZW5ndGg7KytnKWc9PT10aGlzLmhpZ2hsaWdodExldmVsW29dPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W29dKTowIT09ZyYmZy0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtvXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtvXSksdGhpcy5fY29udG91ckNvdW50c1tvXVtnXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tvXVtnXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW29dW2ddLHRoaXMuX2NvbnRvdXJPZmZzZXRzW29dW2ddKSl9Zm9yKGgudW5iaW5kKCksKGg9dGhpcy5fZHluYW1pY1ZBTykuYmluZCgpLGk9MDtpPDM7KytpKWlmKDAhPT10aGlzLl9keW5hbWljQ291bnRzW2ldKWZvcihmLnVuaWZvcm1zLm1vZGVsPW4ubW9kZWwsZi51bmlmb3Jtcy5jbGlwQm91bmRzPW4uY2xpcEJvdW5kcyxmLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbaV0sci5saW5lV2lkdGgodGhpcy5keW5hbWljV2lkdGhbaV0qdGhpcy5waXhlbFJhdGlvKSxmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmR5bmFtaWNDb2xvcltpXSxmLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuZHluYW1pY1RpbnRbaV0sZi51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5keW5hbWljTGV2ZWxbaV0saC5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSksbz0wO288MzsrK28pdGhpcy5jb250b3VyUHJvamVjdFtvXVtpXSYmKGYudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tvXSxmLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW29dLGguZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbaV0sdGhpcy5fZHluYW1pY09mZnNldHNbaV0pKTtoLnVuYmluZCgpfX1DLmRyYXc9ZnVuY3Rpb24odCl7cmV0dXJuIFIuY2FsbCh0aGlzLHQsITEpfSxDLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gUi5jYWxsKHRoaXMsdCwhMCl9O3ZhciBGPXttb2RlbDprLHZpZXc6ayxwcm9qZWN0aW9uOmssaW52ZXJzZU1vZGVsOmssY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxzaGFwZTpbMCwwXSxwaWNrSWQ6MCxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLHpPZmZzZXQ6MCxvYmplY3RPZmZzZXQ6WzAsMCwwXSxwZXJtdXRhdGlvbjpbMSwwLDAsMCwxLDAsMCwwLDFdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxleWVQb3NpdGlvbjpbMCwwLDBdfTtmdW5jdGlvbiBCKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/W2UodFswXSksZSh0WzFdKSxlKHRbMl0pXTpbZSh0KSxlKHQpLGUodCldfWZ1bmN0aW9uIE4odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Mz09PXQubGVuZ3RoP1t0WzBdLHRbMV0sdFsyXSwxXTpbdFswXSx0WzFdLHRbMl0sdFszXV06WzAsMCwwLDFdfWZ1bmN0aW9uIGoodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm5bTih0WzBdKSxOKHRbMV0pLE4odFsyXSldO3ZhciBlPU4odCk7cmV0dXJuW2Uuc2xpY2UoKSxlLnNsaWNlKCksZS5zbGljZSgpXX19Qy5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKTt2YXIgcj1GO3IubW9kZWw9dC5tb2RlbHx8ayxyLnZpZXc9dC52aWV3fHxrLHIucHJvamVjdGlvbj10LnByb2plY3Rpb258fGssci5zaGFwZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyLnBpY2tJZD10aGlzLnBpY2tJZC8yNTUsci5sb3dlckJvdW5kPXRoaXMuYm91bmRzWzBdLHIudXBwZXJCb3VuZD10aGlzLmJvdW5kc1sxXSxyLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxyLnBlcm11dGF0aW9uPVA7Zm9yKHZhciBuPTA7bjwyOysrbilmb3IodmFyIGk9ci5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlbYV09TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW25dW2FdLC0xZTgpLDFlOCk7dmFyIG89TyhyLHRoaXMpO2lmKG8uc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9waWNrU2hhZGVyLmJpbmQoKSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zPXIsdGhpcy5fdmFvLmJpbmQoKSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksbj0wO248MzsrK24pdGhpcy5zdXJmYWNlUHJvamVjdFtuXSYmKHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKG8uc2hvd0NvbnRvdXIpe3ZhciBzPXRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyO3MuYmluZCgpLHMudW5pZm9ybXM9cjt2YXIgbD10aGlzLl9jb250b3VyVkFPO2ZvcihsLmJpbmQoKSxhPTA7YTwzOysrYSlmb3IoZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKSxzLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbYV0sbj0wO248dGhpcy5jb250b3VyTGV2ZWxzW2FdLmxlbmd0aDsrK24pdGhpcy5fY29udG91ckNvdW50c1thXVtuXSYmKHMudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1thXVtuXSxsLmRyYXcoZS5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2FdW25dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2FdW25dKSk7Zm9yKG49MDtuPDM7KytuKWZvcihzLnVuaWZvcm1zLm1vZGVsPW8ucHJvamVjdGlvbnNbbl0scy51bmlmb3Jtcy5jbGlwQm91bmRzPW8uY2xpcEJvdW5kc1tuXSxhPTA7YTwzOysrYSlpZih0aGlzLmNvbnRvdXJQcm9qZWN0W25dW2FdKXtzLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbYV0sZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIGM9MDtjPHRoaXMuY29udG91ckxldmVsc1thXS5sZW5ndGg7KytjKXRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10mJihzLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbYV1bY10sbC5kcmF3KGUuTElORVMsdGhpcy5fY29udG91ckNvdW50c1thXVtjXSx0aGlzLl9jb250b3VyT2Zmc2V0c1thXVtjXSkpfWwudW5iaW5kKCl9fSxDLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlLHI9dGhpcy5fcGlja1Jlc3VsdCxuPWVbMF0qKHQudmFsdWVbMF0rKHQudmFsdWVbMl0+PjQpLzE2KS8yNTUsaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89ZVsxXSoodC52YWx1ZVsxXSsoMTUmdC52YWx1ZVsyXSkvMTYpLzI1NSxzPU1hdGguZmxvb3IobyksbD1vLXM7aSs9MSxzKz0xO3ZhciBjPXIucG9zaXRpb247Y1swXT1jWzFdPWNbMl09MDtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgZj11P2E6MS1hLGg9MDtoPDI7KytoKWZvcih2YXIgcD1pK3UsZD1zK2gsdj1mKihoP2w6MS1sKSxtPTA7bTwzOysrbSljW21dKz10aGlzLl9maWVsZFttXS5nZXQocCxkKSp2O2Zvcih2YXIgeT10aGlzLl9waWNrUmVzdWx0LmxldmVsLHg9MDt4PDM7Kyt4KWlmKHlbeF09Zy5sZSh0aGlzLmNvbnRvdXJMZXZlbHNbeF0sY1t4XSkseVt4XTwwKXRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGg+MCYmKHlbeF09MCk7ZWxzZSBpZih5W3hdPHRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGgtMSl7dmFyIGI9dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF1dLF89dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF0rMV07TWF0aC5hYnMoYi1jW3hdKT5NYXRoLmFicyhfLWNbeF0pJiYoeVt4XSs9MSl9Zm9yKHIuaW5kZXhbMF09YTwuNT9pOmkrMSxyLmluZGV4WzFdPWw8LjU/czpzKzEsci51dlswXT1uL2VbMF0sci51dlsxXT1vL2VbMV0sbT0wO208MzsrK20pci5kYXRhQ29vcmRpbmF0ZVttXT10aGlzLl9maWVsZFttXS5nZXQoci5pbmRleFswXSxyLmluZGV4WzFdKTtyZXR1cm4gcn0sQy5wYWRGaWVsZD1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2hhcGUuc2xpY2UoKSxuPXQuc2hhcGUuc2xpY2UoKTtjLmFzc2lnbih0LmxvKDEsMSkuaGkoclswXSxyWzFdKSxlKSxjLmFzc2lnbih0LmxvKDEpLmhpKHJbMF0sMSksZS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDEsblsxXS0xKS5oaShyWzBdLDEpLGUubG8oMCxyWzFdLTEpLmhpKHJbMF0sMSkpLGMuYXNzaWduKHQubG8oMCwxKS5oaSgxLHJbMV0pLGUuaGkoMSkpLGMuYXNzaWduKHQubG8oblswXS0xLDEpLmhpKDEsclsxXSksZS5sbyhyWzBdLTEpKSx0LnNldCgwLDAsZS5nZXQoMCwwKSksdC5zZXQoMCxuWzFdLTEsZS5nZXQoMCxyWzFdLTEpKSx0LnNldChuWzBdLTEsMCxlLmdldChyWzBdLTEsMCkpLHQuc2V0KG5bMF0tMSxuWzFdLTEsZS5nZXQoclswXS0xLHJbMV0tMSkpfSxDLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMub2JqZWN0T2Zmc2V0PXQub2JqZWN0T2Zmc2V0fHx0aGlzLm9iamVjdE9mZnNldCx0aGlzLmRpcnR5PSEwLCJjb250b3VyV2lkdGgiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPUIodC5jb250b3VyV2lkdGgsTnVtYmVyKSksInNob3dDb250b3VyImluIHQmJih0aGlzLnNob3dDb250b3VyPUIodC5zaG93Q29udG91cixCb29sZWFuKSksInNob3dTdXJmYWNlImluIHQmJih0aGlzLnNob3dTdXJmYWNlPSEhdC5zaG93U3VyZmFjZSksImNvbnRvdXJUaW50ImluIHQmJih0aGlzLmNvbnRvdXJUaW50PUIodC5jb250b3VyVGludCxCb29sZWFuKSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9aih0LmNvbnRvdXJDb2xvcikpLCJjb250b3VyUHJvamVjdCJpbiB0JiYodGhpcy5jb250b3VyUHJvamVjdD1CKHQuY29udG91clByb2plY3QsZnVuY3Rpb24odCl7cmV0dXJuIEIodCxCb29sZWFuKX0pKSwic3VyZmFjZVByb2plY3QiaW4gdCYmKHRoaXMuc3VyZmFjZVByb2plY3Q9dC5zdXJmYWNlUHJvamVjdCksImR5bmFtaWNDb2xvciJpbiB0JiYodGhpcy5keW5hbWljQ29sb3I9aih0LmR5bmFtaWNDb2xvcikpLCJkeW5hbWljVGludCJpbiB0JiYodGhpcy5keW5hbWljVGludD1CKHQuZHluYW1pY1RpbnQsTnVtYmVyKSksImR5bmFtaWNXaWR0aCJpbiB0JiYodGhpcy5keW5hbWljV2lkdGg9Qih0LmR5bmFtaWNXaWR0aCxOdW1iZXIpKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksImNvbG9yQm91bmRzImluIHQmJih0aGlzLmNvbG9yQm91bmRzPXQuY29sb3JCb3VuZHMpLCJ2ZXJ0ZXhDb2xvciJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCk7dmFyIGU9dC5maWVsZHx8dC5jb29yZHMmJnQuY29vcmRzWzJdfHxudWxsLHI9ITE7aWYoZXx8KGU9dGhpcy5fZmllbGRbMl0uc2hhcGVbMF18fHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzJdP3RoaXMuX2ZpZWxkWzJdLmxvKDEsMSkuaGkodGhpcy5fZmllbGRbMl0uc2hhcGVbMF0tMix0aGlzLl9maWVsZFsyXS5zaGFwZVsxXS0yKTp0aGlzLl9maWVsZFsyXS5oaSgwLDApKSwiZmllbGQiaW4gdHx8ImNvb3JkcyJpbiB0KXt2YXIgaT0oZS5zaGFwZVswXSsyKSooZS5zaGFwZVsxXSsyKTtpPnRoaXMuX2ZpZWxkWzJdLmRhdGEubGVuZ3RoJiYocy5mcmVlRmxvYXQodGhpcy5fZmllbGRbMl0uZGF0YSksdGhpcy5fZmllbGRbMl0uZGF0YT1zLm1hbGxvY0Zsb2F0KG4ubmV4dFBvdzIoaSkpKSx0aGlzLl9maWVsZFsyXT1mKHRoaXMuX2ZpZWxkWzJdLmRhdGEsW2Uuc2hhcGVbMF0rMixlLnNoYXBlWzFdKzJdKSx0aGlzLnBhZEZpZWxkKHRoaXMuX2ZpZWxkWzJdLGUpLHRoaXMuc2hhcGU9ZS5zaGFwZS5zbGljZSgpO2Zvcih2YXIgYT10aGlzLnNoYXBlLG89MDtvPDI7KytvKXRoaXMuX2ZpZWxkWzJdLnNpemU+dGhpcy5fZmllbGRbb10uZGF0YS5sZW5ndGgmJihzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFtvXS5kYXRhKSx0aGlzLl9maWVsZFtvXS5kYXRhPXMubWFsbG9jRmxvYXQodGhpcy5fZmllbGRbMl0uc2l6ZSkpLHRoaXMuX2ZpZWxkW29dPWYodGhpcy5fZmllbGRbb10uZGF0YSxbYVswXSsyLGFbMV0rMl0pO2lmKHQuY29vcmRzKXt2YXIgcD10LmNvb3JkcztpZighQXJyYXkuaXNBcnJheShwKXx8MyE9PXAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCBjb29yZGluYXRlcyBmb3IgeC95Iik7Zm9yKG89MDtvPDI7KytvKXt2YXIgZD1wW29dO2ZvcihiPTA7YjwyOysrYilpZihkLnNoYXBlW2JdIT09YVtiXSl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGNvb3JkcyBoYXZlIGluY29ycmVjdCBzaGFwZSIpO3RoaXMucGFkRmllbGQodGhpcy5fZmllbGRbb10sZCl9fWVsc2UgaWYodC50aWNrcyl7dmFyIGc9dC50aWNrcztpZighQXJyYXkuaXNBcnJheShnKXx8MiE9PWcubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrcyIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIG09Z1tvXTtpZigoQXJyYXkuaXNBcnJheShtKXx8bS5sZW5ndGgpJiYobT1mKG0pKSxtLnNoYXBlWzBdIT09YVtvXSl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgdGljayBsZW5ndGgiKTt2YXIgeT1mKG0uZGF0YSxhKTt5LnN0cmlkZVtvXT1tLnN0cmlkZVswXSx5LnN0cmlkZVsxXm9dPTAsdGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSx5KX19ZWxzZXtmb3Iobz0wO288MjsrK28pe3ZhciB4PVswLDBdO3hbb109MSx0aGlzLl9maWVsZFtvXT1mKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdLHgsMCl9dGhpcy5fZmllbGRbMF0uc2V0KDAsMCwwKTtmb3IodmFyIGI9MDtiPGFbMF07KytiKXRoaXMuX2ZpZWxkWzBdLnNldChiKzEsMCxiKTtmb3IodGhpcy5fZmllbGRbMF0uc2V0KGFbMF0rMSwwLGFbMF0tMSksdGhpcy5fZmllbGRbMV0uc2V0KDAsMCwwKSxiPTA7YjxhWzFdOysrYil0aGlzLl9maWVsZFsxXS5zZXQoMCxiKzEsYik7dGhpcy5fZmllbGRbMV0uc2V0KDAsYVsxXSsxLGFbMV0tMSl9dmFyIF89dGhpcy5fZmllbGQsdz1mKHMubWFsbG9jRmxvYXQoMypfWzJdLnNpemUqMiksWzMsYVswXSsyLGFbMV0rMiwyXSk7Zm9yKG89MDtvPDM7KytvKXYody5waWNrKG8pLF9bb10sIm1pcnJvciIpO3ZhciBrPWYocy5tYWxsb2NGbG9hdCgzKl9bMl0uc2l6ZSksW2FbMF0rMixhWzFdKzIsM10pO2ZvcihvPTA7bzxhWzBdKzI7KytvKWZvcihiPTA7YjxhWzFdKzI7KytiKXt2YXIgQT13LmdldCgwLG8sYiwwKSxNPXcuZ2V0KDAsbyxiLDEpLEU9dy5nZXQoMSxvLGIsMCksQz13LmdldCgxLG8sYiwxKSxMPXcuZ2V0KDIsbyxiLDApLHo9dy5nZXQoMixvLGIsMSksTz1FKnotQypMLEk9TCpNLXoqQSxEPUEqQy1NKkUsUD1NYXRoLnNxcnQoTypPK0kqSStEKkQpO1A8MWUtOD8oUD1NYXRoLm1heChNYXRoLmFicyhPKSxNYXRoLmFicyhJKSxNYXRoLmFicyhEKSkpPDFlLTg/KEQ9MSxJPU89MCxQPTEpOlA9MS9QOlA9MS9NYXRoLnNxcnQoUCksay5zZXQobyxiLDAsTypQKSxrLnNldChvLGIsMSxJKlApLGsuc2V0KG8sYiwyLEQqUCl9cy5mcmVlKHcuZGF0YSk7dmFyIFI9WzEvMCwxLzAsMS8wXSxGPVstMS8wLC0xLzAsLTEvMF0sTj0xLzAsVj0tMS8wLFU9KGFbMF0tMSkqKGFbMV0tMSkqNixxPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MigxMCpVKSksSD0wLEc9MDtmb3Iobz0wO288YVswXS0xOysrbyl0OmZvcihiPTA7YjxhWzFdLTE7KytiKXtmb3IodmFyIFk9MDtZPDI7KytZKWZvcih2YXIgVz0wO1c8MjsrK1cpZm9yKHZhciBYPTA7WDwzOysrWCl7dmFyIFo9dGhpcy5fZmllbGRbWF0uZ2V0KDErbytZLDErYitXKTtpZihpc05hTihaKXx8IWlzRmluaXRlKFopKWNvbnRpbnVlIHR9Zm9yKFg9MDtYPDY7KytYKXt2YXIgJD1vK1RbWF1bMF0sSj1iK1RbWF1bMV0sSz10aGlzLl9maWVsZFswXS5nZXQoJCsxLEorMSksUT10aGlzLl9maWVsZFsxXS5nZXQoJCsxLEorMSk7Wj10aGlzLl9maWVsZFsyXS5nZXQoJCsxLEorMSksTz1rLmdldCgkKzEsSisxLDApLEk9ay5nZXQoJCsxLEorMSwxKSxEPWsuZ2V0KCQrMSxKKzEsMiksdC5pbnRlbnNpdHkmJih0dD10LmludGVuc2l0eS5nZXQoJCxKKSk7dmFyIHR0PXQuaW50ZW5zaXR5P3QuaW50ZW5zaXR5LmdldCgkLEopOlordGhpcy5vYmplY3RPZmZzZXRbMl07cVtIKytdPSQscVtIKytdPUoscVtIKytdPUsscVtIKytdPVEscVtIKytdPVoscVtIKytdPTAscVtIKytdPXR0LHFbSCsrXT1PLHFbSCsrXT1JLHFbSCsrXT1ELFJbMF09TWF0aC5taW4oUlswXSxLK3RoaXMub2JqZWN0T2Zmc2V0WzBdKSxSWzFdPU1hdGgubWluKFJbMV0sUSt0aGlzLm9iamVjdE9mZnNldFsxXSksUlsyXT1NYXRoLm1pbihSWzJdLFordGhpcy5vYmplY3RPZmZzZXRbMl0pLE49TWF0aC5taW4oTix0dCksRlswXT1NYXRoLm1heChGWzBdLEsrdGhpcy5vYmplY3RPZmZzZXRbMF0pLEZbMV09TWF0aC5tYXgoRlsxXSxRK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxGWzJdPU1hdGgubWF4KEZbMl0sWit0aGlzLm9iamVjdE9mZnNldFsyXSksVj1NYXRoLm1heChWLHR0KSxHKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJihOPSt0LmludGVuc2l0eUJvdW5kc1swXSxWPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288SDtvKz0xMClxW29dPShxW29dLU4pLyhWLU4pO3RoaXMuX3ZlcnRleENvdW50PUcsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUocS5zdWJhcnJheSgwLEgpKSxzLmZyZWVGbG9hdChxKSxzLmZyZWUoay5kYXRhKSx0aGlzLmJvdW5kcz1bUixGXSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT1OJiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PVZ8fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1bTixWXX1pZigibGV2ZWxzImluIHQpe3ZhciBldD10LmxldmVscztmb3IoZXQ9QXJyYXkuaXNBcnJheShldFswXSk/ZXQuc2xpY2UoKTpbW10sW10sZXRdLG89MDtvPDM7KytvKWV0W29dPWV0W29dLnNsaWNlKCksZXRbb10uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTtmb3Iobz0wO288MzsrK28pZm9yKGI9MDtiPGV0W29dLmxlbmd0aDsrK2IpZXRbb11bYl0tPXRoaXMub2JqZWN0T2Zmc2V0W29dO3Q6Zm9yKG89MDtvPDM7KytvKXtpZihldFtvXS5sZW5ndGghPT10aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoKXtyPSEwO2JyZWFrfWZvcihiPTA7YjxldFtvXS5sZW5ndGg7KytiKWlmKGV0W29dW2JdIT09dGhpcy5jb250b3VyTGV2ZWxzW29dW2JdKXtyPSEwO2JyZWFrIHR9fXRoaXMuY29udG91ckxldmVscz1ldH1pZihyKXtfPXRoaXMuX2ZpZWxkLGE9dGhpcy5zaGFwZTtmb3IodmFyIHJ0PVtdLG50PTA7bnQ8MzsrK250KXt2YXIgaXQ9dGhpcy5jb250b3VyTGV2ZWxzW250XSxhdD1bXSxvdD1bXSxzdD1bMCwwLDBdO2ZvcihvPTA7bzxpdC5sZW5ndGg7KytvKXt2YXIgbHQ9aCh0aGlzLl9maWVsZFtudF0saXRbb10pO2F0LnB1c2gocnQubGVuZ3RoLzV8MCksRz0wO3Q6Zm9yKGI9MDtiPGx0LmNlbGxzLmxlbmd0aDsrK2Ipe3ZhciBjdD1sdC5jZWxsc1tiXTtmb3IoWD0wO1g8MjsrK1gpe3ZhciB1dD1sdC5wb3NpdGlvbnNbY3RbWF1dLGZ0PXV0WzBdLGh0PTB8TWF0aC5mbG9vcihmdCkscHQ9ZnQtaHQsZHQ9dXRbMV0sZ3Q9MHxNYXRoLmZsb29yKGR0KSx2dD1kdC1ndCxtdD0hMTtlOmZvcih2YXIgeXQ9MDt5dDwzOysreXQpe3N0W3l0XT0wO3ZhciB4dD0obnQreXQrMSklMztmb3IoWT0wO1k8MjsrK1kpe3ZhciBidD1ZP3B0OjEtcHQ7Zm9yKCQ9MHxNYXRoLm1pbihNYXRoLm1heChodCtZLDApLGFbMF0pLFc9MDtXPDI7KytXKXt2YXIgX3Q9Vz92dDoxLXZ0O2lmKEo9MHxNYXRoLm1pbihNYXRoLm1heChndCtXLDApLGFbMV0pLFo9eXQ8Mj90aGlzLl9maWVsZFt4dF0uZ2V0KCQsSik6KHRoaXMuaW50ZW5zaXR5LmdldCgkLEopLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKS8odGhpcy5pbnRlbnNpdHlCb3VuZHNbMV0tdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF0pLCFpc0Zpbml0ZShaKXx8aXNOYU4oWikpe210PSEwO2JyZWFrIGV9dmFyIHd0PWJ0Kl90O3N0W3l0XSs9d3QqWn19fWlmKG10KXtpZihYPjApe2Zvcih2YXIga3Q9MDtrdDw1Oysra3QpcnQucG9wKCk7Ry09MX1jb250aW51ZSB0fXJ0LnB1c2goc3RbMF0sc3RbMV0sdXRbMF0sdXRbMV0sc3RbMl0pLEcrPTF9fW90LnB1c2goRyl9dGhpcy5fY29udG91ck9mZnNldHNbbnRdPWF0LHRoaXMuX2NvbnRvdXJDb3VudHNbbnRdPW90fXZhciBUdD1zLm1hbGxvY0Zsb2F0KHJ0Lmxlbmd0aCk7Zm9yKG89MDtvPHJ0Lmxlbmd0aDsrK28pVHRbb109cnRbb107dGhpcy5fY29udG91ckJ1ZmZlci51cGRhdGUoVHQpLHMuZnJlZUZsb2F0KFR0KX10LmNvbG9ybWFwJiZ0aGlzLl9jb2xvck1hcC5zZXRQaXhlbHMoZnVuY3Rpb24odCl7dmFyIGU9dShbbCh7Y29sb3JtYXA6dCxuc2hhZGVzOlMsZm9ybWF0OiJyZ2JhIn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0WzFdLHRbMl0sMjU1KnRbM11dfSldKTtyZXR1cm4gYy5kaXZzZXEoZSwyNTUpLGV9KHQuY29sb3JtYXApKX0sQy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl92YW8uZGlzcG9zZSgpLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2NvbG9yTWFwLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyUGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY0J1ZmZlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY1ZBTy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDwzOysrdClzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFt0XS5kYXRhKX0sQy5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7dmFyIGUscjtpZighdClyZXR1cm4gdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuZHlhbmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHZvaWQodGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdKTtmb3IoZT0wO2U8MzsrK2UpdGhpcy5lbmFibGVIaWdobGlnaHRbZV0/dGhpcy5oaWdobGlnaHRMZXZlbFtlXT10LmxldmVsW2VdOnRoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09LTE7Zm9yKHI9dGhpcy5zbmFwVG9EYXRhP3QuZGF0YUNvb3JkaW5hdGU6dC5wb3NpdGlvbixlPTA7ZTwzOysrZSlyW2VdLT10aGlzLm9iamVjdE9mZnNldFtlXTtpZih0aGlzLmVuYWJsZUR5bmFtaWNbMF0mJnJbMF0hPT10aGlzLmR5bmFtaWNMZXZlbFswXXx8dGhpcy5lbmFibGVEeW5hbWljWzFdJiZyWzFdIT09dGhpcy5keW5hbWljTGV2ZWxbMV18fHRoaXMuZW5hYmxlRHluYW1pY1syXSYmclsyXSE9PXRoaXMuZHluYW1pY0xldmVsWzJdKXtmb3IodmFyIG49MCxpPXRoaXMuc2hhcGUsYT1zLm1hbGxvY0Zsb2F0KDEyKmlbMF0qaVsxXSksbz0wO288MzsrK28paWYodGhpcy5lbmFibGVEeW5hbWljW29dKXt0aGlzLmR5bmFtaWNMZXZlbFtvXT1yW29dO3ZhciBsPShvKzEpJTMsYz0obysyKSUzLHU9dGhpcy5fZmllbGRbb10sZj10aGlzLl9maWVsZFtsXSxwPXRoaXMuX2ZpZWxkW2NdLGQ9aCh1LHJbb10pLGc9ZC5jZWxscyx2PWQucG9zaXRpb25zO2Zvcih0aGlzLl9keW5hbWljT2Zmc2V0c1tvXT1uLGU9MDtlPGcubGVuZ3RoOysrZSlmb3IodmFyIG09Z1tlXSx5PTA7eTwyOysreSl7dmFyIHg9dlttW3ldXSxiPSt4WzBdLF89MHxiLHc9MHxNYXRoLm1pbihfKzEsaVswXSksaz1iLV8sVD0xLWssQT0reFsxXSxNPTB8QSxTPTB8TWF0aC5taW4oTSsxLGlbMV0pLEU9QS1NLEM9MS1FLEw9VCpDLHo9VCpFLE89aypDLEk9aypFLEQ9TCpmLmdldChfLE0pK3oqZi5nZXQoXyxTKStPKmYuZ2V0KHcsTSkrSSpmLmdldCh3LFMpLFA9TCpwLmdldChfLE0pK3oqcC5nZXQoXyxTKStPKnAuZ2V0KHcsTSkrSSpwLmdldCh3LFMpO2lmKGlzTmFOKEQpfHxpc05hTihQKSl7eSYmKG4tPTEpO2JyZWFrfWFbMipuKzBdPUQsYVsyKm4rMV09UCxuKz0xfXRoaXMuX2R5bmFtaWNDb3VudHNbb109bi10aGlzLl9keW5hbWljT2Zmc2V0c1tvXX1lbHNlIHRoaXMuZHluYW1pY0xldmVsW29dPU5hTix0aGlzLl9keW5hbWljQ291bnRzW29dPTA7dGhpcy5fZHluYW1pY0J1ZmZlci51cGRhdGUoYS5zdWJhcnJheSgwLDIqbikpLHMuZnJlZUZsb2F0KGEpfX19LHsiLi9saWIvc2hhZGVycyI6MzEwLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzExLCJiaXQtdHdpZGRsZSI6ODIsY29sb3JtYXA6MTE2LCJnbC1idWZmZXIiOjIzNywiZ2wtbWF0NC9pbnZlcnQiOjI2MSwiZ2wtbWF0NC9tdWx0aXBseSI6MjYzLCJnbC10ZXh0dXJlMmQiOjMxNCwiZ2wtdmFvIjozMTksbmRhcnJheTo0NDIsIm5kYXJyYXktZ3JhZGllbnQiOjQzMywibmRhcnJheS1vcHMiOjQzNiwibmRhcnJheS1wYWNrIjo0MzcsInN1cmZhY2UtbmV0cyI6NTE1LCJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDMxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udCIpLGk9dCgicGljay1ieS1hbGlhcyIpLGE9dCgicmVnbCIpLG89dCgiZ2wtdXRpbC9jb250ZXh0Iikscz10KCJlczYtd2Vhay1tYXAiKSxsPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGM9dCgiZm9udC1hdGxhcyIpLHU9dCgidHlwZWRhcnJheS1wb29sIiksZj10KCJwYXJzZS1yZWN0IiksaD10KCJpcy1wbGFpbi1vYmoiKSxwPXQoInBhcnNlLXVuaXQiKSxkPXQoInRvLXB4IiksZz10KCJkZXRlY3Qta2VybmluZyIpLHY9dCgib2JqZWN0LWFzc2lnbiIpLG09dCgiZm9udC1tZWFzdXJlIikseT10KCJmbGF0dGVuLXZlcnRleC1kYXRhIikseD10KCJiaXQtdHdpZGRsZSIpLm5leHRQb3cyLGI9bmV3IHMsXz0hMTtpZihkb2N1bWVudC5ib2R5KXt2YXIgdz1kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTt3LnN0eWxlLmZvbnQ9Iml0YWxpYyBzbWFsbC1jYXBzIGJvbGQgY29uZGVuc2VkIDE2cHgvMiBjdXJzaXZlIixnZXRDb21wdXRlZFN0eWxlKHcpLmZvbnRTdHJldGNoJiYoXz0hMCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh3KX12YXIgaz1mdW5jdGlvbih0KXshZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2dsJiZ0LnByb3AmJnQudGV4dHVyZSYmdC5idWZmZXJ9KHQpP3RoaXMuZ2w9byh0KToodD17cmVnbDp0fSx0aGlzLmdsPXQucmVnbC5fZ2wpLHRoaXMuc2hhZGVyPWIuZ2V0KHRoaXMuZ2wpLHRoaXMuc2hhZGVyP3RoaXMucmVnbD10aGlzLnNoYWRlci5yZWdsOnRoaXMucmVnbD10LnJlZ2x8fGEoe2dsOnRoaXMuZ2x9KSx0aGlzLmNoYXJCdWZmZXI9dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdGhpcy5zaXplQnVmZmVyPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6ImZsb2F0Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2hhZGVyfHwodGhpcy5zaGFkZXI9dGhpcy5jcmVhdGVTaGFkZXIoKSxiLnNldCh0aGlzLmdsLHRoaXMuc2hhZGVyKSksdGhpcy5iYXRjaD1bXSx0aGlzLmZvbnRTaXplPVtdLHRoaXMuZm9udD1bXSx0aGlzLmZvbnRBdGxhcz1bXSx0aGlzLmRyYXc9dGhpcy5zaGFkZXIuZHJhdy5iaW5kKHRoaXMpLHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yZWdsLl9yZWZyZXNoKCksdGhpcy5kcmF3KHRoaXMuYmF0Y2gpfSx0aGlzLmNhbnZhcz10aGlzLmdsLmNhbnZhcyx0aGlzLnVwZGF0ZShoKHQpP3Q6e30pfTtrLnByb3RvdHlwZS5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlZ2wsZT10KHtibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwxXSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToib25lIG1pbnVzIGRzdCBhbHBoYSIsZHN0QWxwaGE6Im9uZSJ9fSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGNvdW50OnQucHJvcCgiY291bnQiKSxvZmZzZXQ6dC5wcm9wKCJvZmZzZXQiKSxhdHRyaWJ1dGVzOntjaGFyT2Zmc2V0OntvZmZzZXQ6NCxzdHJpZGU6OCxidWZmZXI6dC50aGlzKCJzaXplQnVmZmVyIil9LHdpZHRoOntvZmZzZXQ6MCxzdHJpZGU6OCxidWZmZXI6dC50aGlzKCJzaXplQnVmZmVyIil9LGNoYXI6dC50aGlzKCJjaGFyQnVmZmVyIikscG9zaXRpb246dC50aGlzKCJwb3NpdGlvbiIpfSx1bmlmb3Jtczp7YXRsYXNTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UuYXRsYXMud2lkdGgsZS5hdGxhcy5oZWlnaHRdfSxhdGxhc0RpbTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLmNvbHMsZS5hdGxhcy5yb3dzXX0sYXRsYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy50ZXh0dXJlfSxjaGFyU3RlcDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLnN0ZXB9LGVtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMuZW19LGNvbG9yOnQucHJvcCgiY29sb3IiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHZpZXdwb3J0OnQudGhpcygidmlld3BvcnRBcnJheSIpLHNjYWxlOnQudGhpcygic2NhbGUiKSxhbGlnbjp0LnByb3AoImFsaWduIiksYmFzZWxpbmU6dC5wcm9wKCJiYXNlbGluZSIpLHRyYW5zbGF0ZTp0LnRoaXMoInRyYW5zbGF0ZSIpLHBvc2l0aW9uT2Zmc2V0OnQucHJvcCgicG9zaXRpb25PZmZzZXQiKX0scHJpbWl0aXZlOiJwb2ludHMiLHZpZXdwb3J0OnQudGhpcygidmlld3BvcnQiKSx2ZXJ0OiJcblx0XHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblx0XHRcdGF0dHJpYnV0ZSBmbG9hdCB3aWR0aCwgY2hhck9mZnNldCwgY2hhcjtcblx0XHRcdGF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIGVtLCBhbGlnbiwgYmFzZWxpbmU7XG5cdFx0XHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzQgY29sb3I7XG5cdFx0XHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplLCBhdGxhc0RpbSwgc2NhbGUsIHRyYW5zbGF0ZSwgcG9zaXRpb25PZmZzZXQ7XG5cdFx0XHR2YXJ5aW5nIHZlYzIgY2hhckNvb3JkLCBjaGFySWQ7XG5cdFx0XHR2YXJ5aW5nIGZsb2F0IGNoYXJXaWR0aDtcblx0XHRcdHZhcnlpbmcgdmVjNCBmb250Q29sb3I7XG5cdFx0XHR2b2lkIG1haW4gKCkge1xuXHRcdFx0XHQiKyhrLm5vcm1hbFZpZXdwb3J0PyIiOiJ2ZWMyIHBvc2l0aW9uT2Zmc2V0ID0gdmVjMihwb3NpdGlvbk9mZnNldC54LC0gcG9zaXRpb25PZmZzZXQueSk7IikrIlxuXG5cdFx0XHRcdHZlYzIgb2Zmc2V0ID0gZmxvb3IoZW0gKiAodmVjMihhbGlnbiArIGNoYXJPZmZzZXQsIGJhc2VsaW5lKVxuXHRcdFx0XHRcdCsgcG9zaXRpb25PZmZzZXQpKVxuXHRcdFx0XHRcdC8gKHZpZXdwb3J0Lnp3ICogc2NhbGUueHkpO1xuXG5cdFx0XHRcdHZlYzIgcG9zaXRpb24gPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGU7XG5cdFx0XHRcdHBvc2l0aW9uICs9IG9mZnNldCAqIHNjYWxlO1xuXG5cdFx0XHRcdCIrKGsubm9ybWFsVmlld3BvcnQ/InBvc2l0aW9uLnkgPSAxLiAtIHBvc2l0aW9uLnk7IjoiIikrIlxuXG5cdFx0XHRcdGNoYXJDb29yZCA9IHBvc2l0aW9uICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcblxuXHRcdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLiAtIDEuLCAwLCAxKTtcblxuXHRcdFx0XHRnbF9Qb2ludFNpemUgPSBjaGFyU3RlcDtcblxuXHRcdFx0XHRjaGFySWQueCA9IG1vZChjaGFyLCBhdGxhc0RpbS54KTtcblx0XHRcdFx0Y2hhcklkLnkgPSBmbG9vcihjaGFyIC8gYXRsYXNEaW0ueCk7XG5cblx0XHRcdFx0Y2hhcldpZHRoID0gd2lkdGggKiBlbTtcblxuXHRcdFx0XHRmb250Q29sb3IgPSBjb2xvciAvIDI1NS47XG5cdFx0XHR9IixmcmFnOiJcblx0XHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGF0bGFzO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIG9wYWNpdHk7XG5cdFx0XHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplO1xuXHRcdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcblx0XHRcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcblx0XHRcdHZhcnlpbmcgZmxvYXQgY2hhcldpZHRoO1xuXG5cdFx0XHRmbG9hdCBsaWdodG5lc3ModmVjNCBjb2xvcikge1xuXHRcdFx0XHRyZXR1cm4gY29sb3IuciAqIDAuMjk5ICsgY29sb3IuZyAqIDAuNTg3ICsgY29sb3IuYiAqIDAuMTE0O1xuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4gKCkge1xuXHRcdFx0XHR2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC0gY2hhckNvb3JkICsgY2hhclN0ZXAgKiAuNTtcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJTdGVwID0gZmxvb3IoY2hhclN0ZXAgKiAuNSArIC41KTtcblxuXHRcdFx0XHQvLyBpbnZlcnQgeSBhbmQgc2hpZnQgYnkgMXB4IChGRiBleHBlY2lhbGx5IG5lZWRzIHRoYXQpXG5cdFx0XHRcdHV2LnkgPSBjaGFyU3RlcCAtIHV2Lnk7XG5cblx0XHRcdFx0Ly8gaWdub3JlIHBvaW50cyBvdXRzaWRlIG9mIGNoYXJhY3RlciBib3VuZGluZyBib3hcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJXaWR0aCA9IGNlaWwoY2hhcldpZHRoICogLjUpO1xuXHRcdFx0XHRpZiAoZmxvb3IodXYueCkgPiBoYWxmQ2hhclN0ZXAgKyBoYWxmQ2hhcldpZHRoIHx8XG5cdFx0XHRcdFx0Zmxvb3IodXYueCkgPCBoYWxmQ2hhclN0ZXAgLSBoYWxmQ2hhcldpZHRoKSByZXR1cm47XG5cblx0XHRcdFx0dXYgKz0gY2hhcklkICogY2hhclN0ZXA7XG5cdFx0XHRcdHV2ID0gdXYgLyBhdGxhc1NpemU7XG5cblx0XHRcdFx0dmVjNCBjb2xvciA9IGZvbnRDb2xvcjtcblx0XHRcdFx0dmVjNCBtYXNrID0gdGV4dHVyZTJEKGF0bGFzLCB1dik7XG5cblx0XHRcdFx0ZmxvYXQgbWFza1kgPSBsaWdodG5lc3MobWFzayk7XG5cdFx0XHRcdC8vIGZsb2F0IGNvbG9yWSA9IGxpZ2h0bmVzcyhjb2xvcik7XG5cdFx0XHRcdGNvbG9yLmEgKj0gbWFza1k7XG5cdFx0XHRcdGNvbG9yLmEgKj0gb3BhY2l0eTtcblxuXHRcdFx0XHQvLyBjb2xvci5hICs9IC4xO1xuXG5cdFx0XHRcdC8vIGFudGlhbGlhc2luZywgc2VlIHlpcSBjb2xvciBzcGFjZSB5LWNoYW5uZWwgZm9ybXVsYVxuXHRcdFx0XHQvLyBjb2xvci5yZ2IgKz0gKDEuIC0gY29sb3IucmdiKSAqICgxLiAtIG1hc2sucmdiKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcblx0XHRcdH0ifSk7cmV0dXJue3JlZ2w6dCxkcmF3OmUsYXRsYXM6e319fSxrLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigic3RyaW5nIj09dHlwZW9mIHQpdD17dGV4dDp0fTtlbHNlIGlmKCF0KXJldHVybjtudWxsIT0odD1pKHQse3Bvc2l0aW9uOiJwb3NpdGlvbiBwb3NpdGlvbnMgY29vcmQgY29vcmRzIGNvb3JkaW5hdGVzIixmb250OiJmb250IGZvbnRGYWNlIGZvbnRmYWNlIHR5cGVmYWNlIGNzc0ZvbnQgY3NzLWZvbnQgZmFtaWx5IGZvbnRGYW1pbHkiLGZvbnRTaXplOiJmb250U2l6ZSBmb250c2l6ZSBzaXplIGZvbnQtc2l6ZSIsdGV4dDoidGV4dCB0ZXh0cyBjaGFycyBjaGFyYWN0ZXJzIHZhbHVlIHZhbHVlcyBzeW1ib2xzIixhbGlnbjoiYWxpZ24gYWxpZ25tZW50IHRleHRBbGlnbiB0ZXh0YmFzZWxpbmUiLGJhc2VsaW5lOiJiYXNlbGluZSB0ZXh0QmFzZWxpbmUgdGV4dGJhc2VsaW5lIixkaXJlY3Rpb246ImRpciBkaXJlY3Rpb24gdGV4dERpcmVjdGlvbiIsY29sb3I6ImNvbG9yIGNvbG91ciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIHRleHRDb2xvciB0ZXh0Y29sb3IiLGtlcm5pbmc6Imtlcm5pbmcga2VybiIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2cCB2aWV3cG9ydCB2aWV3Qm94IHZpZXdib3ggdmlld1BvcnQiLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEgdHJhbnNwYXJlbmN5IHZpc2libGUgdmlzaWJpbGl0eSBvcGFxdWUiLG9mZnNldDoib2Zmc2V0IHBvc2l0aW9uT2Zmc2V0IHBhZGRpbmcgc2hpZnQgaW5kZW50IGluZGVudGF0aW9uIn0sITApKS5vcGFjaXR5JiYoQXJyYXkuaXNBcnJheSh0Lm9wYWNpdHkpP3RoaXMub3BhY2l0eT10Lm9wYWNpdHkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSk6dGhpcy5vcGFjaXR5PXBhcnNlRmxvYXQodC5vcGFjaXR5KSksbnVsbCE9dC52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9Zih0LnZpZXdwb3J0KSxrLm5vcm1hbFZpZXdwb3J0JiYodGhpcy52aWV3cG9ydC55PXRoaXMuY2FudmFzLmhlaWdodC10aGlzLnZpZXdwb3J0LnktdGhpcy52aWV3cG9ydC5oZWlnaHQpLHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbD09dGhpcy52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9e3g6MCx5OjAsd2lkdGg6dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodH0sdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsIT10Lmtlcm5pbmcmJih0aGlzLmtlcm5pbmc9dC5rZXJuaW5nKSxudWxsIT10Lm9mZnNldCYmKCJudW1iZXIiPT10eXBlb2YgdC5vZmZzZXQmJih0Lm9mZnNldD1bdC5vZmZzZXQsMF0pLHRoaXMucG9zaXRpb25PZmZzZXQ9eSh0Lm9mZnNldCkpLHQuZGlyZWN0aW9uJiYodGhpcy5kaXJlY3Rpb249dC5kaXJlY3Rpb24pLHQucmFuZ2UmJih0aGlzLnJhbmdlPXQucmFuZ2UsdGhpcy5zY2FsZT1bMS8odC5yYW5nZVsyXS10LnJhbmdlWzBdKSwxLyh0LnJhbmdlWzNdLXQucmFuZ2VbMV0pXSx0aGlzLnRyYW5zbGF0ZT1bLXQucmFuZ2VbMF0sLXQucmFuZ2VbMV1dKSx0LnNjYWxlJiYodGhpcy5zY2FsZT10LnNjYWxlKSx0LnRyYW5zbGF0ZSYmKHRoaXMudHJhbnNsYXRlPXQudHJhbnNsYXRlKSx0aGlzLnNjYWxlfHwodGhpcy5zY2FsZT1bMS90aGlzLnZpZXdwb3J0LndpZHRoLDEvdGhpcy52aWV3cG9ydC5oZWlnaHRdKSx0aGlzLnRyYW5zbGF0ZXx8KHRoaXMudHJhbnNsYXRlPVswLDBdKSx0aGlzLmZvbnQubGVuZ3RofHx0LmZvbnR8fCh0LmZvbnQ9ay5iYXNlRm9udFNpemUrInB4IHNhbnMtc2VyaWYiKTt2YXIgcixhPSExLG89ITE7aWYodC5mb250JiYoQXJyYXkuaXNBcnJheSh0LmZvbnQpP3QuZm9udDpbdC5mb250XSkuZm9yRWFjaChmdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0cnl7dD1uLnBhcnNlKHQpfWNhdGNoKGUpe3Q9bi5wYXJzZShrLmJhc2VGb250U2l6ZSsicHggIit0KX1lbHNlIHQ9bi5wYXJzZShuLnN0cmluZ2lmeSh0KSk7dmFyIGk9bi5zdHJpbmdpZnkoe3NpemU6ay5iYXNlRm9udFNpemUsZmFtaWx5OnQuZmFtaWx5LHN0cmV0Y2g6Xz90LnN0cmV0Y2g6dm9pZCAwLHZhcmlhbnQ6dC52YXJpYW50LHdlaWdodDp0LndlaWdodCxzdHlsZTp0LnN0eWxlfSkscz1wKHQuc2l6ZSksbD1NYXRoLnJvdW5kKHNbMF0qZChzWzFdKSk7aWYobCE9PWUuZm9udFNpemVbcl0mJihvPSEwLGUuZm9udFNpemVbcl09bCksIShlLmZvbnRbcl0mJmk9PWUuZm9udFtyXS5iYXNlU3RyaW5nfHwoYT0hMCxlLmZvbnRbcl09ay5mb250c1tpXSxlLmZvbnRbcl0pKSl7dmFyIGM9dC5mYW1pbHkuam9pbigiLCAiKSx1PVt0LnN0eWxlXTt0LnN0eWxlIT10LnZhcmlhbnQmJnUucHVzaCh0LnZhcmlhbnQpLHQudmFyaWFudCE9dC53ZWlnaHQmJnUucHVzaCh0LndlaWdodCksXyYmdC53ZWlnaHQhPXQuc3RyZXRjaCYmdS5wdXNoKHQuc3RyZXRjaCksZS5mb250W3JdPXtiYXNlU3RyaW5nOmksZmFtaWx5OmMsd2VpZ2h0OnQud2VpZ2h0LHN0cmV0Y2g6dC5zdHJldGNoLHN0eWxlOnQuc3R5bGUsdmFyaWFudDp0LnZhcmlhbnQsd2lkdGg6e30sa2VybmluZzp7fSxtZXRyaWNzOm0oYyx7b3JpZ2luOiJ0b3AiLGZvbnRTaXplOmsuYmFzZUZvbnRTaXplLGZvbnRTdHlsZTp1LmpvaW4oIiAiKX0pfSxrLmZvbnRzW2ldPWUuZm9udFtyXX19KSwoYXx8bykmJnRoaXMuZm9udC5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7dmFyIGE9bi5zdHJpbmdpZnkoe3NpemU6ZS5mb250U2l6ZVtpXSxmYW1pbHk6ci5mYW1pbHksc3RyZXRjaDpfP3Iuc3RyZXRjaDp2b2lkIDAsdmFyaWFudDpyLnZhcmlhbnQsd2VpZ2h0OnIud2VpZ2h0LHN0eWxlOnIuc3R5bGV9KTtpZihlLmZvbnRBdGxhc1tpXT1lLnNoYWRlci5hdGxhc1thXSwhZS5mb250QXRsYXNbaV0pe3ZhciBvPXIubWV0cmljcztlLnNoYWRlci5hdGxhc1thXT1lLmZvbnRBdGxhc1tpXT17Zm9udFN0cmluZzphLHN0ZXA6MipNYXRoLmNlaWwoZS5mb250U2l6ZVtpXSpvLmJvdHRvbSouNSksZW06ZS5mb250U2l6ZVtpXSxjb2xzOjAscm93czowLGhlaWdodDowLHdpZHRoOjAsY2hhcnM6W10saWRzOnt9LHRleHR1cmU6ZS5yZWdsLnRleHR1cmUoKX19bnVsbD09dC50ZXh0JiYodC50ZXh0PWUudGV4dCl9KSwic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmdC5wb3NpdGlvbiYmdC5wb3NpdGlvbi5sZW5ndGg+Mil7Zm9yKHZhciBzPUFycmF5KC41KnQucG9zaXRpb24ubGVuZ3RoKSxoPTA7aDxzLmxlbmd0aDtoKyspc1toXT10LnRleHQ7dC50ZXh0PXN9aWYobnVsbCE9dC50ZXh0fHxhKXtpZih0aGlzLnRleHRPZmZzZXRzPVswXSxBcnJheS5pc0FycmF5KHQudGV4dCkpe3RoaXMuY291bnQ9dC50ZXh0WzBdLmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07Zm9yKHZhciBiPTE7Yjx0LnRleHQubGVuZ3RoO2IrKyllLnRleHRPZmZzZXRzW2JdPWUudGV4dE9mZnNldHNbYi0xXSt0LnRleHRbYi0xXS5sZW5ndGgsZS5jb3VudCs9dC50ZXh0W2JdLmxlbmd0aCxlLmNvdW50cy5wdXNoKHQudGV4dFtiXS5sZW5ndGgpO3RoaXMudGV4dD10LnRleHQuam9pbigiIil9ZWxzZSB0aGlzLnRleHQ9dC50ZXh0LHRoaXMuY291bnQ9dGhpcy50ZXh0Lmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07cj1bXSx0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbih0LG4pe2suYXRsYXNDb250ZXh0LmZvbnQ9dC5iYXNlU3RyaW5nO2Zvcih2YXIgaT1lLmZvbnRBdGxhc1tuXSxhPTA7YTxlLnRleHQubGVuZ3RoO2ErKyl7dmFyIG89ZS50ZXh0LmNoYXJBdChhKTtpZihudWxsPT1pLmlkc1tvXSYmKGkuaWRzW29dPWkuY2hhcnMubGVuZ3RoLGkuY2hhcnMucHVzaChvKSxyLnB1c2gobykpLG51bGw9PXQud2lkdGhbb10mJih0LndpZHRoW29dPWsuYXRsYXNDb250ZXh0Lm1lYXN1cmVUZXh0KG8pLndpZHRoL2suYmFzZUZvbnRTaXplLGUua2VybmluZykpe3ZhciBzPVtdO2Zvcih2YXIgbCBpbiB0LndpZHRoKXMucHVzaChsK28sbytsKTt2KHQua2VybmluZyxnKHQuZmFtaWx5LHtwYWlyczpzfSkpfX19KX1pZih0LnBvc2l0aW9uKWlmKHQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgdz0hdC5wb3NpdGlvblswXS5sZW5ndGgsVD11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCksQT0wLE09MDtBPHRoaXMuY291bnRzLmxlbmd0aDtBKyspe3ZhciBTPWUuY291bnRzW0FdO2lmKHcpZm9yKHZhciBFPTA7RTxTO0UrKylUW00rK109dC5wb3NpdGlvblsyKkFdLFRbTSsrXT10LnBvc2l0aW9uWzIqQSsxXTtlbHNlIGZvcih2YXIgQz0wO0M8UztDKyspVFtNKytdPXQucG9zaXRpb25bQV1bMF0sVFtNKytdPXQucG9zaXRpb25bQV1bMV19dGhpcy5wb3NpdGlvbi5jYWxsP3RoaXMucG9zaXRpb24oe3R5cGU6ImZsb2F0IixkYXRhOlR9KTp0aGlzLnBvc2l0aW9uPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6ImZsb2F0IixkYXRhOlR9KSx1LmZyZWVGbG9hdChUKX1lbHNlIHRoaXMucG9zaXRpb24uZGVzdHJveSYmdGhpcy5wb3NpdGlvbi5kZXN0cm95KCksdGhpcy5wb3NpdGlvbj17Y29uc3RhbnQ6dC5wb3NpdGlvbn07aWYodC50ZXh0fHxhKXt2YXIgTD11Lm1hbGxvY1VpbnQ4KHRoaXMuY291bnQpLHo9dS5tYWxsb2NGbG9hdCgyKnRoaXMuY291bnQpO3RoaXMudGV4dFdpZHRoPVtdO2Zvcih2YXIgTz0wLEk9MDtPPHRoaXMuY291bnRzLmxlbmd0aDtPKyspe2Zvcih2YXIgRD1lLmNvdW50c1tPXSxQPWUuZm9udFtPXXx8ZS5mb250WzBdLFI9ZS5mb250QXRsYXNbT118fGUuZm9udEF0bGFzWzBdLEY9MDtGPEQ7RisrKXt2YXIgQj1lLnRleHQuY2hhckF0KEkpLE49ZS50ZXh0LmNoYXJBdChJLTEpO2lmKExbSV09Ui5pZHNbQl0selsyKkldPVAud2lkdGhbQl0sRil7dmFyIGo9elsyKkktMl0sVj16WzIqSV0sVT16WzIqSS0xXSsuNSpqKy41KlY7aWYoZS5rZXJuaW5nKXt2YXIgcT1QLmtlcm5pbmdbTitCXTtxJiYoVSs9LjAwMSpxKX16WzIqSSsxXT1VfWVsc2UgelsyKkkrMV09LjUqelsyKkldO0krK31lLnRleHRXaWR0aC5wdXNoKHoubGVuZ3RoPy41KnpbMipJLTJdK3pbMipJLTFdOjApfXQuYWxpZ258fCh0LmFsaWduPXRoaXMuYWxpZ24pLHRoaXMuY2hhckJ1ZmZlcih7ZGF0YTpMLHR5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2l6ZUJ1ZmZlcih7ZGF0YTp6LHR5cGU6ImZsb2F0Iix1c2FnZToic3RyZWFtIn0pLHUuZnJlZVVpbnQ4KEwpLHUuZnJlZUZsb2F0KHopLHIubGVuZ3RoJiZ0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZm9udEF0bGFzW3JdLGk9bi5zdGVwLGE9TWF0aC5mbG9vcihrLm1heEF0bGFzU2l6ZS9pKSxvPU1hdGgubWluKGEsbi5jaGFycy5sZW5ndGgpLHM9TWF0aC5jZWlsKG4uY2hhcnMubGVuZ3RoL28pLGw9eChvKmkpLHU9eChzKmkpO24ud2lkdGg9bCxuLmhlaWdodD11LG4ucm93cz1zLG4uY29scz1vLG4uZW0mJm4udGV4dHVyZSh7ZGF0YTpjKHtjYW52YXM6ay5hdGxhc0NhbnZhcyxmb250Om4uZm9udFN0cmluZyxjaGFyczpuLmNoYXJzLHNoYXBlOltsLHVdLHN0ZXA6W2ksaV19KX0pfSl9aWYodC5hbGlnbiYmKHRoaXMuYWxpZ249dC5hbGlnbix0aGlzLmFsaWduT2Zmc2V0PXRoaXMudGV4dFdpZHRoLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5hbGlnbik/ZS5hbGlnbi5sZW5ndGg+MT9lLmFsaWduW3JdOmUuYWxpZ25bMF06ZS5hbGlnbjtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG47c3dpdGNoKG4pe2Nhc2UicmlnaHQiOmNhc2UiZW5kIjpyZXR1cm4tdDtjYXNlImNlbnRlciI6Y2FzZSJjZW50cmUiOmNhc2UibWlkZGxlIjpyZXR1cm4uNSotdH1yZXR1cm4gMH0pKSxudWxsPT10aGlzLmJhc2VsaW5lJiZudWxsPT10LmJhc2VsaW5lJiYodC5iYXNlbGluZT0wKSxudWxsIT10LmJhc2VsaW5lJiYodGhpcy5iYXNlbGluZT10LmJhc2VsaW5lLEFycmF5LmlzQXJyYXkodGhpcy5iYXNlbGluZSl8fCh0aGlzLmJhc2VsaW5lPVt0aGlzLmJhc2VsaW5lXSksdGhpcy5iYXNlbGluZU9mZnNldD10aGlzLmJhc2VsaW5lLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPShlLmZvbnRbcl18fGUuZm9udFswXSkubWV0cmljcyxpPTA7cmV0dXJuIGkrPS41Km4uYm90dG9tLGkrPSJudW1iZXIiPT10eXBlb2YgdD90LW4uYmFzZWxpbmU6LW5bdF0say5ub3JtYWxWaWV3cG9ydHx8KGkqPS0xKSxpfSkpLG51bGwhPXQuY29sb3IpaWYodC5jb2xvcnx8KHQuY29sb3I9InRyYW5zcGFyZW50IiksInN0cmluZyIhPXR5cGVvZiB0LmNvbG9yJiZpc05hTih0LmNvbG9yKSl7dmFyIEg7aWYoIm51bWJlciI9PXR5cGVvZiB0LmNvbG9yWzBdJiZ0LmNvbG9yLmxlbmd0aD50aGlzLmNvdW50cy5sZW5ndGgpe3ZhciBHPXQuY29sb3IubGVuZ3RoO0g9dS5tYWxsb2NVaW50OChHKTtmb3IodmFyIFk9KHQuY29sb3Iuc3ViYXJyYXl8fHQuY29sb3Iuc2xpY2UpLmJpbmQodC5jb2xvciksVz0wO1c8RztXKz00KUguc2V0KGwoWShXLFcrNCksInVpbnQ4IiksVyl9ZWxzZXt2YXIgWD10LmNvbG9yLmxlbmd0aDtIPXUubWFsbG9jVWludDgoNCpYKTtmb3IodmFyIFo9MDtaPFg7WisrKUguc2V0KGwodC5jb2xvcltaXXx8MCwidWludDgiKSw0KlopfXRoaXMuY29sb3I9SH1lbHNlIHRoaXMuY29sb3I9bCh0LmNvbG9yLCJ1aW50OCIpO2lmKHQucG9zaXRpb258fHQudGV4dHx8dC5jb2xvcnx8dC5iYXNlbGluZXx8dC5hbGlnbnx8dC5mb250fHx0Lm9mZnNldHx8dC5vcGFjaXR5KWlmKHRoaXMuY29sb3IubGVuZ3RoPjR8fHRoaXMuYmFzZWxpbmVPZmZzZXQubGVuZ3RoPjF8fHRoaXMuYWxpZ24mJnRoaXMuYWxpZ24ubGVuZ3RoPjF8fHRoaXMuZm9udEF0bGFzLmxlbmd0aD4xfHx0aGlzLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yKXt2YXIgJD1NYXRoLm1heCguNSp0aGlzLnBvc2l0aW9uLmxlbmd0aHx8MCwuMjUqdGhpcy5jb2xvci5sZW5ndGh8fDAsdGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGh8fDAsdGhpcy5hbGlnbk9mZnNldC5sZW5ndGh8fDAsdGhpcy5mb250Lmxlbmd0aHx8MCx0aGlzLm9wYWNpdHkubGVuZ3RofHwwLC41KnRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RofHwwKTt0aGlzLmJhdGNoPUFycmF5KCQpO2Zvcih2YXIgSj0wO0o8dGhpcy5iYXRjaC5sZW5ndGg7SisrKWUuYmF0Y2hbSl09e2NvdW50OmUuY291bnRzLmxlbmd0aD4xP2UuY291bnRzW0pdOmUuY291bnRzWzBdLG9mZnNldDplLnRleHRPZmZzZXRzLmxlbmd0aD4xP2UudGV4dE9mZnNldHNbSl06ZS50ZXh0T2Zmc2V0c1swXSxjb2xvcjplLmNvbG9yP2UuY29sb3IubGVuZ3RoPD00P2UuY29sb3I6ZS5jb2xvci5zdWJhcnJheSg0KkosNCpKKzQpOlswLDAsMCwyNTVdLG9wYWNpdHk6QXJyYXkuaXNBcnJheShlLm9wYWNpdHkpP2Uub3BhY2l0eVtKXTplLm9wYWNpdHksYmFzZWxpbmU6bnVsbCE9ZS5iYXNlbGluZU9mZnNldFtKXT9lLmJhc2VsaW5lT2Zmc2V0W0pdOmUuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246ZS5hbGlnbj9udWxsIT1lLmFsaWduT2Zmc2V0W0pdP2UuYWxpZ25PZmZzZXRbSl06ZS5hbGlnbk9mZnNldFswXTowLGF0bGFzOmUuZm9udEF0bGFzW0pdfHxlLmZvbnRBdGxhc1swXSxwb3NpdGlvbk9mZnNldDplLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yP2UucG9zaXRpb25PZmZzZXQuc3ViYXJyYXkoMipKLDIqSisyKTplLnBvc2l0aW9uT2Zmc2V0fX1lbHNlIHRoaXMuY291bnQ/dGhpcy5iYXRjaD1be2NvdW50OnRoaXMuY291bnQsb2Zmc2V0OjAsY29sb3I6dGhpcy5jb2xvcnx8WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KHRoaXMub3BhY2l0eSk/dGhpcy5vcGFjaXR5WzBdOnRoaXMub3BhY2l0eSxiYXNlbGluZTp0aGlzLmJhc2VsaW5lT2Zmc2V0WzBdLGFsaWduOnRoaXMuYWxpZ25PZmZzZXQ/dGhpcy5hbGlnbk9mZnNldFswXTowLGF0bGFzOnRoaXMuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OnRoaXMucG9zaXRpb25PZmZzZXR9XTp0aGlzLmJhdGNoPVtdfSxrLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSxrLnByb3RvdHlwZS5rZXJuaW5nPSEwLGsucHJvdG90eXBlLnBvc2l0aW9uPXtjb25zdGFudDpuZXcgRmxvYXQzMkFycmF5KDIpfSxrLnByb3RvdHlwZS50cmFuc2xhdGU9bnVsbCxrLnByb3RvdHlwZS5zY2FsZT1udWxsLGsucHJvdG90eXBlLmZvbnQ9bnVsbCxrLnByb3RvdHlwZS50ZXh0PSIiLGsucHJvdG90eXBlLnBvc2l0aW9uT2Zmc2V0PVswLDBdLGsucHJvdG90eXBlLm9wYWNpdHk9MSxrLnByb3RvdHlwZS5jb2xvcj1uZXcgVWludDhBcnJheShbMCwwLDAsMjU1XSksay5wcm90b3R5cGUuYWxpZ25PZmZzZXQ9WzAsMF0say5ub3JtYWxWaWV3cG9ydD0hMSxrLm1heEF0bGFzU2l6ZT0xMDI0LGsuYXRsYXNDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksay5hdGxhc0NvbnRleHQ9ay5hdGxhc0NhbnZhcy5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSksay5iYXNlRm9udFNpemU9NjQsay5mb250cz17fSxlLmV4cG9ydHM9a30seyJiaXQtdHdpZGRsZSI6ODIsImNvbG9yLW5vcm1hbGl6ZSI6MTEwLCJjc3MtZm9udCI6MTI5LCJkZXRlY3Qta2VybmluZyI6MTU3LCJlczYtd2Vhay1tYXAiOjIxNiwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjIzLCJmb250LWF0bGFzIjoyMjQsImZvbnQtbWVhc3VyZSI6MjI1LCJnbC11dGlsL2NvbnRleHQiOjMxNSwiaXMtcGxhaW4tb2JqIjo0MTQsIm9iamVjdC1hc3NpZ24iOjQ0NiwicGFyc2UtcmVjdCI6NDUxLCJwYXJzZS11bml0Ijo0NTMsInBpY2stYnktYWxpYXMiOjQ1NyxyZWdsOjQ4NiwidG8tcHgiOjUyMywidHlwZWRhcnJheS1wb29sIjo1Mjl9XSwzMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgibmRhcnJheS1vcHMiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoPD0xKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBNaXNzaW5nIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIik7b3x8ZnVuY3Rpb24odCl7bz1bdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1RdLHM9W3QuTkVBUkVTVCx0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX05FQVJFU1QsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX0xJTkVBUl0sbD1bdC5SRVBFQVQsdC5DTEFNUF9UT19FREdFLHQuTUlSUk9SRURfUkVQRUFUXX0odCk7aWYoIm51bWJlciI9PXR5cGVvZiBhcmd1bWVudHNbMV0pcmV0dXJuIHYodCxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXXx8dC5SR0JBLGFyZ3VtZW50c1s0XXx8dC5VTlNJR05FRF9CWVRFKTtpZihBcnJheS5pc0FycmF5KGFyZ3VtZW50c1sxXSkpcmV0dXJuIHYodCwwfGFyZ3VtZW50c1sxXVswXSwwfGFyZ3VtZW50c1sxXVsxXSxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXSxyPWMoZSk/ZTplLnJhdztpZihyKXJldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGksaSxhLGUpLG5ldyBoKHQsbyxyLG4saSxhKX0odCxyLDB8ZS53aWR0aCwwfGUuaGVpZ2h0LGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZihlLnNoYXBlJiZlLmRhdGEmJmUuc3RyaWRlKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWUuZHR5cGUsbz1lLnNoYXBlLnNsaWNlKCkscz10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKG9bMF08MHx8b1swXT5zfHxvWzFdPDB8fG9bMV0+cyl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTt2YXIgbD1kKG8sZS5zdHJpZGUuc2xpY2UoKSksYz0wOyJmbG9hdDMyIj09PXI/Yz10LkZMT0FUOiJmbG9hdDY0Ij09PXI/KGM9dC5GTE9BVCxsPSExLHI9ImZsb2F0MzIiKToidWludDgiPT09cj9jPXQuVU5TSUdORURfQllURTooYz10LlVOU0lHTkVEX0JZVEUsbD0hMSxyPSJ1aW50OCIpO3ZhciBmLHAsdj0wO2lmKDI9PT1vLmxlbmd0aCl2PXQuTFVNSU5BTkNFLG89W29bMF0sb1sxXSwxXSxlPW4oZS5kYXRhLG8sW2Uuc3RyaWRlWzBdLGUuc3RyaWRlWzFdLDFdLGUub2Zmc2V0KTtlbHNle2lmKDMhPT1vLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgdGV4dHVyZSIpO2lmKDE9PT1vWzJdKXY9dC5BTFBIQTtlbHNlIGlmKDI9PT1vWzJdKXY9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09b1syXSl2PXQuUkdCO2Vsc2V7aWYoNCE9PW9bMl0pdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3JkcyIpO3Y9dC5SR0JBfX1jIT09dC5GTE9BVHx8dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0Iil8fChjPXQuVU5TSUdORURfQllURSxsPSExKTt2YXIgbT1lLnNpemU7aWYobClmPTA9PT1lLm9mZnNldCYmZS5kYXRhLmxlbmd0aD09PW0/ZS5kYXRhOmUuZGF0YS5zdWJhcnJheShlLm9mZnNldCxlLm9mZnNldCttKTtlbHNle3ZhciB5PVtvWzJdLG9bMl0qb1swXSwxXTtwPWEubWFsbG9jKG0scik7dmFyIHg9bihwLG8seSwwKTsiZmxvYXQzMiIhPT1yJiYiZmxvYXQ2NCIhPT1yfHxjIT09dC5VTlNJR05FRF9CWVRFP2kuYXNzaWduKHgsZSk6dSh4LGUpLGY9cC5zdWJhcnJheSgwLG0pfXZhciBiPWcodCk7dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLHYsb1swXSxvWzFdLDAsdixjLGYpLGx8fGEuZnJlZShwKTtyZXR1cm4gbmV3IGgodCxiLG9bMF0sb1sxXSx2LGMpfSh0LGUpfXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIil9O3ZhciBvPW51bGwscz1udWxsLGw9bnVsbDtmdW5jdGlvbiBjKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBJbWFnZURhdGEmJnQgaW5zdGFuY2VvZiBJbWFnZURhdGF9dmFyIHU9ZnVuY3Rpb24odCxlKXtpLm11bHModCxlLDI1NSl9O2Z1bmN0aW9uIGYodCxlLHIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTtyZXR1cm4gdC5fc2hhcGU9W2Uscl0sdC5iaW5kKCksbi50ZXhJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLHQuZm9ybWF0LGUsciwwLHQuZm9ybWF0LHQudHlwZSxudWxsKSx0Ll9taXBMZXZlbHM9WzBdLHR9ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dGhpcy5nbD10LHRoaXMuaGFuZGxlPWUsdGhpcy5mb3JtYXQ9aSx0aGlzLnR5cGU9YSx0aGlzLl9zaGFwZT1bcixuXSx0aGlzLl9taXBMZXZlbHM9WzBdLHRoaXMuX21hZ0ZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fbWluRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl93cmFwUz10LkNMQU1QX1RPX0VER0UsdGhpcy5fd3JhcFQ9dC5DTEFNUF9UT19FREdFLHRoaXMuX2FuaXNvU2FtcGxlcz0xO3ZhciBvPXRoaXMscz1bdGhpcy5fd3JhcFMsdGhpcy5fd3JhcFRdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHMsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwUz10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBUPXR9fV0pLHRoaXMuX3dyYXBWZWN0b3I9czt2YXIgbD1bdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV1dO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53aWR0aD10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLmhlaWdodD10fX1dKSx0aGlzLl9zaGFwZVZlY3Rvcj1sfXZhciBwPWgucHJvdG90eXBlO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4gMz09PXQubGVuZ3RoPzE9PT1lWzJdJiZlWzFdPT09dFswXSp0WzJdJiZlWzBdPT09dFsyXToxPT09ZVswXSYmZVsxXT09PXRbMF19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmNyZWF0ZVRleHR1cmUoKTtyZXR1cm4gdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUlOX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSxlfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgYT10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5hfHxyPDB8fHI+YSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlIik7aWYoaT09PXQuRkxPQVQmJiF0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogRmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLG4sZSxyLDAsbixpLG51bGwpLG5ldyBoKHQsbyxlLHIsbixpKX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhwLHttaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5GaWx0ZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJpbmQoKTt2YXIgZT10aGlzLmdsO2lmKHRoaXMudHlwZT09PWUuRkxPQVQmJm8uaW5kZXhPZih0KT49MCYmKGUuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gZmlsdGVyIG1vZGUgIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUix0KSx0aGlzLl9taW5GaWx0ZXI9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmby5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwodD1lLk5FQVJFU1QpKSxzLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSAiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLHQpLHRoaXMuX21hZ0ZpbHRlcj10fX0sbWlwU2FtcGxlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc30sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FuaXNvU2FtcGxlcztpZih0aGlzLl9hbmlzb1NhbXBsZXM9MHxNYXRoLm1heCh0LDEpLGUhPT10aGlzLl9hbmlzb1NhbXBsZXMpe3ZhciByPXRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtyJiZ0aGlzLmdsLnRleFBhcmFtZXRlcmYodGhpcy5nbC5URVhUVVJFXzJELHIuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsdGhpcy5fYW5pc29TYW1wbGVzKX1yZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfX0sd3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGwuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3JldHVybiB0aGlzLmdsLnRleFBhcmFtZXRlcmkodGhpcy5nbC5URVhUVVJFXzJELHRoaXMuZ2wuVEVYVFVSRV9XUkFQX1MsdCksdGhpcy5fd3JhcFM9dH19LHdyYXBUOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFR9LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmJpbmQoKSxsLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9ULHQpLHRoaXMuX3dyYXBUPXR9fSx3cmFwOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVt0LHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IE11c3Qgc3BlY2lmeSB3cmFwIG1vZGUgZm9yIHJvd3MgYW5kIGNvbHVtbnMiKTtmb3IodmFyIGU9MDtlPDI7KytlKWlmKGwuaW5kZXhPZih0W2VdKTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3RoaXMuX3dyYXBTPXRbMF0sdGhpcy5fd3JhcFQ9dFsxXTt2YXIgcj10aGlzLmdsO3JldHVybiB0aGlzLmJpbmQoKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1MsdGhpcy5fd3JhcFMpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfVCx0aGlzLl93cmFwVCksdH19LHNoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZSIpfWVsc2UgdD1bMHx0LDB8dF07cmV0dXJuIGYodGhpcywwfHRbMF0sMHx0WzFdKSxbMHx0WzBdLDB8dFsxXV19fSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGYodGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxmKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH19fSkscC5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2w7cmV0dXJuIHZvaWQgMCE9PXQmJmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwKygwfHQpKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLmhhbmRsZSksdm9pZCAwIT09dD8wfHQ6ZS5nZXRQYXJhbWV0ZXIoZS5BQ1RJVkVfVEVYVFVSRSktZS5URVhUVVJFMH0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVUZXh0dXJlKHRoaXMuaGFuZGxlKX0scC5nZW5lcmF0ZU1pcG1hcD1mdW5jdGlvbigpe3RoaXMuYmluZCgpLHRoaXMuZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5nbC5URVhUVVJFXzJEKTtmb3IodmFyIHQ9TWF0aC5taW4odGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pLGU9MDt0PjA7KytlLHQ+Pj49MSl0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihlKTwwJiZ0aGlzLl9taXBMZXZlbHMucHVzaChlKX0scC5zZXRQaXhlbHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9dGhpcy5nbDt0aGlzLmJpbmQoKSxBcnJheS5pc0FycmF5KGUpPyhvPXIscj0wfGVbMV0sZT0wfGVbMF0pOihlPWV8fDAscj1yfHwwKSxvPW98fDA7dmFyIGw9Yyh0KT90OnQucmF3O2lmKGwpe3RoaXMuX21pcExldmVscy5pbmRleE9mKG8pPDA/KHMudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsbCksdGhpcy5fbWlwTGV2ZWxzLnB1c2gobykpOnMudGV4U3ViSW1hZ2UyRChzLlRFWFRVUkVfMkQsbyxlLHIsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpfWVsc2V7aWYoISh0LnNoYXBlJiZ0LnN0cmlkZSYmdC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7aWYodC5zaGFwZS5sZW5ndGg8Mnx8ZSt0LnNoYXBlWzFdPnRoaXMuX3NoYXBlWzFdPj4+b3x8cit0LnNoYXBlWzBdPnRoaXMuX3NoYXBlWzBdPj4+b3x8ZTwwfHxyPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFRleHR1cmUgZGltZW5zaW9ucyBhcmUgb3V0IG9mIGJvdW5kcyIpOyFmdW5jdGlvbih0LGUscixvLHMsbCxjLGYpe3ZhciBoPWYuZHR5cGUscD1mLnNoYXBlLnNsaWNlKCk7aWYocC5sZW5ndGg8Mnx8cC5sZW5ndGg+Myl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBuZGFycmF5LCBtdXN0IGJlIDJkIG9yIDNkIik7dmFyIGc9MCx2PTAsbT1kKHAsZi5zdHJpZGUuc2xpY2UoKSk7ImZsb2F0MzIiPT09aD9nPXQuRkxPQVQ6ImZsb2F0NjQiPT09aD8oZz10LkZMT0FULG09ITEsaD0iZmxvYXQzMiIpOiJ1aW50OCI9PT1oP2c9dC5VTlNJR05FRF9CWVRFOihnPXQuVU5TSUdORURfQllURSxtPSExLGg9InVpbnQ4Iik7aWYoMj09PXAubGVuZ3RoKXY9dC5MVU1JTkFOQ0UscD1bcFswXSxwWzFdLDFdLGY9bihmLmRhdGEscCxbZi5zdHJpZGVbMF0sZi5zdHJpZGVbMV0sMV0sZi5vZmZzZXQpO2Vsc2V7aWYoMyE9PXAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PXBbMl0pdj10LkFMUEhBO2Vsc2UgaWYoMj09PXBbMl0pdj10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1wWzJdKXY9dC5SR0I7ZWxzZXtpZig0IT09cFsyXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7dj10LlJHQkF9cFsyXX12IT09dC5MVU1JTkFOQ0UmJnYhPT10LkFMUEhBfHxzIT09dC5MVU1JTkFOQ0UmJnMhPT10LkFMUEhBfHwodj1zKTtpZih2IT09cyl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW5jb21wYXRpYmxlIHRleHR1cmUgZm9ybWF0IGZvciBzZXRQaXhlbHMiKTt2YXIgeT1mLnNpemUseD1jLmluZGV4T2Yobyk8MDt4JiZjLnB1c2gobyk7aWYoZz09PWwmJm0pMD09PWYub2Zmc2V0JiZmLmRhdGEubGVuZ3RoPT09eT94P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCxmLmRhdGEpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCxmLmRhdGEpOng/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGYuZGF0YS5zdWJhcnJheShmLm9mZnNldCxmLm9mZnNldCt5KSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGYuZGF0YS5zdWJhcnJheShmLm9mZnNldCxmLm9mZnNldCt5KSk7ZWxzZXt2YXIgYjtiPWw9PT10LkZMT0FUP2EubWFsbG9jRmxvYXQzMih5KTphLm1hbGxvY1VpbnQ4KHkpO3ZhciBfPW4oYixwLFtwWzJdLHBbMl0qcFswXSwxXSk7Zz09PXQuRkxPQVQmJmw9PT10LlVOU0lHTkVEX0JZVEU/dShfLGYpOmkuYXNzaWduKF8sZikseD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsYi5zdWJhcnJheSgwLHkpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsYi5zdWJhcnJheSgwLHkpKSxsPT09dC5GTE9BVD9hLmZyZWVGbG9hdDMyKGIpOmEuZnJlZVVpbnQ4KGIpfX0ocyxlLHIsbyx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsdGhpcy5fbWlwTGV2ZWxzLHQpfX19LHtuZGFycmF5OjQ0MiwibmRhcnJheS1vcHMiOjQzNiwidHlwZWRhcnJheS1wb29sIjo1Mjl9XSwzMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGljay1ieS1hbGlhcyIpO2Z1bmN0aW9uIGkodCl7aWYodC5jb250YWluZXIpaWYodC5jb250YWluZXI9PWRvY3VtZW50LmJvZHkpZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aHx8KHQuY2FudmFzLndpZHRoPXQud2lkdGh8fHQucGl4ZWxSYXRpbyp3aW5kb3cuaW5uZXJXaWR0aCksZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHR8fCh0LmNhbnZhcy5oZWlnaHQ9dC5oZWlnaHR8fHQucGl4ZWxSYXRpbyp3aW5kb3cuaW5uZXJIZWlnaHQpO2Vsc2V7dmFyIGU9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jYW52YXMud2lkdGg9dC53aWR0aHx8ZS5yaWdodC1lLmxlZnQsdC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHxlLmJvdHRvbS1lLnRvcH19ZnVuY3Rpb24gYSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDb250ZXh0JiYid2lkdGgiaW4gdCYmImhlaWdodCJpbiB0fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtpZih0PyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9e2NvbnRhaW5lcjp0fSk6dD17fSxhKHQpP3Q9e2NvbnRhaW5lcjp0fTp0PSJzdHJpbmciPT10eXBlb2YoZT10KS5ub2RlTmFtZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuYXBwZW5kQ2hpbGQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD97Y29udGFpbmVyOnR9OmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdBcnJheXN8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdFbGVtZW50c30odCk/e2dsOnR9Om4odCx7Y29udGFpbmVyOiJjb250YWluZXIgdGFyZ2V0IGVsZW1lbnQgZWwgY2FudmFzIGhvbGRlciBwYXJlbnQgcGFyZW50Tm9kZSB3cmFwcGVyIHVzZSByZWYgcm9vdCBub2RlIixnbDoiZ2wgY29udGV4dCB3ZWJnbCBnbENvbnRleHQiLGF0dHJzOiJhdHRyaWJ1dGVzIGF0dHJzIGNvbnRleHRBdHRyaWJ1dGVzIixwaXhlbFJhdGlvOiJwaXhlbFJhdGlvIHB4UmF0aW8gcHggcmF0aW8gcHhyYXRpbyBwaXhlbHJhdGlvIn0sITApLHQucGl4ZWxSYXRpb3x8KHQucGl4ZWxSYXRpbz13aW5kb3cucGl4ZWxSYXRpb3x8MSksdC5nbClyZXR1cm4gdC5nbDtpZih0LmNhbnZhcyYmKHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpLHQuY29udGFpbmVyKXtpZigic3RyaW5nIj09dHlwZW9mIHQuY29udGFpbmVyKXt2YXIgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQuY29udGFpbmVyKTtpZighcil0aHJvdyBFcnJvcigiRWxlbWVudCAiK3QuY29udGFpbmVyKyIgaXMgbm90IGZvdW5kIik7dC5jb250YWluZXI9cn1hKHQuY29udGFpbmVyKT8odC5jYW52YXM9dC5jb250YWluZXIsdC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSk6dC5jYW52YXN8fCh0LmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksaSh0KSl9ZWxzZSB0LmNhbnZhc3x8KHQuY29udGFpbmVyPWRvY3VtZW50LmJvZHl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0LmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0LmNhbnZhcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuY2FudmFzLnN0eWxlLnRvcD0wLHQuY2FudmFzLnN0eWxlLmxlZnQ9MCx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksaSh0KSk7aWYoIXQuZ2wpdHJ5e3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wiLHQuYXR0cnMpfWNhdGNoKGUpe3RyeXt0LmdsPXQuY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsdC5hdHRycyl9Y2F0Y2goZSl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbC1leHBlcmltZW50YWwiLHQuYXR0cnMpfX1yZXR1cm4gdC5nbH19LHsicGljay1ieS1hbGlhcyI6NDU3fV0sMzE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT9lLmJpbmQoKTp0LmJpbmRCdWZmZXIodC5FTEVNRU5UX0FSUkFZX0JVRkZFUixudWxsKTt2YXIgbj0wfHQuZ2V0UGFyYW1ldGVyKHQuTUFYX1ZFUlRFWF9BVFRSSUJTKTtpZihyKXtpZihyLmxlbmd0aD5uKXRocm93IG5ldyBFcnJvcigiZ2wtdmFvOiBUb28gbWFueSB2ZXJ0ZXggYXR0cmlidXRlcyIpO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgYT1yW2ldO2lmKGEuYnVmZmVyKXt2YXIgbz1hLmJ1ZmZlcixzPWEuc2l6ZXx8NCxsPWEudHlwZXx8dC5GTE9BVCxjPSEhYS5ub3JtYWxpemVkLHU9YS5zdHJpZGV8fDAsZj1hLm9mZnNldHx8MDtvLmJpbmQoKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLHQudmVydGV4QXR0cmliUG9pbnRlcihpLHMsbCxjLHUsZil9ZWxzZXtpZigibnVtYmVyIj09dHlwZW9mIGEpdC52ZXJ0ZXhBdHRyaWIxZihpLGEpO2Vsc2UgaWYoMT09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliMWYoaSxhWzBdKTtlbHNlIGlmKDI9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjJmKGksYVswXSxhWzFdKTtlbHNlIGlmKDM9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjNmKGksYVswXSxhWzFdLGFbMl0pO2Vsc2V7aWYoNCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdmFvOiBJbnZhbGlkIHZlcnRleCBhdHRyaWJ1dGUiKTt0LnZlcnRleEF0dHJpYjRmKGksYVswXSxhWzFdLGFbMl0sYVszXSl9dC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fWZvcig7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX1lbHNlIGZvcih0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsbnVsbCksaT0wO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fSx7fV0sMzE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZG8tYmluZC5qcyIpO2Z1bmN0aW9uIGkodCl7dGhpcy5nbD10LHRoaXMuX2VsZW1lbnRzPW51bGwsdGhpcy5fYXR0cmlidXRlcz1udWxsLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXtuKHRoaXMuZ2wsdGhpcy5fZWxlbWVudHMsdGhpcy5fYXR0cmlidXRlcyl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5fZWxlbWVudHM9ZSx0aGlzLl9hdHRyaWJ1dGVzPXQsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGkucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe30saS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fZWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHQpfX0seyIuL2RvLWJpbmQuanMiOjMxNn1dLDMxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RvLWJpbmQuanMiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt0aGlzLmxvY2F0aW9uPXQsdGhpcy5kaW1lbnNpb249ZSx0aGlzLmE9cix0aGlzLmI9bix0aGlzLmM9aSx0aGlzLmQ9YX1mdW5jdGlvbiBhKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5fZXh0PWUsdGhpcy5oYW5kbGU9cix0aGlzLl9hdHRyaWJzPVtdLHRoaXMuX3VzZUVsZW1lbnRzPSExLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuZGltZW5zaW9uKXtjYXNlIDE6dC52ZXJ0ZXhBdHRyaWIxZih0aGlzLmxvY2F0aW9uLHRoaXMuYSk7YnJlYWs7Y2FzZSAyOnQudmVydGV4QXR0cmliMmYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iKTticmVhaztjYXNlIDM6dC52ZXJ0ZXhBdHRyaWIzZih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jKTticmVhaztjYXNlIDQ6dC52ZXJ0ZXhBdHRyaWI0Zih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRoaXMuZCl9fSxhLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSk7Zm9yKHZhciB0PTA7dDx0aGlzLl9hdHRyaWJzLmxlbmd0aDsrK3QpdGhpcy5fYXR0cmlic1t0XS5iaW5kKHRoaXMuZ2wpfSxhLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLl9leHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpfSxhLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMuaGFuZGxlKX0sYS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmJpbmQoKSxuKHRoaXMuZ2wsZSx0KSx0aGlzLnVuYmluZCgpLHRoaXMuX2F0dHJpYnMubGVuZ3RoPTAsdClmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG89dFthXTsibnVtYmVyIj09dHlwZW9mIG8/dGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsMSxvKSk6QXJyYXkuaXNBcnJheShvKSYmdGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsby5sZW5ndGgsb1swXSxvWzFdLG9bMl0sb1szXSkpfXRoaXMuX3VzZUVsZW1lbnRzPSEhZSx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fdXNlRWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGEodCxlLGUuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSl9fSx7Ii4vZG8tYmluZC5qcyI6MzE2fV0sMzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3Zhby1uYXRpdmUuanMiKSxpPXQoIi4vbGliL3Zhby1lbXVsYXRlZC5qcyIpO2Z1bmN0aW9uIGEodCl7dGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dC5iaW5kVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmNyZWF0ZVZlcnRleEFycmF5T0VTPXQuY3JlYXRlVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmRlbGV0ZVZlcnRleEFycmF5T0VTPXQuZGVsZXRlVmVydGV4QXJyYXkuYmluZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBhKHQpOnQuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpO3JldHVybihzPWw/bih0LGwpOmkodCkpLnVwZGF0ZShlLHIsbyksc319LHsiLi9saWIvdmFvLWVtdWxhdGVkLmpzIjozMTcsIi4vbGliL3Zhby1uYXRpdmUuanMiOjMxOH1dLDMyMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHR9fSx7fV0sMzIxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0WzBdLHRbMV0sdFsyXSksbz1uKGVbMF0sZVsxXSxlWzJdKTtpKHIsciksaShvLG8pO3ZhciBzPWEocixvKTtyZXR1cm4gcz4xPzA6TWF0aC5hY29zKHMpfTt2YXIgbj10KCIuL2Zyb21WYWx1ZXMiKSxpPXQoIi4vbm9ybWFsaXplIiksYT10KCIuL2RvdCIpfSx7Ii4vZG90IjozMzEsIi4vZnJvbVZhbHVlcyI6MzM3LCIuL25vcm1hbGl6ZSI6MzQ4fV0sMzIyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5jZWlsKGVbMF0pLHRbMV09TWF0aC5jZWlsKGVbMV0pLHRbMl09TWF0aC5jZWlsKGVbMl0pLHR9fSx7fV0sMzIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGV9fSx7fV0sMzI0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9fSx7fV0sMzI1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdH19LHt9XSwzMjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH19LHt9XSwzMjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXN0YW5jZSIpfSx7Ii4vZGlzdGFuY2UiOjMyOH1dLDMyODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppKX19LHt9XSwzMjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXZpZGUiKX0seyIuL2RpdmlkZSI6MzMwfV0sMzMwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdL3JbMF0sdFsxXT1lWzFdL3JbMV0sdFsyXT1lWzJdL3JbMl0sdH19LHt9XSwzMzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19fSx7fV0sMzMyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPTFlLTZ9LHt9XSwzMzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz1lWzBdLHM9ZVsxXSxsPWVbMl07cmV0dXJuIE1hdGguYWJzKHItbyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhvKSkmJk1hdGguYWJzKGktcyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGEtbCk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhsKSl9O3ZhciBuPXQoIi4vZXBzaWxvbiIpfSx7Ii4vZXBzaWxvbiI6MzMyfV0sMzM0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl19fSx7fV0sMzM1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdFsyXT1NYXRoLmZsb29yKGVbMl0pLHR9fSx7fV0sMzM2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxvKXt2YXIgcyxsO2V8fChlPTMpO3J8fChyPTApO2w9aT9NYXRoLm1pbihpKmUrcix0Lmxlbmd0aCk6dC5sZW5ndGg7Zm9yKHM9cjtzPGw7cys9ZSluWzBdPXRbc10sblsxXT10W3MrMV0sblsyXT10W3MrMl0sYShuLG4sbyksdFtzXT1uWzBdLHRbcysxXT1uWzFdLHRbcysyXT1uWzJdO3JldHVybiB0fTt2YXIgbj10KCIuL2NyZWF0ZSIpKCl9LHsiLi9jcmVhdGUiOjMyNX1dLDMzNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gblswXT10LG5bMV09ZSxuWzJdPXIsbn19LHt9XSwzMzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0VQU0lMT046dCgiLi9lcHNpbG9uIiksY3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGFuZ2xlOnQoIi4vYW5nbGUiKSxmcm9tVmFsdWVzOnQoIi4vZnJvbVZhbHVlcyIpLGNvcHk6dCgiLi9jb3B5Iiksc2V0OnQoIi4vc2V0IiksZXF1YWxzOnQoIi4vZXF1YWxzIiksZXhhY3RFcXVhbHM6dCgiLi9leGFjdEVxdWFscyIpLGFkZDp0KCIuL2FkZCIpLHN1YnRyYWN0OnQoIi4vc3VidHJhY3QiKSxzdWI6dCgiLi9zdWIiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksbXVsOnQoIi4vbXVsIiksZGl2aWRlOnQoIi4vZGl2aWRlIiksZGl2OnQoIi4vZGl2IiksbWluOnQoIi4vbWluIiksbWF4OnQoIi4vbWF4IiksZmxvb3I6dCgiLi9mbG9vciIpLGNlaWw6dCgiLi9jZWlsIikscm91bmQ6dCgiLi9yb3VuZCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLGRpc3Q6dCgiLi9kaXN0Iiksc3F1YXJlZERpc3RhbmNlOnQoIi4vc3F1YXJlZERpc3RhbmNlIiksc3FyRGlzdDp0KCIuL3NxckRpc3QiKSxsZW5ndGg6dCgiLi9sZW5ndGgiKSxsZW46dCgiLi9sZW4iKSxzcXVhcmVkTGVuZ3RoOnQoIi4vc3F1YXJlZExlbmd0aCIpLHNxckxlbjp0KCIuL3NxckxlbiIpLG5lZ2F0ZTp0KCIuL25lZ2F0ZSIpLGludmVyc2U6dCgiLi9pbnZlcnNlIiksbm9ybWFsaXplOnQoIi4vbm9ybWFsaXplIiksZG90OnQoIi4vZG90IiksY3Jvc3M6dCgiLi9jcm9zcyIpLGxlcnA6dCgiLi9sZXJwIikscmFuZG9tOnQoIi4vcmFuZG9tIiksdHJhbnNmb3JtTWF0NDp0KCIuL3RyYW5zZm9ybU1hdDQiKSx0cmFuc2Zvcm1NYXQzOnQoIi4vdHJhbnNmb3JtTWF0MyIpLHRyYW5zZm9ybVF1YXQ6dCgiLi90cmFuc2Zvcm1RdWF0Iikscm90YXRlWDp0KCIuL3JvdGF0ZVgiKSxyb3RhdGVZOnQoIi4vcm90YXRlWSIpLHJvdGF0ZVo6dCgiLi9yb3RhdGVaIiksZm9yRWFjaDp0KCIuL2ZvckVhY2giKX19LHsiLi9hZGQiOjMyMCwiLi9hbmdsZSI6MzIxLCIuL2NlaWwiOjMyMiwiLi9jbG9uZSI6MzIzLCIuL2NvcHkiOjMyNCwiLi9jcmVhdGUiOjMyNSwiLi9jcm9zcyI6MzI2LCIuL2Rpc3QiOjMyNywiLi9kaXN0YW5jZSI6MzI4LCIuL2RpdiI6MzI5LCIuL2RpdmlkZSI6MzMwLCIuL2RvdCI6MzMxLCIuL2Vwc2lsb24iOjMzMiwiLi9lcXVhbHMiOjMzMywiLi9leGFjdEVxdWFscyI6MzM0LCIuL2Zsb29yIjozMzUsIi4vZm9yRWFjaCI6MzM2LCIuL2Zyb21WYWx1ZXMiOjMzNywiLi9pbnZlcnNlIjozMzksIi4vbGVuIjozNDAsIi4vbGVuZ3RoIjozNDEsIi4vbGVycCI6MzQyLCIuL21heCI6MzQzLCIuL21pbiI6MzQ0LCIuL211bCI6MzQ1LCIuL211bHRpcGx5IjozNDYsIi4vbmVnYXRlIjozNDcsIi4vbm9ybWFsaXplIjozNDgsIi4vcmFuZG9tIjozNDksIi4vcm90YXRlWCI6MzUwLCIuL3JvdGF0ZVkiOjM1MSwiLi9yb3RhdGVaIjozNTIsIi4vcm91bmQiOjM1MywiLi9zY2FsZSI6MzU0LCIuL3NjYWxlQW5kQWRkIjozNTUsIi4vc2V0IjozNTYsIi4vc3FyRGlzdCI6MzU3LCIuL3NxckxlbiI6MzU4LCIuL3NxdWFyZWREaXN0YW5jZSI6MzU5LCIuL3NxdWFyZWRMZW5ndGgiOjM2MCwiLi9zdWIiOjM2MSwiLi9zdWJ0cmFjdCI6MzYyLCIuL3RyYW5zZm9ybU1hdDMiOjM2MywiLi90cmFuc2Zvcm1NYXQ0IjozNjQsIi4vdHJhbnNmb3JtUXVhdCI6MzY1fV0sMzM5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHR9fSx7fV0sMzQwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbGVuZ3RoIil9LHsiLi9sZW5ndGgiOjM0MX1dLDM0MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbil9fSx7fV0sMzQyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdFsyXT1vK24qKHJbMl0tbyksdH19LHt9XSwzNDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0fX0se31dLDM0NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHR9fSx7fV0sMzQ1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbXVsdGlwbHkiKX0seyIuL211bHRpcGx5IjozNDZ9XSwzNDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0fX0se31dLDM0NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0fX0se31dLDM0ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO2E+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpO3JldHVybiB0fX0se31dLDM0OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8MTt2YXIgcj0yKk1hdGgucmFuZG9tKCkqTWF0aC5QSSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9TWF0aC5zcXJ0KDEtbipuKSplO3JldHVybiB0WzBdPU1hdGguY29zKHIpKmksdFsxXT1NYXRoLnNpbihyKSppLHRbMl09biplLHR9fSx7fV0sMzUwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMV0sYT1yWzJdLG89ZVsxXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1lWzBdLHRbMV09aStvKmMtcypsLHRbMl09YStvKmwrcypjLHR9fSx7fV0sMzUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzJdLG89ZVswXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK3MqbCtvKmMsdFsxXT1lWzFdLHRbMl09YStzKmMtbypsLHR9fSx7fV0sMzUyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89ZVswXS1pLHM9ZVsxXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK28qYy1zKmwsdFsxXT1hK28qbCtzKmMsdFsyXT1lWzJdLHR9fSx7fV0sMzUzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdFsyXT1NYXRoLnJvdW5kKGVbMl0pLHR9fSx7fV0sMzU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH19LHt9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHR9fSx7fV0sMzU2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0fX0se31dLDM1NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3NxdWFyZWREaXN0YW5jZSIpfSx7Ii4vc3F1YXJlZERpc3RhbmNlIjozNTl9XSwzNTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9zcXVhcmVkTGVuZ3RoIil9LHsiLi9zcXVhcmVkTGVuZ3RoIjozNjB9XSwzNTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIHIqcituKm4raSppfX0se31dLDM2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIGUqZStyKnIrbipufX0se31dLDM2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3N1YnRyYWN0Iil9LHsiLi9zdWJ0cmFjdCI6MzYyfV0sMzYyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH19LHt9XSwzNjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHt9XSwzNjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKS9vLHRbMV09KHJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKS9vLHRbMl09KHJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSkvbyx0fX0se31dLDM2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGY9YyppK2wqbi1vKmEsaD1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytmKi1sLWgqLXMsdFsxXT1mKmMrcCotcytoKi1vLXUqLWwsdFsyXT1oKmMrcCotbCt1Ki1zLWYqLW8sdH19LHt9XSwzNjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0fX0se31dLDM2NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZX19LHt9XSwzNjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9fSx7fV0sMzY5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0wLHR9fSx7fV0sMzcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkrYSphKX19LHt9XSwzNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0WzNdPWVbM10vclszXSx0fX0se31dLDM3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119fSx7fV0sMzczOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGlbMF09dCxpWzFdPWUsaVsyXT1yLGlbM109bixpfX0se31dLDM3NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGZyb21WYWx1ZXM6dCgiLi9mcm9tVmFsdWVzIiksY29weTp0KCIuL2NvcHkiKSxzZXQ6dCgiLi9zZXQiKSxhZGQ6dCgiLi9hZGQiKSxzdWJ0cmFjdDp0KCIuL3N1YnRyYWN0IiksbXVsdGlwbHk6dCgiLi9tdWx0aXBseSIpLGRpdmlkZTp0KCIuL2RpdmlkZSIpLG1pbjp0KCIuL21pbiIpLG1heDp0KCIuL21heCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLHNxdWFyZWREaXN0YW5jZTp0KCIuL3NxdWFyZWREaXN0YW5jZSIpLGxlbmd0aDp0KCIuL2xlbmd0aCIpLHNxdWFyZWRMZW5ndGg6dCgiLi9zcXVhcmVkTGVuZ3RoIiksbmVnYXRlOnQoIi4vbmVnYXRlIiksaW52ZXJzZTp0KCIuL2ludmVyc2UiKSxub3JtYWxpemU6dCgiLi9ub3JtYWxpemUiKSxkb3Q6dCgiLi9kb3QiKSxsZXJwOnQoIi4vbGVycCIpLHJhbmRvbTp0KCIuL3JhbmRvbSIpLHRyYW5zZm9ybU1hdDQ6dCgiLi90cmFuc2Zvcm1NYXQ0IiksdHJhbnNmb3JtUXVhdDp0KCIuL3RyYW5zZm9ybVF1YXQiKX19LHsiLi9hZGQiOjM2NiwiLi9jbG9uZSI6MzY3LCIuL2NvcHkiOjM2OCwiLi9jcmVhdGUiOjM2OSwiLi9kaXN0YW5jZSI6MzcwLCIuL2RpdmlkZSI6MzcxLCIuL2RvdCI6MzcyLCIuL2Zyb21WYWx1ZXMiOjM3MywiLi9pbnZlcnNlIjozNzUsIi4vbGVuZ3RoIjozNzYsIi4vbGVycCI6Mzc3LCIuL21heCI6Mzc4LCIuL21pbiI6Mzc5LCIuL211bHRpcGx5IjozODAsIi4vbmVnYXRlIjozODEsIi4vbm9ybWFsaXplIjozODIsIi4vcmFuZG9tIjozODMsIi4vc2NhbGUiOjM4NCwiLi9zY2FsZUFuZEFkZCI6Mzg1LCIuL3NldCI6Mzg2LCIuL3NxdWFyZWREaXN0YW5jZSI6Mzg3LCIuL3NxdWFyZWRMZW5ndGgiOjM4OCwiLi9zdWJ0cmFjdCI6Mzg5LCIuL3RyYW5zZm9ybU1hdDQiOjM5MCwiLi90cmFuc2Zvcm1RdWF0IjozOTF9XSwzNzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdFsyXT0xL2VbMl0sdFszXT0xL2VbM10sdH19LHt9XSwzNzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuK2kqaSl9fSx7fV0sMzc3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXSxzPWVbM107cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHRbM109cytuKihyWzNdLXMpLHR9fSx7fV0sMzc4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdFszXT1NYXRoLm1heChlWzNdLHJbM10pLHR9fSx7fV0sMzc5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdFszXT1NYXRoLm1pbihlWzNdLHJbM10pLHR9fSx7fV0sMzgwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdFszXT1lWzNdKnJbM10sdH19LHt9XSwzODE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT0tZVszXSx0fX0se31dLDM4MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKnIrbipuK2kqaSthKmE7bz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPW4qbyx0WzJdPWkqbyx0WzNdPWEqbyk7cmV0dXJuIHR9fSx7fV0sMzgzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoIi4vc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwxLHRbMF09TWF0aC5yYW5kb20oKSx0WzFdPU1hdGgucmFuZG9tKCksdFsyXT1NYXRoLnJhbmRvbSgpLHRbM109TWF0aC5yYW5kb20oKSxuKHQsdCksaSh0LHQsZSksdH19LHsiLi9ub3JtYWxpemUiOjM4MiwiLi9zY2FsZSI6Mzg0fV0sMzg0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH19LHt9XSwzODU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH19LHt9XSwzODY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHR9fSx7fV0sMzg3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiByKnIrbipuK2kqaSthKmF9fSx7fV0sMzg4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIGUqZStyKnIrbipuK2kqaX19LHt9XSwzODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0fX0se31dLDM5MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LHt9XSwzOTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPXJbM10sdT1jKm4rcyphLWwqaSxmPWMqaStsKm4tbyphLGg9YyphK28qaS1zKm4scD0tbypuLXMqaS1sKmE7cmV0dXJuIHRbMF09dSpjK3AqLW8rZiotbC1oKi1zLHRbMV09ZipjK3AqLXMraCotby11Ki1sLHRbMl09aCpjK3AqLWwrdSotcy1mKi1vLHRbM109ZVszXSx0fX0se31dLDM5MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtyZXR1cm4gblswXT1hLG5bMV09cixuWzJdPWUsblszXT10LGlbMF19O3ZhciBuPW5ldyBVaW50OEFycmF5KDQpLGk9bmV3IEZsb2F0MzJBcnJheShuLmJ1ZmZlcil9LHt9XSwzOTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsLXRva2VuaXplciIpLGk9dCgiYXRvYi1saXRlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BcnJheS5pc0FycmF5KHQpP3Q6bih0KSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPWVbcl07aWYoInByZXByb2Nlc3NvciI9PT1hLnR5cGUpe3ZhciBvPWEuZGF0YS5tYXRjaCgvXCNkZWZpbmVccytTSEFERVJfTkFNRShfQjY0KT9ccysoLispJC8pO2lmKG8mJm9bMl0pe3ZhciBzPW9bMV0sbD1vWzJdO3JldHVybihzP2kobCk6bCkudHJpbSgpfX19fX0seyJhdG9iLWxpdGUiOjYyLCJnbHNsLXRva2VuaXplciI6NDAwfV0sMzk0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsayxUPTAsQT0wLE09bCxTPVtdLEU9W10sQz0xLEw9MCx6PTAsTz0hMSxJPSExLEQ9IiIsUD1hLFI9bjsiMzAwIGVzIj09PSh0PXR8fHt9KS52ZXJzaW9uJiYoUD1zLFI9byk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBFPVtdLG51bGwhPT10P2Z1bmN0aW9uKHQpe3ZhciByO1Q9MCxrPShEKz10KS5sZW5ndGg7Zm9yKDtlPURbVF0sVDxrOyl7c3dpdGNoKHI9VCxNKXtjYXNlIHU6VD1WKCk7YnJlYWs7Y2FzZSBmOmNhc2UgaDpUPWooKTticmVhaztjYXNlIHA6VD1VKCk7YnJlYWs7Y2FzZSBkOlQ9RygpO2JyZWFrO2Nhc2UgXzpUPUgoKTticmVhaztjYXNlIGc6VD1ZKCk7YnJlYWs7Y2FzZSBjOlQ9VygpO2JyZWFrO2Nhc2UgeDpUPU4oKTticmVhaztjYXNlIGw6VD1CKCl9aWYociE9PVQpc3dpdGNoKERbcl0pe2Nhc2UiXG4iOkw9MCwrK0M7YnJlYWs7ZGVmYXVsdDorK0x9fXJldHVybiBBKz1ULEQ9RC5zbGljZShUKSxFfSh0LnJlcGxhY2U/dC5yZXBsYWNlKC9cclxuL2csIlxuIik6dCk6ZnVuY3Rpb24odCl7Uy5sZW5ndGgmJkYoUy5qb2luKCIiKSk7cmV0dXJuIE09YixGKCIoZW9mKSIpLEV9KCl9O2Z1bmN0aW9uIEYodCl7dC5sZW5ndGgmJkUucHVzaCh7dHlwZTp3W01dLGRhdGE6dCxwb3NpdGlvbjp6LGxpbmU6Qyxjb2x1bW46TH0pfWZ1bmN0aW9uIEIoKXtyZXR1cm4gUz1TLmxlbmd0aD9bXTpTLCIvIj09PXImJiIqIj09PWU/KHo9QStULTEsTT11LHI9ZSxUKzEpOiIvIj09PXImJiIvIj09PWU/KHo9QStULTEsTT1mLHI9ZSxUKzEpOiIjIj09PWU/KE09aCx6PUErVCxUKTovXHMvLnRlc3QoZSk/KE09eCx6PUErVCxUKTooTz0vXGQvLnRlc3QoZSksST0vW15cd19dLy50ZXN0KGUpLHo9QStULE09Tz9kOkk/cDpjLFQpfWZ1bmN0aW9uIE4oKXtyZXR1cm4vW15cc10vZy50ZXN0KGUpPyhGKFMuam9pbigiIikpLE09bCxUKTooUy5wdXNoKGUpLHI9ZSxUKzEpfWZ1bmN0aW9uIGooKXtyZXR1cm4iXHIiIT09ZSYmIlxuIiE9PWV8fCJcXCI9PT1yPyhTLnB1c2goZSkscj1lLFQrMSk6KEYoUy5qb2luKCIiKSksTT1sLFQpfWZ1bmN0aW9uIFYoKXtyZXR1cm4iLyI9PT1lJiYiKiI9PT1yPyhTLnB1c2goZSksRihTLmpvaW4oIiIpKSxNPWwsVCsxKTooUy5wdXNoKGUpLHI9ZSxUKzEpfWZ1bmN0aW9uIFUoKXtpZigiLiI9PT1yJiYvXGQvLnRlc3QoZSkpcmV0dXJuIE09ZyxUO2lmKCIvIj09PXImJiIqIj09PWUpcmV0dXJuIE09dSxUO2lmKCIvIj09PXImJiIvIj09PWUpcmV0dXJuIE09ZixUO2lmKCIuIj09PWUmJlMubGVuZ3RoKXtmb3IoO3EoUyk7KTtyZXR1cm4gTT1nLFR9aWYoIjsiPT09ZXx8IikiPT09ZXx8IigiPT09ZSl7aWYoUy5sZW5ndGgpZm9yKDtxKFMpOyk7cmV0dXJuIEYoZSksTT1sLFQrMX12YXIgdD0yPT09Uy5sZW5ndGgmJiI9IiE9PWU7aWYoL1tcd19cZFxzXS8udGVzdChlKXx8dCl7Zm9yKDtxKFMpOyk7cmV0dXJuIE09bCxUfXJldHVybiBTLnB1c2goZSkscj1lLFQrMX1mdW5jdGlvbiBxKHQpe2Zvcih2YXIgZSxyLG49MDs7KXtpZihlPWkuaW5kZXhPZih0LnNsaWNlKDAsdC5sZW5ndGgrbikuam9pbigiIikpLHI9aVtlXSwtMT09PWUpe2lmKG4tLSt0Lmxlbmd0aD4wKWNvbnRpbnVlO3I9dC5zbGljZSgwLDEpLmpvaW4oIiIpfXJldHVybiBGKHIpLHorPXIubGVuZ3RoLChTPVMuc2xpY2Uoci5sZW5ndGgpKS5sZW5ndGh9fWZ1bmN0aW9uIEgoKXtyZXR1cm4vW15hLWZBLUYwLTldLy50ZXN0KGUpPyhGKFMuam9pbigiIikpLE09bCxUKTooUy5wdXNoKGUpLHI9ZSxUKzEpfWZ1bmN0aW9uIEcoKXtyZXR1cm4iLiI9PT1lPyhTLnB1c2goZSksTT1nLHI9ZSxUKzEpOi9bZUVdLy50ZXN0KGUpPyhTLnB1c2goZSksTT1nLHI9ZSxUKzEpOiJ4Ij09PWUmJjE9PT1TLmxlbmd0aCYmIjAiPT09U1swXT8oTT1fLFMucHVzaChlKSxyPWUsVCsxKTovW15cZF0vLnRlc3QoZSk/KEYoUy5qb2luKCIiKSksTT1sLFQpOihTLnB1c2goZSkscj1lLFQrMSl9ZnVuY3Rpb24gWSgpe3JldHVybiJmIj09PWUmJihTLnB1c2goZSkscj1lLFQrPTEpLC9bZUVdLy50ZXN0KGUpPyhTLnB1c2goZSkscj1lLFQrMSk6Ii0iPT09ZSYmL1tlRV0vLnRlc3Qocik/KFMucHVzaChlKSxyPWUsVCsxKTovW15cZF0vLnRlc3QoZSk/KEYoUy5qb2luKCIiKSksTT1sLFQpOihTLnB1c2goZSkscj1lLFQrMSl9ZnVuY3Rpb24gVygpe2lmKC9bXlxkXHdfXS8udGVzdChlKSl7dmFyIHQ9Uy5qb2luKCIiKTtyZXR1cm4gTT1SLmluZGV4T2YodCk+LTE/eTpQLmluZGV4T2YodCk+LTE/bTp2LEYoUy5qb2luKCIiKSksTT1sLFR9cmV0dXJuIFMucHVzaChlKSxyPWUsVCsxfX07dmFyIG49dCgiLi9saWIvbGl0ZXJhbHMiKSxpPXQoIi4vbGliL29wZXJhdG9ycyIpLGE9dCgiLi9saWIvYnVpbHRpbnMiKSxvPXQoIi4vbGliL2xpdGVyYWxzLTMwMGVzIikscz10KCIuL2xpYi9idWlsdGlucy0zMDBlcyIpLGw9OTk5LGM9OTk5OSx1PTAsZj0xLGg9MixwPTMsZD00LGc9NSx2PTYsbT03LHk9OCx4PTksYj0xMCxfPTExLHc9WyJibG9jay1jb21tZW50IiwibGluZS1jb21tZW50IiwicHJlcHJvY2Vzc29yIiwib3BlcmF0b3IiLCJpbnRlZ2VyIiwiZmxvYXQiLCJpZGVudCIsImJ1aWx0aW4iLCJrZXl3b3JkIiwid2hpdGVzcGFjZSIsImVvZiIsImludGVnZXIiXX0seyIuL2xpYi9idWlsdGlucyI6Mzk2LCIuL2xpYi9idWlsdGlucy0zMDBlcyI6Mzk1LCIuL2xpYi9saXRlcmFscyI6Mzk4LCIuL2xpYi9saXRlcmFscy0zMDBlcyI6Mzk3LCIuL2xpYi9vcGVyYXRvcnMiOjM5OX1dLDM5NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vYnVpbHRpbnMiKTtuPW4uc2xpY2UoKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIS9eKGdsXF98dGV4dHVyZSkvLnRlc3QodCl9KSxlLmV4cG9ydHM9bi5jb25jYXQoWyJnbF9WZXJ0ZXhJRCIsImdsX0luc3RhbmNlSUQiLCJnbF9Qb3NpdGlvbiIsImdsX1BvaW50U2l6ZSIsImdsX0ZyYWdDb29yZCIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfUG9pbnRDb29yZCIsImdsX01heFZlcnRleEF0dHJpYnMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyIsImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCJnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWluUHJvZ3JhbVRleGVsT2Zmc2V0IiwiZ2xfTWF4UHJvZ3JhbVRleGVsT2Zmc2V0IiwiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMiLCJnbF9EZXB0aFJhbmdlIiwidHJ1bmMiLCJyb3VuZCIsInJvdW5kRXZlbiIsImlzbmFuIiwiaXNpbmYiLCJmbG9hdEJpdHNUb0ludCIsImZsb2F0Qml0c1RvVWludCIsImludEJpdHNUb0Zsb2F0IiwidWludEJpdHNUb0Zsb2F0IiwicGFja1Nub3JtMngxNiIsInVucGFja1Nub3JtMngxNiIsInBhY2tVbm9ybTJ4MTYiLCJ1bnBhY2tVbm9ybTJ4MTYiLCJwYWNrSGFsZjJ4MTYiLCJ1bnBhY2tIYWxmMngxNiIsIm91dGVyUHJvZHVjdCIsInRyYW5zcG9zZSIsImRldGVybWluYW50IiwiaW52ZXJzZSIsInRleHR1cmUiLCJ0ZXh0dXJlU2l6ZSIsInRleHR1cmVQcm9qIiwidGV4dHVyZUxvZCIsInRleHR1cmVPZmZzZXQiLCJ0ZXhlbEZldGNoIiwidGV4ZWxGZXRjaE9mZnNldCIsInRleHR1cmVQcm9qT2Zmc2V0IiwidGV4dHVyZUxvZE9mZnNldCIsInRleHR1cmVQcm9qTG9kIiwidGV4dHVyZVByb2pMb2RPZmZzZXQiLCJ0ZXh0dXJlR3JhZCIsInRleHR1cmVHcmFkT2Zmc2V0IiwidGV4dHVyZVByb2pHcmFkIiwidGV4dHVyZVByb2pHcmFkT2Zmc2V0Il0pfSx7Ii4vYnVpbHRpbnMiOjM5Nn1dLDM5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImFicyIsImFjb3MiLCJhbGwiLCJhbnkiLCJhc2luIiwiYXRhbiIsImNlaWwiLCJjbGFtcCIsImNvcyIsImNyb3NzIiwiZEZkeCIsImRGZHkiLCJkZWdyZWVzIiwiZGlzdGFuY2UiLCJkb3QiLCJlcXVhbCIsImV4cCIsImV4cDIiLCJmYWNlZm9yd2FyZCIsImZsb29yIiwiZnJhY3QiLCJnbF9CYWNrQ29sb3IiLCJnbF9CYWNrTGlnaHRNb2RlbFByb2R1Y3QiLCJnbF9CYWNrTGlnaHRQcm9kdWN0IiwiZ2xfQmFja01hdGVyaWFsIiwiZ2xfQmFja1NlY29uZGFyeUNvbG9yIiwiZ2xfQ2xpcFBsYW5lIiwiZ2xfQ2xpcFZlcnRleCIsImdsX0NvbG9yIiwiZ2xfRGVwdGhSYW5nZSIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRXllUGxhbmVRIiwiZ2xfRXllUGxhbmVSIiwiZ2xfRXllUGxhbmVTIiwiZ2xfRXllUGxhbmVUIiwiZ2xfRm9nIiwiZ2xfRm9nQ29vcmQiLCJnbF9Gb2dGcmFnQ29vcmQiLCJnbF9Gb2dQYXJhbWV0ZXJzIiwiZ2xfRnJhZ0NvbG9yIiwiZ2xfRnJhZ0Nvb3JkIiwiZ2xfRnJhZ0RhdGEiLCJnbF9GcmFnRGVwdGgiLCJnbF9GcmFnRGVwdGhFWFQiLCJnbF9Gcm9udENvbG9yIiwiZ2xfRnJvbnRGYWNpbmciLCJnbF9Gcm9udExpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfRnJvbnRMaWdodFByb2R1Y3QiLCJnbF9Gcm9udE1hdGVyaWFsIiwiZ2xfRnJvbnRTZWNvbmRhcnlDb2xvciIsImdsX0xpZ2h0TW9kZWwiLCJnbF9MaWdodE1vZGVsUGFyYW1ldGVycyIsImdsX0xpZ2h0TW9kZWxQcm9kdWN0cyIsImdsX0xpZ2h0UHJvZHVjdHMiLCJnbF9MaWdodFNvdXJjZSIsImdsX0xpZ2h0U291cmNlUGFyYW1ldGVycyIsImdsX01hdGVyaWFsUGFyYW1ldGVycyIsImdsX01heENsaXBQbGFuZXMiLCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4RHJhd0J1ZmZlcnMiLCJnbF9NYXhGcmFnbWVudFVuaWZvcm1Db21wb25lbnRzIiwiZ2xfTWF4TGlnaHRzIiwiZ2xfTWF4VGV4dHVyZUNvb3JkcyIsImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4VGV4dHVyZVVuaXRzIiwiZ2xfTWF4VmFyeWluZ0Zsb2F0cyIsImdsX01heFZlcnRleEF0dHJpYnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFZlcnRleFVuaWZvcm1Db21wb25lbnRzIiwiZ2xfTW9kZWxWaWV3TWF0cml4IiwiZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZSIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4IiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9NdWx0aVRleENvb3JkMCIsImdsX011bHRpVGV4Q29vcmQxIiwiZ2xfTXVsdGlUZXhDb29yZDIiLCJnbF9NdWx0aVRleENvb3JkMyIsImdsX011bHRpVGV4Q29vcmQ0IiwiZ2xfTXVsdGlUZXhDb29yZDUiLCJnbF9NdWx0aVRleENvb3JkNiIsImdsX011bHRpVGV4Q29vcmQ3IiwiZ2xfTm9ybWFsIiwiZ2xfTm9ybWFsTWF0cml4IiwiZ2xfTm9ybWFsU2NhbGUiLCJnbF9PYmplY3RQbGFuZVEiLCJnbF9PYmplY3RQbGFuZVIiLCJnbF9PYmplY3RQbGFuZVMiLCJnbF9PYmplY3RQbGFuZVQiLCJnbF9Qb2ludCIsImdsX1BvaW50Q29vcmQiLCJnbF9Qb2ludFBhcmFtZXRlcnMiLCJnbF9Qb2ludFNpemUiLCJnbF9Qb3NpdGlvbiIsImdsX1Byb2plY3Rpb25NYXRyaXgiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZSIsImdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfUHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSIsImdsX1NlY29uZGFyeUNvbG9yIiwiZ2xfVGV4Q29vcmQiLCJnbF9UZXh0dXJlRW52Q29sb3IiLCJnbF9UZXh0dXJlTWF0cml4IiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2UiLCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1RleHR1cmVNYXRyaXhUcmFuc3Bvc2UiLCJnbF9WZXJ0ZXgiLCJncmVhdGVyVGhhbiIsImdyZWF0ZXJUaGFuRXF1YWwiLCJpbnZlcnNlc3FydCIsImxlbmd0aCIsImxlc3NUaGFuIiwibGVzc1RoYW5FcXVhbCIsImxvZyIsImxvZzIiLCJtYXRyaXhDb21wTXVsdCIsIm1heCIsIm1pbiIsIm1peCIsIm1vZCIsIm5vcm1hbGl6ZSIsIm5vdCIsIm5vdEVxdWFsIiwicG93IiwicmFkaWFucyIsInJlZmxlY3QiLCJyZWZyYWN0Iiwic2lnbiIsInNpbiIsInNtb290aHN0ZXAiLCJzcXJ0Iiwic3RlcCIsInRhbiIsInRleHR1cmUyRCIsInRleHR1cmUyRExvZCIsInRleHR1cmUyRFByb2oiLCJ0ZXh0dXJlMkRQcm9qTG9kIiwidGV4dHVyZUN1YmUiLCJ0ZXh0dXJlQ3ViZUxvZCIsInRleHR1cmUyRExvZEVYVCIsInRleHR1cmUyRFByb2pMb2RFWFQiLCJ0ZXh0dXJlQ3ViZUxvZEVYVCIsInRleHR1cmUyREdyYWRFWFQiLCJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsInRleHR1cmVDdWJlR3JhZEVYVCJdfSx7fV0sMzk3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9saXRlcmFscyIpO2UuZXhwb3J0cz1uLnNsaWNlKCkuY29uY2F0KFsibGF5b3V0IiwiY2VudHJvaWQiLCJzbW9vdGgiLCJjYXNlIiwibWF0MngyIiwibWF0MngzIiwibWF0Mng0IiwibWF0M3gyIiwibWF0M3gzIiwibWF0M3g0IiwibWF0NHgyIiwibWF0NHgzIiwibWF0NHg0IiwidWludCIsInV2ZWMyIiwidXZlYzMiLCJ1dmVjNCIsInNhbXBsZXJDdWJlU2hhZG93Iiwic2FtcGxlcjJEQXJyYXkiLCJzYW1wbGVyMkRBcnJheVNoYWRvdyIsImlzYW1wbGVyMkQiLCJpc2FtcGxlcjNEIiwiaXNhbXBsZXJDdWJlIiwiaXNhbXBsZXIyREFycmF5IiwidXNhbXBsZXIyRCIsInVzYW1wbGVyM0QiLCJ1c2FtcGxlckN1YmUiLCJ1c2FtcGxlcjJEQXJyYXkiLCJjb2hlcmVudCIsInJlc3RyaWN0IiwicmVhZG9ubHkiLCJ3cml0ZW9ubHkiLCJyZXNvdXJjZSIsImF0b21pY191aW50Iiwibm9wZXJzcGVjdGl2ZSIsInBhdGNoIiwic2FtcGxlIiwic3Vicm91dGluZSIsImNvbW1vbiIsInBhcnRpdGlvbiIsImFjdGl2ZSIsImZpbHRlciIsImltYWdlMUQiLCJpbWFnZTJEIiwiaW1hZ2UzRCIsImltYWdlQ3ViZSIsImlpbWFnZTFEIiwiaWltYWdlMkQiLCJpaW1hZ2UzRCIsImlpbWFnZUN1YmUiLCJ1aW1hZ2UxRCIsInVpbWFnZTJEIiwidWltYWdlM0QiLCJ1aW1hZ2VDdWJlIiwiaW1hZ2UxREFycmF5IiwiaW1hZ2UyREFycmF5IiwiaWltYWdlMURBcnJheSIsImlpbWFnZTJEQXJyYXkiLCJ1aW1hZ2UxREFycmF5IiwidWltYWdlMkRBcnJheSIsImltYWdlMURTaGFkb3ciLCJpbWFnZTJEU2hhZG93IiwiaW1hZ2UxREFycmF5U2hhZG93IiwiaW1hZ2UyREFycmF5U2hhZG93IiwiaW1hZ2VCdWZmZXIiLCJpaW1hZ2VCdWZmZXIiLCJ1aW1hZ2VCdWZmZXIiLCJzYW1wbGVyMURBcnJheSIsInNhbXBsZXIxREFycmF5U2hhZG93IiwiaXNhbXBsZXIxRCIsImlzYW1wbGVyMURBcnJheSIsInVzYW1wbGVyMUQiLCJ1c2FtcGxlcjFEQXJyYXkiLCJpc2FtcGxlcjJEUmVjdCIsInVzYW1wbGVyMkRSZWN0Iiwic2FtcGxlckJ1ZmZlciIsImlzYW1wbGVyQnVmZmVyIiwidXNhbXBsZXJCdWZmZXIiLCJzYW1wbGVyMkRNUyIsImlzYW1wbGVyMkRNUyIsInVzYW1wbGVyMkRNUyIsInNhbXBsZXIyRE1TQXJyYXkiLCJpc2FtcGxlcjJETVNBcnJheSIsInVzYW1wbGVyMkRNU0FycmF5Il0pfSx7Ii4vbGl0ZXJhbHMiOjM5OH1dLDM5ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInByZWNpc2lvbiIsImhpZ2hwIiwibWVkaXVtcCIsImxvd3AiLCJhdHRyaWJ1dGUiLCJjb25zdCIsInVuaWZvcm0iLCJ2YXJ5aW5nIiwiYnJlYWsiLCJjb250aW51ZSIsImRvIiwiZm9yIiwid2hpbGUiLCJpZiIsImVsc2UiLCJpbiIsIm91dCIsImlub3V0IiwiZmxvYXQiLCJpbnQiLCJ2b2lkIiwiYm9vbCIsInRydWUiLCJmYWxzZSIsImRpc2NhcmQiLCJyZXR1cm4iLCJtYXQyIiwibWF0MyIsIm1hdDQiLCJ2ZWMyIiwidmVjMyIsInZlYzQiLCJpdmVjMiIsIml2ZWMzIiwiaXZlYzQiLCJidmVjMiIsImJ2ZWMzIiwiYnZlYzQiLCJzYW1wbGVyMUQiLCJzYW1wbGVyMkQiLCJzYW1wbGVyM0QiLCJzYW1wbGVyQ3ViZSIsInNhbXBsZXIxRFNoYWRvdyIsInNhbXBsZXIyRFNoYWRvdyIsInN0cnVjdCIsImFzbSIsImNsYXNzIiwidW5pb24iLCJlbnVtIiwidHlwZWRlZiIsInRlbXBsYXRlIiwidGhpcyIsInBhY2tlZCIsImdvdG8iLCJzd2l0Y2giLCJkZWZhdWx0IiwiaW5saW5lIiwibm9pbmxpbmUiLCJ2b2xhdGlsZSIsInB1YmxpYyIsInN0YXRpYyIsImV4dGVybiIsImV4dGVybmFsIiwiaW50ZXJmYWNlIiwibG9uZyIsInNob3J0IiwiZG91YmxlIiwiaGFsZiIsImZpeGVkIiwidW5zaWduZWQiLCJpbnB1dCIsIm91dHB1dCIsImh2ZWMyIiwiaHZlYzMiLCJodmVjNCIsImR2ZWMyIiwiZHZlYzMiLCJkdmVjNCIsImZ2ZWMyIiwiZnZlYzMiLCJmdmVjNCIsInNhbXBsZXIyRFJlY3QiLCJzYW1wbGVyM0RSZWN0Iiwic2FtcGxlcjJEUmVjdFNoYWRvdyIsInNpemVvZiIsImNhc3QiLCJuYW1lc3BhY2UiLCJ1c2luZyJdfSx7fV0sMzk5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsiPDw9IiwiPj49IiwiKysiLCItLSIsIjw8IiwiPj4iLCI8PSIsIj49IiwiPT0iLCIhPSIsIiYmIiwifHwiLCIrPSIsIi09IiwiKj0iLCIvPSIsIiU9IiwiJj0iLCJeXiIsIl49IiwifD0iLCIoIiwiKSIsIlsiLCJdIiwiLiIsIiEiLCJ+IiwiKiIsIi8iLCIlIiwiKyIsIi0iLCI8IiwiPiIsIiYiLCJeIiwifCIsIj8iLCI6IiwiPSIsIiwiLCI7IiwieyIsIn0iXX0se31dLDQwMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaW5kZXgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpLGk9W107cmV0dXJuIGk9KGk9aS5jb25jYXQocih0KSkpLmNvbmNhdChyKG51bGwpKX19LHsiLi9pbmRleCI6Mzk0fV0sNDAxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W3RdKTtmb3IodmFyIGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscj1bXSxuPTA7bjx0Lmxlbmd0aC0xO24rKylyLnB1c2godFtuXSxlW25dfHwiIik7cmV0dXJuIHIucHVzaCh0W25dKSxyLmpvaW4oIiIpfX0se31dLDQwMjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJpcy1icm93c2VyIik7bj0iZnVuY3Rpb24iPT10eXBlb2Ygci5tYXRjaE1lZGlhPyFyLm1hdGNoTWVkaWEoIihob3Zlcjogbm9uZSkiKS5tYXRjaGVzOmksZS5leHBvcnRzPW59KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiaXMtYnJvd3NlciI6NDA5fV0sNDAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImlzLWJyb3dzZXIiKTtlLmV4cG9ydHM9biYmZnVuY3Rpb24oKXt2YXIgdD0hMTt0cnl7dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7dD0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKX1jYXRjaChlKXt0PSExfXJldHVybiB0fSgpfSx7ImlzLWJyb3dzZXIiOjQwOX1dLDQwNDpbZnVuY3Rpb24odCxlLHIpe3IucmVhZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2ktMTowLGg9cj8tMToxLHA9dFtlK2ZdO2ZvcihmKz1oLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2ZdLGYrPWgsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2ZdLGYrPWgsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0sci53cml0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGY9dT4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLGc9ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8rZj49MT9oL2w6aCpNYXRoLnBvdygyLDEtZikpKmw+PTImJihvKyssbC89MiksbytmPj11PyhzPTAsbz11KTpvK2Y+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWYpOihzPWUqTWF0aC5wb3coMixmLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Kmd9fSx7fV0sNDA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiTXVzdCBoYXZlIGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgaT10WzBdLmxlbmd0aDtpZihyPD1pKXRocm93IG5ldyBFcnJvcigiTXVzdCBpbnB1dCBhdCBsZWFzdCBkKzEgcG9pbnRzIik7dmFyIG89dC5zbGljZSgwLGkrMSkscz1uLmFwcGx5KHZvaWQgMCxvKTtpZigwPT09cyl0aHJvdyBuZXcgRXJyb3IoIklucHV0IG5vdCBpbiBnZW5lcmFsIHBvc2l0aW9uIik7Zm9yKHZhciBsPW5ldyBBcnJheShpKzEpLHU9MDt1PD1pOysrdSlsW3VdPXU7czwwJiYobFswXT0xLGxbMV09MCk7Zm9yKHZhciBmPW5ldyBhKGwsbmV3IEFycmF5KGkrMSksITEpLGg9Zi5hZGphY2VudCxwPW5ldyBBcnJheShpKzIpLHU9MDt1PD1pOysrdSl7Zm9yKHZhciBkPWwuc2xpY2UoKSxnPTA7Zzw9aTsrK2cpZz09PXUmJihkW2ddPS0xKTt2YXIgdj1kWzBdO2RbMF09ZFsxXSxkWzFdPXY7dmFyIG09bmV3IGEoZCxuZXcgQXJyYXkoaSsxKSwhMCk7aFt1XT1tLHBbdV09bX1wW2krMV09Zjtmb3IodmFyIHU9MDt1PD1pOysrdSlmb3IodmFyIGQ9aFt1XS52ZXJ0aWNlcyx5PWhbdV0uYWRqYWNlbnQsZz0wO2c8PWk7KytnKXt2YXIgeD1kW2ddO2lmKHg8MCl5W2ddPWY7ZWxzZSBmb3IodmFyIGI9MDtiPD1pOysrYiloW2JdLnZlcnRpY2VzLmluZGV4T2YoeCk8MCYmKHlbZ109aFtiXSl9Zm9yKHZhciBfPW5ldyBjKGksbyxwKSx3PSEhZSx1PWkrMTt1PHI7Kyt1KV8uaW5zZXJ0KHRbdV0sdyk7cmV0dXJuIF8uYm91bmRhcnkoKX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgiKS5jb21wYXJlQ2VsbHM7ZnVuY3Rpb24gYSh0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuYWRqYWNlbnQ9ZSx0aGlzLmJvdW5kYXJ5PXIsdGhpcy5sYXN0VmlzaXRlZD0tMX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5jZWxsPWUsdGhpcy5pbmRleD1yfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gaSh0LnZlcnRpY2VzLGUudmVydGljZXMpfWEucHJvdG90eXBlLmZsaXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZlcnRpY2VzWzBdO3RoaXMudmVydGljZXNbMF09dGhpcy52ZXJ0aWNlc1sxXSx0aGlzLnZlcnRpY2VzWzFdPXQ7dmFyIGU9dGhpcy5hZGphY2VudFswXTt0aGlzLmFkamFjZW50WzBdPXRoaXMuYWRqYWNlbnRbMV0sdGhpcy5hZGphY2VudFsxXT1lfTt2YXIgbD1bXTtmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10LHRoaXMudmVydGljZXM9ZSx0aGlzLnNpbXBsaWNlcz1yLHRoaXMuaW50ZXJpb3I9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuYm91bmRhcnl9KSx0aGlzLnR1cGxlPW5ldyBBcnJheSh0KzEpO2Zvcih2YXIgaT0wO2k8PXQ7KytpKXRoaXMudHVwbGVbaV09dGhpcy52ZXJ0aWNlc1tpXTt2YXIgYT1sW3RdO2F8fChhPWxbdF09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVsiZnVuY3Rpb24gb3JpZW50KCl7dmFyIHR1cGxlPXRoaXMudHVwbGU7cmV0dXJuIHRlc3QoIl0scj0wO3I8PXQ7KytyKXI+MCYmZS5wdXNoKCIsIiksZS5wdXNoKCJ0dXBsZVsiLHIsIl0iKTtlLnB1c2goIil9cmV0dXJuIG9yaWVudCIpO3ZhciBpPW5ldyBGdW5jdGlvbigidGVzdCIsZS5qb2luKCIiKSksYT1uW3QrMV07cmV0dXJuIGF8fChhPW4pLGkoYSl9KHQpKSx0aGlzLm9yaWVudD1hfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kaW1lbnNpb24sbj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLGk9dGhpcy50dXBsZSxhPXRoaXMudmVydGljZXMsbz1bdF07Zm9yKHQubGFzdFZpc2l0ZWQ9LW47by5sZW5ndGg+MDspeyh0PW8ucG9wKCkpLnZlcnRpY2VzO2Zvcih2YXIgcz10LmFkamFjZW50LGw9MDtsPD1yOysrbCl7dmFyIGM9c1tsXTtpZihjLmJvdW5kYXJ5JiYhKGMubGFzdFZpc2l0ZWQ8PS1uKSl7Zm9yKHZhciB1PWMudmVydGljZXMsZj0wO2Y8PXI7KytmKXt2YXIgaD11W2ZdO2lbZl09aDwwP2U6YVtoXX12YXIgcD10aGlzLm9yaWVudCgpO2lmKHA+MClyZXR1cm4gYztjLmxhc3RWaXNpdGVkPS1uLDA9PT1wJiZvLnB1c2goYyl9fX1yZXR1cm4gbnVsbH0sdS53YWxrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxuPXRoaXMuZGltZW5zaW9uLGk9dGhpcy52ZXJ0aWNlcyxhPXRoaXMudHVwbGUsbz1lP3RoaXMuaW50ZXJpb3IubGVuZ3RoKk1hdGgucmFuZG9tKCl8MDp0aGlzLmludGVyaW9yLmxlbmd0aC0xLHM9dGhpcy5pbnRlcmlvcltvXTt0OmZvcig7IXMuYm91bmRhcnk7KXtmb3IodmFyIGw9cy52ZXJ0aWNlcyxjPXMuYWRqYWNlbnQsdT0wO3U8PW47Kyt1KWFbdV09aVtsW3VdXTtzLmxhc3RWaXNpdGVkPXI7Zm9yKHU9MDt1PD1uOysrdSl7dmFyIGY9Y1t1XTtpZighKGYubGFzdFZpc2l0ZWQ+PXIpKXt2YXIgaD1hW3VdO2FbdV09dDt2YXIgcD10aGlzLm9yaWVudCgpO2lmKGFbdV09aCxwPDApe3M9Zjtjb250aW51ZSB0fWYuYm91bmRhcnk/Zi5sYXN0VmlzaXRlZD0tcjpmLmxhc3RWaXNpdGVkPXJ9fXJldHVybn1yZXR1cm4gc30sdS5hZGRQZWFrcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXMubGVuZ3RoLTEsbj10aGlzLmRpbWVuc2lvbixpPXRoaXMudmVydGljZXMsbD10aGlzLnR1cGxlLGM9dGhpcy5pbnRlcmlvcix1PXRoaXMuc2ltcGxpY2VzLGY9W2VdO2UubGFzdFZpc2l0ZWQ9cixlLnZlcnRpY2VzW2UudmVydGljZXMuaW5kZXhPZigtMSldPXIsZS5ib3VuZGFyeT0hMSxjLnB1c2goZSk7Zm9yKHZhciBoPVtdO2YubGVuZ3RoPjA7KXt2YXIgcD0oZT1mLnBvcCgpKS52ZXJ0aWNlcyxkPWUuYWRqYWNlbnQsZz1wLmluZGV4T2Yocik7aWYoIShnPDApKWZvcih2YXIgdj0wO3Y8PW47Kyt2KWlmKHYhPT1nKXt2YXIgbT1kW3ZdO2lmKG0uYm91bmRhcnkmJiEobS5sYXN0VmlzaXRlZD49cikpe3ZhciB5PW0udmVydGljZXM7aWYobS5sYXN0VmlzaXRlZCE9PS1yKXtmb3IodmFyIHg9MCxiPTA7Yjw9bjsrK2IpeVtiXTwwPyh4PWIsbFtiXT10KTpsW2JdPWlbeVtiXV07aWYodGhpcy5vcmllbnQoKT4wKXt5W3hdPXIsbS5ib3VuZGFyeT0hMSxjLnB1c2gobSksZi5wdXNoKG0pLG0ubGFzdFZpc2l0ZWQ9cjtjb250aW51ZX1tLmxhc3RWaXNpdGVkPS1yfXZhciBfPW0uYWRqYWNlbnQsdz1wLnNsaWNlKCksaz1kLnNsaWNlKCksVD1uZXcgYSh3LGssITApO3UucHVzaChUKTt2YXIgQT1fLmluZGV4T2YoZSk7aWYoIShBPDApKXtfW0FdPVQsa1tnXT1tLHdbdl09LTEsa1t2XT1lLGRbdl09VCxULmZsaXAoKTtmb3IoYj0wO2I8PW47KytiKXt2YXIgTT13W2JdO2lmKCEoTTwwfHxNPT09cikpe2Zvcih2YXIgUz1uZXcgQXJyYXkobi0xKSxFPTAsQz0wO0M8PW47KytDKXt2YXIgTD13W0NdO0w8MHx8Qz09PWJ8fChTW0UrK109TCl9aC5wdXNoKG5ldyBvKFMsVCxiKSl9fX19fX1oLnNvcnQocyk7Zm9yKHY9MDt2KzE8aC5sZW5ndGg7dis9Mil7dmFyIHo9aFt2XSxPPWhbdisxXSxJPXouaW5kZXgsRD1PLmluZGV4O0k8MHx8RDwwfHwoei5jZWxsLmFkamFjZW50W3ouaW5kZXhdPU8uY2VsbCxPLmNlbGwuYWRqYWNlbnRbTy5pbmRleF09ei5jZWxsKX19LHUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcztyLnB1c2godCk7dmFyIG49dGhpcy53YWxrKHQsZSk7aWYobil7Zm9yKHZhciBpPXRoaXMuZGltZW5zaW9uLGE9dGhpcy50dXBsZSxvPTA7bzw9aTsrK28pe3ZhciBzPW4udmVydGljZXNbb107YVtvXT1zPDA/dDpyW3NdfXZhciBsPXRoaXMub3JpZW50KGEpO2w8MHx8KDAhPT1sfHwobj10aGlzLmhhbmRsZUJvdW5kYXJ5RGVnZW5lcmFjeShuLHQpKSkmJnRoaXMuYWRkUGVha3ModCxuKX19LHUuYm91bmRhcnk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5kaW1lbnNpb24sZT1bXSxyPXRoaXMuc2ltcGxpY2VzLG49ci5sZW5ndGgsaT0wO2k8bjsrK2kpe3ZhciBhPXJbaV07aWYoYS5ib3VuZGFyeSl7Zm9yKHZhciBvPW5ldyBBcnJheSh0KSxzPWEudmVydGljZXMsbD0wLGM9MCx1PTA7dTw9dDsrK3Upc1t1XT49MD9vW2wrK109c1t1XTpjPTEmdTtpZihjPT09KDEmdCkpe3ZhciBmPW9bMF07b1swXT1vWzFdLG9bMV09Zn1lLnB1c2gobyl9fXJldHVybiBlfX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjQ5NCwic2ltcGxpY2lhbC1jb21wbGV4Ijo1MDR9XSw0MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPTAsYT0xO2Z1bmN0aW9uIG8odCxlLHIsbixpKXt0aGlzLm1pZD10LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9cix0aGlzLmxlZnRQb2ludHM9bix0aGlzLnJpZ2h0UG9pbnRzPWksdGhpcy5jb3VudD0oZT9lLmNvdW50OjApKyhyP3IuY291bnQ6MCkrbi5sZW5ndGh9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCF0fHwwPT09dC5sZW5ndGgpcmV0dXJuIG5ldyB4KG51bGwpO3JldHVybiBuZXcgeCh5KHQpKX07dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0LGUpe3QubWlkPWUubWlkLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQubGVmdFBvaW50cz1lLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1lLnJpZ2h0UG9pbnRzLHQuY291bnQ9ZS5jb3VudH1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9eShlKTt0Lm1pZD1yLm1pZCx0LmxlZnQ9ci5sZWZ0LHQucmlnaHQ9ci5yaWdodCx0LmxlZnRQb2ludHM9ci5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ci5yaWdodFBvaW50cyx0LmNvdW50PXIuY291bnR9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKTtyLnB1c2goZSksYyh0LHIpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj10LmludGVydmFscyhbXSksbj1yLmluZGV4T2YoZSk7cmV0dXJuIG48MD9pOihyLnNwbGljZShuLDEpLGModCxyKSxhKX1mdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZ0W25dWzBdPD1lOysrbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBwKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgtMTtuPj0wJiZ0W25dWzFdPj1lOy0tbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPWUodFtyXSk7aWYobilyZXR1cm4gbn19ZnVuY3Rpb24gZyh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gdih0LGUpe3ZhciByPXRbMF0tZVswXTtyZXR1cm4gcnx8dFsxXS1lWzFdfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10WzFdLWVbMV07cmV0dXJuIHJ8fHRbMF0tZVswXX1mdW5jdGlvbiB5KHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCh0W3JdWzBdLHRbcl1bMV0pO2Uuc29ydChnKTt2YXIgbj1lW2UubGVuZ3RoPj4xXSxpPVtdLGE9W10scz1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbD10W3JdO2xbMV08bj9pLnB1c2gobCk6bjxsWzBdP2EucHVzaChsKTpzLnB1c2gobCl9dmFyIGM9cyx1PXMuc2xpY2UoKTtyZXR1cm4gYy5zb3J0KHYpLHUuc29ydChtKSxuZXcgbyhuLHkoaSkseShhKSxjLHUpfWZ1bmN0aW9uIHgodCl7dGhpcy5yb290PXR9cy5pbnRlcnZhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucHVzaC5hcHBseSh0LHRoaXMubGVmdFBvaW50cyksdGhpcy5sZWZ0JiZ0aGlzLmxlZnQuaW50ZXJ2YWxzKHQpLHRoaXMucmlnaHQmJnRoaXMucmlnaHQuaW50ZXJ2YWxzKHQpLHR9LHMuaW5zZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aDtpZih0aGlzLmNvdW50Kz0xLHRbMV08dGhpcy5taWQpdGhpcy5sZWZ0PzQqKHRoaXMubGVmdC5jb3VudCsxKT4zKihlKzEpP3UodGhpcyx0KTp0aGlzLmxlZnQuaW5zZXJ0KHQpOnRoaXMubGVmdD15KFt0XSk7ZWxzZSBpZih0WzBdPnRoaXMubWlkKXRoaXMucmlnaHQ/NCoodGhpcy5yaWdodC5jb3VudCsxKT4zKihlKzEpP3UodGhpcyx0KTp0aGlzLnJpZ2h0Lmluc2VydCh0KTp0aGlzLnJpZ2h0PXkoW3RdKTtlbHNle3ZhciByPW4uZ2UodGhpcy5sZWZ0UG9pbnRzLHQsdiksaT1uLmdlKHRoaXMucmlnaHRQb2ludHMsdCxtKTt0aGlzLmxlZnRQb2ludHMuc3BsaWNlKHIsMCx0KSx0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShpLDAsdCl9fSxzLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cztpZih0WzFdPHRoaXMubWlkKXJldHVybiB0aGlzLmxlZnQ/NCoodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApPjMqKGUtMSk/Zih0aGlzLHQpOjI9PT0oYz10aGlzLmxlZnQucmVtb3ZlKHQpKT8odGhpcy5sZWZ0PW51bGwsdGhpcy5jb3VudC09MSxhKTooYz09PWEmJih0aGlzLmNvdW50LT0xKSxjKTppO2lmKHRbMF0+dGhpcy5taWQpcmV0dXJuIHRoaXMucmlnaHQ/NCoodGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKT4zKihlLTEpP2YodGhpcyx0KToyPT09KGM9dGhpcy5yaWdodC5yZW1vdmUodCkpPyh0aGlzLnJpZ2h0PW51bGwsdGhpcy5jb3VudC09MSxhKTooYz09PWEmJih0aGlzLmNvdW50LT0xKSxjKTppO2lmKDE9PT10aGlzLmNvdW50KXJldHVybiB0aGlzLmxlZnRQb2ludHNbMF09PT10PzI6aTtpZigxPT09dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzWzBdPT09dCl7aWYodGhpcy5sZWZ0JiZ0aGlzLnJpZ2h0KXtmb3IodmFyIHI9dGhpcyxvPXRoaXMubGVmdDtvLnJpZ2h0OylyPW8sbz1vLnJpZ2h0O2lmKHI9PT10aGlzKW8ucmlnaHQ9dGhpcy5yaWdodDtlbHNle3ZhciBzPXRoaXMubGVmdCxjPXRoaXMucmlnaHQ7ci5jb3VudC09by5jb3VudCxyLnJpZ2h0PW8ubGVmdCxvLmxlZnQ9cyxvLnJpZ2h0PWN9bCh0aGlzLG8pLHRoaXMuY291bnQ9KHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCkrKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKSt0aGlzLmxlZnRQb2ludHMubGVuZ3RofWVsc2UgdGhpcy5sZWZ0P2wodGhpcyx0aGlzLmxlZnQpOmwodGhpcyx0aGlzLnJpZ2h0KTtyZXR1cm4gYX1mb3Iocz1uLmdlKHRoaXMubGVmdFBvaW50cyx0LHYpO3M8dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzW3NdWzBdPT09dFswXTsrK3MpaWYodGhpcy5sZWZ0UG9pbnRzW3NdPT09dCl7dGhpcy5jb3VudC09MSx0aGlzLmxlZnRQb2ludHMuc3BsaWNlKHMsMSk7Zm9yKGM9bi5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsbSk7Yzx0aGlzLnJpZ2h0UG9pbnRzLmxlbmd0aCYmdGhpcy5yaWdodFBvaW50c1tjXVsxXT09PXRbMV07KytjKWlmKHRoaXMucmlnaHRQb2ludHNbY109PT10KXJldHVybiB0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShjLDEpLGF9cmV0dXJuIGl9LHMucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHQ8dGhpcy5taWQpe2lmKHRoaXMubGVmdClpZihyPXRoaXMubGVmdC5xdWVyeVBvaW50KHQsZSkpcmV0dXJuIHI7cmV0dXJuIGgodGhpcy5sZWZ0UG9pbnRzLHQsZSl9aWYodD50aGlzLm1pZCl7dmFyIHI7aWYodGhpcy5yaWdodClpZihyPXRoaXMucmlnaHQucXVlcnlQb2ludCh0LGUpKXJldHVybiByO3JldHVybiBwKHRoaXMucmlnaHRQb2ludHMsdCxlKX1yZXR1cm4gZCh0aGlzLmxlZnRQb2ludHMsZSl9LHMucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG47aWYodDx0aGlzLm1pZCYmdGhpcy5sZWZ0JiYobj10aGlzLmxlZnQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO2lmKGU+dGhpcy5taWQmJnRoaXMucmlnaHQmJihuPXRoaXMucmlnaHQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO3JldHVybiBlPHRoaXMubWlkP2godGhpcy5sZWZ0UG9pbnRzLGUscik6dD50aGlzLm1pZD9wKHRoaXMucmlnaHRQb2ludHMsdCxyKTpkKHRoaXMubGVmdFBvaW50cyxyKX07dmFyIGI9eC5wcm90b3R5cGU7Yi5pbnNlcnQ9ZnVuY3Rpb24odCl7dGhpcy5yb290P3RoaXMucm9vdC5pbnNlcnQodCk6dGhpcy5yb290PW5ldyBvKHRbMF0sbnVsbCxudWxsLFt0XSxbdF0pfSxiLnJlbW92ZT1mdW5jdGlvbih0KXtpZih0aGlzLnJvb3Qpe3ZhciBlPXRoaXMucm9vdC5yZW1vdmUodCk7cmV0dXJuIDI9PT1lJiYodGhpcy5yb290PW51bGwpLGUhPT1pfXJldHVybiExfSxiLnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeVBvaW50KHQsZSl9LGIucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7aWYodDw9ZSYmdGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlJbnRlcnZhbCh0LGUscil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJjb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290LmNvdW50OjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsImludGVydmFscyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290LmludGVydmFscyhbXSk6W119fSl9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgxfV0sNDA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcillW3Rbcl1dPXI7cmV0dXJuIGV9fSx7fV0sNDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09cjtyZXR1cm4gZX19LHt9XSw0MDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ITB9LHt9XSw0MTA6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiEhdC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29uc3RydWN0b3IuaXNCdWZmZXImJnQuY29uc3RydWN0b3IuaXNCdWZmZXIodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYobih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNsaWNlJiZuKHQuc2xpY2UoMCwwKSl9KHQpfHwhIXQuX2lzQnVmZmVyKX19LHt9XSw0MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pKX0se31dLDQxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9YSxlLmV4cG9ydHMuaXNNb2JpbGU9YTt2YXIgbj0vKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWluby9pLGk9LyhhbmRyb2lkfGJiXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm98YW5kcm9pZHxpcGFkfHBsYXlib29rfHNpbGsvaTtmdW5jdGlvbiBhKHQpe3R8fCh0PXt9KTt2YXIgZT10LnVhO3JldHVybiBlfHwidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8KGU9bmF2aWdhdG9yLnVzZXJBZ2VudCksZSYmZS5oZWFkZXJzJiYic3RyaW5nIj09dHlwZW9mIGUuaGVhZGVyc1sidXNlci1hZ2VudCJdJiYoZT1lLmhlYWRlcnNbInVzZXItYWdlbnQiXSksInN0cmluZyI9PXR5cGVvZiBlJiYodC50YWJsZXQ/aS50ZXN0KGUpOm4udGVzdChlKSl9fSx7fV0sNDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9PXQmJigib2JqZWN0Ij09PWV8fCJmdW5jdGlvbiI9PT1lKX19LHt9XSw0MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1uLmNhbGwodCkmJihudWxsPT09KGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKXx8ZT09PU9iamVjdC5nZXRQcm90b3R5cGVPZih7fSkpfX0se31dLDQxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYoKChlPXQuY2hhckNvZGVBdChuKSk8OXx8ZT4xMykmJjMyIT09ZSYmMTMzIT09ZSYmMTYwIT09ZSYmNTc2MCE9PWUmJjYxNTghPT1lJiYoZTw4MTkyfHxlPjgyMDUpJiY4MjMyIT09ZSYmODIzMyE9PWUmJjgyMzkhPT1lJiY4Mjg3IT09ZSYmODI4OCE9PWUmJjEyMjg4IT09ZSYmNjUyNzkhPT1lKXJldHVybiExO3JldHVybiEwfX0se31dLDQxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD10LnRyaW0oKSwhISgvXlttemxodmNzcXRhXVxzKlstKy4wLTldW15tbGh2emNzcXRhXSsvaS50ZXN0KHQpJiYvW1xkel0kL2kudGVzdCh0KSYmdC5sZW5ndGg+NCkpfX0se31dLDQxNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQqKDEtcikrZSpyfX0se31dLDQxODpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOnQubWFwYm94Z2w9bigpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlLHIsbjtmdW5jdGlvbiBpKHQsaSl7aWYoZSlpZihyKXt2YXIgYT0idmFyIHNoYXJlZENodW5rID0ge307ICgiK2UrIikoc2hhcmVkQ2h1bmspOyAoIityKyIpKHNoYXJlZENodW5rKTsiLG89e307ZShvKSwobj1pKG8pKS53b3JrZXJVcmw9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2FdLHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQifSkpfWVsc2Ugcj1pO2Vsc2UgZT1pfXJldHVybiBpKDAsZnVuY3Rpb24oZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgdD90OiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsImRlZmF1bHQiKT90LmRlZmF1bHQ6dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQoZT17ZXhwb3J0czp7fX0sZS5leHBvcnRzKSxlLmV4cG9ydHN9dmFyIGE9bztmdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuY3g9Myp0LHRoaXMuYng9Myooci10KS10aGlzLmN4LHRoaXMuYXg9MS10aGlzLmN4LXRoaXMuYngsdGhpcy5jeT0zKmUsdGhpcy5ieT0zKihuLWUpLXRoaXMuY3ksdGhpcy5heT0xLXRoaXMuY3ktdGhpcy5ieSx0aGlzLnAxeD10LHRoaXMucDF5PW4sdGhpcy5wMng9cix0aGlzLnAyeT1ufW8ucHJvdG90eXBlLnNhbXBsZUN1cnZlWD1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXgqdCt0aGlzLmJ4KSp0K3RoaXMuY3gpKnR9LG8ucHJvdG90eXBlLnNhbXBsZUN1cnZlWT1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXkqdCt0aGlzLmJ5KSp0K3RoaXMuY3kpKnR9LG8ucHJvdG90eXBlLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKDMqdGhpcy5heCp0KzIqdGhpcy5ieCkqdCt0aGlzLmN4fSxvLnByb3RvdHlwZS5zb2x2ZUN1cnZlWD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG87Zm9yKHZvaWQgMD09PWUmJihlPTFlLTYpLGk9dCxvPTA7bzw4O28rKyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKS10LE1hdGguYWJzKGEpPGUpcmV0dXJuIGk7dmFyIHM9dGhpcy5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYKGkpO2lmKE1hdGguYWJzKHMpPDFlLTYpYnJlYWs7aS09YS9zfWlmKChpPXQpPChyPTApKXJldHVybiByO2lmKGk+KG49MSkpcmV0dXJuIG47Zm9yKDtyPG47KXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLE1hdGguYWJzKGEtdCk8ZSlyZXR1cm4gaTt0PmE/cj1pOm49aSxpPS41KihuLXIpK3J9cmV0dXJuIGl9LG8ucHJvdG90eXBlLnNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2FtcGxlQ3VydmVZKHRoaXMuc29sdmVDdXJ2ZVgodCxlKSl9O3ZhciBzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmNvbHVtbj10LHRoaXMucm93PWUsdGhpcy56b29tPXJ9O3MucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKHRoaXMuY29sdW1uLHRoaXMucm93LHRoaXMuem9vbSl9LHMucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl96b29tVG8odCl9LHMucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LHMucHJvdG90eXBlLl96b29tVG89ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMix0LXRoaXMuem9vbSk7cmV0dXJuIHRoaXMuY29sdW1uKj1lLHRoaXMucm93Kj1lLHRoaXMuem9vbT10LHRoaXN9LHMucHJvdG90eXBlLl9zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC56b29tVG8odGhpcy56b29tKSx0aGlzLmNvbHVtbi09dC5jb2x1bW4sdGhpcy5yb3ctPXQucm93LHRoaXN9O3ZhciBsPWM7ZnVuY3Rpb24gYyh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9bmV3IGEodCxlLHIsbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLnNvbHZlKHQpfX1jLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGModGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQodCl9LHN1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LG11bHRCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRCeVBvaW50KHQpfSxkaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdkJ5UG9pbnQodCl9LG11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdCh0KX0sZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2Rpdih0KX0scm90YXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZSh0KX0scm90YXRlQXJvdW5kOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlQXJvdW5kKHQsZSl9LG1hdE11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdCh0KX0sdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3VuaXQoKX0scGVycDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxtYWc6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGRpc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIodCkpfSxkaXN0U3FyOmZ1bmN0aW9uKHQpe3ZhciBlPXQueC10aGlzLngscj10LnktdGhpcy55O3JldHVybiBlKmUrcipyfSxhbmdsZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS10LnksdGhpcy54LXQueCl9LGFuZ2xlV2l0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAodC54LHQueSl9LGFuZ2xlV2l0aFNlcDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCplLXRoaXMueSp0LHRoaXMueCp0K3RoaXMueSplKX0sX21hdE11bHQ6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0aGlzLngrdFsxXSp0aGlzLnkscj10WzJdKnRoaXMueCt0WzNdKnRoaXMueTtyZXR1cm4gdGhpcy54PWUsdGhpcy55PXIsdGhpc30sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sX3N1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sX211bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc30sX2RpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxfbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9LF9kaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfSxfdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXYodGhpcy5tYWcoKSksdGhpc30sX3BlcnA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnk7cmV0dXJuIHRoaXMueT10aGlzLngsdGhpcy54PS10LHRoaXN9LF9yb3RhdGU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KSxuPWUqdGhpcy54LXIqdGhpcy55LGk9cip0aGlzLngrZSp0aGlzLnk7cmV0dXJuIHRoaXMueD1uLHRoaXMueT1pLHRoaXN9LF9yb3RhdGVBcm91bmQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9ZS54K3IqKHRoaXMueC1lLngpLW4qKHRoaXMueS1lLnkpLGE9ZS55K24qKHRoaXMueC1lLngpK3IqKHRoaXMueS1lLnkpO3JldHVybiB0aGlzLng9aSx0aGlzLnk9YSx0aGlzfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9fSxjLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBjP3Q6QXJyYXkuaXNBcnJheSh0KT9uZXcgYyh0WzBdLHRbMV0pOnR9O3ZhciBmPXUoLjI1LC4xLC4yNSwxKTtmdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heChlLHQpKX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9dmFyIGQ9MTtmdW5jdGlvbiBnKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF0mJihlW3RdPWVbdF0uYmluZChlKSl9KX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuLTEhPT10LmluZGV4T2YoZSx0Lmxlbmd0aC1lLmxlbmd0aCl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpbltpXT1lLmNhbGwocnx8dGhpcyx0W2ldLGksdCk7cmV0dXJuIG59ZnVuY3Rpb24geSh0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpJiYobltpXT10W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiB4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKHgpOiJvYmplY3QiPT10eXBlb2YgdCYmdD9tKHQseCk6dH12YXIgYj17fTtmdW5jdGlvbiBfKHQpe2JbdF18fCgidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2Fybih0KSxiW3RdPSEwKX1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4oci55LXQueSkqKGUueC10LngpPihlLnktdC55KSooci54LXQueCl9ZnVuY3Rpb24gayh0KXtmb3IodmFyIGU9MCxyPTAsbj10Lmxlbmd0aCxpPW4tMSxhPXZvaWQgMCxvPXZvaWQgMDtyPG47aT1yKyspYT10W3JdLGUrPSgobz10W2ldKS54LWEueCkqKGEueStvLnkpO3JldHVybiBlfXZhciBUPXtVbmtub3duOiJVbmtub3duIixTdHlsZToiU3R5bGUiLFNvdXJjZToiU291cmNlIixUaWxlOiJUaWxlIixHbHlwaHM6IkdseXBocyIsU3ByaXRlSW1hZ2U6IlNwcml0ZUltYWdlIixTcHJpdGVKU09OOiJTcHJpdGVKU09OIixJbWFnZToiSW1hZ2UifTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LmZyZWV6ZShUKTt2YXIgQT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXt0LmNhbGwodGhpcyxlKSx0aGlzLnN0YXR1cz1yLHRoaXMudXJsPW4sdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlKyIgKCIrdGhpcy5zdGF0dXMrIik6ICIrdGhpcy51cmx9LGV9KEVycm9yKTtmdW5jdGlvbiBNKHQpe3ZhciBlPW5ldyBzZWxmLlhNTEh0dHBSZXF1ZXN0O2Zvcih2YXIgciBpbiBlLm9wZW4oIkdFVCIsdC51cmwsITApLHQuaGVhZGVycyllLnNldFJlcXVlc3RIZWFkZXIocix0LmhlYWRlcnNbcl0pO3JldHVybiBlLndpdGhDcmVkZW50aWFscz0iaW5jbHVkZSI9PT10LmNyZWRlbnRpYWxzLGV9dmFyIFM9ZnVuY3Rpb24odCxlKXt2YXIgcj1NKHQpO3JldHVybiByLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLHIub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IEVycm9yKHIuc3RhdHVzVGV4dCkpfSxyLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBuPXIucmVzcG9uc2U7aWYoMD09PW4uYnl0ZUxlbmd0aCYmMjAwPT09ci5zdGF0dXMpcmV0dXJuIGUobmV3IEVycm9yKCJodHRwIHN0YXR1cyAyMDAgcmV0dXJuZWQgd2l0aG91dCBjb250ZW50LiIpKTtyLnN0YXR1cz49MjAwJiZyLnN0YXR1czwzMDAmJnIucmVzcG9uc2U/ZShudWxsLHtkYXRhOm4sY2FjaGVDb250cm9sOnIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNhY2hlLUNvbnRyb2wiKSxleHBpcmVzOnIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV4cGlyZXMiKX0pOmUobmV3IEEoci5zdGF0dXNUZXh0LHIuc3RhdHVzLHQudXJsKSl9LHIuc2VuZCgpLHJ9O2Z1bmN0aW9uIEUodCxlLHIpe3JbdF09clt0XXx8W10sclt0XS5wdXNoKGUpfWZ1bmN0aW9uIEModCxlLHIpe2lmKHImJnJbdF0pe3ZhciBuPXJbdF0uaW5kZXhPZihlKTstMSE9PW4mJnJbdF0uc3BsaWNlKG4sMSl9fXZhciBMPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pLHAodGhpcyxlKSx0aGlzLnR5cGU9dH0sej1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dm9pZCAwPT09ciYmKHI9e30pLHQuY2FsbCh0aGlzLCJlcnJvciIscCh7ZXJyb3I6ZX0scikpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShMKSxPPWZ1bmN0aW9uKCl7fTtPLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzfHx7fSxFKHQsZSx0aGlzLl9saXN0ZW5lcnMpLHRoaXN9LE8ucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe3JldHVybiBDKHQsZSx0aGlzLl9saXN0ZW5lcnMpLEModCxlLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLHRoaXN9LE8ucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fb25lVGltZUxpc3RlbmVycz10aGlzLl9vbmVUaW1lTGlzdGVuZXJzfHx7fSxFKHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxPLnByb3RvdHlwZS5maXJlPWZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bmV3IEwodCxhcmd1bWVudHNbMV18fHt9KSk7dmFyIGU9dC50eXBlO2lmKHRoaXMubGlzdGVucyhlKSl7dC50YXJnZXQ9dGhpcztmb3IodmFyIHI9MCxuPXRoaXMuX2xpc3RlbmVycyYmdGhpcy5fbGlzdGVuZXJzW2VdP3RoaXMuX2xpc3RlbmVyc1tlXS5zbGljZSgpOltdO3I8bi5sZW5ndGg7cis9MSluW3JdLmNhbGwodGhpcyx0KTtmb3IodmFyIGk9MCxhPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnMmJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbZV0/dGhpcy5fb25lVGltZUxpc3RlbmVyc1tlXS5zbGljZSgpOltdO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtDKGUsbyx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSxvLmNhbGwodGhpcyx0KX12YXIgcz10aGlzLl9ldmVudGVkUGFyZW50O3MmJihwKHQsImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhP3RoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKCk6dGhpcy5fZXZlbnRlZFBhcmVudERhdGEpLHMuZmlyZSh0KSl9ZWxzZSB2KGUsImVycm9yIik/Y29uc29sZS5lcnJvcih0JiZ0LmVycm9yfHx0fHwiRW1wdHkgZXJyb3IgZXZlbnQiKTp2KGUsIndhcm5pbmciKSYmY29uc29sZS53YXJuKHQmJnQud2FybmluZ3x8dHx8IkVtcHR5IHdhcm5pbmcgZXZlbnQiKTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUubGlzdGVucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbdF0mJnRoaXMuX2xpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XSYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fZXZlbnRlZFBhcmVudCYmdGhpcy5fZXZlbnRlZFBhcmVudC5saXN0ZW5zKHQpfSxPLnByb3RvdHlwZS5zZXRFdmVudGVkUGFyZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50ZWRQYXJlbnQ9dCx0aGlzLl9ldmVudGVkUGFyZW50RGF0YT1lLHRoaXN9O3ZhciBJPXskdmVyc2lvbjo4LCRyb290Ont2ZXJzaW9uOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WzhdfSxuYW1lOnt0eXBlOiJzdHJpbmcifSxtZXRhZGF0YTp7dHlwZToiKiJ9LGNlbnRlcjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIifSx6b29tOnt0eXBlOiJudW1iZXIifSxiZWFyaW5nOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOiJkZWdyZWVzIn0scGl0Y2g6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHVuaXRzOiJkZWdyZWVzIn0sbGlnaHQ6e3R5cGU6ImxpZ2h0In0sc291cmNlczp7cmVxdWlyZWQ6ITAsdHlwZToic291cmNlcyJ9LHNwcml0ZTp7dHlwZToic3RyaW5nIn0sZ2x5cGhzOnt0eXBlOiJzdHJpbmcifSx0cmFuc2l0aW9uOnt0eXBlOiJ0cmFuc2l0aW9uIn0sbGF5ZXJzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsdmFsdWU6ImxheWVyIn19LHNvdXJjZXM6eyIqIjp7dHlwZToic291cmNlIn19LHNvdXJjZTpbInNvdXJjZV92ZWN0b3IiLCJzb3VyY2VfcmFzdGVyIiwic291cmNlX3Jhc3Rlcl9kZW0iLCJzb3VyY2VfZ2VvanNvbiIsInNvdXJjZV92aWRlbyIsInNvdXJjZV9pbWFnZSJdLHNvdXJjZV92ZWN0b3I6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7dmVjdG9yOnt9fX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxib3VuZHM6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExLDE4MCw4NS4wNTExXX0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfcmFzdGVyOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3Jhc3Rlcjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMSwxODAsODUuMDUxMV19LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LHRpbGVTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTEyLHVuaXRzOiJwaXhlbHMifSxzY2hlbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7eHl6Ont9LHRtczp7fX0sZGVmYXVsdDoieHl6In0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfcmFzdGVyX2RlbTp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOnsicmFzdGVyLWRlbSI6e319fSx1cmw6e3R5cGU6InN0cmluZyJ9LHRpbGVzOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGJvdW5kczp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEsMTgwLDg1LjA1MTFdfSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUxMix1bml0czoicGl4ZWxzIn0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LGVuY29kaW5nOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3RlcnJhcml1bTp7fSxtYXBib3g6e319LGRlZmF1bHQ6Im1hcGJveCJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfZ2VvanNvbjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOntnZW9qc29uOnt9fX0sZGF0YTp7dHlwZToiKiJ9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxOH0sYnVmZmVyOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTI4LG1heGltdW06NTEyLG1pbmltdW06MH0sdG9sZXJhbmNlOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjM3NX0sY2x1c3Rlcjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY2x1c3RlclJhZGl1czp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUwLG1pbmltdW06MH0sY2x1c3Rlck1heFpvb206e3R5cGU6Im51bWJlciJ9LGxpbmVNZXRyaWNzOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfX0sc291cmNlX3ZpZGVvOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3ZpZGVvOnt9fX0sdXJsczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sc291cmNlX2ltYWdlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e2ltYWdlOnt9fX0sdXJsOntyZXF1aXJlZDohMCx0eXBlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sbGF5ZXI6e2lkOnt0eXBlOiJzdHJpbmciLHJlcXVpcmVkOiEwfSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2ZpbGw6e30sbGluZTp7fSxzeW1ib2w6e30sY2lyY2xlOnt9LGhlYXRtYXA6e30sImZpbGwtZXh0cnVzaW9uIjp7fSxyYXN0ZXI6e30saGlsbHNoYWRlOnt9LGJhY2tncm91bmQ6e319LHJlcXVpcmVkOiEwfSxtZXRhZGF0YTp7dHlwZToiKiJ9LHNvdXJjZTp7dHlwZToic3RyaW5nIn0sInNvdXJjZS1sYXllciI6e3R5cGU6InN0cmluZyJ9LG1pbnpvb206e3R5cGU6Im51bWJlciIsbWluaW11bTowLG1heGltdW06MjR9LG1heHpvb206e3R5cGU6Im51bWJlciIsbWluaW11bTowLG1heGltdW06MjR9LGZpbHRlcjp7dHlwZToiZmlsdGVyIn0sbGF5b3V0Ont0eXBlOiJsYXlvdXQifSxwYWludDp7dHlwZToicGFpbnQifX0sbGF5b3V0OlsibGF5b3V0X2ZpbGwiLCJsYXlvdXRfbGluZSIsImxheW91dF9jaXJjbGUiLCJsYXlvdXRfaGVhdG1hcCIsImxheW91dF9maWxsLWV4dHJ1c2lvbiIsImxheW91dF9zeW1ib2wiLCJsYXlvdXRfcmFzdGVyIiwibGF5b3V0X2hpbGxzaGFkZSIsImxheW91dF9iYWNrZ3JvdW5kIl0sbGF5b3V0X2JhY2tncm91bmQ6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9maWxsOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSJ9fSxsYXlvdXRfY2lyY2xlOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSJ9fSxsYXlvdXRfaGVhdG1hcDp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUifX0sbGF5b3V0X2xpbmU6eyJsaW5lLWNhcCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e2J1dHQ6e30scm91bmQ6e30sc3F1YXJlOnt9fSxkZWZhdWx0OiJidXR0In0sImxpbmUtam9pbiI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczp7YmV2ZWw6e30scm91bmQ6e30sbWl0ZXI6e319LGRlZmF1bHQ6Im1pdGVyIn0sImxpbmUtbWl0ZXItbGltaXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6W3sibGluZS1qb2luIjoibWl0ZXIifV19LCJsaW5lLXJvdW5kLWxpbWl0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEuMDUsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6InJvdW5kIn1dfSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSJ9fSxsYXlvdXRfc3ltYm9sOnsic3ltYm9sLXBsYWNlbWVudCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e3BvaW50Ont9LGxpbmU6e319LGRlZmF1bHQ6InBvaW50In0sInN5bWJvbC1zcGFjaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjI1MCxtaW5pbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlt7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dfSwic3ltYm9sLWF2b2lkLWVkZ2VzIjp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITF9LCJpY29uLWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24taWdub3JlLXBsYWNlbWVudCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXX0sImljb24tcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1zaXplIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHVuaXRzOiJmYWN0b3Igb2YgdGhlIG9yaWdpbmFsIGljb24gc2l6ZSIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXRleHQtZml0Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bm9uZTp7fSx3aWR0aDp7fSxoZWlnaHQ6e30sYm90aDp7fX0sZGVmYXVsdDoibm9uZSIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwidGV4dC1maWVsZCJdfSwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6WzAsMCwwLDBdLHVuaXRzOiJwaXhlbHMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiLCJ0ZXh0LWZpZWxkIix7Imljb24tdGV4dC1maXQiOlsiYm90aCIsIndpZHRoIiwiaGVpZ2h0Il19XX0sImljb24taW1hZ2UiOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRva2VuczohMH0sImljb24tcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXBhZGRpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1rZWVwLXVwcmlnaHQiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiLHsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dfSwiaWNvbi1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwidGV4dC1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtZmllbGQiOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6IiIsdG9rZW5zOiEwfSwidGV4dC1mb250Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6WyJPcGVuIFNhbnMgUmVndWxhciIsIkFyaWFsIFVuaWNvZGUgTVMgUmVndWxhciJdLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1zaXplIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjE2LG1pbmltdW06MCx1bml0czoicGl4ZWxzIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtbWF4LXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEwLG1pbmltdW06MCx1bml0czoiZW1zIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtbGluZS1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4yLHVuaXRzOiJlbXMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtbGV0dGVyLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx1bml0czoiZW1zIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtanVzdGlmeSI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczp7bGVmdDp7fSxjZW50ZXI6e30scmlnaHQ6e319LGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczp7Y2VudGVyOnt9LGxlZnQ6e30scmlnaHQ6e30sdG9wOnt9LGJvdHRvbTp7fSwidG9wLWxlZnQiOnt9LCJ0b3AtcmlnaHQiOnt9LCJib3R0b20tbGVmdCI6e30sImJvdHRvbS1yaWdodCI6e319LGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LW1heC1hbmdsZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo0NSx1bml0czoiZGVncmVlcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInRleHQtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LXBhZGRpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1rZWVwLXVwcmlnaHQiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMCxyZXF1aXJlczpbInRleHQtZmllbGQiLHsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dfSwidGV4dC10cmFuc2Zvcm0iOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx2YWx1ZXM6e25vbmU6e30sdXBwZXJjYXNlOnt9LGxvd2VyY2FzZTp7fX0sZGVmYXVsdDoibm9uZSIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LW9mZnNldCI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIix1bml0czoiZW1zIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxsZW5ndGg6MixkZWZhdWx0OlswLDBdLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1hbGxvdy1vdmVybGFwIjp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtb3B0aW9uYWwiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbInRleHQtZmllbGQiLCJpY29uLWltYWdlIl19LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9yYXN0ZXI6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9oaWxsc2hhZGU6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGZpbHRlcjp7dHlwZToiYXJyYXkiLHZhbHVlOiIqIn0sZmlsdGVyX29wZXJhdG9yOnt0eXBlOiJlbnVtIix2YWx1ZXM6eyI9PSI6e30sIiE9Ijp7fSwiPiI6e30sIj49Ijp7fSwiPCI6e30sIjw9Ijp7fSxpbjp7fSwiIWluIjp7fSxhbGw6e30sYW55Ont9LG5vbmU6e30saGFzOnt9LCIhaGFzIjp7fX19LGdlb21ldHJ5X3R5cGU6e3R5cGU6ImVudW0iLHZhbHVlczp7UG9pbnQ6e30sTGluZVN0cmluZzp7fSxQb2x5Z29uOnt9fX0sZnVuY3Rpb25fc3RvcDp7dHlwZToiYXJyYXkiLG1pbmltdW06MCxtYXhpbXVtOjIyLHZhbHVlOlsibnVtYmVyIiwiY29sb3IiXSxsZW5ndGg6Mn0sZXhwcmVzc2lvbjp7dHlwZToiYXJyYXkiLHZhbHVlOiIqIixtaW5pbXVtOjF9LGV4cHJlc3Npb25fbmFtZTp7dHlwZToiZW51bSIsdmFsdWVzOntsZXQ6e2dyb3VwOiJWYXJpYWJsZSBiaW5kaW5nIn0sdmFyOntncm91cDoiVmFyaWFibGUgYmluZGluZyJ9LGxpdGVyYWw6e2dyb3VwOiJUeXBlcyJ9LGFycmF5Ontncm91cDoiVHlwZXMifSxhdDp7Z3JvdXA6Ikxvb2t1cCJ9LGNhc2U6e2dyb3VwOiJEZWNpc2lvbiJ9LG1hdGNoOntncm91cDoiRGVjaXNpb24ifSxjb2FsZXNjZTp7Z3JvdXA6IkRlY2lzaW9uIn0sc3RlcDp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LGludGVycG9sYXRlOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0sbG4yOntncm91cDoiTWF0aCJ9LHBpOntncm91cDoiTWF0aCJ9LGU6e2dyb3VwOiJNYXRoIn0sdHlwZW9mOntncm91cDoiVHlwZXMifSxzdHJpbmc6e2dyb3VwOiJUeXBlcyJ9LG51bWJlcjp7Z3JvdXA6IlR5cGVzIn0sYm9vbGVhbjp7Z3JvdXA6IlR5cGVzIn0sb2JqZWN0Ontncm91cDoiVHlwZXMifSxjb2xsYXRvcjp7Z3JvdXA6IlR5cGVzIn0sInRvLXN0cmluZyI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1udW1iZXIiOntncm91cDoiVHlwZXMifSwidG8tYm9vbGVhbiI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1yZ2JhIjp7Z3JvdXA6IkNvbG9yIn0sInRvLWNvbG9yIjp7Z3JvdXA6IlR5cGVzIn0scmdiOntncm91cDoiQ29sb3IifSxyZ2JhOntncm91cDoiQ29sb3IifSxnZXQ6e2dyb3VwOiJMb29rdXAifSxoYXM6e2dyb3VwOiJMb29rdXAifSxsZW5ndGg6e2dyb3VwOiJMb29rdXAifSxwcm9wZXJ0aWVzOntncm91cDoiRmVhdHVyZSBkYXRhIn0sImdlb21ldHJ5LXR5cGUiOntncm91cDoiRmVhdHVyZSBkYXRhIn0saWQ6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSx6b29tOntncm91cDoiWm9vbSJ9LCJoZWF0bWFwLWRlbnNpdHkiOntncm91cDoiSGVhdG1hcCJ9LCJsaW5lLXByb2dyZXNzIjp7Z3JvdXA6IkhlYXRtYXAifSwiKyI6e2dyb3VwOiJNYXRoIn0sIioiOntncm91cDoiTWF0aCJ9LCItIjp7Z3JvdXA6Ik1hdGgifSwiLyI6e2dyb3VwOiJNYXRoIn0sIiUiOntncm91cDoiTWF0aCJ9LCJeIjp7Z3JvdXA6Ik1hdGgifSxzcXJ0Ontncm91cDoiTWF0aCJ9LGxvZzEwOntncm91cDoiTWF0aCJ9LGxuOntncm91cDoiTWF0aCJ9LGxvZzI6e2dyb3VwOiJNYXRoIn0sc2luOntncm91cDoiTWF0aCJ9LGNvczp7Z3JvdXA6Ik1hdGgifSx0YW46e2dyb3VwOiJNYXRoIn0sYXNpbjp7Z3JvdXA6Ik1hdGgifSxhY29zOntncm91cDoiTWF0aCJ9LGF0YW46e2dyb3VwOiJNYXRoIn0sbWluOntncm91cDoiTWF0aCJ9LG1heDp7Z3JvdXA6Ik1hdGgifSxyb3VuZDp7Z3JvdXA6Ik1hdGgifSxhYnM6e2dyb3VwOiJNYXRoIn0sY2VpbDp7Z3JvdXA6Ik1hdGgifSxmbG9vcjp7Z3JvdXA6Ik1hdGgifSwiPT0iOntncm91cDoiRGVjaXNpb24ifSwiIT0iOntncm91cDoiRGVjaXNpb24ifSwiPiI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI8Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIj49Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIjw9Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sYWxsOntncm91cDoiRGVjaXNpb24ifSxhbnk6e2dyb3VwOiJEZWNpc2lvbiJ9LCIhIjp7Z3JvdXA6IkRlY2lzaW9uIn0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOntncm91cDoiU3RyaW5nIn0sdXBjYXNlOntncm91cDoiU3RyaW5nIn0sZG93bmNhc2U6e2dyb3VwOiJTdHJpbmcifSxjb25jYXQ6e2dyb3VwOiJTdHJpbmcifSwicmVzb2x2ZWQtbG9jYWxlIjp7Z3JvdXA6IlN0cmluZyJ9fX0sbGlnaHQ6e2FuY2hvcjp7dHlwZToiZW51bSIsZGVmYXVsdDoidmlld3BvcnQiLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSx0cmFuc2l0aW9uOiExLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiExLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQifSxwb3NpdGlvbjp7dHlwZToiYXJyYXkiLGRlZmF1bHQ6WzEuMTUsMjEwLDMwXSxsZW5ndGg6Myx2YWx1ZToibnVtYmVyIix0cmFuc2l0aW9uOiEwLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiExfSxjb2xvcjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiNmZmZmZmYiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiExLHRyYW5zaXRpb246ITB9LGludGVuc2l0eTp7dHlwZToibnVtYmVyIixkZWZhdWx0Oi41LG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITEsdHJhbnNpdGlvbjohMH19LHBhaW50OlsicGFpbnRfZmlsbCIsInBhaW50X2xpbmUiLCJwYWludF9jaXJjbGUiLCJwYWludF9oZWF0bWFwIiwicGFpbnRfZmlsbC1leHRydXNpb24iLCJwYWludF9zeW1ib2wiLCJwYWludF9yYXN0ZXIiLCJwYWludF9oaWxsc2hhZGUiLCJwYWludF9iYWNrZ3JvdW5kIl0scGFpbnRfZmlsbDp7ImZpbGwtYW50aWFsaWFzIjp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITB9LCJmaWxsLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJmaWxsLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9XX0sImZpbGwtb3V0bGluZS1jb2xvciI6e3R5cGU6ImNvbG9yIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLXBhdHRlcm4ifSx7ImZpbGwtYW50aWFsaWFzIjohMH1dfSwiZmlsbC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImZpbGwtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImZpbGwtdHJhbnNsYXRlIl19LCJmaWxsLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfX0scGFpbnRfbGluZTp7ImxpbmUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sImxpbmUtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoibGluZS1wYXR0ZXJuIn1dfSwibGluZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImxpbmUtdHJhbnNsYXRlIl19LCJsaW5lLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWdhcC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS1vZmZzZXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWRhc2hhcnJheSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6ImxpbmUgd2lkdGhzIixyZXF1aXJlczpbeyIhIjoibGluZS1wYXR0ZXJuIn1dfSwibGluZS1wYXR0ZXJuIjp7dHlwZToic3RyaW5nIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImxpbmUtZ3JhZGllbnQiOnt0eXBlOiJjb2xvciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiExLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITEsdHJhbnNpdGlvbjohMSxyZXF1aXJlczpbeyIhIjoibGluZS1kYXNoYXJyYXkifSx7IiEiOiJsaW5lLXBhdHRlcm4ifSx7c291cmNlOiJnZW9qc29uIixoYXM6e2xpbmVNZXRyaWNzOiEwfX1dfX0scGFpbnRfY2lyY2xlOnsiY2lyY2xlLXJhZGl1cyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1LG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiY2lyY2xlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJjaXJjbGUtYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJjaXJjbGUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImNpcmNsZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiY2lyY2xlLXRyYW5zbGF0ZSJdfSwiY2lyY2xlLXBpdGNoLXNjYWxlIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAifSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoidmlld3BvcnQifSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiY2lyY2xlLXN0cm9rZS1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfX0scGFpbnRfaGVhdG1hcDp7ImhlYXRtYXAtcmFkaXVzIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwLG1pbmltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiaGVhdG1hcC13ZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMX0sImhlYXRtYXAtaW50ZW5zaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiExLHRyYW5zaXRpb246ITB9LCJoZWF0bWFwLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6WyJpbnRlcnBvbGF0ZSIsWyJsaW5lYXIiXSxbImhlYXRtYXAtZGVuc2l0eSJdLDAsInJnYmEoMCwgMCwgMjU1LCAwKSIsLjEsInJveWFsYmx1ZSIsLjMsImN5YW4iLC41LCJsaW1lIiwuNywieWVsbG93IiwxLCJyZWQiXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITEsInByb3BlcnR5LWZ1bmN0aW9uIjohMSx0cmFuc2l0aW9uOiExfSwiaGVhdG1hcC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMSx0cmFuc2l0aW9uOiEwfX0scGFpbnRfc3ltYm9sOnsiaWNvbi1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1oYWxvLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6InJnYmEoMCwgMCwgMCwgMCkiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLWhhbG8td2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24taGFsby1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsImljb24tdHJhbnNsYXRlIl19LCJ0ZXh0LW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWhhbG8tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoicmdiYSgwLCAwLCAwLCAwKSIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtaGFsby13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1oYWxvLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwidGV4dC10cmFuc2xhdGUiXX19LHBhaW50X3Jhc3Rlcjp7InJhc3Rlci1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sInJhc3Rlci1odWUtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoiZGVncmVlcyJ9LCJyYXN0ZXItYnJpZ2h0bmVzcy1taW4iOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OjAsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLWJyaWdodG5lc3MtbWF4Ijp7dHlwZToibnVtYmVyIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sInJhc3Rlci1zYXR1cmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTotMSxtYXhpbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJyYXN0ZXItY29udHJhc3QiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sInJhc3Rlci1mYWRlLWR1cmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwMCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITEsdW5pdHM6Im1pbGxpc2Vjb25kcyJ9fSxwYWludF9oaWxsc2hhZGU6eyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDozMzUsbWluaW11bTowLG1heGltdW06MzU5LGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiExfSwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6InZpZXdwb3J0In0sImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiNGRkZGRkYiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiaGlsbHNoYWRlLWFjY2VudC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2JhY2tncm91bmQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJiYWNrZ3JvdW5kLXBhdHRlcm4ifV19LCJiYWNrZ3JvdW5kLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiYmFja2dyb3VuZC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn0sZGVsYXk6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn19LCJsYXlvdXRfZmlsbC1leHRydXNpb24iOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSJ9fSxmdW5jdGlvbjp7ZXhwcmVzc2lvbjp7dHlwZToiZXhwcmVzc2lvbiJ9LHN0b3BzOnt0eXBlOiJhcnJheSIsdmFsdWU6ImZ1bmN0aW9uX3N0b3AifSxiYXNlOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjB9LHByb3BlcnR5Ont0eXBlOiJzdHJpbmciLGRlZmF1bHQ6IiR6b29tIn0sdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntpZGVudGl0eTp7fSxleHBvbmVudGlhbDp7fSxpbnRlcnZhbDp7fSxjYXRlZ29yaWNhbDp7fX0sZGVmYXVsdDoiZXhwb25lbnRpYWwifSxjb2xvclNwYWNlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3JnYjp7fSxsYWI6e30saGNsOnt9fSxkZWZhdWx0OiJyZ2IifSxkZWZhdWx0Ont0eXBlOiIqIixyZXF1aXJlZDohMX19LCJwYWludF9maWxsLWV4dHJ1c2lvbiI6eyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMSxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSwiZmlsbC1leHRydXNpb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiZmlsbC1leHRydXNpb24tcGF0dGVybiJ9XX0sImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSJdfSwiZmlsbC1leHRydXNpb24tcGF0dGVybiI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6Im1ldGVycyIsdHJhbnNpdGlvbjohMH0sImZpbGwtZXh0cnVzaW9uLWJhc2UiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6Im1ldGVycyIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImZpbGwtZXh0cnVzaW9uLWhlaWdodCJdfX19LEQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5tZXNzYWdlPSh0P3QrIjogIjoiIikrcixuJiYodGhpcy5pZGVudGlmaWVyPW4pLG51bGwhPWUmJmUuX19saW5lX18mJih0aGlzLmxpbmU9ZS5fX2xpbmVfXyl9O2Z1bmN0aW9uIFAodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlO3JldHVybiByP1tuZXcgRChlLHIsImNvbnN0YW50cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2OCIpXTpbXX1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIEJvb2xlYW4/dC52YWx1ZU9mKCk6dH1mdW5jdGlvbiBCKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKEIpOkYodCl9dmFyIE49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLHIpLHRoaXMubWVzc2FnZT1yLHRoaXMua2V5PWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEVycm9yKSxqPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pLHRoaXMucGFyZW50PXQsdGhpcy5iaW5kaW5ncz17fTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aVswXSxvPWlbMV07dGhpcy5iaW5kaW5nc1thXT1vfX07ai5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaih0aGlzLHQpfSxqLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kaW5nc1t0XSlyZXR1cm4gdGhpcy5iaW5kaW5nc1t0XTtpZih0aGlzLnBhcmVudClyZXR1cm4gdGhpcy5wYXJlbnQuZ2V0KHQpO3Rocm93IG5ldyBFcnJvcih0KyIgbm90IGZvdW5kIGluIHNjb3BlLiIpfSxqLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmJpbmRpbmdzW3RdfHwhIXRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5oYXModCl9O3ZhciBWPXtraW5kOiJudWxsIn0sVT17a2luZDoibnVtYmVyIn0scT17a2luZDoic3RyaW5nIn0sSD17a2luZDoiYm9vbGVhbiJ9LEc9e2tpbmQ6ImNvbG9yIn0sWT17a2luZDoib2JqZWN0In0sVz17a2luZDoidmFsdWUifSxYPXtraW5kOiJjb2xsYXRvciJ9O2Z1bmN0aW9uIFoodCxlKXtyZXR1cm57a2luZDoiYXJyYXkiLGl0ZW1UeXBlOnQsTjplfX1mdW5jdGlvbiAkKHQpe2lmKCJhcnJheSI9PT10LmtpbmQpe3ZhciBlPSQodC5pdGVtVHlwZSk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0Lk4/ImFycmF5PCIrZSsiLCAiK3QuTisiPiI6InZhbHVlIj09PXQuaXRlbVR5cGUua2luZD8iYXJyYXkiOiJhcnJheTwiK2UrIj4ifXJldHVybiB0LmtpbmR9dmFyIEo9W1YsVSxxLEgsRyxZLFooVyldO2Z1bmN0aW9uIEsodCxlKXtpZigiZXJyb3IiPT09ZS5raW5kKXJldHVybiBudWxsO2lmKCJhcnJheSI9PT10LmtpbmQpe2lmKCJhcnJheSI9PT1lLmtpbmQmJiFLKHQuaXRlbVR5cGUsZS5pdGVtVHlwZSkmJigibnVtYmVyIiE9dHlwZW9mIHQuTnx8dC5OPT09ZS5OKSlyZXR1cm4gbnVsbH1lbHNle2lmKHQua2luZD09PWUua2luZClyZXR1cm4gbnVsbDtpZigidmFsdWUiPT09dC5raW5kKWZvcih2YXIgcj0wLG49SjtyPG4ubGVuZ3RoO3IrPTEpaWYoIUsobltyXSxlKSlyZXR1cm4gbnVsbH1yZXR1cm4iRXhwZWN0ZWQgIiskKHQpKyIgYnV0IGZvdW5kICIrJChlKSsiIGluc3RlYWQuIn12YXIgUT1pKGZ1bmN0aW9uKHQsZSl7dmFyIHI9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1LDFdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTUsMV0sYXF1YTpbMCwyNTUsMjU1LDFdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyLDFdLGF6dXJlOlsyNDAsMjU1LDI1NSwxXSxiZWlnZTpbMjQ1LDI0NSwyMjAsMV0sYmlzcXVlOlsyNTUsMjI4LDE5NiwxXSxibGFjazpbMCwwLDAsMV0sYmxhbmNoZWRhbG1vbmQ6WzI1NSwyMzUsMjA1LDFdLGJsdWU6WzAsMCwyNTUsMV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNiwxXSxicm93bjpbMTY1LDQyLDQyLDFdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzUsMV0sY2FkZXRibHVlOls5NSwxNTgsMTYwLDFdLGNoYXJ0cmV1c2U6WzEyNywyNTUsMCwxXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzAsMV0sY29yYWw6WzI1NSwxMjcsODAsMV0sY29ybmZsb3dlcmJsdWU6WzEwMCwxNDksMjM3LDFdLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMCwxXSxjcmltc29uOlsyMjAsMjAsNjAsMV0sY3lhbjpbMCwyNTUsMjU1LDFdLGRhcmtibHVlOlswLDAsMTM5LDFdLGRhcmtjeWFuOlswLDEzOSwxMzksMV0sZGFya2dvbGRlbnJvZDpbMTg0LDEzNCwxMSwxXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjksMV0sZGFya2dyZWVuOlswLDEwMCwwLDFdLGRhcmtncmV5OlsxNjksMTY5LDE2OSwxXSxkYXJra2hha2k6WzE4OSwxODMsMTA3LDFdLGRhcmttYWdlbnRhOlsxMzksMCwxMzksMV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0NywxXSxkYXJrb3JhbmdlOlsyNTUsMTQwLDAsMV0sZGFya29yY2hpZDpbMTUzLDUwLDIwNCwxXSxkYXJrcmVkOlsxMzksMCwwLDFdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyLDFdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDMsMV0sZGFya3NsYXRlYmx1ZTpbNzIsNjEsMTM5LDFdLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5LDFdLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5LDFdLGRhcmt0dXJxdW9pc2U6WzAsMjA2LDIwOSwxXSxkYXJrdmlvbGV0OlsxNDgsMCwyMTEsMV0sZGVlcHBpbms6WzI1NSwyMCwxNDcsMV0sZGVlcHNreWJsdWU6WzAsMTkxLDI1NSwxXSxkaW1ncmF5OlsxMDUsMTA1LDEwNSwxXSxkaW1ncmV5OlsxMDUsMTA1LDEwNSwxXSxkb2RnZXJibHVlOlszMCwxNDQsMjU1LDFdLGZpcmVicmljazpbMTc4LDM0LDM0LDFdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MCwxXSxmb3Jlc3RncmVlbjpbMzQsMTM5LDM0LDFdLGZ1Y2hzaWE6WzI1NSwwLDI1NSwxXSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwLDFdLGdob3N0d2hpdGU6WzI0OCwyNDgsMjU1LDFdLGdvbGQ6WzI1NSwyMTUsMCwxXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzIsMV0sZ3JheTpbMTI4LDEyOCwxMjgsMV0sZ3JlZW46WzAsMTI4LDAsMV0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDcsMV0sZ3JleTpbMTI4LDEyOCwxMjgsMV0saG9uZXlkZXc6WzI0MCwyNTUsMjQwLDFdLGhvdHBpbms6WzI1NSwxMDUsMTgwLDFdLGluZGlhbnJlZDpbMjA1LDkyLDkyLDFdLGluZGlnbzpbNzUsMCwxMzAsMV0saXZvcnk6WzI1NSwyNTUsMjQwLDFdLGtoYWtpOlsyNDAsMjMwLDE0MCwxXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTAsMV0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDUsMV0sbGF3bmdyZWVuOlsxMjQsMjUyLDAsMV0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNSwxXSxsaWdodGJsdWU6WzE3MywyMTYsMjMwLDFdLGxpZ2h0Y29yYWw6WzI0MCwxMjgsMTI4LDFdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTUsMV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwLDFdLGxpZ2h0Z3JheTpbMjExLDIxMSwyMTEsMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDQsMV0sbGlnaHRncmV5OlsyMTEsMjExLDIxMSwxXSxsaWdodHBpbms6WzI1NSwxODIsMTkzLDFdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMiwxXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwLDFdLGxpZ2h0c2t5Ymx1ZTpbMTM1LDIwNiwyNTAsMV0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1MywxXSxsaWdodHN0ZWVsYmx1ZTpbMTc2LDE5NiwyMjIsMV0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0LDFdLGxpbWU6WzAsMjU1LDAsMV0sbGltZWdyZWVuOls1MCwyMDUsNTAsMV0sbGluZW46WzI1MCwyNDAsMjMwLDFdLG1hZ2VudGE6WzI1NSwwLDI1NSwxXSxtYXJvb246WzEyOCwwLDAsMV0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzAsMV0sbWVkaXVtYmx1ZTpbMCwwLDIwNSwxXSxtZWRpdW1vcmNoaWQ6WzE4Niw4NSwyMTEsMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOSwxXSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExMywxXSxtZWRpdW1zbGF0ZWJsdWU6WzEyMywxMDQsMjM4LDFdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTQsMV0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0LDFdLG1lZGl1bXZpb2xldHJlZDpbMTk5LDIxLDEzMywxXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMiwxXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwLDFdLG1pc3R5cm9zZTpbMjU1LDIyOCwyMjUsMV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxLDFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3MywxXSxuYXZ5OlswLDAsMTI4LDFdLG9sZGxhY2U6WzI1MywyNDUsMjMwLDFdLG9saXZlOlsxMjgsMTI4LDAsMV0sb2xpdmVkcmFiOlsxMDcsMTQyLDM1LDFdLG9yYW5nZTpbMjU1LDE2NSwwLDFdLG9yYW5nZXJlZDpbMjU1LDY5LDAsMV0sb3JjaGlkOlsyMTgsMTEyLDIxNCwxXSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MCwxXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyLDFdLHBhbGV0dXJxdW9pc2U6WzE3NSwyMzgsMjM4LDFdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3LDFdLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzLDFdLHBlYWNocHVmZjpbMjU1LDIxOCwxODUsMV0scGVydTpbMjA1LDEzMyw2MywxXSxwaW5rOlsyNTUsMTkyLDIwMywxXSxwbHVtOlsyMjEsMTYwLDIyMSwxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMCwxXSxwdXJwbGU6WzEyOCwwLDEyOCwxXSxyZWJlY2NhcHVycGxlOlsxMDIsNTEsMTUzLDFdLHJlZDpbMjU1LDAsMCwxXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzLDFdLHJveWFsYmx1ZTpbNjUsMTA1LDIyNSwxXSxzYWRkbGVicm93bjpbMTM5LDY5LDE5LDFdLHNhbG1vbjpbMjUwLDEyOCwxMTQsMV0sc2FuZHlicm93bjpbMjQ0LDE2NCw5NiwxXSxzZWFncmVlbjpbNDYsMTM5LDg3LDFdLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOCwxXSxzaWVubmE6WzE2MCw4Miw0NSwxXSxzaWx2ZXI6WzE5MiwxOTIsMTkyLDFdLHNreWJsdWU6WzEzNSwyMDYsMjM1LDFdLHNsYXRlYmx1ZTpbMTA2LDkwLDIwNSwxXSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0LDFdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDQsMV0sc25vdzpbMjU1LDI1MCwyNTAsMV0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyNywxXSxzdGVlbGJsdWU6WzcwLDEzMCwxODAsMV0sdGFuOlsyMTAsMTgwLDE0MCwxXSx0ZWFsOlswLDEyOCwxMjgsMV0sdGhpc3RsZTpbMjE2LDE5MSwyMTYsMV0sdG9tYXRvOlsyNTUsOTksNzEsMV0sdHVycXVvaXNlOls2NCwyMjQsMjA4LDFdLHZpb2xldDpbMjM4LDEzMCwyMzgsMV0sd2hlYXQ6WzI0NSwyMjIsMTc5LDFdLHdoaXRlOlsyNTUsMjU1LDI1NSwxXSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NSwxXSx5ZWxsb3c6WzI1NSwyNTUsMCwxXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MCwxXX07ZnVuY3Rpb24gbih0KXtyZXR1cm4odD1NYXRoLnJvdW5kKHQpKTwwPzA6dD4yNTU/MjU1OnR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdDwwPzA6dD4xPzE6dH1mdW5jdGlvbiBhKHQpe3JldHVybiIlIj09PXRbdC5sZW5ndGgtMV0/bihwYXJzZUZsb2F0KHQpLzEwMCoyNTUpOm4ocGFyc2VJbnQodCkpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIiUiPT09dFt0Lmxlbmd0aC0xXT9pKHBhcnNlRmxvYXQodCkvMTAwKTppKHBhcnNlRmxvYXQodCkpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiByPDA/cis9MTpyPjEmJihyLT0xKSw2KnI8MT90KyhlLXQpKnIqNjoyKnI8MT9lOjMqcjwyP3QrKGUtdCkqKDIvMy1yKSo2OnR9dHJ5e2UucGFyc2VDU1NDb2xvcj1mdW5jdGlvbih0KXt2YXIgZSxpPXQucmVwbGFjZSgvIC9nLCIiKS50b0xvd2VyQ2FzZSgpO2lmKGkgaW4gcilyZXR1cm4gcltpXS5zbGljZSgpO2lmKCIjIj09PWlbMF0pcmV0dXJuIDQ9PT1pLmxlbmd0aD8oZT1wYXJzZUludChpLnN1YnN0cigxKSwxNikpPj0wJiZlPD00MDk1P1soMzg0MCZlKT4+NHwoMzg0MCZlKT4+OCwyNDAmZXwoMjQwJmUpPj40LDE1JmV8KDE1JmUpPDw0LDFdOm51bGw6Nz09PWkubGVuZ3RoJiYoZT1wYXJzZUludChpLnN1YnN0cigxKSwxNikpPj0wJiZlPD0xNjc3NzIxNT9bKDE2NzExNjgwJmUpPj4xNiwoNjUyODAmZSk+PjgsMjU1JmUsMV06bnVsbDt2YXIgbD1pLmluZGV4T2YoIigiKSxjPWkuaW5kZXhPZigiKSIpO2lmKC0xIT09bCYmYysxPT09aS5sZW5ndGgpe3ZhciB1PWkuc3Vic3RyKDAsbCksZj1pLnN1YnN0cihsKzEsYy0obCsxKSkuc3BsaXQoIiwiKSxoPTE7c3dpdGNoKHUpe2Nhc2UicmdiYSI6aWYoNCE9PWYubGVuZ3RoKXJldHVybiBudWxsO2g9byhmLnBvcCgpKTtjYXNlInJnYiI6cmV0dXJuIDMhPT1mLmxlbmd0aD9udWxsOlthKGZbMF0pLGEoZlsxXSksYShmWzJdKSxoXTtjYXNlImhzbGEiOmlmKDQhPT1mLmxlbmd0aClyZXR1cm4gbnVsbDtoPW8oZi5wb3AoKSk7Y2FzZSJoc2wiOmlmKDMhPT1mLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgcD0ocGFyc2VGbG9hdChmWzBdKSUzNjArMzYwKSUzNjAvMzYwLGQ9byhmWzFdKSxnPW8oZlsyXSksdj1nPD0uNT9nKihkKzEpOmcrZC1nKmQsbT0yKmctdjtyZXR1cm5bbigyNTUqcyhtLHYscCsxLzMpKSxuKDI1NSpzKG0sdixwKSksbigyNTUqcyhtLHYscC0xLzMpKSxoXTtkZWZhdWx0OnJldHVybiBudWxsfX1yZXR1cm4gbnVsbH19Y2F0Y2godCl7fX0pLnBhcnNlQ1NTQ29sb3IsdHQ9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49MSksdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPXIsdGhpcy5hPW59O3R0LnBhcnNlPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiB0dClyZXR1cm4gdDtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPVEodCk7aWYoZSlyZXR1cm4gbmV3IHR0KGVbMF0vMjU1KmVbM10sZVsxXS8yNTUqZVszXSxlWzJdLzI1NSplWzNdLGVbM10pfX19LHR0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudG9BcnJheSgpLGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4icmdiYSgiK01hdGgucm91bmQoZSkrIiwiK01hdGgucm91bmQocikrIiwiK01hdGgucm91bmQobikrIiwiK2krIikifSx0dC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXMucixlPXRoaXMuZyxyPXRoaXMuYixuPXRoaXMuYTtyZXR1cm4gMD09PW4/WzAsMCwwLDBdOlsyNTUqdC9uLDI1NSplL24sMjU1KnIvbixuXX0sdHQuYmxhY2s9bmV3IHR0KDAsMCwwLDEpLHR0LndoaXRlPW5ldyB0dCgxLDEsMSwxKSx0dC50cmFuc3BhcmVudD1uZXcgdHQoMCwwLDAsMCk7dmFyIGV0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNlbnNpdGl2aXR5PXQ/ZT8idmFyaWFudCI6ImNhc2UiOmU/ImFjY2VudCI6ImJhc2UiLHRoaXMubG9jYWxlPXIsdGhpcy5jb2xsYXRvcj1uZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSx7c2Vuc2l0aXZpdHk6dGhpcy5zZW5zaXRpdml0eSx1c2FnZToic2VhcmNoIn0pfTtldC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbGxhdG9yLmNvbXBhcmUodCxlKX0sZXQucHJvdG90eXBlLnJlc29sdmVkTG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlP3RoaXMubG9jYWxlOltdKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGV9O3ZhciBydD1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPVgsdGhpcy5sb2NhbGU9cix0aGlzLmNhc2VTZW5zaXRpdmU9dCx0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZT1lfTtmdW5jdGlvbiBudCh0LGUscixuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJnQ8PTI1NSYmIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiZlPD0yNTUmJiJudW1iZXIiPT10eXBlb2YgciYmcj49MCYmcjw9MjU1P3ZvaWQgMD09PW58fCJudW1iZXIiPT10eXBlb2YgbiYmbj49MCYmbjw9MT9udWxsOiJJbnZhbGlkIHJnYmEgdmFsdWUgWyIrW3QsZSxyLG5dLmpvaW4oIiwgIikrIl06ICdhJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iOiJJbnZhbGlkIHJnYmEgdmFsdWUgWyIrKCJudW1iZXIiPT10eXBlb2Ygbj9bdCxlLHIsbl06W3QsZSxyXSkuam9pbigiLCAiKSsiXTogJ3InLCAnZycsIGFuZCAnYicgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NS4ifWZ1bmN0aW9uIGl0KHQpe2lmKG51bGw9PT10KXJldHVybiBWO2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcTtpZigiYm9vbGVhbiI9PXR5cGVvZiB0KXJldHVybiBIO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gVTtpZih0IGluc3RhbmNlb2YgdHQpcmV0dXJuIEc7aWYodCBpbnN0YW5jZW9mIGV0KXJldHVybiBYO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pdChpW25dKTtpZihlKXtpZihlPT09YSljb250aW51ZTtlPVc7YnJlYWt9ZT1hfXJldHVybiBaKGV8fFcscil9cmV0dXJuIFl9cnQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIG9uZSBhcmd1bWVudC4iKTt2YXIgcj10WzFdO2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm4gZS5lcnJvcigiQ29sbGF0b3Igb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4iKTt2YXIgbj1lLnBhcnNlKHZvaWQgMCE9PXJbImNhc2Utc2Vuc2l0aXZlIl0mJnJbImNhc2Utc2Vuc2l0aXZlIl0sMSxIKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1lLnBhcnNlKHZvaWQgMCE9PXJbImRpYWNyaXRpYy1zZW5zaXRpdmUiXSYmclsiZGlhY3JpdGljLXNlbnNpdGl2ZSJdLDEsSCk7aWYoIWkpcmV0dXJuIG51bGw7dmFyIGE9bnVsbDtyZXR1cm4gci5sb2NhbGUmJiEoYT1lLnBhcnNlKHIubG9jYWxlLDEscSkpP251bGw6bmV3IHJ0KG4saSxhKX0scnQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZXQodGhpcy5jYXNlU2Vuc2l0aXZlLmV2YWx1YXRlKHQpLHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlLmV2YWx1YXRlKHQpLHRoaXMubG9jYWxlP3RoaXMubG9jYWxlLmV2YWx1YXRlKHQpOm51bGwpfSxydC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5jYXNlU2Vuc2l0aXZlKSx0KHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlKSx0aGlzLmxvY2FsZSYmdCh0aGlzLmxvY2FsZSl9LHJ0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0scnQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0WyJjYXNlLXNlbnNpdGl2ZSJdPXRoaXMuY2FzZVNlbnNpdGl2ZS5zZXJpYWxpemUoKSx0WyJkaWFjcml0aWMtc2Vuc2l0aXZlIl09dGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuc2VyaWFsaXplKCksdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksWyJjb2xsYXRvciIsdF19O3ZhciBhdD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMudmFsdWU9ZX07YXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIidsaXRlcmFsJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2lmKCFmdW5jdGlvbiB0KGUpe2lmKG51bGw9PT1lKXJldHVybiEwO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4hMDtpZigiYm9vbGVhbiI9PXR5cGVvZiBlKXJldHVybiEwO2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4hMDtpZihlIGluc3RhbmNlb2YgdHQpcmV0dXJuITA7aWYoZSBpbnN0YW5jZW9mIGV0KXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIXQobltyXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IodmFyIGkgaW4gZSlpZighdChlW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0odFsxXSkpcmV0dXJuIGUuZXJyb3IoImludmFsaWQgdmFsdWUiKTt2YXIgcj10WzFdLG49aXQociksaT1lLmV4cGVjdGVkVHlwZTtyZXR1cm4iYXJyYXkiIT09bi5raW5kfHwwIT09bi5OfHwhaXx8ImFycmF5IiE9PWkua2luZHx8Im51bWJlciI9PXR5cGVvZiBpLk4mJjAhPT1pLk58fChuPWkpLG5ldyBhdChuLHIpfSxhdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sYXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sYXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt0aGlzLnZhbHVlXX0sYXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiJhcnJheSI9PT10aGlzLnR5cGUua2luZHx8Im9iamVjdCI9PT10aGlzLnR5cGUua2luZD9bImxpdGVyYWwiLHRoaXMudmFsdWVdOnRoaXMudmFsdWUgaW5zdGFuY2VvZiB0dD9bInJnYmEiXS5jb25jYXQodGhpcy52YWx1ZS50b0FycmF5KCkpOnRoaXMudmFsdWV9O3ZhciBvdD1mdW5jdGlvbih0KXt0aGlzLm5hbWU9IkV4cHJlc3Npb25FdmFsdWF0aW9uRXJyb3IiLHRoaXMubWVzc2FnZT10fTtvdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZX07dmFyIHN0PXtzdHJpbmc6cSxudW1iZXI6VSxib29sZWFuOkgsb2JqZWN0Oll9LGx0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2x0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO2Zvcih2YXIgcj10WzBdLG49c3Rbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLFcpO2lmKCFvKXJldHVybiBudWxsO2kucHVzaChvKX1yZXR1cm4gbmV3IGx0KG4saSl9LGx0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJncy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLmFyZ3NbZV0uZXZhbHVhdGUodCk7aWYoIUsodGhpcy50eXBlLGl0KHIpKSlyZXR1cm4gcjtpZihlPT09dGhpcy5hcmdzLmxlbmd0aC0xKXRocm93IG5ldyBvdCgiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSAiKyQodGhpcy50eXBlKSsiLCBidXQgZm91bmQgIiskKGl0KHIpKSsiIGluc3RlYWQuIil9cmV0dXJuIG51bGx9LGx0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGx0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sbHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblt0aGlzLnR5cGUua2luZF0uY29uY2F0KHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSl9O3ZhciBjdD17c3RyaW5nOnEsbnVtYmVyOlUsYm9vbGVhbjpIfSx1dD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuaW5wdXQ9ZX07dXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyfHx0Lmxlbmd0aD40KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAxLCAyLCBvciAzIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcixuO2lmKHQubGVuZ3RoPjIpe3ZhciBpPXRbMV07aWYoInN0cmluZyIhPXR5cGVvZiBpfHwhKGkgaW4gY3QpKXJldHVybiBlLmVycm9yKCdUaGUgaXRlbSB0eXBlIGFyZ3VtZW50IG9mICJhcnJheSIgbXVzdCBiZSBvbmUgb2Ygc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4nLDEpO3I9Y3RbaV19ZWxzZSByPVc7aWYodC5sZW5ndGg+Myl7aWYoIm51bWJlciIhPXR5cGVvZiB0WzJdfHx0WzJdPDB8fHRbMl0hPT1NYXRoLmZsb29yKHRbMl0pKXJldHVybiBlLmVycm9yKCdUaGUgbGVuZ3RoIGFyZ3VtZW50IHRvICJhcnJheSIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCcsMik7bj10WzJdfXZhciBhPVoocixuKSxvPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLFcpO3JldHVybiBvP25ldyB1dChhLG8pOm51bGx9LHV0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKEsodGhpcy50eXBlLGl0KGUpKSl0aHJvdyBuZXcgb3QoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgIiskKHRoaXMudHlwZSkrIiwgYnV0IGZvdW5kICIrJChpdChlKSkrIiBpbnN0ZWFkLiIpO3JldHVybiBlfSx1dC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LHV0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dC5wb3NzaWJsZU91dHB1dHMoKX0sdXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiYXJyYXkiXSxlPXRoaXMudHlwZS5pdGVtVHlwZTtpZigic3RyaW5nIj09PWUua2luZHx8Im51bWJlciI9PT1lLmtpbmR8fCJib29sZWFuIj09PWUua2luZCl7dC5wdXNoKGUua2luZCk7dmFyIHI9dGhpcy50eXBlLk47Im51bWJlciI9PXR5cGVvZiByJiZ0LnB1c2gocil9cmV0dXJuIHQucHVzaCh0aGlzLmlucHV0LnNlcmlhbGl6ZSgpKSx0fTt2YXIgZnQ9eyJ0by1udW1iZXIiOlUsInRvLWNvbG9yIjpHfSxodD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtodC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTtmb3IodmFyIHI9dFswXSxuPWZ0W3JdLGk9W10sYT0xO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1lLnBhcnNlKHRbYV0sYSxXKTtpZighbylyZXR1cm4gbnVsbDtpLnB1c2gobyl9cmV0dXJuIG5ldyBodChuLGkpfSxodC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7aWYoImNvbG9yIj09PXRoaXMudHlwZS5raW5kKXtmb3IodmFyIGUscixuPTAsaT10aGlzLmFyZ3M7bjxpLmxlbmd0aDtuKz0xKWlmKHI9bnVsbCwic3RyaW5nIj09dHlwZW9mKGU9aVtuXS5ldmFsdWF0ZSh0KSkpe3ZhciBhPXQucGFyc2VDb2xvcihlKTtpZihhKXJldHVybiBhfWVsc2UgaWYoQXJyYXkuaXNBcnJheShlKSYmIShyPWUubGVuZ3RoPDN8fGUubGVuZ3RoPjQ/IkludmFsaWQgcmJnYSB2YWx1ZSAiK0pTT04uc3RyaW5naWZ5KGUpKyI6IGV4cGVjdGVkIGFuIGFycmF5IGNvbnRhaW5pbmcgZWl0aGVyIHRocmVlIG9yIGZvdXIgbnVtZXJpYyB2YWx1ZXMuIjpudChlWzBdLGVbMV0sZVsyXSxlWzNdKSkpcmV0dXJuIG5ldyB0dChlWzBdLzI1NSxlWzFdLzI1NSxlWzJdLzI1NSxlWzNdKTt0aHJvdyBuZXcgb3Qocnx8IkNvdWxkIG5vdCBwYXJzZSBjb2xvciBmcm9tIHZhbHVlICciKygic3RyaW5nIj09dHlwZW9mIGU/ZTpKU09OLnN0cmluZ2lmeShlKSkrIiciKX1mb3IodmFyIG89bnVsbCxzPTAsbD10aGlzLmFyZ3M7czxsLmxlbmd0aDtzKz0xKWlmKG51bGwhPT0obz1sW3NdLmV2YWx1YXRlKHQpKSl7dmFyIGM9TnVtYmVyKG8pO2lmKCFpc05hTihjKSlyZXR1cm4gY310aHJvdyBuZXcgb3QoIkNvdWxkIG5vdCBjb252ZXJ0ICIrSlNPTi5zdHJpbmdpZnkobykrIiB0byBudW1iZXIuIil9LGh0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGh0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0saHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsidG8tIit0aGlzLnR5cGUua2luZF07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pLHR9O3ZhciBwdD1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl0sZHQ9ZnVuY3Rpb24oKXt0aGlzLl9wYXJzZUNvbG9yQ2FjaGU9e319O2R0LnByb3RvdHlwZS5pZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmUmJiJpZCJpbiB0aGlzLmZlYXR1cmU/dGhpcy5mZWF0dXJlLmlkOm51bGx9LGR0LnByb3RvdHlwZS5nZW9tZXRyeVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlPyJudW1iZXIiPT10eXBlb2YgdGhpcy5mZWF0dXJlLnR5cGU/cHRbdGhpcy5mZWF0dXJlLnR5cGVdOnRoaXMuZmVhdHVyZS50eXBlOm51bGx9LGR0LnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLnByb3BlcnRpZXN8fHt9fSxkdC5wcm90b3R5cGUucGFyc2VDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF07cmV0dXJuIGV8fChlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XT10dC5wYXJzZSh0KSksZX07dmFyIGd0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuX2V2YWx1YXRlPXIsdGhpcy5hcmdzPW59O2Z1bmN0aW9uIHZ0KHQpe2lmKHQgaW5zdGFuY2VvZiBndCl7aWYoImdldCI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKCJoYXMiPT09dC5uYW1lJiYxPT09dC5hcmdzLmxlbmd0aClyZXR1cm4hMTtpZigicHJvcGVydGllcyI9PT10Lm5hbWV8fCJnZW9tZXRyeS10eXBlIj09PXQubmFtZXx8ImlkIj09PXQubmFtZSlyZXR1cm4hMTtpZigvXmZpbHRlci0vLnRlc3QodC5uYW1lKSlyZXR1cm4hMX12YXIgZT0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoZnVuY3Rpb24odCl7ZSYmIXZ0KHQpJiYoZT0hMSl9KSxlfWZ1bmN0aW9uIG10KHQsZSl7aWYodCBpbnN0YW5jZW9mIGd0JiZlLmluZGV4T2YodC5uYW1lKT49MClyZXR1cm4hMTt2YXIgcj0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoZnVuY3Rpb24odCl7ciYmIW10KHQsZSkmJihyPSExKX0pLHJ9Z3QucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ldmFsdWF0ZSh0LHRoaXMuYXJncyl9LGd0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGd0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0sZ3QucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblt0aGlzLm5hbWVdLmNvbmNhdCh0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpfSxndC5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj1ndC5kZWZpbml0aW9uc1tyXTtpZighbilyZXR1cm4gZS5lcnJvcignVW5rbm93biBleHByZXNzaW9uICInK3IrJyIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCk7Zm9yKHZhciBpPUFycmF5LmlzQXJyYXkobik/blswXTpuLnR5cGUsYT1BcnJheS5pc0FycmF5KG4pP1tbblsxXSxuWzJdXV06bi5vdmVybG9hZHMsbz1hLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3JldHVybiFBcnJheS5pc0FycmF5KHIpfHxyLmxlbmd0aD09PXQubGVuZ3RoLTF9KSxzPVtdLGw9MTtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dFtsXSx1PXZvaWQgMDtpZigxPT09by5sZW5ndGgpe3ZhciBmPW9bMF1bMF07dT1BcnJheS5pc0FycmF5KGYpP2ZbbC0xXTpmLnR5cGV9dmFyIGg9ZS5wYXJzZShjLDErcy5sZW5ndGgsdSk7aWYoIWgpcmV0dXJuIG51bGw7cy5wdXNoKGgpfWZvcih2YXIgcD1udWxsLGQ9MCxnPW87ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdLG09dlswXSx5PXZbMV07aWYocD1uZXcgeHQoZS5yZWdpc3RyeSxlLnBhdGgsbnVsbCxlLnNjb3BlKSxBcnJheS5pc0FycmF5KG0pJiZtLmxlbmd0aCE9PXMubGVuZ3RoKXAuZXJyb3IoIkV4cGVjdGVkICIrbS5sZW5ndGgrIiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiK3MubGVuZ3RoKyIgaW5zdGVhZC4iKTtlbHNle2Zvcih2YXIgeD0wO3g8cy5sZW5ndGg7eCsrKXt2YXIgYj1BcnJheS5pc0FycmF5KG0pP21beF06bS50eXBlLF89c1t4XTtwLmNvbmNhdCh4KzEpLmNoZWNrU3VidHlwZShiLF8udHlwZSl9aWYoMD09PXAuZXJyb3JzLmxlbmd0aClyZXR1cm4gbmV3IGd0KHIsaSx5LHMpfX1pZigxPT09by5sZW5ndGgpZS5lcnJvcnMucHVzaC5hcHBseShlLmVycm9ycyxwLmVycm9ycyk7ZWxzZXt2YXIgdz0oby5sZW5ndGg/bzphKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIGU9dFswXSxBcnJheS5pc0FycmF5KGUpPyIoIitlLm1hcCgkKS5qb2luKCIsICIpKyIpIjoiKCIrJChlLnR5cGUpKyIuLi4pIn0pLmpvaW4oIiB8ICIpLGs9cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICQodC50eXBlKX0pLmpvaW4oIiwgIik7ZS5lcnJvcigiRXhwZWN0ZWQgYXJndW1lbnRzIG9mIHR5cGUgIit3KyIsIGJ1dCBmb3VuZCAoIitrKyIpIGluc3RlYWQuIil9cmV0dXJuIG51bGx9LGd0LnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGd0LmRlZmluaXRpb25zPWUsZSl0W3JdPWd0fTt2YXIgeXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9ZS50eXBlLHRoaXMubmFtZT10LHRoaXMuYm91bmRFeHByZXNzaW9uPWV9O3l0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RofHwic3RyaW5nIiE9dHlwZW9mIHRbMV0pcmV0dXJuIGUuZXJyb3IoIid2YXInIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgc3RyaW5nIGxpdGVyYWwgYXJndW1lbnQuIik7dmFyIHI9dFsxXTtyZXR1cm4gZS5zY29wZS5oYXMocik/bmV3IHl0KHIsZS5zY29wZS5nZXQocikpOmUuZXJyb3IoJ1Vua25vd24gdmFyaWFibGUgIicrcisnIi4gTWFrZSBzdXJlICInK3IrJyIgaGFzIGJlZW4gYm91bmQgaW4gYW4gZW5jbG9zaW5nICJsZXQiIGV4cHJlc3Npb24gYmVmb3JlIHVzaW5nIGl0LicsMSl9LHl0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ib3VuZEV4cHJlc3Npb24uZXZhbHVhdGUodCl9LHl0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24oKXt9LHl0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0seXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsidmFyIix0aGlzLm5hbWVdfTt2YXIgeHQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2b2lkIDA9PT1lJiYoZT1bXSksdm9pZCAwPT09biYmKG49bmV3IGopLHZvaWQgMD09PWkmJihpPVtdKSx0aGlzLnJlZ2lzdHJ5PXQsdGhpcy5wYXRoPWUsdGhpcy5rZXk9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QrIl0ifSkuam9pbigiIiksdGhpcy5zY29wZT1uLHRoaXMuZXJyb3JzPWksdGhpcy5leHBlY3RlZFR5cGU9cn07ZnVuY3Rpb24gYnQodCxlKXtmb3IodmFyIHIsbixpPTAsYT10Lmxlbmd0aC0xLG89MDtpPD1hOyl7aWYocj10W289TWF0aC5mbG9vcigoaSthKS8yKV0sbj10W28rMV0sZT09PXJ8fGU+ciYmZTxuKXJldHVybiBvO2lmKHI8ZSlpPW8rMTtlbHNle2lmKCEocj5lKSl0aHJvdyBuZXcgb3QoIklucHV0IGlzIG5vdCBhIG51bWJlci4iKTthPW8tMX19cmV0dXJuIE1hdGgubWF4KG8tMSwwKX14dC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLGU/dGhpcy5jb25jYXQoZSxyLG4pLl9wYXJzZSh0LGkpOnRoaXMuX3BhcnNlKHQsaSl9LHh0LnByb3RvdHlwZS5fcGFyc2U9ZnVuY3Rpb24odCxlKXtpZihudWxsIT09dCYmInN0cmluZyIhPXR5cGVvZiB0JiYiYm9vbGVhbiIhPXR5cGVvZiB0JiYibnVtYmVyIiE9dHlwZW9mIHR8fCh0PVsibGl0ZXJhbCIsdF0pLEFycmF5LmlzQXJyYXkodCkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcignRXhwZWN0ZWQgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbXV0uJyk7dmFyIHI9dFswXTtpZigic3RyaW5nIiE9dHlwZW9mIHIpcmV0dXJuIHRoaXMuZXJyb3IoIkV4cHJlc3Npb24gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBidXQgZm91bmQgIit0eXBlb2YgcisnIGluc3RlYWQuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCksbnVsbDt2YXIgbj10aGlzLnJlZ2lzdHJ5W3JdO2lmKG4pe3ZhciBpPW4ucGFyc2UodCx0aGlzKTtpZighaSlyZXR1cm4gbnVsbDtpZih0aGlzLmV4cGVjdGVkVHlwZSl7dmFyIGE9dGhpcy5leHBlY3RlZFR5cGUsbz1pLnR5cGU7aWYoInN0cmluZyIhPT1hLmtpbmQmJiJudW1iZXIiIT09YS5raW5kJiYiYm9vbGVhbiIhPT1hLmtpbmQmJiJvYmplY3QiIT09YS5raW5kfHwidmFsdWUiIT09by5raW5kKWlmKCJhcnJheSI9PT1hLmtpbmQmJiJ2YWx1ZSI9PT1vLmtpbmQpZS5vbWl0VHlwZUFubm90YXRpb25zfHwoaT1uZXcgdXQoYSxpKSk7ZWxzZSBpZigiY29sb3IiIT09YS5raW5kfHwidmFsdWUiIT09by5raW5kJiYic3RyaW5nIiE9PW8ua2luZCl7aWYodGhpcy5jaGVja1N1YnR5cGUodGhpcy5leHBlY3RlZFR5cGUsaS50eXBlKSlyZXR1cm4gbnVsbH1lbHNlIGUub21pdFR5cGVBbm5vdGF0aW9uc3x8KGk9bmV3IGh0KGEsW2ldKSk7ZWxzZSBlLm9taXRUeXBlQW5ub3RhdGlvbnN8fChpPW5ldyBsdChhLFtpXSkpfWlmKCEoaSBpbnN0YW5jZW9mIGF0KSYmZnVuY3Rpb24gdChlKXtpZihlIGluc3RhbmNlb2YgeXQpcmV0dXJuIHQoZS5ib3VuZEV4cHJlc3Npb24pO2lmKGUgaW5zdGFuY2VvZiBndCYmImVycm9yIj09PWUubmFtZSlyZXR1cm4hMTtpZihlIGluc3RhbmNlb2YgcnQpcmV0dXJuITE7dmFyIHI9ZSBpbnN0YW5jZW9mIGh0fHxlIGluc3RhbmNlb2YgbHR8fGUgaW5zdGFuY2VvZiB1dCxuPSEwO3JldHVybiBlLmVhY2hDaGlsZChmdW5jdGlvbihlKXtuPXI/biYmdChlKTpuJiZlIGluc3RhbmNlb2YgYXR9KSwhIW4mJih2dChlKSYmbXQoZSxbInpvb20iLCJoZWF0bWFwLWRlbnNpdHkiLCJsaW5lLXByb2dyZXNzIiwiaXMtc3VwcG9ydGVkLXNjcmlwdCJdKSl9KGkpKXt2YXIgcz1uZXcgZHQ7dHJ5e2k9bmV3IGF0KGkudHlwZSxpLmV2YWx1YXRlKHMpKX1jYXRjaCh0KXtyZXR1cm4gdGhpcy5lcnJvcih0Lm1lc3NhZ2UpLG51bGx9fXJldHVybiBpfXJldHVybiB0aGlzLmVycm9yKCdVbmtub3duIGV4cHJlc3Npb24gIicrcisnIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbLi4uXV0uJywwKX1yZXR1cm4gdm9pZCAwPT09dD90aGlzLmVycm9yKCIndW5kZWZpbmVkJyB2YWx1ZSBpbnZhbGlkLiBVc2UgbnVsbCBpbnN0ZWFkLiIpOiJvYmplY3QiPT10eXBlb2YgdD90aGlzLmVycm9yKCdCYXJlIG9iamVjdHMgaW52YWxpZC4gVXNlIFsibGl0ZXJhbCIsIHsuLi59XSBpbnN0ZWFkLicpOnRoaXMuZXJyb3IoIkV4cGVjdGVkIGFuIGFycmF5LCBidXQgZm91bmQgIit0eXBlb2YgdCsiIGluc3RlYWQuIil9LHh0LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSJudW1iZXIiPT10eXBlb2YgdD90aGlzLnBhdGguY29uY2F0KHQpOnRoaXMucGF0aCxpPXI/dGhpcy5zY29wZS5jb25jYXQocik6dGhpcy5zY29wZTtyZXR1cm4gbmV3IHh0KHRoaXMucmVnaXN0cnksbixlfHxudWxsLGksdGhpcy5lcnJvcnMpfSx4dC5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTt2YXIgbj0iIit0aGlzLmtleStlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdCsiXSJ9KS5qb2luKCIiKTt0aGlzLmVycm9ycy5wdXNoKG5ldyBOKG4sdCkpfSx4dC5wcm90b3R5cGUuY2hlY2tTdWJ0eXBlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Syh0LGUpO3JldHVybiByJiZ0aGlzLmVycm9yKHIpLHJ9O3ZhciBfdD1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5pbnB1dD1lLHRoaXMubGFiZWxzPVtdLHRoaXMub3V0cHV0cz1bXTtmb3IodmFyIG49MCxpPXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YVswXSxzPWFbMV07dGhpcy5sYWJlbHMucHVzaChvKSx0aGlzLm91dHB1dHMucHVzaChzKX19O2Z1bmN0aW9uIHd0KHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9X3QucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzFdLG49dC5zbGljZSgyKTtpZih0Lmxlbmd0aC0xPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuIik7aWYoIShyPWUucGFyc2UociwxLFUpKSlyZXR1cm4gbnVsbDt2YXIgaT1bXSxhPW51bGw7ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYoYT1lLmV4cGVjdGVkVHlwZSksbi51bnNoaWZ0KC0xLzApO2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bys9Mil7dmFyIHM9bltvXSxsPW5bbysxXSxjPW8rMSx1PW8rMjtpZigibnVtYmVyIiE9dHlwZW9mIHMpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsYyk7aWYoaS5sZW5ndGgmJmlbaS5sZW5ndGgtMV1bMF0+PXMpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsYyk7dmFyIGY9ZS5wYXJzZShsLHUsYSk7aWYoIWYpcmV0dXJuIG51bGw7YT1hfHxmLnR5cGUsaS5wdXNoKFtzLGZdKX1yZXR1cm4gbmV3IF90KGEscixpKX0sX3QucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFiZWxzLHI9dGhpcy5vdXRwdXRzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgbj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKG48PWVbMF0pcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIGk9ZS5sZW5ndGg7cmV0dXJuIG4+PWVbaS0xXT9yW2ktMV0uZXZhbHVhdGUodCk6cltidChlLG4pXS5ldmFsdWF0ZSh0KX0sX3QucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV0pfSxfdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMub3V0cHV0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LF90LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJzdGVwIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxlPTA7ZTx0aGlzLmxhYmVscy5sZW5ndGg7ZSsrKWU+MCYmdC5wdXNoKHRoaXMubGFiZWxzW2VdKSx0LnB1c2godGhpcy5vdXRwdXRzW2VdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gdH07dmFyIGt0PU9iamVjdC5mcmVlemUoe251bWJlcjp3dCxjb2xvcjpmdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyB0dCh3dCh0LnIsZS5yLHIpLHd0KHQuZyxlLmcsciksd3QodC5iLGUuYixyKSx3dCh0LmEsZS5hLHIpKX0sYXJyYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiB3dCh0LGVbbl0scil9KX19KSxUdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnR5cGU9dCx0aGlzLmludGVycG9sYXRpb249ZSx0aGlzLmlucHV0PXIsdGhpcy5sYWJlbHM9W10sdGhpcy5vdXRwdXRzPVtdO2Zvcih2YXIgaT0wLGE9bjtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vWzBdLGw9b1sxXTt0aGlzLmxhYmVscy5wdXNoKHMpLHRoaXMub3V0cHV0cy5wdXNoKGwpfX07ZnVuY3Rpb24gQXQodCxlLHIsbil7dmFyIGk9bi1yLGE9dC1yO3JldHVybiAwPT09aT8wOjE9PT1lP2EvaTooTWF0aC5wb3coZSxhKS0xKS8oTWF0aC5wb3coZSxpKS0xKX1UdC5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTA7aWYoImV4cG9uZW50aWFsIj09PXQubmFtZSlpPUF0KGUsdC5iYXNlLHIsbik7ZWxzZSBpZigibGluZWFyIj09PXQubmFtZSlpPUF0KGUsMSxyLG4pO2Vsc2UgaWYoImN1YmljLWJlemllciI9PT10Lm5hbWUpe3ZhciBvPXQuY29udHJvbFBvaW50cztpPW5ldyBhKG9bMF0sb1sxXSxvWzJdLG9bM10pLnNvbHZlKEF0KGUsMSxyLG4pKX1yZXR1cm4gaX0sVHQucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzFdLG49dFsyXSxpPXQuc2xpY2UoMyk7aWYoIUFycmF5LmlzQXJyYXkocil8fDA9PT1yLmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gaW50ZXJwb2xhdGlvbiB0eXBlIGV4cHJlc3Npb24uIiwxKTtpZigibGluZWFyIj09PXJbMF0pcj17bmFtZToibGluZWFyIn07ZWxzZSBpZigiZXhwb25lbnRpYWwiPT09clswXSl7dmFyIGE9clsxXTtpZigibnVtYmVyIiE9dHlwZW9mIGEpcmV0dXJuIGUuZXJyb3IoIkV4cG9uZW50aWFsIGludGVycG9sYXRpb24gcmVxdWlyZXMgYSBudW1lcmljIGJhc2UuIiwxLDEpO3I9e25hbWU6ImV4cG9uZW50aWFsIixiYXNlOmF9fWVsc2V7aWYoImN1YmljLWJlemllciIhPT1yWzBdKXJldHVybiBlLmVycm9yKCJVbmtub3duIGludGVycG9sYXRpb24gdHlwZSAiK1N0cmluZyhyWzBdKSwxLDApO3ZhciBvPXIuc2xpY2UoMSk7aWYoNCE9PW8ubGVuZ3RofHxvLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQ+MX0pKXJldHVybiBlLmVycm9yKCJDdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBmb3VyIG51bWVyaWMgYXJndW1lbnRzIHdpdGggdmFsdWVzIGJldHdlZW4gMCBhbmQgMS4iLDEpO3I9e25hbWU6ImN1YmljLWJlemllciIsY29udHJvbFBvaW50czpvfX1pZih0Lmxlbmd0aC0xPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuIik7aWYoIShuPWUucGFyc2UobiwyLFUpKSlyZXR1cm4gbnVsbDt2YXIgcz1bXSxsPW51bGw7ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYobD1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBjPTA7YzxpLmxlbmd0aDtjKz0yKXt2YXIgdT1pW2NdLGY9aVtjKzFdLGg9YyszLHA9Yys0O2lmKCJudW1iZXIiIT10eXBlb2YgdSlyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsaCk7aWYocy5sZW5ndGgmJnNbcy5sZW5ndGgtMV1bMF0+PXUpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgImludGVycG9sYXRlIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLGgpO3ZhciBkPWUucGFyc2UoZixwLGwpO2lmKCFkKXJldHVybiBudWxsO2w9bHx8ZC50eXBlLHMucHVzaChbdSxkXSl9cmV0dXJuIm51bWJlciI9PT1sLmtpbmR8fCJjb2xvciI9PT1sLmtpbmR8fCJhcnJheSI9PT1sLmtpbmQmJiJudW1iZXIiPT09bC5pdGVtVHlwZS5raW5kJiYibnVtYmVyIj09dHlwZW9mIGwuTj9uZXcgVHQobCxyLG4scyk6ZS5lcnJvcigiVHlwZSAiKyQobCkrIiBpcyBub3QgaW50ZXJwb2xhdGFibGUuIil9LFR0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhYmVscyxyPXRoaXMub3V0cHV0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIG49dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihuPD1lWzBdKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBpPWUubGVuZ3RoO2lmKG4+PWVbaS0xXSlyZXR1cm4gcltpLTFdLmV2YWx1YXRlKHQpO3ZhciBhPWJ0KGUsbiksbz1lW2FdLHM9ZVthKzFdLGw9VHQuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb24sbixvLHMpLGM9clthXS5ldmFsdWF0ZSh0KSx1PXJbYSsxXS5ldmFsdWF0ZSh0KTtyZXR1cm4ga3RbdGhpcy50eXBlLmtpbmQudG9Mb3dlckNhc2UoKV0oYyx1LGwpfSxUdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCk7Zm9yKHZhciBlPTAscj10aGlzLm91dHB1dHM7ZTxyLmxlbmd0aDtlKz0xKXQocltlXSl9LFR0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5vdXRwdXRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sVHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bImludGVycG9sYXRlIiwibGluZWFyIj09PXRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lP1sibGluZWFyIl06ImV4cG9uZW50aWFsIj09PXRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lPzE9PT10aGlzLmludGVycG9sYXRpb24uYmFzZT9bImxpbmVhciJdOlsiZXhwb25lbnRpYWwiLHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlXTpbImN1YmljLWJlemllciJdLmNvbmNhdCh0aGlzLmludGVycG9sYXRpb24uY29udHJvbFBvaW50cyksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0sZT0wO2U8dGhpcy5sYWJlbHMubGVuZ3RoO2UrKyl0LnB1c2godGhpcy5sYWJlbHNbZV0sdGhpcy5vdXRwdXRzW2VdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gdH07dmFyIE10PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O010LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByPW51bGwsbj1lLmV4cGVjdGVkVHlwZTtuJiYidmFsdWUiIT09bi5raW5kJiYocj1uKTtmb3IodmFyIGk9W10sYT0wLG89dC5zbGljZSgxKTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1lLnBhcnNlKHMsMStpLmxlbmd0aCxyLHZvaWQgMCx7b21pdFR5cGVBbm5vdGF0aW9uczohMH0pO2lmKCFsKXJldHVybiBudWxsO3I9cnx8bC50eXBlLGkucHVzaChsKX12YXIgYz1uJiZpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIEsobix0LnR5cGUpfSk7cmV0dXJuIG5ldyBNdChjP1c6cixpKX0sTXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLHI9MCxuPXRoaXMuYXJncztyPG4ubGVuZ3RoJiZudWxsPT09KGU9bltyXS5ldmFsdWF0ZSh0KSk7cis9MSk7cmV0dXJuIGV9LE10LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LE10LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sTXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiY29hbGVzY2UiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSksdH07dmFyIFN0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWUudHlwZSx0aGlzLmJpbmRpbmdzPVtdLmNvbmNhdCh0KSx0aGlzLnJlc3VsdD1lfTtTdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzdWx0LmV2YWx1YXRlKHQpfSxTdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpdChyW2VdWzFdKTt0KHRoaXMucmVzdWx0KX0sU3QucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw0KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTtmb3IodmFyIHI9W10sbj0xO248dC5sZW5ndGgtMTtuKz0yKXt2YXIgaT10W25dO2lmKCJzdHJpbmciIT10eXBlb2YgaSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgc3RyaW5nLCBidXQgZm91bmQgIit0eXBlb2YgaSsiIGluc3RlYWQuIixuKTtpZigvW15hLXpBLVowLTlfXS8udGVzdChpKSlyZXR1cm4gZS5lcnJvcigiVmFyaWFibGUgbmFtZXMgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgJ18nLiIsbik7dmFyIGE9ZS5wYXJzZSh0W24rMV0sbisxKTtpZighYSlyZXR1cm4gbnVsbDtyLnB1c2goW2ksYV0pfXZhciBvPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLHZvaWQgMCxyKTtyZXR1cm4gbz9uZXcgU3QocixvKTpudWxsfSxTdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVzdWx0LnBvc3NpYmxlT3V0cHV0cygpfSxTdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsibGV0Il0sZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTt0LnB1c2goaSxhLnNlcmlhbGl6ZSgpKX1yZXR1cm4gdC5wdXNoKHRoaXMucmVzdWx0LnNlcmlhbGl6ZSgpKSx0fTt2YXIgRXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuaW5kZXg9ZSx0aGlzLmlucHV0PXJ9O0V0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxVKSxuPWUucGFyc2UodFsyXSwyLFooZS5leHBlY3RlZFR5cGV8fFcpKTtpZighcnx8IW4pcmV0dXJuIG51bGw7dmFyIGk9bi50eXBlO3JldHVybiBuZXcgRXQoaS5pdGVtVHlwZSxyLG4pfSxFdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmRleC5ldmFsdWF0ZSh0KSxyPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoZTwwKXRocm93IG5ldyBvdCgiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgPCAwLiIpO2lmKGU+PXIubGVuZ3RoKXRocm93IG5ldyBvdCgiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgPiAiKyhyLmxlbmd0aC0xKSsiLiIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBvdCgiQXJyYXkgaW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyLCBidXQgZm91bmQgIitlKyIgaW5zdGVhZC4iKTtyZXR1cm4gcltlXX0sRXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5kZXgpLHQodGhpcy5pbnB1dCl9LEV0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0sRXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiYXQiLHRoaXMuaW5kZXguc2VyaWFsaXplKCksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV19O3ZhciBDdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5pbnB1dFR5cGU9dCx0aGlzLnR5cGU9ZSx0aGlzLmlucHV0PXIsdGhpcy5jYXNlcz1uLHRoaXMub3V0cHV0cz1pLHRoaXMub3RoZXJ3aXNlPWF9O0N0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYodC5sZW5ndGglMiE9MSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByLG47ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYobj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBpPXt9LGE9W10sbz0yO288dC5sZW5ndGgtMTtvKz0yKXt2YXIgcz10W29dLGw9dFtvKzFdO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7dmFyIGM9ZS5jb25jYXQobyk7aWYoMD09PXMubGVuZ3RoKXJldHVybiBjLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLiIpO2Zvcih2YXIgdT0wLGY9czt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07aWYoIm51bWJlciIhPXR5cGVvZiBoJiYic3RyaW5nIiE9dHlwZW9mIGgpcmV0dXJuIGMuZXJyb3IoIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBudW1iZXJzIG9yIHN0cmluZ3MuIik7aWYoIm51bWJlciI9PXR5cGVvZiBoJiZNYXRoLmFicyhoKT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUilyZXR1cm4gYy5lcnJvcigiQnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXJzIG5vIGxhcmdlciB0aGFuICIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIrIi4iKTtpZigibnVtYmVyIj09dHlwZW9mIGgmJk1hdGguZmxvb3IoaCkhPT1oKXJldHVybiBjLmVycm9yKCJOdW1lcmljIGJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VyIHZhbHVlcy4iKTtpZihyKXtpZihjLmNoZWNrU3VidHlwZShyLGl0KGgpKSlyZXR1cm4gbnVsbH1lbHNlIHI9aXQoaCk7aWYodm9pZCAwIT09aVtTdHJpbmcoaCldKXJldHVybiBjLmVycm9yKCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgdW5pcXVlLiIpO2lbU3RyaW5nKGgpXT1hLmxlbmd0aH12YXIgcD1lLnBhcnNlKGwsbyxuKTtpZighcClyZXR1cm4gbnVsbDtuPW58fHAudHlwZSxhLnB1c2gocCl9dmFyIGQ9ZS5wYXJzZSh0WzFdLDEscik7aWYoIWQpcmV0dXJuIG51bGw7dmFyIGc9ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsbik7cmV0dXJuIGc/bmV3IEN0KHIsbixkLGksYSxnKTpudWxsfSxDdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtyZXR1cm4odGhpcy5vdXRwdXRzW3RoaXMuY2FzZXNbZV1dfHx0aGlzLm90aGVyd2lzZSkuZXZhbHVhdGUodCl9LEN0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KSx0aGlzLm91dHB1dHMuZm9yRWFjaCh0KSx0KHRoaXMub3RoZXJ3aXNlKX0sQ3QucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLm91dHB1dHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpLmNvbmNhdCh0aGlzLm90aGVyd2lzZS5wb3NzaWJsZU91dHB1dHMoKSk7dmFyIHR9LEN0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVsibWF0Y2giLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLHI9W10sbj17fSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLmNhc2VzKS5zb3J0KCk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9blt0LmNhc2VzW29dXTt2b2lkIDA9PT1zPyhuW3QuY2FzZXNbb11dPXIubGVuZ3RoLHIucHVzaChbdC5jYXNlc1tvXSxbb11dKSk6cltzXVsxXS5wdXNoKG8pfWZvcih2YXIgbD1mdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09PXQuaW5wdXQudHlwZS5raW5kP051bWJlcihlKTplfSxjPTAsdT1yO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPWZbMF0scD1mWzFdOzE9PT1wLmxlbmd0aD9lLnB1c2gobChwWzBdKSk6ZS5wdXNoKHAubWFwKGwpKSxlLnB1c2godC5vdXRwdXRzW2hdLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZS5wdXNoKHRoaXMub3RoZXJ3aXNlLnNlcmlhbGl6ZSgpKSxlfTt2YXIgTHQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuYnJhbmNoZXM9ZSx0aGlzLm90aGVyd2lzZT1yfTtmdW5jdGlvbiB6dCh0KXtyZXR1cm4ic3RyaW5nIj09PXQua2luZHx8Im51bWJlciI9PT10LmtpbmR8fCJib29sZWFuIj09PXQua2luZHx8Im51bGwiPT09dC5raW5kfWZ1bmN0aW9uIE90KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LGUscil7dGhpcy50eXBlPUgsdGhpcy5saHM9dCx0aGlzLnJocz1lLHRoaXMuY29sbGF0b3I9cn1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aCYmNCE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCB0d28gb3IgdGhyZWUgYXJndW1lbnRzLiIpO3ZhciBuPWUucGFyc2UodFsxXSwxLFcpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPWUucGFyc2UodFsyXSwyLFcpO2lmKCFpKXJldHVybiBudWxsO2lmKCF6dChuLnR5cGUpJiYhenQoaS50eXBlKSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IHRvIGJlIGEgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG9yIG51bGwsIGJ1dCBmb3VuZCAoIiskKG4udHlwZSkrIiwgIiskKGkudHlwZSkrIikgaW5zdGVhZC4iKTtpZihuLnR5cGUua2luZCE9PWkudHlwZS5raW5kJiYidmFsdWUiIT09bi50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1pLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcigiQ2Fubm90IGNvbXBhcmUgIiskKG4udHlwZSkrIiBhbmQgIiskKGkudHlwZSkrIi4iKTt2YXIgYT1udWxsO2lmKDQ9PT10Lmxlbmd0aCl7aWYoInN0cmluZyIhPT1uLnR5cGUua2luZCYmInN0cmluZyIhPT1pLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcigiQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuIik7aWYoIShhPWUucGFyc2UodFszXSwzLFgpKSlyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IHIobixpLGEpfSxyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLmNvbGxhdG9yPzA9PT10aGlzLmNvbGxhdG9yLmV2YWx1YXRlKHQpLmNvbXBhcmUodGhpcy5saHMuZXZhbHVhdGUodCksdGhpcy5yaHMuZXZhbHVhdGUodCkpOnRoaXMubGhzLmV2YWx1YXRlKHQpPT09dGhpcy5yaHMuZXZhbHVhdGUodCk7cmV0dXJuIGU/IXI6cn0sci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5saHMpLHQodGhpcy5yaHMpLHRoaXMuY29sbGF0b3ImJnQodGhpcy5jb2xsYXRvcil9LHIucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblshMCwhMV19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciBlPVt0XTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24odCl7ZS5wdXNoKHQuc2VyaWFsaXplKCkpfSksZX0scn0oKX1MdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKHQubGVuZ3RoJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKHI9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgbj1bXSxpPTE7aTx0Lmxlbmd0aC0xO2krPTIpe3ZhciBhPWUucGFyc2UodFtpXSxpLEgpO2lmKCFhKXJldHVybiBudWxsO3ZhciBvPWUucGFyc2UodFtpKzFdLGkrMSxyKTtpZighbylyZXR1cm4gbnVsbDtuLnB1c2goW2Esb10pLHI9cnx8by50eXBlfXZhciBzPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLHIpO3JldHVybiBzP25ldyBMdChyLG4scyk6bnVsbH0sTHQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5icmFuY2hlcztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTtpZihpLmV2YWx1YXRlKHQpKXJldHVybiBhLmV2YWx1YXRlKHQpfXJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZSh0KX0sTHQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07dChpKSx0KGEpfXQodGhpcy5vdGhlcndpc2UpfSxMdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYnJhbmNoZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLHRbMV0ucG9zc2libGVPdXRwdXRzKCl9KSkuY29uY2F0KHRoaXMub3RoZXJ3aXNlLnBvc3NpYmxlT3V0cHV0cygpKTt2YXIgdH0sTHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiY2FzZSJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgSXQ9T3QoIj09IiwhMSksRHQ9T3QoIiE9IiwhMCksUHQ9ZnVuY3Rpb24odCl7dGhpcy50eXBlPVUsdGhpcy5pbnB1dD10fTtQdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMSBhcmd1bWVudCwgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSk7cmV0dXJuIHI/ImFycmF5IiE9PXIudHlwZS5raW5kJiYic3RyaW5nIiE9PXIudHlwZS5raW5kJiYidmFsdWUiIT09ci50eXBlLmtpbmQ/ZS5lcnJvcigiRXhwZWN0ZWQgYXJndW1lbnQgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAiKyQoci50eXBlKSsiIGluc3RlYWQuIik6bmV3IFB0KHIpOm51bGx9LFB0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZS5sZW5ndGg7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5sZW5ndGg7dGhyb3cgbmV3IG90KCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICIrJChpdChlKSkrIiBpbnN0ZWFkLiIpfSxQdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LFB0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0sUHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsibGVuZ3RoIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pLHR9O3ZhciBSdD17Ij09IjpJdCwiIT0iOkR0LGFycmF5OnV0LGF0OkV0LGJvb2xlYW46bHQsY2FzZTpMdCxjb2FsZXNjZTpNdCxjb2xsYXRvcjpydCxpbnRlcnBvbGF0ZTpUdCxsZW5ndGg6UHQsbGV0OlN0LGxpdGVyYWw6YXQsbWF0Y2g6Q3QsbnVtYmVyOmx0LG9iamVjdDpsdCxzdGVwOl90LHN0cmluZzpsdCwidG8tY29sb3IiOmh0LCJ0by1udW1iZXIiOmh0LHZhcjp5dH07ZnVuY3Rpb24gRnQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdO3I9ci5ldmFsdWF0ZSh0KSxuPW4uZXZhbHVhdGUodCksaT1pLmV2YWx1YXRlKHQpO3ZhciBvPWE/YS5ldmFsdWF0ZSh0KToxLHM9bnQocixuLGksbyk7aWYocyl0aHJvdyBuZXcgb3Qocyk7cmV0dXJuIG5ldyB0dChyLzI1NSpvLG4vMjU1Km8saS8yNTUqbyxvKX1mdW5jdGlvbiBCdCh0LGUpe3JldHVybiB0IGluIGV9ZnVuY3Rpb24gTnQodCxlKXt2YXIgcj1lW3RdO3JldHVybiB2b2lkIDA9PT1yP251bGw6cn1mdW5jdGlvbiBqdCh0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpPG4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gVnQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KT5uLmV2YWx1YXRlKHQpfWZ1bmN0aW9uIFV0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCk8PW4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gcXQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KT49bi5ldmFsdWF0ZSh0KX1mdW5jdGlvbiBIdCh0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBHdCh0KXtyZXR1cm57cmVzdWx0OiJzdWNjZXNzIix2YWx1ZTp0fX1mdW5jdGlvbiBZdCh0KXtyZXR1cm57cmVzdWx0OiJlcnJvciIsdmFsdWU6dH19Z3QucmVnaXN0ZXIoUnQse2Vycm9yOlt7a2luZDoiZXJyb3IifSxbcV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3Rocm93IG5ldyBvdChyLmV2YWx1YXRlKHQpKX1dLHR5cGVvZjpbcSxbV10sZnVuY3Rpb24odCxlKXtyZXR1cm4gJChpdChlWzBdLmV2YWx1YXRlKHQpKSl9XSwidG8tc3RyaW5nIjpbcSxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dHlwZW9mKHI9ci5ldmFsdWF0ZSh0KSk7cmV0dXJuIG51bGw9PT1yPyIiOiJzdHJpbmciPT09bnx8Im51bWJlciI9PT1ufHwiYm9vbGVhbiI9PT1uP1N0cmluZyhyKTpyIGluc3RhbmNlb2YgdHQ/ci50b1N0cmluZygpOkpTT04uc3RyaW5naWZ5KHIpfV0sInRvLWJvb2xlYW4iOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIEJvb2xlYW4oci5ldmFsdWF0ZSh0KSl9XSwidG8tcmdiYSI6W1ooVSw0KSxbR10sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0FycmF5KCl9XSxyZ2I6W0csW1UsVSxVXSxGdF0scmdiYTpbRyxbVSxVLFUsVV0sRnRdLGhhczp7dHlwZTpILG92ZXJsb2FkczpbW1txXSxmdW5jdGlvbih0LGUpe3JldHVybiBCdChlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbcSxZXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBCdChyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSxnZXQ6e3R5cGU6VyxvdmVybG9hZHM6W1tbcV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTnQoZVswXS5ldmFsdWF0ZSh0KSx0LnByb3BlcnRpZXMoKSl9XSxbW3EsWV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gTnQoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dXX0scHJvcGVydGllczpbWSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wcm9wZXJ0aWVzKCl9XSwiZ2VvbWV0cnktdHlwZSI6W3EsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2VvbWV0cnlUeXBlKCl9XSxpZDpbVyxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5pZCgpfV0sem9vbTpbVSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLnpvb219XSwiaGVhdG1hcC1kZW5zaXR5IjpbVSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLmhlYXRtYXBEZW5zaXR5fHwwfV0sImxpbmUtcHJvZ3Jlc3MiOltVLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMubGluZVByb2dyZXNzfHwwfV0sIisiOltVLEh0KFUpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpcis9aVtuXS5ldmFsdWF0ZSh0KTtyZXR1cm4gcn1dLCIqIjpbVSxIdChVKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXIqPWlbbl0uZXZhbHVhdGUodCk7cmV0dXJuIHJ9XSwiLSI6e3R5cGU6VSxvdmVybG9hZHM6W1tbVSxVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpLW4uZXZhbHVhdGUodCl9XSxbW1VdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuLWVbMF0uZXZhbHVhdGUodCl9XV19LCIvIjpbVSxbVSxVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpL24uZXZhbHVhdGUodCl9XSwiJSI6W1UsW1UsVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSVuLmV2YWx1YXRlKHQpfV0sbG4yOltVLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguTE4yfV0scGk6W1UsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5QSX1dLGU6W1UsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5FfV0sIl4iOltVLFtVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIE1hdGgucG93KHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XSxzcXJ0OltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguc3FydChyLmV2YWx1YXRlKHQpKX1dLGxvZzEwOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nMTAoci5ldmFsdWF0ZSh0KSl9XSxsbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZyhyLmV2YWx1YXRlKHQpKX1dLGxvZzI6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5sb2cyKHIuZXZhbHVhdGUodCkpfV0sc2luOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguc2luKHIuZXZhbHVhdGUodCkpfV0sY29zOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY29zKHIuZXZhbHVhdGUodCkpfV0sdGFuOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgudGFuKHIuZXZhbHVhdGUodCkpfV0sYXNpbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFzaW4oci5ldmFsdWF0ZSh0KSl9XSxhY29zOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYWNvcyhyLmV2YWx1YXRlKHQpKX1dLGF0YW46W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hdGFuKHIuZXZhbHVhdGUodCkpfV0sbWluOltVLEh0KFUpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KSl9XSxtYXg6W1UsSHQoVSksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKX1dLGFiczpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFicyhyLmV2YWx1YXRlKHQpKX1dLHJvdW5kOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0uZXZhbHVhdGUodCk7cmV0dXJuIHI8MD8tTWF0aC5yb3VuZCgtcik6TWF0aC5yb3VuZChyKX1dLGZsb29yOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguZmxvb3Ioci5ldmFsdWF0ZSh0KSl9XSxjZWlsOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY2VpbChyLmV2YWx1YXRlKHQpKX1dLCJmaWx0ZXItPT0iOltILFtxLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHQucHJvcGVydGllcygpW3IudmFsdWVdPT09bi52YWx1ZX1dLCJmaWx0ZXItaWQtPT0iOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuaWQoKT09PXIudmFsdWV9XSwiZmlsdGVyLXR5cGUtPT0iOltILFtxXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuZ2VvbWV0cnlUeXBlKCk9PT1yLnZhbHVlfV0sImZpbHRlci08IjpbSCxbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk8YX1dLCJmaWx0ZXItaWQtPCI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjxpfV0sImZpbHRlci0+IjpbSCxbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+YX1dLCJmaWx0ZXItaWQtPiI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbj5pfV0sImZpbHRlci08PSI6W0gsW3EsV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPD1hfV0sImZpbHRlci1pZC08PSI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjw9aX1dLCJmaWx0ZXItPj0iOltILFtxLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaT49YX1dLCJmaWx0ZXItaWQtPj0iOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm4+PWl9XSwiZmlsdGVyLWhhcyI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUgaW4gdC5wcm9wZXJ0aWVzKCl9XSwiZmlsdGVyLWhhcy1pZCI6W0gsW10sZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10LmlkKCl9XSwiZmlsdGVyLXR5cGUtaW4iOltILFtaKHEpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5nZW9tZXRyeVR5cGUoKSk+PTB9XSwiZmlsdGVyLWlkLWluIjpbSCxbWihXKV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZS5pbmRleE9mKHQuaWQoKSk+PTB9XSwiZmlsdGVyLWluLXNtYWxsIjpbSCxbcSxaKFcpXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIGVbMV0udmFsdWUuaW5kZXhPZih0LnByb3BlcnRpZXMoKVtyLnZhbHVlXSk+PTB9XSwiZmlsdGVyLWluLWxhcmdlIjpbSCxbcSxaKFcpXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IoO3I8PW47KXt2YXIgaT1yK24+PjE7aWYoZVtpXT09PXQpcmV0dXJuITA7ZVtpXT50P249aS0xOnI9aSsxfXJldHVybiExfSh0LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxuLnZhbHVlLDAsbi52YWx1ZS5sZW5ndGgtMSl9XSwiPiI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxWdF0sW1txLHFdLFZ0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKT4wfV1dfSwiPCI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxqdF0sW1txLHFdLGp0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKTwwfV1dfSwiPj0iOnt0eXBlOkgsb3ZlcmxvYWRzOltbW1UsVV0scXRdLFtbcSxxXSxxdF0sW1txLHEsWF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZVsyXS5ldmFsdWF0ZSh0KS5jb21wYXJlKHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSk+PTB9XV19LCI8PSI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxVdF0sW1txLHFdLFV0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKTw9MH1dXX0sYWxsOnt0eXBlOkgsb3ZlcmxvYWRzOltbW0gsSF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSYmbi5ldmFsdWF0ZSh0KX1dLFtIdChIKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIW5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITE7cmV0dXJuITB9XV19LGFueTp7dHlwZTpILG92ZXJsb2FkczpbW1tILEhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCl8fG4uZXZhbHVhdGUodCl9XSxbSHQoSCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKWlmKG5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITA7cmV0dXJuITF9XV19LCIhIjpbSCxbSF0sZnVuY3Rpb24odCxlKXtyZXR1cm4hZVswXS5ldmFsdWF0ZSh0KX1dLCJpcy1zdXBwb3J0ZWQtc2NyaXB0IjpbSCxbcV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5nbG9iYWxzJiZ0Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7cmV0dXJuIW58fG4oci5ldmFsdWF0ZSh0KSl9XSx1cGNhc2U6W3EsW3FdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkudG9VcHBlckNhc2UoKX1dLGRvd25jYXNlOltxLFtxXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvTG93ZXJDYXNlKCl9XSxjb25jYXQ6W3EsSHQocSksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KS5qb2luKCIiKX1dLCJyZXNvbHZlZC1sb2NhbGUiOltxLFtYXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnJlc29sdmVkTG9jYWxlKCl9XX0pO3ZhciBXdD0uOTUwNDcsWHQ9MSxadD0xLjA4ODgzLCR0PTQvMjksSnQ9Ni8yOSxLdD0zKkp0Kkp0LFF0PUp0Kkp0Kkp0LHRlPU1hdGguUEkvMTgwLGVlPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIHJlKHQpe3JldHVybiB0PlF0P01hdGgucG93KHQsMS8zKTp0L0t0KyR0fWZ1bmN0aW9uIG5lKHQpe3JldHVybiB0Pkp0P3QqdCp0Okt0Kih0LSR0KX1mdW5jdGlvbiBpZSh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGFlKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIG9lKHQpe3ZhciBlPWFlKHQucikscj1hZSh0LmcpLG49YWUodC5iKSxpPXJlKCguNDEyNDU2NCplKy4zNTc1NzYxKnIrLjE4MDQzNzUqbikvV3QpLGE9cmUoKC4yMTI2NzI5KmUrLjcxNTE1MjIqcisuMDcyMTc1Km4pL1h0KTtyZXR1cm57bDoxMTYqYS0xNixhOjUwMCooaS1hKSxiOjIwMCooYS1yZSgoLjAxOTMzMzkqZSsuMTE5MTkyKnIrLjk1MDMwNDEqbikvWnQpKSxhbHBoYTp0LmF9fWZ1bmN0aW9uIHNlKHQpe3ZhciBlPSh0LmwrMTYpLzExNixyPWlzTmFOKHQuYSk/ZTplK3QuYS81MDAsbj1pc05hTih0LmIpP2U6ZS10LmIvMjAwO3JldHVybiBlPVh0Km5lKGUpLHI9V3QqbmUociksbj1adCpuZShuKSxuZXcgdHQoaWUoMy4yNDA0NTQyKnItMS41MzcxMzg1KmUtLjQ5ODUzMTQqbiksaWUoLS45NjkyNjYqcisxLjg3NjAxMDgqZSsuMDQxNTU2Km4pLGllKC4wNTU2NDM0KnItLjIwNDAyNTkqZSsxLjA1NzIyNTIqbiksdC5hbHBoYSl9dmFyIGxlPXtmb3J3YXJkOm9lLHJldmVyc2U6c2UsaW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybntsOnd0KHQubCxlLmwsciksYTp3dCh0LmEsZS5hLHIpLGI6d3QodC5iLGUuYixyKSxhbHBoYTp3dCh0LmFscGhhLGUuYWxwaGEscil9fX0sY2U9e2ZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIGU9b2UodCkscj1lLmwsbj1lLmEsaT1lLmIsYT1NYXRoLmF0YW4yKGksbikqZWU7cmV0dXJue2g6YTwwP2ErMzYwOmEsYzpNYXRoLnNxcnQobipuK2kqaSksbDpyLGFscGhhOnQuYX19LHJldmVyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5oKnRlLHI9dC5jO3JldHVybiBzZSh7bDp0LmwsYTpNYXRoLmNvcyhlKSpyLGI6TWF0aC5zaW4oZSkqcixhbHBoYTp0LmFscGhhfSl9LGludGVycG9sYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57aDpmdW5jdGlvbih0LGUscil7dmFyIG49ZS10O3JldHVybiB0K3IqKG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bil9KHQuaCxlLmgsciksYzp3dCh0LmMsZS5jLHIpLGw6d3QodC5sLGUubCxyKSxhbHBoYTp3dCh0LmFscGhhLGUuYWxwaGEscil9fX0sdWU9T2JqZWN0LmZyZWV6ZSh7bGFiOmxlLGhjbDpjZX0pO2Z1bmN0aW9uIGZlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyPyJudW1iZXIiOnQgaW5zdGFuY2VvZiBTdHJpbmc/InN0cmluZyI6dCBpbnN0YW5jZW9mIEJvb2xlYW4/ImJvb2xlYW4iOkFycmF5LmlzQXJyYXkodCk/ImFycmF5IjpudWxsPT09dD8ibnVsbCI6dHlwZW9mIHR9ZnVuY3Rpb24gaGUodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmIUFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuIHR9ZnVuY3Rpb24gZGUodCxlLHIpe3JldHVybiB2b2lkIDAhPT10P3Q6dm9pZCAwIT09ZT9lOnZvaWQgMCE9PXI/cjp2b2lkIDB9ZnVuY3Rpb24gZ2UodCxlLHIsbixpKXtyZXR1cm4gZGUodHlwZW9mIHI9PT1pP25bcl06dm9pZCAwLHQuZGVmYXVsdCxlLmRlZmF1bHQpfWZ1bmN0aW9uIHZlKHQsZSxyKXtpZigibnVtYmVyIiE9PWZlKHIpKXJldHVybiBkZSh0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgbj10LnN0b3BzLmxlbmd0aDtpZigxPT09bilyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbbi0xXVswXSlyZXR1cm4gdC5zdG9wc1tuLTFdWzFdO3ZhciBpPXhlKHQuc3RvcHMscik7cmV0dXJuIHQuc3RvcHNbaV1bMV19ZnVuY3Rpb24gbWUodCxlLHIpe3ZhciBuPXZvaWQgMCE9PXQuYmFzZT90LmJhc2U6MTtpZigibnVtYmVyIiE9PWZlKHIpKXJldHVybiBkZSh0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgaT10LnN0b3BzLmxlbmd0aDtpZigxPT09aSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbaS0xXVswXSlyZXR1cm4gdC5zdG9wc1tpLTFdWzFdO3ZhciBhPXhlKHQuc3RvcHMsciksbz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfShyLG4sdC5zdG9wc1thXVswXSx0LnN0b3BzW2ErMV1bMF0pLHM9dC5zdG9wc1thXVsxXSxsPXQuc3RvcHNbYSsxXVsxXSxjPWt0W2UudHlwZV18fHBlO2lmKHQuY29sb3JTcGFjZSYmInJnYiIhPT10LmNvbG9yU3BhY2Upe3ZhciB1PXVlW3QuY29sb3JTcGFjZV07Yz1mdW5jdGlvbih0LGUpe3JldHVybiB1LnJldmVyc2UodS5pbnRlcnBvbGF0ZSh1LmZvcndhcmQodCksdS5mb3J3YXJkKGUpLG8pKX19cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHMuZXZhbHVhdGU/e2V2YWx1YXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9YXJndW1lbnRzLmxlbmd0aDtlLS07KXRbZV09YXJndW1lbnRzW2VdO3ZhciByPXMuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpLG49bC5ldmFsdWF0ZS5hcHBseSh2b2lkIDAsdCk7aWYodm9pZCAwIT09ciYmdm9pZCAwIT09bilyZXR1cm4gYyhyLG4sbyl9fTpjKHMsbCxvKX1mdW5jdGlvbiB5ZSh0LGUscil7cmV0dXJuImNvbG9yIj09PWUudHlwZT9yPXR0LnBhcnNlKHIpOmZlKHIpPT09ZS50eXBlfHwiZW51bSI9PT1lLnR5cGUmJmUudmFsdWVzW3JdfHwocj12b2lkIDApLGRlKHIsdC5kZWZhdWx0LGUuZGVmYXVsdCl9ZnVuY3Rpb24geGUodCxlKXtmb3IodmFyIHIsbixpPTAsYT10Lmxlbmd0aC0xLG89MDtpPD1hOyl7aWYocj10W289TWF0aC5mbG9vcigoaSthKS8yKV1bMF0sbj10W28rMV1bMF0sZT09PXJ8fGU+ciYmZTxuKXJldHVybiBvO3I8ZT9pPW8rMTpyPmUmJihhPW8tMSl9cmV0dXJuIE1hdGgubWF4KG8tMSwwKX12YXIgYmU9ZnVuY3Rpb24odCxlKXt2YXIgcjt0aGlzLmV4cHJlc3Npb249dCx0aGlzLl93YXJuaW5nSGlzdG9yeT17fSx0aGlzLl9kZWZhdWx0VmFsdWU9ImNvbG9yIj09PShyPWUpLnR5cGUmJmhlKHIuZGVmYXVsdCk/bmV3IHR0KDAsMCwwLDApOiJjb2xvciI9PT1yLnR5cGU/dHQucGFyc2Uoci5kZWZhdWx0KXx8bnVsbDp2b2lkIDA9PT1yLmRlZmF1bHQ/bnVsbDpyLmRlZmF1bHQsImVudW0iPT09ZS50eXBlJiYodGhpcy5fZW51bVZhbHVlcz1lLnZhbHVlcyl9O2Z1bmN0aW9uIF9lKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJnRbMF1pbiBSdH1mdW5jdGlvbiB3ZSh0LGUpe3ZhciByPW5ldyB4dChSdCxbXSxmdW5jdGlvbih0KXt2YXIgZT17Y29sb3I6RyxzdHJpbmc6cSxudW1iZXI6VSxlbnVtOnEsYm9vbGVhbjpIfTtyZXR1cm4iYXJyYXkiPT09dC50eXBlP1ooZVt0LnZhbHVlXXx8Vyx0Lmxlbmd0aCk6ZVt0LnR5cGVdfHxudWxsfShlKSksbj1yLnBhcnNlKHQpO3JldHVybiBuP0d0KG5ldyBiZShuLGUpKTpZdChyLmVycm9ycyl9YmUucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZXZhbHVhdG9yfHwodGhpcy5fZXZhbHVhdG9yPW5ldyBkdCksdGhpcy5fZXZhbHVhdG9yLmdsb2JhbHM9dCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZT1lLHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpfSxiZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLl9ldmFsdWF0b3J8fCh0aGlzLl9ldmFsdWF0b3I9bmV3IGR0KSx0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWU7dHJ5e3ZhciByPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO2lmKG51bGw9PXIpcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtpZih0aGlzLl9lbnVtVmFsdWVzJiYhKHIgaW4gdGhpcy5fZW51bVZhbHVlcykpdGhyb3cgbmV3IG90KCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvbmUgb2YgIitPYmplY3Qua2V5cyh0aGlzLl9lbnVtVmFsdWVzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfSkuam9pbigiLCAiKSsiLCBidXQgZm91bmQgIitKU09OLnN0cmluZ2lmeShyKSsiIGluc3RlYWQuIik7cmV0dXJuIHJ9Y2F0Y2godCl7cmV0dXJuIHRoaXMuX3dhcm5pbmdIaXN0b3J5W3QubWVzc2FnZV18fCh0aGlzLl93YXJuaW5nSGlzdG9yeVt0Lm1lc3NhZ2VdPSEwLCJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQubWVzc2FnZSkpLHRoaXMuX2RlZmF1bHRWYWx1ZX19O3ZhciBrZT1mdW5jdGlvbih0LGUpe3RoaXMua2luZD10LHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lfTtrZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUpfSxrZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSl9O3ZhciBUZT1mdW5jdGlvbih0LGUscil7dGhpcy5raW5kPXQsdGhpcy56b29tU3RvcHM9ci5sYWJlbHMsdGhpcy5fc3R5bGVFeHByZXNzaW9uPWUsciBpbnN0YW5jZW9mIFR0JiYodGhpcy5faW50ZXJwb2xhdGlvblR5cGU9ci5pbnRlcnBvbGF0aW9uKX07ZnVuY3Rpb24gQWUodCxlKXtpZigiZXJyb3IiPT09KHQ9d2UodCxlKSkucmVzdWx0KXJldHVybiB0O3ZhciByPXQudmFsdWUuZXhwcmVzc2lvbixuPXZ0KHIpO2lmKCFuJiYhZVsicHJvcGVydHktZnVuY3Rpb24iXSlyZXR1cm4gWXQoW25ldyBOKCIiLCJwcm9wZXJ0eSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkIildKTt2YXIgaT1tdChyLFsiem9vbSJdKTtpZighaSYmITE9PT1lWyJ6b29tLWZ1bmN0aW9uIl0pcmV0dXJuIFl0KFtuZXcgTigiIiwiem9vbSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkIildKTt2YXIgYT1mdW5jdGlvbiB0KGUpe3ZhciByPW51bGw7aWYoZSBpbnN0YW5jZW9mIFN0KXI9dChlLnJlc3VsdCk7ZWxzZSBpZihlIGluc3RhbmNlb2YgTXQpZm9yKHZhciBuPTAsaT1lLmFyZ3M7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2lmKHI9dChhKSlicmVha31lbHNlKGUgaW5zdGFuY2VvZiBfdHx8ZSBpbnN0YW5jZW9mIFR0KSYmZS5pbnB1dCBpbnN0YW5jZW9mIGd0JiYiem9vbSI9PT1lLmlucHV0Lm5hbWUmJihyPWUpO3JldHVybiByIGluc3RhbmNlb2YgTj9yOihlLmVhY2hDaGlsZChmdW5jdGlvbihlKXt2YXIgbj10KGUpO24gaW5zdGFuY2VvZiBOP3I9bjohciYmbj9yPW5ldyBOKCIiLCciem9vbSIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb24uJyk6ciYmbiYmciE9PW4mJihyPW5ldyBOKCIiLCdPbmx5IG9uZSB6b29tLWJhc2VkICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIHN1YmV4cHJlc3Npb24gbWF5IGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbi4nKSl9KSxyKX0ocik7cmV0dXJuIGF8fGk/YSBpbnN0YW5jZW9mIE4/WXQoW2FdKTphIGluc3RhbmNlb2YgVHQmJiJwaWVjZXdpc2UtY29uc3RhbnQiPT09ZS5mdW5jdGlvbj9ZdChbbmV3IE4oIiIsJyJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTpHdChhP25ldyBUZShuPyJjYW1lcmEiOiJjb21wb3NpdGUiLHQudmFsdWUsYSk6bmV3IGtlKG4/ImNvbnN0YW50Ijoic291cmNlIix0LnZhbHVlKSk6WXQoW25ldyBOKCIiLCciem9vbSIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb24uJyldKX1UZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUpfSxUZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSl9LFRlLnByb3RvdHlwZS5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5faW50ZXJwb2xhdGlvblR5cGU/VHQuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLl9pbnRlcnBvbGF0aW9uVHlwZSx0LGUscik6MH07dmFyIE1lPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFyYW1ldGVycz10LHRoaXMuX3NwZWNpZmljYXRpb249ZSxSKHRoaXMsZnVuY3Rpb24gdChlLHIpe3ZhciBuLGksYSxvPSJjb2xvciI9PT1yLnR5cGUscz1lLnN0b3BzJiYib2JqZWN0Ij09dHlwZW9mIGUuc3RvcHNbMF1bMF0sbD1zfHx2b2lkIDAhPT1lLnByb3BlcnR5LGM9c3x8IWwsdT1lLnR5cGV8fCgiaW50ZXJwb2xhdGVkIj09PXIuZnVuY3Rpb24/ImV4cG9uZW50aWFsIjoiaW50ZXJ2YWwiKTtpZihvJiYoKGU9Uih7fSxlKSkuc3RvcHMmJihlLnN0b3BzPWUuc3RvcHMubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdLHR0LnBhcnNlKHRbMV0pXX0pKSxlLmRlZmF1bHQ/ZS5kZWZhdWx0PXR0LnBhcnNlKGUuZGVmYXVsdCk6ZS5kZWZhdWx0PXR0LnBhcnNlKHIuZGVmYXVsdCkpLGUuY29sb3JTcGFjZSYmInJnYiIhPT1lLmNvbG9yU3BhY2UmJiF1ZVtlLmNvbG9yU3BhY2VdKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2xvciBzcGFjZTogIitlLmNvbG9yU3BhY2UpO2lmKCJleHBvbmVudGlhbCI9PT11KW49bWU7ZWxzZSBpZigiaW50ZXJ2YWwiPT09dSluPXZlO2Vsc2UgaWYoImNhdGVnb3JpY2FsIj09PXUpe249Z2UsaT1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgZj0wLGg9ZS5zdG9wcztmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl07aVtwWzBdXT1wWzFdfWE9dHlwZW9mIGUuc3RvcHNbMF1bMF19ZWxzZXtpZigiaWRlbnRpdHkiIT09dSl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZnVuY3Rpb24gdHlwZSAiJyt1KyciJyk7bj15ZX1pZihzKXtmb3IodmFyIGQ9e30sZz1bXSx2PTA7djxlLnN0b3BzLmxlbmd0aDt2Kyspe3ZhciBtPWUuc3RvcHNbdl0seT1tWzBdLnpvb207dm9pZCAwPT09ZFt5XSYmKGRbeV09e3pvb206eSx0eXBlOmUudHlwZSxwcm9wZXJ0eTplLnByb3BlcnR5LGRlZmF1bHQ6ZS5kZWZhdWx0LHN0b3BzOltdfSxnLnB1c2goeSkpLGRbeV0uc3RvcHMucHVzaChbbVswXS52YWx1ZSxtWzFdXSl9Zm9yKHZhciB4PVtdLGI9MCxfPWc7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdO3gucHVzaChbZFt3XS56b29tLHQoZFt3XSxyKV0pfXJldHVybntraW5kOiJjb21wb3NpdGUiLGludGVycG9sYXRpb25GYWN0b3I6VHQuaW50ZXJwb2xhdGlvbkZhY3Rvci5iaW5kKHZvaWQgMCx7bmFtZToibGluZWFyIn0pLHpvb21TdG9wczp4Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGV2YWx1YXRlOmZ1bmN0aW9uKHQsbil7dmFyIGk9dC56b29tO3JldHVybiBtZSh7c3RvcHM6eCxiYXNlOmUuYmFzZX0scixpKS5ldmFsdWF0ZShpLG4pfX19cmV0dXJuIGM/e2tpbmQ6ImNhbWVyYSIsaW50ZXJwb2xhdGlvbkZhY3RvcjoiZXhwb25lbnRpYWwiPT09dT9UdC5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLHtuYW1lOiJleHBvbmVudGlhbCIsYmFzZTp2b2lkIDAhPT1lLmJhc2U/ZS5iYXNlOjF9KTpmdW5jdGlvbigpe3JldHVybiAwfSx6b29tU3RvcHM6ZS5zdG9wcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxldmFsdWF0ZTpmdW5jdGlvbih0KXt2YXIgbz10Lnpvb207cmV0dXJuIG4oZSxyLG8saSxhKX19OntraW5kOiJzb3VyY2UiLGV2YWx1YXRlOmZ1bmN0aW9uKHQsbyl7dmFyIHM9byYmby5wcm9wZXJ0aWVzP28ucHJvcGVydGllc1tlLnByb3BlcnR5XTp2b2lkIDA7cmV0dXJuIHZvaWQgMD09PXM/ZGUoZS5kZWZhdWx0LHIuZGVmYXVsdCk6bihlLHIscyxpLGEpfX19KHRoaXMuX3BhcmFtZXRlcnMsdGhpcy5fc3BlY2lmaWNhdGlvbikpfTtmdW5jdGlvbiBTZSh0LGUpe2lmKGhlKHQpKXJldHVybiBuZXcgTWUodCxlKTtpZihfZSh0KSl7dmFyIHI9QWUodCxlKTtpZigiZXJyb3IiPT09ci5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKHIudmFsdWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleSsiOiAiK3QubWVzc2FnZX0pLmpvaW4oIiwgIikpO3JldHVybiByLnZhbHVlfXZhciBuPXQ7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiY29sb3IiPT09ZS50eXBlJiYobj10dC5wYXJzZSh0KSkse2tpbmQ6ImNvbnN0YW50IixldmFsdWF0ZTpmdW5jdGlvbigpe3JldHVybiBufX19ZnVuY3Rpb24gRWUodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWN8fHt9LGk9dC5vYmplY3RFbGVtZW50VmFsaWRhdG9yc3x8e30sYT10LnN0eWxlLG89dC5zdHlsZVNwZWMscz1bXSxsPWZlKHIpO2lmKCJvYmplY3QiIT09bClyZXR1cm5bbmV3IEQoZSxyLCJvYmplY3QgZXhwZWN0ZWQsICIrbCsiIGZvdW5kIildO2Zvcih2YXIgYyBpbiByKXt2YXIgdT1jLnNwbGl0KCIuIilbMF0sZj1uW3VdfHxuWyIqIl0saD12b2lkIDA7aWYoaVt1XSloPWlbdV07ZWxzZSBpZihuW3VdKWg9S2U7ZWxzZSBpZihpWyIqIl0paD1pWyIqIl07ZWxzZXtpZighblsiKiJdKXtzLnB1c2gobmV3IEQoZSxyW2NdLCd1bmtub3duIHByb3BlcnR5ICInK2MrJyInKSk7Y29udGludWV9aD1LZX1zPXMuY29uY2F0KGgoe2tleTooZT9lKyIuIjplKStjLHZhbHVlOnJbY10sdmFsdWVTcGVjOmYsc3R5bGU6YSxzdHlsZVNwZWM6byxvYmplY3Q6cixvYmplY3RLZXk6Y30scikpfWZvcih2YXIgcCBpbiBuKWlbcF18fG5bcF0ucmVxdWlyZWQmJnZvaWQgMD09PW5bcF0uZGVmYXVsdCYmdm9pZCAwPT09cltwXSYmcy5wdXNoKG5ldyBEKGUsciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiJytwKyciJykpO3JldHVybiBzfWZ1bmN0aW9uIENlKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGUsaT10LnN0eWxlU3BlYyxhPXQua2V5LG89dC5hcnJheUVsZW1lbnRWYWxpZGF0b3J8fEtlO2lmKCJhcnJheSIhPT1mZShlKSlyZXR1cm5bbmV3IEQoYSxlLCJhcnJheSBleHBlY3RlZCwgIitmZShlKSsiIGZvdW5kIildO2lmKHIubGVuZ3RoJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybltuZXcgRChhLGUsImFycmF5IGxlbmd0aCAiK3IubGVuZ3RoKyIgZXhwZWN0ZWQsIGxlbmd0aCAiK2UubGVuZ3RoKyIgZm91bmQiKV07aWYoclsibWluLWxlbmd0aCJdJiZlLmxlbmd0aDxyWyJtaW4tbGVuZ3RoIl0pcmV0dXJuW25ldyBEKGEsZSwiYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICIrclsibWluLWxlbmd0aCJdKyIgZXhwZWN0ZWQsIGxlbmd0aCAiK2UubGVuZ3RoKyIgZm91bmQiKV07dmFyIHM9e3R5cGU6ci52YWx1ZX07aS4kdmVyc2lvbjw3JiYocy5mdW5jdGlvbj1yLmZ1bmN0aW9uKSwib2JqZWN0Ij09PWZlKHIudmFsdWUpJiYocz1yLnZhbHVlKTtmb3IodmFyIGw9W10sYz0wO2M8ZS5sZW5ndGg7YysrKWw9bC5jb25jYXQobyh7YXJyYXk6ZSxhcnJheUluZGV4OmMsdmFsdWU6ZVtjXSx2YWx1ZVNwZWM6cyxzdHlsZTpuLHN0eWxlU3BlYzppLGtleTphKyJbIitjKyJdIn0pKTtyZXR1cm4gbH1mdW5jdGlvbiBMZSh0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj10LnZhbHVlU3BlYyxpPWZlKHIpO3JldHVybiJudW1iZXIiIT09aT9bbmV3IEQoZSxyLCJudW1iZXIgZXhwZWN0ZWQsICIraSsiIGZvdW5kIildOiJtaW5pbXVtImluIG4mJnI8bi5taW5pbXVtP1tuZXcgRChlLHIscisiIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAiK24ubWluaW11bSldOiJtYXhpbXVtImluIG4mJnI+bi5tYXhpbXVtP1tuZXcgRChlLHIscisiIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSAiK24ubWF4aW11bSldOltdfWZ1bmN0aW9uIHplKHQpe3ZhciBlLHIsbixpPXQudmFsdWVTcGVjLGE9Rih0LnZhbHVlLnR5cGUpLG89e30scz0iY2F0ZWdvcmljYWwiIT09YSYmdm9pZCAwPT09dC52YWx1ZS5wcm9wZXJ0eSxsPSFzLGM9ImFycmF5Ij09PWZlKHQudmFsdWUuc3RvcHMpJiYiYXJyYXkiPT09ZmUodC52YWx1ZS5zdG9wc1swXSkmJiJvYmplY3QiPT09ZmUodC52YWx1ZS5zdG9wc1swXVswXSksdT1FZSh7a2V5OnQua2V5LHZhbHVlOnQudmFsdWUsdmFsdWVTcGVjOnQuc3R5bGVTcGVjLmZ1bmN0aW9uLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntzdG9wczpmdW5jdGlvbih0KXtpZigiaWRlbnRpdHkiPT09YSlyZXR1cm5bbmV3IEQodC5rZXksdC52YWx1ZSwnaWRlbnRpdHkgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGEgInN0b3BzIiBwcm9wZXJ0eScpXTt2YXIgZT1bXSxyPXQudmFsdWU7cmV0dXJuIGU9ZS5jb25jYXQoQ2Uoe2tleTp0LmtleSx2YWx1ZTpyLHZhbHVlU3BlYzp0LnZhbHVlU3BlYyxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxhcnJheUVsZW1lbnRWYWxpZGF0b3I6Zn0pKSwiYXJyYXkiPT09ZmUocikmJjA9PT1yLmxlbmd0aCYmZS5wdXNoKG5ldyBEKHQua2V5LHIsImFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3RvcCIpKSxlfSxkZWZhdWx0OmZ1bmN0aW9uKHQpe3JldHVybiBLZSh7a2V5OnQua2V5LHZhbHVlOnQudmFsdWUsdmFsdWVTcGVjOmksc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KX19fSk7cmV0dXJuImlkZW50aXR5Ij09PWEmJnMmJnUucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJwcm9wZXJ0eSInKSksImlkZW50aXR5Ij09PWF8fHQudmFsdWUuc3RvcHN8fHUucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzdG9wcyInKSksImV4cG9uZW50aWFsIj09PWEmJiJwaWVjZXdpc2UtY29uc3RhbnQiPT09dC52YWx1ZVNwZWMuZnVuY3Rpb24mJnUucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLCJleHBvbmVudGlhbCBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCIpKSx0LnN0eWxlU3BlYy4kdmVyc2lvbj49OCYmKGwmJiF0LnZhbHVlU3BlY1sicHJvcGVydHktZnVuY3Rpb24iXT91LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSk6cyYmIXQudmFsdWVTcGVjWyJ6b29tLWZ1bmN0aW9uIl0mJiJoZWF0bWFwLWNvbG9yIiE9PXQub2JqZWN0S2V5JiYibGluZS1ncmFkaWVudCIhPT10Lm9iamVjdEtleSYmdS5wdXNoKG5ldyBEKHQua2V5LHQudmFsdWUsInpvb20gZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSkpLCJjYXRlZ29yaWNhbCIhPT1hJiYhY3x8dm9pZCAwIT09dC52YWx1ZS5wcm9wZXJ0eXx8dS5wdXNoKG5ldyBEKHQua2V5LHQudmFsdWUsJyJwcm9wZXJ0eSIgcHJvcGVydHkgaXMgcmVxdWlyZWQnKSksdTtmdW5jdGlvbiBmKHQpe3ZhciBlPVtdLGE9dC52YWx1ZSxzPXQua2V5O2lmKCJhcnJheSIhPT1mZShhKSlyZXR1cm5bbmV3IEQocyxhLCJhcnJheSBleHBlY3RlZCwgIitmZShhKSsiIGZvdW5kIildO2lmKDIhPT1hLmxlbmd0aClyZXR1cm5bbmV3IEQocyxhLCJhcnJheSBsZW5ndGggMiBleHBlY3RlZCwgbGVuZ3RoICIrYS5sZW5ndGgrIiBmb3VuZCIpXTtpZihjKXtpZigib2JqZWN0IiE9PWZlKGFbMF0pKXJldHVybltuZXcgRChzLGEsIm9iamVjdCBleHBlY3RlZCwgIitmZShhWzBdKSsiIGZvdW5kIildO2lmKHZvaWQgMD09PWFbMF0uem9vbSlyZXR1cm5bbmV3IEQocyxhLCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHpvb20iKV07aWYodm9pZCAwPT09YVswXS52YWx1ZSlyZXR1cm5bbmV3IEQocyxhLCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHZhbHVlIildO2lmKG4mJm4+RihhWzBdLnpvb20pKXJldHVybltuZXcgRChzLGFbMF0uem9vbSwic3RvcCB6b29tIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIiKV07RihhWzBdLnpvb20pIT09biYmKG49RihhWzBdLnpvb20pLHI9dm9pZCAwLG89e30pLGU9ZS5jb25jYXQoRWUoe2tleTpzKyJbMF0iLHZhbHVlOmFbMF0sdmFsdWVTcGVjOnt6b29tOnt9fSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7em9vbTpMZSx2YWx1ZTpofX0pKX1lbHNlIGU9ZS5jb25jYXQoaCh7a2V5OnMrIlswXSIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e30sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9LGEpKTtyZXR1cm4gZS5jb25jYXQoS2Uoe2tleTpzKyJbMV0iLHZhbHVlOmFbMV0sdmFsdWVTcGVjOmksc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KSl9ZnVuY3Rpb24gaCh0LG4pe3ZhciBzPWZlKHQudmFsdWUpLGw9Rih0LnZhbHVlKSxjPW51bGwhPT10LnZhbHVlP3QudmFsdWU6bjtpZihlKXtpZihzIT09ZSlyZXR1cm5bbmV3IEQodC5rZXksYyxzKyIgc3RvcCBkb21haW4gdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3AgZG9tYWluIHR5cGUgIitlKV19ZWxzZSBlPXM7aWYoIm51bWJlciIhPT1zJiYic3RyaW5nIiE9PXMmJiJib29sZWFuIiE9PXMpcmV0dXJuW25ldyBEKHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpXTtpZigibnVtYmVyIiE9PXMmJiJjYXRlZ29yaWNhbCIhPT1hKXt2YXIgdT0ibnVtYmVyIGV4cGVjdGVkLCAiK3MrIiBmb3VuZCI7cmV0dXJuIGlbInByb3BlcnR5LWZ1bmN0aW9uIl0mJnZvaWQgMD09PWEmJih1Kz0nXG5JZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGEgY2F0ZWdvcmljYWwgZnVuY3Rpb24sIHNwZWNpZnkgYCJ0eXBlIjogImNhdGVnb3JpY2FsImAuJyksW25ldyBEKHQua2V5LGMsdSldfXJldHVybiJjYXRlZ29yaWNhbCIhPT1hfHwibnVtYmVyIiE9PXN8fGlzRmluaXRlKGwpJiZNYXRoLmZsb29yKGwpPT09bD8iY2F0ZWdvcmljYWwiIT09YSYmIm51bWJlciI9PT1zJiZ2b2lkIDAhPT1yJiZsPHI/W25ldyBEKHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIiKV06KHI9bCwiY2F0ZWdvcmljYWwiPT09YSYmbCBpbiBvP1tuZXcgRCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUiKV06KG9bbF09ITAsW10pKTpbbmV3IEQodC5rZXksYywiaW50ZWdlciBleHBlY3RlZCwgZm91bmQgIitsKV19fWZ1bmN0aW9uIE9lKHQpe3ZhciBlPSgicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dD9BZTp3ZSkoQih0LnZhbHVlKSx0LnZhbHVlU3BlYyk7cmV0dXJuImVycm9yIj09PWUucmVzdWx0P2UudmFsdWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRCgiIit0LmtleStlLmtleSx0LnZhbHVlLGUubWVzc2FnZSl9KToicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dCYmInRleHQtZm9udCI9PT10LnByb3BlcnR5S2V5JiYtMSE9PWUudmFsdWUuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uLnBvc3NpYmxlT3V0cHV0cygpLmluZGV4T2Yodm9pZCAwKT9bbmV3IEQodC5rZXksdC52YWx1ZSwnSW52YWxpZCBkYXRhIGV4cHJlc3Npb24gZm9yICJ0ZXh0LWZvbnQiLiBPdXRwdXQgdmFsdWVzIG11c3QgYmUgY29udGFpbmVkIGFzIGxpdGVyYWxzIHdpdGhpbiB0aGUgZXhwcmVzc2lvbi4nKV06W119ZnVuY3Rpb24gSWUodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT1bXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuLnZhbHVlcyk/LTE9PT1uLnZhbHVlcy5pbmRleE9mKEYocikpJiZpLnB1c2gobmV3IEQoZSxyLCJleHBlY3RlZCBvbmUgb2YgWyIrbi52YWx1ZXMuam9pbigiLCAiKSsiXSwgIitKU09OLnN0cmluZ2lmeShyKSsiIGZvdW5kIikpOi0xPT09T2JqZWN0LmtleXMobi52YWx1ZXMpLmluZGV4T2YoRihyKSkmJmkucHVzaChuZXcgRChlLHIsImV4cGVjdGVkIG9uZSBvZiBbIitPYmplY3Qua2V5cyhuLnZhbHVlcykuam9pbigiLCAiKSsiXSwgIitKU09OLnN0cmluZ2lmeShyKSsiIGZvdW5kIikpLGl9ZnVuY3Rpb24gRGUodCl7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4hMTtzd2l0Y2godFswXSl7Y2FzZSJoYXMiOnJldHVybiB0Lmxlbmd0aD49MiYmIiRpZCIhPT10WzFdJiYiJHR5cGUiIT09dFsxXTtjYXNlImluIjpjYXNlIiFpbiI6Y2FzZSIhaGFzIjpjYXNlIm5vbmUiOnJldHVybiExO2Nhc2UiPT0iOmNhc2UiIT0iOmNhc2UiPiI6Y2FzZSI+PSI6Y2FzZSI8IjpjYXNlIjw9IjpyZXR1cm4gMz09PXQubGVuZ3RoJiYoQXJyYXkuaXNBcnJheSh0WzFdKXx8QXJyYXkuaXNBcnJheSh0WzJdKSk7Y2FzZSJhbnkiOmNhc2UiYWxsIjpmb3IodmFyIGU9MCxyPXQuc2xpY2UoMSk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKCFEZShuKSYmImJvb2xlYW4iIT10eXBlb2YgbilyZXR1cm4hMX1yZXR1cm4hMDtkZWZhdWx0OnJldHVybiEwfX1NZS5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE1lKHQuX3BhcmFtZXRlcnMsdC5fc3BlY2lmaWNhdGlvbil9LE1lLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm57X3BhcmFtZXRlcnM6dC5fcGFyYW1ldGVycyxfc3BlY2lmaWNhdGlvbjp0Ll9zcGVjaWZpY2F0aW9ufX07dmFyIFBlPXt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLGZ1bmN0aW9uOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsInpvb20tZnVuY3Rpb24iOiEwfTtmdW5jdGlvbiBSZSh0KXtpZighdClyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH07RGUodCl8fCh0PUJlKHQpKTt2YXIgZT13ZSh0LFBlKTtpZigiZXJyb3IiPT09ZS5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKGUudmFsdWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleSsiOiAiK3QubWVzc2FnZX0pLmpvaW4oIiwgIikpO3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlLnZhbHVlLmV2YWx1YXRlKHQscil9fWZ1bmN0aW9uIEZlKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIEJlKHQpe2lmKCF0KXJldHVybiEwO3ZhciBlLHI9dFswXTtyZXR1cm4gdC5sZW5ndGg8PTE/ImFueSIhPT1yOiI9PSI9PT1yP05lKHRbMV0sdFsyXSwiPT0iKToiIT0iPT09cj9VZShOZSh0WzFdLHRbMl0sIj09IikpOiI8Ij09PXJ8fCI+Ij09PXJ8fCI8PSI9PT1yfHwiPj0iPT09cj9OZSh0WzFdLHRbMl0scik6ImFueSI9PT1yPyhlPXQuc2xpY2UoMSksWyJhbnkiXS5jb25jYXQoZS5tYXAoQmUpKSk6ImFsbCI9PT1yP1siYWxsIl0uY29uY2F0KHQuc2xpY2UoMSkubWFwKEJlKSk6Im5vbmUiPT09cj9bImFsbCJdLmNvbmNhdCh0LnNsaWNlKDEpLm1hcChCZSkubWFwKFVlKSk6ImluIj09PXI/amUodFsxXSx0LnNsaWNlKDIpKToiIWluIj09PXI/VWUoamUodFsxXSx0LnNsaWNlKDIpKSk6ImhhcyI9PT1yP1ZlKHRbMV0pOiIhaGFzIiE9PXJ8fFVlKFZlKHRbMV0pKX1mdW5jdGlvbiBOZSh0LGUscil7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVyblsiZmlsdGVyLXR5cGUtIityLGVdO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1pZC0iK3IsZV07ZGVmYXVsdDpyZXR1cm5bImZpbHRlci0iK3IsdCxlXX19ZnVuY3Rpb24gamUodCxlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuITE7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVyblsiZmlsdGVyLXR5cGUtaW4iLFsibGl0ZXJhbCIsZV1dO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1pZC1pbiIsWyJsaXRlcmFsIixlXV07ZGVmYXVsdDpyZXR1cm4gZS5sZW5ndGg+MjAwJiYhZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdCE9dHlwZW9mIGVbMF19KT9bImZpbHRlci1pbi1sYXJnZSIsdCxbImxpdGVyYWwiLGUuc29ydChGZSldXTpbImZpbHRlci1pbi1zbWFsbCIsdCxbImxpdGVyYWwiLGVdXX19ZnVuY3Rpb24gVmUodCl7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVybiEwO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1oYXMtaWQiXTtkZWZhdWx0OnJldHVyblsiZmlsdGVyLWhhcyIsdF19fWZ1bmN0aW9uIFVlKHQpe3JldHVyblsiISIsdF19ZnVuY3Rpb24gcWUodCl7cmV0dXJuIERlKEIodC52YWx1ZSkpP09lKFIoe30sdCx7ZXhwcmVzc2lvbkNvbnRleHQ6ImZpbHRlciIsdmFsdWVTcGVjOnt2YWx1ZToiYm9vbGVhbiJ9fSkpOmZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS52YWx1ZSxuPWUua2V5O2lmKCJhcnJheSIhPT1mZShyKSlyZXR1cm5bbmV3IEQobixyLCJhcnJheSBleHBlY3RlZCwgIitmZShyKSsiIGZvdW5kIildO3ZhciBpLGE9ZS5zdHlsZVNwZWMsbz1bXTtpZihyLmxlbmd0aDwxKXJldHVybltuZXcgRChuLHIsImZpbHRlciBhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50IildO3N3aXRjaChvPW8uY29uY2F0KEllKHtrZXk6bisiWzBdIix2YWx1ZTpyWzBdLHZhbHVlU3BlYzphLmZpbHRlcl9vcGVyYXRvcixzdHlsZTplLnN0eWxlLHN0eWxlU3BlYzplLnN0eWxlU3BlY30pKSxGKHJbMF0pKXtjYXNlIjwiOmNhc2UiPD0iOmNhc2UiPiI6Y2FzZSI+PSI6ci5sZW5ndGg+PTImJiIkdHlwZSI9PT1GKHJbMV0pJiZvLnB1c2gobmV3IEQobixyLCciJHR5cGUiIGNhbm5vdCBiZSB1c2Ugd2l0aCBvcGVyYXRvciAiJytyWzBdKyciJykpO2Nhc2UiPT0iOmNhc2UiIT0iOjMhPT1yLmxlbmd0aCYmby5wdXNoKG5ldyBEKG4sciwnZmlsdGVyIGFycmF5IGZvciBvcGVyYXRvciAiJytyWzBdKyciIG11c3QgaGF2ZSAzIGVsZW1lbnRzJykpO2Nhc2UiaW4iOmNhc2UiIWluIjpyLmxlbmd0aD49MiYmInN0cmluZyIhPT0oaT1mZShyWzFdKSkmJm8ucHVzaChuZXcgRChuKyJbMV0iLHJbMV0sInN0cmluZyBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7Zm9yKHZhciBzPTI7czxyLmxlbmd0aDtzKyspaT1mZShyW3NdKSwiJHR5cGUiPT09RihyWzFdKT9vPW8uY29uY2F0KEllKHtrZXk6bisiWyIrcysiXSIsdmFsdWU6cltzXSx2YWx1ZVNwZWM6YS5nZW9tZXRyeV90eXBlLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpOiJzdHJpbmciIT09aSYmIm51bWJlciIhPT1pJiYiYm9vbGVhbiIhPT1pJiZvLnB1c2gobmV3IEQobisiWyIrcysiXSIscltzXSwic3RyaW5nLCBudW1iZXIsIG9yIGJvb2xlYW4gZXhwZWN0ZWQsICIraSsiIGZvdW5kIikpO2JyZWFrO2Nhc2UiYW55IjpjYXNlImFsbCI6Y2FzZSJub25lIjpmb3IodmFyIGw9MTtsPHIubGVuZ3RoO2wrKylvPW8uY29uY2F0KHQoe2tleTpuKyJbIitsKyJdIix2YWx1ZTpyW2xdLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpO2JyZWFrO2Nhc2UiaGFzIjpjYXNlIiFoYXMiOmk9ZmUoclsxXSksMiE9PXIubGVuZ3RoP28ucHVzaChuZXcgRChuLHIsJ2ZpbHRlciBhcnJheSBmb3IgIicrclswXSsnIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50cycpKToic3RyaW5nIiE9PWkmJm8ucHVzaChuZXcgRChuKyJbMV0iLHJbMV0sInN0cmluZyBleHBlY3RlZCwgIitpKyIgZm91bmQiKSl9cmV0dXJuIG99KHQpfWZ1bmN0aW9uIEhlKHQsZSl7dmFyIHI9dC5rZXksbj10LnN0eWxlLGk9dC5zdHlsZVNwZWMsYT10LnZhbHVlLG89dC5vYmplY3RLZXkscz1pW2UrIl8iK3QubGF5ZXJUeXBlXTtpZighcylyZXR1cm5bXTt2YXIgbD1vLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2lmKCJwYWludCI9PT1lJiZsJiZzW2xbMV1dJiZzW2xbMV1dLnRyYW5zaXRpb24pcmV0dXJuIEtlKHtrZXk6cix2YWx1ZTphLHZhbHVlU3BlYzppLnRyYW5zaXRpb24sc3R5bGU6bixzdHlsZVNwZWM6aX0pO3ZhciBjLHU9dC52YWx1ZVNwZWN8fHNbb107aWYoIXUpcmV0dXJuW25ldyBEKHIsYSwndW5rbm93biBwcm9wZXJ0eSAiJytvKyciJyldO2lmKCJzdHJpbmciPT09ZmUoYSkmJnVbInByb3BlcnR5LWZ1bmN0aW9uIl0mJiF1LnRva2VucyYmKGM9L157KFtefV0rKX0kLy5leGVjKGEpKSlyZXR1cm5bbmV3IEQocixhLCciJytvKyciIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJwb2xhdGlvbiBzeW50YXhcblVzZSBhbiBpZGVudGl0eSBwcm9wZXJ0eSBmdW5jdGlvbiBpbnN0ZWFkOiBgeyAidHlwZSI6ICJpZGVudGl0eSIsICJwcm9wZXJ0eSI6ICcrSlNPTi5zdHJpbmdpZnkoY1sxXSkrIiB9YC4iKV07dmFyIGY9W107cmV0dXJuInN5bWJvbCI9PT10LmxheWVyVHlwZSYmKCJ0ZXh0LWZpZWxkIj09PW8mJm4mJiFuLmdseXBocyYmZi5wdXNoKG5ldyBEKHIsYSwndXNlIG9mICJ0ZXh0LWZpZWxkIiByZXF1aXJlcyBhIHN0eWxlICJnbHlwaHMiIHByb3BlcnR5JykpLCJ0ZXh0LWZvbnQiPT09byYmaGUoQihhKSkmJiJpZGVudGl0eSI9PT1GKGEudHlwZSkmJmYucHVzaChuZXcgRChyLGEsJyJ0ZXh0LWZvbnQiIGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpdHkgZnVuY3Rpb25zJykpKSxmLmNvbmNhdChLZSh7a2V5OnQua2V5LHZhbHVlOmEsdmFsdWVTcGVjOnUsc3R5bGU6bixzdHlsZVNwZWM6aSxleHByZXNzaW9uQ29udGV4dDoicHJvcGVydHkiLHByb3BlcnR5S2V5Om99KSl9ZnVuY3Rpb24gR2UodCl7cmV0dXJuIEhlKHQsInBhaW50Iil9ZnVuY3Rpb24gWWUodCl7cmV0dXJuIEhlKHQsImxheW91dCIpfWZ1bmN0aW9uIFdlKHQpe3ZhciBlPVtdLHI9dC52YWx1ZSxuPXQua2V5LGk9dC5zdHlsZSxhPXQuc3R5bGVTcGVjO3IudHlwZXx8ci5yZWZ8fGUucHVzaChuZXcgRChuLHIsJ2VpdGhlciAidHlwZSIgb3IgInJlZiIgaXMgcmVxdWlyZWQnKSk7dmFyIG8scz1GKHIudHlwZSksbD1GKHIucmVmKTtpZihyLmlkKWZvcih2YXIgYz1GKHIuaWQpLHU9MDt1PHQuYXJyYXlJbmRleDt1Kyspe3ZhciBmPWkubGF5ZXJzW3VdO0YoZi5pZCk9PT1jJiZlLnB1c2gobmV3IEQobixyLmlkLCdkdXBsaWNhdGUgbGF5ZXIgaWQgIicrci5pZCsnIiwgcHJldmlvdXNseSB1c2VkIGF0IGxpbmUgJytmLmlkLl9fbGluZV9fKSl9aWYoInJlZiJpbiByKVsidHlwZSIsInNvdXJjZSIsInNvdXJjZS1sYXllciIsImZpbHRlciIsImxheW91dCJdLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiByJiZlLnB1c2gobmV3IEQobixyW3RdLCciJyt0KyciIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnMnKSl9KSxpLmxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe0YodC5pZCk9PT1sJiYobz10KX0pLG8/by5yZWY/ZS5wdXNoKG5ldyBEKG4sci5yZWYsInJlZiBjYW5ub3QgcmVmZXJlbmNlIGFub3RoZXIgcmVmIGxheWVyIikpOnM9RihvLnR5cGUpOmUucHVzaChuZXcgRChuLHIucmVmLCdyZWYgbGF5ZXIgIicrbCsnIiBub3QgZm91bmQnKSk7ZWxzZSBpZigiYmFja2dyb3VuZCIhPT1zKWlmKHIuc291cmNlKXt2YXIgaD1pLnNvdXJjZXMmJmkuc291cmNlc1tyLnNvdXJjZV0scD1oJiZGKGgudHlwZSk7aD8idmVjdG9yIj09PXAmJiJyYXN0ZXIiPT09cz9lLnB1c2gobmV3IEQobixyLnNvdXJjZSwnbGF5ZXIgIicrci5pZCsnIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2UnKSk6InJhc3RlciI9PT1wJiYicmFzdGVyIiE9PXM/ZS5wdXNoKG5ldyBEKG4sci5zb3VyY2UsJ2xheWVyICInK3IuaWQrJyIgcmVxdWlyZXMgYSB2ZWN0b3Igc291cmNlJykpOiJ2ZWN0b3IiIT09cHx8clsic291cmNlLWxheWVyIl0/InJhc3Rlci1kZW0iPT09cCYmImhpbGxzaGFkZSIhPT1zP2UucHVzaChuZXcgRChuLHIuc291cmNlLCJyYXN0ZXItZGVtIHNvdXJjZSBjYW4gb25seSBiZSB1c2VkIHdpdGggbGF5ZXIgdHlwZSAnaGlsbHNoYWRlJy4iKSk6ImxpbmUiIT09c3x8IXIucGFpbnR8fCFyLnBhaW50WyJsaW5lLWdyYWRpZW50Il18fCJnZW9qc29uIj09PXAmJmgubGluZU1ldHJpY3N8fGUucHVzaChuZXcgRChuLHIsJ2xheWVyICInK3IuaWQrJyIgc3BlY2lmaWVzIGEgbGluZS1ncmFkaWVudCwgd2hpY2ggcmVxdWlyZXMgYSBHZW9KU09OIHNvdXJjZSB3aXRoIGBsaW5lTWV0cmljc2AgZW5hYmxlZC4nKSk6ZS5wdXNoKG5ldyBEKG4sciwnbGF5ZXIgIicrci5pZCsnIiBtdXN0IHNwZWNpZnkgYSAic291cmNlLWxheWVyIicpKTplLnB1c2gobmV3IEQobixyLnNvdXJjZSwnc291cmNlICInK3Iuc291cmNlKyciIG5vdCBmb3VuZCcpKX1lbHNlIGUucHVzaChuZXcgRChuLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInNvdXJjZSInKSk7cmV0dXJuIGU9ZS5jb25jYXQoRWUoe2tleTpuLHZhbHVlOnIsdmFsdWVTcGVjOmEubGF5ZXIsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbigpe3JldHVybltdfSx0eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIEtlKHtrZXk6bisiLnR5cGUiLHZhbHVlOnIudHlwZSx2YWx1ZVNwZWM6YS5sYXllci50eXBlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdDpyLG9iamVjdEtleToidHlwZSJ9KX0sZmlsdGVyOnFlLGxheW91dDpmdW5jdGlvbih0KXtyZXR1cm4gRWUoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbih0KXtyZXR1cm4gWWUoUih7bGF5ZXJUeXBlOnN9LHQpKX19fSl9LHBhaW50OmZ1bmN0aW9uKHQpe3JldHVybiBFZSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKHQpe3JldHVybiBHZShSKHtsYXllclR5cGU6c30sdCkpfX19KX19fSkpfWZ1bmN0aW9uIFhlKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPXQuc3R5bGVTcGVjLGk9dC5zdHlsZTtpZighZS50eXBlKXJldHVybltuZXcgRChyLGUsJyJ0eXBlIiBpcyByZXF1aXJlZCcpXTt2YXIgYT1GKGUudHlwZSksbz1bXTtzd2l0Y2goYSl7Y2FzZSJ2ZWN0b3IiOmNhc2UicmFzdGVyIjpjYXNlInJhc3Rlci1kZW0iOmlmKG89by5jb25jYXQoRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm5bInNvdXJjZV8iK2EucmVwbGFjZSgiLSIsIl8iKV0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6bn0pKSwidXJsImluIGUpZm9yKHZhciBzIGluIGUpWyJ0eXBlIiwidXJsIiwidGlsZVNpemUiXS5pbmRleE9mKHMpPDAmJm8ucHVzaChuZXcgRChyKyIuIitzLGVbc10sJ2Egc291cmNlIHdpdGggYSAidXJsIiBwcm9wZXJ0eSBtYXkgbm90IGluY2x1ZGUgYSAiJytzKyciIHByb3BlcnR5JykpO3JldHVybiBvO2Nhc2UiZ2VvanNvbiI6cmV0dXJuIEVlKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV9nZW9qc29uLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlInZpZGVvIjpyZXR1cm4gRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX3ZpZGVvLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlImltYWdlIjpyZXR1cm4gRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX2ltYWdlLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlImNhbnZhcyI6cmV0dXJuIG8ucHVzaChuZXcgRChyLG51bGwsIlBsZWFzZSB1c2UgcnVudGltZSBBUElzIHRvIGFkZCBjYW52YXMgc291cmNlcywgcmF0aGVyIHRoYW4gaW5jbHVkaW5nIHRoZW0gaW4gc3R5bGVzaGVldHMuIiwic291cmNlLmNhbnZhcyIpKSxvO2RlZmF1bHQ6cmV0dXJuIEllKHtrZXk6cisiLnR5cGUiLHZhbHVlOmUudHlwZSx2YWx1ZVNwZWM6e3ZhbHVlczpbInZlY3RvciIsInJhc3RlciIsInJhc3Rlci1kZW0iLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdfSxzdHlsZTppLHN0eWxlU3BlYzpufSl9fWZ1bmN0aW9uIFplKHQpe3ZhciBlPXQudmFsdWUscj10LnN0eWxlU3BlYyxuPXIubGlnaHQsaT10LnN0eWxlLGE9W10sbz1mZShlKTtpZih2b2lkIDA9PT1lKXJldHVybiBhO2lmKCJvYmplY3QiIT09bylyZXR1cm4gYS5jb25jYXQoW25ldyBEKCJsaWdodCIsZSwib2JqZWN0IGV4cGVjdGVkLCAiK28rIiBmb3VuZCIpXSk7Zm9yKHZhciBzIGluIGUpe3ZhciBsPXMubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7YT1sJiZuW2xbMV1dJiZuW2xbMV1dLnRyYW5zaXRpb24/YS5jb25jYXQoS2Uoe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOnIudHJhbnNpdGlvbixzdHlsZTppLHN0eWxlU3BlYzpyfSkpOm5bc10/YS5jb25jYXQoS2Uoe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOm5bc10sc3R5bGU6aSxzdHlsZVNwZWM6cn0pKTphLmNvbmNhdChbbmV3IEQocyxlW3NdLCd1bmtub3duIHByb3BlcnR5ICInK3MrJyInKV0pfXJldHVybiBhfWZ1bmN0aW9uICRlKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPWZlKGUpO3JldHVybiJzdHJpbmciIT09bj9bbmV3IEQocixlLCJzdHJpbmcgZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOltdfXZhciBKZT17IioiOmZ1bmN0aW9uKCl7cmV0dXJuW119LGFycmF5OkNlLGJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49ZmUoZSk7cmV0dXJuImJvb2xlYW4iIT09bj9bbmV3IEQocixlLCJib29sZWFuIGV4cGVjdGVkLCAiK24rIiBmb3VuZCIpXTpbXX0sbnVtYmVyOkxlLGNvbG9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPWZlKHIpO3JldHVybiJzdHJpbmciIT09bj9bbmV3IEQoZSxyLCJjb2xvciBleHBlY3RlZCwgIituKyIgZm91bmQiKV06bnVsbD09PVEocik/W25ldyBEKGUsciwnY29sb3IgZXhwZWN0ZWQsICInK3IrJyIgZm91bmQnKV06W119LGNvbnN0YW50czpQLGVudW06SWUsZmlsdGVyOnFlLGZ1bmN0aW9uOnplLGxheWVyOldlLG9iamVjdDpFZSxzb3VyY2U6WGUsbGlnaHQ6WmUsc3RyaW5nOiRlfTtmdW5jdGlvbiBLZSh0KXt2YXIgZT10LnZhbHVlLHI9dC52YWx1ZVNwZWMsbj10LnN0eWxlU3BlYztyZXR1cm4gci5mdW5jdGlvbiYmaGUoRihlKSk/emUodCk6ci5mdW5jdGlvbiYmX2UoQihlKSk/T2UodCk6ci50eXBlJiZKZVtyLnR5cGVdP0plW3IudHlwZV0odCk6RWUoUih7fSx0LHt2YWx1ZVNwZWM6ci50eXBlP25bci50eXBlXTpyfSkpfWZ1bmN0aW9uIFFlKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPSRlKHQpO3JldHVybiBuLmxlbmd0aD9uOigtMT09PWUuaW5kZXhPZigie2ZvbnRzdGFja30iKSYmbi5wdXNoKG5ldyBEKHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7Zm9udHN0YWNrfSIgdG9rZW4nKSksLTE9PT1lLmluZGV4T2YoIntyYW5nZX0iKSYmbi5wdXNoKG5ldyBEKHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7cmFuZ2V9IiB0b2tlbicpKSxuKX1mdW5jdGlvbiB0cih0LGUpe2U9ZXx8STt2YXIgcj1bXTtyZXR1cm4gcj1yLmNvbmNhdChLZSh7a2V5OiIiLHZhbHVlOnQsdmFsdWVTcGVjOmUuJHJvb3Qsc3R5bGVTcGVjOmUsc3R5bGU6dCxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7Z2x5cGhzOlFlLCIqIjpmdW5jdGlvbigpe3JldHVybltdfX19KSksdC5jb25zdGFudHMmJihyPXIuY29uY2F0KFAoe2tleToiY29uc3RhbnRzIix2YWx1ZTp0LmNvbnN0YW50cyxzdHlsZTp0LHN0eWxlU3BlYzplfSkpKSxlcihyKX1mdW5jdGlvbiBlcih0KXtyZXR1cm5bXS5jb25jYXQodCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmxpbmUtZS5saW5lfSl9ZnVuY3Rpb24gcnIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGVyKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dHIuc291cmNlPXJyKFhlKSx0ci5saWdodD1ycihaZSksdHIubGF5ZXI9cnIoV2UpLHRyLmZpbHRlcj1ycihxZSksdHIucGFpbnRQcm9wZXJ0eT1ycihHZSksdHIubGF5b3V0UHJvcGVydHk9cnIoWWUpO3ZhciBucj10cixpcj10ci5saWdodCxhcj10ci5wYWludFByb3BlcnR5LG9yPXRyLmxheW91dFByb3BlcnR5O2Z1bmN0aW9uIHNyKHQsZSl7dmFyIHI9ITE7aWYoZSYmZS5sZW5ndGgpZm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0LmZpcmUobmV3IHoobmV3IEVycm9yKGEubWVzc2FnZSkpKSxyPSEwfXJldHVybiByfXZhciBscj11cixjcj0zO2Z1bmN0aW9uIHVyKHQsZSxyKXt2YXIgbj10aGlzLmNlbGxzPVtdO2lmKHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7dGhpcy5hcnJheUJ1ZmZlcj10O3ZhciBpPW5ldyBJbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO3Q9aVswXSxlPWlbMV0scj1pWzJdLHRoaXMuZD1lKzIqcjtmb3IodmFyIGE9MDthPHRoaXMuZCp0aGlzLmQ7YSsrKXt2YXIgbz1pW2NyK2FdLHM9aVtjcithKzFdO24ucHVzaChvPT09cz9udWxsOmkuc3ViYXJyYXkobyxzKSl9dmFyIGw9aVtjcituLmxlbmd0aF0sYz1pW2NyK24ubGVuZ3RoKzFdO3RoaXMua2V5cz1pLnN1YmFycmF5KGwsYyksdGhpcy5iYm94ZXM9aS5zdWJhcnJheShjKSx0aGlzLmluc2VydD10aGlzLl9pbnNlcnRSZWFkb25seX1lbHNle3RoaXMuZD1lKzIqcjtmb3IodmFyIHU9MDt1PHRoaXMuZCp0aGlzLmQ7dSsrKW4ucHVzaChbXSk7dGhpcy5rZXlzPVtdLHRoaXMuYmJveGVzPVtdfXRoaXMubj1lLHRoaXMuZXh0ZW50PXQsdGhpcy5wYWRkaW5nPXIsdGhpcy5zY2FsZT1lL3QsdGhpcy51aWQ9MDt2YXIgZj1yL2UqdDt0aGlzLm1pbj0tZix0aGlzLm1heD10K2Z9dXIucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuX2ZvckVhY2hDZWxsKGUscixuLGksdGhpcy5faW5zZXJ0Q2VsbCx0aGlzLnVpZCsrKSx0aGlzLmtleXMucHVzaCh0KSx0aGlzLmJib3hlcy5wdXNoKGUpLHRoaXMuYmJveGVzLnB1c2gociksdGhpcy5iYm94ZXMucHVzaChuKSx0aGlzLmJib3hlcy5wdXNoKGkpfSx1ci5wcm90b3R5cGUuX2luc2VydFJlYWRvbmx5PWZ1bmN0aW9uKCl7dGhyb3ciQ2Fubm90IGluc2VydCBpbnRvIGEgR3JpZEluZGV4IGNyZWF0ZWQgZnJvbSBhbiBBcnJheUJ1ZmZlci4ifSx1ci5wcm90b3R5cGUuX2luc2VydENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2VsbHNbaV0ucHVzaChhKX0sdXIucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubWluLGE9dGhpcy5tYXg7aWYodDw9aSYmZTw9aSYmYTw9ciYmYTw9bilyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5rZXlzKTt2YXIgbz1bXTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsbyx7fSksb30sdXIucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dGhpcy5jZWxsc1tpXTtpZihudWxsIT09cylmb3IodmFyIGw9dGhpcy5rZXlzLGM9dGhpcy5iYm94ZXMsdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgZj1zW3VdO2lmKHZvaWQgMD09PW9bZl0pe3ZhciBoPTQqZjt0PD1jW2grMl0mJmU8PWNbaCszXSYmcj49Y1toKzBdJiZuPj1jW2grMV0/KG9bZl09ITAsYS5wdXNoKGxbZl0pKTpvW2ZdPSExfX19LHVyLnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh0KSxsPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChlKSxjPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChyKSx1PXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChuKSxmPXM7Zjw9YztmKyspZm9yKHZhciBoPWw7aDw9dTtoKyspe3ZhciBwPXRoaXMuZCpoK2Y7aWYoaS5jYWxsKHRoaXMsdCxlLHIsbixwLGEsbykpcmV0dXJufX0sdXIucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5kLTEsTWF0aC5mbG9vcih0KnRoaXMuc2NhbGUpK3RoaXMucGFkZGluZykpfSx1ci5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKHRoaXMuYXJyYXlCdWZmZXIpcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXI7Zm9yKHZhciB0PXRoaXMuY2VsbHMsZT1jcit0aGlzLmNlbGxzLmxlbmd0aCsxKzEscj0wLG49MDtuPHRoaXMuY2VsbHMubGVuZ3RoO24rKylyKz10aGlzLmNlbGxzW25dLmxlbmd0aDt2YXIgaT1uZXcgSW50MzJBcnJheShlK3IrdGhpcy5rZXlzLmxlbmd0aCt0aGlzLmJib3hlcy5sZW5ndGgpO2lbMF09dGhpcy5leHRlbnQsaVsxXT10aGlzLm4saVsyXT10aGlzLnBhZGRpbmc7Zm9yKHZhciBhPWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lbY3Irb109YSxpLnNldChzLGEpLGErPXMubGVuZ3RofXJldHVybiBpW2NyK3QubGVuZ3RoXT1hLGkuc2V0KHRoaXMua2V5cyxhKSxhKz10aGlzLmtleXMubGVuZ3RoLGlbY3IrdC5sZW5ndGgrMV09YSxpLnNldCh0aGlzLmJib3hlcyxhKSxhKz10aGlzLmJib3hlcy5sZW5ndGgsaS5idWZmZXJ9O3ZhciBmcj1zZWxmLkltYWdlRGF0YSxocj17fTtmdW5jdGlvbiBwcih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfY2xhc3NSZWdpc3RyeUtleSIse3ZhbHVlOnQsd3JpdGVhYmxlOiExfSksaHJbdF09e2tsYXNzOmUsb21pdDpyLm9taXR8fFtdLHNoYWxsb3c6ci5zaGFsbG93fHxbXX19Zm9yKHZhciBkciBpbiBwcigiT2JqZWN0IixPYmplY3QpLGxyLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPXQudG9BcnJheUJ1ZmZlcigpO3JldHVybiBlJiZlLnB1c2gocikscn0sbHIuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBscih0KX0scHIoIkdyaWQiLGxyKSxwcigiQ29sb3IiLHR0KSxwcigiRXJyb3IiLEVycm9yKSxwcigiU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uIixNZSkscHIoIlN0eWxlRXhwcmVzc2lvbiIsYmUse29taXQ6WyJfZXZhbHVhdG9yIl19KSxwcigiWm9vbURlcGVuZGVudEV4cHJlc3Npb24iLFRlKSxwcigiWm9vbUNvbnN0YW50RXhwcmVzc2lvbiIsa2UpLHByKCJDb21wb3VuZEV4cHJlc3Npb24iLGd0LHtvbWl0OlsiX2V2YWx1YXRlIl19KSxSdClSdFtkcl0uX2NsYXNzUmVnaXN0cnlLZXl8fHByKCJFeHByZXNzaW9uXyIrZHIsUnRbZHJdKTtmdW5jdGlvbiBncih0LGUpe2lmKG51bGw9PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdHx8InN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBlJiZlLnB1c2godCksdDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpe3ZhciByPXQ7cmV0dXJuIGUmJmUucHVzaChyLmJ1ZmZlcikscn1pZih0IGluc3RhbmNlb2YgZnIpcmV0dXJuIGUmJmUucHVzaCh0LmRhdGEuYnVmZmVyKSx0O2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj1bXSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuLnB1c2goZ3IobyxlKSl9cmV0dXJuIG59aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgcz10LmNvbnN0cnVjdG9yLGw9cy5fY2xhc3NSZWdpc3RyeUtleTtpZighbCl0aHJvdyBuZXcgRXJyb3IoImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdW5yZWdpc3RlcmVkIGNsYXNzIik7dmFyIGM9e307aWYocy5zZXJpYWxpemUpYy5fc2VyaWFsaXplZD1zLnNlcmlhbGl6ZSh0LGUpO2Vsc2V7Zm9yKHZhciB1IGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eSh1KSYmIShocltsXS5vbWl0LmluZGV4T2YodSk+PTApKXt2YXIgZj10W3VdO2NbdV09aHJbbF0uc2hhbGxvdy5pbmRleE9mKHUpPj0wP2Y6Z3IoZixlKX10IGluc3RhbmNlb2YgRXJyb3ImJihjLm1lc3NhZ2U9dC5tZXNzYWdlKX1yZXR1cm57bmFtZTpsLHByb3BlcnRpZXM6Y319dGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gdnIodCl7aWYobnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHwic3RyaW5nIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cHx8dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fHQgaW5zdGFuY2VvZiBmcilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdnIodCl9KTtpZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlPXQscj1lLm5hbWUsbj1lLnByb3BlcnRpZXM7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBkZXNlcmlhbGl6ZSBvYmplY3Qgb2YgYW5vbnltb3VzIGNsYXNzIik7dmFyIGk9aHJbcl0ua2xhc3M7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBkZXNlcmlhbGl6ZSB1bnJlZ2lzdGVyZWQgY2xhc3MgIityKTtpZihpLmRlc2VyaWFsaXplKXJldHVybiBpLmRlc2VyaWFsaXplKG4uX3NlcmlhbGl6ZWQpO2Zvcih2YXIgYT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxvPTAscz1PYmplY3Qua2V5cyhuKTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107YVtsXT1ocltyXS5zaGFsbG93LmluZGV4T2YobCk+PTA/bltsXTp2cihuW2xdKX1yZXR1cm4gYX10aHJvdyBuZXcgRXJyb3IoImNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICIrdHlwZW9mIHQpfXZhciBtcj1mdW5jdGlvbigpe3RoaXMuZmlyc3Q9ITB9O21yLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmZsb29yKHQpO3JldHVybiB0aGlzLmZpcnN0Pyh0aGlzLmZpcnN0PSExLHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPTAsdGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKToodGhpcy5sYXN0Rmxvb3Jab29tPnI/KHRoaXMubGFzdEludGVnZXJab29tPXIrMSx0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9ZSk6dGhpcy5sYXN0Rmxvb3Jab29tPHImJih0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKSx0IT09dGhpcy5sYXN0Wm9vbSYmKHRoaXMubGFzdFpvb209dCx0aGlzLmxhc3RGbG9vclpvb209ciwhMCkpfTt2YXIgeXI9eyJMYXRpbi0xIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgmJnQ8PTI1NX0sQXJhYmljOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xNTM2JiZ0PD0xNzkxfSwiQXJhYmljIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xODcyJiZ0PD0xOTE5fSwiQXJhYmljIEV4dGVuZGVkLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMjA4JiZ0PD0yMzAzfSwiSGFuZ3VsIEphbW8iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzUyJiZ0PD00NjA3fSwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTUxMjAmJnQ8PTU3NTl9LEtobWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02MDE2JiZ0PD02MTQzfSwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYzMjAmJnQ8PTYzOTl9LCJHZW5lcmFsIFB1bmN0dWF0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODE5MiYmdDw9ODMwM30sIkxldHRlcmxpa2UgU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg0NDgmJnQ8PTg1Mjd9LCJOdW1iZXIgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04NTI4JiZ0PD04NTkxfSwiTWlzY2VsbGFuZW91cyBUZWNobmljYWwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04OTYwJiZ0PD05MjE1fSwiQ29udHJvbCBQaWN0dXJlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyMTYmJnQ8PTkyNzl9LCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyODAmJnQ8PTkzMTF9LCJFbmNsb3NlZCBBbHBoYW51bWVyaWNzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTMxMiYmdDw9OTQ3MX0sIkdlb21ldHJpYyBTaGFwZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NjMyJiZ0PD05NzI3fSwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTcyOCYmdDw9OTk4M30sIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTEwMDgmJnQ8PTExMjYzfSwiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTkwNCYmdDw9MTIwMzF9LCJLYW5neGkgUmFkaWNhbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjAzMiYmdDw9MTIyNTV9LCJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyNzImJnQ8PTEyMjg3fSwiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyODgmJnQ8PTEyMzUxfSxIaXJhZ2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIzNTImJnQ8PTEyNDQ3fSxLYXRha2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI0NDgmJnQ8PTEyNTQzfSxCb3BvbW9mbzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1NDQmJnQ8PTEyNTkxfSwiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNTkyJiZ0PD0xMjY4N30sS2FuYnVuOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjY4OCYmdDw9MTI3MDN9LCJCb3BvbW9mbyBFeHRlbmRlZCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzA0JiZ0PD0xMjczNX0sIkNKSyBTdHJva2VzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MzYmJnQ8PTEyNzgzfSwiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzg0JiZ0PD0xMjc5OX0sIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgwMCYmdDw9MTMwNTV9LCJDSksgQ29tcGF0aWJpbGl0eSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMDU2JiZ0PD0xMzMxMX0sIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMzMxMiYmdDw9MTk5MDN9LCJZaWppbmcgSGV4YWdyYW0gU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTA0JiZ0PD0xOTk2N30sIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xOTk2OCYmdDw9NDA5NTl9LCJZaSBTeWxsYWJsZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MDk2MCYmdDw9NDIxMjd9LCJZaSBSYWRpY2FscyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQyMTI4JiZ0PD00MjE5MX0sIkhhbmd1bCBKYW1vIEV4dGVuZGVkLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzM2MCYmdDw9NDMzOTF9LCJIYW5ndWwgU3lsbGFibGVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDQwMzImJnQ8PTU1MjE1fSwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU1MjE2JiZ0PD01NTI5NX0sIlByaXZhdGUgVXNlIEFyZWEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01NzM0NCYmdDw9NjM3NDN9LCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjM3NDQmJnQ8PTY0MjU1fSwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjQzMzYmJnQ8PTY1MDIzfSwiVmVydGljYWwgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTA0MCYmdDw9NjUwNTV9LCJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDcyJiZ0PD02NTEwM30sIlNtYWxsIEZvcm0gVmFyaWFudHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEwNCYmdDw9NjUxMzV9LCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEzNiYmdDw9NjUyNzl9LCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MjgwJiZ0PD02NTUxOX19O2Z1bmN0aW9uIHhyKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpaWYoX3IocltlXS5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBicih0KXtyZXR1cm4hKHlyLkFyYWJpYyh0KXx8eXJbIkFyYWJpYyBTdXBwbGVtZW50Il0odCl8fHlyWyJBcmFiaWMgRXh0ZW5kZWQtQSJdKHQpfHx5clsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIl0odCl8fHlyWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiXSh0KSl9ZnVuY3Rpb24gX3IodCl7cmV0dXJuISEoNzQ2PT09dHx8NzQ3PT09dHx8ISh0PDQzNTIpJiYoeXJbIkJvcG9tb2ZvIEV4dGVuZGVkIl0odCl8fHlyLkJvcG9tb2ZvKHQpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KSYmISh0Pj02NTA5NyYmdDw9NjUxMDMpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyJdKHQpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkiXSh0KXx8eXJbIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50Il0odCl8fHlyWyJDSksgU3Ryb2tlcyJdKHQpfHwhKCF5clsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fHQ+PTEyMjk2JiZ0PD0xMjMwNXx8dD49MTIzMDgmJnQ8PTEyMzE5fHwxMjMzNj09PXQpfHx5clsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSJdKHQpfHx5clsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKHQpfHx5clsiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyJdKHQpfHx5clsiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyJdKHQpfHx5clsiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSJdKHQpfHx5clsiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiJdKHQpfHx5clsiSGFuZ3VsIEphbW8iXSh0KXx8eXJbIkhhbmd1bCBTeWxsYWJsZXMiXSh0KXx8eXIuSGlyYWdhbmEodCl8fHlyWyJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIl0odCl8fHlyLkthbmJ1bih0KXx8eXJbIkthbmd4aSBSYWRpY2FscyJdKHQpfHx5clsiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyJdKHQpfHx5ci5LYXRha2FuYSh0KSYmMTI1NDAhPT10fHwhKCF5clsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXSh0KXx8NjUyODg9PT10fHw2NTI4OT09PXR8fDY1MjkzPT09dHx8dD49NjUzMDYmJnQ8PTY1MzEwfHw2NTMzOT09PXR8fDY1MzQxPT09dHx8NjUzNDM9PT10fHx0Pj02NTM3MSYmdDw9NjU1MDN8fDY1NTA3PT09dHx8dD49NjU1MTImJnQ8PTY1NTE5KXx8ISgheXJbIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8dD49NjUxMTImJnQ8PTY1MTE4fHx0Pj02NTEyMyYmdDw9NjUxMjYpfHx5clsiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyJdKHQpfHx5clsiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCJdKHQpfHx5clsiVmVydGljYWwgRm9ybXMiXSh0KXx8eXJbIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzIl0odCl8fHlyWyJZaSBTeWxsYWJsZXMiXSh0KXx8eXJbIllpIFJhZGljYWxzIl0odCkpKX1mdW5jdGlvbiB3cih0KXtyZXR1cm4hKF9yKHQpfHxmdW5jdGlvbih0KXtyZXR1cm4hISh5clsiTGF0aW4tMSBTdXBwbGVtZW50Il0odCkmJigxNjc9PT10fHwxNjk9PT10fHwxNzQ9PT10fHwxNzc9PT10fHwxODg9PT10fHwxODk9PT10fHwxOTA9PT10fHwyMTU9PT10fHwyNDc9PT10KXx8eXJbIkdlbmVyYWwgUHVuY3R1YXRpb24iXSh0KSYmKDgyMTQ9PT10fHw4MjI0PT09dHx8ODIyNT09PXR8fDgyNDA9PT10fHw4MjQxPT09dHx8ODI1MT09PXR8fDgyNTI9PT10fHw4MjU4PT09dHx8ODI2Mz09PXR8fDgyNjQ9PT10fHw4MjY1PT09dHx8ODI3Mz09PXQpfHx5clsiTGV0dGVybGlrZSBTeW1ib2xzIl0odCl8fHlyWyJOdW1iZXIgRm9ybXMiXSh0KXx8eXJbIk1pc2NlbGxhbmVvdXMgVGVjaG5pY2FsIl0odCkmJih0Pj04OTYwJiZ0PD04OTY3fHx0Pj04OTcyJiZ0PD04OTkxfHx0Pj04OTk2JiZ0PD05ZTN8fDkwMDM9PT10fHx0Pj05MDg1JiZ0PD05MTE0fHx0Pj05MTUwJiZ0PD05MTY1fHw5MTY3PT09dHx8dD49OTE2OSYmdDw9OTE3OXx8dD49OTE4NiYmdDw9OTIxNSl8fHlyWyJDb250cm9sIFBpY3R1cmVzIl0odCkmJjkyNTEhPT10fHx5clsiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24iXSh0KXx8eXJbIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiXSh0KXx8eXJbIkdlb21ldHJpYyBTaGFwZXMiXSh0KXx8eXJbIk1pc2NlbGxhbmVvdXMgU3ltYm9scyJdKHQpJiYhKHQ+PTk3NTQmJnQ8PTk3NTkpfHx5clsiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MiXSh0KSYmKHQ+PTExMDI2JiZ0PD0xMTA1NXx8dD49MTEwODgmJnQ8PTExMDk3fHx0Pj0xMTE5MiYmdDw9MTEyNDMpfHx5clsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fHlyLkthdGFrYW5hKHQpfHx5clsiUHJpdmF0ZSBVc2UgQXJlYSJdKHQpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KXx8eXJbIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8eXJbIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIl0odCl8fDg3MzQ9PT10fHw4NzU2PT09dHx8ODc1Nz09PXR8fHQ+PTk5ODQmJnQ8PTEwMDg3fHx0Pj0xMDEwMiYmdDw9MTAxMzF8fDY1NTMyPT09dHx8NjU1MzM9PT10KX0odCkpfWZ1bmN0aW9uIGtyKHQsZSl7cmV0dXJuISghZSYmKHQ+PTE0MjQmJnQ8PTIzMDN8fHlyWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiXSh0KXx8eXJbIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiJdKHQpKXx8dD49MjMwNCYmdDw9MzU4M3x8dD49Mzg0MCYmdDw9NDI1NXx8eXIuS2htZXIodCkpfXZhciBUcixBcj0hMSxNcj1udWxsLFNyPSExLEVyPW5ldyBPLENyPXthcHBseUFyYWJpY1NoYXBpbmc6bnVsbCxwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ6bnVsbCxpc0xvYWRlZDpmdW5jdGlvbigpe3JldHVybiBTcnx8bnVsbCE9Q3IuYXBwbHlBcmFiaWNTaGFwaW5nfX0sTHI9ZnVuY3Rpb24odCxlKXt0aGlzLnpvb209dCxlPyh0aGlzLm5vdz1lLm5vdyx0aGlzLmZhZGVEdXJhdGlvbj1lLmZhZGVEdXJhdGlvbix0aGlzLnpvb21IaXN0b3J5PWUuem9vbUhpc3RvcnksdGhpcy50cmFuc2l0aW9uPWUudHJhbnNpdGlvbik6KHRoaXMubm93PTAsdGhpcy5mYWRlRHVyYXRpb249MCx0aGlzLnpvb21IaXN0b3J5PW5ldyBtcix0aGlzLnRyYW5zaXRpb249e30pfTtMci5wcm90b3R5cGUuaXNTdXBwb3J0ZWRTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSlpZigha3IobltyXS5jaGFyQ29kZUF0KDApLGUpKXJldHVybiExO3JldHVybiEwfSh0LENyLmlzTG9hZGVkKCkpfSxMci5wcm90b3R5cGUuY3Jvc3NGYWRpbmdGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZmFkZUR1cmF0aW9uPzE6TWF0aC5taW4oKHRoaXMubm93LXRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tVGltZSkvdGhpcy5mYWRlRHVyYXRpb24sMSl9O3ZhciB6cj1mdW5jdGlvbih0LGUpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5leHByZXNzaW9uPVNlKHZvaWQgMD09PWU/dC5zcGVjaWZpY2F0aW9uLmRlZmF1bHQ6ZSx0LnNwZWNpZmljYXRpb24pfTt6ci5wcm90b3R5cGUuaXNEYXRhRHJpdmVuPWZ1bmN0aW9uKCl7cmV0dXJuInNvdXJjZSI9PT10aGlzLmV4cHJlc3Npb24ua2luZHx8ImNvbXBvc2l0ZSI9PT10aGlzLmV4cHJlc3Npb24ua2luZH0senIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvcGVydHkucG9zc2libHlFdmFsdWF0ZSh0aGlzLHQpfTt2YXIgT3I9ZnVuY3Rpb24odCl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9bmV3IHpyKHQsdm9pZCAwKX07T3IucHJvdG90eXBlLnRyYW5zaXRpb25lZD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgRHIodGhpcy5wcm9wZXJ0eSx0aGlzLnZhbHVlLGUscCh7fSx0LnRyYW5zaXRpb24sdGhpcy50cmFuc2l0aW9uKSx0Lm5vdyl9LE9yLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe3JldHVybiBuZXcgRHIodGhpcy5wcm9wZXJ0eSx0aGlzLnZhbHVlLG51bGwse30sMCl9O3ZhciBJcj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyl9O0lyLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udmFsdWUudmFsdWUpfSxJci5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLl92YWx1ZXNbdF09bmV3IE9yKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSkpLHRoaXMuX3ZhbHVlc1t0XS52YWx1ZT1uZXcgenIodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDp4KGUpKX0sSXIucHJvdG90eXBlLmdldFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHgodGhpcy5fdmFsdWVzW3RdLnRyYW5zaXRpb24pfSxJci5wcm90b3R5cGUuc2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgT3IodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnRyYW5zaXRpb249eChlKXx8dm9pZCAwfSxJci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9LGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9dGhpcy5nZXRWYWx1ZShuKTt2b2lkIDAhPT1pJiYodFtuXT1pKTt2YXIgYT10aGlzLmdldFRyYW5zaXRpb24obik7dm9pZCAwIT09YSYmKHRbbisiLXRyYW5zaXRpb24iXT1hKX1yZXR1cm4gdH0sSXIucHJvdG90eXBlLnRyYW5zaXRpb25lZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgUHIodGhpcy5fcHJvcGVydGllcyksbj0wLGk9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07ci5fdmFsdWVzW2FdPXRoaXMuX3ZhbHVlc1thXS50cmFuc2l0aW9uZWQodCxlLl92YWx1ZXNbYV0pfXJldHVybiByfSxJci5wcm90b3R5cGUudW50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IFByKHRoaXMuX3Byb3BlcnRpZXMpLGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO3QuX3ZhbHVlc1tuXT10aGlzLl92YWx1ZXNbbl0udW50cmFuc2l0aW9uZWQoKX1yZXR1cm4gdH07dmFyIERyPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmJlZ2luPWkrbi5kZWxheXx8MCx0aGlzLmVuZD10aGlzLmJlZ2luK24uZHVyYXRpb258fDAsdC5zcGVjaWZpY2F0aW9uLnRyYW5zaXRpb24mJihuLmRlbGF5fHxuLmR1cmF0aW9uKSYmKHRoaXMucHJpb3I9cil9O0RyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubm93fHwwLHI9dGhpcy52YWx1ZS5wb3NzaWJseUV2YWx1YXRlKHQpLG49dGhpcy5wcmlvcjtpZihuKXtpZihlPnRoaXMuZW5kKXJldHVybiB0aGlzLnByaW9yPW51bGwscjtpZih0aGlzLnZhbHVlLmlzRGF0YURyaXZlbigpKXJldHVybiB0aGlzLnByaW9yPW51bGwscjtpZihlPHRoaXMuYmVnaW4pcmV0dXJuIG4ucG9zc2libHlFdmFsdWF0ZSh0KTt2YXIgaT0oZS10aGlzLmJlZ2luKS8odGhpcy5lbmQtdGhpcy5iZWdpbik7cmV0dXJuIHRoaXMucHJvcGVydHkuaW50ZXJwb2xhdGUobi5wb3NzaWJseUV2YWx1YXRlKHQpLHIsZnVuY3Rpb24odCl7aWYoaTw9MClyZXR1cm4gMDtpZihpPj0xKXJldHVybiAxO3ZhciBlPWkqaSxyPWUqaTtyZXR1cm4gNCooaTwuNT9yOjMqKGktZSkrci0uNzUpfSgpKX1yZXR1cm4gcn07dmFyIFByPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXMpfTtQci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEJyKHRoaXMuX3Byb3BlcnRpZXMpLHI9MCxuPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2UuX3ZhbHVlc1tpXT10aGlzLl92YWx1ZXNbaV0ucG9zc2libHlFdmFsdWF0ZSh0KX1yZXR1cm4gZX0sUHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2lmKHRoaXMuX3ZhbHVlc1tyXS5wcmlvcilyZXR1cm4hMH1yZXR1cm4hMX07dmFyIFJyPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQcm9wZXJ0eVZhbHVlcyl9O1JyLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udmFsdWUpfSxSci5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXNbdF09bmV3IHpyKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSxudWxsPT09ZT92b2lkIDA6eChlKSl9LFJyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpfXJldHVybiB0fSxSci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEJyKHRoaXMuX3Byb3BlcnRpZXMpLHI9MCxuPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2UuX3ZhbHVlc1tpXT10aGlzLl92YWx1ZXNbaV0ucG9zc2libHlFdmFsdWF0ZSh0KX1yZXR1cm4gZX07dmFyIEZyPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuZ2xvYmFscz1yfTtGci5wcm90b3R5cGUuaXNDb25zdGFudD1mdW5jdGlvbigpe3JldHVybiJjb25zdGFudCI9PT10aGlzLnZhbHVlLmtpbmR9LEZyLnByb3RvdHlwZS5jb25zdGFudE9yPWZ1bmN0aW9uKHQpe3JldHVybiJjb25zdGFudCI9PT10aGlzLnZhbHVlLmtpbmQ/dGhpcy52YWx1ZS52YWx1ZTp0fSxGci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvcGVydHkuZXZhbHVhdGUodGhpcy52YWx1ZSx0aGlzLmdsb2JhbHMsdCl9O3ZhciBCcj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXMpfTtCci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWx1ZXNbdF19O3ZhciBOcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07TnIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSxOci5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWt0W3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uKHQsZSxyKTp0fTt2YXIganI9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O2pyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuImNvbnN0YW50Ij09PXQuZXhwcmVzc2lvbi5raW5kfHwiY2FtZXJhIj09PXQuZXhwcmVzc2lvbi5raW5kP25ldyBGcih0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSxlKTpuZXcgRnIodGhpcyx0LmV4cHJlc3Npb24sZSl9LGpyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7aWYoImNvbnN0YW50IiE9PXQudmFsdWUua2luZHx8ImNvbnN0YW50IiE9PWUudmFsdWUua2luZClyZXR1cm4gdDtpZih2b2lkIDA9PT10LnZhbHVlLnZhbHVlfHx2b2lkIDA9PT1lLnZhbHVlLnZhbHVlKXJldHVybiBuZXcgRnIodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOnZvaWQgMH0sdC5nbG9iYWxzKTt2YXIgbj1rdFt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07cmV0dXJuIG4/bmV3IEZyKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTpuKHQudmFsdWUudmFsdWUsZS52YWx1ZS52YWx1ZSxyKX0sdC5nbG9iYWxzKTp0fSxqci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiJjb25zdGFudCI9PT10LmtpbmQ/dC52YWx1ZTp0LmV2YWx1YXRlKGUscil9O3ZhciBWcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07VnIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT10LnZhbHVlKXtpZigiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciByPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKHIscixyLGUpfXJldHVybiB0aGlzLl9jYWxjdWxhdGUodC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbS0xKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbSksZSkpLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIoTWF0aC5mbG9vcihlLnpvb20rMSksZSkpLGUpfX0sVnIucHJvdG90eXBlLl9jYWxjdWxhdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi56b29tLGE9aS1NYXRoLmZsb29yKGkpLG89bi5jcm9zc0ZhZGluZ0ZhY3RvcigpO3JldHVybiBpPm4uem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tOnQsdG86ZSxmcm9tU2NhbGU6Mix0b1NjYWxlOjEsdDphKygxLWEpKm99Ontmcm9tOnIsdG86ZSxmcm9tU2NhbGU6LjUsdG9TY2FsZToxLHQ6MS0oMS1vKSphfX0sVnIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0fTt2YXIgVXI9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O1VyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LFVyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbigpe3JldHVybiExfTt2YXIgcXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvcGVydGllcz10LHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzPXt9LHQpe3ZhciByPXRbZV0sbj10aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgenIocix2b2lkIDApLGk9dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgT3Iocik7dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzW2VdPWkudW50cmFuc2l0aW9uZWQoKSx0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlc1tlXT1uLnBvc3NpYmx5RXZhbHVhdGUoe30pfX07cHIoIkRhdGFEcml2ZW5Qcm9wZXJ0eSIsanIpLHByKCJEYXRhQ29uc3RhbnRQcm9wZXJ0eSIsTnIpLHByKCJDcm9zc0ZhZGVkUHJvcGVydHkiLFZyKSxwcigiQ29sb3JSYW1wUHJvcGVydHkiLFVyKTt2YXIgSHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe2Zvcih2YXIgbiBpbiB0LmNhbGwodGhpcyksdGhpcy5pZD1lLmlkLHRoaXMubWV0YWRhdGE9ZS5tZXRhZGF0YSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMubWluem9vbT1lLm1pbnpvb20sdGhpcy5tYXh6b29tPWUubWF4em9vbSx0aGlzLnZpc2liaWxpdHk9InZpc2libGUiLCJiYWNrZ3JvdW5kIiE9PWUudHlwZSYmKHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMuc291cmNlTGF5ZXI9ZVsic291cmNlLWxheWVyIl0sdGhpcy5maWx0ZXI9ZS5maWx0ZXIpLHRoaXMuX2ZlYXR1cmVGaWx0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sci5sYXlvdXQmJih0aGlzLl91bmV2YWx1YXRlZExheW91dD1uZXcgUnIoci5sYXlvdXQpKSx0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50PW5ldyBJcihyLnBhaW50KSxlLnBhaW50KXRoaXMuc2V0UGFpbnRQcm9wZXJ0eShuLGUucGFpbnRbbl0se3ZhbGlkYXRlOiExfSk7Zm9yKHZhciBpIGluIGUubGF5b3V0KXRoaXMuc2V0TGF5b3V0UHJvcGVydHkoaSxlLmxheW91dFtpXSx7dmFsaWRhdGU6ITF9KTt0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC51bnRyYW5zaXRpb25lZCgpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4idmlzaWJpbGl0eSI9PT10P3RoaXMudmlzaWJpbGl0eTp0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGwhPWUpe3ZhciBuPSJsYXllcnMuIit0aGlzLmlkKyIubGF5b3V0LiIrdDtpZih0aGlzLl92YWxpZGF0ZShvcixuLHQsZSxyKSlyZXR1cm59InZpc2liaWxpdHkiIT09dD90aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZSh0LGUpOnRoaXMudmlzaWJpbGl0eT0ibm9uZSI9PT1lP2U6InZpc2libGUifSxlLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsIi10cmFuc2l0aW9uIik/dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRUcmFuc2l0aW9uKHQuc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpKTp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFZhbHVlKHQpfSxlLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsIT1lKXt2YXIgbj0ibGF5ZXJzLiIrdGhpcy5pZCsiLnBhaW50LiIrdDtpZih0aGlzLl92YWxpZGF0ZShhcixuLHQsZSxyKSlyZXR1cm59dih0LCItdHJhbnNpdGlvbiIpP3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSxlfHx2b2lkIDApOnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VmFsdWUodCxlKX0sZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24odCl7cmV0dXJuISEodGhpcy5taW56b29tJiZ0PHRoaXMubWluem9vbSl8fCEhKHRoaXMubWF4em9vbSYmdD49dGhpcy5tYXh6b29tKXx8Im5vbmUiPT09dGhpcy52aXNpYmlsaXR5fSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQpfSxlLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5oYXNUcmFuc2l0aW9uKCl9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3VuZXZhbHVhdGVkTGF5b3V0JiYodGhpcy5sYXlvdXQ9dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQucG9zc2libHlFdmFsdWF0ZSh0KSksdGhpcy5wYWludD10aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZSh0KX0sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e2lkOnRoaXMuaWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuc291cmNlLCJzb3VyY2UtbGF5ZXIiOnRoaXMuc291cmNlTGF5ZXIsbWV0YWRhdGE6dGhpcy5tZXRhZGF0YSxtaW56b29tOnRoaXMubWluem9vbSxtYXh6b29tOnRoaXMubWF4em9vbSxmaWx0ZXI6dGhpcy5maWx0ZXIsbGF5b3V0OnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0JiZ0aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXJpYWxpemUoKSxwYWludDp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50JiZ0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNlcmlhbGl6ZSgpfTtyZXR1cm4ibm9uZSI9PT10aGlzLnZpc2liaWxpdHkmJih0LmxheW91dD10LmxheW91dHx8e30sdC5sYXlvdXQudmlzaWJpbGl0eT0ibm9uZSIpLHkodCxmdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwPT09dHx8ImxheW91dCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RofHwicGFpbnQiPT09ZSYmIU9iamVjdC5rZXlzKHQpLmxlbmd0aCl9KX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuKCFpfHwhMSE9PWkudmFsaWRhdGUpJiZzcih0aGlzLHQuY2FsbChucix7a2V5OmUsbGF5ZXJUeXBlOnRoaXMudHlwZSxvYmplY3RLZXk6cix2YWx1ZTpuLHN0eWxlU3BlYzpJLHN0eWxlOntnbHlwaHM6ITAsc3ByaXRlOiEwfX0pKX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt9LGV9KE8pLEdyPXtJbnQ4OkludDhBcnJheSxVaW50ODpVaW50OEFycmF5LEludDE2OkludDE2QXJyYXksVWludDE2OlVpbnQxNkFycmF5LEludDMyOkludDMyQXJyYXksVWludDMyOlVpbnQzMkFycmF5LEZsb2F0MzI6RmxvYXQzMkFycmF5fSxZcj1mdW5jdGlvbih0LGUpe3RoaXMuX3N0cnVjdEFycmF5PXQsdGhpcy5fcG9zMT1lKnRoaXMuc2l6ZSx0aGlzLl9wb3MyPXRoaXMuX3BvczEvMix0aGlzLl9wb3M0PXRoaXMuX3BvczEvNCx0aGlzLl9wb3M4PXRoaXMuX3BvczEvOH0sV3I9ZnVuY3Rpb24oKXt0aGlzLmlzVHJhbnNmZXJyZWQ9ITEsdGhpcy5jYXBhY2l0eT0tMSx0aGlzLnJlc2l6ZSgwKX07ZnVuY3Rpb24gWHIodCxlKXt2b2lkIDA9PT1lJiYoZT0xKTt2YXIgcj0wLG49MDtyZXR1cm57bWVtYmVyczp0Lm1hcChmdW5jdGlvbih0KXt2YXIgaSxhPShpPXQudHlwZSxHcltpXS5CWVRFU19QRVJfRUxFTUVOVCksbz1yPVpyKHIsTWF0aC5tYXgoZSxhKSkscz10LmNvbXBvbmVudHN8fDE7cmV0dXJuIG49TWF0aC5tYXgobixhKSxyKz1hKnMse25hbWU6dC5uYW1lLHR5cGU6dC50eXBlLGNvbXBvbmVudHM6cyxvZmZzZXQ6b319KSxzaXplOlpyKHIsTWF0aC5tYXgobixlKSksYWxpZ25tZW50OmV9fWZ1bmN0aW9uIFpyKHQsZSl7cmV0dXJuIE1hdGguY2VpbCh0L2UpKmV9V3Iuc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyaW0oKSxlJiYodC5pc1RyYW5zZmVycmVkPSEwLGUucHVzaCh0LmFycmF5QnVmZmVyKSkse2xlbmd0aDp0Lmxlbmd0aCxhcnJheUJ1ZmZlcjp0LmFycmF5QnVmZmVyfX0sV3IuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZSh0aGlzLnByb3RvdHlwZSk7cmV0dXJuIGUuYXJyYXlCdWZmZXI9dC5hcnJheUJ1ZmZlcixlLmxlbmd0aD10Lmxlbmd0aCxlLmNhcGFjaXR5PXQuYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aC9lLmJ5dGVzUGVyRWxlbWVudCxlLl9yZWZyZXNoVmlld3MoKSxlfSxXci5wcm90b3R5cGUuX3RyaW09ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aCE9PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PXRoaXMubGVuZ3RoLHRoaXMuYXJyYXlCdWZmZXI9dGhpcy5hcnJheUJ1ZmZlci5zbGljZSgwLHRoaXMubGVuZ3RoKnRoaXMuYnl0ZXNQZXJFbGVtZW50KSx0aGlzLl9yZWZyZXNoVmlld3MoKSl9LFdyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubGVuZ3RoPTB9LFdyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7dGhpcy5yZXNlcnZlKHQpLHRoaXMubGVuZ3RoPXR9LFdyLnByb3RvdHlwZS5yZXNlcnZlPWZ1bmN0aW9uKHQpe2lmKHQ+dGhpcy5jYXBhY2l0eSl7dGhpcy5jYXBhY2l0eT1NYXRoLm1heCh0LE1hdGguZmxvb3IoNSp0aGlzLmNhcGFjaXR5KSwxMjgpLHRoaXMuYXJyYXlCdWZmZXI9bmV3IEFycmF5QnVmZmVyKHRoaXMuY2FwYWNpdHkqdGhpcy5ieXRlc1BlckVsZW1lbnQpO3ZhciBlPXRoaXMudWludDg7dGhpcy5fcmVmcmVzaFZpZXdzKCksZSYmdGhpcy51aW50OC5zZXQoZSl9fSxXci5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3JlZnJlc2hWaWV3cygpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBjb25jcmV0ZSBTdHJ1Y3RBcnJheSBsYXlvdXQiKX07dmFyICRyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy5pbnQxNltuKzBdPXQsdGhpcy5pbnQxNltuKzFdPWUscn0sZX0oV3IpOyRyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcigiU3RydWN0QXJyYXlMYXlvdXQyaTQiLCRyKTt2YXIgSnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShpKzEpO3ZhciBhPTQqaTtyZXR1cm4gdGhpcy5pbnQxNlthKzBdPXQsdGhpcy5pbnQxNlthKzFdPWUsdGhpcy5pbnQxNlthKzJdPXIsdGhpcy5pbnQxNlthKzNdPW4saX0sZX0oV3IpO0pyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcigiU3RydWN0QXJyYXlMYXlvdXQ0aTgiLEpyKTt2YXIgS3I9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobysxKTt2YXIgcz02Km87cmV0dXJuIHRoaXMuaW50MTZbcyswXT10LHRoaXMuaW50MTZbcysxXT1lLHRoaXMuaW50MTZbcysyXT1yLHRoaXMuaW50MTZbcyszXT1uLHRoaXMuaW50MTZbcys0XT1pLHRoaXMuaW50MTZbcys1XT1hLG99LGV9KFdyKTtLci5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKCJTdHJ1Y3RBcnJheUxheW91dDJpNGkxMiIsS3IpO3ZhciBRcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobCsxKTt2YXIgYz02KmwsdT0xMipsO3JldHVybiB0aGlzLmludDE2W2MrMF09dCx0aGlzLmludDE2W2MrMV09ZSx0aGlzLmludDE2W2MrMl09cix0aGlzLmludDE2W2MrM109bix0aGlzLnVpbnQ4W3UrOF09aSx0aGlzLnVpbnQ4W3UrOV09YSx0aGlzLnVpbnQ4W3UrMTBdPW8sdGhpcy51aW50OFt1KzExXT1zLGx9LGV9KFdyKTtRci5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKCJTdHJ1Y3RBcnJheUxheW91dDRpNHViMTIiLFFyKTt2YXIgdG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShsKzEpO3ZhciBjPTgqbDtyZXR1cm4gdGhpcy5pbnQxNltjKzBdPXQsdGhpcy5pbnQxNltjKzFdPWUsdGhpcy5pbnQxNltjKzJdPXIsdGhpcy5pbnQxNltjKzNdPW4sdGhpcy51aW50MTZbYys0XT1pLHRoaXMudWludDE2W2MrNV09YSx0aGlzLnVpbnQxNltjKzZdPW8sdGhpcy51aW50MTZbYys3XT1zLGx9LGV9KFdyKTt0bi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE2LHByKCJTdHJ1Y3RBcnJheUxheW91dDRpNHVpMTYiLHRuKTt2YXIgZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MypuO3JldHVybiB0aGlzLmZsb2F0MzJbaSswXT10LHRoaXMuZmxvYXQzMltpKzFdPWUsdGhpcy5mbG9hdDMyW2krMl09cixufSxlfShXcik7ZW4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixwcigiU3RydWN0QXJyYXlMYXlvdXQzZjEyIixlbik7dmFyIHJuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShlKzEpO3ZhciByPTEqZTtyZXR1cm4gdGhpcy51aW50MzJbciswXT10LGV9LGV9KFdyKTtybi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQscHIoIlN0cnVjdEFycmF5TGF5b3V0MXVsNCIscm4pO3ZhciBubj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShmKzEpO3ZhciBoPTEyKmYscD02KmY7cmV0dXJuIHRoaXMuaW50MTZbaCswXT10LHRoaXMuaW50MTZbaCsxXT1lLHRoaXMuaW50MTZbaCsyXT1yLHRoaXMuaW50MTZbaCszXT1uLHRoaXMuaW50MTZbaCs0XT1pLHRoaXMuaW50MTZbaCs1XT1hLHRoaXMudWludDMyW3ArM109byx0aGlzLnVpbnQxNltoKzhdPXMsdGhpcy51aW50MTZbaCs5XT1sLHRoaXMuaW50MTZbaCsxMF09Yyx0aGlzLmludDE2W2grMTFdPXUsZn0sZX0oV3IpO25uLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MjQscHIoIlN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0Iixubik7dmFyIGFuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG8rMSk7dmFyIHM9NipvO3JldHVybiB0aGlzLmludDE2W3MrMF09dCx0aGlzLmludDE2W3MrMV09ZSx0aGlzLmludDE2W3MrMl09cix0aGlzLmludDE2W3MrM109bix0aGlzLmludDE2W3MrNF09aSx0aGlzLmludDE2W3MrNV09YSxvfSxlfShXcik7YW4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixwcigiU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMiIsYW4pO3ZhciBvbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKHIrMSk7dmFyIG49NCpyO3JldHVybiB0aGlzLnVpbnQ4W24rMF09dCx0aGlzLnVpbnQ4W24rMV09ZSxyfSxlfShXcik7b24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKCJTdHJ1Y3RBcnJheUxheW91dDJ1YjQiLG9uKTt2YXIgc249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCl7dmFyIGQ9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoZCsxKTt2YXIgZz0yMCpkLHY9MTAqZCxtPTQwKmQ7cmV0dXJuIHRoaXMuaW50MTZbZyswXT10LHRoaXMuaW50MTZbZysxXT1lLHRoaXMudWludDE2W2crMl09cix0aGlzLnVpbnQxNltnKzNdPW4sdGhpcy51aW50MzJbdisyXT1pLHRoaXMudWludDMyW3YrM109YSx0aGlzLnVpbnQzMlt2KzRdPW8sdGhpcy51aW50MTZbZysxMF09cyx0aGlzLnVpbnQxNltnKzExXT1sLHRoaXMudWludDE2W2crMTJdPWMsdGhpcy5mbG9hdDMyW3YrN109dSx0aGlzLmZsb2F0MzJbdis4XT1mLHRoaXMudWludDhbbSszNl09aCx0aGlzLnVpbnQ4W20rMzddPXAsZH0sZX0oV3IpO3NuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NDAscHIoIlN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjJ1YjQwIixzbik7dmFyIGxuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGUrMSk7dmFyIHI9MSplO3JldHVybiB0aGlzLmZsb2F0MzJbciswXT10LGV9LGV9KFdyKTtsbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQscHIoIlN0cnVjdEFycmF5TGF5b3V0MWY0Iixsbik7dmFyIGNuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MypuO3JldHVybiB0aGlzLmludDE2W2krMF09dCx0aGlzLmludDE2W2krMV09ZSx0aGlzLmludDE2W2krMl09cixufSxlfShXcik7Y24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD02LHByKCJTdHJ1Y3RBcnJheUxheW91dDNpNiIsY24pO3ZhciB1bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTIqbixhPTQqbjtyZXR1cm4gdGhpcy51aW50MzJbaSswXT10LHRoaXMudWludDE2W2ErMl09ZSx0aGlzLnVpbnQxNlthKzNdPXIsbn0sZX0oV3IpO3VuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcigiU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4Iix1bik7dmFyIGZuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobisxKTt2YXIgaT0zKm47cmV0dXJuIHRoaXMudWludDE2W2krMF09dCx0aGlzLnVpbnQxNltpKzFdPWUsdGhpcy51aW50MTZbaSsyXT1yLG59LGV9KFdyKTtmbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTYscHIoIlN0cnVjdEFycmF5TGF5b3V0M3VpNiIsZm4pO3ZhciBobj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy51aW50MTZbbiswXT10LHRoaXMudWludDE2W24rMV09ZSxyfSxlfShXcik7aG4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKCJTdHJ1Y3RBcnJheUxheW91dDJ1aTQiLGhuKTt2YXIgcG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy5mbG9hdDMyW24rMF09dCx0aGlzLmZsb2F0MzJbbisxXT1lLHJ9LGV9KFdyKTtwbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgscHIoIlN0cnVjdEFycmF5TGF5b3V0MmY4Iixwbik7dmFyIGRuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGkrMSk7dmFyIGE9NCppO3JldHVybiB0aGlzLmZsb2F0MzJbYSswXT10LHRoaXMuZmxvYXQzMlthKzFdPWUsdGhpcy5mbG9hdDMyW2ErMl09cix0aGlzLmZsb2F0MzJbYSszXT1uLGl9LGV9KFdyKTtkbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE2LHByKCJTdHJ1Y3RBcnJheUxheW91dDRmMTYiLGRuKTt2YXIgZ249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXthbmNob3JQb2ludFg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnRZOntjb25maWd1cmFibGU6ITB9LHgxOntjb25maWd1cmFibGU6ITB9LHkxOntjb25maWd1cmFibGU6ITB9LHgyOntjb25maWd1cmFibGU6ITB9LHkyOntjb25maWd1cmFibGU6ITB9LGZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9LHJhZGl1czp7Y29uZmlndXJhYmxlOiEwfSxzaWduZWREaXN0YW5jZUZyb21BbmNob3I6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclBvaW50WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXX0sci5hbmNob3JQb2ludFguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci5hbmNob3JQb2ludFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIuYW5jaG9yUG9pbnRZLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdPXR9LHIueDEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIueDEuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl09dH0sci55MS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXX0sci55MS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXT10fSxyLngyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdfSxyLngyLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdPXR9LHIueTIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV19LHIueTIuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV09dH0sci5mZWF0dXJlSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmZlYXR1cmVJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM109dH0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XX0sci5zb3VyY2VMYXllckluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XT10fSxyLmJ1Y2tldEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis5XX0sci5idWNrZXRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOV09dH0sci5yYWRpdXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTBdfSxyLnJhZGl1cy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMF09dH0sci5zaWduZWREaXN0YW5jZUZyb21BbmNob3IuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTFdfSxyLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMV09dH0sci5hbmNob3JQb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGwodGhpcy5hbmNob3JQb2ludFgsdGhpcy5hbmNob3JQb2ludFkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7Z24ucHJvdG90eXBlLnNpemU9MjQ7dmFyIHZuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ24odGhpcyx0KX0sZX0obm4pO3ByKCJDb2xsaXNpb25Cb3hBcnJheSIsdm4pO3ZhciBtbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yWTp7Y29uZmlndXJhYmxlOiEwfSxnbHlwaFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbnVtR2x5cGhzOntjb25maWd1cmFibGU6ITB9LHZlcnRleFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZVN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZUxlbmd0aDp7Y29uZmlndXJhYmxlOiEwfSxzZWdtZW50Ontjb25maWd1cmFibGU6ITB9LGxvd2VyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSx1cHBlclNpemU6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFk6e2NvbmZpZ3VyYWJsZTohMH0sd3JpdGluZ01vZGU6e2NvbmZpZ3VyYWJsZTohMH0saGlkZGVuOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci5hbmNob3JZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLmFuY2hvclkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci5nbHlwaFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzJdfSxyLmdseXBoU3RhcnRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl09dH0sci5udW1HbHlwaHMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdfSxyLm51bUdseXBocy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM109dH0sci52ZXJ0ZXhTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsyXX0sci52ZXJ0ZXhTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsyXT10fSxyLmxpbmVTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXX0sci5saW5lU3RhcnRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM109dH0sci5saW5lTGVuZ3RoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs0XX0sci5saW5lTGVuZ3RoLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs0XT10fSxyLnNlZ21lbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXX0sci5zZWdtZW50LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMF09dH0sci5sb3dlclNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci5sb3dlclNpemUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXT10fSxyLnVwcGVyU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdfSxyLnVwcGVyU2l6ZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdPXR9LHIubGluZU9mZnNldFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs3XX0sci5saW5lT2Zmc2V0WC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddPXR9LHIubGluZU9mZnNldFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs4XX0sci5saW5lT2Zmc2V0WS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzhdPXR9LHIud3JpdGluZ01vZGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdfSxyLndyaXRpbmdNb2RlLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM2XT10fSxyLmhpZGRlbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszN119LHIuaGlkZGVuLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7bW4ucHJvdG90eXBlLnNpemU9NDA7dmFyIHluPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbW4odGhpcyx0KX0sZX0oc24pO3ByKCJQbGFjZWRTeW1ib2xBcnJheSIseW4pO3ZhciB4bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e29mZnNldFg6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLm9mZnNldFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCswXX0sci5vZmZzZXRYLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMF09dH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oWXIpO3huLnByb3RvdHlwZS5zaXplPTQ7dmFyIGJuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0b2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mbG9hdDMyWzEqdCswXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeG4odGhpcyx0KX0sZX0obG4pO3ByKCJHbHlwaE9mZnNldEFycmF5Iixibik7dmFyIF9uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17eDp7Y29uZmlndXJhYmxlOiEwfSx5Ontjb25maWd1cmFibGU6ITB9LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci54LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLnguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci55LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLnkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXX0sci50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7X24ucHJvdG90eXBlLnNpemU9Njt2YXIgd249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXR4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCswXX0sZS5wcm90b3R5cGUuZ2V0eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMV19LGUucHJvdG90eXBlLmdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCsyXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX24odGhpcyx0KX0sZX0oY24pO3ByKCJTeW1ib2xMaW5lVmVydGV4QXJyYXkiLHduKTt2YXIga249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCswXX0sci5mZWF0dXJlSW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzBdPXR9LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuc291cmNlTGF5ZXJJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl09dH0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIuYnVja2V0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFlyKTtrbi5wcm90b3R5cGUuc2l6ZT04O3ZhciBUbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGtuKHRoaXMsdCl9LGV9KHVuKTtwcigiRmVhdHVyZUluZGV4QXJyYXkiLFRuKTt2YXIgQW49WHIoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpLm1lbWJlcnMsTW49ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2VnbWVudHM9dH07TW4ucHJvdG90eXBlLnByZXBhcmVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnNlZ21lbnRzW3RoaXMuc2VnbWVudHMubGVuZ3RoLTFdO3JldHVybiB0Pk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiZfKCJNYXggdmVydGljZXMgcGVyIHNlZ21lbnQgaXMgIitNbi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCsiOiBidWNrZXQgcmVxdWVzdGVkICIrdCksKCFufHxuLnZlcnRleExlbmd0aCt0Pk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKSYmKG49e3ZlcnRleE9mZnNldDplLmxlbmd0aCxwcmltaXRpdmVPZmZzZXQ6ci5sZW5ndGgsdmVydGV4TGVuZ3RoOjAscHJpbWl0aXZlTGVuZ3RoOjB9LHRoaXMuc2VnbWVudHMucHVzaChuKSksbn0sTW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlZ21lbnRzfSxNbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5zZWdtZW50czt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07Zm9yKHZhciBuIGluIHIudmFvcylyLnZhb3Nbbl0uZGVzdHJveSgpfX0sTW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg9TWF0aC5wb3coMiwxNiktMSxwcigiU2VnbWVudFZlY3RvciIsTW4pO3ZhciBTbj1mdW5jdGlvbih0LGUpe3JldHVybiAyNTYqKHQ9aChNYXRoLmZsb29yKHQpLDAsMjU1KSkraChNYXRoLmZsb29yKGUpLDAsMjU1KX07ZnVuY3Rpb24gRW4odCl7cmV0dXJuW1NuKDI1NSp0LnIsMjU1KnQuZyksU24oMjU1KnQuYiwyNTUqdC5hKV19dmFyIENuPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnZhbHVlPXQsdGhpcy5uYW1lPWUsdGhpcy50eXBlPXIsdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH19O0NuLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuWyIjZGVmaW5lIEhBU19VTklGT1JNX3VfIit0aGlzLm5hbWVdfSxDbi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKCl7fSxDbi5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKCl7fSxDbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sQ24ucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uY29uc3RhbnRPcih0aGlzLnZhbHVlKSxhPXQuZ2w7ImNvbG9yIj09PXRoaXMudHlwZT9hLnVuaWZvcm00ZihlLnVuaWZvcm1zWyJ1XyIrdGhpcy5uYW1lXSxpLnIsaS5nLGkuYixpLmEpOmEudW5pZm9ybTFmKGUudW5pZm9ybXNbInVfIit0aGlzLm5hbWVdLGkpfTt2YXIgTG49ZnVuY3Rpb24odCxlLHIpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMubmFtZT1lLHRoaXMudHlwZT1yLHRoaXMuc3RhdGlzdGljcz17bWF4Oi0xLzB9O3ZhciBuPSJjb2xvciI9PT1yP3BuOmxuO3RoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzPVt7bmFtZToiYV8iK2UsdHlwZToiRmxvYXQzMiIsY29tcG9uZW50czoiY29sb3IiPT09cj8yOjEsb2Zmc2V0OjB9XSx0aGlzLnBhaW50VmVydGV4QXJyYXk9bmV3IG59O0xuLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LExuLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBhaW50VmVydGV4QXJyYXksbj1yLmxlbmd0aDtyLnJlc2VydmUodCk7dmFyIGk9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcigwKSxlKTtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgYT1FbihpKSxvPW47bzx0O28rKylyLmVtcGxhY2VCYWNrKGFbMF0sYVsxXSk7ZWxzZXtmb3IodmFyIHM9bjtzPHQ7cysrKXIuZW1wbGFjZUJhY2soaSk7dGhpcy5zdGF0aXN0aWNzLm1heD1NYXRoLm1heCh0aGlzLnN0YXRpc3RpY3MubWF4LGkpfX0sTG4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJih0aGlzLnBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcykpfSxMbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpfSxMbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt0LmdsLnVuaWZvcm0xZihlLnVuaWZvcm1zWyJhXyIrdGhpcy5uYW1lKyJfdCJdLDApfTt2YXIgem49ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLm5hbWU9ZSx0aGlzLnR5cGU9cix0aGlzLnVzZUludGVnZXJab29tPW4sdGhpcy56b29tPWksdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH07dmFyIGE9ImNvbG9yIj09PXI/ZG46cG47dGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9W3tuYW1lOiJhXyIrZSx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzQ6MixvZmZzZXQ6MH1dLHRoaXMucGFpbnRWZXJ0ZXhBcnJheT1uZXcgYX07em4ucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sem4ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFpbnRWZXJ0ZXhBcnJheSxuPXIubGVuZ3RoO3IucmVzZXJ2ZSh0KTt2YXIgaT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKHRoaXMuem9vbSksZSksYT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKHRoaXMuem9vbSsxKSxlKTtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgbz1FbihpKSxzPUVuKGEpLGw9bjtsPHQ7bCsrKXIuZW1wbGFjZUJhY2sob1swXSxvWzFdLHNbMF0sc1sxXSk7ZWxzZXtmb3IodmFyIGM9bjtjPHQ7YysrKXIuZW1wbGFjZUJhY2soaSxhKTt0aGlzLnN0YXRpc3RpY3MubWF4PU1hdGgubWF4KHRoaXMuc3RhdGlzdGljcy5tYXgsaSxhKX19LHpuLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5wYWludFZlcnRleEFycmF5JiYodGhpcy5wYWludFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnBhaW50VmVydGV4QXJyYXksdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMpKX0sem4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKX0sem4ucHJvdG90eXBlLmludGVycG9sYXRpb25GYWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXNlSW50ZWdlclpvb20/dGhpcy5leHByZXNzaW9uLmludGVycG9sYXRpb25GYWN0b3IoTWF0aC5mbG9vcih0KSx0aGlzLnpvb20sdGhpcy56b29tKzEpOnRoaXMuZXhwcmVzc2lvbi5pbnRlcnBvbGF0aW9uRmFjdG9yKHQsdGhpcy56b29tLHRoaXMuem9vbSsxKX0sem4ucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyKXt0LmdsLnVuaWZvcm0xZihlLnVuaWZvcm1zWyJhXyIrdGhpcy5uYW1lKyJfdCJdLHRoaXMuaW50ZXJwb2xhdGlvbkZhY3RvcihyLnpvb20pKX07dmFyIE9uPWZ1bmN0aW9uKCl7dGhpcy5iaW5kZXJzPXt9LHRoaXMuY2FjaGVLZXk9IiIsdGhpcy5fYnVmZmVycz1bXX07T24uY3JlYXRlRHluYW1pYz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IE9uLGk9W107Zm9yKHZhciBhIGluIHQucGFpbnQuX3ZhbHVlcylpZihyKGEpKXt2YXIgbz10LnBhaW50LmdldChhKTtpZihvIGluc3RhbmNlb2YgRnImJm8ucHJvcGVydHkuc3BlY2lmaWNhdGlvblsicHJvcGVydHktZnVuY3Rpb24iXSl7dmFyIHM9RG4oYSx0LnR5cGUpLGw9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUsYz1vLnByb3BlcnR5LnVzZUludGVnZXJab29tOyJjb25zdGFudCI9PT1vLnZhbHVlLmtpbmQ/KG4uYmluZGVyc1thXT1uZXcgQ24oby52YWx1ZSxzLGwpLGkucHVzaCgiL3VfIitzKSk6InNvdXJjZSI9PT1vLnZhbHVlLmtpbmQ/KG4uYmluZGVyc1thXT1uZXcgTG4oby52YWx1ZSxzLGwpLGkucHVzaCgiL2FfIitzKSk6KG4uYmluZGVyc1thXT1uZXcgem4oby52YWx1ZSxzLGwsYyxlKSxpLnB1c2goIi96XyIrcykpfX1yZXR1cm4gbi5jYWNoZUtleT1pLnNvcnQoKS5qb2luKCIiKSxufSxPbi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0aGlzLmJpbmRlcnMpdGhpcy5iaW5kZXJzW3JdLnBvcHVsYXRlUGFpbnRBcnJheSh0LGUpfSxPbi5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLmJpbmRlcnMpdC5wdXNoLmFwcGx5KHQsdGhpcy5iaW5kZXJzW2VdLmRlZmluZXMoKSk7cmV0dXJuIHR9LE9uLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGkgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tpXS5zZXRVbmlmb3Jtcyh0LGUsbixyLmdldChpKSl9LE9uLnByb3RvdHlwZS5nZXRQYWludFZlcnRleEJ1ZmZlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyc30sT24ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tlXS51cGxvYWQodCk7dmFyIHI9W107Zm9yKHZhciBuIGluIHRoaXMuYmluZGVycyl7dmFyIGk9dGhpcy5iaW5kZXJzW25dOyhpIGluc3RhbmNlb2YgTG58fGkgaW5zdGFuY2VvZiB6bikmJmkucGFpbnRWZXJ0ZXhCdWZmZXImJnIucHVzaChpLnBhaW50VmVydGV4QnVmZmVyKX10aGlzLl9idWZmZXJzPXJ9LE9uLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbdF0uZGVzdHJveSgpfTt2YXIgSW49ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXt9O2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF09T24uY3JlYXRlRHluYW1pYyhvLHIsbiksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF0ubGF5b3V0QXR0cmlidXRlcz10fX07ZnVuY3Rpb24gRG4odCxlKXtyZXR1cm57InRleHQtb3BhY2l0eSI6Im9wYWNpdHkiLCJpY29uLW9wYWNpdHkiOiJvcGFjaXR5IiwidGV4dC1jb2xvciI6ImZpbGxfY29sb3IiLCJpY29uLWNvbG9yIjoiZmlsbF9jb2xvciIsInRleHQtaGFsby1jb2xvciI6ImhhbG9fY29sb3IiLCJpY29uLWhhbG8tY29sb3IiOiJoYWxvX2NvbG9yIiwidGV4dC1oYWxvLWJsdXIiOiJoYWxvX2JsdXIiLCJpY29uLWhhbG8tYmx1ciI6ImhhbG9fYmx1ciIsInRleHQtaGFsby13aWR0aCI6ImhhbG9fd2lkdGgiLCJpY29uLWhhbG8td2lkdGgiOiJoYWxvX3dpZHRoIiwibGluZS1nYXAtd2lkdGgiOiJnYXB3aWR0aCJ9W3RdfHx0LnJlcGxhY2UoZSsiLSIsIiIpLnJlcGxhY2UoLy0vZywiXyIpfUluLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW3JdLnBvcHVsYXRlUGFpbnRBcnJheXModCxlKX0sSW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF19LEluLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2VdLnVwbG9hZCh0KX0sSW4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF0uZGVzdHJveSgpfSxwcigiQ29uc3RhbnRCaW5kZXIiLENuKSxwcigiU291cmNlRXhwcmVzc2lvbkJpbmRlciIsTG4pLHByKCJDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIix6bikscHIoIlByb2dyYW1Db25maWd1cmF0aW9uIixPbix7b21pdDpbIl9idWZmZXJzIl19KSxwcigiUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQiLEluKTt2YXIgUG49ODE5MixSbj0oMTYse21pbjotMSpNYXRoLnBvdygyLDE1KSxtYXg6TWF0aC5wb3coMiwxNSktMX0pO2Z1bmN0aW9uIEZuKHQpe2Zvcih2YXIgZT1Qbi90LmV4dGVudCxyPXQubG9hZEdlb21ldHJ5KCksbj0wO248ci5sZW5ndGg7bisrKWZvcih2YXIgaT1yW25dLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtvLng9TWF0aC5yb3VuZChvLngqZSksby55PU1hdGgucm91bmQoby55KmUpLChvLng8Um4ubWlufHxvLng+Um4ubWF4fHxvLnk8Um4ubWlufHxvLnk+Um4ubWF4KSYmXygiR2VvbWV0cnkgZXhjZWVkcyBhbGxvd2VkIGV4dGVudCwgcmVkdWNlIHlvdXIgdmVjdG9yIHRpbGUgYnVmZmVyIHNpemUiKX1yZXR1cm4gcn1mdW5jdGlvbiBCbih0LGUscixuLGkpe3QuZW1wbGFjZUJhY2soMiplKyhuKzEpLzIsMipyKyhpKzEpLzIpfXZhciBObj1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyAkcix0aGlzLmluZGV4QXJyYXk9bmV3IGZuLHRoaXMuc2VnbWVudHM9bmV3IE1uLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBJbihBbix0LmxheWVycyx0Lnpvb20pfTtmdW5jdGlvbiBqbih0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aWYoWm4oaSxlKSlyZXR1cm4hMDtpZihZbihlLGkscikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gVm4odCxlKXtpZigxPT09dC5sZW5ndGgmJjE9PT10WzBdLmxlbmd0aClyZXR1cm4gWG4oZSx0WzBdWzBdKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylmb3IodmFyIG49ZVtyXSxpPTA7aTxuLmxlbmd0aDtpKyspaWYoWG4odCxuW2ldKSlyZXR1cm4hMDtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7Zm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKWlmKFhuKGUsb1tzXSkpcmV0dXJuITA7Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDtsKyspaWYoSG4obyxlW2xdKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBVbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPWVbbl0sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2lmKG8ubGVuZ3RoPj0zKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWlmKFpuKG8saVtzXSkpcmV0dXJuITA7aWYocW4obyxpLHIpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHFuKHQsZSxyKXtpZih0Lmxlbmd0aD4xKXtpZihIbih0LGUpKXJldHVybiEwO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKFluKGVbbl0sdCxyKSlyZXR1cm4hMH1mb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZihZbih0W2ldLGUscikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSG4odCxlKXtpZigwPT09dC5sZW5ndGh8fDA9PT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoLTE7cisrKWZvcih2YXIgbj10W3JdLGk9dFtyKzFdLGE9MDthPGUubGVuZ3RoLTE7YSsrKWlmKEduKG4saSxlW2FdLGVbYSsxXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gR24odCxlLHIsbil7cmV0dXJuIHcodCxyLG4pIT09dyhlLHIsbikmJncodCxlLHIpIT09dyh0LGUsbil9ZnVuY3Rpb24gWW4odCxlLHIpe3ZhciBuPXIqcjtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHQuZGlzdFNxcihlWzBdKTxuO2Zvcih2YXIgaT0xO2k8ZS5sZW5ndGg7aSsrKWlmKFduKHQsZVtpLTFdLGVbaV0pPG4pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gV24odCxlLHIpe3ZhciBuPWUuZGlzdFNxcihyKTtpZigwPT09bilyZXR1cm4gdC5kaXN0U3FyKGUpO3ZhciBpPSgodC54LWUueCkqKHIueC1lLngpKyh0LnktZS55KSooci55LWUueSkpL247cmV0dXJuIGk8MD90LmRpc3RTcXIoZSk6aT4xP3QuZGlzdFNxcihyKTp0LmRpc3RTcXIoci5zdWIoZSkuX211bHQoaSkuX2FkZChlKSl9ZnVuY3Rpb24gWG4odCxlKXtmb3IodmFyIHIsbixpLGE9ITEsbz0wO288dC5sZW5ndGg7bysrKWZvcih2YXIgcz0wLGw9KHI9dFtvXSkubGVuZ3RoLTE7czxyLmxlbmd0aDtsPXMrKyluPXJbc10saT1yW2xdLG4ueT5lLnkhPWkueT5lLnkmJmUueDwoaS54LW4ueCkqKGUueS1uLnkpLyhpLnktbi55KStuLngmJihhPSFhKTtyZXR1cm4gYX1mdW5jdGlvbiBabih0LGUpe2Zvcih2YXIgcj0hMSxuPTAsaT10Lmxlbmd0aC0xO248dC5sZW5ndGg7aT1uKyspe3ZhciBhPXRbbl0sbz10W2ldO2EueT5lLnkhPW8ueT5lLnkmJmUueDwoby54LWEueCkqKGUueS1hLnkpLyhvLnktYS55KSthLngmJihyPSFyKX1yZXR1cm4gcn1mdW5jdGlvbiAkbih0LGUscil7dmFyIG49ZS5wYWludC5nZXQodCkudmFsdWU7cmV0dXJuImNvbnN0YW50Ij09PW4ua2luZD9uLnZhbHVlOnIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChlLmlkKS5iaW5kZXJzW3RdLnN0YXRpc3RpY3MubWF4fWZ1bmN0aW9uIEpuKHQpe3JldHVybiBNYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSl9ZnVuY3Rpb24gS24odCxlLHIsbixpKXtpZighZVswXSYmIWVbMV0pcmV0dXJuIHQ7dmFyIGE9bC5jb252ZXJ0KGUpOyJ2aWV3cG9ydCI9PT1yJiZhLl9yb3RhdGUoLW4pO2Zvcih2YXIgbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe2Zvcih2YXIgYz10W3NdLHU9W10sZj0wO2Y8Yy5sZW5ndGg7ZisrKXUucHVzaChjW2ZdLnN1YihhLl9tdWx0KGkpKSk7by5wdXNoKHUpfXJldHVybiBvfU5uLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1GbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSxObi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LE5uLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxBbiksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSxObi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LE5uLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlmb3IodmFyIGk9MCxhPW5bcl07aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9by54LGw9by55O2lmKCEoczwwfHxzPj1Qbnx8bDwwfHxsPj1Qbikpe3ZhciBjPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksdT1jLnZlcnRleExlbmd0aDtCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwtMSwtMSksQm4odGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxzLGwsMSwtMSksQm4odGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxzLGwsMSwxKSxCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwtMSwxKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodSx1KzEsdSsyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodSx1KzMsdSsyKSxjLnZlcnRleExlbmd0aCs9NCxjLnByaW1pdGl2ZUxlbmd0aCs9Mn19dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0KX0scHIoIkNpcmNsZUJ1Y2tldCIsTm4se29taXQ6WyJsYXllcnMiXX0pO3ZhciBRbj17cGFpbnQ6bmV3IHFyKHsiY2lyY2xlLXJhZGl1cyI6bmV3IGpyKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtcmFkaXVzIl0pLCJjaXJjbGUtY29sb3IiOm5ldyBqcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLWNvbG9yIl0pLCJjaXJjbGUtYmx1ciI6bmV3IGpyKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtYmx1ciJdKSwiY2lyY2xlLW9wYWNpdHkiOm5ldyBqcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLW9wYWNpdHkiXSksImNpcmNsZS10cmFuc2xhdGUiOm5ldyBOcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLXRyYW5zbGF0ZSJdKSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyBOcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiXSksImNpcmNsZS1waXRjaC1zY2FsZSI6bmV3IE5yKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtcGl0Y2gtc2NhbGUiXSksImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiOm5ldyBOcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLXBpdGNoLWFsaWdubWVudCJdKSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6bmV3IGpyKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLXdpZHRoIl0pLCJjaXJjbGUtc3Ryb2tlLWNvbG9yIjpuZXcganIoSS5wYWludF9jaXJjbGVbImNpcmNsZS1zdHJva2UtY29sb3IiXSksImNpcmNsZS1zdHJva2Utb3BhY2l0eSI6bmV3IGpyKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiXSl9KX0sdGk9aShmdW5jdGlvbih0LGUpe3ZhciByO3QuZXhwb3J0cz0oKHI9bmV3IEZsb2F0MzJBcnJheSgzKSlbMF09MCxyWzFdPTAsclsyXT0wLGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTt0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTB9KCkse3ZlYzM6e3RyYW5zZm9ybU1hdDM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHZlYzQ6e3RyYW5zZm9ybU1hdDQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9fSxtYXQyOntjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdH0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwrYSpzLHRbMV09aSpsK28qcyx0WzJdPW4qLXMrYSpsLHRbM109aSotcytvKmwsdH0sc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1yWzBdLGw9clsxXTtyZXR1cm4gdFswXT1uKnMsdFsxXT1pKnMsdFsyXT1hKmwsdFszXT1vKmwsdH19LG1hdDM6e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoOSk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGZyb21Sb3RhdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0wLHRbM109LXIsdFs0XT1uLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fX0sbWF0NDp7Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxpZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGc9clswXSx2PXJbMV0sbT1yWzJdO3JldHVybiBlPT09dD8odFsxMl09ZVswXSpnK2VbNF0qditlWzhdKm0rZVsxMl0sdFsxM109ZVsxXSpnK2VbNV0qditlWzldKm0rZVsxM10sdFsxNF09ZVsyXSpnK2VbNl0qditlWzEwXSptK2VbMTRdLHRbMTVdPWVbM10qZytlWzddKnYrZVsxMV0qbStlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10sZj1lWzhdLGg9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWYsdFs5XT1oLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKmcrcyp2K2YqbStlWzEyXSx0WzEzXT1pKmcrbCp2K2gqbStlWzEzXSx0WzE0XT1hKmcrYyp2K3AqbStlWzE0XSx0WzE1XT1vKmcrdSp2K2QqbStlWzE1XSksdH0sc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LG11bHRpcGx5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSxnPWVbMTJdLHY9ZVsxM10sbT1lWzE0XSx5PWVbMTVdLHg9clswXSxiPXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT14Km4rYipzK18qZit3KmcsdFsxXT14KmkrYipsK18qaCt3KnYsdFsyXT14KmErYipjK18qcCt3Km0sdFszXT14Km8rYip1K18qZCt3KnkseD1yWzRdLGI9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09eCpuK2IqcytfKmYrdypnLHRbNV09eCppK2IqbCtfKmgrdyp2LHRbNl09eCphK2IqYytfKnArdyptLHRbN109eCpvK2IqdStfKmQrdyp5LHg9cls4XSxiPXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09eCpuK2IqcytfKmYrdypnLHRbOV09eCppK2IqbCtfKmgrdyp2LHRbMTBdPXgqYStiKmMrXypwK3cqbSx0WzExXT14Km8rYip1K18qZCt3KnkseD1yWzEyXSxiPXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT14Km4rYipzK18qZit3KmcsdFsxM109eCppK2IqbCtfKmgrdyp2LHRbMTRdPXgqYStiKmMrXypwK3cqbSx0WzE1XT14Km8rYip1K18qZCt3KnksdH0scGVyc3BlY3RpdmU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH0scm90YXRlWDpmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbNF0sbz1lWzVdLHM9ZVs2XSxsPWVbN10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07cmV0dXJuIGUhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzRdPWEqaStjKm4sdFs1XT1vKmkrdSpuLHRbNl09cyppK2Yqbix0WzddPWwqaStoKm4sdFs4XT1jKmktYSpuLHRbOV09dSppLW8qbix0WzEwXT1mKmktcypuLHRbMTFdPWgqaS1sKm4sdH0scm90YXRlWjpmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxmPWVbNl0saD1lWzddO3JldHVybiBlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkrZipuLHRbM109bCppK2gqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09ZippLXMqbix0WzddPWgqaS1sKm4sdH0saW52ZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLHY9ZVsxNF0sbT1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLGs9aSpjLWEqbCxUPXUqZy1mKmQsQT11KnYtaCpkLE09dSptLXAqZCxTPWYqdi1oKmcsRT1mKm0tcCpnLEM9aCptLXAqdixMPXkqQy14KkUrYipTK18qTS13KkEraypUO3JldHVybiBMPyhMPTEvTCx0WzBdPShzKkMtbCpFK2MqUykqTCx0WzFdPShpKkUtbipDLWEqUykqTCx0WzJdPShnKmstdip3K20qXykqTCx0WzNdPShoKnctZiprLXAqXykqTCx0WzRdPShsKk0tbypDLWMqQSkqTCx0WzVdPShyKkMtaSpNK2EqQSkqTCx0WzZdPSh2KmItZCprLW0qeCkqTCx0WzddPSh1KmstaCpiK3AqeCkqTCx0WzhdPShvKkUtcypNK2MqVCkqTCx0WzldPShuKk0tcipFLWEqVCkqTCx0WzEwXT0oZCp3LWcqYittKnkpKkwsdFsxMV09KGYqYi11KnctcCp5KSpMLHRbMTJdPShzKkEtbypTLWwqVCkqTCx0WzEzXT0ocipTLW4qQStpKlQpKkwsdFsxNF09KGcqeC1kKl8tdip5KSpMLHRbMTVdPSh1Kl8tZip4K2gqeSkqTCx0KTpudWxsfSxvcnRobzpmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0xLyhlLXIpLGw9MS8obi1pKSxjPTEvKGEtbyk7cmV0dXJuIHRbMF09LTIqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0tMipsLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0yKmMsdFsxMV09MCx0WzEyXT0oZStyKSpzLHRbMTNdPShpK24pKmwsdFsxNF09KG8rYSkqYyx0WzE1XT0xLHR9fX0pfSksZWk9KHRpLnZlYzMsdGkudmVjNCkscmk9KHRpLm1hdDIsdGkubWF0Myx0aS5tYXQ0KSxuaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsUW4pfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBObih0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gJG4oImNpcmNsZS1yYWRpdXMiLHRoaXMsZSkrJG4oImNpcmNsZS1zdHJva2Utd2lkdGgiLHRoaXMsZSkrSm4odGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPUtuKHQsdGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiKSxpLmFuZ2xlLGEpLGw9dGhpcy5wYWludC5nZXQoImNpcmNsZS1yYWRpdXMiKS5ldmFsdWF0ZShlKSt0aGlzLnBhaW50LmdldCgiY2lyY2xlLXN0cm9rZS13aWR0aCIpLmV2YWx1YXRlKGUpLGM9Im1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpLHU9Yz9zOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpaSh0LGUscil9KX0pfSgwLG8saSksZj1jP2wqYTpsLGg9MCxwPXI7aDxwLmxlbmd0aDtoKz0xKWZvcih2YXIgZD0wLGc9cFtoXTtkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF0sbT1jP3Y6aWkodixvLGkpLHk9Zix4PWVpLnRyYW5zZm9ybU1hdDQoW10sW3YueCx2LnksMCwxXSxvKTtpZigidmlld3BvcnQiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1zY2FsZSIpJiYibWFwIj09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Iik/eSo9eFszXS9pLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6Im1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIikmJiJ2aWV3cG9ydCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpJiYoeSo9aS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL3hbM10pLGpuKHUsbSx5KSlyZXR1cm4hMH1yZXR1cm4hMX0sZX0oSHIpO2Z1bmN0aW9uIGlpKHQsZSxyKXt2YXIgbj1laS50cmFuc2Zvcm1NYXQ0KFtdLFt0LngsdC55LDAsMV0sZSk7cmV0dXJuIG5ldyBsKChuWzBdL25bM10rMSkqci53aWR0aCouNSwoblsxXS9uWzNdKzEpKnIuaGVpZ2h0Ki41KX12YXIgYWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShObik7ZnVuY3Rpb24gb2kodCxlLHIsbil7dmFyIGk9ZS53aWR0aCxhPWUuaGVpZ2h0O2lmKG4pe2lmKG4ubGVuZ3RoIT09aSphKnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pc21hdGNoZWQgaW1hZ2Ugc2l6ZSIpfWVsc2Ugbj1uZXcgVWludDhBcnJheShpKmEqcik7cmV0dXJuIHQud2lkdGg9aSx0LmhlaWdodD1hLHQuZGF0YT1uLHR9ZnVuY3Rpb24gc2kodCxlLHIpe3ZhciBuPWUud2lkdGgsaT1lLmhlaWdodDtpZihuIT09dC53aWR0aHx8aSE9PXQuaGVpZ2h0KXt2YXIgYT1vaSh7fSx7d2lkdGg6bixoZWlnaHQ6aX0scik7bGkodCxhLHt4OjAseTowfSx7eDowLHk6MH0se3dpZHRoOk1hdGgubWluKHQud2lkdGgsbiksaGVpZ2h0Ok1hdGgubWluKHQuaGVpZ2h0LGkpfSxyKSx0LndpZHRoPW4sdC5oZWlnaHQ9aSx0LmRhdGE9YS5kYXRhfX1mdW5jdGlvbiBsaSh0LGUscixuLGksYSl7aWYoMD09PWkud2lkdGh8fDA9PT1pLmhlaWdodClyZXR1cm4gZTtpZihpLndpZHRoPnQud2lkdGh8fGkuaGVpZ2h0PnQuaGVpZ2h0fHxyLng+dC53aWR0aC1pLndpZHRofHxyLnk+dC5oZWlnaHQtaS5oZWlnaHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIGltYWdlIGNvcHkiKTtpZihpLndpZHRoPmUud2lkdGh8fGkuaGVpZ2h0PmUuaGVpZ2h0fHxuLng+ZS53aWR0aC1pLndpZHRofHxuLnk+ZS5oZWlnaHQtaS5oZWlnaHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weSIpO2Zvcih2YXIgbz10LmRhdGEscz1lLmRhdGEsbD0wO2w8aS5oZWlnaHQ7bCsrKWZvcih2YXIgYz0oKHIueStsKSp0LndpZHRoK3IueCkqYSx1PSgobi55K2wpKmUud2lkdGgrbi54KSphLGY9MDtmPGkud2lkdGgqYTtmKyspc1t1K2ZdPW9bYytmXTtyZXR1cm4gZX1wcigiSGVhdG1hcEJ1Y2tldCIsYWkse29taXQ6WyJsYXllcnMiXX0pO3ZhciBjaT1mdW5jdGlvbih0LGUpe29pKHRoaXMsdCwxLGUpfTtjaS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3NpKHRoaXMsdCwxKX0sY2kucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjaSh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpfSxjaS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4saSl7bGkodCxlLHIsbixpLDEpfTt2YXIgdWk9ZnVuY3Rpb24odCxlKXtvaSh0aGlzLHQsNCxlKX07dWkucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtzaSh0aGlzLHQsNCl9LHVpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdWkoe3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKX0sdWkuY29weT1mdW5jdGlvbih0LGUscixuLGkpe2xpKHQsZSxyLG4saSw0KX0scHIoIkFscGhhSW1hZ2UiLGNpKSxwcigiUkdCQUltYWdlIix1aSk7dmFyIGZpPXtwYWludDpuZXcgcXIoeyJoZWF0bWFwLXJhZGl1cyI6bmV3IGpyKEkucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1yYWRpdXMiXSksImhlYXRtYXAtd2VpZ2h0IjpuZXcganIoSS5wYWludF9oZWF0bWFwWyJoZWF0bWFwLXdlaWdodCJdKSwiaGVhdG1hcC1pbnRlbnNpdHkiOm5ldyBOcihJLnBhaW50X2hlYXRtYXBbImhlYXRtYXAtaW50ZW5zaXR5Il0pLCJoZWF0bWFwLWNvbG9yIjpuZXcgVXIoSS5wYWludF9oZWF0bWFwWyJoZWF0bWFwLWNvbG9yIl0pLCJoZWF0bWFwLW9wYWNpdHkiOm5ldyBOcihJLnBhaW50X2hlYXRtYXBbImhlYXRtYXAtb3BhY2l0eSJdKX0pfTtmdW5jdGlvbiBoaSh0LGUpe2Zvcih2YXIgcj1uZXcgVWludDhBcnJheSgxMDI0KSxuPXt9LGk9MCxhPTA7aTwyNTY7aSsrLGErPTQpe25bZV09aS8yNTU7dmFyIG89dC5ldmFsdWF0ZShuKTtyW2ErMF09TWF0aC5mbG9vcigyNTUqby5yL28uYSksclthKzFdPU1hdGguZmxvb3IoMjU1Km8uZy9vLmEpLHJbYSsyXT1NYXRoLmZsb29yKDI1NSpvLmIvby5hKSxyW2ErM109TWF0aC5mbG9vcigyNTUqby5hKX1yZXR1cm4gbmV3IHVpKHt3aWR0aDoyNTYsaGVpZ2h0OjF9LHIpfXZhciBwaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsZmkpLHRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhaSh0KX0sZS5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7dC5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eS5jYWxsKHRoaXMsZSxyLG4pLCJoZWF0bWFwLWNvbG9yIj09PWUmJnRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlQ29sb3JSYW1wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWyJoZWF0bWFwLWNvbG9yIl0udmFsdWUuZXhwcmVzc2lvbjt0aGlzLmNvbG9yUmFtcD1oaSh0LCJoZWF0bWFwRGVuc2l0eSIpLHRoaXMuY29sb3JSYW1wVGV4dHVyZT1udWxsfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLmhlYXRtYXBGYm8mJih0aGlzLmhlYXRtYXBGYm8uZGVzdHJveSgpLHRoaXMuaGVhdG1hcEZibz1udWxsKX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldCgiaGVhdG1hcC1vcGFjaXR5IikmJiJub25lIiE9PXRoaXMudmlzaWJpbGl0eX0sZX0oSHIpLGRpPXtwYWludDpuZXcgcXIoeyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiI6bmV3IE5yKEkucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiJdKSwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiXSksImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiJdKSwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciI6bmV3IE5yKEkucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtc2hhZG93LWNvbG9yIl0pLCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiXSksImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWFjY2VudC1jb2xvciJdKX0pfSxnaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsZGkpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldCgiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiIpJiYibm9uZSIhPT10aGlzLnZpc2liaWxpdHl9LGV9KEhyKSx2aT1Ycihbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxtaT14aSx5aT14aTtmdW5jdGlvbiB4aSh0LGUscil7cj1yfHwyO3ZhciBuLGksYSxvLHMsbCxjLHU9ZSYmZS5sZW5ndGgsZj11P2VbMF0qcjp0Lmxlbmd0aCxoPWJpKHQsMCxmLHIsITApLHA9W107aWYoIWgpcmV0dXJuIHA7aWYodSYmKGg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHM9W107Zm9yKGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspKG89YmkodCxlW2ldKm4saTxhLTE/ZVtpKzFdKm46dC5sZW5ndGgsbiwhMSkpPT09by5uZXh0JiYoby5zdGVpbmVyPSEwKSxzLnB1c2goTGkobykpO2ZvcihzLnNvcnQoU2kpLGk9MDtpPHMubGVuZ3RoO2krKylFaShzW2ldLHIpLHI9X2kocixyLm5leHQpO3JldHVybiByfSh0LGUsaCxyKSksdC5sZW5ndGg+ODAqcil7bj1hPXRbMF0saT1vPXRbMV07Zm9yKHZhciBkPXI7ZDxmO2QrPXIpKHM9dFtkXSk8biYmKG49cyksKGw9dFtkKzFdKTxpJiYoaT1sKSxzPmEmJihhPXMpLGw+byYmKG89bCk7Yz0wIT09KGM9TWF0aC5tYXgoYS1uLG8taSkpPzEvYzowfXJldHVybiB3aShoLHAscixuLGksYykscH1mdW5jdGlvbiBiaSh0LGUscixuLGkpe3ZhciBhLG87aWYoaT09PVZpKHQsZSxyLG4pPjApZm9yKGE9ZTthPHI7YSs9bilvPUJpKGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89QmkoYSx0W2FdLHRbYSsxXSxvKTtyZXR1cm4gbyYmRGkobyxvLm5leHQpJiYoTmkobyksbz1vLm5leHQpLG99ZnVuY3Rpb24gX2kodCxlKXtpZighdClyZXR1cm4gdDtlfHwoZT10KTt2YXIgcixuPXQ7ZG97aWYocj0hMSxuLnN0ZWluZXJ8fCFEaShuLG4ubmV4dCkmJjAhPT1JaShuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYoTmkobiksKG49ZT1uLnByZXYpPT09bi5uZXh0KWJyZWFrO3I9ITB9fXdoaWxlKHJ8fG4hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiB3aSh0LGUscixuLGksYSxvKXtpZih0KXshbyYmYSYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PUNpKGkueCxpLnksZSxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8YyYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspMCE9PXMmJigwPT09bHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksYT9hLm5leHRaPWk6dD1pLGkucHJldlo9YSxhPWk7cj1ufWEubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSl9KGkpfSh0LG4saSxhKTtmb3IodmFyIHMsbCxjPXQ7dC5wcmV2IT09dC5uZXh0OylpZihzPXQucHJldixsPXQubmV4dCxhP1RpKHQsbixpLGEpOmtpKHQpKWUucHVzaChzLmkvciksZS5wdXNoKHQuaS9yKSxlLnB1c2gobC5pL3IpLE5pKHQpLHQ9bC5uZXh0LGM9bC5uZXh0O2Vsc2UgaWYoKHQ9bCk9PT1jKXtvPzE9PT1vP3dpKHQ9QWkodCxlLHIpLGUscixuLGksYSwyKToyPT09byYmTWkodCxlLHIsbixpLGEpOndpKF9pKHQpLGUscixuLGksYSwxKTticmVha319fWZ1bmN0aW9uIGtpKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYoSWkoZSxyLG4pPj0wKXJldHVybiExO2Zvcih2YXIgaT10Lm5leHQubmV4dDtpIT09dC5wcmV2Oyl7aWYoemkoZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJklpKGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gVGkodCxlLHIsbil7dmFyIGk9dC5wcmV2LGE9dCxvPXQubmV4dDtpZihJaShpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxsPWkueTxhLnk/aS55PG8ueT9pLnk6by55OmEueTxvLnk/YS55Om8ueSxjPWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCx1PWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxmPUNpKHMsbCxlLHIsbiksaD1DaShjLHUsZSxyLG4pLHA9dC5wcmV2WixkPXQubmV4dFo7cCYmcC56Pj1mJiZkJiZkLno8PWg7KXtpZihwIT09dC5wcmV2JiZwIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmSWkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtpZihwPXAucHJldlosZCE9PXQucHJldiYmZCE9PXQubmV4dCYmemkoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJklpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafWZvcig7cCYmcC56Pj1mOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmemkoaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJklpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLnByZXZafWZvcig7ZCYmZC56PD1oOyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmemkoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJklpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIEFpKHQsZSxyKXt2YXIgbj10O2Rve3ZhciBpPW4ucHJldixhPW4ubmV4dC5uZXh0OyFEaShpLGEpJiZQaShpLG4sbi5uZXh0LGEpJiZSaShpLGEpJiZSaShhLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChhLmkvciksTmkobiksTmkobi5uZXh0KSxuPXQ9YSksbj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiBufWZ1bmN0aW9uIE1pKHQsZSxyLG4saSxhKXt2YXIgbz10O2Rve2Zvcih2YXIgcz1vLm5leHQubmV4dDtzIT09by5wcmV2Oyl7aWYoby5pIT09cy5pJiZPaShvLHMpKXt2YXIgbD1GaShvLHMpO3JldHVybiBvPV9pKG8sby5uZXh0KSxsPV9pKGwsbC5uZXh0KSx3aShvLGUscixuLGksYSksdm9pZCB3aShsLGUscixuLGksYSl9cz1zLm5leHR9bz1vLm5leHR9d2hpbGUobyE9PXQpfWZ1bmN0aW9uIFNpKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gRWkodCxlKXtpZihlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9dC54LGE9dC55LG89LTEvMDtkb3tpZihhPD1uLnkmJmE+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7dmFyIHM9bi54KyhhLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9aSYmcz5vKXtpZihvPXMscz09PWkpe2lmKGE9PT1uLnkpcmV0dXJuIG47aWYoYT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gci5wcmV2O3ZhciBsLGM9cix1PXIueCxmPXIueSxoPTEvMDtmb3Iobj1yLm5leHQ7biE9PWM7KWk+PW4ueCYmbi54Pj11JiZpIT09bi54JiZ6aShhPGY/aTpvLGEsdSxmLGE8Zj9vOmksYSxuLngsbi55KSYmKChsPU1hdGguYWJzKGEtbi55KS8oaS1uLngpKTxofHxsPT09aCYmbi54PnIueCkmJlJpKG4sdCkmJihyPW4saD1sKSxuPW4ubmV4dDtyZXR1cm4gcn0odCxlKSl7dmFyIHI9RmkoZSx0KTtfaShyLHIubmV4dCl9fWZ1bmN0aW9uIENpKHQsZSxyLG4saSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1yKSppKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZT0zMjc2NyooZS1uKSppKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9ZnVuY3Rpb24gTGkodCl7dmFyIGU9dCxyPXQ7ZG97ZS54PHIueCYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIHppKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuKGktbykqKGUtcyktKHQtbykqKGEtcyk+PTAmJih0LW8pKihuLXMpLShyLW8pKihlLXMpPj0wJiYoci1vKSooYS1zKS0oaS1vKSoobi1zKT49MH1mdW5jdGlvbiBPaSh0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiFmdW5jdGlvbih0LGUpe3ZhciByPXQ7ZG97aWYoci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmUGkocixyLm5leHQsdCxlKSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuITF9KHQsZSkmJlJpKHQsZSkmJlJpKGUsdCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPSExLGk9KHQueCtlLngpLzIsYT0odC55K2UueSkvMjtkb3tyLnk+YSE9ci5uZXh0Lnk+YSYmci5uZXh0LnkhPT1yLnkmJmk8KHIubmV4dC54LXIueCkqKGEtci55KS8oci5uZXh0Lnktci55KStyLngmJihuPSFuKSxyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuIG59KHQsZSl9ZnVuY3Rpb24gSWkodCxlLHIpe3JldHVybihlLnktdC55KSooci54LWUueCktKGUueC10LngpKihyLnktZS55KX1mdW5jdGlvbiBEaSh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiBQaSh0LGUscixuKXtyZXR1cm4hIShEaSh0LGUpJiZEaShyLG4pfHxEaSh0LG4pJiZEaShyLGUpKXx8SWkodCxlLHIpPjAhPUlpKHQsZSxuKT4wJiZJaShyLG4sdCk+MCE9SWkocixuLGUpPjB9ZnVuY3Rpb24gUmkodCxlKXtyZXR1cm4gSWkodC5wcmV2LHQsdC5uZXh0KTwwP0lpKHQsZSx0Lm5leHQpPj0wJiZJaSh0LHQucHJldixlKT49MDpJaSh0LGUsdC5wcmV2KTwwfHxJaSh0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIEZpKHQsZSl7dmFyIHI9bmV3IGppKHQuaSx0LngsdC55KSxuPW5ldyBqaShlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGEubmV4dD1uLG4ucHJldj1hLG59ZnVuY3Rpb24gQmkodCxlLHIsbil7dmFyIGk9bmV3IGppKHQsZSxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gTmkodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBqaSh0LGUscil7dGhpcy5pPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gVmkodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1lLG89ci1uO2E8cjthKz1uKWkrPSh0W29dLXRbYV0pKih0W2ErMV0rdFtvKzFdKSxvPWE7cmV0dXJuIGl9eGkuZGV2aWF0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUmJmUubGVuZ3RoLGE9aT9lWzBdKnI6dC5sZW5ndGgsbz1NYXRoLmFicyhWaSh0LDAsYSxyKSk7aWYoaSlmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDtzKyspe3ZhciBjPWVbc10qcix1PXM8bC0xP2VbcysxXSpyOnQubGVuZ3RoO28tPU1hdGguYWJzKFZpKHQsYyx1LHIpKX12YXIgZj0wO2ZvcihzPTA7czxuLmxlbmd0aDtzKz0zKXt2YXIgaD1uW3NdKnIscD1uW3MrMV0qcixkPW5bcysyXSpyO2YrPU1hdGguYWJzKCh0W2hdLXRbZF0pKih0W3ArMV0tdFtoKzFdKS0odFtoXS10W3BdKSoodFtkKzFdLXRbaCsxXSkpfXJldHVybiAwPT09byYmMD09PWY/MDpNYXRoLmFicygoZi1vKS9vKX0seGkuZmxhdHRlbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXVswXS5sZW5ndGgscj17dmVydGljZXM6W10saG9sZXM6W10sZGltZW5zaW9uczplfSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9MDthPHRbaV0ubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPGU7bysrKXIudmVydGljZXMucHVzaCh0W2ldW2FdW29dKTtpPjAmJihuKz10W2ktMV0ubGVuZ3RoLHIuaG9sZXMucHVzaChuKSl9cmV0dXJuIHJ9LG1pLmRlZmF1bHQ9eWk7dmFyIFVpPUhpLHFpPUhpO2Z1bmN0aW9uIEhpKHQsZSxyLG4saSl7IWZ1bmN0aW9uIHQoZSxyLG4saSxhKXtmb3IoO2k+bjspe2lmKGktbj42MDApe3ZhciBvPWktbisxLHM9ci1uKzEsbD1NYXRoLmxvZyhvKSxjPS41Kk1hdGguZXhwKDIqbC8zKSx1PS41Kk1hdGguc3FydChsKmMqKG8tYykvbykqKHMtby8yPDA/LTE6MSk7dChlLHIsTWF0aC5tYXgobixNYXRoLmZsb29yKHItcypjL28rdSkpLE1hdGgubWluKGksTWF0aC5mbG9vcihyKyhvLXMpKmMvbyt1KSksYSl9dmFyIGY9ZVtyXSxoPW4scD1pO2ZvcihHaShlLG4sciksYShlW2ldLGYpPjAmJkdpKGUsbixpKTtoPHA7KXtmb3IoR2koZSxoLHApLGgrKyxwLS07YShlW2hdLGYpPDA7KWgrKztmb3IoO2EoZVtwXSxmKT4wOylwLS19MD09PWEoZVtuXSxmKT9HaShlLG4scCk6R2koZSwrK3AsaSkscDw9ciYmKG49cCsxKSxyPD1wJiYoaT1wLTEpfX0odCxlLHJ8fDAsbnx8dC5sZW5ndGgtMSxpfHxZaSl9ZnVuY3Rpb24gR2kodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBZaSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBXaSh0LGUpe3ZhciByPXQubGVuZ3RoO2lmKHI8PTEpcmV0dXJuW3RdO2Zvcih2YXIgbixpLGE9W10sbz0wO288cjtvKyspe3ZhciBzPWsodFtvXSk7MCE9PXMmJih0W29dLmFyZWE9TWF0aC5hYnMocyksdm9pZCAwPT09aSYmKGk9czwwKSxpPT09czwwPyhuJiZhLnB1c2gobiksbj1bdFtvXV0pOm4ucHVzaCh0W29dKSl9aWYobiYmYS5wdXNoKG4pLGU+MSlmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylhW2xdLmxlbmd0aDw9ZXx8KFVpKGFbbF0sZSwxLGFbbF0ubGVuZ3RoLTEsWGkpLGFbbF09YVtsXS5zbGljZSgwLGUpKTtyZXR1cm4gYX1mdW5jdGlvbiBYaSh0LGUpe3JldHVybiBlLmFyZWEtdC5hcmVhfVVpLmRlZmF1bHQ9cWk7dmFyIFppPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3ICRyLHRoaXMuaW5kZXhBcnJheT1uZXcgZm4sdGhpcy5pbmRleEFycmF5Mj1uZXcgaG4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IEluKHZpLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgTW4sdGhpcy5zZWdtZW50czI9bmV3IE1ufTtaaS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aS5mZWF0dXJlLG89aS5pbmRleCxzPWkuc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgTHIodGhpcy56b29tKSxhKSl7dmFyIGw9Rm4oYSk7dGhpcy5hZGRGZWF0dXJlKGEsbCksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGEsbCxvLHMsdGhpcy5pbmRleCl9fX0sWmkucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxaaS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdmkpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMuaW5kZXhCdWZmZXIyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5MiksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSxaaS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5zZWdtZW50czIuZGVzdHJveSgpKX0sWmkucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPVdpKGUsNTAwKTtyPG4ubGVuZ3RoO3IrPTEpe2Zvcih2YXIgaT1uW3JdLGE9MCxvPTAscz1pO288cy5sZW5ndGg7bys9MSlhKz1zW29dLmxlbmd0aDtmb3IodmFyIGw9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChhLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxjPWwudmVydGV4TGVuZ3RoLHU9W10sZj1bXSxoPTAscD1pO2g8cC5sZW5ndGg7aCs9MSl7dmFyIGQ9cFtoXTtpZigwIT09ZC5sZW5ndGgpe2QhPT1pWzBdJiZmLnB1c2godS5sZW5ndGgvMik7dmFyIGc9dGhpcy5zZWdtZW50czIucHJlcGFyZVNlZ21lbnQoZC5sZW5ndGgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkyKSx2PWcudmVydGV4TGVuZ3RoO3RoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soZFswXS54LGRbMF0ueSksdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayh2K2QubGVuZ3RoLTEsdiksdS5wdXNoKGRbMF0ueCksdS5wdXNoKGRbMF0ueSk7Zm9yKHZhciBtPTE7bTxkLmxlbmd0aDttKyspdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhkW21dLngsZFttXS55KSx0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKHYrbS0xLHYrbSksdS5wdXNoKGRbbV0ueCksdS5wdXNoKGRbbV0ueSk7Zy52ZXJ0ZXhMZW5ndGgrPWQubGVuZ3RoLGcucHJpbWl0aXZlTGVuZ3RoKz1kLmxlbmd0aH19Zm9yKHZhciB5PW1pKHUsZikseD0wO3g8eS5sZW5ndGg7eCs9Myl0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soYyt5W3hdLGMreVt4KzFdLGMreVt4KzJdKTtsLnZlcnRleExlbmd0aCs9YSxsLnByaW1pdGl2ZUxlbmd0aCs9eS5sZW5ndGgvM310aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQpfSxwcigiRmlsbEJ1Y2tldCIsWmkse29taXQ6WyJsYXllcnMiXX0pO3ZhciAkaT17cGFpbnQ6bmV3IHFyKHsiZmlsbC1hbnRpYWxpYXMiOm5ldyBOcihJLnBhaW50X2ZpbGxbImZpbGwtYW50aWFsaWFzIl0pLCJmaWxsLW9wYWNpdHkiOm5ldyBqcihJLnBhaW50X2ZpbGxbImZpbGwtb3BhY2l0eSJdKSwiZmlsbC1jb2xvciI6bmV3IGpyKEkucGFpbnRfZmlsbFsiZmlsbC1jb2xvciJdKSwiZmlsbC1vdXRsaW5lLWNvbG9yIjpuZXcganIoSS5wYWludF9maWxsWyJmaWxsLW91dGxpbmUtY29sb3IiXSksImZpbGwtdHJhbnNsYXRlIjpuZXcgTnIoSS5wYWludF9maWxsWyJmaWxsLXRyYW5zbGF0ZSJdKSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjpuZXcgTnIoSS5wYWludF9maWxsWyJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiXSksImZpbGwtcGF0dGVybiI6bmV3IFZyKEkucGFpbnRfZmlsbFsiZmlsbC1wYXR0ZXJuIl0pfSl9LEppPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSwkaSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50LnBvc3NpYmx5RXZhbHVhdGUodCk7dmFyIGU9dGhpcy5wYWludC5fdmFsdWVzWyJmaWxsLW91dGxpbmUtY29sb3IiXTsiY29uc3RhbnQiPT09ZS52YWx1ZS5raW5kJiZ2b2lkIDA9PT1lLnZhbHVlLnZhbHVlJiYodGhpcy5wYWludC5fdmFsdWVzWyJmaWxsLW91dGxpbmUtY29sb3IiXT10aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtY29sb3IiXSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFppKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBKbih0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBWbihLbih0LHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiKSxpLmFuZ2xlLGEpLHIpfSxlfShIciksS2k9WHIoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfbm9ybWFsX2VkIixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxRaT1NYXRoLnBvdygyLDEzKTtmdW5jdGlvbiB0YSh0LGUscixuLGksYSxvLHMpe3QuZW1wbGFjZUJhY2soZSxyLDIqTWF0aC5mbG9vcihuKlFpKStvLGkqUWkqMixhKlFpKjIsTWF0aC5yb3VuZChzKSl9dmFyIGVhPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IEtyLHRoaXMuaW5kZXhBcnJheT1uZXcgZm4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IEluKEtpLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgTW59O2Z1bmN0aW9uIHJhKHQsZSl7cmV0dXJuIHQueD09PWUueCYmKHQueDwwfHx0Lng+UG4pfHx0Lnk9PT1lLnkmJih0Lnk8MHx8dC55PlBuKX1mdW5jdGlvbiBuYSh0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC54PDB9KXx8dC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC54PlBufSl8fHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueTwwfSl8fHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueT5Qbn0pfWVhLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1GbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSxlYS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LGVhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxLaSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSxlYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LGVhLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1XaShlLDUwMCk7cjxuLmxlbmd0aDtyKz0xKXtmb3IodmFyIGk9bltyXSxhPTAsbz0wLHM9aTtvPHMubGVuZ3RoO28rPTEpYSs9c1tvXS5sZW5ndGg7Zm9yKHZhciBsPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksYz0wLHU9aTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107aWYoMCE9PWYubGVuZ3RoJiYhbmEoZikpZm9yKHZhciBoPTAscD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgZD1mW3BdO2lmKHA+PTEpe3ZhciBnPWZbcC0xXTtpZighcmEoZCxnKSl7bC52ZXJ0ZXhMZW5ndGgrND5Nbi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGw9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSk7dmFyIHY9ZC5zdWIoZykuX3BlcnAoKS5fdW5pdCgpLG09Zy5kaXN0KGQpO2grbT4zMjc2OCYmKGg9MCksdGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxkLngsZC55LHYueCx2LnksMCwwLGgpLHRhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksZC54LGQueSx2Lngsdi55LDAsMSxoKSxoKz1tLHRhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksZy54LGcueSx2Lngsdi55LDAsMCxoKSx0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LGcueCxnLnksdi54LHYueSwwLDEsaCk7dmFyIHk9bC52ZXJ0ZXhMZW5ndGg7dGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHkseSsxLHkrMiksdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHkrMSx5KzIseSszKSxsLnZlcnRleExlbmd0aCs9NCxsLnByaW1pdGl2ZUxlbmd0aCs9Mn19fX1sLnZlcnRleExlbmd0aCthPk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiYobD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KGEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpKTtmb3IodmFyIHg9W10sYj1bXSxfPWwudmVydGV4TGVuZ3RoLHc9MCxrPWk7dzxrLmxlbmd0aDt3Kz0xKXt2YXIgVD1rW3ddO2lmKDAhPT1ULmxlbmd0aCl7VCE9PWlbMF0mJmIucHVzaCh4Lmxlbmd0aC8yKTtmb3IodmFyIEE9MDtBPFQubGVuZ3RoO0ErKyl7dmFyIE09VFtBXTt0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LE0ueCxNLnksMCwwLDEsMSwwKSx4LnB1c2goTS54KSx4LnB1c2goTS55KX19fWZvcih2YXIgUz1taSh4LGIpLEU9MDtFPFMubGVuZ3RoO0UrPTMpdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKF8rU1tFXSxfK1NbRSsxXSxfK1NbRSsyXSk7bC5wcmltaXRpdmVMZW5ndGgrPVMubGVuZ3RoLzMsbC52ZXJ0ZXhMZW5ndGgrPWF9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0KX0scHIoIkZpbGxFeHRydXNpb25CdWNrZXQiLGVhLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgaWE9e3BhaW50Om5ldyBxcih7ImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiOm5ldyBOcihJWyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Il0pLCJmaWxsLWV4dHJ1c2lvbi1jb2xvciI6bmV3IGpyKElbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWNvbG9yIl0pLCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiOm5ldyBOcihJWyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiXSksImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyBOcihJWyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIl0pLCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjpuZXcgVnIoSVsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tcGF0dGVybiJdKSwiZmlsbC1leHRydXNpb24taGVpZ2h0IjpuZXcganIoSVsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24taGVpZ2h0Il0pLCJmaWxsLWV4dHJ1c2lvbi1iYXNlIjpuZXcganIoSVsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tYmFzZSJdKX0pfSxhYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsaWEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlYSh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gSm4odGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIFZuKEtuKHQsdGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIiksaS5hbmdsZSxhKSxyKX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiKSYmIm5vbmUiIT09dGhpcy52aXNpYmlsaXR5fSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLnZpZXdwb3J0RnJhbWUmJih0aGlzLnZpZXdwb3J0RnJhbWUuZGVzdHJveSgpLHRoaXMudmlld3BvcnRGcmFtZT1udWxsKX0sZX0oSHIpLG9hPVhyKFt7bmFtZToiYV9wb3Nfbm9ybWFsIixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDgifV0sNCkubWVtYmVycyxzYT1sYTtmdW5jdGlvbiBsYSh0LGUscixuLGkpe3RoaXMucHJvcGVydGllcz17fSx0aGlzLmV4dGVudD1yLHRoaXMudHlwZT0wLHRoaXMuX3BiZj10LHRoaXMuX2dlb21ldHJ5PS0xLHRoaXMuX2tleXM9bix0aGlzLl92YWx1ZXM9aSx0LnJlYWRGaWVsZHMoY2EsdGhpcyxlKX1mdW5jdGlvbiBjYSh0LGUscil7MT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PXQ/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPWUuX2tleXNbdC5yZWFkVmFyaW50KCldLGk9ZS5fdmFsdWVzW3QucmVhZFZhcmludCgpXTtlLnByb3BlcnRpZXNbbl09aX19KHIsZSk6Mz09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09dCYmKGUuX2dlb21ldHJ5PXIucG9zKX1mdW5jdGlvbiB1YSh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxuKz0oKHI9dFtvXSkueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn1sYS50eXBlcz1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl0sbGEucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGUscj10LnJlYWRWYXJpbnQoKSt0LnBvcyxuPTEsaT0wLGE9MCxvPTAscz1bXTt0LnBvczxyOyl7aWYoaTw9MCl7dmFyIGM9dC5yZWFkVmFyaW50KCk7bj03JmMsaT1jPj4zfWlmKGktLSwxPT09bnx8Mj09PW4pYSs9dC5yZWFkU1ZhcmludCgpLG8rPXQucmVhZFNWYXJpbnQoKSwxPT09biYmKGUmJnMucHVzaChlKSxlPVtdKSxlLnB1c2gobmV3IGwoYSxvKSk7ZWxzZXtpZig3IT09bil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY29tbWFuZCAiK24pO2UmJmUucHVzaChlWzBdLmNsb25lKCkpfX1yZXR1cm4gZSYmcy5wdXNoKGUpLHN9LGxhLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGk9MCxhPTAsbz0xLzAscz0tMS8wLGw9MS8wLGM9LTEvMDt0LnBvczxlOyl7aWYobjw9MCl7dmFyIHU9dC5yZWFkVmFyaW50KCk7cj03JnUsbj11Pj4zfWlmKG4tLSwxPT09cnx8Mj09PXIpKGkrPXQucmVhZFNWYXJpbnQoKSk8byYmKG89aSksaT5zJiYocz1pKSwoYSs9dC5yZWFkU1ZhcmludCgpKTxsJiYobD1hKSxhPmMmJihjPWEpO2Vsc2UgaWYoNyE9PXIpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIityKX1yZXR1cm5bbyxsLHMsY119LGxhLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT10aGlzLmV4dGVudCpNYXRoLnBvdygyLHIpLG89dGhpcy5leHRlbnQqdCxzPXRoaXMuZXh0ZW50KmUsbD10aGlzLmxvYWRHZW9tZXRyeSgpLGM9bGEudHlwZXNbdGhpcy50eXBlXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdLG49MTgwLTM2MCooci55K3MpL2E7dFtlXT1bMzYwKihyLngrbykvYS0xODAsMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKG4qTWF0aC5QSS8xODApKS05MF19fXN3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgMTp2YXIgZj1bXTtmb3Iobj0wO248bC5sZW5ndGg7bisrKWZbbl09bFtuXVswXTt1KGw9Zik7YnJlYWs7Y2FzZSAyOmZvcihuPTA7bjxsLmxlbmd0aDtuKyspdShsW25dKTticmVhaztjYXNlIDM6Zm9yKGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9MSlyZXR1cm5bdF07Zm9yKHZhciByLG4saT1bXSxhPTA7YTxlO2ErKyl7dmFyIG89dWEodFthXSk7MCE9PW8mJih2b2lkIDA9PT1uJiYobj1vPDApLG49PT1vPDA/KHImJmkucHVzaChyKSxyPVt0W2FdXSk6ci5wdXNoKHRbYV0pKX1yZXR1cm4gciYmaS5wdXNoKHIpLGl9KGwpLG49MDtuPGwubGVuZ3RoO24rKylmb3IoaT0wO2k8bFtuXS5sZW5ndGg7aSsrKXUobFtuXVtpXSl9MT09PWwubGVuZ3RoP2w9bFswXTpjPSJNdWx0aSIrYzt2YXIgaD17dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6Yyxjb29yZGluYXRlczpsfSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuImlkImluIHRoaXMmJihoLmlkPXRoaXMuaWQpLGh9O3ZhciBmYT1oYTtmdW5jdGlvbiBoYSh0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT1udWxsLHRoaXMuZXh0ZW50PTQwOTYsdGhpcy5sZW5ndGg9MCx0aGlzLl9wYmY9dCx0aGlzLl9rZXlzPVtdLHRoaXMuX3ZhbHVlcz1bXSx0aGlzLl9mZWF0dXJlcz1bXSx0LnJlYWRGaWVsZHMocGEsdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZnVuY3Rpb24gcGEodCxlLHIpezE1PT09dD9lLnZlcnNpb249ci5yZWFkVmFyaW50KCk6MT09PXQ/ZS5uYW1lPXIucmVhZFN0cmluZygpOjU9PT10P2UuZXh0ZW50PXIucmVhZFZhcmludCgpOjI9PT10P2UuX2ZlYXR1cmVzLnB1c2goci5wb3MpOjM9PT10P2UuX2tleXMucHVzaChyLnJlYWRTdHJpbmcoKSk6ND09PXQmJmUuX3ZhbHVlcy5wdXNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPXQucmVhZFZhcmludCgpPj4zO2U9MT09PW4/dC5yZWFkU3RyaW5nKCk6Mj09PW4/dC5yZWFkRmxvYXQoKTozPT09bj90LnJlYWREb3VibGUoKTo0PT09bj90LnJlYWRWYXJpbnQ2NCgpOjU9PT1uP3QucmVhZFZhcmludCgpOjY9PT1uP3QucmVhZFNWYXJpbnQoKTo3PT09bj90LnJlYWRCb29sZWFuKCk6bnVsbH1yZXR1cm4gZX0ocikpfWZ1bmN0aW9uIGRhKHQsZSxyKXtpZigzPT09dCl7dmFyIG49bmV3IGZhKHIsci5yZWFkVmFyaW50KCkrci5wb3MpO24ubGVuZ3RoJiYoZVtuLm5hbWVdPW4pfX1oYS5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtpZih0PDB8fHQ+PXRoaXMuX2ZlYXR1cmVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcyIpO3RoaXMuX3BiZi5wb3M9dGhpcy5fZmVhdHVyZXNbdF07dmFyIGU9dGhpcy5fcGJmLnJlYWRWYXJpbnQoKSt0aGlzLl9wYmYucG9zO3JldHVybiBuZXcgc2EodGhpcy5fcGJmLGUsdGhpcy5leHRlbnQsdGhpcy5fa2V5cyx0aGlzLl92YWx1ZXMpfTt2YXIgZ2E9e1ZlY3RvclRpbGU6ZnVuY3Rpb24odCxlKXt0aGlzLmxheWVycz10LnJlYWRGaWVsZHMoZGEse30sZSl9LFZlY3RvclRpbGVGZWF0dXJlOnNhLFZlY3RvclRpbGVMYXllcjpmYX0sdmE9Z2EuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXMsbWE9NjMseWE9TWF0aC5jb3MoTWF0aC5QSS8xODAqMzcuNSkseGE9LjUsYmE9TWF0aC5wb3coMiwxNCkveGE7ZnVuY3Rpb24gX2EodCxlLHIsbixpLGEsbyl7dC5lbXBsYWNlQmFjayhlLngsZS55LG4/MTowLGk/MTotMSxNYXRoLnJvdW5kKG1hKnIueCkrMTI4LE1hdGgucm91bmQobWEqci55KSsxMjgsMSsoMD09PWE/MDphPDA/LTE6MSl8KG8qeGEmNjMpPDwyLG8qeGE+PjYpfXZhciB3YT1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyBRcix0aGlzLmluZGV4QXJyYXk9bmV3IGZuLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBJbihvYSx0LmxheWVycyx0Lnpvb20pLHRoaXMuc2VnbWVudHM9bmV3IE1ufTtmdW5jdGlvbiBrYSh0LGUpe3JldHVybih0L2UudGlsZVRvdGFsKihlLmVuZC1lLnN0YXJ0KStlLnN0YXJ0KSooYmEtMSl9d2EucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkuZmVhdHVyZSxvPWkuaW5kZXgscz1pLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IExyKHRoaXMuem9vbSksYSkpe3ZhciBsPUZuKGEpO3RoaXMuYWRkRmVhdHVyZShhLGwpLGUuZmVhdHVyZUluZGV4Lmluc2VydChhLGwsbyxzLHRoaXMuaW5kZXgpfX19LHdhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sd2EucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LG9hKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LHdhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sd2EucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5sYXllcnNbMF0ubGF5b3V0LG49ci5nZXQoImxpbmUtam9pbiIpLmV2YWx1YXRlKHQpLGk9ci5nZXQoImxpbmUtY2FwIiksYT1yLmdldCgibGluZS1taXRlci1saW1pdCIpLG89ci5nZXQoImxpbmUtcm91bmQtbGltaXQiKSxzPTAsbD1lO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTt0aGlzLmFkZExpbmUoYyx0LG4saSxhLG8pfX0sd2EucHJvdG90eXBlLmFkZExpbmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW51bGw7ZS5wcm9wZXJ0aWVzJiZlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoIm1hcGJveF9jbGlwX3N0YXJ0IikmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgibWFwYm94X2NsaXBfZW5kIikmJihvPXtzdGFydDplLnByb3BlcnRpZXMubWFwYm94X2NsaXBfc3RhcnQsZW5kOmUucHJvcGVydGllcy5tYXBib3hfY2xpcF9lbmQsdGlsZVRvdGFsOnZvaWQgMH0pO2Zvcih2YXIgcz0iUG9seWdvbiI9PT12YVtlLnR5cGVdLGw9dC5sZW5ndGg7bD49MiYmdFtsLTFdLmVxdWFscyh0W2wtMl0pOylsLS07Zm9yKHZhciBjPTA7YzxsLTEmJnRbY10uZXF1YWxzKHRbYysxXSk7KWMrKztpZighKGw8KHM/MzoyKSkpe28mJihvLnRpbGVUb3RhbD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0wLG89YztvPHItMTtvKyspbj10W29dLGk9dFtvKzFdLGErPW4uZGlzdChpKTtyZXR1cm4gYX0odCwwLGwpKSwiYmV2ZWwiPT09ciYmKGk9MS4wNSk7dmFyIHU9UG4vKDUxMip0aGlzLm92ZXJzY2FsaW5nKSoxNSxmPXRbY10saD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDEwKmwsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpO3RoaXMuZGlzdGFuY2U9MDt2YXIgcCxkLGcsdj1uLG09cz8iYnV0dCI6bix5PSEwLHg9dm9pZCAwLGI9dm9pZCAwLF89dm9pZCAwLHc9dm9pZCAwO3RoaXMuZTE9dGhpcy5lMj10aGlzLmUzPS0xLHMmJihwPXRbbC0yXSx3PWYuc3ViKHApLl91bml0KCkuX3BlcnAoKSk7Zm9yKHZhciBrPWM7azxsO2srKylpZighKGI9cyYmaz09PWwtMT90W2MrMV06dFtrKzFdKXx8IXRba10uZXF1YWxzKGIpKXt3JiYoXz13KSxwJiYoeD1wKSxwPXRba10sdz1iP2Iuc3ViKHApLl91bml0KCkuX3BlcnAoKTpfO3ZhciBUPShfPV98fHcpLmFkZCh3KTswPT09VC54JiYwPT09VC55fHxULl91bml0KCk7dmFyIEE9VC54KncueCtULnkqdy55LE09MCE9PUE/MS9BOjEvMCxTPUE8eWEmJngmJmI7aWYoUyYmaz5jKXt2YXIgRT1wLmRpc3QoeCk7aWYoRT4yKnUpe3ZhciBDPXAuc3ViKHAuc3ViKHgpLl9tdWx0KHUvRSkuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPUMuZGlzdCh4KSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoQyx0aGlzLmRpc3RhbmNlLF8ubXVsdCgxKSwwLDAsITEsaCxvKSx4PUN9fXZhciBMPXgmJmIsej1MP3I6Yj92Om07aWYoTCYmInJvdW5kIj09PXomJihNPGE/ej0ibWl0ZXIiOk08PTImJih6PSJmYWtlcm91bmQiKSksIm1pdGVyIj09PXomJk0+aSYmKHo9ImJldmVsIiksImJldmVsIj09PXomJihNPjImJih6PSJmbGlwYmV2ZWwiKSxNPGkmJih6PSJtaXRlciIpKSx4JiYodGhpcy5kaXN0YW5jZSs9cC5kaXN0KHgpKSwibWl0ZXIiPT09eilULl9tdWx0KE0pLHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsVCwwLDAsITEsaCxvKTtlbHNlIGlmKCJmbGlwYmV2ZWwiPT09eil7aWYoTT4xMDApVD13LmNsb25lKCkubXVsdCgtMSk7ZWxzZXt2YXIgTz1fLngqdy55LV8ueSp3Lng+MD8tMToxLEk9TSpfLmFkZCh3KS5tYWcoKS9fLnN1Yih3KS5tYWcoKTtULl9wZXJwKCkuX211bHQoSSpPKX10aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLFQsMCwwLCExLGgsbyksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxULm11bHQoLTEpLDAsMCwhMSxoLG8pfWVsc2UgaWYoImJldmVsIj09PXp8fCJmYWtlcm91bmQiPT09eil7dmFyIEQ9Xy54KncueS1fLnkqdy54PjAsUD0tTWF0aC5zcXJ0KE0qTS0xKTtpZihEPyhnPTAsZD1QKTooZD0wLGc9UCkseXx8dGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLGQsZywhMSxoLG8pLCJmYWtlcm91bmQiPT09eil7Zm9yKHZhciBSPU1hdGguZmxvb3IoOCooLjUtKEEtLjUpKSksRj12b2lkIDAsQj0wO0I8UjtCKyspRj13Lm11bHQoKEIrMSkvKFIrMSkpLl9hZGQoXykuX3VuaXQoKSx0aGlzLmFkZFBpZVNsaWNlVmVydGV4KHAsdGhpcy5kaXN0YW5jZSxGLEQsaCxvKTt0aGlzLmFkZFBpZVNsaWNlVmVydGV4KHAsdGhpcy5kaXN0YW5jZSxULEQsaCxvKTtmb3IodmFyIE49Ui0xO04+PTA7Ti0tKUY9Xy5tdWx0KChOKzEpLyhSKzEpKS5fYWRkKHcpLl91bml0KCksdGhpcy5hZGRQaWVTbGljZVZlcnRleChwLHRoaXMuZGlzdGFuY2UsRixELGgsbyl9YiYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSx3LC1kLC1nLCExLGgsbyl9ZWxzZSJidXR0Ij09PXo/KHl8fHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXywwLDAsITEsaCxvKSxiJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsMCwwLCExLGgsbykpOiJzcXVhcmUiPT09ej8oeXx8KHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXywxLDEsITEsaCxvKSx0aGlzLmUxPXRoaXMuZTI9LTEpLGImJnRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywtMSwtMSwhMSxoLG8pKToicm91bmQiPT09eiYmKHl8fCh0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLF8sMCwwLCExLGgsbyksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDEsMSwhMCxoLG8pLHRoaXMuZTE9dGhpcy5lMj0tMSksYiYmKHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywtMSwtMSwhMCxoLG8pLHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywwLDAsITEsaCxvKSkpO2lmKFMmJms8bC0xKXt2YXIgaj1wLmRpc3QoYik7aWYoaj4yKnUpe3ZhciBWPXAuYWRkKGIuc3ViKHApLl9tdWx0KHUvaikuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPVYuZGlzdChwKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoVix0aGlzLmRpc3RhbmNlLHcubXVsdCgxKSwwLDAsITEsaCxvKSxwPVZ9fXk9ITF9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxlKX19LHdhLnByb3RvdHlwZS5hZGRDdXJyZW50VmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsYz10aGlzLmxheW91dFZlcnRleEFycmF5LHU9dGhpcy5pbmRleEFycmF5O3MmJihlPWthKGUscykpLGw9ci5jbG9uZSgpLG4mJmwuX3N1YihyLnBlcnAoKS5fbXVsdChuKSksX2EoYyx0LGwsYSwhMSxuLGUpLHRoaXMuZTM9by52ZXJ0ZXhMZW5ndGgrKyx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiYodS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksby5wcmltaXRpdmVMZW5ndGgrKyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxsPXIubXVsdCgtMSksaSYmbC5fc3ViKHIucGVycCgpLl9tdWx0KGkpKSxfYShjLHQsbCxhLCEwLC1pLGUpLHRoaXMuZTM9by52ZXJ0ZXhMZW5ndGgrKyx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiYodS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksby5wcmltaXRpdmVMZW5ndGgrKyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxlPmJhLzImJiFzJiYodGhpcy5kaXN0YW5jZT0wLHRoaXMuYWRkQ3VycmVudFZlcnRleCh0LHRoaXMuZGlzdGFuY2UscixuLGksYSxvKSl9LHdhLnByb3RvdHlwZS5hZGRQaWVTbGljZVZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7cj1yLm11bHQobj8tMToxKTt2YXIgbz10aGlzLmxheW91dFZlcnRleEFycmF5LHM9dGhpcy5pbmRleEFycmF5O2EmJihlPWthKGUsYSkpLF9hKG8sdCxyLCExLG4sMCxlKSx0aGlzLmUzPWkudmVydGV4TGVuZ3RoKyssdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHMuZW1wbGFjZUJhY2sodGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMpLGkucHJpbWl0aXZlTGVuZ3RoKyspLG4/dGhpcy5lMj10aGlzLmUzOnRoaXMuZTE9dGhpcy5lM30scHIoIkxpbmVCdWNrZXQiLHdhLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgVGE9bmV3IHFyKHsibGluZS1jYXAiOm5ldyBOcihJLmxheW91dF9saW5lWyJsaW5lLWNhcCJdKSwibGluZS1qb2luIjpuZXcganIoSS5sYXlvdXRfbGluZVsibGluZS1qb2luIl0pLCJsaW5lLW1pdGVyLWxpbWl0IjpuZXcgTnIoSS5sYXlvdXRfbGluZVsibGluZS1taXRlci1saW1pdCJdKSwibGluZS1yb3VuZC1saW1pdCI6bmV3IE5yKEkubGF5b3V0X2xpbmVbImxpbmUtcm91bmQtbGltaXQiXSl9KSxBYT17cGFpbnQ6bmV3IHFyKHsibGluZS1vcGFjaXR5IjpuZXcganIoSS5wYWludF9saW5lWyJsaW5lLW9wYWNpdHkiXSksImxpbmUtY29sb3IiOm5ldyBqcihJLnBhaW50X2xpbmVbImxpbmUtY29sb3IiXSksImxpbmUtdHJhbnNsYXRlIjpuZXcgTnIoSS5wYWludF9saW5lWyJsaW5lLXRyYW5zbGF0ZSJdKSwibGluZS10cmFuc2xhdGUtYW5jaG9yIjpuZXcgTnIoSS5wYWludF9saW5lWyJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiXSksImxpbmUtd2lkdGgiOm5ldyBqcihJLnBhaW50X2xpbmVbImxpbmUtd2lkdGgiXSksImxpbmUtZ2FwLXdpZHRoIjpuZXcganIoSS5wYWludF9saW5lWyJsaW5lLWdhcC13aWR0aCJdKSwibGluZS1vZmZzZXQiOm5ldyBqcihJLnBhaW50X2xpbmVbImxpbmUtb2Zmc2V0Il0pLCJsaW5lLWJsdXIiOm5ldyBqcihJLnBhaW50X2xpbmVbImxpbmUtYmx1ciJdKSwibGluZS1kYXNoYXJyYXkiOm5ldyBWcihJLnBhaW50X2xpbmVbImxpbmUtZGFzaGFycmF5Il0pLCJsaW5lLXBhdHRlcm4iOm5ldyBWcihJLnBhaW50X2xpbmVbImxpbmUtcGF0dGVybiJdKSwibGluZS1ncmFkaWVudCI6bmV3IFVyKEkucGFpbnRfbGluZVsibGluZS1ncmFkaWVudCJdKX0pLGxheW91dDpUYX0sTWE9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiByPW5ldyBMcihNYXRoLmZsb29yKHIuem9vbSkse25vdzpyLm5vdyxmYWRlRHVyYXRpb246ci5mYWRlRHVyYXRpb24sem9vbUhpc3Rvcnk6ci56b29tSGlzdG9yeSx0cmFuc2l0aW9uOnIudHJhbnNpdGlvbn0pLHQucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGUuY2FsbCh0aGlzLGUscil9LGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gcj1wKHt9LHIse3pvb206TWF0aC5mbG9vcihyLnpvb20pfSksdC5wcm90b3R5cGUuZXZhbHVhdGUuY2FsbCh0aGlzLGUscixuKX0sZX0oanIpKShBYS5wYWludC5wcm9wZXJ0aWVzWyJsaW5lLXdpZHRoIl0uc3BlY2lmaWNhdGlvbik7TWEudXNlSW50ZWdlclpvb209ITA7dmFyIFNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxBYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4pe3QucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHkuY2FsbCh0aGlzLGUscixuKSwibGluZS1ncmFkaWVudCI9PT1lJiZ0aGlzLl91cGRhdGVHcmFkaWVudCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlR3JhZGllbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbImxpbmUtZ3JhZGllbnQiXS52YWx1ZS5leHByZXNzaW9uO3RoaXMuZ3JhZGllbnQ9aGkodCwibGluZVByb2dyZXNzIiksdGhpcy5ncmFkaWVudFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUpLHRoaXMucGFpbnQuX3ZhbHVlc1sibGluZS1mbG9vcndpZHRoIl09TWEucG9zc2libHlFdmFsdWF0ZSh0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuX3ZhbHVlc1sibGluZS13aWR0aCJdLnZhbHVlLGUpfSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3YSh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPUVhKCRuKCJsaW5lLXdpZHRoIix0aGlzLGUpLCRuKCJsaW5lLWdhcC13aWR0aCIsdGhpcyxlKSksbj0kbigibGluZS1vZmZzZXQiLHRoaXMsZSk7cmV0dXJuIHIvMitNYXRoLmFicyhuKStKbih0aGlzLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPUtuKHQsdGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlLWFuY2hvciIpLGkuYW5nbGUsYSkscz1hLzIqRWEodGhpcy5wYWludC5nZXQoImxpbmUtd2lkdGgiKS5ldmFsdWF0ZShlKSx0aGlzLnBhaW50LmdldCgibGluZS1nYXAtd2lkdGgiKS5ldmFsdWF0ZShlKSksYz10aGlzLnBhaW50LmdldCgibGluZS1vZmZzZXQiKS5ldmFsdWF0ZShlKTtyZXR1cm4gYyYmKHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1uZXcgbCgwLDApLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPXRbaV0sbz1bXSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBjPWFbcy0xXSx1PWFbc10sZj1hW3MrMV0saD0wPT09cz9uOnUuc3ViKGMpLl91bml0KCkuX3BlcnAoKSxwPXM9PT1hLmxlbmd0aC0xP246Zi5zdWIodSkuX3VuaXQoKS5fcGVycCgpLGQ9aC5fYWRkKHApLl91bml0KCksZz1kLngqcC54K2QueSpwLnk7ZC5fbXVsdCgxL2cpLG8ucHVzaChkLl9tdWx0KGUpLl9hZGQodSkpfXIucHVzaChvKX1yZXR1cm4gcn0ocixjKmEpKSxVbihvLHIscyl9LGV9KEhyKTtmdW5jdGlvbiBFYSh0LGUpe3JldHVybiBlPjA/ZSsyKnQ6dH12YXIgQ2E9WHIoW3tuYW1lOiJhX3Bvc19vZmZzZXQiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50MTYifV0pLExhPVhyKFt7bmFtZToiYV9wcm9qZWN0ZWRfcG9zIixjb21wb25lbnRzOjMsdHlwZToiRmxvYXQzMiJ9XSw0KSx6YT0oWHIoW3tuYW1lOiJhX2ZhZGVfb3BhY2l0eSIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQzMiJ9XSw0KSxYcihbe25hbWU6ImFfcGxhY2VkIixjb21wb25lbnRzOjIsdHlwZToiVWludDgifV0sNCkpLE9hPShYcihbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieDEifSx7dHlwZToiSW50MTYiLG5hbWU6InkxIn0se3R5cGU6IkludDE2IixuYW1lOiJ4MiJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieTIifSx7dHlwZToiVWludDMyIixuYW1lOiJmZWF0dXJlSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJzb3VyY2VMYXllckluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiYnVja2V0SW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6InJhZGl1cyJ9LHt0eXBlOiJJbnQxNiIsbmFtZToic2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yIn1dKSxYcihbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9hbmNob3JfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9leHRydWRlIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkpLElhPVhyKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2FuY2hvcl9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2V4dHJ1ZGUiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KTtmdW5jdGlvbiBEYSh0LGUscil7dmFyIG49ZS5sYXlvdXQuZ2V0KCJ0ZXh0LXRyYW5zZm9ybSIpLmV2YWx1YXRlKHIpO3JldHVybiJ1cHBlcmNhc2UiPT09bj90PXQudG9Mb2NhbGVVcHBlckNhc2UoKToibG93ZXJjYXNlIj09PW4mJih0PXQudG9Mb2NhbGVMb3dlckNhc2UoKSksQ3IuYXBwbHlBcmFiaWNTaGFwaW5nJiYodD1Dci5hcHBseUFyYWJpY1NoYXBpbmcodCkpLHR9WHIoW3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWSJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImdseXBoU3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Im51bUdseXBocyJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6InZlcnRleFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDMyIixuYW1lOiJsaW5lU3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImxpbmVMZW5ndGgifSx7dHlwZToiVWludDE2IixuYW1lOiJzZWdtZW50In0se3R5cGU6IlVpbnQxNiIsbmFtZToibG93ZXJTaXplIn0se3R5cGU6IlVpbnQxNiIsbmFtZToidXBwZXJTaXplIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImxpbmVPZmZzZXRYIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImxpbmVPZmZzZXRZIn0se3R5cGU6IlVpbnQ4IixuYW1lOiJ3cml0aW5nTW9kZSJ9LHt0eXBlOiJVaW50OCIsbmFtZToiaGlkZGVuIn1dKSxYcihbe3R5cGU6IkZsb2F0MzIiLG5hbWU6Im9mZnNldFgifV0pLFhyKFt7dHlwZToiSW50MTYiLG5hbWU6IngifSx7dHlwZToiSW50MTYiLG5hbWU6InkifSx7dHlwZToiSW50MTYiLG5hbWU6InRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yIn1dKTt2YXIgUGE9eyIhIjoiXHVmZTE1IiwiIyI6Ilx1ZmYwMyIsJDoiXHVmZjA0IiwiJSI6Ilx1ZmYwNSIsIiYiOiJcdWZmMDYiLCIoIjoiXHVmZTM1IiwiKSI6Ilx1ZmUzNiIsIioiOiJcdWZmMGEiLCIrIjoiXHVmZjBiIiwiLCI6Ilx1ZmUxMCIsIi0iOiJcdWZlMzIiLCIuIjoiXHUzMGZiIiwiLyI6Ilx1ZmYwZiIsIjoiOiJcdWZlMTMiLCI7IjoiXHVmZTE0IiwiPCI6Ilx1ZmUzZiIsIj0iOiJcdWZmMWQiLCI+IjoiXHVmZTQwIiwiPyI6Ilx1ZmUxNiIsIkAiOiJcdWZmMjAiLCJbIjoiXHVmZTQ3IiwiXFwiOiJcdWZmM2MiLCJdIjoiXHVmZTQ4IiwiXiI6Ilx1ZmYzZSIsXzoiXHVmZTMzIiwiYCI6Ilx1ZmY0MCIsInsiOiJcdWZlMzciLCJ8IjoiXHUyMDE1IiwifSI6Ilx1ZmUzOCIsIn4iOiJcdWZmNWUiLCJceGEyIjoiXHVmZmUwIiwiXHhhMyI6Ilx1ZmZlMSIsIlx4YTUiOiJcdWZmZTUiLCJceGE2IjoiXHVmZmU0IiwiXHhhYyI6Ilx1ZmZlMiIsIlx4YWYiOiJcdWZmZTMiLCJcdTIwMTMiOiJcdWZlMzIiLCJcdTIwMTQiOiJcdWZlMzEiLCJcdTIwMTgiOiJcdWZlNDMiLCJcdTIwMTkiOiJcdWZlNDQiLCJcdTIwMWMiOiJcdWZlNDEiLCJcdTIwMWQiOiJcdWZlNDIiLCJcdTIwMjYiOiJcdWZlMTkiLCJcdTIwMjciOiJcdTMwZmIiLCJcdTIwYTkiOiJcdWZmZTYiLCJcdTMwMDEiOiJcdWZlMTEiLCJcdTMwMDIiOiJcdWZlMTIiLCJcdTMwMDgiOiJcdWZlM2YiLCJcdTMwMDkiOiJcdWZlNDAiLCJcdTMwMGEiOiJcdWZlM2QiLCJcdTMwMGIiOiJcdWZlM2UiLCJcdTMwMGMiOiJcdWZlNDEiLCJcdTMwMGQiOiJcdWZlNDIiLCJcdTMwMGUiOiJcdWZlNDMiLCJcdTMwMGYiOiJcdWZlNDQiLCJcdTMwMTAiOiJcdWZlM2IiLCJcdTMwMTEiOiJcdWZlM2MiLCJcdTMwMTQiOiJcdWZlMzkiLCJcdTMwMTUiOiJcdWZlM2EiLCJcdTMwMTYiOiJcdWZlMTciLCJcdTMwMTciOiJcdWZlMTgiLCJcdWZmMDEiOiJcdWZlMTUiLCJcdWZmMDgiOiJcdWZlMzUiLCJcdWZmMDkiOiJcdWZlMzYiLCJcdWZmMGMiOiJcdWZlMTAiLCJcdWZmMGQiOiJcdWZlMzIiLCJcdWZmMGUiOiJcdTMwZmIiLCJcdWZmMWEiOiJcdWZlMTMiLCJcdWZmMWIiOiJcdWZlMTQiLCJcdWZmMWMiOiJcdWZlM2YiLCJcdWZmMWUiOiJcdWZlNDAiLCJcdWZmMWYiOiJcdWZlMTYiLCJcdWZmM2IiOiJcdWZlNDciLCJcdWZmM2QiOiJcdWZlNDgiLCJcdWZmM2YiOiJcdWZlMzMiLCJcdWZmNWIiOiJcdWZlMzciLCJcdWZmNWMiOiJcdTIwMTUiLCJcdWZmNWQiOiJcdWZlMzgiLCJcdWZmNWYiOiJcdWZlMzUiLCJcdWZmNjAiOiJcdWZlMzYiLCJcdWZmNjEiOiJcdWZlMTIiLCJcdWZmNjIiOiJcdWZlNDEiLCJcdWZmNjMiOiJcdWZlNDIifSxSYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuLGkpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5hbmdsZT1uLHZvaWQgMCE9PWkmJih0aGlzLnNlZ21lbnQ9aSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMueCx0aGlzLnksdGhpcy5hbmdsZSx0aGlzLnNlZ21lbnQpfSxlfShsKTtmdW5jdGlvbiBGYSh0LGUpe3ZhciByPWUuZXhwcmVzc2lvbjtpZigiY29uc3RhbnQiPT09ci5raW5kKXJldHVybntmdW5jdGlvblR5cGU6ImNvbnN0YW50IixsYXlvdXRTaXplOnIuZXZhbHVhdGUobmV3IExyKHQrMSkpfTtpZigic291cmNlIj09PXIua2luZClyZXR1cm57ZnVuY3Rpb25UeXBlOiJzb3VyY2UifTtmb3IodmFyIG49ci56b29tU3RvcHMsaT0wO2k8bi5sZW5ndGgmJm5baV08PXQ7KWkrKztmb3IodmFyIGE9aT1NYXRoLm1heCgwLGktMSk7YTxuLmxlbmd0aCYmblthXTx0KzE7KWErKzthPU1hdGgubWluKG4ubGVuZ3RoLTEsYSk7dmFyIG89e21pbjpuW2ldLG1heDpuW2FdfTtyZXR1cm4iY29tcG9zaXRlIj09PXIua2luZD97ZnVuY3Rpb25UeXBlOiJjb21wb3NpdGUiLHpvb21SYW5nZTpvLHByb3BlcnR5VmFsdWU6ZS52YWx1ZX06e2Z1bmN0aW9uVHlwZToiY2FtZXJhIixsYXlvdXRTaXplOnIuZXZhbHVhdGUobmV3IExyKHQrMSkpLHpvb21SYW5nZTpvLHNpemVSYW5nZTp7bWluOnIuZXZhbHVhdGUobmV3IExyKG8ubWluKSksbWF4OnIuZXZhbHVhdGUobmV3IExyKG8ubWF4KSl9LHByb3BlcnR5VmFsdWU6ZS52YWx1ZX19cHIoIkFuY2hvciIsUmEpO3ZhciBCYT1nYS5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyxOYT1be25hbWU6ImFfZmFkZV9vcGFjaXR5Iixjb21wb25lbnRzOjEsdHlwZToiVWludDgiLG9mZnNldDowfV07ZnVuY3Rpb24gamEodCxlLHIsbixpLGEsbyxzKXt0LmVtcGxhY2VCYWNrKGUscixNYXRoLnJvdW5kKDMyKm4pLE1hdGgucm91bmQoMzIqaSksYSxvLHM/c1swXTowLHM/c1sxXTowKX1mdW5jdGlvbiBWYSh0LGUscil7dC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpfXZhciBVYT1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyB0bix0aGlzLmluZGV4QXJyYXk9bmV3IGZuLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXQsdGhpcy5zZWdtZW50cz1uZXcgTW4sdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk9bmV3IGVuLHRoaXMub3BhY2l0eVZlcnRleEFycmF5PW5ldyBybix0aGlzLnBsYWNlZFN5bWJvbEFycmF5PW5ldyB5bn07VWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0LGUpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksQ2EubWVtYmVycyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSxlKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LExhLm1lbWJlcnMsITApLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSxOYSwhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLml0ZW1TaXplPTF9LFVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLmRlc3Ryb3koKSl9LHByKCJTeW1ib2xCdWZmZXJzIixVYSk7dmFyIHFhPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyB0LHRoaXMubGF5b3V0QXR0cmlidXRlcz1lLHRoaXMuaW5kZXhBcnJheT1uZXcgcix0aGlzLnNlZ21lbnRzPW5ldyBNbix0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5PW5ldyBvbn07cWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMubGF5b3V0QXR0cmlidXRlcyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheSx6YS5tZW1iZXJzLCEwKX0scWEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlci5kZXN0cm95KCkpfSxwcigiQ29sbGlzaW9uQnVmZmVycyIscWEpO3ZhciBIYT1mdW5jdGlvbih0KXt0aGlzLmNvbGxpc2lvbkJveEFycmF5PXQuY29sbGlzaW9uQm94QXJyYXksdGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyx0aGlzLnNvdXJjZUxheWVySW5kZXg9dC5zb3VyY2VMYXllckluZGV4O3ZhciBlPXRoaXMubGF5ZXJzWzBdLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzO3RoaXMudGV4dFNpemVEYXRhPUZhKHRoaXMuem9vbSxlWyJ0ZXh0LXNpemUiXSksdGhpcy5pY29uU2l6ZURhdGE9RmEodGhpcy56b29tLGVbImljb24tc2l6ZSJdKTt2YXIgcj10aGlzLmxheWVyc1swXS5sYXlvdXQ7dGhpcy5zb3J0RmVhdHVyZXNCeVk9ci5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpfHxyLmdldCgiaWNvbi1hbGxvdy1vdmVybGFwIil8fHIuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKXx8ci5nZXQoImljb24taWdub3JlLXBsYWNlbWVudCIpfTtIYS5wcm90b3R5cGUuY3JlYXRlQXJyYXlzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PW5ldyBVYShuZXcgSW4oQ2EubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sZnVuY3Rpb24odCl7cmV0dXJuL150ZXh0Ly50ZXN0KHQpfSkpLHRoaXMuaWNvbj1uZXcgVWEobmV3IEluKENhLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLGZ1bmN0aW9uKHQpe3JldHVybi9eaWNvbi8udGVzdCh0KX0pKSx0aGlzLmNvbGxpc2lvbkJveD1uZXcgcWEoYW4sT2EubWVtYmVycyxobiksdGhpcy5jb2xsaXNpb25DaXJjbGU9bmV3IHFhKGFuLElhLm1lbWJlcnMsZm4pLHRoaXMuZ2x5cGhPZmZzZXRBcnJheT1uZXcgYm4sdGhpcy5saW5lVmVydGV4QXJyYXk9bmV3IHdufSxIYS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVyc1swXSxuPXIubGF5b3V0LGk9bi5nZXQoInRleHQtZm9udCIpLGE9bi5nZXQoInRleHQtZmllbGQiKSxvPW4uZ2V0KCJpY29uLWltYWdlIikscz0oImNvbnN0YW50IiE9PWEudmFsdWUua2luZHx8YS52YWx1ZS52YWx1ZS5sZW5ndGg+MCkmJigiY29uc3RhbnQiIT09aS52YWx1ZS5raW5kfHxpLnZhbHVlLnZhbHVlLmxlbmd0aD4wKSxsPSJjb25zdGFudCIhPT1vLnZhbHVlLmtpbmR8fG8udmFsdWUudmFsdWUmJm8udmFsdWUudmFsdWUubGVuZ3RoPjA7aWYodGhpcy5mZWF0dXJlcz1bXSxzfHxsKXtmb3IodmFyIGM9ZS5pY29uRGVwZW5kZW5jaWVzLHU9ZS5nbHlwaERlcGVuZGVuY2llcyxmPW5ldyBMcih0aGlzLnpvb20pLGg9MCxwPXQ7aDxwLmxlbmd0aDtoKz0xKXt2YXIgZD1wW2hdLGc9ZC5mZWF0dXJlLHY9ZC5pbmRleCxtPWQuc291cmNlTGF5ZXJJbmRleDtpZihyLl9mZWF0dXJlRmlsdGVyKGYsZykpe3ZhciB5PXZvaWQgMDtzJiYoeT1EYSh5PXIuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKCJ0ZXh0LWZpZWxkIixnKSxyLGcpKTt2YXIgeD12b2lkIDA7aWYobCYmKHg9ci5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoImljb24taW1hZ2UiLGcpKSx5fHx4KXt2YXIgYj17dGV4dDp5LGljb246eCxpbmRleDp2LHNvdXJjZUxheWVySW5kZXg6bSxnZW9tZXRyeTpGbihnKSxwcm9wZXJ0aWVzOmcucHJvcGVydGllcyx0eXBlOkJhW2cudHlwZV19O2lmKHZvaWQgMCE9PWcuaWQmJihiLmlkPWcuaWQpLHRoaXMuZmVhdHVyZXMucHVzaChiKSx4JiYoY1t4XT0hMCkseSlmb3IodmFyIF89aS5ldmFsdWF0ZShnKS5qb2luKCIsIiksdz11W19dPXVbX118fHt9LGs9Im1hcCI9PT1uLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmImxpbmUiPT09bi5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxUPXhyKHkpLEE9MDtBPHkubGVuZ3RoO0ErKylpZih3W3kuY2hhckNvZGVBdChBKV09ITAsayYmVCl7dmFyIE09UGFbeS5jaGFyQXQoQSldO00mJih3W00uY2hhckNvZGVBdCgwKV09ITApfX19fSJsaW5lIj09PW4uZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikmJih0aGlzLmZlYXR1cmVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9e30sbj1bXSxpPTA7ZnVuY3Rpb24gYShlKXtuLnB1c2godFtlXSksaSsrfWZ1bmN0aW9uIG8odCxlLGkpe3ZhciBhPXJbdF07cmV0dXJuIGRlbGV0ZSByW3RdLHJbZV09YSxuW2FdLmdlb21ldHJ5WzBdLnBvcCgpLG5bYV0uZ2VvbWV0cnlbMF09blthXS5nZW9tZXRyeVswXS5jb25jYXQoaVswXSksYX1mdW5jdGlvbiBzKHQscixpKXt2YXIgYT1lW3JdO3JldHVybiBkZWxldGUgZVtyXSxlW3RdPWEsblthXS5nZW9tZXRyeVswXS5zaGlmdCgpLG5bYV0uZ2VvbWV0cnlbMF09aVswXS5jb25jYXQoblthXS5nZW9tZXRyeVswXSksYX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1yP2VbMF1bZVswXS5sZW5ndGgtMV06ZVswXVswXTtyZXR1cm4gdCsiOiIrbi54KyI6IituLnl9Zm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXRbY10sZj11Lmdlb21ldHJ5LGg9dS50ZXh0O2lmKGgpe3ZhciBwPWwoaCxmKSxkPWwoaCxmLCEwKTtpZihwIGluIHImJmQgaW4gZSYmcltwXSE9PWVbZF0pe3ZhciBnPXMocCxkLGYpLHY9byhwLGQsbltnXS5nZW9tZXRyeSk7ZGVsZXRlIGVbcF0sZGVsZXRlIHJbZF0scltsKGgsblt2XS5nZW9tZXRyeSwhMCldPXYsbltnXS5nZW9tZXRyeT1udWxsfWVsc2UgcCBpbiByP28ocCxkLGYpOmQgaW4gZT9zKHAsZCxmKTooYShjKSxlW3BdPWktMSxyW2RdPWktMSl9ZWxzZSBhKGMpfXJldHVybiBuLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5nZW9tZXRyeX0pfSh0aGlzLmZlYXR1cmVzKSl9fSxIYS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RofSxIYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudGV4dC51cGxvYWQodCx0aGlzLnNvcnRGZWF0dXJlc0J5WSksdGhpcy5pY29uLnVwbG9hZCh0LHRoaXMuc29ydEZlYXR1cmVzQnlZKSx0aGlzLmNvbGxpc2lvbkJveC51cGxvYWQodCksdGhpcy5jb2xsaXNpb25DaXJjbGUudXBsb2FkKHQpfSxIYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudGV4dC5kZXN0cm95KCksdGhpcy5pY29uLmRlc3Ryb3koKSx0aGlzLmNvbGxpc2lvbkJveC5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25DaXJjbGUuZGVzdHJveSgpfSxIYS5wcm90b3R5cGUuYWRkVG9MaW5lVmVydGV4QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGg7aWYodm9pZCAwIT09dC5zZWdtZW50KXtmb3IodmFyIG49dC5kaXN0KGVbdC5zZWdtZW50KzFdKSxpPXQuZGlzdChlW3Quc2VnbWVudF0pLGE9e30sbz10LnNlZ21lbnQrMTtvPGUubGVuZ3RoO28rKylhW29dPXt4OmVbb10ueCx5OmVbb10ueSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjpufSxvPGUubGVuZ3RoLTEmJihuKz1lW28rMV0uZGlzdChlW29dKSk7Zm9yKHZhciBzPXQuc2VnbWVudHx8MDtzPj0wO3MtLSlhW3NdPXt4OmVbc10ueCx5OmVbc10ueSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjppfSxzPjAmJihpKz1lW3MtMV0uZGlzdChlW3NdKSk7Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBjPWFbbF07dGhpcy5saW5lVmVydGV4QXJyYXkuZW1wbGFjZUJhY2soYy54LGMueSxjLnRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKX19cmV0dXJue2xpbmVTdGFydEluZGV4OnIsbGluZUxlbmd0aDp0aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGgtcn19LEhhLnByb3RvdHlwZS5hZGRTeW1ib2xzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe2Zvcih2YXIgdT10LmluZGV4QXJyYXksZj10LmxheW91dFZlcnRleEFycmF5LGg9dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkscD10LnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQqZS5sZW5ndGgsdC5sYXlvdXRWZXJ0ZXhBcnJheSx0LmluZGV4QXJyYXkpLGQ9dGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aCxnPXAudmVydGV4TGVuZ3RoLHY9MCxtPWU7djxtLmxlbmd0aDt2Kz0xKXt2YXIgeT1tW3ZdLHg9eS50bCxiPXkudHIsXz15LmJsLHc9eS5icixrPXkudGV4LFQ9cC52ZXJ0ZXhMZW5ndGgsQT15LmdseXBoT2Zmc2V0WzFdO2phKGYscy54LHMueSx4LngsQSt4Lnksay54LGsueSxyKSxqYShmLHMueCxzLnksYi54LEErYi55LGsueCtrLncsay55LHIpLGphKGYscy54LHMueSxfLngsQStfLnksay54LGsueStrLmgsciksamEoZixzLngscy55LHcueCxBK3cueSxrLngray53LGsueStrLmgsciksVmEoaCxzLDApLHUuZW1wbGFjZUJhY2soVCxUKzEsVCsyKSx1LmVtcGxhY2VCYWNrKFQrMSxUKzIsVCszKSxwLnZlcnRleExlbmd0aCs9NCxwLnByaW1pdGl2ZUxlbmd0aCs9Mix0aGlzLmdseXBoT2Zmc2V0QXJyYXkuZW1wbGFjZUJhY2soeS5nbHlwaE9mZnNldFswXSl9dC5wbGFjZWRTeW1ib2xBcnJheS5lbXBsYWNlQmFjayhzLngscy55LGQsdGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aC1kLGcsbCxjLHMuc2VnbWVudCxyP3JbMF06MCxyP3JbMV06MCxuWzBdLG5bMV0sbywhMSksdC5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0LmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxhKX0sSGEucHJvdG90eXBlLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleD1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBlLmVtcGxhY2VCYWNrKDAsMCksdC5lbXBsYWNlQmFjayhyLngsci55LG4ueCxuLnksTWF0aC5yb3VuZChpLngpLE1hdGgucm91bmQoaS55KSl9LEhhLnByb3RvdHlwZS5hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRpY2VzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGM9aS5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LGkubGF5b3V0VmVydGV4QXJyYXksaS5pbmRleEFycmF5KSx1PWMudmVydGV4TGVuZ3RoLGY9aS5sYXlvdXRWZXJ0ZXhBcnJheSxoPWkuY29sbGlzaW9uVmVydGV4QXJyYXk7aWYodGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgoZixoLGEsby5hbmNob3IsbmV3IGwodCxlKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgoZixoLGEsby5hbmNob3IsbmV3IGwocixlKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgoZixoLGEsby5hbmNob3IsbmV3IGwocixuKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgoZixoLGEsby5hbmNob3IsbmV3IGwodCxuKSksYy52ZXJ0ZXhMZW5ndGgrPTQscyl7dmFyIHA9aS5pbmRleEFycmF5O3AuZW1wbGFjZUJhY2sodSx1KzEsdSsyKSxwLmVtcGxhY2VCYWNrKHUsdSsyLHUrMyksYy5wcmltaXRpdmVMZW5ndGgrPTJ9ZWxzZXt2YXIgZD1pLmluZGV4QXJyYXk7ZC5lbXBsYWNlQmFjayh1LHUrMSksZC5lbXBsYWNlQmFjayh1KzEsdSsyKSxkLmVtcGxhY2VCYWNrKHUrMix1KzMpLGQuZW1wbGFjZUJhY2sodSszLHUpLGMucHJpbWl0aXZlTGVuZ3RoKz00fX0sSGEucHJvdG90eXBlLmdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLnN5bWJvbEluc3RhbmNlczt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07ci50ZXh0Q29sbGlzaW9uRmVhdHVyZT17Ym94U3RhcnRJbmRleDpyLnRleHRCb3hTdGFydEluZGV4LGJveEVuZEluZGV4OnIudGV4dEJveEVuZEluZGV4fSxyLmljb25Db2xsaXNpb25GZWF0dXJlPXtib3hTdGFydEluZGV4OnIuaWNvbkJveFN0YXJ0SW5kZXgsYm94RW5kSW5kZXg6ci5pY29uQm94RW5kSW5kZXh9O2Zvcih2YXIgbj0wO248MjtuKyspe3ZhciBpPXJbMD09PW4/InRleHRDb2xsaXNpb25GZWF0dXJlIjoiaWNvbkNvbGxpc2lvbkZlYXR1cmUiXTtpZihpKWZvcih2YXIgYT1pLmJveFN0YXJ0SW5kZXg7YTxpLmJveEVuZEluZGV4O2ErKyl7dmFyIG89dGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQoYSkscz1vLngxLGw9by55MSxjPW8ueDIsdT1vLnkyLGY9by5yYWRpdXM+MDt0aGlzLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMocyxsLGMsdSxmP3RoaXMuY29sbGlzaW9uQ2lyY2xlOnRoaXMuY29sbGlzaW9uQm94LG8uYW5jaG9yUG9pbnQscixmKX19fX0sSGEucHJvdG90eXBlLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9e30sbz1lO288cjtvKyspe3ZhciBzPXQuZ2V0KG8pO2lmKDA9PT1zLnJhZGl1cyl7YS50ZXh0Qm94PXt4MTpzLngxLHkxOnMueTEseDI6cy54Mix5MjpzLnkyLGFuY2hvclBvaW50WDpzLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6cy5hbmNob3JQb2ludFl9LGEudGV4dEZlYXR1cmVJbmRleD1zLmZlYXR1cmVJbmRleDticmVha31hLnRleHRDaXJjbGVzfHwoYS50ZXh0Q2lyY2xlcz1bXSxhLnRleHRGZWF0dXJlSW5kZXg9cy5mZWF0dXJlSW5kZXgpLGEudGV4dENpcmNsZXMucHVzaChzLmFuY2hvclBvaW50WCxzLmFuY2hvclBvaW50WSxzLnJhZGl1cyxzLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciwxKX1mb3IodmFyIGw9bjtsPGk7bCsrKXt2YXIgYz10LmdldChsKTtpZigwPT09Yy5yYWRpdXMpe2EuaWNvbkJveD17eDE6Yy54MSx5MTpjLnkxLHgyOmMueDIseTI6Yy55MixhbmNob3JQb2ludFg6Yy5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOmMuYW5jaG9yUG9pbnRZfSxhLmljb25GZWF0dXJlSW5kZXg9Yy5mZWF0dXJlSW5kZXg7YnJlYWt9fXJldHVybiBhfSxIYS5wcm90b3R5cGUuaGFzVGV4dERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzSWNvbkRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzQ29sbGlzaW9uQm94RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sSGEucHJvdG90eXBlLmhhc0NvbGxpc2lvbkNpcmNsZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xsaXNpb25DaXJjbGUuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LEhhLnByb3RvdHlwZS5zb3J0RmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLnNvcnRGZWF0dXJlc0J5WSYmdGhpcy5zb3J0ZWRBbmdsZSE9PXQmJih0aGlzLnNvcnRlZEFuZ2xlPXQsISh0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjF8fHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MSkpKXtmb3IodmFyIHI9W10sbj0wO248dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO24rKylyLnB1c2gobik7dmFyIGk9TWF0aC5zaW4odCksYT1NYXRoLmNvcyh0KTtyLnNvcnQoZnVuY3Rpb24odCxyKXt2YXIgbj1lLnN5bWJvbEluc3RhbmNlc1t0XSxvPWUuc3ltYm9sSW5zdGFuY2VzW3JdO3JldHVybihpKm4uYW5jaG9yLngrYSpuLmFuY2hvci55fDApLShpKm8uYW5jaG9yLngrYSpvLmFuY2hvci55fDApfHxvLmZlYXR1cmVJbmRleC1uLmZlYXR1cmVJbmRleH0pLHRoaXMudGV4dC5pbmRleEFycmF5LmNsZWFyKCksdGhpcy5pY29uLmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmZlYXR1cmVTb3J0T3JkZXI9W107Zm9yKHZhciBvPTAscz1yO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWUuc3ltYm9sSW5zdGFuY2VzW2xdO2UuZmVhdHVyZVNvcnRPcmRlci5wdXNoKGMuZmVhdHVyZUluZGV4KTtmb3IodmFyIHU9MCxmPWMucGxhY2VkVGV4dFN5bWJvbEluZGljZXM7dTxmLmxlbmd0aDt1Kz0xKWZvcih2YXIgaD1mW3VdLHA9ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChoKSxkPXAudmVydGV4U3RhcnRJbmRleCs0KnAubnVtR2x5cGhzLGc9cC52ZXJ0ZXhTdGFydEluZGV4O2c8ZDtnKz00KWUudGV4dC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGcsZysxLGcrMiksZS50ZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soZysxLGcrMixnKzMpO3ZhciB2PWUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQobCk7aWYodi5udW1HbHlwaHMpe3ZhciBtPXYudmVydGV4U3RhcnRJbmRleDtlLmljb24uaW5kZXhBcnJheS5lbXBsYWNlQmFjayhtLG0rMSxtKzIpLGUuaWNvbi5pbmRleEFycmF5LmVtcGxhY2VCYWNrKG0rMSxtKzIsbSszKX19dGhpcy50ZXh0LmluZGV4QnVmZmVyJiZ0aGlzLnRleHQuaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnRleHQuaW5kZXhBcnJheSksdGhpcy5pY29uLmluZGV4QnVmZmVyJiZ0aGlzLmljb24uaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLmljb24uaW5kZXhBcnJheSl9fSxwcigiU3ltYm9sQnVja2V0IixIYSx7b21pdDpbImxheWVycyIsImNvbGxpc2lvbkJveEFycmF5IiwiZmVhdHVyZXMiLCJjb21wYXJlVGV4dCJdLHNoYWxsb3c6WyJzeW1ib2xJbnN0YW5jZXMiXX0pLEhhLk1BWF9HTFlQSFM9NjU1MzUsSGEuYWRkRHluYW1pY0F0dHJpYnV0ZXM9VmE7dmFyIEdhPW5ldyBxcih7InN5bWJvbC1wbGFjZW1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInN5bWJvbC1wbGFjZW1lbnQiXSksInN5bWJvbC1zcGFjaW5nIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtc3BhY2luZyJdKSwic3ltYm9sLWF2b2lkLWVkZ2VzIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtYXZvaWQtZWRnZXMiXSksImljb24tYWxsb3ctb3ZlcmxhcCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1hbGxvdy1vdmVybGFwIl0pLCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbImljb24taWdub3JlLXBsYWNlbWVudCJdKSwiaWNvbi1vcHRpb25hbCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1vcHRpb25hbCJdKSwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbImljb24tcm90YXRpb24tYWxpZ25tZW50Il0pLCJpY29uLXNpemUiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbImljb24tc2l6ZSJdKSwiaWNvbi10ZXh0LWZpdCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsiaWNvbi10ZXh0LWZpdCJdKSwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0LXBhZGRpbmciXSksImljb24taW1hZ2UiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbImljb24taW1hZ2UiXSksImljb24tcm90YXRlIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLXJvdGF0ZSJdKSwiaWNvbi1wYWRkaW5nIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLXBhZGRpbmciXSksImljb24ta2VlcC11cHJpZ2h0IjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLWtlZXAtdXByaWdodCJdKSwiaWNvbi1vZmZzZXQiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbImljb24tb2Zmc2V0Il0pLCJpY29uLWFuY2hvciI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1hbmNob3IiXSksImljb24tcGl0Y2gtYWxpZ25tZW50IjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLXBpdGNoLWFsaWdubWVudCJdKSwidGV4dC1waXRjaC1hbGlnbm1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInRleHQtcGl0Y2gtYWxpZ25tZW50Il0pLCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXSksInRleHQtZmllbGQiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtZmllbGQiXSksInRleHQtZm9udCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsidGV4dC1mb250Il0pLCJ0ZXh0LXNpemUiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtc2l6ZSJdKSwidGV4dC1tYXgtd2lkdGgiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtbWF4LXdpZHRoIl0pLCJ0ZXh0LWxpbmUtaGVpZ2h0IjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWxpbmUtaGVpZ2h0Il0pLCJ0ZXh0LWxldHRlci1zcGFjaW5nIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWxldHRlci1zcGFjaW5nIl0pLCJ0ZXh0LWp1c3RpZnkiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtanVzdGlmeSJdKSwidGV4dC1hbmNob3IiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtYW5jaG9yIl0pLCJ0ZXh0LW1heC1hbmdsZSI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsidGV4dC1tYXgtYW5nbGUiXSksInRleHQtcm90YXRlIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXJvdGF0ZSJdKSwidGV4dC1wYWRkaW5nIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXBhZGRpbmciXSksInRleHQta2VlcC11cHJpZ2h0IjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWtlZXAtdXByaWdodCJdKSwidGV4dC10cmFuc2Zvcm0iOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtdHJhbnNmb3JtIl0pLCJ0ZXh0LW9mZnNldCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsidGV4dC1vZmZzZXQiXSksInRleHQtYWxsb3ctb3ZlcmxhcCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsidGV4dC1hbGxvdy1vdmVybGFwIl0pLCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInRleHQtaWdub3JlLXBsYWNlbWVudCJdKSwidGV4dC1vcHRpb25hbCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsidGV4dC1vcHRpb25hbCJdKX0pLFlhPXtwYWludDpuZXcgcXIoeyJpY29uLW9wYWNpdHkiOm5ldyBqcihJLnBhaW50X3N5bWJvbFsiaWNvbi1vcGFjaXR5Il0pLCJpY29uLWNvbG9yIjpuZXcganIoSS5wYWludF9zeW1ib2xbImljb24tY29sb3IiXSksImljb24taGFsby1jb2xvciI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJpY29uLWhhbG8tY29sb3IiXSksImljb24taGFsby13aWR0aCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJpY29uLWhhbG8td2lkdGgiXSksImljb24taGFsby1ibHVyIjpuZXcganIoSS5wYWludF9zeW1ib2xbImljb24taGFsby1ibHVyIl0pLCJpY29uLXRyYW5zbGF0ZSI6bmV3IE5yKEkucGFpbnRfc3ltYm9sWyJpY29uLXRyYW5zbGF0ZSJdKSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjpuZXcgTnIoSS5wYWludF9zeW1ib2xbImljb24tdHJhbnNsYXRlLWFuY2hvciJdKSwidGV4dC1vcGFjaXR5IjpuZXcganIoSS5wYWludF9zeW1ib2xbInRleHQtb3BhY2l0eSJdKSwidGV4dC1jb2xvciI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJ0ZXh0LWNvbG9yIl0pLCJ0ZXh0LWhhbG8tY29sb3IiOm5ldyBqcihJLnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLWNvbG9yIl0pLCJ0ZXh0LWhhbG8td2lkdGgiOm5ldyBqcihJLnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLXdpZHRoIl0pLCJ0ZXh0LWhhbG8tYmx1ciI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJ0ZXh0LWhhbG8tYmx1ciJdKSwidGV4dC10cmFuc2xhdGUiOm5ldyBOcihJLnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUiXSksInRleHQtdHJhbnNsYXRlLWFuY2hvciI6bmV3IE5yKEkucGFpbnRfc3ltYm9sWyJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiXSl9KSxsYXlvdXQ6R2F9LFdhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxZYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50IikmJigibGluZSI9PT10aGlzLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKT90aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdPSJtYXAiOnRoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcm90YXRpb24tYWxpZ25tZW50Il09InZpZXdwb3J0IiksImF1dG8iPT09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYoImxpbmUiPT09dGhpcy5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iik/dGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXT0ibWFwIjp0aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdPSJ2aWV3cG9ydCIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcGl0Y2gtYWxpZ25tZW50Il09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50IikmJih0aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXBpdGNoLWFsaWdubWVudCJdPXRoaXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSl9LGUucHJvdG90eXBlLmdldFZhbHVlQW5kUmVzb2x2ZVRva2Vucz1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5sYXlvdXQuZ2V0KHQpLmV2YWx1YXRlKGUpLGk9dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlc1t0XTtyZXR1cm4gaS5pc0RhdGFEcml2ZW4oKXx8X2UoaS52YWx1ZSk/bjoocj1lLnByb3BlcnRpZXMsbi5yZXBsYWNlKC97KFtee31dKyl9L2csZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbiByP1N0cmluZyhyW2VdKToiIn0pKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSGEodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZX0oSHIpLFhhPXtwYWludDpuZXcgcXIoeyJiYWNrZ3JvdW5kLWNvbG9yIjpuZXcgTnIoSS5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLWNvbG9yIl0pLCJiYWNrZ3JvdW5kLXBhdHRlcm4iOm5ldyBWcihJLnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtcGF0dGVybiJdKSwiYmFja2dyb3VuZC1vcGFjaXR5IjpuZXcgTnIoSS5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLW9wYWNpdHkiXSl9KX0sWmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLFhhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oSHIpLCRhPXtwYWludDpuZXcgcXIoeyJyYXN0ZXItb3BhY2l0eSI6bmV3IE5yKEkucGFpbnRfcmFzdGVyWyJyYXN0ZXItb3BhY2l0eSJdKSwicmFzdGVyLWh1ZS1yb3RhdGUiOm5ldyBOcihJLnBhaW50X3Jhc3RlclsicmFzdGVyLWh1ZS1yb3RhdGUiXSksInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6bmV3IE5yKEkucGFpbnRfcmFzdGVyWyJyYXN0ZXItYnJpZ2h0bmVzcy1taW4iXSksInJhc3Rlci1icmlnaHRuZXNzLW1heCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyWyJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiXSksInJhc3Rlci1zYXR1cmF0aW9uIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbInJhc3Rlci1zYXR1cmF0aW9uIl0pLCJyYXN0ZXItY29udHJhc3QiOm5ldyBOcihJLnBhaW50X3Jhc3RlclsicmFzdGVyLWNvbnRyYXN0Il0pLCJyYXN0ZXItZmFkZS1kdXJhdGlvbiI6bmV3IE5yKEkucGFpbnRfcmFzdGVyWyJyYXN0ZXItZmFkZS1kdXJhdGlvbiJdKX0pfSxKYT17Y2lyY2xlOm5pLGhlYXRtYXA6cGksaGlsbHNoYWRlOmdpLGZpbGw6SmksImZpbGwtZXh0cnVzaW9uIjphYSxsaW5lOlNhLHN5bWJvbDpXYSxiYWNrZ3JvdW5kOlphLHJhc3RlcjpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsJGEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShIcil9LEthPWkoZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyKXtyPXJ8fHt9LHRoaXMudz10fHw2NCx0aGlzLmg9ZXx8NjQsdGhpcy5hdXRvUmVzaXplPSEhci5hdXRvUmVzaXplLHRoaXMuc2hlbHZlcz1bXSx0aGlzLmZyZWViaW5zPVtdLHRoaXMuc3RhdHM9e30sdGhpcy5iaW5zPXt9LHRoaXMubWF4SWQ9MH1mdW5jdGlvbiBlKHQsZSxyKXt0aGlzLng9MCx0aGlzLnk9dCx0aGlzLnc9dGhpcy5mcmVlPWUsdGhpcy5oPXJ9cmV0dXJuIHQucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24odCxlKXt0PVtdLmNvbmNhdCh0KSxlPWV8fHt9O2Zvcih2YXIgcixuLGksYSxvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKylpZihyPXRbc10ud3x8dFtzXS53aWR0aCxuPXRbc10uaHx8dFtzXS5oZWlnaHQsaT10W3NdLmlkLHImJm4pe2lmKCEoYT10aGlzLnBhY2tPbmUocixuLGkpKSljb250aW51ZTtlLmluUGxhY2UmJih0W3NdLng9YS54LHRbc10ueT1hLnksdFtzXS5pZD1hLmlkKSxvLnB1c2goYSl9cmV0dXJuIHRoaXMuc2hyaW5rKCksb30sdC5wcm90b3R5cGUucGFja09uZT1mdW5jdGlvbih0LHIsbil7dmFyIGksYSxvLHMsbCxjLHUsZixoPXtmcmVlYmluOi0xLHNoZWxmOi0xLHdhc3RlOjEvMH0scD0wO2lmKCJzdHJpbmciPT10eXBlb2Ygbnx8Im51bWJlciI9PXR5cGVvZiBuKXtpZihpPXRoaXMuZ2V0QmluKG4pKXJldHVybiB0aGlzLnJlZihpKSxpOyJudW1iZXIiPT10eXBlb2YgbiYmKHRoaXMubWF4SWQ9TWF0aC5tYXgobix0aGlzLm1heElkKSl9ZWxzZSBuPSsrdGhpcy5tYXhJZDtmb3Iocz0wO3M8dGhpcy5mcmVlYmlucy5sZW5ndGg7cysrKXtpZihyPT09KGk9dGhpcy5mcmVlYmluc1tzXSkubWF4aCYmdD09PWkubWF4dylyZXR1cm4gdGhpcy5hbGxvY0ZyZWViaW4ocyx0LHIsbik7cj5pLm1heGh8fHQ+aS5tYXh3fHxyPD1pLm1heGgmJnQ8PWkubWF4dyYmKG89aS5tYXh3KmkubWF4aC10KnIpPGgud2FzdGUmJihoLndhc3RlPW8saC5mcmVlYmluPXMpfWZvcihzPTA7czx0aGlzLnNoZWx2ZXMubGVuZ3RoO3MrKylpZihwKz0oYT10aGlzLnNoZWx2ZXNbc10pLmgsISh0PmEuZnJlZSkpe2lmKHI9PT1hLmgpcmV0dXJuIHRoaXMuYWxsb2NTaGVsZihzLHQscixuKTtyPmEuaHx8cjxhLmgmJihvPShhLmgtcikqdCk8aC53YXN0ZSYmKGguZnJlZWJpbj0tMSxoLndhc3RlPW8saC5zaGVsZj1zKX1yZXR1cm4tMSE9PWguZnJlZWJpbj90aGlzLmFsbG9jRnJlZWJpbihoLmZyZWViaW4sdCxyLG4pOi0xIT09aC5zaGVsZj90aGlzLmFsbG9jU2hlbGYoaC5zaGVsZix0LHIsbik6cjw9dGhpcy5oLXAmJnQ8PXRoaXMudz8oYT1uZXcgZShwLHRoaXMudyxyKSx0aGlzLmFsbG9jU2hlbGYodGhpcy5zaGVsdmVzLnB1c2goYSktMSx0LHIsbikpOnRoaXMuYXV0b1Jlc2l6ZT8obD1jPXRoaXMuaCwoKHU9Zj10aGlzLncpPD1sfHx0PnUpJiYoZj0yKk1hdGgubWF4KHQsdSkpLChsPHV8fHI+bCkmJihjPTIqTWF0aC5tYXgocixsKSksdGhpcy5yZXNpemUoZixjKSx0aGlzLnBhY2tPbmUodCxyLG4pKTpudWxsfSx0LnByb3RvdHlwZS5hbGxvY0ZyZWViaW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5mcmVlYmlucy5zcGxpY2UodCwxKVswXTtyZXR1cm4gaS5pZD1uLGkudz1lLGkuaD1yLGkucmVmY291bnQ9MCx0aGlzLmJpbnNbbl09aSx0aGlzLnJlZihpKSxpfSx0LnByb3RvdHlwZS5hbGxvY1NoZWxmPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuc2hlbHZlc1t0XS5hbGxvYyhlLHIsbik7cmV0dXJuIHRoaXMuYmluc1tuXT1pLHRoaXMucmVmKGkpLGl9LHQucHJvdG90eXBlLnNocmluaz1mdW5jdGlvbigpe2lmKHRoaXMuc2hlbHZlcy5sZW5ndGg+MCl7Zm9yKHZhciB0PTAsZT0wLHI9MDtyPHRoaXMuc2hlbHZlcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzLnNoZWx2ZXNbcl07ZSs9bi5oLHQ9TWF0aC5tYXgobi53LW4uZnJlZSx0KX10aGlzLnJlc2l6ZSh0LGUpfX0sdC5wcm90b3R5cGUuZ2V0QmluPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJpbnNbdF19LHQucHJvdG90eXBlLnJlZj1mdW5jdGlvbih0KXtpZigxPT0rK3QucmVmY291bnQpe3ZhciBlPXQuaDt0aGlzLnN0YXRzW2VdPTErKDB8dGhpcy5zdGF0c1tlXSl9cmV0dXJuIHQucmVmY291bnR9LHQucHJvdG90eXBlLnVucmVmPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5yZWZjb3VudD8wOigwPT0tLXQucmVmY291bnQmJih0aGlzLnN0YXRzW3QuaF0tLSxkZWxldGUgdGhpcy5iaW5zW3QuaWRdLHRoaXMuZnJlZWJpbnMucHVzaCh0KSksdC5yZWZjb3VudCl9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaGVsdmVzPVtdLHRoaXMuZnJlZWJpbnM9W10sdGhpcy5zdGF0cz17fSx0aGlzLmJpbnM9e30sdGhpcy5tYXhJZD0wfSx0LnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt0aGlzLnc9dCx0aGlzLmg9ZTtmb3IodmFyIHI9MDtyPHRoaXMuc2hlbHZlcy5sZW5ndGg7cisrKXRoaXMuc2hlbHZlc1tyXS5yZXNpemUodCk7cmV0dXJuITB9LGUucHJvdG90eXBlLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtpZih0PnRoaXMuZnJlZXx8ZT50aGlzLmgpcmV0dXJuIG51bGw7dmFyIG49dGhpcy54O3JldHVybiB0aGlzLngrPXQsdGhpcy5mcmVlLT10LG5ldyBmdW5jdGlvbih0LGUscixuLGksYSxvKXt0aGlzLmlkPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy53PW4sdGhpcy5oPWksdGhpcy5tYXh3PWF8fG4sdGhpcy5tYXhoPW98fGksdGhpcy5yZWZjb3VudD0wfShyLG4sdGhpcy55LHQsZSx0LHRoaXMuaCl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcmVlKz10LXRoaXMudyx0aGlzLnc9dCwhMH0sdH0oKX0pLFFhPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5waXhlbFJhdGlvO3RoaXMucGFkZGVkUmVjdD10LHRoaXMucGl4ZWxSYXRpbz1yfSx0bz17dGw6e2NvbmZpZ3VyYWJsZTohMH0sYnI6e2NvbmZpZ3VyYWJsZTohMH0sZGlzcGxheVNpemU6e2NvbmZpZ3VyYWJsZTohMH19O3RvLnRsLmdldD1mdW5jdGlvbigpe3JldHVyblt0aGlzLnBhZGRlZFJlY3QueCsxLHRoaXMucGFkZGVkUmVjdC55KzFdfSx0by5ici5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrdGhpcy5wYWRkZWRSZWN0LnctMSx0aGlzLnBhZGRlZFJlY3QueSt0aGlzLnBhZGRlZFJlY3QuaC0xXX0sdG8uZGlzcGxheVNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuWyh0aGlzLnBhZGRlZFJlY3Qudy0yKS90aGlzLnBpeGVsUmF0aW8sKHRoaXMucGFkZGVkUmVjdC5oLTIpL3RoaXMucGl4ZWxSYXRpb119LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFFhLnByb3RvdHlwZSx0byk7dmFyIGVvPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB1aSh7d2lkdGg6MCxoZWlnaHQ6MH0pLHI9e30sbj1uZXcgS2EoMCwwLHthdXRvUmVzaXplOiEwfSk7Zm9yKHZhciBpIGluIHQpe3ZhciBhPXRbaV0sbz1uLnBhY2tPbmUoYS5kYXRhLndpZHRoKzIsYS5kYXRhLmhlaWdodCsyKTtlLnJlc2l6ZSh7d2lkdGg6bi53LGhlaWdodDpuLmh9KSx1aS5jb3B5KGEuZGF0YSxlLHt4OjAseTowfSx7eDpvLngrMSx5Om8ueSsxfSxhLmRhdGEpLHJbaV09bmV3IFFhKG8sYSl9bi5zaHJpbmsoKSxlLnJlc2l6ZSh7d2lkdGg6bi53LGhlaWdodDpuLmh9KSx0aGlzLmltYWdlPWUsdGhpcy5wb3NpdGlvbnM9cn07cHIoIkltYWdlUG9zaXRpb24iLFFhKSxwcigiSW1hZ2VBdGxhcyIsZW8pO3ZhciBybz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2ktMTowLGg9cj8tMToxLHA9dFtlK2ZdO2ZvcihmKz1oLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2ZdLGYrPWgsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2ZdLGYrPWgsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0sbm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPTgqYS1pLTEsdT0oMTw8YyktMSxmPXU+PjEsaD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmEtMSxkPW4/MTotMSxnPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsbz11KToobz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLW8pKTwxJiYoby0tLGwqPTIpLChlKz1vK2Y+PTE/aC9sOmgqTWF0aC5wb3coMiwxLWYpKSpsPj0yJiYobysrLGwvPTIpLG8rZj49dT8ocz0wLG89dSk6bytmPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxvKz1mKToocz1lKk1hdGgucG93KDIsZi0xKSpNYXRoLnBvdygyLGkpLG89MCkpO2k+PTg7dFtyK3BdPTI1NSZzLHArPWQscy89MjU2LGktPTgpO2ZvcihvPW88PGl8cyxjKz1pO2M+MDt0W3IrcF09MjU1Jm8scCs9ZCxvLz0yNTYsYy09OCk7dFtyK3AtZF18PTEyOCpnfSxpbz1hbztmdW5jdGlvbiBhbyh0KXt0aGlzLmJ1Zj1BcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KT90Om5ldyBVaW50OEFycmF5KHR8fDApLHRoaXMucG9zPTAsdGhpcy50eXBlPTAsdGhpcy5sZW5ndGg9dGhpcy5idWYubGVuZ3RofWZ1bmN0aW9uIG9vKHQpe3JldHVybiB0LnR5cGU9PT1hby5CeXRlcz90LnJlYWRWYXJpbnQoKSt0LnBvczp0LnBvcysxfWZ1bmN0aW9uIHNvKHQsZSxyKXtyZXR1cm4gcj80Mjk0OTY3Mjk2KmUrKHQ+Pj4wKTo0Mjk0OTY3Mjk2KihlPj4+MCkrKHQ+Pj4wKX1mdW5jdGlvbiBsbyh0LGUscil7dmFyIG49ZTw9MTYzODM/MTplPD0yMDk3MTUxPzI6ZTw9MjY4NDM1NDU1PzM6TWF0aC5jZWlsKE1hdGgubG9nKGUpLyg3Kk1hdGguTE4yKSk7ci5yZWFsbG9jKG4pO2Zvcih2YXIgaT1yLnBvcy0xO2k+PXQ7aS0tKXIuYnVmW2krbl09ci5idWZbaV19ZnVuY3Rpb24gY28odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlVmFyaW50KHRbcl0pfWZ1bmN0aW9uIHVvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNWYXJpbnQodFtyXSl9ZnVuY3Rpb24gZm8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRmxvYXQodFtyXSl9ZnVuY3Rpb24gaG8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRG91YmxlKHRbcl0pfWZ1bmN0aW9uIHBvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUJvb2xlYW4odFtyXSl9ZnVuY3Rpb24gZ28odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRml4ZWQzMih0W3JdKX1mdW5jdGlvbiB2byh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQzMih0W3JdKX1mdW5jdGlvbiBtbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIHlvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIHhvKHQsZSl7cmV0dXJuKHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTYpKzE2Nzc3MjE2KnRbZSszXX1mdW5jdGlvbiBibyh0LGUscil7dFtyXT1lLHRbcisxXT1lPj4+OCx0W3IrMl09ZT4+PjE2LHRbciszXT1lPj4+MjR9ZnVuY3Rpb24gX28odCxlKXtyZXR1cm4odFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNikrKHRbZSszXTw8MjQpfWFvLlZhcmludD0wLGFvLkZpeGVkNjQ9MSxhby5CeXRlcz0yLGFvLkZpeGVkMzI9NSxhby5wcm90b3R5cGU9e2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmJ1Zj1udWxsfSxyZWFkRmllbGRzOmZ1bmN0aW9uKHQsZSxyKXtmb3Iocj1yfHx0aGlzLmxlbmd0aDt0aGlzLnBvczxyOyl7dmFyIG49dGhpcy5yZWFkVmFyaW50KCksaT1uPj4zLGE9dGhpcy5wb3M7dGhpcy50eXBlPTcmbix0KGksZSx0aGlzKSx0aGlzLnBvcz09PWEmJnRoaXMuc2tpcChuKX1yZXR1cm4gZX0scmVhZE1lc3NhZ2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZWFkRmllbGRzKHQsZSx0aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyl9LHJlYWRGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9eG8odGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkU0ZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD1fbyh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9eG8odGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqeG8odGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRTRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PXhvKHRoaXMuYnVmLHRoaXMucG9zKSs0Mjk0OTY3Mjk2Kl9vKHRoaXMuYnVmLHRoaXMucG9zKzQpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkRmxvYXQ6ZnVuY3Rpb24oKXt2YXIgdD1ybyh0aGlzLmJ1Zix0aGlzLnBvcywhMCwyMyw0KTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZERvdWJsZTpmdW5jdGlvbigpe3ZhciB0PXJvKHRoaXMuYnVmLHRoaXMucG9zLCEwLDUyLDgpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkVmFyaW50OmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLmJ1ZjtyZXR1cm4gZT0xMjcmKHI9blt0aGlzLnBvcysrXSkscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDcscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDE0LHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDwyMSxyPDEyOD9lOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ci5idWY7aWYobj0oMTEyJihpPWFbci5wb3MrK10pKT4+NCxpPDEyOClyZXR1cm4gc28odCxuLGUpO2lmKG58PSgxMjcmKGk9YVtyLnBvcysrXSkpPDwzLGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDEwLGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDE3LGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDI0LGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEmKGk9YVtyLnBvcysrXSkpPDwzMSxpPDEyOClyZXR1cm4gc28odCxuLGUpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXMiKX0oZXw9KDE1JihyPW5bdGhpcy5wb3NdKSk8PDI4LHQsdGhpcykpKSl9LHJlYWRWYXJpbnQ2NDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfSxyZWFkU1ZhcmludDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpO3JldHVybiB0JTI9PTE/KHQrMSkvLTI6dC8yfSxyZWFkQm9vbGVhbjpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKX0scmVhZFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0iIixpPWU7aTxyOyl7dmFyIGEsbyxzLGw9dFtpXSxjPW51bGwsdT1sPjIzOT80Omw+MjIzPzM6bD4xOTE/MjoxO2lmKGkrdT5yKWJyZWFrOzE9PT11P2w8MTI4JiYoYz1sKToyPT09dT8xMjg9PSgxOTImKGE9dFtpKzFdKSkmJihjPSgzMSZsKTw8Nnw2MyZhKTw9MTI3JiYoYz1udWxsKTozPT09dT8oYT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJigoYz0oMTUmbCk8PDEyfCg2MyZhKTw8Nnw2MyZvKTw9MjA0N3x8Yz49NTUyOTYmJmM8PTU3MzQzKSYmKGM9bnVsbCkpOjQ9PT11JiYoYT10W2krMV0sbz10W2krMl0scz10W2krM10sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKChjPSgxNSZsKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk8PTY1NTM1fHxjPj0xMTE0MTEyKSYmKGM9bnVsbCkpLG51bGw9PT1jPyhjPTY1NTMzLHU9MSk6Yz42NTUzNSYmKGMtPTY1NTM2LG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYz4+PjEwJjEwMjN8NTUyOTYpLGM9NTYzMjB8MTAyMyZjKSxuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpLGkrPXV9cmV0dXJuIG59KHRoaXMuYnVmLHRoaXMucG9zLHQpO3JldHVybiB0aGlzLnBvcz10LGV9LHJlYWRCeXRlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX0scmVhZFBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe3ZhciByPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fSxyZWFkUGFja2VkU1ZhcmludDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGbG9hdDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWREb3VibGU6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZpeGVkMzI6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiB0fSxyZWFkUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3JldHVybiB0fSxza2lwOmZ1bmN0aW9uKHQpe3ZhciBlPTcmdDtpZihlPT09YW8uVmFyaW50KWZvcig7dGhpcy5idWZbdGhpcy5wb3MrK10+MTI3Oyk7ZWxzZSBpZihlPT09YW8uQnl0ZXMpdGhpcy5wb3M9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3M7ZWxzZSBpZihlPT09YW8uRml4ZWQzMil0aGlzLnBvcys9NDtlbHNle2lmKGUhPT1hby5GaXhlZDY0KXRocm93IG5ldyBFcnJvcigiVW5pbXBsZW1lbnRlZCB0eXBlOiAiK2UpO3RoaXMucG9zKz04fX0sd3JpdGVUYWc6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50KHQ8PDN8ZSl9LHJlYWxsb2M6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMubGVuZ3RofHwxNjtlPHRoaXMucG9zK3Q7KWUqPTI7aWYoZSE9PXRoaXMubGVuZ3RoKXt2YXIgcj1uZXcgVWludDhBcnJheShlKTtyLnNldCh0aGlzLmJ1ZiksdGhpcy5idWY9cix0aGlzLmxlbmd0aD1lfX0sZmluaXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoPXRoaXMucG9zLHRoaXMucG9zPTAsdGhpcy5idWYuc3ViYXJyYXkoMCx0aGlzLmxlbmd0aCl9LHdyaXRlRml4ZWQzMjpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksYm8odGhpcy5idWYsdCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlU0ZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLGJvKHRoaXMuYnVmLHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZUZpeGVkNjQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDgpLGJvKHRoaXMuYnVmLC0xJnQsdGhpcy5wb3MpLGJvKHRoaXMuYnVmLE1hdGguZmxvb3IodCooMS80Mjk0OTY3Mjk2KSksdGhpcy5wb3MrNCksdGhpcy5wb3MrPTh9LHdyaXRlU0ZpeGVkNjQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDgpLGJvKHRoaXMuYnVmLC0xJnQsdGhpcy5wb3MpLGJvKHRoaXMuYnVmLE1hdGguZmxvb3IodCooMS80Mjk0OTY3Mjk2KSksdGhpcy5wb3MrNCksdGhpcy5wb3MrPTh9LHdyaXRlVmFyaW50OmZ1bmN0aW9uKHQpeyh0PSt0fHwwKT4yNjg0MzU0NTV8fHQ8MD9mdW5jdGlvbih0LGUpe3ZhciByLG47aWYodD49MD8ocj10JTQyOTQ5NjcyOTZ8MCxuPXQvNDI5NDk2NzI5NnwwKToobj1+KC10LzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTVeKHI9figtdCU0Mjk0OTY3Mjk2KSk/cj1yKzF8MDoocj0wLG49bisxfDApKSx0Pj0weDEwMDAwMDAwMDAwMDAwMDAwfHx0PC0weDEwMDAwMDAwMDAwMDAwMDAwKXRocm93IG5ldyBFcnJvcigiR2l2ZW4gdmFyaW50IGRvZXNuJ3QgZml0IGludG8gMTAgYnl0ZXMiKTtlLnJlYWxsb2MoMTApLGZ1bmN0aW9uKHQsZSxyKXtyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zXT0xMjcmdH0ociwwLGUpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9KDcmdCk8PDQ7ZS5idWZbZS5wb3MrK118PXJ8KCh0Pj4+PTMpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnQpKSkpKX0obixlKX0odCx0aGlzKToodGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyZ0fCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109MTI3Jih0Pj4+PTcpfCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109MTI3Jih0Pj4+PTcpfCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109dD4+PjcmMTI3KSkpKX0sd3JpdGVTVmFyaW50OmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQodDwwPzIqLXQtMToyKnQpfSx3cml0ZUJvb2xlYW46ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludChCb29sZWFuKHQpKX0sd3JpdGVTdHJpbmc6ZnVuY3Rpb24odCl7dD1TdHJpbmcodCksdGhpcy5yZWFsbG9jKDQqdC5sZW5ndGgpLHRoaXMucG9zKys7dmFyIGU9dGhpcy5wb3M7dGhpcy5wb3M9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9MDthPGUubGVuZ3RoO2ErKyl7aWYoKG49ZS5jaGFyQ29kZUF0KGEpKT41NTI5NSYmbjw1NzM0NCl7aWYoIWkpe24+NTYzMTl8fGErMT09PWUubGVuZ3RoPyh0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSk6aT1uO2NvbnRpbnVlfWlmKG48NTYzMjApe3RbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5LGk9bjtjb250aW51ZX1uPWktNTUyOTY8PDEwfG4tNTYzMjB8NjU1MzYsaT1udWxsfWVsc2UgaSYmKHRbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5LGk9bnVsbCk7bjwxMjg/dFtyKytdPW46KG48MjA0OD90W3IrK109bj4+NnwxOTI6KG48NjU1MzY/dFtyKytdPW4+PjEyfDIyNDoodFtyKytdPW4+PjE4fDI0MCx0W3IrK109bj4+MTImNjN8MTI4KSx0W3IrK109bj4+NiY2M3wxMjgpLHRbcisrXT02MyZufDEyOCl9cmV0dXJuIHJ9KHRoaXMuYnVmLHQsdGhpcy5wb3MpO3ZhciByPXRoaXMucG9zLWU7cj49MTI4JiZsbyhlLHIsdGhpcyksdGhpcy5wb3M9ZS0xLHRoaXMud3JpdGVWYXJpbnQociksdGhpcy5wb3MrPXJ9LHdyaXRlRmxvYXQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLG5vKHRoaXMuYnVmLHQsdGhpcy5wb3MsITAsMjMsNCksdGhpcy5wb3MrPTR9LHdyaXRlRG91YmxlOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxubyh0aGlzLmJ1Zix0LHRoaXMucG9zLCEwLDUyLDgpLHRoaXMucG9zKz04fSx3cml0ZUJ5dGVzOmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3RoaXMud3JpdGVWYXJpbnQoZSksdGhpcy5yZWFsbG9jKGUpO2Zvcih2YXIgcj0wO3I8ZTtyKyspdGhpcy5idWZbdGhpcy5wb3MrK109dFtyXX0sd3JpdGVSYXdNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5wb3MrKzt2YXIgcj10aGlzLnBvczt0KGUsdGhpcyk7dmFyIG49dGhpcy5wb3MtcjtuPj0xMjgmJmxvKHIsbix0aGlzKSx0aGlzLnBvcz1yLTEsdGhpcy53cml0ZVZhcmludChuKSx0aGlzLnBvcys9bn0sd3JpdGVNZXNzYWdlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLndyaXRlVGFnKHQsYW8uQnl0ZXMpLHRoaXMud3JpdGVSYXdNZXNzYWdlKGUscil9LHdyaXRlUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxjbyxlKX0sd3JpdGVQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCx1byxlKX0sd3JpdGVQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxwbyxlKX0sd3JpdGVQYWNrZWRGbG9hdDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsZm8sZSl9LHdyaXRlUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxobyxlKX0sd3JpdGVQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxnbyxlKX0sd3JpdGVQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsdm8sZSl9LHdyaXRlUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsbW8sZSl9LHdyaXRlUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHlvLGUpfSx3cml0ZUJ5dGVzRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uQnl0ZXMpLHRoaXMud3JpdGVCeXRlcyhlKX0sd3JpdGVGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQzMiksdGhpcy53cml0ZUZpeGVkMzIoZSl9LHdyaXRlU0ZpeGVkMzJGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDMyKSx0aGlzLndyaXRlU0ZpeGVkMzIoZSl9LHdyaXRlRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkNjQpLHRoaXMud3JpdGVGaXhlZDY0KGUpfSx3cml0ZVNGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQ2NCksdGhpcy53cml0ZVNGaXhlZDY0KGUpfSx3cml0ZVZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLlZhcmludCksdGhpcy53cml0ZVZhcmludChlKX0sd3JpdGVTVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uVmFyaW50KSx0aGlzLndyaXRlU1ZhcmludChlKX0sd3JpdGVTdHJpbmdGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5CeXRlcyksdGhpcy53cml0ZVN0cmluZyhlKX0sd3JpdGVGbG9hdEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkMzIpLHRoaXMud3JpdGVGbG9hdChlKX0sd3JpdGVEb3VibGVGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDY0KSx0aGlzLndyaXRlRG91YmxlKGUpfSx3cml0ZUJvb2xlYW5GaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnRGaWVsZCh0LEJvb2xlYW4oZSkpfX07dmFyIHdvPTM7ZnVuY3Rpb24ga28odCxlLHIpezE9PT10JiZyLnJlYWRNZXNzYWdlKFRvLGUpfWZ1bmN0aW9uIFRvKHQsZSxyKXtpZigzPT09dCl7dmFyIG49ci5yZWFkTWVzc2FnZShBbyx7fSksaT1uLmlkLGE9bi5iaXRtYXAsbz1uLndpZHRoLHM9bi5oZWlnaHQsbD1uLmxlZnQsYz1uLnRvcCx1PW4uYWR2YW5jZTtlLnB1c2goe2lkOmksYml0bWFwOm5ldyBjaSh7d2lkdGg6bysyKndvLGhlaWdodDpzKzIqd299LGEpLG1ldHJpY3M6e3dpZHRoOm8saGVpZ2h0OnMsbGVmdDpsLHRvcDpjLGFkdmFuY2U6dX19KX19ZnVuY3Rpb24gQW8odCxlLHIpezE9PT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5iaXRtYXA9ci5yZWFkQnl0ZXMoKTozPT09dD9lLndpZHRoPXIucmVhZFZhcmludCgpOjQ9PT10P2UuaGVpZ2h0PXIucmVhZFZhcmludCgpOjU9PT10P2UubGVmdD1yLnJlYWRTVmFyaW50KCk6Nj09PXQ/ZS50b3A9ci5yZWFkU1ZhcmludCgpOjc9PT10JiYoZS5hZHZhbmNlPXIucmVhZFZhcmludCgpKX12YXIgTW89d28sU289ZnVuY3Rpb24odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy5wYXJlbnQ9ZSx0aGlzLm1hcElkPXIsdGhpcy5jYWxsYmFja3M9e30sdGhpcy5jYWxsYmFja0lEPTAsZyhbInJlY2VpdmUiXSx0aGlzKSx0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLnJlY2VpdmUsITEpfTtTby5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yP3RoaXMubWFwSWQrIjoiK3RoaXMuY2FsbGJhY2tJRCsrOm51bGw7ciYmKHRoaXMuY2FsbGJhY2tzW2ldPXIpO3ZhciBhPVtdO3RoaXMudGFyZ2V0LnBvc3RNZXNzYWdlKHt0YXJnZXRNYXBJZDpuLHNvdXJjZU1hcElkOnRoaXMubWFwSWQsdHlwZTp0LGlkOlN0cmluZyhpKSxkYXRhOmdyKGUsYSl9LGEpfSxTby5wcm90b3R5cGUucmVjZWl2ZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMsbj10LmRhdGEsaT1uLmlkO2lmKCFuLnRhcmdldE1hcElkfHx0aGlzLm1hcElkPT09bi50YXJnZXRNYXBJZCl7dmFyIGE9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXTtyLnRhcmdldC5wb3N0TWVzc2FnZSh7c291cmNlTWFwSWQ6ci5tYXBJZCx0eXBlOiI8cmVzcG9uc2U+IixpZDpTdHJpbmcoaSksZXJyb3I6dD9ncih0KTpudWxsLGRhdGE6Z3IoZSxuKX0sbil9O2lmKCI8cmVzcG9uc2U+Ij09PW4udHlwZSllPXRoaXMuY2FsbGJhY2tzW24uaWRdLGRlbGV0ZSB0aGlzLmNhbGxiYWNrc1tuLmlkXSxlJiZuLmVycm9yP2UodnIobi5lcnJvcikpOmUmJmUobnVsbCx2cihuLmRhdGEpKTtlbHNlIGlmKHZvaWQgMCE9PW4uaWQmJnRoaXMucGFyZW50W24udHlwZV0pdGhpcy5wYXJlbnRbbi50eXBlXShuLnNvdXJjZU1hcElkLHZyKG4uZGF0YSksYSk7ZWxzZSBpZih2b2lkIDAhPT1uLmlkJiZ0aGlzLnBhcmVudC5nZXRXb3JrZXJTb3VyY2Upe3ZhciBvPW4udHlwZS5zcGxpdCgiLiIpO3RoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZShuLnNvdXJjZU1hcElkLG9bMF0sb1sxXSlbb1syXV0odnIobi5kYXRhKSxhKX1lbHNlIHRoaXMucGFyZW50W24udHlwZV0odnIobi5kYXRhKSl9fSxTby5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5yZWNlaXZlLCExKX07dmFyIEVvPW4oaShmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxuKXt2YXIgaT1yKDI1Nip0LDI1NiooZT1NYXRoLnBvdygyLG4pLWUtMSksbiksYT1yKDI1NioodCsxKSwyNTYqKGUrMSksbik7cmV0dXJuIGlbMF0rIiwiK2lbMV0rIiwiK2FbMF0rIiwiK2FbMV19ZnVuY3Rpb24gcih0LGUscil7dmFyIG49MipNYXRoLlBJKjYzNzgxMzcvMjU2L01hdGgucG93KDIscik7cmV0dXJuW3Qqbi0yKk1hdGguUEkqNjM3ODEzNy8yLGUqbi0yKk1hdGguUEkqNjM3ODEzNy8yXX10LmdldFVSTD1mdW5jdGlvbih0LHIsbixpLGEsbyl7cmV0dXJuIG89b3x8e30sdCsiPyIrWyJiYm94PSIrZShuLGksYSksImZvcm1hdD0iKyhvLmZvcm1hdHx8ImltYWdlL3BuZyIpLCJzZXJ2aWNlPSIrKG8uc2VydmljZXx8IldNUyIpLCJ2ZXJzaW9uPSIrKG8udmVyc2lvbnx8IjEuMS4xIiksInJlcXVlc3Q9Iisoby5yZXF1ZXN0fHwiR2V0TWFwIiksInNycz0iKyhvLnNyc3x8IkVQU0c6Mzg1NyIpLCJ3aWR0aD0iKyhvLndpZHRofHwyNTYpLCJoZWlnaHQ9Iisoby5oZWlnaHR8fDI1NiksImxheWVycz0iK3JdLmpvaW4oIiYiKX0sdC5nZXRUaWxlQkJveD1lLHQuZ2V0TWVyY0Nvb3Jkcz1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oZSl9KSksQ289ZnVuY3Rpb24odCxlLHIpe3RoaXMuej10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMua2V5PU9vKDAsdCxlLHIpfTtDby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLno9PT10LnomJnRoaXMueD09PXQueCYmdGhpcy55PT09dC55fSxDby5wcm90b3R5cGUudXJsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9RW8uZ2V0VGlsZUJCb3godGhpcy54LHRoaXMueSx0aGlzLnopLG49ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPSIiLGE9dDthPjA7YS0tKWkrPShlJihuPTE8PGEtMSk/MTowKSsociZuPzI6MCk7cmV0dXJuIGl9KHRoaXMueix0aGlzLngsdGhpcy55KTtyZXR1cm4gdFsodGhpcy54K3RoaXMueSkldC5sZW5ndGhdLnJlcGxhY2UoIntwcmVmaXh9IiwodGhpcy54JTE2KS50b1N0cmluZygxNikrKHRoaXMueSUxNikudG9TdHJpbmcoMTYpKS5yZXBsYWNlKCJ7en0iLFN0cmluZyh0aGlzLnopKS5yZXBsYWNlKCJ7eH0iLFN0cmluZyh0aGlzLngpKS5yZXBsYWNlKCJ7eX0iLFN0cmluZygidG1zIj09PWU/TWF0aC5wb3coMix0aGlzLnopLXRoaXMueS0xOnRoaXMueSkpLnJlcGxhY2UoIntxdWFka2V5fSIsbikucmVwbGFjZSgie2Jib3gtZXBzZy0zODU3fSIscil9O3ZhciBMbz1mdW5jdGlvbih0LGUpe3RoaXMud3JhcD10LHRoaXMuY2Fub25pY2FsPWUsdGhpcy5rZXk9T28odCxlLnosZS54LGUueSl9LHpvPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5vdmVyc2NhbGVkWj10LHRoaXMud3JhcD1lLHRoaXMuY2Fub25pY2FsPW5ldyBDbyhyLCtuLCtpKSx0aGlzLmtleT1PbyhlLHQsbixpKX07ZnVuY3Rpb24gT28odCxlLHIsbil7KHQqPTIpPDAmJih0PS0xKnQtMSk7dmFyIGk9MTw8ZTtyZXR1cm4gMzIqKGkqaSp0K2kqbityKStlfXpvLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3ZlcnNjYWxlZFo9PT10Lm92ZXJzY2FsZWRaJiZ0aGlzLndyYXA9PT10LndyYXAmJnRoaXMuY2Fub25pY2FsLmVxdWFscyh0LmNhbm9uaWNhbCl9LHpvLnByb3RvdHlwZS5zY2FsZWRUbz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNhbm9uaWNhbC56LXQ7cmV0dXJuIHQ+dGhpcy5jYW5vbmljYWwuej9uZXcgem8odCx0aGlzLndyYXAsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpOm5ldyB6byh0LHRoaXMud3JhcCx0LHRoaXMuY2Fub25pY2FsLng+PmUsdGhpcy5jYW5vbmljYWwueT4+ZSl9LHpvLnByb3RvdHlwZS5pc0NoaWxkT2Y9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10LmNhbm9uaWNhbC56O3JldHVybiAwPT09dC5vdmVyc2NhbGVkWnx8dC5vdmVyc2NhbGVkWjx0aGlzLm92ZXJzY2FsZWRaJiZ0LmNhbm9uaWNhbC54PT09dGhpcy5jYW5vbmljYWwueD4+ZSYmdC5jYW5vbmljYWwueT09PXRoaXMuY2Fub25pY2FsLnk+PmV9LHpvLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZih0aGlzLm92ZXJzY2FsZWRaPj10KXJldHVybltuZXcgem8odGhpcy5vdmVyc2NhbGVkWisxLHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSldO3ZhciBlPXRoaXMuY2Fub25pY2FsLnorMSxyPTIqdGhpcy5jYW5vbmljYWwueCxuPTIqdGhpcy5jYW5vbmljYWwueTtyZXR1cm5bbmV3IHpvKGUsdGhpcy53cmFwLGUscixuKSxuZXcgem8oZSx0aGlzLndyYXAsZSxyKzEsbiksbmV3IHpvKGUsdGhpcy53cmFwLGUscixuKzEpLG5ldyB6byhlLHRoaXMud3JhcCxlLHIrMSxuKzEpXX0sem8ucHJvdG90eXBlLmlzTGVzc1RoYW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud3JhcDx0LndyYXB8fCEodGhpcy53cmFwPnQud3JhcCkmJih0aGlzLm92ZXJzY2FsZWRaPHQub3ZlcnNjYWxlZFp8fCEodGhpcy5vdmVyc2NhbGVkWj50Lm92ZXJzY2FsZWRaKSYmKHRoaXMuY2Fub25pY2FsLng8dC5jYW5vbmljYWwueHx8ISh0aGlzLmNhbm9uaWNhbC54PnQuY2Fub25pY2FsLngpJiZ0aGlzLmNhbm9uaWNhbC55PHQuY2Fub25pY2FsLnkpKX0sem8ucHJvdG90eXBlLndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHpvKHRoaXMub3ZlcnNjYWxlZFosMCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LHpvLnByb3RvdHlwZS51bndyYXBUbz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHpvKHRoaXMub3ZlcnNjYWxlZFosdCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LHpvLnByb3RvdHlwZS5vdmVyc2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5wb3coMix0aGlzLm92ZXJzY2FsZWRaLXRoaXMuY2Fub25pY2FsLnopfSx6by5wcm90b3R5cGUudG9VbndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExvKHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbCl9LHpvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaKyIvIit0aGlzLmNhbm9uaWNhbC54KyIvIit0aGlzLmNhbm9uaWNhbC55fSx6by5wcm90b3R5cGUudG9Db29yZGluYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKHRoaXMuY2Fub25pY2FsLngrTWF0aC5wb3coMix0aGlzLndyYXApLHRoaXMuY2Fub25pY2FsLnksdGhpcy5jYW5vbmljYWwueil9LHByKCJDYW5vbmljYWxUaWxlSUQiLENvKSxwcigiT3ZlcnNjYWxlZFRpbGVJRCIsem8se29taXQ6WyJwb3NNYXRyaXgiXX0pO3ZhciBJbz1mdW5jdGlvbih0LGUscil7aWYodDw9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTGV2ZWwgbXVzdCBoYXZlIHBvc2l0aXZlIGRpbWVuc2lvbiIpO3RoaXMuZGltPXQsdGhpcy5ib3JkZXI9ZSx0aGlzLnN0cmlkZT10aGlzLmRpbSsyKnRoaXMuYm9yZGVyLHRoaXMuZGF0YT1yfHxuZXcgSW50MzJBcnJheSgodGhpcy5kaW0rMip0aGlzLmJvcmRlcikqKHRoaXMuZGltKzIqdGhpcy5ib3JkZXIpKX07SW8ucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUscil7dGhpcy5kYXRhW3RoaXMuX2lkeCh0LGUpXT1yKzY1NTM2fSxJby5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YVt0aGlzLl9pZHgodCxlKV0tNjU1MzZ9LElvLnByb3RvdHlwZS5faWR4PWZ1bmN0aW9uKHQsZSl7aWYodDwtdGhpcy5ib3JkZXJ8fHQ+PXRoaXMuZGltK3RoaXMuYm9yZGVyfHxlPC10aGlzLmJvcmRlcnx8ZT49dGhpcy5kaW0rdGhpcy5ib3JkZXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIERFTSBkYXRhIik7cmV0dXJuKGUrdGhpcy5ib3JkZXIpKnRoaXMuc3RyaWRlKyh0K3RoaXMuYm9yZGVyKX0scHIoIkxldmVsIixJbyk7dmFyIERvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnVpZD10LHRoaXMuc2NhbGU9ZXx8MSx0aGlzLmxldmVsPXJ8fG5ldyBJbygyNTYsNTEyKSx0aGlzLmxvYWRlZD0hIXJ9O0RvLnByb3RvdHlwZS5sb2FkRnJvbUltYWdlPWZ1bmN0aW9uKHQsZSl7aWYodC5oZWlnaHQhPT10LndpZHRoKXRocm93IG5ldyBSYW5nZUVycm9yKCJERU0gdGlsZXMgbXVzdCBiZSBzcXVhcmUiKTtpZihlJiYibWFwYm94IiE9PWUmJiJ0ZXJyYXJpdW0iIT09ZSlyZXR1cm4gXygnIicrZSsnIiBpcyBub3QgYSB2YWxpZCBlbmNvZGluZyB0eXBlLiBWYWxpZCB0eXBlcyBpbmNsdWRlICJtYXBib3giIGFuZCAidGVycmFyaXVtIi4nKTt2YXIgcj10aGlzLmxldmVsPW5ldyBJbyh0LndpZHRoLHQud2lkdGgvMiksbj10LmRhdGE7dGhpcy5fdW5wYWNrRGF0YShyLG4sZXx8Im1hcGJveCIpO2Zvcih2YXIgaT0wO2k8ci5kaW07aSsrKXIuc2V0KC0xLGksci5nZXQoMCxpKSksci5zZXQoci5kaW0saSxyLmdldChyLmRpbS0xLGkpKSxyLnNldChpLC0xLHIuZ2V0KGksMCkpLHIuc2V0KGksci5kaW0sci5nZXQoaSxyLmRpbS0xKSk7ci5zZXQoLTEsLTEsci5nZXQoMCwwKSksci5zZXQoci5kaW0sLTEsci5nZXQoci5kaW0tMSwwKSksci5zZXQoLTEsci5kaW0sci5nZXQoMCxyLmRpbS0xKSksci5zZXQoci5kaW0sci5kaW0sci5nZXQoci5kaW0tMSxyLmRpbS0xKSksdGhpcy5sb2FkZWQ9ITB9LERvLnByb3RvdHlwZS5fdW5wYWNrTWFwYm94PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4oMjU2KnQqMjU2KzI1NiplK3IpLzEwLTFlNH0sRG8ucHJvdG90eXBlLl91bnBhY2tUZXJyYXJpdW09ZnVuY3Rpb24odCxlLHIpe3JldHVybiAyNTYqdCtlK3IvMjU2LTMyNzY4fSxEby5wcm90b3R5cGUuX3VucGFja0RhdGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj17bWFwYm94OnRoaXMuX3VucGFja01hcGJveCx0ZXJyYXJpdW06dGhpcy5fdW5wYWNrVGVycmFyaXVtfVtyXSxpPTA7aTx0LmRpbTtpKyspZm9yKHZhciBhPTA7YTx0LmRpbTthKyspe3ZhciBvPTQqKGkqdC5kaW0rYSk7dC5zZXQoYSxpLHRoaXMuc2NhbGUqbihlW29dLGVbbysxXSxlW28rMl0pKX19LERvLnByb3RvdHlwZS5nZXRQaXhlbHM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVpKHt3aWR0aDp0aGlzLmxldmVsLmRpbSsyKnRoaXMubGV2ZWwuYm9yZGVyLGhlaWdodDp0aGlzLmxldmVsLmRpbSsyKnRoaXMubGV2ZWwuYm9yZGVyfSxuZXcgVWludDhBcnJheSh0aGlzLmxldmVsLmRhdGEuYnVmZmVyKSl9LERvLnByb3RvdHlwZS5iYWNrZmlsbEJvcmRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZXZlbCxpPXQubGV2ZWw7aWYobi5kaW0hPT1pLmRpbSl0aHJvdyBuZXcgRXJyb3IoImxldmVsIG1pc21hdGNoIChkZW0gZGltZW5zaW9uKSIpO3ZhciBhPWUqbi5kaW0sbz1lKm4uZGltK24uZGltLHM9cipuLmRpbSxsPXIqbi5kaW0rbi5kaW07c3dpdGNoKGUpe2Nhc2UtMTphPW8tMTticmVhaztjYXNlIDE6bz1hKzF9c3dpdGNoKHIpe2Nhc2UtMTpzPWwtMTticmVhaztjYXNlIDE6bD1zKzF9Zm9yKHZhciBjPWgoYSwtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLHU9aChvLC1uLmJvcmRlcixuLmRpbStuLmJvcmRlciksZj1oKHMsLW4uYm9yZGVyLG4uZGltK24uYm9yZGVyKSxwPWgobCwtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLGQ9LWUqbi5kaW0sZz0tcipuLmRpbSx2PWY7djxwO3YrKylmb3IodmFyIG09YzttPHU7bSsrKW4uc2V0KG0sdixpLmdldChtK2QsditnKSl9LHByKCJERU1EYXRhIixEbyk7dmFyIFBvPWZ1bmN0aW9uKHQpe3RoaXMuX3N0cmluZ1RvTnVtYmVyPXt9LHRoaXMuX251bWJlclRvU3RyaW5nPVtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RoaXMuX3N0cmluZ1RvTnVtYmVyW3JdPWUsdGhpcy5fbnVtYmVyVG9TdHJpbmdbZV09cn19O1BvLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3RdfSxQby5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1t0XX07dmFyIFJvPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT0iRmVhdHVyZSIsdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU9dCx0Ll96PWUsdC5feD1yLHQuX3k9bix0aGlzLnByb3BlcnRpZXM9dC5wcm9wZXJ0aWVzLG51bGwhPXQuaWQmJih0aGlzLmlkPXQuaWQpfSxGbz17Z2VvbWV0cnk6e2NvbmZpZ3VyYWJsZTohMH19O0ZvLmdlb21ldHJ5LmdldD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLl9nZW9tZXRyeSYmKHRoaXMuX2dlb21ldHJ5PXRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTih0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feCx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feSx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feikuZ2VvbWV0cnkpLHRoaXMuX2dlb21ldHJ5fSxGby5nZW9tZXRyeS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fZ2VvbWV0cnk9dH0sUm8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciB0PXtnZW9tZXRyeTp0aGlzLmdlb21ldHJ5fTtmb3IodmFyIGUgaW4gdGhpcykiX2dlb21ldHJ5IiE9PWUmJiJfdmVjdG9yVGlsZUZlYXR1cmUiIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJvLnByb3RvdHlwZSxGbyk7dmFyIEJvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMueD10LmNhbm9uaWNhbC54LHRoaXMueT10LmNhbm9uaWNhbC55LHRoaXMuej10LmNhbm9uaWNhbC56LHRoaXMuZ3JpZD1lfHxuZXcgbHIoUG4sMTYsMCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1yfHxuZXcgVG59O2Z1bmN0aW9uIE5vKHQsZSl7cmV0dXJuIGUtdH1Cby5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5sZW5ndGg7dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5lbXBsYWNlQmFjayhyLG4saSk7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspe2Zvcih2YXIgcz1lW29dLGw9WzEvMCwxLzAsLTEvMCwtMS8wXSxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciB1PXNbY107bFswXT1NYXRoLm1pbihsWzBdLHUueCksbFsxXT1NYXRoLm1pbihsWzFdLHUueSksbFsyXT1NYXRoLm1heChsWzJdLHUueCksbFszXT1NYXRoLm1heChsWzNdLHUueSl9bFswXTxQbiYmbFsxXTxQbiYmbFsyXT49MCYmbFszXT49MCYmdGhpcy5ncmlkLmluc2VydChhLGxbMF0sbFsxXSxsWzJdLGxbM10pfX0sQm8ucHJvdG90eXBlLmxvYWRWVExheWVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZ0TGF5ZXJzfHwodGhpcy52dExheWVycz1uZXcgZ2EuVmVjdG9yVGlsZShuZXcgaW8odGhpcy5yYXdUaWxlRGF0YSkpLmxheWVycyx0aGlzLnNvdXJjZUxheWVyQ29kZXI9bmV3IFBvKHRoaXMudnRMYXllcnM/T2JqZWN0LmtleXModGhpcy52dExheWVycykuc29ydCgpOlsiX2dlb2pzb25UaWxlTGF5ZXIiXSkpLHRoaXMudnRMYXllcnN9LEJvLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dGhpcy5sb2FkVlRMYXllcnMoKTtmb3IodmFyIG49dC5wYXJhbXN8fHt9LGk9UG4vdC50aWxlU2l6ZS90LnNjYWxlLGE9UmUobi5maWx0ZXIpLG89dC5xdWVyeUdlb21ldHJ5LHM9dC5xdWVyeVBhZGRpbmcqaSxsPTEvMCxjPTEvMCx1PS0xLzAsZj0tMS8wLGg9MDtoPG8ubGVuZ3RoO2grKylmb3IodmFyIHA9b1toXSxkPTA7ZDxwLmxlbmd0aDtkKyspe3ZhciBnPXBbZF07bD1NYXRoLm1pbihsLGcueCksYz1NYXRoLm1pbihjLGcueSksdT1NYXRoLm1heCh1LGcueCksZj1NYXRoLm1heChmLGcueSl9dmFyIHY9dGhpcy5ncmlkLnF1ZXJ5KGwtcyxjLXMsdStzLGYrcyk7di5zb3J0KE5vKTtmb3IodmFyIG0seT17fSx4PWZ1bmN0aW9uKHMpe3ZhciBsPXZbc107aWYobCE9PW0pe209bDt2YXIgYz1yLmZlYXR1cmVJbmRleEFycmF5LmdldChsKSx1PW51bGw7ci5sb2FkTWF0Y2hpbmdGZWF0dXJlKHksYy5idWNrZXRJbmRleCxjLnNvdXJjZUxheWVySW5kZXgsYy5mZWF0dXJlSW5kZXgsYSxuLmxheWVycyxlLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHV8fCh1PUZuKGUpKSxuLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUobyxlLHUsci56LHQudHJhbnNmb3JtLGksdC5wb3NNYXRyaXgpfSl9fSxiPTA7Yjx2Lmxlbmd0aDtiKyspeChiKTtyZXR1cm4geX0sQm8ucHJvdG90eXBlLmxvYWRNYXRjaGluZ0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD10aGlzLmJ1Y2tldExheWVySURzW2VdO2lmKCFhfHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGUuaW5kZXhPZih0W3JdKT49MClyZXR1cm4hMDtyZXR1cm4hMX0oYSxsKSl7dmFyIGM9dGhpcy5zb3VyY2VMYXllckNvZGVyLmRlY29kZShyKSx1PXRoaXMudnRMYXllcnNbY10uZmVhdHVyZShuKTtpZihpKG5ldyBMcih0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWiksdSkpZm9yKHZhciBmPTA7ZjxsLmxlbmd0aDtmKyspe3ZhciBoPWxbZl07aWYoIShhJiZhLmluZGV4T2YoaCk8MCkpe3ZhciBwPW9baF07aWYocCYmKCFzfHxzKHUscCkpKXt2YXIgZD1uZXcgUm8odSx0aGlzLnosdGhpcy54LHRoaXMueSk7ZC5sYXllcj1wLnNlcmlhbGl6ZSgpO3ZhciBnPXRbaF07dm9pZCAwPT09ZyYmKGc9dFtoXT1bXSksZy5wdXNoKHtmZWF0dXJlSW5kZXg6bixmZWF0dXJlOmR9KX19fX19LEJvLnByb3RvdHlwZS5sb29rdXBTeW1ib2xGZWF0dXJlcz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89e307dGhpcy5sb2FkVlRMYXllcnMoKTtmb3IodmFyIHM9UmUobiksbD0wLGM9dDtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF07dGhpcy5sb2FkTWF0Y2hpbmdGZWF0dXJlKG8sZSxyLHUscyxpLGEpfXJldHVybiBvfSxCby5wcm90b3R5cGUuaGFzTGF5ZXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJ1Y2tldExheWVySURzO2U8ci5sZW5ndGg7ZSs9MSlmb3IodmFyIG49MCxpPXJbZV07bjxpLmxlbmd0aDtuKz0xKWlmKHQ9PT1pW25dKXJldHVybiEwO3JldHVybiExfSxwcigiRmVhdHVyZUluZGV4IixCbyx7b21pdDpbInJhd1RpbGVEYXRhIiwic291cmNlTGF5ZXJDb2RlciJdfSk7dmFyIGpvPXtob3Jpem9udGFsOjEsdmVydGljYWw6Mixob3Jpem9udGFsT25seTozfSxWbz17OTohMCwxMDohMCwxMTohMCwxMjohMCwxMzohMCwzMjohMH0sVW89e307ZnVuY3Rpb24gcW8odCxlLHIsbil7dmFyIGk9TWF0aC5wb3codC1lLDIpO3JldHVybiBuP3Q8ZT9pLzI6MippOmkrTWF0aC5hYnMocikqcn1mdW5jdGlvbiBIbyh0LGUpe3ZhciByPTA7cmV0dXJuIDEwPT09dCYmKHItPTFlNCksNDAhPT10JiY2NTI4OCE9PXR8fChyKz01MCksNDEhPT1lJiY2NTI4OSE9PWV8fChyKz01MCkscn1mdW5jdGlvbiBHbyh0LGUscixuLGksYSl7Zm9yKHZhciBvPW51bGwscz1xbyhlLHIsaSxhKSxsPTAsYz1uO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPXFvKGUtdS54LHIsaSxhKSt1LmJhZG5lc3M7Zjw9cyYmKG89dSxzPWYpfXJldHVybntpbmRleDp0LHg6ZSxwcmlvckJyZWFrOm8sYmFkbmVzczpzfX1mdW5jdGlvbiBZbyh0LGUscixuKXtpZighcilyZXR1cm5bXTtpZighdClyZXR1cm5bXTtmb3IodmFyIGksYT1bXSxvPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89blt0LmNoYXJDb2RlQXQoYSldO28mJihpKz1vLm1ldHJpY3MuYWR2YW5jZStlKX1yZXR1cm4gaS9NYXRoLm1heCgxLE1hdGguY2VpbChpL3IpKX0odCxlLHIsbikscz0wLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dC5jaGFyQ29kZUF0KGwpLHU9bltjXTt1JiYhVm9bY10mJihzKz11Lm1ldHJpY3MuYWR2YW5jZStlKSxsPHQubGVuZ3RoLTEmJihVb1tjXXx8ISgoaT1jKTwxMTkwNCkmJih5clsiQm9wb21vZm8gRXh0ZW5kZWQiXShpKXx8eXIuQm9wb21vZm8oaSl8fHlyWyJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyJdKGkpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyJdKGkpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkiXShpKXx8eXJbIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50Il0oaSl8fHlyWyJDSksgU3Ryb2tlcyJdKGkpfHx5clsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0oaSl8fHlyWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBIl0oaSl8fHlyWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0oaSl8fHlyWyJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIl0oaSl8fHlyWyJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyJdKGkpfHx5ci5IaXJhZ2FuYShpKXx8eXJbIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiXShpKXx8eXJbIkthbmd4aSBSYWRpY2FscyJdKGkpfHx5clsiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyJdKGkpfHx5ci5LYXRha2FuYShpKXx8eXJbIlZlcnRpY2FsIEZvcm1zIl0oaSl8fHlyWyJZaSBSYWRpY2FscyJdKGkpfHx5clsiWWkgU3lsbGFibGVzIl0oaSkpKSYmYS5wdXNoKEdvKGwrMSxzLG8sYSxIbyhjLHQuY2hhckNvZGVBdChsKzEpKSwhMSkpfXJldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlP3QoZS5wcmlvckJyZWFrKS5jb25jYXQoZS5pbmRleCk6W119KEdvKHQubGVuZ3RoLHMsbyxhLDAsITApKX1mdW5jdGlvbiBXbyh0KXt2YXIgZT0uNSxyPS41O3N3aXRjaCh0KXtjYXNlInJpZ2h0IjpjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOmU9MTticmVhaztjYXNlImxlZnQiOmNhc2UidG9wLWxlZnQiOmNhc2UiYm90dG9tLWxlZnQiOmU9MH1zd2l0Y2godCl7Y2FzZSJib3R0b20iOmNhc2UiYm90dG9tLXJpZ2h0IjpjYXNlImJvdHRvbS1sZWZ0IjpyPTE7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UidG9wLXJpZ2h0IjpjYXNlInRvcC1sZWZ0IjpyPTB9cmV0dXJue2hvcml6b250YWxBbGlnbjplLHZlcnRpY2FsQWxpZ246cn19ZnVuY3Rpb24gWG8odCxlLHIsbixpKXtpZihpKXt2YXIgYT1lW3Rbbl0uZ2x5cGhdO2lmKGEpZm9yKHZhciBvPWEubWV0cmljcy5hZHZhbmNlLHM9KHRbbl0ueCtvKSppLGw9cjtsPD1uO2wrKyl0W2xdLngtPXN9fVVvWzEwXT0hMCxVb1szMl09ITAsVW9bMzhdPSEwLFVvWzQwXT0hMCxVb1s0MV09ITAsVW9bNDNdPSEwLFVvWzQ1XT0hMCxVb1s0N109ITAsVW9bMTczXT0hMCxVb1sxODNdPSEwLFVvWzgyMDNdPSEwLFVvWzgyMDhdPSEwLFVvWzgyMTFdPSEwLFVvWzgyMzFdPSEwLGUuY29tbW9uanNHbG9iYWw9cixlLnVud3JhcEV4cG9ydHM9bixlLmNyZWF0ZUNvbW1vbmpzTW9kdWxlPWksZS5kZWZhdWx0PXNlbGYsZS5kZWZhdWx0JDE9bCxlLmdldEpTT049ZnVuY3Rpb24odCxlKXt2YXIgcj1NKHQpO3JldHVybiByLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24iKSxyLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5vbmxvYWQ9ZnVuY3Rpb24oKXtpZihyLnN0YXR1cz49MjAwJiZyLnN0YXR1czwzMDAmJnIucmVzcG9uc2Upe3ZhciBuO3RyeXtuPUpTT04ucGFyc2Uoci5yZXNwb25zZSl9Y2F0Y2godCl7cmV0dXJuIGUodCl9ZShudWxsLG4pfWVsc2UgNDAxPT09ci5zdGF0dXMmJnQudXJsLm1hdGNoKC9tYXBib3guY29tLyk/ZShuZXcgQShyLnN0YXR1c1RleHQrIjogeW91IG1heSBoYXZlIHByb3ZpZGVkIGFuIGludmFsaWQgTWFwYm94IGFjY2VzcyB0b2tlbi4gU2VlIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vI2FjY2Vzcy10b2tlbnMiLHIuc3RhdHVzLHQudXJsKSk6ZShuZXcgQShyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKCkscn0sZS5nZXRJbWFnZT1mdW5jdGlvbih0LGUpe3JldHVybiBTKHQsZnVuY3Rpb24odCxyKXtpZih0KWUodCk7ZWxzZSBpZihyKXt2YXIgbj1uZXcgc2VsZi5JbWFnZSxpPXNlbGYuVVJMfHxzZWxmLndlYmtpdFVSTDtuLm9ubG9hZD1mdW5jdGlvbigpe2UobnVsbCxuKSxpLnJldm9rZU9iamVjdFVSTChuLnNyYyl9O3ZhciBhPW5ldyBzZWxmLkJsb2IoW25ldyBVaW50OEFycmF5KHIuZGF0YSldLHt0eXBlOiJpbWFnZS9wbmcifSk7bi5jYWNoZUNvbnRyb2w9ci5jYWNoZUNvbnRyb2wsbi5leHBpcmVzPXIuZXhwaXJlcyxuLnNyYz1yLmRhdGEuYnl0ZUxlbmd0aD9pLmNyZWF0ZU9iamVjdFVSTChhKToiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQUMwbEVRVlFZVjJOZ0FBSUFBQVVBQWFyVnlGRUFBQUFBU1VWT1JLNUNZSUk9In19KX0sZS5SZXNvdXJjZVR5cGU9VCxlLlJHQkFJbWFnZT11aSxlLmRlZmF1bHQkMj1LYSxlLkltYWdlUG9zaXRpb249UWEsZS5nZXRBcnJheUJ1ZmZlcj1TLGUuZGVmYXVsdCQzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaW8odCkucmVhZEZpZWxkcyhrbyxbXSl9LGUuZGVmYXVsdCQ0PXlyLGUuYXN5bmNBbGw9ZnVuY3Rpb24odCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm4gcihudWxsLFtdKTt2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheSh0Lmxlbmd0aCksYT1udWxsO3QuZm9yRWFjaChmdW5jdGlvbih0LG8pe2UodCxmdW5jdGlvbih0LGUpe3QmJihhPXQpLGlbb109ZSwwPT0tLW4mJnIoYSxpKX0pfSl9LGUuQWxwaGFJbWFnZT1jaSxlLmRlZmF1bHQkNT1JLGUuZW5kc1dpdGg9dixlLmV4dGVuZD1wLGUuc3BoZXJpY2FsVG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiByKz05MCxyKj1NYXRoLlBJLzE4MCxuKj1NYXRoLlBJLzE4MCx7eDplKk1hdGguY29zKHIpKk1hdGguc2luKG4pLHk6ZSpNYXRoLnNpbihyKSpNYXRoLnNpbihuKSx6OmUqTWF0aC5jb3Mobil9fSxlLkV2ZW50ZWQ9TyxlLnZhbGlkYXRlU3R5bGU9bnIsZS52YWxpZGF0ZUxpZ2h0PWlyLGUuZW1pdFZhbGlkYXRpb25FcnJvcnM9c3IsZS5kZWZhdWx0JDY9dHQsZS5udW1iZXI9d3QsZS5Qcm9wZXJ0aWVzPXFyLGUuVHJhbnNpdGlvbmFibGU9SXIsZS5UcmFuc2l0aW9uaW5nPVByLGUuUG9zc2libHlFdmFsdWF0ZWQ9QnIsZS5EYXRhQ29uc3RhbnRQcm9wZXJ0eT1OcixlLndhcm5PbmNlPV8sZS51bmlxdWVJZD1mdW5jdGlvbigpe3JldHVybiBkKyt9LGUuZGVmYXVsdCQ3PVNvLGUucGljaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aSBpbiB0JiYocltpXT10W2ldKX1yZXR1cm4gcn0sZS53cmFwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLWUsaT0oKHQtZSklbituKSVuK2U7cmV0dXJuIGk9PT1lP3I6aX0sZS5jbGFtcD1oLGUuRXZlbnQ9TCxlLkVycm9yRXZlbnQ9eixlLk92ZXJzY2FsZWRUaWxlSUQ9em8sZS5kZWZhdWx0JDg9UG4sZS5jcmVhdGVMYXlvdXQ9WHIsZS5nZXRDb29yZGluYXRlc0NlbnRlcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxpPS0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKWU9TWF0aC5taW4oZSx0W2FdLmNvbHVtbikscj1NYXRoLm1pbihyLHRbYV0ucm93KSxuPU1hdGgubWF4KG4sdFthXS5jb2x1bW4pLGk9TWF0aC5tYXgoaSx0W2FdLnJvdyk7dmFyIG89bi1lLGw9aS1yLGM9TWF0aC5tYXgobyxsKSx1PU1hdGgubWF4KDAsTWF0aC5mbG9vcigtTWF0aC5sb2coYykvTWF0aC5MTjIpKTtyZXR1cm4gbmV3IHMoKGUrbikvMiwocitpKS8yLDApLnpvb21Ubyh1KX0sZS5DYW5vbmljYWxUaWxlSUQ9Q28sZS5SYXN0ZXJCb3VuZHNBcnJheT1KcixlLmdldFZpZGVvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKTtpLm9ubG9hZHN0YXJ0PWZ1bmN0aW9uKCl7ZShudWxsLGkpfTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzb3VyY2UiKTtyPXRbYV0sbj12b2lkIDAsKG49c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLmhyZWY9ciwobi5wcm90b2NvbCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x8fG4uaG9zdCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24uaG9zdCkmJihpLmNyb3NzT3JpZ2luPSJBbm9ueW1vdXMiKSxvLnNyYz10W2FdLGkuYXBwZW5kQ2hpbGQobyl9cmV0dXJuIGl9LGUuZGVmYXVsdCQ5PUQsZS5iaW5kQWxsPWcsZS5kZWZhdWx0JDEwPWZ1bmN0aW9uIHQoZSxyKXtpZihBcnJheS5pc0FycmF5KGUpKXtpZighQXJyYXkuaXNBcnJheShyKXx8ZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZighdChlW25dLHJbbl0pKXJldHVybiExO3JldHVybiEwfWlmKCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJm51bGwhPT1yKXtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuITE7aWYoT2JqZWN0LmtleXMoZSkubGVuZ3RoIT09T2JqZWN0LmtleXMocikubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaSBpbiBlKWlmKCF0KGVbaV0scltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIGU9PT1yfSxlLnBhcnNlQ2FjaGVDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2lmKHQucmVwbGFjZSgvKD86XnwoPzpccypcLFxzKikpKFteXHgwMC1ceDIwXChcKTw+QFwsO1w6XFwiXC9cW1xdXD9cPVx7XH1ceDdGXSspKD86XD0oPzooW15ceDAwLVx4MjBcKFwpPD5AXCw7XDpcXCJcL1xbXF1cP1w9XHtcfVx4N0ZdKyl8KD86XCIoKD86W14iXFxdfFxcLikqKVwiKSkpPy9nLGZ1bmN0aW9uKHQscixuLGkpe3ZhciBhPW58fGk7cmV0dXJuIGVbcl09IWF8fGEudG9Mb3dlckNhc2UoKSwiIn0pLGVbIm1heC1hZ2UiXSl7dmFyIHI9cGFyc2VJbnQoZVsibWF4LWFnZSJdLDEwKTtpc05hTihyKT9kZWxldGUgZVsibWF4LWFnZSJdOmVbIm1heC1hZ2UiXT1yfXJldHVybiBlfSxlLmRlZmF1bHQkMTE9Qm8sZS5kZWZhdWx0JDEyPVJvLGUuZGVmYXVsdCQxMz1SZSxlLmRlZmF1bHQkMTQ9SGEsZS5Db2xsaXNpb25Cb3hBcnJheT12bixlLmRlZmF1bHQkMTU9TW4sZS5UcmlhbmdsZUluZGV4QXJyYXk9Zm4sZS5kZWZhdWx0JDE2PUxyLGUuZGVmYXVsdCQxNz1zLGUua2V5c0RpZmZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdCluIGluIGV8fHIucHVzaChuKTtyZXR1cm4gcn0sZS5kZWZhdWx0JDE4PVsidHlwZSIsInNvdXJjZSIsInNvdXJjZS1sYXllciIsIm1pbnpvb20iLCJtYXh6b29tIiwiZmlsdGVyIiwibGF5b3V0Il0sZS5tYXQ0PXJpLGUudmVjND1laSxlLmdldFNpemVEYXRhPUZhLGUuZXZhbHVhdGVTaXplRm9yRmVhdHVyZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZTtyZXR1cm4ic291cmNlIj09PXQuZnVuY3Rpb25UeXBlP3IubG93ZXJTaXplLzEwOiJjb21wb3NpdGUiPT09dC5mdW5jdGlvblR5cGU/d3Qoci5sb3dlclNpemUvMTAsci51cHBlclNpemUvMTAsbi51U2l6ZVQpOm4udVNpemV9LGUuZXZhbHVhdGVTaXplRm9yWm9vbT1mdW5jdGlvbih0LGUscil7aWYoImNvbnN0YW50Ij09PXQuZnVuY3Rpb25UeXBlKXJldHVybnt1U2l6ZVQ6MCx1U2l6ZTp0LmxheW91dFNpemV9O2lmKCJzb3VyY2UiPT09dC5mdW5jdGlvblR5cGUpcmV0dXJue3VTaXplVDowLHVTaXplOjB9O2lmKCJjYW1lcmEiPT09dC5mdW5jdGlvblR5cGUpe3ZhciBuPXQucHJvcGVydHlWYWx1ZSxpPXQuem9vbVJhbmdlLGE9dC5zaXplUmFuZ2Usbz1oKFNlKG4sci5zcGVjaWZpY2F0aW9uKS5pbnRlcnBvbGF0aW9uRmFjdG9yKGUsaS5taW4saS5tYXgpLDAsMSk7cmV0dXJue3VTaXplVDowLHVTaXplOmEubWluK28qKGEubWF4LWEubWluKX19dmFyIHM9dC5wcm9wZXJ0eVZhbHVlLGw9dC56b29tUmFuZ2U7cmV0dXJue3VTaXplVDpoKFNlKHMsci5zcGVjaWZpY2F0aW9uKS5pbnRlcnBvbGF0aW9uRmFjdG9yKGUsbC5taW4sbC5tYXgpLDAsMSksdVNpemU6MH19LGUuYWRkRHluYW1pY0F0dHJpYnV0ZXM9VmEsZS5kZWZhdWx0JDE5PVlhLGUuV3JpdGluZ01vZGU9am8sZS5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRQb2ludD1qbixlLm11bHRpUG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb249Vm4sZS5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmU9VW4sZS5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihabihlLHRbcl0pKXJldHVybiEwO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKFpuKHQsZVtuXSkpcmV0dXJuITA7cmV0dXJuISFIbih0LGUpfSxlLmRpc3RUb1NlZ21lbnRTcXVhcmVkPVduLGUuZGVmYXVsdCQyMD10aSxlLmRlZmF1bHQkMjE9SHIsZS5kZWZhdWx0JDIyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSmFbdC50eXBlXSh0KX0sZS5jbG9uZT14LGUuZmlsdGVyT2JqZWN0PXksZS5tYXBPYmplY3Q9bSxlLnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5PWZ1bmN0aW9uKHQpe3JldHVybiBNcj90KHtwbHVnaW5VUkw6TXIsY29tcGxldGlvbkNhbGxiYWNrOlRyfSk6RXIub25jZSgicGx1Z2luQXZhaWxhYmxlIix0KSx0fSxlLmV2ZW50ZWQ9RXIsZS5kZWZhdWx0JDIzPW1yLGUuZGVmYXVsdCQyND1PbixlLlBvc0FycmF5PSRyLGUuVW53cmFwcGVkVGlsZUlEPUxvLGUuZWFzZT1mLGUuYmV6aWVyPXUsZS5zZXRSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKHQsZSl7aWYoQXIpdGhyb3cgbmV3IEVycm9yKCJzZXRSVExUZXh0UGx1Z2luIGNhbm5vdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIik7QXI9ITAsTXI9dCxUcj1mdW5jdGlvbih0KXt0PyhBcj0hMSxNcj1udWxsLGUmJmUodCkpOlNyPSEwfSxFci5maXJlKG5ldyBMKCJwbHVnaW5BdmFpbGFibGUiLHtwbHVnaW5VUkw6TXIsY29tcGxldGlvbkNhbGxiYWNrOlRyfSkpfSxlLnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LGUuZGVmYXVsdCQyNT1SYSxlLnJlZ2lzdGVyPXByLGUuR0xZUEhfUEJGX0JPUkRFUj1NbyxlLnNoYXBlVGV4dD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT10LnRyaW0oKTtjPT09am8udmVydGljYWwmJih1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0iIixyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXQuY2hhckNvZGVBdChyKzEpfHxudWxsLGk9dC5jaGFyQ29kZUF0KHItMSl8fG51bGw7biYmd3IobikmJiFQYVt0W3IrMV1dfHxpJiZ3cihpKSYmIVBhW3Rbci0xXV18fCFQYVt0W3JdXT9lKz10W3JdOmUrPVBhW3Rbcl1dfXJldHVybiBlfSh1KSk7dmFyIGY9W10saD17cG9zaXRpb25lZEdseXBoczpmLHRleHQ6dSx0b3A6c1sxXSxib3R0b206c1sxXSxsZWZ0OnNbMF0scmlnaHQ6c1swXSx3cml0aW5nTW9kZTpjfSxwPUNyLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe2Zvcih2YXIgYz0wLHU9LTE3LGY9MCxoPXQucG9zaXRpb25lZEdseXBocyxwPSJyaWdodCI9PT1hPzE6ImxlZnQiPT09YT8wOi41LGQ9MCxnPXI7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdO2lmKCh2PXYudHJpbSgpKS5sZW5ndGgpe2Zvcih2YXIgbT1oLmxlbmd0aCx5PTA7eTx2Lmxlbmd0aDt5Kyspe3ZhciB4PXYuY2hhckNvZGVBdCh5KSxiPWVbeF07YiYmKF9yKHgpJiZvIT09am8uaG9yaXpvbnRhbD8oaC5wdXNoKHtnbHlwaDp4LHg6Yyx5OjAsdmVydGljYWw6ITB9KSxjKz1sK3MpOihoLnB1c2goe2dseXBoOngseDpjLHk6dSx2ZXJ0aWNhbDohMX0pLGMrPWIubWV0cmljcy5hZHZhbmNlK3MpKX1pZihoLmxlbmd0aCE9PW0pe3ZhciBfPWMtcztmPU1hdGgubWF4KF8sZiksWG8oaCxlLG0saC5sZW5ndGgtMSxwKX1jPTAsdSs9bn1lbHNlIHUrPW59dmFyIHc9V28oaSksaz13Lmhvcml6b250YWxBbGlnbixUPXcudmVydGljYWxBbGlnbjshZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPShlLXIpKmksbD0oLW4qbysuNSkqYSxjPTA7Yzx0Lmxlbmd0aDtjKyspdFtjXS54Kz1zLHRbY10ueSs9bH0oaCxwLGssVCxmLG4sci5sZW5ndGgpO3ZhciBBPXIubGVuZ3RoKm47dC50b3ArPS1UKkEsdC5ib3R0b209dC50b3ArQSx0LmxlZnQrPS1rKmYsdC5yaWdodD10LmxlZnQrZn0oaCxlLHA/cCh1LFlvKHUsbyxyLGUpKTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTAsaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07ci5wdXNoKHQuc3Vic3RyaW5nKG4sbykpLG49b31yZXR1cm4gbjx0Lmxlbmd0aCYmci5wdXNoKHQuc3Vic3RyaW5nKG4sdC5sZW5ndGgpKSxyfSh1LFlvKHUsbyxyLGUpKSxuLGksYSxjLG8sbCksISFmLmxlbmd0aCYmaH0sZS5zaGFwZUljb249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVdvKHIpLGk9bi5ob3Jpem9udGFsQWxpZ24sYT1uLnZlcnRpY2FsQWxpZ24sbz1lWzBdLHM9ZVsxXSxsPW8tdC5kaXNwbGF5U2l6ZVswXSppLGM9bCt0LmRpc3BsYXlTaXplWzBdLHU9cy10LmRpc3BsYXlTaXplWzFdKmE7cmV0dXJue2ltYWdlOnQsdG9wOnUsYm90dG9tOnUrdC5kaXNwbGF5U2l6ZVsxXSxsZWZ0OmwscmlnaHQ6Y319LGUuYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZT14cixlLmFsbG93c0xldHRlclNwYWNpbmc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZighYnIocltlXS5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMTtyZXR1cm4hMH0sZS5kZWZhdWx0JDI2PVdpLGUuZGVmYXVsdCQyNz1QbyxlLmRlZmF1bHQkMjg9ZW8sZS5kZWZhdWx0JDI5PWdhLGUuZGVmYXVsdCQzMD1pbyxlLmRlZmF1bHQkMzE9RG8sZS5fX21vZHVsZUV4cG9ydHM9Z2EsZS5kZWZhdWx0JDMyPWwsZS5fX21vZHVsZUV4cG9ydHMkMT1pbyxlLnBsdWdpbj1Dcn0pLGkoMCxmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciByPXR5cGVvZiB0O2lmKCJudW1iZXIiPT09cnx8ImJvb2xlYW4iPT09cnx8InN0cmluZyI9PT1yfHxudWxsPT10KXJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIG49IlsiLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKW4rPWUoYVtpXSkrIiwiO3JldHVybiBuKyJdIn1mb3IodmFyIG89T2JqZWN0LmtleXModCkuc29ydCgpLHM9InsiLGw9MDtsPG8ubGVuZ3RoO2wrKylzKz1KU09OLnN0cmluZ2lmeShvW2xdKSsiOiIrZSh0W29bbF1dKSsiLCI7cmV0dXJuIHMrIn0ifWZ1bmN0aW9uIHIocil7Zm9yKHZhciBuPSIiLGk9MCxhPXQuZGVmYXVsdCQxODtpPGEubGVuZ3RoO2krPTEpbis9Ii8iK2UoclthW2ldXSk7cmV0dXJuIG59dmFyIG49ZnVuY3Rpb24odCl7dCYmdGhpcy5yZXBsYWNlKHQpfTtmdW5jdGlvbiBpKHQsZSxyLG4saSl7aWYodm9pZCAwPT09ZS5zZWdtZW50KXJldHVybiEwO2Zvcih2YXIgYT1lLG89ZS5zZWdtZW50KzEscz0wO3M+LXIvMjspe2lmKC0tbzwwKXJldHVybiExO3MtPXRbb10uZGlzdChhKSxhPXRbb119cys9dFtvXS5kaXN0KHRbbysxXSksbysrO2Zvcih2YXIgbD1bXSxjPTA7czxyLzI7KXt2YXIgdT10W28tMV0sZj10W29dLGg9dFtvKzFdO2lmKCFoKXJldHVybiExO3ZhciBwPXUuYW5nbGVUbyhmKS1mLmFuZ2xlVG8oaCk7Zm9yKHA9TWF0aC5hYnMoKHArMypNYXRoLlBJKSUoMipNYXRoLlBJKS1NYXRoLlBJKSxsLnB1c2goe2Rpc3RhbmNlOnMsYW5nbGVEZWx0YTpwfSksYys9cDtzLWxbMF0uZGlzdGFuY2U+bjspYy09bC5zaGlmdCgpLmFuZ2xlRGVsdGE7aWYoYz5pKXJldHVybiExO28rKyxzKz1mLmRpc3QoaCl9cmV0dXJuITB9ZnVuY3Rpb24gYShlLHIsbixhLG8scyxsLGMsdSl7dmFyIGY9YT8uNipzKmw6MCxoPU1hdGgubWF4KGE/YS5yaWdodC1hLmxlZnQ6MCxvP28ucmlnaHQtby5sZWZ0OjApLHA9MD09PWVbMF0ueHx8ZVswXS54PT09dXx8MD09PWVbMF0ueXx8ZVswXS55PT09dTtyZXR1cm4gci1oKmw8ci80JiYocj1oKmwrci80KSxmdW5jdGlvbiBlKHIsbixhLG8scyxsLGMsdSxmKXtmb3IodmFyIGg9bC8yLHA9MCxkPTA7ZDxyLmxlbmd0aC0xO2QrKylwKz1yW2RdLmRpc3QocltkKzFdKTtmb3IodmFyIGc9MCx2PW4tYSxtPVtdLHk9MDt5PHIubGVuZ3RoLTE7eSsrKXtmb3IodmFyIHg9clt5XSxiPXJbeSsxXSxfPXguZGlzdChiKSx3PWIuYW5nbGVUbyh4KTt2K2E8ZytfOyl7dmFyIGs9KCh2Kz1hKS1nKS9fLFQ9dC5udW1iZXIoeC54LGIueCxrKSxBPXQubnVtYmVyKHgueSxiLnksayk7aWYoVD49MCYmVDxmJiZBPj0wJiZBPGYmJnYtaD49MCYmditoPD1wKXt2YXIgTT1uZXcgdC5kZWZhdWx0JDI1KFQsQSx3LHkpO00uX3JvdW5kKCksbyYmIWkocixNLGwsbyxzKXx8bS5wdXNoKE0pfX1nKz1ffXJldHVybiB1fHxtLmxlbmd0aHx8Y3x8KG09ZShyLGcvMixhLG8scyxsLGMsITAsZikpLG19KGUscD9yLzIqYyVyOihoLzIrMipzKSpsKmMlcixyLGYsbixoKmwscCwhMSx1KX1uLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheWVyQ29uZmlncz17fSx0aGlzLl9sYXllcnM9e30sdGhpcy51cGRhdGUodCxbXSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT10aGlzLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO2kuX2xheWVyQ29uZmlnc1tzLmlkXT1zO3ZhciBsPWkuX2xheWVyc1tzLmlkXT10LmRlZmF1bHQkMjIocyk7bC5fZmVhdHVyZUZpbHRlcj10LmRlZmF1bHQkMTMobC5maWx0ZXIpfWZvcih2YXIgYz0wLHU9bjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107ZGVsZXRlIGkuX2xheWVyQ29uZmlnc1tmXSxkZWxldGUgaS5fbGF5ZXJzW2ZdfXRoaXMuZmFtaWxpZXNCeVNvdXJjZT17fTtmb3IodmFyIGg9MCxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXIodFtuXSksYT1lW2ldO2F8fChhPWVbaV09W10pLGEucHVzaCh0W25dKX12YXIgbz1bXTtmb3IodmFyIHMgaW4gZSlvLnB1c2goZVtzXSk7cmV0dXJuIG99KHQudmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncykpO2g8cC5sZW5ndGg7aCs9MSl7dmFyIGQ9cFtoXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xheWVyc1t0LmlkXX0pLGc9ZFswXTtpZigibm9uZSIhPT1nLnZpc2liaWxpdHkpe3ZhciB2PWcuc291cmNlfHwiIixtPWkuZmFtaWxpZXNCeVNvdXJjZVt2XTttfHwobT1pLmZhbWlsaWVzQnlTb3VyY2Vbdl09e30pO3ZhciB5PWcuc291cmNlTGF5ZXJ8fCJfZ2VvanNvblRpbGVMYXllciIseD1tW3ldO3h8fCh4PW1beV09W10pLHgucHVzaChkKX19fTt2YXIgbz1mdW5jdGlvbigpe3RoaXMub3BhY2l0eT0wLHRoaXMudGFyZ2V0T3BhY2l0eT0wLHRoaXMudGltZT0wfTtvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBvO3JldHVybiB0Lm9wYWNpdHk9dGhpcy5vcGFjaXR5LHQudGFyZ2V0T3BhY2l0eT10aGlzLnRhcmdldE9wYWNpdHksdC50aW1lPXRoaXMudGltZSx0fSx0LnJlZ2lzdGVyKCJPcGFjaXR5U3RhdGUiLG8pO3ZhciBzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGY9by50b3Aqcy1sLGg9by5ib3R0b20qcytsLHA9by5sZWZ0KnMtbCxkPW8ucmlnaHQqcytsO2lmKHRoaXMuYm94U3RhcnRJbmRleD10Lmxlbmd0aCxjKXt2YXIgZz1oLWYsdj1kLXA7Zz4wJiYoZz1NYXRoLm1heCgxMCpzLGcpLHRoaXMuX2FkZExpbmVDb2xsaXNpb25DaXJjbGVzKHQsZSxyLHIuc2VnbWVudCx2LGcsbixpLGEsdSkpfWVsc2UgdC5lbXBsYWNlQmFjayhyLngsci55LHAsZixkLGgsbixpLGEsMCwwKTt0aGlzLmJveEVuZEluZGV4PXQubGVuZ3RofTtzLnByb3RvdHlwZS5fYWRkTGluZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9YS8yLGY9TWF0aC5mbG9vcihpL3UpLGg9MSsuNCpNYXRoLmxvZyhjKS9NYXRoLkxOMixwPU1hdGguZmxvb3IoZipoLzIpLGQ9LWEvMixnPXIsdj1uKzEsbT1kLHk9LWkvMix4PXktaS80O2Rve2lmKC0tdjwwKXtpZihtPnkpcmV0dXJuO3Y9MDticmVha31tLT1lW3ZdLmRpc3QoZyksZz1lW3ZdfXdoaWxlKG0+eCk7Zm9yKHZhciBiPWVbdl0uZGlzdChlW3YrMV0pLF89LXA7XzxmK3A7XysrKXt2YXIgdz1fKnUsaz15K3c7aWYodzwwJiYoays9dyksdz5pJiYoays9dy1pKSwhKGs8bSkpe2Zvcig7bStiPGs7KXtpZihtKz1iLCsrdisxPj1lLmxlbmd0aClyZXR1cm47Yj1lW3ZdLmRpc3QoZVt2KzFdKX12YXIgVD1rLW0sQT1lW3ZdLE09ZVt2KzFdLnN1YihBKS5fdW5pdCgpLl9tdWx0KFQpLl9hZGQoQSkuX3JvdW5kKCksUz1NYXRoLmFicyhrLWQpPHU/MDouOCooay1kKTt0LmVtcGxhY2VCYWNrKE0ueCxNLnksLWEvMiwtYS8yLGEvMixhLzIsbyxzLGwsYS8yLFMpfX19O3ZhciBsPXUsYz11O2Z1bmN0aW9uIHUodCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUodCxlKTtpZih0aGlzLmRhdGE9dHx8W10sdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmNvbXBhcmU9ZXx8Zix0aGlzLmxlbmd0aD4wKWZvcih2YXIgcj0odGhpcy5sZW5ndGg+PjEpLTE7cj49MDtyLS0pdGhpcy5fZG93bihyKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIGgoZSxyLG4pe3ZvaWQgMD09PXImJihyPTEpLHZvaWQgMD09PW4mJihuPSExKTtmb3IodmFyIGk9MS8wLGE9MS8wLG89LTEvMCxzPS0xLzAsYz1lWzBdLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XTsoIXV8fGYueDxpKSYmKGk9Zi54KSwoIXV8fGYueTxhKSYmKGE9Zi55KSwoIXV8fGYueD5vKSYmKG89Zi54KSwoIXV8fGYueT5zKSYmKHM9Zi55KX12YXIgaD1vLWksZz1zLWEsdj1NYXRoLm1pbihoLGcpLG09di8yLHk9bmV3IGwobnVsbCxwKTtpZigwPT09dilyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKGksYSk7Zm9yKHZhciB4PWk7eDxvO3grPXYpZm9yKHZhciBiPWE7YjxzO2IrPXYpeS5wdXNoKG5ldyBkKHgrbSxiK20sbSxlKSk7Zm9yKHZhciBfPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10WzBdLGE9MCxvPWkubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9aVthXSxjPWlbc10sdT1sLngqYy55LWMueCpsLnk7cis9KGwueCtjLngpKnUsbis9KGwueStjLnkpKnUsZSs9Myp1fXJldHVybiBuZXcgZChyL2Usbi9lLDAsdCl9KGUpLHc9eS5sZW5ndGg7eS5sZW5ndGg7KXt2YXIgaz15LnBvcCgpOyhrLmQ+Xy5kfHwhXy5kKSYmKF89ayxuJiZjb25zb2xlLmxvZygiZm91bmQgYmVzdCAlZCBhZnRlciAlZCBwcm9iZXMiLE1hdGgucm91bmQoMWU0KmsuZCkvMWU0LHcpKSxrLm1heC1fLmQ8PXJ8fChtPWsuaC8yLHkucHVzaChuZXcgZChrLnAueC1tLGsucC55LW0sbSxlKSkseS5wdXNoKG5ldyBkKGsucC54K20say5wLnktbSxtLGUpKSx5LnB1c2gobmV3IGQoay5wLngtbSxrLnAueSttLG0sZSkpLHkucHVzaChuZXcgZChrLnAueCttLGsucC55K20sbSxlKSksdys9NCl9cmV0dXJuIG4mJihjb25zb2xlLmxvZygibnVtIHByb2JlczogIit3KSxjb25zb2xlLmxvZygiYmVzdCBkaXN0YW5jZTogIitfLmQpKSxfLnB9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiBlLm1heC10Lm1heH1mdW5jdGlvbiBkKGUscixuLGkpe3RoaXMucD1uZXcgdC5kZWZhdWx0JDEoZSxyKSx0aGlzLmg9bix0aGlzLmQ9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ITEsaT0xLzAsYT0wO2E8ci5sZW5ndGg7YSsrKWZvcih2YXIgbz1yW2FdLHM9MCxsPW8ubGVuZ3RoLGM9bC0xO3M8bDtjPXMrKyl7dmFyIHU9b1tzXSxmPW9bY107dS55PmUueSE9Zi55PmUueSYmZS54PChmLngtdS54KSooZS55LXUueSkvKGYueS11LnkpK3UueCYmKG49IW4pLGk9TWF0aC5taW4oaSx0LmRpc3RUb1NlZ21lbnRTcXVhcmVkKGUsdSxmKSl9cmV0dXJuKG4/MTotMSkqTWF0aC5zcXJ0KGkpfSh0aGlzLnAsaSksdGhpcy5tYXg9dGhpcy5kK3RoaXMuaCpNYXRoLlNRUlQyfWZ1bmN0aW9uIGcoZSxyLG4saSxhLG8pe2UuY3JlYXRlQXJyYXlzKCksZS5zeW1ib2xJbnN0YW5jZXM9W107dmFyIHM9NTEyKmUub3ZlcnNjYWxpbmc7ZS50aWxlUGl4ZWxSYXRpbz10LmRlZmF1bHQkOC9zLGUuY29tcGFyZVRleHQ9e30sZS5pY29uc05lZWRMaW5lYXI9ITE7dmFyIGw9ZS5sYXllcnNbMF0ubGF5b3V0LGM9ZS5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXMsdT17fTtpZigiY29tcG9zaXRlIj09PWUudGV4dFNpemVEYXRhLmZ1bmN0aW9uVHlwZSl7dmFyIGY9ZS50ZXh0U2l6ZURhdGEuem9vbVJhbmdlLGg9Zi5taW4scD1mLm1heDt1LmNvbXBvc2l0ZVRleHRTaXplcz1bY1sidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGgpKSxjWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYocCkpXX1pZigiY29tcG9zaXRlIj09PWUuaWNvblNpemVEYXRhLmZ1bmN0aW9uVHlwZSl7dmFyIGQ9ZS5pY29uU2l6ZURhdGEuem9vbVJhbmdlLGc9ZC5taW4sbT1kLm1heDt1LmNvbXBvc2l0ZUljb25TaXplcz1bY1siaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGcpKSxjWyJpY29uLXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYobSkpXX11LmxheW91dFRleHRTaXplPWNbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihlLnpvb20rMSkpLHUubGF5b3V0SWNvblNpemU9Y1siaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGUuem9vbSsxKSksdS50ZXh0TWF4U2l6ZT1jWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYoMTgpKTtmb3IodmFyIHk9MjQqbC5nZXQoInRleHQtbGluZS1oZWlnaHQiKSx4PSJtYXAiPT09bC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJsaW5lIj09PWwuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksYj1sLmdldCgidGV4dC1rZWVwLXVwcmlnaHQiKSxfPTAsdz1lLmZlYXR1cmVzO188dy5sZW5ndGg7Xys9MSl7dmFyIGs9d1tfXSxUPWwuZ2V0KCJ0ZXh0LWZvbnQiKS5ldmFsdWF0ZShrKS5qb2luKCIsIiksQT1yW1RdfHx7fSxNPW5bVF18fHt9LFM9e30sRT1rLnRleHQ7aWYoRSl7dmFyIEM9bC5nZXQoInRleHQtb2Zmc2V0IikuZXZhbHVhdGUoaykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSksTD0yNCpsLmdldCgidGV4dC1sZXR0ZXItc3BhY2luZyIpLmV2YWx1YXRlKGspLHo9dC5hbGxvd3NMZXR0ZXJTcGFjaW5nKEUpP0w6MCxPPWwuZ2V0KCJ0ZXh0LWFuY2hvciIpLmV2YWx1YXRlKGspLEk9bC5nZXQoInRleHQtanVzdGlmeSIpLmV2YWx1YXRlKGspLEQ9ImxpbmUiIT09bC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKT8yNCpsLmdldCgidGV4dC1tYXgtd2lkdGgiKS5ldmFsdWF0ZShrKTowO1MuaG9yaXpvbnRhbD10LnNoYXBlVGV4dChFLEEsRCx5LE8sSSx6LEMsMjQsdC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsKSx0LmFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUoRSkmJngmJmImJihTLnZlcnRpY2FsPXQuc2hhcGVUZXh0KEUsQSxELHksTyxJLHosQywyNCx0LldyaXRpbmdNb2RlLnZlcnRpY2FsKSl9dmFyIFA9dm9pZCAwO2lmKGsuaWNvbil7dmFyIFI9aVtrLmljb25dO1ImJihQPXQuc2hhcGVJY29uKGFbay5pY29uXSxsLmdldCgiaWNvbi1vZmZzZXQiKS5ldmFsdWF0ZShrKSxsLmdldCgiaWNvbi1hbmNob3IiKS5ldmFsdWF0ZShrKSksdm9pZCAwPT09ZS5zZGZJY29ucz9lLnNkZkljb25zPVIuc2RmOmUuc2RmSWNvbnMhPT1SLnNkZiYmdC53YXJuT25jZSgiU3R5bGUgc2hlZXQgd2FybmluZzogQ2Fubm90IG1peCBTREYgYW5kIG5vbi1TREYgaWNvbnMgaW4gb25lIGJ1ZmZlciIpLFIucGl4ZWxSYXRpbyE9PWUucGl4ZWxSYXRpbz9lLmljb25zTmVlZExpbmVhcj0hMDowIT09bC5nZXQoImljb24tcm90YXRlIikuY29uc3RhbnRPcigxKSYmKGUuaWNvbnNOZWVkTGluZWFyPSEwKSl9KFMuaG9yaXpvbnRhbHx8UCkmJnYoZSxrLFMsUCxNLHUpfW8mJmUuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnMoKX1mdW5jdGlvbiB2KGUscixuLGksbCxjKXt2YXIgdT1jLmxheW91dFRleHRTaXplLmV2YWx1YXRlKHIpLGY9Yy5sYXlvdXRJY29uU2l6ZS5ldmFsdWF0ZShyKSxwPWMudGV4dE1heFNpemUuZXZhbHVhdGUocik7dm9pZCAwPT09cCYmKHA9dSk7dmFyIGQ9ZS5sYXllcnNbMF0ubGF5b3V0LGc9ZC5nZXQoInRleHQtb2Zmc2V0IikuZXZhbHVhdGUociksdj1kLmdldCgiaWNvbi1vZmZzZXQiKS5ldmFsdWF0ZShyKSx4PXUvMjQsYj1lLnRpbGVQaXhlbFJhdGlvKngsXz1lLnRpbGVQaXhlbFJhdGlvKnAvMjQsdz1lLnRpbGVQaXhlbFJhdGlvKmYsaz1lLnRpbGVQaXhlbFJhdGlvKmQuZ2V0KCJzeW1ib2wtc3BhY2luZyIpLFQ9ZC5nZXQoInRleHQtcGFkZGluZyIpKmUudGlsZVBpeGVsUmF0aW8sQT1kLmdldCgiaWNvbi1wYWRkaW5nIikqZS50aWxlUGl4ZWxSYXRpbyxNPWQuZ2V0KCJ0ZXh0LW1heC1hbmdsZSIpLzE4MCpNYXRoLlBJLFM9Im1hcCI9PT1kLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmImxpbmUiPT09ZC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxFPSJtYXAiPT09ZC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50IikmJiJsaW5lIj09PWQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksQz1rLzIsTD1mdW5jdGlvbihhLHUpe3UueDwwfHx1Lng+PXQuZGVmYXVsdCQ4fHx1Lnk8MHx8dS55Pj10LmRlZmF1bHQkOHx8ZS5zeW1ib2xJbnN0YW5jZXMucHVzaChmdW5jdGlvbihlLHIsbixpLGEsbCxjLHUsZixoLHAsZCxnLHYseSx4LGIsXyx3LGssVCl7dmFyIEEsTSxTPWUuYWRkVG9MaW5lVmVydGV4QXJyYXkocixuKSxFPTAsQz0wLEw9MCx6PWkuaG9yaXpvbnRhbD9pLmhvcml6b250YWwudGV4dDoiIixPPVtdO2kuaG9yaXpvbnRhbCYmKEE9bmV3IHMoYyxuLHIsdSxmLGgsaS5ob3Jpem9udGFsLHAsZCxnLGUub3ZlcnNjYWxpbmcpLEMrPW0oZSxyLGkuaG9yaXpvbnRhbCxsLGcsdyx2LFMsaS52ZXJ0aWNhbD90LldyaXRpbmdNb2RlLmhvcml6b250YWw6dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsT25seSxPLGssVCksaS52ZXJ0aWNhbCYmKEwrPW0oZSxyLGkudmVydGljYWwsbCxnLHcsdixTLHQuV3JpdGluZ01vZGUudmVydGljYWwsTyxrLFQpKSk7dmFyIEk9QT9BLmJveFN0YXJ0SW5kZXg6ZS5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsRD1BP0EuYm94RW5kSW5kZXg6ZS5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7aWYoYSl7dmFyIFA9ZnVuY3Rpb24oZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGY9ci5pbWFnZSxoPW4ubGF5b3V0LHA9ci50b3AtMS9mLnBpeGVsUmF0aW8sZD1yLmxlZnQtMS9mLnBpeGVsUmF0aW8sZz1yLmJvdHRvbSsxL2YucGl4ZWxSYXRpbyx2PXIucmlnaHQrMS9mLnBpeGVsUmF0aW87aWYoIm5vbmUiIT09aC5nZXQoImljb24tdGV4dC1maXQiKSYmYSl7dmFyIG09di1kLHk9Zy1wLHg9aC5nZXQoInRleHQtc2l6ZSIpLmV2YWx1YXRlKG8pLzI0LGI9YS5sZWZ0KngsXz1hLnJpZ2h0Kngsdz1hLnRvcCp4LGs9Xy1iLFQ9YS5ib3R0b20qeC13LEE9aC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpWzBdLE09aC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpWzFdLFM9aC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpWzJdLEU9aC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpWzNdLEM9IndpZHRoIj09PWguZ2V0KCJpY29uLXRleHQtZml0Iik/LjUqKFQteSk6MCxMPSJoZWlnaHQiPT09aC5nZXQoImljb24tdGV4dC1maXQiKT8uNSooay1tKTowLHo9IndpZHRoIj09PWguZ2V0KCJpY29uLXRleHQtZml0Iil8fCJib3RoIj09PWguZ2V0KCJpY29uLXRleHQtZml0Iik/azptLE89ImhlaWdodCI9PT1oLmdldCgiaWNvbi10ZXh0LWZpdCIpfHwiYm90aCI9PT1oLmdldCgiaWNvbi10ZXh0LWZpdCIpP1Q6eTtzPW5ldyB0LmRlZmF1bHQkMShiK0wtRSx3K0MtQSksbD1uZXcgdC5kZWZhdWx0JDEoYitMK00reix3K0MtQSksYz1uZXcgdC5kZWZhdWx0JDEoYitMK00reix3K0MrUytPKSx1PW5ldyB0LmRlZmF1bHQkMShiK0wtRSx3K0MrUytPKX1lbHNlIHM9bmV3IHQuZGVmYXVsdCQxKGQscCksbD1uZXcgdC5kZWZhdWx0JDEodixwKSxjPW5ldyB0LmRlZmF1bHQkMSh2LGcpLHU9bmV3IHQuZGVmYXVsdCQxKGQsZyk7dmFyIEk9bi5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0ZSIpLmV2YWx1YXRlKG8pKk1hdGguUEkvMTgwO2lmKEkpe3ZhciBEPU1hdGguc2luKEkpLFA9TWF0aC5jb3MoSSksUj1bUCwtRCxELFBdO3MuX21hdE11bHQoUiksbC5fbWF0TXVsdChSKSx1Ll9tYXRNdWx0KFIpLGMuX21hdE11bHQoUil9cmV0dXJuW3t0bDpzLHRyOmwsYmw6dSxicjpjLHRleDpmLnBhZGRlZFJlY3Qsd3JpdGluZ01vZGU6dm9pZCAwLGdseXBoT2Zmc2V0OlswLDBdfV19KDAsYSxsLDAsaS5ob3Jpem9udGFsLHcpO009bmV3IHMoYyxuLHIsdSxmLGgsYSx5LHgsITEsZS5vdmVyc2NhbGluZyksRT00KlAubGVuZ3RoO3ZhciBSPWUuaWNvblNpemVEYXRhLEY9bnVsbDsic291cmNlIj09PVIuZnVuY3Rpb25UeXBlP0Y9WzEwKmwubGF5b3V0LmdldCgiaWNvbi1zaXplIikuZXZhbHVhdGUodyldOiJjb21wb3NpdGUiPT09Ui5mdW5jdGlvblR5cGUmJihGPVsxMCpULmNvbXBvc2l0ZUljb25TaXplc1swXS5ldmFsdWF0ZSh3KSwxMCpULmNvbXBvc2l0ZUljb25TaXplc1sxXS5ldmFsdWF0ZSh3KV0pLGUuYWRkU3ltYm9scyhlLmljb24sUCxGLF8sYix3LCExLHIsUy5saW5lU3RhcnRJbmRleCxTLmxpbmVMZW5ndGgpfXZhciBCPU0/TS5ib3hTdGFydEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLE49TT9NLmJveEVuZEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO3JldHVybiBlLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoPj10LmRlZmF1bHQkMTQuTUFYX0dMWVBIUyYmdC53YXJuT25jZSgiVG9vIG1hbnkgZ2x5cGhzIGJlaW5nIHJlbmRlcmVkIGluIGEgdGlsZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yOTA3Iikse2tleTp6LHRleHRCb3hTdGFydEluZGV4OkksdGV4dEJveEVuZEluZGV4OkQsaWNvbkJveFN0YXJ0SW5kZXg6QixpY29uQm94RW5kSW5kZXg6Tix0ZXh0T2Zmc2V0OnYsaWNvbk9mZnNldDpfLGFuY2hvcjpyLGxpbmU6bixmZWF0dXJlSW5kZXg6dSxmZWF0dXJlOncsbnVtR2x5cGhWZXJ0aWNlczpDLG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlczpMLG51bUljb25WZXJ0aWNlczpFLHRleHRPcGFjaXR5U3RhdGU6bmV3IG8saWNvbk9wYWNpdHlTdGF0ZTpuZXcgbyxpc0R1cGxpY2F0ZTohMSxwbGFjZWRUZXh0U3ltYm9sSW5kaWNlczpPLGNyb3NzVGlsZUlEOjB9fShlLHUsYSxuLGksZS5sYXllcnNbMF0sZS5jb2xsaXNpb25Cb3hBcnJheSxyLmluZGV4LHIuc291cmNlTGF5ZXJJbmRleCxlLmluZGV4LGIsVCxTLGcsdyxBLEUsdixyLGwsYykpfTtpZigibGluZSI9PT1kLmdldCgic3ltYm9sLXBsYWNlbWVudCIpKWZvcih2YXIgej0wLE89ZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9dm9pZCAwLHU9MDt1PGwubGVuZ3RoLTE7dSsrKXt2YXIgZj1sW3VdLGg9bFt1KzFdO2YueDwwJiZoLng8MHx8KGYueDwwP2Y9bmV3IHQuZGVmYXVsdCQxKDAsZi55KyhoLnktZi55KSooKDAtZi54KS8oaC54LWYueCkpKS5fcm91bmQoKTpoLng8MCYmKGg9bmV3IHQuZGVmYXVsdCQxKDAsZi55KyhoLnktZi55KSooKDAtZi54KS8oaC54LWYueCkpKS5fcm91bmQoKSksZi55PDAmJmgueTwwfHwoZi55PDA/Zj1uZXcgdC5kZWZhdWx0JDEoZi54KyhoLngtZi54KSooKDAtZi55KS8oaC55LWYueSkpLDApLl9yb3VuZCgpOmgueTwwJiYoaD1uZXcgdC5kZWZhdWx0JDEoZi54KyhoLngtZi54KSooKDAtZi55KS8oaC55LWYueSkpLDApLl9yb3VuZCgpKSxmLng+PWkmJmgueD49aXx8KGYueD49aT9mPW5ldyB0LmRlZmF1bHQkMShpLGYueSsoaC55LWYueSkqKChpLWYueCkvKGgueC1mLngpKSkuX3JvdW5kKCk6aC54Pj1pJiYoaD1uZXcgdC5kZWZhdWx0JDEoaSxmLnkrKGgueS1mLnkpKigoaS1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpKSxmLnk+PWEmJmgueT49YXx8KGYueT49YT9mPW5ldyB0LmRlZmF1bHQkMShmLngrKGgueC1mLngpKigoYS1mLnkpLyhoLnktZi55KSksYSkuX3JvdW5kKCk6aC55Pj1hJiYoaD1uZXcgdC5kZWZhdWx0JDEoZi54KyhoLngtZi54KSooKGEtZi55KS8oaC55LWYueSkpLGEpLl9yb3VuZCgpKSxjJiZmLmVxdWFscyhjW2MubGVuZ3RoLTFdKXx8KGM9W2ZdLG8ucHVzaChjKSksYy5wdXNoKGgpKSkpKX1yZXR1cm4gb30oci5nZW9tZXRyeSwwLDAsdC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpO3o8Ty5sZW5ndGg7eis9MSlmb3IodmFyIEk9T1t6XSxEPTAsUD1hKEksayxNLG4udmVydGljYWx8fG4uaG9yaXpvbnRhbCxpLDI0LF8sZS5vdmVyc2NhbGluZyx0LmRlZmF1bHQkOCk7RDxQLmxlbmd0aDtEKz0xKXt2YXIgUj1QW0RdLEY9bi5ob3Jpem9udGFsO0YmJnkoZSxGLnRleHQsQyxSKXx8TChJLFIpfWVsc2UgaWYoIlBvbHlnb24iPT09ci50eXBlKWZvcih2YXIgQj0wLE49dC5kZWZhdWx0JDI2KHIuZ2VvbWV0cnksMCk7QjxOLmxlbmd0aDtCKz0xKXt2YXIgaj1OW0JdLFY9aChqLDE2KTtMKGpbMF0sbmV3IHQuZGVmYXVsdCQyNShWLngsVi55LDApKX1lbHNlIGlmKCJMaW5lU3RyaW5nIj09PXIudHlwZSlmb3IodmFyIFU9MCxxPXIuZ2VvbWV0cnk7VTxxLmxlbmd0aDtVKz0xKXt2YXIgSD1xW1VdO0woSCxuZXcgdC5kZWZhdWx0JDI1KEhbMF0ueCxIWzBdLnksMCkpfWVsc2UgaWYoIlBvaW50Ij09PXIudHlwZSlmb3IodmFyIEc9MCxZPXIuZ2VvbWV0cnk7RzxZLmxlbmd0aDtHKz0xKWZvcih2YXIgVz0wLFg9WVtHXTtXPFgubGVuZ3RoO1crPTEpe3ZhciBaPVhbV107TChbWl0sbmV3IHQuZGVmYXVsdCQyNShaLngsWi55LDApKX19ZnVuY3Rpb24gbShlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7dmFyIHA9ZnVuY3Rpb24oZSxyLG4saSxhLG8pe2Zvcih2YXIgcz1uLmxheW91dC5nZXQoInRleHQtcm90YXRlIikuZXZhbHVhdGUoYSkqTWF0aC5QSS8xODAsbD1uLmxheW91dC5nZXQoInRleHQtb2Zmc2V0IikuZXZhbHVhdGUoYSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSksYz1yLnBvc2l0aW9uZWRHbHlwaHMsdT1bXSxmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBoPWNbZl0scD1vW2guZ2x5cGhdO2lmKHApe3ZhciBkPXAucmVjdDtpZihkKXt2YXIgZz10LkdMWVBIX1BCRl9CT1JERVIrMSx2PXAubWV0cmljcy5hZHZhbmNlLzIsbT1pP1toLngrdixoLnldOlswLDBdLHk9aT9bMCwwXTpbaC54K3YrbFswXSxoLnkrbFsxXV0seD1wLm1ldHJpY3MubGVmdC1nLXYreVswXSxiPS1wLm1ldHJpY3MudG9wLWcreVsxXSxfPXgrZC53LHc9YitkLmgsaz1uZXcgdC5kZWZhdWx0JDEoeCxiKSxUPW5ldyB0LmRlZmF1bHQkMShfLGIpLEE9bmV3IHQuZGVmYXVsdCQxKHgsdyksTT1uZXcgdC5kZWZhdWx0JDEoXyx3KTtpZihpJiZoLnZlcnRpY2FsKXt2YXIgUz1uZXcgdC5kZWZhdWx0JDEoLXYsdiksRT0tTWF0aC5QSS8yLEM9bmV3IHQuZGVmYXVsdCQxKDUsMCk7ay5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKSxULl9yb3RhdGVBcm91bmQoRSxTKS5fYWRkKEMpLEEuX3JvdGF0ZUFyb3VuZChFLFMpLl9hZGQoQyksTS5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKX1pZihzKXt2YXIgTD1NYXRoLnNpbihzKSx6PU1hdGguY29zKHMpLE89W3osLUwsTCx6XTtrLl9tYXRNdWx0KE8pLFQuX21hdE11bHQoTyksQS5fbWF0TXVsdChPKSxNLl9tYXRNdWx0KE8pfXUucHVzaCh7dGw6ayx0cjpULGJsOkEsYnI6TSx0ZXg6ZCx3cml0aW5nTW9kZTpyLndyaXRpbmdNb2RlLGdseXBoT2Zmc2V0Om19KX19fXJldHVybiB1fSgwLG4saSxhLG8sZiksZD1lLnRleHRTaXplRGF0YSxnPW51bGw7cmV0dXJuInNvdXJjZSI9PT1kLmZ1bmN0aW9uVHlwZT9nPVsxMCppLmxheW91dC5nZXQoInRleHQtc2l6ZSIpLmV2YWx1YXRlKG8pXToiY29tcG9zaXRlIj09PWQuZnVuY3Rpb25UeXBlJiYoZz1bMTAqaC5jb21wb3NpdGVUZXh0U2l6ZXNbMF0uZXZhbHVhdGUobyksMTAqaC5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUobyldKSxlLmFkZFN5bWJvbHMoZS50ZXh0LHAsZyxzLGEsbyxjLHIsbC5saW5lU3RhcnRJbmRleCxsLmxpbmVMZW5ndGgpLHUucHVzaChlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoLTEpLDQqcC5sZW5ndGh9ZnVuY3Rpb24geSh0LGUscixuKXt2YXIgaT10LmNvbXBhcmVUZXh0O2lmKGUgaW4gaSl7Zm9yKHZhciBhPWlbZV0sbz1hLmxlbmd0aC0xO28+PTA7by0tKWlmKG4uZGlzdChhW29dKTxyKXJldHVybiEwfWVsc2UgaVtlXT1bXTtyZXR1cm4gaVtlXS5wdXNoKG4pLCExfXUucHJvdG90eXBlPXtwdXNoOmZ1bmN0aW9uKHQpe3RoaXMuZGF0YS5wdXNoKHQpLHRoaXMubGVuZ3RoKyssdGhpcy5fdXAodGhpcy5sZW5ndGgtMSl9LHBvcDpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHQ9dGhpcy5kYXRhWzBdO3JldHVybiB0aGlzLmxlbmd0aC0tLHRoaXMubGVuZ3RoPjAmJih0aGlzLmRhdGFbMF09dGhpcy5kYXRhW3RoaXMubGVuZ3RoXSx0aGlzLl9kb3duKDApKSx0aGlzLmRhdGEucG9wKCksdH19LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhWzBdfSxfdXA6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YSxyPXRoaXMuY29tcGFyZSxuPWVbdF07dD4wOyl7dmFyIGk9dC0xPj4xLGE9ZVtpXTtpZihyKG4sYSk+PTApYnJlYWs7ZVt0XT1hLHQ9aX1lW3RdPW59LF9kb3duOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGEscj10aGlzLmNvbXBhcmUsbj10aGlzLmxlbmd0aD4+MSxpPWVbdF07dDxuOyl7dmFyIGE9MSsodDw8MSksbz1hKzEscz1lW2FdO2lmKG88dGhpcy5sZW5ndGgmJnIoZVtvXSxzKTwwJiYoYT1vLHM9ZVtvXSkscihzLGkpPj0wKWJyZWFrO2VbdF09cyx0PWF9ZVt0XT1pfX0sbC5kZWZhdWx0PWM7dmFyIHg9ZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6MCxoZWlnaHQ6MH0pLG49e30saT1uZXcgdC5kZWZhdWx0JDIoMCwwLHthdXRvUmVzaXplOiEwfSk7Zm9yKHZhciBhIGluIGUpe3ZhciBvPWVbYV0scz1uW2FdPXt9O2Zvcih2YXIgbCBpbiBvKXt2YXIgYz1vWytsXTtpZihjJiYwIT09Yy5iaXRtYXAud2lkdGgmJjAhPT1jLmJpdG1hcC5oZWlnaHQpe3ZhciB1PWkucGFja09uZShjLmJpdG1hcC53aWR0aCsyLGMuYml0bWFwLmhlaWdodCsyKTtyLnJlc2l6ZSh7d2lkdGg6aS53LGhlaWdodDppLmh9KSx0LkFscGhhSW1hZ2UuY29weShjLmJpdG1hcCxyLHt4OjAseTowfSx7eDp1LngrMSx5OnUueSsxfSxjLmJpdG1hcCksc1tsXT17cmVjdDp1LG1ldHJpY3M6Yy5tZXRyaWNzfX19fWkuc2hyaW5rKCksci5yZXNpemUoe3dpZHRoOmkudyxoZWlnaHQ6aS5ofSksdGhpcy5pbWFnZT1yLHRoaXMucG9zaXRpb25zPW59O3QucmVnaXN0ZXIoIkdseXBoQXRsYXMiLHgpO3ZhciBiPWZ1bmN0aW9uKGUpe3RoaXMudGlsZUlEPW5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS50aWxlSUQub3ZlcnNjYWxlZFosZS50aWxlSUQud3JhcCxlLnRpbGVJRC5jYW5vbmljYWwueixlLnRpbGVJRC5jYW5vbmljYWwueCxlLnRpbGVJRC5jYW5vbmljYWwueSksdGhpcy51aWQ9ZS51aWQsdGhpcy56b29tPWUuem9vbSx0aGlzLnBpeGVsUmF0aW89ZS5waXhlbFJhdGlvLHRoaXMudGlsZVNpemU9ZS50aWxlU2l6ZSx0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLm92ZXJzY2FsaW5nPXRoaXMudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzPWUuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuY29sbGVjdFJlc291cmNlVGltaW5nPSEhZS5jb2xsZWN0UmVzb3VyY2VUaW1pbmd9O2Z1bmN0aW9uIF8oZSxyKXtmb3IodmFyIG49bmV3IHQuZGVmYXVsdCQxNihyKSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSlhW2ldLnJlY2FsY3VsYXRlKG4pfWIucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXRoaXM7dGhpcy5zdGF0dXM9InBhcnNpbmciLHRoaXMuZGF0YT1lLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IHQuQ29sbGlzaW9uQm94QXJyYXk7dmFyIG89bmV3IHQuZGVmYXVsdCQyNyhPYmplY3Qua2V5cyhlLmxheWVycykuc29ydCgpKSxzPW5ldyB0LmRlZmF1bHQkMTEodGhpcy50aWxlSUQpO3MuYnVja2V0TGF5ZXJJRHM9W107dmFyIGwsYyx1LGY9e30saD17ZmVhdHVyZUluZGV4OnMsaWNvbkRlcGVuZGVuY2llczp7fSxnbHlwaERlcGVuZGVuY2llczp7fX0scD1yLmZhbWlsaWVzQnlTb3VyY2VbdGhpcy5zb3VyY2VdO2Zvcih2YXIgZCBpbiBwKXt2YXIgdj1lLmxheWVyc1tkXTtpZih2KXsxPT09di52ZXJzaW9uJiZ0Lndhcm5PbmNlKCdWZWN0b3IgdGlsZSBzb3VyY2UgIicrYS5zb3VyY2UrJyIgbGF5ZXIgIicrZCsnIiBkb2VzIG5vdCB1c2UgdmVjdG9yIHRpbGUgc3BlYyB2MiBhbmQgdGhlcmVmb3JlIG1heSBoYXZlIHNvbWUgcmVuZGVyaW5nIGVycm9ycy4nKTtmb3IodmFyIG09by5lbmNvZGUoZCkseT1bXSxiPTA7Yjx2Lmxlbmd0aDtiKyspe3ZhciB3PXYuZmVhdHVyZShiKTt5LnB1c2goe2ZlYXR1cmU6dyxpbmRleDpiLHNvdXJjZUxheWVySW5kZXg6bX0pfWZvcih2YXIgaz0wLFQ9cFtkXTtrPFQubGVuZ3RoO2srPTEpe3ZhciBBPVRba10sTT1BWzBdO00ubWluem9vbSYmYS56b29tPE1hdGguZmxvb3IoTS5taW56b29tKXx8TS5tYXh6b29tJiZhLnpvb20+PU0ubWF4em9vbXx8Im5vbmUiIT09TS52aXNpYmlsaXR5JiYoXyhBLGEuem9vbSksKGZbTS5pZF09TS5jcmVhdGVCdWNrZXQoe2luZGV4OnMuYnVja2V0TGF5ZXJJRHMubGVuZ3RoLGxheWVyczpBLHpvb206YS56b29tLHBpeGVsUmF0aW86YS5waXhlbFJhdGlvLG92ZXJzY2FsaW5nOmEub3ZlcnNjYWxpbmcsY29sbGlzaW9uQm94QXJyYXk6YS5jb2xsaXNpb25Cb3hBcnJheSxzb3VyY2VMYXllckluZGV4Om19KSkucG9wdWxhdGUoeSxoKSxzLmJ1Y2tldExheWVySURzLnB1c2goQS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkpfX19dmFyIFM9dC5tYXBPYmplY3QoaC5nbHlwaERlcGVuZGVuY2llcyxmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKE51bWJlcil9KTtPYmplY3Qua2V5cyhTKS5sZW5ndGg/bi5zZW5kKCJnZXRHbHlwaHMiLHt1aWQ6dGhpcy51aWQsc3RhY2tzOlN9LGZ1bmN0aW9uKHQsZSl7bHx8KGw9dCxjPWUsQy5jYWxsKGEpKX0pOmM9e307dmFyIEU9T2JqZWN0LmtleXMoaC5pY29uRGVwZW5kZW5jaWVzKTtmdW5jdGlvbiBDKCl7aWYobClyZXR1cm4gaShsKTtpZihjJiZ1KXt2YXIgZT1uZXcgeChjKSxyPW5ldyB0LmRlZmF1bHQkMjgodSk7Zm9yKHZhciBuIGluIGYpe3ZhciBhPWZbbl07YSBpbnN0YW5jZW9mIHQuZGVmYXVsdCQxNCYmKF8oYS5sYXllcnMsdGhpcy56b29tKSxnKGEsYyxlLnBvc2l0aW9ucyx1LHIucG9zaXRpb25zLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzKSl9dGhpcy5zdGF0dXM9ImRvbmUiLGkobnVsbCx7YnVja2V0czp0LnZhbHVlcyhmKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuaXNFbXB0eSgpfSksZmVhdHVyZUluZGV4OnMsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxnbHlwaEF0bGFzSW1hZ2U6ZS5pbWFnZSxpY29uQXRsYXNJbWFnZTpyLmltYWdlfSl9fUUubGVuZ3RoP24uc2VuZCgiZ2V0SW1hZ2VzIix7aWNvbnM6RX0sZnVuY3Rpb24odCxlKXtsfHwobD10LHU9ZSxDLmNhbGwoYSkpfSk6dT17fSxDLmNhbGwodGhpcyl9O3ZhciB3PWZ1bmN0aW9uKHQpe3JldHVybiEoIXBlcmZvcm1hbmNlfHwhcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSkmJnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUodCl9O2Z1bmN0aW9uIGsoZSxyKXt2YXIgbj10LmdldEFycmF5QnVmZmVyKGUucmVxdWVzdCxmdW5jdGlvbihlLG4pe2U/cihlKTpuJiZyKG51bGwse3ZlY3RvclRpbGU6bmV3IHQuZGVmYXVsdCQyOS5WZWN0b3JUaWxlKG5ldyB0LmRlZmF1bHQkMzAobi5kYXRhKSkscmF3RGF0YTpuLmRhdGEsY2FjaGVDb250cm9sOm4uY2FjaGVDb250cm9sLGV4cGlyZXM6bi5leHBpcmVzfSl9KTtyZXR1cm4gZnVuY3Rpb24oKXtuLmFib3J0KCkscigpfX12YXIgVD1mdW5jdGlvbih0LGUscil7dGhpcy5hY3Rvcj10LHRoaXMubGF5ZXJJbmRleD1lLHRoaXMubG9hZFZlY3RvckRhdGE9cnx8ayx0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319O1QucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPWUudWlkO3RoaXMubG9hZGluZ3x8KHRoaXMubG9hZGluZz17fSk7dmFyIGE9dGhpcy5sb2FkaW5nW2ldPW5ldyBiKGUpO2EuYWJvcnQ9dGhpcy5sb2FkVmVjdG9yRGF0YShlLGZ1bmN0aW9uKG8scyl7aWYoZGVsZXRlIG4ubG9hZGluZ1tpXSxvfHwhcylyZXR1cm4gcihvKTt2YXIgbD1zLnJhd0RhdGEsYz17fTtzLmV4cGlyZXMmJihjLmV4cGlyZXM9cy5leHBpcmVzKSxzLmNhY2hlQ29udHJvbCYmKGMuY2FjaGVDb250cm9sPXMuY2FjaGVDb250cm9sKTt2YXIgdT17fTtpZihlLnJlcXVlc3QmJmUucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpe3ZhciBmPXcoZS5yZXF1ZXN0LnVybCk7ZiYmKHUucmVzb3VyY2VUaW1pbmc9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmKSkpfWEudmVjdG9yVGlsZT1zLnZlY3RvclRpbGUsYS5wYXJzZShzLnZlY3RvclRpbGUsbi5sYXllckluZGV4LG4uYWN0b3IsZnVuY3Rpb24oZSxuKXtpZihlfHwhbilyZXR1cm4gcihlKTtyKG51bGwsdC5leHRlbmQoe3Jhd1RpbGVEYXRhOmwuc2xpY2UoMCl9LG4sYyx1KSl9KSxuLmxvYWRlZD1uLmxvYWRlZHx8e30sbi5sb2FkZWRbaV09YX0pfSxULnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2FkZWQsbj10LnVpZCxpPXRoaXM7aWYociYmcltuXSl7dmFyIGE9cltuXTthLnNob3dDb2xsaXNpb25Cb3hlcz10LnNob3dDb2xsaXNpb25Cb3hlczt2YXIgbz1mdW5jdGlvbih0LHIpe3ZhciBuPWEucmVsb2FkQ2FsbGJhY2s7biYmKGRlbGV0ZSBhLnJlbG9hZENhbGxiYWNrLGEucGFyc2UoYS52ZWN0b3JUaWxlLGkubGF5ZXJJbmRleCxpLmFjdG9yLG4pKSxlKHQscil9OyJwYXJzaW5nIj09PWEuc3RhdHVzP2EucmVsb2FkQ2FsbGJhY2s9bzoiZG9uZSI9PT1hLnN0YXR1cyYmYS5wYXJzZShhLnZlY3RvclRpbGUsdGhpcy5sYXllckluZGV4LHRoaXMuYWN0b3Isbyl9fSxULnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRpbmcsbj10LnVpZDtyJiZyW25dJiZyW25dLmFib3J0JiYocltuXS5hYm9ydCgpLGRlbGV0ZSByW25dKSxlKCl9LFQucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRlZCxuPXQudWlkO3ImJnJbbl0mJmRlbGV0ZSByW25dLGUoKX07dmFyIEE9ZnVuY3Rpb24oKXt0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319O0EucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ZS51aWQsaT1lLmVuY29kaW5nLGE9bmV3IHQuZGVmYXVsdCQzMShuKTt0aGlzLmxvYWRpbmdbbl09YSxhLmxvYWRGcm9tSW1hZ2UoZS5yYXdJbWFnZURhdGEsaSksZGVsZXRlIHRoaXMubG9hZGluZ1tuXSx0aGlzLmxvYWRlZD10aGlzLmxvYWRlZHx8e30sdGhpcy5sb2FkZWRbbl09YSxyKG51bGwsYSl9LEEucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2FkZWQscj10LnVpZDtlJiZlW3JdJiZkZWxldGUgZVtyXX07dmFyIE09e1JBRElVUzo2Mzc4MTM3LEZMQVRURU5JTkc6MS8yOTguMjU3MjIzNTYzLFBPTEFSX1JBRElVUzo2MzU2NzUyLjMxNDJ9O2Z1bmN0aW9uIFModCl7dmFyIGU9MDtpZih0JiZ0Lmxlbmd0aD4wKXtlKz1NYXRoLmFicyhFKHRbMF0pKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKyllLT1NYXRoLmFicyhFKHRbcl0pKX1yZXR1cm4gZX1mdW5jdGlvbiBFKHQpe3ZhciBlLHIsbixpLGEsbyxzPTAsbD10Lmxlbmd0aDtpZihsPjIpe2ZvcihvPTA7bzxsO28rKylvPT09bC0yPyhuPWwtMixpPWwtMSxhPTApOm89PT1sLTE/KG49bC0xLGk9MCxhPTEpOihuPW8saT1vKzEsYT1vKzIpLGU9dFtuXSxyPXRbaV0scys9KEModFthXVswXSktQyhlWzBdKSkqTWF0aC5zaW4oQyhyWzFdKSk7cz1zKk0uUkFESVVTKk0uUkFESVVTLzJ9cmV0dXJuIHN9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdCpNYXRoLlBJLzE4MH12YXIgTD17Z2VvbWV0cnk6ZnVuY3Rpb24gdChlKXt2YXIgcixuPTA7c3dpdGNoKGUudHlwZSl7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gUyhlLmNvb3JkaW5hdGVzKTtjYXNlIk11bHRpUG9seWdvbiI6Zm9yKHI9MDtyPGUuY29vcmRpbmF0ZXMubGVuZ3RoO3IrKyluKz1TKGUuY29vcmRpbmF0ZXNbcl0pO3JldHVybiBuO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIDA7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihyPTA7cjxlLmdlb21ldHJpZXMubGVuZ3RoO3IrKyluKz10KGUuZ2VvbWV0cmllc1tyXSk7cmV0dXJuIG59fSxyaW5nOkV9O2Z1bmN0aW9uIHoodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQocixlKX19ZnVuY3Rpb24gTyh0LGUpe2U9ISFlLHRbMF09SSh0WzBdLGUpO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKXRbcl09SSh0W3JdLCFlKTtyZXR1cm4gdH1mdW5jdGlvbiBJKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBMLnJpbmcodCk+PTB9KHQpPT09ZT90OnQucmV2ZXJzZSgpfXZhciBEPXQuZGVmYXVsdCQyOS5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUudG9HZW9KU09OLFA9ZnVuY3Rpb24oZSl7dGhpcy5fZmVhdHVyZT1lLHRoaXMuZXh0ZW50PXQuZGVmYXVsdCQ4LHRoaXMudHlwZT1lLnR5cGUsdGhpcy5wcm9wZXJ0aWVzPWUudGFncywiaWQiaW4gZSYmIWlzTmFOKGUuaWQpJiYodGhpcy5pZD1wYXJzZUludChlLmlkLDEwKSl9O1AucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe2lmKDE9PT10aGlzLl9mZWF0dXJlLnR5cGUpe2Zvcih2YXIgZT1bXSxyPTAsbj10aGlzLl9mZWF0dXJlLmdlb21ldHJ5O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtlLnB1c2goW25ldyB0LmRlZmF1bHQkMShpWzBdLGlbMV0pXSl9cmV0dXJuIGV9Zm9yKHZhciBhPVtdLG89MCxzPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7bzxzLmxlbmd0aDtvKz0xKXtmb3IodmFyIGw9W10sYz0wLHU9c1tvXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107bC5wdXNoKG5ldyB0LmRlZmF1bHQkMShmWzBdLGZbMV0pKX1hLnB1c2gobCl9cmV0dXJuIGF9LFAucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7cmV0dXJuIEQuY2FsbCh0aGlzLHQsZSxyKX07dmFyIFI9ZnVuY3Rpb24oZSl7dGhpcy5sYXllcnM9e19nZW9qc29uVGlsZUxheWVyOnRoaXN9LHRoaXMubmFtZT0iX2dlb2pzb25UaWxlTGF5ZXIiLHRoaXMuZXh0ZW50PXQuZGVmYXVsdCQ4LHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuX2ZlYXR1cmVzPWV9O1IucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQKHRoaXMuX2ZlYXR1cmVzW3RdKX07dmFyIEY9dC5fX21vZHVsZUV4cG9ydHMuVmVjdG9yVGlsZUZlYXR1cmUsQj1OO2Z1bmN0aW9uIE4odCxlKXt0aGlzLm9wdGlvbnM9ZXx8e30sdGhpcy5mZWF0dXJlcz10LHRoaXMubGVuZ3RoPXQubGVuZ3RofWZ1bmN0aW9uIGoodCxlKXt0aGlzLmlkPSJudW1iZXIiPT10eXBlb2YgdC5pZD90LmlkOnZvaWQgMCx0aGlzLnR5cGU9dC50eXBlLHRoaXMucmF3R2VvbWV0cnk9MT09PXQudHlwZT9bdC5nZW9tZXRyeV06dC5nZW9tZXRyeSx0aGlzLnByb3BlcnRpZXM9dC50YWdzLHRoaXMuZXh0ZW50PWV8fDQwOTZ9Ti5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGoodGhpcy5mZWF0dXJlc1t0XSx0aGlzLm9wdGlvbnMuZXh0ZW50KX0sai5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yYXdHZW9tZXRyeTt0aGlzLmdlb21ldHJ5PVtdO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXtmb3IodmFyIG49ZVtyXSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKylpLnB1c2gobmV3IHQuZGVmYXVsdCQzMihuW2FdWzBdLG5bYV1bMV0pKTt0aGlzLmdlb21ldHJ5LnB1c2goaSl9cmV0dXJuIHRoaXMuZ2VvbWV0cnl9LGoucHJvdG90eXBlLmJib3g9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5fHx0aGlzLmxvYWRHZW9tZXRyeSgpO2Zvcih2YXIgdD10aGlzLmdlb21ldHJ5LGU9MS8wLHI9LTEvMCxuPTEvMCxpPS0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKWZvcih2YXIgbz10W2FdLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtlPU1hdGgubWluKGUsbC54KSxyPU1hdGgubWF4KHIsbC54KSxuPU1hdGgubWluKG4sbC55KSxpPU1hdGgubWF4KGksbC55KX1yZXR1cm5bZSxuLHIsaV19LGoucHJvdG90eXBlLnRvR2VvSlNPTj1GLnByb3RvdHlwZS50b0dlb0pTT047dmFyIFY9SCxVPUgscT1CO2Z1bmN0aW9uIEgoZSl7dmFyIHI9bmV3IHQuX19tb2R1bGVFeHBvcnRzJDE7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQubGF5ZXJzKWUud3JpdGVNZXNzYWdlKDMsRyx0LmxheWVyc1tyXSl9KGUsciksci5maW5pc2goKX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI7ZS53cml0ZVZhcmludEZpZWxkKDE1LHQudmVyc2lvbnx8MSksZS53cml0ZVN0cmluZ0ZpZWxkKDEsdC5uYW1lfHwiIiksZS53cml0ZVZhcmludEZpZWxkKDUsdC5leHRlbnR8fDQwOTYpO3ZhciBuPXtrZXlzOltdLHZhbHVlczpbXSxrZXljYWNoZTp7fSx2YWx1ZWNhY2hlOnt9fTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKW4uZmVhdHVyZT10LmZlYXR1cmUociksZS53cml0ZU1lc3NhZ2UoMixZLG4pO3ZhciBpPW4ua2V5cztmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWUud3JpdGVTdHJpbmdGaWVsZCgzLGlbcl0pO3ZhciBhPW4udmFsdWVzO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspZS53cml0ZU1lc3NhZ2UoNCxKLGFbcl0pfWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10LmZlYXR1cmU7dm9pZCAwIT09ci5pZCYmZS53cml0ZVZhcmludEZpZWxkKDEsci5pZCksZS53cml0ZU1lc3NhZ2UoMixXLHQpLGUud3JpdGVWYXJpbnRGaWVsZCgzLHIudHlwZSksZS53cml0ZU1lc3NhZ2UoNCwkLHIpfWZ1bmN0aW9uIFcodCxlKXt2YXIgcj10LmZlYXR1cmUsbj10LmtleXMsaT10LnZhbHVlcyxhPXQua2V5Y2FjaGUsbz10LnZhbHVlY2FjaGU7Zm9yKHZhciBzIGluIHIucHJvcGVydGllcyl7dmFyIGw9YVtzXTt2b2lkIDA9PT1sJiYobi5wdXNoKHMpLGw9bi5sZW5ndGgtMSxhW3NdPWwpLGUud3JpdGVWYXJpbnQobCk7dmFyIGM9ci5wcm9wZXJ0aWVzW3NdLHU9dHlwZW9mIGM7InN0cmluZyIhPT11JiYiYm9vbGVhbiIhPT11JiYibnVtYmVyIiE9PXUmJihjPUpTT04uc3RyaW5naWZ5KGMpKTt2YXIgZj11KyI6IitjLGg9b1tmXTt2b2lkIDA9PT1oJiYoaS5wdXNoKGMpLGg9aS5sZW5ndGgtMSxvW2ZdPWgpLGUud3JpdGVWYXJpbnQoaCl9fWZ1bmN0aW9uIFgodCxlKXtyZXR1cm4oZTw8MykrKDcmdCl9ZnVuY3Rpb24gWih0KXtyZXR1cm4gdDw8MV50Pj4zMX1mdW5jdGlvbiAkKHQsZSl7Zm9yKHZhciByPXQubG9hZEdlb21ldHJ5KCksbj10LnR5cGUsaT0wLGE9MCxvPXIubGVuZ3RoLHM9MDtzPG87cysrKXt2YXIgbD1yW3NdLGM9MTsxPT09biYmKGM9bC5sZW5ndGgpLGUud3JpdGVWYXJpbnQoWCgxLGMpKTtmb3IodmFyIHU9Mz09PW4/bC5sZW5ndGgtMTpsLmxlbmd0aCxmPTA7Zjx1O2YrKyl7MT09PWYmJjEhPT1uJiZlLndyaXRlVmFyaW50KFgoMix1LTEpKTt2YXIgaD1sW2ZdLngtaSxwPWxbZl0ueS1hO2Uud3JpdGVWYXJpbnQoWihoKSksZS53cml0ZVZhcmludChaKHApKSxpKz1oLGErPXB9Mz09PW4mJmUud3JpdGVWYXJpbnQoWCg3LDApKX19ZnVuY3Rpb24gSih0LGUpe3ZhciByPXR5cGVvZiB0OyJzdHJpbmciPT09cj9lLndyaXRlU3RyaW5nRmllbGQoMSx0KToiYm9vbGVhbiI9PT1yP2Uud3JpdGVCb29sZWFuRmllbGQoNyx0KToibnVtYmVyIj09PXImJih0JTEhPTA/ZS53cml0ZURvdWJsZUZpZWxkKDMsdCk6dDwwP2Uud3JpdGVTVmFyaW50RmllbGQoNix0KTplLndyaXRlVmFyaW50RmllbGQoNSx0KSl9Vi5mcm9tVmVjdG9yVGlsZUpzPVUsVi5mcm9tR2VvanNvblZ0PWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj17fTtmb3IodmFyIG4gaW4gdClyW25dPW5ldyBCKHRbbl0uZmVhdHVyZXMsZSkscltuXS5uYW1lPW4scltuXS52ZXJzaW9uPWUudmVyc2lvbixyW25dLmV4dGVudD1lLmV4dGVudDtyZXR1cm4gSCh7bGF5ZXJzOnJ9KX0sVi5HZW9KU09OV3JhcHBlcj1xO3ZhciBLPWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8pe2lmKCEoYS1pPD1uKSl7dmFyIHM9TWF0aC5mbG9vcigoaSthKS8yKTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7Zm9yKDthPmk7KXtpZihhLWk+NjAwKXt2YXIgcz1hLWkrMSxsPW4taSsxLGM9TWF0aC5sb2cocyksdT0uNSpNYXRoLmV4cCgyKmMvMyksZj0uNSpNYXRoLnNxcnQoYyp1KihzLXUpL3MpKihsLXMvMjwwPy0xOjEpO3QoZSxyLG4sTWF0aC5tYXgoaSxNYXRoLmZsb29yKG4tbCp1L3MrZikpLE1hdGgubWluKGEsTWF0aC5mbG9vcihuKyhzLWwpKnUvcytmKSksbyl9dmFyIGg9clsyKm4rb10scD1pLGQ9YTtmb3IoUShlLHIsaSxuKSxyWzIqYStvXT5oJiZRKGUscixpLGEpO3A8ZDspe2ZvcihRKGUscixwLGQpLHArKyxkLS07clsyKnArb108aDspcCsrO2Zvcig7clsyKmQrb10+aDspZC0tfXJbMippK29dPT09aD9RKGUscixpLGQpOlEoZSxyLCsrZCxhKSxkPD1uJiYoaT1kKzEpLG48PWQmJihhPWQtMSl9fShlLHIscyxpLGEsbyUyKSx0KGUscixuLGkscy0xLG8rMSksdChlLHIsbixzKzEsYSxvKzEpfX07ZnVuY3Rpb24gUSh0LGUscixuKXt0dCh0LHIsbiksdHQoZSwyKnIsMipuKSx0dChlLDIqcisxLDIqbisxKX1mdW5jdGlvbiB0dCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIGV0KHQsZSxyLG4pe3ZhciBpPXQtcixhPWUtbjtyZXR1cm4gaSppK2EqYX12YXIgcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbmV3IG50KHQsZSxyLG4saSl9O2Z1bmN0aW9uIG50KHQsZSxyLG4saSl7ZT1lfHxpdCxyPXJ8fGF0LGk9aXx8QXJyYXksdGhpcy5ub2RlU2l6ZT1ufHw2NCx0aGlzLnBvaW50cz10LHRoaXMuaWRzPW5ldyBpKHQubGVuZ3RoKSx0aGlzLmNvb3Jkcz1uZXcgaSgyKnQubGVuZ3RoKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl0aGlzLmlkc1thXT1hLHRoaXMuY29vcmRzWzIqYV09ZSh0W2FdKSx0aGlzLmNvb3Jkc1syKmErMV09cih0W2FdKTtLKHRoaXMuaWRzLHRoaXMuY29vcmRzLHRoaXMubm9kZVNpemUsMCx0aGlzLmlkcy5sZW5ndGgtMSwwKX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gdFsxXX1udC5wcm90b3R5cGU9e3JhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPVswLHQubGVuZ3RoLTEsMF0sdT1bXTtjLmxlbmd0aDspe3ZhciBmPWMucG9wKCksaD1jLnBvcCgpLHA9Yy5wb3AoKTtpZihoLXA8PW8pZm9yKHZhciBkPXA7ZDw9aDtkKyspcz1lWzIqZF0sbD1lWzIqZCsxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtkXSk7ZWxzZXt2YXIgZz1NYXRoLmZsb29yKChwK2gpLzIpO3M9ZVsyKmddLGw9ZVsyKmcrMV0scz49ciYmczw9aSYmbD49biYmbDw9YSYmdS5wdXNoKHRbZ10pO3ZhciB2PShmKzEpJTI7KDA9PT1mP3I8PXM6bjw9bCkmJihjLnB1c2gocCksYy5wdXNoKGctMSksYy5wdXNoKHYpKSwoMD09PWY/aT49czphPj1sKSYmKGMucHVzaChnKzEpLGMucHVzaChoKSxjLnB1c2godikpfX1yZXR1cm4gdX0odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsbix0aGlzLm5vZGVTaXplKX0sd2l0aGluOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bMCx0Lmxlbmd0aC0xLDBdLHM9W10sbD1pKmk7by5sZW5ndGg7KXt2YXIgYz1vLnBvcCgpLHU9by5wb3AoKSxmPW8ucG9wKCk7aWYodS1mPD1hKWZvcih2YXIgaD1mO2g8PXU7aCsrKWV0KGVbMipoXSxlWzIqaCsxXSxyLG4pPD1sJiZzLnB1c2godFtoXSk7ZWxzZXt2YXIgcD1NYXRoLmZsb29yKChmK3UpLzIpLGQ9ZVsyKnBdLGc9ZVsyKnArMV07ZXQoZCxnLHIsbik8PWwmJnMucHVzaCh0W3BdKTt2YXIgdj0oYysxKSUyOygwPT09Yz9yLWk8PWQ6bi1pPD1nKSYmKG8ucHVzaChmKSxvLnB1c2gocC0xKSxvLnB1c2godikpLCgwPT09Yz9yK2k+PWQ6bitpPj1nKSYmKG8ucHVzaChwKzEpLG8ucHVzaCh1KSxvLnB1c2godikpfX1yZXR1cm4gc30odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsdGhpcy5ub2RlU2l6ZSl9fTtmdW5jdGlvbiBvdCh0KXt0aGlzLm9wdGlvbnM9cHQoT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLHQpLHRoaXMudHJlZXM9bmV3IEFycmF5KHRoaXMub3B0aW9ucy5tYXhab29tKzEpfWZ1bmN0aW9uIHN0KHQsZSxyLG4saSl7cmV0dXJue3g6dCx5OmUsem9vbToxLzAsaWQ6bixwcm9wZXJ0aWVzOmkscGFyZW50SWQ6LTEsbnVtUG9pbnRzOnJ9fWZ1bmN0aW9uIGx0KHQsZSl7dmFyIHI9dC5nZW9tZXRyeS5jb29yZGluYXRlcztyZXR1cm57eDpmdChyWzBdKSx5Omh0KHJbMV0pLHpvb206MS8wLGlkOmUscGFyZW50SWQ6LTF9fWZ1bmN0aW9uIGN0KHQpe3JldHVybnt0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnV0KHQpLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6WyhuPXQueCwzNjAqKG4tLjUpKSwoZT10Lnkscj0oMTgwLTM2MCplKSpNYXRoLlBJLzE4MCwzNjAqTWF0aC5hdGFuKE1hdGguZXhwKHIpKS9NYXRoLlBJLTkwKV19fTt2YXIgZSxyLG59ZnVuY3Rpb24gdXQodCl7dmFyIGU9dC5udW1Qb2ludHMscj1lPj0xZTQ/TWF0aC5yb3VuZChlLzFlMykrImsiOmU+PTFlMz9NYXRoLnJvdW5kKGUvMTAwKS8xMCsiayI6ZTtyZXR1cm4gcHQocHQoe30sdC5wcm9wZXJ0aWVzKSx7Y2x1c3RlcjohMCxjbHVzdGVyX2lkOnQuaWQscG9pbnRfY291bnQ6ZSxwb2ludF9jb3VudF9hYmJyZXZpYXRlZDpyfSl9ZnVuY3Rpb24gZnQodCl7cmV0dXJuIHQvMzYwKy41fWZ1bmN0aW9uIGh0KHQpe3ZhciBlPU1hdGguc2luKHQqTWF0aC5QSS8xODApLHI9LjUtLjI1Kk1hdGgubG9nKCgxK2UpLygxLWUpKS9NYXRoLlBJO3JldHVybiByPDA/MDpyPjE/MTpyfWZ1bmN0aW9uIHB0KHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fWZ1bmN0aW9uIGR0KHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIHQueX1mdW5jdGlvbiB2dCh0LGUscixuLGksYSl7dmFyIG89aS1yLHM9YS1uO2lmKDAhPT1vfHwwIT09cyl7dmFyIGw9KCh0LXIpKm8rKGUtbikqcykvKG8qbytzKnMpO2w+MT8ocj1pLG49YSk6bD4wJiYocis9bypsLG4rPXMqbCl9cmV0dXJuKG89dC1yKSpvKyhzPWUtbikqc31mdW5jdGlvbiBtdCh0LGUscixuKXt2YXIgaT17aWQ6dHx8bnVsbCx0eXBlOmUsZ2VvbWV0cnk6cix0YWdzOm4sbWluWDoxLzAsbWluWToxLzAsbWF4WDotMS8wLG1heFk6LTEvMH07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2VvbWV0cnkscj10LnR5cGU7aWYoIlBvaW50Ij09PXJ8fCJNdWx0aVBvaW50Ij09PXJ8fCJMaW5lU3RyaW5nIj09PXIpeXQodCxlKTtlbHNlIGlmKCJQb2x5Z29uIj09PXJ8fCJNdWx0aUxpbmVTdHJpbmciPT09cilmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl5dCh0LGVbbl0pO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1yKWZvcihuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPTA7aTxlW25dLmxlbmd0aDtpKyspeXQodCxlW25dW2ldKX0oaSksaX1mdW5jdGlvbiB5dCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cis9Myl0Lm1pblg9TWF0aC5taW4odC5taW5YLGVbcl0pLHQubWluWT1NYXRoLm1pbih0Lm1pblksZVtyKzFdKSx0Lm1heFg9TWF0aC5tYXgodC5tYXhYLGVbcl0pLHQubWF4WT1NYXRoLm1heCh0Lm1heFksZVtyKzFdKX1mdW5jdGlvbiB4dCh0LGUscil7aWYoZS5nZW9tZXRyeSl7dmFyIG49ZS5nZW9tZXRyeS5jb29yZGluYXRlcyxpPWUuZ2VvbWV0cnkudHlwZSxhPU1hdGgucG93KHIudG9sZXJhbmNlLygoMTw8ci5tYXhab29tKSpyLmV4dGVudCksMiksbz1bXTtpZigiUG9pbnQiPT09aSlidChuLG8pO2Vsc2UgaWYoIk11bHRpUG9pbnQiPT09aSlmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKylidChuW3NdLG8pO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09aSlfdChuLG8sYSwhMSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWkpaWYoci5saW5lTWV0cmljcylmb3Iocz0wO3M8bi5sZW5ndGg7cysrKXJldHVybiBvPVtdLF90KG5bc10sbyxhLCExKSx2b2lkIHQucHVzaChtdChlLmlkLCJMaW5lU3RyaW5nIixvLGUucHJvcGVydGllcykpO2Vsc2Ugd3QobixvLGEsITEpO2Vsc2UgaWYoIlBvbHlnb24iPT09aSl3dChuLG8sYSwhMCk7ZWxzZXtpZigiTXVsdGlQb2x5Z29uIiE9PWkpe2lmKCJHZW9tZXRyeUNvbGxlY3Rpb24iPT09aSl7Zm9yKHM9MDtzPGUuZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7cysrKXh0KHQse2lkOmUuaWQsZ2VvbWV0cnk6ZS5nZW9tZXRyeS5nZW9tZXRyaWVzW3NdLHByb3BlcnRpZXM6ZS5wcm9wZXJ0aWVzfSxyKTtyZXR1cm59dGhyb3cgbmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpfWZvcihzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBsPVtdO3d0KG5bc10sbCxhLCEwKSxvLnB1c2gobCl9fXQucHVzaChtdChlLmlkLGksbyxlLnByb3BlcnRpZXMpKX19ZnVuY3Rpb24gYnQodCxlKXtlLnB1c2goa3QodFswXSkpLGUucHVzaChUdCh0WzFdKSksZS5wdXNoKDApfWZ1bmN0aW9uIF90KHQsZSxyLG4pe2Zvcih2YXIgaSxhLG89MCxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPWt0KHRbc11bMF0pLGM9VHQodFtzXVsxXSk7ZS5wdXNoKGwpLGUucHVzaChjKSxlLnB1c2goMCkscz4wJiYobys9bj8oaSpjLWwqYSkvMjpNYXRoLnNxcnQoTWF0aC5wb3cobC1pLDIpK01hdGgucG93KGMtYSwyKSkpLGk9bCxhPWN9dmFyIHU9ZS5sZW5ndGgtMztlWzJdPTEsZnVuY3Rpb24gdChlLHIsbixpKXtmb3IodmFyIGEsbz1pLHM9ZVtyXSxsPWVbcisxXSxjPWVbbl0sdT1lW24rMV0sZj1yKzM7ZjxuO2YrPTMpe3ZhciBoPXZ0KGVbZl0sZVtmKzFdLHMsbCxjLHUpO2g+byYmKGE9ZixvPWgpfW8+aSYmKGEtcj4zJiZ0KGUscixhLGkpLGVbYSsyXT1vLG4tYT4zJiZ0KGUsYSxuLGkpKX0oZSwwLHUsciksZVt1KzJdPTEsZS5zaXplPU1hdGguYWJzKG8pLGUuc3RhcnQ9MCxlLmVuZD1lLnNpemV9ZnVuY3Rpb24gd3QodCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPVtdO190KHRbaV0sYSxyLG4pLGUucHVzaChhKX19ZnVuY3Rpb24ga3QodCl7cmV0dXJuIHQvMzYwKy41fWZ1bmN0aW9uIFR0KHQpe3ZhciBlPU1hdGguc2luKHQqTWF0aC5QSS8xODApLHI9LjUtLjI1Kk1hdGgubG9nKCgxK2UpLygxLWUpKS9NYXRoLlBJO3JldHVybiByPDA/MDpyPjE/MTpyfWZ1bmN0aW9uIEF0KHQsZSxyLG4saSxhLG8scyl7aWYobi89ZSxhPj0oci89ZSkmJm88PW4pcmV0dXJuIHQ7aWYoYT5ufHxvPHIpcmV0dXJuIG51bGw7Zm9yKHZhciBsPVtdLGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIHU9dFtjXSxmPXUuZ2VvbWV0cnksaD11LnR5cGUscD0wPT09aT91Lm1pblg6dS5taW5ZLGQ9MD09PWk/dS5tYXhYOnUubWF4WTtpZihwPj1yJiZkPD1uKWwucHVzaCh1KTtlbHNlIGlmKCEocD5ufHxkPHIpKXt2YXIgZz1bXTtpZigiUG9pbnQiPT09aHx8Ik11bHRpUG9pbnQiPT09aClNdChmLGcscixuLGkpO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09aClTdChmLGcscixuLGksITEscy5saW5lTWV0cmljcyk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWgpQ3QoZixnLHIsbixpLCExKTtlbHNlIGlmKCJQb2x5Z29uIj09PWgpQ3QoZixnLHIsbixpLCEwKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09aClmb3IodmFyIHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIG09W107Q3QoZlt2XSxtLHIsbixpLCEwKSxtLmxlbmd0aCYmZy5wdXNoKG0pfWlmKGcubGVuZ3RoKXtpZihzLmxpbmVNZXRyaWNzJiYiTGluZVN0cmluZyI9PT1oKXtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKWwucHVzaChtdCh1LmlkLGgsZ1t2XSx1LnRhZ3MpKTtjb250aW51ZX0iTGluZVN0cmluZyIhPT1oJiYiTXVsdGlMaW5lU3RyaW5nIiE9PWh8fCgxPT09Zy5sZW5ndGg/KGg9IkxpbmVTdHJpbmciLGc9Z1swXSk6aD0iTXVsdGlMaW5lU3RyaW5nIiksIlBvaW50IiE9PWgmJiJNdWx0aVBvaW50IiE9PWh8fChoPTM9PT1nLmxlbmd0aD8iUG9pbnQiOiJNdWx0aVBvaW50IiksbC5wdXNoKG10KHUuaWQsaCxnLHUudGFncykpfX19cmV0dXJuIGwubGVuZ3RoP2w6bnVsbH1mdW5jdGlvbiBNdCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSs9Myl7dmFyIG89dFthK2ldO28+PXImJm88PW4mJihlLnB1c2godFthXSksZS5wdXNoKHRbYSsxXSksZS5wdXNoKHRbYSsyXSkpfX1mdW5jdGlvbiBTdCh0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPUV0KHQpLHU9MD09PWk/enQ6T3QsZj10LnN0YXJ0LGg9MDtoPHQubGVuZ3RoLTM7aCs9Myl7dmFyIHA9dFtoXSxkPXRbaCsxXSxnPXRbaCsyXSx2PXRbaCszXSxtPXRbaCs0XSx5PTA9PT1pP3A6ZCx4PTA9PT1pP3Y6bSxiPSExO28mJihzPU1hdGguc3FydChNYXRoLnBvdyhwLXYsMikrTWF0aC5wb3coZC1tLDIpKSkseTxyP3g+PXImJihsPXUoYyxwLGQsdixtLHIpLG8mJihjLnN0YXJ0PWYrcypsKSk6eT5uP3g8PW4mJihsPXUoYyxwLGQsdixtLG4pLG8mJihjLnN0YXJ0PWYrcypsKSk6THQoYyxwLGQsZykseDxyJiZ5Pj1yJiYobD11KGMscCxkLHYsbSxyKSxiPSEwKSx4Pm4mJnk8PW4mJihsPXUoYyxwLGQsdixtLG4pLGI9ITApLCFhJiZiJiYobyYmKGMuZW5kPWYrcypsKSxlLnB1c2goYyksYz1FdCh0KSksbyYmKGYrPXMpfXZhciBfPXQubGVuZ3RoLTM7cD10W19dLGQ9dFtfKzFdLGc9dFtfKzJdLCh5PTA9PT1pP3A6ZCk+PXImJnk8PW4mJkx0KGMscCxkLGcpLF89Yy5sZW5ndGgtMyxhJiZfPj0zJiYoY1tfXSE9PWNbMF18fGNbXysxXSE9PWNbMV0pJiZMdChjLGNbMF0sY1sxXSxjWzJdKSxjLmxlbmd0aCYmZS5wdXNoKGMpfWZ1bmN0aW9uIEV0KHQpe3ZhciBlPVtdO3JldHVybiBlLnNpemU9dC5zaXplLGUuc3RhcnQ9dC5zdGFydCxlLmVuZD10LmVuZCxlfWZ1bmN0aW9uIEN0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKylTdCh0W29dLGUscixuLGksYSwhMSl9ZnVuY3Rpb24gTHQodCxlLHIsbil7dC5wdXNoKGUpLHQucHVzaChyKSx0LnB1c2gobil9ZnVuY3Rpb24genQodCxlLHIsbixpLGEpe3ZhciBvPShhLWUpLyhuLWUpO3JldHVybiB0LnB1c2goYSksdC5wdXNoKHIrKGktcikqbyksdC5wdXNoKDEpLG99ZnVuY3Rpb24gT3QodCxlLHIsbixpLGEpe3ZhciBvPShhLXIpLyhpLXIpO3JldHVybiB0LnB1c2goZSsobi1lKSpvKSx0LnB1c2goYSksdC5wdXNoKDEpLG99ZnVuY3Rpb24gSXQodCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaSxhPXRbbl0sbz1hLnR5cGU7aWYoIlBvaW50Ij09PW98fCJNdWx0aVBvaW50Ij09PW98fCJMaW5lU3RyaW5nIj09PW8paT1EdChhLmdlb21ldHJ5LGUpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1vfHwiUG9seWdvbiI9PT1vKXtpPVtdO2Zvcih2YXIgcz0wO3M8YS5nZW9tZXRyeS5sZW5ndGg7cysrKWkucHVzaChEdChhLmdlb21ldHJ5W3NdLGUpKX1lbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09bylmb3IoaT1bXSxzPTA7czxhLmdlb21ldHJ5Lmxlbmd0aDtzKyspe2Zvcih2YXIgbD1bXSxjPTA7YzxhLmdlb21ldHJ5W3NdLmxlbmd0aDtjKyspbC5wdXNoKER0KGEuZ2VvbWV0cnlbc11bY10sZSkpO2kucHVzaChsKX1yLnB1c2gobXQoYS5pZCxvLGksYS50YWdzKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gRHQodCxlKXt2YXIgcj1bXTtyLnNpemU9dC5zaXplLHZvaWQgMCE9PXQuc3RhcnQmJihyLnN0YXJ0PXQuc3RhcnQsci5lbmQ9dC5lbmQpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MylyLnB1c2godFtuXStlLHRbbisxXSx0W24rMl0pO3JldHVybiByfWZ1bmN0aW9uIFB0KHQsZSl7aWYodC50cmFuc2Zvcm1lZClyZXR1cm4gdDt2YXIgcixuLGksYT0xPDx0Lnosbz10Lngscz10Lnk7Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoO3IrKyl7dmFyIGw9dC5mZWF0dXJlc1tyXSxjPWwuZ2VvbWV0cnksdT1sLnR5cGU7aWYobC5nZW9tZXRyeT1bXSwxPT09dSlmb3Iobj0wO248Yy5sZW5ndGg7bis9MilsLmdlb21ldHJ5LnB1c2goUnQoY1tuXSxjW24rMV0sZSxhLG8scykpO2Vsc2UgZm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIGY9W107Zm9yKGk9MDtpPGNbbl0ubGVuZ3RoO2krPTIpZi5wdXNoKFJ0KGNbbl1baV0sY1tuXVtpKzFdLGUsYSxvLHMpKTtsLmdlb21ldHJ5LnB1c2goZil9fXJldHVybiB0LnRyYW5zZm9ybWVkPSEwLHR9ZnVuY3Rpb24gUnQodCxlLHIsbixpLGEpe3JldHVybltNYXRoLnJvdW5kKHIqKHQqbi1pKSksTWF0aC5yb3VuZChyKihlKm4tYSkpXX1mdW5jdGlvbiBGdCh0LGUscixuLGkpe2Zvcih2YXIgYT1lPT09aS5tYXhab29tPzA6aS50b2xlcmFuY2UvKCgxPDxlKSppLmV4dGVudCksbz17ZmVhdHVyZXM6W10sbnVtUG9pbnRzOjAsbnVtU2ltcGxpZmllZDowLG51bUZlYXR1cmVzOjAsc291cmNlOm51bGwseDpyLHk6bix6OmUsdHJhbnNmb3JtZWQ6ITEsbWluWDoyLG1pblk6MSxtYXhYOi0xLG1heFk6MH0scz0wO3M8dC5sZW5ndGg7cysrKXtvLm51bUZlYXR1cmVzKyssQnQobyx0W3NdLGEsaSk7dmFyIGw9dFtzXS5taW5YLGM9dFtzXS5taW5ZLHU9dFtzXS5tYXhYLGY9dFtzXS5tYXhZO2w8by5taW5YJiYoby5taW5YPWwpLGM8by5taW5ZJiYoby5taW5ZPWMpLHU+by5tYXhYJiYoby5tYXhYPXUpLGY+by5tYXhZJiYoby5tYXhZPWYpfXJldHVybiBvfWZ1bmN0aW9uIEJ0KHQsZSxyLG4pe3ZhciBpPWUuZ2VvbWV0cnksYT1lLnR5cGUsbz1bXTtpZigiUG9pbnQiPT09YXx8Ik11bHRpUG9pbnQiPT09YSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrPTMpby5wdXNoKGlbc10pLG8ucHVzaChpW3MrMV0pLHQubnVtUG9pbnRzKyssdC5udW1TaW1wbGlmaWVkKys7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1hKU50KG8saSx0LHIsITEsITEpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1hfHwiUG9seWdvbiI9PT1hKWZvcihzPTA7czxpLmxlbmd0aDtzKyspTnQobyxpW3NdLHQsciwiUG9seWdvbiI9PT1hLDA9PT1zKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09YSlmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtmb3Iocz0wO3M8Yy5sZW5ndGg7cysrKU50KG8sY1tzXSx0LHIsITAsMD09PXMpfWlmKG8ubGVuZ3RoKXt2YXIgdT1lLnRhZ3N8fG51bGw7aWYoIkxpbmVTdHJpbmciPT09YSYmbi5saW5lTWV0cmljcyl7Zm9yKHZhciBmIGluIHU9e30sZS50YWdzKXVbZl09ZS50YWdzW2ZdO3UubWFwYm94X2NsaXBfc3RhcnQ9aS5zdGFydC9pLnNpemUsdS5tYXBib3hfY2xpcF9lbmQ9aS5lbmQvaS5zaXplfXZhciBoPXtnZW9tZXRyeTpvLHR5cGU6IlBvbHlnb24iPT09YXx8Ik11bHRpUG9seWdvbiI9PT1hPzM6IkxpbmVTdHJpbmciPT09YXx8Ik11bHRpTGluZVN0cmluZyI9PT1hPzI6MSx0YWdzOnV9O251bGwhPT1lLmlkJiYoaC5pZD1lLmlkKSx0LmZlYXR1cmVzLnB1c2goaCl9fWZ1bmN0aW9uIE50KHQsZSxyLG4saSxhKXt2YXIgbz1uKm47aWYobj4wJiZlLnNpemU8KGk/bzpuKSlyLm51bVBvaW50cys9ZS5sZW5ndGgvMztlbHNle2Zvcih2YXIgcz1bXSxsPTA7bDxlLmxlbmd0aDtsKz0zKSgwPT09bnx8ZVtsKzJdPm8pJiYoci5udW1TaW1wbGlmaWVkKysscy5wdXNoKGVbbF0pLHMucHVzaChlW2wrMV0pKSxyLm51bVBvaW50cysrO2kmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGgsYT1pLTI7bjxpO2E9bixuKz0yKXIrPSh0W25dLXRbYV0pKih0W24rMV0rdFthKzFdKTtpZihyPjA9PT1lKWZvcihuPTAsaT10Lmxlbmd0aDtuPGkvMjtuKz0yKXt2YXIgbz10W25dLHM9dFtuKzFdO3Rbbl09dFtpLTItbl0sdFtuKzFdPXRbaS0xLW5dLHRbaS0yLW5dPW8sdFtpLTEtbl09c319KHMsYSksdC5wdXNoKHMpfX1mdW5jdGlvbiBqdCh0LGUpe3ZhciByPShlPXRoaXMub3B0aW9ucz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXTtyZXR1cm4gdH0oT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLGUpKS5kZWJ1ZztpZihyJiZjb25zb2xlLnRpbWUoInByZXByb2Nlc3MgZGF0YSIpLGUubWF4Wm9vbTwwfHxlLm1heFpvb20+MjQpdGhyb3cgbmV3IEVycm9yKCJtYXhab29tIHNob3VsZCBiZSBpbiB0aGUgMC0yNCByYW5nZSIpO3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107aWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PXQudHlwZSlmb3IodmFyIG49MDtuPHQuZmVhdHVyZXMubGVuZ3RoO24rKyl4dChyLHQuZmVhdHVyZXNbbl0sZSk7ZWxzZSJGZWF0dXJlIj09PXQudHlwZT94dChyLHQsZSk6eHQocix7Z2VvbWV0cnk6dH0sZSk7cmV0dXJuIHJ9KHQsZSk7dGhpcy50aWxlcz17fSx0aGlzLnRpbGVDb29yZHM9W10sciYmKGNvbnNvbGUudGltZUVuZCgicHJlcHJvY2VzcyBkYXRhIiksY29uc29sZS5sb2coImluZGV4OiBtYXhab29tOiAlZCwgbWF4UG9pbnRzOiAlZCIsZS5pbmRleE1heFpvb20sZS5pbmRleE1heFBvaW50cyksY29uc29sZS50aW1lKCJnZW5lcmF0ZSB0aWxlcyIpLHRoaXMuc3RhdHM9e30sdGhpcy50b3RhbD0wKSwobj1mdW5jdGlvbih0LGUpe3ZhciByPWUuYnVmZmVyL2UuZXh0ZW50LG49dCxpPUF0KHQsMSwtMS1yLHIsMCwtMSwyLGUpLGE9QXQodCwxLDEtciwyK3IsMCwtMSwyLGUpO3JldHVybihpfHxhKSYmKG49QXQodCwxLC1yLDErciwwLC0xLDIsZSl8fFtdLGkmJihuPUl0KGksMSkuY29uY2F0KG4pKSxhJiYobj1uLmNvbmNhdChJdChhLC0xKSkpKSxufShuLGUpKS5sZW5ndGgmJnRoaXMuc3BsaXRUaWxlKG4sMCwwLDApLHImJihuLmxlbmd0aCYmY29uc29sZS5sb2coImZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCIsdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcyx0aGlzLnRpbGVzWzBdLm51bVBvaW50cyksY29uc29sZS50aW1lRW5kKCJnZW5lcmF0ZSB0aWxlcyIpLGNvbnNvbGUubG9nKCJ0aWxlcyBnZW5lcmF0ZWQ6Iix0aGlzLnRvdGFsLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdHMpKSl9ZnVuY3Rpb24gVnQodCxlLHIpe3JldHVybiAzMiooKDE8PHQpKnIrZSkrdH1mdW5jdGlvbiBVdCh0LGUpe3ZhciByPXQudGlsZUlELmNhbm9uaWNhbDtpZighdGhpcy5fZ2VvSlNPTkluZGV4KXJldHVybiBlKG51bGwsbnVsbCk7dmFyIG49dGhpcy5fZ2VvSlNPTkluZGV4LmdldFRpbGUoci56LHIueCxyLnkpO2lmKCFuKXJldHVybiBlKG51bGwsbnVsbCk7dmFyIGk9bmV3IFIobi5mZWF0dXJlcyksYT1WKGkpOzA9PT1hLmJ5dGVPZmZzZXQmJmEuYnl0ZUxlbmd0aD09PWEuYnVmZmVyLmJ5dGVMZW5ndGh8fChhPW5ldyBVaW50OEFycmF5KGEpKSxlKG51bGwse3ZlY3RvclRpbGU6aSxyYXdEYXRhOmEuYnVmZmVyfSl9b3QucHJvdG90eXBlPXtvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxNixyYWRpdXM6NDAsZXh0ZW50OjUxMixub2RlU2l6ZTo2NCxsb2c6ITEscmVkdWNlOm51bGwsaW5pdGlhbDpmdW5jdGlvbigpe3JldHVybnt9fSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxsb2FkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucy5sb2c7ZSYmY29uc29sZS50aW1lKCJ0b3RhbCB0aW1lIik7dmFyIHI9InByZXBhcmUgIit0Lmxlbmd0aCsiIHBvaW50cyI7ZSYmY29uc29sZS50aW1lKHIpLHRoaXMucG9pbnRzPXQ7dmFyIG49dC5tYXAobHQpO2UmJmNvbnNvbGUudGltZUVuZChyKTtmb3IodmFyIGk9dGhpcy5vcHRpb25zLm1heFpvb207aT49dGhpcy5vcHRpb25zLm1pblpvb207aS0tKXt2YXIgYT0rRGF0ZS5ub3coKTt0aGlzLnRyZWVzW2krMV09cnQobixkdCxndCx0aGlzLm9wdGlvbnMubm9kZVNpemUsRmxvYXQzMkFycmF5KSxuPXRoaXMuX2NsdXN0ZXIobixpKSxlJiZjb25zb2xlLmxvZygieiVkOiAlZCBjbHVzdGVycyBpbiAlZG1zIixpLG4ubGVuZ3RoLCtEYXRlLm5vdygpLWEpfXJldHVybiB0aGlzLnRyZWVzW3RoaXMub3B0aW9ucy5taW5ab29tXT1ydChuLGR0LGd0LHRoaXMub3B0aW9ucy5ub2RlU2l6ZSxGbG9hdDMyQXJyYXkpLGUmJmNvbnNvbGUudGltZUVuZCgidG90YWwgdGltZSIpLHRoaXN9LGdldENsdXN0ZXJzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKGUpXSxuPXIucmFuZ2UoZnQodFswXSksaHQodFszXSksZnQodFsyXSksaHQodFsxXSkpLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1yLnBvaW50c1tuW2FdXTtpLnB1c2goby5udW1Qb2ludHM/Y3Qobyk6dGhpcy5wb2ludHNbby5pZF0pfXJldHVybiBpfSxnZXRDaGlsZHJlbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnRyZWVzW2UrMV0ucG9pbnRzW3RdLG49dGhpcy5vcHRpb25zLnJhZGl1cy8odGhpcy5vcHRpb25zLmV4dGVudCpNYXRoLnBvdygyLGUpKSxpPXRoaXMudHJlZXNbZSsxXS53aXRoaW4oci54LHIueSxuKSxhPVtdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9dGhpcy50cmVlc1tlKzFdLnBvaW50c1tpW29dXTtzLnBhcmVudElkPT09dCYmYS5wdXNoKHMubnVtUG9pbnRzP2N0KHMpOnRoaXMucG9pbnRzW3MuaWRdKX1yZXR1cm4gYX0sZ2V0TGVhdmVzOmZ1bmN0aW9uKHQsZSxyLG4pe3I9cnx8MTAsbj1ufHwwO3ZhciBpPVtdO3JldHVybiB0aGlzLl9hcHBlbmRMZWF2ZXMoaSx0LGUscixuLDApLGl9LGdldFRpbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKHQpXSxpPU1hdGgucG93KDIsdCksYT10aGlzLm9wdGlvbnMuZXh0ZW50LG89dGhpcy5vcHRpb25zLnJhZGl1cy9hLHM9KHItbykvaSxsPShyKzErbykvaSxjPXtmZWF0dXJlczpbXX07cmV0dXJuIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKChlLW8pL2kscywoZSsxK28pL2ksbCksbi5wb2ludHMsZSxyLGksYyksMD09PWUmJnRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKDEtby9pLHMsMSxsKSxuLnBvaW50cyxpLHIsaSxjKSxlPT09aS0xJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgwLHMsby9pLGwpLG4ucG9pbnRzLC0xLHIsaSxjKSxjLmZlYXR1cmVzLmxlbmd0aD9jOm51bGx9LGdldENsdXN0ZXJFeHBhbnNpb25ab29tOmZ1bmN0aW9uKHQsZSl7Zm9yKDtlPHRoaXMub3B0aW9ucy5tYXhab29tOyl7dmFyIHI9dGhpcy5nZXRDaGlsZHJlbih0LGUpO2lmKGUrKywxIT09ci5sZW5ndGgpYnJlYWs7dD1yWzBdLnByb3BlcnRpZXMuY2x1c3Rlcl9pZH1yZXR1cm4gZX0sX2FwcGVuZExlYXZlczpmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPXRoaXMuZ2V0Q2hpbGRyZW4oZSxyKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc10ucHJvcGVydGllcztpZihsLmNsdXN0ZXI/YStsLnBvaW50X2NvdW50PD1pP2ErPWwucG9pbnRfY291bnQ6YT10aGlzLl9hcHBlbmRMZWF2ZXModCxsLmNsdXN0ZXJfaWQscisxLG4saSxhKTphPGk/YSsrOnQucHVzaChvW3NdKSx0Lmxlbmd0aD09PW4pYnJlYWt9cmV0dXJuIGF9LF9hZGRUaWxlRmVhdHVyZXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz1lW3Rbb11dO2EuZmVhdHVyZXMucHVzaCh7dHlwZToxLGdlb21ldHJ5OltbTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihzLngqaS1yKSksTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihzLnkqaS1uKSldXSx0YWdzOnMubnVtUG9pbnRzP3V0KHMpOnRoaXMucG9pbnRzW3MuaWRdLnByb3BlcnRpZXN9KX19LF9saW1pdFpvb206ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy5taW5ab29tLE1hdGgubWluKHQsdGhpcy5vcHRpb25zLm1heFpvb20rMSkpfSxfY2x1c3RlcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMub3B0aW9ucy5yYWRpdXMvKHRoaXMub3B0aW9ucy5leHRlbnQqTWF0aC5wb3coMixlKSksaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO2lmKCEoYS56b29tPD1lKSl7YS56b29tPWU7dmFyIG89dGhpcy50cmVlc1tlKzFdLHM9by53aXRoaW4oYS54LGEueSxuKSxsPWEubnVtUG9pbnRzfHwxLGM9YS54KmwsdT1hLnkqbCxmPW51bGw7dGhpcy5vcHRpb25zLnJlZHVjZSYmKGY9dGhpcy5vcHRpb25zLmluaXRpYWwoKSx0aGlzLl9hY2N1bXVsYXRlKGYsYSkpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXt2YXIgcD1vLnBvaW50c1tzW2hdXTtpZihlPHAuem9vbSl7dmFyIGQ9cC5udW1Qb2ludHN8fDE7cC56b29tPWUsYys9cC54KmQsdSs9cC55KmQsbCs9ZCxwLnBhcmVudElkPWksdGhpcy5vcHRpb25zLnJlZHVjZSYmdGhpcy5fYWNjdW11bGF0ZShmLHApfX0xPT09bD9yLnB1c2goYSk6KGEucGFyZW50SWQ9aSxyLnB1c2goc3QoYy9sLHUvbCxsLGksZikpKX19cmV0dXJuIHJ9LF9hY2N1bXVsYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5udW1Qb2ludHM/ZS5wcm9wZXJ0aWVzOnRoaXMub3B0aW9ucy5tYXAodGhpcy5wb2ludHNbZS5pZF0ucHJvcGVydGllcyk7dGhpcy5vcHRpb25zLnJlZHVjZSh0LHIpfX0sanQucHJvdG90eXBlLm9wdGlvbnM9e21heFpvb206MTQsaW5kZXhNYXhab29tOjUsaW5kZXhNYXhQb2ludHM6MWU1LHRvbGVyYW5jZTozLGV4dGVudDo0MDk2LGJ1ZmZlcjo2NCxsaW5lTWV0cmljczohMSxkZWJ1ZzowfSxqdC5wcm90b3R5cGUuc3BsaXRUaWxlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz1bdCxlLHIsbl0sbD10aGlzLm9wdGlvbnMsYz1sLmRlYnVnO3MubGVuZ3RoOyl7bj1zLnBvcCgpLHI9cy5wb3AoKSxlPXMucG9wKCksdD1zLnBvcCgpO3ZhciB1PTE8PGUsZj1WdChlLHIsbiksaD10aGlzLnRpbGVzW2ZdO2lmKCFoJiYoYz4xJiZjb25zb2xlLnRpbWUoImNyZWF0aW9uIiksaD10aGlzLnRpbGVzW2ZdPUZ0KHQsZSxyLG4sbCksdGhpcy50aWxlQ29vcmRzLnB1c2goe3o6ZSx4OnIseTpufSksYykpe2M+MSYmKGNvbnNvbGUubG9nKCJ0aWxlIHolZC0lZC0lZCAoZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkLCBzaW1wbGlmaWVkOiAlZCkiLGUscixuLGgubnVtRmVhdHVyZXMsaC5udW1Qb2ludHMsaC5udW1TaW1wbGlmaWVkKSxjb25zb2xlLnRpbWVFbmQoImNyZWF0aW9uIikpO3ZhciBwPSJ6IitlO3RoaXMuc3RhdHNbcF09KHRoaXMuc3RhdHNbcF18fDApKzEsdGhpcy50b3RhbCsrfWlmKGguc291cmNlPXQsaSl7aWYoZT09PWwubWF4Wm9vbXx8ZT09PWkpY29udGludWU7dmFyIGQ9MTw8aS1lO2lmKHIhPT1NYXRoLmZsb29yKGEvZCl8fG4hPT1NYXRoLmZsb29yKG8vZCkpY29udGludWV9ZWxzZSBpZihlPT09bC5pbmRleE1heFpvb218fGgubnVtUG9pbnRzPD1sLmluZGV4TWF4UG9pbnRzKWNvbnRpbnVlO2lmKGguc291cmNlPW51bGwsMCE9PXQubGVuZ3RoKXtjPjEmJmNvbnNvbGUudGltZSgiY2xpcHBpbmciKTt2YXIgZyx2LG0seSx4LGIsXz0uNSpsLmJ1ZmZlci9sLmV4dGVudCx3PS41LV8saz0uNStfLFQ9MStfO2c9dj1tPXk9bnVsbCx4PUF0KHQsdSxyLV8scitrLDAsaC5taW5YLGgubWF4WCxsKSxiPUF0KHQsdSxyK3cscitULDAsaC5taW5YLGgubWF4WCxsKSx0PW51bGwseCYmKGc9QXQoeCx1LG4tXyxuK2ssMSxoLm1pblksaC5tYXhZLGwpLHY9QXQoeCx1LG4rdyxuK1QsMSxoLm1pblksaC5tYXhZLGwpLHg9bnVsbCksYiYmKG09QXQoYix1LG4tXyxuK2ssMSxoLm1pblksaC5tYXhZLGwpLHk9QXQoYix1LG4rdyxuK1QsMSxoLm1pblksaC5tYXhZLGwpLGI9bnVsbCksYz4xJiZjb25zb2xlLnRpbWVFbmQoImNsaXBwaW5nIikscy5wdXNoKGd8fFtdLGUrMSwyKnIsMipuKSxzLnB1c2godnx8W10sZSsxLDIqciwyKm4rMSkscy5wdXNoKG18fFtdLGUrMSwyKnIrMSwyKm4pLHMucHVzaCh5fHxbXSxlKzEsMipyKzEsMipuKzEpfX19LGp0LnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm9wdGlvbnMsaT1uLmV4dGVudCxhPW4uZGVidWc7aWYodDwwfHx0PjI0KXJldHVybiBudWxsO3ZhciBvPTE8PHQscz1WdCh0LGU9KGUlbytvKSVvLHIpO2lmKHRoaXMudGlsZXNbc10pcmV0dXJuIFB0KHRoaXMudGlsZXNbc10saSk7YT4xJiZjb25zb2xlLmxvZygiZHJpbGxpbmcgZG93biB0byB6JWQtJWQtJWQiLHQsZSxyKTtmb3IodmFyIGwsYz10LHU9ZSxmPXI7IWwmJmM+MDspYy0tLHU9TWF0aC5mbG9vcih1LzIpLGY9TWF0aC5mbG9vcihmLzIpLGw9dGhpcy50aWxlc1tWdChjLHUsZildO3JldHVybiBsJiZsLnNvdXJjZT8oYT4xJiZjb25zb2xlLmxvZygiZm91bmQgcGFyZW50IHRpbGUgeiVkLSVkLSVkIixjLHUsZiksYT4xJiZjb25zb2xlLnRpbWUoImRyaWxsaW5nIGRvd24iKSx0aGlzLnNwbGl0VGlsZShsLnNvdXJjZSxjLHUsZix0LGUsciksYT4xJiZjb25zb2xlLnRpbWVFbmQoImRyaWxsaW5nIGRvd24iKSx0aGlzLnRpbGVzW3NdP1B0KHRoaXMudGlsZXNbc10saSk6bnVsbCk6bnVsbH07dmFyIHF0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4pe2UuY2FsbCh0aGlzLHQscixVdCksbiYmKHRoaXMubG9hZEdlb0pTT049bil9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWREYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksdGhpcy5fcGVuZGluZ0NhbGxiYWNrPWUsdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zPXQsdGhpcy5fc3RhdGUmJiJJZGxlIiE9PXRoaXMuX3N0YXRlP3RoaXMuX3N0YXRlPSJOZWVkc0xvYWREYXRhIjoodGhpcy5fc3RhdGU9IkNvYWxlc2NpbmciLHRoaXMuX2xvYWREYXRhKCkpfSxyLnByb3RvdHlwZS5fbG9hZERhdGE9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zKXt2YXIgZT10aGlzLl9wZW5kaW5nQ2FsbGJhY2sscj10aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7ZGVsZXRlIHRoaXMuX3BlbmRpbmdDYWxsYmFjayxkZWxldGUgdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zLHRoaXMubG9hZEdlb0pTT04ocixmdW5jdGlvbihuLGkpe2lmKG58fCFpKXJldHVybiBlKG4pO2lmKCJvYmplY3QiIT10eXBlb2YgaSlyZXR1cm4gZShuZXcgRXJyb3IoIklucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpOyFmdW5jdGlvbiB0KGUscil7c3dpdGNoKGUmJmUudHlwZXx8bnVsbCl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6cmV0dXJuIGUuZmVhdHVyZXM9ZS5mZWF0dXJlcy5tYXAoeih0LHIpKSxlO2Nhc2UiRmVhdHVyZSI6cmV0dXJuIGUuZ2VvbWV0cnk9dChlLmdlb21ldHJ5LHIpLGU7Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIlBvbHlnb24iPT09dC50eXBlP3QuY29vcmRpbmF0ZXM9Tyh0LmNvb3JkaW5hdGVzLGUpOiJNdWx0aVBvbHlnb24iPT09dC50eXBlJiYodC5jb29yZGluYXRlcz10LmNvb3JkaW5hdGVzLm1hcCh6KE8sZSkpKSx0fShlLHIpO2RlZmF1bHQ6cmV0dXJuIGV9fShpLCEwKTt0cnl7dC5fZ2VvSlNPTkluZGV4PXIuY2x1c3Rlcj9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG90KHQpfShyLnN1cGVyY2x1c3Rlck9wdGlvbnMpLmxvYWQoaS5mZWF0dXJlcyk6bmV3IGp0KGksci5nZW9qc29uVnRPcHRpb25zKX1jYXRjaChuKXtyZXR1cm4gZShuKX10LmxvYWRlZD17fTt2YXIgYT17fTtpZihyLnJlcXVlc3QmJnIucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpe3ZhciBvPXcoci5yZXF1ZXN0LnVybCk7byYmKGEucmVzb3VyY2VUaW1pbmc9e30sYS5yZXNvdXJjZVRpbWluZ1tyLnNvdXJjZV09SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvKSkpfWUobnVsbCxhKX0pfX0sci5wcm90b3R5cGUuY29hbGVzY2U9ZnVuY3Rpb24oKXsiQ29hbGVzY2luZyI9PT10aGlzLl9zdGF0ZT90aGlzLl9zdGF0ZT0iSWRsZSI6Ik5lZWRzTG9hZERhdGEiPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT0iQ29hbGVzY2luZyIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmxvYWRlZCxpPXQudWlkO3JldHVybiBuJiZuW2ldP2UucHJvdG90eXBlLnJlbG9hZFRpbGUuY2FsbCh0aGlzLHQscik6dGhpcy5sb2FkVGlsZSh0LHIpfSxyLnByb3RvdHlwZS5sb2FkR2VvSlNPTj1mdW5jdGlvbihlLHIpe2lmKGUucmVxdWVzdCl0LmdldEpTT04oZS5yZXF1ZXN0LHIpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlLmRhdGEpcmV0dXJuIHIobmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKTt0cnl7cmV0dXJuIHIobnVsbCxKU09OLnBhcnNlKGUuZGF0YSkpfWNhdGNoKHQpe3JldHVybiByKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSl9fX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksZSgpfSxyfShUKSxIdD1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuc2VsZj1lLHRoaXMuYWN0b3I9bmV3IHQuZGVmYXVsdCQ3KGUsdGhpcyksdGhpcy5sYXllckluZGV4ZXM9e30sdGhpcy53b3JrZXJTb3VyY2VUeXBlcz17dmVjdG9yOlQsZ2VvanNvbjpxdH0sdGhpcy53b3JrZXJTb3VyY2VzPXt9LHRoaXMuZGVtV29ya2VyU291cmNlcz17fSx0aGlzLnNlbGYucmVnaXN0ZXJXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlKXtpZihyLndvcmtlclNvdXJjZVR5cGVzW3RdKXRocm93IG5ldyBFcnJvcignV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgIicrdCsnIiBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7ci53b3JrZXJTb3VyY2VUeXBlc1t0XT1lfSx0aGlzLnNlbGYucmVnaXN0ZXJSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKGUpe2lmKHQucGx1Z2luLmlzTG9hZGVkKCkpdGhyb3cgbmV3IEVycm9yKCJSVEwgdGV4dCBwbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkLiIpO3QucGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZz1lLmFwcGx5QXJhYmljU2hhcGluZyx0LnBsdWdpbi5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ9ZS5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHR9fTtyZXR1cm4gSHQucHJvdG90eXBlLnNldExheWVycz1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRMYXllckluZGV4KHQpLnJlcGxhY2UoZSkscigpfSxIdC5wcm90b3R5cGUudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkudXBkYXRlKGUubGF5ZXJzLGUucmVtb3ZlZElkcykscigpfSxIdC5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5sb2FkVGlsZShlLHIpfSxIdC5wcm90b3R5cGUubG9hZERFTVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LEh0LnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVsb2FkVGlsZShlLHIpfSxIdC5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkuYWJvcnRUaWxlKGUscil9LEh0LnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVtb3ZlVGlsZShlLHIpfSxIdC5wcm90b3R5cGUucmVtb3ZlREVNVGlsZT1mdW5jdGlvbih0LGUpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLnJlbW92ZVRpbGUoZSl9LEh0LnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMud29ya2VyU291cmNlc1t0XSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV0mJnRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSl7dmFyIG49dGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdO2RlbGV0ZSB0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV0sdm9pZCAwIT09bi5yZW1vdmVTb3VyY2U/bi5yZW1vdmVTb3VyY2UoZSxyKTpyKCl9fSxIdC5wcm90b3R5cGUubG9hZFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dHJ5e3RoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKGUudXJsKSxyKCl9Y2F0Y2godCl7cih0LnRvU3RyaW5nKCkpfX0sSHQucHJvdG90eXBlLmxvYWRSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKGUscixuKXt0cnl7dC5wbHVnaW4uaXNMb2FkZWQoKXx8KHRoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHIpLG4odC5wbHVnaW4uaXNMb2FkZWQoKT9udWxsOm5ldyBFcnJvcigiUlRMIFRleHQgUGx1Z2luIGZhaWxlZCB0byBpbXBvcnQgc2NyaXB0cyBmcm9tICIrcikpKX1jYXRjaCh0KXtuKHQudG9TdHJpbmcoKSl9fSxIdC5wcm90b3R5cGUuZ2V0TGF5ZXJJbmRleD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheWVySW5kZXhlc1t0XTtyZXR1cm4gZXx8KGU9dGhpcy5sYXllckluZGV4ZXNbdF09bmV3IG4pLGV9LEh0LnByb3RvdHlwZS5nZXRXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXM7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdfHwodGhpcy53b3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLndvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLndvcmtlclNvdXJjZXNbdF1bZV09e30pLCF0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl0pe3ZhciBpPXtzZW5kOmZ1bmN0aW9uKGUscixpKXtuLmFjdG9yLnNlbmQoZSxyLGksdCl9fTt0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl09bmV3IHRoaXMud29ya2VyU291cmNlVHlwZXNbZV0oaSx0aGlzLmdldExheWVySW5kZXgodCkpfXJldHVybiB0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl19LEh0LnByb3RvdHlwZS5nZXRERU1Xb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdfHwodGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV09bmV3IEEpLHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXX0sInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJm5ldyBIdChzZWxmKSxIdH0pLGkoMCxmdW5jdGlvbih0KXt2YXIgZT10LmNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7cmV0dXJuISEoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJkFycmF5LnByb3RvdHlwZSYmQXJyYXkucHJvdG90eXBlLmV2ZXJ5JiZBcnJheS5wcm90b3R5cGUuZmlsdGVyJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaCYmQXJyYXkucHJvdG90eXBlLmluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLm1hcCYmQXJyYXkucHJvdG90eXBlLnNvbWUmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2UmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCYmQXJyYXkuaXNBcnJheSYmRnVuY3Rpb24ucHJvdG90eXBlJiZGdW5jdGlvbi5wcm90b3R5cGUuYmluZCYmT2JqZWN0LmtleXMmJk9iamVjdC5jcmVhdGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZiYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJk9iamVjdC5pc1NlYWxlZCYmT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNFeHRlbnNpYmxlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJiZPYmplY3Quc2VhbCYmT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zJiYiSlNPTiJpbiB3aW5kb3cmJiJwYXJzZSJpbiBKU09OJiYic3RyaW5naWZ5ImluIEpTT04mJmZ1bmN0aW9uKCl7aWYoISgiV29ya2VyImluIHdpbmRvdyYmIkJsb2IiaW4gd2luZG93JiYiVVJMImluIHdpbmRvdykpcmV0dXJuITE7dmFyIHQsZSxyPW5ldyBCbG9iKFsiIl0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSxuPVVSTC5jcmVhdGVPYmplY3RVUkwocik7dHJ5e2U9bmV3IFdvcmtlcihuKSx0PSEwfWNhdGNoKGUpe3Q9ITF9cmV0dXJuIGUmJmUudGVybWluYXRlKCksVVJMLnJldm9rZU9iamVjdFVSTChuKSx0fSgpJiYiVWludDhDbGFtcGVkQXJyYXkiaW4gd2luZG93JiZmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09clt0XSYmKHJbdF09ZnVuY3Rpb24odCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbj1PYmplY3QuY3JlYXRlKGUud2ViR0xDb250ZXh0QXR0cmlidXRlcyk7cmV0dXJuIG4uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD10LHIucHJvYmFibHlTdXBwb3J0c0NvbnRleHQ/ci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCgid2ViZ2wiLG4pfHxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pOnIuc3VwcG9ydHNDb250ZXh0P3Iuc3VwcG9ydHNDb250ZXh0KCJ3ZWJnbCIsbil8fHIuc3VwcG9ydHNDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pOnIuZ2V0Q29udGV4dCgid2ViZ2wiLG4pfHxyLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsbil9KHQpKSxyW3RdfSh0JiZ0LmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpKX10LmV4cG9ydHM/dC5leHBvcnRzPWU6d2luZG93JiYod2luZG93Lm1hcGJveGdsPXdpbmRvdy5tYXBib3hnbHx8e30sd2luZG93Lm1hcGJveGdsLnN1cHBvcnRlZD1lKTt2YXIgcj17fTtlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXM9e2FudGlhbGlhczohMSxhbHBoYTohMCxzdGVuY2lsOiEwLGRlcHRoOiEwfX0pLHI9dC5kZWZhdWx0LnBlcmZvcm1hbmNlJiZ0LmRlZmF1bHQucGVyZm9ybWFuY2Uubm93P3QuZGVmYXVsdC5wZXJmb3JtYW5jZS5ub3cuYmluZCh0LmRlZmF1bHQucGVyZm9ybWFuY2UpOkRhdGUubm93LmJpbmQoRGF0ZSksbj10LmRlZmF1bHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsaT10LmRlZmF1bHQuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tb3pDYW5jZWxBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQubXNDYW5jZWxBbmltYXRpb25GcmFtZSxhPXtub3c6cixmcmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0sY2FuY2VsRnJhbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCl9LGdldEltYWdlRGF0YTpmdW5jdGlvbihlKXt2YXIgcj10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbj1yLmdldENvbnRleHQoIjJkIik7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJmYWlsZWQgdG8gY3JlYXRlIGNhbnZhcyAyZCBjb250ZXh0Iik7cmV0dXJuIHIud2lkdGg9ZS53aWR0aCxyLmhlaWdodD1lLmhlaWdodCxuLmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSxuLmdldEltYWdlRGF0YSgwLDAsZS53aWR0aCxlLmhlaWdodCl9LGhhcmR3YXJlQ29uY3VycmVuY3k6dC5kZWZhdWx0Lm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5fHw0LGdldCBkZXZpY2VQaXhlbFJhdGlvKCl7cmV0dXJuIHQuZGVmYXVsdC5kZXZpY2VQaXhlbFJhdGlvfSxzdXBwb3J0c1dlYnA6ITF9O2lmKHQuZGVmYXVsdC5kb2N1bWVudCl7dmFyIG89dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO28ub25sb2FkPWZ1bmN0aW9uKCl7YS5zdXBwb3J0c1dlYnA9ITB9LG8uc3JjPSJkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdSaDRBQUFCWFJVSlFWbEE0VEJFQUFBQXZBUUFBQUFmUS8vNzN2LytCaU9oL0FBQT0ifXZhciBzPXtjcmVhdGU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiByJiYoaS5jbGFzc05hbWU9ciksbiYmbi5hcHBlbmRDaGlsZChpKSxpfSxjcmVhdGVOUzpmdW5jdGlvbihlLHIpe3JldHVybiB0LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUscil9fSxsPXQuZGVmYXVsdC5kb2N1bWVudD90LmRlZmF1bHQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlOm51bGw7ZnVuY3Rpb24gYyh0KXtpZighbClyZXR1cm4gbnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdaW4gbClyZXR1cm4gdFtlXTtyZXR1cm4gdFswXX12YXIgdSxmPWMoWyJ1c2VyU2VsZWN0IiwiTW96VXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJtc1VzZXJTZWxlY3QiXSk7cy5kaXNhYmxlRHJhZz1mdW5jdGlvbigpe2wmJmYmJih1PWxbZl0sbFtmXT0ibm9uZSIpfSxzLmVuYWJsZURyYWc9ZnVuY3Rpb24oKXtsJiZmJiYobFtmXT11KX07dmFyIGg9YyhbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSJdKTtzLnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbaF09ZX07dmFyIHA9ITE7dHJ5e3ZhciBkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3A9ITB9fSk7dC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGQsZCksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLGQsZCl9Y2F0Y2godCl7cD0hMX1zLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49e30pLCJwYXNzaXZlImluIG4mJnA/dC5hZGRFdmVudExpc3RlbmVyKGUscixuKTp0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLG4uY2FwdHVyZSl9LHMucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksInBhc3NpdmUiaW4gbiYmcD90LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLG4pOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsbi5jYXB0dXJlKX07dmFyIGc9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixnLCEwKX07cy5zdXBwcmVzc0NsaWNrPWZ1bmN0aW9uKCl7dC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixnLCEwKSx0LmRlZmF1bHQuc2V0VGltZW91dChmdW5jdGlvbigpe3QuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsZywhMCl9LDApfSxzLm1vdXNlUG9zPWZ1bmN0aW9uKGUscil7dmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gcj1yLnRvdWNoZXM/ci50b3VjaGVzWzBdOnIsbmV3IHQuZGVmYXVsdCQxKHIuY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCl9LHMudG91Y2hQb3M9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPVtdLGE9InRvdWNoZW5kIj09PXIudHlwZT9yLmNoYW5nZWRUb3VjaGVzOnIudG91Y2hlcyxvPTA7bzxhLmxlbmd0aDtvKyspaS5wdXNoKG5ldyB0LmRlZmF1bHQkMShhW29dLmNsaWVudFgtbi5sZWZ0LWUuY2xpZW50TGVmdCxhW29dLmNsaWVudFktbi50b3AtZS5jbGllbnRUb3ApKTtyZXR1cm4gaX0scy5tb3VzZUJ1dHRvbj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dC5kZWZhdWx0Lkluc3RhbGxUcmlnZ2VyJiYyPT09ZS5idXR0b24mJmUuY3RybEtleSYmdC5kZWZhdWx0Lm5hdmlnYXRvci5wbGF0Zm9ybS50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIk1BQyIpPj0wPzA6ZS5idXR0b259LHMucmVtb3ZlPWZ1bmN0aW9uKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfTt2YXIgdj17QVBJX1VSTDoiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIsUkVRVUlSRV9BQ0NFU1NfVE9LRU46ITAsQUNDRVNTX1RPS0VOOm51bGx9LG09IlNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zIjtmdW5jdGlvbiB5KHQsZSl7dmFyIHI9QSh2LkFQSV9VUkwpO2lmKHQucHJvdG9jb2w9ci5wcm90b2NvbCx0LmF1dGhvcml0eT1yLmF1dGhvcml0eSwiLyIhPT1yLnBhdGgmJih0LnBhdGg9IiIrci5wYXRoK3QucGF0aCksIXYuUkVRVUlSRV9BQ0NFU1NfVE9LRU4pcmV0dXJuIE0odCk7aWYoIShlPWV8fHYuQUNDRVNTX1RPS0VOKSl0aHJvdyBuZXcgRXJyb3IoIkFuIEFQSSBhY2Nlc3MgdG9rZW4gaXMgcmVxdWlyZWQgdG8gdXNlIE1hcGJveCBHTC4gIittKTtpZigicyI9PT1lWzBdKXRocm93IG5ldyBFcnJvcigiVXNlIGEgcHVibGljIGFjY2VzcyB0b2tlbiAocGsuKikgd2l0aCBNYXBib3ggR0wsIG5vdCBhIHNlY3JldCBhY2Nlc3MgdG9rZW4gKHNrLiopLiAiK20pO3JldHVybiB0LnBhcmFtcy5wdXNoKCJhY2Nlc3NfdG9rZW49IitlKSxNKHQpfWZ1bmN0aW9uIHgodCl7cmV0dXJuIDA9PT10LmluZGV4T2YoIm1hcGJveDoiKX12YXIgYj1mdW5jdGlvbih0LGUpe2lmKCF4KHQpKXJldHVybiB0O3ZhciByPUEodCk7cmV0dXJuIHIucGF0aD0iL3Y0LyIrci5hdXRob3JpdHkrIi5qc29uIixyLnBhcmFtcy5wdXNoKCJzZWN1cmUiKSx5KHIsZSl9LF89ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9QSh0KTtyZXR1cm4geCh0KT8oaS5wYXRoPSIvc3R5bGVzL3YxIitpLnBhdGgrIi9zcHJpdGUiK2Urcix5KGksbikpOihpLnBhdGgrPSIiK2UrcixNKGkpKX0sdz0vKFwuKHBuZ3xqcGcpXGQqKSg/PSQpLyxrPWZ1bmN0aW9uKHQsZSxyKXtpZighZXx8IXgoZSkpcmV0dXJuIHQ7dmFyIG49QSh0KSxpPWEuZGV2aWNlUGl4ZWxSYXRpbz49Mnx8NTEyPT09cj8iQDJ4IjoiIixvPWEuc3VwcG9ydHNXZWJwPyIud2VicCI6IiQxIjtyZXR1cm4gbi5wYXRoPW4ucGF0aC5yZXBsYWNlKHcsIiIraStvKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKykwPT09dFtlXS5pbmRleE9mKCJhY2Nlc3NfdG9rZW49dGsuIikmJih0W2VdPSJhY2Nlc3NfdG9rZW49Iisodi5BQ0NFU1NfVE9LRU58fCIiKSl9KG4ucGFyYW1zKSxNKG4pfSxUPS9eKFx3Kyk6XC9cLyhbXlwvP10qKShcL1teP10rKT9cPz8oLispPy87ZnVuY3Rpb24gQSh0KXt2YXIgZT10Lm1hdGNoKFQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHBhcnNlIFVSTCBvYmplY3QiKTtyZXR1cm57cHJvdG9jb2w6ZVsxXSxhdXRob3JpdHk6ZVsyXSxwYXRoOmVbM118fCIvIixwYXJhbXM6ZVs0XT9lWzRdLnNwbGl0KCImIik6W119fWZ1bmN0aW9uIE0odCl7dmFyIGU9dC5wYXJhbXMubGVuZ3RoPyI/Iit0LnBhcmFtcy5qb2luKCImIik6IiI7cmV0dXJuIHQucHJvdG9jb2wrIjovLyIrdC5hdXRob3JpdHkrdC5wYXRoK2V9dmFyIFM9dC5kZWZhdWx0LkhUTUxJbWFnZUVsZW1lbnQsRT10LmRlZmF1bHQuSFRNTENhbnZhc0VsZW1lbnQsQz10LmRlZmF1bHQuSFRNTFZpZGVvRWxlbWVudCxMPXQuZGVmYXVsdC5JbWFnZURhdGEsej1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNvbnRleHQ9dCx0aGlzLmZvcm1hdD1yLHRoaXMudGV4dHVyZT10LmdsLmNyZWF0ZVRleHR1cmUoKSx0aGlzLnVwZGF0ZShlLG4pfTt6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT0hdGhpcy5zaXplfHx0aGlzLnNpemVbMF0hPT1yfHx0aGlzLnNpemVbMV0hPT1uLGE9dGhpcy5jb250ZXh0LG89YS5nbDt0aGlzLnVzZU1pcG1hcD1Cb29sZWFuKGUmJmUudXNlTWlwbWFwKSxvLmJpbmRUZXh0dXJlKG8uVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGk/KHRoaXMuc2l6ZT1bcixuXSxhLnBpeGVsU3RvcmVVbnBhY2suc2V0KDEpLHRoaXMuZm9ybWF0IT09by5SR0JBfHxlJiYhMT09PWUucHJlbXVsdGlwbHl8fGEucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KCEwKSx0IGluc3RhbmNlb2YgU3x8dCBpbnN0YW5jZW9mIEV8fHQgaW5zdGFuY2VvZiBDfHx0IGluc3RhbmNlb2YgTD9vLnRleEltYWdlMkQoby5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsby5VTlNJR05FRF9CWVRFLHQpOm8udGV4SW1hZ2UyRChvLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCxyLG4sMCx0aGlzLmZvcm1hdCxvLlVOU0lHTkVEX0JZVEUsdC5kYXRhKSk6dCBpbnN0YW5jZW9mIFN8fHQgaW5zdGFuY2VvZiBFfHx0IGluc3RhbmNlb2YgQ3x8dCBpbnN0YW5jZW9mIEw/by50ZXhTdWJJbWFnZTJEKG8uVEVYVFVSRV8yRCwwLDAsMCxvLlJHQkEsby5VTlNJR05FRF9CWVRFLHQpOm8udGV4U3ViSW1hZ2UyRChvLlRFWFRVUkVfMkQsMCwwLDAscixuLG8uUkdCQSxvLlVOU0lHTkVEX0JZVEUsdC5kYXRhKSx0aGlzLnVzZU1pcG1hcCYmdGhpcy5pc1NpemVQb3dlck9mVHdvKCkmJm8uZ2VuZXJhdGVNaXBtYXAoby5URVhUVVJFXzJEKX0sei5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5jb250ZXh0LmdsO24uYmluZFRleHR1cmUobi5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksciE9PW4uTElORUFSX01JUE1BUF9ORUFSRVNUfHx0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKXx8KHI9bi5MSU5FQVIpLHQhPT10aGlzLmZpbHRlciYmKG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsdCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixyfHx0KSx0aGlzLmZpbHRlcj10KSxlIT09dGhpcy53cmFwJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLGUpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxlKSx0aGlzLndyYXA9ZSl9LHoucHJvdG90eXBlLmlzU2l6ZVBvd2VyT2ZUd289ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplWzBdPT09dGhpcy5zaXplWzFdJiZNYXRoLmxvZyh0aGlzLnNpemVbMF0pL01hdGguTE4yJTE9PTB9LHoucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpLHRoaXMudGV4dHVyZT1udWxsfTt2YXIgTz1mdW5jdGlvbigpe3RoaXMuaW1hZ2VzPXt9LHRoaXMubG9hZGVkPSExLHRoaXMucmVxdWVzdG9ycz1bXSx0aGlzLnNoZWxmUGFjaz1uZXcgdC5kZWZhdWx0JDIoNjQsNjQse2F1dG9SZXNpemU6ITB9KSx0aGlzLnBhdHRlcm5zPXt9LHRoaXMuYXRsYXNJbWFnZT1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOjY0LGhlaWdodDo2NH0pLHRoaXMuZGlydHk9ITB9O08ucHJvdG90eXBlLmlzTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGVkfSxPLnByb3RvdHlwZS5zZXRMb2FkZWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5sb2FkZWQhPT10JiYodGhpcy5sb2FkZWQ9dCx0KSl7Zm9yKHZhciBlPTAscj10aGlzLnJlcXVlc3RvcnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9bi5pZHMsYT1uLmNhbGxiYWNrO3RoaXMuX25vdGlmeShpLGEpfXRoaXMucmVxdWVzdG9ycz1bXX19LE8ucHJvdG90eXBlLmdldEltYWdlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltYWdlc1t0XX0sTy5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLmltYWdlc1t0XT1lfSxPLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5pbWFnZXNbdF07dmFyIGU9dGhpcy5wYXR0ZXJuc1t0XTtlJiYodGhpcy5zaGVsZlBhY2sudW5yZWYoZS5iaW4pLGRlbGV0ZSB0aGlzLnBhdHRlcm5zW3RdKX0sTy5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ITA7aWYoIXRoaXMuaXNMb2FkZWQoKSlmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuaW1hZ2VzW2FdfHwocj0hMSl9dGhpcy5pc0xvYWRlZCgpfHxyP3RoaXMuX25vdGlmeSh0LGUpOnRoaXMucmVxdWVzdG9ycy5wdXNoKHtpZHM6dCxjYWxsYmFjazplfSl9LE8ucHJvdG90eXBlLl9ub3RpZnk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz10aGlzLmltYWdlc1thXTtvJiYoclthXT17ZGF0YTpvLmRhdGEuY2xvbmUoKSxwaXhlbFJhdGlvOm8ucGl4ZWxSYXRpbyxzZGY6by5zZGZ9KX1lKG51bGwscil9LE8ucHJvdG90eXBlLmdldFBpeGVsU2l6ZT1mdW5jdGlvbigpe3JldHVybnt3aWR0aDp0aGlzLnNoZWxmUGFjay53LGhlaWdodDp0aGlzLnNoZWxmUGFjay5ofX0sTy5wcm90b3R5cGUuZ2V0UGF0dGVybj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBhdHRlcm5zW2VdO2lmKHIpcmV0dXJuIHIucG9zaXRpb247dmFyIG49dGhpcy5nZXRJbWFnZShlKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1uLmRhdGEud2lkdGgrMixhPW4uZGF0YS5oZWlnaHQrMixvPXRoaXMuc2hlbGZQYWNrLnBhY2tPbmUoaSxhKTtpZighbylyZXR1cm4gbnVsbDt0aGlzLmF0bGFzSW1hZ2UucmVzaXplKHRoaXMuZ2V0UGl4ZWxTaXplKCkpO3ZhciBzPW4uZGF0YSxsPXRoaXMuYXRsYXNJbWFnZSxjPW8ueCsxLHU9by55KzEsZj1zLndpZHRoLGg9cy5oZWlnaHQ7dC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OjB9LHt4OmMseTp1fSx7d2lkdGg6ZixoZWlnaHQ6aH0pLHQuUkdCQUltYWdlLmNvcHkocyxsLHt4OjAseTpoLTF9LHt4OmMseTp1LTF9LHt3aWR0aDpmLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OjB9LHt4OmMseTp1K2h9LHt3aWR0aDpmLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6Zi0xLHk6MH0se3g6Yy0xLHk6dX0se3dpZHRoOjEsaGVpZ2h0Omh9KSx0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDowLHk6MH0se3g6YytmLHk6dX0se3dpZHRoOjEsaGVpZ2h0Omh9KSx0aGlzLmRpcnR5PSEwO3ZhciBwPW5ldyB0LkltYWdlUG9zaXRpb24obyxuKTtyZXR1cm4gdGhpcy5wYXR0ZXJuc1tlXT17YmluOm8scG9zaXRpb246cH0scH0sTy5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmdsO3RoaXMuYXRsYXNUZXh0dXJlP3RoaXMuZGlydHkmJih0aGlzLmF0bGFzVGV4dHVyZS51cGRhdGUodGhpcy5hdGxhc0ltYWdlKSx0aGlzLmRpcnR5PSExKTp0aGlzLmF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuYXRsYXNJbWFnZSxlLlJHQkEpLHRoaXMuYXRsYXNUZXh0dXJlLmJpbmQoZS5MSU5FQVIsZS5DTEFNUF9UT19FREdFKX07dmFyIEk9UCxEPTFlMjA7ZnVuY3Rpb24gUCh0LGUscixuLGksYSl7dGhpcy5mb250U2l6ZT10fHwyNCx0aGlzLmJ1ZmZlcj12b2lkIDA9PT1lPzM6ZSx0aGlzLmN1dG9mZj1ufHwuMjUsdGhpcy5mb250RmFtaWx5PWl8fCJzYW5zLXNlcmlmIix0aGlzLmZvbnRXZWlnaHQ9YXx8Im5vcm1hbCIsdGhpcy5yYWRpdXM9cnx8ODt2YXIgbz10aGlzLnNpemU9dGhpcy5mb250U2l6ZSsyKnRoaXMuYnVmZmVyO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD1vLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5jdHguZm9udD10aGlzLmZvbnRXZWlnaHQrIiAiK3RoaXMuZm9udFNpemUrInB4ICIrdGhpcy5mb250RmFtaWx5LHRoaXMuY3R4LnRleHRCYXNlbGluZT0ibWlkZGxlIix0aGlzLmN0eC5maWxsU3R5bGU9ImJsYWNrIix0aGlzLmdyaWRPdXRlcj1uZXcgRmxvYXQ2NEFycmF5KG8qbyksdGhpcy5ncmlkSW5uZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZj1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuZD1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuej1uZXcgRmxvYXQ2NEFycmF5KG8rMSksdGhpcy52PW5ldyBJbnQxNkFycmF5KG8pLHRoaXMubWlkZGxlPU1hdGgucm91bmQoby8yKihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkdlY2tvLyIpPj0wPzEuMjoxKSl9ZnVuY3Rpb24gUih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MDtzPGU7cysrKXtmb3IodmFyIGw9MDtsPHI7bCsrKW5bbF09dFtsKmUrc107Zm9yKEYobixpLGEsbyxyKSxsPTA7bDxyO2wrKyl0W2wqZStzXT1pW2xdfWZvcihsPTA7bDxyO2wrKyl7Zm9yKHM9MDtzPGU7cysrKW5bc109dFtsKmUrc107Zm9yKEYobixpLGEsbyxlKSxzPTA7czxlO3MrKyl0W2wqZStzXT1NYXRoLnNxcnQoaVtzXSl9fWZ1bmN0aW9uIEYodCxlLHIsbixpKXtyWzBdPTAsblswXT0tRCxuWzFdPStEO2Zvcih2YXIgYT0xLG89MDthPGk7YSsrKXtmb3IodmFyIHM9KHRbYV0rYSphLSh0W3Jbb11dK3Jbb10qcltvXSkpLygyKmEtMipyW29dKTtzPD1uW29dOylvLS0scz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3JbKytvXT1hLG5bb109cyxuW28rMV09K0R9Zm9yKGE9MCxvPTA7YTxpO2ErKyl7Zm9yKDtuW28rMV08YTspbysrO2VbYV09KGEtcltvXSkqKGEtcltvXSkrdFtyW29dXX19UC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRoaXMuc2l6ZSp0aGlzLnNpemUpLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgaT1lLmRhdGFbNCpuKzNdLzI1NTt0aGlzLmdyaWRPdXRlcltuXT0xPT09aT8wOjA9PT1pP0Q6TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1pKSwyKSx0aGlzLmdyaWRJbm5lcltuXT0xPT09aT9EOjA9PT1pPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxpLS41KSwyKX1mb3IoUih0aGlzLmdyaWRPdXRlcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksUih0aGlzLmdyaWRJbm5lcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspe3ZhciBhPXRoaXMuZ3JpZE91dGVyW25dLXRoaXMuZ3JpZElubmVyW25dO3Jbbl09TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNTUtMjU1KihhL3RoaXMucmFkaXVzK3RoaXMuY3V0b2ZmKSkpKX1yZXR1cm4gcn07dmFyIEI9ZnVuY3Rpb24odCxlKXt0aGlzLnJlcXVlc3RUcmFuc2Zvcm09dCx0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLHRoaXMuZW50cmllcz17fX07Qi5wcm90b3R5cGUuc2V0VVJMPWZ1bmN0aW9uKHQpe3RoaXMudXJsPXR9LEIucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1bXTtmb3IodmFyIGEgaW4gZSlmb3IodmFyIG89MCxzPWVbYV07bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO2kucHVzaCh7c3RhY2s6YSxpZDpsfSl9dC5hc3luY0FsbChpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFjayxpPXQuaWQsYT1uLmVudHJpZXNbcl07YXx8KGE9bi5lbnRyaWVzW3JdPXtnbHlwaHM6e30scmVxdWVzdHM6e319KTt2YXIgbz1hLmdseXBoc1tpXTtpZih2b2lkIDA9PT1vKWlmKG89bi5fdGlueVNERihhLHIsaSkpZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pO2Vsc2V7dmFyIHM9TWF0aC5mbG9vcihpLzI1Nik7aWYoMjU2KnM+NjU1MzUpZShuZXcgRXJyb3IoImdseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWQiKSk7ZWxzZXt2YXIgbD1hLnJlcXVlc3RzW3NdO2x8fChsPWEucmVxdWVzdHNbc109W10sQi5sb2FkR2x5cGhSYW5nZShyLHMsbi51cmwsbi5yZXF1ZXN0VHJhbnNmb3JtLGZ1bmN0aW9uKHQsZSl7aWYoZSlmb3IodmFyIHIgaW4gZSlhLmdseXBoc1srcl09ZVsrcl07Zm9yKHZhciBuPTAsaT1sO248aS5sZW5ndGg7bis9MSkoMCxpW25dKSh0LGUpO2RlbGV0ZSBhLnJlcXVlc3RzW3NdfSkpLGwucHVzaChmdW5jdGlvbih0LG4pe3Q/ZSh0KTpuJiZlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpuW2ldfHxudWxsfSl9KX19ZWxzZSBlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSl9LGZ1bmN0aW9uKHQsZSl7aWYodClyKHQpO2Vsc2UgaWYoZSl7Zm9yKHZhciBuPXt9LGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9by5zdGFjayxsPW8uaWQsYz1vLmdseXBoOyhuW3NdfHwobltzXT17fSkpW2xdPWMmJntpZDpjLmlkLGJpdG1hcDpjLmJpdG1hcC5jbG9uZSgpLG1ldHJpY3M6Yy5tZXRyaWNzfX1yKG51bGwsbil9fSl9LEIucHJvdG90eXBlLl90aW55U0RGPWZ1bmN0aW9uKGUscixuKXt2YXIgaT10aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtpZihpJiYodC5kZWZhdWx0JDRbIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiXShuKXx8dC5kZWZhdWx0JDRbIkhhbmd1bCBTeWxsYWJsZXMiXShuKSkpe3ZhciBhPWUudGlueVNERjtpZighYSl7dmFyIG89IjQwMCI7L2JvbGQvaS50ZXN0KHIpP289IjkwMCI6L21lZGl1bS9pLnRlc3Qocik/bz0iNTAwIjovbGlnaHQvaS50ZXN0KHIpJiYobz0iMjAwIiksYT1lLnRpbnlTREY9bmV3IEIuVGlueVNERigyNCwzLDgsLjI1LGksbyl9cmV0dXJue2lkOm4sYml0bWFwOm5ldyB0LkFscGhhSW1hZ2Uoe3dpZHRoOjMwLGhlaWdodDozMH0sYS5kcmF3KFN0cmluZy5mcm9tQ2hhckNvZGUobikpKSxtZXRyaWNzOnt3aWR0aDoyNCxoZWlnaHQ6MjQsbGVmdDowLHRvcDotOCxhZHZhbmNlOjI0fX19fSxCLmxvYWRHbHlwaFJhbmdlPWZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG89MjU2KnIscz1vKzI1NSxsPWkoZnVuY3Rpb24odCxlKXtpZigheCh0KSlyZXR1cm4gdDt2YXIgcj1BKHQpO3JldHVybiByLnBhdGg9Ii9mb250cy92MSIrci5wYXRoLHkocixlKX0obikucmVwbGFjZSgie2ZvbnRzdGFja30iLGUpLnJlcGxhY2UoIntyYW5nZX0iLG8rIi0iK3MpLHQuUmVzb3VyY2VUeXBlLkdseXBocyk7dC5nZXRBcnJheUJ1ZmZlcihsLGZ1bmN0aW9uKGUscil7aWYoZSlhKGUpO2Vsc2UgaWYocil7Zm9yKHZhciBuPXt9LGk9MCxvPXQuZGVmYXVsdCQzKHIuZGF0YSk7aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldO25bcy5pZF09c31hKG51bGwsbil9fSl9LEIuVGlueVNERj1JO3ZhciBOPWZ1bmN0aW9uKCl7dGhpcy5zcGVjaWZpY2F0aW9uPXQuZGVmYXVsdCQ1LmxpZ2h0LnBvc2l0aW9ufTtOLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc3BoZXJpY2FsVG9DYXJ0ZXNpYW4oZS5leHByZXNzaW9uLmV2YWx1YXRlKHIpKX0sTi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybnt4OnQubnVtYmVyKGUueCxyLngsbikseTp0Lm51bWJlcihlLnksci55LG4pLHo6dC5udW1iZXIoZS56LHIueixuKX19O3ZhciBqPW5ldyB0LlByb3BlcnRpZXMoe2FuY2hvcjpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LmRlZmF1bHQkNS5saWdodC5hbmNob3IpLHBvc2l0aW9uOm5ldyBOLGNvbG9yOm5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuZGVmYXVsdCQ1LmxpZ2h0LmNvbG9yKSxpbnRlbnNpdHk6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5kZWZhdWx0JDUubGlnaHQuaW50ZW5zaXR5KX0pLFY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5fdHJhbnNpdGlvbmFibGU9bmV3IHQuVHJhbnNpdGlvbmFibGUoaiksdGhpcy5zZXRMaWdodChyKSx0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNlcmlhbGl6ZSgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlKXtpZighdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZUxpZ2h0LGUpKWZvcih2YXIgciBpbiBlKXt2YXIgbj1lW3JdO3QuZW5kc1dpdGgociwiLXRyYW5zaXRpb24iKT90aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRUcmFuc2l0aW9uKHIuc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpLG4pOnRoaXMuX3RyYW5zaXRpb25hYmxlLnNldFZhbHVlKHIsbil9fSxyLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmcpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmcuaGFzVHJhbnNpdGlvbigpfSxyLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnRpZXM9dGhpcy5fdHJhbnNpdGlvbmluZy5wb3NzaWJseUV2YWx1YXRlKHQpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5lbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe3ZhbHVlOnIsc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9LHN0eWxlU3BlYzp0LmRlZmF1bHQkNX0pKSl9LHJ9KHQuRXZlbnRlZCksVT1mdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMubmV4dFJvdz0wLHRoaXMuYnl0ZXM9NCx0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy53aWR0aCp0aGlzLmhlaWdodCp0aGlzLmJ5dGVzKSx0aGlzLnBvc2l0aW9ucz17fX07VS5wcm90b3R5cGUuZ2V0RGFzaD1mdW5jdGlvbih0LGUpe3ZhciByPXQuam9pbigiLCIpK1N0cmluZyhlKTtyZXR1cm4gdGhpcy5wb3NpdGlvbnNbcl18fCh0aGlzLnBvc2l0aW9uc1tyXT10aGlzLmFkZERhc2godCxlKSksdGhpcy5wb3NpdGlvbnNbcl19LFUucHJvdG90eXBlLmFkZERhc2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yPzc6MCxpPTIqbisxO2lmKHRoaXMubmV4dFJvdytpPnRoaXMuaGVpZ2h0KXJldHVybiB0Lndhcm5PbmNlKCJMaW5lQXRsYXMgb3V0IG9mIHNwYWNlIiksbnVsbDtmb3IodmFyIGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspYSs9ZVtvXTtmb3IodmFyIHM9dGhpcy53aWR0aC9hLGw9cy8yLGM9ZS5sZW5ndGglMj09MSx1PS1uO3U8PW47dSsrKWZvcih2YXIgZj10aGlzLm5leHRSb3crbit1LGg9dGhpcy53aWR0aCpmLHA9Yz8tZVtlLmxlbmd0aC0xXTowLGQ9ZVswXSxnPTEsdj0wO3Y8dGhpcy53aWR0aDt2Kyspe2Zvcig7ZDx2L3M7KXA9ZCxkKz1lW2ddLGMmJmc9PT1lLmxlbmd0aC0xJiYoZCs9ZVswXSksZysrO3ZhciBtPU1hdGguYWJzKHYtcCpzKSx5PU1hdGguYWJzKHYtZCpzKSx4PU1hdGgubWluKG0seSksYj1nJTI9PTEsXz12b2lkIDA7aWYocil7dmFyIHc9bj91L24qKGwrMSk6MDtpZihiKXt2YXIgaz1sLU1hdGguYWJzKHcpO189TWF0aC5zcXJ0KHgqeCtrKmspfWVsc2UgXz1sLU1hdGguc3FydCh4Kngrdyp3KX1lbHNlIF89KGI/MTotMSkqeDt0aGlzLmRhdGFbMys0KihoK3YpXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxfKzEyOCkpfXZhciBUPXt5Oih0aGlzLm5leHRSb3crbisuNSkvdGhpcy5oZWlnaHQsaGVpZ2h0OjIqbi90aGlzLmhlaWdodCx3aWR0aDphfTtyZXR1cm4gdGhpcy5uZXh0Um93Kz1pLHRoaXMuZGlydHk9ITAsVH0sVS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmdsO3RoaXMudGV4dHVyZT8oZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSxlLnRleFN1YkltYWdlMkQoZS5URVhUVVJFXzJELDAsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKSk6KHRoaXMudGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfUyxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9ULGUuUkVQRUFUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTElORUFSKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTElORUFSKSxlLnRleEltYWdlMkQoZS5URVhUVVJFXzJELDAsZS5SR0JBLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpfTt2YXIgcT1mdW5jdGlvbiBlKHIsbil7dGhpcy53b3JrZXJQb29sPXIsdGhpcy5hY3RvcnM9W10sdGhpcy5jdXJyZW50QWN0b3I9MCx0aGlzLmlkPXQudW5pcXVlSWQoKTtmb3IodmFyIGk9dGhpcy53b3JrZXJQb29sLmFjcXVpcmUodGhpcy5pZCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bmV3IGUuQWN0b3IobyxuLHRoaXMuaWQpO3MubmFtZT0iV29ya2VyICIrYSx0aGlzLmFjdG9ycy5wdXNoKHMpfX07ZnVuY3Rpb24gSChlLHIsbil7dmFyIGk9ZnVuY3Rpb24oZSxyKXtpZihlKXJldHVybiBuKGUpO2lmKHIpe3ZhciBpPXQucGljayhyLFsidGlsZXMiLCJtaW56b29tIiwibWF4em9vbSIsImF0dHJpYnV0aW9uIiwibWFwYm94X2xvZ28iLCJib3VuZHMiXSk7ci52ZWN0b3JfbGF5ZXJzJiYoaS52ZWN0b3JMYXllcnM9ci52ZWN0b3JfbGF5ZXJzLGkudmVjdG9yTGF5ZXJJZHM9aS52ZWN0b3JMYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLG4obnVsbCxpKX19O2UudXJsP3QuZ2V0SlNPTihyKGIoZS51cmwpLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSksaSk6YS5mcmFtZShmdW5jdGlvbigpe3JldHVybiBpKG51bGwsZSl9KX1xLnByb3RvdHlwZS5icm9hZGNhc3Q9ZnVuY3Rpb24oZSxyLG4pe249bnx8ZnVuY3Rpb24oKXt9LHQuYXN5bmNBbGwodGhpcy5hY3RvcnMsZnVuY3Rpb24odCxuKXt0LnNlbmQoZSxyLG4pfSxuKX0scS5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4oIm51bWJlciIhPXR5cGVvZiBufHxpc05hTihuKSkmJihuPXRoaXMuY3VycmVudEFjdG9yPSh0aGlzLmN1cnJlbnRBY3RvcisxKSV0aGlzLmFjdG9ycy5sZW5ndGgpLHRoaXMuYWN0b3JzW25dLnNlbmQodCxlLHIpLG59LHEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuYWN0b3JzLmZvckVhY2goZnVuY3Rpb24odCl7dC5yZW1vdmUoKX0pLHRoaXMuYWN0b3JzPVtdLHRoaXMud29ya2VyUG9vbC5yZWxlYXNlKHRoaXMuaWQpfSxxLkFjdG9yPXQuZGVmYXVsdCQ3O3ZhciBHPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgb2JqZWN0OiAoIit0KyIsICIrZSsiKSIpO2lmKHRoaXMubG5nPSt0LHRoaXMubGF0PStlLHRoaXMubGF0PjkwfHx0aGlzLmxhdDwtOTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExuZ0xhdCBsYXRpdHVkZSB2YWx1ZTogbXVzdCBiZSBiZXR3ZWVuIC05MCBhbmQgOTAiKX07Ry5wcm90b3R5cGUud3JhcD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0LndyYXAodGhpcy5sbmcsLTE4MCwxODApLHRoaXMubGF0KX0sRy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLmxuZyx0aGlzLmxhdF19LEcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxuZ0xhdCgiK3RoaXMubG5nKyIsICIrdGhpcy5sYXQrIikifSxHLnByb3RvdHlwZS50b0JvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT0zNjAqdC80MDA3NTAxNyxyPWUvTWF0aC5jb3MoTWF0aC5QSS8xODAqdGhpcy5sYXQpO3JldHVybiBuZXcgWShuZXcgRyh0aGlzLmxuZy1yLHRoaXMubGF0LWUpLG5ldyBHKHRoaXMubG5nK3IsdGhpcy5sYXQrZSkpfSxHLmNvbnZlcnQ9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEcpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT10Lmxlbmd0aHx8Mz09PXQubGVuZ3RoKSlyZXR1cm4gbmV3IEcoTnVtYmVyKHRbMF0pLE51bWJlcih0WzFdKSk7aWYoIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQpcmV0dXJuIG5ldyBHKE51bWJlcih0LmxuZyksTnVtYmVyKHQubGF0KSk7dGhyb3cgbmV3IEVycm9yKCJgTG5nTGF0TGlrZWAgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBMbmdMYXQgaW5zdGFuY2UsIGFuIG9iamVjdCB7bG5nOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIG9yIGFuIGFycmF5IG9mIFs8bG5nPiwgPGxhdD5dIil9O3ZhciBZPWZ1bmN0aW9uKHQsZSl7dCYmKGU/dGhpcy5zZXRTb3V0aFdlc3QodCkuc2V0Tm9ydGhFYXN0KGUpOjQ9PT10Lmxlbmd0aD90aGlzLnNldFNvdXRoV2VzdChbdFswXSx0WzFdXSkuc2V0Tm9ydGhFYXN0KFt0WzJdLHRbM11dKTp0aGlzLnNldFNvdXRoV2VzdCh0WzBdKS5zZXROb3J0aEVhc3QodFsxXSkpfTtZLnByb3RvdHlwZS5zZXROb3J0aEVhc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25lPXQgaW5zdGFuY2VvZiBHP25ldyBHKHQubG5nLHQubGF0KTpHLmNvbnZlcnQodCksdGhpc30sWS5wcm90b3R5cGUuc2V0U291dGhXZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdz10IGluc3RhbmNlb2YgRz9uZXcgRyh0LmxuZyx0LmxhdCk6Ry5jb252ZXJ0KHQpLHRoaXN9LFkucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy5fc3csaT10aGlzLl9uZTtpZih0IGluc3RhbmNlb2YgRyllPXQscj10O2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgWSkpcmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5ldmVyeShBcnJheS5pc0FycmF5KT90aGlzLmV4dGVuZChZLmNvbnZlcnQodCkpOnRoaXMuZXh0ZW5kKEcuY29udmVydCh0KSk6dGhpcztpZihlPXQuX3N3LHI9dC5fbmUsIWV8fCFyKXJldHVybiB0aGlzfXJldHVybiBufHxpPyhuLmxuZz1NYXRoLm1pbihlLmxuZyxuLmxuZyksbi5sYXQ9TWF0aC5taW4oZS5sYXQsbi5sYXQpLGkubG5nPU1hdGgubWF4KHIubG5nLGkubG5nKSxpLmxhdD1NYXRoLm1heChyLmxhdCxpLmxhdCkpOih0aGlzLl9zdz1uZXcgRyhlLmxuZyxlLmxhdCksdGhpcy5fbmU9bmV3IEcoci5sbmcsci5sYXQpKSx0aGlzfSxZLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcoKHRoaXMuX3N3LmxuZyt0aGlzLl9uZS5sbmcpLzIsKHRoaXMuX3N3LmxhdCt0aGlzLl9uZS5sYXQpLzIpfSxZLnByb3RvdHlwZS5nZXRTb3V0aFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3d9LFkucHJvdG90eXBlLmdldE5vcnRoRWFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZX0sWS5wcm90b3R5cGUuZ2V0Tm9ydGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBHKHRoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0Tm9ydGgoKSl9LFkucHJvdG90eXBlLmdldFNvdXRoRWFzdD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmdldEVhc3QoKSx0aGlzLmdldFNvdXRoKCkpfSxZLnByb3RvdHlwZS5nZXRXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxuZ30sWS5wcm90b3R5cGUuZ2V0U291dGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3cubGF0fSxZLnByb3RvdHlwZS5nZXRFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxuZ30sWS5wcm90b3R5cGUuZ2V0Tm9ydGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubGF0fSxZLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuX3N3LnRvQXJyYXkoKSx0aGlzLl9uZS50b0FycmF5KCldfSxZLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJMbmdMYXRCb3VuZHMoIit0aGlzLl9zdy50b1N0cmluZygpKyIsICIrdGhpcy5fbmUudG9TdHJpbmcoKSsiKSJ9LFkucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuX3N3JiZ0aGlzLl9uZSl9LFkuY29udmVydD1mdW5jdGlvbih0KXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIFk/dDpuZXcgWSh0KX07dmFyIFc9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYm91bmRzPVkuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKHQpKSx0aGlzLm1pbnpvb209ZXx8MCx0aGlzLm1heHpvb209cnx8MjR9O1cucHJvdG90eXBlLnZhbGlkYXRlQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiY0PT09dC5sZW5ndGg/W01hdGgubWF4KC0xODAsdFswXSksTWF0aC5tYXgoLTkwLHRbMV0pLE1hdGgubWluKDE4MCx0WzJdKSxNYXRoLm1pbig5MCx0WzNdKV06Wy0xODAsLTkwLDE4MCw5MF19LFcucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodGhpcy5sbmdYKHRoaXMuYm91bmRzLmdldFdlc3QoKSx0LnopKSxyPU1hdGguZmxvb3IodGhpcy5sYXRZKHRoaXMuYm91bmRzLmdldE5vcnRoKCksdC56KSksbj1NYXRoLmNlaWwodGhpcy5sbmdYKHRoaXMuYm91bmRzLmdldEVhc3QoKSx0LnopKSxpPU1hdGguY2VpbCh0aGlzLmxhdFkodGhpcy5ib3VuZHMuZ2V0U291dGgoKSx0LnopKTtyZXR1cm4gdC54Pj1lJiZ0Lng8biYmdC55Pj1yJiZ0Lnk8aX0sVy5wcm90b3R5cGUubG5nWD1mdW5jdGlvbih0LGUpe3JldHVybih0KzE4MCkqKE1hdGgucG93KDIsZSkvMzYwKX0sVy5wcm90b3R5cGUubGF0WT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuY2xhbXAoTWF0aC5zaW4oTWF0aC5QSS8xODAqZSksLS45OTk5LC45OTk5KSxpPU1hdGgucG93KDIscikvKDIqTWF0aC5QSSk7cmV0dXJuIE1hdGgucG93KDIsci0xKSsuNSpNYXRoLmxvZygoMStuKS8oMS1uKSkqLWl9O3ZhciBYPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7aWYoZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnR5cGU9InZlY3RvciIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMuc2NoZW1lPSJ4eXoiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHQuZXh0ZW5kKHRoaXMsdC5waWNrKG4sWyJ1cmwiLCJzY2hlbWUiLCJ0aWxlU2l6ZSJdKSksdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7dHlwZToidmVjdG9yIn0sbiksdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPW4uY29sbGVjdFJlc291cmNlVGltaW5nLDUxMiE9PXRoaXMudGlsZVNpemUpdGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3IgdGlsZSBzb3VyY2VzIG11c3QgaGF2ZSBhIHRpbGVTaXplIG9mIDUxMiIpO3RoaXMuc2V0RXZlbnRlZFBhcmVudChhKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLEgodGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBXKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KX0sci5wcm90b3R5cGUuaGFzVGlsZT1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy50aWxlQm91bmRzfHx0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModC5jYW5vbmljYWwpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsKSxpPXtyZXF1ZXN0OnRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksdWlkOmUudWlkLHRpbGVJRDplLnRpbGVJRCx6b29tOmUudGlsZUlELm92ZXJzY2FsZWRaLHRpbGVTaXplOnRoaXMudGlsZVNpemUqZS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzphLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlc307ZnVuY3Rpb24gbyh0LG4pe3JldHVybiBlLmFib3J0ZWQ/cihudWxsKTp0P3IodCk6KG4mJm4ucmVzb3VyY2VUaW1pbmcmJihlLnJlc291cmNlVGltaW5nPW4ucmVzb3VyY2VUaW1pbmcpLHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEobiksZS5sb2FkVmVjdG9yRGF0YShuLHRoaXMubWFwLnBhaW50ZXIpLHIobnVsbCksdm9pZChlLnJlbG9hZENhbGxiYWNrJiYodGhpcy5sb2FkVGlsZShlLGUucmVsb2FkQ2FsbGJhY2spLGUucmVsb2FkQ2FsbGJhY2s9bnVsbCkpKX1pLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nPXRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyx2b2lkIDA9PT1lLndvcmtlcklEfHwiZXhwaXJlZCI9PT1lLnN0YXRlP2Uud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQoImxvYWRUaWxlIixpLG8uYmluZCh0aGlzKSk6ImxvYWRpbmciPT09ZS5zdGF0ZT9lLnJlbG9hZENhbGxiYWNrPXI6dGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbG9hZFRpbGUiLGksby5iaW5kKHRoaXMpLGUud29ya2VySUQpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dGhpcy5kaXNwYXRjaGVyLnNlbmQoImFib3J0VGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sdm9pZCAwLHQud29ya2VySUQpfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSgpLHRoaXMuZGlzcGF0Y2hlci5zZW5kKCJyZW1vdmVUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDAsdC53b3JrZXJJRCl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxaPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy50eXBlPSJyYXN0ZXIiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnJvdW5kWm9vbT0hMCx0aGlzLnNjaGVtZT0ieHl6Iix0aGlzLnRpbGVTaXplPTUxMix0aGlzLl9sb2FkZWQ9ITEsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksSCh0aGlzLl9vcHRpb25zLHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0LGZ1bmN0aW9uKHIsbil7cj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKHQuZXh0ZW5kKGUsbiksbi5ib3VuZHMmJihlLnRpbGVCb3VuZHM9bmV3IFcobi5ib3VuZHMsZS5taW56b29tLGUubWF4em9vbSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSJ9KSksZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6ImNvbnRlbnQifSkpKX0pfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO2UucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KGksdC5SZXNvdXJjZVR5cGUuVGlsZSksZnVuY3Rpb24odCxpKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPSJ1bmxvYWRlZCIscihudWxsKTtlbHNlIGlmKHQpZS5zdGF0ZT0iZXJyb3JlZCIscih0KTtlbHNlIGlmKGkpe24ubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEoaSksZGVsZXRlIGkuY2FjaGVDb250cm9sLGRlbGV0ZSBpLmV4cGlyZXM7dmFyIGE9bi5tYXAucGFpbnRlci5jb250ZXh0LG89YS5nbDtlLnRleHR1cmU9bi5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShpLndpZHRoKSxlLnRleHR1cmU/ZS50ZXh0dXJlLnVwZGF0ZShpLHt1c2VNaXBtYXA6ITB9KTooZS50ZXh0dXJlPW5ldyB6KGEsaSxvLlJHQkEse3VzZU1pcG1hcDohMH0pLGUudGV4dHVyZS5iaW5kKG8uTElORUFSLG8uQ0xBTVBfVE9fRURHRSxvLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJm8udGV4UGFyYW1ldGVyZihvLlRFWFRVUkVfMkQsYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpKSxlLnN0YXRlPSJsb2FkZWQiLHIobnVsbCl9fSl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5hYm9ydCgpLGRlbGV0ZSB0LnJlcXVlc3QpLGUoKX0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3QudGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodC50ZXh0dXJlKSxlKCl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSwkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMscixuLGksYSksdGhpcy50eXBlPSJyYXN0ZXItZGVtIix0aGlzLm1heHpvb209MjIsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0aGlzLmVuY29kaW5nPW4uZW5jb2Rpbmd8fCJtYXBib3gifXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToicmFzdGVyLWRlbSIsdXJsOnRoaXMudXJsLHRpbGVTaXplOnRoaXMudGlsZVNpemUsdGlsZXM6dGhpcy50aWxlcyxib3VuZHM6dGhpcy5ib3VuZHMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ319LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO2UucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksZnVuY3Rpb24odCxuKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPSJ1bmxvYWRlZCIscihudWxsKTtlbHNlIGlmKHQpZS5zdGF0ZT0iZXJyb3JlZCIscih0KTtlbHNlIGlmKG4pe3RoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEobiksZGVsZXRlIG4uY2FjaGVDb250cm9sLGRlbGV0ZSBuLmV4cGlyZXM7dmFyIGk9YS5nZXRJbWFnZURhdGEobiksbz17dWlkOmUudWlkLGNvb3JkOmUudGlsZUlELHNvdXJjZTp0aGlzLmlkLHJhd0ltYWdlRGF0YTppLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9O2Uud29ya2VySUQmJiJleHBpcmVkIiE9PWUuc3RhdGV8fChlLndvcmtlcklEPXRoaXMuZGlzcGF0Y2hlci5zZW5kKCJsb2FkREVNVGlsZSIsbyxmdW5jdGlvbih0LG4pe3QmJihlLnN0YXRlPSJlcnJvcmVkIixyKHQpKSxuJiYoZS5kZW09bixlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMCxlLnN0YXRlPSJsb2FkZWQiLHIobnVsbCkpfS5iaW5kKHRoaXMpKSl9fS5iaW5kKHRoaXMpKSxlLm5laWdoYm9yaW5nVGlsZXM9dGhpcy5fZ2V0TmVpZ2hib3JpbmdUaWxlcyhlLnRpbGVJRCl9LHIucHJvdG90eXBlLl9nZXROZWlnaGJvcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPWUuY2Fub25pY2FsLG49TWF0aC5wb3coMixyLnopLGk9KHIueC0xK24pJW4sYT0wPT09ci54P2Uud3JhcC0xOmUud3JhcCxvPShyLngrMStuKSVuLHM9ci54KzE9PT1uP2Uud3JhcCsxOmUud3JhcCxsPXt9O3JldHVybiBsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnkpLmtleV09e2JhY2tmaWxsZWQ6ITF9LHIueT4wJiYobFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosZS53cmFwLHIueixyLngsci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9KSxyLnkrMTxuJiYobFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosZS53cmFwLHIueixyLngsci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9KSxsfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QuZGVtVGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodC5kZW1UZXh0dXJlKSx0LmZibyYmKHQuZmJvLmRlc3Ryb3koKSxkZWxldGUgdC5mYm8pLHQuZGVtJiZkZWxldGUgdC5kZW0sZGVsZXRlIHQubmVpZ2hib3JpbmdUaWxlcyx0LnN0YXRlPSJ1bmxvYWRlZCIsdGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbW92ZURFTVRpbGUiLHt1aWQ6dC51aWQsc291cmNlOnRoaXMuaWR9LHZvaWQgMCx0LndvcmtlcklEKX0scn0oWiksSj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy50eXBlPSJnZW9qc29uIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MTgsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5fcmVtb3ZlZD0hMSx0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy5fZGF0YT1uLmRhdGEsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9bi5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5fcmVzb3VyY2VUaW1pbmc9W10sdm9pZCAwIT09bi5tYXh6b29tJiYodGhpcy5tYXh6b29tPW4ubWF4em9vbSksbi50eXBlJiYodGhpcy50eXBlPW4udHlwZSk7dmFyIG89dC5kZWZhdWx0JDgvdGhpcy50aWxlU2l6ZTt0aGlzLndvcmtlck9wdGlvbnM9dC5leHRlbmQoe3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXI6bi5jbHVzdGVyfHwhMSxnZW9qc29uVnRPcHRpb25zOntidWZmZXI6KHZvaWQgMCE9PW4uYnVmZmVyP24uYnVmZmVyOjEyOCkqbyx0b2xlcmFuY2U6KHZvaWQgMCE9PW4udG9sZXJhbmNlP24udG9sZXJhbmNlOi4zNzUpKm8sZXh0ZW50OnQuZGVmYXVsdCQ4LG1heFpvb206dGhpcy5tYXh6b29tLGxpbmVNZXRyaWNzOm4ubGluZU1ldHJpY3N8fCExfSxzdXBlcmNsdXN0ZXJPcHRpb25zOnttYXhab29tOnZvaWQgMCE9PW4uY2x1c3Rlck1heFpvb20/TWF0aC5taW4obi5jbHVzdGVyTWF4Wm9vbSx0aGlzLm1heHpvb20tMSk6dGhpcy5tYXh6b29tLTEsZXh0ZW50OnQuZGVmYXVsdCQ4LHJhZGl1czoobi5jbHVzdGVyUmFkaXVzfHw1MCkqbyxsb2c6ITF9fSxuLndvcmtlck9wdGlvbnMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdXBkYXRlV29ya2VyRGF0YShmdW5jdGlvbihyKXtpZihyKWUuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTtlbHNle3ZhciBuPXtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifTtlLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJmUuX3Jlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZy5sZW5ndGg+MCYmKG4ucmVzb3VyY2VUaW1pbmc9ZS5fcmVzb3VyY2VUaW1pbmcsZS5fcmVzb3VyY2VUaW1pbmc9W10pLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIsbikpfX0pfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7cmV0dXJuIHRoaXMuX2RhdGE9ZSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdXBkYXRlV29ya2VyRGF0YShmdW5jdGlvbihlKXtpZihlKXJldHVybiByLmZpcmUobmV3IHQuRXJyb3JFdmVudChlKSk7dmFyIG49e2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In07ci5fY29sbGVjdFJlc291cmNlVGltaW5nJiZyLl9yZXNvdXJjZVRpbWluZyYmci5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPXIuX3Jlc291cmNlVGltaW5nLHIuX3Jlc291cmNlVGltaW5nPVtdKSxyLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLG4pKX0pLHRoaXN9LHIucHJvdG90eXBlLl91cGRhdGVXb3JrZXJEYXRhPWZ1bmN0aW9uKGUpe3ZhciByLG4saT10aGlzLGE9dC5leHRlbmQoe30sdGhpcy53b3JrZXJPcHRpb25zKSxvPXRoaXMuX2RhdGE7InN0cmluZyI9PXR5cGVvZiBvPyhhLnJlcXVlc3Q9dGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QoKHI9bywobj10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKS5ocmVmPXIsbi5ocmVmKSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLGEucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9dGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nKTphLmRhdGE9SlNPTi5zdHJpbmdpZnkobyksdGhpcy53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZCh0aGlzLnR5cGUrIi4iK2Euc291cmNlKyIubG9hZERhdGEiLGEsZnVuY3Rpb24odCxyKXtpLl9yZW1vdmVkfHxyJiZyLmFiYW5kb25lZHx8KGkuX2xvYWRlZD0hMCxyJiZyLnJlc291cmNlVGltaW5nJiZyLnJlc291cmNlVGltaW5nW2kuaWRdJiYoaS5fcmVzb3VyY2VUaW1pbmc9ci5yZXNvdXJjZVRpbWluZ1tpLmlkXS5zbGljZSgwKSksaS5kaXNwYXRjaGVyLnNlbmQoaS50eXBlKyIuIithLnNvdXJjZSsiLmNvYWxlc2NlIixudWxsLG51bGwsaS53b3JrZXJJRCksZSh0KSl9LHRoaXMud29ya2VySUQpfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj12b2lkIDA9PT10LndvcmtlcklEPyJsb2FkVGlsZSI6InJlbG9hZFRpbGUiLGk9e3R5cGU6dGhpcy50eXBlLHVpZDp0LnVpZCx0aWxlSUQ6dC50aWxlSUQsem9vbTp0LnRpbGVJRC5vdmVyc2NhbGVkWixtYXhab29tOnRoaXMubWF4em9vbSx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86YS5kZXZpY2VQaXhlbFJhdGlvLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXN9O3Qud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQobixpLGZ1bmN0aW9uKGksYSl7cmV0dXJuIHQudW5sb2FkVmVjdG9yRGF0YSgpLHQuYWJvcnRlZD9lKG51bGwpOmk/ZShpKToodC5sb2FkVmVjdG9yRGF0YShhLHIubWFwLnBhaW50ZXIsInJlbG9hZFRpbGUiPT09biksZShudWxsKSl9LHRoaXMud29ya2VySUQpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dC5hYm9ydGVkPSEwfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSgpLHRoaXMuZGlzcGF0Y2hlci5zZW5kKCJyZW1vdmVUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSxudWxsLHQud29ya2VySUQpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3JlbW92ZWQ9ITAsdGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbW92ZVNvdXJjZSIse3R5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSxudWxsLHRoaXMud29ya2VySUQpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyx7dHlwZTp0aGlzLnR5cGUsZGF0YTp0aGlzLl9kYXRhfSl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxLPXQuY3JlYXRlTGF5b3V0KFt7bmFtZToiYV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9LHtuYW1lOiJhX3RleHR1cmVfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfV0pLFE9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kUHJvZ3JhbT1udWxsLHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXI9bnVsbCx0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzPVtdLHRoaXMuYm91bmRJbmRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQ9bnVsbCx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcj1udWxsLHRoaXMudmFvPW51bGx9O1EucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLmNvbnRleHQ9dDtmb3IodmFyIGw9dGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycy5sZW5ndGghPT1uLmxlbmd0aCxjPTA7IWwmJmM8bi5sZW5ndGg7YysrKXRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnNbY10hPT1uW2NdJiYobD0hMCk7dmFyIHU9IXRoaXMudmFvfHx0aGlzLmJvdW5kUHJvZ3JhbSE9PWV8fHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIhPT1yfHxsfHx0aGlzLmJvdW5kSW5kZXhCdWZmZXIhPT1pfHx0aGlzLmJvdW5kVmVydGV4T2Zmc2V0IT09YXx8dGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIhPT1vfHx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjIhPT1zOyF0LmV4dFZlcnRleEFycmF5T2JqZWN0fHx1P3RoaXMuZnJlc2hCaW5kKGUscixuLGksYSxvLHMpOih0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pLG8mJm8uYmluZCgpLGkmJmkuZHluYW1pY0RyYXcmJmkuYmluZCgpLHMmJnMuYmluZCgpKX0sUS5wcm90b3R5cGUuZnJlc2hCaW5kPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9dC5udW1BdHRyaWJ1dGVzLGM9dGhpcy5jb250ZXh0LHU9Yy5nbDtpZihjLmV4dFZlcnRleEFycmF5T2JqZWN0KXRoaXMudmFvJiZ0aGlzLmRlc3Ryb3koKSx0aGlzLnZhbz1jLmV4dFZlcnRleEFycmF5T2JqZWN0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCksYy5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KHRoaXMudmFvKSxzPTAsdGhpcy5ib3VuZFByb2dyYW09dCx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyPWUsdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycz1yLHRoaXMuYm91bmRJbmRleEJ1ZmZlcj1uLHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQ9aSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcj1hLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMj1vO2Vsc2V7cz1jLmN1cnJlbnROdW1BdHRyaWJ1dGVzfHwwO2Zvcih2YXIgZj1sO2Y8cztmKyspdS5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZil9ZS5lbmFibGVBdHRyaWJ1dGVzKHUsdCk7Zm9yKHZhciBoPTAscD1yO2g8cC5sZW5ndGg7aCs9MSlwW2hdLmVuYWJsZUF0dHJpYnV0ZXModSx0KTthJiZhLmVuYWJsZUF0dHJpYnV0ZXModSx0KSxvJiZvLmVuYWJsZUF0dHJpYnV0ZXModSx0KSxlLmJpbmQoKSxlLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKTtmb3IodmFyIGQ9MCxnPXI7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdO3YuYmluZCgpLHYuc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpfWEmJihhLmJpbmQoKSxhLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKSksbiYmbi5iaW5kKCksbyYmKG8uYmluZCgpLG8uc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpKSxjLmN1cnJlbnROdW1BdHRyaWJ1dGVzPWx9LFEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnZhbyYmKHRoaXMuY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyksdGhpcy52YW89bnVsbCl9O3ZhciB0dD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPW4sdGhpcy5jb29yZGluYXRlcz1yLmNvb3JkaW5hdGVzLHRoaXMudHlwZT0iaW1hZ2UiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnRpbGVzPXt9LHRoaXMuc2V0RXZlbnRlZFBhcmVudChpKSx0aGlzLm9wdGlvbnM9cn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMudXJsPXRoaXMub3B0aW9ucy51cmwsdC5nZXRJbWFnZSh0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCh0aGlzLnVybCx0LlJlc291cmNlVHlwZS5JbWFnZSksZnVuY3Rpb24ocixuKXtyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYoZS5pbWFnZT1hLmdldEltYWdlRGF0YShuKSxlLl9maW5pc2hMb2FkaW5nKCkpfSl9LHIucHJvdG90eXBlLl9maW5pc2hMb2FkaW5nPWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSJ9KSkpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXRDb29yZGluYXRlcz1mdW5jdGlvbihlKXt0aGlzLmNvb3JkaW5hdGVzPWU7dmFyIHI9dGhpcy5tYXAsbj1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gci50cmFuc2Zvcm0ubG9jYXRpb25Db29yZGluYXRlKEcuY29udmVydCh0KSkuem9vbVRvKDApfSksaT10aGlzLmNlbnRlckNvb3JkPXQuZ2V0Q29vcmRpbmF0ZXNDZW50ZXIobik7aS5jb2x1bW49TWF0aC5mbG9vcihpLmNvbHVtbiksaS5yb3c9TWF0aC5mbG9vcihpLnJvdyksdGhpcy50aWxlSUQ9bmV3IHQuQ2Fub25pY2FsVGlsZUlEKGkuem9vbSxpLmNvbHVtbixpLnJvdyksdGhpcy5taW56b29tPXRoaXMubWF4em9vbT1pLnpvb207dmFyIGE9bi5tYXAoZnVuY3Rpb24oZSl7dmFyIHI9ZS56b29tVG8oaS56b29tKTtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKE1hdGgucm91bmQoKHIuY29sdW1uLWkuY29sdW1uKSp0LmRlZmF1bHQkOCksTWF0aC5yb3VuZCgoci5yb3ctaS5yb3cpKnQuZGVmYXVsdCQ4KSl9KTtyZXR1cm4gdGhpcy5fYm91bmRzQXJyYXk9bmV3IHQuUmFzdGVyQm91bmRzQXJyYXksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYVswXS54LGFbMF0ueSwwLDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbMV0ueCxhWzFdLnksdC5kZWZhdWx0JDgsMCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYVszXS54LGFbM10ueSwwLHQuZGVmYXVsdCQ4KSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhhWzJdLngsYVsyXS55LHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4KSx0aGlzLmJvdW5kc0J1ZmZlciYmKHRoaXMuYm91bmRzQnVmZmVyLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ib3VuZHNCdWZmZXIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSx0aGlzfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7aWYoMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCYmdGhpcy5pbWFnZSl7dmFyIHQ9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LGU9dC5nbDtmb3IodmFyIHIgaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxLLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1ZBT3x8KHRoaXMuYm91bmRzVkFPPW5ldyBRKSx0aGlzLnRleHR1cmV8fCh0aGlzLnRleHR1cmU9bmV3IHoodCx0aGlzLmltYWdlLGUuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoZS5MSU5FQVIsZS5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIG49dGhpcy50aWxlc1tyXTsibG9hZGVkIiE9PW4uc3RhdGUmJihuLnN0YXRlPSJsb2FkZWQiLG4udGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy50aWxlSUQmJnRoaXMudGlsZUlELmVxdWFscyh0LnRpbGVJRC5jYW5vbmljYWwpPyh0aGlzLnRpbGVzW1N0cmluZyh0LnRpbGVJRC53cmFwKV09dCx0LmJ1Y2tldHM9e30sZShudWxsKSk6KHQuc3RhdGU9ImVycm9yZWQiLGUobnVsbCkpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiaW1hZ2UiLHVybDp0aGlzLm9wdGlvbnMudXJsLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksZXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyx0LHIsbixpKSx0aGlzLnJvdW5kWm9vbT0hMCx0aGlzLnR5cGU9InZpZGVvIix0aGlzLm9wdGlvbnM9cn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj10aGlzLm9wdGlvbnM7dGhpcy51cmxzPVtdO2Zvcih2YXIgbj0wLGk9ci51cmxzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtlLnVybHMucHVzaChlLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChhLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSkudXJsKX10LmdldFZpZGVvKHRoaXMudXJscyxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJihlLnZpZGVvPW4sZS52aWRlby5sb29wPSEwLGUudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigicGxheWluZyIsZnVuY3Rpb24oKXtlLm1hcC5fcmVyZW5kZXIoKX0pLGUubWFwJiZlLnZpZGVvLnBsYXkoKSxlLl9maW5pc2hMb2FkaW5nKCkpfSl9LHIucHJvdG90eXBlLmdldFZpZGVvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW99LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwfHwodGhpcy5tYXA9dCx0aGlzLmxvYWQoKSx0aGlzLnZpZGVvJiYodGhpcy52aWRlby5wbGF5KCksdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKSkpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7aWYoISgwPT09T2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RofHx0aGlzLnZpZGVvLnJlYWR5U3RhdGU8Mikpe3ZhciB0PXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxlPXQuZ2w7Zm9yKHZhciByIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksSy5tZW1iZXJzKSksdGhpcy5ib3VuZHNWQU98fCh0aGlzLmJvdW5kc1ZBTz1uZXcgUSksdGhpcy50ZXh0dXJlP3RoaXMudmlkZW8ucGF1c2VkfHwodGhpcy50ZXh0dXJlLmJpbmQoZS5MSU5FQVIsZS5DTEFNUF9UT19FREdFKSxlLnRleFN1YkltYWdlMkQoZS5URVhUVVJFXzJELDAsMCwwLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy52aWRlbykpOih0aGlzLnRleHR1cmU9bmV3IHoodCx0aGlzLnZpZGVvLGUuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoZS5MSU5FQVIsZS5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIG49dGhpcy50aWxlc1tyXTsibG9hZGVkIiE9PW4uc3RhdGUmJihuLnN0YXRlPSJsb2FkZWQiLG4udGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJ2aWRlbyIsdXJsczp0aGlzLnVybHMsY29vcmRpbmF0ZXM6dGhpcy5jb29yZGluYXRlc319LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlbyYmIXRoaXMudmlkZW8ucGF1c2VkfSxyfSh0dCkscnQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyxyLG4saSxhKSxuLmNvb3JkaW5hdGVzP0FycmF5LmlzQXJyYXkobi5jb29yZGluYXRlcykmJjQ9PT1uLmNvb3JkaW5hdGVzLmxlbmd0aCYmIW4uY29vcmRpbmF0ZXMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4hQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fSl9KXx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KCJzb3VyY2VzLiIrcixudWxsLCciY29vcmRpbmF0ZXMiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgNCBsb25naXR1ZGUvbGF0aXR1ZGUgYXJyYXkgcGFpcnMnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOSgic291cmNlcy4iK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiY29vcmRpbmF0ZXMiJykpKSxuLmFuaW1hdGUmJiJib29sZWFuIiE9dHlwZW9mIG4uYW5pbWF0ZSYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KCJzb3VyY2VzLiIrcixudWxsLCdvcHRpb25hbCAiYW5pbWF0ZSIgcHJvcGVydHkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnKSkpLG4uY2FudmFzPyJzdHJpbmciPT10eXBlb2Ygbi5jYW52YXN8fG4uY2FudmFzIGluc3RhbmNlb2YgdC5kZWZhdWx0LkhUTUxDYW52YXNFbGVtZW50fHx0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5kZWZhdWx0JDkoInNvdXJjZXMuIityLG51bGwsJyJjYW52YXMiIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhlIGNhbnZhcyBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmVhZCwgb3IgYW4gSFRNTENhbnZhc0VsZW1lbnQgaW5zdGFuY2UnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOSgic291cmNlcy4iK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiY2FudmFzIicpKSksdGhpcy5vcHRpb25zPW4sdGhpcy5hbmltYXRlPXZvaWQgMD09PW4uYW5pbWF0ZXx8bi5hbmltYXRlfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dGhpcy5jYW52YXN8fCh0aGlzLmNhbnZhcz10aGlzLm9wdGlvbnMuY2FudmFzIGluc3RhbmNlb2YgdC5kZWZhdWx0LkhUTUxDYW52YXNFbGVtZW50P3RoaXMub3B0aW9ucy5jYW52YXM6dC5kZWZhdWx0LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5jYW52YXMpKSx0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiQ2FudmFzIGRpbWVuc2lvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLiIpKSk6KHRoaXMucGxheT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmc9ITAsdGhpcy5tYXAuX3JlcmVuZGVyKCl9LHRoaXMucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5aW5nPSExfSx0aGlzLl9maW5pc2hMb2FkaW5nKCkpfSxyLnByb3RvdHlwZS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW52YXN9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy5jYW52YXMmJnRoaXMuYW5pbWF0ZSYmdGhpcy5wbGF5KCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7dmFyIHQ9ITE7aWYodGhpcy5jYW52YXMud2lkdGghPT10aGlzLndpZHRoJiYodGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCx0PSEwKSx0aGlzLmNhbnZhcy5oZWlnaHQhPT10aGlzLmhlaWdodCYmKHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0PSEwKSwhdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSYmMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCl7dmFyIGU9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LHI9ZS5nbDtmb3IodmFyIG4gaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxLLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1ZBT3x8KHRoaXMuYm91bmRzVkFPPW5ldyBRKSx0aGlzLnRleHR1cmU/dD90aGlzLnRleHR1cmUudXBkYXRlKHRoaXMuY2FudmFzKTp0aGlzLl9wbGF5aW5nJiYodGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSxyLnRleFN1YkltYWdlMkQoci5URVhUVVJFXzJELDAsMCwwLHIuUkdCQSxyLlVOU0lHTkVEX0JZVEUsdGhpcy5jYW52YXMpKToodGhpcy50ZXh0dXJlPW5ldyB6KGUsdGhpcy5jYW52YXMsci5SR0JBKSx0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpKSx0aGlzLnRpbGVzKXt2YXIgaT10aGlzLnRpbGVzW25dOyJsb2FkZWQiIT09aS5zdGF0ZSYmKGkuc3RhdGU9ImxvYWRlZCIsaS50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImNhbnZhcyIsY29vcmRpbmF0ZXM6dGhpcy5jb29yZGluYXRlc319LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGxheWluZ30sci5wcm90b3R5cGUuX2hhc0ludmFsaWREaW1lbnNpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1bdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0XTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYoaXNOYU4ocil8fHI8PTApcmV0dXJuITB9cmV0dXJuITF9LHJ9KHR0KSxudD17dmVjdG9yOlgscmFzdGVyOlosInJhc3Rlci1kZW0iOiQsZ2VvanNvbjpKLHZpZGVvOmV0LGltYWdlOnR0LGNhbnZhczpydH0saXQ9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bmV3IG50W3IudHlwZV0oZSxyLG4saSk7aWYoYS5pZCE9PWUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBTb3VyY2UgaWQgdG8gYmUgIitlKyIgaW5zdGVhZCBvZiAiK2EuaWQpO3JldHVybiB0LmJpbmRBbGwoWyJsb2FkIiwiYWJvcnQiLCJ1bmxvYWQiLCJzZXJpYWxpemUiLCJwcmVwYXJlIl0sYSksYX07ZnVuY3Rpb24gYXQodCxlLHIsbixpKXt2YXIgYT1pLm1heFBpdGNoU2NhbGVGYWN0b3IoKSxvPXQudGlsZXNJbihyLGEpO28uc29ydChvdCk7Zm9yKHZhciBzPVtdLGw9MCxjPW87bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO3MucHVzaCh7d3JhcHBlZFRpbGVJRDp1LnRpbGVJRC53cmFwcGVkKCkua2V5LHF1ZXJ5UmVzdWx0czp1LnRpbGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUsdS5xdWVyeUdlb21ldHJ5LHUuc2NhbGUsbixpLGEsdC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHUudGlsZUlELnRvVW53cmFwcGVkKCkpKX0pfXJldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj17fSxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEucXVlcnlSZXN1bHRzLHM9YS53cmFwcGVkVGlsZUlELGw9cltzXT1yW3NdfHx7fTtmb3IodmFyIGMgaW4gbylmb3IodmFyIHU9b1tjXSxmPWxbY109bFtjXXx8e30saD1lW2NdPWVbY118fFtdLHA9MCxkPXU7cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdO2ZbZy5mZWF0dXJlSW5kZXhdfHwoZltnLmZlYXR1cmVJbmRleF09ITAsaC5wdXNoKGcuZmVhdHVyZSkpfX1yZXR1cm4gZX0ocyl9ZnVuY3Rpb24gb3QodCxlKXt2YXIgcj10LnRpbGVJRCxuPWUudGlsZUlEO3JldHVybiByLm92ZXJzY2FsZWRaLW4ub3ZlcnNjYWxlZFp8fHIuY2Fub25pY2FsLnktbi5jYW5vbmljYWwueXx8ci53cmFwLW4ud3JhcHx8ci5jYW5vbmljYWwueC1uLmNhbm9uaWNhbC54fXZhciBzdD1mdW5jdGlvbihlLHIpe3RoaXMudGlsZUlEPWUsdGhpcy51aWQ9dC51bmlxdWVJZCgpLHRoaXMudXNlcz0wLHRoaXMudGlsZVNpemU9cix0aGlzLmJ1Y2tldHM9e30sdGhpcy5leHBpcmF0aW9uVGltZT1udWxsLHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTAsdGhpcy5zdGF0ZT0ibG9hZGluZyJ9O3N0LnByb3RvdHlwZS5yZWdpc3RlckZhZGVEdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10K3RoaXMudGltZUFkZGVkO2U8YS5ub3coKXx8dGhpcy5mYWRlRW5kVGltZSYmZTx0aGlzLmZhZGVFbmRUaW1lfHwodGhpcy5mYWRlRW5kVGltZT1lKX0sc3QucHJvdG90eXBlLndhc1JlcXVlc3RlZD1mdW5jdGlvbigpe3JldHVybiJlcnJvcmVkIj09PXRoaXMuc3RhdGV8fCJsb2FkZWQiPT09dGhpcy5zdGF0ZXx8InJlbG9hZGluZyI9PT10aGlzLnN0YXRlfSxzdC5wcm90b3R5cGUubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24oZSxyLG4pe2lmKHRoaXMuaGFzRGF0YSgpJiZ0aGlzLnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLnN0YXRlPSJsb2FkZWQiLGUpe2lmKGUuZmVhdHVyZUluZGV4JiYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXg9ZS5mZWF0dXJlSW5kZXgsZS5yYXdUaWxlRGF0YT8odGhpcy5sYXRlc3RSYXdUaWxlRGF0YT1lLnJhd1RpbGVEYXRhLHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhPWUucmF3VGlsZURhdGEpOnRoaXMubGF0ZXN0UmF3VGlsZURhdGEmJih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT10aGlzLmxhdGVzdFJhd1RpbGVEYXRhKSksdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1lLmNvbGxpc2lvbkJveEFycmF5LHRoaXMuYnVja2V0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O2lmKCFlKXJldHVybiByO2Zvcih2YXIgbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLmxheWVySWRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5nZXRMYXllcih0KX0pLmZpbHRlcihCb29sZWFuKTtpZigwIT09by5sZW5ndGgpe2EubGF5ZXJzPW87Zm9yKHZhciBzPTAsbD1vO3M8bC5sZW5ndGg7cys9MSlyW2xbc10uaWRdPWF9fXJldHVybiByfShlLmJ1Y2tldHMsci5zdHlsZSksbilmb3IodmFyIGkgaW4gdGhpcy5idWNrZXRzKXt2YXIgYT10aGlzLmJ1Y2tldHNbaV07YSBpbnN0YW5jZW9mIHQuZGVmYXVsdCQxNCYmKGEuanVzdFJlbG9hZGVkPSEwKX1mb3IodmFyIG8gaW4gdGhpcy5xdWVyeVBhZGRpbmc9MCx0aGlzLmJ1Y2tldHMpe3ZhciBzPXRoaXMuYnVja2V0c1tvXTt0aGlzLnF1ZXJ5UGFkZGluZz1NYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZyxyLnN0eWxlLmdldExheWVyKHMubGF5ZXJJZHNbMF0pLnF1ZXJ5UmFkaXVzKHMpKX1lLmljb25BdGxhc0ltYWdlJiYodGhpcy5pY29uQXRsYXNJbWFnZT1lLmljb25BdGxhc0ltYWdlKSxlLmdseXBoQXRsYXNJbWFnZSYmKHRoaXMuZ2x5cGhBdGxhc0ltYWdlPWUuZ2x5cGhBdGxhc0ltYWdlKX1lbHNlIHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IHQuQ29sbGlzaW9uQm94QXJyYXl9LHN0LnByb3RvdHlwZS51bmxvYWRWZWN0b3JEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYnVja2V0cyl0aGlzLmJ1Y2tldHNbdF0uZGVzdHJveSgpO3RoaXMuYnVja2V0cz17fSx0aGlzLmljb25BdGxhc1RleHR1cmUmJnRoaXMuaWNvbkF0bGFzVGV4dHVyZS5kZXN0cm95KCksdGhpcy5nbHlwaEF0bGFzVGV4dHVyZSYmdGhpcy5nbHlwaEF0bGFzVGV4dHVyZS5kZXN0cm95KCksdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXg9bnVsbCx0aGlzLnN0YXRlPSJ1bmxvYWRlZCJ9LHN0LnByb3RvdHlwZS51bmxvYWRERU1EYXRhPWZ1bmN0aW9uKCl7dGhpcy5kZW09bnVsbCx0aGlzLm5laWdoYm9yaW5nVGlsZXM9bnVsbCx0aGlzLnN0YXRlPSJ1bmxvYWRlZCJ9LHN0LnByb3RvdHlwZS5nZXRCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnVja2V0c1t0LmlkXX0sc3QucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5idWNrZXRzKXt2YXIgcj10aGlzLmJ1Y2tldHNbZV07ci51cGxvYWRlZHx8KHIudXBsb2FkKHQpLHIudXBsb2FkZWQ9ITApfXZhciBuPXQuZ2w7dGhpcy5pY29uQXRsYXNJbWFnZSYmKHRoaXMuaWNvbkF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuaWNvbkF0bGFzSW1hZ2Usbi5SR0JBKSx0aGlzLmljb25BdGxhc0ltYWdlPW51bGwpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlJiYodGhpcy5nbHlwaEF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuZ2x5cGhBdGxhc0ltYWdlLG4uQUxQSEEpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlPW51bGwpfSxzdC5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3JldHVybiB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE/dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe3F1ZXJ5R2VvbWV0cnk6ZSxzY2FsZTpyLHRpbGVTaXplOnRoaXMudGlsZVNpemUscG9zTWF0cml4Om8sdHJhbnNmb3JtOmkscGFyYW1zOm4scXVlcnlQYWRkaW5nOnRoaXMucXVlcnlQYWRkaW5nKmF9LHQpOnt9fSxzdC5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe2lmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSl7dmFyIG49dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgubG9hZFZUTGF5ZXJzKCksaT1yP3Iuc291cmNlTGF5ZXI6IiIsYT1uLl9nZW9qc29uVGlsZUxheWVyfHxuW2ldO2lmKGEpZm9yKHZhciBvPXQuZGVmYXVsdCQxMyhyJiZyLmZpbHRlcikscz17ejp0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWix4OnRoaXMudGlsZUlELmNhbm9uaWNhbC54LHk6dGhpcy50aWxlSUQuY2Fub25pY2FsLnl9LGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIGM9YS5mZWF0dXJlKGwpO2lmKG8obmV3IHQuZGVmYXVsdCQxNih0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWiksYykpe3ZhciB1PW5ldyB0LmRlZmF1bHQkMTIoYyxzLnoscy54LHMueSk7dS50aWxlPXMsZS5wdXNoKHUpfX19fSxzdC5wcm90b3R5cGUuY2xlYXJNYXNrPWZ1bmN0aW9uKCl7dGhpcy5zZWdtZW50cyYmKHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLnNlZ21lbnRzKSx0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlciYmKHRoaXMubWFza2VkQm91bmRzQnVmZmVyLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5tYXNrZWRCb3VuZHNCdWZmZXIpLHRoaXMubWFza2VkSW5kZXhCdWZmZXImJih0aGlzLm1hc2tlZEluZGV4QnVmZmVyLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5tYXNrZWRJbmRleEJ1ZmZlcil9LHN0LnByb3RvdHlwZS5zZXRNYXNrPWZ1bmN0aW9uKGUscil7aWYoIXQuZGVmYXVsdCQxMCh0aGlzLm1hc2ssZSkmJih0aGlzLm1hc2s9ZSx0aGlzLmNsZWFyTWFzaygpLCF0LmRlZmF1bHQkMTAoZSx7MDohMH0pKSl7dmFyIG49bmV3IHQuUmFzdGVyQm91bmRzQXJyYXksaT1uZXcgdC5UcmlhbmdsZUluZGV4QXJyYXk7dGhpcy5zZWdtZW50cz1uZXcgdC5kZWZhdWx0JDE1LHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoMCxuLGkpO2Zvcih2YXIgYT1PYmplY3Qua2V5cyhlKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWVbYVtvXV0sbD10LmRlZmF1bHQkOD4+cy56LGM9bmV3IHQuZGVmYXVsdCQxKHMueCpsLHMueSpsKSx1PW5ldyB0LmRlZmF1bHQkMShjLngrbCxjLnkrbCksZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsbixpKTtuLmVtcGxhY2VCYWNrKGMueCxjLnksYy54LGMueSksbi5lbXBsYWNlQmFjayh1LngsYy55LHUueCxjLnkpLG4uZW1wbGFjZUJhY2soYy54LHUueSxjLngsdS55KSxuLmVtcGxhY2VCYWNrKHUueCx1LnksdS54LHUueSk7dmFyIGg9Zi52ZXJ0ZXhMZW5ndGg7aS5lbXBsYWNlQmFjayhoLGgrMSxoKzIpLGkuZW1wbGFjZUJhY2soaCsxLGgrMixoKzMpLGYudmVydGV4TGVuZ3RoKz00LGYucHJpbWl0aXZlTGVuZ3RoKz0yfXRoaXMubWFza2VkQm91bmRzQnVmZmVyPXIuY3JlYXRlVmVydGV4QnVmZmVyKG4sSy5tZW1iZXJzKSx0aGlzLm1hc2tlZEluZGV4QnVmZmVyPXIuY3JlYXRlSW5kZXhCdWZmZXIoaSl9fSxzdC5wcm90b3R5cGUuaGFzRGF0YT1mdW5jdGlvbigpe3JldHVybiJsb2FkZWQiPT09dGhpcy5zdGF0ZXx8InJlbG9hZGluZyI9PT10aGlzLnN0YXRlfHwiZXhwaXJlZCI9PT10aGlzLnN0YXRlfSxzdC5wcm90b3R5cGUuc2V0RXhwaXJ5RGF0YT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmV4cGlyYXRpb25UaW1lO2lmKGUuY2FjaGVDb250cm9sKXt2YXIgbj10LnBhcnNlQ2FjaGVDb250cm9sKGUuY2FjaGVDb250cm9sKTtuWyJtYXgtYWdlIl0mJih0aGlzLmV4cGlyYXRpb25UaW1lPURhdGUubm93KCkrMWUzKm5bIm1heC1hZ2UiXSl9ZWxzZSBlLmV4cGlyZXMmJih0aGlzLmV4cGlyYXRpb25UaW1lPW5ldyBEYXRlKGUuZXhwaXJlcykuZ2V0VGltZSgpKTtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXt2YXIgaT1EYXRlLm5vdygpLGE9ITE7aWYodGhpcy5leHBpcmF0aW9uVGltZT5pKWE9ITE7ZWxzZSBpZihyKWlmKHRoaXMuZXhwaXJhdGlvblRpbWU8cilhPSEwO2Vsc2V7dmFyIG89dGhpcy5leHBpcmF0aW9uVGltZS1yO28/dGhpcy5leHBpcmF0aW9uVGltZT1pK01hdGgubWF4KG8sM2U0KTphPSEwfWVsc2UgYT0hMDthPyh0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQrKyx0aGlzLnN0YXRlPSJleHBpcmVkIik6dGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTB9fSxzdC5wcm90b3R5cGUuZ2V0RXhwaXJ5VGltZW91dD1mdW5jdGlvbigpe2lmKHRoaXMuZXhwaXJhdGlvblRpbWUpcmV0dXJuIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD8xZTMqKDE8PE1hdGgubWluKHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudC0xLDMxKSk6TWF0aC5taW4odGhpcy5leHBpcmF0aW9uVGltZS0obmV3IERhdGUpLmdldFRpbWUoKSxNYXRoLnBvdygyLDMxKS0xKX07dmFyIGx0PWZ1bmN0aW9uKHQsZSl7dGhpcy5tYXg9dCx0aGlzLm9uUmVtb3ZlPWUsdGhpcy5yZXNldCgpfTtsdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5kYXRhKWZvcih2YXIgZT0wLHI9dGhpcy5kYXRhW3RdO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtuLnRpbWVvdXQmJmNsZWFyVGltZW91dChuLnRpbWVvdXQpLHRoaXMub25SZW1vdmUobi52YWx1ZSl9cmV0dXJuIHRoaXMuZGF0YT17fSx0aGlzLm9yZGVyPVtdLHRoaXN9LGx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT10LndyYXBwZWQoKS5rZXk7dm9pZCAwPT09dGhpcy5kYXRhW2ldJiYodGhpcy5kYXRhW2ldPVtdKTt2YXIgYT17dmFsdWU6ZSx0aW1lb3V0OnZvaWQgMH07aWYodm9pZCAwIT09ciYmKGEudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5yZW1vdmUodCxhKX0scikpLHRoaXMuZGF0YVtpXS5wdXNoKGEpLHRoaXMub3JkZXIucHVzaChpKSx0aGlzLm9yZGVyLmxlbmd0aD50aGlzLm1heCl7dmFyIG89dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7byYmdGhpcy5vblJlbW92ZShvKX1yZXR1cm4gdGhpc30sbHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdC53cmFwcGVkKCkua2V5IGluIHRoaXMuZGF0YX0sbHQucHJvdG90eXBlLmdldEFuZFJlbW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXModCk/dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodC53cmFwcGVkKCkua2V5KTpudWxsfSxsdC5wcm90b3R5cGUuX2dldEFuZFJlbW92ZUJ5S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YVt0XS5zaGlmdCgpO3JldHVybiBlLnRpbWVvdXQmJmNsZWFyVGltZW91dChlLnRpbWVvdXQpLDA9PT10aGlzLmRhdGFbdF0ubGVuZ3RoJiZkZWxldGUgdGhpcy5kYXRhW3RdLHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZih0KSwxKSxlLnZhbHVlfSxsdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLmRhdGFbdC53cmFwcGVkKCkua2V5XVswXS52YWx1ZTpudWxsfSxsdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuaGFzKHQpKXJldHVybiB0aGlzO3ZhciByPXQud3JhcHBlZCgpLmtleSxuPXZvaWQgMD09PWU/MDp0aGlzLmRhdGFbcl0uaW5kZXhPZihlKSxpPXRoaXMuZGF0YVtyXVtuXTtyZXR1cm4gdGhpcy5kYXRhW3JdLnNwbGljZShuLDEpLGkudGltZW91dCYmY2xlYXJUaW1lb3V0KGkudGltZW91dCksMD09PXRoaXMuZGF0YVtyXS5sZW5ndGgmJmRlbGV0ZSB0aGlzLmRhdGFbcl0sdGhpcy5vblJlbW92ZShpLnZhbHVlKSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YociksMSksdGhpc30sbHQucHJvdG90eXBlLnNldE1heFNpemU9ZnVuY3Rpb24odCl7Zm9yKHRoaXMubWF4PXQ7dGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXg7KXt2YXIgZT10aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0aGlzLm9yZGVyWzBdKTtlJiZ0aGlzLm9uUmVtb3ZlKGUpfXJldHVybiB0aGlzfTt2YXIgY3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29udGV4dD10O3ZhciBuPXQuZ2w7dGhpcy5idWZmZXI9bi5jcmVhdGVCdWZmZXIoKSx0aGlzLmR5bmFtaWNEcmF3PUJvb2xlYW4ociksdGhpcy51bmJpbmRWQU8oKSx0LmJpbmRFbGVtZW50QnVmZmVyLnNldCh0aGlzLmJ1ZmZlciksbi5idWZmZXJEYXRhKG4uRUxFTUVOVF9BUlJBWV9CVUZGRVIsZS5hcnJheUJ1ZmZlcix0aGlzLmR5bmFtaWNEcmF3P24uRFlOQU1JQ19EUkFXOm4uU1RBVElDX0RSQVcpLHRoaXMuZHluYW1pY0RyYXd8fGRlbGV0ZSBlLmFycmF5QnVmZmVyfTtjdC5wcm90b3R5cGUudW5iaW5kVkFPPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0JiZ0aGlzLmNvbnRleHQuYmluZFZlcnRleEFycmF5T0VTLnNldChudWxsKX0sY3QucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0sY3QucHJvdG90eXBlLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3RoaXMudW5iaW5kVkFPKCksdGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuRUxFTUVOVF9BUlJBWV9CVUZGRVIsMCx0LmFycmF5QnVmZmVyKX0sY3QucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5idWZmZXImJih0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlciksZGVsZXRlIHRoaXMuYnVmZmVyKX07dmFyIHV0PXtJbnQ4OiJCWVRFIixVaW50ODoiVU5TSUdORURfQllURSIsSW50MTY6IlNIT1JUIixVaW50MTY6IlVOU0lHTkVEX1NIT1JUIixJbnQzMjoiSU5UIixVaW50MzI6IlVOU0lHTkVEX0lOVCIsRmxvYXQzMjoiRkxPQVQifSxmdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLmF0dHJpYnV0ZXM9cix0aGlzLml0ZW1TaXplPWUuYnl0ZXNQZXJFbGVtZW50LHRoaXMuZHluYW1pY0RyYXc9bix0aGlzLmNvbnRleHQ9dDt2YXIgaT10LmdsO3RoaXMuYnVmZmVyPWkuY3JlYXRlQnVmZmVyKCksdC5iaW5kVmVydGV4QnVmZmVyLnNldCh0aGlzLmJ1ZmZlciksaS5idWZmZXJEYXRhKGkuQVJSQVlfQlVGRkVSLGUuYXJyYXlCdWZmZXIsdGhpcy5keW5hbWljRHJhdz9pLkRZTkFNSUNfRFJBVzppLlNUQVRJQ19EUkFXKSx0aGlzLmR5bmFtaWNEcmF3fHxkZWxldGUgZS5hcnJheUJ1ZmZlcn07ZnQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpfSxmdC5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGZ0LnByb3RvdHlwZS5lbmFibGVBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO3IrKyl7dmFyIG49dGhpcy5hdHRyaWJ1dGVzW3JdLGk9ZS5hdHRyaWJ1dGVzW24ubmFtZV07dm9pZCAwIT09aSYmdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19LGZ0LnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5hdHRyaWJ1dGVzW25dLGE9ZS5hdHRyaWJ1dGVzW2kubmFtZV07dm9pZCAwIT09YSYmdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsaS5jb21wb25lbnRzLHRbdXRbaS50eXBlXV0sITEsdGhpcy5pdGVtU2l6ZSxpLm9mZnNldCt0aGlzLml0ZW1TaXplKihyfHwwKSl9fSxmdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbDt0aGlzLmJ1ZmZlciYmKHQuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKSxkZWxldGUgdGhpcy5idWZmZXIpfTt2YXIgaHQ9ZnVuY3Rpb24oZSl7dGhpcy5jb250ZXh0PWUsdGhpcy5jdXJyZW50PXQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fTtodC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0saHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dC5yPT09ZS5yJiZ0Lmc9PT1lLmcmJnQuYj09PWUuYiYmdC5hPT09ZS5hfHwodGhpcy5jb250ZXh0LmdsLmNsZWFyQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBwdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MX07cHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHB0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5jbGVhckRlcHRoKHQpLHRoaXMuY3VycmVudD10KX07dmFyIGR0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0wfTtkdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sZHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLmNsZWFyU3RlbmNpbCh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBndD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9WyEwLCEwLCEwLCEwXX07Z3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGd0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfHwodGhpcy5jb250ZXh0LmdsLmNvbG9yTWFzayh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciB2dD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITB9O3Z0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx2dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuZGVwdGhNYXNrKHQpLHRoaXMuY3VycmVudD10KX07dmFyIG10PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0yNTV9O210LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxtdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuc3RlbmNpbE1hc2sodCksdGhpcy5jdXJyZW50PXQpfTt2YXIgeXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PXtmdW5jOnQuZ2wuQUxXQVlTLHJlZjowLG1hc2s6MjU1fX07eXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3QuZnVuYz09PWUuZnVuYyYmdC5yZWY9PT1lLnJlZiYmdC5tYXNrPT09ZS5tYXNrfHwodGhpcy5jb250ZXh0LmdsLnN0ZW5jaWxGdW5jKHQuZnVuYyx0LnJlZix0Lm1hc2spLHRoaXMuY3VycmVudD10KX07dmFyIHh0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9W2UuS0VFUCxlLktFRVAsZS5LRUVQXX07eHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHh0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl18fCh0aGlzLmNvbnRleHQuZ2wuc3RlbmNpbE9wKHRbMF0sdFsxXSx0WzJdKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBidD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITF9O2J0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxidC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0P2UuZW5hYmxlKGUuU1RFTkNJTF9URVNUKTplLmRpc2FibGUoZS5TVEVOQ0lMX1RFU1QpLHRoaXMuY3VycmVudD10fX07dmFyIF90PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1bMCwxXX07X3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LF90LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXXx8KHRoaXMuY29udGV4dC5nbC5kZXB0aFJhbmdlKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgd3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTt3dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sd3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dD9lLmVuYWJsZShlLkRFUFRIX1RFU1QpOmUuZGlzYWJsZShlLkRFUFRIX1RFU1QpLHRoaXMuY3VycmVudD10fX07dmFyIGt0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD10LmdsLkxFU1N9O2t0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxrdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuZGVwdGhGdW5jKHQpLHRoaXMuY3VycmVudD10KX07dmFyIFR0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0hMX07VHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFR0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3Q/ZS5lbmFibGUoZS5CTEVORCk6ZS5kaXNhYmxlKGUuQkxFTkQpLHRoaXMuY3VycmVudD10fX07dmFyIEF0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9W2UuT05FLGUuWkVST119O0F0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxBdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV18fCh0aGlzLmNvbnRleHQuZ2wuYmxlbmRGdW5jKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgTXQ9ZnVuY3Rpb24oZSl7dGhpcy5jb250ZXh0PWUsdGhpcy5jdXJyZW50PXQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fTtNdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sTXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dC5yPT09ZS5yJiZ0Lmc9PT1lLmcmJnQuYj09PWUuYiYmdC5hPT09ZS5hfHwodGhpcy5jb250ZXh0LmdsLmJsZW5kQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBTdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07U3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC51c2VQcm9ncmFtKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEV0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0xfTtFdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRXQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmNvbnRleHQubGluZVdpZHRoUmFuZ2Usbj10LmNsYW1wKGUsclswXSxyWzFdKTt0aGlzLmN1cnJlbnQhPT1uJiYodGhpcy5jb250ZXh0LmdsLmxpbmVXaWR0aChuKSx0aGlzLmN1cnJlbnQ9ZSl9O3ZhciBDdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9dC5nbC5URVhUVVJFMH07Q3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5hY3RpdmVUZXh0dXJlKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEx0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9WzAsMCxlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdfTtMdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sTHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXSYmdFszXT09PWVbM118fCh0aGlzLmNvbnRleHQuZ2wudmlld3BvcnQodFswXSx0WzFdLHRbMl0sdFszXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgenQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O3p0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx6dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIE90PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtPdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sT3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kUmVuZGVyYnVmZmVyKGUuUkVOREVSQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIEl0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtJdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sSXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgRHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O0R0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxEdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgUHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O1B0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxQdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRCdWZmZXIoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH07dmFyIFJ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtSdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sUnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiZ0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QmJih0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuYmluZFZlcnRleEFycmF5T0VTKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEZ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD00fTtGdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19BTElHTk1FTlQsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgQnQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTtCdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sQnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCx0KSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBOdD1mdW5jdGlvbih0LGUpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsLHRoaXMucGFyZW50PWV9O050LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fTt2YXIganQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5kaXJ0eT0hMX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGlydHl8fHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCksZS5mcmFtZWJ1ZmZlclRleHR1cmUyRChlLkZSQU1FQlVGRkVSLGUuQ09MT1JfQVRUQUNITUVOVDAsZS5URVhUVVJFXzJELHQsMCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGUucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sZX0oTnQpLFZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCksZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihlLkZSQU1FQlVGRkVSLGUuREVQVEhfQVRUQUNITUVOVCxlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH19LGV9KE50KSxVdD1mdW5jdGlvbih0LGUscil7dGhpcy5jb250ZXh0PXQsdGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXI7dmFyIG49dC5nbCxpPXRoaXMuZnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpO3RoaXMuY29sb3JBdHRhY2htZW50PW5ldyBqdCh0LGkpLHRoaXMuZGVwdGhBdHRhY2htZW50PW5ldyBWdCh0LGkpfTtVdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbCxlPXRoaXMuY29sb3JBdHRhY2htZW50LmdldCgpO2UmJnQuZGVsZXRlVGV4dHVyZShlKTt2YXIgcj10aGlzLmRlcHRoQXR0YWNobWVudC5nZXQoKTtyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKSx0LmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpfTt2YXIgcXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZnVuYz10LHRoaXMubWFzaz1lLHRoaXMucmFuZ2U9cn07cXQuUmVhZE9ubHk9ITEscXQuUmVhZFdyaXRlPSEwLHF0LmRpc2FibGVkPW5ldyBxdCg1MTkscXQuUmVhZE9ubHksWzAsMV0pO3ZhciBIdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy50ZXN0PXQsdGhpcy5yZWY9ZSx0aGlzLm1hc2s9cix0aGlzLmZhaWw9bix0aGlzLmRlcHRoRmFpbD1pLHRoaXMucGFzcz1hfTtIdC5kaXNhYmxlZD1uZXcgSHQoe2Z1bmM6NTE5LG1hc2s6MH0sMCwwLDc2ODAsNzY4MCw3NjgwKTt2YXIgR3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYmxlbmRGdW5jdGlvbj10LHRoaXMuYmxlbmRDb2xvcj1lLHRoaXMubWFzaz1yfTtHdC5kaXNhYmxlZD1uZXcgR3QoR3QuUmVwbGFjZT1bMSwwXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITEsITEsITEsITFdKSxHdC51bmJsZW5kZWQ9bmV3IEd0KEd0LlJlcGxhY2UsdC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSksR3QuYWxwaGFCbGVuZGVkPW5ldyBHdChbMSw3NzFdLHQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pO3ZhciBZdD1mdW5jdGlvbih0KXt0aGlzLmdsPXQsdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdD10aGlzLmdsLmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSx0aGlzLmxpbmVXaWR0aFJhbmdlPXQuZ2V0UGFyYW1ldGVyKHQuQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFKSx0aGlzLmNsZWFyQ29sb3I9bmV3IGh0KHRoaXMpLHRoaXMuY2xlYXJEZXB0aD1uZXcgcHQodGhpcyksdGhpcy5jbGVhclN0ZW5jaWw9bmV3IGR0KHRoaXMpLHRoaXMuY29sb3JNYXNrPW5ldyBndCh0aGlzKSx0aGlzLmRlcHRoTWFzaz1uZXcgdnQodGhpcyksdGhpcy5zdGVuY2lsTWFzaz1uZXcgbXQodGhpcyksdGhpcy5zdGVuY2lsRnVuYz1uZXcgeXQodGhpcyksdGhpcy5zdGVuY2lsT3A9bmV3IHh0KHRoaXMpLHRoaXMuc3RlbmNpbFRlc3Q9bmV3IGJ0KHRoaXMpLHRoaXMuZGVwdGhSYW5nZT1uZXcgX3QodGhpcyksdGhpcy5kZXB0aFRlc3Q9bmV3IHd0KHRoaXMpLHRoaXMuZGVwdGhGdW5jPW5ldyBrdCh0aGlzKSx0aGlzLmJsZW5kPW5ldyBUdCh0aGlzKSx0aGlzLmJsZW5kRnVuYz1uZXcgQXQodGhpcyksdGhpcy5ibGVuZENvbG9yPW5ldyBNdCh0aGlzKSx0aGlzLnByb2dyYW09bmV3IFN0KHRoaXMpLHRoaXMubGluZVdpZHRoPW5ldyBFdCh0aGlzKSx0aGlzLmFjdGl2ZVRleHR1cmU9bmV3IEN0KHRoaXMpLHRoaXMudmlld3BvcnQ9bmV3IEx0KHRoaXMpLHRoaXMuYmluZEZyYW1lYnVmZmVyPW5ldyB6dCh0aGlzKSx0aGlzLmJpbmRSZW5kZXJidWZmZXI9bmV3IE90KHRoaXMpLHRoaXMuYmluZFRleHR1cmU9bmV3IEl0KHRoaXMpLHRoaXMuYmluZFZlcnRleEJ1ZmZlcj1uZXcgRHQodGhpcyksdGhpcy5iaW5kRWxlbWVudEJ1ZmZlcj1uZXcgUHQodGhpcyksdGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCYmbmV3IFJ0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFjaz1uZXcgRnQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYT1uZXcgQnQodGhpcyksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM9dC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpLHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiYodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXg9dC5nZXRQYXJhbWV0ZXIodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKSksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0PXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0JiZ0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKX07WXQucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBjdCh0aGlzLHQsZSl9LFl0LnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXhCdWZmZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgZnQodGhpcyx0LGUscil9LFl0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2wsaT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KGkpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUix0LGUsciksdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKSxpfSxZdC5wcm90b3R5cGUuY3JlYXRlRnJhbWVidWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFV0KHRoaXMsdCxlKX0sWXQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sb3Iscj10LmRlcHRoLG49dGhpcy5nbCxpPTA7ZSYmKGl8PW4uQ09MT1JfQlVGRkVSX0JJVCx0aGlzLmNsZWFyQ29sb3Iuc2V0KGUpLHRoaXMuY29sb3JNYXNrLnNldChbITAsITAsITAsITBdKSksdm9pZCAwIT09ciYmKGl8PW4uREVQVEhfQlVGRkVSX0JJVCx0aGlzLmNsZWFyRGVwdGguc2V0KHIpLHRoaXMuZGVwdGhNYXNrLnNldCghMCkpLG4uY2xlYXIoaSl9LFl0LnByb3RvdHlwZS5zZXREZXB0aE1vZGU9ZnVuY3Rpb24odCl7dC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5kZXB0aFRlc3Quc2V0KCEwKSx0aGlzLmRlcHRoRnVuYy5zZXQodC5mdW5jKSx0aGlzLmRlcHRoTWFzay5zZXQodC5tYXNrKSx0aGlzLmRlcHRoUmFuZ2Uuc2V0KHQucmFuZ2UpKTp0aGlzLmRlcHRoVGVzdC5zZXQoITEpfSxZdC5wcm90b3R5cGUuc2V0U3RlbmNpbE1vZGU9ZnVuY3Rpb24odCl7dC50ZXN0LmZ1bmMhPT10aGlzLmdsLkFMV0FZU3x8dC5tYXNrPyh0aGlzLnN0ZW5jaWxUZXN0LnNldCghMCksdGhpcy5zdGVuY2lsTWFzay5zZXQodC5tYXNrKSx0aGlzLnN0ZW5jaWxPcC5zZXQoW3QuZmFpbCx0LmRlcHRoRmFpbCx0LnBhc3NdKSx0aGlzLnN0ZW5jaWxGdW5jLnNldCh7ZnVuYzp0LnRlc3QuZnVuYyxyZWY6dC5yZWYsbWFzazp0LnRlc3QubWFza30pKTp0aGlzLnN0ZW5jaWxUZXN0LnNldCghMSl9LFl0LnByb3RvdHlwZS5zZXRDb2xvck1vZGU9ZnVuY3Rpb24oZSl7dC5kZWZhdWx0JDEwKGUuYmxlbmRGdW5jdGlvbixHdC5SZXBsYWNlKT90aGlzLmJsZW5kLnNldCghMSk6KHRoaXMuYmxlbmQuc2V0KCEwKSx0aGlzLmJsZW5kRnVuYy5zZXQoZS5ibGVuZEZ1bmN0aW9uKSx0aGlzLmJsZW5kQ29sb3Iuc2V0KGUuYmxlbmRDb2xvcikpLHRoaXMuY29sb3JNYXNrLnNldChlLm1hc2spfTt2YXIgV3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbil7dmFyIGk9dGhpcztlLmNhbGwodGhpcyksdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1uLHRoaXMub24oImRhdGEiLGZ1bmN0aW9uKHQpeyJzb3VyY2UiPT09dC5kYXRhVHlwZSYmIm1ldGFkYXRhIj09PXQuc291cmNlRGF0YVR5cGUmJihpLl9zb3VyY2VMb2FkZWQ9ITApLGkuX3NvdXJjZUxvYWRlZCYmIWkuX3BhdXNlZCYmInNvdXJjZSI9PT10LmRhdGFUeXBlJiYiY29udGVudCI9PT10LnNvdXJjZURhdGFUeXBlJiYoaS5yZWxvYWQoKSxpLnRyYW5zZm9ybSYmaS51cGRhdGUoaS50cmFuc2Zvcm0pKX0pLHRoaXMub24oImVycm9yIixmdW5jdGlvbigpe2kuX3NvdXJjZUVycm9yZWQ9ITB9KSx0aGlzLl9zb3VyY2U9aXQodCxyLG4sdGhpcyksdGhpcy5fdGlsZXM9e30sdGhpcy5fY2FjaGU9bmV3IGx0KDAsdGhpcy5fdW5sb2FkVGlsZS5iaW5kKHRoaXMpKSx0aGlzLl90aW1lcnM9e30sdGhpcy5fY2FjaGVUaW1lcnM9e30sdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1udWxsLHRoaXMuX2lzSWRSZW5kZXJhYmxlPXRoaXMuX2lzSWRSZW5kZXJhYmxlLmJpbmQodGhpcyksdGhpcy5fY292ZXJlZFRpbGVzPXt9fXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMuX21heFRpbGVDYWNoZVNpemU9dD90Ll9tYXhUaWxlQ2FjaGVTaXplOm51bGwsdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25BZGQmJnRoaXMuX3NvdXJjZS5vbkFkZCh0KX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUmJnRoaXMuX3NvdXJjZS5vblJlbW92ZSh0KX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fc291cmNlRXJyb3JlZClyZXR1cm4hMDtpZighdGhpcy5fc291cmNlTG9hZGVkKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYoImxvYWRlZCIhPT1lLnN0YXRlJiYiZXJyb3JlZCIhPT1lLnN0YXRlKXJldHVybiExfXJldHVybiEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BhdXNlZD0hMH0sci5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7aWYodGhpcy5fcGF1c2VkKXt2YXIgdD10aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTt0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdCYmdGhpcy5yZWxvYWQoKSx0aGlzLnRyYW5zZm9ybSYmdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pfX0sci5wcm90b3R5cGUuX2xvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0LGUpfSxyLnByb3RvdHlwZS5fdW5sb2FkVGlsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodCxmdW5jdGlvbigpe30pfSxyLnByb3RvdHlwZS5fYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUpcmV0dXJuIHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUodCxmdW5jdGlvbigpe30pfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlLnNlcmlhbGl6ZSgpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl9zb3VyY2UucHJlcGFyZSYmdGhpcy5fc291cmNlLnByZXBhcmUoKSx0aGlzLl90aWxlcyl0aGlzLl90aWxlc1tlXS51cGxvYWQodCl9LHIucHJvdG90eXBlLmdldElkcz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3RpbGVzKS5tYXAoTnVtYmVyKS5zb3J0KGZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5fdGlsZXNbcl0udGlsZUlELGE9ZS5fdGlsZXNbbl0udGlsZUlELG89bmV3IHQuZGVmYXVsdCQxKGkuY2Fub25pY2FsLngsaS5jYW5vbmljYWwueSkucm90YXRlKGUudHJhbnNmb3JtLmFuZ2xlKSxzPW5ldyB0LmRlZmF1bHQkMShhLmNhbm9uaWNhbC54LGEuY2Fub25pY2FsLnkpLnJvdGF0ZShlLnRyYW5zZm9ybS5hbmdsZSk7cmV0dXJuIGkub3ZlcnNjYWxlZFotYS5vdmVyc2NhbGVkWnx8cy55LW8ueXx8cy54LW8ueH0pfSxyLnByb3RvdHlwZS5nZXRSZW5kZXJhYmxlSWRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0SWRzKCkuZmlsdGVyKHRoaXMuX2lzSWRSZW5kZXJhYmxlKX0sci5wcm90b3R5cGUuaGFzUmVuZGVyYWJsZVBhcmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmRMb2FkZWRQYXJlbnQodCwwLHt9KTtyZXR1cm4hIWUmJnRoaXMuX2lzSWRSZW5kZXJhYmxlKGUudGlsZUlELmtleSl9LHIucHJvdG90eXBlLl9pc0lkUmVuZGVyYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZXNbdF0mJnRoaXMuX3RpbGVzW3RdLmhhc0RhdGEoKSYmIXRoaXMuX2NvdmVyZWRUaWxlc1t0XX0sci5wcm90b3R5cGUucmVsb2FkPWZ1bmN0aW9uKCl7aWYodGhpcy5fcGF1c2VkKXRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lPSEwO2Vsc2UgZm9yKHZhciB0IGluIHRoaXMuX2NhY2hlLnJlc2V0KCksdGhpcy5fdGlsZXMpdGhpcy5fcmVsb2FkVGlsZSh0LCJyZWxvYWRpbmciKX0sci5wcm90b3R5cGUuX3JlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl90aWxlc1t0XTtyJiYoImxvYWRpbmciIT09ci5zdGF0ZSYmKHIuc3RhdGU9ZSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLHQsZSkpKX0sci5wcm90b3R5cGUuX3RpbGVMb2FkZWQ9ZnVuY3Rpb24oZSxyLG4saSl7aWYoaSlyZXR1cm4gZS5zdGF0ZT0iZXJyb3JlZCIsdm9pZCg0MDQhPT1pLnN0YXR1cz90aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KGkse3RpbGU6ZX0pKTp0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSkpO2UudGltZUFkZGVkPWEubm93KCksImV4cGlyZWQiPT09biYmKGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb249ITApLHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihyLGUpLCJyYXN0ZXItZGVtIj09PXRoaXMuZ2V0U291cmNlKCkudHlwZSYmZS5kZW0mJnRoaXMuX2JhY2tmaWxsREVNKGUpLHRoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsdGlsZTplLGNvb3JkOmUudGlsZUlEfSkpLHRoaXMubWFwJiYodGhpcy5tYXAucGFpbnRlci50aWxlRXh0ZW50VkFPLnZhbz1udWxsKX0sci5wcm90b3R5cGUuX2JhY2tmaWxsREVNPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmdldFJlbmRlcmFibGVJZHMoKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodC5uZWlnaGJvcmluZ1RpbGVzJiZ0Lm5laWdoYm9yaW5nVGlsZXNbbl0pe3ZhciBpPXRoaXMuZ2V0VGlsZUJ5SUQobik7YSh0LGkpLGEoaSx0KX19ZnVuY3Rpb24gYSh0LGUpe3QubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwO3ZhciByPWUudGlsZUlELmNhbm9uaWNhbC54LXQudGlsZUlELmNhbm9uaWNhbC54LG49ZS50aWxlSUQuY2Fub25pY2FsLnktdC50aWxlSUQuY2Fub25pY2FsLnksaT1NYXRoLnBvdygyLHQudGlsZUlELmNhbm9uaWNhbC56KSxhPWUudGlsZUlELmtleTswPT09ciYmMD09PW58fE1hdGguYWJzKG4pPjF8fChNYXRoLmFicyhyKT4xJiYoMT09PU1hdGguYWJzKHIraSk/cis9aToxPT09TWF0aC5hYnMoci1pKSYmKHItPWkpKSxlLmRlbSYmdC5kZW0mJih0LmRlbS5iYWNrZmlsbEJvcmRlcihlLmRlbSxyLG4pLHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW2FdJiYodC5uZWlnaGJvcmluZ1RpbGVzW2FdLmJhY2tmaWxsZWQ9ITApKSl9fSxyLnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQua2V5KX0sci5wcm90b3R5cGUuZ2V0VGlsZUJ5SUQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdfSxyLnByb3RvdHlwZS5nZXRab29tPWZ1bmN0aW9uKHQpe3JldHVybiB0Lnpvb20rdC5zY2FsZVpvb20odC50aWxlU2l6ZS90aGlzLl9zb3VyY2UudGlsZVNpemUpfSxyLnByb3RvdHlwZS5fZmluZExvYWRlZENoaWxkcmVuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0hMTtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpe3ZhciBhPXRoaXMuX3RpbGVzW2ldO2lmKCEocltpXXx8IWEuaGFzRGF0YSgpfHxhLnRpbGVJRC5vdmVyc2NhbGVkWjw9dC5vdmVyc2NhbGVkWnx8YS50aWxlSUQub3ZlcnNjYWxlZFo+ZSkpe3ZhciBvPU1hdGgucG93KDIsYS50aWxlSUQuY2Fub25pY2FsLnotdC5jYW5vbmljYWwueik7aWYoTWF0aC5mbG9vcihhLnRpbGVJRC5jYW5vbmljYWwueC9vKT09PXQuY2Fub25pY2FsLngmJk1hdGguZmxvb3IoYS50aWxlSUQuY2Fub25pY2FsLnkvbyk9PT10LmNhbm9uaWNhbC55KWZvcihyW2ldPWEudGlsZUlELG49ITA7YSYmYS50aWxlSUQub3ZlcnNjYWxlZFotMT50Lm92ZXJzY2FsZWRaOyl7dmFyIHM9YS50aWxlSUQuc2NhbGVkVG8oYS50aWxlSUQub3ZlcnNjYWxlZFotMSk7aWYoIXMpYnJlYWs7KGE9dGhpcy5fdGlsZXNbcy5rZXldKSYmYS5oYXNEYXRhKCkmJihkZWxldGUgcltpXSxyW3Mua2V5XT1zKX19fXJldHVybiBufSxyLnByb3RvdHlwZS5maW5kTG9hZGVkUGFyZW50PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5vdmVyc2NhbGVkWi0xO24+PWU7bi0tKXt2YXIgaT10LnNjYWxlZFRvKG4pO2lmKCFpKXJldHVybjt2YXIgYT1TdHJpbmcoaS5rZXkpLG89dGhpcy5fdGlsZXNbYV07aWYobyYmby5oYXNEYXRhKCkpcmV0dXJuIHJbYV09aSxvO2lmKHRoaXMuX2NhY2hlLmhhcyhpKSlyZXR1cm4gclthXT1pLHRoaXMuX2NhY2hlLmdldChpKX19LHIucHJvdG90eXBlLnVwZGF0ZUNhY2hlU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT0oTWF0aC5jZWlsKHQud2lkdGgvdGhpcy5fc291cmNlLnRpbGVTaXplKSsxKSooTWF0aC5jZWlsKHQuaGVpZ2h0L3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSkscj1NYXRoLmZsb29yKDUqZSksbj0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX21heFRpbGVDYWNoZVNpemU/TWF0aC5taW4odGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSxyKTpyO3RoaXMuX2NhY2hlLnNldE1heFNpemUobil9LHIucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPSh0LSh2b2lkIDA9PT10aGlzLl9wcmV2TG5nP3Q6dGhpcy5fcHJldkxuZykpLzM2MCxyPU1hdGgucm91bmQoZSk7aWYodGhpcy5fcHJldkxuZz10LHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl7dmFyIGE9dGhpcy5fdGlsZXNbaV07YS50aWxlSUQ9YS50aWxlSUQudW53cmFwVG8oYS50aWxlSUQud3JhcCtyKSxuW2EudGlsZUlELmtleV09YX1mb3IodmFyIG8gaW4gdGhpcy5fdGlsZXM9bix0aGlzLl90aW1lcnMpY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tvXSksZGVsZXRlIHRoaXMuX3RpbWVyc1tvXTtmb3IodmFyIHMgaW4gdGhpcy5fdGlsZXMpe3ZhciBsPXRoaXMuX3RpbGVzW3NdO3RoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihzLGwpfX19LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2lmKHRoaXMudHJhbnNmb3JtPWUsdGhpcy5fc291cmNlTG9hZGVkJiYhdGhpcy5fcGF1c2VkKXt2YXIgaTt0aGlzLnVwZGF0ZUNhY2hlU2l6ZShlKSx0aGlzLmhhbmRsZVdyYXBKdW1wKHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcpLHRoaXMuX2NvdmVyZWRUaWxlcz17fSx0aGlzLnVzZWQ/dGhpcy5fc291cmNlLnRpbGVJRD9pPWUuZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzKHRoaXMuX3NvdXJjZS50aWxlSUQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLmNhbm9uaWNhbC56LGUud3JhcCxlLmNhbm9uaWNhbC56LGUuY2Fub25pY2FsLngsZS5jYW5vbmljYWwueSl9KTooaT1lLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOnRoaXMuX3NvdXJjZS50aWxlU2l6ZSxtaW56b29tOnRoaXMuX3NvdXJjZS5taW56b29tLG1heHpvb206dGhpcy5fc291cmNlLm1heHpvb20scm91bmRab29tOnRoaXMuX3NvdXJjZS5yb3VuZFpvb20scmVwYXJzZU92ZXJzY2FsZWQ6dGhpcy5fc291cmNlLnJlcGFyc2VPdmVyc2NhbGVkfSksdGhpcy5fc291cmNlLmhhc1RpbGUmJihpPWkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9zb3VyY2UuaGFzVGlsZSh0KX0pKSk6aT1bXTt2YXIgbyxzPSh0aGlzLl9zb3VyY2Uucm91bmRab29tP01hdGgucm91bmQ6TWF0aC5mbG9vcikodGhpcy5nZXRab29tKGUpKSxsPU1hdGgubWF4KHMtci5tYXhPdmVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksYz1NYXRoLm1heChzK3IubWF4VW5kZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSx1PXRoaXMuX3VwZGF0ZVJldGFpbmVkVGlsZXMoaSxzKSxmPXt9O2lmKFp0KHRoaXMuX3NvdXJjZS50eXBlKSlmb3IodmFyIGg9T2JqZWN0LmtleXModSkscD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgZD1oW3BdLGc9dVtkXSx2PW4uX3RpbGVzW2RdO2lmKHYmJih2b2lkIDA9PT12LmZhZGVFbmRUaW1lfHx2LmZhZGVFbmRUaW1lPj1hLm5vdygpKSl7bi5fZmluZExvYWRlZENoaWxkcmVuKGcsYyx1KSYmKHVbZF09Zyk7dmFyIG09bi5maW5kTG9hZGVkUGFyZW50KGcsbCxmKTttJiZuLl9hZGRUaWxlKG0udGlsZUlEKX19Zm9yKG8gaW4gZil1W29dfHwobi5fY292ZXJlZFRpbGVzW29dPSEwKTtmb3IobyBpbiBmKXVbb109ZltvXTtmb3IodmFyIHk9dC5rZXlzRGlmZmVyZW5jZSh0aGlzLl90aWxlcyx1KSx4PTA7eDx5Lmxlbmd0aDt4Kyspbi5fcmVtb3ZlVGlsZSh5W3hdKX19LHIucHJvdG90eXBlLl91cGRhdGVSZXRhaW5lZFRpbGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGk9e30sYT1NYXRoLm1heChlLXIubWF4T3Zlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLG89TWF0aC5tYXgoZStyLm1heFVuZGVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSkscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdLGM9dGhpcy5fYWRkVGlsZShsKSx1PSExO2lmKGMuaGFzRGF0YSgpKW5bbC5rZXldPWw7ZWxzZXt1PWMud2FzUmVxdWVzdGVkKCksbltsLmtleV09bDt2YXIgZj0hMDtpZihlKzE+dGhpcy5fc291cmNlLm1heHpvb20pe3ZhciBoPWwuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pWzBdLHA9dGhpcy5nZXRUaWxlKGgpO3AmJnAuaGFzRGF0YSgpP25baC5rZXldPWg6Zj0hMX1lbHNle3RoaXMuX2ZpbmRMb2FkZWRDaGlsZHJlbihsLG8sbik7Zm9yKHZhciBkPWwuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pLGc9MDtnPGQubGVuZ3RoO2crKylpZighbltkW2ddLmtleV0pe2Y9ITE7YnJlYWt9fWlmKCFmKWZvcih2YXIgdj1sLm92ZXJzY2FsZWRaLTE7dj49YTstLXYpe3ZhciBtPWwuc2NhbGVkVG8odik7aWYoaVttLmtleV0pYnJlYWs7aWYoaVttLmtleV09ITAsIShjPXRoaXMuZ2V0VGlsZShtKSkmJnUmJihjPXRoaXMuX2FkZFRpbGUobSkpLGMmJihuW20ua2V5XT1tLHU9Yy53YXNSZXF1ZXN0ZWQoKSxjLmhhc0RhdGEoKSkpYnJlYWt9fX1yZXR1cm4gbn0sci5wcm90b3R5cGUuX2FkZFRpbGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fdGlsZXNbZS5rZXldO2lmKHIpcmV0dXJuIHI7KHI9dGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKGUpKSYmKHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihlLmtleSxyKSxyLnRpbGVJRD1lKTt2YXIgbj1Cb29sZWFuKHIpO3JldHVybiBufHwocj1uZXcgc3QoZSx0aGlzLl9zb3VyY2UudGlsZVNpemUqZS5vdmVyc2NhbGVGYWN0b3IoKSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLGUua2V5LHIuc3RhdGUpKSkscj8oci51c2VzKyssdGhpcy5fdGlsZXNbZS5rZXldPXIsbnx8dGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7dGlsZTpyLGNvb3JkOnIudGlsZUlELGRhdGFUeXBlOiJzb3VyY2UifSkpLHIpOm51bGx9LHIucHJvdG90eXBlLl9zZXRUaWxlUmVsb2FkVGltZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3QgaW4gdGhpcy5fdGltZXJzJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1t0XSksZGVsZXRlIHRoaXMuX3RpbWVyc1t0XSk7dmFyIG49ZS5nZXRFeHBpcnlUaW1lb3V0KCk7biYmKHRoaXMuX3RpbWVyc1t0XT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5fcmVsb2FkVGlsZSh0LCJleHBpcmVkIiksZGVsZXRlIHIuX3RpbWVyc1t0XX0sbikpfSxyLnByb3RvdHlwZS5fcmVtb3ZlVGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlc1t0XTtlJiYoZS51c2VzLS0sZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuX3RpbWVyc1t0XSYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbdF0pLGRlbGV0ZSB0aGlzLl90aW1lcnNbdF0pLGUudXNlcz4wfHwoZS5oYXNEYXRhKCk/dGhpcy5fY2FjaGUuYWRkKGUudGlsZUlELGUsZS5nZXRFeHBpcnlUaW1lb3V0KCkpOihlLmFib3J0ZWQ9ITAsdGhpcy5fYWJvcnRUaWxlKGUpLHRoaXMuX3VubG9hZFRpbGUoZSkpKSl9LHIucHJvdG90eXBlLmNsZWFyVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCk7dGhpcy5fY2FjaGUucmVzZXQoKX0sci5wcm90b3R5cGUudGlsZXNJbj1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPXRoaXMuZ2V0SWRzKCksYT0xLzAsbz0xLzAscz0tMS8wLGw9LTEvMCxjPWVbMF0uem9vbSx1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBmPWVbdV07YT1NYXRoLm1pbihhLGYuY29sdW1uKSxvPU1hdGgubWluKG8sZi5yb3cpLHM9TWF0aC5tYXgocyxmLmNvbHVtbiksbD1NYXRoLm1heChsLGYucm93KX1mb3IodmFyIGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIHA9dGhpcy5fdGlsZXNbaVtoXV0sZD1wLnRpbGVJRCxnPU1hdGgucG93KDIsdGhpcy50cmFuc2Zvcm0uem9vbS1wLnRpbGVJRC5vdmVyc2NhbGVkWiksdj1yKnAucXVlcnlQYWRkaW5nKnQuZGVmYXVsdCQ4L3AudGlsZVNpemUvZyxtPVtYdChkLG5ldyB0LmRlZmF1bHQkMTcoYSxvLGMpKSxYdChkLG5ldyB0LmRlZmF1bHQkMTcocyxsLGMpKV07aWYobVswXS54LXY8dC5kZWZhdWx0JDgmJm1bMF0ueS12PHQuZGVmYXVsdCQ4JiZtWzFdLngrdj49MCYmbVsxXS55K3Y+PTApe2Zvcih2YXIgeT1bXSx4PTA7eDxlLmxlbmd0aDt4KyspeS5wdXNoKFh0KGQsZVt4XSkpO24ucHVzaCh7dGlsZTpwLHRpbGVJRDpkLHF1ZXJ5R2VvbWV0cnk6W3ldLHNjYWxlOmd9KX19cmV0dXJuIG59LHIucHJvdG90eXBlLmdldFZpc2libGVDb29yZGluYXRlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhpcy5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll90aWxlc1tlXS50aWxlSUR9KSxyPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtpLnBvc01hdHJpeD10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoaS50b1Vud3JhcHBlZCgpKX1yZXR1cm4gZX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7aWYoWnQodGhpcy5fc291cmNlLnR5cGUpKWZvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYodm9pZCAwIT09ZS5mYWRlRW5kVGltZSYmZS5mYWRlRW5kVGltZT49YS5ub3coKSlyZXR1cm4hMH1yZXR1cm4hMX0scn0odC5FdmVudGVkKTtmdW5jdGlvbiBYdChlLHIpe3ZhciBuPXIuem9vbVRvKGUuY2Fub25pY2FsLnopO3JldHVybiBuZXcgdC5kZWZhdWx0JDEoKG4uY29sdW1uLShlLmNhbm9uaWNhbC54K2Uud3JhcCpNYXRoLnBvdygyLGUuY2Fub25pY2FsLnopKSkqdC5kZWZhdWx0JDgsKG4ucm93LWUuY2Fub25pY2FsLnkpKnQuZGVmYXVsdCQ4KX1mdW5jdGlvbiBadCh0KXtyZXR1cm4icmFzdGVyIj09PXR8fCJpbWFnZSI9PT10fHwidmlkZW8iPT09dH1mdW5jdGlvbiAkdCgpe3JldHVybiBuZXcgdC5kZWZhdWx0LldvcmtlcihFbi53b3JrZXJVcmwpfVd0Lm1heE92ZXJ6b29taW5nPTEwLFd0Lm1heFVuZGVyem9vbWluZz0zO3ZhciBKdCxLdD1mdW5jdGlvbigpe3RoaXMuYWN0aXZlPXt9fTtmdW5jdGlvbiBRdChlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiBlKSJyZWYiIT09aSYmKG5baV09ZVtpXSk7cmV0dXJuIHQuZGVmYXVsdCQxOC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QgaW4gciYmKG5bdF09clt0XSl9KSxufWZ1bmN0aW9uIHRlKHQpe3Q9dC5zbGljZSgpO2Zvcih2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl0uaWRdPXRbcl07Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspInJlZiJpbiB0W25dJiYodFtuXT1RdCh0W25dLGVbdFtuXS5yZWZdKSk7cmV0dXJuIHR9S3QucHJvdG90eXBlLmFjcXVpcmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMud29ya2Vycyl7dmFyIGU9RW4ud29ya2VyQ291bnQ7Zm9yKHRoaXMud29ya2Vycz1bXTt0aGlzLndvcmtlcnMubGVuZ3RoPGU7KXRoaXMud29ya2Vycy5wdXNoKG5ldyAkdCl9cmV0dXJuIHRoaXMuYWN0aXZlW3RdPSEwLHRoaXMud29ya2Vycy5zbGljZSgpfSxLdC5wcm90b3R5cGUucmVsZWFzZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5hY3RpdmVbdF0sMD09PU9iamVjdC5rZXlzKHRoaXMuYWN0aXZlKS5sZW5ndGgmJih0aGlzLndvcmtlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnRlcm1pbmF0ZSgpfSksdGhpcy53b3JrZXJzPW51bGwpfTt2YXIgZWU9e3NldFN0eWxlOiJzZXRTdHlsZSIsYWRkTGF5ZXI6ImFkZExheWVyIixyZW1vdmVMYXllcjoicmVtb3ZlTGF5ZXIiLHNldFBhaW50UHJvcGVydHk6InNldFBhaW50UHJvcGVydHkiLHNldExheW91dFByb3BlcnR5OiJzZXRMYXlvdXRQcm9wZXJ0eSIsc2V0RmlsdGVyOiJzZXRGaWx0ZXIiLGFkZFNvdXJjZToiYWRkU291cmNlIixyZW1vdmVTb3VyY2U6InJlbW92ZVNvdXJjZSIsc2V0R2VvSlNPTlNvdXJjZURhdGE6InNldEdlb0pTT05Tb3VyY2VEYXRhIixzZXRMYXllclpvb21SYW5nZToic2V0TGF5ZXJab29tUmFuZ2UiLHNldExheWVyUHJvcGVydHk6InNldExheWVyUHJvcGVydHkiLHNldENlbnRlcjoic2V0Q2VudGVyIixzZXRab29tOiJzZXRab29tIixzZXRCZWFyaW5nOiJzZXRCZWFyaW5nIixzZXRQaXRjaDoic2V0UGl0Y2giLHNldFNwcml0ZToic2V0U3ByaXRlIixzZXRHbHlwaHM6InNldEdseXBocyIsc2V0VHJhbnNpdGlvbjoic2V0VHJhbnNpdGlvbiIsc2V0TGlnaHQ6InNldExpZ2h0In07ZnVuY3Rpb24gcmUodCxlLHIpe3IucHVzaCh7Y29tbWFuZDplZS5hZGRTb3VyY2UsYXJnczpbdCxlW3RdXX0pfWZ1bmN0aW9uIG5lKHQsZSxyKXtlLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlU291cmNlLGFyZ3M6W3RdfSksclt0XT0hMH1mdW5jdGlvbiBpZSh0LGUscixuKXtuZSh0LHIsbikscmUodCxlLHIpfWZ1bmN0aW9uIGFlKGUscixuKXt2YXIgaTtmb3IoaSBpbiBlW25dKWlmKGVbbl0uaGFzT3duUHJvcGVydHkoaSkmJiJkYXRhIiE9PWkmJiF0LmRlZmF1bHQkMTAoZVtuXVtpXSxyW25dW2ldKSlyZXR1cm4hMTtmb3IoaSBpbiByW25dKWlmKHJbbl0uaGFzT3duUHJvcGVydHkoaSkmJiJkYXRhIiE9PWkmJiF0LmRlZmF1bHQkMTAoZVtuXVtpXSxyW25dW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBvZShlLHIsbixpLGEsbyl7dmFyIHM7Zm9yKHMgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZmF1bHQkMTAoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSk7Zm9yKHMgaW4gcilyLmhhc093blByb3BlcnR5KHMpJiYhZS5oYXNPd25Qcm9wZXJ0eShzKSYmKHQuZGVmYXVsdCQxMChlW3NdLHJbc10pfHxuLnB1c2goe2NvbW1hbmQ6byxhcmdzOltpLHMscltzXSxhXX0pKX1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiB0W2UuaWRdPWUsdH12YXIgY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuYm94Q2VsbHM9W10saT10aGlzLmNpcmNsZUNlbGxzPVtdO3RoaXMueENlbGxDb3VudD1NYXRoLmNlaWwodC9yKSx0aGlzLnlDZWxsQ291bnQ9TWF0aC5jZWlsKGUvcik7Zm9yKHZhciBhPTA7YTx0aGlzLnhDZWxsQ291bnQqdGhpcy55Q2VsbENvdW50O2ErKyluLnB1c2goW10pLGkucHVzaChbXSk7dGhpcy5jaXJjbGVLZXlzPVtdLHRoaXMuYm94S2V5cz1bXSx0aGlzLmJib3hlcz1bXSx0aGlzLmNpcmNsZXM9W10sdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy54U2NhbGU9dGhpcy54Q2VsbENvdW50L3QsdGhpcy55U2NhbGU9dGhpcy55Q2VsbENvdW50L2UsdGhpcy5ib3hVaWQ9MCx0aGlzLmNpcmNsZVVpZD0wfTtjZS5wcm90b3R5cGUua2V5c0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJveEtleXMubGVuZ3RoK3RoaXMuY2lyY2xlS2V5cy5sZW5ndGh9LGNlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydEJveENlbGwsdGhpcy5ib3hVaWQrKyksdGhpcy5ib3hLZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sY2UucHJvdG90eXBlLmluc2VydENpcmNsZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLl9mb3JFYWNoQ2VsbChlLW4sci1uLGUrbixyK24sdGhpcy5faW5zZXJ0Q2lyY2xlQ2VsbCx0aGlzLmNpcmNsZVVpZCsrKSx0aGlzLmNpcmNsZUtleXMucHVzaCh0KSx0aGlzLmNpcmNsZXMucHVzaChlKSx0aGlzLmNpcmNsZXMucHVzaChyKSx0aGlzLmNpcmNsZXMucHVzaChuKX0sY2UucHJvdG90eXBlLl9pbnNlcnRCb3hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmJveENlbGxzW2ldLnB1c2goYSl9LGNlLnByb3RvdHlwZS5faW5zZXJ0Q2lyY2xlQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jaXJjbGVDZWxsc1tpXS5wdXNoKGEpfSxjZS5wcm90b3R5cGUuX3F1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYocjwwfHx0PnRoaXMud2lkdGh8fG48MHx8ZT50aGlzLmhlaWdodClyZXR1cm4haSYmW107dmFyIGE9W107aWYodDw9MCYmZTw9MCYmdGhpcy53aWR0aDw9ciYmdGhpcy5oZWlnaHQ8PW4pe2lmKGkpcmV0dXJuITA7Zm9yKHZhciBvPTA7bzx0aGlzLmJveEtleXMubGVuZ3RoO28rKylhLnB1c2goe2tleTp0aGlzLmJveEtleXNbb10seDE6dGhpcy5iYm94ZXNbNCpvXSx5MTp0aGlzLmJib3hlc1s0Km8rMV0seDI6dGhpcy5iYm94ZXNbNCpvKzJdLHkyOnRoaXMuYmJveGVzWzQqbyszXX0pO2Zvcih2YXIgcz0wO3M8dGhpcy5jaXJjbGVLZXlzLmxlbmd0aDtzKyspe3ZhciBsPXRoaXMuY2lyY2xlc1szKnNdLGM9dGhpcy5jaXJjbGVzWzMqcysxXSx1PXRoaXMuY2lyY2xlc1szKnMrMl07YS5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW3NdLHgxOmwtdSx5MTpjLXUseDI6bCt1LHkyOmMrdX0pfX1lbHNle3ZhciBmPXtoaXRUZXN0Omksc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTt0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxhLGYpfXJldHVybiBpP2EubGVuZ3RoPjA6YX0sY2UucHJvdG90eXBlLl9xdWVyeUNpcmNsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LXIsYT10K3Isbz1lLXIscz1lK3I7aWYoYTwwfHxpPnRoaXMud2lkdGh8fHM8MHx8bz50aGlzLmhlaWdodClyZXR1cm4hbiYmW107dmFyIGw9W10sYz17aGl0VGVzdDpuLGNpcmNsZTp7eDp0LHk6ZSxyYWRpdXM6cn0sc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwoaSxvLGEscyx0aGlzLl9xdWVyeUNlbGxDaXJjbGUsbCxjKSxuP2wubGVuZ3RoPjA6bH0sY2UucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9xdWVyeSh0LGUscixuLCExKX0sY2UucHJvdG90eXBlLmhpdFRlc3Q9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX3F1ZXJ5KHQsZSxyLG4sITApfSxjZS5wcm90b3R5cGUuaGl0VGVzdENpcmNsZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3F1ZXJ5Q2lyY2xlKHQsZSxyLCEwKX0sY2UucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9by5zZWVuVWlkcyxsPXRoaXMuYm94Q2VsbHNbaV07aWYobnVsbCE9PWwpZm9yKHZhciBjPXRoaXMuYmJveGVzLHU9MCxmPWw7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO2lmKCFzLmJveFtoXSl7cy5ib3hbaF09ITA7dmFyIHA9NCpoO2lmKHQ8PWNbcCsyXSYmZTw9Y1twKzNdJiZyPj1jW3ArMF0mJm4+PWNbcCsxXSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO2EucHVzaCh7a2V5OnRoaXMuYm94S2V5c1toXSx4MTpjW3BdLHkxOmNbcCsxXSx4MjpjW3ArMl0seTI6Y1twKzNdfSl9fX12YXIgZD10aGlzLmNpcmNsZUNlbGxzW2ldO2lmKG51bGwhPT1kKWZvcih2YXIgZz10aGlzLmNpcmNsZXMsdj0wLG09ZDt2PG0ubGVuZ3RoO3YrPTEpe3ZhciB5PW1bdl07aWYoIXMuY2lyY2xlW3ldKXtzLmNpcmNsZVt5XT0hMDt2YXIgeD0zKnk7aWYodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUoZ1t4XSxnW3grMV0sZ1t4KzJdLHQsZSxyLG4pKXtpZihvLmhpdFRlc3QpcmV0dXJuIGEucHVzaCghMCksITA7dmFyIGI9Z1t4XSxfPWdbeCsxXSx3PWdbeCsyXTthLnB1c2goe2tleTp0aGlzLmNpcmNsZUtleXNbeV0seDE6Yi13LHkxOl8tdyx4MjpiK3cseTI6Xyt3fSl9fX19LGNlLnByb3RvdHlwZS5fcXVlcnlDZWxsQ2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPW8uY2lyY2xlLGw9by5zZWVuVWlkcyxjPXRoaXMuYm94Q2VsbHNbaV07aWYobnVsbCE9PWMpZm9yKHZhciB1PXRoaXMuYmJveGVzLGY9MCxoPWM7ZjxoLmxlbmd0aDtmKz0xKXt2YXIgcD1oW2ZdO2lmKCFsLmJveFtwXSl7bC5ib3hbcF09ITA7dmFyIGQ9NCpwO2lmKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKHMueCxzLnkscy5yYWRpdXMsdVtkKzBdLHVbZCsxXSx1W2QrMl0sdVtkKzNdKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19dmFyIGc9dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09Zylmb3IodmFyIHY9dGhpcy5jaXJjbGVzLG09MCx5PWc7bTx5Lmxlbmd0aDttKz0xKXt2YXIgeD15W21dO2lmKCFsLmNpcmNsZVt4XSl7bC5jaXJjbGVbeF09ITA7dmFyIGI9Myp4O2lmKHRoaXMuX2NpcmNsZXNDb2xsaWRlKHZbYl0sdltiKzFdLHZbYisyXSxzLngscy55LHMucmFkaXVzKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19fSxjZS5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHQpLGw9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChlKSxjPXRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQociksdT10aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKG4pLGY9cztmPD1jO2YrKylmb3IodmFyIGg9bDtoPD11O2grKyl7dmFyIHA9dGhpcy54Q2VsbENvdW50KmgrZjtpZihpLmNhbGwodGhpcyx0LGUscixuLHAsYSxvKSlyZXR1cm59fSxjZS5wcm90b3R5cGUuX2NvbnZlcnRUb1hDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy54Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueFNjYWxlKSkpfSxjZS5wcm90b3R5cGUuX2NvbnZlcnRUb1lDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy55Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueVNjYWxlKSkpfSxjZS5wcm90b3R5cGUuX2NpcmNsZXNDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1uLXQscz1pLWUsbD1yK2E7cmV0dXJuIGwqbD5vKm8rcypzfSxjZS5wcm90b3R5cGUuX2NpcmNsZUFuZFJlY3RDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPShhLW4pLzIsbD1NYXRoLmFicyh0LShuK3MpKTtpZihsPnMrcilyZXR1cm4hMTt2YXIgYz0oby1pKS8yLHU9TWF0aC5hYnMoZS0oaStjKSk7aWYodT5jK3IpcmV0dXJuITE7aWYobDw9c3x8dTw9YylyZXR1cm4hMDt2YXIgZj1sLXMsaD11LWM7cmV0dXJuIGYqZitoKmg8PXIqcn07dmFyIHVlPXQuZGVmYXVsdCQxOS5sYXlvdXQ7ZnVuY3Rpb24gZmUoZSxyLG4saSxhKXt2YXIgbz10Lm1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO3JldHVybiByPyh0Lm1hdDQuaWRlbnRpdHkobyksdC5tYXQ0LnNjYWxlKG8sbyxbMS9hLDEvYSwxXSksbnx8dC5tYXQ0LnJvdGF0ZVoobyxvLGkuYW5nbGUpKToodC5tYXQ0LnNjYWxlKG8sbyxbaS53aWR0aC8yLC1pLmhlaWdodC8yLDFdKSx0Lm1hdDQudHJhbnNsYXRlKG8sbyxbMSwtMSwwXSksdC5tYXQ0Lm11bHRpcGx5KG8sbyxlKSksb31mdW5jdGlvbiBoZShlLHIsbixpLGEpe3ZhciBvPXQubWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSk7cmV0dXJuIHI/KHQubWF0NC5tdWx0aXBseShvLG8sZSksdC5tYXQ0LnNjYWxlKG8sbyxbYSxhLDFdKSxufHx0Lm1hdDQucm90YXRlWihvLG8sLWkuYW5nbGUpKToodC5tYXQ0LnNjYWxlKG8sbyxbMSwtMSwxXSksdC5tYXQ0LnRyYW5zbGF0ZShvLG8sWy0xLC0xLDBdKSx0Lm1hdDQuc2NhbGUobyxvLFsyL2kud2lkdGgsMi9pLmhlaWdodCwxXSkpLG99ZnVuY3Rpb24gcGUoZSxyKXt2YXIgbj1bZS54LGUueSwwLDFdO2tlKG4sbixyKTt2YXIgaT1uWzNdO3JldHVybntwb2ludDpuZXcgdC5kZWZhdWx0JDEoblswXS9pLG5bMV0vaSksc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhOml9fWZ1bmN0aW9uIGRlKHQsZSl7dmFyIHI9dFswXS90WzNdLG49dFsxXS90WzNdO3JldHVybiByPj0tZVswXSYmcjw9ZVswXSYmbj49LWVbMV0mJm48PWVbMV19ZnVuY3Rpb24gZ2UoZSxyLG4saSxhLG8scyxsKXt2YXIgYz1pP2UudGV4dFNpemVEYXRhOmUuaWNvblNpemVEYXRhLHU9dC5ldmFsdWF0ZVNpemVGb3Jab29tKGMsbi50cmFuc2Zvcm0uem9vbSx1ZS5wcm9wZXJ0aWVzW2k/InRleHQtc2l6ZSI6Imljb24tc2l6ZSJdKSxmPVsyNTYvbi53aWR0aCoyKzEsMjU2L24uaGVpZ2h0KjIrMV0saD1pP2UudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk6ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtoLmNsZWFyKCk7Zm9yKHZhciBwPWUubGluZVZlcnRleEFycmF5LGQ9aT9lLnRleHQucGxhY2VkU3ltYm9sQXJyYXk6ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LGc9bi50cmFuc2Zvcm0ud2lkdGgvbi50cmFuc2Zvcm0uaGVpZ2h0LHY9ITEsbT0wO208ZC5sZW5ndGg7bSsrKXt2YXIgeT1kLmdldChtKTtpZih5LmhpZGRlbnx8eS53cml0aW5nTW9kZT09PXQuV3JpdGluZ01vZGUudmVydGljYWwmJiF2KXdlKHkubnVtR2x5cGhzLGgpO2Vsc2V7dj0hMTt2YXIgeD1beS5hbmNob3JYLHkuYW5jaG9yWSwwLDFdO2lmKHQudmVjNC50cmFuc2Zvcm1NYXQ0KHgseCxyKSxkZSh4LGYpKXt2YXIgYj0uNSt4WzNdL24udHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UqLjUsXz10LmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoYyx1LHkpLHc9cz9fKmI6Xy9iLGs9bmV3IHQuZGVmYXVsdCQxKHkuYW5jaG9yWCx5LmFuY2hvclkpLFQ9cGUoayxhKS5wb2ludCxBPXt9LE09eWUoeSx3LCExLGwscixhLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsaCxULGssQSxnKTt2PU0udXNlVmVydGljYWwsKE0ubm90RW5vdWdoUm9vbXx8dnx8TS5uZWVkc0ZsaXBwaW5nJiZ5ZSh5LHcsITAsbCxyLGEsbyxlLmdseXBoT2Zmc2V0QXJyYXkscCxoLFQsayxBLGcpLm5vdEVub3VnaFJvb20pJiZ3ZSh5Lm51bUdseXBocyxoKX1lbHNlIHdlKHkubnVtR2x5cGhzLGgpfX1pP2UudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoaCk6ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShoKX1mdW5jdGlvbiB2ZSh0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dmFyIGg9cy5nbHlwaFN0YXJ0SW5kZXgrcy5udW1HbHlwaHMscD1zLmxpbmVTdGFydEluZGV4LGQ9cy5saW5lU3RhcnRJbmRleCtzLmxpbmVMZW5ndGgsZz1lLmdldG9mZnNldFgocy5nbHlwaFN0YXJ0SW5kZXgpLHY9ZS5nZXRvZmZzZXRYKGgtMSksbT1iZSh0KmcscixuLGksYSxvLHMuc2VnbWVudCxwLGQsbCxjLHUsZik7aWYoIW0pcmV0dXJuIG51bGw7dmFyIHk9YmUodCp2LHIsbixpLGEsbyxzLnNlZ21lbnQscCxkLGwsYyx1LGYpO3JldHVybiB5P3tmaXJzdDptLGxhc3Q6eX06bnVsbH1mdW5jdGlvbiBtZShlLHIsbixpKXtyZXR1cm4gZT09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbCYmTWF0aC5hYnMobi55LXIueSk+TWF0aC5hYnMobi54LXIueCkqaT97dXNlVmVydGljYWw6ITB9OihlPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9yLnk8bi55OnIueD5uLngpP3tuZWVkc0ZsaXBwaW5nOiEwfTpudWxsfWZ1bmN0aW9uIHllKGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCl7dmFyIGcsdj1yLzI0LG09ZS5saW5lT2Zmc2V0WCpyLHk9ZS5saW5lT2Zmc2V0WSpyO2lmKGUubnVtR2x5cGhzPjEpe3ZhciB4PWUuZ2x5cGhTdGFydEluZGV4K2UubnVtR2x5cGhzLGI9ZS5saW5lU3RhcnRJbmRleCxfPWUubGluZVN0YXJ0SW5kZXgrZS5saW5lTGVuZ3RoLHc9dmUodixsLG0seSxuLGYsaCxlLGMsbyxwLCExKTtpZighdylyZXR1cm57bm90RW5vdWdoUm9vbTohMH07dmFyIGs9cGUody5maXJzdC5wb2ludCxzKS5wb2ludCxUPXBlKHcubGFzdC5wb2ludCxzKS5wb2ludDtpZihpJiYhbil7dmFyIEE9bWUoZS53cml0aW5nTW9kZSxrLFQsZCk7aWYoQSlyZXR1cm4gQX1nPVt3LmZpcnN0XTtmb3IodmFyIE09ZS5nbHlwaFN0YXJ0SW5kZXgrMTtNPHgtMTtNKyspZy5wdXNoKGJlKHYqbC5nZXRvZmZzZXRYKE0pLG0seSxuLGYsaCxlLnNlZ21lbnQsYixfLGMsbyxwLCExKSk7Zy5wdXNoKHcubGFzdCl9ZWxzZXtpZihpJiYhbil7dmFyIFM9cGUoaCxhKS5wb2ludCxFPWUubGluZVN0YXJ0SW5kZXgrZS5zZWdtZW50KzEsQz1uZXcgdC5kZWZhdWx0JDEoYy5nZXR4KEUpLGMuZ2V0eShFKSksTD1wZShDLGEpLHo9TC5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE+MD9MLnBvaW50OnhlKGgsQyxTLDEsYSksTz1tZShlLndyaXRpbmdNb2RlLFMseixkKTtpZihPKXJldHVybiBPfXZhciBJPWJlKHYqbC5nZXRvZmZzZXRYKGUuZ2x5cGhTdGFydEluZGV4KSxtLHksbixmLGgsZS5zZWdtZW50LGUubGluZVN0YXJ0SW5kZXgsZS5saW5lU3RhcnRJbmRleCtlLmxpbmVMZW5ndGgsYyxvLHAsITEpO2lmKCFJKXJldHVybntub3RFbm91Z2hSb29tOiEwfTtnPVtJXX1mb3IodmFyIEQ9MCxQPWc7RDxQLmxlbmd0aDtEKz0xKXt2YXIgUj1QW0RdO3QuYWRkRHluYW1pY0F0dHJpYnV0ZXModSxSLnBvaW50LFIuYW5nbGUpfXJldHVybnt9fWZ1bmN0aW9uIHhlKHQsZSxyLG4saSl7dmFyIGE9cGUodC5hZGQodC5zdWIoZSkuX3VuaXQoKSksaSkucG9pbnQsbz1yLnN1YihhKTtyZXR1cm4gci5hZGQoby5fbXVsdChuL28ubWFnKCkpKX1mdW5jdGlvbiBiZShlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwKXt2YXIgZD1pP2UtcjplK3IsZz1kPjA/MTotMSx2PTA7aSYmKGcqPS0xLHY9TWF0aC5QSSksZzwwJiYodis9TWF0aC5QSSk7Zm9yKHZhciBtPWc+MD9sK3M6bCtzKzEseT1tLHg9YSxiPWEsXz0wLHc9MCxrPU1hdGguYWJzKGQpO18rdzw9azspe2lmKChtKz1nKTxsfHxtPj1jKXJldHVybiBudWxsO2lmKGI9eCx2b2lkIDA9PT0oeD1oW21dKSl7dmFyIFQ9bmV3IHQuZGVmYXVsdCQxKHUuZ2V0eChtKSx1LmdldHkobSkpLEE9cGUoVCxmKTtpZihBLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYT4wKXg9aFttXT1BLnBvaW50O2Vsc2V7dmFyIE09bS1nO3g9eGUoMD09PV8/bzpuZXcgdC5kZWZhdWx0JDEodS5nZXR4KE0pLHUuZ2V0eShNKSksVCxiLGstXysxLGYpfX1fKz13LHc9Yi5kaXN0KHgpfXZhciBTPShrLV8pL3csRT14LnN1YihiKSxDPUUubXVsdChTKS5fYWRkKGIpO3JldHVybiBDLl9hZGQoRS5fdW5pdCgpLl9wZXJwKCkuX211bHQobipnKSkse3BvaW50OkMsYW5nbGU6ditNYXRoLmF0YW4yKHgueS1iLnkseC54LWIueCksdGlsZURpc3RhbmNlOnA/e3ByZXZUaWxlRGlzdGFuY2U6bS1nPT09eT8wOnUuZ2V0dGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IobS1nKSxsYXN0U2VnbWVudFZpZXdwb3J0RGlzdGFuY2U6ay1ffTpudWxsfX12YXIgX2U9bmV3IEZsb2F0MzJBcnJheShbLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDBdKTtmdW5jdGlvbiB3ZSh0LGUpe2Zvcih2YXIgcj0wO3I8dDtyKyspe3ZhciBuPWUubGVuZ3RoO2UucmVzaXplKG4rNCksZS5mbG9hdDMyLnNldChfZSwzKm4pfX1mdW5jdGlvbiBrZSh0LGUscil7dmFyIG49ZVswXSxpPWVbMV07cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzEyXSx0WzFdPXJbMV0qbityWzVdKmkrclsxM10sdFszXT1yWzNdKm4rcls3XSppK3JbMTVdLHR9dC5kZWZhdWx0JDIwLm1hdDQ7dmFyIFRlPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1lJiYoZT1uZXcgY2UodC53aWR0aCsyMDAsdC5oZWlnaHQrMjAwLDI1KSksdm9pZCAwPT09ciYmKHI9bmV3IGNlKHQud2lkdGgrMjAwLHQuaGVpZ2h0KzIwMCwyNSkpLHRoaXMudHJhbnNmb3JtPXQsdGhpcy5ncmlkPWUsdGhpcy5pZ25vcmVkR3JpZD1yLHRoaXMucGl0Y2hmYWN0b3I9TWF0aC5jb3ModC5fcGl0Y2gpKnQuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnk9dC53aWR0aCsxMDAsdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeT10LmhlaWdodCsxMDB9O2Z1bmN0aW9uIEFlKHQsZSxyKXt0W2UrNF09cj8xOjB9ZnVuY3Rpb24gTWUoZSxyLG4pe3JldHVybiByKih0LmRlZmF1bHQkOC8oZS50aWxlU2l6ZSpNYXRoLnBvdygyLG4tZS50aWxlSUQub3ZlcnNjYWxlZFopKSl9VGUucHJvdG90eXBlLnBsYWNlQ29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8obix0LmFuY2hvclBvaW50WCx0LmFuY2hvclBvaW50WSksYT1yKmkucGVyc3BlY3RpdmVSYXRpbyxvPXQueDEqYStpLnBvaW50Lngscz10LnkxKmEraS5wb2ludC55LGw9dC54MiphK2kucG9pbnQueCxjPXQueTIqYStpLnBvaW50Lnk7cmV0dXJuIWUmJnRoaXMuZ3JpZC5oaXRUZXN0KG8scyxsLGMpP3tib3g6W10sb2Zmc2NyZWVuOiExfTp7Ym94OltvLHMsbCxjXSxvZmZzY3JlZW46dGhpcy5pc09mZnNjcmVlbihvLHMsbCxjKX19LFRlLnByb3RvdHlwZS5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWk/MTpuL3RoaXMucGl0Y2hmYWN0b3Isbz10Lmxhc3RTZWdtZW50Vmlld3BvcnREaXN0YW5jZSpyO3JldHVybiB0LnByZXZUaWxlRGlzdGFuY2UrbysoYS0xKSpvKk1hdGguYWJzKE1hdGguc2luKGUpKX0sVGUucHJvdG90eXBlLnBsYWNlQ29sbGlzaW9uQ2lyY2xlcz1mdW5jdGlvbihlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwKXt2YXIgZD1bXSxnPXRoaXMucHJvamVjdEFuY2hvcih1LG8uYW5jaG9yWCxvLmFuY2hvclkpLHY9Yy8yNCxtPW8ubGluZU9mZnNldFgqYyx5PW8ubGluZU9mZnNldFkqYyx4PW5ldyB0LmRlZmF1bHQkMShvLmFuY2hvclgsby5hbmNob3JZKSxiPXZlKHYsbCxtLHksITEscGUoeCxmKS5wb2ludCx4LG8scyxmLHt9LCEwKSxfPSExLHc9ITAsaz1nLnBlcnNwZWN0aXZlUmF0aW8qaSxUPTEvKGkqbiksQT0wLE09MDtiJiYoQT10aGlzLmFwcHJveGltYXRlVGlsZURpc3RhbmNlKGIuZmlyc3QudGlsZURpc3RhbmNlLGIuZmlyc3QuYW5nbGUsVCxnLmNhbWVyYURpc3RhbmNlLHApLE09dGhpcy5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZShiLmxhc3QudGlsZURpc3RhbmNlLGIubGFzdC5hbmdsZSxULGcuY2FtZXJhRGlzdGFuY2UscCkpO2Zvcih2YXIgUz0wO1M8ZS5sZW5ndGg7Uys9NSl7dmFyIEU9ZVtTXSxDPWVbUysxXSxMPWVbUysyXSx6PWVbUyszXTtpZighYnx8ejwtQXx8ej5NKUFlKGUsUywhMSk7ZWxzZXt2YXIgTz10aGlzLnByb2plY3RQb2ludCh1LEUsQyksST1MKms7aWYoZC5sZW5ndGg+MCl7dmFyIEQ9Ty54LWRbZC5sZW5ndGgtNF0sUD1PLnktZFtkLmxlbmd0aC0zXTtpZihJKkkqMj5EKkQrUCpQJiZTKzg8ZS5sZW5ndGgpe3ZhciBSPWVbUys4XTtpZihSPi1BJiZSPE0pe0FlKGUsUywhMSk7Y29udGludWV9fX12YXIgRj1TLzU7aWYoZC5wdXNoKE8ueCxPLnksSSxGKSxBZShlLFMsITApLHc9dyYmdGhpcy5pc09mZnNjcmVlbihPLngtSSxPLnktSSxPLngrSSxPLnkrSSksIXImJnRoaXMuZ3JpZC5oaXRUZXN0Q2lyY2xlKE8ueCxPLnksSSkpe2lmKCFoKXJldHVybntjaXJjbGVzOltdLG9mZnNjcmVlbjohMX07Xz0hMH19fXJldHVybntjaXJjbGVzOl8/W106ZCxvZmZzY3JlZW46d319LFRlLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkU3ltYm9scz1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmdyaWQua2V5c0xlbmd0aCgpJiYwPT09dGhpcy5pZ25vcmVkR3JpZC5rZXlzTGVuZ3RoKCkpcmV0dXJue307Zm9yKHZhciByPVtdLG49MS8wLGk9MS8wLGE9LTEvMCxvPS0xLzAscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT1uZXcgdC5kZWZhdWx0JDEoYy54KzEwMCxjLnkrMTAwKTtuPU1hdGgubWluKG4sdS54KSxpPU1hdGgubWluKGksdS55KSxhPU1hdGgubWF4KGEsdS54KSxvPU1hdGgubWF4KG8sdS55KSxyLnB1c2godSl9Zm9yKHZhciBmPXt9LGg9e30scD0wLGQ9dGhpcy5ncmlkLnF1ZXJ5KG4saSxhLG8pLmNvbmNhdCh0aGlzLmlnbm9yZWRHcmlkLnF1ZXJ5KG4saSxhLG8pKTtwPGQubGVuZ3RoO3ArPTEpe3ZhciBnPWRbcF0sdj1nLmtleTtpZih2b2lkIDA9PT1mW3YuYnVja2V0SW5zdGFuY2VJZF0mJihmW3YuYnVja2V0SW5zdGFuY2VJZF09e30pLCFmW3YuYnVja2V0SW5zdGFuY2VJZF1bdi5mZWF0dXJlSW5kZXhdKXt2YXIgbT1bbmV3IHQuZGVmYXVsdCQxKGcueDEsZy55MSksbmV3IHQuZGVmYXVsdCQxKGcueDIsZy55MSksbmV3IHQuZGVmYXVsdCQxKGcueDIsZy55MiksbmV3IHQuZGVmYXVsdCQxKGcueDEsZy55MildO3QucG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHIsbSkmJihmW3YuYnVja2V0SW5zdGFuY2VJZF1bdi5mZWF0dXJlSW5kZXhdPSEwLHZvaWQgMD09PWhbdi5idWNrZXRJbnN0YW5jZUlkXSYmKGhbdi5idWNrZXRJbnN0YW5jZUlkXT1bXSksaFt2LmJ1Y2tldEluc3RhbmNlSWRdLnB1c2godi5mZWF0dXJlSW5kZXgpKX19cmV0dXJuIGh9LFRlLnByb3RvdHlwZS5pbnNlcnRDb2xsaXNpb25Cb3g9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9e2J1Y2tldEluc3RhbmNlSWQ6cixmZWF0dXJlSW5kZXg6bn07KGU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQpLmluc2VydChpLHRbMF0sdFsxXSx0WzJdLHRbM10pfSxUZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9ZT90aGlzLmlnbm9yZWRHcmlkOnRoaXMuZ3JpZCxhPXtidWNrZXRJbnN0YW5jZUlkOnIsZmVhdHVyZUluZGV4Om59LG89MDtvPHQubGVuZ3RoO28rPTQpaS5pbnNlcnRDaXJjbGUoYSx0W29dLHRbbysxXSx0W28rMl0pfSxUZS5wcm90b3R5cGUucHJvamVjdEFuY2hvcj1mdW5jdGlvbih0LGUscil7dmFyIG49W2UsciwwLDFdO3JldHVybiBrZShuLG4sdCkse3BlcnNwZWN0aXZlUmF0aW86LjUrdGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9uWzNdKi41LGNhbWVyYURpc3RhbmNlOm5bM119fSxUZS5wcm90b3R5cGUucHJvamVjdFBvaW50PWZ1bmN0aW9uKGUscixuKXt2YXIgaT1bcixuLDAsMV07cmV0dXJuIGtlKGksaSxlKSxuZXcgdC5kZWZhdWx0JDEoKGlbMF0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLndpZHRoKzEwMCwoLWlbMV0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLmhlaWdodCsxMDApfSxUZS5wcm90b3R5cGUucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW89ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVtyLG4sMCwxXTtyZXR1cm4ga2UoaSxpLGUpLHtwb2ludDpuZXcgdC5kZWZhdWx0JDEoKGlbMF0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLndpZHRoKzEwMCwoLWlbMV0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLmhlaWdodCsxMDApLHBlcnNwZWN0aXZlUmF0aW86LjUrdGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9pWzNdKi41fX0sVGUucHJvdG90eXBlLmlzT2Zmc2NyZWVuPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiByPDEwMHx8dD49dGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5fHxuPDEwMHx8ZT50aGlzLnNjcmVlbkJvdHRvbUJvdW5kYXJ5fTt2YXIgU2U9dC5kZWZhdWx0JDE5LmxheW91dCxFZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLm9wYWNpdHk9dD9NYXRoLm1heCgwLE1hdGgubWluKDEsdC5vcGFjaXR5Kyh0LnBsYWNlZD9lOi1lKSkpOm4mJnI/MTowLHRoaXMucGxhY2VkPXJ9O0VlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5vcGFjaXR5JiYhdGhpcy5wbGFjZWR9O3ZhciBDZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMudGV4dD1uZXcgRWUodD90LnRleHQ6bnVsbCxlLHIsaSksdGhpcy5pY29uPW5ldyBFZSh0P3QuaWNvbjpudWxsLGUsbixpKX07Q2UucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dC5pc0hpZGRlbigpJiZ0aGlzLmljb24uaXNIaWRkZW4oKX07dmFyIExlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCx0aGlzLmljb249ZSx0aGlzLnNraXBGYWRlPXJ9LHplPWZ1bmN0aW9uKHQsZSl7dGhpcy50cmFuc2Zvcm09dC5jbG9uZSgpLHRoaXMuY29sbGlzaW9uSW5kZXg9bmV3IFRlKHRoaXMudHJhbnNmb3JtKSx0aGlzLnBsYWNlbWVudHM9e30sdGhpcy5vcGFjaXRpZXM9e30sdGhpcy5zdGFsZT0hMSx0aGlzLmZhZGVEdXJhdGlvbj1lLHRoaXMucmV0YWluZWRRdWVyeURhdGE9e319O2Z1bmN0aW9uIE9lKHQsZSxyKXt0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowKX16ZS5wcm90b3R5cGUucGxhY2VMYXllclRpbGU9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9ci5nZXRCdWNrZXQoZSksbz1yLmxhdGVzdEZlYXR1cmVJbmRleDtpZihhJiZvJiZlLmlkPT09YS5sYXllcklkc1swXSl7dmFyIHM9ci5jb2xsaXNpb25Cb3hBcnJheSxsPWEubGF5ZXJzWzBdLmxheW91dCxjPU1hdGgucG93KDIsdGhpcy50cmFuc2Zvcm0uem9vbS1yLnRpbGVJRC5vdmVyc2NhbGVkWiksdT1yLnRpbGVTaXplL3QuZGVmYXVsdCQ4LGY9dGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHIudGlsZUlELnRvVW53cmFwcGVkKCkpLGg9ZmUoZiwibWFwIj09PWwuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLCJtYXAiPT09bC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IiksdGhpcy50cmFuc2Zvcm0sTWUociwxLHRoaXMudHJhbnNmb3JtLnpvb20pKSxwPWZlKGYsIm1hcCI9PT1sLmdldCgiaWNvbi1waXRjaC1hbGlnbm1lbnQiKSwibWFwIj09PWwuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpLHRoaXMudHJhbnNmb3JtLE1lKHIsMSx0aGlzLnRyYW5zZm9ybS56b29tKSk7dGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVthLmJ1Y2tldEluc3RhbmNlSWRdPW5ldyBmdW5jdGlvbih0LGUscixuLGkpe3RoaXMuYnVja2V0SW5zdGFuY2VJZD10LHRoaXMuZmVhdHVyZUluZGV4PWUsdGhpcy5zb3VyY2VMYXllckluZGV4PXIsdGhpcy5idWNrZXRJbmRleD1uLHRoaXMudGlsZUlEPWl9KGEuYnVja2V0SW5zdGFuY2VJZCxvLGEuc291cmNlTGF5ZXJJbmRleCxhLmluZGV4LHIudGlsZUlEKSx0aGlzLnBsYWNlTGF5ZXJCdWNrZXQoYSxmLGgscCxjLHUsbixpLHMpfX0semUucHJvdG90eXBlLnBsYWNlTGF5ZXJCdWNrZXQ9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMpe2Zvcih2YXIgdT1lLmxheWVyc1swXS5sYXlvdXQsZj10LmV2YWx1YXRlU2l6ZUZvclpvb20oZS50ZXh0U2l6ZURhdGEsdGhpcy50cmFuc2Zvcm0uem9vbSxTZS5wcm9wZXJ0aWVzWyJ0ZXh0LXNpemUiXSksaD0hZS5oYXNUZXh0RGF0YSgpfHx1LmdldCgidGV4dC1vcHRpb25hbCIpLHA9IWUuaGFzSWNvbkRhdGEoKXx8dS5nZXQoImljb24tb3B0aW9uYWwiKSxkPTAsZz1lLnN5bWJvbEluc3RhbmNlcztkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF07aWYoIWxbdi5jcm9zc1RpbGVJRF0pe3ZhciBtPXZvaWQgMCE9PXYuZmVhdHVyZS50ZXh0LHk9dm9pZCAwIT09di5mZWF0dXJlLmljb24seD0hMCxiPW51bGwsXz1udWxsLHc9bnVsbCxrPTAsVD0wO3YuY29sbGlzaW9uQXJyYXlzfHwodi5jb2xsaXNpb25BcnJheXM9ZS5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKGMsdi50ZXh0Qm94U3RhcnRJbmRleCx2LnRleHRCb3hFbmRJbmRleCx2Lmljb25Cb3hTdGFydEluZGV4LHYuaWNvbkJveEVuZEluZGV4KSksdi5jb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCYmKGs9di5jb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCksdi5jb2xsaXNpb25BcnJheXMudGV4dEJveCYmKG09KGI9dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveCh2LmNvbGxpc2lvbkFycmF5cy50ZXh0Qm94LHUuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKSxvLHIpKS5ib3gubGVuZ3RoPjAseD14JiZiLm9mZnNjcmVlbik7dmFyIEE9di5jb2xsaXNpb25BcnJheXMudGV4dENpcmNsZXM7aWYoQSl7dmFyIE09ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldCh2LnBsYWNlZFRleHRTeW1ib2xJbmRpY2VzWzBdKSxTPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShlLnRleHRTaXplRGF0YSxmLE0pO189dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkNpcmNsZXMoQSx1LmdldCgidGV4dC1hbGxvdy1vdmVybGFwIiksYSxvLHYua2V5LE0sZS5saW5lVmVydGV4QXJyYXksZS5nbHlwaE9mZnNldEFycmF5LFMscixuLHMsIm1hcCI9PT11LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSksbT11LmdldCgidGV4dC1hbGxvdy1vdmVybGFwIil8fF8uY2lyY2xlcy5sZW5ndGg+MCx4PXgmJl8ub2Zmc2NyZWVufXYuY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXgmJihUPXYuY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXgpLHYuY29sbGlzaW9uQXJyYXlzLmljb25Cb3gmJih5PSh3PXRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3godi5jb2xsaXNpb25BcnJheXMuaWNvbkJveCx1LmdldCgiaWNvbi1hbGxvdy1vdmVybGFwIiksbyxyKSkuYm94Lmxlbmd0aD4wLHg9eCYmdy5vZmZzY3JlZW4pLGh8fHA/cD9ofHwoeT15JiZtKTptPXkmJm06eT1tPXkmJm0sbSYmYiYmdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3goYi5ib3gsdS5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLGUuYnVja2V0SW5zdGFuY2VJZCxrKSx5JiZ3JiZ0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveCh3LmJveCx1LmdldCgiaWNvbi1pZ25vcmUtcGxhY2VtZW50IiksZS5idWNrZXRJbnN0YW5jZUlkLFQpLG0mJl8mJnRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhfLmNpcmNsZXMsdS5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLGUuYnVja2V0SW5zdGFuY2VJZCxrKSx0aGlzLnBsYWNlbWVudHNbdi5jcm9zc1RpbGVJRF09bmV3IExlKG0seSx4fHxlLmp1c3RSZWxvYWRlZCksbFt2LmNyb3NzVGlsZUlEXT0hMH19ZS5qdXN0UmVsb2FkZWQ9ITF9LHplLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbW1pdFRpbWU9ZTt2YXIgcj0hMSxuPXQmJjAhPT10aGlzLmZhZGVEdXJhdGlvbj8odGhpcy5jb21taXRUaW1lLXQuY29tbWl0VGltZSkvdGhpcy5mYWRlRHVyYXRpb246MSxpPXQ/dC5vcGFjaXRpZXM6e307Zm9yKHZhciBhIGluIHRoaXMucGxhY2VtZW50cyl7dmFyIG89dGhpcy5wbGFjZW1lbnRzW2FdLHM9aVthXTtzPyh0aGlzLm9wYWNpdGllc1thXT1uZXcgQ2UocyxuLG8udGV4dCxvLmljb24pLHI9cnx8by50ZXh0IT09cy50ZXh0LnBsYWNlZHx8by5pY29uIT09cy5pY29uLnBsYWNlZCk6KHRoaXMub3BhY2l0aWVzW2FdPW5ldyBDZShudWxsLG4sby50ZXh0LG8uaWNvbixvLnNraXBGYWRlKSxyPXJ8fG8udGV4dHx8by5pY29uKX1mb3IodmFyIGwgaW4gaSl7dmFyIGM9aVtsXTtpZighdGhpcy5vcGFjaXRpZXNbbF0pe3ZhciB1PW5ldyBDZShjLG4sITEsITEpO3UuaXNIaWRkZW4oKXx8KHRoaXMub3BhY2l0aWVzW2xdPXUscj1yfHxjLnRleHQucGxhY2VkfHxjLmljb24ucGxhY2VkKX19cj90aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPWU6Im51bWJlciIhPXR5cGVvZiB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lJiYodGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZT10P3QubGFzdFBsYWNlbWVudENoYW5nZVRpbWU6ZSl9LHplLnByb3RvdHlwZS51cGRhdGVMYXllck9wYWNpdGllcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEuZ2V0QnVja2V0KHQpO28mJmEubGF0ZXN0RmVhdHVyZUluZGV4JiZ0LmlkPT09by5sYXllcklkc1swXSYmdGhpcy51cGRhdGVCdWNrZXRPcGFjaXRpZXMobyxyLGEuY29sbGlzaW9uQm94QXJyYXkpfX0semUucHJvdG90eXBlLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcz1mdW5jdGlvbih0LGUscil7dC5oYXNUZXh0RGF0YSgpJiZ0LnRleHQub3BhY2l0eVZlcnRleEFycmF5LmNsZWFyKCksdC5oYXNJY29uRGF0YSgpJiZ0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5LmNsZWFyKCksdC5oYXNDb2xsaXNpb25Cb3hEYXRhKCkmJnQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCksdC5oYXNDb2xsaXNpb25DaXJjbGVEYXRhKCkmJnQuY29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCk7Zm9yKHZhciBuPXQubGF5ZXJzWzBdLmxheW91dCxpPW5ldyBDZShudWxsLDAsITEsITEsITApLGE9bmV3IENlKG51bGwsMCxuLmdldCgidGV4dC1hbGxvdy1vdmVybGFwIiksbi5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpLCEwKSxvPTA7bzx0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7bysrKXt2YXIgcz10LnN5bWJvbEluc3RhbmNlc1tvXSxsPWVbcy5jcm9zc1RpbGVJRF0sYz10aGlzLm9wYWNpdGllc1tzLmNyb3NzVGlsZUlEXTtsP2M9aTpjfHwoYz1hLHRoaXMub3BhY2l0aWVzW3MuY3Jvc3NUaWxlSURdPWMpLGVbcy5jcm9zc1RpbGVJRF09ITA7dmFyIHU9cy5udW1HbHlwaFZlcnRpY2VzPjB8fHMubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzPjAsZj1zLm51bUljb25WZXJ0aWNlcz4wO2lmKHUpe2Zvcih2YXIgaD1qZShjLnRleHQpLHA9KHMubnVtR2x5cGhWZXJ0aWNlcytzLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcykvNCxkPTA7ZDxwO2QrKyl0LnRleHQub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGgpO2Zvcih2YXIgZz0wLHY9cy5wbGFjZWRUZXh0U3ltYm9sSW5kaWNlcztnPHYubGVuZ3RoO2crPTEpe3ZhciBtPXZbZ107dC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChtKS5oaWRkZW49Yy50ZXh0LmlzSGlkZGVuKCl9fWlmKGYpe2Zvcih2YXIgeT1qZShjLmljb24pLHg9MDt4PHMubnVtSWNvblZlcnRpY2VzLzQ7eCsrKXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soeSk7dC5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChvKS5oaWRkZW49Yy5pY29uLmlzSGlkZGVuKCl9cy5jb2xsaXNpb25BcnJheXN8fChzLmNvbGxpc2lvbkFycmF5cz10LmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMocixzLnRleHRCb3hTdGFydEluZGV4LHMudGV4dEJveEVuZEluZGV4LHMuaWNvbkJveFN0YXJ0SW5kZXgscy5pY29uQm94RW5kSW5kZXgpKTt2YXIgYj1zLmNvbGxpc2lvbkFycmF5cztpZihiKXtiLnRleHRCb3gmJnQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZPZSh0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLnRleHQucGxhY2VkLCExKSxiLmljb25Cb3gmJnQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZPZSh0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLmljb24ucGxhY2VkLCExKTt2YXIgXz1iLnRleHRDaXJjbGVzO2lmKF8mJnQuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpKWZvcih2YXIgdz0wO3c8Xy5sZW5ndGg7dys9NSl7dmFyIGs9bHx8MD09PV9bdys0XTtPZSh0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLnRleHQucGxhY2VkLGspfX19dC5zb3J0RmVhdHVyZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpLHRoaXMucmV0YWluZWRRdWVyeURhdGFbdC5idWNrZXRJbnN0YW5jZUlkXSYmKHRoaXMucmV0YWluZWRRdWVyeURhdGFbdC5idWNrZXRJbnN0YW5jZUlkXS5mZWF0dXJlU29ydE9yZGVyPXQuZmVhdHVyZVNvcnRPcmRlciksdC5oYXNUZXh0RGF0YSgpJiZ0LnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlciYmdC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0LnRleHQub3BhY2l0eVZlcnRleEFycmF5KSx0Lmhhc0ljb25EYXRhKCkmJnQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyJiZ0Lmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkpLHQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZ0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJnQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KSx0Lmhhc0NvbGxpc2lvbkNpcmNsZURhdGEoKSYmdC5jb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyJiZ0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSl9LHplLnByb3RvdHlwZS5zeW1ib2xGYWRlQ2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MToodC10aGlzLmNvbW1pdFRpbWUpL3RoaXMuZmFkZUR1cmF0aW9ufSx6ZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhbGV8fHQtdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTx0aGlzLmZhZGVEdXJhdGlvbn0semUucHJvdG90eXBlLnN0aWxsUmVjZW50PWZ1bmN0aW9uKHQpe3JldHVybiJ1bmRlZmluZWQiIT09dGhpcy5jb21taXRUaW1lJiZ0aGlzLmNvbW1pdFRpbWUrdGhpcy5mYWRlRHVyYXRpb24+dH0semUucHJvdG90eXBlLnNldFN0YWxlPWZ1bmN0aW9uKCl7dGhpcy5zdGFsZT0hMH07dmFyIEllPU1hdGgucG93KDIsMjUpLERlPU1hdGgucG93KDIsMjQpLFBlPU1hdGgucG93KDIsMTcpLFJlPU1hdGgucG93KDIsMTYpLEZlPU1hdGgucG93KDIsOSksQmU9TWF0aC5wb3coMiw4KSxOZT1NYXRoLnBvdygyLDEpO2Z1bmN0aW9uIGplKHQpe2lmKDA9PT10Lm9wYWNpdHkmJiF0LnBsYWNlZClyZXR1cm4gMDtpZigxPT09dC5vcGFjaXR5JiZ0LnBsYWNlZClyZXR1cm4gNDI5NDk2NzI5NTt2YXIgZT10LnBsYWNlZD8xOjAscj1NYXRoLmZsb29yKDEyNyp0Lm9wYWNpdHkpO3JldHVybiByKkllK2UqRGUrcipQZStlKlJlK3IqRmUrZSpCZStyKk5lK2V9dmFyIFZlPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudFRpbGVJbmRleD0wLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHM9e319O1ZlLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcig7dGhpcy5fY3VycmVudFRpbGVJbmRleDx0Lmxlbmd0aDspe3ZhciBhPXRbdGhpcy5fY3VycmVudFRpbGVJbmRleF07aWYoZS5wbGFjZUxheWVyVGlsZShuLGEscix0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzKSx0aGlzLl9jdXJyZW50VGlsZUluZGV4KyssaSgpKXJldHVybiEwfX07dmFyIFVlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5wbGFjZW1lbnQ9bmV3IHplKHQsaSksdGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4PWUubGVuZ3RoLTEsdGhpcy5fZm9yY2VGdWxsUGxhY2VtZW50PXIsdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzPW4sdGhpcy5fZG9uZT0hMX07VWUucHJvdG90eXBlLmlzRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb25lfSxVZS5wcm90b3R5cGUuY29udGludWVQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10aGlzLGk9YS5ub3coKSxvPWZ1bmN0aW9uKCl7dmFyIHQ9YS5ub3coKS1pO3JldHVybiFuLl9mb3JjZUZ1bGxQbGFjZW1lbnQmJnQ+Mn07dGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4Pj0wOyl7dmFyIHM9ZVt0W24uX2N1cnJlbnRQbGFjZW1lbnRJbmRleF1dLGw9bi5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgudHJhbnNmb3JtLnpvb207aWYoInN5bWJvbCI9PT1zLnR5cGUmJighcy5taW56b29tfHxzLm1pbnpvb208PWwpJiYoIXMubWF4em9vbXx8cy5tYXh6b29tPmwpKXtpZihuLl9pblByb2dyZXNzTGF5ZXJ8fChuLl9pblByb2dyZXNzTGF5ZXI9bmV3IFZlKSxuLl9pblByb2dyZXNzTGF5ZXIuY29udGludWVQbGFjZW1lbnQocltzLnNvdXJjZV0sbi5wbGFjZW1lbnQsbi5fc2hvd0NvbGxpc2lvbkJveGVzLHMsbykpcmV0dXJuO2RlbGV0ZSBuLl9pblByb2dyZXNzTGF5ZXJ9bi5fY3VycmVudFBsYWNlbWVudEluZGV4LS19dGhpcy5fZG9uZT0hMH0sVWUucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnBsYWNlbWVudC5jb21taXQodCxlKSx0aGlzLnBsYWNlbWVudH07dmFyIHFlPTUxMi90LmRlZmF1bHQkOC8yLEhlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlcz17fSx0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9cjtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5rZXk7dGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dfHwodGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dPVtdKSx0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbb10ucHVzaCh7Y3Jvc3NUaWxlSUQ6YS5jcm9zc1RpbGVJRCxjb29yZDp0aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKGEsdCl9KX19O0hlLnByb3RvdHlwZS5nZXRTY2FsZWRDb29yZGluYXRlcz1mdW5jdGlvbihlLHIpe3ZhciBuPXIuY2Fub25pY2FsLnotdGhpcy50aWxlSUQuY2Fub25pY2FsLnosaT1xZS9NYXRoLnBvdygyLG4pLGE9ZS5hbmNob3I7cmV0dXJue3g6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueCp0LmRlZmF1bHQkOCthLngpKmkpLHk6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueSp0LmRlZmF1bHQkOCthLnkpKmkpfX0sSGUucHJvdG90eXBlLmZpbmRNYXRjaGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy50aWxlSUQuY2Fub25pY2FsLno8ZS5jYW5vbmljYWwuej8xOk1hdGgucG93KDIsdGhpcy50aWxlSUQuY2Fub25pY2FsLnotZS5jYW5vbmljYWwueiksaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07aWYoIW8uY3Jvc3NUaWxlSUQpe3ZhciBzPXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tvLmtleV07aWYocylmb3IodmFyIGw9dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhvLGUpLGM9MCx1PXM7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdO2lmKE1hdGguYWJzKGYuY29vcmQueC1sLngpPD1uJiZNYXRoLmFicyhmLmNvb3JkLnktbC55KTw9biYmIXJbZi5jcm9zc1RpbGVJRF0pe3JbZi5jcm9zc1RpbGVJRF09ITAsby5jcm9zc1RpbGVJRD1mLmNyb3NzVGlsZUlEO2JyZWFrfX19fX07dmFyIEdlPWZ1bmN0aW9uKCl7dGhpcy5tYXhDcm9zc1RpbGVJRD0wfTtHZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMubWF4Q3Jvc3NUaWxlSUR9O3ZhciBZZT1mdW5jdGlvbigpe3RoaXMuaW5kZXhlcz17fSx0aGlzLnVzZWRDcm9zc1RpbGVJRHM9e30sdGhpcy5sbmc9MH07WWUucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQoKHQtdGhpcy5sbmcpLzM2MCk7aWYoMCE9PWUpZm9yKHZhciByIGluIHRoaXMuaW5kZXhlcyl7dmFyIG49dGhpcy5pbmRleGVzW3JdLGk9e307Zm9yKHZhciBhIGluIG4pe3ZhciBvPW5bYV07by50aWxlSUQ9by50aWxlSUQudW53cmFwVG8oby50aWxlSUQud3JhcCtlKSxpW28udGlsZUlELmtleV09b310aGlzLmluZGV4ZXNbcl09aX10aGlzLmxuZz10fSxZZS5wcm90b3R5cGUuYWRkQnVja2V0PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJnRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pe2lmKHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0uYnVja2V0SW5zdGFuY2VJZD09PWUuYnVja2V0SW5zdGFuY2VJZClyZXR1cm4hMTt0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh0Lm92ZXJzY2FsZWRaLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pfWZvcih2YXIgbj0wLGk9ZS5zeW1ib2xJbnN0YW5jZXM7bjxpLmxlbmd0aDtuKz0xKWlbbl0uY3Jvc3NUaWxlSUQ9MDt0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl18fCh0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl09e30pO3ZhciBhPXRoaXMudXNlZENyb3NzVGlsZUlEc1t0Lm92ZXJzY2FsZWRaXTtmb3IodmFyIG8gaW4gdGhpcy5pbmRleGVzKXt2YXIgcz10aGlzLmluZGV4ZXNbb107aWYoTnVtYmVyKG8pPnQub3ZlcnNjYWxlZFopZm9yKHZhciBsIGluIHMpe3ZhciBjPXNbbF07Yy50aWxlSUQuaXNDaGlsZE9mKHQpJiZjLmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsYSl9ZWxzZXt2YXIgdT1zW3Quc2NhbGVkVG8oTnVtYmVyKG8pKS5rZXldO3UmJnUuZmluZE1hdGNoZXMoZS5zeW1ib2xJbnN0YW5jZXMsdCxhKX19Zm9yKHZhciBmPTAsaD1lLnN5bWJvbEluc3RhbmNlcztmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl07cC5jcm9zc1RpbGVJRHx8KHAuY3Jvc3NUaWxlSUQ9ci5nZW5lcmF0ZSgpLGFbcC5jcm9zc1RpbGVJRF09ITApfXJldHVybiB2b2lkIDA9PT10aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl09e30pLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV09bmV3IEhlKHQsZS5zeW1ib2xJbnN0YW5jZXMsZS5idWNrZXRJbnN0YW5jZUlkKSwhMH0sWWUucHJvdG90eXBlLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXMpZm9yKHZhciBuPTAsaT1lLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbcl07bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2RlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdF1bYS5jcm9zc1RpbGVJRF19fSxZZS5wcm90b3R5cGUucmVtb3ZlU3RhbGVCdWNrZXRzPWZ1bmN0aW9uKHQpe3ZhciBlPSExO2Zvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXTtmb3IodmFyIGkgaW4gbil0W25baV0uYnVja2V0SW5zdGFuY2VJZF18fCh0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyhyLG5baV0pLGRlbGV0ZSBuW2ldLGU9ITApfXJldHVybiBlfTt2YXIgV2U9ZnVuY3Rpb24oKXt0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLmNyb3NzVGlsZUlEcz1uZXcgR2UsdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkPTAsdGhpcy5idWNrZXRzSW5DdXJyZW50UGxhY2VtZW50PXt9fTtXZS5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdO3ZvaWQgMD09PW4mJihuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdPW5ldyBZZSk7dmFyIGk9ITEsYT17fTtuLmhhbmRsZVdyYXBKdW1wKHIpO2Zvcih2YXIgbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLmdldEJ1Y2tldCh0KTtjJiZ0LmlkPT09Yy5sYXllcklkc1swXSYmKGMuYnVja2V0SW5zdGFuY2VJZHx8KGMuYnVja2V0SW5zdGFuY2VJZD0rK3RoaXMubWF4QnVja2V0SW5zdGFuY2VJZCksbi5hZGRCdWNrZXQobC50aWxlSUQsYyx0aGlzLmNyb3NzVGlsZUlEcykmJihpPSEwKSxhW2MuYnVja2V0SW5zdGFuY2VJZF09ITApfXJldHVybiBuLnJlbW92ZVN0YWxlQnVja2V0cyhhKSYmKGk9ITApLGl9LFdlLnByb3RvdHlwZS5wcnVuZVVudXNlZExheWVycz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ITB9KSx0aGlzLmxheWVySW5kZXhlcyllW3JdfHxkZWxldGUgdGhpcy5sYXllckluZGV4ZXNbcl19O3ZhciBYZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmVtaXRWYWxpZGF0aW9uRXJyb3JzKGUsciYmci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuInNvdXJjZS5jYW52YXMiIT09dC5pZGVudGlmaWVyfSkpfSxaZT10LnBpY2soZWUsWyJhZGRMYXllciIsInJlbW92ZUxheWVyIiwic2V0UGFpbnRQcm9wZXJ0eSIsInNldExheW91dFByb3BlcnR5Iiwic2V0RmlsdGVyIiwiYWRkU291cmNlIiwicmVtb3ZlU291cmNlIiwic2V0TGF5ZXJab29tUmFuZ2UiLCJzZXRMaWdodCIsInNldFRyYW5zaXRpb24iLCJzZXRHZW9KU09OU291cmNlRGF0YSJdKSwkZT10LnBpY2soZWUsWyJzZXRDZW50ZXIiLCJzZXRab29tIiwic2V0QmVhcmluZyIsInNldFBpdGNoIl0pLEplPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobixpKXt2YXIgYT10aGlzO3ZvaWQgMD09PWkmJihpPXt9KSxlLmNhbGwodGhpcyksdGhpcy5tYXA9bix0aGlzLmRpc3BhdGNoZXI9bmV3IHEoKEp0fHwoSnQ9bmV3IEt0KSxKdCksdGhpcyksdGhpcy5pbWFnZU1hbmFnZXI9bmV3IE8sdGhpcy5nbHlwaE1hbmFnZXI9bmV3IEIobi5fdHJhbnNmb3JtUmVxdWVzdCxpLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSksdGhpcy5saW5lQXRsYXM9bmV3IFUoMjU2LDUxMiksdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgV2UsdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX29yZGVyPVtdLHRoaXMuc291cmNlQ2FjaGVzPXt9LHRoaXMuem9vbUhpc3Rvcnk9bmV3IHQuZGVmYXVsdCQyMyx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5fcmVzZXRVcGRhdGVzKCk7dmFyIG89dGhpczt0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2s9ci5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eShmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gby5kaXNwYXRjaGVyLmJyb2FkY2FzdCgibG9hZFJUTFRleHRQbHVnaW4iLHQucGx1Z2luVVJMLHQuY29tcGxldGlvbkNhbGxiYWNrKSxvLnNvdXJjZUNhY2hlcylvLnNvdXJjZUNhY2hlc1tlXS5yZWxvYWQoKX0pLHRoaXMub24oImRhdGEiLGZ1bmN0aW9uKHQpe2lmKCJzb3VyY2UiPT09dC5kYXRhVHlwZSYmIm1ldGFkYXRhIj09PXQuc291cmNlRGF0YVR5cGUpe3ZhciBlPWEuc291cmNlQ2FjaGVzW3Quc291cmNlSWRdO2lmKGUpe3ZhciByPWUuZ2V0U291cmNlKCk7aWYociYmci52ZWN0b3JMYXllcklkcylmb3IodmFyIG4gaW4gYS5fbGF5ZXJzKXt2YXIgaT1hLl9sYXllcnNbbl07aS5zb3VyY2U9PT1yLmlkJiZhLl92YWxpZGF0ZUxheWVyKGkpfX19fSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWRVUkw9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InN0eWxlIn0pKTt2YXIgaT0iYm9vbGVhbiI9PXR5cGVvZiByLnZhbGlkYXRlP3IudmFsaWRhdGU6IXgoZSk7ZT1mdW5jdGlvbih0LGUpe2lmKCF4KHQpKXJldHVybiB0O3ZhciByPUEodCk7cmV0dXJuIHIucGF0aD0iL3N0eWxlcy92MSIrci5wYXRoLHkocixlKX0oZSxyLmFjY2Vzc1Rva2VuKTt2YXIgYT10aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChlLHQuUmVzb3VyY2VUeXBlLlN0eWxlKTt0LmdldEpTT04oYSxmdW5jdGlvbihlLHIpe2U/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpOnImJm4uX2xvYWQocixpKX0pfSxyLnByb3RvdHlwZS5sb2FkSlNPTj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic3R5bGUifSkpLGEuZnJhbWUoZnVuY3Rpb24oKXtuLl9sb2FkKGUsITEhPT1yLnZhbGlkYXRlKX0pfSxyLnByb3RvdHlwZS5fbG9hZD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7aWYoIXJ8fCFYZSh0aGlzLHQudmFsaWRhdGVTdHlsZShlKSkpe2Zvcih2YXIgaSBpbiB0aGlzLl9sb2FkZWQ9ITAsdGhpcy5zdHlsZXNoZWV0PWUsZS5zb3VyY2VzKW4uYWRkU291cmNlKGksZS5zb3VyY2VzW2ldLHt2YWxpZGF0ZTohMX0pO2Uuc3ByaXRlP2Z1bmN0aW9uKGUscixuKXt2YXIgaSxvLHMsbD1hLmRldmljZVBpeGVsUmF0aW8+MT8iQDJ4IjoiIjtmdW5jdGlvbiBjKCl7aWYocyluKHMpO2Vsc2UgaWYoaSYmbyl7dmFyIGU9YS5nZXRJbWFnZURhdGEobykscj17fTtmb3IodmFyIGwgaW4gaSl7dmFyIGM9aVtsXSx1PWMud2lkdGgsZj1jLmhlaWdodCxoPWMueCxwPWMueSxkPWMuc2RmLGc9Yy5waXhlbFJhdGlvLHY9bmV3IHQuUkdCQUltYWdlKHt3aWR0aDp1LGhlaWdodDpmfSk7dC5SR0JBSW1hZ2UuY29weShlLHYse3g6aCx5OnB9LHt4OjAseTowfSx7d2lkdGg6dSxoZWlnaHQ6Zn0pLHJbbF09e2RhdGE6dixwaXhlbFJhdGlvOmcsc2RmOmR9fW4obnVsbCxyKX19dC5nZXRKU09OKHIoXyhlLGwsIi5qc29uIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSlNPTiksZnVuY3Rpb24odCxlKXtzfHwocz10LGk9ZSxjKCkpfSksdC5nZXRJbWFnZShyKF8oZSxsLCIucG5nIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLGZ1bmN0aW9uKHQsZSl7c3x8KHM9dCxvPWUsYygpKX0pfShlLnNwcml0ZSx0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCxmdW5jdGlvbihlLHIpe2lmKGUpbi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpO2Vsc2UgaWYocilmb3IodmFyIGkgaW4gciluLmltYWdlTWFuYWdlci5hZGRJbWFnZShpLHJbaV0pO24uaW1hZ2VNYW5hZ2VyLnNldExvYWRlZCghMCksbi5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX0pOnRoaXMuaW1hZ2VNYW5hZ2VyLnNldExvYWRlZCghMCksdGhpcy5nbHlwaE1hbmFnZXIuc2V0VVJMKGUuZ2x5cGhzKTt2YXIgbz10ZSh0aGlzLnN0eWxlc2hlZXQubGF5ZXJzKTt0aGlzLl9vcmRlcj1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuX2xheWVycz17fTtmb3IodmFyIHM9MCxsPW87czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdOyhjPXQuZGVmYXVsdCQyMihjKSkuc2V0RXZlbnRlZFBhcmVudChuLHtsYXllcjp7aWQ6Yy5pZH19KSxuLl9sYXllcnNbYy5pZF09Y310aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJzZXRMYXllcnMiLHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcikpLHRoaXMubGlnaHQ9bmV3IFYodGhpcy5zdHlsZXNoZWV0LmxpZ2h0KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgic3R5bGUubG9hZCIpKX19LHIucHJvdG90eXBlLl92YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc291cmNlQ2FjaGVzW2Uuc291cmNlXTtpZihyKXt2YXIgbj1lLnNvdXJjZUxheWVyO2lmKG4pe3ZhciBpPXIuZ2V0U291cmNlKCk7KCJnZW9qc29uIj09PWkudHlwZXx8aS52ZWN0b3JMYXllcklkcyYmLTE9PT1pLnZlY3RvckxheWVySWRzLmluZGV4T2YobikpJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSBsYXllciAiJytuKyciIGRvZXMgbm90IGV4aXN0IG9uIHNvdXJjZSAiJytpLmlkKyciIGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciAiJytlLmlkKyciJykpKX19fSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXJldHVybiExO2lmKE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRTb3VyY2VzKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKWlmKCF0aGlzLnNvdXJjZUNhY2hlc1t0XS5sb2FkZWQoKSlyZXR1cm4hMTtyZXR1cm4hIXRoaXMuaW1hZ2VNYW5hZ2VyLmlzTG9hZGVkKCl9LHIucHJvdG90eXBlLl9zZXJpYWxpemVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xheWVyc1t0XS5zZXJpYWxpemUoKX0pfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMubGlnaHQmJnRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZih0aGlzLnNvdXJjZUNhY2hlc1t0XS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycylpZih0aGlzLl9sYXllcnNbZV0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO3JldHVybiExfSxyLnByb3RvdHlwZS5fY2hlY2tMb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcigiU3R5bGUgaXMgbm90IGRvbmUgbG9hZGluZyIpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbG9hZGVkKXtpZih0aGlzLl9jaGFuZ2VkKXt2YXIgcj1PYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkTGF5ZXJzKSxuPU9iamVjdC5rZXlzKHRoaXMuX3JlbW92ZWRMYXllcnMpO2Zvcih2YXIgaSBpbihyLmxlbmd0aHx8bi5sZW5ndGgpJiZ0aGlzLl91cGRhdGVXb3JrZXJMYXllcnMocixuKSx0aGlzLl91cGRhdGVkU291cmNlcyl7dmFyIGE9dGhpcy5fdXBkYXRlZFNvdXJjZXNbaV07InJlbG9hZCI9PT1hP3RoaXMuX3JlbG9hZFNvdXJjZShpKToiY2xlYXIiPT09YSYmdGhpcy5fY2xlYXJTb3VyY2UoaSl9Zm9yKHZhciBvIGluIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzKXRoaXMuX2xheWVyc1tvXS51cGRhdGVUcmFuc2l0aW9ucyhlKTt0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKGUpLHRoaXMuX3Jlc2V0VXBkYXRlcygpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9Zm9yKHZhciBzIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW3NdLnVzZWQ9ITE7Zm9yKHZhciBsPTAsYz10aGlzLl9vcmRlcjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0sZj10aGlzLl9sYXllcnNbdV07Zi5yZWNhbGN1bGF0ZShlKSwhZi5pc0hpZGRlbihlLnpvb20pJiZmLnNvdXJjZSYmKHRoaXMuc291cmNlQ2FjaGVzW2Yuc291cmNlXS51c2VkPSEwKX10aGlzLmxpZ2h0LnJlY2FsY3VsYXRlKGUpLHRoaXMuej1lLnpvb219fSxyLnByb3RvdHlwZS5fdXBkYXRlV29ya2VyTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgidXBkYXRlTGF5ZXJzIix7bGF5ZXJzOnRoaXMuX3NlcmlhbGl6ZUxheWVycyh0KSxyZW1vdmVkSWRzOmV9KX0sci5wcm90b3R5cGUuX3Jlc2V0VXBkYXRlcz1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZWQ9ITEsdGhpcy5fdXBkYXRlZExheWVycz17fSx0aGlzLl9yZW1vdmVkTGF5ZXJzPXt9LHRoaXMuX3VwZGF0ZWRTb3VyY2VzPXt9LHRoaXMuX3VwZGF0ZWRQYWludFByb3BzPXt9fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksWGUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXJldHVybiExOyhlPXQuY2xvbmUoZSkpLmxheWVycz10ZShlLmxheWVycyk7dmFyIG49ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm5be2NvbW1hbmQ6ZWUuc2V0U3R5bGUsYXJnczpbcl19XTt2YXIgbj1bXTt0cnl7aWYoIXQuZGVmYXVsdCQxMChlLnZlcnNpb24sci52ZXJzaW9uKSlyZXR1cm5be2NvbW1hbmQ6ZWUuc2V0U3R5bGUsYXJnczpbcl19XTt0LmRlZmF1bHQkMTAoZS5jZW50ZXIsci5jZW50ZXIpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0Q2VudGVyLGFyZ3M6W3IuY2VudGVyXX0pLHQuZGVmYXVsdCQxMChlLnpvb20sci56b29tKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldFpvb20sYXJnczpbci56b29tXX0pLHQuZGVmYXVsdCQxMChlLmJlYXJpbmcsci5iZWFyaW5nKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldEJlYXJpbmcsYXJnczpbci5iZWFyaW5nXX0pLHQuZGVmYXVsdCQxMChlLnBpdGNoLHIucGl0Y2gpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0UGl0Y2gsYXJnczpbci5waXRjaF19KSx0LmRlZmF1bHQkMTAoZS5zcHJpdGUsci5zcHJpdGUpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0U3ByaXRlLGFyZ3M6W3Iuc3ByaXRlXX0pLHQuZGVmYXVsdCQxMChlLmdseXBocyxyLmdseXBocyl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRHbHlwaHMsYXJnczpbci5nbHlwaHNdfSksdC5kZWZhdWx0JDEwKGUudHJhbnNpdGlvbixyLnRyYW5zaXRpb24pfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0VHJhbnNpdGlvbixhcmdzOltyLnRyYW5zaXRpb25dfSksdC5kZWZhdWx0JDEwKGUubGlnaHQsci5saWdodCl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMaWdodCxhcmdzOltyLmxpZ2h0XX0pO3ZhciBpPXt9LGE9W107IWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhO2ZvcihhIGluIHI9cnx8e30sZT1lfHx7fSllLmhhc093blByb3BlcnR5KGEpJiYoci5oYXNPd25Qcm9wZXJ0eShhKXx8bmUoYSxuLGkpKTtmb3IoYSBpbiByKXIuaGFzT3duUHJvcGVydHkoYSkmJihlLmhhc093blByb3BlcnR5KGEpP3QuZGVmYXVsdCQxMChlW2FdLHJbYV0pfHwoImdlb2pzb24iPT09ZVthXS50eXBlJiYiZ2VvanNvbiI9PT1yW2FdLnR5cGUmJmFlKGUscixhKT9uLnB1c2goe2NvbW1hbmQ6ZWUuc2V0R2VvSlNPTlNvdXJjZURhdGEsYXJnczpbYSxyW2FdLmRhdGFdfSk6aWUoYSxyLG4saSkpOnJlKGEscixuKSl9KGUuc291cmNlcyxyLnNvdXJjZXMsYSxpKTt2YXIgbz1bXTtlLmxheWVycyYmZS5sYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtpW3Quc291cmNlXT9uLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlTGF5ZXIsYXJnczpbdC5pZF19KTpvLnB1c2godCl9KSxuPW4uY29uY2F0KGEpLGZ1bmN0aW9uKGUscixuKXtyPXJ8fFtdO3ZhciBpLGEsbyxzLGwsYyx1LGY9KGU9ZXx8W10pLm1hcChzZSksaD1yLm1hcChzZSkscD1lLnJlZHVjZShsZSx7fSksZD1yLnJlZHVjZShsZSx7fSksZz1mLnNsaWNlKCksdj1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihpPTAsYT0wO2k8Zi5sZW5ndGg7aSsrKW89ZltpXSxkLmhhc093blByb3BlcnR5KG8pP2ErKzoobi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W29dfSksZy5zcGxpY2UoZy5pbmRleE9mKG8sYSksMSkpO2ZvcihpPTAsYT0wO2k8aC5sZW5ndGg7aSsrKW89aFtoLmxlbmd0aC0xLWldLGdbZy5sZW5ndGgtMS1pXSE9PW8mJihwLmhhc093blByb3BlcnR5KG8pPyhuLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlTGF5ZXIsYXJnczpbb119KSxnLnNwbGljZShnLmxhc3RJbmRleE9mKG8sZy5sZW5ndGgtYSksMSkpOmErKyxjPWdbZy5sZW5ndGgtaV0sbi5wdXNoKHtjb21tYW5kOmVlLmFkZExheWVyLGFyZ3M6W2Rbb10sY119KSxnLnNwbGljZShnLmxlbmd0aC1pLDAsbyksdltvXT0hMCk7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylpZihzPXBbbz1oW2ldXSxsPWRbb10sIXZbb10mJiF0LmRlZmF1bHQkMTAocyxsKSlpZih0LmRlZmF1bHQkMTAocy5zb3VyY2UsbC5zb3VyY2UpJiZ0LmRlZmF1bHQkMTAoc1sic291cmNlLWxheWVyIl0sbFsic291cmNlLWxheWVyIl0pJiZ0LmRlZmF1bHQkMTAocy50eXBlLGwudHlwZSkpe2Zvcih1IGluIG9lKHMubGF5b3V0LGwubGF5b3V0LG4sbyxudWxsLGVlLnNldExheW91dFByb3BlcnR5KSxvZShzLnBhaW50LGwucGFpbnQsbixvLG51bGwsZWUuc2V0UGFpbnRQcm9wZXJ0eSksdC5kZWZhdWx0JDEwKHMuZmlsdGVyLGwuZmlsdGVyKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldEZpbHRlcixhcmdzOltvLGwuZmlsdGVyXX0pLHQuZGVmYXVsdCQxMChzLm1pbnpvb20sbC5taW56b29tKSYmdC5kZWZhdWx0JDEwKHMubWF4em9vbSxsLm1heHpvb20pfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0TGF5ZXJab29tUmFuZ2UsYXJnczpbbyxsLm1pbnpvb20sbC5tYXh6b29tXX0pLHMpcy5oYXNPd25Qcm9wZXJ0eSh1KSYmImxheW91dCIhPT11JiYicGFpbnQiIT09dSYmImZpbHRlciIhPT11JiYibWV0YWRhdGEiIT09dSYmIm1pbnpvb20iIT09dSYmIm1heHpvb20iIT09dSYmKDA9PT11LmluZGV4T2YoInBhaW50LiIpP29lKHNbdV0sbFt1XSxuLG8sdS5zbGljZSg2KSxlZS5zZXRQYWludFByb3BlcnR5KTp0LmRlZmF1bHQkMTAoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpO2Zvcih1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmIXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9vZShzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksZWUuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWZhdWx0JDEwKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKX1lbHNlIG4ucHVzaCh7Y29tbWFuZDplZS5yZW1vdmVMYXllcixhcmdzOltvXX0pLGM9Z1tnLmxhc3RJbmRleE9mKG8pKzFdLG4ucHVzaCh7Y29tbWFuZDplZS5hZGRMYXllcixhcmdzOltsLGNdfSl9KG8sci5sYXllcnMsbil9Y2F0Y2godCl7Y29uc29sZS53YXJuKCJVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOiIsdCksbj1be2NvbW1hbmQ6ZWUuc2V0U3R5bGUsYXJnczpbcl19XX1yZXR1cm4gbn0odGhpcy5zZXJpYWxpemUoKSxlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gJGUpfSk7aWYoMD09PW4ubGVuZ3RoKXJldHVybiExO3ZhciBpPW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jb21tYW5kIGluIFplKX0pO2lmKGkubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJVbmltcGxlbWVudGVkOiAiK2kubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbW1hbmR9KS5qb2luKCIsICIpKyIuIik7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXsic2V0VHJhbnNpdGlvbiIhPT10LmNvbW1hbmQmJnJbdC5jb21tYW5kXS5hcHBseShyLHQuYXJncyl9KSx0aGlzLnN0eWxlc2hlZXQ9ZSwhMH0sci5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkFuIGltYWdlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiIpKSk7dGhpcy5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoZSxyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpfSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UodCl9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk5vIGltYWdlIHdpdGggdGhpcyBuYW1lIGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGUpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9LHIucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcztpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMCE9PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgYWxyZWFkeSBhIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTtpZighci50eXBlKXRocm93IG5ldyBFcnJvcigiVGhlIHR5cGUgcHJvcGVydHkgbXVzdCBiZSBkZWZpbmVkLCBidXQgdGhlIG9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdlcmUgZ2l2ZW46ICIrT2JqZWN0LmtleXMocikuam9pbigiLCAiKSsiLiIpO2lmKCEoWyJ2ZWN0b3IiLCJyYXN0ZXIiLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdLmluZGV4T2Yoci50eXBlKT49MCYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLnNvdXJjZSwic291cmNlcy4iK2UscixudWxsLG4pKSl7dGhpcy5tYXAmJnRoaXMubWFwLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJihyLmNvbGxlY3RSZXNvdXJjZVRpbWluZz0hMCk7dmFyIGE9dGhpcy5zb3VyY2VDYWNoZXNbZV09bmV3IFd0KGUscix0aGlzLmRpc3BhdGNoZXIpO2Euc3R5bGU9dGhpcyxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcyxmdW5jdGlvbigpe3JldHVybntpc1NvdXJjZUxvYWRlZDppLmxvYWRlZCgpLHNvdXJjZTphLnNlcmlhbGl6ZSgpLHNvdXJjZUlkOmV9fSksYS5vbkFkZCh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbihlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMD09PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCIpO2Zvcih2YXIgciBpbiB0aGlzLl9sYXllcnMpaWYodGhpcy5fbGF5ZXJzW3JdLnNvdXJjZT09PWUpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignU291cmNlICInK2UrJyIgY2Fubm90IGJlIHJlbW92ZWQgd2hpbGUgbGF5ZXIgIicrcisnIiBpcyB1c2luZyBpdC4nKSkpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO2RlbGV0ZSB0aGlzLnNvdXJjZUNhY2hlc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFNvdXJjZXNbZV0sbi5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7c291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIixkYXRhVHlwZToic291cmNlIixzb3VyY2VJZDplfSkpLG4uc2V0RXZlbnRlZFBhcmVudChudWxsKSxuLmNsZWFyVGlsZXMoKSxuLm9uUmVtb3ZlJiZuLm9uUmVtb3ZlKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5zZXRHZW9KU09OU291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCkuc2V0RGF0YShlKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlQ2FjaGVzW3RdJiZ0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKX0sci5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9ZS5pZDtpZih0aGlzLmdldExheWVyKGkpKXRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCAiJytpKyciIGFscmVhZHkgZXhpc3RzIG9uIHRoaXMgbWFwJykpKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZS5zb3VyY2UmJih0aGlzLmFkZFNvdXJjZShpLGUuc291cmNlKSxlPXQuY2xvbmUoZSksZT10LmV4dGVuZChlLHtzb3VyY2U6aX0pKSwhdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmxheWVyLCJsYXllcnMuIitpLGUse2FycmF5SW5kZXg6LTF9LG4pKXt2YXIgYT10LmRlZmF1bHQkMjIoZSk7dGhpcy5fdmFsaWRhdGVMYXllcihhKSxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7bGF5ZXI6e2lkOml9fSk7dmFyIG89cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtpZihyJiYtMT09PW8pdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkICInK3IrJyIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuJykpKTtlbHNle2lmKHRoaXMuX29yZGVyLnNwbGljZShvLDAsaSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fbGF5ZXJzW2ldPWEsdGhpcy5fcmVtb3ZlZExheWVyc1tpXSYmYS5zb3VyY2Upe3ZhciBzPXRoaXMuX3JlbW92ZWRMYXllcnNbaV07ZGVsZXRlIHRoaXMuX3JlbW92ZWRMYXllcnNbaV0scy50eXBlIT09YS50eXBlP3RoaXMuX3VwZGF0ZWRTb3VyY2VzW2Euc291cmNlXT0iY2xlYXIiOih0aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09InJlbG9hZCIsdGhpcy5zb3VyY2VDYWNoZXNbYS5zb3VyY2VdLnBhdXNlKCkpfXRoaXMuX3VwZGF0ZUxheWVyKGEpfX19LHIucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbihlLHIpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9sYXllcnNbZV0pe2lmKGUhPT1yKXt2YXIgbj10aGlzLl9vcmRlci5pbmRleE9mKGUpO3RoaXMuX29yZGVyLnNwbGljZShuLDEpO3ZhciBpPXI/dGhpcy5fb3JkZXIuaW5kZXhPZihyKTp0aGlzLl9vcmRlci5sZW5ndGg7ciYmLTE9PT1pP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCAiJytyKyciIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLicpKSk6KHRoaXMuX29yZGVyLnNwbGljZShpLDAsZSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITApfX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgbW92ZWQuIikpKX0sci5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj10aGlzLl9sYXllcnNbZV07aWYocil7ci5zZXRFdmVudGVkUGFyZW50KG51bGwpO3ZhciBuPXRoaXMuX29yZGVyLmluZGV4T2YoZSk7dGhpcy5fb3JkZXIuc3BsaWNlKG4sMSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9yZW1vdmVkTGF5ZXJzW2VdPXIsZGVsZXRlIHRoaXMuX2xheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZExheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbZV19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHJlbW92ZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sci5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpP2kubWluem9vbT09PXImJmkubWF4em9vbT09PW58fChudWxsIT1yJiYoaS5taW56b29tPXIpLG51bGwhPW4mJihpLm1heHpvb209biksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC4iKSkpfSxyLnByb3RvdHlwZS5zZXRGaWx0ZXI9ZnVuY3Rpb24oZSxyKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPXRoaXMuZ2V0TGF5ZXIoZSk7aWYobil7aWYoIXQuZGVmYXVsdCQxMChuLmZpbHRlcixyKSlyZXR1cm4gbnVsbD09cj8obi5maWx0ZXI9dm9pZCAwLHZvaWQgdGhpcy5fdXBkYXRlTGF5ZXIobikpOnZvaWQodGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlciwibGF5ZXJzLiIrbi5pZCsiLmZpbHRlciIscil8fChuLmZpbHRlcj10LmNsb25lKHIpLHRoaXMuX3VwZGF0ZUxheWVyKG4pKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIGZpbHRlcmVkLiIpKSl9LHIucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdC5jbG9uZSh0aGlzLmdldExheWVyKGUpLmZpbHRlcil9LHIucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aT90LmRlZmF1bHQkMTAoaS5nZXRMYXlvdXRQcm9wZXJ0eShyKSxuKXx8KGkuc2V0TGF5b3V0UHJvcGVydHkocixuKSx0aGlzLl91cGRhdGVMYXllcihpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRMYXllcih0KS5nZXRMYXlvdXRQcm9wZXJ0eShlKX0sci5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKGUpO2lmKGkpe2lmKCF0LmRlZmF1bHQkMTAoaS5nZXRQYWludFByb3BlcnR5KHIpLG4pKXt2YXIgYT1pLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbcl0udmFsdWUuaXNEYXRhRHJpdmVuKCk7aS5zZXRQYWludFByb3BlcnR5KHIsbiksKGkuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1tyXS52YWx1ZS5pc0RhdGFEcml2ZW4oKXx8YSkmJnRoaXMuX3VwZGF0ZUxheWVyKGkpLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbZV09ITB9fWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldExheWVyKHQpLmdldFBhaW50UHJvcGVydHkoZSl9LHIucHJvdG90eXBlLmdldFRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe2R1cmF0aW9uOjMwMCxkZWxheTowfSx0aGlzLnN0eWxlc2hlZXQmJnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdC5maWx0ZXJPYmplY3Qoe3ZlcnNpb246dGhpcy5zdHlsZXNoZWV0LnZlcnNpb24sbmFtZTp0aGlzLnN0eWxlc2hlZXQubmFtZSxtZXRhZGF0YTp0aGlzLnN0eWxlc2hlZXQubWV0YWRhdGEsbGlnaHQ6dGhpcy5zdHlsZXNoZWV0LmxpZ2h0LGNlbnRlcjp0aGlzLnN0eWxlc2hlZXQuY2VudGVyLHpvb206dGhpcy5zdHlsZXNoZWV0Lnpvb20sYmVhcmluZzp0aGlzLnN0eWxlc2hlZXQuYmVhcmluZyxwaXRjaDp0aGlzLnN0eWxlc2hlZXQucGl0Y2gsc3ByaXRlOnRoaXMuc3R5bGVzaGVldC5zcHJpdGUsZ2x5cGhzOnRoaXMuc3R5bGVzaGVldC5nbHlwaHMsdHJhbnNpdGlvbjp0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbixzb3VyY2VzOnQubWFwT2JqZWN0KHRoaXMuc291cmNlQ2FjaGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSksbGF5ZXJzOnRoaXMuX29yZGVyLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGF5ZXJzW3RdLnNlcmlhbGl6ZSgpfSl9LGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10fSl9LHIucHJvdG90eXBlLl91cGRhdGVMYXllcj1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGVkTGF5ZXJzW3QuaWRdPSEwLHQuc291cmNlJiYhdGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdJiYodGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdPSJyZWxvYWQiLHRoaXMuc291cmNlQ2FjaGVzW3Quc291cmNlXS5wYXVzZSgpKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5fZmxhdHRlblJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dGhpcy5fb3JkZXIubGVuZ3RoLTE7cj49MDtyLS0pZm9yKHZhciBuPXRoaXMuX29yZGVyW3JdLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldW25dO2lmKG8pZm9yKHZhciBzPTAsbD1vO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTtlLnB1c2goYyl9fXJldHVybiBlfSxyLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyLG4pe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJxdWVyeVJlbmRlcmVkRmVhdHVyZXMuZmlsdGVyIixyLmZpbHRlcik7dmFyIGk9e307aWYociYmci5sYXllcnMpe2lmKCFBcnJheS5pc0FycmF5KHIubGF5ZXJzKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJwYXJhbWV0ZXJzLmxheWVycyBtdXN0IGJlIGFuIEFycmF5LiIpKSksW107Zm9yKHZhciBhPTAsbz1yLmxheWVyczthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD10aGlzLl9sYXllcnNbc107aWYoIWwpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK3MrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcXVlcmllZCBmb3IgZmVhdHVyZXMuIikpKSxbXTtpW2wuc291cmNlXT0hMH19dmFyIGM9W107Zm9yKHZhciB1IGluIHRoaXMuc291cmNlQ2FjaGVzKXIubGF5ZXJzJiYhaVt1XXx8Yy5wdXNoKGF0KHRoaXMuc291cmNlQ2FjaGVzW3VdLHRoaXMuX2xheWVycyxlLndvcmxkQ29vcmRpbmF0ZSxyLG4pKTtyZXR1cm4gdGhpcy5wbGFjZW1lbnQmJmMucHVzaChmdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT17fSxvPW4ucXVlcnlSZW5kZXJlZFN5bWJvbHMoZSkscz1bXSxsPTAsYz1PYmplY3Qua2V5cyhvKS5tYXAoTnVtYmVyKTtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF07cy5wdXNoKGlbdV0pfXMuc29ydChvdCk7Zm9yKHZhciBmPWZ1bmN0aW9uKCl7dmFyIGU9cFtoXSxuPWUuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKG9bZS5idWNrZXRJbnN0YW5jZUlkXSxlLmJ1Y2tldEluZGV4LGUuc291cmNlTGF5ZXJJbmRleCxyLmZpbHRlcixyLmxheWVycyx0KTtmb3IodmFyIGkgaW4gbil7dmFyIHM9YVtpXT1hW2ldfHxbXSxsPW5baV07bC5zb3J0KGZ1bmN0aW9uKHQscil7dmFyIG49ZS5mZWF0dXJlU29ydE9yZGVyO2lmKG4pe3ZhciBpPW4uaW5kZXhPZih0LmZlYXR1cmVJbmRleCk7cmV0dXJuIG4uaW5kZXhPZihyLmZlYXR1cmVJbmRleCktaX1yZXR1cm4gci5mZWF0dXJlSW5kZXgtdC5mZWF0dXJlSW5kZXh9KTtmb3IodmFyIGM9MCx1PWw7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdO3MucHVzaChmLmZlYXR1cmUpfX19LGg9MCxwPXM7aDxwLmxlbmd0aDtoKz0xKWYoKTtyZXR1cm4gYX0odGhpcy5fbGF5ZXJzLGUudmlld3BvcnQscix0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCx0aGlzLnBsYWNlbWVudC5yZXRhaW5lZFF1ZXJ5RGF0YSkpLHRoaXMuX2ZsYXR0ZW5SZW5kZXJlZEZlYXR1cmVzKGMpfSxyLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKGUscil7ciYmci5maWx0ZXImJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsInF1ZXJ5U291cmNlRmVhdHVyZXMuZmlsdGVyIixyLmZpbHRlcik7dmFyIG49dGhpcy5zb3VyY2VDYWNoZXNbZV07cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldFRpbGVCeUlEKGUpfSksbj1bXSxpPXt9LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPW8udGlsZUlELmNhbm9uaWNhbC5rZXk7aVtzXXx8KGlbc109ITAsby5xdWVyeVNvdXJjZUZlYXR1cmVzKG4sZSkpfXJldHVybiBufShuLHIpOltdfSxyLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5nZXRTb3VyY2VUeXBlKHQpP24obmV3IEVycm9yKCdBIHNvdXJjZSB0eXBlIGNhbGxlZCAiJyt0KyciIGFscmVhZHkgZXhpc3RzLicpKTooci5zZXRTb3VyY2VUeXBlKHQsZSksZS53b3JrZXJTb3VyY2VVUkw/dm9pZCB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJsb2FkV29ya2VyU291cmNlIix7bmFtZTp0LHVybDplLndvcmtlclNvdXJjZVVSTH0sbik6bihudWxsLG51bGwpKX0sci5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saWdodC5nZXRMaWdodCgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciByPXRoaXMubGlnaHQuZ2V0TGlnaHQoKSxuPSExO2Zvcih2YXIgaSBpbiBlKWlmKCF0LmRlZmF1bHQkMTAoZVtpXSxyW2ldKSl7bj0hMDticmVha31pZihuKXt2YXIgbz17bm93OmEubm93KCksdHJhbnNpdGlvbjp0LmV4dGVuZCh7ZHVyYXRpb246MzAwLGRlbGF5OjB9LHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX07dGhpcy5saWdodC5zZXRMaWdodChlKSx0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKG8pfX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuKCFhfHwhMSE9PWEudmFsaWRhdGUpJiZYZSh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe2tleTpyLHN0eWxlOnRoaXMuc2VyaWFsaXplKCksdmFsdWU6bixzdHlsZVNwZWM6dC5kZWZhdWx0JDV9LGkpKSl9LHIucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdC5ldmVudGVkLm9mZigicGx1Z2luQXZhaWxhYmxlIix0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2spLHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2VdLmNsZWFyVGlsZXMoKTt0aGlzLmRpc3BhdGNoZXIucmVtb3ZlKCl9LHIucHJvdG90eXBlLl9jbGVhclNvdXJjZT1mdW5jdGlvbih0KXt0aGlzLnNvdXJjZUNhY2hlc1t0XS5jbGVhclRpbGVzKCl9LHIucHJvdG90eXBlLl9yZWxvYWRTb3VyY2U9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVzdW1lKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVsb2FkKCl9LHIucHJvdG90eXBlLl91cGRhdGVTb3VyY2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tlXS51cGRhdGUodCl9LHIucHJvdG90eXBlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuX3JlbG9hZFNvdXJjZSh0KX0sci5wcm90b3R5cGUuX3VwZGF0ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPSExLGk9ITEsbz17fSxzPTAsbD10aGlzLl9vcmRlcjtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT10aGlzLl9sYXllcnNbY107aWYoInN5bWJvbCI9PT11LnR5cGUpe2lmKCFvW3Uuc291cmNlXSl7dmFyIGY9dGhpcy5zb3VyY2VDYWNoZXNbdS5zb3VyY2VdO29bdS5zb3VyY2VdPWYuZ2V0UmVuZGVyYWJsZUlkcygpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZi5nZXRUaWxlQnlJRCh0KX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50aWxlSUQub3ZlcnNjYWxlZFotdC50aWxlSUQub3ZlcnNjYWxlZFp8fCh0LnRpbGVJRC5pc0xlc3NUaGFuKGUudGlsZUlEKT8tMToxKX0pfXZhciBoPXRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXguYWRkTGF5ZXIodSxvW3Uuc291cmNlXSx0LmNlbnRlci5sbmcpO249bnx8aH19dGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5wcnVuZVVudXNlZExheWVycyh0aGlzLl9vcmRlcik7dmFyIHA9dGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ7aWYoKHB8fCF0aGlzLnBhdXNlYWJsZVBsYWNlbWVudHx8dGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkmJiF0aGlzLnBsYWNlbWVudC5zdGlsbFJlY2VudChhLm5vdygpKSkmJih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudD1uZXcgVWUodCx0aGlzLl9vcmRlcixwLGUsciksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITEpLHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpP3RoaXMucGxhY2VtZW50LnNldFN0YWxlKCk6KHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmNvbnRpbnVlUGxhY2VtZW50KHRoaXMuX29yZGVyLHRoaXMuX2xheWVycyxvKSx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSYmKHRoaXMucGxhY2VtZW50PXRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmNvbW1pdCh0aGlzLnBsYWNlbWVudCxhLm5vdygpKSxpPSEwKSxuJiZ0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5wbGFjZW1lbnQuc2V0U3RhbGUoKSksaXx8bilmb3IodmFyIGQ9MCxnPXRoaXMuX29yZGVyO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXSxtPXRoaXMuX2xheWVyc1t2XTsic3ltYm9sIj09PW0udHlwZSYmdGhpcy5wbGFjZW1lbnQudXBkYXRlTGF5ZXJPcGFjaXRpZXMobSxvW20uc291cmNlXSl9cmV0dXJuIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpfHx0aGlzLnBsYWNlbWVudC5oYXNUcmFuc2l0aW9ucyhhLm5vdygpKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZXMoZS5pY29ucyxyKX0sci5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdseXBoTWFuYWdlci5nZXRHbHlwaHMoZS5zdGFja3Mscil9LHJ9KHQuRXZlbnRlZCk7SmUuZ2V0U291cmNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gbnRbdF19LEplLnNldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlKXtudFt0XT1lfSxKZS5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eT10LnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5O3ZhciBLZT10LmNyZWF0ZUxheW91dChbe25hbWU6ImFfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfV0pLFFlPXtwcmVsdWRlOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG5cbiNpZiAhZGVmaW5lZChsb3dwKVxuI2RlZmluZSBsb3dwXG4jZW5kaWZcblxuI2lmICFkZWZpbmVkKG1lZGl1bXApXG4jZGVmaW5lIG1lZGl1bXBcbiNlbmRpZlxuXG4jaWYgIWRlZmluZWQoaGlnaHApXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuI2VuZGlmXG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuXG4jaWYgIWRlZmluZWQobG93cClcbiNkZWZpbmUgbG93cFxuI2VuZGlmXG5cbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxuI2RlZmluZSBtZWRpdW1wXG4jZW5kaWZcblxuI2lmICFkZWZpbmVkKGhpZ2hwKVxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbiNlbmRpZlxuXG4vLyBVbnBhY2sgYSBwYWlyIG9mIHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBwYWNrZWQgaW50byBhIHNpbmdsZSBmbG9hdC5cbi8vIFRoZSBwYWNrZWQgdmFsdWVzIGFyZSBhc3N1bWVkIHRvIGJlIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLCBhbmQgYXJlXG4vLyBwYWNrZWQgbGlrZSBzbzpcbi8vIHBhY2tlZFZhbHVlID0gZmxvb3IoaW5wdXRbMF0pICogMjU2ICsgaW5wdXRbMV0sXG52ZWMyIHVucGFja19mbG9hdChjb25zdCBmbG9hdCBwYWNrZWRWYWx1ZSkge1xuICAgIGludCBwYWNrZWRJbnRWYWx1ZSA9IGludChwYWNrZWRWYWx1ZSk7XG4gICAgaW50IHYwID0gcGFja2VkSW50VmFsdWUgLyAyNTY7XG4gICAgcmV0dXJuIHZlYzIodjAsIHBhY2tlZEludFZhbHVlIC0gdjAgKiAyNTYpO1xufVxuXG52ZWMyIHVucGFja19vcGFjaXR5KGNvbnN0IGZsb2F0IHBhY2tlZE9wYWNpdHkpIHtcbiAgICBpbnQgaW50T3BhY2l0eSA9IGludChwYWNrZWRPcGFjaXR5KSAvIDI7XG4gICAgcmV0dXJuIHZlYzIoZmxvYXQoaW50T3BhY2l0eSkgLyAxMjcuMCwgbW9kKHBhY2tlZE9wYWNpdHksIDIuMCkpO1xufVxuXG4vLyBUbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgbmVlZGVkLCB3ZSBlbmNvZGUgYSA0LWNvbXBvbmVudFxuLy8gY29sb3IgaW50byBhIHBhaXIgb2YgZmxvYXRzIChpLmUuIGEgdmVjMikgYXMgZm9sbG93czpcbi8vIFsgZmxvb3IoY29sb3IuciAqIDI1NSkgKiAyNTYgKyBjb2xvci5nICogMjU1LFxuLy8gICBmbG9vcihjb2xvci5iICogMjU1KSAqIDI1NiArIGNvbG9yLmcgKiAyNTUgXVxudmVjNCBkZWNvZGVfY29sb3IoY29uc3QgdmVjMiBlbmNvZGVkQ29sb3IpIHtcbiAgICByZXR1cm4gdmVjNChcbiAgICAgICAgdW5wYWNrX2Zsb2F0KGVuY29kZWRDb2xvclswXSkgLyAyNTUuMCxcbiAgICAgICAgdW5wYWNrX2Zsb2F0KGVuY29kZWRDb2xvclsxXSkgLyAyNTUuMFxuICAgICk7XG59XG5cbi8vIFVucGFjayBhIHBhaXIgb2YgcGFpbnQgdmFsdWVzIGFuZCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZW0uXG5mbG9hdCB1bnBhY2tfbWl4X3ZlYzIoY29uc3QgdmVjMiBwYWNrZWRWYWx1ZSwgY29uc3QgZmxvYXQgdCkge1xuICAgIHJldHVybiBtaXgocGFja2VkVmFsdWVbMF0sIHBhY2tlZFZhbHVlWzFdLCB0KTtcbn1cblxuLy8gVW5wYWNrIGEgcGFpciBvZiBwYWludCB2YWx1ZXMgYW5kIGludGVycG9sYXRlIGJldHdlZW4gdGhlbS5cbnZlYzQgdW5wYWNrX21peF92ZWM0KGNvbnN0IHZlYzQgcGFja2VkQ29sb3JzLCBjb25zdCBmbG9hdCB0KSB7XG4gICAgdmVjNCBtaW5Db2xvciA9IGRlY29kZV9jb2xvcih2ZWMyKHBhY2tlZENvbG9yc1swXSwgcGFja2VkQ29sb3JzWzFdKSk7XG4gICAgdmVjNCBtYXhDb2xvciA9IGRlY29kZV9jb2xvcih2ZWMyKHBhY2tlZENvbG9yc1syXSwgcGFja2VkQ29sb3JzWzNdKSk7XG4gICAgcmV0dXJuIG1peChtaW5Db2xvciwgbWF4Q29sb3IsIHQpO1xufVxuXG4vLyBUaGUgb2Zmc2V0IGRlcGVuZHMgb24gaG93IG1hbnkgcGl4ZWxzIGFyZSBiZXR3ZWVuIHRoZSB3b3JsZCBvcmlnaW4gYW5kIHRoZSBlZGdlIG9mIHRoZSB0aWxlOlxuLy8gdmVjMiBvZmZzZXQgPSBtb2QocGl4ZWxfY29vcmQsIHNpemUpXG4vL1xuLy8gQXQgaGlnaCB6b29tIGxldmVscyB0aGVyZSBhcmUgYSB0b24gb2YgcGl4ZWxzIGJldHdlZW4gdGhlIHdvcmxkIG9yaWdpbiBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHRpbGUuXG4vLyBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mIHByZWNpc2lvbiBmb3IgaGlnaHAgZmxvYXRzLiBXZSBuZWVkIG1vcmUgdGhhbiB0aGF0LlxuLy9cbi8vIFRoZSBwaXhlbF9jb29yZCBpcyBwYXNzZWQgaW4gYXMgdHdvIDE2IGJpdCB2YWx1ZXM6XG4vLyBwaXhlbF9jb29yZF91cHBlciA9IGZsb29yKHBpeGVsX2Nvb3JkIC8gMl4xNilcbi8vIHBpeGVsX2Nvb3JkX2xvd2VyID0gbW9kKHBpeGVsX2Nvb3JkLCAyXjE2KVxuLy9cbi8vIFRoZSBvZmZzZXQgaXMgY2FsY3VsYXRlZCBpbiBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHNob3VsZCBwcmVzZXJ2ZSB0aGlzIHByZWNpc2lvbjpcbnZlYzIgZ2V0X3BhdHRlcm5fcG9zKGNvbnN0IHZlYzIgcGl4ZWxfY29vcmRfdXBwZXIsIGNvbnN0IHZlYzIgcGl4ZWxfY29vcmRfbG93ZXIsXG4gICAgY29uc3QgdmVjMiBwYXR0ZXJuX3NpemUsIGNvbnN0IGZsb2F0IHRpbGVfdW5pdHNfdG9fcGl4ZWxzLCBjb25zdCB2ZWMyIHBvcykge1xuXG4gICAgdmVjMiBvZmZzZXQgPSBtb2QobW9kKG1vZChwaXhlbF9jb29yZF91cHBlciwgcGF0dGVybl9zaXplKSAqIDI1Ni4wLCBwYXR0ZXJuX3NpemUpICogMjU2LjAgKyBwaXhlbF9jb29yZF9sb3dlciwgcGF0dGVybl9zaXplKTtcbiAgICByZXR1cm4gKHRpbGVfdW5pdHNfdG9fcGl4ZWxzICogcG9zICsgb2Zmc2V0KSAvIHBhdHRlcm5fc2l6ZTtcbn1cbiJ9LGJhY2tncm91bmQ6e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIHZlYzQgdV9jb2xvcjtcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvciAqIHVfb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG59XG4ifSxiYWNrZ3JvdW5kUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XG5cbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIGltYWdlY29vcmRfYik7XG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KSAqIHVfb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjtcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG5cbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcbn1cbiJ9LGNpcmNsZTp7ZnJhZ21lbnRTb3VyY2U6IiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcblxudmFyeWluZyB2ZWMzIHZfZGF0YTtcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG5cbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2X2RhdGEueHk7XG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGggPSBsZW5ndGgoZXh0cnVkZSk7XG5cbiAgICBsb3dwIGZsb2F0IGFudGlhbGlhc2JsdXIgPSB2X2RhdGEuejtcbiAgICBmbG9hdCBhbnRpYWxpYXNlZF9ibHVyID0gLW1heChibHVyLCBhbnRpYWxpYXNibHVyKTtcblxuICAgIGZsb2F0IG9wYWNpdHlfdCA9IHNtb290aHN0ZXAoMC4wLCBhbnRpYWxpYXNlZF9ibHVyLCBleHRydWRlX2xlbmd0aCAtIDEuMCk7XG5cbiAgICBmbG9hdCBjb2xvcl90ID0gc3Ryb2tlX3dpZHRoIDwgMC4wMSA/IDAuMCA6IHNtb290aHN0ZXAoXG4gICAgICAgIGFudGlhbGlhc2VkX2JsdXIsXG4gICAgICAgIDAuMCxcbiAgICAgICAgZXh0cnVkZV9sZW5ndGggLSByYWRpdXMgLyAocmFkaXVzICsgc3Ryb2tlX3dpZHRoKVxuICAgICk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5X3QgKiBtaXgoY29sb3IgKiBvcGFjaXR5LCBzdHJva2VfY29sb3IgKiBzdHJva2Vfb3BhY2l0eSwgY29sb3JfdCk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIGJvb2wgdV9zY2FsZV93aXRoX21hcDtcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxuXG52YXJ5aW5nIHZlYzMgdl9kYXRhO1xuXG52b2lkIG1haW4odm9pZCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG5cbiAgICAvLyB1bmVuY29kZSB0aGUgZXh0cnVzaW9uIHZlY3RvciB0aGF0IHdlIHNudWNrIGludG8gdGhlIGFfcG9zIHZlY3RvclxuICAgIHZlYzIgZXh0cnVkZSA9IHZlYzIobW9kKGFfcG9zLCAyLjApICogMi4wIC0gMS4wKTtcblxuICAgIC8vIG11bHRpcGx5IGFfcG9zIGJ5IDAuNSwgc2luY2Ugd2UgaGFkIGl0ICogMiBpbiBvcmRlciB0byBzbmVha1xuICAgIC8vIGluIGV4dHJ1c2lvbiBkYXRhXG4gICAgdmVjMiBjaXJjbGVfY2VudGVyID0gZmxvb3IoYV9wb3MgKiAwLjUpO1xuICAgIGlmICh1X3BpdGNoX3dpdGhfbWFwKSB7XG4gICAgICAgIHZlYzIgY29ybmVyX3Bvc2l0aW9uID0gY2lyY2xlX2NlbnRlcjtcbiAgICAgICAgaWYgKHVfc2NhbGVfd2l0aF9tYXApIHtcbiAgICAgICAgICAgIGNvcm5lcl9wb3NpdGlvbiArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBQaXRjaGluZyB0aGUgY2lyY2xlIHdpdGggdGhlIG1hcCBlZmZlY3RpdmVseSBzY2FsZXMgaXQgd2l0aCB0aGUgbWFwXG4gICAgICAgICAgICAvLyBUbyBjb3VudGVyYWN0IHRoZSBlZmZlY3QgZm9yIHBpdGNoLXNjYWxlOiB2aWV3cG9ydCwgd2UgcmVzY2FsZSB0aGVcbiAgICAgICAgICAgIC8vIHdob2xlIGNpcmNsZSBiYXNlZCBvbiB0aGUgcGl0Y2ggc2NhbGluZyBlZmZlY3QgYXQgaXRzIGNlbnRyYWwgcG9pbnRcbiAgICAgICAgICAgIHZlYzQgcHJvamVjdGVkX2NlbnRlciA9IHVfbWF0cml4ICogdmVjNChjaXJjbGVfY2VudGVyLCAwLCAxKTtcbiAgICAgICAgICAgIGNvcm5lcl9wb3NpdGlvbiArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGUgKiAocHJvamVjdGVkX2NlbnRlci53IC8gdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGNvcm5lcl9wb3NpdGlvbiwgMCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoY2lyY2xlX2NlbnRlciwgMCwgMSk7XG5cbiAgICAgICAgaWYgKHVfc2NhbGVfd2l0aF9tYXApIHtcbiAgICAgICAgICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGV4dHJ1ZGUgKiAocmFkaXVzICsgc3Ryb2tlX3dpZHRoKSAqIHVfZXh0cnVkZV9zY2FsZSAqIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGV4dHJ1ZGUgKiAocmFkaXVzICsgc3Ryb2tlX3dpZHRoKSAqIHVfZXh0cnVkZV9zY2FsZSAqIGdsX1Bvc2l0aW9uLnc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGEgbWluaW11bSBibHVyIGRpc3RhbmNlIHRoYXQgc2VydmVzIGFzIGEgZmF1eC1hbnRpYWxpYXNpbmcgZm9yXG4gICAgLy8gdGhlIGNpcmNsZS4gc2luY2UgYmx1ciBpcyBhIHJhdGlvIG9mIHRoZSBjaXJjbGUncyBzaXplIGFuZCB0aGUgaW50ZW50IGlzXG4gICAgLy8gdG8ga2VlcCB0aGUgYmx1ciBhdCByb3VnaGx5IDFweCwgdGhlIHR3byBhcmUgaW52ZXJzZWx5IHJlbGF0ZWQuXG4gICAgbG93cCBmbG9hdCBhbnRpYWxpYXNibHVyID0gMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gKHJhZGl1cyArIHN0cm9rZV93aWR0aCk7XG5cbiAgICB2X2RhdGEgPSB2ZWMzKGV4dHJ1ZGUueCwgZXh0cnVkZS55LCBhbnRpYWxpYXNibHVyKTtcbn1cbiJ9LGNsaXBwaW5nTWFzazp7ZnJhZ21lbnRTb3VyY2U6InZvaWQgbWFpbigpIHtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG59XG4iLHZlcnRleFNvdXJjZToiYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbn1cbiJ9LGhlYXRtYXA6e2ZyYWdtZW50U291cmNlOiIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IHdlaWdodFxuXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfaW50ZW5zaXR5O1xudmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcblxuLy8gR2F1c3NpYW4ga2VybmVsIGNvZWZmaWNpZW50OiAxIC8gc3FydCgyICogUEkpXG4jZGVmaW5lIEdBVVNTX0NPRUYgMC4zOTg5NDIyODA0MDE0MzI3XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCB3ZWlnaHRcblxuICAgIC8vIEtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gd2l0aCBhIEdhdXNzaWFuIGtlcm5lbCBvZiBzaXplIDV4NVxuICAgIGZsb2F0IGQgPSAtMC41ICogMy4wICogMy4wICogZG90KHZfZXh0cnVkZSwgdl9leHRydWRlKTtcbiAgICBmbG9hdCB2YWwgPSB3ZWlnaHQgKiB1X2ludGVuc2l0eSAqIEdBVVNTX0NPRUYgKiBleHAoZCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZhbCwgMS4wLCAxLjAsIDEuMCk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IHdlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIGZsb2F0IHVfZXh0cnVkZV9zY2FsZTtcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xudW5pZm9ybSBmbG9hdCB1X2ludGVuc2l0eTtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XG5cbi8vIEVmZmVjdGl2ZSBcIjBcIiBpbiB0aGUga2VybmVsIGRlbnNpdHkgdGV4dHVyZSB0byBhZGp1c3QgdGhlIGtlcm5lbCBzaXplIHRvO1xuLy8gdGhpcyBlbXBpcmljYWxseSBjaG9zZW4gbnVtYmVyIG1pbmltaXplcyBhcnRpZmFjdHMgb24gb3ZlcmxhcHBpbmcga2VybmVsc1xuLy8gZm9yIHR5cGljYWwgaGVhdG1hcCBjYXNlcyAoYXNzdW1pbmcgY2x1c3RlcmVkIHNvdXJjZSlcbmNvbnN0IGhpZ2hwIGZsb2F0IFpFUk8gPSAxLjAgLyAyNTUuMCAvIDE2LjA7XG5cbi8vIEdhdXNzaWFuIGtlcm5lbCBjb2VmZmljaWVudDogMSAvIHNxcnQoMiAqIFBJKVxuI2RlZmluZSBHQVVTU19DT0VGIDAuMzk4OTQyMjgwNDAxNDMyN1xuXG52b2lkIG1haW4odm9pZCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IHdlaWdodFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG5cbiAgICAvLyB1bmVuY29kZSB0aGUgZXh0cnVzaW9uIHZlY3RvciB0aGF0IHdlIHNudWNrIGludG8gdGhlIGFfcG9zIHZlY3RvclxuICAgIHZlYzIgdW5zY2FsZWRfZXh0cnVkZSA9IHZlYzIobW9kKGFfcG9zLCAyLjApICogMi4wIC0gMS4wKTtcblxuICAgIC8vIFRoaXMgJ2V4dHJ1ZGUnIGNvbWVzIGluIHJhbmdpbmcgZnJvbSBbLTEsIC0xXSwgdG8gWzEsIDFdLiAgV2UnbGwgdXNlXG4gICAgLy8gaXQgdG8gcHJvZHVjZSB0aGUgdmVydGljZXMgb2YgYSBzcXVhcmUgbWVzaCBmcmFtaW5nIHRoZSBwb2ludCBmZWF0dXJlXG4gICAgLy8gd2UncmUgYWRkaW5nIHRvIHRoZSBrZXJuZWwgZGVuc2l0eSB0ZXh0dXJlLiAgV2UnbGwgYWxzbyBwYXNzIGl0IGFzXG4gICAgLy8gYSB2YXJ5aW5nLCBzbyB0aGF0IHRoZSBmcmFnbWVudCBzaGFkZXIgY2FuIGRldGVybWluZSB0aGUgZGlzdGFuY2Ugb2ZcbiAgICAvLyBlYWNoIGZyYWdtZW50IGZyb20gdGhlIHBvaW50IGZlYXR1cmUuXG4gICAgLy8gQmVmb3JlIHdlIGRvIHNvLCB3ZSBuZWVkIHRvIHNjYWxlIGl0IHVwIHN1ZmZpY2llbnRseSBzbyB0aGF0IHRoZVxuICAgIC8vIGtlcm5lbCBmYWxscyBlZmZlY3RpdmVseSB0byB6ZXJvIGF0IHRoZSBlZGdlIG9mIHRoZSBtZXNoLlxuICAgIC8vIFRoYXQgaXMsIHdlIHdhbnQgdG8ga25vdyBTIHN1Y2ggdGhhdFxuICAgIC8vIHdlaWdodCAqIHVfaW50ZW5zaXR5ICogR0FVU1NfQ09FRiAqIGV4cCgtMC41ICogMy4wXjIgKiBTXjIpID09IFpFUk9cbiAgICAvLyBXaGljaCBzb2x2ZXMgdG86XG4gICAgLy8gUyA9IHNxcnQoLTIuMCAqIGxvZyhaRVJPIC8gKHdlaWdodCAqIHVfaW50ZW5zaXR5ICogR0FVU1NfQ09FRikpKSAvIDMuMFxuICAgIGZsb2F0IFMgPSBzcXJ0KC0yLjAgKiBsb2coWkVSTyAvIHdlaWdodCAvIHVfaW50ZW5zaXR5IC8gR0FVU1NfQ09FRikpIC8gMy4wO1xuXG4gICAgLy8gUGFzcyB0aGUgdmFyeWluZyBpbiB1bml0cyBvZiByYWRpdXNcbiAgICB2X2V4dHJ1ZGUgPSBTICogdW5zY2FsZWRfZXh0cnVkZTtcblxuICAgIC8vIFNjYWxlIGJ5IHJhZGl1cyBhbmQgdGhlIHpvb20tYmFzZWQgc2NhbGUgZmFjdG9yIHRvIHByb2R1Y2UgYWN0dWFsXG4gICAgLy8gbWVzaCBwb3NpdGlvblxuICAgIHZlYzIgZXh0cnVkZSA9IHZfZXh0cnVkZSAqIHJhZGl1cyAqIHVfZXh0cnVkZV9zY2FsZTtcblxuICAgIC8vIG11bHRpcGx5IGFfcG9zIGJ5IDAuNSwgc2luY2Ugd2UgaGFkIGl0ICogMiBpbiBvcmRlciB0byBzbmVha1xuICAgIC8vIGluIGV4dHJ1c2lvbiBkYXRhXG4gICAgdmVjNCBwb3MgPSB2ZWM0KGZsb29yKGFfcG9zICogMC41KSArIGV4dHJ1ZGUsIDAsIDEpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHBvcztcbn1cbiJ9LGhlYXRtYXBUZXh0dXJlOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfY29sb3JfcmFtcDtcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZmxvYXQgdCA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3BvcykucjtcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVfY29sb3JfcmFtcCwgdmVjMih0LCAwLjUpKTtcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIHVfb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X3dvcmxkO1xuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcyAqIHVfd29ybGQsIDAsIDEpO1xuXG4gICAgdl9wb3MueCA9IGFfcG9zLng7XG4gICAgdl9wb3MueSA9IDEuMCAtIGFfcG9zLnk7XG59XG4ifSxjb2xsaXNpb25Cb3g6e2ZyYWdtZW50U291cmNlOiJcbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcblxudm9pZCBtYWluKCkge1xuXG4gICAgZmxvYXQgYWxwaGEgPSAwLjU7XG5cbiAgICAvLyBSZWQgPSBjb2xsaXNpb24sIGhpZGUgbGFiZWxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCkgKiBhbHBoYTtcblxuICAgIC8vIEJsdWUgPSBubyBjb2xsaXNpb24sIGxhYmVsIGlzIHNob3dpbmdcbiAgICBpZiAodl9wbGFjZWQgPiAwLjUpIHtcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMS4wLCAwLjUpICogYWxwaGE7XG4gICAgfVxuXG4gICAgaWYgKHZfbm90VXNlZCA+IDAuNSkge1xuICAgICAgICAvLyBUaGlzIGJveCBub3QgdXNlZCwgZmFkZSBpdCBvdXRcbiAgICAgICAgZ2xfRnJhZ0NvbG9yICo9IC4xO1xuICAgIH1cbn0iLHZlcnRleFNvdXJjZToiYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX2FuY2hvcl9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX2V4dHJ1ZGU7XG5hdHRyaWJ1dGUgdmVjMiBhX3BsYWNlZDtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcbnVuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xuXG52YXJ5aW5nIGZsb2F0IHZfcGxhY2VkO1xudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfYW5jaG9yX3BvcywgMCwgMSk7XG4gICAgaGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSA9IHByb2plY3RlZFBvaW50Lnc7XG4gICAgaGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXG4gICAgICAgIDAuNSArIDAuNSAqICh1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSxcbiAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBib3hlcyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcbiAgICAgICAgNC4wKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLjAsIDEuMCk7XG4gICAgZ2xfUG9zaXRpb24ueHkgKz0gYV9leHRydWRlICogdV9leHRydWRlX3NjYWxlICogZ2xfUG9zaXRpb24udyAqIGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbztcblxuICAgIHZfcGxhY2VkID0gYV9wbGFjZWQueDtcbiAgICB2X25vdFVzZWQgPSBhX3BsYWNlZC55O1xufVxuIn0sY29sbGlzaW9uQ2lyY2xlOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSBmbG9hdCB1X292ZXJzY2FsZV9mYWN0b3I7XG5cbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcbnZhcnlpbmcgZmxvYXQgdl9yYWRpdXM7XG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xudmFyeWluZyB2ZWMyIHZfZXh0cnVkZV9zY2FsZTtcblxudm9pZCBtYWluKCkge1xuICAgIGZsb2F0IGFscGhhID0gMC41O1xuXG4gICAgLy8gUmVkID0gY29sbGlzaW9uLCBoaWRlIGxhYmVsXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMS4wLCAwLjAsIDAuMCwgMS4wKSAqIGFscGhhO1xuXG4gICAgLy8gQmx1ZSA9IG5vIGNvbGxpc2lvbiwgbGFiZWwgaXMgc2hvd2luZ1xuICAgIGlmICh2X3BsYWNlZCA+IDAuNSkge1xuICAgICAgICBjb2xvciA9IHZlYzQoMC4wLCAwLjAsIDEuMCwgMC41KSAqIGFscGhhO1xuICAgIH1cblxuICAgIGlmICh2X25vdFVzZWQgPiAwLjUpIHtcbiAgICAgICAgLy8gVGhpcyBib3ggbm90IHVzZWQsIGZhZGUgaXQgb3V0XG4gICAgICAgIGNvbG9yICo9IC4yO1xuICAgIH1cblxuICAgIGZsb2F0IGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoID0gbGVuZ3RoKHZfZXh0cnVkZV9zY2FsZSk7XG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGggPSBsZW5ndGgodl9leHRydWRlKSAqIGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoO1xuICAgIGZsb2F0IHN0cm9rZV93aWR0aCA9IDE1LjAgKiBleHRydWRlX3NjYWxlX2xlbmd0aCAvIHVfb3ZlcnNjYWxlX2ZhY3RvcjtcbiAgICBmbG9hdCByYWRpdXMgPSB2X3JhZGl1cyAqIGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoO1xuXG4gICAgZmxvYXQgZGlzdGFuY2VfdG9fZWRnZSA9IGFicyhleHRydWRlX2xlbmd0aCAtIHJhZGl1cyk7XG4gICAgZmxvYXQgb3BhY2l0eV90ID0gc21vb3Roc3RlcCgtc3Ryb2tlX3dpZHRoLCAwLjAsIC1kaXN0YW5jZV90b19lZGdlKTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHlfdCAqIGNvbG9yO1xufVxuIix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzIgYV9hbmNob3JfcG9zO1xuYXR0cmlidXRlIHZlYzIgYV9leHRydWRlO1xuYXR0cmlidXRlIHZlYzIgYV9wbGFjZWQ7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7XG51bmlmb3JtIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcblxudmFyeWluZyBmbG9hdCB2X3BsYWNlZDtcbnZhcnlpbmcgZmxvYXQgdl9ub3RVc2VkO1xudmFyeWluZyBmbG9hdCB2X3JhZGl1cztcblxudmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGVfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfYW5jaG9yX3BvcywgMCwgMSk7XG4gICAgaGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSA9IHByb2plY3RlZFBvaW50Lnc7XG4gICAgaGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXG4gICAgICAgIDAuNSArIDAuNSAqICh1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSxcbiAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBjaXJjbGVzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xuICAgICAgICA0LjApO1xuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAuMCwgMS4wKTtcblxuICAgIGhpZ2hwIGZsb2F0IHBhZGRpbmdfZmFjdG9yID0gMS4yOyAvLyBQYWQgdGhlIHZlcnRpY2VzIHNsaWdodGx5IHRvIG1ha2Ugcm9vbSBmb3IgYW50aS1hbGlhcyBibHVyXG4gICAgZ2xfUG9zaXRpb24ueHkgKz0gYV9leHRydWRlICogdV9leHRydWRlX3NjYWxlICogcGFkZGluZ19mYWN0b3IgKiBnbF9Qb3NpdGlvbi53ICogY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO1xuXG4gICAgdl9wbGFjZWQgPSBhX3BsYWNlZC54O1xuICAgIHZfbm90VXNlZCA9IGFfcGxhY2VkLnk7XG4gICAgdl9yYWRpdXMgPSBhYnMoYV9leHRydWRlLnkpOyAvLyBXZSBkb24ndCBwaXRjaCB0aGUgY2lyY2xlcywgc28gYm90aCB1bml0cyBvZiB0aGUgZXh0cnVzaW9uIHZlY3RvciBhcmUgZXF1YWwgaW4gbWFnbml0dWRlIHRvIHRoZSByYWRpdXNcblxuICAgIHZfZXh0cnVkZSA9IGFfZXh0cnVkZSAqIHBhZGRpbmdfZmFjdG9yO1xuICAgIHZfZXh0cnVkZV9zY2FsZSA9IHVfZXh0cnVkZV9zY2FsZSAqIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAqIGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbztcbn1cbiJ9LGRlYnVnOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSBoaWdocCB2ZWM0IHVfY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yO1xufVxuIix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG59XG4ifSxmaWxsOntmcmFnbWVudFNvdXJjZToiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiBvcGFjaXR5O1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xufVxuIn0sZmlsbE91dGxpbmU6e2ZyYWdtZW50U291cmNlOiIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfcG9zIC0gZ2xfRnJhZ0Nvb3JkLnh5KTtcbiAgICBmbG9hdCBhbHBoYSA9IDEuMCAtIHNtb290aHN0ZXAoMC4wLCAxLjAsIGRpc3QpO1xuICAgIGdsX0ZyYWdDb2xvciA9IG91dGxpbmVfY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV93b3JsZDtcblxudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgIHZfcG9zID0gKGdsX1Bvc2l0aW9uLnh5IC8gZ2xfUG9zaXRpb24udyArIDEuMCkgLyAyLjAgKiB1X3dvcmxkO1xufVxuIn0sZmlsbE91dGxpbmVQYXR0ZXJuOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO1xudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcbnVuaWZvcm0gZmxvYXQgdV9taXg7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIHZlYzIgaW1hZ2Vjb29yZCA9IG1vZCh2X3Bvc19hLCAxLjApO1xuICAgIHZlYzIgcG9zID0gbWl4KHVfcGF0dGVybl90bF9hIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYSAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZCk7XG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zKTtcblxuICAgIHZlYzIgaW1hZ2Vjb29yZF9iID0gbW9kKHZfcG9zX2IsIDEuMCk7XG4gICAgdmVjMiBwb3MyID0gbWl4KHVfcGF0dGVybl90bF9iIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYiAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZF9iKTtcbiAgICB2ZWM0IGNvbG9yMiA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MyKTtcblxuICAgIC8vIGZpbmQgZGlzdGFuY2UgdG8gb3V0bGluZSBmb3IgYWxwaGEgaW50ZXJwb2xhdGlvblxuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X3BvcyAtIGdsX0ZyYWdDb29yZC54eSk7XG4gICAgZmxvYXQgYWxwaGEgPSAxLjAgLSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBkaXN0KTtcblxuXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCkgKiBhbHBoYSAqIG9wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV93b3JsZDtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjtcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcblxuICAgIHZfcG9zX2EgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9hICogdV9wYXR0ZXJuX3NpemVfYSwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xuICAgIHZfcG9zX2IgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9iICogdV9wYXR0ZXJuX3NpemVfYiwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xuXG4gICAgdl9wb3MgPSAoZ2xfUG9zaXRpb24ueHkgLyBnbF9Qb3NpdGlvbi53ICsgMS4wKSAvIDIuMCAqIHVfd29ybGQ7XG59XG4ifSxmaWxsUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XG5cbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIGltYWdlY29vcmRfYik7XG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KSAqIG9wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG5cbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcbn1cbiJ9LGZpbGxFeHRydXNpb246e2ZyYWdtZW50U291cmNlOiJ2YXJ5aW5nIHZlYzQgdl9jb2xvcjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3Jcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdl9jb2xvcjtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMyB1X2xpZ2h0Y29sb3I7XG51bmlmb3JtIGxvd3AgdmVjMyB1X2xpZ2h0cG9zO1xudW5pZm9ybSBsb3dwIGZsb2F0IHVfbGlnaHRpbnRlbnNpdHk7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzQgYV9ub3JtYWxfZWQ7XG5cbnZhcnlpbmcgdmVjNCB2X2NvbG9yO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3Jcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuXG4gICAgdmVjMyBub3JtYWwgPSBhX25vcm1hbF9lZC54eXo7XG5cbiAgICBiYXNlID0gbWF4KDAuMCwgYmFzZSk7XG4gICAgaGVpZ2h0ID0gbWF4KDAuMCwgaGVpZ2h0KTtcblxuICAgIGZsb2F0IHQgPSBtb2Qobm9ybWFsLngsIDIuMCk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgdCA+IDAuMCA/IGhlaWdodCA6IGJhc2UsIDEpO1xuXG4gICAgLy8gUmVsYXRpdmUgbHVtaW5hbmNlIChob3cgZGFyay9icmlnaHQgaXMgdGhlIHN1cmZhY2UgY29sb3I/KVxuICAgIGZsb2F0IGNvbG9ydmFsdWUgPSBjb2xvci5yICogMC4yMTI2ICsgY29sb3IuZyAqIDAuNzE1MiArIGNvbG9yLmIgKiAwLjA3MjI7XG5cbiAgICB2X2NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xuXG4gICAgLy8gQWRkIHNsaWdodCBhbWJpZW50IGxpZ2h0aW5nIHNvIG5vIGV4dHJ1c2lvbnMgYXJlIHRvdGFsbHkgYmxhY2tcbiAgICB2ZWM0IGFtYmllbnRsaWdodCA9IHZlYzQoMC4wMywgMC4wMywgMC4wMywgMS4wKTtcbiAgICBjb2xvciArPSBhbWJpZW50bGlnaHQ7XG5cbiAgICAvLyBDYWxjdWxhdGUgY29zKHRoZXRhKSwgd2hlcmUgdGhldGEgaXMgdGhlIGFuZ2xlIGJldHdlZW4gc3VyZmFjZSBub3JtYWwgYW5kIGRpZmZ1c2UgbGlnaHQgcmF5XG4gICAgZmxvYXQgZGlyZWN0aW9uYWwgPSBjbGFtcChkb3Qobm9ybWFsIC8gMTYzODQuMCwgdV9saWdodHBvcyksIDAuMCwgMS4wKTtcblxuICAgIC8vIEFkanVzdCBkaXJlY3Rpb25hbCBzbyB0aGF0XG4gICAgLy8gdGhlIHJhbmdlIG9mIHZhbHVlcyBmb3IgaGlnaGxpZ2h0L3NoYWRpbmcgaXMgbmFycm93ZXJcbiAgICAvLyB3aXRoIGxvd2VyIGxpZ2h0IGludGVuc2l0eVxuICAgIC8vIGFuZCB3aXRoIGxpZ2h0ZXIvYnJpZ2h0ZXIgc3VyZmFjZSBjb2xvcnNcbiAgICBkaXJlY3Rpb25hbCA9IG1peCgoMS4wIC0gdV9saWdodGludGVuc2l0eSksIG1heCgoMS4wIC0gY29sb3J2YWx1ZSArIHVfbGlnaHRpbnRlbnNpdHkpLCAxLjApLCBkaXJlY3Rpb25hbCk7XG5cbiAgICAvLyBBZGQgZ3JhZGllbnQgYWxvbmcgeiBheGlzIG9mIHNpZGUgc3VyZmFjZXNcbiAgICBpZiAobm9ybWFsLnkgIT0gMC4wKSB7XG4gICAgICAgIGRpcmVjdGlvbmFsICo9IGNsYW1wKCh0ICsgYmFzZSkgKiBwb3coaGVpZ2h0IC8gMTUwLjAsIDAuNSksIG1peCgwLjcsIDAuOTgsIDEuMCAtIHVfbGlnaHRpbnRlbnNpdHkpLCAxLjApO1xuICAgIH1cblxuICAgIC8vIEFzc2lnbiBmaW5hbCBjb2xvciBiYXNlZCBvbiBzdXJmYWNlICsgYW1iaWVudCBsaWdodCBjb2xvciwgZGlmZnVzZSBsaWdodCBkaXJlY3Rpb25hbCwgYW5kIGxpZ2h0IGNvbG9yXG4gICAgLy8gd2l0aCBsb3dlciBib3VuZHMgYWRqdXN0ZWQgdG8gaHVlIG9mIGxpZ2h0XG4gICAgLy8gc28gdGhhdCBzaGFkaW5nIGlzIHRpbnRlZCB3aXRoIHRoZSBjb21wbGVtZW50YXJ5IChvcHBvc2l0ZSkgY29sb3IgdG8gdGhlIGxpZ2h0IGNvbG9yXG4gICAgdl9jb2xvci5yICs9IGNsYW1wKGNvbG9yLnIgKiBkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvci5yLCBtaXgoMC4wLCAwLjMsIDEuMCAtIHVfbGlnaHRjb2xvci5yKSwgMS4wKTtcbiAgICB2X2NvbG9yLmcgKz0gY2xhbXAoY29sb3IuZyAqIGRpcmVjdGlvbmFsICogdV9saWdodGNvbG9yLmcsIG1peCgwLjAsIDAuMywgMS4wIC0gdV9saWdodGNvbG9yLmcpLCAxLjApO1xuICAgIHZfY29sb3IuYiArPSBjbGFtcChjb2xvci5iICogZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IuYiwgbWl4KDAuMCwgMC4zLCAxLjAgLSB1X2xpZ2h0Y29sb3IuYiksIDEuMCk7XG59XG4ifSxmaWxsRXh0cnVzaW9uUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xudmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxuXG4gICAgdmVjMiBpbWFnZWNvb3JkID0gbW9kKHZfcG9zX2EsIDEuMCk7XG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkKTtcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xuXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkX2IpO1xuICAgIHZlYzQgY29sb3IyID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvczIpO1xuXG4gICAgdmVjNCBtaXhlZENvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBtaXhlZENvbG9yICogdl9saWdodGluZztcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjtcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcbnVuaWZvcm0gZmxvYXQgdV9oZWlnaHRfZmFjdG9yO1xuXG51bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO1xudW5pZm9ybSBsb3dwIHZlYzMgdV9saWdodHBvcztcbnVuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xudmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XG52YXJ5aW5nIGZsb2F0IHZfZGlyZWN0aW9uYWw7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxuXG4gICAgdmVjMyBub3JtYWwgPSBhX25vcm1hbF9lZC54eXo7XG4gICAgZmxvYXQgZWRnZWRpc3RhbmNlID0gYV9ub3JtYWxfZWQudztcblxuICAgIGJhc2UgPSBtYXgoMC4wLCBiYXNlKTtcbiAgICBoZWlnaHQgPSBtYXgoMC4wLCBoZWlnaHQpO1xuXG4gICAgZmxvYXQgdCA9IG1vZChub3JtYWwueCwgMi4wKTtcbiAgICBmbG9hdCB6ID0gdCA+IDAuMCA/IGhlaWdodCA6IGJhc2U7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgeiwgMSk7XG5cbiAgICB2ZWMyIHBvcyA9IG5vcm1hbC54ID09IDEuMCAmJiBub3JtYWwueSA9PSAwLjAgJiYgbm9ybWFsLnogPT0gMTYzODQuMFxuICAgICAgICA/IGFfcG9zIC8vIGV4dHJ1c2lvbiB0b3BcbiAgICAgICAgOiB2ZWMyKGVkZ2VkaXN0YW5jZSwgeiAqIHVfaGVpZ2h0X2ZhY3Rvcik7IC8vIGV4dHJ1c2lvbiBzaWRlXG5cbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIHBvcyk7XG4gICAgdl9wb3NfYiA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBwb3MpO1xuXG4gICAgdl9saWdodGluZyA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcbiAgICBmbG9hdCBkaXJlY3Rpb25hbCA9IGNsYW1wKGRvdChub3JtYWwgLyAxNjM4My4wLCB1X2xpZ2h0cG9zKSwgMC4wLCAxLjApO1xuICAgIGRpcmVjdGlvbmFsID0gbWl4KCgxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgbWF4KCgwLjUgKyB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKSwgZGlyZWN0aW9uYWwpO1xuXG4gICAgaWYgKG5vcm1hbC55ICE9IDAuMCkge1xuICAgICAgICBkaXJlY3Rpb25hbCAqPSBjbGFtcCgodCArIGJhc2UpICogcG93KGhlaWdodCAvIDE1MC4wLCAwLjUpLCBtaXgoMC43LCAwLjk4LCAxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKTtcbiAgICB9XG5cbiAgICB2X2xpZ2h0aW5nLnJnYiArPSBjbGFtcChkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvciwgbWl4KHZlYzMoMC4wKSwgdmVjMygwLjMpLCAxLjAgLSB1X2xpZ2h0Y29sb3IpLCB2ZWMzKDEuMCkpO1xufVxuIn0sZXh0cnVzaW9uVGV4dHVyZTp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcbnZhcnlpbmcgdmVjMiB2X3Bvcztcblxudm9pZCBtYWluKCkge1xuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3BvcykgKiB1X29wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV93b3JsZDtcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKiB1X3dvcmxkLCAwLCAxKTtcblxuICAgIHZfcG9zLnggPSBhX3Bvcy54O1xuICAgIHZfcG9zLnkgPSAxLjAgLSBhX3Bvcy55O1xufVxuIn0saGlsbHNoYWRlUHJlcGFyZTp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2VuZGlmXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG51bmlmb3JtIHZlYzIgdV9kaW1lbnNpb247XG51bmlmb3JtIGZsb2F0IHVfem9vbTtcbnVuaWZvcm0gZmxvYXQgdV9tYXh6b29tO1xuXG5mbG9hdCBnZXRFbGV2YXRpb24odmVjMiBjb29yZCwgZmxvYXQgYmlhcykge1xuICAgIC8vIENvbnZlcnQgZW5jb2RlZCBlbGV2YXRpb24gdmFsdWUgdG8gbWV0ZXJzXG4gICAgdmVjNCBkYXRhID0gdGV4dHVyZTJEKHVfaW1hZ2UsIGNvb3JkKSAqIDI1NS4wO1xuICAgIHJldHVybiAoZGF0YS5yICsgZGF0YS5nICogMjU2LjAgKyBkYXRhLmIgKiAyNTYuMCAqIDI1Ni4wKSAvIDQuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgZXBzaWxvbiA9IDEuMCAvIHVfZGltZW5zaW9uO1xuXG4gICAgLy8gcXVlcmllZCBwaXhlbHM6XG4gICAgLy8gKy0tLS0tLS0tLS0tK1xuICAgIC8vIHwgICB8ICAgfCAgIHxcbiAgICAvLyB8IGEgfCBiIHwgYyB8XG4gICAgLy8gfCAgIHwgICB8ICAgfFxuICAgIC8vICstLS0tLS0tLS0tLStcbiAgICAvLyB8ICAgfCAgIHwgICB8XG4gICAgLy8gfCBkIHwgZSB8IGYgfFxuICAgIC8vIHwgICB8ICAgfCAgIHxcbiAgICAvLyArLS0tLS0tLS0tLS0rXG4gICAgLy8gfCAgIHwgICB8ICAgfFxuICAgIC8vIHwgZyB8IGggfCBpIHxcbiAgICAvLyB8ICAgfCAgIHwgICB8XG4gICAgLy8gKy0tLS0tLS0tLS0tK1xuXG4gICAgZmxvYXQgYSA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoLWVwc2lsb24ueCwgLWVwc2lsb24ueSksIDAuMCk7XG4gICAgZmxvYXQgYiA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoMCwgLWVwc2lsb24ueSksIDAuMCk7XG4gICAgZmxvYXQgYyA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoZXBzaWxvbi54LCAtZXBzaWxvbi55KSwgMC4wKTtcbiAgICBmbG9hdCBkID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigtZXBzaWxvbi54LCAwKSwgMC4wKTtcbiAgICBmbG9hdCBlID0gZ2V0RWxldmF0aW9uKHZfcG9zLCAwLjApO1xuICAgIGZsb2F0IGYgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgMCksIDAuMCk7XG4gICAgZmxvYXQgZyA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoLWVwc2lsb24ueCwgZXBzaWxvbi55KSwgMC4wKTtcbiAgICBmbG9hdCBoID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigwLCBlcHNpbG9uLnkpLCAwLjApO1xuICAgIGZsb2F0IGkgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgZXBzaWxvbi55KSwgMC4wKTtcblxuICAgIC8vIGhlcmUgd2UgZGl2aWRlIHRoZSB4IGFuZCB5IHNsb3BlcyBieSA4ICogcGl4ZWwgc2l6ZVxuICAgIC8vIHdoZXJlIHBpeGVsIHNpemUgKGFrYSBtZXRlcnMvcGl4ZWwpIGlzOlxuICAgIC8vIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIHdvcmxkIC8gKHBpeGVscyBwZXIgdGlsZSAqIG51bWJlciBvZiB0aWxlcylcbiAgICAvLyB3aGljaCBpcyBlcXVpdmFsZW50IHRvOiA4ICogNDAwNzUwMTYuNjg1NTc4NSAvICg1MTIgKiBwb3coMiwgdV96b29tKSlcbiAgICAvLyB3aGljaCBjYW4gYmUgcmVkdWNlZCB0bzogcG93KDIsIDE5LjI1NjE5OTc4NTI3IC0gdV96b29tKVxuICAgIC8vIHdlIHdhbnQgdG8gdmVydGljYWxseSBleGFnZ2VyYXRlIHRoZSBoaWxsc2hhZGluZyB0aG91Z2gsIGJlY2F1c2Ugb3RoZXJ3aXNlXG4gICAgLy8gaXQgaXMgYmFyZWx5IG5vdGljZWFibGUgYXQgbG93IHpvb21zLiB0byBkbyB0aGlzLCB3ZSBtdWx0aXBseSB0aGlzIGJ5IHNvbWVcbiAgICAvLyBzY2FsZSBmYWN0b3IgcG93KDIsICh1X3pvb20gLSB1X21heHpvb20pICogYSkgd2hlcmUgYSBpcyBhbiBhcmJpdHJhcnkgdmFsdWVcbiAgICAvLyBIZXJlIHdlIHVzZSBhPTAuMyB3aGljaCB3b3JrcyBvdXQgdG8gdGhlIGV4cHJlc3Npb24gYmVsb3cuIHNlZSBcbiAgICAvLyBuaWNraWRsdWdhc2gncyBhd2Vzb21lIGJyZWFrZG93biBmb3IgbW9yZSBpbmZvXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC81Mjg2I2Rpc2N1c3Npb25fcjE0ODQxOTU1NlxuICAgIGZsb2F0IGV4YWdnZXJhdGlvbiA9IHVfem9vbSA8IDIuMCA/IDAuNCA6IHVfem9vbSA8IDQuNSA/IDAuMzUgOiAwLjM7XG5cbiAgICB2ZWMyIGRlcml2ID0gdmVjMihcbiAgICAgICAgKGMgKyBmICsgZiArIGkpIC0gKGEgKyBkICsgZCArIGcpLFxuICAgICAgICAoZyArIGggKyBoICsgaSkgLSAoYSArIGIgKyBiICsgYylcbiAgICApIC8gIHBvdygyLjAsICh1X3pvb20gLSB1X21heHpvb20pICogZXhhZ2dlcmF0aW9uICsgMTkuMjU2MiAtIHVfem9vbSk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjbGFtcCh2ZWM0KFxuICAgICAgICBkZXJpdi54IC8gMi4wICsgMC41LFxuICAgICAgICBkZXJpdi55IC8gMi4wICsgMC41LFxuICAgICAgICAxLjAsXG4gICAgICAgIDEuMCksIDAuMCwgMS4wKTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG4gICAgdl9wb3MgPSAoYV90ZXh0dXJlX3BvcyAvIDgxOTIuMCkgLyAyLjAgKyAwLjI1O1xufVxuIn0saGlsbHNoYWRlOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcbnZhcnlpbmcgdmVjMiB2X3BvcztcblxudW5pZm9ybSB2ZWMyIHVfbGF0cmFuZ2U7XG51bmlmb3JtIHZlYzIgdV9saWdodDtcbnVuaWZvcm0gdmVjNCB1X3NoYWRvdztcbnVuaWZvcm0gdmVjNCB1X2hpZ2hsaWdodDtcbnVuaWZvcm0gdmVjNCB1X2FjY2VudDtcblxuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBwaXhlbCA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3Bvcyk7XG5cbiAgICB2ZWMyIGRlcml2ID0gKChwaXhlbC5yZyAqIDIuMCkgLSAxLjApO1xuXG4gICAgLy8gV2UgZGl2aWRlIHRoZSBzbG9wZSBieSBhIHNjYWxlIGZhY3RvciBiYXNlZCBvbiB0aGUgY29zaW4gb2YgdGhlIHBpeGVsJ3MgYXBwcm94aW1hdGUgbGF0aXR1ZGVcbiAgICAvLyB0byBhY2NvdW50IGZvciBtZXJjYXRvciBwcm9qZWN0aW9uIGRpc3RvcnRpb24uIHNlZSAjNDgwNyBmb3IgZGV0YWlsc1xuICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gY29zKHJhZGlhbnMoKHVfbGF0cmFuZ2VbMF0gLSB1X2xhdHJhbmdlWzFdKSAqICgxLjAgLSB2X3Bvcy55KSArIHVfbGF0cmFuZ2VbMV0pKTtcbiAgICAvLyBXZSBhbHNvIG11bHRpcGx5IHRoZSBzbG9wZSBieSBhbiBhcmJpdHJhcnkgei1mYWN0b3Igb2YgMS4yNVxuICAgIGZsb2F0IHNsb3BlID0gYXRhbigxLjI1ICogbGVuZ3RoKGRlcml2KSAvIHNjYWxlRmFjdG9yKTtcbiAgICBmbG9hdCBhc3BlY3QgPSBkZXJpdi54ICE9IDAuMCA/IGF0YW4oZGVyaXYueSwgLWRlcml2LngpIDogUEkgLyAyLjAgKiAoZGVyaXYueSA+IDAuMCA/IDEuMCA6IC0xLjApO1xuXG4gICAgZmxvYXQgaW50ZW5zaXR5ID0gdV9saWdodC54O1xuICAgIC8vIFdlIGFkZCBQSSB0byBtYWtlIHRoaXMgcHJvcGVydHkgbWF0Y2ggdGhlIGdsb2JhbCBsaWdodCBvYmplY3QsIHdoaWNoIGFkZHMgUEkvMiB0byB0aGUgbGlnaHQncyBhemltdXRoYWxcbiAgICAvLyBwb3NpdGlvbiBwcm9wZXJ0eSB0byBhY2NvdW50IGZvciAwZGVnIGNvcnJlc3BvbmRpbmcgdG8gbm9ydGgvdGhlIHRvcCBvZiB0aGUgdmlld3BvcnQgaW4gdGhlIHN0eWxlIHNwZWNcbiAgICAvLyBhbmQgdGhlIG9yaWdpbmFsIHNoYWRlciB3YXMgd3JpdHRlbiB0byBhY2NlcHQgKC1pbGx1bWluYXRpb25EaXJlY3Rpb24gLSA5MCkgYXMgdGhlIGF6aW11dGhhbC5cbiAgICBmbG9hdCBhemltdXRoID0gdV9saWdodC55ICsgUEk7XG5cbiAgICAvLyBXZSBzY2FsZSB0aGUgc2xvcGUgZXhwb25lbnRpYWxseSBiYXNlZCBvbiBpbnRlbnNpdHksIHVzaW5nIGEgY2FsY3VsYXRpb24gc2ltaWxhciB0b1xuICAgIC8vIHRoZSBleHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIGluIHRoZSBzdHlsZSBzcGVjOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2Jsb2IvbWFzdGVyL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUuanMjTDIxNy1MMjI4XG4gICAgLy8gc28gdGhhdCBoaWdoZXIgaW50ZW5zaXR5IHZhbHVlcyBjcmVhdGUgbW9yZSBvcGFxdWUgaGlsbHNoYWRpbmcuXG4gICAgZmxvYXQgYmFzZSA9IDEuODc1IC0gaW50ZW5zaXR5ICogMS43NTtcbiAgICBmbG9hdCBtYXhWYWx1ZSA9IDAuNSAqIFBJO1xuICAgIGZsb2F0IHNjYWxlZFNsb3BlID0gaW50ZW5zaXR5ICE9IDAuNSA/ICgocG93KGJhc2UsIHNsb3BlKSAtIDEuMCkgLyAocG93KGJhc2UsIG1heFZhbHVlKSAtIDEuMCkpICogbWF4VmFsdWUgOiBzbG9wZTtcblxuICAgIC8vIFRoZSBhY2NlbnQgY29sb3IgaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBjb3NpbmUgb2YgdGhlIHNsb3BlIHdoaWxlIHRoZSBzaGFkZSBjb2xvciBpcyBjYWxjdWxhdGVkIHdpdGggdGhlIHNpbmVcbiAgICAvLyBzbyB0aGF0IHRoZSBhY2NlbnQgY29sb3IncyByYXRlIG9mIGNoYW5nZSBlYXNlcyBpbiB3aGlsZSB0aGUgc2hhZGUgY29sb3IncyBlYXNlcyBvdXQuXG4gICAgZmxvYXQgYWNjZW50ID0gY29zKHNjYWxlZFNsb3BlKTtcbiAgICAvLyBXZSBtdWx0aXBseSBib3RoIHRoZSBhY2NlbnQgYW5kIHNoYWRlIGNvbG9yIGJ5IGEgY2xhbXBlZCBpbnRlbnNpdHkgdmFsdWVcbiAgICAvLyBzbyB0aGF0IGludGVuc2l0aWVzID49IDAuNSBkbyBub3QgYWRkaXRpb25hbGx5IGFmZmVjdCB0aGUgY29sb3IgdmFsdWVzXG4gICAgLy8gd2hpbGUgaW50ZW5zaXR5IHZhbHVlcyA8IDAuNSBtYWtlIHRoZSBvdmVyYWxsIGNvbG9yIG1vcmUgdHJhbnNwYXJlbnQuXG4gICAgdmVjNCBhY2NlbnRfY29sb3IgPSAoMS4wIC0gYWNjZW50KSAqIHVfYWNjZW50ICogY2xhbXAoaW50ZW5zaXR5ICogMi4wLCAwLjAsIDEuMCk7XG4gICAgZmxvYXQgc2hhZGUgPSBhYnMobW9kKChhc3BlY3QgKyBhemltdXRoKSAvIFBJICsgMC41LCAyLjApIC0gMS4wKTtcbiAgICB2ZWM0IHNoYWRlX2NvbG9yID0gbWl4KHVfc2hhZG93LCB1X2hpZ2hsaWdodCwgc2hhZGUpICogc2luKHNjYWxlZFNsb3BlKSAqIGNsYW1wKGludGVuc2l0eSAqIDIuMCwgMC4wLCAxLjApO1xuICAgIGdsX0ZyYWdDb2xvciA9IGFjY2VudF9jb2xvciAqICgxLjAgLSBzaGFkZV9jb2xvci5hKSArIHNoYWRlX2NvbG9yO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvcztcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICB2X3BvcyA9IGFfdGV4dHVyZV9wb3MgLyA4MTkyLjA7XG59XG4ifSxsaW5lOntmcmFnbWVudFNvdXJjZToiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XG4gICAgLy8gKHZfd2lkdGgyLnMpXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJcblxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cbiNkZWZpbmUgQU5USUFMSUFTSU5HIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTyAvIDIuMFxuXG4vLyBmbG9vcigxMjcgLyAyKSA9PSA2My4wXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxuLy8gdGhlcmUgYXJlIGFsc28gXCJzcGVjaWFsXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cbi8vIHRoaXMgY2FzZSkuXG4vLyAjZGVmaW5lIHNjYWxlIDYzLjBcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcblxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcbnVuaWZvcm0gdmVjMiB1X2dsX3VuaXRzX3RvX3BpeGVscztcblxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xudmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVzb2ZhcjtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuXG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcblxuICAgIHZfbGluZXNvZmFyID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiAyLjA7XG5cbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcblxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IGFfcG9zX25vcm1hbC56dztcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcblxuICAgIC8vIHRoZXNlIHRyYW5zZm9ybWF0aW9ucyB1c2VkIHRvIGJlIGFwcGxpZWQgaW4gdGhlIEpTIGFuZCBuYXRpdmUgY29kZSBiYXNlcy5cbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xuICAgIGZsb2F0IGhhbGZ3aWR0aCA9IHdpZHRoIC8gMi4wO1xuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XG5cbiAgICBmbG9hdCBpbnNldCA9IGdhcHdpZHRoICsgKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XG5cbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQyID0gb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xuXG4gICAgdmVjNCBwcm9qZWN0ZWRfZXh0cnVkZSA9IHVfbWF0cml4ICogdmVjNChkaXN0IC8gdV9yYXRpbywgMC4wLCAwLjApO1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KHBvcyArIG9mZnNldDIgLyB1X3JhdGlvLCAwLjAsIDEuMCkgKyBwcm9qZWN0ZWRfZXh0cnVkZTtcblxuICAgIC8vIGNhbGN1bGF0ZSBob3cgbXVjaCB0aGUgcGVyc3BlY3RpdmUgdmlldyBzcXVpc2hlcyBvciBzdHJldGNoZXMgdGhlIGV4dHJ1ZGVcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlID0gbGVuZ3RoKGRpc3QpO1xuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xuICAgIHZfZ2FtbWFfc2NhbGUgPSBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlIC8gZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTtcblxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcbn1cbiJ9LGxpbmVHcmFkaWVudDp7ZnJhZ21lbnRTb3VyY2U6IlxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG5cbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbnZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2Ugb2YgdGhlIHBpeGVsIGZyb20gdGhlIGxpbmUgaW4gcGl4ZWxzLlxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgYW50aWFsaWFzaW5nIGZhZGUgZmFjdG9yLiBUaGlzIGlzIGVpdGhlciB3aGVuIGZhZGluZyBpblxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxuICAgIC8vICh2X3dpZHRoMi5zKVxuICAgIGZsb2F0IGJsdXIyID0gKGJsdXIgKyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8pICogdl9nYW1tYV9zY2FsZTtcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XG5cbiAgICAvLyBGb3IgZ3JhZGllbnQgbGluZXMsIHZfbGluZXByb2dyZXNzIGlzIHRoZSByYXRpbyBhbG9uZyB0aGUgZW50aXJlIGxpbmUsXG4gICAgLy8gc2NhbGVkIHRvIFswLCAyXjE1KSwgYW5kIHRoZSBncmFkaWVudCByYW1wIGlzIHN0b3JlZCBpbiBhIHRleHR1cmUuXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2ZWMyKHZfbGluZXByb2dyZXNzLCAwLjUpKTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJcbi8vIHRoZSBhdHRyaWJ1dGUgY29udmV5aW5nIHByb2dyZXNzIGFsb25nIGEgbGluZSBpcyBzY2FsZWQgdG8gWzAsIDJeMTUpXG4jZGVmaW5lIE1BWF9MSU5FX0RJU1RBTkNFIDMyNzY3LjBcblxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cbiNkZWZpbmUgQU5USUFMSUFTSU5HIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTyAvIDIuMFxuXG4vLyBmbG9vcigxMjcgLyAyKSA9PSA2My4wXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxuLy8gdGhlcmUgYXJlIGFsc28gXCJzcGVjaWFsXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cbi8vIHRoaXMgY2FzZSkuXG4vLyAjZGVmaW5lIHNjYWxlIDYzLjBcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcblxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcbnVuaWZvcm0gdmVjMiB1X2dsX3VuaXRzX3RvX3BpeGVscztcblxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xudmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVwcm9ncmVzcztcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuXG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcblxuICAgIHZfbGluZXByb2dyZXNzID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiAyLjAgLyBNQVhfTElORV9ESVNUQU5DRTtcblxuICAgIHZlYzIgcG9zID0gYV9wb3Nfbm9ybWFsLnh5O1xuXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXG4gICAgLy8geSBpcyAxIGlmIHRoZSBub3JtYWwgcG9pbnRzIHVwLCBhbmQgLTEgaWYgaXQgcG9pbnRzIGRvd25cbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gYV9wb3Nfbm9ybWFsLnp3O1xuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xuXG4gICAgLy8gdGhlc2UgdHJhbnNmb3JtYXRpb25zIHVzZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgSlMgYW5kIG5hdGl2ZSBjb2RlIGJhc2VzLlxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxuICAgIGdhcHdpZHRoID0gZ2Fwd2lkdGggLyAyLjA7XG4gICAgZmxvYXQgaGFsZndpZHRoID0gd2lkdGggLyAyLjA7XG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcblxuICAgIGZsb2F0IGluc2V0ID0gZ2Fwd2lkdGggKyAoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO1xuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcblxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cbiAgICBtZWRpdW1wIHZlYzIgZGlzdCA9IG91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XG5cbiAgICB2ZWM0IHByb2plY3RlZF9leHRydWRlID0gdV9tYXRyaXggKiB2ZWM0KGRpc3QgLyB1X3JhdGlvLCAwLjAsIDAuMCk7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xuXG4gICAgLy8gY2FsY3VsYXRlIGhvdyBtdWNoIHRoZSBwZXJzcGVjdGl2ZSB2aWV3IHNxdWlzaGVzIG9yIHN0cmV0Y2hlcyB0aGUgZXh0cnVkZVxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eSAvIGdsX1Bvc2l0aW9uLncgKiB1X2dsX3VuaXRzX3RvX3BpeGVscyk7XG4gICAgdl9nYW1tYV9zY2FsZSA9IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgLyBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO1xuXG4gICAgdl93aWR0aDIgPSB2ZWMyKG91dHNldCwgaW5zZXQpO1xufVxuIn0sbGluZVBhdHRlcm46e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO1xudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcbnVuaWZvcm0gZmxvYXQgdV9mYWRlO1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XG52YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XG4gICAgLy8gKHZfd2lkdGgyLnMpXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcblxuICAgIGZsb2F0IHhfYSA9IG1vZCh2X2xpbmVzb2ZhciAvIHVfcGF0dGVybl9zaXplX2EueCwgMS4wKTtcbiAgICBmbG9hdCB4X2IgPSBtb2Qodl9saW5lc29mYXIgLyB1X3BhdHRlcm5fc2l6ZV9iLngsIDEuMCk7XG5cbiAgICAvLyB2X25vcm1hbC55IGlzIDAgYXQgdGhlIG1pZHBvaW50IG9mIHRoZSBsaW5lLCAtMSBhdCB0aGUgbG93ZXIgZWRnZSwgMSBhdCB0aGUgdXBwZXIgZWRnZVxuICAgIC8vIHdlIGNsYW1wIHRoZSBsaW5lIHdpZHRoIG91dHNldCB0byBiZSBiZXR3ZWVuIDAgYW5kIGhhbGYgdGhlIHBhdHRlcm4gaGVpZ2h0IHBsdXMgcGFkZGluZyAoMi4wKVxuICAgIC8vIHRvIGVuc3VyZSB3ZSBkb24ndCBzYW1wbGUgb3V0c2lkZSB0aGUgZGVzaWduYXRlZCBzeW1ib2wgb24gdGhlIHNwcml0ZSBzaGVldC5cbiAgICAvLyAwLjUgaXMgYWRkZWQgdG8gc2hpZnQgdGhlIGNvbXBvbmVudCB0byBiZSBib3VuZGVkIGJldHdlZW4gMCBhbmQgMSBmb3IgaW50ZXJwb2xhdGlvbiBvZlxuICAgIC8vIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVcbiAgICBmbG9hdCB5X2EgPSAwLjUgKyAodl9ub3JtYWwueSAqIGNsYW1wKHZfd2lkdGgyLnMsIDAuMCwgKHVfcGF0dGVybl9zaXplX2EueSArIDIuMCkgLyAyLjApIC8gdV9wYXR0ZXJuX3NpemVfYS55KTtcbiAgICBmbG9hdCB5X2IgPSAwLjUgKyAodl9ub3JtYWwueSAqIGNsYW1wKHZfd2lkdGgyLnMsIDAuMCwgKHVfcGF0dGVybl9zaXplX2IueSArIDIuMCkgLyAyLjApIC8gdV9wYXR0ZXJuX3NpemVfYi55KTtcbiAgICB2ZWMyIHBvc19hID0gbWl4KHVfcGF0dGVybl90bF9hIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYSAvIHVfdGV4c2l6ZSwgdmVjMih4X2EsIHlfYSkpO1xuICAgIHZlYzIgcG9zX2IgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCB2ZWMyKHhfYiwgeV9iKSk7XG5cbiAgICB2ZWM0IGNvbG9yID0gbWl4KHRleHR1cmUyRCh1X2ltYWdlLCBwb3NfYSksIHRleHR1cmUyRCh1X2ltYWdlLCBwb3NfYiksIHVfZmFkZSk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIGFscGhhICogb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6Ii8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xuLy8gc3RvcmVkIGluIGEgYnl0ZSAoLTEyOC4uMTI3KS4gd2Ugc2NhbGUgcmVndWxhciBub3JtYWxzIHVwIHRvIGxlbmd0aCA2MywgYnV0XG4vLyB0aGVyZSBhcmUgYWxzbyBcInNwZWNpYWxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxuLy8gdGhpcyBjYXNlKS5cbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuXG4vLyBXZSBzY2FsZSB0aGUgZGlzdGFuY2UgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgYnVmZmVycyBzbyB0aGF0IHdlIGNhbiBzdG9yZVxuLy8gbG9uZyBkaXN0YW5jZXMgZm9yIGxvbmcgc2VnbWVudHMuIFVzZSB0aGlzIHZhbHVlIHRvIHVuc2NhbGUgdGhlIGRpc3RhbmNlLlxuI2RlZmluZSBMSU5FX0RJU1RBTkNFX1NDQUxFIDIuMFxuXG4vLyB0aGUgZGlzdGFuY2Ugb3ZlciB3aGljaCB0aGUgbGluZSBlZGdlIGZhZGVzIG91dC5cbi8vIFJldGluYSBkZXZpY2VzIG5lZWQgYSBzbWFsbGVyIGRpc3RhbmNlIHRvIGF2b2lkIGFsaWFzaW5nLlxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXG5cbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX25vcm1hbDtcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XG51bmlmb3JtIHZlYzIgdV9nbF91bml0c190b19waXhlbHM7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcbnZhcnlpbmcgZmxvYXQgdl9saW5lc29mYXI7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcblxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XG4gICAgZmxvYXQgYV9saW5lc29mYXIgPSAoZmxvb3IoYV9kYXRhLnogLyA0LjApICsgYV9kYXRhLncgKiA2NC4wKSAqIExJTkVfRElTVEFOQ0VfU0NBTEU7XG5cbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcblxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IGFfcG9zX25vcm1hbC56dztcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcblxuICAgIC8vIHRoZXNlIHRyYW5zZm9ybWF0aW9ucyB1c2VkIHRvIGJlIGFwcGxpZWQgaW4gdGhlIEpTIGFuZCBuYXRpdmUgY29kZSBiYXNlcy5cbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xuICAgIGZsb2F0IGhhbGZ3aWR0aCA9IHdpZHRoIC8gMi4wO1xuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XG5cbiAgICBmbG9hdCBpbnNldCA9IGdhcHdpZHRoICsgKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XG5cbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQyID0gb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xuXG4gICAgdmVjNCBwcm9qZWN0ZWRfZXh0cnVkZSA9IHVfbWF0cml4ICogdmVjNChkaXN0IC8gdV9yYXRpbywgMC4wLCAwLjApO1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KHBvcyArIG9mZnNldDIgLyB1X3JhdGlvLCAwLjAsIDEuMCkgKyBwcm9qZWN0ZWRfZXh0cnVkZTtcblxuICAgIC8vIGNhbGN1bGF0ZSBob3cgbXVjaCB0aGUgcGVyc3BlY3RpdmUgdmlldyBzcXVpc2hlcyBvciBzdHJldGNoZXMgdGhlIGV4dHJ1ZGVcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlID0gbGVuZ3RoKGRpc3QpO1xuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xuICAgIHZfZ2FtbWFfc2NhbGUgPSBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlIC8gZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTtcblxuICAgIHZfbGluZXNvZmFyID0gYV9saW5lc29mYXI7XG4gICAgdl93aWR0aDIgPSB2ZWMyKG91dHNldCwgaW5zZXQpO1xufVxuIn0sbGluZVNERjp7ZnJhZ21lbnRTb3VyY2U6IlxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcbnVuaWZvcm0gZmxvYXQgdV9zZGZnYW1tYTtcbnVuaWZvcm0gZmxvYXQgdV9taXg7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcbnZhcnlpbmcgdmVjMiB2X3RleF9hO1xudmFyeWluZyB2ZWMyIHZfdGV4X2I7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XG4gICAgLy8gKHZfd2lkdGgyLnMpXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcblxuICAgIGZsb2F0IHNkZmRpc3RfYSA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleF9hKS5hO1xuICAgIGZsb2F0IHNkZmRpc3RfYiA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleF9iKS5hO1xuICAgIGZsb2F0IHNkZmRpc3QgPSBtaXgoc2RmZGlzdF9hLCBzZGZkaXN0X2IsIHVfbWl4KTtcbiAgICBhbHBoYSAqPSBzbW9vdGhzdGVwKDAuNSAtIHVfc2RmZ2FtbWEgLyBmbG9vcndpZHRoLCAwLjUgKyB1X3NkZmdhbW1hIC8gZmxvb3J3aWR0aCwgc2RmZGlzdCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIChhbHBoYSAqIG9wYWNpdHkpO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxuLy8gdGhlIG1heGltdW0gYWxsb3dlZCBtaXRlciBsaW1pdCBpcyAyLjAgYXQgdGhlIG1vbWVudC4gdGhlIGV4dHJ1ZGUgbm9ybWFsIGlzXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcbi8vIHRoZXJlIGFyZSBhbHNvIFwic3BlY2lhbFwiIG5vcm1hbHMgdGhhdCBoYXZlIGEgYmlnZ2VyIGxlbmd0aCAob2YgdXAgdG8gMTI2IGluXG4vLyB0aGlzIGNhc2UpLlxuLy8gI2RlZmluZSBzY2FsZSA2My4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5cbi8vIFdlIHNjYWxlIHRoZSBkaXN0YW5jZSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBidWZmZXJzIHNvIHRoYXQgd2UgY2FuIHN0b3JlXG4vLyBsb25nIGRpc3RhbmNlcyBmb3IgbG9uZyBzZWdtZW50cy4gVXNlIHRoaXMgdmFsdWUgdG8gdW5zY2FsZSB0aGUgZGlzdGFuY2UuXG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5cbi8vIHRoZSBkaXN0YW5jZSBvdmVyIHdoaWNoIHRoZSBsaW5lIGVkZ2UgZmFkZXMgb3V0LlxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXG4jZGVmaW5lIEFOVElBTElBU0lORyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAyLjBcblxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5zY2FsZV9hO1xudW5pZm9ybSBmbG9hdCB1X3RleF95X2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYjtcbnVuaWZvcm0gZmxvYXQgdV90ZXhfeV9iO1xudW5pZm9ybSB2ZWMyIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzO1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XG52YXJ5aW5nIHZlYzIgdl90ZXhfYTtcbnZhcnlpbmcgdmVjMiB2X3RleF9iO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuXG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcbiAgICBmbG9hdCBhX2xpbmVzb2ZhciA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogTElORV9ESVNUQU5DRV9TQ0FMRTtcblxuICAgIHZlYzIgcG9zID0gYV9wb3Nfbm9ybWFsLnh5O1xuXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXG4gICAgLy8geSBpcyAxIGlmIHRoZSBub3JtYWwgcG9pbnRzIHVwLCBhbmQgLTEgaWYgaXQgcG9pbnRzIGRvd25cbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gYV9wb3Nfbm9ybWFsLnp3O1xuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xuXG4gICAgLy8gdGhlc2UgdHJhbnNmb3JtYXRpb25zIHVzZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgSlMgYW5kIG5hdGl2ZSBjb2RlIGJhc2VzLlxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxuICAgIGdhcHdpZHRoID0gZ2Fwd2lkdGggLyAyLjA7XG4gICAgZmxvYXQgaGFsZndpZHRoID0gd2lkdGggLyAyLjA7XG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcblxuICAgIGZsb2F0IGluc2V0ID0gZ2Fwd2lkdGggKyAoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO1xuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcblxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cbiAgICBtZWRpdW1wIHZlYzIgZGlzdCA9b3V0c2V0ICogYV9leHRydWRlICogc2NhbGU7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB3aGVuIGRyYXdpbmcgYSBsaW5lIHRoYXQgaXMgdG8gdGhlIHNpZGUgb2YgdGhlIGFjdHVhbCBsaW5lLlxuICAgIC8vIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSB2ZWN0b3IgdGhhdCBwb2ludHMgdG93YXJkcyB0aGUgZXh0cnVkZSwgYnV0IHJvdGF0ZVxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXG4gICAgLy8gZXh0cnVkZSB2ZWN0b3IgcG9pbnRzIGluIGFub3RoZXIgZGlyZWN0aW9uLlxuICAgIG1lZGl1bXAgZmxvYXQgdSA9IDAuNSAqIGFfZGlyZWN0aW9uO1xuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcbiAgICBtZWRpdW1wIHZlYzIgb2Zmc2V0MiA9IG9mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcblxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChwb3MgKyBvZmZzZXQyIC8gdV9yYXRpbywgMC4wLCAxLjApICsgcHJvamVjdGVkX2V4dHJ1ZGU7XG5cbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChkaXN0KTtcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlID0gbGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5IC8gZ2xfUG9zaXRpb24udyAqIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzKTtcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XG5cbiAgICB2X3RleF9hID0gdmVjMihhX2xpbmVzb2ZhciAqIHVfcGF0dGVybnNjYWxlX2EueCAvIGZsb29yd2lkdGgsIG5vcm1hbC55ICogdV9wYXR0ZXJuc2NhbGVfYS55ICsgdV90ZXhfeV9hKTtcbiAgICB2X3RleF9iID0gdmVjMihhX2xpbmVzb2ZhciAqIHVfcGF0dGVybnNjYWxlX2IueCAvIGZsb29yd2lkdGgsIG5vcm1hbC55ICogdV9wYXR0ZXJuc2NhbGVfYi55ICsgdV90ZXhfeV9iKTtcblxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcbn1cbiJ9LHJhc3Rlcjp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gZmxvYXQgdV9mYWRlX3Q7XG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2UwO1xudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTE7XG52YXJ5aW5nIHZlYzIgdl9wb3MwO1xudmFyeWluZyB2ZWMyIHZfcG9zMTtcblxudW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfbG93O1xudW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfaGlnaDtcblxudW5pZm9ybSBmbG9hdCB1X3NhdHVyYXRpb25fZmFjdG9yO1xudW5pZm9ybSBmbG9hdCB1X2NvbnRyYXN0X2ZhY3RvcjtcbnVuaWZvcm0gdmVjMyB1X3NwaW5fd2VpZ2h0cztcblxudm9pZCBtYWluKCkge1xuXG4gICAgLy8gcmVhZCBhbmQgY3Jvc3MtZmFkZSBjb2xvcnMgZnJvbSB0aGUgbWFpbiBhbmQgcGFyZW50IHRpbGVzXG4gICAgdmVjNCBjb2xvcjAgPSB0ZXh0dXJlMkQodV9pbWFnZTAsIHZfcG9zMCk7XG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZTEsIHZfcG9zMSk7XG4gICAgaWYgKGNvbG9yMC5hID4gMC4wKSB7XG4gICAgICAgIGNvbG9yMC5yZ2IgPSBjb2xvcjAucmdiIC8gY29sb3IwLmE7XG4gICAgfVxuICAgIGlmIChjb2xvcjEuYSA+IDAuMCkge1xuICAgICAgICBjb2xvcjEucmdiID0gY29sb3IxLnJnYiAvIGNvbG9yMS5hO1xuICAgIH1cbiAgICB2ZWM0IGNvbG9yID0gbWl4KGNvbG9yMCwgY29sb3IxLCB1X2ZhZGVfdCk7XG4gICAgY29sb3IuYSAqPSB1X29wYWNpdHk7XG4gICAgdmVjMyByZ2IgPSBjb2xvci5yZ2I7XG5cbiAgICAvLyBzcGluXG4gICAgcmdiID0gdmVjMyhcbiAgICAgICAgZG90KHJnYiwgdV9zcGluX3dlaWdodHMueHl6KSxcbiAgICAgICAgZG90KHJnYiwgdV9zcGluX3dlaWdodHMuenh5KSxcbiAgICAgICAgZG90KHJnYiwgdV9zcGluX3dlaWdodHMueXp4KSk7XG5cbiAgICAvLyBzYXR1cmF0aW9uXG4gICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xuICAgIHJnYiArPSAoYXZlcmFnZSAtIHJnYikgKiB1X3NhdHVyYXRpb25fZmFjdG9yO1xuXG4gICAgLy8gY29udHJhc3RcbiAgICByZ2IgPSAocmdiIC0gMC41KSAqIHVfY29udHJhc3RfZmFjdG9yICsgMC41O1xuXG4gICAgLy8gYnJpZ2h0bmVzc1xuICAgIHZlYzMgdV9oaWdoX3ZlYyA9IHZlYzModV9icmlnaHRuZXNzX2xvdywgdV9icmlnaHRuZXNzX2xvdywgdV9icmlnaHRuZXNzX2xvdyk7XG4gICAgdmVjMyB1X2xvd192ZWMgPSB2ZWMzKHVfYnJpZ2h0bmVzc19oaWdoLCB1X2JyaWdodG5lc3NfaGlnaCwgdV9icmlnaHRuZXNzX2hpZ2gpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChtaXgodV9oaWdoX3ZlYywgdV9sb3dfdmVjLCByZ2IpICogY29sb3IuYSwgY29sb3IuYSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV90bF9wYXJlbnQ7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfcGFyZW50O1xudW5pZm9ybSBmbG9hdCB1X2J1ZmZlcl9zY2FsZTtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3MwO1xudmFyeWluZyB2ZWMyIHZfcG9zMTtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICAvLyBXZSBhcmUgdXNpbmcgSW50MTYgZm9yIHRleHR1cmUgcG9zaXRpb24gY29vcmRpbmF0ZXMgdG8gZ2l2ZSB1cyBlbm91Z2ggcHJlY2lzaW9uIGZvclxuICAgIC8vIGZyYWN0aW9uYWwgY29vcmRpbmF0ZXMuIFdlIHVzZSA4MTkyIHRvIHNjYWxlIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGluIHRoZSBidWZmZXJcbiAgICAvLyBhcyBhbiBhcmJpdHJhcmlseSBoaWdoIG51bWJlciB0byBwcmVzZXJ2ZSBhZGVxdWF0ZSBwcmVjaXNpb24gd2hlbiByZW5kZXJpbmcuXG4gICAgLy8gVGhpcyBpcyBhbHNvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBFWFRFTlQgd2UgYXJlIHVzaW5nIGZvciBvdXIgdGlsZSBidWZmZXIgcG9zIGNvb3JkaW5hdGVzLFxuICAgIC8vIHNvIG1hdGggZm9yIG1vZGlmeWluZyBlaXRoZXIgaXMgY29uc2lzdGVudC5cbiAgICB2X3BvczAgPSAoKChhX3RleHR1cmVfcG9zIC8gODE5Mi4wKSAtIDAuNSkgLyB1X2J1ZmZlcl9zY2FsZSApICsgMC41O1xuICAgIHZfcG9zMSA9ICh2X3BvczAgKiB1X3NjYWxlX3BhcmVudCkgKyB1X3RsX3BhcmVudDtcbn1cbiJ9LHN5bWJvbEljb246e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZhcnlpbmcgdmVjMiB2X3RleDtcbnZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIGxvd3AgZmxvYXQgYWxwaGEgPSBvcGFjaXR5ICogdl9mYWRlX29wYWNpdHk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdl90ZXgpICogYWxwaGE7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJjb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzO1xuXG5hdHRyaWJ1dGUgdmVjNCBhX3Bvc19vZmZzZXQ7XG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XG5hdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7XG5hdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7XG5cbnVuaWZvcm0gYm9vbCB1X2lzX3NpemVfem9vbV9jb25zdGFudDtcbnVuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDtcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7IC8vIHVzZWQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiB6b29tIHN0b3BzIHdoZW4gc2l6ZSBpcyBhIGNvbXBvc2l0ZSBmdW5jdGlvblxudW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7IC8vIHVzZWQgd2hlbiBzaXplIGlzIGJvdGggem9vbSBhbmQgZmVhdHVyZSBjb25zdGFudFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7XG51bmlmb3JtIGJvb2wgdV9yb3RhdGVfc3ltYm9sO1xudW5pZm9ybSBoaWdocCBmbG9hdCB1X2FzcGVjdF9yYXRpbztcbnVuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBtYXQ0IHVfbGFiZWxfcGxhbmVfbWF0cml4O1xudW5pZm9ybSBtYXQ0IHVfZ2xfY29vcmRfbWF0cml4O1xuXG51bmlmb3JtIGJvb2wgdV9pc190ZXh0O1xudW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7XG5cbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG5cbnZhcnlpbmcgdmVjMiB2X3RleDtcbnZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIHZlYzIgYV9wb3MgPSBhX3Bvc19vZmZzZXQueHk7XG4gICAgdmVjMiBhX29mZnNldCA9IGFfcG9zX29mZnNldC56dztcblxuICAgIHZlYzIgYV90ZXggPSBhX2RhdGEueHk7XG4gICAgdmVjMiBhX3NpemUgPSBhX2RhdGEuenc7XG5cbiAgICBoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlID0gLWFfcHJvamVjdGVkX3Bvc1syXTtcblxuICAgIGZsb2F0IHNpemU7XG4gICAgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcbiAgICAgICAgc2l6ZSA9IG1peChhX3NpemVbMF0sIGFfc2l6ZVsxXSwgdV9zaXplX3QpIC8gMTAuMDtcbiAgICB9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xuICAgICAgICBzaXplID0gYV9zaXplWzBdIC8gMTAuMDtcbiAgICB9IGVsc2UgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xuICAgICAgICBzaXplID0gdV9zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSB1X3NpemU7XG4gICAgfVxuXG4gICAgdmVjNCBwcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG4gICAgaGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSA9IHByb2plY3RlZFBvaW50Lnc7XG4gICAgLy8gU2VlIGNvbW1lbnRzIGluIHN5bWJvbF9zZGYudmVydGV4XG4gICAgaGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW8gPSB1X3BpdGNoX3dpdGhfbWFwID9cbiAgICAgICAgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSAvIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG4gICAgICAgIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAvIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7XG4gICAgaGlnaHAgZmxvYXQgcGVyc3BlY3RpdmVfcmF0aW8gPSBjbGFtcChcbiAgICAgICAgICAgIDAuNSArIDAuNSAqIGRpc3RhbmNlX3JhdGlvLFxuICAgICAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBzeW1ib2xzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xuICAgICAgICAgICAgNC4wKTtcblxuICAgIHNpemUgKj0gcGVyc3BlY3RpdmVfcmF0aW87XG5cbiAgICBmbG9hdCBmb250U2NhbGUgPSB1X2lzX3RleHQgPyBzaXplIC8gMjQuMCA6IHNpemU7XG5cbiAgICBoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb24gPSAwLjA7XG4gICAgaWYgKHVfcm90YXRlX3N5bWJvbCkge1xuICAgICAgICAvLyBTZWUgY29tbWVudHMgaW4gc3ltYm9sX3NkZi52ZXJ0ZXhcbiAgICAgICAgdmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX3BvcyArIHZlYzIoMSwgMCksIDAsIDEpO1xuXG4gICAgICAgIHZlYzIgYSA9IHByb2plY3RlZFBvaW50Lnh5IC8gcHJvamVjdGVkUG9pbnQudztcbiAgICAgICAgdmVjMiBiID0gb2Zmc2V0UHJvamVjdGVkUG9pbnQueHkgLyBvZmZzZXRQcm9qZWN0ZWRQb2ludC53O1xuXG4gICAgICAgIHN5bWJvbF9yb3RhdGlvbiA9IGF0YW4oKGIueSAtIGEueSkgLyB1X2FzcGVjdF9yYXRpbywgYi54IC0gYS54KTtcbiAgICB9XG5cbiAgICBoaWdocCBmbG9hdCBhbmdsZV9zaW4gPSBzaW4oc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XG4gICAgaGlnaHAgZmxvYXQgYW5nbGVfY29zID0gY29zKHNlZ21lbnRfYW5nbGUgKyBzeW1ib2xfcm90YXRpb24pO1xuICAgIG1hdDIgcm90YXRpb25fbWF0cml4ID0gbWF0MihhbmdsZV9jb3MsIC0xLjAgKiBhbmdsZV9zaW4sIGFuZ2xlX3NpbiwgYW5nbGVfY29zKTtcblxuICAgIHZlYzQgcHJvamVjdGVkX3BvcyA9IHVfbGFiZWxfcGxhbmVfbWF0cml4ICogdmVjNChhX3Byb2plY3RlZF9wb3MueHksIDAuMCwgMS4wKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfZ2xfY29vcmRfbWF0cml4ICogdmVjNChwcm9qZWN0ZWRfcG9zLnh5IC8gcHJvamVjdGVkX3Bvcy53ICsgcm90YXRpb25fbWF0cml4ICogKGFfb2Zmc2V0IC8gMzIuMCAqIGZvbnRTY2FsZSksIDAuMCwgMS4wKTtcblxuICAgIHZfdGV4ID0gYV90ZXggLyB1X3RleHNpemU7XG4gICAgdmVjMiBmYWRlX29wYWNpdHkgPSB1bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7XG4gICAgZmxvYXQgZmFkZV9jaGFuZ2UgPSBmYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDogLXVfZmFkZV9jaGFuZ2U7XG4gICAgdl9mYWRlX29wYWNpdHkgPSBtYXgoMC4wLCBtaW4oMS4wLCBmYWRlX29wYWNpdHlbMF0gKyBmYWRlX2NoYW5nZSkpO1xufVxuIn0sc3ltYm9sU0RGOntmcmFnbWVudFNvdXJjZToiI2RlZmluZSBTREZfUFggOC4wXG4jZGVmaW5lIEVER0VfR0FNTUEgMC4xMDUvREVWSUNFX1BJWEVMX1JBVElPXG5cbnVuaWZvcm0gYm9vbCB1X2lzX2hhbG87XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfZ2FtbWFfc2NhbGU7XG51bmlmb3JtIGJvb2wgdV9pc190ZXh0O1xuXG52YXJ5aW5nIHZlYzIgdl9kYXRhMDtcbnZhcnlpbmcgdmVjMyB2X2RhdGExO1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcblxuICAgIHZlYzIgdGV4ID0gdl9kYXRhMC54eTtcbiAgICBmbG9hdCBnYW1tYV9zY2FsZSA9IHZfZGF0YTEueDtcbiAgICBmbG9hdCBzaXplID0gdl9kYXRhMS55O1xuICAgIGZsb2F0IGZhZGVfb3BhY2l0eSA9IHZfZGF0YTFbMl07XG5cbiAgICBmbG9hdCBmb250U2NhbGUgPSB1X2lzX3RleHQgPyBzaXplIC8gMjQuMCA6IHNpemU7XG5cbiAgICBsb3dwIHZlYzQgY29sb3IgPSBmaWxsX2NvbG9yO1xuICAgIGhpZ2hwIGZsb2F0IGdhbW1hID0gRURHRV9HQU1NQSAvIChmb250U2NhbGUgKiB1X2dhbW1hX3NjYWxlKTtcbiAgICBsb3dwIGZsb2F0IGJ1ZmYgPSAoMjU2LjAgLSA2NC4wKSAvIDI1Ni4wO1xuICAgIGlmICh1X2lzX2hhbG8pIHtcbiAgICAgICAgY29sb3IgPSBoYWxvX2NvbG9yO1xuICAgICAgICBnYW1tYSA9IChoYWxvX2JsdXIgKiAxLjE5IC8gU0RGX1BYICsgRURHRV9HQU1NQSkgLyAoZm9udFNjYWxlICogdV9nYW1tYV9zY2FsZSk7XG4gICAgICAgIGJ1ZmYgPSAoNi4wIC0gaGFsb193aWR0aCAvIGZvbnRTY2FsZSkgLyBTREZfUFg7XG4gICAgfVxuXG4gICAgbG93cCBmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdGV4KS5hO1xuICAgIGhpZ2hwIGZsb2F0IGdhbW1hX3NjYWxlZCA9IGdhbW1hICogZ2FtbWFfc2NhbGU7XG4gICAgaGlnaHAgZmxvYXQgYWxwaGEgPSBzbW9vdGhzdGVwKGJ1ZmYgLSBnYW1tYV9zY2FsZWQsIGJ1ZmYgKyBnYW1tYV9zY2FsZWQsIGRpc3QpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5ICogZmFkZV9vcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6ImNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI2NTM1ODk3OTM7XG5cbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDtcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcbmF0dHJpYnV0ZSB2ZWMzIGFfcHJvamVjdGVkX3BvcztcbmF0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTtcblxuLy8gY29udGVudHMgb2YgYV9zaXplIHZhcnkgYmFzZWQgb24gdGhlIHR5cGUgb2YgcHJvcGVydHkgdmFsdWVcbi8vIHVzZWQgZm9yIHt0ZXh0LGljb259LXNpemUuXG4vLyBGb3IgY29uc3RhbnRzLCBhX3NpemUgaXMgZGlzYWJsZWQuXG4vLyBGb3Igc291cmNlIGZ1bmN0aW9ucywgd2UgYmluZCBvbmx5IG9uZSB2YWx1ZSBwZXIgdmVydGV4OiB0aGUgdmFsdWUgb2Yge3RleHQsaWNvbn0tc2l6ZSBldmFsdWF0ZWQgZm9yIHRoZSBjdXJyZW50IGZlYXR1cmUuXG4vLyBGb3IgY29tcG9zaXRlIGZ1bmN0aW9uczpcbi8vIFsgdGV4dC1zaXplKGxvd2VyWm9vbVN0b3AsIGZlYXR1cmUpLFxuLy8gICB0ZXh0LXNpemUodXBwZXJab29tU3RvcCwgZmVhdHVyZSkgXVxudW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O1xudW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O1xudW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemVfdDsgLy8gdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHpvb20gc3RvcHMgd2hlbiBzaXplIGlzIGEgY29tcG9zaXRlIGZ1bmN0aW9uXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZTsgLy8gdXNlZCB3aGVuIHNpemUgaXMgYm90aCB6b29tIGFuZCBmZWF0dXJlIGNvbnN0YW50XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDtcbnVuaWZvcm0gbWF0NCB1X2dsX2Nvb3JkX21hdHJpeDtcblxudW5pZm9ybSBib29sIHVfaXNfdGV4dDtcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xudW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO1xudW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDtcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87XG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTtcblxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcblxudmFyeWluZyB2ZWMyIHZfZGF0YTA7XG52YXJ5aW5nIHZlYzMgdl9kYXRhMTtcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG5cbiAgICB2ZWMyIGFfcG9zID0gYV9wb3Nfb2Zmc2V0Lnh5O1xuICAgIHZlYzIgYV9vZmZzZXQgPSBhX3Bvc19vZmZzZXQuenc7XG5cbiAgICB2ZWMyIGFfdGV4ID0gYV9kYXRhLnh5O1xuICAgIHZlYzIgYV9zaXplID0gYV9kYXRhLnp3O1xuXG4gICAgaGlnaHAgZmxvYXQgc2VnbWVudF9hbmdsZSA9IC1hX3Byb2plY3RlZF9wb3NbMl07XG4gICAgZmxvYXQgc2l6ZTtcblxuICAgIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XG4gICAgICAgIHNpemUgPSBtaXgoYV9zaXplWzBdLCBhX3NpemVbMV0sIHVfc2l6ZV90KSAvIDEwLjA7XG4gICAgfSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcbiAgICAgICAgc2l6ZSA9IGFfc2l6ZVswXSAvIDEwLjA7XG4gICAgfSBlbHNlIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcbiAgICAgICAgc2l6ZSA9IHVfc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzaXplID0gdV9zaXplO1xuICAgIH1cblxuICAgIHZlYzQgcHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xuICAgIC8vIElmIHRoZSBsYWJlbCBpcyBwaXRjaGVkIHdpdGggdGhlIG1hcCwgbGF5b3V0IGlzIGRvbmUgaW4gcGl0Y2hlZCBzcGFjZSxcbiAgICAvLyB3aGljaCBtYWtlcyBsYWJlbHMgaW4gdGhlIGRpc3RhbmNlIHNtYWxsZXIgcmVsYXRpdmUgdG8gdmlld3BvcnQgc3BhY2UuXG4gICAgLy8gV2UgY291bnRlcmFjdCBwYXJ0IG9mIHRoYXQgZWZmZWN0IGJ5IG11bHRpcGx5aW5nIGJ5IHRoZSBwZXJzcGVjdGl2ZSByYXRpby5cbiAgICAvLyBJZiB0aGUgbGFiZWwgaXNuJ3QgcGl0Y2hlZCB3aXRoIHRoZSBtYXAsIHdlIGRvIGxheW91dCBpbiB2aWV3cG9ydCBzcGFjZSxcbiAgICAvLyB3aGljaCBtYWtlcyBsYWJlbHMgaW4gdGhlIGRpc3RhbmNlIGxhcmdlciByZWxhdGl2ZSB0byB0aGUgZmVhdHVyZXMgYXJvdW5kXG4gICAgLy8gdGhlbS4gV2UgY291bnRlcmFjdCBwYXJ0IG9mIHRoYXQgZWZmZWN0IGJ5IGRpdmlkaW5nIGJ5IHRoZSBwZXJzcGVjdGl2ZSByYXRpby5cbiAgICBoaWdocCBmbG9hdCBkaXN0YW5jZV9yYXRpbyA9IHVfcGl0Y2hfd2l0aF9tYXAgP1xuICAgICAgICBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlIC8gdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcbiAgICAgICAgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIC8gY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtcbiAgICBoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbyA9IGNsYW1wKFxuICAgICAgICAwLjUgKyAwLjUgKiBkaXN0YW5jZV9yYXRpbyxcbiAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBzeW1ib2xzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xuICAgICAgICA0LjApO1xuXG4gICAgc2l6ZSAqPSBwZXJzcGVjdGl2ZV9yYXRpbztcblxuICAgIGZsb2F0IGZvbnRTY2FsZSA9IHVfaXNfdGV4dCA/IHNpemUgLyAyNC4wIDogc2l6ZTtcblxuICAgIGhpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbiA9IDAuMDtcbiAgICBpZiAodV9yb3RhdGVfc3ltYm9sKSB7XG4gICAgICAgIC8vIFBvaW50IGxhYmVscyB3aXRoICdyb3RhdGlvbi1hbGlnbm1lbnQ6IG1hcCcgYXJlIGhvcml6b250YWwgd2l0aCByZXNwZWN0IHRvIHRpbGUgdW5pdHNcbiAgICAgICAgLy8gVG8gZmlndXJlIG91dCB0aGF0IGFuZ2xlIGluIHByb2plY3RlZCBzcGFjZSwgd2UgZHJhdyBhIHNob3J0IGhvcml6b250YWwgbGluZSBpbiB0aWxlXG4gICAgICAgIC8vIHNwYWNlLCBwcm9qZWN0IGl0LCBhbmQgbWVhc3VyZSBpdHMgYW5nbGUgaW4gcHJvamVjdGVkIHNwYWNlLlxuICAgICAgICB2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zICsgdmVjMigxLCAwKSwgMCwgMSk7XG5cbiAgICAgICAgdmVjMiBhID0gcHJvamVjdGVkUG9pbnQueHkgLyBwcm9qZWN0ZWRQb2ludC53O1xuICAgICAgICB2ZWMyIGIgPSBvZmZzZXRQcm9qZWN0ZWRQb2ludC54eSAvIG9mZnNldFByb2plY3RlZFBvaW50Lnc7XG5cbiAgICAgICAgc3ltYm9sX3JvdGF0aW9uID0gYXRhbigoYi55IC0gYS55KSAvIHVfYXNwZWN0X3JhdGlvLCBiLnggLSBhLngpO1xuICAgIH1cblxuICAgIGhpZ2hwIGZsb2F0IGFuZ2xlX3NpbiA9IHNpbihzZWdtZW50X2FuZ2xlICsgc3ltYm9sX3JvdGF0aW9uKTtcbiAgICBoaWdocCBmbG9hdCBhbmdsZV9jb3MgPSBjb3Moc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XG4gICAgbWF0MiByb3RhdGlvbl9tYXRyaXggPSBtYXQyKGFuZ2xlX2NvcywgLTEuMCAqIGFuZ2xlX3NpbiwgYW5nbGVfc2luLCBhbmdsZV9jb3MpO1xuXG4gICAgdmVjNCBwcm9qZWN0ZWRfcG9zID0gdV9sYWJlbF9wbGFuZV9tYXRyaXggKiB2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwgMC4wLCAxLjApO1xuICAgIGdsX1Bvc2l0aW9uID0gdV9nbF9jb29yZF9tYXRyaXggKiB2ZWM0KHByb2plY3RlZF9wb3MueHkgLyBwcm9qZWN0ZWRfcG9zLncgKyByb3RhdGlvbl9tYXRyaXggKiAoYV9vZmZzZXQgLyAzMi4wICogZm9udFNjYWxlKSwgMC4wLCAxLjApO1xuICAgIGZsb2F0IGdhbW1hX3NjYWxlID0gZ2xfUG9zaXRpb24udztcblxuICAgIHZlYzIgdGV4ID0gYV90ZXggLyB1X3RleHNpemU7XG4gICAgdmVjMiBmYWRlX29wYWNpdHkgPSB1bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7XG4gICAgZmxvYXQgZmFkZV9jaGFuZ2UgPSBmYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDogLXVfZmFkZV9jaGFuZ2U7XG4gICAgZmxvYXQgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eSA9IG1heCgwLjAsIG1pbigxLjAsIGZhZGVfb3BhY2l0eVswXSArIGZhZGVfY2hhbmdlKSk7XG5cbiAgICB2X2RhdGEwID0gdmVjMih0ZXgueCwgdGV4LnkpO1xuICAgIHZfZGF0YTEgPSB2ZWMzKGdhbW1hX3NjYWxlLCBzaXplLCBpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5KTtcbn1cbiJ9fSx0cj0vI3ByYWdtYSBtYXBib3g6IChbXHddKykgKFtcd10rKSAoW1x3XSspIChbXHddKykvZyxlcj1mdW5jdGlvbih0KXt2YXIgZT1RZVt0XSxyPXt9O2UuZnJhZ21lbnRTb3VyY2U9ZS5mcmFnbWVudFNvdXJjZS5yZXBsYWNlKHRyLGZ1bmN0aW9uKHQsZSxuLGksYSl7cmV0dXJuIHJbYV09ITAsImRlZmluZSI9PT1lPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxudmFyeWluZyAiK24rIiAiK2krIiAiK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrbisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6IlxuI2lmZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK24rIiAiK2krIiAiK2ErIiA9IHVfIithKyI7XG4jZW5kaWZcbiJ9KSxlLnZlcnRleFNvdXJjZT1lLnZlcnRleFNvdXJjZS5yZXBsYWNlKHRyLGZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89ImZsb2F0Ij09PWk/InZlYzIiOiJ2ZWM0IjtyZXR1cm4gclthXT8iZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG51bmlmb3JtIGxvd3AgZmxvYXQgYV8iK2ErIl90O1xuYXR0cmlidXRlICIrbisiICIrbysiIGFfIithKyI7XG52YXJ5aW5nICIrbisiICIraSsiICIrYSsiO1xuI2Vsc2VcbnVuaWZvcm0gIituKyIgIitpKyIgdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK2ErIiA9IHVucGFja19taXhfIitvKyIoYV8iK2ErIiwgYV8iK2ErIl90KTtcbiNlbHNlXG4gICAgIituKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4iOiJkZWZpbmUiPT09ZT8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbnVuaWZvcm0gbG93cCBmbG9hdCBhXyIrYSsiX3Q7XG5hdHRyaWJ1dGUgIituKyIgIitvKyIgYV8iK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrbisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG4gICAgIituKyIgIitpKyIgIithKyIgPSB1bnBhY2tfbWl4XyIrbysiKGFfIithKyIsIGFfIithKyJfdCk7XG4jZWxzZVxuICAgICIrbisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIn0pfTtmb3IodmFyIHJyIGluIFFlKWVyKHJyKTt2YXIgbnI9UWUsaXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5nbDt0aGlzLnByb2dyYW09aS5jcmVhdGVQcm9ncmFtKCk7dmFyIG89ci5kZWZpbmVzKCkuY29uY2F0KCIjZGVmaW5lIERFVklDRV9QSVhFTF9SQVRJTyAiK2EuZGV2aWNlUGl4ZWxSYXRpby50b0ZpeGVkKDEpKTtuJiZvLnB1c2goIiNkZWZpbmUgT1ZFUkRSQVdfSU5TUEVDVE9SOyIpO3ZhciBzPW8uY29uY2F0KG5yLnByZWx1ZGUuZnJhZ21lbnRTb3VyY2UsZS5mcmFnbWVudFNvdXJjZSkuam9pbigiXG4iKSxsPW8uY29uY2F0KG5yLnByZWx1ZGUudmVydGV4U291cmNlLGUudmVydGV4U291cmNlKS5qb2luKCJcbiIpLGM9aS5jcmVhdGVTaGFkZXIoaS5GUkFHTUVOVF9TSEFERVIpO2kuc2hhZGVyU291cmNlKGMscyksaS5jb21waWxlU2hhZGVyKGMpLGkuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSxjKTt2YXIgdT1pLmNyZWF0ZVNoYWRlcihpLlZFUlRFWF9TSEFERVIpO2kuc2hhZGVyU291cmNlKHUsbCksaS5jb21waWxlU2hhZGVyKHUpLGkuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSx1KTtmb3IodmFyIGY9ci5sYXlvdXRBdHRyaWJ1dGVzfHxbXSxoPTA7aDxmLmxlbmd0aDtoKyspaS5iaW5kQXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLGgsZltoXS5uYW1lKTtpLmxpbmtQcm9ncmFtKHRoaXMucHJvZ3JhbSksdGhpcy5udW1BdHRyaWJ1dGVzPWkuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0saS5BQ1RJVkVfQVRUUklCVVRFUyksdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMudW5pZm9ybXM9e307Zm9yKHZhciBwPTA7cDx0aGlzLm51bUF0dHJpYnV0ZXM7cCsrKXt2YXIgZD1pLmdldEFjdGl2ZUF0dHJpYih0aGlzLnByb2dyYW0scCk7ZCYmKHRoaXMuYXR0cmlidXRlc1tkLm5hbWVdPWkuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLGQubmFtZSkpfWZvcih2YXIgZz1pLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLGkuQUNUSVZFX1VOSUZPUk1TKSx2PTA7djxnO3YrKyl7dmFyIG09aS5nZXRBY3RpdmVVbmlmb3JtKHRoaXMucHJvZ3JhbSx2KTttJiYodGhpcy51bmlmb3Jtc1ttLm5hbWVdPWkuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSxtLm5hbWUpKX19O2Z1bmN0aW9uIGFyKGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPW5bb107aWYoaS5pc0xlc3NUaGFuKHMudGlsZUlEKSlicmVhaztpZihyLmtleT09PXMudGlsZUlELmtleSlyZXR1cm47aWYocy50aWxlSUQuaXNDaGlsZE9mKHIpKXtmb3IodmFyIGw9ci5jaGlsZHJlbigxLzApLGM9MDtjPGwubGVuZ3RoO2MrKylhcihlLGxbY10sbi5zbGljZShvKSxpLGEpO3JldHVybn19dmFyIHU9ci5vdmVyc2NhbGVkWi1lLm92ZXJzY2FsZWRaLGY9bmV3IHQuQ2Fub25pY2FsVGlsZUlEKHUsci5jYW5vbmljYWwueC0oZS5jYW5vbmljYWwueDw8dSksci5jYW5vbmljYWwueS0oZS5jYW5vbmljYWwueTw8dSkpO2FbZi5rZXldPWFbZi5rZXldfHxmfWZ1bmN0aW9uIG9yKHQsZSxyLG4saSl7dmFyIGE9dC5jb250ZXh0LG89YS5nbCxzPWk/dC51c2VQcm9ncmFtKCJjb2xsaXNpb25DaXJjbGUiKTp0LnVzZVByb2dyYW0oImNvbGxpc2lvbkJveCIpO2Euc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxhLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxhLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciBjPW5bbF0sdT1lLmdldFRpbGUoYyksZj11LmdldEJ1Y2tldChyKTtpZihmKXt2YXIgaD1pP2YuY29sbGlzaW9uQ2lyY2xlOmYuY29sbGlzaW9uQm94O2lmKGgpe28udW5pZm9ybU1hdHJpeDRmdihzLnVuaWZvcm1zLnVfbWF0cml4LCExLGMucG9zTWF0cml4KSxpfHxhLmxpbmVXaWR0aC5zZXQoMSksby51bmlmb3JtMWYocy51bmlmb3Jtcy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UsdC50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSk7dmFyIHA9TWUodSwxLHQudHJhbnNmb3JtLnpvb20pLGQ9TWF0aC5wb3coMix0LnRyYW5zZm9ybS56b29tLXUudGlsZUlELm92ZXJzY2FsZWRaKTtvLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfcGl4ZWxzX3RvX3RpbGVfdW5pdHMscCksby51bmlmb3JtMmYocy51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLyhwKmQpLHQudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1sxXS8ocCpkKSksby51bmlmb3JtMWYocy51bmlmb3Jtcy51X292ZXJzY2FsZV9mYWN0b3IsdS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCkpLHMuZHJhdyhhLGk/by5UUklBTkdMRVM6by5MSU5FUyxyLmlkLGgubGF5b3V0VmVydGV4QnVmZmVyLGguaW5kZXhCdWZmZXIsaC5zZWdtZW50cyxudWxsLGguY29sbGlzaW9uVmVydGV4QnVmZmVyLG51bGwpfX19fWlyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsKXtmb3IodmFyIGMsdT10LmdsLGY9KGM9e30sY1t1LkxJTkVTXT0yLGNbdS5UUklBTkdMRVNdPTMsYylbZV0saD0wLHA9YS5nZXQoKTtoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF0sZz1kLnZhb3N8fChkLnZhb3M9e30pOyhnW3JdfHwoZ1tyXT1uZXcgUSkpLmJpbmQodCx0aGlzLG4sbz9vLmdldFBhaW50VmVydGV4QnVmZmVycygpOltdLGksZC52ZXJ0ZXhPZmZzZXQscyxsKSx1LmRyYXdFbGVtZW50cyhlLGQucHJpbWl0aXZlTGVuZ3RoKmYsdS5VTlNJR05FRF9TSE9SVCxkLnByaW1pdGl2ZU9mZnNldCpmKjIpfX07dmFyIHNyPXQubWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSksbHI9dC5kZWZhdWx0JDE5LmxheW91dDtmdW5jdGlvbiBjcih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdSxmPXQuY29udGV4dCxoPWYuZ2wscD10LnRyYW5zZm9ybSxkPSJtYXAiPT09cyxnPSJtYXAiPT09bCx2PWQmJiJsaW5lIj09PXIubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpLG09ZCYmIWcmJiF2LHk9ZztmLnNldERlcHRoTW9kZSh5P3QuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSk6cXQuZGlzYWJsZWQpO2Zvcih2YXIgeD0wLGI9bjt4PGIubGVuZ3RoO3grPTEpe3ZhciBfPWJbeF0sdz1lLmdldFRpbGUoXyksaz13LmdldEJ1Y2tldChyKTtpZihrKXt2YXIgVD1pP2sudGV4dDprLmljb247aWYoVCYmVC5zZWdtZW50cy5nZXQoKS5sZW5ndGgpe3ZhciBBPVQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSxNPWl8fGsuc2RmSWNvbnMsUz1pP2sudGV4dFNpemVEYXRhOmsuaWNvblNpemVEYXRhO2lmKHV8fCh1PXQudXNlUHJvZ3JhbShNPyJzeW1ib2xTREYiOiJzeW1ib2xJY29uIixBKSxBLnNldFVuaWZvcm1zKHQuY29udGV4dCx1LHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLHVyKHUsdCxyLGksbSxnLFMpKSxmLmFjdGl2ZVRleHR1cmUuc2V0KGguVEVYVFVSRTApLGgudW5pZm9ybTFpKHUudW5pZm9ybXMudV90ZXh0dXJlLDApLGkpdy5nbHlwaEF0bGFzVGV4dHVyZS5iaW5kKGguTElORUFSLGguQ0xBTVBfVE9fRURHRSksaC51bmlmb3JtMmZ2KHUudW5pZm9ybXMudV90ZXhzaXplLHcuZ2x5cGhBdGxhc1RleHR1cmUuc2l6ZSk7ZWxzZXt2YXIgRT0xIT09ci5sYXlvdXQuZ2V0KCJpY29uLXNpemUiKS5jb25zdGFudE9yKDApfHxrLmljb25zTmVlZExpbmVhcixDPWd8fDAhPT1wLnBpdGNoO3cuaWNvbkF0bGFzVGV4dHVyZS5iaW5kKE18fHQub3B0aW9ucy5yb3RhdGluZ3x8dC5vcHRpb25zLnpvb21pbmd8fEV8fEM/aC5MSU5FQVI6aC5ORUFSRVNULGguQ0xBTVBfVE9fRURHRSksaC51bmlmb3JtMmZ2KHUudW5pZm9ybXMudV90ZXhzaXplLHcuaWNvbkF0bGFzVGV4dHVyZS5zaXplKX1oLnVuaWZvcm1NYXRyaXg0ZnYodS51bmlmb3Jtcy51X21hdHJpeCwhMSx0LnRyYW5zbGF0ZVBvc01hdHJpeChfLnBvc01hdHJpeCx3LGEsbykpO3ZhciBMPU1lKHcsMSx0LnRyYW5zZm9ybS56b29tKSx6PWZlKF8ucG9zTWF0cml4LGcsZCx0LnRyYW5zZm9ybSxMKSxPPWhlKF8ucG9zTWF0cml4LGcsZCx0LnRyYW5zZm9ybSxMKTtoLnVuaWZvcm1NYXRyaXg0ZnYodS51bmlmb3Jtcy51X2dsX2Nvb3JkX21hdHJpeCwhMSx0LnRyYW5zbGF0ZVBvc01hdHJpeChPLHcsYSxvLCEwKSksdj8oaC51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9sYWJlbF9wbGFuZV9tYXRyaXgsITEsc3IpLGdlKGssXy5wb3NNYXRyaXgsdCxpLHosTyxnLGMpKTpoLnVuaWZvcm1NYXRyaXg0ZnYodS51bmlmb3Jtcy51X2xhYmVsX3BsYW5lX21hdHJpeCwhMSx6KSxoLnVuaWZvcm0xZih1LnVuaWZvcm1zLnVfZmFkZV9jaGFuZ2UsdC5vcHRpb25zLmZhZGVEdXJhdGlvbj90LnN5bWJvbEZhZGVDaGFuZ2U6MSksZnIodSxBLHQscix3LFQsaSxNLGcpfX19fWZ1bmN0aW9uIHVyKGUscixuLGksYSxvLHMpe3ZhciBsPXIuY29udGV4dC5nbCxjPXIudHJhbnNmb3JtO2wudW5pZm9ybTFpKGUudW5pZm9ybXMudV9waXRjaF93aXRoX21hcCxvPzE6MCksbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X2lzX3RleHQsaT8xOjApLGwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9waXRjaCxjLnBpdGNoLzM2MCoyKk1hdGguUEkpO3ZhciB1PSJjb25zdGFudCI9PT1zLmZ1bmN0aW9uVHlwZXx8InNvdXJjZSI9PT1zLmZ1bmN0aW9uVHlwZSxmPSJjb25zdGFudCI9PT1zLmZ1bmN0aW9uVHlwZXx8ImNhbWVyYSI9PT1zLmZ1bmN0aW9uVHlwZTtsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50LHU/MTowKSxsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50LGY/MTowKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSxjLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpO3ZhciBoPXQuZXZhbHVhdGVTaXplRm9yWm9vbShzLGMuem9vbSxsci5wcm9wZXJ0aWVzW2k/InRleHQtc2l6ZSI6Imljb24tc2l6ZSJdKTt2b2lkIDAhPT1oLnVTaXplVCYmbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X3NpemVfdCxoLnVTaXplVCksdm9pZCAwIT09aC51U2l6ZSYmbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X3NpemUsaC51U2l6ZSksbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X2FzcGVjdF9yYXRpbyxjLndpZHRoL2MuaGVpZ2h0KSxsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfcm90YXRlX3N5bWJvbCxhPzE6MCl9ZnVuY3Rpb24gZnIodCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPXIuY29udGV4dCx1PWMuZ2wsZj1yLnRyYW5zZm9ybTtpZihzKXt2YXIgaD0wIT09bi5wYWludC5nZXQobz8idGV4dC1oYWxvLXdpZHRoIjoiaWNvbi1oYWxvLXdpZHRoIikuY29uc3RhbnRPcigxKSxwPWw/TWF0aC5jb3MoZi5fcGl0Y2gpKmYuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZToxO3UudW5pZm9ybTFmKHQudW5pZm9ybXMudV9nYW1tYV9zY2FsZSxwKSxoJiYodS51bmlmb3JtMWYodC51bmlmb3Jtcy51X2lzX2hhbG8sMSksaHIoYSxuLGMsdCkpLHUudW5pZm9ybTFmKHQudW5pZm9ybXMudV9pc19oYWxvLDApfWhyKGEsbixjLHQpfWZ1bmN0aW9uIGhyKHQsZSxyLG4pe24uZHJhdyhyLHIuZ2wuVFJJQU5HTEVTLGUuaWQsdC5sYXlvdXRWZXJ0ZXhCdWZmZXIsdC5pbmRleEJ1ZmZlcix0LnNlZ21lbnRzLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChlLmlkKSx0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsdC5vcGFjaXR5VmVydGV4QnVmZmVyKX1mdW5jdGlvbiBwcih0LGUscixuLGksbyxzLGwsYyl7dmFyIHUsZixoLHAsZD1lLmNvbnRleHQsZz1kLmdsLHY9aS5wYWludC5nZXQoImxpbmUtZGFzaGFycmF5IiksbT1pLnBhaW50LmdldCgibGluZS1wYXR0ZXJuIik7aWYobHx8Yyl7dmFyIHk9MS9NZShyLDEsZS50cmFuc2Zvcm0udGlsZVpvb20pO2lmKHYpe3U9ZS5saW5lQXRsYXMuZ2V0RGFzaCh2LmZyb20sInJvdW5kIj09PWkubGF5b3V0LmdldCgibGluZS1jYXAiKSksZj1lLmxpbmVBdGxhcy5nZXREYXNoKHYudG8sInJvdW5kIj09PWkubGF5b3V0LmdldCgibGluZS1jYXAiKSk7dmFyIHg9dS53aWR0aCp2LmZyb21TY2FsZSxiPWYud2lkdGgqdi50b1NjYWxlO2cudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuc2NhbGVfYSx5L3gsLXUuaGVpZ2h0LzIpLGcudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuc2NhbGVfYix5L2IsLWYuaGVpZ2h0LzIpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV9zZGZnYW1tYSxlLmxpbmVBdGxhcy53aWR0aC8oMjU2Kk1hdGgubWluKHgsYikqYS5kZXZpY2VQaXhlbFJhdGlvKS8yKX1lbHNlIGlmKG0pe2lmKGg9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihtLmZyb20pLHA9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihtLnRvKSwhaHx8IXApcmV0dXJuO2cudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuX3NpemVfYSxoLmRpc3BsYXlTaXplWzBdKm0uZnJvbVNjYWxlL3ksaC5kaXNwbGF5U2l6ZVsxXSksZy51bmlmb3JtMmYodC51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9iLHAuZGlzcGxheVNpemVbMF0qbS50b1NjYWxlL3kscC5kaXNwbGF5U2l6ZVsxXSk7dmFyIF89ZS5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCksdz1fLndpZHRoLGs9Xy5oZWlnaHQ7Zy51bmlmb3JtMmZ2KHQudW5pZm9ybXMudV90ZXhzaXplLFt3LGtdKX1nLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfZ2xfdW5pdHNfdG9fcGl4ZWxzLDEvZS50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLDEvZS50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdKX1sJiYodj8oZy51bmlmb3JtMWkodC51bmlmb3Jtcy51X2ltYWdlLDApLGQuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCksZS5saW5lQXRsYXMuYmluZChkKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfdGV4X3lfYSx1LnkpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV90ZXhfeV9iLGYueSksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X21peCx2LnQpKTptJiYoZy51bmlmb3JtMWkodC51bmlmb3Jtcy51X2ltYWdlLDApLGQuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCksZS5pbWFnZU1hbmFnZXIuYmluZChkKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYSxoLnRsKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYSxoLmJyKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYixwLnRsKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYixwLmJyKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfZmFkZSxtLnQpKSksZC5zZXRTdGVuY2lsTW9kZShlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcobykpO3ZhciBUPWUudHJhbnNsYXRlUG9zTWF0cml4KG8ucG9zTWF0cml4LHIsaS5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIiksaS5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlLWFuY2hvciIpKTtpZihnLnVuaWZvcm1NYXRyaXg0ZnYodC51bmlmb3Jtcy51X21hdHJpeCwhMSxUKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfcmF0aW8sMS9NZShyLDEsZS50cmFuc2Zvcm0uem9vbSkpLGkucGFpbnQuZ2V0KCJsaW5lLWdyYWRpZW50Iikpe2QuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCk7dmFyIEE9aS5ncmFkaWVudFRleHR1cmU7aWYoIWkuZ3JhZGllbnQpcmV0dXJuO0F8fChBPWkuZ3JhZGllbnRUZXh0dXJlPW5ldyB6KGQsaS5ncmFkaWVudCxnLlJHQkEpKSxBLmJpbmQoZy5MSU5FQVIsZy5DTEFNUF9UT19FREdFKSxnLnVuaWZvcm0xaSh0LnVuaWZvcm1zLnVfaW1hZ2UsMCl9dC5kcmF3KGQsZy5UUklBTkdMRVMsaS5pZCxuLmxheW91dFZlcnRleEJ1ZmZlcixuLmluZGV4QnVmZmVyLG4uc2VnbWVudHMscyl9dmFyIGRyPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuITE7dmFyIHI9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20pLG49ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvKTtyZXR1cm4hcnx8IW59LGdyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmNvbnRleHQsaT1uLmdsLGE9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20pLG89ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvKTtpLnVuaWZvcm0xaShyLnVuaWZvcm1zLnVfaW1hZ2UsMCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3RsX2EsYS50bCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX2JyX2EsYS5iciksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3RsX2Isby50bCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX2JyX2Isby5icik7dmFyIHM9ZS5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCksbD1zLndpZHRoLGM9cy5oZWlnaHQ7aS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV90ZXhzaXplLFtsLGNdKSxpLnVuaWZvcm0xZihyLnVuaWZvcm1zLnVfbWl4LHQudCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3NpemVfYSxhLmRpc3BsYXlTaXplKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9iLG8uZGlzcGxheVNpemUpLGkudW5pZm9ybTFmKHIudW5pZm9ybXMudV9zY2FsZV9hLHQuZnJvbVNjYWxlKSxpLnVuaWZvcm0xZihyLnVuaWZvcm1zLnVfc2NhbGVfYix0LnRvU2NhbGUpLG4uYWN0aXZlVGV4dHVyZS5zZXQoaS5URVhUVVJFMCksZS5pbWFnZU1hbmFnZXIuYmluZChlLmNvbnRleHQpfSx2cj1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5jb250ZXh0LmdsO24udW5pZm9ybTFmKHIudW5pZm9ybXMudV90aWxlX3VuaXRzX3RvX3BpeGVscywxL01lKHQsMSxlLnRyYW5zZm9ybS50aWxlWm9vbSkpO3ZhciBpPU1hdGgucG93KDIsdC50aWxlSUQub3ZlcnNjYWxlZFopLGE9dC50aWxlU2l6ZSpNYXRoLnBvdygyLGUudHJhbnNmb3JtLnRpbGVab29tKS9pLG89YSoodC50aWxlSUQuY2Fub25pY2FsLngrdC50aWxlSUQud3JhcCppKSxzPWEqdC50aWxlSUQuY2Fub25pY2FsLnk7bi51bmlmb3JtMmYoci51bmlmb3Jtcy51X3BpeGVsX2Nvb3JkX3VwcGVyLG8+PjE2LHM+PjE2KSxuLnVuaWZvcm0yZihyLnVuaWZvcm1zLnVfcGl4ZWxfY29vcmRfbG93ZXIsNjU1MzUmbyw2NTUzNSZzKX07ZnVuY3Rpb24gbXIodCxlLHIsbixpKXtpZighZHIoci5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLHQpKWZvcih2YXIgYT0hMCxvPTAscz1uO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWUuZ2V0VGlsZShsKSx1PWMuZ2V0QnVja2V0KHIpO3UmJih0LmNvbnRleHQuc2V0U3RlbmNpbE1vZGUodC5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKGwpKSxpKHQsZSxyLGMsbCx1LGEpLGE9ITEpfX1mdW5jdGlvbiB5cih0LGUscixuLGksYSxvKXt2YXIgcz10LmNvbnRleHQuZ2wsbD1hLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCk7YnIoImZpbGwiLHIucGFpbnQuZ2V0KCJmaWxsLXBhdHRlcm4iKSx0LGwscixuLGksbykuZHJhdyh0LmNvbnRleHQscy5UUklBTkdMRVMsci5pZCxhLmxheW91dFZlcnRleEJ1ZmZlcixhLmluZGV4QnVmZmVyLGEuc2VnbWVudHMsbCl9ZnVuY3Rpb24geHIodCxlLHIsbixpLGEsbyl7dmFyIHM9dC5jb250ZXh0LmdsLGw9YS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLGM9YnIoImZpbGxPdXRsaW5lIixyLmdldFBhaW50UHJvcGVydHkoImZpbGwtb3V0bGluZS1jb2xvciIpP251bGw6ci5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLHQsbCxyLG4saSxvKTtzLnVuaWZvcm0yZihjLnVuaWZvcm1zLnVfd29ybGQscy5kcmF3aW5nQnVmZmVyV2lkdGgscy5kcmF3aW5nQnVmZmVySGVpZ2h0KSxjLmRyYXcodC5jb250ZXh0LHMuTElORVMsci5pZCxhLmxheW91dFZlcnRleEJ1ZmZlcixhLmluZGV4QnVmZmVyMixhLnNlZ21lbnRzMixsKX1mdW5jdGlvbiBicih0LGUscixuLGksYSxvLHMpe3ZhciBsLGM9ci5jb250ZXh0LnByb2dyYW0uZ2V0KCk7cmV0dXJuIGU/KGw9ci51c2VQcm9ncmFtKHQrIlBhdHRlcm4iLG4pLChzfHxsLnByb2dyYW0hPT1jKSYmKG4uc2V0VW5pZm9ybXMoci5jb250ZXh0LGwsaS5wYWludCx7em9vbTpyLnRyYW5zZm9ybS56b29tfSksZ3IoZSxyLGwpKSx2cihhLHIsbCkpOihsPXIudXNlUHJvZ3JhbSh0LG4pLChzfHxsLnByb2dyYW0hPT1jKSYmbi5zZXRVbmlmb3JtcyhyLmNvbnRleHQsbCxpLnBhaW50LHt6b29tOnIudHJhbnNmb3JtLnpvb219KSksci5jb250ZXh0LmdsLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxyLnRyYW5zbGF0ZVBvc01hdHJpeChvLnBvc01hdHJpeCxhLGkucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpLGkucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiKSkpLGx9dmFyIF9yPXQuZGVmYXVsdCQyMC5tYXQzLHdyPXQuZGVmYXVsdCQyMC5tYXQ0LGtyPXQuZGVmYXVsdCQyMC52ZWMzO2Z1bmN0aW9uIFRyKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQuY29udGV4dCxsPXMuZ2wsYz1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tcGF0dGVybiIpLHU9dC5jb250ZXh0LnByb2dyYW0uZ2V0KCksZj1hLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksaD10LnVzZVByb2dyYW0oYz8iZmlsbEV4dHJ1c2lvblBhdHRlcm4iOiJmaWxsRXh0cnVzaW9uIixmKTtpZigob3x8aC5wcm9ncmFtIT09dSkmJmYuc2V0VW5pZm9ybXMocyxoLHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLGMpe2lmKGRyKGMsdCkpcmV0dXJuO2dyKGMsdCxoKSx2cihuLHQsaCksbC51bmlmb3JtMWYoaC51bmlmb3Jtcy51X2hlaWdodF9mYWN0b3IsLU1hdGgucG93KDIsaS5vdmVyc2NhbGVkWikvbi50aWxlU2l6ZS84KX10LmNvbnRleHQuZ2wudW5pZm9ybU1hdHJpeDRmdihoLnVuaWZvcm1zLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KGkucG9zTWF0cml4LG4sci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSIpLHIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIikpKSxmdW5jdGlvbih0LGUpe3ZhciByPWUuY29udGV4dC5nbCxuPWUuc3R5bGUubGlnaHQsaT1uLnByb3BlcnRpZXMuZ2V0KCJwb3NpdGlvbiIpLGE9W2kueCxpLnksaS56XSxvPV9yLmNyZWF0ZSgpOyJ2aWV3cG9ydCI9PT1uLnByb3BlcnRpZXMuZ2V0KCJhbmNob3IiKSYmX3IuZnJvbVJvdGF0aW9uKG8sLWUudHJhbnNmb3JtLmFuZ2xlKSxrci50cmFuc2Zvcm1NYXQzKGEsYSxvKTt2YXIgcz1uLnByb3BlcnRpZXMuZ2V0KCJjb2xvciIpO3IudW5pZm9ybTNmdih0LnVuaWZvcm1zLnVfbGlnaHRwb3MsYSksci51bmlmb3JtMWYodC51bmlmb3Jtcy51X2xpZ2h0aW50ZW5zaXR5LG4ucHJvcGVydGllcy5nZXQoImludGVuc2l0eSIpKSxyLnVuaWZvcm0zZih0LnVuaWZvcm1zLnVfbGlnaHRjb2xvcixzLnIscy5nLHMuYil9KGgsdCksaC5kcmF3KHMsbC5UUklBTkdMRVMsci5pZCxhLmxheW91dFZlcnRleEJ1ZmZlcixhLmluZGV4QnVmZmVyLGEuc2VnbWVudHMsZil9ZnVuY3Rpb24gQXIoZSxyLG4pe3ZhciBpPWUuY29udGV4dCxhPWkuZ2wsbz1yLmZibztpZihvKXt2YXIgcz1lLnVzZVByb2dyYW0oImhpbGxzaGFkZSIpLGw9ZS50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHIudGlsZUlELnRvVW53cmFwcGVkKCksITApOyFmdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIikqKE1hdGguUEkvMTgwKTsidmlld3BvcnQiPT09ci5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIikmJihuLT1lLnRyYW5zZm9ybS5hbmdsZSksZS5jb250ZXh0LmdsLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfbGlnaHQsci5wYWludC5nZXQoImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iKSxuKX0ocyxlLG4pO3ZhciBjPWZ1bmN0aW9uKGUscil7dmFyIG49ci50b0Nvb3JkaW5hdGUoKSxpPW5ldyB0LmRlZmF1bHQkMTcobi5jb2x1bW4sbi5yb3crMSxuLnpvb20pO3JldHVybltlLnRyYW5zZm9ybS5jb29yZGluYXRlTG9jYXRpb24obikubGF0LGUudHJhbnNmb3JtLmNvb3JkaW5hdGVMb2NhdGlvbihpKS5sYXRdfShlLHIudGlsZUlEKTtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLGEuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG8uY29sb3JBdHRhY2htZW50LmdldCgpKSxhLnVuaWZvcm1NYXRyaXg0ZnYocy51bmlmb3Jtcy51X21hdHJpeCwhMSxsKSxhLnVuaWZvcm0yZnYocy51bmlmb3Jtcy51X2xhdHJhbmdlLGMpLGEudW5pZm9ybTFpKHMudW5pZm9ybXMudV9pbWFnZSwwKTt2YXIgdT1uLnBhaW50LmdldCgiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciIpO2EudW5pZm9ybTRmKHMudW5pZm9ybXMudV9zaGFkb3csdS5yLHUuZyx1LmIsdS5hKTt2YXIgZj1uLnBhaW50LmdldCgiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvciIpO2EudW5pZm9ybTRmKHMudW5pZm9ybXMudV9oaWdobGlnaHQsZi5yLGYuZyxmLmIsZi5hKTt2YXIgaD1uLnBhaW50LmdldCgiaGlsbHNoYWRlLWFjY2VudC1jb2xvciIpO2lmKGEudW5pZm9ybTRmKHMudW5pZm9ybXMudV9hY2NlbnQsaC5yLGguZyxoLmIsaC5hKSxyLm1hc2tlZEJvdW5kc0J1ZmZlciYmci5tYXNrZWRJbmRleEJ1ZmZlciYmci5zZWdtZW50cylzLmRyYXcoaSxhLlRSSUFOR0xFUyxuLmlkLHIubWFza2VkQm91bmRzQnVmZmVyLHIubWFza2VkSW5kZXhCdWZmZXIsci5zZWdtZW50cyk7ZWxzZXt2YXIgcD1lLnJhc3RlckJvdW5kc0J1ZmZlcjtlLnJhc3RlckJvdW5kc1ZBTy5iaW5kKGkscyxwLFtdKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRV9TVFJJUCwwLHAubGVuZ3RoKX19fWZ1bmN0aW9uIE1yKGUscixuKXt2YXIgaT1lLmNvbnRleHQsYT1pLmdsO2lmKHIuZGVtJiZyLmRlbS5sZXZlbCl7dmFyIG89ci5kZW0ubGV2ZWwuZGltLHM9ci5kZW0uZ2V0UGl4ZWxzKCk7aWYoaS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUxKSxpLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCghMSksci5kZW1UZXh0dXJlPXIuZGVtVGV4dHVyZXx8ZS5nZXRUaWxlVGV4dHVyZShyLnRpbGVTaXplKSxyLmRlbVRleHR1cmUpe3ZhciBsPXIuZGVtVGV4dHVyZTtsLnVwZGF0ZShzLHtwcmVtdWx0aXBseTohMX0pLGwuYmluZChhLk5FQVJFU1QsYS5DTEFNUF9UT19FREdFKX1lbHNlIHIuZGVtVGV4dHVyZT1uZXcgeihpLHMsYS5SR0JBLHtwcmVtdWx0aXBseTohMX0pLHIuZGVtVGV4dHVyZS5iaW5kKGEuTkVBUkVTVCxhLkNMQU1QX1RPX0VER0UpO2kuYWN0aXZlVGV4dHVyZS5zZXQoYS5URVhUVVJFMCk7dmFyIGM9ci5mYm87aWYoIWMpe3ZhciB1PW5ldyB6KGkse3dpZHRoOm8saGVpZ2h0Om8sZGF0YTpudWxsfSxhLlJHQkEpO3UuYmluZChhLkxJTkVBUixhLkNMQU1QX1RPX0VER0UpLChjPXIuZmJvPWkuY3JlYXRlRnJhbWVidWZmZXIobyxvKSkuY29sb3JBdHRhY2htZW50LnNldCh1LnRleHR1cmUpfWkuYmluZEZyYW1lYnVmZmVyLnNldChjLmZyYW1lYnVmZmVyKSxpLnZpZXdwb3J0LnNldChbMCwwLG8sb10pO3ZhciBmPXQubWF0NC5jcmVhdGUoKTt0Lm1hdDQub3J0aG8oZiwwLHQuZGVmYXVsdCQ4LC10LmRlZmF1bHQkOCwwLDAsMSksdC5tYXQ0LnRyYW5zbGF0ZShmLGYsWzAsLXQuZGVmYXVsdCQ4LDBdKTt2YXIgaD1lLnVzZVByb2dyYW0oImhpbGxzaGFkZVByZXBhcmUiKTthLnVuaWZvcm1NYXRyaXg0ZnYoaC51bmlmb3Jtcy51X21hdHJpeCwhMSxmKSxhLnVuaWZvcm0xZihoLnVuaWZvcm1zLnVfem9vbSxyLnRpbGVJRC5vdmVyc2NhbGVkWiksYS51bmlmb3JtMmZ2KGgudW5pZm9ybXMudV9kaW1lbnNpb24sWzIqbywyKm9dKSxhLnVuaWZvcm0xaShoLnVuaWZvcm1zLnVfaW1hZ2UsMSksYS51bmlmb3JtMWYoaC51bmlmb3Jtcy51X21heHpvb20sbik7dmFyIHA9ZS5yYXN0ZXJCb3VuZHNCdWZmZXI7ZS5yYXN0ZXJCb3VuZHNWQU8uYmluZChpLGgscCxbXSksYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVfU1RSSVAsMCxwLmxlbmd0aCksci5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITF9fWZ1bmN0aW9uIFNyKGUscixuLGksbyl7dmFyIHM9aS5wYWludC5nZXQoInJhc3Rlci1mYWRlLWR1cmF0aW9uIik7aWYocz4wKXt2YXIgbD1hLm5vdygpLGM9KGwtZS50aW1lQWRkZWQpL3MsdT1yPyhsLXIudGltZUFkZGVkKS9zOi0xLGY9bi5nZXRTb3VyY2UoKSxoPW8uY292ZXJpbmdab29tTGV2ZWwoe3RpbGVTaXplOmYudGlsZVNpemUscm91bmRab29tOmYucm91bmRab29tfSkscD0hcnx8TWF0aC5hYnMoci50aWxlSUQub3ZlcnNjYWxlZFotaCk+TWF0aC5hYnMoZS50aWxlSUQub3ZlcnNjYWxlZFotaCksZD1wJiZlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPzE6dC5jbGFtcChwP2M6MS11LDAsMSk7cmV0dXJuIGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24mJmM+PTEmJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSExKSxyP3tvcGFjaXR5OjEsbWl4OjEtZH06e29wYWNpdHk6ZCxtaXg6MH19cmV0dXJue29wYWNpdHk6MSxtaXg6MH19ZnVuY3Rpb24gRXIoZSxyLG4pe3ZhciBpPWUuY29udGV4dCxvPWkuZ2w7aS5saW5lV2lkdGguc2V0KDEqYS5kZXZpY2VQaXhlbFJhdGlvKTt2YXIgcz1uLnBvc01hdHJpeCxsPWUudXNlUHJvZ3JhbSgiZGVidWciKTtpLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCksaS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksaS5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLG8udW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHMpLG8udW5pZm9ybTRmKGwudW5pZm9ybXMudV9jb2xvciwxLDAsMCwxKSxlLmRlYnVnVkFPLmJpbmQoaSxsLGUuZGVidWdCdWZmZXIsW10pLG8uZHJhd0FycmF5cyhvLkxJTkVfU1RSSVAsMCxlLmRlYnVnQnVmZmVyLmxlbmd0aCk7Zm9yKHZhciBjPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8MTt2YXIgaSxhLG8scyxsLGMsdSxmLGg9W107Zm9yKGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspaWYobD1Dclt0W2ldXSl7Zm9yKGY9bnVsbCxvPTAscz1sWzFdLmxlbmd0aDtvPHM7bys9MiktMT09PWxbMV1bb10mJi0xPT09bFsxXVtvKzFdP2Y9bnVsbDooYz1lK2xbMV1bb10qbix1PTIwMC1sWzFdW28rMV0qbixmJiZoLnB1c2goZi54LGYueSxjLHUpLGY9e3g6Yyx5OnV9KTtlKz1sWzBdKm59cmV0dXJuIGh9KG4udG9TdHJpbmcoKSw1MCwwLDUpLHU9bmV3IHQuUG9zQXJyYXksZj0wO2Y8Yy5sZW5ndGg7Zis9Mil1LmVtcGxhY2VCYWNrKGNbZl0sY1tmKzFdKTt2YXIgaD1pLmNyZWF0ZVZlcnRleEJ1ZmZlcih1LEtlLm1lbWJlcnMpOyhuZXcgUSkuYmluZChpLGwsaCxbXSksby51bmlmb3JtNGYobC51bmlmb3Jtcy51X2NvbG9yLDEsMSwxLDEpO2Zvcih2YXIgcD1yLmdldFRpbGUobikudGlsZVNpemUsZD10LmRlZmF1bHQkOC8oTWF0aC5wb3coMixlLnRyYW5zZm9ybS56b29tLW4ub3ZlcnNjYWxlZFopKnApLGc9W1stMSwtMV0sWy0xLDFdLFsxLC0xXSxbMSwxXV0sdj0wO3Y8Zy5sZW5ndGg7disrKXt2YXIgbT1nW3ZdO28udW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHQubWF0NC50cmFuc2xhdGUoW10scyxbZCptWzBdLGQqbVsxXSwwXSkpLG8uZHJhd0FycmF5cyhvLkxJTkVTLDAsaC5sZW5ndGgpfW8udW5pZm9ybTRmKGwudW5pZm9ybXMudV9jb2xvciwwLDAsMCwxKSxvLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxzKSxvLmRyYXdBcnJheXMoby5MSU5FUywwLGgubGVuZ3RoKX12YXIgQ3I9eyIgIjpbMTYsW11dLCIhIjpbMTAsWzUsMjEsNSw3LC0xLC0xLDUsMiw0LDEsNSwwLDYsMSw1LDJdXSwnIic6WzE2LFs0LDIxLDQsMTQsLTEsLTEsMTIsMjEsMTIsMTRdXSwiIyI6WzIxLFsxMSwyNSw0LC03LC0xLC0xLDE3LDI1LDEwLC03LC0xLC0xLDQsMTIsMTgsMTIsLTEsLTEsMyw2LDE3LDZdXSwkOlsyMCxbOCwyNSw4LC00LC0xLC0xLDEyLDI1LDEyLC00LC0xLC0xLDE3LDE4LDE1LDIwLDEyLDIxLDgsMjEsNSwyMCwzLDE4LDMsMTYsNCwxNCw1LDEzLDcsMTIsMTMsMTAsMTUsOSwxNiw4LDE3LDYsMTcsMywxNSwxLDEyLDAsOCwwLDUsMSwzLDNdXSwiJSI6WzI0LFsyMSwyMSwzLDAsLTEsLTEsOCwyMSwxMCwxOSwxMCwxNyw5LDE1LDcsMTQsNSwxNCwzLDE2LDMsMTgsNCwyMCw2LDIxLDgsMjEsMTAsMjAsMTMsMTksMTYsMTksMTksMjAsMjEsMjEsLTEsLTEsMTcsNywxNSw2LDE0LDQsMTQsMiwxNiwwLDE4LDAsMjAsMSwyMSwzLDIxLDUsMTksNywxNyw3XV0sIiYiOlsyNixbMjMsMTIsMjMsMTMsMjIsMTQsMjEsMTQsMjAsMTMsMTksMTEsMTcsNiwxNSwzLDEzLDEsMTEsMCw3LDAsNSwxLDQsMiwzLDQsMyw2LDQsOCw1LDksMTIsMTMsMTMsMTQsMTQsMTYsMTQsMTgsMTMsMjAsMTEsMjEsOSwyMCw4LDE4LDgsMTYsOSwxMywxMSwxMCwxNiwzLDE4LDEsMjAsMCwyMiwwLDIzLDEsMjMsMl1dLCInIjpbMTAsWzUsMTksNCwyMCw1LDIxLDYsMjAsNiwxOCw1LDE2LDQsMTVdXSwiKCI6WzE0LFsxMSwyNSw5LDIzLDcsMjAsNSwxNiw0LDExLDQsNyw1LDIsNywtMiw5LC01LDExLC03XV0sIikiOlsxNCxbMywyNSw1LDIzLDcsMjAsOSwxNiwxMCwxMSwxMCw3LDksMiw3LC0yLDUsLTUsMywtN11dLCIqIjpbMTYsWzgsMjEsOCw5LC0xLC0xLDMsMTgsMTMsMTIsLTEsLTEsMTMsMTgsMywxMl1dLCIrIjpbMjYsWzEzLDE4LDEzLDAsLTEsLTEsNCw5LDIyLDldXSwiLCI6WzEwLFs2LDEsNSwwLDQsMSw1LDIsNiwxLDYsLTEsNSwtMyw0LC00XV0sIi0iOlsyNixbNCw5LDIyLDldXSwiLiI6WzEwLFs1LDIsNCwxLDUsMCw2LDEsNSwyXV0sIi8iOlsyMixbMjAsMjUsMiwtN11dLDA6WzIwLFs5LDIxLDYsMjAsNCwxNywzLDEyLDMsOSw0LDQsNiwxLDksMCwxMSwwLDE0LDEsMTYsNCwxNyw5LDE3LDEyLDE2LDE3LDE0LDIwLDExLDIxLDksMjFdXSwxOlsyMCxbNiwxNyw4LDE4LDExLDIxLDExLDBdXSwyOlsyMCxbNCwxNiw0LDE3LDUsMTksNiwyMCw4LDIxLDEyLDIxLDE0LDIwLDE1LDE5LDE2LDE3LDE2LDE1LDE1LDEzLDEzLDEwLDMsMCwxNywwXV0sMzpbMjAsWzUsMjEsMTYsMjEsMTAsMTMsMTMsMTMsMTUsMTIsMTYsMTEsMTcsOCwxNyw2LDE2LDMsMTQsMSwxMSwwLDgsMCw1LDEsNCwyLDMsNF1dLDQ6WzIwLFsxMywyMSwzLDcsMTgsNywtMSwtMSwxMywyMSwxMywwXV0sNTpbMjAsWzE1LDIxLDUsMjEsNCwxMiw1LDEzLDgsMTQsMTEsMTQsMTQsMTMsMTYsMTEsMTcsOCwxNyw2LDE2LDMsMTQsMSwxMSwwLDgsMCw1LDEsNCwyLDMsNF1dLDY6WzIwLFsxNiwxOCwxNSwyMCwxMiwyMSwxMCwyMSw3LDIwLDUsMTcsNCwxMiw0LDcsNSwzLDcsMSwxMCwwLDExLDAsMTQsMSwxNiwzLDE3LDYsMTcsNywxNiwxMCwxNCwxMiwxMSwxMywxMCwxMyw3LDEyLDUsMTAsNCw3XV0sNzpbMjAsWzE3LDIxLDcsMCwtMSwtMSwzLDIxLDE3LDIxXV0sODpbMjAsWzgsMjEsNSwyMCw0LDE4LDQsMTYsNSwxNCw3LDEzLDExLDEyLDE0LDExLDE2LDksMTcsNywxNyw0LDE2LDIsMTUsMSwxMiwwLDgsMCw1LDEsNCwyLDMsNCwzLDcsNCw5LDYsMTEsOSwxMiwxMywxMywxNSwxNCwxNiwxNiwxNiwxOCwxNSwyMCwxMiwyMSw4LDIxXV0sOTpbMjAsWzE2LDE0LDE1LDExLDEzLDksMTAsOCw5LDgsNiw5LDQsMTEsMywxNCwzLDE1LDQsMTgsNiwyMCw5LDIxLDEwLDIxLDEzLDIwLDE1LDE4LDE2LDE0LDE2LDksMTUsNCwxMywxLDEwLDAsOCwwLDUsMSw0LDNdXSwiOiI6WzEwLFs1LDE0LDQsMTMsNSwxMiw2LDEzLDUsMTQsLTEsLTEsNSwyLDQsMSw1LDAsNiwxLDUsMl1dLCI7IjpbMTAsWzUsMTQsNCwxMyw1LDEyLDYsMTMsNSwxNCwtMSwtMSw2LDEsNSwwLDQsMSw1LDIsNiwxLDYsLTEsNSwtMyw0LC00XV0sIjwiOlsyNCxbMjAsMTgsNCw5LDIwLDBdXSwiPSI6WzI2LFs0LDEyLDIyLDEyLC0xLC0xLDQsNiwyMiw2XV0sIj4iOlsyNCxbNCwxOCwyMCw5LDQsMF1dLCI/IjpbMTgsWzMsMTYsMywxNyw0LDE5LDUsMjAsNywyMSwxMSwyMSwxMywyMCwxNCwxOSwxNSwxNywxNSwxNSwxNCwxMywxMywxMiw5LDEwLDksNywtMSwtMSw5LDIsOCwxLDksMCwxMCwxLDksMl1dLCJAIjpbMjcsWzE4LDEzLDE3LDE1LDE1LDE2LDEyLDE2LDEwLDE1LDksMTQsOCwxMSw4LDgsOSw2LDExLDUsMTQsNSwxNiw2LDE3LDgsLTEsLTEsMTIsMTYsMTAsMTQsOSwxMSw5LDgsMTAsNiwxMSw1LC0xLC0xLDE4LDE2LDE3LDgsMTcsNiwxOSw1LDIxLDUsMjMsNywyNCwxMCwyNCwxMiwyMywxNSwyMiwxNywyMCwxOSwxOCwyMCwxNSwyMSwxMiwyMSw5LDIwLDcsMTksNSwxNyw0LDE1LDMsMTIsMyw5LDQsNiw1LDQsNywyLDksMSwxMiwwLDE1LDAsMTgsMSwyMCwyLDIxLDMsLTEsLTEsMTksMTYsMTgsOCwxOCw2LDE5LDVdXSxBOlsxOCxbOSwyMSwxLDAsLTEsLTEsOSwyMSwxNywwLC0xLC0xLDQsNywxNCw3XV0sQjpbMjEsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTMsMjEsMTYsMjAsMTcsMTksMTgsMTcsMTgsMTUsMTcsMTMsMTYsMTIsMTMsMTEsLTEsLTEsNCwxMSwxMywxMSwxNiwxMCwxNyw5LDE4LDcsMTgsNCwxNywyLDE2LDEsMTMsMCw0LDBdXSxDOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNV1dLEQ6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDExLDIxLDE0LDIwLDE2LDE4LDE3LDE2LDE4LDEzLDE4LDgsMTcsNSwxNiwzLDE0LDEsMTEsMCw0LDBdXSxFOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxNywyMSwtMSwtMSw0LDExLDEyLDExLC0xLC0xLDQsMCwxNywwXV0sRjpbMTgsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMV1dLEc6WzIxLFsxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE4LDgsLTEsLTEsMTMsOCwxOCw4XV0sSDpbMjIsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDE4LDAsLTEsLTEsNCwxMSwxOCwxMV1dLEk6WzgsWzQsMjEsNCwwXV0sSjpbMTYsWzEyLDIxLDEyLDUsMTEsMiwxMCwxLDgsMCw2LDAsNCwxLDMsMiwyLDUsMiw3XV0sSzpbMjEsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDQsNywtMSwtMSw5LDEyLDE4LDBdXSxMOlsxNyxbNCwyMSw0LDAsLTEsLTEsNCwwLDE2LDBdXSxNOlsyNCxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMiwwLC0xLC0xLDIwLDIxLDEyLDAsLTEsLTEsMjAsMjEsMjAsMF1dLE46WzIyLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE4LDAsLTEsLTEsMTgsMjEsMTgsMF1dLE86WzIyLFs5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE5LDgsMTksMTMsMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMV1dLFA6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE0LDE3LDEyLDE2LDExLDEzLDEwLDQsMTBdXSxROlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsLTEsLTEsMTIsNCwxOCwtMl1dLFI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLDQsMTEsLTEsLTEsMTEsMTEsMTgsMF1dLFM6WzIwLFsxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sVDpbMTYsWzgsMjEsOCwwLC0xLC0xLDEsMjEsMTUsMjFdXSxVOlsyMixbNCwyMSw0LDYsNSwzLDcsMSwxMCwwLDEyLDAsMTUsMSwxNywzLDE4LDYsMTgsMjFdXSxWOlsxOCxbMSwyMSw5LDAsLTEsLTEsMTcsMjEsOSwwXV0sVzpbMjQsWzIsMjEsNywwLC0xLC0xLDEyLDIxLDcsMCwtMSwtMSwxMiwyMSwxNywwLC0xLC0xLDIyLDIxLDE3LDBdXSxYOlsyMCxbMywyMSwxNywwLC0xLC0xLDE3LDIxLDMsMF1dLFk6WzE4LFsxLDIxLDksMTEsOSwwLC0xLC0xLDE3LDIxLDksMTFdXSxaOlsyMCxbMTcsMjEsMywwLC0xLC0xLDMsMjEsMTcsMjEsLTEsLTEsMywwLDE3LDBdXSwiWyI6WzE0LFs0LDI1LDQsLTcsLTEsLTEsNSwyNSw1LC03LC0xLC0xLDQsMjUsMTEsMjUsLTEsLTEsNCwtNywxMSwtN11dLCJcXCI6WzE0LFswLDIxLDE0LC0zXV0sIl0iOlsxNCxbOSwyNSw5LC03LC0xLC0xLDEwLDI1LDEwLC03LC0xLC0xLDMsMjUsMTAsMjUsLTEsLTEsMywtNywxMCwtN11dLCJeIjpbMTYsWzYsMTUsOCwxOCwxMCwxNSwtMSwtMSwzLDEyLDgsMTcsMTMsMTIsLTEsLTEsOCwxNyw4LDBdXSxfOlsxNixbMCwtMiwxNiwtMl1dLCJgIjpbMTAsWzYsMjEsNSwyMCw0LDE4LDQsMTYsNSwxNSw2LDE2LDUsMTddXSxhOlsxOSxbMTUsMTQsMTUsMCwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sYjpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLGM6WzE4LFsxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZDpbMTksWzE1LDIxLDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGU6WzE4LFszLDgsMTUsOCwxNSwxMCwxNCwxMiwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZjpbMTIsWzEwLDIxLDgsMjEsNiwyMCw1LDE3LDUsMCwtMSwtMSwyLDE0LDksMTRdXSxnOlsxOSxbMTUsMTQsMTUsLTIsMTQsLTUsMTMsLTYsMTEsLTcsOCwtNyw2LC02LC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxoOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLGk6WzgsWzMsMjEsNCwyMCw1LDIxLDQsMjIsMywyMSwtMSwtMSw0LDE0LDQsMF1dLGo6WzEwLFs1LDIxLDYsMjAsNywyMSw2LDIyLDUsMjEsLTEsLTEsNiwxNCw2LC0zLDUsLTYsMywtNywxLC03XV0sazpbMTcsWzQsMjEsNCwwLC0xLC0xLDE0LDE0LDQsNCwtMSwtMSw4LDgsMTUsMF1dLGw6WzgsWzQsMjEsNCwwXV0sbTpbMzAsWzQsMTQsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDAsLTEsLTEsMTUsMTAsMTgsMTMsMjAsMTQsMjMsMTQsMjUsMTMsMjYsMTAsMjYsMF1dLG46WzE5LFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwXV0sbzpbMTksWzgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDMsMTYsNiwxNiw4LDE1LDExLDEzLDEzLDExLDE0LDgsMTRdXSxwOlsxOSxbNCwxNCw0LC03LC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLHE6WzE5LFsxNSwxNCwxNSwtNywtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0scjpbMTMsWzQsMTQsNCwwLC0xLC0xLDQsOCw1LDExLDcsMTMsOSwxNCwxMiwxNF1dLHM6WzE3LFsxNCwxMSwxMywxMywxMCwxNCw3LDE0LDQsMTMsMywxMSw0LDksNiw4LDExLDcsMTMsNiwxNCw0LDE0LDMsMTMsMSwxMCwwLDcsMCw0LDEsMywzXV0sdDpbMTIsWzUsMjEsNSw0LDYsMSw4LDAsMTAsMCwtMSwtMSwyLDE0LDksMTRdXSx1OlsxOSxbNCwxNCw0LDQsNSwxLDcsMCwxMCwwLDEyLDEsMTUsNCwtMSwtMSwxNSwxNCwxNSwwXV0sdjpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMF1dLHc6WzIyLFszLDE0LDcsMCwtMSwtMSwxMSwxNCw3LDAsLTEsLTEsMTEsMTQsMTUsMCwtMSwtMSwxOSwxNCwxNSwwXV0seDpbMTcsWzMsMTQsMTQsMCwtMSwtMSwxNCwxNCwzLDBdXSx5OlsxNixbMiwxNCw4LDAsLTEsLTEsMTQsMTQsOCwwLDYsLTQsNCwtNiwyLC03LDEsLTddXSx6OlsxNyxbMTQsMTQsMywwLC0xLC0xLDMsMTQsMTQsMTQsLTEsLTEsMywwLDE0LDBdXSwieyI6WzE0LFs5LDI1LDcsMjQsNiwyMyw1LDIxLDUsMTksNiwxNyw3LDE2LDgsMTQsOCwxMiw2LDEwLC0xLC0xLDcsMjQsNiwyMiw2LDIwLDcsMTgsOCwxNyw5LDE1LDksMTMsOCwxMSw0LDksOCw3LDksNSw5LDMsOCwxLDcsMCw2LC0yLDYsLTQsNywtNiwtMSwtMSw2LDgsOCw2LDgsNCw3LDIsNiwxLDUsLTEsNSwtMyw2LC01LDcsLTYsOSwtN11dLCJ8IjpbOCxbNCwyNSw0LC03XV0sIn0iOlsxNCxbNSwyNSw3LDI0LDgsMjMsOSwyMSw5LDE5LDgsMTcsNywxNiw2LDE0LDYsMTIsOCwxMCwtMSwtMSw3LDI0LDgsMjIsOCwyMCw3LDE4LDYsMTcsNSwxNSw1LDEzLDYsMTEsMTAsOSw2LDcsNSw1LDUsMyw2LDEsNywwLDgsLTIsOCwtNCw3LC02LC0xLC0xLDgsOCw2LDYsNiw0LDcsMiw4LDEsOSwtMSw5LC0zLDgsLTUsNywtNiw1LC03XV0sIn4iOlsyNCxbMyw2LDMsOCw0LDExLDYsMTIsOCwxMiwxMCwxMSwxNCw4LDE2LDcsMTgsNywyMCw4LDIxLDEwLC0xLC0xLDMsOCw0LDEwLDYsMTEsOCwxMSwxMCwxMCwxNCw3LDE2LDYsMTgsNiwyMCw3LDIxLDEwLDIxLDEyXV19LExyPXtzeW1ib2w6ZnVuY3Rpb24odCxlLHIsbil7aWYoInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7dmFyIGk9dC5jb250ZXh0O2kuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGkuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSwwIT09ci5wYWludC5nZXQoImljb24tb3BhY2l0eSIpLmNvbnN0YW50T3IoMSkmJmNyKHQsZSxyLG4sITEsci5wYWludC5nZXQoImljb24tdHJhbnNsYXRlIiksci5wYWludC5nZXQoImljb24tdHJhbnNsYXRlLWFuY2hvciIpLHIubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSxyLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50Iiksci5sYXlvdXQuZ2V0KCJpY29uLWtlZXAtdXByaWdodCIpKSwwIT09ci5wYWludC5nZXQoInRleHQtb3BhY2l0eSIpLmNvbnN0YW50T3IoMSkmJmNyKHQsZSxyLG4sITAsci5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlIiksci5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlLWFuY2hvciIpLHIubGF5b3V0LmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSxyLmxheW91dC5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50Iiksci5sYXlvdXQuZ2V0KCJ0ZXh0LWtlZXAtdXByaWdodCIpKSxlLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMmJmZ1bmN0aW9uKHQsZSxyLG4pe29yKHQsZSxyLG4sITEpLG9yKHQsZSxyLG4sITApfSh0LGUscixuKX19LGNpcmNsZTpmdW5jdGlvbih0LGUscixuKXtpZigidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzKXt2YXIgaT1yLnBhaW50LmdldCgiY2lyY2xlLW9wYWNpdHkiKSxhPXIucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLXdpZHRoIiksbz1yLnBhaW50LmdldCgiY2lyY2xlLXN0cm9rZS1vcGFjaXR5Iik7aWYoMCE9PWkuY29uc3RhbnRPcigxKXx8MCE9PWEuY29uc3RhbnRPcigxKSYmMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9dC5jb250ZXh0LGw9cy5nbDtzLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxzLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxzLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBjPSEwLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGY9blt1XSxoPWUuZ2V0VGlsZShmKSxwPWguZ2V0QnVja2V0KHIpO2lmKHApe3ZhciBkPXQuY29udGV4dC5wcm9ncmFtLmdldCgpLGc9cC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLHY9dC51c2VQcm9ncmFtKCJjaXJjbGUiLGcpO2lmKChjfHx2LnByb2dyYW0hPT1kKSYmKGcuc2V0VW5pZm9ybXMocyx2LHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLGM9ITEpLGwudW5pZm9ybTFmKHYudW5pZm9ybXMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlLHQudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpLGwudW5pZm9ybTFpKHYudW5pZm9ybXMudV9zY2FsZV93aXRoX21hcCwibWFwIj09PXIucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtc2NhbGUiKT8xOjApLCJtYXAiPT09ci5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKSl7bC51bmlmb3JtMWkodi51bmlmb3Jtcy51X3BpdGNoX3dpdGhfbWFwLDEpO3ZhciBtPU1lKGgsMSx0LnRyYW5zZm9ybS56b29tKTtsLnVuaWZvcm0yZih2LnVuaWZvcm1zLnVfZXh0cnVkZV9zY2FsZSxtLG0pfWVsc2UgbC51bmlmb3JtMWkodi51bmlmb3Jtcy51X3BpdGNoX3dpdGhfbWFwLDApLGwudW5pZm9ybTJmdih2LnVuaWZvcm1zLnVfZXh0cnVkZV9zY2FsZSx0LnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHMpO2wudW5pZm9ybU1hdHJpeDRmdih2LnVuaWZvcm1zLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KGYucG9zTWF0cml4LGgsci5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiKSkpLHYuZHJhdyhzLGwuVFJJQU5HTEVTLHIuaWQscC5sYXlvdXRWZXJ0ZXhCdWZmZXIscC5pbmRleEJ1ZmZlcixwLnNlZ21lbnRzLGcpfX19fX0saGVhdG1hcDpmdW5jdGlvbihlLHIsbixpKXtpZigwIT09bi5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpKWlmKCJvZmZzY3JlZW4iPT09ZS5yZW5kZXJQYXNzKXt2YXIgYT1lLmNvbnRleHQsbz1hLmdsO2Euc2V0RGVwdGhNb2RlKGUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSkpLGEuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmdsO3QuYWN0aXZlVGV4dHVyZS5zZXQobi5URVhUVVJFMSksdC52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLzQsZS5oZWlnaHQvNF0pO3ZhciBpPXIuaGVhdG1hcEZibztpZihpKW4uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGkuY29sb3JBdHRhY2htZW50LmdldCgpKSx0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoaS5mcmFtZWJ1ZmZlcik7ZWxzZXt2YXIgYT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxhKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTElORUFSKSxpPXIuaGVhdG1hcEZibz10LmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgvNCxlLmhlaWdodC80KSxmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuZ2w7YS50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwwLGEuUkdCQSxyLndpZHRoLzQsci5oZWlnaHQvNCwwLGEuUkdCQSxlLmV4dFRleHR1cmVIYWxmRmxvYXQ/ZS5leHRUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTOmEuVU5TSUdORURfQllURSxudWxsKSxpLmNvbG9yQXR0YWNobWVudC5zZXQobiksZS5leHRUZXh0dXJlSGFsZkZsb2F0JiZhLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoYS5GUkFNRUJVRkZFUikhPT1hLkZSQU1FQlVGRkVSX0NPTVBMRVRFJiYoZS5leHRUZXh0dXJlSGFsZkZsb2F0PW51bGwsaS5jb2xvckF0dGFjaG1lbnQuc2V0RGlydHkoKSx0KGUscixuLGkpKX0odCxlLGEsaSl9fShhLGUsbiksYS5jbGVhcih7Y29sb3I6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnR9KSxhLnNldENvbG9yTW9kZShuZXcgR3QoW28uT05FLG8uT05FXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITAsITAsITAsITBdKSk7Zm9yKHZhciBzPSEwLGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtpZighci5oYXNSZW5kZXJhYmxlUGFyZW50KGMpKXt2YXIgdT1yLmdldFRpbGUoYyksZj11LmdldEJ1Y2tldChuKTtpZihmKXt2YXIgaD1lLmNvbnRleHQucHJvZ3JhbS5nZXQoKSxwPWYucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxkPWUudXNlUHJvZ3JhbSgiaGVhdG1hcCIscCksZz1lLnRyYW5zZm9ybS56b29tOyhzfHxkLnByb2dyYW0hPT1oKSYmKHAuc2V0VW5pZm9ybXMoZS5jb250ZXh0LGQsbi5wYWludCx7em9vbTpnfSkscz0hMSksby51bmlmb3JtMWYoZC51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsTWUodSwxLGcpKSxvLnVuaWZvcm0xZihkLnVuaWZvcm1zLnVfaW50ZW5zaXR5LG4ucGFpbnQuZ2V0KCJoZWF0bWFwLWludGVuc2l0eSIpKSxvLnVuaWZvcm1NYXRyaXg0ZnYoZC51bmlmb3Jtcy51X21hdHJpeCwhMSxjLnBvc01hdHJpeCksZC5kcmF3KGEsby5UUklBTkdMRVMsbi5pZCxmLmxheW91dFZlcnRleEJ1ZmZlcixmLmluZGV4QnVmZmVyLGYuc2VnbWVudHMscCl9fX1hLnZpZXdwb3J0LnNldChbMCwwLGUud2lkdGgsZS5oZWlnaHRdKX1lbHNlInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyYmKGUuY29udGV4dC5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jb250ZXh0LGk9bi5nbCxhPXIuaGVhdG1hcEZibztpZihhKXtuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTApLGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELGEuY29sb3JBdHRhY2htZW50LmdldCgpKSxuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTEpO3ZhciBvPXIuY29sb3JSYW1wVGV4dHVyZTtvfHwobz1yLmNvbG9yUmFtcFRleHR1cmU9bmV3IHoobixyLmNvbG9yUmFtcCxpLlJHQkEpKSxvLmJpbmQoaS5MSU5FQVIsaS5DTEFNUF9UT19FREdFKSxuLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCk7dmFyIHM9ZS51c2VQcm9ncmFtKCJoZWF0bWFwVGV4dHVyZSIpLGw9ci5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpO2kudW5pZm9ybTFmKHMudW5pZm9ybXMudV9vcGFjaXR5LGwpLGkudW5pZm9ybTFpKHMudW5pZm9ybXMudV9pbWFnZSwwKSxpLnVuaWZvcm0xaShzLnVuaWZvcm1zLnVfY29sb3JfcmFtcCwxKTt2YXIgYz10Lm1hdDQuY3JlYXRlKCk7dC5tYXQ0Lm9ydGhvKGMsMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCwxKSxpLnVuaWZvcm1NYXRyaXg0ZnYocy51bmlmb3Jtcy51X21hdHJpeCwhMSxjKSxpLnVuaWZvcm0yZihzLnVuaWZvcm1zLnVfd29ybGQsaS5kcmF3aW5nQnVmZmVyV2lkdGgsaS5kcmF3aW5nQnVmZmVySGVpZ2h0KSxlLnZpZXdwb3J0VkFPLmJpbmQoZS5jb250ZXh0LHMsZS52aWV3cG9ydEJ1ZmZlcixbXSksaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVfU1RSSVAsMCw0KX19KGUsbikpfSxsaW5lOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3MmJjAhPT1yLnBhaW50LmdldCgibGluZS1vcGFjaXR5IikuY29uc3RhbnRPcigxKSl7dmFyIGk9dC5jb250ZXh0O2kuc2V0RGVwdGhNb2RlKHQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSkpLGkuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtmb3IodmFyIGEsbz1yLnBhaW50LmdldCgibGluZS1kYXNoYXJyYXkiKT8ibGluZVNERiI6ci5wYWludC5nZXQoImxpbmUtcGF0dGVybiIpPyJsaW5lUGF0dGVybiI6ci5wYWludC5nZXQoImxpbmUtZ3JhZGllbnQiKT8ibGluZUdyYWRpZW50IjoibGluZSIscz0hMCxsPTAsYz1uO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPWUuZ2V0VGlsZSh1KSxoPWYuZ2V0QnVja2V0KHIpO2lmKGgpe3ZhciBwPWgucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSxkPXQuY29udGV4dC5wcm9ncmFtLmdldCgpLGc9dC51c2VQcm9ncmFtKG8scCksdj1zfHxnLnByb2dyYW0hPT1kLG09YSE9PWYudGlsZUlELm92ZXJzY2FsZWRaO3YmJnAuc2V0VW5pZm9ybXModC5jb250ZXh0LGcsci5wYWludCx7em9vbTp0LnRyYW5zZm9ybS56b29tfSkscHIoZyx0LGYsaCxyLHUscCx2LG0pLGE9Zi50aWxlSUQub3ZlcnNjYWxlZFoscz0hMX19fX0sZmlsbDpmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uLnBhaW50LmdldCgiZmlsbC1jb2xvciIpLG89bi5wYWludC5nZXQoImZpbGwtb3BhY2l0eSIpO2lmKDAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPWUuY29udGV4dDtzLnNldENvbG9yTW9kZShlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7dmFyIGw9bi5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpfHwxIT09YS5jb25zdGFudE9yKHQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50KS5hfHwxIT09by5jb25zdGFudE9yKDApPyJ0cmFuc2x1Y2VudCI6Im9wYXF1ZSI7ZS5yZW5kZXJQYXNzPT09bCYmKHMuc2V0RGVwdGhNb2RlKGUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMSwib3BhcXVlIj09PWUucmVuZGVyUGFzcz9xdC5SZWFkV3JpdGU6cXQuUmVhZE9ubHkpKSxtcihlLHIsbixpLHlyKSksInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyYmbi5wYWludC5nZXQoImZpbGwtYW50aWFsaWFzIikmJihzLmxpbmVXaWR0aC5zZXQoMikscy5zZXREZXB0aE1vZGUoZS5kZXB0aE1vZGVGb3JTdWJsYXllcihuLmdldFBhaW50UHJvcGVydHkoImZpbGwtb3V0bGluZS1jb2xvciIpPzI6MCxxdC5SZWFkT25seSkpLG1yKGUscixuLGkseHIpKX19LCJmaWxsLWV4dHJ1c2lvbiI6ZnVuY3Rpb24oZSxyLG4saSl7aWYoMCE9PW4ucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5IikpaWYoIm9mZnNjcmVlbiI9PT1lLnJlbmRlclBhc3MpeyFmdW5jdGlvbihlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1yLnZpZXdwb3J0RnJhbWU7aWYoZS5kZXB0aFJib05lZWRzQ2xlYXImJmUuc2V0dXBPZmZzY3JlZW5EZXB0aFJlbmRlcmJ1ZmZlcigpLCFhKXt2YXIgbz1uZXcgeihuLHt3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodCxkYXRhOm51bGx9LGkuUkdCQSk7by5iaW5kKGkuTElORUFSLGkuQ0xBTVBfVE9fRURHRSksKGE9ci52aWV3cG9ydEZyYW1lPW4uY3JlYXRlRnJhbWVidWZmZXIoZS53aWR0aCxlLmhlaWdodCkpLmNvbG9yQXR0YWNobWVudC5zZXQoby50ZXh0dXJlKX1uLmJpbmRGcmFtZWJ1ZmZlci5zZXQoYS5mcmFtZWJ1ZmZlciksYS5kZXB0aEF0dGFjaG1lbnQuc2V0KGUuZGVwdGhSYm8pLGUuZGVwdGhSYm9OZWVkc0NsZWFyJiYobi5jbGVhcih7ZGVwdGg6MX0pLGUuZGVwdGhSYm9OZWVkc0NsZWFyPSExKSxuLmNsZWFyKHtjb2xvcjp0LmRlZmF1bHQkNi50cmFuc3BhcmVudH0pLG4uc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLG4uc2V0RGVwdGhNb2RlKG5ldyBxdChpLkxFUVVBTCxxdC5SZWFkV3JpdGUsWzAsMV0pKSxuLnNldENvbG9yTW9kZShlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSl9KGUsbik7Zm9yKHZhciBhPSEwLG89MCxzPWk7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9ci5nZXRUaWxlKGwpLHU9Yy5nZXRCdWNrZXQobik7dSYmKFRyKGUsMCxuLGMsbCx1LGEpLGE9ITEpfX1lbHNlInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyYmZnVuY3Rpb24odCxlKXt2YXIgcj1lLnZpZXdwb3J0RnJhbWU7aWYocil7dmFyIG49dC5jb250ZXh0LGk9bi5nbCxhPXQudXNlUHJvZ3JhbSgiZXh0cnVzaW9uVGV4dHVyZSIpO24uc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLG4uc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxuLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxyLmNvbG9yQXR0YWNobWVudC5nZXQoKSksaS51bmlmb3JtMWYoYS51bmlmb3Jtcy51X29wYWNpdHksZS5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiKSksaS51bmlmb3JtMWkoYS51bmlmb3Jtcy51X2ltYWdlLDApO3ZhciBvPXdyLmNyZWF0ZSgpO3dyLm9ydGhvKG8sMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCwxKSxpLnVuaWZvcm1NYXRyaXg0ZnYoYS51bmlmb3Jtcy51X21hdHJpeCwhMSxvKSxpLnVuaWZvcm0yZihhLnVuaWZvcm1zLnVfd29ybGQsaS5kcmF3aW5nQnVmZmVyV2lkdGgsaS5kcmF3aW5nQnVmZmVySGVpZ2h0KSx0LnZpZXdwb3J0VkFPLmJpbmQobixhLHQudmlld3BvcnRCdWZmZXIsW10pLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFX1NUUklQLDAsNCl9fShlLG4pfSxoaWxsc2hhZGU6ZnVuY3Rpb24odCxlLHIsbil7aWYoIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3N8fCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3Mpe3ZhciBpPXQuY29udGV4dCxhPWUuZ2V0U291cmNlKCkubWF4em9vbTtpLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxpLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxpLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBvPTAscz1uO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWUuZ2V0VGlsZShsKTtjLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSYmIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3M/TXIodCxjLGEpOiJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3MmJkFyKHQsYyxyKX1pLnZpZXdwb3J0LnNldChbMCwwLHQud2lkdGgsdC5oZWlnaHRdKX19LHJhc3RlcjpmdW5jdGlvbih0LGUscixuKXtpZigidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzJiYwIT09ci5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5Iikpe3ZhciBpLGEsbz10LmNvbnRleHQscz1vLmdsLGw9ZS5nZXRTb3VyY2UoKSxjPXQudXNlUHJvZ3JhbSgicmFzdGVyIik7by5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksby5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9icmlnaHRuZXNzX2xvdyxyLnBhaW50LmdldCgicmFzdGVyLWJyaWdodG5lc3MtbWluIikpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9icmlnaHRuZXNzX2hpZ2gsci5wYWludC5nZXQoInJhc3Rlci1icmlnaHRuZXNzLW1heCIpKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfc2F0dXJhdGlvbl9mYWN0b3IsKGk9ci5wYWludC5nZXQoInJhc3Rlci1zYXR1cmF0aW9uIikpPjA/MS0xLygxLjAwMS1pKTotaSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X2NvbnRyYXN0X2ZhY3RvciwoYT1yLnBhaW50LmdldCgicmFzdGVyLWNvbnRyYXN0IikpPjA/MS8oMS1hKToxK2EpLHMudW5pZm9ybTNmdihjLnVuaWZvcm1zLnVfc3Bpbl93ZWlnaHRzLGZ1bmN0aW9uKHQpe3QqPU1hdGguUEkvMTgwO3ZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCk7cmV0dXJuWygyKnIrMSkvMywoLU1hdGguc3FydCgzKSplLXIrMSkvMywoTWF0aC5zcXJ0KDMpKmUtcisxKS8zXX0oci5wYWludC5nZXQoInJhc3Rlci1odWUtcm90YXRlIikpKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfYnVmZmVyX3NjYWxlLDEpLHMudW5pZm9ybTFpKGMudW5pZm9ybXMudV9pbWFnZTAsMCkscy51bmlmb3JtMWkoYy51bmlmb3Jtcy51X2ltYWdlMSwxKTtmb3IodmFyIHU9bi5sZW5ndGgmJm5bMF0ub3ZlcnNjYWxlZFosZj0wLGg9bjtmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl07by5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcihwLm92ZXJzY2FsZWRaLXUsMT09PXIucGFpbnQuZ2V0KCJyYXN0ZXItb3BhY2l0eSIpP3F0LlJlYWRXcml0ZTpxdC5SZWFkT25seSxzLkxFU1MpKTt2YXIgZD1lLmdldFRpbGUocCksZz10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgocC50b1Vud3JhcHBlZCgpLCEwKTtkLnJlZ2lzdGVyRmFkZUR1cmF0aW9uKHIucGFpbnQuZ2V0KCJyYXN0ZXItZmFkZS1kdXJhdGlvbiIpKSxzLnVuaWZvcm1NYXRyaXg0ZnYoYy51bmlmb3Jtcy51X21hdHJpeCwhMSxnKTt2YXIgdj1lLmZpbmRMb2FkZWRQYXJlbnQocCwwLHt9KSxtPVNyKGQsdixlLHIsdC50cmFuc2Zvcm0pLHk9dm9pZCAwLHg9dm9pZCAwO2lmKG8uYWN0aXZlVGV4dHVyZS5zZXQocy5URVhUVVJFMCksZC50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxvLmFjdGl2ZVRleHR1cmUuc2V0KHMuVEVYVFVSRTEpLHY/KHYudGV4dHVyZS5iaW5kKHMuTElORUFSLHMuQ0xBTVBfVE9fRURHRSxzLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCkseT1NYXRoLnBvdygyLHYudGlsZUlELm92ZXJzY2FsZWRaLWQudGlsZUlELm92ZXJzY2FsZWRaKSx4PVtkLnRpbGVJRC5jYW5vbmljYWwueCp5JTEsZC50aWxlSUQuY2Fub25pY2FsLnkqeSUxXSk6ZC50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxzLnVuaWZvcm0yZnYoYy51bmlmb3Jtcy51X3RsX3BhcmVudCx4fHxbMCwwXSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X3NjYWxlX3BhcmVudCx5fHwxKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfZmFkZV90LG0ubWl4KSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfb3BhY2l0eSxtLm9wYWNpdHkqci5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5IikpLGwgaW5zdGFuY2VvZiB0dCl7dmFyIGI9bC5ib3VuZHNCdWZmZXI7bC5ib3VuZHNWQU8uYmluZChvLGMsYixbXSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVfU1RSSVAsMCxiLmxlbmd0aCl9ZWxzZSBpZihkLm1hc2tlZEJvdW5kc0J1ZmZlciYmZC5tYXNrZWRJbmRleEJ1ZmZlciYmZC5zZWdtZW50cyljLmRyYXcobyxzLlRSSUFOR0xFUyxyLmlkLGQubWFza2VkQm91bmRzQnVmZmVyLGQubWFza2VkSW5kZXhCdWZmZXIsZC5zZWdtZW50cyk7ZWxzZXt2YXIgXz10LnJhc3RlckJvdW5kc0J1ZmZlcjt0LnJhc3RlckJvdW5kc1ZBTy5iaW5kKG8sYyxfLFtdKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRV9TVFJJUCwwLF8ubGVuZ3RoKX19fX0sYmFja2dyb3VuZDpmdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoImJhY2tncm91bmQtY29sb3IiKSxpPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLW9wYWNpdHkiKTtpZigwIT09aSl7dmFyIGE9dC5jb250ZXh0LG89YS5nbCxzPXQudHJhbnNmb3JtLGw9cy50aWxlU2l6ZSxjPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLXBhdHRlcm4iKSx1PWN8fDEhPT1uLmF8fDEhPT1pPyJ0cmFuc2x1Y2VudCI6Im9wYXF1ZSI7aWYodC5yZW5kZXJQYXNzPT09dSl7dmFyIGY7aWYoYS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksYS5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCJvcGFxdWUiPT09dT9xdC5SZWFkV3JpdGU6cXQuUmVhZE9ubHkpKSxhLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksYyl7aWYoZHIoYyx0KSlyZXR1cm47Zj10LnVzZVByb2dyYW0oImJhY2tncm91bmRQYXR0ZXJuIiksZ3IoYyx0LGYpLHQudGlsZUV4dGVudFBhdHRlcm5WQU8uYmluZChhLGYsdC50aWxlRXh0ZW50QnVmZmVyLFtdKX1lbHNlIGY9dC51c2VQcm9ncmFtKCJiYWNrZ3JvdW5kIiksby51bmlmb3JtNGZ2KGYudW5pZm9ybXMudV9jb2xvcixbbi5yLG4uZyxuLmIsbi5hXSksdC50aWxlRXh0ZW50VkFPLmJpbmQoYSxmLHQudGlsZUV4dGVudEJ1ZmZlcixbXSk7by51bmlmb3JtMWYoZi51bmlmb3Jtcy51X29wYWNpdHksaSk7Zm9yKHZhciBoPTAscD1zLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOmx9KTtoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF07YyYmdnIoe3RpbGVJRDpkLHRpbGVTaXplOmx9LHQsZiksby51bmlmb3JtTWF0cml4NGZ2KGYudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGQudG9VbndyYXBwZWQoKSkpLG8uZHJhd0FycmF5cyhvLlRSSUFOR0xFX1NUUklQLDAsdC50aWxlRXh0ZW50QnVmZmVyLmxlbmd0aCl9fX19LGRlYnVnOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylFcih0LGUscltuXSl9fSx6cj1mdW5jdGlvbihlLHIpe3RoaXMuY29udGV4dD1uZXcgWXQoZSksdGhpcy50cmFuc2Zvcm09cix0aGlzLl90aWxlVGV4dHVyZXM9e30sdGhpcy5zZXR1cCgpLHRoaXMubnVtU3VibGF5ZXJzPVd0Lm1heFVuZGVyem9vbWluZytXdC5tYXhPdmVyem9vbWluZysxLHRoaXMuZGVwdGhFcHNpbG9uPTEvTWF0aC5wb3coMiwxNiksdGhpcy5kZXB0aFJib05lZWRzQ2xlYXI9ITAsdGhpcy5lbXB0eVByb2dyYW1Db25maWd1cmF0aW9uPW5ldyB0LmRlZmF1bHQkMjQsdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgV2V9O2Z1bmN0aW9uIE9yKHQsZSl7aWYodC5yb3c+ZS5yb3cpe3ZhciByPXQ7dD1lLGU9cn1yZXR1cm57eDA6dC5jb2x1bW4seTA6dC5yb3cseDE6ZS5jb2x1bW4seTE6ZS5yb3csZHg6ZS5jb2x1bW4tdC5jb2x1bW4sZHk6ZS5yb3ctdC5yb3d9fWZ1bmN0aW9uIElyKHQsZSxyLG4saSl7dmFyIGE9TWF0aC5tYXgocixNYXRoLmZsb29yKGUueTApKSxvPU1hdGgubWluKG4sTWF0aC5jZWlsKGUueTEpKTtpZih0LngwPT09ZS54MCYmdC55MD09PWUueTA/dC54MCtlLmR5L3QuZHkqdC5keDxlLngxOnQueDEtZS5keS90LmR5KnQuZHg8ZS54MCl7dmFyIHM9dDt0PWUsZT1zfWZvcih2YXIgbD10LmR4L3QuZHksYz1lLmR4L2UuZHksdT10LmR4PjAsZj1lLmR4PDAsaD1hO2g8bztoKyspe3ZhciBwPWwqTWF0aC5tYXgoMCxNYXRoLm1pbih0LmR5LGgrdS10LnkwKSkrdC54MCxkPWMqTWF0aC5tYXgoMCxNYXRoLm1pbihlLmR5LGgrZi1lLnkwKSkrZS54MDtpKE1hdGguZmxvb3IoZCksTWF0aC5jZWlsKHApLGgpfX1mdW5jdGlvbiBEcih0LGUscixuLGksYSl7dmFyIG8scz1Pcih0LGUpLGw9T3IoZSxyKSxjPU9yKHIsdCk7cy5keT5sLmR5JiYobz1zLHM9bCxsPW8pLHMuZHk+Yy5keSYmKG89cyxzPWMsYz1vKSxsLmR5PmMuZHkmJihvPWwsbD1jLGM9bykscy5keSYmSXIoYyxzLG4saSxhKSxsLmR5JiZJcihjLGwsbixpLGEpfXpyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbnRleHQuZ2w7aWYodGhpcy53aWR0aD10KmEuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmhlaWdodD1lKmEuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF0pLHRoaXMuc3R5bGUpZm9yKHZhciBuPTAsaT10aGlzLnN0eWxlLl9vcmRlcjtuPGkubGVuZ3RoO24rPTEpe3ZhciBvPWlbbl07dGhpcy5zdHlsZS5fbGF5ZXJzW29dLnJlc2l6ZSgpfXRoaXMuZGVwdGhSYm8mJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLmRlcHRoUmJvKSx0aGlzLmRlcHRoUmJvPW51bGwpfSx6ci5wcm90b3R5cGUuc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQscj1uZXcgdC5Qb3NBcnJheTtyLmVtcGxhY2VCYWNrKDAsMCksci5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCwwKSxyLmVtcGxhY2VCYWNrKDAsdC5kZWZhdWx0JDgpLHIuZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLHRoaXMudGlsZUV4dGVudEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihyLEtlLm1lbWJlcnMpLHRoaXMudGlsZUV4dGVudFZBTz1uZXcgUSx0aGlzLnRpbGVFeHRlbnRQYXR0ZXJuVkFPPW5ldyBRO3ZhciBuPW5ldyB0LlBvc0FycmF5O24uZW1wbGFjZUJhY2soMCwwKSxuLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LDApLG4uZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLG4uZW1wbGFjZUJhY2soMCx0LmRlZmF1bHQkOCksbi5lbXBsYWNlQmFjaygwLDApLHRoaXMuZGVidWdCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIobixLZS5tZW1iZXJzKSx0aGlzLmRlYnVnVkFPPW5ldyBRO3ZhciBpPW5ldyB0LlJhc3RlckJvdW5kc0FycmF5O2kuZW1wbGFjZUJhY2soMCwwLDAsMCksaS5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCwwLHQuZGVmYXVsdCQ4LDApLGkuZW1wbGFjZUJhY2soMCx0LmRlZmF1bHQkOCwwLHQuZGVmYXVsdCQ4KSxpLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4KSx0aGlzLnJhc3RlckJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihpLEsubWVtYmVycyksdGhpcy5yYXN0ZXJCb3VuZHNWQU89bmV3IFE7dmFyIGE9bmV3IHQuUG9zQXJyYXk7YS5lbXBsYWNlQmFjaygwLDApLGEuZW1wbGFjZUJhY2soMSwwKSxhLmVtcGxhY2VCYWNrKDAsMSksYS5lbXBsYWNlQmFjaygxLDEpLHRoaXMudmlld3BvcnRCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoYSxLZS5tZW1iZXJzKSx0aGlzLnZpZXdwb3J0VkFPPW5ldyBRfSx6ci5wcm90b3R5cGUuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9ZS5nbDtlLnNldENvbG9yTW9kZShHdC5kaXNhYmxlZCksZS5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpLGUuc2V0U3RlbmNpbE1vZGUobmV3IEh0KHtmdW5jOnIuQUxXQVlTLG1hc2s6MH0sMCwyNTUsci5aRVJPLHIuWkVSTyxyLlpFUk8pKTt2YXIgbj10Lm1hdDQuY3JlYXRlKCk7dC5tYXQ0Lm9ydGhvKG4sMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsMCwxKSx0Lm1hdDQuc2NhbGUobixuLFtyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsMF0pO3ZhciBpPXRoaXMudXNlUHJvZ3JhbSgiY2xpcHBpbmdNYXNrIik7ci51bmlmb3JtTWF0cml4NGZ2KGkudW5pZm9ybXMudV9tYXRyaXgsITEsbiksdGhpcy52aWV3cG9ydFZBTy5iaW5kKGUsaSx0aGlzLnZpZXdwb3J0QnVmZmVyLFtdKSxyLmRyYXdBcnJheXMoci5UUklBTkdMRV9TVFJJUCwwLDQpfSx6ci5wcm90b3R5cGUuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dCxyPWUuZ2w7ZS5zZXRDb2xvck1vZGUoR3QuZGlzYWJsZWQpLGUuc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKTt2YXIgbj0xO3RoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHM9e307Zm9yKHZhciBpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPXRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbby5rZXldPW4rKztlLnNldFN0ZW5jaWxNb2RlKG5ldyBIdCh7ZnVuYzpyLkFMV0FZUyxtYXNrOjB9LHMsMjU1LHIuS0VFUCxyLktFRVAsci5SRVBMQUNFKSk7dmFyIGw9dGhpcy51c2VQcm9ncmFtKCJjbGlwcGluZ01hc2siKTtyLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxvLnBvc01hdHJpeCksdGhpcy50aWxlRXh0ZW50VkFPLmJpbmQodGhpcy5jb250ZXh0LGwsdGhpcy50aWxlRXh0ZW50QnVmZmVyLFtdKSxyLmRyYXdBcnJheXMoci5UUklBTkdMRV9TVFJJUCwwLHRoaXMudGlsZUV4dGVudEJ1ZmZlci5sZW5ndGgpfX0senIucHJvdG90eXBlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiBuZXcgSHQoe2Z1bmM6ZS5FUVVBTCxtYXNrOjI1NX0sdGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1t0LmtleV0sMCxlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSl9LHpyLnByb3RvdHlwZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I/bmV3IEd0KFtlLkNPTlNUQU5UX0NPTE9SLGUuT05FXSxuZXcgdC5kZWZhdWx0JDYoMS84LDEvOCwxLzgsMCksWyEwLCEwLCEwLCEwXSk6Im9wYXF1ZSI9PT10aGlzLnJlbmRlclBhc3M/R3QudW5ibGVuZGVkOkd0LmFscGhhQmxlbmRlZH0senIucHJvdG90eXBlLmRlcHRoTW9kZUZvclN1YmxheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0xLSgoMSt0aGlzLmN1cnJlbnRMYXllcikqdGhpcy5udW1TdWJsYXllcnMrdCkqdGhpcy5kZXB0aEVwc2lsb24saT1uLTErdGhpcy5kZXB0aFJhbmdlO3JldHVybiBuZXcgcXQocnx8dGhpcy5jb250ZXh0LmdsLkxFUVVBTCxlLFtpLG5dKX0senIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7Zm9yKHZhciBpIGluIHRoaXMuc3R5bGU9ZSx0aGlzLm9wdGlvbnM9cix0aGlzLmxpbmVBdGxhcz1lLmxpbmVBdGxhcyx0aGlzLmltYWdlTWFuYWdlcj1lLmltYWdlTWFuYWdlcix0aGlzLmdseXBoTWFuYWdlcj1lLmdseXBoTWFuYWdlcix0aGlzLnN5bWJvbEZhZGVDaGFuZ2U9ZS5wbGFjZW1lbnQuc3ltYm9sRmFkZUNoYW5nZShhLm5vdygpKSxlLnNvdXJjZUNhY2hlcyl7dmFyIG89bi5zdHlsZS5zb3VyY2VDYWNoZXNbaV07by51c2VkJiZvLnByZXBhcmUobi5jb250ZXh0KX12YXIgcz10aGlzLnN0eWxlLl9vcmRlcixsPXQuZmlsdGVyT2JqZWN0KHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzLGZ1bmN0aW9uKHQpe3JldHVybiJyYXN0ZXIiPT09dC5nZXRTb3VyY2UoKS50eXBlfHwicmFzdGVyLWRlbSI9PT10LmdldFNvdXJjZSgpLnR5cGV9KSxjPWZ1bmN0aW9uKGUpe3ZhciByPWxbZV07IWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWUuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnRpbGVJRC5pc0xlc3NUaGFuKGUudGlsZUlEKT8tMTplLnRpbGVJRC5pc0xlc3NUaGFuKHQudGlsZUlEKT8xOjB9KSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPXt9LG89bltpXSxzPW4uc2xpY2UoaSsxKTthcihvLnRpbGVJRC53cmFwcGVkKCksby50aWxlSUQscyxuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKDAsby50aWxlSUQud3JhcCsxLDAsMCwwKSxhKSxvLnNldE1hc2soYSxyKX19KHIuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByLmdldFRpbGUodCl9KSxuLmNvbnRleHQpfTtmb3IodmFyIHUgaW4gbCljKHUpO3RoaXMucmVuZGVyUGFzcz0ib2Zmc2NyZWVuIjt2YXIgZixoPVtdO3RoaXMuZGVwdGhSYm9OZWVkc0NsZWFyPSEwO2Zvcih2YXIgcD0wO3A8cy5sZW5ndGg7cCsrKXt2YXIgZD1uLnN0eWxlLl9sYXllcnNbc1twXV07ZC5oYXNPZmZzY3JlZW5QYXNzKCkmJiFkLmlzSGlkZGVuKG4udHJhbnNmb3JtLnpvb20pJiYoZC5zb3VyY2UhPT0oZiYmZi5pZCkmJihoPVtdLChmPW4uc3R5bGUuc291cmNlQ2FjaGVzW2Quc291cmNlXSkmJihoPWYuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpLnJldmVyc2UoKSksaC5sZW5ndGgmJm4ucmVuZGVyTGF5ZXIobixmLGQsaCkpfXRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpLHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6ci5zaG93T3ZlcmRyYXdJbnNwZWN0b3I/dC5kZWZhdWx0JDYuYmxhY2s6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsZGVwdGg6MX0pLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj1yLnNob3dPdmVyZHJhd0luc3BlY3Rvcix0aGlzLmRlcHRoUmFuZ2U9KGUuX29yZGVyLmxlbmd0aCsyKSp0aGlzLm51bVN1YmxheWVycyp0aGlzLmRlcHRoRXBzaWxvbix0aGlzLnJlbmRlclBhc3M9Im9wYXF1ZSI7dmFyIGcsdj1bXTtmb3IodGhpcy5jdXJyZW50TGF5ZXI9cy5sZW5ndGgtMSx0aGlzLmN1cnJlbnRMYXllcjt0aGlzLmN1cnJlbnRMYXllcj49MDt0aGlzLmN1cnJlbnRMYXllci0tKXt2YXIgbT1uLnN0eWxlLl9sYXllcnNbc1tuLmN1cnJlbnRMYXllcl1dO20uc291cmNlIT09KGcmJmcuaWQpJiYodj1bXSwoZz1uLnN0eWxlLnNvdXJjZUNhY2hlc1ttLnNvdXJjZV0pJiYobi5jbGVhclN0ZW5jaWwoKSx2PWcuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCksZy5nZXRTb3VyY2UoKS5pc1RpbGVDbGlwcGVkJiZuLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyh2KSkpLG4ucmVuZGVyTGF5ZXIobixnLG0sdil9dGhpcy5yZW5kZXJQYXNzPSJ0cmFuc2x1Y2VudCI7dmFyIHkseD1bXTtmb3IodGhpcy5jdXJyZW50TGF5ZXI9MCx0aGlzLmN1cnJlbnRMYXllcjt0aGlzLmN1cnJlbnRMYXllcjxzLmxlbmd0aDt0aGlzLmN1cnJlbnRMYXllcisrKXt2YXIgYj1uLnN0eWxlLl9sYXllcnNbc1tuLmN1cnJlbnRMYXllcl1dO2Iuc291cmNlIT09KHkmJnkuaWQpJiYoeD1bXSwoeT1uLnN0eWxlLnNvdXJjZUNhY2hlc1tiLnNvdXJjZV0pJiYobi5jbGVhclN0ZW5jaWwoKSx4PXkuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkseS5nZXRTb3VyY2UoKS5pc1RpbGVDbGlwcGVkJiZuLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyh4KSkseC5yZXZlcnNlKCkpLG4ucmVuZGVyTGF5ZXIobix5LGIseCl9aWYodGhpcy5vcHRpb25zLnNob3dUaWxlQm91bmRhcmllcyl7dmFyIF89dGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbT2JqZWN0LmtleXModGhpcy5zdHlsZS5zb3VyY2VDYWNoZXMpWzBdXTtfJiZMci5kZWJ1Zyh0aGlzLF8sXy5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSl9fSx6ci5wcm90b3R5cGUuc2V0dXBPZmZzY3JlZW5EZXB0aFJlbmRlcmJ1ZmZlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dDt0aGlzLmRlcHRoUmJvfHwodGhpcy5kZXB0aFJibz10LmNyZWF0ZVJlbmRlcmJ1ZmZlcih0LmdsLkRFUFRIX0NPTVBPTkVOVDE2LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKX0senIucHJvdG90eXBlLnJlbmRlckxheWVyPWZ1bmN0aW9uKHQsZSxyLG4pe3IuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSl8fCgiYmFja2dyb3VuZCI9PT1yLnR5cGV8fG4ubGVuZ3RoKSYmKHRoaXMuaWQ9ci5pZCxMcltyLnR5cGVdKHQsZSxyLG4pKX0senIucHJvdG90eXBlLnRyYW5zbGF0ZVBvc01hdHJpeD1mdW5jdGlvbihlLHIsbixpLGEpe2lmKCFuWzBdJiYhblsxXSlyZXR1cm4gZTt2YXIgbz1hPyJtYXAiPT09aT90aGlzLnRyYW5zZm9ybS5hbmdsZTowOiJ2aWV3cG9ydCI9PT1pPy10aGlzLnRyYW5zZm9ybS5hbmdsZTowO2lmKG8pe3ZhciBzPU1hdGguc2luKG8pLGw9TWF0aC5jb3Mobyk7bj1bblswXSpsLW5bMV0qcyxuWzBdKnMrblsxXSpsXX12YXIgYz1bYT9uWzBdOk1lKHIsblswXSx0aGlzLnRyYW5zZm9ybS56b29tKSxhP25bMV06TWUocixuWzFdLHRoaXMudHJhbnNmb3JtLnpvb20pLDBdLHU9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHQubWF0NC50cmFuc2xhdGUodSxlLGMpLHV9LHpyLnByb3RvdHlwZS5zYXZlVGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV07ZT9lLnB1c2godCk6dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV09W3RdfSx6ci5wcm90b3R5cGUuZ2V0VGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3RdO3JldHVybiBlJiZlLmxlbmd0aD4wP2UucG9wKCk6bnVsbH0senIucHJvdG90eXBlLl9jcmVhdGVQcm9ncmFtQ2FjaGVkPWZ1bmN0aW9uKHQsZSl7dGhpcy5jYWNoZT10aGlzLmNhY2hlfHx7fTt2YXIgcj0iIit0KyhlLmNhY2hlS2V5fHwiIikrKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj8iL292ZXJkcmF3IjoiIik7cmV0dXJuIHRoaXMuY2FjaGVbcl18fCh0aGlzLmNhY2hlW3JdPW5ldyBpcih0aGlzLmNvbnRleHQsbnJbdF0sZSx0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IpKSx0aGlzLmNhY2hlW3JdfSx6ci5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2NyZWF0ZVByb2dyYW1DYWNoZWQodCxlfHx0aGlzLmVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb24pO3JldHVybiB0aGlzLmNvbnRleHQucHJvZ3JhbS5zZXQoci5wcm9ncmFtKSxyfTt2YXIgUHI9dC5kZWZhdWx0JDIwLnZlYzQsUnI9dC5kZWZhdWx0JDIwLm1hdDQsRnI9dC5kZWZhdWx0JDIwLm1hdDIsQnI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZVNpemU9NTEyLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXZvaWQgMD09PXJ8fHIsdGhpcy5fbWluWm9vbT10fHwwLHRoaXMuX21heFpvb209ZXx8MjIsdGhpcy5sYXRSYW5nZT1bLTg1LjA1MTEzLDg1LjA1MTEzXSx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLl9jZW50ZXI9bmV3IEcoMCwwKSx0aGlzLnpvb209MCx0aGlzLmFuZ2xlPTAsdGhpcy5fZm92PS42NDM1MDExMDg3OTMyODQ0LHRoaXMuX3BpdGNoPTAsdGhpcy5fdW5tb2RpZmllZD0hMCx0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319LE5yPXttaW5ab29tOntjb25maWd1cmFibGU6ITB9LG1heFpvb206e2NvbmZpZ3VyYWJsZTohMH0scmVuZGVyV29ybGRDb3BpZXM6e2NvbmZpZ3VyYWJsZTohMH0sd29ybGRTaXplOntjb25maWd1cmFibGU6ITB9LGNlbnRlclBvaW50Ontjb25maWd1cmFibGU6ITB9LHNpemU6e2NvbmZpZ3VyYWJsZTohMH0sYmVhcmluZzp7Y29uZmlndXJhYmxlOiEwfSxwaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxmb3Y6e2NvbmZpZ3VyYWJsZTohMH0sem9vbTp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXI6e2NvbmZpZ3VyYWJsZTohMH0sdW5tb2RpZmllZDp7Y29uZmlndXJhYmxlOiEwfSx4Ontjb25maWd1cmFibGU6ITB9LHk6e2NvbmZpZ3VyYWJsZTohMH0scG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O0JyLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBCcih0aGlzLl9taW5ab29tLHRoaXMuX21heFpvb20sdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpO3JldHVybiB0LnRpbGVTaXplPXRoaXMudGlsZVNpemUsdC5sYXRSYW5nZT10aGlzLmxhdFJhbmdlLHQud2lkdGg9dGhpcy53aWR0aCx0LmhlaWdodD10aGlzLmhlaWdodCx0Ll9jZW50ZXI9dGhpcy5fY2VudGVyLHQuem9vbT10aGlzLnpvb20sdC5hbmdsZT10aGlzLmFuZ2xlLHQuX2Zvdj10aGlzLl9mb3YsdC5fcGl0Y2g9dGhpcy5fcGl0Y2gsdC5fdW5tb2RpZmllZD10aGlzLl91bm1vZGlmaWVkLHQuX2NhbGNNYXRyaWNlcygpLHR9LE5yLm1pblpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pblpvb219LE5yLm1pblpvb20uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21pblpvb20hPT10JiYodGhpcy5fbWluWm9vbT10LHRoaXMuem9vbT1NYXRoLm1heCh0aGlzLnpvb20sdCkpfSxOci5tYXhab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhab29tfSxOci5tYXhab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9tYXhab29tIT09dCYmKHRoaXMuX21heFpvb209dCx0aGlzLnpvb209TWF0aC5taW4odGhpcy56b29tLHQpKX0sTnIucmVuZGVyV29ybGRDb3BpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzfSxOci5yZW5kZXJXb3JsZENvcGllcy5zZXQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dD90PSEwOm51bGw9PT10JiYodD0hMSksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXM9dH0sTnIud29ybGRTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpbGVTaXplKnRoaXMuc2NhbGV9LE5yLmNlbnRlclBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUuX2RpdigyKX0sTnIuc2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxOci5iZWFyaW5nLmdldD1mdW5jdGlvbigpe3JldHVybi10aGlzLmFuZ2xlL01hdGguUEkqMTgwfSxOci5iZWFyaW5nLnNldD1mdW5jdGlvbihlKXt2YXIgcj0tdC53cmFwKGUsLTE4MCwxODApKk1hdGguUEkvMTgwO3RoaXMuYW5nbGUhPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLmFuZ2xlPXIsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5yb3RhdGlvbk1hdHJpeD1Gci5jcmVhdGUoKSxGci5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMuYW5nbGUpKX0sTnIucGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoL01hdGguUEkqMTgwfSxOci5waXRjaC5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jbGFtcChlLDAsNjApLzE4MCpNYXRoLlBJO3RoaXMuX3BpdGNoIT09ciYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fcGl0Y2g9cix0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE5yLmZvdi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm92L01hdGguUEkqMTgwfSxOci5mb3Yuc2V0PWZ1bmN0aW9uKHQpe3Q9TWF0aC5tYXgoLjAxLE1hdGgubWluKDYwLHQpKSx0aGlzLl9mb3YhPT10JiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9mb3Y9dC8xODAqTWF0aC5QSSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE5yLnpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LE5yLnpvb20uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWluKE1hdGgubWF4KHQsdGhpcy5taW5ab29tKSx0aGlzLm1heFpvb20pO3RoaXMuX3pvb20hPT1lJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl96b29tPWUsdGhpcy5zY2FsZT10aGlzLnpvb21TY2FsZShlKSx0aGlzLnRpbGVab29tPU1hdGguZmxvb3IoZSksdGhpcy56b29tRnJhY3Rpb249ZS10aGlzLnRpbGVab29tLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTnIuY2VudGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZW50ZXJ9LE5yLmNlbnRlci5zZXQ9ZnVuY3Rpb24odCl7dC5sYXQ9PT10aGlzLl9jZW50ZXIubGF0JiZ0LmxuZz09PXRoaXMuX2NlbnRlci5sbmd8fCh0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2NlbnRlcj10LHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sQnIucHJvdG90eXBlLmNvdmVyaW5nWm9vbUxldmVsPWZ1bmN0aW9uKHQpe3JldHVybih0LnJvdW5kWm9vbT9NYXRoLnJvdW5kOk1hdGguZmxvb3IpKHRoaXMuem9vbSt0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplL3QudGlsZVNpemUpKX0sQnIucHJvdG90eXBlLmdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCwwKSwwKSxuPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLDApLDApLGk9TWF0aC5mbG9vcihyLmNvbHVtbiksYT1NYXRoLmZsb29yKG4uY29sdW1uKSxvPVtuZXcgdC5VbndyYXBwZWRUaWxlSUQoMCxlKV07aWYodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpZm9yKHZhciBzPWk7czw9YTtzKyspMCE9PXMmJm8ucHVzaChuZXcgdC5VbndyYXBwZWRUaWxlSUQocyxlKSk7cmV0dXJuIG99LEJyLnByb3RvdHlwZS5jb3ZlcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY292ZXJpbmdab29tTGV2ZWwoZSksbj1yO2lmKHZvaWQgMCE9PWUubWluem9vbSYmcjxlLm1pbnpvb20pcmV0dXJuW107dm9pZCAwIT09ZS5tYXh6b29tJiZyPmUubWF4em9vbSYmKHI9ZS5tYXh6b29tKTt2YXIgaT10aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50LHIpLGE9bmV3IHQuZGVmYXVsdCQxKGkuY29sdW1uLS41LGkucm93LS41KTtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7dm9pZCAwPT09aSYmKGk9ITApO3ZhciBhPTE8PGUsbz17fTtmdW5jdGlvbiBzKHIscyxsKXt2YXIgYyx1LGYsaDtpZihsPj0wJiZsPD1hKWZvcihjPXI7YzxzO2MrKyl1PU1hdGguZmxvb3IoYy9hKSxmPShjJWErYSklYSwwIT09dSYmITAhPT1pfHwoaD1uZXcgdC5PdmVyc2NhbGVkVGlsZUlEKG4sdSxlLGYsbCksb1toLmtleV09aCl9cmV0dXJuIERyKHJbMF0sclsxXSxyWzJdLDAsYSxzKSxEcihyWzJdLHJbM10sclswXSwwLGEscyksT2JqZWN0LmtleXMobykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfSl9KHIsW3RoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSgwLDApLHIpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLDApLHIpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSxyKSx0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLmhlaWdodCkscildLGUucmVwYXJzZU92ZXJzY2FsZWQ/bjpyLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZGlzdCh0LmNhbm9uaWNhbCktYS5kaXN0KGUuY2Fub25pY2FsKX0pfSxCci5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5waXhlbHNUb0dMVW5pdHM9WzIvdCwtMi9lXSx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKX0sTnIudW5tb2RpZmllZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdW5tb2RpZmllZH0sQnIucHJvdG90eXBlLnpvb21TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sQnIucHJvdG90eXBlLnNjYWxlWm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9LEJyLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5kZWZhdWx0JDEodGhpcy5sbmdYKGUubG5nKSx0aGlzLmxhdFkoZS5sYXQpKX0sQnIucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEcodGhpcy54TG5nKHQueCksdGhpcy55TGF0KHQueSkpfSxOci54LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxuZ1godGhpcy5jZW50ZXIubG5nKX0sTnIueS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXRZKHRoaXMuY2VudGVyLmxhdCl9LE5yLnBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5kZWZhdWx0JDEodGhpcy54LHRoaXMueSl9LEJyLnByb3RvdHlwZS5sbmdYPWZ1bmN0aW9uKHQpe3JldHVybigxODArdCkqdGhpcy53b3JsZFNpemUvMzYwfSxCci5wcm90b3R5cGUubGF0WT1mdW5jdGlvbih0KXtyZXR1cm4oMTgwLTE4MC9NYXRoLlBJKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0Kk1hdGguUEkvMzYwKSkpKnRoaXMud29ybGRTaXplLzM2MH0sQnIucHJvdG90eXBlLnhMbmc9ZnVuY3Rpb24odCl7cmV0dXJuIDM2MCp0L3RoaXMud29ybGRTaXplLTE4MH0sQnIucHJvdG90eXBlLnlMYXQ9ZnVuY3Rpb24odCl7dmFyIGU9MTgwLTM2MCp0L3RoaXMud29ybGRTaXplO3JldHVybiAzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoZSpNYXRoLlBJLzE4MCkpLTkwfSxCci5wcm90b3R5cGUuc2V0TG9jYXRpb25BdFBvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb2ludENvb3JkaW5hdGUoZSkuX3N1Yih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50KSk7dGhpcy5jZW50ZXI9dGhpcy5jb29yZGluYXRlTG9jYXRpb24odGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkuX3N1YihyKSksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLmNlbnRlcj10aGlzLmNlbnRlci53cmFwKCkpfSxCci5wcm90b3R5cGUubG9jYXRpb25Qb2ludD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlUG9pbnQodGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkpfSxCci5wcm90b3R5cGUucG9pbnRMb2NhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlTG9jYXRpb24odGhpcy5wb2ludENvb3JkaW5hdGUodCkpfSxCci5wcm90b3R5cGUubG9jYXRpb25Db29yZGluYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5kZWZhdWx0JDE3KHRoaXMubG5nWChlLmxuZykvdGhpcy50aWxlU2l6ZSx0aGlzLmxhdFkoZS5sYXQpL3RoaXMudGlsZVNpemUsdGhpcy56b29tKS56b29tVG8odGhpcy50aWxlWm9vbSl9LEJyLnByb3RvdHlwZS5jb29yZGluYXRlTG9jYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dC56b29tVG8odGhpcy56b29tKTtyZXR1cm4gbmV3IEcodGhpcy54TG5nKGUuY29sdW1uKnRoaXMudGlsZVNpemUpLHRoaXMueUxhdChlLnJvdyp0aGlzLnRpbGVTaXplKSl9LEJyLnByb3RvdHlwZS5wb2ludENvb3JkaW5hdGU9ZnVuY3Rpb24oZSxyKXt2b2lkIDA9PT1yJiYocj10aGlzLnRpbGVab29tKTt2YXIgbj1bZS54LGUueSwwLDFdLGk9W2UueCxlLnksMSwxXTtQci50cmFuc2Zvcm1NYXQ0KG4sbix0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSksUHIudHJhbnNmb3JtTWF0NChpLGksdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO3ZhciBhPW5bM10sbz1pWzNdLHM9blswXS9hLGw9aVswXS9vLGM9blsxXS9hLHU9aVsxXS9vLGY9blsyXS9hLGg9aVsyXS9vLHA9Zj09PWg/MDooMC1mKS8oaC1mKTtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxNyh0Lm51bWJlcihzLGwscCkvdGhpcy50aWxlU2l6ZSx0Lm51bWJlcihjLHUscCkvdGhpcy50aWxlU2l6ZSx0aGlzLnpvb20pLl96b29tVG8ocil9LEJyLnByb3RvdHlwZS5jb29yZGluYXRlUG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHI9ZS56b29tVG8odGhpcy56b29tKSxuPVtyLmNvbHVtbip0aGlzLnRpbGVTaXplLHIucm93KnRoaXMudGlsZVNpemUsMCwxXTtyZXR1cm4gUHIudHJhbnNmb3JtTWF0NChuLG4sdGhpcy5waXhlbE1hdHJpeCksbmV3IHQuZGVmYXVsdCQxKG5bMF0vblszXSxuWzFdL25bM10pfSxCci5wcm90b3R5cGUuY2FsY3VsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscil7dm9pZCAwPT09ciYmKHI9ITEpO3ZhciBuPWUua2V5LGk9cj90aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU6dGhpcy5fcG9zTWF0cml4Q2FjaGU7aWYoaVtuXSlyZXR1cm4gaVtuXTt2YXIgYT1lLmNhbm9uaWNhbCxvPXRoaXMud29ybGRTaXplL3RoaXMuem9vbVNjYWxlKGEueikscz1hLngrTWF0aC5wb3coMixhLnopKmUud3JhcCxsPVJyLmlkZW50aXR5KG5ldyBGbG9hdDY0QXJyYXkoMTYpKTtyZXR1cm4gUnIudHJhbnNsYXRlKGwsbCxbcypvLGEueSpvLDBdKSxSci5zY2FsZShsLGwsW28vdC5kZWZhdWx0JDgsby90LmRlZmF1bHQkOCwxXSksUnIubXVsdGlwbHkobCxyP3RoaXMuYWxpZ25lZFByb2pNYXRyaXg6dGhpcy5wcm9qTWF0cml4LGwpLGlbbl09bmV3IEZsb2F0MzJBcnJheShsKSxpW25dfSxCci5wcm90b3R5cGUuX2NvbnN0cmFpbj1mdW5jdGlvbigpe2lmKHRoaXMuY2VudGVyJiZ0aGlzLndpZHRoJiZ0aGlzLmhlaWdodCYmIXRoaXMuX2NvbnN0cmFpbmluZyl7dGhpcy5fY29uc3RyYWluaW5nPSEwO3ZhciBlLHIsbixpLGE9LTkwLG89OTAscz0tMTgwLGw9MTgwLGM9dGhpcy5zaXplLHU9dGhpcy5fdW5tb2RpZmllZDtpZih0aGlzLmxhdFJhbmdlKXt2YXIgZj10aGlzLmxhdFJhbmdlO2E9dGhpcy5sYXRZKGZbMV0pLGU9KG89dGhpcy5sYXRZKGZbMF0pKS1hPGMueT9jLnkvKG8tYSk6MH1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgaD10aGlzLmxuZ1JhbmdlO3M9dGhpcy5sbmdYKGhbMF0pLHI9KGw9dGhpcy5sbmdYKGhbMV0pKS1zPGMueD9jLngvKGwtcyk6MH12YXIgcD1NYXRoLm1heChyfHwwLGV8fDApO2lmKHApcmV0dXJuIHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LmRlZmF1bHQkMShyPyhsK3MpLzI6dGhpcy54LGU/KG8rYSkvMjp0aGlzLnkpKSx0aGlzLnpvb20rPXRoaXMuc2NhbGVab29tKHApLHRoaXMuX3VubW9kaWZpZWQ9dSx2b2lkKHRoaXMuX2NvbnN0cmFpbmluZz0hMSk7aWYodGhpcy5sYXRSYW5nZSl7dmFyIGQ9dGhpcy55LGc9Yy55LzI7ZC1nPGEmJihpPWErZyksZCtnPm8mJihpPW8tZyl9aWYodGhpcy5sbmdSYW5nZSl7dmFyIHY9dGhpcy54LG09Yy54LzI7di1tPHMmJihuPXMrbSksdittPmwmJihuPWwtbSl9dm9pZCAwPT09biYmdm9pZCAwPT09aXx8KHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LmRlZmF1bHQkMSh2b2lkIDAhPT1uP246dGhpcy54LHZvaWQgMCE9PWk/aTp0aGlzLnkpKSksdGhpcy5fdW5tb2RpZmllZD11LHRoaXMuX2NvbnN0cmFpbmluZz0hMX19LEJyLnByb3RvdHlwZS5fY2FsY01hdHJpY2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5oZWlnaHQpe3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZT0uNS9NYXRoLnRhbih0aGlzLl9mb3YvMikqdGhpcy5oZWlnaHQ7dmFyIHQ9dGhpcy5fZm92LzIsZT1NYXRoLlBJLzIrdGhpcy5fcGl0Y2gscj1NYXRoLnNpbih0KSp0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvTWF0aC5zaW4oTWF0aC5QSS1lLXQpLG49dGhpcy54LGk9dGhpcy55LGE9MS4wMSooTWF0aC5jb3MoTWF0aC5QSS8yLXRoaXMuX3BpdGNoKSpyK3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSksbz1uZXcgRmxvYXQ2NEFycmF5KDE2KTtSci5wZXJzcGVjdGl2ZShvLHRoaXMuX2Zvdix0aGlzLndpZHRoL3RoaXMuaGVpZ2h0LDEsYSksUnIuc2NhbGUobyxvLFsxLC0xLDFdKSxSci50cmFuc2xhdGUobyxvLFswLDAsLXRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZV0pLFJyLnJvdGF0ZVgobyxvLHRoaXMuX3BpdGNoKSxSci5yb3RhdGVaKG8sbyx0aGlzLmFuZ2xlKSxSci50cmFuc2xhdGUobyxvLFstbiwtaSwwXSk7dmFyIHM9dGhpcy53b3JsZFNpemUvKDIqTWF0aC5QSSo2Mzc4MTM3Kk1hdGguYWJzKE1hdGguY29zKHRoaXMuY2VudGVyLmxhdCooTWF0aC5QSS8xODApKSkpO1JyLnNjYWxlKG8sbyxbMSwxLHMsMV0pLHRoaXMucHJvak1hdHJpeD1vO3ZhciBsPXRoaXMud2lkdGglMi8yLGM9dGhpcy5oZWlnaHQlMi8yLHU9TWF0aC5jb3ModGhpcy5hbmdsZSksZj1NYXRoLnNpbih0aGlzLmFuZ2xlKSxoPW4tTWF0aC5yb3VuZChuKSt1KmwrZipjLHA9aS1NYXRoLnJvdW5kKGkpK3UqYytmKmwsZD1uZXcgRmxvYXQ2NEFycmF5KG8pO2lmKFJyLnRyYW5zbGF0ZShkLGQsW2g+LjU/aC0xOmgscD4uNT9wLTE6cCwwXSksdGhpcy5hbGlnbmVkUHJvak1hdHJpeD1kLG89UnIuY3JlYXRlKCksUnIuc2NhbGUobyxvLFt0aGlzLndpZHRoLzIsLXRoaXMuaGVpZ2h0LzIsMV0pLFJyLnRyYW5zbGF0ZShvLG8sWzEsLTEsMF0pLHRoaXMucGl4ZWxNYXRyaXg9UnIubXVsdGlwbHkobmV3IEZsb2F0NjRBcnJheSgxNiksbyx0aGlzLnByb2pNYXRyaXgpLCEobz1Sci5pbnZlcnQobmV3IEZsb2F0NjRBcnJheSgxNiksdGhpcy5waXhlbE1hdHJpeCkpKXRocm93IG5ldyBFcnJvcigiZmFpbGVkIHRvIGludmVydCBtYXRyaXgiKTt0aGlzLnBpeGVsTWF0cml4SW52ZXJzZT1vLHRoaXMuX3Bvc01hdHJpeENhY2hlPXt9LHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZT17fX19LEJyLnByb3RvdHlwZS5tYXhQaXRjaFNjYWxlRmFjdG9yPWZ1bmN0aW9uKCl7aWYoIXRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKXJldHVybiAxO3ZhciBlPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSgwLDApKS56b29tVG8odGhpcy56b29tKSxyPVtlLmNvbHVtbip0aGlzLnRpbGVTaXplLGUucm93KnRoaXMudGlsZVNpemUsMCwxXTtyZXR1cm4gUHIudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeClbM10vdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhCci5wcm90b3R5cGUsTnIpO3ZhciBqcj1mdW5jdGlvbigpe3ZhciBlLHIsbixpO3QuYmluZEFsbChbIl9vbkhhc2hDaGFuZ2UiLCJfdXBkYXRlSGFzaCJdLHRoaXMpLHRoaXMuX3VwZGF0ZUhhc2g9KGU9dGhpcy5fdXBkYXRlSGFzaFVudGhyb3R0bGVkLmJpbmQodGhpcyksMzAwLHI9ITEsbj0wLGk9ZnVuY3Rpb24oKXtuPTAsciYmKGUoKSxuPXNldFRpbWVvdXQoaSwzMDApLHI9ITEpfSxmdW5jdGlvbigpe3JldHVybiByPSEwLG58fGkoKSxufSl9O2pyLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHRoaXMuX29uSGFzaENoYW5nZSwhMSksdGhpcy5fbWFwLm9uKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVIYXNoKSx0aGlzfSxqci5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUhhc2gpLGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVIYXNoKCkpLGRlbGV0ZSB0aGlzLl9tYXAsdGhpc30sanIucHJvdG90eXBlLmdldEhhc2hTdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldENlbnRlcigpLHI9TWF0aC5yb3VuZCgxMDAqdGhpcy5fbWFwLmdldFpvb20oKSkvMTAwLG49TWF0aC5jZWlsKChyKk1hdGguTE4yK01hdGgubG9nKDUxMi8zNjAvLjUpKS9NYXRoLkxOMTApLGk9TWF0aC5wb3coMTAsbiksYT1NYXRoLnJvdW5kKGUubG5nKmkpL2ksbz1NYXRoLnJvdW5kKGUubGF0KmkpL2kscz10aGlzLl9tYXAuZ2V0QmVhcmluZygpLGw9dGhpcy5fbWFwLmdldFBpdGNoKCksYz0iIjtyZXR1cm4gYys9dD8iIy8iK2ErIi8iK28rIi8iK3I6IiMiK3IrIi8iK28rIi8iK2EsKHN8fGwpJiYoYys9Ii8iK01hdGgucm91bmQoMTAqcykvMTApLGwmJihjKz0iLyIrTWF0aC5yb3VuZChsKSksY30sanIucHJvdG90eXBlLl9vbkhhc2hDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT10LmRlZmF1bHQubG9jYXRpb24uaGFzaC5yZXBsYWNlKCIjIiwiIikuc3BsaXQoIi8iKTtyZXR1cm4gZS5sZW5ndGg+PTMmJih0aGlzLl9tYXAuanVtcFRvKHtjZW50ZXI6WytlWzJdLCtlWzFdXSx6b29tOitlWzBdLGJlYXJpbmc6KyhlWzNdfHwwKSxwaXRjaDorKGVbNF18fDApfSksITApfSxqci5wcm90b3R5cGUuX3VwZGF0ZUhhc2hVbnRocm90dGxlZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0SGFzaFN0cmluZygpO3QuZGVmYXVsdC5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh0LmRlZmF1bHQuaGlzdG9yeS5zdGF0ZSwiIixlKX07dmFyIFZyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7dm9pZCAwPT09YSYmKGE9e30pO3ZhciBvPXMubW91c2VQb3Mobi5nZXRDYW52YXNDb250YWluZXIoKSxpKSxsPW4udW5wcm9qZWN0KG8pO2UuY2FsbCh0aGlzLHIsdC5leHRlbmQoe3BvaW50Om8sbG5nTGF0Omwsb3JpZ2luYWxFdmVudDppfSxhKSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLnRhcmdldD1ufWUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yO3ZhciBuPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxuLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIucHJvdG90eXBlLG4pLHJ9KHQuRXZlbnQpLFVyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGkpe3ZhciBhPXMudG91Y2hQb3Mobi5nZXRDYW52YXNDb250YWluZXIoKSxpKSxvPWEubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnVucHJvamVjdCh0KX0pLGw9YS5yZWR1Y2UoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuYWRkKGUuZGl2KG4ubGVuZ3RoKSl9LG5ldyB0LmRlZmF1bHQkMSgwLDApKSxjPW4udW5wcm9qZWN0KGwpO2UuY2FsbCh0aGlzLHIse3BvaW50czphLHBvaW50OmwsbG5nTGF0czpvLGxuZ0xhdDpjLG9yaWdpbmFsRXZlbnQ6aX0pLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITF9ZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXI7dmFyIG49e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LG4uZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoci5wcm90b3R5cGUsbikscn0odC5FdmVudCkscXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7dC5jYWxsKHRoaXMsZSx7b3JpZ2luYWxFdmVudDpufSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIGUucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0sci5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfSh0LkV2ZW50KSxIcj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2RlbHRhPTAsdC5iaW5kQWxsKFsiX29uV2hlZWwiLCJfb25UaW1lb3V0IiwiX29uU2Nyb2xsRnJhbWUiLCJfb25TY3JvbGxGaW5pc2hlZCJdLHRoaXMpfTtIci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxIci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sSHIucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9hcm91bmRDZW50ZXI9dCYmImNlbnRlciI9PT10LmFyb3VuZCl9LEhyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxIci5wcm90b3R5cGUub25XaGVlbD1mdW5jdGlvbihlKXtpZih0aGlzLmlzRW5hYmxlZCgpKXt2YXIgcj1lLmRlbHRhTW9kZT09PXQuZGVmYXVsdC5XaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FPzQwKmUuZGVsdGFZOmUuZGVsdGFZLG49YS5ub3coKSxpPW4tKHRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZXx8MCk7dGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lPW4sMCE9PXImJnIlNC4wMDAyNDQxNDA2MjU9PTA/dGhpcy5fdHlwZT0id2hlZWwiOjAhPT1yJiZNYXRoLmFicyhyKTw0P3RoaXMuX3R5cGU9InRyYWNrcGFkIjppPjQwMD8odGhpcy5fdHlwZT1udWxsLHRoaXMuX2xhc3RWYWx1ZT1yLHRoaXMuX3RpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9vblRpbWVvdXQsNDAsZSkpOnRoaXMuX3R5cGV8fCh0aGlzLl90eXBlPU1hdGguYWJzKGkqcik8MjAwPyJ0cmFja3BhZCI6IndoZWVsIix0aGlzLl90aW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMuX3RpbWVvdXQ9bnVsbCxyKz10aGlzLl9sYXN0VmFsdWUpKSxlLnNoaWZ0S2V5JiZyJiYoci89NCksdGhpcy5fdHlwZSYmKHRoaXMuX2xhc3RXaGVlbEV2ZW50PWUsdGhpcy5fZGVsdGEtPXIsdGhpcy5pc0FjdGl2ZSgpfHx0aGlzLl9zdGFydChlKSksZS5wcmV2ZW50RGVmYXVsdCgpfX0sSHIucHJvdG90eXBlLl9vblRpbWVvdXQ9ZnVuY3Rpb24odCl7dGhpcy5fdHlwZT0id2hlZWwiLHRoaXMuX2RlbHRhLT10aGlzLl9sYXN0VmFsdWUsdGhpcy5pc0FjdGl2ZSgpfHx0aGlzLl9zdGFydCh0KX0sSHIucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbihlKXtpZih0aGlzLl9kZWx0YSl7dGhpcy5fZnJhbWVJZCYmKHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSx0aGlzLl9hY3RpdmU9ITAsdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgiem9vbXN0YXJ0Iix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX2ZpbmlzaFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9maW5pc2hUaW1lb3V0KTt2YXIgcj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpO3RoaXMuX2Fyb3VuZD1HLmNvbnZlcnQodGhpcy5fYXJvdW5kQ2VudGVyP3RoaXMuX21hcC5nZXRDZW50ZXIoKTp0aGlzLl9tYXAudW5wcm9qZWN0KHIpKSx0aGlzLl9hcm91bmRQb2ludD10aGlzLl9tYXAudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodGhpcy5fYXJvdW5kKSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblNjcm9sbEZyYW1lKSl9fSxIci5wcm90b3R5cGUuX29uU2Nyb2xsRnJhbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmlzQWN0aXZlKCkpe3ZhciByPXRoaXMuX21hcC50cmFuc2Zvcm07aWYoMCE9PXRoaXMuX2RlbHRhKXt2YXIgbj0id2hlZWwiPT09dGhpcy5fdHlwZSYmTWF0aC5hYnModGhpcy5fZGVsdGEpPjQuMDAwMjQ0MTQwNjI1PzEvNDUwOi4wMSxpPTIvKDErTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhKm4pKSk7dGhpcy5fZGVsdGE8MCYmMCE9PWkmJihpPTEvaSk7dmFyIG89Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3Iuem9vbVNjYWxlKHRoaXMuX3RhcmdldFpvb20pOnIuc2NhbGU7dGhpcy5fdGFyZ2V0Wm9vbT1NYXRoLm1pbihyLm1heFpvb20sTWF0aC5tYXgoci5taW5ab29tLHIuc2NhbGVab29tKG8qaSkpKSwid2hlZWwiPT09dGhpcy5fdHlwZSYmKHRoaXMuX3N0YXJ0Wm9vbT1yLnpvb20sdGhpcy5fZWFzaW5nPXRoaXMuX3Ntb290aE91dEVhc2luZygyMDApKSx0aGlzLl9kZWx0YT0wfXZhciBzPSExO2lmKCJ3aGVlbCI9PT10aGlzLl90eXBlKXt2YXIgbD1NYXRoLm1pbigoYS5ub3coKS10aGlzLl9sYXN0V2hlZWxFdmVudFRpbWUpLzIwMCwxKSxjPXRoaXMuX2Vhc2luZyhsKTtyLnpvb209dC5udW1iZXIodGhpcy5fc3RhcnRab29tLHRoaXMuX3RhcmdldFpvb20sYyksbDwxP3RoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uU2Nyb2xsRnJhbWUpKTpzPSEwfWVsc2Ugci56b29tPXRoaXMuX3RhcmdldFpvb20scz0hMDtyLnNldExvY2F0aW9uQXRQb2ludCh0aGlzLl9hcm91bmQsdGhpcy5fYXJvdW5kUG9pbnQpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIix7b3JpZ2luYWxFdmVudDp0aGlzLl9sYXN0V2hlZWxFdmVudH0pKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgiem9vbSIse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9KSkscyYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maW5pc2hUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9tYXAuZmlyZShuZXcgdC5FdmVudCgiem9vbWVuZCIse29yaWdpbmFsRXZlbnQ6ZS5fbGFzdFdoZWVsRXZlbnR9KSksZS5fbWFwLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLHtvcmlnaW5hbEV2ZW50OmUuX2xhc3RXaGVlbEV2ZW50fSkpLGRlbGV0ZSBlLl90YXJnZXRab29tfSwyMDApKX19LEhyLnByb3RvdHlwZS5fc21vb3RoT3V0RWFzaW5nPWZ1bmN0aW9uKGUpe3ZhciByPXQuZWFzZTtpZih0aGlzLl9wcmV2RWFzZSl7dmFyIG49dGhpcy5fcHJldkVhc2UsaT0oYS5ub3coKS1uLnN0YXJ0KS9uLmR1cmF0aW9uLG89bi5lYXNpbmcoaSsuMDEpLW4uZWFzaW5nKGkpLHM9LjI3L01hdGguc3FydChvKm8rMWUtNCkqLjAxLGw9TWF0aC5zcXJ0KC4wNzI5LXMqcyk7cj10LmJlemllcihzLGwsLjI1LDEpfXJldHVybiB0aGlzLl9wcmV2RWFzZT17c3RhcnQ6YS5ub3coKSxkdXJhdGlvbjplLGVhc2luZzpyfSxyfTt2YXIgR3I9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9jb250YWluZXI9ZS5nZXRDb250YWluZXIoKSx0LmJpbmRBbGwoWyJfb25Nb3VzZU1vdmUiLCJfb25Nb3VzZVVwIiwiX29uS2V5RG93biJdLHRoaXMpfTtHci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxHci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sR3IucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwKX0sR3IucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LEdyLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXt0aGlzLmlzRW5hYmxlZCgpJiZlLnNoaWZ0S2V5JiYwPT09ZS5idXR0b24mJih0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSwhMSksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCwhMSkscy5kaXNhYmxlRHJhZygpLHRoaXMuX3N0YXJ0UG9zPXMubW91c2VQb3ModGhpcy5fZWwsZSksdGhpcy5fYWN0aXZlPSEwKX0sR3IucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGFydFBvcyxyPXMubW91c2VQb3ModGhpcy5fZWwsdCk7dGhpcy5fYm94fHwodGhpcy5fYm94PXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1ib3h6b29tIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21zdGFydCIsdCkpO3ZhciBuPU1hdGgubWluKGUueCxyLngpLGk9TWF0aC5tYXgoZS54LHIueCksYT1NYXRoLm1pbihlLnksci55KSxvPU1hdGgubWF4KGUueSxyLnkpO3Muc2V0VHJhbnNmb3JtKHRoaXMuX2JveCwidHJhbnNsYXRlKCIrbisicHgsIithKyJweCkiKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9aS1uKyJweCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1vLWErInB4In0sR3IucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24oZSl7aWYoMD09PWUuYnV0dG9uKXt2YXIgcj10aGlzLl9zdGFydFBvcyxuPXMubW91c2VQb3ModGhpcy5fZWwsZSksaT0obmV3IFkpLmV4dGVuZCh0aGlzLl9tYXAudW5wcm9qZWN0KHIpKS5leHRlbmQodGhpcy5fbWFwLnVucHJvamVjdChuKSk7dGhpcy5fZmluaXNoKCkscy5zdXBwcmVzc0NsaWNrKCksci54PT09bi54JiZyLnk9PT1uLnk/dGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIixlKTp0aGlzLl9tYXAuZml0Qm91bmRzKGkse2xpbmVhcjohMH0pLmZpcmUobmV3IHQuRXZlbnQoImJveHpvb21lbmQiLHtvcmlnaW5hbEV2ZW50OmUsYm94Wm9vbUJvdW5kczppfSkpfX0sR3IucHJvdG90eXBlLl9vbktleURvd249ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJih0aGlzLl9maW5pc2goKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21jYW5jZWwiLHQpKX0sR3IucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24sITEpLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXAsITEpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9ib3gmJihzLnJlbW92ZSh0aGlzLl9ib3gpLHRoaXMuX2JveD1udWxsKSxzLmVuYWJsZURyYWcoKX0sR3IucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSx7b3JpZ2luYWxFdmVudDpyfSkpfTt2YXIgWXI9dC5iZXppZXIoMCwwLC4yNSwxKSxXcj1mdW5jdGlvbihlLHIpe3RoaXMuX21hcD1lLHRoaXMuX2VsPXIuZWxlbWVudHx8ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9zdGF0ZT0iZGlzYWJsZWQiLHRoaXMuX2J1dHRvbj1yLmJ1dHRvbnx8InJpZ2h0Iix0aGlzLl9iZWFyaW5nU25hcD1yLmJlYXJpbmdTbmFwfHwwLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZT0hMSE9PXIucGl0Y2hXaXRoUm90YXRlLHQuYmluZEFsbChbIl9vbk1vdXNlTW92ZSIsIl9vbk1vdXNlVXAiLCJfb25CbHVyIiwiX29uRHJhZ0ZyYW1lIl0sdGhpcyl9O1dyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4iZGlzYWJsZWQiIT09dGhpcy5fc3RhdGV9LFdyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiJhY3RpdmUiPT09dGhpcy5fc3RhdGV9LFdyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fc3RhdGU9ImVuYWJsZWQiKX0sV3IucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZSJhY3RpdmUiOnRoaXMuX3N0YXRlPSJkaXNhYmxlZCIsdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlZW5kIiksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9maXJlRXZlbnQoInBpdGNoZW5kIiksdGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIik7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZGlzYWJsZWQiLHRoaXMuX3VuYmluZCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc3RhdGU9ImRpc2FibGVkIn19LFdyLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXtpZigiZW5hYmxlZCI9PT10aGlzLl9zdGF0ZSl7aWYoInJpZ2h0Ij09PXRoaXMuX2J1dHRvbil7aWYodGhpcy5fZXZlbnRCdXR0b249cy5tb3VzZUJ1dHRvbihlKSx0aGlzLl9ldmVudEJ1dHRvbiE9PShlLmN0cmxLZXk/MDoyKSlyZXR1cm59ZWxzZXtpZihlLmN0cmxLZXl8fDAhPT1zLm1vdXNlQnV0dG9uKGUpKXJldHVybjt0aGlzLl9ldmVudEJ1dHRvbj0wfXMuZGlzYWJsZURyYWcoKSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSx7Y2FwdHVyZTohMH0pLHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXIpLHRoaXMuX3N0YXRlPSJwZW5kaW5nIix0aGlzLl9pbmVydGlhPVtbYS5ub3coKSx0aGlzLl9tYXAuZ2V0QmVhcmluZygpXV0sdGhpcy5fcHJldmlvdXNQb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCxlKSx0aGlzLl9jZW50ZXI9dGhpcy5fbWFwLnRyYW5zZm9ybS5jZW50ZXJQb2ludCxlLnByZXZlbnREZWZhdWx0KCl9fSxXci5wcm90b3R5cGUuX29uTW91c2VNb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX2xhc3RNb3ZlRXZlbnQ9dCx0aGlzLl9wb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCx0KSwicGVuZGluZyI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPSJhY3RpdmUiLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlc3RhcnQiLHQpLHRoaXMuX2ZpcmVFdmVudCgibW92ZXN0YXJ0Iix0KSx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJnRoaXMuX2ZpcmVFdmVudCgicGl0Y2hzdGFydCIsdCkpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uRHJhZ0ZyYW1lKSl9LFdyLnByb3RvdHlwZS5fb25EcmFnRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkPW51bGw7dmFyIHQ9dGhpcy5fbGFzdE1vdmVFdmVudDtpZih0KXt2YXIgZT10aGlzLl9tYXAudHJhbnNmb3JtLHI9dGhpcy5fcHJldmlvdXNQb3Msbj10aGlzLl9wb3MsaT0uOCooci54LW4ueCksbz0tLjUqKHIueS1uLnkpLHM9ZS5iZWFyaW5nLWksbD1lLnBpdGNoLW8sYz10aGlzLl9pbmVydGlhLHU9Y1tjLmxlbmd0aC0xXTt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSxjLnB1c2goW2Eubm93KCksdGhpcy5fbWFwLl9ub3JtYWxpemVCZWFyaW5nKHMsdVsxXSldKSxlLmJlYXJpbmc9cyx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJih0aGlzLl9maXJlRXZlbnQoInBpdGNoIix0KSxlLnBpdGNoPWwpLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmUiLHQpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LHRoaXMuX3ByZXZpb3VzUG9zPXRoaXMuX3Bvc319LFdyLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe2lmKHMubW91c2VCdXR0b24odCk9PT10aGlzLl9ldmVudEJ1dHRvbilzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2UiYWN0aXZlIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIscy5zdXBwcmVzc0NsaWNrKCksdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2luZXJ0aWFsUm90YXRlKHQpO2JyZWFrO2Nhc2UicGVuZGluZyI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpfX0sV3IucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoInJvdGF0ZWVuZCIsdCksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9maXJlRXZlbnQoInBpdGNoZW5kIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmVlbmQiLHQpO2JyZWFrO2Nhc2UicGVuZGluZyI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpfX0sV3IucHJvdG90eXBlLl91bmJpbmQ9ZnVuY3Rpb24oKXt0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSx7Y2FwdHVyZTohMH0pLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXIpLHMuZW5hYmxlRHJhZygpfSxXci5wcm90b3R5cGUuX2RlYWN0aXZhdGU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LGRlbGV0ZSB0aGlzLl9wcmV2aW91c1Bvc30sV3IucHJvdG90eXBlLl9pbmVydGlhbFJvdGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2ZpcmVFdmVudCgicm90YXRlZW5kIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgcj10aGlzLl9tYXAsbj1yLmdldEJlYXJpbmcoKSxpPXRoaXMuX2luZXJ0aWEsYT1mdW5jdGlvbigpe01hdGguYWJzKG4pPGUuX2JlYXJpbmdTbmFwP3IucmVzZXROb3J0aCh7bm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OnR9KTplLl9maXJlRXZlbnQoIm1vdmVlbmQiLHQpLGUuX3BpdGNoV2l0aFJvdGF0ZSYmZS5fZmlyZUV2ZW50KCJwaXRjaGVuZCIsdCl9O2lmKGkubGVuZ3RoPDIpYSgpO2Vsc2V7dmFyIG89aVswXSxzPWlbaS5sZW5ndGgtMV0sbD1pW2kubGVuZ3RoLTJdLGM9ci5fbm9ybWFsaXplQmVhcmluZyhuLGxbMV0pLHU9c1sxXS1vWzFdLGY9dTwwPy0xOjEsaD0oc1swXS1vWzBdKS8xZTM7aWYoMCE9PXUmJjAhPT1oKXt2YXIgcD1NYXRoLmFicyh1KiguMjUvaCkpO3A+MTgwJiYocD0xODApO3ZhciBkPXAvMTgwO2MrPWYqcCooZC8yKSxNYXRoLmFicyhyLl9ub3JtYWxpemVCZWFyaW5nKGMsMCkpPHRoaXMuX2JlYXJpbmdTbmFwJiYoYz1yLl9ub3JtYWxpemVCZWFyaW5nKDAsYykpLHIucm90YXRlVG8oYyx7ZHVyYXRpb246MWUzKmQsZWFzaW5nOllyLG5vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSl9ZWxzZSBhKCl9fSxXci5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHI/e29yaWdpbmFsRXZlbnQ6cn06e30pKX0sV3IucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MCYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgWHI9dC5iZXppZXIoMCwwLC4zLDEpLFpyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fc3RhdGU9ImRpc2FibGVkIix0LmJpbmRBbGwoWyJfb25Nb3ZlIiwiX29uTW91c2VVcCIsIl9vblRvdWNoRW5kIiwiX29uQmx1ciIsIl9vbkRyYWdGcmFtZSJdLHRoaXMpfTtaci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuImRpc2FibGVkIiE9PXRoaXMuX3N0YXRlfSxaci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4iYWN0aXZlIj09PXRoaXMuX3N0YXRlfSxaci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXRvdWNoLWRyYWctcGFuIiksdGhpcy5fc3RhdGU9ImVuYWJsZWQiKX0sWnIucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXN3aXRjaCh0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10b3VjaC1kcmFnLXBhbiIpLHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImRpc2FibGVkIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KCJkcmFnZW5kIiksdGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIik7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZGlzYWJsZWQiLHRoaXMuX3VuYmluZCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc3RhdGU9ImRpc2FibGVkIn19LFpyLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXsiZW5hYmxlZCI9PT10aGlzLl9zdGF0ZSYmKGUuY3RybEtleXx8MCE9PXMubW91c2VCdXR0b24oZSl8fChzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSx7Y2FwdHVyZTohMH0pLHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCksdGhpcy5fc3RhcnQoZSkpKX0sWnIucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbihlKXsiZW5hYmxlZCI9PT10aGlzLl9zdGF0ZSYmKGUudG91Y2hlcy5sZW5ndGg+MXx8KHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCksdGhpcy5fc3RhcnQoZSkpKX0sWnIucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbihlKXt0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fb25CbHVyKSx0aGlzLl9zdGF0ZT0icGVuZGluZyIsdGhpcy5fcHJldmlvdXNQb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCxlKSx0aGlzLl9pbmVydGlhPVtbYS5ub3coKSx0aGlzLl9wcmV2aW91c1Bvc11dfSxaci5wcm90b3R5cGUuX29uTW92ZT1mdW5jdGlvbih0KXt0aGlzLl9sYXN0TW92ZUV2ZW50PXQsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3Bvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLHQpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbYS5ub3coKSx0aGlzLl9wb3NdKSwicGVuZGluZyI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPSJhY3RpdmUiLHRoaXMuX2ZpcmVFdmVudCgiZHJhZ3N0YXJ0Iix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmVzdGFydCIsdCkpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uRHJhZ0ZyYW1lKSl9LFpyLnByb3RvdHlwZS5fb25EcmFnRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkPW51bGw7dmFyIHQ9dGhpcy5fbGFzdE1vdmVFdmVudDtpZih0KXt2YXIgZT10aGlzLl9tYXAudHJhbnNmb3JtO2Uuc2V0TG9jYXRpb25BdFBvaW50KGUucG9pbnRMb2NhdGlvbih0aGlzLl9wcmV2aW91c1BvcyksdGhpcy5fcG9zKSx0aGlzLl9maXJlRXZlbnQoImRyYWciLHQpLHRoaXMuX2ZpcmVFdmVudCgibW92ZSIsdCksdGhpcy5fcHJldmlvdXNQb3M9dGhpcy5fcG9zLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50fX0sWnIucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24odCl7aWYoMD09PXMubW91c2VCdXR0b24odCkpc3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHMuc3VwcHJlc3NDbGljaygpLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFBhbih0KTticmVhaztjYXNlInBlbmRpbmciOnRoaXMuX3N0YXRlPSJlbmFibGVkIix0aGlzLl91bmJpbmQoKX19LFpyLnByb3RvdHlwZS5fb25Ub3VjaEVuZD1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2UiYWN0aXZlIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIsdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2luZXJ0aWFsUGFuKHQpO2JyZWFrO2Nhc2UicGVuZGluZyI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpfX0sWnIucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoImRyYWdlbmQiLHQpLHRoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIsdCk7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIsdGhpcy5fdW5iaW5kKCl9fSxaci5wcm90b3R5cGUuX3VuYmluZD1mdW5jdGlvbigpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCwibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITB9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQsImJsdXIiLHRoaXMuX29uQmx1cil9LFpyLnByb3RvdHlwZS5fZGVhY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuX2ZyYW1lSWQmJih0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQsZGVsZXRlIHRoaXMuX3ByZXZpb3VzUG9zLGRlbGV0ZSB0aGlzLl9wb3N9LFpyLnByb3RvdHlwZS5faW5lcnRpYWxQYW49ZnVuY3Rpb24odCl7dGhpcy5fZmlyZUV2ZW50KCJkcmFnZW5kIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgZT10aGlzLl9pbmVydGlhO2lmKGUubGVuZ3RoPDIpdGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIix0KTtlbHNle3ZhciByPWVbZS5sZW5ndGgtMV0sbj1lWzBdLGk9clsxXS5zdWIoblsxXSksYT0oclswXS1uWzBdKS8xZTM7aWYoMD09PWF8fHJbMV0uZXF1YWxzKG5bMV0pKXRoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIsdCk7ZWxzZXt2YXIgbz1pLm11bHQoLjMvYSkscz1vLm1hZygpO3M+MTQwMCYmKHM9MTQwMCxvLl91bml0KCkuX211bHQocykpO3ZhciBsPXMvNzUwLGM9by5tdWx0KC1sLzIpO3RoaXMuX21hcC5wYW5CeShjLHtkdXJhdGlvbjoxZTMqbCxlYXNpbmc6WHIsbm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OnR9KX19fSxaci5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHI/e29yaWdpbmFsRXZlbnQ6cn06e30pKX0sWnIucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MCYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgJHI9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0LmJpbmRBbGwoWyJfb25LZXlEb3duIl0sdGhpcyl9O2Z1bmN0aW9uIEpyKHQpe3JldHVybiB0KigyLXQpfSRyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LCRyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLCExKSx0aGlzLl9lbmFibGVkPSEwKX0sJHIucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKSx0aGlzLl9lbmFibGVkPSExKX0sJHIucHJvdG90eXBlLl9vbktleURvd249ZnVuY3Rpb24odCl7aWYoISh0LmFsdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXkpKXt2YXIgZT0wLHI9MCxuPTAsaT0wLGE9MDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDYxOmNhc2UgMTA3OmNhc2UgMTcxOmNhc2UgMTg3OmU9MTticmVhaztjYXNlIDE4OTpjYXNlIDEwOTpjYXNlIDE3MzplPS0xO2JyZWFrO2Nhc2UgMzc6dC5zaGlmdEtleT9yPS0xOih0LnByZXZlbnREZWZhdWx0KCksaT0tMSk7YnJlYWs7Y2FzZSAzOTp0LnNoaWZ0S2V5P3I9MToodC5wcmV2ZW50RGVmYXVsdCgpLGk9MSk7YnJlYWs7Y2FzZSAzODp0LnNoaWZ0S2V5P249MToodC5wcmV2ZW50RGVmYXVsdCgpLGE9LTEpO2JyZWFrO2Nhc2UgNDA6dC5zaGlmdEtleT9uPS0xOihhPTEsdC5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0OnJldHVybn12YXIgbz10aGlzLl9tYXAscz1vLmdldFpvb20oKSxsPXtkdXJhdGlvbjozMDAsZGVsYXlFbmRFdmVudHM6NTAwLGVhc2luZzpKcix6b29tOmU/TWF0aC5yb3VuZChzKStlKih0LnNoaWZ0S2V5PzI6MSk6cyxiZWFyaW5nOm8uZ2V0QmVhcmluZygpKzE1KnIscGl0Y2g6by5nZXRQaXRjaCgpKzEwKm4sb2Zmc2V0OlsxMDAqLWksMTAwKi1hXSxjZW50ZXI6by5nZXRDZW50ZXIoKX07by5lYXNlVG8obCx7b3JpZ2luYWxFdmVudDp0fSl9fTt2YXIgS3I9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdC5iaW5kQWxsKFsiX29uRGJsQ2xpY2siLCJfb25ab29tRW5kIl0sdGhpcyl9O0tyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LEtyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfSxLci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VuYWJsZWQ9ITApfSxLci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbmFibGVkPSExKX0sS3IucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuaXNFbmFibGVkKCkmJih0LnBvaW50cy5sZW5ndGg+MXx8KHRoaXMuX3RhcHBlZD8oY2xlYXJUaW1lb3V0KHRoaXMuX3RhcHBlZCksdGhpcy5fdGFwcGVkPW51bGwsdGhpcy5fem9vbSh0KSk6dGhpcy5fdGFwcGVkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl90YXBwZWQ9bnVsbH0sMzAwKSkpfSxLci5wcm90b3R5cGUub25EYmxDbGljaz1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpJiYodC5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCksdGhpcy5fem9vbSh0KSl9LEtyLnByb3RvdHlwZS5fem9vbT1mdW5jdGlvbih0KXt0aGlzLl9hY3RpdmU9ITAsdGhpcy5fbWFwLm9uKCJ6b29tZW5kIix0aGlzLl9vblpvb21FbmQpLHRoaXMuX21hcC56b29tVG8odGhpcy5fbWFwLmdldFpvb20oKSsodC5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5Py0xOjEpLHthcm91bmQ6dC5sbmdMYXR9LHQpfSxLci5wcm90b3R5cGUuX29uWm9vbUVuZD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9tYXAub2ZmKCJ6b29tZW5kIix0aGlzLl9vblpvb21FbmQpfTt2YXIgUXI9dC5iZXppZXIoMCwwLC4xNSwxKSx0bj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHQuYmluZEFsbChbIl9vbk1vdmUiLCJfb25FbmQiLCJfb25Ub3VjaEZyYW1lIl0sdGhpcyl9O3RuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LHRuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlIiksdGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9hcm91bmRDZW50ZXI9ISF0JiYiY2VudGVyIj09PXQuYXJvdW5kKX0sdG4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdG91Y2gtem9vbS1yb3RhdGUiKSx0aGlzLl9lbmFibGVkPSExKX0sdG4ucHJvdG90eXBlLmRpc2FibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITB9LHRuLnByb3RvdHlwZS5lbmFibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITF9LHRuLnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNFbmFibGVkKCkmJjI9PT1lLnRvdWNoZXMubGVuZ3RoKXt2YXIgcj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUudG91Y2hlc1swXSksbj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUudG91Y2hlc1sxXSk7dGhpcy5fc3RhcnRWZWM9ci5zdWIobiksdGhpcy5fZ2VzdHVyZUludGVudD12b2lkIDAsdGhpcy5faW5lcnRpYT1bXSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSx7cGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsInRvdWNoZW5kIix0aGlzLl9vbkVuZCl9fSx0bi5wcm90b3R5cGUuX2dldFRvdWNoRXZlbnREYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXMubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzBdKSxyPXMubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzFdKSxuPWUuc3ViKHIpO3JldHVybnt2ZWM6bixjZW50ZXI6ZS5hZGQocikuZGl2KDIpLHNjYWxlOm4ubWFnKCkvdGhpcy5fc3RhcnRWZWMubWFnKCksYmVhcmluZzp0aGlzLl9yb3RhdGlvbkRpc2FibGVkPzA6MTgwKm4uYW5nbGVXaXRoKHRoaXMuX3N0YXJ0VmVjKS9NYXRoLlBJfX0sdG4ucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oZSl7aWYoMj09PWUudG91Y2hlcy5sZW5ndGgpe3ZhciByPXRoaXMuX2dldFRvdWNoRXZlbnREYXRhKGUpLG49ci52ZWMsaT1yLnNjYWxlLGE9ci5iZWFyaW5nO2lmKCF0aGlzLl9nZXN0dXJlSW50ZW50KXt2YXIgbz1NYXRoLmFicygxLWkpPi4xNTtNYXRoLmFicyhhKT4xMD90aGlzLl9nZXN0dXJlSW50ZW50PSJyb3RhdGUiOm8mJih0aGlzLl9nZXN0dXJlSW50ZW50PSJ6b29tIiksdGhpcy5fZ2VzdHVyZUludGVudCYmKHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KHRoaXMuX2dlc3R1cmVJbnRlbnQrInN0YXJ0Iix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLHtvcmlnaW5hbEV2ZW50OmV9KSksdGhpcy5fc3RhcnRWZWM9bil9dGhpcy5fbGFzdFRvdWNoRXZlbnQ9ZSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblRvdWNoRnJhbWUpKSxlLnByZXZlbnREZWZhdWx0KCl9fSx0bi5wcm90b3R5cGUuX29uVG91Y2hGcmFtZT1mdW5jdGlvbigpe3RoaXMuX2ZyYW1lSWQ9bnVsbDt2YXIgZT10aGlzLl9nZXN0dXJlSW50ZW50O2lmKGUpe3ZhciByPXRoaXMuX21hcC50cmFuc2Zvcm07dGhpcy5fc3RhcnRTY2FsZXx8KHRoaXMuX3N0YXJ0U2NhbGU9ci5zY2FsZSx0aGlzLl9zdGFydEJlYXJpbmc9ci5iZWFyaW5nKTt2YXIgbj10aGlzLl9nZXRUb3VjaEV2ZW50RGF0YSh0aGlzLl9sYXN0VG91Y2hFdmVudCksaT1uLmNlbnRlcixvPW4uYmVhcmluZyxzPW4uc2NhbGUsbD1yLnBvaW50TG9jYXRpb24oaSksYz1yLmxvY2F0aW9uUG9pbnQobCk7InJvdGF0ZSI9PT1lJiYoci5iZWFyaW5nPXRoaXMuX3N0YXJ0QmVhcmluZytvKSxyLnpvb209ci5zY2FsZVpvb20odGhpcy5fc3RhcnRTY2FsZSpzKSxyLnNldExvY2F0aW9uQXRQb2ludChsLGMpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFRvdWNoRXZlbnR9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RUb3VjaEV2ZW50fSkpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbYS5ub3coKSxzLGldKX19LHRuLnByb3RvdHlwZS5fb25FbmQ9ZnVuY3Rpb24oZSl7cy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCwidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUse3Bhc3NpdmU6ITF9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25FbmQpO3ZhciByPXRoaXMuX2dlc3R1cmVJbnRlbnQsbj10aGlzLl9zdGFydFNjYWxlO2lmKHRoaXMuX2ZyYW1lSWQmJih0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksZGVsZXRlIHRoaXMuX2dlc3R1cmVJbnRlbnQsZGVsZXRlIHRoaXMuX3N0YXJ0U2NhbGUsZGVsZXRlIHRoaXMuX3N0YXJ0QmVhcmluZyxkZWxldGUgdGhpcy5fbGFzdFRvdWNoRXZlbnQscil7dGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQocisiZW5kIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBpPXRoaXMuX2luZXJ0aWEsYT10aGlzLl9tYXA7aWYoaS5sZW5ndGg8MilhLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OmV9KTtlbHNle3ZhciBvPWlbaS5sZW5ndGgtMV0sbD1pWzBdLGM9YS50cmFuc2Zvcm0uc2NhbGVab29tKG4qb1sxXSksdT1hLnRyYW5zZm9ybS5zY2FsZVpvb20obipsWzFdKSxmPWMtdSxoPShvWzBdLWxbMF0pLzFlMyxwPW9bMl07aWYoMCE9PWgmJmMhPT11KXt2YXIgZD0uMTUqZi9oO01hdGguYWJzKGQpPjIuNSYmKGQ9ZD4wPzIuNTotMi41KTt2YXIgZz0xZTMqTWF0aC5hYnMoZC8oMTIqLjE1KSksdj1jK2QqZy8yZTM7djwwJiYodj0wKSxhLmVhc2VUbyh7em9vbTp2LGR1cmF0aW9uOmcsZWFzaW5nOlFyLGFyb3VuZDp0aGlzLl9hcm91bmRDZW50ZXI/YS5nZXRDZW50ZXIoKTphLnVucHJvamVjdChwKSxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6ZX0pfWVsc2UgYS5zbmFwVG9Ob3J0aCh7fSx7b3JpZ2luYWxFdmVudDplfSl9fX0sdG4ucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MiYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgZW49e3Njcm9sbFpvb206SHIsYm94Wm9vbTpHcixkcmFnUm90YXRlOldyLGRyYWdQYW46WnIsa2V5Ym9hcmQ6JHIsZG91YmxlQ2xpY2tab29tOktyLHRvdWNoWm9vbVJvdGF0ZTp0bn0scm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4pe2UuY2FsbCh0aGlzKSx0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLnRyYW5zZm9ybT1yLHRoaXMuX2JlYXJpbmdTbmFwPW4uYmVhcmluZ1NuYXAsdC5iaW5kQWxsKFsiX3JlbmRlckZyYW1lQ2FsbGJhY2siXSx0aGlzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmNlbnRlcn0sci5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtjZW50ZXI6dH0sZSl9LHIucHJvdG90eXBlLnBhbkJ5PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT10LmRlZmF1bHQkMS5jb252ZXJ0KGUpLm11bHQoLTEpLHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLHQuZXh0ZW5kKHtvZmZzZXQ6ZX0sciksbil9LHIucHJvdG90eXBlLnBhblRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2NlbnRlcjplfSxyKSxuKX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS56b29tfSxyLnByb3RvdHlwZS5zZXRab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHt6b29tOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHt6b29tOmV9LHIpLG4pfSxyLnByb3RvdHlwZS56b29tSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkrMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21PdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCktMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldEJlYXJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZ30sci5wcm90b3R5cGUuc2V0QmVhcmluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7YmVhcmluZzp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5yb3RhdGVUbz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtiZWFyaW5nOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5yZXNldE5vcnRoPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMucm90YXRlVG8oMCx0LmV4dGVuZCh7ZHVyYXRpb246MWUzfSxlKSxyKSx0aGlzfSxyLnByb3RvdHlwZS5zbmFwVG9Ob3J0aD1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0aGlzLmdldEJlYXJpbmcoKSk8dGhpcy5fYmVhcmluZ1NuYXA/dGhpcy5yZXNldE5vcnRoKHQsZSk6dGhpc30sci5wcm90b3R5cGUuZ2V0UGl0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGl0Y2h9LHIucHJvdG90eXBlLnNldFBpdGNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtwaXRjaDp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5maXRCb3VuZHM9ZnVuY3Rpb24oZSxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2Yocj10LmV4dGVuZCh7cGFkZGluZzp7dG9wOjAsYm90dG9tOjAscmlnaHQ6MCxsZWZ0OjB9LG9mZnNldDpbMCwwXSxtYXhab29tOnRoaXMudHJhbnNmb3JtLm1heFpvb219LHIpKS5wYWRkaW5nKXt2YXIgaT1yLnBhZGRpbmc7ci5wYWRkaW5nPXt0b3A6aSxib3R0b206aSxyaWdodDppLGxlZnQ6aX19aWYoIXQuZGVmYXVsdCQxMChPYmplY3Qua2V5cyhyLnBhZGRpbmcpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9KSxbImJvdHRvbSIsImxlZnQiLCJyaWdodCIsInRvcCJdKSlyZXR1cm4gdC53YXJuT25jZSgib3B0aW9ucy5wYWRkaW5nIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIsIG9yIGFuIE9iamVjdCB3aXRoIGtleXMgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0JywgJ3RvcCciKSx0aGlzO2U9WS5jb252ZXJ0KGUpO3ZhciBhPVsoci5wYWRkaW5nLmxlZnQtci5wYWRkaW5nLnJpZ2h0KS8yLChyLnBhZGRpbmcudG9wLXIucGFkZGluZy5ib3R0b20pLzJdLG89TWF0aC5taW4oci5wYWRkaW5nLnJpZ2h0LHIucGFkZGluZy5sZWZ0KSxzPU1hdGgubWluKHIucGFkZGluZy50b3Asci5wYWRkaW5nLmJvdHRvbSk7ci5vZmZzZXQ9W3Iub2Zmc2V0WzBdK2FbMF0sci5vZmZzZXRbMV0rYVsxXV07dmFyIGw9dC5kZWZhdWx0JDEuY29udmVydChyLm9mZnNldCksYz10aGlzLnRyYW5zZm9ybSx1PWMucHJvamVjdChlLmdldE5vcnRoV2VzdCgpKSxmPWMucHJvamVjdChlLmdldFNvdXRoRWFzdCgpKSxoPWYuc3ViKHUpLHA9KGMud2lkdGgtMipvLTIqTWF0aC5hYnMobC54KSkvaC54LGQ9KGMuaGVpZ2h0LTIqcy0yKk1hdGguYWJzKGwueSkpL2gueTtyZXR1cm4gZDwwfHxwPDA/KHQud2Fybk9uY2UoIk1hcCBjYW5ub3QgZml0IHdpdGhpbiBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLCBwYWRkaW5nLCBhbmQvb3Igb2Zmc2V0LiIpLHRoaXMpOihyLmNlbnRlcj1jLnVucHJvamVjdCh1LmFkZChmKS5kaXYoMikpLHIuem9vbT1NYXRoLm1pbihjLnNjYWxlWm9vbShjLnNjYWxlKk1hdGgubWluKHAsZCkpLHIubWF4Wm9vbSksci5iZWFyaW5nPTAsci5saW5lYXI/dGhpcy5lYXNlVG8ocixuKTp0aGlzLmZseVRvKHIsbikpfSxyLnByb3RvdHlwZS5qdW1wVG89ZnVuY3Rpb24oZSxyKXt0aGlzLnN0b3AoKTt2YXIgbj10aGlzLnRyYW5zZm9ybSxpPSExLGE9ITEsbz0hMTtyZXR1cm4iem9vbSJpbiBlJiZuLnpvb20hPT0rZS56b29tJiYoaT0hMCxuLnpvb209K2Uuem9vbSksdm9pZCAwIT09ZS5jZW50ZXImJihuLmNlbnRlcj1HLmNvbnZlcnQoZS5jZW50ZXIpKSwiYmVhcmluZyJpbiBlJiZuLmJlYXJpbmchPT0rZS5iZWFyaW5nJiYoYT0hMCxuLmJlYXJpbmc9K2UuYmVhcmluZyksInBpdGNoImluIGUmJm4ucGl0Y2ghPT0rZS5waXRjaCYmKG89ITAsbi5waXRjaD0rZS5waXRjaCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIixyKSksaSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJ6b29tIixyKSkuZmlyZShuZXcgdC5FdmVudCgiem9vbWVuZCIscikpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGUiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVlbmQiLHIpKSxvJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaCIscikpLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoZW5kIixyKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIixyKSl9LHIucHJvdG90eXBlLmVhc2VUbz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5zdG9wKCksITE9PT0oZT10LmV4dGVuZCh7b2Zmc2V0OlswLDBdLGR1cmF0aW9uOjUwMCxlYXNpbmc6dC5lYXNlfSxlKSkuYW5pbWF0ZSYmKGUuZHVyYXRpb249MCk7dmFyIGk9dGhpcy50cmFuc2Zvcm0sYT10aGlzLmdldFpvb20oKSxvPXRoaXMuZ2V0QmVhcmluZygpLHM9dGhpcy5nZXRQaXRjaCgpLGw9Inpvb20iaW4gZT8rZS56b29tOmEsYz0iYmVhcmluZyJpbiBlP3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcoZS5iZWFyaW5nLG8pOm8sdT0icGl0Y2giaW4gZT8rZS5waXRjaDpzLGY9aS5jZW50ZXJQb2ludC5hZGQodC5kZWZhdWx0JDEuY29udmVydChlLm9mZnNldCkpLGg9aS5wb2ludExvY2F0aW9uKGYpLHA9Ry5jb252ZXJ0KGUuY2VudGVyfHxoKTt0aGlzLl9ub3JtYWxpemVDZW50ZXIocCk7dmFyIGQsZyx2PWkucHJvamVjdChoKSxtPWkucHJvamVjdChwKS5zdWIodikseT1pLnpvb21TY2FsZShsLWEpO3JldHVybiBlLmFyb3VuZCYmKGQ9Ry5jb252ZXJ0KGUuYXJvdW5kKSxnPWkubG9jYXRpb25Qb2ludChkKSksdGhpcy5fem9vbWluZz1sIT09YSx0aGlzLl9yb3RhdGluZz1vIT09Yyx0aGlzLl9waXRjaGluZz11IT09cyx0aGlzLl9wcmVwYXJlRWFzZShyLGUubm9Nb3ZlU3RhcnQpLGNsZWFyVGltZW91dCh0aGlzLl9lYXNlRW5kVGltZW91dElEKSx0aGlzLl9lYXNlKGZ1bmN0aW9uKGUpe2lmKG4uX3pvb21pbmcmJihpLnpvb209dC5udW1iZXIoYSxsLGUpKSxuLl9yb3RhdGluZyYmKGkuYmVhcmluZz10Lm51bWJlcihvLGMsZSkpLG4uX3BpdGNoaW5nJiYoaS5waXRjaD10Lm51bWJlcihzLHUsZSkpLGQpaS5zZXRMb2NhdGlvbkF0UG9pbnQoZCxnKTtlbHNle3ZhciBoPWkuem9vbVNjYWxlKGkuem9vbS1hKSxwPWw+YT9NYXRoLm1pbigyLHkpOk1hdGgubWF4KC41LHkpLHg9TWF0aC5wb3cocCwxLWUpLGI9aS51bnByb2plY3Qodi5hZGQobS5tdWx0KGUqeCkpLm11bHQoaCkpO2kuc2V0TG9jYXRpb25BdFBvaW50KGkucmVuZGVyV29ybGRDb3BpZXM/Yi53cmFwKCk6YixmKX1uLl9maXJlTW92ZUV2ZW50cyhyKX0sZnVuY3Rpb24oKXtlLmRlbGF5RW5kRXZlbnRzP24uX2Vhc2VFbmRUaW1lb3V0SUQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9hZnRlckVhc2Uocil9LGUuZGVsYXlFbmRFdmVudHMpOm4uX2FmdGVyRWFzZShyKX0sZSksdGhpc30sci5wcm90b3R5cGUuX3ByZXBhcmVFYXNlPWZ1bmN0aW9uKGUscil7dGhpcy5fbW92aW5nPSEwLHJ8fHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixlKSksdGhpcy5fem9vbWluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tc3RhcnQiLGUpKSx0aGlzLl9yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVzdGFydCIsZSkpLHRoaXMuX3BpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoc3RhcnQiLGUpKX0sci5wcm90b3R5cGUuX2ZpcmVNb3ZlRXZlbnRzPWZ1bmN0aW9uKGUpe3RoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpLHRoaXMuX3pvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbSIsZSkpLHRoaXMuX3JvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZSIsZSkpLHRoaXMuX3BpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoIixlKSl9LHIucHJvdG90eXBlLl9hZnRlckVhc2U9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fem9vbWluZyxuPXRoaXMuX3JvdGF0aW5nLGk9dGhpcy5fcGl0Y2hpbmc7dGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy5fcm90YXRpbmc9ITEsdGhpcy5fcGl0Y2hpbmc9ITEsciYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tZW5kIixlKSksbiYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVlbmQiLGUpKSxpJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoZW5kIixlKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIixlKSl9LHIucHJvdG90eXBlLmZseVRvPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt0aGlzLnN0b3AoKSxlPXQuZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sc3BlZWQ6MS4yLGN1cnZlOjEuNDIsZWFzaW5nOnQuZWFzZX0sZSk7dmFyIGk9dGhpcy50cmFuc2Zvcm0sYT10aGlzLmdldFpvb20oKSxvPXRoaXMuZ2V0QmVhcmluZygpLHM9dGhpcy5nZXRQaXRjaCgpLGw9Inpvb20iaW4gZT90LmNsYW1wKCtlLnpvb20saS5taW5ab29tLGkubWF4Wm9vbSk6YSxjPSJiZWFyaW5nImluIGU/dGhpcy5fbm9ybWFsaXplQmVhcmluZyhlLmJlYXJpbmcsbyk6byx1PSJwaXRjaCJpbiBlPytlLnBpdGNoOnMsZj1pLnpvb21TY2FsZShsLWEpLGg9aS5jZW50ZXJQb2ludC5hZGQodC5kZWZhdWx0JDEuY29udmVydChlLm9mZnNldCkpLHA9aS5wb2ludExvY2F0aW9uKGgpLGQ9Ry5jb252ZXJ0KGUuY2VudGVyfHxwKTt0aGlzLl9ub3JtYWxpemVDZW50ZXIoZCk7dmFyIGc9aS5wcm9qZWN0KHApLHY9aS5wcm9qZWN0KGQpLnN1YihnKSxtPWUuY3VydmUseT1NYXRoLm1heChpLndpZHRoLGkuaGVpZ2h0KSx4PXkvZixiPXYubWFnKCk7aWYoIm1pblpvb20iaW4gZSl7dmFyIF89dC5jbGFtcChNYXRoLm1pbihlLm1pblpvb20sYSxsKSxpLm1pblpvb20saS5tYXhab29tKSx3PXkvaS56b29tU2NhbGUoXy1hKTttPU1hdGguc3FydCh3L2IqMil9dmFyIGs9bSptO2Z1bmN0aW9uIFQodCl7dmFyIGU9KHgqeC15KnkrKHQ/LTE6MSkqayprKmIqYikvKDIqKHQ/eDp5KSprKmIpO3JldHVybiBNYXRoLmxvZyhNYXRoLnNxcnQoZSplKzEpLWUpfWZ1bmN0aW9uIEEodCl7cmV0dXJuKE1hdGguZXhwKHQpLU1hdGguZXhwKC10KSkvMn1mdW5jdGlvbiBNKHQpe3JldHVybihNYXRoLmV4cCh0KStNYXRoLmV4cCgtdCkpLzJ9dmFyIFM9VCgwKSxFPWZ1bmN0aW9uKHQpe3JldHVybiBNKFMpL00oUyttKnQpfSxDPWZ1bmN0aW9uKHQpe3JldHVybiB5KigoTShTKSooQShlPVMrbSp0KS9NKGUpKS1BKFMpKS9rKS9iO3ZhciBlfSxMPShUKDEpLVMpL207aWYoTWF0aC5hYnMoYik8MWUtNnx8IWlzRmluaXRlKEwpKXtpZihNYXRoLmFicyh5LXgpPDFlLTYpcmV0dXJuIHRoaXMuZWFzZVRvKGUscik7dmFyIHo9eDx5Py0xOjE7TD1NYXRoLmFicyhNYXRoLmxvZyh4L3kpKS9tLEM9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sRT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5leHAoeiptKnQpfX1pZigiZHVyYXRpb24iaW4gZSllLmR1cmF0aW9uPStlLmR1cmF0aW9uO2Vsc2V7dmFyIE89InNjcmVlblNwZWVkImluIGU/K2Uuc2NyZWVuU3BlZWQvbTorZS5zcGVlZDtlLmR1cmF0aW9uPTFlMypML099cmV0dXJuIGUubWF4RHVyYXRpb24mJmUuZHVyYXRpb24+ZS5tYXhEdXJhdGlvbiYmKGUuZHVyYXRpb249MCksdGhpcy5fem9vbWluZz0hMCx0aGlzLl9yb3RhdGluZz1vIT09Yyx0aGlzLl9waXRjaGluZz11IT09cyx0aGlzLl9wcmVwYXJlRWFzZShyLCExKSx0aGlzLl9lYXNlKGZ1bmN0aW9uKGUpe3ZhciBsPWUqTCxmPTEvRShsKTtpLnpvb209YStpLnNjYWxlWm9vbShmKSxuLl9yb3RhdGluZyYmKGkuYmVhcmluZz10Lm51bWJlcihvLGMsZSkpLG4uX3BpdGNoaW5nJiYoaS5waXRjaD10Lm51bWJlcihzLHUsZSkpO3ZhciBwPWkudW5wcm9qZWN0KGcuYWRkKHYubXVsdChDKGwpKSkubXVsdChmKSk7aS5zZXRMb2NhdGlvbkF0UG9pbnQoaS5yZW5kZXJXb3JsZENvcGllcz9wLndyYXAoKTpwLGgpLG4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSxmdW5jdGlvbigpe3JldHVybiBuLl9hZnRlckVhc2Uocil9LGUpLHRoaXN9LHIucHJvdG90eXBlLmlzRWFzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lYXNlRnJhbWVJZH0sci5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe2lmKHRoaXMuX2Vhc2VGcmFtZUlkJiYodGhpcy5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZWFzZUZyYW1lSWQpLGRlbGV0ZSB0aGlzLl9lYXNlRnJhbWVJZCxkZWxldGUgdGhpcy5fb25FYXNlRnJhbWUpLHRoaXMuX29uRWFzZUVuZCl7dmFyIHQ9dGhpcy5fb25FYXNlRW5kO2RlbGV0ZSB0aGlzLl9vbkVhc2VFbmQsdC5jYWxsKHRoaXMpfXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS5fZWFzZT1mdW5jdGlvbih0LGUscil7ITE9PT1yLmFuaW1hdGV8fDA9PT1yLmR1cmF0aW9uPyh0KDEpLGUoKSk6KHRoaXMuX2Vhc2VTdGFydD1hLm5vdygpLHRoaXMuX2Vhc2VPcHRpb25zPXIsdGhpcy5fb25FYXNlRnJhbWU9dCx0aGlzLl9vbkVhc2VFbmQ9ZSx0aGlzLl9lYXNlRnJhbWVJZD10aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjaykpfSxyLnByb3RvdHlwZS5fcmVuZGVyRnJhbWVDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciB0PU1hdGgubWluKChhLm5vdygpLXRoaXMuX2Vhc2VTdGFydCkvdGhpcy5fZWFzZU9wdGlvbnMuZHVyYXRpb24sMSk7dGhpcy5fb25FYXNlRnJhbWUodGhpcy5fZWFzZU9wdGlvbnMuZWFzaW5nKHQpKSx0PDE/dGhpcy5fZWFzZUZyYW1lSWQ9dGhpcy5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2FsbGJhY2spOnRoaXMuc3RvcCgpfSxyLnByb3RvdHlwZS5fbm9ybWFsaXplQmVhcmluZz1mdW5jdGlvbihlLHIpe2U9dC53cmFwKGUsLTE4MCwxODApO3ZhciBuPU1hdGguYWJzKGUtcik7cmV0dXJuIE1hdGguYWJzKGUtMzYwLXIpPG4mJihlLT0zNjApLE1hdGguYWJzKGUrMzYwLXIpPG4mJihlKz0zNjApLGV9LHIucHJvdG90eXBlLl9ub3JtYWxpemVDZW50ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50cmFuc2Zvcm07aWYoZS5yZW5kZXJXb3JsZENvcGllcyYmIWUubG5nUmFuZ2Upe3ZhciByPXQubG5nLWUuY2VudGVyLmxuZzt0LmxuZys9cj4xODA/LTM2MDpyPC0xODA/MzYwOjB9fSxyfSh0LkV2ZW50ZWQpLG5uPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLm9wdGlvbnM9ZSx0LmJpbmRBbGwoWyJfdXBkYXRlRWRpdExpbmsiLCJfdXBkYXRlRGF0YSIsIl91cGRhdGVDb21wYWN0Il0sdGhpcyl9O25uLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4iYm90dG9tLXJpZ2h0In0sbm4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmNvbXBhY3Q7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWF0dHJpYiIpLGUmJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jb21wYWN0IiksdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCksdGhpcy5fdXBkYXRlRWRpdExpbmsoKSx0aGlzLl9tYXAub24oInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmspLHZvaWQgMD09PWUmJih0aGlzLl9tYXAub24oInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fdXBkYXRlQ29tcGFjdCgpKSx0aGlzLl9jb250YWluZXJ9LG5uLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9mZigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmspLHRoaXMuX21hcC5vZmYoInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fbWFwPXZvaWQgMH0sbm4ucHJvdG90eXBlLl91cGRhdGVFZGl0TGluaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VkaXRMaW5rO3R8fCh0PXRoaXMuX2VkaXRMaW5rPXRoaXMuX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubWFwYm94LWltcHJvdmUtbWFwIikpO3ZhciBlPVt7a2V5OiJvd25lciIsdmFsdWU6dGhpcy5zdHlsZU93bmVyfSx7a2V5OiJpZCIsdmFsdWU6dGhpcy5zdHlsZUlkfSx7a2V5OiJhY2Nlc3NfdG9rZW4iLHZhbHVlOnYuQUNDRVNTX1RPS0VOfV07aWYodCl7dmFyIHI9ZS5yZWR1Y2UoZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnZhbHVlJiYodCs9ci5rZXkrIj0iK3IudmFsdWUrKG48ZS5sZW5ndGgtMT8iJiI6IiIpKSx0fSwiPyIpO3QuaHJlZj0iaHR0cHM6Ly93d3cubWFwYm94LmNvbS9mZWVkYmFjay8iK3IrKHRoaXMuX21hcC5faGFzaD90aGlzLl9tYXAuX2hhc2guZ2V0SGFzaFN0cmluZyghMCk6IiIpfX0sbm4ucHJvdG90eXBlLl91cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3QmJiJtZXRhZGF0YSI9PT10LnNvdXJjZURhdGFUeXBlJiYodGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCksdGhpcy5fdXBkYXRlRWRpdExpbmsoKSl9LG5uLnByb3RvdHlwZS5fdXBkYXRlQXR0cmlidXRpb25zPWZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLnN0eWxlKXt2YXIgdD1bXTtpZih0aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldCl7dmFyIGU9dGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQ7dGhpcy5zdHlsZU93bmVyPWUub3duZXIsdGhpcy5zdHlsZUlkPWUuaWR9dmFyIHI9dGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIG4gaW4gcil7dmFyIGk9cltuXS5nZXRTb3VyY2UoKTtpLmF0dHJpYnV0aW9uJiZ0LmluZGV4T2YoaS5hdHRyaWJ1dGlvbik8MCYmdC5wdXNoKGkuYXR0cmlidXRpb24pfXQuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aC1lLmxlbmd0aH0pLCh0PXQuZmlsdGVyKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXIrMTtuPHQubGVuZ3RoO24rKylpZih0W25dLmluZGV4T2YoZSk+PTApcmV0dXJuITE7cmV0dXJuITB9KSkubGVuZ3RoPyh0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MPXQuam9pbigiIHwgIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWF0dHJpYi1lbXB0eSIpKTp0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtYXR0cmliLWVtcHR5IiksdGhpcy5fZWRpdExpbms9bnVsbH19LG5uLnByb3RvdHlwZS5fdXBkYXRlQ29tcGFjdD1mdW5jdGlvbigpe3RoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKS5vZmZzZXRXaWR0aDw9NjQwP3RoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jb21wYWN0Iik6dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWNvbXBhY3QiKX07dmFyIGFuPWZ1bmN0aW9uKCl7dC5iaW5kQWxsKFsiX3VwZGF0ZUxvZ28iXSx0aGlzKX07YW4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCIpO3ZhciBlPXMuY3JlYXRlKCJhIiwibWFwYm94Z2wtY3RybC1sb2dvIik7cmV0dXJuIGUudGFyZ2V0PSJfYmxhbmsiLGUuaHJlZj0iaHR0cHM6Ly93d3cubWFwYm94LmNvbS8iLGUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiTWFwYm94IGxvZ28iKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoZSksdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuX21hcC5vbigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlTG9nbyksdGhpcy5fdXBkYXRlTG9nbygpLHRoaXMuX2NvbnRhaW5lcn0sYW4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVMb2dvKX0sYW4ucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LGFuLnByb3RvdHlwZS5fdXBkYXRlTG9nbz1mdW5jdGlvbih0KXt0JiYibWV0YWRhdGEiIT09dC5zb3VyY2VEYXRhVHlwZXx8KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PXRoaXMuX2xvZ29SZXF1aXJlZCgpPyJibG9jayI6Im5vbmUiKX0sYW4ucHJvdG90eXBlLl9sb2dvUmVxdWlyZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBlIGluIHQpaWYodFtlXS5nZXRTb3VyY2UoKS5tYXBib3hfbG9nbylyZXR1cm4hMDtyZXR1cm4hMX19O3ZhciBvbj1mdW5jdGlvbigpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX2lkPTAsdGhpcy5fY2xlYXJlZD0hMSx0aGlzLl9jdXJyZW50bHlSdW5uaW5nPSExfTtvbi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlPSsrdGhpcy5faWQ7cmV0dXJuIHRoaXMuX3F1ZXVlLnB1c2goe2NhbGxiYWNrOnQsaWQ6ZSxjYW5jZWxsZWQ6ITF9KSxlfSxvbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jdXJyZW50bHlSdW5uaW5nLHI9MCxuPWU/dGhpcy5fcXVldWUuY29uY2F0KGUpOnRoaXMuX3F1ZXVlO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtpZihpLmlkPT09dClyZXR1cm4gdm9pZChpLmNhbmNlbGxlZD0hMCl9fSxvbi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY3VycmVudGx5UnVubmluZz10aGlzLl9xdWV1ZTt0aGlzLl9xdWV1ZT1bXTtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKCFuLmNhbmNlbGxlZCYmKG4uY2FsbGJhY2soKSx0aGlzLl9jbGVhcmVkKSlicmVha310aGlzLl9jbGVhcmVkPSExLHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9ITF9LG9uLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRseVJ1bm5pbmcmJih0aGlzLl9jbGVhcmVkPSEwKSx0aGlzLl9xdWV1ZT1bXX07dmFyIHNuPXQuZGVmYXVsdC5IVE1MSW1hZ2VFbGVtZW50LGxuPXQuZGVmYXVsdC5IVE1MRWxlbWVudCxjbj17Y2VudGVyOlswLDBdLHpvb206MCxiZWFyaW5nOjAscGl0Y2g6MCxtaW5ab29tOjAsbWF4Wm9vbToyMixpbnRlcmFjdGl2ZTohMCxzY3JvbGxab29tOiEwLGJveFpvb206ITAsZHJhZ1JvdGF0ZTohMCxkcmFnUGFuOiEwLGtleWJvYXJkOiEwLGRvdWJsZUNsaWNrWm9vbTohMCx0b3VjaFpvb21Sb3RhdGU6ITAsYmVhcmluZ1NuYXA6NyxoYXNoOiExLGF0dHJpYnV0aW9uQ29udHJvbDohMCxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSx0cmFja1Jlc2l6ZTohMCxyZW5kZXJXb3JsZENvcGllczohMCxyZWZyZXNoRXhwaXJlZFRpbGVzOiEwLG1heFRpbGVDYWNoZVNpemU6bnVsbCx0cmFuc2Zvcm1SZXF1ZXN0Om51bGwsZmFkZUR1cmF0aW9uOjMwMH0sdW49ZnVuY3Rpb24ocil7ZnVuY3Rpb24gbihlKXtpZihudWxsIT0oZT10LmV4dGVuZCh7fSxjbixlKSkubWluWm9vbSYmbnVsbCE9ZS5tYXhab29tJiZlLm1pblpvb20+ZS5tYXhab29tKXRocm93IG5ldyBFcnJvcigibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5ab29tIik7dmFyIG49bmV3IEJyKGUubWluWm9vbSxlLm1heFpvb20sZS5yZW5kZXJXb3JsZENvcGllcyk7ci5jYWxsKHRoaXMsbixlKSx0aGlzLl9pbnRlcmFjdGl2ZT1lLmludGVyYWN0aXZlLHRoaXMuX21heFRpbGVDYWNoZVNpemU9ZS5tYXhUaWxlQ2FjaGVTaXplLHRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcj1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLl90cmFja1Jlc2l6ZT1lLnRyYWNrUmVzaXplLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsdGhpcy5fcmVmcmVzaEV4cGlyZWRUaWxlcz1lLnJlZnJlc2hFeHBpcmVkVGlsZXMsdGhpcy5fZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPTEsdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPWUuY29sbGVjdFJlc291cmNlVGltaW5nLHRoaXMuX3JlbmRlclRhc2tRdWV1ZT1uZXcgb247dmFyIGk9ZS50cmFuc2Zvcm1SZXF1ZXN0O2lmKHRoaXMuX3RyYW5zZm9ybVJlcXVlc3Q9aT9mdW5jdGlvbih0LGUpe3JldHVybiBpKHQsZSl8fHt1cmw6dH19OmZ1bmN0aW9uKHQpe3JldHVybnt1cmw6dH19LCJzdHJpbmciPT10eXBlb2YgZS5jb250YWluZXIpe3ZhciBhPXQuZGVmYXVsdC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLmNvbnRhaW5lcik7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgJyIrZS5jb250YWluZXIrIicgbm90IGZvdW5kLiIpO3RoaXMuX2NvbnRhaW5lcj1hfWVsc2V7aWYoIShlLmNvbnRhaW5lciBpbnN0YW5jZW9mIGxuKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHlwZTogJ2NvbnRhaW5lcicgbXVzdCBiZSBhIFN0cmluZyBvciBIVE1MRWxlbWVudC4iKTt0aGlzLl9jb250YWluZXI9ZS5jb250YWluZXJ9ZS5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKGUubWF4Qm91bmRzKSx0LmJpbmRBbGwoWyJfb25XaW5kb3dPbmxpbmUiLCJfb25XaW5kb3dSZXNpemUiLCJfY29udGV4dExvc3QiLCJfY29udGV4dFJlc3RvcmVkIiwiX3VwZGF0ZSIsIl9yZW5kZXIiLCJfb25EYXRhIiwiX29uRGF0YUxvYWRpbmciXSx0aGlzKSx0aGlzLl9zZXR1cENvbnRhaW5lcigpLHRoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMub24oIm1vdmUiLHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMsITEpKSx0aGlzLm9uKCJ6b29tIix0aGlzLl91cGRhdGUuYmluZCh0aGlzLCEwKSksdm9pZCAwIT09dC5kZWZhdWx0JiYodC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpLHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKSksZnVuY3Rpb24odCxlKXt2YXIgcj10LmdldENhbnZhc0NvbnRhaW5lcigpLG49bnVsbCxpPSExO2Zvcih2YXIgYSBpbiBlbil0W2FdPW5ldyBlblthXSh0LGUpLGUuaW50ZXJhY3RpdmUmJmVbYV0mJnRbYV0uZW5hYmxlKGVbYV0pO3MuYWRkRXZlbnRMaXN0ZW5lcihyLCJtb3VzZW91dCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBWcigibW91c2VvdXQiLHQsZSkpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsIm1vdXNlZG93biIsZnVuY3Rpb24ocil7aT0hMDt2YXIgbj1uZXcgVnIoIm1vdXNlZG93biIsdCxyKTt0LmZpcmUobiksbi5kZWZhdWx0UHJldmVudGVkfHwoZS5pbnRlcmFjdGl2ZSYmIXQuZG91YmxlQ2xpY2tab29tLmlzQWN0aXZlKCkmJnQuc3RvcCgpLHQuYm94Wm9vbS5vbk1vdXNlRG93bihyKSx0LmJveFpvb20uaXNBY3RpdmUoKXx8dC5kcmFnUGFuLmlzQWN0aXZlKCl8fHQuZHJhZ1JvdGF0ZS5vbk1vdXNlRG93bihyKSx0LmJveFpvb20uaXNBY3RpdmUoKXx8dC5kcmFnUm90YXRlLmlzQWN0aXZlKCl8fHQuZHJhZ1Bhbi5vbk1vdXNlRG93bihyKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIociwibW91c2V1cCIsZnVuY3Rpb24oZSl7dmFyIHI9dC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7biYmIXImJnQuZmlyZShuZXcgVnIoImNvbnRleHRtZW51Iix0LG4pKSxuPW51bGwsaT0hMSx0LmZpcmUobmV3IFZyKCJtb3VzZXVwIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGUpe2lmKCF0LmRyYWdQYW4uaXNBY3RpdmUoKSYmIXQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKXtmb3IodmFyIG49ZS50b0VsZW1lbnR8fGUudGFyZ2V0O24mJm4hPT1yOyluPW4ucGFyZW50Tm9kZTtuPT09ciYmdC5maXJlKG5ldyBWcigibW91c2Vtb3ZlIix0LGUpKX19KSxzLmFkZEV2ZW50TGlzdGVuZXIociwibW91c2VvdmVyIixmdW5jdGlvbihlKXtmb3IodmFyIG49ZS50b0VsZW1lbnR8fGUudGFyZ2V0O24mJm4hPT1yOyluPW4ucGFyZW50Tm9kZTtuPT09ciYmdC5maXJlKG5ldyBWcigibW91c2VvdmVyIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihyKXt2YXIgbj1uZXcgVXIoInRvdWNoc3RhcnQiLHQscik7dC5maXJlKG4pLG4uZGVmYXVsdFByZXZlbnRlZHx8KGUuaW50ZXJhY3RpdmUmJnQuc3RvcCgpLHQuYm94Wm9vbS5pc0FjdGl2ZSgpfHx0LmRyYWdSb3RhdGUuaXNBY3RpdmUoKXx8dC5kcmFnUGFuLm9uVG91Y2hTdGFydChyKSx0LnRvdWNoWm9vbVJvdGF0ZS5vblN0YXJ0KHIpLHQuZG91YmxlQ2xpY2tab29tLm9uVG91Y2hTdGFydChuKSl9LHtwYXNzaXZlOiExfSkscy5hZGRFdmVudExpc3RlbmVyKHIsInRvdWNobW92ZSIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBVcigidG91Y2htb3ZlIix0LGUpKX0se3Bhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIociwidG91Y2hlbmQiLGZ1bmN0aW9uKGUpe3QuZmlyZShuZXcgVXIoInRvdWNoZW5kIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJ0b3VjaGNhbmNlbCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBVcigidG91Y2hjYW5jZWwiLHQsZSkpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsImNsaWNrIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFZyKCJjbGljayIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIociwiZGJsY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciByPW5ldyBWcigiZGJsY2xpY2siLHQsZSk7dC5maXJlKHIpLHIuZGVmYXVsdFByZXZlbnRlZHx8dC5kb3VibGVDbGlja1pvb20ub25EYmxDbGljayhyKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7dmFyIHI9dC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7aXx8cj9pJiYobj1lKTp0LmZpcmUobmV3IFZyKCJjb250ZXh0bWVudSIsdCxlKSksZS5wcmV2ZW50RGVmYXVsdCgpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsIndoZWVsIixmdW5jdGlvbihlKXt2YXIgcj1uZXcgcXIoIndoZWVsIix0LGUpO3QuZmlyZShyKSxyLmRlZmF1bHRQcmV2ZW50ZWR8fHQuc2Nyb2xsWm9vbS5vbldoZWVsKGUpfSx7cGFzc2l2ZTohMX0pfSh0aGlzLGUpLHRoaXMuX2hhc2g9ZS5oYXNoJiYobmV3IGpyKS5hZGRUbyh0aGlzKSx0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKXx8dGhpcy5qdW1wVG8oe2NlbnRlcjplLmNlbnRlcix6b29tOmUuem9vbSxiZWFyaW5nOmUuYmVhcmluZyxwaXRjaDplLnBpdGNofSksdGhpcy5yZXNpemUoKSxlLnN0eWxlJiZ0aGlzLnNldFN0eWxlKGUuc3R5bGUse2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTplLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0pLGUuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmFkZENvbnRyb2wobmV3IG5uKSx0aGlzLmFkZENvbnRyb2wobmV3IGFuLGUubG9nb1Bvc2l0aW9uKSx0aGlzLm9uKCJzdHlsZS5sb2FkIixmdW5jdGlvbigpe3RoaXMudHJhbnNmb3JtLnVubW9kaWZpZWQmJnRoaXMuanVtcFRvKHRoaXMuc3R5bGUuc3R5bGVzaGVldCl9KSx0aGlzLm9uKCJkYXRhIix0aGlzLl9vbkRhdGEpLHRoaXMub24oImRhdGFsb2FkaW5nIix0aGlzLl9vbkRhdGFMb2FkaW5nKX1yJiYobi5fX3Byb3RvX189ciksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyJiZyLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bjt2YXIgaT17c2hvd1RpbGVCb3VuZGFyaWVzOntjb25maWd1cmFibGU6ITB9LHNob3dDb2xsaXNpb25Cb3hlczp7Y29uZmlndXJhYmxlOiEwfSxzaG93T3ZlcmRyYXdJbnNwZWN0b3I6e2NvbmZpZ3VyYWJsZTohMH0scmVwYWludDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIG4ucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiZ0LmdldERlZmF1bHRQb3NpdGlvbiYmKGU9dC5nZXREZWZhdWx0UG9zaXRpb24oKSksdm9pZCAwPT09ZSYmKGU9InRvcC1yaWdodCIpO3ZhciByPXQub25BZGQodGhpcyksbj10aGlzLl9jb250cm9sUG9zaXRpb25zW2VdO3JldHVybi0xIT09ZS5pbmRleE9mKCJib3R0b20iKT9uLmluc2VydEJlZm9yZShyLG4uZmlyc3RDaGlsZCk6bi5hcHBlbmRDaGlsZChyKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm9uUmVtb3ZlKHRoaXMpLHRoaXN9LG4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCksbj1yWzBdLGk9clsxXTtyZXR1cm4gdGhpcy5fcmVzaXplQ2FudmFzKG4saSksdGhpcy50cmFuc2Zvcm0ucmVzaXplKG4saSksdGhpcy5wYWludGVyLnJlc2l6ZShuLGkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixlKSkuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpLmZpcmUobmV3IHQuRXZlbnQoInJlc2l6ZSIsZSkpLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLGUpKX0sbi5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFkodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLnRyYW5zZm9ybS5oZWlnaHQpKSx0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyB0LmRlZmF1bHQkMSh0aGlzLnRyYW5zZm9ybS53aWR0aCwwKSkpO3JldHVybih0aGlzLnRyYW5zZm9ybS5hbmdsZXx8dGhpcy50cmFuc2Zvcm0ucGl0Y2gpJiYoZS5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEodGhpcy50cmFuc2Zvcm0uc2l6ZS54LDApKSksZS5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLnRyYW5zZm9ybS5zaXplLnkpKSkpLGV9LG4ucHJvdG90eXBlLmdldE1heEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5sYXRSYW5nZSYmMj09PXRoaXMudHJhbnNmb3JtLmxhdFJhbmdlLmxlbmd0aCYmdGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2UmJjI9PT10aGlzLnRyYW5zZm9ybS5sbmdSYW5nZS5sZW5ndGg/bmV3IFkoW3RoaXMudHJhbnNmb3JtLmxuZ1JhbmdlWzBdLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlWzBdXSxbdGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2VbMV0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2VbMV1dKTpudWxsfSxuLnByb3RvdHlwZS5zZXRNYXhCb3VuZHM9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9WS5jb252ZXJ0KHQpO3RoaXMudHJhbnNmb3JtLmxuZ1JhbmdlPVtlLmdldFdlc3QoKSxlLmdldEVhc3QoKV0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2U9W2UuZ2V0U291dGgoKSxlLmdldE5vcnRoKCldLHRoaXMudHJhbnNmb3JtLl9jb25zdHJhaW4oKSx0aGlzLl91cGRhdGUoKX1lbHNlIG51bGw9PXQmJih0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZT1udWxsLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlPW51bGwsdGhpcy5fdXBkYXRlKCkpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5zZXRNaW5ab29tPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/MDp0KT49MCYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPHQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWluWm9vbSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgdGhlIGN1cnJlbnQgbWF4Wm9vbSwgaW5jbHVzaXZlIil9LG4ucHJvdG90eXBlLmdldE1pblpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbX0sbi5wcm90b3R5cGUuc2V0TWF4Wm9vbT1mdW5jdGlvbih0KXtpZigodD1udWxsPT10PzIyOnQpPj10aGlzLnRyYW5zZm9ybS5taW5ab29tKXJldHVybiB0aGlzLnRyYW5zZm9ybS5tYXhab29tPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRab29tKCk+dCYmdGhpcy5zZXRab29tKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblpvb20iKX0sbi5wcm90b3R5cGUuZ2V0UmVuZGVyV29ybGRDb3BpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXN9LG4ucHJvdG90eXBlLnNldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcz10LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldE1heFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0sbi5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChHLmNvbnZlcnQodCkpfSxuLnByb3RvdHlwZS51bnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odC5kZWZhdWx0JDEuY29udmVydChlKSl9LG4ucHJvdG90eXBlLmlzTW92aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmluZ3x8dGhpcy5kcmFnUGFuLmlzQWN0aXZlKCl8fHRoaXMuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpfHx0aGlzLnNjcm9sbFpvb20uaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUuaXNab29taW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb21pbmd8fHRoaXMuc2Nyb2xsWm9vbS5pc0FjdGl2ZSgpfSxuLnByb3RvdHlwZS5pc1JvdGF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW5nfHx0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9dGhpcztpZih2b2lkIDA9PT1uKXJldHVybiByLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTt2YXIgbz1mdW5jdGlvbigpe2lmKCJtb3VzZWVudGVyIj09PXR8fCJtb3VzZW92ZXIiPT09dCl7dmFyIHI9ITE7cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6bixkZWxlZ2F0ZXM6e21vdXNlbW92ZTpmdW5jdGlvbihpKXt2YXIgbz1hLmdldExheWVyKGUpP2EucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGkucG9pbnQse2xheWVyczpbZV19KTpbXTtvLmxlbmd0aD9yfHwocj0hMCxuLmNhbGwoYSxuZXcgVnIodCxhLGkub3JpZ2luYWxFdmVudCx7ZmVhdHVyZXM6b30pKSk6cj0hMX0sbW91c2VvdXQ6ZnVuY3Rpb24oKXtyPSExfX19fWlmKCJtb3VzZWxlYXZlIj09PXR8fCJtb3VzZW91dCI9PT10KXt2YXIgbz0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpuLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKHIpeyhhLmdldExheWVyKGUpP2EucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHIucG9pbnQse2xheWVyczpbZV19KTpbXSkubGVuZ3RoP289ITA6byYmKG89ITEsbi5jYWxsKGEsbmV3IFZyKHQsYSxyLm9yaWdpbmFsRXZlbnQpKSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe28mJihvPSExLG4uY2FsbChhLG5ldyBWcih0LGEsZS5vcmlnaW5hbEV2ZW50KSkpfX19fXJldHVybntsYXllcjplLGxpc3RlbmVyOm4sZGVsZWdhdGVzOihpPXt9LGlbdF09ZnVuY3Rpb24odCl7dmFyIHI9YS5nZXRMYXllcihlKT9hLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0LnBvaW50LHtsYXllcnM6W2VdfSk6W107ci5sZW5ndGgmJih0LmZlYXR1cmVzPXIsbi5jYWxsKGEsdCksZGVsZXRlIHQuZmVhdHVyZXMpfSxpKX19KCk7Zm9yKHZhciBzIGluIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycz10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnN8fHt9LHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF18fFtdLHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XS5wdXNoKG8pLG8uZGVsZWdhdGVzKWEub24ocyxvLmRlbGVnYXRlc1tzXSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09bilyZXR1cm4gci5wcm90b3R5cGUub2ZmLmNhbGwodGhpcyx0LGUpO2lmKHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyYmdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdKWZvcih2YXIgaT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF0sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKG8ubGF5ZXI9PT1lJiZvLmxpc3RlbmVyPT09bil7Zm9yKHZhciBzIGluIG8uZGVsZWdhdGVzKXRoaXMub2ZmKHMsby5kZWxlZ2F0ZXNbc10pO3JldHVybiBpLnNwbGljZShhLDEpLHRoaXN9fXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbjtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGg/KGU9YXJndW1lbnRzWzBdLHI9YXJndW1lbnRzWzFdKToxPT09YXJndW1lbnRzLmxlbmd0aCYmKChuPWFyZ3VtZW50c1swXSlpbnN0YW5jZW9mIHQuZGVmYXVsdCQxfHxBcnJheS5pc0FycmF5KG4pKT8oZT1hcmd1bWVudHNbMF0scj17fSk6MT09PWFyZ3VtZW50cy5sZW5ndGg/KGU9dm9pZCAwLHI9YXJndW1lbnRzWzBdKTooZT12b2lkIDAscj17fSksdGhpcy5zdHlsZT90aGlzLnN0eWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0aGlzLl9tYWtlUXVlcnlHZW9tZXRyeShlKSxyLHRoaXMudHJhbnNmb3JtKTpbXX0sbi5wcm90b3R5cGUuX21ha2VRdWVyeUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT1bdC5kZWZhdWx0JDEuY29udmVydChbMCwwXSksdC5kZWZhdWx0JDEuY29udmVydChbdGhpcy50cmFuc2Zvcm0ud2lkdGgsdGhpcy50cmFuc2Zvcm0uaGVpZ2h0XSldKSxlIGluc3RhbmNlb2YgdC5kZWZhdWx0JDF8fCJudW1iZXIiPT10eXBlb2YgZVswXSlyPVt0LmRlZmF1bHQkMS5jb252ZXJ0KGUpXTtlbHNle3ZhciBpPVt0LmRlZmF1bHQkMS5jb252ZXJ0KGVbMF0pLHQuZGVmYXVsdCQxLmNvbnZlcnQoZVsxXSldO3I9W2lbMF0sbmV3IHQuZGVmYXVsdCQxKGlbMV0ueCxpWzBdLnkpLGlbMV0sbmV3IHQuZGVmYXVsdCQxKGlbMF0ueCxpWzFdLnkpLGlbMF1dfXJldHVybnt2aWV3cG9ydDpyLHdvcmxkQ29vcmRpbmF0ZTpyLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi50cmFuc2Zvcm0ucG9pbnRDb29yZGluYXRlKHQpfSl9fSxuLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUucXVlcnlTb3VyY2VGZWF0dXJlcyh0LGUpfSxuLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbihlLHIpe2lmKCghcnx8ITEhPT1yLmRpZmYmJiFyLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSkmJnRoaXMuc3R5bGUmJmUmJiJvYmplY3QiPT10eXBlb2YgZSl0cnl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0U3RhdGUoZSkmJnRoaXMuX3VwZGF0ZSghMCksdGhpc31jYXRjaChlKXt0Lndhcm5PbmNlKCJVbmFibGUgdG8gcGVyZm9ybSBzdHlsZSBkaWZmOiAiKyhlLm1lc3NhZ2V8fGUuZXJyb3J8fGUpKyIuICBSZWJ1aWxkaW5nIHRoZSBzdHlsZSBmcm9tIHNjcmF0Y2guIil9cmV0dXJuIHRoaXMuc3R5bGUmJih0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksdGhpcy5zdHlsZS5fcmVtb3ZlKCkpLGU/KHRoaXMuc3R5bGU9bmV3IEplKHRoaXMscnx8e30pLHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtzdHlsZTp0aGlzLnN0eWxlfSksInN0cmluZyI9PXR5cGVvZiBlP3RoaXMuc3R5bGUubG9hZFVSTChlKTp0aGlzLnN0eWxlLmxvYWRKU09OKGUpLHRoaXMpOihkZWxldGUgdGhpcy5zdHlsZSx0aGlzKX0sbi5wcm90b3R5cGUuZ2V0U3R5bGU9ZnVuY3Rpb24oKXtpZih0aGlzLnN0eWxlKXJldHVybiB0aGlzLnN0eWxlLnNlcmlhbGl6ZSgpfSxuLnByb3RvdHlwZS5pc1N0eWxlTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGU/dGhpcy5zdHlsZS5sb2FkZWQoKTp0Lndhcm5PbmNlKCJUaGVyZSBpcyBubyBzdHlsZSBhZGRlZCB0byB0aGUgbWFwLiIpfSxuLnByb3RvdHlwZS5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5hZGRTb3VyY2UodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmlzU291cmNlTG9hZGVkPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIubG9hZGVkKCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCBJRCAnIitlKyInIikpKX0sbi5wcm90b3R5cGUuYXJlVGlsZXNMb2FkZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdCl7dmFyIHI9dFtlXS5fdGlsZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl07aWYoImxvYWRlZCIhPT1pLnN0YXRlJiYiZXJyb3JlZCIhPT1pLnN0YXRlKXJldHVybiExfX1yZXR1cm4hMH0sbi5wcm90b3R5cGUuYWRkU291cmNlVHlwZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZSh0LGUscil9LG4ucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0U291cmNlKHQpfSxuLnByb3RvdHlwZS5hZGRJbWFnZT1mdW5jdGlvbihlLHIsbil7dm9pZCAwPT09biYmKG49e30pO3ZhciBpPW4ucGl4ZWxSYXRpbzt2b2lkIDA9PT1pJiYoaT0xKTt2YXIgbz1uLnNkZjtpZih2b2lkIDA9PT1vJiYobz0hMSksciBpbnN0YW5jZW9mIHNuKXt2YXIgcz1hLmdldEltYWdlRGF0YShyKSxsPXMud2lkdGgsYz1zLmhlaWdodCx1PXMuZGF0YTt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpsLGhlaWdodDpjfSx1KSxwaXhlbFJhdGlvOmksc2RmOm99KX1lbHNle2lmKHZvaWQgMD09PXIud2lkdGh8fHZvaWQgMD09PXIuaGVpZ2h0KXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIG1hcC5hZGRJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCIpKSk7dmFyIGY9ci53aWR0aCxoPXIuaGVpZ2h0LHA9ci5kYXRhO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOmYsaGVpZ2h0Omh9LHAuc2xpY2UoMCkpLHBpeGVsUmF0aW86aSxzZGY6b30pfX0sbi5wcm90b3R5cGUuaGFzSW1hZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ISF0aGlzLnN0eWxlLmdldEltYWdlKGUpOih0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgaW1hZ2UgaWQiKSkpLCExKX0sbi5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5yZW1vdmVJbWFnZSh0KX0sbi5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGUscil7dC5nZXRJbWFnZSh0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLHIpfSxuLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZExheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5tb3ZlTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5tb3ZlTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZUxheWVyKHQpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5ZXIodCl9LG4ucHJvdG90eXBlLnNldEZpbHRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnNldEZpbHRlcih0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheWVyWm9vbVJhbmdlKHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRGaWx0ZXIodCl9LG4ucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmdldFBhaW50UHJvcGVydHkodCxlKX0sbi5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheW91dFByb3BlcnR5KHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5b3V0UHJvcGVydHkodCxlKX0sbi5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGlnaHQodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLmdldExpZ2h0KCl9LG4ucHJvdG90eXBlLmdldENvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LG4ucHJvdG90eXBlLmdldENhbnZhc0NvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXNDb250YWluZXJ9LG4ucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXN9LG4ucHJvdG90eXBlLl9jb250YWluZXJEaW1lbnNpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPTA7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQ9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRofHw0MDAsZT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0fHwzMDApLFt0LGVdfSxuLnByb3RvdHlwZS5fc2V0dXBDb250YWluZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI7dC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1tYXAiKSwodGhpcy5fbWlzc2luZ0NTU0NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtbWlzc2luZy1jc3MiLHQpKS5pbm5lckhUTUw9Ik1pc3NpbmcgTWFwYm94IEdMIEpTIENTUyI7dmFyIGU9dGhpcy5fY2FudmFzQ29udGFpbmVyPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jYW52YXMtY29udGFpbmVyIix0KTt0aGlzLl9pbnRlcmFjdGl2ZSYmZS5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1pbnRlcmFjdGl2ZSIpLHRoaXMuX2NhbnZhcz1zLmNyZWF0ZSgiY2FudmFzIiwibWFwYm94Z2wtY2FudmFzIixlKSx0aGlzLl9jYW52YXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsdGhpcy5fY29udGV4dExvc3QsITEpLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdGhpcy5fY29udGV4dFJlc3RvcmVkLCExKSx0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSx0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiTWFwIik7dmFyIHI9dGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpO3RoaXMuX3Jlc2l6ZUNhbnZhcyhyWzBdLHJbMV0pO3ZhciBuPXRoaXMuX2NvbnRyb2xDb250YWluZXI9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWNvbnRyb2wtY29udGFpbmVyIix0KSxpPXRoaXMuX2NvbnRyb2xQb3NpdGlvbnM9e307WyJ0b3AtbGVmdCIsInRvcC1yaWdodCIsImJvdHRvbS1sZWZ0IiwiYm90dG9tLXJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbih0KXtpW3RdPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsLSIrdCxuKX0pfSxuLnByb3RvdHlwZS5fcmVzaXplQ2FudmFzPWZ1bmN0aW9uKGUscil7dmFyIG49dC5kZWZhdWx0LmRldmljZVBpeGVsUmF0aW98fDE7dGhpcy5fY2FudmFzLndpZHRoPW4qZSx0aGlzLl9jYW52YXMuaGVpZ2h0PW4qcix0aGlzLl9jYW52YXMuc3R5bGUud2lkdGg9ZSsicHgiLHRoaXMuX2NhbnZhcy5zdHlsZS5oZWlnaHQ9cisicHgifSxuLnByb3RvdHlwZS5fc2V0dXBQYWludGVyPWZ1bmN0aW9uKCl7dmFyIHI9dC5leHRlbmQoe2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyfSxlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMpLG49dGhpcy5fY2FudmFzLmdldENvbnRleHQoIndlYmdsIixyKXx8dGhpcy5fY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik7bj90aGlzLnBhaW50ZXI9bmV3IHpyKG4sdGhpcy50cmFuc2Zvcm0pOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0wiKSkpfSxuLnByb3RvdHlwZS5fY29udGV4dExvc3Q9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZyYW1lSWQmJihhLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ3ZWJnbGNvbnRleHRsb3N0Iix7b3JpZ2luYWxFdmVudDplfSkpfSxuLnByb3RvdHlwZS5fY29udGV4dFJlc3RvcmVkPWZ1bmN0aW9uKGUpe3RoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMucmVzaXplKCksdGhpcy5fdXBkYXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIse29yaWdpbmFsRXZlbnQ6ZX0pKX0sbi5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3N0eWxlRGlydHkmJiF0aGlzLl9zb3VyY2VzRGlydHkmJiEoIXRoaXMuc3R5bGV8fCF0aGlzLnN0eWxlLmxvYWRlZCgpKX0sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLnN0eWxlJiYodGhpcy5fc3R5bGVEaXJ0eT10aGlzLl9zdHlsZURpcnR5fHx0LHRoaXMuX3NvdXJjZXNEaXJ0eT0hMCx0aGlzLl9yZXJlbmRlcigpKX0sbi5wcm90b3R5cGUuX3JlcXVlc3RSZW5kZXJGcmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXBkYXRlKCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmFkZCh0KX0sbi5wcm90b3R5cGUuX2NhbmNlbFJlbmRlckZyYW1lPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlclRhc2tRdWV1ZS5yZW1vdmUodCl9LG4ucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJUYXNrUXVldWUucnVuKCk7dmFyIGU9ITE7aWYodGhpcy5zdHlsZSYmdGhpcy5fc3R5bGVEaXJ0eSl7dGhpcy5fc3R5bGVEaXJ0eT0hMTt2YXIgcj10aGlzLnRyYW5zZm9ybS56b29tLG49YS5ub3coKTt0aGlzLnN0eWxlLnpvb21IaXN0b3J5LnVwZGF0ZShyLG4pO3ZhciBpPW5ldyB0LmRlZmF1bHQkMTYocix7bm93Om4sZmFkZUR1cmF0aW9uOnRoaXMuX2ZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTp0aGlzLnN0eWxlLnpvb21IaXN0b3J5LHRyYW5zaXRpb246dGhpcy5zdHlsZS5nZXRUcmFuc2l0aW9uKCl9KSxvPWkuY3Jvc3NGYWRpbmdGYWN0b3IoKTsxPT09byYmbz09PXRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yfHwoZT0hMCx0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj1vKSx0aGlzLnN0eWxlLnVwZGF0ZShpKX1yZXR1cm4gdGhpcy5zdHlsZSYmdGhpcy5fc291cmNlc0RpcnR5JiYodGhpcy5fc291cmNlc0RpcnR5PSExLHRoaXMuc3R5bGUuX3VwZGF0ZVNvdXJjZXModGhpcy50cmFuc2Zvcm0pKSx0aGlzLl9wbGFjZW1lbnREaXJ0eT10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLl91cGRhdGVQbGFjZW1lbnQodGhpcy5wYWludGVyLnRyYW5zZm9ybSx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyx0aGlzLl9mYWRlRHVyYXRpb24pLHRoaXMucGFpbnRlci5yZW5kZXIodGhpcy5zdHlsZSx7c2hvd1RpbGVCb3VuZGFyaWVzOnRoaXMuc2hvd1RpbGVCb3VuZGFyaWVzLHNob3dPdmVyZHJhd0luc3BlY3Rvcjp0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3Iscm90YXRpbmc6dGhpcy5pc1JvdGF0aW5nKCksem9vbWluZzp0aGlzLmlzWm9vbWluZygpLGZhZGVEdXJhdGlvbjp0aGlzLl9mYWRlRHVyYXRpb259KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJlbmRlciIpKSx0aGlzLmxvYWRlZCgpJiYhdGhpcy5fbG9hZGVkJiYodGhpcy5fbG9hZGVkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibG9hZCIpKSksdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuaGFzVHJhbnNpdGlvbnMoKXx8ZSkmJih0aGlzLl9zdHlsZURpcnR5PSEwKSwodGhpcy5fc291cmNlc0RpcnR5fHx0aGlzLl9yZXBhaW50fHx0aGlzLl9zdHlsZURpcnR5fHx0aGlzLl9wbGFjZW1lbnREaXJ0eSkmJnRoaXMuX3JlcmVuZGVyKCksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5faGFzaCYmdGhpcy5faGFzaC5yZW1vdmUoKSxhLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5jbGVhcigpLHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLnNldFN0eWxlKG51bGwpLHZvaWQgMCE9PXQuZGVmYXVsdCYmKHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigib25saW5lIix0aGlzLl9vbldpbmRvd09ubGluZSwhMSkpO3ZhciBlPXRoaXMucGFpbnRlci5jb250ZXh0LmdsLmdldEV4dGVuc2lvbigiV0VCR0xfbG9zZV9jb250ZXh0Iik7ZSYmZS5sb3NlQ29udGV4dCgpLGZuKHRoaXMuX2NhbnZhc0NvbnRhaW5lciksZm4odGhpcy5fY29udHJvbENvbnRhaW5lciksZm4odGhpcy5fbWlzc2luZ0NTU0NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLW1hcCIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgicmVtb3ZlIikpfSxuLnByb3RvdHlwZS5fcmVyZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuc3R5bGUmJiF0aGlzLl9mcmFtZUlkJiYodGhpcy5fZnJhbWVJZD1hLmZyYW1lKGZ1bmN0aW9uKCl7dC5fZnJhbWVJZD1udWxsLHQuX3JlbmRlcigpfSkpfSxuLnByb3RvdHlwZS5fb25XaW5kb3dPbmxpbmU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0sbi5wcm90b3R5cGUuX29uV2luZG93UmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5fdHJhY2tSZXNpemUmJnRoaXMuc3RvcCgpLnJlc2l6ZSgpLl91cGRhdGUoKX0saS5zaG93VGlsZUJvdW5kYXJpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXN9LGkuc2hvd1RpbGVCb3VuZGFyaWVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXMhPT10JiYodGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzPXQsdGhpcy5fdXBkYXRlKCkpfSxpLnNob3dDb2xsaXNpb25Cb3hlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlc30saS5zaG93Q29sbGlzaW9uQm94ZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyE9PXQmJih0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9dCx0P3RoaXMuc3R5bGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKTp0aGlzLl91cGRhdGUoKSl9LGkuc2hvd092ZXJkcmF3SW5zcGVjdG9yLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yfSxpLnNob3dPdmVyZHJhd0luc3BlY3Rvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yIT09dCYmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj10LHRoaXMuX3VwZGF0ZSgpKX0saS5yZXBhaW50LmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fcmVwYWludH0saS5yZXBhaW50LnNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXBhaW50PXQsdGhpcy5fdXBkYXRlKCl9LGkudmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl92ZXJ0aWNlc30saS52ZXJ0aWNlcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fdmVydGljZXM9dCx0aGlzLl91cGRhdGUoKX0sbi5wcm90b3R5cGUuX29uRGF0YT1mdW5jdGlvbihlKXt0aGlzLl91cGRhdGUoInN0eWxlIj09PWUuZGF0YVR5cGUpLHRoaXMuZmlyZShuZXcgdC5FdmVudChlLmRhdGFUeXBlKyJkYXRhIixlKSl9LG4ucHJvdG90eXBlLl9vbkRhdGFMb2FkaW5nPWZ1bmN0aW9uKGUpe3RoaXMuZmlyZShuZXcgdC5FdmVudChlLmRhdGFUeXBlKyJkYXRhbG9hZGluZyIsZSkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSxpKSxufShybik7ZnVuY3Rpb24gZm4odCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9dmFyIGhuPXtzaG93Q29tcGFzczohMCxzaG93Wm9vbTohMH0scG49ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30saG4sZSksdGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSx0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJih0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC16b29tLWluIiwiWm9vbSBJbiIsZnVuY3Rpb24oKXtyZXR1cm4gci5fbWFwLnpvb21JbigpfSksdGhpcy5fem9vbU91dEJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLXpvb20tb3V0IiwiWm9vbSBPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX21hcC56b29tT3V0KCl9KSksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodC5iaW5kQWxsKFsiX3JvdGF0ZUNvbXBhc3NBcnJvdyJdLHRoaXMpLHRoaXMuX2NvbXBhc3M9dGhpcy5fY3JlYXRlQnV0dG9uKCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1jb21wYXNzIiwiUmVzZXQgTm9ydGgiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX21hcC5yZXNldE5vcnRoKCl9KSx0aGlzLl9jb21wYXNzQXJyb3c9cy5jcmVhdGUoInNwYW4iLCJtYXBib3hnbC1jdHJsLWNvbXBhc3MtYXJyb3ciLHRoaXMuX2NvbXBhc3MpKX07ZnVuY3Rpb24gZG4odCxlLHIpe2lmKHQ9bmV3IEcodC5sbmcsdC5sYXQpLGUpe3ZhciBuPW5ldyBHKHQubG5nLTM2MCx0LmxhdCksaT1uZXcgRyh0LmxuZyszNjAsdC5sYXQpLGE9ci5sb2NhdGlvblBvaW50KHQpLmRpc3RTcXIoZSk7ci5sb2NhdGlvblBvaW50KG4pLmRpc3RTcXIoZSk8YT90PW46ci5sb2NhdGlvblBvaW50KGkpLmRpc3RTcXIoZSk8YSYmKHQ9aSl9Zm9yKDtNYXRoLmFicyh0LmxuZy1yLmNlbnRlci5sbmcpPjE4MDspe3ZhciBvPXIubG9jYXRpb25Qb2ludCh0KTtpZihvLng+PTAmJm8ueT49MCYmby54PD1yLndpZHRoJiZvLnk8PXIuaGVpZ2h0KWJyZWFrO3QubG5nPnIuY2VudGVyLmxuZz90LmxuZy09MzYwOnQubG5nKz0zNjB9cmV0dXJuIHR9cG4ucHJvdG90eXBlLl9yb3RhdGVDb21wYXNzQXJyb3c9ZnVuY3Rpb24oKXt2YXIgdD0icm90YXRlKCIrdGhpcy5fbWFwLnRyYW5zZm9ybS5hbmdsZSooMTgwL01hdGguUEkpKyJkZWcpIjt0aGlzLl9jb21wYXNzQXJyb3cuc3R5bGUudHJhbnNmb3JtPXR9LHBuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodGhpcy5fbWFwLm9uKCJyb3RhdGUiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCksdGhpcy5faGFuZGxlcj1uZXcgV3IodCx7YnV0dG9uOiJsZWZ0IixlbGVtZW50OnRoaXMuX2NvbXBhc3N9KSx0aGlzLl9oYW5kbGVyLmVuYWJsZSgpKSx0aGlzLl9jb250YWluZXJ9LHBuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodGhpcy5fbWFwLm9mZigicm90YXRlIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX2hhbmRsZXIuZGlzYWJsZSgpLGRlbGV0ZSB0aGlzLl9oYW5kbGVyKSxkZWxldGUgdGhpcy5fbWFwfSxwbi5wcm90b3R5cGUuX2NyZWF0ZUJ1dHRvbj1mdW5jdGlvbih0LGUscil7dmFyIG49cy5jcmVhdGUoImJ1dHRvbiIsdCx0aGlzLl9jb250YWluZXIpO3JldHVybiBuLnR5cGU9ImJ1dHRvbiIsbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpLG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHIpLG59O3ZhciBnbj17Y2VudGVyOiJ0cmFuc2xhdGUoLTUwJSwtNTAlKSIsdG9wOiJ0cmFuc2xhdGUoLTUwJSwwKSIsInRvcC1sZWZ0IjoidHJhbnNsYXRlKDAsMCkiLCJ0b3AtcmlnaHQiOiJ0cmFuc2xhdGUoLTEwMCUsMCkiLGJvdHRvbToidHJhbnNsYXRlKC01MCUsLTEwMCUpIiwiYm90dG9tLWxlZnQiOiJ0cmFuc2xhdGUoMCwtMTAwJSkiLCJib3R0b20tcmlnaHQiOiJ0cmFuc2xhdGUoLTEwMCUsLTEwMCUpIixsZWZ0OiJ0cmFuc2xhdGUoMCwtNTAlKSIscmlnaHQ6InRyYW5zbGF0ZSgtMTAwJSwtNTAlKSJ9O2Z1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj10LmNsYXNzTGlzdDtmb3IodmFyIGkgaW4gZ24pbi5yZW1vdmUoIm1hcGJveGdsLSIrcisiLWFuY2hvci0iK2kpO24uYWRkKCJtYXBib3hnbC0iK3IrIi1hbmNob3ItIitlKX12YXIgbW49ZnVuY3Rpb24oZSl7aWYoKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgdC5kZWZhdWx0LkhUTUxFbGVtZW50fHwyPT09YXJndW1lbnRzLmxlbmd0aCkmJihlPXQuZXh0ZW5kKHtlbGVtZW50OmV9LGFyZ3VtZW50c1sxXSkpLHQuYmluZEFsbChbIl91cGRhdGUiLCJfb25NYXBDbGljayJdLHRoaXMpLHRoaXMuX2FuY2hvcj1lJiZlLmFuY2hvcnx8ImNlbnRlciIsdGhpcy5fY29sb3I9ZSYmZS5jb2xvcnx8IiMzRkIxQ0UiLGUmJmUuZWxlbWVudCl0aGlzLl9lbGVtZW50PWUuZWxlbWVudCx0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlJiZlLm9mZnNldHx8WzAsMF0pO2Vsc2V7dGhpcy5fZGVmYXVsdE1hcmtlcj0hMCx0aGlzLl9lbGVtZW50PXMuY3JlYXRlKCJkaXYiKTt2YXIgcj1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO3Iuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IiwiNDFweCIpLHIuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLCIyN3B4Iiksci5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ2aWV3Qm94IiwiMCAwIDI3IDQxIik7dmFyIG49cy5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UiLCJub25lIiksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utd2lkdGgiLCIxIiksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLG4uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1ydWxlIiwiZXZlbm9kZCIpO3ZhciBpPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2kuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1ydWxlIiwibm9uemVybyIpO3ZhciBhPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2Euc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDMuMCwgMjkuMCkiKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIik7Zm9yKHZhciBvPTAsbD1be3J4OiIxMC41IixyeToiNS4yNTAwMjI3MyJ9LHtyeDoiMTAuNSIscnk6IjUuMjUwMDIyNzMifSx7cng6IjkuNSIscnk6IjQuNzcyNzUwMDcifSx7cng6IjguNSIscnk6IjQuMjk1NDk5MzYifSx7cng6IjcuNSIscnk6IjMuODE4MjIzMDgifSx7cng6IjYuNSIscnk6IjMuMzQwOTQ2NzkifSx7cng6IjUuNSIscnk6IjIuODYzNjcwNTEifSx7cng6IjQuNSIscnk6IjIuMzg2MzY4NjQifV07bzxsLmxlbmd0aDtvKz0xKXt2YXIgYz1sW29dLHU9cy5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJlbGxpcHNlIik7dS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvcGFjaXR5IiwiMC4wNCIpLHUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLCIxMC41IiksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuODAwMjkwMDgiKSx1LnNldEF0dHJpYnV0ZU5TKG51bGwsInJ4IixjLnJ4KSx1LnNldEF0dHJpYnV0ZU5TKG51bGwsInJ5IixjLnJ5KSxhLmFwcGVuZENoaWxkKHUpfXZhciBmPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2Yuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5fY29sb3IpO3ZhciBoPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2guc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsIk0yNywxMy41IEMyNywxOS4wNzQ2NDQgMjAuMjUwMDAxLDI3LjAwMDAwMiAxNC43NSwzNC41MDAwMDIgQzE0LjAxNjY2NSwzNS41MDAwMDQgMTIuOTgzMzM1LDM1LjUwMDAwNCAxMi4yNSwzNC41MDAwMDIgQzYuNzQ5OTk5MywyNy4wMDAwMDIgMCwxOS4yMjI1NjIgMCwxMy41IEMwLDYuMDQ0MTU1OSA2LjA0NDE1NTksMCAxMy41LDAgQzIwLjk1NTg0NCwwIDI3LDYuMDQ0MTU1OSAyNywxMy41IFoiKSxmLmFwcGVuZENoaWxkKGgpO3ZhciBwPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO3Auc2V0QXR0cmlidXRlTlMobnVsbCwib3BhY2l0eSIsIjAuMjUiKSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIik7dmFyIGQ9cy5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7ZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiwiTTEzLjUsMCBDNi4wNDQxNTU5LDAgMCw2LjA0NDE1NTkgMCwxMy41IEMwLDE5LjIyMjU2MiA2Ljc0OTk5OTMsMjcgMTIuMjUsMzQuNSBDMTMsMzUuNTIyNzI3IDE0LjAxNjY2NCwzNS41MDAwMDQgMTQuNzUsMzQuNSBDMjAuMjUwMDAxLDI3IDI3LDE5LjA3NDY0NCAyNywxMy41IEMyNyw2LjA0NDE1NTkgMjAuOTU1ODQ0LDAgMTMuNSwwIFogTTEzLjUsMSBDMjAuNDE1NDA0LDEgMjYsNi41ODQ1OTYgMjYsMTMuNSBDMjYsMTUuODk4NjU3IDI0LjQ5NTU4NCwxOS4xODE0MzEgMjIuMjIwNzAzLDIyLjczODI4MSBDMTkuOTQ1ODIzLDI2LjI5NTEzMiAxNi43MDUxMTksMzAuMTQyMTY3IDEzLjk0MzM1OSwzMy45MDgyMDMgQzEzLjc0MzQ0NSwzNC4xODA4MTQgMTMuNjEyNzE1LDM0LjMyMjczOCAxMy41LDM0LjQ0MTQwNiBDMTMuMzg3Mjg1LDM0LjMyMjczOCAxMy4yNTY1NTUsMzQuMTgwODE0IDEzLjA1NjY0MSwzMy45MDgyMDMgQzEwLjI4NDQ4MSwzMC4xMjc5ODUgNy40MTQ4Njg0LDI2LjMxNDE1OSA1LjAxNTYyNSwyMi43NzM0MzggQzIuNjE2MzgxNiwxOS4yMzI3MTUgMSwxNS45NTM1MzggMSwxMy41IEMxLDYuNTg0NTk2IDYuNTg0NTk2LDEgMTMuNSwxIFoiKSxwLmFwcGVuZENoaWxkKGQpO3ZhciBnPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2cuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDYuMCwgNy4wKSIpLGcuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiNGRkZGRkYiKTt2YXIgdj1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg4LjAsIDguMCkiKTt2YXIgbT1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO20uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiMwMDAwMDAiKSxtLnNldEF0dHJpYnV0ZU5TKG51bGwsIm9wYWNpdHkiLCIwLjI1IiksbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeCIsIjUuNSIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLCI1LjUiKSxtLnNldEF0dHJpYnV0ZU5TKG51bGwsInIiLCI1LjQ5OTk5NjIiKTt2YXIgeT1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO3kuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiNGRkZGRkYiKSx5LnNldEF0dHJpYnV0ZU5TKG51bGwsImN4IiwiNS41IikseS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuNSIpLHkuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsIjUuNDk5OTk2MiIpLHYuYXBwZW5kQ2hpbGQobSksdi5hcHBlbmRDaGlsZCh5KSxpLmFwcGVuZENoaWxkKGEpLGkuYXBwZW5kQ2hpbGQoZiksaS5hcHBlbmRDaGlsZChwKSxpLmFwcGVuZENoaWxkKGcpLGkuYXBwZW5kQ2hpbGQodiksci5hcHBlbmRDaGlsZChpKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKHIpLHRoaXMuX29mZnNldD10LmRlZmF1bHQkMS5jb252ZXJ0KGUmJmUub2Zmc2V0fHxbMCwtMTRdKX10aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcmtlciIpLHRoaXMuX3BvcHVwPW51bGx9O21uLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dCx0LmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHQub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLl9vbk1hcENsaWNrKSx0aGlzfSxtbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoImNsaWNrIix0aGlzLl9vbk1hcENsaWNrKSx0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZSksZGVsZXRlIHRoaXMuX21hcCkscy5yZW1vdmUodGhpcy5fZWxlbWVudCksdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLnJlbW92ZSgpLHRoaXN9LG1uLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxtbi5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sbmdMYXQ9Ry5jb252ZXJ0KHQpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxtbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxtbi5wcm90b3R5cGUuc2V0UG9wdXA9ZnVuY3Rpb24odCl7aWYodGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cC5yZW1vdmUoKSx0aGlzLl9wb3B1cD1udWxsKSx0KXtpZighKCJvZmZzZXQiaW4gdC5vcHRpb25zKSl7dmFyIGU9TWF0aC5zcXJ0KE1hdGgucG93KDEzLjUsMikvMik7dC5vcHRpb25zLm9mZnNldD10aGlzLl9kZWZhdWx0TWFya2VyP3t0b3A6WzAsMF0sInRvcC1sZWZ0IjpbMCwwXSwidG9wLXJpZ2h0IjpbMCwwXSxib3R0b206WzAsLTM4LjFdLCJib3R0b20tbGVmdCI6W2UsLTEqKDI0LjYrZSldLCJib3R0b20tcmlnaHQiOlstZSwtMSooMjQuNitlKV0sbGVmdDpbMTMuNSwtMjQuNl0scmlnaHQ6Wy0xMy41LC0yNC42XX06dGhpcy5fb2Zmc2V0fXRoaXMuX3BvcHVwPXQsdGhpcy5fbG5nTGF0JiZ0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KX1yZXR1cm4gdGhpc30sbW4ucHJvdG90eXBlLl9vbk1hcENsaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXQub3JpZ2luYWxFdmVudC50YXJnZXQscj10aGlzLl9lbGVtZW50O3RoaXMuX3BvcHVwJiYoZT09PXJ8fHIuY29udGFpbnMoZSkpJiZ0aGlzLnRvZ2dsZVBvcHVwKCl9LG1uLnByb3RvdHlwZS5nZXRQb3B1cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sbW4ucHJvdG90eXBlLnRvZ2dsZVBvcHVwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcG9wdXA7cmV0dXJuIHQ/KHQuaXNPcGVuKCk/dC5yZW1vdmUoKTp0LmFkZFRvKHRoaXMuX21hcCksdGhpcyk6dGhpc30sbW4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiYodGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuX2xuZ0xhdD1kbih0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKSx0aGlzLl9wb3M9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KS5fYWRkKHRoaXMuX29mZnNldCksdCYmIm1vdmVlbmQiIT09dC50eXBlfHwodGhpcy5fcG9zPXRoaXMuX3Bvcy5yb3VuZCgpKSxzLnNldFRyYW5zZm9ybSh0aGlzLl9lbGVtZW50LGduW3RoaXMuX2FuY2hvcl0rIiB0cmFuc2xhdGUoIit0aGlzLl9wb3MueCsicHgsICIrdGhpcy5fcG9zLnkrInB4KSIpLHZuKHRoaXMuX2VsZW1lbnQsdGhpcy5fYW5jaG9yLCJtYXJrZXIiKSl9LG1uLnByb3RvdHlwZS5nZXRPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fSxtbi5wcm90b3R5cGUuc2V0T2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlKSx0aGlzLl91cGRhdGUoKSx0aGlzfTt2YXIgeW4seG49e3Bvc2l0aW9uT3B0aW9uczp7ZW5hYmxlSGlnaEFjY3VyYWN5OiExLG1heGltdW1BZ2U6MCx0aW1lb3V0OjZlM30sZml0Qm91bmRzT3B0aW9uczp7bWF4Wm9vbToxNX0sdHJhY2tVc2VyTG9jYXRpb246ITEsc2hvd1VzZXJMb2NhdGlvbjohMH0sYm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LHhuLHIpLHQuYmluZEFsbChbIl9vblN1Y2Nlc3MiLCJfb25FcnJvciIsIl9maW5pc2giLCJfc2V0dXBVSSIsIl91cGRhdGVDYW1lcmEiLCJfdXBkYXRlTWFya2VyIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3ZhciByO3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCIpLHI9dGhpcy5fc2V0dXBVSSx2b2lkIDAhPT15bj9yKHluKTp2b2lkIDAhPT10LmRlZmF1bHQubmF2aWdhdG9yLnBlcm1pc3Npb25zP3QuZGVmYXVsdC5uYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6Imdlb2xvY2F0aW9uIn0pLnRoZW4oZnVuY3Rpb24odCl7eW49ImRlbmllZCIhPT10LnN0YXRlLHIoeW4pfSk6KHluPSEhdC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbixyKHluKSksdGhpcy5fY29udGFpbmVyfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmKHQuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDApLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIucmVtb3ZlKCkscy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXA9dm9pZCAwfSxyLnByb3RvdHlwZS5fb25TdWNjZXNzPWZ1bmN0aW9uKGUpe2lmKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbilzd2l0Y2godGhpcy5fbGFzdEtub3duUG9zaXRpb249ZSx0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjpjYXNlIkFDVElWRV9MT0NLIjpjYXNlIkFDVElWRV9FUlJPUiI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0xPQ0siLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOmNhc2UiQkFDS0dST1VORF9FUlJPUiI6dGhpcy5fd2F0Y2hTdGF0ZT0iQkFDS0dST1VORCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIil9dGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJiJPRkYiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5fdXBkYXRlTWFya2VyKGUpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmIkFDVElWRV9MT0NLIiE9PXRoaXMuX3dhdGNoU3RhdGV8fHRoaXMuX3VwZGF0ZUNhbWVyYShlKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fZG90RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdC1zdGFsZSIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZ2VvbG9jYXRlIixlKSksdGhpcy5fZmluaXNoKCl9LHIucHJvdG90eXBlLl91cGRhdGVDYW1lcmE9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEcodC5jb29yZHMubG9uZ2l0dWRlLHQuY29vcmRzLmxhdGl0dWRlKSxyPXQuY29vcmRzLmFjY3VyYWN5O3RoaXMuX21hcC5maXRCb3VuZHMoZS50b0JvdW5kcyhyKSx0aGlzLm9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucyx7Z2VvbG9jYXRlU291cmNlOiEwfSl9LHIucHJvdG90eXBlLl91cGRhdGVNYXJrZXI9ZnVuY3Rpb24odCl7dD90aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIuc2V0TG5nTGF0KFt0LmNvb3Jkcy5sb25naXR1ZGUsdC5jb29yZHMubGF0aXR1ZGVdKS5hZGRUbyh0aGlzLl9tYXApOnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKX0sci5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKWlmKDE9PT1lLmNvZGUpdGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmdGhpcy5fY2xlYXJXYXRjaCgpO2Vsc2Ugc3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9FUlJPUiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOnRoaXMuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkRfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpfSJPRkYiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImVycm9yIixlKSksdGhpcy5fZmluaXNoKCl9LHIucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl90aW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJZD12b2lkIDB9LHIucHJvdG90eXBlLl9zZXR1cFVJPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7ITEhPT1lJiYodGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uPXMuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIkdlb2xvY2F0ZSIpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIiksdGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIiksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJih0aGlzLl9kb3RFbGVtZW50PXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdCIpLHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlcj1uZXcgbW4odGhpcy5fZG90RWxlbWVudCksdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiYodGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIikpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy50cmlnZ2VyLmJpbmQodGhpcykpLHRoaXMuX3NldHVwPSEwLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmdGhpcy5fbWFwLm9uKCJtb3Zlc3RhcnQiLGZ1bmN0aW9uKGUpe2UuZ2VvbG9jYXRlU291cmNlfHwiQUNUSVZFX0xPQ0siIT09ci5fd2F0Y2hTdGF0ZXx8KHIuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkQiLHIuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksci5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHIuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25lbmQiKSkpfSkpfSxyLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3NldHVwKXJldHVybiB0Lndhcm5PbmNlKCJHZW9sb2NhdGUgY29udHJvbCB0cmlnZ2VyZWQgYmVmb3JlIGFkZGVkIHRvIGEgbWFwIiksITE7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKXtzd2l0Y2godGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZSJPRkYiOnRoaXMuX3dhdGNoU3RhdGU9IldBSVRJTkdfQUNUSVZFIix0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uc3RhcnQiKSk7YnJlYWs7Y2FzZSJXQUlUSU5HX0FDVElWRSI6Y2FzZSJBQ1RJVkVfTE9DSyI6Y2FzZSJBQ1RJVkVfRVJST1IiOmNhc2UiQkFDS0dST1VORF9FUlJPUiI6dGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25lbmQiKSk7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfTE9DSyIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiYmdGhpcy5fdXBkYXRlQ2FtZXJhKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uc3RhcnQiKSl9c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpO2JyZWFrO2Nhc2UiQUNUSVZFX0xPQ0siOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkFDVElWRV9FUlJPUiI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORF9FUlJPUiI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpfSJPRkYiPT09dGhpcy5fd2F0Y2hTdGF0ZSYmdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEP3RoaXMuX2NsZWFyV2F0Y2goKTp2b2lkIDA9PT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsInRydWUiKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMpKX1lbHNlIHQuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMpLHRoaXMuX3RpbWVvdXRJZD1zZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaCwxZTQpO3JldHVybiEwfSxyLnByb3RvdHlwZS5fY2xlYXJXYXRjaD1mdW5jdGlvbigpe3QuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDAsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91cGRhdGVNYXJrZXIobnVsbCl9LHJ9KHQuRXZlbnRlZCksX249e21heFdpZHRoOjEwMCx1bml0OiJtZXRyaWMifSx3bj1mdW5jdGlvbihlKXt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sX24sZSksdC5iaW5kQWxsKFsiX29uTW92ZSIsInNldFVuaXQiXSx0aGlzKX07ZnVuY3Rpb24ga24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjPXImJnIubWF4V2lkdGh8fDEwMCx1PXQuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQvMixmPShuPXQudW5wcm9qZWN0KFswLHVdKSxpPXQudW5wcm9qZWN0KFtjLHVdKSxhPU1hdGguUEkvMTgwLG89bi5sYXQqYSxzPWkubGF0KmEsbD1NYXRoLnNpbihvKSpNYXRoLnNpbihzKStNYXRoLmNvcyhvKSpNYXRoLmNvcyhzKSpNYXRoLmNvcygoaS5sbmctbi5sbmcpKmEpLDYzNzFlMypNYXRoLmFjb3MoTWF0aC5taW4obCwxKSkpO2lmKHImJiJpbXBlcmlhbCI9PT1yLnVuaXQpe3ZhciBoPTMuMjgwOCpmO2g+NTI4MD9UbihlLGMsaC81MjgwLCJtaSIpOlRuKGUsYyxoLCJmdCIpfWVsc2UgciYmIm5hdXRpY2FsIj09PXIudW5pdD9UbihlLGMsZi8xODUyLCJubSIpOlRuKGUsYyxmLCJtIil9ZnVuY3Rpb24gVG4odCxlLHIsbil7dmFyIGksYSxvLHM9KGk9ciwoYT1NYXRoLnBvdygxMCwoIiIrTWF0aC5mbG9vcihpKSkubGVuZ3RoLTEpKSoobz0obz1pL2EpPj0xMD8xMDpvPj01PzU6bz49Mz8zOm8+PTI/MjoxKSksbD1zL3I7Im0iPT09biYmcz49MWUzJiYocy89MWUzLG49ImttIiksdC5zdHlsZS53aWR0aD1lKmwrInB4Iix0LmlubmVySFRNTD1zK259d24ucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LHduLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKCl7a24odGhpcy5fbWFwLHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMpfSx3bi5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLXNjYWxlIix0LmdldENvbnRhaW5lcigpKSx0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fb25Nb3ZlKCksdGhpcy5fY29udGFpbmVyfSx3bi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwPXZvaWQgMH0sd24ucHJvdG90eXBlLnNldFVuaXQ9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLnVuaXQ9dCxrbih0aGlzLl9tYXAsdGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucyl9O3ZhciBBbj1mdW5jdGlvbigpe3RoaXMuX2Z1bGxzY3JlZW49ITEsdC5iaW5kQWxsKFsiX29uQ2xpY2tGdWxsc2NyZWVuIiwiX2NoYW5nZUljb24iXSx0aGlzKSwib25mdWxsc2NyZWVuY2hhbmdlImluIHQuZGVmYXVsdC5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJmdWxsc2NyZWVuY2hhbmdlIjoib25tb3pmdWxsc2NyZWVuY2hhbmdlImluIHQuZGVmYXVsdC5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJtb3pmdWxsc2NyZWVuY2hhbmdlIjoib253ZWJraXRmdWxsc2NyZWVuY2hhbmdlImluIHQuZGVmYXVsdC5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIjoib25tc2Z1bGxzY3JlZW5jaGFuZ2UiaW4gdC5kZWZhdWx0LmRvY3VtZW50JiYodGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0iTVNGdWxsc2NyZWVuQ2hhbmdlIiksdGhpcy5fY2xhc3NOYW1lPSJtYXBib3hnbC1jdHJsIn07QW4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9tYXBDb250YWluZXI9dGhpcy5fbWFwLmdldENvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2Iix0aGlzLl9jbGFzc05hbWUrIiBtYXBib3hnbC1jdHJsLWdyb3VwIiksdGhpcy5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydCgpP3RoaXMuX3NldHVwVUkoKToodGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQud2Fybk9uY2UoIlRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVlbiBtb2RlLiIpKSx0aGlzLl9jb250YWluZXJ9LEFuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwPW51bGwsdC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSx0aGlzLl9jaGFuZ2VJY29uKX0sQW4ucHJvdG90eXBlLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuISEodC5kZWZhdWx0LmRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHx0LmRlZmF1bHQuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWR8fHQuZGVmYXVsdC5kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbmFibGVkfHx0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWQpfSxBbi5wcm90b3R5cGUuX3NldHVwVUk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mdWxsc2NyZWVuQnV0dG9uPXMuY3JlYXRlKCJidXR0b24iLHRoaXMuX2NsYXNzTmFtZSsiLWljb24gIit0aGlzLl9jbGFzc05hbWUrIi1mdWxsc2NyZWVuIix0aGlzLl9jb250YWluZXIpO2Uuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiVG9nZ2xlIGZ1bGxzY3JlZW4iKSxlLnR5cGU9ImJ1dHRvbiIsdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbGlja0Z1bGxzY3JlZW4pLHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsdGhpcy5fY2hhbmdlSWNvbil9LEFuLnByb3RvdHlwZS5faXNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Z1bGxzY3JlZW59LEFuLnByb3RvdHlwZS5fY2hhbmdlSWNvbj1mdW5jdGlvbigpeyh0LmRlZmF1bHQuZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fHQuZGVmYXVsdC5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8dC5kZWZhdWx0LmRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHx0LmRlZmF1bHQuZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudCk9PT10aGlzLl9tYXBDb250YWluZXIhPT10aGlzLl9mdWxsc2NyZWVuJiYodGhpcy5fZnVsbHNjcmVlbj0hdGhpcy5fZnVsbHNjcmVlbix0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC50b2dnbGUodGhpcy5fY2xhc3NOYW1lKyItc2hyaW5rIiksdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuX2NsYXNzTmFtZSsiLWZ1bGxzY3JlZW4iKSl9LEFuLnByb3RvdHlwZS5fb25DbGlja0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXt0aGlzLl9pc0Z1bGxzY3JlZW4oKT90LmRlZmF1bHQuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/dC5kZWZhdWx0LmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk6dC5kZWZhdWx0LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/dC5kZWZhdWx0LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTp0LmRlZmF1bHQuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbj90LmRlZmF1bHQuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpOnQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuJiZ0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpOnRoaXMuX21hcENvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbj90aGlzLl9tYXBDb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4/dGhpcy5fbWFwQ29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuKCk6dGhpcy5fbWFwQ29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4/dGhpcy5fbWFwQ29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4mJnRoaXMuX21hcENvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpfTt2YXIgTW49e2Nsb3NlQnV0dG9uOiEwLGNsb3NlT25DbGljazohMH0sU249ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKE9iamVjdC5jcmVhdGUoTW4pLHIpLHQuYmluZEFsbChbIl91cGRhdGUiLCJfb25DbGlja0Nsb3NlIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayYmdGhpcy5fbWFwLm9uKCJjbGljayIsdGhpcy5fb25DbGlja0Nsb3NlKSx0aGlzLl91cGRhdGUoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm9wZW4iKSksdGhpc30sci5wcm90b3R5cGUuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tYXB9LHIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50JiZzLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250YWluZXImJihzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSksZGVsZXRlIHRoaXMuX21hcCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJjbG9zZSIpKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxyLnByb3RvdHlwZS5zZXRMbmdMYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xuZ0xhdD1HLmNvbnZlcnQodCksdGhpcy5fcG9zPW51bGwsdGhpcy5fdXBkYXRlKCksdGhpc30sci5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9LHIucHJvdG90eXBlLnNldEhUTUw9ZnVuY3Rpb24oZSl7dmFyIHIsbj10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKTtmb3IoaS5pbm5lckhUTUw9ZTtyPWkuZmlyc3RDaGlsZDspbi5hcHBlbmRDaGlsZChyKTtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KG4pfSxyLnByb3RvdHlwZS5zZXRET01Db250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVDb250ZW50KCksdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxyLnByb3RvdHlwZS5fY3JlYXRlQ29udGVudD1mdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnMucmVtb3ZlKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRlbnQ9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLWNvbnRlbnQiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodGhpcy5fY2xvc2VCdXR0b249cy5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbiIsdGhpcy5fY29udGVudCksdGhpcy5fY2xvc2VCdXR0b24udHlwZT0iYnV0dG9uIix0aGlzLl9jbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJDbG9zZSBwb3B1cCIpLHRoaXMuX2Nsb3NlQnV0dG9uLmlubmVySFRNTD0iJiMyMTU7Iix0aGlzLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbGlja0Nsb3NlKSl9LHIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAmJnRoaXMuX2xuZ0xhdCYmdGhpcy5fY29udGVudCl7dGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cCIsdGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl90aXA9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLXRpcCIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY29udGVudCkpLHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLl9sbmdMYXQ9ZG4odGhpcy5fbG5nTGF0LHRoaXMuX3Bvcyx0aGlzLl9tYXAudHJhbnNmb3JtKSk7dmFyIGU9dGhpcy5fcG9zPXRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCkscj10aGlzLm9wdGlvbnMuYW5jaG9yLG49ZnVuY3Rpb24gZShyKXtpZihyKXtpZigibnVtYmVyIj09dHlwZW9mIHIpe3ZhciBuPU1hdGgucm91bmQoTWF0aC5zcXJ0KC41Kk1hdGgucG93KHIsMikpKTtyZXR1cm57Y2VudGVyOm5ldyB0LmRlZmF1bHQkMSgwLDApLHRvcDpuZXcgdC5kZWZhdWx0JDEoMCxyKSwidG9wLWxlZnQiOm5ldyB0LmRlZmF1bHQkMShuLG4pLCJ0b3AtcmlnaHQiOm5ldyB0LmRlZmF1bHQkMSgtbixuKSxib3R0b206bmV3IHQuZGVmYXVsdCQxKDAsLXIpLCJib3R0b20tbGVmdCI6bmV3IHQuZGVmYXVsdCQxKG4sLW4pLCJib3R0b20tcmlnaHQiOm5ldyB0LmRlZmF1bHQkMSgtbiwtbiksbGVmdDpuZXcgdC5kZWZhdWx0JDEociwwKSxyaWdodDpuZXcgdC5kZWZhdWx0JDEoLXIsMCl9fWlmKHIgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMXx8QXJyYXkuaXNBcnJheShyKSl7dmFyIGk9dC5kZWZhdWx0JDEuY29udmVydChyKTtyZXR1cm57Y2VudGVyOmksdG9wOmksInRvcC1sZWZ0IjppLCJ0b3AtcmlnaHQiOmksYm90dG9tOmksImJvdHRvbS1sZWZ0IjppLCJib3R0b20tcmlnaHQiOmksbGVmdDppLHJpZ2h0Oml9fXJldHVybntjZW50ZXI6dC5kZWZhdWx0JDEuY29udmVydChyLmNlbnRlcnx8WzAsMF0pLHRvcDp0LmRlZmF1bHQkMS5jb252ZXJ0KHIudG9wfHxbMCwwXSksInRvcC1sZWZ0Ijp0LmRlZmF1bHQkMS5jb252ZXJ0KHJbInRvcC1sZWZ0Il18fFswLDBdKSwidG9wLXJpZ2h0Ijp0LmRlZmF1bHQkMS5jb252ZXJ0KHJbInRvcC1yaWdodCJdfHxbMCwwXSksYm90dG9tOnQuZGVmYXVsdCQxLmNvbnZlcnQoci5ib3R0b218fFswLDBdKSwiYm90dG9tLWxlZnQiOnQuZGVmYXVsdCQxLmNvbnZlcnQoclsiYm90dG9tLWxlZnQiXXx8WzAsMF0pLCJib3R0b20tcmlnaHQiOnQuZGVmYXVsdCQxLmNvbnZlcnQoclsiYm90dG9tLXJpZ2h0Il18fFswLDBdKSxsZWZ0OnQuZGVmYXVsdCQxLmNvbnZlcnQoci5sZWZ0fHxbMCwwXSkscmlnaHQ6dC5kZWZhdWx0JDEuY29udmVydChyLnJpZ2h0fHxbMCwwXSl9fXJldHVybiBlKG5ldyB0LmRlZmF1bHQkMSgwLDApKX0odGhpcy5vcHRpb25zLm9mZnNldCk7aWYoIXIpe3ZhciBpLGE9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoLG89dGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodDtpPWUueStuLmJvdHRvbS55PG8/WyJ0b3AiXTplLnk+dGhpcy5fbWFwLnRyYW5zZm9ybS5oZWlnaHQtbz9bImJvdHRvbSJdOltdLGUueDxhLzI/aS5wdXNoKCJsZWZ0Iik6ZS54PnRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGgtYS8yJiZpLnB1c2goInJpZ2h0Iikscj0wPT09aS5sZW5ndGg/ImJvdHRvbSI6aS5qb2luKCItIil9dmFyIGw9ZS5hZGQobltyXSkucm91bmQoKTtzLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsZ25bcl0rIiB0cmFuc2xhdGUoIitsLngrInB4LCIrbC55KyJweCkiKSx2bih0aGlzLl9jb250YWluZXIsciwicG9wdXAiKX19LHIucHJvdG90eXBlLl9vbkNsaWNrQ2xvc2U9ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZSgpfSxyfSh0LkV2ZW50ZWQpLEVuPXt2ZXJzaW9uOiIwLjQ1LjAiLHN1cHBvcnRlZDplLHdvcmtlckNvdW50Ok1hdGgubWF4KE1hdGguZmxvb3IoYS5oYXJkd2FyZUNvbmN1cnJlbmN5LzIpLDEpLHNldFJUTFRleHRQbHVnaW46dC5zZXRSVExUZXh0UGx1Z2luLE1hcDp1bixOYXZpZ2F0aW9uQ29udHJvbDpwbixHZW9sb2NhdGVDb250cm9sOmJuLEF0dHJpYnV0aW9uQ29udHJvbDpubixTY2FsZUNvbnRyb2w6d24sRnVsbHNjcmVlbkNvbnRyb2w6QW4sUG9wdXA6U24sTWFya2VyOm1uLFN0eWxlOkplLExuZ0xhdDpHLExuZ0xhdEJvdW5kczpZLFBvaW50OnQuZGVmYXVsdCQxLEV2ZW50ZWQ6dC5FdmVudGVkLGNvbmZpZzp2LGdldCBhY2Nlc3NUb2tlbigpe3JldHVybiB2LkFDQ0VTU19UT0tFTn0sc2V0IGFjY2Vzc1Rva2VuKHQpe3YuQUNDRVNTX1RPS0VOPXR9LHdvcmtlclVybDoiIn07cmV0dXJuIEVufSksbn0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNDE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MTw8dCsxLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09YSh0LG4pO3JldHVybiByfTt2YXIgbj10KCJjb252ZXgtaHVsbCIpO2Z1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCksaT0wO2k8dDsrK2kpbltpXT0wLGk9PT1lJiYobltpXSs9LjUpLGk9PT1yJiYobltpXSs9LjUpO3JldHVybiBufWZ1bmN0aW9uIGEodCxlKXtpZigwPT09ZXx8ZT09PSgxPDx0KzEpLTEpcmV0dXJuW107Zm9yKHZhciByPVtdLGE9W10sbz0wO288PXQ7KytvKWlmKGUmMTw8byl7ci5wdXNoKGkodCxvLTEsby0xKSksYS5wdXNoKG51bGwpO2Zvcih2YXIgcz0wO3M8PXQ7KytzKX5lJjE8PHMmJihyLnB1c2goaSh0LG8tMSxzLTEpKSxhLnB1c2goW28sc10pKX12YXIgbD1uKHIpLGM9W107dDpmb3Iobz0wO288bC5sZW5ndGg7KytvKXt2YXIgdT1sW29dLGY9W107Zm9yKHM9MDtzPHUubGVuZ3RoOysrcyl7aWYoIWFbdVtzXV0pY29udGludWUgdDtmLnB1c2goYVt1W3NdXS5zbGljZSgpKX1jLnB1c2goZil9cmV0dXJuIGN9fSx7ImNvbnZleC1odWxsIjoxMjB9XSw0MjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL25vcm1hbGl6ZSIpLGk9dCgiZ2wtbWF0NC9jcmVhdGUiKSxhPXQoImdsLW1hdDQvY2xvbmUiKSxvPXQoImdsLW1hdDQvZGV0ZXJtaW5hbnQiKSxzPXQoImdsLW1hdDQvaW52ZXJ0IiksbD10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGM9e2xlbmd0aDp0KCJnbC12ZWMzL2xlbmd0aCIpLG5vcm1hbGl6ZTp0KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGRvdDp0KCJnbC12ZWMzL2RvdCIpLGNyb3NzOnQoImdsLXZlYzMvY3Jvc3MiKX0sdT1pKCksZj1pKCksaD1bMCwwLDAsMF0scD1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLGQ9WzAsMCwwXTtmdW5jdGlvbiBnKHQsZSxyLG4saSl7dFswXT1lWzBdKm4rclswXSppLHRbMV09ZVsxXSpuK3JbMV0qaSx0WzJdPWVbMl0qbityWzJdKml9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksdixtKXtpZihlfHwoZT1bMCwwLDBdKSxyfHwocj1bMCwwLDBdKSxpfHwoaT1bMCwwLDBdKSx2fHwodj1bMCwwLDAsMV0pLG18fChtPVswLDAsMCwxXSksIW4odSx0KSlyZXR1cm4hMTtpZihhKGYsdSksZlszXT0wLGZbN109MCxmWzExXT0wLGZbMTVdPTEsTWF0aC5hYnMobyhmKTwxZS04KSlyZXR1cm4hMTt2YXIgeSx4LGIsXyx3LGssVCxBPXVbM10sTT11WzddLFM9dVsxMV0sRT11WzEyXSxDPXVbMTNdLEw9dVsxNF0sej11WzE1XTtpZigwIT09QXx8MCE9PU18fDAhPT1TKXtpZihoWzBdPUEsaFsxXT1NLGhbMl09UyxoWzNdPXosIXMoZixmKSlyZXR1cm4hMTtsKGYsZikseT12LGI9ZixfPSh4PWgpWzBdLHc9eFsxXSxrPXhbMl0sVD14WzNdLHlbMF09YlswXSpfK2JbNF0qdytiWzhdKmsrYlsxMl0qVCx5WzFdPWJbMV0qXytiWzVdKncrYls5XSprK2JbMTNdKlQseVsyXT1iWzJdKl8rYls2XSp3K2JbMTBdKmsrYlsxNF0qVCx5WzNdPWJbM10qXytiWzddKncrYlsxMV0qaytiWzE1XSpUfWVsc2UgdlswXT12WzFdPXZbMl09MCx2WzNdPTE7aWYoZVswXT1FLGVbMV09QyxlWzJdPUwsZnVuY3Rpb24odCxlKXt0WzBdWzBdPWVbMF0sdFswXVsxXT1lWzFdLHRbMF1bMl09ZVsyXSx0WzFdWzBdPWVbNF0sdFsxXVsxXT1lWzVdLHRbMV1bMl09ZVs2XSx0WzJdWzBdPWVbOF0sdFsyXVsxXT1lWzldLHRbMl1bMl09ZVsxMF19KHAsdSksclswXT1jLmxlbmd0aChwWzBdKSxjLm5vcm1hbGl6ZShwWzBdLHBbMF0pLGlbMF09Yy5kb3QocFswXSxwWzFdKSxnKHBbMV0scFsxXSxwWzBdLDEsLWlbMF0pLHJbMV09Yy5sZW5ndGgocFsxXSksYy5ub3JtYWxpemUocFsxXSxwWzFdKSxpWzBdLz1yWzFdLGlbMV09Yy5kb3QocFswXSxwWzJdKSxnKHBbMl0scFsyXSxwWzBdLDEsLWlbMV0pLGlbMl09Yy5kb3QocFsxXSxwWzJdKSxnKHBbMl0scFsyXSxwWzFdLDEsLWlbMl0pLHJbMl09Yy5sZW5ndGgocFsyXSksYy5ub3JtYWxpemUocFsyXSxwWzJdKSxpWzFdLz1yWzJdLGlbMl0vPXJbMl0sYy5jcm9zcyhkLHBbMV0scFsyXSksYy5kb3QocFswXSxkKTwwKWZvcih2YXIgTz0wO088MztPKyspcltPXSo9LTEscFtPXVswXSo9LTEscFtPXVsxXSo9LTEscFtPXVsyXSo9LTE7cmV0dXJuIG1bMF09LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDErcFswXVswXS1wWzFdWzFdLXBbMl1bMl0sMCkpLG1bMV09LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDEtcFswXVswXStwWzFdWzFdLXBbMl1bMl0sMCkpLG1bMl09LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDEtcFswXVswXS1wWzFdWzFdK3BbMl1bMl0sMCkpLG1bM109LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDErcFswXVswXStwWzFdWzFdK3BbMl1bMl0sMCkpLHBbMl1bMV0+cFsxXVsyXSYmKG1bMF09LW1bMF0pLHBbMF1bMl0+cFsyXVswXSYmKG1bMV09LW1bMV0pLHBbMV1bMF0+cFswXVsxXSYmKG1bMl09LW1bMl0pLCEwfX0seyIuL25vcm1hbGl6ZSI6NDIxLCJnbC1tYXQ0L2Nsb25lIjoyNTUsImdsLW1hdDQvY3JlYXRlIjoyNTYsImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjI1NywiZ2wtbWF0NC9pbnZlcnQiOjI2MSwiZ2wtbWF0NC90cmFuc3Bvc2UiOjI3MiwiZ2wtdmVjMy9jcm9zcyI6MzI2LCJnbC12ZWMzL2RvdCI6MzMxLCJnbC12ZWMzL2xlbmd0aCI6MzQxLCJnbC12ZWMzL25vcm1hbGl6ZSI6MzQ4fV0sNDIxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVsxNV07aWYoMD09PXIpcmV0dXJuITE7Zm9yKHZhciBuPTEvcixpPTA7aTwxNjtpKyspdFtpXT1lW2ldKm47cmV0dXJuITB9fSx7fV0sNDIyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtdmVjMy9sZXJwIiksaT10KCJtYXQ0LXJlY29tcG9zZSIpLGE9dCgibWF0NC1kZWNvbXBvc2UiKSxvPXQoImdsLW1hdDQvZGV0ZXJtaW5hbnQiKSxzPXQoInF1YXQtc2xlcnAiKSxsPWYoKSxjPWYoKSx1PWYoKTtmdW5jdGlvbiBmKCl7cmV0dXJue3RyYW5zbGF0ZTpoKCksc2NhbGU6aCgxKSxza2V3OmgoKSxwZXJzcGVjdGl2ZTpbMCwwLDAsMV0scXVhdGVybmlvbjpbMCwwLDAsMV19fWZ1bmN0aW9uIGgodCl7cmV0dXJuW3R8fDAsdHx8MCx0fHwwXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7aWYoMD09PW8oZSl8fDA9PT1vKHIpKXJldHVybiExO3ZhciBoPWEoZSxsLnRyYW5zbGF0ZSxsLnNjYWxlLGwuc2tldyxsLnBlcnNwZWN0aXZlLGwucXVhdGVybmlvbikscD1hKHIsYy50cmFuc2xhdGUsYy5zY2FsZSxjLnNrZXcsYy5wZXJzcGVjdGl2ZSxjLnF1YXRlcm5pb24pO3JldHVybiEoIWh8fCFwfHwobih1LnRyYW5zbGF0ZSxsLnRyYW5zbGF0ZSxjLnRyYW5zbGF0ZSxmKSxuKHUuc2tldyxsLnNrZXcsYy5za2V3LGYpLG4odS5zY2FsZSxsLnNjYWxlLGMuc2NhbGUsZiksbih1LnBlcnNwZWN0aXZlLGwucGVyc3BlY3RpdmUsYy5wZXJzcGVjdGl2ZSxmKSxzKHUucXVhdGVybmlvbixsLnF1YXRlcm5pb24sYy5xdWF0ZXJuaW9uLGYpLGkodCx1LnRyYW5zbGF0ZSx1LnNjYWxlLHUuc2tldyx1LnBlcnNwZWN0aXZlLHUucXVhdGVybmlvbiksMCkpfX0seyJnbC1tYXQ0L2RldGVybWluYW50IjoyNTcsImdsLXZlYzMvbGVycCI6MzQyLCJtYXQ0LWRlY29tcG9zZSI6NDIwLCJtYXQ0LXJlY29tcG9zZSI6NDIzLCJxdWF0LXNsZXJwIjo0NzV9XSw0MjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17aWRlbnRpdHk6dCgiZ2wtbWF0NC9pZGVudGl0eSIpLHRyYW5zbGF0ZTp0KCJnbC1tYXQ0L3RyYW5zbGF0ZSIpLG11bHRpcGx5OnQoImdsLW1hdDQvbXVsdGlwbHkiKSxjcmVhdGU6dCgiZ2wtbWF0NC9jcmVhdGUiKSxzY2FsZTp0KCJnbC1tYXQ0L3NjYWxlIiksZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246dCgiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiIpfSxpPShuLmNyZWF0ZSgpLG4uY3JlYXRlKCkpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7cmV0dXJuIG4uaWRlbnRpdHkodCksbi5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0LHMsZSksdFszXT1vWzBdLHRbN109b1sxXSx0WzExXT1vWzJdLHRbMTVdPW9bM10sbi5pZGVudGl0eShpKSwwIT09YVsyXSYmKGlbOV09YVsyXSxuLm11bHRpcGx5KHQsdCxpKSksMCE9PWFbMV0mJihpWzldPTAsaVs4XT1hWzFdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVswXSYmKGlbOF09MCxpWzRdPWFbMF0sbi5tdWx0aXBseSh0LHQsaSkpLG4uc2NhbGUodCx0LHIpLHR9fSx7ImdsLW1hdDQvY3JlYXRlIjoyNTYsImdsLW1hdDQvZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iOjI1OSwiZ2wtbWF0NC9pZGVudGl0eSI6MjYwLCJnbC1tYXQ0L211bHRpcGx5IjoyNjMsImdsLW1hdDQvc2NhbGUiOjI3MCwiZ2wtbWF0NC90cmFuc2xhdGUiOjI3MX1dLDQyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9TWF0aC5sb2cyfHxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkqTWF0aC5MT0cyRX19LHt9XSw0MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoIm1hdDQtaW50ZXJwb2xhdGUiKSxhPXQoImdsLW1hdDQvaW52ZXJ0Iiksbz10KCJnbC1tYXQ0L3JvdGF0ZVgiKSxzPXQoImdsLW1hdDQvcm90YXRlWSIpLGw9dCgiZ2wtbWF0NC9yb3RhdGVaIiksYz10KCJnbC1tYXQ0L2xvb2tBdCIpLHU9dCgiZ2wtbWF0NC90cmFuc2xhdGUiKSxmPSh0KCJnbC1tYXQ0L3NjYWxlIiksdCgiZ2wtdmVjMy9ub3JtYWxpemUiKSksaD1bMCwwLDBdO2Z1bmN0aW9uIHAodCl7dGhpcy5fY29tcG9uZW50cz10LnNsaWNlKCksdGhpcy5fdGltZT1bMF0sdGhpcy5wcmV2TWF0cml4PXQuc2xpY2UoKSx0aGlzLm5leHRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRJbnZlcnNlPXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZFVwPVswLDAsMF0sdGhpcy5jb21wdXRlZENlbnRlcj1bMCwwLDBdLHRoaXMuY29tcHV0ZWRSYWRpdXM9WzBdLHRoaXMuX2xpbWl0cz1bLTEvMCwxLzBdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHAoKHQ9dHx8e30pLm1hdHJpeHx8WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKX07dmFyIGQ9cC5wcm90b3R5cGU7ZC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPW4ubGUoZSx0KSxvPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoIShyPDApKXt2YXIgcz10aGlzLl9jb21wb25lbnRzO2lmKHI9PT1lLmxlbmd0aC0xKWZvcih2YXIgbD0xNipyLGM9MDtjPDE2OysrYylvW2NdPXNbbCsrXTtlbHNle3ZhciB1PWVbcisxXS1lW3JdLGg9KGw9MTYqcix0aGlzLnByZXZNYXRyaXgpLHA9ITA7Zm9yKGM9MDtjPDE2OysrYyloW2NdPXNbbCsrXTt2YXIgZD10aGlzLm5leHRNYXRyaXg7Zm9yKGM9MDtjPDE2OysrYylkW2NdPXNbbCsrXSxwPXAmJmhbY109PT1kW2NdO2lmKHU8MWUtNnx8cClmb3IoYz0wO2M8MTY7KytjKW9bY109aFtjXTtlbHNlIGkobyxoLGQsKHQtZVtyXSkvdSl9dmFyIGc9dGhpcy5jb21wdXRlZFVwO2dbMF09b1sxXSxnWzFdPW9bNV0sZ1syXT1vWzldLGYoZyxnKTt2YXIgdj10aGlzLmNvbXB1dGVkSW52ZXJzZTthKHYsbyk7dmFyIG09dGhpcy5jb21wdXRlZEV5ZSx5PXZbMTVdO21bMF09dlsxMl0veSxtWzFdPXZbMTNdL3ksbVsyXT12WzE0XS95O3ZhciB4PXRoaXMuY29tcHV0ZWRDZW50ZXIsYj1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtmb3IoYz0wO2M8MzsrK2MpeFtjXT1tW2NdLW9bMis0KmNdKmJ9fSxkLmlkbGU9ZnVuY3Rpb24odCl7aWYoISh0PHRoaXMubGFzdFQoKSkpe2Zvcih2YXIgZT10aGlzLl9jb21wb25lbnRzLHI9ZS5sZW5ndGgtMTYsbj0wO248MTY7KytuKWUucHVzaChlW3IrK10pO3RoaXMuX3RpbWUucHVzaCh0KX19LGQuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9bi5ndCh0aGlzLl90aW1lLHQpLTI7ZTwwfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9jb21wb25lbnRzLnNwbGljZSgwLDE2KmUpKX0sZC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lW3RoaXMuX3RpbWUubGVuZ3RoLTFdfSxkLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHxoLG49bnx8dGhpcy5jb21wdXRlZFVwLHRoaXMuc2V0TWF0cml4KHQsYyh0aGlzLmNvbXB1dGVkTWF0cml4LGUscixuKSk7Zm9yKHZhciBpPTAsYT0wO2E8MzsrK2EpaSs9TWF0aC5wb3coclthXS1lW2FdLDIpO2k9TWF0aC5sb2coTWF0aC5zcXJ0KGkpKSx0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWl9LGQucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2UmJnMoaSxpLGUpLHImJm8oaSxpLHIpLG4mJmwoaSxpLG4pLHRoaXMuc2V0TWF0cml4KHQsYSh0aGlzLmNvbXB1dGVkTWF0cml4LGkpKX07dmFyIGc9WzAsMCwwXTtkLnBhbj1mdW5jdGlvbih0LGUscixuKXtnWzBdPS0oZXx8MCksZ1sxXT0tKHJ8fDApLGdbMl09LShufHwwKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkSW52ZXJzZTt1KGksaSxnKSx0aGlzLnNldE1hdHJpeCh0LGEoaSxpKSl9LGQudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2dbMF09ZXx8MCxnWzFdPXJ8fDAsZ1syXT1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7dShpLGksZyksdGhpcy5zZXRNYXRyaXgodCxpKX0sZC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgcj0wO3I8MTY7KytyKXRoaXMuX2NvbXBvbmVudHMucHVzaChlW3JdKX19LGQuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWV9LGQuc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9saW1pdHM7clswXT10LHJbMV09ZX0sZC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9saW1pdHM7cmV0dXJuIHQ/KHRbMF09ZVswXSx0WzFdPWVbMV0sdCk6ZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgxLCJnbC1tYXQ0L2ludmVydCI6MjYxLCJnbC1tYXQ0L2xvb2tBdCI6MjYyLCJnbC1tYXQ0L3JvdGF0ZVgiOjI2NywiZ2wtbWF0NC9yb3RhdGVZIjoyNjgsImdsLW1hdDQvcm90YXRlWiI6MjY5LCJnbC1tYXQ0L3NjYWxlIjoyNzAsImdsLW1hdDQvdHJhbnNsYXRlIjoyNzEsImdsLXZlYzMvbm9ybWFsaXplIjozNDgsIm1hdDQtaW50ZXJwb2xhdGUiOjQyMn1dLDQyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwzKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKXJbaV09aTtyZXR1cm4gMj09PWUmJnRbMF1bMF09PT10WzFdWzBdJiZ0WzBdWzFdPT09dFsxXVsxXT9bMF06cn1mb3IodmFyIGE9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWFbaV09aTthLnNvcnQoZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdWzBdLXRbcl1bMF07cmV0dXJuIG58fHRbZV1bMV0tdFtyXVsxXX0pO2Zvcih2YXIgbz1bYVswXSxhWzFdXSxzPVthWzBdLGFbMV1dLGk9MjtpPGU7KytpKXtmb3IodmFyIGw9YVtpXSxjPXRbbF0sdT1vLmxlbmd0aDt1PjEmJm4odFtvW3UtMl1dLHRbb1t1LTFdXSxjKTw9MDspdS09MSxvLnBvcCgpO2ZvcihvLnB1c2gobCksdT1zLmxlbmd0aDt1PjEmJm4odFtzW3UtMl1dLHRbc1t1LTFdXSxjKT49MDspdS09MSxzLnBvcCgpO3MucHVzaChsKX1mb3IodmFyIHI9bmV3IEFycmF5KHMubGVuZ3RoK28ubGVuZ3RoLTIpLGY9MCxpPTAsaD1vLmxlbmd0aDtpPGg7KytpKXJbZisrXT1vW2ldO2Zvcih2YXIgcD1zLmxlbmd0aC0yO3A+MDstLXApcltmKytdPXNbcF07cmV0dXJuIHJ9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NDk0fV0sNDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXQsdD13aW5kb3cpO3ZhciByPTAsaT0wLGE9MCxvPXtzaGlmdDohMSxhbHQ6ITEsY29udHJvbDohMSxtZXRhOiExfSxzPSExO2Z1bmN0aW9uIGwodCl7dmFyIGU9ITE7cmV0dXJuImFsdEtleSJpbiB0JiYoZT1lfHx0LmFsdEtleSE9PW8uYWx0LG8uYWx0PSEhdC5hbHRLZXkpLCJzaGlmdEtleSJpbiB0JiYoZT1lfHx0LnNoaWZ0S2V5IT09by5zaGlmdCxvLnNoaWZ0PSEhdC5zaGlmdEtleSksImN0cmxLZXkiaW4gdCYmKGU9ZXx8dC5jdHJsS2V5IT09by5jb250cm9sLG8uY29udHJvbD0hIXQuY3RybEtleSksIm1ldGFLZXkiaW4gdCYmKGU9ZXx8dC5tZXRhS2V5IT09by5tZXRhLG8ubWV0YT0hIXQubWV0YUtleSksZX1mdW5jdGlvbiBjKHQscyl7dmFyIGM9bi54KHMpLHU9bi55KHMpOyJidXR0b25zImluIHMmJih0PTB8cy5idXR0b25zKSwodCE9PXJ8fGMhPT1pfHx1IT09YXx8bChzKSkmJihyPTB8dCxpPWN8fDAsYT11fHwwLGUmJmUocixpLGEsbykpfWZ1bmN0aW9uIHUodCl7YygwLHQpfWZ1bmN0aW9uIGYoKXsocnx8aXx8YXx8by5zaGlmdHx8by5hbHR8fG8ubWV0YXx8by5jb250cm9sKSYmKGk9YT0wLHI9MCxvLnNoaWZ0PW8uYWx0PW8uY29udHJvbD1vLm1ldGE9ITEsZSYmZSgwLDAsMCxvKSl9ZnVuY3Rpb24gaCh0KXtsKHQpJiZlJiZlKHIsaSxhLG8pfWZ1bmN0aW9uIHAodCl7MD09PW4uYnV0dG9ucyh0KT9jKDAsdCk6YyhyLHQpfWZ1bmN0aW9uIGQodCl7YyhyfG4uYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiBnKHQpe2MociZ+bi5idXR0b25zKHQpLHQpfWZ1bmN0aW9uIHYoKXtzfHwocz0hMCx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscCksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZyksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksdC5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCksdCE9PXdpbmRvdyYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpKSl9digpO3ZhciBtPXtlbGVtZW50OnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhtLHtlbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc30sc2V0OmZ1bmN0aW9uKGUpe2U/digpOnMmJihzPSExLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsZCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixnKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSx0IT09d2luZG93JiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCkpKX0sZW51bWVyYWJsZTohMH0sYnV0dG9uczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGVudW1lcmFibGU6ITB9LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiBpfSxlbnVtZXJhYmxlOiEwfSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZW51bWVyYWJsZTohMH0sbW9kczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGVudW1lcmFibGU6ITB9fSksbX07dmFyIG49dCgibW91c2UtZXZlbnQiKX0seyJtb3VzZS1ldmVudCI6NDI5fV0sNDI4OltmdW5jdGlvbih0LGUscil7dmFyIG49e2xlZnQ6MCx0b3A6MH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgaT10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz0ocz1lLHM9PT13aW5kb3d8fHM9PT1kb2N1bWVudHx8cz09PWRvY3VtZW50LmJvZHk/bjpzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTt2YXIgcztyZXR1cm4gclswXT1pLW8ubGVmdCxyWzFdPWEtby50b3Ascn19LHt9XSw0Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudHx8d2luZG93fXIuYnV0dG9ucz1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJidXR0b25zImluIHQpcmV0dXJuIHQuYnV0dG9ucztpZigid2hpY2giaW4gdCl7aWYoMj09PShlPXQud2hpY2gpKXJldHVybiA0O2lmKDM9PT1lKXJldHVybiAyO2lmKGU+MClyZXR1cm4gMTw8ZS0xfWVsc2UgaWYoImJ1dHRvbiJpbiB0KXt2YXIgZTtpZigxPT09KGU9dC5idXR0b24pKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfSxyLmVsZW1lbnQ9bixyLng9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WCJpbiB0KXJldHVybiB0Lm9mZnNldFg7dmFyIGU9bih0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdC5jbGllbnRYLWUubGVmdH1yZXR1cm4gMH0sci55PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFkiaW4gdClyZXR1cm4gdC5vZmZzZXRZO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1lLnRvcH1yZXR1cm4gMH19LHt9XSw0MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidG8tcHgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYocj0hIWUsZT10LHQ9d2luZG93KTt2YXIgaT1uKCJleCIsdCksYT1mdW5jdGlvbih0KXtyJiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dC5kZWx0YVh8fDAsYT10LmRlbHRhWXx8MCxvPXQuZGVsdGFafHwwLHM9dC5kZWx0YU1vZGUsbD0xO3N3aXRjaChzKXtjYXNlIDE6bD1pO2JyZWFrO2Nhc2UgMjpsPXdpbmRvdy5pbm5lckhlaWdodH1pZihhKj1sLG8qPWwsKG4qPWwpfHxhfHxvKXJldHVybiBlKG4sYSxvLHQpfTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsYSksYX19LHsidG8tcHgiOjUyM31dLDQzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKTtmdW5jdGlvbiBpKHQpe3JldHVybiJhIit0fWZ1bmN0aW9uIGEodCl7cmV0dXJuImQiK3R9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiJjIit0KyJfIitlfWZ1bmN0aW9uIHModCl7cmV0dXJuInMiK3R9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiJ0Iit0KyJfIitlfWZ1bmN0aW9uIGModCl7cmV0dXJuIm8iK3R9ZnVuY3Rpb24gdSh0KXtyZXR1cm4ieCIrdH1mdW5jdGlvbiBmKHQpe3JldHVybiJwIit0fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4iZCIrdCsiXyIrZX1mdW5jdGlvbiBwKHQpe3JldHVybiJpIit0fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4idSIrdCsiXyIrZX1mdW5jdGlvbiBnKHQpe3JldHVybiJiIit0fWZ1bmN0aW9uIHYodCl7cmV0dXJuInkiK3R9ZnVuY3Rpb24gbSh0KXtyZXR1cm4iZSIrdH1mdW5jdGlvbiB5KHQpe3JldHVybiJ2Iit0fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3Rocm93IG5ldyBFcnJvcigibmRhcnJheS1leHRyYWN0LWNvbnRvdXI6ICIrdCl9Im9iamVjdCIhPXR5cGVvZiB0JiZlKCJNdXN0IHNwZWNpZnkgYXJndW1lbnRzIik7dmFyIHI9dC5vcmRlcjtBcnJheS5pc0FycmF5KHIpfHxlKCJNdXN0IHNwZWNpZnkgb3JkZXIiKTt2YXIgTT10LmFycmF5QXJndW1lbnRzfHwxO008MSYmZSgiTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBhcnJheSBhcmd1bWVudCIpO3ZhciBTPXQuc2NhbGFyQXJndW1lbnRzfHwwO1M8MCYmZSgiU2NhbGFyIGFyZyBjb3VudCBtdXN0IGJlID4gMCIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LnZlcnRleCYmZSgiTXVzdCBzcGVjaWZ5IHZlcnRleCBjcmVhdGlvbiBmdW5jdGlvbiIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LmNlbGwmJmUoIk11c3Qgc3BlY2lmeSBjZWxsIGNyZWF0aW9uIGZ1bmN0aW9uIik7ImZ1bmN0aW9uIiE9dHlwZW9mIHQucGhhc2UmJmUoIk11c3Qgc3BlY2lmeSBwaGFzZSBmdW5jdGlvbiIpO2Zvcih2YXIgRT10LmdldHRlcnN8fFtdLEM9bmV3IEFycmF5KE0pLEw9MDtMPE07KytMKUUuaW5kZXhPZihMKT49MD9DW0xdPSEwOkNbTF09ITE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLE0sUyxFKXt2YXIgQz1FLmxlbmd0aCxMPVMubGVuZ3RoO2lmKEw8Mil0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiBEaW1lbnNpb24gbXVzdCBiZSBhdCBsZWFzdCAyIik7Zm9yKHZhciB6PSJleHRyYWN0Q29udG91ciIrUy5qb2luKCJfIiksTz1bXSxJPVtdLEQ9W10sUD0wO1A8QzsrK1ApRC5wdXNoKGkoUCkpO2Zvcih2YXIgUD0wO1A8TTsrK1ApRC5wdXNoKHUoUCkpO2Zvcih2YXIgUD0wO1A8TDsrK1ApSS5wdXNoKHMoUCkrIj0iK2koMCkrIi5zaGFwZVsiK1ArIl18MCIpO2Zvcih2YXIgUD0wO1A8QzsrK1Ape0kucHVzaChhKFApKyI9IitpKFApKyIuZGF0YSIsYyhQKSsiPSIraShQKSsiLm9mZnNldHwwIik7Zm9yKHZhciBSPTA7UjxMOysrUilJLnB1c2gobChQLFIpKyI9IitpKFApKyIuc3RyaWRlWyIrUisiXXwwIil9Zm9yKHZhciBQPTA7UDxDOysrUCl7SS5wdXNoKGYoUCkrIj0iK2MoUCkpLEkucHVzaChvKFAsMCkpO2Zvcih2YXIgUj0xO1I8MTw8TDsrK1Ipe2Zvcih2YXIgRj1bXSxCPTA7QjxMOysrQilSJjE8PEImJkYucHVzaCgiLSIrbChQLEIpKTtJLnB1c2goaChQLFIpKyI9KCIrRi5qb2luKCIiKSsiKXwwIiksSS5wdXNoKG8oUCxSKSsiPTAiKX19Zm9yKHZhciBQPTA7UDxDOysrUClmb3IodmFyIFI9MDtSPEw7KytSKXt2YXIgTj1bbChQLFNbUl0pXTtSPjAmJk4ucHVzaChsKFAsU1tSLTFdKSsiKiIrcyhTW1ItMV0pKSxJLnB1c2goZChQLFNbUl0pKyI9KCIrTi5qb2luKCItIikrIil8MCIpfWZvcih2YXIgUD0wO1A8TDsrK1ApSS5wdXNoKHAoUCkrIj0wIik7SS5wdXNoKF8rIj0wIik7Zm9yKHZhciBqPVsiMiJdLFA9TC0yO1A+PTA7LS1QKWoucHVzaChzKFNbUF0pKTtJLnB1c2godysiPSgiK2ouam9pbigiKiIpKyIpfDAiLGIrIj1tYWxsb2NVaW50MzIoIit3KyIpIix4KyI9bWFsbG9jVWludDMyKCIrdysiKSIsaysiPTAiKSxJLnB1c2goZygwKSsiPTAiKTtmb3IodmFyIFI9MTtSPDE8PEw7KytSKXtmb3IodmFyIFY9W10sVT1bXSxCPTA7QjxMOysrQilSJjE8PEImJigwPT09VS5sZW5ndGg/Vi5wdXNoKCIxIik6Vi51bnNoaWZ0KFUuam9pbigiKiIpKSksVS5wdXNoKHMoU1tCXSkpO3ZhciBxPSIiO1ZbMF0uaW5kZXhPZihzKFNbTC0yXSkpPDAmJihxPSItIik7dmFyIEg9QShMLFIsUyk7SS5wdXNoKG0oSCkrIj0oLSIrVi5qb2luKCItIikrIil8MCIsdihIKSsiPSgiK3ErVi5qb2luKCItIikrIil8MCIsZyhIKSsiPTAiKX1mdW5jdGlvbiBHKHQsZSl7Ty5wdXNoKCJmb3IoIixwKFNbdF0pLCI9IixlLCI7IixwKFNbdF0pLCI8IixzKFNbdF0pLCI7IiwiKysiLHAoU1t0XSksIil7Iil9ZnVuY3Rpb24gWSh0KXtmb3IodmFyIGU9MDtlPEM7KytlKU8ucHVzaChmKGUpLCIrPSIsZChlLFNbdF0pLCI7Iik7Ty5wdXNoKCJ9Iil9ZnVuY3Rpb24gVygpe2Zvcih2YXIgdD0xO3Q8MTw8TDsrK3QpTy5wdXNoKFQsIj0iLG0odCksIjsiLG0odCksIj0iLHYodCksIjsiLHYodCksIj0iLFQsIjsiKX1JLnB1c2goeSgwKSsiPTAiLFQrIj0wIiksZnVuY3Rpb24gdChlLHIpe2lmKGU8MClyZXR1cm4gdm9pZCBmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPEM7KytlKUVbZV0/Ty5wdXNoKG8oZSwwKSwiPSIsYShlKSwiLmdldCgiLGYoZSksIik7Iik6Ty5wdXNoKG8oZSwwKSwiPSIsYShlKSwiWyIsZihlKSwiXTsiKTtmb3IodmFyIHI9W10sZT0wO2U8QzsrK2Upci5wdXNoKG8oZSwwKSk7Zm9yKHZhciBlPTA7ZTxNOysrZSlyLnB1c2godShlKSk7Ty5wdXNoKGcoMCksIj0iLGIsIlsiLGssIl09cGhhc2UoIixyLmpvaW4oKSwiKTsiKTtmb3IodmFyIG49MTtuPDE8PEw7KytuKU8ucHVzaChnKG4pLCI9IixiLCJbIixrLCIrIixtKG4pLCJdOyIpO2Zvcih2YXIgaT1bXSxuPTE7bjwxPDxMOysrbilpLnB1c2goIigiK2coMCkrIiE9PSIrZyhuKSsiKSIpO08ucHVzaCgiaWYoIixpLmpvaW4oInx8IiksIil7Iik7Zm9yKHZhciBzPVtdLGU9MDtlPEw7KytlKXMucHVzaChwKGUpKTtmb3IodmFyIGU9MDtlPEM7KytlKXtzLnB1c2gobyhlLDApKTtmb3IodmFyIG49MTtuPDE8PEw7KytuKUVbZV0/Ty5wdXNoKG8oZSxuKSwiPSIsYShlKSwiLmdldCgiLGYoZSksIisiLGgoZSxuKSwiKTsiKTpPLnB1c2gobyhlLG4pLCI9IixhKGUpLCJbIixmKGUpLCIrIixoKGUsbiksIl07Iikscy5wdXNoKG8oZSxuKSl9Zm9yKHZhciBlPTA7ZTwxPDxMOysrZSlzLnB1c2goZyhlKSk7Zm9yKHZhciBlPTA7ZTxNOysrZSlzLnB1c2godShlKSk7Ty5wdXNoKCJ2ZXJ0ZXgoIixzLmpvaW4oKSwiKTsiLHkoMCksIj0iLHgsIlsiLGssIl09IixfLCIrKzsiKTtmb3IodmFyIGw9KDE8PEwpLTEsYz1nKGwpLG49MDtuPEw7KytuKWlmKDA9PSh0Jn4oMTw8bikpKXtmb3IodmFyIGQ9bF4xPDxuLHY9ZyhkKSx3PVtdLFQ9ZDtUPjA7VD1ULTEmZCl3LnB1c2goeCsiWyIraysiKyIrbShUKSsiXSIpO3cucHVzaCh5KDApKTtmb3IodmFyIFQ9MDtUPEM7KytUKTEmbj93LnB1c2gobyhULGwpLG8oVCxkKSk6dy5wdXNoKG8oVCxkKSxvKFQsbCkpOzEmbj93LnB1c2goYyx2KTp3LnB1c2godixjKTtmb3IodmFyIFQ9MDtUPE07KytUKXcucHVzaCh1KFQpKTtPLnB1c2goImlmKCIsYywiIT09Iix2LCIpeyIsImZhY2UoIix3LmpvaW4oKSwiKX0iKX1PLnB1c2goIn0iLGssIis9MTsiKX0ocik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LTE7ZT49MDstLWUpRyhlLDApO2Zvcih2YXIgcj1bXSxlPTA7ZTxDOysrZSlFW2VdP3IucHVzaChhKGUpKyIuZ2V0KCIrZihlKSsiKSIpOnIucHVzaChhKGUpKyJbIitmKGUpKyJdIik7Zm9yKHZhciBlPTA7ZTxNOysrZSlyLnB1c2godShlKSk7Ty5wdXNoKGIsIlsiLGssIisrXT1waGFzZSgiLHIuam9pbigpLCIpOyIpO2Zvcih2YXIgZT0wO2U8dDsrK2UpWShlKTtmb3IodmFyIG49MDtuPEM7KytuKU8ucHVzaChmKG4pLCIrPSIsZChuLFNbdF0pLCI7Iil9KGUpO08ucHVzaCgiaWYoIixzKFNbZV0pLCI+MCl7IixwKFNbZV0pLCI9MTsiKTt0KGUtMSxyfDE8PFNbZV0pO2Zvcih2YXIgbj0wO248QzsrK24pTy5wdXNoKGYobiksIis9IixkKG4sU1tlXSksIjsiKTtlPT09TC0xJiYoTy5wdXNoKGssIj0wOyIpLFcoKSk7RyhlLDIpO3QoZS0xLHIpO2U9PT1MLTEmJihPLnB1c2goImlmKCIscChTW0wtMV0pLCImMSl7IixrLCI9MDt9IiksVygpKTtZKGUpO08ucHVzaCgifSIpfShMLTEsMCksTy5wdXNoKCJmcmVlVWludDMyKCIseCwiKTtmcmVlVWludDMyKCIsYiwiKTsiKTt2YXIgWD1bIid1c2Ugc3RyaWN0JzsiLCJmdW5jdGlvbiAiLHosIigiLEQuam9pbigpLCIpeyIsInZhciAiLEkuam9pbigpLCI7IixPLmpvaW4oIiIpLCJ9IiwicmV0dXJuICIsel0uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbigidmVydGV4IiwiZmFjZSIsInBoYXNlIiwibWFsbG9jVWludDMyIiwiZnJlZVVpbnQzMiIsWCkodCxlLHIsbi5tYWxsb2NVaW50MzIsbi5mcmVlVWludDMyKX0odC52ZXJ0ZXgsdC5jZWxsLHQucGhhc2UsUyxyLEMpfTt2YXIgeD0iViIsYj0iUCIsXz0iTiIsdz0iUSIsaz0iWCIsVD0iVCI7ZnVuY3Rpb24gQSh0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpZSYxPDxpJiYobnw9MTw8cltpXSk7cmV0dXJuIG59fSx7InR5cGVkYXJyYXktcG9vbCI6NTI5fV0sNDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2NhbGFyIl0scHJlOntib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzFfYXJnMV89X2lubGluZV8xX2FyZzJfLmFwcGx5KHZvaWQgMCxfaW5saW5lXzFfYXJnMF8pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToiY3dpc2UiLGJsb2NrU2l6ZTo2NH0pO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQsZSksdH19LHsiY3dpc2UvbGliL3dyYXBwZXIiOjEzOX1dLDQzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKEFycmF5LmlzQXJyYXkocikpe2lmKHIubGVuZ3RoIT09ZS5kaW1lbnNpb24pdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBpbnZhbGlkIGJvdW5kYXJ5IGNvbmRpdGlvbnMiKX1lbHNlIHI9bihlLmRpbWVuc2lvbiwic3RyaW5nIj09dHlwZW9mIHI/cjoiY2xhbXAiKTtpZih0LmRpbWVuc2lvbiE9PWUuZGltZW5zaW9uKzEpdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBvdXRwdXQgZGltZW5zaW9uIG11c3QgYmUgKzEgaW5wdXQgZGltZW5zaW9uIik7aWYodC5zaGFwZVtlLmRpbWVuc2lvbl0hPT1lLmRpbWVuc2lvbil0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IG91dHB1dCBzaGFwZSBtdXN0IG1hdGNoIGlucHV0IHNoYXBlIik7Zm9yKHZhciBpPTA7aTxlLmRpbWVuc2lvbjsrK2kpaWYodC5zaGFwZVtpXSE9PWUuc2hhcGVbaV0pdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBzaGFwZSBtaXNtYXRjaCIpO2lmKDA9PT1lLnNpemUpcmV0dXJuIHQ7aWYoZS5kaW1lbnNpb248PTApcmV0dXJuIHQuc2V0KDApLHQ7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQuam9pbigpO2lmKG09b1tlXSlyZXR1cm4gbTt2YXIgcj10Lmxlbmd0aCxuPVsiZnVuY3Rpb24gZ3JhZGllbnQoZHN0LHNyYyl7dmFyIHM9c3JjLnNoYXBlLnNsaWNlKCk7Il07ZnVuY3Rpb24gaShlKXtmb3IodmFyIGk9ci1lLmxlbmd0aCxhPVtdLG89W10scz1bXSxsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MD9zLnB1c2goIjAiKTplLmluZGV4T2YoLShsKzEpKT49MD9zLnB1c2goInNbIitsKyJdLTEiKToocy5wdXNoKCItMSIpLGEucHVzaCgiMSIpLG8ucHVzaCgic1siK2wrIl0tMiIpKTt2YXIgYz0iLmxvKCIrYS5qb2luKCkrIikuaGkoIitvLmpvaW4oKSsiKSI7aWYoMD09PWEubGVuZ3RoJiYoYz0iIiksaT4wKXtuLnB1c2goImlmKDEiKTtmb3IodmFyIGw9MDtsPHI7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8bi5wdXNoKCImJnNbIixsLCJdPjIiKTtuLnB1c2goIil7Z3JhZCIsaSwiKHNyYy5waWNrKCIscy5qb2luKCksIikiLGMpO2Zvcih2YXIgbD0wO2w8cjsrK2wpZS5pbmRleE9mKGwrMSk+PTB8fGUuaW5kZXhPZigtKGwrMSkpPj0wfHxuLnB1c2goIixkc3QucGljaygiLHMuam9pbigpLCIsIixsLCIpIixjKTtuLnB1c2goIik7Iil9Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciB1PU1hdGguYWJzKGVbbF0pLTEsZj0iZHN0LnBpY2soIitzLmpvaW4oKSsiLCIrdSsiKSIrYztzd2l0Y2godFt1XSl7Y2FzZSJjbGFtcCI6dmFyIGg9cy5zbGljZSgpLHA9cy5zbGljZSgpO2VbbF08MD9oW3VdPSJzWyIrdSsiXS0yIjpwW3VdPSIxIiwwPT09aT9uLnB1c2goImlmKHNbIix1LCJdPjEpe2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDAuNSooc3JjLmdldCgiLGguam9pbigpLCIpLXNyYy5nZXQoIixwLmpvaW4oKSwiKSkpfWVsc2V7ZHN0LnNldCgiLHMuam9pbigpLCIsIix1LCIsMCl9OyIpOm4ucHVzaCgiaWYoc1siLHUsIl0+MSl7ZGlmZigiLGYsIixzcmMucGljaygiLGguam9pbigpLCIpIixjLCIsc3JjLnBpY2soIixwLmpvaW4oKSwiKSIsYywiKTt9ZWxzZXt6ZXJvKCIsZiwiKTt9OyIpO2JyZWFrO2Nhc2UibWlycm9yIjowPT09aT9uLnB1c2goImRzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDApOyIpOm4ucHVzaCgiemVybygiLGYsIik7Iik7YnJlYWs7Y2FzZSJ3cmFwIjp2YXIgZD1zLnNsaWNlKCksZz1zLnNsaWNlKCk7ZVtsXTwwPyhkW3VdPSJzWyIrdSsiXS0yIixnW3VdPSIwIik6KGRbdV09InNbIit1KyJdLTEiLGdbdV09IjEiKSwwPT09aT9uLnB1c2goImlmKHNbIix1LCJdPjIpe2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDAuNSooc3JjLmdldCgiLGQuam9pbigpLCIpLXNyYy5nZXQoIixnLmpvaW4oKSwiKSkpfWVsc2V7ZHN0LnNldCgiLHMuam9pbigpLCIsIix1LCIsMCl9OyIpOm4ucHVzaCgiaWYoc1siLHUsIl0+Mil7ZGlmZigiLGYsIixzcmMucGljaygiLGQuam9pbigpLCIpIixjLCIsc3JjLnBpY2soIixnLmpvaW4oKSwiKSIsYywiKTt9ZWxzZXt6ZXJvKCIsZiwiKTt9OyIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBJbnZhbGlkIGJvdW5kYXJ5IGNvbmRpdGlvbiIpfX1pPjAmJm4ucHVzaCgifTsiKX1mb3IodmFyIHM9MDtzPDE8PHI7KytzKXtmb3IodmFyIGY9W10saD0wO2g8cjsrK2gpcyYxPDxoJiZmLnB1c2goaCsxKTtmb3IodmFyIHA9MDtwPDE8PGYubGVuZ3RoOysrcCl7Zm9yKHZhciBkPWYuc2xpY2UoKSxoPTA7aDxmLmxlbmd0aDsrK2gpcCYxPDxoJiYoZFtoXT0tZFtoXSk7aShkKX19bi5wdXNoKCJyZXR1cm4gZHN0O307cmV0dXJuIGdyYWRpZW50Iik7Zm9yKHZhciBnPVsiZGlmZiIsInplcm8iXSx2PVtsLGNdLHM9MTtzPD1yOysrcylnLnB1c2goImdyYWQiK3MpLHYucHVzaCh1KHMpKTtnLnB1c2gobi5qb2luKCIiKSk7dmFyIG09RnVuY3Rpb24uYXBwbHkodm9pZCAwLGcpLmFwcGx5KHZvaWQgMCx2KTtyZXR1cm4gYVtlXT1tLG19KHIpKHQsZSl9O3ZhciBuPXQoImR1cCIpLGk9dCgiY3dpc2UtY29tcGlsZXIiKSxhPXt9LG89e30scz17Ym9keToiIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sbD1pKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnMscG9zdDpzLGJvZHk6e2FyZ3M6W3tuYW1lOiJvdXQiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6ImxlZnQiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6InJpZ2h0IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJvdXQ9MC41KihsZWZ0LXJpZ2h0KSIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiY2RpZmYifSksYz1pKHthcmdzOlsiYXJyYXkiXSxwcmU6cyxwb3N0OnMsYm9keTp7YXJnczpbe25hbWU6Im91dCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfV0sYm9keToib3V0PTAiLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6Inplcm8ifSk7ZnVuY3Rpb24gdSh0KXtpZih0IGluIGEpcmV0dXJuIGFbdF07Zm9yKHZhciBlPVtdLHI9MDtyPHQ7KytyKWUucHVzaCgib3V0IixyLCJzPTAuNSooaW5wIixyLCJsLWlucCIsciwicik7Iik7dmFyIG89WyJhcnJheSJdLGw9WyJqdW5rIl07Zm9yKHI9MDtyPHQ7KytyKXtvLnB1c2goImFycmF5IiksbC5wdXNoKCJvdXQiK3IrInMiKTt2YXIgYz1uKHQpO2Nbcl09LTEsby5wdXNoKHthcnJheTowLG9mZnNldDpjLnNsaWNlKCl9KSxjW3JdPTEsby5wdXNoKHthcnJheTowLG9mZnNldDpjLnNsaWNlKCl9KSxsLnB1c2goImlucCIrcisibCIsImlucCIrcisiciIpfXJldHVybiBhW3RdPWkoe2FyZ3M6byxwcmU6cyxwb3N0OnMsYm9keTp7Ym9keTplLmpvaW4oIiIpLGFyZ3M6bC5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dCxsdmFsdWU6MD09PXQuaW5kZXhPZigib3V0IikscnZhbHVlOjA9PT10LmluZGV4T2YoImlucCIpLGNvdW50OiJqdW5rIiE9PXR8MH19KSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJmZFRlbXBsYXRlIit0fSl9fSx7ImN3aXNlLWNvbXBpbGVyIjoxMzYsZHVwOjE2MX1dLDQzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJuZGFycmF5LXdhcnAiKSxpPXQoImdsLW1hdHJpeC1pbnZlcnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWUuZGltZW5zaW9uLG89aShbXSxyKTtyZXR1cm4gbih0LGUsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGE7KytyKXt0W3JdPW9bKGErMSkqYStyXTtmb3IodmFyIG49MDtuPGE7KytuKXRbcl0rPW9bKGErMSkqbityXSplW25dfXZhciBpPW9bKGErMSkqKGErMSktMV07Zm9yKG49MDtuPGE7KytuKWkrPW9bKGErMSkqbithXSplW25dO3ZhciBzPTEvaTtmb3Iocj0wO3I8YTsrK3IpdFtyXSo9cztyZXR1cm4gdH0pLHR9fSx7ImdsLW1hdHJpeC1pbnZlcnQiOjI3MywibmRhcnJheS13YXJwIjo0NDF9XSw0MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPU1hdGguZmxvb3IoZSksbj1lLXIsaT0wPD1yJiZyPHQuc2hhcGVbMF0sYT0wPD1yKzEmJnIrMTx0LnNoYXBlWzBdO3JldHVybigxLW4pKihpPyt0LmdldChyKTowKStuKihhPyt0LmdldChyKzEpOjApfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPU1hdGguZmxvb3IoZSksaT1lLW4sYT0wPD1uJiZuPHQuc2hhcGVbMF0sbz0wPD1uKzEmJm4rMTx0LnNoYXBlWzBdLHM9TWF0aC5mbG9vcihyKSxsPXItcyxjPTA8PXMmJnM8dC5zaGFwZVsxXSx1PTA8PXMrMSYmcysxPHQuc2hhcGVbMV0sZj1hJiZjP3QuZ2V0KG4scyk6MCxoPWEmJnU/dC5nZXQobixzKzEpOjA7cmV0dXJuKDEtbCkqKCgxLWkpKmYraSoobyYmYz90LmdldChuKzEscyk6MCkpK2wqKCgxLWkpKmgraSoobyYmdT90LmdldChuKzEscysxKTowKSl9ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaT1NYXRoLmZsb29yKGUpLGE9ZS1pLG89MDw9aSYmaTx0LnNoYXBlWzBdLHM9MDw9aSsxJiZpKzE8dC5zaGFwZVswXSxsPU1hdGguZmxvb3IociksYz1yLWwsdT0wPD1sJiZsPHQuc2hhcGVbMV0sZj0wPD1sKzEmJmwrMTx0LnNoYXBlWzFdLGg9TWF0aC5mbG9vcihuKSxwPW4taCxkPTA8PWgmJmg8dC5zaGFwZVsyXSxnPTA8PWgrMSYmaCsxPHQuc2hhcGVbMl0sdj1vJiZ1JiZkP3QuZ2V0KGksbCxoKTowLG09byYmZiYmZD90LmdldChpLGwrMSxoKTowLHk9cyYmdSYmZD90LmdldChpKzEsbCxoKTowLHg9cyYmZiYmZD90LmdldChpKzEsbCsxLGgpOjAsYj1vJiZ1JiZnP3QuZ2V0KGksbCxoKzEpOjAsXz1vJiZmJiZnP3QuZ2V0KGksbCsxLGgrMSk6MDtyZXR1cm4oMS1wKSooKDEtYykqKCgxLWEpKnYrYSp5KStjKigoMS1hKSptK2EqeCkpK3AqKCgxLWMpKigoMS1hKSpiK2EqKHMmJnUmJmc/dC5nZXQoaSsxLGwsaCsxKTowKSkrYyooKDEtYSkqXythKihzJiZmJiZnP3QuZ2V0KGkrMSxsKzEsaCsxKTowKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtzd2l0Y2godC5zaGFwZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIG4odCxlKTtjYXNlIDI6cmV0dXJuIGkodCxlLHIpO2Nhc2UgMzpyZXR1cm4gYSh0LGUscixvKTtkZWZhdWx0OnJldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyLG49MHx0LnNoYXBlLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2Upcj0rYXJndW1lbnRzW2UrMV0saVtlXT1NYXRoLmZsb29yKHIpLGFbZV09ci1pW2VdLG9bZV09MDw9aVtlXSYmaVtlXTx0LnNoYXBlW2VdLHNbZV09MDw9aVtlXSsxJiZpW2VdKzE8dC5zaGFwZVtlXTt2YXIgbCxjLHUsZj0wO3Q6Zm9yKGU9MDtlPDE8PG47KytlKXtmb3IoYz0xLHU9dC5vZmZzZXQsbD0wO2w8bjsrK2wpaWYoZSYxPDxsKXtpZighc1tsXSljb250aW51ZSB0O2MqPWFbbF0sdSs9dC5zdHJpZGVbbF0qKGlbbF0rMSl9ZWxzZXtpZighb1tsXSljb250aW51ZSB0O2MqPTEtYVtsXSx1Kz10LnN0cmlkZVtsXSppW2xdfWYrPWMqdC5kYXRhW3VdfXJldHVybiBmfS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19LGUuZXhwb3J0cy5kMT1uLGUuZXhwb3J0cy5kMj1pLGUuZXhwb3J0cy5kMz1hfSx7fV0sNDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImN3aXNlLWNvbXBpbGVyIiksaT17Ym9keToiIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX07ZnVuY3Rpb24gYSh0KXtpZighdClyZXR1cm4gaTtmb3IodmFyIGU9MDtlPHQuYXJncy5sZW5ndGg7KytlKXt2YXIgcj10LmFyZ3NbZV07dC5hcmdzW2VdPTA9PT1lP3tuYW1lOnIsbHZhbHVlOiEwLHJ2YWx1ZTohIXQucnZhbHVlLGNvdW50OnQuY291bnR8fDF9OntuYW1lOnIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfX1yZXR1cm4gdC50aGlzVmFyc3x8KHQudGhpc1ZhcnM9W10pLHQubG9jYWxWYXJzfHwodC5sb2NhbFZhcnM9W10pLHR9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5hcmdzLmxlbmd0aDsrK3IpZS5wdXNoKCJhIityKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJQIixbInJldHVybiBmdW5jdGlvbiAiLHQuZnVuY05hbWUsIl9uZGFycmF5b3BzKCIsZS5qb2luKCIsIiksIikge1AoIixlLmpvaW4oIiwiKSwiKTtyZXR1cm4gYTB9Il0uam9pbigiIikpKGZ1bmN0aW9uKHQpe3JldHVybiBuKHthcmdzOnQuYXJncyxwcmU6YSh0LnByZSksYm9keTphKHQuYm9keSkscG9zdDphKHQucHJvYyksZnVuY05hbWU6dC5mdW5jTmFtZX0pfSh0KSl9dmFyIHM9e2FkZDoiKyIsc3ViOiItIixtdWw6IioiLGRpdjoiLyIsbW9kOiIlIixiYW5kOiImIixib3I6InwiLGJ4b3I6Il4iLGxzaGlmdDoiPDwiLHJzaGlmdDoiPj4iLHJyc2hpZnQ6Ij4+PiJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzKXt2YXIgZT1zW3RdO3JbdF09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPWIiK2UrImMifSxmdW5jTmFtZTp0fSksclt0KyJlcSJdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYSIrZSsiPWIifSxydmFsdWU6ITAsZnVuY05hbWU6dCsiZXEifSksclt0KyJzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsImIiLCJzIl0sYm9keToiYT1iIitlKyJzIn0sZnVuY05hbWU6dCsicyJ9KSxyW3QrInNlcSJdPW8oe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwicyJdLGJvZHk6ImEiK2UrIj1zIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrInNlcSJ9KX19KCk7dmFyIGw9e25vdDoiISIsYm5vdDoifiIsbmVnOiItIixyZWNpcDoiMS4wLyJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBsKXt2YXIgZT1sW3RdO3JbdF09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPSIrZSsiYiJ9LGZ1bmNOYW1lOnR9KSxyW3QrImVxIl09byh7YXJnczpbImFycmF5Il0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPSIrZSsiYSJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pfX0oKTt2YXIgYz17YW5kOiImJiIsb3I6Inx8IixlcToiPT09IixuZXE6IiE9PSIsbHQ6IjwiLGd0OiI+IixsZXE6Ijw9IixnZXE6Ij49In07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIGMpe3ZhciBlPWNbdF07clt0XT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9YiIrZSsiYyJ9LGZ1bmNOYW1lOnR9KSxyW3QrInMiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsInMiXSxib2R5OiJhPWIiK2UrInMifSxmdW5jTmFtZTp0KyJzIn0pLHJbdCsiZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9YSIrZSsiYiJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pLHJbdCsic2VxIl09byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJzIl0sYm9keToiYT1hIitlKyJzIn0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6dCsic2VxIn0pfX0oKTt2YXIgdT1bImFicyIsImFjb3MiLCJhc2luIiwiYXRhbiIsImNlaWwiLCJjb3MiLCJleHAiLCJmbG9vciIsImxvZyIsInJvdW5kIiwic2luIiwic3FydCIsInRhbiJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dS5sZW5ndGg7Kyt0KXt2YXIgZT11W3RdO3JbZV09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJlcSJdPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZihhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSl9fSgpO3ZhciBmPVsibWF4IiwibWluIiwiYXRhbjIiLCJwb3ciXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdCl7dmFyIGU9Zlt0XTtyW2VdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplKyJzIn0pLHJbZSsiZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYSxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSkscltlKyJzZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGEsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrInNlcSJ9KX19KCk7dmFyIGg9WyJhdGFuMiIsInBvdyJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8aC5sZW5ndGg7Kyt0KXt2YXIgZT1oW3RdO3JbZSsib3AiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYyxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZSsib3AifSkscltlKyJvcHMiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9dGhpc19mKGMsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOmUrIm9wcyJ9KSxyW2UrIm9wZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYixhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsib3BlcSJ9KSxyW2UrIm9wc2VxIl09byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihiLGEpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJvcHNlcSJ9KX19KCksci5hbnk9bih7YXJnczpbImFycmF5Il0scHJlOmksYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6ImlmKGEpe3JldHVybiB0cnVlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gZmFsc2UifSxmdW5jTmFtZToiYW55In0pLHIuYWxsPW4oe2FyZ3M6WyJhcnJheSJdLHByZTppLGJvZHk6e2FyZ3M6W3tuYW1lOiJ4IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJpZigheCl7cmV0dXJuIGZhbHNlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gdHJ1ZSJ9LGZ1bmNOYW1lOiJhbGwifSksci5zdW09bih7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6InRoaXNfcys9YSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJzdW0ifSksci5wcm9kPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MSJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJ0aGlzX3MqPWEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToicHJvZCJ9KSxyLm5vcm0yc3F1YXJlZD1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keToidGhpc19zKz1hKmEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybTJzcXVhcmVkIn0pLHIubm9ybTI9bih7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLGJvZHk6InRoaXNfcys9YSphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gTWF0aC5zcXJ0KHRoaXNfcykifSxmdW5jTmFtZToibm9ybTIifSksci5ub3JtaW5mPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjR9XSxib2R5OiJpZigtYT50aGlzX3Mpe3RoaXNfcz0tYX1lbHNlIGlmKGE+dGhpc19zKXt0aGlzX3M9YX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybWluZiJ9KSxyLm5vcm0xPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjN9XSxib2R5OiJ0aGlzX3MrPWE8MD8tYTphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6Im5vcm0xIn0pLHIuc3VwPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7Ym9keToidGhpc19oPS1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPnRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmluZj1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2JvZHk6InRoaXNfaD1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPHRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21pbj1uKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9IixhcmdzOlt7bmFtZToiX2lubGluZV8wX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMF9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzFfYXJnMV88dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaSIsInRoaXNfdiJdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9rIl19LHBvc3Q6e2JvZHk6IntyZXR1cm4gdGhpc19pfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaSJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21heD1uKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PS1JbmZpbml0eTt0aGlzX2k9X2lubGluZV8wX2FyZzJfLnNsaWNlKDApfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV8xX2FyZzFfPnRoaXNfdil7dGhpc192PV9pbmxpbmVfMV9hcmcxXztmb3IodmFyIF9pbmxpbmVfMV9rPTA7X2lubGluZV8xX2s8X2lubGluZV8xX2FyZzBfLmxlbmd0aDsrK19pbmxpbmVfMV9rKXt0aGlzX2lbX2lubGluZV8xX2tdPV9pbmxpbmVfMV9hcmcwX1tfaW5saW5lXzFfa119fX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfayJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuIHRoaXNfaX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2kiXSxsb2NhbFZhcnM6W119fSksci5yYW5kb209byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLnJhbmRvbSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZigpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZToicmFuZG9tIn0pLHIuYXNzaWduPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbiJ9KSxyLmFzc2lnbnM9byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbnMifSksci5lcXVhbHM9bih7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6aSxib2R5OnthcmdzOlt7bmFtZToieCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToieSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToiaWYoeCE9PXkpe3JldHVybiBmYWxzZX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keToicmV0dXJuIHRydWUifSxmdW5jTmFtZToiZXF1YWxzIn0pfSx7ImN3aXNlLWNvbXBpbGVyIjoxMzZ9XSw0Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgiLi9kb0NvbnZlcnQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10LG89MTtBcnJheS5pc0FycmF5KGEpOylyLnB1c2goYS5sZW5ndGgpLG8qPWEubGVuZ3RoLGE9YVswXTtyZXR1cm4gMD09PXIubGVuZ3RoP24oKTooZXx8KGU9bihuZXcgRmxvYXQ2NEFycmF5KG8pLHIpKSxpKGUsdCksZSl9fSx7Ii4vZG9Db252ZXJ0LmpzIjo0MzgsbmRhcnJheTo0NDJ9XSw0Mzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiY3dpc2UtY29tcGlsZXIiKSh7YXJnczpbImFycmF5Iiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie1xudmFyIF9pbmxpbmVfMV92PV9pbmxpbmVfMV9hcmcxXyxfaW5saW5lXzFfaVxuZm9yKF9pbmxpbmVfMV9pPTA7X2lubGluZV8xX2k8X2lubGluZV8xX2FyZzJfLmxlbmd0aC0xOysrX2lubGluZV8xX2kpIHtcbl9pbmxpbmVfMV92PV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfaV1dXG59XG5faW5saW5lXzFfYXJnMF89X2lubGluZV8xX3ZbX2lubGluZV8xX2FyZzJfW19pbmxpbmVfMV9hcmcyXy5sZW5ndGgtMV1dXG59IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOlsiX2lubGluZV8xX2kiLCJfaW5saW5lXzFfdiJdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjb252ZXJ0IixibG9ja1NpemU6NjR9KX0seyJjd2lzZS1jb21waWxlciI6MTM2fV0sNDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9MzI7ZnVuY3Rpb24gYSh0KXtzd2l0Y2godCl7Y2FzZSJ1aW50OCI6cmV0dXJuW24ubWFsbG9jVWludDgsbi5mcmVlVWludDhdO2Nhc2UidWludDE2IjpyZXR1cm5bbi5tYWxsb2NVaW50MTYsbi5mcmVlVWludDE2XTtjYXNlInVpbnQzMiI6cmV0dXJuW24ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMl07Y2FzZSJpbnQ4IjpyZXR1cm5bbi5tYWxsb2NJbnQ4LG4uZnJlZUludDhdO2Nhc2UiaW50MTYiOnJldHVybltuLm1hbGxvY0ludDE2LG4uZnJlZUludDE2XTtjYXNlImludDMyIjpyZXR1cm5bbi5tYWxsb2NJbnQzMixuLmZyZWVJbnQzMl07Y2FzZSJmbG9hdDMyIjpyZXR1cm5bbi5tYWxsb2NGbG9hdCxuLmZyZWVGbG9hdF07Y2FzZSJmbG9hdDY0IjpyZXR1cm5bbi5tYWxsb2NEb3VibGUsbi5mcmVlRG91YmxlXTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goInMiK3IpO2ZvcihyPTA7cjx0OysrcillLnB1c2goIm4iK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImQiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImUiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImYiK3IpO3JldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVsiJ3VzZSBzdHJpY3QnIl0sbj1bIm5kYXJyYXlTb3J0V3JhcHBlciIsdC5qb2luKCJkIiksZV0uam9pbigiIik7ci5wdXNoKFsiZnVuY3Rpb24gIixuLCIoIixbImFycmF5Il0uam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIHM9WyJkYXRhPWFycmF5LmRhdGEsb2Zmc2V0PWFycmF5Lm9mZnNldHwwLHNoYXBlPWFycmF5LnNoYXBlLHN0cmlkZT1hcnJheS5zdHJpZGUiXSxsPTA7bDx0Lmxlbmd0aDsrK2wpcy5wdXNoKFsicyIsbCwiPXN0cmlkZVsiLGwsIl18MCxuIixsLCI9c2hhcGVbIixsLCJdfDAiXS5qb2luKCIiKSk7dmFyIGM9bmV3IEFycmF5KHQubGVuZ3RoKSx1PVtdO2ZvcihsPTA7bDx0Lmxlbmd0aDsrK2wpMCE9PShwPXRbbF0pJiYoMD09PXUubGVuZ3RoP2NbcF09IjEiOmNbcF09dS5qb2luKCIqIiksdS5wdXNoKCJuIitwKSk7dmFyIGY9LTEsaD0tMTtmb3IobD0wO2w8dC5sZW5ndGg7KytsKXt2YXIgcCxkPXRbbF07MCE9PWQmJihmPjA/cy5wdXNoKFsiZCIsZCwiPXMiLGQsIi1kIixmLCIqbiIsZl0uam9pbigiIikpOnMucHVzaChbImQiLGQsIj1zIixkXS5qb2luKCIiKSksZj1kKSwwIT0ocD10Lmxlbmd0aC0xLWwpJiYoaD4wP3MucHVzaChbImUiLHAsIj1zIixwLCItZSIsaCwiKm4iLGgsIixmIixwLCI9IixjW3BdLCItZiIsaCwiKm4iLGhdLmpvaW4oIiIpKTpzLnB1c2goWyJlIixwLCI9cyIscCwiLGYiLHAsIj0iLGNbcF1dLmpvaW4oIiIpKSxoPXApfXIucHVzaCgidmFyICIrcy5qb2luKCIsIikpO3ZhciBnPVsiMCIsIm4wLTEiLCJkYXRhIiwib2Zmc2V0Il0uY29uY2F0KG8odC5sZW5ndGgpKTtyLnB1c2goWyJpZihuMDw9IixpLCIpeyIsImluc2VydGlvblNvcnQoIixnLmpvaW4oIiwiKSwiKX1lbHNleyIsInF1aWNrU29ydCgiLGcuam9pbigiLCIpLCIpfSJdLmpvaW4oIiIpKSxyLnB1c2goIn1yZXR1cm4gIituKTt2YXIgdj1uZXcgRnVuY3Rpb24oImluc2VydGlvblNvcnQiLCJxdWlja1NvcnQiLHIuam9pbigiXG4iKSksbT1mdW5jdGlvbih0LGUpe3ZhciByPVsiJ3VzZSBzdHJpY3QnIl0sbj1bIm5kYXJyYXlJbnNlcnRpb25Tb3J0Iix0LmpvaW4oImQiKSxlXS5qb2luKCIiKSxpPVsibGVmdCIsInJpZ2h0IiwiZGF0YSIsIm9mZnNldCJdLmNvbmNhdChvKHQubGVuZ3RoKSkscz1hKGUpLGw9WyJpLGosY3B0cixwdHI9bGVmdCpzMCtvZmZzZXQiXTtpZih0Lmxlbmd0aD4xKXtmb3IodmFyIGM9W10sdT0xO3U8dC5sZW5ndGg7Kyt1KWwucHVzaCgiaSIrdSksYy5wdXNoKCJuIit1KTtzP2wucHVzaCgic2NyYXRjaD1tYWxsb2MoIitjLmpvaW4oIioiKSsiKSIpOmwucHVzaCgic2NyYXRjaD1uZXcgQXJyYXkoIitjLmpvaW4oIioiKSsiKSIpLGwucHVzaCgiZHB0ciIsInNwdHIiLCJhIiwiYiIpfWVsc2UgbC5wdXNoKCJzY3JhdGNoIik7ZnVuY3Rpb24gZih0KXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5nZXQoIix0LCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXSJdLmpvaW4oIiIpfWZ1bmN0aW9uIGgodCxyKXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5zZXQoIix0LCIsIixyLCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXT0iLHJdLmpvaW4oIiIpfWlmKHIucHVzaChbImZ1bmN0aW9uICIsbiwiKCIsaS5qb2luKCIsIiksIil7dmFyICIsbC5qb2luKCIsIildLmpvaW4oIiIpLCJmb3IoaT1sZWZ0KzE7aTw9cmlnaHQ7KytpKXsiLCJqPWk7cHRyKz1zMCIsImNwdHI9cHRyIiksdC5sZW5ndGg+MSl7Zm9yKHIucHVzaCgiZHB0cj0wO3NwdHI9cHRyIiksdT10Lmxlbmd0aC0xO3U+PTA7LS11KTAhPT0ocD10W3VdKSYmci5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKTtmb3Ioci5wdXNoKCJzY3JhdGNoW2RwdHIrK109IixmKCJzcHRyIikpLHU9MDt1PHQubGVuZ3RoOysrdSkwIT09KHA9dFt1XSkmJnIucHVzaCgic3B0cis9ZCIrcCwifSIpO2ZvcihyLnB1c2goIl9fZzp3aGlsZShqLS1ceDNlbGVmdCl7IiwiZHB0cj0wIiwic3B0cj1jcHRyLXMwIiksdT0xO3U8dC5sZW5ndGg7Kyt1KTE9PT11JiZyLnB1c2goIl9fbDoiKSxyLnB1c2goWyJmb3IoaSIsdSwiPTA7aSIsdSwiPG4iLHUsIjsrK2kiLHUsIil7Il0uam9pbigiIikpO2ZvcihyLnB1c2goWyJhPSIsZigic3B0ciIpLCJcbmI9c2NyYXRjaFtkcHRyXVxuaWYoYTxiKXticmVhayBfX2d9XG5pZihhPmIpe2JyZWFrIF9fbH0iXS5qb2luKCIiKSksdT10Lmxlbmd0aC0xO3U+PTE7LS11KXIucHVzaCgic3B0cis9ZSIrdSwiZHB0cis9ZiIrdSwifSIpO2ZvcihyLnB1c2goImRwdHI9Y3B0cjtzcHRyPWNwdHItczAiKSx1PXQubGVuZ3RoLTE7dT49MDstLXUpMCE9PShwPXRbdV0pJiZyLnB1c2goWyJmb3IoaSIscCwiPTA7aSIscCwiPG4iLHAsIjsrK2kiLHAsIil7Il0uam9pbigiIikpO2ZvcihyLnB1c2goaCgiZHB0ciIsZigic3B0ciIpKSksdT0wO3U8dC5sZW5ndGg7Kyt1KTAhPT0ocD10W3VdKSYmci5wdXNoKFsiZHB0cis9ZCIscCwiO3NwdHIrPWQiLHBdLmpvaW4oIiIpLCJ9Iik7Zm9yKHIucHVzaCgiY3B0ci09czBcbn0iKSxyLnB1c2goImRwdHI9Y3B0cjtzcHRyPTAiKSx1PXQubGVuZ3RoLTE7dT49MDstLXUpMCE9PShwPXRbdV0pJiZyLnB1c2goWyJmb3IoaSIscCwiPTA7aSIscCwiPG4iLHAsIjsrK2kiLHAsIil7Il0uam9pbigiIikpO2ZvcihyLnB1c2goaCgiZHB0ciIsInNjcmF0Y2hbc3B0cisrXSIpKSx1PTA7dTx0Lmxlbmd0aDsrK3Upe3ZhciBwOzAhPT0ocD10W3VdKSYmci5wdXNoKCJkcHRyKz1kIitwLCJ9Iil9fWVsc2Ugci5wdXNoKCJzY3JhdGNoPSIrZigicHRyIiksIndoaWxlKChqLS1ceDNlbGVmdCkmJigiK2YoImNwdHItczAiKSsiPnNjcmF0Y2gpKXsiLGgoImNwdHIiLGYoImNwdHItczAiKSksImNwdHItPXMwIiwifSIsaCgiY3B0ciIsInNjcmF0Y2giKSk7cmV0dXJuIHIucHVzaCgifSIpLHQubGVuZ3RoPjEmJnMmJnIucHVzaCgiZnJlZShzY3JhdGNoKSIpLHIucHVzaCgifSByZXR1cm4gIituKSxzP25ldyBGdW5jdGlvbigibWFsbG9jIiwiZnJlZSIsci5qb2luKCJcbiIpKShzWzBdLHNbMV0pOm5ldyBGdW5jdGlvbihyLmpvaW4oIlxuIikpKCl9KHQsZSkseT1mdW5jdGlvbih0LGUscil7dmFyIG49WyIndXNlIHN0cmljdCciXSxzPVsibmRhcnJheVF1aWNrU29ydCIsdC5qb2luKCJkIiksZV0uam9pbigiIiksbD1bImxlZnQiLCJyaWdodCIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQobyh0Lmxlbmd0aCkpLGM9YShlKSx1PTA7bi5wdXNoKFsiZnVuY3Rpb24gIixzLCIoIixsLmpvaW4oIiwiKSwiKXsiXS5qb2luKCIiKSk7dmFyIGY9WyJzaXh0aD0oKHJpZ2h0LWxlZnQrMSkvNil8MCIsImluZGV4MT1sZWZ0K3NpeHRoIiwiaW5kZXg1PXJpZ2h0LXNpeHRoIiwiaW5kZXgzPShsZWZ0K3JpZ2h0KT4+MSIsImluZGV4Mj1pbmRleDMtc2l4dGgiLCJpbmRleDQ9aW5kZXgzK3NpeHRoIiwiZWwxPWluZGV4MSIsImVsMj1pbmRleDIiLCJlbDM9aW5kZXgzIiwiZWw0PWluZGV4NCIsImVsNT1pbmRleDUiLCJsZXNzPWxlZnQrMSIsImdyZWF0PXJpZ2h0LTEiLCJwaXZvdHNfYXJlX2VxdWFsPXRydWUiLCJ0bXAiLCJ0bXAwIiwieCIsInkiLCJ6IiwiayIsInB0cjAiLCJwdHIxIiwicHRyMiIsImNvbXBfcGl2b3QxPTAiLCJjb21wX3Bpdm90Mj0wIiwiY29tcD0wIl07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBoPVtdLHA9MTtwPHQubGVuZ3RoOysrcCloLnB1c2goIm4iK3ApLGYucHVzaCgiaSIrcCk7Zm9yKHA9MDtwPDg7KytwKWYucHVzaCgiYl9wdHIiK3ApO2YucHVzaCgicHRyMyIsInB0cjQiLCJwdHI1IiwicHRyNiIsInB0cjciLCJwaXZvdF9wdHIiLCJwdHJfc2hpZnQiLCJlbGVtZW50U2l6ZT0iK2guam9pbigiKiIpKSxjP2YucHVzaCgicGl2b3QxPW1hbGxvYyhlbGVtZW50U2l6ZSkiLCJwaXZvdDI9bWFsbG9jKGVsZW1lbnRTaXplKSIpOmYucHVzaCgicGl2b3QxPW5ldyBBcnJheShlbGVtZW50U2l6ZSkscGl2b3QyPW5ldyBBcnJheShlbGVtZW50U2l6ZSkiKX1lbHNlIGYucHVzaCgicGl2b3QxIiwicGl2b3QyIik7ZnVuY3Rpb24gZCh0KXtyZXR1cm5bIihvZmZzZXQrIix0LCIqczApIl0uam9pbigiIil9ZnVuY3Rpb24gZyh0KXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5nZXQoIix0LCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXSJdLmpvaW4oIiIpfWZ1bmN0aW9uIHYodCxyKXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5zZXQoIix0LCIsIixyLCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXT0iLHJdLmpvaW4oIiIpfWZ1bmN0aW9uIG0oZSxyLGkpe2lmKDE9PT1lLmxlbmd0aCluLnB1c2goInB0cjA9IitkKGVbMF0pKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKW4ucHVzaChbImJfcHRyIixhLCI9czAqIixlW2FdXS5qb2luKCIiKSk7Zm9yKHImJm4ucHVzaCgicGl2b3RfcHRyPTAiKSxuLnB1c2goInB0cl9zaGlmdD1vZmZzZXQiKSxhPXQubGVuZ3RoLTE7YT49MDstLWEpMCE9PShvPXRbYV0pJiZuLnB1c2goWyJmb3IoaSIsbywiPTA7aSIsbywiPG4iLG8sIjsrK2kiLG8sIil7Il0uam9pbigiIikpO2lmKGUubGVuZ3RoPjEpZm9yKGE9MDthPGUubGVuZ3RoOysrYSluLnB1c2goWyJwdHIiLGEsIj1iX3B0ciIsYSwiK3B0cl9zaGlmdCJdLmpvaW4oIiIpKTtmb3Iobi5wdXNoKGkpLHImJm4ucHVzaCgiKytwaXZvdF9wdHIiKSxhPTA7YTx0Lmxlbmd0aDsrK2Epe3ZhciBvOzAhPT0obz10W2FdKSYmKGUubGVuZ3RoPjE/bi5wdXNoKCJwdHJfc2hpZnQrPWQiK28pOm4ucHVzaCgicHRyMCs9ZCIrbyksbi5wdXNoKCJ9IikpfX1mdW5jdGlvbiB5KGUscixpLGEpe2lmKDE9PT1yLmxlbmd0aCluLnB1c2goInB0cjA9IitkKHJbMF0pKTtlbHNle2Zvcih2YXIgbz0wO288ci5sZW5ndGg7KytvKW4ucHVzaChbImJfcHRyIixvLCI9czAqIixyW29dXS5qb2luKCIiKSk7bi5wdXNoKCJwdHJfc2hpZnQ9b2Zmc2V0Iil9Zm9yKGkmJm4ucHVzaCgicGl2b3RfcHRyPTAiKSxlJiZuLnB1c2goZSsiOiIpLG89MTtvPHQubGVuZ3RoOysrbyluLnB1c2goWyJmb3IoaSIsbywiPTA7aSIsbywiPG4iLG8sIjsrK2kiLG8sIil7Il0uam9pbigiIikpO2lmKHIubGVuZ3RoPjEpZm9yKG89MDtvPHIubGVuZ3RoOysrbyluLnB1c2goWyJwdHIiLG8sIj1iX3B0ciIsbywiK3B0cl9zaGlmdCJdLmpvaW4oIiIpKTtmb3Iobi5wdXNoKGEpLG89dC5sZW5ndGgtMTtvPj0xOy0tbylpJiZuLnB1c2goInBpdm90X3B0cis9ZiIrbyksci5sZW5ndGg+MT9uLnB1c2goInB0cl9zaGlmdCs9ZSIrbyk6bi5wdXNoKCJwdHIwKz1lIitvKSxuLnB1c2goIn0iKX1mdW5jdGlvbiB4KCl7dC5sZW5ndGg+MSYmYyYmbi5wdXNoKCJmcmVlKHBpdm90MSkiLCJmcmVlKHBpdm90MikiKX1mdW5jdGlvbiBiKGUscil7dmFyIGk9ImVsIitlLGE9ImVsIityO2lmKHQubGVuZ3RoPjEpe3ZhciBvPSJfX2wiKyArK3U7eShvLFtpLGFdLCExLFsiY29tcD0iLGcoInB0cjAiKSwiLSIsZygicHRyMSIpLCJcbiIsImlmKGNvbXA+MCl7dG1wMD0iLGksIjsiLGksIj0iLGEsIjsiLGEsIj10bXAwO2JyZWFrICIsbywifVxuIiwiaWYoY29tcDwwKXticmVhayAiLG8sIn0iXS5qb2luKCIiKSl9ZWxzZSBuLnB1c2goWyJpZigiLGcoZChpKSksIj4iLGcoZChhKSksIil7dG1wMD0iLGksIjsiLGksIj0iLGEsIjsiLGEsIj10bXAwfSJdLmpvaW4oIiIpKX1mdW5jdGlvbiBfKGUscil7dC5sZW5ndGg+MT9tKFtlLHJdLCExLHYoInB0cjAiLGcoInB0cjEiKSkpOm4ucHVzaCh2KGQoZSksZyhkKHIpKSkpfWZ1bmN0aW9uIHcoZSxyLGkpe2lmKHQubGVuZ3RoPjEpe3ZhciBhPSJfX2wiKyArK3U7eShhLFtyXSwhMCxbZSwiPSIsZygicHRyMCIpLCItcGl2b3QiLGksIltwaXZvdF9wdHJdXG4iLCJpZigiLGUsIiE9PTApe2JyZWFrICIsYSwifSJdLmpvaW4oIiIpKX1lbHNlIG4ucHVzaChbZSwiPSIsZyhkKHIpKSwiLXBpdm90IixpXS5qb2luKCIiKSl9ZnVuY3Rpb24gayhlLHIpe3QubGVuZ3RoPjE/bShbZSxyXSwhMSxbInRtcD0iLGcoInB0cjAiKSwiXG4iLHYoInB0cjAiLGcoInB0cjEiKSksIlxuIix2KCJwdHIxIiwidG1wIildLmpvaW4oIiIpKTpuLnB1c2goWyJwdHIwPSIsZChlKSwiXG4iLCJwdHIxPSIsZChyKSwiXG4iLCJ0bXA9IixnKCJwdHIwIiksIlxuIix2KCJwdHIwIixnKCJwdHIxIikpLCJcbiIsdigicHRyMSIsInRtcCIpXS5qb2luKCIiKSl9ZnVuY3Rpb24gVChlLHIsaSl7dC5sZW5ndGg+MT8obShbZSxyLGldLCExLFsidG1wPSIsZygicHRyMCIpLCJcbiIsdigicHRyMCIsZygicHRyMSIpKSwiXG4iLHYoInB0cjEiLGcoInB0cjIiKSksIlxuIix2KCJwdHIyIiwidG1wIildLmpvaW4oIiIpKSxuLnB1c2goIisrIityLCItLSIraSkpOm4ucHVzaChbInB0cjA9IixkKGUpLCJcbiIsInB0cjE9IixkKHIpLCJcbiIsInB0cjI9IixkKGkpLCJcbiIsIisrIixyLCJcbiIsIi0tIixpLCJcbiIsInRtcD0iLGcoInB0cjAiKSwiXG4iLHYoInB0cjAiLGcoInB0cjEiKSksIlxuIix2KCJwdHIxIixnKCJwdHIyIikpLCJcbiIsdigicHRyMiIsInRtcCIpXS5qb2luKCIiKSl9ZnVuY3Rpb24gQSh0LGUpe2sodCxlKSxuLnB1c2goIi0tIitlKX1mdW5jdGlvbiBNKGUscixpKXt0Lmxlbmd0aD4xP20oW2Uscl0sITAsW3YoInB0cjAiLGcoInB0cjEiKSksIlxuIix2KCJwdHIxIixbInBpdm90IixpLCJbcGl2b3RfcHRyXSJdLmpvaW4oIiIpKV0uam9pbigiIikpOm4ucHVzaCh2KGQoZSksZyhkKHIpKSksdihkKHIpLCJwaXZvdCIraSkpfWZ1bmN0aW9uIFMoZSxyKXtuLnB1c2goWyJpZigoIixyLCItIixlLCIpPD0iLGksIil7XG4iLCJpbnNlcnRpb25Tb3J0KCIsZSwiLCIsciwiLGRhdGEsb2Zmc2V0LCIsbyh0Lmxlbmd0aCkuam9pbigiLCIpLCIpXG4iLCJ9ZWxzZXtcbiIscywiKCIsZSwiLCIsciwiLGRhdGEsb2Zmc2V0LCIsbyh0Lmxlbmd0aCkuam9pbigiLCIpLCIpXG4iLCJ9Il0uam9pbigiIikpfWZ1bmN0aW9uIEUoZSxyLGkpe3QubGVuZ3RoPjE/KG4ucHVzaChbIl9fbCIsKyt1LCI6d2hpbGUodHJ1ZSl7Il0uam9pbigiIikpLG0oW2VdLCEwLFsiaWYoIixnKCJwdHIwIiksIiE9PXBpdm90IixyLCJbcGl2b3RfcHRyXSl7YnJlYWsgX19sIix1LCJ9Il0uam9pbigiIikpLG4ucHVzaChpLCJ9IikpOm4ucHVzaChbIndoaWxlKCIsZyhkKGUpKSwiPT09cGl2b3QiLHIsIil7IixpLCJ9Il0uam9pbigiIikpfXJldHVybiBuLnB1c2goInZhciAiK2Yuam9pbigiLCIpKSxiKDEsMiksYig0LDUpLGIoMSwzKSxiKDIsMyksYigxLDQpLGIoMyw0KSxiKDIsNSksYigyLDMpLGIoNCw1KSx0Lmxlbmd0aD4xP20oWyJlbDEiLCJlbDIiLCJlbDMiLCJlbDQiLCJlbDUiLCJpbmRleDEiLCJpbmRleDMiLCJpbmRleDUiXSwhMCxbInBpdm90MVtwaXZvdF9wdHJdPSIsZygicHRyMSIpLCJcbiIsInBpdm90MltwaXZvdF9wdHJdPSIsZygicHRyMyIpLCJcbiIsInBpdm90c19hcmVfZXF1YWw9cGl2b3RzX2FyZV9lcXVhbCYmKHBpdm90MVtwaXZvdF9wdHJdPT09cGl2b3QyW3Bpdm90X3B0cl0pXG4iLCJ4PSIsZygicHRyMCIpLCJcbiIsInk9IixnKCJwdHIyIiksIlxuIiwiej0iLGcoInB0cjQiKSwiXG4iLHYoInB0cjUiLCJ4IiksIlxuIix2KCJwdHI2IiwieSIpLCJcbiIsdigicHRyNyIsInoiKV0uam9pbigiIikpOm4ucHVzaChbInBpdm90MT0iLGcoZCgiZWwyIikpLCJcbiIsInBpdm90Mj0iLGcoZCgiZWw0IikpLCJcbiIsInBpdm90c19hcmVfZXF1YWw9cGl2b3QxPT09cGl2b3QyXG4iLCJ4PSIsZyhkKCJlbDEiKSksIlxuIiwieT0iLGcoZCgiZWwzIikpLCJcbiIsIno9IixnKGQoImVsNSIpKSwiXG4iLHYoZCgiaW5kZXgxIiksIngiKSwiXG4iLHYoZCgiaW5kZXgzIiksInkiKSwiXG4iLHYoZCgiaW5kZXg1IiksInoiKV0uam9pbigiIikpLF8oImluZGV4MiIsImxlZnQiKSxfKCJpbmRleDQiLCJyaWdodCIpLG4ucHVzaCgiaWYocGl2b3RzX2FyZV9lcXVhbCl7Iiksbi5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IiksdygiY29tcCIsImsiLDEpLG4ucHVzaCgiaWYoY29tcD09PTApe2NvbnRpbnVlfSIpLG4ucHVzaCgiaWYoY29tcDwwKXsiKSxuLnB1c2goImlmKGshPT1sZXNzKXsiKSxrKCJrIiwibGVzcyIpLG4ucHVzaCgifSIpLG4ucHVzaCgiKytsZXNzIiksbi5wdXNoKCJ9ZWxzZXsiKSxuLnB1c2goIndoaWxlKHRydWUpeyIpLHcoImNvbXAiLCJncmVhdCIsMSksbi5wdXNoKCJpZihjb21wPjApeyIpLG4ucHVzaCgiZ3JlYXQtLSIpLG4ucHVzaCgifWVsc2UgaWYoY29tcDwwKXsiKSxUKCJrIiwibGVzcyIsImdyZWF0Iiksbi5wdXNoKCJicmVhayIpLG4ucHVzaCgifWVsc2V7IiksQSgiayIsImdyZWF0Iiksbi5wdXNoKCJicmVhayIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifWVsc2V7Iiksbi5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IiksdygiY29tcF9waXZvdDEiLCJrIiwxKSxuLnB1c2goImlmKGNvbXBfcGl2b3QxPDApeyIpLG4ucHVzaCgiaWYoayE9PWxlc3MpeyIpLGsoImsiLCJsZXNzIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCIrK2xlc3MiKSxuLnB1c2goIn1lbHNleyIpLHcoImNvbXBfcGl2b3QyIiwiayIsMiksbi5wdXNoKCJpZihjb21wX3Bpdm90Mj4wKXsiKSxuLnB1c2goIndoaWxlKHRydWUpeyIpLHcoImNvbXAiLCJncmVhdCIsMiksbi5wdXNoKCJpZihjb21wPjApeyIpLG4ucHVzaCgiaWYoLS1ncmVhdDxrKXticmVha30iKSxuLnB1c2goImNvbnRpbnVlIiksbi5wdXNoKCJ9ZWxzZXsiKSx3KCJjb21wIiwiZ3JlYXQiLDEpLG4ucHVzaCgiaWYoY29tcDwwKXsiKSxUKCJrIiwibGVzcyIsImdyZWF0Iiksbi5wdXNoKCJ9ZWxzZXsiKSxBKCJrIiwiZ3JlYXQiKSxuLnB1c2goIn0iKSxuLnB1c2goImJyZWFrIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9IiksTSgibGVmdCIsIihsZXNzLTEpIiwxKSxNKCJyaWdodCIsIihncmVhdCsxKSIsMiksUygibGVmdCIsIihsZXNzLTIpIiksUygiKGdyZWF0KzIpIiwicmlnaHQiKSxuLnB1c2goImlmKHBpdm90c19hcmVfZXF1YWwpeyIpLHgoKSxuLnB1c2goInJldHVybiIpLG4ucHVzaCgifSIpLG4ucHVzaCgiaWYobGVzczxpbmRleDEmJmdyZWF0PmluZGV4NSl7IiksRSgibGVzcyIsMSwiKytsZXNzIiksRSgiZ3JlYXQiLDIsIi0tZ3JlYXQiKSxuLnB1c2goImZvcihrPWxlc3M7azw9Z3JlYXQ7KytrKXsiKSx3KCJjb21wX3Bpdm90MSIsImsiLDEpLG4ucHVzaCgiaWYoY29tcF9waXZvdDE9PT0wKXsiKSxuLnB1c2goImlmKGshPT1sZXNzKXsiKSxrKCJrIiwibGVzcyIpLG4ucHVzaCgifSIpLG4ucHVzaCgiKytsZXNzIiksbi5wdXNoKCJ9ZWxzZXsiKSx3KCJjb21wX3Bpdm90MiIsImsiLDIpLG4ucHVzaCgiaWYoY29tcF9waXZvdDI9PT0wKXsiKSxuLnB1c2goIndoaWxlKHRydWUpeyIpLHcoImNvbXAiLCJncmVhdCIsMiksbi5wdXNoKCJpZihjb21wPT09MCl7Iiksbi5wdXNoKCJpZigtLWdyZWF0PGspe2JyZWFrfSIpLG4ucHVzaCgiY29udGludWUiKSxuLnB1c2goIn1lbHNleyIpLHcoImNvbXAiLCJncmVhdCIsMSksbi5wdXNoKCJpZihjb21wPDApeyIpLFQoImsiLCJsZXNzIiwiZ3JlYXQiKSxuLnB1c2goIn1lbHNleyIpLEEoImsiLCJncmVhdCIpLG4ucHVzaCgifSIpLG4ucHVzaCgiYnJlYWsiKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSx4KCksUygibGVzcyIsImdyZWF0Iiksbi5wdXNoKCJ9cmV0dXJuICIrcyksdC5sZW5ndGg+MSYmYz9uZXcgRnVuY3Rpb24oImluc2VydGlvblNvcnQiLCJtYWxsb2MiLCJmcmVlIixuLmpvaW4oIlxuIikpKHIsY1swXSxjWzFdKTpuZXcgRnVuY3Rpb24oImluc2VydGlvblNvcnQiLG4uam9pbigiXG4iKSkocil9KHQsZSxtKTtyZXR1cm4gdihtLHkpfX0seyJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDQ0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9jb21waWxlX3NvcnQuanMiKSxpPXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yZGVyLHI9dC5kdHlwZSxhPVtlLHJdLmpvaW4oIjoiKSxvPWlbYV07cmV0dXJuIG98fChpW2FdPW89bihlLHIpKSxvKHQpLHR9fSx7Ii4vbGliL2NvbXBpbGVfc29ydC5qcyI6NDM5fV0sNDQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIiksaT10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciIsInNjYWxhciIsInNjYWxhciJdLHByZTp7Ym9keToie3RoaXNfd2FycGVkPW5ldyBBcnJheShfaW5saW5lXzNfYXJnNF8pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfM19hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8zX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzNfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfM19hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8zX2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV80X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfNF9hcmcwXyksX2lubGluZV80X2FyZzFfPV9pbmxpbmVfNF9hcmczXy5hcHBseSh2b2lkIDAsdGhpc193YXJwZWQpfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfNF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80X2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzRfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNF9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80X2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwTkQiLGJsb2NrU2l6ZTo2NH0pLGE9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1bMF19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzdfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV83X2FyZzBfKSxfaW5saW5lXzdfYXJnMV89X2lubGluZV83X2FyZzNfKF9pbmxpbmVfN19hcmc0Xyx0aGlzX3dhcnBlZFswXSl9IixhcmdzOlt7bmFtZToiX2lubGluZV83X2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzdfYXJnMV8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfN19hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV83X2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzdfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6IndhcnAxRCIsYmxvY2tTaXplOjY0fSksbz10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciIsInNjYWxhciIsInNjYWxhciJdLHByZTp7Ym9keToie3RoaXNfd2FycGVkPVswLDBdfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV8xMF9hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzEwX2FyZzBfKSxfaW5saW5lXzEwX2FyZzFfPV9pbmxpbmVfMTBfYXJnM18oX2lubGluZV8xMF9hcmc0Xyx0aGlzX3dhcnBlZFswXSx0aGlzX3dhcnBlZFsxXSl9IixhcmdzOlt7bmFtZToiX2lubGluZV8xMF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xMF9hcmcxXyIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xMF9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xMF9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xMF9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToid2FycDJEIixibG9ja1NpemU6NjR9KSxzPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2NhbGFyIiwic2NhbGFyIiwic2NhbGFyIl0scHJlOntib2R5OiJ7dGhpc193YXJwZWQ9WzAsMCwwXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie19pbmxpbmVfMTNfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV8xM19hcmcwXyksX2lubGluZV8xM19hcmcxXz1faW5saW5lXzEzX2FyZzNfKF9pbmxpbmVfMTNfYXJnNF8sdGhpc193YXJwZWRbMF0sdGhpc193YXJwZWRbMV0sdGhpc193YXJwZWRbMl0pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMTNfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTNfYXJnMV8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTNfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTNfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTNfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6IndhcnAzRCIsYmxvY2tTaXplOjY0fSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goZS5zaGFwZS5sZW5ndGgpe2Nhc2UgMTphKHQscixuLmQxLGUpO2JyZWFrO2Nhc2UgMjpvKHQscixuLmQyLGUpO2JyZWFrO2Nhc2UgMzpzKHQscixuLmQzLGUpO2JyZWFrO2RlZmF1bHQ6aSh0LHIsbi5iaW5kKHZvaWQgMCxlKSxlLnNoYXBlLmxlbmd0aCl9cmV0dXJuIHR9fSx7ImN3aXNlL2xpYi93cmFwcGVyIjoxMzksIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIjo0MzV9XSw0NDI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJpb3RhLWFycmF5IiksaT10KCJpcy1idWZmZXIiKSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIHMoKXt2YXIgdCxlPXRoaXMuc3RyaWRlLHI9bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IodD0wO3Q8ci5sZW5ndGg7Kyt0KXJbdF09W01hdGguYWJzKGVbdF0pLHRdO3Iuc29ydChvKTt2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpO2Zvcih0PTA7dDxuLmxlbmd0aDsrK3Qpblt0XT1yW3RdWzFdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1bIlZpZXciLGUsImQiLHRdLmpvaW4oIiIpO2U8MCYmKHI9IlZpZXdfTmlsIit0KTt2YXIgaT0iZ2VuZXJpYyI9PT10O2lmKC0xPT09ZSl7dmFyIGE9ImZ1bmN0aW9uICIrcisiKGEpe3RoaXMuZGF0YT1hO307dmFyIHByb3RvPSIrcisiLnByb3RvdHlwZTtwcm90by5kdHlwZT0nIit0KyInO3Byb3RvLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIC0xfTtwcm90by5zaXplPTA7cHJvdG8uZGltZW5zaW9uPS0xO3Byb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtwcm90by5sbz1wcm90by5oaT1wcm90by50cmFuc3Bvc2U9cHJvdG8uc3RlcD1mdW5jdGlvbigpe3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhKTt9O3Byb3RvLmdldD1wcm90by5zZXQ9ZnVuY3Rpb24oKXt9O3Byb3RvLnBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihhKXtyZXR1cm4gbmV3ICIrcisiKGEpO30iO3JldHVybiBuZXcgRnVuY3Rpb24oYSkoKX1pZigwPT09ZSl7YT0iZnVuY3Rpb24gIityKyIoYSxkKSB7dGhpcy5kYXRhID0gYTt0aGlzLm9mZnNldCA9IGR9O3ZhciBwcm90bz0iK3IrIi5wcm90b3R5cGU7cHJvdG8uZHR5cGU9JyIrdCsiJztwcm90by5pbmRleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldH07cHJvdG8uZGltZW5zaW9uPTA7cHJvdG8uc2l6ZT0xO3Byb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtwcm90by5sbz1wcm90by5oaT1wcm90by50cmFuc3Bvc2U9cHJvdG8uc3RlcD1mdW5jdGlvbiAiK3IrIl9jb3B5KCkge3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhLHRoaXMub2Zmc2V0KX07cHJvdG8ucGljaz1mdW5jdGlvbiAiK3IrIl9waWNrKCl7cmV0dXJuIFRyaXZpYWxBcnJheSh0aGlzLmRhdGEpO307cHJvdG8udmFsdWVPZj1wcm90by5nZXQ9ZnVuY3Rpb24gIityKyJfZ2V0KCl7cmV0dXJuICIrKGk/InRoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQpIjoidGhpcy5kYXRhW3RoaXMub2Zmc2V0XSIpKyJ9O3Byb3RvLnNldD1mdW5jdGlvbiAiK3IrIl9zZXQodil7cmV0dXJuICIrKGk/InRoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQsdikiOiJ0aGlzLmRhdGFbdGhpcy5vZmZzZXRdPXYiKSsifTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIrcisiKGEsYixjLGQpe3JldHVybiBuZXcgIityKyIoYSxkKX0iO3JldHVybiBuZXcgRnVuY3Rpb24oIlRyaXZpYWxBcnJheSIsYSkoY1t0XVswXSl9YT1bIid1c2Ugc3RyaWN0JyJdO3ZhciBvPW4oZSksbD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iaSIrdH0pLHU9InRoaXMub2Zmc2V0KyIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInRoaXMuc3RyaWRlWyIrdCsiXSppIit0fSkuam9pbigiKyIpLGY9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImIiK3R9KS5qb2luKCIsIiksaD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYyIrdH0pLmpvaW4oIiwiKTthLnB1c2goImZ1bmN0aW9uICIrcisiKGEsIitmKyIsIitoKyIsZCl7dGhpcy5kYXRhPWEiLCJ0aGlzLnNoYXBlPVsiK2YrIl0iLCJ0aGlzLnN0cmlkZT1bIitoKyJdIiwidGhpcy5vZmZzZXQ9ZHwwfSIsInZhciBwcm90bz0iK3IrIi5wcm90b3R5cGUiLCJwcm90by5kdHlwZT0nIit0KyInIiwicHJvdG8uZGltZW5zaW9uPSIrZSksYS5wdXNoKCJPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sJ3NpemUnLHtnZXQ6ZnVuY3Rpb24gIityKyJfc2l6ZSgpe3JldHVybiAiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ0aGlzLnNoYXBlWyIrdCsiXSJ9KS5qb2luKCIqIiksIn19KSIpLDE9PT1lP2EucHVzaCgicHJvdG8ub3JkZXI9WzBdIik6KGEucHVzaCgiT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCdvcmRlcicse2dldDoiKSxlPDQ/KGEucHVzaCgiZnVuY3Rpb24gIityKyJfb3JkZXIoKXsiKSwyPT09ZT9hLnB1c2goInJldHVybiAoTWF0aC5hYnModGhpcy5zdHJpZGVbMF0pPk1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSk/WzEsMF06WzAsMV19fSkiKTozPT09ZSYmYS5wdXNoKCJ2YXIgczA9TWF0aC5hYnModGhpcy5zdHJpZGVbMF0pLHMxPU1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSxzMj1NYXRoLmFicyh0aGlzLnN0cmlkZVsyXSk7aWYoczA+czEpe2lmKHMxPnMyKXtyZXR1cm4gWzIsMSwwXTt9ZWxzZSBpZihzMD5zMil7cmV0dXJuIFsxLDIsMF07fWVsc2V7cmV0dXJuIFsxLDAsMl07fX1lbHNlIGlmKHMwPnMyKXtyZXR1cm4gWzIsMCwxXTt9ZWxzZSBpZihzMj5zMSl7cmV0dXJuIFswLDEsMl07fWVsc2V7cmV0dXJuIFswLDIsMV07fX19KSIpKTphLnB1c2goIk9SREVSfSkiKSksYS5wdXNoKCJwcm90by5zZXQ9ZnVuY3Rpb24gIityKyJfc2V0KCIrbC5qb2luKCIsIikrIix2KXsiKSxpP2EucHVzaCgicmV0dXJuIHRoaXMuZGF0YS5zZXQoIit1KyIsdil9Iik6YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhWyIrdSsiXT12fSIpLGEucHVzaCgicHJvdG8uZ2V0PWZ1bmN0aW9uICIrcisiX2dldCgiK2wuam9pbigiLCIpKyIpeyIpLGk/YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhLmdldCgiK3UrIil9Iik6YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhWyIrdSsiXX0iKSxhLnB1c2goInByb3RvLmluZGV4PWZ1bmN0aW9uICIrcisiX2luZGV4KCIsbC5qb2luKCksIil7cmV0dXJuICIrdSsifSIpLGEucHVzaCgicHJvdG8uaGk9ZnVuY3Rpb24gIityKyJfaGkoIitsLmpvaW4oIiwiKSsiKXtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblsiKHR5cGVvZiBpIix0LCIhPT0nbnVtYmVyJ3x8aSIsdCwiPDApP3RoaXMuc2hhcGVbIix0LCJdOmkiLHQsInwwIl0uam9pbigiIil9KS5qb2luKCIsIikrIiwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ0aGlzLnN0cmlkZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsdGhpcy5vZmZzZXQpfSIpO3ZhciBwPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0KyI9dGhpcy5zaGFwZVsiK3QrIl0ifSksZD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYyIrdCsiPXRoaXMuc3RyaWRlWyIrdCsiXSJ9KTthLnB1c2goInByb3RvLmxvPWZ1bmN0aW9uICIrcisiX2xvKCIrbC5qb2luKCIsIikrIil7dmFyIGI9dGhpcy5vZmZzZXQsZD0wLCIrcC5qb2luKCIsIikrIiwiK2Quam9pbigiLCIpKTtmb3IodmFyIGc9MDtnPGU7KytnKWEucHVzaCgiaWYodHlwZW9mIGkiK2crIj09PSdudW1iZXInJiZpIitnKyI+PTApe2Q9aSIrZysifDA7Yis9YyIrZysiKmQ7YSIrZysiLT1kfSIpO2EucHVzaCgicmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdH0pLmpvaW4oIiwiKSsiLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImMiK3R9KS5qb2luKCIsIikrIixiKX0iKSxhLnB1c2goInByb3RvLnN0ZXA9ZnVuY3Rpb24gIityKyJfc3RlcCgiK2wuam9pbigiLCIpKyIpe3ZhciAiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0KyI9dGhpcy5zaGFwZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdCsiPXRoaXMuc3RyaWRlWyIrdCsiXSJ9KS5qb2luKCIsIikrIixjPXRoaXMub2Zmc2V0LGQ9MCxjZWlsPU1hdGguY2VpbCIpO2ZvcihnPTA7ZzxlOysrZylhLnB1c2goImlmKHR5cGVvZiBpIitnKyI9PT0nbnVtYmVyJyl7ZD1pIitnKyJ8MDtpZihkPDApe2MrPWIiK2crIiooYSIrZysiLTEpO2EiK2crIj1jZWlsKC1hIitnKyIvZCl9ZWxzZXthIitnKyI9Y2VpbChhIitnKyIvZCl9YiIrZysiKj1kfSIpO2EucHVzaCgicmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdH0pLmpvaW4oIiwiKSsiLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImIiK3R9KS5qb2luKCIsIikrIixjKX0iKTt2YXIgdj1uZXcgQXJyYXkoZSksbT1uZXcgQXJyYXkoZSk7Zm9yKGc9MDtnPGU7KytnKXZbZ109ImFbaSIrZysiXSIsbVtnXT0iYltpIitnKyJdIjthLnB1c2goInByb3RvLnRyYW5zcG9zZT1mdW5jdGlvbiAiK3IrIl90cmFuc3Bvc2UoIitsKyIpeyIrbC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiPSgiK3QrIj09PXVuZGVmaW5lZD8iK2UrIjoiK3QrInwwKSJ9KS5qb2luKCI7IiksInZhciBhPXRoaXMuc2hhcGUsYj10aGlzLnN0cmlkZTtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSwiK3Yuam9pbigiLCIpKyIsIittLmpvaW4oIiwiKSsiLHRoaXMub2Zmc2V0KX0iKSxhLnB1c2goInByb3RvLnBpY2s9ZnVuY3Rpb24gIityKyJfcGljaygiK2wrIil7dmFyIGE9W10sYj1bXSxjPXRoaXMub2Zmc2V0Iik7Zm9yKGc9MDtnPGU7KytnKWEucHVzaCgiaWYodHlwZW9mIGkiK2crIj09PSdudW1iZXInJiZpIitnKyI+PTApe2M9KGMrdGhpcy5zdHJpZGVbIitnKyJdKmkiK2crIil8MH1lbHNle2EucHVzaCh0aGlzLnNoYXBlWyIrZysiXSk7Yi5wdXNoKHRoaXMuc3RyaWRlWyIrZysiXSl9Iik7cmV0dXJuIGEucHVzaCgidmFyIGN0b3I9Q1RPUl9MSVNUW2EubGVuZ3RoKzFdO3JldHVybiBjdG9yKHRoaXMuZGF0YSxhLGIsYyl9IiksYS5wdXNoKCJyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIrcisiKGRhdGEsc2hhcGUsc3RyaWRlLG9mZnNldCl7cmV0dXJuIG5ldyAiK3IrIihkYXRhLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInNoYXBlWyIrdCsiXSJ9KS5qb2luKCIsIikrIiwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpZGVbIit0KyJdIn0pLmpvaW4oIiwiKSsiLG9mZnNldCl9IiksbmV3IEZ1bmN0aW9uKCJDVE9SX0xJU1QiLCJPUkRFUiIsYS5qb2luKCJcbiIpKShjW3RdLHMpfXZhciBjPXtmbG9hdDMyOltdLGZsb2F0NjQ6W10saW50ODpbXSxpbnQxNjpbXSxpbnQzMjpbXSx1aW50ODpbXSx1aW50MTY6W10sdWludDMyOltdLGFycmF5OltdLHVpbnQ4X2NsYW1wZWQ6W10sYnVmZmVyOltdLGdlbmVyaWM6W119O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT10KXJldHVybigwLGMuYXJyYXlbMF0pKFtdKTsibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSksdm9pZCAwPT09ZSYmKGU9W3QubGVuZ3RoXSk7dmFyIG89ZS5sZW5ndGg7aWYodm9pZCAwPT09cil7cj1uZXcgQXJyYXkobyk7Zm9yKHZhciBzPW8tMSx1PTE7cz49MDstLXMpcltzXT11LHUqPWVbc119aWYodm9pZCAwPT09bilmb3Iobj0wLHM9MDtzPG87KytzKXJbc108MCYmKG4tPShlW3NdLTEpKnJbc10pO2Zvcih2YXIgZj1mdW5jdGlvbih0KXtpZihpKHQpKXJldHVybiJidWZmZXIiO2lmKGEpc3dpdGNoKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSl7Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOnJldHVybiJmbG9hdDY0IjtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6cmV0dXJuImZsb2F0MzIiO2Nhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpyZXR1cm4iaW50OCI7Y2FzZSJbb2JqZWN0IEludDE2QXJyYXldIjpyZXR1cm4iaW50MTYiO2Nhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6cmV0dXJuImludDMyIjtjYXNlIltvYmplY3QgVWludDhBcnJheV0iOnJldHVybiJ1aW50OCI7Y2FzZSJbb2JqZWN0IFVpbnQxNkFycmF5XSI6cmV0dXJuInVpbnQxNiI7Y2FzZSJbb2JqZWN0IFVpbnQzMkFycmF5XSI6cmV0dXJuInVpbnQzMiI7Y2FzZSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6cmV0dXJuInVpbnQ4X2NsYW1wZWQifXJldHVybiBBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6ImdlbmVyaWMifSh0KSxoPWNbZl07aC5sZW5ndGg8PW8rMTspaC5wdXNoKGwoZixoLmxlbmd0aC0xKSk7cmV0dXJuKDAsaFtvKzFdKSh0LGUscixuKX19LHsiaW90YS1hcnJheSI6NDA4LCJpcy1idWZmZXIiOjQxMH1dLDQ0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGk9TWF0aC5wb3coMiwtMTA3NCksYT0tMT4+PjA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47aWYodD09PWUpcmV0dXJuIHQ7aWYoMD09PXQpcmV0dXJuIGU8MD8taTppO3ZhciByPW4uaGkodCksbz1uLmxvKHQpO2U+dD09dD4wP289PT1hPyhyKz0xLG89MCk6bys9MTowPT09bz8obz1hLHItPTEpOm8tPTE7cmV0dXJuIG4ucGFjayhvLHIpfX0seyJkb3VibGUtYml0cyI6MTU4fV0sNDQ0OltmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5QSSxpPWMoMTIwKTtmdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVyblsiQyIsdCxlLHIsbixyLG5dfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3JldHVyblsiQyIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19ZnVuY3Rpb24gcyh0LGUscixhLG8sYyx1LGYsaCxwKXtpZihwKWs9cFswXSxUPXBbMV0sXz1wWzJdLHc9cFszXTtlbHNle3ZhciBkPWwodCxlLC1vKTt0PWQueCxlPWQueTt2YXIgZz0odC0oZj0oZD1sKGYsaCwtbykpLngpKS8yLHY9KGUtKGg9ZC55KSkvMixtPWcqZy8ocipyKSt2KnYvKGEqYSk7bT4xJiYocio9bT1NYXRoLnNxcnQobSksYSo9bSk7dmFyIHk9cipyLHg9YSphLGI9KGM9PXU/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKCh5KngteSp2KnYteCpnKmcpLyh5KnYqdit4KmcqZykpKTtiPT0xLzAmJihiPTEpO3ZhciBfPWIqcip2L2ErKHQrZikvMix3PWIqLWEqZy9yKyhlK2gpLzIsaz1NYXRoLmFzaW4oKChlLXcpL2EpLnRvRml4ZWQoOSkpLFQ9TWF0aC5hc2luKCgoaC13KS9hKS50b0ZpeGVkKDkpKTsoaz10PF8/bi1rOmspPDAmJihrPTIqbitrKSwoVD1mPF8/bi1UOlQpPDAmJihUPTIqbitUKSx1JiZrPlQmJihrLT0yKm4pLCF1JiZUPmsmJihULT0yKm4pfWlmKE1hdGguYWJzKFQtayk+aSl7dmFyIEE9VCxNPWYsUz1oO1Q9aytpKih1JiZUPms/MTotMSk7dmFyIEU9cyhmPV8rcipNYXRoLmNvcyhUKSxoPXcrYSpNYXRoLnNpbihUKSxyLGEsbywwLHUsTSxTLFtULEEsXyx3XSl9dmFyIEM9TWF0aC50YW4oKFQtaykvNCksTD00LzMqcipDLHo9NC8zKmEqQyxPPVsyKnQtKHQrTCpNYXRoLnNpbihrKSksMiplLShlLXoqTWF0aC5jb3MoaykpLGYrTCpNYXRoLnNpbihUKSxoLXoqTWF0aC5jb3MoVCksZixoXTtpZihwKXJldHVybiBPO0UmJihPPU8uY29uY2F0KEUpKTtmb3IodmFyIEk9MDtJPE8ubGVuZ3RoOyl7dmFyIEQ9bChPW0ldLE9bSSsxXSxvKTtPW0krK109RC54LE9bSSsrXT1ELnl9cmV0dXJuIE99ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJue3g6dCpNYXRoLmNvcyhyKS1lKk1hdGguc2luKHIpLHk6dCpNYXRoLnNpbihyKStlKk1hdGguY29zKHIpfX1mdW5jdGlvbiBjKHQpe3JldHVybiB0KihuLzE4MCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG49MCxpPTAsbD0wLHU9MCxmPW51bGwsaD1udWxsLHA9MCxkPTAsZz0wLHY9dC5sZW5ndGg7Zzx2O2crKyl7dmFyIG09dFtnXSx5PW1bMF07c3dpdGNoKHkpe2Nhc2UiTSI6bD1tWzFdLHU9bVsyXTticmVhaztjYXNlIkEiOihtPXMocCxkLG1bMV0sbVsyXSxjKG1bM10pLG1bNF0sbVs1XSxtWzZdLG1bN10pKS51bnNoaWZ0KCJDIiksbS5sZW5ndGg+NyYmKHIucHVzaChtLnNwbGljZSgwLDcpKSxtLnVuc2hpZnQoIkMiKSk7YnJlYWs7Y2FzZSJTIjp2YXIgeD1wLGI9ZDsiQyIhPWUmJiJTIiE9ZXx8KHgrPXgtbixiKz1iLWkpLG09WyJDIix4LGIsbVsxXSxtWzJdLG1bM10sbVs0XV07YnJlYWs7Y2FzZSJUIjoiUSI9PWV8fCJUIj09ZT8oZj0yKnAtZixoPTIqZC1oKTooZj1wLGg9ZCksbT1vKHAsZCxmLGgsbVsxXSxtWzJdKTticmVhaztjYXNlIlEiOmY9bVsxXSxoPW1bMl0sbT1vKHAsZCxtWzFdLG1bMl0sbVszXSxtWzRdKTticmVhaztjYXNlIkwiOm09YShwLGQsbVsxXSxtWzJdKTticmVhaztjYXNlIkgiOm09YShwLGQsbVsxXSxkKTticmVhaztjYXNlIlYiOm09YShwLGQscCxtWzFdKTticmVhaztjYXNlIloiOm09YShwLGQsbCx1KX1lPXkscD1tW20ubGVuZ3RoLTJdLGQ9bVttLmxlbmd0aC0xXSxtLmxlbmd0aD40PyhuPW1bbS5sZW5ndGgtNF0saT1tW20ubGVuZ3RoLTNdKToobj1wLGk9ZCksci5wdXNoKG0pfXJldHVybiByfX0se31dLDQ0NTpbZnVuY3Rpb24odCxlLHIpe3IudmVydGV4Tm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28paVtvXT1bMCwwLDBdO2ZvcihvPTA7bzx0Lmxlbmd0aDsrK28pZm9yKHZhciBzPXRbb10sbD0wLGM9c1tzLmxlbmd0aC0xXSx1PXNbMF0sZj0wO2Y8cy5sZW5ndGg7KytmKXtsPWMsYz11LHU9c1soZisxKSVzLmxlbmd0aF07Zm9yKHZhciBoPWVbbF0scD1lW2NdLGQ9ZVt1XSxnPW5ldyBBcnJheSgzKSx2PTAsbT1uZXcgQXJyYXkoMykseT0wLHg9MDt4PDM7Kyt4KWdbeF09aFt4XS1wW3hdLHYrPWdbeF0qZ1t4XSxtW3hdPWRbeF0tcFt4XSx5Kz1tW3hdKm1beF07aWYodip5PmEpe3ZhciBiPWlbY10sXz0xL01hdGguc3FydCh2KnkpO2Zvcih4PTA7eDwzOysreCl7dmFyIHc9KHgrMSklMyxrPSh4KzIpJTM7Ylt4XSs9XyoobVt3XSpnW2tdLW1ba10qZ1t3XSl9fX1mb3Iobz0wO288bjsrK28pe2I9aVtvXTt2YXIgVD0wO2Zvcih4PTA7eDwzOysreClUKz1iW3hdKmJbeF07aWYoVD5hKWZvcihfPTEvTWF0aC5zcXJ0KFQpLHg9MDt4PDM7Kyt4KWJbeF0qPV87ZWxzZSBmb3IoeD0wO3g8MzsrK3gpYlt4XT0wfXJldHVybiBpfSxyLmZhY2VOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yPzFlLTY6cixvPTA7bzxuOysrbyl7Zm9yKHZhciBzPXRbb10sbD1uZXcgQXJyYXkoMyksYz0wO2M8MzsrK2MpbFtjXT1lW3NbY11dO3ZhciB1PW5ldyBBcnJheSgzKSxmPW5ldyBBcnJheSgzKTtmb3IoYz0wO2M8MzsrK2MpdVtjXT1sWzFdW2NdLWxbMF1bY10sZltjXT1sWzJdW2NdLWxbMF1bY107dmFyIGg9bmV3IEFycmF5KDMpLHA9MDtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBkPShjKzEpJTMsZz0oYysyKSUzO2hbY109dVtkXSpmW2ddLXVbZ10qZltkXSxwKz1oW2NdKmhbY119cD1wPmE/MS9NYXRoLnNxcnQocCk6MDtmb3IoYz0wO2M8MzsrK2MpaFtjXSo9cDtpW29dPWh9cmV0dXJuIGl9fSx7fV0sNDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIHQ9bmV3IFN0cmluZygiYWJjIik7aWYodFs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpWzBdKXJldHVybiExO2Zvcih2YXIgZT17fSxyPTA7cjwxMDtyKyspZVsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZShyKV09cjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09dH0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LG4pKS5qb2luKCIiKX1jYXRjaCh0KXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixvLHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QodCl9KHQpLGw9MTtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXtmb3IodmFyIGMgaW4gcj1PYmplY3QoYXJndW1lbnRzW2xdKSlpLmNhbGwocixjKSYmKHNbY109cltjXSk7aWYobil7bz1uKHIpO2Zvcih2YXIgdT0wO3U8by5sZW5ndGg7dSsrKWEuY2FsbChyLG9bdV0pJiYoc1tvW3VdXT1yW29bdV1dKX19cmV0dXJuIHN9fSx7fV0sNDQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1lK2ErYztpZihmPjApe3ZhciBmPU1hdGguc3FydCh1KzEpO3RbMF09LjUqKG8tbCkvZix0WzFdPS41KihzLW4pL2YsdFsyXT0uNSooci1hKS9mLHRbM109LjUqZn1lbHNle3ZhciBoPU1hdGgubWF4KGUsYSxjKSxmPU1hdGguc3FydCgyKmgtdSsxKTtlPj1oPyh0WzBdPS41KmYsdFsxXT0uNSooaStyKS9mLHRbMl09LjUqKHMrbikvZix0WzNdPS41KihvLWwpL2YpOmE+PWg/KHRbMF09LjUqKHIraSkvZix0WzFdPS41KmYsdFsyXT0uNSoobCtvKS9mLHRbM109LjUqKHMtbikvZik6KHRbMF09LjUqKG4rcykvZix0WzFdPS41KihvK2wpL2YsdFsyXT0uNSpmLHRbM109LjUqKHItaSkvZil9cmV0dXJuIHR9fSx7fV0sNDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSx1KHI9W10uc2xpY2UuY2FsbChyLDAsNCkscik7dmFyIGk9bmV3IGYocixlLE1hdGgubG9nKG4pKTtpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLCgiZXllImluIHR8fCJ1cCJpbiB0KSYmaS5sb29rQXQoMCx0LmV5ZSx0LmNlbnRlcix0LnVwKTtyZXR1cm4gaX07dmFyIG49dCgiZmlsdGVyZWQtdmVjdG9yIiksaT10KCJnbC1tYXQ0L2xvb2tBdCIpLGE9dCgiZ2wtbWF0NC9mcm9tUXVhdCIpLG89dCgiZ2wtbWF0NC9pbnZlcnQiKSxzPXQoIi4vbGliL3F1YXRGcm9tRnJhbWUiKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1jKHIsbixpLGEpO28+MWUtNj8odFswXT1yL28sdFsxXT1uL28sdFsyXT1pL28sdFszXT1hL28pOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gZih0LGUscil7dGhpcy5yYWRpdXM9bihbcl0pLHRoaXMuY2VudGVyPW4oZSksdGhpcy5yb3RhdGlvbj1uKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIGg9Zi5wcm90b3R5cGU7aC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy5yb3RhdGlvbi5sYXN0VCgpKX0saC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy5yb3RhdGlvbi5jdXJ2ZSh0KTt2YXIgZT10aGlzLmNvbXB1dGVkUm90YXRpb247dShlLGUpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7YShyLGUpO3ZhciBuPXRoaXMuY29tcHV0ZWRDZW50ZXIsaT10aGlzLmNvbXB1dGVkRXllLG89dGhpcy5jb21wdXRlZFVwLHM9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7aVswXT1uWzBdK3MqclsyXSxpWzFdPW5bMV0rcypyWzZdLGlbMl09blsyXStzKnJbMTBdLG9bMF09clsxXSxvWzFdPXJbNV0sb1syXT1yWzldO2Zvcih2YXIgbD0wO2w8MzsrK2wpe2Zvcih2YXIgYz0wLGY9MDtmPDM7KytmKWMrPXJbbCs0KmZdKmlbZl07clsxMitsXT0tY319LGguZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9LGguaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5yb3RhdGlvbi5pZGxlKHQpfSxoLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMucm90YXRpb24uZmx1c2godCl9LGgucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZXx8MCxyPXJ8fDAsbj1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzFdLG89aVs1XSxzPWlbOV0sYz1sKGEsbyxzKTthLz1jLG8vPWMscy89Yzt2YXIgdT1pWzBdLGY9aVs0XSxoPWlbOF0scD11KmErZipvK2gqcyxkPWwodS09YSpwLGYtPW8qcCxoLT1zKnApO3UvPWQsZi89ZCxoLz1kO3ZhciBnPWlbMl0sdj1pWzZdLG09aVsxMF0seT1nKmErdipvK20qcyx4PWcqdSt2KmYrbSpoLGI9bChnLT15KmEreCp1LHYtPXkqbyt4KmYsbS09eSpzK3gqaCk7Zy89Yix2Lz1iLG0vPWI7dmFyIF89dSplK2Eqcix3PWYqZStvKnIsaz1oKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxfLHcsayk7dmFyIFQ9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7VD1NYXRoLm1heCgxZS00LFQrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coVCkpfSxoLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fDAscj1yfHwwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzBdLG89aVs0XSxzPWlbOF0sdT1pWzFdLGY9aVs1XSxoPWlbOV0scD1pWzJdLGQ9aVs2XSxnPWlbMTBdLHY9ZSphK3IqdSxtPWUqbytyKmYseT1lKnMrcipoLHg9LShkKnktZyptKSxiPS0oZyp2LXAqeSksXz0tKHAqbS1kKnYpLHc9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KGIsMiktTWF0aC5wb3coXywyKSkpLGs9Yyh4LGIsXyx3KTtrPjFlLTY/KHgvPWssYi89ayxfLz1rLHcvPWspOih4PWI9Xz0wLHc9MSk7dmFyIFQ9dGhpcy5jb21wdXRlZFJvdGF0aW9uLEE9VFswXSxNPVRbMV0sUz1UWzJdLEU9VFszXSxDPUEqdytFKngrTSpfLVMqYixMPU0qdytFKmIrUyp4LUEqXyx6PVMqdytFKl8rQSpiLU0qeCxPPUUqdy1BKngtTSpiLVMqXztpZihuKXt4PXAsYj1kLF89Zzt2YXIgST1NYXRoLnNpbihuKS9sKHgsYixfKTt4Kj1JLGIqPUksXyo9SSxPPU8qKHc9TWF0aC5jb3MoZSkpLShDPUMqdytPKngrTCpfLXoqYikqeC0oTD1MKncrTypiK3oqeC1DKl8pKmItKHo9eip3K08qXytDKmItTCp4KSpffXZhciBEPWMoQyxMLHosTyk7RD4xZS02PyhDLz1ELEwvPUQsei89RCxPLz1EKTooQz1MPXo9MCxPPTEpLHRoaXMucm90YXRpb24uc2V0KHQsQyxMLHosTyl9LGgubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixlPWV8fHRoaXMuY29tcHV0ZWRFeWUsbj1ufHx0aGlzLmNvbXB1dGVkVXA7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeDtpKGEsZSxyLG4pO3ZhciBvPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKG8sYVswXSxhWzFdLGFbMl0sYVs0XSxhWzVdLGFbNl0sYVs4XSxhWzldLGFbMTBdKSx1KG8sbyksdGhpcy5yb3RhdGlvbi5zZXQodCxvWzBdLG9bMV0sb1syXSxvWzNdKTtmb3IodmFyIGw9MCxjPTA7YzwzOysrYylsKz1NYXRoLnBvdyhyW2NdLWVbY10sMik7dGhpcy5yYWRpdXMuc2V0KHQsLjUqTWF0aC5sb2coTWF0aC5tYXgobCwxZS02KSkpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKX0saC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0saC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbXB1dGVkUm90YXRpb247cyhyLGVbMF0sZVsxXSxlWzJdLGVbNF0sZVs1XSxlWzZdLGVbOF0sZVs5XSxlWzEwXSksdShyLHIpLHRoaXMucm90YXRpb24uc2V0KHQsclswXSxyWzFdLHJbMl0sclszXSk7dmFyIG49dGhpcy5jb21wdXRlZE1hdHJpeDtvKG4sZSk7dmFyIGk9blsxNV07aWYoTWF0aC5hYnMoaSk+MWUtNil7dmFyIGE9blsxMl0vaSxsPW5bMTNdL2ksYz1uWzE0XS9pO3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBmPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLnNldCh0LGEtblsyXSpmLGwtbls2XSpmLGMtblsxMF0qZiksdGhpcy5yYWRpdXMuaWRsZSh0KX1lbHNlIHRoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KX0saC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxoLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LTEvMCxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxoLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kcztyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LGgudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjYWxjTWF0cml4KHRoaXMubGFzdFQoKSkse2NlbnRlcjp0aGlzLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCkscm90YXRpb246dGhpcy5jb21wdXRlZFJvdGF0aW9uLnNsaWNlKCksZGlzdGFuY2U6TWF0aC5sb2codGhpcy5jb21wdXRlZFJhZGl1c1swXSksem9vbU1pbjp0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF0sem9vbU1heDp0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF19fSxoLmZyb21KU09OPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXQuY2VudGVyO3ImJnRoaXMuY2VudGVyLnNldChlLHJbMF0sclsxXSxyWzJdKTt2YXIgbj10LnJvdGF0aW9uO24mJnRoaXMucm90YXRpb24uc2V0KGUsblswXSxuWzFdLG5bMl0sblszXSk7dmFyIGk9dC5kaXN0YW5jZTtpJiZpPjAmJnRoaXMucmFkaXVzLnNldChlLE1hdGgubG9nKGkpKSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpfX0seyIuL2xpYi9xdWF0RnJvbUZyYW1lIjo0NDcsImZpbHRlcmVkLXZlY3RvciI6MjIyLCJnbC1tYXQ0L2Zyb21RdWF0IjoyNTgsImdsLW1hdDQvaW52ZXJ0IjoyNjEsImdsLW1hdDQvbG9va0F0IjoyNjJ9XSw0NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVwZWF0LXN0cmluZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4ocj0idW5kZWZpbmVkIiE9dHlwZW9mIHI/cisiIjoiICIsZSkrdH19LHsicmVwZWF0LXN0cmluZyI6NDg3fV0sNDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuW3RdO3ZhciByPVt0XTsic3RyaW5nIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSk/ZT17YnJhY2tldHM6ZX06ZXx8KGU9e30pO3ZhciBuPWUuYnJhY2tldHM/QXJyYXkuaXNBcnJheShlLmJyYWNrZXRzKT9lLmJyYWNrZXRzOltlLmJyYWNrZXRzXTpbInt9IiwiW10iLCIoKSJdLGk9ZS5lc2NhcGV8fCJfX18iLGE9ISFlLmZsYXQ7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoWyJcXCIsdFswXSwiW15cXCIsdFswXSwiXFwiLHRbMV0sIl0qXFwiLHRbMV1dLmpvaW4oIiIpKSxuPVtdO2Z1bmN0aW9uIGEoZSxhLG8pe3ZhciBzPXIucHVzaChlLnNsaWNlKHRbMF0ubGVuZ3RoLC10WzFdLmxlbmd0aCkpLTE7cmV0dXJuIG4ucHVzaChzKSxpK3N9ci5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7Zm9yKHZhciBpLG89MDt0IT1pOylpZihpPXQsdD10LnJlcGxhY2UoZSxhKSxvKys+MWU0KXRocm93IEVycm9yKCJSZWZlcmVuY2VzIGhhdmUgY2lyY3VsYXIgZGVwZW5kZW5jeS4gUGxlYXNlLCBjaGVjayB0aGVtLiIpO3Jbbl09dH0pLG49bi5yZXZlcnNlKCkscj1yLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHIpe2U9ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIihcXCIraStyKyIoPyFbMC05XSkpIiwiZyIpLHRbMF0rIiQxIit0WzFdKX0pLGV9KX0pO3ZhciBvPW5ldyBSZWdFeHAoIlxcIitpKyIoWzAtOV0rKSIpO3JldHVybiBhP3I6ZnVuY3Rpb24gdChlLHIsbil7Zm9yKHZhciBpLGE9W10scz0wO2k9by5leGVjKGUpOyl7aWYocysrPjFlNCl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBwYXJlbnRoZXNpcyIpO2EucHVzaChlLnNsaWNlKDAsaS5pbmRleCkpLGEucHVzaCh0KHJbaVsxXV0scikpLGU9ZS5zbGljZShpLmluZGV4K2lbMF0ubGVuZ3RoKX1yZXR1cm4gYS5wdXNoKGUpLGF9KHJbMF0scil9ZnVuY3Rpb24gaSh0LGUpe2lmKGUmJmUuZmxhdCl7dmFyIHIsbj1lJiZlLmVzY2FwZXx8Il9fXyIsaT10WzBdO2lmKCFpKXJldHVybiIiO2Zvcih2YXIgYT1uZXcgUmVnRXhwKCJcXCIrbisiKFswLTldKykiKSxvPTA7aSE9cjspe2lmKG8rKz4xZTQpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gIit0KTtyPWksaT1pLnJlcGxhY2UoYSxzKX1yZXR1cm4gaX1yZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24gdChlLHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpJiYocj1yLnJlZHVjZSh0LCIiKSksZStyfSwiIik7ZnVuY3Rpb24gcyhlLHIpe2lmKG51bGw9PXRbcl0pdGhyb3cgRXJyb3IoIlJlZmVyZW5jZSAiK3IrImlzIHVuZGVmaW5lZCIpO3JldHVybiB0W3JdfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/aSh0LGUpOm4odCxlKX1hLnBhcnNlPW4sYS5zdHJpbmdpZnk9aSxlLmV4cG9ydHM9YX0se31dLDQ1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwaWNrLWJ5LWFsaWFzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2FyZ3VtZW50cy5sZW5ndGg+MSYmKHQ9YXJndW1lbnRzKTsic3RyaW5nIj09dHlwZW9mIHQ/dD10LnNwbGl0KC9ccy8pLm1hcChwYXJzZUZsb2F0KToibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSk7dC5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdFswXT9lPTE9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFswXSx4OjAseTowfToyPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMV0seDowLHk6MH06e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdfHwwLGhlaWdodDp0WzNdLXRbMV18fDB9OnQmJih0PW4odCx7bGVmdDoieCBsIGxlZnQgTGVmdCIsdG9wOiJ5IHQgdG9wIFRvcCIsd2lkdGg6Incgd2lkdGggVyBXaWR0aCIsaGVpZ2h0OiJoIGhlaWdodCBXIFdpZHRoIixib3R0b206ImIgYm90dG9tIEJvdHRvbSIscmlnaHQ6InIgcmlnaHQgUmlnaHQifSksZT17eDp0LmxlZnR8fDAseTp0LnRvcHx8MH0sbnVsbD09dC53aWR0aD90LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD0wOmUud2lkdGg9dC53aWR0aCxudWxsPT10LmhlaWdodD90LmJvdHRvbT9lLmhlaWdodD10LmJvdHRvbS1lLnk6ZS5oZWlnaHQ9MDplLmhlaWdodD10LmhlaWdodCk7cmV0dXJuIGV9fSx7InBpY2stYnktYWxpYXMiOjQ1N31dLDQ1MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gdC5yZXBsYWNlKGksZnVuY3Rpb24odCxyLGkpe3ZhciBvPXIudG9Mb3dlckNhc2UoKTtmb3IoaT1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKGEpO3JldHVybiBlP2UubWFwKE51bWJlcik6W119KGkpLCJtIj09byYmaS5sZW5ndGg+MiYmKGUucHVzaChbcl0uY29uY2F0KGkuc3BsaWNlKDAsMikpKSxvPSJsIixyPSJtIj09cj8ibCI6IkwiKTs7KXtpZihpLmxlbmd0aD09bltvXSlyZXR1cm4gaS51bnNoaWZ0KHIpLGUucHVzaChpKTtpZihpLmxlbmd0aDxuW29dKXRocm93IG5ldyBFcnJvcigibWFsZm9ybWVkIHBhdGggZGF0YSIpO2UucHVzaChbcl0uY29uY2F0KGkuc3BsaWNlKDAsbltvXSkpKX19KSxlfTt2YXIgbj17YTo3LGM6NixoOjEsbDoyLG06MixxOjQsczo0LHQ6Mix2OjEsejowfSxpPS8oW2FzdHZ6cW1obGNdKShbXmFzdHZ6cW1obGNdKikvZ2k7dmFyIGE9Ly0/WzAtOV0qXC4/WzAtOV0rKD86ZVstK10/XGQrKT8vZ2l9LHt9XSw0NTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT1bMCwiIl0pLHQ9U3RyaW5nKHQpO3ZhciByPXBhcnNlRmxvYXQodCwxMCk7cmV0dXJuIGVbMF09cixlWzFdPXQubWF0Y2goL1tcZC5cLVwrXSpccyooLiopLylbMV18fCIiLGV9fSx7fV0sNDU0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciByLG4saSxhLG8sczsidW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZudWxsIT09cGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9lLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OiJ1bmRlZmluZWQiIT10eXBlb2YgdCYmbnVsbCE9PXQmJnQuaHJ0aW1lPyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4ocigpLW8pLzFlNn0sbj10LmhydGltZSxhPShyPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIDFlOSoodD1uKCkpWzBdK3RbMV19KSgpLHM9MWU5KnQudXB0aW1lKCksbz1hLXMpOkRhdGUubm93PyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKS1pfSxpPURhdGUubm93KCkpOihlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKS1pfSxpPShuZXcgRGF0ZSkuZ2V0VGltZSgpKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0NzR9XSw0NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8bil7Zm9yKHZhciByPTEsYT0wO2E8ZTsrK2EpZm9yKHZhciBvPTA7bzxhOysrbylpZih0W2FdPHRbb10pcj0tcjtlbHNlIGlmKHRbYV09PT10W29dKXJldHVybiAwO3JldHVybiByfWZvcih2YXIgcz1pLm1hbGxvY1VpbnQ4KGUpLGE9MDthPGU7KythKXNbYV09MDtmb3IodmFyIHI9MSxhPTA7YTxlOysrYSlpZighc1thXSl7dmFyIGw9MTtzW2FdPTE7Zm9yKHZhciBvPXRbYV07byE9PWE7bz10W29dKXtpZihzW29dKXJldHVybiBpLmZyZWVVaW50OChzKSwwO2wrPTEsc1tvXT0xfTEmbHx8KHI9LXIpfXJldHVybiBpLmZyZWVVaW50OChzKSxyfTt2YXIgbj0zMixpPXQoInR5cGVkYXJyYXktcG9vbCIpfSx7InR5cGVkYXJyYXktcG9vbCI6NTI5fV0sNDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiaW52ZXJ0LXBlcm11dGF0aW9uIik7ci5yYW5rPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3N3aXRjaChlKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gdFsxXX12YXIgcixhLG8scz1uLm1hbGxvY1VpbnQzMihlKSxsPW4ubWFsbG9jVWludDMyKGUpLGM9MDtmb3IoaSh0LGwpLG89MDtvPGU7KytvKXNbb109dFtvXTtmb3Iobz1lLTE7bz4wOy0tbylhPWxbb10scj1zW29dLHNbb109c1thXSxzW2FdPXIsbFtvXT1sW3JdLGxbcl09YSxjPShjK3IpKm87cmV0dXJuIG4uZnJlZVVpbnQzMihsKSxuLmZyZWVVaW50MzIocyksY30sci51bnJhbms9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHJ8fFtdO2Nhc2UgMTpyZXR1cm4gcj8oclswXT0wLHIpOlswXTtjYXNlIDI6cmV0dXJuIHI/KGU/KHJbMF09MCxyWzFdPTEpOihyWzBdPTEsclsxXT0wKSxyKTplP1swLDFdOlsxLDBdfXZhciBuLGksYSxvPTE7Zm9yKChyPXJ8fG5ldyBBcnJheSh0KSlbMF09MCxhPTE7YTx0OysrYSlyW2FdPWEsbz1vKmF8MDtmb3IoYT10LTE7YT4wOy0tYSllPWUtKG49ZS9vfDApKm98MCxvPW8vYXwwLGk9MHxyW2FdLHJbYV09MHxyW25dLHJbbl09MHxpO3JldHVybiByfX0seyJpbnZlcnQtcGVybXV0YXRpb24iOjQwNywidHlwZWRhcnJheS1wb29sIjo1Mjl9XSw0NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLG89e307aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1pKGUpKSxBcnJheS5pc0FycmF5KGUpKXt2YXIgcz17fTtmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKXNbZVthXV09ITA7ZT1zfWZvcihuIGluIGUpZVtuXT1pKGVbbl0pO3ZhciBsPXt9O2ZvcihuIGluIGUpe3ZhciBjPWVbbl07aWYoQXJyYXkuaXNBcnJheShjKSlmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdO2lmKHImJihsW3VdPSEwKSx1IGluIHQpe2lmKG9bbl09dFt1XSxyKWZvcih2YXIgZj1hO2Y8Yy5sZW5ndGg7ZisrKWxbY1tmXV09ITA7YnJlYWt9fWVsc2UgbiBpbiB0JiYoZVtuXSYmKG9bbl09dFtuXSksciYmKGxbbl09ITApKX1pZihyKWZvcihuIGluIHQpbFtuXXx8KG9bbl09dFtuXSk7cmV0dXJuIG99O3ZhciBuPXt9O2Z1bmN0aW9uIGkodCl7cmV0dXJuIG5bdF0/blt0XTooInN0cmluZyI9PXR5cGVvZiB0JiYodD1uW3RdPXQuc3BsaXQoL1xzKixccyp8XHMrLykpLHQpfX0se31dLDQ1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MHxlLmxlbmd0aCxpPXQubGVuZ3RoLGE9W25ldyBBcnJheShyKSxuZXcgQXJyYXkocildLG89MDtvPHI7KytvKWFbMF1bb109W10sYVsxXVtvXT1bXTtmb3IodmFyIG89MDtvPGk7KytvKXt2YXIgcz10W29dO2FbMF1bc1swXV0ucHVzaChzKSxhWzFdW3NbMV1dLnB1c2gocyl9Zm9yKHZhciBsPVtdLG89MDtvPHI7KytvKWFbMF1bb10ubGVuZ3RoK2FbMV1bb10ubGVuZ3RoPT09MCYmbC5wdXNoKFtvXSk7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWFbZV1bdFtlXV07ci5zcGxpY2Uoci5pbmRleE9mKHQpLDEpfWZ1bmN0aW9uIHUodCxyLGkpe2Zvcih2YXIgbyxzLGwsdT0wO3U8MjsrK3UpaWYoYVt1XVtyXS5sZW5ndGg+MCl7bz1hW3VdW3JdWzBdLGw9dTticmVha31zPW9bMV5sXTtmb3IodmFyIGY9MDtmPDI7KytmKWZvcih2YXIgaD1hW2ZdW3JdLHA9MDtwPGgubGVuZ3RoOysrcCl7dmFyIGQ9aFtwXSxnPWRbMV5mXSx2PW4oZVt0XSxlW3JdLGVbc10sZVtnXSk7dj4wJiYobz1kLHM9ZyxsPWYpfXJldHVybiBpP3M6KG8mJmMobyxsKSxzKX1mdW5jdGlvbiBmKHQscil7dmFyIGk9YVtyXVt0XVswXSxvPVt0XTtjKGkscik7Zm9yKHZhciBzPWlbMV5yXTs7KXtmb3IoO3MhPT10OylvLnB1c2gocykscz11KG9bby5sZW5ndGgtMl0scywhMSk7aWYoYVswXVt0XS5sZW5ndGgrYVsxXVt0XS5sZW5ndGg9PT0wKWJyZWFrO3ZhciBsPW9bby5sZW5ndGgtMV0sZj10LGg9b1sxXSxwPXUobCxmLCEwKTtpZihuKGVbbF0sZVtmXSxlW2hdLGVbcF0pPDApYnJlYWs7by5wdXNoKHQpLHM9dShsLGYpfXJldHVybiBvfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZVsxXT09PWVbZS5sZW5ndGgtMV19Zm9yKHZhciBvPTA7bzxyOysrbylmb3IodmFyIHA9MDtwPDI7KytwKXtmb3IodmFyIGQ9W107YVtwXVtvXS5sZW5ndGg+MDspe2FbMF1bb10ubGVuZ3RoO3ZhciBnPWYobyxwKTtoKGQsZyk/ZC5wdXNoLmFwcGx5KGQsZyk6KGQubGVuZ3RoPjAmJmwucHVzaChkKSxkPWcpfWQubGVuZ3RoPjAmJmwucHVzaChkKX1yZXR1cm4gbH07dmFyIG49dCgiY29tcGFyZS1hbmdsZSIpfSx7ImNvbXBhcmUtYW5nbGUiOjExN31dLDQ1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0LGUubGVuZ3RoKSxpPW5ldyBBcnJheShlLmxlbmd0aCksYT1uZXcgQXJyYXkoZS5sZW5ndGgpLG89W10scz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgbD1yW3NdLmxlbmd0aDthW3NdPWwsaVtzXT0hMCxsPD0xJiZvLnB1c2gocyl9Zm9yKDtvLmxlbmd0aD4wOyl7dmFyIGM9by5wb3AoKTtpW2NdPSExO2Zvcih2YXIgdT1yW2NdLHM9MDtzPHUubGVuZ3RoOysrcyl7dmFyIGY9dVtzXTswPT0tLWFbZl0mJm8ucHVzaChmKX19Zm9yKHZhciBoPW5ldyBBcnJheShlLmxlbmd0aCkscD1bXSxzPTA7czxlLmxlbmd0aDsrK3MpaWYoaVtzXSl7dmFyIGM9cC5sZW5ndGg7aFtzXT1jLHAucHVzaChlW3NdKX1lbHNlIGhbc109LTE7Zm9yKHZhciBkPVtdLHM9MDtzPHQubGVuZ3RoOysrcyl7dmFyIGc9dFtzXTtpW2dbMF1dJiZpW2dbMV1dJiZkLnB1c2goW2hbZ1swXV0saFtnWzFdXV0pfXJldHVybltkLHBdfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpfSx7ImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxNjN9XSw0NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Yyh0LGUpO3Q9clswXTtmb3IodmFyIGY9KGU9clsxXSkubGVuZ3RoLGg9KHQubGVuZ3RoLG4odCxlLmxlbmd0aCkpLHA9MDtwPGY7KytwKWlmKGhbcF0ubGVuZ3RoJTI9PTEpdGhyb3cgbmV3IEVycm9yKCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmU6IGdyYXBoIG11c3QgYmUgbWFuaWZvbGQiKTt2YXIgZD1pKHQsZSk7Zm9yKHZhciBnPShkPWQuZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPVswXSxpPTA7aTxyOysraSl7dmFyIGE9ZVt0W2ldXSxsPWVbdFsoaSsxKSVyXV0sYz1vKC1hWzBdLGFbMV0pLHU9bygtYVswXSxsWzFdKSxmPW8obFswXSxhWzFdKSxoPW8obFswXSxsWzFdKTtuPXMobixzKHMoYyx1KSxzKGYsaCkpKX1yZXR1cm4gbltuLmxlbmd0aC0xXT4wfSkpLmxlbmd0aCx2PW5ldyBBcnJheShnKSxtPW5ldyBBcnJheShnKSxwPTA7cDxnOysrcCl7dltwXT1wO3ZhciB5PW5ldyBBcnJheShnKSx4PWRbcF0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSksYj1hKFt4XSksXz0wO3Q6Zm9yKHZhciB3PTA7dzxnOysrdylpZih5W3ddPTAscCE9PXcpe2Zvcih2YXIgaz1kW3ddLFQ9ay5sZW5ndGgsQT0wO0E8VDsrK0Epe3ZhciBNPWIoZVtrW0FdXSk7aWYoMCE9PU0pe008MCYmKHlbd109MSxfKz0xKTtjb250aW51ZSB0fX15W3ddPTEsXys9MX1tW3BdPVtfLHAseV19bS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0pO2Zvcih2YXIgcD0wO3A8ZzsrK3ApZm9yKHZhciB5PW1bcF0sUz15WzFdLEU9eVsyXSx3PTA7dzxnOysrdylFW3ddJiYodlt3XT1TKTtmb3IodmFyIEM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPVtdO3JldHVybiBlfShnKSxwPTA7cDxnOysrcClDW3BdLnB1c2godltwXSksQ1t2W3BdXS5wdXNoKHApO2Zvcih2YXIgTD17fSx6PXUoZiwhMSkscD0wO3A8ZzsrK3ApZm9yKHZhciBrPWRbcF0sVD1rLmxlbmd0aCx3PTA7dzxUOysrdyl7dmFyIE89a1t3XSxJPWtbKHcrMSklVF0sRD1NYXRoLm1pbihPLEkpKyI6IitNYXRoLm1heChPLEkpO2lmKEQgaW4gTCl7dmFyIFA9TFtEXTtDW1BdLnB1c2gocCksQ1twXS5wdXNoKFApLHpbT109eltJXT0hMH1lbHNlIExbRF09cH1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTA7cjxlOysrcilpZighelt0W3JdXSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IodmFyIEY9W10sQj11KGcsLTEpLHA9MDtwPGc7KytwKXZbcF0hPT1wfHxSKGRbcF0pP0JbcF09LTE6KEYucHVzaChwKSxCW3BdPTApO3ZhciByPVtdO2Zvcig7Ri5sZW5ndGg+MDspe3ZhciBOPUYucG9wKCksaj1DW05dO2woaixmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTt2YXIgVixVPWoubGVuZ3RoLHE9QltOXTtpZigwPT09cSl7dmFyIGs9ZFtOXTtWPVtrXX1mb3IodmFyIHA9MDtwPFU7KytwKXt2YXIgSD1qW3BdO2lmKCEoQltIXT49MCkmJihCW0hdPTFecSxGLnB1c2goSCksMD09PXEpKXt2YXIgaz1kW0hdO1Ioayl8fChrLnJldmVyc2UoKSxWLnB1c2goaykpfX0wPT09cSYmci5wdXNoKFYpfXJldHVybiByfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpLGk9dCgicGxhbmFyLWR1YWwiKSxhPXQoInBvaW50LWluLWJpZy1wb2x5Z29uIiksbz10KCJ0d28tcHJvZHVjdCIpLHM9dCgicm9idXN0LXN1bSIpLGw9dCgidW5pcSIpLGM9dCgiLi9saWIvdHJpbS1sZWF2ZXMiKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9fSx7Ii4vbGliL3RyaW0tbGVhdmVzIjo0NTksImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxNjMsInBsYW5hci1kdWFsIjo0NTgsInBvaW50LWluLWJpZy1wb2x5Z29uIjo0NjQsInJvYnVzdC1zdW0iOjQ5OSwidHdvLXByb2R1Y3QiOjUyNyx1bmlxOjUzMX1dLDQ2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9xdWFkIil9LHsiLi9xdWFkIjo0NjN9XSw0NjI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAxXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAxfV0sNDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJjbGFtcCIpLGE9dCgicGFyc2UtcmVjdCIpLG89dCgiYXJyYXktYm91bmRzIikscz10KCJwaWNrLWJ5LWFsaWFzIiksbD10KCJkZWZpbmVkIiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksdT10KCJpcy1vYmoiKSxmPXQoImR0eXBlIiksaD10KCJtYXRoLWxvZzIiKTtmdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGE9MS8oZVsyXS1yKSxvPTEvKGVbM10tbikscz1uZXcgQXJyYXkodC5sZW5ndGgpLGw9MCxjPXQubGVuZ3RoLzI7bDxjO2wrKylzWzIqbF09aSgodFsyKmxdLXIpKmEsMCwxKSxzWzIqbCsxXT1pKCh0WzIqbCsxXS1uKSpvLDAsMSk7cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pLHQ9Yyh0LCJmbG9hdDY0IiksZT1zKGUse2JvdW5kczoicmFuZ2UgYm91bmRzIGRhdGFCb3ggZGF0YWJveCIsbWF4RGVwdGg6ImRlcHRoIG1heERlcHRoIG1heGRlcHRoIGxldmVsIG1heExldmVsIG1heGxldmVsIGxldmVscyIsZHR5cGU6InR5cGUgZHR5cGUgZm9ybWF0IG91dCBkc3Qgb3V0cHV0IGRlc3RpbmF0aW9uIn0pO3ZhciByPWwoZS5tYXhEZXB0aCwyNTUpLGk9bChlLmJvdW5kcyxvKHQsMikpO2lbMF09PT1pWzJdJiZpWzJdKyssaVsxXT09PWlbM10mJmlbM10rKzt2YXIgZCxnPXAodCxpKSx2PXQubGVuZ3RoPj4+MTtlLmR0eXBlfHwoZS5kdHlwZT0iYXJyYXkiKSwic3RyaW5nIj09dHlwZW9mIGUuZHR5cGU/ZD1uZXcoZihlLmR0eXBlKSkodik6ZS5kdHlwZSYmKGQ9ZS5kdHlwZSxBcnJheS5pc0FycmF5KGQpJiYoZC5sZW5ndGg9dikpO2Zvcih2YXIgbT0wO208djsrK20pZFttXT1tO3ZhciB5PVtdLHg9W10sYj1bXSxfPVtdOyFmdW5jdGlvbiB0KGUsbixpLGEsbyxzKXtpZighYS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGw9eVtvXXx8KHlbb109W10pO3ZhciBjPWJbb118fChiW29dPVtdKTt2YXIgdT14W29dfHwoeFtvXT1bXSk7dmFyIGY9bC5sZW5ndGg7bysrO2lmKG8+cil7Zm9yKHZhciBoPTA7aDxhLmxlbmd0aDtoKyspbC5wdXNoKGFbaF0pLGMucHVzaChzKSx1LnB1c2gobnVsbCxudWxsLG51bGwsbnVsbCk7cmV0dXJuIGZ9bC5wdXNoKGFbMF0pO2MucHVzaChzKTtpZihhLmxlbmd0aDw9MSlyZXR1cm4gdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpLGY7dmFyIHA9LjUqaTt2YXIgZD1lK3Asdj1uK3A7dmFyIG09W10sXz1bXSx3PVtdLGs9W107Zm9yKHZhciBUPTEsQT1hLmxlbmd0aDtUPEE7VCsrKXt2YXIgTT1hW1RdLFM9Z1syKk1dLEU9Z1syKk0rMV07UzxkP0U8dj9tLnB1c2goTSk6Xy5wdXNoKE0pOkU8dj93LnB1c2goTSk6ay5wdXNoKE0pfXM8PD0yO3UucHVzaCh0KGUsbixwLG0sbyxzKSx0KGUsdixwLF8sbyxzKzEpLHQoZCxuLHAsdyxvLHMrMiksdChkLHYscCxrLG8scyszKSk7cmV0dXJuIGZ9KDAsMCwxLGQsMCwxKTtmb3IodmFyIHc9MCxrPTA7azx5Lmxlbmd0aDtrKyspe3ZhciBUPXlba107aWYoZC5zZXQpZC5zZXQoVCx3KTtlbHNlIGZvcih2YXIgQT0wLE09VC5sZW5ndGg7QTxNO0ErKylkW0Erd109VFtBXTt2YXIgUz13K3lba10ubGVuZ3RoO19ba109W3csU10sdz1TfXJldHVybiBkLnJhbmdlPWZ1bmN0aW9uKCl7dmFyIGUscj1bXSxvPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKDtvLS07KXJbb109YXJndW1lbnRzW29dO2lmKHUocltyLmxlbmd0aC0xXSkpe3ZhciBjPXIucG9wKCk7ci5sZW5ndGh8fG51bGw9PWMueCYmbnVsbD09Yy5sJiZudWxsPT1jLmxlZnR8fChyPVtjXSxlPXt9KSxlPXMoYyx7bGV2ZWw6ImxldmVsIG1heExldmVsIixkOiJkIGRpYW0gZGlhbWV0ZXIgciByYWRpdXMgcHggcHhTaXplIHBpeGVsIHBpeGVsU2l6ZSBtYXhEIHNpemUgbWluU2l6ZSIsbG9kOiJsb2QgZGV0YWlscyByYW5nZXMgb2Zmc2V0cyJ9KX1lbHNlIGU9e307ci5sZW5ndGh8fChyPWkpO3ZhciBmPWEuYXBwbHkodm9pZCAwLHIpLGQ9W01hdGgubWluKGYueCxmLngrZi53aWR0aCksTWF0aC5taW4oZi55LGYueStmLmhlaWdodCksTWF0aC5tYXgoZi54LGYueCtmLndpZHRoKSxNYXRoLm1heChmLnksZi55K2YuaGVpZ2h0KV0sZz1kWzBdLHY9ZFsxXSxtPWRbMl0sdz1kWzNdLGs9cChbZyx2LG0sd10saSksVD1rWzBdLEE9a1sxXSxNPWtbMl0sUz1rWzNdLEM9bChlLmxldmVsLHkubGVuZ3RoKTtpZihudWxsIT1lLmQpe3ZhciBMOyJudW1iZXIiPT10eXBlb2YgZS5kP0w9W2UuZCxlLmRdOmUuZC5sZW5ndGgmJihMPWUuZCksQz1NYXRoLm1pbihNYXRoLm1heChNYXRoLmNlaWwoLWgoTWF0aC5hYnMoTFswXSkvKGlbMl0taVswXSkpKSxNYXRoLmNlaWwoLWgoTWF0aC5hYnMoTFsxXSkvKGlbM10taVsxXSkpKSksQyl9aWYoQz1NYXRoLm1pbihDLHkubGVuZ3RoKSxlLmxvZClyZXR1cm4gZnVuY3Rpb24odCxlLHIsaSxhKXtmb3IodmFyIG89W10scz0wO3M8YTtzKyspe3ZhciBsPWJbc10sYz1fW3NdWzBdLHU9RSh0LGUscyksZj1FKHIsaSxzKSxoPW4uZ2UobCx1KSxwPW4uZ3QobCxmLGgsbC5sZW5ndGgtMSk7b1tzXT1baCtjLHArY119cmV0dXJuIG99KFQsQSxNLFMsQyk7dmFyIHo9W107cmV0dXJuIGZ1bmN0aW9uIGUocixuLGksYSxvLHMpe2lmKG51bGwhPT1vJiZudWxsIT09cyl7dmFyIGw9citpLGM9bitpO2lmKCEoVD5sfHxBPmN8fE08cnx8UzxufHxhPj1DfHxvPT09cykpe3ZhciB1PXlbYV07dm9pZCAwPT09cyYmKHM9dS5sZW5ndGgpO2Zvcih2YXIgZj1vO2Y8cztmKyspe3ZhciBoPXVbZl0scD10WzIqaF0sZD10WzIqaCsxXTtwPj1nJiZwPD1tJiZkPj12JiZkPD13JiZ6LnB1c2goaCl9dmFyIGI9eFthXSxfPWJbNCpvKzBdLGs9Yls0Km8rMV0sRT1iWzQqbysyXSxMPWJbNCpvKzNdLE89ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bnVsbCxuPTA7bnVsbD09PXI7KWlmKHI9dFs0KmUrbl0sKytuPnQubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiByfShiLG8rMSksST0uNSppLEQ9YSsxO2UocixuLEksRCxfLGt8fEV8fEx8fE8pLGUocixuK0ksSSxELGssRXx8THx8TyksZShyK0ksbixJLEQsRSxMfHxPKSxlKHIrSSxuK0ksSSxELEwsTyl9fX0oMCwwLDEsMCwwLDEpLHp9LGQ7ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuPTEsaT0uNSxhPS41LG89LjUscz0wO3M8cjtzKyspbjw8PTIsbis9dDxpP2U8YT8wOjE6ZTxhPzI6MyxvKj0uNSxpKz10PGk/LW86byxhKz1lPGE/LW86bztyZXR1cm4gbn19fSx7ImFycmF5LWJvdW5kcyI6NTUsImJpbmFyeS1zZWFyY2gtYm91bmRzIjo0NjIsY2xhbXA6MTA1LGRlZmluZWQ6MTU1LGR0eXBlOjE2MCwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjIzLCJpcy1vYmoiOjQxMywibWF0aC1sb2cyIjo0MjQsInBhcnNlLXJlY3QiOjQ1MSwicGljay1ieS1hbGlhcyI6NDU3fV0sNDY0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLGE9W10scz0wO3M8ZTsrK3MpZm9yKHZhciB1PXRbc10sZj11Lmxlbmd0aCxoPWYtMSxwPTA7cDxmO2g9cCsrKXt2YXIgZD11W2hdLGc9dVtwXTtkWzBdPT09Z1swXT9hLnB1c2goW2QsZ10pOnIucHVzaChbZCxnXSl9aWYoMD09PXIubGVuZ3RoKXJldHVybiAwPT09YS5sZW5ndGg/Yzoodj1sKGEpLGZ1bmN0aW9uKHQpe3JldHVybiB2KHRbMF0sdFsxXSk/MDoxfSk7dmFyIHY7dmFyIG09aShyKSx5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPW8ubGUoZSxyWzBdKTtpZihpPDApcmV0dXJuIDE7dmFyIGE9dFtpXTtpZighYSl7aWYoIShpPjAmJmVbaV09PT1yWzBdKSlyZXR1cm4gMTthPXRbaS0xXX1mb3IodmFyIHM9MTthOyl7dmFyIGw9YS5rZXksYz1uKHIsbFswXSxsWzFdKTtpZihsWzBdWzBdPGxbMV1bMF0paWYoYzwwKWE9YS5sZWZ0O2Vsc2V7aWYoIShjPjApKXJldHVybiAwO3M9LTEsYT1hLnJpZ2h0fWVsc2UgaWYoYz4wKWE9YS5sZWZ0O2Vsc2V7aWYoIShjPDApKXJldHVybiAwO3M9MSxhPWEucmlnaHR9fXJldHVybiBzfX0obS5zbGFicyxtLmNvb3JkaW5hdGVzKTtyZXR1cm4gMD09PWEubGVuZ3RoP3k6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoclswXSxyWzFdKT8wOmUocil9fShsKGEpLHkpfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXSxpPXQoInNsYWItZGVjb21wb3NpdGlvbiIpLGE9dCgiaW50ZXJ2YWwtdHJlZS0xZCIpLG89dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBzKCl7cmV0dXJuITB9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdLGk9blswXVswXSxvPW5bMF1bMV0sbD1uWzFdWzFdLGM9W01hdGgubWluKG8sbCksTWF0aC5tYXgobyxsKV07aSBpbiBlP2VbaV0ucHVzaChjKTplW2ldPVtjXX12YXIgdT17fSxmPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxmLmxlbmd0aDsrK3Ipe3ZhciBoPWVbZltyXV07dVtmW3JdXT1hKGgpfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdO3JldHVybiEhbiYmISFuLnF1ZXJ5UG9pbnQocixzKX19KHUpfWZ1bmN0aW9uIGModCl7cmV0dXJuIDF9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo4MSwiaW50ZXJ2YWwtdHJlZS0xZCI6NDA2LCJyb2J1c3Qtb3JpZW50YXRpb24iOjQ5NCwic2xhYi1kZWNvbXBvc2l0aW9uIjo1MTB9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXQoIi4vbGliL2J1aWxkLWxvZyIpLGE9dCgiLi9saWIvZXBzaWxvbiIpLG89dCgiLi9saWIvaW50ZXJzZWN0ZXIiKSxzPXQoIi4vbGliL3NlZ21lbnQtY2hhaW5lciIpLGw9dCgiLi9saWIvc2VnbWVudC1zZWxlY3RvciIpLGM9dCgiLi9saWIvZ2VvanNvbiIpLHU9ITEsZj1hKCk7ZnVuY3Rpb24gaCh0LGUscil7dmFyIGk9bi5zZWdtZW50cyh0KSxhPW4uc2VnbWVudHMoZSksbz1yKG4uY29tYmluZShpLGEpKTtyZXR1cm4gbi5wb2x5Z29uKG8pfW49e2J1aWxkTG9nOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD91PWkoKTohMT09PXQmJih1PSExKSwhMSE9PXUmJnUubGlzdH0sZXBzaWxvbjpmdW5jdGlvbih0KXtyZXR1cm4gZi5lcHNpbG9uKHQpfSxzZWdtZW50czpmdW5jdGlvbih0KXt2YXIgZT1vKCEwLGYsdSk7cmV0dXJuIHQucmVnaW9ucy5mb3JFYWNoKGUuYWRkUmVnaW9uKSx7c2VnbWVudHM6ZS5jYWxjdWxhdGUodC5pbnZlcnRlZCksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LGNvbWJpbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm57Y29tYmluZWQ6byghMSxmLHUpLmNhbGN1bGF0ZSh0LnNlZ21lbnRzLHQuaW52ZXJ0ZWQsZS5zZWdtZW50cyxlLmludmVydGVkKSxpbnZlcnRlZDE6dC5pbnZlcnRlZCxpbnZlcnRlZDI6ZS5pbnZlcnRlZH19LHNlbGVjdFVuaW9uOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnVuaW9uKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDF8fHQuaW52ZXJ0ZWQyfX0sc2VsZWN0SW50ZXJzZWN0OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmludGVyc2VjdCh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiZ0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2U6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZSh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiYhdC5pbnZlcnRlZDJ9fSxzZWxlY3REaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmRpZmZlcmVuY2VSZXYodC5jb21iaW5lZCx1KSxpbnZlcnRlZDohdC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0WG9yOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnhvcih0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxIT09dC5pbnZlcnRlZDJ9fSxwb2x5Z29uOmZ1bmN0aW9uKHQpe3JldHVybntyZWdpb25zOnModC5zZWdtZW50cyxmLHUpLGludmVydGVkOnQuaW52ZXJ0ZWR9fSxwb2x5Z29uRnJvbUdlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMudG9Qb2x5Z29uKG4sdCl9LHBvbHlnb25Ub0dlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMuZnJvbVBvbHlnb24obixmLHQpfSx1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdFVuaW9uKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0SW50ZXJzZWN0KX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdERpZmZlcmVuY2UpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0RGlmZmVyZW5jZVJldil9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdFhvcil9fSwib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5Qb2x5Qm9vbD1uKSxlLmV4cG9ydHM9bn0seyIuL2xpYi9idWlsZC1sb2ciOjQ2NiwiLi9saWIvZXBzaWxvbiI6NDY3LCIuL2xpYi9nZW9qc29uIjo0NjgsIi4vbGliL2ludGVyc2VjdGVyIjo0NjksIi4vbGliL3NlZ21lbnQtY2hhaW5lciI6NDcxLCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIjo0NzJ9XSw0NjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPTAscj0hMTtmdW5jdGlvbiBuKGUscil7cmV0dXJuIHQubGlzdC5wdXNoKHt0eXBlOmUsZGF0YTpyP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocikpOnZvaWQgMH0pLHR9cmV0dXJuIHQ9e2xpc3Q6W10sc2VnbWVudElkOmZ1bmN0aW9uKCl7cmV0dXJuIGUrK30sY2hlY2tJbnRlcnNlY3Rpb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hlY2siLHtzZWcxOnQsc2VnMjplfSl9LHNlZ21lbnRDaG9wOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImRpdl9zZWciLHtzZWc6dCxwdDplfSksbigiY2hvcCIse3NlZzp0LHB0OmV9KX0sc3RhdHVzUmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJwb3Bfc2VnIix7c2VnOnR9KX0sc2VnbWVudFVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VnX3VwZGF0ZSIse3NlZzp0fSl9LHNlZ21lbnROZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigibmV3X3NlZyIse3NlZzp0LHByaW1hcnk6ZX0pfSxzZWdtZW50UmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJyZW1fc2VnIix7c2VnOnR9KX0sdGVtcFN0YXR1czpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4oInRlbXBfc3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHJld2luZDpmdW5jdGlvbih0KXtyZXR1cm4gbigicmV3aW5kIix7c2VnOnR9KX0sc3RhdHVzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigic3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1yP3Q6KHI9ZSxuKCJ2ZXJ0Iix7eDplfSkpfSxsb2c6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYodD1KU09OLnN0cmluZ2lmeSh0LCExLCIgICIpKSxuKCJsb2ciLHt0eHQ6dH0pfSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBuKCJyZXNldCIpfSxzZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VsZWN0ZWQiLHtzZWdzOnR9KX0sY2hhaW5TdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbigiY2hhaW5fc3RhcnQiLHtzZWc6dH0pfSxjaGFpblJlbW92ZUhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fcmVtX2hlYWQiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5SZW1vdmVUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX3JlbV90YWlsIix7aW5kZXg6dCxwdDplfSl9LGNoYWluTmV3OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX25ldyIse3B0MTp0LHB0MjplfSl9LGNoYWluTWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX21hdGNoIix7aW5kZXg6dH0pfSxjaGFpbkNsb3NlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9jbG9zZSIse2luZGV4OnR9KX0sY2hhaW5BZGRIZWFkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2FkZF9oZWFkIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQWRkVGFpbDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9hZGRfdGFpbCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpbkNvbm5lY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fY29uIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sY2hhaW5SZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9yZXYiLHtpbmRleDp0fSl9LGNoYWluSm9pbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9qb2luIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sZG9uZTpmdW5jdGlvbigpe3JldHVybiBuKCJkb25lIil9fX19LHt9XSw0Njc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Im51bWJlciIhPXR5cGVvZiB0JiYodD0xZS0xMCk7dmFyIGU9e2Vwc2lsb246ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiYodD1lKSx0fSxwb2ludEFib3ZlT3JPbkxpbmU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89blswXSxzPW5bMV0sbD1lWzBdO3JldHVybihvLWkpKihlWzFdLWEpLShzLWEpKihsLWkpPj0tdH0scG9pbnRCZXR3ZWVuOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1lWzFdLXJbMV0sYT1uWzBdLXJbMF0sbz1lWzBdLXJbMF0scz1uWzFdLXJbMV0sbD1vKmEraSpzO3JldHVybiEobDx0fHxsLShhKmErcypzKT4tdCl9LHBvaW50c1NhbWVYOmZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguYWJzKGVbMF0tclswXSk8dH0scG9pbnRzU2FtZVk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVsxXS1yWzFdKTx0fSxwb2ludHNTYW1lOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKSYmZS5wb2ludHNTYW1lWSh0LHIpfSxwb2ludHNDb21wYXJlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKT9lLnBvaW50c1NhbWVZKHQscik/MDp0WzFdPHJbMV0/LTE6MTp0WzBdPHJbMF0/LTE6MX0scG9pbnRzQ29sbGluZWFyOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1lWzBdLXJbMF0sYT1lWzFdLXJbMV0sbz1yWzBdLW5bMF0scz1yWzFdLW5bMV07cmV0dXJuIE1hdGguYWJzKGkqcy1vKmEpPHR9LGxpbmVzSW50ZXJzZWN0OmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXJbMF0tZVswXSxvPXJbMV0tZVsxXSxzPWlbMF0tblswXSxsPWlbMV0tblsxXSxjPWEqbC1vKnM7aWYoTWF0aC5hYnMoYyk8dClyZXR1cm4hMTt2YXIgdT1lWzBdLW5bMF0sZj1lWzFdLW5bMV0saD0ocypmLWwqdSkvYyxwPShhKmYtbyp1KS9jLGQ9e2Fsb25nQTowLGFsb25nQjowLHB0OltlWzBdK2gqYSxlWzFdK2gqb119O3JldHVybiBkLmFsb25nQT1oPD0tdD8tMjpoPHQ/LTE6aC0xPD0tdD8wOmgtMTx0PzE6MixkLmFsb25nQj1wPD0tdD8tMjpwPHQ/LTE6cC0xPD0tdD8wOnAtMTx0PzE6MixkfSxwb2ludEluc2lkZVJlZ2lvbjpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lWzBdLGk9ZVsxXSxhPXJbci5sZW5ndGgtMV1bMF0sbz1yW3IubGVuZ3RoLTFdWzFdLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdWzBdLHU9cltsXVsxXTt1LWk+dCE9by1pPnQmJihhLWMpKihpLXUpLyhvLXUpK2Mtbj50JiYocz0hcyksYT1jLG89dX1yZXR1cm4gc319O3JldHVybiBlfX0se31dLDQ2ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt0b1BvbHlnb246ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe2lmKGUubGVuZ3RoPD0wKXJldHVybiB0LnNlZ21lbnRzKHtpbnZlcnRlZDohMSxyZWdpb25zOltdfSk7ZnVuY3Rpb24gcihlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W3JdfSl9Zm9yKHZhciBuPXIoZVswXSksaT0xO2k8ZS5sZW5ndGg7aSsrKW49dC5zZWxlY3REaWZmZXJlbmNlKHQuY29tYmluZShuLHIoZVtpXSkpKTtyZXR1cm4gbn1pZigiUG9seWdvbiI9PT1lLnR5cGUpcmV0dXJuIHQucG9seWdvbihyKGUuY29vcmRpbmF0ZXMpKTtpZigiTXVsdGlQb2x5Z29uIj09PWUudHlwZSl7Zm9yKHZhciBuPXQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KSxpPTA7aTxlLmNvb3JkaW5hdGVzLmxlbmd0aDtpKyspbj10LnNlbGVjdFVuaW9uKHQuY29tYmluZShuLHIoZS5jb29yZGluYXRlc1tpXSkpKTtyZXR1cm4gdC5wb2x5Z29uKG4pfXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IENhbm5vdCBjb252ZXJ0IEdlb0pTT04gb2JqZWN0IHRvIFBvbHlCb29sIHBvbHlnb24iKX0sZnJvbVBvbHlnb246ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxyKXtyZXR1cm4gZS5wb2ludEluc2lkZVJlZ2lvbihbLjUqKHRbMF1bMF0rdFsxXVswXSksLjUqKHRbMF1bMV0rdFsxXVsxXSldLHIpfWZ1bmN0aW9uIGkodCl7cmV0dXJue3JlZ2lvbjp0LGNoaWxkcmVuOltdfX1yPXQucG9seWdvbih0LnNlZ21lbnRzKHIpKTt2YXIgYT1pKG51bGwpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7aWYobihlLChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbikpcmV0dXJuIHZvaWQgbyhzLGUpfXZhciBhPWkoZSk7Zm9yKHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7dmFyIHM7bigocz10LmNoaWxkcmVuW3JdKS5yZWdpb24sZSkmJihhLmNoaWxkcmVuLnB1c2gocyksdC5jaGlsZHJlbi5zcGxpY2UociwxKSxyLS0pfXQuY2hpbGRyZW4ucHVzaChhKX1mb3IodmFyIHM9MDtzPHIucmVnaW9ucy5sZW5ndGg7cysrKXt2YXIgbD1yLnJlZ2lvbnNbc107bC5sZW5ndGg8M3x8byhhLGwpfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXRbdC5sZW5ndGgtMV1bMF0saT10W3QubGVuZ3RoLTFdWzFdLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dWzBdLGw9dFtvXVsxXTthLnB1c2goW3MsbF0pLHIrPWwqbi1zKmksbj1zLGk9bH1yZXR1cm4gcjwwIT09ZSYmYS5yZXZlcnNlKCksYS5wdXNoKFthWzBdWzBdLGFbMF1bMV1dKSxhfXZhciB1PVtdO2Z1bmN0aW9uIGYodCl7dmFyIGU9W2ModC5yZWdpb24sITEpXTt1LnB1c2goZSk7Zm9yKHZhciByPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDtyKyspZS5wdXNoKGgodC5jaGlsZHJlbltyXSkpfWZ1bmN0aW9uIGgodCl7Zm9yKHZhciBlPTA7ZTx0LmNoaWxkcmVuLmxlbmd0aDtlKyspZih0LmNoaWxkcmVuW2VdKTtyZXR1cm4gYyh0LnJlZ2lvbiwhMCl9Zm9yKHM9MDtzPGEuY2hpbGRyZW4ubGVuZ3RoO3MrKylmKGEuY2hpbGRyZW5bc10pO3JldHVybiB1Lmxlbmd0aDw9MD97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W119OjE9PXUubGVuZ3RoP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp1WzBdfTp7dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp1fX19O2UuZXhwb3J0cz1ufSx7fV0sNDY5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9saW5rZWQtbGlzdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJue2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LGVuZDplLG15RmlsbDp7YWJvdmU6bi5teUZpbGwuYWJvdmUsYmVsb3c6bi5teUZpbGwuYmVsb3d9LG90aGVyRmlsbDpudWxsfX12YXIgYT1uLmNyZWF0ZSgpO2Z1bmN0aW9uIG8odCxyKXthLmluc2VydEJlZm9yZSh0LGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LHIsbixpLGEsbyl7dmFyIHM9ZS5wb2ludHNDb21wYXJlKHIsYSk7cmV0dXJuIDAhPT1zP3M6ZS5wb2ludHNTYW1lKG4sbyk/MDp0IT09aT90PzE6LTE6ZS5wb2ludEFib3ZlT3JPbkxpbmUobixpP2E6byxpP286YSk/MTotMX0odC5pc1N0YXJ0LHQucHQscixuLmlzU3RhcnQsbi5wdCxuLm90aGVyLnB0KTwwfSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5ub2RlKHtpc1N0YXJ0OiEwLHB0OnQuc3RhcnQsc2VnOnQscHJpbWFyeTplLG90aGVyOm51bGwsc3RhdHVzOm51bGx9KTtyZXR1cm4gbyhyLHQuZW5kKSxyfSh0LGUpO3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIGk9bi5ub2RlKHtpc1N0YXJ0OiExLHB0OmUuZW5kLHNlZzplLHByaW1hcnk6cixvdGhlcjp0LHN0YXR1czpudWxsfSk7dC5vdGhlcj1pLG8oaSx0LnB0KX0ocix0LGUpLHJ9ZnVuY3Rpb24gbCh0LGUpe3ZhciBuPWkoZSx0LnNlZy5lbmQsdC5zZWcpO3JldHVybiBmdW5jdGlvbih0LGUpe3ImJnIuc2VnbWVudENob3AodC5zZWcsZSksdC5vdGhlci5yZW1vdmUoKSx0LnNlZy5lbmQ9ZSx0Lm90aGVyLnB0PWUsbyh0Lm90aGVyLHQucHQpfSh0LGUpLHMobix0LnByaW1hcnkpfWZ1bmN0aW9uIGMoaSxvKXt2YXIgcz1uLmNyZWF0ZSgpO2Z1bmN0aW9uIGModCl7cmV0dXJuIHMuZmluZFRyYW5zaXRpb24oZnVuY3Rpb24ocil7dmFyIG4saSxhLG8scyxsO3JldHVybiBuPXQsaT1yLmV2LGE9bi5zZWcuc3RhcnQsbz1uLnNlZy5lbmQscz1pLnNlZy5zdGFydCxsPWkuc2VnLmVuZCwoZS5wb2ludHNDb2xsaW5lYXIoYSxzLGwpP2UucG9pbnRzQ29sbGluZWFyKG8scyxsKT8xOmUucG9pbnRBYm92ZU9yT25MaW5lKG8scyxsKT8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKGEscyxsKT8xOi0xKT4wfSl9ZnVuY3Rpb24gdSh0LG4pe3ZhciBpPXQuc2VnLGE9bi5zZWcsbz1pLnN0YXJ0LHM9aS5lbmQsYz1hLnN0YXJ0LHU9YS5lbmQ7ciYmci5jaGVja0ludGVyc2VjdGlvbihpLGEpO3ZhciBmPWUubGluZXNJbnRlcnNlY3QobyxzLGMsdSk7aWYoITE9PT1mKXtpZighZS5wb2ludHNDb2xsaW5lYXIobyxzLGMpKXJldHVybiExO2lmKGUucG9pbnRzU2FtZShvLHUpfHxlLnBvaW50c1NhbWUocyxjKSlyZXR1cm4hMTt2YXIgaD1lLnBvaW50c1NhbWUobyxjKSxwPWUucG9pbnRzU2FtZShzLHUpO2lmKGgmJnApcmV0dXJuIG47dmFyIGQ9IWgmJmUucG9pbnRCZXR3ZWVuKG8sYyx1KSxnPSFwJiZlLnBvaW50QmV0d2VlbihzLGMsdSk7aWYoaClyZXR1cm4gZz9sKG4scyk6bCh0LHUpLG47ZCYmKHB8fChnP2wobixzKTpsKHQsdSkpLGwobixvKSl9ZWxzZSAwPT09Zi5hbG9uZ0EmJigtMT09PWYuYWxvbmdCP2wodCxjKTowPT09Zi5hbG9uZ0I/bCh0LGYucHQpOjE9PT1mLmFsb25nQiYmbCh0LHUpKSwwPT09Zi5hbG9uZ0ImJigtMT09PWYuYWxvbmdBP2wobixvKTowPT09Zi5hbG9uZ0E/bChuLGYucHQpOjE9PT1mLmFsb25nQSYmbChuLHMpKTtyZXR1cm4hMX1mb3IodmFyIGY9W107IWEuaXNFbXB0eSgpOyl7dmFyIGg9YS5nZXRIZWFkKCk7aWYociYmci52ZXJ0KGgucHRbMF0pLGguaXNTdGFydCl7ciYmci5zZWdtZW50TmV3KGguc2VnLGgucHJpbWFyeSk7dmFyIHA9YyhoKSxkPXAuYmVmb3JlP3AuYmVmb3JlLmV2Om51bGwsZz1wLmFmdGVyP3AuYWZ0ZXIuZXY6bnVsbDtmdW5jdGlvbiB2KCl7aWYoZCl7dmFyIHQ9dShoLGQpO2lmKHQpcmV0dXJuIHR9cmV0dXJuISFnJiZ1KGgsZyl9ciYmci50ZW1wU3RhdHVzKGguc2VnLCEhZCYmZC5zZWcsISFnJiZnLnNlZyk7dmFyIG0seSx4PXYoKTtpZih4KXQ/KHk9bnVsbD09PWguc2VnLm15RmlsbC5iZWxvd3x8aC5zZWcubXlGaWxsLmFib3ZlIT09aC5zZWcubXlGaWxsLmJlbG93KSYmKHguc2VnLm15RmlsbC5hYm92ZT0heC5zZWcubXlGaWxsLmFib3ZlKTp4LnNlZy5vdGhlckZpbGw9aC5zZWcubXlGaWxsLHImJnIuc2VnbWVudFVwZGF0ZSh4LnNlZyksaC5vdGhlci5yZW1vdmUoKSxoLnJlbW92ZSgpO2lmKGEuZ2V0SGVhZCgpIT09aCl7ciYmci5yZXdpbmQoaC5zZWcpO2NvbnRpbnVlfXQ/KHk9bnVsbD09PWguc2VnLm15RmlsbC5iZWxvd3x8aC5zZWcubXlGaWxsLmFib3ZlIT09aC5zZWcubXlGaWxsLmJlbG93LGguc2VnLm15RmlsbC5iZWxvdz1nP2cuc2VnLm15RmlsbC5hYm92ZTppLGguc2VnLm15RmlsbC5hYm92ZT15PyFoLnNlZy5teUZpbGwuYmVsb3c6aC5zZWcubXlGaWxsLmJlbG93KTpudWxsPT09aC5zZWcub3RoZXJGaWxsJiYobT1nP2gucHJpbWFyeT09PWcucHJpbWFyeT9nLnNlZy5vdGhlckZpbGwuYWJvdmU6Zy5zZWcubXlGaWxsLmFib3ZlOmgucHJpbWFyeT9vOmksaC5zZWcub3RoZXJGaWxsPXthYm92ZTptLGJlbG93Om19KSxyJiZyLnN0YXR1cyhoLnNlZywhIWQmJmQuc2VnLCEhZyYmZy5zZWcpLGgub3RoZXIuc3RhdHVzPXAuaW5zZXJ0KG4ubm9kZSh7ZXY6aH0pKX1lbHNle3ZhciBiPWguc3RhdHVzO2lmKG51bGw9PT1iKXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7aWYocy5leGlzdHMoYi5wcmV2KSYmcy5leGlzdHMoYi5uZXh0KSYmdShiLnByZXYuZXYsYi5uZXh0LmV2KSxyJiZyLnN0YXR1c1JlbW92ZShiLmV2LnNlZyksYi5yZW1vdmUoKSwhaC5wcmltYXJ5KXt2YXIgXz1oLnNlZy5teUZpbGw7aC5zZWcubXlGaWxsPWguc2VnLm90aGVyRmlsbCxoLnNlZy5vdGhlckZpbGw9X31mLnB1c2goaC5zZWcpfWEuZ2V0SGVhZCgpLnJlbW92ZSgpfXJldHVybiByJiZyLmRvbmUoKSxmfXJldHVybiB0P3thZGRSZWdpb246ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGksYSxvPXRbdC5sZW5ndGgtMV0sbD0wO2w8dC5sZW5ndGg7bCsrKXtuPW8sbz10W2xdO3ZhciBjPWUucG9pbnRzQ29tcGFyZShuLG8pOzAhPT1jJiZzKChpPWM8MD9uOm8sYT1jPDA/bzpuLHtpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6aSxlbmQ6YSxteUZpbGw6e2Fib3ZlOm51bGwsYmVsb3c6bnVsbH0sb3RoZXJGaWxsOm51bGx9KSwhMCl9fSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwhMSl9fTp7Y2FsY3VsYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITApfSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3MoaSh0LnN0YXJ0LHQuZW5kLHQpLCExKX0pLGMoZSxuKX19fX0seyIuL2xpbmtlZC1saXN0Ijo0NzB9XSw0NzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXtyb290Ontyb290OiEwLG5leHQ6bnVsbH0sZXhpc3RzOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmZSE9PXQucm9vdH0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dC5yb290Lm5leHR9LGdldEhlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5yb290Lm5leHR9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj10LnJvb3QsaT10LnJvb3QubmV4dDtudWxsIT09aTspe2lmKHIoaSkpcmV0dXJuIGUucHJldj1pLnByZXYsZS5uZXh0PWksaS5wcmV2Lm5leHQ9ZSx2b2lkKGkucHJldj1lKTtuPWksaT1pLm5leHR9bi5uZXh0PWUsZS5wcmV2PW4sZS5uZXh0PW51bGx9LGZpbmRUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10LnJvb3Qsbj10LnJvb3QubmV4dDtudWxsIT09biYmIWUobik7KXI9bixuPW4ubmV4dDtyZXR1cm57YmVmb3JlOnI9PT10LnJvb3Q/bnVsbDpyLGFmdGVyOm4saW5zZXJ0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXY9cix0Lm5leHQ9bixyLm5leHQ9dCxudWxsIT09biYmKG4ucHJldj10KSx0fX19fTtyZXR1cm4gdH0sbm9kZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PW51bGwsdC5uZXh0PW51bGwsdC5yZW1vdmU9ZnVuY3Rpb24oKXt0LnByZXYubmV4dD10Lm5leHQsdC5uZXh0JiYodC5uZXh0LnByZXY9dC5wcmV2KSx0LnByZXY9bnVsbCx0Lm5leHQ9bnVsbH0sdH19fSx7fV0sNDcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bXSxpPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGE9dC5zdGFydCxvPXQuZW5kO2lmKGUucG9pbnRzU2FtZShhLG8pKWNvbnNvbGUud2FybigiUG9seUJvb2w6IFdhcm5pbmc6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7ZWxzZXtyJiZyLmNoYWluU3RhcnQodCk7Zm9yKHZhciBzPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0sbD17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGM9cyx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBmPSh2PW5bdV0pWzBdLGg9KHZbMV0sdlt2Lmxlbmd0aC0xXSk7aWYodlt2Lmxlbmd0aC0yXSxlLnBvaW50c1NhbWUoZixhKSl7aWYoVCh1LCEwLCEwKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShmLG8pKXtpZihUKHUsITAsITEpKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGgsYSkpe2lmKFQodSwhMSwhMCkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoaCxvKSYmVCh1LCExLCExKSlicmVha31pZihjPT09cylyZXR1cm4gbi5wdXNoKFthLG9dKSx2b2lkKHImJnIuY2hhaW5OZXcoYSxvKSk7aWYoYz09PWwpe3ImJnIuY2hhaW5NYXRjaChzLmluZGV4KTt2YXIgcD1zLmluZGV4LGQ9cy5tYXRjaGVzX3B0MT9vOmEsZz1zLm1hdGNoZXNfaGVhZCx2PW5bcF0sbT1nP3ZbMF06dlt2Lmxlbmd0aC0xXSx5PWc/dlsxXTp2W3YubGVuZ3RoLTJdLHg9Zz92W3YubGVuZ3RoLTFdOnZbMF0sYj1nP3Zbdi5sZW5ndGgtMl06dlsxXTtyZXR1cm4gZS5wb2ludHNDb2xsaW5lYXIoeSxtLGQpJiYoZz8ociYmci5jaGFpblJlbW92ZUhlYWQocy5pbmRleCxkKSx2LnNoaWZ0KCkpOihyJiZyLmNoYWluUmVtb3ZlVGFpbChzLmluZGV4LGQpLHYucG9wKCkpLG09eSksZS5wb2ludHNTYW1lKHgsZCk/KG4uc3BsaWNlKHAsMSksZS5wb2ludHNDb2xsaW5lYXIoYix4LG0pJiYoZz8ociYmci5jaGFpblJlbW92ZVRhaWwocy5pbmRleCxtKSx2LnBvcCgpKToociYmci5jaGFpblJlbW92ZUhlYWQocy5pbmRleCxtKSx2LnNoaWZ0KCkpKSxyJiZyLmNoYWluQ2xvc2Uocy5pbmRleCksdm9pZCBpLnB1c2godikpOnZvaWQoZz8ociYmci5jaGFpbkFkZEhlYWQocy5pbmRleCxkKSx2LnVuc2hpZnQoZCkpOihyJiZyLmNoYWluQWRkVGFpbChzLmluZGV4LGQpLHYucHVzaChkKSkpfXZhciBfPXMuaW5kZXgsdz1sLmluZGV4O3ImJnIuY2hhaW5Db25uZWN0KF8sdyk7dmFyIGs9bltfXS5sZW5ndGg8blt3XS5sZW5ndGg7cy5tYXRjaGVzX2hlYWQ/bC5tYXRjaGVzX2hlYWQ/az8oQShfKSxNKF8sdykpOihBKHcpLE0odyxfKSk6TSh3LF8pOmwubWF0Y2hlc19oZWFkP00oXyx3KTprPyhBKF8pLE0odyxfKSk6KEEodyksTShfLHcpKX1mdW5jdGlvbiBUKHQsZSxyKXtyZXR1cm4gYy5pbmRleD10LGMubWF0Y2hlc19oZWFkPWUsYy5tYXRjaGVzX3B0MT1yLGM9PT1zPyhjPWwsITEpOihjPW51bGwsITApfWZ1bmN0aW9uIEEodCl7ciYmci5jaGFpblJldmVyc2UodCksblt0XS5yZXZlcnNlKCl9ZnVuY3Rpb24gTSh0LGkpe3ZhciBhPW5bdF0sbz1uW2ldLHM9YVthLmxlbmd0aC0xXSxsPWFbYS5sZW5ndGgtMl0sYz1vWzBdLHU9b1sxXTtlLnBvaW50c0NvbGxpbmVhcihsLHMsYykmJihyJiZyLmNoYWluUmVtb3ZlVGFpbCh0LHMpLGEucG9wKCkscz1sKSxlLnBvaW50c0NvbGxpbmVhcihzLGMsdSkmJihyJiZyLmNoYWluUmVtb3ZlSGVhZChpLGMpLG8uc2hpZnQoKSksciYmci5jaGFpbkpvaW4odCxpKSxuW3RdPWEuY29uY2F0KG8pLG4uc3BsaWNlKGksMSl9fSksaX19LHt9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPSh0Lm15RmlsbC5hYm92ZT84OjApKyh0Lm15RmlsbC5iZWxvdz80OjApKyh0Lm90aGVyRmlsbCYmdC5vdGhlckZpbGwuYWJvdmU/MjowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmJlbG93PzE6MCk7MCE9PWVbaV0mJm4ucHVzaCh7aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kLG15RmlsbDp7YWJvdmU6MT09PWVbaV0sYmVsb3c6Mj09PWVbaV19LG90aGVyRmlsbDpudWxsfSl9KSxyJiZyLnNlbGVjdGVkKG4pLG59dmFyIGk9e3VuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwyLDIsMCwwLDEsMCwxLDAsMCwwLDAsMF0sZSl9LGludGVyc2VjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMCwwLDAsMCwyLDAsMiwwLDAsMSwxLDAsMiwxLDBdLGUpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwwLDAsMCwyLDAsMiwwLDEsMSwwLDAsMCwxLDIsMF0sZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDAsMCwxLDEsMCwyLDAsMiwwLDAsMCwwXSxlKX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwyLDAsMCwxLDEsMCwwLDIsMCwxLDIsMF0sZSl9fTtlLmV4cG9ydHM9aX0se31dLDQ3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1uZXcgRmxvYXQ2NEFycmF5KDQpLGk9bmV3IEZsb2F0NjRBcnJheSg0KSxhPW5ldyBGbG9hdDY0QXJyYXkoNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyl7bi5sZW5ndGg8by5sZW5ndGgmJihuPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpLGk9bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksYT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSk7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDsrK2wpbltsXT10W2xdLW9bbF0saVtsXT1lW2xdLXRbbF0sYVtsXT1yW2xdLXRbbF07dmFyIGM9MCx1PTAsZj0wLGg9MCxwPTAsZD0wO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpe3ZhciBnPWlbbF0sdj1hW2xdLG09bltsXTtjKz1nKmcsdSs9Zyp2LGYrPXYqdixoKz1tKmcscCs9bSp2LGQrPW0qbX12YXIgeSx4LGIsXyx3LGs9TWF0aC5hYnMoYypmLXUqdSksVD11KnAtZipoLEE9dSpoLWMqcDtpZihUK0E8PWspaWYoVDwwKUE8MCYmaDwwPyhBPTAsLWg+PWM/KFQ9MSx5PWMrMipoK2QpOnk9aCooVD0taC9jKStkKTooVD0wLHA+PTA/KEE9MCx5PWQpOi1wPj1mPyhBPTEseT1mKzIqcCtkKTp5PXAqKEE9LXAvZikrZCk7ZWxzZSBpZihBPDApQT0wLGg+PTA/KFQ9MCx5PWQpOi1oPj1jPyhUPTEseT1jKzIqaCtkKTp5PWgqKFQ9LWgvYykrZDtlbHNle3ZhciBNPTEvazt5PShUKj1NKSooYypUK3UqKEEqPU0pKzIqaCkrQSoodSpUK2YqQSsyKnApK2R9ZWxzZSBUPDA/KGI9ZitwKT4oeD11K2gpPyhfPWIteCk+PSh3PWMtMip1K2YpPyhUPTEsQT0wLHk9YysyKmgrZCk6eT0oVD1fL3cpKihjKlQrdSooQT0xLVQpKzIqaCkrQSoodSpUK2YqQSsyKnApK2Q6KFQ9MCxiPD0wPyhBPTEseT1mKzIqcCtkKTpwPj0wPyhBPTAseT1kKTp5PXAqKEE9LXAvZikrZCk6QTwwPyhiPWMraCk+KHg9dStwKT8oXz1iLXgpPj0odz1jLTIqdStmKT8oQT0xLFQ9MCx5PWYrMipwK2QpOnk9KFQ9MS0oQT1fL3cpKSooYypUK3UqQSsyKmgpK0EqKHUqVCtmKkErMipwKStkOihBPTAsYjw9MD8oVD0xLHk9YysyKmgrZCk6aD49MD8oVD0wLHk9ZCk6eT1oKihUPS1oL2MpK2QpOihfPWYrcC11LWgpPD0wPyhUPTAsQT0xLHk9ZisyKnArZCk6Xz49KHc9Yy0yKnUrZik/KFQ9MSxBPTAseT1jKzIqaCtkKTp5PShUPV8vdykqKGMqVCt1KihBPTEtVCkrMipoKStBKih1KlQrZipBKzIqcCkrZDt2YXIgUz0xLVQtQTtmb3IobD0wO2w8by5sZW5ndGg7KytsKXNbbF09Uyp0W2xdK1QqZVtsXStBKnJbbF07cmV0dXJuIHk8MD8wOnl9fSx7fV0sNDc0OltmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbCh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09b3x8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6b31jYXRjaCh0KXtuPW99dHJ5e2k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6c31jYXRjaCh0KXtpPXN9fSgpO3ZhciBjLHU9W10sZj0hMSxoPS0xO2Z1bmN0aW9uIHAoKXtmJiZjJiYoZj0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmg9LTEsdS5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFmKXt2YXIgdD1sKHApO2Y9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3IoYz11LHU9W107KytoPGU7KWMmJmNbaF0ucnVuKCk7aD0tMSxlPXUubGVuZ3RofWM9bnVsbCxmPSExLGZ1bmN0aW9uKHQpe2lmKGk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoaT09PXN8fCFpKSYmY2xlYXJUaW1lb3V0KXJldHVybiBpPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e2kodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBpLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gaS5jYWxsKHRoaXMsdCl9fX0odCl9fWZ1bmN0aW9uIGcodCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiB2KCl7fWEubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTt1LnB1c2gobmV3IGcodCxlKSksMSE9PXUubGVuZ3RofHxmfHxsKGQpfSxnLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxhLnRpdGxlPSJicm93c2VyIixhLmJyb3dzZXI9ITAsYS5lbnY9e30sYS5hcmd2PVtdLGEudmVyc2lvbj0iIixhLnZlcnNpb25zPXt9LGEub249dixhLmFkZExpc3RlbmVyPXYsYS5vbmNlPXYsYS5vZmY9dixhLnJlbW92ZUxpc3RlbmVyPXYsYS5yZW1vdmVBbGxMaXN0ZW5lcnM9dixhLmVtaXQ9dixhLnByZXBlbmRMaXN0ZW5lcj12LGEucHJlcGVuZE9uY2VMaXN0ZW5lcj12LGEubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxhLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxhLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sYS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxhLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sNDc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImdsLXF1YXQvc2xlcnAiKX0seyJnbC1xdWF0L3NsZXJwIjoyODl9XSw0NzY6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQoInBlcmZvcm1hbmNlLW5vdyIpLGk9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/cjp3aW5kb3csYT1bIm1veiIsIndlYmtpdCJdLG89IkFuaW1hdGlvbkZyYW1lIixzPWlbInJlcXVlc3QiK29dLGw9aVsiY2FuY2VsIitvXXx8aVsiY2FuY2VsUmVxdWVzdCIrb10sYz0wOyFzJiZjPGEubGVuZ3RoO2MrKylzPWlbYVtjXSsiUmVxdWVzdCIrb10sbD1pW2FbY10rIkNhbmNlbCIrb118fGlbYVtjXSsiQ2FuY2VsUmVxdWVzdCIrb107aWYoIXN8fCFsKXt2YXIgdT0wLGY9MCxoPVtdO3M9ZnVuY3Rpb24odCl7aWYoMD09PWgubGVuZ3RoKXt2YXIgZT1uKCkscj1NYXRoLm1heCgwLDFlMy82MC0oZS11KSk7dT1yK2Usc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PWguc2xpY2UoMCk7aC5sZW5ndGg9MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZighdFtlXS5jYW5jZWxsZWQpdHJ5e3RbZV0uY2FsbGJhY2sodSl9Y2F0Y2godCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHR9LDApfX0sTWF0aC5yb3VuZChyKSl9cmV0dXJuIGgucHVzaCh7aGFuZGxlOisrZixjYWxsYmFjazp0LGNhbmNlbGxlZDohMX0pLGZ9LGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxoLmxlbmd0aDtlKyspaFtlXS5oYW5kbGU9PT10JiYoaFtlXS5jYW5jZWxsZWQ9ITApfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FsbChpLHQpfSxlLmV4cG9ydHMuY2FuY2VsPWZ1bmN0aW9uKCl7bC5hcHBseShpLGFyZ3VtZW50cyl9LGUuZXhwb3J0cy5wb2x5ZmlsbD1mdW5jdGlvbih0KXt0fHwodD1pKSx0LnJlcXVlc3RBbmltYXRpb25GcmFtZT1zLHQuY2FuY2VsQW5pbWF0aW9uRnJhbWU9bH19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsicGVyZm9ybWFuY2Utbm93Ijo0NTR9XSw0Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmlnLXJhdC9hZGQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1uKHRbYV0sZVthXSk7cmV0dXJuIGl9fSx7ImJpZy1yYXQvYWRkIjo2NX1dLDQ3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKWVbcl09bih0W3JdKTtyZXR1cm4gZX07dmFyIG49dCgiYmlnLXJhdCIpfSx7ImJpZy1yYXQiOjY4fV0sNDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpZy1yYXQiKSxpPXQoImJpZy1yYXQvbXVsIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4oZSksYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPTA7czxhOysrcylvW3NdPWkodFtzXSxyKTtyZXR1cm4gb319LHsiYmlnLXJhdCI6NjgsImJpZy1yYXQvbXVsIjo3N31dLDQ4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaWctcmF0L3N1YiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHsiYmlnLXJhdC9zdWIiOjc5fV0sNDgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbXBhcmUtY2VsbCIpLGk9dCgiY29tcGFyZS1vcmllbnRlZC1jZWxsIiksYT10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3Quc29ydChpKTtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG89MDtvPGU7KytvKXt2YXIgcz10W29dLGw9YShzKTtpZigwIT09bCl7aWYocj4wKXt2YXIgYz10W3ItMV07aWYoMD09PW4ocyxjKSYmYShjKSE9PWwpe3ItPTE7Y29udGludWV9fXRbcisrXT1zfX1yZXR1cm4gdC5sZW5ndGg9cix0fX0seyJjZWxsLW9yaWVudGF0aW9uIjoxMDIsImNvbXBhcmUtY2VsbCI6MTE4LCJjb21wYXJlLW9yaWVudGVkLWNlbGwiOjExOX1dLDQ4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJhcnJheS1ib3VuZHMiKSxpPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGE9dCgidXBkYXRlLWRpZmYiKSxvPXQoInBpY2stYnktYWxpYXMiKSxzPXQoIm9iamVjdC1hc3NpZ24iKSxsPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxjPXQoInRvLWZsb2F0MzIiKSx1PWMuZmxvYXQzMixmPWMuZnJhY3QzMjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQ7ZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTtpZighKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSl0aHJvdyBFcnJvcigicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkIik7dmFyIHIsYyxwLGQsZyx2LG09dC5fZ2wseT17Y29sb3I6ImJsYWNrIixjYXBTaXplOjUsbGluZVdpZHRoOjEsb3BhY2l0eToxLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxvZmZzZXQ6MCxjb3VudDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxlcnJvcnM6W119LHg9W107cmV0dXJuIGQ9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGM9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHA9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGc9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHY9dC5idWZmZXIoe3VzYWdlOiJzdGF0aWMiLHR5cGU6ImZsb2F0IixkYXRhOmh9KSxrKGUpLHI9dCh7dmVydDoiXG5cdFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5cdFx0YXR0cmlidXRlIHZlYzIgcG9zaXRpb24sIHBvc2l0aW9uRnJhY3Q7XG5cdFx0YXR0cmlidXRlIHZlYzQgZXJyb3I7XG5cdFx0YXR0cmlidXRlIHZlYzQgY29sb3I7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMiBkaXJlY3Rpb24sIGxpbmVPZmZzZXQsIGNhcE9mZnNldDtcblxuXHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHR1bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCwgY2FwU2l6ZTtcblx0XHR1bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG5cblx0XHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5cdFx0dm9pZCBtYWluKCkge1xuXHRcdFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xuXG5cdFx0XHR2ZWMyIHBpeGVsT2Zmc2V0ID0gbGluZVdpZHRoICogbGluZU9mZnNldCArIChjYXBTaXplICsgbGluZVdpZHRoKSAqIGNhcE9mZnNldDtcblxuXHRcdFx0dmVjMiBkeHkgPSAtc3RlcCguNSwgZGlyZWN0aW9uLnh5KSAqIGVycm9yLnh6ICsgc3RlcChkaXJlY3Rpb24ueHksIHZlYzIoLS41KSkgKiBlcnJvci55dztcblxuXHRcdFx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICsgZHh5O1xuXG5cdFx0XHR2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuXHRcdFx0XHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcblx0XHRcdFx0KyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuXHRcdFx0XHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuXHRcdFx0cG9zICs9IHBpeGVsT2Zmc2V0IC8gdmlld3BvcnQuenc7XG5cblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLCAxKTtcblx0XHR9XG5cdFx0IixmcmFnOiJcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxuXHRcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblx0XHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cdFx0XHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdFx0XHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xuXHRcdH1cblx0XHQiLHVuaWZvcm1zOntyYW5nZTp0LnByb3AoInJhbmdlIiksbGluZVdpZHRoOnQucHJvcCgibGluZVdpZHRoIiksY2FwU2l6ZTp0LnByb3AoImNhcFNpemUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHNjYWxlOnQucHJvcCgic2NhbGUiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX19LGF0dHJpYnV0ZXM6e2NvbG9yOntidWZmZXI6ZCxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gNCplLm9mZnNldH0sZGl2aXNvcjoxfSxwb3NpdGlvbjp7YnVmZmVyOmMsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnAsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZXJyb3I6e2J1ZmZlcjpnLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiAxNiplLm9mZnNldH0sZGl2aXNvcjoxfSxkaXJlY3Rpb246e2J1ZmZlcjp2LHN0cmlkZToyNCxvZmZzZXQ6MH0sbGluZU9mZnNldDp7YnVmZmVyOnYsc3RyaWRlOjI0LG9mZnNldDo4fSxjYXBPZmZzZXQ6e2J1ZmZlcjp2LHN0cmlkZToyNCxvZmZzZXQ6MTZ9fSxwcmltaXRpdmU6InRyaWFuZ2xlcyIsYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKSxzdGVuY2lsOiExLGluc3RhbmNlczp0LnByb3AoImNvdW50IiksY291bnQ6aC5sZW5ndGh9KSxzKGIse3VwZGF0ZTprLGRyYXc6XyxkZXN0cm95OlQscmVnbDp0LGdsOm0sY2FudmFzOm0uY2FudmFzLGdyb3Vwczp4fSksYjtmdW5jdGlvbiBiKHQpe3Q/ayh0KTpudWxsPT09dCYmVCgpLF8oKX1mdW5jdGlvbiBfKGUpe2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gdyhlKTtlJiYhQXJyYXkuaXNBcnJheShlKSYmKGU9W2VdKSx0Ll9yZWZyZXNoKCkseC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dCYmKGUmJihlW3JdP3QuZHJhdz0hMDp0LmRyYXc9ITEpLHQuZHJhdz93KHIpOnQuZHJhdz0hMCl9KX1mdW5jdGlvbiB3KHQpeyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9eFt0XSksbnVsbCE9dCYmdCYmdC5jb3VudCYmdC5jb2xvciYmdC5vcGFjaXR5JiZ0LnBvc2l0aW9ucyYmdC5wb3NpdGlvbnMubGVuZ3RoPjEmJih0LnNjYWxlUmF0aW89W3Quc2NhbGVbMF0qdC52aWV3cG9ydC53aWR0aCx0LnNjYWxlWzFdKnQudmlld3BvcnQuaGVpZ2h0XSxyKHQpLHQuYWZ0ZXImJnQuYWZ0ZXIodCkpfWZ1bmN0aW9uIGsodCl7aWYodCl7bnVsbCE9dC5sZW5ndGg/Im51bWJlciI9PXR5cGVvZiB0WzBdJiYodD1be3Bvc2l0aW9uczp0fV0pOkFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIGU9MCxyPTA7aWYoYi5ncm91cHM9eD10Lm1hcChmdW5jdGlvbih0LGMpe3ZhciB1PXhbY107cmV0dXJuIHQ/KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q9e2FmdGVyOnR9OiJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1vKHQse2NvbG9yOiJjb2xvciBjb2xvcnMgZmlsbCIsY2FwU2l6ZToiY2FwU2l6ZSBjYXAgY2Fwc2l6ZSBjYXAtc2l6ZSIsbGluZVdpZHRoOiJsaW5lV2lkdGggbGluZS13aWR0aCB3aWR0aCBsaW5lIHRoaWNrbmVzcyIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3Qm94IixlcnJvcnM6ImVycm9ycyBlcnJvciIscG9zaXRpb25zOiJwb3NpdGlvbnMgcG9zaXRpb24gZGF0YSBwb2ludHMifSksdXx8KHhbY109dT17aWQ6YyxzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGRyYXc6ITB9LHQ9cyh7fSx5LHQpKSxhKHUsdCxbe2xpbmVXaWR0aDpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sY2FwU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sb3BhY2l0eTpwYXJzZUZsb2F0LGVycm9yczpmdW5jdGlvbih0KXtyZXR1cm4gdD1sKHQpLHIrPXQubGVuZ3RoLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LHIpe3JldHVybiB0PWwodCwiZmxvYXQ2NCIpLHIuY291bnQ9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKSxyLmJvdW5kcz1uKHQsMiksci5vZmZzZXQ9ZSxlKz1yLmNvdW50LHR9fSx7Y29sb3I6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNvdW50O2lmKHR8fCh0PSJ0cmFuc3BhcmVudCIpLCFBcnJheS5pc0FycmF5KHQpfHwibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBuPXQ7dD1BcnJheShyKTtmb3IodmFyIGE9MDthPHI7YSsrKXRbYV09bn1pZih0Lmxlbmd0aDxyKXRocm93IEVycm9yKCJOb3QgZW5vdWdoIGNvbG9ycyIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheSg0KnIpLHM9MDtzPHI7cysrKXt2YXIgbD1pKHRbc10sInVpbnQ4Iik7by5zZXQobCw0KnMpfXJldHVybiBvfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7cmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9ZihlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWYoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U9e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19OnQ/KGU9e3g6dC54fHx0LmxlZnR8fDAseTp0Lnl8fHQudG9wfHwwfSx0LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD10Lnd8fHQud2lkdGh8fDAsdC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PXQuaHx8dC5oZWlnaHR8fDApOmU9e3g6MCx5OjAsd2lkdGg6bS5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0Om0uZHJhd2luZ0J1ZmZlckhlaWdodH0sZX19XSksdSk6dX0pLGV8fHIpe3ZhciBoPXgucmVkdWNlKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCsoZT9lLmNvdW50OjApfSwwKSx2PW5ldyBGbG9hdDY0QXJyYXkoMipoKSxfPW5ldyBVaW50OEFycmF5KDQqaCksdz1uZXcgRmxvYXQzMkFycmF5KDQqaCk7eC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7aWYodCl7dmFyIHI9dC5wb3NpdGlvbnMsbj10LmNvdW50LGk9dC5vZmZzZXQsYT10LmNvbG9yLG89dC5lcnJvcnM7biYmKF8uc2V0KGEsNCppKSx3LnNldChvLDQqaSksdi5zZXQociwyKmkpKX19KSxjKHUodikpLHAoZih2KSksZChfKSxnKHcpfX19ZnVuY3Rpb24gVCgpe2MuZGVzdHJveSgpLHAuZGVzdHJveSgpLGQuZGVzdHJveSgpLGcuZGVzdHJveSgpLHYuZGVzdHJveSgpfX07dmFyIGg9W1sxLDAsMCwxLDAsMF0sWzEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLDEsMCwwXSxbMSwwLDAsMSwwLDBdLFsxLDAsLTEsMCwwLDFdLFsxLDAsLTEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLDFdLFsxLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFswLDEsMSwwLDAsMF0sWzAsMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwxLDEsMCwwLDBdLFswLC0xLDEsMCwwLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwtMSwtMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwxLDAsMSwxLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwxLC0xLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLC0xLC0xLDBdLFswLC0xLDAsMSwtMSwwXSxbMCwtMSwwLDEsMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwxLC0xLDBdXX0seyJhcnJheS1ib3VuZHMiOjU1LCJjb2xvci1ub3JtYWxpemUiOjExMCwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjIzLCJvYmplY3QtYXNzaWduIjo0NDYsInBpY2stYnktYWxpYXMiOjQ1NywidG8tZmxvYXQzMiI6NTIyLCJ1cGRhdGUtZGlmZiI6NTMzfV0sNDgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGk9dCgiYXJyYXktYm91bmRzIiksYT10KCJvYmplY3QtYXNzaWduIiksbz10KCJnbHNsaWZ5Iikscz10KCJwaWNrLWJ5LWFsaWFzIiksbD10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksYz10KCJlYXJjdXQiKSx1PXQoImFycmF5LW5vcm1hbGl6ZSIpLGY9dCgidG8tZmxvYXQzMiIpLGg9Zi5mbG9hdDMyLHA9Zi5mcmFjdDMyLGQ9dCgiZXM2LXdlYWstbWFwIiksZz10KCJwYXJzZS1yZWN0Iik7ZnVuY3Rpb24gdih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHYpKXJldHVybiBuZXcgdih0LGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOmU9dCxlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpLCEodD1lLnJlZ2wpLmhhc0V4dGVuc2lvbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXRocm93IEVycm9yKCJyZWdsLWVycm9yMmQ6IGBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzYCBleHRlbnNpb24gc2hvdWxkIGJlIGVuYWJsZWQiKTt0aGlzLmdsPXQuX2dsLHRoaXMucmVnbD10LHRoaXMucGFzc2VzPVtdLHRoaXMuc2hhZGVycz12LnNoYWRlcnMuaGFzKHQpP3Yuc2hhZGVycy5nZXQodCk6di5zaGFkZXJzLnNldCh0LHYuY3JlYXRlU2hhZGVycyh0KSkuZ2V0KHQpLHRoaXMudXBkYXRlKGUpfWUuZXhwb3J0cz12LHYuZGFzaE11bHQ9Mix2Lm1heFBhdHRlcm5MZW5ndGg9MjU2LHYucHJlY2lzaW9uVGhyZXNob2xkPTNlNix2Lm1heFBvaW50cz0xZTQsdi5tYXhMaW5lcz0yMDQ4LHYuc2hhZGVycz1uZXcgZCx2LmNyZWF0ZVNoYWRlcnM9ZnVuY3Rpb24odCl7dmFyIGUscj10LmJ1ZmZlcih7dXNhZ2U6InN0YXRpYyIsdHlwZToiZmxvYXQiLGRhdGE6WzAsMSwwLDAsMSwxLDEsMF19KSxuPXtwcmltaXRpdmU6InRyaWFuZ2xlIHN0cmlwIixpbnN0YW5jZXM6dC5wcm9wKCJjb3VudCIpLGNvdW50OjQsb2Zmc2V0OjAsdW5pZm9ybXM6e21pdGVyTW9kZTpmdW5jdGlvbih0LGUpe3JldHVybiJyb3VuZCI9PT1lLmpvaW4/MjoxfSxtaXRlckxpbWl0OnQucHJvcCgibWl0ZXJMaW1pdCIpLHNjYWxlOnQucHJvcCgic2NhbGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSx0aGlja25lc3M6dC5wcm9wKCJ0aGlja25lc3MiKSxkYXNoUGF0dGVybjp0LnByb3AoImRhc2hUZXh0dXJlIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSxwaXhlbFJhdGlvOnQuY29udGV4dCgicGl4ZWxSYXRpbyIpLGlkOnQucHJvcCgiaWQiKSxkYXNoU2l6ZTp0LnByb3AoImRhc2hMZW5ndGgiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX0sZGVwdGg6dC5wcm9wKCJkZXB0aCIpfSxibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwwXSxlcXVhdGlvbjp7cmdiOiJhZGQiLGFscGhhOiJhZGQifSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToib25lIG1pbnVzIGRzdCBhbHBoYSIsZHN0QWxwaGE6Im9uZSJ9fSxkZXB0aDp7ZW5hYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIWUub3ZlcmxheX19LHN0ZW5jaWw6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKX0saT10KGEoe3ZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGFDb29yZCwgYkNvb3JkLCBhQ29vcmRGcmFjdCwgYkNvb3JkRnJhY3Q7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRW5kLCBsaW5lVG9wO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzcywgcGl4ZWxSYXRpbywgaWQsIGRlcHRoO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG5cbnZlYzIgcHJvamVjdCh2ZWMyIHBvc2l0aW9uLCB2ZWMyIHBvc2l0aW9uRnJhY3QsIHZlYzIgc2NhbGUsIHZlYzIgc2NhbGVGcmFjdCwgdmVjMiB0cmFuc2xhdGUsIHZlYzIgdHJhbnNsYXRlRnJhY3QpIHtcblx0Ly8gdGhlIG9yZGVyIGlzIGltcG9ydGFudFxuXHRyZXR1cm4gcG9zaXRpb24gKiBzY2FsZSArIHRyYW5zbGF0ZVxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlICsgdHJhbnNsYXRlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uICogc2NhbGVGcmFjdFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlRnJhY3Q7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgbGluZVN0YXJ0ID0gMS4gLSBsaW5lRW5kO1xuXHRmbG9hdCBsaW5lT2Zmc2V0ID0gbGluZVRvcCAqIDIuIC0gMS47XG5cblx0dmVjMiBkaWZmID0gKGJDb29yZCArIGJDb29yZEZyYWN0IC0gYUNvb3JkIC0gYUNvb3JkRnJhY3QpO1xuXHR0YW5nZW50ID0gbm9ybWFsaXplKGRpZmYgKiBzY2FsZSAqIHZpZXdwb3J0Lnp3KTtcblx0dmVjMiBub3JtYWwgPSB2ZWMyKC10YW5nZW50LnksIHRhbmdlbnQueCk7XG5cblx0dmVjMiBwb3NpdGlvbiA9IHByb2plY3QoYUNvb3JkLCBhQ29vcmRGcmFjdCwgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QpICogbGluZVN0YXJ0XG5cdFx0KyBwcm9qZWN0KGJDb29yZCwgYkNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVFbmRcblxuXHRcdCsgdGhpY2tuZXNzICogbm9ybWFsICogLjUgKiBsaW5lT2Zmc2V0IC8gdmlld3BvcnQuenc7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XG5cblx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xufVxuIl0pLGZyYWc6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hQYXR0ZXJuO1xuXG51bmlmb3JtIGZsb2F0IGRhc2hTaXplLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgYWxwaGEgPSAxLjtcblxuXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoU2l6ZSkgKiAuNSArIC4yNTtcblx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoUGF0dGVybiwgdmVjMih0LCAuNSkpLnI7XG5cblx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHkgKiBkYXNoO1xufVxuIl0pLGF0dHJpYnV0ZXM6e2xpbmVFbmQ6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6MH0sbGluZVRvcDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDo0fSxhQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sYUNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZEZyYWN0OntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkZyYWN0QnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sY29sb3I6e2J1ZmZlcjp0LnByb3AoImNvbG9yQnVmZmVyIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfX19LG4pKTt0cnl7ZT10KGEoe2N1bGw6e2VuYWJsZTohMCxmYWNlOiJiYWNrIn0sdmVydDpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIG5leHRDb29yZCwgcHJldkNvb3JkO1xuYXR0cmlidXRlIHZlYzQgYUNvbG9yLCBiQ29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCB0cmFuc2xhdGU7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzcywgcGl4ZWxSYXRpbywgaWQsIGRlcHRoO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBtaXRlckxpbWl0LCBtaXRlck1vZGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzQgc3RhcnRDdXRvZmYsIGVuZEN1dG9mZjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcblxuY29uc3QgZmxvYXQgUkVWRVJTRV9USFJFU0hPTEQgPSAtLjg3NTtcbmNvbnN0IGZsb2F0IE1JTl9ESUZGID0gMWUtNjtcblxuLy8gVE9ETzogcG9zc2libGUgb3B0aW1pemF0aW9uczogYXZvaWQgb3ZlcmNhbGN1bGF0aW5nIGFsbCBmb3IgdmVydGljZXMgYW5kIGNhbGMganVzdCBvbmUgaW5zdGVhZFxuLy8gVE9ETzogcHJlY2FsY3VsYXRlIGRvdCBwcm9kdWN0cywgbm9ybWFsaXplIHRoaW5ncyBiZWZvcmVoZWFkIGV0Yy5cbi8vIFRPRE86IHJlZmFjdG9yIHRvIHJlY3Rhbmd1bGFyIGFsZ29yaXRobVxuXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcblx0dmVjMiBkaWZmID0gYiAtIGE7XG5cdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xuXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcbn1cblxuYm9vbCBpc05hTiggZmxvYXQgdmFsICl7XG4gIHJldHVybiAoIHZhbCA8IDAuMCB8fCAwLjAgPCB2YWwgfHwgdmFsID09IDAuMCApID8gZmFsc2UgOiB0cnVlO1xufVxuXG52b2lkIG1haW4oKSB7XG5cdHZlYzIgYUNvb3JkID0gYUNvb3JkLCBiQ29vcmQgPSBiQ29vcmQsIHByZXZDb29yZCA9IHByZXZDb29yZCwgbmV4dENvb3JkID0gbmV4dENvb3JkO1xuXG4gIHZlYzIgYWRqdXN0ZWRTY2FsZTtcbiAgYWRqdXN0ZWRTY2FsZS54ID0gKGFicyhzY2FsZS54KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueDtcbiAgYWRqdXN0ZWRTY2FsZS55ID0gKGFicyhzY2FsZS55KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueTtcblxuICB2ZWMyIHNjYWxlUmF0aW8gPSBhZGp1c3RlZFNjYWxlICogdmlld3BvcnQuenc7XG5cdHZlYzIgbm9ybWFsV2lkdGggPSB0aGlja25lc3MgLyBzY2FsZVJhdGlvO1xuXG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZUJvdCA9IDEuIC0gbGluZVRvcDtcblxuXHRmcmFnQ29sb3IgPSAobGluZVN0YXJ0ICogYUNvbG9yICsgbGluZUVuZCAqIGJDb2xvcikgLyAyNTUuO1xuXG5cdGlmIChpc05hTihhQ29vcmQueCkgfHwgaXNOYU4oYUNvb3JkLnkpIHx8IGlzTmFOKGJDb29yZC54KSB8fCBpc05hTihiQ29vcmQueSkpIHJldHVybjtcblxuXHRpZiAoYUNvb3JkID09IHByZXZDb29yZCkgcHJldkNvb3JkID0gYUNvb3JkICsgbm9ybWFsaXplKGJDb29yZCAtIGFDb29yZCk7XG5cdGlmIChiQ29vcmQgPT0gbmV4dENvb3JkKSBuZXh0Q29vcmQgPSBiQ29vcmQgLSBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcblxuXHR2ZWMyIHByZXZEaWZmID0gYUNvb3JkIC0gcHJldkNvb3JkO1xuXHR2ZWMyIGN1cnJEaWZmID0gYkNvb3JkIC0gYUNvb3JkO1xuXHR2ZWMyIG5leHREaWZmID0gbmV4dENvb3JkIC0gYkNvb3JkO1xuXG5cdHZlYzIgcHJldlRhbmdlbnQgPSBub3JtYWxpemUocHJldkRpZmYgKiBzY2FsZVJhdGlvKTtcblx0dmVjMiBjdXJyVGFuZ2VudCA9IG5vcm1hbGl6ZShjdXJyRGlmZiAqIHNjYWxlUmF0aW8pO1xuXHR2ZWMyIG5leHRUYW5nZW50ID0gbm9ybWFsaXplKG5leHREaWZmICogc2NhbGVSYXRpbyk7XG5cblx0dmVjMiBwcmV2Tm9ybWFsID0gdmVjMigtcHJldlRhbmdlbnQueSwgcHJldlRhbmdlbnQueCk7XG5cdHZlYzIgY3Vyck5vcm1hbCA9IHZlYzIoLWN1cnJUYW5nZW50LnksIGN1cnJUYW5nZW50LngpO1xuXHR2ZWMyIG5leHROb3JtYWwgPSB2ZWMyKC1uZXh0VGFuZ2VudC55LCBuZXh0VGFuZ2VudC54KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IG5vcm1hbGl6ZShwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0dmVjMiBlbmRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKGN1cnJUYW5nZW50IC0gbmV4dFRhbmdlbnQpO1xuXG5cdC8vIGNvbGxhcHNlZC91bmlkaXJlY3Rpb25hbCBzZWdtZW50IGNhc2VzXG5cdC8vIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgbW9yZSBlbGVnYW50IHNvbHV0aW9uXG5cdHZlYzIgcHJldlRhbkRpZmYgPSBhYnMocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdHZlYzIgbmV4dFRhbkRpZmYgPSBhYnMobmV4dFRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdGlmIChtYXgocHJldlRhbkRpZmYueCwgcHJldlRhbkRpZmYueSkgPCBNSU5fRElGRikge1xuXHRcdHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKG1heChuZXh0VGFuRGlmZi54LCBuZXh0VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XG5cdFx0ZW5kSm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKGFDb29yZCA9PSBiQ29vcmQpIHtcblx0XHRlbmRKb2luRGlyZWN0aW9uID0gc3RhcnRKb2luRGlyZWN0aW9uO1xuXHRcdGN1cnJOb3JtYWwgPSBwcmV2Tm9ybWFsO1xuXHRcdGN1cnJUYW5nZW50ID0gcHJldlRhbmdlbnQ7XG5cdH1cblxuXHR0YW5nZW50ID0gY3VyclRhbmdlbnQ7XG5cblx0Ly9jYWxjdWxhdGUgam9pbiBzaGlmdHMgcmVsYXRpdmUgdG8gbm9ybWFsc1xuXHRmbG9hdCBzdGFydEpvaW5TaGlmdCA9IGRvdChjdXJyTm9ybWFsLCBzdGFydEpvaW5EaXJlY3Rpb24pO1xuXHRmbG9hdCBlbmRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgZW5kSm9pbkRpcmVjdGlvbik7XG5cblx0ZmxvYXQgc3RhcnRNaXRlclJhdGlvID0gYWJzKDEuIC8gc3RhcnRKb2luU2hpZnQpO1xuXHRmbG9hdCBlbmRNaXRlclJhdGlvID0gYWJzKDEuIC8gZW5kSm9pblNoaWZ0KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIHN0YXJ0TWl0ZXJSYXRpbztcblx0dmVjMiBlbmRKb2luID0gZW5kSm9pbkRpcmVjdGlvbiAqIGVuZE1pdGVyUmF0aW87XG5cblx0dmVjMiBzdGFydFRvcEpvaW4sIHN0YXJ0Qm90Sm9pbiwgZW5kVG9wSm9pbiwgZW5kQm90Sm9pbjtcblx0c3RhcnRUb3BKb2luID0gc2lnbihzdGFydEpvaW5TaGlmdCkgKiBzdGFydEpvaW4gKiAuNTtcblx0c3RhcnRCb3RKb2luID0gLXN0YXJ0VG9wSm9pbjtcblxuXHRlbmRUb3BKb2luID0gc2lnbihlbmRKb2luU2hpZnQpICogZW5kSm9pbiAqIC41O1xuXHRlbmRCb3RKb2luID0gLWVuZFRvcEpvaW47XG5cblx0dmVjMiBhVG9wQ29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0VG9wSm9pbjtcblx0dmVjMiBiVG9wQ29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XG5cdHZlYzIgYUJvdENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XG5cdHZlYzIgYkJvdENvb3JkID0gYkNvb3JkICsgbm9ybWFsV2lkdGggKiBlbmRCb3RKb2luO1xuXG5cdC8vbWl0ZXIgYW50aS1jbGlwcGluZ1xuXHRmbG9hdCBiYUNsaXBwaW5nID0gZGlzdFRvTGluZShiQ29vcmQsIGFDb29yZCwgYUJvdENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSwgbm9ybWFsaXplKG5vcm1hbFdpZHRoLnl4ICogdmVjMigtc3RhcnRCb3RKb2luLnksIHN0YXJ0Qm90Sm9pbi54KSkpO1xuXHRmbG9hdCBhYkNsaXBwaW5nID0gZGlzdFRvTGluZShhQ29vcmQsIGJDb29yZCwgYlRvcENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1lbmRCb3RKb2luLnksIGVuZEJvdEpvaW4ueCkpKTtcblxuXHQvL3ByZXZlbnQgY2xvc2UgdG8gcmV2ZXJzZSBkaXJlY3Rpb24gc3dpdGNoXG5cdGJvb2wgcHJldlJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIHByZXZUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBwcmV2Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKHByZXZEaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cdGJvb2wgbmV4dFJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBuZXh0Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKG5leHREaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cblx0aWYgKHByZXZSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gc3RhcnRNaXRlclJhdGlvLCAxLik7XG5cdFx0YUJvdENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHRcdGFUb3BDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0fVxuXHRlbHNlIGlmICghbmV4dFJldmVyc2UgJiYgYmFDbGlwcGluZyA+IDAuICYmIGJhQ2xpcHBpbmcgPCBsZW5ndGgobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSkge1xuXHRcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXG5cdFx0YlRvcENvb3JkIC09IG5vcm1hbFdpZHRoICogZW5kVG9wSm9pbjtcblx0XHRiVG9wQ29vcmQgKz0gbm9ybWFsaXplKGVuZFRvcEpvaW4gKiBub3JtYWxXaWR0aCkgKiBiYUNsaXBwaW5nO1xuXHR9XG5cblx0aWYgKG5leHRSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIGVuZEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIGVuZE1pdGVyUmF0aW8sIDEuKTtcblx0XHRiQm90Q29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdFx0YlRvcENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHR9XG5cdGVsc2UgaWYgKCFwcmV2UmV2ZXJzZSAmJiBhYkNsaXBwaW5nID4gMC4gJiYgYWJDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbikpIHtcblx0XHQvL2hhbmRsZSBtaXRlciBjbGlwcGluZ1xuXHRcdGFCb3RDb29yZCAtPSBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcblx0XHRhQm90Q29vcmQgKz0gbm9ybWFsaXplKHN0YXJ0Qm90Sm9pbiAqIG5vcm1hbFdpZHRoKSAqIGFiQ2xpcHBpbmc7XG5cdH1cblxuXHR2ZWMyIGFUb3BQb3NpdGlvbiA9IChhVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblx0dmVjMiBhQm90UG9zaXRpb24gPSAoYUJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cblx0dmVjMiBiVG9wUG9zaXRpb24gPSAoYlRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cdHZlYzIgYkJvdFBvc2l0aW9uID0gKGJCb3RDb29yZCkgKiBhZGp1c3RlZFNjYWxlICsgdHJhbnNsYXRlO1xuXG5cdC8vcG9zaXRpb24gaXMgbm9ybWFsaXplZCAwLi4xIGNvb3JkIG9uIHRoZSBzY3JlZW5cblx0dmVjMiBwb3NpdGlvbiA9IChhVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYUJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lU3RhcnQgKyAoYlRvcFBvc2l0aW9uICogbGluZVRvcCArIGJCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZUVuZDtcblxuXHRzdGFydENvb3JkID0gYUNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cdGVuZENvb3JkID0gYkNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGVuYWJsZVN0YXJ0TWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpLCAuNSk7XG5cdGVuYWJsZUVuZE1pdGVyID0gc3RlcChkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSwgLjUpO1xuXG5cdC8vYmV2ZWwgbWl0ZXIgY3V0b2Zmc1xuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0XHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcblx0XHRcdGVuZEN1dG9mZi56dyArPSB2ZWMyKC1lbmRKb2luRGlyZWN0aW9uLnksIGVuZEpvaW5EaXJlY3Rpb24ueCkgIC8gc2NhbGVSYXRpbztcblx0XHRcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IGVuZE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cdH1cblxuXHQvL3JvdW5kIG1pdGVyIGN1dG9mZnNcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChzdGFydEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBhYnMoZG90KGVuZEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XG5cdFx0XHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XG5cdFx0XHRlbmRDdXRvZmYgPSBlbmRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XG5cdFx0XHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XG5cdFx0fVxuXHR9XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFBhdHRlcm47XG51bmlmb3JtIGZsb2F0IGRhc2hTaXplLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkLCBtaXRlck1vZGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcbnZhcnlpbmcgdmVjNCBzdGFydEN1dG9mZiwgZW5kQ3V0b2ZmO1xudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcblxuZmxvYXQgZGlzdFRvTGluZSh2ZWMyIHAsIHZlYzIgYSwgdmVjMiBiKSB7XG5cdHZlYzIgZGlmZiA9IGIgLSBhO1xuXHR2ZWMyIHBlcnAgPSBub3JtYWxpemUodmVjMigtZGlmZi55LCBkaWZmLngpKTtcblx0cmV0dXJuIGRvdChwIC0gYSwgcGVycCk7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgYWxwaGEgPSAxLiwgZGlzdFRvU3RhcnQsIGRpc3RUb0VuZDtcblx0ZmxvYXQgY3V0b2ZmID0gdGhpY2tuZXNzICogLjU7XG5cblx0Ly9iZXZlbCBtaXRlclxuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb1N0YXJ0ID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIHN0YXJ0Q3V0b2ZmLnh5LCBzdGFydEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvU3RhcnQgPCAtMS4pIHtcblx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9TdGFydCArIDEuLCAwLiksIDEuKTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb0VuZCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBlbmRDdXRvZmYueHksIGVuZEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvRW5kIDwgLTEuKSB7XG5cdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGFscGhhICo9IG1pbihtYXgoZGlzdFRvRW5kICsgMS4sIDAuKSwgMS4pO1xuXHRcdH1cblx0fVxuXG5cdC8vIHJvdW5kIG1pdGVyXG5cdGVsc2UgaWYgKG1pdGVyTW9kZSA9PSAyLikge1xuXHRcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XG5cdFx0XHRkaXN0VG9TdGFydCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBzdGFydEN1dG9mZi54eSwgc3RhcnRDdXRvZmYuencpO1xuXHRcdFx0aWYgKGRpc3RUb1N0YXJ0IDwgMC4pIHtcblx0XHRcdFx0ZmxvYXQgcmFkaXVzID0gbGVuZ3RoKGdsX0ZyYWdDb29yZC54eSAtIHN0YXJ0Q29vcmQpO1xuXG5cdFx0XHRcdGlmKHJhZGl1cyA+IGN1dG9mZiArIC41KSB7XG5cdFx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb0VuZCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBlbmRDdXRvZmYueHksIGVuZEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvRW5kIDwgMC4pIHtcblx0XHRcdFx0ZmxvYXQgcmFkaXVzID0gbGVuZ3RoKGdsX0ZyYWdDb29yZC54eSAtIGVuZENvb3JkKTtcblxuXHRcdFx0XHRpZihyYWRpdXMgPiBjdXRvZmYgKyAuNSkge1xuXHRcdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWxwaGEgLT0gc21vb3Roc3RlcChjdXRvZmYgLSAuNSwgY3V0b2ZmICsgLjUsIHJhZGl1cyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaFNpemUpICogLjUgKyAuMjU7XG5cdGZsb2F0IGRhc2ggPSB0ZXh0dXJlMkQoZGFzaFBhdHRlcm4sIHZlYzIodCwgLjUpKS5yO1xuXG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcbn1cbiJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDowLGRpdmlzb3I6MX0sYkNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDo0LGRpdmlzb3I6MX0scHJldkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDowLGRpdmlzb3I6MX0sYUNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LG5leHRDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MjQsZGl2aXNvcjoxfX19LG4pKX1jYXRjaCh0KXtlPWl9cmV0dXJue2ZpbGw6dCh7cHJpbWl0aXZlOiJ0cmlhbmdsZSIsZWxlbWVudHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50cmlhbmdsZXN9LG9mZnNldDowLHZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uLCBwb3NpdGlvbkZyYWN0O1xuXG51bmlmb3JtIHZlYzQgY29sb3I7XG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW8sIGlkO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5jb25zdCBmbG9hdCBNQVhfTElORVMgPSAyNTYuO1xuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGRlcHRoID0gKE1BWF9MSU5FUyAtIDQuIC0gaWQpIC8gKE1BWF9MSU5FUyk7XG5cblx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1Ljtcblx0ZnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJdKSx1bmlmb3Jtczp7c2NhbGU6dC5wcm9wKCJzY2FsZSIpLGNvbG9yOnQucHJvcCgiZmlsbCIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IikscGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxpZDp0LnByb3AoImlkIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntwb3NpdGlvbjp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OH0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25GcmFjdEJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4fX0sYmxlbmQ6bi5ibGVuZCxkZXB0aDp7ZW5hYmxlOiExfSxzY2lzc29yOm4uc2Npc3NvcixzdGVuY2lsOm4uc3RlbmNpbCx2aWV3cG9ydDpuLnZpZXdwb3J0fSkscmVjdDppLG1pdGVyOmV9fSx2LmRlZmF1bHRzPXtkYXNoZXM6bnVsbCxqb2luOiJtaXRlciIsbWl0ZXJMaW1pdDoxLHRoaWNrbmVzczoxMCxjYXA6InNxdWFyZSIsY29sb3I6ImJsYWNrIixvcGFjaXR5OjEsb3ZlcmxheTohMSx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwsY2xvc2U6ITEsZmlsbDpudWxsfSx2LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtlLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsZSksdGhpcy5kcmF3KCl9LHYucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybihlLmxlbmd0aD9lOnRoaXMucGFzc2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dmFyIG47aWYoZSYmQXJyYXkuaXNBcnJheShlKSlyZXR1cm4obj10KS5kcmF3LmFwcGx5KG4sZSk7Im51bWJlciI9PXR5cGVvZiBlJiYoZT10LnBhc3Nlc1tlXSksZSYmZS5jb3VudD4xJiZlLm9wYWNpdHkmJih0LnJlZ2wuX3JlZnJlc2goKSxlLmZpbGwmJmUudHJpYW5nbGVzJiZlLnRyaWFuZ2xlcy5sZW5ndGg+MiYmdC5zaGFkZXJzLmZpbGwoZSksZS50aGlja25lc3MmJihlLnNjYWxlWzBdKmUudmlld3BvcnQud2lkdGg+di5wcmVjaXNpb25UaHJlc2hvbGR8fGUuc2NhbGVbMV0qZS52aWV3cG9ydC5oZWlnaHQ+di5wcmVjaXNpb25UaHJlc2hvbGQ/dC5zaGFkZXJzLnJlY3QoZSk6InJlY3QiPT09ZS5qb2lufHwhZS5qb2luJiYoZS50aGlja25lc3M8PTJ8fGUuY291bnQ+PXYubWF4UG9pbnRzKT90LnNoYWRlcnMucmVjdChlKTp0LnNoYWRlcnMubWl0ZXIoZSkpKX0pLHRoaXN9LHYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQpe251bGwhPXQubGVuZ3RoPyJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9W3twb3NpdGlvbnM6dH1dKTpBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciByPXRoaXMucmVnbCxvPXRoaXMuZ2w7aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQsZil7dmFyIGQ9ZS5wYXNzZXNbZl07aWYodm9pZCAwIT09dClpZihudWxsIT09dCl7aWYoIm51bWJlciI9PXR5cGVvZiB0WzBdJiYodD17cG9zaXRpb25zOnR9KSx0PXModCx7cG9zaXRpb25zOiJwb3NpdGlvbnMgcG9pbnRzIGRhdGEgY29vcmRzIix0aGlja25lc3M6InRoaWNrbmVzcyBsaW5lV2lkdGggbGluZVdpZHRocyBsaW5lLXdpZHRoIGxpbmV3aWR0aCB3aWR0aCBzdHJva2Utd2lkdGggc3Ryb2tld2lkdGggc3Ryb2tlV2lkdGgiLGpvaW46ImxpbmVKb2luIGxpbmVqb2luIGpvaW4gdHlwZSBtb2RlIixtaXRlckxpbWl0OiJtaXRlcmxpbWl0IG1pdGVyTGltaXQiLGRhc2hlczoiZGFzaCBkYXNoZXMgZGFzaGFycmF5IGRhc2gtYXJyYXkgZGFzaEFycmF5Iixjb2xvcjoiY29sb3IgY29sb3VyIHN0cm9rZSBjb2xvcnMgY29sb3VycyBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLGZpbGw6ImZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IiLG9wYWNpdHk6ImFscGhhIG9wYWNpdHkiLG92ZXJsYXk6Im92ZXJsYXkgY3JlYXNlIG92ZXJsYXAgaW50ZXJzZWN0IixjbG9zZToiY2xvc2VkIGNsb3NlIGNsb3NlZC1wYXRoIGNsb3NlUGF0aCIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3Qm94Iixob2xlOiJob2xlcyBob2xlIGhvbGxvdyJ9KSxkfHwoZS5wYXNzZXNbZl09ZD17aWQ6ZixzY2FsZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGU6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGNvdW50OjAsaG9sZTpbXSxkZXB0aDowLGRhc2hMZW5ndGg6MSxkYXNoVGV4dHVyZTpyLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpuZXcgVWludDhBcnJheShbMjU1XSksd2lkdGg6MSxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSksY29sb3JCdWZmZXI6ci5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheX0pLHBvc2l0aW9uQnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KX0sdD1hKHt9LHYuZGVmYXVsdHMsdCkpLG51bGwhPXQudGhpY2tuZXNzJiYoZC50aGlja25lc3M9cGFyc2VGbG9hdCh0LnRoaWNrbmVzcykpLG51bGwhPXQub3BhY2l0eSYmKGQub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQubWl0ZXJMaW1pdCYmKGQubWl0ZXJMaW1pdD1wYXJzZUZsb2F0KHQubWl0ZXJMaW1pdCkpLG51bGwhPXQub3ZlcmxheSYmKGQub3ZlcmxheT0hIXQub3ZlcmxheSxmPHYubWF4TGluZXMmJihkLmRlcHRoPTIqKHYubWF4TGluZXMtMS1mJXYubWF4TGluZXMpL3YubWF4TGluZXMtMSkpLG51bGwhPXQuam9pbiYmKGQuam9pbj10LmpvaW4pLG51bGwhPXQuaG9sZSYmKGQuaG9sZT10LmhvbGUpLG51bGwhPXQuZmlsbCYmKGQuZmlsbD10LmZpbGw/bih0LmZpbGwsInVpbnQ4Iik6bnVsbCksbnVsbCE9dC52aWV3cG9ydCYmKGQudmlld3BvcnQ9Zyh0LnZpZXdwb3J0KSksZC52aWV3cG9ydHx8KGQudmlld3BvcnQ9Zyhbby5kcmF3aW5nQnVmZmVyV2lkdGgsby5kcmF3aW5nQnVmZmVySGVpZ2h0XSkpLG51bGwhPXQuY2xvc2UmJihkLmNsb3NlPXQuY2xvc2UpLG51bGw9PT10LnBvc2l0aW9ucyYmKHQucG9zaXRpb25zPVtdKSx0LnBvc2l0aW9ucyl7dmFyIG0seTtpZih0LnBvc2l0aW9ucy54JiZ0LnBvc2l0aW9ucy55KXt2YXIgeD10LnBvc2l0aW9ucy54LGI9dC5wb3NpdGlvbnMueTt5PWQuY291bnQ9TWF0aC5tYXgoeC5sZW5ndGgsYi5sZW5ndGgpLG09bmV3IEZsb2F0NjRBcnJheSgyKnkpO2Zvcih2YXIgXz0wO188eTtfKyspbVsyKl9dPXhbX10sbVsyKl8rMV09YltfXX1lbHNlIG09bCh0LnBvc2l0aW9ucywiZmxvYXQ2NCIpLHk9ZC5jb3VudD1NYXRoLmZsb29yKG0ubGVuZ3RoLzIpO3ZhciB3PWQuYm91bmRzPWkobSwyKTtpZihkLmZpbGwpe2Zvcih2YXIgaz1bXSxUPXt9LEE9MCxNPTAsUz0wLEU9ZC5jb3VudDtNPEU7TSsrKXt2YXIgQz1tWzIqTV0sTD1tWzIqTSsxXTtpc05hTihDKXx8aXNOYU4oTCl8fG51bGw9PUN8fG51bGw9PUw/KEM9bVsyKkFdLEw9bVsyKkErMV0sVFtNXT1BKTpBPU0sa1tTKytdPUMsa1tTKytdPUx9Zm9yKHZhciB6PWMoayxkLmhvbGV8fFtdKSxPPTAsST16Lmxlbmd0aDtPPEk7TysrKW51bGwhPVRbeltPXV0mJih6W09dPVRbeltPXV0pO2QudHJpYW5nbGVzPXp9dmFyIEQ9bmV3IEZsb2F0NjRBcnJheShtKTt1KEQsMix3KTt2YXIgUD1uZXcgRmxvYXQ2NEFycmF5KDIqeSs2KTtkLmNsb3NlP21bMF09PT1tWzIqeS0yXSYmbVsxXT09PW1bMip5LTFdPyhQWzBdPURbMip5LTRdLFBbMV09RFsyKnktM10pOihQWzBdPURbMip5LTJdLFBbMV09RFsyKnktMV0pOihQWzBdPURbMF0sUFsxXT1EWzFdKSxQLnNldChELDIpLGQuY2xvc2U/bVswXT09PW1bMip5LTJdJiZtWzFdPT09bVsyKnktMV0/KFBbMip5KzJdPURbMl0sUFsyKnkrM109RFszXSxkLmNvdW50LT0xKTooUFsyKnkrMl09RFswXSxQWzIqeSszXT1EWzFdLFBbMip5KzRdPURbMl0sUFsyKnkrNV09RFszXSk6KFBbMip5KzJdPURbMip5LTJdLFBbMip5KzNdPURbMip5LTFdLFBbMip5KzRdPURbMip5LTJdLFBbMip5KzVdPURbMip5LTFdKSxkLnBvc2l0aW9uQnVmZmVyKGgoUCkpLGQucG9zaXRpb25GcmFjdEJ1ZmZlcihwKFApKX1pZih0LnJhbmdlP2QucmFuZ2U9dC5yYW5nZTpkLnJhbmdlfHwoZC5yYW5nZT1kLmJvdW5kcyksKHQucmFuZ2V8fHQucG9zaXRpb25zKSYmZC5jb3VudCl7dmFyIFI9ZC5ib3VuZHMsRj1SWzJdLVJbMF0sQj1SWzNdLVJbMV0sTj1kLnJhbmdlWzJdLWQucmFuZ2VbMF0saj1kLnJhbmdlWzNdLWQucmFuZ2VbMV07ZC5zY2FsZT1bRi9OLEIval0sZC50cmFuc2xhdGU9Wy1kLnJhbmdlWzBdL04rUlswXS9OfHwwLC1kLnJhbmdlWzFdL2orUlsxXS9qfHwwXSxkLnNjYWxlRnJhY3Q9cChkLnNjYWxlKSxkLnRyYW5zbGF0ZUZyYWN0PXAoZC50cmFuc2xhdGUpfWlmKHQuZGFzaGVzKXt2YXIgVixVPTA7aWYoIXQuZGFzaGVzfHx0LmRhc2hlcy5sZW5ndGg8MilVPTEsVj1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0pO2Vsc2V7VT0wO2Zvcih2YXIgcT0wO3E8dC5kYXNoZXMubGVuZ3RoOysrcSlVKz10LmRhc2hlc1txXTtWPW5ldyBVaW50OEFycmF5KFUqdi5kYXNoTXVsdCk7Zm9yKHZhciBIPTAsRz0yNTUsWT0wO1k8MjtZKyspZm9yKHZhciBXPTA7Vzx0LmRhc2hlcy5sZW5ndGg7KytXKXtmb3IodmFyIFg9MCxaPXQuZGFzaGVzW1ddKnYuZGFzaE11bHQqLjU7WDxaOysrWClWW0grK109RztHXj0yNTV9fWQuZGFzaExlbmd0aD1VLGQuZGFzaFRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpWLHdpZHRoOlYubGVuZ3RoLGhlaWdodDoxLG1hZzoibGluZWFyIixtaW46ImxpbmVhciJ9LDAsMCl9aWYodC5jb2xvcil7dmFyICQ9ZC5jb3VudCxKPXQuY29sb3I7Snx8KEo9InRyYW5zcGFyZW50Iik7dmFyIEs9bmV3IFVpbnQ4QXJyYXkoNCokKzQpO2lmKEFycmF5LmlzQXJyYXkoSikmJiJudW1iZXIiIT10eXBlb2YgSlswXSl7Zm9yKHZhciBRPTA7UTwkO1ErKyl7dmFyIHR0PW4oSltRXSwidWludDgiKTtLLnNldCh0dCw0KlEpfUsuc2V0KG4oSlswXSwidWludDgiKSw0KiQpfWVsc2UgZm9yKHZhciBldD1uKEosInVpbnQ4IikscnQ9MDtydDwkKzE7cnQrKylLLnNldChldCw0KnJ0KTtkLmNvbG9yQnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgiLGRhdGE6S30pfX1lbHNlIGUucGFzc2VzW2ZdPW51bGx9KSx0Lmxlbmd0aDx0aGlzLnBhc3Nlcy5sZW5ndGgpe2Zvcih2YXIgZj10Lmxlbmd0aDtmPHRoaXMucGFzc2VzLmxlbmd0aDtmKyspe3ZhciBkPWUucGFzc2VzW2ZdO2QmJihkLmNvbG9yQnVmZmVyLmRlc3Ryb3koKSxkLnBvc2l0aW9uQnVmZmVyLmRlc3Ryb3koKSxkLmRhc2hUZXh0dXJlLmRlc3Ryb3koKSl9dGhpcy5wYXNzZXMubGVuZ3RoPXQubGVuZ3RofWZvcih2YXIgbT1bXSx5PTA7eTx0aGlzLnBhc3Nlcy5sZW5ndGg7eSsrKW51bGwhPT1lLnBhc3Nlc1t5XSYmbS5wdXNoKGUucGFzc2VzW3ldKTtyZXR1cm4gdGhpcy5wYXNzZXM9bSx0aGlzfX0sdi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY29sb3JCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQuZGFzaFRleHR1cmUuZGVzdHJveSgpfSksdGhpcy5wYXNzZXMubGVuZ3RoPTAsdGhpc319LHsiYXJyYXktYm91bmRzIjo1NSwiYXJyYXktbm9ybWFsaXplIjo1NiwiY29sb3Itbm9ybWFsaXplIjoxMTAsZWFyY3V0OjE2MiwiZXM2LXdlYWstbWFwIjoyMTYsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjIyMyxnbHNsaWZ5OjQwMSwib2JqZWN0LWFzc2lnbiI6NDQ2LCJwYXJzZS1yZWN0Ijo0NTEsInBpY2stYnktYWxpYXMiOjQ1NywidG8tZmxvYXQzMiI6NTIyfV0sNDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj0hMCxpPSExLGE9dm9pZCAwO3RyeXtmb3IodmFyIG8scz10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCFlfHxyLmxlbmd0aCE9PWUpO249ITApO31jYXRjaCh0KXtpPSEwLGE9dH1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgYX19cmV0dXJuIHJ9KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKylyW2VdPXRbZV07cmV0dXJuIHJ9fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIGE9dCgiY29sb3Itbm9ybWFsaXplIiksbz10KCJhcnJheS1ib3VuZHMiKSxzPXQoImNvbG9yLWlkIiksbD10KCJwb2ludC1jbHVzdGVyIiksYz10KCJvYmplY3QtYXNzaWduIiksdT10KCJnbHNsaWZ5IiksZj10KCJwaWNrLWJ5LWFsaWFzIiksaD10KCJ1cGRhdGUtZGlmZiIpLHA9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLGQ9dCgiaXMtaWV4cGxvcmVyIiksZz10KCJ0by1mbG9hdDMyIiksdj10KCJwYXJzZS1yZWN0IiksbT15O2Z1bmN0aW9uIHkodCxlKXt2YXIgcj10aGlzO2lmKCEodGhpcyBpbnN0YW5jZW9mIHkpKXJldHVybiBuZXcgeSh0LGUpOyJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOihlPXQsdD1udWxsKSxlJiZlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpO3ZhciBuLGk9KHQ9ZS5yZWdsKS5fZ2wsYT1bXTt0aGlzLnRvb01hbnlDb2xvcnM9ZCxuPXQudGV4dHVyZSh7ZGF0YTpuZXcgVWludDhBcnJheSgxMDIwKSx3aWR0aDoyNTUsaGVpZ2h0OjEsdHlwZToidWludDgiLGZvcm1hdDoicmdiYSIsd3JhcFM6ImNsYW1wIix3cmFwVDoiY2xhbXAiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0In0pLGModGhpcyx7cmVnbDp0LGdsOmksZ3JvdXBzOltdLG1hcmtlckNhY2hlOltudWxsXSxtYXJrZXJUZXh0dXJlczpbbnVsbF0scGFsZXR0ZTphLHBhbGV0dGVJZHM6e30scGFsZXR0ZVRleHR1cmU6bixtYXhDb2xvcnM6MjU1LG1heFNpemU6MTAwLGNhbnZhczppLmNhbnZhc30pLHRoaXMudXBkYXRlKGUpO3ZhciBvPXt1bmlmb3Jtczp7cGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxwYWxldHRlOm4scGFsZXR0ZVNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm5bci50b29NYW55Q29sb3JzPzA6MjU1LG4uaGVpZ2h0XX0sc2NhbGU6dC5wcm9wKCJzY2FsZSIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IiksbWFya2VyOnQucHJvcCgibWFya2VyVGV4dHVyZSIpfSxhdHRyaWJ1dGVzOnt4OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHJ8fHtidWZmZXI6ZS5wb3NpdGlvbkJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS55QXR0cnx8e2J1ZmZlcjplLnBvc2l0aW9uQnVmZmVyLHN0cmlkZTo4LG9mZnNldDo0fX0seEZyYWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHI/e2NvbnN0YW50OlswLDBdfTp7YnVmZmVyOmUucG9zaXRpb25GcmFjdEJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHlGcmFjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnlBdHRyP3tjb25zdGFudDpbMCwwXX06e2J1ZmZlcjplLnBvc2l0aW9uRnJhY3RCdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjR9fSxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc2l6ZS5sZW5ndGg/e2J1ZmZlcjplLnNpemVCdWZmZXIsc3RyaWRlOjIsb2Zmc2V0OjB9Ontjb25zdGFudDpbTWF0aC5yb3VuZCgyNTUqZS5zaXplL3IubWF4U2l6ZSldfX0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmJvcmRlclNpemUubGVuZ3RoP3tidWZmZXI6ZS5zaXplQnVmZmVyLHN0cmlkZToyLG9mZnNldDoxfTp7Y29uc3RhbnQ6W01hdGgucm91bmQoMjU1KmUuYm9yZGVyU2l6ZS9yLm1heFNpemUpXX19LGNvbG9ySWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5jb2xvci5sZW5ndGg/e2J1ZmZlcjplLmNvbG9yQnVmZmVyLHN0cmlkZTpyLnRvb01hbnlDb2xvcnM/ODo0LG9mZnNldDowfTp7Y29uc3RhbnQ6ci50b29NYW55Q29sb3JzP2Euc2xpY2UoNCplLmNvbG9yLDQqZS5jb2xvcis0KTpbZS5jb2xvcl19fSxib3JkZXJDb2xvcklkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYm9yZGVyQ29sb3IubGVuZ3RoP3tidWZmZXI6ZS5jb2xvckJ1ZmZlcixzdHJpZGU6ci50b29NYW55Q29sb3JzPzg6NCxvZmZzZXQ6ci50b29NYW55Q29sb3JzPzQ6Mn06e2NvbnN0YW50OnIudG9vTWFueUNvbG9ycz9hLnNsaWNlKDQqZS5ib3JkZXJDb2xvciw0KmUuYm9yZGVyQ29sb3IrNCk6W2UuYm9yZGVyQ29sb3JdfX0saXNBY3RpdmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4hMD09PWUuYWN0aXZhdGlvbj97Y29uc3RhbnQ6WzFdfTplLmFjdGl2YXRpb24/ZS5hY3RpdmF0aW9uOntjb25zdGFudDpbMF19fX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGVsZW1lbnRzOnQucHJvcCgiZWxlbWVudHMiKSxjb3VudDp0LnByb3AoImNvdW50Iiksb2Zmc2V0OnQucHJvcCgib2Zmc2V0IikscHJpbWl0aXZlOiJwb2ludHMifSxzPWMoe30sbyk7cy5mcmFnPXUoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xuXG51bmlmb3JtIHNhbXBsZXIyRCBtYXJrZXI7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW8sIG9wYWNpdHk7XG5cbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgeCwgZmxvYXQgeSkge1xuICByZXR1cm4gMS4wIC8gKDEuMCArIGV4cCg1MC4wKih4IC0geSkpKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKG1hcmtlciwgZ2xfUG9pbnRDb29yZCkuciwgZGVsdGEgPSBmcmFnV2lkdGg7XG5cbiAgLy8gbWF4LWRpc3RhbmNlIGFscGhhXG4gIGlmIChkaXN0IDwgMC4wMDMpIGRpc2NhcmQ7XG5cbiAgLy8gbnVsbC1ib3JkZXIgY2FzZVxuICBpZiAoZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPT0gZnJhZ0NvbG9yTGV2ZWwgfHwgZnJhZ0JvcmRlckNvbG9yLmEgPT0gMC4pIHtcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoLjUgLSBkZWx0YSwgLjUgKyBkZWx0YSwgZGlzdCk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiLCBjb2xvckFtdCAqIGZyYWdDb2xvci5hICogb3BhY2l0eSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmxvYXQgYm9yZGVyQ29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdCb3JkZXJDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdCb3JkZXJDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xuICAgIGZsb2F0IGNvbG9yQW10ID0gc21vb3Roc3RlcChmcmFnQ29sb3JMZXZlbCAtIGRlbHRhLCBmcmFnQ29sb3JMZXZlbCArIGRlbHRhLCBkaXN0KTtcblxuICAgIHZlYzQgY29sb3IgPSBmcmFnQm9yZGVyQ29sb3I7XG4gICAgY29sb3IuYSAqPSBib3JkZXJDb2xvckFtdDtcbiAgICBjb2xvciA9IG1peChjb2xvciwgZnJhZ0NvbG9yLCBjb2xvckFtdCk7XG4gICAgY29sb3IuYSAqPSBvcGFjaXR5O1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gIH1cblxufVxuIl0pLHMudmVydD11KFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QsIHBhbGV0dGVTaXplO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcblxuY29uc3QgZmxvYXQgbWF4U2l6ZSA9IDEwMC47XG5jb25zdCBmbG9hdCBib3JkZXJMZXZlbCA9IC41O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdQb2ludFNpemUsIGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xuXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XG5cbnZlYzQgZ2V0Q29sb3IodmVjNCBpZCkge1xuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZSxcbiAgICB2ZWMyKFxuICAgICAgKGlkLnggKyAuNSkgLyBwYWxldHRlU2l6ZS54LFxuICAgICAgKGlkLnkgKyAuNSkgLyBwYWxldHRlU2l6ZS55XG4gICAgKVxuICApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xuXG4gIHZlYzIgcG9zaXRpb24gPSB2ZWMyKHgsIHkpO1xuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcblxuICB2ZWM0IGNvbG9yID0gZ2V0Q29sb3IoY29sb3JJZCk7XG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcblxuICBmbG9hdCBzaXplID0gc2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuXG4gIGdsX1BvaW50U2l6ZSA9IDIuICogc2l6ZSAqIHBpeGVsUmF0aW87XG4gIGZyYWdQb2ludFNpemUgPSBzaXplICogcGl4ZWxSYXRpbztcblxuICB2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XG5cbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yO1xuICBmcmFnV2lkdGggPSAxLiAvIGdsX1BvaW50U2l6ZTtcblxuICBmcmFnQm9yZGVyQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsIC0gYm9yZGVyTGV2ZWwgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcbiAgZnJhZ0NvbG9yTGV2ZWwgPSBjbGFtcChib3JkZXJMZXZlbCArICgxLiAtIGJvcmRlckxldmVsKSAqIGJvcmRlclNpemUgLyBzaXplLCAwLiwgMS4pO1xufSJdKSx0aGlzLmRyYXdNYXJrZXI9dChzKTt2YXIgbD1jKHt9LG8pO2wuZnJhZz11KFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xuXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIGZsb2F0IGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aDtcblxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0IHgpIHtcblx0ZmxvYXQgdDtcblx0dCA9IGNsYW1wKCh4IC0gZWRnZTApIC8gKGVkZ2UxIC0gZWRnZTApLCAwLjAsIDEuMCk7XG5cdHJldHVybiB0ICogdCAqICgzLjAgLSAyLjAgKiB0KTtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCByYWRpdXMsIGFscGhhID0gMS4wLCBkZWx0YSA9IGZyYWdXaWR0aDtcblxuXHRyYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG5cblx0aWYgKHJhZGl1cyA+IDEuMCArIGRlbHRhKSB7XG5cdFx0ZGlzY2FyZDtcblx0fVxuXG5cdGFscGhhIC09IHNtb290aHN0ZXAoMS4wIC0gZGVsdGEsIDEuMCArIGRlbHRhLCByYWRpdXMpO1xuXG5cdGZsb2F0IGJvcmRlclJhZGl1cyA9IGZyYWdCb3JkZXJSYWRpdXM7XG5cdGZsb2F0IHJhdGlvID0gc21vb3Roc3RlcChib3JkZXJSYWRpdXMgLSBkZWx0YSwgYm9yZGVyUmFkaXVzICsgZGVsdGEsIHJhZGl1cyk7XG5cdHZlYzQgY29sb3IgPSBtaXgoZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3IsIHJhdGlvKTtcblx0Y29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHk7XG5cdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pLGwudmVydD11KFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xudW5pZm9ybSB2ZWMyIHBhbGV0dGVTaXplO1xuXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XG5cbmJvb2wgaXNEaXJlY3QgPSAocGFsZXR0ZVNpemUueCA8IDEuKTtcblxudmVjNCBnZXRDb2xvcih2ZWM0IGlkKSB7XG4gIHJldHVybiBpc0RpcmVjdCA/IGlkIC8gMjU1LiA6IHRleHR1cmUyRChwYWxldHRlLFxuICAgIHZlYzIoXG4gICAgICAoaWQueCArIC41KSAvIHBhbGV0dGVTaXplLngsXG4gICAgICAoaWQueSArIC41KSAvIHBhbGV0dGVTaXplLnlcbiAgICApXG4gICk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gaWdub3JlIGluYWN0aXZlIHBvaW50c1xuICBpZiAoaXNBY3RpdmUgPT0gMC4pIHJldHVybjtcblxuICB2ZWMyIHBvc2l0aW9uID0gdmVjMih4LCB5KTtcbiAgdmVjMiBwb3NpdGlvbkZyYWN0ID0gdmVjMih4RnJhY3QsIHlGcmFjdCk7XG5cbiAgdmVjNCBjb2xvciA9IGdldENvbG9yKGNvbG9ySWQpO1xuICB2ZWM0IGJvcmRlckNvbG9yID0gZ2V0Q29sb3IoYm9yZGVyQ29sb3JJZCk7XG5cbiAgZmxvYXQgc2l6ZSA9IHNpemUgKiBtYXhTaXplIC8gMjU1LjtcbiAgZmxvYXQgYm9yZGVyU2l6ZSA9IGJvcmRlclNpemUgKiBtYXhTaXplIC8gMjU1LjtcblxuICBnbF9Qb2ludFNpemUgPSAoc2l6ZSArIGJvcmRlclNpemUpICogcGl4ZWxSYXRpbztcblxuICB2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XG5cbiAgZnJhZ0JvcmRlclJhZGl1cyA9IDEuIC0gMi4gKiBib3JkZXJTaXplIC8gKHNpemUgKyBib3JkZXJTaXplKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yLmEgPT0gMC4gfHwgYm9yZGVyU2l6ZSA9PSAwLiA/IHZlYzQoY29sb3IucmdiLCAwLikgOiBib3JkZXJDb2xvcjtcbiAgZnJhZ1dpZHRoID0gMS4gLyBnbF9Qb2ludFNpemU7XG59XG4iXSksZCYmKGwuZnJhZz1sLmZyYWcucmVwbGFjZSgic21vb3Roc3RlcCIsInNtb290aFN0ZXAiKSxzLmZyYWc9cy5mcmFnLnJlcGxhY2UoInNtb290aHN0ZXAiLCJzbW9vdGhTdGVwIikpLHRoaXMuZHJhd0NpcmNsZT10KGwpfXkuZGVmYXVsdHM9e2NvbG9yOiJibGFjayIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjAsc2l6ZToxMixvcGFjaXR5OjEsbWFya2VyOnZvaWQgMCx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwscGl4ZWxTaXplOm51bGwsY291bnQ6MCxvZmZzZXQ6MCxib3VuZHM6bnVsbCxwb3NpdGlvbnM6W10sc25hcDoxZTR9LHkucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZ0aGlzLnVwZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5kcmF3KCksdGhpc30seS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPWFyZ3VtZW50c1tuXTt2YXIgaT10aGlzLmdyb3VwcztpZigxPT09ci5sZW5ndGgmJkFycmF5LmlzQXJyYXkoclswXSkmJihudWxsPT09clswXVswXXx8QXJyYXkuaXNBcnJheShyWzBdWzBdKSkmJihyPXJbMF0pLHRoaXMucmVnbC5fcmVmcmVzaCgpLHIubGVuZ3RoKWZvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXRoaXMuZHJhd0l0ZW0oYSxyW2FdKTtlbHNlIGkuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QuZHJhd0l0ZW0ocil9KTtyZXR1cm4gdGhpc30seS5wcm90b3R5cGUuZHJhd0l0ZW09ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdyb3VwcyxuPXJbdF07aWYoIm51bWJlciI9PXR5cGVvZiBlJiYodD1lLG49cltlXSxlPW51bGwpLG4mJm4uY291bnQmJm4ub3BhY2l0eSl7bi5hY3RpdmF0aW9uWzBdJiZ0aGlzLmRyYXdDaXJjbGUodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucygwLG4sZSkpO2Zvcih2YXIgYT1bXSxvPTE7bzxuLmFjdGl2YXRpb24ubGVuZ3RoO28rKyluLmFjdGl2YXRpb25bb10mJighMD09PW4uYWN0aXZhdGlvbltvXXx8bi5hY3RpdmF0aW9uW29dLmRhdGEubGVuZ3RoKSYmYS5wdXNoLmFwcGx5KGEsaSh0aGlzLmdldE1hcmtlckRyYXdPcHRpb25zKG8sbixlKSkpO2EubGVuZ3RoJiZ0aGlzLmRyYXdNYXJrZXIoYSl9fSx5LnByb3RvdHlwZS5nZXRNYXJrZXJEcmF3T3B0aW9ucz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5yYW5nZSxhPWUudHJlZSxvPWUudmlld3BvcnQscz1lLmFjdGl2YXRpb24sbD1lLnNlbGVjdGlvbkJ1ZmZlcix1PWUuY291bnQ7dGhpcy5yZWdsO2lmKCFhKXJldHVybiByP1tjKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnNbdF0sY291bnQ6ci5sZW5ndGgsZWxlbWVudHM6cixvZmZzZXQ6MH0pXTpbYyh7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLG9mZnNldDowfSldO3ZhciBmPVtdLGg9YS5yYW5nZShpLHtsb2Q6ITAscHg6WyhpWzJdLWlbMF0pL28ud2lkdGgsKGlbM10taVsxXSkvby5oZWlnaHRdfSk7aWYocil7Zm9yKHZhciBwPXNbdF0uZGF0YSxkPW5ldyBVaW50OEFycmF5KHUpLGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXTtkW3ZdPXA/cFt2XToxfWwuc3ViZGF0YShkKX1mb3IodmFyIG09aC5sZW5ndGg7bS0tOyl7dmFyIHk9bihoW21dLDIpLHg9eVswXSxiPXlbMV07Zi5wdXNoKGMoe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246cj9sOnNbdF0sb2Zmc2V0OngsY291bnQ6Yi14fSkpfXJldHVybiBmfSx5LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07aWYoci5sZW5ndGgpezE9PT1yLmxlbmd0aCYmQXJyYXkuaXNBcnJheShyWzBdKSYmKHI9clswXSk7dmFyIGk9dGhpcy5ncm91cHMsYT10aGlzLmdsLHM9dGhpcy5yZWdsLHU9dGhpcy5tYXhTaXplLGQ9dGhpcy5tYXhDb2xvcnMsbT10aGlzLnBhbGV0dGU7dGhpcy5ncm91cHM9aT1yLm1hcChmdW5jdGlvbihlLHIpe3ZhciBuPWlbcl07aWYodm9pZCAwPT09ZSlyZXR1cm4gbjtudWxsPT09ZT9lPXtwb3NpdGlvbnM6bnVsbH06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZT17b25kcmF3OmV9OiJudW1iZXIiPT10eXBlb2YgZVswXSYmKGU9e3Bvc2l0aW9uczplfSksbnVsbD09PShlPWYoZSx7cG9zaXRpb25zOiJwb3NpdGlvbnMgZGF0YSBwb2ludHMiLHNuYXA6InNuYXAgY2x1c3RlciBsb2QgdHJlZSIsc2l6ZToic2l6ZXMgc2l6ZSByYWRpdXMiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixjb2xvcjoiY29sb3JzIGNvbG9yIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IiLGJvcmRlckNvbG9yOiJib3JkZXJDb2xvcnMgYm9yZGVyQ29sb3Igc3Ryb2tlIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvciIsbWFya2VyOiJtYXJrZXJzIG1hcmtlciBzaGFwZSIscmFuZ2U6InJhbmdlIGRhdGFCb3ggZGF0YWJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdQb3J0IHZpZXdCb3ggdmlld2JveCIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kiLGJvdW5kczoiYm91bmQgYm91bmRzIGJvdW5kYXJpZXMgbGltaXRzIix0b29NYW55Q29sb3JzOiJ0b29NYW55Q29sb3JzIHBhbGV0dGUgcGFsZXR0ZU1vZGUgb3B0aW1pemVQYWxldHRlIGVuYWJsZVBhbGV0dGUifSkpLnBvc2l0aW9ucyYmKGUucG9zaXRpb25zPVtdKSxudWxsIT1lLnRvb01hbnlDb2xvcnMmJih0LnRvb01hbnlDb2xvcnM9ZS50b29NYW55Q29sb3JzKSxufHwoaVtyXT1uPXtpZDpyLHNjYWxlOm51bGwsdHJhbnNsYXRlOm51bGwsc2NhbGVGcmFjdDpudWxsLHRyYW5zbGF0ZUZyYWN0Om51bGwsYWN0aXZhdGlvbjpbXSxzZWxlY3Rpb25CdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6InN0cmVhbSIsdHlwZToidWludDgifSksc2l6ZUJ1ZmZlcjpzLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgifSksY29sb3JCdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4In0pLHBvc2l0aW9uQnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCJ9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCJ9KX0sZT1jKHt9LHkuZGVmYXVsdHMsZSkpLCFlLnBvc2l0aW9uc3x8Im1hcmtlciJpbiBlfHwoZS5tYXJrZXI9bi5tYXJrZXIsZGVsZXRlIG4ubWFya2VyKSwhZS5tYXJrZXJ8fCJwb3NpdGlvbnMiaW4gZXx8KGUucG9zaXRpb25zPW4ucG9zaXRpb25zLGRlbGV0ZSBuLnBvc2l0aW9ucyk7dmFyIHg9MCxiPTA7aWYoaChuLGUsW3tzbmFwOiEwLHNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9eS5kZWZhdWx0cy5zaXplKSx4Kz10JiZ0Lmxlbmd0aD8xOjAsdH0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10JiYodD15LmRlZmF1bHRzLmJvcmRlclNpemUpLHgrPXQmJnQubGVuZ3RoPzE6MCx0fSxvcGFjaXR5OnBhcnNlRmxvYXQsY29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9eS5kZWZhdWx0cy5jb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLGIrKyxlfSxib3JkZXJDb2xvcjpmdW5jdGlvbihlLHIpe3JldHVybiBudWxsPT1lJiYoZT15LmRlZmF1bHRzLmJvcmRlckNvbG9yKSxlPXQudXBkYXRlQ29sb3IoZSksYisrLGV9LGJvdW5kczpmdW5jdGlvbih0LGUscil7cmV0dXJuInJhbmdlImluIHJ8fChyLnJhbmdlPW51bGwpLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5zbmFwLGk9ZS5wb3NpdGlvbkJ1ZmZlcixhPWUucG9zaXRpb25GcmFjdEJ1ZmZlcixjPWUuc2VsZWN0aW9uQnVmZmVyO2lmKHQueHx8dC55KXJldHVybiB0LngubGVuZ3RoP2UueEF0dHI9e2J1ZmZlcjpzLmJ1ZmZlcih0LngpLG9mZnNldDowLHN0cmlkZTo0LGNvdW50OnQueC5sZW5ndGh9OmUueEF0dHI9e2J1ZmZlcjp0LnguYnVmZmVyLG9mZnNldDo0KnQueC5vZmZzZXR8fDAsc3RyaWRlOjQqKHQueC5zdHJpZGV8fDEpLGNvdW50OnQueC5jb3VudH0sdC55Lmxlbmd0aD9lLnlBdHRyPXtidWZmZXI6cy5idWZmZXIodC55KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LnkubGVuZ3RofTplLnlBdHRyPXtidWZmZXI6dC55LmJ1ZmZlcixvZmZzZXQ6NCp0Lnkub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnkuc3RyaWRlfHwxKSxjb3VudDp0LnkuY291bnR9LGUuY291bnQ9TWF0aC5tYXgoZS54QXR0ci5jb3VudCxlLnlBdHRyLmNvdW50KSx0O3Q9cCh0LCJmbG9hdDY0Iik7dmFyIHU9ZS5jb3VudD1NYXRoLmZsb29yKHQubGVuZ3RoLzIpLGY9ZS5ib3VuZHM9dT9vKHQsMik6bnVsbDtpZihyLnJhbmdlfHxlLnJhbmdlfHwoZGVsZXRlIGUucmFuZ2Usci5yYW5nZT1mKSxyLm1hcmtlcnx8ZS5tYXJrZXJ8fChkZWxldGUgZS5tYXJrZXIsci5tYXJrZXI9bnVsbCksbiYmKCEwPT09bnx8dT5uKT9lLnRyZWU9bCh0LHtib3VuZHM6Zn0pOm4mJm4ubGVuZ3RoJiYoZS50cmVlPW4pLGUudHJlZSl7dmFyIGg9e3ByaW1pdGl2ZToicG9pbnRzIix1c2FnZToic3RhdGljIixkYXRhOmUudHJlZSx0eXBlOiJ1aW50MzIifTtlLmVsZW1lbnRzP2UuZWxlbWVudHMoaCk6ZS5lbGVtZW50cz1zLmVsZW1lbnRzKGgpfXJldHVybiBpKHtkYXRhOmcuZmxvYXQodCksdXNhZ2U6ImR5bmFtaWMifSksYSh7ZGF0YTpnLmZyYWN0KHQpLHVzYWdlOiJkeW5hbWljIn0pLGMoe2RhdGE6bmV3IFVpbnQ4QXJyYXkodSksdHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdH19LHttYXJrZXI6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIuYWN0aXZhdGlvbjtpZihpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSxpLmxlbmd0aD0wLGUmJiJudW1iZXIiIT10eXBlb2YgZVswXSl7Zm9yKHZhciBhPVtdLG89MCxsPU1hdGgubWluKGUubGVuZ3RoLHIuY291bnQpO288bDtvKyspe3ZhciBjPXQuYWRkTWFya2VyKGVbb10pO2FbY118fChhW2NdPW5ldyBVaW50OEFycmF5KHIuY291bnQpKSxhW2NdW29dPTF9Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1KyspaWYoYVt1XSl7dmFyIGY9e2RhdGE6YVt1XSx0eXBlOiJ1aW50OCIsdXNhZ2U6InN0YXRpYyJ9O2lbdV0/aVt1XShmKTppW3VdPXMuYnVmZmVyKGYpLGlbdV0uZGF0YT1hW3VdfX1lbHNle2lbdC5hZGRNYXJrZXIoZSldPSEwfXJldHVybiBlfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7aWYobilyZXR1cm4gdHx8KHQ9biksZS5zY2FsZT1bMS8odFsyXS10WzBdKSwxLyh0WzNdLXRbMV0pXSxlLnRyYW5zbGF0ZT1bLXRbMF0sLXRbMV1dLGUuc2NhbGVGcmFjdD1nLmZyYWN0KGUuc2NhbGUpLGUudHJhbnNsYXRlRnJhY3Q9Zy5mcmFjdChlLnRyYW5zbGF0ZSksdH0sdmlld3BvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHYodHx8W2EuZHJhd2luZ0J1ZmZlcldpZHRoLGEuZHJhd2luZ0J1ZmZlckhlaWdodF0pfX1dKSx4KXt2YXIgXz1uLHc9Xy5jb3VudCxrPV8uc2l6ZSxUPV8uYm9yZGVyU2l6ZSxBPV8uc2l6ZUJ1ZmZlcixNPW5ldyBVaW50OEFycmF5KDIqdyk7aWYoay5sZW5ndGh8fFQubGVuZ3RoKWZvcih2YXIgUz0wO1M8dztTKyspTVsyKlNdPU1hdGgucm91bmQoMjU1KihudWxsPT1rW1NdP2s6a1tTXSkvdSksTVsyKlMrMV09TWF0aC5yb3VuZCgyNTUqKG51bGw9PVRbU10/VDpUW1NdKS91KTtBKHtkYXRhOk0sdXNhZ2U6ImR5bmFtaWMifSl9aWYoYil7dmFyIEUsQz1uLEw9Qy5jb3VudCx6PUMuY29sb3IsTz1DLmJvcmRlckNvbG9yLEk9Qy5jb2xvckJ1ZmZlcjtpZih0LnRvb01hbnlDb2xvcnMpe2lmKHoubGVuZ3RofHxPLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg4KkwpO2Zvcih2YXIgRD0wO0Q8TDtEKyspe3ZhciBQPXpbRF07RVs4KkRdPW1bNCpQXSxFWzgqRCsxXT1tWzQqUCsxXSxFWzgqRCsyXT1tWzQqUCsyXSxFWzgqRCszXT1tWzQqUCszXTt2YXIgUj1PW0RdO0VbOCpEKzRdPW1bNCpSXSxFWzgqRCs1XT1tWzQqUisxXSxFWzgqRCs2XT1tWzQqUisyXSxFWzgqRCs3XT1tWzQqUiszXX19fWVsc2UgaWYoei5sZW5ndGh8fE8ubGVuZ3RoKXtFPW5ldyBVaW50OEFycmF5KDQqTCsyKTtmb3IodmFyIEY9MDtGPEw7RisrKW51bGwhPXpbRl0mJihFWzQqRl09eltGXSVkLEVbNCpGKzFdPU1hdGguZmxvb3IoeltGXS9kKSksbnVsbCE9T1tGXSYmKEVbNCpGKzJdPU9bRl0lZCxFWzQqRiszXT1NYXRoLmZsb29yKE9bRl0vZCkpfUkoe2RhdGE6RXx8bmV3IFVpbnQ4QXJyYXkoMCksdHlwZToidWludDgiLHVzYWdlOiJkeW5hbWljIn0pfXJldHVybiBufSl9fSx5LnByb3RvdHlwZS5hZGRNYXJrZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLm1hcmtlclRleHR1cmVzLG49dGhpcy5yZWdsLGk9dGhpcy5tYXJrZXJDYWNoZSxhPW51bGw9PXQ/MDppLmluZGV4T2YodCk7aWYoYT49MClyZXR1cm4gYTtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KWU9dDtlbHNle2U9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgbz0wLHM9dC5sZW5ndGg7bzxzO28rKyllW29dPTI1NSp0W29dfXZhciBsPU1hdGguZmxvb3IoTWF0aC5zcXJ0KGUubGVuZ3RoKSk7cmV0dXJuIGE9ci5sZW5ndGgsaS5wdXNoKHQpLHIucHVzaChuLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTplLHJhZGl1czpsLG1hZzoibGluZWFyIixtaW46ImxpbmVhciJ9KSksYX0seS5wcm90b3R5cGUudXBkYXRlQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYWxldHRlSWRzLHI9dGhpcy5wYWxldHRlLG49dGhpcy5tYXhDb2xvcnM7QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgaT1bXTtpZigibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBvPVtdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKz00KW8ucHVzaCh0LnNsaWNlKGwsbCs0KSk7ZWxzZSBmb3IodmFyIGM9MDtjPHQubGVuZ3RoO2MrPTQpby5wdXNoKHQuc3ViYXJyYXkoYyxjKzQpKTt0PW99Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBmPXRbdV07Zj1hKGYsInVpbnQ4Iik7dmFyIGg9cyhmLCExKTtpZihudWxsPT1lW2hdKXt2YXIgcD1yLmxlbmd0aDtlW2hdPU1hdGguZmxvb3IocC80KSxyW3BdPWZbMF0scltwKzFdPWZbMV0scltwKzJdPWZbMl0scltwKzNdPWZbM119aVt1XT1lW2hdfXJldHVybiF0aGlzLnRvb01hbnlDb2xvcnMmJnIubGVuZ3RoPjQqbiYmKHRoaXMudG9vTWFueUNvbG9ycz0hMCksdGhpcy51cGRhdGVQYWxldHRlKHIpLDE9PT1pLmxlbmd0aD9pWzBdOml9LHkucHJvdG90eXBlLnVwZGF0ZVBhbGV0dGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMudG9vTWFueUNvbG9ycyl7dmFyIGU9dGhpcy5tYXhDb2xvcnMscj10aGlzLnBhbGV0dGVUZXh0dXJlLG49TWF0aC5jZWlsKC4yNSp0Lmxlbmd0aC9lKTtpZihuPjEpZm9yKHZhciBpPS4yNSoodD10LnNsaWNlKCkpLmxlbmd0aCVlO2k8biplO2krKyl0LnB1c2goMCwwLDAsMCk7ci5oZWlnaHQ8biYmci5yZXNpemUoZSxuKSxyLnN1YmltYWdlKHt3aWR0aDpNYXRoLm1pbiguMjUqdC5sZW5ndGgsZSksaGVpZ2h0Om4sZGF0YTp0fSwwLDApfX0seS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2l6ZUJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkZyYWN0QnVmZmVyLmRlc3Ryb3koKSx0LmNvbG9yQnVmZmVyLmRlc3Ryb3koKSx0LmFjdGl2YXRpb24uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLHQuc2VsZWN0aW9uQnVmZmVyLmRlc3Ryb3koKSx0LmVsZW1lbnRzJiZ0LmVsZW1lbnRzLmRlc3Ryb3koKX0pLHRoaXMuZ3JvdXBzLmxlbmd0aD0wLHRoaXMucGFsZXR0ZVRleHR1cmUuZGVzdHJveSgpLHRoaXMubWFya2VyVGV4dHVyZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLHRoaXN9O3ZhciB4PXQoIm9iamVjdC1hc3NpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbSh0LGUpLG49ci5yZW5kZXIuYmluZChyKTtyZXR1cm4geChuLHtyZW5kZXI6bix1cGRhdGU6ci51cGRhdGUuYmluZChyKSxkcmF3OnIuZHJhdy5iaW5kKHIpLGRlc3Ryb3k6ci5kZXN0cm95LmJpbmQocikscmVnbDpyLnJlZ2wsZ2w6ci5nbCxjYW52YXM6ci5nbC5jYW52YXMsZ3JvdXBzOnIuZ3JvdXBzLG1hcmtlcnM6ci5tYXJrZXJDYWNoZSxwYWxldHRlOnIucGFsZXR0ZX0pLG59fSx7ImFycmF5LWJvdW5kcyI6NTUsImNvbG9yLWlkIjoxMDgsImNvbG9yLW5vcm1hbGl6ZSI6MTEwLCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyMjMsZ2xzbGlmeTo0MDEsImlzLWlleHBsb3JlciI6NDExLCJvYmplY3QtYXNzaWduIjo0NDYsInBhcnNlLXJlY3QiOjQ1MSwicGljay1ieS1hbGlhcyI6NDU3LCJwb2ludC1jbHVzdGVyIjo0NjEsInRvLWZsb2F0MzIiOjUyMiwidXBkYXRlLWRpZmYiOjUzM31dLDQ4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLXNjYXR0ZXIyZCIpLGk9dCgicGljay1ieS1hbGlhcyIpLGE9dCgiYXJyYXktYm91bmRzIiksbz10KCJyYWYiKSxzPXQoImFycmF5LXJhbmdlIiksbD10KCJwYXJzZS1yZWN0IiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIik7ZnVuY3Rpb24gdSh0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0LGUpO3RoaXMudHJhY2VzPVtdLHRoaXMucGFzc2VzPXt9LHRoaXMucmVnbD10LHRoaXMuc2NhdHRlcj1uKHQpLHRoaXMuY2FudmFzPXRoaXMuc2NhdHRlci5jYW52YXN9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuKG51bGwhPXQuaWQ/dC5pZDp0KTw8MTZ8KDI1NSZlKTw8OHwyNTUmcn1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbixpLGEsbyxzPXRbZV0sbD10W3JdO3JldHVybiBzLmxlbmd0aD4yPyhzWzBdLHNbMl0sbj1zWzFdLGk9c1szXSk6cy5sZW5ndGg/KG49c1swXSxpPXNbMV0pOihzLngsbj1zLnkscy54K3Mud2lkdGgsaT1zLnkrcy5oZWlnaHQpLGwubGVuZ3RoPjI/KGE9bFswXSxvPWxbMl0sbFsxXSxsWzNdKTpsLmxlbmd0aD8oYT1sWzBdLG89bFsxXSk6KGE9bC54LGwueSxvPWwueCtsLndpZHRoLGwueStsLmhlaWdodCksW2EsbixvLGldfWZ1bmN0aW9uIHAodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVyblt0LHQsdCx0XTtpZigyPT09dC5sZW5ndGgpcmV0dXJuW3RbMF0sdFsxXSx0WzBdLHRbMV1dO3ZhciBlPWwodCk7cmV0dXJuW2UueCxlLnksZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0XX1lLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO24tLTspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxyKSx0aGlzLnJlZ2wuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/dGhpcy5kcmF3KCk6KHRoaXMuZGlydHk/bnVsbD09dGhpcy5wbGFubmVkJiYodGhpcy5wbGFubmVkPW8oZnVuY3Rpb24oKXtlLmRyYXcoKSxlLmRpcnR5PSEwLGUucGxhbm5lZD1udWxsfSkpOih0aGlzLmRyYXcoKSx0aGlzLmRpcnR5PSEwLG8oZnVuY3Rpb24oKXtlLmRpcnR5PSExfSkpLHRoaXMpfSx1LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy51cGRhdGVJdGVtKG4sZVtuXSk7dGhpcy50cmFjZXM9dGhpcy50cmFjZXMuZmlsdGVyKEJvb2xlYW4pO2Zvcih2YXIgaT1bXSxhPTAsbz0wO288dGhpcy50cmFjZXMubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRoaXMudHJhY2VzW29dLGw9dGhpcy50cmFjZXNbb10ucGFzc2VzLGM9MDtjPGwubGVuZ3RoO2MrKylpLnB1c2godGhpcy5wYXNzZXNbbFtjXV0pO3MucGFzc09mZnNldD1hLGErPXMucGFzc2VzLmxlbmd0aH1yZXR1cm4odD10aGlzLnNjYXR0ZXIpLnVwZGF0ZS5hcHBseSh0LGkpLHRoaXN9fSx1LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5yZWdsO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLnRyYWNlc1t0XT1udWxsLHRoaXM7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIG4sbz1pKGUse2RhdGE6ImRhdGEgaXRlbXMgY29sdW1ucyByb3dzIHZhbHVlcyBkaW1lbnNpb25zIHNhbXBsZXMgeCIsc25hcDoic25hcCBjbHVzdGVyIixzaXplOiJzaXplcyBzaXplIHJhZGl1cyIsY29sb3I6ImNvbG9ycyBjb2xvciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSBvcGFxdWUiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixib3JkZXJDb2xvcjoiYm9yZGVyQ29sb3JzIGJvcmRlckNvbG9yIGJvcmRlcmNvbG9yIHN0cm9rZSBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLG1hcmtlcjoibWFya2VycyBtYXJrZXIgc2hhcGUiLHJhbmdlOiJyYW5nZSByYW5nZXMgZGF0YWJveCBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCB2aWV3Ym94Iixkb21haW46ImRvbWFpbiBkb21haW5zIGFyZWEgYXJlYXMiLHBhZGRpbmc6InBhZCBwYWRkaW5nIHBhZGRpbmdzIHBhZHMgbWFyZ2luIG1hcmdpbnMiLHRyYW5zcG9zZToidHJhbnNwb3NlIHRyYW5zcG9zZWQiLGRpYWdvbmFsOiJkaWFnb25hbCBkaWFnIHNob3dEaWFnb25hbCIsdXBwZXI6InVwcGVyIHVwIHRvcCB1cHBlcmhhbGYgdXBwZXJIYWxmIHNob3d1cHBlcmhhbGYgc2hvd1VwcGVyIHNob3dVcHBlckhhbGYiLGxvd2VyOiJsb3dlciBsb3cgYm90dG9tIGxvd2VyaGFsZiBsb3dlckhhbGYgc2hvd2xvd2VyaGFsZiBzaG93TG93ZXJIYWxmIHNob3dMb3dlciJ9KSxzPXRoaXMudHJhY2VzW3RdfHwodGhpcy50cmFjZXNbdF09e2lkOnQsYnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxjb2xvcjoiYmxhY2siLG1hcmtlcjpudWxsLHNpemU6MTIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjEsdmlld3BvcnQ6bChbci5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHIuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxwYWRkaW5nOlswLDAsMCwwXSxvcGFjaXR5OjEsZGlhZ29uYWw6ITAsdXBwZXI6ITAsbG93ZXI6ITB9KTtpZihudWxsIT1vLmNvbG9yJiYocy5jb2xvcj1vLmNvbG9yKSxudWxsIT1vLnNpemUmJihzLnNpemU9by5zaXplKSxudWxsIT1vLm1hcmtlciYmKHMubWFya2VyPW8ubWFya2VyKSxudWxsIT1vLmJvcmRlckNvbG9yJiYocy5ib3JkZXJDb2xvcj1vLmJvcmRlckNvbG9yKSxudWxsIT1vLmJvcmRlclNpemUmJihzLmJvcmRlclNpemU9by5ib3JkZXJTaXplKSxudWxsIT1vLm9wYWNpdHkmJihzLm9wYWNpdHk9by5vcGFjaXR5KSxvLnZpZXdwb3J0JiYocy52aWV3cG9ydD1sKG8udmlld3BvcnQpKSxudWxsIT1vLmRpYWdvbmFsJiYocy5kaWFnb25hbD1vLmRpYWdvbmFsKSxudWxsIT1vLnVwcGVyJiYocy51cHBlcj1vLnVwcGVyKSxudWxsIT1vLmxvd2VyJiYocy5sb3dlcj1vLmxvd2VyKSxvLmRhdGEpe3MuYnVmZmVyKGMoby5kYXRhKSkscy5jb2x1bW5zPW8uZGF0YS5sZW5ndGgscy5jb3VudD1vLmRhdGFbMF0ubGVuZ3RoLHMuYm91bmRzPVtdO2Zvcih2YXIgdT0wO3U8cy5jb2x1bW5zO3UrKylzLmJvdW5kc1t1XT1hKG8uZGF0YVt1XSwxKX1vLnJhbmdlJiYocy5yYW5nZT1vLnJhbmdlLG49cy5yYW5nZSYmIm51bWJlciIhPXR5cGVvZiBzLnJhbmdlWzBdKSxvLmRvbWFpbiYmKHMuZG9tYWluPW8uZG9tYWluKTt2YXIgZD0hMTtudWxsIT1vLnBhZGRpbmcmJihBcnJheS5pc0FycmF5KG8ucGFkZGluZykmJm8ucGFkZGluZy5sZW5ndGg9PT1zLmNvbHVtbnMmJiJudW1iZXIiPT10eXBlb2Ygby5wYWRkaW5nW28ucGFkZGluZy5sZW5ndGgtMV0/KHMucGFkZGluZz1vLnBhZGRpbmcubWFwKHApLGQ9ITApOnMucGFkZGluZz1wKG8ucGFkZGluZykpO3ZhciBnPXMuY29sdW1ucyx2PXMuY291bnQsbT1zLnZpZXdwb3J0LndpZHRoLHk9cy52aWV3cG9ydC5oZWlnaHQseD1zLnZpZXdwb3J0LngsYj1zLnZpZXdwb3J0LnksXz1tL2csdz15L2c7cy5wYXNzZXM9W107Zm9yKHZhciBrPTA7azxnO2srKylmb3IodmFyIFQ9MDtUPGc7VCsrKWlmKChzLmRpYWdvbmFsfHxUIT09aykmJihzLnVwcGVyfHwhKGs+VCkpJiYocy5sb3dlcnx8IShrPFQpKSl7dmFyIEE9ZihzLmlkLGssVCksTT10aGlzLnBhc3Nlc1tBXXx8KHRoaXMucGFzc2VzW0FdPXt9KTtpZihvLmRhdGEmJihvLnRyYW5zcG9zZT9NLnBvc2l0aW9ucz17eDp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDpULGNvdW50OnYsc3RyaWRlOmd9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayxjb3VudDp2LHN0cmlkZTpnfX06TS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6VCp2LGNvdW50OnZ9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayp2LGNvdW50OnZ9fSxNLmJvdW5kcz1oKHMuYm91bmRzLGssVCkpLG8uZG9tYWlufHxvLnZpZXdwb3J0fHxvLmRhdGEpe3ZhciBTPWQ/aChzLnBhZGRpbmcsayxUKTpzLnBhZGRpbmc7aWYocy5kb21haW4pe3ZhciBFPWgocy5kb21haW4sayxUKSxDPUVbMF0sTD1FWzFdLHo9RVsyXSxPPUVbM107TS52aWV3cG9ydD1beCtDKm0rU1swXSxiK0wqeStTWzFdLHgreiptLVNbMl0sYitPKnktU1szXV19ZWxzZSBNLnZpZXdwb3J0PVt4K1QqXytfKlNbMF0sYitrKncrdypTWzFdLHgrKFQrMSkqXy1fKlNbMl0sYisoaysxKSp3LXcqU1szXV19by5jb2xvciYmKE0uY29sb3I9cy5jb2xvciksby5zaXplJiYoTS5zaXplPXMuc2l6ZSksby5tYXJrZXImJihNLm1hcmtlcj1zLm1hcmtlciksby5ib3JkZXJTaXplJiYoTS5ib3JkZXJTaXplPXMuYm9yZGVyU2l6ZSksby5ib3JkZXJDb2xvciYmKE0uYm9yZGVyQ29sb3I9cy5ib3JkZXJDb2xvciksby5vcGFjaXR5JiYoTS5vcGFjaXR5PXMub3BhY2l0eSksby5yYW5nZSYmKE0ucmFuZ2U9bj9oKHMucmFuZ2UsayxUKTpzLnJhbmdlfHxNLmJvdW5kcykscy5wYXNzZXMucHVzaChBKX1yZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2lmKGUubGVuZ3RoKXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKCJudW1iZXIiPT10eXBlb2YgZVtpXSl7dmFyIGE9dGhpcy50cmFjZXNbZVtpXV0sbz1hLnBhc3NlcyxsPWEucGFzc09mZnNldDtuLnB1c2guYXBwbHkobixzKGwsbCtvLmxlbmd0aCkpfWVsc2UgaWYoZVtpXS5sZW5ndGgpe3ZhciBjPWVbaV0sdT10aGlzLnRyYWNlc1tpXSxmPXUucGFzc2VzLGg9dS5wYXNzT2Zmc2V0O2Y9Zi5tYXAoZnVuY3Rpb24odCxlKXtuW2grZV09Y30pfSh0PXRoaXMuc2NhdHRlcikuZHJhdy5hcHBseSh0LG4pfWVsc2UgdGhpcy5zY2F0dGVyLmRyYXcoKTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuYnVmZmVyJiZ0LmJ1ZmZlci5kZXN0cm95JiZ0LmJ1ZmZlci5kZXN0cm95KCl9KSx0aGlzLnRyYWNlcz1udWxsLHRoaXMucGFzc2VzPW51bGwsdGhpcy5zY2F0dGVyLmRlc3Ryb3koKSx0aGlzfX0seyJhcnJheS1ib3VuZHMiOjU1LCJhcnJheS1yYW5nZSI6NTcsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjIyMywicGFyc2UtcmVjdCI6NDUxLCJwaWNrLWJ5LWFsaWFzIjo0NTcscmFmOjQ3NiwicmVnbC1zY2F0dGVyMmQiOjQ4NH1dLDQ4NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5pZD1WKyssdGhpcy50eXBlPXQsdGhpcy5kYXRhPWV9ZnVuY3Rpb24gZSh0KXtyZXR1cm4iWyIrZnVuY3Rpb24gdChlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107dmFyIHI9ZS5jaGFyQXQoMCksbj1lLmNoYXJBdChlLmxlbmd0aC0xKTtpZigxPGUubGVuZ3RoJiZyPT09biYmKCciJz09PXJ8fCInIj09PXIpKXJldHVyblsnIicrZS5zdWJzdHIoMSxlLmxlbmd0aC0yKS5yZXBsYWNlKC9cXC9nLCJcXFxcIikucmVwbGFjZSgvIi9nLCdcXCInKSsnIiddO2lmKHI9L1xbKGZhbHNlfHRydWV8bnVsbHxcZCt8J1teJ10qJ3wiW14iXSoiKVxdLy5leGVjKGUpKXJldHVybiB0KGUuc3Vic3RyKDAsci5pbmRleCkpLmNvbmNhdCh0KHJbMV0pKS5jb25jYXQodChlLnN1YnN0cihyLmluZGV4K3JbMF0ubGVuZ3RoKSkpO2lmKDE9PT0ocj1lLnNwbGl0KCIuIikpLmxlbmd0aClyZXR1cm5bJyInK2UucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJykrJyInXTtmb3IoZT1bXSxuPTA7bjxyLmxlbmd0aDsrK24pZT1lLmNvbmNhdCh0KHJbbl0pKTtyZXR1cm4gZX0odCkuam9pbigiXVsiKSsiXSJ9ZnVuY3Rpb24gcih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgpOnR9ZnVuY3Rpb24gbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0fWZ1bmN0aW9uIGkodCl7dmFyIGUsaSxhLG8scz10fHx7fTt0PXt9O3ZhciBsPVtdLGM9W10sdT0idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz8xOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGY9ITEsaD1mdW5jdGlvbih0KXt9LHA9ZnVuY3Rpb24oKXt9O2lmKCJzdHJpbmciPT10eXBlb2Ygcz9lPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iocyk6Im9iamVjdCI9PXR5cGVvZiBzJiYoInN0cmluZyI9PXR5cGVvZiBzLm5vZGVOYW1lJiYiZnVuY3Rpb24iPT10eXBlb2Ygcy5hcHBlbmRDaGlsZCYmImZ1bmN0aW9uIj09dHlwZW9mIHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P2U9czoiZnVuY3Rpb24iPT10eXBlb2Ygcy5kcmF3QXJyYXlzfHwiZnVuY3Rpb24iPT10eXBlb2Ygcy5kcmF3RWxlbWVudHM/YT0obz1zKS5jYW52YXM6KCJnbCJpbiBzP289cy5nbDoiY2FudmFzImluIHM/YT1uKHMuY2FudmFzKToiY29udGFpbmVyImluIHMmJihpPW4ocy5jb250YWluZXIpKSwiYXR0cmlidXRlcyJpbiBzJiYodD1zLmF0dHJpYnV0ZXMpLCJleHRlbnNpb25zImluIHMmJihsPXIocy5leHRlbnNpb25zKSksIm9wdGlvbmFsRXh0ZW5zaW9ucyJpbiBzJiYoYz1yKHMub3B0aW9uYWxFeHRlbnNpb25zKSksIm9uRG9uZSJpbiBzJiYoaD1zLm9uRG9uZSksInByb2ZpbGUiaW4gcyYmKGY9ISFzLnByb2ZpbGUpLCJwaXhlbFJhdGlvImluIHMmJih1PStzLnBpeGVsUmF0aW8pKSksZSYmKCJjYW52YXMiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2E9ZTppPWUpLCFvKXtpZighYSl7aWYoIShlPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQ7dCE9PWRvY3VtZW50LmJvZHkmJihlPShuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLnJpZ2h0LW4ubGVmdCxuPW4uYm90dG9tLW4udG9wKSxpLndpZHRoPXIqZSxpLmhlaWdodD1yKm4saihpLnN0eWxlLHt3aWR0aDplKyJweCIsaGVpZ2h0Om4rInB4In0pfXZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBqKGkuc3R5bGUse2JvcmRlcjowLG1hcmdpbjowLHBhZGRpbmc6MCx0b3A6MCxsZWZ0OjB9KSx0LmFwcGVuZENoaWxkKGkpLHQ9PT1kb2N1bWVudC5ib2R5JiYoaS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGoodC5zdHlsZSx7bWFyZ2luOjAscGFkZGluZzowfSkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLG4sITEpLG4oKSx7Y2FudmFzOmksb25EZXN0cm95OmZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbiksdC5yZW1vdmVDaGlsZChpKX19fShpfHxkb2N1bWVudC5ib2R5LDAsdSkpKXJldHVybiBudWxsO2E9ZS5jYW52YXMscD1lLm9uRGVzdHJveX1vPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyKXt0cnl7cmV0dXJuIHQuZ2V0Q29udGV4dChyLGUpfWNhdGNoKHQpe3JldHVybiBudWxsfX1yZXR1cm4gcigid2ViZ2wiKXx8cigiZXhwZXJpbWVudGFsLXdlYmdsIil8fHIoIndlYmdsLWV4cGVyaW1lbnRhbCIpfShhLHQpfXJldHVybiBvP3tnbDpvLGNhbnZhczphLGNvbnRhaW5lcjppLGV4dGVuc2lvbnM6bCxvcHRpb25hbEV4dGVuc2lvbnM6YyxwaXhlbFJhdGlvOnUscHJvZmlsZTpmLG9uRG9uZTpoLG9uRGVzdHJveTpwfToocCgpLGgoIndlYmdsIG5vdCBzdXBwb3J0ZWQsIHRyeSB1cGdyYWRpbmcgeW91ciBicm93c2VyIG9yIGdyYXBoaWNzIGRyaXZlcnMgaHR0cDovL2dldC53ZWJnbC5vcmciKSxudWxsKX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPUFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlLHI7cmV0dXJuIGU9KDY1NTM1PHQpPDw0LGV8PXI9KDI1NTwodD4+Pj1lKSk8PDMsKGV8PXI9KDE1PCh0Pj4+PXIpKTw8Mil8KHI9KDM8KHQ+Pj49cikpPDwxKXx0Pj4+cj4+MX1mdW5jdGlvbiBzKCl7ZnVuY3Rpb24gdCh0KXt0Ontmb3IodmFyIGU9MTY7MjY4NDM1NDU2Pj1lO2UqPTE2KWlmKHQ8PWUpe3Q9ZTticmVhayB0fXQ9MH1yZXR1cm4gMDwoZT1yW28odCk+PjJdKS5sZW5ndGg/ZS5wb3AoKTpuZXcgQXJyYXlCdWZmZXIodCl9ZnVuY3Rpb24gZSh0KXtyW28odC5ieXRlTGVuZ3RoKT4+Ml0ucHVzaCh0KX12YXIgcj1hKDgsZnVuY3Rpb24oKXtyZXR1cm5bXX0pO3JldHVybnthbGxvYzp0LGZyZWU6ZSxhbGxvY1R5cGU6ZnVuY3Rpb24oZSxyKXt2YXIgbj1udWxsO3N3aXRjaChlKXtjYXNlIDUxMjA6bj1uZXcgSW50OEFycmF5KHQociksMCxyKTticmVhaztjYXNlIDUxMjE6bj1uZXcgVWludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIyOm49bmV3IEludDE2QXJyYXkodCgyKnIpLDAscik7YnJlYWs7Y2FzZSA1MTIzOm49bmV3IFVpbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNDpuPW5ldyBJbnQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNTpuPW5ldyBVaW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjY6bj1uZXcgRmxvYXQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIG4ubGVuZ3RoIT09cj9uLnN1YmFycmF5KDAscik6bn0sZnJlZVR5cGU6ZnVuY3Rpb24odCl7ZSh0LmJ1ZmZlcil9fX1mdW5jdGlvbiBsKHQpe3JldHVybiEhdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQuc2hhcGUpJiZBcnJheS5pc0FycmF5KHQuc3RyaWRlKSYmIm51bWJlciI9PXR5cGVvZiB0Lm9mZnNldCYmdC5zaGFwZS5sZW5ndGg9PT10LnN0cmlkZS5sZW5ndGgmJihBcnJheS5pc0FycmF5KHQuZGF0YSl8fFcodC5kYXRhKSl9ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxlOysrbylmb3IodmFyIHM9dFtvXSxsPTA7bDxyOysrbClmb3IodmFyIGM9c1tsXSx1PTA7dTxuOysrdSlpW2ErK109Y1t1XX1mdW5jdGlvbiB1KHQpe3JldHVybiAwfCRbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT1lW3JdfWZ1bmN0aW9uIGgodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTAsbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7YzxuOysrYyl0W3MrK109ZVtpKmwrYSpjK29dfWZ1bmN0aW9uIHAodCxlLHIsbil7ZnVuY3Rpb24gaShlKXt0aGlzLmlkPWMrKyx0aGlzLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHRoaXMudHlwZT1lLHRoaXMudXNhZ2U9MzUwNDQsdGhpcy5ieXRlTGVuZ3RoPTAsdGhpcy5kaW1lbnNpb249MSx0aGlzLmR0eXBlPTUxMjEsdGhpcy5wZXJzaXN0ZW50RGF0YT1udWxsLHIucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIGEoZSxyLG4pe2UuYnl0ZUxlbmd0aD1yLmJ5dGVMZW5ndGgsdC5idWZmZXJEYXRhKGUudHlwZSxyLG4pfWZ1bmN0aW9uIG8odCxlLHIsbixpLG8pe2lmKHQudXNhZ2U9cixBcnJheS5pc0FycmF5KGUpKXtpZih0LmR0eXBlPW58fDUxMjYsMDxlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKXtpPXR0KGUpO2Zvcih2YXIgcz1uPTE7czxpLmxlbmd0aDsrK3Mpbio9aVtzXTt0LmRpbWVuc2lvbj1uLGEodCxlPVEoZSxpLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOkcuZnJlZVR5cGUoZSl9ZWxzZSJudW1iZXIiPT10eXBlb2YgZVswXT8odC5kaW1lbnNpb249aSxmKGk9Ry5hbGxvY1R5cGUodC5kdHlwZSxlLmxlbmd0aCksZSksYSh0LGksciksbz90LnBlcnNpc3RlbnREYXRhPWk6Ry5mcmVlVHlwZShpKSk6VyhlWzBdKSYmKHQuZGltZW5zaW9uPWVbMF0ubGVuZ3RoLHQuZHR5cGU9bnx8dShlWzBdKXx8NTEyNixhKHQsZT1RKGUsW2UubGVuZ3RoLGVbMF0ubGVuZ3RoXSx0LmR0eXBlKSxyKSxvP3QucGVyc2lzdGVudERhdGE9ZTpHLmZyZWVUeXBlKGUpKX1lbHNlIGlmKFcoZSkpdC5kdHlwZT1ufHx1KGUpLHQuZGltZW5zaW9uPWksYSh0LGUsciksbyYmKHQucGVyc2lzdGVudERhdGE9bmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKSk7ZWxzZSBpZihsKGUpKXtpPWUuc2hhcGU7dmFyIGM9ZS5zdHJpZGUscD0ocz1lLm9mZnNldCwwKSxkPTAsZz0wLHY9MDsxPT09aS5sZW5ndGg/KHA9aVswXSxkPTEsZz1jWzBdLHY9MCk6Mj09PWkubGVuZ3RoJiYocD1pWzBdLGQ9aVsxXSxnPWNbMF0sdj1jWzFdKSx0LmR0eXBlPW58fHUoZS5kYXRhKXx8NTEyNix0LmRpbWVuc2lvbj1kLGgoaT1HLmFsbG9jVHlwZSh0LmR0eXBlLHAqZCksZS5kYXRhLHAsZCxnLHYscyksYSh0LGksciksbz90LnBlcnNpc3RlbnREYXRhPWk6Ry5mcmVlVHlwZShpKX19ZnVuY3Rpb24gcyhyKXtlLmJ1ZmZlckNvdW50LS07Zm9yKHZhciBpPTA7aTxuLnN0YXRlLmxlbmd0aDsrK2kpe3ZhciBhPW4uc3RhdGVbaV07YS5idWZmZXI9PT1yJiYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSksYS5idWZmZXI9bnVsbCl9dC5kZWxldGVCdWZmZXIoci5idWZmZXIpLHIuYnVmZmVyPW51bGwsZGVsZXRlIHBbci5pZF19dmFyIGM9MCxwPXt9O2kucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0LmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuYnVmZmVyKX0saS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ModGhpcyl9O3ZhciBkPVtdO3JldHVybiByLnByb2ZpbGUmJihlLmdldFRvdGFsQnVmZmVyU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKHApLmZvckVhY2goZnVuY3Rpb24oZSl7dCs9cFtlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGU6ZnVuY3Rpb24obixhLGMsZCl7ZnVuY3Rpb24gZyhlKXt2YXIgbj0zNTA0NCxpPW51bGwsYT0wLHM9MCxjPTE7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fFcoZSl8fGwoZSk/aT1lOiJudW1iZXIiPT10eXBlb2YgZT9hPTB8ZTplJiYoImRhdGEiaW4gZSYmKGk9ZS5kYXRhKSwidXNhZ2UiaW4gZSYmKG49S1tlLnVzYWdlXSksInR5cGUiaW4gZSYmKHM9SltlLnR5cGVdKSwiZGltZW5zaW9uImluIGUmJihjPTB8ZS5kaW1lbnNpb24pLCJsZW5ndGgiaW4gZSYmKGE9MHxlLmxlbmd0aCkpLHYuYmluZCgpLGk/byh2LGksbixzLGMsZCk6KGEmJnQuYnVmZmVyRGF0YSh2LnR5cGUsYSxuKSx2LmR0eXBlPXN8fDUxMjEsdi51c2FnZT1uLHYuZGltZW5zaW9uPWMsdi5ieXRlTGVuZ3RoPWEpLHIucHJvZmlsZSYmKHYuc3RhdHMuc2l6ZT12LmJ5dGVMZW5ndGgqZXRbdi5kdHlwZV0pLGd9ZS5idWZmZXJDb3VudCsrO3ZhciB2PW5ldyBpKGEpO3JldHVybiBwW3YuaWRdPXYsY3x8ZyhuKSxnLl9yZWdsVHlwZT0iYnVmZmVyIixnLl9idWZmZXI9dixnLnN1YmRhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpPTB8KHJ8fDApO2lmKHYuYmluZCgpLFcoZSkpdC5idWZmZXJTdWJEYXRhKHYudHlwZSxpLGUpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7aWYoMDxlLmxlbmd0aClpZigibnVtYmVyIj09dHlwZW9mIGVbMF0pe3ZhciBhPUcuYWxsb2NUeXBlKHYuZHR5cGUsZS5sZW5ndGgpO2YoYSxlKSx0LmJ1ZmZlclN1YkRhdGEodi50eXBlLGksYSksRy5mcmVlVHlwZShhKX1lbHNlKEFycmF5LmlzQXJyYXkoZVswXSl8fFcoZVswXSkpJiYobj10dChlKSxhPVEoZSxuLHYuZHR5cGUpLHQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxhKSxHLmZyZWVUeXBlKGEpKX1lbHNlIGlmKGwoZSkpe249ZS5zaGFwZTt2YXIgbz1lLnN0cmlkZSxzPWE9MCxjPTAscD0wOzE9PT1uLmxlbmd0aD8oYT1uWzBdLHM9MSxjPW9bMF0scD0wKToyPT09bi5sZW5ndGgmJihhPW5bMF0scz1uWzFdLGM9b1swXSxwPW9bMV0pLG49QXJyYXkuaXNBcnJheShlLmRhdGEpP3YuZHR5cGU6dShlLmRhdGEpLGgobj1HLmFsbG9jVHlwZShuLGEqcyksZS5kYXRhLGEscyxjLHAsZS5vZmZzZXQpLHQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxuKSxHLmZyZWVUeXBlKG4pfXJldHVybiBnfSxyLnByb2ZpbGUmJihnLnN0YXRzPXYuc3RhdHMpLGcuZGVzdHJveT1mdW5jdGlvbigpe3Modil9LGd9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0LGUpe3ZhciByPWQucG9wKCk7cmV0dXJuIHJ8fChyPW5ldyBpKHQpKSxyLmJpbmQoKSxvKHIsZSwzNTA0MCwwLDEsITEpLHJ9LGRlc3Ryb3lTdHJlYW06ZnVuY3Rpb24odCl7ZC5wdXNoKHQpfSxjbGVhcjpmdW5jdGlvbigpe1gocCkuZm9yRWFjaChzKSxkLmZvckVhY2gocyl9LGdldEJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fYnVmZmVyIGluc3RhbmNlb2YgaT90Ll9idWZmZXI6bnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe1gocCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHQuYmluZEJ1ZmZlcihlLnR5cGUsZS5idWZmZXIpLHQuYnVmZmVyRGF0YShlLnR5cGUsZS5wZXJzaXN0ZW50RGF0YXx8ZS5ieXRlTGVuZ3RoLGUudXNhZ2UpfSl9LF9pbml0QnVmZmVyOm99fWZ1bmN0aW9uIGQodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt0aGlzLmlkPWMrKyxzW3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXI9dCx0aGlzLnByaW1UeXBlPTQsdGhpcy50eXBlPXRoaXMudmVydENvdW50PTB9ZnVuY3Rpb24gYShuLGksYSxvLHMsYyx1KXtpZihuLmJ1ZmZlci5iaW5kKCksaSl7dmFyIGY9dTt1fHxXKGkpJiYoIWwoaSl8fFcoaS5kYXRhKSl8fChmPWUub2VzX2VsZW1lbnRfaW5kZXhfdWludD81MTI1OjUxMjMpLHIuX2luaXRCdWZmZXIobi5idWZmZXIsaSxhLGYsMyl9ZWxzZSB0LmJ1ZmZlckRhdGEoMzQ5NjMsYyxhKSxuLmJ1ZmZlci5kdHlwZT1mfHw1MTIxLG4uYnVmZmVyLnVzYWdlPWEsbi5idWZmZXIuZGltZW5zaW9uPTMsbi5idWZmZXIuYnl0ZUxlbmd0aD1jO2lmKGY9dSwhdSl7c3dpdGNoKG4uYnVmZmVyLmR0eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIwOmY9NTEyMTticmVhaztjYXNlIDUxMjM6Y2FzZSA1MTIyOmY9NTEyMzticmVhaztjYXNlIDUxMjU6Y2FzZSA1MTI0OmY9NTEyNX1uLmJ1ZmZlci5kdHlwZT1mfW4udHlwZT1mLDA+KGk9cykmJihpPW4uYnVmZmVyLmJ5dGVMZW5ndGgsNTEyMz09PWY/aT4+PTE6NTEyNT09PWYmJihpPj49MikpLG4udmVydENvdW50PWksaT1vLDA+byYmKGk9NCwxPT09KG89bi5idWZmZXIuZGltZW5zaW9uKSYmKGk9MCksMj09PW8mJihpPTEpLDM9PT1vJiYoaT00KSksbi5wcmltVHlwZT1pfWZ1bmN0aW9uIG8odCl7bi5lbGVtZW50c0NvdW50LS0sZGVsZXRlIHNbdC5pZF0sdC5idWZmZXIuZGVzdHJveSgpLHQuYnVmZmVyPW51bGx9dmFyIHM9e30sYz0wLHU9e3VpbnQ4OjUxMjEsdWludDE2OjUxMjN9O2Uub2VzX2VsZW1lbnRfaW5kZXhfdWludCYmKHUudWludDMyPTUxMjUpLGkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlci5iaW5kKCl9O3ZhciBmPVtdO3JldHVybntjcmVhdGU6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBzKHQpe2lmKHQpaWYoIm51bWJlciI9PXR5cGVvZiB0KWModCksZi5wcmltVHlwZT00LGYudmVydENvdW50PTB8dCxmLnR5cGU9NTEyMTtlbHNle3ZhciBlPW51bGwscj0zNTA0NCxuPS0xLGk9LTEsbz0wLGg9MDtBcnJheS5pc0FycmF5KHQpfHxXKHQpfHxsKHQpP2U9dDooImRhdGEiaW4gdCYmKGU9dC5kYXRhKSwidXNhZ2UiaW4gdCYmKHI9S1t0LnVzYWdlXSksInByaW1pdGl2ZSJpbiB0JiYobj1ydFt0LnByaW1pdGl2ZV0pLCJjb3VudCJpbiB0JiYoaT0wfHQuY291bnQpLCJ0eXBlImluIHQmJihoPXVbdC50eXBlXSksImxlbmd0aCJpbiB0P289MHx0Lmxlbmd0aDoobz1pLDUxMjM9PT1ofHw1MTIyPT09aD9vKj0yOjUxMjUhPT1oJiY1MTI0IT09aHx8KG8qPTQpKSksYShmLGUscixuLGksbyxoKX1lbHNlIGMoKSxmLnByaW1UeXBlPTQsZi52ZXJ0Q291bnQ9MCxmLnR5cGU9NTEyMTtyZXR1cm4gc312YXIgYz1yLmNyZWF0ZShudWxsLDM0OTYzLCEwKSxmPW5ldyBpKGMuX2J1ZmZlcik7cmV0dXJuIG4uZWxlbWVudHNDb3VudCsrLHModCkscy5fcmVnbFR5cGU9ImVsZW1lbnRzIixzLl9lbGVtZW50cz1mLHMuc3ViZGF0YT1mdW5jdGlvbih0LGUpe3JldHVybiBjLnN1YmRhdGEodCxlKSxzfSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvKGYpfSxzfSxjcmVhdGVTdHJlYW06ZnVuY3Rpb24odCl7dmFyIGU9Zi5wb3AoKTtyZXR1cm4gZXx8KGU9bmV3IGkoci5jcmVhdGUobnVsbCwzNDk2MywhMCwhMSkuX2J1ZmZlcikpLGEoZSx0LDM1MDQwLC0xLC0xLDAsMCksZX0sZGVzdHJveVN0cmVhbTpmdW5jdGlvbih0KXtmLnB1c2godCl9LGdldEVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll9lbGVtZW50cyBpbnN0YW5jZW9mIGk/dC5fZWxlbWVudHM6bnVsbH0sY2xlYXI6ZnVuY3Rpb24oKXtYKHMpLmZvckVhY2gobyl9fX1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1HLmFsbG9jVHlwZSg1MTIzLHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpaWYoaXNOYU4odFtyXSkpZVtyXT02NTUzNTtlbHNlIGlmKDEvMD09PXRbcl0pZVtyXT0zMTc0NDtlbHNlIGlmKC0xLzA9PT10W3JdKWVbcl09NjQ1MTI7ZWxzZXtudFswXT10W3JdO3ZhciBuPShhPWl0WzBdKT4+PjMxPDwxNSxpPShhPDwxPj4+MjQpLTEyNyxhPWE+PjEzJjEwMjM7ZVtyXT0tMjQ+aT9uOi0xND5pP24rKGErMTAyND4+LTE0LWkpOjE1PGk/biszMTc0NDpuKyhpKzE1PDwxMCkrYX1yZXR1cm4gZX1mdW5jdGlvbiB2KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxXKHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIltvYmplY3QgIit0KyJdIn1mdW5jdGlvbiB5KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYoMD09PXQubGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIHRbMF0pfWZ1bmN0aW9uIHgodCl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RofHwhdih0WzBdKSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF8odCl7aWYoIXQpcmV0dXJuITE7dmFyIGU9Yih0KTtyZXR1cm4gMDw9cHQuaW5kZXhPZihlKXx8KHkodCl8fHgodCl8fGwodCkpfWZ1bmN0aW9uIHcodCxlKXszNjE5Mz09PXQudHlwZT8odC5kYXRhPWcoZSksRy5mcmVlVHlwZShlKSk6dC5kYXRhPWV9ZnVuY3Rpb24gayh0LGUscixuLGksYSl7aWYodD0idW5kZWZpbmVkIiE9dHlwZW9mIGd0W3RdP2d0W3RdOnN0W3RdKmR0W2VdLGEmJih0Kj02KSxpKXtmb3Iobj0wOzE8PXI7KW4rPXQqcipyLHIvPTI7cmV0dXJuIG59cmV0dXJuIHQqcipufWZ1bmN0aW9uIFQodCxlLHIsbixpLGEsbyl7ZnVuY3Rpb24gcygpe3RoaXMuZm9ybWF0PXRoaXMuaW50ZXJuYWxmb3JtYXQ9NjQwOCx0aGlzLnR5cGU9NTEyMSx0aGlzLmZsaXBZPXRoaXMucHJlbXVsdGlwbHlBbHBoYT10aGlzLmNvbXByZXNzZWQ9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MSx0aGlzLmNvbG9yU3BhY2U9Mzc0NDQsdGhpcy5jaGFubmVscz10aGlzLmhlaWdodD10aGlzLndpZHRoPTB9ZnVuY3Rpb24gYyh0LGUpe3QuaW50ZXJuYWxmb3JtYXQ9ZS5pbnRlcm5hbGZvcm1hdCx0LmZvcm1hdD1lLmZvcm1hdCx0LnR5cGU9ZS50eXBlLHQuY29tcHJlc3NlZD1lLmNvbXByZXNzZWQsdC5wcmVtdWx0aXBseUFscGhhPWUucHJlbXVsdGlwbHlBbHBoYSx0LmZsaXBZPWUuZmxpcFksdC51bnBhY2tBbGlnbm1lbnQ9ZS51bnBhY2tBbGlnbm1lbnQsdC5jb2xvclNwYWNlPWUuY29sb3JTcGFjZSx0LndpZHRoPWUud2lkdGgsdC5oZWlnaHQ9ZS5oZWlnaHQsdC5jaGFubmVscz1lLmNoYW5uZWxzfWZ1bmN0aW9uIHUodCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmUpeyJwcmVtdWx0aXBseUFscGhhImluIGUmJih0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhKSwiZmxpcFkiaW4gZSYmKHQuZmxpcFk9ZS5mbGlwWSksImFsaWdubWVudCJpbiBlJiYodC51bnBhY2tBbGlnbm1lbnQ9ZS5hbGlnbm1lbnQpLCJjb2xvclNwYWNlImluIGUmJih0LmNvbG9yU3BhY2U9cVtlLmNvbG9yU3BhY2VdKSwidHlwZSJpbiBlJiYodC50eXBlPUhbZS50eXBlXSk7dmFyIHI9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5jaGFubmVscyxhPSExOyJzaGFwZSJpbiBlPyhyPWUuc2hhcGVbMF0sbj1lLnNoYXBlWzFdLDM9PT1lLnNoYXBlLmxlbmd0aCYmKGk9ZS5zaGFwZVsyXSxhPSEwKSk6KCJyYWRpdXMiaW4gZSYmKHI9bj1lLnJhZGl1cyksIndpZHRoImluIGUmJihyPWUud2lkdGgpLCJoZWlnaHQiaW4gZSYmKG49ZS5oZWlnaHQpLCJjaGFubmVscyJpbiBlJiYoaT1lLmNoYW5uZWxzLGE9ITApKSx0LndpZHRoPTB8cix0LmhlaWdodD0wfG4sdC5jaGFubmVscz0wfGkscj0hMSwiZm9ybWF0ImluIGUmJihyPWUuZm9ybWF0LG49dC5pbnRlcm5hbGZvcm1hdD1ZW3JdLHQuZm9ybWF0PXB0W25dLHIgaW4gSCYmISgidHlwZSJpbiBlKSYmKHQudHlwZT1IW3JdKSxyIGluIEomJih0LmNvbXByZXNzZWQ9ITApLHI9ITApLCFhJiZyP3QuY2hhbm5lbHM9c3RbdC5mb3JtYXRdOmEmJiFyJiZ0LmNoYW5uZWxzIT09b3RbdC5mb3JtYXRdJiYodC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFt0LmNoYW5uZWxzXSl9fWZ1bmN0aW9uIGYoZSl7dC5waXhlbFN0b3JlaSgzNzQ0MCxlLmZsaXBZKSx0LnBpeGVsU3RvcmVpKDM3NDQxLGUucHJlbXVsdGlwbHlBbHBoYSksdC5waXhlbFN0b3JlaSgzNzQ0MyxlLmNvbG9yU3BhY2UpLHQucGl4ZWxTdG9yZWkoMzMxNyxlLnVucGFja0FsaWdubWVudCl9ZnVuY3Rpb24gaCgpe3MuY2FsbCh0aGlzKSx0aGlzLnlPZmZzZXQ9dGhpcy54T2Zmc2V0PTAsdGhpcy5kYXRhPW51bGwsdGhpcy5uZWVkc0ZyZWU9ITEsdGhpcy5lbGVtZW50PW51bGwsdGhpcy5uZWVkc0NvcHk9ITF9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPW51bGw7aWYoXyhlKT9yPWU6ZSYmKHUodCxlKSwieCJpbiBlJiYodC54T2Zmc2V0PTB8ZS54KSwieSJpbiBlJiYodC55T2Zmc2V0PTB8ZS55KSxfKGUuZGF0YSkmJihyPWUuZGF0YSkpLGUuY29weSl7dmFyIG49aS52aWV3cG9ydFdpZHRoLGE9aS52aWV3cG9ydEhlaWdodDt0LndpZHRoPXQud2lkdGh8fG4tdC54T2Zmc2V0LHQuaGVpZ2h0PXQuaGVpZ2h0fHxhLXQueU9mZnNldCx0Lm5lZWRzQ29weT0hMH1lbHNlIGlmKHIpe2lmKFcocikpdC5jaGFubmVscz10LmNoYW5uZWxzfHw0LHQuZGF0YT1yLCJ0eXBlImluIGV8fDUxMjEhPT10LnR5cGV8fCh0LnR5cGU9MHwkW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKV0pO2Vsc2UgaWYoeShyKSl7c3dpdGNoKHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCxhPShuPXIpLmxlbmd0aCx0LnR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjM6Y2FzZSA1MTI1OmNhc2UgNTEyNjooYT1HLmFsbG9jVHlwZSh0LnR5cGUsYSkpLnNldChuKSx0LmRhdGE9YTticmVhaztjYXNlIDM2MTkzOnQuZGF0YT1nKG4pfXQuYWxpZ25tZW50PTEsdC5uZWVkc0ZyZWU9ITB9ZWxzZSBpZihsKHIpKXtuPXIuZGF0YSxBcnJheS5pc0FycmF5KG4pfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8JFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobildKTthPXIuc2hhcGU7dmFyIG8scyxjLGYsaD1yLnN0cmlkZTszPT09YS5sZW5ndGg/KGM9YVsyXSxmPWhbMl0pOmY9Yz0xLG89YVswXSxzPWFbMV0sYT1oWzBdLGg9aFsxXSx0LmFsaWdubWVudD0xLHQud2lkdGg9byx0LmhlaWdodD1zLHQuY2hhbm5lbHM9Yyx0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W2NdLHQubmVlZHNGcmVlPSEwLG89ZixyPXIub2Zmc2V0LGM9dC53aWR0aCxmPXQuaGVpZ2h0LHM9dC5jaGFubmVscztmb3IodmFyIHA9Ry5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYypmKnMpLGQ9MCxtPTA7bTxmOysrbSlmb3IodmFyIGs9MDtrPGM7KytrKWZvcih2YXIgVD0wO1Q8czsrK1QpcFtkKytdPW5bYSprK2gqbStvKlQrcl07dyh0LHApfWVsc2UgaWYoYihyKT09PWx0fHxiKHIpPT09Y3QpYihyKT09PWx0P3QuZWxlbWVudD1yOnQuZWxlbWVudD1yLmNhbnZhcyx0LndpZHRoPXQuZWxlbWVudC53aWR0aCx0LmhlaWdodD10LmVsZW1lbnQuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT11dCl0LmVsZW1lbnQ9cix0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PWZ0KXQuZWxlbWVudD1yLHQud2lkdGg9ci5uYXR1cmFsV2lkdGgsdC5oZWlnaHQ9ci5uYXR1cmFsSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1odCl0LmVsZW1lbnQ9cix0LndpZHRoPXIudmlkZW9XaWR0aCx0LmhlaWdodD1yLnZpZGVvSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKHgocikpe2ZvcihuPXQud2lkdGh8fHJbMF0ubGVuZ3RoLGE9dC5oZWlnaHR8fHIubGVuZ3RoLGg9dC5jaGFubmVscyxoPXYoclswXVswXSk/aHx8clswXVswXS5sZW5ndGg6aHx8MSxvPVouc2hhcGUociksYz0xLGY9MDtmPG8ubGVuZ3RoOysrZiljKj1vW2ZdO2M9Ry5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYyksWi5mbGF0dGVuKHIsbywiIixjKSx3KHQsYyksdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW4sdC5oZWlnaHQ9YSx0LmNoYW5uZWxzPWgsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFtoXSx0Lm5lZWRzRnJlZT0hMH19ZWxzZSB0LndpZHRoPXQud2lkdGh8fDEsdC5oZWlnaHQ9dC5oZWlnaHR8fDEsdC5jaGFubmVscz10LmNoYW5uZWxzfHw0fWZ1bmN0aW9uIGQoZSxyLGksYSxvKXt2YXIgcz1lLmVsZW1lbnQsbD1lLmRhdGEsYz1lLmludGVybmFsZm9ybWF0LHU9ZS5mb3JtYXQsaD1lLnR5cGUscD1lLndpZHRoLGQ9ZS5oZWlnaHQ7ZihlKSxzP3QudGV4U3ViSW1hZ2UyRChyLG8saSxhLHUsaCxzKTplLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChyLG8saSxhLGMscCxkLGwpOmUubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4U3ViSW1hZ2UyRChyLG8saSxhLGUueE9mZnNldCxlLnlPZmZzZXQscCxkKSk6dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEscCxkLHUsaCxsKX1mdW5jdGlvbiBtKCl7cmV0dXJuIGR0LnBvcCgpfHxuZXcgaH1mdW5jdGlvbiBUKHQpe3QubmVlZHNGcmVlJiZHLmZyZWVUeXBlKHQuZGF0YSksaC5jYWxsKHQpLGR0LnB1c2godCl9ZnVuY3Rpb24gQSgpe3MuY2FsbCh0aGlzKSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTIsdGhpcy5taXBtYXNrPTAsdGhpcy5pbWFnZXM9QXJyYXkoMTYpfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPXQuaW1hZ2VzWzBdPW0oKTt0Lm1pcG1hc2s9MSxuLndpZHRoPXQud2lkdGg9ZSxuLmhlaWdodD10LmhlaWdodD1yLG4uY2hhbm5lbHM9dC5jaGFubmVscz00fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1udWxsO2lmKF8oZSkpYyhyPXQuaW1hZ2VzWzBdPW0oKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7ZWxzZSBpZih1KHQsZSksQXJyYXkuaXNBcnJheShlLm1pcG1hcCkpZm9yKHZhciBuPWUubWlwbWFwLGk9MDtpPG4ubGVuZ3RoOysraSljKHI9dC5pbWFnZXNbaV09bSgpLHQpLHIud2lkdGg+Pj1pLHIuaGVpZ2h0Pj49aSxwKHIsbltpXSksdC5taXBtYXNrfD0xPDxpO2Vsc2UgYyhyPXQuaW1hZ2VzWzBdPW0oKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7Yyh0LHQuaW1hZ2VzWzBdKX1mdW5jdGlvbiBFKGUscil7Zm9yKHZhciBpPWUuaW1hZ2VzLGE9MDthPGkubGVuZ3RoJiZpW2FdOysrYSl7dmFyIG89aVthXSxzPXIsbD1hLGM9by5lbGVtZW50LHU9by5kYXRhLGg9by5pbnRlcm5hbGZvcm1hdCxwPW8uZm9ybWF0LGQ9by50eXBlLGc9by53aWR0aCx2PW8uaGVpZ2h0LG09by5jaGFubmVscztmKG8pLGM/dC50ZXhJbWFnZTJEKHMsbCxwLHAsZCxjKTpvLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4SW1hZ2UyRChzLGwsaCxnLHYsMCx1KTpvLm5lZWRzQ29weT8obigpLHQuY29weVRleEltYWdlMkQocyxsLHAsby54T2Zmc2V0LG8ueU9mZnNldCxnLHYsMCkpOigobz0hdSkmJih1PUcuemVyby5hbGxvY1R5cGUoZCxnKnYqbSkpLHQudGV4SW1hZ2UyRChzLGwscCxnLHYsMCxwLGQsdSksbyYmdSYmRy56ZXJvLmZyZWVUeXBlKHUpKX19ZnVuY3Rpb24gQygpe3ZhciB0PWd0LnBvcCgpfHxuZXcgQTtzLmNhbGwodCk7Zm9yKHZhciBlPXQubWlwbWFzaz0wOzE2PmU7KytlKXQuaW1hZ2VzW2VdPW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gTCh0KXtmb3IodmFyIGU9dC5pbWFnZXMscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0mJlQoZVtyXSksZVtyXT1udWxsO2d0LnB1c2godCl9ZnVuY3Rpb24geigpe3RoaXMubWFnRmlsdGVyPXRoaXMubWluRmlsdGVyPTk3MjgsdGhpcy53cmFwVD10aGlzLndyYXBTPTMzMDcxLHRoaXMuYW5pc290cm9waWM9MSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTJ9ZnVuY3Rpb24gTyh0LGUpeyJtaW4iaW4gZSYmKHQubWluRmlsdGVyPVVbZS5taW5dLDA8PWF0LmluZGV4T2YodC5taW5GaWx0ZXIpJiYhKCJmYWNlcyJpbiBlKSYmKHQuZ2VuTWlwbWFwcz0hMCkpLCJtYWciaW4gZSYmKHQubWFnRmlsdGVyPVZbZS5tYWddKTt2YXIgcj10LndyYXBTLG49dC53cmFwVDtpZigid3JhcCJpbiBlKXt2YXIgaT1lLndyYXA7InN0cmluZyI9PXR5cGVvZiBpP3I9bj1OW2ldOkFycmF5LmlzQXJyYXkoaSkmJihyPU5baVswXV0sbj1OW2lbMV1dKX1lbHNlIndyYXBTImluIGUmJihyPU5bZS53cmFwU10pLCJ3cmFwVCJpbiBlJiYobj1OW2Uud3JhcFRdKTtpZih0LndyYXBTPXIsdC53cmFwVD1uLCJhbmlzb3Ryb3BpYyJpbiBlJiYodC5hbmlzb3Ryb3BpYz1lLmFuaXNvdHJvcGljKSwibWlwbWFwImluIGUpe3N3aXRjaChyPSExLHR5cGVvZiBlLm1pcG1hcCl7Y2FzZSJzdHJpbmciOnQubWlwbWFwSGludD1CW2UubWlwbWFwXSxyPXQuZ2VuTWlwbWFwcz0hMDticmVhaztjYXNlImJvb2xlYW4iOnI9dC5nZW5NaXBtYXBzPWUubWlwbWFwO2JyZWFrO2Nhc2Uib2JqZWN0Ijp0Lmdlbk1pcG1hcHM9ITEscj0hMH0hcnx8Im1pbiJpbiBlfHwodC5taW5GaWx0ZXI9OTk4NCl9fWZ1bmN0aW9uIEkocixuKXt0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxyLm1pbkZpbHRlciksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDAsci5tYWdGaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQyLHIud3JhcFMpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQzLHIud3JhcFQpLGUuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiZ0LnRleFBhcmFtZXRlcmkobiwzNDA0NixyLmFuaXNvdHJvcGljKSxyLmdlbk1pcG1hcHMmJih0LmhpbnQoMzMxNzAsci5taXBtYXBIaW50KSx0LmdlbmVyYXRlTWlwbWFwKG4pKX1mdW5jdGlvbiBEKGUpe3MuY2FsbCh0aGlzKSx0aGlzLm1pcG1hc2s9MCx0aGlzLmludGVybmFsZm9ybWF0PTY0MDgsdGhpcy5pZD12dCsrLHRoaXMucmVmQ291bnQ9MSx0aGlzLnRhcmdldD1lLHRoaXMudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0aGlzLnVuaXQ9LTEsdGhpcy5iaW5kQ291bnQ9MCx0aGlzLnRleEluZm89bmV3IHosby5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gUChlKXt0LmFjdGl2ZVRleHR1cmUoMzM5ODQpLHQuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKX1mdW5jdGlvbiBSKCl7dmFyIGU9eHRbMF07ZT90LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSk6dC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpfWZ1bmN0aW9uIEYoZSl7dmFyIHI9ZS50ZXh0dXJlLG49ZS51bml0LGk9ZS50YXJnZXQ7MDw9biYmKHQuYWN0aXZlVGV4dHVyZSgzMzk4NCtuKSx0LmJpbmRUZXh0dXJlKGksbnVsbCkseHRbbl09bnVsbCksdC5kZWxldGVUZXh0dXJlKHIpLGUudGV4dHVyZT1udWxsLGUucGFyYW1zPW51bGwsZS5waXhlbHM9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIG10W2UuaWRdLGEudGV4dHVyZUNvdW50LS19dmFyIEI9eyJkb24ndCBjYXJlIjo0MzUyLCJkb250IGNhcmUiOjQzNTIsbmljZTo0MzU0LGZhc3Q6NDM1M30sTj17cmVwZWF0OjEwNDk3LGNsYW1wOjMzMDcxLG1pcnJvcjozMzY0OH0sVj17bmVhcmVzdDo5NzI4LGxpbmVhcjo5NzI5fSxVPWooe21pcG1hcDo5OTg3LCJuZWFyZXN0IG1pcG1hcCBuZWFyZXN0Ijo5OTg0LCJsaW5lYXIgbWlwbWFwIG5lYXJlc3QiOjk5ODUsIm5lYXJlc3QgbWlwbWFwIGxpbmVhciI6OTk4NiwibGluZWFyIG1pcG1hcCBsaW5lYXIiOjk5ODd9LFYpLHE9e25vbmU6MCxicm93c2VyOjM3NDQ0fSxIPXt1aW50ODo1MTIxLHJnYmE0OjMyODE5LHJnYjU2NTozMzYzNSwicmdiNSBhMSI6MzI4MjB9LFk9e2FscGhhOjY0MDYsbHVtaW5hbmNlOjY0MDksImx1bWluYW5jZSBhbHBoYSI6NjQxMCxyZ2I6NjQwNyxyZ2JhOjY0MDgscmdiYTQ6MzI4NTQsInJnYjUgYTEiOjMyODU1LHJnYjU2NTozNjE5NH0sSj17fTtlLmV4dF9zcmdiJiYoWS5zcmdiPTM1OTA0LFkuc3JnYmE9MzU5MDYpLGUub2VzX3RleHR1cmVfZmxvYXQmJihILmZsb2F0MzI9SC5mbG9hdD01MTI2KSxlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJihILmZsb2F0MTY9SFsiaGFsZiBmbG9hdCJdPTM2MTkzKSxlLndlYmdsX2RlcHRoX3RleHR1cmUmJihqKFkse2RlcHRoOjY0MDIsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfSksaihILHt1aW50MTY6NTEyMyx1aW50MzI6NTEyNSwiZGVwdGggc3RlbmNpbCI6MzQwNDJ9KSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyYmaihKLHsicmdiIHMzdGMgZHh0MSI6MzM3NzYsInJnYmEgczN0YyBkeHQxIjozMzc3NywicmdiYSBzM3RjIGR4dDMiOjMzNzc4LCJyZ2JhIHMzdGMgZHh0NSI6MzM3Nzl9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMmJmooSix7InJnYiBhdGMiOjM1OTg2LCJyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYSI6MzU5ODcsInJnYmEgYXRjIGludGVycG9sYXRlZCBhbHBoYSI6MzQ3OTh9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyYmaihKLHsicmdiIHB2cnRjIDRicHB2MSI6MzU4NDAsInJnYiBwdnJ0YyAyYnBwdjEiOjM1ODQxLCJyZ2JhIHB2cnRjIDRicHB2MSI6MzU4NDIsInJnYmEgcHZydGMgMmJwcHYxIjozNTg0M30pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEmJihKWyJyZ2IgZXRjMSJdPTM2MTk2KTt2YXIgSz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmdldFBhcmFtZXRlcigzNDQ2NykpO09iamVjdC5rZXlzKEopLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Slt0XTswPD1LLmluZGV4T2YoZSkmJihZW3RdPWUpfSk7dmFyIFE9T2JqZWN0LmtleXMoWSk7ci50ZXh0dXJlRm9ybWF0cz1RO3ZhciB0dD1bXTtPYmplY3Qua2V5cyhZKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3R0W1lbdF1dPXR9KTt2YXIgZXQ9W107T2JqZWN0LmtleXMoSCkuZm9yRWFjaChmdW5jdGlvbih0KXtldFtIW3RdXT10fSk7dmFyIHJ0PVtdO09iamVjdC5rZXlzKFYpLmZvckVhY2goZnVuY3Rpb24odCl7cnRbVlt0XV09dH0pO3ZhciBudD1bXTtPYmplY3Qua2V5cyhVKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe250W1VbdF1dPXR9KTt2YXIgaXQ9W107T2JqZWN0LmtleXMoTikuZm9yRWFjaChmdW5jdGlvbih0KXtpdFtOW3RdXT10fSk7dmFyIHB0PVEucmVkdWNlKGZ1bmN0aW9uKHQsZSl7dmFyIHI9WVtlXTtyZXR1cm4gNjQwOT09PXJ8fDY0MDY9PT1yfHw2NDA5PT09cnx8NjQxMD09PXJ8fDY0MDI9PT1yfHwzNDA0MT09PXI/dFtyXT1yOjMyODU1PT09cnx8MDw9ZS5pbmRleE9mKCJyZ2JhIik/dFtyXT02NDA4OnRbcl09NjQwNyx0fSx7fSksZHQ9W10sZ3Q9W10sdnQ9MCxtdD17fSx5dD1yLm1heFRleHR1cmVVbml0cyx4dD1BcnJheSh5dCkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KTtyZXR1cm4gaihELnByb3RvdHlwZSx7YmluZDpmdW5jdGlvbigpe3RoaXMuYmluZENvdW50Kz0xO3ZhciBlPXRoaXMudW5pdDtpZigwPmUpe2Zvcih2YXIgcj0wO3I8eXQ7KytyKXt2YXIgbj14dFtyXTtpZihuKXtpZigwPG4uYmluZENvdW50KWNvbnRpbnVlO24udW5pdD0tMX14dFtyXT10aGlzLGU9cjticmVha31vLnByb2ZpbGUmJmEubWF4VGV4dHVyZVVuaXRzPGUrMSYmKGEubWF4VGV4dHVyZVVuaXRzPWUrMSksdGhpcy51bml0PWUsdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUodGhpcy50YXJnZXQsdGhpcy50ZXh0dXJlKX1yZXR1cm4gZX0sdW5iaW5kOmZ1bmN0aW9uKCl7LS10aGlzLmJpbmRDb3VudH0sZGVjUmVmOmZ1bmN0aW9uKCl7MD49LS10aGlzLnJlZkNvdW50JiZGKHRoaXMpfX0pLG8ucHJvZmlsZSYmKGEuZ2V0VG90YWxUZXh0dXJlU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKG10KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPW10W2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTJEOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWkudGV4SW5mbzt6LmNhbGwocik7dmFyIGE9QygpO3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9NKGEsMHx0LCJudW1iZXIiPT10eXBlb2YgZT8wfGU6MHx0KTp0PyhPKHIsdCksUyhhLHQpKTpNKGEsMSwxKSxyLmdlbk1pcG1hcHMmJihhLm1pcG1hc2s9KGEud2lkdGg8PDEpLTEpLGkubWlwbWFzaz1hLm1pcG1hc2ssYyhpLGEpLGkuaW50ZXJuYWxmb3JtYXQ9YS5pbnRlcm5hbGZvcm1hdCxuLndpZHRoPWEud2lkdGgsbi5oZWlnaHQ9YS5oZWlnaHQsUChpKSxFKGEsMzU1MyksSShyLDM1NTMpLFIoKSxMKGEpLG8ucHJvZmlsZSYmKGkuc3RhdHMuc2l6ZT1rKGkuaW50ZXJuYWxmb3JtYXQsaS50eXBlLGEud2lkdGgsYS5oZWlnaHQsci5nZW5NaXBtYXBzLCExKSksbi5mb3JtYXQ9dHRbaS5pbnRlcm5hbGZvcm1hdF0sbi50eXBlPWV0W2kudHlwZV0sbi5tYWc9cnRbci5tYWdGaWx0ZXJdLG4ubWluPW50W3IubWluRmlsdGVyXSxuLndyYXBTPWl0W3Iud3JhcFNdLG4ud3JhcFQ9aXRbci53cmFwVF0sbn12YXIgaT1uZXcgRCgzNTUzKTtyZXR1cm4gbXRbaS5pZF09aSxhLnRleHR1cmVDb3VudCsrLG4oZSxyKSxuLnN1YmltYWdlPWZ1bmN0aW9uKHQsZSxyLGEpe2V8PTAscnw9MCxhfD0wO3ZhciBvPW0oKTtyZXR1cm4gYyhvLGkpLG8ud2lkdGg9MCxvLmhlaWdodD0wLHAobyx0KSxvLndpZHRoPW8ud2lkdGh8fChpLndpZHRoPj5hKS1lLG8uaGVpZ2h0PW8uaGVpZ2h0fHwoaS5oZWlnaHQ+PmEpLXIsUChpKSxkKG8sMzU1MyxlLHIsYSksUigpLFQobyksbn0sbi5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgYT0wfGUscz0wfHJ8fGE7aWYoYT09PWkud2lkdGgmJnM9PT1pLmhlaWdodClyZXR1cm4gbjtuLndpZHRoPWkud2lkdGg9YSxuLmhlaWdodD1pLmhlaWdodD1zLFAoaSk7Zm9yKHZhciBsLGM9aS5jaGFubmVscyx1PWkudHlwZSxmPTA7aS5taXBtYXNrPj5mOysrZil7dmFyIGg9YT4+ZixwPXM+PmY7aWYoIWh8fCFwKWJyZWFrO2w9Ry56ZXJvLmFsbG9jVHlwZSh1LGgqcCpjKSx0LnRleEltYWdlMkQoMzU1MyxmLGkuZm9ybWF0LGgscCwwLGkuZm9ybWF0LGkudHlwZSxsKSxsJiZHLnplcm8uZnJlZVR5cGUobCl9cmV0dXJuIFIoKSxvLnByb2ZpbGUmJihpLnN0YXRzLnNpemU9ayhpLmludGVybmFsZm9ybWF0LGkudHlwZSxhLHMsITEsITEpKSxufSxuLl9yZWdsVHlwZT0idGV4dHVyZTJkIixuLl90ZXh0dXJlPWksby5wcm9maWxlJiYobi5zdGF0cz1pLnN0YXRzKSxuLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLmRlY1JlZigpfSxufSxjcmVhdGVDdWJlOmZ1bmN0aW9uKGUscixuLGkscyxsKXtmdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgcyxsPWgudGV4SW5mbztmb3Ioei5jYWxsKGwpLHM9MDs2PnM7KytzKWdbc109QygpO2lmKCJudW1iZXIiIT10eXBlb2YgdCYmdCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KWlmKGUpUyhnWzBdLHQpLFMoZ1sxXSxlKSxTKGdbMl0sciksUyhnWzNdLG4pLFMoZ1s0XSxpKSxTKGdbNV0sYSk7ZWxzZSBpZihPKGwsdCksdShoLHQpLCJmYWNlcyJpbiB0KWZvcih0PXQuZmFjZXMscz0wOzY+czsrK3MpYyhnW3NdLGgpLFMoZ1tzXSx0W3NdKTtlbHNlIGZvcihzPTA7Nj5zOysrcylTKGdbc10sdCl9ZWxzZSBmb3IodD0wfHR8fDEscz0wOzY+czsrK3MpTShnW3NdLHQsdCk7Zm9yKGMoaCxnWzBdKSxoLm1pcG1hc2s9bC5nZW5NaXBtYXBzPyhnWzBdLndpZHRoPDwxKS0xOmdbMF0ubWlwbWFzayxoLmludGVybmFsZm9ybWF0PWdbMF0uaW50ZXJuYWxmb3JtYXQsZi53aWR0aD1nWzBdLndpZHRoLGYuaGVpZ2h0PWdbMF0uaGVpZ2h0LFAoaCkscz0wOzY+czsrK3MpRShnW3NdLDM0MDY5K3MpO2ZvcihJKGwsMzQwNjcpLFIoKSxvLnByb2ZpbGUmJihoLnN0YXRzLnNpemU9ayhoLmludGVybmFsZm9ybWF0LGgudHlwZSxmLndpZHRoLGYuaGVpZ2h0LGwuZ2VuTWlwbWFwcywhMCkpLGYuZm9ybWF0PXR0W2guaW50ZXJuYWxmb3JtYXRdLGYudHlwZT1ldFtoLnR5cGVdLGYubWFnPXJ0W2wubWFnRmlsdGVyXSxmLm1pbj1udFtsLm1pbkZpbHRlcl0sZi53cmFwUz1pdFtsLndyYXBTXSxmLndyYXBUPWl0W2wud3JhcFRdLHM9MDs2PnM7KytzKUwoZ1tzXSk7cmV0dXJuIGZ9dmFyIGg9bmV3IEQoMzQwNjcpO210W2guaWRdPWgsYS5jdWJlQ291bnQrKzt2YXIgZz1BcnJheSg2KTtyZXR1cm4gZihlLHIsbixpLHMsbCksZi5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixuLGkpe3J8PTAsbnw9MCxpfD0wO3ZhciBhPW0oKTtyZXR1cm4gYyhhLGgpLGEud2lkdGg9MCxhLmhlaWdodD0wLHAoYSxlKSxhLndpZHRoPWEud2lkdGh8fChoLndpZHRoPj5pKS1yLGEuaGVpZ2h0PWEuaGVpZ2h0fHwoaC5oZWlnaHQ+PmkpLW4sUChoKSxkKGEsMzQwNjkrdCxyLG4saSksUigpLFQoYSksZn0sZi5yZXNpemU9ZnVuY3Rpb24oZSl7aWYoKGV8PTApIT09aC53aWR0aCl7Zi53aWR0aD1oLndpZHRoPWUsZi5oZWlnaHQ9aC5oZWlnaHQ9ZSxQKGgpO2Zvcih2YXIgcj0wOzY+cjsrK3IpZm9yKHZhciBuPTA7aC5taXBtYXNrPj5uOysrbil0LnRleEltYWdlMkQoMzQwNjkrcixuLGguZm9ybWF0LGU+Pm4sZT4+biwwLGguZm9ybWF0LGgudHlwZSxudWxsKTtyZXR1cm4gUigpLG8ucHJvZmlsZSYmKGguc3RhdHMuc2l6ZT1rKGguaW50ZXJuYWxmb3JtYXQsaC50eXBlLGYud2lkdGgsZi5oZWlnaHQsITEsITApKSxmfX0sZi5fcmVnbFR5cGU9InRleHR1cmVDdWJlIixmLl90ZXh0dXJlPWgsby5wcm9maWxlJiYoZi5zdGF0cz1oLnN0YXRzKSxmLmRlc3Ryb3k9ZnVuY3Rpb24oKXtoLmRlY1JlZigpfSxmfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eXQ7KytlKXQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCkseHRbZV09bnVsbDtYKG10KS5mb3JFYWNoKEYpLGEuY3ViZUNvdW50PTAsYS50ZXh0dXJlQ291bnQ9MH0sZ2V0VGV4dHVyZTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eXQ7KytlKXt2YXIgcj14dFtlXTtyJiYoci5iaW5kQ291bnQ9MCxyLnVuaXQ9LTEseHRbZV09bnVsbCl9WChtdCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpO2Zvcih2YXIgcj0wOzMyPnI7KytyKWlmKDAhPShlLm1pcG1hc2smMTw8cikpaWYoMzU1Mz09PWUudGFyZ2V0KXQudGV4SW1hZ2UyRCgzNTUzLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7ZWxzZSBmb3IodmFyIG49MDs2Pm47KytuKXQudGV4SW1hZ2UyRCgzNDA2OStuLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7SShlLnRleEluZm8sZS50YXJnZXQpfSl9fX1mdW5jdGlvbiBBKHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMudGV4dHVyZT1lLHRoaXMucmVuZGVyYnVmZmVyPXI7dmFyIG49dD0wO2U/KHQ9ZS53aWR0aCxuPWUuaGVpZ2h0KTpyJiYodD1yLndpZHRoLG49ci5oZWlnaHQpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1ufWZ1bmN0aW9uIHModCl7dCYmKHQudGV4dHVyZSYmdC50ZXh0dXJlLl90ZXh0dXJlLmRlY1JlZigpLHQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpKX1mdW5jdGlvbiBsKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5fdGV4dHVyZS5yZWZDb3VudCs9MTp0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLnJlZkNvdW50Kz0xKX1mdW5jdGlvbiBjKGUscil7ciYmKHIudGV4dHVyZT90LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLGUsci50YXJnZXQsci50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsMCk6dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCxlLDM2MTYxLHIucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVuZGVyYnVmZmVyKSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT0zNTUzLHI9bnVsbCxuPW51bGwsaT10O3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmKGk9dC5kYXRhLCJ0YXJnZXQiaW4gdCYmKGU9MHx0LnRhcmdldCkpLCJ0ZXh0dXJlMmQiPT09KHQ9aS5fcmVnbFR5cGUpP3I9aToidGV4dHVyZUN1YmUiPT09dD9yPWk6InJlbmRlcmJ1ZmZlciI9PT10JiYobj1pLGU9MzYxNjEpLG5ldyBvKGUscixuKX1mdW5jdGlvbiBmKHQsZSxyLGEscyl7cmV0dXJuIHI/KCh0PW4uY3JlYXRlMkQoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmEsdHlwZTpzfSkpLl90ZXh0dXJlLnJlZkNvdW50PTAsbmV3IG8oMzU1Myx0LG51bGwpKTooKHQ9aS5jcmVhdGUoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmF9KSkuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudD0wLG5ldyBvKDM2MTYxLG51bGwsdCkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQmJih0LnRleHR1cmV8fHQucmVuZGVyYnVmZmVyKX1mdW5jdGlvbiBwKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5yZXNpemUoZSxyKTp0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIucmVzaXplKGUsciksdC53aWR0aD1lLHQuaGVpZ2h0PXIpfWZ1bmN0aW9uIGQoKXt0aGlzLmlkPWsrKyxUW3RoaXMuaWRdPXRoaXMsdGhpcy5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLHRoaXMuY29sb3JBdHRhY2htZW50cz1bXSx0aGlzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5zdGVuY2lsQXR0YWNobWVudD10aGlzLmRlcHRoQXR0YWNobWVudD1udWxsfWZ1bmN0aW9uIGcodCl7dC5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2gocykscyh0LmRlcHRoQXR0YWNobWVudCkscyh0LnN0ZW5jaWxBdHRhY2htZW50KSxzKHQuZGVwdGhTdGVuY2lsQXR0YWNobWVudCl9ZnVuY3Rpb24gdihlKXt0LmRlbGV0ZUZyYW1lYnVmZmVyKGUuZnJhbWVidWZmZXIpLGUuZnJhbWVidWZmZXI9bnVsbCxhLmZyYW1lYnVmZmVyQ291bnQtLSxkZWxldGUgVFtlLmlkXX1mdW5jdGlvbiBtKGUpe3ZhciBuO3QuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUuZnJhbWVidWZmZXIpO3ZhciBpPWUuY29sb3JBdHRhY2htZW50cztmb3Iobj0wO248aS5sZW5ndGg7KytuKWMoMzYwNjQrbixpW25dKTtmb3Iobj1pLmxlbmd0aDtuPHIubWF4Q29sb3JBdHRhY2htZW50czsrK24pdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCtuLDM1NTMsbnVsbCwwKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MTI4LDM1NTMsbnVsbCwwKSxjKDM2MDk2LGUuZGVwdGhBdHRhY2htZW50KSxjKDM2MTI4LGUuc3RlbmNpbEF0dGFjaG1lbnQpLGMoMzMzMDYsZS5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApLHQuaXNDb250ZXh0TG9zdCgpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHgubmV4dD94Lm5leHQuZnJhbWVidWZmZXI6bnVsbCkseC5jdXI9eC5uZXh0LHQuZ2V0RXJyb3IoKX1mdW5jdGlvbiB5KHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciBpLGE9MCxvPTAscz0hMCxjPSEwO2k9bnVsbDt2YXIgcD0hMCxkPSJyZ2JhIix2PSJ1aW50OCIseT0xLHg9bnVsbCx3PW51bGwsaz1udWxsLFQ9ITE7Im51bWJlciI9PXR5cGVvZiB0PyhhPTB8dCxvPTB8ZXx8YSk6dD8oInNoYXBlImluIHQ/KGE9KG89dC5zaGFwZSlbMF0sbz1vWzFdKTooInJhZGl1cyJpbiB0JiYoYT1vPXQucmFkaXVzKSwid2lkdGgiaW4gdCYmKGE9dC53aWR0aCksImhlaWdodCJpbiB0JiYobz10LmhlaWdodCkpLCgiY29sb3IiaW4gdHx8ImNvbG9ycyJpbiB0KSYmKGk9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShpKSksaXx8KCJjb2xvckNvdW50ImluIHQmJih5PTB8dC5jb2xvckNvdW50KSwiY29sb3JUZXh0dXJlImluIHQmJihwPSEhdC5jb2xvclRleHR1cmUsZD0icmdiYTQiKSwiY29sb3JUeXBlImluIHQmJih2PXQuY29sb3JUeXBlLCFwKSYmKCJoYWxmIGZsb2F0Ij09PXZ8fCJmbG9hdDE2Ij09PXY/ZD0icmdiYTE2ZiI6ImZsb2F0IiE9PXYmJiJmbG9hdDMyIiE9PXZ8fChkPSJyZ2JhMzJmIikpLCJjb2xvckZvcm1hdCJpbiB0JiYoZD10LmNvbG9yRm9ybWF0LDA8PWIuaW5kZXhPZihkKT9wPSEwOjA8PV8uaW5kZXhPZihkKSYmKHA9ITEpKSksKCJkZXB0aFRleHR1cmUiaW4gdHx8ImRlcHRoU3RlbmNpbFRleHR1cmUiaW4gdCkmJihUPSEoIXQuZGVwdGhUZXh0dXJlJiYhdC5kZXB0aFN0ZW5jaWxUZXh0dXJlKSksImRlcHRoImluIHQmJigiYm9vbGVhbiI9PXR5cGVvZiB0LmRlcHRoP3M9dC5kZXB0aDooeD10LmRlcHRoLGM9ITEpKSwic3RlbmNpbCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5zdGVuY2lsP2M9dC5zdGVuY2lsOih3PXQuc3RlbmNpbCxzPSExKSksImRlcHRoU3RlbmNpbCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5kZXB0aFN0ZW5jaWw/cz1jPXQuZGVwdGhTdGVuY2lsOihrPXQuZGVwdGhTdGVuY2lsLGM9cz0hMSkpKTphPW89MTt2YXIgQT1udWxsLE09bnVsbCxTPW51bGwsRT1udWxsO2lmKEFycmF5LmlzQXJyYXkoaSkpQT1pLm1hcCh1KTtlbHNlIGlmKGkpQT1bdShpKV07ZWxzZSBmb3IoQT1BcnJheSh5KSxpPTA7aTx5OysraSlBW2ldPWYoYSxvLHAsZCx2KTtmb3IoYT1hfHxBWzBdLndpZHRoLG89b3x8QVswXS5oZWlnaHQseD9NPXUoeCk6cyYmIWMmJihNPWYoYSxvLFQsImRlcHRoIiwidWludDMyIikpLHc/Uz11KHcpOmMmJiFzJiYoUz1mKGEsbywhMSwic3RlbmNpbCIsInVpbnQ4IikpLGs/RT11KGspOiF4JiYhdyYmYyYmcyYmKEU9ZihhLG8sVCwiZGVwdGggc3RlbmNpbCIsImRlcHRoIHN0ZW5jaWwiKSkscz1udWxsLGk9MDtpPEEubGVuZ3RoOysraSlsKEFbaV0pLEFbaV0mJkFbaV0udGV4dHVyZSYmKGM9eXRbQVtpXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0qeHRbQVtpXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVdLG51bGw9PT1zJiYocz1jKSk7cmV0dXJuIGwoTSksbChTKSxsKEUpLGcobiksbi53aWR0aD1hLG4uaGVpZ2h0PW8sbi5jb2xvckF0dGFjaG1lbnRzPUEsbi5kZXB0aEF0dGFjaG1lbnQ9TSxuLnN0ZW5jaWxBdHRhY2htZW50PVMsbi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PUUsci5jb2xvcj1BLm1hcChoKSxyLmRlcHRoPWgoTSksci5zdGVuY2lsPWgoUyksci5kZXB0aFN0ZW5jaWw9aChFKSxyLndpZHRoPW4ud2lkdGgsci5oZWlnaHQ9bi5oZWlnaHQsbShuKSxyfXZhciBuPW5ldyBkO3JldHVybiBhLmZyYW1lYnVmZmVyQ291bnQrKyxyKHQsZSksaihyLHtyZXNpemU6ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLm1heCgwfHQsMSksYT1NYXRoLm1heCgwfGV8fGksMSk7aWYoaT09PW4ud2lkdGgmJmE9PT1uLmhlaWdodClyZXR1cm4gcjtmb3IodmFyIG89bi5jb2xvckF0dGFjaG1lbnRzLHM9MDtzPG8ubGVuZ3RoOysrcylwKG9bc10saSxhKTtyZXR1cm4gcChuLmRlcHRoQXR0YWNobWVudCxpLGEpLHAobi5zdGVuY2lsQXR0YWNobWVudCxpLGEpLHAobi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LGksYSksbi53aWR0aD1yLndpZHRoPWksbi5oZWlnaHQ9ci5oZWlnaHQ9YSxtKG4pLHJ9LF9yZWdsVHlwZToiZnJhbWVidWZmZXIiLF9mcmFtZWJ1ZmZlcjpuLGRlc3Ryb3k6ZnVuY3Rpb24oKXt2KG4pLGcobil9LHVzZTpmdW5jdGlvbih0KXt4LnNldEZCTyh7ZnJhbWVidWZmZXI6cn0sdCl9fSl9dmFyIHg9e2N1cjpudWxsLG5leHQ6bnVsbCxkaXJ0eTohMSxzZXRGQk86bnVsbH0sYj1bInJnYmEiXSxfPVsicmdiYTQiLCJyZ2I1NjUiLCJyZ2I1IGExIl07ZS5leHRfc3JnYiYmXy5wdXNoKCJzcmdiYSIpLGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JiZfLnB1c2goInJnYmExNmYiLCJyZ2IxNmYiKSxlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCYmXy5wdXNoKCJyZ2JhMzJmIik7dmFyIHc9WyJ1aW50OCJdO2Uub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmdy5wdXNoKCJoYWxmIGZsb2F0IiwiZmxvYXQxNiIpLGUub2VzX3RleHR1cmVfZmxvYXQmJncucHVzaCgiZmxvYXQiLCJmbG9hdDMyIik7dmFyIGs9MCxUPXt9O3JldHVybiBqKHgse2dldEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYiZnJhbWVidWZmZXIiPT09dC5fcmVnbFR5cGUmJih0PXQuX2ZyYW1lYnVmZmVyKWluc3RhbmNlb2YgZD90Om51bGx9LGNyZWF0ZTp5LGNyZWF0ZUN1YmU6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgaSxhPXtjb2xvcjpudWxsfSxvPTAscz1udWxsO2k9InJnYmEiO3ZhciBsPSJ1aW50OCIsYz0xO2lmKCJudW1iZXIiPT10eXBlb2YgdD9vPTB8dDp0Pygic2hhcGUiaW4gdD9vPXQuc2hhcGVbMF06KCJyYWRpdXMiaW4gdCYmKG89MHx0LnJhZGl1cyksIndpZHRoImluIHQ/bz0wfHQud2lkdGg6ImhlaWdodCJpbiB0JiYobz0wfHQuaGVpZ2h0KSksKCJjb2xvciJpbiB0fHwiY29sb3JzImluIHQpJiYocz10LmNvbG9yfHx0LmNvbG9ycyxBcnJheS5pc0FycmF5KHMpKSxzfHwoImNvbG9yQ291bnQiaW4gdCYmKGM9MHx0LmNvbG9yQ291bnQpLCJjb2xvclR5cGUiaW4gdCYmKGw9dC5jb2xvclR5cGUpLCJjb2xvckZvcm1hdCJpbiB0JiYoaT10LmNvbG9yRm9ybWF0KSksImRlcHRoImluIHQmJihhLmRlcHRoPXQuZGVwdGgpLCJzdGVuY2lsImluIHQmJihhLnN0ZW5jaWw9dC5zdGVuY2lsKSwiZGVwdGhTdGVuY2lsImluIHQmJihhLmRlcHRoU3RlbmNpbD10LmRlcHRoU3RlbmNpbCkpOm89MSxzKWlmKEFycmF5LmlzQXJyYXkocykpZm9yKHQ9W10saT0wO2k8cy5sZW5ndGg7KytpKXRbaV09c1tpXTtlbHNlIHQ9W3NdO2Vsc2UgZm9yKHQ9QXJyYXkoYykscz17cmFkaXVzOm8sZm9ybWF0OmksdHlwZTpsfSxpPTA7aTxjOysraSl0W2ldPW4uY3JlYXRlQ3ViZShzKTtmb3IoYS5jb2xvcj1BcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7KytpKWM9dFtpXSxvPW98fGMud2lkdGgsYS5jb2xvcltpXT17dGFyZ2V0OjM0MDY5LGRhdGE6dFtpXX07Zm9yKGk9MDs2Pmk7KytpKXtmb3IoYz0wO2M8dC5sZW5ndGg7KytjKWEuY29sb3JbY10udGFyZ2V0PTM0MDY5K2k7MDxpJiYoYS5kZXB0aD1yWzBdLmRlcHRoLGEuc3RlbmNpbD1yWzBdLnN0ZW5jaWwsYS5kZXB0aFN0ZW5jaWw9clswXS5kZXB0aFN0ZW5jaWwpLHJbaV0/cltpXShhKTpyW2ldPXkoYSl9cmV0dXJuIGooZSx7d2lkdGg6byxoZWlnaHQ6byxjb2xvcjp0fSl9dmFyIHI9QXJyYXkoNik7cmV0dXJuIGUodCksaihlLHtmYWNlczpyLHJlc2l6ZTpmdW5jdGlvbih0KXt2YXIgbj0wfHQ7aWYobj09PWUud2lkdGgpcmV0dXJuIGU7dmFyIGk9ZS5jb2xvcjtmb3IodD0wO3Q8aS5sZW5ndGg7Kyt0KWlbdF0ucmVzaXplKG4pO2Zvcih0PTA7Nj50OysrdClyW3RdLnJlc2l6ZShuKTtyZXR1cm4gZS53aWR0aD1lLmhlaWdodD1uLGV9LF9yZWdsVHlwZToiZnJhbWVidWZmZXJDdWJlIixkZXN0cm95OmZ1bmN0aW9uKCl7ci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9fSl9LGNsZWFyOmZ1bmN0aW9uKCl7WChUKS5mb3JFYWNoKHYpfSxyZXN0b3JlOmZ1bmN0aW9uKCl7eC5jdXI9bnVsbCx4Lm5leHQ9bnVsbCx4LmRpcnR5PSEwLFgoVCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmZyYW1lYnVmZmVyPXQuY3JlYXRlRnJhbWVidWZmZXIoKSxtKGUpfSl9fSl9ZnVuY3Rpb24gTSgpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD10aGlzLnN0YXRlPTAsdGhpcy5idWZmZXI9bnVsbCx0aGlzLnNpemU9MCx0aGlzLm5vcm1hbGl6ZWQ9ITEsdGhpcy50eXBlPTUxMjYsdGhpcy5kaXZpc29yPXRoaXMuc3RyaWRlPXRoaXMub2Zmc2V0PTB9ZnVuY3Rpb24gUyh0LGUscixuKXtmdW5jdGlvbiBpKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMuaWQ9ZSx0aGlzLmxvY2F0aW9uPXIsdGhpcy5pbmZvPW59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKHRbcl0uaWQ9PT1lLmlkKXJldHVybiB2b2lkKHRbcl0ubG9jYXRpb249ZS5sb2NhdGlvbik7dC5wdXNoKGUpfWZ1bmN0aW9uIG8ocixuLGkpe2lmKCEobz0oaT0zNTYzMj09PXI/Yzp1KVtuXSkpe3ZhciBhPWUuc3RyKG4pLG89dC5jcmVhdGVTaGFkZXIocik7dC5zaGFkZXJTb3VyY2UobyxhKSx0LmNvbXBpbGVTaGFkZXIobyksaVtuXT1vfXJldHVybiBvfWZ1bmN0aW9uIHModCxlKXt0aGlzLmlkPXArKyx0aGlzLmZyYWdJZD10LHRoaXMudmVydElkPWUsdGhpcy5wcm9ncmFtPW51bGwsdGhpcy51bmlmb3Jtcz1bXSx0aGlzLmF0dHJpYnV0ZXM9W10sbi5wcm9maWxlJiYodGhpcy5zdGF0cz17dW5pZm9ybXNDb3VudDowLGF0dHJpYnV0ZXNDb3VudDowfSl9ZnVuY3Rpb24gbChyLHMpe3ZhciBsLGM7bD1vKDM1NjMyLHIuZnJhZ0lkKSxjPW8oMzU2MzMsci52ZXJ0SWQpO3ZhciB1PXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcih1LGwpLHQuYXR0YWNoU2hhZGVyKHUsYyksdC5saW5rUHJvZ3JhbSh1KTt2YXIgZj10LmdldFByb2dyYW1QYXJhbWV0ZXIodSwzNTcxOCk7bi5wcm9maWxlJiYoci5zdGF0cy51bmlmb3Jtc0NvdW50PWYpO3ZhciBoPXIudW5pZm9ybXM7Zm9yKGw9MDtsPGY7KytsKWlmKGM9dC5nZXRBY3RpdmVVbmlmb3JtKHUsbCkpaWYoMTxjLnNpemUpZm9yKHZhciBwPTA7cDxjLnNpemU7KytwKXt2YXIgZD1jLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIrcCsiXSIpO2EoaCxuZXcgaShkLGUuaWQoZCksdC5nZXRVbmlmb3JtTG9jYXRpb24odSxkKSxjKSl9ZWxzZSBhKGgsbmV3IGkoYy5uYW1lLGUuaWQoYy5uYW1lKSx0LmdldFVuaWZvcm1Mb2NhdGlvbih1LGMubmFtZSksYykpO2ZvcihmPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcih1LDM1NzIxKSxuLnByb2ZpbGUmJihyLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD1mKSxoPXIuYXR0cmlidXRlcyxsPTA7bDxmOysrbCkoYz10LmdldEFjdGl2ZUF0dHJpYih1LGwpKSYmYShoLG5ldyBpKGMubmFtZSxlLmlkKGMubmFtZSksdC5nZXRBdHRyaWJMb2NhdGlvbih1LGMubmFtZSksYykpfXZhciBjPXt9LHU9e30sZj17fSxoPVtdLHA9MDtyZXR1cm4gbi5wcm9maWxlJiYoci5nZXRNYXhVbmlmb3Jtc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gaC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc3RhdHMudW5pZm9ybXNDb3VudD50JiYodD1lLnN0YXRzLnVuaWZvcm1zQ291bnQpfSksdH0sci5nZXRNYXhBdHRyaWJ1dGVzQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBoLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zdGF0cy5hdHRyaWJ1dGVzQ291bnQ+dCYmKHQ9ZS5zdGF0cy5hdHRyaWJ1dGVzQ291bnQpfSksdH0pLHtjbGVhcjpmdW5jdGlvbigpe3ZhciBlPXQuZGVsZXRlU2hhZGVyLmJpbmQodCk7WChjKS5mb3JFYWNoKGUpLGM9e30sWCh1KS5mb3JFYWNoKGUpLHU9e30saC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuZGVsZXRlUHJvZ3JhbShlLnByb2dyYW0pfSksaC5sZW5ndGg9MCxmPXt9LHIuc2hhZGVyQ291bnQ9MH0scHJvZ3JhbTpmdW5jdGlvbih0LGUsbil7dmFyIGk9ZltlXTtpfHwoaT1mW2VdPXt9KTt2YXIgYT1pW3RdO3JldHVybiBhfHwoYT1uZXcgcyhlLHQpLHIuc2hhZGVyQ291bnQrKyxsKGEpLGlbdF09YSxoLnB1c2goYSkpLGF9LHJlc3RvcmU6ZnVuY3Rpb24oKXtjPXt9LHU9e307Zm9yKHZhciB0PTA7dDxoLmxlbmd0aDsrK3QpbChoW3RdKX0sc2hhZGVyOm8sZnJhZzotMSx2ZXJ0Oi0xfX1mdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoaSl7dmFyIGE7YT1udWxsPT09ZS5uZXh0PzUxMjE6ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZS5fdGV4dHVyZS50eXBlO3ZhciBvPTAscz0wLGw9bi5mcmFtZWJ1ZmZlcldpZHRoLGM9bi5mcmFtZWJ1ZmZlckhlaWdodCx1PW51bGw7cmV0dXJuIFcoaSk/dT1pOmkmJihvPTB8aS54LHM9MHxpLnksbD0wfChpLndpZHRofHxuLmZyYW1lYnVmZmVyV2lkdGgtbyksYz0wfChpLmhlaWdodHx8bi5mcmFtZWJ1ZmZlckhlaWdodC1zKSx1PWkuZGF0YXx8bnVsbCkscigpLGk9bCpjKjQsdXx8KDUxMjE9PT1hP3U9bmV3IFVpbnQ4QXJyYXkoaSk6NTEyNj09PWEmJih1PXV8fG5ldyBGbG9hdDMyQXJyYXkoaSkpKSx0LnBpeGVsU3RvcmVpKDMzMzMsNCksdC5yZWFkUGl4ZWxzKG8scyxsLGMsNjQwOCxhLHUpLHV9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnJhbWVidWZmZXIiaW4gdD9mdW5jdGlvbih0KXt2YXIgcjtyZXR1cm4gZS5zZXRGQk8oe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXJ9LGZ1bmN0aW9uKCl7cj1zKHQpfSkscn0odCk6cyh0KX19ZnVuY3Rpb24gQyh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gQyh0KS5qb2luKCIiKX1mdW5jdGlvbiB6KCl7ZnVuY3Rpb24gdCgpe3ZhciB0PVtdLGU9W107cmV0dXJuIGooZnVuY3Rpb24oKXt0LnB1c2guYXBwbHkodCxDKGFyZ3VtZW50cykpfSx7ZGVmOmZ1bmN0aW9uKCl7dmFyIG49InYiK3IrKztyZXR1cm4gZS5wdXNoKG4pLDA8YXJndW1lbnRzLmxlbmd0aCYmKHQucHVzaChuLCI9IiksdC5wdXNoLmFwcGx5KHQsQyhhcmd1bWVudHMpKSx0LnB1c2goIjsiKSksbn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gTChbMDxlLmxlbmd0aD8idmFyICIrZSsiOyI6IiIsTCh0KV0pfX0pfWZ1bmN0aW9uIGUoKXtmdW5jdGlvbiBlKHQsZSl7bih0LGUsIj0iLHIuZGVmKHQsZSksIjsiKX12YXIgcj10KCksbj10KCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gaihmdW5jdGlvbigpe3IuYXBwbHkocixDKGFyZ3VtZW50cykpfSx7ZGVmOnIuZGVmLGVudHJ5OnIsZXhpdDpuLHNhdmU6ZSxzZXQ6ZnVuY3Rpb24odCxuLGkpe2UodCxuKSxyKHQsbiwiPSIsaSwiOyIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBpKCkrYSgpfX0pfXZhciByPTAsbj1bXSxpPVtdLGE9dCgpLG89e307cmV0dXJue2dsb2JhbDphLGxpbms6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxpLmxlbmd0aDsrK2UpaWYoaVtlXT09PXQpcmV0dXJuIG5bZV07cmV0dXJuIGU9ImciK3IrKyxuLnB1c2goZSksaS5wdXNoKHQpLGV9LGJsb2NrOnQscHJvYzpmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD0iYSIraS5sZW5ndGg7cmV0dXJuIGkucHVzaCh0KSx0fXZhciBpPVtdO3I9cnx8MDtmb3IodmFyIGE9MDthPHI7KythKW4oKTt2YXIgcz0oYT1lKCkpLnRvU3RyaW5nO3JldHVybiBvW3RdPWooYSx7YXJnOm4sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gTChbImZ1bmN0aW9uKCIsaS5qb2luKCksIil7IixzKCksIn0iXSl9fSl9LHNjb3BlOmUsY29uZDpmdW5jdGlvbigpe3ZhciB0PUwoYXJndW1lbnRzKSxyPWUoKSxuPWUoKSxpPXIudG9TdHJpbmcsYT1uLnRvU3RyaW5nO3JldHVybiBqKHIse3RoZW46ZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseShyLEMoYXJndW1lbnRzKSksdGhpc30sZWxzZTpmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KG4sQyhhcmd1bWVudHMpKSx0aGlzfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPWEoKTtyZXR1cm4gZSYmKGU9ImVsc2V7IitlKyJ9IiksTChbImlmKCIsdCwiKXsiLGkoKSwifSIsZV0pfX0pfSxjb21waWxlOmZ1bmN0aW9uKCl7dmFyIHQ9WycidXNlIHN0cmljdCI7JyxhLCJyZXR1cm4geyJdO09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKCciJyxlLCciOicsb1tlXS50b1N0cmluZygpLCIsIil9KSx0LnB1c2goIn0iKTt2YXIgZT1MKHQpLnJlcGxhY2UoLzsvZywiO1xuIikucmVwbGFjZSgvfS9nLCJ9XG4iKS5yZXBsYWNlKC97L2csIntcbiIpO3JldHVybiBGdW5jdGlvbi5hcHBseShudWxsLG4uY29uY2F0KGUpKS5hcHBseShudWxsLGkpfX19ZnVuY3Rpb24gTyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8Vyh0KXx8bCh0KX1mdW5jdGlvbiBJKHQpe3JldHVybiB0LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4idmlld3BvcnQiPT09dD8tMToidmlld3BvcnQiPT09ZT8xOnQ8ZT8tMToxfSl9ZnVuY3Rpb24gRCh0LGUscixuKXt0aGlzLnRoaXNEZXA9dCx0aGlzLmNvbnRleHREZXA9ZSx0aGlzLnByb3BEZXA9cix0aGlzLmFwcGVuZD1ufWZ1bmN0aW9uIFAodCl7cmV0dXJuIHQmJiEodC50aGlzRGVwfHx0LmNvbnRleHREZXB8fHQucHJvcERlcCl9ZnVuY3Rpb24gUih0KXtyZXR1cm4gbmV3IEQoITEsITEsITEsdCl9ZnVuY3Rpb24gRih0LGUpe3ZhciByPXQudHlwZTtyZXR1cm4gMD09PXI/bmV3IEQoITAsMTw9KHI9dC5kYXRhLmxlbmd0aCksMjw9cixlKTo0PT09cj9uZXcgRCgocj10LmRhdGEpLnRoaXNEZXAsci5jb250ZXh0RGVwLHIucHJvcERlcCxlKTpuZXcgRCgzPT09ciwyPT09ciwxPT09cixlKX1mdW5jdGlvbiBCKHQsZSxyLG4saSxvLHMsbCxjLHUsZixoLHAsZCxnKXtmdW5jdGlvbiBtKHQpe3JldHVybiB0LnJlcGxhY2UoIi4iLCJfIil9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49bSh0KTtudC5wdXNoKHQpLGV0W25dPXR0W25dPSEhcixpdFtuXT1lfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPW0odCk7bnQucHVzaCh0KSxBcnJheS5pc0FycmF5KHIpPyh0dFtuXT1yLnNsaWNlKCksZXRbbl09ci5zbGljZSgpKTp0dFtuXT1ldFtuXT1yLGF0W25dPWV9ZnVuY3Rpb24gYigpe3ZhciB0PXooKSxyPXQubGluayxuPXQuZ2xvYmFsO3QuaWQ9bHQrKyx0LmJhdGNoSWQ9IjAiO3ZhciBpPXIob3QpLGE9dC5zaGFyZWQ9e3Byb3BzOiJhMCJ9O09iamVjdC5rZXlzKG90KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09bi5kZWYoaSwiLiIsdCl9KTt2YXIgbz10Lm5leHQ9e30scz10LmN1cnJlbnQ9e307T2JqZWN0LmtleXMoYXQpLmZvckVhY2goZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0dFt0XSkmJihvW3RdPW4uZGVmKGEubmV4dCwiLiIsdCksc1t0XT1uLmRlZihhLmN1cnJlbnQsIi4iLHQpKX0pO3ZhciBsPXQuY29uc3RhbnRzPXt9O09iamVjdC5rZXlzKHN0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09bi5kZWYoSlNPTi5zdHJpbmdpZnkoc3RbdF0pKX0pLHQuaW52b2tlPWZ1bmN0aW9uKGUsbil7c3dpdGNoKG4udHlwZSl7Y2FzZSAwOnZhciBpPVsidGhpcyIsYS5jb250ZXh0LGEucHJvcHMsdC5iYXRjaElkXTtyZXR1cm4gZS5kZWYocihuLmRhdGEpLCIuY2FsbCgiLGkuc2xpY2UoMCxNYXRoLm1heChuLmRhdGEubGVuZ3RoKzEsNCkpLCIpIik7Y2FzZSAxOnJldHVybiBlLmRlZihhLnByb3BzLG4uZGF0YSk7Y2FzZSAyOnJldHVybiBlLmRlZihhLmNvbnRleHQsbi5kYXRhKTtjYXNlIDM6cmV0dXJuIGUuZGVmKCJ0aGlzIixuLmRhdGEpO2Nhc2UgNDpyZXR1cm4gbi5kYXRhLmFwcGVuZCh0LGUpLG4uZGF0YS5yZWZ9fSx0LmF0dHJpYkNhY2hlPXt9O3ZhciBjPXt9O3JldHVybiB0LnNjb3BlQXR0cmliPWZ1bmN0aW9uKHQpe2lmKCh0PWUuaWQodCkpaW4gYylyZXR1cm4gY1t0XTt2YXIgbj11LnNjb3BlW3RdO3JldHVybiBufHwobj11LnNjb3BlW3RdPW5ldyBaKSxjW3RdPXIobil9LHR9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljO2lmKCJmcmFtZWJ1ZmZlciJpbiByKXt2YXIgaT1yLmZyYW1lYnVmZmVyO3JldHVybiBpPyhpPWwuZ2V0RnJhbWVidWZmZXIoaSksUihmdW5jdGlvbih0LGUpe3ZhciByPXQubGluayhpKSxuPXQuc2hhcmVkO3JldHVybiBlLnNldChuLmZyYW1lYnVmZmVyLCIubmV4dCIsciksbj1uLmNvbnRleHQsZS5zZXQobiwiLmZyYW1lYnVmZmVyV2lkdGgiLHIrIi53aWR0aCIpLGUuc2V0KG4sIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiLmhlaWdodCIpLHJ9KSk6UihmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkO3JldHVybiBlLnNldChyLmZyYW1lYnVmZmVyLCIubmV4dCIsIm51bGwiKSxyPXIuY29udGV4dCxlLnNldChyLCIuZnJhbWVidWZmZXJXaWR0aCIscisiLmRyYXdpbmdCdWZmZXJXaWR0aCIpLGUuc2V0KHIsIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiLmRyYXdpbmdCdWZmZXJIZWlnaHQiKSwibnVsbCJ9KX1pZigiZnJhbWVidWZmZXIiaW4gbil7dmFyIGE9bi5mcmFtZWJ1ZmZlcjtyZXR1cm4gRihhLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxhKSxuPXQuc2hhcmVkLGk9bi5mcmFtZWJ1ZmZlcjtyPWUuZGVmKGksIi5nZXRGcmFtZWJ1ZmZlcigiLHIsIikiKTtyZXR1cm4gZS5zZXQoaSwiLm5leHQiLHIpLG49bi5jb250ZXh0LGUuc2V0KG4sIi5mcmFtZWJ1ZmZlcldpZHRoIixyKyI/IityKyIud2lkdGg6IituKyIuZHJhd2luZ0J1ZmZlcldpZHRoIiksZS5zZXQobiwiLmZyYW1lYnVmZmVySGVpZ2h0IixyKyI/IityKyIuaGVpZ2h0OiIrbisiLmRyYXdpbmdCdWZmZXJIZWlnaHQiKSxyfSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdyh0KXtmdW5jdGlvbiByKHQpe2lmKHQgaW4gbil7dmFyIHI9ZS5pZChuW3RdKTtyZXR1cm4odD1SKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSkuaWQ9cix0fWlmKHQgaW4gaSl7dmFyIGE9aVt0XTtyZXR1cm4gRihhLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxhKTtyZXR1cm4gZS5kZWYodC5zaGFyZWQuc3RyaW5ncywiLmlkKCIsciwiKSIpfSl9cmV0dXJuIG51bGx9dmFyIG49dC5zdGF0aWMsaT10LmR5bmFtaWMsYT1yKCJmcmFnIiksbz1yKCJ2ZXJ0Iikscz1udWxsO3JldHVybiBQKGEpJiZQKG8pPyhzPWYucHJvZ3JhbShvLmlkLGEuaWQpLHQ9UihmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxpbmsocyl9KSk6dD1uZXcgRChhJiZhLnRoaXNEZXB8fG8mJm8udGhpc0RlcCxhJiZhLmNvbnRleHREZXB8fG8mJm8uY29udGV4dERlcCxhJiZhLnByb3BEZXB8fG8mJm8ucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByLG4saT10LnNoYXJlZC5zaGFkZXI7cmV0dXJuIHI9YT9hLmFwcGVuZCh0LGUpOmUuZGVmKGksIi4iLCJmcmFnIiksbj1vP28uYXBwZW5kKHQsZSk6ZS5kZWYoaSwiLiIsInZlcnQiKSxlLmRlZihpKyIucHJvZ3JhbSgiK24rIiwiK3IrIikiKX0pLHtmcmFnOmEsdmVydDpvLHByb2dWYXI6dCxwcm9ncmFtOnN9fWZ1bmN0aW9uIGsodCxlKXtmdW5jdGlvbiByKHQsZSl7aWYodCBpbiBuKXt2YXIgcj0wfG5bdF07cmV0dXJuIFIoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSYmKHQuT0ZGU0VUPXIpLHJ9KX1pZih0IGluIGkpe3ZhciBvPWlbdF07cmV0dXJuIEYobyxmdW5jdGlvbih0LHIpe3ZhciBuPXQuaW52b2tlKHIsbyk7cmV0dXJuIGUmJih0Lk9GRlNFVD1uKSxufSl9cmV0dXJuIGUmJmE/UihmdW5jdGlvbih0LGUpe3JldHVybiB0Lk9GRlNFVD0iMCIsMH0pOm51bGx9dmFyIG49dC5zdGF0aWMsaT10LmR5bmFtaWMsYT1mdW5jdGlvbigpe2lmKCJlbGVtZW50cyJpbiBuKXt2YXIgdD1uLmVsZW1lbnRzO08odCk/dD1vLmdldEVsZW1lbnRzKG8uY3JlYXRlKHQsITApKTp0JiYodD1vLmdldEVsZW1lbnRzKHQpKTt2YXIgZT1SKGZ1bmN0aW9uKGUscil7aWYodCl7dmFyIG49ZS5saW5rKHQpO3JldHVybiBlLkVMRU1FTlRTPW59cmV0dXJuIGUuRUxFTUVOVFM9bnVsbH0pO3JldHVybiBlLnZhbHVlPXQsZX1pZigiZWxlbWVudHMiaW4gaSl7dmFyIHI9aS5lbGVtZW50cztyZXR1cm4gRihyLGZ1bmN0aW9uKHQsZSl7dmFyIG49KGk9dC5zaGFyZWQpLmlzQnVmZmVyQXJncyxpPWkuZWxlbWVudHMsYT10Lmludm9rZShlLHIpLG89ZS5kZWYoIm51bGwiKTtuPWUuZGVmKG4sIigiLGEsIikiKSxhPXQuY29uZChuKS50aGVuKG8sIj0iLGksIi5jcmVhdGVTdHJlYW0oIixhLCIpOyIpLmVsc2UobywiPSIsaSwiLmdldEVsZW1lbnRzKCIsYSwiKTsiKTtyZXR1cm4gZS5lbnRyeShhKSxlLmV4aXQodC5jb25kKG4pLnRoZW4oaSwiLmRlc3Ryb3lTdHJlYW0oIixvLCIpOyIpKSx0LkVMRU1FTlRTPW99KX1yZXR1cm4gbnVsbH0oKSxzPXIoIm9mZnNldCIsITApO3JldHVybntlbGVtZW50czphLHByaW1pdGl2ZTpmdW5jdGlvbigpe2lmKCJwcmltaXRpdmUiaW4gbil7dmFyIHQ9bi5wcmltaXRpdmU7cmV0dXJuIFIoZnVuY3Rpb24oZSxyKXtyZXR1cm4gcnRbdF19KX1pZigicHJpbWl0aXZlImluIGkpe3ZhciBlPWkucHJpbWl0aXZlO3JldHVybiBGKGUsZnVuY3Rpb24odCxyKXt2YXIgbj10LmNvbnN0YW50cy5wcmltVHlwZXMsaT10Lmludm9rZShyLGUpO3JldHVybiByLmRlZihuLCJbIixpLCJdIil9KX1yZXR1cm4gYT9QKGEpP2EudmFsdWU/UihmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIucHJpbVR5cGUiKX0pOlIoZnVuY3Rpb24oKXtyZXR1cm4gNH0pOm5ldyBEKGEudGhpc0RlcCxhLmNvbnRleHREZXAsYS5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gZS5kZWYociwiPyIsciwiLnByaW1UeXBlOiIsNCl9KTpudWxsfSgpLGNvdW50OmZ1bmN0aW9uKCl7aWYoImNvdW50ImluIG4pe3ZhciB0PTB8bi5jb3VudDtyZXR1cm4gUihmdW5jdGlvbigpe3JldHVybiB0fSl9aWYoImNvdW50ImluIGkpe3ZhciBlPWkuY291bnQ7cmV0dXJuIEYoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9cmV0dXJuIGE/UChhKT9hP3M/bmV3IEQocy50aGlzRGVwLHMuY29udGV4dERlcCxzLnByb3BEZXAsZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnZlcnRDb3VudC0iLHQuT0ZGU0VUKX0pOlIoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnZlcnRDb3VudCIpfSk6UihmdW5jdGlvbigpe3JldHVybi0xfSk6bmV3IEQoYS50aGlzRGVwfHxzLnRoaXNEZXAsYS5jb250ZXh0RGVwfHxzLmNvbnRleHREZXAsYS5wcm9wRGVwfHxzLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LkVMRU1FTlRTO3JldHVybiB0Lk9GRlNFVD9lLmRlZihyLCI/IixyLCIudmVydENvdW50LSIsdC5PRkZTRVQsIjotMSIpOmUuZGVmKHIsIj8iLHIsIi52ZXJ0Q291bnQ6LTEiKX0pOm51bGx9KCksaW5zdGFuY2VzOnIoImluc3RhbmNlcyIsITEpLG9mZnNldDpzfX1mdW5jdGlvbiBUKHQscil7dmFyIG49dC5zdGF0aWMsYT10LmR5bmFtaWMsbz17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGE9ZS5pZCh0KSxzPW5ldyBaO2lmKE8ocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWkuZ2V0QnVmZmVyKGkuY3JlYXRlKHIsMzQ5NjIsITEsITApKSxzLnR5cGU9MDtlbHNlIGlmKGM9aS5nZXRCdWZmZXIocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWMscy50eXBlPTA7ZWxzZSBpZigiY29uc3RhbnQiaW4gcil7dmFyIGw9ci5jb25zdGFudDtzLmJ1ZmZlcj0ibnVsbCIscy5zdGF0ZT0yLCJudW1iZXIiPT10eXBlb2YgbD9zLng9bDpidC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ZTxsLmxlbmd0aCYmKHNbdF09bFtlXSl9KX1lbHNle3ZhciBjPU8oci5idWZmZXIpP2kuZ2V0QnVmZmVyKGkuY3JlYXRlKHIuYnVmZmVyLDM0OTYyLCExLCEwKSk6aS5nZXRCdWZmZXIoci5idWZmZXIpLHU9MHxyLm9mZnNldCxmPTB8ci5zdHJpZGUsaD0wfHIuc2l6ZSxwPSEhci5ub3JtYWxpemVkLGQ9MDsidHlwZSJpbiByJiYoZD1KW3IudHlwZV0pLHI9MHxyLmRpdmlzb3Iscy5idWZmZXI9YyxzLnN0YXRlPTEscy5zaXplPWgscy5ub3JtYWxpemVkPXAscy50eXBlPWR8fGMuZHR5cGUscy5vZmZzZXQ9dSxzLnN0cmlkZT1mLHMuZGl2aXNvcj1yfW9bdF09UihmdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cmliQ2FjaGU7aWYoYSBpbiByKXJldHVybiByW2FdO3ZhciBuPXtpc1N0cmVhbTohMX07cmV0dXJuIE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1zW3RdfSkscy5idWZmZXImJihuLmJ1ZmZlcj10Lmxpbmsocy5idWZmZXIpLG4udHlwZT1uLnR5cGV8fG4uYnVmZmVyKyIuZHR5cGUiKSxyW2FdPW59KX0pLE9iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9YVt0XTtvW3RdPUYoZSxmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4odCl7cihsW3RdLCI9IixpLCIuIix0LCJ8MDsiKX12YXIgaT10Lmludm9rZShyLGUpLGE9dC5zaGFyZWQsbz1hLmlzQnVmZmVyQXJncyxzPWEuYnVmZmVyLGw9e2lzU3RyZWFtOnIuZGVmKCExKX0sYz1uZXcgWjtjLnN0YXRlPTEsT2JqZWN0LmtleXMoYykuZm9yRWFjaChmdW5jdGlvbih0KXtsW3RdPXIuZGVmKCIiK2NbdF0pfSk7dmFyIHU9bC5idWZmZXIsZj1sLnR5cGU7cmV0dXJuIHIoImlmKCIsbywiKCIsaSwiKSl7IixsLmlzU3RyZWFtLCI9dHJ1ZTsiLHUsIj0iLHMsIi5jcmVhdGVTdHJlYW0oIiwzNDk2MiwiLCIsaSwiKTsiLGYsIj0iLHUsIi5kdHlwZTsiLCJ9ZWxzZXsiLHUsIj0iLHMsIi5nZXRCdWZmZXIoIixpLCIpOyIsImlmKCIsdSwiKXsiLGYsIj0iLHUsIi5kdHlwZTsiLCd9ZWxzZSBpZigiY29uc3RhbnQiIGluICcsaSwiKXsiLGwuc3RhdGUsIj0iLDIsIjsiLCJpZih0eXBlb2YgIitpKycuY29uc3RhbnQgPT09ICJudW1iZXIiKXsnLGxbYnRbMF1dLCI9IixpLCIuY29uc3RhbnQ7IixidC5zbGljZSgxKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGxbdF19KS5qb2luKCI9IiksIj0wOyIsIn1lbHNleyIsYnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxbdF0rIj0iK2krIi5jb25zdGFudC5sZW5ndGg+IitlKyI/IitpKyIuY29uc3RhbnRbIitlKyJdOjA7In0pLmpvaW4oIiIpLCJ9fWVsc2V7IiwiaWYoIixvLCIoIixpLCIuYnVmZmVyKSl7Iix1LCI9IixzLCIuY3JlYXRlU3RyZWFtKCIsMzQ5NjIsIiwiLGksIi5idWZmZXIpOyIsIn1lbHNleyIsdSwiPSIscywiLmdldEJ1ZmZlcigiLGksIi5idWZmZXIpOyIsIn0iLGYsJz0idHlwZSIgaW4gJyxpLCI/IixhLmdsVHlwZXMsIlsiLGksIi50eXBlXToiLHUsIi5kdHlwZTsiLGwubm9ybWFsaXplZCwiPSEhIixpLCIubm9ybWFsaXplZDsiKSxuKCJzaXplIiksbigib2Zmc2V0Iiksbigic3RyaWRlIiksbigiZGl2aXNvciIpLHIoIn19Iiksci5leGl0KCJpZigiLGwuaXNTdHJlYW0sIil7IixzLCIuZGVzdHJveVN0cmVhbSgiLHUsIik7IiwifSIpLGx9KX0pLG99ZnVuY3Rpb24gQSh0LGUscixuLGkpe3ZhciBvPV8odCkscz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtpZih0IGluIGkpe3ZhciByPWlbdF07dD0hMDt2YXIgbixvLHM9MHxyLngsbD0wfHIueTtyZXR1cm4id2lkdGgiaW4gcj9uPTB8ci53aWR0aDp0PSExLCJoZWlnaHQiaW4gcj9vPTB8ci5oZWlnaHQ6dD0hMSxuZXcgRCghdCYmZSYmZS50aGlzRGVwLCF0JiZlJiZlLmNvbnRleHREZXAsIXQmJmUmJmUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciBpPXQuc2hhcmVkLmNvbnRleHQsYT1uOyJ3aWR0aCJpbiByfHwoYT1lLmRlZihpLCIuIiwiZnJhbWVidWZmZXJXaWR0aCIsIi0iLHMpKTt2YXIgYz1vO3JldHVybiJoZWlnaHQiaW4gcnx8KGM9ZS5kZWYoaSwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IiwiLSIsbCkpLFtzLGwsYSxjXX0pfWlmKHQgaW4gYSl7dmFyIGM9YVt0XTtyZXR1cm4gdD1GKGMsZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGMpLG49dC5zaGFyZWQuY29udGV4dCxpPWUuZGVmKHIsIi54fDAiKSxhPWUuZGVmKHIsIi55fDAiKTtyZXR1cm5baSxhLGUuZGVmKCcid2lkdGgiIGluICcsciwiPyIsciwiLndpZHRofDA6IiwiKCIsbiwiLiIsImZyYW1lYnVmZmVyV2lkdGgiLCItIixpLCIpIikscj1lLmRlZignImhlaWdodCIgaW4gJyxyLCI/IixyLCIuaGVpZ2h0fDA6IiwiKCIsbiwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IiwiLSIsYSwiKSIpXX0pLGUmJih0LnRoaXNEZXA9dC50aGlzRGVwfHxlLnRoaXNEZXAsdC5jb250ZXh0RGVwPXQuY29udGV4dERlcHx8ZS5jb250ZXh0RGVwLHQucHJvcERlcD10LnByb3BEZXB8fGUucHJvcERlcCksdH1yZXR1cm4gZT9uZXcgRChlLnRoaXNEZXAsZS5jb250ZXh0RGVwLGUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuWzAsMCxlLmRlZihyLCIuIiwiZnJhbWVidWZmZXJXaWR0aCIpLGUuZGVmKHIsIi4iLCJmcmFtZWJ1ZmZlckhlaWdodCIpXX0pOm51bGx9dmFyIGk9dC5zdGF0aWMsYT10LmR5bmFtaWM7aWYodD1uKCJ2aWV3cG9ydCIpKXt2YXIgbz10O3Q9bmV3IEQodC50aGlzRGVwLHQuY29udGV4dERlcCx0LnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj1vLmFwcGVuZCh0LGUpLG49dC5zaGFyZWQuY29udGV4dDtyZXR1cm4gZS5zZXQobiwiLnZpZXdwb3J0V2lkdGgiLHJbMl0pLGUuc2V0KG4sIi52aWV3cG9ydEhlaWdodCIsclszXSkscn0pfXJldHVybnt2aWV3cG9ydDp0LHNjaXNzb3JfYm94Om4oInNjaXNzb3IuYm94Iil9fSh0LG8pLGw9ayh0KSxjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWMsaT17fTtyZXR1cm4gbnQuZm9yRWFjaChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsYSl7aWYodCBpbiByKXt2YXIgcz1lKHJbdF0pO2lbb109UihmdW5jdGlvbigpe3JldHVybiBzfSl9ZWxzZSBpZih0IGluIG4pe3ZhciBsPW5bdF07aVtvXT1GKGwsZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0LGUsdC5pbnZva2UoZSxsKSl9KX19dmFyIG89bSh0KTtzd2l0Y2godCl7Y2FzZSJjdWxsLmVuYWJsZSI6Y2FzZSJibGVuZC5lbmFibGUiOmNhc2UiZGl0aGVyIjpjYXNlInN0ZW5jaWwuZW5hYmxlIjpjYXNlImRlcHRoLmVuYWJsZSI6Y2FzZSJzY2lzc29yLmVuYWJsZSI6Y2FzZSJwb2x5Z29uT2Zmc2V0LmVuYWJsZSI6Y2FzZSJzYW1wbGUuYWxwaGEiOmNhc2Uic2FtcGxlLmVuYWJsZSI6Y2FzZSJkZXB0aC5tYXNrIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSk7Y2FzZSJkZXB0aC5mdW5jIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4ga3RbdF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYodC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLCJbIixyLCJdIil9KTtjYXNlImRlcHRoLnJhbmdlIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZigiKyIsciwiWzBdIiksZT1lLmRlZigiKyIsciwiWzFdIildfSk7Y2FzZSJibGVuZC5mdW5jIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5bd3RbInNyY1JHQiJpbiB0P3Quc3JjUkdCOnQuc3JjXSx3dFsiZHN0UkdCImluIHQ/dC5kc3RSR0I6dC5kc3RdLHd0WyJzcmNBbHBoYSJpbiB0P3Quc3JjQWxwaGE6dC5zcmNdLHd0WyJkc3RBbHBoYSJpbiB0P3QuZHN0QWxwaGE6dC5kc3RdXX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gZS5kZWYoJyInLHQsbiwnIiBpbiAnLHIsIj8iLHIsIi4iLHQsbiwiOiIsciwiLiIsdCl9dD10LmNvbnN0YW50cy5ibGVuZEZ1bmNzO3ZhciBpPW4oInNyYyIsIlJHQiIpLGE9bigiZHN0IiwiUkdCIiksbz0oaT1lLmRlZih0LCJbIixpLCJdIiksZS5kZWYodCwiWyIsbigic3JjIiwiQWxwaGEiKSwiXSIpKTtyZXR1cm5baSxhPWUuZGVmKHQsIlsiLGEsIl0iKSxvLHQ9ZS5kZWYodCwiWyIsbigiZHN0IiwiQWxwaGEiKSwiXSIpXX0pO2Nhc2UiYmxlbmQuZXF1YXRpb24iOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9bJFt0XSwkW3RdXToib2JqZWN0Ij09dHlwZW9mIHQ/WyRbdC5yZ2JdLCRbdC5hbHBoYV1dOnZvaWQgMH0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29uc3RhbnRzLmJsZW5kRXF1YXRpb25zLGk9ZS5kZWYoKSxhPWUuZGVmKCk7cmV0dXJuKHQ9dC5jb25kKCJ0eXBlb2YgIixyLCc9PT0ic3RyaW5nIicpKS50aGVuKGksIj0iLGEsIj0iLG4sIlsiLHIsIl07IiksdC5lbHNlKGksIj0iLG4sIlsiLHIsIi5yZ2JdOyIsYSwiPSIsbiwiWyIsciwiLmFscGhhXTsiKSxlKHQpLFtpLGFdfSk7Y2FzZSJibGVuZC5jb2xvciI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIGEoNCxmdW5jdGlvbihlKXtyZXR1cm4rdFtlXX0pfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGEoNCxmdW5jdGlvbih0KXtyZXR1cm4gZS5kZWYoIisiLHIsIlsiLHQsIl0iKX0pfSk7Y2FzZSJzdGVuY2lsLm1hc2siOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiAwfHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYociwifDAiKX0pO2Nhc2Uic3RlbmNpbC5mdW5jIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5ba3RbdC5jbXB8fCJrZWVwIl0sdC5yZWZ8fDAsIm1hc2siaW4gdD90Lm1hc2s6LTFdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuW3Q9ZS5kZWYoJyJjbXAiIGluICcsciwiPyIsdC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLCJbIixyLCIuY21wXSIsIjoiLDc2ODApLGUuZGVmKHIsIi5yZWZ8MCIpLGU9ZS5kZWYoJyJtYXNrIiBpbiAnLHIsIj8iLHIsIi5tYXNrfDA6LTEiKV19KTtjYXNlInN0ZW5jaWwub3BGcm9udCI6Y2FzZSJzdGVuY2lsLm9wQmFjayI6cmV0dXJuIGUoZnVuY3Rpb24oZSl7cmV0dXJuWyJzdGVuY2lsLm9wQmFjayI9PT10PzEwMjk6MTAyOCxUdFtlLmZhaWx8fCJrZWVwIl0sVHRbZS56ZmFpbHx8ImtlZXAiXSxUdFtlLnpwYXNzfHwia2VlcCJdXX0sZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIuZGVmKCciJyx0LCciIGluICcsbiwiPyIsYSwiWyIsbiwiLiIsdCwiXToiLDc2ODApfXZhciBhPWUuY29uc3RhbnRzLnN0ZW5jaWxPcHM7cmV0dXJuWyJzdGVuY2lsLm9wQmFjayI9PT10PzEwMjk6MTAyOCxpKCJmYWlsIiksaSgiemZhaWwiKSxpKCJ6cGFzcyIpXX0pO2Nhc2UicG9seWdvbk9mZnNldC5vZmZzZXQiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVyblswfHQuZmFjdG9yLDB8dC51bml0c119LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYociwiLmZhY3RvcnwwIiksZT1lLmRlZihyLCIudW5pdHN8MCIpXX0pO2Nhc2UiY3VsbC5mYWNlIjpyZXR1cm4gZShmdW5jdGlvbih0KXt2YXIgZT0wO3JldHVybiJmcm9udCI9PT10P2U9MTAyODoiYmFjayI9PT10JiYoZT0xMDI5KSxlfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsJz09PSJmcm9udCI/JywxMDI4LCI6IiwxMDI5KX0pO2Nhc2UibGluZVdpZHRoIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSk7Y2FzZSJmcm9udEZhY2UiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiBBdFt0XX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZihyKyc9PT0iY3ciPzIzMDQ6MjMwNScpfSk7Y2FzZSJjb2xvck1hc2siOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4hIXR9KX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsZnVuY3Rpb24odCl7cmV0dXJuIiEhIityKyJbIit0KyJdIn0pfSk7Y2FzZSJzYW1wbGUuY292ZXJhZ2UiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVyblsidmFsdWUiaW4gdD90LnZhbHVlOjEsISF0LmludmVydF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYoJyJ2YWx1ZSIgaW4gJyxyLCI/KyIsciwiLnZhbHVlOjEiKSxlPWUuZGVmKCIhISIsciwiLmludmVydCIpXX0pfX0pLGl9KHQpLHU9dyh0KSxmPXMudmlld3BvcnQ7cmV0dXJuIGYmJihjLnZpZXdwb3J0PWYpLChzPXNbZj1tKCJzY2lzc29yLmJveCIpXSkmJihjW2ZdPXMpLChvPXtmcmFtZWJ1ZmZlcjpvLGRyYXc6bCxzaGFkZXI6dSxzdGF0ZTpjLGRpcnR5OnM9MDxPYmplY3Qua2V5cyhjKS5sZW5ndGh9KS5wcm9maWxlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zdGF0aWM7aWYodD10LmR5bmFtaWMsInByb2ZpbGUiaW4gcil7dmFyIG49ISFyLnByb2ZpbGU7KGU9UihmdW5jdGlvbih0LGUpe3JldHVybiBufSkpLmVuYWJsZT1ufWVsc2UgaWYoInByb2ZpbGUiaW4gdCl7dmFyIGk9dC5wcm9maWxlO2U9RihpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW52b2tlKGUsaSl9KX1yZXR1cm4gZX0odCksby51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGk9e307cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUsbj1yW3RdO2lmKCJudW1iZXIiPT10eXBlb2Ygbnx8ImJvb2xlYW4iPT10eXBlb2YgbillPVIoZnVuY3Rpb24oKXtyZXR1cm4gbn0pO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pe3ZhciBvPW4uX3JlZ2xUeXBlOyJ0ZXh0dXJlMmQiPT09b3x8InRleHR1cmVDdWJlIj09PW8/ZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobil9KToiZnJhbWVidWZmZXIiIT09byYmImZyYW1lYnVmZmVyQ3ViZSIhPT1vfHwoZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobi5jb2xvclswXSl9KSl9ZWxzZSB2KG4pJiYoZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbC5kZWYoIlsiLGEobi5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KSwiXSIpfSkpO2UudmFsdWU9bixpW3RdPWV9KSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07aVt0XT1GKGUsZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pfSksaX0ociksby5hdHRyaWJ1dGVzPVQoZSksby5jb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhdGljLHI9dC5keW5hbWljLG49e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZVt0XTtuW3RdPVIoZnVuY3Rpb24odCxlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHJ8fCJib29sZWFuIj09dHlwZW9mIHI/IiIrcjp0Lmxpbmsocil9KX0pLE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9clt0XTtuW3RdPUYoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9KSxufShuKSxvfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPXQuc2hhcmVkLmNvbnRleHQsaT10LnNjb3BlKCk7T2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihhKXtlLnNhdmUobiwiLiIrYSksaShuLCIuIixhLCI9IixyW2FdLmFwcGVuZCh0LGUpLCI7Iil9KSxlKGkpfWZ1bmN0aW9uIFModCxlLHIsbil7dmFyIGksYT0ocz10LnNoYXJlZCkuZ2wsbz1zLmZyYW1lYnVmZmVyO1EmJihpPWUuZGVmKHMuZXh0ZW5zaW9ucywiLndlYmdsX2RyYXdfYnVmZmVycyIpKTt2YXIgcz0obD10LmNvbnN0YW50cykuZHJhd0J1ZmZlcixsPWwuYmFja0J1ZmZlcjt0PXI/ci5hcHBlbmQodCxlKTplLmRlZihvLCIubmV4dCIpLG58fGUoImlmKCIsdCwiIT09IixvLCIuY3VyKXsiKSxlKCJpZigiLHQsIil7IixhLCIuYmluZEZyYW1lYnVmZmVyKCIsMzYxNjAsIiwiLHQsIi5mcmFtZWJ1ZmZlcik7IiksUSYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLHMsIlsiLHQsIi5jb2xvckF0dGFjaG1lbnRzLmxlbmd0aF0pOyIpLGUoIn1lbHNleyIsYSwiLmJpbmRGcmFtZWJ1ZmZlcigiLDM2MTYwLCIsbnVsbCk7IiksUSYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLGwsIik7IiksZSgifSIsbywiLmN1cj0iLHQsIjsiKSxufHxlKCJ9Iil9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49dC5zaGFyZWQsaT1uLmdsLG89dC5jdXJyZW50LHM9dC5uZXh0LGw9bi5jdXJyZW50LGM9bi5uZXh0LHU9dC5jb25kKGwsIi5kaXJ0eSIpO250LmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG4sZjtpZighKChlPW0oZSkpaW4gci5zdGF0ZSkpaWYoZSBpbiBzKXtuPXNbZV0sZj1vW2VdO3ZhciBoPWEodHRbZV0ubGVuZ3RoLGZ1bmN0aW9uKHQpe3JldHVybiB1LmRlZihuLCJbIix0LCJdIil9KTt1KHQuY29uZChoLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0KyIhPT0iK2YrIlsiK2UrIl0ifSkuam9pbigifHwiKSkudGhlbihpLCIuIixhdFtlXSwiKCIsaCwiKTsiLGgubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYrIlsiK2UrIl09Iit0fSkuam9pbigiOyIpLCI7IikpfWVsc2Ugbj11LmRlZihjLCIuIixlKSxoPXQuY29uZChuLCIhPT0iLGwsIi4iLGUpLHUoaCksZSBpbiBpdD9oKHQuY29uZChuKS50aGVuKGksIi5lbmFibGUoIixpdFtlXSwiKTsiKS5lbHNlKGksIi5kaXNhYmxlKCIsaXRbZV0sIik7IiksbCwiLiIsZSwiPSIsbiwiOyIpOmgoaSwiLiIsYXRbZV0sIigiLG4sIik7IixsLCIuIixlLCI9IixuLCI7Iil9KSwwPT09T2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoJiZ1KGwsIi5kaXJ0eT1mYWxzZTsiKSxlKHUpfWZ1bmN0aW9uIEModCxlLHIsbil7dmFyIGk9dC5zaGFyZWQsYT10LmN1cnJlbnQsbz1pLmN1cnJlbnQscz1pLmdsO0koT2JqZWN0LmtleXMocikpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGw9cltpXTtpZighbnx8bihsKSl7dmFyIGM9bC5hcHBlbmQodCxlKTtpZihpdFtpXSl7dmFyIHU9aXRbaV07UChsKT9lKHMsYz8iLmVuYWJsZSgiOiIuZGlzYWJsZSgiLHUsIik7Iik6ZSh0LmNvbmQoYykudGhlbihzLCIuZW5hYmxlKCIsdSwiKTsiKS5lbHNlKHMsIi5kaXNhYmxlKCIsdSwiKTsiKSksZShvLCIuIixpLCI9IixjLCI7Iil9ZWxzZSBpZih2KGMpKXt2YXIgZj1hW2ldO2UocywiLiIsYXRbaV0sIigiLGMsIik7IixjLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBmKyJbIitlKyJdPSIrdH0pLmpvaW4oIjsiKSwiOyIpfWVsc2UgZShzLCIuIixhdFtpXSwiKCIsYywiKTsiLG8sIi4iLGksIj0iLGMsIjsiKX19KX1mdW5jdGlvbiBMKHQsZSl7SyYmKHQuaW5zdGFuY2luZz1lLmRlZih0LnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKX1mdW5jdGlvbiBCKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgcGVyZm9ybWFuY2U/IkRhdGUubm93KCkiOiJwZXJmb3JtYW5jZS5ub3coKSJ9ZnVuY3Rpb24gbyh0KXt0KGM9ZS5kZWYoKSwiPSIsYSgpLCI7IiksInN0cmluZyI9PXR5cGVvZiBpP3QoaCwiLmNvdW50Kz0iLGksIjsiKTp0KGgsIi5jb3VudCsrOyIpLGQmJihuP3QodT1lLmRlZigpLCI9IixnLCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKTsiKTp0KGcsIi5iZWdpblF1ZXJ5KCIsaCwiKTsiKSl9ZnVuY3Rpb24gcyh0KXt0KGgsIi5jcHVUaW1lKz0iLGEoKSwiLSIsYywiOyIpLGQmJihuP3QoZywiLnB1c2hTY29wZVN0YXRzKCIsdSwiLCIsZywiLmdldE51bVBlbmRpbmdRdWVyaWVzKCksIixoLCIpOyIpOnQoZywiLmVuZFF1ZXJ5KCk7IikpfWZ1bmN0aW9uIGwodCl7dmFyIHI9ZS5kZWYocCwiLnByb2ZpbGUiKTtlKHAsIi5wcm9maWxlPSIsdCwiOyIpLGUuZXhpdChwLCIucHJvZmlsZT0iLHIsIjsiKX12YXIgYyx1LGY9dC5zaGFyZWQsaD10LnN0YXRzLHA9Zi5jdXJyZW50LGc9Zi50aW1lcjtpZihyPXIucHJvZmlsZSl7aWYoUChyKSlyZXR1cm4gdm9pZChyLmVuYWJsZT8obyhlKSxzKGUuZXhpdCksbCgidHJ1ZSIpKTpsKCJmYWxzZSIpKTtsKHI9ci5hcHBlbmQodCxlKSl9ZWxzZSByPWUuZGVmKHAsIi5wcm9maWxlIik7byhmPXQuYmxvY2soKSksZSgiaWYoIixyLCIpeyIsZiwifSIpLHModD10LmJsb2NrKCkpLGUuZXhpdCgiaWYoIixyLCIpeyIsdCwifSIpfWZ1bmN0aW9uIE4odCxlLHIsbixpKXtmdW5jdGlvbiBhKHIsbixpKXtmdW5jdGlvbiBhKCl7ZSgiaWYoISIsdSwiLmJ1ZmZlcil7IixsLCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIixjLCIpO30iKTt2YXIgcixhPWkudHlwZTtyPWkuc2l6ZT9lLmRlZihpLnNpemUsInx8IixuKTpuLGUoImlmKCIsdSwiLnR5cGUhPT0iLGEsInx8Iix1LCIuc2l6ZSE9PSIsciwifHwiLHAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1KyIuIit0KyIhPT0iK2lbdF19KS5qb2luKCJ8fCIpLCIpeyIsbCwiLmJpbmRCdWZmZXIoIiwzNDk2MiwiLCIsZiwiLmJ1ZmZlcik7IixsLCIudmVydGV4QXR0cmliUG9pbnRlcigiLFtjLHIsYSxpLm5vcm1hbGl6ZWQsaS5zdHJpZGUsaS5vZmZzZXRdLCIpOyIsdSwiLnR5cGU9IixhLCI7Iix1LCIuc2l6ZT0iLHIsIjsiLHAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1KyIuIit0KyI9IitpW3RdKyI7In0pLmpvaW4oIiIpLCJ9IiksSyYmKGE9aS5kaXZpc29yLGUoImlmKCIsdSwiLmRpdmlzb3IhPT0iLGEsIil7Iix0Lmluc3RhbmNpbmcsIi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoIixbYyxhXSwiKTsiLHUsIi5kaXZpc29yPSIsYSwiO30iKSl9ZnVuY3Rpb24gcygpe2UoImlmKCIsdSwiLmJ1ZmZlcil7IixsLCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsYywiKTsiLCJ9aWYoIixidC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdSsiLiIrdCsiIT09IitoW2VdfSkuam9pbigifHwiKSwiKXsiLGwsIi52ZXJ0ZXhBdHRyaWI0ZigiLGMsIiwiLGgsIik7IixidC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdSsiLiIrdCsiPSIraFtlXSsiOyJ9KS5qb2luKCIiKSwifSIpfXZhciBsPW8uZ2wsYz1lLmRlZihyLCIubG9jYXRpb24iKSx1PWUuZGVmKG8uYXR0cmlidXRlcywiWyIsYywiXSIpO3I9aS5zdGF0ZTt2YXIgZj1pLmJ1ZmZlcixoPVtpLngsaS55LGkueixpLnddLHA9WyJidWZmZXIiLCJub3JtYWxpemVkIiwib2Zmc2V0Iiwic3RyaWRlIl07MT09PXI/YSgpOjI9PT1yP3MoKTooZSgiaWYoIixyLCI9PT0iLDEsIil7IiksYSgpLGUoIn1lbHNleyIpLHMoKSxlKCJ9IikpfXZhciBvPXQuc2hhcmVkO24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbyxzPW4ubmFtZSxsPXIuYXR0cmlidXRlc1tzXTtpZihsKXtpZighaShsKSlyZXR1cm47bz1sLmFwcGVuZCh0LGUpfWVsc2V7aWYoIWkoTXQpKXJldHVybjt2YXIgYz10LnNjb3BlQXR0cmliKHMpO289e30sT2JqZWN0LmtleXMobmV3IFopLmZvckVhY2goZnVuY3Rpb24odCl7b1t0XT1lLmRlZihjLCIuIix0KX0pfWEodC5saW5rKG4pLGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDM1NjY0OmNhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gMjtjYXNlIDM1NjY1OmNhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gMztjYXNlIDM1NjY2OmNhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiAxfX0obi5pbmZvLnR5cGUpLG8pfSl9ZnVuY3Rpb24gaih0LHIsbixpLG8pe2Zvcih2YXIgcyxsPXQuc2hhcmVkLGM9bC5nbCx1PTA7dTxpLmxlbmd0aDsrK3Upe3ZhciBmLGg9KGc9aVt1XSkubmFtZSxwPWcuaW5mby50eXBlLGQ9bi51bmlmb3Jtc1toXSxnPXQubGluayhnKSsiLmxvY2F0aW9uIjtpZihkKXtpZighbyhkKSljb250aW51ZTtpZihQKGQpKXtpZihoPWQudmFsdWUsMzU2Nzg9PT1wfHwzNTY4MD09PXApcihjLCIudW5pZm9ybTFpKCIsZywiLCIsKHA9dC5saW5rKGguX3RleHR1cmV8fGguY29sb3JbMF0uX3RleHR1cmUpKSsiLmJpbmQoKSk7Iiksci5leGl0KHAsIi51bmJpbmQoKTsiKTtlbHNlIGlmKDM1Njc0PT09cHx8MzU2NzU9PT1wfHwzNTY3Nj09PXApZD0yLDM1Njc1PT09cD9kPTM6MzU2NzY9PT1wJiYoZD00KSxyKGMsIi51bmlmb3JtTWF0cml4IixkLCJmdigiLGcsIixmYWxzZSwiLGg9dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KFsiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGgpKyJdKSIpLCIpOyIpO2Vsc2V7c3dpdGNoKHApe2Nhc2UgNTEyNjpzPSIxZiI7YnJlYWs7Y2FzZSAzNTY2NDpzPSIyZiI7YnJlYWs7Y2FzZSAzNTY2NTpzPSIzZiI7YnJlYWs7Y2FzZSAzNTY2NjpzPSI0ZiI7YnJlYWs7Y2FzZSAzNTY3MDpjYXNlIDUxMjQ6cz0iMWkiO2JyZWFrO2Nhc2UgMzU2NzE6Y2FzZSAzNTY2NzpzPSIyaSI7YnJlYWs7Y2FzZSAzNTY3MjpjYXNlIDM1NjY4OnM9IjNpIjticmVhaztjYXNlIDM1NjczOnM9IjRpIjticmVhaztjYXNlIDM1NjY5OnM9IjRpIn1yKGMsIi51bmlmb3JtIixzLCIoIixnLCIsIix2KGgpP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGgpOmgsIik7Iil9Y29udGludWV9Zj1kLmFwcGVuZCh0LHIpfWVsc2V7aWYoIW8oTXQpKWNvbnRpbnVlO2Y9ci5kZWYobC51bmlmb3JtcywiWyIsZS5pZChoKSwiXSIpfXN3aXRjaCgzNTY3OD09PXA/cigiaWYoIixmLCImJiIsZiwnLl9yZWdsVHlwZT09PSJmcmFtZWJ1ZmZlciIpeycsZiwiPSIsZiwiLmNvbG9yWzBdOyIsIn0iKTozNTY4MD09PXAmJnIoImlmKCIsZiwiJiYiLGYsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXJDdWJlIil7JyxmLCI9IixmLCIuY29sb3JbMF07IiwifSIpLGg9MSxwKXtjYXNlIDM1Njc4OmNhc2UgMzU2ODA6cD1yLmRlZihmLCIuX3RleHR1cmUiKSxyKGMsIi51bmlmb3JtMWkoIixnLCIsIixwLCIuYmluZCgpKTsiKSxyLmV4aXQocCwiLnVuYmluZCgpOyIpO2NvbnRpbnVlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnM9IjFpIjticmVhaztjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cz0iMmkiLGg9MjticmVhaztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cz0iM2kiLGg9MzticmVhaztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cz0iNGkiLGg9NDticmVhaztjYXNlIDUxMjY6cz0iMWYiO2JyZWFrO2Nhc2UgMzU2NjQ6cz0iMmYiLGg9MjticmVhaztjYXNlIDM1NjY1OnM9IjNmIixoPTM7YnJlYWs7Y2FzZSAzNTY2NjpzPSI0ZiIsaD00O2JyZWFrO2Nhc2UgMzU2NzQ6cz0iTWF0cml4MmZ2IjticmVhaztjYXNlIDM1Njc1OnM9Ik1hdHJpeDNmdiI7YnJlYWs7Y2FzZSAzNTY3NjpzPSJNYXRyaXg0ZnYifWlmKHIoYywiLnVuaWZvcm0iLHMsIigiLGcsIiwiKSwiTSI9PT1zLmNoYXJBdCgwKSl7Zz1NYXRoLnBvdyhwLTM1Njc0KzIsMik7dmFyIG09dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KCIsZywiKSIpO3IoImZhbHNlLChBcnJheS5pc0FycmF5KCIsZiwiKXx8IixmLCIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpPyIsZiwiOigiLGEoZyxmdW5jdGlvbih0KXtyZXR1cm4gbSsiWyIrdCsiXT0iK2YrIlsiK3QrIl0ifSksIiwiLG0sIikiKX1lbHNlIHIoMTxoP2EoaCxmdW5jdGlvbih0KXtyZXR1cm4gZisiWyIrdCsiXSJ9KTpmKTtyKCIpOyIpfX1mdW5jdGlvbiBWKHQsZSxyLG4pe2Z1bmN0aW9uIGkoaSl7dmFyIGE9aFtpXTtyZXR1cm4gYT9hLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGEucHJvcERlcD9hLmFwcGVuZCh0LHIpOmEuYXBwZW5kKHQsZSk6ZS5kZWYoZiwiLiIsaSl9ZnVuY3Rpb24gYSgpe2Z1bmN0aW9uIHQoKXtyKGwsIi5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSgiLFtkLHYsbSxnKyI8PCgoIittKyItNTEyMSk+PjEpIixzXSwiKTsiKX1mdW5jdGlvbiBlKCl7cihsLCIuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKCIsW2QsZyx2LHNdLCIpOyIpfXA/eT90KCk6KHIoImlmKCIscCwiKXsiKSx0KCkscigifWVsc2V7IiksZSgpLHIoIn0iKSk6ZSgpfWZ1bmN0aW9uIG8oKXtmdW5jdGlvbiB0KCl7cih1KyIuZHJhd0VsZW1lbnRzKCIrW2QsdixtLGcrIjw8KCgiK20rIi01MTIxKT4+MSkiXSsiKTsiKX1mdW5jdGlvbiBlKCl7cih1KyIuZHJhd0FycmF5cygiK1tkLGcsdl0rIik7Iil9cD95P3QoKToocigiaWYoIixwLCIpeyIpLHQoKSxyKCJ9ZWxzZXsiKSxlKCkscigifSIpKTplKCl9dmFyIHMsbCxjPXQuc2hhcmVkLHU9Yy5nbCxmPWMuZHJhdyxoPW4uZHJhdyxwPWZ1bmN0aW9uKCl7dmFyIGk9aC5lbGVtZW50cyxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSk6aT1hLmRlZihmLCIuIiwiZWxlbWVudHMiKSxpJiZhKCJpZigiK2krIikiK3UrIi5iaW5kQnVmZmVyKDM0OTYzLCIraSsiLmJ1ZmZlci5idWZmZXIpOyIpLGl9KCksZD1pKCJwcmltaXRpdmUiKSxnPWkoIm9mZnNldCIpLHY9ZnVuY3Rpb24oKXt2YXIgaT1oLmNvdW50LGE9ZTtyZXR1cm4gaT8oKGkuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8aS5wcm9wRGVwKSYmKGE9ciksaT1pLmFwcGVuZCh0LGEpKTppPWEuZGVmKGYsIi4iLCJjb3VudCIpLGl9KCk7aWYoIm51bWJlciI9PXR5cGVvZiB2KXtpZigwPT09dilyZXR1cm59ZWxzZSByKCJpZigiLHYsIil7Iiksci5leGl0KCJ9Iik7SyYmKHM9aSgiaW5zdGFuY2VzIiksbD10Lmluc3RhbmNpbmcpO3ZhciBtPXArIi50eXBlIix5PWguZWxlbWVudHMmJlAoaC5lbGVtZW50cyk7SyYmKCJudW1iZXIiIT10eXBlb2Ygc3x8MDw9cyk/InN0cmluZyI9PXR5cGVvZiBzPyhyKCJpZigiLHMsIj4wKXsiKSxhKCkscigifWVsc2UgaWYoIixzLCI8MCl7IiksbygpLHIoIn0iKSk6YSgpOm8oKX1mdW5jdGlvbiBxKHQsZSxyLG4saSl7cmV0dXJuIGk9KGU9YigpKS5wcm9jKCJib2R5IixpKSxLJiYoZS5pbnN0YW5jaW5nPWkuZGVmKGUuc2hhcmVkLmV4dGVuc2lvbnMsIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzIikpLHQoZSxpLHIsbiksZS5jb21waWxlKCkuYm9keX1mdW5jdGlvbiBIKHQsZSxyLG4pe0wodCxlKSxOKHQsZSxyLG4uYXR0cmlidXRlcyxmdW5jdGlvbigpe3JldHVybiEwfSksaih0LGUscixuLnVuaWZvcm1zLGZ1bmN0aW9uKCl7cmV0dXJuITB9KSxWKHQsZSxlLHIpfWZ1bmN0aW9uIEcodCxlLHIsbil7ZnVuY3Rpb24gaSgpe3JldHVybiEwfXQuYmF0Y2hJZD0iYTEiLEwodCxlKSxOKHQsZSxyLG4uYXR0cmlidXRlcyxpKSxqKHQsZSxyLG4udW5pZm9ybXMsaSksVih0LGUsZSxyKX1mdW5jdGlvbiBZKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQuY29udGV4dERlcCYmb3x8dC5wcm9wRGVwfWZ1bmN0aW9uIGEodCl7cmV0dXJuIWkodCl9TCh0LGUpO3ZhciBvPXIuY29udGV4dERlcCxzPWUuZGVmKCksbD1lLmRlZigpO3Quc2hhcmVkLnByb3BzPWwsdC5iYXRjaElkPXM7dmFyIGM9dC5zY29wZSgpLHU9dC5zY29wZSgpO2UoYy5lbnRyeSwiZm9yKCIscywiPTA7IixzLCI8IiwiYTEiLCI7KysiLHMsIil7IixsLCI9IiwiYTAiLCJbIixzLCJdOyIsdSwifSIsYy5leGl0KSxyLm5lZWRzQ29udGV4dCYmTSh0LHUsci5jb250ZXh0KSxyLm5lZWRzRnJhbWVidWZmZXImJlModCx1LHIuZnJhbWVidWZmZXIpLEModCx1LHIuc3RhdGUsaSksci5wcm9maWxlJiZpKHIucHJvZmlsZSkmJkIodCx1LHIsITEsITApLG4/KE4odCxjLHIsbi5hdHRyaWJ1dGVzLGEpLE4odCx1LHIsbi5hdHRyaWJ1dGVzLGkpLGoodCxjLHIsbi51bmlmb3JtcyxhKSxqKHQsdSxyLG4udW5pZm9ybXMsaSksVih0LGMsdSxyKSk6KGU9dC5nbG9iYWwuZGVmKCJ7fSIpLG49ci5zaGFkZXIucHJvZ1Zhci5hcHBlbmQodCx1KSxsPXUuZGVmKG4sIi5pZCIpLGM9dS5kZWYoZSwiWyIsbCwiXSIpLHUodC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsbiwiLnByb2dyYW0pOyIsImlmKCEiLGMsIil7IixjLCI9IixlLCJbIixsLCJdPSIsdC5saW5rKGZ1bmN0aW9uKGUpe3JldHVybiBxKEcsdCxyLGUsMil9KSwiKCIsbiwiKTt9IixjLCIuY2FsbCh0aGlzLGEwWyIscywiXSwiLHMsIik7IikpfWZ1bmN0aW9uIFcodCxyKXtmdW5jdGlvbiBuKGUpe3ZhciBuPXIuc2hhZGVyW2VdO24mJmkuc2V0KGEuc2hhZGVyLCIuIitlLG4uYXBwZW5kKHQsaSkpfXZhciBpPXQucHJvYygic2NvcGUiLDMpO3QuYmF0Y2hJZD0iYTIiO3ZhciBhPXQuc2hhcmVkLG89YS5jdXJyZW50O00odCxpLHIuY29udGV4dCksci5mcmFtZWJ1ZmZlciYmci5mcmFtZWJ1ZmZlci5hcHBlbmQodCxpKSxJKE9iamVjdC5rZXlzKHIuc3RhdGUpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuc3RhdGVbZV0uYXBwZW5kKHQsaSk7dihuKT9uLmZvckVhY2goZnVuY3Rpb24ocixuKXtpLnNldCh0Lm5leHRbZV0sIlsiK24rIl0iLHIpfSk6aS5zZXQoYS5uZXh0LCIuIitlLG4pfSksQih0LGksciwhMCwhMCksWyJlbGVtZW50cyIsIm9mZnNldCIsImNvdW50IiwiaW5zdGFuY2VzIiwicHJpbWl0aXZlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1yLmRyYXdbZV07biYmaS5zZXQoYS5kcmF3LCIuIitlLCIiK24uYXBwZW5kKHQsaSkpfSksT2JqZWN0LmtleXMoci51bmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbihuKXtpLnNldChhLnVuaWZvcm1zLCJbIitlLmlkKG4pKyJdIixyLnVuaWZvcm1zW25dLmFwcGVuZCh0LGkpKX0pLE9iamVjdC5rZXlzKHIuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1yLmF0dHJpYnV0ZXNbZV0uYXBwZW5kKHQsaSksYT10LnNjb3BlQXR0cmliKGUpO09iamVjdC5rZXlzKG5ldyBaKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kuc2V0KGEsIi4iK3Qsblt0XSl9KX0pLG4oInZlcnQiKSxuKCJmcmFnIiksMDxPYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJihpKG8sIi5kaXJ0eT10cnVlOyIpLGkuZXhpdChvLCIuZGlydHk9dHJ1ZTsiKSksaSgiYTEoIix0LnNoYXJlZC5jb250ZXh0LCIsYTAsIix0LmJhdGNoSWQsIik7Iil9ZnVuY3Rpb24gWCh0LGUscil7dmFyIG49ZS5zdGF0aWNbcl07aWYobiYmZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhdih0KSl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLHI9MDtyPGUubGVuZ3RoOysrcilpZihVLmlzRHluYW1pYyh0W2Vbcl1dKSlyZXR1cm4hMDtyZXR1cm4hMX19KG4pKXt2YXIgaT10Lmdsb2JhbCxhPU9iamVjdC5rZXlzKG4pLG89ITEscz0hMSxsPSExLGM9dC5nbG9iYWwuZGVmKCJ7fSIpO2EuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1uW2VdO2lmKFUuaXNEeW5hbWljKHIpKSJmdW5jdGlvbiI9PXR5cGVvZiByJiYocj1uW2VdPVUudW5ib3gocikpLGU9RihyLG51bGwpLG89b3x8ZS50aGlzRGVwLGw9bHx8ZS5wcm9wRGVwLHM9c3x8ZS5jb250ZXh0RGVwO2Vsc2V7c3dpdGNoKGkoYywiLiIsZSwiPSIpLHR5cGVvZiByKXtjYXNlIm51bWJlciI6aShyKTticmVhaztjYXNlInN0cmluZyI6aSgnIicsciwnIicpO2JyZWFrO2Nhc2Uib2JqZWN0IjpBcnJheS5pc0FycmF5KHIpJiZpKCJbIixyLmpvaW4oKSwiXSIpO2JyZWFrO2RlZmF1bHQ6aSh0LmxpbmsocikpfWkoIjsiKX19KSxlLmR5bmFtaWNbcl09bmV3IFUuRHluYW1pY1ZhcmlhYmxlKDQse3RoaXNEZXA6byxjb250ZXh0RGVwOnMscHJvcERlcDpsLHJlZjpjLGFwcGVuZDpmdW5jdGlvbih0LGUpe2EuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgaT1uW3JdO1UuaXNEeW5hbWljKGkpJiYoaT10Lmludm9rZShlLGkpLGUoYywiLiIsciwiPSIsaSwiOyIpKX0pfX0pLGRlbGV0ZSBlLnN0YXRpY1tyXX19dmFyIFo9dS5SZWNvcmQsJD17YWRkOjMyNzc0LHN1YnRyYWN0OjMyNzc4LCJyZXZlcnNlIHN1YnRyYWN0IjozMjc3OX07ci5leHRfYmxlbmRfbWlubWF4JiYoJC5taW49MzI3NzUsJC5tYXg9MzI3NzYpO3ZhciBLPXIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyxRPXIud2ViZ2xfZHJhd19idWZmZXJzLHR0PXtkaXJ0eTohMCxwcm9maWxlOmcucHJvZmlsZX0sZXQ9e30sbnQ9W10saXQ9e30sYXQ9e307eSgiZGl0aGVyIiwzMDI0KSx5KCJibGVuZC5lbmFibGUiLDMwNDIpLHgoImJsZW5kLmNvbG9yIiwiYmxlbmRDb2xvciIsWzAsMCwwLDBdKSx4KCJibGVuZC5lcXVhdGlvbiIsImJsZW5kRXF1YXRpb25TZXBhcmF0ZSIsWzMyNzc0LDMyNzc0XSkseCgiYmxlbmQuZnVuYyIsImJsZW5kRnVuY1NlcGFyYXRlIixbMSwwLDEsMF0pLHkoImRlcHRoLmVuYWJsZSIsMjkyOSwhMCkseCgiZGVwdGguZnVuYyIsImRlcHRoRnVuYyIsNTEzKSx4KCJkZXB0aC5yYW5nZSIsImRlcHRoUmFuZ2UiLFswLDFdKSx4KCJkZXB0aC5tYXNrIiwiZGVwdGhNYXNrIiwhMCkseCgiY29sb3JNYXNrIiwiY29sb3JNYXNrIixbITAsITAsITAsITBdKSx5KCJjdWxsLmVuYWJsZSIsMjg4NCkseCgiY3VsbC5mYWNlIiwiY3VsbEZhY2UiLDEwMjkpLHgoImZyb250RmFjZSIsImZyb250RmFjZSIsMjMwNSkseCgibGluZVdpZHRoIiwibGluZVdpZHRoIiwxKSx5KCJwb2x5Z29uT2Zmc2V0LmVuYWJsZSIsMzI4MjMpLHgoInBvbHlnb25PZmZzZXQub2Zmc2V0IiwicG9seWdvbk9mZnNldCIsWzAsMF0pLHkoInNhbXBsZS5hbHBoYSIsMzI5MjYpLHkoInNhbXBsZS5lbmFibGUiLDMyOTI4KSx4KCJzYW1wbGUuY292ZXJhZ2UiLCJzYW1wbGVDb3ZlcmFnZSIsWzEsITFdKSx5KCJzdGVuY2lsLmVuYWJsZSIsMjk2MCkseCgic3RlbmNpbC5tYXNrIiwic3RlbmNpbE1hc2siLC0xKSx4KCJzdGVuY2lsLmZ1bmMiLCJzdGVuY2lsRnVuYyIsWzUxOSwwLC0xXSkseCgic3RlbmNpbC5vcEZyb250Iiwic3RlbmNpbE9wU2VwYXJhdGUiLFsxMDI4LDc2ODAsNzY4MCw3NjgwXSkseCgic3RlbmNpbC5vcEJhY2siLCJzdGVuY2lsT3BTZXBhcmF0ZSIsWzEwMjksNzY4MCw3NjgwLDc2ODBdKSx5KCJzY2lzc29yLmVuYWJsZSIsMzA4OSkseCgic2Npc3Nvci5ib3giLCJzY2lzc29yIixbMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0pLHgoInZpZXdwb3J0Iiwidmlld3BvcnQiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSk7dmFyIG90PXtnbDp0LGNvbnRleHQ6cCxzdHJpbmdzOmUsbmV4dDpldCxjdXJyZW50OnR0LGRyYXc6aCxlbGVtZW50czpvLGJ1ZmZlcjppLHNoYWRlcjpmLGF0dHJpYnV0ZXM6dS5zdGF0ZSx1bmlmb3JtczpjLGZyYW1lYnVmZmVyOmwsZXh0ZW5zaW9uczpyLHRpbWVyOmQsaXNCdWZmZXJBcmdzOk99LHN0PXtwcmltVHlwZXM6cnQsY29tcGFyZUZ1bmNzOmt0LGJsZW5kRnVuY3M6d3QsYmxlbmRFcXVhdGlvbnM6JCxzdGVuY2lsT3BzOlR0LGdsVHlwZXM6SixvcmllbnRhdGlvblR5cGU6QXR9O1EmJihzdC5iYWNrQnVmZmVyPVsxMDI5XSxzdC5kcmF3QnVmZmVyPWEobi5tYXhEcmF3YnVmZmVycyxmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQ/WzBdOmEodCxmdW5jdGlvbih0KXtyZXR1cm4gMzYwNjQrdH0pfSkpO3ZhciBsdD0wO3JldHVybntuZXh0OmV0LGN1cnJlbnQ6dHQscHJvY3M6ZnVuY3Rpb24oKXt2YXIgdD1iKCksZT10LnByb2MoInBvbGwiKSxyPXQucHJvYygicmVmcmVzaCIpLGk9dC5ibG9jaygpO2UoaSkscihpKTt2YXIgbyxzPXQuc2hhcmVkLGw9cy5nbCxjPXMubmV4dCx1PXMuY3VycmVudDtpKHUsIi5kaXJ0eT1mYWxzZTsiKSxTKHQsZSksUyh0LHIsbnVsbCwhMCksSyYmKG89dC5saW5rKEspKTtmb3IodmFyIGY9MDtmPG4ubWF4QXR0cmlidXRlczsrK2Ype3ZhciBoPXIuZGVmKHMuYXR0cmlidXRlcywiWyIsZiwiXSIpLHA9dC5jb25kKGgsIi5idWZmZXIiKTtwLnRoZW4obCwiLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsZiwiKTsiLGwsIi5iaW5kQnVmZmVyKCIsMzQ5NjIsIiwiLGgsIi5idWZmZXIuYnVmZmVyKTsiLGwsIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKCIsZiwiLCIsaCwiLnNpemUsIixoLCIudHlwZSwiLGgsIi5ub3JtYWxpemVkLCIsaCwiLnN0cmlkZSwiLGgsIi5vZmZzZXQpOyIpLmVsc2UobCwiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGYsIik7IixsLCIudmVydGV4QXR0cmliNGYoIixmLCIsIixoLCIueCwiLGgsIi55LCIsaCwiLnosIixoLCIudyk7IixoLCIuYnVmZmVyPW51bGw7IikscihwKSxLJiZyKG8sIi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoIixmLCIsIixoLCIuZGl2aXNvcik7Iil9cmV0dXJuIE9iamVjdC5rZXlzKGl0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBhPWl0W25dLG89aS5kZWYoYywiLiIsbikscz10LmJsb2NrKCk7cygiaWYoIixvLCIpeyIsbCwiLmVuYWJsZSgiLGEsIil9ZWxzZXsiLGwsIi5kaXNhYmxlKCIsYSwiKX0iLHUsIi4iLG4sIj0iLG8sIjsiKSxyKHMpLGUoImlmKCIsbywiIT09Iix1LCIuIixuLCIpeyIscywifSIpfSksT2JqZWN0LmtleXMoYXQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG8scyxmPWF0W25dLGg9dHRbbl0scD10LmJsb2NrKCk7cChsLCIuIixmLCIoIiksdihoKT8oZj1oLmxlbmd0aCxvPXQuZ2xvYmFsLmRlZihjLCIuIixuKSxzPXQuZ2xvYmFsLmRlZih1LCIuIixuKSxwKGEoZixmdW5jdGlvbih0KXtyZXR1cm4gbysiWyIrdCsiXSJ9KSwiKTsiLGEoZixmdW5jdGlvbih0KXtyZXR1cm4gcysiWyIrdCsiXT0iK28rIlsiK3QrIl07In0pLmpvaW4oIiIpKSxlKCJpZigiLGEoZixmdW5jdGlvbih0KXtyZXR1cm4gbysiWyIrdCsiXSE9PSIrcysiWyIrdCsiXSJ9KS5qb2luKCJ8fCIpLCIpeyIscCwifSIpKToobz1pLmRlZihjLCIuIixuKSxzPWkuZGVmKHUsIi4iLG4pLHAobywiKTsiLHUsIi4iLG4sIj0iLG8sIjsiKSxlKCJpZigiLG8sIiE9PSIscywiKXsiLHAsIn0iKSkscihwKX0pLHQuY29tcGlsZSgpfSgpLGNvbXBpbGU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1iKCk7cmV0dXJuIGEuc3RhdHM9YS5saW5rKGkpLE9iamVjdC5rZXlzKGUuc3RhdGljKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1goYSxlLHQpfSksX3QuZm9yRWFjaChmdW5jdGlvbihlKXtYKGEsdCxlKX0pLHI9QSh0LGUscixuKSxmdW5jdGlvbih0LGUpe3ZhciByPXQucHJvYygiZHJhdyIsMSk7TCh0LHIpLE0odCxyLGUuY29udGV4dCksUyh0LHIsZS5mcmFtZWJ1ZmZlciksRSh0LHIsZSksQyh0LHIsZS5zdGF0ZSksQih0LHIsZSwhMSwhMCk7dmFyIG49ZS5zaGFkZXIucHJvZ1Zhci5hcHBlbmQodCxyKTtpZihyKHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLG4sIi5wcm9ncmFtKTsiKSxlLnNoYWRlci5wcm9ncmFtKUgodCxyLGUsZS5zaGFkZXIucHJvZ3JhbSk7ZWxzZXt2YXIgaT10Lmdsb2JhbC5kZWYoInt9IiksYT1yLmRlZihuLCIuaWQiKSxvPXIuZGVmKGksIlsiLGEsIl0iKTtyKHQuY29uZChvKS50aGVuKG8sIi5jYWxsKHRoaXMsYTApOyIpLmVsc2UobywiPSIsaSwiWyIsYSwiXT0iLHQubGluayhmdW5jdGlvbihyKXtyZXR1cm4gcShILHQsZSxyLDEpfSksIigiLG4sIik7IixvLCIuY2FsbCh0aGlzLGEwKTsiKSl9MDxPYmplY3Qua2V5cyhlLnN0YXRlKS5sZW5ndGgmJnIodC5zaGFyZWQuY3VycmVudCwiLmRpcnR5PXRydWU7Iil9KGEsciksVyhhLHIpLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKCJiYXRjaCIsMik7dC5iYXRjaElkPSIwIixMKHQsbik7dmFyIGk9ITEsYT0hMDtPYmplY3Qua2V5cyhlLmNvbnRleHQpLmZvckVhY2goZnVuY3Rpb24odCl7aT1pfHxlLmNvbnRleHRbdF0ucHJvcERlcH0pLGl8fChNKHQsbixlLmNvbnRleHQpLGE9ITEpO3ZhciBvPSExO2lmKChzPWUuZnJhbWVidWZmZXIpPyhzLnByb3BEZXA/aT1vPSEwOnMuY29udGV4dERlcCYmaSYmKG89ITApLG98fFModCxuLHMpKTpTKHQsbixudWxsKSxlLnN0YXRlLnZpZXdwb3J0JiZlLnN0YXRlLnZpZXdwb3J0LnByb3BEZXAmJihpPSEwKSxFKHQsbixlKSxDKHQsbixlLnN0YXRlLGZ1bmN0aW9uKHQpe3JldHVybiFyKHQpfSksZS5wcm9maWxlJiZyKGUucHJvZmlsZSl8fEIodCxuLGUsITEsImExIiksZS5jb250ZXh0RGVwPWksZS5uZWVkc0NvbnRleHQ9YSxlLm5lZWRzRnJhbWVidWZmZXI9bywoYT1lLnNoYWRlci5wcm9nVmFyKS5jb250ZXh0RGVwJiZpfHxhLnByb3BEZXApWSh0LG4sZSxudWxsKTtlbHNlIGlmKGE9YS5hcHBlbmQodCxuKSxuKHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLGEsIi5wcm9ncmFtKTsiKSxlLnNoYWRlci5wcm9ncmFtKVkodCxuLGUsZS5zaGFkZXIucHJvZ3JhbSk7ZWxzZXt2YXIgcz10Lmdsb2JhbC5kZWYoInt9IiksbD0obz1uLmRlZihhLCIuaWQiKSxuLmRlZihzLCJbIixvLCJdIikpO24odC5jb25kKGwpLnRoZW4obCwiLmNhbGwodGhpcyxhMCxhMSk7IikuZWxzZShsLCI9IixzLCJbIixvLCJdPSIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBxKFksdCxlLHIsMil9KSwiKCIsYSwiKTsiLGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmbih0LnNoYXJlZC5jdXJyZW50LCIuZGlydHk9dHJ1ZTsiKX0oYSxyKSxhLmNvbXBpbGUoKX19fWZ1bmN0aW9uIE4odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX12YXIgaj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPTA7bjxyLmxlbmd0aDsrK24pdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fSxWPTAsVT17RHluYW1pY1ZhcmlhYmxlOnQsZGVmaW5lOmZ1bmN0aW9uKHIsbil7cmV0dXJuIG5ldyB0KHIsZShuKyIiKSl9LGlzRHluYW1pYzpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIWUuX3JlZ2xUeXBlfHxlIGluc3RhbmNlb2YgdH0sdW5ib3g6ZnVuY3Rpb24oZSxyKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9uZXcgdCgwLGUpOmV9LGFjY2Vzc29yOmV9LHE9e25leHQ6ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4gc2V0VGltZW91dCh0LDE2KX0sY2FuY2VsOiJmdW5jdGlvbiI9PXR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gY2FuY2VsQW5pbWF0aW9uRnJhbWUodCl9OmNsZWFyVGltZW91dH0sSD0idW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxHPXMoKTtHLnplcm89cygpO3ZhciBZPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MTtlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmKHI9dC5nZXRQYXJhbWV0ZXIoMzQwNDcpKTt2YXIgbj0xLGk9MTtlLndlYmdsX2RyYXdfYnVmZmVycyYmKG49dC5nZXRQYXJhbWV0ZXIoMzQ4NTIpLGk9dC5nZXRQYXJhbWV0ZXIoMzYwNjMpKTt2YXIgYT0hIWUub2VzX3RleHR1cmVfZmxvYXQ7aWYoYSl7YT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKDM1NTMsYSksdC50ZXhJbWFnZTJEKDM1NTMsMCw2NDA4LDEsMSwwLDY0MDgsNTEyNixudWxsKTt2YXIgbz10LmNyZWF0ZUZyYW1lYnVmZmVyKCk7aWYodC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbyksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNTUzLGEsMCksdC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpLDM2MDUzIT09dC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKSlhPSExO2Vsc2V7dC52aWV3cG9ydCgwLDAsMSwxKSx0LmNsZWFyQ29sb3IoMSwwLDAsMSksdC5jbGVhcigxNjM4NCk7dmFyIHM9Ry5hbGxvY1R5cGUoNTEyNiw0KTt0LnJlYWRQaXhlbHMoMCwwLDEsMSw2NDA4LDUxMjYscyksdC5nZXRFcnJvcigpP2E9ITE6KHQuZGVsZXRlRnJhbWVidWZmZXIobyksdC5kZWxldGVUZXh0dXJlKGEpLGE9MT09PXNbMF0pLEcuZnJlZVR5cGUocyl9fXJldHVybiBzPSEwLCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pfHwvRWRnZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl8fChzPXQuY3JlYXRlVGV4dHVyZSgpLG89Ry5hbGxvY1R5cGUoNTEyMSwzNiksdC5hY3RpdmVUZXh0dXJlKDMzOTg0KSx0LmJpbmRUZXh0dXJlKDM0MDY3LHMpLHQudGV4SW1hZ2UyRCgzNDA2OSwwLDY0MDgsMywzLDAsNjQwOCw1MTIxLG8pLEcuZnJlZVR5cGUobyksdC5iaW5kVGV4dHVyZSgzNDA2NyxudWxsKSx0LmRlbGV0ZVRleHR1cmUocykscz0hdC5nZXRFcnJvcigpKSx7Y29sb3JCaXRzOlt0LmdldFBhcmFtZXRlcigzNDEwKSx0LmdldFBhcmFtZXRlcigzNDExKSx0LmdldFBhcmFtZXRlcigzNDEyKSx0LmdldFBhcmFtZXRlcigzNDEzKV0sZGVwdGhCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTQpLHN0ZW5jaWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTUpLHN1YnBpeGVsQml0czp0LmdldFBhcmFtZXRlcigzNDA4KSxleHRlbnNpb25zOk9iamVjdC5rZXlzKGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hIWVbdF19KSxtYXhBbmlzb3Ryb3BpYzpyLG1heERyYXdidWZmZXJzOm4sbWF4Q29sb3JBdHRhY2htZW50czppLHBvaW50U2l6ZURpbXM6dC5nZXRQYXJhbWV0ZXIoMzM5MDEpLGxpbmVXaWR0aERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM5MDIpLG1heFZpZXdwb3J0RGltczp0LmdldFBhcmFtZXRlcigzMzg2KSxtYXhDb21iaW5lZFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNTY2MSksbWF4Q3ViZU1hcFNpemU6dC5nZXRQYXJhbWV0ZXIoMzQwNzYpLG1heFJlbmRlcmJ1ZmZlclNpemU6dC5nZXRQYXJhbWV0ZXIoMzQwMjQpLG1heFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNDkzMCksbWF4VGV4dHVyZVNpemU6dC5nZXRQYXJhbWV0ZXIoMzM3OSksbWF4QXR0cmlidXRlczp0LmdldFBhcmFtZXRlcigzNDkyMSksbWF4VmVydGV4VW5pZm9ybXM6dC5nZXRQYXJhbWV0ZXIoMzYzNDcpLG1heFZlcnRleFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNTY2MCksbWF4VmFyeWluZ1ZlY3RvcnM6dC5nZXRQYXJhbWV0ZXIoMzYzNDgpLG1heEZyYWdtZW50VW5pZm9ybXM6dC5nZXRQYXJhbWV0ZXIoMzYzNDkpLGdsc2w6dC5nZXRQYXJhbWV0ZXIoMzU3MjQpLHJlbmRlcmVyOnQuZ2V0UGFyYW1ldGVyKDc5MzcpLHZlbmRvcjp0LmdldFBhcmFtZXRlcig3OTM2KSx2ZXJzaW9uOnQuZ2V0UGFyYW1ldGVyKDc5MzgpLHJlYWRGbG9hdDphLG5wb3RUZXh0dXJlQ3ViZTpzfX0sVz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHx0IGluc3RhbmNlb2YgSW50OEFycmF5fHx0IGluc3RhbmNlb2YgSW50MTZBcnJheXx8dCBpbnN0YW5jZW9mIEludDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheX0sWD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LFo9e3NoYXBlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0Lmxlbmd0aDt0PXRbMF0pZS5wdXNoKHQubGVuZ3RoKTtyZXR1cm4gZX0sZmxhdHRlbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xO2lmKGUubGVuZ3RoKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKWkqPWVbYV07ZWxzZSBpPTA7c3dpdGNoKHI9bnx8Ry5hbGxvY1R5cGUocixpKSxlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpmb3Iobj1lWzBdLGU9MDtlPG47KytlKXJbZV09dFtlXTticmVhaztjYXNlIDI6Zm9yKG49ZVswXSxlPWVbMV0sYT1pPTA7YTxuOysrYSlmb3IodmFyIG89dFthXSxzPTA7czxlOysrcylyW2krK109b1tzXTticmVhaztjYXNlIDM6Yyh0LGVbMF0sZVsxXSxlWzJdLHIsMCk7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gdChlLHIsbixpLGEpe2Zvcih2YXIgbz0xLHM9bisxO3M8ci5sZW5ndGg7KytzKW8qPXJbc107dmFyIGw9cltuXTtpZig0PT1yLmxlbmd0aC1uKXt2YXIgdT1yW24rMV0sZj1yW24rMl07Zm9yKHI9cltuKzNdLHM9MDtzPGw7KytzKWMoZVtzXSx1LGYscixpLGEpLGErPW99ZWxzZSBmb3Iocz0wO3M8bDsrK3MpdChlW3NdLHIsbisxLGksYSksYSs9b30odCxlLDAsciwwKX1yZXR1cm4gcn19LCQ9eyJbb2JqZWN0IEludDhBcnJheV0iOjUxMjAsIltvYmplY3QgSW50MTZBcnJheV0iOjUxMjIsIltvYmplY3QgSW50MzJBcnJheV0iOjUxMjQsIltvYmplY3QgVWludDhBcnJheV0iOjUxMjEsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQxNkFycmF5XSI6NTEyMywiW29iamVjdCBVaW50MzJBcnJheV0iOjUxMjUsIltvYmplY3QgRmxvYXQzMkFycmF5XSI6NTEyNiwiW29iamVjdCBGbG9hdDY0QXJyYXldIjo1MTIxLCJbb2JqZWN0IEFycmF5QnVmZmVyXSI6NTEyMX0sSj17aW50ODo1MTIwLGludDE2OjUxMjIsaW50MzI6NTEyNCx1aW50ODo1MTIxLHVpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LGZsb2F0OjUxMjYsZmxvYXQzMjo1MTI2fSxLPXtkeW5hbWljOjM1MDQ4LHN0cmVhbTozNTA0MCxzdGF0aWM6MzUwNDR9LFE9Wi5mbGF0dGVuLHR0PVouc2hhcGUsZXQ9W107ZXRbNTEyMF09MSxldFs1MTIyXT0yLGV0WzUxMjRdPTQsZXRbNTEyMV09MSxldFs1MTIzXT0yLGV0WzUxMjVdPTQsZXRbNTEyNl09NDt2YXIgcnQ9e3BvaW50czowLHBvaW50OjAsbGluZXM6MSxsaW5lOjEsdHJpYW5nbGVzOjQsdHJpYW5nbGU6NCwibGluZSBsb29wIjoyLCJsaW5lIHN0cmlwIjozLCJ0cmlhbmdsZSBzdHJpcCI6NSwidHJpYW5nbGUgZmFuIjo2fSxudD1uZXcgRmxvYXQzMkFycmF5KDEpLGl0PW5ldyBVaW50MzJBcnJheShudC5idWZmZXIpLGF0PVs5OTg0LDk5ODYsOTk4NSw5OTg3XSxvdD1bMCw2NDA5LDY0MTAsNjQwNyw2NDA4XSxzdD17fTtzdFs2NDA5XT1zdFs2NDA2XT1zdFs2NDAyXT0xLHN0WzM0MDQxXT1zdFs2NDEwXT0yLHN0WzY0MDddPXN0WzM1OTA0XT0zLHN0WzY0MDhdPXN0WzM1OTA2XT00O3ZhciBsdD1tKCJIVE1MQ2FudmFzRWxlbWVudCIpLGN0PW0oIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIpLHV0PW0oIkltYWdlQml0bWFwIiksZnQ9bSgiSFRNTEltYWdlRWxlbWVudCIpLGh0PW0oIkhUTUxWaWRlb0VsZW1lbnQiKSxwdD1PYmplY3Qua2V5cygkKS5jb25jYXQoW2x0LGN0LHV0LGZ0LGh0XSksZHQ9W107ZHRbNTEyMV09MSxkdFs1MTI2XT00LGR0WzM2MTkzXT0yLGR0WzUxMjNdPTIsZHRbNTEyNV09NDt2YXIgZ3Q9W107Z3RbMzI4NTRdPTIsZ3RbMzI4NTVdPTIsZ3RbMzYxOTRdPTIsZ3RbMzQwNDFdPTQsZ3RbMzM3NzZdPS41LGd0WzMzNzc3XT0uNSxndFszMzc3OF09MSxndFszMzc3OV09MSxndFszNTk4Nl09LjUsZ3RbMzU5ODddPTEsZ3RbMzQ3OThdPTEsZ3RbMzU4NDBdPS41LGd0WzM1ODQxXT0uMjUsZ3RbMzU4NDJdPS41LGd0WzM1ODQzXT0uMjUsZ3RbMzYxOTZdPS41O3ZhciB2dD1bXTt2dFszMjg1NF09Mix2dFszMjg1NV09Mix2dFszNjE5NF09Mix2dFszMzE4OV09Mix2dFszNjE2OF09MSx2dFszNDA0MV09NCx2dFszNTkwN109NCx2dFszNDgzNl09MTYsdnRbMzQ4NDJdPTgsdnRbMzQ4NDNdPTY7dmFyIG10PWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt0aGlzLmlkPWMrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy5yZW5kZXJidWZmZXI9dCx0aGlzLmZvcm1hdD0zMjg1NCx0aGlzLmhlaWdodD10aGlzLndpZHRoPTAsaS5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLnJlbmRlcmJ1ZmZlcjt0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksdC5kZWxldGVSZW5kZXJidWZmZXIociksZS5yZW5kZXJidWZmZXI9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIHVbZS5pZF0sbi5yZW5kZXJidWZmZXJDb3VudC0tfXZhciBzPXtyZ2JhNDozMjg1NCxyZ2I1NjU6MzYxOTQsInJnYjUgYTEiOjMyODU1LGRlcHRoOjMzMTg5LHN0ZW5jaWw6MzYxNjgsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfTtlLmV4dF9zcmdiJiYocy5zcmdiYT0zNTkwNyksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJihzLnJnYmExNmY9MzQ4NDIscy5yZ2IxNmY9MzQ4NDMpLGUud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0JiYocy5yZ2JhMzJmPTM0ODM2KTt2YXIgbD1bXTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbc1t0XV09dH0pO3ZhciBjPTAsdT17fTtyZXR1cm4gYS5wcm90b3R5cGUuZGVjUmVmPWZ1bmN0aW9uKCl7MD49LS10aGlzLnJlZkNvdW50JiZvKHRoaXMpfSxpLnByb2ZpbGUmJihuLmdldFRvdGFsUmVuZGVyYnVmZmVyU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24oZSl7dCs9dVtlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUscil7dmFyIG49MCxhPTAsdT0zMjg1NDtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmU/KCJzaGFwZSJpbiBlPyhuPTB8KGE9ZS5zaGFwZSlbMF0sYT0wfGFbMV0pOigicmFkaXVzImluIGUmJihuPWE9MHxlLnJhZGl1cyksIndpZHRoImluIGUmJihuPTB8ZS53aWR0aCksImhlaWdodCJpbiBlJiYoYT0wfGUuaGVpZ2h0KSksImZvcm1hdCJpbiBlJiYodT1zW2UuZm9ybWF0XSkpOiJudW1iZXIiPT10eXBlb2YgZT8obj0wfGUsYT0ibnVtYmVyIj09dHlwZW9mIHI/MHxyOm4pOmV8fChuPWE9MSksbiE9PWMud2lkdGh8fGEhPT1jLmhlaWdodHx8dSE9PWMuZm9ybWF0KXJldHVybiBvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLGMuZm9ybWF0PXUsdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGMucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsdSxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksby5mb3JtYXQ9bFtjLmZvcm1hdF0sb312YXIgYz1uZXcgYSh0LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtyZXR1cm4gdVtjLmlkXT1jLG4ucmVuZGVyYnVmZmVyQ291bnQrKyxvKGUsciksby5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wfGUsYT0wfHJ8fG47cmV0dXJuIG49PT1jLndpZHRoJiZhPT09Yy5oZWlnaHQ/bzooby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxjLmZvcm1hdCxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksbyl9LG8uX3JlZ2xUeXBlPSJyZW5kZXJidWZmZXIiLG8uX3JlbmRlcmJ1ZmZlcj1jLGkucHJvZmlsZSYmKG8uc3RhdHM9Yy5zdGF0cyksby5kZXN0cm95PWZ1bmN0aW9uKCl7Yy5kZWNSZWYoKX0sb30sY2xlYXI6ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2gobyl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsZS5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxlLmZvcm1hdCxlLndpZHRoLGUuaGVpZ2h0KX0pLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX19fSx5dD1bXTt5dFs2NDA4XT00LHl0WzY0MDddPTM7dmFyIHh0PVtdO3h0WzUxMjFdPTEseHRbNTEyNl09NCx4dFszNjE5M109Mjt2YXIgYnQ9WyJ4IiwieSIsInoiLCJ3Il0sX3Q9ImJsZW5kLmZ1bmMgYmxlbmQuZXF1YXRpb24gc3RlbmNpbC5mdW5jIHN0ZW5jaWwub3BGcm9udCBzdGVuY2lsLm9wQmFjayBzYW1wbGUuY292ZXJhZ2Ugdmlld3BvcnQgc2Npc3Nvci5ib3ggcG9seWdvbk9mZnNldC5vZmZzZXQiLnNwbGl0KCIgIiksd3Q9ezA6MCwxOjEsemVybzowLG9uZToxLCJzcmMgY29sb3IiOjc2OCwib25lIG1pbnVzIHNyYyBjb2xvciI6NzY5LCJzcmMgYWxwaGEiOjc3MCwib25lIG1pbnVzIHNyYyBhbHBoYSI6NzcxLCJkc3QgY29sb3IiOjc3NCwib25lIG1pbnVzIGRzdCBjb2xvciI6Nzc1LCJkc3QgYWxwaGEiOjc3Miwib25lIG1pbnVzIGRzdCBhbHBoYSI6NzczLCJjb25zdGFudCBjb2xvciI6MzI3NjksIm9uZSBtaW51cyBjb25zdGFudCBjb2xvciI6MzI3NzAsImNvbnN0YW50IGFscGhhIjozMjc3MSwib25lIG1pbnVzIGNvbnN0YW50IGFscGhhIjozMjc3Miwic3JjIGFscGhhIHNhdHVyYXRlIjo3NzZ9LGt0PXtuZXZlcjo1MTIsbGVzczo1MTMsIjwiOjUxMyxlcXVhbDo1MTQsIj0iOjUxNCwiPT0iOjUxNCwiPT09Ijo1MTQsbGVxdWFsOjUxNSwiPD0iOjUxNSxncmVhdGVyOjUxNiwiPiI6NTE2LG5vdGVxdWFsOjUxNywiIT0iOjUxNywiIT09Ijo1MTcsZ2VxdWFsOjUxOCwiPj0iOjUxOCxhbHdheXM6NTE5fSxUdD17MDowLHplcm86MCxrZWVwOjc2ODAscmVwbGFjZTo3NjgxLGluY3JlbWVudDo3NjgyLGRlY3JlbWVudDo3NjgzLCJpbmNyZW1lbnQgd3JhcCI6MzQwNTUsImRlY3JlbWVudCB3cmFwIjozNDA1NixpbnZlcnQ6NTM4Nn0sQXQ9e2N3OjIzMDQsY2N3OjIzMDV9LE10PW5ldyBEKCExLCExLCExLGZ1bmN0aW9uKCl7fSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtpZigwPT09Wi5sZW5ndGgpdyYmdy51cGRhdGUoKSxRPW51bGw7ZWxzZXtRPXEubmV4dChlKSxmKCk7Zm9yKHZhciB0PVoubGVuZ3RoLTE7MDw9dDstLXQpe3ZhciByPVpbdF07ciYmcih6LG51bGwsMCl9di5mbHVzaCgpLHcmJncudXBkYXRlKCl9fWZ1bmN0aW9uIHIoKXshUSYmMDxaLmxlbmd0aCYmKFE9cS5uZXh0KGUpKX1mdW5jdGlvbiBuKCl7USYmKHEuY2FuY2VsKGUpLFE9bnVsbCl9ZnVuY3Rpb24gYSh0KXt0LnByZXZlbnREZWZhdWx0KCksbigpLCQuZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX1mdW5jdGlvbiBvKHQpe3YuZ2V0RXJyb3IoKSx5LnJlc3RvcmUoKSxQLnJlc3RvcmUoKSxJLnJlc3RvcmUoKSxSLnJlc3RvcmUoKSxGLnJlc3RvcmUoKSxWLnJlc3RvcmUoKSx3JiZ3LnJlc3RvcmUoKSxHLnByb2NzLnJlZnJlc2goKSxyKCksSi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfWZ1bmN0aW9uIHModCl7ZnVuY3Rpb24gZSh0KXt2YXIgZT17fSxyPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl07VS5pc0R5bmFtaWMoaSk/cltuXT1VLnVuYm94KGksbik6ZVtuXT1pfSkse2R5bmFtaWM6cixzdGF0aWM6ZX19dmFyIHI9ZSh0LmNvbnRleHR8fHt9KSxuPWUodC51bmlmb3Jtc3x8e30pLGk9ZSh0LmF0dHJpYnV0ZXN8fHt9KSxhPWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtpZih0IGluIHIpe3ZhciBlPXJbdF07ZGVsZXRlIHJbdF0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXtyW3QrIi4iK25dPWVbbl19KX19dmFyIHI9aih7fSx0KTtyZXR1cm4gZGVsZXRlIHIudW5pZm9ybXMsZGVsZXRlIHIuYXR0cmlidXRlcyxkZWxldGUgci5jb250ZXh0LCJzdGVuY2lsImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoImJsZW5kIiksZSgiZGVwdGgiKSxlKCJjdWxsIiksZSgic3RlbmNpbCIpLGUoInBvbHlnb25PZmZzZXQiKSxlKCJzY2lzc29yIiksZSgic2FtcGxlIikscn0odCkpO3Q9e2dwdVRpbWU6MCxjcHVUaW1lOjAsY291bnQ6MH07dmFyIG89KHI9Ry5jb21waWxlKGEsaSxuLHIsdCkpLmRyYXcscz1yLmJhdGNoLGw9ci5zY29wZSxjPVtdO3JldHVybiBqKGZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIGwuY2FsbCh0aGlzLG51bGwsdCwwKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSlpZigibnVtYmVyIj09dHlwZW9mIHQpZm9yKHI9MDtyPHQ7KytyKWwuY2FsbCh0aGlzLG51bGwsZSxyKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBsLmNhbGwodGhpcyx0LGUsMCk7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcilsLmNhbGwodGhpcyx0W3JdLGUscil9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKDA8dClyZXR1cm4gcy5jYWxsKHRoaXMsZnVuY3Rpb24odCl7Zm9yKDtjLmxlbmd0aDx0OyljLnB1c2gobnVsbCk7cmV0dXJuIGN9KDB8dCksMHx0KX1lbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBvLmNhbGwodGhpcyx0KTtpZih0Lmxlbmd0aClyZXR1cm4gcy5jYWxsKHRoaXMsdCx0Lmxlbmd0aCl9fSx7c3RhdHM6dH0pfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj0wO0cucHJvY3MucG9sbCgpO3ZhciBuPWUuY29sb3I7biYmKHYuY2xlYXJDb2xvcigrblswXXx8MCwrblsxXXx8MCwrblsyXXx8MCwrblszXXx8MCkscnw9MTYzODQpLCJkZXB0aCJpbiBlJiYodi5jbGVhckRlcHRoKCtlLmRlcHRoKSxyfD0yNTYpLCJzdGVuY2lsImluIGUmJih2LmNsZWFyU3RlbmNpbCgwfGUuc3RlbmNpbCkscnw9MTAyNCksdi5jbGVhcihyKX1mdW5jdGlvbiBjKHQpe3JldHVybiBaLnB1c2godCkscigpLHtjYW5jZWw6ZnVuY3Rpb24oKXt2YXIgZT1OKFosdCk7WltlXT1mdW5jdGlvbiB0KCl7dmFyIGU9TihaLHQpO1pbZV09WltaLmxlbmd0aC0xXSwtLVoubGVuZ3RoLDA+PVoubGVuZ3RoJiZuKCl9fX19ZnVuY3Rpb24gdSgpe3ZhciB0PVcudmlld3BvcnQsZT1XLnNjaXNzb3JfYm94O3RbMF09dFsxXT1lWzBdPWVbMV09MCx6LnZpZXdwb3J0V2lkdGg9ei5mcmFtZWJ1ZmZlcldpZHRoPXouZHJhd2luZ0J1ZmZlcldpZHRoPXRbMl09ZVsyXT12LmRyYXdpbmdCdWZmZXJXaWR0aCx6LnZpZXdwb3J0SGVpZ2h0PXouZnJhbWVidWZmZXJIZWlnaHQ9ei5kcmF3aW5nQnVmZmVySGVpZ2h0PXRbM109ZVszXT12LmRyYXdpbmdCdWZmZXJIZWlnaHR9ZnVuY3Rpb24gZigpe3oudGljays9MSx6LnRpbWU9ZygpLHUoKSxHLnByb2NzLnBvbGwoKX1mdW5jdGlvbiBoKCl7dSgpLEcucHJvY3MucmVmcmVzaCgpLHcmJncudXBkYXRlKCl9ZnVuY3Rpb24gZygpe3JldHVybihIKCktaykvMWUzfWlmKCEodD1pKHQpKSlyZXR1cm4gbnVsbDt2YXIgdj10LmdsLG09di5nZXRDb250ZXh0QXR0cmlidXRlcygpO3YuaXNDb250ZXh0TG9zdCgpO3ZhciB5PWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlKXt2YXIgcjtlPWUudG9Mb3dlckNhc2UoKTt0cnl7cj1uW2VdPXQuZ2V0RXh0ZW5zaW9uKGUpfWNhdGNoKHQpe31yZXR1cm4hIXJ9Zm9yKHZhciBuPXt9LGk9MDtpPGUuZXh0ZW5zaW9ucy5sZW5ndGg7KytpKXt2YXIgYT1lLmV4dGVuc2lvbnNbaV07aWYoIXIoYSkpcmV0dXJuIGUub25EZXN0cm95KCksZS5vbkRvbmUoJyInK2ErJyIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgV2ViR0wgY29udGV4dCwgdHJ5IHVwZ3JhZGluZyB5b3VyIHN5c3RlbSBvciBhIGRpZmZlcmVudCBicm93c2VyJyksbnVsbH1yZXR1cm4gZS5vcHRpb25hbEV4dGVuc2lvbnMuZm9yRWFjaChyKSx7ZXh0ZW5zaW9uczpuLHJlc3RvcmU6ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG5bdF0mJiFyKHQpKXRocm93IEVycm9yKCIocmVnbCk6IGVycm9yIHJlc3RvcmluZyBleHRlbnNpb24gIit0KX0pfX19KHYsdCk7aWYoIXkpcmV0dXJuIG51bGw7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgdD17IiI6MH0sZT1bIiJdO3JldHVybntpZDpmdW5jdGlvbihyKXt2YXIgbj10W3JdO3JldHVybiBufHwobj10W3JdPWUubGVuZ3RoLGUucHVzaChyKSxuKX0sc3RyOmZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfX19KCksYj17YnVmZmVyQ291bnQ6MCxlbGVtZW50c0NvdW50OjAsZnJhbWVidWZmZXJDb3VudDowLHNoYWRlckNvdW50OjAsdGV4dHVyZUNvdW50OjAsY3ViZUNvdW50OjAscmVuZGVyYnVmZmVyQ291bnQ6MCxtYXhUZXh0dXJlVW5pdHM6MH0sXz15LmV4dGVuc2lvbnMsdz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLmVuZFF1ZXJ5SW5kZXg9dGhpcy5zdGFydFF1ZXJ5SW5kZXg9LTEsdGhpcy5zdW09MCx0aGlzLnN0YXRzPW51bGx9ZnVuY3Rpb24gbih0LGUsbil7dmFyIGk9by5wb3AoKXx8bmV3IHI7aS5zdGFydFF1ZXJ5SW5kZXg9dCxpLmVuZFF1ZXJ5SW5kZXg9ZSxpLnN1bT0wLGkuc3RhdHM9bixzLnB1c2goaSl9aWYoIWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5KXJldHVybiBudWxsO3ZhciBpPVtdLGE9W10sbz1bXSxzPVtdLGw9W10sYz1bXTtyZXR1cm57YmVnaW5RdWVyeTpmdW5jdGlvbih0KXt2YXIgcj1pLnBvcCgpfHxlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5jcmVhdGVRdWVyeUVYVCgpO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmJlZ2luUXVlcnlFWFQoMzUwMDcsciksYS5wdXNoKHIpLG4oYS5sZW5ndGgtMSxhLmxlbmd0aCx0KX0sZW5kUXVlcnk6ZnVuY3Rpb24oKXtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5lbmRRdWVyeUVYVCgzNTAwNyl9LHB1c2hTY29wZVN0YXRzOm4sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQscjtpZigwIT09KHQ9YS5sZW5ndGgpKXtjLmxlbmd0aD1NYXRoLm1heChjLmxlbmd0aCx0KzEpLGwubGVuZ3RoPU1hdGgubWF4KGwubGVuZ3RoLHQrMSksbFswXT0wO3ZhciBuPWNbMF09MDtmb3Iocj10PTA7cjxhLmxlbmd0aDsrK3Ipe3ZhciB1PWFbcl07ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQodSwzNDkxOSk/KG4rPWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTgpLGkucHVzaCh1KSk6YVt0KytdPXUsbFtyKzFdPW4sY1tyKzFdPXR9Zm9yKGEubGVuZ3RoPXQscj10PTA7cjxzLmxlbmd0aDsrK3Ipe3ZhciBmPShuPXNbcl0pLnN0YXJ0UXVlcnlJbmRleDt1PW4uZW5kUXVlcnlJbmRleCxuLnN1bSs9bFt1XS1sW2ZdLGY9Y1tmXSwodT1jW3VdKT09PWY/KG4uc3RhdHMuZ3B1VGltZSs9bi5zdW0vMWU2LG8ucHVzaChuKSk6KG4uc3RhcnRRdWVyeUluZGV4PWYsbi5lbmRRdWVyeUluZGV4PXUsc1t0KytdPW4pfXMubGVuZ3RoPXR9fSxnZXROdW1QZW5kaW5nUXVlcmllczpmdW5jdGlvbigpe3JldHVybiBhLmxlbmd0aH0sY2xlYXI6ZnVuY3Rpb24oKXtpLnB1c2guYXBwbHkoaSxhKTtmb3IodmFyIHQ9MDt0PGkubGVuZ3RoO3QrKyllLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5kZWxldGVRdWVyeUVYVChpW3RdKTthLmxlbmd0aD0wLGkubGVuZ3RoPTB9LHJlc3RvcmU6ZnVuY3Rpb24oKXthLmxlbmd0aD0wLGkubGVuZ3RoPTB9fX0oMCxfKSxrPUgoKSxDPXYuZHJhd2luZ0J1ZmZlcldpZHRoLEw9di5kcmF3aW5nQnVmZmVySGVpZ2h0LHo9e3RpY2s6MCx0aW1lOjAsdmlld3BvcnRXaWR0aDpDLHZpZXdwb3J0SGVpZ2h0OkwsZnJhbWVidWZmZXJXaWR0aDpDLGZyYW1lYnVmZmVySGVpZ2h0OkwsZHJhd2luZ0J1ZmZlcldpZHRoOkMsZHJhd2luZ0J1ZmZlckhlaWdodDpMLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfSxPPVkodixfKSxJPShDPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih0PXIubWF4QXR0cmlidXRlcyxlPUFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09bmV3IE07cmV0dXJue1JlY29yZDpNLHNjb3BlOnt9LHN0YXRlOmV9fSh2LF8sTykscCh2LGIsdCxDKSksRD1kKHYsXyxJLGIpLFA9Uyh2LHgsYix0KSxSPVQodixfLE8sZnVuY3Rpb24oKXtHLnByb2NzLnBvbGwoKX0seixiLHQpLEY9bXQodixfLDAsYix0KSxWPUEodixfLE8sUixGLGIpLEc9Qih2LHgsXyxPLEksRCwwLFYse30sQyxQLHtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0seix3LHQpLFc9KHg9RSh2LFYsRy5wcm9jcy5wb2xsLHopLEcubmV4dCksWD12LmNhbnZhcyxaPVtdLCQ9W10sSj1bXSxLPVt0Lm9uRGVzdHJveV0sUT1udWxsO1gmJihYLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGEsITEpLFguYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLG8sITEpKTt2YXIgdHQ9Vi5zZXRGQk89cyh7ZnJhbWVidWZmZXI6VS5kZWZpbmUuY2FsbChudWxsLDEsImZyYW1lYnVmZmVyIil9KTtyZXR1cm4gaCgpLG09aihzLHtjbGVhcjpmdW5jdGlvbih0KXtpZigiZnJhbWVidWZmZXIiaW4gdClpZih0LmZyYW1lYnVmZmVyJiYiZnJhbWVidWZmZXJDdWJlIj09PXQuZnJhbWVidWZmZXJfcmVnbFR5cGUpZm9yKHZhciBlPTA7Nj5lOysrZSl0dChqKHtmcmFtZWJ1ZmZlcjp0LmZyYW1lYnVmZmVyLmZhY2VzW2VdfSx0KSxsKTtlbHNlIHR0KHQsbCk7ZWxzZSBsKDAsdCl9LHByb3A6VS5kZWZpbmUuYmluZChudWxsLDEpLGNvbnRleHQ6VS5kZWZpbmUuYmluZChudWxsLDIpLHRoaXM6VS5kZWZpbmUuYmluZChudWxsLDMpLGRyYXc6cyh7fSksYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiBJLmNyZWF0ZSh0LDM0OTYyLCExLCExKX0sZWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuIEQuY3JlYXRlKHQsITEpfSx0ZXh0dXJlOlIuY3JlYXRlMkQsY3ViZTpSLmNyZWF0ZUN1YmUscmVuZGVyYnVmZmVyOkYuY3JlYXRlLGZyYW1lYnVmZmVyOlYuY3JlYXRlLGZyYW1lYnVmZmVyQ3ViZTpWLmNyZWF0ZUN1YmUsYXR0cmlidXRlczptLGZyYW1lOmMsb246ZnVuY3Rpb24odCxlKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSJmcmFtZSI6cmV0dXJuIGMoZSk7Y2FzZSJsb3N0IjpyPSQ7YnJlYWs7Y2FzZSJyZXN0b3JlIjpyPUo7YnJlYWs7Y2FzZSJkZXN0cm95IjpyPUt9cmV0dXJuIHIucHVzaChlKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpaWYoclt0XT09PWUpe3JbdF09cltyLmxlbmd0aC0xXSxyLnBvcCgpO2JyZWFrfX19fSxsaW1pdHM6TyxoYXNFeHRlbnNpb246ZnVuY3Rpb24odCl7cmV0dXJuIDA8PU8uZXh0ZW5zaW9ucy5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSl9LHJlYWQ6eCxkZXN0cm95OmZ1bmN0aW9uKCl7Wi5sZW5ndGg9MCxuKCksWCYmKFgucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsYSksWC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsbykpLFAuY2xlYXIoKSxWLmNsZWFyKCksRi5jbGVhcigpLFIuY2xlYXIoKSxELmNsZWFyKCksSS5jbGVhcigpLHcmJncuY2xlYXIoKSxLLmZvckVhY2goZnVuY3Rpb24odCl7dCgpfSl9LF9nbDp2LF9yZWZyZXNoOmgscG9sbDpmdW5jdGlvbigpe2YoKSx3JiZ3LnVwZGF0ZSgpfSxub3c6ZyxzdGF0czpifSksdC5vbkRvbmUobnVsbCxtKSxtfX0sIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/ZS5leHBvcnRzPWkoKTpuLmNyZWF0ZVJFR0w9aSgpfSx7fV0sNDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9IiI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGEgc3RyaW5nIik7aWYoMT09PWUpcmV0dXJuIHQ7aWYoMj09PWUpcmV0dXJuIHQrdDt2YXIgcj10Lmxlbmd0aCplO2lmKG4hPT10fHwidW5kZWZpbmVkIj09dHlwZW9mIG4pbj10LGk9IiI7ZWxzZSBpZihpLmxlbmd0aD49cilyZXR1cm4gaS5zdWJzdHIoMCxyKTtmb3IoO3I+aS5sZW5ndGgmJmU+MTspMSZlJiYoaSs9dCksZT4+PTEsdCs9dDtyZXR1cm4gaT0oaSs9dCkuc3Vic3RyKDAscil9fSx7fV0sNDg4OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2UuZXhwb3J0cz10LnBlcmZvcm1hbmNlJiZ0LnBlcmZvcm1hbmNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDQ4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9dFt0Lmxlbmd0aC0xXSxuPWUsaT1lLTI7aT49MDstLWkpe3ZhciBhPXIsbz10W2ldLHM9KHI9YStvKS1hLGw9by1zO2wmJih0Wy0tbl09cixyPWwpfWZvcih2YXIgYz0wLGk9bjtpPGU7KytpKXt2YXIgYT10W2ldLG89cixzPShyPWErbyktYSxsPW8tcztsJiYodFtjKytdPWwpfXJldHVybiB0W2MrK109cix0Lmxlbmd0aD1jLHR9fSx7fV0sNDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKSxvPXQoInJvYnVzdC1jb21wcmVzcyIpLHM9NjtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIik7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goWyJzY2FsZSgiLGMobCh0LHIpKSwiLCIsKG49ciwxJm4/Ii0iOiIiKSx0WzBdW3JdLCIpIl0uam9pbigiIikpO3JldHVybiBmdW5jdGlvbiB0KGUpe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gZVswXTtpZigyPT09ZS5sZW5ndGgpcmV0dXJuWyJzdW0oIixlWzBdLCIsIixlWzFdLCIpIl0uam9pbigiIik7dmFyIHI9ZS5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIix0KGUuc2xpY2UoMCxyKSksIiwiLHQoZS5zbGljZShyKSksIikiXS5qb2luKCIiKX0oZSk7dmFyIG59ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzdW0iLCJzY2FsZSIsInByb2QiLCJjb21wcmVzcyIsWyJmdW5jdGlvbiByb2J1c3REZXRlcm1pbmFudCIsdCwiKG0pe3JldHVybiBjb21wcmVzcygiLGMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibVsiLHIsIl1bIixuLCJdIl0uam9pbigiIil9cmV0dXJuIGV9KHQpKSwiKX07cmV0dXJuIHJvYnVzdERldGVybWluYW50Iix0XS5qb2luKCIiKSkoaSxhLG4sbyl9dmFyIGY9W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0KXtyZXR1cm5bdFswXVswXV19XTshZnVuY3Rpb24oKXtmb3IoO2YubGVuZ3RoPHM7KWYucHVzaCh1KGYubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJmdW5jdGlvbiByb2J1c3REZXRlcm1pbmFudChtKXtzd2l0Y2gobS5sZW5ndGgpeyJdLG49MDtuPHM7KytuKXQucHVzaCgiZGV0IituKSxyLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIGRldCIsbiwiKG0pOyIpO3IucHVzaCgifXZhciBkZXQ9Q0FDSEVbbS5sZW5ndGhdO2lmKCFkZXQpZGV0PUNBQ0hFW20ubGVuZ3RoXT1nZW4obS5sZW5ndGgpO3JldHVybiBkZXQobSk7fXJldHVybiByb2J1c3REZXRlcm1pbmFudCIpLHQucHVzaCgiQ0FDSEUiLCJnZW4iLHIuam9pbigiIikpO3ZhciBpPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtmb3IoZS5leHBvcnRzPWkuYXBwbHkodm9pZCAwLGYuY29uY2F0KFtmLHVdKSksbj0wO248Zi5sZW5ndGg7KytuKWUuZXhwb3J0c1tuXT1mW25dfSgpfSx7InJvYnVzdC1jb21wcmVzcyI6NDg5LCJyb2J1c3Qtc2NhbGUiOjQ5Niwicm9idXN0LXN1bSI6NDk5LCJ0d28tcHJvZHVjdCI6NTI3fV0sNDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4odFswXSxlWzBdKSxhPTE7YTx0Lmxlbmd0aDsrK2Epcj1pKHIsbih0W2FdLGVbYV0pKTtyZXR1cm4gcn19LHsicm9idXN0LXN1bSI6NDk5LCJ0d28tcHJvZHVjdCI6NTI3fV0sNDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc3VidHJhY3QiKSxvPXQoInJvYnVzdC1zY2FsZSIpLHM9NjtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdFswXTtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0oIix0WzBdLCIsIix0WzFdLCIpIl0uam9pbigiIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIixjKHQuc2xpY2UoMCxlKSksIiwiLGModC5zbGljZShlKSksIikiXS5qb2luKCIiKX1mdW5jdGlvbiB1KHQsZSl7aWYoIm0iPT09dC5jaGFyQXQoMCkpe2lmKCJ3Ij09PWUuY2hhckF0KDApKXt2YXIgcj10LnNwbGl0KCJbIik7cmV0dXJuWyJ3IixlLnN1YnN0cigxKSwibSIsclswXS5zdWJzdHIoMSldLmpvaW4oIiIpfXJldHVyblsicHJvZCgiLHQsIiwiLGUsIikiXS5qb2luKCIiKX1yZXR1cm4gdShlLHQpfWZ1bmN0aW9uIGYodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbImRpZmYoIix1KHRbMF1bMF0sdFsxXVsxXSksIiwiLHUodFsxXVswXSx0WzBdWzFdKSwiKSJdLmpvaW4oIiIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbInNjYWxlKCIsYyhmKGwodCxyKSkpLCIsIiwobj1yLCEwJm4/Ii0iOiIiKSx0WzBdW3JdLCIpIl0uam9pbigiIikpO3JldHVybiBlO3ZhciBufWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9W10sbj0wO248ZS0yOysrbilyLnB1c2goWyJwcm9kKG0iLHQsIlsiLG4sIl0sbSIsdCwiWyIsbiwiXSkiXS5qb2luKCIiKSk7cmV0dXJuIGMocil9ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9W10scj1bXSxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bIm0iLG4sIlsiLHQtci0yLCJdIl0uam9pbigiIil9cmV0dXJuIGV9KHQpLHU9MDt1PHQ7Kyt1KXNbMF1bdV09IjEiLHNbdC0xXVt1XT0idyIrdTtmb3IodT0wO3U8dDsrK3UpMD09KDEmdSk/ZS5wdXNoLmFwcGx5KGUsZihsKHMsdSkpKTpyLnB1c2guYXBwbHkocixmKGwocyx1KSkpO3ZhciBwPWMoZSksZD1jKHIpLGc9ImV4YWN0SW5TcGhlcmUiK3Qsdj1bXTtmb3IodT0wO3U8dDsrK3Updi5wdXNoKCJtIit1KTt2YXIgbT1bImZ1bmN0aW9uICIsZywiKCIsdi5qb2luKCksIil7Il07Zm9yKHU9MDt1PHQ7Kyt1KXttLnB1c2goInZhciB3Iix1LCI9IixoKHUsdCksIjsiKTtmb3IodmFyIHk9MDt5PHQ7Kyt5KXkhPT11JiZtLnB1c2goInZhciB3Iix1LCJtIix5LCI9c2NhbGUodyIsdSwiLG0iLHksIlswXSk7Iil9cmV0dXJuIG0ucHVzaCgidmFyIHA9IixwLCIsbj0iLGQsIixkPWRpZmYocCxuKTtyZXR1cm4gZFtkLmxlbmd0aC0xXTt9cmV0dXJuICIsZyksbmV3IEZ1bmN0aW9uKCJzdW0iLCJkaWZmIiwicHJvZCIsInNjYWxlIixtLmpvaW4oIiIpKShpLGEsbixvKX12YXIgZD1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH1dOyFmdW5jdGlvbigpe2Zvcig7ZC5sZW5ndGg8PXM7KWQucHVzaChwKGQubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJzbG93Il0sbj0wO248PXM7KytuKXQucHVzaCgiYSIrbiksci5wdXNoKCJvIituKTt2YXIgaT1bImZ1bmN0aW9uIHRlc3RJblNwaGVyZSgiLHQuam9pbigpLCIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwOyJdO2ZvcihuPTI7bjw9czsrK24paS5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBvIixuLCIoIix0LnNsaWNlKDAsbikuam9pbigpLCIpOyIpO2kucHVzaCgifXZhciBzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXtzW2ldPWFyZ3VtZW50c1tpXX07cmV0dXJuIHNsb3cocyk7fXJldHVybiB0ZXN0SW5TcGhlcmUiKSxyLnB1c2goaS5qb2luKCIiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2ZvcihlLmV4cG9ydHM9YS5hcHBseSh2b2lkIDAsW2Z1bmN0aW9uKHQpe3ZhciBlPWRbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1kW3QubGVuZ3RoXT1wKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9XS5jb25jYXQoZCkpLG49MDtuPD1zOysrbillLmV4cG9ydHNbbl09ZFtuXX0oKX0seyJyb2J1c3Qtc2NhbGUiOjQ5Niwicm9idXN0LXN1YnRyYWN0Ijo0OTgsInJvYnVzdC1zdW0iOjQ5OSwidHdvLXByb2R1Y3QiOjUyN31dLDQ5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtZGV0ZXJtaW5hbnQiKSxpPTY7ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9InJvYnVzdExpbmVhclNvbHZlIit0KyJkIixyPVsiZnVuY3Rpb24gIixlLCIoQSxiKXtyZXR1cm4gWyJdLGk9MDtpPHQ7KytpKXtyLnB1c2goImRldChbIik7Zm9yKHZhciBhPTA7YTx0OysrYSl7YT4wJiZyLnB1c2goIiwiKSxyLnB1c2goIlsiKTtmb3IodmFyIG89MDtvPHQ7KytvKW8+MCYmci5wdXNoKCIsIiksbz09PWk/ci5wdXNoKCIrYlsiLGEsIl0iKTpyLnB1c2goIitBWyIsYSwiXVsiLG8sIl0iKTtyLnB1c2goIl0iKX1yLnB1c2goIl0pLCIpfXIucHVzaCgiZGV0KEEpXX1yZXR1cm4gIixlKTt2YXIgcz1uZXcgRnVuY3Rpb24oImRldCIsci5qb2luKCIiKSk7cmV0dXJuIHModDw2P25bdF06bil9dmFyIG89W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0LGUpe3JldHVybltbZVswXV0sW3RbMF1bMF1dXX1dOyFmdW5jdGlvbigpe2Zvcig7by5sZW5ndGg8aTspby5wdXNoKGEoby5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bImZ1bmN0aW9uIGRpc3BhdGNoTGluZWFyU29sdmUoQSxiKXtzd2l0Y2goQS5sZW5ndGgpeyJdLG49MDtuPGk7KytuKXQucHVzaCgicyIrbiksci5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBzIixuLCIoQSxiKTsiKTtyLnB1c2goIn12YXIgcz1DQUNIRVtBLmxlbmd0aF07aWYoIXMpcz1DQUNIRVtBLmxlbmd0aF09ZyhBLmxlbmd0aCk7cmV0dXJuIHMoQSxiKX1yZXR1cm4gZGlzcGF0Y2hMaW5lYXJTb2x2ZSIpLHQucHVzaCgiQ0FDSEUiLCJnIixyLmpvaW4oIiIpKTt2YXIgcz1GdW5jdGlvbi5hcHBseSh2b2lkIDAsdCk7Zm9yKGUuZXhwb3J0cz1zLmFwcGx5KHZvaWQgMCxvLmNvbmNhdChbbyxhXSkpLG49MDtuPGk7KytuKWUuZXhwb3J0c1tuXT1vW25dfSgpfSx7InJvYnVzdC1kZXRlcm1pbmFudCI6NDkwfV0sNDk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKSxvPXQoInJvYnVzdC1zdWJ0cmFjdCIpLHM9NTtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdFswXTtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0oIix0WzBdLCIsIix0WzFdLCIpIl0uam9pbigiIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIixjKHQuc2xpY2UoMCxlKSksIiwiLGModC5zbGljZShlKSksIikiXS5qb2luKCIiKX1mdW5jdGlvbiB1KHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bWyJzdW0ocHJvZCgiLHRbMF1bMF0sIiwiLHRbMV1bMV0sIikscHJvZCgtIix0WzBdWzFdLCIsIix0WzFdWzBdLCIpKSJdLmpvaW4oIiIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbInNjYWxlKCIsYyh1KGwodCxyKSkpLCIsIiwobj1yLDEmbj8iLSI6IiIpLHRbMF1bcl0sIikiXS5qb2luKCIiKSk7cmV0dXJuIGU7dmFyIG59ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9W10scj1bXSxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bIm0iLG4sIlsiLHQtci0xLCJdIl0uam9pbigiIil9cmV0dXJuIGV9KHQpLGY9W10saD0wO2g8dDsrK2gpMD09KDEmaCk/ZS5wdXNoLmFwcGx5KGUsdShsKHMsaCkpKTpyLnB1c2guYXBwbHkocix1KGwocyxoKSkpLGYucHVzaCgibSIraCk7dmFyIHA9YyhlKSxkPWMociksZz0ib3JpZW50YXRpb24iK3QrIkV4YWN0Iix2PVsiZnVuY3Rpb24gIixnLCIoIixmLmpvaW4oKSwiKXt2YXIgcD0iLHAsIixuPSIsZCwiLGQ9c3ViKHAsbik7cmV0dXJuIGRbZC5sZW5ndGgtMV07fTtyZXR1cm4gIixnXS5qb2luKCIiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzdW0iLCJwcm9kIiwic2NhbGUiLCJzdWIiLHYpKGksbixhLG8pfXZhciBoPWYoMykscD1mKDQpLGQ9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9KHRbMV0tclsxXSkqKGVbMF0tclswXSksYT0odFswXS1yWzBdKSooZVsxXS1yWzFdKSxvPWktYTtpZihpPjApe2lmKGE8PTApcmV0dXJuIG87bj1pK2F9ZWxzZXtpZighKGk8MCkpcmV0dXJuIG87aWYoYT49MClyZXR1cm4gbztuPS0oaSthKX12YXIgcz0zLjMzMDY2OTA3Mzg3NTQ3MTZlLTE2Km47cmV0dXJuIG8+PXN8fG88PS1zP286aCh0LGUscil9LGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tblswXSxhPWVbMF0tblswXSxvPXJbMF0tblswXSxzPXRbMV0tblsxXSxsPWVbMV0tblsxXSxjPXJbMV0tblsxXSx1PXRbMl0tblsyXSxmPWVbMl0tblsyXSxoPXJbMl0tblsyXSxkPWEqYyxnPW8qbCx2PW8qcyxtPWkqYyx5PWkqbCx4PWEqcyxiPXUqKGQtZykrZioodi1tKStoKih5LXgpLF89Ny43NzE1NjExNzIzNzYxMDNlLTE2KigoTWF0aC5hYnMoZCkrTWF0aC5hYnMoZykpKk1hdGguYWJzKHUpKyhNYXRoLmFicyh2KStNYXRoLmFicyhtKSkqTWF0aC5hYnMoZikrKE1hdGguYWJzKHkpK01hdGguYWJzKHgpKSpNYXRoLmFicyhoKSk7cmV0dXJuIGI+X3x8LWI+Xz9iOnAodCxlLHIsbil9XTshZnVuY3Rpb24oKXtmb3IoO2QubGVuZ3RoPD1zOylkLnB1c2goZihkLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsic2xvdyJdLG49MDtuPD1zOysrbil0LnB1c2goImEiK24pLHIucHVzaCgibyIrbik7dmFyIGk9WyJmdW5jdGlvbiBnZXRPcmllbnRhdGlvbigiLHQuam9pbigpLCIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwOyJdO2ZvcihuPTI7bjw9czsrK24paS5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBvIixuLCIoIix0LnNsaWNlKDAsbikuam9pbigpLCIpOyIpO2kucHVzaCgifXZhciBzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXtzW2ldPWFyZ3VtZW50c1tpXX07cmV0dXJuIHNsb3cocyk7fXJldHVybiBnZXRPcmllbnRhdGlvbiIpLHIucHVzaChpLmpvaW4oIiIpKTt2YXIgYT1GdW5jdGlvbi5hcHBseSh2b2lkIDAscik7Zm9yKGUuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbZnVuY3Rpb24odCl7dmFyIGU9ZFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPWRbdC5sZW5ndGhdPWYodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1dLmNvbmNhdChkKSksbj0wO248PXM7KytuKWUuZXhwb3J0c1tuXT1kW25dfSgpfSx7InJvYnVzdC1zY2FsZSI6NDk2LCJyb2J1c3Qtc3VidHJhY3QiOjQ5OCwicm9idXN0LXN1bSI6NDk5LCJ0d28tcHJvZHVjdCI6NTI3fV0sNDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1zdW0iKSxpPXQoInJvYnVzdC1zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gaShlLHRbMF0pO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gaSh0LGVbMF0pO2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVyblswXTt2YXIgcj1bMF07aWYodC5sZW5ndGg8ZS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epcj1uKHIsaShlLHRbYV0pKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKXI9bihyLGkodCxlW2FdKSk7cmV0dXJuIHJ9fSx7InJvYnVzdC1zY2FsZSI6NDk2LCJyb2J1c3Qtc3VtIjo0OTl9XSw0OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInR3by1zdW0iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigxPT09cil7dmFyIGE9bih0WzBdLGUpO3JldHVybiBhWzBdP2E6W2FbMV1dfXZhciBvPW5ldyBBcnJheSgyKnIpLHM9Wy4xLC4xXSxsPVsuMSwuMV0sYz0wO24odFswXSxlLHMpLHNbMF0mJihvW2MrK109c1swXSk7Zm9yKHZhciB1PTE7dTxyOysrdSl7bih0W3VdLGUsbCk7dmFyIGY9c1sxXTtpKGYsbFswXSxzKSxzWzBdJiYob1tjKytdPXNbMF0pO3ZhciBoPWxbMV0scD1zWzFdLGQ9aCtwLGc9ZC1oLHY9cC1nO3NbMV09ZCx2JiYob1tjKytdPXYpfXNbMV0mJihvW2MrK109c1sxXSk7MD09PWMmJihvW2MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPWMsb319LHsidHdvLXByb2R1Y3QiOjUyNywidHdvLXN1bSI6NTI4fV0sNDk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1uKHQscixpKSxvPW4oZSxyLGkpO2lmKGE+MCYmbz4wfHxhPDAmJm88MClyZXR1cm4hMTt2YXIgcz1uKHIsdCxlKSxsPW4oaSx0LGUpO2lmKHM+MCYmbD4wfHxzPDAmJmw8MClyZXR1cm4hMTtpZigwPT09YSYmMD09PW8mJjA9PT1zJiYwPT09bClyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTwyOysraSl7dmFyIGE9dFtpXSxvPWVbaV0scz1NYXRoLm1pbihhLG8pLGw9TWF0aC5tYXgoYSxvKSxjPXJbaV0sdT1uW2ldLGY9TWF0aC5taW4oYyx1KSxoPU1hdGgubWF4KGMsdSk7aWYoaDxzfHxsPGYpcmV0dXJuITF9cmV0dXJuITB9KHQsZSxyLGkpO3JldHVybiEwfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjQ5NH1dLDQ5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0wfHQubGVuZ3RoLG49MHxlLmxlbmd0aDtpZigxPT09ciYmMT09PW4pcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9dCtlLG49ci10LGk9dC0oci1uKSsoZS1uKTtpZihpKXJldHVybltpLHJdO3JldHVybltyXX0odFswXSwtZVswXSk7dmFyIGksYSxvPW5ldyBBcnJheShyK24pLHM9MCxsPTAsYz0wLHU9TWF0aC5hYnMsZj10W2xdLGg9dShmKSxwPS1lW2NdLGQ9dShwKTtoPGQ/KGE9ZiwobCs9MSk8ciYmKGY9dFtsXSxoPXUoZikpKTooYT1wLChjKz0xKTxuJiYocD0tZVtjXSxkPXUocCkpKTtsPHImJmg8ZHx8Yz49bj8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpO3ZhciBnLHYsbT1pK2EseT1tLWkseD1hLXksYj14LF89bTtmb3IoO2w8ciYmYzxuOyloPGQ/KGk9ZiwobCs9MSk8ciYmKGY9dFtsXSxoPXUoZikpKTooaT1wLChjKz0xKTxuJiYocD0tZVtjXSxkPXUocCkpKSwoeD0oYT1iKS0oeT0obT1pK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nO2Zvcig7bDxyOykoeD0oYT1iKS0oeT0obT0oaT1mKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89ZywobCs9MSk8ciYmKGY9dFtsXSk7Zm9yKDtjPG47KSh4PShhPWIpLSh5PShtPShpPXApK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChjKz0xKTxuJiYocD0tZVtjXSk7YiYmKG9bcysrXT1iKTtfJiYob1tzKytdPV8pO3N8fChvW3MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPXMsb319LHt9XSw0OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxuPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1uKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPXQrZSxuPXItdCxpPXQtKHItbikrKGUtbik7aWYoaSlyZXR1cm5baSxyXTtyZXR1cm5bcl19KHRbMF0sZVswXSk7dmFyIGksYSxvPW5ldyBBcnJheShyK24pLHM9MCxsPTAsYz0wLHU9TWF0aC5hYnMsZj10W2xdLGg9dShmKSxwPWVbY10sZD11KHApO2g8ZD8oYT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihhPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSk7bDxyJiZoPGR8fGM+PW4/KGk9ZiwobCs9MSk8ciYmKGY9dFtsXSxoPXUoZikpKTooaT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpO3ZhciBnLHYsbT1pK2EseT1tLWkseD1hLXksYj14LF89bTtmb3IoO2w8ciYmYzxuOyloPGQ/KGk9ZiwobCs9MSk8ciYmKGY9dFtsXSxoPXUoZikpKTooaT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PShtPWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWc7Zm9yKDtsPHI7KSh4PShhPWIpLSh5PShtPShpPWYpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChsKz0xKTxyJiYoZj10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KG09KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWcsKGMrPTEpPG4mJihwPWVbY10pO2ImJihvW3MrK109Yik7XyYmKG9bcysrXT1fKTtzfHwob1tzKytdPTApO3JldHVybiBvLmxlbmd0aD1zLG99fSx7fV0sNTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdDwwPy0xOnQ+MD8xOjB9fSx7fV0sNTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaShuKHQpKX07dmFyIG49dCgiYm91bmRhcnktY2VsbHMiKSxpPXQoInJlZHVjZS1zaW1wbGljaWFsLWNvbXBsZXgiKX0seyJib3VuZGFyeS1jZWxscyI6ODUsInJlZHVjZS1zaW1wbGljaWFsLWNvbXBsZXgiOjQ4MX1dLDUwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7cj1yfHwwLCJ1bmRlZmluZWQiPT10eXBlb2YgcyYmKHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MCxuPTA7bjxlOysrbilyPTB8TWF0aC5tYXgocix0W25dLmxlbmd0aCk7cmV0dXJuIHItMX0odCkpO2lmKDA9PT10Lmxlbmd0aHx8czwxKXJldHVybntjZWxsczpbXSx2ZXJ0ZXhJZHM6W10sdmVydGV4V2VpZ2h0czpbXX07dmFyIGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1pLm1hbGxvY1VpbnQ4KHIpLGE9MDthPHI7KythKW5bYV09dFthXTxlfDA7cmV0dXJuIG59KGUsK3IpLGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbz1lKihlKzEpLzIqcnwwLHM9aS5tYWxsb2NVaW50MzIoMipvKSxsPTAsYz0wO2M8cjsrK2MpZm9yKHZhciB1PXRbY10sZT11Lmxlbmd0aCxmPTA7ZjxlOysrZilmb3IodmFyIGg9MDtoPGY7KytoKXt2YXIgcD11W2hdLGQ9dVtmXTtzW2wrK109MHxNYXRoLm1pbihwLGQpLHNbbCsrXT0wfE1hdGgubWF4KHAsZCl9YShuKHMsW2wvMnwwLDJdKSk7Zm9yKHZhciBnPTIsYz0yO2M8bDtjKz0yKXNbYy0yXT09PXNbY10mJnNbYy0xXT09PXNbYysxXXx8KHNbZysrXT1zW2NdLHNbZysrXT1zW2MrMV0pO3JldHVybiBuKHMsW2cvMnwwLDJdKX0odCxzKSx1PWZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgbz10LmRhdGEscz10LnNoYXBlWzBdLGw9aS5tYWxsb2NEb3VibGUocyksYz0wLHU9MDt1PHM7Kyt1KXt2YXIgZj1vWzIqdV0saD1vWzIqdSsxXTtpZihyW2ZdIT09cltoXSl7dmFyIHA9ZVtmXSxkPWVbaF07b1syKmNdPWYsb1syKmMrMV09aCxsW2MrK109KGQtYSkvKGQtcCl9fXJldHVybiB0LnNoYXBlWzBdPWMsbihsLFtjXSl9KGMsZSxsLCtyKSxmPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aS5tYWxsb2NJbnQzMigyKmUpLG49dC5zaGFwZVswXSxhPXQuZGF0YTtyWzBdPTA7Zm9yKHZhciBvPTAscz0wO3M8bjsrK3Mpe3ZhciBsPWFbMipzXTtpZihsIT09byl7Zm9yKHJbMipvKzFdPXM7KytvPGw7KXJbMipvXT1zLHJbMipvKzFdPXM7clsyKm9dPXN9fXJbMipvKzFdPW47Zm9yKDsrK288ZTspclsyKm9dPXJbMipvKzFdPW47cmV0dXJuIHJ9KGMsMHxlLmxlbmd0aCksaD1vKHMpKHQsYy5kYXRhLGYsbCkscD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MHx0LnNoYXBlWzBdLHI9dC5kYXRhLG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09W3JbMippXSxyWzIqaSsxXV07cmV0dXJuIG59KGMpLGQ9W10uc2xpY2UuY2FsbCh1LmRhdGEsMCx1LnNoYXBlWzBdKTtyZXR1cm4gaS5mcmVlKGwpLGkuZnJlZShjLmRhdGEpLGkuZnJlZSh1LmRhdGEpLGkuZnJlZShmKSx7Y2VsbHM6aCx2ZXJ0ZXhJZHM6cCx2ZXJ0ZXhXZWlnaHRzOmR9fTt2YXIgbj10KCJuZGFycmF5IiksaT10KCJ0eXBlZGFycmF5LXBvb2wiKSxhPXQoIm5kYXJyYXktc29ydCIpLG89dCgiLi9saWIvY29kZWdlbiIpfSx7Ii4vbGliL2NvZGVnZW4iOjUwMyxuZGFycmF5OjQ0MiwibmRhcnJheS1zb3J0Ijo0NDAsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sNTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hW3RdO2V8fChlPWFbdF09ZnVuY3Rpb24odCl7dmFyIGU9MCxyPW5ldyBBcnJheSh0KzEpO3JbMF09W1tdXTtmb3IodmFyIGE9MTthPD10OysrYSlmb3IodmFyIG89clthXT1pKGEpLHM9MDtzPG8ubGVuZ3RoOysrcyllPU1hdGgubWF4KGUsb1thXS5sZW5ndGgpO3ZhciBsPVsiZnVuY3Rpb24gQihDLEUsaSxqKXsiLCJ2YXIgYT1NYXRoLm1pbihpLGopfDAsYj1NYXRoLm1heChpLGopfDAsbD1DWzIqYV0saD1DWzIqYSsxXTsiLCJ3aGlsZShsPGgpeyIsInZhciBtPShsK2gpPj4xLHY9RVsyKm0rMV07IiwiaWYodj09PWIpe3JldHVybiBtfSIsImlmKGI8dil7aD1tfWVsc2V7bD1tKzF9IiwifSIsInJldHVybiBsOyIsIn07IiwiZnVuY3Rpb24gZ2V0Q29udG91ciIsdCwiZChGLEUsQyxTKXsiLCJ2YXIgbj1GLmxlbmd0aCxSPVtdOyIsImZvcih2YXIgaT0wO2k8bjsrK2kpe3ZhciBjPUZbaV0sbD1jLmxlbmd0aDsiXTtmdW5jdGlvbiBjKHQpe2lmKCEodC5sZW5ndGg8PTApKXtsLnB1c2goIlIucHVzaCgiKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl7dmFyIHI9dFtlXTtlPjAmJmwucHVzaCgiLCIpLGwucHVzaCgiWyIpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO24+MCYmbC5wdXNoKCIsIiksbC5wdXNoKCJCKEMsRSxjWyIsaVswXSwiXSxjWyIsaVsxXSwiXSkiKX1sLnB1c2goIl0iKX1sLnB1c2goIik7Iil9fWZvcih2YXIgYT10KzE7YT4xOy0tYSl7YTx0KzEmJmwucHVzaCgiZWxzZSAiKSxsLnB1c2goImlmKGw9PT0iLGEsIil7Iik7Zm9yKHZhciB1PVtdLHM9MDtzPGE7KytzKXUucHVzaCgiKFNbY1siK3MrIl1dPDwiK3MrIikiKTtsLnB1c2goInZhciBNPSIsdS5qb2luKCIrIiksIjtpZihNPT09MHx8TT09PSIsKDE8PGEpLTEsIil7Y29udGludWV9c3dpdGNoKE0peyIpO2Zvcih2YXIgbz1yW2EtMV0scz0wO3M8by5sZW5ndGg7KytzKWwucHVzaCgiY2FzZSAiLHMsIjoiKSxjKG9bc10pLGwucHVzaCgiYnJlYWs7Iik7bC5wdXNoKCJ9fSIpfXJldHVybiBsLnB1c2goIn1yZXR1cm4gUjt9O3JldHVybiBnZXRDb250b3VyIix0LCJkIiksbmV3IEZ1bmN0aW9uKCJwb29sIixsLmpvaW4oIiIpKShuKX0odCkpO3JldHVybiBlfTt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoIm1hcmNoaW5nLXNpbXBsZXgtdGFibGUiKSxhPXt9fSx7Im1hcmNoaW5nLXNpbXBsZXgtdGFibGUiOjQxOSwidHlwZWRhcnJheS1wb29sIjo1Mjl9XSw1MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoInVuaW9uLWZpbmQiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj10Lmxlbmd0aC1lLmxlbmd0aCxpPU1hdGgubWluO2lmKG4pcmV0dXJuIG47c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuKHM9dFswXSt0WzFdLWVbMF0tZVsxXSl8fGkodFswXSx0WzFdKS1pKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBhPXRbMF0rdFsxXSxvPWVbMF0rZVsxXTtpZihzPWErdFsyXS0obytlWzJdKSlyZXR1cm4gczt2YXIgcyxsPWkodFswXSx0WzFdKSxjPWkoZVswXSxlWzFdKTtyZXR1cm4ocz1pKGwsdFsyXSktaShjLGVbMl0pKXx8aShsK3RbMl0sYSktaShjK2VbMl0sbyk7ZGVmYXVsdDp2YXIgdT10LnNsaWNlKDApO3Uuc29ydCgpO3ZhciBmPWUuc2xpY2UoMCk7Zi5zb3J0KCk7Zm9yKHZhciBoPTA7aDxyOysraClpZihuPXVbaF0tZltoXSlyZXR1cm4gbjtyZXR1cm4gMH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBhKHRbMF0sZVswXSl9ZnVuY3Rpb24gcyh0LGUpe2lmKGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSluW2ldPVt0W2ldLGVbaV1dO24uc29ydChvKTtmb3IoaT0wO2k8cjsrK2kpdFtpXT1uW2ldWzBdLGVbaV09bltpXVsxXTtyZXR1cm4gdH1yZXR1cm4gdC5zb3J0KGEpLHR9ZnVuY3Rpb24gbCh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPTE7bjxyOysrbil7dmFyIGk9dFtuXTtpZihhKGksdFtuLTFdKSl7aWYobj09PWUpe2UrKztjb250aW51ZX10W2UrK109aX19cmV0dXJuIHQubGVuZ3RoPWUsdH1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9LTE7cjw9bjspe3ZhciBvPXIrbj4+MSxzPWEodFtvXSxlKTtzPD0wPygwPT09cyYmKGk9bykscj1vKzEpOnM+MCYmKG49by0xKX1yZXR1cm4gaX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldPVtdO2Zvcih2YXIgcz1bXSxsPShpPTAsZS5sZW5ndGgpO2k8bDsrK2kpZm9yKHZhciB1PWVbaV0sZj11Lmxlbmd0aCxoPTEscD0xPDxmO2g8cDsrK2gpe3MubGVuZ3RoPW4ucG9wQ291bnQoaCk7Zm9yKHZhciBkPTAsZz0wO2c8ZjsrK2cpaCYxPDxnJiYoc1tkKytdPXVbZ10pO3ZhciB2PWModCxzKTtpZighKHY8MCkpZm9yKDtyW3YrK10ucHVzaChpKSwhKHY+PXQubGVuZ3RofHwwIT09YSh0W3ZdLHMpKTspO31yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7aWYoZTwwKXJldHVybltdO2Zvcih2YXIgcj1bXSxpPSgxPDxlKzEpLTEsYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgbz10W2FdLGw9aTtsPDE8PG8ubGVuZ3RoO2w9bi5uZXh0Q29tYmluYXRpb24obCkpe2Zvcih2YXIgYz1uZXcgQXJyYXkoZSsxKSx1PTAsZj0wO2Y8by5sZW5ndGg7KytmKWwmMTw8ZiYmKGNbdSsrXT1vW2ZdKTtyLnB1c2goYyl9cmV0dXJuIHMocil9ci5kaW1lbnNpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWU9cihlLHRbbl0ubGVuZ3RoKTtyZXR1cm4gZS0xfSxyLmNvdW50VmVydGljZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKWU9cihlLGFbb10pO3JldHVybiBlKzF9LHIuY2xvbmVDZWxscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWVbcl09dFtyXS5zbGljZSgwKTtyZXR1cm4gZX0sci5jb21wYXJlQ2VsbHM9YSxyLm5vcm1hbGl6ZT1zLHIudW5pcXVlPWwsci5maW5kQ2VsbD1jLHIuaW5jaWRlbmNlPXUsci5kdWFsPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHUobChmKHQsMCkpLHQpO2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT1bXTtuPTA7Zm9yKHZhciBpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbylyW2Fbb11dLnB1c2gobik7cmV0dXJuIHJ9LHIuZXhwbG9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTB8aS5sZW5ndGgsbz0xLGw9MTw8YTtvPGw7KytvKXtmb3IodmFyIGM9W10sdT0wO3U8YTsrK3Upbz4+PnUmMSYmYy5wdXNoKGlbdV0pO2UucHVzaChjKX1yZXR1cm4gcyhlKX0sci5za2VsZXRvbj1mLHIuYm91bmRhcnk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSl7Zm9yKHZhciBsPW5ldyBBcnJheShpLmxlbmd0aC0xKSxjPTAsdT0wO2M8bzsrK2MpYyE9PWEmJihsW3UrK109aVtjXSk7ZS5wdXNoKGwpfXJldHVybiBzKGUpfSxyLmNvbm5lY3RlZENvbXBvbmVudHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgaShlKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgcz1vKzE7czxhLmxlbmd0aDsrK3Mpci5saW5rKGFbb10sYVtzXSk7dmFyIGw9W10sYz1yLnJhbmtzO2ZvcihuPTA7bjxjLmxlbmd0aDsrK24pY1tuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgdT1yLmZpbmQodFtuXVswXSk7Y1t1XTwwPyhjW3VdPWwubGVuZ3RoLGwucHVzaChbdFtuXS5zbGljZSgwKV0pKTpsW2NbdV1dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIGx9KHQsZSk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWwocyhmKHQsMCkpKSxyPW5ldyBpKGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgdT1jKGUsW2Fbb11dKSxoPW8rMTtoPGEubGVuZ3RoOysraClyLmxpbmsodSxjKGUsW2FbaF1dKSk7dmFyIHA9W10sZD1yLnJhbmtzO2ZvcihuPTA7bjxkLmxlbmd0aDsrK24pZFtuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgZz1yLmZpbmQoYyhlLFt0W25dWzBdXSkpO2RbZ108MD8oZFtnXT1wLmxlbmd0aCxwLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6cFtkW2ddXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBwfSh0KX19LHsiYml0LXR3aWRkbGUiOjgyLCJ1bmlvbi1maW5kIjo1MzB9XSw1MDU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bODJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDo4Mn1dLDUwNjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs1MDRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyJiaXQtdHdpZGRsZSI6NTA1LGR1cDo1MDQsInVuaW9uLWZpbmQiOjUwN31dLDUwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bixuLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9LG4ucHJvdG90eXBlLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnJvb3RzO2VbdF0hPT10Oyl7dmFyIHI9ZVt0XTtlW3RdPWVbcl0sdD1yfXJldHVybiB0fSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDUwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGY9MDtmPGE7KytmKXNbZl09bFtmXT0tMSxjW2ZdPTEvMCx1W2ZdPSExO2Zvcih2YXIgZj0wO2Y8bzsrK2Ype3ZhciBoPXRbZl07aWYoMiE9PWgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbXVzdCBiZSBhIGdyYXBoIik7dmFyIHA9aFsxXSxkPWhbMF07LTEhPT1sW2RdP2xbZF09LTI6bFtkXT1wLC0xIT09c1twXT9zW3BdPS0yOnNbcF09ZH1mdW5jdGlvbiBnKHQpe2lmKHVbdF0pcmV0dXJuIDEvMDt2YXIgcixpLGEsbyxjLGY9c1t0XSxoPWxbdF07cmV0dXJuIGY8MHx8aDwwPzEvMDoocj1lW3RdLGk9ZVtmXSxhPWVbaF0sbz1NYXRoLmFicyhuKHIsaSxhKSksYz1NYXRoLnNxcnQoTWF0aC5wb3coaVswXS1hWzBdLDIpK01hdGgucG93KGlbMV0tYVsxXSwyKSksby9jKX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9VFt0XSxuPVRbZV07VFt0XT1uLFRbZV09cixBW3JdPWUsQVtuXT10fWZ1bmN0aW9uIG0odCl7cmV0dXJuIGNbVFt0XV19ZnVuY3Rpb24geSh0KXtyZXR1cm4gMSZ0P3QtMT4+MToodD4+MSktMX1mdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT1tKHQpOzspe3ZhciByPWUsbj0yKnQrMSxpPTIqKHQrMSksYT10O2lmKG48Uyl7dmFyIG89bShuKTtvPHImJihhPW4scj1vKX1pZihpPFMpe3ZhciBzPW0oaSk7czxyJiYoYT1pKX1pZihhPT09dClyZXR1cm4gdDt2KHQsYSksdD1hfX1mdW5jdGlvbiBiKHQpe2Zvcih2YXIgZT1tKHQpO3Q+MDspe3ZhciByPXkodCk7aWYocj49MCl7dmFyIG49bShyKTtpZihlPG4pe3YodCxyKSx0PXI7Y29udGludWV9fXJldHVybiB0fX1mdW5jdGlvbiBfKCl7aWYoUz4wKXt2YXIgdD1UWzBdO3JldHVybiB2KDAsUy0xKSxTLT0xLHgoMCksdH1yZXR1cm4tMX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9VFt0XTtyZXR1cm4gY1tyXT09PWU/dDooY1tyXT0tMS8wLGIodCksXygpLGNbcl09ZSxiKChTKz0xKS0xKSl9ZnVuY3Rpb24gayh0KXtpZighdVt0XSl7dVt0XT0hMDt2YXIgZT1zW3RdLHI9bFt0XTtzW3JdPj0wJiYoc1tyXT1lKSxsW2VdPj0wJiYobFtlXT1yKSxBW2VdPj0wJiZ3KEFbZV0sZyhlKSksQVtyXT49MCYmdyhBW3JdLGcocikpfX1mb3IodmFyIFQ9W10sQT1uZXcgQXJyYXkoYSksZj0wO2Y8YTsrK2Ype3ZhciBNPWNbZl09ZyhmKTtNPDEvMD8oQVtmXT1ULmxlbmd0aCxULnB1c2goZikpOkFbZl09LTF9Zm9yKHZhciBTPVQubGVuZ3RoLGY9Uz4+MTtmPj0wOy0tZil4KGYpO2Zvcig7Oyl7dmFyIEU9XygpO2lmKEU8MHx8Y1tFXT5yKWJyZWFrO2soRSl9Zm9yKHZhciBDPVtdLGY9MDtmPGE7KytmKXVbZl18fChBW2ZdPUMubGVuZ3RoLEMucHVzaChlW2ZdLnNsaWNlKCkpKTtDLmxlbmd0aDtmdW5jdGlvbiBMKHQsZSl7aWYodFtlXTwwKXJldHVybiBlO3ZhciByPWUsbj1lO2Rve3ZhciBpPXRbbl07aWYoIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7aWYoaT10W249aV0sIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7bj1pLHI9dFtyXX13aGlsZShyIT09bik7Zm9yKHZhciBhPWU7YSE9PW47YT10W2FdKXRbYV09bjtyZXR1cm4gbn12YXIgej1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUwocyx0WzBdKSxyPUwobCx0WzFdKTtpZihlPj0wJiZyPj0wJiZlIT09cil7dmFyIG49QVtlXSxpPUFbcl07biE9PWkmJnoucHVzaChbbixpXSl9fSksaS51bmlxdWUoaS5ub3JtYWxpemUoeikpLHtwb3NpdGlvbnM6QyxlZGdlczp6fX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgiKX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjQ5NCwic2ltcGxpY2lhbC1jb21wbGV4Ijo1MDZ9XSw1MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM7aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxhPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpcmV0dXJuIGkoZSx0KTtyPWVbMV0sYT1lWzBdfWlmKHRbMF1bMF08dFsxXVswXSlvPXRbMF0scz10WzFdO2Vsc2V7aWYoISh0WzBdWzBdPnRbMV1bMF0pKXJldHVybi1pKHQsZSk7bz10WzFdLHM9dFswXX12YXIgbD1uKHIsYSxzKSxjPW4ocixhLG8pO2lmKGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7aWYobD1uKHMsbyxhKSxjPW4ocyxvLHIpLGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7cmV0dXJuIGFbMF0tc1swXX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByLGksYSxvO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0saT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXt2YXIgcz1NYXRoLm1pbih0WzBdWzFdLHRbMV1bMV0pLGw9TWF0aC5tYXgodFswXVsxXSx0WzFdWzFdKSxjPU1hdGgubWluKGVbMF1bMV0sZVsxXVsxXSksdT1NYXRoLm1heChlWzBdWzFdLGVbMV1bMV0pO3JldHVybiBsPGM/bC1jOnM+dT9zLXU6bC11fXI9ZVsxXSxpPWVbMF19dFswXVsxXTx0WzFdWzFdPyhhPXRbMF0sbz10WzFdKTooYT10WzFdLG89dFswXSk7dmFyIGY9bihpLHIsYSk7cmV0dXJuIGZ8fCgoZj1uKGkscixvKSl8fG8taSl9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NDk0fV0sNTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0yKmUsbj1uZXcgQXJyYXkociksYT0wO2E8ZTsrK2Epe3ZhciBsPXRbYV0sYz1sWzBdWzBdPGxbMV1bMF07blsyKmFdPW5ldyBmKGxbMF1bMF0sbCxjLGEpLG5bMiphKzFdPW5ldyBmKGxbMV1bMF0sbCwhYyxhKX1uLnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgcj10LngtZS54O3JldHVybiByfHwoKHI9dC5jcmVhdGUtZS5jcmVhdGUpfHxNYXRoLm1pbih0LnNlZ21lbnRbMF1bMV0sdC5zZWdtZW50WzFdWzFdKS1NYXRoLm1pbihlLnNlZ21lbnRbMF1bMV0sZS5zZWdtZW50WzFdWzFdKSl9KTtmb3IodmFyIGg9aShvKSxwPVtdLGQ9W10sZz1bXSxhPTA7YTxyOyl7Zm9yKHZhciB2PW5bYV0ueCxtPVtdO2E8cjspe3ZhciB5PW5bYV07aWYoeS54IT09dilicmVhazthKz0xLHkuc2VnbWVudFswXVswXT09PXkueCYmeS5zZWdtZW50WzFdWzBdPT09eS54P3kuY3JlYXRlJiYoeS5zZWdtZW50WzBdWzFdPHkuc2VnbWVudFsxXVsxXT8obS5wdXNoKG5ldyB1KHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCEwLCEwKSksbS5wdXNoKG5ldyB1KHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCExLCExKSkpOihtLnB1c2gobmV3IHUoeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITAsITEpKSxtLnB1c2gobmV3IHUoeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITEsITApKSkpOmg9eS5jcmVhdGU/aC5pbnNlcnQoeS5zZWdtZW50LHkuaW5kZXgpOmgucmVtb3ZlKHkuc2VnbWVudCl9cC5wdXNoKGgucm9vdCksZC5wdXNoKHYpLGcucHVzaChtKX1yZXR1cm4gbmV3IHMocCxkLGcpfTt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZSIpLGE9dCgicm9idXN0LW9yaWVudGF0aW9uIiksbz10KCIuL2xpYi9vcmRlci1zZWdtZW50cyIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuc2xhYnM9dCx0aGlzLmNvb3JkaW5hdGVzPWUsdGhpcy5ob3Jpem9udGFsPXJ9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LnktZX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPW51bGw7dDspe3ZhciBuLGksbz10LmtleTtvWzBdWzBdPG9bMV1bMF0/KG49b1swXSxpPW9bMV0pOihuPW9bMV0saT1vWzBdKTt2YXIgcz1hKG4saSxlKTtpZihzPDApdD10LmxlZnQ7ZWxzZSBpZihzPjApaWYoZVswXSE9PW9bMV1bMF0pcj10LHQ9dC5yaWdodDtlbHNle2lmKGw9Yyh0LnJpZ2h0LGUpKXJldHVybiBsO3Q9dC5sZWZ0fWVsc2V7aWYoZVswXSE9PW9bMV1bMF0pcmV0dXJuIHQ7dmFyIGw7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9fXJldHVybiByfWZ1bmN0aW9uIHUodCxlLHIsbil7dGhpcy55PXQsdGhpcy5pbmRleD1lLHRoaXMuc3RhcnQ9cix0aGlzLmNsb3NlZD1ufWZ1bmN0aW9uIGYodCxlLHIsbil7dGhpcy54PXQsdGhpcy5zZWdtZW50PWUsdGhpcy5jcmVhdGU9cix0aGlzLmluZGV4PW59cy5wcm90b3R5cGUuY2FzdFVwPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGUodGhpcy5jb29yZGluYXRlcyx0WzBdKTtpZihlPDApcmV0dXJuLTE7dGhpcy5zbGFic1tlXTt2YXIgcj1jKHRoaXMuc2xhYnNbZV0sdCksaT0tMTtpZihyJiYoaT1yLnZhbHVlKSx0aGlzLmNvb3JkaW5hdGVzW2VdPT09dFswXSl7dmFyIHM9bnVsbDtpZihyJiYocz1yLmtleSksZT4wKXt2YXIgdT1jKHRoaXMuc2xhYnNbZS0xXSx0KTt1JiYocz9vKHUua2V5LHMpPjAmJihzPXUua2V5LGk9dS52YWx1ZSk6KGk9dS52YWx1ZSxzPXUua2V5KSl9dmFyIGY9dGhpcy5ob3Jpem9udGFsW2VdO2lmKGYubGVuZ3RoPjApe3ZhciBoPW4uZ2UoZix0WzFdLGwpO2lmKGg8Zi5sZW5ndGgpe3ZhciBwPWZbaF07aWYodFsxXT09PXAueSl7aWYocC5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7Zm9yKDtoPGYubGVuZ3RoLTEmJmZbaCsxXS55PT09dFsxXTspaWYoKHA9ZltoKz0xXSkuY2xvc2VkKXJldHVybiBwLmluZGV4O2lmKHAueT09PXRbMV0mJiFwLnN0YXJ0KXtpZigoaCs9MSk+PWYubGVuZ3RoKXJldHVybiBpO3A9ZltoXX19aWYocC5zdGFydClpZihzKXt2YXIgZD1hKHNbMF0sc1sxXSxbdFswXSxwLnldKTtzWzBdWzBdPnNbMV1bMF0mJihkPS1kKSxkPjAmJihpPXAuaW5kZXgpfWVsc2UgaT1wLmluZGV4O2Vsc2UgcC55IT09dFsxXSYmKGk9cC5pbmRleCl9fX1yZXR1cm4gaX19LHsiLi9saWIvb3JkZXItc2VnbWVudHMiOjUwOSwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgxLCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIjoyMjYsInJvYnVzdC1vcmllbnRhdGlvbiI6NDk0fV0sNTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1kb3QtcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1pKG4odCxlKSxbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9LWUvKG4tZSk7aTwwP2k9MDppPjEmJihpPTEpO2Zvcih2YXIgYT0xLWksbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPTA7bDxvOysrbClzW2xdPWkqdFtsXSthKnJbbF07cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT1hKHRbdC5sZW5ndGgtMV0sZSkscz10W3QubGVuZ3RoLTFdLGw9dFswXSxjPTA7Yzx0Lmxlbmd0aDsrK2Mscz1sKXt2YXIgdT1hKGw9dFtjXSxlKTtpZihpPDAmJnU+MHx8aT4wJiZ1PDApe3ZhciBmPW8ocyx1LGwsaSk7ci5wdXNoKGYpLG4ucHVzaChmLnNsaWNlKCkpfXU8MD9uLnB1c2gobC5zbGljZSgpKTp1PjA/ci5wdXNoKGwuc2xpY2UoKSk6KHIucHVzaChsLnNsaWNlKCkpLG4ucHVzaChsLnNsaWNlKCkpKSxpPXV9cmV0dXJue3Bvc2l0aXZlOnIsbmVnYXRpdmU6bn19LGUuZXhwb3J0cy5wb3NpdGl2ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPWEodFt0Lmxlbmd0aC0xXSxlKSxpPXRbdC5sZW5ndGgtMV0scz10WzBdLGw9MDtsPHQubGVuZ3RoOysrbCxpPXMpe3ZhciBjPWEocz10W2xdLGUpOyhuPDAmJmM+MHx8bj4wJiZjPDApJiZyLnB1c2gobyhpLGMscyxuKSksYz49MCYmci5wdXNoKHMuc2xpY2UoKSksbj1jfXJldHVybiByfSxlLmV4cG9ydHMubmVnYXRpdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1hKHRbdC5sZW5ndGgtMV0sZSksaT10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsaT1zKXt2YXIgYz1hKHM9dFtsXSxlKTsobjwwJiZjPjB8fG4+MCYmYzwwKSYmci5wdXNoKG8oaSxjLHMsbikpLGM8PTAmJnIucHVzaChzLnNsaWNlKCkpLG49Y31yZXR1cm4gcn19LHsicm9idXN0LWRvdC1wcm9kdWN0Ijo0OTEsInJvYnVzdC1zdW0iOjQ5OX1dLDUxMjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17bm90X3N0cmluZzovW15zXS8sbm90X2Jvb2w6L1tedF0vLG5vdF90eXBlOi9bXlRdLyxub3RfcHJpbWl0aXZlOi9bXnZdLyxudW1iZXI6L1tkaWVmZ10vLG51bWVyaWNfYXJnOi9bYmNkaWVmZ3V4WF0vLGpzb246L1tqXS8sbm90X2pzb246L1teal0vLHRleHQ6L15bXlx4MjVdKy8sbW9kdWxvOi9eXHgyNXsyfS8scGxhY2Vob2xkZXI6L15ceDI1KD86KFsxLTldXGQqKVwkfFwoKFteKV0rKVwpKT8oXCspPygwfCdbXiRdKT8oLSk/KFxkKyk/KD86XC4oXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLGtleTovXihbYS16X11bYS16X1xkXSopL2ksa2V5X2FjY2VzczovXlwuKFthLXpfXVthLXpfXGRdKikvaSxpbmRleF9hY2Nlc3M6L15cWyhcZCspXF0vLHNpZ246L15bKy1dL307ZnVuY3Rpb24gZShyKXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD0xLGQ9ci5sZW5ndGgsZz0iIjtmb3IoYT0wO2E8ZDthKyspaWYoInN0cmluZyI9PXR5cGVvZiByW2FdKWcrPXJbYV07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHJbYV0pe2lmKChzPXJbYV0pLmtleXMpZm9yKGk9bltwXSxvPTA7bzxzLmtleXMubGVuZ3RoO28rKyl7aWYobnVsbD09aSl0aHJvdyBuZXcgRXJyb3IoZSgnW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgIiVzIiBvZiB1bmRlZmluZWQgdmFsdWUgIiVzIicscy5rZXlzW29dLHMua2V5c1tvLTFdKSk7aT1pW3Mua2V5c1tvXV19ZWxzZSBpPXMucGFyYW1fbm8/bltzLnBhcmFtX25vXTpuW3ArK107aWYodC5ub3RfdHlwZS50ZXN0KHMudHlwZSkmJnQubm90X3ByaW1pdGl2ZS50ZXN0KHMudHlwZSkmJmkgaW5zdGFuY2VvZiBGdW5jdGlvbiYmKGk9aSgpKSx0Lm51bWVyaWNfYXJnLnRlc3Qocy50eXBlKSYmIm51bWJlciIhPXR5cGVvZiBpJiZpc05hTihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGUoIltzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlVCIsaSkpO3N3aXRjaCh0Lm51bWJlci50ZXN0KHMudHlwZSkmJihmPWk+PTApLHMudHlwZSl7Y2FzZSJiIjppPXBhcnNlSW50KGksMTApLnRvU3RyaW5nKDIpO2JyZWFrO2Nhc2UiYyI6aT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGksMTApKTticmVhaztjYXNlImQiOmNhc2UiaSI6aT1wYXJzZUludChpLDEwKTticmVhaztjYXNlImoiOmk9SlNPTi5zdHJpbmdpZnkoaSxudWxsLHMud2lkdGg/cGFyc2VJbnQocy53aWR0aCk6MCk7YnJlYWs7Y2FzZSJlIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9FeHBvbmVudGlhbChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKCk7YnJlYWs7Y2FzZSJmIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9GaXhlZChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKTticmVhaztjYXNlImciOmk9cy5wcmVjaXNpb24/U3RyaW5nKE51bWJlcihpLnRvUHJlY2lzaW9uKHMucHJlY2lzaW9uKSkpOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZSJvIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2UicyI6aT1TdHJpbmcoaSksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2UidCI6aT1TdHJpbmcoISFpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJUIjppPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlInUiOmk9cGFyc2VJbnQoaSwxMCk+Pj4wO2JyZWFrO2Nhc2UidiI6aT1pLnZhbHVlT2YoKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJ4IjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9dC5qc29uLnRlc3Qocy50eXBlKT9nKz1pOighdC5udW1iZXIudGVzdChzLnR5cGUpfHxmJiYhcy5zaWduP2g9IiI6KGg9Zj8iKyI6Ii0iLGk9aS50b1N0cmluZygpLnJlcGxhY2UodC5zaWduLCIiKSksYz1zLnBhZF9jaGFyPyIwIj09PXMucGFkX2NoYXI/IjAiOnMucGFkX2NoYXIuY2hhckF0KDEpOiIgIix1PXMud2lkdGgtKGgraSkubGVuZ3RoLGw9cy53aWR0aCYmdT4wP2MucmVwZWF0KHUpOiIiLGcrPXMuYWxpZ24/aCtpK2w6IjAiPT09Yz9oK2wraTpsK2graSl9cmV0dXJuIGd9KGZ1bmN0aW9uKGUpe2lmKGlbZV0pcmV0dXJuIGlbZV07dmFyIHIsbj1lLGE9W10sbz0wO2Zvcig7bjspe2lmKG51bGwhPT0ocj10LnRleHQuZXhlYyhuKSkpYS5wdXNoKHJbMF0pO2Vsc2UgaWYobnVsbCE9PShyPXQubW9kdWxvLmV4ZWMobikpKWEucHVzaCgiJSIpO2Vsc2V7aWYobnVsbD09PShyPXQucGxhY2Vob2xkZXIuZXhlYyhuKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gdW5leHBlY3RlZCBwbGFjZWhvbGRlciIpO2lmKHJbMl0pe298PTE7dmFyIHM9W10sbD1yWzJdLGM9W107aWYobnVsbD09PShjPXQua2V5LmV4ZWMobCkpKXRocm93IG5ldyBTeW50YXhFcnJvcigiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXkiKTtmb3Iocy5wdXNoKGNbMV0pOyIiIT09KGw9bC5zdWJzdHJpbmcoY1swXS5sZW5ndGgpKTspaWYobnVsbCE9PShjPXQua2V5X2FjY2Vzcy5leGVjKGwpKSlzLnB1c2goY1sxXSk7ZWxzZXtpZihudWxsPT09KGM9dC5pbmRleF9hY2Nlc3MuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO3MucHVzaChjWzFdKX1yWzJdPXN9ZWxzZSBvfD0yO2lmKDM9PT1vKXRocm93IG5ldyBFcnJvcigiW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZCIpO2EucHVzaCh7cGxhY2Vob2xkZXI6clswXSxwYXJhbV9ubzpyWzFdLGtleXM6clsyXSxzaWduOnJbM10scGFkX2NoYXI6cls0XSxhbGlnbjpyWzVdLHdpZHRoOnJbNl0scHJlY2lzaW9uOnJbN10sdHlwZTpyWzhdfSl9bj1uLnN1YnN0cmluZyhyWzBdLmxlbmd0aCl9cmV0dXJuIGlbZV09YX0ociksYXJndW1lbnRzKX1mdW5jdGlvbiBuKHQscil7cmV0dXJuIGUuYXBwbHkobnVsbCxbdF0uY29uY2F0KHJ8fFtdKSl9dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTsidW5kZWZpbmVkIiE9dHlwZW9mIHImJihyLnNwcmludGY9ZSxyLnZzcHJpbnRmPW4pLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93LnNwcmludGY9ZSx3aW5kb3cudnNwcmludGY9bil9KCl9LHt9XSw1MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyZW50aGVzaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyIpO2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoIlNlcGFyYXRvciBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYSBSZWdFeHAiKTtyPygic3RyaW5nIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpJiYocj17aWdub3JlOnJ9KTpyPXt9LG51bGw9PXIuZXNjYXBlJiYoci5lc2NhcGU9ITApLG51bGw9PXIuaWdub3JlP3IuaWdub3JlPVsiW10iLCIoKSIsInt9IiwiPD4iLCciIicsIicnIiwiYGAiLCJcdTIwMWNcdTIwMWQiLCJceGFiXHhiYiJdOigic3RyaW5nIj09dHlwZW9mIHIuaWdub3JlJiYoci5pZ25vcmU9W3IuaWdub3JlXSksci5pZ25vcmU9ci5pZ25vcmUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0Kz10KSx0fSkpO3ZhciBpPW4ucGFyc2UodCx7ZmxhdDohMCxicmFja2V0czpyLmlnbm9yZX0pLGE9aVswXS5zcGxpdChlKTtpZihyLmVzY2FwZSl7Zm9yKHZhciBvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSxjPWFbcysxXTsiXFwiPT09bFtsLmxlbmd0aC0xXSYmIlxcIiE9PWxbbC5sZW5ndGgtMl0/KG8ucHVzaChsK2UrYykscysrKTpvLnB1c2gobCl9YT1vfWZvcihzPTA7czxhLmxlbmd0aDtzKyspaVswXT1hW3NdLGFbc109bi5zdHJpbmdpZnkoaSx7ZmxhdDohMH0pO3JldHVybiBhfX0se3BhcmVudGhlc2lzOjQ1MH1dLDUxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpLGE9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLHM9bmV3IEFycmF5KGUpLGw9MDtsPGU7KytsKXJbbF09LTEsbltsXT0wLGlbbF09ITEsYVtsXT0wLG9bbF09LTEsc1tsXT1bXTt2YXIgYyx1PTAsZj1bXSxoPVtdO2Z1bmN0aW9uIHAoZSl7dmFyIGw9W2VdLGM9W2VdO2ZvcihyW2VdPW5bZV09dSxpW2VdPSEwLHUrPTE7Yy5sZW5ndGg+MDspe2U9Y1tjLmxlbmd0aC0xXTt2YXIgcD10W2VdO2lmKGFbZV08cC5sZW5ndGgpe2Zvcih2YXIgZD1hW2VdO2Q8cC5sZW5ndGg7KytkKXt2YXIgZz1wW2RdO2lmKHJbZ108MCl7cltnXT1uW2ddPXUsaVtnXT0hMCx1Kz0xLGwucHVzaChnKSxjLnB1c2goZyk7YnJlYWt9aVtnXSYmKG5bZV09MHxNYXRoLm1pbihuW2VdLG5bZ10pKSxvW2ddPj0wJiZzW2VdLnB1c2gob1tnXSl9YVtlXT1kfWVsc2V7aWYobltlXT09PXJbZV0pe2Zvcih2YXIgdj1bXSxtPVtdLHk9MCxkPWwubGVuZ3RoLTE7ZD49MDstLWQpe3ZhciB4PWxbZF07aWYoaVt4XT0hMSx2LnB1c2goeCksbS5wdXNoKHNbeF0pLHkrPXNbeF0ubGVuZ3RoLG9beF09Zi5sZW5ndGgseD09PWUpe2wubGVuZ3RoPWQ7YnJlYWt9fWYucHVzaCh2KTtmb3IodmFyIGI9bmV3IEFycmF5KHkpLGQ9MDtkPG0ubGVuZ3RoO2QrKylmb3IodmFyIF89MDtfPG1bZF0ubGVuZ3RoO18rKyliWy0teV09bVtkXVtfXTtoLnB1c2goYil9Yy5wb3AoKX19fWZvcih2YXIgbD0wO2w8ZTsrK2wpcltsXTwwJiZwKGwpO2Zvcih2YXIgbD0wO2w8aC5sZW5ndGg7bCsrKXt2YXIgZD1oW2xdO2lmKDAhPT1kLmxlbmd0aCl7ZC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGM9W2RbMF1dO2Zvcih2YXIgZz0xO2c8ZC5sZW5ndGg7ZysrKWRbZ10hPT1kW2ctMV0mJmMucHVzaChkW2ddKTtoW2xdPWN9fXJldHVybntjb21wb25lbnRzOmYsYWRqYWNlbmN5TGlzdDpofX19LHt9XSw1MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5kaW1lbnNpb248PTApcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07aWYoMT09PXQuZGltZW5zaW9uKXJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1hKHQsZSksbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylpW3NdPVtyW3NdXSxvW3NdPVtzXTtyZXR1cm57cG9zaXRpb25zOmksY2VsbHM6b319KHQsZSk7dmFyIHI9dC5vcmRlci5qb2luKCkrIi0iK3QuZHR5cGUscz1vW3JdLGU9K2V8fDA7c3x8KHM9b1tyXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLGE9WyIndXNlIHN0cmljdCc7Il0sbz0ic3VyZmFjZU5ldHMiK3Quam9pbigiXyIpKyJkIitlO2EucHVzaCgidmFyIGNvbnRvdXI9Z2VuQ29udG91cih7Iiwib3JkZXI6WyIsdC5qb2luKCksIl0sIiwic2NhbGFyQXJndW1lbnRzOiAzLCIsInBoYXNlOmZ1bmN0aW9uIHBoYXNlRnVuYyhwLGEsYixjKSB7IHJldHVybiAocCA+IGMpfDAgfSwiKSwiZ2VuZXJpYyI9PT1lJiZhLnB1c2goImdldHRlcnM6WzBdLCIpO2Zvcih2YXIgcz1bXSxsPVtdLGM9MDtjPHI7KytjKXMucHVzaCgiZCIrYyksbC5wdXNoKCJkIitjKTtmb3IodmFyIGM9MDtjPDE8PHI7KytjKXMucHVzaCgidiIrYyksbC5wdXNoKCJ2IitjKTtmb3IodmFyIGM9MDtjPDE8PHI7KytjKXMucHVzaCgicCIrYyksbC5wdXNoKCJwIitjKTtzLnB1c2goImEiLCJiIiwiYyIpLGwucHVzaCgiYSIsImMiKSxhLnB1c2goInZlcnRleDpmdW5jdGlvbiB2ZXJ0ZXhGdW5jKCIscy5qb2luKCksIil7Iik7Zm9yKHZhciB1PVtdLGM9MDtjPDE8PHI7KytjKXUucHVzaCgiKHAiK2MrIjw8IitjKyIpIik7YS5wdXNoKCJ2YXIgbT0oIix1LmpvaW4oIisiKSwiKXwwO2lmKG09PT0wfHxtPT09IiwoMTw8KDE8PHIpKS0xLCIpe3JldHVybn0iKTt2YXIgZj1bXSxoPVtdOzE8PCgxPDxyKTw9MTI4PyhhLnB1c2goInN3aXRjaChtKXsiKSxoPWEpOmEucHVzaCgic3dpdGNoKG0+Pj43KXsiKTtmb3IodmFyIGM9MDtjPDE8PCgxPDxyKTsrK2Mpe2lmKDE8PCgxPDxyKT4xMjgmJmMlMTI4PT0wKXtmLmxlbmd0aD4wJiZoLnB1c2goIn19Iik7dmFyIHA9InZFeHRyYSIrZi5sZW5ndGg7YS5wdXNoKCJjYXNlICIsYz4+PjcsIjoiLHAsIihtJjB4N2YsIixsLmpvaW4oKSwiKTticmVhazsiKSxoPVsiZnVuY3Rpb24gIixwLCIobSwiLGwuam9pbigpLCIpe3N3aXRjaChtKXsiXSxmLnB1c2goaCl9aC5wdXNoKCJjYXNlICIsMTI3JmMsIjoiKTtmb3IodmFyIGQ9bmV3IEFycmF5KHIpLGc9bmV3IEFycmF5KHIpLHY9bmV3IEFycmF5KHIpLG09bmV3IEFycmF5KHIpLHk9MCx4PTA7eDxyOysreClkW3hdPVtdLGdbeF09W10sdlt4XT0wLG1beF09MDtmb3IodmFyIHg9MDt4PDE8PHI7Kyt4KWZvcih2YXIgYj0wO2I8cjsrK2Ipe3ZhciBfPXheMTw8YjtpZighKF8+eCkmJiEoYyYxPDxfKSE9IShjJjE8PHgpKXt2YXIgdz0xO2MmMTw8Xz9nW2JdLnB1c2goInYiK18rIi12Iit4KTooZ1tiXS5wdXNoKCJ2Iit4KyItdiIrXyksdz0tdyksdzwwPyhkW2JdLnB1c2goIi12Iit4KyItdiIrXyksdltiXSs9Mik6KGRbYl0ucHVzaCgidiIreCsiK3YiK18pLHZbYl0tPTIpLHkrPTE7Zm9yKHZhciBrPTA7azxyOysraylrIT09YiYmKF8mMTw8az9tW2tdKz0xOm1ba10tPTEpfX1mb3IodmFyIFQ9W10sYj0wO2I8cjsrK2IpaWYoMD09PWRbYl0ubGVuZ3RoKVQucHVzaCgiZCIrYisiLTAuNSIpO2Vsc2V7dmFyIEE9IiI7dltiXTwwP0E9dltiXSsiKmMiOnZbYl0+MCYmKEE9IisiK3ZbYl0rIipjIik7dmFyIE09ZFtiXS5sZW5ndGgveSouNSxTPS41K21bYl0veSouNTtULnB1c2goImQiK2IrIi0iK1MrIi0iK00rIiooIitkW2JdLmpvaW4oIisiKStBKyIpLygiK2dbYl0uam9pbigiKyIpKyIpIil9aC5wdXNoKCJhLnB1c2goWyIsVC5qb2luKCksIl0pOyIsImJyZWFrOyIpfWEucHVzaCgifX0sIiksZi5sZW5ndGg+MCYmaC5wdXNoKCJ9fSIpO2Zvcih2YXIgRT1bXSxjPTA7YzwxPDxyLTE7KytjKUUucHVzaCgidiIrYyk7RS5wdXNoKCJjMCIsImMxIiwicDAiLCJwMSIsImEiLCJiIiwiYyIpLGEucHVzaCgiY2VsbDpmdW5jdGlvbiBjZWxsRnVuYygiLEUuam9pbigpLCIpeyIpO3ZhciBDPWkoci0xKTthLnB1c2goImlmKHAwKXtiLnB1c2goIixDLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInYiK3R9KSsiXSJ9KS5qb2luKCksIil9ZWxzZXtiLnB1c2goIixDLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCk7cmV0dXJuIGUucmV2ZXJzZSgpLCJbIitlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idiIrdH0pKyJdIn0pLmpvaW4oKSwiKX19fSk7ZnVuY3Rpb24gIixvLCIoYXJyYXksbGV2ZWwpe3ZhciB2ZXJ0cz1bXSxjZWxscz1bXTtjb250b3VyKGFycmF5LHZlcnRzLGNlbGxzLGxldmVsKTtyZXR1cm4ge3Bvc2l0aW9uczp2ZXJ0cyxjZWxsczpjZWxsc307fSByZXR1cm4gIixvLCI7Iik7Zm9yKHZhciBjPTA7YzxmLmxlbmd0aDsrK2MpYS5wdXNoKGZbY10uam9pbigiIikpO3JldHVybiBuZXcgRnVuY3Rpb24oImdlbkNvbnRvdXIiLGEuam9pbigiIikpKG4pfSh0Lm9yZGVyLHQuZHR5cGUpKTtyZXR1cm4gcyh0LGUpfTt2YXIgbj10KCJuZGFycmF5LWV4dHJhY3QtY29udG91ciIpLGk9dCgidHJpYW5ndWxhdGUtaHlwZXJjdWJlIiksYT10KCJ6ZXJvLWNyb3NzaW5ncyIpO3ZhciBvPXt9fSx7Im5kYXJyYXktZXh0cmFjdC1jb250b3VyIjo0MzEsInRyaWFuZ3VsYXRlLWh5cGVyY3ViZSI6NTI1LCJ6ZXJvLWNyb3NzaW5ncyI6NTU4fV0sNTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1bXSxuPSEwLGk9ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIWV8fHIubGVuZ3RoIT09ZSk7bj0hMCk7fWNhdGNoKHQpe2k9ITAsYT10fWZpbmFsbHl7dHJ5eyFuJiZzLnJldHVybiYmcy5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgYX19cmV0dXJuIHJ9KHQsZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKSxpPTIqTWF0aC5QSSxhPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQueCxsPXQueTtyZXR1cm57eDpuKihzKj1lKS1pKihsKj1yKSthLHk6aSpzK24qbCtvfX0sbz1mdW5jdGlvbih0LGUpe3ZhciByPS41NTE5MTUwMjQ0OTQsbj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLGE9TWF0aC5jb3ModCtlKSxvPU1hdGguc2luKHQrZSk7cmV0dXJuW3t4Om4taSpyLHk6aStuKnJ9LHt4OmErbypyLHk6by1hKnJ9LHt4OmEseTpvfV19LHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dCpuLWUqcjwwPy0xOjEsYT0odCpyK2UqbikvKE1hdGguc3FydCh0KnQrZSplKSpNYXRoLnNxcnQodCp0K2UqZSkpO3JldHVybiBhPjEmJihhPTEpLGE8LTEmJihhPS0xKSxpKk1hdGguYWNvcyhhKX07ci5kZWZhdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucHgscj10LnB5LGw9dC5jeCxjPXQuY3ksdT10LnJ4LGY9dC5yeSxoPXQueEF4aXNSb3RhdGlvbixwPXZvaWQgMD09PWg/MDpoLGQ9dC5sYXJnZUFyY0ZsYWcsZz12b2lkIDA9PT1kPzA6ZCx2PXQuc3dlZXBGbGFnLG09dm9pZCAwPT09dj8wOnYseT1bXTtpZigwPT09dXx8MD09PWYpcmV0dXJuW107dmFyIHg9TWF0aC5zaW4ocCppLzM2MCksYj1NYXRoLmNvcyhwKmkvMzYwKSxfPWIqKGUtbCkvMit4KihyLWMpLzIsdz0teCooZS1sKS8yK2IqKHItYykvMjtpZigwPT09XyYmMD09PXcpcmV0dXJuW107dT1NYXRoLmFicyh1KSxmPU1hdGguYWJzKGYpO3ZhciBrPU1hdGgucG93KF8sMikvTWF0aC5wb3codSwyKStNYXRoLnBvdyh3LDIpL01hdGgucG93KGYsMik7az4xJiYodSo9TWF0aC5zcXJ0KGspLGYqPU1hdGguc3FydChrKSk7dmFyIFQ9ZnVuY3Rpb24odCxlLHIsbixhLG8sbCxjLHUsZixoLHApe3ZhciBkPU1hdGgucG93KGEsMiksZz1NYXRoLnBvdyhvLDIpLHY9TWF0aC5wb3coaCwyKSxtPU1hdGgucG93KHAsMikseT1kKmctZCptLWcqdjt5PDAmJih5PTApLHkvPWQqbStnKnY7dmFyIHg9KHk9TWF0aC5zcXJ0KHkpKihsPT09Yz8tMToxKSkqYS9vKnAsYj15Ki1vL2EqaCxfPWYqeC11KmIrKHQrcikvMix3PXUqeCtmKmIrKGUrbikvMixrPShoLXgpL2EsVD0ocC1iKS9vLEE9KC1oLXgpL2EsTT0oLXAtYikvbyxTPXMoMSwwLGssVCksRT1zKGssVCxBLE0pO3JldHVybiAwPT09YyYmRT4wJiYoRS09aSksMT09PWMmJkU8MCYmKEUrPWkpLFtfLHcsUyxFXX0oZSxyLGwsYyx1LGYsZyxtLHgsYixfLHcpLEE9bihULDQpLE09QVswXSxTPUFbMV0sRT1BWzJdLEM9QVszXSxMPU1hdGguYWJzKEMpLyhpLzQpO01hdGguYWJzKDEtTCk8MWUtNyYmKEw9MSk7dmFyIHo9TWF0aC5tYXgoTWF0aC5jZWlsKEwpLDEpO0MvPXo7Zm9yKHZhciBPPTA7Tzx6O08rKyl5LnB1c2gobyhFLEMpKSxFKz1DO3JldHVybiB5Lm1hcChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMF0sdSxmLGIseCxNLFMpLHI9ZS54LG49ZS55LGk9YSh0WzFdLHUsZixiLHgsTSxTKSxvPWkueCxzPWkueSxsPWEodFsyXSx1LGYsYix4LE0sUyk7cmV0dXJue3gxOnIseTE6bix4MjpvLHkyOnMseDpsLngseTpsLnl9fSl9LGUuZXhwb3J0cz1yLmRlZmF1bHR9LHt9XSw1MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyc2Utc3ZnLXBhdGgiKSxpPXQoImFicy1zdmctcGF0aCIpLGE9dCgibm9ybWFsaXplLXN2Zy1wYXRoIiksbz10KCJpcy1zdmctcGF0aCIpLHM9dCgiYXNzZXJ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodCkmJjE9PT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdJiYodD10WzBdKTsic3RyaW5nIj09dHlwZW9mIHQmJihzKG8odCksIlN0cmluZyBpcyBub3QgYW4gU1ZHIHBhdGguIiksdD1uKHQpKTtpZihzKEFycmF5LmlzQXJyYXkodCksIkFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLiIpLHQ9aSh0KSwhKHQ9YSh0KSkubGVuZ3RoKXJldHVyblswLDAsMCwwXTtmb3IodmFyIGU9WzEvMCwxLzAsLTEvMCwtMS8wXSxyPTAsbD10Lmxlbmd0aDtyPGw7cisrKWZvcih2YXIgYz10W3JdLnNsaWNlKDEpLHU9MDt1PGMubGVuZ3RoO3UrPTIpY1t1KzBdPGVbMF0mJihlWzBdPWNbdSswXSksY1t1KzFdPGVbMV0mJihlWzFdPWNbdSsxXSksY1t1KzBdPmVbMl0mJihlWzJdPWNbdSswXSksY1t1KzFdPmVbM10mJihlWzNdPWNbdSsxXSk7cmV0dXJuIGV9fSx7ImFicy1zdmctcGF0aCI6NTAsYXNzZXJ0OjU4LCJpcy1zdmctcGF0aCI6NDE2LCJub3JtYWxpemUtc3ZnLXBhdGgiOjUxOCwicGFyc2Utc3ZnLXBhdGgiOjQ1Mn1dLDUxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbz0wLHM9MCxsPTAsYz0wLHU9bnVsbCxmPW51bGwsaD0wLHA9MCxkPTAsZz10Lmxlbmd0aDtkPGc7ZCsrKXt2YXIgdj10W2RdLG09dlswXTtzd2l0Y2gobSl7Y2FzZSJNIjpsPXZbMV0sYz12WzJdO2JyZWFrO2Nhc2UiQSI6dmFyIHk9bih7cHg6aCxweTpwLGN4OnZbNl0sY3k6dls3XSxyeDp2WzFdLHJ5OnZbMl0seEF4aXNSb3RhdGlvbjp2WzNdLGxhcmdlQXJjRmxhZzp2WzRdLHN3ZWVwRmxhZzp2WzVdfSk7aWYoIXkubGVuZ3RoKWNvbnRpbnVlO2Zvcih2YXIgeCxiPTA7Yjx5Lmxlbmd0aDtiKyspeD15W2JdLHY9WyJDIix4LngxLHgueTEseC54Mix4LnkyLHgueCx4LnldLGI8eS5sZW5ndGgtMSYmci5wdXNoKHYpO2JyZWFrO2Nhc2UiUyI6dmFyIF89aCx3PXA7IkMiIT1lJiYiUyIhPWV8fChfKz1fLW8sdys9dy1zKSx2PVsiQyIsXyx3LHZbMV0sdlsyXSx2WzNdLHZbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KHU9MipoLXUsZj0yKnAtZik6KHU9aCxmPXApLHY9YShoLHAsdSxmLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJRIjp1PXZbMV0sZj12WzJdLHY9YShoLHAsdlsxXSx2WzJdLHZbM10sdls0XSk7YnJlYWs7Y2FzZSJMIjp2PWkoaCxwLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJIIjp2PWkoaCxwLHZbMV0scCk7YnJlYWs7Y2FzZSJWIjp2PWkoaCxwLGgsdlsxXSk7YnJlYWs7Y2FzZSJaIjp2PWkoaCxwLGwsYyl9ZT1tLGg9dlt2Lmxlbmd0aC0yXSxwPXZbdi5sZW5ndGgtMV0sdi5sZW5ndGg+ND8obz12W3YubGVuZ3RoLTRdLHM9dlt2Lmxlbmd0aC0zXSk6KG89aCxzPXApLHIucHVzaCh2KX1yZXR1cm4gcn07dmFyIG49dCgic3ZnLWFyYy10by1jdWJpYy1iZXppZXIiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVyblsiQyIsdCxlLHIsbixyLG5dfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe3JldHVyblsiQyIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19fSx7InN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyIjo1MTZ9XSw1MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJzdmctcGF0aC1ib3VuZHMiKSxhPXQoInBhcnNlLXN2Zy1wYXRoIiksbz10KCJkcmF3LXN2Zy1wYXRoIikscz10KCJpcy1zdmctcGF0aCIpLGw9dCgiYml0bWFwLXNkZiIpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdT1jLmdldENvbnRleHQoIjJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXModCkpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSB2YWxpZCBzdmcgcGF0aCBzdHJpbmciKTtlfHwoZT17fSk7dmFyIHIsZjtlLnNoYXBlPyhyPWUuc2hhcGVbMF0sZj1lLnNoYXBlWzFdKToocj1jLndpZHRoPWUud3x8ZS53aWR0aHx8MjAwLGY9Yy5oZWlnaHQ9ZS5ofHxlLmhlaWdodHx8MjAwKTt2YXIgaD1NYXRoLm1pbihyLGYpLHA9ZS5zdHJva2V8fDAsZD1lLnZpZXdib3h8fGUudmlld0JveHx8aSh0KSxnPVtyLyhkWzJdLWRbMF0pLGYvKGRbM10tZFsxXSldLHY9TWF0aC5taW4oZ1swXXx8MCxnWzFdfHwwKS8yO3UuZmlsbFN0eWxlPSJibGFjayIsdS5maWxsUmVjdCgwLDAscixmKSx1LmZpbGxTdHlsZT0id2hpdGUiLHAmJigibnVtYmVyIiE9dHlwZW9mIHAmJihwPTEpLHUuc3Ryb2tlU3R5bGU9cD4wPyJ3aGl0ZSI6ImJsYWNrIix1LmxpbmVXaWR0aD1NYXRoLmFicyhwKSk7aWYodS50cmFuc2xhdGUoLjUqciwuNSpmKSx1LnNjYWxlKHYsdiksZnVuY3Rpb24oKXtpZihudWxsIT1uKXJldHVybiBuO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7aWYodC5jYW52YXMud2lkdGg9dC5jYW52YXMuaGVpZ2h0PTEsIXdpbmRvdy5QYXRoMkQpcmV0dXJuIG49ITE7dmFyIGU9bmV3IFBhdGgyRCgiTTAsMGgxdjFoLTF2LTFaIik7dC5maWxsU3R5bGU9ImJsYWNrIix0LmZpbGwoZSk7dmFyIHI9dC5nZXRJbWFnZURhdGEoMCwwLDEsMSk7cmV0dXJuIG49ciYmci5kYXRhJiYyNTU9PT1yLmRhdGFbM119KCkpe3ZhciBtPW5ldyBQYXRoMkQodCk7dS5maWxsKG0pLHAmJnUuc3Ryb2tlKG0pfWVsc2V7dmFyIHk9YSh0KTtvKHUseSksdS5maWxsKCkscCYmdS5zdHJva2UoKX1yZXR1cm4gdS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGwodSx7Y3V0b2ZmOm51bGwhPWUuY3V0b2ZmP2UuY3V0b2ZmOi41LHJhZGl1czpudWxsIT1lLnJhZGl1cz9lLnJhZGl1czouNSpofSl9fSx7ImJpdG1hcC1zZGYiOjgzLCJkcmF3LXN2Zy1wYXRoIjoxNTksImlzLXN2Zy1wYXRoIjo0MTYsInBhcnNlLXN2Zy1wYXRoIjo0NTIsInN2Zy1wYXRoLWJvdW5kcyI6NTE3fV0sNTIwOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsaSl7dmFyIGk9aXx8e307dmFyIG89YVtlXTtvfHwobz1hW2VdPXsiICI6e2RhdGE6bmV3IEZsb2F0MzJBcnJheSgwKSxzaGFwZTouMn19KTt2YXIgcz1vW3JdO2lmKCFzKWlmKHIubGVuZ3RoPD0xfHwhL1xkLy50ZXN0KHIpKXM9b1tyXT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIGM9cltzW2xdXTtuW2krK109Y1swXSxuW2krK109Y1sxXSsxLjQsYT1NYXRoLm1heChjWzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19KG4ocix7dHJpYW5nbGVzOiEwLGZvbnQ6ZSx0ZXh0QWxpZ246aS50ZXh0QWxpZ258fCJsZWZ0Iix0ZXh0QmFzZWxpbmU6ImFscGhhYmV0aWMiLHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfX0pKTtlbHNle2Zvcih2YXIgbD1yLnNwbGl0KC8oXGR8XHMpLyksYz1uZXcgQXJyYXkobC5sZW5ndGgpLHU9MCxmPTAsaD0wO2g8bC5sZW5ndGg7KytoKWNbaF09dChlLGxbaF0pLHUrPWNbaF0uZGF0YS5sZW5ndGgsZis9Y1toXS5zaGFwZSxoPjAmJihmKz0uMDIpO2Zvcih2YXIgcD1uZXcgRmxvYXQzMkFycmF5KHUpLGQ9MCxnPS0uNSpmLGg9MDtoPGMubGVuZ3RoOysraCl7Zm9yKHZhciB2PWNbaF0uZGF0YSxtPTA7bTx2Lmxlbmd0aDttKz0yKXBbZCsrXT12W21dK2cscFtkKytdPXZbbSsxXTtnKz1jW2hdLnNoYXBlKy4wMn1zPW9bcl09e2RhdGE6cCxzaGFwZTpmfX1yZXR1cm4gc307dmFyIG49dCgidmVjdG9yaXplLXRleHQiKSxpPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGE9aS5fX1RFWFRfQ0FDSEV8fHt9O2kuX19URVhUX0NBQ0hFPXt9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6NDc0LCJ2ZWN0b3JpemUtdGV4dCI6NTM0fV0sNTIxOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQpe3ZhciByPS9eXHMrLyxuPS9ccyskLyxpPTAsYT10LnJvdW5kLG89dC5taW4scz10Lm1heCxsPXQucmFuZG9tO2Z1bmN0aW9uIGMoZSxsKXtpZihsPWx8fHt9LChlPWV8fCIiKWluc3RhbmNlb2YgYylyZXR1cm4gZTtpZighKHRoaXMgaW5zdGFuY2VvZiBjKSlyZXR1cm4gbmV3IGMoZSxsKTt2YXIgdT1mdW5jdGlvbihlKXt2YXIgaT17cjowLGc6MCxiOjB9LGE9MSxsPW51bGwsYz1udWxsLHU9bnVsbCxmPSExLGg9ITE7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1mdW5jdGlvbih0KXt0PXQucmVwbGFjZShyLCIiKS5yZXBsYWNlKG4sIiIpLnRvTG93ZXJDYXNlKCk7dmFyIGUsaT0hMTtpZihTW3RdKXQ9U1t0XSxpPSEwO2Vsc2UgaWYoInRyYW5zcGFyZW50Ij09dClyZXR1cm57cjowLGc6MCxiOjAsYTowLGZvcm1hdDoibmFtZSJ9O2lmKGU9ai5yZ2IuZXhlYyh0KSlyZXR1cm57cjplWzFdLGc6ZVsyXSxiOmVbM119O2lmKGU9ai5yZ2JhLmV4ZWModCkpcmV0dXJue3I6ZVsxXSxnOmVbMl0sYjplWzNdLGE6ZVs0XX07aWYoZT1qLmhzbC5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLGw6ZVszXX07aWYoZT1qLmhzbGEuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSxsOmVbM10sYTplWzRdfTtpZihlPWouaHN2LmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sdjplWzNdfTtpZihlPWouaHN2YS5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLHY6ZVszXSxhOmVbNF19O2lmKGU9ai5oZXg4LmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKSxnOk8oZVsyXSksYjpPKGVbM10pLGE6UihlWzRdKSxmb3JtYXQ6aT8ibmFtZSI6ImhleDgifTtpZihlPWouaGV4Ni5leGVjKHQpKXJldHVybntyOk8oZVsxXSksZzpPKGVbMl0pLGI6TyhlWzNdKSxmb3JtYXQ6aT8ibmFtZSI6ImhleCJ9O2lmKGU9ai5oZXg0LmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKyIiK2VbMV0pLGc6TyhlWzJdKyIiK2VbMl0pLGI6TyhlWzNdKyIiK2VbM10pLGE6UihlWzRdKyIiK2VbNF0pLGZvcm1hdDppPyJuYW1lIjoiaGV4OCJ9O2lmKGU9ai5oZXgzLmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKyIiK2VbMV0pLGc6TyhlWzJdKyIiK2VbMl0pLGI6TyhlWzNdKyIiK2VbM10pLGZvcm1hdDppPyJuYW1lIjoiaGV4In07cmV0dXJuITF9KGUpKTsib2JqZWN0Ij09dHlwZW9mIGUmJihWKGUucikmJlYoZS5nKSYmVihlLmIpPyhwPWUucixkPWUuZyxnPWUuYixpPXtyOjI1NSpMKHAsMjU1KSxnOjI1NSpMKGQsMjU1KSxiOjI1NSpMKGcsMjU1KX0sZj0hMCxoPSIlIj09PVN0cmluZyhlLnIpLnN1YnN0cigtMSk/InByZ2IiOiJyZ2IiKTpWKGUuaCkmJlYoZS5zKSYmVihlLnYpPyhsPUQoZS5zKSxjPUQoZS52KSxpPWZ1bmN0aW9uKGUscixuKXtlPTYqTChlLDM2MCkscj1MKHIsMTAwKSxuPUwobiwxMDApO3ZhciBpPXQuZmxvb3IoZSksYT1lLWksbz1uKigxLXIpLHM9biooMS1hKnIpLGw9biooMS0oMS1hKSpyKSxjPWklNjtyZXR1cm57cjoyNTUqW24scyxvLG8sbCxuXVtjXSxnOjI1NSpbbCxuLG4scyxvLG9dW2NdLGI6MjU1KltvLG8sbCxuLG4sc11bY119fShlLmgsbCxjKSxmPSEwLGg9ImhzdiIpOlYoZS5oKSYmVihlLnMpJiZWKGUubCkmJihsPUQoZS5zKSx1PUQoZS5sKSxpPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE7ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8MS82P3QrNiooZS10KSpyOnI8LjU/ZTpyPDIvMz90KyhlLXQpKigyLzMtcikqNjp0fWlmKHQ9TCh0LDM2MCksZT1MKGUsMTAwKSxyPUwociwxMDApLDA9PT1lKW49aT1hPXI7ZWxzZXt2YXIgcz1yPC41P3IqKDErZSk6citlLXIqZSxsPTIqci1zO249byhsLHMsdCsxLzMpLGk9byhsLHMsdCksYT1vKGwscyx0LTEvMyl9cmV0dXJue3I6MjU1Km4sZzoyNTUqaSxiOjI1NSphfX0oZS5oLGwsdSksZj0hMCxoPSJoc2wiKSxlLmhhc093blByb3BlcnR5KCJhIikmJihhPWUuYSkpO3ZhciBwLGQsZztyZXR1cm4gYT1DKGEpLHtvazpmLGZvcm1hdDplLmZvcm1hdHx8aCxyOm8oMjU1LHMoaS5yLDApKSxnOm8oMjU1LHMoaS5nLDApKSxiOm8oMjU1LHMoaS5iLDApKSxhOmF9fShlKTt0aGlzLl9vcmlnaW5hbElucHV0PWUsdGhpcy5fcj11LnIsdGhpcy5fZz11LmcsdGhpcy5fYj11LmIsdGhpcy5fYT11LmEsdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzLl9mb3JtYXQ9bC5mb3JtYXR8fHUuZm9ybWF0LHRoaXMuX2dyYWRpZW50VHlwZT1sLmdyYWRpZW50VHlwZSx0aGlzLl9yPDEmJih0aGlzLl9yPWEodGhpcy5fcikpLHRoaXMuX2c8MSYmKHRoaXMuX2c9YSh0aGlzLl9nKSksdGhpcy5fYjwxJiYodGhpcy5fYj1hKHRoaXMuX2IpKSx0aGlzLl9vaz11Lm9rLHRoaXMuX3RjX2lkPWkrK31mdW5jdGlvbiB1KHQsZSxyKXt0PUwodCwyNTUpLGU9TChlLDI1NSkscj1MKHIsMjU1KTt2YXIgbixpLGE9cyh0LGUsciksbD1vKHQsZSxyKSxjPShhK2wpLzI7aWYoYT09bCluPWk9MDtlbHNle3ZhciB1PWEtbDtzd2l0Y2goaT1jPi41P3UvKDItYS1sKTp1LyhhK2wpLGEpe2Nhc2UgdDpuPShlLXIpL3UrKGU8cj82OjApO2JyZWFrO2Nhc2UgZTpuPShyLXQpL3UrMjticmVhaztjYXNlIHI6bj0odC1lKS91KzR9bi89Nn1yZXR1cm57aDpuLHM6aSxsOmN9fWZ1bmN0aW9uIGYodCxlLHIpe3Q9TCh0LDI1NSksZT1MKGUsMjU1KSxyPUwociwyNTUpO3ZhciBuLGksYT1zKHQsZSxyKSxsPW8odCxlLHIpLGM9YSx1PWEtbDtpZihpPTA9PT1hPzA6dS9hLGE9PWwpbj0wO2Vsc2V7c3dpdGNoKGEpe2Nhc2UgdDpuPShlLXIpL3UrKGU8cj82OjApO2JyZWFrO2Nhc2UgZTpuPShyLXQpL3UrMjticmVhaztjYXNlIHI6bj0odC1lKS91KzR9bi89Nn1yZXR1cm57aDpuLHM6aSx2OmN9fWZ1bmN0aW9uIGgodCxlLHIsbil7dmFyIGk9W0koYSh0KS50b1N0cmluZygxNikpLEkoYShlKS50b1N0cmluZygxNikpLEkoYShyKS50b1N0cmluZygxNikpXTtyZXR1cm4gbiYmaVswXS5jaGFyQXQoMCk9PWlbMF0uY2hhckF0KDEpJiZpWzFdLmNoYXJBdCgwKT09aVsxXS5jaGFyQXQoMSkmJmlbMl0uY2hhckF0KDApPT1pWzJdLmNoYXJBdCgxKT9pWzBdLmNoYXJBdCgwKStpWzFdLmNoYXJBdCgwKStpWzJdLmNoYXJBdCgwKTppLmpvaW4oIiIpfWZ1bmN0aW9uIHAodCxlLHIsbil7cmV0dXJuW0koUChuKSksSShhKHQpLnRvU3RyaW5nKDE2KSksSShhKGUpLnRvU3RyaW5nKDE2KSksSShhKHIpLnRvU3RyaW5nKDE2KSldLmpvaW4oIiIpfWZ1bmN0aW9uIGQodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLnMtPWUvMTAwLHIucz16KHIucyksYyhyKX1mdW5jdGlvbiBnKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5zKz1lLzEwMCxyLnM9eihyLnMpLGMocil9ZnVuY3Rpb24gdih0KXtyZXR1cm4gYyh0KS5kZXNhdHVyYXRlKDEwMCl9ZnVuY3Rpb24gbSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIubCs9ZS8xMDAsci5sPXooci5sKSxjKHIpfWZ1bmN0aW9uIHkodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b1JnYigpO3JldHVybiByLnI9cygwLG8oMjU1LHIuci1hKC1lLzEwMCoyNTUpKSksci5nPXMoMCxvKDI1NSxyLmctYSgtZS8xMDAqMjU1KSkpLHIuYj1zKDAsbygyNTUsci5iLWEoLWUvMTAwKjI1NSkpKSxjKHIpfWZ1bmN0aW9uIHgodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLmwtPWUvMTAwLHIubD16KHIubCksYyhyKX1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9Yyh0KS50b0hzbCgpLG49KHIuaCtlKSUzNjA7cmV0dXJuIHIuaD1uPDA/MzYwK246bixjKHIpfWZ1bmN0aW9uIF8odCl7dmFyIGU9Yyh0KS50b0hzbCgpO3JldHVybiBlLmg9KGUuaCsxODApJTM2MCxjKGUpfWZ1bmN0aW9uIHcodCl7dmFyIGU9Yyh0KS50b0hzbCgpLHI9ZS5oO3JldHVybltjKHQpLGMoe2g6KHIrMTIwKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzI0MCklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIGsodCl7dmFyIGU9Yyh0KS50b0hzbCgpLHI9ZS5oO3JldHVybltjKHQpLGMoe2g6KHIrOTApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMTgwKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzI3MCklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIFQodCl7dmFyIGU9Yyh0KS50b0hzbCgpLHI9ZS5oO3JldHVybltjKHQpLGMoe2g6KHIrNzIpJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjE2KSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gQSh0LGUscil7ZT1lfHw2LHI9cnx8MzA7dmFyIG49Yyh0KS50b0hzbCgpLGk9MzYwL3IsYT1bYyh0KV07Zm9yKG4uaD0obi5oLShpKmU+PjEpKzcyMCklMzYwOy0tZTspbi5oPShuLmgraSklMzYwLGEucHVzaChjKG4pKTtyZXR1cm4gYX1mdW5jdGlvbiBNKHQsZSl7ZT1lfHw2O2Zvcih2YXIgcj1jKHQpLnRvSHN2KCksbj1yLmgsaT1yLnMsYT1yLnYsbz1bXSxzPTEvZTtlLS07KW8ucHVzaChjKHtoOm4sczppLHY6YX0pKSxhPShhK3MpJTE7cmV0dXJuIG99Yy5wcm90b3R5cGU9e2lzRGFyazpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJyaWdodG5lc3MoKTwxMjh9LGlzTGlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0RhcmsoKX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9va30sZ2V0T3JpZ2luYWxJbnB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW5hbElucHV0fSxnZXRGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9ybWF0fSxnZXRBbHBoYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hfSxnZXRCcmlnaHRuZXNzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b1JnYigpO3JldHVybigyOTkqdC5yKzU4Nyp0LmcrMTE0KnQuYikvMWUzfSxnZXRMdW1pbmFuY2U6ZnVuY3Rpb24oKXt2YXIgZSxyLG4saT10aGlzLnRvUmdiKCk7cmV0dXJuIGU9aS5yLzI1NSxyPWkuZy8yNTUsbj1pLmIvMjU1LC4yMTI2KihlPD0uMDM5Mjg/ZS8xMi45Mjp0LnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpKSsuNzE1Mioocjw9LjAzOTI4P3IvMTIuOTI6dC5wb3coKHIrLjA1NSkvMS4wNTUsMi40KSkrLjA3MjIqKG48PS4wMzkyOD9uLzEyLjkyOnQucG93KChuKy4wNTUpLzEuMDU1LDIuNCkpfSxzZXRBbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYT1DKHQpLHRoaXMuX3JvdW5kQT1hKDEwMCp0aGlzLl9hKS8xMDAsdGhpc30sdG9Ic3Y6ZnVuY3Rpb24oKXt2YXIgdD1mKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqdC5oLHM6dC5zLHY6dC52LGE6dGhpcy5fYX19LHRvSHN2U3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9Zih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksZT1hKDM2MCp0LmgpLHI9YSgxMDAqdC5zKSxuPWEoMTAwKnQudik7cmV0dXJuIDE9PXRoaXMuX2E/ImhzdigiK2UrIiwgIityKyIlLCAiK24rIiUpIjoiaHN2YSgiK2UrIiwgIityKyIlLCAiK24rIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9Ic2w6ZnVuY3Rpb24oKXt2YXIgdD11KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqdC5oLHM6dC5zLGw6dC5sLGE6dGhpcy5fYX19LHRvSHNsU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksZT1hKDM2MCp0LmgpLHI9YSgxMDAqdC5zKSxuPWEoMTAwKnQubCk7cmV0dXJuIDE9PXRoaXMuX2E/ImhzbCgiK2UrIiwgIityKyIlLCAiK24rIiUpIjoiaHNsYSgiK2UrIiwgIityKyIlLCAiK24rIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9IZXg6ZnVuY3Rpb24odCl7cmV0dXJuIGgodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdCl9LHRvSGV4U3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiIjIit0aGlzLnRvSGV4KHQpfSx0b0hleDg6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89W0koYSh0KS50b1N0cmluZygxNikpLEkoYShlKS50b1N0cmluZygxNikpLEkoYShyKS50b1N0cmluZygxNikpLEkoUChuKSldO2lmKGkmJm9bMF0uY2hhckF0KDApPT1vWzBdLmNoYXJBdCgxKSYmb1sxXS5jaGFyQXQoMCk9PW9bMV0uY2hhckF0KDEpJiZvWzJdLmNoYXJBdCgwKT09b1syXS5jaGFyQXQoMSkmJm9bM10uY2hhckF0KDApPT1vWzNdLmNoYXJBdCgxKSlyZXR1cm4gb1swXS5jaGFyQXQoMCkrb1sxXS5jaGFyQXQoMCkrb1syXS5jaGFyQXQoMCkrb1szXS5jaGFyQXQoMCk7cmV0dXJuIG8uam9pbigiIil9KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EsdCl9LHRvSGV4OFN0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4iIyIrdGhpcy50b0hleDgodCl9LHRvUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6YSh0aGlzLl9yKSxnOmEodGhpcy5fZyksYjphKHRoaXMuX2IpLGE6dGhpcy5fYX19LHRvUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/InJnYigiK2EodGhpcy5fcikrIiwgIithKHRoaXMuX2cpKyIsICIrYSh0aGlzLl9iKSsiKSI6InJnYmEoIithKHRoaXMuX3IpKyIsICIrYSh0aGlzLl9nKSsiLCAiK2EodGhpcy5fYikrIiwgIit0aGlzLl9yb3VuZEErIikifSx0b1BlcmNlbnRhZ2VSZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjphKDEwMCpMKHRoaXMuX3IsMjU1KSkrIiUiLGc6YSgxMDAqTCh0aGlzLl9nLDI1NSkpKyIlIixiOmEoMTAwKkwodGhpcy5fYiwyNTUpKSsiJSIsYTp0aGlzLl9hfX0sdG9QZXJjZW50YWdlUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/InJnYigiK2EoMTAwKkwodGhpcy5fciwyNTUpKSsiJSwgIithKDEwMCpMKHRoaXMuX2csMjU1KSkrIiUsICIrYSgxMDAqTCh0aGlzLl9iLDI1NSkpKyIlKSI6InJnYmEoIithKDEwMCpMKHRoaXMuX3IsMjU1KSkrIiUsICIrYSgxMDAqTCh0aGlzLl9nLDI1NSkpKyIlLCAiK2EoMTAwKkwodGhpcy5fYiwyNTUpKSsiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX2E/InRyYW5zcGFyZW50IjohKHRoaXMuX2E8MSkmJihFW2godGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsITApXXx8ITEpfSx0b0ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT0iIyIrcCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hKSxyPWUsbj10aGlzLl9ncmFkaWVudFR5cGU/IkdyYWRpZW50VHlwZSA9IDEsICI6IiI7aWYodCl7dmFyIGk9Yyh0KTtyPSIjIitwKGkuX3IsaS5fZyxpLl9iLGkuX2EpfXJldHVybiJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoIituKyJzdGFydENvbG9yc3RyPSIrZSsiLGVuZENvbG9yc3RyPSIrcisiKSJ9LHRvU3RyaW5nOmZ1bmN0aW9uKHQpe3ZhciBlPSEhdDt0PXR8fHRoaXMuX2Zvcm1hdDt2YXIgcj0hMSxuPXRoaXMuX2E8MSYmdGhpcy5fYT49MDtyZXR1cm4gZXx8IW58fCJoZXgiIT09dCYmImhleDYiIT09dCYmImhleDMiIT09dCYmImhleDQiIT09dCYmImhleDgiIT09dCYmIm5hbWUiIT09dD8oInJnYiI9PT10JiYocj10aGlzLnRvUmdiU3RyaW5nKCkpLCJwcmdiIj09PXQmJihyPXRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCkpLCJoZXgiIT09dCYmImhleDYiIT09dHx8KHI9dGhpcy50b0hleFN0cmluZygpKSwiaGV4MyI9PT10JiYocj10aGlzLnRvSGV4U3RyaW5nKCEwKSksImhleDQiPT09dCYmKHI9dGhpcy50b0hleDhTdHJpbmcoITApKSwiaGV4OCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZygpKSwibmFtZSI9PT10JiYocj10aGlzLnRvTmFtZSgpKSwiaHNsIj09PXQmJihyPXRoaXMudG9Ic2xTdHJpbmcoKSksImhzdiI9PT10JiYocj10aGlzLnRvSHN2U3RyaW5nKCkpLHJ8fHRoaXMudG9IZXhTdHJpbmcoKSk6Im5hbWUiPT09dCYmMD09PXRoaXMuX2E/dGhpcy50b05hbWUoKTp0aGlzLnRvUmdiU3RyaW5nKCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcy50b1N0cmluZygpKX0sX2FwcGx5TW9kaWZpY2F0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChlKSkpO3JldHVybiB0aGlzLl9yPXIuX3IsdGhpcy5fZz1yLl9nLHRoaXMuX2I9ci5fYix0aGlzLnNldEFscGhhKHIuX2EpLHRoaXN9LGxpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obSxhcmd1bWVudHMpfSxicmlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih5LGFyZ3VtZW50cyl9LGRhcmtlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih4LGFyZ3VtZW50cyl9LGRlc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZCxhcmd1bWVudHMpfSxzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihnLGFyZ3VtZW50cyl9LGdyZXlzY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LHNwaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oYixhcmd1bWVudHMpfSxfYXBwbHlDb21iaW5hdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiB0LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSl9LGFuYWxvZ291czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKEEsYXJndW1lbnRzKX0sY29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKF8sYXJndW1lbnRzKX0sbW9ub2Nocm9tYXRpYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKE0sYXJndW1lbnRzKX0sc3BsaXRjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oVCxhcmd1bWVudHMpfSx0cmlhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHcsYXJndW1lbnRzKX0sdGV0cmFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oayxhcmd1bWVudHMpfX0sYy5mcm9tUmF0aW89ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihyW25dPSJhIj09PW4/dFtuXTpEKHRbbl0pKTt0PXJ9cmV0dXJuIGModCxlKX0sYy5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCF0fHwhZSkmJmModCkudG9SZ2JTdHJpbmcoKT09YyhlKS50b1JnYlN0cmluZygpfSxjLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiBjLmZyb21SYXRpbyh7cjpsKCksZzpsKCksYjpsKCl9KX0sYy5taXg9ZnVuY3Rpb24odCxlLHIpe3I9MD09PXI/MDpyfHw1MDt2YXIgbj1jKHQpLnRvUmdiKCksaT1jKGUpLnRvUmdiKCksYT1yLzEwMDtyZXR1cm4gYyh7cjooaS5yLW4ucikqYStuLnIsZzooaS5nLW4uZykqYStuLmcsYjooaS5iLW4uYikqYStuLmIsYTooaS5hLW4uYSkqYStuLmF9KX0sYy5yZWFkYWJpbGl0eT1mdW5jdGlvbihlLHIpe3ZhciBuPWMoZSksaT1jKHIpO3JldHVybih0Lm1heChuLmdldEx1bWluYW5jZSgpLGkuZ2V0THVtaW5hbmNlKCkpKy4wNSkvKHQubWluKG4uZ2V0THVtaW5hbmNlKCksaS5nZXRMdW1pbmFuY2UoKSkrLjA1KX0sYy5pc1JlYWRhYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9Yy5yZWFkYWJpbGl0eSh0LGUpO3N3aXRjaChpPSExLChuPWZ1bmN0aW9uKHQpe3ZhciBlLHI7ZT0oKHQ9dHx8e2xldmVsOiJBQSIsc2l6ZToic21hbGwifSkubGV2ZWx8fCJBQSIpLnRvVXBwZXJDYXNlKCkscj0odC5zaXplfHwic21hbGwiKS50b0xvd2VyQ2FzZSgpLCJBQSIhPT1lJiYiQUFBIiE9PWUmJihlPSJBQSIpOyJzbWFsbCIhPT1yJiYibGFyZ2UiIT09ciYmKHI9InNtYWxsIik7cmV0dXJue2xldmVsOmUsc2l6ZTpyfX0ocikpLmxldmVsK24uc2l6ZSl7Y2FzZSJBQXNtYWxsIjpjYXNlIkFBQWxhcmdlIjppPWE+PTQuNTticmVhaztjYXNlIkFBbGFyZ2UiOmk9YT49MzticmVhaztjYXNlIkFBQXNtYWxsIjppPWE+PTd9cmV0dXJuIGl9LGMubW9zdFJlYWRhYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzPW51bGwsbD0wO2k9KHI9cnx8e30pLmluY2x1ZGVGYWxsYmFja0NvbG9ycyxhPXIubGV2ZWwsbz1yLnNpemU7Zm9yKHZhciB1PTA7dTxlLmxlbmd0aDt1KyspKG49Yy5yZWFkYWJpbGl0eSh0LGVbdV0pKT5sJiYobD1uLHM9YyhlW3VdKSk7cmV0dXJuIGMuaXNSZWFkYWJsZSh0LHMse2xldmVsOmEsc2l6ZTpvfSl8fCFpP3M6KHIuaW5jbHVkZUZhbGxiYWNrQ29sb3JzPSExLGMubW9zdFJlYWRhYmxlKHQsWyIjZmZmIiwiIzAwMCJdLHIpKX07dmFyIFM9Yy5uYW1lcz17YWxpY2VibHVlOiJmMGY4ZmYiLGFudGlxdWV3aGl0ZToiZmFlYmQ3IixhcXVhOiIwZmYiLGFxdWFtYXJpbmU6IjdmZmZkNCIsYXp1cmU6ImYwZmZmZiIsYmVpZ2U6ImY1ZjVkYyIsYmlzcXVlOiJmZmU0YzQiLGJsYWNrOiIwMDAiLGJsYW5jaGVkYWxtb25kOiJmZmViY2QiLGJsdWU6IjAwZiIsYmx1ZXZpb2xldDoiOGEyYmUyIixicm93bjoiYTUyYTJhIixidXJseXdvb2Q6ImRlYjg4NyIsYnVybnRzaWVubmE6ImVhN2U1ZCIsY2FkZXRibHVlOiI1ZjllYTAiLGNoYXJ0cmV1c2U6IjdmZmYwMCIsY2hvY29sYXRlOiJkMjY5MWUiLGNvcmFsOiJmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiI2NDk1ZWQiLGNvcm5zaWxrOiJmZmY4ZGMiLGNyaW1zb246ImRjMTQzYyIsY3lhbjoiMGZmIixkYXJrYmx1ZToiMDAwMDhiIixkYXJrY3lhbjoiMDA4YjhiIixkYXJrZ29sZGVucm9kOiJiODg2MGIiLGRhcmtncmF5OiJhOWE5YTkiLGRhcmtncmVlbjoiMDA2NDAwIixkYXJrZ3JleToiYTlhOWE5IixkYXJra2hha2k6ImJkYjc2YiIsZGFya21hZ2VudGE6IjhiMDA4YiIsZGFya29saXZlZ3JlZW46IjU1NmIyZiIsZGFya29yYW5nZToiZmY4YzAwIixkYXJrb3JjaGlkOiI5OTMyY2MiLGRhcmtyZWQ6IjhiMDAwMCIsZGFya3NhbG1vbjoiZTk5NjdhIixkYXJrc2VhZ3JlZW46IjhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiNDgzZDhiIixkYXJrc2xhdGVncmF5OiIyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IjJmNGY0ZiIsZGFya3R1cnF1b2lzZToiMDBjZWQxIixkYXJrdmlvbGV0OiI5NDAwZDMiLGRlZXBwaW5rOiJmZjE0OTMiLGRlZXBza3libHVlOiIwMGJmZmYiLGRpbWdyYXk6IjY5Njk2OSIsZGltZ3JleToiNjk2OTY5Iixkb2RnZXJibHVlOiIxZTkwZmYiLGZpcmVicmljazoiYjIyMjIyIixmbG9yYWx3aGl0ZToiZmZmYWYwIixmb3Jlc3RncmVlbjoiMjI4YjIyIixmdWNoc2lhOiJmMGYiLGdhaW5zYm9ybzoiZGNkY2RjIixnaG9zdHdoaXRlOiJmOGY4ZmYiLGdvbGQ6ImZmZDcwMCIsZ29sZGVucm9kOiJkYWE1MjAiLGdyYXk6IjgwODA4MCIsZ3JlZW46IjAwODAwMCIsZ3JlZW55ZWxsb3c6ImFkZmYyZiIsZ3JleToiODA4MDgwIixob25leWRldzoiZjBmZmYwIixob3RwaW5rOiJmZjY5YjQiLGluZGlhbnJlZDoiY2Q1YzVjIixpbmRpZ286IjRiMDA4MiIsaXZvcnk6ImZmZmZmMCIsa2hha2k6ImYwZTY4YyIsbGF2ZW5kZXI6ImU2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiZmZmMGY1IixsYXduZ3JlZW46IjdjZmMwMCIsbGVtb25jaGlmZm9uOiJmZmZhY2QiLGxpZ2h0Ymx1ZToiYWRkOGU2IixsaWdodGNvcmFsOiJmMDgwODAiLGxpZ2h0Y3lhbjoiZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiZmFmYWQyIixsaWdodGdyYXk6ImQzZDNkMyIsbGlnaHRncmVlbjoiOTBlZTkwIixsaWdodGdyZXk6ImQzZDNkMyIsbGlnaHRwaW5rOiJmZmI2YzEiLGxpZ2h0c2FsbW9uOiJmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IjIwYjJhYSIsbGlnaHRza3libHVlOiI4N2NlZmEiLGxpZ2h0c2xhdGVncmF5OiI3ODkiLGxpZ2h0c2xhdGVncmV5OiI3ODkiLGxpZ2h0c3RlZWxibHVlOiJiMGM0ZGUiLGxpZ2h0eWVsbG93OiJmZmZmZTAiLGxpbWU6IjBmMCIsbGltZWdyZWVuOiIzMmNkMzIiLGxpbmVuOiJmYWYwZTYiLG1hZ2VudGE6ImYwZiIsbWFyb29uOiI4MDAwMDAiLG1lZGl1bWFxdWFtYXJpbmU6IjY2Y2RhYSIsbWVkaXVtYmx1ZToiMDAwMGNkIixtZWRpdW1vcmNoaWQ6ImJhNTVkMyIsbWVkaXVtcHVycGxlOiI5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IjQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiJjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiMTkxOTcwIixtaW50Y3JlYW06ImY1ZmZmYSIsbWlzdHlyb3NlOiJmZmU0ZTEiLG1vY2Nhc2luOiJmZmU0YjUiLG5hdmFqb3doaXRlOiJmZmRlYWQiLG5hdnk6IjAwMDA4MCIsb2xkbGFjZToiZmRmNWU2IixvbGl2ZToiODA4MDAwIixvbGl2ZWRyYWI6IjZiOGUyMyIsb3JhbmdlOiJmZmE1MDAiLG9yYW5nZXJlZDoiZmY0NTAwIixvcmNoaWQ6ImRhNzBkNiIscGFsZWdvbGRlbnJvZDoiZWVlOGFhIixwYWxlZ3JlZW46Ijk4ZmI5OCIscGFsZXR1cnF1b2lzZToiYWZlZWVlIixwYWxldmlvbGV0cmVkOiJkYjcwOTMiLHBhcGF5YXdoaXA6ImZmZWZkNSIscGVhY2hwdWZmOiJmZmRhYjkiLHBlcnU6ImNkODUzZiIscGluazoiZmZjMGNiIixwbHVtOiJkZGEwZGQiLHBvd2RlcmJsdWU6ImIwZTBlNiIscHVycGxlOiI4MDAwODAiLHJlYmVjY2FwdXJwbGU6IjY2MzM5OSIscmVkOiJmMDAiLHJvc3licm93bjoiYmM4ZjhmIixyb3lhbGJsdWU6IjQxNjllMSIsc2FkZGxlYnJvd246IjhiNDUxMyIsc2FsbW9uOiJmYTgwNzIiLHNhbmR5YnJvd246ImY0YTQ2MCIsc2VhZ3JlZW46IjJlOGI1NyIsc2Vhc2hlbGw6ImZmZjVlZSIsc2llbm5hOiJhMDUyMmQiLHNpbHZlcjoiYzBjMGMwIixza3libHVlOiI4N2NlZWIiLHNsYXRlYmx1ZToiNmE1YWNkIixzbGF0ZWdyYXk6IjcwODA5MCIsc2xhdGVncmV5OiI3MDgwOTAiLHNub3c6ImZmZmFmYSIsc3ByaW5nZ3JlZW46IjAwZmY3ZiIsc3RlZWxibHVlOiI0NjgyYjQiLHRhbjoiZDJiNDhjIix0ZWFsOiIwMDgwODAiLHRoaXN0bGU6ImQ4YmZkOCIsdG9tYXRvOiJmZjYzNDciLHR1cnF1b2lzZToiNDBlMGQwIix2aW9sZXQ6ImVlODJlZSIsd2hlYXQ6ImY1ZGViMyIsd2hpdGU6ImZmZiIsd2hpdGVzbW9rZToiZjVmNWY1Iix5ZWxsb3c6ImZmMCIseWVsbG93Z3JlZW46IjlhY2QzMiJ9LEU9Yy5oZXhOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVt0W3JdXT1yKTtyZXR1cm4gZX0oUyk7ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdD1wYXJzZUZsb2F0KHQpLChpc05hTih0KXx8dDwwfHx0PjEpJiYodD0xKSx0fWZ1bmN0aW9uIEwoZSxyKXsoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYtMSE9dC5pbmRleE9mKCIuIikmJjE9PT1wYXJzZUZsb2F0KHQpfSkoZSkmJihlPSIxMDAlIik7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYtMSE9dC5pbmRleE9mKCIlIil9KGUpO3JldHVybiBlPW8ocixzKDAscGFyc2VGbG9hdChlKSkpLG4mJihlPXBhcnNlSW50KGUqciwxMCkvMTAwKSx0LmFicyhlLXIpPDFlLTY/MTplJXIvcGFyc2VGbG9hdChyKX1mdW5jdGlvbiB6KHQpe3JldHVybiBvKDEscygwLHQpKX1mdW5jdGlvbiBPKHQpe3JldHVybiBwYXJzZUludCh0LDE2KX1mdW5jdGlvbiBJKHQpe3JldHVybiAxPT10Lmxlbmd0aD8iMCIrdDoiIit0fWZ1bmN0aW9uIEQodCl7cmV0dXJuIHQ8PTEmJih0PTEwMCp0KyIlIiksdH1mdW5jdGlvbiBQKGUpe3JldHVybiB0LnJvdW5kKDI1NSpwYXJzZUZsb2F0KGUpKS50b1N0cmluZygxNil9ZnVuY3Rpb24gUih0KXtyZXR1cm4gTyh0KS8yNTV9dmFyIEYsQixOLGo9KEI9IltcXHN8XFwoXSsoIisoRj0iKD86Wy1cXCtdP1xcZCpcXC5cXGQrJT8pfCg/OlstXFwrXT9cXGQrJT8pIikrIilbLHxcXHNdKygiK0YrIilbLHxcXHNdKygiK0YrIilcXHMqXFwpPyIsTj0iW1xcc3xcXChdKygiK0YrIilbLHxcXHNdKygiK0YrIilbLHxcXHNdKygiK0YrIilbLHxcXHNdKygiK0YrIilcXHMqXFwpPyIse0NTU19VTklUOm5ldyBSZWdFeHAoRikscmdiOm5ldyBSZWdFeHAoInJnYiIrQikscmdiYTpuZXcgUmVnRXhwKCJyZ2JhIitOKSxoc2w6bmV3IFJlZ0V4cCgiaHNsIitCKSxoc2xhOm5ldyBSZWdFeHAoImhzbGEiK04pLGhzdjpuZXcgUmVnRXhwKCJoc3YiK0IpLGhzdmE6bmV3IFJlZ0V4cCgiaHN2YSIrTiksaGV4MzovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4NjovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC8saGV4NDovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDg6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL30pO2Z1bmN0aW9uIFYodCl7cmV0dXJuISFqLkNTU19VTklULmV4ZWModCl9InVuZGVmaW5lZCIhPXR5cGVvZiBlJiZlLmV4cG9ydHM/ZS5leHBvcnRzPWM6d2luZG93LnRpbnljb2xvcj1jfShNYXRoKX0se31dLDUyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9aSxlLmV4cG9ydHMuZmxvYXQzMj1lLmV4cG9ydHMuZmxvYXQ9aSxlLmV4cG9ydHMuZnJhY3QzMj1lLmV4cG9ydHMuZnJhY3Q9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGgpe2Zvcih2YXIgZT1pKHQpLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspZVtyXT10W3JdLWVbcl07cmV0dXJuIGV9cmV0dXJuIGkodC1pKHQpKX07dmFyIG49bmV3IEZsb2F0MzJBcnJheSgxKTtmdW5jdGlvbiBpKHQpe2lmKHQubGVuZ3RoKXtpZih0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiB0O3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkodCk7cmV0dXJuIGUuc2V0KHQpLGV9cmV0dXJuIG5bMF09dCxuWzBdfX0se31dLDUyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwYXJzZS11bml0Iik7ZS5leHBvcnRzPW87dmFyIGk9OTY7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPW4oZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTtyZXR1cm4gclswXSpvKHJbMV0sdCl9ZnVuY3Rpb24gbyh0LGUpe3N3aXRjaChlPWV8fGRvY3VtZW50LmJvZHksdD0odHx8InB4IikudHJpbSgpLnRvTG93ZXJDYXNlKCksZSE9PXdpbmRvdyYmZSE9PWRvY3VtZW50fHwoZT1kb2N1bWVudC5ib2R5KSx0KXtjYXNlIiUiOnJldHVybiBlLmNsaWVudEhlaWdodC8xMDA7Y2FzZSJjaCI6Y2FzZSJleCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5zdHlsZVsiZm9udC1zaXplIl09IjEyOCIrdCxlLmFwcGVuZENoaWxkKHIpO3ZhciBuPWEociwiZm9udC1zaXplIikvMTI4O3JldHVybiBlLnJlbW92ZUNoaWxkKHIpLG59KHQsZSk7Y2FzZSJlbSI6cmV0dXJuIGEoZSwiZm9udC1zaXplIik7Y2FzZSJyZW0iOnJldHVybiBhKGRvY3VtZW50LmJvZHksImZvbnQtc2l6ZSIpO2Nhc2UidnciOnJldHVybiB3aW5kb3cuaW5uZXJXaWR0aC8xMDA7Y2FzZSJ2aCI6cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodC8xMDA7Y2FzZSJ2bWluIjpyZXR1cm4gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJ2bWF4IjpyZXR1cm4gTWF0aC5tYXgod2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJpbiI6cmV0dXJuIGk7Y2FzZSJjbSI6cmV0dXJuIGkvMi41NDtjYXNlIm1tIjpyZXR1cm4gaS8yNS40O2Nhc2UicHQiOnJldHVybiBpLzcyO2Nhc2UicGMiOnJldHVybiBpLzZ9cmV0dXJuIDF9fSx7InBhcnNlLXVuaXQiOjQ1M31dLDUyNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHI9ZnVuY3Rpb24odCl7aWYobnVsbD09KHI9dC50cmFuc2Zvcm0pKXJldHVybiBlO3ZhciByLG4saSxhPXIuc2NhbGVbMF0sbz1yLnNjYWxlWzFdLHM9ci50cmFuc2xhdGVbMF0sbD1yLnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KG49aT0wKSx0WzBdPShuKz10WzBdKSphK3MsdFsxXT0oaSs9dFsxXSkqbytsLHR9fSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYmJveDtmdW5jdGlvbiBuKHQpe2xbMF09dFswXSxsWzFdPXRbMV0scyhsKSxsWzBdPGMmJihjPWxbMF0pLGxbMF0+ZiYmKGY9bFswXSksbFsxXTx1JiYodT1sWzFdKSxsWzFdPmgmJihoPWxbMV0pfWZ1bmN0aW9uIGkodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKGkpO2JyZWFrO2Nhc2UiUG9pbnQiOm4odC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2gobil9fWlmKCFlKXt2YXIgYSxvLHM9cih0KSxsPW5ldyBBcnJheSgyKSxjPTEvMCx1PWMsZj0tYyxoPS1jO2ZvcihvIGluIHQuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPXQubGVuZ3RoOysrZTxyOylhPXRbZV0sbFswXT1hWzBdLGxbMV09YVsxXSxzKGwsZSksbFswXTxjJiYoYz1sWzBdKSxsWzBdPmYmJihmPWxbMF0pLGxbMV08dSYmKHU9bFsxXSksbFsxXT5oJiYoaD1sWzFdKX0pLHQub2JqZWN0cylpKHQub2JqZWN0c1tvXSk7ZT10LmJib3g9W2MsdSxmLGhdfXJldHVybiBlfSxpPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1uLWU7aTwtLW47KXI9dFtpXSx0W2krK109dFtuXSx0W25dPXJ9O2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmlkLG49ZS5iYm94LGk9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxhPW8odCxlKTtyZXR1cm4gbnVsbD09ciYmbnVsbD09bj97dHlwZToiRmVhdHVyZSIscHJvcGVydGllczppLGdlb21ldHJ5OmF9Om51bGw9PW4/e3R5cGU6IkZlYXR1cmUiLGlkOnIscHJvcGVydGllczppLGdlb21ldHJ5OmF9Ont0eXBlOiJGZWF0dXJlIixpZDpyLGJib3g6bixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6YX19ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXIodCksYT10LmFyY3M7ZnVuY3Rpb24gbyh0LGUpe2UubGVuZ3RoJiZlLnBvcCgpO2Zvcih2YXIgcj1hW3Q8MD9+dDp0XSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWUucHVzaChuKHJbb10uc2xpY2UoKSxvKSk7dDwwJiZpKGUscyl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0LnNsaWNlKCkpfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipbyh0W3JdLGUpO3JldHVybiBlLmxlbmd0aDwyJiZlLnB1c2goZVswXS5zbGljZSgpKSxlfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPWwodCk7ZS5sZW5ndGg8NDspZS5wdXNoKGVbMF0uc2xpY2UoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5tYXAoYyl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLnR5cGU7c3dpdGNoKG4pe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm57dHlwZTpuLGdlb21ldHJpZXM6ZS5nZW9tZXRyaWVzLm1hcCh0KX07Y2FzZSJQb2ludCI6cj1zKGUuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6cj1lLmNvb3JkaW5hdGVzLm1hcChzKTticmVhaztjYXNlIkxpbmVTdHJpbmciOnI9bChlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyPWUuYXJjcy5tYXAobCk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpyPXUoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1lLmFyY3MubWFwKHUpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJue3R5cGU6bixjb29yZGluYXRlczpyfX0oZSl9dmFyIHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxuPXt9LGk9e30sYT1bXSxvPS0xO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIG4gaW4gdCl7dmFyIGk9dFtuXTtkZWxldGUgZVtpLnN0YXJ0XSxkZWxldGUgaS5zdGFydCxkZWxldGUgaS5lbmQsaS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdPTF9KSxhLnB1c2goaSl9fXJldHVybiBlLmZvckVhY2goZnVuY3Rpb24ocixuKXt2YXIgaSxhPXQuYXJjc1tyPDA/fnI6cl07YS5sZW5ndGg8MyYmIWFbMV1bMF0mJiFhWzFdWzFdJiYoaT1lWysrb10sZVtvXT1yLGVbbl09aSl9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHIsYSxvPWZ1bmN0aW9uKGUpe3ZhciByLG49dC5hcmNzW2U8MD9+ZTplXSxpPW5bMF07dC50cmFuc2Zvcm0/KHI9WzAsMF0sbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbMF0rPXRbMF0sclsxXSs9dFsxXX0pKTpyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU8MD9bcixpXTpbaSxyXX0oZSkscz1vWzBdLGw9b1sxXTtpZihyPWlbc10paWYoZGVsZXRlIGlbci5lbmRdLHIucHVzaChlKSxyLmVuZD1sLGE9bltsXSl7ZGVsZXRlIG5bYS5zdGFydF07dmFyIGM9YT09PXI/cjpyLmNvbmNhdChhKTtuW2Muc3RhcnQ9ci5zdGFydF09aVtjLmVuZD1hLmVuZF09Y31lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIGlmKHI9bltsXSlpZihkZWxldGUgbltyLnN0YXJ0XSxyLnVuc2hpZnQoZSksci5zdGFydD1zLGE9aVtzXSl7ZGVsZXRlIGlbYS5lbmRdO3ZhciB1PWE9PT1yP3I6YS5jb25jYXQocik7blt1LnN0YXJ0PWEuc3RhcnRdPWlbdS5lbmQ9ci5lbmRdPXV9ZWxzZSBuW3Iuc3RhcnRdPWlbci5lbmRdPXI7ZWxzZSBuWyhyPVtlXSkuc3RhcnQ9c109aVtyLmVuZD1sXT1yfSkscyhpLG4pLHMobixpKSxlLmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF18fGEucHVzaChbdF0pfSksYX07ZnVuY3Rpb24gbCh0LGUscil7dmFyIG4saSxhO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSluPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPVtdLGE9W107ZnVuY3Rpb24gbyh0KXt2YXIgZT10PDA/fnQ6dDsoYVtlXXx8KGFbZV09W10pKS5wdXNoKHtpOnQsZzpufSl9ZnVuY3Rpb24gcyh0KXt0LmZvckVhY2gobyl9ZnVuY3Rpb24gbCh0KXt0LmZvckVhY2gocyl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7c3dpdGNoKG49ZSxlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIkxpbmVTdHJpbmciOnMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpsKGUuYXJjcyk7YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOmUuYXJjcy5mb3JFYWNoKGwpfX0oZSksYS5mb3JFYWNoKG51bGw9PXI/ZnVuY3Rpb24odCl7aS5wdXNoKHRbMF0uaSl9OmZ1bmN0aW9uKHQpe3IodFswXS5nLHRbdC5sZW5ndGgtMV0uZykmJmkucHVzaCh0WzBdLmkpfSksaX0oMCxlLHIpO2Vsc2UgZm9yKGk9MCxuPW5ldyBBcnJheShhPXQuYXJjcy5sZW5ndGgpO2k8YTsrK2kpbltpXT1pO3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGFyY3M6cyh0LG4pfX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9e30sbj1bXSxpPVtdO2Z1bmN0aW9uIGEodCl7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXsocltlPWU8MD9+ZTplXXx8KHJbZV09W10pKS5wdXNoKHQpfSl9KSxuLnB1c2godCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsbj10Lmxlbmd0aCxpPXRbbi0xXSxhPTA7KytyPG47KWU9aSxpPXRbcl0sYSs9ZVswXSppWzFdLWVbMV0qaVswXTtyZXR1cm4gTWF0aC5hYnMoYSl9KG8odCx7dHlwZToiUG9seWdvbiIsYXJjczpbZV19KS5jb29yZGluYXRlc1swXSl9cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbiB0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIlBvbHlnb24iOmEoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZS5hcmNzLmZvckVhY2goYSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0Ll8pe3ZhciBlPVtdLG49W3RdO2Zvcih0Ll89MSxpLnB1c2goZSk7dD1uLnBvcCgpOyllLnB1c2godCksdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuX3x8KHQuXz0xLG4ucHVzaCh0KSl9KX0pfSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0Ll99KSx7dHlwZToiTXVsdGlQb2x5Z29uIixhcmNzOmkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuLGk9W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0ubGVuZ3RoPDImJmkucHVzaCh0KX0pfSl9KSwobj0oaT1zKHQsaSkpLmxlbmd0aCk+MSlmb3IodmFyIGEsbyxjPTEsdT1sKGlbMF0pO2M8bjsrK2MpKGE9bChpW2NdKSk+dSYmKG89aVswXSxpWzBdPWlbY10saVtjXT1vLHU9YSk7cmV0dXJuIGl9KX19dmFyIHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXIrbj4+PjE7dFtpXTxlP3I9aSsxOm49aX1yZXR1cm4gcn07dC5iYm94PW4sdC5mZWF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczplLmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhKHQsZSl9KX06YSh0LGUpfSx0Lm1lc2g9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVzaEFyY3M9bCx0Lm1lcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQsYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lcmdlQXJjcz1jLHQubmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG4odCxyKXt0LmZvckVhY2goZnVuY3Rpb24odCl7dDwwJiYodD1+dCk7dmFyIG49ZVt0XTtuP24ucHVzaChyKTplW3RdPVtyXX0pfWZ1bmN0aW9uIGkodCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7bih0LGUpfSl9dmFyIGE9e0xpbmVTdHJpbmc6bixNdWx0aUxpbmVTdHJpbmc6aSxQb2x5Z29uOmksTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kodCxlKX0pfX07Zm9yKHZhciBvIGluIHQuZm9yRWFjaChmdW5jdGlvbiB0KGUscil7Ikdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/ZS5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7dChlLHIpfSk6ZS50eXBlIGluIGEmJmFbZS50eXBlXShlLmFyY3Mscil9KSxlKWZvcih2YXIgcz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpZm9yKHZhciBmPWMrMTtmPGw7KytmKXt2YXIgaCxwPXNbY10sZD1zW2ZdOyhoPXJbcF0pW289dShoLGQpXSE9PWQmJmguc3BsaWNlKG8sMCxkKSwoaD1yW2RdKVtvPXUoaCxwKV0hPT1wJiZoLnNwbGljZShvLDAscCl9cmV0dXJuIHJ9LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtpZighKChlPU1hdGguZmxvb3IoZSkpPj0yKSl0aHJvdyBuZXcgRXJyb3IoIm4gbXVzdCBiZSBcdTIyNjUyIik7aWYodC50cmFuc2Zvcm0pdGhyb3cgbmV3IEVycm9yKCJhbHJlYWR5IHF1YW50aXplZCIpO3ZhciByLGk9bih0KSxhPWlbMF0sbz0oaVsyXS1hKS8oZS0xKXx8MSxzPWlbMV0sbD0oaVszXS1zKS8oZS0xKXx8MTtmdW5jdGlvbiBjKHQpe3RbMF09TWF0aC5yb3VuZCgodFswXS1hKS9vKSx0WzFdPU1hdGgucm91bmQoKHRbMV0tcykvbCl9ZnVuY3Rpb24gdSh0KXtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6dC5nZW9tZXRyaWVzLmZvckVhY2godSk7YnJlYWs7Y2FzZSJQb2ludCI6Yyh0LmNvb3JkaW5hdGVzKTticmVhaztjYXNlIk11bHRpUG9pbnQiOnQuY29vcmRpbmF0ZXMuZm9yRWFjaChjKX19Zm9yKHIgaW4gdC5hcmNzLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPTEsYz0xLHU9dC5sZW5ndGgsZj10WzBdLGg9ZlswXT1NYXRoLnJvdW5kKChmWzBdLWEpL28pLHA9ZlsxXT1NYXRoLnJvdW5kKChmWzFdLXMpL2wpO2k8dTsrK2kpZj10W2ldLHI9TWF0aC5yb3VuZCgoZlswXS1hKS9vKSxuPU1hdGgucm91bmQoKGZbMV0tcykvbCkscj09PWgmJm49PT1wfHwoKGU9dFtjKytdKVswXT1yLWgsaD1yLGVbMV09bi1wLHA9bik7YzwyJiYoKGU9dFtjKytdKVswXT0wLGVbMV09MCksdC5sZW5ndGg9Y30pLHQub2JqZWN0cyl1KHQub2JqZWN0c1tyXSk7cmV0dXJuIHQudHJhbnNmb3JtPXtzY2FsZTpbbyxsXSx0cmFuc2xhdGU6W2Esc119LHR9LHQudHJhbnNmb3JtPXIsdC51bnRyYW5zZm9ybT1mdW5jdGlvbih0KXtpZihudWxsPT0ocj10LnRyYW5zZm9ybSkpcmV0dXJuIGU7dmFyIHIsbixpLGE9ci5zY2FsZVswXSxvPXIuc2NhbGVbMV0scz1yLnRyYW5zbGF0ZVswXSxsPXIudHJhbnNsYXRlWzFdO3JldHVybiBmdW5jdGlvbih0LGUpe2V8fChuPWk9MCk7dmFyIHI9TWF0aC5yb3VuZCgodFswXS1zKS9hKSxjPU1hdGgucm91bmQoKHRbMV0tbCkvbyk7cmV0dXJuIHRbMF09ci1uLG49cix0WzFdPWMtaSxpPWMsdH19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLnRvcG9qc29uPW4udG9wb2pzb258fHt9KX0se31dLDUyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybltdO2lmKDA9PT10KXJldHVybltbMF1dO2Zvcih2YXIgZT0wfE1hdGgucm91bmQoYSh0KzEpKSxyPVtdLG89MDtvPGU7KytvKXtmb3IodmFyIHM9bi51bnJhbmsodCxvKSxsPVswXSxjPTAsdT0wO3U8cy5sZW5ndGg7Kyt1KWMrPTE8PHNbdV0sbC5wdXNoKGMpO2kocyk8MSYmKGxbMF09YyxsW3RdPTApLHIucHVzaChsKX1yZXR1cm4gcn07dmFyIG49dCgicGVybXV0YXRpb24tcmFuayIpLGk9dCgicGVybXV0YXRpb24tcGFyaXR5IiksYT10KCJnYW1tYSIpfSx7Z2FtbWE6MjI3LCJwZXJtdXRhdGlvbi1wYXJpdHkiOjQ1NSwicGVybXV0YXRpb24tcmFuayI6NDU2fV0sNTI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxuPXQucmlnaHR8fGYociksaT10LnJhZGl1c3x8MSxhPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMykscyhyLHIpLG49W10uc2xpY2UuY2FsbChuLDAsMykscyhuLG4pLCJleWUiaW4gdCl7dmFyIHA9dC5leWUsZD1bcFswXS1lWzBdLHBbMV0tZVsxXSxwWzJdLWVbMl1dO28obixkLHIpLGMoblswXSxuWzFdLG5bMl0pPDFlLTY/bj1mKHIpOnMobixuKSxpPWMoZFswXSxkWzFdLGRbMl0pO3ZhciBnPWwocixkKS9pLHY9bChuLGQpL2k7dT1NYXRoLmFjb3MoZyksYT1NYXRoLmFjb3Modil9cmV0dXJuIGk9TWF0aC5sb2coaSksbmV3IGgodC56b29tTWluLHQuem9vbU1heCxlLHIsbixpLGEsdSl9O3ZhciBuPXQoImZpbHRlcmVkLXZlY3RvciIpLGk9dCgiZ2wtbWF0NC9pbnZlcnQiKSxhPXQoImdsLW1hdDQvcm90YXRlIiksbz10KCJnbC12ZWMzL2Nyb3NzIikscz10KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGw9dCgiZ2wtdmVjMy9kb3QiKTtmdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KC0xLHQpKX1mdW5jdGlvbiBmKHQpe3ZhciBlPU1hdGguYWJzKHRbMF0pLHI9TWF0aC5hYnModFsxXSksbj1NYXRoLmFicyh0WzJdKSxpPVswLDAsMF07ZT5NYXRoLm1heChyLG4pP2lbMl09MTpyPk1hdGgubWF4KGUsbik/aVswXT0xOmlbMV09MTtmb3IodmFyIGE9MCxvPTAsbD0wO2w8MzsrK2wpYSs9dFtsXSp0W2xdLG8rPWlbbF0qdFtsXTtmb3IobD0wO2w8MzsrK2wpaVtsXS09by9hKnRbbF07cmV0dXJuIHMoaSxpKSxpfWZ1bmN0aW9uIGgodCxlLHIsaSxhLG8scyxsKXt0aGlzLmNlbnRlcj1uKHIpLHRoaXMudXA9bihpKSx0aGlzLnJpZ2h0PW4oYSksdGhpcy5yYWRpdXM9bihbb10pLHRoaXMuYW5nbGU9bihbcyxsXSksdGhpcy5hbmdsZS5ib3VuZHM9W1stMS8wLC1NYXRoLlBJLzJdLFsxLzAsTWF0aC5QSS8yXV0sdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0LGUpLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPXRoaXMudXAuY3VydmUoMCksdGhpcy5jb21wdXRlZFJpZ2h0PXRoaXMucmlnaHQuY3VydmUoMCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQW5nbGU9dGhpcy5hbmdsZS5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVG93YXJkPVswLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9bmV3IEFycmF5KDE2KTtmb3IodmFyIGM9MDtjPDE2OysrYyl0aGlzLmNvbXB1dGVkTWF0cml4W2NdPS41O3RoaXMucmVjYWxjTWF0cml4KDApfXZhciBwPWgucHJvdG90eXBlO3Auc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotMS8wLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LHAuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzWzBdO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0scC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy51cC5jdXJ2ZSh0KSx0aGlzLnJpZ2h0LmN1cnZlKHQpLHRoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuYW5nbGUuY3VydmUodCk7Zm9yKHZhciBlPXRoaXMuY29tcHV0ZWRVcCxyPXRoaXMuY29tcHV0ZWRSaWdodCxuPTAsaT0wLGE9MDthPDM7KythKWkrPWVbYV0qclthXSxuKz1lW2FdKmVbYV07dmFyIGw9TWF0aC5zcXJ0KG4pLHU9MDtmb3IoYT0wO2E8MzsrK2EpclthXS09ZVthXSppL24sdSs9clthXSpyW2FdLGVbYV0vPWw7dmFyIGY9TWF0aC5zcXJ0KHUpO2ZvcihhPTA7YTwzOysrYSlyW2FdLz1mO3ZhciBoPXRoaXMuY29tcHV0ZWRUb3dhcmQ7byhoLGUscikscyhoLGgpO3ZhciBwPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGQ9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLGc9dGhpcy5jb21wdXRlZEFuZ2xlWzFdLHY9TWF0aC5jb3MoZCksbT1NYXRoLnNpbihkKSx5PU1hdGguY29zKGcpLHg9TWF0aC5zaW4oZyksYj10aGlzLmNvbXB1dGVkQ2VudGVyLF89dip5LHc9bSp5LGs9eCxUPS12KngsQT0tbSp4LE09eSxTPXRoaXMuY29tcHV0ZWRFeWUsRT10aGlzLmNvbXB1dGVkTWF0cml4O2ZvcihhPTA7YTwzOysrYSl7dmFyIEM9XypyW2FdK3cqaFthXStrKmVbYV07RVs0KmErMV09VCpyW2FdK0EqaFthXStNKmVbYV0sRVs0KmErMl09QyxFWzQqYSszXT0wfXZhciBMPUVbMV0sej1FWzVdLE89RVs5XSxJPUVbMl0sRD1FWzZdLFA9RVsxMF0sUj16KlAtTypELEY9TypJLUwqUCxCPUwqRC16KkksTj1jKFIsRixCKTtSLz1OLEYvPU4sQi89TixFWzBdPVIsRVs0XT1GLEVbOF09Qjtmb3IoYT0wO2E8MzsrK2EpU1thXT1iW2FdK0VbMis0KmFdKnA7Zm9yKGE9MDthPDM7KythKXt1PTA7Zm9yKHZhciBqPTA7ajwzOysrail1Kz1FW2ErNCpqXSpTW2pdO0VbMTIrYV09LXV9RVsxNV09MX0scC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn07dmFyIGQ9WzAsMCwwXTtwLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLmFuZ2xlLm1vdmUodCxlLHIpLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZFswXT1pWzJdLGRbMV09aVs2XSxkWzJdPWlbMTBdO2Zvcih2YXIgbz10aGlzLmNvbXB1dGVkVXAscz10aGlzLmNvbXB1dGVkUmlnaHQsbD10aGlzLmNvbXB1dGVkVG93YXJkLGM9MDtjPDM7KytjKWlbNCpjXT1vW2NdLGlbNCpjKzFdPXNbY10saVs0KmMrMl09bFtjXTthKGksaSxuLGQpO2ZvcihjPTA7YzwzOysrYylvW2NdPWlbNCpjXSxzW2NdPWlbNCpjKzFdO3RoaXMudXAuc2V0KHQsb1swXSxvWzFdLG9bMl0pLHRoaXMucmlnaHQuc2V0KHQsc1swXSxzWzFdLHNbMl0pfX0scC5wYW49ZnVuY3Rpb24odCxlLHIsbil7ZT1lfHwwLHI9cnx8MCxuPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPShNYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSxpWzFdKSxvPWlbNV0scz1pWzldLGw9YyhhLG8scyk7YS89bCxvLz1sLHMvPWw7dmFyIHU9aVswXSxmPWlbNF0saD1pWzhdLHA9dSphK2YqbytoKnMsZD1jKHUtPWEqcCxmLT1vKnAsaC09cypwKSxnPSh1Lz1kKSplK2Eqcix2PShmLz1kKSplK28qcixtPShoLz1kKSplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsZyx2LG0pO3ZhciB5PU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3k9TWF0aC5tYXgoMWUtNCx5K24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHkpKX0scC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0scC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9MTsibnVtYmVyIj09dHlwZW9mIHImJihhPTB8ciksKGE8MHx8YT4zKSYmKGE9MSk7dmFyIG89KGErMiklMztlfHwodGhpcy5yZWNhbGNNYXRyaXgodCksZT10aGlzLmNvbXB1dGVkTWF0cml4KTt2YXIgcz1lW2FdLGw9ZVthKzRdLGY9ZVthKzhdO2lmKG4pe3ZhciBoPU1hdGguYWJzKHMpLHA9TWF0aC5hYnMobCksZD1NYXRoLmFicyhmKSxnPU1hdGgubWF4KGgscCxkKTtoPT09Zz8ocz1zPDA/LTE6MSxsPWY9MCk6ZD09PWc/KGY9ZjwwPy0xOjEscz1sPTApOihsPWw8MD8tMToxLHM9Zj0wKX1lbHNle3ZhciB2PWMocyxsLGYpO3MvPXYsbC89dixmLz12fXZhciBtLHkseD1lW29dLGI9ZVtvKzRdLF89ZVtvKzhdLHc9eCpzK2IqbCtfKmYsaz1jKHgtPXMqdyxiLT1sKncsXy09Zip3KSxUPWwqKF8vPWspLWYqKGIvPWspLEE9ZiooeC89ayktcypfLE09cypiLWwqeCxTPWMoVCxBLE0pO2lmKFQvPVMsQS89UyxNLz1TLHRoaXMuY2VudGVyLmp1bXAodCxILEcsWSksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnVwLmp1bXAodCxzLGwsZiksdGhpcy5yaWdodC5qdW1wKHQseCxiLF8pLDI9PT1hKXt2YXIgRT1lWzFdLEM9ZVs1XSxMPWVbOV0sej1FKngrQypiK0wqXyxPPUUqVCtDKkErTCpNO209UjwwPy1NYXRoLlBJLzI6TWF0aC5QSS8yLHk9TWF0aC5hdGFuMihPLHopfWVsc2V7dmFyIEk9ZVsyXSxEPWVbNl0sUD1lWzEwXSxSPUkqcytEKmwrUCpmLEY9SSp4K0QqYitQKl8sQj1JKlQrRCpBK1AqTTttPU1hdGguYXNpbih1KFIpKSx5PU1hdGguYXRhbjIoQixGKX10aGlzLmFuZ2xlLmp1bXAodCx5LG0pLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBOPWVbMl0saj1lWzZdLFY9ZVsxMF0sVT10aGlzLmNvbXB1dGVkTWF0cml4O2koVSxlKTt2YXIgcT1VWzE1XSxIPVVbMTJdL3EsRz1VWzEzXS9xLFk9VVsxNF0vcSxXPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLmp1bXAodCxILU4qVyxHLWoqVyxZLVYqVyl9LHAubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnVwLmxhc3RUKCksdGhpcy5yaWdodC5sYXN0VCgpLHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5hbmdsZS5sYXN0VCgpKX0scC5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy51cC5pZGxlKHQpLHRoaXMucmlnaHQuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMuYW5nbGUuaWRsZSh0KX0scC5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnVwLmZsdXNoKHQpLHRoaXMucmlnaHQuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5hbmdsZS5mbHVzaCh0KX0scC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxwLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHx0aGlzLmNvbXB1dGVkQ2VudGVyO3ZhciBpPShuPW58fHRoaXMuY29tcHV0ZWRVcClbMF0sYT1uWzFdLG89blsyXSxzPWMoaSxhLG8pO2lmKCEoczwxZS02KSl7aS89cyxhLz1zLG8vPXM7dmFyIGw9ZVswXS1yWzBdLGY9ZVsxXS1yWzFdLGg9ZVsyXS1yWzJdLHA9YyhsLGYsaCk7aWYoIShwPDFlLTYpKXtsLz1wLGYvPXAsaC89cDt2YXIgZD10aGlzLmNvbXB1dGVkUmlnaHQsZz1kWzBdLHY9ZFsxXSxtPWRbMl0seT1pKmcrYSp2K28qbSx4PWMoZy09eSppLHYtPXkqYSxtLT15Km8pO2lmKCEoeDwuMDEmJih4PWMoZz1hKmgtbypmLHY9bypsLWkqaCxtPWkqZi1hKmwpKTwxZS02KSl7Zy89eCx2Lz14LG0vPXgsdGhpcy51cC5zZXQodCxpLGEsbyksdGhpcy5yaWdodC5zZXQodCxnLHYsbSksdGhpcy5jZW50ZXIuc2V0KHQsclswXSxyWzFdLHJbMl0pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHApKTt2YXIgYj1hKm0tbyp2LF89bypnLWkqbSx3PWkqdi1hKmcsaz1jKGIsXyx3KSxUPWkqbCthKmYrbypoLEE9ZypsK3YqZittKmgsTT0oYi89aykqbCsoXy89aykqZisody89aykqaCxTPU1hdGguYXNpbih1KFQpKSxFPU1hdGguYXRhbjIoTSxBKSxDPXRoaXMuYW5nbGUuX3N0YXRlLEw9Q1tDLmxlbmd0aC0xXSx6PUNbQy5sZW5ndGgtMl07TCU9MipNYXRoLlBJO3ZhciBPPU1hdGguYWJzKEwrMipNYXRoLlBJLUUpLEk9TWF0aC5hYnMoTC1FKSxEPU1hdGguYWJzKEwtMipNYXRoLlBJLUUpO088SSYmKEwrPTIqTWF0aC5QSSksRDxJJiYoTC09MipNYXRoLlBJKSx0aGlzLmFuZ2xlLmp1bXAodGhpcy5hbmdsZS5sYXN0VCgpLEwseiksdGhpcy5hbmdsZS5zZXQodCxFLFMpfX19fX0seyJmaWx0ZXJlZC12ZWN0b3IiOjIyMiwiZ2wtbWF0NC9pbnZlcnQiOjI2MSwiZ2wtbWF0NC9yb3RhdGUiOjI2NiwiZ2wtdmVjMy9jcm9zcyI6MzI2LCJnbC12ZWMzL2RvdCI6MzMxLCJnbC12ZWMzL25vcm1hbGl6ZSI6MzQ4fV0sNTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dCplLGE9bip0LG89YS0oYS10KSxzPXQtbyxsPW4qZSxjPWwtKGwtZSksdT1lLWMsZj1zKnUtKGktbypjLXMqYy1vKnUpO2lmKHIpcmV0dXJuIHJbMF09ZixyWzFdPWkscjtyZXR1cm5bZixpXX07dmFyIG49KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDUyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQrZSxpPW4tdCxhPWUtaSxvPXQtKG4taSk7aWYocilyZXR1cm4gclswXT1vK2EsclsxXT1uLHI7cmV0dXJuW28rYSxuXX19LHt9XSw1Mjk6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoImR1cCIpO2UuX19UWVBFREFSUkFZX1BPT0x8fChlLl9fVFlQRURBUlJBWV9QT09MPXtVSU5UODphKFszMiwwXSksVUlOVDE2OmEoWzMyLDBdKSxVSU5UMzI6YShbMzIsMF0pLElOVDg6YShbMzIsMF0pLElOVDE2OmEoWzMyLDBdKSxJTlQzMjphKFszMiwwXSksRkxPQVQ6YShbMzIsMF0pLERPVUJMRTphKFszMiwwXSksREFUQTphKFszMiwwXSksVUlOVDhDOmEoWzMyLDBdKSxCVUZGRVI6YShbMzIsMF0pfSk7dmFyIG89InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSxzPWUuX19UWVBFREFSUkFZX1BPT0w7cy5VSU5UOEN8fChzLlVJTlQ4Qz1hKFszMiwwXSkpLHMuQlVGRkVSfHwocy5CVUZGRVI9YShbMzIsMF0pKTt2YXIgbD1zLkRBVEEsYz1zLkJVRkZFUjtmdW5jdGlvbiB1KHQpe2lmKHQpe3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj1pLmxvZzIoZSk7bFtyXS5wdXNoKHQpfX1mdW5jdGlvbiBmKHQpe3Q9aS5uZXh0UG93Mih0KTt2YXIgZT1pLmxvZzIodCkscj1sW2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGYodCksMCx0KX1mdW5jdGlvbiBwKHQpe3JldHVybiBuZXcgVWludDE2QXJyYXkoZigyKnQpLDAsdCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KGYoNCp0KSwwLHQpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG5ldyBJbnQ4QXJyYXkoZih0KSwwLHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG5ldyBJbnQxNkFycmF5KGYoMip0KSwwLHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KGYoNCp0KSwwLHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoZig0KnQpLDAsdCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gbmV3IEZsb2F0NjRBcnJheShmKDgqdCksMCx0KX1mdW5jdGlvbiBiKHQpe3JldHVybiBvP25ldyBVaW50OENsYW1wZWRBcnJheShmKHQpLDAsdCk6aCh0KX1mdW5jdGlvbiBfKHQpe3JldHVybiBuZXcgRGF0YVZpZXcoZih0KSwwLHQpfWZ1bmN0aW9uIHcodCl7dD1pLm5leHRQb3cyKHQpO3ZhciBlPWkubG9nMih0KSxyPWNbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgbih0KX1yLmZyZWU9ZnVuY3Rpb24odCl7aWYobi5pc0J1ZmZlcih0KSljW2kubG9nMih0Lmxlbmd0aCldLnB1c2godCk7ZWxzZXtpZigiW29iamVjdCBBcnJheUJ1ZmZlcl0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfGkubG9nMihlKTtsW3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9ZnVuY3Rpb24odCl7dSh0LmJ1ZmZlcil9LHIuZnJlZUFycmF5QnVmZmVyPXUsci5mcmVlQnVmZmVyPWZ1bmN0aW9uKHQpe2NbaS5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KX0sci5tYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lfHwiYXJyYXlidWZmZXIiPT09ZSlyZXR1cm4gZih0KTtzd2l0Y2goZSl7Y2FzZSJ1aW50OCI6cmV0dXJuIGgodCk7Y2FzZSJ1aW50MTYiOnJldHVybiBwKHQpO2Nhc2UidWludDMyIjpyZXR1cm4gZCh0KTtjYXNlImludDgiOnJldHVybiBnKHQpO2Nhc2UiaW50MTYiOnJldHVybiB2KHQpO2Nhc2UiaW50MzIiOnJldHVybiBtKHQpO2Nhc2UiZmxvYXQiOmNhc2UiZmxvYXQzMiI6cmV0dXJuIHkodCk7Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQ2NCI6cmV0dXJuIHgodCk7Y2FzZSJ1aW50OF9jbGFtcGVkIjpyZXR1cm4gYih0KTtjYXNlImJ1ZmZlciI6cmV0dXJuIHcodCk7Y2FzZSJkYXRhIjpjYXNlImRhdGF2aWV3IjpyZXR1cm4gXyh0KTtkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBudWxsfSxyLm1hbGxvY0FycmF5QnVmZmVyPWYsci5tYWxsb2NVaW50OD1oLHIubWFsbG9jVWludDE2PXAsci5tYWxsb2NVaW50MzI9ZCxyLm1hbGxvY0ludDg9ZyxyLm1hbGxvY0ludDE2PXYsci5tYWxsb2NJbnQzMj1tLHIubWFsbG9jRmxvYXQzMj1yLm1hbGxvY0Zsb2F0PXksci5tYWxsb2NGbG9hdDY0PXIubWFsbG9jRG91YmxlPXgsci5tYWxsb2NVaW50OENsYW1wZWQ9YixyLm1hbGxvY0RhdGFWaWV3PV8sci5tYWxsb2NCdWZmZXI9dyxyLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDMyOysrdClzLlVJTlQ4W3RdLmxlbmd0aD0wLHMuVUlOVDE2W3RdLmxlbmd0aD0wLHMuVUlOVDMyW3RdLmxlbmd0aD0wLHMuSU5UOFt0XS5sZW5ndGg9MCxzLklOVDE2W3RdLmxlbmd0aD0wLHMuSU5UMzJbdF0ubGVuZ3RoPTAscy5GTE9BVFt0XS5sZW5ndGg9MCxzLkRPVUJMRVt0XS5sZW5ndGg9MCxzLlVJTlQ4Q1t0XS5sZW5ndGg9MCxsW3RdLmxlbmd0aD0wLGNbdF0ubGVuZ3RoPTB9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sdCgiYnVmZmVyIikuQnVmZmVyKX0seyJiaXQtdHdpZGRsZSI6ODIsYnVmZmVyOjk1LGR1cDoxNjF9XSw1MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW47dmFyIGk9bi5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RzLmxlbmd0aH19KSxpLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxpLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQscj10aGlzLnJvb3RzO3JbdF0hPT10Oyl0PXJbdF07Zm9yKDtyW2VdIT09dDspe3ZhciBuPXJbZV07cltlXT10LGU9bn1yZXR1cm4gdH0saS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDUzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiAwPT09dC5sZW5ndGg/dDplPyhyfHx0LnNvcnQoZSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPXQubGVuZ3RoLGk9dFswXSxhPXRbMF0sbz0xO288bjsrK28paWYoYT1pLGUoaT10W29dLGEpKXtpZihvPT09cil7cisrO2NvbnRpbnVlfXRbcisrXT1pfXJldHVybiB0Lmxlbmd0aD1yLHR9KHQsZSkpOihyfHx0LnNvcnQoKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MSxyPXQubGVuZ3RoLG49dFswXSxpPXRbMF0sYT0xO2E8cjsrK2EsaT1uKWlmKGk9biwobj10W2FdKSE9PWkpe2lmKGE9PT1lKXtlKys7Y29udGludWV9dFtlKytdPW59cmV0dXJuIHQubGVuZ3RoPWUsdH0odCkpfX0se31dLDUzMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPS9bXCdcIl0vO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD8obi50ZXN0KHQuY2hhckF0KDApKSYmKHQ9dC5zdWJzdHIoMSkpLG4udGVzdCh0LmNoYXJBdCh0Lmxlbmd0aC0xKSkmJih0PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSkpLHQpOiIifX0se31dLDUzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtmb3IodmFyIG49MCxpPXIubGVuZ3RoO248aTtuKyspe3ZhciBhPXJbbl07Zm9yKHZhciBvIGluIGEpaWYoKHZvaWQgMD09PWVbb118fEFycmF5LmlzQXJyYXkoZVtvXSl8fHRbb10hPT1lW29dKSYmbyBpbiBlKXt2YXIgcztpZighMD09PWFbb10pcz1lW29dO2Vsc2V7aWYoITE9PT1hW29dKWNvbnRpbnVlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhW29dJiZ2b2lkIDA9PT0ocz1hW29dKGVbb10sdCxlKSkpY29udGludWV9dFtvXT1zfX1yZXR1cm4gdH19LHt9XSw1MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8KGU9e30pO3JldHVybiBuKHQsZS5jYW52YXN8fGksZS5jb250ZXh0fHxhLGUpfTt2YXIgbj10KCIuL2xpYi92dGV4dCIpLGk9bnVsbCxhPW51bGw7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS53aWR0aD04MTkyLGkuaGVpZ2h0PTEwMjQsYT1pLmdldENvbnRleHQoIjJkIikpfSx7Ii4vbGliL3Z0ZXh0Ijo1MzV9XSw1MzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9NjQsbz0xLjI1LHM9e2JyZWFrbGluZXM6ITEsYm9sZHM6ITEsaXRhbGljczohMSxzdWJzY3JpcHRzOiExLHN1cGVyc2NyaXB0czohMX07biYmKG4uc2l6ZSYmbi5zaXplPjAmJihhPW4uc2l6ZSksbi5saW5lU3BhY2luZyYmbi5saW5lU3BhY2luZz4wJiYobz1uLmxpbmVTcGFjaW5nKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYnJlYWtsaW5lcyYmKHMuYnJlYWtsaW5lcz0hIW4uc3R5bGV0YWdzLmJyZWFrbGluZXMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5ib2xkcyYmKHMuYm9sZHM9ISFuLnN0eWxldGFncy5ib2xkcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLml0YWxpY3MmJihzLml0YWxpY3M9ISFuLnN0eWxldGFncy5pdGFsaWNzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3Vic2NyaXB0cyYmKHMuc3Vic2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1YnNjcmlwdHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMmJihzLnN1cGVyc2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1cGVyc2NyaXB0cykpO3JldHVybiByLmZvbnQ9W24uZm9udFN0eWxlLG4uZm9udFZhcmlhbnQsbi5mb250V2VpZ2h0LGErInB4IixuLmZvbnRdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLmpvaW4oIiAiKSxyLnRleHRBbGlnbj0ic3RhcnQiLHIudGV4dEJhc2VsaW5lPSJhbHBoYWJldGljIixyLmRpcmVjdGlvbj0ibHRyIix3KGZ1bmN0aW9uKHQsZSxyLG4sYSxvKXtyPXIucmVwbGFjZSgvXG4vZywiIikscj0hMD09PW8uYnJlYWtsaW5lcz9yLnJlcGxhY2UoL1w8YnJcPi9nLCJcbiIpOnIucmVwbGFjZSgvXDxiclw+L2csIiAiKTt2YXIgcz0iIixsPVtdO2ZvcihrPTA7azxyLmxlbmd0aDsrK2spbFtrXT1zOyEwPT09by5ib2xkcyYmKGw9eChjLHUscixsKSksITA9PT1vLml0YWxpY3MmJihsPXgoZixoLHIsbCkpLCEwPT09by5zdXBlcnNjcmlwdHMmJihsPXgocCxnLHIsbCkpLCEwPT09by5zdWJzY3JpcHRzJiYobD14KHYseSxyLGwpKTt2YXIgYj1bXSxfPSIiO2ZvcihrPTA7azxyLmxlbmd0aDsrK2spbnVsbCE9PWxba10mJihfKz1yW2tdLGIucHVzaChsW2tdKSk7dmFyIHcsayxULEEsTSxTPV8uc3BsaXQoIlxuIiksRT1TLmxlbmd0aCxDPU1hdGgucm91bmQoYSpuKSxMPW4sej0yKm4sTz0wLEk9RSpDK3o7dC5oZWlnaHQ8SSYmKHQuaGVpZ2h0PUkpLGUuZmlsbFN0eWxlPSIjMDAwIixlLmZpbGxSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlLmZpbGxTdHlsZT0iI2ZmZiI7dmFyIEQ9MCxQPSIiO2Z1bmN0aW9uIFIoKXtpZigiIiE9PVApe3ZhciB0PWUubWVhc3VyZVRleHQoUCkud2lkdGg7ZS5maWxsVGV4dChQLEwrVCx6K0EpLFQrPXR9fWZ1bmN0aW9uIEYoKXtyZXR1cm4gTWF0aC5yb3VuZChNKSsicHggIn1mdW5jdGlvbiBCKHQscil7dmFyIG49IiIrZS5mb250O2lmKCEwPT09by5zdWJzY3JpcHRzKXt2YXIgaT10LmluZGV4T2YobSksYT1yLmluZGV4T2YobSkscz1pPi0xP3BhcnNlSW50KHRbMStpXSk6MCxsPWE+LTE/cGFyc2VJbnQoclsxK2FdKTowO3MhPT1sJiYobj1uLnJlcGxhY2UoRigpLCI/cHggIiksTSo9TWF0aC5wb3coLjc1LGwtcyksbj1uLnJlcGxhY2UoIj9weCAiLEYoKSkpLEErPS4yNSpDKihsLXMpfWlmKCEwPT09by5zdXBlcnNjcmlwdHMpe3ZhciBjPXQuaW5kZXhPZihkKSxmPXIuaW5kZXhPZihkKSxwPWM+LTE/cGFyc2VJbnQodFsxK2NdKTowLGc9Zj4tMT9wYXJzZUludChyWzErZl0pOjA7cCE9PWcmJihuPW4ucmVwbGFjZShGKCksIj9weCAiKSxNKj1NYXRoLnBvdyguNzUsZy1wKSxuPW4ucmVwbGFjZSgiP3B4ICIsRigpKSksQS09LjI1KkMqKGctcCl9aWYoITA9PT1vLmJvbGRzKXt2YXIgdj10LmluZGV4T2YodSk+LTEseT1yLmluZGV4T2YodSk+LTE7IXYmJnkmJihuPXg/bi5yZXBsYWNlKCJpdGFsaWMgIiwiaXRhbGljIGJvbGQgIik6ImJvbGQgIituKSx2JiYheSYmKG49bi5yZXBsYWNlKCJib2xkICIsIiIpKX1pZighMD09PW8uaXRhbGljcyl7dmFyIHg9dC5pbmRleE9mKGgpPi0xLGI9ci5pbmRleE9mKGgpPi0xOyF4JiZiJiYobj0iaXRhbGljICIrbikseCYmIWImJihuPW4ucmVwbGFjZSgiaXRhbGljICIsIiIpKX1lLmZvbnQ9bn1mb3Iodz0wO3c8RTsrK3cpe3ZhciBOPVNbd10rIlxuIjtmb3IoVD0wLEE9dypDLE09bixQPSIiLGs9MDtrPE4ubGVuZ3RoOysrayl7dmFyIGo9aytEPGIubGVuZ3RoP2JbaytEXTpiW2IubGVuZ3RoLTFdO3M9PT1qP1ArPU5ba106KFIoKSxQPU5ba10sdm9pZCAwIT09aiYmKEIocyxqKSxzPWopKX1SKCksRCs9Ti5sZW5ndGg7dmFyIFY9MHxNYXRoLnJvdW5kKFQrMipMKTtPPFYmJihPPVYpfXZhciBVPU8scT16K0MqRTtyZXR1cm4gaShlLmdldEltYWdlRGF0YSgwLDAsVSxxKS5kYXRhLFtxLFUsNF0pLnBpY2soLTEsLTEsMCkudHJhbnNwb3NlKDEsMCl9KGUscix0LGEsbyxzKSxuLGEpfSxlLmV4cG9ydHMucHJvY2Vzc1BpeGVscz13O3ZhciBuPXQoInN1cmZhY2UtbmV0cyIpLGk9dCgibmRhcnJheSIpLGE9dCgic2ltcGxpZnktcGxhbmFyLWdyYXBoIiksbz10KCJjbGVhbi1wc2xnIikscz10KCJjZHQyZCIpLGw9dCgicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lIiksYz0iYiIsdT0iYnwiLGY9ImkiLGg9Iml8IixwPSJzdXAiLGQ9IisiLGc9IisxIix2PSJzdWIiLG09Ii0iLHk9Ii0xIjtmdW5jdGlvbiB4KHQsZSxyLG4pe2Zvcih2YXIgaT0iPCIrdCsiPiIsYT0iPC8iK3QrIj4iLG89aS5sZW5ndGgscz1hLmxlbmd0aCxsPWVbMF09PT1kfHxlWzBdPT09bSxjPTAsdT0tcztjPi0xJiYtMSE9PShjPXIuaW5kZXhPZihpLGMpKSYmLTEhPT0odT1yLmluZGV4T2YoYSxjK28pKSYmISh1PD1jKTspe2Zvcih2YXIgZj1jO2Y8dStzOysrZilpZihmPGMrb3x8Zj49dSluW2ZdPW51bGwscj1yLnN1YnN0cigwLGYpKyIgIityLnN1YnN0cihmKzEpO2Vsc2UgaWYobnVsbCE9PW5bZl0pe3ZhciBoPW5bZl0uaW5kZXhPZihlWzBdKTstMT09PWg/bltmXSs9ZTpsJiYobltmXT1uW2ZdLnN1YnN0cigwLGgrMSkrKDErcGFyc2VJbnQobltmXVtoKzFdKSkrbltmXS5zdWJzdHIoaCsyKSl9dmFyIHA9YytvLGc9ci5zdWJzdHIocCx1LXApLmluZGV4T2YoaSk7Yz0tMSE9PWc/Zzp1K3N9cmV0dXJuIG59ZnVuY3Rpb24gYih0LGUpe3ZhciByPW4odCwxMjgpO3JldHVybiBlP2Eoci5jZWxscyxyLnBvc2l0aW9ucywuMjUpOntlZGdlczpyLmNlbGxzLHBvc2l0aW9uczpyLnBvc2l0aW9uc319ZnVuY3Rpb24gXyh0LGUscixuKXt2YXIgaT1iKHQsbiksYT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUudGV4dEFsaWdufHwic3RhcnQiLGk9ZS50ZXh0QmFzZWxpbmV8fCJhbHBoYWJldGljIixhPVsxPDwzMCwxPDwzMF0sbz1bMCwwXSxzPXQubGVuZ3RoLGw9MDtsPHM7KytsKWZvcih2YXIgYz10W2xdLHU9MDt1PDI7Kyt1KWFbdV09MHxNYXRoLm1pbihhW3VdLGNbdV0pLG9bdV09MHxNYXRoLm1heChvW3VdLGNbdV0pO3ZhciBmPTA7c3dpdGNoKG4pe2Nhc2UiY2VudGVyIjpmPS0uNSooYVswXStvWzBdKTticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6Zj0tb1swXTticmVhaztjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmY9LWFbMF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29nbml6ZWQgdGV4dEFsaWduOiAnIituKyInIil9dmFyIGg9MDtzd2l0Y2goaSl7Y2FzZSJoYW5naW5nIjpjYXNlInRvcCI6aD0tYVsxXTticmVhaztjYXNlIm1pZGRsZSI6aD0tLjUqKGFbMV0rb1sxXSk7YnJlYWs7Y2FzZSJhbHBoYWJldGljIjpjYXNlImlkZW9ncmFwaGljIjpoPS0zKnI7YnJlYWs7Y2FzZSJib3R0b20iOmg9LW9bMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29naW5pemVkIHRleHRCYXNlbGluZTogJyIraSsiJyIpfXZhciBwPTEvcjtyZXR1cm4ibGluZUhlaWdodCJpbiBlP3AqPStlLmxpbmVIZWlnaHQ6IndpZHRoImluIGU/cD1lLndpZHRoLyhvWzBdLWFbMF0pOiJoZWlnaHQiaW4gZSYmKHA9ZS5oZWlnaHQvKG9bMV0tYVsxXSkpLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltwKih0WzBdK2YpLHAqKHRbMV0raCldfSl9KGkucG9zaXRpb25zLGUsciksYz1pLmVkZ2VzLHU9ImNjdyI9PT1lLm9yaWVudGF0aW9uO2lmKG8oYSxjKSxlLnBvbHlnb25zfHxlLnBvbHlnb258fGUucG9seWxpbmUpe2Zvcih2YXIgZj1sKGMsYSksaD1uZXcgQXJyYXkoZi5sZW5ndGgpLHA9MDtwPGYubGVuZ3RoOysrcCl7Zm9yKHZhciBkPWZbcF0sZz1uZXcgQXJyYXkoZC5sZW5ndGgpLHY9MDt2PGQubGVuZ3RoOysrdil7Zm9yKHZhciBtPWRbdl0seT1uZXcgQXJyYXkobS5sZW5ndGgpLHg9MDt4PG0ubGVuZ3RoOysreCl5W3hdPWFbbVt4XV0uc2xpY2UoKTt1JiZ5LnJldmVyc2UoKSxnW3ZdPXl9aFtwXT1nfXJldHVybiBofXJldHVybiBlLnRyaWFuZ2xlc3x8ZS50cmlhbmd1bGF0ZXx8ZS50cmlhbmdsZT97Y2VsbHM6cyhhLGMse2RlbGF1bmF5OiExLGV4dGVyaW9yOiExLGludGVyaW9yOiEwfSkscG9zaXRpb25zOmF9OntlZGdlczpjLHBvc2l0aW9uczphfX1mdW5jdGlvbiB3KHQsZSxyKXt0cnl7cmV0dXJuIF8odCxlLHIsITApfWNhdGNoKHQpe310cnl7cmV0dXJuIF8odCxlLHIsITEpfWNhdGNoKHQpe31yZXR1cm4gZS5wb2x5Z29uc3x8ZS5wb2x5bGluZXx8ZS5wb2x5Z29uP1tdOmUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpbXSxwb3NpdGlvbnM6W119OntlZGdlczpbXSxwb3NpdGlvbnM6W119fX0se2NkdDJkOjk2LCJjbGVhbi1wc2xnIjoxMDYsbmRhcnJheTo0NDIsInBsYW5hci1ncmFwaC10by1wb2x5bGluZSI6NDYwLCJzaW1wbGlmeS1wbGFuYXItZ3JhcGgiOjUwOCwic3VyZmFjZS1uZXRzIjo1MTV9XSw1MzY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBzZXN8fCFzZXMub2t8fHNlcy5vaygpKXsidW5kZWZpbmVkIiE9dHlwZW9mIHNlcyYmKHNlcy53ZWFrTWFwUGVybWl0SG9zdE9iamVjdHM9dik7dmFyIHQ9ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXApe3ZhciByPVdlYWtNYXA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9GaXJlZm94Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKTtlbHNle3ZhciBuPW5ldyByLGk9T2JqZWN0LmZyZWV6ZSh7fSk7aWYobi5zZXQoaSwxKSwxPT09bi5nZXQoaSkpcmV0dXJuIHZvaWQoZS5leHBvcnRzPVdlYWtNYXApO3Q9ITB9fU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsbz1PYmplY3QuZGVmaW5lUHJvcGVydHkscz1PYmplY3QuaXNFeHRlbnNpYmxlLGw9IndlYWttYXA6IixjPWwrImlkZW50OiIrTWF0aC5yYW5kb20oKSsiX19fIjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkpe3ZhciB1PW5ldyBBcnJheUJ1ZmZlcigyNSksZj1uZXcgVWludDhBcnJheSh1KTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGYpLGM9bCsicmFuZDoiK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChmLGZ1bmN0aW9uKHQpe3JldHVybih0JTM2KS50b1N0cmluZygzNil9KS5qb2luKCIiKSsiX19fIn1pZihvKE9iamVjdCwiZ2V0T3duUHJvcGVydHlOYW1lcyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQpLmZpbHRlcihtKX19KSwiZ2V0UHJvcGVydHlOYW1lcyJpbiBPYmplY3Qpe3ZhciBoPU9iamVjdC5nZXRQcm9wZXJ0eU5hbWVzO28oT2JqZWN0LCJnZXRQcm9wZXJ0eU5hbWVzIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGgodCkuZmlsdGVyKG0pfX0pfSFmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5mcmVlemU7byhPYmplY3QsImZyZWV6ZSIse3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB5KGUpLHQoZSl9fSk7dmFyIGU9T2JqZWN0LnNlYWw7byhPYmplY3QsInNlYWwiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4geSh0KSxlKHQpfX0pO3ZhciByPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztvKE9iamVjdCwicHJldmVudEV4dGVuc2lvbnMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4geSh0KSxyKHQpfX0pfSgpO3ZhciBwPSExLGQ9MCxnPWZ1bmN0aW9uKCl7dGhpcyBpbnN0YW5jZW9mIGd8fGIoKTt2YXIgdD1bXSxlPVtdLHI9ZCsrO3JldHVybiBPYmplY3QuY3JlYXRlKGcucHJvdG90eXBlLHtnZXRfX186e3ZhbHVlOngoZnVuY3Rpb24obixpKXt2YXIgYSxvPXkobik7cmV0dXJuIG8/ciBpbiBvP29bcl06aTooYT10LmluZGV4T2YobikpPj0wP2VbYV06aX0pfSxoYXNfX186e3ZhbHVlOngoZnVuY3Rpb24oZSl7dmFyIG49eShlKTtyZXR1cm4gbj9yIGluIG46dC5pbmRleE9mKGUpPj0wfSl9LHNldF9fXzp7dmFsdWU6eChmdW5jdGlvbihuLGkpe3ZhciBhLG89eShuKTtyZXR1cm4gbz9vW3JdPWk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdPWk6KGE9dC5sZW5ndGgsZVthXT1pLHRbYV09biksdGhpc30pfSxkZWxldGVfX186e3ZhbHVlOngoZnVuY3Rpb24obil7dmFyIGksYSxvPXkobik7cmV0dXJuIG8/ciBpbiBvJiZkZWxldGUgb1tyXTohKChpPXQuaW5kZXhPZihuKSk8MHx8KGE9dC5sZW5ndGgtMSx0W2ldPXZvaWQgMCxlW2ldPWVbYV0sdFtpXT10W2FdLHQubGVuZ3RoPWEsZS5sZW5ndGg9YSwwKSl9KX19KX07Zy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtnZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGRlbGV0ZTp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZXRlX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksImZ1bmN0aW9uIj09dHlwZW9mIHI/ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcyBpbnN0YW5jZW9mIGd8fGIoKTt2YXIgZSxuPW5ldyByLGk9dm9pZCAwLGE9ITE7cmV0dXJuIGU9dD9mdW5jdGlvbih0LGUpe3JldHVybiBuLnNldCh0LGUpLG4uaGFzKHQpfHwoaXx8KGk9bmV3IGcpLGkuc2V0KHQsZSkpLHRoaXN9OmZ1bmN0aW9uKHQsZSl7aWYoYSl0cnl7bi5zZXQodCxlKX1jYXRjaChyKXtpfHwoaT1uZXcgZyksaS5zZXRfX18odCxlKX1lbHNlIG4uc2V0KHQsZSk7cmV0dXJuIHRoaXN9LE9iamVjdC5jcmVhdGUoZy5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6eChmdW5jdGlvbih0LGUpe3JldHVybiBpP24uaGFzKHQpP24uZ2V0KHQpOmkuZ2V0X19fKHQsZSk6bi5nZXQodCxlKX0pfSxoYXNfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7cmV0dXJuIG4uaGFzKHQpfHwhIWkmJmkuaGFzX19fKHQpfSl9LHNldF9fXzp7dmFsdWU6eChlKX0sZGVsZXRlX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQpe3ZhciBlPSEhbi5kZWxldGUodCk7cmV0dXJuIGkmJmkuZGVsZXRlX19fKHQpfHxlfSl9LHBlcm1pdEhvc3RPYmplY3RzX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQpe2lmKHQhPT12KXRocm93IG5ldyBFcnJvcigiYm9ndXMgY2FsbCB0byBwZXJtaXRIb3N0T2JqZWN0c19fXyIpO2E9ITB9KX19KX10JiYidW5kZWZpbmVkIiE9dHlwZW9mIFByb3h5JiYoUHJveHk9dm9pZCAwKSxuLnByb3RvdHlwZT1nLnByb3RvdHlwZSxlLmV4cG9ydHM9bixPYmplY3QuZGVmaW5lUHJvcGVydHkoV2Vha01hcC5wcm90b3R5cGUsImNvbnN0cnVjdG9yIix7dmFsdWU6V2Vha01hcCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfSgpOigidW5kZWZpbmVkIiE9dHlwZW9mIFByb3h5JiYoUHJveHk9dm9pZCAwKSxlLmV4cG9ydHM9Zyl9ZnVuY3Rpb24gdih0KXt0LnBlcm1pdEhvc3RPYmplY3RzX19fJiZ0LnBlcm1pdEhvc3RPYmplY3RzX19fKHYpfWZ1bmN0aW9uIG0odCl7cmV0dXJuISh0LnN1YnN0cigwLGwubGVuZ3RoKT09bCYmIl9fXyI9PT10LnN1YnN0cih0Lmxlbmd0aC0zKSl9ZnVuY3Rpb24geSh0KXtpZih0IT09T2JqZWN0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIk5vdCBhbiBvYmplY3Q6ICIrdCk7dmFyIGU9dFtjXTtpZihlJiZlLmtleT09PXQpcmV0dXJuIGU7aWYocyh0KSl7ZT17a2V5OnR9O3RyeXtyZXR1cm4gbyh0LGMse3ZhbHVlOmUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITF9KSxlfWNhdGNoKHQpe3JldHVybn19fWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQucHJvdG90eXBlPW51bGwsT2JqZWN0LmZyZWV6ZSh0KX1mdW5jdGlvbiBiKCl7cHx8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlfHwocD0hMCxjb25zb2xlLndhcm4oIldlYWtNYXAgc2hvdWxkIGJlIGludm9rZWQgYXMgbmV3IFdlYWtNYXAoKSwgbm90IFdlYWtNYXAoKS4gVGhpcyB3aWxsIGJlIGFuIGVycm9yIGluIHRoZSBmdXR1cmUuIikpfX0oKX0se31dLDUzNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaGlkZGVuLXN0b3JlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCgib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJXZWFrbWFwLXNoaW06IEtleSBtdXN0IGJlIG9iamVjdCIpO3ZhciByPWUudmFsdWVPZih0KTtyZXR1cm4gciYmci5pZGVudGl0eT09PXQ/cjpuKGUsdCl9fX0seyIuL2hpZGRlbi1zdG9yZS5qcyI6NTM4fV0sNTM4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2lkZW50aXR5OmV9LG49dC52YWx1ZU9mO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmFsdWVPZiIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyfSx3cml0YWJsZTohMH0pLHJ9fSx7fV0sNTM5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jcmVhdGUtc3RvcmUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKCk7cmV0dXJue2dldDpmdW5jdGlvbihlLHIpe3ZhciBuPXQoZSk7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoInZhbHVlIik/bi52YWx1ZTpyfSxzZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChlKS52YWx1ZT1yLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4idmFsdWUiaW4gdChlKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgdChlKS52YWx1ZX19fX0seyIuL2NyZWF0ZS1zdG9yZS5qcyI6NTM3fV0sNTQwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2V0LWNhbnZhcy1jb250ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJ3ZWJnbCIsdCl9fSx7ImdldC1jYW52YXMtY29udGV4dCI6MjI4fV0sNTQxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1vLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShvLnByb3RvdHlwZSx7bmFtZToiQ2hpbmVzZSIsamRFcG9jaDoxNzIxNDI1LjUsaGFzWWVhclplcm86ITEsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiQ2hpbmVzZSIsZXBvY2hzOlsiQkVDIiwiRUMiXSxtb250aE51bWJlcnM6ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciByPXQubWF0Y2gobCk7cmV0dXJuIHI/clswXToiIn12YXIgbj10aGlzLl92YWxpZGF0ZVllYXIodCksaT10Lm1vbnRoKCksYT0iIit0aGlzLnRvQ2hpbmVzZU1vbnRoKG4saSk7cmV0dXJuIGUmJmEubGVuZ3RoPDImJihhPSIwIithKSx0aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpJiYoYSs9ImkiKSxhfSxtb250aE5hbWVzOmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9dC5tYXRjaChjKTtyZXR1cm4gZT9lWzBdOiIifXZhciByPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxuPXQubW9udGgoKSxpPVsiXHU0ZTAwXHU2NzA4IiwiXHU0ZThjXHU2NzA4IiwiXHU0ZTA5XHU2NzA4IiwiXHU1NmRiXHU2NzA4IiwiXHU0ZTk0XHU2NzA4IiwiXHU1MTZkXHU2NzA4IiwiXHU0ZTAzXHU2NzA4IiwiXHU1MTZiXHU2NzA4IiwiXHU0ZTVkXHU2NzA4IiwiXHU1MzQxXHU2NzA4IiwiXHU1MzQxXHU0ZTAwXHU2NzA4IiwiXHU1MzQxXHU0ZThjXHU2NzA4Il1bdGhpcy50b0NoaW5lc2VNb250aChyLG4pLTFdO3JldHVybiB0aGlzLmlzSW50ZXJjYWxhcnlNb250aChyLG4pJiYoaT0iXHU5NWYwIitpKSxpfSxtb250aE5hbWVzU2hvcnQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKHUpO3JldHVybiBlP2VbMF06IiJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGk9WyJcdTRlMDAiLCJcdTRlOGMiLCJcdTRlMDkiLCJcdTU2ZGIiLCJcdTRlOTQiLCJcdTUxNmQiLCJcdTRlMDMiLCJcdTUxNmIiLCJcdTRlNWQiLCJcdTUzNDEiLCJcdTUzNDFcdTRlMDAiLCJcdTUzNDFcdTRlOGMiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihpPSJcdTk1ZjAiK2kpLGl9LHBhcnNlTW9udGg6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcixuPXBhcnNlSW50KGUpO2lmKGlzTmFOKG4pKSJcdTk1ZjAiPT09ZVswXSYmKHI9ITAsZT1lLnN1YnN0cmluZygxKSksIlx1NjcwOCI9PT1lW2UubGVuZ3RoLTFdJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKSxuPTErWyJcdTRlMDAiLCJcdTRlOGMiLCJcdTRlMDkiLCJcdTU2ZGIiLCJcdTRlOTQiLCJcdTUxNmQiLCJcdTRlMDMiLCJcdTUxNmIiLCJcdTRlNWQiLCJcdTUzNDEiLCJcdTUzNDFcdTRlMDAiLCJcdTUzNDFcdTRlOGMiXS5pbmRleE9mKGUpO2Vsc2V7dmFyIGk9ZVtlLmxlbmd0aC0xXTtyPSJpIj09PWl8fCJJIj09PWl9cmV0dXJuIHRoaXMudG9Nb250aEluZGV4KHQsbixyKX0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6MSxpc1JUTDohMX19LF92YWxpZGF0ZVllYXI6ZnVuY3Rpb24odCxlKXtpZih0LnllYXImJih0PXQueWVhcigpKSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MTg4OHx8dD4yMTExKXRocm93IGUucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHR9LHRvTW9udGhJbmRleDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKHImJmUhPT1pfHxlPDF8fGU+MTIpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGk/IXImJmU8PWk/ZS0xOmU6ZS0xfSx0b0NoaW5lc2VNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9KHQ9dC55ZWFyKCkpLm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtpZihlPDB8fGU+KHI/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByP2U8cj9lKzE6ZTplKzF9LGludGVyY2FsYXJ5TW9udGg6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLGZbdC1mWzBdXT4+MTN9LGlzSW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9KHQ9dC55ZWFyKCkpLm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtyZXR1cm4hIXImJnI9PT1lfSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIGksbz10aGlzLl92YWxpZGF0ZVllYXIodCxuLmxvY2FsLmludmFsaWR5ZWFyKSxzPWhbby1oWzBdXSxsPXM+PjkmNDA5NSxjPXM+PjUmMTUsdT0zMSZzOyhpPWEubmV3RGF0ZShsLGMsdSkpLmFkZCg0LShpLmRheU9mV2VlaygpfHw3KSwiZCIpO3ZhciBmPXRoaXMudG9KRCh0LGUsciktaS50b0pEKCk7cmV0dXJuIDErTWF0aC5mbG9vcihmLzcpfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MTM6MTJ9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdD10aGlzLl92YWxpZGF0ZVllYXIodCk7dmFyIHI9Zlt0LWZbMF1dO2lmKGU+KHI+PjEzPzEyOjExKSl0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gciYxPDwxMi1lPzMwOjI5fSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHMscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3ZhbGlkYXRlWWVhcihpLnllYXIoKSksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBvPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHQsZSkscz10aGlzLnRvQ2hpbmVzZU1vbnRoKHQsZSksbD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scztpZigib2JqZWN0Ij09dHlwZW9mIHQpbz10LGE9ZXx8e307ZWxzZXt2YXIgbD0ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTE4ODgmJnQ8PTIxMTE7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJMdW5hciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExIik7dmFyIGM9Im51bWJlciI9PXR5cGVvZiBlJiZlPj0xJiZlPD0xMjtpZighYyl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyIik7dmFyIHUscD0ibnVtYmVyIj09dHlwZW9mIHImJnI+PTEmJnI8PTMwO2lmKCFwKXRocm93IG5ldyBFcnJvcigiTHVuYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMwIik7Im9iamVjdCI9PXR5cGVvZiBuPyh1PSExLGE9bik6KHU9ISFuLGE9aXx8e30pLG89e3llYXI6dCxtb250aDplLGRheTpyLGlzSW50ZXJjYWxhcnk6dX19cz1vLmRheS0xO3ZhciBkLGc9ZltvLnllYXItZlswXV0sdj1nPj4xMztkPXY/by5tb250aD52P28ubW9udGg6by5pc0ludGVyY2FsYXJ5P28ubW9udGg6by5tb250aC0xOm8ubW9udGgtMTtmb3IodmFyIG09MDttPGQ7bSsrKXt2YXIgeT1nJjE8PDEyLW0/MzA6Mjk7cys9eX12YXIgeD1oW28ueWVhci1oWzBdXSxiPW5ldyBEYXRlKHg+PjkmNDA5NSwoeD4+NSYxNSktMSwoMzEmeCkrcyk7cmV0dXJuIGEueWVhcj1iLmdldEZ1bGxZZWFyKCksYS5tb250aD0xK2IuZ2V0TW9udGgoKSxhLmRheT1iLmdldERhdGUoKSxhfSh0LHMscixvKTtyZXR1cm4gYS50b0pEKGwueWVhcixsLm1vbnRoLGwuZGF5KX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPWEuZnJvbUpEKHQpLHI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtpZigib2JqZWN0Ij09dHlwZW9mIHQpaT10LGE9ZXx8e307ZWxzZXt2YXIgbz0ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTE4ODgmJnQ8PTIxMTE7aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJTb2xhciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExIik7dmFyIHM9Im51bWJlciI9PXR5cGVvZiBlJiZlPj0xJiZlPD0xMjtpZighcyl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyIik7dmFyIGw9Im51bWJlciI9PXR5cGVvZiByJiZyPj0xJiZyPD0zMTtpZighbCl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIGRheSBvdXRzaWRlIHJhbmdlIDEgLSAzMSIpO2k9e3llYXI6dCxtb250aDplLGRheTpyfSxhPW58fHt9fXZhciBjPWhbaS55ZWFyLWhbMF1dLHU9aS55ZWFyPDw5fGkubW9udGg8PDV8aS5kYXk7YS55ZWFyPXU+PWM/aS55ZWFyOmkueWVhci0xLGM9aFthLnllYXItaFswXV07dmFyIHAsZD1uZXcgRGF0ZShjPj45JjQwOTUsKGM+PjUmMTUpLTEsMzEmYyksZz1uZXcgRGF0ZShpLnllYXIsaS5tb250aC0xLGkuZGF5KTtwPU1hdGgucm91bmQoKGctZCkvODY0ZTUpO3ZhciB2LG09ZlthLnllYXItZlswXV07Zm9yKHY9MDt2PDEzO3YrKyl7dmFyIHk9bSYxPDwxMi12PzMwOjI5O2lmKHA8eSlicmVhaztwLT15fXZhciB4PW0+PjEzOyF4fHx2PHg/KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPTErdik6dj09PXg/KGEuaXNJbnRlcmNhbGFyeT0hMCxhLm1vbnRoPXYpOihhLmlzSW50ZXJjYWxhcnk9ITEsYS5tb250aD12KTtyZXR1cm4gYS5kYXk9MStwLGF9KGUueWVhcigpLGUubW9udGgoKSxlLmRheSgpKSxuPXRoaXMudG9Nb250aEluZGV4KHIueWVhcixyLm1vbnRoLHIuaXNJbnRlcmNhbGFyeSk7cmV0dXJuIHRoaXMubmV3RGF0ZShyLnllYXIsbixyLmRheSl9LGZyb21TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChzKSxyPXRoaXMuX3ZhbGlkYXRlWWVhcigrZVsxXSksbj0rZVsyXSxpPSEhZVszXSxhPXRoaXMudG9Nb250aEluZGV4KHIsbixpKSxvPStlWzRdO3JldHVybiB0aGlzLm5ld0RhdGUocixhLG8pfSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQueWVhcigpLGk9dC5tb250aCgpLGE9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSxzPXRoaXMudG9DaGluZXNlTW9udGgobixpKSxsPU9iamVjdC5nZXRQcm90b3R5cGVPZihvLnByb3RvdHlwZSkuYWRkLmNhbGwodGhpcyx0LGUscik7aWYoInkiPT09cil7dmFyIGM9bC55ZWFyKCksdT1sLm1vbnRoKCksZj10aGlzLmlzSW50ZXJjYWxhcnlNb250aChjLHMpLGg9YSYmZj90aGlzLnRvTW9udGhJbmRleChjLHMsITApOnRoaXMudG9Nb250aEluZGV4KGMscywhMSk7aCE9PXUmJmwubW9udGgoaCl9cmV0dXJuIGx9fSk7dmFyIHM9L15ccyooLT9cZFxkXGRcZHxcZFxkKVstXC9dKFxkP1xkKShbaUldPylbLVwvXShcZD9cZCkvbSxsPS9eXGQ/XGRbaUldPy9tLGM9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdP1x1NjcwOC9tLHU9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdPy9tO24uY2FsZW5kYXJzLmNoaW5lc2U9bzt2YXIgZj1bMTg4Nyw1NzgwLDU4MDIsMTkxNTcsMjc0Miw1MDM1OSwxMTk4LDI2NDYsNDYzNzgsNzQ2NiwzNDEyLDMwMTIyLDU0ODIsNjc5NDksMjM5Niw1Mjk0LDQzNTk3LDY3MzIsNjk1NCwzNjE4MSwyNzcyLDQ5NTQsMTg3ODEsMjM5Niw1NDQyNyw1Mjc0LDY3MzAsNDc3ODEsNTgwMCw2ODY4LDIxMjEwLDQ3OTAsNTk3MDMsMjM1MCw1MjcwLDQ2NjY3LDM0MDIsMzQ5NiwzODMyNSwxMzg4LDQ3ODIsMTg3MzUsMjM1MCw1MjM3NCw2ODA0LDc0OTgsNDQ0NTcsMjkwNiwxMzg4LDI5Mjk0LDQ3MDAsNjM3ODksNjQ0Miw2ODA0LDU2MTM4LDU4MDIsMjc3MiwzODIzNSwxMjEwLDQ2OTgsMjI4MjcsNTQxOCw2MzEyNSwzNDc2LDU4MDIsNDM3MDEsMjQ4NCw1MzAyLDI3MjIzLDI2NDYsNzA5NTQsNzQ2NiwzNDEyLDU0Njk4LDU0ODIsMjQxMiwzODA2Miw1Mjk0LDI2MzYsMzIwMzgsNjk1NCw2MDI0NSwyNzcyLDQ4MjYsNDMzNTcsMjM5NCw1Mjc0LDM5NTAxLDY3MzAsNzIzNTcsNTgwMCw1ODQ0LDUzOTc4LDQ3OTAsMjM1OCwzODAzOSw1MjcwLDg3NjI3LDM0MDIsMzQ5Niw1NDcwOCw1NDg0LDQ3ODIsNDMzMTEsMjM1MCwzMjIyLDI3OTc4LDc0OTgsNjg5NjUsMjkwNCw1NDg0LDQ1Njc3LDQ3MDAsNjQ0NCwzOTU3Myw2ODA0LDY5ODYsMTkyODUsMjc3Miw2MjgxMSwxMjEwLDQ2OTgsNDc0MDMsNTQxOCw1NzgwLDM4NTcwLDU1NDYsNzY0NjksMjQyMCw1MzAyLDUxNzk5LDI2NDYsNTQxNCwzNjUwMSwzNDEyLDU1NDYsMTg4NjksMjQxMiw1NDQ0Niw1Mjc2LDY3MzIsNDg0MjIsNjgyMiwyOTAwLDI4MDEwLDQ4MjYsOTI1MDksMjM5NCw1Mjc0LDU1ODgzLDY3MzAsNjgyMCw0Nzk1Niw1ODEyLDI3NzgsMTg3NzksMjM1OCw2MjYxNSw1MjcwLDU0NTAsNDY3NTcsMzQ5Miw1NTU2LDI3MzE4LDQ3MTgsNjc4ODcsMjM1MCwzMjIyLDUyNTU0LDc0OTgsMzQyOCwzODI1Miw1NDY4LDQ3MDAsMzEwMjIsNjQ0NCw2NDE0OSw2ODA0LDY5ODYsNDM4NjEsMjc3Miw1MzM4LDM1NDIxLDI2NTAsNzA5NTUsNTQxOCw1NzgwLDU0OTU0LDU1NDYsMjc0MCwzODA3NCw1MzAyLDI2NDYsMjk5OTEsMzM2Niw2MTAxMSwzNDEyLDU1NDYsNDM0NDUsMjQxMiw1Mjk0LDM1NDA2LDY3MzIsNzI5OTgsNjgyMCw2OTk2LDUyNTg2LDI3NzgsMjM5NiwzODA0NSw1Mjc0LDY2OTgsMjMzMzMsNjgyMCw2NDMzOCw1ODEyLDI3NDYsNDMzNTUsMjM1OCw1MjcwLDM5NDk5LDU0NTAsNzk1MjUsMzQ5Miw1NTQ4XSxoPVsxODg3LDk2NjczMiw5NjcyMzEsOTY3NzMzLDk2ODI2NSw5Njg3NjYsOTY5Mjk3LDk2OTc5OCw5NzAyOTgsOTcwODI5LDk3MTMzMCw5NzE4MzAsOTcyMzYyLDk3Mjg2Myw5NzMzOTUsOTczODk2LDk3NDM5Nyw5NzQ5MjgsOTc1NDI4LDk3NTkyOSw5NzY0NjEsOTc2OTYyLDk3NzQ2Miw5Nzc5OTQsOTc4NDk0LDk3OTAyNiw5Nzk1MjYsOTgwMDI2LDk4MDU1OCw5ODEwNTksOTgxNTU5LDk4MjA5MSw5ODI1OTMsOTgzMTI0LDk4MzYyNCw5ODQxMjQsOTg0NjU2LDk4NTE1Nyw5ODU2NTYsOTg2MTg5LDk4NjY5MCw5ODcxOTEsOTg3NzIyLDk4ODIyMiw5ODg3NTMsOTg5MjU0LDk4OTc1NCw5OTAyODYsOTkwNzg4LDk5MTI4OCw5OTE4MTksOTkyMzE5LDk5Mjg1MSw5OTMzNTIsOTkzODUxLDk5NDM4Myw5OTQ4ODUsOTk1Mzg1LDk5NTkxNyw5OTY0MTgsOTk2OTE4LDk5NzQ1MCw5OTc5NDksOTk4NDgxLDk5ODk4Miw5OTk0ODMsMTAwMDAxNCwxMDAwNTE1LDEwMDEwMTYsMTAwMTU0OCwxMDAyMDQ3LDEwMDI1NzgsMTAwMzA4MCwxMDAzNTgwLDEwMDQxMTEsMTAwNDYxMywxMDA1MTEzLDEwMDU2NDUsMTAwNjE0NiwxMDA2NjQ1LDEwMDcxNzcsMTAwNzY3OCwxMDA4MjA5LDEwMDg3MTAsMTAwOTIxMSwxMDA5NzQzLDEwMTAyNDMsMTAxMDc0MywxMDExMjc1LDEwMTE3NzUsMTAxMjMwNiwxMDEyODA3LDEwMTMzMDgsMTAxMzg0MCwxMDE0MzQxLDEwMTQ4NDEsMTAxNTM3MywxMDE1ODc0LDEwMTY0MDQsMTAxNjkwNSwxMDE3NDA1LDEwMTc5MzcsMTAxODQzOCwxMDE4OTM5LDEwMTk0NzEsMTAxOTk3MiwxMDIwNDcxLDEwMjEwMDIsMTAyMTUwMywxMDIyMDM1LDEwMjI1MzUsMTAyMzAzNiwxMDIzNTY4LDEwMjQwNjksMTAyNDU2OCwxMDI1MTAwLDEwMjU2MDEsMTAyNjEwMiwxMDI2NjMzLDEwMjcxMzMsMTAyNzY2NiwxMDI4MTY3LDEwMjg2NjYsMTAyOTE5OCwxMDI5Njk5LDEwMzAxOTksMTAzMDczMCwxMDMxMjMxLDEwMzE3NjMsMTAzMjI2NCwxMDMyNzY0LDEwMzMyOTYsMTAzMzc5NywxMDM0Mjk3LDEwMzQ4MjgsMTAzNTMyOSwxMDM1ODMwLDEwMzYzNjIsMTAzNjg2MSwxMDM3MzkzLDEwMzc4OTQsMTAzODM5NCwxMDM4OTI1LDEwMzk0MjcsMTAzOTkyNywxMDQwNDU5LDEwNDA5NTksMTA0MTQ5MSwxMDQxOTkyLDEwNDI0OTIsMTA0MzAyMywxMDQzNTI0LDEwNDQwMjQsMTA0NDU1NiwxMDQ1MDU3LDEwNDU1NTgsMTA0NjA5MCwxMDQ2NTkwLDEwNDcxMjEsMTA0NzYyMiwxMDQ4MTIyLDEwNDg2NTQsMTA0OTE1NCwxMDQ5NjU1LDEwNTAxODcsMTA1MDY4OSwxMDUxMjE5LDEwNTE3MjAsMTA1MjIyMCwxMDUyNzUxLDEwNTMyNTIsMTA1Mzc1MiwxMDU0Mjg0LDEwNTQ3ODYsMTA1NTI4NSwxMDU1ODE3LDEwNTYzMTcsMTA1Njg0OSwxMDU3MzQ5LDEwNTc4NTAsMTA1ODM4MiwxMDU4ODgzLDEwNTkzODMsMTA1OTkxNSwxMDYwNDE1LDEwNjA5NDcsMTA2MTQ0NywxMDYxOTQ3LDEwNjI0NzksMTA2Mjk4MSwxMDYzNDgwLDEwNjQwMTIsMTA2NDUxNCwxMDY1MDE0LDEwNjU1NDUsMTA2NjA0NSwxMDY2NTc3LDEwNjcwNzgsMTA2NzU3OCwxMDY4MTEwLDEwNjg2MTEsMTA2OTExMiwxMDY5NjQyLDEwNzAxNDIsMTA3MDY3NCwxMDcxMTc1LDEwNzE2NzUsMTA3MjIwNywxMDcyNzA5LDEwNzMyMDksMTA3Mzc0MCwxMDc0MjQxLDEwNzQ3NDEsMTA3NTI3MywxMDc1NzczLDEwNzYzMDUsMTA3NjgwNywxMDc3MzA4LDEwNzc4MzksMTA3ODM0MCwxMDc4ODQwLDEwNzkzNzIsMTA3OTg3MSwxMDgwNDAzLDEwODA5MDRdfSx7Ii4uL21haW4iOjU1NSwib2JqZWN0LWFzc2lnbiI6NDQ2fV0sNTQyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiQ29wdGljIixqZEVwb2NoOjE4MjUwMjkuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNvcHRpYyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiVGhvdXQiLCJQYW9waSIsIkhhdGhvciIsIktvaWFrIiwiVG9iaSIsIk1lc2hpciIsIlBhcmVtaGF0IiwiUGFyZW1vdWRlIiwiUGFzaG9ucyIsIlBhb25pIiwiRXBpcCIsIk1lc29yaSIsIlBpIEtvZ2kgRW5hdm90Il0sbW9udGhOYW1lc1Nob3J0OlsiVGhvIiwiUGFvIiwiSGF0aCIsIktvaSIsIlRvYiIsIk1lc2giLCJQYXQiLCJQYWQiLCJQYXNoIiwiUGFvIiwiRXBpIiwiTWVzbyIsIlBpSyJdLGRheU5hbWVzOlsiVGt5cmlha2EiLCJQZXNuYXUiLCJQc2hvbWVudCIsIlBlZnRvb3UiLCJQdGlvdSIsIlBzb291IiwiUHNhYmJhdG9uIl0sZGF5TmFtZXNTaG9ydDpbIlRreSIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0aSIsIlBzbyIsIlBzYSJdLGRheU5hbWVzTWluOlsiVGsiLCJQZXMiLCJQc2giLCJQZWYiLCJQdCIsIlBzbyIsIlBzYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5jb3B0aWM9YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU0MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkRpc2N3b3JsZCIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlsxNiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiRGlzY3dvcmxkIixlcG9jaHM6WyJCVUMiLCJVQyJdLG1vbnRoTmFtZXM6WyJJY2siLCJPZmZsZSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJHcnVuZSIsIkF1Z3VzdCIsIlNwdW5lIiwiU2VrdG9iZXIiLCJFbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSWNrIiwiT2ZmIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiR3J1IiwiQXVnIiwiU3B1IiwiU2VrIiwiRW1iIiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJPY3RlZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiT2N0IiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk9jIiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Mixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDEzfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksNDAwfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvOCkrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV19LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gOH0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCkrMSklOH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5kYXlPZldlZWsodCxlLHIpO3JldHVybiBuPj0yJiZuPD02fSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybntjZW50dXJ5Om9bTWF0aC5mbG9vcigoaS55ZWFyKCktMSkvMTAwKSsxXXx8IiJ9fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSsoaS55ZWFyKCk8MD8xOjApLGU9aS5tb250aCgpLChyPWkuZGF5KCkpKyhlPjE/MTY6MCkrKGU+Mj8zMiooZS0yKTowKSs0MDAqKHQtMSkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSktTWF0aC5mbG9vcih0aGlzLmpkRXBvY2gpLTE7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCkrMTt0LT00MDAqKGUtMSksdCs9dD4xNT8xNjowO3ZhciByPU1hdGguZmxvb3IodC8zMikrMSxuPXQtMzIqKHItMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGU8PTA/ZS0xOmUscixuKX19KTt2YXIgbz17MjA6IkZydWl0YmF0IiwyMToiQW5jaG92eSJ9O24uY2FsZW5kYXJzLmRpc2N3b3JsZD1hfSx7Ii4uL21haW4iOjU1NSwib2JqZWN0LWFzc2lnbiI6NDQ2fV0sNTQ0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiRXRoaW9waWFuIixqZEVwb2NoOjE3MjQyMjAuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkV0aGlvcGlhbiIsZXBvY2hzOlsiQkVFIiwiRUUiXSxtb250aE5hbWVzOlsiTWVza2VyZW0iLCJUaWtlbWV0IiwiSGlkYXIiLCJUYWhlc2FzIiwiVGlyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc2UiLCJQYWd1bWUiXSxtb250aE5hbWVzU2hvcnQ6WyJNZXMiLCJUaWsiLCJIaWQiLCJUYWgiLCJUaXIiLCJZZWsiLCJNZWciLCJNaWEiLCJHZW4iLCJTZW4iLCJIYW0iLCJOZWgiLCJQYWciXSxkYXlOYW1lczpbIkVodWQiLCJTZWdubyIsIk1ha3NlZ25vIiwiSXJvYiIsIkhhbXVzIiwiQXJiIiwiS2lkYW1lIl0sZGF5TmFtZXNTaG9ydDpbIkVodSIsIlNlZyIsIk1hayIsIklybyIsIkhhbSIsIkFyYiIsIktpZCJdLGRheU5hbWVzTWluOlsiRWgiLCJTZSIsIk1hIiwiSXIiLCJIYSIsIkFyIiwiS2kiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTM9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybih0PWkueWVhcigpKTwwJiZ0KyssaS5kYXkoKSszMCooaS5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksbi5jYWxlbmRhcnMuZXRoaW9waWFuPWF9LHsiLi4vbWFpbiI6NTU1LCJvYmplY3QtYXNzaWduIjo0NDZ9XSw1NDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbyg3Kih0PXQ8MD90KzE6dCkrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCgtMT09PXQ/MTp0KzEsNywxKS10aGlzLnRvSkQodCw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09ZSYmdGhpcy5sZWFwWWVhcih0KT8zMDo4PT09ZSYmNT09PW8odGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8zMDo5PT09ZSYmMz09PW8odGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8yOTp0aGlzLmRheXNQZXJNb250aFtlLTFdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57eWVhclR5cGU6KHRoaXMubGVhcFllYXIoaSk/ImVtYm9saXNtaWMiOiJjb21tb24iKSsiICIrWyJkZWZpY2llbnQiLCJyZWd1bGFyIiwiY29tcGxldGUiXVt0aGlzLmRheXNJblllYXIoaSklMTAtM119fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKTt2YXIgYT10PD0wP3QrMTp0LG89dGhpcy5qZEVwb2NoK3RoaXMuX2RlbGF5MShhKSt0aGlzLl9kZWxheTIoYSkrcisxO2lmKGU8Nyl7Zm9yKHZhciBzPTc7czw9dGhpcy5tb250aHNJblllYXIodCk7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtmb3Iocz0xO3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpfWVsc2UgZm9yKHM9NztzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtyZXR1cm4gb30sX2RlbGF5MTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKCgyMzUqdC0yMzQpLzE5KSxyPTEyMDg0KzEzNzUzKmUsbj0yOSplK01hdGguZmxvb3Ioci8yNTkyMCk7cmV0dXJuIG8oMyoobisxKSw3KTwzJiZuKyssbn0sX2RlbGF5MjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kZWxheTEodC0xKSxyPXRoaXMuX2RlbGF5MSh0KTtyZXR1cm4gdGhpcy5fZGVsYXkxKHQrMSktcj09MzU2PzI6ci1lPT0zODI/MTowfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O2Zvcih2YXIgZT1NYXRoLmZsb29yKDk4NDk2Kih0LXRoaXMuamRFcG9jaCkvMzU5NzUzNTEpLTE7dD49dGhpcy50b0pEKC0xPT09ZT8xOmUrMSw3LDEpOyllKys7Zm9yKHZhciByPXQ8dGhpcy50b0pEKGUsMSwxKT83OjE7dD50aGlzLnRvSkQoZSxyLHRoaXMuZGF5c0luTW9udGgoZSxyKSk7KXIrKzt2YXIgbj10LXRoaXMudG9KRChlLHIsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5oZWJyZXc9YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU0NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IklzbGFtaWMiLGpkRXBvY2g6MTk0ODQzOS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IklzbGFtaWMiLGVwb2NoczpbIkJIIiwiQUgiXSxtb250aE5hbWVzOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmknIGFsLWF3d2FsIiwiUmFiaScgYWwtdGhhbmkiLCJKdW1hZGEgYWwtYXd3YWwiLCJKdW1hZGEgYWwtdGhhbmkiLCJSYWphYiIsIlNoYSdhYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHUgYWwtUWknZGFoIiwiRGh1IGFsLUhpamphaCJdLG1vbnRoTmFtZXNTaG9ydDpbIk11aCIsIlNhZiIsIlJhYjEiLCJSYWIyIiwiSnVtMSIsIkp1bTIiLCJSYWoiLCJTaGEnIiwiUmFtIiwiU2hhdyIsIkRodVEiLCJEaHVIIl0sZGF5TmFtZXM6WyJZYXdtIGFsLWFoYWQiLCJZYXdtIGFsLWl0aG5heW4iLCJZYXdtIGF0aC10aHVsYWF0aGFhJyIsIllhd20gYWwtYXJiaSdhYSciLCJZYXdtIGFsLWtoYW1cdTAxMmJzIiwiWWF3bSBhbC1qdW0nYSIsIllhd20gYXMtc2FidCJdLGRheU5hbWVzU2hvcnQ6WyJBaGEiLCJJdGgiLCJUaHUiLCJBcmIiLCJLaGEiLCJKdW0iLCJTYWIiXSxkYXlOYW1lc01pbjpbIkFoIiwiSXQiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybigxMSp0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpKzE0KSUzMDwxMX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MzU1OjM1NH0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9aS55ZWFyKCksZT1pLm1vbnRoKCksdD10PD0wP3QrMTp0LChyPWkuZGF5KCkpK01hdGguY2VpbCgyOS41KihlLTEpKSszNTQqKHQtMSkrTWF0aC5mbG9vcigoMysxMSp0KS8zMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7dmFyIGU9TWF0aC5mbG9vcigoMzAqKHQtdGhpcy5qZEVwb2NoKSsxMDY0NikvMTA2MzEpO2U9ZTw9MD9lLTE6ZTt2YXIgcj1NYXRoLm1pbigxMixNYXRoLmNlaWwoKHQtMjktdGhpcy50b0pEKGUsMSwxKSkvMjkuNSkrMSksbj10LXRoaXMudG9KRChlLHIsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5pc2xhbWljPWF9LHsiLi4vbWFpbiI6NTU1LCJvYmplY3QtYXNzaWduIjo0NDZ9XSw1NDc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJKdWxpYW4iLGpkRXBvY2g6MTcyMTQyMy41LGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ikp1bGlhbiIsZXBvY2hzOlsiQkMiLCJBRCJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCk8MD9lLnllYXIoKSsxOmUueWVhcigpKSU0PT0wfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKSx0PDAmJnQrKyxlPD0yJiYodC0tLGUrPTEyKSxNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkrMTUyNCxyPU1hdGguZmxvb3IoKGUtMTIyLjEpLzM2NS4yNSksbj1NYXRoLmZsb29yKDM2NS4yNSpyKSxpPU1hdGguZmxvb3IoKGUtbikvMzAuNjAwMSksYT1pLU1hdGguZmxvb3IoaTwxND8xOjEzKSxvPXItTWF0aC5mbG9vcihhPjI/NDcxNjo0NzE1KSxzPWUtbi1NYXRoLmZsb29yKDMwLjYwMDEqaSk7cmV0dXJuIG88PTAmJm8tLSx0aGlzLm5ld0RhdGUobyxhLHMpfX0pLG4uY2FsZW5kYXJzLmp1bGlhbj1hfSx7Ii4uL21haW4iOjU1NSwib2JqZWN0LWFzc2lnbiI6NDQ2fV0sNTQ4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBvKHQtMSxlKSsxfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJNYXlhbiIsamRFcG9jaDo1ODQyODIuNSxoYXNZZWFyWmVybzohMCxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MCxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJNYXlhbiIsZXBvY2hzOlsiIiwiIl0sbW9udGhOYW1lczpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sbW9udGhOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciXSxkYXlOYW1lczpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRheU5hbWVzU2hvcnQ6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc01pbjpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6IllZWVkubS5kIixmaXJzdERheTowLGlzUlRMOiExLGhhYWJNb250aHM6WyJQb3AiLCJVbyIsIlppcCIsIlpvdHoiLCJUemVjIiwiWHVsIiwiWWF4a2luIiwiTW9sIiwiQ2hlbiIsIllheCIsIlphYyIsIkNlaCIsIk1hYyIsIkthbmtpbiIsIk11YW4iLCJQYXgiLCJLYXlhYiIsIkN1bWt1IiwiVWF5ZWIiXSx0em9sa2luTW9udGhzOlsiSW1peCIsIklrIiwiQWtiYWwiLCJLYW4iLCJDaGljY2hhbiIsIkNpbWkiLCJNYW5payIsIkxhbWF0IiwiTXVsdWMiLCJPYyIsIkNodWVuIiwiRWIiLCJCZW4iLCJJeCIsIk1lbiIsIkNpYiIsIkNhYmFuIiwiRXR6bmFiIiwiQ2F1YWMiLCJBaGF1Il19fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKTt2YXIgZT1NYXRoLmZsb29yKHQvNDAwKTtyZXR1cm4gdCU9NDAwLHQrPXQ8MD80MDA6MCxlKyIuIitNYXRoLmZsb29yKHQvMjApKyIuIit0JTIwfSxmb3JZZWFyOmZ1bmN0aW9uKHQpe2lmKCh0PXQuc3BsaXQoIi4iKSkubGVuZ3RoPDMpdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXBhcnNlSW50KHRbcl0sMTApO2lmKE1hdGguYWJzKG4pPjE5fHxyPjAmJm48MCl0aHJvdyJJbnZhbGlkIE1heWFuIHllYXIiO2U9MjAqZStufXJldHVybiBlfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwxOH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLDB9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwzNjB9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksMjB9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNX0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSwhMH0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS50b0pEKCksYT10aGlzLl90b0hhYWIoaSksbz10aGlzLl90b1R6b2xraW4oaSk7cmV0dXJue2hhYWJNb250aE5hbWU6dGhpcy5sb2NhbC5oYWFiTW9udGhzW2FbMF0tMV0saGFhYk1vbnRoOmFbMF0saGFhYkRheTphWzFdLHR6b2xraW5EYXlOYW1lOnRoaXMubG9jYWwudHpvbGtpbk1vbnRoc1tvWzBdLTFdLHR6b2xraW5EYXk6b1swXSx0em9sa2luVHJlY2VuYTpvWzFdfX0sX3RvSGFhYjpmdW5jdGlvbih0KXt2YXIgZT1vKCh0LT10aGlzLmpkRXBvY2gpKzgrMzQwLDM2NSk7cmV0dXJuW01hdGguZmxvb3IoZS8yMCkrMSxvKGUsMjApXX0sX3RvVHpvbGtpbjpmdW5jdGlvbih0KXtyZXR1cm5bcygodC09dGhpcy5qZEVwb2NoKSsyMCwyMCkscyh0KzQsMTMpXX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIGkuZGF5KCkrMjAqaS5tb250aCgpKzM2MCppLnllYXIoKSt0aGlzLmpkRXBvY2h9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoO3ZhciBlPU1hdGguZmxvb3IodC8zNjApO3QlPTM2MCx0Kz10PDA/MzYwOjA7dmFyIHI9TWF0aC5mbG9vcih0LzIwKSxuPXQlMjA7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMubWF5YW49YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU0OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyO3ZhciBvPW4uaW5zdGFuY2UoImdyZWdvcmlhbiIpO2koYS5wcm90b3R5cGUse25hbWU6Ik5hbmFrc2hhaGkiLGpkRXBvY2g6MjI1NzY3My41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5hbmFrc2hhaGkiLGVwb2NoczpbIkJOIiwiQU4iXSxtb250aE5hbWVzOlsiQ2hldCIsIlZhaXNha2giLCJKZXRoIiwiSGFyaCIsIlNhd2FuIiwiQmhhZG9uIiwiQXNzdSIsIkthdGFrIiwiTWFnaGFyIiwiUG9oIiwiTWFnaCIsIlBoYWd1biJdLG1vbnRoTmFtZXNTaG9ydDpbIkNoZSIsIlZhaSIsIkpldCIsIkhhciIsIlNhdyIsIkJoYSIsIkFzcyIsIkthdCIsIk1nciIsIlBvaCIsIk1naCIsIlBoYSJdLGRheU5hbWVzOlsiU29tdmFhciIsIk1hbmdhbHZhciIsIkJ1ZGh2YWFyIiwiVmVlcnZhYXIiLCJTaHVrYXJ2YWFyIiwiU2FuaWNoYXJ2YWFyIiwiRXR2YWFyIl0sZGF5TmFtZXNTaG9ydDpbIlNvbSIsIk1hbmdhbCIsIkJ1ZGgiLCJWZWVyIiwiU2h1a2FyIiwiU2FuaWNoYXIiLCJFdCJdLGRheU5hbWVzTWluOlsiU28iLCJNYSIsIkJ1IiwiVmUiLCJTaCIsIlNhIiwiRXQiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC1tbS15eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIG8ubGVhcFllYXIoZS55ZWFyKCkrKGUueWVhcigpPDE/MTowKSsxNDY5KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoMS0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkTW9udGgpOyh0PWkueWVhcigpKTwwJiZ0Kys7Zm9yKHZhciBhPWkuZGF5KCkscz0xO3M8aS5tb250aCgpO3MrKylhKz10aGlzLmRheXNQZXJNb250aFtzLTFdO3JldHVybiBhK28udG9KRCh0KzE0NjgsMywxMyl9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSk7Zm9yKHZhciBlPU1hdGguZmxvb3IoKHQtKHRoaXMuamRFcG9jaC0xKSkvMzY2KTt0Pj10aGlzLnRvSkQoZSsxLDEsMSk7KWUrKztmb3IodmFyIHI9dC1NYXRoLmZsb29yKHRoaXMudG9KRChlLDEsMSkrLjUpKzEsbj0xO3I+dGhpcy5kYXlzSW5Nb250aChlLG4pOylyLT10aGlzLmRheXNJbk1vbnRoKGUsbiksbisrO3JldHVybiB0aGlzLm5ld0RhdGUoZSxuLHIpfX0pLG4uY2FsZW5kYXJzLm5hbmFrc2hhaGk9YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU1MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6Ik5lcGFsaSIsamRFcG9jaDoxNzAwNzA5LjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEsZGF5c1BlclllYXI6MzY1LHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5lcGFsaSIsZXBvY2hzOlsiQkJTIiwiQUJTIl0sbW9udGhOYW1lczpbIkJhaXNha2giLCJKZXN0aGEiLCJBc2hhZGgiLCJTaHJhd2FuIiwiQmhhZHJhIiwiQXNod2luIiwiS2FydGlrIiwiTWFuZ3NpciIsIlBhdXNoIiwiTWFuZ2giLCJGYWxndW4iLCJDaGFpdHJhIl0sbW9udGhOYW1lc1Nob3J0OlsiQmFpIiwiSmUiLCJBcyIsIlNocmEiLCJCaGEiLCJBc2giLCJLYXIiLCJNYW5nIiwiUGF1IiwiTWEiLCJGYWwiLCJDaGFpIl0sZGF5TmFtZXM6WyJBYWl0YWJhYXIiLCJTb21iYWFyIiwiTWFuZ2xiYWFyIiwiQnVkaGFiYWFyIiwiQmloaWJhYXIiLCJTaHVrcmFiYWFyIiwiU2hhbmliYWFyIl0sZGF5TmFtZXNTaG9ydDpbIkFhaXRhIiwiU29tIiwiTWFuZ2wiLCJCdWRoYSIsIkJpaGkiLCJTaHVrcmEiLCJTaGFuaSJdLGRheU5hbWVzTWluOlsiQWFpIiwiU28iLCJNYW4iLCJCdSIsIkJpIiwiU2h1IiwiU2hhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRheXNJblllYXIodCkhPT10aGlzLmRheXNQZXJZZWFyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtpZih0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdKXJldHVybiB0aGlzLmRheXNQZXJZZWFyO2Zvcih2YXIgZT0wLHI9dGhpcy5taW5Nb250aDtyPD0xMjtyKyspZSs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtyXTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF0/dGhpcy5kYXlzUGVyTW9udGhbZS0xXTp0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdW2VdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9bi5pbnN0YW5jZSgpLG89MCxzPWUsbD10O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEodCk7dmFyIGM9dC0ocz45fHw5PT09cyYmcj49dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXT81Njo1Nyk7Zm9yKDkhPT1lJiYobz1yLHMtLSk7OSE9PXM7KXM8PTAmJihzPTEyLGwtLSksbys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVtzXSxzLS07cmV0dXJuIDk9PT1lPyhvKz1yLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0pPDAmJihvKz1hLmRheXNJblllYXIoYykpOm8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bOV0tdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSxhLm5ld0RhdGUoYywxLDEpLmFkZChvLCJkIikudG9KRCgpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9bi5pbnN0YW5jZSgpLmZyb21KRCh0KSxyPWUueWVhcigpLGk9ZS5kYXlPZlllYXIoKSxhPXIrNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShhKTtmb3IodmFyIG89OSxzPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bMF0sbD10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dLXMrMTtpPmw7KSsrbz4xMiYmKG89MSxhKyspLGwrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb107dmFyIGM9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS0obC1pKTtyZXR1cm4gdGhpcy5uZXdEYXRlKGEsbyxjKX0sX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXlzUGVyTW9udGguc2xpY2UoMCk7ZS51bnNoaWZ0KDE3KTtmb3IodmFyIHI9dC0xO3I8dCsyO3IrKykidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl0mJih0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdPWUpfSxORVBBTElfQ0FMRU5EQVJfREFUQTp7MTk3MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzE6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk3MzpbMTksMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5NzQ6WzE5LDMxLDMxLDMyLDMwLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc1OlsxOCwzMSwzMSwzMiwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5Nzc6WzE4LDMxLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwxOTc4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3OTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTgxOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4MjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4NTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODY6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4ODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODk6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5OTI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTkzOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTk2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5NzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwMDpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxuLmNhbGVuZGFycy5uZXBhbGk9YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU1MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJQZXJzaWFuIixqZEVwb2NoOjE5NDgzMjAuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJQZXJzaWFuIixlcG9jaHM6WyJCUCIsIkFQIl0sbW9udGhOYW1lczpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRheSIsIkJhaG1hbiIsIkVzZmFuZCJdLG1vbnRoTmFtZXNTaG9ydDpbIkZhciIsIk9yZCIsIktobyIsIlRpciIsIk1vciIsIlNoYSIsIk1laCIsIkFiYSIsIkF6YSIsIkRheSIsIkJhaCIsIkVzZiJdLGRheU5hbWVzOlsiWWVrc2hhbWJlIiwiRG9zaGFtYmUiLCJTZXNoYW1iZSIsIkNoXHhlNmhhcnNoYW1iZSIsIlBhbmpzaGFtYmUiLCJKb20nZSIsIlNoYW1iZSJdLGRheU5hbWVzU2hvcnQ6WyJZZWsiLCJEbyIsIlNlIiwiQ2hceGU2IiwiUGFuaiIsIkpvbSIsIlNoYSJdLGRheU5hbWVzTWluOlsiWWUiLCJEbyIsIlNlIiwiQ2giLCJQYSIsIkpvIiwiU2giXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiA2ODIqKChlLnllYXIoKS0oZS55ZWFyKCk+MD80NzQ6NDczKSklMjgyMCs0NzQrMzgpJTI4MTY8NjgyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtKG4uZGF5T2ZXZWVrKCkrMSklNywiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dC0odD49MD80NzQ6NDczKSxzPTQ3NCtvKGEsMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKGEvMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT0odD1NYXRoLmZsb29yKHQpKy41KS10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1vKGUsMTAyOTk4MyksaT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgYT1NYXRoLmZsb29yKG4vMzY2KSxzPW8obiwzNjYpO2k9TWF0aC5mbG9vcigoMjEzNCphKzI4MTYqcysyODE1KS8xMDI4NTIyKSthKzF9dmFyIGw9aSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgYz10LXRoaXMudG9KRChsLDEsMSkrMSx1PWM8PTE4Nj9NYXRoLmNlaWwoYy8zMSk6TWF0aC5jZWlsKChjLTYpLzMwKSxmPXQtdGhpcy50b0pEKGwsdSwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCx1LGYpfX0pLG4uY2FsZW5kYXJzLnBlcnNpYW49YSxuLmNhbGVuZGFycy5qYWxhbGk9YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6IlRhaXdhbiIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUYWl3YW4iLGVwb2NoczpbIkJST0MiLCJST0MiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksbi5jYWxlbmRhcnMudGFpd2FuPW99LHsiLi4vbWFpbiI6NTU1LCJvYmplY3QtYXNzaWduIjo0NDZ9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJUaGFpIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGhhaSIsZXBvY2hzOlsiQkJFIiwiQkUiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksbi5jYWxlbmRhcnMudGhhaT1vfSx7Ii4uL21haW4iOjU1NSwib2JqZWN0LWFzc2lnbiI6NDQ2fV0sNTU0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiVW1tQWxRdXJhIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJVbW0gYWwtUXVyYSIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJBbC1NdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBBbC1UaGFuaSIsIkp1bWFkYSBBbC1Bd3dhbCIsIkp1bWFkYSBBbC1UaGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtQWhhZCIsIllhd20gYWwtSXRobmFpbiIsIllhd20gYWwtVGhhbFx1MDEwMXRoXHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1BcmJhXHUyMDE4XHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1LaGFtXHUwMTJicyIsIllhd20gYWwtSnVtXHUyMDE4YSIsIllhd20gYWwtU2FidCJdLGRheU5hbWVzTWluOlsiQWgiLCJJdGgiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCkudG9KRCgpLTI0ZTUrLjUsaT0wLGE9MDthPG8ubGVuZ3RoO2ErKyl7aWYob1thXT5yKXJldHVybiBvW2ldLW9baS0xXTtpKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksYT0xMiooaS55ZWFyKCktMSkraS5tb250aCgpLTE1MjkyO3JldHVybiBpLmRheSgpK29bYS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPmUpO24rKylyKys7dmFyIGk9cisxNTI5MixhPU1hdGguZmxvb3IoKGktMSkvMTIpLHM9YSsxLGw9aS0xMiphLGM9ZS1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHMsbCxjKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpJiYoaT0odD1udWxsIT10LnllYXI/dC55ZWFyOnQpPj0xMjc2JiZ0PD0xNTAwKSxpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoYS55ZWFyPDEyNzZ8fGEueWVhcj4xNTAwKXRocm93IGkucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGF9fSksbi5jYWxlbmRhcnMudW1tYWxxdXJhPWE7dmFyIG89WzIwLDUwLDc5LDEwOSwxMzgsMTY4LDE5NywyMjcsMjU2LDI4NiwzMTUsMzQ1LDM3NCw0MDQsNDMzLDQ2Myw0OTIsNTIyLDU1MSw1ODEsNjExLDY0MSw2NzAsNzAwLDcyOSw3NTksNzg4LDgxOCw4NDcsODc3LDkwNiw5MzYsOTY1LDk5NSwxMDI0LDEwNTQsMTA4MywxMTEzLDExNDIsMTE3MiwxMjAxLDEyMzEsMTI2MCwxMjkwLDEzMjAsMTM1MCwxMzc5LDE0MDksMTQzOCwxNDY4LDE0OTcsMTUyNywxNTU2LDE1ODYsMTYxNSwxNjQ1LDE2NzQsMTcwNCwxNzMzLDE3NjMsMTc5MiwxODIyLDE4NTEsMTg4MSwxOTEwLDE5NDAsMTk2OSwxOTk5LDIwMjgsMjA1OCwyMDg3LDIxMTcsMjE0NiwyMTc2LDIyMDUsMjIzNSwyMjY0LDIyOTQsMjMyMywyMzUzLDIzODMsMjQxMywyNDQyLDI0NzIsMjUwMSwyNTMxLDI1NjAsMjU5MCwyNjE5LDI2NDksMjY3OCwyNzA4LDI3MzcsMjc2NywyNzk2LDI4MjYsMjg1NSwyODg1LDI5MTQsMjk0NCwyOTczLDMwMDMsMzAzMiwzMDYyLDMwOTEsMzEyMSwzMTUwLDMxODAsMzIwOSwzMjM5LDMyNjgsMzI5OCwzMzI3LDMzNTcsMzM4NiwzNDE2LDM0NDYsMzQ3NiwzNTA1LDM1MzUsMzU2NCwzNTk0LDM2MjMsMzY1MywzNjgyLDM3MTIsMzc0MSwzNzcxLDM4MDAsMzgzMCwzODU5LDM4ODksMzkxOCwzOTQ4LDM5NzcsNDAwNyw0MDM2LDQwNjYsNDA5NSw0MTI1LDQxNTUsNDE4NSw0MjE0LDQyNDQsNDI3Myw0MzAzLDQzMzIsNDM2Miw0MzkxLDQ0MjEsNDQ1MCw0NDgwLDQ1MDksNDUzOSw0NTY4LDQ1OTgsNDYyNyw0NjU3LDQ2ODYsNDcxNiw0NzQ1LDQ3NzUsNDgwNCw0ODM0LDQ4NjMsNDg5Myw0OTIyLDQ5NTIsNDk4MSw1MDExLDUwNDAsNTA3MCw1MDk5LDUxMjksNTE1OCw1MTg4LDUyMTgsNTI0OCw1Mjc3LDUzMDcsNTMzNiw1MzY2LDUzOTUsNTQyNSw1NDU0LDU0ODQsNTUxMyw1NTQzLDU1NzIsNTYwMiw1NjMxLDU2NjEsNTY5MCw1NzIwLDU3NDksNTc3OSw1ODA4LDU4MzgsNTg2Nyw1ODk3LDU5MjYsNTk1Niw1OTg1LDYwMTUsNjA0NCw2MDc0LDYxMDMsNjEzMyw2MTYyLDYxOTIsNjIyMSw2MjUxLDYyODEsNjMxMSw2MzQwLDYzNzAsNjM5OSw2NDI5LDY0NTgsNjQ4OCw2NTE3LDY1NDcsNjU3Niw2NjA2LDY2MzUsNjY2NSw2Njk0LDY3MjQsNjc1Myw2NzgzLDY4MTIsNjg0Miw2ODcxLDY5MDEsNjkzMCw2OTYwLDY5ODksNzAxOSw3MDQ4LDcwNzgsNzEwNyw3MTM3LDcxNjYsNzE5Niw3MjI1LDcyNTUsNzI4NCw3MzE0LDczNDQsNzM3NCw3NDAzLDc0MzMsNzQ2Miw3NDkyLDc1MjEsNzU1MSw3NTgwLDc2MTAsNzYzOSw3NjY5LDc2OTgsNzcyOCw3NzU3LDc3ODcsNzgxNiw3ODQ2LDc4NzUsNzkwNSw3OTM0LDc5NjQsNzk5Myw4MDIzLDgwNTMsODA4Myw4MTEyLDgxNDIsODE3MSw4MjAxLDgyMzAsODI2MCw4Mjg5LDgzMTksODM0OCw4Mzc4LDg0MDcsODQzNyw4NDY2LDg0OTYsODUyNSw4NTU1LDg1ODQsODYxNCw4NjQzLDg2NzMsODcwMiw4NzMyLDg3NjEsODc5MSw4ODIxLDg4NTAsODg4MCw4OTA5LDg5MzgsODk2OCw4OTk3LDkwMjcsOTA1Niw5MDg2LDkxMTUsOTE0NSw5MTc1LDkyMDUsOTIzNCw5MjY0LDkyOTMsOTMyMiw5MzUyLDkzODEsOTQxMCw5NDQwLDk0NzAsOTQ5OSw5NTI5LDk1NTksOTU4OSw5NjE4LDk2NDgsOTY3Nyw5NzA2LDk3MzYsOTc2NSw5Nzk0LDk4MjQsOTg1Myw5ODgzLDk5MTMsOTk0Myw5OTcyLDEwMDAyLDEwMDMyLDEwMDYxLDEwMDkwLDEwMTIwLDEwMTQ5LDEwMTc4LDEwMjA4LDEwMjM3LDEwMjY3LDEwMjk3LDEwMzI2LDEwMzU2LDEwMzg2LDEwNDE1LDEwNDQ1LDEwNDc0LDEwNTA0LDEwNTMzLDEwNTYyLDEwNTkyLDEwNjIxLDEwNjUxLDEwNjgwLDEwNzEwLDEwNzQwLDEwNzcwLDEwNzk5LDEwODI5LDEwODU4LDEwODg4LDEwOTE3LDEwOTQ3LDEwOTc2LDExMDA1LDExMDM1LDExMDY0LDExMDk0LDExMTI0LDExMTUzLDExMTgzLDExMjEzLDExMjQyLDExMjcyLDExMzAxLDExMzMxLDExMzYwLDExMzg5LDExNDE5LDExNDQ4LDExNDc4LDExNTA3LDExNTM3LDExNTY3LDExNTk2LDExNjI2LDExNjU1LDExNjg1LDExNzE1LDExNzQ0LDExNzc0LDExODAzLDExODMyLDExODYyLDExODkxLDExOTIxLDExOTUwLDExOTgwLDEyMDEwLDEyMDM5LDEyMDY5LDEyMDk5LDEyMTI4LDEyMTU4LDEyMTg3LDEyMjE2LDEyMjQ2LDEyMjc1LDEyMzA0LDEyMzM0LDEyMzY0LDEyMzkzLDEyNDIzLDEyNDUzLDEyNDgzLDEyNTEyLDEyNTQyLDEyNTcxLDEyNjAwLDEyNjMwLDEyNjU5LDEyNjg4LDEyNzE4LDEyNzQ3LDEyNzc3LDEyODA3LDEyODM3LDEyODY2LDEyODk2LDEyOTI2LDEyOTU1LDEyOTg0LDEzMDE0LDEzMDQzLDEzMDcyLDEzMTAyLDEzMTMxLDEzMTYxLDEzMTkxLDEzMjIwLDEzMjUwLDEzMjgwLDEzMzEwLDEzMzM5LDEzMzY4LDEzMzk4LDEzNDI3LDEzNDU2LDEzNDg2LDEzNTE1LDEzNTQ1LDEzNTc0LDEzNjA0LDEzNjM0LDEzNjY0LDEzNjkzLDEzNzIzLDEzNzUyLDEzNzgyLDEzODExLDEzODQwLDEzODcwLDEzODk5LDEzOTI5LDEzOTU4LDEzOTg4LDE0MDE4LDE0MDQ3LDE0MDc3LDE0MTA3LDE0MTM2LDE0MTY2LDE0MTk1LDE0MjI0LDE0MjU0LDE0MjgzLDE0MzEzLDE0MzQyLDE0MzcyLDE0NDAxLDE0NDMxLDE0NDYxLDE0NDkwLDE0NTIwLDE0NTUwLDE0NTc5LDE0NjA5LDE0NjM4LDE0NjY3LDE0Njk3LDE0NzI2LDE0NzU2LDE0Nzg1LDE0ODE1LDE0ODQ0LDE0ODc0LDE0OTA0LDE0OTMzLDE0OTYzLDE0OTkzLDE1MDIxLDE1MDUxLDE1MDgxLDE1MTEwLDE1MTQwLDE1MTY5LDE1MTk5LDE1MjI4LDE1MjU4LDE1Mjg3LDE1MzE3LDE1MzQ3LDE1Mzc3LDE1NDA2LDE1NDM2LDE1NDY1LDE1NDk0LDE1NTI0LDE1NTUzLDE1NTgyLDE1NjEyLDE1NjQxLDE1NjcxLDE1NzAxLDE1NzMxLDE1NzYwLDE1NzkwLDE1ODIwLDE1ODQ5LDE1ODc4LDE1OTA4LDE1OTM3LDE1OTY2LDE1OTk2LDE2MDI1LDE2MDU1LDE2MDg1LDE2MTE0LDE2MTQ0LDE2MTc0LDE2MjA0LDE2MjMzLDE2MjYyLDE2MjkyLDE2MzIxLDE2MzUwLDE2MzgwLDE2NDA5LDE2NDM5LDE2NDY4LDE2NDk4LDE2NTI4LDE2NTU4LDE2NTg3LDE2NjE3LDE2NjQ2LDE2Njc2LDE2NzA1LDE2NzM0LDE2NzY0LDE2NzkzLDE2ODIzLDE2ODUyLDE2ODgyLDE2OTEyLDE2OTQxLDE2OTcxLDE3MDAxLDE3MDMwLDE3MDYwLDE3MDg5LDE3MTE4LDE3MTQ4LDE3MTc3LDE3MjA3LDE3MjM2LDE3MjY2LDE3Mjk1LDE3MzI1LDE3MzU1LDE3Mzg0LDE3NDE0LDE3NDQ0LDE3NDczLDE3NTAyLDE3NTMyLDE3NTYxLDE3NTkxLDE3NjIwLDE3NjUwLDE3Njc5LDE3NzA5LDE3NzM4LDE3NzY4LDE3Nzk4LDE3ODI3LDE3ODU3LDE3ODg2LDE3OTE2LDE3OTQ1LDE3OTc1LDE4MDA0LDE4MDM0LDE4MDYzLDE4MDkzLDE4MTIyLDE4MTUyLDE4MTgxLDE4MjExLDE4MjQxLDE4MjcwLDE4MzAwLDE4MzMwLDE4MzU5LDE4Mzg4LDE4NDE4LDE4NDQ3LDE4NDc2LDE4NTA2LDE4NTM1LDE4NTY1LDE4NTk1LDE4NjI1LDE4NjU0LDE4Njg0LDE4NzE0LDE4NzQzLDE4NzcyLDE4ODAyLDE4ODMxLDE4ODYwLDE4ODkwLDE4OTE5LDE4OTQ5LDE4OTc5LDE5MDA4LDE5MDM4LDE5MDY4LDE5MDk4LDE5MTI3LDE5MTU2LDE5MTg2LDE5MjE1LDE5MjQ0LDE5Mjc0LDE5MzAzLDE5MzMzLDE5MzYyLDE5MzkyLDE5NDIyLDE5NDUyLDE5NDgxLDE5NTExLDE5NTQwLDE5NTcwLDE5NTk5LDE5NjI4LDE5NjU4LDE5Njg3LDE5NzE3LDE5NzQ2LDE5Nzc2LDE5ODA2LDE5ODM2LDE5ODY1LDE5ODk1LDE5OTI0LDE5OTU0LDE5OTgzLDIwMDEyLDIwMDQyLDIwMDcxLDIwMTAxLDIwMTMwLDIwMTYwLDIwMTkwLDIwMjE5LDIwMjQ5LDIwMjc5LDIwMzA4LDIwMzM4LDIwMzY3LDIwMzk2LDIwNDI2LDIwNDU1LDIwNDg1LDIwNTE0LDIwNTQ0LDIwNTczLDIwNjAzLDIwNjMzLDIwNjYyLDIwNjkyLDIwNzIxLDIwNzUxLDIwNzgwLDIwODEwLDIwODM5LDIwODY5LDIwODk4LDIwOTI4LDIwOTU3LDIwOTg3LDIxMDE2LDIxMDQ2LDIxMDc2LDIxMTA1LDIxMTM1LDIxMTY0LDIxMTk0LDIxMjIzLDIxMjUzLDIxMjgyLDIxMzEyLDIxMzQxLDIxMzcxLDIxNDAwLDIxNDMwLDIxNDU5LDIxNDg5LDIxNTE5LDIxNTQ4LDIxNTc4LDIxNjA3LDIxNjM3LDIxNjY2LDIxNjk2LDIxNzI1LDIxNzU0LDIxNzg0LDIxODEzLDIxODQzLDIxODczLDIxOTAyLDIxOTMyLDIxOTYyLDIxOTkxLDIyMDIxLDIyMDUwLDIyMDgwLDIyMTA5LDIyMTM4LDIyMTY4LDIyMTk3LDIyMjI3LDIyMjU2LDIyMjg2LDIyMzE2LDIyMzQ2LDIyMzc1LDIyNDA1LDIyNDM0LDIyNDY0LDIyNDkzLDIyNTIyLDIyNTUyLDIyNTgxLDIyNjExLDIyNjQwLDIyNjcwLDIyNzAwLDIyNzMwLDIyNzU5LDIyNzg5LDIyODE4LDIyODQ4LDIyODc3LDIyOTA2LDIyOTM2LDIyOTY1LDIyOTk0LDIzMDI0LDIzMDU0LDIzMDgzLDIzMTEzLDIzMTQzLDIzMTczLDIzMjAyLDIzMjMyLDIzMjYxLDIzMjkwLDIzMzIwLDIzMzQ5LDIzMzc5LDIzNDA4LDIzNDM4LDIzNDY3LDIzNDk3LDIzNTI3LDIzNTU2LDIzNTg2LDIzNjE2LDIzNjQ1LDIzNjc0LDIzNzA0LDIzNzMzLDIzNzYzLDIzNzkyLDIzODIyLDIzODUxLDIzODgxLDIzOTEwLDIzOTQwLDIzOTcwLDIzOTk5LDI0MDI5LDI0MDU4LDI0MDg4LDI0MTE3LDI0MTQ3LDI0MTc2LDI0MjA2LDI0MjM1LDI0MjY1LDI0Mjk0LDI0MzI0LDI0MzUzLDI0MzgzLDI0NDEzLDI0NDQyLDI0NDcyLDI0NTAxLDI0NTMxLDI0NTYwLDI0NTkwLDI0NjE5LDI0NjQ4LDI0Njc4LDI0NzA3LDI0NzM3LDI0NzY3LDI0Nzk2LDI0ODI2LDI0ODU2LDI0ODg1LDI0OTE1LDI0OTQ0LDI0OTc0LDI1MDAzLDI1MDMyLDI1MDYyLDI1MDkxLDI1MTIxLDI1MTUwLDI1MTgwLDI1MjEwLDI1MjQwLDI1MjY5LDI1Mjk5LDI1MzI4LDI1MzU4LDI1Mzg3LDI1NDE2LDI1NDQ2LDI1NDc1LDI1NTA1LDI1NTM0LDI1NTY0LDI1NTk0LDI1NjI0LDI1NjUzLDI1NjgzLDI1NzEyLDI1NzQyLDI1NzcxLDI1ODAwLDI1ODMwLDI1ODU5LDI1ODg4LDI1OTE4LDI1OTQ4LDI1OTc3LDI2MDA3LDI2MDM3LDI2MDY3LDI2MDk2LDI2MTI2LDI2MTU1LDI2MTg0LDI2MjE0LDI2MjQzLDI2MjcyLDI2MzAyLDI2MzMyLDI2MzYxLDI2MzkxLDI2NDIxLDI2NDUxLDI2NDgwLDI2NTEwLDI2NTM5LDI2NTY4LDI2NTk4LDI2NjI3LDI2NjU2LDI2Njg2LDI2NzE1LDI2NzQ1LDI2Nzc1LDI2ODA1LDI2ODM0LDI2ODY0LDI2ODkzLDI2OTIzLDI2OTUyLDI2OTgyLDI3MDExLDI3MDQxLDI3MDcwLDI3MDk5LDI3MTI5LDI3MTU5LDI3MTg4LDI3MjE4LDI3MjQ4LDI3Mjc3LDI3MzA3LDI3MzM2LDI3MzY2LDI3Mzk1LDI3NDI1LDI3NDU0LDI3NDg0LDI3NTEzLDI3NTQyLDI3NTcyLDI3NjAyLDI3NjMxLDI3NjYxLDI3NjkxLDI3NzIwLDI3NzUwLDI3Nzc5LDI3ODA5LDI3ODM4LDI3ODY4LDI3ODk3LDI3OTI2LDI3OTU2LDI3OTg1LDI4MDE1LDI4MDQ1LDI4MDc0LDI4MTA0LDI4MTM0LDI4MTYzLDI4MTkzLDI4MjIyLDI4MjUyLDI4MjgxLDI4MzEwLDI4MzQwLDI4MzY5LDI4Mzk5LDI4NDI4LDI4NDU4LDI4NDg4LDI4NTE3LDI4NTQ3LDI4NTc3LDI4NjA3LDI4NjM2LDI4NjY1LDI4Njk1LDI4NzI0LDI4NzU0LDI4NzgzLDI4ODEzLDI4ODQzLDI4ODcyLDI4OTAxLDI4OTMxLDI4OTYwLDI4OTkwLDI5MDE5LDI5MDQ5LDI5MDc4LDI5MTA4LDI5MTM3LDI5MTY3LDI5MTk2LDI5MjI2LDI5MjU1LDI5Mjg1LDI5MzE1LDI5MzQ1LDI5Mzc1LDI5NDA0LDI5NDM0LDI5NDYzLDI5NDkyLDI5NTIyLDI5NTUxLDI5NTgwLDI5NjEwLDI5NjQwLDI5NjY5LDI5Njk5LDI5NzI5LDI5NzU5LDI5Nzg4LDI5ODE4LDI5ODQ3LDI5ODc2LDI5OTA2LDI5OTM1LDI5OTY0LDI5OTk0LDMwMDIzLDMwMDUzLDMwMDgyLDMwMTEyLDMwMTQxLDMwMTcxLDMwMjAwLDMwMjMwLDMwMjU5LDMwMjg5LDMwMzE4LDMwMzQ4LDMwMzc4LDMwNDA4LDMwNDM3LDMwNDY3LDMwNDk2LDMwNTI2LDMwNTU1LDMwNTg1LDMwNjE0LDMwNjQ0LDMwNjczLDMwNzAzLDMwNzMyLDMwNzYyLDMwNzkxLDMwODIxLDMwODUwLDMwODgwLDMwOTA5LDMwOTM5LDMwOTY4LDMwOTk4LDMxMDI3LDMxMDU3LDMxMDg2LDMxMTE2LDMxMTQ1LDMxMTc1LDMxMjA0LDMxMjM0LDMxMjYzLDMxMjkzLDMxMzIyLDMxMzUyLDMxMzgxLDMxNDExLDMxNDQxLDMxNDcxLDMxNTAwLDMxNTMwLDMxNTU5LDMxNTg5LDMxNjE4LDMxNjQ4LDMxNjc2LDMxNzA2LDMxNzM2LDMxNzY2LDMxNzk1LDMxODI1LDMxODU0LDMxODg0LDMxOTEzLDMxOTQzLDMxOTcyLDMyMDAyLDMyMDMxLDMyMDYxLDMyMDkwLDMyMTIwLDMyMTUwLDMyMTgwLDMyMjA5LDMyMjM5LDMyMjY4LDMyMjk4LDMyMzI3LDMyMzU3LDMyMzg2LDMyNDE2LDMyNDQ1LDMyNDc1LDMyNTA0LDMyNTM0LDMyNTYzLDMyNTkzLDMyNjIyLDMyNjUyLDMyNjgxLDMyNzExLDMyNzQwLDMyNzcwLDMyNzk5LDMyODI5LDMyODU4LDMyODg4LDMyOTE3LDMyOTQ3LDMyOTc2LDMzMDA2LDMzMDM1LDMzMDY1LDMzMDk0LDMzMTI0LDMzMTUzLDMzMTgzLDMzMjEzLDMzMjQzLDMzMjcyLDMzMzAyLDMzMzMxLDMzMzYxLDMzMzkwLDMzNDIwLDMzNDUwLDMzNDc5LDMzNTA5LDMzNTM5LDMzNTY4LDMzNTk4LDMzNjI3LDMzNjU3LDMzNjg2LDMzNzE2LDMzNzQ1LDMzNzc1LDMzODA0LDMzODM0LDMzODYzLDMzODkzLDMzOTIyLDMzOTUyLDMzOTgxLDM0MDExLDM0MDQwLDM0MDY5LDM0MDk5LDM0MTI4LDM0MTU4LDM0MTg3LDM0MjE3LDM0MjQ3LDM0Mjc3LDM0MzA2LDM0MzM2LDM0MzY1LDM0Mzk1LDM0NDI0LDM0NDU0LDM0NDgzLDM0NTEyLDM0NTQyLDM0NTcxLDM0NjAxLDM0NjMxLDM0NjYwLDM0NjkwLDM0NzE5LDM0NzQ5LDM0Nzc4LDM0ODA4LDM0ODM3LDM0ODY3LDM0ODk2LDM0OTI2LDM0OTU1LDM0OTg1LDM1MDE1LDM1MDQ0LDM1MDc0LDM1MTAzLDM1MTMzLDM1MTYyLDM1MTkyLDM1MjIyLDM1MjUxLDM1MjgwLDM1MzEwLDM1MzQwLDM1MzcwLDM1Mzk5LDM1NDI5LDM1NDU4LDM1NDg4LDM1NTE3LDM1NTQ3LDM1NTc2LDM1NjA1LDM1NjM1LDM1NjY1LDM1Njk0LDM1NzIzLDM1NzUzLDM1NzgyLDM1ODExLDM1ODQxLDM1ODcxLDM1OTAxLDM1OTMwLDM1OTYwLDM1OTg5LDM2MDE5LDM2MDQ4LDM2MDc4LDM2MTA3LDM2MTM2LDM2MTY2LDM2MTk1LDM2MjI1LDM2MjU0LDM2Mjg0LDM2MzE0LDM2MzQzLDM2MzczLDM2NDAzLDM2NDMzLDM2NDYyLDM2NDkyLDM2NTIxLDM2NTUxLDM2NTgwLDM2NjEwLDM2NjM5LDM2NjY5LDM2Njk4LDM2NzI4LDM2NzU3LDM2Nzg2LDM2ODE2LDM2ODQ1LDM2ODc1LDM2OTA0LDM2OTM0LDM2OTYzLDM2OTkzLDM3MDIyLDM3MDUyLDM3MDgxLDM3MTExLDM3MTQxLDM3MTcwLDM3MjAwLDM3MjI5LDM3MjU5LDM3Mjg4LDM3MzE4LDM3MzQ3LDM3Mzc3LDM3NDA2LDM3NDM2LDM3NDY1LDM3NDk1LDM3NTI0LDM3NTU0LDM3NTg0LDM3NjEzLDM3NjQzLDM3NjcyLDM3NzAxLDM3NzMxLDM3NzYwLDM3NzkwLDM3ODE5LDM3ODQ5LDM3ODc4LDM3OTA4LDM3OTM4LDM3OTY3LDM3OTk3LDM4MDI3LDM4MDU2LDM4MDg1LDM4MTE1LDM4MTQ0LDM4MTc0LDM4MjAzLDM4MjMzLDM4MjYyLDM4MjkyLDM4MzIyLDM4MzUxLDM4MzgxLDM4NDEwLDM4NDQwLDM4NDY5LDM4NDk5LDM4NTI4LDM4NTU4LDM4NTg3LDM4NjE3LDM4NjQ2LDM4Njc2LDM4NzA1LDM4NzM1LDM4NzY0LDM4Nzk0LDM4ODIzLDM4ODUzLDM4ODgyLDM4OTEyLDM4OTQxLDM4OTcxLDM5MDAxLDM5MDMwLDM5MDU5LDM5MDg5LDM5MTE4LDM5MTQ4LDM5MTc4LDM5MjA4LDM5MjM3LDM5MjY3LDM5Mjk3LDM5MzI2LDM5MzU1LDM5Mzg1LDM5NDE0LDM5NDQ0LDM5NDczLDM5NTAzLDM5NTMyLDM5NTYyLDM5NTkyLDM5NjIxLDM5NjUwLDM5NjgwLDM5NzA5LDM5NzM5LDM5NzY4LDM5Nzk4LDM5ODI3LDM5ODU3LDM5ODg2LDM5OTE2LDM5OTQ2LDM5OTc1LDQwMDA1LDQwMDM1LDQwMDY0LDQwMDk0LDQwMTIzLDQwMTUzLDQwMTgyLDQwMjEyLDQwMjQxLDQwMjcxLDQwMzAwLDQwMzMwLDQwMzU5LDQwMzg5LDQwNDE4LDQwNDQ4LDQwNDc3LDQwNTA3LDQwNTM2LDQwNTY2LDQwNTk1LDQwNjI1LDQwNjU1LDQwNjg1LDQwNzE0LDQwNzQ0LDQwNzczLDQwODAzLDQwODMyLDQwODYyLDQwODkyLDQwOTIxLDQwOTUxLDQwOTgwLDQxMDA5LDQxMDM5LDQxMDY4LDQxMDk4LDQxMTI3LDQxMTU3LDQxMTg2LDQxMjE2LDQxMjQ1LDQxMjc1LDQxMzA0LDQxMzM0LDQxMzY0LDQxMzkzLDQxNDIyLDQxNDUyLDQxNDgxLDQxNTExLDQxNTQwLDQxNTcwLDQxNTk5LDQxNjI5LDQxNjU4LDQxNjg4LDQxNzE4LDQxNzQ4LDQxNzc3LDQxODA3LDQxODM2LDQxODY1LDQxODk0LDQxOTI0LDQxOTUzLDQxOTgzLDQyMDEyLDQyMDQyLDQyMDcyLDQyMTAyLDQyMTMxLDQyMTYxLDQyMTkwLDQyMjIwLDQyMjQ5LDQyMjc5LDQyMzA4LDQyMzM3LDQyMzY3LDQyMzk3LDQyNDI2LDQyNDU2LDQyNDg1LDQyNTE1LDQyNTQ1LDQyNTc0LDQyNjA0LDQyNjMzLDQyNjYyLDQyNjkyLDQyNzIxLDQyNzUxLDQyNzgwLDQyODEwLDQyODM5LDQyODY5LDQyODk5LDQyOTI5LDQyOTU4LDQyOTg4LDQzMDE3LDQzMDQ2LDQzMDc2LDQzMTA1LDQzMTM1LDQzMTY0LDQzMTk0LDQzMjIzLDQzMjUzLDQzMjgzLDQzMzEyLDQzMzQyLDQzMzcxLDQzNDAxLDQzNDMwLDQzNDYwLDQzNDg5LDQzNTE5LDQzNTQ4LDQzNTc4LDQzNjA3LDQzNjM3LDQzNjY2LDQzNjk2LDQzNzI2LDQzNzU1LDQzNzg1LDQzODE0LDQzODQ0LDQzODczLDQzOTAzLDQzOTMyLDQzOTYyLDQzOTkxLDQ0MDIxLDQ0MDUwLDQ0MDgwLDQ0MTA5LDQ0MTM5LDQ0MTY5LDQ0MTk4LDQ0MjI4LDQ0MjU4LDQ0Mjg3LDQ0MzE3LDQ0MzQ2LDQ0Mzc1LDQ0NDA1LDQ0NDM0LDQ0NDY0LDQ0NDkzLDQ0NTIzLDQ0NTUzLDQ0NTgyLDQ0NjEyLDQ0NjQxLDQ0NjcxLDQ0NzAwLDQ0NzMwLDQ0NzU5LDQ0Nzg4LDQ0ODE4LDQ0ODQ3LDQ0ODc3LDQ0OTA2LDQ0OTM2LDQ0OTY2LDQ0OTk2LDQ1MDI1LDQ1MDU1LDQ1MDg0LDQ1MTE0LDQ1MTQzLDQ1MTcyLDQ1MjAyLDQ1MjMxLDQ1MjYxLDQ1MjkwLDQ1MzIwLDQ1MzUwLDQ1MzgwLDQ1NDA5LDQ1NDM5LDQ1NDY4LDQ1NDk4LDQ1NTI3LDQ1NTU2LDQ1NTg2LDQ1NjE1LDQ1NjQ0LDQ1Njc0LDQ1NzA0LDQ1NzMzLDQ1NzYzLDQ1NzkzLDQ1ODIzLDQ1ODUyLDQ1ODgyLDQ1OTExLDQ1OTQwLDQ1OTcwLDQ1OTk5LDQ2MDI4LDQ2MDU4LDQ2MDg4LDQ2MTE3LDQ2MTQ3LDQ2MTc3LDQ2MjA2LDQ2MjM2LDQ2MjY1LDQ2Mjk1LDQ2MzI0LDQ2MzU0LDQ2MzgzLDQ2NDEzLDQ2NDQyLDQ2NDcyLDQ2NTAxLDQ2NTMxLDQ2NTYwLDQ2NTkwLDQ2NjIwLDQ2NjQ5LDQ2Njc5LDQ2NzA4LDQ2NzM4LDQ2NzY3LDQ2Nzk3LDQ2ODI2LDQ2ODU2LDQ2ODg1LDQ2OTE1LDQ2OTQ0LDQ2OTc0LDQ3MDAzLDQ3MDMzLDQ3MDYzLDQ3MDkyLDQ3MTIyLDQ3MTUxLDQ3MTgxLDQ3MjEwLDQ3MjQwLDQ3MjY5LDQ3Mjk4LDQ3MzI4LDQ3MzU3LDQ3Mzg3LDQ3NDE3LDQ3NDQ2LDQ3NDc2LDQ3NTA2LDQ3NTM1LDQ3NTY1LDQ3NTk0LDQ3NjI0LDQ3NjUzLDQ3NjgyLDQ3NzEyLDQ3NzQxLDQ3NzcxLDQ3ODAwLDQ3ODMwLDQ3ODYwLDQ3ODkwLDQ3OTE5LDQ3OTQ5LDQ3OTc4LDQ4MDA4LDQ4MDM3LDQ4MDY2LDQ4MDk2LDQ4MTI1LDQ4MTU1LDQ4MTg0LDQ4MjE0LDQ4MjQ0LDQ4MjczLDQ4MzAzLDQ4MzMzLDQ4MzYyLDQ4MzkyLDQ4NDIxLDQ4NDUwLDQ4NDgwLDQ4NTA5LDQ4NTM4LDQ4NTY4LDQ4NTk4LDQ4NjI3LDQ4NjU3LDQ4Njg3LDQ4NzE3LDQ4NzQ2LDQ4Nzc2LDQ4ODA1LDQ4ODM0LDQ4ODY0LDQ4ODkzLDQ4OTIyLDQ4OTUyLDQ4OTgyLDQ5MDExLDQ5MDQxLDQ5MDcxLDQ5MTAwLDQ5MTMwLDQ5MTYwLDQ5MTg5LDQ5MjE4LDQ5MjQ4LDQ5Mjc3LDQ5MzA2LDQ5MzM2LDQ5MzY1LDQ5Mzk1LDQ5NDI1LDQ5NDU1LDQ5NDg0LDQ5NTE0LDQ5NTQzLDQ5NTczLDQ5NjAyLDQ5NjMyLDQ5NjYxLDQ5NjkwLDQ5NzIwLDQ5NzQ5LDQ5Nzc5LDQ5ODA5LDQ5ODM4LDQ5ODY4LDQ5ODk4LDQ5OTI3LDQ5OTU3LDQ5OTg2LDUwMDE2LDUwMDQ1LDUwMDc1LDUwMTA0LDUwMTMzLDUwMTYzLDUwMTkyLDUwMjIyLDUwMjUyLDUwMjgxLDUwMzExLDUwMzQwLDUwMzcwLDUwNDAwLDUwNDI5LDUwNDU5LDUwNDg4LDUwNTE4LDUwNTQ3LDUwNTc2LDUwNjA2LDUwNjM1LDUwNjY1LDUwNjk0LDUwNzI0LDUwNzU0LDUwNzg0LDUwODEzLDUwODQzLDUwODcyLDUwOTAyLDUwOTMxLDUwOTYwLDUwOTkwLDUxMDE5LDUxMDQ5LDUxMDc4LDUxMTA4LDUxMTM4LDUxMTY3LDUxMTk3LDUxMjI3LDUxMjU2LDUxMjg2LDUxMzE1LDUxMzQ1LDUxMzc0LDUxNDAzLDUxNDMzLDUxNDYyLDUxNDkyLDUxNTIyLDUxNTUyLDUxNTgyLDUxNjExLDUxNjQxLDUxNjcwLDUxNjk5LDUxNzI5LDUxNzU4LDUxNzg3LDUxODE2LDUxODQ2LDUxODc2LDUxOTA2LDUxOTM2LDUxOTY1LDUxOTk1LDUyMDI1LDUyMDU0LDUyMDgzLDUyMTEzLDUyMTQyLDUyMTcxLDUyMjAwLDUyMjMwLDUyMjYwLDUyMjkwLDUyMzE5LDUyMzQ5LDUyMzc5LDUyNDA4LDUyNDM4LDUyNDY3LDUyNDk3LDUyNTI2LDUyNTU1LDUyNTg1LDUyNjE0LDUyNjQ0LDUyNjczLDUyNzAzLDUyNzMzLDUyNzYyLDUyNzkyLDUyODIyLDUyODUxLDUyODgxLDUyOTEwLDUyOTM5LDUyOTY5LDUyOTk4LDUzMDI4LDUzMDU3LDUzMDg3LDUzMTE2LDUzMTQ2LDUzMTc2LDUzMjA1LDUzMjM1LDUzMjY0LDUzMjk0LDUzMzI0LDUzMzUzLDUzMzgzLDUzNDEyLDUzNDQxLDUzNDcxLDUzNTAwLDUzNTMwLDUzNTU5LDUzNTg5LDUzNjE5LDUzNjQ4LDUzNjc4LDUzNzA4LDUzNzM3LDUzNzY3LDUzNzk2LDUzODI1LDUzODU1LDUzODg0LDUzOTEzLDUzOTQzLDUzOTczLDU0MDAzLDU0MDMyLDU0MDYyLDU0MDkyLDU0MTIxLDU0MTUxLDU0MTgwLDU0MjA5LDU0MjM5LDU0MjY4LDU0Mjk3LDU0MzI3LDU0MzU3LDU0Mzg3LDU0NDE2LDU0NDQ2LDU0NDc2LDU0NTA1LDU0NTM1LDU0NTY0LDU0NTkzLDU0NjIzLDU0NjUyLDU0NjgxLDU0NzExLDU0NzQxLDU0NzcwLDU0ODAwLDU0ODMwLDU0ODU5LDU0ODg5LDU0OTE5LDU0OTQ4LDU0OTc3LDU1MDA3LDU1MDM2LDU1MDY2LDU1MDk1LDU1MTI1LDU1MTU0LDU1MTg0LDU1MjEzLDU1MjQzLDU1MjczLDU1MzAyLDU1MzMyLDU1MzYxLDU1MzkxLDU1NDIwLDU1NDUwLDU1NDc5LDU1NTA4LDU1NTM4LDU1NTY3LDU1NTk3LDU1NjI3LDU1NjU3LDU1Njg2LDU1NzE2LDU1NzQ1LDU1Nzc1LDU1ODA0LDU1ODM0LDU1ODYzLDU1ODkyLDU1OTIyLDU1OTUxLDU1OTgxLDU2MDExLDU2MDQwLDU2MDcwLDU2MTAwLDU2MTI5LDU2MTU5LDU2MTg4LDU2MjE4LDU2MjQ3LDU2Mjc2LDU2MzA2LDU2MzM1LDU2MzY1LDU2Mzk0LDU2NDI0LDU2NDU0LDU2NDgzLDU2NTEzLDU2NTQzLDU2NTcyLDU2NjAxLDU2NjMxLDU2NjYwLDU2NjkwLDU2NzE5LDU2NzQ5LDU2Nzc4LDU2ODA4LDU2ODM3LDU2ODY3LDU2ODk3LDU2OTI2LDU2OTU2LDU2OTg1LDU3MDE1LDU3MDQ0LDU3MDc0LDU3MTAzLDU3MTMzLDU3MTYyLDU3MTkyLDU3MjIxLDU3MjUxLDU3MjgwLDU3MzEwLDU3MzQwLDU3MzY5LDU3Mzk5LDU3NDI5LDU3NDU4LDU3NDg3LDU3NTE3LDU3NTQ2LDU3NTc2LDU3NjA1LDU3NjM0LDU3NjY0LDU3Njk0LDU3NzIzLDU3NzUzLDU3NzgzLDU3ODEzLDU3ODQyLDU3ODcxLDU3OTAxLDU3OTMwLDU3OTU5LDU3OTg5LDU4MDE4LDU4MDQ4LDU4MDc3LDU4MTA3LDU4MTM3LDU4MTY3LDU4MTk2LDU4MjI2LDU4MjU1LDU4Mjg1LDU4MzE0LDU4MzQzLDU4MzczLDU4NDAyLDU4NDMyLDU4NDYxLDU4NDkxLDU4NTIxLDU4NTUxLDU4NTgwLDU4NjEwLDU4NjM5LDU4NjY5LDU4Njk4LDU4NzI3LDU4NzU3LDU4Nzg2LDU4ODE2LDU4ODQ1LDU4ODc1LDU4OTA1LDU4OTM0LDU4OTY0LDU4OTk0LDU5MDIzLDU5MDUzLDU5MDgyLDU5MTExLDU5MTQxLDU5MTcwLDU5MjAwLDU5MjI5LDU5MjU5LDU5Mjg4LDU5MzE4LDU5MzQ4LDU5Mzc3LDU5NDA3LDU5NDM2LDU5NDY2LDU5NDk1LDU5NTI1LDU5NTU0LDU5NTg0LDU5NjEzLDU5NjQzLDU5NjcyLDU5NzAyLDU5NzMxLDU5NzYxLDU5NzkxLDU5ODIwLDU5ODUwLDU5ODc5LDU5OTA5LDU5OTM5LDU5OTY4LDU5OTk3LDYwMDI3LDYwMDU2LDYwMDg2LDYwMTE1LDYwMTQ1LDYwMTc0LDYwMjA0LDYwMjM0LDYwMjY0LDYwMjkzLDYwMzIzLDYwMzUyLDYwMzgxLDYwNDExLDYwNDQwLDYwNDY5LDYwNDk5LDYwNTI4LDYwNTU4LDYwNTg4LDYwNjE4LDYwNjQ4LDYwNjc3LDYwNzA3LDYwNzM2LDYwNzY1LDYwNzk1LDYwODI0LDYwODUzLDYwODgzLDYwOTEyLDYwOTQyLDYwOTcyLDYxMDAyLDYxMDMxLDYxMDYxLDYxMDkwLDYxMTIwLDYxMTQ5LDYxMTc5LDYxMjA4LDYxMjM3LDYxMjY3LDYxMjk2LDYxMzI2LDYxMzU2LDYxMzg1LDYxNDE1LDYxNDQ1LDYxNDc0LDYxNTA0LDYxNTMzLDYxNTYzLDYxNTkyLDYxNjIxLDYxNjUxLDYxNjgwLDYxNzEwLDYxNzM5LDYxNzY5LDYxNzk5LDYxODI4LDYxODU4LDYxODg4LDYxOTE3LDYxOTQ3LDYxOTc2LDYyMDA2LDYyMDM1LDYyMDY0LDYyMDk0LDYyMTIzLDYyMTUzLDYyMTgyLDYyMjEyLDYyMjQyLDYyMjcxLDYyMzAxLDYyMzMxLDYyMzYwLDYyMzkwLDYyNDE5LDYyNDQ4LDYyNDc4LDYyNTA3LDYyNTM3LDYyNTY2LDYyNTk2LDYyNjI1LDYyNjU1LDYyNjg1LDYyNzE1LDYyNzQ0LDYyNzc0LDYyODAzLDYyODMyLDYyODYyLDYyODkxLDYyOTIxLDYyOTUwLDYyOTgwLDYzMDA5LDYzMDM5LDYzMDY5LDYzMDk5LDYzMTI4LDYzMTU3LDYzMTg3LDYzMjE2LDYzMjQ2LDYzMjc1LDYzMzA1LDYzMzM0LDYzMzYzLDYzMzkzLDYzNDIzLDYzNDUzLDYzNDgyLDYzNTEyLDYzNTQxLDYzNTcxLDYzNjAwLDYzNjMwLDYzNjU5LDYzNjg5LDYzNzE4LDYzNzQ3LDYzNzc3LDYzODA3LDYzODM2LDYzODY2LDYzODk1LDYzOTI1LDYzOTU1LDYzOTg0LDY0MDE0LDY0MDQzLDY0MDczLDY0MTAyLDY0MTMxLDY0MTYxLDY0MTkwLDY0MjIwLDY0MjQ5LDY0Mjc5LDY0MzA5LDY0MzM5LDY0MzY4LDY0Mzk4LDY0NDI3LDY0NDU3LDY0NDg2LDY0NTE1LDY0NTQ1LDY0NTc0LDY0NjAzLDY0NjMzLDY0NjYzLDY0NjkyLDY0NzIyLDY0NzUyLDY0NzgyLDY0ODExLDY0ODQxLDY0ODcwLDY0ODk5LDY0OTI5LDY0OTU4LDY0OTg3LDY1MDE3LDY1MDQ3LDY1MDc2LDY1MTA2LDY1MTM2LDY1MTY2LDY1MTk1LDY1MjI1LDY1MjU0LDY1MjgzLDY1MzEzLDY1MzQyLDY1MzcxLDY1NDAxLDY1NDMxLDY1NDYwLDY1NDkwLDY1NTIwLDY1NTQ5LDY1NTc5LDY1NjA4LDY1NjM4LDY1NjY3LDY1Njk3LDY1NzI2LDY1NzU1LDY1Nzg1LDY1ODE1LDY1ODQ0LDY1ODc0LDY1OTAzLDY1OTMzLDY1OTYzLDY1OTkyLDY2MDIyLDY2MDUxLDY2MDgxLDY2MTEwLDY2MTQwLDY2MTY5LDY2MTk5LDY2MjI4LDY2MjU4LDY2Mjg3LDY2MzE3LDY2MzQ2LDY2Mzc2LDY2NDA1LDY2NDM1LDY2NDY1LDY2NDk0LDY2NTI0LDY2NTUzLDY2NTgzLDY2NjEyLDY2NjQxLDY2NjcxLDY2NzAwLDY2NzMwLDY2NzYwLDY2Nzg5LDY2ODE5LDY2ODQ5LDY2ODc4LDY2OTA4LDY2OTM3LDY2OTY3LDY2OTk2LDY3MDI1LDY3MDU1LDY3MDg0LDY3MTE0LDY3MTQzLDY3MTczLDY3MjAzLDY3MjMzLDY3MjYyLDY3MjkyLDY3MzIxLDY3MzUxLDY3MzgwLDY3NDA5LDY3NDM5LDY3NDY4LDY3NDk3LDY3NTI3LDY3NTU3LDY3NTg3LDY3NjE3LDY3NjQ2LDY3Njc2LDY3NzA1LDY3NzM1LDY3NzY0LDY3NzkzLDY3ODIzLDY3ODUyLDY3ODgyLDY3OTExLDY3OTQxLDY3OTcxLDY4ZTMsNjgwMzAsNjgwNjAsNjgwODksNjgxMTksNjgxNDgsNjgxNzcsNjgyMDcsNjgyMzYsNjgyNjYsNjgyOTUsNjgzMjUsNjgzNTQsNjgzODQsNjg0MTQsNjg0NDMsNjg0NzMsNjg1MDIsNjg1MzIsNjg1NjEsNjg1OTEsNjg2MjAsNjg2NTAsNjg2NzksNjg3MDgsNjg3MzgsNjg3NjgsNjg3OTcsNjg4MjcsNjg4NTcsNjg4ODYsNjg5MTYsNjg5NDYsNjg5NzUsNjkwMDQsNjkwMzQsNjkwNjMsNjkwOTIsNjkxMjIsNjkxNTIsNjkxODEsNjkyMTEsNjkyNDAsNjkyNzAsNjkzMDAsNjkzMzAsNjkzNTksNjkzODgsNjk0MTgsNjk0NDcsNjk0NzYsNjk1MDYsNjk1MzUsNjk1NjUsNjk1OTUsNjk2MjQsNjk2NTQsNjk2ODQsNjk3MTMsNjk3NDMsNjk3NzIsNjk4MDIsNjk4MzEsNjk4NjEsNjk4OTAsNjk5MTksNjk5NDksNjk5NzgsNzAwMDgsNzAwMzgsNzAwNjcsNzAwOTcsNzAxMjYsNzAxNTYsNzAxODYsNzAyMTUsNzAyNDUsNzAyNzQsNzAzMDMsNzAzMzMsNzAzNjIsNzAzOTIsNzA0MjEsNzA0NTEsNzA0ODEsNzA1MTAsNzA1NDAsNzA1NzAsNzA1OTksNzA2MjksNzA2NTgsNzA2ODcsNzA3MTcsNzA3NDYsNzA3NzYsNzA4MDUsNzA4MzUsNzA4NjQsNzA4OTQsNzA5MjQsNzA5NTQsNzA5ODMsNzEwMTMsNzEwNDIsNzEwNzEsNzExMDEsNzExMzAsNzExNTksNzExODksNzEyMTgsNzEyNDgsNzEyNzgsNzEzMDgsNzEzMzcsNzEzNjcsNzEzOTcsNzE0MjYsNzE0NTUsNzE0ODUsNzE1MTQsNzE1NDMsNzE1NzMsNzE2MDIsNzE2MzIsNzE2NjIsNzE2OTEsNzE3MjEsNzE3NTEsNzE3ODEsNzE4MTAsNzE4MzksNzE4NjksNzE4OTgsNzE5MjcsNzE5NTcsNzE5ODYsNzIwMTYsNzIwNDYsNzIwNzUsNzIxMDUsNzIxMzUsNzIxNjQsNzIxOTQsNzIyMjMsNzIyNTMsNzIyODIsNzIzMTEsNzIzNDEsNzIzNzAsNzI0MDAsNzI0MjksNzI0NTksNzI0ODksNzI1MTgsNzI1NDgsNzI1NzcsNzI2MDcsNzI2MzcsNzI2NjYsNzI2OTUsNzI3MjUsNzI3NTQsNzI3ODQsNzI4MTMsNzI4NDMsNzI4NzIsNzI5MDIsNzI5MzEsNzI5NjEsNzI5OTEsNzMwMjAsNzMwNTAsNzMwODAsNzMxMDksNzMxMzksNzMxNjgsNzMxOTcsNzMyMjcsNzMyNTYsNzMyODYsNzMzMTUsNzMzNDUsNzMzNzUsNzM0MDQsNzM0MzQsNzM0NjQsNzM0OTMsNzM1MjMsNzM1NTIsNzM1ODEsNzM2MTEsNzM2NDAsNzM2NjksNzM2OTksNzM3MjksNzM3NTgsNzM3ODgsNzM4MTgsNzM4NDgsNzM4NzcsNzM5MDcsNzM5MzYsNzM5NjUsNzM5OTUsNzQwMjQsNzQwNTMsNzQwODMsNzQxMTMsNzQxNDIsNzQxNzIsNzQyMDIsNzQyMzEsNzQyNjEsNzQyOTEsNzQzMjAsNzQzNDksNzQzNzksNzQ0MDgsNzQ0MzcsNzQ0NjcsNzQ0OTcsNzQ1MjYsNzQ1NTYsNzQ1ODYsNzQ2MTUsNzQ2NDUsNzQ2NzUsNzQ3MDQsNzQ3MzMsNzQ3NjMsNzQ3OTIsNzQ4MjIsNzQ4NTEsNzQ4ODEsNzQ5MTAsNzQ5NDAsNzQ5NjksNzQ5OTksNzUwMjksNzUwNTgsNzUwODgsNzUxMTcsNzUxNDcsNzUxNzYsNzUyMDYsNzUyMzUsNzUyNjQsNzUyOTQsNzUzMjMsNzUzNTMsNzUzODMsNzU0MTIsNzU0NDIsNzU0NzIsNzU1MDEsNzU1MzEsNzU1NjAsNzU1OTAsNzU2MTksNzU2NDgsNzU2NzgsNzU3MDcsNzU3MzcsNzU3NjYsNzU3OTYsNzU4MjYsNzU4NTYsNzU4ODUsNzU5MTUsNzU5NDQsNzU5NzQsNzYwMDMsNzYwMzIsNzYwNjIsNzYwOTEsNzYxMjEsNzYxNTAsNzYxODAsNzYyMTAsNzYyMzksNzYyNjksNzYyOTksNzYzMjgsNzYzNTgsNzYzODcsNzY0MTYsNzY0NDYsNzY0NzUsNzY1MDUsNzY1MzQsNzY1NjQsNzY1OTMsNzY2MjMsNzY2NTMsNzY2ODIsNzY3MTIsNzY3NDEsNzY3NzEsNzY4MDEsNzY4MzAsNzY4NTksNzY4ODksNzY5MTgsNzY5NDgsNzY5NzcsNzcwMDcsNzcwMzYsNzcwNjYsNzcwOTYsNzcxMjUsNzcxNTUsNzcxODUsNzcyMTQsNzcyNDMsNzcyNzMsNzczMDIsNzczMzIsNzczNjEsNzczOTAsNzc0MjAsNzc0NTAsNzc0NzksNzc1MDksNzc1MzksNzc1NjksNzc1OTgsNzc2MjcsNzc2NTcsNzc2ODYsNzc3MTUsNzc3NDUsNzc3NzQsNzc4MDQsNzc4MzMsNzc4NjMsNzc4OTMsNzc5MjMsNzc5NTIsNzc5ODIsNzgwMTEsNzgwNDEsNzgwNzAsNzgwOTksNzgxMjksNzgxNTgsNzgxODgsNzgyMTcsNzgyNDcsNzgyNzcsNzgzMDcsNzgzMzYsNzgzNjYsNzgzOTUsNzg0MjUsNzg0NTQsNzg0ODMsNzg1MTMsNzg1NDIsNzg1NzIsNzg2MDEsNzg2MzEsNzg2NjEsNzg2OTAsNzg3MjAsNzg3NTAsNzg3NzksNzg4MDgsNzg4MzgsNzg4NjcsNzg4OTcsNzg5MjYsNzg5NTYsNzg5ODUsNzkwMTUsNzkwNDQsNzkwNzQsNzkxMDQsNzkxMzMsNzkxNjMsNzkxOTIsNzkyMjIsNzkyNTEsNzkyODEsNzkzMTAsNzkzNDAsNzkzNjksNzkzOTksNzk0MjgsNzk0NTgsNzk0ODcsNzk1MTcsNzk1NDYsNzk1NzYsNzk2MDYsNzk2MzUsNzk2NjUsNzk2OTUsNzk3MjQsNzk3NTMsNzk3ODMsNzk4MTIsNzk4NDEsNzk4NzEsNzk5MDAsNzk5MzAsNzk5NjAsNzk5OTBdfSx7Ii4uL21haW4iOjU1NSwib2JqZWN0LWFzc2lnbiI6NDQ2fV0sNTU1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkoKXt0aGlzLnJlZ2lvbmFsT3B0aW9ucz1bXSx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl09e2ludmFsaWRDYWxlbmRhcjoiQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCIsaW52YWxpZERhdGU6IkludmFsaWQgezB9IGRhdGUiLGludmFsaWRNb250aDoiSW52YWxpZCB7MH0gbW9udGgiLGludmFsaWRZZWFyOiJJbnZhbGlkIHswfSB5ZWFyIixkaWZmZXJlbnRDYWxlbmRhcnM6IkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMifSx0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zWyIiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gYSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4iMDAwMDAwIi5zdWJzdHJpbmcoMCxlLSh0PSIiK3QpLmxlbmd0aCkrdH1mdW5jdGlvbiBzKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9IisxMCJ9ZnVuY3Rpb24gbCh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3RdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19bihpLnByb3RvdHlwZSx7aW5zdGFuY2U6ZnVuY3Rpb24odCxlKXt0PSh0fHwiZ3JlZ29yaWFuIikudG9Mb3dlckNhc2UoKSxlPWV8fCIiO3ZhciByPXRoaXMuX2xvY2FsQ2Fsc1t0KyItIitlXTtpZighciYmdGhpcy5jYWxlbmRhcnNbdF0mJihyPW5ldyB0aGlzLmNhbGVuZGFyc1t0XShlKSx0aGlzLl9sb2NhbENhbHNbdCsiLSIrZV09ciksIXIpdGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQ2FsZW5kYXIpLnJlcGxhY2UoL1x7MFx9Lyx0KTtyZXR1cm4gcn0sbmV3RGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybihuPShudWxsIT10JiZ0LnllYXI/dC5jYWxlbmRhcigpOiJzdHJpbmciPT10eXBlb2Ygbj90aGlzLmluc3RhbmNlKG4saSk6bil8fHRoaXMuaW5zdGFuY2UoKSkubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9fSxzdWJzdGl0dXRlQ2hpbmVzZURpZ2l0czpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49IiIsaT0wO3I+MDspe3ZhciBhPXIlMTA7bj0oMD09PWE/IiI6dFthXStlW2ldKStuLGkrKyxyPU1hdGguZmxvb3Ioci8xMCl9cmV0dXJuIDA9PT1uLmluZGV4T2YodFsxXStlWzFdKSYmKG49bi5zdWJzdHIoMSkpLG58fHRbMF19fX0pLG4oYS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKG51bGw9PXQ/dGhpczp0LGUscil9LHllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3llYXI6dGhpcy5zZXQodCwieSIpfSxtb250aDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fbW9udGg6dGhpcy5zZXQodCwibSIpfSxkYXk6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RheTp0aGlzLnNldCh0LCJkIil9LGRhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHQsZSxyKSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtyZXR1cm4gdGhpcy5feWVhcj10LHRoaXMuX21vbnRoPWUsdGhpcy5fZGF5PXIsdGhpc30sbGVhcFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubGVhcFllYXIodGhpcyl9LGVwb2NoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVwb2NoKHRoaXMpfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFllYXIodGhpcyl9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcyl9LGRheXNJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luTW9udGgodGhpcyl9LGRheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcyl9LHdlZWtEYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla0RheSh0aGlzKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLHQsZSl9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcyx0LGUpfSxjb21wYXJlVG86ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsZW5kYXIubmFtZSE9PXQuX2NhbGVuZGFyLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5fY2FsZW5kYXIubG9jYWwubmFtZSk7dmFyIGU9dGhpcy5feWVhciE9PXQuX3llYXI/dGhpcy5feWVhci10Ll95ZWFyOnRoaXMuX21vbnRoIT09dC5fbW9udGg/dGhpcy5tb250aE9mWWVhcigpLXQubW9udGhPZlllYXIoKTp0aGlzLl9kYXktdC5fZGF5O3JldHVybiAwPT09ZT8wOmU8MD8tMToxfSxjYWxlbmRhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhcn0sdG9KRDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pEKHRoaXMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KRCh0KX0sdG9KU0RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KU0RhdGUodGhpcyl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KU0RhdGUodCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKHRoaXMueWVhcigpKSw0KSsiLSIrbyh0aGlzLm1vbnRoKCksMikrIi0iK28odGhpcy5kYXkoKSwyKX19KSxuKHMucHJvdG90eXBlLHtfdmFsaWRhdGVMZXZlbDowLG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBudWxsPT10P3RoaXMudG9kYXkoKToodC55ZWFyJiYodGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxyPXQuZGF5KCksZT10Lm1vbnRoKCksdD10LnllYXIoKSksbmV3IGEodGhpcyx0LGUscikpfSx0b2RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZyb21KU0RhdGUobmV3IERhdGUpfSxlcG9jaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcikueWVhcigpPDA/dGhpcy5sb2NhbC5lcG9jaHNbMF06dGhpcy5sb2NhbC5lcG9jaHNbMV19LGZvcm1hdFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuKGUueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKGUueWVhcigpKSw0KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxMn0sbW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpO3JldHVybihyLm1vbnRoKCkrdGhpcy5tb250aHNJblllYXIociktdGhpcy5maXJzdE1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcihyKSt0aGlzLm1pbk1vbnRofSxmcm9tTW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj0oZSt0aGlzLmZpcnN0TW9udGgtMip0aGlzLm1pbk1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcih0KSt0aGlzLm1pbk1vbnRoO3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHIsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpLHJ9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMubGVhcFllYXIoZSk/MzY2OjM2NX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBuLnRvSkQoKS10aGlzLm5ld0RhdGUobi55ZWFyKCksdGhpcy5mcm9tTW9udGhPZlllYXIobi55ZWFyKCksdGhpcy5taW5Nb250aCksdGhpcy5taW5EYXkpLnRvSkQoKSsxfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDd9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4oTWF0aC5mbG9vcih0aGlzLnRvSkQobikpKzIpJXRoaXMuZGF5c0luV2VlaygpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHt9fSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSx0aGlzLl9jb3JyZWN0QWRkKHQsdGhpcy5fYWRkKHQsZSxyKSxlLHIpfSxfYWRkOmZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssImQiPT09cnx8InciPT09cil7dmFyIG49dC50b0pEKCkrZSooInciPT09cj90aGlzLmRheXNJbldlZWsoKToxKSxpPXQuY2FsZW5kYXIoKS5mcm9tSkQobik7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxbaS55ZWFyKCksaS5tb250aCgpLGkuZGF5KCldfXRyeXt2YXIgYT10LnllYXIoKSsoInkiPT09cj9lOjApLG89dC5tb250aE9mWWVhcigpKygibSI9PT1yP2U6MCk7aT10LmRheSgpOyJ5Ij09PXI/KHQubW9udGgoKSE9PXRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykmJihvPXRoaXMubmV3RGF0ZShhLHQubW9udGgoKSx0aGlzLm1pbkRheSkubW9udGhPZlllYXIoKSksbz1NYXRoLm1pbihvLHRoaXMubW9udGhzSW5ZZWFyKGEpKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk6Im0iPT09ciYmKCFmdW5jdGlvbih0KXtmb3IoO288dC5taW5Nb250aDspYS0tLG8rPXQubW9udGhzSW5ZZWFyKGEpO2Zvcih2YXIgZT10Lm1vbnRoc0luWWVhcihhKTtvPmUtMSt0Lm1pbk1vbnRoOylhKyssby09ZSxlPXQubW9udGhzSW5ZZWFyKGEpfSh0aGlzKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk7dmFyIHM9W2EsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSxpXTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHN9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fSxfY29ycmVjdEFkZDpmdW5jdGlvbih0LGUscixuKXtpZighKHRoaXMuaGFzWWVhclplcm98fCJ5IiE9PW4mJiJtIiE9PW58fDAhPT1lWzBdJiZ0LnllYXIoKT4wPT1lWzBdPjApKXt2YXIgaT17eTpbMSwxLCJ5Il0sbTpbMSx0aGlzLm1vbnRoc0luWWVhcigtMSksIm0iXSx3Olt0aGlzLmRheXNJbldlZWsoKSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl0sZDpbMSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl19W25dLGE9cjwwPy0xOjE7ZT10aGlzLl9hZGQodCxyKmlbMF0rYSppWzFdLGlbMl0pfXJldHVybiB0LmRhdGUoZVswXSxlWzFdLGVbMl0pfSxzZXQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3ZhciBuPSJ5Ij09PXI/ZTp0LnllYXIoKSxpPSJtIj09PXI/ZTp0Lm1vbnRoKCksYT0iZCI9PT1yP2U6dC5kYXkoKTtyZXR1cm4ieSIhPT1yJiYibSIhPT1yfHwoYT1NYXRoLm1pbihhLHRoaXMuZGF5c0luTW9udGgobixpKSkpLHQuZGF0ZShuLGksYSl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlTGV2ZWwrKzt2YXIgbj10aGlzLmhhc1llYXJaZXJvfHwwIT09dDtpZihuKXt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHRoaXMubWluRGF5KTtuPWU+PXRoaXMubWluTW9udGgmJmUtdGhpcy5taW5Nb250aDx0aGlzLm1vbnRoc0luWWVhcihpKSYmcj49dGhpcy5taW5EYXkmJnItdGhpcy5taW5EYXk8dGhpcy5kYXlzSW5Nb250aChpKX1yZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLG59LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBjLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChuKSkudG9KU0RhdGUoKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tSkQoYy5pbnN0YW5jZSgpLmZyb21KU0RhdGUodCkudG9KRCgpKX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQueWVhcil7aWYoMD09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJnRoaXMubmFtZSE9PXQuY2FsZW5kYXIoKS5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uZGlmZmVyZW50Q2FsZW5kYXJzKS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5jYWxlbmRhcigpLmxvY2FsLm5hbWUpO3JldHVybiB0fXRyeXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssMT09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLmlzVmFsaWQodCxlLHIpKXRocm93IG4ucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLGl9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fX0pLGwucHJvdG90eXBlPW5ldyBzLG4obC5wcm90b3R5cGUse25hbWU6IkdyZWdvcmlhbiIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiR3JlZ29yaWFuIixlcG9jaHM6WyJCQ0UiLCJDRSJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0wJiYodCUxMDAhPTB8fHQlNDAwPT0wKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpLHQ8MCYmdCsrLGU8MyYmKGUrPTEyLHQtLSk7dmFyIGk9TWF0aC5mbG9vcih0LzEwMCksYT0yLWkrTWF0aC5mbG9vcihpLzQpO3JldHVybiBNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyK2EtMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSxyPU1hdGguZmxvb3IoKGUtMTg2NzIxNi4yNSkvMzY1MjQuMjUpLG49KHI9ZSsxK3ItTWF0aC5mbG9vcihyLzQpKSsxNTI0LGk9TWF0aC5mbG9vcigobi0xMjIuMSkvMzY1LjI1KSxhPU1hdGguZmxvb3IoMzY1LjI1KmkpLG89TWF0aC5mbG9vcigobi1hKS8zMC42MDAxKSxzPW4tYS1NYXRoLmZsb29yKDMwLjYwMDEqbyksbD1vLShvPjEzLjU/MTM6MSksYz1pLShsPjIuNT80NzE2OjQ3MTUpO3JldHVybiBjPD0wJiZjLS0sdGhpcy5uZXdEYXRlKGMsbCxzKX0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSksaT1uZXcgRGF0ZShuLnllYXIoKSxuLm1vbnRoKCktMSxuLmRheSgpKTtyZXR1cm4gaS5zZXRIb3VycygwKSxpLnNldE1pbnV0ZXMoMCksaS5zZXRTZWNvbmRzKDApLGkuc2V0TWlsbGlzZWNvbmRzKDApLGkuc2V0SG91cnMoaS5nZXRIb3VycygpPjEyP2kuZ2V0SG91cnMoKSsyOjApLGl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmV3RGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpKzEsdC5nZXREYXRlKCkpfX0pO3ZhciBjPWUuZXhwb3J0cz1uZXcgaTtjLmNkYXRlPWEsYy5iYXNlQ2FsZW5kYXI9cyxjLmNhbGVuZGFycy5ncmVnb3JpYW49bH0seyJvYmplY3QtYXNzaWduIjo0NDZ9XSw1NTY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJvYmplY3QtYXNzaWduIiksaT10KCIuL21haW4iKTtuKGkucmVnaW9uYWxPcHRpb25zWyIiXSx7aW52YWxpZEFyZ3VtZW50czoiSW52YWxpZCBhcmd1bWVudHMiLGludmFsaWRGb3JtYXQ6IkNhbm5vdCBmb3JtYXQgYSBkYXRlIGZyb20gYW5vdGhlciBjYWxlbmRhciIsbWlzc2luZ051bWJlckF0OiJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiB7MH0iLHVua25vd25OYW1lQXQ6IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRMaXRlcmFsQXQ6IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRUZXh0OiJBZGRpdGlvbmFsIHRleHQgZm91bmQgYXQgZW5kIn0pLGkubG9jYWw9aS5yZWdpb25hbE9wdGlvbnNbIiJdLG4oaS5jZGF0ZS5wcm90b3R5cGUse2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihlPXQsdD0iIiksdGhpcy5fY2FsZW5kYXIuZm9ybWF0RGF0ZSh0fHwiIix0aGlzLGUpfX0pLG4oaS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLHtVTklYX0VQT0NIOmkuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsMSwxKS50b0pEKCksU0VDU19QRVJfREFZOjg2NDAwLFRJQ0tTX0VQT0NIOmkuaW5zdGFuY2UoKS5qZEVwb2NoLFRJQ0tTX1BFUl9EQVk6ODY0ZTksQVRPTToieXl5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5eXkiLEZVTEw6IkRELCBNTSBkLCB5eXl5IixJU09fODYwMToieXl5eS1tbS1kZCIsSlVMSUFOOiJKIixSRkNfODIyOiJELCBkIE0geXkiLFJGQ184NTA6IkRELCBkZC1NLXl5IixSRkNfMTAzNjoiRCwgZCBNIHl5IixSRkNfMTEyMzoiRCwgZCBNIHl5eXkiLFJGQ18yODIyOiJELCBkIE0geXl5eSIsUlNTOiJELCBkIE0geXkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXl5eS1tbS1kZCIsZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUscil7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYocj1lLGU9dCx0PSIiKSwhZSlyZXR1cm4iIjtpZihlLmNhbGVuZGFyKCkhPT10aGlzKXRocm93IGkubG9jYWwuaW52YWxpZEZvcm1hdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRGb3JtYXQ7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7Zm9yKHZhciBuLGEsbyxzLGw9KHI9cnx8e30pLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxjPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMsdT1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsZj1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsaD1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxwPShyLmNhbGN1bGF0ZVdlZWt8fHRoaXMubG9jYWwuY2FsY3VsYXRlV2VlayxmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO3crbjx0Lmxlbmd0aCYmdC5jaGFyQXQodytuKT09PWU7KW4rKztyZXR1cm4gdys9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9KSxkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPSIiK2U7aWYocCh0LG4pKWZvcig7aS5sZW5ndGg8cjspaT0iMCIraTtyZXR1cm4gaX0sZz10aGlzLHY9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5jYWxsKGcsdCxwKCJtIikpOngoZCgibSIsdC5tb250aCgpLDIpKX0sbT1mdW5jdGlvbih0LGUpe3JldHVybiBlPyJmdW5jdGlvbiI9PXR5cGVvZiBoP2guY2FsbChnLHQpOmhbdC5tb250aCgpLWcubWluTW9udGhdOiJmdW5jdGlvbiI9PXR5cGVvZiBmP2YuY2FsbChnLHQpOmZbdC5tb250aCgpLWcubWluTW9udGhdfSx5PXRoaXMubG9jYWwuZGlnaXRzLHg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubG9jYWxOdW1iZXJzJiZ5P3kodCk6dH0sYj0iIixfPSExLHc9MDt3PHQubGVuZ3RoO3crKylpZihfKSInIiE9PXQuY2hhckF0KHcpfHxwKCInIik/Yis9dC5jaGFyQXQodyk6Xz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdCh3KSl7Y2FzZSJkIjpiKz14KGQoImQiLGUuZGF5KCksMikpO2JyZWFrO2Nhc2UiRCI6Yis9KG49IkQiLGE9ZS5kYXlPZldlZWsoKSxvPWwscz1jLHAobik/c1thXTpvW2FdKTticmVhaztjYXNlIm8iOmIrPWQoIm8iLGUuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZSJ3IjpiKz1kKCJ3IixlLndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlIm0iOmIrPXYoZSk7YnJlYWs7Y2FzZSJNIjpiKz1tKGUscCgiTSIpKTticmVhaztjYXNlInkiOmIrPXAoInkiLDIpP2UueWVhcigpOihlLnllYXIoKSUxMDA8MTA/IjAiOiIiKStlLnllYXIoKSUxMDA7YnJlYWs7Y2FzZSJZIjpwKCJZIiwyKSxiKz1lLmZvcm1hdFllYXIoKTticmVhaztjYXNlIkoiOmIrPWUudG9KRCgpO2JyZWFrO2Nhc2UiQCI6Yis9KGUudG9KRCgpLXRoaXMuVU5JWF9FUE9DSCkqdGhpcy5TRUNTX1BFUl9EQVk7YnJlYWs7Y2FzZSIhIjpiKz0oZS50b0pEKCktdGhpcy5USUNLU19FUE9DSCkqdGhpcy5USUNLU19QRVJfREFZO2JyZWFrO2Nhc2UiJyI6cCgiJyIpP2IrPSInIjpfPSEwO2JyZWFrO2RlZmF1bHQ6Yis9dC5jaGFyQXQodyl9cmV0dXJuIGJ9LHBhcnNlRGF0ZTpmdW5jdGlvbih0LGUscil7aWYobnVsbD09ZSl0aHJvdyBpLmxvY2FsLmludmFsaWRBcmd1bWVudHN8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQXJndW1lbnRzO2lmKCIiPT09KGU9Im9iamVjdCI9PXR5cGVvZiBlP2UudG9TdHJpbmcoKTplKyIiKSlyZXR1cm4gbnVsbDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDt2YXIgbj0ocj1yfHx7fSkuc2hvcnRZZWFyQ3V0b2ZmfHx0aGlzLnNob3J0WWVhckN1dG9mZjtuPSJzdHJpbmciIT10eXBlb2Ygbj9uOnRoaXMudG9kYXkoKS55ZWFyKCklMTAwK3BhcnNlSW50KG4sMTApO2Zvcih2YXIgYT1yLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxvPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMscz1yLnBhcnNlTW9udGh8fHRoaXMubG9jYWwucGFyc2VNb250aCxsPXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxjPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCx1PXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLGY9LTEsaD0tMSxwPS0xLGQ9LTEsZz0tMSx2PSExLG09ITEseT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO00rbjx0Lmxlbmd0aCYmdC5jaGFyQXQoTStuKT09PWU7KW4rKztyZXR1cm4gTSs9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9LHg9ZnVuY3Rpb24odCxyKXt2YXIgbj15KHQsciksYT1bMiwzLG4/NDoyLG4/NDoyLDEwLDExLDIwXVsib3lZSkAhIi5pbmRleE9mKHQpKzFdLG89bmV3IFJlZ0V4cCgiXi0/XFxkezEsIithKyJ9Iikscz1lLnN1YnN0cmluZyhBKS5tYXRjaChvKTtpZighcyl0aHJvdyhpLmxvY2FsLm1pc3NpbmdOdW1iZXJBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLm1pc3NpbmdOdW1iZXJBdCkucmVwbGFjZSgvXHswXH0vLEEpO3JldHVybiBBKz1zWzBdLmxlbmd0aCxwYXJzZUludChzWzBdLDEwKX0sYj10aGlzLF89ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl7eSgibSIpO3ZhciB0PWwuY2FsbChiLGUuc3Vic3RyaW5nKEEpKTtyZXR1cm4gQSs9dC5sZW5ndGgsdH1yZXR1cm4geCgibSIpfSx3PWZ1bmN0aW9uKHQscixuLGEpe2Zvcih2YXIgbz15KHQsYSk/bjpyLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihlLnN1YnN0cihBLG9bc10ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09b1tzXS50b0xvd2VyQ2FzZSgpKXJldHVybiBBKz1vW3NdLmxlbmd0aCxzK2IubWluTW9udGg7dGhyb3coaS5sb2NhbC51bmtub3duTmFtZUF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5rbm93bk5hbWVBdCkucmVwbGFjZSgvXHswXH0vLEEpfSxrPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHUpe3ZhciB0PXkoIk0iKT91LmNhbGwoYixlLnN1YnN0cmluZyhBKSk6Yy5jYWxsKGIsZS5zdWJzdHJpbmcoQSkpO3JldHVybiBBKz10Lmxlbmd0aCx0fXJldHVybiB3KCJNIixjLHUpfSxUPWZ1bmN0aW9uKCl7aWYoZS5jaGFyQXQoQSkhPT10LmNoYXJBdChNKSl0aHJvdyhpLmxvY2FsLnVuZXhwZWN0ZWRMaXRlcmFsQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkTGl0ZXJhbEF0KS5yZXBsYWNlKC9cezBcfS8sQSk7QSsrfSxBPTAsTT0wO008dC5sZW5ndGg7TSsrKWlmKG0pIiciIT09dC5jaGFyQXQoTSl8fHkoIiciKT9UKCk6bT0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChNKSl7Y2FzZSJkIjpkPXgoImQiKTticmVhaztjYXNlIkQiOncoIkQiLGEsbyk7YnJlYWs7Y2FzZSJvIjpnPXgoIm8iKTticmVhaztjYXNlInciOngoInciKTticmVhaztjYXNlIm0iOnA9XygpO2JyZWFrO2Nhc2UiTSI6cD1rKCk7YnJlYWs7Y2FzZSJ5Ijp2YXIgUz1NO3Y9IXkoInkiLDIpLE09UyxoPXgoInkiLDIpO2JyZWFrO2Nhc2UiWSI6aD14KCJZIiwyKTticmVhaztjYXNlIkoiOmY9eCgiSiIpKy41LCIuIj09PWUuY2hhckF0KEEpJiYoQSsrLHgoIkoiKSk7YnJlYWs7Y2FzZSJAIjpmPXgoIkAiKS90aGlzLlNFQ1NfUEVSX0RBWSt0aGlzLlVOSVhfRVBPQ0g7YnJlYWs7Y2FzZSIhIjpmPXgoIiEiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlIioiOkE9ZS5sZW5ndGg7YnJlYWs7Y2FzZSInIjp5KCInIik/VCgpOm09ITA7YnJlYWs7ZGVmYXVsdDpUKCl9aWYoQTxlLmxlbmd0aCl0aHJvdyBpLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZFRleHQ7aWYoLTE9PT1oP2g9dGhpcy50b2RheSgpLnllYXIoKTpoPDEwMCYmdiYmKGgrPS0xPT09bj8xOTAwOnRoaXMudG9kYXkoKS55ZWFyKCktdGhpcy50b2RheSgpLnllYXIoKSUxMDAtKGg8PW4/MDoxMDApKSwic3RyaW5nIj09dHlwZW9mIHAmJihwPXMuY2FsbCh0aGlzLGgscCkpLGc+LTEpe3A9MSxkPWc7Zm9yKHZhciBFPXRoaXMuZGF5c0luTW9udGgoaCxwKTtkPkU7RT10aGlzLmRheXNJbk1vbnRoKGgscCkpcCsrLGQtPUV9cmV0dXJuIGY+LTE/dGhpcy5mcm9tSkQoZik6dGhpcy5uZXdEYXRlKGgscCxkKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3ImJiJvYmplY3QiIT10eXBlb2YgciYmKGk9bixuPXIscj1udWxsKSwic3RyaW5nIiE9dHlwZW9mIG4mJihpPW4sbj0iIik7dmFyIGE9dGhpcztyZXR1cm4gZT1lP2UubmV3RGF0ZSgpOm51bGwsdD1udWxsPT10P2U6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYS5wYXJzZURhdGUobix0LGkpfWNhdGNoKHQpe31mb3IodmFyIGU9KCh0PXQudG9Mb3dlckNhc2UoKSkubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGEudG9kYXkoKSxvPS8oWystXT9bMC05XSspXHMqKGR8d3xtfHkpPy9nLHM9by5leGVjKHQpO3M7KWUuYWRkKHBhcnNlSW50KHNbMV0sMTApLHNbMl18fCJkIikscz1vLmV4ZWModCk7cmV0dXJuIGV9KHQpOiJudW1iZXIiPT10eXBlb2YgdD9pc05hTih0KXx8dD09PTEvMHx8dD09PS0xLzA/ZTphLnRvZGF5KCkuYWRkKHQsImQiKTphLm5ld0RhdGUodCl9fSl9LHsiLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU1NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJjd2lzZS1jb21waWxlciIpKHthcmdzOlsiYXJyYXkiLHtvZmZzZXQ6WzFdLGFycmF5OjB9LCJzY2FsYXIiLCJzY2FsYXIiLCJpbmRleCJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntcbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYSA9IF9pbmxpbmVfMV9hcmcwXyAtIF9pbmxpbmVfMV9hcmczX1xuICAgICAgICB2YXIgX2lubGluZV8xX2RiID0gX2lubGluZV8xX2FyZzFfIC0gX2lubGluZV8xX2FyZzNfXG4gICAgICAgIGlmKChfaW5saW5lXzFfZGEgPj0gMCkgIT09IChfaW5saW5lXzFfZGIgPj0gMCkpIHtcbiAgICAgICAgICBfaW5saW5lXzFfYXJnMl8ucHVzaChfaW5saW5lXzFfYXJnNF9bMF0gKyAwLjUgKyAwLjUgKiAoX2lubGluZV8xX2RhICsgX2lubGluZV8xX2RiKSAvIChfaW5saW5lXzFfZGEgLSBfaW5saW5lXzFfZGIpKVxuICAgICAgICB9XG4gICAgICB9IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOiJfaW5saW5lXzFfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9kYSIsIl9pbmxpbmVfMV9kYiJdfSxmdW5jTmFtZToiemVyb0Nyb3NzaW5ncyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTM2fV0sNTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBlPStlfHwwLG4odC5oaSh0LnNoYXBlWzBdLTEpLHIsZSkscn07dmFyIG49dCgiLi9saWIvemMtY29yZSIpfSx7Ii4vbGliL3pjLWNvcmUiOjU1N31dLDU1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9W3twYXRoOiIiLGJhY2tvZmY6MH0se3BhdGg6Ik0tMi40LC0zVjNMMC42LDBaIixiYWNrb2ZmOi42fSx7cGF0aDoiTS0zLjcsLTIuNVYyLjVMMS4zLDBaIixiYWNrb2ZmOjEuM30se3BhdGg6Ik0tNC40NSwtM0wtMS42NSwtMC4yVjAuMkwtNC40NSwzTDEuNTUsMFoiLGJhY2tvZmY6MS41NX0se3BhdGg6Ik0tMi4yLC0yLjJMLTAuMiwtMC4yVjAuMkwtMi4yLDIuMkwtMS40LDNMMS42LDBMLTEuNCwtM1oiLGJhY2tvZmY6MS42fSx7cGF0aDoiTS00LjQsLTIuMUwtMC42LC0wLjJWMC4yTC00LjQsMi4xTC00LDNMMiwwTC00LC0zWiIsYmFja29mZjoyfSx7cGF0aDoiTTIsMEEyLDIgMCAxLDEgMCwtMkEyLDIgMCAwLDEgMiwwWiIsYmFja29mZjowLG5vUm90YXRlOiEwfSx7cGF0aDoiTTIsMlYtMkgtMlYyWiIsYmFja29mZjowLG5vUm90YXRlOiEwfV19LHt9XSw1NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJvd19wYXRocyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPW8oImFubm90YXRpb24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sdGV4dGFuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGZvbnQ6aSh7ZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3Iixjb2xvckVkaXRUeXBlOiJhcnJheWRyYXcifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJjZW50ZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVycGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc2hvd2Fycm93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGFycm93Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3doZWFkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzdGFydGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3dzaWRlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJlbmQiLCJzdGFydCJdLGV4dHJhczpbIm5vbmUiXSxkZmx0OiJlbmQiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhcnJvd3NpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFydGFycm93c2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGFycm93d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFydHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoicGl4ZWwiLHZhbHVlczpbInBpeGVsIixhLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LGF5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJwaXhlbCIsdmFsdWVzOlsicGl4ZWwiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seHNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsYS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx5Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5c2hpZnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGNsaWNrdG9zaG93Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJvbm9mZiIsIm9ub3V0Il0sZGZsdDohMSxlZGl0VHlwZToiYXJyYXlkcmF3In0seGNsaWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5Y2xpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiYXJyYXlkcmF3In0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxmb250Omkoe2VkaXRUeXBlOiJhcnJheWRyYXcifSksZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGNhcHR1cmVldmVudHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e3JlZjp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9fX0pfSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzU0LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NCwiLi9hcnJvd19wYXRocyI6NTU5fV0sNTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vZHJhdyIpLmRyYXc7ZnVuY3Rpb24gbyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O24uZmlsdGVyVmlzaWJsZShlLmFubm90YXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWkuZ2V0RnJvbUlkKHQsZS54cmVmKSxuPWkuZ2V0RnJvbUlkKHQsZS55cmVmKTtlLl9leHRyZW1lcz17fSxyJiZzKGUsciksbiYmcyhlLG4pfSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG49ZS5faWQsYT1uLmNoYXJBdCgwKSxvPXRbYV0scz10WyJhIithXSxsPXRbYSsicmVmIl0sYz10WyJhIithKyJyZWYiXSx1PXRbIl8iK2ErInBhZHBsdXMiXSxmPXRbIl8iK2ErInBhZG1pbnVzIl0saD17eDoxLHk6LTF9W2FdKnRbYSsic2hpZnQiXSxwPTMqdC5hcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLGQ9cCtoLGc9cC1oLHY9Myp0LnN0YXJ0YXJyb3dzaXplKnQuYXJyb3d3aWR0aHx8MCxtPXYraCx5PXYtaDtpZihjPT09bCl7dmFyIHg9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpkLHBwYWRtaW51czpnfSksYj1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhzKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsbSkscHBhZG1pbnVzOk1hdGgubWF4KGYseSl9KTtyPXttaW46W3gubWluWzBdLGIubWluWzBdXSxtYXg6W3gubWF4WzBdLGIubWF4WzBdXX19ZWxzZSBtPXM/bStzOm0seT1zP3ktczp5LHI9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpNYXRoLm1heCh1LGQsbSkscHBhZG1pbnVzOk1hdGgubWF4KGYsZyx5KX0pO3QuX2V4dHJlbWVzW25dPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYobi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKXJldHVybiBuLnN5bmNPckFzeW5jKFthLG9dLHQpfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi9kcmF3Ijo1NjZ9XSw1NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yO2Z1bmN0aW9uIG8odCxlKXt2YXIgcixuLGksYSxvLGwsYyx1PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsZj1bXSxoPVtdLHA9W10sZD0oZXx8W10pLmxlbmd0aDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWlmKGE9KGk9dVtyXSkuY2xpY2t0b3Nob3cpe2ZvcihuPTA7bjxkO24rKylpZihsPShvPWVbbl0pLnhheGlzLGM9by55YXhpcyxsLl9pZD09PWkueHJlZiYmYy5faWQ9PT1pLnlyZWYmJmwuZDJyKG8ueCk9PT1zKGkuX3hjbGljayxsKSYmYy5kMnIoby55KT09PXMoaS5feWNsaWNrLGMpKXsoaS52aXNpYmxlPyJvbm91dCI9PT1hP2g6cDpmKS5wdXNoKHIpO2JyZWFrfW49PT1kJiZpLnZpc2libGUmJiJvbm91dCI9PT1hJiZoLnB1c2gocil9cmV0dXJue29uOmYsb2ZmOmgsZXhwbGljaXRPZmY6cH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiJsb2ciPT09ZS50eXBlP2UubDJyKHQpOmUuZDJyKHQpfWUuZXhwb3J0cz17aGFzQ2xpY2tUb1Nob3c6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHQsZSk7cmV0dXJuIHIub24ubGVuZ3RoPjB8fHIuZXhwbGljaXRPZmYubGVuZ3RoPjB9LG9uQ2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcixzLGw9byh0LGUpLGM9bC5vbix1PWwub2ZmLmNvbmNhdChsLmV4cGxpY2l0T2ZmKSxmPXt9LGg9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucztpZighYy5sZW5ndGgmJiF1Lmxlbmd0aClyZXR1cm47Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKykocz1hKHQubGF5b3V0LCJhbm5vdGF0aW9ucyIsaFtjW3JdXSkpLm1vZGlmeUl0ZW0oInZpc2libGUiLCEwKSxuLmV4dGVuZEZsYXQoZixzLmdldFVwZGF0ZU9iaigpKTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKShzPWEodC5sYXlvdXQsImFubm90YXRpb25zIixoW3Vbcl1dKSkubW9kaWZ5SXRlbSgidmlzaWJsZSIsITEpLG4uZXh0ZW5kRmxhdChmLHMuZ2V0VXBkYXRlT2JqKCkpO3JldHVybiBpLmNhbGwoInVwZGF0ZSIsdCx7fSxmKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4uLy4uL3JlZ2lzdHJ5Ijo4Mjl9XSw1NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXthKCJvcGFjaXR5Iik7dmFyIG89YSgiYmdjb2xvciIpLHM9YSgiYm9yZGVyY29sb3IiKSxsPWkub3BhY2l0eShzKTthKCJib3JkZXJwYWQiKTt2YXIgYz1hKCJib3JkZXJ3aWR0aCIpLHU9YSgic2hvd2Fycm93Iik7aWYoYSgidGV4dCIsdT8iICI6ci5fZGZsdFRpdGxlLmFubm90YXRpb24pLGEoInRleHRhbmdsZSIpLG4uY29lcmNlRm9udChhLCJmb250IixyLmZvbnQpLGEoIndpZHRoIiksYSgiYWxpZ24iKSxhKCJoZWlnaHQiKSYmYSgidmFsaWduIiksdSl7dmFyIGYsaCxwPWEoImFycm93c2lkZSIpOy0xIT09cC5pbmRleE9mKCJlbmQiKSYmKGY9YSgiYXJyb3doZWFkIiksaD1hKCJhcnJvd3NpemUiKSksLTEhPT1wLmluZGV4T2YoInN0YXJ0IikmJihhKCJzdGFydGFycm93aGVhZCIsZiksYSgic3RhcnRhcnJvd3NpemUiLGgpKSxhKCJhcnJvd2NvbG9yIixsP2UuYm9yZGVyY29sb3I6aS5kZWZhdWx0TGluZSksYSgiYXJyb3d3aWR0aCIsMioobCYmY3x8MSkpLGEoInN0YW5kb2ZmIiksYSgic3RhcnRzdGFuZG9mZiIpfXZhciBkPWEoImhvdmVydGV4dCIpLGc9ci5ob3ZlcmxhYmVsfHx7fTtpZihkKXt2YXIgdj1hKCJob3ZlcmxhYmVsLmJnY29sb3IiLGcuYmdjb2xvcnx8KGkub3BhY2l0eShvKT9pLnJnYihvKTppLmRlZmF1bHRMaW5lKSksbT1hKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixnLmJvcmRlcmNvbG9yfHxpLmNvbnRyYXN0KHYpKTtuLmNvZXJjZUZvbnQoYSwiaG92ZXJsYWJlbC5mb250Iix7ZmFtaWx5OmcuZm9udC5mYW1pbHksc2l6ZTpnLmZvbnQuc2l6ZSxjb2xvcjpnLmZvbnQuY29sb3J8fG19KX1hKCJjYXB0dXJlZXZlbnRzIiwhIWQpfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vY29sb3IiOjU3N31dLDU2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT1lLnR5cGUscz0ibGluZWFyIj09PXImJiJsb2ciPT09ZS50eXBlO2lmKG98fHMpZm9yKHZhciBsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGY9ZS5faWQuY2hhckF0KDApLGg9MDtoPHUubGVuZ3RoO2grKylsPXVbaF0sYz0iYW5ub3RhdGlvbnNbIitoKyJdLiIsbFtmKyJyZWYiXT09PWUuX2lkJiZwKGYpLGxbImEiK2YrInJlZiJdPT09ZS5faWQmJnAoImEiK2YpO2Z1bmN0aW9uIHAodCl7dmFyIHI9bFt0XSxzPW51bGw7cz1vP2kocixlLnJhbmdlKTpNYXRoLnBvdygxMCxyKSxuKHMpfHwocz1udWxsKSxhKGMrdCxzKX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjcyNiwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDU2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vY29tbW9uX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9dmFyIGw9YSgidmlzaWJsZSIpLGM9YSgiY2xpY2t0b3Nob3ciKTtpZihsfHxjKXtvKHQsZSxyLGEpO2Zvcih2YXIgdT1lLnNob3dhcnJvdyxmPVsieCIsInkiXSxoPVstMTAsLTMwXSxwPXtfZnVsbExheW91dDpyfSxkPTA7ZDwyO2QrKyl7dmFyIGc9ZltkXSx2PWkuY29lcmNlUmVmKHQsZSxwLGcsIiIsInBhcGVyIik7aWYoInBhcGVyIiE9PXYpaS5nZXRGcm9tSWQocCx2KS5fYW5uSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpZihpLmNvZXJjZVBvc2l0aW9uKGUscCxhLHYsZywuNSksdSl7dmFyIG09ImEiK2cseT1pLmNvZXJjZVJlZih0LGUscCxtLCJwaXhlbCIpOyJwaXhlbCIhPT15JiZ5IT09diYmKHk9ZVttXT0icGl4ZWwiKTt2YXIgeD0icGl4ZWwiPT09eT9oW2RdOi40O2kuY29lcmNlUG9zaXRpb24oZSxwLGEseSxtLHgpfWEoZysiYW5jaG9yIiksYShnKyJzaGlmdCIpfWlmKG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLHUmJm4ubm9uZU9yQWxsKHQsZSxbImF4IiwiYXkiXSksYyl7dmFyIGI9YSgieGNsaWNrIiksXz1hKCJ5Y2xpY2siKTtlLl94Y2xpY2s9dm9pZCAwPT09Yj9lLng6aS5jbGVhblBvc2l0aW9uKGIscCxlLnhyZWYpLGUuX3ljbGljaz12b2lkIDA9PT1fP2UueTppLmNsZWFuUG9zaXRpb24oXyxwLGUueXJlZil9fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc0NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi9hdHRyaWJ1dGVzIjo1NjAsIi4vY29tbW9uX2RlZmF1bHRzIjo1NjN9XSw1NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vY29sb3IiKSxjPXQoIi4uL2RyYXdpbmciKSx1PXQoIi4uL2Z4IiksZj10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxwPXQoIi4uL2RyYWdlbGVtZW50IiksZD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsZz10KCIuL2RyYXdfYXJyb3dfaGVhZCIpO2Z1bmN0aW9uIHYodCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW2VdfHx7fSxuPXMuZ2V0RnJvbUlkKHQsci54cmVmKSxpPXMuZ2V0RnJvbUlkKHQsci55cmVmKTtuJiZuLnNldFNjYWxlKCksaSYmaS5zZXRTY2FsZSgpLG0odCxyLGUsITEsbixpKX1mdW5jdGlvbiBtKHQsZSxyLGEscyx2KXt2YXIgbSx5LHg9dC5fZnVsbExheW91dCxiPXQuX2Z1bGxMYXlvdXQuX3NpemUsXz10Ll9jb250ZXh0LmVkaXRzO2E/KG09ImFubm90YXRpb24tIithLHk9YSsiLmFubm90YXRpb25zIik6KG09ImFubm90YXRpb24iLHk9ImFubm90YXRpb25zIik7dmFyIHc9ZCh0LmxheW91dCx5LGUpLGs9dy5tb2RpZnlCYXNlLFQ9dy5tb2RpZnlJdGVtLEE9dy5nZXRVcGRhdGVPYmo7eC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrbSsnW2RhdGEtaW5kZXg9IicrcisnIl0nKS5yZW1vdmUoKTt2YXIgTT0iY2xpcCIreC5fdWlkKyJfYW5uIityO2lmKGUuX2lucHV0JiYhMSE9PWUudmlzaWJsZSl7dmFyIFM9e3g6e30seTp7fX0sRT0rZS50ZXh0YW5nbGV8fDAsQz14Ll9pbmZvbGF5ZXIuYXBwZW5kKCJnIikuY2xhc3NlZChtLCEwKS5hdHRyKCJkYXRhLWluZGV4IixTdHJpbmcocikpLnN0eWxlKCJvcGFjaXR5IixlLm9wYWNpdHkpLEw9Qy5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQtZyIsITApLHo9X1tlLnNob3dhcnJvdz8iYW5ub3RhdGlvblRhaWwiOiJhbm5vdGF0aW9uUG9zaXRpb24iXSxPPWUuY2FwdHVyZWV2ZW50c3x8Xy5hbm5vdGF0aW9uVGV4dHx8eixJPUwuYXBwZW5kKCJnIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixPPyJhbGwiOm51bGwpLmNhbGwoaCwicG9pbnRlciIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXt0Ll9kcmFnZ2luZz0hMTt2YXIgaT17aW5kZXg6cixhbm5vdGF0aW9uOmUuX2lucHV0LGZ1bGxBbm5vdGF0aW9uOmUsZXZlbnQ6bi5ldmVudH07YSYmKGkuc3VicGxvdElkPWEpLHQuZW1pdCgicGxvdGx5X2NsaWNrYW5ub3RhdGlvbiIsaSl9KTtlLmhvdmVydGV4dCYmSS5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe3ZhciByPWUuaG92ZXJsYWJlbCxuPXIuZm9udCxpPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3UubG9uZUhvdmVyKHt4MDppLmxlZnQtYS5sZWZ0LHgxOmkucmlnaHQtYS5sZWZ0LHk6KGkudG9wK2kuYm90dG9tKS8yLWEudG9wLHRleHQ6ZS5ob3ZlcnRleHQsY29sb3I6ci5iZ2NvbG9yLGJvcmRlckNvbG9yOnIuYm9yZGVyY29sb3IsZm9udEZhbWlseTpuLmZhbWlseSxmb250U2l6ZTpuLnNpemUsZm9udENvbG9yOm4uY29sb3J9LHtjb250YWluZXI6eC5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6eC5fcGFwZXIubm9kZSgpLGdkOnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt1LmxvbmVVbmhvdmVyKHguX2hvdmVybGF5ZXIubm9kZSgpKX0pO3ZhciBEPWUuYm9yZGVyd2lkdGgsUD1lLmJvcmRlcnBhZCxSPUQrUCxGPUkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiZyIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLEQrInB4IikuY2FsbChsLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKGwuZmlsbCxlLmJnY29sb3IpLEI9ZS53aWR0aHx8ZS5oZWlnaHQsTj14Ll90b3BjbGlwcy5zZWxlY3RBbGwoIiMiK00pLmRhdGEoQj9bMF06W10pO04uZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiYW5uY2xpcCIsITApLmF0dHIoImlkIixNKS5hcHBlbmQoInJlY3QiKSxOLmV4aXQoKS5yZW1vdmUoKTt2YXIgaj1lLmZvbnQsVj14Lm1ldGE/by50ZW1wbGF0ZVN0cmluZyhlLnRleHQse21ldGE6eC5tZXRhfSk6ZS50ZXh0LFU9SS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQiLCEwKS50ZXh0KFYpO18uYW5ub3RhdGlvblRleHQ/VS5jYWxsKGYubWFrZUVkaXRhYmxlLHtkZWxlZ2F0ZTpJLGdkOnR9KS5jYWxsKHEpLm9uKCJlZGl0IixmdW5jdGlvbihyKXtlLnRleHQ9cix0aGlzLmNhbGwocSksVCgidGV4dCIscikscyYmcy5hdXRvcmFuZ2UmJmsocy5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHYmJnYuYXV0b3JhbmdlJiZrKHYuX25hbWUrIi5hdXRvcmFuZ2UiLCEwKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxBKCkpfSk6VS5jYWxsKHEpfWVsc2Ugbi5zZWxlY3RBbGwoIiMiK00pLnJlbW92ZSgpO2Z1bmN0aW9uIHEocil7cmV0dXJuIHIuY2FsbChjLmZvbnQsaikuYXR0cih7InRleHQtYW5jaG9yIjp7bGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifVtlLmFsaWduXXx8Im1pZGRsZSJ9KSxmLmNvbnZlcnRUb1RzcGFucyhyLHQsSCkscn1mdW5jdGlvbiBIKCl7dmFyIHI9VS5zZWxlY3RBbGwoImEiKTsxPT09ci5zaXplKCkmJnIudGV4dCgpPT09VS50ZXh0KCkmJkkuaW5zZXJ0KCJhIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7InhsaW5rOnhsaW5rOmhyZWYiOnIuYXR0cigieGxpbms6aHJlZiIpLCJ4bGluazp4bGluazpzaG93IjpyLmF0dHIoInhsaW5rOnNob3ciKX0pLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIifSkubm9kZSgpLmFwcGVuZENoaWxkKEYubm9kZSgpKTt2YXIgbj1JLnNlbGVjdCgiLmFubm90YXRpb24tdGV4dC1tYXRoLWdyb3VwIiksdT0hbi5lbXB0eSgpLGQ9Yy5iQm94KCh1P246VSkubm9kZSgpKSxtPWQud2lkdGgseT1kLmhlaWdodCx3PWUud2lkdGh8fG0sTz1lLmhlaWdodHx8eSxQPU1hdGgucm91bmQodysyKlIpLGo9TWF0aC5yb3VuZChPKzIqUik7ZnVuY3Rpb24gVih0LGUpe3JldHVybiJhdXRvIj09PWUmJihlPXQ8MS8zPyJsZWZ0Ijp0PjIvMz8icmlnaHQiOiJjZW50ZXIiKSx7Y2VudGVyOjAsbWlkZGxlOjAsbGVmdDouNSxib3R0b206LS41LHJpZ2h0Oi0uNSx0b3A6LjV9W2VdfWZvcih2YXIgcT0hMSxIPVsieCIsInkiXSxHPTA7RzxILmxlbmd0aDtHKyspe3ZhciBZLFcsWCxaLCQsSj1IW0ddLEs9ZVtKKyJyZWYiXXx8SixRPWVbImEiK0orInJlZiJdLHR0PXt4OnMseTp2fVtKXSxldD0oRSsoIngiPT09Sj8wOi05MCkpKk1hdGguUEkvMTgwLHJ0PVAqTWF0aC5jb3MoZXQpLG50PWoqTWF0aC5zaW4oZXQpLGl0PU1hdGguYWJzKHJ0KStNYXRoLmFicyhudCksYXQ9ZVtKKyJhbmNob3IiXSxvdD1lW0orInNoaWZ0Il0qKCJ4Ij09PUo/MTotMSksc3Q9U1tKXTtpZih0dCl7dmFyIGx0PXR0LnIyZnJhY3Rpb24oZVtKXSk7KGx0PDB8fGx0PjEpJiYoUT09PUs/KChsdD10dC5yMmZyYWN0aW9uKGVbImEiK0pdKSk8MHx8bHQ+MSkmJihxPSEwKTpxPSEwKSxZPXR0Ll9vZmZzZXQrdHQucjJwKGVbSl0pLFo9LjV9ZWxzZSJ4Ij09PUo/KFg9ZVtKXSxZPWIubCtiLncqWCk6KFg9MS1lW0pdLFk9Yi50K2IuaCpYKSxaPWUuc2hvd2Fycm93Py41Olg7aWYoZS5zaG93YXJyb3cpe3N0LmhlYWQ9WTt2YXIgY3Q9ZVsiYSIrSl07JD1ydCpWKC41LGUueGFuY2hvciktbnQqViguNSxlLnlhbmNob3IpLFE9PT1LPyhzdC50YWlsPXR0Ll9vZmZzZXQrdHQucjJwKGN0KSxXPSQpOihzdC50YWlsPVkrY3QsVz0kK2N0KSxzdC50ZXh0PXN0LnRhaWwrJDt2YXIgdXQ9eFsieCI9PT1KPyJ3aWR0aCI6ImhlaWdodCJdO2lmKCJwYXBlciI9PT1LJiYoc3QuaGVhZD1vLmNvbnN0cmFpbihzdC5oZWFkLDEsdXQtMSkpLCJwaXhlbCI9PT1RKXt2YXIgZnQ9LU1hdGgubWF4KHN0LnRhaWwtMyxzdC50ZXh0KSxodD1NYXRoLm1pbihzdC50YWlsKzMsc3QudGV4dCktdXQ7ZnQ+MD8oc3QudGFpbCs9ZnQsc3QudGV4dCs9ZnQpOmh0PjAmJihzdC50YWlsLT1odCxzdC50ZXh0LT1odCl9c3QudGFpbCs9b3Qsc3QuaGVhZCs9b3R9ZWxzZSBXPSQ9aXQqVihaLGF0KSxzdC50ZXh0PVkrJDtzdC50ZXh0Kz1vdCwkKz1vdCxXKz1vdCxlWyJfIitKKyJwYWRwbHVzIl09aXQvMitXLGVbIl8iK0orInBhZG1pbnVzIl09aXQvMi1XLGVbIl8iK0orInNpemUiXT1pdCxlWyJfIitKKyJzaGlmdCJdPSR9aWYodC5fZHJhZ2dpbmd8fCFxKXt2YXIgcHQ9MCxkdD0wO2lmKCJsZWZ0IiE9PWUuYWxpZ24mJihwdD0ody1tKSooImNlbnRlciI9PT1lLmFsaWduPy41OjEpKSwidG9wIiE9PWUudmFsaWduJiYoZHQ9KE8teSkqKCJtaWRkbGUiPT09ZS52YWxpZ24/LjU6MSkpLHUpbi5zZWxlY3QoInN2ZyIpLmF0dHIoe3g6UitwdC0xLHk6UitkdH0pLmNhbGwoYy5zZXRDbGlwVXJsLEI/TTpudWxsLHQpO2Vsc2V7dmFyIGd0PVIrZHQtZC50b3AsdnQ9UitwdC1kLmxlZnQ7VS5jYWxsKGYucG9zaXRpb25UZXh0LHZ0LGd0KS5jYWxsKGMuc2V0Q2xpcFVybCxCP006bnVsbCx0KX1OLnNlbGVjdCgicmVjdCIpLmNhbGwoYy5zZXRSZWN0LFIsUix3LE8pLEYuY2FsbChjLnNldFJlY3QsRC8yLEQvMixQLUQsai1EKSxJLmNhbGwoYy5zZXRUcmFuc2xhdGUsTWF0aC5yb3VuZChTLngudGV4dC1QLzIpLE1hdGgucm91bmQoUy55LnRleHQtai8yKSksTC5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK0UrIiwiK1MueC50ZXh0KyIsIitTLnkudGV4dCsiKSJ9KTt2YXIgbXQseXQ9ZnVuY3Rpb24ocixuKXtDLnNlbGVjdEFsbCgiLmFubm90YXRpb24tYXJyb3ctZyIpLnJlbW92ZSgpO3ZhciB1PVMueC5oZWFkLGY9Uy55LmhlYWQsaD1TLngudGFpbCtyLGQ9Uy55LnRhaWwrbixtPVMueC50ZXh0K3IseT1TLnkudGV4dCtuLHg9by5yb3RhdGlvblhZTWF0cml4KEUsbSx5KSx3PW8uYXBwbHkyRFRyYW5zZm9ybSh4KSxNPW8uYXBwbHkyRFRyYW5zZm9ybTIoeCksej0rRi5hdHRyKCJ3aWR0aCIpLE89K0YuYXR0cigiaGVpZ2h0IiksRD1tLS41KnosUD1EK3osUj15LS41Kk8sQj1SK08sTj1bW0QsUixELEJdLFtELEIsUCxCXSxbUCxCLFAsUl0sW1AsUixELFJdXS5tYXAoTSk7aWYoIU4ucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReISFvLnNlZ21lbnRzSW50ZXJzZWN0KHUsZix1KzFlNixmKzFlNixlWzBdLGVbMV0sZVsyXSxlWzNdKX0sITEpKXtOLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9by5zZWdtZW50c0ludGVyc2VjdChoLGQsdSxmLHRbMF0sdFsxXSx0WzJdLHRbM10pO2UmJihoPWUueCxkPWUueSl9KTt2YXIgaj1lLmFycm93d2lkdGgsVj1lLmFycm93Y29sb3IsVT1lLmFycm93c2lkZSxxPUMuYXBwZW5kKCJnIikuc3R5bGUoe29wYWNpdHk6bC5vcGFjaXR5KFYpfSkuY2xhc3NlZCgiYW5ub3RhdGlvbi1hcnJvdy1nIiwhMCksSD1xLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIitoKyIsIitkKyJMIit1KyIsIitmKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixqKyJweCIpLmNhbGwobC5zdHJva2UsbC5yZ2IoVikpO2lmKGcoSCxVLGUpLF8uYW5ub3RhdGlvblBvc2l0aW9uJiZILm5vZGUoKS5wYXJlbnROb2RlJiYhYSl7dmFyIEc9dSxZPWY7aWYoZS5zdGFuZG9mZil7dmFyIFc9TWF0aC5zcXJ0KE1hdGgucG93KHUtaCwyKStNYXRoLnBvdyhmLWQsMikpO0crPWUuc3RhbmRvZmYqKGgtdSkvVyxZKz1lLnN0YW5kb2ZmKihkLWYpL1d9dmFyIFgsWiwkPXEuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1hcnJvdyIsITApLmNsYXNzZWQoImFubmRyYWciLCEwKS5jbGFzc2VkKCJjdXJzb3ItbW92ZSIsITApLmF0dHIoe2Q6Ik0zLDNILTNWLTNIM1pNMCwwTCIrKGgtRykrIiwiKyhkLVkpLHRyYW5zZm9ybToidHJhbnNsYXRlKCIrRysiLCIrWSsiKSJ9KS5zdHlsZSgic3Ryb2tlLXdpZHRoIixqKzYrInB4IikuY2FsbChsLnN0cm9rZSwicmdiYSgwLDAsMCwwKSIpLmNhbGwobC5maWxsLCJyZ2JhKDAsMCwwLDApIik7cC5pbml0KHtlbGVtZW50OiQubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoSSk7WD10LngsWj10LnkscyYmcy5hdXRvcmFuZ2UmJmsocy5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHYmJnYuYXV0b3JhbmdlJiZrKHYuX25hbWUrIi5hdXRvcmFuZ2UiLCEwKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49dyhYLFopLGk9blswXSt0LGE9blsxXStyO0kuY2FsbChjLnNldFRyYW5zbGF0ZSxpLGEpLFQoIngiLHM/cy5wMnIocy5yMnAoZS54KSt0KTplLngrdC9iLncpLFQoInkiLHY/di5wMnIodi5yMnAoZS55KStyKTplLnktci9iLmgpLGUuYXhyZWY9PT1lLnhyZWYmJlQoImF4IixzLnAycihzLnIycChlLmF4KSt0KSksZS5heXJlZj09PWUueXJlZiYmVCgiYXkiLHYucDJyKHYucjJwKGUuYXkpK3IpKSxxLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QrIiwiK3IrIikiKSxMLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrRSsiLCIraSsiLCIrYSsiKSJ9KX0sZG9uZUZuOmZ1bmN0aW9uKCl7aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsQSgpKTt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9fX07aWYoZS5zaG93YXJyb3cmJnl0KDAsMCkseilwLmluaXQoe2VsZW1lbnQ6SS5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXttdD1MLmF0dHIoInRyYW5zZm9ybSIpfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj0icG9pbnRlciI7aWYoZS5zaG93YXJyb3cpZS5heHJlZj09PWUueHJlZj9UKCJheCIscy5wMnIocy5yMnAoZS5heCkrdCkpOlQoImF4IixlLmF4K3QpLGUuYXlyZWY9PT1lLnlyZWY/VCgiYXkiLHYucDJyKHYucjJwKGUuYXkpK3IpKTpUKCJheSIsZS5heStyKSx5dCh0LHIpO2Vsc2V7aWYoYSlyZXR1cm47dmFyIGksbztpZihzKWk9cy5wMnIocy5yMnAoZS54KSt0KTtlbHNle3ZhciBsPWUuX3hzaXplL2IudyxjPWUueCsoZS5feHNoaWZ0LWUueHNoaWZ0KS9iLnctbC8yO2k9cC5hbGlnbihjK3QvYi53LGwsMCwxLGUueGFuY2hvcil9aWYodilvPXYucDJyKHYucjJwKGUueSkrcik7ZWxzZXt2YXIgdT1lLl95c2l6ZS9iLmgsZj1lLnktKGUuX3lzaGlmdCtlLnlzaGlmdCkvYi5oLXUvMjtvPXAuYWxpZ24oZi1yL2IuaCx1LDAsMSxlLnlhbmNob3IpfVQoIngiLGkpLFQoInkiLG8pLHMmJnZ8fChuPXAuZ2V0Q3Vyc29yKHM/LjU6aSx2Py41Om8sZS54YW5jaG9yLGUueWFuY2hvcikpfUwuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIit0KyIsIityKyIpIittdH0pLGgoSSxuKX0sZG9uZUZuOmZ1bmN0aW9uKCl7aChJKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxBKCkpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTtlJiZlLnJlZHJhdyhlLnNlbGVjdGVkT2JqKX19KX1lbHNlIEkucmVtb3ZlKCl9fWUuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZS5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZ2KHQscik7cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sZHJhd09uZTp2LGRyYXdSYXc6bX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY29sb3IiOjU3NywiLi4vZHJhZ2VsZW1lbnQiOjU5NSwiLi4vZHJhd2luZyI6NTk4LCIuLi9meCI6NjE2LCIuL2RyYXdfYXJyb3dfaGVhZCI6NTY3LGQzOjE1NH1dLDU2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4vYXJyb3dfcGF0aHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbCxjLHU9dC5ub2RlKCksZj1hW3IuYXJyb3doZWFkfHwwXSxoPWFbci5zdGFydGFycm93aGVhZHx8MF0scD0oci5hcnJvd3dpZHRofHwxKSooci5hcnJvd3NpemV8fDEpLGQ9KHIuYXJyb3d3aWR0aHx8MSkqKHIuc3RhcnRhcnJvd3NpemV8fDEpLGc9ZS5pbmRleE9mKCJzdGFydCIpPj0wLHY9ZS5pbmRleE9mKCJlbmQiKT49MCxtPWYuYmFja29mZipwK3Iuc3RhbmRvZmYseT1oLmJhY2tvZmYqZCtyLnN0YXJ0c3RhbmRvZmY7aWYoImxpbmUiPT09dS5ub2RlTmFtZSl7bz17eDordC5hdHRyKCJ4MSIpLHk6K3QuYXR0cigieTEiKX0scz17eDordC5hdHRyKCJ4MiIpLHk6K3QuYXR0cigieTIiKX07dmFyIHg9by54LXMueCxiPW8ueS1zLnk7aWYoYz0obD1NYXRoLmF0YW4yKGIseCkpK01hdGguUEksbSYmeSYmbSt5Pk1hdGguc3FydCh4KngrYipiKSlyZXR1cm4gdm9pZCB6KCk7aWYobSl7aWYobSptPngqeCtiKmIpcmV0dXJuIHZvaWQgeigpO3ZhciBfPW0qTWF0aC5jb3MobCksdz1tKk1hdGguc2luKGwpO3MueCs9XyxzLnkrPXcsdC5hdHRyKHt4MjpzLngseTI6cy55fSl9aWYoeSl7aWYoeSp5PngqeCtiKmIpcmV0dXJuIHZvaWQgeigpO3ZhciBrPXkqTWF0aC5jb3MobCksVD15Kk1hdGguc2luKGwpO28ueC09ayxvLnktPVQsdC5hdHRyKHt4MTpvLngseTE6by55fSl9fWVsc2UgaWYoInBhdGgiPT09dS5ub2RlTmFtZSl7dmFyIEE9dS5nZXRUb3RhbExlbmd0aCgpLE09IiI7aWYoQTxtK3kpcmV0dXJuIHZvaWQgeigpO3ZhciBTPXUuZ2V0UG9pbnRBdExlbmd0aCgwKSxFPXUuZ2V0UG9pbnRBdExlbmd0aCguMSk7bD1NYXRoLmF0YW4yKFMueS1FLnksUy54LUUueCksbz11LmdldFBvaW50QXRMZW5ndGgoTWF0aC5taW4oeSxBKSksTT0iMHB4LCIreSsicHgsIjt2YXIgQz11LmdldFBvaW50QXRMZW5ndGgoQSksTD11LmdldFBvaW50QXRMZW5ndGgoQS0uMSk7Yz1NYXRoLmF0YW4yKEMueS1MLnksQy54LUwueCkscz11LmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCxBLW0pKSxNKz1BLShNP3krbTptKSsicHgsIitBKyJweCIsdC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsTSl9ZnVuY3Rpb24geigpe3Quc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwcHgsMTAwcHgiKX1mdW5jdGlvbiBPKGUsYSxvLHMpe2UucGF0aCYmKGUubm9Sb3RhdGUmJihvPTApLG4uc2VsZWN0KHUucGFyZW50Tm9kZSkuYXBwZW5kKCJwYXRoIikuYXR0cih7Y2xhc3M6dC5hdHRyKCJjbGFzcyIpLGQ6ZS5wYXRoLHRyYW5zZm9ybToidHJhbnNsYXRlKCIrYS54KyIsIithLnkrIikiKyhvPyJyb3RhdGUoIisxODAqby9NYXRoLlBJKyIpIjoiIikrInNjYWxlKCIrcysiKSJ9KS5zdHlsZSh7ZmlsbDppLnJnYihyLmFycm93Y29sb3IpLCJzdHJva2Utd2lkdGgiOjB9KSl9ZyYmTyhoLG8sbCxkKSx2JiZPKGYscyxjLHApfX0seyIuLi9jb2xvciI6NTc3LCIuL2Fycm93X3BhdGhzIjo1NTksZDM6MTU0fV0sNTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpLGk9dCgiLi9jbGljayIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9ucyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgiYW5ub3RhdGlvbnMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZSxkcmF3UmF3Om4uZHJhd1JhdyxoYXNDbGlja1RvU2hvdzppLmhhc0NsaWNrVG9TaG93LG9uQ2xpY2s6aS5vbkNsaWNrLGNvbnZlcnRDb29yZHM6dCgiLi9jb252ZXJ0X2Nvb3JkcyIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjo3NTgsIi4vYXR0cmlidXRlcyI6NTYwLCIuL2NhbGNfYXV0b3JhbmdlIjo1NjEsIi4vY2xpY2siOjU2MiwiLi9jb252ZXJ0X2Nvb3JkcyI6NTY0LCIuL2RlZmF1bHRzIjo1NjUsIi4vZHJhdyI6NTY2fV0sNTY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aShhKCJhbm5vdGF0aW9uIix7dmlzaWJsZTpuLnZpc2libGUseDp7dmFsVHlwZToiYW55In0seTp7dmFsVHlwZToiYW55In0sejp7dmFsVHlwZToiYW55In0sYXg6e3ZhbFR5cGU6Im51bWJlciJ9LGF5Ont2YWxUeXBlOiJudW1iZXIifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsc3RhcnRhcnJvd2hlYWQ6bi5zdGFydGFycm93aGVhZCxhcnJvd3NpZGU6bi5hcnJvd3NpZGUsYXJyb3dzaXplOm4uYXJyb3dzaXplLHN0YXJ0YXJyb3dzaXplOm4uc3RhcnRhcnJvd3NpemUsYXJyb3d3aWR0aDpuLmFycm93d2lkdGgsc3RhbmRvZmY6bi5zdGFuZG9mZixzdGFydHN0YW5kb2ZmOm4uc3RhcnRzdGFuZG9mZixob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsY2FwdHVyZWV2ZW50czpuLmNhcHR1cmVldmVudHN9KSwiY2FsYyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1NjB9XSw1NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmZ1bGxTY2VuZUxheW91dC5kb21haW4sYT1lLmZ1bGxMYXlvdXQuX3NpemUsbz17cGRhdGE6bnVsbCx0eXBlOiJsaW5lYXIiLGF1dG9yYW5nZTohMSxyYW5nZTpbLTEvMCwxLzBdfTt0Ll94YT17fSxuLmV4dGVuZEZsYXQodC5feGEsbyksaS5zZXRDb252ZXJ0KHQuX3hhKSx0Ll94YS5fb2Zmc2V0PWEubCtyLnhbMF0qYS53LHQuX3hhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxK3QuX3BkYXRhWzBdL3QuX3BkYXRhWzNdKSphLncqKHIueFsxXS1yLnhbMF0pfSx0Ll95YT17fSxuLmV4dGVuZEZsYXQodC5feWEsbyksaS5zZXRDb252ZXJ0KHQuX3lhKSx0Ll95YS5fb2Zmc2V0PWEudCsoMS1yLnlbMV0pKmEuaCx0Ll95YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMS10Ll9wZGF0YVsxXS90Ll9wZGF0YVszXSkqYS5oKihyLnlbMV0tci55WzBdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspYShlW3JdLHQpO3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tIit0LmlkKS5yZW1vdmUoKX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDh9XSw1NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGwodCxlLHIsYSl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWZ1bmN0aW9uIGModCl7dmFyIG49dCsiYXhpcyIsYT17X2Z1bGxMYXlvdXQ6e319O3JldHVybiBhLl9mdWxsTGF5b3V0W25dPXJbbl0saS5jb2VyY2VQb3NpdGlvbihlLGEsbCx0LHQsLjUpfWwoInZpc2libGUiKSYmKG8odCxlLGEuZnVsbExheW91dCxsKSxjKCJ4IiksYygieSIpLGMoInoiKSxuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSIsInoiXSksZS54cmVmPSJ4IixlLnlyZWY9InkiLGUuenJlZj0ieiIsbCgieGFuY2hvciIpLGwoInlhbmNob3IiKSxsKCJ4c2hpZnQiKSxsKCJ5c2hpZnQiKSxlLnNob3dhcnJvdyYmKGUuYXhyZWY9InBpeGVsIixlLmF5cmVmPSJwaXhlbCIsbCgiYXgiLC0xMCksbCgiYXkiLC0zMCksbi5ub25lT3JBbGwodCxlLFsiYXgiLCJheSJdKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUse25hbWU6ImFubm90YXRpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6bCxmdWxsTGF5b3V0OnIuZnVsbExheW91dH0pfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0cyI6NTYzLCIuL2F0dHJpYnV0ZXMiOjU2OX1dLDU3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9kcmF3IikuZHJhd1JhdyxpPXQoIi4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCIpLGE9WyJ4IiwieSIsInoiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LHI9dC5kYXRhU2NhbGUsbz1lLmFubm90YXRpb25zLHM9MDtzPG8ubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPW9bc10sYz0hMSx1PTA7dTwzO3UrKyl7dmFyIGY9YVt1XSxoPWxbZl0scD1lW2YrImF4aXMiXS5yMmZyYWN0aW9uKGgpO2lmKHA8MHx8cD4xKXtjPSEwO2JyZWFrfX1jP3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdCgiLmFubm90YXRpb24tIit0LmlkKydbZGF0YS1pbmRleD0iJytzKyciXScpLnJlbW92ZSgpOihsLl9wZGF0YT1pKHQuZ2xwbG90LmNhbWVyYVBhcmFtcyxbZS54YXhpcy5yMmwobC54KSpyWzBdLGUueWF4aXMucjJsKGwueSkqclsxXSxlLnpheGlzLnIybChsLnopKnJbMl1dKSxuKHQuZ3JhcGhEaXYsbCxzLHQuaWQsbC5feGEsbC5feWEpKX19fSx7Ii4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCI6Nzk4LCIuLi9hbm5vdGF0aW9ucy9kcmF3Ijo1NjZ9XSw1NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9uczNkIixzY2hlbWE6e3N1YnBsb3RzOntzY2VuZTp7YW5ub3RhdGlvbnM6dCgiLi9hdHRyaWJ1dGVzIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5zdWJwbG90c1JlZ2lzdHJ5LmdsM2Q7aWYoIXIpcmV0dXJuO2Zvcih2YXIgYT1yLmF0dHJSZWdleCxvPU9iamVjdC5rZXlzKHQpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTthLnRlc3QobCkmJih0W2xdLmFubm90YXRpb25zfHxbXSkubGVuZ3RoJiYoaS5wdXNoVW5pcXVlKGUuX2Jhc2VQbG90TW9kdWxlcyxyKSxpLnB1c2hVbmlxdWUoZS5fc3VicGxvdHMuZ2wzZCxsKSl9fSxjb252ZXJ0OnQoIi4vY29udmVydCIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2F0dHJpYnV0ZXMiOjU2OSwiLi9jb252ZXJ0Ijo1NzAsIi4vZGVmYXVsdHMiOjU3MSwiLi9kcmF3Ijo1NzJ9XSw1NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3IiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIil9LHsid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiOjU0MSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpYyI6NTQyLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkIjo1NDMsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iOjU0NCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJldyI6NTQ1LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pYyI6NTQ2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIjo1NDcsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhbiI6NTQ4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaSI6NTQ5LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIjo1NTAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuIjo1NTEsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW4iOjU1Miwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiOjU1Mywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYSI6NTU0LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluIjo1NTUsIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiOjU1Nn1dLDU3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbGVuZGFycyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLkVQT0NISkQscz1hLk9ORURBWSxsPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMobi5jYWxlbmRhcnMpLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJncmVnb3JpYW4ifSxjPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXt9O3JldHVybiBhW3JdPWwsaS5jb2VyY2UodCxlLGEscixuKX0sdT0iIyMiLGY9e2Q6ezA6ImRkIiwiLSI6ImQifSxlOnswOiJkIiwiLSI6ImQifSxhOnswOiJEIiwiLSI6IkQifSxBOnswOiJERCIsIi0iOiJERCJ9LGo6ezA6Im9vIiwiLSI6Im8ifSxXOnswOiJ3dyIsIi0iOiJ3In0sbTp7MDoibW0iLCItIjoibSJ9LGI6ezA6Ik0iLCItIjoiTSJ9LEI6ezA6Ik1NIiwiLSI6Ik1NIn0seTp7MDoieXkiLCItIjoieXkifSxZOnswOiJ5eXl5IiwiLSI6Inl5eXkifSxVOnUsdzp1LGM6ezA6IkQgTSBkICVYIHl5eXkiLCItIjoiRCBNIGQgJVggeXl5eSJ9LHg6ezA6Im1tL2RkL3l5eXkiLCItIjoibW0vZGQveXl5eSJ9fTt2YXIgaD17fTtmdW5jdGlvbiBwKHQpe3ZhciBlPWhbdF07cmV0dXJuIGV8fChlPWhbdF09bi5pbnN0YW5jZSh0KSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGwse2Rlc2NyaXB0aW9uOnR9KX1mdW5jdGlvbiBnKHQpe3JldHVybiJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIHdpdGggYCIrdCsiYCBkYXRlIGRhdGEuIn12YXIgdj17eGNhbGVuZGFyOmQoZygieCIpKX0sbT1pLmV4dGVuZEZsYXQoe30sdix7eWNhbGVuZGFyOmQoZygieSIpKX0pLHk9aS5leHRlbmRGbGF0KHt9LG0se3pjYWxlbmRhcjpkKGcoInoiKSl9KSx4PWQoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgcmFuZ2VgIGFuZCBgdGljazBgIiwiaWYgdGhpcyBpcyBhIGRhdGUgYXhpcy4gVGhpcyBkb2VzIG5vdCBzZXQgdGhlIGNhbGVuZGFyIGZvciIsImludGVycHJldGluZyBkYXRhIG9uIHRoaXMgYXhpcywgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgdHJhY2UiLCJvciB2aWEgdGhlIGdsb2JhbCBgbGF5b3V0LmNhbGVuZGFyYCJdLmpvaW4oIiAiKSk7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNhbGVuZGFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6bSxiYXI6bSxib3g6bSxoZWF0bWFwOm0sY29udG91cjptLGhpc3RvZ3JhbTptLGhpc3RvZ3JhbTJkOm0saGlzdG9ncmFtMmRjb250b3VyOm0sc2NhdHRlcjNkOnksc3VyZmFjZTp5LG1lc2gzZDp5LHNjYXR0ZXJnbDptLG9obGM6dixjYW5kbGVzdGljazp2fSxsYXlvdXQ6e2NhbGVuZGFyOmQoWyJTZXRzIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGludGVycHJldGluZyBhbmQiLCJkaXNwbGF5aW5nIGRhdGVzIHRocm91Z2hvdXQgdGhlIHBsb3QuIl0uam9pbigiICIpKX0sc3VicGxvdHM6e3hheGlzOntjYWxlbmRhcjp4fSx5YXhpczp7Y2FsZW5kYXI6eH0sc2NlbmU6e3hheGlzOntjYWxlbmRhcjp4fSx5YXhpczp7Y2FsZW5kYXI6eH0semF4aXM6e2NhbGVuZGFyOnh9fSxwb2xhcjp7cmFkaWFsYXhpczp7Y2FsZW5kYXI6eH19fSx0cmFuc2Zvcm1zOntmaWx0ZXI6e3ZhbHVlY2FsZW5kYXI6ZChbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB2YWx1ZWAsIGlmIGl0IGlzIGEgZGF0ZS4iXS5qb2luKCIgIikpLHRhcmdldGNhbGVuZGFyOmQoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdGFyZ2V0YCwgaWYgaXQgaXMgYW4iLCJhcnJheSBvZiBkYXRlcy4gSWYgYHRhcmdldGAgaXMgYSBzdHJpbmcgKGVnICp4Kikgd2UgdXNlIHRoZSIsImNvcnJlc3BvbmRpbmcgdHJhY2UgYXR0cmlidXRlIChlZyBgeGNhbGVuZGFyYCkgaWYgaXQgZXhpc3RzLCIsImV2ZW4gaWYgYHRhcmdldGNhbGVuZGFyYCBpcyBwcm92aWRlZC4iXS5qb2luKCIgIikpfX19LGxheW91dEF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czpjLGhhbmRsZVRyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspYyh0LGUscltpXSsiY2FsZW5kYXIiLG4uY2FsZW5kYXIpfSxDQU5PTklDQUxfU1VOREFZOntjaGluZXNlOiIyMDAwLTAxLTAyIixjb3B0aWM6IjIwMDAtMDEtMDMiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMyIsZXRoaW9waWFuOiIyMDAwLTAxLTA1IixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDIiLGp1bGlhbjoiMjAwMC0wMS0wMyIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDUiLG5lcGFsaToiMjAwMC0wMS0wNSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDQiLHRoYWk6IjIwMDAtMDEtMDQiLHVtbWFscXVyYToiMTQwMC0wMS0wNiJ9LENBTk9OSUNBTF9USUNLOntjaGluZXNlOiIyMDAwLTAxLTAxIixjb3B0aWM6IjIwMDAtMDEtMDEiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMSIsZXRoaW9waWFuOiIyMDAwLTAxLTAxIixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDEiLGp1bGlhbjoiMjAwMC0wMS0wMSIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDEiLG5lcGFsaToiMjAwMC0wMS0wMSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDEiLHRoYWk6IjIwMDAtMDEtMDEiLHVtbWFscXVyYToiMTQwMC0wMS0wMSJ9LERGTFRSQU5HRTp7Y2hpbmVzZTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sY29wdGljOlsiMTcwMC0wMS0wMSIsIjE3MDEtMDEtMDEiXSxkaXNjd29ybGQ6WyIxODAwLTAxLTAxIiwiMTgwMS0wMS0wMSJdLGV0aGlvcGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0saGVicmV3OlsiNTcwMC0wMS0wMSIsIjU3MDEtMDEtMDEiXSxpc2xhbWljOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSxqdWxpYW46WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLG1heWFuOlsiNTIwMC0wMS0wMSIsIjUyMDEtMDEtMDEiXSxuYW5ha3NoYWhpOlsiMDUwMC0wMS0wMSIsIjA1MDEtMDEtMDEiXSxuZXBhbGk6WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLHBlcnNpYW46WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGphbGFsaTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0sdGFpd2FuOlsiMDEwMC0wMS0wMSIsIjAxMDEtMDEtMDEiXSx0aGFpOlsiMjUwMC0wMS0wMSIsIjI1MDEtMDEtMDEiXSx1bW1hbHF1cmE6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdfSxnZXRDYWw6cCx3b3JsZENhbEZtdDpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYSxsLGMsaD1NYXRoLmZsb29yKChlKy4wNSkvcykrbyxkPXAocikuZnJvbUpEKGgpLGc9MDstMSE9PShnPXQuaW5kZXhPZigiJSIsZykpOykiMCI9PT0obj10LmNoYXJBdChnKzEpKXx8Ii0iPT09bnx8Il8iPT09bj8oYT0zLGk9dC5jaGFyQXQoZysyKSwiXyI9PT1uJiYobj0iLSIpKTooaT1uLG49IjAiLGE9MiksKGw9ZltpXSk/KGM9bD09PXU/dTpkLmZvcm1hdERhdGUobFtuXSksdD10LnN1YnN0cigwLGcpK2MrdC5zdWJzdHIoZythKSxnKz1jLmxlbmd0aCk6Zys9YTtyZXR1cm4gdH19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4vY2FsZW5kYXJzIjo1NzR9XSw1NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWZhdWx0cz1bIiMxZjc3YjQiLCIjZmY3ZjBlIiwiIzJjYTAyYyIsIiNkNjI3MjgiLCIjOTQ2N2JkIiwiIzhjNTY0YiIsIiNlMzc3YzIiLCIjN2Y3ZjdmIiwiI2JjYmQyMiIsIiMxN2JlY2YiXSxyLmRlZmF1bHRMaW5lPSIjNDQ0IixyLmxpZ2h0TGluZT0iI2VlZSIsci5iYWNrZ3JvdW5kPSIjZmZmIixyLmJvcmRlckxpbmU9IiNCRUM4RDkiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPWUuZXhwb3J0cz17fSxvPXQoIi4vYXR0cmlidXRlcyIpO2EuZGVmYXVsdHM9by5kZWZhdWx0czt2YXIgcz1hLmRlZmF1bHRMaW5lPW8uZGVmYXVsdExpbmU7YS5saWdodExpbmU9by5saWdodExpbmU7dmFyIGw9YS5iYWNrZ3JvdW5kPW8uYmFja2dyb3VuZDtmdW5jdGlvbiBjKHQpe2lmKGkodCl8fCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10LnRyaW0oKTtpZigicmdiIiE9PWUuc3Vic3RyKDAsMykpcmV0dXJuIHQ7dmFyIHI9ZS5tYXRjaCgvXnJnYmE/XHMqXCgoW14oKV0qKVwpJC8pO2lmKCFyKXJldHVybiB0O3ZhciBuPXJbMV0udHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pLGE9ImEiPT09ZS5jaGFyQXQoMykmJjQ9PT1uLmxlbmd0aDtpZighYSYmMyE9PW4ubGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXtpZighbltvXS5sZW5ndGgpcmV0dXJuIHQ7aWYobltvXT1OdW1iZXIobltvXSksIShuW29dPj0wKSlyZXR1cm4gdDtpZigzPT09byluW29dPjEmJihuW29dPTEpO2Vsc2UgaWYobltvXT49MSlyZXR1cm4gdH12YXIgcz1NYXRoLnJvdW5kKDI1NSpuWzBdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMV0pKyIsICIrTWF0aC5yb3VuZCgyNTUqblsyXSk7cmV0dXJuIGE/InJnYmEoIitzKyIsICIrblszXSsiKSI6InJnYigiK3MrIikifWEudGlueVJHQj1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmdiKCk7cmV0dXJuInJnYigiK01hdGgucm91bmQoZS5yKSsiLCAiK01hdGgucm91bmQoZS5nKSsiLCAiK01hdGgucm91bmQoZS5iKSsiKSJ9LGEucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBhLnRpbnlSR0Iobih0KSl9LGEub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpLmdldEFscGhhKCk6MH0sYS5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChyLnIpKyIsICIrTWF0aC5yb3VuZChyLmcpKyIsICIrTWF0aC5yb3VuZChyLmIpKyIsICIrZSsiKSJ9LGEuY29tYmluZT1mdW5jdGlvbih0LGUpe3ZhciByPW4odCkudG9SZ2IoKTtpZigxPT09ci5hKXJldHVybiBuKHQpLnRvUmdiU3RyaW5nKCk7dmFyIGk9bihlfHxsKS50b1JnYigpLGE9MT09PWkuYT9pOntyOjI1NSooMS1pLmEpK2kucippLmEsZzoyNTUqKDEtaS5hKStpLmcqaS5hLGI6MjU1KigxLWkuYSkraS5iKmkuYX0sbz17cjphLnIqKDEtci5hKStyLnIqci5hLGc6YS5nKigxLXIuYSkrci5nKnIuYSxiOmEuYiooMS1yLmEpK3IuYipyLmF9O3JldHVybiBuKG8pLnRvUmdiU3RyaW5nKCl9LGEuY29udHJhc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4odCk7cmV0dXJuIDEhPT1pLmdldEFscGhhKCkmJihpPW4oYS5jb21iaW5lKHQsbCkpKSwoaS5pc0RhcmsoKT9lP2kubGlnaHRlbihlKTpsOnI/aS5kYXJrZW4ocik6cykudG9TdHJpbmcoKX0sYS5zdHJva2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpO3Quc3R5bGUoe3N0cm9rZTphLnRpbnlSR0IociksInN0cm9rZS1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sYS5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtmaWxsOmEudGlueVJHQihyKSwiZmlsbC1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sYS5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlLHIsbixpLG89T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKylpZihpPXRbbj1vW2VdXSwiY29sb3IiPT09bi5zdWJzdHIobi5sZW5ndGgtNSkpaWYoQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl09YyhpW3JdKTtlbHNlIHRbbl09YyhpKTtlbHNlIGlmKCJjb2xvcnNjYWxlIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTEwKSYmQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKUFycmF5LmlzQXJyYXkoaVtyXSkmJihpW3JdWzFdPWMoaVtyXVsxXSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIHM9aVswXTtpZighQXJyYXkuaXNBcnJheShzKSYmcyYmIm9iamVjdCI9PXR5cGVvZiBzKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspYS5jbGVhbihpW3JdKX1lbHNlIGkmJiJvYmplY3QiPT10eXBlb2YgaSYmYS5jbGVhbihpKX19fSx7Ii4vYXR0cmlidXRlcyI6NTc2LCJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sNTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHhwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIn0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyx0aWNrZm9udDppKHt9KSx0aWNrYW5nbGU6bi50aWNrYW5nbGUsdGlja2Zvcm1hdDpuLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOm4udGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6bi50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Om4uc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpuLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6bi5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpuLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0Om4uZXhwb25lbnRmb3JtYXQsc2hvd2V4cG9uZW50Om4uc2hvd2V4cG9uZW50LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmcifSxmb250Omkoe30pLHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJpZ2h0IiwidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIn19LF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIn0sdGl0bGVmb250Omkoe30pLHRpdGxlc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmlnaHQiLCJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AifX19LCJjb2xvcmJhcnMiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NjAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0fV0sNTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpLGk9dCgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZmxpcFNjYWxlO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIHIodCxlKTt2YXIgYT1lWzBdLnRyYWNlLG89ImNiIithLnVpZDtyPUFycmF5LmlzQXJyYXkocik/cjpbcl07Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsPXJbc10uY29udGFpbmVyLGM9bD9hW2xdOmE7aWYodC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrbykucmVtb3ZlKCksYyYmYy5zaG93c2NhbGUpe3ZhciB1PWVbMF0udC5jYj1uKHQsbyksZj1jLnJldmVyc2VzY2FsZT9pKGMuY29sb3JzY2FsZSk6Yy5jb2xvcnNjYWxlO3JldHVybiB2b2lkIHUuZmlsbGdyYWRpZW50KGYpLnpyYW5nZShbY1tyW3NdLm1pbl0sY1tyW3NdLm1heF1dKS5vcHRpb25zKGMuY29sb3JiYXIpKCl9fX19LHsiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjo1ODgsIi4vZHJhdyI6NTgyfV0sNTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y246e2NvbG9yYmFyOiJjb2xvcmJhciIsY2JiZzoiY2JiZyIsY2JmaWxsOiJjYmZpbGwiLGNiZmlsbHM6ImNiZmlsbHMiLGNibGluZToiY2JsaW5lIixjYmxpbmVzOiJjYmxpbmVzIixjYmF4aXM6ImNiYXhpcyIsY2J0aXRsZXVuc2hpZnQ6ImNidGl0bGV1bnNoaWZ0IixjYnRpdGxlOiJjYnRpdGxlIixjYm91dGxpbmU6ImNib3V0bGluZSIsY3Jpc3A6ImNyaXNwIixqc1BsYWNlaG9sZGVyOiJqcy1wbGFjZWhvbGRlciJ9fX0se31dLDU4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYz1pLm5ld0NvbnRhaW5lcihlLCJjb2xvcmJhciIpLHU9dC5jb2xvcmJhcnx8e307ZnVuY3Rpb24gZih0LGUpe3JldHVybiBuLmNvZXJjZSh1LGMsbCx0LGUpfXZhciBoPWYoInRoaWNrbmVzc21vZGUiKTtmKCJ0aGlja25lc3MiLCJmcmFjdGlvbiI9PT1oPzMwLyhyLndpZHRoLXIubWFyZ2luLmwtci5tYXJnaW4ucik6MzApO3ZhciBwPWYoImxlbm1vZGUiKTtmKCJsZW4iLCJmcmFjdGlvbiI9PT1wPzE6ci5oZWlnaHQtci5tYXJnaW4udC1yLm1hcmdpbi5iKSxmKCJ4IiksZigieGFuY2hvciIpLGYoInhwYWQiKSxmKCJ5IiksZigieWFuY2hvciIpLGYoInlwYWQiKSxuLm5vbmVPckFsbCh1LGMsWyJ4IiwieSJdKSxmKCJvdXRsaW5lY29sb3IiKSxmKCJvdXRsaW5ld2lkdGgiKSxmKCJib3JkZXJjb2xvciIpLGYoImJvcmRlcndpZHRoIiksZigiYmdjb2xvciIpLGEodSxjLGYsImxpbmVhciIpO3ZhciBkPXtvdXRlclRpY2tzOiExLGZvbnQ6ci5mb250fTtzKHUsYyxmLCJsaW5lYXIiLGQpLG8odSxjLGYsImxpbmVhciIsZCksZigidGl0bGUudGV4dCIsci5fZGZsdFRpdGxlLmNvbG9yYmFyKSxuLmNvZXJjZUZvbnQoZiwidGl0bGUuZm9udCIsci5mb250KSxmKCJ0aXRsZS5zaWRlIil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo3NjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjc2OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjc2OSwiLi9hdHRyaWJ1dGVzIjo1Nzh9XSw1ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uL2RyYWdlbGVtZW50IiksYz10KCIuLi8uLi9saWIiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGY9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGg9dCgiLi4vZHJhd2luZyIpLHA9dCgiLi4vY29sb3IiKSxkPXQoIi4uL3RpdGxlcyIpLGc9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IiksbT12LkxJTkVfU1BBQ0lORyx5PXYuRlJPTV9UTCx4PXYuRlJPTV9CUixiPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksXz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSx3PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGs9dCgiLi9hdHRyaWJ1dGVzIiksVD10KCIuL2NvbnN0YW50cyIpLmNuO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O2Zvcih2YXIgdiBpbiBrKXJbdl09bnVsbDtmdW5jdGlvbiBBKCl7dmFyIHY9dC5fZnVsbExheW91dCxrPXYuX3NpemU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIuZmlsbGNvbG9yfHwiZnVuY3Rpb24iPT10eXBlb2Ygci5saW5lLmNvbG9yfHxyLmZpbGxncmFkaWVudCl7dmFyIEUsQyxMPXIuenJhbmdlfHxuLmV4dGVudCgoImZ1bmN0aW9uIj09dHlwZW9mIHIuZmlsbGNvbG9yP3IuZmlsbGNvbG9yOnIubGluZS5jb2xvcikuZG9tYWluKCkpLHo9W10sTz1bXSxJPSJmdW5jdGlvbiI9PXR5cGVvZiByLmxpbmUuY29sb3I/ci5saW5lLmNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHIubGluZS5jb2xvcn0sRD0iZnVuY3Rpb24iPT10eXBlb2Ygci5maWxsY29sb3I/ci5maWxsY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gci5maWxsY29sb3J9LFA9ci5sZXZlbHMuZW5kK3IubGV2ZWxzLnNpemUvMTAwLFI9ci5sZXZlbHMuc2l6ZSxGPTEuMDAxKkxbMF0tLjAwMSpMWzFdLEI9MS4wMDEqTFsxXS0uMDAxKkxbMF07Zm9yKEM9MDtDPDFlNSYmKEU9ci5sZXZlbHMuc3RhcnQrQypSLCEoUj4wP0U+PVA6RTw9UCkpO0MrKylFPkYmJkU8QiYmei5wdXNoKEUpO2lmKHIuZmlsbGdyYWRpZW50KU89WzBdO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHIuZmlsbGNvbG9yKWlmKHIuZmlsbGxldmVscylmb3IoUD1yLmZpbGxsZXZlbHMuZW5kK3IuZmlsbGxldmVscy5zaXplLzEwMCxSPXIuZmlsbGxldmVscy5zaXplLEM9MDtDPDFlNSYmKEU9ci5maWxsbGV2ZWxzLnN0YXJ0K0MqUiwhKFI+MD9FPj1QOkU8PVApKTtDKyspRT5MWzBdJiZFPExbMV0mJk8ucHVzaChFKTtlbHNlKE89ei5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQtci5sZXZlbHMuc2l6ZS8yfSkpLnB1c2goT1tPLmxlbmd0aC0xXStyLmxldmVscy5zaXplKTtlbHNlIHIuZmlsbGNvbG9yJiYic3RyaW5nIj09dHlwZW9mIHIuZmlsbGNvbG9yJiYoTz1bMF0pO3IubGV2ZWxzLnNpemU8MCYmKHoucmV2ZXJzZSgpLE8ucmV2ZXJzZSgpKTt2YXIgTixqPWsuaCxWPWsudyxVPU1hdGgucm91bmQoci50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1yLnRoaWNrbmVzc21vZGU/VjoxKSkscT1VL2sudyxIPU1hdGgucm91bmQoci5sZW4qKCJmcmFjdGlvbiI9PT1yLmxlbm1vZGU/ajoxKSksRz1IL2suaCxZPXIueHBhZC9rLncsVz0oci5ib3JkZXJ3aWR0aCtyLm91dGxpbmV3aWR0aCkvMixYPXIueXBhZC9rLmgsWj1NYXRoLnJvdW5kKHIueCprLncrci54cGFkKSwkPXIueC1xKih7bWlkZGxlOi41LHJpZ2h0OjF9W3IueGFuY2hvcl18fDApLEo9ci55K0cqKCh7dG9wOi0uNSxib3R0b206LjV9W3IueWFuY2hvcl18fDApLS41KSxLPU1hdGgucm91bmQoay5oKigxLUopKSxRPUstSCx0dD17dHlwZToibGluZWFyIixyYW5nZTpMLHRpY2ttb2RlOnIudGlja21vZGUsbnRpY2tzOnIubnRpY2tzLHRpY2swOnIudGljazAsZHRpY2s6ci5kdGljayx0aWNrdmFsczpyLnRpY2t2YWxzLHRpY2t0ZXh0OnIudGlja3RleHQsdGlja3M6ci50aWNrcyx0aWNrbGVuOnIudGlja2xlbix0aWNrd2lkdGg6ci50aWNrd2lkdGgsdGlja2NvbG9yOnIudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOnIuc2hvd3RpY2tsYWJlbHMsdGlja2ZvbnQ6ci50aWNrZm9udCx0aWNrYW5nbGU6ci50aWNrYW5nbGUsdGlja2Zvcm1hdDpyLnRpY2tmb3JtYXQsZXhwb25lbnRmb3JtYXQ6ci5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczpyLnNlcGFyYXRldGhvdXNhbmRzLHNob3dleHBvbmVudDpyLnNob3dleHBvbmVudCxzaG93dGlja3ByZWZpeDpyLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6ci50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4OnIuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDpyLnRpY2tzdWZmaXgsdGl0bGU6ci50aXRsZSxzaG93bGluZTohMCxhbmNob3I6ImZyZWUiLHNpZGU6InJpZ2h0Iixwb3NpdGlvbjoxfSxldD17dHlwZToibGluZWFyIixfaWQ6InkiK2V9LHJ0PXtsZXR0ZXI6InkiLGZvbnQ6di5mb250LG5vSG92ZXI6ITAsbm9UaWNrc29uOiEwLGNhbGVuZGFyOnYuY2FsZW5kYXJ9O2lmKGIodHQsZXQseXQscnQsdiksXyh0dCxldCx5dCxydCksZXQucG9zaXRpb249ci54K1krcSxBLmF4aXM9ZXQsLTEhPT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2Yoci50aXRsZS5zaWRlKSYmKGV0LnRpdGxlLnNpZGU9ci50aXRsZS5zaWRlLGV0LnRpdGxleD1yLngrWSxldC50aXRsZXk9SisoInRvcCI9PT1yLnRpdGxlLnNpZGU/Ry1YOlgpKSxyLmxpbmUuY29sb3ImJiJhdXRvIj09PXIudGlja21vZGUpe2V0LnRpY2ttb2RlPSJsaW5lYXIiLGV0LnRpY2swPXIubGV2ZWxzLnN0YXJ0O3ZhciBudD1yLmxldmVscy5zaXplLGl0PWMuY29uc3RyYWluKChLLVEpLzUwLDQsMTUpKzEsYXQ9KExbMV0tTFswXSkvKChyLm50aWNrc3x8aXQpKm50KTtpZihhdD4xKXt2YXIgb3Q9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhhdCkvTWF0aC5MTjEwKSk7bnQqPW90KmMucm91bmRVcChhdC9vdCxbMiw1LDEwXSksKE1hdGguYWJzKHIubGV2ZWxzLnN0YXJ0KS9yLmxldmVscy5zaXplKzFlLTYpJTE8MmUtNiYmKGV0LnRpY2swPTApfWV0LmR0aWNrPW50fWV0LmRvbWFpbj1bSitYLEorRy1YXSxldC5zZXRTY2FsZSgpO3ZhciBzdD1jLmVuc3VyZVNpbmdsZSh2Ll9pbmZvbGF5ZXIsImciLGUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKFQuY29sb3JiYXIsITApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoVC5jYmJnLCEwKSx0LmFwcGVuZCgiZyIpLmNsYXNzZWQoVC5jYmZpbGxzLCEwKSx0LmFwcGVuZCgiZyIpLmNsYXNzZWQoVC5jYmxpbmVzLCEwKSx0LmFwcGVuZCgiZyIpLmNsYXNzZWQoVC5jYmF4aXMsITApLmNsYXNzZWQoVC5jcmlzcCwhMCksdC5hcHBlbmQoImciKS5jbGFzc2VkKFQuY2J0aXRsZXVuc2hpZnQsITApLmFwcGVuZCgiZyIpLmNsYXNzZWQoVC5jYnRpdGxlLCEwKSx0LmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoVC5jYm91dGxpbmUsITApLHQuc2VsZWN0KCIuY2J0aXRsZSIpLmRhdHVtKDApfSl9KTtzdC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitNYXRoLnJvdW5kKGsubCkrIiwiK01hdGgucm91bmQoay50KSsiKSIpO3ZhciBsdD1zdC5zZWxlY3QoIi5jYnRpdGxldW5zaGlmdCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtIitNYXRoLnJvdW5kKGsubCkrIiwtIitNYXRoLnJvdW5kKGsudCkrIikiKSxjdD1zdC5zZWxlY3QoIi5jYmF4aXMiKSx1dD0wO2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKHIudGl0bGUuc2lkZSkpe3ZhciBmdCxodD1rLmwrKHIueCtZKSprLncscHQ9ZXQudGl0bGUuZm9udC5zaXplO2Z0PSJ0b3AiPT09ci50aXRsZS5zaWRlPygxLShKK0ctWCkpKmsuaCtrLnQrMysuNzUqcHQ6KDEtKEorWCkpKmsuaCtrLnQtMy0uMjUqcHQseHQoZXQuX2lkKyJ0aXRsZSIse2F0dHJpYnV0ZXM6e3g6aHQseTpmdCwidGV4dC1hbmNob3IiOiJzdGFydCJ9fSl9dmFyIGR0LGd0LHZ0LG10PWMuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKHIudGl0bGUuc2lkZSkpe3ZhciBhPXN0LnNlbGVjdCgiLmNidGl0bGUiKSxvPWEuc2VsZWN0KCJ0ZXh0IiksbD1bLXIub3V0bGluZXdpZHRoLzIsci5vdXRsaW5ld2lkdGgvMl0sdT1hLnNlbGVjdCgiLmgiK2V0Ll9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSxmPTE1LjY7aWYoby5ub2RlKCkmJihmPXBhcnNlSW50KG8ubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSptKSx1Pyh1dD1oLmJCb3godSkuaGVpZ2h0KT5mJiYobFsxXS09KHV0LWYpLzIpOm8ubm9kZSgpJiYhby5jbGFzc2VkKFQuanNQbGFjZWhvbGRlcikmJih1dD1oLmJCb3goby5ub2RlKCkpLmhlaWdodCksdXQpe2lmKHV0Kz01LCJ0b3AiPT09ci50aXRsZS5zaWRlKWV0LmRvbWFpblsxXS09dXQvay5oLGxbMV0qPS0xO2Vsc2V7ZXQuZG9tYWluWzBdKz11dC9rLmg7dmFyIHA9Zy5saW5lQ291bnQobyk7bFsxXSs9KDEtcCkqZn1hLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2wrIikiKSxldC5zZXRTY2FsZSgpfX1zdC5zZWxlY3RBbGwoIi5jYmZpbGxzLC5jYmxpbmVzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitNYXRoLnJvdW5kKGsuaCooMS1ldC5kb21haW5bMV0pKSsiKSIpLGN0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrTWF0aC5yb3VuZCgtay50KSsiKSIpO3ZhciBkPXN0LnNlbGVjdCgiLmNiZmlsbHMiKS5zZWxlY3RBbGwoInJlY3QuY2JmaWxsIikuZGF0YShPKTtkLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChULmNiZmlsbCwhMCkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKSxkLmV4aXQoKS5yZW1vdmUoKTt2YXIgeT1MLm1hcChldC5jMnApLm1hcChNYXRoLnJvdW5kKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO2QuZWFjaChmdW5jdGlvbihhLG8pe3ZhciBzPVswPT09bz9MWzBdOihPW29dK09bby0xXSkvMixvPT09Ty5sZW5ndGgtMT9MWzFdOihPW29dK09bbysxXSkvMl0ubWFwKGV0LmMycCkubWFwKE1hdGgucm91bmQpO3NbMV09Yy5jb25zdHJhaW4oc1sxXSsoc1sxXT5zWzBdKT8xOi0xLHlbMF0seVsxXSk7dmFyIGw9bi5zZWxlY3QodGhpcykuYXR0cih7eDpaLHdpZHRoOk1hdGgubWF4KFUsMikseTpuLm1pbihzKSxoZWlnaHQ6TWF0aC5tYXgobi5tYXgocyktbi5taW4ocyksMil9KTtpZihyLmZpbGxncmFkaWVudCloLmdyYWRpZW50KGwsdCxlLCJ2ZXJ0aWNhbCIsci5maWxsZ3JhZGllbnQsImZpbGwiKTtlbHNle3ZhciB1PUQoYSkucmVwbGFjZSgiZS0iLCIiKTtsLmF0dHIoImZpbGwiLGkodSkudG9IZXhTdHJpbmcoKSl9fSk7dmFyIHg9c3Quc2VsZWN0KCIuY2JsaW5lcyIpLnNlbGVjdEFsbCgicGF0aC5jYmxpbmUiKS5kYXRhKHIubGluZS5jb2xvciYmci5saW5lLndpZHRoP3o6W10pO3JldHVybiB4LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChULmNibGluZSwhMCkseC5leGl0KCkucmVtb3ZlKCkseC5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitaKyIsIisoTWF0aC5yb3VuZChldC5jMnAodCkpK3IubGluZS53aWR0aC8yJTEpKyJoIitVKS5jYWxsKGgubGluZUdyb3VwU3R5bGUsci5saW5lLndpZHRoLEkodCksci5saW5lLmRhc2gpfSksY3Quc2VsZWN0QWxsKCJnLiIrZXQuX2lkKyJ0aWNrLHBhdGgiKS5yZW1vdmUoKSxjLnN5bmNPckFzeW5jKFtmdW5jdGlvbigpe3ZhciBlPVorVSsoci5vdXRsaW5ld2lkdGh8fDApLzItKCJvdXRzaWRlIj09PXIudGlja3M/MTowKSxuPXMuY2FsY1RpY2tzKGV0KSxpPXMubWFrZVRyYW5zRm4oZXQpLGE9cy5nZXRUaWNrU2lnbnMoZXQpWzJdO3JldHVybiBzLmRyYXdUaWNrcyh0LGV0LHt2YWxzOiJpbnNpZGUiPT09ZXQudGlja3M/cy5jbGlwRW5kcyhldCxuKTpuLGxheWVyOmN0LHBhdGg6cy5tYWtlVGlja1BhdGgoZXQsZSxhKSx0cmFuc0ZuOml9KSxzLmRyYXdMYWJlbHModCxldCx7dmFsczpuLGxheWVyOmN0LHRyYW5zRm46aSxsYWJlbEZuczpzLm1ha2VMYWJlbEZucyhldCxlKX0pfSxmdW5jdGlvbigpe2lmKC0xPT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKHIudGl0bGUuc2lkZSkpe3ZhciBlPWV0LnRpdGxlLmZvbnQuc2l6ZSxpPWV0Ll9vZmZzZXQrZXQuX2xlbmd0aC8yLGE9ay5sKyhldC5wb3NpdGlvbnx8MCkqay53KygicmlnaHQiPT09ZXQuc2lkZT8xMCtlKihldC5zaG93dGlja2xhYmVscz8xOi41KTotMTAtZSooZXQuc2hvd3RpY2tsYWJlbHM/LjU6MCkpO3h0KCJoIitldC5faWQrInRpdGxlIix7YXZvaWQ6e3NlbGVjdGlvbjpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuIitldC5faWQrInRpY2siKSxzaWRlOnIudGl0bGUuc2lkZSxvZmZzZXRMZWZ0OmsubCxvZmZzZXRUb3A6MCxtYXhTaGlmdDp2LndpZHRofSxhdHRyaWJ1dGVzOnt4OmEseTppLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOiItOTAiLG9mZnNldDowfX0pfX1dKX0sYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIG49VStyLm91dGxpbmV3aWR0aC8yK2guYkJveChjdC5ub2RlKCkpLndpZHRoO2lmKChOPWx0LnNlbGVjdCgidGV4dCIpKS5ub2RlKCkmJiFOLmNsYXNzZWQoVC5qc1BsYWNlaG9sZGVyKSl7dmFyIGksbz1sdC5zZWxlY3QoIi5oIitldC5faWQrInRpdGxlLW1hdGgtZ3JvdXAiKS5ub2RlKCk7aT1vJiYtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihyLnRpdGxlLnNpZGUpP2guYkJveChvKS53aWR0aDpoLmJCb3gobHQubm9kZSgpKS5yaWdodC1aLWsubCxuPU1hdGgubWF4KG4saSl9dmFyIHM9MipyLnhwYWQrbityLmJvcmRlcndpZHRoK3Iub3V0bGluZXdpZHRoLzIsbD1LLVE7c3Quc2VsZWN0KCIuY2JiZyIpLmF0dHIoe3g6Wi1yLnhwYWQtKHIuYm9yZGVyd2lkdGgrci5vdXRsaW5ld2lkdGgpLzIseTpRLVcsd2lkdGg6TWF0aC5tYXgocywyKSxoZWlnaHQ6TWF0aC5tYXgobCsyKlcsMil9KS5jYWxsKHAuZmlsbCxyLmJnY29sb3IpLmNhbGwocC5zdHJva2Usci5ib3JkZXJjb2xvcikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOnIuYm9yZGVyd2lkdGh9KSxzdC5zZWxlY3RBbGwoIi5jYm91dGxpbmUiKS5hdHRyKHt4OloseTpRK3IueXBhZCsoInRvcCI9PT1yLnRpdGxlLnNpZGU/dXQ6MCksd2lkdGg6TWF0aC5tYXgoVSwyKSxoZWlnaHQ6TWF0aC5tYXgobC0yKnIueXBhZC11dCwyKX0pLmNhbGwocC5zdHJva2Usci5vdXRsaW5lY29sb3IpLnN0eWxlKHtmaWxsOiJOb25lIiwic3Ryb2tlLXdpZHRoIjpyLm91dGxpbmV3aWR0aH0pO3ZhciBjPSh7Y2VudGVyOi41LHJpZ2h0OjF9W3IueGFuY2hvcl18fDApKnM7c3QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGsubC1jKSsiLCIray50KyIpIik7dmFyIHU9e30sZj15W3IueWFuY2hvcl0sZD14W3IueWFuY2hvcl07InBpeGVscyI9PT1yLmxlbm1vZGU/KHUueT1yLnksdS50PWwqZix1LmI9bCpkKToodS50PXUuYj0wLHUueXQ9ci55K3IubGVuKmYsdS55Yj1yLnktci5sZW4qZCk7dmFyIGc9eVtyLnhhbmNob3JdLHY9eFtyLnhhbmNob3JdO2lmKCJwaXhlbHMiPT09ci50aGlja25lc3Ntb2RlKXUueD1yLngsdS5sPXMqZyx1LnI9cyp2O2Vsc2V7dmFyIG09cy1VO3UubD1tKmcsdS5yPW0qdix1LnhsPXIueC1yLnRoaWNrbmVzcypnLHUueHI9ci54K3IudGhpY2tuZXNzKnZ9YS5hdXRvTWFyZ2luKHQsZSx1KX1dLHQpO2lmKG10JiZtdC50aGVuJiYodC5fcHJvbWlzZXN8fFtdKS5wdXNoKG10KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24pbC5pbml0KHtlbGVtZW50OnN0Lm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe2R0PXN0LmF0dHIoInRyYW5zZm9ybSIpLGYoc3QpfSxtb3ZlRm46ZnVuY3Rpb24odCxlKXtzdC5hdHRyKCJ0cmFuc2Zvcm0iLGR0KyIgdHJhbnNsYXRlKCIrdCsiLCIrZSsiKSIpLGd0PWwuYWxpZ24oJCt0L2sudyxxLDAsMSxyLnhhbmNob3IpLHZ0PWwuYWxpZ24oSi1lL2suaCxHLDAsMSxyLnlhbmNob3IpO3ZhciBuPWwuZ2V0Q3Vyc29yKGd0LHZ0LHIueGFuY2hvcixyLnlhbmNob3IpO2Yoc3Qsbil9LGRvbmVGbjpmdW5jdGlvbigpe2lmKGYoc3QpLHZvaWQgMCE9PWd0JiZ2b2lkIDAhPT12dCl7dmFyIGU9e307ZVtTKCJ4IildPWd0LGVbUygieSIpXT12dCxvLmNhbGwoIl9ndWlSZXN0eWxlIix0LGUsTSgpLmluZGV4KX19fSk7cmV0dXJuIG10fWZ1bmN0aW9uIHl0KHQsZSl7cmV0dXJuIGMuY29lcmNlKHR0LGV0LHcsdCxlKX1mdW5jdGlvbiB4dChlLHIpe3ZhciBuPXtwcm9wQ29udGFpbmVyOmV0LHByb3BOYW1lOlMoInRpdGxlIiksdHJhY2VJbmRleDpNKCkuaW5kZXgscGxhY2Vob2xkZXI6di5fZGZsdFRpdGxlLmNvbG9yYmFyLGNvbnRhaW5lckdyb3VwOnN0LnNlbGVjdCgiLmNidGl0bGUiKX0saT0iaCI9PT1lLmNoYXJBdCgwKT9lLnN1YnN0cigxKToiaCIrZTtzdC5zZWxlY3RBbGwoIi4iK2krIiwuIitpKyItbWF0aC1ncm91cCIpLnJlbW92ZSgpLGQuZHJhdyh0LGUsdShuLHJ8fHt9KSl9di5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2UpLnJlbW92ZSgpfWZ1bmN0aW9uIE0oKXtmb3IodmFyIHI9ZS5zdWJzdHIoMiksbj0wO248dC5fZnVsbERhdGEubGVuZ3RoO24rKyl7dmFyIGk9dC5fZnVsbERhdGFbbl07aWYoaS51aWQ9PT1yKXJldHVybiBpfX1mdW5jdGlvbiBTKHQpe3ZhciBlPSJjb2xvcmJhci4iLHI9TSgpLl9tb2R1bGUuY29sb3JiYXIuY29udGFpbmVyO3JldHVybiByJiYoZT1yKyIuIitlKSxlK3R9cmV0dXJuIHIuZmlsbGNvbG9yPW51bGwsci5saW5lPXtjb2xvcjpudWxsLHdpZHRoOm51bGwsZGFzaDpudWxsfSxyLmxldmVscz17c3RhcnQ6bnVsbCxlbmQ6bnVsbCxzaXplOm51bGx9LHIuZmlsbGxldmVscz1udWxsLHIuZmlsbGdyYWRpZW50PW51bGwsci56cmFuZ2U9bnVsbCxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0FbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHJbdF09Yy5pc1BsYWluT2JqZWN0KHJbdF0pP2MuZXh0ZW5kRmxhdChyW3RdLGUpOmUsQSk6clt0XX19KSxBLm9wdGlvbnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpImZ1bmN0aW9uIj09dHlwZW9mIEFbZV0mJkFbZV0odFtlXSk7cmV0dXJuIEF9LEEuX29wdHM9cixBfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NzIsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzYwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiOjc2MywiLi4vLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY29sb3IiOjU3NywiLi4vZHJhZ2VsZW1lbnQiOjU5NSwiLi4vZHJhd2luZyI6NTk4LCIuLi90aXRsZXMiOjY2NSwiLi9hdHRyaWJ1dGVzIjo1NzgsIi4vY29uc3RhbnRzIjo1ODAsZDM6MTU0LHRpbnljb2xvcjI6NTIxfV0sNTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQuY29sb3JiYXIpfX0seyIuLi8uLi9saWIiOjcwMH1dLDU4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjYWxlcy5qcyIpLnNjYWxlcztPYmplY3Qua2V5cyhuKTtmdW5jdGlvbiBpKHQpe3JldHVybiJgIit0KyJgIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0PXR8fCIiO3ZhciByLGE9KGU9ZXx8e30pLmNMZXR0ZXJ8fCJjIixvPSgib25seUlmTnVtZXJpY2FsImluIGU/ZS5vbmx5SWZOdW1lcmljYWw6Qm9vbGVhbih0KSwibm9TY2FsZSJpbiBlP2Uubm9TY2FsZToibWFya2VyLmxpbmUiPT09dCkscz0ic2hvd1NjYWxlRGZsdCJpbiBlP2Uuc2hvd1NjYWxlRGZsdDoieiI9PT1hLGw9InN0cmluZyI9PXR5cGVvZiBlLmNvbG9yc2NhbGVEZmx0P25bZS5jb2xvcnNjYWxlRGZsdF06bnVsbCxjPWUuZWRpdFR5cGVPdmVycmlkZXx8IiIsdT10P3QrIi4iOiIiOyJjb2xvckF0dHIiaW4gZT8ocj1lLmNvbG9yQXR0cixlLmNvbG9yQXR0cik6aSh1KyhyPXt6OiJ6IixjOiJjb2xvciJ9W2FdKSk7dmFyIGY9YSsiYXV0byIsaD1hKyJtaW4iLHA9YSsibWF4IixkPWErIm1pZCIsZz0oaSh1K2YpLGkodStoKSxpKHUrcCkse30pO2dbaF09Z1twXT12b2lkIDA7dmFyIHY9e307dltmXT0hMTt2YXIgbT17fTtyZXR1cm4iY29sb3IiPT09ciYmKG0uY29sb3I9e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOmN8fCJzdHlsZSJ9LGUuYW5pbSYmKG0uY29sb3IuYW5pbT0hMCkpLG1bZl09e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czpnfSxtW2hdPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZTpjfHwicGxvdCIsaW1wbGllZEVkaXRzOnZ9LG1bcF09e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOmN8fCJwbG90IixpbXBsaWVkRWRpdHM6dn0sbVtkXT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czpnfSxtLmNvbG9yc2NhbGU9e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGVkaXRUeXBlOiJjYWxjIixkZmx0OmwsaW1wbGllZEVkaXRzOnthdXRvY29sb3JzY2FsZTohMX19LG0uYXV0b2NvbG9yc2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEhPT1lLmF1dG9Db2xvckRmbHQsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7Y29sb3JzY2FsZTp2b2lkIDB9fSxtLnJldmVyc2VzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LG98fChtLnNob3dzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpzLGVkaXRUeXBlOiJjYWxjIn0pLG19fSx7Ii4vc2NhbGVzLmpzIjo1OTJ9XSw1ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Ll9mdWxsTGF5b3V0LGE9ci52YWxzLG89ci5jb250YWluZXJTdHIscz1yLmNMZXR0ZXIsbD1vP24ubmVzdGVkUHJvcGVydHkoZSxvKS5nZXQoKTplLGM9cysibWluIix1PXMrIm1heCIsZj1zKyJtaWQiLGg9bFtzKyJhdXRvIl0scD1sW2NdLGQ9bFt1XSxnPWxbZl0sdj1sLmNvbG9yc2NhbGU7ITE9PT1oJiZ2b2lkIDAhPT1wfHwocD1uLmFnZ051bXMoTWF0aC5taW4sbnVsbCxhKSksITE9PT1oJiZ2b2lkIDAhPT1kfHwoZD1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxhKSksITEhPT1oJiZ2b2lkIDAhPT1nJiYoZC1nPmctcD9wPWctKGQtZyk6ZC1nPGctcCYmKGQ9ZysoZy1wKSkpLHA9PT1kJiYocC09LjUsZCs9LjUpLGxbIl8iK2NdPWxbY109cCxsWyJfIit1XT1sW3VdPWQsbC5hdXRvY29sb3JzY2FsZSYmKHY9cCpkPDA/aS5jb2xvcnNjYWxlLmRpdmVyZ2luZzpwPj0wP2kuY29sb3JzY2FsZS5zZXF1ZW50aWFsOmkuY29sb3JzY2FsZS5zZXF1ZW50aWFsbWludXMsbC5fY29sb3JzY2FsZT1sLmNvbG9yc2NhbGU9dil9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sNTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3ZhciByPXRbIl8iK2VdO3ZvaWQgMCE9PXImJih0W2VdPXIpfWZ1bmN0aW9uIHIodCxyKXt2YXIgaT1yLmNvbnRhaW5lcj9uLm5lc3RlZFByb3BlcnR5KHQsci5jb250YWluZXIpLmdldCgpOnQ7aWYoaSl7dmFyIGE9aS56YXV0b3x8aS5jYXV0byxvPXIubWluLHM9ci5tYXg7KGF8fHZvaWQgMD09PWlbb10pJiZlKGksbyksKGF8fHZvaWQgMD09PWlbc10pJiZlKGkscyksaS5hdXRvY29sb3JzY2FsZSYmZShpLCJjb2xvcnNjYWxlIil9fWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdLHM9by5fbW9kdWxlLmNvbG9yYmFyO2lmKHMpaWYoQXJyYXkuaXNBcnJheShzKSlmb3IodmFyIGw9MDtsPHMubGVuZ3RoO2wrKylyKG8sc1tsXSk7ZWxzZSByKG8scyk7aShvLCJtYXJrZXIubGluZSIpJiZyKG8se2NvbnRhaW5lcjoibWFya2VyLmxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0pLGkobywibGluZSIpJiZyKG8se2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSl9fX0seyIuLi8uLi9saWIiOjcwMCwiLi9oZWxwZXJzIjo1ODh9XSw1ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIiksbz10KCIuLi9jb2xvcmJhci9kZWZhdWx0cyIpLHM9dCgiLi9zY2FsZXMiKS5pc1ZhbGlkO2Z1bmN0aW9uIGwodCxlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIGU/aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpfHx7fTp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGMpe3ZhciB1PWMucHJlZml4LGY9Yy5jTGV0dGVyLGg9bCh0LHUpLHA9bChlLHUpLGQ9bChlLl90ZW1wbGF0ZXx8e30sdSl8fHt9LGc9aFtmKyJtaW4iXSx2PWhbZisibWF4Il07aSh1K2YrImF1dG8iLCEobihnKSYmbih2KSYmZzx2KSk/aSh1K2YrIm1pZCIpOihpKHUrZisibWluIiksaSh1K2YrIm1heCIpKTt2YXIgbSx5LHg9aC5jb2xvcnNjYWxlLGI9ZC5jb2xvcnNjYWxlOyh2b2lkIDAhPT14JiYobT0hcyh4KSksdm9pZCAwIT09YiYmKG09IXMoYikpLGkodSsiYXV0b2NvbG9yc2NhbGUiLG0pLGkodSsiY29sb3JzY2FsZSIpLGkodSsicmV2ZXJzZXNjYWxlIiksYy5ub1NjYWxlfHwibWFya2VyLmxpbmUuIj09PXUpfHwodSYmKHk9YShoKSksaSh1KyJzaG93c2NhbGUiLHkpJiZvKGgscCxyKSl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9jb2xvcmJhci9kZWZhdWx0cyI6NTgxLCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXIiOjU4MywiLi9zY2FsZXMiOjU5MiwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDU4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4vc2NhbGVzIikuaXNWYWxpZDtmdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPWUtMSxpPTA7bj49MDtuLS0saSsrKXt2YXIgYT10W25dO3JbaV09WzEtYVswXSxhWzFdXX1yZXR1cm4gcn1mdW5jdGlvbiB1KHQpe3ZhciBlPXtyOnRbMF0sZzp0WzFdLGI6dFsyXSxhOnRbM119O3JldHVybiBpKGUpLnRvUmdiU3RyaW5nKCl9ZS5leHBvcnRzPXtoYXNDb2xvcnNjYWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9vLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCl8fHt9OnQsbj1yLmNvbG9yLGk9ITE7aWYoby5pc0FycmF5T3JUeXBlZEFycmF5KG4pKWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKWlmKGEobltzXSkpe2k9ITA7YnJlYWt9cmV0dXJuIG8uaXNQbGFpbk9iamVjdChyKSYmKGl8fCEwPT09ci5zaG93c2NhbGV8fGEoci5jbWluKSYmYShyLmNtYXgpfHxsKHIuY29sb3JzY2FsZSl8fG8uaXNQbGFpbk9iamVjdChyLmNvbG9yYmFyKSl9LGV4dHJhY3RTY2FsZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmNMZXR0ZXIsbj10LnJldmVyc2VzY2FsZT9jKHQuY29sb3JzY2FsZSk6dC5jb2xvcnNjYWxlLGk9dFtyKyJtaW4iXSxhPXRbcisibWF4Il0sbz1uLmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSx1PTA7dTxvO3UrKyl7dmFyIGY9blt1XTtzW3VdPWkrZlswXSooYS1pKSxsW3VdPWZbMV19cmV0dXJue2RvbWFpbjpzLHJhbmdlOmx9fSxmbGlwU2NhbGU6YyxtYWtlQ29sb3JTY2FsZUZ1bmM6ZnVuY3Rpb24odCxlKXtlPWV8fHt9O2Zvcih2YXIgcj10LmRvbWFpbixvPXQucmFuZ2UsbD1vLmxlbmd0aCxjPW5ldyBBcnJheShsKSxmPTA7ZjxsO2YrKyl7dmFyIGg9aShvW2ZdKS50b1JnYigpO2NbZl09W2gucixoLmcsaC5iLGguYV19dmFyIHAsZD1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihyKS5yYW5nZShjKS5jbGFtcCghMCksZz1lLm5vTnVtZXJpY0NoZWNrLHY9ZS5yZXR1cm5BcnJheTtyZXR1cm4ocD1nJiZ2P2Q6Zz9mdW5jdGlvbih0KXtyZXR1cm4gdShkKHQpKX06dj9mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9kKHQpOmkodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX06ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/dShkKHQpKTppKHQpLmlzVmFsaWQoKT90OnMuZGVmYXVsdExpbmV9KS5kb21haW49ZC5kb21haW4scC5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBvfSxwfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL2NvbG9yIjo1NzcsIi4vc2NhbGVzIjo1OTIsZDM6MTU0LCJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sNTg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzIiksaT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY29sb3JzY2FsZSIsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksc2NhbGVzOm4uc2NhbGVzLGRlZmF1bHRTY2FsZTpuLmRlZmF1bHRTY2FsZSxnZXRTY2FsZTpuLmdldCxpc1ZhbGlkU2NhbGU6bi5pc1ZhbGlkLGhhc0NvbG9yc2NhbGU6aS5oYXNDb2xvcnNjYWxlLGZsaXBTY2FsZTppLmZsaXBTY2FsZSxleHRyYWN0U2NhbGU6aS5leHRyYWN0U2NhbGUsbWFrZUNvbG9yU2NhbGVGdW5jOmkubWFrZUNvbG9yU2NhbGVGdW5jfX0seyIuL2F0dHJpYnV0ZXMiOjU4NCwiLi9jYWxjIjo1ODUsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjU4NiwiLi9kZWZhdWx0cyI6NTg3LCIuL2hlbHBlcnMiOjU4OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NTkwLCIuL2xheW91dF9kZWZhdWx0cyI6NTkxLCIuL3NjYWxlcyI6NTkyfV0sNTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzIikuc2NhbGVzO2UuZXhwb3J0cz17ZWRpdFR5cGU6ImNhbGMiLHNlcXVlbnRpYWw6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6bi5SZWRzLGVkaXRUeXBlOiJjYWxjIn0sc2VxdWVudGlhbG1pbnVzOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0Om4uQmx1ZXMsZWRpdFR5cGU6ImNhbGMifSxkaXZlcmdpbmc6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6bi5SZEJ1LGVkaXRUeXBlOiJjYWxjIn19fSx7Ii4vc2NhbGVzIjo1OTJ9XSw1OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jb2xvcnNjYWxlLG89YS5uZXdDb250YWluZXIoZSwiY29sb3JzY2FsZSIpO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gbi5jb2VyY2UocixvLGksdCxlKX1zKCJzZXF1ZW50aWFsIikscygic2VxdWVudGlhbG1pbnVzIikscygiZGl2ZXJnaW5nIil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU5MH1dLDU5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIiksaT17R3JleXM6W1swLCJyZ2IoMCwwLDApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sWWxHbkJ1OltbMCwicmdiKDgsMjksODgpIl0sWy4xMjUsInJnYigzNyw1MiwxNDgpIl0sWy4yNSwicmdiKDM0LDk0LDE2OCkiXSxbLjM3NSwicmdiKDI5LDE0NSwxOTIpIl0sWy41LCJyZ2IoNjUsMTgyLDE5NikiXSxbLjYyNSwicmdiKDEyNywyMDUsMTg3KSJdLFsuNzUsInJnYigxOTksMjMzLDE4MCkiXSxbLjg3NSwicmdiKDIzNywyNDgsMjE3KSJdLFsxLCJyZ2IoMjU1LDI1NSwyMTcpIl1dLEdyZWVuczpbWzAsInJnYigwLDY4LDI3KSJdLFsuMTI1LCJyZ2IoMCwxMDksNDQpIl0sWy4yNSwicmdiKDM1LDEzOSw2OSkiXSxbLjM3NSwicmdiKDY1LDE3MSw5MykiXSxbLjUsInJnYigxMTYsMTk2LDExOCkiXSxbLjYyNSwicmdiKDE2MSwyMTcsMTU1KSJdLFsuNzUsInJnYigxOTksMjMzLDE5MikiXSxbLjg3NSwicmdiKDIyOSwyNDUsMjI0KSJdLFsxLCJyZ2IoMjQ3LDI1MiwyNDUpIl1dLFlsT3JSZDpbWzAsInJnYigxMjgsMCwzOCkiXSxbLjEyNSwicmdiKDE4OSwwLDM4KSJdLFsuMjUsInJnYigyMjcsMjYsMjgpIl0sWy4zNzUsInJnYigyNTIsNzgsNDIpIl0sWy41LCJyZ2IoMjUzLDE0MSw2MCkiXSxbLjYyNSwicmdiKDI1NCwxNzgsNzYpIl0sWy43NSwicmdiKDI1NCwyMTcsMTE4KSJdLFsuODc1LCJyZ2IoMjU1LDIzNywxNjApIl0sWzEsInJnYigyNTUsMjU1LDIwNCkiXV0sQmx1ZXJlZDpbWzAsInJnYigwLDAsMjU1KSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUmRCdTpbWzAsInJnYig1LDEwLDE3MikiXSxbLjM1LCJyZ2IoMTA2LDEzNywyNDcpIl0sWy41LCJyZ2IoMTkwLDE5MCwxOTApIl0sWy42LCJyZ2IoMjIwLDE3MCwxMzIpIl0sWy43LCJyZ2IoMjMwLDE0NSw5MCkiXSxbMSwicmdiKDE3OCwxMCwyOCkiXV0sUmVkczpbWzAsInJnYigyMjAsMjIwLDIyMCkiXSxbLjIsInJnYigyNDUsMTk1LDE1NykiXSxbLjQsInJnYigyNDUsMTYwLDEwNSkiXSxbMSwicmdiKDE3OCwxMCwyOCkiXV0sQmx1ZXM6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDQwLDYwLDE5MCkiXSxbLjUsInJnYig3MCwxMDAsMjQ1KSJdLFsuNiwicmdiKDkwLDEyMCwyNDUpIl0sWy43LCJyZ2IoMTA2LDEzNywyNDcpIl0sWzEsInJnYigyMjAsMjIwLDIyMCkiXV0sUGljbmljOltbMCwicmdiKDAsMCwyNTUpIl0sWy4xLCJyZ2IoNTEsMTUzLDI1NSkiXSxbLjIsInJnYigxMDIsMjA0LDI1NSkiXSxbLjMsInJnYigxNTMsMjA0LDI1NSkiXSxbLjQsInJnYigyMDQsMjA0LDI1NSkiXSxbLjUsInJnYigyNTUsMjU1LDI1NSkiXSxbLjYsInJnYigyNTUsMjA0LDI1NSkiXSxbLjcsInJnYigyNTUsMTUzLDI1NSkiXSxbLjgsInJnYigyNTUsMTAyLDIwNCkiXSxbLjksInJnYigyNTUsMTAyLDEwMikiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJhaW5ib3c6W1swLCJyZ2IoMTUwLDAsOTApIl0sWy4xMjUsInJnYigwLDAsMjAwKSJdLFsuMjUsInJnYigwLDI1LDI1NSkiXSxbLjM3NSwicmdiKDAsMTUyLDI1NSkiXSxbLjUsInJnYig0NCwyNTUsMTUwKSJdLFsuNjI1LCJyZ2IoMTUxLDI1NSwwKSJdLFsuNzUsInJnYigyNTUsMjM0LDApIl0sWy44NzUsInJnYigyNTUsMTExLDApIl0sWzEsInJnYigyNTUsMCwwKSJdXSxQb3J0bGFuZDpbWzAsInJnYigxMiw1MSwxMzEpIl0sWy4yNSwicmdiKDEwLDEzNiwxODYpIl0sWy41LCJyZ2IoMjQyLDIxMSw1NikiXSxbLjc1LCJyZ2IoMjQyLDE0Myw1NikiXSxbMSwicmdiKDIxNywzMCwzMCkiXV0sSmV0OltbMCwicmdiKDAsMCwxMzEpIl0sWy4xMjUsInJnYigwLDYwLDE3MCkiXSxbLjM3NSwicmdiKDUsMjU1LDI1NSkiXSxbLjYyNSwicmdiKDI1NSwyNTUsMCkiXSxbLjg3NSwicmdiKDI1MCwwLDApIl0sWzEsInJnYigxMjgsMCwwKSJdXSxIb3Q6W1swLCJyZ2IoMCwwLDApIl0sWy4zLCJyZ2IoMjMwLDAsMCkiXSxbLjYsInJnYigyNTUsMjEwLDApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sQmxhY2tib2R5OltbMCwicmdiKDAsMCwwKSJdLFsuMiwicmdiKDIzMCwwLDApIl0sWy40LCJyZ2IoMjMwLDIxMCwwKSJdLFsuNywicmdiKDI1NSwyNTUsMjU1KSJdLFsxLCJyZ2IoMTYwLDIwMCwyNTUpIl1dLEVhcnRoOltbMCwicmdiKDAsMCwxMzApIl0sWy4xLCJyZ2IoMCwxODAsMTgwKSJdLFsuMiwicmdiKDQwLDIxMCw0MCkiXSxbLjQsInJnYigyMzAsMjMwLDUwKSJdLFsuNiwicmdiKDEyMCw3MCwyMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxFbGVjdHJpYzpbWzAsInJnYigwLDAsMCkiXSxbLjE1LCJyZ2IoMzAsMCwxMDApIl0sWy40LCJyZ2IoMTIwLDAsMTAwKSJdLFsuNiwicmdiKDE2MCw5MCwwKSJdLFsuOCwicmdiKDIzMCwyMDAsMCkiXSxbMSwicmdiKDI1NSwyNTAsMjIwKSJdXSxWaXJpZGlzOltbMCwiIzQ0MDE1NCJdLFsuMDYyNzQ1MDk4MDM5MjE1NjksIiM0ODE4NmEiXSxbLjEyNTQ5MDE5NjA3ODQzMTM3LCIjNDcyZDdiIl0sWy4xODgyMzUyOTQxMTc2NDcwNiwiIzQyNDA4NiJdLFsuMjUwOTgwMzkyMTU2ODYyNzQsIiMzYjUyOGIiXSxbLjMxMzcyNTQ5MDE5NjA3ODQsIiMzMzYzOGQiXSxbLjM3NjQ3MDU4ODIzNTI5NDEsIiMyYzcyOGUiXSxbLjQzOTIxNTY4NjI3NDUwOTgsIiMyNjgyOGUiXSxbLjUwMTk2MDc4NDMxMzcyNTUsIiMyMTkxOGMiXSxbLjU2NDcwNTg4MjM1Mjk0MTIsIiMxZmEwODgiXSxbLjYyNzQ1MDk4MDM5MjE1NjksIiMyOGFlODAiXSxbLjY5MDE5NjA3ODQzMTM3MjUsIiMzZmJjNzMiXSxbLjc1Mjk0MTE3NjQ3MDU4ODIsIiM1ZWM5NjIiXSxbLjgxNTY4NjI3NDUwOTgwMzksIiM4NGQ0NGIiXSxbLjg3ODQzMTM3MjU0OTAxOTYsIiNhZGRjMzAiXSxbLjk0MTE3NjQ3MDU4ODIzNTMsIiNkOGUyMTkiXSxbMSwiI2ZkZTcyNSJdXSxDaXZpZGlzOltbMCwicmdiKDAsMzIsNzYpIl0sWy4wNTg4MjQsInJnYigwLDQyLDEwMikiXSxbLjExNzY0NywicmdiKDAsNTIsMTEwKSJdLFsuMTc2NDcxLCJyZ2IoMzksNjMsMTA4KSJdLFsuMjM1Mjk0LCJyZ2IoNjAsNzQsMTA3KSJdLFsuMjk0MTE4LCJyZ2IoNzYsODUsMTA3KSJdLFsuMzUyOTQxLCJyZ2IoOTEsOTUsMTA5KSJdLFsuNDExNzY1LCJyZ2IoMTA0LDEwNiwxMTIpIl0sWy40NzA1ODgsInJnYigxMTcsMTE3LDExNykiXSxbLjUyOTQxMiwicmdiKDEzMSwxMjksMTIwKSJdLFsuNTg4MjM1LCJyZ2IoMTQ2LDE0MCwxMjApIl0sWy42NDcwNTksInJnYigxNjEsMTUyLDExOCkiXSxbLjcwNTg4MiwicmdiKDE3NiwxNjUsMTE0KSJdLFsuNzY0NzA2LCJyZ2IoMTkyLDE3NywxMDkpIl0sWy44MjM1MjksInJnYigyMDksMTkxLDEwMikiXSxbLjg4MjM1MywicmdiKDIyNSwyMDQsOTIpIl0sWy45NDExNzYsInJnYigyNDMsMjE5LDc5KSJdLFsxLCJyZ2IoMjU1LDIzMyw2OSkiXV19LGE9aS5SZEJ1O2Z1bmN0aW9uIG8odCl7dmFyIGU9MDtpZighQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8MilyZXR1cm4hMTtpZighdFswXXx8IXRbdC5sZW5ndGgtMV0pcmV0dXJuITE7aWYoMCE9K3RbMF1bMF18fDEhPSt0W3QubGVuZ3RoLTFdWzBdKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2lmKDIhPT1pLmxlbmd0aHx8K2lbMF08ZXx8IW4oaVsxXSkuaXNWYWxpZCgpKXJldHVybiExO2U9K2lbMF19cmV0dXJuITB9ZS5leHBvcnRzPXtzY2FsZXM6aSxkZWZhdWx0U2NhbGU6YSxnZXQ6ZnVuY3Rpb24odCxlKXtpZihlfHwoZT1hKSwhdClyZXR1cm4gZTtmdW5jdGlvbiByKCl7dHJ5e3Q9aVt0XXx8SlNPTi5wYXJzZSh0KX1jYXRjaChyKXt0PWV9fXJldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHIoKSwic3RyaW5nIj09dHlwZW9mIHQmJnIoKSksbyh0KT90OmV9LGlzVmFsaWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PWlbdF18fG8odCl9fX0se3Rpbnljb2xvcjI6NTIxfV0sNTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSh0LXIpLyhuLXIpLG89YStlLyhuLXIpLHM9KGErbykvMjtyZXR1cm4ibGVmdCI9PT1pfHwiYm90dG9tIj09PWk/YToiY2VudGVyIj09PWl8fCJtaWRkbGUiPT09aT9zOiJyaWdodCI9PT1pfHwidG9wIj09PWk/bzphPDIvMy1zP2E6bz40LzMtcz9vOnN9fSx7fV0sNTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9W1sic3ctcmVzaXplIiwicy1yZXNpemUiLCJzZS1yZXNpemUiXSxbInctcmVzaXplIiwibW92ZSIsImUtcmVzaXplIl0sWyJudy1yZXNpemUiLCJuLXJlc2l6ZSIsIm5lLXJlc2l6ZSJdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIHQ9ImxlZnQiPT09cj8wOiJjZW50ZXIiPT09cj8xOiJyaWdodCI9PT1yPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKnQpLDAsMiksZT0iYm90dG9tIj09PWE/MDoibWlkZGxlIj09PWE/MToidG9wIj09PWE/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqZSksMCwyKSxpW2VdW3RdfX0seyIuLi8uLi9saWIiOjcwMH1dLDU5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtb3VzZS1ldmVudC1vZmZzZXQiKSxpPXQoImhhcy1ob3ZlciIpLGE9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksYz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIiksdT1lLmV4cG9ydHM9e307dS5hbGlnbj10KCIuL2FsaWduIiksdS5nZXRDdXJzb3I9dCgiLi9jdXJzb3IiKTt2YXIgZj10KCIuL3VuaG92ZXIiKTtmdW5jdGlvbiBoKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImRyYWdjb3ZlciI7dmFyIGU9dC5zdHlsZTtyZXR1cm4gZS5wb3NpdGlvbj0iZml4ZWQiLGUubGVmdD0wLGUucmlnaHQ9MCxlLnRvcD0wLGUuYm90dG9tPTAsZS56SW5kZXg9OTk5OTk5OTk5LGUuYmFja2dyb3VuZD0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fWZ1bmN0aW9uIHAodCl7cmV0dXJuIG4odC5jaGFuZ2VkVG91Y2hlcz90LmNoYW5nZWRUb3VjaGVzWzBdOnQsZG9jdW1lbnQuYm9keSl9dS51bmhvdmVyPWYud3JhcHBlZCx1LnVuaG92ZXJSYXc9Zi5yYXcsdS5pbml0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixmLGQsZyx2LG0seT10LmdkLHg9MSxiPWMuREJMQ0xJQ0tERUxBWSxfPXQuZWxlbWVudDt5Ll9tb3VzZURvd25UaW1lfHwoeS5fbW91c2VEb3duVGltZT0wKSxfLnN0eWxlLnBvaW50ZXJFdmVudHM9ImFsbCIsXy5vbm1vdXNlZG93bj1rLGE/KF8uX29udG91Y2hzdGFydCYmXy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixfLl9vbnRvdWNoc3RhcnQpLF8uX29udG91Y2hzdGFydD1rLF8uYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsayx7cGFzc2l2ZTohMX0pKTpfLm9udG91Y2hzdGFydD1rO3ZhciB3PXQuY2xhbXBGbnx8ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmFicyh0KTxyJiYodD0wKSxNYXRoLmFicyhlKTxyJiYoZT0wKSxbdCxlXX07ZnVuY3Rpb24gayhhKXt5Ll9kcmFnZ2VkPSExLHkuX2RyYWdnaW5nPSEwO3ZhciBvPXAoYSk7ZT1vWzBdLHI9b1sxXSx2PWEudGFyZ2V0LGc9YSxtPTI9PT1hLmJ1dHRvbnN8fGEuY3RybEtleSwidW5kZWZpbmVkIj09dHlwZW9mIGEuY2xpZW50WCYmInVuZGVmaW5lZCI9PXR5cGVvZiBhLmNsaWVudFkmJihhLmNsaWVudFg9ZSxhLmNsaWVudFk9ciksKG49KG5ldyBEYXRlKS5nZXRUaW1lKCkpLXkuX21vdXNlRG93blRpbWU8Yj94Kz0xOih4PTEseS5fbW91c2VEb3duVGltZT1uKSx0LnByZXBGbiYmdC5wcmVwRm4oYSxlLHIpLGkmJiFtPyhkPWgoKSkuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKF8pLmN1cnNvcjppfHwoZD1kb2N1bWVudCxmPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY3Vyc29yLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoXykuY3Vyc29yKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixBKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsQSksITEhPT10LmRyYWdtb2RlJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsVCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixUKSl9ZnVuY3Rpb24gVChuKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIGk9cChuKSxhPXQubWluRHJhZ3x8bC5NSU5EUkFHLG89dyhpWzBdLWUsaVsxXS1yLGEpLHM9b1swXSxjPW9bMV07KHN8fGMpJiYoeS5fZHJhZ2dlZD0hMCx1LnVuaG92ZXIoeSkpLHkuX2RyYWdnZWQmJnQubW92ZUZuJiYhbSYmdC5tb3ZlRm4ocyxjKX1mdW5jdGlvbiBBKGUpe2lmKCExIT09dC5kcmFnbW9kZSYmKGUucHJldmVudERlZmF1bHQoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLFQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsVCkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLEEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixBKSxpP3MucmVtb3ZlRWxlbWVudChkKTpmJiYoZC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPWYsZj1udWxsKSx5Ll9kcmFnZ2luZyl7aWYoeS5fZHJhZ2dpbmc9ITEsKG5ldyBEYXRlKS5nZXRUaW1lKCkteS5fbW91c2VEb3duVGltZT5iJiYoeD1NYXRoLm1heCh4LTEsMSkpLHkuX2RyYWdnZWQpdC5kb25lRm4mJnQuZG9uZUZuKCk7ZWxzZSBpZih0LmNsaWNrRm4mJnQuY2xpY2tGbih4LGcpLCFtKXt2YXIgcjt0cnl7cj1uZXcgTW91c2VFdmVudCgiY2xpY2siLGUpfWNhdGNoKHQpe3ZhciBuPXAoZSk7KHI9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIikpLmluaXRNb3VzZUV2ZW50KCJjbGljayIsZS5idWJibGVzLGUuY2FuY2VsYWJsZSxlLnZpZXcsZS5kZXRhaWwsZS5zY3JlZW5YLGUuc2NyZWVuWSxuWzBdLG5bMV0sZS5jdHJsS2V5LGUuYWx0S2V5LGUuc2hpZnRLZXksZS5tZXRhS2V5LGUuYnV0dG9uLGUucmVsYXRlZFRhcmdldCl9di5kaXNwYXRjaEV2ZW50KHIpfSFmdW5jdGlvbih0KXt0Ll9kcmFnZ2luZz0hMSx0Ll9yZXBsb3RQZW5kaW5nJiZvLmNhbGwoInBsb3QiLHQpfSh5KSx5Ll9kcmFnZ2VkPSExfWVsc2UgeS5fZHJhZ2dlZD0hMX19LHUuY292ZXJTbGlwPWh9LHsiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6Njc2LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzU0LCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2FsaWduIjo1OTMsIi4vY3Vyc29yIjo1OTQsIi4vdW5ob3ZlciI6NTk2LCJoYXMtaG92ZXIiOjQwMiwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MDMsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDI4fV0sNTk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ldmVudHMiKSxpPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLGE9dCgiLi4vLi4vbGliL2dldF9ncmFwaF9kaXYiKSxvPXQoIi4uL2Z4L2NvbnN0YW50cyIpLHM9ZS5leHBvcnRzPXt9O3Mud3JhcHBlZD1mdW5jdGlvbih0LGUscil7KHQ9YSh0KSkuX2Z1bGxMYXlvdXQmJmkuY2xlYXIodC5fZnVsbExheW91dC5fdWlkK28uSE9WRVJJRCkscy5yYXcodCxlLHIpfSxzLnJhdz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT10Ll9ob3ZlcmRhdGE7ZXx8KGU9e30pLGUudGFyZ2V0JiYhMT09PW4udHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2JlZm9yZWhvdmVyIixlKXx8KHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoImxpbmUiKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgiY2lyY2xlIikucmVtb3ZlKCksdC5faG92ZXJkYXRhPXZvaWQgMCxlLnRhcmdldCYmaSYmdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse2V2ZW50OmUscG9pbnRzOml9KSl9fSx7Ii4uLy4uL2xpYi9ldmVudHMiOjY4OSwiLi4vLi4vbGliL2dldF9ncmFwaF9kaXYiOjY5NiwiLi4vLi4vbGliL3Rocm90dGxlIjo3MjUsIi4uL2Z4L2NvbnN0YW50cyI6NjEwfV0sNTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZGFzaD17dmFsVHlwZToic3RyaW5nIix2YWx1ZXM6WyJzb2xpZCIsImRvdCIsImRhc2giLCJsb25nZGFzaCIsImRhc2hkb3QiLCJsb25nZGFzaGRvdCJdLGRmbHQ6InNvbGlkIixlZGl0VHlwZToic3R5bGUifX0se31dLDU5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi9jb2xvciIpLGw9dCgiLi4vY29sb3JzY2FsZSIpLGM9dCgiLi4vLi4vbGliIiksdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksaD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLHA9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGQ9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSxnPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHY9ZS5leHBvcnRzPXt9O3YuZm9udD1mdW5jdGlvbih0LGUscixuKXtjLmlzUGxhaW5PYmplY3QoZSkmJihuPWUuY29sb3Iscj1lLnNpemUsZT1lLmZhbWlseSksZSYmdC5zdHlsZSgiZm9udC1mYW1pbHkiLGUpLHIrMSYmdC5zdHlsZSgiZm9udC1zaXplIixyKyJweCIpLG4mJnQuY2FsbChzLmZpbGwsbil9LHYuc2V0UG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigieCIsZSkuYXR0cigieSIscil9LHYuc2V0U2l6ZT1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJ3aWR0aCIsZSkuYXR0cigiaGVpZ2h0IixyKX0sdi5zZXRSZWN0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dC5jYWxsKHYuc2V0UG9zaXRpb24sZSxyKS5jYWxsKHYuc2V0U2l6ZSxuLGkpfSx2LnRyYW5zbGF0ZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXIuYzJwKHQueCksbz1uLmMycCh0LnkpO3JldHVybiEhKGkoYSkmJmkobykmJmUubm9kZSgpKSYmKCJ0ZXh0Ij09PWUubm9kZSgpLm5vZGVOYW1lP2UuYXR0cigieCIsYSkuYXR0cigieSIsbyk6ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithKyIsIitvKyIpIiksITApfSx2LnRyYW5zbGF0ZVBvaW50cz1mdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpO3YudHJhbnNsYXRlUG9pbnQodCxpLGUscil9KX0sdi5oaWRlT3V0c2lkZVJhbmdlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2UuYXR0cigiZGlzcGxheSIsci5pc1B0V2l0aGluUmFuZ2UodCxpKSYmbi5pc1B0V2l0aGluUmFuZ2UodCxhKT9udWxsOiJub25lIil9LHYuaGlkZU91dHNpZGVSYW5nZVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKGUuX2hhc0NsaXBPbkF4aXNGYWxzZSl7dmFyIHI9ZS54YXhpcyxpPWUueWF4aXM7dC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPWVbMF0udHJhY2Usbz1hLnhjYWxlbmRhcixzPWEueWNhbGVuZGFyLGw9ImJhciI9PT1hLnR5cGU/Ii5iYXJ0ZXh0Ijoid2F0ZXJmYWxsIj09PWEudHlwZT8iLmJhcnRleHQsLmxpbmUiOiIucG9pbnQsLnRleHRwb2ludCI7dC5zZWxlY3RBbGwobCkuZWFjaChmdW5jdGlvbih0KXt2LmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LG4uc2VsZWN0KHRoaXMpLHIsaSxvLHMpfSl9KX19LHYuY3Jpc3BSb3VuZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJmkoZSk/dC5fY29udGV4dC5zdGF0aWNQbG90P2U6ZTwxPzE6TWF0aC5yb3VuZChlKTpyfHwwfSx2LnNpbmdsZUxpbmVTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe2Uuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIGE9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPXJ8fGEud2lkdGh8fDAsbD1pfHxhLmRhc2h8fCIiO3Muc3Ryb2tlKGUsbnx8YS5jb2xvciksdi5kYXNoTGluZShlLGwsbyl9LHYubGluZUdyb3VwU3R5bGU9ZnVuY3Rpb24odCxlLHIsaSl7dC5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPSgoKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz1lfHxhLndpZHRofHwwLGw9aXx8YS5kYXNofHwiIjtuLnNlbGVjdCh0aGlzKS5jYWxsKHMuc3Ryb2tlLHJ8fGEuY29sb3IpLmNhbGwodi5kYXNoTGluZSxsLG8pfSl9LHYuZGFzaExpbmU9ZnVuY3Rpb24odCxlLHIpe3I9K3J8fDAsZT12LmRhc2hTdHlsZShlLHIpLHQuc3R5bGUoeyJzdHJva2UtZGFzaGFycmF5IjplLCJzdHJva2Utd2lkdGgiOnIrInB4In0pfSx2LmRhc2hTdHlsZT1mdW5jdGlvbih0LGUpe2U9K2V8fDE7dmFyIHI9TWF0aC5tYXgoZSwzKTtyZXR1cm4ic29saWQiPT09dD90PSIiOiJkb3QiPT09dD90PXIrInB4LCIrcisicHgiOiJkYXNoIj09PXQ/dD0zKnIrInB4LCIrMypyKyJweCI6ImxvbmdkYXNoIj09PXQ/dD01KnIrInB4LCIrNSpyKyJweCI6ImRhc2hkb3QiPT09dD90PTMqcisicHgsIityKyJweCwiK3IrInB4LCIrcisicHgiOiJsb25nZGFzaGRvdCI9PT10JiYodD01KnIrInB4LCIrMipyKyJweCwiK3IrInB4LCIrMipyKyJweCIpLHR9LHYuc2luZ2xlRmlsbFN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSgoKG4uc2VsZWN0KHQubm9kZSgpKS5kYXRhKClbMF18fFtdKVswXXx8e30pLnRyYWNlfHx7fSkuZmlsbGNvbG9yO2UmJnQuY2FsbChzLmZpbGwsZSl9LHYuZmlsbEdyb3VwU3R5bGU9ZnVuY3Rpb24odCl7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3RbMF0udHJhY2UmJmUuY2FsbChzLmZpbGwsdFswXS50cmFjZS5maWxsY29sb3IpfSl9O3ZhciBtPXQoIi4vc3ltYm9sX2RlZnMiKTt2LnN5bWJvbE5hbWVzPVtdLHYuc3ltYm9sRnVuY3M9W10sdi5zeW1ib2xOZWVkTGluZXM9e30sdi5zeW1ib2xOb0RvdD17fSx2LnN5bWJvbE5vRmlsbD17fSx2LnN5bWJvbExpc3Q9W10sT2JqZWN0LmtleXMobSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1tW3RdO3Yuc3ltYm9sTGlzdD12LnN5bWJvbExpc3QuY29uY2F0KFtlLm4sdCxlLm4rMTAwLHQrIi1vcGVuIl0pLHYuc3ltYm9sTmFtZXNbZS5uXT10LHYuc3ltYm9sRnVuY3NbZS5uXT1lLmYsZS5uZWVkTGluZSYmKHYuc3ltYm9sTmVlZExpbmVzW2Uubl09ITApLGUubm9Eb3Q/di5zeW1ib2xOb0RvdFtlLm5dPSEwOnYuc3ltYm9sTGlzdD12LnN5bWJvbExpc3QuY29uY2F0KFtlLm4rMjAwLHQrIi1kb3QiLGUubiszMDAsdCsiLW9wZW4tZG90Il0pLGUubm9GaWxsJiYodi5zeW1ib2xOb0ZpbGxbZS5uXT0hMCl9KTt2YXIgeT12LnN5bWJvbE5hbWVzLmxlbmd0aCx4PSJNMCwwLjVMMC41LDBMMCwtMC41TC0wLjUsMFoiO2Z1bmN0aW9uIGIodCxlKXt2YXIgcj10JTEwMDtyZXR1cm4gdi5zeW1ib2xGdW5jc1tyXShlKSsodD49MjAwP3g6IiIpfXYuc3ltYm9sTnVtYmVyPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9MDt0LmluZGV4T2YoIi1vcGVuIik+MCYmKGU9MTAwLHQ9dC5yZXBsYWNlKCItb3BlbiIsIiIpKSx0LmluZGV4T2YoIi1kb3QiKT4wJiYoZSs9MjAwLHQ9dC5yZXBsYWNlKCItZG90IiwiIikpLCh0PXYuc3ltYm9sTmFtZXMuaW5kZXhPZih0KSk+PTAmJih0Kz1lKX1yZXR1cm4gdCUxMDA+PXl8fHQ+PTQwMD8wOk1hdGguZmxvb3IoTWF0aC5tYXgodCwwKSl9O3ZhciBfPXt4MToxLHgyOjAseTE6MCx5MjowfSx3PXt4MTowLHgyOjAseTE6MSx5MjowfSxrPW4uZm9ybWF0KCJ+LjFmIiksVD17cmFkaWFsOntub2RlOiJyYWRpYWxHcmFkaWVudCJ9LHJhZGlhbHJldmVyc2VkOntub2RlOiJyYWRpYWxHcmFkaWVudCIscmV2ZXJzZWQ6ITB9LGhvcml6b250YWw6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczpffSxob3Jpem9udGFscmV2ZXJzZWQ6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczpfLHJldmVyc2VkOiEwfSx2ZXJ0aWNhbDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOnd9LHZlcnRpY2FscmV2ZXJzZWQ6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczp3LHJldmVyc2VkOiEwfX07di5ncmFkaWVudD1mdW5jdGlvbih0LGUscixpLG8sbCl7Zm9yKHZhciB1PW8ubGVuZ3RoLGY9VFtpXSxoPW5ldyBBcnJheSh1KSxwPTA7cDx1O3ArKylmLnJldmVyc2VkP2hbdS0xLXBdPVtrKDEwMCooMS1vW3BdWzBdKSksb1twXVsxXV06aFtwXT1baygxMDAqb1twXVswXSksb1twXVsxXV07dmFyIGQ9ImciK2UuX2Z1bGxMYXlvdXQuX3VpZCsiLSIrcixnPWUuX2Z1bGxMYXlvdXQuX2RlZnMuc2VsZWN0KCIuZ3JhZGllbnRzIikuc2VsZWN0QWxsKCIjIitkKS5kYXRhKFtpK2guam9pbigiOyIpXSxjLmlkZW50aXR5KTtnLmV4aXQoKS5yZW1vdmUoKSxnLmVudGVyKCkuYXBwZW5kKGYubm9kZSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2YuYXR0cnMmJnQuYXR0cihmLmF0dHJzKSx0LmF0dHIoImlkIixkKTt2YXIgZT10LnNlbGVjdEFsbCgic3RvcCIpLmRhdGEoaCk7ZS5leGl0KCkucmVtb3ZlKCksZS5lbnRlcigpLmFwcGVuZCgic3RvcCIpLGUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMV0pO24uc2VsZWN0KHRoaXMpLmF0dHIoe29mZnNldDp0WzBdKyIlIiwic3RvcC1jb2xvciI6cy50aW55UkdCKGUpLCJzdG9wLW9wYWNpdHkiOmUuZ2V0QWxwaGEoKX0pfSl9KSx0LnN0eWxlKGwsInVybCgjIitkKyIpIikuc3R5bGUobCsiLW9wYWNpdHkiLG51bGwpfSx2LmluaXRHcmFkaWVudHM9ZnVuY3Rpb24odCl7Yy5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5fZGVmcywiZyIsImdyYWRpZW50cyIpLnNlbGVjdEFsbCgibGluZWFyR3JhZGllbnQscmFkaWFsR3JhZGllbnQiKS5yZW1vdmUoKX0sdi5wb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGk9di5tYWtlUG9pbnRTdHlsZUZucyhlKTt0LmVhY2goZnVuY3Rpb24odCl7di5zaW5nbGVQb2ludFN0eWxlKHQsbi5zZWxlY3QodGhpcyksZSxpLHIpfSl9fSx2LnNpbmdsZVBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1yLm1hcmtlcixvPWEubGluZTtpZihlLnN0eWxlKCJvcGFjaXR5IixuLnNlbGVjdGVkT3BhY2l0eUZuP24uc2VsZWN0ZWRPcGFjaXR5Rm4odCk6dm9pZCAwPT09dC5tbz9hLm9wYWNpdHk6dC5tbyksbi5tczJtcmMpe3ZhciBsO2w9InZhcmlvdXMiPT09dC5tc3x8InZhcmlvdXMiPT09YS5zaXplPzM6bi5tczJtcmModC5tcyksdC5tcmM9bCxuLnNlbGVjdGVkU2l6ZUZuJiYobD10Lm1yYz1uLnNlbGVjdGVkU2l6ZUZuKHQpKTt2YXIgdT12LnN5bWJvbE51bWJlcih0Lm14fHxhLnN5bWJvbCl8fDA7dC5vbT11JTIwMD49MTAwLGUuYXR0cigiZCIsYih1LGwpKX12YXIgZixoLHAsZD0hMTtpZih0LnNvKXA9by5vdXRsaWVyd2lkdGgsaD1vLm91dGxpZXJjb2xvcixmPWEub3V0bGllcmNvbG9yO2Vsc2V7dmFyIGc9KG98fHt9KS53aWR0aDtwPSh0Lm1sdysxfHxnKzF8fCh0LnRyYWNlPyh0LnRyYWNlLm1hcmtlci5saW5lfHx7fSkud2lkdGg6MCkrMSktMXx8MCxoPSJtbGMiaW4gdD90Lm1sY2M9bi5saW5lU2NhbGUodC5tbGMpOmMuaXNBcnJheU9yVHlwZWRBcnJheShvLmNvbG9yKT9zLmRlZmF1bHRMaW5lOm8uY29sb3IsYy5pc0FycmF5T3JUeXBlZEFycmF5KGEuY29sb3IpJiYoZj1zLmRlZmF1bHRMaW5lLGQ9ITApLGY9Im1jImluIHQ/dC5tY2M9bi5tYXJrZXJTY2FsZSh0Lm1jKTphLmNvbG9yfHwicmdiYSgwLDAsMCwwKSIsbi5zZWxlY3RlZENvbG9yRm4mJihmPW4uc2VsZWN0ZWRDb2xvckZuKHQpKX1pZih0Lm9tKWUuY2FsbChzLnN0cm9rZSxmKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6KHB8fDEpKyJweCIsZmlsbDoibm9uZSJ9KTtlbHNle2Uuc3R5bGUoInN0cm9rZS13aWR0aCIscCsicHgiKTt2YXIgbT1hLmdyYWRpZW50LHk9dC5tZ3Q7aWYoeT9kPSEwOnk9bSYmbS50eXBlLEFycmF5LmlzQXJyYXkoeSkmJih5PXlbMF0sVFt5XXx8KHk9MCkpLHkmJiJub25lIiE9PXkpe3ZhciB4PXQubWdjO3g/ZD0hMDp4PW0uY29sb3I7dmFyIF89ci51aWQ7ZCYmKF8rPSItIit0LmkpLHYuZ3JhZGllbnQoZSxpLF8seSxbWzAseF0sWzEsZl1dLCJmaWxsIil9ZWxzZSBzLmZpbGwoZSxmKTtwJiZzLnN0cm9rZShlLGgpfX0sdi5tYWtlUG9pbnRTdHlsZUZucz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQubWFya2VyO3JldHVybiBlLm1hcmtlclNjYWxlPXYudHJ5Q29sb3JzY2FsZShyLCIiKSxlLmxpbmVTY2FsZT12LnRyeUNvbG9yc2NhbGUociwibGluZSIpLG8udHJhY2VJcyh0LCJzeW1ib2xzIikmJihlLm1zMm1yYz1kLmlzQnViYmxlKHQpP2codCk6ZnVuY3Rpb24oKXtyZXR1cm4oci5zaXplfHw2KS8yfSksdC5zZWxlY3RlZHBvaW50cyYmYy5leHRlbmRGbGF0KGUsdi5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHQpKSxlfSx2Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10Lm1hcmtlcnx8e30sYT1yLm1hcmtlcnx8e30scz1uLm1hcmtlcnx8e30sbD1pLm9wYWNpdHksdT1hLm9wYWNpdHksZj1zLm9wYWNpdHksaD12b2lkIDAhPT11LGQ9dm9pZCAwIT09ZjsoYy5pc0FycmF5T3JUeXBlZEFycmF5KGwpfHxofHxkKSYmKGUuc2VsZWN0ZWRPcGFjaXR5Rm49ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwPT09dC5tbz9pLm9wYWNpdHk6dC5tbztyZXR1cm4gdC5zZWxlY3RlZD9oP3U6ZTpkP2Y6cCplfSk7dmFyIGc9aS5jb2xvcix2PWEuY29sb3IsbT1zLmNvbG9yOyh2fHxtKSYmKGUuc2VsZWN0ZWRDb2xvckZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWNjfHxnO3JldHVybiB0LnNlbGVjdGVkP3Z8fGU6bXx8ZX0pO3ZhciB5PWkuc2l6ZSx4PWEuc2l6ZSxiPXMuc2l6ZSxfPXZvaWQgMCE9PXgsdz12b2lkIDAhPT1iO3JldHVybiBvLnRyYWNlSXModCwic3ltYm9scyIpJiYoX3x8dykmJihlLnNlbGVjdGVkU2l6ZUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubXJjfHx5LzI7cmV0dXJuIHQuc2VsZWN0ZWQ/Xz94LzI6ZTp3P2IvMjplfSksZX0sdi5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10LnRleHRmb250fHx7fSxhPXIudGV4dGZvbnR8fHt9LG89bi50ZXh0Zm9udHx8e30sbD1pLmNvbG9yLGM9YS5jb2xvcix1PW8uY29sb3I7cmV0dXJuIGUuc2VsZWN0ZWRUZXh0Q29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10LnRjfHxsO3JldHVybiB0LnNlbGVjdGVkP2N8fGU6dXx8KGM/ZTpzLmFkZE9wYWNpdHkoZSxwKSl9LGV9LHYuc2VsZWN0ZWRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXYubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyhlKSxpPWUubWFya2VyfHx7fSxhPVtdO3Iuc2VsZWN0ZWRPcGFjaXR5Rm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3Quc3R5bGUoIm9wYWNpdHkiLHIuc2VsZWN0ZWRPcGFjaXR5Rm4oZSkpfSksci5zZWxlY3RlZENvbG9yRm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3MuZmlsbCh0LHIuc2VsZWN0ZWRDb2xvckZuKGUpKX0pLHIuc2VsZWN0ZWRTaXplRm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3ZhciBuPWUubXh8fGkuc3ltYm9sfHwwLGE9ci5zZWxlY3RlZFNpemVGbihlKTt0LmF0dHIoImQiLGIodi5zeW1ib2xOdW1iZXIobiksYSkpLGUubXJjMj1hfSksYS5sZW5ndGgmJnQuZWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGU9bi5zZWxlY3QodGhpcykscj0wO3I8YS5sZW5ndGg7cisrKWFbcl0oZSx0KX0pfX0sdi50cnlDb2xvcnNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9jLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk6dDtpZihyKXt2YXIgbj1yLmNvbG9yc2NhbGUsaT1yLmNvbG9yO2lmKG4mJmMuaXNBcnJheU9yVHlwZWRBcnJheShpKSlyZXR1cm4gbC5tYWtlQ29sb3JTY2FsZUZ1bmMobC5leHRyYWN0U2NhbGUocix7Y0xldHRlcjoiYyJ9KSl9cmV0dXJuIGMuaWRlbnRpdHl9O3ZhciBBPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIE0odCxlLHIsaSl7dmFyIGE9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSksbz0tMSE9PWUuaW5kZXhPZigidG9wIik/InRvcCI6LTEhPT1lLmluZGV4T2YoImJvdHRvbSIpPyJib3R0b20iOiJtaWRkbGUiLHM9LTEhPT1lLmluZGV4T2YoImxlZnQiKT8iZW5kIjotMSE9PWUuaW5kZXhPZigicmlnaHQiKT8ic3RhcnQiOiJtaWRkbGUiLGw9aT9pLy44KzE6MCxjPSh1LmxpbmVDb3VudCh0KS0xKSpoKzEsZj1BW3NdKmwscD0uNzUqcitBW29dKmwrKEFbb10tMSkqYypyLzI7dC5hdHRyKCJ0ZXh0LWFuY2hvciIscyksYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitmKyIsIitwKyIpIil9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQudHN8fGUudGV4dGZvbnQuc2l6ZTtyZXR1cm4gaShyKSYmcj4wP3I6MH12LnRleHRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGk7aWYoZS5zZWxlY3RlZHBvaW50cyl7dmFyIGE9di5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7aT1hLnNlbGVjdGVkVGV4dENvbG9yRm59dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLG89Yy5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7aWYob3x8MD09PW8pe3ZhciBzPXQudHB8fGUudGV4dHBvc2l0aW9uLGw9Uyh0LGUpLGY9aT9pKHQpOnQudGN8fGUudGV4dGZvbnQuY29sb3I7YS5jYWxsKHYuZm9udCx0LnRmfHxlLnRleHRmb250LmZhbWlseSxsLGYpLnRleHQobykuY2FsbCh1LmNvbnZlcnRUb1RzcGFucyxyKS5jYWxsKE0scyxsLHQubXJjKX1lbHNlIGEucmVtb3ZlKCl9KX19LHYuc2VsZWN0ZWRUZXh0U3R5bGU9ZnVuY3Rpb24odCxlKXtpZih0LnNpemUoKSYmZS5zZWxlY3RlZHBvaW50cyl7dmFyIHI9di5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9ci5zZWxlY3RlZFRleHRDb2xvckZuKHQpLG89dC50cHx8ZS50ZXh0cG9zaXRpb24sbD1TKHQsZSk7cy5maWxsKGksYSksTShpLG8sbCx0Lm1yYzJ8fHQubXJjKX0pfX07dmFyIEU9LjU7ZnVuY3Rpb24gQyh0LGUscixpKXt2YXIgYT10WzBdLWVbMF0sbz10WzFdLWVbMV0scz1yWzBdLWVbMF0sbD1yWzFdLWVbMV0sYz1NYXRoLnBvdyhhKmErbypvLEUvMiksdT1NYXRoLnBvdyhzKnMrbCpsLEUvMiksZj0odSp1KmEtYypjKnMpKmksaD0odSp1Km8tYypjKmwpKmkscD0zKnUqKGMrdSksZD0zKmMqKGMrdSk7cmV0dXJuW1tuLnJvdW5kKGVbMF0rKHAmJmYvcCksMiksbi5yb3VuZChlWzFdKyhwJiZoL3ApLDIpXSxbbi5yb3VuZChlWzBdLShkJiZmL2QpLDIpLG4ucm91bmQoZVsxXS0oZCYmaC9kKSwyKV1dfXYuc21vb3Rob3Blbj1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIk0iK3Quam9pbigiTCIpO3ZhciByLG49Ik0iK3RbMF0saT1bXTtmb3Iocj0xO3I8dC5sZW5ndGgtMTtyKyspaS5wdXNoKEModFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3Iobis9IlEiK2lbMF1bMF0rIiAiK3RbMV0scj0yO3I8dC5sZW5ndGgtMTtyKyspbis9IkMiK2lbci0yXVsxXSsiICIraVtyLTFdWzBdKyIgIit0W3JdO3JldHVybiBuKz0iUSIraVt0Lmxlbmd0aC0zXVsxXSsiICIrdFt0Lmxlbmd0aC0xXX0sdi5zbW9vdGhjbG9zZWQ9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVybiJNIit0LmpvaW4oIkwiKSsiWiI7dmFyIHIsbj0iTSIrdFswXSxpPXQubGVuZ3RoLTEsYT1bQyh0W2ldLHRbMF0sdFsxXSxlKV07Zm9yKHI9MTtyPGk7cisrKWEucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKGEucHVzaChDKHRbaS0xXSx0W2ldLHRbMF0sZSkpLHI9MTtyPD1pO3IrKyluKz0iQyIrYVtyLTFdWzFdKyIgIithW3JdWzBdKyIgIit0W3JdO3JldHVybiBuKz0iQyIrYVtpXVsxXSsiICIrYVswXVswXSsiICIrdFswXSsiWiJ9O3ZhciBMPXtodjpmdW5jdGlvbih0LGUpe3JldHVybiJIIituLnJvdW5kKGVbMF0sMikrIlYiK24ucm91bmQoZVsxXSwyKX0sdmg6ZnVuY3Rpb24odCxlKXtyZXR1cm4iViIrbi5yb3VuZChlWzFdLDIpKyJIIituLnJvdW5kKGVbMF0sMil9LGh2aDpmdW5jdGlvbih0LGUpe3JldHVybiJIIituLnJvdW5kKCh0WzBdK2VbMF0pLzIsMikrIlYiK24ucm91bmQoZVsxXSwyKSsiSCIrbi5yb3VuZChlWzBdLDIpfSx2aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm4iViIrbi5yb3VuZCgodFsxXStlWzFdKS8yLDIpKyJIIituLnJvdW5kKGVbMF0sMikrIlYiK24ucm91bmQoZVsxXSwyKX19LHo9ZnVuY3Rpb24odCxlKXtyZXR1cm4iTCIrbi5yb3VuZChlWzBdLDIpKyIsIituLnJvdW5kKGVbMV0sMil9O3Yuc3RlcHM9ZnVuY3Rpb24odCl7dmFyIGU9TFt0XXx8ejtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciByPSJNIituLnJvdW5kKHRbMF1bMF0sMikrIiwiK24ucm91bmQodFswXVsxXSwyKSxpPTE7aTx0Lmxlbmd0aDtpKyspcis9ZSh0W2ktMV0sdFtpXSk7cmV0dXJuIHJ9fSx2Lm1ha2VUZXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1jLmVuc3VyZVNpbmdsZUJ5SWQobi5zZWxlY3QoImJvZHkiKSwic3ZnIiwianMtcGxvdGx5LXRlc3RlciIsZnVuY3Rpb24odCl7dC5hdHRyKGYuc3ZnQXR0cnMpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwMHB4Iix0b3A6Ii0xMDAwMHB4Iix3aWR0aDoiOTAwMHB4IixoZWlnaHQ6IjkwMDBweCIsInotaW5kZXgiOiIxIn0pfSksZT1jLmVuc3VyZVNpbmdsZSh0LCJwYXRoIiwianMtcmVmZXJlbmNlLXBvaW50IixmdW5jdGlvbih0KXt0LmF0dHIoImQiLCJNMCwwSDFWMUgwWiIpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjowLGZpbGw6ImJsYWNrIn0pfSk7di50ZXN0ZXI9dCx2LnRlc3RyZWY9ZX0sdi5zYXZlZEJCb3hlcz17fTt2YXIgTz0wO2Z1bmN0aW9uIEkodCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtdW5mb3JtYXR0ZWQiKTtpZihudWxsIT09ZSlyZXR1cm4gZSt0LmdldEF0dHJpYnV0ZSgiZGF0YS1tYXRoIikrdC5nZXRBdHRyaWJ1dGUoInRleHQtYW5jaG9yIikrdC5nZXRBdHRyaWJ1dGUoInN0eWxlIil9di5iQm94PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG87aWYocnx8KHI9SSh0KSkscil7aWYoaT12LnNhdmVkQkJveGVzW3JdKXJldHVybiBjLmV4dGVuZEZsYXQoe30saSl9ZWxzZSBpZigxPT09dC5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIHM9dC5jaGlsZE5vZGVzWzBdO2lmKHI9SShzKSl7dmFyIGw9K3MuZ2V0QXR0cmlidXRlKCJ4Iil8fDAsZj0rcy5nZXRBdHRyaWJ1dGUoInkiKXx8MCxoPXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKTtpZighaCl7dmFyIHA9di5iQm94KHMsITEscik7cmV0dXJuIGwmJihwLmxlZnQrPWwscC5yaWdodCs9bCksZiYmKHAudG9wKz1mLHAuYm90dG9tKz1mKSxwfWlmKHIrPSJ+IitsKyJ+IitmKyJ+IitoLGk9di5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gYy5leHRlbmRGbGF0KHt9LGkpfX1lP2E9dDoobz12LnRlc3Rlci5ub2RlKCksYT10LmNsb25lTm9kZSghMCksby5hcHBlbmRDaGlsZChhKSksbi5zZWxlY3QoYSkuYXR0cigidHJhbnNmb3JtIixudWxsKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsMCk7dmFyIGQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPXYudGVzdHJlZi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZXx8by5yZW1vdmVDaGlsZChhKTt2YXIgbT17aGVpZ2h0OmQuaGVpZ2h0LHdpZHRoOmQud2lkdGgsbGVmdDpkLmxlZnQtZy5sZWZ0LHRvcDpkLnRvcC1nLnRvcCxyaWdodDpkLnJpZ2h0LWcubGVmdCxib3R0b206ZC5ib3R0b20tZy50b3B9O3JldHVybiBPPj0xZTQmJih2LnNhdmVkQkJveGVzPXt9LE89MCksciYmKHYuc2F2ZWRCQm94ZXNbcl09bSksTysrLGMuZXh0ZW5kRmxhdCh7fSxtKX0sdi5zZXRDbGlwVXJsPWZ1bmN0aW9uKHQsZSxyKXtpZihlKXt2YXIgbj1yLl9jb250ZXh0LGk9bi5fZXhwb3J0ZWRQbG90PyIiOm4uX2Jhc2VVcmx8fCIiO3QuYXR0cigiY2xpcC1wYXRoIiwidXJsKCIraSsiIyIrZSsiKSIpfWVsc2UgdC5hdHRyKCJjbGlwLXBhdGgiLG51bGwpfSx2LmdldFRyYW5zbGF0ZT1mdW5jdGlvbih0KXt2YXIgZT0odFt0LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiXSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKC8uKlxidHJhbnNsYXRlXCgoLT9cZCpcLj9cZCopW14tXGRdKigtP1xkKlwuP1xkKilbXlxkXS4qLyxmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkuc3BsaXQoIiAiKTtyZXR1cm57eDorZVswXXx8MCx5OitlWzFdfHwwfX0sdi5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSIsaT10LmF0dHI/ImF0dHIiOiJzZXRBdHRyaWJ1dGUiLGE9dFtuXSgidHJhbnNmb3JtIil8fCIiO3JldHVybiBlPWV8fDAscj1yfHwwLGE9YS5yZXBsYWNlKC8oXGJ0cmFuc2xhdGVcKC4qP1wpOz8pLywiIikudHJpbSgpLGE9KGErPSIgdHJhbnNsYXRlKCIrZSsiLCAiK3IrIikiKS50cmltKCksdFtpXSgidHJhbnNmb3JtIixhKSxhfSx2LmdldFNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSJdKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoLy4qXGJzY2FsZVwoKFxkKlwuP1xkKilbXlxkXSooXGQqXC4/XGQqKVteXGRdLiovLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKCIgIil9KS5zcGxpdCgiICIpO3JldHVybnt4OitlWzBdfHwxLHk6K2VbMV18fDF9fSx2LnNldFNjYWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGk9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixhPXRbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwxLHI9cnx8MSxhPWEucmVwbGFjZSgvKFxic2NhbGVcKC4qP1wpOz8pLywiIikudHJpbSgpLGE9KGErPSIgc2NhbGUoIitlKyIsICIrcisiKSIpLnRyaW0oKSx0W2ldKCJ0cmFuc2Zvcm0iLGEpLGF9O3ZhciBEPS9ccypzYy4qLzt2LnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7aWYoZT1lfHwxLHI9cnx8MSx0KXt2YXIgbj0xPT09ZSYmMT09PXI/IiI6IiBzY2FsZSgiK2UrIiwiK3IrIikiO3QuZWFjaChmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKEQsIiIpO3Q9KHQrPW4pLnRyaW0oKSx0aGlzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KX0pfX07dmFyIFA9L3RyYW5zbGF0ZVwoW14pXSpcKVxzKiQvO3Yuc2V0VGV4dFBvaW50c1NjYWxlPWZ1bmN0aW9uKHQsZSxyKXt0JiZ0LmVhY2goZnVuY3Rpb24oKXt2YXIgdCxpPW4uc2VsZWN0KHRoaXMpLGE9aS5zZWxlY3QoInRleHQiKTtpZihhLm5vZGUoKSl7dmFyIG89cGFyc2VGbG9hdChhLmF0dHIoIngiKXx8MCkscz1wYXJzZUZsb2F0KGEuYXR0cigieSIpfHwwKSxsPShpLmF0dHIoInRyYW5zZm9ybSIpfHwiIikubWF0Y2goUCk7dD0xPT09ZSYmMT09PXI/W106WyJ0cmFuc2xhdGUoIitvKyIsIitzKyIpIiwic2NhbGUoIitlKyIsIityKyIpIiwidHJhbnNsYXRlKCIrLW8rIiwiKy1zKyIpIl0sbCYmdC5wdXNoKGwpLGkuYXR0cigidHJhbnNmb3JtIix0LmpvaW4oIiAiKSl9fSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY3MiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6Njc2LCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6Njc4LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTA2OCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL2NvbG9yIjo1NzcsIi4uL2NvbG9yc2NhbGUiOjU4OSwiLi9zeW1ib2xfZGVmcyI6NTk5LGQzOjE1NCwiZmFzdC1pc251bWVyaWMiOjIyMSx0aW55Y29sb3IyOjUyMX1dLDU5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpO2UuZXhwb3J0cz17Y2lyY2xlOntuOjAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn19LHNxdWFyZTp7bjoxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifX0sZGlhbW9uZDp7bjoyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIloifX0sY3Jvc3M6e246MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjQqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK3IrIiwiK2UrIkgiK2UrIlYiK3IrIkgtIitlKyJWIitlKyJILSIrcisiVi0iK2UrIkgtIitlKyJWLSIrcisiSCIrZSsiVi0iK2UrIkgiK3IrIloifX0seDp7bjo0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOCp0L01hdGguc3FydCgyKSwyKSxyPSJsIitlKyIsIitlLGk9ImwiK2UrIiwtIitlLGE9ImwtIitlKyIsLSIrZSxvPSJsLSIrZSsiLCIrZTtyZXR1cm4iTTAsIitlK3IraSthK2krYStvK2ErbytyK28rcisiWiJ9fSwidHJpYW5nbGUtdXAiOntuOjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIitlKyIsIituLnJvdW5kKHQvMiwyKSsiSCIrZSsiTDAsLSIrbi5yb3VuZCh0LDIpKyJaIn19LCJ0cmlhbmdsZS1kb3duIjp7bjo2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrZSsiLC0iK24ucm91bmQodC8yLDIpKyJIIitlKyJMMCwiK24ucm91bmQodCwyKSsiWiJ9fSwidHJpYW5nbGUtbGVmdCI6e246NyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTSIrbi5yb3VuZCh0LzIsMikrIiwtIitlKyJWIitlKyJMLSIrbi5yb3VuZCh0LDIpKyIsMFoifX0sInRyaWFuZ2xlLXJpZ2h0Ijp7bjo4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrbi5yb3VuZCh0LzIsMikrIiwtIitlKyJWIitlKyJMIituLnJvdW5kKHQsMikrIiwwWiJ9fSwidHJpYW5nbGUtbmUiOntuOjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNLSIrcisiLC0iK2UrIkgiK2UrIlYiK3IrIloifX0sInRyaWFuZ2xlLXNlIjp7bjoxMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK2UrIiwtIityKyJWIitlKyJILSIrcisiWiJ9fSwidHJpYW5nbGUtc3ciOntuOjExLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrcisiLCIrZSsiSC0iK2UrIlYtIityKyJaIn19LCJ0cmlhbmdsZS1udyI6e246MTIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNLSIrZSsiLCIrcisiVi0iK2UrIkgiK3IrIloifX0scGVudGFnb246e246MTMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45NTEqdCwyKSxyPW4ucm91bmQoLjU4OCp0LDIpLGk9bi5yb3VuZCgtdCwyKSxhPW4ucm91bmQoLS4zMDkqdCwyKTtyZXR1cm4iTSIrZSsiLCIrYSsiTCIrcisiLCIrbi5yb3VuZCguODA5KnQsMikrIkgtIityKyJMLSIrZSsiLCIrYSsiTDAsIitpKyJaIn19LGhleGFnb246e246MTQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTSIraSsiLC0iK3IrIlYiK3IrIkwwLCIrZSsiTC0iK2krIiwiK3IrIlYtIityKyJMMCwtIitlKyJaIn19LGhleGFnb24yOntuOjE1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0tIityKyIsIitpKyJIIityKyJMIitlKyIsMEwiK3IrIiwtIitpKyJILSIrcisiTC0iK2UrIiwwWiJ9fSxvY3RhZ29uOntuOjE2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTI0KnQsMikscj1uLnJvdW5kKC4zODMqdCwyKTtyZXR1cm4iTS0iK3IrIiwtIitlKyJIIityKyJMIitlKyIsLSIrcisiViIrcisiTCIrcisiLCIrZSsiSC0iK3IrIkwtIitlKyIsIityKyJWLSIrcisiWiJ9fSxzdGFyOntuOjE3LGY6ZnVuY3Rpb24odCl7dmFyIGU9MS40KnQscj1uLnJvdW5kKC4yMjUqZSwyKSxpPW4ucm91bmQoLjk1MSplLDIpLGE9bi5yb3VuZCguMzYzKmUsMiksbz1uLnJvdW5kKC41ODgqZSwyKSxzPW4ucm91bmQoLWUsMiksbD1uLnJvdW5kKC0uMzA5KmUsMiksYz1uLnJvdW5kKC4xMTgqZSwyKSx1PW4ucm91bmQoLjgwOSplLDIpO3JldHVybiJNIityKyIsIitsKyJIIitpKyJMIithKyIsIitjKyJMIitvKyIsIit1KyJMMCwiK24ucm91bmQoLjM4MiplLDIpKyJMLSIrbysiLCIrdSsiTC0iK2ErIiwiK2MrIkwtIitpKyIsIitsKyJILSIrcisiTDAsIitzKyJaIn19LGhleGFncmFtOntuOjE4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNjYqdCwyKSxyPW4ucm91bmQoLjM4KnQsMiksaT1uLnJvdW5kKC43Nip0LDIpO3JldHVybiJNLSIraSsiLDBsLSIrcisiLC0iK2UrImgiK2krImwiK3IrIiwtIitlKyJsIityKyIsIitlKyJoIitpKyJsLSIrcisiLCIrZSsibCIrcisiLCIrZSsiaC0iK2krImwtIityKyIsIitlKyJsLSIrcisiLC0iK2UrImgtIitpKyJaIn19LCJzdGFyLXRyaWFuZ2xlLXVwIjp7bjoxOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz0iQSAiK2ErIiwiK2ErIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLCIrcitvK2UrIiwiK3IrbysiMCwtIitpK28rIi0iK2UrIiwiK3IrIloifX0sInN0YXItdHJpYW5nbGUtZG93biI6e246MjAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGk9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoNCp0LDIpLG89IkEgIithKyIsIithKyIgMCAwIDEgIjtyZXR1cm4iTSIrZSsiLC0iK3IrbysiLSIrZSsiLC0iK3IrbysiMCwiK2krbytlKyIsLSIrcisiWiJ9fSwic3Rhci1zcXVhcmUiOntuOjIxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjEqdCwyKSxyPW4ucm91bmQoMip0LDIpLGk9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwtIitlK2krIi0iK2UrIiwiK2UraStlKyIsIitlK2krZSsiLC0iK2UraSsiLSIrZSsiLC0iK2UrIloifX0sInN0YXItZGlhbW9uZCI6e246MjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCgxLjkqdCwyKSxpPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsMCIraSsiMCwiK2UraStlKyIsMCIraSsiMCwtIitlK2krIi0iK2UrIiwwWiJ9fSwiZGlhbW9uZC10YWxsIjp7bjoyMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjcqdCwyKSxyPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrcisiTCIrZSsiLDBMMCwtIityKyJMLSIrZSsiLDBaIn19LCJkaWFtb25kLXdpZGUiOntuOjI0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoLjcqdCwyKTtyZXR1cm4iTTAsIityKyJMIitlKyIsMEwwLC0iK3IrIkwtIitlKyIsMFoifX0saG91cmdsYXNzOntuOjI1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJILSIrZSsiTCIrZSsiLC0iK2UrIkgtIitlKyJaIn0sbm9Eb3Q6ITB9LGJvd3RpZTp7bjoyNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiVi0iK2UrIkwtIitlKyIsIitlKyJWLSIrZSsiWiJ9LG5vRG90OiEwfSwiY2lyY2xlLWNyb3NzIjp7bjoyNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sImNpcmNsZS14Ijp7bjoyOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC9NYXRoLnNxcnQoMiksMik7cmV0dXJuIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityKyJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLWNyb3NzIjp7bjoyOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUteCI6e246MzAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZSsiTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlKyJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQtY3Jvc3MiOntuOjMxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIlpNMCwtIitlKyJWIitlKyJNLSIrZSsiLDBIIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQteCI6e246MzIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpLHI9bi5yb3VuZCguNjUqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIlpNLSIrcisiLC0iK3IrIkwiK3IrIiwiK3IrIk0tIityKyIsIityKyJMIityKyIsLSIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjcm9zcy10aGluIjp7bjozMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sIngtdGhpbiI6e246MzQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZSsiTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGFzdGVyaXNrOntuOjM1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoLjg1KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGhhc2g6e246MzYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQvMiwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrcisiVi0iK3IrIm0tIityKyIsMFYiK3IrIk0iK3IrIiwiK2UrIkgtIityKyJtMCwtIityKyJIIityfSxuZWVkTGluZTohMCxub0ZpbGw6ITB9LCJ5LXVwIjp7bjozNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrZSsiLCIraSsiTDAsME0iK2UrIiwiK2krIkwwLDBNMCwtIityKyJMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieS1kb3duIjp7bjozOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrZSsiLC0iK2krIkwwLDBNIitlKyIsLSIraSsiTDAsME0wLCIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktbGVmdCI6e246MzksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTSIraSsiLCIrZSsiTDAsME0iK2krIiwtIitlKyJMMCwwTS0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktcmlnaHQiOntuOjQwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0tIitpKyIsIitlKyJMMCwwTS0iK2krIiwtIitlKyJMMCwwTSIrcisiLDBMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1ldyI6e246NDEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNIitlKyIsMEgtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW5zIjp7bjo0MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbmUiOntuOjQzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbnciOntuOjQ0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH19fSx7ZDM6MTU0fV0sNjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJjZW50IiwiY29uc3RhbnQiLCJzcXJ0IiwiZGF0YSJdLGVkaXRUeXBlOiJjYWxjIn0sc3ltbWV0cmljOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LGFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGFycmF5bWludXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlbWludXM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHRyYWNlcmVmOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0sdHJhY2VyZWZtaW51czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvcHlfenN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIn19fX0se31dLDYwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4vY29tcHV0ZV9lcnJvciIpO2Z1bmN0aW9uIGwodCxlLHIsaSl7dmFyIGw9ZVsiZXJyb3JfIitpXXx8e30sYz1bXTtpZihsLnZpc2libGUmJi0xIT09WyJsaW5lYXIiLCJsb2ciXS5pbmRleE9mKHIudHlwZSkpe2Zvcih2YXIgdT1zKGwpLGY9MDtmPHQubGVuZ3RoO2YrKyl7dmFyIGg9dFtmXSxwPWguaTtpZih2b2lkIDA9PT1wKXA9ZjtlbHNlIGlmKG51bGw9PT1wKWNvbnRpbnVlO3ZhciBkPWhbaV07aWYobihyLmMybChkKSkpe3ZhciBnPXUoZCxwKTtpZihuKGdbMF0pJiZuKGdbMV0pKXt2YXIgdj1oW2krInMiXT1kLWdbMF0sbT1oW2krImgiXT1kK2dbMV07Yy5wdXNoKHYsbSl9fX12YXIgeT1yLl9pZCx4PWUuX2V4dHJlbWVzW3ldLGI9YS5maW5kRXh0cmVtZXMocixjLG8uZXh0ZW5kRmxhdCh7dG96ZXJvOngub3B0cy50b3plcm99LHtwYWRkZWQ6ITB9KSk7eC5taW49eC5taW4uY29uY2F0KGIubWluKSx4Lm1heD14Lm1heC5jb25jYXQoYi5tYXgpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2FsY2RhdGEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLG89blswXS50cmFjZTtpZighMD09PW8udmlzaWJsZSYmaS50cmFjZUlzKG8sImVycm9yQmFyc09LIikpe3ZhciBzPWEuZ2V0RnJvbUlkKHQsby54YXhpcyksYz1hLmdldEZyb21JZCh0LG8ueWF4aXMpO2wobixvLHMsIngiKSxsKG4sbyxjLCJ5Iil9fX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vY29tcHV0ZV9lcnJvciI6NjAyLCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4icGVyY2VudCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0KmUvMTAwKX06ImNvbnN0YW50Ij09PXQ/ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnMoZSl9OiJzcXJ0Ij09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLmFicyh0KSl9OnZvaWQgMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlLHI9dC5zeW1tZXRyaWM7aWYoImRhdGEiPT09ZSl7dmFyIGk9dC5hcnJheXx8W107aWYocilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXTtyZXR1cm5bcixyXX07dmFyIGE9dC5hcnJheW1pbnVzfHxbXTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXSxuPSthW2VdO3JldHVybiBpc05hTihyKSYmaXNOYU4obik/W05hTixOYU5dOltufHwwLHJ8fDBdfX12YXIgbz1uKGUsdC52YWx1ZSkscz1uKGUsdC52YWx1ZW1pbnVzKTtyZXR1cm4gcnx8dm9pZCAwPT09dC52YWx1ZW1pbnVzP2Z1bmN0aW9uKHQpe3ZhciBlPW8odCk7cmV0dXJuW2UsZV19OmZ1bmN0aW9uKHQpe3JldHVybltzKHQpLG8odCldfX19LHt9XSw2MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz0iZXJyb3JfIitsLmF4aXMsdT1vLm5ld0NvbnRhaW5lcihlLGMpLGY9dFtjXXx8e307ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBhLmNvZXJjZShmLHUscyx0LGUpfWlmKCExIT09aCgidmlzaWJsZSIsdm9pZCAwIT09Zi5hcnJheXx8dm9pZCAwIT09Zi52YWx1ZXx8InNxcnQiPT09Zi50eXBlKSl7dmFyIHA9aCgidHlwZSIsImFycmF5ImluIGY/ImRhdGEiOiJwZXJjZW50IiksZD0hMDsic3FydCIhPT1wJiYoZD1oKCJzeW1tZXRyaWMiLCEoKCJkYXRhIj09PXA/ImFycmF5bWludXMiOiJ2YWx1ZW1pbnVzIilpbiBmKSkpLCJkYXRhIj09PXA/KGgoImFycmF5IiksaCgidHJhY2VyZWYiKSxkfHwoaCgiYXJyYXltaW51cyIpLGgoInRyYWNlcmVmbWludXMiKSkpOiJwZXJjZW50IiE9PXAmJiJjb25zdGFudCIhPT1wfHwoaCgidmFsdWUiKSxkfHxoKCJ2YWx1ZW1pbnVzIikpO3ZhciBnPSJjb3B5XyIrbC5pbmhlcml0KyJzdHlsZSI7aWYobC5pbmhlcml0KShlWyJlcnJvcl8iK2wuaW5oZXJpdF18fHt9KS52aXNpYmxlJiZoKGcsIShmLmNvbG9yfHxuKGYudGhpY2tuZXNzKXx8bihmLndpZHRoKSkpO2wuaW5oZXJpdCYmdVtnXXx8KGgoImNvbG9yIixyKSxoKCJ0aGlja25lc3MiKSxoKCJ3aWR0aCIsaS50cmFjZUlzKGUsImdsM2QiKT8wOjQpKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vYXR0cmlidXRlcyI6NjAwLCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30sYSl9O2RlbGV0ZSBvLmVycm9yX3guY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3pzdHlsZSxkZWxldGUgby5lcnJvcl95LmNvcHlfeXN0eWxlO3ZhciBzPXtlcnJvcl94Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl95Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl96Om4uZXh0ZW5kRmxhdCh7fSxhKX07ZGVsZXRlIHMuZXJyb3JfeC5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl95LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3ouY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3Jfei5jb3B5X3pzdHlsZSxlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZXJyb3JiYXJzIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjpvLGJhcjpvLGhpc3RvZ3JhbTpvLHNjYXR0ZXIzZDppKHMsImNhbGMiLCJuZXN0ZWQiKSxzY2F0dGVyZ2w6aShvLCJjYWxjIiwibmVzdGVkIil9fSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxtYWtlQ29tcHV0ZUVycm9yOnQoIi4vY29tcHV0ZV9lcnJvciIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVySW5mbzpmdW5jdGlvbih0LGUscil7KGUuZXJyb3JfeXx8e30pLnZpc2libGUmJihyLnllcnI9dC55aC10LnksZS5lcnJvcl95LnN5bW1ldHJpY3x8KHIueWVycm5lZz10LnktdC55cykpOyhlLmVycm9yX3h8fHt9KS52aXNpYmxlJiYoci54ZXJyPXQueGgtdC54LGUuZXJyb3JfeC5zeW1tZXRyaWN8fChyLnhlcnJuZWc9dC54LXQueHMpKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4vYXR0cmlidXRlcyI6NjAwLCIuL2NhbGMiOjYwMSwiLi9jb21wdXRlX2Vycm9yIjo2MDIsIi4vZGVmYXVsdHMiOjYwMywiLi9wbG90Ijo2MDUsIi4vc3R5bGUiOjYwNn1dLDYwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL2RyYXdpbmciKSxvPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3ZhciBsPXIueGF4aXMsYz1yLnlheGlzLHU9cyYmcy5kdXJhdGlvbj4wO2UuZWFjaChmdW5jdGlvbihlKXt2YXIgZixoPWVbMF0udHJhY2UscD1oLmVycm9yX3h8fHt9LGQ9aC5lcnJvcl95fHx7fTtoLmlkcyYmKGY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KTt2YXIgZz1vLmhhc01hcmtlcnMoaCkmJmgubWFya2VyLm1heGRpc3BsYXllZD4wO2QudmlzaWJsZXx8cC52aXNpYmxlfHwoZT1bXSk7dmFyIHY9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLmVycm9yYmFyIikuZGF0YShlLGYpO2lmKHYuZXhpdCgpLnJlbW92ZSgpLGUubGVuZ3RoKXtwLnZpc2libGV8fHYuc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnJlbW92ZSgpLGQudmlzaWJsZXx8di5zZWxlY3RBbGwoInBhdGgueWVycm9yIikucmVtb3ZlKCksdi5zdHlsZSgib3BhY2l0eSIsMSk7dmFyIG09di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVycm9yYmFyIiwhMCk7dSYmbS5zdHlsZSgib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwxKSxhLnNldENsaXBVcmwodixyLmxheWVyQ2xpcElkLHQpLHYuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17eDplLmMycCh0LngpLHk6ci5jMnAodC55KX07dm9pZCAwIT09dC55aCYmKG4ueWg9ci5jMnAodC55aCksbi55cz1yLmMycCh0LnlzKSxpKG4ueXMpfHwobi5ub1lTPSEwLG4ueXM9ci5jMnAodC55cywhMCkpKTt2b2lkIDAhPT10LnhoJiYobi54aD1lLmMycCh0LnhoKSxuLnhzPWUuYzJwKHQueHMpLGkobi54cyl8fChuLm5vWFM9ITAsbi54cz1lLmMycCh0LnhzLCEwKSkpO3JldHVybiBufSh0LGwsYyk7aWYoIWd8fHQudmlzKXt2YXIgYSxvPWUuc2VsZWN0KCJwYXRoLnllcnJvciIpO2lmKGQudmlzaWJsZSYmaShyLngpJiZpKHIueWgpJiZpKHIueXMpKXt2YXIgZj1kLndpZHRoO2E9Ik0iKyhyLngtZikrIiwiK3IueWgrImgiKzIqZisibS0iK2YrIiwwViIrci55cyxyLm5vWVN8fChhKz0ibS0iK2YrIiwwaCIrMipmKSwhby5zaXplKCk/bz1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2xhc3NlZCgieWVycm9yIiwhMCk6dSYmKG89by50cmFuc2l0aW9uKCkuZHVyYXRpb24ocy5kdXJhdGlvbikuZWFzZShzLmVhc2luZykpLG8uYXR0cigiZCIsYSl9ZWxzZSBvLnJlbW92ZSgpO3ZhciBoPWUuc2VsZWN0KCJwYXRoLnhlcnJvciIpO2lmKHAudmlzaWJsZSYmaShyLnkpJiZpKHIueGgpJiZpKHIueHMpKXt2YXIgdj0ocC5jb3B5X3lzdHlsZT9kOnApLndpZHRoO2E9Ik0iK3IueGgrIiwiKyhyLnktdikrInYiKzIqdisibTAsLSIrdisiSCIrci54cyxyLm5vWFN8fChhKz0ibTAsLSIrdisidiIrMip2KSwhaC5zaXplKCk/aD1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2xhc3NlZCgieGVycm9yIiwhMCk6dSYmKGg9aC50cmFuc2l0aW9uKCkuZHVyYXRpb24ocy5kdXJhdGlvbikuZWFzZShzLmVhc2luZykpLGguYXR0cigiZCIsYSl9ZWxzZSBoLnJlbW92ZSgpfX0pfX0pfX0seyIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiLi4vZHJhd2luZyI6NTk4LGQzOjE1NCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDYwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLmVycm9yX3l8fHt9LGE9ZS5lcnJvcl94fHx7fSxvPW4uc2VsZWN0KHRoaXMpO28uc2VsZWN0QWxsKCJwYXRoLnllcnJvciIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIudGhpY2tuZXNzKyJweCIpLmNhbGwoaS5zdHJva2Usci5jb2xvciksYS5jb3B5X3lzdHlsZSYmKGE9ciksby5zZWxlY3RBbGwoInBhdGgueGVycm9yIikuc3R5bGUoInN0cm9rZS13aWR0aCIsYS50aGlja25lc3MrInB4IikuY2FsbChpLnN0cm9rZSxhLmNvbG9yKX0pfX0seyIuLi9jb2xvciI6NTc3LGQzOjE1NH1dLDYwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0sZm9udDpuKHthcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0pLG5hbWVsZW5ndGg6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxhcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NzR9XSw2MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIGEodCxlLHIsaSl7aT1pfHxuLmlkZW50aXR5LEFycmF5LmlzQXJyYXkodCkmJihlWzBdW3JdPWkodCkpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbi5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzplfSx7X21vZHVsZTp0Ll9tb2R1bGV9LHIpfX1mb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXSxjPWxbMF0udHJhY2U7aWYoIWkudHJhY2VJcyhjLCJwaWUiKSl7dmFyIHU9aS50cmFjZUlzKGMsIjJkTWFwIik/YTpuLmZpbGxBcnJheTt1KGMuaG92ZXJpbmZvLGwsImhpIixvKGMpKSxjLmhvdmVydGVtcGxhdGUmJnUoYy5ob3ZlcnRlbXBsYXRlLGwsImh0IiksYy5ob3ZlcmxhYmVsJiYodShjLmhvdmVybGFiZWwuYmdjb2xvcixsLCJoYmciKSx1KGMuaG92ZXJsYWJlbC5ib3JkZXJjb2xvcixsLCJoYmMiKSx1KGMuaG92ZXJsYWJlbC5mb250LnNpemUsbCwiaHRzIiksdShjLmhvdmVybGFiZWwuZm9udC5jb2xvcixsLCJodGMiKSx1KGMuaG92ZXJsYWJlbC5mb250LmZhbWlseSxsLCJodGYiKSx1KGMuaG92ZXJsYWJlbC5uYW1lbGVuZ3RoLGwsImhubCIpKX19fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOX1dLDYwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9ob3ZlciIpLmhvdmVyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9bi5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwib25DbGljayIpKHQsdC5faG92ZXJkYXRhKTtmdW5jdGlvbiBvKCl7dC5lbWl0KCJwbG90bHlfY2xpY2siLHtwb2ludHM6dC5faG92ZXJkYXRhLGV2ZW50OmV9KX12b2lkIDAhPT1yJiZpKHQsZSxyLCEwKSx0Ll9ob3ZlcmRhdGEmJmUmJmUudGFyZ2V0JiYoYSYmYS50aGVuP2EudGhlbihvKTpvKCksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX0seyIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2hvdmVyIjo2MTN9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtZQU5HTEU6NjAsSE9WRVJBUlJPV1NJWkU6NixIT1ZFUlRFWFRQQUQ6MyxIT1ZFUkZPTlRTSVpFOjEzLEhPVkVSRk9OVDoiQXJpYWwsIHNhbnMtc2VyaWYiLEhPVkVSTUlOVElNRTo1MCxIT1ZFUklEOiItaG92ZXIifX0se31dLDYxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2EodCxlLGZ1bmN0aW9uKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9LG8uaG92ZXJsYWJlbCl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2F0dHJpYnV0ZXMiOjYwNywiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2MTR9XSw2MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5nZXRTdWJwbG90PWZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnBsb3R8fHQueGF4aXMrdC55YXhpc3x8dC5nZW99LHIuaXNUcmFjZUluU3VicGxvdHM9ZnVuY3Rpb24odCxlKXtpZigic3Bsb20iPT09dC50eXBlKXtmb3IodmFyIG49dC54YXhlc3x8W10saT10LnlheGVzfHxbXSxhPTA7YTxuLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYoLTEhPT1lLmluZGV4T2YoblthXStpW29dKSlyZXR1cm4hMDtyZXR1cm4hMX1yZXR1cm4tMSE9PWUuaW5kZXhPZihyLmdldFN1YnBsb3QodCkpfSxyLmZsYXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT1lO3JldHVybiByfSxyLnAyYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyW25dPXRbbl0ucDJjKGUpO3JldHVybiByfSxyLmdldERpc3RhbmNlRnVuY3Rpb249ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuImNsb3Nlc3QiPT09dD9pfHxyLnF1YWRyYXR1cmUoZSxuKToieCI9PT10P2U6bn0sci5nZXRDbG9zZXN0PWZ1bmN0aW9uKHQsZSxyKXtpZighMSE9PXIuaW5kZXgpci5pbmRleD49MCYmci5pbmRleDx0Lmxlbmd0aD9yLmRpc3RhbmNlPTA6ci5pbmRleD0hMTtlbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT1lKHRbbl0pO2k8PXIuZGlzdGFuY2UmJihyLmluZGV4PW4sci5kaXN0YW5jZT1pKX1yZXR1cm4gcn0sci5pbmJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQqZTwwfHwwPT09dD9yOjEvMH0sci5xdWFkcmF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXQociksaT1lKHIpO3JldHVybiBNYXRoLnNxcnQobipuK2kqaSl9fSxyLm1ha2VFdmVudERhdGE9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPSJpbmRleCJpbiB0P3QuaW5kZXg6dC5wb2ludE51bWJlcixhPXtkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmUsY3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcjppfTtpZihlLl9pbmRleFRvUG9pbnRzKXt2YXIgbz1lLl9pbmRleFRvUG9pbnRzW2ldOzE9PT1vLmxlbmd0aD9hLnBvaW50SW5kZXg9b1swXTphLnBvaW50SW5kaWNlcz1vfWVsc2UgYS5wb2ludEluZGV4PWk7cmV0dXJuIGUuX21vZHVsZS5ldmVudERhdGE/YT1lLl9tb2R1bGUuZXZlbnREYXRhKGEsdCxlLG4saSk6KCJ4VmFsImluIHQ/YS54PXQueFZhbDoieCJpbiB0JiYoYS54PXQueCksInlWYWwiaW4gdD9hLnk9dC55VmFsOiJ5ImluIHQmJihhLnk9dC55KSx0LnhhJiYoYS54YXhpcz10LnhhKSx0LnlhJiYoYS55YXhpcz10LnlhKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmKGEuej10LnpMYWJlbFZhbCkpLHIuYXBwZW5kQXJyYXlQb2ludFZhbHVlKGEsZSxpKSxhfSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZT1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYXJyYXlBdHRycztpZihpKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9YShsKTtpZih2b2lkIDA9PT10W2NdKXt2YXIgdT1vKG4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxyKTt2b2lkIDAhPT11JiYodFtjXT11KX19fSxyLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYXJyYXlBdHRycztpZihpKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9YShsKTtpZih2b2lkIDA9PT10W2NdKXtmb3IodmFyIHU9bi5uZXN0ZWRQcm9wZXJ0eShlLGwpLmdldCgpLGY9bmV3IEFycmF5KHIubGVuZ3RoKSxoPTA7aDxyLmxlbmd0aDtoKyspZltoXT1vKHUscltoXSk7dFtjXT1mfX19O3ZhciBpPXtpZHM6ImlkIixsb2NhdGlvbnM6ImxvY2F0aW9uIixsYWJlbHM6ImxhYmVsIix2YWx1ZXM6InZhbHVlIiwibWFya2VyLmNvbG9ycyI6ImNvbG9yIixwYXJlbnRzOiJwYXJlbnQifTtmdW5jdGlvbiBhKHQpe3JldHVybiBpW3RdfHx0fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9BcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbZVswXV0pP3RbZVswXV1bZVsxXV06dm9pZCAwOnRbZV19fSx7Ii4uLy4uL2xpYiI6NzAwfV0sNjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9saWIvZXZlbnRzIiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3IiKSx1PXQoIi4uL2RyYXdpbmciKSxmPXQoIi4uL2NvbG9yIiksaD10KCIuLi9kcmFnZWxlbWVudCIpLHA9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxkPXQoIi4uLy4uL3JlZ2lzdHJ5IiksZz10KCIuL2hlbHBlcnMiKSx2PXQoIi4vY29uc3RhbnRzIiksbT12LllBTkdMRSx5PU1hdGguUEkqbS8xODAseD0xL01hdGguc2luKHkpLGI9TWF0aC5jb3MoeSksXz1NYXRoLnNpbih5KSx3PXYuSE9WRVJBUlJPV1NJWkUsaz12LkhPVkVSVEVYVFBBRDtyLmhvdmVyPWZ1bmN0aW9uKHQsZSxyLGEpe3Q9by5nZXRHcmFwaERpdih0KSxvLnRocm90dGxlKHQuX2Z1bGxMYXlvdXQuX3VpZCt2LkhPVkVSSUQsdi5IT1ZFUk1JTlRJTUUsZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlLHIsYSl7cnx8KHI9Inh5Iik7dmFyIGw9QXJyYXkuaXNBcnJheShyKT9yOltyXSx1PXQuX2Z1bGxMYXlvdXQsdj11Ll9wbG90c3x8W10sbT12W3JdLHk9dS5faGFzKCJjYXJ0ZXNpYW4iKTtpZihtKXt2YXIgYj1tLm92ZXJsYXlzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pO2w9bC5jb25jYXQoYil9Zm9yKHZhciBfPWwubGVuZ3RoLHc9bmV3IEFycmF5KF8pLGs9bmV3IEFycmF5KF8pLFQ9ITEsTD0wO0w8XztMKyspe3ZhciB6PWxbTF0sTz12W3pdO2lmKE8pVD0hMCx3W0xdPXAuZ2V0RnJvbUlkKHQsTy54YXhpcy5faWQpLGtbTF09cC5nZXRGcm9tSWQodCxPLnlheGlzLl9pZCk7ZWxzZXt2YXIgST11W3pdLl9zdWJwbG90O3dbTF09SS54YXhpcyxrW0xdPUkueWF4aXN9fXZhciBEPWUuaG92ZXJtb2RlfHx1LmhvdmVybW9kZTtEJiYhVCYmKEQ9ImNsb3Nlc3QiKTtpZigtMT09PVsieCIsInkiLCJjbG9zZXN0Il0uaW5kZXhPZihEKXx8IXQuY2FsY2RhdGF8fHQucXVlcnlTZWxlY3RvcigiLnpvb21ib3giKXx8dC5fZHJhZ2dpbmcpcmV0dXJuIGgudW5ob3ZlclJhdyh0LGUpO3ZhciBQLFIsRixCLE4saixWLFUscSxILEcsWSxXLFg9LTE9PT11LmhvdmVyZGlzdGFuY2U/MS8wOnUuaG92ZXJkaXN0YW5jZSxaPS0xPT09dS5zcGlrZWRpc3RhbmNlPzEvMDp1LnNwaWtlZGlzdGFuY2UsJD1bXSxKPVtdLEs9e2hMaW5lUG9pbnQ6bnVsbCx2TGluZVBvaW50Om51bGx9LFE9ITE7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoRD0iYXJyYXkiLEY9MDtGPGUubGVuZ3RoO0YrKykoTj10LmNhbGNkYXRhW2VbRl0uY3VydmVOdW1iZXJ8fDBdKSYmKGo9TlswXS50cmFjZSwic2tpcCIhPT1OWzBdLnRyYWNlLmhvdmVyaW5mbyYmKEoucHVzaChOKSwiaCI9PT1qLm9yaWVudGF0aW9uJiYoUT0hMCkpKTtlbHNle2ZvcihCPTA7Qjx0LmNhbGNkYXRhLmxlbmd0aDtCKyspTj10LmNhbGNkYXRhW0JdLCJza2lwIiE9PShqPU5bMF0udHJhY2UpLmhvdmVyaW5mbyYmZy5pc1RyYWNlSW5TdWJwbG90cyhqLGwpJiYoSi5wdXNoKE4pLCJoIj09PWoub3JpZW50YXRpb24mJihRPSEwKSk7dmFyIHR0LGV0LHJ0PSFlLnRhcmdldDtpZihydCl0dD0ieHB4ImluIGU/ZS54cHg6d1swXS5fbGVuZ3RoLzIsZXQ9InlweCJpbiBlP2UueXB4OmtbMF0uX2xlbmd0aC8yO2Vsc2V7aWYoITE9PT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVob3ZlciIsZSkpcmV0dXJuO3ZhciBudD1lLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0dD1lLmNsaWVudFgtbnQubGVmdCxldD1lLmNsaWVudFktbnQudG9wLHR0PDB8fHR0PndbMF0uX2xlbmd0aHx8ZXQ8MHx8ZXQ+a1swXS5fbGVuZ3RoKXJldHVybiBoLnVuaG92ZXJSYXcodCxlKX1pZihlLnBvaW50ZXJYPXR0K3dbMF0uX29mZnNldCxlLnBvaW50ZXJZPWV0K2tbMF0uX29mZnNldCxQPSJ4dmFsImluIGU/Zy5mbGF0KGwsZS54dmFsKTpnLnAyYyh3LHR0KSxSPSJ5dmFsImluIGU/Zy5mbGF0KGwsZS55dmFsKTpnLnAyYyhrLGV0KSwhaShQWzBdKXx8IWkoUlswXSkpcmV0dXJuIG8ud2FybigiRnguaG92ZXIgZmFpbGVkIixlLHQpLGgudW5ob3ZlclJhdyh0LGUpfXZhciBpdD0xLzA7Zm9yKEI9MDtCPEoubGVuZ3RoO0IrKylpZigoTj1KW0JdKSYmTlswXSYmTlswXS50cmFjZSYmITA9PT1OWzBdLnRyYWNlLnZpc2libGUmJihqPU5bMF0udHJhY2UsLTE9PT1bImNhcnBldCIsImNvbnRvdXJjYXJwZXQiXS5pbmRleE9mKGouX21vZHVsZS5uYW1lKSkpe2lmKCJzcGxvbSI9PT1qLnR5cGU/Vj1sW1U9MF06KFY9Zy5nZXRTdWJwbG90KGopLFU9bC5pbmRleE9mKFYpKSxxPUQsWT17Y2Q6Tix0cmFjZTpqLHhhOndbVV0seWE6a1tVXSxtYXhIb3ZlckRpc3RhbmNlOlgsbWF4U3Bpa2VEaXN0YW5jZTpaLGluZGV4OiExLGRpc3RhbmNlOk1hdGgubWluKGl0LFgpLHNwaWtlRGlzdGFuY2U6MS8wLHhTcGlrZTp2b2lkIDAseVNwaWtlOnZvaWQgMCxjb2xvcjpmLmRlZmF1bHRMaW5lLG5hbWU6ai5uYW1lLHgwOnZvaWQgMCx4MTp2b2lkIDAseTA6dm9pZCAwLHkxOnZvaWQgMCx4TGFiZWxWYWw6dm9pZCAwLHlMYWJlbFZhbDp2b2lkIDAsekxhYmVsVmFsOnZvaWQgMCx0ZXh0OnZvaWQgMH0sdVtWXSYmKFkuc3VicGxvdD11W1ZdLl9zdWJwbG90KSx1Ll9zcGxvbVNjZW5lcyYmdS5fc3Bsb21TY2VuZXNbai51aWRdJiYoWS5zY2VuZT11Ll9zcGxvbVNjZW5lc1tqLnVpZF0pLFc9JC5sZW5ndGgsImFycmF5Ij09PXEpe3ZhciBhdD1lW0JdOyJwb2ludE51bWJlciJpbiBhdD8oWS5pbmRleD1hdC5wb2ludE51bWJlcixxPSJjbG9zZXN0Iik6KHE9IiIsInh2YWwiaW4gYXQmJihIPWF0Lnh2YWwscT0ieCIpLCJ5dmFsImluIGF0JiYoRz1hdC55dmFsLHE9cT8iY2xvc2VzdCI6InkiKSl9ZWxzZSBIPVBbVV0sRz1SW1VdO2lmKDAhPT1YKWlmKGouX21vZHVsZSYmai5fbW9kdWxlLmhvdmVyUG9pbnRzKXt2YXIgb3Q9ai5fbW9kdWxlLmhvdmVyUG9pbnRzKFksSCxHLHEsdS5faG92ZXJsYXllcik7aWYob3QpZm9yKHZhciBzdCxsdD0wO2x0PG90Lmxlbmd0aDtsdCsrKXN0PW90W2x0XSxpKHN0LngwKSYmaShzdC55MCkmJiQucHVzaChTKHN0LEQpKX1lbHNlIG8ubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSBpbiBob3ZlcjoiLGopO2lmKCJjbG9zZXN0Ij09PUQmJiQubGVuZ3RoPlcmJigkLnNwbGljZSgwLFcpLGl0PSRbMF0uZGlzdGFuY2UpLHkmJjAhPT1aJiYwPT09JC5sZW5ndGgpe1kuZGlzdGFuY2U9WixZLmluZGV4PSExO3ZhciBjdD1qLl9tb2R1bGUuaG92ZXJQb2ludHMoWSxILEcsImNsb3Nlc3QiLHUuX2hvdmVybGF5ZXIpO2lmKGN0JiYoY3Q9Y3QuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwaWtlRGlzdGFuY2U8PVp9KSksY3QmJmN0Lmxlbmd0aCl7dmFyIHV0LGZ0PWN0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC54YS5zaG93c3Bpa2VzfSk7aWYoZnQubGVuZ3RoKXt2YXIgaHQ9ZnRbMF07aShodC54MCkmJmkoaHQueTApJiYodXQ9dnQoaHQpLCghSy52TGluZVBvaW50fHxLLnZMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT51dC5zcGlrZURpc3RhbmNlKSYmKEsudkxpbmVQb2ludD11dCkpfXZhciBwdD1jdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlc30pO2lmKHB0Lmxlbmd0aCl7dmFyIGR0PXB0WzBdO2koZHQueDApJiZpKGR0LnkwKSYmKHV0PXZ0KGR0KSwoIUsuaExpbmVQb2ludHx8Sy5oTGluZVBvaW50LnNwaWtlRGlzdGFuY2U+dXQuc3Bpa2VEaXN0YW5jZSkmJihLLmhMaW5lUG9pbnQ9dXQpKX19fX1mdW5jdGlvbiBndCh0LGUpe2Zvcih2YXIgcixuPW51bGwsaT0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKShyPXRbYV0uc3Bpa2VEaXN0YW5jZSk8aSYmcjw9ZSYmKG49dFthXSxpPXIpO3JldHVybiBufWZ1bmN0aW9uIHZ0KHQpe3JldHVybiB0P3t4YTp0LnhhLHlhOnQueWEseDp2b2lkIDAhPT10LnhTcGlrZT90LnhTcGlrZToodC54MCt0LngxKS8yLHk6dm9pZCAwIT09dC55U3Bpa2U/dC55U3Bpa2U6KHQueTArdC55MSkvMixkaXN0YW5jZTp0LmRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6dC5zcGlrZURpc3RhbmNlLGN1cnZlTnVtYmVyOnQudHJhY2UuaW5kZXgsY29sb3I6dC5jb2xvcixwb2ludE51bWJlcjp0LmluZGV4fTpudWxsfXZhciBtdD17ZnVsbExheW91dDp1LGNvbnRhaW5lcjp1Ll9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOnUuX3BhcGVyZGl2LGV2ZW50OmV9LHl0PXQuX3NwaWtlcG9pbnRzLHh0PXt2TGluZVBvaW50OksudkxpbmVQb2ludCxoTGluZVBvaW50OksuaExpbmVQb2ludH07aWYodC5fc3Bpa2Vwb2ludHM9eHQseSYmMCE9PVomJjAhPT0kLmxlbmd0aCl7dmFyIGJ0PSQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnlhLnNob3dzcGlrZXN9KSxfdD1ndChidCxaKTtLLmhMaW5lUG9pbnQ9dnQoX3QpO3ZhciB3dD0kLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC54YS5zaG93c3Bpa2VzfSksa3Q9Z3Qod3QsWik7Sy52TGluZVBvaW50PXZ0KGt0KX1pZigwPT09JC5sZW5ndGgpe3ZhciBUdD1oLnVuaG92ZXJSYXcodCxlKTtyZXR1cm4heXx8bnVsbD09PUsuaExpbmVQb2ludCYmbnVsbD09PUsudkxpbmVQb2ludHx8Qyh5dCkmJkUoSyxtdCksVHR9eSYmQyh5dCkmJkUoSyxtdCk7JC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2UtZS5kaXN0YW5jZX0pO3ZhciBBdD10Ll9ob3ZlcmRhdGEsTXQ9W107Zm9yKEY9MDtGPCQubGVuZ3RoO0YrKyl7dmFyIFN0PSRbRl0sRXQ9Zy5tYWtlRXZlbnREYXRhKFN0LFN0LnRyYWNlLFN0LmNkKTtpZighMSE9PVN0LmhvdmVydGVtcGxhdGUpe3ZhciBDdD0hMTtTdC5jZFtTdC5pbmRleF0mJlN0LmNkW1N0LmluZGV4XS5odCYmKEN0PVN0LmNkW1N0LmluZGV4XS5odCksU3QuaG92ZXJ0ZW1wbGF0ZT1DdHx8U3QudHJhY2UuaG92ZXJ0ZW1wbGF0ZXx8ITF9U3QuZXZlbnREYXRhPVtFdF0sTXQucHVzaChFdCl9dC5faG92ZXJkYXRhPU10O3ZhciBMdD0ieSI9PT1EJiYoSi5sZW5ndGg+MXx8JC5sZW5ndGg+MSl8fCJjbG9zZXN0Ij09PUQmJlEmJiQubGVuZ3RoPjEsenQ9Zi5jb21iaW5lKHUucGxvdF9iZ2NvbG9yfHxmLmJhY2tncm91bmQsdS5wYXBlcl9iZ2NvbG9yKSxPdD17aG92ZXJtb2RlOkQscm90YXRlTGFiZWxzOkx0LGJnQ29sb3I6enQsY29udGFpbmVyOnUuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6dS5fcGFwZXJkaXYsY29tbW9uTGFiZWxPcHRzOnUuaG92ZXJsYWJlbCxob3ZlcmRpc3RhbmNlOnUuaG92ZXJkaXN0YW5jZX0sSXQ9QSgkLE90LHQpO2lmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1PTAsZj0xLGg9dC5zaXplKCkscD1uZXcgQXJyYXkoaCk7ZnVuY3Rpb24gZCh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtpZihpPWUucG1pbi1lLnBvcy1lLmRwK2Uuc2l6ZSxhPXIucG9zK3IuZHArci5zaXplLWUucG1heCxpPi4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwKz1pO249ITF9aWYoIShhPC4wMSkpe2lmKGk8LS4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO249ITF9aWYobil7dmFyIGM9MDtmb3Iobz0wO288dC5sZW5ndGg7bysrKShsPXRbb10pLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJmMrKztmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKShsPXRbb10pLnBvcz5lLnBtYXgtMSYmKGwuZGVsPSEwLGMtLSk7Zm9yKG89MDtvPHQubGVuZ3RoJiYhKGM8PTApO28rKylpZigobD10W29dKS5wb3M8ZS5wbWluKzEpZm9yKGwuZGVsPSEwLGMtLSxhPTIqbC5zaXplLHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmKGwuZGVsPSEwLGMtLSl9fX1mb3IodC5lYWNoKGZ1bmN0aW9uKHQsbil7dmFyIGk9dFtlXSxhPSJ4Ij09PWkuX2lkLmNoYXJBdCgwKSxvPWkucmFuZ2U7IW4mJm8mJm9bMF0+b1sxXSE9PWEmJihmPS0xKSxwW25dPVt7ZGF0dW06dCxpOm4sdHJhY2VJbmRleDp0LnRyYWNlLmluZGV4LGRwOjAscG9zOnQucG9zLHBvc3JlZjp0LnBvc3JlZixzaXplOnQuYnkqKGE/eDoxKS8yLHBtaW46MCxwbWF4OmE/ci53aWR0aDpyLmhlaWdodH1dfSkscC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ucG9zcmVmLWVbMF0ucG9zcmVmfHxmKihlWzBdLnRyYWNlSW5kZXgtdFswXS50cmFjZUluZGV4KX0pOyFuJiZ1PD1oOyl7Zm9yKHUrKyxuPSEwLG89MDtvPHAubGVuZ3RoLTE7KXt2YXIgZz1wW29dLHY9cFtvKzFdLG09Z1tnLmxlbmd0aC0xXSx5PXZbMF07aWYoKGk9bS5wb3MrbS5kcCttLnNpemUteS5wb3MteS5kcCt5LnNpemUpPi4wMSYmbS5wbWluPT09eS5wbWluJiZtLnBtYXg9PT15LnBtYXgpe2ZvcihzPXYubGVuZ3RoLTE7cz49MDtzLS0pdltzXS5kcCs9aTtmb3IoZy5wdXNoLmFwcGx5KGcsdikscC5zcGxpY2UobysxLDEpLGM9MCxzPWcubGVuZ3RoLTE7cz49MDtzLS0pYys9Z1tzXS5kcDtmb3IoYT1jL2cubGVuZ3RoLHM9Zy5sZW5ndGgtMTtzPj0wO3MtLSlnW3NdLmRwLT1hO249ITF9ZWxzZSBvKyt9cC5mb3JFYWNoKGQpfWZvcihvPXAubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBiPXBbb107Zm9yKHM9Yi5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIF89YltzXSx3PV8uZGF0dW07dy5vZmZzZXQ9Xy5kcCx3LmRlbD1fLmRlbH19fShJdCxMdD8ieGEiOiJ5YSIsdSksTShJdCxMdCksZS50YXJnZXQmJmUudGFyZ2V0LnRhZ05hbWUpe3ZhciBEdD1kLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJoYXNDbGlja1RvU2hvdyIpKHQsTXQpO2Mobi5zZWxlY3QoZS50YXJnZXQpLER0PyJwb2ludGVyIjoiIil9aWYoIWUudGFyZ2V0fHxhfHwhZnVuY3Rpb24odCxlLHIpe2lmKCFyfHxyLmxlbmd0aCE9PXQuX2hvdmVyZGF0YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPXIubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXJbbl0sYT10Ll9ob3ZlcmRhdGFbbl07aWYoaS5jdXJ2ZU51bWJlciE9PWEuY3VydmVOdW1iZXJ8fFN0cmluZyhpLnBvaW50TnVtYmVyKSE9PVN0cmluZyhhLnBvaW50TnVtYmVyKXx8U3RyaW5nKGkucG9pbnROdW1iZXJzKSE9PVN0cmluZyhhLnBvaW50TnVtYmVycykpcmV0dXJuITB9cmV0dXJuITF9KHQsMCxBdCkpcmV0dXJuO0F0JiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6QXR9KTt0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczp3LHlheGVzOmsseHZhbHM6UCx5dmFsczpSfSl9KHQsZSxyLGEpfSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2NvbG9yOnQuY29sb3J8fGYuZGVmYXVsdExpbmUseDA6dC54MHx8dC54fHwwLHgxOnQueDF8fHQueHx8MCx5MDp0LnkwfHx0Lnl8fDAseTE6dC55MXx8dC55fHwwLHhMYWJlbDp0LnhMYWJlbCx5TGFiZWw6dC55TGFiZWwsekxhYmVsOnQuekxhYmVsLHRleHQ6dC50ZXh0LG5hbWU6dC5uYW1lLGlkZWFsQWxpZ246dC5pZGVhbEFsaWduLGJvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsZm9udEZhbWlseTp0LmZvbnRGYW1pbHksZm9udFNpemU6dC5mb250U2l6ZSxmb250Q29sb3I6dC5mb250Q29sb3IsdHJhY2U6dC50cmFjZXx8e2luZGV4OjAsaG92ZXJpbmZvOiIifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowLGhvdmVydGVtcGxhdGU6dC5ob3ZlcnRlbXBsYXRlfHwhMSxldmVudERhdGE6dC5ldmVudERhdGF8fCExLGhvdmVydGVtcGxhdGVMYWJlbHM6dC5ob3ZlcnRlbXBsYXRlTGFiZWxzfHwhMX0saT1uLnNlbGVjdChlLmNvbnRhaW5lciksYT1lLm91dGVyQ29udGFpbmVyP24uc2VsZWN0KGUub3V0ZXJDb250YWluZXIpOmksbz17aG92ZXJtb2RlOiJjbG9zZXN0Iixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjplLmJnQ29sb3J8fGYuYmFja2dyb3VuZCxjb250YWluZXI6aSxvdXRlckNvbnRhaW5lcjphfSxzPUEoW3JdLG8sZS5nZCk7cmV0dXJuIE0ocyxvLnJvdGF0ZUxhYmVscykscy5ub2RlKCl9LHIubXVsdGlIb3ZlcnM9ZnVuY3Rpb24odCxlKXtBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciByPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybntjb2xvcjp0LmNvbG9yfHxmLmRlZmF1bHRMaW5lLHgwOnQueDB8fHQueHx8MCx4MTp0LngxfHx0Lnh8fDAseTA6dC55MHx8dC55fHwwLHkxOnQueTF8fHQueXx8MCx4TGFiZWw6dC54TGFiZWwseUxhYmVsOnQueUxhYmVsLHpMYWJlbDp0LnpMYWJlbCx0ZXh0OnQudGV4dCxuYW1lOnQubmFtZSxpZGVhbEFsaWduOnQuaWRlYWxBbGlnbixib3JkZXJDb2xvcjp0LmJvcmRlckNvbG9yLGZvbnRGYW1pbHk6dC5mb250RmFtaWx5LGZvbnRTaXplOnQuZm9udFNpemUsZm9udENvbG9yOnQuZm9udENvbG9yLHRyYWNlOnQudHJhY2V8fHtpbmRleDowLGhvdmVyaW5mbzoiIn0seGE6e19vZmZzZXQ6MH0seWE6e19vZmZzZXQ6MH0saW5kZXg6MCxob3ZlcnRlbXBsYXRlOnQuaG92ZXJ0ZW1wbGF0ZXx8ITEsZXZlbnREYXRhOnQuZXZlbnREYXRhfHwhMSxob3ZlcnRlbXBsYXRlTGFiZWxzOnQuaG92ZXJ0ZW1wbGF0ZUxhYmVsc3x8ITF9fSksaT1uLnNlbGVjdChlLmNvbnRhaW5lciksYT1lLm91dGVyQ29udGFpbmVyP24uc2VsZWN0KGUub3V0ZXJDb250YWluZXIpOmksbz17aG92ZXJtb2RlOiJjbG9zZXN0Iixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjplLmJnQ29sb3J8fGYuYmFja2dyb3VuZCxjb250YWluZXI6aSxvdXRlckNvbnRhaW5lcjphfSxzPUEocixvLGUuZ2QpLGw9MDtyZXR1cm4gcy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueTAtZS55MH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC55MC10LmJ5LzI7dC5vZmZzZXQ9ZS01PGw/bC1lKzU6MCxsPWUrdC5ieSt0Lm9mZnNldH0pLE0ocyxvLnJvdGF0ZUxhYmVscykscy5ub2RlKCl9O3ZhciBUPS88ZXh0cmE+KFtcc1xTXSopPFwvZXh0cmE+LztmdW5jdGlvbiBBKHQsZSxyKXt2YXIgaT1yLl9mdWxsTGF5b3V0LGE9ZS5ob3Zlcm1vZGUscz1lLnJvdGF0ZUxhYmVscyxjPWUuYmdDb2xvcixoPWUuY29udGFpbmVyLHA9ZS5vdXRlckNvbnRhaW5lcixkPWUuY29tbW9uTGFiZWxPcHRzfHx7fSxnPWUuZm9udEZhbWlseXx8di5IT1ZFUkZPTlQseT1lLmZvbnRTaXplfHx2LkhPVkVSRk9OVFNJWkUseD10WzBdLGI9eC54YSxfPXgueWEsQT0ieSI9PT1hPyJ5TGFiZWwiOiJ4TGFiZWwiLE09eFtBXSxTPShTdHJpbmcoTSl8fCIiKS5zcGxpdCgiICIpWzBdLEU9cC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksQz1FLnRvcCxMPUUud2lkdGgsej1FLmhlaWdodCxPPXZvaWQgMCE9PU0mJnguZGlzdGFuY2U8PWUuaG92ZXJkaXN0YW5jZSYmKCJ4Ij09PWF8fCJ5Ij09PWEpO2lmKE8pe3ZhciBJLEQsUD0hMDtmb3IoST0wO0k8dC5sZW5ndGg7SSsrKWlmKFAmJnZvaWQgMD09PXRbSV0uekxhYmVsJiYoUD0hMSksRD10W0ldLmhvdmVyaW5mb3x8dFtJXS50cmFjZS5ob3ZlcmluZm8pe3ZhciBSPUFycmF5LmlzQXJyYXkoRCk/RDpELnNwbGl0KCIrIik7aWYoLTE9PT1SLmluZGV4T2YoImFsbCIpJiYtMT09PVIuaW5kZXhPZihhKSl7Tz0hMTticmVha319UCYmKE89ITEpfXZhciBGPWguc2VsZWN0QWxsKCJnLmF4aXN0ZXh0IikuZGF0YShPP1swXTpbXSk7Ri5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXN0ZXh0IiwhMCksRi5leGl0KCkucmVtb3ZlKCksRi5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyksaT1vLmVuc3VyZVNpbmdsZShlLCJwYXRoIiwiIixmdW5jdGlvbih0KXt0LnN0eWxlKHsic3Ryb2tlLXdpZHRoIjoiMXB4In0pfSkscz1vLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSksYz1kLmJnY29sb3J8fGYuZGVmYXVsdExpbmUsaD1kLmJvcmRlcmNvbG9yfHxmLmNvbnRyYXN0KGMpLHA9Zi5jb250cmFzdChjKTtpLnN0eWxlKHtmaWxsOmMsc3Ryb2tlOmh9KSxzLnRleHQoTSkuY2FsbCh1LmZvbnQsZC5mb250LmZhbWlseXx8ZyxkLmZvbnQuc2l6ZXx8eSxkLmZvbnQuY29sb3J8fHApLmNhbGwobC5wb3NpdGlvblRleHQsMCwwKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIpLGUuYXR0cigidHJhbnNmb3JtIiwiIik7dmFyIHY9cy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIngiPT09YSl7cy5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwobC5wb3NpdGlvblRleHQsMCwidG9wIj09PWIuc2lkZT9DLXYuYm90dG9tLXctazpDLXYudG9wK3crayk7dmFyIG09InRvcCI9PT1iLnNpZGU/Ii0iOiIiO2kuYXR0cigiZCIsIk0wLDBMIit3KyIsIittK3crIkgiKyhrK3Yud2lkdGgvMikrInYiK20rKDIqayt2LmhlaWdodCkrIkgtIisoayt2LndpZHRoLzIpKyJWIittK3crIkgtIit3KyJaIiksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYi5fb2Zmc2V0Kyh4LngwK3gueDEpLzIpKyIsIisoXy5fb2Zmc2V0KygidG9wIj09PWIuc2lkZT8wOl8uX2xlbmd0aCkpKyIpIil9ZWxzZXtzLmF0dHIoInRleHQtYW5jaG9yIiwicmlnaHQiPT09Xy5zaWRlPyJzdGFydCI6ImVuZCIpLmNhbGwobC5wb3NpdGlvblRleHQsKCJyaWdodCI9PT1fLnNpZGU/MTotMSkqKGsrdyksQy12LnRvcC12LmhlaWdodC8yKTt2YXIgVD0icmlnaHQiPT09Xy5zaWRlPyIiOiItIjtpLmF0dHIoImQiLCJNMCwwTCIrVCt3KyIsIit3KyJWIisoayt2LmhlaWdodC8yKSsiaCIrVCsoMiprK3Yud2lkdGgpKyJWLSIrKGsrdi5oZWlnaHQvMikrIkgiK1QrdysiVi0iK3crIloiKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhiLl9vZmZzZXQrKCJyaWdodCI9PT1fLnNpZGU/Yi5fbGVuZ3RoOjApKSsiLCIrKF8uX29mZnNldCsoeC55MCt4LnkxKS8yKSsiKSIpfXQ9dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQuekxhYmVsVmFsfHwodFtBXXx8IiIpLnNwbGl0KCIgIilbMF09PT1TfSl9KTt2YXIgQj1oLnNlbGVjdEFsbCgiZy5ob3ZlcnRleHQiKS5kYXRhKHQsZnVuY3Rpb24odCl7cmV0dXJuW3QudHJhY2UuaW5kZXgsdC5pbmRleCx0LngwLHQueTAsdC5uYW1lLHQuYXR0cix0LnhhLHQueWF8fCIiXS5qb2luKCIsIil9KTtyZXR1cm4gQi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImhvdmVydGV4dCIsITApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZCgicmVjdCIpLmNhbGwoZi5maWxsLGYuYWRkT3BhY2l0eShjLC44KSksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJuYW1lIiwhMCksdC5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwiMXB4IiksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJudW1zIiwhMCkuY2FsbCh1LmZvbnQsZyx5KX0pLEIuZXhpdCgpLnJlbW92ZSgpLEIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKSxoPSIiLHA9IiIsZD10LmJnY29sb3J8fHQuY29sb3Isdj1mLmNvbWJpbmUoZi5vcGFjaXR5KGQpP2Q6Zi5kZWZhdWx0TGluZSxjKSx4PWYuY29tYmluZShmLm9wYWNpdHkodC5jb2xvcik/dC5jb2xvcjpmLmRlZmF1bHRMaW5lLGMpLGI9dC5ib3JkZXJDb2xvcnx8Zi5jb250cmFzdCh2KTt2b2lkIDAhPT10Lm5hbWVPdmVycmlkZSYmKHQubmFtZT10Lm5hbWVPdmVycmlkZSksdC5uYW1lJiYoaS5tZXRhJiYodC5uYW1lPW8udGVtcGxhdGVTdHJpbmcodC5uYW1lLHttZXRhOmkubWV0YX0pKSxoPWwucGxhaW5UZXh0KHQubmFtZXx8IiIse2xlbjp0Lm5hbWVMZW5ndGgsYWxsb3dlZFRhZ3M6WyJiciIsInN1YiIsInN1cCIsImIiLCJpIiwiZW0iXX0pKSx2b2lkIDAhPT10LnpMYWJlbD8odm9pZCAwIT09dC54TGFiZWwmJihwKz0ieDogIit0LnhMYWJlbCsiPGJyPiIpLHZvaWQgMCE9PXQueUxhYmVsJiYocCs9Ink6ICIrdC55TGFiZWwrIjxicj4iKSxwKz0ocD8iejogIjoiIikrdC56TGFiZWwpOk8mJnRbYSsiTGFiZWwiXT09PU0/cD10WygieCI9PT1hPyJ5IjoieCIpKyJMYWJlbCJdfHwiIjp2b2lkIDA9PT10LnhMYWJlbD92b2lkIDAhPT10LnlMYWJlbCYmInNjYXR0ZXJjYXJwZXQiIT09dC50cmFjZS50eXBlJiYocD10LnlMYWJlbCk6cD12b2lkIDA9PT10LnlMYWJlbD90LnhMYWJlbDoiKCIrdC54TGFiZWwrIiwgIit0LnlMYWJlbCsiKSIsIXQudGV4dCYmMCE9PXQudGV4dHx8QXJyYXkuaXNBcnJheSh0LnRleHQpfHwocCs9KHA/Ijxicj4iOiIiKSt0LnRleHQpLHZvaWQgMCE9PXQuZXh0cmFUZXh0JiYocCs9KHA/Ijxicj4iOiIiKSt0LmV4dHJhVGV4dCksIiIhPT1wfHx0LmhvdmVydGVtcGxhdGV8fCgiIj09PWgmJmUucmVtb3ZlKCkscD1oKTt2YXIgXz1yLl9mdWxsTGF5b3V0Ll9kM2xvY2FsZSxBPXQuaG92ZXJ0ZW1wbGF0ZXx8ITEsUz10LmhvdmVydGVtcGxhdGVMYWJlbHN8fHQsRT10LmV2ZW50RGF0YVswXXx8e307QSYmKHA9KHA9by5ob3ZlcnRlbXBsYXRlU3RyaW5nKEEsUyxfLEUse21ldGE6aS5tZXRhfSkpLnJlcGxhY2UoVCxmdW5jdGlvbih0LGUpe3JldHVybiBoPWUsIiJ9KSk7dmFyIEk9ZS5zZWxlY3QoInRleHQubnVtcyIpLmNhbGwodS5mb250LHQuZm9udEZhbWlseXx8Zyx0LmZvbnRTaXplfHx5LHQuZm9udENvbG9yfHxiKS50ZXh0KHApLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwobC5wb3NpdGlvblRleHQsMCwwKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIpLEQ9ZS5zZWxlY3QoInRleHQubmFtZSIpLFA9MCxSPTA7aWYoaCYmaCE9PXApe0QuY2FsbCh1LmZvbnQsdC5mb250RmFtaWx5fHxnLHQuZm9udFNpemV8fHkseCkudGV4dChoKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsMCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyKTt2YXIgRj1ELm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtQPUYud2lkdGgrMiprLFI9Ri5oZWlnaHQrMiprfWVsc2UgRC5yZW1vdmUoKSxlLnNlbGVjdCgicmVjdCIpLnJlbW92ZSgpO2Uuc2VsZWN0KCJwYXRoIikuc3R5bGUoe2ZpbGw6dixzdHJva2U6Yn0pO3ZhciBCLE4saj1JLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxWPXQueGEuX29mZnNldCsodC54MCt0LngxKS8yLFU9dC55YS5fb2Zmc2V0Kyh0LnkwK3QueTEpLzIscT1NYXRoLmFicyh0LngxLXQueDApLEg9TWF0aC5hYnModC55MS10LnkwKSxHPWoud2lkdGgrdytrK1A7aWYodC50eTA9Qy1qLnRvcCx0LmJ4PWoud2lkdGgrMiprLHQuYnk9TWF0aC5tYXgoai5oZWlnaHQrMiprLFIpLHQuYW5jaG9yPSJzdGFydCIsdC50eHdpZHRoPWoud2lkdGgsdC50eDJ3aWR0aD1QLHQub2Zmc2V0PTAscyl0LnBvcz1WLEI9VStILzIrRzw9eixOPVUtSC8yLUc+PTAsInRvcCIhPT10LmlkZWFsQWxpZ24mJkJ8fCFOP0I/KFUrPUgvMix0LmFuY2hvcj0ic3RhcnQiKTp0LmFuY2hvcj0ibWlkZGxlIjooVS09SC8yLHQuYW5jaG9yPSJlbmQiKTtlbHNlIGlmKHQucG9zPVUsQj1WK3EvMitHPD1MLE49Vi1xLzItRz49MCwibGVmdCIhPT10LmlkZWFsQWxpZ24mJkJ8fCFOKWlmKEIpVis9cS8yLHQuYW5jaG9yPSJzdGFydCI7ZWxzZXt0LmFuY2hvcj0ibWlkZGxlIjt2YXIgWT1HLzIsVz1WK1ktTCxYPVYtWTtXPjAmJihWLT1XKSxYPDAmJihWKz0tWCl9ZWxzZSBWLT1xLzIsdC5hbmNob3I9ImVuZCI7SS5hdHRyKCJ0ZXh0LWFuY2hvciIsdC5hbmNob3IpLFAmJkQuYXR0cigidGV4dC1hbmNob3IiLHQuYW5jaG9yKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK1UrIikiKyhzPyJyb3RhdGUoIittKyIpIjoiIikpfSksQn1mdW5jdGlvbiBNKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQuZGVsKXIucmVtb3ZlKCk7ZWxzZXt2YXIgaT0iZW5kIj09PXQuYW5jaG9yPy0xOjEsYT1yLnNlbGVjdCgidGV4dC5udW1zIiksbz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W3QuYW5jaG9yXSxzPW8qKHcrayksYz1zK28qKHQudHh3aWR0aCtrKSxmPTAsaD10Lm9mZnNldDsibWlkZGxlIj09PXQuYW5jaG9yJiYocy09dC50eDJ3aWR0aC8yLGMrPXQudHh3aWR0aC8yK2spLGUmJihoKj0tXyxmPXQub2Zmc2V0KmIpLHIuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsIm1pZGRsZSI9PT10LmFuY2hvcj8iTS0iKyh0LmJ4LzIrdC50eDJ3aWR0aC8yKSsiLCIrKGgtdC5ieS8yKSsiaCIrdC5ieCsidiIrdC5ieSsiaC0iK3QuYngrIloiOiJNMCwwTCIrKGkqdytmKSsiLCIrKHcraCkrInYiKyh0LmJ5LzItdykrImgiK2kqdC5ieCsidi0iK3QuYnkrIkgiKyhpKncrZikrIlYiKyhoLXcpKyJaIiksYS5jYWxsKGwucG9zaXRpb25UZXh0LHMrZixoK3QudHkwLXQuYnkvMitrKSx0LnR4MndpZHRoJiYoci5zZWxlY3QoInRleHQubmFtZSIpLmNhbGwobC5wb3NpdGlvblRleHQsYytvKmsrZixoK3QudHkwLXQuYnkvMitrKSxyLnNlbGVjdCgicmVjdCIpLmNhbGwodS5zZXRSZWN0LGMrKG8tMSkqdC50eDJ3aWR0aC8yK2YsaC10LmJ5LzItMSx0LnR4MndpZHRoLHQuYnkrMikpfX0pfWZ1bmN0aW9uIFModCxlKXt2YXIgcj10LmluZGV4LG49dC50cmFjZXx8e30saT10LmNkWzBdLGE9dC5jZFtyXXx8e30scz1BcnJheS5pc0FycmF5KHIpP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG8uY2FzdE9wdGlvbihpLHIsdCl8fG8uZXh0cmFjdE9wdGlvbih7fSxuLCIiLGUpfTpmdW5jdGlvbih0LGUpe3JldHVybiBvLmV4dHJhY3RPcHRpb24oYSxuLHQsZSl9O2Z1bmN0aW9uIGwoZSxyLG4pe3ZhciBpPXMocixuKTtpJiYodFtlXT1pKX1pZihsKCJob3ZlcmluZm8iLCJoaSIsImhvdmVyaW5mbyIpLGwoImJnY29sb3IiLCJoYmciLCJob3ZlcmxhYmVsLmJnY29sb3IiKSxsKCJib3JkZXJDb2xvciIsImhiYyIsImhvdmVybGFiZWwuYm9yZGVyY29sb3IiKSxsKCJmb250RmFtaWx5IiwiaHRmIiwiaG92ZXJsYWJlbC5mb250LmZhbWlseSIpLGwoImZvbnRTaXplIiwiaHRzIiwiaG92ZXJsYWJlbC5mb250LnNpemUiKSxsKCJmb250Q29sb3IiLCJodGMiLCJob3ZlcmxhYmVsLmZvbnQuY29sb3IiKSxsKCJuYW1lTGVuZ3RoIiwiaG5sIiwiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoIiksdC5wb3NyZWY9InkiPT09ZXx8ImNsb3Nlc3QiPT09ZSYmImgiPT09bi5vcmllbnRhdGlvbj90LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMjp0LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMix0LngwPW8uY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9by5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1vLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPW8uY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpLHZvaWQgMCE9PXQueExhYmVsVmFsJiYodC54TGFiZWw9InhMYWJlbCJpbiB0P3QueExhYmVsOnAuaG92ZXJMYWJlbFRleHQodC54YSx0LnhMYWJlbFZhbCksdC54VmFsPXQueGEuYzJkKHQueExhYmVsVmFsKSksdm9pZCAwIT09dC55TGFiZWxWYWwmJih0LnlMYWJlbD0ieUxhYmVsImluIHQ/dC55TGFiZWw6cC5ob3ZlckxhYmVsVGV4dCh0LnlhLHQueUxhYmVsVmFsKSx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmdm9pZCAwPT09dC56TGFiZWwmJih0LnpMYWJlbD1TdHJpbmcodC56TGFiZWxWYWwpKSwhKGlzTmFOKHQueGVycil8fCJsb2ciPT09dC54YS50eXBlJiZ0LnhlcnI8PTApKXt2YXIgYz1wLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueGVycm5lZz90LnhMYWJlbCs9IiArIitjKyIgLyAtIitwLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueExhYmVsKz0iIFx4YjEgIitjLCJ4Ij09PWUmJih0LmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKHQueWVycil8fCJsb2ciPT09dC55YS50eXBlJiZ0LnllcnI8PTApKXt2YXIgdT1wLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueWVycm5lZz90LnlMYWJlbCs9IiArIit1KyIgLyAtIitwLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueUxhYmVsKz0iIFx4YjEgIit1LCJ5Ij09PWUmJih0LmRpc3RhbmNlKz0xKX12YXIgZj10LmhvdmVyaW5mb3x8dC50cmFjZS5ob3ZlcmluZm87cmV0dXJuIGYmJiJhbGwiIT09ZiYmKC0xPT09KGY9QXJyYXkuaXNBcnJheShmKT9mOmYuc3BsaXQoIisiKSkuaW5kZXhPZigieCIpJiYodC54TGFiZWw9dm9pZCAwKSwtMT09PWYuaW5kZXhPZigieSIpJiYodC55TGFiZWw9dm9pZCAwKSwtMT09PWYuaW5kZXhPZigieiIpJiYodC56TGFiZWw9dm9pZCAwKSwtMT09PWYuaW5kZXhPZigidGV4dCIpJiYodC50ZXh0PXZvaWQgMCksLTE9PT1mLmluZGV4T2YoIm5hbWUiKSYmKHQubmFtZT12b2lkIDApKSx0fWZ1bmN0aW9uIEUodCxlKXt2YXIgcixuLGk9ZS5jb250YWluZXIsbz1lLmZ1bGxMYXlvdXQscz1lLmV2ZW50LGw9ISF0LmhMaW5lUG9pbnQsYz0hIXQudkxpbmVQb2ludDtpZihpLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLGN8fGwpe3ZhciBoPWYuY29tYmluZShvLnBsb3RfYmdjb2xvcixvLnBhcGVyX2JnY29sb3IpO2lmKGwpe3ZhciBwLGQsZz10LmhMaW5lUG9pbnQ7cj1nJiZnLnhhLCJjdXJzb3IiPT09KG49ZyYmZy55YSkuc3Bpa2VzbmFwPyhwPXMucG9pbnRlclgsZD1zLnBvaW50ZXJZKToocD1yLl9vZmZzZXQrZy54LGQ9bi5fb2Zmc2V0K2cueSk7dmFyIHYsbSx5PWEucmVhZGFiaWxpdHkoZy5jb2xvcixoKTwxLjU/Zi5jb250cmFzdChoKTpnLmNvbG9yLHg9bi5zcGlrZW1vZGUsYj1uLnNwaWtldGhpY2tuZXNzLF89bi5zcGlrZWNvbG9yfHx5LHc9bi5fYm91bmRpbmdCb3gsaz0ody5sZWZ0K3cucmlnaHQpLzI8cD93LnJpZ2h0OncubGVmdDstMT09PXguaW5kZXhPZigidG9heGlzIikmJi0xPT09eC5pbmRleE9mKCJhY3Jvc3MiKXx8KC0xIT09eC5pbmRleE9mKCJ0b2F4aXMiKSYmKHY9ayxtPXApLC0xIT09eC5pbmRleE9mKCJhY3Jvc3MiKSYmKHY9bi5fY291bnRlclNwYW5bMF0sbT1uLl9jb3VudGVyU3BhblsxXSksaS5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTp2LHgyOm0seTE6ZCx5MjpkLCJzdHJva2Utd2lkdGgiOmIsc3Ryb2tlOl8sInN0cm9rZS1kYXNoYXJyYXkiOnUuZGFzaFN0eWxlKG4uc3Bpa2VkYXNoLGIpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxpLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOnYseDI6bSx5MTpkLHkyOmQsInN0cm9rZS13aWR0aCI6YisyLHN0cm9rZTpofSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSksLTEhPT14LmluZGV4T2YoIm1hcmtlciIpJiZpLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7Y3g6aysoInJpZ2h0IiE9PW4uc2lkZT9iOi1iKSxjeTpkLHI6YixmaWxsOl99KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX1pZihjKXt2YXIgVCxBLE09dC52TGluZVBvaW50O3I9TSYmTS54YSxuPU0mJk0ueWEsImN1cnNvciI9PT1yLnNwaWtlc25hcD8oVD1zLnBvaW50ZXJYLEE9cy5wb2ludGVyWSk6KFQ9ci5fb2Zmc2V0K00ueCxBPW4uX29mZnNldCtNLnkpO3ZhciBTLEUsQz1hLnJlYWRhYmlsaXR5KE0uY29sb3IsaCk8MS41P2YuY29udHJhc3QoaCk6TS5jb2xvcixMPXIuc3Bpa2Vtb2RlLHo9ci5zcGlrZXRoaWNrbmVzcyxPPXIuc3Bpa2Vjb2xvcnx8QyxJPXIuX2JvdW5kaW5nQm94LEQ9KEkudG9wK0kuYm90dG9tKS8yPEE/SS5ib3R0b206SS50b3A7LTE9PT1MLmluZGV4T2YoInRvYXhpcyIpJiYtMT09PUwuaW5kZXhPZigiYWNyb3NzIil8fCgtMSE9PUwuaW5kZXhPZigidG9heGlzIikmJihTPUQsRT1BKSwtMSE9PUwuaW5kZXhPZigiYWNyb3NzIikmJihTPXIuX2NvdW50ZXJTcGFuWzBdLEU9ci5fY291bnRlclNwYW5bMV0pLGkuaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6VCx4MjpULHkxOlMseTI6RSwic3Ryb2tlLXdpZHRoIjp6LHN0cm9rZTpPLCJzdHJva2UtZGFzaGFycmF5Ijp1LmRhc2hTdHlsZShyLnNwaWtlZGFzaCx6KX0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksaS5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpULHgyOlQseTE6Uyx5MjpFLCJzdHJva2Utd2lkdGgiOnorMixzdHJva2U6aH0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCkpLC0xIT09TC5pbmRleE9mKCJtYXJrZXIiKSYmaS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4OlQsY3k6RC0oInRvcCIhPT1yLnNpZGU/ejoteikscjp6LGZpbGw6T30pLmNsYXNzZWQoInNwaWtlbGluZSIsITApfX19ZnVuY3Rpb24gQyh0LGUpe3JldHVybiFlfHwoZS52TGluZVBvaW50IT09dC5fc3Bpa2Vwb2ludHMudkxpbmVQb2ludHx8ZS5oTGluZVBvaW50IT09dC5fc3Bpa2Vwb2ludHMuaExpbmVQb2ludCl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvZXZlbnRzIjo2ODksIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3IiOjcxMSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL2NvbG9yIjo1NzcsIi4uL2RyYWdlbGVtZW50Ijo1OTUsIi4uL2RyYXdpbmciOjU5OCwiLi9jb25zdGFudHMiOjYxMCwiLi9oZWxwZXJzIjo2MTIsZDM6MTU0LCJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sNjE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtyKCJob3ZlcmxhYmVsLmJnY29sb3IiLChpPWl8fHt9KS5iZ2NvbG9yKSxyKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixpLmJvcmRlcmNvbG9yKSxyKCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiLGkubmFtZWxlbmd0aCksbi5jb2VyY2VGb250KHIsImhvdmVybGFiZWwuZm9udCIsaS5mb250KX19LHsiLi4vLi4vbGliIjo3MDB9XSw2MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dD10fHx7fTsoZT1lfHx7fSkuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb247dmFyIHI9ZS5rZXlzfHxbXTtpZihyLmxlbmd0aD4wKXtmb3IodmFyIG49W10saT0wO2k8ci5sZW5ndGg7aSsrKW5baV09ImAiK3JbaV0rImAiOyJGaW5hbGx5LCB0aGUgdGVtcGxhdGUgc3RyaW5nIGhhcyBhY2Nlc3MgdG8gIiwxPT09ci5sZW5ndGg/InZhcmlhYmxlICIrblswXToidmFyaWFibGVzICIrbi5zbGljZSgwLC0xKS5qb2luKCIsICIpKyIgYW5kICIrbi5zbGljZSgtMSkrIi4ifXZhciBhPXt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6dC5lZGl0VHlwZXx8Im5vbmUifTtyZXR1cm4hMSE9PXQuYXJyYXlPayYmKGEuYXJyYXlPaz0hMCksYX19LHt9XSw2MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vZHJhZ2VsZW1lbnQiKSxvPXQoIi4vaGVscGVycyIpLHM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGw9dCgiLi9ob3ZlciIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJmeCIsY29uc3RhbnRzOnQoIi4vY29uc3RhbnRzIiksc2NoZW1hOntsYXlvdXQ6c30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnMsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6dCgiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOm8uZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0Om8uZ2V0Q2xvc2VzdCxpbmJveDpvLmluYm94LHF1YWRyYXR1cmU6by5xdWFkcmF0dXJlLGFwcGVuZEFycmF5UG9pbnRWYWx1ZTpvLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpLmNhc3RPcHRpb24odCxlLCJob3ZlcmxhYmVsLiIrcil9LGNhc3RIb3ZlcmluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpLmNhc3RPcHRpb24odCxyLCJob3ZlcmluZm8iLGZ1bmN0aW9uKHIpe3JldHVybiBpLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOnJ9LHtfbW9kdWxlOnQuX21vZHVsZX0sZSl9KX0saG92ZXI6bC5ob3Zlcix1bmhvdmVyOmEudW5ob3Zlcixsb25lSG92ZXI6bC5sb25lSG92ZXIsbXVsdGlIb3ZlcnM6bC5tdWx0aUhvdmVycyxsb25lVW5ob3ZlcjpmdW5jdGlvbih0KXt2YXIgZT1pLmlzRDNTZWxlY3Rpb24odCk/dDpuLnNlbGVjdCh0KTtlLnNlbGVjdEFsbCgiZy5ob3ZlcnRleHQiKS5yZW1vdmUoKSxlLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpfSxjbGljazp0KCIuL2NsaWNrIil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9kcmFnZWxlbWVudCI6NTk1LCIuL2F0dHJpYnV0ZXMiOjYwNywiLi9jYWxjIjo2MDgsIi4vY2xpY2siOjYwOSwiLi9jb25zdGFudHMiOjYxMCwiLi9kZWZhdWx0cyI6NjExLCIuL2hlbHBlcnMiOjYxMiwiLi9ob3ZlciI6NjEzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MTcsIi4vbGF5b3V0X2RlZmF1bHRzIjo2MTgsIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0cyI6NjE5LGQzOjE1NH1dLDYxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikoe2VkaXRUeXBlOiJub25lIn0pO2kuZmFtaWx5LmRmbHQ9bi5IT1ZFUkZPTlQsaS5zaXplLmRmbHQ9bi5IT1ZFUkZPTlRTSVpFLGUuZXhwb3J0cz17Y2xpY2ttb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJldmVudCIsInNlbGVjdCJdLGRmbHQ6ImV2ZW50IixlZGl0VHlwZToicGxvdCIsZXh0cmFzOlsibm9uZSJdfSxkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiem9vbSIsInBhbiIsInNlbGVjdCIsImxhc3NvIiwib3JiaXQiLCJ0dXJudGFibGUiLCExXSxkZmx0OiJ6b29tIixlZGl0VHlwZToibW9kZWJhciJ9LGhvdmVybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJjbG9zZXN0IiwhMV0sZWRpdFR5cGU6Im1vZGViYXIifSxob3ZlcmRpc3RhbmNlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGlzdGFuY2U6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOiJub25lIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LGZvbnQ6aSxuYW1lbGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoxNSxlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn0sc2VsZWN0ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJoIiwidiIsImQiLCJhbnkiXSxkZmx0OiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuL2NvbnN0YW50cyI6NjEwfV0sNjE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBvLHM9YSgiY2xpY2ttb2RlIik7InNlbGVjdCI9PT1hKCJkcmFnbW9kZSIpJiZhKCJzZWxlY3RkaXJlY3Rpb24iKSxlLl9oYXMoImNhcnRlc2lhbiIpP3MuaW5kZXhPZigic2VsZWN0Iik+LTE/bz0iY2xvc2VzdCI6KGUuX2lzSG9yaXo9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5fc2NhdHRlclN0YWNrT3B0c3x8e30sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9aS54YXhpcytpLnlheGlzLG89clthXXx8e30scz1vW2kuc3RhY2tncm91cF18fHt9O2lmKCJoIiE9PWkub3JpZW50YXRpb24mJiJoIiE9PXMub3JpZW50YXRpb24pcmV0dXJuITF9cmV0dXJuITB9KHIsZSksbz1lLl9pc0hvcml6PyJ5IjoieCIpOm89ImNsb3Nlc3QiLGEoImhvdmVybW9kZSIsbykmJihhKCJob3ZlcmRpc3RhbmNlIiksYSgic3Bpa2VkaXN0YW5jZSIpKTt2YXIgbD1lLl9oYXMoIm1hcGJveCIpLGM9ZS5faGFzKCJnZW8iKSx1PWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7Inpvb20iPT09ZS5kcmFnbW9kZSYmKChsfHxjKSYmMT09PXV8fGwmJmMmJjI9PT11KSYmKGUuZHJhZ21vZGU9InBhbiIpfX0seyIuLi8uLi9saWIiOjcwMCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjE3fV0sNjE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUsZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX0pfX0seyIuLi8uLi9saWIiOjcwMCwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2MTQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYxN31dLDYyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2xpYi9yZWdleCIpLmNvdW50ZXIsYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLmlkUmVnZXgscz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbD17cm93czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZWRpdFR5cGU6InBsb3QifSxyb3dvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIHRvIGJvdHRvbSIsImJvdHRvbSB0byB0b3AiXSxkZmx0OiJ0b3AgdG8gYm90dG9tIixlZGl0VHlwZToicGxvdCJ9LGNvbHVtbnM6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGVkaXRUeXBlOiJwbG90In0sc3VicGxvdHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZGltZW5zaW9uczoyLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W2koInh5IikudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHhheGVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W28ueC50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0seWF4ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbby55LnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxwYXR0ZXJuOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmRlcGVuZGVudCIsImNvdXBsZWQiXSxkZmx0OiJjb3VwbGVkIixlZGl0VHlwZToicGxvdCJ9LHhnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx5Z2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmEoe25hbWU6ImdyaWQiLGVkaXRUeXBlOiJwbG90Iixub0dyaWRDZWxsOiEwfSx7fSkseHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJvdHRvbSIsImJvdHRvbSBwbG90IiwidG9wIHBsb3QiLCJ0b3AiXSxkZmx0OiJib3R0b20gcGxvdCIsZWRpdFR5cGU6InBsb3QifSx5c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImxlZnQgcGxvdCIsInJpZ2h0IHBsb3QiLCJyaWdodCJdLGRmbHQ6ImxlZnQgcGxvdCIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9O2Z1bmN0aW9uIGModCxlLHIpe3ZhciBuPWVbcisiYXhlcyJdLGk9T2JqZWN0LmtleXMoKHQuX3NwbG9tQXhlc3x8e30pW3JdfHx7fSk7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bjppLmxlbmd0aD9pOnZvaWQgMH1mdW5jdGlvbiB1KHQsZSxyLG4saSxhKXt2YXIgbz1lKHQrImdhcCIscikscz1lKCJkb21haW4uIit0KTtlKHQrInNpZGUiLG4pO2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1zWzBdLHU9KHNbMV0tYykvKGktbyksZj11KigxLW8pLGg9MDtoPGk7aCsrKXt2YXIgcD1jK3UqaDtsW2E/aS0xLWg6aF09W3AscCtmXX1yZXR1cm4gbH1mdW5jdGlvbiBmKHQsZSxyLG4saSl7dmFyIGEsbz1uZXcgQXJyYXkocik7ZnVuY3Rpb24gcyh0LHIpey0xIT09ZS5pbmRleE9mKHIpJiZ2b2lkIDA9PT1uW3JdPyhvW3RdPXIsbltyXT10KTpvW3RdPSIifWlmKEFycmF5LmlzQXJyYXkodCkpZm9yKGE9MDthPHI7YSsrKXMoYSx0W2FdKTtlbHNlIGZvcihzKDAsaSksYT0xO2E8cjthKyspcyhhLGkrKGErMSkpO3JldHVybiBvfWUuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJncmlkIixzY2hlbWE6e2xheW91dDp7Z3JpZDpsfX0sbGF5b3V0QXR0cmlidXRlczpsLHNpemVEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPXQuZ3JpZHx8e30saT1jKGUsciwieCIpLGE9YyhlLHIsInkiKTtpZih0LmdyaWR8fGl8fGEpe3ZhciBvLGYsaD1BcnJheS5pc0FycmF5KHIuc3VicGxvdHMpJiZBcnJheS5pc0FycmF5KHIuc3VicGxvdHNbMF0pLHA9QXJyYXkuaXNBcnJheShpKSxkPUFycmF5LmlzQXJyYXkoYSksZz1wJiZpIT09ci54YXhlcyYmZCYmYSE9PXIueWF4ZXM7aD8obz1yLnN1YnBsb3RzLmxlbmd0aCxmPXIuc3VicGxvdHNbMF0ubGVuZ3RoKTooZCYmKG89YS5sZW5ndGgpLHAmJihmPWkubGVuZ3RoKSk7dmFyIHY9cy5uZXdDb250YWluZXIoZSwiZ3JpZCIpLG09VCgicm93cyIsbykseT1UKCJjb2x1bW5zIixmKTtpZihtKnk+MSl7aHx8cHx8ZHx8ImluZGVwZW5kZW50Ij09PVQoInBhdHRlcm4iKSYmKGg9ITApLHYuX2hhc1N1YnBsb3RHcmlkPWg7dmFyIHgsYixfPSJ0b3AgdG8gYm90dG9tIj09PVQoInJvd29yZGVyIiksdz1oPy4yOi4xLGs9aD8uMzouMTtnJiZlLl9zcGxvbUdyaWREZmx0JiYoeD1lLl9zcGxvbUdyaWREZmx0LnhzaWRlLGI9ZS5fc3Bsb21HcmlkRGZsdC55c2lkZSksdi5fZG9tYWlucz17eDp1KCJ4IixULHcseCx5KSx5OnUoInkiLFQsayxiLG0sXyl9fWVsc2UgZGVsZXRlIGUuZ3JpZH1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuIG4uY29lcmNlKHIsdixsLHQsZSl9fSxjb250ZW50RGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmdyaWQ7aWYociYmci5fZG9tYWlucyl7dmFyIG4saSxhLG8scyxsLHUsaD10LmdyaWR8fHt9LHA9ZS5fc3VicGxvdHMsZD1yLl9oYXNTdWJwbG90R3JpZCxnPXIucm93cyx2PXIuY29sdW1ucyxtPSJpbmRlcGVuZGVudCI9PT1yLnBhdHRlcm4seT1yLl9heGlzTWFwPXt9O2lmKGQpe3ZhciB4PWguc3VicGxvdHN8fFtdO2w9ci5zdWJwbG90cz1uZXcgQXJyYXkoZyk7dmFyIGI9MTtmb3Iobj0wO248ZztuKyspe3ZhciBfPWxbbl09bmV3IEFycmF5KHYpLHc9eFtuXXx8W107Zm9yKGk9MDtpPHY7aSsrKWlmKG0/KHM9MT09PWI/Inh5IjoieCIrYisieSIrYixiKyspOnM9d1tpXSxfW2ldPSIiLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihzKSl7aWYodT1zLmluZGV4T2YoInkiKSxhPXMuc2xpY2UoMCx1KSxvPXMuc2xpY2UodSksdm9pZCAwIT09eVthXSYmeVthXSE9PWl8fHZvaWQgMCE9PXlbb10mJnlbb10hPT1uKWNvbnRpbnVlO19baV09cyx5W2FdPWkseVtvXT1ufX19ZWxzZXt2YXIgaz1jKGUsaCwieCIpLFQ9YyhlLGgsInkiKTtyLnhheGVzPWYoayxwLnhheGlzLHYseSwieCIpLHIueWF4ZXM9ZihULHAueWF4aXMsZyx5LCJ5Iil9dmFyIEE9ci5fYW5jaG9ycz17fSxNPSJ0b3AgdG8gYm90dG9tIj09PXIucm93b3JkZXI7Zm9yKHZhciBTIGluIHkpe3ZhciBFLEMsTCx6PVMuY2hhckF0KDApLE89clt6KyJzaWRlIl07aWYoTy5sZW5ndGg8OClBW1NdPSJmcmVlIjtlbHNlIGlmKCJ4Ij09PXope2lmKCJ0Ij09PU8uY2hhckF0KDApPT09TT8oRT0wLEM9MSxMPWcpOihFPWctMSxDPS0xLEw9LTEpLGQpe3ZhciBJPXlbU107Zm9yKG49RTtuIT09TDtuKz1DKWlmKChzPWxbbl1bSV0pJiYodT1zLmluZGV4T2YoInkiKSxzLnNsaWNlKDAsdSk9PT1TKSl7QVtTXT1zLnNsaWNlKHUpO2JyZWFrfX1lbHNlIGZvcihuPUU7biE9PUw7bis9QylpZihvPXIueWF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKFMrbykpe0FbU109bzticmVha319ZWxzZSBpZigibCI9PT1PLmNoYXJBdCgwKT8oRT0wLEM9MSxMPXYpOihFPXYtMSxDPS0xLEw9LTEpLGQpe3ZhciBEPXlbU107Zm9yKG49RTtuIT09TDtuKz1DKWlmKChzPWxbRF1bbl0pJiYodT1zLmluZGV4T2YoInkiKSxzLnNsaWNlKHUpPT09Uykpe0FbU109cy5zbGljZSgwLHUpO2JyZWFrfX1lbHNlIGZvcihuPUU7biE9PUw7bis9QylpZihhPXIueGF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKGErUykpe0FbU109YTticmVha319fX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvcmVnZXgiOjcxNiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NTQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczfV0sNjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aSgiaW1hZ2UiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzb3VyY2U6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXpleDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemV5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiY29udGFpbiIsInN0cmV0Y2giXSxkZmx0OiJjb250YWluIixlZGl0VHlwZToiYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHg6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueC50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueS50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifSl9LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NTR9XSw2MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5pbWFnZXMsZj1lLl9pZC5jaGFyQXQoMCksaD0wO2g8dS5sZW5ndGg7aCsrKWlmKGM9ImltYWdlc1siK2grIl0uIiwobD11W2hdKVtmKyJyZWYiXT09PWUuX2lkKXt2YXIgcD1sW2ZdLGQ9bFsic2l6ZSIrZl0sZz1udWxsLHY9bnVsbDtpZihvKXtnPWkocCxlLnJhbmdlKTt2YXIgbT1kL01hdGgucG93KDEwLGcpLzI7dj0yKk1hdGgubG9nKG0rTWF0aC5zcXJ0KDErbSptKSkvTWF0aC5MTjEwfWVsc2Ugdj0oZz1NYXRoLnBvdygxMCxwKSkqKE1hdGgucG93KDEwLGQvMiktTWF0aC5wb3coMTAsLWQvMikpO24oZyk/bih2KXx8KHY9bnVsbCk6KGc9bnVsbCx2PW51bGwpLGEoYytmLGcpLGEoYysic2l6ZSIrZix2KX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjcyNiwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDYyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgcz1hKCJzb3VyY2UiKTtpZighYSgidmlzaWJsZSIsISFzKSlyZXR1cm4gZTthKCJsYXllciIpLGEoInhhbmNob3IiKSxhKCJ5YW5jaG9yIiksYSgic2l6ZXgiKSxhKCJzaXpleSIpLGEoInNpemluZyIpLGEoIm9wYWNpdHkiKTtmb3IodmFyIGw9e19mdWxsTGF5b3V0OnJ9LGM9WyJ4IiwieSJdLHU9MDt1PDI7dSsrKXt2YXIgZj1jW3VdLGg9aS5jb2VyY2VSZWYodCxlLGwsZiwicGFwZXIiKTtpZigicGFwZXIiIT09aClpLmdldEZyb21JZChsLGgpLl9pbWdJbmRpY2VzLnB1c2goZS5faW5kZXgpO2kuY29lcmNlUG9zaXRpb24oZSxsLGEsaCxmLDApfXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOiJpbWFnZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czpzfSl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc0NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi9hdHRyaWJ1dGVzIjo2MjF9XSw2MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2RyYXdpbmciKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLHM9dC5fZnVsbExheW91dCxsPVtdLGM9e30sdT1bXTtmb3Iocj0wO3I8cy5pbWFnZXMubGVuZ3RoO3IrKyl7dmFyIGY9cy5pbWFnZXNbcl07aWYoZi52aXNpYmxlKWlmKCJiZWxvdyI9PT1mLmxheWVyJiYicGFwZXIiIT09Zi54cmVmJiYicGFwZXIiIT09Zi55cmVmKXtlPWYueHJlZitmLnlyZWY7dmFyIGg9cy5fcGxvdHNbZV07aWYoIWgpe3UucHVzaChmKTtjb250aW51ZX1oLm1haW5wbG90JiYoZT1oLm1haW5wbG90LmlkKSxjW2VdfHwoY1tlXT1bXSksY1tlXS5wdXNoKGYpfWVsc2UiYWJvdmUiPT09Zi5sYXllcj9sLnB1c2goZik6dS5wdXNoKGYpfXZhciBwPXt4OntsZWZ0OntzaXppbmc6InhNaW4iLG9mZnNldDowfSxjZW50ZXI6e3NpemluZzoieE1pZCIsb2Zmc2V0Oi0uNX0scmlnaHQ6e3NpemluZzoieE1heCIsb2Zmc2V0Oi0xfX0seTp7dG9wOntzaXppbmc6IllNaW4iLG9mZnNldDowfSxtaWRkbGU6e3NpemluZzoiWU1pZCIsb2Zmc2V0Oi0uNX0sYm90dG9tOntzaXppbmc6IllNYXgiLG9mZnNldDotMX19fTtmdW5jdGlvbiBkKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKCF0aGlzLmltZ3x8dGhpcy5pbWcuc3JjIT09ZS5zb3VyY2Upe3IuYXR0cigieG1sbnMiLG8uc3ZnKTt2YXIgaT1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXt2YXIgbj1uZXcgSW1hZ2U7ZnVuY3Rpb24gaSgpe3IucmVtb3ZlKCksdCgpfXRoaXMuaW1nPW4sbi5zZXRBdHRyaWJ1dGUoImNyb3NzT3JpZ2luIiwiYW5vbnltb3VzIiksbi5vbmVycm9yPWksbi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLndpZHRoPXRoaXMud2lkdGgsZS5oZWlnaHQ9dGhpcy5oZWlnaHQsZS5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh0aGlzLDAsMCk7dmFyIG49ZS50b0RhdGFVUkwoImltYWdlL3BuZyIpO3IuYXR0cigieGxpbms6aHJlZiIsbiksdCgpfSxyLm9uKCJlcnJvciIsaSksbi5zcmM9ZS5zb3VyY2V9LmJpbmQodGhpcykpO3QuX3Byb21pc2VzLnB1c2goaSl9fWZ1bmN0aW9uIGcoZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1hLmdldEZyb21JZCh0LGUueHJlZiksbD1hLmdldEZyb21JZCh0LGUueXJlZiksYz1zLl9zaXplLHU9bz9NYXRoLmFicyhvLmwycChlLnNpemV4KS1vLmwycCgwKSk6ZS5zaXpleCpjLncsZj1sP01hdGguYWJzKGwubDJwKGUuc2l6ZXkpLWwubDJwKDApKTplLnNpemV5KmMuaCxoPXUqcC54W2UueGFuY2hvcl0ub2Zmc2V0LGQ9ZipwLnlbZS55YW5jaG9yXS5vZmZzZXQsZz1wLnhbZS54YW5jaG9yXS5zaXppbmcrcC55W2UueWFuY2hvcl0uc2l6aW5nLHY9KG8/by5yMnAoZS54KStvLl9vZmZzZXQ6ZS54KmMudytjLmwpK2gsbT0obD9sLnIycChlLnkpK2wuX29mZnNldDpjLmgtZS55KmMuaCtjLnQpK2Q7c3dpdGNoKGUuc2l6aW5nKXtjYXNlImZpbGwiOmcrPSIgc2xpY2UiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6Zz0ibm9uZSJ9ci5hdHRyKHt4OnYseTptLHdpZHRoOnUsaGVpZ2h0OmYscHJlc2VydmVBc3BlY3RSYXRpbzpnLG9wYWNpdHk6ZS5vcGFjaXR5fSk7dmFyIHk9KG8/by5faWQ6IiIpKyhsP2wuX2lkOiIiKTtpLnNldENsaXBVcmwocix5PyJjbGlwIitzLl91aWQreTpudWxsLHQpfXZhciB2PXMuX2ltYWdlTG93ZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YSh1KSxtPXMuX2ltYWdlVXBwZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShsKTt2LmVudGVyKCkuYXBwZW5kKCJpbWFnZSIpLG0uZW50ZXIoKS5hcHBlbmQoImltYWdlIiksdi5leGl0KCkucmVtb3ZlKCksbS5leGl0KCkucmVtb3ZlKCksdi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KSxtLmVhY2goZnVuY3Rpb24odCl7ZC5iaW5kKHRoaXMpKHQpLGcuYmluZCh0aGlzKSh0KX0pO3ZhciB5PU9iamVjdC5rZXlzKHMuX3Bsb3RzKTtmb3Iocj0wO3I8eS5sZW5ndGg7cisrKXtlPXlbcl07dmFyIHg9cy5fcGxvdHNbZV07aWYoeC5pbWFnZWxheWVyKXt2YXIgYj14LmltYWdlbGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoY1tlXXx8W10pO2IuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KX19fX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6Njc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9kcmF3aW5nIjo1OTgsZDM6MTU0fV0sNjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJpbWFnZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImltYWdlcyIpLGRyYXc6dCgiLi9kcmF3IiksY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjc1OCwiLi9hdHRyaWJ1dGVzIjo2MjEsIi4vY29udmVydF9jb29yZHMiOjYyMiwiLi9kZWZhdWx0cyI6NjIzLCIuL2RyYXciOjYyNH1dLDYyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxlZ2VuZCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToibGVnZW5kIn0sZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6InYiLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZW9yZGVyOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJyZXZlcnNlZCIsImdyb3VwZWQiXSxleHRyYXM6WyJub3JtYWwiXSxlZGl0VHlwZToibGVnZW5kIn0sdHJhY2Vncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJsZWdlbmQifSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjEuMDIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToibGVnZW5kIn0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDoxLGVkaXRUeXBlOiJsZWdlbmQifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGVkaXRUeXBlOiJsZWdlbmQifX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NCwiLi4vY29sb3IvYXR0cmlidXRlcyI6NTc2fV0sNjI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2Nyb2xsQmFyV2lkdGg6NixzY3JvbGxCYXJNaW5IZWlnaHQ6MjAsc2Nyb2xsQmFyQ29sb3I6IiM4MDhCQTQiLHNjcm9sbEJhck1hcmdpbjo0LHRleHRPZmZzZXRYOjQwfX0se31dLDYyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYyx1LGYsaCxwPXQubGVnZW5kfHx7fSxkPTAsZz0hMSx2PSJub3JtYWwiLG09MDttPHIubGVuZ3RoO20rKyl7dmFyIHk9clttXTt5LnZpc2libGUmJigoeS5zaG93bGVnZW5kfHx5Ll9kZmx0U2hvd0xlZ2VuZCkmJihkKysseS5zaG93bGVnZW5kJiYoZz0hMCwobi50cmFjZUlzKHksInBpZSIpfHwhMD09PXkuX2lucHV0LnNob3dsZWdlbmQpJiZkKyspKSwobi50cmFjZUlzKHksImJhciIpJiYic3RhY2siPT09ZS5iYXJtb2RlfHwtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiXS5pbmRleE9mKHkuZmlsbCkpJiYodj1sLmlzR3JvdXBlZCh7dHJhY2VvcmRlcjp2fSk/Imdyb3VwZWQrcmV2ZXJzZWQiOiJyZXZlcnNlZCIpLHZvaWQgMCE9PXkubGVnZW5kZ3JvdXAmJiIiIT09eS5sZWdlbmRncm91cCYmKHY9bC5pc1JldmVyc2VkKHt0cmFjZW9yZGVyOnZ9KT8icmV2ZXJzZWQrZ3JvdXBlZCI6Imdyb3VwZWQiKSl9dmFyIHg9aS5jb2VyY2UodCxlLHMsInNob3dsZWdlbmQiLGcmJmQ+MSk7aWYoITEhPT14fHxwLnVpcmV2aXNpb24pe3ZhciBiPWEubmV3Q29udGFpbmVyKGUsImxlZ2VuZCIpO2lmKHcoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksITEhPT14KXtpZih3KCJiZ2NvbG9yIixlLnBhcGVyX2JnY29sb3IpLHcoImJvcmRlcmNvbG9yIiksdygiYm9yZGVyd2lkdGgiKSxpLmNvZXJjZUZvbnQodywiZm9udCIsZS5mb250KSx3KCJvcmllbnRhdGlvbiIpLCJoIj09PWIub3JpZW50YXRpb24pe3ZhciBfPXQueGF4aXM7bi5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoXyk/KGM9MCxmPSJsZWZ0Iix1PTEuMSxoPSJib3R0b20iKTooYz0wLGY9ImxlZnQiLHU9LS4xLGg9InRvcCIpfXcoInRyYWNlb3JkZXIiLHYpLGwuaXNHcm91cGVkKGUubGVnZW5kKSYmdygidHJhY2Vncm91cGdhcCIpLHcoIngiLGMpLHcoInhhbmNob3IiLGYpLHcoInkiLHUpLHcoInlhbmNob3IiLGgpLHcoInZhbGlnbiIpLGkubm9uZU9yQWxsKHAsYixbIngiLCJ5Il0pfX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGkuY29lcmNlKHAsYixvLHQsZSl9fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6ODAxLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2F0dHJpYnV0ZXMiOjYyNiwiLi9oZWxwZXJzIjo2MzJ9XSw2Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIvZXZlbnRzIiksbD10KCIuLi9kcmFnZWxlbWVudCIpLGM9dCgiLi4vZHJhd2luZyIpLHU9dCgiLi4vY29sb3IiKSxmPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGg9dCgiLi9oYW5kbGVfY2xpY2siKSxwPXQoIi4vY29uc3RhbnRzIiksZD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIiksZz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iiksdj1nLkxJTkVfU1BBQ0lORyxtPWcuRlJPTV9UTCx5PWcuRlJPTV9CUix4PXQoIi4vZ2V0X2xlZ2VuZF9kYXRhIiksYj10KCIuL3N0eWxlIiksXz10KCIuL2hlbHBlcnMiKSx3PWQuREJMQ0xJQ0tERUxBWTtmdW5jdGlvbiBrKHQsZSxyLG4saSl7dmFyIGE9ci5kYXRhKClbMF1bMF0udHJhY2Usbz17ZXZlbnQ6aSxub2RlOnIubm9kZSgpLGN1cnZlTnVtYmVyOmEuaW5kZXgsZXhwYW5kZWRJbmRleDphLl9leHBhbmRlZEluZGV4LGRhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dCxmcmFtZXM6dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxjb25maWc6dC5fY29udGV4dCxmdWxsRGF0YTp0Ll9mdWxsRGF0YSxmdWxsTGF5b3V0OnQuX2Z1bGxMYXlvdXR9O2lmKGEuX2dyb3VwJiYoby5ncm91cD1hLl9ncm91cCksInBpZSI9PT1hLnR5cGUmJihvLmxhYmVsPXIuZGF0dW0oKVswXS5sYWJlbCksITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9sZWdlbmRjbGljayIsbykpaWYoMT09PW4pZS5fY2xpY2tUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoKHIsdCxuKX0sdyk7ZWxzZSBpZigyPT09bil7ZS5fY2xpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQoZS5fY2xpY2tUaW1lb3V0KSx0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTAsITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9sZWdlbmRkb3VibGVjbGljayIsbykmJmgocix0LG4pfX1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgbj10LmRhdGEoKVswXVswXSxhPWUuX2Z1bGxMYXlvdXQscz1uLnRyYWNlLGw9by50cmFjZUlzKHMsInBpZSIpLHU9cy5pbmRleCxoPWUuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dCYmIWwsZD1sP24ubGFiZWw6cy5uYW1lO2EubWV0YSYmKGQ9aS50ZW1wbGF0ZVN0cmluZyhkLHttZXRhOmEubWV0YX0pKTt2YXIgZz1pLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IiwibGVnZW5kdGV4dCIpO2Z1bmN0aW9uIG0ocil7Zi5jb252ZXJ0VG9Uc3BhbnMocixlLGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5kYXRhKClbMF1bMF07aWYoIXIudHJhY2Uuc2hvd2xlZ2VuZClyZXR1cm4gdm9pZCB0LnJlbW92ZSgpO3ZhciBuLGksYT10LnNlbGVjdCgiZ1tjbGFzcyo9bWF0aC1ncm91cF0iKSxvPWEubm9kZSgpLHM9ZS5fZnVsbExheW91dC5sZWdlbmQuZm9udC5zaXplKnY7aWYobyl7dmFyIGw9Yy5iQm94KG8pO249bC5oZWlnaHQsaT1sLndpZHRoLGMuc2V0VHJhbnNsYXRlKGEsMCxuLzQpfWVsc2V7dmFyIHU9dC5zZWxlY3QoIi5sZWdlbmR0ZXh0IiksaD1mLmxpbmVDb3VudCh1KSxkPXUubm9kZSgpO249cypoLGk9ZD9jLmJCb3goZCkud2lkdGg6MDt2YXIgZz1zKiguMysoMS1oKS8yKTtmLnBvc2l0aW9uVGV4dCh1LHAudGV4dE9mZnNldFgsZyl9ci5saW5lSGVpZ2h0PXMsci5oZWlnaHQ9TWF0aC5tYXgobiwxNikrMyxyLndpZHRoPWl9KHQsZSl9KX1nLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuY2FsbChjLmZvbnQsYS5sZWdlbmQuZm9udCkudGV4dChoP0EoZCxyKTpkKSxmLnBvc2l0aW9uVGV4dChnLHAudGV4dE9mZnNldFgsMCksaD9nLmNhbGwoZi5tYWtlRWRpdGFibGUse2dkOmUsdGV4dDpkfSkuY2FsbChtKS5vbigiZWRpdCIsZnVuY3Rpb24odCl7dGhpcy50ZXh0KEEodCxyKSkuY2FsbChtKTt2YXIgYT1uLnRyYWNlLl9mdWxsSW5wdXR8fHt9LHM9e307aWYoby5oYXNUcmFuc2Zvcm0oYSwiZ3JvdXBieSIpKXt2YXIgbD1vLmdldFRyYW5zZm9ybUluZGljZXMoYSwiZ3JvdXBieSIpLGM9bFtsLmxlbmd0aC0xXSxmPWkua2V5ZWRDb250YWluZXIoYSwidHJhbnNmb3Jtc1siK2MrIl0uc3R5bGVzIiwidGFyZ2V0IiwidmFsdWUubmFtZSIpO2Yuc2V0KG4udHJhY2UuX2dyb3VwLHQpLHM9Zi5jb25zdHJ1Y3RVcGRhdGUoKX1lbHNlIHMubmFtZT10O3JldHVybiBvLmNhbGwoIl9ndWlSZXN0eWxlIixlLHMsdSl9KTptKGcpfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj1NYXRoLm1heCg0LGUpO2lmKHQmJnQudHJpbSgpLmxlbmd0aD49ci8yKXJldHVybiB0O2Zvcih2YXIgbj1yLSh0PXR8fCIiKS5sZW5ndGg7bj4wO24tLSl0Kz0iICI7cmV0dXJuIHR9ZnVuY3Rpb24gTSh0LGUpe3ZhciByLGE9MSxvPWkuZW5zdXJlU2luZ2xlKHQsInJlY3QiLCJsZWdlbmR0b2dnbGUiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmNhbGwodS5maWxsLCJyZ2JhKDAsMCwwLDApIil9KTtvLm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7KHI9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU8dz9hKz0xOihhPTEsZS5fbGVnZW5kTW91c2VEb3duVGltZT1yKX0pLG8ub24oIm1vdXNldXAiLGZ1bmN0aW9uKCl7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcj1lLl9mdWxsTGF5b3V0LmxlZ2VuZDsobmV3IERhdGUpLmdldFRpbWUoKS1lLl9sZWdlbmRNb3VzZURvd25UaW1lPncmJihhPU1hdGgubWF4KGEtMSwxKSksayhlLHIsdCxhLG4uZXZlbnQpfX0pfWZ1bmN0aW9uIFModCxlLHIpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1hLmxlZ2VuZCxzPW8uYm9yZGVyd2lkdGgsbD1fLmlzR3JvdXBlZChvKSx1PTA7aWYoby5fd2lkdGg9MCxvLl9oZWlnaHQ9MCxfLmlzVmVydGljYWwobykpbCYmZS5lYWNoKGZ1bmN0aW9uKHQsZSl7Yy5zZXRUcmFuc2xhdGUodGhpcywwLGUqby50cmFjZWdyb3VwZ2FwKX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9ZS5oZWlnaHQsbj1lLndpZHRoO2Muc2V0VHJhbnNsYXRlKHRoaXMscyw1K3Mrby5faGVpZ2h0K3IvMiksby5faGVpZ2h0Kz1yLG8uX3dpZHRoPU1hdGgubWF4KG8uX3dpZHRoLG4pfSksby5fd2lkdGgrPTQ1KzIqcyxvLl9oZWlnaHQrPTEwKzIqcyxsJiYoby5faGVpZ2h0Kz0oby5fbGdyb3Vwc0xlbmd0aC0xKSpvLnRyYWNlZ3JvdXBnYXApLHU9NDA7ZWxzZSBpZihsKXt2YXIgZixoPTAscD0wLGQ9ZS5kYXRhKCksZz0wO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciB2PWRbZl0sbT12Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS53aWR0aH0pLHk9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsbSkseD12LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2VbMF0uaGVpZ2h0fSwwKTtwPU1hdGgubWF4KHAseSksaD1NYXRoLm1heChoLHgpLGc9TWF0aC5tYXgoZyx2Lmxlbmd0aCl9cCs9NSxwKz00MDt2YXIgYj1bby5fd2lkdGhdLHc9W10saz0wO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspe2EuX3NpemUudzxzK28uX3dpZHRoKzUrcD8oYltiLmxlbmd0aC0xXT1iWzBdLG8uX3dpZHRoPXAsaysrKTpvLl93aWR0aCs9cCtzO3ZhciBUPWsqaDtUKz1rPjA/by50cmFjZWdyb3VwZ2FwOjAsdy5wdXNoKFQpLGIucHVzaChvLl93aWR0aCl9ZS5lYWNoKGZ1bmN0aW9uKHQsZSl7Yy5zZXRUcmFuc2xhdGUodGhpcyxiW2VdLHdbZV0pfSksZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRyYWNlcyIpLGU9MDt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHI9dFswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcywwLDUrcytlK3IvMiksZSs9cn0pfSk7dmFyIEE9d1t3Lmxlbmd0aC0xXStoO28uX2hlaWdodD0xMCsyKnMrQTt2YXIgTT1NYXRoLm1heC5hcHBseShudWxsLGIpO28uX3dpZHRoPU0rcCs0MCxvLl93aWR0aCs9MipzfWVsc2V7dmFyIFM9MCxFPTAsQz0wLEw9MCx6PTA7ci5lYWNoKGZ1bmN0aW9uKHQpe0M9TWF0aC5tYXgoNDArdFswXS53aWR0aCxDKSx6Kz00MCt0WzBdLndpZHRoKzV9KTt2YXIgTz1hLl9zaXplLnc+cyt6LTU7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1PPzQwK3RbMF0ud2lkdGg6QztzK0wrNStyPmEuX3NpemUudyYmKEw9MCxTKz1FLG8uX2hlaWdodCs9RSxFPTApLGMuc2V0VHJhbnNsYXRlKHRoaXMscytMLDUrcytlLmhlaWdodC8yK1MpLG8uX3dpZHRoKz01K3IsTCs9NStyLEU9TWF0aC5tYXgoZS5oZWlnaHQsRSl9KSxPP28uX2hlaWdodD1FOm8uX2hlaWdodCs9RSxvLl93aWR0aCs9MipzLG8uX2hlaWdodCs9MTArMipzfW8uX3dpZHRoPU1hdGguY2VpbChvLl93aWR0aCksby5faGVpZ2h0PU1hdGguY2VpbChvLl9oZWlnaHQpO3ZhciBJPXQuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dHx8dC5fY29udGV4dC5lZGl0cy5sZWdlbmRQb3NpdGlvbjtyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZHRvZ2dsZSIpO2Muc2V0UmVjdChyLDAsLWUuaGVpZ2h0LzIsKEk/MDpvLl93aWR0aCkrdSxlLmhlaWdodCl9KX1mdW5jdGlvbiBFKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQubGVnZW5kLHI9ImxlZnQiO2kuaXNSaWdodEFuY2hvcihlKT9yPSJyaWdodCI6aS5pc0NlbnRlckFuY2hvcihlKSYmKHI9ImNlbnRlciIpO3ZhciBuPSJ0b3AiO2kuaXNCb3R0b21BbmNob3IoZSk/bj0iYm90dG9tIjppLmlzTWlkZGxlQW5jaG9yKGUpJiYobj0ibWlkZGxlIiksYS5hdXRvTWFyZ2luKHQsImxlZ2VuZCIse3g6ZS54LHk6ZS55LGw6ZS5fd2lkdGgqbVtyXSxyOmUuX3dpZHRoKnlbcl0sYjplLl9oZWlnaHQqeVtuXSx0OmUuX2hlaWdodCptW25dfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj0ibGVnZW5kIitlLl91aWQ7aWYoZS5faW5mb2xheWVyJiZ0LmNhbGNkYXRhKXt0Ll9sZWdlbmRNb3VzZURvd25UaW1lfHwodC5fbGVnZW5kTW91c2VEb3duVGltZT0wKTt2YXIgcz1lLmxlZ2VuZCxmPWUuc2hvd2xlZ2VuZCYmeCh0LmNhbGNkYXRhLHMpLGg9ZS5oaWRkZW5sYWJlbHN8fFtdO2lmKCFlLnNob3dsZWdlbmR8fCFmLmxlbmd0aClyZXR1cm4gZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLnJlbW92ZSgpLGUuX3RvcGRlZnMuc2VsZWN0KCIjIityKS5yZW1vdmUoKSx2b2lkIGEuYXV0b01hcmdpbih0LCJsZWdlbmQiKTtmb3IodmFyIGQ9MCxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciB2PTA7djxmW2ddLmxlbmd0aDt2Kyspe3ZhciBfPWZbZ11bdl1bMF0sdz1fLnRyYWNlLEE9by50cmFjZUlzKHcsInBpZSIpP18ubGFiZWw6dy5uYW1lO2Q9TWF0aC5tYXgoZCxBJiZBLmxlbmd0aHx8MCl9dmFyIEM9ITEsTD1pLmVuc3VyZVNpbmdsZShlLl9pbmZvbGF5ZXIsImciLCJsZWdlbmQiLGZ1bmN0aW9uKHQpe3QuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxDPSEwfSksej1pLmVuc3VyZVNpbmdsZUJ5SWQoZS5fdG9wZGVmcywiY2xpcFBhdGgiLHIsZnVuY3Rpb24odCl7dC5hcHBlbmQoInJlY3QiKX0pLE89aS5lbnN1cmVTaW5nbGUoTCwicmVjdCIsImJnIixmdW5jdGlvbih0KXt0LmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pO08uY2FsbCh1LnN0cm9rZSxzLmJvcmRlcmNvbG9yKS5jYWxsKHUuZmlsbCxzLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHMuYm9yZGVyd2lkdGgrInB4Iik7dmFyIEk9aS5lbnN1cmVTaW5nbGUoTCwiZyIsInNjcm9sbGJveCIpLEQ9aS5lbnN1cmVTaW5nbGUoTCwicmVjdCIsInNjcm9sbGJhciIsZnVuY3Rpb24odCl7dC5hdHRyKHtyeDoyMCxyeTozLHdpZHRoOjAsaGVpZ2h0OjB9KS5jYWxsKHUuZmlsbCwiIzgwOEJBNCIpfSksUD1JLnNlbGVjdEFsbCgiZy5ncm91cHMiKS5kYXRhKGYpO1AuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyb3VwcyIpLFAuZXhpdCgpLnJlbW92ZSgpO3ZhciBSPVAuc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmRhdGEoaS5pZGVudGl0eSk7Ui5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2VzIiksUi5leGl0KCkucmVtb3ZlKCksUi5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtyZXR1cm4gby50cmFjZUlzKGUsInBpZSIpPy0xIT09aC5pbmRleE9mKHRbMF0ubGFiZWwpPy41OjE6ImxlZ2VuZG9ubHkiPT09ZS52aXNpYmxlPy41OjF9KS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuY2FsbChULHQsZCl9KS5jYWxsKGIsdCkuZWFjaChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLmNhbGwoTSx0KX0pLGkuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe0MmJihTKHQsUCxSKSxFKHQpKTt2YXIgdT1lLndpZHRoLGY9ZS5oZWlnaHQ7Uyh0LFAsUikscy5faGVpZ2h0PmY/ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5sZWdlbmQscj0ibGVmdCI7aS5pc1JpZ2h0QW5jaG9yKGUpP3I9InJpZ2h0IjppLmlzQ2VudGVyQW5jaG9yKGUpJiYocj0iY2VudGVyIik7YS5hdXRvTWFyZ2luKHQsImxlZ2VuZCIse3g6ZS54LHk6LjUsbDplLl93aWR0aCptW3JdLHI6ZS5fd2lkdGgqeVtyXSxiOjAsdDowfSl9KHQpOkUodCk7dmFyIGg9ZS5fc2l6ZSxkPWgubCtoLncqcy54LGc9aC50K2guaCooMS1zLnkpO2kuaXNSaWdodEFuY2hvcihzKT9kLT1zLl93aWR0aDppLmlzQ2VudGVyQW5jaG9yKHMpJiYoZC09cy5fd2lkdGgvMiksaS5pc0JvdHRvbUFuY2hvcihzKT9nLT1zLl9oZWlnaHQ6aS5pc01pZGRsZUFuY2hvcihzKSYmKGctPXMuX2hlaWdodC8yKTt2YXIgdj1zLl93aWR0aCx4PWgudzt2Png/KGQ9aC5sLHY9eCk6KGQrdj51JiYoZD11LXYpLGQ8MCYmKGQ9MCksdj1NYXRoLm1pbih1LWQscy5fd2lkdGgpKTt2YXIgYixfLHcsVCxBPXMuX2hlaWdodCxNPWguaDtpZihBPk0/KGc9aC50LEE9TSk6KGcrQT5mJiYoZz1mLUEpLGc8MCYmKGc9MCksQT1NYXRoLm1pbihmLWcscy5faGVpZ2h0KSksYy5zZXRUcmFuc2xhdGUoTCxkLGcpLEQub24oIi5kcmFnIixudWxsKSxMLm9uKCJ3aGVlbCIsbnVsbCkscy5faGVpZ2h0PD1BfHx0Ll9jb250ZXh0LnN0YXRpY1Bsb3QpTy5hdHRyKHt3aWR0aDp2LXMuYm9yZGVyd2lkdGgsaGVpZ2h0OkEtcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgvMix5OnMuYm9yZGVyd2lkdGgvMn0pLGMuc2V0VHJhbnNsYXRlKEksMCwwKSx6LnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOnYtMipzLmJvcmRlcndpZHRoLGhlaWdodDpBLTIqcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgseTpzLmJvcmRlcndpZHRofSksYy5zZXRDbGlwVXJsKEkscix0KSxjLnNldFJlY3QoRCwwLDAsMCwwKSxkZWxldGUgcy5fc2Nyb2xsWTtlbHNle3ZhciBGLEIsTj1NYXRoLm1heChwLnNjcm9sbEJhck1pbkhlaWdodCxBKkEvcy5faGVpZ2h0KSxqPUEtTi0yKnAuc2Nyb2xsQmFyTWFyZ2luLFY9cy5faGVpZ2h0LUEsVT1qL1YscT1NYXRoLm1pbihzLl9zY3JvbGxZfHwwLFYpO08uYXR0cih7d2lkdGg6di0yKnMuYm9yZGVyd2lkdGgrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6QS1zLmJvcmRlcndpZHRoLHg6cy5ib3JkZXJ3aWR0aC8yLHk6cy5ib3JkZXJ3aWR0aC8yfSksei5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDp2LTIqcy5ib3JkZXJ3aWR0aCtwLnNjcm9sbEJhcldpZHRoK3Auc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDpBLTIqcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgseTpzLmJvcmRlcndpZHRoK3F9KSxjLnNldENsaXBVcmwoSSxyLHQpLEcocSxOLFUpLEwub24oIndoZWVsIixmdW5jdGlvbigpe0cocT1pLmNvbnN0cmFpbihzLl9zY3JvbGxZK24uZXZlbnQuZGVsdGFZL2oqViwwLFYpLE4sVSksMCE9PXEmJnEhPT1WJiZuLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9KTt2YXIgSD1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe0Y9bi5ldmVudC5zb3VyY2VFdmVudC5jbGllbnRZLEI9cX0pLm9uKCJkcmFnIixmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7Mj09PXQuYnV0dG9uc3x8dC5jdHJsS2V5fHxHKHE9aS5jb25zdHJhaW4oKHQuY2xpZW50WS1GKS9VK0IsMCxWKSxOLFUpfSk7RC5jYWxsKEgpfWZ1bmN0aW9uIEcoZSxyLG4pe3MuX3Njcm9sbFk9dC5fZnVsbExheW91dC5sZWdlbmQuX3Njcm9sbFk9ZSxjLnNldFRyYW5zbGF0ZShJLDAsLWUpLGMuc2V0UmVjdChELHYscC5zY3JvbGxCYXJNYXJnaW4rZSpuLHAuc2Nyb2xsQmFyV2lkdGgsciksei5zZWxlY3QoInJlY3QiKS5hdHRyKHt5OnMuYm9yZGVyd2lkdGgrZX0pfXQuX2NvbnRleHQuZWRpdHMubGVnZW5kUG9zaXRpb24mJihMLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCksbC5pbml0KHtlbGVtZW50Okwubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoTCk7dz10LngsVD10Lnl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe3ZhciByPXcrdCxuPVQrZTtjLnNldFRyYW5zbGF0ZShMLHIsbiksYj1sLmFsaWduKHIsMCxoLmwsaC5sK2gudyxzLnhhbmNob3IpLF89bC5hbGlnbihuLDAsaC50K2guaCxoLnQscy55YW5jaG9yKX0sZG9uZUZuOmZ1bmN0aW9uKCl7dm9pZCAwIT09YiYmdm9pZCAwIT09XyYmby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQseyJsZWdlbmQueCI6YiwibGVnZW5kLnkiOl99KX0sY2xpY2tGbjpmdW5jdGlvbihyLG4pe3ZhciBpPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcudHJhY2VzIikuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbi5jbGllbnRYPj10LmxlZnQmJm4uY2xpZW50WDw9dC5yaWdodCYmbi5jbGllbnRZPj10LnRvcCYmbi5jbGllbnRZPD10LmJvdHRvbX0pO2kuc2l6ZSgpPjAmJmsodCxMLGkscixuKX19KSl9XSx0KX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY3MiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6Njc2LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2V2ZW50cyI6Njg5LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcyNCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY29sb3IiOjU3NywiLi4vZHJhZ2VsZW1lbnQiOjU5NSwiLi4vZHJhd2luZyI6NTk4LCIuL2NvbnN0YW50cyI6NjI3LCIuL2dldF9sZWdlbmRfZGF0YSI6NjMwLCIuL2hhbmRsZV9jbGljayI6NjMxLCIuL2hlbHBlcnMiOjYzMiwiLi9zdHlsZSI6NjM0LGQzOjE1NH1dLDYzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPXt9LHM9W10sbD0hMSxjPXt9LHU9MDtmdW5jdGlvbiBmKHQscil7aWYoIiIhPT10JiZpLmlzR3JvdXBlZChlKSktMT09PXMuaW5kZXhPZih0KT8ocy5wdXNoKHQpLGw9ITAsb1t0XT1bW3JdXSk6b1t0XS5wdXNoKFtyXSk7ZWxzZXt2YXIgbj0ifn5pIit1O3MucHVzaChuKSxvW25dPVtbcl1dLHUrK319Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGg9dFtyXSxwPWhbMF0sZD1wLnRyYWNlLGc9ZC5sZWdlbmRncm91cDtpZihkLnZpc2libGUmJmQuc2hvd2xlZ2VuZClpZihuLnRyYWNlSXMoZCwicGllIikpZm9yKGNbZ118fChjW2ddPXt9KSxhPTA7YTxoLmxlbmd0aDthKyspe3ZhciB2PWhbYV0ubGFiZWw7Y1tnXVt2XXx8KGYoZyx7bGFiZWw6dixjb2xvcjpoW2FdLmNvbG9yLGk6aFthXS5pLHRyYWNlOmQscHRzOmhbYV0ucHRzfSksY1tnXVt2XT0hMCl9ZWxzZSBmKGcscCl9aWYoIXMubGVuZ3RoKXJldHVybltdO3ZhciBtLHkseD1zLmxlbmd0aDtpZihsJiZpLmlzR3JvdXBlZChlKSlmb3IoeT1uZXcgQXJyYXkoeCkscj0wO3I8eDtyKyspbT1vW3Nbcl1dLHlbcl09aS5pc1JldmVyc2VkKGUpP20ucmV2ZXJzZSgpOm07ZWxzZXtmb3IoeT1bbmV3IEFycmF5KHgpXSxyPTA7cjx4O3IrKyltPW9bc1tyXV1bMF0seVswXVtpLmlzUmV2ZXJzZWQoZSk/eC1yLTE6cl09bTt4PTF9cmV0dXJuIGUuX2xncm91cHNMZW5ndGg9eCx5fX0seyIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2hlbHBlcnMiOjYzMn1dLDYzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT0hMDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCFlLl9kcmFnZ2VkJiYhZS5fZWRpdGluZyl7dmFyIG8scyxsLGMsdSxmPWUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzP2UuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLnNsaWNlKCk6W10saD10LmRhdGEoKVswXVswXSxwPWUuX2Z1bGxEYXRhLGQ9aC50cmFjZSxnPWQubGVnZW5kZ3JvdXAsdj17fSxtPVtdLHk9W10seD1bXTtpZigxPT09ciYmYSYmZS5kYXRhJiZlLl9jb250ZXh0LnNob3dUaXBzPyhuLm5vdGlmaWVyKG4uXyhlLCJEb3VibGUtY2xpY2sgb24gbGVnZW5kIHRvIGlzb2xhdGUgb25lIHRyYWNlIiksImxvbmciKSxhPSExKTphPSExLGkudHJhY2VJcyhkLCJwaWUiKSl7dmFyIGI9aC5sYWJlbCxfPWYuaW5kZXhPZihiKTsxPT09cj8tMT09PV8/Zi5wdXNoKGIpOmYuc3BsaWNlKF8sMSk6Mj09PXImJihmPVtdLGUuY2FsY2RhdGFbMF0uZm9yRWFjaChmdW5jdGlvbih0KXtiIT09dC5sYWJlbCYmZi5wdXNoKHQubGFiZWwpfSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWYubGVuZ3RoJiYtMT09PV8mJihmPVtdKSksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsImhpZGRlbmxhYmVscyIsZil9ZWxzZXt2YXIgdyxrPWcmJmcubGVuZ3RoLFQ9W107aWYoaylmb3Iobz0wO288cC5sZW5ndGg7bysrKSh3PXBbb10pLnZpc2libGUmJncubGVnZW5kZ3JvdXA9PT1nJiZULnB1c2gobyk7aWYoMT09PXIpe3ZhciBBO3N3aXRjaChkLnZpc2libGUpe2Nhc2UhMDpBPSJsZWdlbmRvbmx5IjticmVhaztjYXNlITE6QT0hMTticmVhaztjYXNlImxlZ2VuZG9ubHkiOkE9ITB9aWYoaylmb3Iobz0wO288cC5sZW5ndGg7bysrKSExIT09cFtvXS52aXNpYmxlJiZwW29dLmxlZ2VuZGdyb3VwPT09ZyYmTyhwW29dLEEpO2Vsc2UgTyhkLEEpfWVsc2UgaWYoMj09PXIpe3ZhciBNLFMsRT0hMDtmb3Iobz0wO288cC5sZW5ndGg7bysrKWlmKCEocFtvXT09PWQpJiYhKE09ayYmcFtvXS5sZWdlbmRncm91cD09PWcpJiYhMD09PXBbb10udmlzaWJsZSYmIWkudHJhY2VJcyhwW29dLCJub3RMZWdlbmRJc29sYXRhYmxlIikpe0U9ITE7YnJlYWt9Zm9yKG89MDtvPHAubGVuZ3RoO28rKylpZighMSE9PXBbb10udmlzaWJsZSYmIWkudHJhY2VJcyhwW29dLCJub3RMZWdlbmRJc29sYXRhYmxlIikpc3dpdGNoKGQudmlzaWJsZSl7Y2FzZSJsZWdlbmRvbmx5IjpPKHBbb10sITApO2JyZWFrO2Nhc2UhMDpTPSEhRXx8ImxlZ2VuZG9ubHkiLE09cFtvXT09PWR8fGsmJnBbb10ubGVnZW5kZ3JvdXA9PT1nLE8ocFtvXSwhIU18fFMpfX1mb3Iobz0wO288eS5sZW5ndGg7bysrKWlmKGw9eVtvXSl7dmFyIEM9bC5jb25zdHJ1Y3RVcGRhdGUoKSxMPU9iamVjdC5rZXlzKEMpO2ZvcihzPTA7czxMLmxlbmd0aDtzKyspYz1MW3NdLCh2W2NdPXZbY118fFtdKVt4W29dXT1DW2NdfWZvcih1PU9iamVjdC5rZXlzKHYpLG89MDtvPHUubGVuZ3RoO28rKylmb3IoYz11W29dLHM9MDtzPG0ubGVuZ3RoO3MrKyl2W2NdLmhhc093blByb3BlcnR5KHMpfHwodltjXVtzXT12b2lkIDApO2kuY2FsbCgiX2d1aVJlc3R5bGUiLGUsdixtKX19ZnVuY3Rpb24geih0LGUscil7dmFyIG49bS5pbmRleE9mKHQpLGk9dltlXTtyZXR1cm4gaXx8KGk9dltlXT1bXSksLTE9PT1tLmluZGV4T2YodCkmJihtLnB1c2godCksbj1tLmxlbmd0aC0xKSxpW25dPXIsbn1mdW5jdGlvbiBPKHQsZSl7dmFyIHI9dC5fZnVsbElucHV0O2lmKGkuaGFzVHJhbnNmb3JtKHIsImdyb3VwYnkiKSl7dmFyIGE9eVtyLmluZGV4XTtpZighYSl7dmFyIG89aS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsImdyb3VwYnkiKSxzPW9bby5sZW5ndGgtMV07YT1uLmtleWVkQ29udGFpbmVyKHIsInRyYW5zZm9ybXNbIitzKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLnZpc2libGUiKSx5W3IuaW5kZXhdPWF9dmFyIGw9YS5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWwmJihsPSEwKSwhMSE9PWwmJmEuc2V0KHQuX2dyb3VwLGUpLHhbci5pbmRleF09eihyLmluZGV4LCJ2aXNpYmxlIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmZTt6KHIuaW5kZXgsInZpc2libGUiLGMpfX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5fV0sNjMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuaXNHcm91cGVkPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09KHQudHJhY2VvcmRlcnx8IiIpLmluZGV4T2YoImdyb3VwZWQiKX0sci5pc1ZlcnRpY2FsPWZ1bmN0aW9uKHQpe3JldHVybiJoIiE9PXQub3JpZW50YXRpb259LHIuaXNSZXZlcnNlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fCIiKS5pbmRleE9mKCJyZXZlcnNlZCIpfX0se31dLDYzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToibGVnZW5kIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpLHN0eWxlOnQoIi4vc3R5bGUiKX19LHsiLi9hdHRyaWJ1dGVzIjo2MjYsIi4vZGVmYXVsdHMiOjYyOCwiLi9kcmF3Ijo2MjksIi4vc3R5bGUiOjYzNH1dLDYzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksYz10KCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWEuZW5zdXJlU2luZ2xlKHIsImciLCJsYXllcnMiKTtpLnN0eWxlKCJvcGFjaXR5Iix0WzBdLnRyYWNlLm9wYWNpdHkpO3ZhciBvPWUuX2Z1bGxMYXlvdXQubGVnZW5kLnZhbGlnbixzPXRbMF0ubGluZUhlaWdodCxsPXRbMF0uaGVpZ2h0O2lmKCJtaWRkbGUiIT09byYmcyYmbCl7dmFyIGM9e3RvcDoxLGJvdHRvbTotMX1bb10qKC41KihzLWwrMykpO2kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitjKyIpIil9ZWxzZSBpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7aS5zZWxlY3RBbGwoImcubGVnZW5kZmlsbCIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGZpbGwiLCEwKSxpLnNlbGVjdEFsbCgiZy5sZWdlbmRsaW5lcyIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGxpbmVzIiwhMCk7dmFyIHU9aS5zZWxlY3RBbGwoImcubGVnZW5kc3ltYm9scyIpLmRhdGEoW3RdKTt1LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kc3ltYm9scyIsITApLHUuc2VsZWN0QWxsKCJnLmxlZ2VuZHBvaW50cyIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZHBvaW50cyIsITApfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9W107IndhdGVyZmFsbCI9PT1lLnR5cGUmJmUudmlzaWJsZSYmKHI9dFswXS5oYXNUb3RhbHM/W1siaW5jcmVhc2luZyIsIk0tNiwtNlY2SDBaIl0sWyJ0b3RhbHMiLCJNNiw2SDBMLTYsLTZILTBaIl0sWyJkZWNyZWFzaW5nIiwiTTYsNlYtNkgwWiJdXTpbWyJpbmNyZWFzaW5nIiwiTS02LC02VjZINloiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SC02WiJdXSk7dmFyIGk9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmR3YXRlcmZhbGwiKS5kYXRhKHIpO2kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmR3YXRlcmZhbGwiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLGkuZXhpdCgpLnJlbW92ZSgpLGkuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbdFswXV0ubWFya2VyO3IuYXR0cigiZCIsdFsxXSkuc3R5bGUoInN0cm9rZS13aWR0aCIsaS5saW5lLndpZHRoKyJweCIpLmNhbGwocy5maWxsLGkuY29sb3IpLGkubGluZS53aWR0aCYmci5jYWxsKHMuc3Ryb2tlLGkubGluZS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPWUubWFya2VyfHx7fSxhPXIubGluZXx8e30sbz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZGJhciIpLmRhdGEoaS50cmFjZUlzKGUsImJhciIpP1t0XTpbXSk7by5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZGJhciIsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9dFswXSxvPShpLm1sdysxfHxhLndpZHRoKzEpLTE7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvKyJweCIpLmNhbGwocy5maWxsLGkubWN8fHIuY29sb3IpLG8mJmUuY2FsbChzLnN0cm9rZSxpLm1sY3x8YS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kYm94IikuZGF0YShpLnRyYWNlSXMoZSwiYm94LXZpb2xpbiIpJiZlLnZpc2libGU/W3RdOltdKTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kYm94IiwhMCkuYXR0cigiZCIsIk02LDZILTZWLTZINloiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lLmxpbmUud2lkdGgscj1uLnNlbGVjdCh0aGlzKTtyLnN0eWxlKCJzdHJva2Utd2lkdGgiLHQrInB4IikuY2FsbChzLmZpbGwsZS5maWxsY29sb3IpLHQmJnMuc3Ryb2tlKHIsZS5saW5lLmNvbG9yKX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRwaWUiKS5kYXRhKGkudHJhY2VJcyhlLCJwaWUiKSYmZS52aXNpYmxlP1t0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZHBpZSIsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksci5leGl0KCkucmVtb3ZlKCksci5zaXplKCkmJnIuY2FsbChjLHRbMF0sZSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbMF0udHJhY2UsaT1yLnZpc2libGUmJnIuZmlsbCYmIm5vbmUiIT09ci5maWxsLGE9bC5oYXNMaW5lcyhyKSxzPXIuY29udG91cnMsYz0hMSx1PSExO2lmKHMpe3ZhciBmPXMuY29sb3Jpbmc7ImxpbmVzIj09PWY/Yz0hMDphPSJub25lIj09PWZ8fCJoZWF0bWFwIj09PWZ8fHMuc2hvd2xpbmVzLCJjb25zdHJhaW50Ij09PXMudHlwZT9pPSI9IiE9PXMuX29wZXJhdGlvbjoiZmlsbCIhPT1mJiYiaGVhdG1hcCIhPT1mfHwodT0hMCl9dmFyIGg9bC5oYXNNYXJrZXJzKHIpfHxsLmhhc1RleHQocikscD1pfHx1LGQ9YXx8YyxnPWh8fCFwPyJNNSwwIjpkPyJNNSwtMiI6Ik01LC0zIix2PW4uc2VsZWN0KHRoaXMpLG09di5zZWxlY3QoIi5sZWdlbmRmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShpfHx1P1t0XTpbXSk7bS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWZpbGwiLCEwKSxtLmV4aXQoKS5yZW1vdmUoKSxtLmF0dHIoImQiLGcrImgzMHY2aC0zMHoiKS5jYWxsKGk/by5maWxsR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIG49ImxlZ2VuZGZpbGwtIityLnVpZDtvLmdyYWRpZW50KHQsZSxuLCJob3Jpem9udGFscmV2ZXJzZWQiLHIuY29sb3JzY2FsZSwiZmlsbCIpfX0pO3ZhciB5PXYuc2VsZWN0KCIubGVnZW5kbGluZXMiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKGF8fGM/W3RdOltdKTt5LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLHkuZXhpdCgpLnJlbW92ZSgpLHkuYXR0cigiZCIsZysoYz8ibDMwLDAuMDAwMSI6ImgzMCIpKS5jYWxsKGE/by5saW5lR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIG49ImxlZ2VuZGxpbmUtIityLnVpZDtvLmxpbmVHcm91cFN0eWxlKHQpLG8uZ3JhZGllbnQodCxlLG4sImhvcml6b250YWxyZXZlcnNlZCIsci5jb2xvcnNjYWxlLCJzdHJva2UiKX19KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIHIsaSxzPXRbMF0sYz1zLnRyYWNlLHU9bC5oYXNNYXJrZXJzKGMpLGY9bC5oYXNUZXh0KGMpLGg9bC5oYXNMaW5lcyhjKTtmdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj1hLm5lc3RlZFByb3BlcnR5KGMsdCkuZ2V0KCksaT1hLmlzQXJyYXlPclR5cGVkQXJyYXkobikmJmU/ZShuKTpuO2lmKHIpe2lmKGk8clswXSlyZXR1cm4gclswXTtpZihpPnJbMV0pcmV0dXJuIHJbMV19cmV0dXJuIGl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdFswXX1pZih1fHxmfHxoKXt2YXIgZz17fSx2PXt9O2lmKHUpe2cubWM9cCgibWFya2VyLmNvbG9yIixkKSxnLm14PXAoIm1hcmtlci5zeW1ib2wiLGQpLGcubW89cCgibWFya2VyLm9wYWNpdHkiLGEubWVhbixbLjIsMV0pLGcubWxjPXAoIm1hcmtlci5saW5lLmNvbG9yIixkKSxnLm1sdz1wKCJtYXJrZXIubGluZS53aWR0aCIsYS5tZWFuLFswLDVdKSx2Lm1hcmtlcj17c2l6ZXJlZjoxLHNpemVtaW46MSxzaXplbW9kZToiZGlhbWV0ZXIifTt2YXIgbT1wKCJtYXJrZXIuc2l6ZSIsYS5tZWFuLFsyLDE2XSk7Zy5tcz1tLHYubWFya2VyLnNpemU9bX1oJiYodi5saW5lPXt3aWR0aDpwKCJsaW5lLndpZHRoIixkLFswLDEwXSl9KSxmJiYoZy50eD0iQWEiLGcudHA9cCgidGV4dHBvc2l0aW9uIixkKSxnLnRzPTEwLGcudGM9cCgidGV4dGZvbnQuY29sb3IiLGQpLGcudGY9cCgidGV4dGZvbnQuZmFtaWx5IixkKSkscj1bYS5taW5FeHRlbmQocyxnKV0sKGk9YS5taW5FeHRlbmQoYyx2KSkuc2VsZWN0ZWRwb2ludHM9bnVsbH12YXIgeT1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikseD15LnNlbGVjdEFsbCgicGF0aC5zY2F0dGVycHRzIikuZGF0YSh1P3I6W10pO3guZW50ZXIoKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJzY2F0dGVycHRzIiwhMCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIikseC5leGl0KCkucmVtb3ZlKCkseC5jYWxsKG8ucG9pbnRTdHlsZSxpLGUpLHUmJihyWzBdLm1yYz0zKTt2YXIgYj15LnNlbGVjdEFsbCgiZy5wb2ludHRleHQiKS5kYXRhKGY/cjpbXSk7Yi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50dGV4dCIsITApLmFwcGVuZCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLGIuZXhpdCgpLnJlbW92ZSgpLGIuc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChvLnRleHRQb2ludFN0eWxlLGksZSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZGNhbmRsZSIpLmRhdGEoImNhbmRsZXN0aWNrIj09PWUudHlwZSYmZS52aXNpYmxlP1t0LHRdOltdKTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kY2FuZGxlIiwhMCkuYXR0cigiZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSC04TS04LDZWLTZIOFoiOiJNMTUsMEg4TTgsLTZWNkgtOFoifSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goZnVuY3Rpb24odCxyKXt2YXIgaT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sYT1pLmxpbmUud2lkdGgsbz1uLnNlbGVjdCh0aGlzKTtvLnN0eWxlKCJzdHJva2Utd2lkdGgiLGErInB4IikuY2FsbChzLmZpbGwsaS5maWxsY29sb3IpLGEmJnMuc3Ryb2tlKG8saS5saW5lLmNvbG9yKX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRvaGxjIikuZGF0YSgib2hsYyI9PT1lLnR5cGUmJmUudmlzaWJsZT9bdCx0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZG9obGMiLCEwKS5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiBlPyJNLTE1LDBIME0tOCwtNlYwIjoiTTE1LDBIME04LDZWMCJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaChmdW5jdGlvbih0LHIpe3ZhciBpPWVbcj8iaW5jcmVhc2luZyI6ImRlY3JlYXNpbmciXSxhPWkubGluZS53aWR0aCxsPW4uc2VsZWN0KHRoaXMpO2wuc3R5bGUoImZpbGwiLCJub25lIikuY2FsbChvLmRhc2hMaW5lLGkubGluZS5kYXNoLGEpLGEmJnMuc3Ryb2tlKGwsaS5saW5lLmNvbG9yKX0pfSl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZSI6MTAzNywiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL2NvbG9yIjo1NzcsIi4uL2RyYXdpbmciOjU5OCxkMzoxNTR9XSw2MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vLi4vYnVpbGQvcGxvdGljb24iKSxsPW8uXyxjPWUuZXhwb3J0cz17fTtmdW5jdGlvbiB1KHQsZSl7dmFyIHIsaSxvPWUuY3VycmVudFRhcmdldCxzPW8uZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxsPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxjPXQuX2Z1bGxMYXlvdXQsdT17fSxmPWEubGlzdCh0LG51bGwsITApLGg9Im9uIjtpZigiem9vbSI9PT1zKXt2YXIgcCxkPSJpbiI9PT1sPy41OjIsZz0oMStkKS8yLHY9KDEtZCkvMjtmb3IoaT0wO2k8Zi5sZW5ndGg7aSsrKWlmKCEocj1mW2ldKS5maXhlZHJhbmdlKWlmKHA9ci5fbmFtZSwiYXV0byI9PT1sKXVbcCsiLmF1dG9yYW5nZSJdPSEwO2Vsc2UgaWYoInJlc2V0Ij09PWwpe2lmKHZvaWQgMD09PXIuX3JhbmdlSW5pdGlhbCl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNle3ZhciBtPXIuX3JhbmdlSW5pdGlhbC5zbGljZSgpO3VbcCsiLnJhbmdlWzBdIl09bVswXSx1W3ArIi5yYW5nZVsxXSJdPW1bMV19dm9pZCAwIT09ci5fc2hvd1NwaWtlSW5pdGlhbCYmKHVbcCsiLnNob3dzcGlrZXMiXT1yLl9zaG93U3Bpa2VJbml0aWFsLCJvbiIhPT1ofHxyLl9zaG93U3Bpa2VJbml0aWFsfHwoaD0ib2ZmIikpfWVsc2V7dmFyIHk9W3IucjJsKHIucmFuZ2VbMF0pLHIucjJsKHIucmFuZ2VbMV0pXSx4PVtnKnlbMF0rdip5WzFdLGcqeVsxXSt2KnlbMF1dO3VbcCsiLnJhbmdlWzBdIl09ci5sMnIoeFswXSksdVtwKyIucmFuZ2VbMV0iXT1yLmwycih4WzFdKX1jLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWh9ZWxzZXtpZigiaG92ZXJtb2RlIiE9PXN8fCJ4IiE9PWwmJiJ5IiE9PWwpe2lmKCJob3Zlcm1vZGUiPT09cyYmImNsb3Nlc3QiPT09bCl7Zm9yKGk9MDtpPGYubGVuZ3RoO2krKylyPWZbaV0sIm9uIiE9PWh8fHIuc2hvd3NwaWtlc3x8KGg9Im9mZiIpO2MuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aH19ZWxzZSBsPWMuX2lzSG9yaXo/InkiOiJ4IixvLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLGwpO3Vbc109bH1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCx1KX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldCxpPXIuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxhPXIuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxvPXQuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLmdsM2Qscz17fSxsPWkuc3BsaXQoIi4iKSxjPTA7YzxvLmxlbmd0aDtjKyspc1tvW2NdKyIuIitsWzFdXT1hO3ZhciB1PSJwYW4iPT09YT9hOiJ6b29tIjtzLmRyYWdtb2RlPXUsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQscyl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5nbDNkLG89e30scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9bCsiLmNhbWVyYSIsdT1pW2xdLl9zY2VuZTsicmVzZXRMYXN0U2F2ZSI9PT1yPyhvW2MrIi51cCJdPXUudmlld0luaXRpYWwudXAsb1tjKyIuZXllIl09dS52aWV3SW5pdGlhbC5leWUsb1tjKyIuY2VudGVyIl09dS52aWV3SW5pdGlhbC5jZW50ZXIpOiJyZXNldERlZmF1bHQiPT09ciYmKG9bYysiLnVwIl09bnVsbCxvW2MrIi5leWUiXT1udWxsLG9bYysiLmNlbnRlciJdPW51bGwpfW4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LG8pfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQsbj1yLl9wcmV2aW91c1ZhbCxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5nbDNkLG89WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxzPXt9LGw9e307aWYobilsPW4sci5fcHJldmlvdXNWYWw9bnVsbDtlbHNle2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGY9aVt1XSxoPXUrIi5ob3Zlcm1vZGUiO3NbaF09Zi5ob3Zlcm1vZGUsbFtoXT0hMTtmb3IodmFyIHA9MDtwPDM7cCsrKXt2YXIgZD1vW3BdLGc9dSsiLiIrZCsiLnNob3dzcGlrZXMiO2xbZ109ITEsc1tnXT1mW2RdLnNob3dzcGlrZXN9fXIuX3ByZXZpb3VzVmFsPXN9cmV0dXJuIGx9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0LHM9by5fc3VicGxvdHMuZ2VvLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXSx1PW9bY107aWYoInpvb20iPT09aSl7dmFyIGY9dS5wcm9qZWN0aW9uLnNjYWxlLGg9ImluIj09PWE/MipmOi41KmY7bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsYysiLnByb2plY3Rpb24uc2NhbGUiLGgpfWVsc2UicmVzZXQiPT09aSYmbSh0LCJnZW8iKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3JldHVybiFlLmhvdmVybW9kZSYmKGUuX2hhcygiY2FydGVzaWFuIik/ZS5faXNIb3Jpej8ieSI6IngiOiJjbG9zZXN0Iil9ZnVuY3Rpb24gdih0KXt2YXIgZT1nKHQpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LCJob3Zlcm1vZGUiLGUpfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxpPXIuX3N1YnBsb3RzW2VdLGE9e30sbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz1pW29dLGw9cltzXS5fc3VicGxvdC52aWV3SW5pdGlhbCxjPU9iamVjdC5rZXlzKGwpLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XTthW3MrIi4iK2ZdPWxbZl19bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsYSl9Yy50b0ltYWdlPXtuYW1lOiJ0b0ltYWdlIix0aXRsZTpmdW5jdGlvbih0KXt2YXIgZT0odC5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9uc3x8e30pLmZvcm1hdHx8InBuZyI7cmV0dXJuIGwodCwicG5nIj09PWU/IkRvd25sb2FkIHBsb3QgYXMgYSBwbmciOiJEb3dubG9hZCBwbG90Iil9LGljb246cy5jYW1lcmEsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9ucyxyPXtmb3JtYXQ6ZS5mb3JtYXR8fCJwbmcifTtvLm5vdGlmaWVyKGwodCwiVGFraW5nIHNuYXBzaG90IC0gdGhpcyBtYXkgdGFrZSBhIGZldyBzZWNvbmRzIiksImxvbmciKSwic3ZnIiE9PXIuZm9ybWF0JiZvLmlzSUUoKSYmKG8ubm90aWZpZXIobCh0LCJJRSBvbmx5IHN1cHBvcnRzIHN2Zy4gIENoYW5naW5nIGZvcm1hdCB0byBzdmcuIiksImxvbmciKSxyLmZvcm1hdD0ic3ZnIiksWyJmaWxlbmFtZSIsIndpZHRoIiwiaGVpZ2h0Iiwic2NhbGUiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF0mJihyW3RdPWVbdF0pfSksbi5jYWxsKCJkb3dubG9hZEltYWdlIix0LHIpLnRoZW4oZnVuY3Rpb24oZSl7by5ub3RpZmllcihsKHQsIlNuYXBzaG90IHN1Y2NlZWRlZCIpKyIgLSAiK2UsImxvbmciKX0pLmNhdGNoKGZ1bmN0aW9uKCl7by5ub3RpZmllcihsKHQsIlNvcnJ5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIGRvd25sb2FkaW5nIHlvdXIgc25hcHNob3QhIiksImxvbmciKX0pfX0sYy5zZW5kRGF0YVRvQ2xvdWQ9e25hbWU6InNlbmREYXRhVG9DbG91ZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiRWRpdCBpbiBDaGFydCBTdHVkaW8iKX0saWNvbjpzLmRpc2ssY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSxjLnpvb20yZD17bmFtZToiem9vbTJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJab29tIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Inpvb20iLGljb246cy56b29tYm94LGNsaWNrOnV9LGMucGFuMmQ9e25hbWU6InBhbjJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJQYW4iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOnMucGFuLGNsaWNrOnV9LGMuc2VsZWN0MmQ9e25hbWU6InNlbGVjdDJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJCb3ggU2VsZWN0Iil9LGF0dHI6ImRyYWdtb2RlIix2YWw6InNlbGVjdCIsaWNvbjpzLnNlbGVjdGJveCxjbGljazp1fSxjLmxhc3NvMmQ9e25hbWU6Imxhc3NvMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIkxhc3NvIFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJsYXNzbyIsaWNvbjpzLmxhc3NvLGNsaWNrOnV9LGMuem9vbUluMmQ9e25hbWU6Inpvb21JbjJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246cy56b29tX3BsdXMsY2xpY2s6dX0sYy56b29tT3V0MmQ9e25hbWU6Inpvb21PdXQyZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246cy56b29tX21pbnVzLGNsaWNrOnV9LGMuYXV0b1NjYWxlMmQ9e25hbWU6ImF1dG9TY2FsZTJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJBdXRvc2NhbGUiKX0sYXR0cjoiem9vbSIsdmFsOiJhdXRvIixpY29uOnMuYXV0b3NjYWxlLGNsaWNrOnV9LGMucmVzZXRTY2FsZTJkPXtuYW1lOiJyZXNldFNjYWxlMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IGF4ZXMiKX0sYXR0cjoiem9vbSIsdmFsOiJyZXNldCIsaWNvbjpzLmhvbWUsY2xpY2s6dX0sYy5ob3ZlckNsb3Nlc3RDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiU2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp1fSxjLmhvdmVyQ29tcGFyZUNhcnRlc2lhbj17bmFtZToiaG92ZXJDb21wYXJlQ2FydGVzaWFuIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJDb21wYXJlIGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2lzSG9yaXo/InkiOiJ4In0saWNvbjpzLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OiJuZSIsY2xpY2s6dX0sYy56b29tM2Q9e25hbWU6Inpvb20zZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ6b29tIixpY29uOnMuem9vbWJveCxjbGljazpmfSxjLnBhbjNkPXtuYW1lOiJwYW4zZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiUGFuIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6InBhbiIsaWNvbjpzLnBhbixjbGljazpmfSxjLm9yYml0Um90YXRpb249e25hbWU6Im9yYml0Um90YXRpb24iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIk9yYml0YWwgcm90YXRpb24iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoib3JiaXQiLGljb246c1siM2Rfcm90YXRlIl0sY2xpY2s6Zn0sYy50YWJsZVJvdGF0aW9uPXtuYW1lOiJ0YWJsZVJvdGF0aW9uIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUdXJudGFibGUgcm90YXRpb24iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoidHVybnRhYmxlIixpY29uOnNbInotYXhpcyJdLGNsaWNrOmZ9LGMucmVzZXRDYW1lcmFEZWZhdWx0M2Q9e25hbWU6InJlc2V0Q2FtZXJhRGVmYXVsdDNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJSZXNldCBjYW1lcmEgdG8gZGVmYXVsdCIpfSxhdHRyOiJyZXNldERlZmF1bHQiLGljb246cy5ob21lLGNsaWNrOmh9LGMucmVzZXRDYW1lcmFMYXN0U2F2ZTNkPXtuYW1lOiJyZXNldENhbWVyYUxhc3RTYXZlM2QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IGNhbWVyYSB0byBsYXN0IHNhdmUiKX0sYXR0cjoicmVzZXRMYXN0U2F2ZSIsaWNvbjpzLm1vdmllLGNsaWNrOmh9LGMuaG92ZXJDbG9zZXN0M2Q9e25hbWU6ImhvdmVyQ2xvc2VzdDNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9cCh0LGUpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIpfX0sYy56b29tSW5HZW89e25hbWU6Inpvb21JbkdlbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSBpbiIpfSxhdHRyOiJ6b29tIix2YWw6ImluIixpY29uOnMuem9vbV9wbHVzLGNsaWNrOmR9LGMuem9vbU91dEdlbz17bmFtZToiem9vbU91dEdlbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246cy56b29tX21pbnVzLGNsaWNrOmR9LGMucmVzZXRHZW89e25hbWU6InJlc2V0R2VvIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJSZXNldCIpfSxhdHRyOiJyZXNldCIsdmFsOm51bGwsaWNvbjpzLmF1dG9zY2FsZSxjbGljazpkfSxjLmhvdmVyQ2xvc2VzdEdlbz17bmFtZToiaG92ZXJDbG9zZXN0R2VvIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOnZ9LGMuaG92ZXJDbG9zZXN0R2wyZD17bmFtZToiaG92ZXJDbG9zZXN0R2wyZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp2fSxjLmhvdmVyQ2xvc2VzdFBpZT17bmFtZToiaG92ZXJDbG9zZXN0UGllIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp2fSxjLnRvZ2dsZUhvdmVyPXtuYW1lOiJ0b2dnbGVIb3ZlciIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPXAodCxlKTtyLmhvdmVybW9kZT1nKHQpLG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIpfX0sYy5yZXNldFZpZXdzPXtuYW1lOiJyZXNldFZpZXdzIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJSZXNldCB2aWV3cyIpfSxpY29uOnMuaG9tZSxjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldDtyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwiem9vbSIpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsInJlc2V0IiksdSh0LGUpLHIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLCJyZXNldExhc3RTYXZlIiksaCh0LGUpLG0odCwiZ2VvIiksbSh0LCJtYXBib3giKX19LGMudG9nZ2xlU3Bpa2VsaW5lcz17bmFtZToidG9nZ2xlU3Bpa2VsaW5lcyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIFNwaWtlIExpbmVzIil9LGljb246cy5zcGlrZWxpbmUsYXR0cjoiX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQiLHZhbDoib24iLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD0ib24iPT09ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD8ib2ZmIjoib24iO3ZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49dC5fZnVsbExheW91dCxpPWEubGlzdCh0LG51bGwsITApLG89e30scz0wO3M8aS5sZW5ndGg7cysrKWU9aVtzXSxyPWUuX25hbWUsb1tyKyIuc2hvd3NwaWtlcyJdPSJvbiI9PT1uLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkfHxlLl9zaG93U3Bpa2VJbml0aWFsO3JldHVybiBvfSh0KTtuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxyKX19LGMucmVzZXRWaWV3TWFwYm94PXtuYW1lOiJyZXNldFZpZXdNYXBib3giLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IHZpZXciKX0sYXR0cjoicmVzZXQiLGljb246cy5ob21lLGNsaWNrOmZ1bmN0aW9uKHQpe20odCwibWFwYm94Iil9fX0seyIuLi8uLi8uLi9idWlsZC9wbG90aWNvbiI6MiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi8uLi9wbG90cy9wbG90cyI6ODEwLCIuLi8uLi9yZWdpc3RyeSI6ODI5fV0sNjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IubWFuYWdlPXQoIi4vbWFuYWdlIil9LHsiLi9tYW5hZ2UiOjYzN31dLDYzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxpPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi9tb2RlYmFyIikscz10KCIuL2J1dHRvbnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuX2NvbnRleHQsbD1lLl9tb2RlQmFyO2lmKHIuZGlzcGxheU1vZGVCYXJ8fHIud2F0ZXJtYXJrKXtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUpKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJtdXN0IGJlIGFuIGFycmF5LiJdLmpvaW4oIiAiKSk7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvQWRkKSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnNUb0FkZCogY29uZmlndXJhdGlvbiBvcHRpb25zIiwibXVzdCBiZSBhbiBhcnJheS4iXS5qb2luKCIgIikpO3ZhciBjLHU9ci5tb2RlQmFyQnV0dG9ucztjPUFycmF5LmlzQXJyYXkodSkmJnUubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWZvcih2YXIgcj10W2VdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZigic3RyaW5nIj09dHlwZW9mIGkpe2lmKHZvaWQgMD09PXNbaV0pdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJpbnZhbGlkIGJ1dHRvbiBuYW1lIl0uam9pbigiICIpKTt0W2VdW25dPXNbaV19fXJldHVybiB0fSh1KTohci5kaXNwbGF5TW9kZUJhciYmci53YXRlcm1hcms/W106ZnVuY3Rpb24odCxlLHIsbyl7dmFyIGw9dC5fZnVsbExheW91dCxjPXQuX2Z1bGxEYXRhLHU9bC5faGFzKCJjYXJ0ZXNpYW4iKSxmPWwuX2hhcygiZ2wzZCIpLGg9bC5faGFzKCJnZW8iKSxwPWwuX2hhcygicGllIiksZD1sLl9oYXMoImdsMmQiKSxnPWwuX2hhcygidGVybmFyeSIpLHY9bC5faGFzKCJtYXBib3giKSxtPWwuX2hhcygicG9sYXIiKSx5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLmxpc3Qoe19mdWxsTGF5b3V0OnR9LG51bGwsITApLHI9MDtyPGUubGVuZ3RoO3IrKylpZighZVtyXS5maXhlZHJhbmdlKXJldHVybiExO3JldHVybiEwfShsKSx4PVtdO2Z1bmN0aW9uIGIodCl7aWYodC5sZW5ndGgpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07LTE9PT1lLmluZGV4T2YoaSkmJnIucHVzaChzW2ldKX14LnB1c2gocil9fXZhciBfPVsidG9JbWFnZSJdO28mJl8ucHVzaCgic2VuZERhdGFUb0Nsb3VkIik7YihfKTt2YXIgdz1bXSxrPVtdLFQ9W10sQT1bXTsodXx8ZHx8cHx8ZykraCtmK3YrbT4xPyhrPVsidG9nZ2xlSG92ZXIiXSxUPVsicmVzZXRWaWV3cyJdKTpoPyh3PVsiem9vbUluR2VvIiwiem9vbU91dEdlbyJdLGs9WyJob3ZlckNsb3Nlc3RHZW8iXSxUPVsicmVzZXRHZW8iXSk6Zj8oaz1bImhvdmVyQ2xvc2VzdDNkIl0sVD1bInJlc2V0Q2FtZXJhRGVmYXVsdDNkIiwicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIl0pOnY/KGs9WyJ0b2dnbGVIb3ZlciJdLFQ9WyJyZXNldFZpZXdNYXBib3giXSk6az1kP1siaG92ZXJDbG9zZXN0R2wyZCJdOnA/WyJob3ZlckNsb3Nlc3RQaWUiXTpbInRvZ2dsZUhvdmVyIl07dSYmKGs9WyJ0b2dnbGVTcGlrZWxpbmVzIiwiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiwiaG92ZXJDb21wYXJlQ2FydGVzaWFuIl0pOyF1JiYhZHx8eXx8KHc9WyJ6b29tSW4yZCIsInpvb21PdXQyZCIsImF1dG9TY2FsZTJkIl0sInJlc2V0Vmlld3MiIT09VFswXSYmKFQ9WyJyZXNldFNjYWxlMmQiXSkpO2Y/QT1bInpvb20zZCIsInBhbjNkIiwib3JiaXRSb3RhdGlvbiIsInRhYmxlUm90YXRpb24iXToodXx8ZCkmJiF5fHxnP0E9WyJ6b29tMmQiLCJwYW4yZCJdOnZ8fGg/QT1bInBhbjJkIl06bSYmKEE9WyJ6b29tMmQiXSk7KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0hMSxyPTA7cjx0Lmxlbmd0aCYmIWU7cisrKXt2YXIgbj10W3JdO24uX21vZHVsZSYmbi5fbW9kdWxlLnNlbGVjdFBvaW50cyYmKGEudHJhY2VJcyhuLCJzY2F0dGVyLWxpa2UiKT8oaS5oYXNNYXJrZXJzKG4pfHxpLmhhc1RleHQobikpJiYoZT0hMCk6YS50cmFjZUlzKG4sImJveC12aW9saW4iKSYmImFsbCIhPT1uLmJveHBvaW50cyYmImFsbCIhPT1uLnBvaW50c3x8KGU9ITApKX1yZXR1cm4gZX0pKGMpJiZBLnB1c2goInNlbGVjdDJkIiwibGFzc28yZCIpO3JldHVybiBiKEEpLGIody5jb25jYXQoVCkpLGIoayksZnVuY3Rpb24odCxlKXtpZihlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXQucHVzaChlW3JdKTtlbHNlIHQucHVzaChlKTtyZXR1cm4gdH0oeCxyKX0odCxyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUsci5tb2RlQmFyQnV0dG9uc1RvQWRkLHIuc2hvd1NlbmRUb0Nsb3VkKSxsP2wudXBkYXRlKHQsYyk6ZS5fbW9kZUJhcj1vKHQsYyl9ZWxzZSBsJiYobC5kZXN0cm95KCksZGVsZXRlIGUuX21vZGVCYXIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4vYnV0dG9ucyI6NjM1LCIuL21vZGViYXIiOjYzOH1dLDYzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vLi4vYnVpbGQvcGxvdGljb24iKSxzPW5ldyBET01QYXJzZXI7ZnVuY3Rpb24gbCh0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfXZhciBjPWwucHJvdG90eXBlO2MudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5ncmFwaEluZm89dDt2YXIgcj10aGlzLmdyYXBoSW5mby5fY29udGV4dCxuPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LGk9Im1vZGViYXItIituLl91aWQ7dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLGkpLHRoaXMuX3VpZD1pLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIiLCJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiBtb2RlYmFyLS1ob3ZlciBlYXNlLWJnIiksInYiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiB2ZXJ0aWNhbCIsZT1lLnJldmVyc2UoKSk7dmFyIG89bi5tb2RlYmFyLHM9ImhvdmVyIj09PXIuZGlzcGxheU1vZGVCYXI/Ii5qcy1wbG90bHktcGxvdCAucGxvdGx5OmhvdmVyICI6IiI7YS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKGkpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLHMrIiMiK2krIiAubW9kZWJhci1ncm91cCIsImJhY2tncm91bmQtY29sb3I6ICIrby5iZ2NvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0biAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmNvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0bjpob3ZlciAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmFjdGl2ZWNvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0bi5hY3RpdmUgLmljb24gcGF0aCIsImZpbGw6ICIrby5hY3RpdmVjb2xvcik7dmFyIGw9IXRoaXMuaGFzQnV0dG9ucyhlKSxjPXRoaXMuaGFzTG9nbyE9PXIuZGlzcGxheWxvZ28sdT10aGlzLmxvY2FsZSE9PXIubG9jYWxlO2lmKHRoaXMubG9jYWxlPXIubG9jYWxlLChsfHxjfHx1KSYmKHRoaXMucmVtb3ZlQWxsQnV0dG9ucygpLHRoaXMudXBkYXRlQnV0dG9ucyhlKSxyLndhdGVybWFya3x8ci5kaXNwbGF5bG9nbykpe3ZhciBmPXRoaXMuZ2V0TG9nbygpO3Iud2F0ZXJtYXJrJiYoZi5jbGFzc05hbWU9Zi5jbGFzc05hbWUrIiB3YXRlcm1hcmsiKSwidiI9PT1uLm1vZGViYXIub3JpZW50YXRpb24/dGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShmLHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzWzBdKTp0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZiksdGhpcy5oYXNMb2dvPSEwfXRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGMudXBkYXRlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYnV0dG9ucz10LHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZS5jcmVhdGVHcm91cCgpO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10Lm5hbWU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICduYW1lJyBpbiBidXR0b24gY29uZmlnIik7aWYoLTEhPT1lLmJ1dHRvbnNOYW1lcy5pbmRleE9mKG4pKXRocm93IG5ldyBFcnJvcigiYnV0dG9uIG5hbWUgJyIrbisiJyBpcyB0YWtlbiIpO2UuYnV0dG9uc05hbWVzLnB1c2gobik7dmFyIGk9ZS5jcmVhdGVCdXR0b24odCk7ZS5idXR0b25FbGVtZW50cy5wdXNoKGkpLHIuYXBwZW5kQ2hpbGQoaSl9KSxlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KX0sYy5jcmVhdGVHcm91cD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmNsYXNzTmFtZT0ibW9kZWJhci1ncm91cCIsdH0sYy5jcmVhdGVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgicmVsIiwidG9vbHRpcCIpLHIuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biI7dmFyIGk9dC50aXRsZTt2b2lkIDA9PT1pP2k9dC5uYW1lOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHRoaXMuZ3JhcGhJbmZvKSksKGl8fDA9PT1pKSYmci5zZXRBdHRyaWJ1dGUoImRhdGEtdGl0bGUiLGkpLHZvaWQgMCE9PXQuYXR0ciYmci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsdC5hdHRyKTt2YXIgYT10LnZhbDtpZih2b2lkIDAhPT1hJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJihhPWEodGhpcy5ncmFwaEluZm8pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLGEpKSwiZnVuY3Rpb24iIT10eXBlb2YgdC5jbGljayl0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBidXR0b24gJ2NsaWNrJyBmdW5jdGlvbiBpbiBidXR0b24gY29uZmlnIik7ci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24ocil7dC5jbGljayhlLmdyYXBoSW5mbyxyKSxlLnVwZGF0ZUFjdGl2ZUJ1dHRvbihyLmN1cnJlbnRUYXJnZXQpfSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZuLnNlbGVjdChyKS5jbGFzc2VkKCJhY3RpdmUiLCEwKTt2YXIgcz10Lmljb247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHM/ci5hcHBlbmRDaGlsZChzKCkpOnIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKHN8fG8ucXVlc3Rpb24pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1ncmF2aXR5Iix0LmdyYXZpdHl8fCJuIikscn0sYy5jcmVhdGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlLHI9aSh0LmhlaWdodCk/TnVtYmVyKHQuaGVpZ2h0KTp0LmFzY2VudC10LmRlc2NlbnQsbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2lmKHQucGF0aCl7KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sInN2ZyIpKS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFswLDAsdC53aWR0aCxyXS5qb2luKCIgIikpLGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsImljb24iKTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwicGF0aCIpO2Euc2V0QXR0cmlidXRlKCJkIix0LnBhdGgpLHQudHJhbnNmb3JtP2Euc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQudHJhbnNmb3JtKTp2b2lkIDAhPT10LmFzY2VudCYmYS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsIm1hdHJpeCgxIDAgMCAtMSAwICIrdC5hc2NlbnQrIikiKSxlLmFwcGVuZENoaWxkKGEpfXQuc3ZnJiYoZT1zLnBhcnNlRnJvbVN0cmluZyh0LnN2ZywiYXBwbGljYXRpb24veG1sIikuY2hpbGROb2Rlc1swXSk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxZW0iKSxlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxZW0iKSxlfSxjLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PXQ/dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpOm51bGw7dGhpcy5idXR0b25FbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxzPSJ0cnVlIj09PXQuZ2V0QXR0cmlidXRlKCJkYXRhLXRvZ2dsZSIpLGw9bi5zZWxlY3QodCk7aWYocylvPT09ciYmbC5jbGFzc2VkKCJhY3RpdmUiLCFsLmNsYXNzZWQoImFjdGl2ZSIpKTtlbHNle3ZhciBjPW51bGw9PT1vP286YS5uZXN0ZWRQcm9wZXJ0eShlLG8pLmdldCgpO2wuY2xhc3NlZCgiYWN0aXZlIixjPT09aSl9fSl9LGMuaGFzQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1dHRvbnM7aWYoIWUpcmV0dXJuITE7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoO24rKylpZih0W3JdW25dLm5hbWUhPT1lW3JdW25dLm5hbWUpcmV0dXJuITF9cmV0dXJuITB9LGMuZ2V0TG9nbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3JlYXRlR3JvdXAoKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPSJodHRwczovL3Bsb3QubHkvIixlLnRhcmdldD0iX2JsYW5rIixlLnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsYS5fKHRoaXMuZ3JhcGhJbmZvLCJQcm9kdWNlZCB3aXRoIFBsb3RseSIpKSxlLmNsYXNzTmFtZT0ibW9kZWJhci1idG4gcGxvdGx5anNpY29uIG1vZGViYXItYnRuLS1sb2dvIixlLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihvLm5ld3Bsb3RseWxvZ28pKSx0LmFwcGVuZENoaWxkKGUpLHR9LGMucmVtb3ZlQWxsQnV0dG9ucz1mdW5jdGlvbigpe2Zvcig7dGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7KXRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7dGhpcy5oYXNMb2dvPSExfSxjLmRlc3Ryb3k9ZnVuY3Rpb24oKXthLnJlbW92ZUVsZW1lbnQodGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLm1vZGViYXIiKSksYS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKHRoaXMuX3VpZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1uZXcgbCh7Z3JhcGhJbmZvOnQsY29udGFpbmVyOnIuX21vZGViYXJkaXYubm9kZSgpLGJ1dHRvbnM6ZX0pO3JldHVybiByLl9wcml2YXRlcGxvdCYmbi5zZWxlY3QoaS5lbGVtZW50KS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJiYWRnZS1wcml2YXRlIGZsb2F0LS1sZWZ0IiwhMCkudGV4dCgiUFJJVkFURSIpLGl9fSx7Ii4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uIjoyLCIuLi8uLi9saWIiOjcwMCxkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw2Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT0oMCx0KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXkpKCJidXR0b24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc3RlcDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibW9udGgiLCJ5ZWFyIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsImFsbCJdLGRmbHQ6Im1vbnRoIixlZGl0VHlwZToicGxvdCJ9LHN0ZXBtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiYWNrd2FyZCIsInRvZGF0ZSJdLGRmbHQ6ImJhY2t3YXJkIixlZGl0VHlwZToicGxvdCJ9LGNvdW50Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSk7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGJ1dHRvbnM6YSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxlZGl0VHlwZToicGxvdCJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToicGxvdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJwbG90In0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6ImJvdHRvbSIsZWRpdFR5cGU6InBsb3QifSxmb250Om4oe2VkaXRUeXBlOiJwbG90In0pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYWN0aXZlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifX0seyIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo1NzZ9XSw2NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt5UGFkOi4wMixtaW5CdXR0b25XaWR0aDozMCxyeDozLHJ5OjMsbGlnaHRBbW91bnQ6MjUsZGFya0Ftb3VudDoxMH19LHt9XSw2NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKSxsPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgYT1pLmNhbGVuZGFyO2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMuYnV0dG9ucyxyLGkpfWlmKG8oInZpc2libGUiKSl7dmFyIGw9bygic3RlcCIpOyJhbGwiIT09bCYmKCFhfHwiZ3JlZ29yaWFuIj09PWF8fCJtb250aCIhPT1sJiYieWVhciIhPT1sP28oInN0ZXBtb2RlIik6ZS5zdGVwbW9kZT0iYmFja3dhcmQiLG8oImNvdW50IikpLG8oImxhYmVsIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1LGYpe3ZhciBoPXQucmFuZ2VzZWxlY3Rvcnx8e30scD1hLm5ld0NvbnRhaW5lcihlLCJyYW5nZXNlbGVjdG9yIik7ZnVuY3Rpb24gZCh0LGUpe3JldHVybiBuLmNvZXJjZShoLHAscyx0LGUpfWlmKGQoInZpc2libGUiLG8oaCxwLHtuYW1lOiJidXR0b25zIixoYW5kbGVJdGVtRGVmYXVsdHM6YyxjYWxlbmRhcjpmfSkubGVuZ3RoPjApKXt2YXIgZz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdLmFuY2hvcj09PXQuX2lkfSksaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ZVtuW2FdXS5kb21haW47byYmKGk9TWF0aC5tYXgob1sxXSxpKSl9cmV0dXJuW3QuZG9tYWluWzBdLGkrbC55UGFkXX0oZSxyLHUpO2QoIngiLGdbMF0pLGQoInkiLGdbMV0pLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLGQoInhhbmNob3IiKSxkKCJ5YW5jaG9yIiksbi5jb2VyY2VGb250KGQsImZvbnQiLHIuZm9udCk7dmFyIHY9ZCgiYmdjb2xvciIpO2QoImFjdGl2ZWNvbG9yIixpLmNvbnRyYXN0KHYsbC5saWdodEFtb3VudCxsLmRhcmtBbW91bnQpKSxkKCJib3JkZXJjb2xvciIpLGQoImJvcmRlcndpZHRoIil9fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc0NCwiLi4vY29sb3IiOjU3NywiLi9hdHRyaWJ1dGVzIjo2MzksIi4vY29uc3RhbnRzIjo2NDB9XSw2NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vY29sb3IiKSxzPXQoIi4uL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxoPWYuTElORV9TUEFDSU5HLHA9Zi5GUk9NX1RMLGQ9Zi5GUk9NX0JSLGc9dCgiLi9jb25zdGFudHMiKSx2PXQoIi4vZ2V0X3VwZGF0ZV9vYmplY3QiKTtmdW5jdGlvbiBtKHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1sLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iiwic2VsZWN0b3ItcmVjdCIsZnVuY3Rpb24odCl7dC5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KTtuLmF0dHIoe3J4Omcucngscnk6Zy5yeX0pLG4uY2FsbChvLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKG8uZmlsbCxmdW5jdGlvbih0LGUpe3JldHVybiBlLl9pc0FjdGl2ZXx8ZS5faXNIb3ZlcmVkP3QuYWN0aXZlY29sb3I6dC5iZ2NvbG9yfShlLHIpKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIHgodCxlLHIsbil7bC5lbnN1cmVTaW5nbGUodCwidGV4dCIsInNlbGVjdG9yLXRleHQiLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIil9KS5jYWxsKHMuZm9udCxlLmZvbnQpLnRleHQoZnVuY3Rpb24odCxlKXtpZih0LmxhYmVsKXJldHVybiBlP2wudGVtcGxhdGVTdHJpbmcodC5sYWJlbCx7bWV0YTplfSk6dC5sYWJlbDtyZXR1cm4iYWxsIj09PXQuc3RlcD8iYWxsIjp0LmNvdW50K3Quc3RlcC5jaGFyQXQoMCl9KHIsbi5fZnVsbExheW91dC5tZXRhKSkuY2FsbChmdW5jdGlvbih0KXtjLmNvbnZlcnRUb1RzcGFucyh0LG4pfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi5yYW5nZXNlbGVjdG9yIikuZGF0YShmdW5jdGlvbih0KXtmb3IodmFyIGU9dS5saXN0KHQsIngiLCEwKSxyPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLnJhbmdlc2VsZWN0b3ImJmkucmFuZ2VzZWxlY3Rvci52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9KHQpLG0pO2UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJyYW5nZXNlbGVjdG9yIiwhMCksZS5leGl0KCkucmVtb3ZlKCksZS5zdHlsZSh7Y3Vyc29yOiJwb2ludGVyIiwicG9pbnRlci1ldmVudHMiOiJhbGwifSksZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89ZSx1PW8ucmFuZ2VzZWxlY3RvcixmPXIuc2VsZWN0QWxsKCJnLmJ1dHRvbiIpLmRhdGEobC5maWx0ZXJWaXNpYmxlKHUuYnV0dG9ucykpO2YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidXR0b24iLCEwKSxmLmV4aXQoKS5yZW1vdmUoKSxmLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT12KG8sZSk7ZS5faXNBY3RpdmU9ZnVuY3Rpb24odCxlLHIpe2lmKCJhbGwiPT09ZS5zdGVwKXJldHVybiEwPT09dC5hdXRvcmFuZ2U7dmFyIG49T2JqZWN0LmtleXMocik7cmV0dXJuIHQucmFuZ2VbMF09PT1yW25bMF1dJiZ0LnJhbmdlWzFdPT09cltuWzFdXX0obyxlLGEpLHIuY2FsbCh5LHUsZSksci5jYWxsKHgsdSxlLHQpLHIub24oImNsaWNrIixmdW5jdGlvbigpe3QuX2RyYWdnZWR8fGkuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGEpfSksci5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe2UuX2lzSG92ZXJlZD0hMCxyLmNhbGwoeSx1LGUpfSksci5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZS5faXNIb3ZlcmVkPSExLHIuY2FsbCh5LHUsZSl9KX0pLGZ1bmN0aW9uKHQsZSxyLGksbyl7dmFyIHU9MCxmPTAsdj1yLmJvcmRlcndpZHRoO2UuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoIi5zZWxlY3Rvci10ZXh0IiksaT1yLmZvbnQuc2l6ZSpoLGE9TWF0aC5tYXgoaSpjLmxpbmVDb3VudChlKSwxNikrMztmPU1hdGgubWF4KGYsYSl9KSxlLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXQuc2VsZWN0KCIuc2VsZWN0b3ItcmVjdCIpLGk9dC5zZWxlY3QoIi5zZWxlY3Rvci10ZXh0IiksYT1pLm5vZGUoKSYmcy5iQm94KGkubm9kZSgpKS53aWR0aCxvPXIuZm9udC5zaXplKmgsbD1jLmxpbmVDb3VudChpKSxwPU1hdGgubWF4KGErMTAsZy5taW5CdXR0b25XaWR0aCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodit1KSsiLCIrdisiKSIpLGUuYXR0cih7eDowLHk6MCx3aWR0aDpwLGhlaWdodDpmfSksYy5wb3NpdGlvblRleHQoaSxwLzIsZi8yLShsLTEpKm8vMiszKSx1Kz1wKzV9KTt2YXIgbT10Ll9mdWxsTGF5b3V0Ll9zaXplLHk9bS5sK20udypyLngseD1tLnQrbS5oKigxLXIueSksYj0ibGVmdCI7bC5pc1JpZ2h0QW5jaG9yKHIpJiYoeS09dSxiPSJyaWdodCIpO2wuaXNDZW50ZXJBbmNob3IocikmJih5LT11LzIsYj0iY2VudGVyIik7dmFyIF89InRvcCI7bC5pc0JvdHRvbUFuY2hvcihyKSYmKHgtPWYsXz0iYm90dG9tIik7bC5pc01pZGRsZUFuY2hvcihyKSYmKHgtPWYvMixfPSJtaWRkbGUiKTt1PU1hdGguY2VpbCh1KSxmPU1hdGguY2VpbChmKSx5PU1hdGgucm91bmQoeSkseD1NYXRoLnJvdW5kKHgpLGEuYXV0b01hcmdpbih0LGkrIi1yYW5nZS1zZWxlY3RvciIse3g6ci54LHk6ci55LGw6dSpwW2JdLHI6dSpkW2JdLGI6ZipkW19dLHQ6ZipwW19dfSksby5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit5KyIsIit4KyIpIil9KHQsZix1LG8uX25hbWUscil9KX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi8uLi9wbG90cy9wbG90cyI6ODEwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9jb2xvciI6NTc3LCIuLi9kcmF3aW5nIjo1OTgsIi4vY29uc3RhbnRzIjo2NDAsIi4vZ2V0X3VwZGF0ZV9vYmplY3QiOjY0MyxkMzoxNTR9XSw2NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGk9e307aWYoImFsbCI9PT1lLnN0ZXApaVtyKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgYT1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5yYW5nZSxhPW5ldyBEYXRlKHQucjJsKGlbMV0pKSxvPWUuc3RlcCxzPWUuY291bnQ7c3dpdGNoKGUuc3RlcG1vZGUpe2Nhc2UiYmFja3dhcmQiOnI9dC5sMnIoK24udGltZVtvXS51dGMub2Zmc2V0KGEsLXMpKTticmVhaztjYXNlInRvZGF0ZSI6dmFyIGw9bi50aW1lW29dLnV0Yy5vZmZzZXQoYSwtcyk7cj10Lmwycigrbi50aW1lW29dLnV0Yy5jZWlsKGwpKX12YXIgYz1pWzFdO3JldHVybltyLGNdfSh0LGUpO2lbcisiLnJhbmdlWzBdIl09YVswXSxpW3IrIi5yYW5nZVsxXSJdPWFbMV19cmV0dXJuIGl9fSx7ZDM6MTU0fV0sNjQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNlbGVjdG9yIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3Rvcjp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjYzOSwiLi9kZWZhdWx0cyI6NjQxLCIuL2RyYXciOjY0Mn1dLDY0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmQsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMTUsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi9jb2xvci9hdHRyaWJ1dGVzIjo1NzZ9XSw2NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikubGlzdCxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UsYT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0LCJ4IiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdLHM9b1thLm5hbWVdO3MmJnMudmlzaWJsZSYmcy5hdXRvcmFuZ2UmJihzLl9pbnB1dC5hdXRvcmFuZ2U9ITAscy5faW5wdXQucmFuZ2U9cy5yYW5nZT1pKHQsbykpfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NzQ3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi9jb25zdGFudHMiOjY0N31dLDY0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InJhbmdlc2xpZGVyIixjb250YWluZXJDbGFzc05hbWU6InJhbmdlc2xpZGVyLWNvbnRhaW5lciIsYmdDbGFzc05hbWU6InJhbmdlc2xpZGVyLWJnIixyYW5nZVBsb3RDbGFzc05hbWU6InJhbmdlc2xpZGVyLXJhbmdlcGxvdCIsbWFza01pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4iLG1hc2tNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4IixzbGlkZUJveENsYXNzTmFtZToicmFuZ2VzbGlkZXItc2xpZGVib3giLGdyYWJiZXJNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWluIixncmFiQXJlYU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWluIixoYW5kbGVNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1taW4iLGdyYWJiZXJNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWF4IixncmFiQXJlYU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWF4IixoYW5kbGVNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1tYXgiLG1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbi1vcHAtYXhpcyIsbWFza01heE9wcEF4aXNDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4LW9wcC1heGlzIixtYXNrQ29sb3I6InJnYmEoMCwwLDAsMC40KSIsbWFza09wcEF4aXNDb2xvcjoicmdiYSgwLDAsMCwwLjIpIixzbGlkZUJveEZpbGw6InRyYW5zcGFyZW50IixzbGlkZUJveEN1cnNvcjoiZXctcmVzaXplIixncmFiQXJlYUZpbGw6InRyYW5zcGFyZW50IixncmFiQXJlYUN1cnNvcjoiY29sLXJlc2l6ZSIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sNjQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10W3JdLGM9ZVtyXTtpZihsLnJhbmdlc2xpZGVyfHxlLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbYy5faWRdKXtuLmlzUGxhaW5PYmplY3QobC5yYW5nZXNsaWRlcil8fChsLnJhbmdlc2xpZGVyPXt9KTt2YXIgdSxmLGg9bC5yYW5nZXNsaWRlcixwPWkubmV3Q29udGFpbmVyKGMsInJhbmdlc2xpZGVyIik7aWYoXygidmlzaWJsZSIpKXtfKCJiZ2NvbG9yIixlLnBsb3RfYmdjb2xvciksXygiYm9yZGVyY29sb3IiKSxfKCJib3JkZXJ3aWR0aCIpLF8oInRoaWNrbmVzcyIpLF8oImF1dG9yYW5nZSIsIWMuaXNWYWxpZFJhbmdlKGgucmFuZ2UpKSxfKCJyYW5nZSIpO3ZhciBkPWUuX3N1YnBsb3RzO2lmKGQpZm9yKHZhciBnPWQuY2FydGVzaWFuLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHIoMCx0LmluZGV4T2YoInkiKSk9PT1hLm5hbWUyaWQocil9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKHQuaW5kZXhPZigieSIpLHQubGVuZ3RoKX0pLHY9bi5zaW1wbGVNYXAoZyxhLmlkMm5hbWUpLG09MDttPHYubGVuZ3RoO20rKyl7dmFyIHk9dlttXTt1PWhbeV18fHt9LGY9aS5uZXdDb250YWluZXIocCx5LCJ5YXhpcyIpO3ZhciB4LGI9ZVt5XTt1LnJhbmdlJiZiLmlzVmFsaWRSYW5nZSh1LnJhbmdlKSYmKHg9ImZpeGVkIiksIm1hdGNoIiE9PXcoInJhbmdlbW9kZSIseCkmJncoInJhbmdlIixiLnJhbmdlLnNsaWNlKCkpfXAuX2lucHV0PWh9fWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoaCxwLG8sdCxlKX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIG4uY29lcmNlKHUsZixzLHQsZSl9fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi9hdHRyaWJ1dGVzIjo2NDUsIi4vb3BwYXhpc19hdHRyaWJ1dGVzIjo2NTJ9XSw2NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi9kcmF3aW5nIiksbD10KCIuLi9jb2xvciIpLGM9dCgiLi4vdGl0bGVzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGg9dCgiLi4vZHJhZ2VsZW1lbnQiKSxwPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxkPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1vLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixkLmJnQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eDowLHk6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLGE9bi5ib3JkZXJ3aWR0aCUyPT0wP24uYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aC0xLGw9LW4uX29mZnNldFNoaWZ0LGM9cy5jcmlzcFJvdW5kKGUsbi5ib3JkZXJ3aWR0aCk7aS5hdHRyKHt3aWR0aDpuLl93aWR0aCthLGhlaWdodDpuLl9oZWlnaHQrYSx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK2wrIiwiK2wrIikiLGZpbGw6bi5iZ2NvbG9yLHN0cm9rZTpuLmJvcmRlcmNvbG9yLCJzdHJva2Utd2lkdGgiOmN9KX1mdW5jdGlvbiB2KHQsZSxyLG4pe3ZhciBpPWUuX2Z1bGxMYXlvdXQ7by5lbnN1cmVTaW5nbGVCeUlkKGkuX3RvcGRlZnMsImNsaXBQYXRoIixuLl9jbGlwSWQsZnVuY3Rpb24odCl7dC5hcHBlbmQoInJlY3QiKS5hdHRyKHt4OjAseTowfSl9KS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpuLl93aWR0aCxoZWlnaHQ6bi5faGVpZ2h0fSl9ZnVuY3Rpb24gbSh0LGUscixpKXt2YXIgbCxjPWUuY2FsY2RhdGEsaD10LnNlbGVjdEFsbCgiZy4iK2QucmFuZ2VQbG90Q2xhc3NOYW1lKS5kYXRhKHIuX3N1YnBsb3RzV2l0aCxvLmlkZW50aXR5KTtoLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiBkLnJhbmdlUGxvdENsYXNzTmFtZSsiICIrdH0pLmNhbGwocy5zZXRDbGlwVXJsLGkuX2NsaXBJZCxlKSxoLm9yZGVyKCksaC5leGl0KCkucmVtb3ZlKCksaC5lYWNoKGZ1bmN0aW9uKHQsbyl7dmFyIHM9bi5zZWxlY3QodGhpcyksaD0wPT09byxwPWYuZ2V0RnJvbUlkKGUsdCwieSIpLGQ9cC5fbmFtZSxnPWlbZF0sdj17ZGF0YTpbXSxsYXlvdXQ6e3hheGlzOnt0eXBlOnIudHlwZSxkb21haW46WzAsMV0scmFuZ2U6aS5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHdpZHRoOmkuX3dpZHRoLGhlaWdodDppLl9oZWlnaHQsbWFyZ2luOnt0OjAsYjowLGw6MCxyOjB9fSxfY29udGV4dDplLl9jb250ZXh0fTt2LmxheW91dFtkXT17dHlwZTpwLnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOiJtYXRjaCIhPT1nLnJhbmdlbW9kZT9nLnJhbmdlLnNsaWNlKCk6cC5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnAuY2FsZW5kYXJ9LGEuc3VwcGx5RGVmYXVsdHModik7dmFyIG09di5fZnVsbExheW91dC54YXhpcyx5PXYuX2Z1bGxMYXlvdXRbZF07bS5jbGVhckNhbGMoKSxtLnNldFNjYWxlKCkseS5jbGVhckNhbGMoKSx5LnNldFNjYWxlKCk7dmFyIHg9e2lkOnQscGxvdGdyb3VwOnMseGF4aXM6bSx5YXhpczp5LGlzUmFuZ2VQbG90OiEwfTtoP2w9eDooeC5tYWlucGxvdD0ieHkiLHgubWFpbnBsb3RpbmZvPWwpLHUucmFuZ2VQbG90KGUseCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EueGF4aXMrYS55YXhpcz09PWUmJnIucHVzaChpKX1yZXR1cm4gcn0oYyx0KSl9KX1mdW5jdGlvbiB5KHQsZSxyLG4saSl7KG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQubWFza01pbkNsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCkuY2FsbChsLmZpbGwsZC5tYXNrQ29sb3IpLG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQubWFza01heENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKGwuZmlsbCxkLm1hc2tDb2xvciksIm1hdGNoIiE9PWkucmFuZ2Vtb2RlKSYmKG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQubWFza01pbk9wcEF4aXNDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5hdHRyKCJ3aWR0aCIsbi5fd2lkdGgpLmNhbGwobC5maWxsLGQubWFza09wcEF4aXNDb2xvciksby5lbnN1cmVTaW5nbGUodCwicmVjdCIsZC5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLmF0dHIoIndpZHRoIixuLl93aWR0aCkuc3R5bGUoImJvcmRlci10b3AiLGQubWFza09wcEJvcmRlcikuY2FsbChsLmZpbGwsZC5tYXNrT3BwQXhpc0NvbG9yKSl9ZnVuY3Rpb24geCh0LGUscixuKXtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQuc2xpZGVCb3hDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsY3Vyc29yOmQuc2xpZGVCb3hDdXJzb3IsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5hdHRyKHtoZWlnaHQ6bi5faGVpZ2h0LGZpbGw6ZC5zbGlkZUJveEZpbGx9KX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsImciLGQuZ3JhYmJlck1pbkNsYXNzTmFtZSksYT1vLmVuc3VyZVNpbmdsZSh0LCJnIixkLmdyYWJiZXJNYXhDbGFzc05hbWUpLHM9e3g6MCx3aWR0aDpkLmhhbmRsZVdpZHRoLHJ4OmQuaGFuZGxlUmFkaXVzLGZpbGw6bC5iYWNrZ3JvdW5kLHN0cm9rZTpsLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOmQuaGFuZGxlU3Ryb2tlV2lkdGgsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSxjPXt5Ok1hdGgucm91bmQobi5faGVpZ2h0LzQpLGhlaWdodDpNYXRoLnJvdW5kKG4uX2hlaWdodC8yKX07aWYoby5lbnN1cmVTaW5nbGUoaSwicmVjdCIsZC5oYW5kbGVNaW5DbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHMpfSkuYXR0cihjKSxvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixkLmhhbmRsZU1heENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIocyl9KS5hdHRyKGMpLCFlLl9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciB1PXt3aWR0aDpkLmdyYWJBcmVhV2lkdGgseDowLHk6MCxmaWxsOmQuZ3JhYkFyZWFGaWxsLGN1cnNvcjpkLmdyYWJBcmVhQ3Vyc29yfTtvLmVuc3VyZVNpbmdsZShpLCJyZWN0IixkLmdyYWJBcmVhTWluQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KSxvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixkLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fcmFuZ2VTbGlkZXJEYXRhLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXVtkLm5hbWVdO3MuX2NsaXBJZD1zLl9pZCsiLSIrZS5fdWlkfXZhciBsPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitkLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9uYW1lfSk7bC5leGl0KCkuZWFjaChmdW5jdGlvbih0KXt2YXIgcj10W2QubmFtZV07ZS5fdG9wZGVmcy5zZWxlY3QoIiMiK3IuX2NsaXBJZCkucmVtb3ZlKCl9KS5yZW1vdmUoKSwwIT09ci5sZW5ndGgmJihsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChkLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxsLmVhY2goZnVuY3Rpb24ocil7dmFyIGE9bi5zZWxlY3QodGhpcykscz1yW2QubmFtZV0sbD1lW2YuaWQybmFtZShyLmFuY2hvcildLHU9c1tmLmlkMm5hbWUoci5hbmNob3IpXTtpZihzLnJhbmdlKXt2YXIgXyx3PW8uc2ltcGxlTWFwKHMucmFuZ2Usci5yMmwpLGs9by5zaW1wbGVNYXAoci5yYW5nZSxyLnIybCk7Xz1rWzBdPGtbMV0/W01hdGgubWluKHdbMF0sa1swXSksTWF0aC5tYXgod1sxXSxrWzFdKV06W01hdGgubWF4KHdbMF0sa1swXSksTWF0aC5taW4od1sxXSxrWzFdKV0scy5yYW5nZT1zLl9pbnB1dC5yYW5nZT1vLnNpbXBsZU1hcChfLHIubDJyKX1yLmNsZWFuUmFuZ2UoInJhbmdlc2xpZGVyLnJhbmdlIik7dmFyIFQ9ZS5tYXJnaW4sQT1lLl9zaXplLE09ci5kb21haW4sUz1zLl90aWNrSGVpZ2h0LEU9cy5fb3BwQm90dG9tO3MuX3dpZHRoPUEudyooTVsxXS1NWzBdKTt2YXIgQz1NYXRoLnJvdW5kKFQubCtBLncqTVswXSksTD1NYXRoLnJvdW5kKEEudCtBLmgqKDEtRSkrUytzLl9vZmZzZXRTaGlmdCtkLmV4dHJhUGFkKTthLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MrIiwiK0wrIikiKTt2YXIgej1yLnIybChzLnJhbmdlWzBdKSxPPXIucjJsKHMucmFuZ2VbMV0pLEk9Ty16O2lmKHMucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB0L3MuX3dpZHRoKkkren0scy5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuKHQteikvSSpzLl93aWR0aH0scy5fcmw9W3osT10sIm1hdGNoIiE9PXUucmFuZ2Vtb2RlKXt2YXIgRD1sLnIybCh1LnJhbmdlWzBdKSxQPWwucjJsKHUucmFuZ2VbMV0pLUQ7cy5kMnBPcHBBeGlzPWZ1bmN0aW9uKHQpe3JldHVybih0LUQpL1Aqcy5faGVpZ2h0fX1hLmNhbGwoZyx0LHIscykuY2FsbCh2LHQscixzKS5jYWxsKG0sdCxyLHMpLmNhbGwoeSx0LHIscyx1KS5jYWxsKHgsdCxyLHMpLmNhbGwoYix0LHIscyksZnVuY3Rpb24odCxlLHIsYSl7dmFyIHM9dC5zZWxlY3QoInJlY3QuIitkLnNsaWRlQm94Q2xhc3NOYW1lKS5ub2RlKCksbD10LnNlbGVjdCgicmVjdC4iK2QuZ3JhYkFyZWFNaW5DbGFzc05hbWUpLm5vZGUoKSxjPXQuc2VsZWN0KCJyZWN0LiIrZC5ncmFiQXJlYU1heENsYXNzTmFtZSkubm9kZSgpO3Qub24oIm1vdXNlZG93biIsZnVuY3Rpb24oKXt2YXIgdT1uLmV2ZW50LGY9dS50YXJnZXQsZD11LmNsaWVudFgsZz1kLXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsdj1hLmQycChyLl9ybFswXSksbT1hLmQycChyLl9ybFsxXSkseT1oLmNvdmVyU2xpcCgpO2Z1bmN0aW9uIHgodCl7dmFyIHUsaCx4LGI9K3QuY2xpZW50WC1kO3N3aXRjaChmKXtjYXNlIHM6eD0iZXctcmVzaXplIix1PXYrYixoPW0rYjticmVhaztjYXNlIGw6eD0iY29sLXJlc2l6ZSIsdT12K2IsaD1tO2JyZWFrO2Nhc2UgYzp4PSJjb2wtcmVzaXplIix1PXYsaD1tK2I7YnJlYWs7ZGVmYXVsdDp4PSJldy1yZXNpemUiLHU9ZyxoPWcrYn1pZihoPHUpe3ZhciBfPWg7aD11LHU9X31hLl9waXhlbE1pbj11LGEuX3BpeGVsTWF4PWgscChuLnNlbGVjdCh5KSx4KSxmdW5jdGlvbih0LGUscixuKXtmdW5jdGlvbiBhKHQpe3JldHVybiByLmwycihvLmNvbnN0cmFpbih0LG4uX3JsWzBdLG4uX3JsWzFdKSl9dmFyIHM9YShuLnAyZChuLl9waXhlbE1pbikpLGw9YShuLnAyZChuLl9waXhlbE1heCkpO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtpLmNhbGwoIl9ndWlSZWxheW91dCIsZSxyLl9uYW1lKyIucmFuZ2UiLFtzLGxdKX0pfSgwLGUscixhKX15LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIseCkseS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixmdW5jdGlvbiB0KCl7eS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHgpO3kucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdCk7by5yZW1vdmVFbGVtZW50KHkpfSl9KX0oYSx0LHIscyksZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPWQuaGFuZGxlV2lkdGgvMjtmdW5jdGlvbiBsKHQpe3JldHVybiBvLmNvbnN0cmFpbih0LDAsbi5fd2lkdGgpfWZ1bmN0aW9uIGModCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl9oZWlnaHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsLXMsbi5fd2lkdGgrcyl9dmFyIGY9bChuLmQycChyLl9ybFswXSkpLGg9bChuLmQycChyLl9ybFsxXSkpO2lmKHQuc2VsZWN0KCJyZWN0LiIrZC5zbGlkZUJveENsYXNzTmFtZSkuYXR0cigieCIsZikuYXR0cigid2lkdGgiLGgtZiksdC5zZWxlY3QoInJlY3QuIitkLm1hc2tNaW5DbGFzc05hbWUpLmF0dHIoIndpZHRoIixmKSx0LnNlbGVjdCgicmVjdC4iK2QubWFza01heENsYXNzTmFtZSkuYXR0cigieCIsaCkuYXR0cigid2lkdGgiLG4uX3dpZHRoLWgpLCJtYXRjaCIhPT1hLnJhbmdlbW9kZSl7dmFyIHA9bi5faGVpZ2h0LWMobi5kMnBPcHBBeGlzKGkuX3JsWzFdKSksZz1uLl9oZWlnaHQtYyhuLmQycE9wcEF4aXMoaS5fcmxbMF0pKTt0LnNlbGVjdCgicmVjdC4iK2QubWFza01pbk9wcEF4aXNDbGFzc05hbWUpLmF0dHIoIngiLGYpLmF0dHIoImhlaWdodCIscCkuYXR0cigid2lkdGgiLGgtZiksdC5zZWxlY3QoInJlY3QuIitkLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKCJ4IixmKS5hdHRyKCJ5IixnKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodC1nKS5hdHRyKCJ3aWR0aCIsaC1mKSx0LnNlbGVjdCgicmVjdC4iK2Quc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoInkiLHApLmF0dHIoImhlaWdodCIsZy1wKX12YXIgdj1NYXRoLnJvdW5kKHUoZi1zKSktLjUsbT1NYXRoLnJvdW5kKHUoaC1zKSkrLjU7dC5zZWxlY3QoImcuIitkLmdyYWJiZXJNaW5DbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwwLjUpIiksdC5zZWxlY3QoImcuIitkLmdyYWJiZXJNYXhDbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK20rIiwwLjUpIil9KGEsMCxyLHMsbCx1KSwiYm90dG9tIj09PXIuc2lkZSYmYy5kcmF3KHQsci5faWQrInRpdGxlIix7cHJvcENvbnRhaW5lcjpyLHByb3BOYW1lOnIuX25hbWUrIi50aXRsZSIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLngsYXR0cmlidXRlczp7eDpyLl9vZmZzZXQrci5fbGVuZ3RoLzIseTpMK3MuX2hlaWdodCtzLl9vZmZzZXRTaGlmdCsxMCsxLjUqci50aXRsZS5mb250LnNpemUsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX0pKX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi8uLi9wbG90cy9wbG90cyI6ODEwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9jb2xvciI6NTc3LCIuLi9kcmFnZWxlbWVudCI6NTk1LCIuLi9kcmF3aW5nIjo1OTgsIi4uL3RpdGxlcyI6NjY1LCIuL2NvbnN0YW50cyI6NjQ3LGQzOjE1NH1dLDY1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxpPXQoIi4vY29uc3RhbnRzIiksYT1pLm5hbWU7ZnVuY3Rpb24gbyh0KXt2YXIgZT10JiZ0W2FdO3JldHVybiBlJiZlLnZpc2libGV9ci5pc1Zpc2libGU9byxyLm1ha2VEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sIngiLCEwKSxyPXQubWFyZ2luLGk9W107aWYoIXQuX2hhcygiZ2wyZCIpKWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdO2lmKG8obCkpe2kucHVzaChsKTt2YXIgYz1sW2FdO2MuX2lkPWErbC5faWQsYy5faGVpZ2h0PSh0LmhlaWdodC1yLmItci50KSpjLnRoaWNrbmVzcyxjLl9vZmZzZXRTaGlmdD1NYXRoLmZsb29yKGMuYm9yZGVyd2lkdGgvMil9fXQuX3JhbmdlU2xpZGVyRGF0YT1pfSxyLmF1dG9NYXJnaW5PcHRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbYV0sbz0xLzAscz1lLl9jb3VudGVyQXhlcyxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF0sdT1uLmdldEZyb21JZCh0LGMpO289TWF0aC5taW4obyx1LmRvbWFpblswXSl9ci5fb3BwQm90dG9tPW87dmFyIGY9ImJvdHRvbSI9PT1lLnNpZGUmJmUuX2JvdW5kaW5nQm94LmhlaWdodHx8MDtyZXR1cm4gci5fdGlja0hlaWdodD1mLHt4OjAseTpvLGw6MCxyOjAsdDowLGI6ci5faGVpZ2h0K3QuX2Z1bGxMYXlvdXQubWFyZ2luLmIrZixwYWQ6aS5leHRyYVBhZCsyKnIuX29mZnNldFNoaWZ0fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NTEsIi4vY29uc3RhbnRzIjo2NDd9XSw2NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIiksbz10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToicmFuZ2VzbGlkZXIiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNsaWRlcjpuLmV4dGVuZEZsYXQoe30saSx7eWF4aXM6YX0pfX19LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6dCgiLi9kcmF3IiksaXNWaXNpYmxlOm8uaXNWaXNpYmxlLG1ha2VEYXRhOm8ubWFrZURhdGEsYXV0b01hcmdpbk9wdHM6by5hdXRvTWFyZ2luT3B0c319LHsiLi4vLi4vbGliIjo3MDAsIi4vYXR0cmlidXRlcyI6NjQ1LCIuL2NhbGNfYXV0b3JhbmdlIjo2NDYsIi4vZGVmYXVsdHMiOjY0OCwiLi9kcmF3Ijo2NDksIi4vaGVscGVycyI6NjUwLCIuL29wcGF4aXNfYXR0cmlidXRlcyI6NjUyfV0sNjUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzU3VicGxvdE9iajohMCxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJmaXhlZCIsIm1hdGNoIl0sZGZsdDoibWF0Y2giLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In1dLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifX0se31dLDY1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxhPXQoIi4uL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9cygic2hhcGUiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmNsZSIsInJlY3QiLCJwYXRoIiwibGluZSJdLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4cmVmOm8oe30sbi54cmVmLHt9KSx4c2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNjYWxlZCIsInBpeGVsIl0sZGZsdDoic2NhbGVkIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHgxOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlyZWY6byh7fSxuLnlyZWYse30pLHlzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwicGl4ZWwiXSxkZmx0OiJzY2FsZWQiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seTA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seTE6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0scGF0aDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sbGluZTp7Y29sb3I6byh7fSxpLmNvbG9yLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOm8oe30saS53aWR0aCx7ZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0pLGRhc2g6byh7fSxhLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiYXJyYXlkcmF3In0pfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxLCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1NjAsIi4uL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3fV0sNjU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vY29uc3RhbnRzIiksbz10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBzKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnhzaXplbW9kZSx0LngwLHQueDEsdC5wYXRoLCExKX1mdW5jdGlvbiBsKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnlzaXplbW9kZSx0LnkwLHQueTEsdC5wYXRoLCEwKX1mdW5jdGlvbiBjKHQsZSxyLGkscyxsKXt2YXIgYz10LzIsdT1sO2lmKCJwaXhlbCI9PT1lKXt2YXIgZj1zP28uZXh0cmFjdFBhdGhDb29yZHMocyxsP2EucGFyYW1Jc1k6YS5wYXJhbUlzWCk6W3IsaV0saD1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxmKSxwPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGYpLGQ9cDwwP01hdGguYWJzKHApK2M6YyxnPWg+MD9oK2M6YztyZXR1cm57cHBhZDpjLHBwYWRwbHVzOnU/ZDpnLHBwYWRtaW51czp1P2c6ZH19cmV0dXJue3BwYWQ6Y319ZnVuY3Rpb24gdSh0LGUscixuLGkpe3ZhciBzPSJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT90LnIyYzp0LmQyYztpZih2b2lkIDAhPT1lKXJldHVybltzKGUpLHMocildO2lmKG4pe3ZhciBsLGMsdSxmLGg9MS8wLHA9LTEvMCxkPW4ubWF0Y2goYS5zZWdtZW50UkUpO2ZvcigiZGF0ZSI9PT10LnR5cGUmJihzPW8uZGVjb2RlRGF0ZShzKSksbD0wO2w8ZC5sZW5ndGg7bCsrKXZvaWQgMCE9PShjPWlbZFtsXS5jaGFyQXQoMCldLmRyYXduKSYmKCEodT1kW2xdLnN1YnN0cigxKS5tYXRjaChhLnBhcmFtUkUpKXx8dS5sZW5ndGg8Y3x8KChmPXModVtjXSkpPGgmJihoPWYpLGY+cCYmKHA9ZikpKTtyZXR1cm4gcD49aD9baCxwXTp2b2lkIDB9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9bi5maWx0ZXJWaXNpYmxlKGUuc2hhcGVzKTtpZihyLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYyxmLGg9cltvXTtpZihoLl9leHRyZW1lcz17fSwicGFwZXIiIT09aC54cmVmKXt2YXIgcD0icGl4ZWwiPT09aC54c2l6ZW1vZGU/aC54YW5jaG9yOmgueDAsZD0icGl4ZWwiPT09aC54c2l6ZW1vZGU/aC54YW5jaG9yOmgueDE7KGY9dShjPWkuZ2V0RnJvbUlkKHQsaC54cmVmKSxwLGQsaC5wYXRoLGEucGFyYW1Jc1gpKSYmKGguX2V4dHJlbWVzW2MuX2lkXT1pLmZpbmRFeHRyZW1lcyhjLGYscyhoKSkpfWlmKCJwYXBlciIhPT1oLnlyZWYpe3ZhciBnPSJwaXhlbCI9PT1oLnlzaXplbW9kZT9oLnlhbmNob3I6aC55MCx2PSJwaXhlbCI9PT1oLnlzaXplbW9kZT9oLnlhbmNob3I6aC55MTsoZj11KGM9aS5nZXRGcm9tSWQodCxoLnlyZWYpLGcsdixoLnBhdGgsYS5wYXJhbUlzWSkpJiYoaC5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsZixsKGgpKSl9fX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4vY29uc3RhbnRzIjo2NTUsIi4vaGVscGVycyI6NjU4fV0sNjU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2VnbWVudFJFOi9bTUxIVlFDVFNaXVteTUxIVlFDVFNaXSovZyxwYXJhbVJFOi9bXlxzLF0rL2cscGFyYW1Jc1g6e006ezA6ITAsZHJhd246MH0sTDp7MDohMCxkcmF3bjowfSxIOnswOiEwLGRyYXduOjB9LFY6e30sUTp7MDohMCwyOiEwLGRyYXduOjJ9LEM6ezA6ITAsMjohMCw0OiEwLGRyYXduOjR9LFQ6ezA6ITAsZHJhd246MH0sUzp7MDohMCwyOiEwLGRyYXduOjJ9LFo6e319LHBhcmFtSXNZOntNOnsxOiEwLGRyYXduOjF9LEw6ezE6ITAsZHJhd246MX0sSDp7fSxWOnswOiEwLGRyYXduOjB9LFE6ezE6ITAsMzohMCxkcmF3bjozfSxDOnsxOiEwLDM6ITAsNTohMCxkcmF3bjo1fSxUOnsxOiEwLGRyYXduOjF9LFM6ezE6ITAsMzohMCxkcmF3bjo1fSxaOnt9fSxudW1QYXJhbXM6e006MixMOjIsSDoxLFY6MSxROjQsQzo2LFQ6MixTOjQsWjowfX19LHt9XSw2NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1pZihhKCJ2aXNpYmxlIikpe2EoImxheWVyIiksYSgib3BhY2l0eSIpLGEoImZpbGxjb2xvciIpLGEoImxpbmUuY29sb3IiKSxhKCJsaW5lLndpZHRoIiksYSgibGluZS5kYXNoIik7Zm9yKHZhciBsPWEoInR5cGUiLHQucGF0aD8icGF0aCI6InJlY3QiKSxjPWEoInhzaXplbW9kZSIpLHU9YSgieXNpemVtb2RlIiksZj1bIngiLCJ5Il0saD0wO2g8MjtoKyspe3ZhciBwLGQsZyx2PWZbaF0sbT12KyJhbmNob3IiLHk9IngiPT09dj9jOnUseD17X2Z1bGxMYXlvdXQ6cn0sYj1pLmNvZXJjZVJlZih0LGUseCx2LCIiLCJwYXBlciIpO2lmKCJwYXBlciIhPT1iPygocD1pLmdldEZyb21JZCh4LGIpKS5fc2hhcGVJbmRpY2VzLnB1c2goZS5faW5kZXgpLGc9cy5yYW5nZVRvU2hhcGVQb3NpdGlvbihwKSxkPXMuc2hhcGVQb3NpdGlvblRvUmFuZ2UocCkpOmQ9Zz1uLmlkZW50aXR5LCJwYXRoIiE9PWwpe3ZhciBfPXYrIjAiLHc9disiMSIsaz10W19dLFQ9dFt3XTt0W19dPWQodFtfXSwhMCksdFt3XT1kKHRbd10sITApLCJwaXhlbCI9PT15PyhhKF8sMCksYSh3LDEwKSk6KGkuY29lcmNlUG9zaXRpb24oZSx4LGEsYixfLC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLHgsYSxiLHcsLjc1KSksZVtfXT1nKGVbX10pLGVbd109ZyhlW3ddKSx0W19dPWssdFt3XT1UfWlmKCJwaXhlbCI9PT15KXt2YXIgQT10W21dO3RbbV09ZCh0W21dLCEwKSxpLmNvZXJjZVBvc2l0aW9uKGUseCxhLGIsbSwuMjUpLGVbbV09ZyhlW21dKSx0W21dPUF9fSJwYXRoIj09PWw/YSgicGF0aCIpOm4ubm9uZU9yQWxsKHQsZSxbIngwIiwieDEiLCJ5MCIsInkxIl0pfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToic2hhcGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4vYXR0cmlidXRlcyI6NjUzLCIuL2hlbHBlcnMiOjY1OH1dLDY1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vY29sb3IiKSxzPXQoIi4uL2RyYXdpbmciKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixjPXQoIi4uL2RyYWdlbGVtZW50IiksdT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZj10KCIuL2NvbnN0YW50cyIpLGg9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gcCh0LGUpe3QuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2LnNlbGVjdEFsbCgnLnNoYXBlbGF5ZXIgW2RhdGEtaW5kZXg9IicrZSsnIl0nKS5yZW1vdmUoKTt2YXIgcj10Ll9mdWxsTGF5b3V0LnNoYXBlc1tlXXx8e307aWYoci5faW5wdXQmJiExIT09ci52aXNpYmxlKWlmKCJiZWxvdyIhPT1yLmxheWVyKW0odC5fZnVsbExheW91dC5fc2hhcGVVcHBlckxheWVyKTtlbHNlIGlmKCJwYXBlciI9PT1yLnhyZWZ8fCJwYXBlciI9PT1yLnlyZWYpbSh0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpO2Vsc2V7dmFyIHA9dC5fZnVsbExheW91dC5fcGxvdHNbci54cmVmK3IueXJlZl07aWYocCltKChwLm1haW5wbG90aW5mb3x8cCkuc2hhcGVsYXllcik7ZWxzZSBtKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcil9ZnVuY3Rpb24gbShwKXt2YXIgbT17ImRhdGEtaW5kZXgiOmUsImZpbGwtcnVsZSI6ImV2ZW5vZGQiLGQ6Zyh0LHIpfSx5PXIubGluZS53aWR0aD9yLmxpbmUuY29sb3I6InJnYmEoMCwwLDAsMCkiLHg9cC5hcHBlbmQoInBhdGgiKS5hdHRyKG0pLnN0eWxlKCJvcGFjaXR5IixyLm9wYWNpdHkpLmNhbGwoby5zdHJva2UseSkuY2FsbChvLmZpbGwsci5maWxsY29sb3IpLmNhbGwocy5kYXNoTGluZSxyLmxpbmUuZGFzaCxyLmxpbmUud2lkdGgpO2QoeCx0LHIpLHQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbiYmZnVuY3Rpb24odCxlLHIsbyxwKXt2YXIgbSx5LHgsYixfLHcsayxULEEsTSxTLEUsQyxMLHosTyxJPTEwLEQ9MTAsUD0icGl4ZWwiPT09ci54c2l6ZW1vZGUsUj0icGl4ZWwiPT09ci55c2l6ZW1vZGUsRj0ibGluZSI9PT1yLnR5cGUsQj0icGF0aCI9PT1yLnR5cGUsTj1sKHQubGF5b3V0LCJzaGFwZXMiLHIpLGo9Ti5tb2RpZnlJdGVtLFY9YS5nZXRGcm9tSWQodCxyLnhyZWYpLFU9YS5nZXRGcm9tSWQodCxyLnlyZWYpLHE9aC5nZXREYXRhVG9QaXhlbCh0LFYpLEg9aC5nZXREYXRhVG9QaXhlbCh0LFUsITApLEc9aC5nZXRQaXhlbFRvRGF0YSh0LFYpLFk9aC5nZXRQaXhlbFRvRGF0YSh0LFUsITApLFc9Rj9mdW5jdGlvbigpe3ZhciB0PU1hdGgubWF4KHIubGluZS53aWR0aCwxMCksbj1wLmFwcGVuZCgiZyIpLmF0dHIoImRhdGEtaW5kZXgiLG8pO24uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsZS5hdHRyKCJkIikpLnN0eWxlKHtjdXJzb3I6Im1vdmUiLCJzdHJva2Utd2lkdGgiOnQsInN0cm9rZS1vcGFjaXR5IjoiMCJ9KTt2YXIgaT17ImZpbGwtb3BhY2l0eSI6IjAifSxhPXQvMj4xMD90LzI6MTA7cmV0dXJuIG4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHsiZGF0YS1saW5lLXBvaW50Ijoic3RhcnQtcG9pbnQiLGN4OlA/cShyLnhhbmNob3IpK3IueDA6cShyLngwKSxjeTpSP0goci55YW5jaG9yKS1yLnkwOkgoci55MCkscjphfSkuc3R5bGUoaSkuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKSxuLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7ImRhdGEtbGluZS1wb2ludCI6ImVuZC1wb2ludCIsY3g6UD9xKHIueGFuY2hvcikrci54MTpxKHIueDEpLGN5OlI/SChyLnlhbmNob3IpLXIueTE6SChyLnkxKSxyOmF9KS5zdHlsZShpKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLG59KCk6ZSxYPXtlbGVtZW50Olcubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKG4pe1AmJihfPXEoci54YW5jaG9yKSk7UiYmKHc9SChyLnlhbmNob3IpKTsicGF0aCI9PT1yLnR5cGU/ej1yLnBhdGg6KG09UD9yLngwOnEoci54MCkseT1SP3IueTA6SChyLnkwKSx4PVA/ci54MTpxKHIueDEpLGI9Uj9yLnkxOkgoci55MSkpO208eD8oQT1tLEM9IngwIixNPXgsTD0ieDEiKTooQT14LEM9IngxIixNPW0sTD0ieDAiKTshUiYmeTxifHxSJiZ5PmI/KGs9eSxTPSJ5MCIsVD1iLEU9InkxIik6KGs9YixTPSJ5MSIsVD15LEU9InkwIik7WihuKSxLKHAsciksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUueHJlZixpPWUueXJlZixvPWEuZ2V0RnJvbUlkKHIsbiksbD1hLmdldEZyb21JZChyLGkpLGM9IiI7InBhcGVyIj09PW58fG8uYXV0b3JhbmdlfHwoYys9bik7InBhcGVyIj09PWl8fGwuYXV0b3JhbmdlfHwoYys9aSk7cy5zZXRDbGlwVXJsKHQsYz8iY2xpcCIrci5fZnVsbExheW91dC5fdWlkK2M6bnVsbCxyKX0oZSxyLHQpLFgubW92ZUZuPSJtb3ZlIj09PU8/JDpKfSxkb25lRm46ZnVuY3Rpb24oKXt1KGUpLFEocCksZChlLHQsciksbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsTi5nZXRVcGRhdGVPYmooKSl9LGNsaWNrRm46ZnVuY3Rpb24oKXtRKHApfX07ZnVuY3Rpb24gWih0KXtpZihGKU89InBhdGgiPT09dC50YXJnZXQudGFnTmFtZT8ibW92ZSI6InN0YXJ0LXBvaW50Ij09PXQudGFyZ2V0LmF0dHJpYnV0ZXNbImRhdGEtbGluZS1wb2ludCJdLnZhbHVlPyJyZXNpemUtb3Zlci1zdGFydC1wb2ludCI6InJlc2l6ZS1vdmVyLWVuZC1wb2ludCI7ZWxzZXt2YXIgcj1YLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLnJpZ2h0LXIubGVmdCxpPXIuYm90dG9tLXIudG9wLGE9dC5jbGllbnRYLXIubGVmdCxvPXQuY2xpZW50WS1yLnRvcCxzPSFCJiZuPkkmJmk+RCYmIXQuc2hpZnRLZXk/Yy5nZXRDdXJzb3IoYS9uLDEtby9pKToibW92ZSI7dShlLHMpLE89cy5zcGxpdCgiLSIpWzBdfX1mdW5jdGlvbiAkKG4saSl7aWYoInBhdGgiPT09ci50eXBlKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbz1hLHM9YTtQP2ooInhhbmNob3IiLHIueGFuY2hvcj1HKF8rbikpOihvPWZ1bmN0aW9uKHQpe3JldHVybiBHKHEodCkrbil9LFYmJiJkYXRlIj09PVYudHlwZSYmKG89aC5lbmNvZGVEYXRlKG8pKSksUj9qKCJ5YW5jaG9yIixyLnlhbmNob3I9WSh3K2kpKToocz1mdW5jdGlvbih0KXtyZXR1cm4gWShIKHQpK2kpfSxVJiYiZGF0ZSI9PT1VLnR5cGUmJihzPWguZW5jb2RlRGF0ZShzKSkpLGooInBhdGgiLHIucGF0aD12KHosbyxzKSl9ZWxzZSBQP2ooInhhbmNob3IiLHIueGFuY2hvcj1HKF8rbikpOihqKCJ4MCIsci54MD1HKG0rbikpLGooIngxIixyLngxPUcoeCtuKSkpLFI/aigieWFuY2hvciIsci55YW5jaG9yPVkodytpKSk6KGooInkwIixyLnkwPVkoeStpKSksaigieTEiLHIueTE9WShiK2kpKSk7ZS5hdHRyKCJkIixnKHQscikpLEsocCxyKX1mdW5jdGlvbiBKKG4saSl7aWYoQil7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG89YSxzPWE7UD9qKCJ4YW5jaG9yIixyLnhhbmNob3I9RyhfK24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhxKHQpK24pfSxWJiYiZGF0ZSI9PT1WLnR5cGUmJihvPWguZW5jb2RlRGF0ZShvKSkpLFI/aigieWFuY2hvciIsci55YW5jaG9yPVkodytpKSk6KHM9ZnVuY3Rpb24odCl7cmV0dXJuIFkoSCh0KStpKX0sVSYmImRhdGUiPT09VS50eXBlJiYocz1oLmVuY29kZURhdGUocykpKSxqKCJwYXRoIixyLnBhdGg9dih6LG8scykpfWVsc2UgaWYoRil7aWYoInJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50Ij09PU8pe3ZhciBsPW0rbixjPVI/eS1pOnkraTtqKCJ4MCIsci54MD1QP2w6RyhsKSksaigieTAiLHIueTA9Uj9jOlkoYykpfWVsc2UgaWYoInJlc2l6ZS1vdmVyLWVuZC1wb2ludCI9PT1PKXt2YXIgdT14K24sZj1SP2ItaTpiK2k7aigieDEiLHIueDE9UD91OkcodSkpLGooInkxIixyLnkxPVI/ZjpZKGYpKX19ZWxzZXt2YXIgZD1+Ty5pbmRleE9mKCJuIik/aytpOmssTj1+Ty5pbmRleE9mKCJzIik/VCtpOlQsVz1+Ty5pbmRleE9mKCJ3Iik/QStuOkEsWD1+Ty5pbmRleE9mKCJlIik/TStuOk07fk8uaW5kZXhPZigibiIpJiZSJiYoZD1rLWkpLH5PLmluZGV4T2YoInMiKSYmUiYmKE49VC1pKSwoIVImJk4tZD5EfHxSJiZkLU4+RCkmJihqKFMscltTXT1SP2Q6WShkKSksaihFLHJbRV09Uj9OOlkoTikpKSxYLVc+SSYmKGooQyxyW0NdPVA/VzpHKFcpKSxqKEwscltMXT1QP1g6RyhYKSkpfWUuYXR0cigiZCIsZyh0LHIpKSxLKHAscil9ZnVuY3Rpb24gSyh0LGUpeyhQfHxSKSYmZnVuY3Rpb24oKXt2YXIgcj0icGF0aCIhPT1lLnR5cGUsbj10LnNlbGVjdEFsbCgiLnZpc3VhbC1jdWUiKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2ZpbGw6IiNmZmYiLCJmaWxsLXJ1bGUiOiJldmVub2RkIixzdHJva2U6IiMwMDAiLCJzdHJva2Utd2lkdGgiOjF9KS5jbGFzc2VkKCJ2aXN1YWwtY3VlIiwhMCk7dmFyIGE9cShQP2UueGFuY2hvcjppLm1pZFJhbmdlKHI/W2UueDAsZS54MV06aC5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsZi5wYXJhbUlzWCkpKSxvPUgoUj9lLnlhbmNob3I6aS5taWRSYW5nZShyP1tlLnkwLGUueTFdOmguZXh0cmFjdFBhdGhDb29yZHMoZS5wYXRoLGYucGFyYW1Jc1kpKSk7aWYoYT1oLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhhLDEpLG89aC5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmcobywxKSxQJiZSKXt2YXIgcz0iTSIrKGEtMS0xKSsiLCIrKG8tMS0xKSsiaC04djJoOCB2OGgydi04IGg4di0yaC04IHYtOGgtMiBaIjtuLmF0dHIoImQiLHMpfWVsc2UgaWYoUCl7dmFyIGw9Ik0iKyhhLTEtMSkrIiwiKyhvLTktMSkrInYxOCBoMiB2LTE4IFoiO24uYXR0cigiZCIsbCl9ZWxzZXt2YXIgYz0iTSIrKGEtOS0xKSsiLCIrKG8tMS0xKSsiaDE4IHYyIGgtMTggWiI7bi5hdHRyKCJkIixjKX19KCl9ZnVuY3Rpb24gUSh0KXt0LnNlbGVjdEFsbCgiLnZpc3VhbC1jdWUiKS5yZW1vdmUoKX1jLmluaXQoWCksVy5ub2RlKCkub25tb3VzZW1vdmU9Wn0odCx4LHIsZSxwKX19ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49KHIueHJlZityLnlyZWYpLnJlcGxhY2UoL3BhcGVyL2csIiIpO3Muc2V0Q2xpcFVybCh0LG4/ImNsaXAiK2UuX2Z1bGxMYXlvdXQuX3VpZCtuOm51bGwsZSl9ZnVuY3Rpb24gZyh0LGUpe3ZhciByLG4sbyxzLGwsYyx1LHAsZD1lLnR5cGUsZz1hLmdldEZyb21JZCh0LGUueHJlZiksdj1hLmdldEZyb21JZCh0LGUueXJlZiksbT10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGc/KHI9aC5zaGFwZVBvc2l0aW9uVG9SYW5nZShnKSxuPWZ1bmN0aW9uKHQpe3JldHVybiBnLl9vZmZzZXQrZy5yMnAocih0LCEwKSl9KTpuPWZ1bmN0aW9uKHQpe3JldHVybiBtLmwrbS53KnR9LHY/KG89aC5zaGFwZVBvc2l0aW9uVG9SYW5nZSh2KSxzPWZ1bmN0aW9uKHQpe3JldHVybiB2Ll9vZmZzZXQrdi5yMnAobyh0LCEwKSl9KTpzPWZ1bmN0aW9uKHQpe3JldHVybiBtLnQrbS5oKigxLXQpfSwicGF0aCI9PT1kKXJldHVybiBnJiYiZGF0ZSI9PT1nLnR5cGUmJihuPWguZGVjb2RlRGF0ZShuKSksdiYmImRhdGUiPT09di50eXBlJiYocz1oLmRlY29kZURhdGUocykpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LnBhdGgsYT10LnhzaXplbW9kZSxvPXQueXNpemVtb2RlLHM9dC54YW5jaG9yLGw9dC55YW5jaG9yO3JldHVybiBuLnJlcGxhY2UoZi5zZWdtZW50UkUsZnVuY3Rpb24odCl7dmFyIG49MCxjPXQuY2hhckF0KDApLHU9Zi5wYXJhbUlzWFtjXSxoPWYucGFyYW1Jc1lbY10scD1mLm51bVBhcmFtc1tjXSxkPXQuc3Vic3RyKDEpLnJlcGxhY2UoZi5wYXJhbVJFLGZ1bmN0aW9uKHQpe3JldHVybiB1W25dP3Q9InBpeGVsIj09PWE/ZShzKStOdW1iZXIodCk6ZSh0KTpoW25dJiYodD0icGl4ZWwiPT09bz9yKGwpLU51bWJlcih0KTpyKHQpKSwrK24+cCYmKHQ9IlgiKSx0fSk7cmV0dXJuIG4+cCYmKGQ9ZC5yZXBsYWNlKC9bXHMsXSpYLiovLCIiKSxpLmxvZygiSWdub3JpbmcgZXh0cmEgcGFyYW1zIGluIHNlZ21lbnQgIit0KSksYytkfSl9KGUsbixzKTtpZigicGl4ZWwiPT09ZS54c2l6ZW1vZGUpe3ZhciB5PW4oZS54YW5jaG9yKTtsPXkrZS54MCxjPXkrZS54MX1lbHNlIGw9bihlLngwKSxjPW4oZS54MSk7aWYoInBpeGVsIj09PWUueXNpemVtb2RlKXt2YXIgeD1zKGUueWFuY2hvcik7dT14LWUueTAscD14LWUueTF9ZWxzZSB1PXMoZS55MCkscD1zKGUueTEpO2lmKCJsaW5lIj09PWQpcmV0dXJuIk0iK2wrIiwiK3UrIkwiK2MrIiwiK3A7aWYoInJlY3QiPT09ZClyZXR1cm4iTSIrbCsiLCIrdSsiSCIrYysiViIrcCsiSCIrbCsiWiI7dmFyIGI9KGwrYykvMixfPSh1K3ApLzIsdz1NYXRoLmFicyhiLWwpLGs9TWF0aC5hYnMoXy11KSxUPSJBIit3KyIsIitrLEE9Yit3KyIsIitfO3JldHVybiJNIitBK1QrIiAwIDEsMSAiKyhiKyIsIisoXy1rKSkrVCsiIDAgMCwxICIrQSsiWiJ9ZnVuY3Rpb24gdih0LGUscil7cmV0dXJuIHQucmVwbGFjZShmLnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGk9dC5jaGFyQXQoMCksYT1mLnBhcmFtSXNYW2ldLG89Zi5wYXJhbUlzWVtpXSxzPWYubnVtUGFyYW1zW2ldO3JldHVybiBpK3Quc3Vic3RyKDEpLnJlcGxhY2UoZi5wYXJhbVJFLGZ1bmN0aW9uKHQpe3JldHVybiBuPj1zP3Q6KGFbbl0/dD1lKHQpOm9bbl0mJih0PXIodCkpLG4rKyx0KX0pfSl9ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7Zm9yKHZhciByIGluIGUuX3NoYXBlVXBwZXJMYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxlLl9zaGFwZUxvd2VyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS5fcGxvdHMpe3ZhciBuPWUuX3Bsb3RzW3JdLnNoYXBlbGF5ZXI7biYmbi5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKX1mb3IodmFyIGk9MDtpPGUuc2hhcGVzLmxlbmd0aDtpKyspZS5zaGFwZXNbaV0udmlzaWJsZSYmcCh0LGkpfSxkcmF3T25lOnB9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MjAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY29sb3IiOjU3NywiLi4vZHJhZ2VsZW1lbnQiOjU5NSwiLi4vZHJhd2luZyI6NTk4LCIuL2NvbnN0YW50cyI6NjU1LCIuL2hlbHBlcnMiOjY1OH1dLDY1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vbGliIik7ci5yYW5nZVRvU2hhcGVQb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4ibG9nIj09PXQudHlwZT90LnIyZDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuc2hhcGVQb3NpdGlvblRvUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuImxvZyI9PT10LnR5cGU/dC5kMnI6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxyLmRlY29kZURhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UmJihlPWUucmVwbGFjZSgiXyIsIiAiKSksdChlKX19LHIuZW5jb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkucmVwbGFjZSgiICIsIl8iKX19LHIuZXh0cmFjdFBhdGhDb29yZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtyZXR1cm4gdC5tYXRjaChuLnNlZ21lbnRSRSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgYT1lW3QuY2hhckF0KDApXS5kcmF3bjtpZih2b2lkIDAhPT1hKXt2YXIgbz10LnN1YnN0cigxKS5tYXRjaChuLnBhcmFtUkUpOyFvfHxvLmxlbmd0aDxhfHxyLnB1c2goaS5jbGVhbk51bWJlcihvW2FdKSl9fSkscn0sci5nZXREYXRhVG9QaXhlbD1mdW5jdGlvbih0LGUsbil7dmFyIGksYT10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpe3ZhciBvPXIuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZSk7aT1mdW5jdGlvbih0KXtyZXR1cm4gZS5fb2Zmc2V0K2UucjJwKG8odCwhMCkpfSwiZGF0ZSI9PT1lLnR5cGUmJihpPXIuZGVjb2RlRGF0ZShpKSl9ZWxzZSBpPW4/ZnVuY3Rpb24odCl7cmV0dXJuIGEudCthLmgqKDEtdCl9OmZ1bmN0aW9uKHQpe3JldHVybiBhLmwrYS53KnR9O3JldHVybiBpfSxyLmdldFBpeGVsVG9EYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5yYW5nZVRvU2hhcGVQb3NpdGlvbihlKTtpPWZ1bmN0aW9uKHQpe3JldHVybiBvKGUucDJyKHQtZS5fb2Zmc2V0KSl9fWVsc2UgaT1uP2Z1bmN0aW9uKHQpe3JldHVybiAxLSh0LWEudCkvYS5ofTpmdW5jdGlvbih0KXtyZXR1cm4odC1hLmwpL2Eud307cmV0dXJuIGl9LHIucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MT09PU1hdGgucm91bmQoZSUyKSxuPU1hdGgucm91bmQodCk7cmV0dXJuIHI/bisuNTpufX0seyIuLi8uLi9saWIiOjcwMCwiLi9jb25zdGFudHMiOjY1NX1dLDY1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RyYXciKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToic2hhcGVzIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyIpKCJzaGFwZXMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyI6NzU4LCIuL2F0dHJpYnV0ZXMiOjY1MywiLi9jYWxjX2F1dG9yYW5nZSI6NjU0LCIuL2RlZmF1bHRzIjo2NTYsIi4vZHJhdyI6NjU3fV0sNjYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmREZWVwQWxsLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPXQoIi4vY29uc3RhbnRzIiksdT1sKCJzdGVwIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXN0eWxlIiwicmVsYXlvdXQiLCJhbmltYXRlIiwidXBkYXRlIiwic2tpcCJdLGRmbHQ6InJlc3R5bGUifSxhcmdzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmcifSx2YWx1ZTp7dmFsVHlwZToic3RyaW5nIn0sZXhlY3V0ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19KTtlLmV4cG9ydHM9byhsKCJzbGlkZXIiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxhY3RpdmU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowfSxzdGVwczp1LGxlbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyYWN0aW9uIiwicGl4ZWxzIl0sZGZsdDoiZnJhY3Rpb24ifSxsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjB9LHBhZDphKGkoe2VkaXRUeXBlOiJhcnJheWRyYXcifSkse30se3Q6e2RmbHQ6MjB9fSkseGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjB9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AifSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjE1MH0sZWFzaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cy50cmFuc2l0aW9uLmVhc2luZy52YWx1ZXMsZGZsdDoiY3ViaWMtaW4tb3V0In19LGN1cnJlbnR2YWx1ZTp7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIn0sZm9udDpuKHt9KX0sZm9udDpuKHt9KSxhY3RpdmViZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLmdyaXBCZ0FjdGl2ZUNvbG9yfSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnJhaWxCZ0NvbG9yfSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy5yYWlsQm9yZGVyQ29sb3J9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy5yYWlsQm9yZGVyV2lkdGh9LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLnRpY2tMZW5ndGh9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy50aWNrQ29sb3J9LHRpY2t3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LG1pbm9ydGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMubWlub3JUaWNrTGVuZ3RofX0pLCJhcnJheWRyYXciLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyI6NzQzLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NCwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiOjgwOSwiLi9jb25zdGFudHMiOjY2MX1dLDY2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InNsaWRlcnMiLGNvbnRhaW5lckNsYXNzTmFtZToic2xpZGVyLWNvbnRhaW5lciIsZ3JvdXBDbGFzc05hbWU6InNsaWRlci1ncm91cCIsaW5wdXRBcmVhQ2xhc3M6InNsaWRlci1pbnB1dC1hcmVhIixyYWlsUmVjdENsYXNzOiJzbGlkZXItcmFpbC1yZWN0IixyYWlsVG91Y2hSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXRvdWNoLXJlY3QiLGdyaXBSZWN0Q2xhc3M6InNsaWRlci1ncmlwLXJlY3QiLHRpY2tSZWN0Q2xhc3M6InNsaWRlci10aWNrLXJlY3QiLGlucHV0UHJveHlDbGFzczoic2xpZGVyLWlucHV0LXByb3h5IixsYWJlbHNDbGFzczoic2xpZGVyLWxhYmVscyIsbGFiZWxHcm91cENsYXNzOiJzbGlkZXItbGFiZWwtZ3JvdXAiLGxhYmVsQ2xhc3M6InNsaWRlci1sYWJlbCIsY3VycmVudFZhbHVlQ2xhc3M6InNsaWRlci1jdXJyZW50LXZhbHVlIixyYWlsSGVpZ2h0OjUsbWVudUluZGV4QXR0ck5hbWU6InNsaWRlci1hY3RpdmUtaW5kZXgiLGF1dG9NYXJnaW5JZFJvb3Q6InNsaWRlci0iLG1pbldpZHRoOjMwLG1pbkhlaWdodDozMCx0ZXh0UGFkWDo0MCxhcnJvd09mZnNldFg6NCxyYWlsUmFkaXVzOjIscmFpbFdpZHRoOjUscmFpbEJvcmRlcjo0LHJhaWxCb3JkZXJXaWR0aDoxLHJhaWxCb3JkZXJDb2xvcjoiI2JlYzhkOSIscmFpbEJnQ29sb3I6IiNmOGZhZmMiLHJhaWxJbnNldDo4LHN0ZXBJbnNldDoxMCxncmlwUmFkaXVzOjEwLGdyaXBXaWR0aDoyMCxncmlwSGVpZ2h0OjIwLGdyaXBCb3JkZXI6MjAsZ3JpcEJvcmRlcldpZHRoOjEsZ3JpcEJvcmRlckNvbG9yOiIjYmVjOGQ5IixncmlwQmdDb2xvcjoiI2Y2ZjhmYSIsZ3JpcEJnQWN0aXZlQ29sb3I6IiNkYmRkZTAiLGxhYmVsUGFkZGluZzo4LGxhYmVsT2Zmc2V0OjAsdGlja1dpZHRoOjEsdGlja0NvbG9yOiIjMzMzIix0aWNrT2Zmc2V0OjI1LHRpY2tMZW5ndGg6NyxtaW5vclRpY2tPZmZzZXQ6MjUsbWlub3JUaWNrQ29sb3I6IiMzMzMiLG1pbm9yVGlja0xlbmd0aDo0LGN1cnJlbnRWYWx1ZVBhZGRpbmc6OCxjdXJyZW50VmFsdWVJbnNldDowfX0se31dLDY2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLm5hbWUscz1hLnN0ZXBzO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1mb3IodmFyIHM9aSh0LGUse25hbWU6InN0ZXBzIixoYW5kbGVJdGVtRGVmYXVsdHM6Y30pLGw9MCx1PTA7dTxzLmxlbmd0aDt1Kyspc1t1XS52aXNpYmxlJiZsKys7aWYobDwyP2UudmlzaWJsZT0hMTpvKCJ2aXNpYmxlIikpe2UuX3N0ZXBDb3VudD1sO3ZhciBmPWUuX3Zpc2libGVTdGVwcz1uLmZpbHRlclZpc2libGUocyk7KHNbbygiYWN0aXZlIildfHx7fSkudmlzaWJsZXx8KGUuYWN0aXZlPWZbMF0uX2luZGV4KSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygibGVuIiksbygibGVubW9kZSIpLG8oInBhZC50IiksbygicGFkLnIiKSxvKCJwYWQuYiIpLG8oInBhZC5sIiksbi5jb2VyY2VGb250KG8sImZvbnQiLHIuZm9udCksbygiY3VycmVudHZhbHVlLnZpc2libGUiKSYmKG8oImN1cnJlbnR2YWx1ZS54YW5jaG9yIiksbygiY3VycmVudHZhbHVlLnByZWZpeCIpLG8oImN1cnJlbnR2YWx1ZS5zdWZmaXgiKSxvKCJjdXJyZW50dmFsdWUub2Zmc2V0Iiksbi5jb2VyY2VGb250KG8sImN1cnJlbnR2YWx1ZS5mb250IixlLmZvbnQpKSxvKCJ0cmFuc2l0aW9uLmR1cmF0aW9uIiksbygidHJhbnNpdGlvbi5lYXNpbmciKSxvKCJiZ2NvbG9yIiksbygiYWN0aXZlYmdjb2xvciIpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSxvKCJ0aWNrbGVuIiksbygidGlja3dpZHRoIiksbygidGlja2NvbG9yIiksbygibWlub3J0aWNrbGVuIil9fWZ1bmN0aW9uIGModCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aWYoInNraXAiPT09dC5tZXRob2R8fEFycmF5LmlzQXJyYXkodC5hcmdzKT9yKCJ2aXNpYmxlIik6ZS52aXNpYmxlPSExKXtyKCJtZXRob2QiKSxyKCJhcmdzIik7dmFyIGk9cigibGFiZWwiLCJzdGVwLSIrZS5faW5kZXgpO3IoInZhbHVlIixpKSxyKCJleGVjdXRlIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLHtuYW1lOm8saGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzQ0LCIuL2F0dHJpYnV0ZXMiOjY2MCwiLi9jb25zdGFudHMiOjY2MX1dLDY2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uL2NvbG9yIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLHU9dCgiLi9jb25zdGFudHMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxoPWYuTElORV9TUEFDSU5HLHA9Zi5GUk9NX1RMLGQ9Zi5GUk9NX0JSO2Z1bmN0aW9uIGcodCl7cmV0dXJuIHUuYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrdS5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh1LmxhYmVsR3JvdXBDbGFzcywhMCk7dmFyIGE9MCxjPTA7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWIobi5zZWxlY3QodGhpcykse3N0ZXA6dH0sZSkubm9kZSgpO2lmKHIpe3ZhciBpPW8uYkJveChyKTtjPU1hdGgubWF4KGMsaS5oZWlnaHQpLGE9TWF0aC5tYXgoYSxpLndpZHRoKX19KSxyLnJlbW92ZSgpO3ZhciBmPWUuX2RpbXM9e307Zi5pbnB1dEFyZWFXaWR0aD1NYXRoLm1heCh1LnJhaWxXaWR0aCx1LmdyaXBIZWlnaHQpO3ZhciBoPXQuX2Z1bGxMYXlvdXQuX3NpemU7Zi5seD1oLmwraC53KmUueCxmLmx5PWgudCtoLmgqKDEtZS55KSwiZnJhY3Rpb24iPT09ZS5sZW5tb2RlP2Yub3V0ZXJMZW5ndGg9TWF0aC5yb3VuZChoLncqZS5sZW4pOmYub3V0ZXJMZW5ndGg9ZS5sZW4sZi5pbnB1dEFyZWFTdGFydD0wLGYuaW5wdXRBcmVhTGVuZ3RoPU1hdGgucm91bmQoZi5vdXRlckxlbmd0aC1lLnBhZC5sLWUucGFkLnIpO3ZhciB2PShmLmlucHV0QXJlYUxlbmd0aC0yKnUuc3RlcEluc2V0KS8oZS5fc3RlcENvdW50LTEpLG09YSt1LmxhYmVsUGFkZGluZztpZihmLmxhYmVsU3RyaWRlPU1hdGgubWF4KDEsTWF0aC5jZWlsKG0vdikpLGYubGFiZWxIZWlnaHQ9YyxmLmN1cnJlbnRWYWx1ZU1heFdpZHRoPTAsZi5jdXJyZW50VmFsdWVIZWlnaHQ9MCxmLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PTAsZi5jdXJyZW50VmFsdWVNYXhMaW5lcz0xLGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciB4PW8udGVzdGVyLmFwcGVuZCgiZyIpO3IuZWFjaChmdW5jdGlvbih0KXt2YXIgcj15KHgsZSx0LmxhYmVsKSxuPXIubm9kZSgpJiZvLmJCb3goci5ub2RlKCkpfHx7d2lkdGg6MCxoZWlnaHQ6MH0saT1sLmxpbmVDb3VudChyKTtmLmN1cnJlbnRWYWx1ZU1heFdpZHRoPU1hdGgubWF4KGYuY3VycmVudFZhbHVlTWF4V2lkdGgsTWF0aC5jZWlsKG4ud2lkdGgpKSxmLmN1cnJlbnRWYWx1ZUhlaWdodD1NYXRoLm1heChmLmN1cnJlbnRWYWx1ZUhlaWdodCxNYXRoLmNlaWwobi5oZWlnaHQpKSxmLmN1cnJlbnRWYWx1ZU1heExpbmVzPU1hdGgubWF4KGYuY3VycmVudFZhbHVlTWF4TGluZXMsaSl9KSxmLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PWYuY3VycmVudFZhbHVlSGVpZ2h0K2UuY3VycmVudHZhbHVlLm9mZnNldCx4LnJlbW92ZSgpfWYuaGVpZ2h0PWYuY3VycmVudFZhbHVlVG90YWxIZWlnaHQrdS50aWNrT2Zmc2V0K2UudGlja2xlbit1LmxhYmVsT2Zmc2V0K2YubGFiZWxIZWlnaHQrZS5wYWQudCtlLnBhZC5iO3ZhciBfPSJsZWZ0IjtzLmlzUmlnaHRBbmNob3IoZSkmJihmLmx4LT1mLm91dGVyTGVuZ3RoLF89InJpZ2h0Iikscy5pc0NlbnRlckFuY2hvcihlKSYmKGYubHgtPWYub3V0ZXJMZW5ndGgvMixfPSJjZW50ZXIiKTt2YXIgdz0idG9wIjtzLmlzQm90dG9tQW5jaG9yKGUpJiYoZi5seS09Zi5oZWlnaHQsdz0iYm90dG9tIikscy5pc01pZGRsZUFuY2hvcihlKSYmKGYubHktPWYuaGVpZ2h0LzIsdz0ibWlkZGxlIiksZi5vdXRlckxlbmd0aD1NYXRoLmNlaWwoZi5vdXRlckxlbmd0aCksZi5oZWlnaHQ9TWF0aC5jZWlsKGYuaGVpZ2h0KSxmLmx4PU1hdGgucm91bmQoZi5seCksZi5seT1NYXRoLnJvdW5kKGYubHkpO3ZhciBrPXt5OmUueSxiOmYuaGVpZ2h0KmRbd10sdDpmLmhlaWdodCpwW3ddfTsiZnJhY3Rpb24iPT09ZS5sZW5tb2RlPyhrLmw9MCxrLnhsPWUueC1lLmxlbipwW19dLGsucj0wLGsueHI9ZS54K2UubGVuKmRbX10pOihrLng9ZS54LGsubD1mLm91dGVyTGVuZ3RoKnBbX10say5yPWYub3V0ZXJMZW5ndGgqZFtfXSksaS5hdXRvTWFyZ2luKHQsZyhlKSxrKX1mdW5jdGlvbiB5KHQsZSxyKXtpZihlLmN1cnJlbnR2YWx1ZS52aXNpYmxlKXt2YXIgbixpLGE9ZS5fZGltcztzd2l0Y2goZS5jdXJyZW50dmFsdWUueGFuY2hvcil7Y2FzZSJyaWdodCI6bj1hLmlucHV0QXJlYUxlbmd0aC11LmN1cnJlbnRWYWx1ZUluc2V0LWEuY3VycmVudFZhbHVlTWF4V2lkdGgsaT0ibGVmdCI7YnJlYWs7Y2FzZSJjZW50ZXIiOm49LjUqYS5pbnB1dEFyZWFMZW5ndGgsaT0ibWlkZGxlIjticmVhaztkZWZhdWx0Om49dS5jdXJyZW50VmFsdWVJbnNldCxpPSJsZWZ0In12YXIgYz1zLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0Iix1LmxhYmVsQ2xhc3MsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cih7InRleHQtYW5jaG9yIjppLCJkYXRhLW5vdGV4IjoxfSl9KSxmPWUuY3VycmVudHZhbHVlLnByZWZpeD9lLmN1cnJlbnR2YWx1ZS5wcmVmaXg6IiI7aWYoInN0cmluZyI9PXR5cGVvZiByKWYrPXI7ZWxzZXt2YXIgcD1lLnN0ZXBzW2UuYWN0aXZlXS5sYWJlbCxkPWUuX2dkLl9mdWxsTGF5b3V0Lm1ldGE7ZCYmKHA9cy50ZW1wbGF0ZVN0cmluZyhwLHttZXRhOmR9KSksZis9cH1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgmJihmKz1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgpLGMuY2FsbChvLmZvbnQsZS5jdXJyZW50dmFsdWUuZm9udCkudGV4dChmKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLGUuX2dkKTt2YXIgZz1sLmxpbmVDb3VudChjKSx2PShhLmN1cnJlbnRWYWx1ZU1heExpbmVzKzEtZykqZS5jdXJyZW50dmFsdWUuZm9udC5zaXplKmg7cmV0dXJuIGwucG9zaXRpb25UZXh0KGMsbix2KSxjfX1mdW5jdGlvbiB4KHQsZSxyKXtzLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iix1LmdyaXBSZWN0Q2xhc3MsZnVuY3Rpb24obil7bi5jYWxsKFQsZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkuYXR0cih7d2lkdGg6dS5ncmlwV2lkdGgsaGVpZ2h0OnUuZ3JpcEhlaWdodCxyeDp1LmdyaXBSYWRpdXMscnk6dS5ncmlwUmFkaXVzfSkuY2FsbChhLnN0cm9rZSxyLmJvcmRlcmNvbG9yKS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gYih0LGUscil7dmFyIG49cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsdS5sYWJlbENsYXNzLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsImRhdGEtbm90ZXgiOjF9KX0pLGk9ZS5zdGVwLmxhYmVsLGE9ci5fZ2QuX2Z1bGxMYXlvdXQubWV0YTtyZXR1cm4gYSYmKGk9cy50ZW1wbGF0ZVN0cmluZyhpLHttZXRhOmF9KSksbi5jYWxsKG8uZm9udCxyLmZvbnQpLnRleHQoaSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyLl9nZCksbn1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9cy5lbnN1cmVTaW5nbGUodCwiZyIsdS5sYWJlbHNDbGFzcyksaT1lLl9kaW1zLGE9ci5zZWxlY3RBbGwoImcuIit1LmxhYmVsR3JvdXBDbGFzcykuZGF0YShpLmxhYmVsU3RlcHMpO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHUubGFiZWxHcm91cENsYXNzLCEwKSxhLmV4aXQoKS5yZW1vdmUoKSxhLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ci5jYWxsKGIsdCxlKSxvLnNldFRyYW5zbGF0ZShyLFMoZSx0LmZyYWN0aW9uKSx1LnRpY2tPZmZzZXQrZS50aWNrbGVuK2UuZm9udC5zaXplKmgrdS5sYWJlbE9mZnNldCtpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pfWZ1bmN0aW9uIHcodCxlLHIsbixpKXt2YXIgYT1NYXRoLnJvdW5kKG4qKHIuX3N0ZXBDb3VudC0xKSksbz1yLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4O28hPT1yLmFjdGl2ZSYmayh0LGUscixvLCEwLGkpfWZ1bmN0aW9uIGsodCxlLHIsbixhLG8pe3ZhciBzPXIuYWN0aXZlO3IuYWN0aXZlPW4sYyh0LmxheW91dCx1Lm5hbWUscikuYXBwbHlVcGRhdGUoImFjdGl2ZSIsbik7dmFyIGw9ci5zdGVwc1tyLmFjdGl2ZV07ZS5jYWxsKE0scixvKSxlLmNhbGwoeSxyKSx0LmVtaXQoInBsb3RseV9zbGlkZXJjaGFuZ2UiLHtzbGlkZXI6cixzdGVwOnIuc3RlcHNbci5hY3RpdmVdLGludGVyYWN0aW9uOmEscHJldmlvdXNBY3RpdmU6c30pLGwmJmwubWV0aG9kJiZhJiYoZS5fbmV4dE1ldGhvZD8oZS5fbmV4dE1ldGhvZC5zdGVwPWwsZS5fbmV4dE1ldGhvZC5kb0NhbGxiYWNrPWEsZS5fbmV4dE1ldGhvZC5kb1RyYW5zaXRpb249byk6KGUuX25leHRNZXRob2Q9e3N0ZXA6bCxkb0NhbGxiYWNrOmEsZG9UcmFuc2l0aW9uOm99LGUuX25leHRNZXRob2RSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3ZhciByPWUuX25leHRNZXRob2Quc3RlcDtyLm1ldGhvZCYmKHIuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHIubWV0aG9kLHIuYXJncyksZS5fbmV4dE1ldGhvZD1udWxsLGUuX25leHRNZXRob2RSYWY9bnVsbCl9KSkpfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBpPXIubm9kZSgpLG89bi5zZWxlY3QoZSk7ZnVuY3Rpb24gcygpe3JldHVybiByLmRhdGEoKVswXX10Lm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7dmFyIHQ9cygpO2UuZW1pdCgicGxvdGx5X3NsaWRlcnN0YXJ0Iix7c2xpZGVyOnR9KTt2YXIgbD1yLnNlbGVjdCgiLiIrdS5ncmlwUmVjdENsYXNzKTtuLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLG4uZXZlbnQucHJldmVudERlZmF1bHQoKSxsLmNhbGwoYS5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIGM9RSh0LG4ubW91c2UoaSlbMF0pO3coZSxyLHQsYywhMCksdC5fZHJhZ2dpbmc9ITAsby5vbigibW91c2Vtb3ZlIixmdW5jdGlvbigpe3ZhciB0PXMoKSxhPUUodCxuLm1vdXNlKGkpWzBdKTt3KGUscix0LGEsITEpfSksby5vbigibW91c2V1cCIsZnVuY3Rpb24oKXt2YXIgdD1zKCk7dC5fZHJhZ2dpbmc9ITEsbC5jYWxsKGEuZmlsbCx0LmJnY29sb3IpLG8ub24oIm1vdXNldXAiLG51bGwpLG8ub24oIm1vdXNlbW92ZSIsbnVsbCksZS5lbWl0KCJwbG90bHlfc2xpZGVyZW5kIix7c2xpZGVyOnQsc3RlcDp0LnN0ZXBzW3QuYWN0aXZlXX0pfSl9KX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInJlY3QuIit1LnRpY2tSZWN0Q2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKSxpPWUuX2RpbXM7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQodS50aWNrUmVjdENsYXNzLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmF0dHIoe3dpZHRoOmUudGlja3dpZHRoKyJweCIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIHM9ciVpLmxhYmVsU3RyaWRlPT0wLGw9bi5zZWxlY3QodGhpcyk7bC5hdHRyKHtoZWlnaHQ6cz9lLnRpY2tsZW46ZS5taW5vcnRpY2tsZW59KS5jYWxsKGEuZmlsbCxlLnRpY2tjb2xvciksby5zZXRUcmFuc2xhdGUobCxTKGUsci8oZS5fc3RlcENvdW50LTEpKS0uNSplLnRpY2t3aWR0aCwocz91LnRpY2tPZmZzZXQ6dS5taW5vclRpY2tPZmZzZXQpK2kuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfSl9ZnVuY3Rpb24gTSh0LGUscil7Zm9yKHZhciBuPXQuc2VsZWN0KCJyZWN0LiIrdS5ncmlwUmVjdENsYXNzKSxpPTAsYT0wO2E8ZS5fc3RlcENvdW50O2ErKylpZihlLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4PT09ZS5hY3RpdmUpe2k9YTticmVha312YXIgbz1TKGUsaS8oZS5fc3RlcENvdW50LTEpKTtpZighZS5faW52b2tpbmdDb21tYW5kKXt2YXIgcz1uO3ImJmUudHJhbnNpdGlvbi5kdXJhdGlvbj4wJiYocz1zLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlLnRyYW5zaXRpb24uZHVyYXRpb24pLmVhc2UoZS50cmFuc2l0aW9uLmVhc2luZykpLHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG8tLjUqdS5ncmlwV2lkdGgpKyIsIitlLl9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KyIpIil9fWZ1bmN0aW9uIFModCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K3Uuc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKnUuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKGUtdS5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqdS5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuPXIuX2RpbXMsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iix1LnJhaWxUb3VjaFJlY3RDbGFzcyxmdW5jdGlvbihuKXtuLmNhbGwoVCxlLHQscikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KTtpLmF0dHIoe3dpZHRoOm4uaW5wdXRBcmVhTGVuZ3RoLGhlaWdodDpNYXRoLm1heChuLmlucHV0QXJlYVdpZHRoLHUudGlja09mZnNldCtyLnRpY2tsZW4rbi5sYWJlbEhlaWdodCl9KS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLmF0dHIoIm9wYWNpdHkiLDApLG8uc2V0VHJhbnNsYXRlKGksMCxuLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9ZS5fZGltcyxuPXIuaW5wdXRBcmVhTGVuZ3RoLTIqdS5yYWlsSW5zZXQsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iix1LnJhaWxSZWN0Q2xhc3MpO2kuYXR0cih7d2lkdGg6bixoZWlnaHQ6dS5yYWlsV2lkdGgscng6dS5yYWlsUmFkaXVzLHJ5OnUucmFpbFJhZGl1cywic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KS5jYWxsKGEuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKSxvLnNldFRyYW5zbGF0ZShpLHUucmFpbEluc2V0LC41KihyLmlucHV0QXJlYVdpZHRoLXUucmFpbFdpZHRoKStyLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRbdS5uYW1lXSxuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTthLnZpc2libGUmJihhLl9nZD1lLG4ucHVzaChhKSl9cmV0dXJuIG59KGUsdCksYT1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrdS5jb250YWluZXJDbGFzc05hbWUpLmRhdGEoci5sZW5ndGg+MD9bMF06W10pO2Z1bmN0aW9uIHMoZSl7ZS5fY29tbWFuZE9ic2VydmVyJiYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGRlbGV0ZSBlLl9jb21tYW5kT2JzZXJ2ZXIpLGkuYXV0b01hcmdpbih0LGcoZSkpfWlmKGEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHUuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZSgiY3Vyc29yIiwiZXctcmVzaXplIiksYS5leGl0KCkuZWFjaChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK3UuZ3JvdXBDbGFzc05hbWUpLmVhY2gocyl9KS5yZW1vdmUoKSwwIT09ci5sZW5ndGgpe3ZhciBsPWEuc2VsZWN0QWxsKCJnLiIrdS5ncm91cENsYXNzTmFtZSkuZGF0YShyLHYpO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHUuZ3JvdXBDbGFzc05hbWUsITApLGwuZXhpdCgpLmVhY2gocykucmVtb3ZlKCk7Zm9yKHZhciBjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciBmPXJbY107bSh0LGYpfWwuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTshZnVuY3Rpb24odCl7dmFyIGU9dC5fZGltcztlLmxhYmVsU3RlcHM9W107Zm9yKHZhciByPXQuX3N0ZXBDb3VudCxuPTA7bjxyO24rPWUubGFiZWxTdHJpZGUpZS5sYWJlbFN0ZXBzLnB1c2goe2ZyYWN0aW9uOm4vKHItMSksc3RlcDp0Ll92aXNpYmxlU3RlcHNbbl19KX0oZSksaS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIodCxlLGUuX3Zpc2libGVTdGVwcyxmdW5jdGlvbihlKXt2YXIgbj1yLmRhdGEoKVswXTtuLmFjdGl2ZSE9PWUuaW5kZXgmJihuLl9kcmFnZ2luZ3x8ayh0LHIsbixlLmluZGV4LCExLCEwKSl9KSxmdW5jdGlvbih0LGUscil7KHIuc3RlcHNbci5hY3RpdmVdfHx7fSkudmlzaWJsZXx8KHIuYWN0aXZlPXIuX3Zpc2libGVTdGVwc1swXS5faW5kZXgpO2UuY2FsbCh5LHIpLmNhbGwoTCxyKS5jYWxsKF8scikuY2FsbChBLHIpLmNhbGwoQyx0LHIpLmNhbGwoeCx0LHIpO3ZhciBuPXIuX2RpbXM7by5zZXRUcmFuc2xhdGUoZSxuLmx4K3IucGFkLmwsbi5seStyLnBhZC50KSxlLmNhbGwoTSxyLCExKSxlLmNhbGwoeSxyKX0odCxuLnNlbGVjdCh0aGlzKSxlKX0pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vY29sb3IiOjU3NywiLi4vZHJhd2luZyI6NTk4LCIuL2NvbnN0YW50cyI6NjYxLGQzOjE1NH1dLDY2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOm4ubmFtZSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjY2MCwiLi9jb25zdGFudHMiOjY2MSwiLi9kZWZhdWx0cyI6NjYyLCIuL2RyYXciOjY2M31dLDY2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi9kcmF3aW5nIiksYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIik7ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQsZSxyKXt2YXIgcCxkPXIucHJvcENvbnRhaW5lcixnPXIucHJvcE5hbWUsdj1yLnBsYWNlaG9sZGVyLG09ci50cmFjZUluZGV4LHk9ci5hdm9pZHx8e30seD1yLmF0dHJpYnV0ZXMsYj1yLnRyYW5zZm9ybSxfPXIuY29udGFpbmVyR3JvdXAsdz10Ll9mdWxsTGF5b3V0LGs9MSxUPSExLEE9ZC50aXRsZSxNPShBJiZBLnRleHQ/QS50ZXh0OiIiKS50cmltKCksUz1BJiZBLmZvbnQ/QS5mb250Ont9LEU9Uy5mYW1pbHksQz1TLnNpemUsTD1TLmNvbG9yOyJ0aXRsZS50ZXh0Ij09PWc/cD0idGl0bGVUZXh0IjotMSE9PWcuaW5kZXhPZigiYXhpcyIpP3A9ImF4aXNUaXRsZVRleHQiOmcuaW5kZXhPZighMCkmJihwPSJjb2xvcmJhclRpdGxlVGV4dCIpO3ZhciB6PXQuX2NvbnRleHQuZWRpdHNbcF07IiI9PT1NP2s9MDpNLnJlcGxhY2UoaCwiICUgIik9PT12LnJlcGxhY2UoaCwiICUgIikmJihrPS4yLFQ9ITAsenx8KE09IiIpKTt3Lm1ldGEmJihNPXMudGVtcGxhdGVTdHJpbmcoTSx7bWV0YTp3Lm1ldGF9KSk7dmFyIE89TXx8ejtffHwoXz1zLmVuc3VyZVNpbmdsZSh3Ll9pbmZvbGF5ZXIsImciLCJnLSIrZSkpO3ZhciBJPV8uc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShPP1swXTpbXSk7aWYoSS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLEkudGV4dChNKS5hdHRyKCJjbGFzcyIsZSksSS5leGl0KCkucmVtb3ZlKCksIU8pcmV0dXJuIF87ZnVuY3Rpb24gRCh0KXtzLnN5bmNPckFzeW5jKFtQLFJdLHQpfWZ1bmN0aW9uIFAoZSl7dmFyIHI7cmV0dXJuIGI/KHI9IiIsYi5yb3RhdGUmJihyKz0icm90YXRlKCIrW2Iucm90YXRlLHgueCx4LnldKyIpIiksYi5vZmZzZXQmJihyKz0idHJhbnNsYXRlKDAsICIrYi5vZmZzZXQrIikiKSk6cj1udWxsLGUuYXR0cigidHJhbnNmb3JtIixyKSxlLnN0eWxlKHsiZm9udC1mYW1pbHkiOkUsImZvbnQtc2l6ZSI6bi5yb3VuZChDLDIpKyJweCIsZmlsbDpjLnJnYihMKSxvcGFjaXR5OmsqYy5vcGFjaXR5KEwpLCJmb250LXdlaWdodCI6YS5mb250V2VpZ2h0fSkuYXR0cih4KS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBSKHQpe3ZhciBlPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKHkmJnkuc2VsZWN0aW9uJiZ5LnNpZGUmJk0pe2UuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgcj0wLGE9e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn1beS5zaWRlXSxvPS0xIT09WyJsZWZ0IiwidG9wIl0uaW5kZXhPZih5LnNpZGUpPy0xOjEsYz1pKHkucGFkKT95LnBhZDoyLHU9bC5iQm94KGUubm9kZSgpKSxmPXtsZWZ0OjAsdG9wOjAscmlnaHQ6dy53aWR0aCxib3R0b206dy5oZWlnaHR9LGg9eS5tYXhTaGlmdHx8KGZbeS5zaWRlXS11W3kuc2lkZV0pKigibGVmdCI9PT15LnNpZGV8fCJ0b3AiPT09eS5zaWRlPy0xOjEpO2lmKGg8MClyPWg7ZWxzZXt2YXIgcD15Lm9mZnNldExlZnR8fDAsZD15Lm9mZnNldFRvcHx8MDt1LmxlZnQtPXAsdS5yaWdodC09cCx1LnRvcC09ZCx1LmJvdHRvbS09ZCx5LnNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bC5iQm94KHRoaXMpO3MuYkJveEludGVyc2VjdCh1LHQsYykmJihyPU1hdGgubWF4KHIsbyoodFt5LnNpZGVdLXVbYV0pK2MpKX0pLHI9TWF0aC5taW4oaCxyKX1pZihyPjB8fGg8MCl7dmFyIGc9e2xlZnQ6Wy1yLDBdLHJpZ2h0OltyLDBdLHRvcDpbMCwtcl0sYm90dG9tOlswLHJdfVt5LnNpZGVdO2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZysiKSIpfX19SS5jYWxsKEQpLHomJihNP0kub24oIi5vcGFjaXR5IixudWxsKTooaz0wLFQ9ITAsSS50ZXh0KHYpLm9uKCJtb3VzZW92ZXIub3BhY2l0eSIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZi5TSE9XX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQub3BhY2l0eSIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZi5ISURFX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMCl9KSksSS5jYWxsKHUubWFrZUVkaXRhYmxlLHtnZDp0fSkub24oImVkaXQiLGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PW0/by5jYWxsKCJfZ3VpUmVzdHlsZSIsdCxnLGUsbSk6by5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsZyxlKX0pLm9uKCJjYW5jZWwiLGZ1bmN0aW9uKCl7dGhpcy50ZXh0KHRoaXMuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpKS5jYWxsKEQpfSkub24oImlucHV0IixmdW5jdGlvbih0KXt0aGlzLnRleHQodHx8IiAiKS5jYWxsKHUucG9zaXRpb25UZXh0LHgueCx4LnkpfSkpO3JldHVybiBJLmNsYXNzZWQoImpzLXBsYWNlaG9sZGVyIixUKSxffX07dmFyIGg9LyBbWFldWzAtOV0qIC99LHsiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6Njc2LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL2NvbG9yIjo1NzcsIi4uL2RyYXdpbmciOjU5OCxkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw2NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksYz1sKCJidXR0b24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXN0eWxlIiwicmVsYXlvdXQiLCJhbmltYXRlIiwidXBkYXRlIiwic2tpcCJdLGRmbHQ6InJlc3R5bGUifSxhcmdzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGV4ZWN1dGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSk7ZS5leHBvcnRzPW8obCgidXBkYXRlbWVudSIse19hcnJheUF0dHJSZWdleHBzOlsvXnVwZGF0ZW1lbnVzXFsoMHxbMS05XVswLTldKylcXVwuYnV0dG9ucy9dLHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkcm9wZG93biIsImJ1dHRvbnMiXSxkZmx0OiJkcm9wZG93biJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsInJpZ2h0IiwidXAiLCJkb3duIl0sZGZsdDoiZG93biJ9LGFjdGl2ZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MH0sc2hvd2FjdGl2ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYnV0dG9uczpjLHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6LS4wNX0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6InJpZ2h0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDoxfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0scGFkOmEocyh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSksZm9udDpuKHt9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJvcmRlckxpbmV9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In19KSwiYXJyYXlkcmF3IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NzQsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjo4MDksIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjU3Nn1dLDY2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InVwZGF0ZW1lbnVzIixjb250YWluZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtY29udGFpbmVyIixoZWFkZXJHcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItZ3JvdXAiLGhlYWRlckNsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXIiLGhlYWRlckFycm93Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1hcnJvdyIsZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXAiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbiIsYnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWJ1dHRvbiIsaXRlbVJlY3RDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS1yZWN0IixpdGVtVGV4dENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXRleHQiLG1lbnVJbmRleEF0dHJOYW1lOiJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoidXBkYXRlbWVudS0iLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6IiAgIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjoiI0Y0RkFGRiIsaG92ZXJDb2xvcjoiI0Y0RkFGRiIsYXJyb3dTeW1ib2w6e2xlZnQ6Ilx1MjVjNCIscmlnaHQ6Ilx1MjViYSIsdXA6Ilx1MjViMiIsZG93bjoiXHUyNWJjIn19fSx7fV0sNjY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWEuYnV0dG9ucztmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9bygidmlzaWJsZSIsaSh0LGUse25hbWU6ImJ1dHRvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSkubGVuZ3RoPjApJiYobygiYWN0aXZlIiksbygiZGlyZWN0aW9uIiksbygidHlwZSIpLG8oInNob3dhY3RpdmUiKSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJiZ2NvbG9yIixyLnBhcGVyX2JnY29sb3IpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSl9ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1yKCJ2aXNpYmxlIiwic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpKSYmKHIoIm1ldGhvZCIpLHIoImFyZ3MiKSxyKCJsYWJlbCIpLHIoImV4ZWN1dGUiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4vYXR0cmlidXRlcyI6NjY2LCIuL2NvbnN0YW50cyI6NjY3fV0sNjY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90cy9wbG90cyIpLGE9dCgiLi4vY29sb3IiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsdT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLGY9dCgiLi9jb25zdGFudHMiKSxoPXQoIi4vc2Nyb2xsYm94Iik7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24gZCh0LGUpe3JldHVybit0LmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSk9PT1lLl9pbmRleH1mdW5jdGlvbiBnKHQsZSxyLG4saSxhLG8scyl7ZS5hY3RpdmU9byxjKHQubGF5b3V0LGYubmFtZSxlKS5hcHBseVVwZGF0ZSgiYWN0aXZlIixvKSwiYnV0dG9ucyI9PT1lLnR5cGU/bSh0LG4sbnVsbCxudWxsLGUpOiJkcm9wZG93biI9PT1lLnR5cGUmJihpLmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSwiLTEiKSx2KHQsbixpLGEsZSksc3x8bSh0LG4saSxhLGUpKX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIGE9cy5lbnN1cmVTaW5nbGUoZSwiZyIsZi5oZWFkZXJDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pLGw9aS5fZGltcyxjPWkuYWN0aXZlLHU9aS5idXR0b25zW2NdfHxmLmJsYW5rSGVhZGVyT3B0cyxoPXt5OmkucGFkLnQseVBhZDowLHg6aS5wYWQubCx4UGFkOjAsaW5kZXg6MH0scD17d2lkdGg6bC5oZWFkZXJXaWR0aCxoZWlnaHQ6bC5oZWFkZXJIZWlnaHR9O2EuY2FsbCh5LGksdSx0KS5jYWxsKE0saSxoLHApLHMuZW5zdXJlU2luZ2xlKGUsInRleHQiLGYuaGVhZGVyQXJyb3dDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS5jYWxsKG8uZm9udCxpLmZvbnQpLnRleHQoZi5hcnJvd1N5bWJvbFtpLmRpcmVjdGlvbl0pfSkuYXR0cih7eDpsLmhlYWRlcldpZHRoLWYuYXJyb3dPZmZzZXRYK2kucGFkLmwseTpsLmhlYWRlckhlaWdodC8yK2YudGV4dE9mZnNldFkraS5wYWQudH0pLGEub24oImNsaWNrIixmdW5jdGlvbigpe3IuY2FsbChTLFN0cmluZyhkKHIsaSk/LTE6aS5faW5kZXgpKSxtKHQsZSxyLG4saSl9KSxhLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7YS5jYWxsKHcpfSksYS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7YS5jYWxsKGssaSl9KSxvLnNldFRyYW5zbGF0ZShlLGwubHgsbC5seSl9ZnVuY3Rpb24gbSh0LGUscixhLG8pe3J8fChyPWUpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIik7dmFyIGw9ZnVuY3Rpb24odCl7cmV0dXJuLTE9PSt0LmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSl9KHIpJiYiYnV0dG9ucyIhPT1vLnR5cGU/W106by5idXR0b25zLGM9ImRyb3Bkb3duIj09PW8udHlwZT9mLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOmYuYnV0dG9uQ2xhc3NOYW1lLHU9ci5zZWxlY3RBbGwoImcuIitjKS5kYXRhKHMuZmlsdGVyVmlzaWJsZShsKSksaD11LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChjLCEwKSxwPXUuZXhpdCgpOyJkcm9wZG93biI9PT1vLnR5cGU/KGguYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKSxwLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLnJlbW92ZSgpKTpwLnJlbW92ZSgpO3ZhciBkPTAsdj0wLG09by5fZGltcyx4PS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKG8uZGlyZWN0aW9uKTsiZHJvcGRvd24iPT09by50eXBlJiYoeD92PW0uaGVhZGVySGVpZ2h0K2YuZ2FwQnV0dG9uSGVhZGVyOmQ9bS5oZWFkZXJXaWR0aCtmLmdhcEJ1dHRvbkhlYWRlciksImRyb3Bkb3duIj09PW8udHlwZSYmInVwIj09PW8uZGlyZWN0aW9uJiYodj0tZi5nYXBCdXR0b25IZWFkZXIrZi5nYXBCdXR0b24tbS5vcGVuSGVpZ2h0KSwiZHJvcGRvd24iPT09by50eXBlJiYibGVmdCI9PT1vLmRpcmVjdGlvbiYmKGQ9LWYuZ2FwQnV0dG9uSGVhZGVyK2YuZ2FwQnV0dG9uLW0ub3BlbldpZHRoKTt2YXIgYj17eDptLmx4K2Qrby5wYWQubCx5Om0ubHkrditvLnBhZC50LHlQYWQ6Zi5nYXBCdXR0b24seFBhZDpmLmdhcEJ1dHRvbixpbmRleDowfSxUPXtsOmIueCtvLmJvcmRlcndpZHRoLHQ6Yi55K28uYm9yZGVyd2lkdGh9O3UuZWFjaChmdW5jdGlvbihzLGwpe3ZhciBjPW4uc2VsZWN0KHRoaXMpO2MuY2FsbCh5LG8scyx0KS5jYWxsKE0sbyxiKSxjLm9uKCJjbGljayIsZnVuY3Rpb24oKXtuLmV2ZW50LmRlZmF1bHRQcmV2ZW50ZWR8fChnKHQsbywwLGUscixhLGwpLHMuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHMubWV0aG9kLHMuYXJncyksdC5lbWl0KCJwbG90bHlfYnV0dG9uY2xpY2tlZCIse21lbnU6byxidXR0b246cyxhY3RpdmU6by5hY3RpdmV9KSl9KSxjLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Yy5jYWxsKHcpfSksYy5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7Yy5jYWxsKGssbyksdS5jYWxsKF8sbyl9KX0pLHUuY2FsbChfLG8pLHg/KFQudz1NYXRoLm1heChtLm9wZW5XaWR0aCxtLmhlYWRlcldpZHRoKSxULmg9Yi55LVQudCk6KFQudz1iLngtVC5sLFQuaD1NYXRoLm1heChtLm9wZW5IZWlnaHQsbS5oZWFkZXJIZWlnaHQpKSxULmRpcmVjdGlvbj1vLmRpcmVjdGlvbixhJiYodS5zaXplKCk/ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPWkuZGlyZWN0aW9uLHU9InVwIj09PWN8fCJkb3duIj09PWMsaD1pLl9kaW1zLHA9aS5hY3RpdmU7aWYodSlmb3Iocz0wLGw9MDtsPHA7bCsrKXMrPWguaGVpZ2h0c1tsXStmLmdhcEJ1dHRvbjtlbHNlIGZvcihvPTAsbD0wO2w8cDtsKyspbys9aC53aWR0aHNbbF0rZi5nYXBCdXR0b247bi5lbmFibGUoYSxvLHMpLG4uaGJhciYmbi5oYmFyLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIik7bi52YmFyJiZuLnZiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKX0oMCwwLDAsYSxvLFQpOmZ1bmN0aW9uKHQpe3ZhciBlPSEhdC5oYmFyLHI9ISF0LnZiYXI7ZSYmdC5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSk7ciYmdC52YmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtyPSExLGV8fHQuZGlzYWJsZSgpfSl9KGEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3QuY2FsbCh4LGUpLmNhbGwoYixlLHIsbil9ZnVuY3Rpb24geCh0LGUpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYuaXRlbVJlY3RDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHtyeDpmLnJ4LHJ5OmYucnksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5jYWxsKGEuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLGYuaXRlbVRleHRDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cih7InRleHQtYW5jaG9yIjoic3RhcnQiLCJkYXRhLW5vdGV4IjoxfSl9KSxhPXIubGFiZWwsYz1uLl9mdWxsTGF5b3V0Lm1ldGE7YyYmKGE9cy50ZW1wbGF0ZVN0cmluZyhhLHttZXRhOmN9KSksaS5jYWxsKG8uZm9udCxlLmZvbnQpLnRleHQoYSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxuKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZS5hY3RpdmU7dC5lYWNoKGZ1bmN0aW9uKHQsaSl7dmFyIG89bi5zZWxlY3QodGhpcyk7aT09PXImJmUuc2hvd2FjdGl2ZSYmby5zZWxlY3QoInJlY3QuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxmLmFjdGl2ZUNvbG9yKX0pfWZ1bmN0aW9uIHcodCl7dC5zZWxlY3QoInJlY3QuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxmLmhvdmVyQ29sb3IpfWZ1bmN0aW9uIGsodCxlKXt0LnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGUuYmdjb2xvcil9ZnVuY3Rpb24gVCh0LGUpe3ZhciByPWUuX2RpbXM9e3dpZHRoMTowLGhlaWdodDE6MCxoZWlnaHRzOltdLHdpZHRoczpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCxvcGVuV2lkdGg6MCxvcGVuSGVpZ2h0OjAsbHg6MCxseTowfSxhPW8udGVzdGVyLnNlbGVjdEFsbCgiZy4iK2YuZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGUuYnV0dG9ucykpO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuZHJvcGRvd25CdXR0b25DbGFzc05hbWUsITApO3ZhciBjPS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKGUuZGlyZWN0aW9uKTthLmVhY2goZnVuY3Rpb24oaSxhKXt2YXIgcz1uLnNlbGVjdCh0aGlzKTtzLmNhbGwoeSxlLGksdCk7dmFyIGg9cy5zZWxlY3QoIi4iK2YuaXRlbVRleHRDbGFzc05hbWUpLHA9aC5ub2RlKCkmJm8uYkJveChoLm5vZGUoKSkud2lkdGgsZD1NYXRoLm1heChwK2YudGV4dFBhZFgsZi5taW5XaWR0aCksZz1lLmZvbnQuc2l6ZSp1LHY9bC5saW5lQ291bnQoaCksbT1NYXRoLm1heChnKnYsZi5taW5IZWlnaHQpK2YudGV4dE9mZnNldFk7bT1NYXRoLmNlaWwobSksZD1NYXRoLmNlaWwoZCksci53aWR0aHNbYV09ZCxyLmhlaWdodHNbYV09bSxyLmhlaWdodDE9TWF0aC5tYXgoci5oZWlnaHQxLG0pLHIud2lkdGgxPU1hdGgubWF4KHIud2lkdGgxLGQpLGM/KHIudG90YWxXaWR0aD1NYXRoLm1heChyLnRvdGFsV2lkdGgsZCksci5vcGVuV2lkdGg9ci50b3RhbFdpZHRoLHIudG90YWxIZWlnaHQrPW0rZi5nYXBCdXR0b24sci5vcGVuSGVpZ2h0Kz1tK2YuZ2FwQnV0dG9uKTooci50b3RhbFdpZHRoKz1kK2YuZ2FwQnV0dG9uLHIub3BlbldpZHRoKz1kK2YuZ2FwQnV0dG9uLHIudG90YWxIZWlnaHQ9TWF0aC5tYXgoci50b3RhbEhlaWdodCxtKSxyLm9wZW5IZWlnaHQ9ci50b3RhbEhlaWdodCl9KSxjP3IudG90YWxIZWlnaHQtPWYuZ2FwQnV0dG9uOnIudG90YWxXaWR0aC09Zi5nYXBCdXR0b24sci5oZWFkZXJXaWR0aD1yLndpZHRoMStmLmFycm93UGFkWCxyLmhlYWRlckhlaWdodD1yLmhlaWdodDEsImRyb3Bkb3duIj09PWUudHlwZSYmKGM/KHIud2lkdGgxKz1mLmFycm93UGFkWCxyLnRvdGFsSGVpZ2h0PXIuaGVpZ2h0MSk6ci50b3RhbFdpZHRoPXIud2lkdGgxLHIudG90YWxXaWR0aCs9Zi5hcnJvd1BhZFgpLGEucmVtb3ZlKCk7dmFyIGg9ci50b3RhbFdpZHRoK2UucGFkLmwrZS5wYWQucixwPXIudG90YWxIZWlnaHQrZS5wYWQudCtlLnBhZC5iLGQ9dC5fZnVsbExheW91dC5fc2l6ZTtyLmx4PWQubCtkLncqZS54LHIubHk9ZC50K2QuaCooMS1lLnkpO3ZhciBnPSJsZWZ0IjtzLmlzUmlnaHRBbmNob3IoZSkmJihyLmx4LT1oLGc9InJpZ2h0Iikscy5pc0NlbnRlckFuY2hvcihlKSYmKHIubHgtPWgvMixnPSJjZW50ZXIiKTt2YXIgdj0idG9wIjtzLmlzQm90dG9tQW5jaG9yKGUpJiYoci5seS09cCx2PSJib3R0b20iKSxzLmlzTWlkZGxlQW5jaG9yKGUpJiYoci5seS09cC8yLHY9Im1pZGRsZSIpLHIudG90YWxXaWR0aD1NYXRoLmNlaWwoci50b3RhbFdpZHRoKSxyLnRvdGFsSGVpZ2h0PU1hdGguY2VpbChyLnRvdGFsSGVpZ2h0KSxyLmx4PU1hdGgucm91bmQoci5seCksci5seT1NYXRoLnJvdW5kKHIubHkpLGkuYXV0b01hcmdpbih0LEEoZSkse3g6ZS54LHk6ZS55LGw6aCooe3JpZ2h0OjEsY2VudGVyOi41fVtnXXx8MCkscjpoKih7bGVmdDoxLGNlbnRlcjouNX1bZ118fDApLGI6cCooe3RvcDoxLG1pZGRsZTouNX1bdl18fDApLHQ6cCooe2JvdHRvbToxLG1pZGRsZTouNX1bdl18fDApfSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gZi5hdXRvTWFyZ2luSWRSb290K3QuX2luZGV4fWZ1bmN0aW9uIE0odCxlLHIsbil7bj1ufHx7fTt2YXIgaT10LnNlbGVjdCgiLiIrZi5pdGVtUmVjdENsYXNzTmFtZSksYT10LnNlbGVjdCgiLiIrZi5pdGVtVGV4dENsYXNzTmFtZSkscz1lLmJvcmRlcndpZHRoLGM9ci5pbmRleCxoPWUuX2RpbXM7by5zZXRUcmFuc2xhdGUodCxzK3IueCxzK3IueSk7dmFyIHA9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pLGQ9bi5oZWlnaHR8fChwP2guaGVpZ2h0c1tjXTpoLmhlaWdodDEpO2kuYXR0cih7eDowLHk6MCx3aWR0aDpuLndpZHRofHwocD9oLndpZHRoMTpoLndpZHRoc1tjXSksaGVpZ2h0OmR9KTt2YXIgZz1lLmZvbnQuc2l6ZSp1LHY9KGwubGluZUNvdW50KGEpLTEpKmcvMjtsLnBvc2l0aW9uVGV4dChhLGYudGV4dE9mZnNldFgsZC8yLXYrZi50ZXh0T2Zmc2V0WSkscD9yLnkrPWguaGVpZ2h0c1tjXStyLnlQYWQ6ci54Kz1oLndpZHRoc1tjXStyLnhQYWQsci5pbmRleCsrfWZ1bmN0aW9uIFModCxlKXt0LmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSxlfHwiLTEiKS5zZWxlY3RBbGwoImcuIitmLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5yZW1vdmUoKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXMuZmlsdGVyVmlzaWJsZShlW2YubmFtZV0pO2Z1bmN0aW9uIGEoZSl7aS5hdXRvTWFyZ2luKHQsQShlKSl9dmFyIG89ZS5fbWVudWxheWVyLnNlbGVjdEFsbCgiZy4iK2YuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtpZihvLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKSxvLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrZi5oZWFkZXJHcm91cENsYXNzTmFtZSkuZWFjaChhKX0pLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9by5zZWxlY3RBbGwoImcuIitmLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIscCk7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5oZWFkZXJHcm91cENsYXNzTmFtZSwhMCk7Zm9yKHZhciBjPXMuZW5zdXJlU2luZ2xlKG8sImciLGYuZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSksdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgeT1yW3VdO1QodCx5KX12YXIgeD0idXBkYXRlbWVudXMiK2UuX3VpZCxiPW5ldyBoKHQsYyx4KTtsLmVudGVyKCkuc2l6ZSgpJiYoYy5ub2RlKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjLm5vZGUoKSksYy5jYWxsKFMpKSxsLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKHQpe2MuY2FsbChTKSxhKHQpfSkucmVtb3ZlKCksbC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ImRyb3Bkb3duIj09PWUudHlwZT9jOm51bGw7aS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIodCxlLGUuYnV0dG9ucyxmdW5jdGlvbihuKXtnKHQsZSxlLmJ1dHRvbnNbbi5pbmRleF0scixhLGIsbi5pbmRleCwhMCl9KSwiZHJvcGRvd24iPT09ZS50eXBlPyh2KHQscixjLGIsZSksZChjLGUpJiZtKHQscixjLGIsZSkpOm0odCxyLG51bGwsbnVsbCxlKX0pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vY29sb3IiOjU3NywiLi4vZHJhd2luZyI6NTk4LCIuL2NvbnN0YW50cyI6NjY3LCIuL3Njcm9sbGJveCI6NjcxLGQzOjE1NH1dLDY3MDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs2NjRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL2F0dHJpYnV0ZXMiOjY2NiwiLi9jb25zdGFudHMiOjY2NywiLi9kZWZhdWx0cyI6NjY4LCIuL2RyYXciOjY2OSxkdXA6NjY0fV0sNjcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1zO3ZhciBuPXQoImQzIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi4vZHJhd2luZyIpLG89dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5nZD10LHRoaXMuY29udGFpbmVyPWUsdGhpcy5pZD1yLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLnRyYW5zbGF0ZVg9bnVsbCx0aGlzLnRyYW5zbGF0ZVk9bnVsbCx0aGlzLmhiYXI9bnVsbCx0aGlzLnZiYXI9bnVsbCx0aGlzLmJnPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxib3gtYmciKS5kYXRhKFswXSksdGhpcy5iZy5leGl0KCkub24oIi5kcmFnIixudWxsKS5vbigid2hlZWwiLG51bGwpLnJlbW92ZSgpLHRoaXMuYmcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxib3gtYmciLCEwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKHtvcGFjaXR5OjAseDowLHk6MCx3aWR0aDowLGhlaWdodDowfSl9cy5iYXJXaWR0aD0yLHMuYmFyTGVuZ3RoPTIwLHMuYmFyUmFkaXVzPTIscy5iYXJQYWQ9MSxzLmJhckNvbG9yPSIjODA4QkE0IixzLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXRoaXMuZ2QuX2Z1bGxMYXlvdXQsbD1vLndpZHRoLGM9by5oZWlnaHQ7dGhpcy5wb3NpdGlvbj10O3ZhciB1LGYsaCxwLGQ9dGhpcy5wb3NpdGlvbi5sLGc9dGhpcy5wb3NpdGlvbi53LHY9dGhpcy5wb3NpdGlvbi50LG09dGhpcy5wb3NpdGlvbi5oLHk9dGhpcy5wb3NpdGlvbi5kaXJlY3Rpb24seD0iZG93biI9PT15LGI9ImxlZnQiPT09eSxfPSJ1cCI9PT15LHc9ZyxrPW07eHx8Ynx8InJpZ2h0Ij09PXl8fF98fCh0aGlzLnBvc2l0aW9uLmRpcmVjdGlvbj0iZG93biIseD0hMCkseHx8Xz8oZj0odT1kKSt3LHg/KGg9dixrPShwPU1hdGgubWluKGgrayxjKSktaCk6az0ocD12K2spLShoPU1hdGgubWF4KHAtaywwKSkpOihwPShoPXYpK2ssYj93PShmPWQrdyktKHU9TWF0aC5tYXgoZi13LDApKToodT1kLHc9KGY9TWF0aC5taW4odSt3LGwpKS11KSksdGhpcy5fYm94PXtsOnUsdDpoLHc6dyxoOmt9O3ZhciBUPWc+dyxBPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsTT1zLmJhcldpZHRoKzIqcy5iYXJQYWQsUz1kLEU9dittO0UrTT5jJiYoRT1jLU0pO3ZhciBDPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItaG9yaXpvbnRhbCIpLmRhdGEoVD9bMF06W10pO0MuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksQy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci1ob3Jpem9udGFsIiwhMCkuY2FsbChpLmZpbGwscy5iYXJDb2xvciksVD8odGhpcy5oYmFyPUMuYXR0cih7cng6cy5iYXJSYWRpdXMscnk6cy5iYXJSYWRpdXMseDpTLHk6RSx3aWR0aDpBLGhlaWdodDpNfSksdGhpcy5faGJhclhNaW49UytBLzIsdGhpcy5faGJhclRyYW5zbGF0ZU1heD13LUEpOihkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCk7dmFyIEw9bT5rLHo9cy5iYXJXaWR0aCsyKnMuYmFyUGFkLE89cy5iYXJMZW5ndGgrMipzLmJhclBhZCxJPWQrZyxEPXY7SSt6PmwmJihJPWwteik7dmFyIFA9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci12ZXJ0aWNhbCIpLmRhdGEoTD9bMF06W10pO1AuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksUC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci12ZXJ0aWNhbCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLEw/KHRoaXMudmJhcj1QLmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6SSx5OkQsd2lkdGg6eixoZWlnaHQ6T30pLHRoaXMuX3ZiYXJZTWluPUQrTy8yLHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXg9ay1PKTooZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpO3ZhciBSPXRoaXMuaWQsRj11LS41LEI9TD9mK3orLjU6ZisuNSxOPWgtLjUsaj1UP3ArTSsuNTpwKy41LFY9by5fdG9wZGVmcy5zZWxlY3RBbGwoIiMiK1IpLmRhdGEoVHx8TD9bMF06W10pO2lmKFYuZXhpdCgpLnJlbW92ZSgpLFYuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLFIpLmFwcGVuZCgicmVjdCIpLFR8fEw/KHRoaXMuX2NsaXBSZWN0PVYuc2VsZWN0KCJyZWN0IikuYXR0cih7eDpNYXRoLmZsb29yKEYpLHk6TWF0aC5mbG9vcihOKSx3aWR0aDpNYXRoLmNlaWwoQiktTWF0aC5mbG9vcihGKSxoZWlnaHQ6TWF0aC5jZWlsKGopLU1hdGguZmxvb3IoTil9KSx0aGlzLmNvbnRhaW5lci5jYWxsKGEuc2V0Q2xpcFVybCxSLHRoaXMuZ2QpLHRoaXMuYmcuYXR0cih7eDpkLHk6dix3aWR0aDpnLGhlaWdodDptfSkpOih0aGlzLmJnLmF0dHIoe3dpZHRoOjAsaGVpZ2h0OjB9KSx0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChhLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSxUfHxMKXt2YXIgVT1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe24uZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKX0pLm9uKCJkcmFnIix0aGlzLl9vbkJveERyYWcuYmluZCh0aGlzKSk7dGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigid2hlZWwiLHRoaXMuX29uQm94V2hlZWwuYmluZCh0aGlzKSkub24oIi5kcmFnIixudWxsKS5jYWxsKFUpO3ZhciBxPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpLG4uZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZHJhZyIsdGhpcy5fb25CYXJEcmFnLmJpbmQodGhpcykpO1QmJnRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLmNhbGwocSksTCYmdGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChxKX10aGlzLnNldFRyYW5zbGF0ZShlLHIpfSxzLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7KHRoaXMuaGJhcnx8dGhpcy52YmFyKSYmKHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIi5kcmFnIixudWxsKS5jYWxsKGEuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLHRoaXMuaGJhciYmKHRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLHRoaXMuaGJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCksdGhpcy52YmFyJiYodGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCksdGhpcy52YmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX0scy5wcm90b3R5cGUuX29uQm94RHJhZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJih0LT1uLmV2ZW50LmR4KSx0aGlzLnZiYXImJihlLT1uLmV2ZW50LmR5KSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5fb25Cb3hXaGVlbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJih0Kz1uLmV2ZW50LmRlbHRhWSksdGhpcy52YmFyJiYoZSs9bi5ldmVudC5kZWx0YVkpLHRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLl9vbkJhckRyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7aWYodGhpcy5oYmFyKXt2YXIgcj10K3RoaXMuX2hiYXJYTWluLGk9cit0aGlzLl9oYmFyVHJhbnNsYXRlTWF4O3Q9KG8uY29uc3RyYWluKG4uZXZlbnQueCxyLGkpLXIpLyhpLXIpKih0aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94LncpfWlmKHRoaXMudmJhcil7dmFyIGE9ZSt0aGlzLl92YmFyWU1pbixzPWErdGhpcy5fdmJhclRyYW5zbGF0ZU1heDtlPShvLmNvbnN0cmFpbihuLmV2ZW50LnksYSxzKS1hKS8ocy1hKSoodGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oKX10aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94Lncsbj10aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94Lmg7aWYodD1vLmNvbnN0cmFpbih0fHwwLDAsciksZT1vLmNvbnN0cmFpbihlfHwwLDAsbiksdGhpcy50cmFuc2xhdGVYPXQsdGhpcy50cmFuc2xhdGVZPWUsdGhpcy5jb250YWluZXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0aGlzLl9ib3gubC10aGlzLnBvc2l0aW9uLmwtdCx0aGlzLl9ib3gudC10aGlzLnBvc2l0aW9uLnQtZSksdGhpcy5fY2xpcFJlY3QmJnRoaXMuX2NsaXBSZWN0LmF0dHIoe3g6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLmwrdC0uNSkseTpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24udCtlLS41KX0pLHRoaXMuaGJhcil7dmFyIGk9dC9yO3RoaXMuaGJhci5jYWxsKGEuc2V0VHJhbnNsYXRlLHQraSp0aGlzLl9oYmFyVHJhbnNsYXRlTWF4LGUpfWlmKHRoaXMudmJhcil7dmFyIHM9ZS9uO3RoaXMudmJhci5jYWxsKGEuc2V0VHJhbnNsYXRlLHQsZStzKnRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL2NvbG9yIjo1NzcsIi4uL2RyYXdpbmciOjU5OCxkMzoxNTR9XSw2NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtGUk9NX0JMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxGUk9NX1RMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjEsbWlkZGxlOi41LHRvcDowfSxGUk9NX0JSOntsZWZ0OjEsY2VudGVyOi41LHJpZ2h0OjAsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxMSU5FX1NQQUNJTkc6MS4zLENBUF9TSElGVDouNyxNSURfU0hJRlQ6LjM1LE9QUE9TSVRFX1NJREU6e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn19fSx7fV0sNjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q09NUEFSSVNPTl9PUFM6WyI9IiwiIT0iLCI8IiwiPj0iLCI+IiwiPD0iXSxDT01QQVJJU09OX09QUzI6WyI9IiwiPCIsIj49IiwiPiIsIjw9Il0sSU5URVJWQUxfT1BTOlsiW10iLCIoKSIsIlspIiwiKF0iLCJdWyIsIikoIiwiXSgiLCIpWyJdLFNFVF9PUFM6WyJ7fSIsIn17Il0sQ09OU1RSQUlOVF9SRURVQ1RJT046eyI9IjoiPSIsIjwiOiI8IiwiPD0iOiI8IiwiPiI6Ij4iLCI+PSI6Ij4iLCJbXSI6IltdIiwiKCkiOiJbXSIsIlspIjoiW10iLCIoXSI6IltdIiwiXVsiOiJdWyIsIikoIjoiXVsiLCJdKCI6Il1bIiwiKVsiOiJdWyJ9fX0se31dLDY3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NvbGlkOltbXSwwXSxkb3Q6W1suNSwxXSwyMDBdLGRhc2g6W1suNSwxXSw1MF0sbG9uZ2Rhc2g6W1suNSwxXSwxMF0sZGFzaGRvdDpbWy41LC42MjUsLjg3NSwxXSw1MF0sbG9uZ2Rhc2hkb3Q6W1suNSwuNywuOCwxXSwxMF19fSx7fV0sNjc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y2lyY2xlOiJcdTI1Y2YiLCJjaXJjbGUtb3BlbiI6Ilx1MjVjYiIsc3F1YXJlOiJcdTI1YTAiLCJzcXVhcmUtb3BlbiI6Ilx1MjVhMSIsZGlhbW9uZDoiXHUyNWM2IiwiZGlhbW9uZC1vcGVuIjoiXHUyNWM3Iixjcm9zczoiKyIseDoiXHUyNzRjIn19LHt9XSw2NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtTSE9XX1BMQUNFSE9MREVSOjEwMCxISURFX1BMQUNFSE9MREVSOjFlMyxEQkxDTElDS0RFTEFZOjMwMCxERVNFTEVDVERJTTouMn19LHt9XSw2Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCQUROVU06dm9pZCAwLEZQX1NBRkU6TnVtYmVyLk1BWF9WQUxVRS8xZTQsT05FQVZHWUVBUjozMTU1NzZlNSxPTkVBVkdNT05USDoyNjI5OGU1LE9ORURBWTo4NjRlNSxPTkVIT1VSOjM2ZTUsT05FTUlOOjZlNCxPTkVTRUM6MWUzLEVQT0NISkQ6MjQ0MDU4Ny41LEFMTU9TVF9FUVVBTDoxLTFlLTYsTE9HX0NMSVA6MTAsTUlOVVNfU0lHTjoiXHUyMjEyIn19LHt9XSw2Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci54bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLHIuc3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsci54bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsci5zdmdBdHRycz17eG1sbnM6ci5zdmcsInhtbG5zOnhsaW5rIjpyLnhsaW5rfX0se31dLDY3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnZlcnNpb249IjEuNDYuMSIsdCgiZXM2LXByb21pc2UiKS5wb2x5ZmlsbCgpLHQoIi4uL2J1aWxkL3Bsb3Rjc3MiKSx0KCIuL2ZvbnRzL21hdGhqYXhfY29uZmlnIikoKTtmb3IodmFyIG49dCgiLi9yZWdpc3RyeSIpLGk9ci5yZWdpc3Rlcj1uLnJlZ2lzdGVyLGE9dCgiLi9wbG90X2FwaSIpLG89T2JqZWN0LmtleXMoYSkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdOyJfIiE9PWwuY2hhckF0KDApJiYocltsXT1hW2xdKSxpKHttb2R1bGVUeXBlOiJhcGlNZXRob2QiLG5hbWU6bCxmbjphW2xdfSl9aSh0KCIuL3RyYWNlcy9zY2F0dGVyIikpLGkoW3QoIi4vY29tcG9uZW50cy9meCIpLHQoIi4vY29tcG9uZW50cy9sZWdlbmQiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCIpLHQoIi4vY29tcG9uZW50cy9zaGFwZXMiKSx0KCIuL2NvbXBvbmVudHMvaW1hZ2VzIiksdCgiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIiksdCgiLi9jb21wb25lbnRzL3NsaWRlcnMiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXIiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvciIpLHQoIi4vY29tcG9uZW50cy9ncmlkIiksdCgiLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLHQoIi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIildKSxpKFt0KCIuL2xvY2FsZS1lbiIpLHQoIi4vbG9jYWxlLWVuLXVzIildKSxyLkljb25zPXQoIi4uL2J1aWxkL3Bsb3RpY29uIiksci5QbG90cz10KCIuL3Bsb3RzL3Bsb3RzIiksci5GeD10KCIuL2NvbXBvbmVudHMvZngiKSxyLlNuYXBzaG90PXQoIi4vc25hcHNob3QiKSxyLlBsb3RTY2hlbWE9dCgiLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLHIuUXVldWU9dCgiLi9saWIvcXVldWUiKSxyLmQzPXQoImQzIil9LHsiLi4vYnVpbGQvcGxvdGNzcyI6MSwiLi4vYnVpbGQvcGxvdGljb24iOjIsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyI6NTY4LCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCI6NTczLCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NTg5LCIuL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2MDQsIi4vY29tcG9uZW50cy9meCI6NjE2LCIuL2NvbXBvbmVudHMvZ3JpZCI6NjIwLCIuL2NvbXBvbmVudHMvaW1hZ2VzIjo2MjUsIi4vY29tcG9uZW50cy9sZWdlbmQiOjYzMywiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiOjY0NCwiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIjo2NTEsIi4vY29tcG9uZW50cy9zaGFwZXMiOjY1OSwiLi9jb21wb25lbnRzL3NsaWRlcnMiOjY2NCwiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIjo2NzAsIi4vZm9udHMvbWF0aGpheF9jb25maWciOjY4MCwiLi9saWIvcXVldWUiOjcxNSwiLi9sb2NhbGUtZW4iOjcyOSwiLi9sb2NhbGUtZW4tdXMiOjcyOCwiLi9wbG90X2FwaSI6NzMzLCIuL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3MzcsIi4vcGxvdHMvcGxvdHMiOjgxMCwiLi9yZWdpc3RyeSI6ODI5LCIuL3NuYXBzaG90Ijo4MzQsIi4vdHJhY2VzL3NjYXR0ZXIiOjEwNjMsZDM6MTU0LCJlczYtcHJvbWlzZSI6MjEwfV0sNjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgTWF0aEpheCYmKCJsb2NhbCIhPT0od2luZG93LlBsb3RseUNvbmZpZ3x8e30pLk1hdGhKYXhDb25maWcmJihNYXRoSmF4Lkh1Yi5Db25maWcoe21lc3NhZ2VTdHlsZToibm9uZSIsc2tpcFN0YXJ0dXBUeXBlc2V0OiEwLGRpc3BsYXlBbGlnbjoibGVmdCIsdGV4MmpheDp7aW5saW5lTWF0aDpbWyIkIiwiJCJdLFsiXFwoIiwiXFwpIl1dfX0pLE1hdGhKYXguSHViLkNvbmZpZ3VyZWQoKSkpfX0se31dLDY4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzTGVmdEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4ibGVmdCI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54PD0xLzN9LHIuaXNDZW50ZXJBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuImNlbnRlciI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54PjEvMyYmdC54PDIvM30sci5pc1JpZ2h0QW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJyaWdodCI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54Pj0yLzN9LHIuaXNUb3BBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuInRvcCI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55Pj0yLzN9LHIuaXNNaWRkbGVBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIm1pZGRsZSI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55PjEvMyYmdC55PDIvM30sci5pc0JvdHRvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4iYm90dG9tIj09PXQueWFuY2hvcnx8ImF1dG8iPT09dC55YW5jaG9yJiZ0Lnk8PTEvM319LHt9XSw2ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tb2QiKSxpPW4ubW9kLGE9bi5tb2RIYWxmLG89TWF0aC5QSSxzPTIqbztmdW5jdGlvbiBsKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXRbMF0pPnMtMWUtMTR9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBhKGUtdCxzKX1mdW5jdGlvbiB1KHQsZSl7aWYobChlKSlyZXR1cm4hMDt2YXIgcixuO2VbMF08ZVsxXT8ocj1lWzBdLG49ZVsxXSk6KHI9ZVsxXSxuPWVbMF0pLChyPWkocixzKSk+KG49aShuLHMpKSYmKG4rPXMpO3ZhciBhPWkodCxzKSxvPWErcztyZXR1cm4gYT49ciYmYTw9bnx8bz49ciYmbzw9bn1mdW5jdGlvbiBmKHQsZSxyLG4saSxhLGMpe2k9aXx8MCxhPWF8fDA7dmFyIHUsZixoLHAsZCxnPWwoW3Isbl0pO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKStpLGEtdCpNYXRoLnNpbihlKV19Zz8odT0wLGY9byxoPXMpOnI8bj8odT1yLGg9bik6KHU9bixoPXIpLHQ8ZT8ocD10LGQ9ZSk6KHA9ZSxkPXQpO3ZhciBtLHk9TWF0aC5hYnMoaC11KTw9bz8wOjE7ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIkEiK1t0LHRdKyIgIitbMCx5LHJdKyIgIit2KHQsZSl9cmV0dXJuIGc/bT1udWxsPT09cD8iTSIrdihkLHUpK3goZCxmLDApK3goZCxoLDApKyJaIjoiTSIrdihwLHUpK3gocCxmLDApK3gocCxoLDApKyJaTSIrdihkLHUpK3goZCxmLDEpK3goZCxoLDEpKyJaIjpudWxsPT09cD8obT0iTSIrdihkLHUpK3goZCxoLDApLGMmJihtKz0iTDAsMFoiKSk6bT0iTSIrdihwLHUpKyJMIit2KGQsdSkreChkLGgsMCkrIkwiK3YocCxoKSt4KHAsdSwxKSsiWiIsbX1lLmV4cG9ydHM9e2RlZzJyYWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQvMTgwKm99LHJhZDJkZWc6ZnVuY3Rpb24odCl7cmV0dXJuIHQvbyoxODB9LGFuZ2xlRGVsdGE6YyxhbmdsZURpc3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnMoYyh0LGUpKX0saXNGdWxsQ2lyY2xlOmwsaXNBbmdsZUluc2lkZVNlY3Rvcjp1LGlzUHRJbnNpZGVTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuISF1KGUsbikmJihyWzBdPHJbMV0/KGk9clswXSxhPXJbMV0pOihpPXJbMV0sYT1yWzBdKSx0Pj1pJiZ0PD1hKTt2YXIgaSxhfSxwYXRoQXJjOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGYobnVsbCx0LGUscixuLGksMCl9LHBhdGhTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gZihudWxsLHQsZSxyLG4saSwxKX0scGF0aEFubnVsdXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBmKHQsZSxyLG4saSxhLDEpfX19LHsiLi9tb2QiOjcwN31dLDY4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1BcnJheS5pc0FycmF5LGk9InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyOntpc1ZpZXc6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGE9InVuZGVmaW5lZCI9PXR5cGVvZiBEYXRhVmlldz9mdW5jdGlvbigpe306RGF0YVZpZXc7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaS5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIGEpfWZ1bmN0aW9uIHModCl7cmV0dXJuIG4odCl8fG8odCl9ZnVuY3Rpb24gbCh0LGUscil7aWYocyh0KSl7aWYocyh0WzBdKSl7Zm9yKHZhciBuPXIsaT0wO2k8dC5sZW5ndGg7aSsrKW49ZShuLHRbaV0ubGVuZ3RoKTtyZXR1cm4gbn1yZXR1cm4gdC5sZW5ndGh9cmV0dXJuIDB9ci5pc1R5cGVkQXJyYXk9byxyLmlzQXJyYXlPclR5cGVkQXJyYXk9cyxyLmlzQXJyYXkxRD1mdW5jdGlvbih0KXtyZXR1cm4hcyh0WzBdKX0sci5lbnN1cmVBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQpfHwodD1bXSksdC5sZW5ndGg9ZSx0fSxyLmNvbmNhdD1mdW5jdGlvbigpe3ZhciB0LGUscixpLGEsbyxzLGwsYz1bXSx1PSEwLGY9MDtmb3Iocj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspKG89KGk9YXJndW1lbnRzW3JdKS5sZW5ndGgpJiYoZT9jLnB1c2goaSk6KGU9aSxhPW8pLG4oaSk/dD0hMToodT0hMSxmP3QhPT1pLmNvbnN0cnVjdG9yJiYodD0hMSk6dD1pLmNvbnN0cnVjdG9yKSxmKz1vKTtpZighZilyZXR1cm5bXTtpZighYy5sZW5ndGgpcmV0dXJuIGU7aWYodSlyZXR1cm4gZS5jb25jYXQuYXBwbHkoZSxjKTtpZih0KXtmb3IoKHM9bmV3IHQoZikpLnNldChlKSxyPTA7cjxjLmxlbmd0aDtyKyspaT1jW3JdLHMuc2V0KGksYSksYSs9aS5sZW5ndGg7cmV0dXJuIHN9Zm9yKHM9bmV3IEFycmF5KGYpLGw9MDtsPGUubGVuZ3RoO2wrKylzW2xdPWVbbF07Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKyl7Zm9yKGk9Y1tyXSxsPTA7bDxpLmxlbmd0aDtsKyspc1thK2xdPWlbbF07YSs9bH1yZXR1cm4gc30sci5tYXhSb3dMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxNYXRoLm1heCwwKX0sci5taW5Sb3dMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxNYXRoLm1pbiwxLzApfX0se31dLDY4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPS9eWyciJSwkI1xzJ10rfFssIF18WyciJSwkI1xzJ10rJC9nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXQucmVwbGFjZShhLCIiKSksbih0KT9OdW1iZXIodCk6aX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2dsY2FudmFzJiZlLl9nbGNhbnZhcy5zaXplKCkmJmUuX2dsY2FudmFzLmVhY2goZnVuY3Rpb24odCl7dC5yZWdsJiZ0LnJlZ2wuY2xlYXIoe2NvbG9yOiEwLGRlcHRoOiEwfSl9KX19LHt9XSw2ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXImJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSxkZWxldGUgdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcil9fSx7fV0sNjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIikscz10KCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0sbD10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGM9dCgiLi9yZWdleCIpLmNvdW50ZXIsdT10KCIuL21vZCIpLm1vZEhhbGYsZj10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiBoKHQsZSl7dmFyIG49ci52YWxPYmplY3RNZXRhW2UudmFsVHlwZV07aWYoZS5hcnJheU9rJiZmKHQpKXJldHVybiEwO2lmKG4udmFsaWRhdGVGdW5jdGlvbilyZXR1cm4gbi52YWxpZGF0ZUZ1bmN0aW9uKHQsZSk7dmFyIGk9e30sYT1pLG89e3NldDpmdW5jdGlvbih0KXthPXR9fTtyZXR1cm4gbi5jb2VyY2VGdW5jdGlvbih0LG8saSxlKSxhIT09aX1yLnZhbE9iamVjdE1ldGE9e2RhdGFfYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtmKHQpP2Uuc2V0KHQpOnZvaWQgMCE9PXImJmUuc2V0KHIpfX0sZW51bWVyYXRlZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7bi5jb2VyY2VOdW1iZXImJih0PSt0KSwtMT09PW4udmFsdWVzLmluZGV4T2YodCk/ZS5zZXQocik6ZS5zZXQodCl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtlLmNvZXJjZU51bWJlciYmKHQ9K3QpO2Zvcih2YXIgcj1lLnZhbHVlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPVN0cmluZyhyW25dKTtpZigiLyI9PT1pLmNoYXJBdCgwKSYmIi8iPT09aS5jaGFyQXQoaS5sZW5ndGgtMSkpe2lmKG5ldyBSZWdFeHAoaS5zdWJzdHIoMSxpLmxlbmd0aC0yKSkudGVzdCh0KSlyZXR1cm4hMH1lbHNlIGlmKHQ9PT1yW25dKXJldHVybiEwfXJldHVybiExfX0sYm9vbGVhbjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpeyEwPT09dHx8ITE9PT10P2Uuc2V0KHQpOmUuc2V0KHIpfX0sbnVtYmVyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXshbih0KXx8dm9pZCAwIT09aS5taW4mJnQ8aS5taW58fHZvaWQgMCE9PWkubWF4JiZ0PmkubWF4P2Uuc2V0KHIpOmUuc2V0KCt0KX19LGludGVnZXI6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLGkpe3QlMXx8IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxzdHJpbmc6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIGk9Im51bWJlciI9PXR5cGVvZiB0OyEwIT09bi5zdHJpY3QmJmk/ZS5zZXQoU3RyaW5nKHQpKTplLnNldChyKX1lbHNlIG4ubm9CbGFuayYmIXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxjb2xvcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2kodCkuaXNWYWxpZCgpP2Uuc2V0KHQpOmUuc2V0KHIpfX0sY29sb3JsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIGkodCkuaXNWYWxpZCgpfSk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcnNjYWxlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ZS5zZXQoby5nZXQodCxyKSl9fSxhbmdsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpeyJhdXRvIj09PXQ/ZS5zZXQoImF1dG8iKTpuKHQpP2Uuc2V0KHUoK3QsMzYwKSk6ZS5zZXQocil9fSxzdWJwbG90aWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4ucmVnZXh8fGMocik7InN0cmluZyI9PXR5cGVvZiB0JiZpLnRlc3QodCk/ZS5zZXQodCk6ZS5zZXQocil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmRmbHQ7cmV0dXJuIHQ9PT1yfHwic3RyaW5nIj09dHlwZW9mIHQmJiEhYyhyKS50ZXN0KHQpfX0sZmxhZ2xpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdClpZigtMT09PShuLmV4dHJhc3x8W10pLmluZGV4T2YodCkpe2Zvcih2YXIgaT10LnNwbGl0KCIrIiksYT0wO2E8aS5sZW5ndGg7KXt2YXIgbz1pW2FdOy0xPT09bi5mbGFncy5pbmRleE9mKG8pfHxpLmluZGV4T2Yobyk8YT9pLnNwbGljZShhLDEpOmErK31pLmxlbmd0aD9lLnNldChpLmpvaW4oIisiKSk6ZS5zZXQocil9ZWxzZSBlLnNldCh0KTtlbHNlIGUuc2V0KHIpfX0sYW55Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dm9pZCAwPT09dD9lLnNldChyKTplLnNldCh0KX19LGluZm9fYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxuLGkpe2Z1bmN0aW9uIGEodCxlLG4pe3ZhciBpLGE9e3NldDpmdW5jdGlvbih0KXtpPXR9fTtyZXR1cm4gdm9pZCAwPT09biYmKG49ZS5kZmx0KSxyLnZhbE9iamVjdE1ldGFbZS52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbih0LGEsbixlKSxpfXZhciBvPTI9PT1pLmRpbWVuc2lvbnN8fCIxLTIiPT09aS5kaW1lbnNpb25zJiZBcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbMF0pO2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBzLGwsYyx1LGYsaCxwPWkuaXRlbXMsZD1bXSxnPUFycmF5LmlzQXJyYXkocCksdj1nJiZvJiZBcnJheS5pc0FycmF5KHBbMF0pLG09byYmZyYmIXYseT1nJiYhbT9wLmxlbmd0aDp0Lmxlbmd0aDtpZihuPUFycmF5LmlzQXJyYXkobik/bjpbXSxvKWZvcihzPTA7czx5O3MrKylmb3IoZFtzXT1bXSxjPUFycmF5LmlzQXJyYXkodFtzXSk/dFtzXTpbXSxmPW0/cC5sZW5ndGg6Zz9wW3NdLmxlbmd0aDpjLmxlbmd0aCxsPTA7bDxmO2wrKyl1PW0/cFtsXTpnP3Bbc11bbF06cCx2b2lkIDAhPT0oaD1hKGNbbF0sdSwobltzXXx8W10pW2xdKSkmJihkW3NdW2xdPWgpO2Vsc2UgZm9yKHM9MDtzPHk7cysrKXZvaWQgMCE9PShoPWEodFtzXSxnP3Bbc106cCxuW3NdKSkmJihkW3NdPWgpO2Uuc2V0KGQpfWVsc2UgZS5zZXQobil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgcj1lLml0ZW1zLG49QXJyYXkuaXNBcnJheShyKSxpPTI9PT1lLmRpbWVuc2lvbnM7aWYoIWUuZnJlZUxlbmd0aCYmdC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihpKXtpZighQXJyYXkuaXNBcnJheSh0W2FdKXx8IWUuZnJlZUxlbmd0aCYmdFthXS5sZW5ndGghPT1yW2FdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHRbYV0ubGVuZ3RoO28rKylpZighaCh0W2FdW29dLG4/clthXVtvXTpyKSlyZXR1cm4hMX1lbHNlIGlmKCFoKHRbYV0sbj9yW2FdOnIpKXJldHVybiExO3JldHVybiEwfX19LHIuY29lcmNlPWZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89bChuLGkpLmdldCgpLHM9bCh0LGkpLGM9bChlLGkpLHU9cy5nZXQoKSxwPWUuX3RlbXBsYXRlO2lmKHZvaWQgMD09PXUmJnAmJih1PWwocCxpKS5nZXQoKSxwPTApLHZvaWQgMD09PWEmJihhPW8uZGZsdCksby5hcnJheU9rJiZmKHUpKXJldHVybiBjLnNldCh1KSx1O3ZhciBkPXIudmFsT2JqZWN0TWV0YVtvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uO2QodSxjLGEsbyk7dmFyIGc9Yy5nZXQoKTtyZXR1cm4gcCYmZz09PWEmJiFoKHUsbykmJihkKHU9bChwLGkpLmdldCgpLGMsYSxvKSxnPWMuZ2V0KCkpLGd9LHIuY29lcmNlMj1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPWwodCxpKSxzPXIuY29lcmNlKHQsZSxuLGksYSksYz1vLmdldCgpO3JldHVybiBudWxsIT1jJiZzfSxyLmNvZXJjZUZvbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O3JldHVybiByPXJ8fHt9LG4uZmFtaWx5PXQoZSsiLmZhbWlseSIsci5mYW1pbHkpLG4uc2l6ZT10KGUrIi5zaXplIixyLnNpemUpLG4uY29sb3I9dChlKyIuY29sb3IiLHIuY29sb3IpLG59LHIuY29lcmNlSG92ZXJpbmZvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxvPWUuX21vZHVsZS5hdHRyaWJ1dGVzLHM9by5ob3ZlcmluZm8/bzphLGw9cy5ob3ZlcmluZm87aWYoMT09PW4uX2RhdGFMZW5ndGgpe3ZhciBjPSJhbGwiPT09bC5kZmx0P2wuZmxhZ3Muc2xpY2UoKTpsLmRmbHQuc3BsaXQoIisiKTtjLnNwbGljZShjLmluZGV4T2YoIm5hbWUiKSwxKSxpPWMuam9pbigiKyIpfXJldHVybiByLmNvZXJjZSh0LGUscywiaG92ZXJpbmZvIixpKX0sci5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7aWYodC5tYXJrZXIpe3ZhciByLG4saT10Lm1hcmtlci5vcGFjaXR5O2lmKHZvaWQgMCE9PWkpZihpKXx8dC5zZWxlY3RlZHx8dC51bnNlbGVjdGVkfHwocj1pLG49cyppKSxlKCJzZWxlY3RlZC5tYXJrZXIub3BhY2l0eSIsciksZSgidW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSIsbil9fSxyLnZhbGlkYXRlPWh9LHsiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyI6NTkyLCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo2NzYsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi9hcnJheSI6NjgzLCIuL21vZCI6NzA3LCIuL25lc3RlZF9wcm9wZXJ0eSI6NzA4LCIuL3JlZ2V4Ijo3MTYsImZhc3QtaXNudW1lcmljIjoyMjEsdGlueWNvbG9yMjo1MjF9XSw2ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhPXQoImQzIiksbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi9sb2dnZXJzIiksbD10KCIuL21vZCIpLm1vZCxjPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKSx1PWMuQkFETlVNLGY9Yy5PTkVEQVksaD1jLk9ORUhPVVIscD1jLk9ORU1JTixkPWMuT05FU0VDLGc9Yy5FUE9DSEpELHY9dCgiLi4vcmVnaXN0cnkiKSxtPWEudGltZS5mb3JtYXQudXRjLHk9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkKSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkOj9cZFxkKT8pPyk/KT8pP1xzKiQvbSx4PS9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZGk/KSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkOj9cZFxkKT8pPyk/KT8pP1xzKiQvbSxiPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS03MDtmdW5jdGlvbiBfKHQpe3JldHVybiB0JiZ2LmNvbXBvbmVudHNSZWdpc3RyeS5jYWxlbmRhcnMmJiJzdHJpbmciPT10eXBlb2YgdCYmImdyZWdvcmlhbiIhPT10fWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gU3RyaW5nKHQrTWF0aC5wb3coMTAsZSkpLnN1YnN0cigxKX1yLmRhdGVUaWNrMD1mdW5jdGlvbih0LGUpe3JldHVybiBfKHQpP2U/di5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkNBTk9OSUNBTF9TVU5EQVkiKVt0XTp2LmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1RJQ0siKVt0XTplPyIyMDAwLTAxLTAyIjoiMjAwMC0wMS0wMSJ9LHIuZGZsdFJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBfKHQpP3YuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJERkxUUkFOR0UiKVt0XTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl19LHIuaXNKU0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0VGltZX0sci5kYXRlVGltZTJtcz1mdW5jdGlvbih0LGUpe2lmKHIuaXNKU0RhdGUodCkpe3ZhciBhPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpwLG89KHQuZ2V0VVRDTWludXRlcygpLXQuZ2V0TWludXRlcygpKSpwKyh0LmdldFVUQ1NlY29uZHMoKS10LmdldFNlY29uZHMoKSkqZCsodC5nZXRVVENNaWxsaXNlY29uZHMoKS10LmdldE1pbGxpc2Vjb25kcygpKTtpZihvKXt2YXIgcz0zKnA7YT1hLXMvMitsKG8tYStzLzIscyl9cmV0dXJuKHQ9TnVtYmVyKHQpLWEpPj1uJiZ0PD1pP3Q6dX1pZigic3RyaW5nIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gdTt0PVN0cmluZyh0KTt2YXIgYz1fKGUpLG09dC5jaGFyQXQoMCk7IWN8fCJHIiE9PW0mJiJnIiE9PW18fCh0PXQuc3Vic3RyKDEpLGU9IiIpO3ZhciB3PWMmJiJjaGluZXNlIj09PWUuc3Vic3RyKDAsNyksaz10Lm1hdGNoKHc/eDp5KTtpZighaylyZXR1cm4gdTt2YXIgVD1rWzFdLEE9a1szXXx8IjEiLE09TnVtYmVyKGtbNV18fDEpLFM9TnVtYmVyKGtbN118fDApLEU9TnVtYmVyKGtbOV18fDApLEM9TnVtYmVyKGtbMTFdfHwwKTtpZihjKXtpZigyPT09VC5sZW5ndGgpcmV0dXJuIHU7dmFyIEw7VD1OdW1iZXIoVCk7dHJ5e3ZhciB6PXYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKTtpZih3KXt2YXIgTz0iaSI9PT1BLmNoYXJBdChBLmxlbmd0aC0xKTtBPXBhcnNlSW50KEEsMTApLEw9ei5uZXdEYXRlKFQsei50b01vbnRoSW5kZXgoVCxBLE8pLE0pfWVsc2UgTD16Lm5ld0RhdGUoVCxOdW1iZXIoQSksTSl9Y2F0Y2godCl7cmV0dXJuIHV9cmV0dXJuIEw/KEwudG9KRCgpLWcpKmYrUypoK0UqcCtDKmQ6dX1UPTI9PT1ULmxlbmd0aD8oTnVtYmVyKFQpKzJlMy1iKSUxMDArYjpOdW1iZXIoVCksQS09MTt2YXIgST1uZXcgRGF0ZShEYXRlLlVUQygyZTMsQSxNLFMsRSkpO3JldHVybiBJLnNldFVUQ0Z1bGxZZWFyKFQpLEkuZ2V0VVRDTW9udGgoKSE9PUE/dTpJLmdldFVUQ0RhdGUoKSE9PU0/dTpJLmdldFRpbWUoKStDKmR9LG49ci5NSU5fTVM9ci5kYXRlVGltZTJtcygiLTk5OTkiKSxpPXIuTUFYX01TPXIuZGF0ZVRpbWUybXMoIjk5OTktMTItMzEgMjM6NTk6NTkuOTk5OSIpLHIuaXNEYXRlVGltZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmRhdGVUaW1lMm1zKHQsZSkhPT11fTt2YXIgaz05MCpmLFQ9MypoLEE9NSpwO2Z1bmN0aW9uIE0odCxlLHIsbixpKXtpZigoZXx8cnx8bnx8aSkmJih0Kz0iICIrdyhlLDIpKyI6Iit3KHIsMiksKG58fGkpJiYodCs9IjoiK3cobiwyKSxpKSkpe2Zvcih2YXIgYT00O2klMTA9PTA7KWEtPTEsaS89MTA7dCs9Ii4iK3coaSxhKX1yZXR1cm4gdH1yLm1zMkRhdGVUaW1lPWZ1bmN0aW9uKHQsZSxyKXtpZigibnVtYmVyIiE9dHlwZW9mIHR8fCEodD49biYmdDw9aSkpcmV0dXJuIHU7ZXx8KGU9MCk7dmFyIGEsbyxzLGMseSx4LGI9TWF0aC5mbG9vcigxMCpsKHQrLjA1LDEpKSx3PU1hdGgucm91bmQodC1iLzEwKTtpZihfKHIpKXt2YXIgUz1NYXRoLmZsb29yKHcvZikrZyxFPU1hdGguZmxvb3IobCh0LGYpKTt0cnl7YT12LmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikocikuZnJvbUpEKFMpLmZvcm1hdERhdGUoInl5eXktbW0tZGQiKX1jYXRjaCh0KXthPW0oIkclWS0lbS0lZCIpKG5ldyBEYXRlKHcpKX1pZigiLSI9PT1hLmNoYXJBdCgwKSlmb3IoO2EubGVuZ3RoPDExOylhPSItMCIrYS5zdWJzdHIoMSk7ZWxzZSBmb3IoO2EubGVuZ3RoPDEwOylhPSIwIithO289ZTxrP01hdGguZmxvb3IoRS9oKTowLHM9ZTxrP01hdGguZmxvb3IoRSVoL3ApOjAsYz1lPFQ/TWF0aC5mbG9vcihFJXAvZCk6MCx5PWU8QT9FJWQqMTArYjowfWVsc2UgeD1uZXcgRGF0ZSh3KSxhPW0oIiVZLSVtLSVkIikoeCksbz1lPGs/eC5nZXRVVENIb3VycygpOjAscz1lPGs/eC5nZXRVVENNaW51dGVzKCk6MCxjPWU8VD94LmdldFVUQ1NlY29uZHMoKTowLHk9ZTxBPzEwKnguZ2V0VVRDTWlsbGlzZWNvbmRzKCkrYjowO3JldHVybiBNKGEsbyxzLGMseSl9LHIubXMyRGF0ZVRpbWVMb2NhbD1mdW5jdGlvbih0KXtpZighKHQ+PW4rZiYmdDw9aS1mKSlyZXR1cm4gdTt2YXIgZT1NYXRoLmZsb29yKDEwKmwodCsuMDUsMSkpLHI9bmV3IERhdGUoTWF0aC5yb3VuZCh0LWUvMTApKTtyZXR1cm4gTShhLnRpbWUuZm9ybWF0KCIlWS0lbS0lZCIpKHIpLHIuZ2V0SG91cnMoKSxyLmdldE1pbnV0ZXMoKSxyLmdldFNlY29uZHMoKSwxMCpyLmdldFVUQ01pbGxpc2Vjb25kcygpK2UpfSxyLmNsZWFuRGF0ZT1mdW5jdGlvbih0LGUsbil7aWYodD09PXUpcmV0dXJuIGU7aWYoci5pc0pTRGF0ZSh0KXx8Im51bWJlciI9PXR5cGVvZiB0JiZpc0Zpbml0ZSh0KSl7aWYoXyhuKSlyZXR1cm4gcy5lcnJvcigiSlMgRGF0ZXMgYW5kIG1pbGxpc2Vjb25kcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggd29ybGQgY2FsZW5kYXJzIix0KSxlO2lmKCEodD1yLm1zMkRhdGVUaW1lTG9jYWwoK3QpKSYmdm9pZCAwIT09ZSlyZXR1cm4gZX1lbHNlIGlmKCFyLmlzRGF0ZVRpbWUodCxuKSlyZXR1cm4gcy5lcnJvcigidW5yZWNvZ25pemVkIGRhdGUiLHQpLGU7cmV0dXJuIHR9O3ZhciBTPS8lXGQ/Zi9nO2Z1bmN0aW9uIEUodCxlLHIsbil7dD10LnJlcGxhY2UoUyxmdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1pbigrdC5jaGFyQXQoMSl8fDYsNik7cmV0dXJuKGUvMWUzJTErMikudG9GaXhlZChyKS5zdWJzdHIoMikucmVwbGFjZSgvMCskLywiIil8fCIwIn0pO3ZhciBpPW5ldyBEYXRlKE1hdGguZmxvb3IoZSsuMDUpKTtpZihfKG4pKXRyeXt0PXYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJ3b3JsZENhbEZtdCIpKHQsZSxuKX1jYXRjaCh0KXtyZXR1cm4iSW52YWxpZCJ9cmV0dXJuIHIodCkoaSl9dmFyIEM9WzU5LDU5LjksNTkuOTksNTkuOTk5LDU5Ljk5OTldO3IuZm9ybWF0RGF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoaT1fKGkpJiZpLCFlKWlmKCJ5Ij09PXIpZT1hLnllYXI7ZWxzZSBpZigibSI9PT1yKWU9YS5tb250aDtlbHNle2lmKCJkIiE9PXIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bCh0Ky4wNSxmKSxuPXcoTWF0aC5mbG9vcihyL2gpLDIpKyI6Iit3KGwoTWF0aC5mbG9vcihyL3ApLDYwKSwyKTtpZigiTSIhPT1lKXtvKGUpfHwoZT0wKTt2YXIgaT0oMTAwK01hdGgubWluKGwodC9kLDYwKSxDW2VdKSkudG9GaXhlZChlKS5zdWJzdHIoMSk7ZT4wJiYoaT1pLnJlcGxhY2UoLzArJC8sIiIpLnJlcGxhY2UoL1tcLl0kLywiIikpLG4rPSI6IitpfXJldHVybiBufSh0LHIpKyJcbiIrRShhLmRheU1vbnRoWWVhcix0LG4saSk7ZT1hLmRheU1vbnRoKyJcbiIrYS55ZWFyfXJldHVybiBFKGUsdCxuLGkpfTt2YXIgTD0zKmY7ci5pbmNyZW1lbnRNb250aD1mdW5jdGlvbih0LGUscil7cj1fKHIpJiZyO3ZhciBuPWwodCxmKTtpZih0PU1hdGgucm91bmQodC1uKSxyKXRyeXt2YXIgaT1NYXRoLnJvdW5kKHQvZikrZyxhPXYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKSxvPWEuZnJvbUpEKGkpO3JldHVybiBlJTEyP2EuYWRkKG8sZSwibSIpOmEuYWRkKG8sZS8xMiwieSIpLChvLnRvSkQoKS1nKSpmK259Y2F0Y2goZSl7cy5lcnJvcigiaW52YWxpZCBtcyAiK3QrIiBpbiBjYWxlbmRhciAiK3IpfXZhciBjPW5ldyBEYXRlKHQrTCk7cmV0dXJuIGMuc2V0VVRDTW9udGgoYy5nZXRVVENNb250aCgpK2UpK24tTH0sci5maW5kRXhhY3REYXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9MCxhPTAscz0wLGw9MCxjPV8oZSkmJnYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKSx1PTA7dTx0Lmxlbmd0aDt1KyspaWYobj10W3VdLG8obikpe2lmKCEobiVmKSlpZihjKXRyeXsxPT09KHI9Yy5mcm9tSkQobi9mK2cpKS5kYXkoKT8xPT09ci5tb250aCgpP2krKzphKys6cysrfWNhdGNoKHQpe31lbHNlIDE9PT0ocj1uZXcgRGF0ZShuKSkuZ2V0VVRDRGF0ZSgpPzA9PT1yLmdldFVUQ01vbnRoKCk/aSsrOmErKzpzKyt9ZWxzZSBsKys7cys9YSs9aTt2YXIgaD10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmkvaCxleGFjdE1vbnRoczphL2gsZXhhY3REYXlzOnMvaH19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vcmVnaXN0cnkiOjgyOSwiLi9sb2dnZXJzIjo3MDQsIi4vbW9kIjo3MDcsZDM6MTU0LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNjg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixpPXtpbml0OmZ1bmN0aW9uKHQpe2lmKHQuX2V2IGluc3RhbmNlb2YgbilyZXR1cm4gdDt2YXIgZT1uZXcgbixyPW5ldyBuO3JldHVybiB0Ll9ldj1lLHQuX2ludGVybmFsRXY9cix0Lm9uPWUub24uYmluZChlKSx0Lm9uY2U9ZS5vbmNlLmJpbmQoZSksdC5yZW1vdmVMaXN0ZW5lcj1lLnJlbW92ZUxpc3RlbmVyLmJpbmQoZSksdC5yZW1vdmVBbGxMaXN0ZW5lcnM9ZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChlKSx0Ll9pbnRlcm5hbE9uPXIub24uYmluZChyKSx0Ll9pbnRlcm5hbE9uY2U9ci5vbmNlLmJpbmQociksdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcj1yLnJlbW92ZUxpc3RlbmVyLmJpbmQociksdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnM9ci5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChyKSx0LmVtaXQ9ZnVuY3Rpb24obixpKXsidW5kZWZpbmVkIiE9dHlwZW9mIGpRdWVyeSYmalF1ZXJ5KHQpLnRyaWdnZXIobixpKSxlLmVtaXQobixpKSxyLmVtaXQobixpKX0sdH0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJihuPWpRdWVyeSh0KS50cmlnZ2VySGFuZGxlcihlLHIpKTt2YXIgYT10Ll9ldjtpZighYSlyZXR1cm4gbjt2YXIgbyxzPWEuX2V2ZW50c1tlXTtpZighcylyZXR1cm4gbjtmdW5jdGlvbiBsKHQpe3JldHVybiB0Lmxpc3RlbmVyPyhhLnJlbW92ZUxpc3RlbmVyKGUsdC5saXN0ZW5lciksdC5maXJlZD92b2lkIDA6KHQuZmlyZWQ9ITAsdC5saXN0ZW5lci5hcHBseShhLFtyXSkpKTp0LmFwcGx5KGEsW3JdKX1mb3Iocz1BcnJheS5pc0FycmF5KHMpP3M6W3NdLG89MDtvPHMubGVuZ3RoLTE7bysrKWwoc1tvXSk7cmV0dXJuIGk9bChzW29dKSx2b2lkIDAhPT1uP246aX0scHVyZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5vbixkZWxldGUgdC5vbmNlLGRlbGV0ZSB0LnJlbW92ZUxpc3RlbmVyLGRlbGV0ZSB0LnJlbW92ZUFsbExpc3RlbmVycyxkZWxldGUgdC5lbWl0LGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5faW50ZXJuYWxFdixkZWxldGUgdC5faW50ZXJuYWxPbixkZWxldGUgdC5faW50ZXJuYWxPbmNlLGRlbGV0ZSB0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyLGRlbGV0ZSB0Ll9yZW1vdmVBbGxJbnRlcm5hbExpc3RlbmVycyx0fX07ZS5leHBvcnRzPWl9LHtldmVudHM6OTR9XSw2OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pc19wbGFpbl9vYmplY3QuanMiKSxpPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gYSh0LGUscixvKXt2YXIgcyxsLGMsdSxmLGgscD10WzBdLGQ9dC5sZW5ndGg7aWYoMj09PWQmJmkocCkmJmkodFsxXSkmJjA9PT1wLmxlbmd0aCl7aWYoZnVuY3Rpb24odCxlKXt2YXIgcixuO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKG51bGwhPT0obj10W3JdKSYmIm9iamVjdCI9PXR5cGVvZiBuKXJldHVybiExO3ZvaWQgMCE9PW4mJihlW3JdPW4pfXJldHVybiEwfSh0WzFdLHApKXJldHVybiBwO3Auc3BsaWNlKDAscC5sZW5ndGgpfWZvcih2YXIgZz0xO2c8ZDtnKyspZm9yKGwgaW4gcz10W2ddKWM9cFtsXSx1PXNbbF0sbyYmaSh1KT9wW2xdPXU6ZSYmdSYmKG4odSl8fChmPWkodSkpKT8oZj8oZj0hMSxoPWMmJmkoYyk/YzpbXSk6aD1jJiZuKGMpP2M6e30scFtsXT1hKFtoLHVdLGUscixvKSk6KCJ1bmRlZmluZWQiIT10eXBlb2YgdXx8cikmJihwW2xdPXUpO3JldHVybiBwfXIuZXh0ZW5kRmxhdD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMSwhMSwhMSl9LHIuZXh0ZW5kRGVlcD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMSwhMSl9LHIuZXh0ZW5kRGVlcEFsbD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMCwhMSl9LHIuZXh0ZW5kRGVlcE5vQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCExLCEwKX19LHsiLi9pc19wbGFpbl9vYmplY3QuanMiOjcwMX1dLDY5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9W10sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsxIT09ZVthXSYmKGVbYV09MSxyW24rK109YSl9cmV0dXJuIHJ9fSx7fV0sNjkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuITA9PT10LnZpc2libGV9ZnVuY3Rpb24gaSh0KXtyZXR1cm4hMD09PXRbMF0udHJhY2UudmlzaWJsZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9KGU9dCxBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KGVbMF0pJiZlWzBdWzBdJiZlWzBdWzBdLnRyYWNlP2k6biksYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107cihzKSYmYS5wdXNoKHMpfXJldHVybiBhfX0se31dLDY5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb3VudHJ5LXJlZ2V4IiksaT10KCIuLi9saWIiKSxhPU9iamVjdC5rZXlzKG4pLG89eyJJU08tMyI6aS5pZGVudGl0eSwiVVNBLXN0YXRlcyI6aS5pZGVudGl0eSwiY291bnRyeSBuYW1lcyI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciByPWFbZV0sbz1uZXcgUmVnRXhwKG5bcl0pO2lmKG8udGVzdCh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcn1yZXR1cm4gaS5sb2coIlVucmVjb2duaXplZCBjb3VudHJ5IG5hbWU6ICIrdCsiLiIpLCExfX07ci5sb2NhdGlvblRvRmVhdHVyZT1mdW5jdGlvbih0LGUscil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTt2YXIgbj1mdW5jdGlvbih0LGUpe3JldHVybigwLG9bdF0pKGUpfSh0LGUpO2lmKG4pe2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO2lmKHMuaWQ9PT1uKXJldHVybiBzfWkubG9nKFsiTG9jYXRpb24gd2l0aCBpZCIsbiwiZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIHRvcG9qc29uIGZlYXR1cmUgYXQgdGhpcyByZXNvbHV0aW9uLiJdLmpvaW4oIiAiKSl9cmV0dXJuITF9fSx7Ii4uL2xpYiI6NzAwLCJjb3VudHJ5LXJlZ2V4IjoxMjR9XSw2OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLmNhbGNUcmFjZVRvTGluZUNvb3Jkcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXS50cmFjZS5jb25uZWN0Z2FwcyxyPVtdLGk9W10sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdLmxvbmxhdDtvWzBdIT09bj9pLnB1c2gobyk6IWUmJmkubGVuZ3RoPjAmJihyLnB1c2goaSksaT1bXSl9cmV0dXJuIGkubGVuZ3RoPjAmJnIucHVzaChpKSxyfSxyLm1ha2VMaW5lPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnRbMF19Ont0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSxyLm1ha2VQb2x5Z29uPWZ1bmN0aW9uKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dH07Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKWVbcl09W3Rbcl1dO3JldHVybnt0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOmV9fSxyLm1ha2VCbGFuaz1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6W119fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2Nzd9XSw2OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG89dCgiLi9tb2QiKS5tb2Q7ZnVuY3Rpb24gcyh0LGUscixuLGksYSxvLHMpe3ZhciBsPXItdCxjPWktdCx1PW8taSxmPW4tZSxoPWEtZSxwPXMtYSxkPWwqcC11KmY7aWYoMD09PWQpcmV0dXJuIG51bGw7dmFyIGc9KGMqcC11KmgpL2Qsdj0oYypmLWwqaCkvZDtyZXR1cm4gdjwwfHx2PjF8fGc8MHx8Zz4xP251bGw6e3g6dCtsKmcseTplK2YqZ319ZnVuY3Rpb24gbCh0LGUscixuLGkpe3ZhciBhPW4qdCtpKmU7aWYoYTwwKXJldHVybiBuKm4raSppO2lmKGE+cil7dmFyIG89bi10LHM9aS1lO3JldHVybiBvKm8rcypzfXZhciBsPW4qZS1pKnQ7cmV0dXJuIGwqbC9yfXIuc2VnbWVudHNJbnRlcnNlY3Q9cyxyLnNlZ21lbnREaXN0YW5jZT1mdW5jdGlvbih0LGUscixuLGksYSxvLGMpe2lmKHModCxlLHIsbixpLGEsbyxjKSlyZXR1cm4gMDt2YXIgdT1yLXQsZj1uLWUsaD1vLWkscD1jLWEsZD11KnUrZipmLGc9aCpoK3AqcCx2PU1hdGgubWluKGwodSxmLGQsaS10LGEtZSksbCh1LGYsZCxvLXQsYy1lKSxsKGgscCxnLHQtaSxlLWEpLGwoaCxwLGcsci1pLG4tYSkpO3JldHVybiBNYXRoLnNxcnQodil9LHIuZ2V0VGV4dExvY2F0aW9uPWZ1bmN0aW9uKHQsZSxyLHMpe2lmKHQ9PT1pJiZzPT09YXx8KG49e30saT10LGE9cyksbltyXSlyZXR1cm4gbltyXTt2YXIgbD10LmdldFBvaW50QXRMZW5ndGgobyhyLXMvMixlKSksYz10LmdldFBvaW50QXRMZW5ndGgobyhyK3MvMixlKSksdT1NYXRoLmF0YW4oKGMueS1sLnkpLyhjLngtbC54KSksZj10LmdldFBvaW50QXRMZW5ndGgobyhyLGUpKSxoPXt4Oig0KmYueCtsLngrYy54KS82LHk6KDQqZi55K2wueStjLnkpLzYsdGhldGE6dX07cmV0dXJuIG5bcl09aCxofSxyLmNsZWFyTG9jYXRpb25DYWNoZT1mdW5jdGlvbigpe2k9bnVsbH0sci5nZXRWaXNpYmxlU2VnbWVudD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUubGVmdCxvPWUucmlnaHQscz1lLnRvcCxsPWUuYm90dG9tLGM9MCx1PXQuZ2V0VG90YWxMZW5ndGgoKSxmPXU7ZnVuY3Rpb24gaChlKXt2YXIgcj10LmdldFBvaW50QXRMZW5ndGgoZSk7MD09PWU/bj1yOmU9PT11JiYoaT1yKTt2YXIgYz1yLng8YT9hLXIueDpyLng+bz9yLngtbzowLGY9ci55PHM/cy1yLnk6ci55Pmw/ci55LWw6MDtyZXR1cm4gTWF0aC5zcXJ0KGMqYytmKmYpfWZvcih2YXIgcD1oKGMpO3A7KXtpZigoYys9cCtyKT5mKXJldHVybjtwPWgoYyl9Zm9yKHA9aChmKTtwOyl7aWYoYz4oZi09cCtyKSlyZXR1cm47cD1oKGYpfXJldHVybnttaW46YyxtYXg6ZixsZW46Zi1jLHRvdGFsOnUsaXNDbG9zZWQ6MD09PWMmJmY9PT11JiZNYXRoLmFicyhuLngtaS54KTwuMSYmTWF0aC5hYnMobi55LWkueSk8LjF9fSxyLmZpbmRQb2ludE9uUGF0aD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGksYSxvLHM9KG49bnx8e30pLnBhdGhMZW5ndGh8fHQuZ2V0VG90YWxMZW5ndGgoKSxsPW4udG9sZXJhbmNlfHwuMDAxLGM9bi5pdGVyYXRpb25MaW1pdHx8MzAsdT10LmdldFBvaW50QXRMZW5ndGgoMClbcl0+dC5nZXRQb2ludEF0TGVuZ3RoKHMpW3JdPy0xOjEsZj0wLGg9MCxwPXM7ZjxjOyl7aWYoaT0oaCtwKS8yLG89KGE9dC5nZXRQb2ludEF0TGVuZ3RoKGkpKVtyXS1lLE1hdGguYWJzKG8pPGwpcmV0dXJuIGE7dSpvPjA/cD1pOmg9aSxmKyt9cmV0dXJuIGF9fSx7Ii4vbW9kIjo3MDd9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYobnVsbD09PShlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSl0aHJvdyBuZXcgRXJyb3IoIk5vIERPTSBlbGVtZW50IHdpdGggaWQgJyIrdCsiJyBleGlzdHMgb24gdGhlIHBhZ2UuIik7cmV0dXJuIGV9aWYobnVsbD09dCl0aHJvdyBuZXcgRXJyb3IoIkRPTSBlbGVtZW50IHByb3ZpZGVkIGlzIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIHR9fSx7fV0sNjk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCJjb2xvci1ub3JtYWxpemUiKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikuZGVmYXVsdExpbmUsbD10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheSxjPWEocyksdT0xO2Z1bmN0aW9uIGYodCxlKXt2YXIgcj10O3JldHVybiByWzNdKj1lLHJ9ZnVuY3Rpb24gaCh0KXtpZihuKHQpKXJldHVybiBjO3ZhciBlPWEodCk7cmV0dXJuIGUubGVuZ3RoP2U6Y31mdW5jdGlvbiBwKHQpe3JldHVybiBuKHQpP3Q6dX1lLmV4cG9ydHM9e2Zvcm1hdENvbG9yOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLHMsZCxnLHY9dC5jb2xvcixtPWwodikseT1sKGUpLHg9W107aWYobj12b2lkIDAhPT10LmNvbG9yc2NhbGU/by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUodCx7Y0xldHRlcjoiYyJ9KSk6aCxpPW0/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT9jOmEobih0W2VdKSl9Omgscz15P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/dTpwKHRbZV0pfTpwLG18fHkpZm9yKHZhciBiPTA7YjxyO2IrKylkPWkodixiKSxnPXMoZSxiKSx4W2JdPWYoZCxnKTtlbHNlIHg9ZihhKHYpLGUpO3JldHVybiB4fSxwYXJzZUNvbG9yU2NhbGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MSksKHQucmV2ZXJzZXNjYWxlP28uZmxpcFNjYWxlKHQuY29sb3JzY2FsZSk6dC5jb2xvcnNjYWxlKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9dFswXSxuPWkodFsxXSkudG9SZ2IoKTtyZXR1cm57aW5kZXg6cixyZ2I6W24ucixuLmcsbi5iLGVdfX0pfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1NzYsIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NTg5LCIuL2FycmF5Ijo2ODMsImNvbG9yLW5vcm1hbGl6ZSI6MTEwLCJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sNjk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtmdW5jdGlvbiBpKHQpe3JldHVyblt0XX1lLmV4cG9ydHM9e2tleUZ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9LHJlcGVhdDppLGRlc2NlbmQ6bix3cmFwOmksdW53cmFwOmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfX19LHsiLi9pZGVudGl0eSI6Njk5fV0sNjk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LHt9XSw3MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLkZQX1NBRkUscz1hLkJBRE5VTSxsPWUuZXhwb3J0cz17fTtsLm5lc3RlZFByb3BlcnR5PXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksbC5rZXllZENvbnRhaW5lcj10KCIuL2tleWVkX2NvbnRhaW5lciIpLGwucmVsYXRpdmVBdHRyPXQoIi4vcmVsYXRpdmVfYXR0ciIpLGwuaXNQbGFpbk9iamVjdD10KCIuL2lzX3BsYWluX29iamVjdCIpLGwudG9Mb2dSYW5nZT10KCIuL3RvX2xvZ19yYW5nZSIpLGwucmVsaW5rUHJpdmF0ZUtleXM9dCgiLi9yZWxpbmtfcHJpdmF0ZSIpO3ZhciBjPXQoIi4vYXJyYXkiKTtsLmlzVHlwZWRBcnJheT1jLmlzVHlwZWRBcnJheSxsLmlzQXJyYXlPclR5cGVkQXJyYXk9Yy5pc0FycmF5T3JUeXBlZEFycmF5LGwuaXNBcnJheTFEPWMuaXNBcnJheTFELGwuZW5zdXJlQXJyYXk9Yy5lbnN1cmVBcnJheSxsLmNvbmNhdD1jLmNvbmNhdCxsLm1heFJvd0xlbmd0aD1jLm1heFJvd0xlbmd0aCxsLm1pblJvd0xlbmd0aD1jLm1pblJvd0xlbmd0aDt2YXIgdT10KCIuL21vZCIpO2wubW9kPXUubW9kLGwubW9kSGFsZj11Lm1vZEhhbGY7dmFyIGY9dCgiLi9jb2VyY2UiKTtsLnZhbE9iamVjdE1ldGE9Zi52YWxPYmplY3RNZXRhLGwuY29lcmNlPWYuY29lcmNlLGwuY29lcmNlMj1mLmNvZXJjZTIsbC5jb2VyY2VGb250PWYuY29lcmNlRm9udCxsLmNvZXJjZUhvdmVyaW5mbz1mLmNvZXJjZUhvdmVyaW5mbyxsLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHk9Zi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5LGwudmFsaWRhdGU9Zi52YWxpZGF0ZTt2YXIgaD10KCIuL2RhdGVzIik7bC5kYXRlVGltZTJtcz1oLmRhdGVUaW1lMm1zLGwuaXNEYXRlVGltZT1oLmlzRGF0ZVRpbWUsbC5tczJEYXRlVGltZT1oLm1zMkRhdGVUaW1lLGwubXMyRGF0ZVRpbWVMb2NhbD1oLm1zMkRhdGVUaW1lTG9jYWwsbC5jbGVhbkRhdGU9aC5jbGVhbkRhdGUsbC5pc0pTRGF0ZT1oLmlzSlNEYXRlLGwuZm9ybWF0RGF0ZT1oLmZvcm1hdERhdGUsbC5pbmNyZW1lbnRNb250aD1oLmluY3JlbWVudE1vbnRoLGwuZGF0ZVRpY2swPWguZGF0ZVRpY2swLGwuZGZsdFJhbmdlPWguZGZsdFJhbmdlLGwuZmluZEV4YWN0RGF0ZXM9aC5maW5kRXhhY3REYXRlcyxsLk1JTl9NUz1oLk1JTl9NUyxsLk1BWF9NUz1oLk1BWF9NUzt2YXIgcD10KCIuL3NlYXJjaCIpO2wuZmluZEJpbj1wLmZpbmRCaW4sbC5zb3J0ZXJBc2M9cC5zb3J0ZXJBc2MsbC5zb3J0ZXJEZXM9cC5zb3J0ZXJEZXMsbC5kaXN0aW5jdFZhbHM9cC5kaXN0aW5jdFZhbHMsbC5yb3VuZFVwPXAucm91bmRVcCxsLnNvcnQ9cC5zb3J0LGwuZmluZEluZGV4T2ZNaW49cC5maW5kSW5kZXhPZk1pbjt2YXIgZD10KCIuL3N0YXRzIik7bC5hZ2dOdW1zPWQuYWdnTnVtcyxsLmxlbj1kLmxlbixsLm1lYW49ZC5tZWFuLGwubWlkUmFuZ2U9ZC5taWRSYW5nZSxsLnZhcmlhbmNlPWQudmFyaWFuY2UsbC5zdGRldj1kLnN0ZGV2LGwuaW50ZXJwPWQuaW50ZXJwO3ZhciBnPXQoIi4vbWF0cml4Iik7bC5pbml0MmRBcnJheT1nLmluaXQyZEFycmF5LGwudHJhbnNwb3NlUmFnZ2VkPWcudHJhbnNwb3NlUmFnZ2VkLGwuZG90PWcuZG90LGwudHJhbnNsYXRpb25NYXRyaXg9Zy50cmFuc2xhdGlvbk1hdHJpeCxsLnJvdGF0aW9uTWF0cml4PWcucm90YXRpb25NYXRyaXgsbC5yb3RhdGlvblhZTWF0cml4PWcucm90YXRpb25YWU1hdHJpeCxsLmFwcGx5MkRUcmFuc2Zvcm09Zy5hcHBseTJEVHJhbnNmb3JtLGwuYXBwbHkyRFRyYW5zZm9ybTI9Zy5hcHBseTJEVHJhbnNmb3JtMjt2YXIgdj10KCIuL2FuZ2xlcyIpO2wuZGVnMnJhZD12LmRlZzJyYWQsbC5yYWQyZGVnPXYucmFkMmRlZyxsLmFuZ2xlRGVsdGE9di5hbmdsZURlbHRhLGwuYW5nbGVEaXN0PXYuYW5nbGVEaXN0LGwuaXNGdWxsQ2lyY2xlPXYuaXNGdWxsQ2lyY2xlLGwuaXNBbmdsZUluc2lkZVNlY3Rvcj12LmlzQW5nbGVJbnNpZGVTZWN0b3IsbC5pc1B0SW5zaWRlU2VjdG9yPXYuaXNQdEluc2lkZVNlY3RvcixsLnBhdGhBcmM9di5wYXRoQXJjLGwucGF0aFNlY3Rvcj12LnBhdGhTZWN0b3IsbC5wYXRoQW5udWx1cz12LnBhdGhBbm51bHVzO3ZhciBtPXQoIi4vYW5jaG9yX3V0aWxzIik7bC5pc0xlZnRBbmNob3I9bS5pc0xlZnRBbmNob3IsbC5pc0NlbnRlckFuY2hvcj1tLmlzQ2VudGVyQW5jaG9yLGwuaXNSaWdodEFuY2hvcj1tLmlzUmlnaHRBbmNob3IsbC5pc1RvcEFuY2hvcj1tLmlzVG9wQW5jaG9yLGwuaXNNaWRkbGVBbmNob3I9bS5pc01pZGRsZUFuY2hvcixsLmlzQm90dG9tQW5jaG9yPW0uaXNCb3R0b21BbmNob3I7dmFyIHk9dCgiLi9nZW9tZXRyeTJkIik7bC5zZWdtZW50c0ludGVyc2VjdD15LnNlZ21lbnRzSW50ZXJzZWN0LGwuc2VnbWVudERpc3RhbmNlPXkuc2VnbWVudERpc3RhbmNlLGwuZ2V0VGV4dExvY2F0aW9uPXkuZ2V0VGV4dExvY2F0aW9uLGwuY2xlYXJMb2NhdGlvbkNhY2hlPXkuY2xlYXJMb2NhdGlvbkNhY2hlLGwuZ2V0VmlzaWJsZVNlZ21lbnQ9eS5nZXRWaXNpYmxlU2VnbWVudCxsLmZpbmRQb2ludE9uUGF0aD15LmZpbmRQb2ludE9uUGF0aDt2YXIgeD10KCIuL2V4dGVuZCIpO2wuZXh0ZW5kRmxhdD14LmV4dGVuZEZsYXQsbC5leHRlbmREZWVwPXguZXh0ZW5kRGVlcCxsLmV4dGVuZERlZXBBbGw9eC5leHRlbmREZWVwQWxsLGwuZXh0ZW5kRGVlcE5vQXJyYXlzPXguZXh0ZW5kRGVlcE5vQXJyYXlzO3ZhciBiPXQoIi4vbG9nZ2VycyIpO2wubG9nPWIubG9nLGwud2Fybj1iLndhcm4sbC5lcnJvcj1iLmVycm9yO3ZhciBfPXQoIi4vcmVnZXgiKTtsLmNvdW50ZXJSZWdleD1fLmNvdW50ZXI7dmFyIHc9dCgiLi90aHJvdHRsZSIpO2Z1bmN0aW9uIGsodCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpZm9yKHZhciBuPXRbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWVbbltpXV09K3I7cmV0dXJuIGV9bC50aHJvdHRsZT13LnRocm90dGxlLGwudGhyb3R0bGVEb25lPXcuZG9uZSxsLmNsZWFyVGhyb3R0bGU9dy5jbGVhcixsLmdldEdyYXBoRGl2PXQoIi4vZ2V0X2dyYXBoX2RpdiIpLGwuY2xlYXJSZXNwb25zaXZlPXQoIi4vY2xlYXJfcmVzcG9uc2l2ZSIpLGwubWFrZVRyYWNlR3JvdXBzPXQoIi4vbWFrZV90cmFjZV9ncm91cHMiKSxsLl89dCgiLi9sb2NhbGl6ZSIpLGwubm90aWZpZXI9dCgiLi9ub3RpZmllciIpLGwuZmlsdGVyVW5pcXVlPXQoIi4vZmlsdGVyX3VuaXF1ZSIpLGwuZmlsdGVyVmlzaWJsZT10KCIuL2ZpbHRlcl92aXNpYmxlIiksbC5wdXNoVW5pcXVlPXQoIi4vcHVzaF91bmlxdWUiKSxsLmNsZWFuTnVtYmVyPXQoIi4vY2xlYW5fbnVtYmVyIiksbC5lbnN1cmVOdW1iZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/KHQ9TnVtYmVyKHQpKTwtb3x8dD5vP3M6aSh0KT9OdW1iZXIodCk6czpzfSxsLmlzSW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMCE9PWUmJnQ+PWUpJiYoaSh0KSYmdD49MCYmdCUxPT0wKX0sbC5ub29wPXQoIi4vbm9vcCIpLGwuaWRlbnRpdHk9dCgiLi9pZGVudGl0eSIpLGwucmVwZWF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXQ7cmV0dXJuIHJ9LGwuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLHIpKSxzPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLG4pKSxjPW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQoYyl9fSxsLnJhaXNlVG9Ub3A9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpfSxsLmNhbmNlbFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApfSxsLmNvbnN0cmFpbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cj9NYXRoLm1heChyLE1hdGgubWluKGUsdCkpOk1hdGgubWF4KGUsTWF0aC5taW4ocix0KSl9LGwuYkJveEludGVyc2VjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI9cnx8MCx0LmxlZnQ8PWUucmlnaHQrciYmZS5sZWZ0PD10LnJpZ2h0K3ImJnQudG9wPD1lLmJvdHRvbStyJiZlLnRvcDw9dC5ib3R0b20rcn0sbC5zaW1wbGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MDtvPGk7bysrKWFbb109ZSh0W29dLHIsbik7cmV0dXJuIGF9LGwucmFuZHN0cj1mdW5jdGlvbiB0KGUscixuLGkpe2lmKG58fChuPTE2KSx2b2lkIDA9PT1yJiYocj0yNCkscjw9MClyZXR1cm4iMCI7dmFyIGEsbyxzPU1hdGgubG9nKE1hdGgucG93KDIscikpL01hdGgubG9nKG4pLGM9IiI7Zm9yKGE9MjtzPT09MS8wO2EqPTIpcz1NYXRoLmxvZyhNYXRoLnBvdygyLHIvYSkpL01hdGgubG9nKG4pKmE7dmFyIHU9cy1NYXRoLmZsb29yKHMpO2ZvcihhPTA7YTxNYXRoLmZsb29yKHMpO2ErKyljPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpuKS50b1N0cmluZyhuKStjO3UmJihvPU1hdGgucG93KG4sdSksYz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbykudG9TdHJpbmcobikrYyk7dmFyIGY9cGFyc2VJbnQoYyxuKTtyZXR1cm4gZSYmZVtjXXx8ZiE9PTEvMCYmZj49TWF0aC5wb3coMixyKT9pPjEwPyhsLndhcm4oInJhbmRzdHIgZmFpbGVkIHVuaXF1ZW5lc3MiKSxjKTp0KGUscixuLChpfHwwKSsxKTpjfSxsLk9wdGlvbkNvbnRyb2w9ZnVuY3Rpb24odCxlKXt0fHwodD17fSksZXx8KGU9Im9wdCIpO3ZhciByPXtvcHRpb25MaXN0OltdLF9uZXdvcHRpb246ZnVuY3Rpb24obil7bltlXT10LHJbbi5uYW1lXT1uLHIub3B0aW9uTGlzdC5wdXNoKG4pfX07cmV0dXJuIHJbIl8iK2VdPXQscn0sbC5zbW9vdGg9ZnVuY3Rpb24odCxlKXtpZigoZT1NYXRoLnJvdW5kKGUpfHwwKTwyKXJldHVybiB0O3ZhciByLG4saSxhLG89dC5sZW5ndGgscz0yKm8sbD0yKmUtMSxjPW5ldyBBcnJheShsKSx1PW5ldyBBcnJheShvKTtmb3Iocj0wO3I8bDtyKyspY1tyXT0oMS1NYXRoLmNvcyhNYXRoLlBJKihyKzEpL2UpKS8oMiplKTtmb3Iocj0wO3I8bztyKyspe2ZvcihhPTAsbj0wO248bDtuKyspKGk9cituKzEtZSk8LW8/aS09cypNYXRoLnJvdW5kKGkvcyk6aT49cyYmKGktPXMqTWF0aC5mbG9vcihpL3MpKSxpPDA/aT0tMS1pOmk+PW8mJihpPXMtMS1pKSxhKz10W2ldKmNbbl07dVtyXT1hfXJldHVybiB1fSxsLnN5bmNPckFzeW5jPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKCl7cmV0dXJuIGwuc3luY09yQXN5bmModCxlLHIpfWZvcig7dC5sZW5ndGg7KWlmKChuPSgwLHQuc3BsaWNlKDAsMSlbMF0pKGUpKSYmbi50aGVuKXJldHVybiBuLnRoZW4oaSkudGhlbih2b2lkIDAsbC5wcm9taXNlRXJyb3IpO3JldHVybiByJiZyKGUpfSxsLnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LnN1YnN0cigtMSk/dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKTp0fSxsLm5vbmVPckFsbD1mdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG4saT0hMSxhPSEwO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspbnVsbCE9dFtyW25dXT9pPSEwOmE9ITE7aWYoaSYmIWEpZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxsLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSlmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGk9MDtpPG47aSsrKWVbaV1bcl09dFtpXX0sbC5maWxsQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7aWYobj1ufHxsLmlkZW50aXR5LGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSlmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyllW2ldW3JdPW4odFtpXSl9LGwuY2FzdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtuPW58fGwuaWRlbnRpdHk7dmFyIGk9bC5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiBsLmlzQXJyYXlPclR5cGVkQXJyYXkoaSk/QXJyYXkuaXNBcnJheShlKSYmbC5pc0FycmF5T3JUeXBlZEFycmF5KGlbZVswXV0pP24oaVtlWzBdXVtlWzFdXSk6bihpW2VdKTppfSxsLmV4dHJhY3RPcHRpb249ZnVuY3Rpb24odCxlLHIsbil7aWYociBpbiB0KXJldHVybiB0W3JdO3ZhciBpPWwubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQoKTtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT92b2lkIDA6aX0sbC50YWdTZWxlY3RlZD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuc2VsZWN0ZWRwb2ludHMsbz1lLl9pbmRleFRvUG9pbnRzO28mJihuPWsobykpO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3NdO2lmKGwuaXNJbmRleChjKSl7dmFyIHU9bj9uW2NdOmMsZj1yP3JbdV06dTt2b2lkIDAhPT0oaT1mKSYmaTx0Lmxlbmd0aCYmKHRbZl0uc2VsZWN0ZWQ9MSl9fX0sbC5zZWxJbmRpY2VzMnNlbFBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdGVkcG9pbnRzLHI9dC5faW5kZXhUb1BvaW50cztpZihyKXtmb3IodmFyIG49ayhyKSxpPVtdLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXTtpZihsLmlzSW5kZXgobykpe3ZhciBzPW5bb107bC5pc0luZGV4KHMpJiZpLnB1c2gocyl9fXJldHVybiBpfXJldHVybiBlfSxsLmdldFRhcmdldEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50YXJnZXQ7aWYoInN0cmluZyI9PXR5cGVvZiByJiZyKXt2YXIgbj1sLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuISFBcnJheS5pc0FycmF5KG4pJiZufXJldHVybiEhQXJyYXkuaXNBcnJheShyKSYmcn0sbC5taW5FeHRlbmQ9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTsib2JqZWN0IiE9dHlwZW9mIGUmJihlPXt9KTt2YXIgbixpLGEsbz1PYmplY3Qua2V5cyh0KTtmb3Iobj0wO248by5sZW5ndGg7bisrKWE9dFtpPW9bbl1dLCJfIiE9PWkuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgYSYmKCJtb2R1bGUiPT09aT9yW2ldPWE6QXJyYXkuaXNBcnJheShhKT9yW2ldPSJjb2xvcnNjYWxlIj09PWk/YS5zbGljZSgpOmEuc2xpY2UoMCwzKTpyW2ldPWEmJiJvYmplY3QiPT10eXBlb2YgYT9sLm1pbkV4dGVuZCh0W2ldLGVbaV0pOmEpO2ZvcihvPU9iamVjdC5rZXlzKGUpLG49MDtuPG8ubGVuZ3RoO24rKykib2JqZWN0Ij09dHlwZW9mKGE9ZVtpPW9bbl1dKSYmaSBpbiByJiYib2JqZWN0Ij09dHlwZW9mIHJbaV18fChyW2ldPWEpO3JldHVybiByfSxsLnRpdGxlQ2FzZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKX0sbC5jb250YWluc0FueT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKC0xIT09dC5pbmRleE9mKGVbcl0pKXJldHVybiEwO3JldHVybiExfSxsLmlzUGxvdERpdj1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KTtyZXR1cm4gZS5ub2RlKClpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLnNpemUoKSYmZS5jbGFzc2VkKCJqcy1wbG90bHktcGxvdCIpfSxsLnJlbW92ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodCl9LGwuYWRkU3R5bGVSdWxlPWZ1bmN0aW9uKHQsZSl7bC5hZGRSZWxhdGVkU3R5bGVSdWxlKCJnbG9iYWwiLHQsZSl9LGwuYWRkUmVsYXRlZFN0eWxlUnVsZT1mdW5jdGlvbih0LGUscil7dmFyIG49InBsb3RseS5qcy1zdHlsZS0iK3QsaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKTtpfHwoKGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSkuc2V0QXR0cmlidXRlKCJpZCIsbiksaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaSkpO3ZhciBhPWkuc2hlZXQ7YS5pbnNlcnRSdWxlP2EuaW5zZXJ0UnVsZShlKyJ7IityKyJ9IiwwKTphLmFkZFJ1bGU/YS5hZGRSdWxlKGUsciwwKTpsLndhcm4oImFkZFN0eWxlUnVsZSBmYWlsZWQiKX0sbC5kZWxldGVSZWxhdGVkU3R5bGVSdWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSJwbG90bHkuanMtc3R5bGUtIit0LHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7ciYmbC5yZW1vdmVFbGVtZW50KHIpfSxsLmlzSUU9ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYn0sbC5pc0QzU2VsZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jbGFzc2VkfSxsLmVuc3VyZVNpbmdsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlKyhyPyIuIityOiIiKSk7aWYoaS5zaXplKCkpcmV0dXJuIGk7dmFyIGE9dC5hcHBlbmQoZSk7cmV0dXJuIHImJmEuY2xhc3NlZChyLCEwKSxuJiZhLmNhbGwobiksYX0sbC5lbnN1cmVTaW5nbGVCeUlkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0KGUrIiMiK3IpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpLmF0dHIoImlkIixyKTtyZXR1cm4gbiYmYS5jYWxsKG4pLGF9LGwub2JqZWN0RnJvbVBhdGg9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnNwbGl0KCIuIiksaT1yPXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW51bGwsbD1uW2FdLm1hdGNoKC8oLiopXFsoWzAtOV0rKVxdLyk7bD8obz1sWzFdLHM9bFsyXSxyPXJbb109W10sYT09PW4ubGVuZ3RoLTE/cltzXT1lOnJbc109e30scj1yW3NdKTooYT09PW4ubGVuZ3RoLTE/cltvXT1lOnJbb109e30scj1yW29dKX1yZXR1cm4gaX07dmFyIFQ9L14oW15cW1wuXSspXC4oLispPy8sQT0vXihbXlwuXSspXFsoWzAtOV0rKVxdKFwuKT8oLispPy87bC5leHBhbmRPYmplY3RQYXRocz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scztpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpKWZvcihyIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKChlPXIubWF0Y2goVCkpPyhpPXRbcl0sbj1lWzFdLGRlbGV0ZSB0W3JdLHRbbl09bC5leHRlbmREZWVwTm9BcnJheXModFtuXXx8e30sbC5vYmplY3RGcm9tUGF0aChyLGwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpW25dKSk6KGU9ci5tYXRjaChBKSk/KGk9dFtyXSxuPWVbMV0sYT1wYXJzZUludChlWzJdKSxkZWxldGUgdFtyXSx0W25dPXRbbl18fFtdLCIuIj09PWVbM10/KHM9ZVs0XSxvPXRbbl1bYV09dFtuXVthXXx8e30sbC5leHRlbmREZWVwTm9BcnJheXMobyxsLm9iamVjdEZyb21QYXRoKHMsbC5leHBhbmRPYmplY3RQYXRocyhpKSkpKTp0W25dW2FdPWwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpOnRbcl09bC5leHBhbmRPYmplY3RQYXRocyh0W3JdKSk7cmV0dXJuIHR9LGwubnVtU2VwYXJhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHJ8fChyPSExKSwic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNlcGFyYXRvciBzdHJpbmcgcmVxdWlyZWQgZm9yIGZvcm1hdHRpbmchIik7Im51bWJlciI9PXR5cGVvZiB0JiYodD1TdHJpbmcodCkpO3ZhciBuPS8oXGQrKShcZHszfSkvLGk9ZS5jaGFyQXQoMCksYT1lLmNoYXJBdCgxKSxvPXQuc3BsaXQoIi4iKSxzPW9bMF0sbD1vLmxlbmd0aD4xP2krb1sxXToiIjtpZihhJiYoby5sZW5ndGg+MXx8cy5sZW5ndGg+NHx8cikpZm9yKDtuLnRlc3Qocyk7KXM9cy5yZXBsYWNlKG4sIiQxIithKyIkMiIpO3JldHVybiBzK2x9LGwuVEVNUExBVEVfU1RSSU5HX1JFR0VYPS8leyhbXlxzJXt9Ol0qKSg6W159XSopP30vZzt2YXIgTT0vXlx3KiQvO2wudGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyZXR1cm4gdC5yZXBsYWNlKGwuVEVNUExBVEVfU1RSSU5HX1JFR0VYLGZ1bmN0aW9uKHQsbil7cmV0dXJuIE0udGVzdChuKT9lW25dfHwiIjoocltuXT1yW25dfHxsLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0LHJbbl0oKXx8IiIpfSl9O3ZhciBTPS9eOi8sRT0wO2wuaG92ZXJ0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbih0LGUscil7dmFyIGk9YXJndW1lbnRzLGE9e307cmV0dXJuIHQucmVwbGFjZShsLlRFTVBMQVRFX1NUUklOR19SRUdFWCxmdW5jdGlvbih0LG8scyl7dmFyIGMsdSxmO2ZvcihmPTM7ZjxpLmxlbmd0aDtmKyspe2lmKChjPWlbZl0pLmhhc093blByb3BlcnR5KG8pKXt1PWNbb107YnJlYWt9aWYoTS50ZXN0KG8pfHwodT1hW29dfHxsLm5lc3RlZFByb3BlcnR5KGMsbykuZ2V0KCkpJiYoYVtvXT11KSx2b2lkIDAhPT11KWJyZWFrfSh2b2lkIDA9PT11JiYoRTwxMCYmKGwud2FybigiVmFyaWFibGUgJyIrbysiJyBpbiBob3ZlcnRlbXBsYXRlIGNvdWxkIG5vdCBiZSBmb3VuZCEiKSx1PXQpLDEwPT09RSYmbC53YXJuKCJUb28gbWFueSBob3ZlcnRlbXBsYXRlIHdhcm5pbmdzIC0gYWRkaXRpb25hbCB3YXJuaW5ncyB3aWxsIGJlIHN1cHByZXNzZWQiKSxFKyspLHMpP3U9KHI/ci5udW1iZXJGb3JtYXQ6bi5mb3JtYXQpKHMucmVwbGFjZShTLCIiKSkodSk6ZS5oYXNPd25Qcm9wZXJ0eShvKyJMYWJlbCIpJiYodT1lW28rIkxhYmVsIl0pO3JldHVybiB1fSl9O2wuc3VicGxvdFNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpKzEsbj0wLGk9MCxhPTA7YTxyO2ErKyl7dmFyIG89dC5jaGFyQ29kZUF0KGEpfHwwLHM9ZS5jaGFyQ29kZUF0KGEpfHwwLGw9bz49NDgmJm88PTU3LGM9cz49NDgmJnM8PTU3O2lmKGwmJihuPTEwKm4rby00OCksYyYmKGk9MTAqaStzLTQ4KSwhbHx8IWMpe2lmKG4hPT1pKXJldHVybiBuLWk7aWYobyE9PXMpcmV0dXJuIG8tc319cmV0dXJuIGktbn07dmFyIEM9MmU5O2wuc2VlZFBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe0M9MmU5fSxsLnBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe3ZhciB0PUM7cmV0dXJuIEM9KDY5MDY5KkMrMSklNDI5NDk2NzI5NixNYXRoLmFicyhDLXQpPDQyOTQ5NjcyOT9sLnBzZXVkb1JhbmRvbSgpOkMvNDI5NDk2NzI5Nn19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuL2FuY2hvcl91dGlscyI6NjgxLCIuL2FuZ2xlcyI6NjgyLCIuL2FycmF5Ijo2ODMsIi4vY2xlYW5fbnVtYmVyIjo2ODQsIi4vY2xlYXJfcmVzcG9uc2l2ZSI6Njg2LCIuL2NvZXJjZSI6Njg3LCIuL2RhdGVzIjo2ODgsIi4vZXh0ZW5kIjo2OTAsIi4vZmlsdGVyX3VuaXF1ZSI6NjkxLCIuL2ZpbHRlcl92aXNpYmxlIjo2OTIsIi4vZ2VvbWV0cnkyZCI6Njk1LCIuL2dldF9ncmFwaF9kaXYiOjY5NiwiLi9pZGVudGl0eSI6Njk5LCIuL2lzX3BsYWluX29iamVjdCI6NzAxLCIuL2tleWVkX2NvbnRhaW5lciI6NzAyLCIuL2xvY2FsaXplIjo3MDMsIi4vbG9nZ2VycyI6NzA0LCIuL21ha2VfdHJhY2VfZ3JvdXBzIjo3MDUsIi4vbWF0cml4Ijo3MDYsIi4vbW9kIjo3MDcsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3MDgsIi4vbm9vcCI6NzA5LCIuL25vdGlmaWVyIjo3MTAsIi4vcHVzaF91bmlxdWUiOjcxNCwiLi9yZWdleCI6NzE2LCIuL3JlbGF0aXZlX2F0dHIiOjcxNywiLi9yZWxpbmtfcHJpdmF0ZSI6NzE4LCIuL3NlYXJjaCI6NzE5LCIuL3N0YXRzIjo3MjIsIi4vdGhyb3R0bGUiOjcyNSwiLi90b19sb2dfcmFuZ2UiOjcyNixkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw3MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucz8iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KToiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09T2JqZWN0LnByb3RvdHlwZX19LHt9XSw3MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxpPS9eXHcqJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbDtyPXJ8fCJuYW1lIixhPWF8fCJ2YWx1ZSI7dmFyIGM9e307ZSYmZS5sZW5ndGg/KGw9bih0LGUpLHM9bC5nZXQoKSk6cz10LGU9ZXx8IiI7dmFyIHU9e307aWYocylmb3Iobz0wO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV09bzt2YXIgZj1pLnRlc3QoYSksaD17c2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9bnVsbD09PWU/NDowO2lmKCFzKXtpZighbHx8ND09PWkpcmV0dXJuO3M9W10sbC5zZXQocyl9dmFyIG89dVt0XTtpZih2b2lkIDA9PT1vKXtpZig0PT09aSlyZXR1cm47aXw9MyxvPXMubGVuZ3RoLHVbdF09b31lbHNlIGUhPT0oZj9zW29dW2FdOm4oc1tvXSxhKS5nZXQoKSkmJihpfD0yKTt2YXIgcD1zW29dPXNbb118fHt9O3JldHVybiBwW3JdPXQsZj9wW2FdPWU6bihwLGEpLnNldChlKSxudWxsIT09ZSYmKGkmPS01KSxjW29dPWNbb118aSxofSxnZXQ6ZnVuY3Rpb24odCl7aWYocyl7dmFyIGU9dVt0XTtyZXR1cm4gdm9pZCAwPT09ZT92b2lkIDA6Zj9zW2VdW2FdOm4oc1tlXSxhKS5nZXQoKX19LHJlbmFtZTpmdW5jdGlvbih0LGUpe3ZhciBuPXVbdF07cmV0dXJuIHZvaWQgMD09PW4/aDooY1tuXT0xfGNbbl0sdVtlXT1uLGRlbGV0ZSB1W3RdLHNbbl1bcl09ZSxoKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXVbdF07aWYodm9pZCAwPT09ZSlyZXR1cm4gaDt2YXIgaT1zW2VdO2lmKE9iamVjdC5rZXlzKGkpLmxlbmd0aD4yKXJldHVybiBjW2VdPTJ8Y1tlXSxoLnNldCh0LG51bGwpO2lmKGYpe2ZvcihvPWU7bzxzLmxlbmd0aDtvKyspY1tvXT0zfGNbb107Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyl1W3Nbb11bcl1dLS07cy5zcGxpY2UoZSwxKSxkZWxldGUgdVt0XX1lbHNlIG4oaSxhKS5zZXQobnVsbCksY1tlXT02fGNbZV07cmV0dXJuIGh9LGNvbnN0cnVjdFVwZGF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdCxpLG89e30sbD1PYmplY3Qua2V5cyhjKSx1PTA7dTxsLmxlbmd0aDt1KyspaT1sW3VdLHQ9ZSsiWyIraSsiXSIsc1tpXT8oMSZjW2ldJiYob1t0KyIuIityXT1zW2ldW3JdKSwyJmNbaV0mJihvW3QrIi4iK2FdPWY/NCZjW2ldP251bGw6c1tpXVthXTo0JmNbaV0/bnVsbDpuKHNbaV0sYSkuZ2V0KCkpKTpvW3RdPW51bGw7cmV0dXJuIG99fTtyZXR1cm4gaH19LHsiLi9uZXN0ZWRfcHJvcGVydHkiOjcwOH1dLDcwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9jb250ZXh0LmxvY2FsZSxpPTA7aTwyO2krKyl7Zm9yKHZhciBhPXQuX2NvbnRleHQubG9jYWxlcyxvPTA7bzwyO28rKyl7dmFyIHM9KGFbcl18fHt9KS5kaWN0aW9uYXJ5O2lmKHMpe3ZhciBsPXNbZV07aWYobClyZXR1cm4gbH1hPW4ubG9jYWxlUmVnaXN0cnl9dmFyIGM9ci5zcGxpdCgiLSIpWzBdO2lmKGM9PT1yKWJyZWFrO3I9Y31yZXR1cm4gZX19LHsiLi4vcmVnaXN0cnkiOjgyOX1dLDcwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcsaT1lLmV4cG9ydHM9e307ZnVuY3Rpb24gYSh0LGUpe2lmKHQmJnQuYXBwbHkpdHJ5e3JldHVybiB2b2lkIHQuYXBwbHkoY29uc29sZSxlKX1jYXRjaCh0KXt9Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdHJ5e3QoZVtyXSl9Y2F0Y2godCl7Y29uc29sZS5sb2coZVtyXSl9fWkubG9nPWZ1bmN0aW9uKCl7aWYobi5sb2dnaW5nPjEpe2Zvcih2YXIgdD1bIkxPRzoiXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKTthKGNvbnNvbGUudHJhY2V8fGNvbnNvbGUubG9nLHQpfX0saS53YXJuPWZ1bmN0aW9uKCl7aWYobi5sb2dnaW5nPjApe2Zvcih2YXIgdD1bIldBUk46Il0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7YShjb25zb2xlLnRyYWNlfHxjb25zb2xlLmxvZyx0KX19LGkuZXJyb3I9ZnVuY3Rpb24oKXtpZihuLmxvZ2dpbmc+MCl7Zm9yKHZhciB0PVsiRVJST1I6Il0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7YShjb25zb2xlLmVycm9yLHQpfX19LHsiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciOjczNn1dLDcwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuc2VsZWN0QWxsKCJnLiIrci5yZXBsYWNlKC9ccy9nLCIuIikpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KTtyZXR1cm4gbi5leGl0KCkucmVtb3ZlKCksbi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixyKSxuLm9yZGVyKCksbn19LHt9XSw3MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5pbml0MmRBcnJheT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDtuKyspcltuXT1uZXcgQXJyYXkoZSk7cmV0dXJuIHJ9LHIudHJhbnNwb3NlUmFnZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0wLGk9dC5sZW5ndGg7Zm9yKGU9MDtlPGk7ZSsrKW49TWF0aC5tYXgobix0W2VdLmxlbmd0aCk7dmFyIGE9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuO2UrKylmb3IoYVtlXT1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspYVtlXVtyXT10W3JdW2VdO3JldHVybiBhfSxyLmRvdD1mdW5jdGlvbih0LGUpe2lmKCF0Lmxlbmd0aHx8IWUubGVuZ3RofHx0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiBudWxsO3ZhciBuLGksYT10Lmxlbmd0aDtpZih0WzBdLmxlbmd0aClmb3Iobj1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspbltpXT1yLmRvdCh0W2ldLGUpO2Vsc2UgaWYoZVswXS5sZW5ndGgpe3ZhciBvPXIudHJhbnNwb3NlUmFnZ2VkKGUpO2ZvcihuPW5ldyBBcnJheShvLmxlbmd0aCksaT0wO2k8by5sZW5ndGg7aSsrKW5baV09ci5kb3QodCxvW2ldKX1lbHNlIGZvcihuPTAsaT0wO2k8YTtpKyspbis9dFtpXSplW2ldO3JldHVybiBufSxyLnRyYW5zbGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW1sxLDAsdF0sWzAsMSxlXSxbMCwwLDFdXX0sci5yb3RhdGlvbk1hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10Kk1hdGguUEkvMTgwO3JldHVybltbTWF0aC5jb3MoZSksLU1hdGguc2luKGUpLDBdLFtNYXRoLnNpbihlKSxNYXRoLmNvcyhlKSwwXSxbMCwwLDFdXX0sci5yb3RhdGlvblhZTWF0cml4PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5kb3Qoci5kb3Qoci50cmFuc2xhdGlvbk1hdHJpeChlLG4pLHIucm90YXRpb25NYXRyaXgodCkpLHIudHJhbnNsYXRpb25NYXRyaXgoLWUsLW4pKX0sci5hcHBseTJEVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50czszPT09ZS5sZW5ndGgmJihlPWVbMF0pO3ZhciBuPTE9PT1hcmd1bWVudHMubGVuZ3RoP2VbMF06W2VbMF0sZVsxXV07cmV0dXJuIHIuZG90KHQsW25bMF0sblsxXSwxXSkuc2xpY2UoMCwyKX19LHIuYXBwbHkyRFRyYW5zZm9ybTI9ZnVuY3Rpb24odCl7dmFyIGU9ci5hcHBseTJEVHJhbnNmb3JtKHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0LnNsaWNlKDAsMikpLmNvbmNhdChlKHQuc2xpY2UoMiw0KSkpfX19LHt9XSw3MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10JWU7cmV0dXJuIHI8MD9yK2U6cn0sbW9kSGFsZjpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0KT5lLzI/dC1NYXRoLnJvdW5kKHQvZSkqZTp0fX19LHt9XSw3MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKG4oZSkpZT1TdHJpbmcoZSk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGV8fCJbLTFdIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Zvcih2YXIgcixhLG8sbD0wLGM9ZS5zcGxpdCgiLiIpO2w8Yy5sZW5ndGg7KXtpZihyPVN0cmluZyhjW2xdKS5tYXRjaCgvXihbXlxbXF1dKikoKFxbXC0/WzAtOV0qXF0pKykkLykpe2lmKHJbMV0pY1tsXT1yWzFdO2Vsc2V7aWYoMCE9PWwpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7Yy5zcGxpY2UoMCwxKX1mb3IoYT1yWzJdLnN1YnN0cigxLHJbMl0ubGVuZ3RoLTIpLnNwbGl0KCJdWyIpLG89MDtvPGEubGVuZ3RoO28rKylsKyssYy5zcGxpY2UobCwwLE51bWJlcihhW29dKSl9bCsrfXJldHVybiJvYmplY3QiIT10eXBlb2YgdD9mdW5jdGlvbih0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93ImJhZCBjb250YWluZXIifSxnZXQ6ZnVuY3Rpb24oKXt9LGFzdHI6ZSxwYXJ0czpyLG9iajp0fX0odCxlLGMpOntzZXQ6cyh0LGMsZSksZ2V0OmZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbixhLG8scyxsLGM9ZTtmb3Iocz0wO3M8ci5sZW5ndGgtMTtzKyspe2lmKC0xPT09KG49cltzXSkpe2ZvcihhPSEwLG89W10sbD0wO2w8Yy5sZW5ndGg7bCsrKW9bbF09dChjW2xdLHIuc2xpY2UocysxKSkoKSxvW2xdIT09b1swXSYmKGE9ITEpO3JldHVybiBhP29bMF06b31pZigibnVtYmVyIj09dHlwZW9mIG4mJiFpKGMpKXJldHVybjtpZigib2JqZWN0IiE9dHlwZW9mKGM9Y1tuXSl8fG51bGw9PT1jKXJldHVybn1pZigib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiZudWxsIT09KG89Y1tyW3NdXSkpcmV0dXJuIG99fSh0LGMpLGFzdHI6ZSxwYXJ0czpjLG9iajp0fX07dmFyIGE9LyhefFwuKWFyZ3NcWy87ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB2b2lkIDA9PT10fHxudWxsPT09dCYmIWUubWF0Y2goYSl9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBhLHMsZj10LGg9IiIscD1bW3QsaF1dLGQ9byhuLHIpO2ZvcihzPTA7czxlLmxlbmd0aC0xO3MrKyl7aWYoIm51bWJlciI9PXR5cGVvZihhPWVbc10pJiYhaShmKSl0aHJvdyJhcnJheSBpbmRleCBidXQgY29udGFpbmVyIGlzIG5vdCBhbiBhcnJheSI7aWYoLTE9PT1hKXtpZihkPSFjKGYsZS5zbGljZShzKzEpLG4scikpYnJlYWs7cmV0dXJufWlmKCF1KGYsYSxlW3MrMV0sZCkpYnJlYWs7aWYoIm9iamVjdCIhPXR5cGVvZihmPWZbYV0pfHxudWxsPT09Zil0aHJvdyJjb250YWluZXIgaXMgbm90IGFuIG9iamVjdCI7aD1sKGgsYSkscC5wdXNoKFtmLGhdKX1pZihkKXtpZihzPT09ZS5sZW5ndGgtMSYmKGRlbGV0ZSBmW2Vbc11dLEFycmF5LmlzQXJyYXkoZikmJitlW3NdPT1mLmxlbmd0aC0xKSlmb3IoO2YubGVuZ3RoJiZ2b2lkIDA9PT1mW2YubGVuZ3RoLTFdOylmLnBvcCgpfWVsc2UgZltlW3NdXT1ufX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZTtyZXR1cm4gbihlKT9yPSJbIitlKyJdIjp0JiYocj0iLiIrZSksdCtyfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGEsbD1pKHIpLGM9ITAsZj1yLGg9bi5yZXBsYWNlKCItMSIsMCkscD0hbCYmbyhyLGgpLGQ9ZVswXTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWg9bi5yZXBsYWNlKCItMSIsYSksbCYmKHA9byhmPXJbYSVyLmxlbmd0aF0saCkpLHAmJihjPSExKSx1KHQsYSxkLHApJiZzKHRbYV0sZSxuLnJlcGxhY2UoIi0xIixhKSkoZik7cmV0dXJuIGN9ZnVuY3Rpb24gdSh0LGUscixuKXtpZih2b2lkIDA9PT10W2VdKXtpZihuKXJldHVybiExO3RbZV09Im51bWJlciI9PXR5cGVvZiByP1tdOnt9fXJldHVybiEwfX0seyIuL2FycmF5Ijo2ODMsImZhc3QtaXNudW1lcmljIjoyMjF9XSw3MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0se31dLDcxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPVtdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIHI9MWUzO2koZSk/cj1lOiJsb25nIj09PWUmJihyPTNlMyk7dmFyIG89bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCksby5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXBwZW5kKCJidXR0b24iKS5jbGFzc2VkKCJub3RpZmllci1jbG9zZSIsITApLmh0bWwoIiZ0aW1lczsiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuY2FsbChzKX0pO2Zvcih2YXIgaT1lLmFwcGVuZCgicCIpLGE9dC5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxvPTA7bzxhLmxlbmd0aDtvKyspbyYmaS5hcHBlbmQoImJyIiksaS5hcHBlbmQoInNwYW4iKS50ZXh0KGFbb10pO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShyKS5jYWxsKHMpfSl9ZnVuY3Rpb24gcyh0KXt0LmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goImVuZCIsZnVuY3Rpb24odCl7dmFyIGU9YS5pbmRleE9mKHQpOy0xIT09ZSYmYS5zcGxpY2UoZSwxKSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfX19LHtkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw3MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zZXRjdXJzb3IiKSxpPSJkYXRhLXNhdmVkY3Vyc29yIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHIoaSk7aWYoZSl7aWYoIXIpe2Zvcih2YXIgYT0odC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107MD09PXMuaW5kZXhPZigiY3Vyc29yLSIpJiZ0LmF0dHIoaSxzLnN1YnN0cig3KSkuY2xhc3NlZChzLCExKX10LmF0dHIoaSl8fHQuYXR0cihpLCIhISIpfW4odCxlKX1lbHNlIHImJih0LmF0dHIoaSxudWxsKSwiISEiPT09cj9uKHQpOm4odCxyKSl9fSx7Ii4vc2V0Y3Vyc29yIjo3MjB9XSw3MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tYXRyaXgiKS5kb3QsaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9ZS5leHBvcnRzPXt9O2EudGVzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49clswXVswXSxhPW4sbz1yWzBdWzFdLHM9bztmb3Ioci5wdXNoKHJbMF0pLGU9MTtlPHIubGVuZ3RoO2UrKyluPU1hdGgubWluKG4scltlXVswXSksYT1NYXRoLm1heChhLHJbZV1bMF0pLG89TWF0aC5taW4obyxyW2VdWzFdKSxzPU1hdGgubWF4KHMscltlXVsxXSk7dmFyIGwsYz0hMTs1PT09ci5sZW5ndGgmJihyWzBdWzBdPT09clsxXVswXT9yWzJdWzBdPT09clszXVswXSYmclswXVsxXT09PXJbM11bMV0mJnJbMV1bMV09PT1yWzJdWzFdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09clswXVswXX0pOnJbMF1bMV09PT1yWzFdWzFdJiZyWzJdWzFdPT09clszXVsxXSYmclswXVswXT09PXJbM11bMF0mJnJbMV1bMF09PT1yWzJdWzBdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzFdPT09clswXVsxXX0pKTt2YXIgdT0hMCxmPXJbMF07Zm9yKGU9MTtlPHIubGVuZ3RoO2UrKylpZihmWzBdIT09cltlXVswXXx8ZlsxXSE9PXJbZV1bMV0pe3U9ITE7YnJlYWt9cmV0dXJue3htaW46bix4bWF4OmEseW1pbjpvLHltYXg6cyxwdHM6cixjb250YWluczpjP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxjPXRbMV07cmV0dXJuIShyPT09aXx8cjxufHxyPmF8fGM9PT1pfHxjPG98fGM+c3x8ZSYmbCh0KSl9OmZ1bmN0aW9uKHQsZSl7dmFyIGw9dFswXSxjPXRbMV07aWYobD09PWl8fGw8bnx8bD5hfHxjPT09aXx8YzxvfHxjPnMpcmV0dXJuITE7dmFyIHUsZixoLHAsZCxnPXIubGVuZ3RoLHY9clswXVswXSxtPXJbMF1bMV0seT0wO2Zvcih1PTE7dTxnO3UrKylpZihmPXYsaD1tLHY9clt1XVswXSxtPXJbdV1bMV0sIShsPChwPU1hdGgubWluKGYsdikpfHxsPk1hdGgubWF4KGYsdil8fGM+TWF0aC5tYXgoaCxtKSkpaWYoYzxNYXRoLm1pbihoLG0pKWwhPT1wJiZ5Kys7ZWxzZXtpZihjPT09KGQ9dj09PWY/YzpoKyhsLWYpKihtLWgpLyh2LWYpKSlyZXR1cm4gMSE9PXV8fCFlO2M8PWQmJmwhPT1wJiZ5Kyt9cmV0dXJuIHklMj09MX0saXNSZWN0OmMsZGVnZW5lcmF0ZTp1fX07dmFyIG89YS5pc1NlZ21lbnRCZW50PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsPXRbZV0sYz1bdFtyXVswXS1sWzBdLHRbcl1bMV0tbFsxXV0sdT1uKGMsYyksZj1NYXRoLnNxcnQodSksaD1bLWNbMV0vZixjWzBdL2ZdO2ZvcihhPWUrMTthPHI7YSsrKWlmKG89W3RbYV1bMF0tbFswXSx0W2FdWzFdLWxbMV1dLChzPW4obyxjKSk8MHx8cz51fHxNYXRoLmFicyhuKG8saCkpPmkpcmV0dXJuITA7cmV0dXJuITF9O2EuZmlsdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W3RbMF1dLG49MCxpPTA7ZnVuY3Rpb24gYShhKXt0LnB1c2goYSk7dmFyIHM9ci5sZW5ndGgsbD1uO3Iuc3BsaWNlKGkrMSk7Zm9yKHZhciBjPWwrMTtjPHQubGVuZ3RoO2MrKykoYz09PXQubGVuZ3RoLTF8fG8odCxsLGMrMSxlKSkmJihyLnB1c2godFtjXSksci5sZW5ndGg8cy0yJiYobj1jLGk9ci5sZW5ndGgtMSksbD1jKX10Lmxlbmd0aD4xJiZhKHQucG9wKCkpO3JldHVybnthZGRQdDphLHJhdzp0LGZpbHRlcmVkOnJ9fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4vbWF0cml4Ijo3MDZ9XSw3MTM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2hvd19ub193ZWJnbF9tc2ciKSxpPXQoInJlZ2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ITA7cmV0dXJuIGEuX2dsY2FudmFzLmVhY2goZnVuY3Rpb24obil7aWYoIW4ucmVnbCYmKCFuLnBpY2t8fGEuX2hhcygicGFyY29vcmRzIikpKXt0cnl7bi5yZWdsPWkoe2NhbnZhczp0aGlzLGF0dHJpYnV0ZXM6e2FudGlhbGlhczohbi5waWNrLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMH0scGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW98fHIuZGV2aWNlUGl4ZWxSYXRpbyxleHRlbnNpb25zOmV8fFtdfSl9Y2F0Y2godCl7bz0hMX1vJiZ0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZ1bmN0aW9uKGUpe3QmJnQuZW1pdCYmdC5lbWl0KCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdCIse2V2ZW50OmUsbGF5ZXI6bi5rZXl9KX0sITEpfX0pLG98fG4oe2NvbnRhaW5lcjphLl9nbGNvbnRhaW5lci5ub2RlKCl9KSxvfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL3Nob3dfbm9fd2ViZ2xfbXNnIjo3MjEscmVnbDo0ODZ9XSw3MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cCl7Zm9yKHZhciByPWUudG9TdHJpbmcoKSxuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXWluc3RhbmNlb2YgUmVnRXhwJiZ0W25dLnRvU3RyaW5nKCk9PT1yKXJldHVybiB0O3QucHVzaChlKX1lbHNlIWUmJjAhPT1lfHwtMSE9PXQuaW5kZXhPZihlKXx8dC5wdXNoKGUpO3JldHVybiB0fX0se31dLDcxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZzt2YXIgYT17YWRkOmZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG8sczt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHM9dC51bmRvUXVldWUuaW5kZXgsdC5hdXRvcGxheT90LnVuZG9RdWV1ZS5pblNlcXVlbmNlfHwodC5hdXRvcGxheT0hMSk6KCF0LnVuZG9RdWV1ZS5zZXF1ZW5jZXx8dC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT8obz17dW5kbzp7Y2FsbHM6W10sYXJnczpbXX0scmVkbzp7Y2FsbHM6W10sYXJnczpbXX19LHQudW5kb1F1ZXVlLnF1ZXVlLnNwbGljZShzLHQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aC1zLG8pLHQudW5kb1F1ZXVlLmluZGV4Kz0xKTpvPXQudW5kb1F1ZXVlLnF1ZXVlW3MtMV0sdC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT0hMSxvJiYoby51bmRvLmNhbGxzLnVuc2hpZnQoZSksby51bmRvLmFyZ3MudW5zaGlmdChyKSxvLnJlZG8uY2FsbHMucHVzaChuKSxvLnJlZG8uYXJncy5wdXNoKGEpKSx0LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGg+aS5xdWV1ZUxlbmd0aCYmKHQudW5kb1F1ZXVlLnF1ZXVlLnNoaWZ0KCksdC51bmRvUXVldWUuaW5kZXgtLSkpfSxzdGFydFNlcXVlbmNlOmZ1bmN0aW9uKHQpe3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0sdC51bmRvUXVldWUuc2VxdWVuY2U9ITAsdC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT0hMH0sc3RvcFNlcXVlbmNlOmZ1bmN0aW9uKHQpe3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0sdC51bmRvUXVldWUuc2VxdWVuY2U9ITEsdC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT0hMX0sdW5kbzpmdW5jdGlvbih0KXt2YXIgZSxyO2lmKHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXQuZnJhbWV3b3JrLnVuZG8oKTtlbHNlIGlmKCEodm9pZCAwPT09dC51bmRvUXVldWV8fGlzTmFOKHQudW5kb1F1ZXVlLmluZGV4KXx8dC51bmRvUXVldWUuaW5kZXg8PTApKXtmb3IodC51bmRvUXVldWUuaW5kZXgtLSxlPXQudW5kb1F1ZXVlLnF1ZXVlW3QudW5kb1F1ZXVlLmluZGV4XSx0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPGUudW5kby5jYWxscy5sZW5ndGg7cisrKWEucGxvdERvKHQsZS51bmRvLmNhbGxzW3JdLGUudW5kby5hcmdzW3JdKTt0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLHQuYXV0b3BsYXk9ITF9fSxyZWRvOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYodC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXIpdC5mcmFtZXdvcmsucmVkbygpO2Vsc2UgaWYoISh2b2lkIDA9PT10LnVuZG9RdWV1ZXx8aXNOYU4odC51bmRvUXVldWUuaW5kZXgpfHx0LnVuZG9RdWV1ZS5pbmRleD49dC51bmRvUXVldWUucXVldWUubGVuZ3RoKSl7Zm9yKGU9dC51bmRvUXVldWUucXVldWVbdC51bmRvUXVldWUuaW5kZXhdLHQudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITAscj0wO3I8ZS5yZWRvLmNhbGxzLmxlbmd0aDtyKyspYS5wbG90RG8odCxlLnJlZG8uY2FsbHNbcl0sZS5yZWRvLmFyZ3Nbcl0pO3QudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITEsdC5hdXRvcGxheT0hMSx0LnVuZG9RdWV1ZS5pbmRleCsrfX19O2EucGxvdERvPWZ1bmN0aW9uKHQsZSxyKXt0LmF1dG9wbGF5PSEwLHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsaT1bXSxhPTA7YTxlLmxlbmd0aDthKyspcj1lW2FdLGlbYV09cj09PXQ/cjoib2JqZWN0Ij09dHlwZW9mIHI/QXJyYXkuaXNBcnJheShyKT9uLmV4dGVuZERlZXAoW10scik6bi5leHRlbmREZWVwQWxsKHt9LHIpOnI7cmV0dXJuIGl9KHQsciksZS5hcHBseShudWxsLHIpfSxlLmV4cG9ydHM9YX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciOjczNn1dLDcxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmNvdW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9KGV8fCIiKSsocj8iIjoiJCIpLGE9ITE9PT1uPyIiOiJeIjtyZXR1cm4ieHkiPT09dD9uZXcgUmVnRXhwKGErIngoWzItOV18WzEtOV1bMC05XSspP3koWzItOV18WzEtOV1bMC05XSspPyIraSk6bmV3IFJlZ0V4cChhK3QrIihbMi05XXxbMS05XVswLTldKyk/IitpKX19LHt9XSw3MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49L14oLiopKFwuW15cLlxbXF1dK3xcW1xkXF0pJC8saT0vXlteXC5cW1xdXSskLztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IoO2U7KXt2YXIgcj10Lm1hdGNoKG4pO2lmKHIpdD1yWzFdO2Vsc2V7aWYoIXQubWF0Y2goaSkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVsYXRpdmVBdHRyIGNhbGw6IitbdCxlXSk7dD0iIn1pZigiXiIhPT1lLmNoYXJBdCgwKSlicmVhaztlPWUuc2xpY2UoMSl9cmV0dXJuIHQmJiJbIiE9PWUuY2hhckF0KDApP3QrIi4iK2U6dCtlfX0se31dLDcxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheSxpPXQoIi4vaXNfcGxhaW5fb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIGEgaW4gcil7dmFyIG89clthXSxzPWVbYV07aWYocyE9PW8paWYoIl8iPT09YS5jaGFyQXQoMCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBvKXtpZihhIGluIGUpY29udGludWU7ZVthXT1vfWVsc2UgaWYobihvKSYmbihzKSYmaShvWzBdKSl7aWYoImN1c3RvbWRhdGEiPT09YXx8ImlkcyI9PT1hKWNvbnRpbnVlO2Zvcih2YXIgbD1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCksYz0wO2M8bDtjKyspc1tjXSE9PW9bY10mJmkob1tjXSkmJmkoc1tjXSkmJnQoc1tjXSxvW2NdKX1lbHNlIGkobykmJmkocykmJih0KHMsbyksT2JqZWN0LmtleXMocykubGVuZ3RofHxkZWxldGUgZVthXSl9fX0seyIuL2FycmF5Ijo2ODMsIi4vaXNfcGxhaW5fb2JqZWN0Ijo3MDF9XSw3MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vbG9nZ2VycyIpLGE9dCgiLi9pZGVudGl0eSIpO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdDxlfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQ+ZX1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQ+PWV9ci5maW5kQmluPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUuc3RhcnQpKXJldHVybiByP01hdGguY2VpbCgodC1lLnN0YXJ0KS9lLnNpemUtMWUtOSktMTpNYXRoLmZsb29yKCh0LWUuc3RhcnQpL2Uuc2l6ZSsxZS05KTt2YXIgYSx1LGY9MCxoPWUubGVuZ3RoLHA9MCxkPWg+MT8oZVtoLTFdLWVbMF0pLyhoLTEpOjE7Zm9yKHU9ZD49MD9yP286czpyP2M6bCx0Kz0xZS05KmQqKHI/LTE6MSkqKGQ+PTA/MTotMSk7ZjxoJiZwKys8MTAwOyl1KGVbYT1NYXRoLmZsb29yKChmK2gpLzIpXSx0KT9mPWErMTpoPWE7cmV0dXJuIHA+OTAmJmkubG9nKCJMb25nIGJpbmFyeSBzZWFyY2guLi4iKSxmLTF9LHIuc29ydGVyQXNjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0sci5zb3J0ZXJEZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSxyLmRpc3RpbmN0VmFscz1mdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCk7ZS5zb3J0KHIuc29ydGVyQXNjKTtmb3IodmFyIG49ZS5sZW5ndGgtMSxpPWVbbl0tZVswXXx8MSxhPWkvKG58fDEpLzFlNCxvPVtlWzBdXSxzPTA7czxuO3MrKyllW3MrMV0+ZVtzXSthJiYoaT1NYXRoLm1pbihpLGVbcysxXS1lW3NdKSxvLnB1c2goZVtzKzFdKSk7cmV0dXJue3ZhbHM6byxtaW5EaWZmOml9fSxyLnJvdW5kVXA9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPTAsYT1lLmxlbmd0aC0xLG89MCxzPXI/MDoxLGw9cj8xOjAsYz1yP01hdGguY2VpbDpNYXRoLmZsb29yO2k8YSYmbysrPDEwMDspZVtuPWMoKGkrYSkvMildPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfSxyLnNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1lKHRbaV0sdFtpLTFdKTtpZihhPDA/cj0xOmE+MCYmKG49MSksciYmbilyZXR1cm4gdC5zb3J0KGUpfXJldHVybiBuP3Q6dC5yZXZlcnNlKCl9LHIuZmluZEluZGV4T2ZNaW49ZnVuY3Rpb24odCxlKXtlPWV8fGE7Zm9yKHZhciByLG49MS8wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89ZSh0W2ldKTtvPG4mJihuPW8scj1pKX1yZXR1cm4gcn19LHsiLi9pZGVudGl0eSI6Njk5LCIuL2xvZ2dlcnMiOjcwNCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDcyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsodC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoImN1cnNvci0iKSYmdC5jbGFzc2VkKGUsITEpfSksZSYmdC5jbGFzc2VkKCJjdXJzb3ItIitlLCEwKX19LHt9XSw3MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGk9ZnVuY3Rpb24oKXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCkiZnVuY3Rpb24iPT10eXBlb2YgdFtlXSYmKHRbZV09aSk7dC5kZXN0cm95PWZ1bmN0aW9uKCl7dC5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmNvbnRhaW5lcil9O3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuY2xhc3NOYW1lPSJuby13ZWJnbCIsci5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHIuc3R5bGUuZm9udFNpemU9IjI0cHgiLHIuc3R5bGUuY29sb3I9bi5kZWZhdWx0c1swXSxyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS5sZWZ0PXIuc3R5bGUudG9wPSIwcHgiLHIuc3R5bGUud2lkdGg9ci5zdHlsZS5oZWlnaHQ9IjEwMCUiLHIuc3R5bGVbImJhY2tncm91bmQtY29sb3IiXT1uLmxpZ2h0TGluZSxyLnN0eWxlWyJ6LWluZGV4Il09MzA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO3JldHVybiBhLnRleHRDb250ZW50PSJXZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlciAtIHZpc2l0IGh0dHBzOi8vZ2V0LndlYmdsLm9yZyBmb3IgbW9yZSBpbmZvIixhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsYS5zdHlsZS50b3A9IjUwJSIsYS5zdHlsZS5sZWZ0PSI1MCUiLGEuc3R5bGUuaGVpZ2h0PSIzMCUiLGEuc3R5bGUud2lkdGg9IjUwJSIsYS5zdHlsZS5tYXJnaW49Ii0xNSUgMCAwIC0yNSUiLHIuYXBwZW5kQ2hpbGQoYSksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQociksdC5jb250YWluZXIuc3R5bGUuYmFja2dyb3VuZD0iI0ZGRkZGRiIsdC5jb250YWluZXIub25jbGljaz1mdW5jdGlvbigpe3dpbmRvdy5vcGVuKCJodHRwczovL2dldC53ZWJnbC5vcmciKX0sITF9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjU3N31dLDcyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ci5hZ2dOdW1zPWZ1bmN0aW9uKHQsZSxhLG8pe3ZhciBzLGw7aWYoKCFvfHxvPmEubGVuZ3RoKSYmKG89YS5sZW5ndGgpLG4oZSl8fChlPSExKSxpKGFbMF0pKXtmb3IobD1uZXcgQXJyYXkobykscz0wO3M8bztzKyspbFtzXT1yLmFnZ051bXModCxlLGFbc10pO2E9bH1mb3Iocz0wO3M8bztzKyspbihlKT9uKGFbc10pJiYoZT10KCtlLCthW3NdKSk6ZT1hW3NdO3JldHVybiBlfSxyLmxlbj1mdW5jdGlvbih0KXtyZXR1cm4gci5hZ2dOdW1zKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9LDAsdCl9LHIubWVhbj1mdW5jdGlvbih0LGUpe3JldHVybiBlfHwoZT1yLmxlbih0KSksci5hZ2dOdW1zKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0sMCx0KS9lfSxyLm1pZFJhbmdlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQmJjAhPT10Lmxlbmd0aClyZXR1cm4oci5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdCkrci5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCkpLzJ9LHIudmFyaWFuY2U9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBlfHwoZT1yLmxlbih0KSksbihpKXx8KGk9ci5tZWFuKHQsZSkpLHIuYWdnTnVtcyhmdW5jdGlvbih0LGUpe3JldHVybiB0K01hdGgucG93KGUtaSwyKX0sMCx0KS9lfSxyLnN0ZGV2PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5zcXJ0KHIudmFyaWFuY2UodCxlLG4pKX0sci5pbnRlcnA9ZnVuY3Rpb24odCxlKXtpZighbihlKSl0aHJvdyJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXIiO2lmKChlPWUqdC5sZW5ndGgtLjUpPDApcmV0dXJuIHRbMF07aWYoZT50Lmxlbmd0aC0xKXJldHVybiB0W3QubGVuZ3RoLTFdO3ZhciByPWUlMTtyZXR1cm4gcip0W01hdGguY2VpbChlKV0rKDEtcikqdFtNYXRoLmZsb29yKGUpXX19LHsiLi9hcnJheSI6NjgzLCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNzIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpOlswLDAsMCwxXX19LHsiY29sb3Itbm9ybWFsaXplIjoxMTB9XSw3MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2xpYiIpLGE9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxvPXQoIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkc7ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXX12YXIgbD0vKFteJF0qKShbJF0rW14kXSpbJF0rKShbXiRdKikvO3IuY29udmVydFRvVHNwYW5zPWZ1bmN0aW9uKHQsZSxNKXt2YXIgUz10LnRleHQoKSxDPSF0LmF0dHIoImRhdGEtbm90ZXgiKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBNYXRoSmF4JiZTLm1hdGNoKGwpLEw9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSk7aWYoIUwuZW1wdHkoKSl7dmFyIHo9dC5hdHRyKCJjbGFzcyIpP3QuYXR0cigiY2xhc3MiKS5zcGxpdCgiICIpWzBdOiJ0ZXh0IjtyZXR1cm4geis9Ii1tYXRoIixMLnNlbGVjdEFsbCgic3ZnLiIreikucmVtb3ZlKCksTC5zZWxlY3RBbGwoImcuIit6KyItZ3JvdXAiKS5yZW1vdmUoKSx0LnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6UywiZGF0YS1tYXRoIjoiTiJ9KSxDPyhlJiZlLl9wcm9taXNlc3x8W10pLnB1c2gobmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKTt2YXIgcj1wYXJzZUludCh0Lm5vZGUoKS5zdHlsZS5mb250U2l6ZSwxMCksYT17Zm9udFNpemU6cn07IWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHMsbDtNYXRoSmF4Lkh1Yi5RdWV1ZShmdW5jdGlvbigpe3JldHVybiBvPWkuZXh0ZW5kRGVlcEFsbCh7fSxNYXRoSmF4Lkh1Yi5jb25maWcpLHM9TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSx2b2lkIDAhPT1NYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5JiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT0wKSxNYXRoSmF4Lkh1Yi5Db25maWcoe21lc3NhZ2VTdHlsZToibm9uZSIsdGV4MmpheDp7aW5saW5lTWF0aDpbWyIkIiwiJCJdLFsiXFwoIiwiXFwpIl1dfSxkaXNwbGF5QWxpZ246ImxlZnQifSl9LGZ1bmN0aW9uKCl7aWYoIlNWRyIhPT0oYT1NYXRoSmF4Lkh1Yi5jb25maWcubWVudVNldHRpbmdzLnJlbmRlcmVyKSlyZXR1cm4gTWF0aEpheC5IdWIuc2V0UmVuZGVyZXIoIlNWRyIpfSxmdW5jdGlvbigpe3ZhciByPSJtYXRoLW91dHB1dC0iK2kucmFuZHN0cih7fSw2NCk7cmV0dXJuIGw9bi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoe2lkOnJ9KS5zdHlsZSh7dmlzaWJpbGl0eToiaGlkZGVuIixwb3NpdGlvbjoiYWJzb2x1dGUifSkuc3R5bGUoeyJmb250LXNpemUiOmUuZm9udFNpemUrInB4In0pLnRleHQodC5yZXBsYWNlKGMsIlxcbHQgIikucmVwbGFjZSh1LCJcXGd0ICIpKSxNYXRoSmF4Lkh1Yi5UeXBlc2V0KGwubm9kZSgpKX0sZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCgiYm9keSIpLnNlbGVjdCgiI01hdGhKYXhfU1ZHX2dseXBocyIpO2lmKGwuc2VsZWN0KCIuTWF0aEpheF9TVkciKS5lbXB0eSgpfHwhbC5zZWxlY3QoInN2ZyIpLm5vZGUoKSlpLmxvZygiVGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSB0ZXggc3ludGF4LiIsdCkscigpO2Vsc2V7dmFyIG89bC5zZWxlY3QoInN2ZyIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyKGwuc2VsZWN0KCIuTWF0aEpheF9TVkciKSxlLG8pfWlmKGwucmVtb3ZlKCksIlNWRyIhPT1hKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcihhKX0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09cyYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9cyksTWF0aEpheC5IdWIuQ29uZmlnKG8pfSl9KENbMl0sYSxmdW5jdGlvbihuLGksYSl7TC5zZWxlY3RBbGwoInN2Zy4iK3opLnJlbW92ZSgpLEwuc2VsZWN0QWxsKCJnLiIreisiLWdyb3VwIikucmVtb3ZlKCk7dmFyIG89biYmbi5zZWxlY3QoInN2ZyIpO2lmKCFvfHwhby5ub2RlKCkpcmV0dXJuIE8oKSx2b2lkIGUoKTt2YXIgbD1MLmFwcGVuZCgiZyIpLmNsYXNzZWQoeisiLWdyb3VwIiwhMCkuYXR0cih7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsImRhdGEtdW5mb3JtYXR0ZWQiOlMsImRhdGEtbWF0aCI6IlkifSk7bC5ub2RlKCkuYXBwZW5kQ2hpbGQoby5ub2RlKCkpLGkmJmkubm9kZSgpJiZvLm5vZGUoKS5pbnNlcnRCZWZvcmUoaS5ub2RlKCkuY2xvbmVOb2RlKCEwKSxvLm5vZGUoKS5maXJzdENoaWxkKSxvLmF0dHIoe2NsYXNzOnosaGVpZ2h0OmEuaGVpZ2h0LHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIG1lZXQifSkuc3R5bGUoe292ZXJmbG93OiJ2aXNpYmxlIiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBjPXQubm9kZSgpLnN0eWxlLmZpbGx8fCJibGFjayI7by5zZWxlY3QoImciKS5hdHRyKHtmaWxsOmMsc3Ryb2tlOmN9KTt2YXIgdT1zKG8sIndpZHRoIiksZj1zKG8sImhlaWdodCIpLGg9K3QuYXR0cigieCIpLXUqe3N0YXJ0OjAsbWlkZGxlOi41LGVuZDoxfVt0LmF0dHIoInRleHQtYW5jaG9yIil8fCJzdGFydCJdLHA9LShyfHxzKHQsImhlaWdodCIpKS80OyJ5Ij09PXpbMF0/KGwuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitbLTkwLCt0LmF0dHIoIngiKSwrdC5hdHRyKCJ5IildKyIpIHRyYW5zbGF0ZSgiK1stdS8yLHAtZi8yXSsiKSJ9KSxvLmF0dHIoe3g6K3QuYXR0cigieCIpLHk6K3QuYXR0cigieSIpfSkpOiJsIj09PXpbMF0/by5hdHRyKHt4OnQuYXR0cigieCIpLHk6cC1mLzJ9KToiYSI9PT16WzBdJiYwIT09ei5pbmRleE9mKCJhdGl0bGUiKT9vLmF0dHIoe3g6MCx5OnB9KTpvLmF0dHIoe3g6aCx5Oit0LmF0dHIoInkiKStwLWYvMn0pLE0mJk0uY2FsbCh0LGwpLGUobCl9KX0pKTpPKCksdH1mdW5jdGlvbiBPKCl7TC5lbXB0eSgpfHwoej10LmF0dHIoImNsYXNzIikrIi1tYXRoIixMLnNlbGVjdCgic3ZnLiIreikucmVtb3ZlKCkpLHQudGV4dCgiIikuc3R5bGUoIndoaXRlLXNwYWNlIiwicHJlIiksZnVuY3Rpb24odCxlKXtlPWUucmVwbGFjZSh2LCIgIik7dmFyIHIscz0hMSxsPVtdLGM9LTE7ZnVuY3Rpb24gdSgpe2MrKzt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5zdmcsInRzcGFuIik7bi5zZWxlY3QoZSkuYXR0cih7Y2xhc3M6ImxpbmUiLGR5OmMqbysiZW0ifSksdC5hcHBlbmRDaGlsZChlKSxyPWU7dmFyIGk9bDtpZihsPVt7bm9kZTplfV0saS5sZW5ndGg+MSlmb3IodmFyIHM9MTtzPGkubGVuZ3RoO3MrKylNKGlbc10pfWZ1bmN0aW9uIE0odCl7dmFyIGUsaT10LnR5cGUsbz17fTtpZigiYSI9PT1pKXtlPSJhIjt2YXIgcz10LnRhcmdldCxjPXQuaHJlZix1PXQucG9wdXA7YyYmKG89eyJ4bGluazp4bGluazpzaG93IjoiX2JsYW5rIj09PXN8fCJfIiE9PXMuY2hhckF0KDApPyJuZXciOiJyZXBsYWNlIix0YXJnZXQ6cywieGxpbms6eGxpbms6aHJlZiI6Y30sdSYmKG8ub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCwiJyt1KyciKTtyZXR1cm4gZmFsc2U7JykpfWVsc2UgZT0idHNwYW4iO3Quc3R5bGUmJihvLnN0eWxlPXQuc3R5bGUpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLnN2ZyxlKTtpZigic3VwIj09PWl8fCJzdWIiPT09aSl7UyhyLGQpLHIuYXBwZW5kQ2hpbGQoZik7dmFyIGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGEuc3ZnLCJ0c3BhbiIpO1MoZyxkKSxuLnNlbGVjdChnKS5hdHRyKCJkeSIscFtpXSksby5keT1oW2ldLHIuYXBwZW5kQ2hpbGQoZiksci5hcHBlbmRDaGlsZChnKX1lbHNlIHIuYXBwZW5kQ2hpbGQoZik7bi5zZWxlY3QoZikuYXR0cihvKSxyPXQubm9kZT1mLGwucHVzaCh0KX1mdW5jdGlvbiBTKHQsZSl7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZnVuY3Rpb24gQyh0KXtpZigxIT09bC5sZW5ndGgpe3ZhciBuPWwucG9wKCk7dCE9PW4udHlwZSYmaS5sb2coIlN0YXJ0IHRhZyA8IituLnR5cGUrIj4gZG9lc250IG1hdGNoIGVuZCB0YWcgPCIrdCsiPi4gUHJldGVuZGluZyBpdCBkaWQgbWF0Y2guIixlKSxyPWxbbC5sZW5ndGgtMV0ubm9kZX1lbHNlIGkubG9nKCJJZ25vcmluZyB1bmV4cGVjdGVkIGVuZCB0YWcgPC8iK3QrIj4uIixlKX14LnRlc3QoZSk/dSgpOihyPXQsbD1be25vZGU6dH1dKTtmb3IodmFyIEw9ZS5zcGxpdChtKSx6PTA7ejxMLmxlbmd0aDt6Kyspe3ZhciBPPUxbel0sST1PLm1hdGNoKHkpLEQ9SSYmSVsyXS50b0xvd2VyQ2FzZSgpLFA9ZltEXTtpZigiYnIiPT09RCl1KCk7ZWxzZSBpZih2b2lkIDA9PT1QKVMocixFKE8pKTtlbHNlIGlmKElbMV0pQyhEKTtlbHNle3ZhciBSPUlbNF0sRj17dHlwZTpEfSxCPVQoUixiKTtpZihCPyhCPUIucmVwbGFjZShBLCIkMSBmaWxsOiIpLFAmJihCKz0iOyIrUCkpOlAmJihCPVApLEImJihGLnN0eWxlPUIpLCJhIj09PUQpe3M9ITA7dmFyIE49VChSLF8pO2lmKE4pe3ZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtqLmhyZWY9TiwtMSE9PWcuaW5kZXhPZihqLnByb3RvY29sKSYmKEYuaHJlZj1lbmNvZGVVUkkoZGVjb2RlVVJJKE4pKSxGLnRhcmdldD1UKFIsdyl8fCJfYmxhbmsiLEYucG9wdXA9VChSLGspKX19TShGKX19cmV0dXJuIHN9KHQubm9kZSgpLFMpJiZ0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHIucG9zaXRpb25UZXh0KHQpLE0mJk0uY2FsbCh0KX19O3ZhciBjPS8oPHwmbHQ7fCYjNjA7KS9nLHU9Lyg+fCZndDt8JiM2MjspL2c7dmFyIGY9e3N1cDoiZm9udC1zaXplOjcwJSIsc3ViOiJmb250LXNpemU6NzAlIixiOiJmb250LXdlaWdodDpib2xkIixpOiJmb250LXN0eWxlOml0YWxpYyIsYToiY3Vyc29yOnBvaW50ZXIiLHNwYW46IiIsZW06ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQifSxoPXtzdWI6IjAuM2VtIixzdXA6Ii0wLjZlbSJ9LHA9e3N1YjoiLTAuMjFlbSIsc3VwOiIwLjQyZW0ifSxkPSJcdTIwMGIiLGc9WyJodHRwOiIsImh0dHBzOiIsIm1haWx0bzoiLCIiLHZvaWQgMCwiOiJdLHY9LyhcclxuP3xcbikvZyxtPS8oPFtePD5dKj4pLyx5PS88KFwvPykoW14gPl0qKShccysoLiopKT8+L2kseD0vPGJyKFxzKy4qKT8+L2ksYj0vKF58W1xzIiddKXN0eWxlXHMqPVxzKigiKFteIl0qKTs/InwnKFteJ10qKTs/JykvaSxfPS8oXnxbXHMiJ10paHJlZlxzKj1ccyooIihbXiJdKikifCcoW14nXSopJykvaSx3PS8oXnxbXHMiJ10pdGFyZ2V0XHMqPVxzKigiKFteIlxzXSopInwnKFteJ1xzXSopJykvaSxrPS8oXnxbXHMiJ10pcG9wdXBccyo9XHMqKCIoW1x3PSxdKikifCcoW1x3PSxdKiknKS9pO2Z1bmN0aW9uIFQodCxlKXtpZighdClyZXR1cm4gbnVsbDt2YXIgcj10Lm1hdGNoKGUpLG49ciYmKHJbM118fHJbNF0pO3JldHVybiBuJiZFKG4pfXZhciBBPS8oXnw7KVxzKmNvbG9yOi87ci5wbGFpblRleHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dm9pZCAwIT09KGU9ZXx8e30pLmxlbiYmLTEhPT1lLmxlbj9lLmxlbjoxLzAsbj12b2lkIDAhPT1lLmFsbG93ZWRUYWdzP2UuYWxsb3dlZFRhZ3M6WyJiciJdLGk9Ii4uLiIubGVuZ3RoLGE9dC5zcGxpdChtKSxvPVtdLHM9IiIsbD0wLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHU9YVtjXSxmPXUubWF0Y2goeSksaD1mJiZmWzJdLnRvTG93ZXJDYXNlKCk7aWYoaCktMSE9PW4uaW5kZXhPZihoKSYmKG8ucHVzaCh1KSxzPWgpO2Vsc2V7dmFyIHA9dS5sZW5ndGg7aWYobCtwPHIpby5wdXNoKHUpLGwrPXA7ZWxzZSBpZihsPHIpe3ZhciBkPXItbDtzJiYoImJyIiE9PXN8fGQ8PWl8fHA8PWkpJiZvLnBvcCgpLHI+aT9vLnB1c2godS5zdWJzdHIoMCxkLWkpKyIuLi4iKTpvLnB1c2godS5zdWJzdHIoMCxkKSk7YnJlYWt9cz0iIn19cmV0dXJuIG8uam9pbigiIil9O3ZhciBNPXttdToiXHUwM2JjIixhbXA6IiYiLGx0OiI8IixndDoiPiIsbmJzcDoiXHhhMCIsdGltZXM6Ilx4ZDciLHBsdXNtbjoiXHhiMSIsZGVnOiJceGIwIn0sUz0vJigjXGQrfCN4W1xkYS1mQS1GXSt8W2Etel0rKTsvZztmdW5jdGlvbiBFKHQpe3JldHVybiB0LnJlcGxhY2UoUyxmdW5jdGlvbih0LGUpe3JldHVybigiIyI9PT1lLmNoYXJBdCgwKT9mdW5jdGlvbih0KXtpZih0PjExMTQxMTEpcmV0dXJuO3ZhciBlPVN0cmluZy5mcm9tQ29kZVBvaW50O2lmKGUpcmV0dXJuIGUodCk7dmFyIHI9U3RyaW5nLmZyb21DaGFyQ29kZTtyZXR1cm4gdDw9NjU1MzU/cih0KTpyKDU1MjMyKyh0Pj4xMCksdCUxMDI0KzU2MzIwKX0oIngiPT09ZS5jaGFyQXQoMSk/cGFyc2VJbnQoZS5zdWJzdHIoMiksMTYpOnBhcnNlSW50KGUuc3Vic3RyKDEpLDEwKSk6TVtlXSl8fHR9KX1mdW5jdGlvbiBDKHQsZSxyKXt2YXIgbixpLGEsbz1yLmhvcml6b250YWxBbGlnbixzPXIudmVydGljYWxBbGlnbnx8InRvcCIsbD10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBpPSJib3R0b20iPT09cz9mdW5jdGlvbigpe3JldHVybiBsLmJvdHRvbS1uLmhlaWdodH06Im1pZGRsZSI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGwudG9wKyhsLmhlaWdodC1uLmhlaWdodCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gbC50b3B9LGE9InJpZ2h0Ij09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5yaWdodC1uLndpZHRofToiY2VudGVyIj09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5sZWZ0KyhsLndpZHRoLW4ud2lkdGgpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGwubGVmdH0sZnVuY3Rpb24oKXtyZXR1cm4gbj10aGlzLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLnN0eWxlKHt0b3A6aSgpLWMudG9wKyJweCIsbGVmdDphKCktYy5sZWZ0KyJweCIsInotaW5kZXgiOjFlM30pLHRoaXN9fXIuY29udmVydEVudGl0aWVzPUUsci5saW5lQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuc2l6ZSgpfHwxfSxyLnBvc2l0aW9uVGV4dD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2Z1bmN0aW9uIGkoZSxyKXtyZXR1cm4gdm9pZCAwPT09cj9udWxsPT09KHI9dC5hdHRyKGUpKSYmKHQuYXR0cihlLDApLHI9MCk6dC5hdHRyKGUscikscn12YXIgYT1pKCJ4IixlKSxvPWkoInkiLHIpOyJ0ZXh0Ij09PXRoaXMubm9kZU5hbWUmJnQuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuYXR0cih7eDphLHk6b30pfSl9LHIubWFrZUVkaXRhYmxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5nZCxpPWUuZGVsZWdhdGUsYT1uLmRpc3BhdGNoKCJlZGl0IiwiaW5wdXQiLCJjYW5jZWwiKSxvPWl8fHQ7aWYodC5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjppPyJub25lIjoiYWxsIn0pLDEhPT10LnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoImJvbyIpO2Z1bmN0aW9uIHMoKXshZnVuY3Rpb24oKXt2YXIgaT1uLnNlbGVjdChyKS5zZWxlY3QoIi5zdmctY29udGFpbmVyIiksbz1pLmFwcGVuZCgiZGl2Iikscz10Lm5vZGUoKS5zdHlsZSxjPXBhcnNlRmxvYXQocy5mb250U2l6ZXx8MTIpLHU9ZS50ZXh0O3ZvaWQgMD09PXUmJih1PXQuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpKTtvLmNsYXNzZWQoInBsdWdpbi1lZGl0YWJsZSBlZGl0YWJsZSIsITApLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLCJmb250LWZhbWlseSI6cy5mb250RmFtaWx5fHwiQXJpYWwiLCJmb250LXNpemUiOmMsY29sb3I6ZS5maWxsfHxzLmZpbGx8fCJibGFjayIsb3BhY2l0eToxLCJiYWNrZ3JvdW5kLWNvbG9yIjplLmJhY2tncm91bmR8fCJ0cmFuc3BhcmVudCIsb3V0bGluZToiI2ZmZmZmZjMzIDFweCBzb2xpZCIsbWFyZ2luOlstYy84KzEsMCwwLC0xXS5qb2luKCJweCAiKSsicHgiLHBhZGRpbmc6IjAiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9KS5hdHRyKHtjb250ZW50ZWRpdGFibGU6ITB9KS50ZXh0KHUpLmNhbGwoQyh0LGksZSkpLm9uKCJibHVyIixmdW5jdGlvbigpe3IuX2VkaXRpbmc9ITEsdC50ZXh0KHRoaXMudGV4dENvbnRlbnQpLnN0eWxlKHtvcGFjaXR5OjF9KTt2YXIgZSxpPW4uc2VsZWN0KHRoaXMpLmF0dHIoImNsYXNzIik7KGU9aT8iLiIraS5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChlKS5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIG89dGhpcy50ZXh0Q29udGVudDtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkucmVtb3ZlKCksbi5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIixudWxsKSxhLmVkaXQuY2FsbCh0LG8pfSkub24oImZvY3VzIixmdW5jdGlvbigpe3ZhciB0PXRoaXM7ci5fZWRpdGluZz0hMCxuLnNlbGVjdChkb2N1bWVudCkub24oIm1vdXNldXAiLGZ1bmN0aW9uKCl7aWYobi5ldmVudC50YXJnZXQ9PT10KXJldHVybiExO2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vLm5vZGUoKSYmby5ub2RlKCkuYmx1cigpfSl9KS5vbigia2V5dXAiLGZ1bmN0aW9uKCl7Mjc9PT1uLmV2ZW50LndoaWNoPyhyLl9lZGl0aW5nPSExLHQuc3R5bGUoe29wYWNpdHk6MX0pLG4uc2VsZWN0KHRoaXMpLnN0eWxlKHtvcGFjaXR5OjB9KS5vbigiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pLnRyYW5zaXRpb24oKS5yZW1vdmUoKSxhLmNhbmNlbC5jYWxsKHQsdGhpcy50ZXh0Q29udGVudCkpOihhLmlucHV0LmNhbGwodCx0aGlzLnRleHRDb250ZW50KSxuLnNlbGVjdCh0aGlzKS5jYWxsKEModCxpLGUpKSl9KS5vbigia2V5ZG93biIsZnVuY3Rpb24oKXsxMz09PW4uZXZlbnQud2hpY2gmJnRoaXMuYmx1cigpfSkuY2FsbChsKX0oKSx0LnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgaSxzPW8uYXR0cigiY2xhc3MiKTsoaT1zPyIuIitzLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmbi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KGkpLnN0eWxlKHtvcGFjaXR5OjB9KX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQubm9kZSgpLHI9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyLnNlbGVjdE5vZGVDb250ZW50cyhlKTt2YXIgbj13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7bi5yZW1vdmVBbGxSYW5nZXMoKSxuLmFkZFJhbmdlKHIpLGUuZm9jdXMoKX1yZXR1cm4gZS5pbW1lZGlhdGU/cygpOm8ub24oImNsaWNrIixzKSxuLnJlYmluZCh0LGEsIm9uIil9fSx7Ii4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY3MiwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY3OCwiLi4vbGliIjo3MDAsZDM6MTU0fV0sNzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O2Z1bmN0aW9uIGkodCl7dCYmbnVsbCE9PXQudGltZXImJihjbGVhclRpbWVvdXQodC50aW1lciksdC50aW1lcj1udWxsKX1yLnRocm90dGxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1uW3RdLG89RGF0ZS5ub3coKTtpZighYSl7Zm9yKHZhciBzIGluIG4pbltzXS50czxvLTZlNCYmZGVsZXRlIG5bc107YT1uW3RdPXt0czowLHRpbWVyOm51bGx9fWZ1bmN0aW9uIGwoKXtyKCksYS50cz1EYXRlLm5vdygpLGEub25Eb25lJiYoYS5vbkRvbmUoKSxhLm9uRG9uZT1udWxsKX1pKGEpLG8+YS50cytlP2woKTphLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtsKCksYS50aW1lcj1udWxsfSxlKX0sci5kb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07cmV0dXJuIGUmJmUudGltZXI/bmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIHI9ZS5vbkRvbmU7ZS5vbkRvbmU9ZnVuY3Rpb24oKXtyJiZyKCksdCgpLGUub25Eb25lPW51bGx9fSk6UHJvbWlzZS5yZXNvbHZlKCl9LHIuY2xlYXI9ZnVuY3Rpb24odCl7aWYodClpKG5bdF0pLGRlbGV0ZSBuW3RdO2Vsc2UgZm9yKHZhciBlIGluIG4pci5jbGVhcihlKX19LHt9XSw3MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PjApcmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMDt2YXIgcj1NYXRoLmxvZyhNYXRoLm1pbihlWzBdLGVbMV0pKS9NYXRoLkxOMTA7cmV0dXJuIG4ocil8fChyPU1hdGgubG9nKE1hdGgubWF4KGVbMF0sZVsxXSkpL01hdGguTE4xMC02KSxyfX0seyJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17fSxpPXQoIi4uL3Bsb3RzL2dlby9jb25zdGFudHMiKS5sb2NhdGlvbm1vZGVUb0xheWVyLGE9dCgidG9wb2pzb24tY2xpZW50IikuZmVhdHVyZTtuLmdldFRvcG9qc29uTmFtZT1mdW5jdGlvbih0KXtyZXR1cm5bdC5zY29wZS5yZXBsYWNlKC8gL2csIi0iKSwiXyIsdC5yZXNvbHV0aW9uLnRvU3RyaW5nKCksIm0iXS5qb2luKCIiKX0sbi5nZXRUb3BvanNvblBhdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlKyIuanNvbiJ9LG4uZ2V0VG9wb2pzb25GZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPWlbdC5sb2NhdGlvbm1vZGVdLG49ZS5vYmplY3RzW3JdO3JldHVybiBhKGUsbikuZmVhdHVyZXN9fSx7Ii4uL3Bsb3RzL2dlby9jb25zdGFudHMiOjc3NiwidG9wb2pzb24tY2xpZW50Ijo1MjR9XSw3Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJsb2NhbGUiLG5hbWU6ImVuLVVTIixkaWN0aW9uYXJ5OnsiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSI6IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUifSxmb3JtYXQ6e2RhdGU6IiVtLyVkLyVZIn19fSx7fV0sNzI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToibG9jYWxlIixuYW1lOiJlbiIsZGljdGlvbmFyeTp7IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiOiJDbGljayB0byBlbnRlciBDb2xvdXJzY2FsZSB0aXRsZSJ9LGZvcm1hdDp7ZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlZC8lbS8lWSIsdGltZToiJUg6JU06JVMiLGRlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLHllYXI6IiVZIixtb250aDoiJWIgJVkiLGRheU1vbnRoOiIlYiAlLWQiLGRheU1vbnRoWWVhcjoiJWIgJS1kLCAlWSJ9fX0se31dLDczMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGE9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KCJbIilbMF0scz0wO3M8YS5sZW5ndGg7cysrKWlmKChyPXQubWF0Y2goYVtzXSkpJiYwPT09ci5pbmRleCl7ZT1yWzBdO2JyZWFrfWlmKGV8fChlPWlbaS5pbmRleE9mKG8pXSksIWUpcmV0dXJuITE7dmFyIGw9dC5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiBsPyEhKHI9bC5tYXRjaCgvXlxbKDB8WzEtOV1bMC05XSopXF0oXC4oLispKT8kLykpJiZ7YXJyYXk6ZSxpbmRleDpOdW1iZXIoclsxXSkscHJvcGVydHk6clszXXx8IiJ9OnthcnJheTplLGluZGV4OiIiLHByb3BlcnR5OiIifX19LHsiLi4vcmVnaXN0cnkiOjgyOX1dLDczMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uZXh0ZW5kRmxhdCxhPW4uaXNQbGFpbk9iamVjdCxvPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsImNsZWFyQXhpc1R5cGVzIiwicGxvdCIsInN0eWxlIiwibWFya2VyU2l6ZSIsImNvbG9yYmFycyJdfSxzPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsInBsb3QiLCJsZWdlbmQiLCJ0aWNrcyIsImF4cmFuZ2UiLCJsYXlvdXRzdHlsZSIsIm1vZGViYXIiLCJjYW1lcmEiLCJhcnJheWRyYXciXX0sbD1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFsiZnVsbFJlcGxvdCJdKSxjPXMuZmxhZ3Muc2xpY2UoKS5jb25jYXQoImxheW91dFJlcGxvdCIpO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPSExO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuPWkoe30sdCk7Zm9yKHZhciBvIGluIG4pe3ZhciBzPW5bb107YShzKSYmKG5bb109aChzLGUscixvKSl9cmV0dXJuImZyb20tcm9vdCI9PT1yJiYobi5lZGl0VHlwZT1lKSxufWZ1bmN0aW9uIGgodCxlLHIsbil7aWYodC52YWxUeXBlKXt2YXIgYT1pKHt9LHQpO2lmKGEuZWRpdFR5cGU9ZSxBcnJheS5pc0FycmF5KHQuaXRlbXMpKXthLml0ZW1zPW5ldyBBcnJheSh0Lml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzx0Lml0ZW1zLmxlbmd0aDtvKyspYS5pdGVtc1tvXT1oKHQuaXRlbXNbb10sZSwiZnJvbS1yb290Iil9cmV0dXJuIGF9cmV0dXJuIGYodCxlLCJfIj09PW4uY2hhckF0KDApPyJuZXN0ZWQiOiJmcm9tLXJvb3QiKX1lLmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpzLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShsKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyJiYibm9uZSIhPT1yKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9LG92ZXJyaWRlQWxsOmZ9fSx7Ii4uL2xpYiI6NzAwfV0sNzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJnbC1tYXQ0L2Zyb21RdWF0IiksYT10KCIuLi9yZWdpc3RyeSIpLG89dCgiLi4vbGliIikscz10KCIuLi9wbG90cy9wbG90cyIpLGw9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksdT1sLmNsZWFuSWQsZj1sLmdldEZyb21UcmFjZSxoPWEudHJhY2VJcztmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYodFtlXT11KHIsbikpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPXRbZV0saT10LnRpdGxlJiZ0LnRpdGxlW3JdO24mJiFpJiYodC50aXRsZXx8KHQudGl0bGU9e30pLHQudGl0bGVbcl09dFtlXSxkZWxldGUgdFtlXSl9dCYmKCJzdHJpbmciIT10eXBlb2YgdC50aXRsZSYmIm51bWJlciIhPXR5cGVvZiB0LnRpdGxlfHwodC50aXRsZT17dGV4dDp0LnRpdGxlfSksZSgidGl0bGVmb250IiwiZm9udCIpLGUoInRpdGxlcG9zaXRpb24iLCJwb3NpdGlvbiIpLGUoInRpdGxlc2lkZSIsInNpZGUiKSxlKCJ0aXRsZW9mZnNldCIsIm9mZnNldCIpKX1mdW5jdGlvbiBnKHQpe2lmKCFvLmlzUGxhaW5PYmplY3QodCkpcmV0dXJuITE7dmFyIGU9dC5uYW1lO3JldHVybiBkZWxldGUgdC5uYW1lLGRlbGV0ZSB0LnNob3dsZWdlbmQsKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlKSYmU3RyaW5nKGUpfWZ1bmN0aW9uIHYodCxlLHIsbil7aWYociYmIW4pcmV0dXJuIHQ7aWYobiYmIXIpcmV0dXJuIGU7aWYoIXQudHJpbSgpKXJldHVybiBlO2lmKCFlLnRyaW0oKSlyZXR1cm4gdDt2YXIgaSxhPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IoaT0wO2k8YSYmdC5jaGFyQXQoaSk9PT1lLmNoYXJBdChpKTtpKyspO3JldHVybiB0LnN1YnN0cigwLGkpLnRyaW0oKX1mdW5jdGlvbiBtKHQpe3ZhciBlPSJtaWRkbGUiLHI9ImNlbnRlciI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYoLTEhPT10LmluZGV4T2YoInRvcCIpP2U9InRvcCI6LTEhPT10LmluZGV4T2YoImJvdHRvbSIpJiYoZT0iYm90dG9tIiksLTEhPT10LmluZGV4T2YoImxlZnQiKT9yPSJsZWZ0IjotMSE9PXQuaW5kZXhPZigicmlnaHQiKSYmKHI9InJpZ2h0IikpLGUrIiAiK3J9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlIGluIHQmJiJvYmplY3QiPT10eXBlb2YgdFtlXSYmMD09PU9iamVjdC5rZXlzKHRbZV0pLmxlbmd0aH1yLmNsZWFyUHJvbWlzZVF1ZXVlPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpJiZ0Ll9wcm9taXNlcy5sZW5ndGg+MCYmby5sb2coIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuIiksdC5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUsbjt0fHwodD17fSksdC54YXhpczEmJih0LnhheGlzfHwodC54YXhpcz10LnhheGlzMSksZGVsZXRlIHQueGF4aXMxKSx0LnlheGlzMSYmKHQueWF4aXN8fCh0LnlheGlzPXQueWF4aXMxKSxkZWxldGUgdC55YXhpczEpLHQuc2NlbmUxJiYodC5zY2VuZXx8KHQuc2NlbmU9dC5zY2VuZTEpLGRlbGV0ZSB0LnNjZW5lMSk7dmFyIGE9KHMuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW58fHt9KS5hdHRyUmVnZXgsbD0ocy5zdWJwbG90c1JlZ2lzdHJ5LnBvbGFyfHx7fSkuYXR0clJlZ2V4LGY9KHMuc3VicGxvdHNSZWdpc3RyeS50ZXJuYXJ5fHx7fSkuYXR0clJlZ2V4LGg9KHMuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LGc9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIHY9Z1tlXTtpZihhJiZhLnRlc3Qodikpe3ZhciBtPXRbdl07bS5hbmNob3ImJiJmcmVlIiE9PW0uYW5jaG9yJiYobS5hbmNob3I9dShtLmFuY2hvcikpLG0ub3ZlcmxheWluZyYmKG0ub3ZlcmxheWluZz11KG0ub3ZlcmxheWluZykpLG0udHlwZXx8KG0uaXNkYXRlP20udHlwZT0iZGF0ZSI6bS5pc2xvZz9tLnR5cGU9ImxvZyI6ITE9PT1tLmlzZGF0ZSYmITE9PT1tLmlzbG9nJiYobS50eXBlPSJsaW5lYXIiKSksIndpdGh6ZXJvIiE9PW0uYXV0b3JhbmdlJiYidG96ZXJvIiE9PW0uYXV0b3JhbmdlfHwobS5hdXRvcmFuZ2U9ITAsbS5yYW5nZW1vZGU9InRvemVybyIpLGRlbGV0ZSBtLmlzbG9nLGRlbGV0ZSBtLmlzZGF0ZSxkZWxldGUgbS5jYXRlZ29yaWVzLHkobSwiZG9tYWluIikmJmRlbGV0ZSBtLmRvbWFpbix2b2lkIDAhPT1tLmF1dG90aWNrJiYodm9pZCAwPT09bS50aWNrbW9kZSYmKG0udGlja21vZGU9bS5hdXRvdGljaz8iYXV0byI6ImxpbmVhciIpLGRlbGV0ZSBtLmF1dG90aWNrKSxkKG0pfWVsc2UgaWYobCYmbC50ZXN0KHYpKXtkKHRbdl0ucmFkaWFsYXhpcyl9ZWxzZSBpZihmJiZmLnRlc3Qodikpe3ZhciB4PXRbdl07ZCh4LmFheGlzKSxkKHguYmF4aXMpLGQoeC5jYXhpcyl9ZWxzZSBpZihoJiZoLnRlc3Qodikpe3ZhciBiPXRbdl0sXz1iLmNhbWVyYXBvc2l0aW9uO2lmKEFycmF5LmlzQXJyYXkoXykmJjQ9PT1fWzBdLmxlbmd0aCl7dmFyIHc9X1swXSxrPV9bMV0sVD1fWzJdLEE9aShbXSx3KSxNPVtdO2ZvcihuPTA7bjwzOysrbilNW25dPWtbbl0rVCpBWzIrNCpuXTtiLmNhbWVyYT17ZXllOnt4Ok1bMF0seTpNWzFdLHo6TVsyXX0sY2VudGVyOnt4OmtbMF0seTprWzFdLHo6a1syXX0sdXA6e3g6MCx5OjAsejoxfX0sZGVsZXRlIGIuY2FtZXJhcG9zaXRpb259ZChiLnhheGlzKSxkKGIueWF4aXMpLGQoYi56YXhpcyl9fXZhciBTPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8UztlKyspe3ZhciBFPXQuYW5ub3RhdGlvbnNbZV07by5pc1BsYWluT2JqZWN0KEUpJiYoRS5yZWYmJigicGFwZXIiPT09RS5yZWY/KEUueHJlZj0icGFwZXIiLEUueXJlZj0icGFwZXIiKToiZGF0YSI9PT1FLnJlZiYmKEUueHJlZj0ieCIsRS55cmVmPSJ5IiksZGVsZXRlIEUucmVmKSxwKEUsInhyZWYiKSxwKEUsInlyZWYiKSl9dmFyIEM9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPEM7ZSsrKXt2YXIgTD10LnNoYXBlc1tlXTtvLmlzUGxhaW5PYmplY3QoTCkmJihwKEwsInhyZWYiKSxwKEwsInlyZWYiKSl9dmFyIHo9dC5sZWdlbmQ7cmV0dXJuIHomJih6Lng+Mz8oei54PTEuMDIsei54YW5jaG9yPSJsZWZ0Iik6ei54PC0yJiYoei54PS0uMDIsei54YW5jaG9yPSJyaWdodCIpLHoueT4zPyh6Lnk9MS4wMix6LnlhbmNob3I9ImJvdHRvbSIpOnoueTwtMiYmKHoueT0tLjAyLHoueWFuY2hvcj0idG9wIikpLGQodCksInJvdGF0ZSI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT0ib3JiaXQiKSxjLmNsZWFuKHQpLHQudGVtcGxhdGUmJnQudGVtcGxhdGUubGF5b3V0JiZyLmNsZWFuTGF5b3V0KHQudGVtcGxhdGUubGF5b3V0KSx0fSxyLmNsZWFuRGF0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG4saT10W2VdO2lmKCJoaXN0b2dyYW15Ij09PWkudHlwZSYmInhiaW5zImluIGkmJiEoInliaW5zImluIGkpJiYoaS55Ymlucz1pLnhiaW5zLGRlbGV0ZSBpLnhiaW5zKSxpLmVycm9yX3kmJiJvcGFjaXR5ImluIGkuZXJyb3JfeSl7dmFyIGw9Yy5kZWZhdWx0cyxmPWkuZXJyb3JfeS5jb2xvcnx8KGgoaSwiYmFyIik/Yy5kZWZhdWx0TGluZTpsW2UlbC5sZW5ndGhdKTtpLmVycm9yX3kuY29sb3I9Yy5hZGRPcGFjaXR5KGMucmdiKGYpLGMub3BhY2l0eShmKSppLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIGkuZXJyb3JfeS5vcGFjaXR5fWlmKCJiYXJkaXIiaW4gaSYmKCJoIiE9PWkuYmFyZGlyfHwhaChpLCJiYXIiKSYmImhpc3RvZ3JhbSIhPT1pLnR5cGUuc3Vic3RyKDAsOSl8fChpLm9yaWVudGF0aW9uPSJoIixyLnN3YXBYWURhdGEoaSkpLGRlbGV0ZSBpLmJhcmRpciksImhpc3RvZ3JhbXkiPT09aS50eXBlJiZyLnN3YXBYWURhdGEoaSksImhpc3RvZ3JhbXgiIT09aS50eXBlJiYiaGlzdG9ncmFteSIhPT1pLnR5cGV8fChpLnR5cGU9Imhpc3RvZ3JhbSIpLCJzY2wiaW4gaSYmISgiY29sb3JzY2FsZSJpbiBpKSYmKGkuY29sb3JzY2FsZT1pLnNjbCxkZWxldGUgaS5zY2wpLCJyZXZlcnNlc2NsImluIGkmJiEoInJldmVyc2VzY2FsZSJpbiBpKSYmKGkucmV2ZXJzZXNjYWxlPWkucmV2ZXJzZXNjbCxkZWxldGUgaS5yZXZlcnNlc2NsKSxpLnhheGlzJiYoaS54YXhpcz11KGkueGF4aXMsIngiKSksaS55YXhpcyYmKGkueWF4aXM9dShpLnlheGlzLCJ5IikpLGgoaSwiZ2wzZCIpJiZpLnNjZW5lJiYoaS5zY2VuZT1zLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZC5jbGVhbklkKGkuc2NlbmUpKSwhaChpLCJwaWUiKSYmIWgoaSwiYmFyIikmJiJ3YXRlcmZhbGwiIT09aS50eXBlKWlmKEFycmF5LmlzQXJyYXkoaS50ZXh0cG9zaXRpb24pKWZvcihuPTA7bjxpLnRleHRwb3NpdGlvbi5sZW5ndGg7bisrKWkudGV4dHBvc2l0aW9uW25dPW0oaS50ZXh0cG9zaXRpb25bbl0pO2Vsc2UgaS50ZXh0cG9zaXRpb24mJihpLnRleHRwb3NpdGlvbj1tKGkudGV4dHBvc2l0aW9uKSk7dmFyIHA9YS5nZXRNb2R1bGUoaSk7aWYocCYmcC5jb2xvcmJhcil7dmFyIHg9cC5jb2xvcmJhci5jb250YWluZXIsYj14P2lbeF06aTtiJiZiLmNvbG9yc2NhbGUmJigiWUlHbkJ1Ij09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT0iWWxHbkJ1IiksIllJT3JSZCI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9IllsT3JSZCIpKX1pZigic3VyZmFjZSI9PT1pLnR5cGUmJm8uaXNQbGFpbk9iamVjdChpLmNvbnRvdXJzKSl7dmFyIF89WyJ4IiwieSIsInoiXTtmb3Iobj0wO248Xy5sZW5ndGg7bisrKXt2YXIgdz1pLmNvbnRvdXJzW19bbl1dO28uaXNQbGFpbk9iamVjdCh3KSYmKHcuaGlnaGxpZ2h0Q29sb3ImJih3LmhpZ2hsaWdodGNvbG9yPXcuaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHcuaGlnaGxpZ2h0Q29sb3IpLHcuaGlnaGxpZ2h0V2lkdGgmJih3LmhpZ2hsaWdodHdpZHRoPXcuaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHcuaGlnaGxpZ2h0V2lkdGgpKX19aWYoImNhbmRsZXN0aWNrIj09PWkudHlwZXx8Im9obGMiPT09aS50eXBlKXt2YXIgaz0hMSE9PShpLmluY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLFQ9ITEhPT0oaS5kZWNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxBPWcoaS5pbmNyZWFzaW5nKSxNPWcoaS5kZWNyZWFzaW5nKTtpZighMSE9PUEmJiExIT09TSl7dmFyIFM9dihBLE0sayxUKTtTJiYoaS5uYW1lPVMpfWVsc2UhQSYmIU18fGkubmFtZXx8KGkubmFtZT1BfHxNKX1pZihBcnJheS5pc0FycmF5KGkudHJhbnNmb3Jtcykpe3ZhciBFPWkudHJhbnNmb3Jtcztmb3Iobj0wO248RS5sZW5ndGg7bisrKXt2YXIgQz1FW25dO2lmKG8uaXNQbGFpbk9iamVjdChDKSlzd2l0Y2goQy50eXBlKXtjYXNlImZpbHRlciI6Qy5maWx0ZXJzcmMmJihDLnRhcmdldD1DLmZpbHRlcnNyYyxkZWxldGUgQy5maWx0ZXJzcmMpLEMuY2FsZW5kYXImJihDLnZhbHVlY2FsZW5kYXJ8fChDLnZhbHVlY2FsZW5kYXI9Qy5jYWxlbmRhciksZGVsZXRlIEMuY2FsZW5kYXIpO2JyZWFrO2Nhc2UiZ3JvdXBieSI6aWYoQy5zdHlsZXM9Qy5zdHlsZXN8fEMuc3R5bGUsQy5zdHlsZXMmJiFBcnJheS5pc0FycmF5KEMuc3R5bGVzKSl7dmFyIEw9Qy5zdHlsZXMsej1PYmplY3Qua2V5cyhMKTtDLnN0eWxlcz1bXTtmb3IodmFyIE89MDtPPHoubGVuZ3RoO08rKylDLnN0eWxlcy5wdXNoKHt0YXJnZXQ6eltPXSx2YWx1ZTpMW3pbT11dfSl9fX19eShpLCJsaW5lIikmJmRlbGV0ZSBpLmxpbmUsIm1hcmtlciJpbiBpJiYoeShpLm1hcmtlciwibGluZSIpJiZkZWxldGUgaS5tYXJrZXIubGluZSx5KGksIm1hcmtlciIpJiZkZWxldGUgaS5tYXJrZXIpLGMuY2xlYW4oaSksaS5hdXRvYmlueCYmKGRlbGV0ZSBpLmF1dG9iaW54LGRlbGV0ZSBpLnhiaW5zKSxpLmF1dG9iaW55JiYoZGVsZXRlIGkuYXV0b2JpbnksZGVsZXRlIGkueWJpbnMpLGQoaSksaS5jb2xvcmJhciYmZChpLmNvbG9yYmFyKSxpLm1hcmtlciYmaS5tYXJrZXIuY29sb3JiYXImJmQoaS5tYXJrZXIuY29sb3JiYXIpLGkubGluZSYmaS5saW5lLmNvbG9yYmFyJiZkKGkubGluZS5jb2xvcmJhciksaS5hYXhpcyYmZChpLmFheGlzKSxpLmJheGlzJiZkKGkuYmF4aXMpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKG8uc3dhcEF0dHJzKHQsWyI/IiwiPzAiLCJkPyIsIj9iaW5zIiwibmJpbnM/IiwiYXV0b2Jpbj8iLCI/c3JjIiwiZXJyb3JfPyJdKSxBcnJheS5pc0FycmF5KHQueikmJkFycmF5LmlzQXJyYXkodC56WzBdKSYmKHQudHJhbnNwb3NlP2RlbGV0ZSB0LnRyYW5zcG9zZTp0LnRyYW5zcG9zZT0hMCksdC5lcnJvcl94JiZ0LmVycm9yX3kpe3ZhciByPXQuZXJyb3JfeSxuPSJjb3B5X3lzdHlsZSJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnModCxbImVycm9yXz8uY29weV95c3R5bGUiXSksbiYmby5zd2FwQXR0cnModCxbImVycm9yXz8uY29sb3IiLCJlcnJvcl8/LnRoaWNrbmVzcyIsImVycm9yXz8ud2lkdGgiXSl9aWYoInN0cmluZyI9PXR5cGVvZiB0LmhvdmVyaW5mbyl7dmFyIGk9dC5ob3ZlcmluZm8uc3BsaXQoIisiKTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKSJ4Ij09PWlbZV0/aVtlXT0ieSI6InkiPT09aVtlXSYmKGlbZV09IngiKTt0LmhvdmVyaW5mbz1pLmpvaW4oIisiKX19LHIuY29lcmNlVHJhY2VJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSlyZXR1cm5bZV07aWYoIUFycmF5LmlzQXJyYXkoZSl8fCFlLmxlbmd0aClyZXR1cm4gdC5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSk7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPVtdLGk9MDtpPGUubGVuZ3RoO2krKylvLmlzSW5kZXgoZVtpXSx0LmRhdGEubGVuZ3RoKT9yLnB1c2goZVtpXSk6by53YXJuKCJ0cmFjZSBpbmRleCAoIixlW2ldLCIpIGlzIG5vdCBhIG51bWJlciBvciBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHJ9cmV0dXJuIGV9LHIubWFuYWdlQXJyYXlDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Lm9iaixhPXQucGFydHMscz1hLmxlbmd0aCxsPWFbcy0xXSxjPW4obCk7aWYoYyYmbnVsbD09PWUpe3ZhciB1PWEuc2xpY2UoMCxzLTEpLmpvaW4oIi4iKTtvLm5lc3RlZFByb3BlcnR5KGksdSkuZ2V0KCkuc3BsaWNlKGwsMSl9ZWxzZSBjJiZ2b2lkIDA9PT10LmdldCgpPyh2b2lkIDA9PT10LmdldCgpJiYoclt0LmFzdHJdPW51bGwpLHQuc2V0KGUpKTp0LnNldChlKX07dmFyIHg9LyhcLlteXFtcXVwuXSt8XFtbXlxbXF1cLl0rXF0pJC87ZnVuY3Rpb24gYih0KXt2YXIgZT10LnNlYXJjaCh4KTtpZihlPjApcmV0dXJuIHQuc3Vic3RyKDAsZSl9ci5oYXNQYXJlbnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9YihlKTtyOyl7aWYociBpbiB0KXJldHVybiEwO3I9YihyKX1yZXR1cm4hMX07dmFyIF89WyJ4IiwieSIsInoiXTtyLmNsZWFyQXhpc1R5cGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9dC5fZnVsbERhdGFbbl0sYT0wO2E8MzthKyspe3ZhciBzPWYodCxpLF9bYV0pO2lmKHMmJiJsb2ciIT09cy50eXBlKXt2YXIgbD1zLl9uYW1lLGM9cy5faWQuc3Vic3RyKDEpO2lmKCJzY2VuZSI9PT1jLnN1YnN0cigwLDUpKXtpZih2b2lkIDAhPT1yW2NdKWNvbnRpbnVlO2w9YysiLiIrbH12YXIgdT1sKyIudHlwZSI7dm9pZCAwPT09cltsXSYmdm9pZCAwPT09clt1XSYmby5uZXN0ZWRQcm9wZXJ0eSh0LmxheW91dCx1KS5zZXQobnVsbCl9fX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi9saWIiOjcwMCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NTEsIi4uL3Bsb3RzL3Bsb3RzIjo4MTAsIi4uL3JlZ2lzdHJ5Ijo4MjksImZhc3QtaXNudW1lcmljIjoyMjEsImdsLW1hdDQvZnJvbVF1YXQiOjI1OH1dLDczMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Bsb3RfYXBpIik7ci5wbG90PW4ucGxvdCxyLm5ld1Bsb3Q9bi5uZXdQbG90LHIucmVzdHlsZT1uLnJlc3R5bGUsci5yZWxheW91dD1uLnJlbGF5b3V0LHIucmVkcmF3PW4ucmVkcmF3LHIudXBkYXRlPW4udXBkYXRlLHIuX2d1aVJlc3R5bGU9bi5fZ3VpUmVzdHlsZSxyLl9ndWlSZWxheW91dD1uLl9ndWlSZWxheW91dCxyLl9ndWlVcGRhdGU9bi5fZ3VpVXBkYXRlLHIuX3N0b3JlRGlyZWN0R1VJRWRpdD1uLl9zdG9yZURpcmVjdEdVSUVkaXQsci5yZWFjdD1uLnJlYWN0LHIuZXh0ZW5kVHJhY2VzPW4uZXh0ZW5kVHJhY2VzLHIucHJlcGVuZFRyYWNlcz1uLnByZXBlbmRUcmFjZXMsci5hZGRUcmFjZXM9bi5hZGRUcmFjZXMsci5kZWxldGVUcmFjZXM9bi5kZWxldGVUcmFjZXMsci5tb3ZlVHJhY2VzPW4ubW92ZVRyYWNlcyxyLnB1cmdlPW4ucHVyZ2Usci5hZGRGcmFtZXM9bi5hZGRGcmFtZXMsci5kZWxldGVGcmFtZXM9bi5kZWxldGVGcmFtZXMsci5hbmltYXRlPW4uYW5pbWF0ZSxyLnNldFBsb3RDb25maWc9bi5zZXRQbG90Q29uZmlnLHIudG9JbWFnZT10KCIuL3RvX2ltYWdlIiksci52YWxpZGF0ZT10KCIuL3ZhbGlkYXRlIiksci5kb3dubG9hZEltYWdlPXQoIi4uL3NuYXBzaG90L2Rvd25sb2FkIik7dmFyIGk9dCgiLi90ZW1wbGF0ZV9hcGkiKTtyLm1ha2VUZW1wbGF0ZT1pLm1ha2VUZW1wbGF0ZSxyLnZhbGlkYXRlVGVtcGxhdGU9aS52YWxpZGF0ZVRlbXBsYXRlfSx7Ii4uL3NuYXBzaG90L2Rvd25sb2FkIjo4MzEsIi4vcGxvdF9hcGkiOjczNSwiLi90ZW1wbGF0ZV9hcGkiOjc0MCwiLi90b19pbWFnZSI6NzQxLCIuL3ZhbGlkYXRlIjo3NDJ9XSw3MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliL2lzX3BsYWluX29iamVjdCIpLGk9dCgiLi4vbGliL25vb3AiKSxhPXQoIi4uL2xpYi9sb2dnZXJzIiksbz10KCIuLi9saWIvc2VhcmNoIikuc29ydGVyQXNjLHM9dCgiLi4vcmVnaXN0cnkiKTtyLmNvbnRhaW5lckFycmF5TWF0Y2g9dCgiLi9jb250YWluZXJfYXJyYXlfbWF0Y2giKTt2YXIgbD1yLmlzQWRkVmFsPWZ1bmN0aW9uKHQpe3JldHVybiJhZGQiPT09dHx8bih0KX0sYz1yLmlzUmVtb3ZlVmFsPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dHx8InJlbW92ZSI9PT10fTtyLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxyLG4sdSl7dmFyIGY9ZS5hc3RyLGg9cy5nZXRDb21wb25lbnRNZXRob2QoZiwic3VwcGx5TGF5b3V0RGVmYXVsdHMiKSxwPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGYsImRyYXciKSxkPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGYsImRyYXdPbmUiKSxnPW4ucmVwbG90fHxuLnJlY2FsY3x8aD09PWl8fHA9PT1pLHY9dC5sYXlvdXQsbT10Ll9mdWxsTGF5b3V0O2lmKHJbIiJdKXtPYmplY3Qua2V5cyhyKS5sZW5ndGg+MSYmYS53YXJuKCJGdWxsIGFycmF5IGVkaXRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBlZGl0cyIsZik7dmFyIHk9clsiIl1bIiJdO2lmKGMoeSkpZS5zZXQobnVsbCk7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4gYS53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBhcnJheSBlZGl0IHZhbHVlIixmLHkpLCEwO2Uuc2V0KHkpfXJldHVybiFnJiYoaCh2LG0pLHAodCksITApfXZhciB4LGIsXyx3LGssVCxBLE0sUz1PYmplY3Qua2V5cyhyKS5tYXAoTnVtYmVyKS5zb3J0KG8pLEU9ZS5nZXQoKSxDPUV8fFtdLEw9dShtLGYpLmdldCgpLHo9W10sTz0tMSxJPUMubGVuZ3RoO2Zvcih4PTA7eDxTLmxlbmd0aDt4KyspaWYodz1yW189U1t4XV0saz1PYmplY3Qua2V5cyh3KSxUPXdbIiJdLEE9bChUKSxfPDB8fF8+Qy5sZW5ndGgtKEE/MDoxKSlhLndhcm4oImluZGV4IG91dCBvZiByYW5nZSIsZixfKTtlbHNlIGlmKHZvaWQgMCE9PVQpay5sZW5ndGg+MSYmYS53YXJuKCJJbnNlcnRpb24gJiByZW1vdmFsIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlZGl0cyB0byB0aGUgc2FtZSBpbmRleC4iLGYsXyksYyhUKT96LnB1c2goXyk6QT8oImFkZCI9PT1UJiYoVD17fSksQy5zcGxpY2UoXywwLFQpLEwmJkwuc3BsaWNlKF8sMCx7fSkpOmEud2FybigiVW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IGVkaXQgdmFsdWUiLGYsXyxUKSwtMT09PU8mJihPPV8pO2Vsc2UgZm9yKGI9MDtiPGsubGVuZ3RoO2IrKylNPWYrIlsiK18rIl0uIix1KENbX10sa1tiXSxNKS5zZXQod1trW2JdXSk7Zm9yKHg9ei5sZW5ndGgtMTt4Pj0wO3gtLSlDLnNwbGljZSh6W3hdLDEpLEwmJkwuc3BsaWNlKHpbeF0sMSk7aWYoQy5sZW5ndGg/RXx8ZS5zZXQoQyk6ZS5zZXQobnVsbCksZylyZXR1cm4hMTtpZihoKHYsbSksZCE9PWkpe3ZhciBEO2lmKC0xPT09TylEPVM7ZWxzZXtmb3IoST1NYXRoLm1heChDLmxlbmd0aCxJKSxEPVtdLHg9MDt4PFMubGVuZ3RoJiYhKChfPVNbeF0pPj1PKTt4KyspRC5wdXNoKF8pO2Zvcih4PU87eDxJO3grKylELnB1c2goeCl9Zm9yKHg9MDt4PEQubGVuZ3RoO3grKylkKHQsRFt4XSl9ZWxzZSBwKHQpO3JldHVybiEwfX0seyIuLi9saWIvaXNfcGxhaW5fb2JqZWN0Ijo3MDEsIi4uL2xpYi9sb2dnZXJzIjo3MDQsIi4uL2xpYi9ub29wIjo3MDksIi4uL2xpYi9zZWFyY2giOjcxOSwiLi4vcmVnaXN0cnkiOjgyOSwiLi9jb250YWluZXJfYXJyYXlfbWF0Y2giOjczMH1dLDczNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoImhhcy1ob3ZlciIpLG89dCgiLi4vbGliIikscz1vLm5lc3RlZFByb3BlcnR5LGw9dCgiLi4vbGliL2V2ZW50cyIpLGM9dCgiLi4vbGliL3F1ZXVlIiksdT10KCIuLi9yZWdpc3RyeSIpLGY9dCgiLi9wbG90X3NjaGVtYSIpLGg9dCgiLi4vcGxvdHMvcGxvdHMiKSxwPXQoIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeSIpLGQ9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHY9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLG09dCgiLi4vY29tcG9uZW50cy9jb2xvcmJhci9jb25uZWN0IikseT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3QiKS5pbml0SW50ZXJhY3Rpb25zLHg9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxiPXQoIi4uL2xpYi9zdmdfdGV4dF91dGlscyIpLF89dCgiLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LHc9dCgiLi9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcsaz10KCIuL21hbmFnZV9hcnJheXMiKSxUPXQoIi4vaGVscGVycyIpLEE9dCgiLi9zdWJyb3V0aW5lcyIpLE09dCgiLi9lZGl0X3R5cGVzIiksUz10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuQVhfTkFNRV9QQVRURVJOLEU9MDtmdW5jdGlvbiBDKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50LS06dC5lbWl0KCJwbG90bHlfYWZ0ZXJwbG90Iil9ZnVuY3Rpb24gTCh0LGUpe3RyeXt0Ll9mdWxsTGF5b3V0Ll9wYXBlci5zdHlsZSgiYmFja2dyb3VuZCIsZSl9Y2F0Y2godCl7by5lcnJvcih0KX19ZnVuY3Rpb24geih0LGUpe0wodCx2LmNvbWJpbmUoZSwid2hpdGUiKSl9ZnVuY3Rpb24gTyh0LGUpe2lmKCF0Ll9jb250ZXh0KXt0Ll9jb250ZXh0PW8uZXh0ZW5kRGVlcCh7fSx3KTt2YXIgcj1uLnNlbGVjdCgiYmFzZSIpO3QuX2NvbnRleHQuX2Jhc2VVcmw9ci5zaXplKCkmJnIuYXR0cigiaHJlZiIpP3dpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF06IiJ9dmFyIGkscyxsLGM9dC5fY29udGV4dDtpZihlKXtmb3Iocz1PYmplY3Qua2V5cyhlKSxpPTA7aTxzLmxlbmd0aDtpKyspImVkaXRhYmxlIiE9PShsPXNbaV0pJiYiZWRpdHMiIT09bCYmbCBpbiBjJiYoInNldEJhY2tncm91bmQiPT09bCYmIm9wYXF1ZSI9PT1lW2xdP2NbbF09ejpjW2xdPWVbbF0pO2UucGxvdDNkUGl4ZWxSYXRpbyYmIWMucGxvdEdsUGl4ZWxSYXRpbyYmKGMucGxvdEdsUGl4ZWxSYXRpbz1jLnBsb3QzZFBpeGVsUmF0aW8pO3ZhciB1PWUuZWRpdGFibGU7aWYodm9pZCAwIT09dSlmb3IoYy5lZGl0YWJsZT11LHM9T2JqZWN0LmtleXMoYy5lZGl0cyksaT0wO2k8cy5sZW5ndGg7aSsrKWMuZWRpdHNbc1tpXV09dTtpZihlLmVkaXRzKWZvcihzPU9iamVjdC5rZXlzKGUuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKykobD1zW2ldKWluIGMuZWRpdHMmJihjLmVkaXRzW2xdPWUuZWRpdHNbbF0pO2MuX2V4cG9ydGVkUGxvdD1lLl9leHBvcnRlZFBsb3R9Yy5zdGF0aWNQbG90JiYoYy5lZGl0YWJsZT0hMSxjLmVkaXRzPXt9LGMuYXV0b3NpemFibGU9ITEsYy5zY3JvbGxab29tPSExLGMuZG91YmxlQ2xpY2s9ITEsYy5zaG93VGlwcz0hMSxjLnNob3dMaW5rPSExLGMuZGlzcGxheU1vZGVCYXI9ITEpLCJob3ZlciIhPT1jLmRpc3BsYXlNb2RlQmFyfHxhfHwoYy5kaXNwbGF5TW9kZUJhcj0hMCksInRyYW5zcGFyZW50IiE9PWMuc2V0QmFja2dyb3VuZCYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0QmFja2dyb3VuZHx8KGMuc2V0QmFja2dyb3VuZD1MKSxjLl9oYXNaZXJvSGVpZ2h0PWMuX2hhc1plcm9IZWlnaHR8fDA9PT10LmNsaWVudEhlaWdodCxjLl9oYXNaZXJvV2lkdGg9Yy5faGFzWmVyb1dpZHRofHwwPT09dC5jbGllbnRXaWR0aDt2YXIgZj1jLnNjcm9sbFpvb20saD1jLl9zY3JvbGxab29tPXt9O2lmKCEwPT09ZiloLmNhcnRlc2lhbj0xLGguZ2wzZD0xLGguZ2VvPTEsaC5tYXBib3g9MTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZil7dmFyIHA9Zi5zcGxpdCgiKyIpO2ZvcihpPTA7aTxwLmxlbmd0aDtpKyspaFtwW2ldXT0xfWVsc2UhMSE9PWYmJihoLmdsM2Q9MSxoLmdlbz0xLGgubWFwYm94PTEpfWZ1bmN0aW9uIEkodCxlKXt2YXIgcixuLGk9ZSsxLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKykobj10W3JdKTwwP2EucHVzaChpK24pOmEucHVzaChuKTtyZXR1cm4gYX1mdW5jdGlvbiBEKHQsZSxyKXt2YXIgbixpO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe2lmKChpPWVbbl0pIT09cGFyc2VJbnQoaSwxMCkpdGhyb3cgbmV3IEVycm9yKCJhbGwgdmFsdWVzIGluICIrcisiIG11c3QgYmUgaW50ZWdlcnMiKTtpZihpPj10LmRhdGEubGVuZ3RofHxpPC10LmRhdGEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyKyIgbXVzdCBiZSB2YWxpZCBpbmRpY2VzIGZvciBnZC5kYXRhLiIpO2lmKGUuaW5kZXhPZihpLG4rMSk+LTF8fGk+PTAmJmUuaW5kZXhPZigtdC5kYXRhLmxlbmd0aCtpKT4tMXx8aTwwJiZlLmluZGV4T2YodC5kYXRhLmxlbmd0aCtpKT4tMSl0aHJvdyBuZXcgRXJyb3IoImVhY2ggaW5kZXggaW4gIityKyIgbXVzdCBiZSB1bmlxdWUuIil9fWZ1bmN0aW9uIFAodCxlLHIpe2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiY3VycmVudEluZGljZXMgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4iKTtpZihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLEQodCxlLCJjdXJyZW50SW5kaWNlcyIpLCJ1bmRlZmluZWQiPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSwidW5kZWZpbmVkIiE9dHlwZW9mIHImJkQodCxyLCJuZXdJbmRpY2VzIiksInVuZGVmaW5lZCIhPXR5cGVvZiByJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3VycmVudCBhbmQgbmV3IGluZGljZXMgbXVzdCBiZSBvZiBlcXVhbCBsZW5ndGguIil9ZnVuY3Rpb24gUih0LGUscixuLGEpeyFmdW5jdGlvbih0LGUscixuKXt2YXIgaT1vLmlzUGxhaW5PYmplY3Qobik7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpdGhyb3cgbmV3IEVycm9yKCJ1cGRhdGUgbXVzdCBiZSBhIGtleTp2YWx1ZSBvYmplY3QiKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2VycyIpO2Zvcih2YXIgYSBpbiBEKHQsciwiaW5kaWNlcyIpLGUpe2lmKCFBcnJheS5pc0FycmF5KGVbYV0pfHxlW2FdLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlICIrYSsiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoIik7aWYoaSYmKCEoYSBpbiBuKXx8IUFycmF5LmlzQXJyYXkoblthXSl8fG5bYV0ubGVuZ3RoIT09ZVthXS5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdCIpfX0odCxlLHIsbik7Zm9yKHZhciBsPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGwsYyx1LGYsaD1vLmlzUGxhaW5PYmplY3QobikscD1bXTtmb3IodmFyIGQgaW4gQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPUkocix0LmRhdGEubGVuZ3RoLTEpLGUpZm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe2lmKGE9dC5kYXRhW3JbZ11dLGw9KGM9cyhhLGQpKS5nZXQoKSx1PWVbZF1bZ10sIW8uaXNBcnJheU9yVHlwZWRBcnJheSh1KSl0aHJvdyBuZXcgRXJyb3IoImF0dHJpYnV0ZTogIitkKyIgaW5kZXg6ICIrZysiIG11c3QgYmUgYW4gYXJyYXkiKTtpZighby5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGV4dGVuZCBtaXNzaW5nIG9yIG5vbi1hcnJheSBhdHRyaWJ1dGU6ICIrZCk7aWYobC5jb25zdHJ1Y3RvciE9PXUuY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIGFycmF5IHdpdGggYW4gYXJyYXkgb2YgYSBkaWZmZXJlbnQgdHlwZTogIitkKTtmPWg/bltkXVtnXTpuLGkoZil8fChmPS0xKSxwLnB1c2goe3Byb3A6Yyx0YXJnZXQ6bCxpbnNlcnQ6dSxtYXhwOk1hdGguZmxvb3IoZil9KX1yZXR1cm4gcH0odCxlLHIsbiksYz17fSx1PXt9LGY9MDtmPGwubGVuZ3RoO2YrKyl7dmFyIGg9bFtmXS5wcm9wLHA9bFtmXS5tYXhwLGQ9YShsW2ZdLnRhcmdldCxsW2ZdLmluc2VydCxwKTtoLnNldChkWzBdKSxBcnJheS5pc0FycmF5KGNbaC5hc3RyXSl8fChjW2guYXN0cl09W10pLGNbaC5hc3RyXS5wdXNoKGRbMV0pLEFycmF5LmlzQXJyYXkodVtoLmFzdHJdKXx8KHVbaC5hc3RyXT1bXSksdVtoLmFzdHJdLnB1c2gobFtmXS50YXJnZXQubGVuZ3RoKX1yZXR1cm57dXBkYXRlOmMsbWF4UG9pbnRzOnV9fWZ1bmN0aW9uIEYodCxlKXt2YXIgcj1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aCk7cmV0dXJuIHIuc2V0KHQpLHIuc2V0KGUsdC5sZW5ndGgpLHJ9ZnVuY3Rpb24gQih0LGUsbixpKXt0PW8uZ2V0R3JhcGhEaXYodCksVC5jbGVhclByb21pc2VRdWV1ZSh0KTt2YXIgYT17fTtpZigic3RyaW5nIj09dHlwZW9mIGUpYVtlXT1uO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKCJSZXN0eWxlIGZhaWwuIixlLG4saSksUHJvbWlzZS5yZWplY3QoKTthPW8uZXh0ZW5kRmxhdCh7fSxlKSx2b2lkIDA9PT1pJiYoaT1uKX1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBzPVQuY29lcmNlVHJhY2VJbmRpY2VzKHQsaSksbD1VKHQsYSxzKSx1PWwuZmxhZ3M7dS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApLHUuY2xlYXJBeGlzVHlwZXMmJlQuY2xlYXJBeGlzVHlwZXModCxzLHt9KTt2YXIgZj1bXTt1LmZ1bGxSZXBsb3Q/Zi5wdXNoKHIucGxvdCk6KGYucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLGguc3VwcGx5RGVmYXVsdHModCksdS5tYXJrZXJTaXplJiYoaC5kb0NhbGNkYXRhKHQpLFkoZikpLHUuc3R5bGUmJmYucHVzaChBLmRvVHJhY2VTdHlsZSksdS5jb2xvcmJhcnMmJmYucHVzaChBLmRvQ29sb3JCYXJzKSxmLnB1c2goQykpLGYucHVzaChoLnJlaG92ZXIpLGMuYWRkKHQsQixbdCxsLnVuZG9pdCxsLnRyYWNlc10sQixbdCxsLnJlZG9pdCxsLnRyYWNlc10pO3ZhciBwPW8uc3luY09yQXN5bmMoZix0KTtyZXR1cm4gcCYmcC50aGVufHwocD1Qcm9taXNlLnJlc29sdmUoKSkscC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLGwuZXZlbnREYXRhKSx0fSl9ZnVuY3Rpb24gTih0KXtyZXR1cm4gdm9pZCAwPT09dD9udWxsOnR9ZnVuY3Rpb24gaih0LGUpe3JldHVybiBlP2Z1bmN0aW9uKGUscixuKXt2YXIgaT1zKGUsciksYT1pLnNldDtyZXR1cm4gaS5zZXQ9ZnVuY3Rpb24oZSl7Vigobnx8IiIpK3IsaS5nZXQoKSxlLHQpLGEoZSl9LGl9OnN9ZnVuY3Rpb24gVih0LGUscixuKXtpZihBcnJheS5pc0FycmF5KGUpfHxBcnJheS5pc0FycmF5KHIpKWZvcih2YXIgaT1BcnJheS5pc0FycmF5KGUpP2U6W10sYT1BcnJheS5pc0FycmF5KHIpP3I6W10scz1NYXRoLm1heChpLmxlbmd0aCxhLmxlbmd0aCksbD0wO2w8cztsKyspVih0KyJbIitsKyJdIixpW2xdLGFbbF0sbik7ZWxzZSBpZihvLmlzUGxhaW5PYmplY3QoZSl8fG8uaXNQbGFpbk9iamVjdChyKSl7dmFyIGM9by5pc1BsYWluT2JqZWN0KGUpP2U6e30sdT1vLmlzUGxhaW5PYmplY3Qocik/cjp7fSxmPW8uZXh0ZW5kRmxhdCh7fSxjLHUpO2Zvcih2YXIgaCBpbiBmKVYodCsiLiIraCxjW2hdLHVbaF0sbil9ZWxzZSB2b2lkIDA9PT1uW3RdJiYoblt0XT1OKGUpKX1mdW5jdGlvbiBVKHQsZSxyKXt2YXIgbixpPXQuX2Z1bGxMYXlvdXQsYT10Ll9mdWxsRGF0YSxsPXQuZGF0YSxjPWkuX2d1aUVkaXRpbmcscD1qKGkuX3ByZUdVSSxjKSxnPW8uZXh0ZW5kRGVlcEFsbCh7fSxlKTtxKGUpO3ZhciB2LG09TS50cmFjZUZsYWdzKCkseT17fSx4PXt9O2Z1bmN0aW9uIGIoKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBfKHQpe3ZhciBlPWQuaWQybmFtZSh0KTstMT09PXYuaW5kZXhPZihlKSYmdi5wdXNoKGUpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIkxBWU9VVCIrdCsiLmF1dG9yYW5nZSJ9ZnVuY3Rpb24gayh0KXtyZXR1cm4iTEFZT1VUIit0KyIucmFuZ2UifWZ1bmN0aW9uIEEodCl7Zm9yKHZhciBlPXQ7ZTxhLmxlbmd0aDtlKyspaWYoYVtlXS5faW5wdXQ9PT1sW3RdKXJldHVybiBhW2VdfWZ1bmN0aW9uIFMobixhLG8pe2lmKEFycmF5LmlzQXJyYXkobikpbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1ModCxhLG8pfSk7ZWxzZSBpZighKG4gaW4gZXx8VC5oYXNQYXJlbnQoZSxuKSkpe3ZhciBzO2lmKCJMQVlPVVQiPT09bi5zdWJzdHIoMCw2KSlzPXAodC5sYXlvdXQsbi5yZXBsYWNlKCJMQVlPVVQiLCIiKSk7ZWxzZXt2YXIgdT1yW29dO3M9aihpLl90cmFjZVByZUdVSVtBKHUpLl9mdWxsSW5wdXQudWlkXSxjKShsW3VdLG4pfW4gaW4geHx8KHhbbl09YigpKSx2b2lkIDA9PT14W25dW29dJiYoeFtuXVtvXT1OKHMuZ2V0KCkpKSx2b2lkIDAhPT1hJiZzLnNldChhKX19ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV1bdF19fWZ1bmN0aW9uIEModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuITE9PT1lP2FbcltuXV1bdF06bnVsbH19Zm9yKHZhciBMIGluIGUpe2lmKFQuaGFzUGFyZW50KGUsTCkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2V0ICIrTCsiIGFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTt2YXIgeixPLEksRCxQLFIsRj1lW0xdO2lmKCJhdXRvYmlueCIhPT1MJiYiYXV0b2JpbnkiIT09THx8KEw9TC5jaGFyQXQoTC5sZW5ndGgtMSkrImJpbnMiLEY9QXJyYXkuaXNBcnJheShGKT9GLm1hcChDKEwpKTohMT09PUY/ci5tYXAoRShMKSk6bnVsbCkseVtMXT1GLCJMQVlPVVQiIT09TC5zdWJzdHIoMCw2KSl7Zm9yKHhbTF09YigpLG49MDtuPHIubGVuZ3RoO24rKyl7aWYoej1sW3Jbbl1dLE89QShyW25dKSxEPShJPWooaS5fdHJhY2VQcmVHVUlbTy5fZnVsbElucHV0LnVpZF0sYykoeixMKSkuZ2V0KCksdm9pZCAwIT09KFA9QXJyYXkuaXNBcnJheShGKT9GW24lRi5sZW5ndGhdOkYpKXt2YXIgQj1JLnBhcnRzW0kucGFydHMubGVuZ3RoLTFdLFY9TC5zdWJzdHIoMCxMLmxlbmd0aC1CLmxlbmd0aC0xKSxVPVY/VisiLiI6IiIsSD1WP3MoTyxWKS5nZXQoKTpPO2lmKChSPWYuZ2V0VHJhY2VWYWxPYmplY3QoTyxJLnBhcnRzKSkmJlIuaW1wbGllZEVkaXRzJiZudWxsIT09UClmb3IodmFyIEcgaW4gUi5pbXBsaWVkRWRpdHMpUyhvLnJlbGF0aXZlQXR0cihMLEcpLFIuaW1wbGllZEVkaXRzW0ddLG4pO2Vsc2UgaWYoInRoaWNrbmVzc21vZGUiIT09QiYmImxlbm1vZGUiIT09Qnx8RD09PVB8fCJmcmFjdGlvbiIhPT1QJiYicGl4ZWxzIiE9PVB8fCFIKXtpZigidHlwZSI9PT1MJiYicGllIj09PVAhPSgicGllIj09PUQpKXt2YXIgWT0ieCIsVz0ieSI7ImJhciIhPT1QJiYiYmFyIiE9PUR8fCJoIiE9PXoub3JpZW50YXRpb258fChZPSJ5IixXPSJ4Iiksby5zd2FwQXR0cnMoeixbIj8iLCI/c3JjIl0sImxhYmVscyIsWSksby5zd2FwQXR0cnMoeixbImQ/IiwiPzAiXSwibGFiZWwiLFkpLG8uc3dhcEF0dHJzKHosWyI/IiwiP3NyYyJdLCJ2YWx1ZXMiLFcpLCJwaWUiPT09RD8ocyh6LCJtYXJrZXIuY29sb3IiKS5zZXQocyh6LCJtYXJrZXIuY29sb3JzIikuZ2V0KCkpLGkuX3BpZWxheWVyLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpKTp1LnRyYWNlSXMoeiwiY2FydGVzaWFuIikmJnMoeiwibWFya2VyLmNvbG9ycyIpLnNldChzKHosIm1hcmtlci5jb2xvciIpLmdldCgpKX19ZWxzZXt2YXIgWD1pLl9zaXplLFo9SC5vcmllbnQsJD0idG9wIj09PVp8fCJib3R0b20iPT09WjtpZigidGhpY2tuZXNzbW9kZSI9PT1CKXt2YXIgSj0kP1guaDpYLnc7UyhVKyJ0aGlja25lc3MiLEgudGhpY2tuZXNzKigiZnJhY3Rpb24iPT09UD8xL0o6Siksbil9ZWxzZXt2YXIgSz0kP1gudzpYLmg7UyhVKyJsZW4iLEgubGVuKigiZnJhY3Rpb24iPT09UD8xL0s6Syksbil9fXhbTF1bbl09TihEKTtpZigtMSE9PVsic3dhcHh5Iiwic3dhcHh5YXhlcyIsIm9yaWVudGF0aW9uIiwib3JpZW50YXRpb25heGVzIl0uaW5kZXhPZihMKSl7aWYoIm9yaWVudGF0aW9uIj09PUwpe0kuc2V0KFApO3ZhciBRPXoueCYmIXoueT8iaCI6InYiO2lmKChJLmdldCgpfHxRKT09PU8ub3JpZW50YXRpb24pY29udGludWV9ZWxzZSJvcmllbnRhdGlvbmF4ZXMiPT09TCYmKHoub3JpZW50YXRpb249e3Y6ImgiLGg6InYifVtPLm9yaWVudGF0aW9uXSk7VC5zd2FwWFlEYXRhKHopLG0uY2FsYz1tLmNsZWFyQXhpc1R5cGVzPSEwfWVsc2UtMSE9PWguZGF0YUFycmF5Q29udGFpbmVycy5pbmRleE9mKEkucGFydHNbMF0pPyhULm1hbmFnZUFycmF5Q29udGFpbmVycyhJLFAseCksbS5jYWxjPSEwKTooUj9SLmFycmF5T2smJiF1LnRyYWNlSXMoTywicmVnbCIpJiYoby5pc0FycmF5T3JUeXBlZEFycmF5KFApfHxvLmlzQXJyYXlPclR5cGVkQXJyYXkoRCkpP20uY2FsYz0hMDpNLnVwZGF0ZShtLFIpOm0uY2FsYz0hMCxJLnNldChQKSl9fWlmKC0xIT09WyJzd2FweHlheGVzIiwib3JpZW50YXRpb25heGVzIl0uaW5kZXhPZihMKSYmZC5zd2FwKHQsciksIm9yaWVudGF0aW9uYXhlcyI9PT1MKXt2YXIgdHQ9cyh0LmxheW91dCwiaG92ZXJtb2RlIik7IngiPT09dHQuZ2V0KCk/dHQuc2V0KCJ5Iik6InkiPT09dHQuZ2V0KCkmJnR0LnNldCgieCIpfWlmKC0xIT09WyJvcmllbnRhdGlvbiIsInR5cGUiXS5pbmRleE9mKEwpKXtmb3Iodj1bXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBldD1sW3Jbbl1dO3UudHJhY2VJcyhldCwiY2FydGVzaWFuIikmJihfKGV0LnhheGlzfHwieCIpLF8oZXQueWF4aXN8fCJ5IikpfVModi5tYXAodyksITAsMCksUyh2Lm1hcChrKSxbMCwxXSwwKX19ZWxzZSBJPXAodC5sYXlvdXQsTC5yZXBsYWNlKCJMQVlPVVQiLCIiKSkseFtMXT1bTihJLmdldCgpKV0sSS5zZXQoQXJyYXkuaXNBcnJheShGKT9GWzBdOkYpLG0uY2FsYz0hMH1yZXR1cm4obS5jYWxjfHxtLnBsb3QpJiYobS5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6bSx1bmRvaXQ6eCxyZWRvaXQ6eSx0cmFjZXM6cixldmVudERhdGE6by5leHRlbmREZWVwTm9BcnJheXMoW10sW2cscl0pfX1mdW5jdGlvbiBxKHQpe3ZhciBlLHIsbixpPW8uY291bnRlclJlZ2V4KCJheGlzIiwiLnRpdGxlIiwhMSwhMSksYT0vY29sb3JiYXJcLnRpdGxlJC8scz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKXI9c1tlXSxuPXRbcl0sInRpdGxlIiE9PXImJiFpLnRlc3QocikmJiFhLnRlc3Qocil8fCJzdHJpbmciIT10eXBlb2YgbiYmIm51bWJlciIhPXR5cGVvZiBuP3IuaW5kZXhPZigidGl0bGVmb250Iik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVmb250IiwidGl0bGUuZm9udCIpKTpyLmluZGV4T2YoInRpdGxlcG9zaXRpb24iKT4tMT9sKHIsci5yZXBsYWNlKCJ0aXRsZXBvc2l0aW9uIiwidGl0bGUucG9zaXRpb24iKSk6ci5pbmRleE9mKCJ0aXRsZXNpZGUiKT4tMT9sKHIsci5yZXBsYWNlKCJ0aXRsZXNpZGUiLCJ0aXRsZS5zaWRlIikpOnIuaW5kZXhPZigidGl0bGVvZmZzZXQiKT4tMSYmbChyLHIucmVwbGFjZSgidGl0bGVvZmZzZXQiLCJ0aXRsZS5vZmZzZXQiKSk6bChyLHIucmVwbGFjZSgidGl0bGUiLCJ0aXRsZS50ZXh0IikpO2Z1bmN0aW9uIGwoZSxyKXt0W3JdPXRbZV0sZGVsZXRlIHRbZV19fWZ1bmN0aW9uIEgodCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxULmNsZWFyUHJvbWlzZVF1ZXVlKHQpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7dmFyIG49e307aWYoInN0cmluZyI9PXR5cGVvZiBlKW5bZV09cjtlbHNle2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpcmV0dXJuIG8ud2FybigiUmVsYXlvdXQgZmFpbC4iLGUsciksUHJvbWlzZS5yZWplY3QoKTtuPW8uZXh0ZW5kRmxhdCh7fSxlKX1PYmplY3Qua2V5cyhuKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBpPSQodCxuKSxhPWkuZmxhZ3M7YS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApO3ZhciBzPVtoLnByZXZpb3VzUHJvbWlzZXNdO2EubGF5b3V0UmVwbG90P3MucHVzaChBLmxheW91dFJlcGxvdCk6T2JqZWN0LmtleXMobikubGVuZ3RoJiYoRyh0LGEsaSl8fGguc3VwcGx5RGVmYXVsdHModCksYS5sZWdlbmQmJnMucHVzaChBLmRvTGVnZW5kKSxhLmxheW91dHN0eWxlJiZzLnB1c2goQS5sYXlvdXRTdHlsZXMpLGEuYXhyYW5nZSYmWShzLGkucmFuZ2VzQWx0ZXJlZCksYS50aWNrcyYmcy5wdXNoKEEuZG9UaWNrc1JlbGF5b3V0KSxhLm1vZGViYXImJnMucHVzaChBLmRvTW9kZUJhciksYS5jYW1lcmEmJnMucHVzaChBLmRvQ2FtZXJhKSxzLnB1c2goQykpLHMucHVzaChoLnJlaG92ZXIpLGMuYWRkKHQsSCxbdCxpLnVuZG9pdF0sSCxbdCxpLnJlZG9pdF0pO3ZhciBsPW8uc3luY09yQXN5bmMocyx0KTtyZXR1cm4gbCYmbC50aGVufHwobD1Qcm9taXNlLnJlc29sdmUodCkpLGwudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZWxheW91dCIsaS5ldmVudERhdGEpLHR9KX1mdW5jdGlvbiBHKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0O2lmKCFlLmF4cmFuZ2UpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoImF4cmFuZ2UiIT09aSYmZVtpXSlyZXR1cm4hMTtmb3IodmFyIGEgaW4gci5yYW5nZXNBbHRlcmVkKXt2YXIgbz1kLmlkMm5hbWUoYSkscz10LmxheW91dFtvXSxsPW5bb107aWYobC5hdXRvcmFuZ2U9cy5hdXRvcmFuZ2UsbC5yYW5nZT1zLnJhbmdlLnNsaWNlKCksbC5jbGVhblJhbmdlKCksbC5fbWF0Y2hHcm91cClmb3IodmFyIGMgaW4gbC5fbWF0Y2hHcm91cClpZihjIT09YSl7dmFyIHU9bltkLmlkMm5hbWUoYyldO3UuYXV0b3JhbmdlPWwuYXV0b3JhbmdlLHUucmFuZ2U9bC5yYW5nZS5zbGljZSgpLHUuX2lucHV0LnJhbmdlPWwucmFuZ2Uuc2xpY2UoKX19cmV0dXJuITB9ZnVuY3Rpb24gWSh0LGUpe3ZhciByPWU/ZnVuY3Rpb24odCl7dmFyIHI9W10sbj0hMDtmb3IodmFyIGkgaW4gZSl7dmFyIGE9ZC5nZXRGcm9tSWQodCxpKTtpZihyLnB1c2goaSksYS5fbWF0Y2hHcm91cClmb3IodmFyIG8gaW4gYS5fbWF0Y2hHcm91cCllW29dfHxyLnB1c2gobyk7YS5hdXRvbWFyZ2luJiYobj0hMSl9cmV0dXJuIGQuZHJhdyh0LHIse3NraXBUaXRsZTpufSl9OmZ1bmN0aW9uKHQpe3JldHVybiBkLmRyYXcodCwicmVkcmF3Iil9O3QucHVzaChmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXI7ZSYmXyhlKX0sQS5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzLHIsQS5kcmF3RGF0YSxBLmZpbmFsRHJhdyl9ci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBzO2lmKHQ9by5nZXRHcmFwaERpdih0KSxsLmluaXQodCksby5pc1BsYWluT2JqZWN0KGUpKXt2YXIgYz1lO2U9Yy5kYXRhLGk9Yy5sYXlvdXQsYT1jLmNvbmZpZyxzPWMuZnJhbWVzfWlmKCExPT09bC50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlcGxvdCIsW2UsaSxhXSkpcmV0dXJuIFByb21pc2UucmVqZWN0KCk7ZXx8aXx8by5pc1Bsb3REaXYodCl8fG8ud2FybigiQ2FsbGluZyBQbG90bHkucGxvdCBhcyBpZiByZWRyYXdpbmcgYnV0IHRoaXMgY29udGFpbmVyIGRvZXNuJ3QgeWV0IGhhdmUgYSBwbG90LiIsdCksTyh0LGEpLGl8fChpPXt9KSxuLnNlbGVjdCh0KS5jbGFzc2VkKCJqcy1wbG90bHktcGxvdCIsITApLGcubWFrZVRlc3RlcigpLEFycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpfHwodC5fcHJvbWlzZXM9W10pO3ZhciBmPTA9PT0odC5kYXRhfHxbXSkubGVuZ3RoJiZBcnJheS5pc0FycmF5KGUpO2lmKEFycmF5LmlzQXJyYXkoZSkmJihULmNsZWFuRGF0YShlKSxmP3QuZGF0YT1lOnQuZGF0YS5wdXNoLmFwcGx5KHQuZGF0YSxlKSx0LmVtcHR5PSExKSx0LmxheW91dCYmIWZ8fCh0LmxheW91dD1ULmNsZWFuTGF5b3V0KGkpKSx0Ll9kcmFnZ2luZyYmIXQuX3RyYW5zaXRpb25pbmcpcmV0dXJuIHQuX3JlcGxvdFBlbmRpbmc9ITAsUHJvbWlzZS5yZWplY3QoKTt0Ll9yZXBsb3RQZW5kaW5nPSExLGguc3VwcGx5RGVmYXVsdHModCk7dmFyIHY9dC5fZnVsbExheW91dCx4PXYuX2hhcygiY2FydGVzaWFuIik7aWYoIXYuX2hhcygicG9sYXIiKSYmZSYmZVswXSYmZVswXS5yKXJldHVybiBvLmxvZygiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCEiKSxmdW5jdGlvbih0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKS5kYXRhKFswXSk7aS5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIgcGxvdGx5IiwhMCk7dmFyIGE9aS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIikuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLGEuaHRtbCgiIiksZSYmKHQuZGF0YT1lKTtyJiYodC5sYXlvdXQ9cik7cC5tYW5hZ2VyLmZpbGxMYXlvdXQodCksYS5zdHlsZSh7d2lkdGg6dC5fZnVsbExheW91dC53aWR0aCsicHgiLGhlaWdodDp0Ll9mdWxsTGF5b3V0LmhlaWdodCsicHgifSksdC5mcmFtZXdvcms9cC5tYW5hZ2VyLmZyYW1ld29yayh0KSx0LmZyYW1ld29yayh7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSxhLm5vZGUoKSksdC5mcmFtZXdvcmsuc2V0VW5kb1BvaW50KCk7dmFyIHM9dC5mcmFtZXdvcmsuc3ZnKCksbD0xLGM9dC5fZnVsbExheW91dC50aXRsZT90Ll9mdWxsTGF5b3V0LnRpdGxlLnRleHQ6IiI7IiIhPT1jJiZjfHwobD0wKTt2YXIgdT1mdW5jdGlvbigpe3RoaXMuY2FsbChiLmNvbnZlcnRUb1RzcGFucyx0KX0sZj1zLnNlbGVjdCgiLnRpdGxlLWdyb3VwIHRleHQiKS5jYWxsKHUpO2lmKHQuX2NvbnRleHQuZWRpdHMudGl0bGVUZXh0KXt2YXIgZD1vLl8odCwiQ2xpY2sgdG8gZW50ZXIgUGxvdCB0aXRsZSIpO2MmJmMhPT1kfHwobD0uMixmLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpkfSkudGV4dChkKS5zdHlsZSh7b3BhY2l0eTpsfSkub24oIm1vdXNlb3Zlci5vcGFjaXR5IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJvcGFjaXR5IiwxKX0pLm9uKCJtb3VzZW91dC5vcGFjaXR5IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxZTMpLnN0eWxlKCJvcGFjaXR5IiwwKX0pKTt2YXIgZz1mdW5jdGlvbigpe3RoaXMuY2FsbChiLm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKCJlZGl0IixmdW5jdGlvbihlKXt0LmZyYW1ld29yayh7bGF5b3V0Ont0aXRsZTp7dGV4dDplfX19KSx0aGlzLnRleHQoZSkuY2FsbCh1KSx0aGlzLmNhbGwoZyl9KS5vbigiY2FuY2VsIixmdW5jdGlvbigpe3ZhciB0PXRoaXMuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpO3RoaXMudGV4dCh0KS5jYWxsKHUpfSl9O2YuY2FsbChnKX1yZXR1cm4gdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsdC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yKSxoLmFkZExpbmtzKHQpLFByb21pc2UucmVzb2x2ZSgpfSh0LGUsaSk7di5fcmVwbG90dGluZz0hMCxmJiZsdCh0KSx0LmZyYW1ld29yayE9PWx0JiYodC5mcmFtZXdvcms9bHQsbHQodCkpLGcuaW5pdEdyYWRpZW50cyh0KSxmJiZkLnNhdmVTaG93U3Bpa2VJbml0aWFsKHQpO3ZhciBfPSF0LmNhbGNkYXRhfHx0LmNhbGNkYXRhLmxlbmd0aCE9PSh0Ll9mdWxsRGF0YXx8W10pLmxlbmd0aDtfJiZoLmRvQ2FsY2RhdGEodCk7Zm9yKHZhciB3PTA7dzx0LmNhbGNkYXRhLmxlbmd0aDt3KyspdC5jYWxjZGF0YVt3XVswXS50cmFjZT10Ll9mdWxsRGF0YVt3XTt0Ll9jb250ZXh0LnJlc3BvbnNpdmU/dC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcnx8KHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXI9ZnVuY3Rpb24oKXtoLnJlc2l6ZSh0KX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcikpOm8uY2xlYXJSZXNwb25zaXZlKHQpO3ZhciBrPUpTT04uc3RyaW5naWZ5KHYuX3NpemUpLE09MDtmdW5jdGlvbiBTKCl7dmFyIGUscixuLGk9dC5jYWxjZGF0YTtmb3IoaC5jbGVhckF1dG9NYXJnaW5JZHModCksQS5kcmF3TWFyZ2luUHVzaGVycyh0KSxkLmFsbG93QXV0b01hcmdpbih0KSxlPTA7ZTxpLmxlbmd0aDtlKyspe3ZhciBhPShuPShyPWlbZV0pWzBdLnRyYWNlKS5fbW9kdWxlLmNvbG9yYmFyOyEwPT09bi52aXNpYmxlJiZhP20odCxyLGEpOmguYXV0b01hcmdpbih0LCJjYiIrbi51aWQpfXJldHVybiBoLmRvQXV0b01hcmdpbih0KSxoLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gRSgpe3QuX3RyYW5zaXRpb25pbmd8fChBLmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHModCksZiYmZC5zYXZlUmFuZ2VJbml0aWFsKHQpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImNhbGNBdXRvcmFuZ2UiKSh0KSl9dmFyIEw9W2gucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKHMpcmV0dXJuIHIuYWRkRnJhbWVzKHQscyl9LGZ1bmN0aW9uIGUoKXtmb3IodmFyIHI9di5fYmFzZVBsb3RNb2R1bGVzLG49MDtuPHIubGVuZ3RoO24rKylyW25dLmRyYXdGcmFtZXdvcmsmJnJbbl0uZHJhd0ZyYW1ld29yayh0KTtpZighdi5fZ2xjYW52YXMmJnYuX2hhcygiZ2wiKSYmKHYuX2dsY2FudmFzPXYuX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLmRhdGEoW3trZXk6ImNvbnRleHRMYXllciIsY29udGV4dDohMCxwaWNrOiExfSx7a2V5OiJmb2N1c0xheWVyIixjb250ZXh0OiExLHBpY2s6ITF9LHtrZXk6InBpY2tMYXllciIsY29udGV4dDohMSxwaWNrOiEwfV0sZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSksdi5fZ2xjYW52YXMuZW50ZXIoKS5hcHBlbmQoImNhbnZhcyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4iZ2wtY2FudmFzIGdsLWNhbnZhcy0iK3Qua2V5LnJlcGxhY2UoIkxheWVyIiwiIil9KS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsb3ZlcmZsb3c6InZpc2libGUiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSkpLHYuX2dsY2FudmFzKXt2Ll9nbGNhbnZhcy5hdHRyKCJ3aWR0aCIsdi53aWR0aCkuYXR0cigiaGVpZ2h0Iix2LmhlaWdodCk7dmFyIGk9di5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2w7aWYoaSYmKE1hdGguZmxvb3Iodi53aWR0aCkhPT1pLl9nbC5kcmF3aW5nQnVmZmVyV2lkdGh8fE1hdGguZmxvb3Iodi5oZWlnaHQpIT09aS5fZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCkpe3ZhciBhPSJXZWJHTCBjb250ZXh0IGJ1ZmZlciBhbmQgY2FudmFzIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoIGR1ZSB0byBicm93c2VyL1dlYkdMIGJ1Zy4iO2lmKCFNKXJldHVybiBvLmxvZyhhKyIgQ2xlYXJpbmcgZ3JhcGggYW5kIHBsb3R0aW5nIGFnYWluLiIpLGguY2xlYW5QbG90KFtdLHt9LHQuX2Z1bGxEYXRhLHYpLGguc3VwcGx5RGVmYXVsdHModCksdj10Ll9mdWxsTGF5b3V0LGguZG9DYWxjZGF0YSh0KSxNKyssZSgpO28uZXJyb3IoYSl9fXJldHVybiJoIj09PXYubW9kZWJhci5vcmllbnRhdGlvbj92Ll9tb2RlYmFyZGl2LnN0eWxlKCJoZWlnaHQiLG51bGwpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTp2Ll9tb2RlYmFyZGl2LnN0eWxlKCJ3aWR0aCIsbnVsbCkuc3R5bGUoImhlaWdodCIsdi5oZWlnaHQrInB4IiksaC5wcmV2aW91c1Byb21pc2VzKHQpfSxTLGZ1bmN0aW9uKCl7aWYoSlNPTi5zdHJpbmdpZnkodi5fc2l6ZSkhPT1rKXJldHVybiBvLnN5bmNPckFzeW5jKFtTLEEubGF5b3V0U3R5bGVzXSx0KX1dO3gmJkwucHVzaChmdW5jdGlvbigpe2lmKF8pcmV0dXJuIG8uc3luY09yQXN5bmMoW3UuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJjYWxjQXV0b3JhbmdlIiksdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY2FsY0F1dG9yYW5nZSIpLEVdLHQpO0UoKX0pLEwucHVzaChBLmxheW91dFN0eWxlcykseCYmTC5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZHJhdyh0LGY/IiI6InJlZHJhdyIpfSksTC5wdXNoKEEuZHJhd0RhdGEsQS5maW5hbERyYXcseSxoLmFkZExpbmtzLGgucmVob3ZlcixoLmRvQXV0b01hcmdpbixoLnByZXZpb3VzUHJvbWlzZXMpO3ZhciB6PW8uc3luY09yQXN5bmMoTCx0KTtyZXR1cm4geiYmei50aGVufHwoej1Qcm9taXNlLnJlc29sdmUoKSksei50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEModCksdH0pfSxyLnNldFBsb3RDb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZXh0ZW5kRmxhdCh3LHQpfSxyLnJlZHJhdz1mdW5jdGlvbih0KXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QpO3JldHVybiBULmNsZWFuRGF0YSh0LmRhdGEpLFQuY2xlYW5MYXlvdXQodC5sYXlvdXQpLHQuY2FsY2RhdGE9dm9pZCAwLHIucGxvdCh0KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlZHJhdyIpLHR9KX0sci5uZXdQbG90PWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0PW8uZ2V0R3JhcGhEaXYodCksaC5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGF8fFtdLHQuX2Z1bGxMYXlvdXR8fHt9KSxoLnB1cmdlKHQpLHIucGxvdCh0LGUsbixpKX0sci5leHRlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSxhKXt2YXIgcz1SKGU9by5nZXRHcmFwaERpdihlKSxuLGksYSxmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPDApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9Rih0LGUpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCksaS5zZXQoZS5zdWJhcnJheSgwLGwpLHQubGVuZ3RoKX1lbHNle3ZhciBjPXItZS5sZW5ndGgsdT10Lmxlbmd0aC1jO24uc2V0KHQuc3ViYXJyYXkodSkpLG4uc2V0KGUsYyksaS5zZXQodC5zdWJhcnJheSgwLHUpKX1lbHNlIG49dC5jb25jYXQoZSksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKDAsbi5sZW5ndGgtcik6W107cmV0dXJuW24saV19KSxsPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsaSxzLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5wcmVwZW5kVHJhY2VzLHUsdCxhcmd1bWVudHMpLGx9LHIucHJlcGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpLGEpe3ZhciBzPVIoZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKG8uaXNUeXBlZEFycmF5KHQpKWlmKHI8PTApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9RihlLHQpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheSgwLGwpKSxpLnNldChlLnN1YmFycmF5KGwpKSxpLnNldCh0LGwpfWVsc2V7dmFyIGM9ci1lLmxlbmd0aDtuLnNldChlKSxuLnNldCh0LnN1YmFycmF5KDAsYyksZS5sZW5ndGgpLGkuc2V0KHQuc3ViYXJyYXkoYykpfWVsc2Ugbj1lLmNvbmNhdCh0KSxpPXI+PTAmJnI8bi5sZW5ndGg/bi5zcGxpY2UocixuLmxlbmd0aCk6W107cmV0dXJuW24saV19KSxsPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsaSxzLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5leHRlbmRUcmFjZXMsdSx0LGFyZ3VtZW50cyksbH0sci5hZGRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBhLHMsbD1bXSx1PXIuZGVsZXRlVHJhY2VzLGY9dCxoPVtlLGxdLHA9W2Usbl07Zm9yKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigidHJhY2VzIG11c3QgYmUgZGVmaW5lZC4iKTtmb3IoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIm9iamVjdCIhPXR5cGVvZihpPWVbbl0pfHxBcnJheS5pc0FycmF5KGkpfHxudWxsPT09aSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gdHJhY2VzIGFycmF5IG11c3QgYmUgbm9uLWFycmF5IG9iamVjdHMiKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksInVuZGVmaW5lZCIhPXR5cGVvZiByJiZyLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaWYgaW5kaWNlcyBpcyBzcGVjaWZpZWQsIHRyYWNlcy5sZW5ndGggbXVzdCBlcXVhbCBpbmRpY2VzLmxlbmd0aCIpfShlLG4saSksQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxuPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoe30sdCl9KSxULmNsZWFuRGF0YShuKSxhPTA7YTxuLmxlbmd0aDthKyspZS5kYXRhLnB1c2goblthXSk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylsLnB1c2goLW4ubGVuZ3RoK2EpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgaSlyZXR1cm4gcz1yLnJlZHJhdyhlKSxjLmFkZChlLHUsaCxmLHApLHM7QXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKTt0cnl7UChlLGwsaSl9Y2F0Y2godCl7dGhyb3cgZS5kYXRhLnNwbGljZShlLmRhdGEubGVuZ3RoLW4ubGVuZ3RoLG4ubGVuZ3RoKSx0fXJldHVybiBjLnN0YXJ0U2VxdWVuY2UoZSksYy5hZGQoZSx1LGgsZixwKSxzPXIubW92ZVRyYWNlcyhlLGwsaSksYy5zdG9wU2VxdWVuY2UoZSksc30sci5kZWxldGVUcmFjZXM9ZnVuY3Rpb24gdChlLG4pe2U9by5nZXRHcmFwaERpdihlKTt2YXIgaSxhLHM9W10sbD1yLmFkZFRyYWNlcyx1PXQsZj1bZSxzLG5dLGg9W2Usbl07aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnMuIik7Zm9yKEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksRChlLG4sImluZGljZXMiKSwobj1JKG4sZS5kYXRhLmxlbmd0aC0xKSkuc29ydChvLnNvcnRlckRlcyksaT0wO2k8bi5sZW5ndGg7aSs9MSlhPWUuZGF0YS5zcGxpY2UobltpXSwxKVswXSxzLnB1c2goYSk7dmFyIHA9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsbCxmLHUsaCkscH0sci5tb3ZlVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGkpe3ZhciBhLHM9W10sbD1bXSx1PXQsZj10LGg9W2U9by5nZXRHcmFwaERpdihlKSxpLG5dLHA9W2UsbixpXTtpZihQKGUsbixpKSxuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sInVuZGVmaW5lZCI9PXR5cGVvZiBpKWZvcihpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKylpLnB1c2goLW4ubGVuZ3RoK2EpO2ZvcihpPUFycmF5LmlzQXJyYXkoaSk/aTpbaV0sbj1JKG4sZS5kYXRhLmxlbmd0aC0xKSxpPUkoaSxlLmRhdGEubGVuZ3RoLTEpLGE9MDthPGUuZGF0YS5sZW5ndGg7YSsrKS0xPT09bi5pbmRleE9mKGEpJiZzLnB1c2goZS5kYXRhW2FdKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKWwucHVzaCh7bmV3SW5kZXg6aVthXSx0cmFjZTplLmRhdGFbblthXV19KTtmb3IobC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmV3SW5kZXgtZS5uZXdJbmRleH0pLGE9MDthPGwubGVuZ3RoO2ErPTEpcy5zcGxpY2UobFthXS5uZXdJbmRleCwwLGxbYV0udHJhY2UpO2UuZGF0YT1zO3ZhciBkPXIucmVkcmF3KGUpO3JldHVybiBjLmFkZChlLHUsaCxmLHApLGR9LHIucmVzdHlsZT1CLHIuX3N0b3JlRGlyZWN0R1VJRWRpdD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHIpe1YobixzKHQsbikuZ2V0KCkscltuXSxlKX19LHIucmVsYXlvdXQ9SDt2YXIgVz0vXlt4eXpdYXhpc1swLTldKlwucmFuZ2UoXFtbMHwxXVxdKT8kLyxYPS9eW3h5el1heGlzWzAtOV0qXC5hdXRvcmFuZ2UkLyxaPS9eW3h5el1heGlzWzAtOV0qXC5kb21haW4oXFtbMHwxXVxdKT8kLztmdW5jdGlvbiAkKHQsZSl7dmFyIHIsbixpLGE9dC5sYXlvdXQsbD10Ll9mdWxsTGF5b3V0LGM9bC5fZ3VpRWRpdGluZyxoPWoobC5fcHJlR1VJLGMpLHA9T2JqZWN0LmtleXMoZSksZz1kLmxpc3QodCksdj1vLmV4dGVuZERlZXBBbGwoe30sZSksbT17fTtmb3IocShlKSxwPU9iamVjdC5rZXlzKGUpLG49MDtuPHAubGVuZ3RoO24rKylpZigwPT09cFtuXS5pbmRleE9mKCJhbGxheGVzIikpe2ZvcihpPTA7aTxnLmxlbmd0aDtpKyspe3ZhciB5PWdbaV0uX2lkLnN1YnN0cigxKSx4PS0xIT09eS5pbmRleE9mKCJzY2VuZSIpP3krIi4iOiIiLGI9cFtuXS5yZXBsYWNlKCJhbGxheGVzIix4K2dbaV0uX25hbWUpO2VbYl18fChlW2JdPWVbcFtuXV0pfWRlbGV0ZSBlW3Bbbl1dfXZhciBfPU0ubGF5b3V0RmxhZ3MoKSx3PXt9LEE9e307ZnVuY3Rpb24gRSh0LHIpe2lmKEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe0UodCxyKX0pO2Vsc2UgaWYoISh0IGluIGV8fFQuaGFzUGFyZW50KGUsdCkpKXt2YXIgbj1oKGEsdCk7dCBpbiBBfHwoQVt0XT1OKG4uZ2V0KCkpKSx2b2lkIDAhPT1yJiZuLnNldChyKX19dmFyIEMsTD17fTtmdW5jdGlvbiB6KHQpe3ZhciBlPWQubmFtZTJpZCh0LnNwbGl0KCIuIilbMF0pO3JldHVybiBMW2VdPTEsZX1mb3IodmFyIE8gaW4gZSl7aWYoVC5oYXNQYXJlbnQoZSxPKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzZXQgIitPKyIgYW5kIGEgcGFyZW50IGF0dHJpYnV0ZSBzaW11bHRhbmVvdXNseSIpO2Zvcih2YXIgST1oKGEsTyksRD1lW09dLFA9SS5wYXJ0cy5sZW5ndGgtMTtQPjAmJiJzdHJpbmciIT10eXBlb2YgSS5wYXJ0c1tQXTspUC0tO3ZhciBSPUkucGFydHNbUF0sRj1JLnBhcnRzW1AtMV0rIi4iK1IsQj1JLnBhcnRzLnNsaWNlKDAsUCkuam9pbigiLiIpLFY9cyh0LmxheW91dCxCKS5nZXQoKSxVPXMobCxCKS5nZXQoKSxIPUkuZ2V0KCk7aWYodm9pZCAwIT09RCl7d1tPXT1ELEFbT109InJldmVyc2UiPT09Uj9EOk4oSCk7dmFyIEc9Zi5nZXRMYXlvdXRWYWxPYmplY3QobCxJLnBhcnRzKTtpZihHJiZHLmltcGxpZWRFZGl0cyYmbnVsbCE9PUQpZm9yKHZhciBZIGluIEcuaW1wbGllZEVkaXRzKUUoby5yZWxhdGl2ZUF0dHIoTyxZKSxHLmltcGxpZWRFZGl0c1tZXSk7aWYoLTEhPT1bIndpZHRoIiwiaGVpZ2h0Il0uaW5kZXhPZihPKSlpZihEKXtFKCJhdXRvc2l6ZSIsbnVsbCk7dmFyICQ9ImhlaWdodCI9PT1PPyJ3aWR0aCI6ImhlaWdodCI7RSgkLGxbJF0pfWVsc2UgbFtPXT10Ll9pbml0aWFsQXV0b1NpemVbT107ZWxzZSBpZigiYXV0b3NpemUiPT09TylFKCJ3aWR0aCIsRD9udWxsOmwud2lkdGgpLEUoImhlaWdodCIsRD9udWxsOmwuaGVpZ2h0KTtlbHNlIGlmKEYubWF0Y2goVykpeihGKSxzKGwsQisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO2Vsc2UgaWYoRi5tYXRjaChYKSl7eihGKSxzKGwsQisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO3ZhciBLPXMobCxCKS5nZXQoKTtLLl9pbnB1dERvbWFpbiYmKEsuX2lucHV0LmRvbWFpbj1LLl9pbnB1dERvbWFpbi5zbGljZSgpKX1lbHNlIEYubWF0Y2goWikmJnMobCxCKyIuX2lucHV0RG9tYWluIikuc2V0KG51bGwpO2lmKCJ0eXBlIj09PVIpe3ZhciBRPVYsdHQ9ImxpbmVhciI9PT1VLnR5cGUmJiJsb2ciPT09RCxldD0ibG9nIj09PVUudHlwZSYmImxpbmVhciI9PT1EO2lmKHR0fHxldCl7aWYoUSYmUS5yYW5nZSlpZihVLmF1dG9yYW5nZSl0dCYmKFEucmFuZ2U9US5yYW5nZVsxXT5RLnJhbmdlWzBdP1sxLDJdOlsyLDFdKTtlbHNle3ZhciBydD1RLnJhbmdlWzBdLG50PVEucmFuZ2VbMV07dHQ/KHJ0PD0wJiZudDw9MCYmRShCKyIuYXV0b3JhbmdlIiwhMCkscnQ8PTA/cnQ9bnQvMWU2Om50PD0wJiYobnQ9cnQvMWU2KSxFKEIrIi5yYW5nZVswXSIsTWF0aC5sb2cocnQpL01hdGguTE4xMCksRShCKyIucmFuZ2VbMV0iLE1hdGgubG9nKG50KS9NYXRoLkxOMTApKTooRShCKyIucmFuZ2VbMF0iLE1hdGgucG93KDEwLHJ0KSksRShCKyIucmFuZ2VbMV0iLE1hdGgucG93KDEwLG50KSkpfWVsc2UgRShCKyIuYXV0b3JhbmdlIiwhMCk7QXJyYXkuaXNBcnJheShsLl9zdWJwbG90cy5wb2xhcikmJmwuX3N1YnBsb3RzLnBvbGFyLmxlbmd0aCYmbFtJLnBhcnRzWzBdXSYmInJhZGlhbGF4aXMiPT09SS5wYXJ0c1sxXSYmZGVsZXRlIGxbSS5wYXJ0c1swXV0uX3N1YnBsb3Qudmlld0luaXRpYWxbInJhZGlhbGF4aXMucmFuZ2UiXSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjb252ZXJ0Q29vcmRzIikodCxVLEQsRSksdS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImNvbnZlcnRDb29yZHMiKSh0LFUsRCxFKX1lbHNlIEUoQisiLmF1dG9yYW5nZSIsITApLEUoQisiLnJhbmdlIixudWxsKTtzKGwsQisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpfWVsc2UgaWYoUi5tYXRjaChTKSl7dmFyIGl0PXMobCxPKS5nZXQoKSxhdD0oRHx8e30pLnR5cGU7YXQmJiItIiE9PWF0fHwoYXQ9ImxpbmVhciIpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LGl0LGF0LEUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJjb252ZXJ0Q29vcmRzIikodCxpdCxhdCxFKX12YXIgb3Q9ay5jb250YWluZXJBcnJheU1hdGNoKE8pO2lmKG90KXtyPW90LmFycmF5LG49b3QuaW5kZXg7dmFyIHN0PW90LnByb3BlcnR5LGx0PUd8fHtlZGl0VHlwZToiY2FsYyJ9OyIiIT09biYmIiI9PT1zdCYmKGsuaXNBZGRWYWwoRCk/QVtPXT1udWxsOmsuaXNSZW1vdmVWYWwoRCk/QVtPXT0ocyhhLHIpLmdldCgpfHxbXSlbbl06by53YXJuKCJ1bnJlY29nbml6ZWQgZnVsbCBvYmplY3QgdmFsdWUiLGUpKSxNLnVwZGF0ZShfLGx0KSxtW3JdfHwobVtyXT17fSk7dmFyIGN0PW1bcl1bbl07Y3R8fChjdD1tW3JdW25dPXt9KSxjdFtzdF09RCxkZWxldGUgZVtPXX1lbHNlInJldmVyc2UiPT09Uj8oVi5yYW5nZT9WLnJhbmdlLnJldmVyc2UoKTooRShCKyIuYXV0b3JhbmdlIiwhMCksVi5yYW5nZT1bMSwwXSksVS5hdXRvcmFuZ2U/Xy5jYWxjPSEwOl8ucGxvdD0hMCk6KGwuX2hhcygic2NhdHRlci1saWtlIikmJmwuX2hhcygicmVnbCIpJiYiZHJhZ21vZGUiPT09TyYmKCJsYXNzbyI9PT1EfHwic2VsZWN0Ij09PUQpJiYibGFzc28iIT09SCYmInNlbGVjdCIhPT1IP18ucGxvdD0hMDpsLl9oYXMoImdsMmQiKT9fLnBsb3Q9ITA6Rz9NLnVwZGF0ZShfLEcpOl8uY2FsYz0hMCxJLnNldChEKSl9fWZvcihyIGluIG0pe2suYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXModCxoKGEsciksbVtyXSxfLGgpfHwoXy5wbG90PSEwKX12YXIgdXQ9bC5fYXhpc0NvbnN0cmFpbnRHcm91cHN8fFtdO2ZvcihDIGluIEwpZm9yKG49MDtuPHV0Lmxlbmd0aDtuKyspe3ZhciBmdD11dFtuXTtpZihmdFtDXSlmb3IodmFyIGh0IGluIF8uY2FsYz0hMCxmdClMW2h0XXx8KGQuZ2V0RnJvbUlkKHQsaHQpLl9jb25zdHJhaW50U2hyaW5rYWJsZT0hMCl9cmV0dXJuKEoodCl8fGUuaGVpZ2h0fHxlLndpZHRoKSYmKF8ucGxvdD0hMCksKF8ucGxvdHx8Xy5jYWxjKSYmKF8ubGF5b3V0UmVwbG90PSEwKSx7ZmxhZ3M6XyxyYW5nZXNBbHRlcmVkOkwsdW5kb2l0OkEscmVkb2l0OncsZXZlbnREYXRhOnZ9fWZ1bmN0aW9uIEoodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUud2lkdGgsbj1lLmhlaWdodDtyZXR1cm4gdC5sYXlvdXQuYXV0b3NpemUmJmgucGxvdEF1dG9TaXplKHQsdC5sYXlvdXQsZSksZS53aWR0aCE9PXJ8fGUuaGVpZ2h0IT09bn1mdW5jdGlvbiBLKHQsZSxuLGkpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxULmNsZWFyUHJvbWlzZVF1ZXVlKHQpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7by5pc1BsYWluT2JqZWN0KGUpfHwoZT17fSksby5pc1BsYWluT2JqZWN0KG4pfHwobj17fSksT2JqZWN0LmtleXMoZSkubGVuZ3RoJiYodC5jaGFuZ2VkPSEwKSxPYmplY3Qua2V5cyhuKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBhPVQuY29lcmNlVHJhY2VJbmRpY2VzKHQsaSkscz1VKHQsby5leHRlbmRGbGF0KHt9LGUpLGEpLGw9cy5mbGFncyx1PSQodCxvLmV4dGVuZEZsYXQoe30sbikpLGY9dS5mbGFnczsobC5jYWxjfHxmLmNhbGMpJiYodC5jYWxjZGF0YT12b2lkIDApLGwuY2xlYXJBeGlzVHlwZXMmJlQuY2xlYXJBeGlzVHlwZXModCxhLG4pO3ZhciBwPVtdO2lmKGwuZnVsbFJlcGxvdCYmZi5sYXlvdXRSZXBsb3Qpe3ZhciBkPXQuZGF0YSxnPXQubGF5b3V0O3QuZGF0YT12b2lkIDAsdC5sYXlvdXQ9dm9pZCAwLHAucHVzaChmdW5jdGlvbigpe3JldHVybiByLnBsb3QodCxkLGcpfSl9ZWxzZSBsLmZ1bGxSZXBsb3Q/cC5wdXNoKHIucGxvdCk6Zi5sYXlvdXRSZXBsb3Q/cC5wdXNoKEEubGF5b3V0UmVwbG90KToocC5wdXNoKGgucHJldmlvdXNQcm9taXNlcyksRyh0LGYsdSl8fGguc3VwcGx5RGVmYXVsdHModCksbC5zdHlsZSYmcC5wdXNoKEEuZG9UcmFjZVN0eWxlKSxsLmNvbG9yYmFycyYmcC5wdXNoKEEuZG9Db2xvckJhcnMpLGYubGVnZW5kJiZwLnB1c2goQS5kb0xlZ2VuZCksZi5sYXlvdXRzdHlsZSYmcC5wdXNoKEEubGF5b3V0U3R5bGVzKSxmLmF4cmFuZ2UmJlkocCx1LnJhbmdlc0FsdGVyZWQpLGYudGlja3MmJnAucHVzaChBLmRvVGlja3NSZWxheW91dCksZi5tb2RlYmFyJiZwLnB1c2goQS5kb01vZGVCYXIpLGYuY2FtZXJhJiZwLnB1c2goQS5kb0NhbWVyYSkscC5wdXNoKEMpKTtwLnB1c2goaC5yZWhvdmVyKSxjLmFkZCh0LEssW3Qscy51bmRvaXQsdS51bmRvaXQscy50cmFjZXNdLEssW3Qscy5yZWRvaXQsdS5yZWRvaXQscy50cmFjZXNdKTt2YXIgdj1vLnN5bmNPckFzeW5jKHAsdCk7cmV0dXJuIHYmJnYudGhlbnx8KHY9UHJvbWlzZS5yZXNvbHZlKHQpKSx2LnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfdXBkYXRlIix7ZGF0YTpzLmV2ZW50RGF0YSxsYXlvdXQ6dS5ldmVudERhdGF9KSx0fSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMDt2YXIgcj10LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMSxyfX1yLnVwZGF0ZT1LLHIuX2d1aVJlc3R5bGU9UShCKSxyLl9ndWlSZWxheW91dD1RKEgpLHIuX2d1aVVwZGF0ZT1RKEspO3ZhciB0dD1be3BhdHRlcm46L15oaWRkZW5sYWJlbHMvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L14oKHh8eSlheGlzXGQqKVwuKChhdXRvKT9yYW5nZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovYXhpc1xkKlwuc2hvd3NwaWtlcyQvLGF0dHI6Im1vZGViYXIudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi8oaG92ZXJ8ZHJhZyltb2RlJC8sYXR0cjoibW9kZWJhci51aXJldmlzaW9uIn0se3BhdHRlcm46L14oc2NlbmVcZCopXC5jYW1lcmEvfSx7cGF0dGVybjovXihnZW9cZCopXC4ocHJvamVjdGlvbnxjZW50ZXIpL30se3BhdHRlcm46L14odGVybmFyeVxkKlwuW2FiY11heGlzKVwuKG1pbnx0aXRsZVwudGV4dCkkL30se3BhdHRlcm46L14ocG9sYXJcZCpcLnJhZGlhbGF4aXMpXC4oKGF1dG8pP3JhbmdlfGFuZ2xlfHRpdGxlXC50ZXh0KS99LHtwYXR0ZXJuOi9eKHBvbGFyXGQqXC5hbmd1bGFyYXhpcylcLnJvdGF0aW9uL30se3BhdHRlcm46L14obWFwYm94XGQqKVwuKGNlbnRlcnx6b29tfGJlYXJpbmd8cGl0Y2gpL30se3BhdHRlcm46L15sZWdlbmRcLih4fHkpJC8sYXR0cjoiZWRpdHJldmlzaW9uIn0se3BhdHRlcm46L14oc2hhcGVzfGFubm90YXRpb25zKS8sYXR0cjoiZWRpdHJldmlzaW9uIn0se3BhdHRlcm46L150aXRsZVwudGV4dCQvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9XSxldD1be3BhdHRlcm46L15zZWxlY3RlZHBvaW50cyQvLGF0dHI6InNlbGVjdGlvbnJldmlzaW9uIn0se3BhdHRlcm46LyhefHZhbHVlXC4pdmlzaWJsZSQvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L15kaW1lbnNpb25zXFtcZCtcXVwuY29uc3RyYWludHJhbmdlL30se3BhdHRlcm46L15ub2RlXC4oeHx5KS99LHtwYXR0ZXJuOi9ebGV2ZWwkL30se3BhdHRlcm46LyhefHZhbHVlXC4pbmFtZSQvfSx7cGF0dGVybjovY29sb3JiYXJcLnRpdGxlXC50ZXh0JC99LHtwYXR0ZXJuOi9jb2xvcmJhclwuKHh8eSkkLyxhdHRyOiJlZGl0cmV2aXNpb24ifV07ZnVuY3Rpb24gcnQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPXQubWF0Y2gobi5wYXR0ZXJuKTtpZihpKXJldHVybntoZWFkOmlbMV0sYXR0cjpuLmF0dHJ9fX1mdW5jdGlvbiBudCh0LGUpe3ZhciByPXMoZSx0KS5nZXQoKTtpZih2b2lkIDAhPT1yKXJldHVybiByO3ZhciBuPXQuc3BsaXQoIi4iKTtmb3Iobi5wb3AoKTtuLmxlbmd0aD4xOylpZihuLnBvcCgpLHZvaWQgMCE9PShyPXMoZSxuLmpvaW4oIi4iKSsiLnVpcmV2aXNpb24iKS5nZXQoKSkpcmV0dXJuIHI7cmV0dXJuIGUudWlyZXZpc2lvbn1mdW5jdGlvbiBpdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0uX2Z1bGxJbnB1dC51aWQ9PT10KXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGF0KHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLnVpZD09PXQpcmV0dXJuIG47cmV0dXJuIWVbcl18fGVbcl0udWlkPy0xOnJ9ZnVuY3Rpb24gb3QodCxlKXt2YXIgcj1vLmlzUGxhaW5PYmplY3QodCksbj1BcnJheS5pc0FycmF5KHQpO3JldHVybiByfHxuPyhyJiZvLmlzUGxhaW5PYmplY3QoZSl8fG4mJkFycmF5LmlzQXJyYXkoZSkpJiZKU09OLnN0cmluZ2lmeSh0KT09PUpTT04uc3RyaW5naWZ5KGUpOnQ9PT1lfWZ1bmN0aW9uIHN0KHQsZSxyLG4pe3ZhciBpLGEsbCxjPW4uZ2V0VmFsT2JqZWN0LHU9bi5mbGFncyxmPW4uaW1tdXRhYmxlLGg9bi5pbkFycmF5LHA9bi5hcnJheUluZGV4O2Z1bmN0aW9uIGQoKXt2YXIgdD1pLmVkaXRUeXBlO2gmJi0xIT09dC5pbmRleE9mKCJhcnJheWRyYXciKT9vLnB1c2hVbmlxdWUodS5hcnJheXNbaF0scCk6KE0udXBkYXRlKHUsaSksIm5vbmUiIT09dCYmdS5uQ2hhbmdlcysrLG4udHJhbnNpdGlvbiYmaS5hbmltJiZ1Lm5DaGFuZ2VzQW5pbSsrLChXLnRlc3QobCl8fFgudGVzdChsKSkmJih1LnJhbmdlc0FsdGVyZWRbclswXV09MSksWi50ZXN0KGwpJiZzKGUsIl9pbnB1dERvbWFpbiIpLnNldChudWxsKSwiZGF0YXJldmlzaW9uIj09PWEmJih1Lm5ld0RhdGFSZXZpc2lvbj0xKSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4iZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fHQuYXJyYXlPa31mb3IoYSBpbiB0KXtpZih1LmNhbGMmJiFuLnRyYW5zaXRpb24pcmV0dXJuO3ZhciB2PXRbYV0sbT1lW2FdLHk9ci5jb25jYXQoYSk7aWYobD15LmpvaW4oIi4iKSwiXyIhPT1hLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIHYmJnYhPT1tKXtpZigoInRpY2swIj09PWF8fCJkdGljayI9PT1hKSYmImdlbyIhPT1yWzBdKXt2YXIgeD1lLnRpY2ttb2RlO2lmKCJhdXRvIj09PXh8fCJhcnJheSI9PT14fHwheCljb250aW51ZX1pZigoInJhbmdlIiE9PWF8fCFlLmF1dG9yYW5nZSkmJigiem1pbiIhPT1hJiYiem1heCIhPT1hfHwiY29udG91cmNhcnBldCIhPT1lLnR5cGUpJiYoaT1jKHkpKSYmKCFpLl9jb21wYXJlQXNKU09OfHxKU09OLnN0cmluZ2lmeSh2KSE9PUpTT04uc3RyaW5naWZ5KG0pKSl7dmFyIGIsXz1pLnZhbFR5cGUsdz1nKGkpLGs9QXJyYXkuaXNBcnJheSh2KSxUPUFycmF5LmlzQXJyYXkobSk7aWYoayYmVCl7dmFyIEE9Il9pbnB1dF8iK2EsUz10W0FdLEU9ZVtBXTtpZihBcnJheS5pc0FycmF5KFMpJiZTPT09RSljb250aW51ZX1pZih2b2lkIDA9PT1tKXcmJms/dS5jYWxjPSEwOmQoKTtlbHNlIGlmKGkuX2lzTGlua2VkVG9BcnJheSl7dmFyIEM9W10sTD0hMTtofHwodS5hcnJheXNbYV09Qyk7dmFyIHo9TWF0aC5taW4odi5sZW5ndGgsbS5sZW5ndGgpLE89TWF0aC5tYXgodi5sZW5ndGgsbS5sZW5ndGgpO2lmKHohPT1PKXtpZigiYXJyYXlkcmF3IiE9PWkuZWRpdFR5cGUpe2QoKTtjb250aW51ZX1MPSEwfWZvcihiPTA7Yjx6O2IrKylzdCh2W2JdLG1bYl0seS5jb25jYXQoYiksby5leHRlbmRGbGF0KHtpbkFycmF5OmEsYXJyYXlJbmRleDpifSxuKSk7aWYoTClmb3IoYj16O2I8TztiKyspQy5wdXNoKGIpfWVsc2UhXyYmby5pc1BsYWluT2JqZWN0KHYpP3N0KHYsbSx5LG4pOnc/ayYmVD8oZiYmKHUuY2FsYz0hMCksKGZ8fG4ubmV3RGF0YVJldmlzaW9uKSYmZCgpKTprIT09VD91LmNhbGM9ITA6ZCgpOmsmJlQmJnYubGVuZ3RoPT09bS5sZW5ndGgmJlN0cmluZyh2KT09PVN0cmluZyhtKXx8ZCgpfX19Zm9yKGEgaW4gZSlpZighKGEgaW4gdHx8Il8iPT09YS5jaGFyQXQoMCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlW2FdKSl7aWYoZyhpPWMoci5jb25jYXQoYSkpKSYmQXJyYXkuaXNBcnJheShlW2FdKSlyZXR1cm4gdm9pZCh1LmNhbGM9ITApO2QoKX19ZnVuY3Rpb24gbHQodCl7dmFyIGU9bi5zZWxlY3QodCkscj10Ll9mdWxsTGF5b3V0O2lmKHIuX2NvbnRhaW5lcj1lLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikuZGF0YShbMF0pLHIuX2NvbnRhaW5lci5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIiLCEwKS5jbGFzc2VkKCJwbG90bHkiLCEwKSxyLl9wYXBlcmRpdj1yLl9jb250YWluZXIuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9wYXBlcmRpdi5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgic3ZnLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsInJlbGF0aXZlIiksci5fZ2xjb250YWluZXI9ci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIuZ2wtY29udGFpbmVyIikuZGF0YShbe31dKSxyLl9nbGNvbnRhaW5lci5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiZ2wtY29udGFpbmVyIiwhMCksci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5yZW1vdmUoKSxyLl9wYXBlcmRpdi5zZWxlY3QoIi5tb2RlYmFyLWNvbnRhaW5lciIpLnJlbW92ZSgpLHIuX3BhcGVyPXIuX3BhcGVyZGl2Lmluc2VydCgic3ZnIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSxyLl90b3BwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fbW9kZWJhcmRpdj1yLl9wYXBlcmRpdi5hcHBlbmQoImRpdiIpLHIuX2hvdmVycGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLCFyLl91aWQpe3ZhciBpPXt9O24uc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbigpe3RoaXMuaWQmJihpW3RoaXMuaWQuc3BsaXQoIi0iKVsxXV09MSl9KSxyLl91aWQ9by5yYW5kc3RyKGkpfXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuYXR0cih4LnN2Z0F0dHJzKSxyLl9kZWZzPXIuX3BhcGVyLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwiZGVmcy0iK3IuX3VpZCksci5fY2xpcHM9ci5fZGVmcy5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLHIuX3RvcGRlZnM9ci5fdG9wcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJ0b3BkZWZzLSIrci5fdWlkKSxyLl90b3BjbGlwcz1yLl90b3BkZWZzLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCksci5fYmdMYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJiZ2xheWVyIiwhMCksci5fZHJhZ2dlcnM9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZHJhZ2xheWVyIiwhMCk7dmFyIGE9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYmVsb3ciLCEwKTtyLl9pbWFnZUxvd2VyTGF5ZXI9YS5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVMb3dlckxheWVyPWEuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2NhcnRlc2lhbmxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNhcnRlc2lhbmxheWVyIiwhMCksci5fcG9sYXJsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2xhcmxheWVyIiwhMCksci5fdGVybmFyeWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRlcm5hcnlsYXllciIsITApLHIuX2dlb2xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdlb2xheWVyIiwhMCksci5fcGllbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgicGllbGF5ZXIiLCEwKSxyLl9zdW5idXJzdGxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN1bmJ1cnN0bGF5ZXIiLCEwKSxyLl9nbGltYWdlcz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJnbGltYWdlcyIsITApO3ZhciBzPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxheWVyLWFib3ZlIiwhMCk7ci5faW1hZ2VVcHBlckxheWVyPXMuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW1hZ2VsYXllciIsITApLHIuX3NoYXBlVXBwZXJMYXllcj1zLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNoYXBlbGF5ZXIiLCEwKSxyLl9pbmZvbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW5mb2xheWVyIiwhMCksci5fbWVudWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1lbnVsYXllciIsITApLHIuX3pvb21sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ6b29tbGF5ZXIiLCEwKSxyLl9ob3ZlcmxheWVyPXIuX2hvdmVycGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJsYXllciIsITApLHIuX21vZGViYXJkaXYuY2xhc3NlZCgibW9kZWJhci1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJ0b3AiLCIwcHgiKS5zdHlsZSgicmlnaHQiLCIwcHgiKSx0LmVtaXQoInBsb3RseV9mcmFtZXdvcmsiKX1yLnJlYWN0PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhLGw7dmFyIGM9KHQ9by5nZXRHcmFwaERpdih0KSkuX2Z1bGxEYXRhLHA9dC5fZnVsbExheW91dDtpZihvLmlzUGxvdERpdih0KSYmYyYmcCl7aWYoby5pc1BsYWluT2JqZWN0KGUpKXt2YXIgZD1lO2U9ZC5kYXRhLG49ZC5sYXlvdXQsaT1kLmNvbmZpZyxhPWQuZnJhbWVzfXZhciBnPSExO2lmKGkpe3ZhciB2PW8uZXh0ZW5kRGVlcCh7fSx0Ll9jb250ZXh0KTt0Ll9jb250ZXh0PXZvaWQgMCxPKHQsaSksZz1mdW5jdGlvbiB0KGUscil7dmFyIG47Zm9yKG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGk9ZVtuXSxhPXJbbl07aWYoaSE9PWEpaWYoby5pc1BsYWluT2JqZWN0KGkpJiZvLmlzUGxhaW5PYmplY3QoYSkpe2lmKHQoaSxhKSlyZXR1cm4hMH1lbHNle2lmKCFBcnJheS5pc0FycmF5KGkpfHwhQXJyYXkuaXNBcnJheShhKSlyZXR1cm4hMDtpZihpLmxlbmd0aCE9PWEubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWlmKGlbc10hPT1hW3NdKXtpZighby5pc1BsYWluT2JqZWN0KGlbc10pfHwhby5pc1BsYWluT2JqZWN0KGFbc10pKXJldHVybiEwO2lmKHQoaVtzXSxhW3NdKSlyZXR1cm4hMH19fX0odix0Ll9jb250ZXh0KX10LmRhdGE9ZXx8W10sVC5jbGVhbkRhdGEodC5kYXRhKSx0LmxheW91dD1ufHx7fSxULmNsZWFuTGF5b3V0KHQubGF5b3V0KSxmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLGwsYyx1LGYsaCxwLGQ9bi5fcHJlR1VJLGc9W10sdj17fTtmb3IoaSBpbiBkKXtpZih1PXJ0KGksdHQpKXtpZihhPXUuYXR0cnx8dS5oZWFkKyIudWlyZXZpc2lvbiIsKGM9KGw9cyhuLGEpLmdldCgpKSYmbnQoYSxlKSkmJmM9PT1sJiYobnVsbD09PShmPWRbaV0pJiYoZj12b2lkIDApLG90KHA9KGg9cyhlLGkpKS5nZXQoKSxmKSkpe3ZvaWQgMD09PXAmJiJhdXRvcmFuZ2UiPT09aS5zdWJzdHIoaS5sZW5ndGgtOSkmJmcucHVzaChpLnN1YnN0cigwLGkubGVuZ3RoLTEwKSksaC5zZXQoTihzKG4saSkuZ2V0KCkpKTtjb250aW51ZX19ZWxzZSBvLndhcm4oInVucmVjb2duaXplZCBHVUkgZWRpdDogIitpKTtkZWxldGUgZFtpXSwicmFuZ2VbIj09PWkuc3Vic3RyKGkubGVuZ3RoLTgsNikmJih2W2kuc3Vic3RyKDAsaS5sZW5ndGgtOSldPTEpfWZvcih2YXIgbT0wO208Zy5sZW5ndGg7bSsrKXt2YXIgeT1nW21dO2lmKHZbeV0pe3ZhciB4PXMoZSx5KS5nZXQoKTt4JiZkZWxldGUgeC5hdXRvcmFuZ2V9fXZhciBiPW4uX3RyYWNlUHJlR1VJO2Zvcih2YXIgXyBpbiBiKXt2YXIgdyxrPWJbX10sVD1udWxsO2ZvcihpIGluIGspe2lmKCFUKXt2YXIgQT1pdChfLHIpO2lmKEE8MCl7ZGVsZXRlIGJbX107YnJlYWt9dmFyIE09YXQoXyx0LCh3PXJbQV0uX2Z1bGxJbnB1dCkuaW5kZXgpO2lmKE08MCl7ZGVsZXRlIGJbX107YnJlYWt9VD10W01dfWlmKHU9cnQoaSxldCkpe2lmKHUuYXR0cj9jPShsPXMobix1LmF0dHIpLmdldCgpKSYmbnQodS5hdHRyLGUpOihsPXcudWlyZXZpc2lvbix2b2lkIDA9PT0oYz1ULnVpcmV2aXNpb24pJiYoYz1lLnVpcmV2aXNpb24pKSxjJiZjPT09bCYmKG51bGw9PT0oZj1rW2ldKSYmKGY9dm9pZCAwKSxvdChwPShoPXMoVCxpKSkuZ2V0KCksZikpKXtoLnNldChOKHModyxpKS5nZXQoKSkpO2NvbnRpbnVlfX1lbHNlIG8ud2FybigidW5yZWNvZ25pemVkIEdVSSBlZGl0OiAiK2krIiBpbiB0cmFjZSB1aWQgIitfKTtkZWxldGUga1tpXX19fSh0LmRhdGEsdC5sYXlvdXQsYyxwKSxoLnN1cHBseURlZmF1bHRzKHQse3NraXBVcGRhdGVDYWxjOiEwfSk7dmFyIG09dC5fZnVsbERhdGEseT10Ll9mdWxsTGF5b3V0LHg9dm9pZCAwPT09eS5kYXRhcmV2aXNpb24sYj15LnRyYW5zaXRpb24sXz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPU0ubGF5b3V0RmxhZ3MoKTthLmFycmF5cz17fSxhLnJhbmdlc0FsdGVyZWQ9e30sYS5uQ2hhbmdlcz0wLGEubkNoYW5nZXNBbmltPTAsc3QoZSxyLFtdLHtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGYuZ2V0TGF5b3V0VmFsT2JqZWN0KHIsdCl9LGZsYWdzOmEsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjppLGdkOnR9KSwoYS5wbG90fHxhLmNhbGMpJiYoYS5sYXlvdXRSZXBsb3Q9ITApO2kmJmEubkNoYW5nZXMmJmEubkNoYW5nZXNBbmltJiYoYS5hbmltPWEubkNoYW5nZXM9PT1hLm5DaGFuZ2VzQW5pbT8iYWxsIjoic29tZSIpO3JldHVybiBhfSh0LHAseSx4LGIpLHc9Xy5uZXdEYXRhUmV2aXNpb24saz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89ZS5sZW5ndGg9PT1yLmxlbmd0aDtpZighaSYmIW8pcmV0dXJue2Z1bGxSZXBsb3Q6ITAsY2FsYzohMH07dmFyIHMsbCxjPU0udHJhY2VGbGFncygpO2MuYXJyYXlzPXt9LGMubkNoYW5nZXM9MCxjLm5DaGFuZ2VzQW5pbT0wO3ZhciB1PXtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGYuZ2V0VHJhY2VWYWxPYmplY3QobCx0KX0sZmxhZ3M6YyxpbW11dGFibGU6bix0cmFuc2l0aW9uOmksbmV3RGF0YVJldmlzaW9uOmEsZ2Q6dH0scD17fTtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKWlmKHJbc10pe2lmKGw9cltzXS5fZnVsbElucHV0LGguaGFzTWFrZXNEYXRhVHJhbnNmb3JtKGwpJiYobD1yW3NdKSxwW2wudWlkXSljb250aW51ZTtwW2wudWlkXT0xLHN0KGVbc10uX2Z1bGxJbnB1dCxsLFtdLHUpfShjLmNhbGN8fGMucGxvdCkmJihjLmZ1bGxSZXBsb3Q9ITApO2kmJmMubkNoYW5nZXMmJmMubkNoYW5nZXNBbmltJiYoYy5hbmltPWMubkNoYW5nZXM9PT1jLm5DaGFuZ2VzQW5pbSYmbz8iYWxsIjoic29tZSIpO3JldHVybiBjfSh0LGMsbSx4LGIsdyk7Sih0KSYmKF8ubGF5b3V0UmVwbG90PSEwKSxrLmNhbGN8fF8uY2FsYz90LmNhbGNkYXRhPXZvaWQgMDpoLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyh0LmNhbGNkYXRhLG0pO3ZhciBTPVtdO2lmKGEmJih0Ll90cmFuc2l0aW9uRGF0YT17fSxoLmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLFMucHVzaChmdW5jdGlvbigpe3JldHVybiByLmFkZEZyYW1lcyh0LGEpfSkpLHkudHJhbnNpdGlvbiYmIWcmJihrLmFuaW18fF8uYW5pbSkpaC5kb0NhbGNkYXRhKHQpLEEuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxTLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gaC50cmFuc2l0aW9uRnJvbVJlYWN0KHQsayxfLHApfSk7ZWxzZSBpZihrLmZ1bGxSZXBsb3R8fF8ubGF5b3V0UmVwbG90fHxnKXQuX2Z1bGxMYXlvdXQuX3NraXBEZWZhdWx0cz0hMCxTLnB1c2goci5wbG90KTtlbHNle2Zvcih2YXIgRSBpbiBfLmFycmF5cyl7dmFyIEw9Xy5hcnJheXNbRV07aWYoTC5sZW5ndGgpe3ZhciB6PXUuZ2V0Q29tcG9uZW50TWV0aG9kKEUsImRyYXdPbmUiKTtpZih6IT09by5ub29wKWZvcih2YXIgST0wO0k8TC5sZW5ndGg7SSsrKXoodCxMW0ldKTtlbHNle3ZhciBEPXUuZ2V0Q29tcG9uZW50TWV0aG9kKEUsImRyYXciKTtpZihEPT09by5ub29wKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGRyYXcgY29tcG9uZW50czogIitFKTtEKHQpfX19Uy5wdXNoKGgucHJldmlvdXNQcm9taXNlcyksay5zdHlsZSYmUy5wdXNoKEEuZG9UcmFjZVN0eWxlKSxrLmNvbG9yYmFycyYmUy5wdXNoKEEuZG9Db2xvckJhcnMpLF8ubGVnZW5kJiZTLnB1c2goQS5kb0xlZ2VuZCksXy5sYXlvdXRzdHlsZSYmUy5wdXNoKEEubGF5b3V0U3R5bGVzKSxfLmF4cmFuZ2UmJlkoUyksXy50aWNrcyYmUy5wdXNoKEEuZG9UaWNrc1JlbGF5b3V0KSxfLm1vZGViYXImJlMucHVzaChBLmRvTW9kZUJhciksXy5jYW1lcmEmJlMucHVzaChBLmRvQ2FtZXJhKSxTLnB1c2goQyl9Uy5wdXNoKGgucmVob3ZlciksKGw9by5zeW5jT3JBc3luYyhTLHQpKSYmbC50aGVufHwobD1Qcm9taXNlLnJlc29sdmUodCkpfWVsc2UgbD1yLm5ld1Bsb3QodCxlLG4saSk7cmV0dXJuIGwudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZWFjdCIse2RhdGE6ZSxsYXlvdXQ6bn0pLHR9KX0sci5hbmltYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QrIi4gSXQncyBsaWtlbHkgdGhhdCB5b3UndmUgZmFpbGVkIHRvIGNyZWF0ZSBhIHBsb3QgYmVmb3JlIGFuaW1hdGluZyBpdC4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdC5seS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG49dC5fdHJhbnNpdGlvbkRhdGE7bi5fZnJhbWVRdWV1ZXx8KG4uX2ZyYW1lUXVldWU9W10pO3ZhciBpPShyPWguc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHMocikpLnRyYW5zaXRpb24sYT1yLmZyYW1lO2Z1bmN0aW9uIHModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dD49aS5sZW5ndGg/aVswXTppW3RdOml9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT90Pj1hLmxlbmd0aD9hWzBdOmFbdF06YX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9MDtyZXR1cm4gZnVuY3Rpb24oKXtpZih0JiYrK3I9PT1lKXJldHVybiB0KCl9fXJldHVybiB2b2lkIDA9PT1uLl9mcmFtZVdhaXRpbmdDbnQmJihuLl9mcmFtZVdhaXRpbmdDbnQ9MCksbmV3IFByb21pc2UoZnVuY3Rpb24oYSx1KXtmdW5jdGlvbiBmKCl7bi5fY3VycmVudEZyYW1lJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSYmbi5fY3VycmVudEZyYW1lLm9uQ29tcGxldGUoKTt2YXIgZT1uLl9jdXJyZW50RnJhbWU9bi5fZnJhbWVRdWV1ZS5zaGlmdCgpO2lmKGUpe3ZhciByPWUubmFtZT9lLm5hbWUudG9TdHJpbmcoKTpudWxsO3QuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZT1yLG4uX2xhc3RGcmFtZUF0PURhdGUubm93KCksbi5fdGltZVRvTmV4dD1lLmZyYW1lT3B0cy5kdXJhdGlvbixoLnRyYW5zaXRpb24odCxlLmZyYW1lLmRhdGEsZS5mcmFtZS5sYXlvdXQsVC5jb2VyY2VUcmFjZUluZGljZXModCxlLmZyYW1lLnRyYWNlcyksZS5mcmFtZU9wdHMsZS50cmFuc2l0aW9uT3B0cykudGhlbihmdW5jdGlvbigpe2Uub25Db21wbGV0ZSYmZS5vbkNvbXBsZXRlKCl9KSx0LmVtaXQoInBsb3RseV9hbmltYXRpbmdmcmFtZSIse25hbWU6cixmcmFtZTplLmZyYW1lLGFuaW1hdGlvbjp7ZnJhbWU6ZS5mcmFtZU9wdHMsdHJhbnNpdGlvbjplLnRyYW5zaXRpb25PcHRzfX0pfWVsc2UgdC5lbWl0KCJwbG90bHlfYW5pbWF0ZWQiKSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobi5fYW5pbWF0aW9uUmFmKSxuLl9hbmltYXRpb25SYWY9bnVsbH1mdW5jdGlvbiBwKCl7dC5lbWl0KCJwbG90bHlfYW5pbWF0aW5nIiksbi5fbGFzdEZyYW1lQXQ9LTEvMCxuLl90aW1lVG9OZXh0PTAsbi5fcnVubmluZ1RyYW5zaXRpb25zPTAsbi5fY3VycmVudEZyYW1lPW51bGw7dmFyIGU9ZnVuY3Rpb24oKXtuLl9hbmltYXRpb25SYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxEYXRlLm5vdygpLW4uX2xhc3RGcmFtZUF0Pm4uX3RpbWVUb05leHQmJmYoKX07ZSgpfXZhciBkLGcsdj0wO2Z1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dj49aS5sZW5ndGg/dC50cmFuc2l0aW9uT3B0cz1pW3ZdOnQudHJhbnNpdGlvbk9wdHM9aVswXTp0LnRyYW5zaXRpb25PcHRzPWksdisrLHR9dmFyIHk9W10seD1udWxsPT1lLGI9QXJyYXkuaXNBcnJheShlKTtpZigheCYmIWImJm8uaXNQbGFpbk9iamVjdChlKSl5LnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTptKG8uZXh0ZW5kRmxhdCh7fSxlKSl9KTtlbHNlIGlmKHh8fC0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlKSlmb3IoZD0wO2Q8bi5fZnJhbWVzLmxlbmd0aDtkKyspKGc9bi5fZnJhbWVzW2RdKSYmKHh8fFN0cmluZyhnLmdyb3VwKT09PVN0cmluZyhlKSkmJnkucHVzaCh7dHlwZToiYnluYW1lIixuYW1lOlN0cmluZyhnLm5hbWUpLGRhdGE6bSh7bmFtZTpnLm5hbWV9KX0pO2Vsc2UgaWYoYilmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgXz1lW2RdOy0xIT09WyJudW1iZXIiLCJzdHJpbmciXS5pbmRleE9mKHR5cGVvZiBfKT8oXz1TdHJpbmcoXykseS5wdXNoKHt0eXBlOiJieW5hbWUiLG5hbWU6XyxkYXRhOm0oe25hbWU6X30pfSkpOm8uaXNQbGFpbk9iamVjdChfKSYmeS5wdXNoKHt0eXBlOiJvYmplY3QiLGRhdGE6bShvLmV4dGVuZEZsYXQoe30sXykpfSl9Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZigiYnluYW1lIj09PShnPXlbZF0pLnR5cGUmJiFuLl9mcmFtZUhhc2hbZy5kYXRhLm5hbWVdKXJldHVybiBvLndhcm4oJ2FuaW1hdGUgZmFpbHVyZTogZnJhbWUgbm90IGZvdW5kOiAiJytnLmRhdGEubmFtZSsnIicpLHZvaWQgdSgpOy0xIT09WyJuZXh0IiwiaW1tZWRpYXRlIl0uaW5kZXhPZihyLm1vZGUpJiZmdW5jdGlvbigpe2lmKDAhPT1uLl9mcmFtZVF1ZXVlLmxlbmd0aCl7Zm9yKDtuLl9mcmFtZVF1ZXVlLmxlbmd0aDspe3ZhciBlPW4uX2ZyYW1lUXVldWUucG9wKCk7ZS5vbkludGVycnVwdCYmZS5vbkludGVycnVwdCgpfXQuZW1pdCgicGxvdGx5X2FuaW1hdGlvbmludGVycnVwdGVkIixbXSl9fSgpLCJyZXZlcnNlIj09PXIuZGlyZWN0aW9uJiZ5LnJldmVyc2UoKTt2YXIgdz10Ll9mdWxsTGF5b3V0Ll9jdXJyZW50RnJhbWU7aWYodyYmci5mcm9tY3VycmVudCl7dmFyIGs9LTE7Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZigiYnluYW1lIj09PShnPXlbZF0pLnR5cGUmJmcubmFtZT09PXcpe2s9ZDticmVha31pZihrPjAmJms8eS5sZW5ndGgtMSl7dmFyIEE9W107Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylnPXlbZF0sKCJieW5hbWUiIT09eVtkXS50eXBlfHxkPmspJiZBLnB1c2goZyk7eT1BfX15Lmxlbmd0aD4wP2Z1bmN0aW9uKGUpe2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvO289ImJ5bmFtZSI9PT1lW2ldLnR5cGU/aC5jb21wdXRlRnJhbWUodCxlW2ldLm5hbWUpOmVbaV0uZGF0YTt2YXIgZj1sKGkpLGQ9cyhpKTtkLmR1cmF0aW9uPU1hdGgubWluKGQuZHVyYXRpb24sZi5kdXJhdGlvbik7dmFyIGc9e2ZyYW1lOm8sbmFtZTplW2ldLm5hbWUsZnJhbWVPcHRzOmYsdHJhbnNpdGlvbk9wdHM6ZH07aT09PWUubGVuZ3RoLTEmJihnLm9uQ29tcGxldGU9YyhhLDIpLGcub25JbnRlcnJ1cHQ9dSksbi5fZnJhbWVRdWV1ZS5wdXNoKGcpfSJpbW1lZGlhdGUiPT09ci5tb2RlJiYobi5fbGFzdEZyYW1lQXQ9LTEvMCksbi5fYW5pbWF0aW9uUmFmfHxwKCl9fSh5KToodC5lbWl0KCJwbG90bHlfYW5pbWF0ZWQiKSxhKCkpfSl9LHIuYWRkRnJhbWVzPWZ1bmN0aW9uKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksbnVsbD09ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7aWYoIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QrIi4gSXQncyBsaWtlbHkgdGhhdCB5b3UndmUgZmFpbGVkIHRvIGNyZWF0ZSBhIHBsb3QgYmVmb3JlIGFkZGluZyBmcmFtZXMuIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL3Bsb3QubHkvamF2YXNjcmlwdC9hbmltYXRpb25zLyIpO3ZhciBuLGksYSxzLGw9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyx1PXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IEVycm9yKCJhZGRGcmFtZXMgZmFpbHVyZTogZnJhbWVMaXN0IG11c3QgYmUgYW4gQXJyYXkgb2YgZnJhbWUgZGVmaW5pdGlvbnMiK2UpO3ZhciBmPWwubGVuZ3RoKzIqZS5sZW5ndGgscD1bXSxkPXt9O2ZvcihuPWUubGVuZ3RoLTE7bj49MDtuLS0paWYoby5pc1BsYWluT2JqZWN0KGVbbl0pKXt2YXIgZz1lW25dLm5hbWUsdj0odVtnXXx8ZFtnXXx8e30pLm5hbWUsbT1lW25dLm5hbWUseT11W3ZdfHxkW3ZdO3YmJm0mJiJudW1iZXIiPT10eXBlb2YgbSYmeSYmRTw1JiYoRSsrLG8ud2FybignYWRkRnJhbWVzOiBvdmVyd3JpdGluZyBmcmFtZSAiJysodVt2XXx8ZFt2XSkubmFtZSsnIiB3aXRoIGEgZnJhbWUgd2hvc2UgbmFtZSBvZiB0eXBlICJudW1iZXIiIGFsc28gZXF1YXRlcyB0byAiJyt2KyciLiBUaGlzIGlzIHZhbGlkIGJ1dCBtYXkgcG90ZW50aWFsbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIHNpbmNlIGFsbCBwbG90bHkuanMgZnJhbWUgbmFtZXMgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGFzIHN0cmluZ3MuJyksNT09PUUmJm8ud2FybigiYWRkRnJhbWVzOiBUaGlzIEFQSSBjYWxsIGhhcyB5aWVsZGVkIHRvbyBtYW55IG9mIHRoZXNlIHdhcm5pbmdzLiBGb3IgdGhlIHJlc3Qgb2YgdGhpcyBjYWxsLCBmdXJ0aGVyIHdhcm5pbmdzIGFib3V0IG51bWVyaWMgZnJhbWUgbmFtZXMgd2lsbCBiZSBzdXBwcmVzc2VkLiIpKSxkW2ddPXtuYW1lOmd9LHAucHVzaCh7ZnJhbWU6aC5zdXBwbHlGcmFtZURlZmF1bHRzKGVbbl0pLGluZGV4OnImJnZvaWQgMCE9PXJbbl0mJm51bGwhPT1yW25dP3Jbbl06ZitufSl9cC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5kZXg+ZS5pbmRleD8tMTp0LmluZGV4PGUuaW5kZXg/MTowfSk7dmFyIHg9W10sYj1bXSxfPWwubGVuZ3RoO2ZvcihuPXAubGVuZ3RoLTE7bj49MDtuLS0pe2lmKCJudW1iZXIiPT10eXBlb2YoaT1wW25dLmZyYW1lKS5uYW1lJiZvLndhcm4oIldhcm5pbmc6IGFkZEZyYW1lcyBhY2NlcHRzIGZyYW1lcyB3aXRoIG51bWVyaWMgbmFtZXMsIGJ1dCB0aGUgbnVtYmVycyBhcmVpbXBsaWNpdGx5IGNhc3QgdG8gc3RyaW5ncyIpLCFpLm5hbWUpZm9yKDt1W2kubmFtZT0iZnJhbWUgIit0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcisrXTspO2lmKHVbaS5uYW1lXSl7Zm9yKGE9MDthPGwubGVuZ3RoJiYobFthXXx8e30pLm5hbWUhPT1pLm5hbWU7YSsrKTt4LnB1c2goe3R5cGU6InJlcGxhY2UiLGluZGV4OmEsdmFsdWU6aX0pLGIudW5zaGlmdCh7dHlwZToicmVwbGFjZSIsaW5kZXg6YSx2YWx1ZTpsW2FdfSl9ZWxzZSBzPU1hdGgubWF4KDAsTWF0aC5taW4ocFtuXS5pbmRleCxfKSkseC5wdXNoKHt0eXBlOiJpbnNlcnQiLGluZGV4OnMsdmFsdWU6aX0pLGIudW5zaGlmdCh7dHlwZToiZGVsZXRlIixpbmRleDpzfSksXysrfXZhciB3PWgubW9kaWZ5RnJhbWVzLGs9aC5tb2RpZnlGcmFtZXMsVD1bdCxiXSxBPVt0LHhdO3JldHVybiBjJiZjLmFkZCh0LHcsVCxrLEEpLGgubW9kaWZ5RnJhbWVzKHQseCl9LHIuZGVsZXRlRnJhbWVzPWZ1bmN0aW9uKHQsZSl7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KTt2YXIgcixuLGk9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxhPVtdLHM9W107aWYoIWUpZm9yKGU9W10scj0wO3I8aS5sZW5ndGg7cisrKWUucHVzaChyKTtmb3IoKGU9ZS5zbGljZSgwKSkuc29ydCgpLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSluPWVbcl0sYS5wdXNoKHt0eXBlOiJkZWxldGUiLGluZGV4Om59KSxzLnVuc2hpZnQoe3R5cGU6Imluc2VydCIsaW5kZXg6bix2YWx1ZTppW25dfSk7dmFyIGw9aC5tb2RpZnlGcmFtZXMsdT1oLm1vZGlmeUZyYW1lcyxmPVt0LHNdLHA9W3QsYV07cmV0dXJuIGMmJmMuYWRkKHQsbCxmLHUscCksaC5tb2RpZnlGcmFtZXModCxhKX0sci5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT0odD1vLmdldEdyYXBoRGl2KHQpKS5fZnVsbExheW91dHx8e30scj10Ll9mdWxsRGF0YXx8W107cmV0dXJuIGguY2xlYW5QbG90KFtdLHt9LHIsZSksaC5wdXJnZSh0KSxsLnB1cmdlKHQpLGUuX2NvbnRhaW5lciYmZS5fY29udGFpbmVyLnJlbW92ZSgpLGRlbGV0ZSB0Ll9jb250ZXh0LHR9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vY29tcG9uZW50cy9jb2xvcmJhci9jb25uZWN0Ijo1NzksIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6Njc4LCIuLi9saWIiOjcwMCwiLi4vbGliL2V2ZW50cyI6Njg5LCIuLi9saWIvcXVldWUiOjcxNSwiLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjc1NCwiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0Ijo3NTcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiOjc2NSwiLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5Ijo4MTgsIi4uL3JlZ2lzdHJ5Ijo4MjksIi4vZWRpdF90eXBlcyI6NzMxLCIuL2hlbHBlcnMiOjczMiwiLi9tYW5hZ2VfYXJyYXlzIjo3MzQsIi4vcGxvdF9jb25maWciOjczNiwiLi9wbG90X3NjaGVtYSI6NzM3LCIuL3N1YnJvdXRpbmVzIjo3MzksZDM6MTU0LCJmYXN0LWlzbnVtZXJpYyI6MjIxLCJoYXMtaG92ZXIiOjQwMn1dLDczNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17c3RhdGljUGxvdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scGxvdGx5U2VydmVyVVJMOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Imh0dHBzOi8vcGxvdC5seSJ9LGVkaXRhYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxlZGl0czp7YW5ub3RhdGlvblBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxhbm5vdGF0aW9uVGFpbDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYW5ub3RhdGlvblRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGF4aXNUaXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGNvbG9yYmFyUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGNvbG9yYmFyVGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsZWdlbmRQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGVnZW5kVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sc2hhcGVQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sYXV0b3NpemFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHJlc3BvbnNpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGxGcmFtZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZnJhbWVNYXJnaW5zOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxtYXg6LjV9LHNjcm9sbFpvb206e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImNhcnRlc2lhbiIsImdsM2QiLCJnZW8iLCJtYXBib3giXSxleHRyYXM6WyEwLCExXSxkZmx0OiJnbDNkK2dlbyttYXBib3gifSxkb3VibGVDbGljazp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwicmVzZXQiLCJhdXRvc2l6ZSIsInJlc2V0K2F1dG9zaXplIl0sZGZsdDoicmVzZXQrYXV0b3NpemUifSxzaG93QXhpc0RyYWdIYW5kbGVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93QXhpc1JhbmdlRW50cnlCb3hlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd1RpcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dMaW5rOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaW5rVGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJFZGl0IGNoYXJ0Iixub0JsYW5rOiEwfSxzZW5kRGF0YTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd1NvdXJjZXM6e3ZhbFR5cGU6ImFueSIsZGZsdDohMX0sZGlzcGxheU1vZGVCYXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImhvdmVyIiwhMCwhMV0sZGZsdDoiaG92ZXIifSxzaG93U2VuZFRvQ2xvdWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG1vZGVCYXJCdXR0b25zVG9SZW1vdmU6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnNUb0FkZDp7dmFsVHlwZToiYW55IixkZmx0OltdfSxtb2RlQmFyQnV0dG9uczp7dmFsVHlwZToiYW55IixkZmx0OiExfSx0b0ltYWdlQnV0dG9uT3B0aW9uczp7dmFsVHlwZToiYW55IixkZmx0Ont9fSxkaXNwbGF5bG9nbzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sd2F0ZXJtYXJrOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxwbG90R2xQaXhlbFJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MixtaW46MSxtYXg6NH0sc2V0QmFja2dyb3VuZDp7dmFsVHlwZToiYW55IixkZmx0OiJ0cmFuc3BhcmVudCJ9LHRvcG9qc29uVVJMOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsZGZsdDoiaHR0cHM6Ly9jZG4ucGxvdC5seS8ifSxtYXBib3hBY2Nlc3NUb2tlbjp7dmFsVHlwZToic3RyaW5nIixkZmx0Om51bGx9LGxvZ2dpbmc6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6MX0scXVldWVMZW5ndGg6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MH0sZ2xvYmFsVHJhbnNmb3Jtczp7dmFsVHlwZToiYW55IixkZmx0OltdfSxsb2NhbGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiZW4tVVMifSxsb2NhbGVzOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e319fSxpPXt9OyFmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl07aS52YWxUeXBlP3Jbbl09aS5kZmx0OihyW25dfHwocltuXT17fSksdChpLHJbbl0pKX19KG4saSksZS5leHBvcnRzPXtjb25maWdBdHRyaWJ1dGVzOm4sZGZsdENvbmZpZzppfX0se31dLDczNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlcyIpLGw9dCgiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxjPXQoIi4vcGxvdF9jb25maWciKS5jb25maWdBdHRyaWJ1dGVzLHU9dCgiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2FyZWFfYXR0cmlidXRlcyIpLGY9dCgiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2F4aXNfYXR0cmlidXRlcyIpLGg9dCgiLi9lZGl0X3R5cGVzIikscD1pLmV4dGVuZEZsYXQsZD1pLmV4dGVuZERlZXBBbGwsZz1pLmlzUGxhaW5PYmplY3Qsdj0iX2lzU3VicGxvdE9iaiIsbT0iX2lzTGlua2VkVG9BcnJheSIseT1bdixtLCJfYXJyYXlBdHRyUmVnZXhwcyIsIl9kZXByZWNhdGVkIl07ZnVuY3Rpb24geCh0LGUscil7aWYoIXQpcmV0dXJuITE7aWYodC5faXNMaW5rZWRUb0FycmF5KWlmKGIoZVtyXSkpcisrO2Vsc2UgaWYocjxlLmxlbmd0aClyZXR1cm4hMTtmb3IoO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKCFnKG4pKWJyZWFrO2lmKHQ9bixyPT09ZS5sZW5ndGgtMSlicmVhaztpZih0Ll9pc0xpbmtlZFRvQXJyYXkpe2lmKCFiKGVbKytyXSkpcmV0dXJuITF9ZWxzZSBpZigiaW5mb19hcnJheSI9PT10LnZhbFR5cGUpe3ZhciBpPWVbKytyXTtpZighYihpKSlyZXR1cm4hMTt2YXIgYT10Lml0ZW1zO2lmKEFycmF5LmlzQXJyYXkoYSkpe2lmKGk+PWEubGVuZ3RoKXJldHVybiExO2lmKDI9PT10LmRpbWVuc2lvbnMpe2lmKHIrKyxlLmxlbmd0aD09PXIpcmV0dXJuIHQ7dmFyIG89ZVtyXTtpZighYihvKSlyZXR1cm4hMTt0PWFbaV1bb119ZWxzZSB0PWFbaV19ZWxzZSB0PWF9fXJldHVybiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuIHQ9PT1NYXRoLnJvdW5kKHQpJiZ0Pj0wfWZ1bmN0aW9uIF8odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IuY3Jhd2wodCxmdW5jdGlvbih0LGUsbil7ci5pc1ZhbE9iamVjdCh0KT8iZGF0YV9hcnJheSI9PT10LnZhbFR5cGU/KHQucm9sZT0iZGF0YSIsbltlKyJzcmMiXT17dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibm9uZSJ9KTohMD09PXQuYXJyYXlPayYmKG5bZSsic3JjIl09e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifSk6Zyh0KSYmKHQucm9sZT0ib2JqZWN0Iil9KX0odCksZnVuY3Rpb24odCl7ci5jcmF3bCh0LGZ1bmN0aW9uKHQsZSxyKXtpZighdClyZXR1cm47dmFyIG49dFttXTtpZighbilyZXR1cm47ZGVsZXRlIHRbbV0scltlXT17aXRlbXM6e319LHJbZV0uaXRlbXNbbl09dCxyW2VdLnJvbGU9Im9iamVjdCJ9KX0odCksZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHQoZSl7Zm9yKHZhciByIGluIGUpaWYoZyhlW3JdKSl0KGVbcl0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlW3JdKSlmb3IodmFyIG49MDtuPGVbcl0ubGVuZ3RoO24rKyl0KGVbcl1bbl0pO2Vsc2UgZVtyXWluc3RhbmNlb2YgUmVnRXhwJiYoZVtyXT1lW3JdLnRvU3RyaW5nKCkpfSh0KX0odCksdH1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj1pLm5lc3RlZFByb3BlcnR5KHQsciksYT1kKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7YVt2XT0hMCxuLnNldChhKX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj1pLm5lc3RlZFByb3BlcnR5KHQscik7bi5zZXQoZChuLmdldCgpfHx7fSxlKSl9ci5JU19TVUJQTE9UX09CSj12LHIuSVNfTElOS0VEX1RPX0FSUkFZPW0sci5ERVBSRUNBVEVEPSJfZGVwcmVjYXRlZCIsci5VTkRFUlNDT1JFX0FUVFJTPXksci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTtuLmFsbFR5cGVzLmNvbmNhdCgiYXJlYSIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1mdW5jdGlvbih0KXt2YXIgZSxvOyJhcmVhIj09PXQ/KGU9e2F0dHJpYnV0ZXM6dX0sbz17fSk6KGU9bi5tb2R1bGVzW3RdLl9tb2R1bGUsbz1lLmJhc2VQbG90TW9kdWxlKTt2YXIgcz17dHlwZTpudWxsfSxsPWQoe30sYSksYz1kKHt9LGUuYXR0cmlidXRlcyk7ci5jcmF3bChjLGZ1bmN0aW9uKHQsZSxyLG4sYSl7aS5uZXN0ZWRQcm9wZXJ0eShsLGEpLnNldCh2b2lkIDApLHZvaWQgMD09PXQmJmkubmVzdGVkUHJvcGVydHkoYyxhKS5zZXQodm9pZCAwKX0pLGQocyxsKSxkKHMsYyksby5hdHRyaWJ1dGVzJiZkKHMsby5hdHRyaWJ1dGVzKTtzLnR5cGU9dDt2YXIgZj17bWV0YTplLm1ldGF8fHt9LGF0dHJpYnV0ZXM6XyhzKX07aWYoZS5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgaD17fTtkKGgsZS5sYXlvdXRBdHRyaWJ1dGVzKSxmLmxheW91dEF0dHJpYnV0ZXM9XyhoKX1yZXR1cm4gZn0oZSl9KTt2YXIgZSxnPXt9O3JldHVybiBPYmplY3Qua2V5cyhuLnRyYW5zZm9ybXNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbih0KXtnW3RdPWZ1bmN0aW9uKHQpe3ZhciBlPW4udHJhbnNmb3Jtc1JlZ2lzdHJ5W3RdLHI9ZCh7fSxlLmF0dHJpYnV0ZXMpO3JldHVybiBPYmplY3Qua2V5cyhuLmNvbXBvbmVudHNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgaT1uLmNvbXBvbmVudHNSZWdpc3RyeVtlXTtpLnNjaGVtYSYmaS5zY2hlbWEudHJhbnNmb3JtcyYmaS5zY2hlbWEudHJhbnNmb3Jtc1t0XSYmT2JqZWN0LmtleXMoaS5zY2hlbWEudHJhbnNmb3Jtc1t0XSkuZm9yRWFjaChmdW5jdGlvbihlKXtrKHIsaS5zY2hlbWEudHJhbnNmb3Jtc1t0XVtlXSxlKX0pfSkse2F0dHJpYnV0ZXM6XyhyKX19KHQpfSkse2RlZnM6e3ZhbE9iamVjdHM6aS52YWxPYmplY3RNZXRhLG1ldGFLZXlzOnkuY29uY2F0KFsiZGVzY3JpcHRpb24iLCJyb2xlIiwiZWRpdFR5cGUiLCJpbXBsaWVkRWRpdHMiXSksZWRpdFR5cGU6e3RyYWNlczpoLnRyYWNlcyxsYXlvdXQ6aC5sYXlvdXR9LGltcGxpZWRFZGl0czp7fX0sdHJhY2VzOnQsbGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXt9O2Zvcih0IGluIGQocixvKSxuLnN1YnBsb3RzUmVnaXN0cnkpaWYoKGU9bi5zdWJwbG90c1JlZ2lzdHJ5W3RdKS5sYXlvdXRBdHRyaWJ1dGVzKWlmKEFycmF5LmlzQXJyYXkoZS5hdHRyKSlmb3IodmFyIGk9MDtpPGUuYXR0ci5sZW5ndGg7aSsrKXcocixlLGUuYXR0cltpXSk7ZWxzZXt2YXIgYT0ic3VicGxvdCI9PT1lLmF0dHI/ZS5uYW1lOmUuYXR0cjt3KHIsZSxhKX1mb3IodCBpbiByPWZ1bmN0aW9uKHQpe3JldHVybiBwKHQse3JhZGlhbGF4aXM6Zi5yYWRpYWxheGlzLGFuZ3VsYXJheGlzOmYuYW5ndWxhcmF4aXN9KSxwKHQsZi5sYXlvdXQpLHR9KHIpLG4uY29tcG9uZW50c1JlZ2lzdHJ5KXt2YXIgcz0oZT1uLmNvbXBvbmVudHNSZWdpc3RyeVt0XSkuc2NoZW1hO2lmKHMmJihzLnN1YnBsb3RzfHxzLmxheW91dCkpe3ZhciBsPXMuc3VicGxvdHM7aWYobCYmbC54YXhpcyYmIWwueWF4aXMpZm9yKHZhciBjIGluIGwueGF4aXMpZGVsZXRlIHIueWF4aXNbY119ZWxzZSBlLmxheW91dEF0dHJpYnV0ZXMmJmsocixlLmxheW91dEF0dHJpYnV0ZXMsZS5uYW1lKX1yZXR1cm57bGF5b3V0QXR0cmlidXRlczpfKHIpfX0oKSx0cmFuc2Zvcm1zOmcsZnJhbWVzOihlPXtmcmFtZXM6aS5leHRlbmREZWVwQWxsKHt9LHMpfSxfKGUpLGUuZnJhbWVzKSxhbmltYXRpb246XyhsKSxjb25maWc6XyhjKX19LHIuY3Jhd2w9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9bnx8MDtpPWl8fCIiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG89dFtuXTtpZigtMT09PXkuaW5kZXhPZihuKSl7dmFyIHM9KGk/aSsiLiI6IiIpK247ZShvLG4sdCxhLHMpLHIuaXNWYWxPYmplY3Qobyl8fGcobykmJiJpbXBsaWVkRWRpdHMiIT09biYmci5jcmF3bChvLGUsYSsxLHMpfX0pfSxyLmlzVmFsT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ2b2lkIDAhPT10LnZhbFR5cGV9LHIuZmluZEFycmF5QXR0cmlidXRlcz1mdW5jdGlvbih0KXt2YXIgZSxuLG89W10scz1bXSxsPVtdO2Z1bmN0aW9uIGModCxyLGEsYyl7cz1zLnNsaWNlKDAsYykuY29uY2F0KFtyXSksbD1sLnNsaWNlKDAsYykuY29uY2F0KFt0JiZ0Ll9pc0xpbmtlZFRvQXJyYXldKSx0JiYoImRhdGFfYXJyYXkiPT09dC52YWxUeXBlfHwhMD09PXQuYXJyYXlPaykmJiEoImNvbG9yYmFyIj09PXNbYy0xXSYmKCJ0aWNrdGV4dCI9PT1yfHwidGlja3ZhbHMiPT09cikpJiZmdW5jdGlvbiB0KGUscixhKXt2YXIgYz1lW3Nbcl1dO3ZhciB1PWErc1tyXTtpZihyPT09cy5sZW5ndGgtMSlpLmlzQXJyYXlPclR5cGVkQXJyYXkoYykmJm8ucHVzaChuK3UpO2Vsc2UgaWYobFtyXSl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKylpLmlzUGxhaW5PYmplY3QoY1tmXSkmJnQoY1tmXSxyKzEsdSsiWyIrZisiXS4iKX1lbHNlIGkuaXNQbGFpbk9iamVjdChjKSYmdChjLHIrMSx1KyIuIil9KGUsMCwiIil9ZT10LG49IiIsci5jcmF3bChhLGMpLHQuX21vZHVsZSYmdC5fbW9kdWxlLmF0dHJpYnV0ZXMmJnIuY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsYyk7dmFyIHU9dC50cmFuc2Zvcm1zO2lmKHUpZm9yKHZhciBmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBoPXVbZl0scD1oLl9tb2R1bGU7cCYmKG49InRyYW5zZm9ybXNbIitmKyJdLiIsZT1oLHIuY3Jhd2wocC5hdHRyaWJ1dGVzLGMpKX1yZXR1cm4gb30sci5nZXRUcmFjZVZhbE9iamVjdD1mdW5jdGlvbih0LGUpe3ZhciByLGksbz1lWzBdLHM9MTtpZigidHJhbnNmb3JtcyI9PT1vKXtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIGEudHJhbnNmb3Jtczt2YXIgbD10LnRyYW5zZm9ybXM7aWYoIUFycmF5LmlzQXJyYXkobCl8fCFsLmxlbmd0aClyZXR1cm4hMTt2YXIgYz1lWzFdO2lmKCFiKGMpfHxjPj1sLmxlbmd0aClyZXR1cm4hMTtpPShyPShuLnRyYW5zZm9ybXNSZWdpc3RyeVtsW2NdLnR5cGVdfHx7fSkuYXR0cmlidXRlcykmJnJbZVsyXV0scz0zfWVsc2UgaWYoImFyZWEiPT09dC50eXBlKWk9dVtvXTtlbHNle3ZhciBmPXQuX21vZHVsZTtpZihmfHwoZj0obi5tb2R1bGVzW3QudHlwZXx8YS50eXBlLmRmbHRdfHx7fSkuX21vZHVsZSksIWYpcmV0dXJuITE7aWYoIShpPShyPWYuYXR0cmlidXRlcykmJnJbb10pKXt2YXIgaD1mLmJhc2VQbG90TW9kdWxlO2gmJmguYXR0cmlidXRlcyYmKGk9aC5hdHRyaWJ1dGVzW29dKX1pfHwoaT1hW29dKX1yZXR1cm4geChpLGUscyl9LHIuZ2V0TGF5b3V0VmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgoZnVuY3Rpb24odCxlKXt2YXIgcixpLGEscyxsPXQuX2Jhc2VQbG90TW9kdWxlcztpZihsKXt2YXIgYztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKXtpZigoYT1sW3JdKS5hdHRyUmVnZXgmJmEuYXR0clJlZ2V4LnRlc3QoZSkpe2lmKGEubGF5b3V0QXR0ck92ZXJyaWRlcylyZXR1cm4gYS5sYXlvdXRBdHRyT3ZlcnJpZGVzOyFjJiZhLmxheW91dEF0dHJpYnV0ZXMmJihjPWEubGF5b3V0QXR0cmlidXRlcyl9dmFyIHU9YS5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcztpZih1JiZlIGluIHUpcmV0dXJuIHVbZV19aWYoYylyZXR1cm4gY312YXIgaD10Ll9tb2R1bGVzO2lmKGgpZm9yKHI9MDtyPGgubGVuZ3RoO3IrKylpZigocz1oW3JdLmxheW91dEF0dHJpYnV0ZXMpJiZlIGluIHMpcmV0dXJuIHNbZV07Zm9yKGkgaW4gbi5jb21wb25lbnRzUmVnaXN0cnkpaWYoIShhPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2ldKS5zY2hlbWEmJmU9PT1hLm5hbWUpcmV0dXJuIGEubGF5b3V0QXR0cmlidXRlcztpZihlIGluIG8pcmV0dXJuIG9bZV07aWYoInJhZGlhbGF4aXMiPT09ZXx8ImFuZ3VsYXJheGlzIj09PWUpcmV0dXJuIGZbZV07cmV0dXJuIGYubGF5b3V0W2VdfHwhMX0odCxlWzBdKSxlLDEpfX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc0MywiLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzIjo3NzUsIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo4MDEsIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9hcmVhX2F0dHJpYnV0ZXMiOjgxNiwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2F4aXNfYXR0cmlidXRlcyI6ODE3LCIuLi9yZWdpc3RyeSI6ODI5LCIuL2VkaXRfdHlwZXMiOjczMSwiLi9wbG90X2NvbmZpZyI6NzM2fV0sNzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9InRlbXBsYXRlaXRlbW5hbWUiLG89e25hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifX07ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4icyIhPT10LmNoYXJBdChlKSYmbi53YXJuKCJiYWQgYXJndW1lbnQgdG8gYXJyYXlEZWZhdWx0S2V5OiAiK3QpLHQuc3Vic3RyKDAsdC5sZW5ndGgtMSkrImRlZmF1bHRzIn1vW2FdPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sci50ZW1wbGF0ZWRBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiBlLl9pc0xpbmtlZFRvQXJyYXk9dCxlLm5hbWU9by5uYW1lLGVbYV09b1thXSxlfSxyLnRyYWNlVGVtcGxhdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYT17fTtmb3IoZSBpbiB0KXI9dFtlXSxBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aCYmKGFbZV09MCk7cmV0dXJue25ld1RyYWNlOmZ1bmN0aW9uKG8pe3ZhciBzPXt0eXBlOmU9bi5jb2VyY2Uobyx7fSxpLCJ0eXBlIiksX3RlbXBsYXRlOm51bGx9O2lmKGUgaW4gYSl7cj10W2VdO3ZhciBsPWFbZV0lci5sZW5ndGg7YVtlXSsrLHMuX3RlbXBsYXRlPXJbbF19cmV0dXJuIHN9fX0sci5uZXdDb250YWluZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuX3RlbXBsYXRlLGE9aSYmKGlbZV18fHImJmlbcl0pO3JldHVybiBuLmlzUGxhaW5PYmplY3QoYSl8fChhPW51bGwpLHRbZV09e190ZW1wbGF0ZTphfX0sci5hcnJheVRlbXBsYXRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fdGVtcGxhdGUsaT1uJiZuW2woZSldLG89biYmbltlXTtBcnJheS5pc0FycmF5KG8pJiZvLmxlbmd0aHx8KG89W10pO3ZhciBjPXt9O3JldHVybntuZXdJdGVtOmZ1bmN0aW9uKHQpe3ZhciBlPXtuYW1lOnQubmFtZSxfaW5wdXQ6dH0sbj1lW2FdPXRbYV07aWYoIXMobikpcmV0dXJuIGUuX3RlbXBsYXRlPWksZTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIHU9b1tsXTtpZih1Lm5hbWU9PT1uKXJldHVybiBjW25dPTEsZS5fdGVtcGxhdGU9dSxlfXJldHVybiBlW3JdPXRbcl18fCExLGUuX3RlbXBsYXRlPSExLGV9LGRlZmF1bHRJdGVtczpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciByPW9bZV0sbj1yLm5hbWU7aWYocyhuKSYmIWNbbl0pe3ZhciBpPXtfdGVtcGxhdGU6cixuYW1lOm4sX2lucHV0OntfdGVtcGxhdGVpdGVtbmFtZTpufX07aVthXT1yW2FdLHQucHVzaChpKSxjW25dPTF9fXJldHVybiB0fX19LHIuYXJyYXlEZWZhdWx0S2V5PWwsci5hcnJheUVkaXRvcj1mdW5jdGlvbih0LGUscil7dmFyIGk9KG4ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8W10pLmxlbmd0aCxvPXIuX2luZGV4LHM9bz49aSYmKHIuX2lucHV0fHx7fSkuX3RlbXBsYXRlaXRlbW5hbWU7cyYmKG89aSk7dmFyIGwsYz1lKyJbIitvKyJdIjtmdW5jdGlvbiB1KCl7bD17fSxzJiYobFtjXT17fSxsW2NdW2FdPXMpfWZ1bmN0aW9uIGYodCxlKXtzP24ubmVzdGVkUHJvcGVydHkobFtjXSx0KS5zZXQoZSk6bFtjKyIuIit0XT1lfWZ1bmN0aW9uIGgoKXt2YXIgdD1sO3JldHVybiB1KCksdH1yZXR1cm4gdSgpLHttb2RpZnlCYXNlOmZ1bmN0aW9uKHQsZSl7bFt0XT1lfSxtb2RpZnlJdGVtOmYsZ2V0VXBkYXRlT2JqOmgsYXBwbHlVcGRhdGU6ZnVuY3Rpb24oZSxyKXtlJiZmKGUscik7dmFyIGk9aCgpO2Zvcih2YXIgYSBpbiBpKW4ubmVzdGVkUHJvcGVydHkodCxhKS5zZXQoaVthXSl9fX19LHsiLi4vbGliIjo3MDAsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NX1dLDczOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9saWIiKSxzPXQoIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLGw9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi9jb21wb25lbnRzL3RpdGxlcyIpLGY9dCgiLi4vY29tcG9uZW50cy9tb2RlYmFyIiksaD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHA9dCgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGQ9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksZz1kLmVuZm9yY2Usdj1kLmNsZWFuLG09dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLHk9InN0YXJ0Iix4PSJtaWRkbGUiLGI9ImVuZCI7ZnVuY3Rpb24gXyh0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl1bMF0sYT1yW25dWzFdO2lmKCEoaVswXT49dFsxXXx8aVsxXTw9dFswXSkmJihhWzBdPGVbMV0mJmFbMV0+ZVswXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdyh0KXt2YXIgZSxpLGEscyx1LGQsZz10Ll9mdWxsTGF5b3V0LHY9Zy5fc2l6ZSxtPXYucCx5PWgubGlzdCh0LCIiLCEwKTtpZihnLl9wYXBlcmRpdi5zdHlsZSh7d2lkdGg6dC5fY29udGV4dC5yZXNwb25zaXZlJiZnLmF1dG9zaXplJiYhdC5fY29udGV4dC5faGFzWmVyb1dpZHRoJiYhdC5sYXlvdXQud2lkdGg/IjEwMCUiOmcud2lkdGgrInB4IixoZWlnaHQ6dC5fY29udGV4dC5yZXNwb25zaXZlJiZnLmF1dG9zaXplJiYhdC5fY29udGV4dC5faGFzWmVyb0hlaWdodCYmIXQubGF5b3V0LmhlaWdodD8iMTAwJSI6Zy5oZWlnaHQrInB4In0pLnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuY2FsbChjLnNldFNpemUsZy53aWR0aCxnLmhlaWdodCksdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsZy5wYXBlcl9iZ2NvbG9yKSxyLmRyYXdNYWluVGl0bGUodCksZi5tYW5hZ2UodCksIWcuX2hhcygiY2FydGVzaWFuIikpcmV0dXJuIHQuX3Byb21pc2VzLmxlbmd0aCYmUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpO2Z1bmN0aW9uIHgodCxlLHIpe3ZhciBuPXQuX2x3LzI7cmV0dXJuIngiPT09dC5faWQuY2hhckF0KDApP2U/InRvcCI9PT1yP2UuX29mZnNldC1tLW46ZS5fb2Zmc2V0K2UuX2xlbmd0aCttK246di50K3YuaCooMS0odC5wb3NpdGlvbnx8MCkpK24lMTplPyJyaWdodCI9PT1yP2UuX29mZnNldCtlLl9sZW5ndGgrbStuOmUuX29mZnNldC1tLW46di5sK3YudyoodC5wb3NpdGlvbnx8MCkrbiUxfWZvcihlPTA7ZTx5Lmxlbmd0aDtlKyspe3ZhciBiPShzPXlbZV0pLl9hbmNob3JBeGlzO3MuX2xpbmVwb3NpdGlvbnM9e30scy5fbHc9Yy5jcmlzcFJvdW5kKHQscy5saW5ld2lkdGgsMSkscy5fbWFpbkxpbmVQb3NpdGlvbj14KHMsYixzLnNpZGUpLHMuX21haW5NaXJyb3JQb3NpdGlvbj1zLm1pcnJvciYmYj94KHMsYixwLk9QUE9TSVRFX1NJREVbcy5zaWRlXSk6bnVsbH12YXIgdz1bXSxUPVtdLE09W10sUz0xPT09bC5vcGFjaXR5KGcucGFwZXJfYmdjb2xvcikmJjE9PT1sLm9wYWNpdHkoZy5wbG90X2JnY29sb3IpJiZnLnBhcGVyX2JnY29sb3I9PT1nLnBsb3RfYmdjb2xvcjtmb3IoaSBpbiBnLl9wbG90cylpZigoYT1nLl9wbG90c1tpXSkubWFpbnBsb3QpYS5iZyYmYS5iZy5yZW1vdmUoKSxhLmJnPXZvaWQgMDtlbHNle3ZhciBFPWEueGF4aXMuZG9tYWluLEM9YS55YXhpcy5kb21haW4sTD1hLnBsb3Rncm91cDtpZihfKEUsQyxNKSl7dmFyIHo9TC5ub2RlKCksTz1hLmJnPW8uZW5zdXJlU2luZ2xlKEwsInJlY3QiLCJiZyIpO3ouaW5zZXJ0QmVmb3JlKE8ubm9kZSgpLHouY2hpbGROb2Rlc1swXSksVC5wdXNoKGkpfWVsc2UgTC5zZWxlY3QoInJlY3QuYmciKS5yZW1vdmUoKSxNLnB1c2goW0UsQ10pLFN8fCh3LnB1c2goaSksVC5wdXNoKGkpKX12YXIgSSxELFAsUixGLEIsTixqLFYsVSxxLEgsRyxZPWcuX2JnTGF5ZXIuc2VsZWN0QWxsKCIuYmciKS5kYXRhKHcpO2ZvcihZLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiYmciLCEwKSxZLmV4aXQoKS5yZW1vdmUoKSxZLmVhY2goZnVuY3Rpb24odCl7Zy5fcGxvdHNbdF0uYmc9bi5zZWxlY3QodGhpcyl9KSxlPTA7ZTxULmxlbmd0aDtlKyspYT1nLl9wbG90c1tUW2VdXSx1PWEueGF4aXMsZD1hLnlheGlzLGEuYmcmJmEuYmcuY2FsbChjLnNldFJlY3QsdS5fb2Zmc2V0LW0sZC5fb2Zmc2V0LW0sdS5fbGVuZ3RoKzIqbSxkLl9sZW5ndGgrMiptKS5jYWxsKGwuZmlsbCxnLnBsb3RfYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCk7aWYoIWcuX2hhc09ubHlMYXJnZVNwbG9tcylmb3IoaSBpbiBnLl9wbG90cyl7YT1nLl9wbG90c1tpXSx1PWEueGF4aXMsZD1hLnlheGlzO3ZhciBXLFgsWj1hLmNsaXBJZD0iY2xpcCIrZy5fdWlkK2krInBsb3QiLCQ9by5lbnN1cmVTaW5nbGVCeUlkKGcuX2NsaXBzLCJjbGlwUGF0aCIsWixmdW5jdGlvbih0KXt0LmNsYXNzZWQoInBsb3RjbGlwIiwhMCkuYXBwZW5kKCJyZWN0Iil9KTthLmNsaXBSZWN0PSQuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6dS5fbGVuZ3RoLGhlaWdodDpkLl9sZW5ndGh9KSxjLnNldFRyYW5zbGF0ZShhLnBsb3QsdS5fb2Zmc2V0LGQuX29mZnNldCksYS5faGFzQ2xpcE9uQXhpc0ZhbHNlPyhXPW51bGwsWD1aKTooVz1aLFg9bnVsbCksYy5zZXRDbGlwVXJsKGEucGxvdCxXLHQpLGEubGF5ZXJDbGlwSWQ9WH1mdW5jdGlvbiBKKHQpe3JldHVybiJNIitJKyIsIit0KyJIIitEfWZ1bmN0aW9uIEsodCl7cmV0dXJuIk0iK3UuX29mZnNldCsiLCIrdCsiaCIrdS5fbGVuZ3RofWZ1bmN0aW9uIFEodCl7cmV0dXJuIk0iK3QrIiwiK2orIlYiK059ZnVuY3Rpb24gdHQodCl7cmV0dXJuIk0iK3QrIiwiK2QuX29mZnNldCsidiIrZC5fbGVuZ3RofWZ1bmN0aW9uIGV0KHQsZSxyKXtpZighdC5zaG93bGluZXx8aSE9PXQuX21haW5TdWJwbG90KXJldHVybiIiO2lmKCF0Ll9hbmNob3JBeGlzKXJldHVybiByKHQuX21haW5MaW5lUG9zaXRpb24pO3ZhciBuPWUodC5fbWFpbkxpbmVQb3NpdGlvbik7cmV0dXJuIHQubWlycm9yJiYobis9ZSh0Ll9tYWluTWlycm9yUG9zaXRpb24pKSxufWZvcihpIGluIGcuX3Bsb3RzKXthPWcuX3Bsb3RzW2ldLHU9YS54YXhpcyxkPWEueWF4aXM7dmFyIHJ0PSJNMCwwIjtrKHUsaSkmJihGPUEodSwibGVmdCIsZCx5KSxJPXUuX29mZnNldC0oRj9tK0Y6MCksQj1BKHUsInJpZ2h0IixkLHkpLEQ9dS5fb2Zmc2V0K3UuX2xlbmd0aCsoQj9tK0I6MCksUD14KHUsZCwiYm90dG9tIiksUj14KHUsZCwidG9wIiksIShHPSF1Ll9hbmNob3JBeGlzfHxpIT09dS5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09dS5taXJyb3ImJiJhbGwiIT09dS5taXJyb3J8fCh1Ll9saW5lcG9zaXRpb25zW2ldPVtQLFJdKSxydD1ldCh1LEosSyksRyYmdS5zaG93bGluZSYmKCJhbGwiPT09dS5taXJyb3J8fCJhbGx0aWNrcyI9PT11Lm1pcnJvcikmJihydCs9SihQKStKKFIpKSxhLnhsaW5lcy5zdHlsZSgic3Ryb2tlLXdpZHRoIix1Ll9sdysicHgiKS5jYWxsKGwuc3Ryb2tlLHUuc2hvd2xpbmU/dS5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSksYS54bGluZXMuYXR0cigiZCIscnQpO3ZhciBudD0iTTAsMCI7ayhkLGkpJiYocT1BKGQsImJvdHRvbSIsdSx5KSxOPWQuX29mZnNldCtkLl9sZW5ndGgrKHE/bTowKSxIPUEoZCwidG9wIix1LHkpLGo9ZC5fb2Zmc2V0LShIP206MCksVj14KGQsdSwibGVmdCIpLFU9eChkLHUsInJpZ2h0IiksIShHPSFkLl9hbmNob3JBeGlzfHxpIT09ZC5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09ZC5taXJyb3ImJiJhbGwiIT09ZC5taXJyb3J8fChkLl9saW5lcG9zaXRpb25zW2ldPVtWLFVdKSxudD1ldChkLFEsdHQpLEcmJmQuc2hvd2xpbmUmJigiYWxsIj09PWQubWlycm9yfHwiYWxsdGlja3MiPT09ZC5taXJyb3IpJiYobnQrPVEoVikrUShVKSksYS55bGluZXMuc3R5bGUoInN0cm9rZS13aWR0aCIsZC5fbHcrInB4IikuY2FsbChsLnN0cm9rZSxkLnNob3dsaW5lP2QubGluZWNvbG9yOiJyZ2JhKDAsMCwwLDApIikpLGEueWxpbmVzLmF0dHIoImQiLG50KX1yZXR1cm4gaC5tYWtlQ2xpcFBhdGhzKHQpLHQuX3Byb21pc2VzLmxlbmd0aCYmUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4odC50aWNrc3x8dC5zaG93bGluZSkmJihlPT09dC5fbWFpblN1YnBsb3R8fCJhbGwiPT09dC5taXJyb3J8fCJhbGx0aWNrcyI9PT10Lm1pcnJvcil9ZnVuY3Rpb24gVCh0LGUscil7aWYoIXIuc2hvd2xpbmV8fCFyLl9sdylyZXR1cm4hMTtpZigiYWxsIj09PXIubWlycm9yfHwiYWxsdGlja3MiPT09ci5taXJyb3IpcmV0dXJuITA7dmFyIG49ci5fYW5jaG9yQXhpcztpZighbilyZXR1cm4hMTt2YXIgaT1wLkZST01fQkxbZV07cmV0dXJuIHIuc2lkZT09PWU/bi5kb21haW5baV09PT10LmRvbWFpbltpXTpyLm1pcnJvciYmbi5kb21haW5bMS1pXT09PXQuZG9tYWluWzEtaV19ZnVuY3Rpb24gQSh0LGUscixuKXtpZihUKHQsZSxyKSlyZXR1cm4gci5fbHc7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07aWYoYS5fbWFpbkF4aXM9PT1yLl9tYWluQXhpcyYmVCh0LGUsYSkpcmV0dXJuIGEuX2x3fXJldHVybiAwfXIubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBvLnN5bmNPckFzeW5jKFthLmRvQXV0b01hcmdpbix3XSx0KX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9eDtvLmlzUmlnaHRBbmNob3IoZSk/cj1iOm8uaXNMZWZ0QW5jaG9yKGUpJiYocj15KTtyZXR1cm4gcn0oZSksbj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9IjBlbSI7by5pc1RvcEFuY2hvcihlKT9yPXAuQ0FQX1NISUZUKyJlbSI6by5pc01pZGRsZUFuY2hvcihlKSYmKHI9cC5NSURfU0hJRlQrImVtIik7cmV0dXJuIHJ9KGUpO3UuZHJhdyh0LCJndGl0bGUiLHtwcm9wQ29udGFpbmVyOmUscHJvcE5hbWU6InRpdGxlLnRleHQiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS5wbG90LGF0dHJpYnV0ZXM6e3g6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRpdGxlLG49dC5fc2l6ZSxpPTA7ZT09PXk/aT1yLnBhZC5sOmU9PT1iJiYoaT0tci5wYWQucik7c3dpdGNoKHIueHJlZil7Y2FzZSJwYXBlciI6cmV0dXJuIG4ubCtuLncqci54K2k7Y2FzZSJjb250YWluZXIiOmRlZmF1bHQ6cmV0dXJuIHQud2lkdGgqci54K2l9fShlLHIpLHk6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRpdGxlLG49dC5fc2l6ZSxpPTA7IjBlbSIhPT1lJiZlP2U9PT1wLkNBUF9TSElGVCsiZW0iJiYoaT1yLnBhZC50KTppPS1yLnBhZC5iO2lmKCJhdXRvIj09PXIueSlyZXR1cm4gbi50LzI7c3dpdGNoKHIueXJlZil7Y2FzZSJwYXBlciI6cmV0dXJuIG4udCtuLmgtbi5oKnIueStpO2Nhc2UiY29udGFpbmVyIjpkZWZhdWx0OnJldHVybiB0LmhlaWdodC10LmhlaWdodCpyLnkraX19KGUsbiksInRleHQtYW5jaG9yIjpyLGR5Om59fSl9LHIuZG9UcmFjZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5jYWxjZGF0YSxvPVtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBsPW5bZV0sYz1sWzBdfHx7fSx1PWMudHJhY2V8fHt9LGY9dS5fbW9kdWxlfHx7fSxoPWYuYXJyYXlzVG9DYWxjZGF0YTtoJiZoKGwsdSk7dmFyIHA9Zi5lZGl0U3R5bGU7cCYmby5wdXNoKHtmbjpwLGNkMDpjfSl9aWYoby5sZW5ndGgpe2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciBkPW9bZV07ZC5mbih0LGQuY2QwKX1zKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KX1yZXR1cm4gYS5zdHlsZSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NvbG9yQmFycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQuY2FsY2RhdGEubGVuZ3RoO2UrKyl7dmFyIHI9dC5jYWxjZGF0YVtlXVswXTtpZigoci50fHx7fSkuY2Ipe3ZhciBuPXIudHJhY2Usbz1yLnQuY2I7aS50cmFjZUlzKG4sImNvbnRvdXIiKSYmby5saW5lKHt3aWR0aDohMSE9PW4uY29udG91cnMuc2hvd2xpbmVzP24ubGluZS53aWR0aDowLGRhc2g6bi5saW5lLmRhc2gsY29sb3I6ImxpbmUiPT09bi5jb250b3Vycy5jb2xvcmluZz9vLl9vcHRzLmxpbmUuY29sb3I6bi5saW5lLmNvbG9yfSk7dmFyIHM9bi5fbW9kdWxlLmNvbG9yYmFyLmNvbnRhaW5lcixsPShzP25bc106bikuY29sb3JiYXI7by5vcHRpb25zKGwpKCl9fXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LHIubGF5b3V0UmVwbG90PWZ1bmN0aW9uKHQpe3ZhciBlPXQubGF5b3V0O3JldHVybiB0LmxheW91dD12b2lkIDAsaS5jYWxsKCJwbG90Iix0LCIiLGUpfSxyLmRvTGVnZW5kPWZ1bmN0aW9uKHQpe3JldHVybiBpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb1RpY2tzUmVsYXlvdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGguZHJhdyh0LCJyZWRyYXciKSx0Ll9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXMmJihpLnN1YnBsb3RzUmVnaXN0cnkuc3Bsb20udXBkYXRlR3JpZCh0KSxzKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KSksci5kcmF3TWFpblRpdGxlKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb01vZGVCYXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtmLm1hbmFnZSh0KTtmb3IodmFyIHI9MDtyPGUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7cisrKXt2YXIgbj1lLl9iYXNlUGxvdE1vZHVsZXNbcl0udXBkYXRlRng7biYmbih0KX1yZXR1cm4gYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQ2FtZXJhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wzZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWVbcltuXV0sYT1pLl9zY2VuZSxvPWkuY2FtZXJhO2Euc2V0Q2FtZXJhKG8pfX0sci5kcmF3RGF0YT1mdW5jdGlvbih0KXt2YXIgZSxuPXQuX2Z1bGxMYXlvdXQsbz10LmNhbGNkYXRhO2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciBsPW9bZV1bMF0udHJhY2U7ITA9PT1sLnZpc2libGUmJmwuX21vZHVsZS5jb2xvcmJhcnx8bi5faW5mb2xheWVyLnNlbGVjdCgiLmNiIitsLnVpZCkucmVtb3ZlKCl9cyh0KTt2YXIgYz1uLl9iYXNlUGxvdE1vZHVsZXM7Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKyljW2VdLnBsb3QodCk7cmV0dXJuIHIucmVkcmF3UmVnbFRyYWNlcyh0KSxhLnN0eWxlKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLG4uX3JlcGxvdHRpbmc9ITEsYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLnJlZHJhd1JlZ2xUcmFjZXM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZihlLl9oYXMoInJlZ2wiKSl7dmFyIHIsbixpPXQuX2Z1bGxEYXRhLGE9W10scz1bXTtmb3IoZS5faGFzT25seUxhcmdlU3Bsb21zJiZlLl9zcGxvbUdyaWQuZHJhdygpLHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIGw9aVtyXTshMD09PWwudmlzaWJsZSYmKCJzcGxvbSI9PT1sLnR5cGU/ZS5fc3Bsb21TY2VuZXNbbC51aWRdLmRyYXcoKToic2NhdHRlcmdsIj09PWwudHlwZT9vLnB1c2hVbmlxdWUoYSxsLnhheGlzK2wueWF4aXMpOiJzY2F0dGVycG9sYXJnbCI9PT1sLnR5cGUmJm8ucHVzaFVuaXF1ZShzLGwuc3VicGxvdCkpfWZvcihyPTA7cjxhLmxlbmd0aDtyKyspKG49ZS5fcGxvdHNbYVtyXV0pLl9zY2VuZSYmbi5fc2NlbmUuZHJhdygpO2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspKG49ZVtzW3JdXS5fc3VicGxvdCkuX3NjZW5lJiZuLl9zY2VuZS5kcmF3KCl9fSxyLmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5fZnVsbExheW91dCxuPWgubGlzdCh0LCIiLCEwKSxpPXIuX2F4aXNNYXRjaEdyb3Vwc3x8W10sYT0wO2E8bi5sZW5ndGg7YSsrKWU9blthXSx2KHQsZSksbSh0LGUpO2codCk7dDpmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHMsbD1pW29dLGM9bnVsbDtmb3IocyBpbiBsKXtpZighMT09PShlPWguZ2V0RnJvbUlkKHQscykpLmF1dG9yYW5nZSljb250aW51ZSB0O2M/Y1swXTxjWzFdPyhjWzBdPU1hdGgubWluKGNbMF0sZS5yYW5nZVswXSksY1sxXT1NYXRoLm1heChjWzFdLGUucmFuZ2VbMV0pKTooY1swXT1NYXRoLm1heChjWzBdLGUucmFuZ2VbMF0pLGNbMV09TWF0aC5taW4oY1sxXSxlLnJhbmdlWzFdKSk6Yz1lLnJhbmdlfWZvcihzIGluIGwpKGU9aC5nZXRGcm9tSWQodCxzKSkucmFuZ2U9Yy5zbGljZSgpLGUuX2lucHV0LnJhbmdlPWMuc2xpY2UoKSxlLnNldFNjYWxlKCl9fSxyLmZpbmFsRHJhdz1mdW5jdGlvbih0KXtpLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImRyYXciKSh0KX0sci5kcmF3TWFyZ2luUHVzaGVycz1mdW5jdGlvbih0KXtpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJzbGlkZXJzIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJ1cGRhdGVtZW51cyIsImRyYXciKSh0KX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vY29tcG9uZW50cy9tb2RlYmFyIjo2MzYsIi4uL2NvbXBvbmVudHMvdGl0bGVzIjo2NjUsIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY3MiwiLi4vbGliIjo3MDAsIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6Njg1LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3NDcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6NzU1LCIuLi9wbG90cy9wbG90cyI6ODEwLCIuLi9yZWdpc3RyeSI6ODI5LGQzOjE1NH1dLDc0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uaXNQbGFpbk9iamVjdCxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4uL3Bsb3RzL3Bsb3RzIikscz10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuL3Bsb3RfdGVtcGxhdGUiKSxjPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnO2Z1bmN0aW9uIHUodCxlKXt0PW4uZXh0ZW5kRGVlcCh7fSx0KTt2YXIgcixhLG89T2JqZWN0LmtleXModCkuc29ydCgpO2Z1bmN0aW9uIHMoZSxyLG4pe2lmKGkocikmJmkoZSkpdShlLHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheShlKSl7dmFyIG89bC5hcnJheVRlbXBsYXRlcih7X3RlbXBsYXRlOnR9LG4pO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sYz1vLm5ld0l0ZW0ocykuX3RlbXBsYXRlO2MmJnUoYyxzKX12YXIgZj1vLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxmLmxlbmd0aDthKyspci5wdXNoKGZbYV0uX3RlbXBsYXRlKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWRlbGV0ZSByW2FdLnRlbXBsYXRlaXRlbW5hbWV9fWZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBjPW9bcl0saD10W2NdO2lmKGMgaW4gZT9zKGgsZVtjXSxjKTplW2NdPWgsZihjKT09PWMpZm9yKHZhciBwIGluIGUpe3ZhciBkPWYocCk7cD09PWR8fGQhPT1jfHxwIGluIHR8fHMoaCxlW3BdLGMpfX19ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XSskLywiIil9ZnVuY3Rpb24gaCh0LGUscixhLG8pe3ZhciBzPW8mJnIobyk7Zm9yKHZhciBjIGluIHQpe3ZhciB1PXRbY10sZD1wKHQsYyxhKSxnPXAodCxjLG8pLHY9cihnKTtpZighdil7dmFyIG09ZihjKTttIT09YyYmKHY9cihnPXAodCxtLG8pKSl9aWYoKCFzfHxzIT09dikmJiEoIXZ8fHYuX25vVGVtcGxhdGluZ3x8ImRhdGFfYXJyYXkiPT09di52YWxUeXBlfHx2LmFycmF5T2smJkFycmF5LmlzQXJyYXkodSkpKWlmKCF2LnZhbFR5cGUmJmkodSkpaCh1LGUscixkLGcpO2Vsc2UgaWYodi5faXNMaW5rZWRUb0FycmF5JiZBcnJheS5pc0FycmF5KHUpKWZvcih2YXIgeT0hMSx4PTAsYj17fSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PXVbX107aWYoaSh3KSl7dmFyIGs9dy5uYW1lO2lmKGspYltrXXx8KGgodyxlLHIscCh1LHgsZCkscCh1LHgsZykpLHgrKyxiW2tdPTEpO2Vsc2UgaWYoIXkpe3ZhciBUPXAodCxsLmFycmF5RGVmYXVsdEtleShjKSxhKSxBPXAodSx4LGQpO2godyxlLHIsQSxwKHUseCxnKSk7dmFyIE09bi5uZXN0ZWRQcm9wZXJ0eShlLEEpO24ubmVzdGVkUHJvcGVydHkoZSxUKS5zZXQoTS5nZXQoKSksTS5zZXQobnVsbCkseT0hMH19fWVsc2V7bi5uZXN0ZWRQcm9wZXJ0eShlLGQpLnNldCh1KX19fWZ1bmN0aW9uIHAodCxlLHIpe3JldHVybiByP0FycmF5LmlzQXJyYXkodCk/cisiWyIrZSsiXSI6cisiLiIrZTplfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoaSh0W2VdKSlyZXR1cm4hMH1mdW5jdGlvbiBnKHQpe3ZhciBlO3N3aXRjaCh0LmNvZGUpe2Nhc2UiZGF0YSI6ZT0iVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgZGF0YS4iO2JyZWFrO2Nhc2UibGF5b3V0IjplPSJUaGUgdGVtcGxhdGUgaGFzIG5vIGtleSBsYXlvdXQuIjticmVhaztjYXNlIm1pc3NpbmciOmU9dC5wYXRoPyJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciBpdGVtICIrdC5wYXRoKyIgd2l0aCBuYW1lICIrdC50ZW1wbGF0ZWl0ZW1uYW1lOiJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciB0cmFjZSAiK3QuaW5kZXgrIiwgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIuIjticmVhaztjYXNlInVudXNlZCI6ZT10LnBhdGg/IlRoZSB0ZW1wbGF0ZSBpdGVtIGF0ICIrdC5wYXRoKyIgd2FzIG5vdCB1c2VkIGluIGNvbnN0cnVjdGluZyB0aGUgcGxvdC4iOnQuZGF0YUNvdW50PyJTb21lIG9mIHRoZSB0ZW1wbGF0ZXMgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIgd2VyZSBub3QgdXNlZC4gVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcywgdGhlIGRhdGEgb25seSBoYXMgIit0LmRhdGFDb3VudCsiIG9mIHRoaXMgdHlwZS4iOiJUaGUgdGVtcGxhdGUgaGFzICIrdC50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIGJ1dCB0aGVyZSBhcmUgbm9uZSBpbiB0aGUgZGF0YS4iO2JyZWFrO2Nhc2UicmV1c2VkIjplPSJTb21lIG9mIHRoZSB0ZW1wbGF0ZXMgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIgd2VyZSB1c2VkIG1vcmUgdGhhbiBvbmNlLiBUaGUgdGVtcGxhdGUgaGFzICIrdC50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzLCB0aGUgZGF0YSBoYXMgIit0LmRhdGFDb3VudCsiIG9mIHRoaXMgdHlwZS4ifXJldHVybiB0Lm1zZz1lLHR9ci5tYWtlVGVtcGxhdGU9ZnVuY3Rpb24odCl7dD1uLmlzUGxhaW5PYmplY3QodCk/dDpuLmdldEdyYXBoRGl2KHQpLHQ9bi5leHRlbmREZWVwKHtfY29udGV4dDpjfSx7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksby5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgZT10LmRhdGF8fFtdLHI9dC5sYXlvdXR8fHt9O3IuX2Jhc2VQbG90TW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsci5fbW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9tb2R1bGVzO3ZhciBsPXtkYXRhOnt9LGxheW91dDp7fX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2godCxlLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZ2V0VHJhY2VWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX0uYmluZChudWxsLHQpKTt2YXIgcj1uLmNvZXJjZSh0LHt9LHMsInR5cGUiKSxpPWwuZGF0YVtyXTtpfHwoaT1sLmRhdGFbcl09W10pLGkucHVzaChlKX0pLGgocixsLmxheW91dCxmdW5jdGlvbih0LGUpe3JldHVybiBhLmdldExheW91dFZhbE9iamVjdCh0LG4ubmVzdGVkUHJvcGVydHkoe30sZSkucGFydHMpfS5iaW5kKG51bGwscikpLGRlbGV0ZSBsLmxheW91dC50ZW1wbGF0ZTt2YXIgZj1yLnRlbXBsYXRlO2lmKGkoZikpe3ZhciBwLGQsZyx2LG0seSx4PWYubGF5b3V0O2koeCkmJnUoeCxsLmxheW91dCk7dmFyIGI9Zi5kYXRhO2lmKGkoYikpe2ZvcihkIGluIGwuZGF0YSlpZihnPWJbZF0sQXJyYXkuaXNBcnJheShnKSl7Zm9yKHk9KG09bC5kYXRhW2RdKS5sZW5ndGgsdj1nLmxlbmd0aCxwPTA7cDx5O3ArKyl1KGdbcCV2XSxtW3BdKTtmb3IocD15O3A8djtwKyspbS5wdXNoKG4uZXh0ZW5kRGVlcCh7fSxnW3BdKSl9Zm9yKGQgaW4gYilkIGluIGwuZGF0YXx8KGwuZGF0YVtkXT1uLmV4dGVuZERlZXAoW10sYltkXSkpfX1yZXR1cm4gbH0sci52YWxpZGF0ZVRlbXBsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5leHRlbmREZWVwKHt9LHtfY29udGV4dDpjLGRhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0pLGE9ci5sYXlvdXR8fHt9O2koZSl8fChlPWEudGVtcGxhdGV8fHt9KTt2YXIgcz1lLmxheW91dCxsPWUuZGF0YSx1PVtdO3IubGF5b3V0PWEsci5sYXlvdXQudGVtcGxhdGU9ZSxvLnN1cHBseURlZmF1bHRzKHIpO3ZhciBoPXIuX2Z1bGxMYXlvdXQsdj1yLl9mdWxsRGF0YSxtPXt9O2lmKGkocyk/KCFmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoIl8iIT09bi5jaGFyQXQoMCkmJmkoZVtuXSkpe3ZhciBhLG89ZihuKSxzPVtdO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspcy5wdXNoKHAoZSxuLHJbYV0pKSxvIT09biYmcy5wdXNoKHAoZSxvLHJbYV0pKTtmb3IoYT0wO2E8cy5sZW5ndGg7YSsrKW1bc1thXV09MTt0KGVbbl0scyl9fShoLFsibGF5b3V0Il0pLGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigtMT09PW4uaW5kZXhPZigiZGVmYXVsdHMiKSYmaShlW25dKSl7dmFyIGE9cChlLG4scik7bVthXT90KGVbbl0sYSk6dS5wdXNoKHtjb2RlOiJ1bnVzZWQiLHBhdGg6YX0pfX0ocywibGF5b3V0IikpOnUucHVzaCh7Y29kZToibGF5b3V0In0pLGkobCkpe2Zvcih2YXIgeSx4PXt9LGI9MDtiPHYubGVuZ3RoO2IrKyl7dmFyIF89dltiXTt4W3k9Xy50eXBlXT0oeFt5XXx8MCkrMSxfLl9mdWxsSW5wdXQuX3RlbXBsYXRlfHx1LnB1c2goe2NvZGU6Im1pc3NpbmciLGluZGV4Ol8uX2Z1bGxJbnB1dC5pbmRleCx0cmFjZVR5cGU6eX0pfWZvcih5IGluIGwpe3ZhciB3PWxbeV0ubGVuZ3RoLGs9eFt5XXx8MDt3Pms/dS5wdXNoKHtjb2RlOiJ1bnVzZWQiLHRyYWNlVHlwZTp5LHRlbXBsYXRlQ291bnQ6dyxkYXRhQ291bnQ6a30pOms+dyYmdS5wdXNoKHtjb2RlOiJyZXVzZWQiLHRyYWNlVHlwZTp5LHRlbXBsYXRlQ291bnQ6dyxkYXRhQ291bnQ6a30pfX1lbHNlIHUucHVzaCh7Y29kZToiZGF0YSJ9KTtpZihmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoIl8iIT09bi5jaGFyQXQoMCkpe3ZhciBhPWVbbl0sbz1wKGUsbixyKTtpKGEpPyhBcnJheS5pc0FycmF5KGUpJiYhMT09PWEuX3RlbXBsYXRlJiZhLnRlbXBsYXRlaXRlbW5hbWUmJnUucHVzaCh7Y29kZToibWlzc2luZyIscGF0aDpvLHRlbXBsYXRlaXRlbW5hbWU6YS50ZW1wbGF0ZWl0ZW1uYW1lfSksdChhLG8pKTpBcnJheS5pc0FycmF5KGEpJiZkKGEpJiZ0KGEsbyl9fSh7ZGF0YTp2LGxheW91dDpofSwiIiksdS5sZW5ndGgpcmV0dXJuIHUubWFwKGcpfX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi9wbG90cy9wbG90cyI6ODEwLCIuL3Bsb3RfY29uZmlnIjo3MzYsIi4vcGxvdF9zY2hlbWEiOjczNywiLi9wbG90X3RlbXBsYXRlIjo3Mzh9XSw3NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wbG90X2FwaSIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9zbmFwc2hvdC9oZWxwZXJzIiksbz10KCIuLi9zbmFwc2hvdC90b3N2ZyIpLHM9dCgiLi4vc25hcHNob3Qvc3ZndG9pbWciKSxsPXtmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBuZyIsImpwZWciLCJ3ZWJwIiwic3ZnIl0sZGZsdDoicG5nIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSxjPS9eZGF0YTppbWFnZVwvXHcrO2Jhc2U2NCwvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsZjtmdW5jdGlvbiBoKHQpe3JldHVybiEodCBpbiBlKXx8aS52YWxpZGF0ZShlW3RdLGxbdF0pfWlmKGU9ZXx8e30saS5pc1BsYWluT2JqZWN0KHQpPyhyPXQuZGF0YXx8W10sdT10LmxheW91dHx8e30sZj10LmNvbmZpZ3x8e30pOih0PWkuZ2V0R3JhcGhEaXYodCkscj1pLmV4dGVuZERlZXAoW10sdC5kYXRhKSx1PWkuZXh0ZW5kRGVlcCh7fSx0LmxheW91dCksZj10Ll9jb250ZXh0KSwhaCgid2lkdGgiKXx8IWgoImhlaWdodCIpKXRocm93IG5ldyBFcnJvcigiSGVpZ2h0IGFuZCB3aWR0aCBzaG91bGQgYmUgcGl4ZWwgdmFsdWVzLiIpO2lmKCFoKCJmb3JtYXQiKSl0aHJvdyBuZXcgRXJyb3IoIkltYWdlIGZvcm1hdCBpcyBub3QganBlZywgcG5nLCBzdmcgb3Igd2VicC4iKTt2YXIgcD17fTtmdW5jdGlvbiBkKHQscil7cmV0dXJuIGkuY29lcmNlKGUscCxsLHQscil9dmFyIGc9ZCgiZm9ybWF0Iiksdj1kKCJ3aWR0aCIpLG09ZCgiaGVpZ2h0IikseT1kKCJzY2FsZSIpLHg9ZCgic2V0QmFja2dyb3VuZCIpLGI9ZCgiaW1hZ2VEYXRhT25seSIpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Xy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLF8uc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfKTt2YXIgdz1pLmV4dGVuZEZsYXQoe30sdSk7diYmKHcud2lkdGg9diksbSYmKHcuaGVpZ2h0PW0pO3ZhciBrPWkuZXh0ZW5kRmxhdCh7fSxmLHtfZXhwb3J0ZWRQbG90OiEwLHN0YXRpY1Bsb3Q6ITAsc2V0QmFja2dyb3VuZDp4fSksVD1hLmdldFJlZHJhd0Z1bmMoXyk7ZnVuY3Rpb24gQSgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsYS5nZXREZWxheShfLl9mdWxsTGF5b3V0KSl9KX1mdW5jdGlvbiBNKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7dmFyIHI9byhfLGcseSksYT1fLl9mdWxsTGF5b3V0LndpZHRoLGw9Xy5fZnVsbExheW91dC5oZWlnaHQ7aWYobi5wdXJnZShfKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKF8pLCJzdmciPT09ZylyZXR1cm4gdChiP3I6ImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudChyKSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Yy5pZD1pLnJhbmRzdHIoKSxzKHtmb3JtYXQ6Zyx3aWR0aDphLGhlaWdodDpsLHNjYWxlOnksY2FudmFzOmMsc3ZnOnIscHJvbWlzZTohMH0pLnRoZW4odCkuY2F0Y2goZSl9KX1yZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXtuLnBsb3QoXyxyLHcsaykudGhlbihUKS50aGVuKEEpLnRoZW4oTSkudGhlbihmdW5jdGlvbihlKXt0KGZ1bmN0aW9uKHQpe3JldHVybiBiP3QucmVwbGFjZShjLCIiKTp0fShlKSl9KS5jYXRjaChmdW5jdGlvbih0KXtlKHQpfSl9KX19LHsiLi4vbGliIjo3MDAsIi4uL3NuYXBzaG90L2hlbHBlcnMiOjgzMywiLi4vc25hcHNob3Qvc3ZndG9pbWciOjgzNSwiLi4vc25hcHNob3QvdG9zdmciOjgzNywiLi9wbG90X2FwaSI6NzM1fV0sNzQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLHM9bi5pc1BsYWluT2JqZWN0LGw9QXJyYXkuaXNBcnJheSxjPW4uaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiB1KHQsZSxyLGksYSxvKXtvPW98fFtdO2Zvcih2YXIgZj1PYmplY3Qua2V5cyh0KSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciB2PWZbaF07aWYoInRyYW5zZm9ybXMiIT09dil7dmFyIG09by5zbGljZSgpO20ucHVzaCh2KTt2YXIgeT10W3ZdLHg9ZVt2XSxiPWcocix2KSxfPSJpbmZvX2FycmF5Ij09PShifHx7fSkudmFsVHlwZSx3PSJjb2xvcnNjYWxlIj09PShifHx7fSkudmFsVHlwZSxrPShifHx7fSkuaXRlbXM7aWYoZChyLHYpKWlmKHMoeSkmJnMoeCkpdSh5LHgsYixpLGEsbSk7ZWxzZSBpZihfJiZsKHkpKXt5Lmxlbmd0aD54Lmxlbmd0aCYmaS5wdXNoKHAoInVudXNlZCIsYSxtLmNvbmNhdCh4Lmxlbmd0aCkpKTt2YXIgVCxBLE0sUyxFLEM9eC5sZW5ndGgsTD1BcnJheS5pc0FycmF5KGspO2lmKEwmJihDPU1hdGgubWluKEMsay5sZW5ndGgpKSwyPT09Yi5kaW1lbnNpb25zKWZvcihBPTA7QTxDO0ErKylpZihsKHlbQV0pKXt5W0FdLmxlbmd0aD54W0FdLmxlbmd0aCYmaS5wdXNoKHAoInVudXNlZCIsYSxtLmNvbmNhdChBLHhbQV0ubGVuZ3RoKSkpO3ZhciB6PXhbQV0ubGVuZ3RoO2ZvcihUPTA7VDwoTD9NYXRoLm1pbih6LGtbQV0ubGVuZ3RoKTp6KTtUKyspTT1MP2tbQV1bVF06ayxTPXlbQV1bVF0sRT14W0FdW1RdLG4udmFsaWRhdGUoUyxNKT9FIT09UyYmRSE9PStTJiZpLnB1c2gocCgiZHluYW1pYyIsYSxtLmNvbmNhdChBLFQpLFMsRSkpOmkucHVzaChwKCJ2YWx1ZSIsYSxtLmNvbmNhdChBLFQpLFMpKX1lbHNlIGkucHVzaChwKCJhcnJheSIsYSxtLmNvbmNhdChBKSx5W0FdKSk7ZWxzZSBmb3IoQT0wO0E8QztBKyspTT1MP2tbQV06ayxTPXlbQV0sRT14W0FdLG4udmFsaWRhdGUoUyxNKT9FIT09UyYmRSE9PStTJiZpLnB1c2gocCgiZHluYW1pYyIsYSxtLmNvbmNhdChBKSxTLEUpKTppLnB1c2gocCgidmFsdWUiLGEsbS5jb25jYXQoQSksUykpfWVsc2UgaWYoYi5pdGVtcyYmIV8mJmwoeSkpe3ZhciBPLEksRD1rW09iamVjdC5rZXlzKGspWzBdXSxQPVtdO2ZvcihPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciBSPXhbT10uX2luZGV4fHxPO2lmKChJPW0uc2xpY2UoKSkucHVzaChSKSxzKHlbUl0pJiZzKHhbT10pKXtQLnB1c2goUik7dmFyIEY9eVtSXSxCPXhbT107cyhGKSYmITEhPT1GLnZpc2libGUmJiExPT09Qi52aXNpYmxlP2kucHVzaChwKCJpbnZpc2libGUiLGEsSSkpOnUoRixCLEQsaSxhLEkpfX1mb3IoTz0wO088eS5sZW5ndGg7TysrKShJPW0uc2xpY2UoKSkucHVzaChPKSxzKHlbT10pPy0xPT09UC5pbmRleE9mKE8pJiZpLnB1c2gocCgidW51c2VkIixhLEkpKTppLnB1c2gocCgib2JqZWN0IixhLEkseVtPXSkpfWVsc2Uhcyh5KSYmcyh4KT9pLnB1c2gocCgib2JqZWN0IixhLG0seSkpOmMoeSl8fCFjKHgpfHxffHx3P3YgaW4gZT9uLnZhbGlkYXRlKHksYik/ImVudW1lcmF0ZWQiPT09Yi52YWxUeXBlJiYoYi5jb2VyY2VOdW1iZXImJnkhPT0reHx8eSE9PXgpJiZpLnB1c2gocCgiZHluYW1pYyIsYSxtLHkseCkpOmkucHVzaChwKCJ2YWx1ZSIsYSxtLHkpKTppLnB1c2gocCgidW51c2VkIixhLG0seSkpOmkucHVzaChwKCJhcnJheSIsYSxtLHkpKTtlbHNlIGkucHVzaChwKCJzY2hlbWEiLGEsbSkpfX1yZXR1cm4gaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLGY9YS5nZXQoKSxoPVtdLGQ9e19jb250ZXh0Om4uZXh0ZW5kRmxhdCh7fSxvKX07bCh0KT8oZC5kYXRhPW4uZXh0ZW5kRGVlcChbXSx0KSxyPXQpOihkLmRhdGE9W10scj1bXSxoLnB1c2gocCgiYXJyYXkiLCJkYXRhIikpKSxzKGUpPyhkLmxheW91dD1uLmV4dGVuZERlZXAoe30sZSksYz1lKTooZC5sYXlvdXQ9e30sYz17fSxhcmd1bWVudHMubGVuZ3RoPjEmJmgucHVzaChwKCJvYmplY3QiLCJsYXlvdXQiKSkpLGkuc3VwcGx5RGVmYXVsdHMoZCk7Zm9yKHZhciBnPWQuX2Z1bGxEYXRhLHY9ci5sZW5ndGgsbT0wO208djttKyspe3ZhciB5PXJbbV0seD1bImRhdGEiLG1dO2lmKHMoeSkpe3ZhciBiPWdbbV0sXz1iLnR5cGUsdz1mLnRyYWNlc1tfXS5hdHRyaWJ1dGVzO3cudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltfXX0sITE9PT1iLnZpc2libGUmJiExIT09eS52aXNpYmxlJiZoLnB1c2gocCgiaW52aXNpYmxlIix4KSksdSh5LGIsdyxoLHgpO3ZhciBrPXkudHJhbnNmb3JtcyxUPWIudHJhbnNmb3JtcztpZihrKXtsKGspfHxoLnB1c2gocCgiYXJyYXkiLHgsWyJ0cmFuc2Zvcm1zIl0pKSx4LnB1c2goInRyYW5zZm9ybXMiKTtmb3IodmFyIEE9MDtBPGsubGVuZ3RoO0ErKyl7dmFyIE09WyJ0cmFuc2Zvcm1zIixBXSxTPWtbQV0udHlwZTtpZihzKGtbQV0pKXt2YXIgRT1mLnRyYW5zZm9ybXNbU10/Zi50cmFuc2Zvcm1zW1NdLmF0dHJpYnV0ZXM6e307RS50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMoZi50cmFuc2Zvcm1zKX0sdShrW0FdLFRbQV0sRSxoLHgsTSl9ZWxzZSBoLnB1c2gocCgib2JqZWN0Iix4LE0pKX19fWVsc2UgaC5wdXNoKHAoIm9iamVjdCIseCkpfXJldHVybiB1KGMsZC5fZnVsbExheW91dCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPXQudHJhY2VzW2EudHlwZV0scz1vLmxheW91dEF0dHJpYnV0ZXM7cyYmKGEuc3VicGxvdD9uLmV4dGVuZEZsYXQocltvLmF0dHJpYnV0ZXMuc3VicGxvdC5kZmx0XSxzKTpuLmV4dGVuZEZsYXQocixzKSl9cmV0dXJuIHJ9KGYsZyksaCwibGF5b3V0IiksMD09PWgubGVuZ3RoP3ZvaWQgMDpofTt2YXIgZj17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJsYXlvdXQiPT09dCYmIiI9PT1lPyJUaGUgbGF5b3V0IGFyZ3VtZW50IjoiZGF0YSI9PT10WzBdJiYiIj09PWU/IlRyYWNlICIrdFsxXSsiIGluIHRoZSBkYXRhIGFyZ3VtZW50IjpoKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIG9iamVjdCBjb250YWluZXIifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybigiZGF0YSI9PT10PyJUaGUgZGF0YSBhcmd1bWVudCI6aCh0KSsia2V5ICIrZSkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXIifSxzY2hlbWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0KSsia2V5ICIrZSsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBzY2hlbWEifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMocik/ImNvbnRhaW5lciI6ImtleSI7cmV0dXJuIGgodCkrbisiICIrZSsiIGRpZCBub3QgZ2V0IGNvZXJjZWQifSxkeW5hbWljOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybltoKHQpKyJrZXkiLGUsIihzZXQgdG8gJyIrcisiJykiLCJnb3QgcmVzZXQgdG8iLCInIituKyInIiwiZHVyaW5nIGRlZmF1bHRzLiJdLmpvaW4oIiAiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU/aCh0KSsiaXRlbSAiK2U6IlRyYWNlICIrdFsxXSkrIiBnb3QgZGVmYXVsdGVkIHRvIGJlIG5vdCB2aXNpYmxlIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybltoKHQpKyJrZXkgIitlLCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoIityKyIpIl0uam9pbigiICIpfX07ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbCh0KT8iSW4gZGF0YSB0cmFjZSAiK3RbMV0rIiwgIjoiSW4gIit0KyIsICJ9ZnVuY3Rpb24gcCh0LGUscixpLGEpe3ZhciBvLHM7cj1yfHwiIixsKGUpPyhvPWVbMF0scz1lWzFdKToobz1lLHM9bnVsbCk7dmFyIGM9ZnVuY3Rpb24odCl7aWYoIWwodCkpcmV0dXJuIFN0cmluZyh0KTtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyJudW1iZXIiPT10eXBlb2Ygbj9lPWUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrIlsiK24rIl0iOmUrPW4scjx0Lmxlbmd0aC0xJiYoZSs9Ii4iKX1yZXR1cm4gZX0ociksdT1mW3RdKGUsYyxpLGEpO3JldHVybiBuLmxvZyh1KSx7Y29kZTp0LGNvbnRhaW5lcjpvLHRyYWNlOnMscGF0aDpyLGFzdHI6Yyxtc2c6dX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW0oZSksbj1yLmtleU1pbnVzSWQsaT1yLmlkO3JldHVybiEhKG4gaW4gdCYmdFtuXS5faXNTdWJwbG90T2JqJiZpKXx8ZSBpbiB0fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06dFttKGUpLmtleU1pbnVzSWRdfXZhciB2PW4uY291bnRlclJlZ2V4KCIoW2Etel0rKSIpO2Z1bmN0aW9uIG0odCl7dmFyIGU9dC5tYXRjaCh2KTtyZXR1cm57a2V5TWludXNJZDplJiZlWzFdLGlkOmUmJmVbMl19fX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi9wbG90X2NvbmZpZyI6NzM2LCIuL3Bsb3Rfc2NoZW1hIjo3Mzd9XSw3NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhZnRlcmFsbCIsdmFsdWVzOlsiaW1tZWRpYXRlIiwibmV4dCIsImFmdGVyYWxsIl19LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZm9yd2FyZCIsInJldmVyc2UiXSxkZmx0OiJmb3J3YXJkIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0scmVkcmF3Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDAsZWRpdFR5cGU6Im5vbmUifSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImN1YmljLWluLW91dCIsdmFsdWVzOlsibGluZWFyIiwicXVhZCIsImN1YmljIiwic2luIiwiZXhwIiwiY2lyY2xlIiwiZWxhc3RpYyIsImJhY2siLCJib3VuY2UiLCJsaW5lYXItaW4iLCJxdWFkLWluIiwiY3ViaWMtaW4iLCJzaW4taW4iLCJleHAtaW4iLCJjaXJjbGUtaW4iLCJlbGFzdGljLWluIiwiYmFjay1pbiIsImJvdW5jZS1pbiIsImxpbmVhci1vdXQiLCJxdWFkLW91dCIsImN1YmljLW91dCIsInNpbi1vdXQiLCJleHAtb3V0IiwiY2lyY2xlLW91dCIsImVsYXN0aWMtb3V0IiwiYmFjay1vdXQiLCJib3VuY2Utb3V0IiwibGluZWFyLWluLW91dCIsInF1YWQtaW4tb3V0IiwiY3ViaWMtaW4tb3V0Iiwic2luLWluLW91dCIsImV4cC1pbi1vdXQiLCJjaXJjbGUtaW4tb3V0IiwiZWxhc3RpYy1pbi1vdXQiLCJiYWNrLWluLW91dCIsImJvdW5jZS1pbi1vdXQiXSxlZGl0VHlwZToibm9uZSJ9LG9yZGVyaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYXlvdXQgZmlyc3QiLCJ0cmFjZXMgZmlyc3QiXSxkZmx0OiJsYXlvdXQgZmlyc3QiLGVkaXRUeXBlOiJub25lIn19fX0se31dLDc0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scz1yLm5hbWUsbD1yLmluY2x1c2lvbkF0dHJ8fCJ2aXNpYmxlIixjPWVbc10sdT1uLmlzQXJyYXlPclR5cGVkQXJyYXkodFtzXSk/dFtzXTpbXSxmPWVbc109W10saD1pLmFycmF5VGVtcGxhdGVyKGUscyxsKTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKXt2YXIgcD11W2FdO24uaXNQbGFpbk9iamVjdChwKT9vPWgubmV3SXRlbShwKToobz1oLm5ld0l0ZW0oe30pKVtsXT0hMSxvLl9pbmRleD1hLCExIT09b1tsXSYmci5oYW5kbGVJdGVtRGVmYXVsdHMocCxvLGUsciksZi5wdXNoKG8pfXZhciBkPWguZGVmYXVsdEl0ZW1zKCk7Zm9yKGE9MDthPGQubGVuZ3RoO2ErKykobz1kW2FdKS5faW5kZXg9Zi5sZW5ndGgsci5oYW5kbGVJdGVtRGVmYXVsdHMoe30sbyxlLHIse30pLGYucHVzaChvKTtpZihuLmlzQXJyYXlPclR5cGVkQXJyYXkoYykpe3ZhciBnPU1hdGgubWluKGMubGVuZ3RoLGYubGVuZ3RoKTtmb3IoYT0wO2E8ZzthKyspbi5yZWxpbmtQcml2YXRlS2V5cyhmW2FdLGNbYV0pfXJldHVybiBmfX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4fV0sNzQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltdLGRmbHQ6InNjYXR0ZXIiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixfbm9UZW1wbGF0aW5nOiEwfSx2aXNpYmxlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJsZWdlbmRvbmx5Il0sZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InN0eWxlIn0sbGVnZW5kZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToic3R5bGUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxuYW1lOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJzdHlsZSJ9LHVpZDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCIsYW5pbTohMH0saWRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZHBvaW50czp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGhvdmVyaW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsieCIsInkiLCJ6IiwidGV4dCIsIm5hbWUiXSxleHRyYXM6WyJhbGwiLCJub25lIiwic2tpcCJdLGFycmF5T2s6ITAsZGZsdDoiYWxsIixlZGl0VHlwZToibm9uZSJ9LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLHN0cmVhbTp7dG9rZW46e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITAsZWRpdFR5cGU6ImNhbGMifSxtYXhwb2ludHM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjFlNCxkZmx0OjUwMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNmb3Jtczp7X2lzTGlua2VkVG9BcnJheToidHJhbnNmb3JtIixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX19LHsiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2MDd9XSw3NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt4YXhpczp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ4IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHlheGlzOnt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6InkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn19fSx7fV0sNzQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5GUF9TQUZFLG89dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBzKHQsZSl7dmFyIHIsbixhPVtdLG89bChlKSxzPWModCxlKSx1PXMubWluLGY9cy5tYXg7aWYoMD09PXUubGVuZ3RofHwwPT09Zi5sZW5ndGgpcmV0dXJuIGkuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO3ZhciBoPXVbMF0udmFsLHA9ZlswXS52YWw7Zm9yKHI9MTtyPHUubGVuZ3RoJiZoPT09cDtyKyspaD1NYXRoLm1pbihoLHVbcl0udmFsKTtmb3Iocj0xO3I8Zi5sZW5ndGgmJmg9PT1wO3IrKylwPU1hdGgubWF4KHAsZltyXS52YWwpO3ZhciBkPSExO2lmKGUucmFuZ2Upe3ZhciBnPWkuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO2Q9Z1sxXTxnWzBdfSJyZXZlcnNlZCI9PT1lLmF1dG9yYW5nZSYmKGQ9ITAsZS5hdXRvcmFuZ2U9ITApO3ZhciB2LG0seSx4LGIsXyx3PWUucmFuZ2Vtb2RlLGs9InRvemVybyI9PT13LFQ9Im5vbm5lZ2F0aXZlIj09PXcsQT1lLl9sZW5ndGgsTT1BLzEwLFM9MDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWZvcih2PXVbcl0sbj0wO248Zi5sZW5ndGg7bisrKShfPShtPWZbbl0pLnZhbC12LnZhbCk+MCYmKChiPUEtbyh2KS1vKG0pKT5NP18vYj5TJiYoeT12LHg9bSxTPV8vYik6Xy9BPlMmJih5PXt2YWw6di52YWwscGFkOjB9LHg9e3ZhbDptLnZhbCxwYWQ6MH0sUz1fL0EpKTtpZihoPT09cCl7dmFyIEU9aC0xLEM9aCsxO2lmKGspaWYoMD09PWgpYT1bMCwxXTtlbHNle3ZhciBMPShoPjA/Zjp1KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxvKGUpKX0sMCksej1oLygxLU1hdGgubWluKC41LEwvQSkpO2E9aD4wP1swLHpdOlt6LDBdfWVsc2UgYT1UP1tNYXRoLm1heCgwLEUpLE1hdGgubWF4KDEsQyldOltFLENdfWVsc2Ugaz8oeS52YWw+PTAmJih5PXt2YWw6MCxwYWQ6MH0pLHgudmFsPD0wJiYoeD17dmFsOjAscGFkOjB9KSk6VCYmKHkudmFsLVMqbyh5KTwwJiYoeT17dmFsOjAscGFkOjB9KSx4LnZhbDw9MCYmKHg9e3ZhbDoxLHBhZDowfSkpLFM9KHgudmFsLXkudmFsKS8oQS1vKHkpLW8oeCkpLGE9W3kudmFsLVMqbyh5KSx4LnZhbCtTKm8oeCldO3JldHVybiBkJiZhLnJldmVyc2UoKSxpLnNpbXBsZU1hcChhLGUubDJyfHxOdW1iZXIpfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5fbGVuZ3RoLzIwO3JldHVybiJkb21haW4iPT09dC5jb25zdHJhaW4mJnQuX2lucHV0RG9tYWluJiYoZSo9KHQuX2lucHV0RG9tYWluWzFdLXQuX2lucHV0RG9tYWluWzBdKS8odC5kb21haW5bMV0tdC5kb21haW5bMF0pKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wYWQrKHQuZXh0cmFwYWQ/ZTowKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByLG4saSxhPWUuX2lkLG89dC5fZnVsbERhdGEscz10Ll9mdWxsTGF5b3V0LGw9W10sYz1bXTtmdW5jdGlvbiBoKHQsZSl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89dFtlW3JdXSxzPShvLl9leHRyZW1lc3x8e30pW2FdO2lmKCEwPT09by52aXNpYmxlJiZzKXtmb3Iobj0wO248cy5taW4ubGVuZ3RoO24rKylpPXMubWluW25dLHUobCxpLnZhbCxpLnBhZCx7ZXh0cmFwYWQ6aS5leHRyYXBhZH0pO2ZvcihuPTA7bjxzLm1heC5sZW5ndGg7bisrKWk9cy5tYXhbbl0sZihjLGkudmFsLGkucGFkLHtleHRyYXBhZDppLmV4dHJhcGFkfSl9fX1yZXR1cm4gaChvLGUuX3RyYWNlSW5kaWNlcyksaChzLmFubm90YXRpb25zfHxbXSxlLl9hbm5JbmRpY2VzfHxbXSksaChzLnNoYXBlc3x8W10sZS5fc2hhcGVJbmRpY2VzfHxbXSkse21pbjpsLG1heDpjfX1mdW5jdGlvbiB1KHQsZSxyLG4pe2godCxlLHIsbixkKX1mdW5jdGlvbiBmKHQsZSxyLG4pe2godCxlLHIsbixnKX1mdW5jdGlvbiBoKHQsZSxyLG4saSl7Zm9yKHZhciBhPW4udG96ZXJvLG89bi5leHRyYXBhZCxzPSEwLGw9MDtsPHQubGVuZ3RoJiZzO2wrKyl7dmFyIGM9dFtsXTtpZihpKGMudmFsLGUpJiZjLnBhZD49ciYmKGMuZXh0cmFwYWR8fCFvKSl7cz0hMTticmVha31pKGUsYy52YWwpJiZjLnBhZDw9ciYmKG98fCFjLmV4dHJhcGFkKSYmKHQuc3BsaWNlKGwsMSksbC0tKX1pZihzKXt2YXIgdT1hJiYwPT09ZTt0LnB1c2goe3ZhbDplLHBhZDp1PzA6cixleHRyYXBhZDohdSYmb30pfX1mdW5jdGlvbiBwKHQpe3JldHVybiBuKHQpJiZNYXRoLmFicyh0KTxhfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHQ+PWV9ZS5leHBvcnRzPXtnZXRBdXRvUmFuZ2U6cyxtYWtlUGFkRm46bCxkb0F1dG9SYW5nZTpmdW5jdGlvbih0LGUpe2lmKGUuc2V0U2NhbGUoKSxlLmF1dG9yYW5nZSl7ZS5yYW5nZT1zKHQsZSksZS5fcj1lLnJhbmdlLnNsaWNlKCksZS5fcmw9aS5zaW1wbGVNYXAoZS5fcixlLnIybCk7dmFyIHI9ZS5faW5wdXQsbj17fTtuW2UuX2F0dHIrIi5yYW5nZSJdPWUucmFuZ2UsbltlLl9hdHRyKyIuYXV0b3JhbmdlIl09ZS5hdXRvcmFuZ2Usby5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksbiksci5yYW5nZT1lLnJhbmdlLnNsaWNlKCksci5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2V9dmFyIGE9ZS5fYW5jaG9yQXhpcztpZihhJiZhLnJhbmdlc2xpZGVyKXt2YXIgbD1hLnJhbmdlc2xpZGVyW2UuX25hbWVdO2wmJiJhdXRvIj09PWwucmFuZ2Vtb2RlJiYobC5yYW5nZT1zKHQsZSkpLGEuX2lucHV0LnJhbmdlc2xpZGVyW2UuX25hbWVdPWkuZXh0ZW5kRmxhdCh7fSxsKX19LGZpbmRFeHRyZW1lczpmdW5jdGlvbih0LGUscil7cnx8KHI9e30pO3QuX218fHQuc2V0U2NhbGUoKTt2YXIgaSxvLHMsbCxjLGgsZCxnLHYsbT1bXSx5PVtdLHg9ZS5sZW5ndGgsYj1yLnBhZGRlZHx8ITEsXz1yLnRvemVybyYmKCJsaW5lYXIiPT09dC50eXBlfHwiLSI9PT10LnR5cGUpLHc9ImxvZyI9PT10LnR5cGUsaz0hMTtmdW5jdGlvbiBUKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGs9ITAsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KE51bWJlcih0W2VdfHwwKSwwKX07dmFyIGU9TWF0aC5tYXgoTnVtYmVyKHR8fDApLDApO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgQT1UKCh0Ll9tPjA/ci5wcGFkcGx1czpyLnBwYWRtaW51cyl8fHIucHBhZHx8MCksTT1UKCh0Ll9tPjA/ci5wcGFkbWludXM6ci5wcGFkcGx1cyl8fHIucHBhZHx8MCksUz1UKHIudnBhZHBsdXN8fHIudnBhZCksRT1UKHIudnBhZG1pbnVzfHxyLnZwYWQpO2lmKCFrKXtpZihnPTEvMCx2PS0xLzAsdylmb3IoaT0wO2k8eDtpKyspKG89ZVtpXSk8ZyYmbz4wJiYoZz1vKSxvPnYmJm88YSYmKHY9byk7ZWxzZSBmb3IoaT0wO2k8eDtpKyspKG89ZVtpXSk8ZyYmbz4tYSYmKGc9byksbz52JiZvPGEmJih2PW8pO2U9W2csdl0seD0yfXZhciBDPXt0b3plcm86XyxleHRyYXBhZDpifTtmdW5jdGlvbiBMKHIpe3M9ZVtyXSxuKHMpJiYoaD1BKHIpLGQ9TShyKSxnPXMtRShyKSx2PXMrUyhyKSx3JiZnPHYvMTAmJihnPXYvMTApLGw9dC5jMmwoZyksYz10LmMybCh2KSxfJiYobD1NYXRoLm1pbigwLGwpLGM9TWF0aC5tYXgoMCxjKSkscChsKSYmdShtLGwsZCxDKSxwKGMpJiZmKHksYyxoLEMpKX12YXIgej1NYXRoLm1pbig2LHgpO2ZvcihpPTA7aTx6O2krKylMKGkpO2ZvcihpPXgtMTtpPj16O2ktLSlMKGkpO3JldHVybnttaW46bSxtYXg6eSxvcHRzOnJ9fSxjb25jYXRFeHRyZW1lczpjfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNzQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGg9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHA9dCgiLi9jbGVhbl90aWNrcyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGc9ZC5PTkVBVkdZRUFSLHY9ZC5PTkVBVkdNT05USCxtPWQuT05FREFZLHk9ZC5PTkVIT1VSLHg9ZC5PTkVNSU4sYj1kLk9ORVNFQyxfPWQuTUlOVVNfU0lHTix3PWQuQkFETlVNLGs9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxUPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsQT1lLmV4cG9ydHM9e307QS5zZXRDb252ZXJ0PXQoIi4vc2V0X2NvbnZlcnQiKTt2YXIgTT10KCIuL2F4aXNfYXV0b3R5cGUiKSxTPXQoIi4vYXhpc19pZHMiKTtBLmlkMm5hbWU9Uy5pZDJuYW1lLEEubmFtZTJpZD1TLm5hbWUyaWQsQS5jbGVhbklkPVMuY2xlYW5JZCxBLmxpc3Q9Uy5saXN0LEEubGlzdElkcz1TLmxpc3RJZHMsQS5nZXRGcm9tSWQ9Uy5nZXRGcm9tSWQsQS5nZXRGcm9tVHJhY2U9Uy5nZXRGcm9tVHJhY2U7dmFyIEU9dCgiLi9hdXRvcmFuZ2UiKTtBLmdldEF1dG9SYW5nZT1FLmdldEF1dG9SYW5nZSxBLmZpbmRFeHRyZW1lcz1FLmZpbmRFeHRyZW1lcyxBLmNvZXJjZVJlZj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi5jaGFyQXQobi5sZW5ndGgtMSksbD1yLl9mdWxsTGF5b3V0Ll9zdWJwbG90c1tvKyJheGlzIl0sYz1uKyJyZWYiLHU9e307cmV0dXJuIGl8fChpPWxbMF18fGEpLGF8fChhPWkpLHVbY109e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpsLmNvbmNhdChhP1thXTpbXSksZGZsdDppfSxzLmNvZXJjZSh0LGUsdSxjKX0sQS5jb2VyY2VQb3NpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbDtpZigicGFwZXIiPT09bnx8InBpeGVsIj09PW4pbz1zLmVuc3VyZU51bWJlcixsPXIoaSxhKTtlbHNle3ZhciBjPUEuZ2V0RnJvbUlkKGUsbik7bD1yKGksYT1jLmZyYWN0aW9uMnIoYSkpLG89Yy5jbGVhblBvc310W2ldPW8obCl9LEEuY2xlYW5Qb3NpdGlvbj1mdW5jdGlvbih0LGUscil7cmV0dXJuKCJwYXBlciI9PT1yfHwicGl4ZWwiPT09cj9zLmVuc3VyZU51bWJlcjpBLmdldEZyb21JZChlLHIpLmNsZWFuUG9zKSh0KX0sQS5yZWRyYXdDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxBLmxpc3RJZHModCk7dmFyIHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBuKG4saSxhLHMpe2Zvcih2YXIgbD1vLmdldENvbXBvbmVudE1ldGhvZChuLGkpLGM9e30sdT0wO3U8ZS5sZW5ndGg7dSsrKWZvcih2YXIgZj1yW0EuaWQybmFtZShlW3VdKV1bYV0saD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgcD1mW2hdO2lmKCFjW3BdJiYobCh0LHApLGNbcF09MSxzKSlyZXR1cm59fW4oImFubm90YXRpb25zIiwiZHJhd09uZSIsIl9hbm5JbmRpY2VzIiksbigic2hhcGVzIiwiZHJhd09uZSIsIl9zaGFwZUluZGljZXMiKSxuKCJpbWFnZXMiLCJkcmF3IiwiX2ltZ0luZGljZXMiLCEwKX07dmFyIEM9QS5nZXREYXRhQ29udmVyc2lvbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT0ieCI9PT1yfHwieSI9PT1yfHwieiI9PT1yP3I6bjtpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPXt0eXBlOk0obiksX2NhdGVnb3JpZXM6W119LEEuc2V0Q29udmVydChpKSwiY2F0ZWdvcnkiPT09aS50eXBlKWZvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKWkuZDJjKG5bb10pfWVsc2UgaT1BLmdldEZyb21UcmFjZSh0LGUsYSk7cmV0dXJuIGk/e2QyYzppLmQyYyxjMmQ6aS5jMmR9OiJpZHMiPT09YT97ZDJjOnosYzJkOnp9OntkMmM6TCxjMmQ6TH19O2Z1bmN0aW9uIEwodCl7cmV0dXJuK3R9ZnVuY3Rpb24geih0KXtyZXR1cm4gU3RyaW5nKHQpfUEuZ2V0RGF0YVRvQ29vcmRGdW5jPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBDKHQsZSxyLG4pLmQyY30sQS5jb3VudGVyTGV0dGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckF0KDApO3JldHVybiJ4Ij09PWU/InkiOiJ5Ij09PWU/IngiOnZvaWQgMH0sQS5taW5EdGljaz1mdW5jdGlvbih0LGUscixuKXstMT09PVsibG9nIiwiY2F0ZWdvcnkiLCJtdWx0aWNhdGVnb3J5Il0uaW5kZXhPZih0LnR5cGUpJiZuP3ZvaWQgMD09PXQuX21pbkR0aWNrPyh0Ll9taW5EdGljaz1lLHQuX2ZvcmNlVGljazA9cik6dC5fbWluRHRpY2smJigodC5fbWluRHRpY2svZSsxZS02KSUxPDJlLTYmJigoci10Ll9mb3JjZVRpY2swKS9lJTErMS4wMDAwMDEpJTE8MmUtNj8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOigoZS90Ll9taW5EdGljaysxZS02KSUxPjJlLTZ8fCgoci10Ll9mb3JjZVRpY2swKS90Ll9taW5EdGljayUxKzEuMDAwMDAxKSUxPjJlLTYpJiYodC5fbWluRHRpY2s9MCkpOnQuX21pbkR0aWNrPTB9LEEuc2F2ZVJhbmdlSW5pdGlhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1BLmxpc3QodCwiIiwhMCksbj0hMSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz12b2lkIDA9PT1hLl9yYW5nZUluaXRpYWwscz1vfHwhKGEucmFuZ2VbMF09PT1hLl9yYW5nZUluaXRpYWxbMF0mJmEucmFuZ2VbMV09PT1hLl9yYW5nZUluaXRpYWxbMV0pOyhvJiYhMT09PWEuYXV0b3JhbmdlfHxlJiZzKSYmKGEuX3JhbmdlSW5pdGlhbD1hLnJhbmdlLnNsaWNlKCksbj0hMCl9cmV0dXJuIG59LEEuc2F2ZVNob3dTcGlrZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9QS5saXN0KHQsIiIsITApLG49ITEsaT0ib24iLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPXZvaWQgMD09PW8uX3Nob3dTcGlrZUluaXRpYWwsbD1zfHwhKG8uc2hvd3NwaWtlcz09PW8uX3Nob3dzcGlrZXMpOyhzfHxlJiZsKSYmKG8uX3Nob3dTcGlrZUluaXRpYWw9by5zaG93c3Bpa2VzLG49ITApLCJvbiIhPT1pfHxvLnNob3dzcGlrZXN8fChpPSJvZmYiKX1yZXR1cm4gdC5fZnVsbExheW91dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1pLG59LEEuYXV0b0Jpbj1mdW5jdGlvbih0LGUscixuLGEsbyl7dmFyIGwsYz1zLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0KSx1PXMuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQpO2lmKCJjYXRlZ29yeSI9PT1lLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZSlyZXR1cm57c3RhcnQ6Yy0uNSxlbmQ6dSsuNSxzaXplOk1hdGgubWF4KDEsTWF0aC5yb3VuZChvKXx8MSksX2RhdGFTcGFuOnUtY307aWYoYXx8KGE9ZS5jYWxlbmRhciksbD0ibG9nIj09PWUudHlwZT97dHlwZToibGluZWFyIixyYW5nZTpbYyx1XX06e3R5cGU6ZS50eXBlLHJhbmdlOnMuc2ltcGxlTWFwKFtjLHVdLGUuYzJyLDAsYSksY2FsZW5kYXI6YX0sQS5zZXRDb252ZXJ0KGwpLG89byYmcC5kdGljayhvLGwudHlwZSkpbC5kdGljaz1vLGwudGljazA9cC50aWNrMCh2b2lkIDAsbC50eXBlLGEpO2Vsc2V7dmFyIGY7aWYocilmPSh1LWMpL3I7ZWxzZXt2YXIgaD1zLmRpc3RpbmN0VmFscyh0KSxkPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaC5taW5EaWZmKS9NYXRoLkxOMTApKSxnPWQqcy5yb3VuZFVwKGgubWluRGlmZi9kLFsuOSwxLjksNC45LDkuOV0sITApO2Y9TWF0aC5tYXgoZywyKnMuc3RkZXYodCkvTWF0aC5wb3codC5sZW5ndGgsbj8uMjU6LjQpKSxpKGYpfHwoZj0xKX1BLmF1dG9UaWNrcyhsLGYpfXZhciB2LHk9bC5kdGljayx4PUEudGlja0luY3JlbWVudChBLnRpY2tGaXJzdChsKSx5LCJyZXZlcnNlIixhKTtpZigibnVtYmVyIj09dHlwZW9mIHkpdj0oeD1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPTAscz0wLGw9MCxjPTA7ZnVuY3Rpb24gdShlKXtyZXR1cm4oMSsxMDAqKGUtdCkvci5kdGljayklMTAwPDJ9Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspZVtmXSUxPT0wP2wrKzppKGVbZl0pfHxjKyssdShlW2ZdKSYmbysrLHUoZVtmXStyLmR0aWNrLzIpJiZzKys7dmFyIGg9ZS5sZW5ndGgtYztpZihsPT09aCYmImRhdGUiIT09ci50eXBlKXIuZHRpY2s8MT90PW4tLjUqci5kdGljazoodC09LjUpK3IuZHRpY2s8biYmKHQrPXIuZHRpY2spO2Vsc2UgaWYoczwuMSpoJiYobz4uMypofHx1KG4pfHx1KGEpKSl7dmFyIHA9ci5kdGljay8yO3QrPXQrcDxuP3A6LXB9cmV0dXJuIHR9KHgsdCxsLGMsdSkpKygxK01hdGguZmxvb3IoKHUteCkveSkpKnk7ZWxzZSBmb3IoIk0iPT09bC5kdGljay5jaGFyQXQoMCkmJih4PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9cy5maW5kRXhhY3REYXRlcyhlLGkpO2lmKGEuZXhhY3REYXlzPi44KXt2YXIgbz1OdW1iZXIoci5zdWJzdHIoMSkpO2EuZXhhY3RZZWFycz4uOCYmbyUxMj09MD90PUEudGlja0luY3JlbWVudCh0LCJNNiIsInJldmVyc2UiKSsxLjUqbTphLmV4YWN0TW9udGhzPi44P3Q9QS50aWNrSW5jcmVtZW50KHQsIk0xIiwicmV2ZXJzZSIpKzE1LjUqbTp0LT1tLzI7dmFyIGw9QS50aWNrSW5jcmVtZW50KHQscik7aWYobDw9bilyZXR1cm4gbH1yZXR1cm4gdH0oeCx0LHksYyxhKSksdj14LDA7djw9dTspdj1BLnRpY2tJbmNyZW1lbnQodix5LCExLGEpLDA7cmV0dXJue3N0YXJ0OmUuYzJyKHgsMCxhKSxlbmQ6ZS5jMnIodiwwLGEpLHNpemU6eSxfZGF0YVNwYW46dS1jfX0sQS5wcmVwVGlja3M9ZnVuY3Rpb24odCl7dmFyIGU9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoImF1dG8iPT09dC50aWNrbW9kZXx8IXQuZHRpY2spe3ZhciByLG49dC5udGlja3M7bnx8KCJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8ocj10LnRpY2tmb250PzEuMioodC50aWNrZm9udC5zaXplfHwxMik6MTUsbj10Ll9sZW5ndGgvcik6KHI9InkiPT09dC5faWQuY2hhckF0KDApPzQwOjgwLG49cy5jb25zdHJhaW4odC5fbGVuZ3RoL3IsNCw5KSsxKSwicmFkaWFsYXhpcyI9PT10Ll9uYW1lJiYobio9MikpLCJhcnJheSI9PT10LnRpY2ttb2RlJiYobio9MTAwKSxBLmF1dG9UaWNrcyh0LE1hdGguYWJzKGVbMV0tZVswXSkvbiksdC5fbWluRHRpY2s+MCYmdC5kdGljazwyKnQuX21pbkR0aWNrJiYodC5kdGljaz10Ll9taW5EdGljayx0LnRpY2swPXQubDJyKHQuX2ZvcmNlVGljazApKX10LnRpY2swfHwodC50aWNrMD0iZGF0ZSI9PT10LnR5cGU/IjIwMDAtMDEtMDEiOjApLCJkYXRlIj09PXQudHlwZSYmdC5kdGljazwuMSYmKHQuZHRpY2s9LjEpLGoodCl9LEEuY2FsY1RpY2tzPWZ1bmN0aW9uKHQpe0EucHJlcFRpY2tzKHQpO3ZhciBlPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKCJhcnJheSI9PT10LnRpY2ttb2RlKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRpY2t2YWxzLHI9dC50aWNrdGV4dCxuPW5ldyBBcnJheShlLmxlbmd0aCksaT1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxhPTEuMDAwMSppWzBdLTFlLTQqaVsxXSxvPTEuMDAwMSppWzFdLTFlLTQqaVswXSxsPU1hdGgubWluKGEsbyksYz1NYXRoLm1heChhLG8pLHU9MDtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7dmFyIGY9ImNhdGVnb3J5Ij09PXQudHlwZT90LmQybF9ub2FkZDp0LmQybDsibG9nIj09PXQudHlwZSYmIkwiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSYmKHQuZHRpY2s9IkwiK01hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5taW4odC5yYW5nZVswXSx0LnJhbmdlWzFdKSktMSkpO2Zvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgcD1mKGVbaF0pO3A+bCYmcDxjJiYodm9pZCAwPT09cltoXT9uW3VdPUEudGlja1RleHQodCxwKTpuW3VdPVYodCxwLFN0cmluZyhyW2hdKSksdSsrKX11PGUubGVuZ3RoJiZuLnNwbGljZSh1LGUubGVuZ3RoLXUpO3JldHVybiBufSh0KTt0Ll90bWluPUEudGlja0ZpcnN0KHQpO3ZhciByPTEuMDAwMSplWzBdLTFlLTQqZVsxXSxuPTEuMDAwMSplWzFdLTFlLTQqZVswXSxpPWVbMV08ZVswXTtpZih0Ll90bWluPHIhPT1pKXJldHVybltdO3ZhciBhPVtdOyJjYXRlZ29yeSIhPT10LnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PXQudHlwZXx8KG49aT9NYXRoLm1heCgtLjUsbik6TWF0aC5taW4odC5fY2F0ZWdvcmllcy5sZW5ndGgtLjUsbikpO2Zvcih2YXIgbz1udWxsLGw9TWF0aC5tYXgoMWUzLHQuX2xlbmd0aHx8MCksYz10Ll90bWluOyhpP2M+PW46Yzw9bikmJiEoYS5sZW5ndGg+bHx8Yz09PW8pO2M9QS50aWNrSW5jcmVtZW50KGMsdC5kdGljayxpLHQuY2FsZW5kYXIpKW89YyxhLnB1c2goYyk7cnQodCkmJjM2MD09PU1hdGguYWJzKGVbMV0tZVswXSkmJmEucG9wKCksdC5fdG1heD1hW2EubGVuZ3RoLTFdLHQuX3ByZXZEYXRlSGVhZD0iIix0Ll9pbkNhbGNUaWNrcz0hMDtmb3IodmFyIHU9bmV3IEFycmF5KGEubGVuZ3RoKSxmPTA7ZjxhLmxlbmd0aDtmKyspdVtmXT1BLnRpY2tUZXh0KHQsYVtmXSk7cmV0dXJuIHQuX2luQ2FsY1RpY2tzPSExLHV9O3ZhciBPPVsyLDUsMTBdLEk9WzEsMiwzLDYsMTJdLEQ9WzEsMiw1LDEwLDE1LDMwXSxQPVsxLDIsMyw3LDE0XSxSPVstLjA0NiwwLC4zMDEsLjQ3NywuNjAyLC42OTksLjc3OCwuODQ1LC45MDMsLjk1NCwxXSxGPVstLjMwMSwwLC4zMDEsLjY5OSwxXSxCPVsxNSwzMCw0NSw5MCwxODBdO2Z1bmN0aW9uIE4odCxlLHIpe3JldHVybiBlKnMucm91bmRVcCh0L2Uscil9ZnVuY3Rpb24gaih0KXt2YXIgZT10LmR0aWNrO2lmKHQuX3RpY2tleHBvbmVudD0wLGkoZSl8fCJzdHJpbmciPT10eXBlb2YgZXx8KGU9MSksImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwodC5fdGlja3JvdW5kPW51bGwpLCJkYXRlIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZywiIiksYT1uLmxlbmd0aDtpZigiTSI9PT1TdHJpbmcoZSkuY2hhckF0KDApKWE+MTB8fCIwMS0wMSIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9ImQiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/InkiOiJtIjtlbHNlIGlmKGU+PW0mJmE8PTEwfHxlPj0xNSptKXQuX3RpY2tyb3VuZD0iZCI7ZWxzZSBpZihlPj14JiZhPD0xNnx8ZT49eSl0Ll90aWNrcm91bmQ9Ik0iO2Vsc2UgaWYoZT49YiYmYTw9MTl8fGU+PXgpdC5fdGlja3JvdW5kPSJTIjtlbHNle3ZhciBvPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLCIiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGEsbyktMjAsdC5fdGlja3JvdW5kPDAmJih0Ll90aWNrcm91bmQ9NCl9fWVsc2UgaWYoaShlKXx8IkwiPT09ZS5jaGFyQXQoMCkpe3ZhciBzPXQucmFuZ2UubWFwKHQucjJkfHxOdW1iZXIpO2koZSl8fChlPU51bWJlcihlLnN1YnN0cigxKSkpLHQuX3RpY2tyb3VuZD0yLU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKy4wMSk7dmFyIGw9TWF0aC5tYXgoTWF0aC5hYnMoc1swXSksTWF0aC5hYnMoc1sxXSkpLGM9TWF0aC5mbG9vcihNYXRoLmxvZyhsKS9NYXRoLkxOMTArLjAxKTtNYXRoLmFicyhjKT4zJiYocSh0LmV4cG9uZW50Zm9ybWF0KSYmIUgoYyk/dC5fdGlja2V4cG9uZW50PTMqTWF0aC5yb3VuZCgoYy0xKS8zKTp0Ll90aWNrZXhwb25lbnQ9Yyl9ZWxzZSB0Ll90aWNrcm91bmQ9bnVsbH1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgbj10LnRpY2tmb250fHx7fTtyZXR1cm57eDplLGR4OjAsZHk6MCx0ZXh0OnJ8fCIiLGZvbnRTaXplOm4uc2l6ZSxmb250Om4uZmFtaWx5LGZvbnRDb2xvcjpuLmNvbG9yfX1BLmF1dG9UaWNrcz1mdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKX1pZigiZGF0ZSI9PT10LnR5cGUpe3QudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhcik7dmFyIGE9MiplO2E+Zz8oZS89ZyxyPW4oMTApLHQuZHRpY2s9Ik0iKzEyKk4oZSxyLE8pKTphPnY/KGUvPXYsdC5kdGljaz0iTSIrTihlLDEsSSkpOmE+bT8odC5kdGljaz1OKGUsbSxQKSx0LnRpY2swPXMuZGF0ZVRpY2swKHQuY2FsZW5kYXIsITApKTphPnk/dC5kdGljaz1OKGUseSxJKTphPng/dC5kdGljaz1OKGUseCxEKTphPmI/dC5kdGljaz1OKGUsYixEKToocj1uKDEwKSx0LmR0aWNrPU4oZSxyLE8pKX1lbHNlIGlmKCJsb2ciPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIG89cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKG9bMV0tb1swXSk8MSl7dmFyIGw9MS41Kk1hdGguYWJzKChvWzFdLW9bMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsb1sxXSktTWF0aC5wb3coMTAsb1swXSkpL2wscj1uKDEwKSx0LmR0aWNrPSJMIitOKGUscixPKX1lbHNlIHQuZHRpY2s9ZT4uMz8iRDIiOiJEMSJ9ZWxzZSJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8odC50aWNrMD0wLHQuZHRpY2s9TWF0aC5jZWlsKE1hdGgubWF4KGUsMSkpKTpydCh0KT8odC50aWNrMD0wLHI9MSx0LmR0aWNrPU4oZSxyLEIpKToodC50aWNrMD0wLHI9bigxMCksdC5kdGljaz1OKGUscixPKSk7aWYoMD09PXQuZHRpY2smJih0LmR0aWNrPTEpLCFpKHQuZHRpY2spJiYic3RyaW5nIiE9dHlwZW9mIHQuZHRpY2spe3ZhciBjPXQuZHRpY2s7dGhyb3cgdC5kdGljaz0xLCJheC5kdGljayBlcnJvcjogIitTdHJpbmcoYyl9fSxBLnRpY2tJbmNyZW1lbnQ9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89cj8tMToxO2lmKGkoZSkpcmV0dXJuIHQrbyplO3ZhciBsPWUuY2hhckF0KDApLGM9bypOdW1iZXIoZS5zdWJzdHIoMSkpO2lmKCJNIj09PWwpcmV0dXJuIHMuaW5jcmVtZW50TW9udGgodCxjLGEpO2lmKCJMIj09PWwpcmV0dXJuIE1hdGgubG9nKE1hdGgucG93KDEwLHQpK2MpL01hdGguTE4xMDtpZigiRCI9PT1sKXt2YXIgdT0iRDIiPT09ZT9GOlIsZj10Ky4wMSpvLGg9cy5yb3VuZFVwKHMubW9kKGYsMSksdSxyKTtyZXR1cm4gTWF0aC5mbG9vcihmKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLGgpLDEpKS9NYXRoLkxOMTB9dGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKGUpfSxBLnRpY2tGaXJzdD1mdW5jdGlvbih0KXt2YXIgZT10LnIybHx8TnVtYmVyLHI9cy5zaW1wbGVNYXAodC5yYW5nZSxlKSxhPXJbMV08clswXSxvPWE/TWF0aC5mbG9vcjpNYXRoLmNlaWwsbD0xLjAwMDEqclswXS0xZS00KnJbMV0sYz10LmR0aWNrLHU9ZSh0LnRpY2swKTtpZihpKGMpKXt2YXIgZj1vKChsLXUpL2MpKmMrdTtyZXR1cm4iY2F0ZWdvcnkiIT09dC50eXBlJiYibXVsdGljYXRlZ29yeSIhPT10LnR5cGV8fChmPXMuY29uc3RyYWluKGYsMCx0Ll9jYXRlZ29yaWVzLmxlbmd0aC0xKSksZn12YXIgaD1jLmNoYXJBdCgwKSxwPU51bWJlcihjLnN1YnN0cigxKSk7aWYoIk0iPT09aCl7Zm9yKHZhciBkLGcsdixtPTAseT11O208MTA7KXtpZigoKGQ9QS50aWNrSW5jcmVtZW50KHksYyxhLHQuY2FsZW5kYXIpKS1sKSooeS1sKTw9MClyZXR1cm4gYT9NYXRoLm1pbih5LGQpOk1hdGgubWF4KHksZCk7Zz0obC0oeStkKS8yKS8oZC15KSx2PWgrKE1hdGguYWJzKE1hdGgucm91bmQoZykpfHwxKSpwLHk9QS50aWNrSW5jcmVtZW50KHksdixnPDA/IWE6YSx0LmNhbGVuZGFyKSxtKyt9cmV0dXJuIHMuZXJyb3IoInRpY2tGaXJzdCBkaWQgbm90IGNvbnZlcmdlIix0KSx5fWlmKCJMIj09PWgpcmV0dXJuIE1hdGgubG9nKG8oKE1hdGgucG93KDEwLGwpLXUpL3ApKnArdSkvTWF0aC5MTjEwO2lmKCJEIj09PWgpe3ZhciB4PSJEMiI9PT1jP0Y6UixiPXMucm91bmRVcChzLm1vZChsLDEpLHgsYSk7cmV0dXJuIE1hdGguZmxvb3IobCkrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxiKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhjKX0sQS50aWNrVGV4dD1mdW5jdGlvbih0LGUscil7dmFyIG4sYT1WKHQsZSksbz0iYXJyYXkiPT09dC50aWNrbW9kZSxsPXJ8fG8sYz10LnR5cGUsdT0iY2F0ZWdvcnkiPT09Yz90LmQybF9ub2FkZDp0LmQybDtpZihvJiZBcnJheS5pc0FycmF5KHQudGlja3RleHQpKXt2YXIgZj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxoPU1hdGguYWJzKGZbMV0tZlswXSkvMWU0O2ZvcihuPTA7bjx0LnRpY2t0ZXh0Lmxlbmd0aCYmIShNYXRoLmFicyhlLXUodC50aWNrdmFsc1tuXSkpPGgpO24rKyk7aWYobjx0LnRpY2t0ZXh0Lmxlbmd0aClyZXR1cm4gYS50ZXh0PVN0cmluZyh0LnRpY2t0ZXh0W25dKSxhfWZ1bmN0aW9uIHAobil7aWYodm9pZCAwPT09bilyZXR1cm4hMDtpZihyKXJldHVybiJub25lIj09PW47dmFyIGk9e2ZpcnN0OnQuX3RtaW4sbGFzdDp0Ll90bWF4fVtuXTtyZXR1cm4iYWxsIiE9PW4mJmUhPT1pfXZhciBkPXI/Im5ldmVyIjoibm9uZSIhPT10LmV4cG9uZW50Zm9ybWF0JiZwKHQuc2hvd2V4cG9uZW50KT8iaGlkZSI6IiI7aWYoImRhdGUiPT09Yz9mdW5jdGlvbih0LGUscixuKXt2YXIgYT10Ll90aWNrcm91bmQsbz1yJiZ0LmhvdmVyZm9ybWF0fHxBLmdldFRpY2tGb3JtYXQodCk7biYmKGE9aShhKT80Ont5OiJtIixtOiJkIixkOiJNIixNOiJTIixTOjR9W2FdKTt2YXIgbCxjPXMuZm9ybWF0RGF0ZShlLngsbyxhLHQuX2RhdGVGb3JtYXQsdC5jYWxlbmRhcix0Ll9leHRyYUZvcm1hdCksdT1jLmluZGV4T2YoIlxuIik7LTEhPT11JiYobD1jLnN1YnN0cih1KzEpLGM9Yy5zdWJzdHIoMCx1KSk7biYmKCIwMDowMDowMCI9PT1jfHwiMDA6MDAiPT09Yz8oYz1sLGw9IiIpOjg9PT1jLmxlbmd0aCYmKGM9Yy5yZXBsYWNlKC86MDAkLywiIikpKTtsJiYocj8iZCI9PT1hP2MrPSIsICIrbDpjPWwrKGM/IiwgIitjOiIiKTp0Ll9pbkNhbGNUaWNrcyYmbD09PXQuX3ByZXZEYXRlSGVhZHx8KGMrPSI8YnI+IitsLHQuX3ByZXZEYXRlSGVhZD1sKSk7ZS50ZXh0PWN9KHQsYSxyLGwpOiJsb2ciPT09Yz9mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXQuZHRpY2ssbD1lLngsYz10LnRpY2tmb3JtYXQsdT0ic3RyaW5nIj09dHlwZW9mIG8mJm8uY2hhckF0KDApOyJuZXZlciI9PT1hJiYoYT0iIik7biYmIkwiIT09dSYmKG89IkwzIix1PSJMIik7aWYoY3x8IkwiPT09dSllLnRleHQ9RyhNYXRoLnBvdygxMCxsKSx0LGEsbik7ZWxzZSBpZihpKG8pfHwiRCI9PT11JiZzLm1vZChsKy4wMSwxKTwuMSl7dmFyIGY9TWF0aC5yb3VuZChsKSxoPU1hdGguYWJzKGYpLHA9dC5leHBvbmVudGZvcm1hdDsicG93ZXIiPT09cHx8cShwKSYmSChmKT8oZS50ZXh0PTA9PT1mPzE6MT09PWY/IjEwIjoiMTA8c3VwPiIrKGY+MT8iIjpfKStoKyI8L3N1cD4iLGUuZm9udFNpemUqPTEuMjUpOigiZSI9PT1wfHwiRSI9PT1wKSYmaD4yP2UudGV4dD0iMSIrcCsoZj4wPyIrIjpfKStoOihlLnRleHQ9RyhNYXRoLnBvdygxMCxsKSx0LCIiLCJmYWtlaG92ZXIiKSwiRDEiPT09byYmInkiPT09dC5faWQuY2hhckF0KDApJiYoZS5keS09ZS5mb250U2l6ZS82KSl9ZWxzZXtpZigiRCIhPT11KXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhvKTtlLnRleHQ9U3RyaW5nKE1hdGgucm91bmQoTWF0aC5wb3coMTAscy5tb2QobCwxKSkpKSxlLmZvbnRTaXplKj0uNzV9aWYoIkQxIj09PXQuZHRpY2spe3ZhciBkPVN0cmluZyhlLnRleHQpLmNoYXJBdCgwKTsiMCIhPT1kJiYiMSIhPT1kfHwoInkiPT09dC5faWQuY2hhckF0KDApP2UuZHgtPWUuZm9udFNpemUvNDooZS5keSs9ZS5mb250U2l6ZS8yLGUuZHgrPSh0LnJhbmdlWzFdPnQucmFuZ2VbMF0/MTotMSkqZS5mb250U2l6ZSoobDwwPy41Oi4yNSkpKX19KHQsYSwwLGwsZCk6ImNhdGVnb3J5Ij09PWM/ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZS54KV07dm9pZCAwPT09ciYmKHI9IiIpO2UudGV4dD1TdHJpbmcocil9KHQsYSk6Im11bHRpY2F0ZWdvcnkiPT09Yz9mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5yb3VuZChlLngpLGk9dC5fY2F0ZWdvcmllc1tuXXx8W10sYT12b2lkIDA9PT1pWzFdPyIiOlN0cmluZyhpWzFdKSxvPXZvaWQgMD09PWlbMF0/IiI6U3RyaW5nKGlbMF0pO3I/ZS50ZXh0PW8rIiAtICIrYTooZS50ZXh0PWEsZS50ZXh0Mj1vKX0odCxhLHIpOnJ0KHQpP2Z1bmN0aW9uKHQsZSxyLG4saSl7aWYoInJhZGlhbnMiIT09dC50aGV0YXVuaXR8fHIpZS50ZXh0PUcoZS54LHQsaSxuKTtlbHNle3ZhciBhPWUueC8xODA7aWYoMD09PWEpZS50ZXh0PSIwIjtlbHNle3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKTw9MWUtNn12YXIgcj1mdW5jdGlvbih0KXt2YXIgcj0xO2Zvcig7IWUoTWF0aC5yb3VuZCh0KnIpL3IsdCk7KXIqPTEwO3JldHVybiByfSh0KSxuPXQqcixpPU1hdGguYWJzKGZ1bmN0aW9uIHQocixuKXtyZXR1cm4gZShuLDApP3I6dChuLHIlbil9KG4scikpO3JldHVybltNYXRoLnJvdW5kKG4vaSksTWF0aC5yb3VuZChyL2kpXX0oYSk7aWYob1sxXT49MTAwKWUudGV4dD1HKHMuZGVnMnJhZChlLngpLHQsaSxuKTtlbHNle3ZhciBsPWUueDwwOzE9PT1vWzFdPzE9PT1vWzBdP2UudGV4dD0iXHUwM2MwIjplLnRleHQ9b1swXSsiXHUwM2MwIjplLnRleHQ9WyI8c3VwPiIsb1swXSwiPC9zdXA+IiwiXHUyMDQ0IiwiPHN1Yj4iLG9bMV0sIjwvc3ViPiIsIlx1MDNjMCJdLmpvaW4oIiIpLGwmJihlLnRleHQ9XytlLnRleHQpfX19fSh0LGEscixsLGQpOmZ1bmN0aW9uKHQsZSxyLG4saSl7Im5ldmVyIj09PWk/aT0iIjoiYWxsIj09PXQuc2hvd2V4cG9uZW50JiZNYXRoLmFicyhlLngvdC5kdGljayk8MWUtNiYmKGk9ImhpZGUiKTtlLnRleHQ9RyhlLngsdCxpLG4pfSh0LGEsMCxsLGQpLHQudGlja3ByZWZpeCYmIXAodC5zaG93dGlja3ByZWZpeCkmJihhLnRleHQ9dC50aWNrcHJlZml4K2EudGV4dCksdC50aWNrc3VmZml4JiYhcCh0LnNob3d0aWNrc3VmZml4KSYmKGEudGV4dCs9dC50aWNrc3VmZml4KSwiYm91bmRhcmllcyI9PT10LnRpY2tzb258fHQuc2hvd2RpdmlkZXJzKXt2YXIgZz1mdW5jdGlvbihlKXt2YXIgcj10LmwycChlKTtyZXR1cm4gcj49MCYmcjw9dC5fbGVuZ3RoP2U6bnVsbH07YS54Ym5kPVtnKGEueC0uNSksZyhhLngrdC5kdGljay0uNSldfXJldHVybiBhfSxBLmhvdmVyTGFiZWxUZXh0PWZ1bmN0aW9uKHQsZSxyKXtpZihyIT09dyYmciE9PWUpcmV0dXJuIEEuaG92ZXJMYWJlbFRleHQodCxlKSsiIC0gIitBLmhvdmVyTGFiZWxUZXh0KHQscik7dmFyIG49ImxvZyI9PT10LnR5cGUmJmU8PTAsaT1BLnRpY2tUZXh0KHQsdC5jMmwobj8tZTplKSwiaG92ZXIiKS50ZXh0O3JldHVybiBuPzA9PT1lPyIwIjpfK2k6aX07dmFyIFU9WyJmIiwicCIsIm4iLCJcdTAzYmMiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCJdO2Z1bmN0aW9uIHEodCl7cmV0dXJuIlNJIj09PXR8fCJCIj09PXR9ZnVuY3Rpb24gSCh0KXtyZXR1cm4gdD4xNHx8dDwtMTV9ZnVuY3Rpb24gRyh0LGUscixuKXt2YXIgYT10PDAsbz1lLl90aWNrcm91bmQsbD1yfHxlLmV4cG9uZW50Zm9ybWF0fHwiQiIsYz1lLl90aWNrZXhwb25lbnQsdT1BLmdldFRpY2tGb3JtYXQoZSksZj1lLnNlcGFyYXRldGhvdXNhbmRzO2lmKG4pe3ZhciBoPXtleHBvbmVudGZvcm1hdDpsLGR0aWNrOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UuZHRpY2s6aSh0KSYmTWF0aC5hYnModCl8fDEscmFuZ2U6Im5vbmUiPT09ZS5zaG93ZXhwb25lbnQ/ZS5yYW5nZS5tYXAoZS5yMmQpOlswLHR8fDFdfTtqKGgpLG89KE51bWJlcihoLl90aWNrcm91bmQpfHwwKSs0LGM9aC5fdGlja2V4cG9uZW50LGUuaG92ZXJmb3JtYXQmJih1PWUuaG92ZXJmb3JtYXQpfWlmKHUpcmV0dXJuIGUuX251bUZvcm1hdCh1KSh0KS5yZXBsYWNlKC8tL2csXyk7dmFyIHAsZD1NYXRoLnBvdygxMCwtbykvMjtpZigibm9uZSI9PT1sJiYoYz0wKSwodD1NYXRoLmFicyh0KSk8ZCl0PSIwIixhPSExO2Vsc2V7aWYodCs9ZCxjJiYodCo9TWF0aC5wb3coMTAsLWMpLG8rPWMpLDA9PT1vKXQ9U3RyaW5nKE1hdGguZmxvb3IodCkpO2Vsc2UgaWYobzwwKXt0PSh0PVN0cmluZyhNYXRoLnJvdW5kKHQpKSkuc3Vic3RyKDAsdC5sZW5ndGgrbyk7Zm9yKHZhciBnPW87ZzwwO2crKyl0Kz0iMCJ9ZWxzZXt2YXIgdj0odD1TdHJpbmcodCkpLmluZGV4T2YoIi4iKSsxO3YmJih0PXQuc3Vic3RyKDAsditvKS5yZXBsYWNlKC9cLj8wKyQvLCIiKSl9dD1zLm51bVNlcGFyYXRlKHQsZS5fc2VwYXJhdG9ycyxmKX1jJiYiaGlkZSIhPT1sJiYocShsKSYmSChjKSYmKGw9InBvd2VyIikscD1jPDA/XystYzoicG93ZXIiIT09bD8iKyIrYzpTdHJpbmcoYyksImUiPT09bHx8IkUiPT09bD90Kz1sK3A6InBvd2VyIj09PWw/dCs9Ilx4ZDcxMDxzdXA+IitwKyI8L3N1cD4iOiJCIj09PWwmJjk9PT1jP3QrPSJCIjpxKGwpJiYodCs9VVtjLzMrNV0pKTtyZXR1cm4gYT9fK3Q6dH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dC5faWQuY2hhckF0KDApLG49dC5fdGlja0FuZ2xlc1tlXXx8MCxpPXMuZGVnMnJhZChuKSxhPU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSksbD0wLGM9MDtyZXR1cm4gdC5fc2VsZWN0aW9uc1tlXS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9JCh0aGlzKSxlPWYuYkJveCh0Lm5vZGUoKSkscj1lLndpZHRoLG49ZS5oZWlnaHQ7bD1NYXRoLm1heChsLG8qcixhKm4pLGM9TWF0aC5tYXgoYyxhKnIsbypuKX0pLHt4OmMseTpsfVtyXX1mdW5jdGlvbiBXKHQpe3JldHVyblt0LnRleHQsdC54LHQuYXhJbmZvLHQuZm9udCx0LmZvbnRTaXplLHQuZm9udENvbG9yXS5qb2luKCJfIil9ZnVuY3Rpb24gWCh0LGUpe3ZhciByLG49dC5fZnVsbExheW91dC5fc2l6ZSxpPWUuX2lkLmNoYXJBdCgwKSxhPWUuc2lkZTtyZXR1cm4iZnJlZSIhPT1lLmFuY2hvcj9yPVMuZ2V0RnJvbUlkKHQsZS5hbmNob3IpOiJ4Ij09PWk/cj17X29mZnNldDpuLnQrKDEtKGUucG9zaXRpb258fDApKSpuLmgsX2xlbmd0aDowfToieSI9PT1pJiYocj17X29mZnNldDpuLmwrKGUucG9zaXRpb258fDApKm4udyxfbGVuZ3RoOjB9KSwidG9wIj09PWF8fCJsZWZ0Ij09PWE/ci5fb2Zmc2V0OiJib3R0b20iPT09YXx8InJpZ2h0Ij09PWE/ci5fb2Zmc2V0K3IuX2xlbmd0aDp2b2lkIDB9ZnVuY3Rpb24gWih0LGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPjEmJnI8dC5fbGVuZ3RoLTF9ZnVuY3Rpb24gJCh0KXt2YXIgZT1uLnNlbGVjdCh0KSxyPWUuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIik7cmV0dXJuIHIuZW1wdHkoKT9lLnNlbGVjdCgidGV4dCIpOnJ9ZnVuY3Rpb24gSih0KXtyZXR1cm4gdC5faWQrIi5hdXRvbWFyZ2luIn1mdW5jdGlvbiBLKHQpe3JldHVybiB0Ll9pZCsiLnJhbmdlc2xpZGVyIn1mdW5jdGlvbiBRKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspLTE9PT10LmluZGV4T2YoZVtyXSkmJnQucHVzaChlW3JdKX1mdW5jdGlvbiB0dCh0LGUscil7dmFyIG4saSxhPVtdLG89W10sbD10LmxheW91dDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWEucHVzaChBLmdldEZyb21JZCh0LGVbbl0pKTtmb3Iobj0wO248ci5sZW5ndGg7bisrKW8ucHVzaChBLmdldEZyb21JZCh0LHJbbl0pKTt2YXIgYz1PYmplY3Qua2V5cyhoKSx1PVsiYW5jaG9yIiwiZG9tYWluIiwib3ZlcmxheWluZyIsInBvc2l0aW9uIiwic2lkZSIsInRpY2thbmdsZSIsImVkaXRUeXBlIl0sZj1bImxpbmVhciIsImxvZyJdO2ZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBwPWNbbl0sZD1hWzBdW3BdLGc9b1swXVtwXSx2PSEwLG09ITEseT0hMTtpZigiXyIhPT1wLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGQmJi0xPT09dS5pbmRleE9mKHApKXtmb3IoaT0xO2k8YS5sZW5ndGgmJnY7aSsrKXt2YXIgeD1hW2ldW3BdOyJ0eXBlIj09PXAmJi0xIT09Zi5pbmRleE9mKGQpJiYtMSE9PWYuaW5kZXhPZih4KSYmZCE9PXg/bT0hMDp4IT09ZCYmKHY9ITEpfWZvcihpPTE7aTxvLmxlbmd0aCYmdjtpKyspe3ZhciBiPW9baV1bcF07InR5cGUiPT09cCYmLTEhPT1mLmluZGV4T2YoZykmJi0xIT09Zi5pbmRleE9mKGIpJiZnIT09Yj95PSEwOm9baV1bcF0hPT1nJiYodj0hMSl9diYmKG0mJihsW2FbMF0uX25hbWVdLnR5cGU9ImxpbmVhciIpLHkmJihsW29bMF0uX25hbWVdLnR5cGU9ImxpbmVhciIpLGV0KGwscCxhLG8sdC5fZnVsbExheW91dC5fZGZsdFRpdGxlKSl9fWZvcihuPTA7bjx0Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLmxlbmd0aDtuKyspe3ZhciBfPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbbl07LTEhPT1lLmluZGV4T2YoXy54cmVmKSYmLTEhPT1yLmluZGV4T2YoXy55cmVmKSYmcy5zd2FwQXR0cnMobC5hbm5vdGF0aW9uc1tuXSxbIj8iXSl9fWZ1bmN0aW9uIGV0KHQsZSxyLG4saSl7dmFyIGEsbz1zLm5lc3RlZFByb3BlcnR5LGw9byh0W3JbMF0uX25hbWVdLGUpLmdldCgpLGM9byh0W25bMF0uX25hbWVdLGUpLmdldCgpO2ZvcigidGl0bGUiPT09ZSYmKGwmJmwudGV4dD09PWkueCYmKGwudGV4dD1pLnkpLGMmJmMudGV4dD09PWkueSYmKGMudGV4dD1pLngpKSxhPTA7YTxyLmxlbmd0aDthKyspbyh0LHJbYV0uX25hbWUrIi4iK2UpLnNldChjKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKW8odCxuW2FdLl9uYW1lKyIuIitlKS5zZXQobCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuImFuZ3VsYXJheGlzIj09PXQuX2lkfUEuZ2V0VGlja0Zvcm1hdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsO2Z1bmN0aW9uIGModCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0P3Q6TnVtYmVyKHQucmVwbGFjZSgiTSIsIiIpKSp2fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1bIkwiLCJEIl07aWYodHlwZW9mIHQ9PXR5cGVvZiBlKXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQtZTt2YXIgbj1yLmluZGV4T2YodC5jaGFyQXQoMCkpLGk9ci5pbmRleE9mKGUuY2hhckF0KDApKTtyZXR1cm4gbj09PWk/TnVtYmVyKHQucmVwbGFjZSgvKEx8RCkvZywiIikpLU51bWJlcihlLnJlcGxhY2UoLyhMfEQpL2csIiIpKTpuLWl9cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0PzE6LTF9ZnVuY3Rpb24gZih0LGUpe3ZhciByPW51bGw9PT1lWzBdLG49bnVsbD09PWVbMV0saT11KHQsZVswXSk+PTAsYT11KHQsZVsxXSk8PTA7cmV0dXJuKHJ8fGkpJiYobnx8YSl9aWYodC50aWNrZm9ybWF0c3RvcHMmJnQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aD4wKXN3aXRjaCh0LnR5cGUpe2Nhc2UiZGF0ZSI6Y2FzZSJsaW5lYXIiOmZvcihlPTA7ZTx0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg7ZSsrKWlmKChuPXQudGlja2Zvcm1hdHN0b3BzW2VdKS5lbmFibGVkJiYoaT10LmR0aWNrLGE9bi5kdGlja3JhbmdlLG89dm9pZCAwLHZvaWQgMCx2b2lkIDAsbz1jfHxmdW5jdGlvbih0KXtyZXR1cm4gdH0scz1hWzBdLGw9YVsxXSwoIXMmJiJudW1iZXIiIT10eXBlb2Ygc3x8byhzKTw9byhpKSkmJighbCYmIm51bWJlciIhPXR5cGVvZiBsfHxvKGwpPj1vKGkpKSkpe3I9bjticmVha31icmVhaztjYXNlImxvZyI6Zm9yKGU9MDtlPHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDtlKyspaWYoKG49dC50aWNrZm9ybWF0c3RvcHNbZV0pLmVuYWJsZWQmJmYodC5kdGljayxuLmR0aWNrcmFuZ2UpKXtyPW47YnJlYWt9fXJldHVybiByP3IudmFsdWU6dC50aWNrZm9ybWF0fSxBLmdldFN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dC5fc3VicGxvdHMsbj1yLmNhcnRlc2lhbi5jb25jYXQoci5nbDJkfHxbXSksaT1lP0EuZmluZFN1YnBsb3RzV2l0aEF4aXMobixlKTpuO3JldHVybiBpLnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgcj10LnN1YnN0cigxKS5zcGxpdCgieSIpLG49ZS5zdWJzdHIoMSkuc3BsaXQoInkiKTtyZXR1cm4gclswXT09PW5bMF0/K3JbMV0tK25bMV06K3JbMF0tK25bMF19KSxpfSxBLmZpbmRTdWJwbG90c1dpdGhBeGlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBSZWdFeHAoIngiPT09ZS5faWQuY2hhckF0KDApPyJeIitlLl9pZCsieSI6ZS5faWQrIiQiKSxuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTtyLnRlc3QoYSkmJm4ucHVzaChhKX1yZXR1cm4gbn0sQS5tYWtlQ2xpcFBhdGhzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoIWUuX2hhc09ubHlMYXJnZVNwbG9tcyl7dmFyIHIsaSxhPXtfb2Zmc2V0OjAsX2xlbmd0aDplLndpZHRoLF9pZDoiIn0sbz17X29mZnNldDowLF9sZW5ndGg6ZS5oZWlnaHQsX2lkOiIifSxzPUEubGlzdCh0LCJ4IiwhMCksbD1BLmxpc3QodCwieSIsITApLGM9W107Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylmb3IoYy5wdXNoKHt4OnNbcl0seTpvfSksaT0wO2k8bC5sZW5ndGg7aSsrKTA9PT1yJiZjLnB1c2goe3g6YSx5OmxbaV19KSxjLnB1c2goe3g6c1tyXSx5OmxbaV19KTt2YXIgdT1lLl9jbGlwcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLmRhdGEoYyxmdW5jdGlvbih0KXtyZXR1cm4gdC54Ll9pZCt0LnkuX2lkfSk7dS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJheGVzY2xpcCIsITApLmF0dHIoImlkIixmdW5jdGlvbih0KXtyZXR1cm4iY2xpcCIrZS5fdWlkK3QueC5faWQrdC55Ll9pZH0pLmFwcGVuZCgicmVjdCIpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoInJlY3QiKS5hdHRyKHt4OnQueC5fb2Zmc2V0fHwwLHk6dC55Ll9vZmZzZXR8fDAsd2lkdGg6dC54Ll9sZW5ndGh8fDEsaGVpZ2h0OnQueS5fbGVuZ3RofHwxfSl9KX19LEEuZHJhdz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dDsicmVkcmF3Ij09PWUmJm4uX3BhcGVyLnNlbGVjdEFsbCgiZy5zdWJwbG90IikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9bi5fcGxvdHNbZV0saT1yLnhheGlzLGE9ci55YXhpcztyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsidGljayIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJ0aWNrIikucmVtb3ZlKCksci54YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrInRpY2syIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIrYS5faWQrInRpY2syIikucmVtb3ZlKCksci54YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrImRpdmlkZXIiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsiZGl2aWRlciIpLnJlbW92ZSgpLHIuZ3JpZGxheWVyJiZyLmdyaWRsYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxyLnplcm9saW5lbGF5ZXImJnIuemVyb2xpbmVsYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuZy0iK2kuX2lkKyJ0aXRsZSIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoIi5nLSIrYS5faWQrInRpdGxlIikucmVtb3ZlKCl9KTt2YXIgaT1lJiYicmVkcmF3IiE9PWU/ZTpBLmxpc3RJZHModCk7cmV0dXJuIHMuc3luY09yQXN5bmMoaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dmFyIG49QS5nZXRGcm9tSWQodCxlKSxpPUEuZHJhd09uZSh0LG4scik7cmV0dXJuIG4uX3I9bi5yYW5nZS5zbGljZSgpLG4uX3JsPXMuc2ltcGxlTWFwKG4uX3Isbi5yMmwpLGl9fX0pKX0sQS5kcmF3T25lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGw7cj1yfHx7fSxlLnNldFNjYWxlKCk7dmFyIGg9dC5fZnVsbExheW91dCxwPWUuX2lkLGQ9cC5jaGFyQXQoMCksZz1BLmNvdW50ZXJMZXR0ZXIocCksdj1lLl9tYWluU3VicGxvdCxtPWUuX21haW5MaW5lUG9zaXRpb24seT1lLl9tYWluTWlycm9yUG9zaXRpb24seD1oLl9wbG90c1t2XVtkKyJheGlzbGF5ZXIiXSxiPWUuX3N1YnBsb3RzV2l0aCxfPWUuX3ZhbHM9QS5jYWxjVGlja3MoZSksdz1bZS5taXJyb3IsbSx5XS5qb2luKCJfIik7Zm9yKG49MDtuPF8ubGVuZ3RoO24rKylfW25dLmF4SW5mbz13O2lmKGUudmlzaWJsZSl7ZS5fc2VsZWN0aW9ucz17fSxlLl90aWNrQW5nbGVzPXt9O3ZhciBrLE0sUz1BLm1ha2VUcmFuc0ZuKGUpO2lmKCJib3VuZGFyaWVzIj09PWUudGlja3Nvbil7dmFyIEU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdLGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJm4ucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZihlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpKGVbcl0sMCk7aShlW3ItMV0sMSl9cmV0dXJuIG59KDAsXyk7TT1BLmNsaXBFbmRzKGUsRSksaz0iaW5zaWRlIj09PWUudGlja3M/TTpFfWVsc2UgTT1BLmNsaXBFbmRzKGUsXyksaz0iaW5zaWRlIj09PWUudGlja3M/TTpfO3ZhciBDPWUuX2dyaWRWYWxzPU0sTD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXSxhPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54Ym5kW2VdO251bGwhPT1yJiZpLnB1c2gocy5leHRlbmRGbGF0KHt9LHQse3g6cn0pKX07aWYodC5zaG93ZGl2aWRlcnMmJmUubGVuZ3RoKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdO28udGV4dDIhPT1uJiZhKG8sMCksbj1vLnRleHQyfWEoZVtyLTFdLDEpfXJldHVybiBpfShlLF8pO2lmKCFoLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciB6PXt9O2ZvcihuPTA7bjxiLmxlbmd0aDtuKyspe2k9YltuXTt2YXIgTz0obD1oLl9wbG90c1tpXSlbZysiYXhpcyJdLEk9Ty5fbWFpbkF4aXMuX2lkO2lmKCF6W0ldKXt6W0ldPTE7dmFyIEQ9IngiPT09ZD8iTTAsIitPLl9vZmZzZXQrInYiK08uX2xlbmd0aDoiTSIrTy5fb2Zmc2V0KyIsMGgiK08uX2xlbmd0aDtBLmRyYXdHcmlkKHQsZSx7dmFsczpDLGNvdW50ZXJBeGlzOk8sbGF5ZXI6bC5ncmlkbGF5ZXIuc2VsZWN0KCIuIitwKSxwYXRoOkQsdHJhbnNGbjpTfSksQS5kcmF3WmVyb0xpbmUodCxlLHtjb3VudGVyQXhpczpPLGxheWVyOmwuemVyb2xpbmVsYXllcixwYXRoOkQsdHJhbnNGbjpTfSl9fX12YXIgUD1BLmdldFRpY2tTaWducyhlKSxSPVtdO2lmKGUudGlja3Mpe3ZhciBGLEIsTixqPUEubWFrZVRpY2tQYXRoKGUsbSxQWzJdKTtpZihlLl9hbmNob3JBeGlzJiZlLm1pcnJvciYmITAhPT1lLm1pcnJvcj8oRj1BLm1ha2VUaWNrUGF0aChlLHksUFszXSksQj1qK0YpOihGPSIiLEI9aiksZS5zaG93ZGl2aWRlcnMmJiJvdXRzaWRlIj09PWUudGlja3MmJiJib3VuZGFyaWVzIj09PWUudGlja3Nvbil7dmFyIFU9e307Zm9yKG49MDtuPEwubGVuZ3RoO24rKylVW0xbbl0ueF09MTtOPWZ1bmN0aW9uKHQpe3JldHVybiBVW3QueF0/RjpCfX1lbHNlIE49QjtBLmRyYXdUaWNrcyh0LGUse3ZhbHM6ayxsYXllcjp4LHBhdGg6Tix0cmFuc0ZuOlN9KSxSPU9iamVjdC5rZXlzKGUuX2xpbmVwb3NpdGlvbnN8fHt9KX1mb3Iobj0wO248Ui5sZW5ndGg7bisrKXtpPVJbbl0sbD1oLl9wbG90c1tpXTt2YXIgcT1lLl9saW5lcG9zaXRpb25zW2ldfHxbXSxIPUEubWFrZVRpY2tQYXRoKGUscVswXSxQWzBdKStBLm1ha2VUaWNrUGF0aChlLHFbMV0sUFsxXSk7QS5kcmF3VGlja3ModCxlLHt2YWxzOmssbGF5ZXI6bFtkKyJheGlzbGF5ZXIiXSxwYXRoOkgsdHJhbnNGbjpTfSl9dmFyIEc9W107aWYoRy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIEEuZHJhd0xhYmVscyh0LGUse3ZhbHM6XyxsYXllcjp4LHRyYW5zRm46UyxsYWJlbEZuczpBLm1ha2VMYWJlbEZucyhlLG0pfSl9KSwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBaPTAsJD17eDoyLHk6MTB9W2RdLFE9UFsyXSooImluc2lkZSI9PT1lLnRpY2tzPy0xOjEpO0cucHVzaChmdW5jdGlvbigpe3JldHVybiBaKz1ZKGUscCsidGljayIpKyQsWis9ZS5fdGlja0FuZ2xlc1twKyJ0aWNrIl0/ZS50aWNrZm9udC5zaXplKlQ6MCxBLmRyYXdMYWJlbHModCxlLHt2YWxzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO25bYS50ZXh0Ml0/blthLnRleHQyXS5wdXNoKGEueCk6blthLnRleHQyXT1bYS54XX1mb3IodmFyIG8gaW4gbilyLnB1c2goVih0LHMuaW50ZXJwKG5bb10sLjUpLG8pKTtyZXR1cm4gcn0oZSxfKSxsYXllcjp4LGNsczpwKyJ0aWNrMiIscmVwb3NpdGlvbk9uVXBkYXRlOiEwLHNlY29uZGFyeTohMCx0cmFuc0ZuOlMsbGFiZWxGbnM6QS5tYWtlTGFiZWxGbnMoZSxtK1oqUSl9KX0pLEcucHVzaChmdW5jdGlvbigpe3JldHVybiBaKz1ZKGUscCsidGljazIiKSxlLl9sYWJlbExlbmd0aD1aLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLl9pZCsiZGl2aWRlciIsaT1yLnZhbHMsYT1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoaSxXKTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5jYWxsKHUuc3Ryb2tlLGUuZGl2aWRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixmLmNyaXNwUm91bmQodCxlLmRpdmlkZXJ3aWR0aCwxKSsicHgiKSxhLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpfSh0LGUse3ZhbHM6TCxsYXllcjp4LHBhdGg6QS5tYWtlVGlja1BhdGgoZSxtLFEsWiksdHJhbnNGbjpTfSl9KX12YXIgdHQ9by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoZSk7cmV0dXJuIEcucHVzaChmdW5jdGlvbigpe2lmKGUuc2hvd3RpY2tsYWJlbHMpe3ZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj14Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLl9ib3VuZGluZ0JveD17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsbGVmdDpuLmxlZnQtci5sZWZ0LHJpZ2h0Om4ucmlnaHQtci5sZWZ0LHRvcDpuLnRvcC1yLnRvcCxib3R0b206bi5ib3R0b20tci50b3B9fWVsc2V7dmFyIGksYT1oLl9zaXplOyJ4Ij09PWQ/KGk9ImZyZWUiPT09ZS5hbmNob3I/YS50K2EuaCooMS1lLnBvc2l0aW9uKTphLnQrYS5oKigxLWUuX2FuY2hvckF4aXMuZG9tYWluW3tib3R0b206MCx0b3A6MX1bZS5zaWRlXV0pLGUuX2JvdW5kaW5nQm94PXt0b3A6aSxib3R0b206aSxsZWZ0OmUuX29mZnNldCxyaWdodDplLl9vZmZzZXQrZS5fbGVuZ3RoLHdpZHRoOmUuX2xlbmd0aCxoZWlnaHQ6MH0pOihpPSJmcmVlIj09PWUuYW5jaG9yP2EubCthLncqZS5wb3NpdGlvbjphLmwrYS53KmUuX2FuY2hvckF4aXMuZG9tYWluW3tsZWZ0OjAscmlnaHQ6MX1bZS5zaWRlXV0sZS5fYm91bmRpbmdCb3g9e2xlZnQ6aSxyaWdodDppLGJvdHRvbTplLl9vZmZzZXQrZS5fbGVuZ3RoLHRvcDplLl9vZmZzZXQsaGVpZ2h0OmUuX2xlbmd0aCx3aWR0aDowfSl9aWYoYil7Zm9yKHZhciBvPWUuX2NvdW50ZXJTcGFuPVsxLzAsLTEvMF0scz0wO3M8Yi5sZW5ndGg7cysrKXt2YXIgbD1oLl9wbG90c1tiW3NdXVsieCI9PT1kPyJ5YXhpcyI6InhheGlzIl07ZXQobyxbbC5fb2Zmc2V0LGwuX29mZnNldCtsLl9sZW5ndGhdKX0iZnJlZSI9PT1lLmFuY2hvciYmZXQobywieCI9PT1kP1tlLl9ib3VuZGluZ0JveC5ib3R0b20sZS5fYm91bmRpbmdCb3gudG9wXTpbZS5fYm91bmRpbmdCb3gucmlnaHQsZS5fYm91bmRpbmdCb3gubGVmdF0pfX0sZnVuY3Rpb24oKXt2YXIgcixuLGk9ZS5zaWRlLmNoYXJBdCgwKTtpZih0dCYmKG49by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiYXV0b01hcmdpbk9wdHMiKSh0LGUpKSxhLmF1dG9NYXJnaW4odCxLKGUpLG4pLGUuYXV0b21hcmdpbiYmKCF0dHx8ImIiIT09aSkpe3I9e3g6MCx5OjAscjowLGw6MCx0OjAsYjowfTt2YXIgcyxsLGM9ZS5fYm91bmRpbmdCb3gsdT1YKHQsZSk7c3dpdGNoKGQraSl7Y2FzZSJ4YiI6cz0wLGw9Yy50b3AtdSxyW2ldPWMuaGVpZ2h0O2JyZWFrO2Nhc2UieHQiOnM9MSxsPXUtYy5ib3R0b20scltpXT1jLmhlaWdodDticmVhaztjYXNlInlsIjpzPTAsbD11LWMucmlnaHQscltpXT1jLndpZHRoO2JyZWFrO2Nhc2UieXIiOnM9MSxsPWMubGVmdC11LHJbaV09Yy53aWR0aH1pZihyW2ddPSJmcmVlIj09PWUuYW5jaG9yP2UucG9zaXRpb246ZS5fYW5jaG9yQXhpcy5kb21haW5bc10scltpXT4wJiYocltpXSs9bCksZS50aXRsZS50ZXh0IT09aC5fZGZsdFRpdGxlW2RdJiYocltpXSs9ZS50aXRsZS5mb250LnNpemUpLCJ4Ij09PWQmJmMud2lkdGg+MCl7dmFyIGY9Yy5yaWdodC0oZS5fb2Zmc2V0K2UuX2xlbmd0aCk7Zj4wJiYoci54PTEsci5yPWYpO3ZhciBwPWUuX29mZnNldC1jLmxlZnQ7cD4wJiYoci54PTAsci5sPXApfWVsc2UgaWYoInkiPT09ZCYmYy5oZWlnaHQ+MCl7dmFyIHY9Yy5ib3R0b20tKGUuX29mZnNldCtlLl9sZW5ndGgpO3Y+MCYmKHIueT0wLHIuYj12KTt2YXIgbT1lLl9vZmZzZXQtYy50b3A7bT4wJiYoci55PTEsci50PW0pfX1hLmF1dG9NYXJnaW4odCxKKGUpLHIpfSksci5za2lwVGl0bGV8fHR0JiZlLl9ib3VuZGluZ0JveCYmImJvdHRvbSI9PT1lLnNpZGV8fEcucHVzaChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG49dC5fZnVsbExheW91dCxpPWUuX2lkLGE9aS5jaGFyQXQoMCksbz1lLnRpdGxlLmZvbnQuc2l6ZTtpZigibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpcj1lLl9sYWJlbExlbmd0aDtlbHNle3I9MTArMS41Km8rKGUubGluZXdpZHRoP2UubGluZXdpZHRoLTE6MCl9dmFyIHMsbCx1LGgscD1YKHQsZSk7IngiPT09YT8obD1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsdT0idG9wIj09PWUuc2lkZT8tci1vKihlLnNob3d0aWNrbGFiZWxzPzE6MCk6citvKihlLnNob3d0aWNrbGFiZWxzPzEuNTouNSksdSs9cCk6KHU9ZS5fb2Zmc2V0K2UuX2xlbmd0aC8yLGw9InJpZ2h0Ij09PWUuc2lkZT9yK28qKGUuc2hvd3RpY2tsYWJlbHM/MTouNSk6LXItbyooZS5zaG93dGlja2xhYmVscz8uNTowKSxsKz1wLHM9e3JvdGF0ZToiLTkwIixvZmZzZXQ6MH0pO2lmKCJtdWx0aWNhdGVnb3J5IiE9PWUudHlwZSl7dmFyIGQ9ZS5fc2VsZWN0aW9uc1tlLl9pZCsidGljayJdO2lmKGg9e3NlbGVjdGlvbjpkLHNpZGU6ZS5zaWRlfSxkJiZkLm5vZGUoKSYmZC5ub2RlKCkucGFyZW50Tm9kZSl7dmFyIGc9Zi5nZXRUcmFuc2xhdGUoZC5ub2RlKCkucGFyZW50Tm9kZSk7aC5vZmZzZXRMZWZ0PWcueCxoLm9mZnNldFRvcD1nLnl9fXJldHVybiBjLmRyYXcodCxpKyJ0aXRsZSIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZTplLl9uYW1lKyIudGl0bGUudGV4dCIscGxhY2Vob2xkZXI6bi5fZGZsdFRpdGxlW2FdLGF2b2lkOmgsdHJhbnNmb3JtOnMsYXR0cmlidXRlczp7eDpsLHk6dSwidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pfSh0LGUpfSkscy5zeW5jT3JBc3luYyhHKX1mdW5jdGlvbiBldCh0LGUpe3RbMF09TWF0aC5taW4odFswXSxlWzBdKSx0WzFdPU1hdGgubWF4KHRbMV0sZVsxXSl9fSxBLmdldFRpY2tTaWducz1mdW5jdGlvbih0KXt2YXIgZT10Ll9pZC5jaGFyQXQoMCkscj17eDoidG9wIix5OiJyaWdodCJ9W2VdLG49dC5zaWRlPT09cj8xOi0xLGk9Wy0xLDEsbiwtbl07cmV0dXJuImluc2lkZSIhPT10LnRpY2tzPT0oIngiPT09ZSkmJihpPWkubWFwKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpLGl9LEEubWFrZVRyYW5zRm49ZnVuY3Rpb24odCl7dmFyIGU9dC5faWQuY2hhckF0KDApLHI9dC5fb2Zmc2V0O3JldHVybiJ4Ij09PWU/ZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhyK3QubDJwKGUueCkpKyIsMCkifTpmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisocit0LmwycChlLngpKSsiKSJ9fSxBLm1ha2VUaWNrUGF0aD1mdW5jdGlvbih0LGUscixuKXtuPXZvaWQgMCE9PW4/bjp0LnRpY2tsZW47dmFyIGk9dC5faWQuY2hhckF0KDApLGE9KHQubGluZXdpZHRofHwxKS8yO3JldHVybiJ4Ij09PWk/Ik0wLCIrKGUrYSpyKSsidiIrbipyOiJNIisoZSthKnIpKyIsMGgiK24qcn0sQS5tYWtlTGFiZWxGbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2lkLmNoYXJBdCgwKSxhPSJib3VuZGFyaWVzIiE9PXQudGlja3NvbiYmIm91dHNpZGUiPT09dC50aWNrcyxvPTAsbD0wO2lmKGEmJihvKz10LnRpY2tsZW4pLHImJiJvdXRzaWRlIj09PXQudGlja3Mpe3ZhciBjPXMuZGVnMnJhZChyKTtvPXQudGlja2xlbipNYXRoLmNvcyhjKSsxLGw9dC50aWNrbGVuKk1hdGguc2luKGMpfXQuc2hvd3RpY2tsYWJlbHMmJihhfHx0LnNob3dsaW5lKSYmKG8rPS4yKnQudGlja2ZvbnQuc2l6ZSk7dmFyIHUsZixoLHAsZD17bGFiZWxTdGFuZG9mZjpvKz0odC5saW5ld2lkdGh8fDEpLzIsbGFiZWxTaGlmdDpsfTtyZXR1cm4ieCI9PT1uPyhwPSJib3R0b20iPT09dC5zaWRlPzE6LTEsdT1sKnAsZj1lK28qcCxoPSJib3R0b20iPT09dC5zaWRlPzE6LS4yLGQueEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K3V9LGQueUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K2YrdC5mb250U2l6ZSpofSxkLmFuY2hvckZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkoZSkmJjAhPT1lJiYxODAhPT1lP2UqcDwwPyJlbmQiOiJzdGFydCI6Im1pZGRsZSJ9LGQuaGVpZ2h0Rm49ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPC02MHx8cj42MD8tLjUqbjoidG9wIj09PXQuc2lkZT8tbjowfSk6InkiPT09biYmKHA9InJpZ2h0Ij09PXQuc2lkZT8xOi0xLHU9byxmPS1sKnAsaD05MD09PU1hdGguYWJzKHQudGlja2FuZ2xlKT8uNTowLGQueEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K2UrKHUrdC5mb250U2l6ZSpoKSpwfSxkLnlGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keStmK3QuZm9udFNpemUqa30sZC5hbmNob3JGbj1mdW5jdGlvbihlLHIpe3JldHVybiBpKHIpJiY5MD09PU1hdGguYWJzKHIpPyJtaWRkbGUiOiJyaWdodCI9PT10LnNpZGU/InN0YXJ0IjoiZW5kIn0sZC5oZWlnaHRGbj1mdW5jdGlvbihlLHIsbil7cmV0dXJuKHIqPSJsZWZ0Ij09PXQuc2lkZT8xOi0xKTwtMzA/LW46cjwzMD8tLjUqbjowfSksZH0sQS5kcmF3VGlja3M9ZnVuY3Rpb24odCxlLHIpe3I9cnx8e307dmFyIG49ZS5faWQrInRpY2siLGk9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGUudGlja3M/ci52YWxzOltdLFcpO2kuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgidGlja3MiLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLmNhbGwodS5zdHJva2UsZS50aWNrY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGYuY3Jpc3BSb3VuZCh0LGUudGlja3dpZHRoLDEpKyJweCIpLmF0dHIoImQiLHIucGF0aCksaS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbil9LEEuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIpe3I9cnx8e307dmFyIG49ZS5faWQrImdyaWQiLGk9ci52YWxzLGE9ci5jb3VudGVyQXhpcztpZighMT09PWUuc2hvd2dyaWQpaT1bXTtlbHNlIGlmKGEmJkEuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxhKSlmb3IodmFyIG89ImFycmF5Ij09PWUudGlja21vZGUscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLng7aWYobz8hbDpNYXRoLmFicyhsKTxlLmR0aWNrLzEwMCl7aWYoaT1pLnNsaWNlKDAscykuY29uY2F0KGkuc2xpY2UocysxKSksIW8pYnJlYWs7cy0tfX12YXIgYz1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoaSxXKTtjLmV4aXQoKS5yZW1vdmUoKSxjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLGUuX2d3PWYuY3Jpc3BSb3VuZCh0LGUuZ3JpZHdpZHRoLDEpLGMuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pLmF0dHIoImQiLHIucGF0aCkuY2FsbCh1LnN0cm9rZSxlLmdyaWRjb2xvcnx8IiNkZGQiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLl9ndysicHgiKSwiZnVuY3Rpb24iPT10eXBlb2Ygci5wYXRoJiZjLmF0dHIoImQiLHIucGF0aCl9LEEuZHJhd1plcm9MaW5lPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHI7dmFyIG49ZS5faWQrInpsIixpPUEuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxyLmNvdW50ZXJBeGlzKSxhPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShpP1t7eDowLGlkOmUuX2lkfV06W10pO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgiemwiLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLmVhY2goZnVuY3Rpb24oKXtyLmxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gUy5pZFNvcnQodC5pZCxlLmlkKX0pfSksYS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKS5jYWxsKHUuc3Ryb2tlLGUuemVyb2xpbmVjb2xvcnx8dS5kZWZhdWx0TGluZSkuc3R5bGUoInN0cm9rZS13aWR0aCIsZi5jcmlzcFJvdW5kKHQsZS56ZXJvbGluZXdpZHRoLGUuX2d3fHwxKSsicHgiKX0sQS5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBhPWUuX2lkLG89YS5jaGFyQXQoMCksYz1yLmNsc3x8YSsidGljayIsdT1yLnZhbHMsaD1yLmxhYmVsRm5zLHA9ci5zZWNvbmRhcnk/MDplLnRpY2thbmdsZSxkPShlLl90aWNrQW5nbGVzfHx7fSlbY10sZz1yLmxheWVyLnNlbGVjdEFsbCgiZy4iK2MpLmRhdGEoZS5zaG93dGlja2xhYmVscz91OltdLFcpLHY9W107ZnVuY3Rpb24gbSh0LGUpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxvPWEuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIikscz1oLmFuY2hvckZuKHQsZSksYz1yLnRyYW5zRm4uY2FsbChhLm5vZGUoKSx0KSsoaShlKSYmMCE9K2U/IiByb3RhdGUoIitlKyIsIitoLnhGbih0KSsiLCIrKGgueUZuKHQpLXQuZm9udFNpemUvMikrIikiOiIiKSx1PWwubGluZUNvdW50KGEpLHA9VCp0LmZvbnRTaXplLGQ9aC5oZWlnaHRGbih0LGkoZSk/K2U6MCwodS0xKSpwKTtpZihkJiYoYys9IiB0cmFuc2xhdGUoMCwgIitkKyIpIiksby5lbXB0eSgpKWEuc2VsZWN0KCJ0ZXh0IikuYXR0cih7dHJhbnNmb3JtOmMsInRleHQtYW5jaG9yIjpzfSk7ZWxzZXt2YXIgZz1mLmJCb3goby5ub2RlKCkpLndpZHRoKntlbmQ6LS41LHN0YXJ0Oi41fVtzXTtvLmF0dHIoInRyYW5zZm9ybSIsYysoZz8idHJhbnNsYXRlKCIrZysiLDApIjoiIikpfX0pfWcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGMsMSkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9dC5fcHJvbWlzZXMubGVuZ3RoO3IuY2FsbChsLnBvc2l0aW9uVGV4dCxoLnhGbihlKSxoLnlGbihlKSkuY2FsbChmLmZvbnQsZS5mb250LGUuZm9udFNpemUsZS5mb250Q29sb3IpLnRleHQoZS50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLHQuX3Byb21pc2VzW2ldP3YucHVzaCh0Ll9wcm9taXNlcy5wb3AoKS50aGVuKGZ1bmN0aW9uKCl7bShyLHApfSkpOm0ocixwKX0pLGcuZXhpdCgpLnJlbW92ZSgpLHIucmVwb3NpdGlvbk9uVXBkYXRlJiZnLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IikuY2FsbChsLnBvc2l0aW9uVGV4dCxoLnhGbih0KSxoLnlGbih0KSl9KSxtKGcsZHx8cCksZS5fc2VsZWN0aW9ucyYmKGUuX3NlbGVjdGlvbnNbY109Zyk7dmFyIHk9cy5zeW5jT3JBc3luYyhbZnVuY3Rpb24oKXtyZXR1cm4gdi5sZW5ndGgmJlByb21pc2UuYWxsKHYpfSxmdW5jdGlvbigpe20oZyxwKTt2YXIgdD1udWxsO2lmKHUubGVuZ3RoJiYieCI9PT1vJiYhaShwKSYmKCJsb2ciIT09ZS50eXBlfHwiRCIhPT1TdHJpbmcoZS5kdGljaykuY2hhckF0KDApKSl7dD0wO3ZhciBuLGE9MCxsPVtdO2lmKGcuZWFjaChmdW5jdGlvbih0KXthPU1hdGgubWF4KGEsdC5mb250U2l6ZSk7dmFyIHI9ZS5sMnAodC54KSxuPSQodGhpcyksaT1mLmJCb3gobi5ub2RlKCkpO2wucHVzaCh7dG9wOjAsYm90dG9tOjEwLGhlaWdodDoxMCxsZWZ0OnItaS53aWR0aC8yLHJpZ2h0OnIraS53aWR0aC8yKzIsd2lkdGg6aS53aWR0aCsyfSl9KSwiYm91bmRhcmllcyIhPT1lLnRpY2tzb24mJiFlLnNob3dkaXZpZGVyc3x8ci5zZWNvbmRhcnkpe3ZhciBoPXUubGVuZ3RoLGQ9TWF0aC5hYnMoKHVbaC0xXS54LXVbMF0ueCkqZS5fbSkvKGgtMSk8Mi41KmF8fCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZTtmb3Iobj0wO248bC5sZW5ndGgtMTtuKyspaWYocy5iQm94SW50ZXJzZWN0KGxbbl0sbFtuKzFdKSl7dD1kPzkwOjMwO2JyZWFrfX1lbHNle3ZhciB2PTI7Zm9yKGUudGlja3MmJih2Kz1lLnRpY2t3aWR0aC8yKSxuPTA7bjxsLmxlbmd0aDtuKyspe3ZhciB5PXVbbl0ueGJuZCx4PWxbbl07aWYobnVsbCE9PXlbMF0mJngubGVmdC1lLmwycCh5WzBdKTx2fHxudWxsIT09eVsxXSYmZS5sMnAoeVsxXSkteC5yaWdodDx2KXt0PTkwO2JyZWFrfX19dCYmbShnLHQpfWUuX3RpY2tBbmdsZXMmJihlLl90aWNrQW5nbGVzW2NdPW51bGw9PT10P2kocCk/cDowOnQpfV0pO3JldHVybiB5JiZ5LnRoZW4mJnQuX3Byb21pc2VzLnB1c2goeSkseX0sQS5zaG91bGRTaG93WmVyb0xpbmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO3JldHVybiBuWzBdKm5bMV08PTAmJmUuemVyb2xpbmUmJigibGluZWFyIj09PWUudHlwZXx8Ii0iPT09ZS50eXBlKSYmZS5fZ3JpZFZhbHMubGVuZ3RoJiYoWihlLDApfHwhZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5fbWFpbkF4aXM7aWYoIWkpcmV0dXJuO3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1lLl9pZC5jaGFyQXQoMCkscz1BLmNvdW50ZXJMZXR0ZXIoZS5faWQpLGw9ZS5fb2Zmc2V0KyhNYXRoLmFicyhuWzBdKTxNYXRoLmFicyhuWzFdKT09KCJ4Ij09PW8pPzA6ZS5fbGVuZ3RoKTtmdW5jdGlvbiBjKHQpe2lmKCF0LnNob3dsaW5lfHwhdC5saW5ld2lkdGgpcmV0dXJuITE7dmFyIHI9TWF0aC5tYXgoKHQubGluZXdpZHRoK2UuemVyb2xpbmV3aWR0aCkvMiwxKTtmdW5jdGlvbiBuKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmTWF0aC5hYnModC1sKTxyfWlmKG4odC5fbWFpbkxpbmVQb3NpdGlvbil8fG4odC5fbWFpbk1pcnJvclBvc2l0aW9uKSlyZXR1cm4hMDt2YXIgaT10Ll9saW5lcG9zaXRpb25zfHx7fTtmb3IodmFyIGEgaW4gaSlpZihuKGlbYV1bMF0pfHxuKGlbYV1bMV0pKXJldHVybiEwfXZhciB1PWEuX3Bsb3RzW3IuX21haW5TdWJwbG90XTtpZighKHUubWFpbnBsb3RpbmZvfHx1KS5vdmVybGF5cy5sZW5ndGgpcmV0dXJuIGMocik7Zm9yKHZhciBmPUEubGlzdCh0LHMpLGg9MDtoPGYubGVuZ3RoO2grKyl7dmFyIHA9ZltoXTtpZihwLl9tYWluQXhpcz09PWkmJmMocCkpcmV0dXJuITB9fSh0LGUscixuKXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbERhdGEsbj1lLl9tYWluU3VicGxvdCxpPWUuX2lkLmNoYXJBdCgwKSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYoITA9PT1zLnZpc2libGUmJnMueGF4aXMrcy55YXhpcz09PW4pe2lmKChvLnRyYWNlSXMocywiYmFyIil8fCJ3YXRlcmZhbGwiPT09cy50eXBlKSYmcy5vcmllbnRhdGlvbj09PXt4OiJoIix5OiJ2In1baV0pcmV0dXJuITA7aWYocy5maWxsJiZzLmZpbGwuY2hhckF0KHMuZmlsbC5sZW5ndGgtMSk9PT1pKXJldHVybiEwfX1yZXR1cm4hMX0odCxlKSl9LEEuY2xpcEVuZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIFoodCxlLngpfSl9LEEuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BLmxpc3QodCwiIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uYXV0b21hcmdpbiYmYS5hbGxvd0F1dG9NYXJnaW4odCxKKG4pKSxvLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShuKSYmYS5hbGxvd0F1dG9NYXJnaW4odCxLKG4pKX19LEEuc3dhcD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1bXSxvPXQuX2Z1bGxEYXRhW2Vbcl1dLnhheGlzLHM9dC5fZnVsbERhdGFbZVtyXV0ueWF4aXM7aWYobyYmcyl7Zm9yKG49MDtuPGkubGVuZ3RoO24rKyktMT09PWlbbl0ueC5pbmRleE9mKG8pJiYtMT09PWlbbl0ueS5pbmRleE9mKHMpfHxhLnB1c2gobik7aWYoYS5sZW5ndGgpe3ZhciBsLGM9aVthWzBdXTtpZihhLmxlbmd0aD4xKWZvcihuPTE7bjxhLmxlbmd0aDtuKyspbD1pW2Fbbl1dLFEoYy54LGwueCksUShjLnksbC55KTtRKGMueCxbb10pLFEoYy55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfSh0LGUpLG49MDtuPHIubGVuZ3RoO24rKyl0dCh0LHJbbl0ueCxyW25dLnkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NjY1LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NzIsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzI0LCIuLi8uLi9wbG90cy9wbG90cyI6ODEwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2F1dG9yYW5nZSI6NzQ3LCIuL2F4aXNfYXV0b3R5cGUiOjc0OSwiLi9heGlzX2lkcyI6NzUxLCIuL2NsZWFuX3RpY2tzIjo3NTMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MCwiLi9zZXRfY29udmVydCI6NzY2LGQzOjE1NCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDc0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIShyPXJ8fHt9KS5ub011bHRpQ2F0ZWdvcnkmJihvPXQsaS5pc0FycmF5T3JUeXBlZEFycmF5KG9bMF0pJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkob1sxXSkpPyJtdWx0aWNhdGVnb3J5IjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLGE9MCxvPTAscz17fSxsPTA7bDx0Lmxlbmd0aDtsKz1yKXt2YXIgYz10W01hdGgucm91bmQobCldLHU9U3RyaW5nKGMpO3NbdV18fChzW3VdPTEsaS5pc0RhdGVUaW1lKGMsZSkmJihhKz0xKSxuKGMpJiYobys9MSkpfXJldHVybiBhPjIqb30odCxlKT8iZGF0ZSI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU1hdGgubWF4KDEsKHQubGVuZ3RoLTEpLzFlMykscj0wLG49MCxvPXt9LHM9MDtzPHQubGVuZ3RoO3MrPWUpe3ZhciBsPXRbTWF0aC5yb3VuZChzKV0sYz1TdHJpbmcobCk7b1tjXXx8KG9bY109MSwiYm9vbGVhbiI9PXR5cGVvZiBsP24rKzppLmNsZWFuTnVtYmVyKGwpIT09YT9yKys6InN0cmluZyI9PXR5cGVvZiBsJiZuKyspfXJldHVybiBuPjIqcn0odCk/ImNhdGVnb3J5IjpmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZihuKHRbZV0pKXJldHVybiEwO3JldHVybiExfSh0KT8ibGluZWFyIjoiLSI7dmFyIG99fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsImZhc3QtaXNudW1lcmljIjoyMjF9XSw3NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIikscz10KCIuL3RpY2tfbWFya19kZWZhdWx0cyIpLGw9dCgiLi90aWNrX2xhYmVsX2RlZmF1bHRzIiksYz10KCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksdT10KCIuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLGY9dCgiLi9zZXRfY29udmVydCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoLHApe3ZhciBkPWgubGV0dGVyLGc9aC5mb250fHx7fSx2PWguc3Bsb21TdGFzaHx8e30sbT1yKCJ2aXNpYmxlIiwhaC5jaGVhdGVyb25seSkseT1lLnR5cGU7ImRhdGUiPT09eSYmbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIsaC5jYWxlbmRhcik7aWYoZihlLHApLCFyKCJhdXRvcmFuZ2UiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSl8fCJsaW5lYXIiIT09eSYmIi0iIT09eXx8cigicmFuZ2Vtb2RlIikscigicmFuZ2UiKSxlLmNsZWFuUmFuZ2UoKSxjKHQsZSxyLGgpLCJjYXRlZ29yeSI9PT15fHxoLm5vSG92ZXJ8fHIoImhvdmVyZm9ybWF0IiksIW0pcmV0dXJuIGU7dmFyIHg9cigiY29sb3IiKSxiPXghPT1hLmNvbG9yLmRmbHQ/eDpnLmNvbG9yO3IoInRpdGxlLnRleHQiLHYubGFiZWx8fHAuX2RmbHRUaXRsZVtkXSksaS5jb2VyY2VGb250KHIsInRpdGxlLmZvbnQiLHtmYW1pbHk6Zy5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipnLnNpemUpLGNvbG9yOmJ9KSxvKHQsZSxyLHkpLGwodCxlLHIseSxoKSxzKHQsZSxyLGgpLHUodCxlLHIse2RmbHRDb2xvcjp4LGJnQ29sb3I6aC5iZ0NvbG9yLHNob3dHcmlkOmguc2hvd0dyaWQsYXR0cmlidXRlczphfSksKGUuc2hvd2xpbmV8fGUudGlja3MpJiZyKCJtaXJyb3IiKSxoLmF1dG9tYXJnaW4mJnIoImF1dG9tYXJnaW4iKTt2YXIgXyx3PSJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZTtoLm5vVGlja3Nvbnx8ImNhdGVnb3J5IiE9PWUudHlwZSYmIXd8fCFlLnRpY2tzJiYhZS5zaG93Z3JpZHx8KHcmJihfPSJib3VuZGFyaWVzIikscigidGlja3NvbiIsXykpO3cmJihyKCJzaG93ZGl2aWRlcnMiKSYmKHIoImRpdmlkZXJjb2xvciIpLHIoImRpdmlkZXJ3aWR0aCIpKSk7cmV0dXJuIGV9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo3NTIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MCwiLi9saW5lX2dyaWRfZGVmYXVsdHMiOjc2MiwiLi9zZXRfY29udmVydCI6NzY2LCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc2NywiLi90aWNrX21hcmtfZGVmYXVsdHMiOjc2OCwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3Njl9XSw3NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vY29uc3RhbnRzIik7ci5pZDJuYW1lPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5tYXRjaChpLkFYX0lEX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cigxKTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksdC5jaGFyQXQoMCkrImF4aXMiK2V9fSxyLm5hbWUyaWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaChpLkFYX05BTUVfUEFUVEVSTikpe3ZhciBlPXQuc3Vic3RyKDUpO3JldHVybiIxIj09PWUmJihlPSIiKSx0LmNoYXJBdCgwKStlfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQsZSl7aWYodC5tYXRjaChpLkFYX0lEX1BBVFRFUk4pJiYoIWV8fHQuY2hhckF0KDApPT09ZSkpe3ZhciByPXQuc3Vic3RyKDEpLnJlcGxhY2UoL14wKy8sIiIpO3JldHVybiIxIj09PXImJihyPSIiKSx0LmNoYXJBdCgwKStyfX0sci5saXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Ll9mdWxsTGF5b3V0O2lmKCFpKXJldHVybltdO3ZhciBhLG89ci5saXN0SWRzKHQsZSkscz1uZXcgQXJyYXkoby5sZW5ndGgpO2ZvcihhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV07c1thXT1pW2wuY2hhckF0KDApKyJheGlzIitsLnN1YnN0cigxKV19aWYoIW4pe3ZhciBjPWkuX3N1YnBsb3RzLmdsM2R8fFtdO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWlbY1thXV07ZT9zLnB1c2godVtlKyJheGlzIl0pOnMucHVzaCh1LnhheGlzLHUueWF4aXMsdS56YXhpcyl9fXJldHVybiBzfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKCFyKXJldHVybltdO3ZhciBuPXIuX3N1YnBsb3RzO3JldHVybiBlP25bZSsiYXhpcyJdOm4ueGF4aXMuY29uY2F0KG4ueWF4aXMpfSxyLmdldEZyb21JZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtyZXR1cm4ieCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLywiIik6InkiPT09biYmKGU9ZS5yZXBsYWNlKC94WzAtOV0qLywiIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1udWxsO2lmKG4udHJhY2VJcyhlLCJnbDNkIikpe3ZhciBzPWUuc2NlbmU7InNjZW5lIj09PXMuc3Vic3RyKDAsNSkmJihvPWFbc11baSsiYXhpcyJdKX1lbHNlIG89ci5nZXRGcm9tSWQodCxlW2krImF4aXMiXXx8aSk7cmV0dXJuIG99LHIuaWRTb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jaGFyQXQoMCksbj1lLmNoYXJBdCgwKTtyZXR1cm4gciE9PW4/cj5uPzE6LTE6Kyh0LnN1YnN0cigxKXx8MSktKyhlLnN1YnN0cigxKXx8MSl9LHIuZ2V0QXhpc0dyb3VwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2F4aXNNYXRjaEdyb3VwcyxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKHJbbl1bZV0pcmV0dXJuImciK259cmV0dXJuIGV9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vY29uc3RhbnRzIjo3NTR9XSw3NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJjYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBpLGE9dC5jYXRlZ29yeWFycmF5LG89QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MDtvJiYoaT0iYXJyYXkiKTt2YXIgcyxsPXIoImNhdGVnb3J5b3JkZXIiLGkpOyJhcnJheSI9PT1sJiYocz1yKCJjYXRlZ29yeWFycmF5IikpLG98fCJhcnJheSIhPT1sfHwobD1lLmNhdGVnb3J5b3JkZXI9InRyYWNlIiksInRyYWNlIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9W106ImFycmF5Ij09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9cy5zbGljZSgpOihzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9ZS5kYXRhQXR0cnx8dC5faWQuY2hhckF0KDApLG89e307aWYoZS5heERhdGEpcj1lLmF4RGF0YTtlbHNlIGZvcihyPVtdLG49MDtuPGUuZGF0YS5sZW5ndGg7bisrKXt2YXIgcz1lLmRhdGFbbl07c1thKyJheGlzIl09PT10Ll9pZCYmci5wdXNoKHMpfWZvcihuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBsPXJbbl1bYV07Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGM9bFtpXTtudWxsIT1jJiYob1tjXT0xKX19cmV0dXJuIE9iamVjdC5rZXlzKG8pfShlLG4pLnNvcnQoKSwiY2F0ZWdvcnkgYXNjZW5kaW5nIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9czoiY2F0ZWdvcnkgZGVzY2VuZGluZyI9PT1sJiYoZS5faW5pdGlhbENhdGVnb3JpZXM9cy5yZXZlcnNlKCkpKX19fSx7fV0sNzUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVEQVk7ci5kdGljaz1mdW5jdGlvbih0LGUpe3ZhciByPSJsb2ciPT09ZSxpPSJkYXRlIj09PWUsbz0iY2F0ZWdvcnkiPT09ZSxzPWk/YToxO2lmKCF0KXJldHVybiBzO2lmKG4odCkpcmV0dXJuKHQ9TnVtYmVyKHQpKTw9MD9zOm8/TWF0aC5tYXgoMSxNYXRoLnJvdW5kKHQpKTppP01hdGgubWF4KC4xLHQpOnQ7aWYoInN0cmluZyIhPXR5cGVvZiB0fHwhaSYmIXIpcmV0dXJuIHM7dmFyIGw9dC5jaGFyQXQoMCksYz10LnN1YnN0cigxKTtyZXR1cm4oYz1uKGMpP051bWJlcihjKTowKTw9MHx8IShpJiYiTSI9PT1sJiZjPT09TWF0aC5yb3VuZChjKXx8ciYmIkwiPT09bHx8ciYmIkQiPT09bCYmKDE9PT1jfHwyPT09YykpP3M6dH0sci50aWNrMD1mdW5jdGlvbih0LGUscixhKXtyZXR1cm4iZGF0ZSI9PT1lP2kuY2xlYW5EYXRlKHQsaS5kYXRlVGljazAocikpOiJEMSIhPT1hJiYiRDIiIT09YT9uKHQpP051bWJlcih0KTowOnZvaWQgMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDc1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvcmVnZXgiKS5jb3VudGVyO2UuZXhwb3J0cz17aWRSZWdleDp7eDpuKCJ4IikseTpuKCJ5Iil9LGF0dHJSZWdleDpuKCJbeHldYXhpcyIpLHhBeGlzTWF0Y2g6bigieGF4aXMiKSx5QXhpc01hdGNoOm4oInlheGlzIiksQVhfSURfUEFUVEVSTjovXlt4eXpdWzAtOV0qJC8sQVhfTkFNRV9QQVRURVJOOi9eW3h5el1heGlzWzAtOV0qJC8sU1VCUExPVF9QQVRURVJOOi9eeChbMC05XSopeShbMC05XSopJC8sTUlORFJBRzo4LE1JTlNFTEVDVDoxMixNSU5aT09NOjIwLERSQUdHRVJTSVpFOjIwLEJFTkRQWDoxLjUsUkVEUkFXREVMQVk6NTAsU0VMRUNUREVMQVk6MTAwLFNFTEVDVElEOiItc2VsZWN0IixERkxUUkFOR0VYOlstMSw2XSxERkxUUkFOR0VZOlstMSw0XSx0cmFjZUxheWVyQ2xhc3NlczpbImhlYXRtYXBsYXllciIsImNvbnRvdXJjYXJwZXRsYXllciIsImNvbnRvdXJsYXllciIsIndhdGVyZmFsbGxheWVyIiwiYmFybGF5ZXIiLCJjYXJwZXRsYXllciIsInZpb2xpbmxheWVyIiwiYm94bGF5ZXIiLCJvaGxjbGF5ZXIiLCJzY2F0dGVyY2FycGV0bGF5ZXIiLCJzY2F0dGVybGF5ZXIiXSxsYXllclZhbHVlMmxheWVyQ2xhc3M6eyJhYm92ZSB0cmFjZXMiOiJhYm92ZSIsImJlbG93IHRyYWNlcyI6ImJlbG93In19fSx7Ii4uLy4uL2xpYi9yZWdleCI6NzE2fV0sNzU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9heGlzX2lkcyIpLmlkMm5hbWUsYT10KCIuL3NjYWxlX3pvb20iKSxvPXQoIi4vYXV0b3JhbmdlIikubWFrZVBhZEZuLHM9dCgiLi9hdXRvcmFuZ2UiKS5jb25jYXRFeHRyZW1lcyxsPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5BTE1PU1RfRVFVQUwsYz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtmdW5jdGlvbiB1KHQsZSxyLG4sYSl7dmFyIG8scyxsLGMsdT0icmFuZ2UiIT09YSxmPW5baShlKV0udHlwZSxoPVtdO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspaWYoKGw9cltzXSkhPT1lJiYoYz1uW2kobCldKS50eXBlPT09ZilpZihjLmZpeGVkcmFuZ2Upe2lmKHUmJmMuYW5jaG9yKXtuW2koYy5hbmNob3IpXS5maXhlZHJhbmdlJiZoLnB1c2gobCl9fWVsc2UgaC5wdXNoKGwpO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaWYodFtvXVtlXSl7dmFyIHA9dFtvXSxkPVtdO2ZvcihzPTA7czxoLmxlbmd0aDtzKyspcFtsPWhbc11dfHxkLnB1c2gobCk7cmV0dXJue2xpbmthYmxlQXhlczpkLHRoaXNHcm91cDpwfX1yZXR1cm57bGlua2FibGVBeGVzOmgsdGhpc0dyb3VwOm51bGx9fWZ1bmN0aW9uIGYodCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjO251bGw9PT1lPygoZT17fSlbcl09MSxjPXQubGVuZ3RoLHQucHVzaChlKSk6Yz10LmluZGV4T2YoZSk7dmFyIHU9T2JqZWN0LmtleXMoZSk7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylpZihzPXRbYV0sYSE9PWMmJnNbbl0pe3ZhciBmPXNbbl07Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzW2w9dVtvXV09ZippKmVbbF07cmV0dXJuIHZvaWQgdC5zcGxpY2UoYywxKX1pZigxIT09aSlmb3Iobz0wO288dS5sZW5ndGg7bysrKWVbdVtvXV0qPWk7ZVtuXT0xfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj10Ll9pbnB1dERvbWFpbixuPWNbdC5jb25zdHJhaW50b3dhcmRdLGk9clswXSsoclsxXS1yWzBdKSpuO3QuZG9tYWluPXQuX2lucHV0LmRvbWFpbj1baSsoclswXS1pKS9lLGkrKHJbMV0taSkvZV0sdC5zZXRTY2FsZSgpfXIuaGFuZGxlQ29uc3RyYWludERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG8scyxsLGMsaD1hLl9heGlzQ29uc3RyYWludEdyb3VwcyxwPWEuX2F4aXNNYXRjaEdyb3VwcyxkPWUuX2lkLGc9ZC5jaGFyQXQoMCksdj0oKGEuX3NwbG9tQXhlc3x8e30pW2ddfHx7fSlbZF18fHt9LG09ZS5faWQseT1tLmNoYXJBdCgwKSx4PXIoImNvbnN0cmFpbiIpO2lmKG4uY29lcmNlKHQsZSx7Y29uc3RyYWludG93YXJkOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6IngiPT09eT9bImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdOlsiYm90dG9tIiwibWlkZGxlIiwidG9wIl0sZGZsdDoieCI9PT15PyJjZW50ZXIiOiJtaWRkbGUifX0sImNvbnN0cmFpbnRvd2FyZCIpLCF0Lm1hdGNoZXMmJiF2Lm1hdGNoZXN8fGUuZml4ZWRyYW5nZXx8KHM9dShwLG0saSxhKSxvPW4uY29lcmNlKHQsZSx7bWF0Y2hlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMubGlua2FibGVBeGVzfHxbXSxkZmx0OnYubWF0Y2hlc319LCJtYXRjaGVzIikpLG98fCF0LnNjYWxlYW5jaG9yfHxlLmZpeGVkcmFuZ2UmJiJkb21haW4iIT09eHx8KGM9dShoLG0saSxhLHgpLGw9bi5jb2VyY2UodCxlLHtzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmMubGlua2FibGVBeGVzfHxbXX19LCJzY2FsZWFuY2hvciIpKSxvPyhkZWxldGUgZS5jb25zdHJhaW4sZihwLHMudGhpc0dyb3VwLG0sbywxKSk6LTEhPT1pLmluZGV4T2YodC5tYXRjaGVzKSYmbi53YXJuKCJpZ25vcmVkICIrZS5fbmFtZSsnLm1hdGNoZXM6ICInK3QubWF0Y2hlcysnIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciBiZWNhdXNlIHRoZSB0YXJnZXQgYXhpcyBoYXMgZml4ZWQgcmFuZ2UuJyksbCl7dmFyIGI9cigic2NhbGVyYXRpbyIpO2J8fChiPWUuc2NhbGVyYXRpbz0xKSxmKGgsYy50aGlzR3JvdXAsbSxsLGIpfWVsc2UtMSE9PWkuaW5kZXhPZih0LnNjYWxlYW5jaG9yKSYmbi53YXJuKCJpZ25vcmVkICIrZS5fbmFtZSsnLnNjYWxlYW5jaG9yOiAiJyt0LnNjYWxlYW5jaG9yKyciIHRvIGF2b2lkIGVpdGhlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBwb3NzaWJseSBpbmNvbnNpc3RlbnQgc2NhbGVyYXRpb3MsIG9yIGJlY2F1c2UgdGhlIHRhcmdldCBheGlzIGhhcyBmaXhlZCByYW5nZSBvciB0aGlzIGF4aXMgZGVjbGFyZXMgYSAqbWF0Y2hlcyogY29uc3RyYWludC4nKX0sci5lbmZvcmNlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixjLHUsZixwLGQ9dC5fZnVsbExheW91dCxnPWQuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoZT0wO2U8Zy5sZW5ndGg7ZSsrKXt2YXIgdj1nW2VdLG09T2JqZWN0LmtleXModikseT0xLzAseD0wLGI9MS8wLF89e30sdz17fSxrPSExO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspd1tuPW1bcl1dPWM9ZFtpKG4pXSxjLl9pbnB1dERvbWFpbj9jLmRvbWFpbj1jLl9pbnB1dERvbWFpbi5zbGljZSgpOmMuX2lucHV0RG9tYWluPWMuZG9tYWluLnNsaWNlKCksYy5faW5wdXRSYW5nZXx8KGMuX2lucHV0UmFuZ2U9Yy5yYW5nZS5zbGljZSgpKSxjLnNldFNjYWxlKCksX1tuXT11PU1hdGguYWJzKGMuX20pL3Zbbl0seT1NYXRoLm1pbih5LHUpLCJkb21haW4iIT09Yy5jb25zdHJhaW4mJmMuX2NvbnN0cmFpbnRTaHJpbmthYmxlfHwoYj1NYXRoLm1pbihiLHUpKSxkZWxldGUgYy5fY29uc3RyYWludFNocmlua2FibGUseD1NYXRoLm1heCh4LHUpLCJkb21haW4iPT09Yy5jb25zdHJhaW4mJihrPSEwKTtpZighKHk+bCp4KXx8aylmb3Iocj0wO3I8bS5sZW5ndGg7cisrKWlmKHU9X1tuPW1bcl1dLGY9KGM9d1tuXSkuY29uc3RyYWluLHUhPT1ifHwiZG9tYWluIj09PWYpaWYocD11L2IsInJhbmdlIj09PWYpYShjLHApO2Vsc2V7dmFyIFQ9Yy5faW5wdXREb21haW4sQT0oYy5kb21haW5bMV0tYy5kb21haW5bMF0pLyhUWzFdLVRbMF0pLE09KGMucjJsKGMucmFuZ2VbMV0pLWMucjJsKGMucmFuZ2VbMF0pKS8oYy5yMmwoYy5faW5wdXRSYW5nZVsxXSktYy5yMmwoYy5faW5wdXRSYW5nZVswXSkpO2lmKChwLz1BKSpNPDEpe2MuZG9tYWluPWMuX2lucHV0LmRvbWFpbj1ULnNsaWNlKCksYShjLHApO2NvbnRpbnVlfWlmKE08MSYmKGMucmFuZ2U9Yy5faW5wdXQucmFuZ2U9Yy5faW5wdXRSYW5nZS5zbGljZSgpLHAqPU0pLGMuYXV0b3JhbmdlKXt2YXIgUz1jLnIybChjLnJhbmdlWzBdKSxFPWMucjJsKGMucmFuZ2VbMV0pLEM9KFMrRSkvMixMPUMsej1DLE89TWF0aC5hYnMoRS1DKSxJPUMtTypwKjEuMDAwMSxEPUMrTypwKjEuMDAwMSxQPW8oYyk7aChjLHApO3ZhciBSLEYsQj1NYXRoLmFicyhjLl9tKSxOPXModCxjKSxqPU4ubWluLFY9Ti5tYXg7Zm9yKEY9MDtGPGoubGVuZ3RoO0YrKykoUj1qW0ZdLnZhbC1QKGpbRl0pL0IpPkkmJlI8TCYmKEw9Uik7Zm9yKEY9MDtGPFYubGVuZ3RoO0YrKykoUj1WW0ZdLnZhbCtQKFZbRl0pL0IpPEQmJlI+eiYmKHo9Uik7cC89KHotTCkvKDIqTyksTD1jLmwycihMKSx6PWMubDJyKHopLGMucmFuZ2U9Yy5faW5wdXQucmFuZ2U9UzxFP1tMLHpdOlt6LExdfWgoYyxwKX19fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSl7aWYoZS5faW5wdXREb21haW4pe2Zvcih2YXIgcj0hMSxuPWUuX2lkLGk9dC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsYT0wO2E8aS5sZW5ndGg7YSsrKWlmKGlbYV1bbl0pe3I9ITA7YnJlYWt9ciYmImRvbWFpbiI9PT1lLmNvbnN0cmFpbnx8KGUuX2lucHV0LmRvbWFpbj1lLmRvbWFpbj1lLl9pbnB1dERvbWFpbixkZWxldGUgZS5faW5wdXREb21haW4pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuL2F1dG9yYW5nZSI6NzQ3LCIuL2F4aXNfaWRzIjo3NTEsIi4vc2NhbGVfem9vbSI6NzY0fV0sNzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaD10KCIuL2F4ZXMiKSxwPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxkPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxnPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX1RMLHY9dCgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksbT10KCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMseT10KCIuLi9wbG90cyIpLHg9dCgiLi9heGlzX2lkcyIpLmdldEZyb21JZCxiPXQoIi4vc2VsZWN0IikucHJlcFNlbGVjdCxfPXQoIi4vc2VsZWN0IikuY2xlYXJTZWxlY3Qsdz10KCIuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2ssaz10KCIuL3NjYWxlX3pvb20iKSxUPXQoIi4vY29uc3RhbnRzIiksQT1ULk1JTkRSQUcsTT1ULk1JTlpPT00sUz0hMDtmdW5jdGlvbiBFKHQsZSxyLG4pe3ZhciBpPXMuZW5zdXJlU2luZ2xlKHQuZHJhZ2xheWVyLGUscixmdW5jdGlvbihlKXtlLmNsYXNzZWQoImRyYWciLCEwKS5zdHlsZSh7ZmlsbDoidHJhbnNwYXJlbnQiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJkYXRhLXN1YnBsb3QiLHQuaWQpfSk7cmV0dXJuIGkuY2FsbChwLG4pLGkubm9kZSgpfWZ1bmN0aW9uIEModCxlLHIsaSxhLG8scyl7dmFyIGw9RSh0LCJyZWN0IixlLHIpO3JldHVybiBuLnNlbGVjdChsKS5jYWxsKHUuc2V0UmVjdCxpLGEsbyxzKSxsfWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVybiIifWZ1bmN0aW9uIHoodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtpZighby5maXhlZHJhbmdlKXt2YXIgcz1vLl9ybFswXSxsPW8uX3JsWzFdLXM7by5yYW5nZT1bby5sMnIocytsKmUpLG8ubDJyKHMrbCpyKV0sbltvLl9uYW1lKyIucmFuZ2VbMF0iXT1vLnJhbmdlWzBdLG5bby5fbmFtZSsiLnJhbmdlWzFdIl09by5yYW5nZVsxXX19aWYoaSYmaS5sZW5ndGgpe3ZhciBjPShlKygxLXIpKS8yO3ooaSxjLDEtYyxuLFtdKX19ZnVuY3Rpb24gTyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZml4ZWRyYW5nZXx8KG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV0pfX1mdW5jdGlvbiBJKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gRCh0LGUscixuLGkpe3JldHVybiB0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLnN0eWxlKHtmaWxsOmU+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcisiLCAiK24rIikiKS5hdHRyKCJkIixpKyJaIil9ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIHQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5zdHlsZSh7ZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MSxvcGFjaXR5OjB9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlKyIsICIrcisiKSIpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uIFIodCxlLHIsbixpLGEpe3QuYXR0cigiZCIsbisiTSIrci5sKyIsIityLnQrInYiK3IuaCsiaCIrci53KyJ2LSIrci5oKyJoLSIrci53KyJaIiksRih0LGUsaSxhKX1mdW5jdGlvbiBGKHQsZSxyLG4pe3J8fCh0LnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsbj4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxlLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSl9ZnVuY3Rpb24gQih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVycyIpLnJlbW92ZSgpfWZ1bmN0aW9uIE4odCl7UyYmdC5kYXRhJiZ0Ll9jb250ZXh0LnNob3dUaXBzJiYocy5ub3RpZmllcihzLl8odCwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXQiKSwibG9uZyIpLFM9ITEpfWZ1bmN0aW9uIGoodCl7cmV0dXJuImxhc3NvIj09PXR8fCJzZWxlY3QiPT09dH1mdW5jdGlvbiBWKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5taW4odC5iLXQudCx0LnItdC5sLE0pLzIpO3JldHVybiJNIisodC5sLTMuNSkrIiwiKyh0LnQtLjUrZSkrImgzdiIrLWUrImgiK2UrInYtM2gtIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQudC0uNStlKSsiaC0zdiIrLWUrImgiKy1lKyJ2LTNoIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQuYisuNS1lKSsiaC0zdiIrZSsiaCIrLWUrInYzaCIrKGUrMykrIlpNIisodC5sLTMuNSkrIiwiKyh0LmIrLjUtZSkrImgzdiIrZSsiaCIrZSsidjNoLSIrKGUrMykrIloifWZ1bmN0aW9uIFUodCxlLHIsbil7Zm9yKHZhciBpLGEsbyxsLGM9ITEsdT17fSxmPXt9LGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIHA9ZVtoXTtmb3IoaSBpbiByKWlmKHBbaV0pe2ZvcihvIGluIHApKCJ4Ij09PW8uY2hhckF0KDApP3I6bilbb118fCh1W29dPWkpO2ZvcihhIGluIG4pcFthXSYmKGM9ITApfWZvcihhIGluIG4paWYocFthXSlmb3IobCBpbiBwKSgieCI9PT1sLmNoYXJBdCgwKT9yOm4pW2xdfHwoZltsXT1hKX1jJiYocy5leHRlbmRGbGF0KHUsZiksZj17fSk7dmFyIGQ9e30sZz1bXTtmb3IobyBpbiB1KXt2YXIgdj14KHQsbyk7Zy5wdXNoKHYpLGRbdi5faWRdPXZ9dmFyIG09e30seT1bXTtmb3IobCBpbiBmKXt2YXIgYj14KHQsbCk7eS5wdXNoKGIpLG1bYi5faWRdPWJ9cmV0dXJue3hhSGFzaDpkLHlhSGFzaDptLHhheGVzOmcseWF4ZXM6eSx4TGlua3M6dSx5TGlua3M6Zixpc1N1YnBsb3RDb25zdHJhaW5lZDpjfX1mdW5jdGlvbiBxKHQsZSl7aWYoYSl7dmFyIHI9dm9pZCAwIT09dC5vbndoZWVsPyJ3aGVlbCI6Im1vdXNld2hlZWwiO3QuX29ud2hlZWwmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLHQuX29ud2hlZWwpLHQuX29ud2hlZWw9ZSx0LmFkZEV2ZW50TGlzdGVuZXIocixlLHtwYXNzaXZlOiExfSl9ZWxzZSB2b2lkIDAhPT10Lm9ud2hlZWw/dC5vbndoZWVsPWU6dm9pZCAwIT09dC5vbm1vdXNld2hlZWwmJih0Lm9ubW91c2V3aGVlbD1lKX1mdW5jdGlvbiBIKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX1lLmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKHQsZSxyLGEsYyxwLFMsRSl7dmFyIEYsRyxZLFcsWCxaLCQsSixLLFEsdHQsZXQscnQsbnQsaXQsYXQsb3Qsc3QsbHQsY3QsdXQsZnQ9dC5fZnVsbExheW91dC5fem9vbWxheWVyLGh0PVMrRT09PSJuc2V3IixwdD0xPT09KFMrRSkubGVuZ3RoO2Z1bmN0aW9uIGR0KCl7aWYoRj1lLnhheGlzLEc9ZS55YXhpcyxLPUYuX2xlbmd0aCxRPUcuX2xlbmd0aCwkPUYuX29mZnNldCxKPUcuX29mZnNldCwoWT17fSlbRi5faWRdPUYsKFc9e30pW0cuX2lkXT1HLFMmJkUpZm9yKHZhciByPWUub3ZlcmxheXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLnhheGlzO1lbaS5faWRdPWk7dmFyIGE9cltuXS55YXhpcztXW2EuX2lkXT1hfVg9SChZKSxaPUgoVykscnQ9TChYLEUpLG50PUwoWixTKSxpdD0hbnQmJiFydCx0dD1VKHQsdC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsWSxXKSxldD1VKHQsdC5fZnVsbExheW91dC5fYXhpc01hdGNoR3JvdXBzLFksVyksYXQ9RXx8dHQuaXNTdWJwbG90Q29uc3RyYWluZWR8fGV0LmlzU3VicGxvdENvbnN0cmFpbmVkLG90PVN8fHR0LmlzU3VicGxvdENvbnN0cmFpbmVkfHxldC5pc1N1YnBsb3RDb25zdHJhaW5lZDt2YXIgbz10Ll9mdWxsTGF5b3V0O3N0PW8uX2hhcygic2NhdHRlcmdsIiksbHQ9by5faGFzKCJzcGxvbSIpLGN0PW8uX2hhcygic3ZnIil9ZHQoKTt2YXIgZ3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PyJuc2V3Ij09PXQ/cj8iIjoicGFuIj09PWU/Im1vdmUiOiJjcm9zc2hhaXIiOnQudG9Mb3dlckNhc2UoKSsiLXJlc2l6ZSI6InBvaW50ZXIifShudCtydCx0Ll9mdWxsTGF5b3V0LmRyYWdtb2RlLGh0KSx2dD1DKGUsUytFKyJkcmFnIixndCxyLGEsYyxwKTtpZihpdCYmIWh0KXJldHVybiB2dC5vbm1vdXNlZG93bj1udWxsLHZ0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHZ0O3ZhciBtdCx5dCx4dCxidCxfdCx3dCxrdCxUdCxBdCxNdCxTdD17ZWxlbWVudDp2dCxnZDp0LHBsb3RpbmZvOmV9O2Z1bmN0aW9uIEV0KCl7U3QucGxvdGluZm8uc2VsZWN0aW9uPSExLF8oZnQpfWZ1bmN0aW9uIEN0KHIsaSl7dmFyIGE9dC5fZnVsbExheW91dC5jbGlja21vZGU7aWYoQih0KSwyIT09cnx8cHR8fGZ1bmN0aW9uKCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlPXQuX2NvbnRleHQuZG91YmxlQ2xpY2sscj1bXTtydCYmKHI9ci5jb25jYXQoWCkpLG50JiYocj1yLmNvbmNhdChaKSksZXQueGF4ZXMmJihyPXIuY29uY2F0KGV0LnhheGVzKSksZXQueWF4ZXMmJihyPXIuY29uY2F0KGV0LnlheGVzKSk7dmFyIG4saSxhLHM9e307aWYoInJlc2V0K2F1dG9zaXplIj09PWUpZm9yKGU9ImF1dG9zaXplIixpPTA7aTxyLmxlbmd0aDtpKyspaWYoKG49cltpXSkuX3JhbmdlSW5pdGlhbCYmKG4ucmFuZ2VbMF0hPT1uLl9yYW5nZUluaXRpYWxbMF18fG4ucmFuZ2VbMV0hPT1uLl9yYW5nZUluaXRpYWxbMV0pfHwhbi5fcmFuZ2VJbml0aWFsJiYhbi5hdXRvcmFuZ2Upe2U9InJlc2V0IjticmVha31pZigiYXV0b3NpemUiPT09ZSlmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChzW24uX25hbWUrIi5hdXRvcmFuZ2UiXT0hMCk7ZWxzZSBpZigicmVzZXQiPT09ZSlmb3IoKHJ0fHx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCkmJihyPXIuY29uY2F0KHR0LnhheGVzKSksbnQmJiF0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHI9ci5jb25jYXQodHQueWF4ZXMpKSx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHJ0P250fHwocj1yLmNvbmNhdChaKSk6cj1yLmNvbmNhdChYKSksaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChuLl9yYW5nZUluaXRpYWw/KGE9bi5fcmFuZ2VJbml0aWFsLHNbbi5fbmFtZSsiLnJhbmdlWzBdIl09YVswXSxzW24uX25hbWUrIi5yYW5nZVsxXSJdPWFbMV0pOnNbbi5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKTt0LmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQscyl9fSgpLGh0KWEuaW5kZXhPZigic2VsZWN0Iik+LTEmJncoaSx0LFgsWixlLmlkLFN0KSxhLmluZGV4T2YoImV2ZW50Iik+LTEmJmYuY2xpY2sodCxpLGUuaWQpO2Vsc2UgaWYoMT09PXImJnB0KXt2YXIgcz1TP0c6RixjPSJzIj09PVN8fCJ3Ij09PUU/MDoxLHU9cy5fbmFtZSsiLnJhbmdlWyIrYysiXSIsaD1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5yYW5nZVtlXSxhPU1hdGguYWJzKGktdC5yYW5nZVsxLWVdKTtyZXR1cm4iZGF0ZSI9PT10LnR5cGU/aToibG9nIj09PXQudHlwZT8ocj1NYXRoLmNlaWwoTWF0aC5tYXgoMCwtTWF0aC5sb2coYSkvTWF0aC5MTjEwKSkrMyxuLmZvcm1hdCgiLiIrcisiZyIpKE1hdGgucG93KDEwLGkpKSk6KHI9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhpKSkvTWF0aC5MTjEwKS1NYXRoLmZsb29yKE1hdGgubG9nKGEpL01hdGguTE4xMCkrNCxuLmZvcm1hdCgiLiIrU3RyaW5nKHIpKyJnIikoaSkpfShzLGMpLHA9ImxlZnQiLGQ9Im1pZGRsZSI7aWYocy5maXhlZHJhbmdlKXJldHVybjtTPyhkPSJuIj09PVM/InRvcCI6ImJvdHRvbSIsInJpZ2h0Ij09PXMuc2lkZSYmKHA9InJpZ2h0IikpOiJlIj09PUUmJihwPSJyaWdodCIpLHQuX2NvbnRleHQuc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXMmJm4uc2VsZWN0KHZ0KS5jYWxsKGwubWFrZUVkaXRhYmxlLHtnZDp0LGltbWVkaWF0ZTohMCxiYWNrZ3JvdW5kOnQuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcix0ZXh0OlN0cmluZyhoKSxmaWxsOnMudGlja2ZvbnQ/cy50aWNrZm9udC5jb2xvcjoiIzQ0NCIsaG9yaXpvbnRhbEFsaWduOnAsdmVydGljYWxBbGlnbjpkfSkub24oImVkaXQiLGZ1bmN0aW9uKGUpe3ZhciByPXMuZDJyKGUpO3ZvaWQgMCE9PXImJm8uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHUscil9KX19ZnVuY3Rpb24gTHQoZSxyKXtpZih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiExO3ZhciBuPU1hdGgubWF4KDAsTWF0aC5taW4oSyxlK210KSksaT1NYXRoLm1heCgwLE1hdGgubWluKFEscit5dCkpLGE9TWF0aC5hYnMobi1tdCksbz1NYXRoLmFicyhpLXl0KTtmdW5jdGlvbiBzKCl7a3Q9IiIseHQucj14dC5sLHh0LnQ9eHQuYixBdC5hdHRyKCJkIiwiTTAsMFoiKX1pZih4dC5sPU1hdGgubWluKG10LG4pLHh0LnI9TWF0aC5tYXgobXQsbikseHQudD1NYXRoLm1pbih5dCxpKSx4dC5iPU1hdGgubWF4KHl0LGkpLHR0LmlzU3VicGxvdENvbnN0cmFpbmVkKWE+TXx8bz5NPyhrdD0ieHkiLGEvSz5vL1E/KG89YSpRL0sseXQ+aT94dC50PXl0LW86eHQuYj15dCtvKTooYT1vKksvUSxtdD5uP3h0Lmw9bXQtYTp4dC5yPW10K2EpLEF0LmF0dHIoImQiLFYoeHQpKSk6cygpO2Vsc2UgaWYoZXQuaXNTdWJwbG90Q29uc3RyYWluZWQpaWYoYT5NfHxvPk0pe2t0PSJ4eSI7dmFyIGw9TWF0aC5taW4oeHQubC9LLChRLXh0LmIpL1EpLGM9TWF0aC5tYXgoeHQuci9LLChRLXh0LnQpL1EpO3h0Lmw9bCpLLHh0LnI9YypLLHh0LmI9KDEtbCkqUSx4dC50PSgxLWMpKlEsQXQuYXR0cigiZCIsVih4dCkpfWVsc2UgcygpO2Vsc2UhbnR8fG88TWF0aC5taW4oTWF0aC5tYXgoLjYqYSxBKSxNKT9hPEF8fCFydD9zKCk6KHh0LnQ9MCx4dC5iPVEsa3Q9IngiLEF0LmF0dHIoImQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIk0iKyh0LmwtLjUpKyIsIisoZS1NLS41KSsiaC0zdiIrKDIqTSsxKSsiaDNaTSIrKHQucisuNSkrIiwiKyhlLU0tLjUpKyJoM3YiKygyKk0rMSkrImgtM1oifSh4dCx5dCkpKTohcnR8fGE8TWF0aC5taW4oLjYqbyxNKT8oeHQubD0wLHh0LnI9SyxrdD0ieSIsQXQuYXR0cigiZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4iTSIrKGUtTS0uNSkrIiwiKyh0LnQtLjUpKyJ2LTNoIisoMipNKzEpKyJ2M1pNIisoZS1NLS41KSsiLCIrKHQuYisuNSkrInYzaCIrKDIqTSsxKSsidi0zWiJ9KHh0LG10KSkpOihrdD0ieHkiLEF0LmF0dHIoImQiLFYoeHQpKSk7eHQudz14dC5yLXh0LmwseHQuaD14dC5iLXh0LnQsa3QmJihNdD0hMCksdC5fZHJhZ2dlZD1NdCxSKFR0LEF0LHh0LF90LHd0LGJ0KSx3dD0hMH1mdW5jdGlvbiB6dCgpe2lmKHV0PXt9LE1hdGgubWluKHh0LmgseHQudyk8MipBKXJldHVybiBCKHQpOyJ4eSIhPT1rdCYmIngiIT09a3R8fCh6KFgseHQubC9LLHh0LnIvSyx1dCx0dC54YXhlcyksRnQoIngiLHV0KSksInh5IiE9PWt0JiYieSIhPT1rdHx8KHooWiwoUS14dC5iKS9RLChRLXh0LnQpL1EsdXQsdHQueWF4ZXMpLEZ0KCJ5Iix1dCkpLEIodCksTnQoKSxOKHQpfVN0LnByZXBGbj1mdW5jdGlvbihlLHIsbil7dmFyIGE9U3QuZHJhZ21vZGUsbz10Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO28hPT1hJiYoU3QuZHJhZ21vZGU9byksZHQoKSxpdHx8KGh0P2Uuc2hpZnRLZXk/InBhbiI9PT1vP289Inpvb20iOmoobyl8fChvPSJwYW4iKTplLmN0cmxLZXkmJihvPSJwYW4iKTpvPSJwYW4iKSxTdC5taW5EcmFnPSJsYXNzbyI9PT1vPzE6dm9pZCAwLGoobyk/KFN0LnhheGVzPVgsU3QueWF4ZXM9WixiKGUscixuLFN0LG8pKTooU3QuY2xpY2tGbj1DdCxqKGEpJiZFdCgpLGl0fHwoInpvb20iPT09bz8oU3QubW92ZUZuPUx0LFN0LmRvbmVGbj16dCxTdC5taW5EcmFnPTEsZnVuY3Rpb24oZSxyLG4pe3ZhciBhPXZ0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO210PXItYS5sZWZ0LHl0PW4tYS50b3AseHQ9e2w6bXQscjptdCx3OjAsdDp5dCxiOnl0LGg6MH0sYnQ9dC5faG1waXhjb3VudD90Ll9obWx1bWNvdW50L3QuX2htcGl4Y291bnQ6aSh0Ll9mdWxsTGF5b3V0LnBsb3RfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksd3Q9ITEsa3Q9Inh5IixNdD0hMSxUdD1EKGZ0LGJ0LCQsSixfdD0iTTAsMEgiK0srIlYiK1ErIkgwVjAiKSxBdD1QKGZ0LCQsSil9KDAscixuKSk6InBhbiI9PT1vJiYoU3QubW92ZUZuPVJ0LFN0LmRvbmVGbj1OdCkpKX0sZC5pbml0KFN0KTt2YXIgT3Q9WzAsMCxLLFFdLEl0PW51bGwsRHQ9VC5SRURSQVdERUxBWSxQdD1lLm1haW5wbG90P3QuX2Z1bGxMYXlvdXQuX3Bsb3RzW2UubWFpbnBsb3RdOmU7ZnVuY3Rpb24gUnQoZSxyKXtpZighdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbil7aWYodC5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMCwiZXciPT09cnR8fCJucyI9PT1udClyZXR1cm4gcnQmJihPKFgsZSksRnQoIngiKSksbnQmJihPKFosciksRnQoInkiKSksanQoW3J0Py1lOjAsbnQ/LXI6MCxLLFFdKSx2b2lkIEJ0KCk7aWYodHQuaXNTdWJwbG90Q29uc3RyYWluZWQmJnJ0JiZudCl7dmFyIG49InciPT09cnQ9PSgibiI9PT1udCk/MTotMSxpPShlL0srbipyL1EpLzI7ZT1pKksscj1uKmkqUX0idyI9PT1ydD9lPWwoWCwwLGUpOiJlIj09PXJ0P2U9bChYLDEsLWUpOnJ0fHwoZT0wKSwibiI9PT1udD9yPWwoWiwxLHIpOiJzIj09PW50P3I9bChaLDAsLXIpOm50fHwocj0wKTt2YXIgYT0idyI9PT1ydD9lOjAsbz0ibiI9PT1udD9yOjA7aWYodHQuaXNTdWJwbG90Q29uc3RyYWluZWQpe3ZhciBzO2lmKCFydCYmMT09PW50Lmxlbmd0aCl7Zm9yKHM9MDtzPFgubGVuZ3RoO3MrKylYW3NdLnJhbmdlPVhbc10uX3Iuc2xpY2UoKSxrKFhbc10sMS1yL1EpO2E9KGU9cipLL1EpLzJ9aWYoIW50JiYxPT09cnQubGVuZ3RoKXtmb3Iocz0wO3M8Wi5sZW5ndGg7cysrKVpbc10ucmFuZ2U9WltzXS5fci5zbGljZSgpLGsoWltzXSwxLWUvSyk7bz0ocj1lKlEvSykvMn19RnQoIngiKSxGdCgieSIpLGp0KFthLG8sSy1lLFEtcl0pLEJ0KCl9ZnVuY3Rpb24gbCh0LGUscil7Zm9yKHZhciBuLGksYT0xLWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lmKCFzLmZpeGVkcmFuZ2Upe249cyxpPXMuX3JsW2FdKyhzLl9ybFtlXS1zLl9ybFthXSkvSShyL3MuX2xlbmd0aCk7dmFyIGw9cy5sMnIoaSk7ITEhPT1sJiZ2b2lkIDAhPT1sJiYocy5yYW5nZVtlXT1sKX19cmV0dXJuIG4uX2xlbmd0aCoobi5fcmxbZV0taSkvKG4uX3JsW2VdLW4uX3JsW2FdKX19ZnVuY3Rpb24gRnQodCxlKXtmb3IodmFyIHI9ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6Wix5Olh9W3RdOmV0W3QrImF4ZXMiXSxuPWV0LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OlgseTpafVt0XTpbXSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1hLl9pZCxzPWV0LnhMaW5rc1tvXXx8ZXQueUxpbmtzW29dLGw9blswXXx8WVtzXXx8V1tzXTtpZihsKXt2YXIgYz1sLnJhbmdlO2U/KGVbYS5fbmFtZSsiLnJhbmdlWzBdIl09Y1swXSxlW2EuX25hbWUrIi5yYW5nZVsxXSJdPWNbMV0pOmEucmFuZ2U9Y319fWZ1bmN0aW9uIEJ0KCl7dmFyIGUscj1bXTtmdW5jdGlvbiBuKHQpe2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5maXhlZHJhbmdlfHxyLnB1c2godFtlXS5faWQpfWZvcihhdCYmKG4oWCksbih0dC54YXhlcyksbihldC54YXhlcykpLG90JiYobihaKSxuKHR0LnlheGVzKSxuKGV0LnlheGVzKSksdXQ9e30sZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdLGE9eCh0LGkpO2guZHJhd09uZSh0LGEse3NraXBUaXRsZTohMH0pLHV0W2EuX25hbWUrIi5yYW5nZVswXSJdPWEucmFuZ2VbMF0sdXRbYS5fbmFtZSsiLnJhbmdlWzFdIl09YS5yYW5nZVsxXX1oLnJlZHJhd0NvbXBvbmVudHModCxyKX1mdW5jdGlvbiBOdCgpe2p0KFswLDAsSyxRXSkscy5zeW5jT3JBc3luYyhbeS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMSxvLmNhbGwoIl9ndWlSZWxheW91dCIsdCx1dCl9XSx0KX1mdW5jdGlvbiBqdChlKXt2YXIgcixuLGksYSxsPXQuX2Z1bGxMYXlvdXQsYz1sLl9wbG90cyxmPWwuX3N1YnBsb3RzLmNhcnRlc2lhbjtpZihsdCYmby5zdWJwbG90c1JlZ2lzdHJ5LnNwbG9tLmRyYWcodCksc3QpZm9yKHI9MDtyPGYubGVuZ3RoO3IrKylpZihpPShuPWNbZltyXV0pLnhheGlzLGE9bi55YXhpcyxuLl9zY2VuZSl7dmFyIGg9cy5zaW1wbGVNYXAoaS5yYW5nZSxpLnIybCkscD1zLnNpbXBsZU1hcChhLnJhbmdlLGEucjJsKTtuLl9zY2VuZS51cGRhdGUoe3JhbmdlOltoWzBdLHBbMF0saFsxXSxwWzFdXX0pfWlmKChsdHx8c3QpJiYodih0KSxtKHQpKSxjdCl7dmFyIGQ9ZVsyXS9GLl9sZW5ndGgsZz1lWzNdL0cuX2xlbmd0aDtmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKXtpPShuPWNbZltyXV0pLnhheGlzLGE9bi55YXhpczt2YXIgeSx4LGIsXyx3PWF0JiYhaS5maXhlZHJhbmdlJiZZW2kuX2lkXSxrPW90JiYhYS5maXhlZHJhbmdlJiZXW2EuX2lkXTtpZih3Pyh5PWQsYj1FP2VbMF06cXQoaSx5KSk6ZXQueGFIYXNoW2kuX2lkXT8oeT1kLGI9ZVswXSppLl9sZW5ndGgvRi5fbGVuZ3RoKTpldC55YUhhc2hbaS5faWRdPyh5PWcsYj0ibnMiPT09bnQ/LWVbMV0qaS5fbGVuZ3RoL0cuX2xlbmd0aDpxdChpLHkse246InRvcCIsczoiYm90dG9tIn1bbnRdKSk6Yj1VdChpLHk9VnQoaSxkLGcpKSxrPyh4PWcsXz1TP2VbMV06cXQoYSx4KSk6ZXQueWFIYXNoW2EuX2lkXT8oeD1nLF89ZVsxXSphLl9sZW5ndGgvRy5fbGVuZ3RoKTpldC54YUhhc2hbYS5faWRdPyh4PWQsXz0iZXciPT09cnQ/LWVbMF0qYS5fbGVuZ3RoL0YuX2xlbmd0aDpxdChhLHgse2U6InJpZ2h0Iix3OiJsZWZ0In1bcnRdKSk6Xz1VdChhLHg9VnQoYSxkLGcpKSx5fHx4KXt5fHwoeT0xKSx4fHwoeD0xKTt2YXIgVD1pLl9vZmZzZXQtYi95LEE9YS5fb2Zmc2V0LV8veDtuLmNsaXBSZWN0LmNhbGwodS5zZXRUcmFuc2xhdGUsYixfKS5jYWxsKHUuc2V0U2NhbGUseSx4KSxuLnBsb3QuY2FsbCh1LnNldFRyYW5zbGF0ZSxULEEpLmNhbGwodS5zZXRTY2FsZSwxL3ksMS94KSx5PT09bi54U2NhbGVGYWN0b3ImJng9PT1uLnlTY2FsZUZhY3Rvcnx8KHUuc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLHkseCksdS5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQseSx4KSksdS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzKG4uY2xpcE9uQXhpc0ZhbHNlVHJhY2VzLG4pLG4ueFNjYWxlRmFjdG9yPXksbi55U2NhbGVGYWN0b3I9eH19fX1mdW5jdGlvbiBWdCh0LGUscil7cmV0dXJuIHQuZml4ZWRyYW5nZT8wOmF0JiZ0dC54YUhhc2hbdC5faWRdP2U6b3QmJih0dC5pc1N1YnBsb3RDb25zdHJhaW5lZD90dC54YUhhc2g6dHQueWFIYXNoKVt0Ll9pZF0/cjowfWZ1bmN0aW9uIFV0KHQsZSl7cmV0dXJuIGU/KHQucmFuZ2U9dC5fci5zbGljZSgpLGsodCxlKSxxdCh0LGUpKTowfWZ1bmN0aW9uIHF0KHQsZSxyKXtyZXR1cm4gdC5fbGVuZ3RoKigxLWUpKmdbcnx8dC5jb25zdHJhaW50b3dhcmR8fCJtaWRkbGUiXX1yZXR1cm4gUy5sZW5ndGgqRS5sZW5ndGghPTEmJnEodnQsZnVuY3Rpb24oZSl7aWYodC5fY29udGV4dC5fc2Nyb2xsWm9vbS5jYXJ0ZXNpYW58fHQuX2Z1bGxMYXlvdXQuX2VuYWJsZXNjcm9sbHpvb20pe2lmKEV0KCksdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbilyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgZS5zdG9wUHJvcGFnYXRpb24oKTtkdCgpLGNsZWFyVGltZW91dChJdCk7dmFyIHI9LWUuZGVsdGFZO2lmKGlzRmluaXRlKHIpfHwocj1lLndoZWVsRGVsdGEvMTApLGlzRmluaXRlKHIpKXt2YXIgbixpPU1hdGguZXhwKC1NYXRoLm1pbihNYXRoLm1heChyLC0yMCksMjApLzIwMCksYT1QdC5kcmFnbGF5ZXIuc2VsZWN0KCIubnNld2RyYWciKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz0oZS5jbGllbnRYLWEubGVmdCkvYS53aWR0aCxsPShhLmJvdHRvbS1lLmNsaWVudFkpL2EuaGVpZ2h0O2lmKGF0KXtmb3IoRXx8KG89LjUpLG49MDtuPFgubGVuZ3RoO24rKyljKFhbbl0sbyxpKTtGdCgieCIpLE90WzJdKj1pLE90WzBdKz1PdFsyXSpvKigxL2ktMSl9aWYob3Qpe2ZvcihTfHwobD0uNSksbj0wO248Wi5sZW5ndGg7bisrKWMoWltuXSxsLGkpO0Z0KCJ5IiksT3RbM10qPWksT3RbMV0rPU90WzNdKigxLWwpKigxL2ktMSl9anQoT3QpLEJ0KCksSXQ9c2V0VGltZW91dChmdW5jdGlvbigpe090PVswLDAsSyxRXSxOdCgpfSxEdCksZS5wcmV2ZW50RGVmYXVsdCgpfWVsc2Ugcy5sb2coIkRpZCBub3QgZmluZCB3aGVlbCBtb3Rpb24gYXR0cmlidXRlczogIixlKX1mdW5jdGlvbiBjKHQsZSxyKXtpZighdC5maXhlZHJhbmdlKXt2YXIgbj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxpPW5bMF0rKG5bMV0tblswXSkqZTt0LnJhbmdlPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmwycihpKyhlLWkpKnIpfSl9fX0pLHZ0fSxtYWtlRHJhZ2dlcjpFLG1ha2VSZWN0RHJhZ2dlcjpDLG1ha2Vab29tYm94OkQsbWFrZUNvcm5lcnM6UCx1cGRhdGVab29tYm94OlIseHlDb3JuZXJzOlYsdHJhbnNpdGlvblpvb21ib3g6RixyZW1vdmVab29tYm94OkIsc2hvd0RvdWJsZUNsaWNrTm90aWZpZXI6TixhdHRhY2hXaGVlbEV2ZW50SGFuZGxlcjpxfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjU5NSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjo2ODUsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIjo3MzksIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL3Bsb3RzIjo4MTAsIi4vYXhlcyI6NzQ4LCIuL2F4aXNfaWRzIjo3NTEsIi4vY29uc3RhbnRzIjo3NTQsIi4vc2NhbGVfem9vbSI6NzY0LCIuL3NlbGVjdCI6NzY1LGQzOjE1NCwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MDMsdGlueWNvbG9yMjo1MjF9XSw3NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxvPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxzPXQoIi4vZHJhZ2JveCIpLm1ha2VEcmFnQm94LGw9dCgiLi9jb25zdGFudHMiKS5EUkFHR0VSU0laRTtyLmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZih0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpbi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuZHJhZyIpLnJlbW92ZSgpO2Vsc2UgaWYoZS5faGFzKCJjYXJ0ZXNpYW4iKXx8ZS5faGFzKCJzcGxvbSIpKXtPYmplY3Qua2V5cyhlLl9wbG90c3x8e30pLnNvcnQoZnVuY3Rpb24odCxyKXtpZigoZS5fcGxvdHNbdF0ubWFpbnBsb3QmJiEwKT09PShlLl9wbG90c1tyXS5tYWlucGxvdCYmITApKXt2YXIgbj10LnNwbGl0KCJ5IiksaT1yLnNwbGl0KCJ5Iik7cmV0dXJuIG5bMF09PT1pWzBdP051bWJlcihuWzFdfHwxKS1OdW1iZXIoaVsxXXx8MSk6TnVtYmVyKG5bMF18fDEpLU51bWJlcihpWzBdfHwxKX1yZXR1cm4gZS5fcGxvdHNbdF0ubWFpbnBsb3Q/MTotMX0pLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG49ZS5fcGxvdHNbcl0sbz1uLnhheGlzLGM9bi55YXhpcztpZighbi5tYWlucGxvdCl7dmFyIHU9cyh0LG4sby5fb2Zmc2V0LGMuX29mZnNldCxvLl9sZW5ndGgsYy5fbGVuZ3RoLCJucyIsImV3Iik7dS5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmaS5ob3Zlcih0LGUscil9LGkuaG92ZXIodCxlLHIpLHQuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj11LHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSx1Lm9ubW91c2VvdXQ9ZnVuY3Rpb24oZSl7dC5fZHJhZ2dpbmd8fCh0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxhLnVuaG92ZXIodCxlKSl9LHQuX2NvbnRleHQuc2hvd0F4aXNEcmFnSGFuZGxlcyYmKHModCxuLG8uX29mZnNldC1sLGMuX29mZnNldC1sLGwsbCwibiIsInciKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldC1sLGwsbCwibiIsImUiKSxzKHQsbixvLl9vZmZzZXQtbCxjLl9vZmZzZXQrYy5fbGVuZ3RoLGwsbCwicyIsInciKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldCtjLl9sZW5ndGgsbCxsLCJzIiwiZSIpKX1pZih0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMpe2lmKHI9PT1vLl9tYWluU3VicGxvdCl7dmFyIGY9by5fbWFpbkxpbmVQb3NpdGlvbjsidG9wIj09PW8uc2lkZSYmKGYtPWwpLHModCxuLG8uX29mZnNldCsuMSpvLl9sZW5ndGgsZiwuOCpvLl9sZW5ndGgsbCwiIiwiZXciKSxzKHQsbixvLl9vZmZzZXQsZiwuMSpvLl9sZW5ndGgsbCwiIiwidyIpLHModCxuLG8uX29mZnNldCsuOSpvLl9sZW5ndGgsZiwuMSpvLl9sZW5ndGgsbCwiIiwiZSIpfWlmKHI9PT1jLl9tYWluU3VicGxvdCl7dmFyIGg9Yy5fbWFpbkxpbmVQb3NpdGlvbjsicmlnaHQiIT09Yy5zaWRlJiYoaC09bCkscyh0LG4saCxjLl9vZmZzZXQrLjEqYy5fbGVuZ3RoLGwsLjgqYy5fbGVuZ3RoLCJucyIsIiIpLHModCxuLGgsYy5fb2Zmc2V0Ky45KmMuX2xlbmd0aCxsLC4xKmMuX2xlbmd0aCwicyIsIiIpLHModCxuLGgsYy5fb2Zmc2V0LGwsLjEqYy5fbGVuZ3RoLCJuIiwiIil9fX0pO3ZhciBvPWUuX2hvdmVybGF5ZXIubm9kZSgpO28ub25tb3VzZW1vdmU9ZnVuY3Rpb24ocil7ci50YXJnZXQ9dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLGkuaG92ZXIodCxyLGUuX2hvdmVyc3VicGxvdCl9LG8ub25jbGljaz1mdW5jdGlvbihlKXtlLnRhcmdldD10Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIsaS5jbGljayh0LGUpfSxvLm9ubW91c2Vkb3duPWZ1bmN0aW9uKGUpe3QuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlci5vbm1vdXNlZG93bihlKX0sci51cGRhdGVGeCh0KX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPSJwYW4iPT09ZS5kcmFnbW9kZT8ibW92ZSI6ImNyb3NzaGFpciI7byhlLl9kcmFnZ2VycyxyKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NTk1LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi9jb25zdGFudHMiOjc1NCwiLi9kcmFnYm94Ijo3NTYsZDM6MTU0fV0sNzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGE9ZVt0XTtpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgbz1uLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuLHM9by5pZFJlZ2V4LGw9ci5fc3VicGxvdHMsYz1sLnhheGlzLHU9bC55YXhpcyxmPWwuY2FydGVzaWFuLGg9ci5faGFzKCJjYXJ0ZXNpYW4iKXx8ci5faGFzKCJnbDJkIikscD0wO3A8YS5sZW5ndGg7cCsrKXt2YXIgZD1hW3BdO2lmKGkuaXNQbGFpbk9iamVjdChkKSl7dmFyIGc9ZC54cmVmLHY9ZC55cmVmLG09cy54LnRlc3QoZykseT1zLnkudGVzdCh2KTtpZihtfHx5KXtofHxpLnB1c2hVbmlxdWUoci5fYmFzZVBsb3RNb2R1bGVzLG8pO3ZhciB4PSExO20mJi0xPT09Yy5pbmRleE9mKGcpJiYoYy5wdXNoKGcpLHg9ITApLHkmJi0xPT09dS5pbmRleE9mKHYpJiYodS5wdXNoKHYpLHg9ITApLHgmJm0mJnkmJmYucHVzaChnK3YpfX19fX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4Mjl9XSw3NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3Bsb3RzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYz10KCIuL2F4aXNfaWRzIiksdT10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxoPWEuZW5zdXJlU2luZ2xlO2Z1bmN0aW9uIHAodCxlLHIpe3JldHVybiBhLmVuc3VyZVNpbmdsZSh0LGUscixmdW5jdGlvbih0KXt0LmRhdHVtKHIpfSl9ZnVuY3Rpb24gZCh0LGUscixhLG8pe2Zvcih2YXIgYyxmLGgscD11LnRyYWNlTGF5ZXJDbGFzc2VzLGQ9dC5fZnVsbExheW91dCxnPWQuX21vZHVsZXMsdj1bXSxtPVtdLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHg9KGM9Z1t5XSkubmFtZSxiPWkubW9kdWxlc1t4XS5jYXRlZ29yaWVzO2lmKGIuc3ZnKXt2YXIgXz1jLmxheWVyTmFtZXx8eCsibGF5ZXIiLHc9Yy5wbG90O2g9KGY9bChyLHcpKVswXSxyPWZbMV0saC5sZW5ndGgmJnYucHVzaCh7aTpwLmluZGV4T2YoXyksY2xhc3NOYW1lOl8scGxvdE1ldGhvZDp3LGNkTW9kdWxlOmh9KSxiLnpvb21TY2FsZSYmbS5wdXNoKCIuIitfKX19di5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaS1lLml9KTt2YXIgaz1lLnBsb3Quc2VsZWN0QWxsKCJnLm1sYXllciIpLmRhdGEodixmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWV9KTtpZihrLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTmFtZX0pLmNsYXNzZWQoIm1sYXllciIsITApLGsuZXhpdCgpLnJlbW92ZSgpLGsub3JkZXIoKSxrLmVhY2goZnVuY3Rpb24ocil7dmFyIGk9bi5zZWxlY3QodGhpcyksbD1yLmNsYXNzTmFtZTtyLnBsb3RNZXRob2QodCxlLHIuY2RNb2R1bGUsaSxhLG8pLCJzY2F0dGVybGF5ZXIiIT09bCYmImJhcmxheWVyIiE9PWwmJiJ3YXRlcmZhbGxsYXllciIhPT1sJiZzLnNldENsaXBVcmwoaSxlLmxheWVyQ2xpcElkLHQpfSksZC5faGFzKCJzY2F0dGVyZ2wiKSYmKGM9aS5nZXRNb2R1bGUoInNjYXR0ZXJnbCIpLGg9bChyLGMpWzBdLGMucGxvdCh0LGUsaCkpLCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QmJihlLl9oYXNDbGlwT25BeGlzRmFsc2UmJihlLmNsaXBPbkF4aXNGYWxzZVRyYWNlcz1lLnBsb3Quc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLCAuYmFybGF5ZXIsIC53YXRlcmZhbGxsYXllciIpLnNlbGVjdEFsbCgiLnRyYWNlIikpLG0ubGVuZ3RoKSl7dmFyIFQ9ZS5wbG90LnNlbGVjdEFsbChtLmpvaW4oIiwiKSkuc2VsZWN0QWxsKCIudHJhY2UiKTtlLnpvb21TY2FsZVB0cz1ULnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLGUuem9vbVNjYWxlVHh0PVQuc2VsZWN0QWxsKCIudGV4dHBvaW50Iil9fWZ1bmN0aW9uIGcodCxlKXt2YXIgcj1lLnBsb3Rncm91cCxuPWUuaWQsaT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1tlLnhheGlzLmxheWVyXSxhPXUubGF5ZXJWYWx1ZTJsYXllckNsYXNzW2UueWF4aXMubGF5ZXJdLG89dC5fZnVsbExheW91dC5faGFzT25seUxhcmdlU3Bsb21zO2lmKGUubWFpbnBsb3Qpe3ZhciBzPWUubWFpbnBsb3RpbmZvLGw9cy5wbG90Z3JvdXAsZj1uKyIteCIsZD1uKyIteSI7ZS5ncmlkbGF5ZXI9cy5ncmlkbGF5ZXIsZS56ZXJvbGluZWxheWVyPXMuemVyb2xpbmVsYXllcixoKHMub3ZlcmxpbmVzQmVsb3csInBhdGgiLGYpLGgocy5vdmVybGluZXNCZWxvdywicGF0aCIsZCksaChzLm92ZXJheGVzQmVsb3csImciLGYpLGgocy5vdmVyYXhlc0JlbG93LCJnIixkKSxlLnBsb3Q9aChzLm92ZXJwbG90LCJnIixuKSxoKHMub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGYpLGgocy5vdmVybGluZXNBYm92ZSwicGF0aCIsZCksaChzLm92ZXJheGVzQWJvdmUsImciLGYpLGgocy5vdmVyYXhlc0Fib3ZlLCJnIixkKSxlLnhsaW5lcz1sLnNlbGVjdCgiLm92ZXJsaW5lcy0iK2kpLnNlbGVjdCgiLiIrZiksZS55bGluZXM9bC5zZWxlY3QoIi5vdmVybGluZXMtIithKS5zZWxlY3QoIi4iK2QpLGUueGF4aXNsYXllcj1sLnNlbGVjdCgiLm92ZXJheGVzLSIraSkuc2VsZWN0KCIuIitmKSxlLnlheGlzbGF5ZXI9bC5zZWxlY3QoIi5vdmVyYXhlcy0iK2EpLnNlbGVjdCgiLiIrZCl9ZWxzZSBpZihvKWUueGxpbmVzPWgociwicGF0aCIsInhsaW5lcy1hYm92ZSIpLGUueWxpbmVzPWgociwicGF0aCIsInlsaW5lcy1hYm92ZSIpLGUueGF4aXNsYXllcj1oKHIsImciLCJ4YXhpc2xheWVyLWFib3ZlIiksZS55YXhpc2xheWVyPWgociwiZyIsInlheGlzbGF5ZXItYWJvdmUiKTtlbHNle3ZhciBnPWgociwiZyIsImxheWVyLXN1YnBsb3QiKTtlLnNoYXBlbGF5ZXI9aChnLCJnIiwic2hhcGVsYXllciIpLGUuaW1hZ2VsYXllcj1oKGcsImciLCJpbWFnZWxheWVyIiksZS5ncmlkbGF5ZXI9aChyLCJnIiwiZ3JpZGxheWVyIiksZS56ZXJvbGluZWxheWVyPWgociwiZyIsInplcm9saW5lbGF5ZXIiKSxoKHIsInBhdGgiLCJ4bGluZXMtYmVsb3ciKSxoKHIsInBhdGgiLCJ5bGluZXMtYmVsb3ciKSxlLm92ZXJsaW5lc0JlbG93PWgociwiZyIsIm92ZXJsaW5lcy1iZWxvdyIpLGgociwiZyIsInhheGlzbGF5ZXItYmVsb3ciKSxoKHIsImciLCJ5YXhpc2xheWVyLWJlbG93IiksZS5vdmVyYXhlc0JlbG93PWgociwiZyIsIm92ZXJheGVzLWJlbG93IiksZS5wbG90PWgociwiZyIsInBsb3QiKSxlLm92ZXJwbG90PWgociwiZyIsIm92ZXJwbG90IiksZS54bGluZXM9aChyLCJwYXRoIiwieGxpbmVzLWFib3ZlIiksZS55bGluZXM9aChyLCJwYXRoIiwieWxpbmVzLWFib3ZlIiksZS5vdmVybGluZXNBYm92ZT1oKHIsImciLCJvdmVybGluZXMtYWJvdmUiKSxoKHIsImciLCJ4YXhpc2xheWVyLWFib3ZlIiksaChyLCJnIiwieWF4aXNsYXllci1hYm92ZSIpLGUub3ZlcmF4ZXNBYm92ZT1oKHIsImciLCJvdmVyYXhlcy1hYm92ZSIpLGUueGxpbmVzPXIuc2VsZWN0KCIueGxpbmVzLSIraSksZS55bGluZXM9ci5zZWxlY3QoIi55bGluZXMtIithKSxlLnhheGlzbGF5ZXI9ci5zZWxlY3QoIi54YXhpc2xheWVyLSIraSksZS55YXhpc2xheWVyPXIuc2VsZWN0KCIueWF4aXNsYXllci0iK2EpfW98fChwKGUuZ3JpZGxheWVyLCJnIixlLnhheGlzLl9pZCkscChlLmdyaWRsYXllciwiZyIsZS55YXhpcy5faWQpLGUuZ3JpZGxheWVyLnNlbGVjdEFsbCgiZyIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLnNvcnQoYy5pZFNvcnQpKSxlLnhsaW5lcy5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jbGFzc2VkKCJjcmlzcCIsITApLGUueWxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCl9ZnVuY3Rpb24gdih0LGUpe2lmKHQpe3ZhciByPXt9O2Zvcih2YXIgaSBpbiB0LmVhY2goZnVuY3Rpb24odCl7dmFyIGk9dFswXTtuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKSxtKGksZSkscltpXT0hMH0pLGUuX3Bsb3RzKWZvcih2YXIgYT1lLl9wbG90c1tpXS5vdmVybGF5c3x8W10sbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3Jbcy5pZF0mJnMucGxvdC5zZWxlY3RBbGwoIi50cmFjZSIpLnJlbW92ZSgpfX19ZnVuY3Rpb24gbSh0LGUpe2UuX2RyYWdnZXJzLnNlbGVjdEFsbCgiZy4iK3QpLnJlbW92ZSgpLGUuX2RlZnMuc2VsZWN0KCIjY2xpcCIrZS5fdWlkK3QrInBsb3QiKS5yZW1vdmUoKX1yLm5hbWU9ImNhcnRlc2lhbiIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9dS5pZFJlZ2V4LHIuYXR0clJlZ2V4PXUuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnRyYW5zaXRpb25BeGVzPXQoIi4vdHJhbnNpdGlvbl9heGVzIiksci5maW5hbGl6ZVN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLG89ZS5fc3VicGxvdHMscz1vLnhheGlzLGw9by55YXhpcyxmPW8uY2FydGVzaWFuLGg9Zi5jb25jYXQoby5nbDJkfHxbXSkscD17fSxkPXt9O2ZvcihyPTA7cjxoLmxlbmd0aDtyKyspe3ZhciBnPWhbcl0uc3BsaXQoInkiKTtwW2dbMF1dPTEsZFsieSIrZ1sxXV09MX1mb3Iocj0wO3I8cy5sZW5ndGg7cisrKXBbbj1zW3JdXXx8KGk9KHRbYy5pZDJuYW1lKG4pXXx8e30pLmFuY2hvcix1LmlkUmVnZXgueS50ZXN0KGkpfHwoaT0ieSIpLGYucHVzaChuK2kpLGgucHVzaChuK2kpLGRbaV18fChkW2ldPTEsYS5wdXNoVW5pcXVlKGwsaSkpKTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWRbaT1sW3JdXXx8KG49KHRbYy5pZDJuYW1lKGkpXXx8e30pLmFuY2hvcix1LmlkUmVnZXgueC50ZXN0KG4pfHwobj0ieCIpLGYucHVzaChuK2kpLGgucHVzaChuK2kpLHBbbl18fChwW25dPTEsYS5wdXNoVW5pcXVlKHMsbikpKTtpZighaC5sZW5ndGgpe2Zvcih2YXIgdiBpbiBuPSIiLGk9IiIsdCl7aWYodS5hdHRyUmVnZXgudGVzdCh2KSkieCI9PT12LmNoYXJBdCgwKT8oIW58fCt2LnN1YnN0cig1KTwrbi5zdWJzdHIoNSkpJiYobj12KTooIWl8fCt2LnN1YnN0cig1KTwraS5zdWJzdHIoNSkpJiYoaT12KX1uPW4/Yy5uYW1lMmlkKG4pOiJ4IixpPWk/Yy5uYW1lMmlkKGkpOiJ5IixzLnB1c2gobiksbC5wdXNoKGkpLGYucHVzaChuK2kpfX0sci5wbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5fZnVsbExheW91dCxvPWEuX3N1YnBsb3RzLmNhcnRlc2lhbixzPXQuY2FsY2RhdGE7aWYobnVsbCE9PWUpe2lmKCFBcnJheS5pc0FycmF5KGUpKWZvcihlPVtdLGk9MDtpPHMubGVuZ3RoO2krKyllLnB1c2goaSk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7Zm9yKHZhciBsLGM9b1tpXSx1PWEuX3Bsb3RzW2NdLGY9W10saD0wO2g8cy5sZW5ndGg7aCsrKXt2YXIgcD1zW2hdLGc9cFswXS50cmFjZTtnLnhheGlzK2cueWF4aXM9PT1jJiYoKC0xIT09ZS5pbmRleE9mKGcuaW5kZXgpfHxnLmNhcnBldCkmJihsJiZsWzBdLnRyYWNlLnhheGlzK2xbMF0udHJhY2UueWF4aXM9PT1jJiYtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiLCJ0b25leHQiXS5pbmRleE9mKGcuZmlsbCkmJi0xPT09Zi5pbmRleE9mKGwpJiZmLnB1c2gobCksZi5wdXNoKHApKSxsPXApfWQodCx1LGYscixuKX19fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzfHx7fSx1PW4uX3N1YnBsb3RzfHx7fTtpZihuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKG8gaW4gcykoaT1zW29dKS5wbG90Z3JvdXAmJmkucGxvdGdyb3VwLnJlbW92ZSgpO3ZhciBmPW4uX2hhcyYmbi5faGFzKCJnbCIpLGg9ZS5faGFzJiZlLl9oYXMoImdsIik7aWYoZiYmIWgpZm9yKG8gaW4gcykoaT1zW29dKS5fc2NlbmUmJmkuX3NjZW5lLmRlc3Ryb3koKTtpZih1LnhheGlzJiZ1LnlheGlzKXt2YXIgcD1jLmxpc3RJZHMoe19mdWxsTGF5b3V0Om59KTtmb3IoYT0wO2E8cC5sZW5ndGg7YSsrKXt2YXIgZD1wW2FdO2VbYy5pZDJuYW1lKGQpXXx8bi5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmctIitkKyJ0aXRsZSIpLnJlbW92ZSgpfX12YXIgZz1uLl9oYXMmJm4uX2hhcygiY2FydGVzaWFuIikseT1lLl9oYXMmJmUuX2hhcygiY2FydGVzaWFuIik7aWYoZyYmIXkpdihuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90Iiksbiksbi5fZGVmcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLnJlbW92ZSgpLGRlbGV0ZSBuLl9heGlzQ29uc3RyYWludEdyb3VwcztlbHNlIGlmKHUuY2FydGVzaWFuKWZvcihhPTA7YTx1LmNhcnRlc2lhbi5sZW5ndGg7YSsrKXt2YXIgeD11LmNhcnRlc2lhblthXTtpZighbFt4XSl7dmFyIGI9Ii4iK3grIiwuIit4KyIteCwuIit4KyIteSI7bi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKGIpLnJlbW92ZSgpLG0oeCxuKX19fSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzPXQuX2Z1bGxMYXlvdXQsbD1zLl9zdWJwbG90cy5jYXJ0ZXNpYW4sYz1sLmxlbmd0aCx1PVtdLGY9W107Zm9yKGU9MDtlPGM7ZSsrKXtuPWxbZV0saT1zLl9wbG90c1tuXSxhPWkueGF4aXMsbz1pLnlheGlzO3ZhciBoPWEuX21haW5BeGlzLHA9by5fbWFpbkF4aXMsZD1oLl9pZCtwLl9pZCxnPXMuX3Bsb3RzW2RdO2kub3ZlcmxheXM9W10sZCE9PW4mJmc/KGkubWFpbnBsb3Q9ZCxpLm1haW5wbG90aW5mbz1nLGYucHVzaChuKSk6KGkubWFpbnBsb3Q9dm9pZCAwLGkubWFpblBsb3RpbmZvPXZvaWQgMCx1LnB1c2gobikpfWZvcihlPTA7ZTxmLmxlbmd0aDtlKyspbj1mW2VdLChpPXMuX3Bsb3RzW25dKS5tYWlucGxvdGluZm8ub3ZlcmxheXMucHVzaChpKTt2YXIgdj11LmNvbmNhdChmKSxtPW5ldyBBcnJheShjKTtmb3IoZT0wO2U8YztlKyspe249dltlXSxpPXMuX3Bsb3RzW25dLGE9aS54YXhpcyxvPWkueWF4aXM7dmFyIHk9W24sYS5sYXllcixvLmxheWVyLGEub3ZlcmxheWluZ3x8IiIsby5vdmVybGF5aW5nfHwiIl07Zm9yKHI9MDtyPGkub3ZlcmxheXMubGVuZ3RoO3IrKyl5LnB1c2goaS5vdmVybGF5c1tyXS5pZCk7bVtlXT15fXJldHVybiBtfSh0KSxpPWUuX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbCgiLnN1YnBsb3QiKS5kYXRhKHIsU3RyaW5nKTtpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJzdWJwbG90ICIrdFswXX0pLGkub3JkZXIoKSxpLmV4aXQoKS5jYWxsKHYsZSksaS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXJbMF0sYT1lLl9wbG90c1tpXTthLnBsb3Rncm91cD1uLnNlbGVjdCh0aGlzKSxnKHQsYSksYS5kcmFnbGF5ZXI9aChlLl9kcmFnZ2VycywiZyIsaSl9KX0sci5yYW5nZVBsb3Q9ZnVuY3Rpb24odCxlLHIpe2codCxlKSxkKHQsZSxyKSxvLnN0eWxlKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkuc2VsZWN0QWxsKCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXMiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpmLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KX0sci51cGRhdGVGeD10KCIuL2dyYXBoX2ludGVyYWN0IikudXBkYXRlRnh9LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NzgsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9nZXRfZGF0YSI6Nzg0LCIuLi9wbG90cyI6ODEwLCIuL2F0dHJpYnV0ZXMiOjc0NiwiLi9heGlzX2lkcyI6NzUxLCIuL2NvbnN0YW50cyI6NzU0LCIuL2dyYXBoX2ludGVyYWN0Ijo3NTcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MCwiLi9sYXlvdXRfZGVmYXVsdHMiOjc2MSwiLi90cmFuc2l0aW9uX2F4ZXMiOjc3MCxkMzoxNTR9XSw3NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGw9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90In0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InRpY2tzIn0sZm9udDpuKHtlZGl0VHlwZToidGlja3MifSksZWRpdFR5cGU6InRpY2tzIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSIsIm11bHRpY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyIsX25vVGVtcGxhdGluZzohMH0sYXV0b3JhbmdlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGRmbHQ6ITAsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vcm1hbCIsInRvemVybyIsIm5vbm5lZ2F0aXZlIl0sZGZsdDoibm9ybWFsIixlZGl0VHlwZToicGxvdCJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfSxhbmltOiEwfSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9LGFuaW06ITB9XSxlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9LGFuaW06ITB9LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sc2NhbGVyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhbmdlIiwiZG9tYWluIl0sZGZsdDoicmFuZ2UiLGVkaXRUeXBlOiJwbG90In0sY29uc3RyYWludG93YXJkOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxlZGl0VHlwZToicGxvdCJ9LG1hdGNoZXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbbC5pZFJlZ2V4LngudG9TdHJpbmcoKSxsLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHRpY2ttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGluZWFyIiwiYXJyYXkiXSxlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGljazA6dm9pZCAwLGR0aWNrOnZvaWQgMH19LG50aWNrczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2swOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrbW9kZToibGluZWFyIn19LGR0aWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrbW9kZToibGluZWFyIn19LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToidGlja3MifSx0aWNrdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3M6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm91dHNpZGUiLCJpbnNpZGUiLCIiXSxlZGl0VHlwZToidGlja3MifSx0aWNrc29uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYWJlbHMiLCJib3VuZGFyaWVzIl0sZGZsdDoibGFiZWxzIixlZGl0VHlwZToidGlja3MifSxtaXJyb3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInRpY2tzIiwhMSwiYWxsIiwiYWxsdGlja3MiXSxkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcytsYXlvdXRzdHlsZSJ9LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1LGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2t3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGF1dG9tYXJnaW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3NwaWtlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToibW9kZWJhciJ9LHNwaWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om51bGwsZWRpdFR5cGU6Im5vbmUifSxzcGlrZXRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixkZmx0OjMsZWRpdFR5cGU6Im5vbmUifSxzcGlrZWRhc2g6byh7fSxhLHtkZmx0OiJkYXNoIixlZGl0VHlwZToibm9uZSJ9KSxzcGlrZW1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInRvYXhpcyIsImFjcm9zcyIsIm1hcmtlciJdLGRmbHQ6InRvYXhpcyIsZWRpdFR5cGU6Im5vbmUifSxzcGlrZXNuYXA6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRhdGEiLCJjdXJzb3IiXSxkZmx0OiJkYXRhIixlZGl0VHlwZToibm9uZSJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIixlZGl0VHlwZToidGlja3MifSx0aWNrcHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIixlZGl0VHlwZToidGlja3MifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sdGlja2Zvcm1hdHN0b3BzOnMoInRpY2tmb3JtYXRzdG9wIix7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkdGlja3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn1dLGVkaXRUeXBlOiJ0aWNrcyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sZWRpdFR5cGU6InRpY2tzIn0pLGhvdmVyZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUifSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToidGlja3MifSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dkaXZpZGVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkaXZpZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sZGl2aWRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSxhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLGwuaWRSZWdleC54LnRvU3RyaW5nKCksbC5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LG92ZXJsYXlpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLGwuaWRSZWdleC54LnRvU3RyaW5nKCksbC5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWJvdmUgdHJhY2VzIiwiYmVsb3cgdHJhY2VzIl0sZGZsdDoiYWJvdmUgdHJhY2VzIixlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifV0sZGZsdDpbMCwxXSxlZGl0VHlwZToicGxvdCJ9LHBvc2l0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY2F0ZWdvcnkgYXNjZW5kaW5nIiwiY2F0ZWdvcnkgZGVzY2VuZGluZyIsImFycmF5Il0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJjYWxjIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vZm9udF9hdHRyaWJ1dGVzIjo3NzQsIi4vY29uc3RhbnRzIjo3NTR9XSw3NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGw9dCgiLi90eXBlX2RlZmF1bHRzIiksYz10KCIuL2F4aXNfZGVmYXVsdHMiKSx1PXQoIi4vY29uc3RyYWludHMiKS5oYW5kbGVDb25zdHJhaW50RGVmYXVsdHMsZj10KCIuL3Bvc2l0aW9uX2RlZmF1bHRzIiksaD10KCIuL2F4aXNfaWRzIikscD1oLmlkMm5hbWUsZD1oLm5hbWUyaWQsZz10KCIuLi8uLi9yZWdpc3RyeSIpLHY9Zy50cmFjZUlzLG09Zy5nZXRDb21wb25lbnRNZXRob2Q7ZnVuY3Rpb24geSh0LGUscil7QXJyYXkuaXNBcnJheSh0W2VdKT90W2VdLnB1c2gocik6dFtlXT1bcl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaCxnLHg9e30sYj17fSxfPXt9LHc9e30saz17fTtmb3IoaD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgVD1yW2hdO2lmKHYoVCwiY2FydGVzaWFuIil8fHYoVCwiZ2wyZCIpKXt2YXIgQSxNO2lmKFQueGF4aXMpeSh4LEE9cChULnhheGlzKSxUKTtlbHNlIGlmKFQueGF4ZXMpZm9yKGc9MDtnPFQueGF4ZXMubGVuZ3RoO2crKyl5KHgscChULnhheGVzW2ddKSxUKTtpZihULnlheGlzKXkoeCxNPXAoVC55YXhpcyksVCk7ZWxzZSBpZihULnlheGVzKWZvcihnPTA7ZzxULnlheGVzLmxlbmd0aDtnKyspeSh4LHAoVC55YXhlc1tnXSksVCk7aWYodihULCJjYXJwZXQiKSYmKCJjYXJwZXQiIT09VC50eXBlfHxULl9jaGVhdGVyKXx8QSYmKF9bQV09MSksImNhcnBldCI9PT1ULnR5cGUmJlQuX2NoZWF0ZXImJkEmJihiW0FdPTEpLHYoVCwiMmRNYXAiKSYmKHdbQV09MSx3W01dPTEpLHYoVCwib3JpZW50ZWQiKSlrWyJoIj09PVQub3JpZW50YXRpb24/TTpBXT0xfX12YXIgUz1lLl9zdWJwbG90cyxFPVMueGF4aXMsQz1TLnlheGlzLEw9bi5zaW1wbGVNYXAoRSxwKSx6PW4uc2ltcGxlTWFwKEMscCksTz1MLmNvbmNhdCh6KSxJPWkuYmFja2dyb3VuZDtFLmxlbmd0aCYmQy5sZW5ndGgmJihJPW4uY29lcmNlKHQsZSxvLCJwbG90X2JnY29sb3IiKSk7dmFyIEQsUCxSLEYsQj1pLmNvbWJpbmUoSSxlLnBhcGVyX2JnY29sb3IpO2Z1bmN0aW9uIE4odCxlKXtyZXR1cm4gbi5jb2VyY2UoUixGLHMsdCxlKX1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIG4uY29lcmNlMihSLEYscyx0LGUpfWZ1bmN0aW9uIFYodCl7cmV0dXJuIngiPT09dD9DOkV9dmFyIFU9e3g6VigieCIpLHk6VigieSIpfSxxPVUueC5jb25jYXQoVS55KTtmdW5jdGlvbiBIKGUscil7Zm9yKHZhciBuPSJ4Ij09PWU/TDp6LGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdO289PT1yfHwodFtvXXx8e30pLm92ZXJsYXlpbmd8fGkucHVzaChkKG8pKX1yZXR1cm4gaX1mb3IoaD0wO2g8Ty5sZW5ndGg7aCsrKXtQPShEPU9baF0pLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QodFtEXSl8fCh0W0RdPXt9KSxSPXRbRF0sRj1hLm5ld0NvbnRhaW5lcihlLEQsUCsiYXhpcyIpO3ZhciBHPXhbRF18fFtdO0YuX3RyYWNlSW5kaWNlcz1HLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pLEYuX2FubkluZGljZXM9W10sRi5fc2hhcGVJbmRpY2VzPVtdLEYuX2ltZ0luZGljZXM9W10sRi5fc3VicGxvdHNXaXRoPVtdLEYuX2NvdW50ZXJBeGVzPVtdLEYuX25hbWU9Ri5fYXR0cj1EO3ZhciBZPUYuX2lkPWQoRCksVz1IKFAsRCksWD17bGV0dGVyOlAsZm9udDplLmZvbnQsb3V0ZXJUaWNrczp3W0RdLHNob3dHcmlkOiFrW0RdLGRhdGE6RyxiZ0NvbG9yOkIsY2FsZW5kYXI6ZS5jYWxlbmRhcixhdXRvbWFyZ2luOiEwLGNoZWF0ZXJvbmx5OiJ4Ij09PVAmJmJbRF0mJiFfW0RdLHNwbG9tU3Rhc2g6KChlLl9zcGxvbUF4ZXN8fHt9KVtQXXx8e30pW1ldfTtOKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLGwoUixGLE4sWCksYyhSLEYsTixYLGUpO3ZhciBaPWooInNwaWtlY29sb3IiKSwkPWooInNwaWtldGhpY2tuZXNzIiksSj1qKCJzcGlrZWRhc2giKSxLPWooInNwaWtlbW9kZSIpLFE9aigic3Bpa2VzbmFwIik7Tigic2hvd3NwaWtlcyIsISEoWnx8JHx8Snx8S3x8USkpfHwoZGVsZXRlIEYuc3Bpa2Vjb2xvcixkZWxldGUgRi5zcGlrZXRoaWNrbmVzcyxkZWxldGUgRi5zcGlrZWRhc2gsZGVsZXRlIEYuc3Bpa2Vtb2RlLGRlbGV0ZSBGLnNwaWtlc25hcCksZihSLEYsTix7bGV0dGVyOlAsY291bnRlckF4ZXM6VVtQXSxvdmVybGF5YWJsZUF4ZXM6VyxncmlkOmUuZ3JpZH0pLEYuX2lucHV0PVJ9dmFyIHR0PW0oInJhbmdlc2xpZGVyIiwiaGFuZGxlRGVmYXVsdHMiKSxldD1tKCJyYW5nZXNlbGVjdG9yIiwiaGFuZGxlRGVmYXVsdHMiKTtmb3IoaD0wO2g8TC5sZW5ndGg7aCsrKUQ9TFtoXSxSPXRbRF0sRj1lW0RdLHR0KHQsZSxEKSwiZGF0ZSI9PT1GLnR5cGUmJmV0KFIsRixlLHosRi5jYWxlbmRhciksTigiZml4ZWRyYW5nZSIpO2ZvcihoPTA7aDx6Lmxlbmd0aDtoKyspe0Q9eltoXSxSPXRbRF0sRj1lW0RdO3ZhciBydD1lW3AoRi5hbmNob3IpXTtOKCJmaXhlZHJhbmdlIixtKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKHJ0KSl9dmFyIG50PWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdLGl0PWUuX2F4aXNNYXRjaEdyb3Vwcz1bXTtmb3IoaD0wO2g8Ty5sZW5ndGg7aCsrKVA9KEQ9T1toXSkuY2hhckF0KDApLFI9dFtEXSxGPWVbRF0sdShSLEYsTixxLGUpO2ZvcihoPTA7aDxpdC5sZW5ndGg7aCsrKXt2YXIgYXQsb3Q9aXRbaF0sc3Q9bnVsbCxsdD1udWxsO2ZvcihhdCBpbiBvdCkoRj1lW3AoYXQpXSkubWF0Y2hlc3x8KHN0PUYucmFuZ2UsbHQ9Ri5hdXRvcmFuZ2UpO2lmKG51bGw9PT1zdHx8bnVsbD09PWx0KWZvcihhdCBpbiBvdCl7c3Q9KEY9ZVtwKGF0KV0pLnJhbmdlLGx0PUYuYXV0b3JhbmdlO2JyZWFrfWZvcihhdCBpbiBvdCkoRj1lW3AoYXQpXSkubWF0Y2hlcyYmKEYucmFuZ2U9c3Quc2xpY2UoKSxGLmF1dG9yYW5nZT1sdCksRi5fbWF0Y2hHcm91cD1vdDtpZihudC5sZW5ndGgpZm9yKGF0IGluIG90KWZvcihnPTA7ZzxudC5sZW5ndGg7ZysrKXt2YXIgY3Q9bnRbZ107Zm9yKHZhciB1dCBpbiBjdClhdD09PXV0JiYobi53YXJuKCJBeGlzICIrdXQrIiBpcyBzZXQgd2l0aCBib3RoIGEgKnNjYWxlYW5jaG9yKiBhbmQgKm1hdGNoZXMqIGNvbnN0cmFpbnQ7IGlnbm9yaW5nIHRoZSBzY2FsZSBjb25zdHJhaW50LiIpLGRlbGV0ZSBjdFt1dF0sT2JqZWN0LmtleXMoY3QpLmxlbmd0aDwyJiZudC5zcGxpY2UoZywxKSl9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6ODAxLCIuL2F4aXNfZGVmYXVsdHMiOjc1MCwiLi9heGlzX2lkcyI6NzUxLCIuL2NvbnN0cmFpbnRzIjo3NTUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MCwiLi9wb3NpdGlvbl9kZWZhdWx0cyI6NzYzLCIuL3R5cGVfZGVmYXVsdHMiOjc3MX1dLDc2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikubGlnaHRGcmFjdGlvbixhPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz0obz1vfHx7fSkuZGZsdENvbG9yO2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gYS5jb2VyY2UyKHQsZSxvLmF0dHJpYnV0ZXMscixuKX12YXIgYz1sKCJsaW5lY29sb3IiLHMpLHU9bCgibGluZXdpZHRoIik7cigic2hvd2xpbmUiLG8uc2hvd0xpbmV8fCEhY3x8ISF1KXx8KGRlbGV0ZSBlLmxpbmVjb2xvcixkZWxldGUgZS5saW5ld2lkdGgpO3ZhciBmPWwoImdyaWRjb2xvciIsbihzLG8uYmdDb2xvcixvLmJsZW5kfHxpKS50b1JnYlN0cmluZygpKSxoPWwoImdyaWR3aWR0aCIpO2lmKHIoInNob3dncmlkIixvLnNob3dHcmlkfHwhIWZ8fCEhaCl8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKSwhby5ub1plcm9MaW5lKXt2YXIgcD1sKCJ6ZXJvbGluZWNvbG9yIixzKSxkPWwoInplcm9saW5ld2lkdGgiKTtyKCJ6ZXJvbGluZSIsby5zaG93R3JpZHx8ISFwfHwhIWQpfHwoZGVsZXRlIGUuemVyb2xpbmVjb2xvcixkZWxldGUgZS56ZXJvbGluZXdpZHRoKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9saWIiOjcwMCx0aW55Y29sb3IyOjUyMX1dLDc2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbCxjLHU9YS5jb3VudGVyQXhlc3x8W10sZj1hLm92ZXJsYXlhYmxlQXhlc3x8W10saD1hLmxldHRlcixwPWEuZ3JpZDtwJiYocz1wLl9kb21haW5zW2hdW3AuX2F4aXNNYXBbZS5faWRdXSxvPXAuX2FuY2hvcnNbZS5faWRdLHMmJihsPXBbaCsic2lkZSJdLnNwbGl0KCIgIilbMF0sYz1wLmRvbWFpbltoXVsicmlnaHQiPT09bHx8InRvcCI9PT1sPzE6MF0pKSxzPXN8fFswLDFdLG89b3x8KG4odC5wb3NpdGlvbik/ImZyZWUiOnVbMF18fCJmcmVlIiksbD1sfHwoIngiPT09aD8iYm90dG9tIjoibGVmdCIpLGM9Y3x8MCwiZnJlZSI9PT1pLmNvZXJjZSh0LGUse2FuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSJdLmNvbmNhdCh1KSxkZmx0Om99fSwiYW5jaG9yIikmJnIoInBvc2l0aW9uIixjKSxpLmNvZXJjZSh0LGUse3NpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczoieCI9PT1oP1siYm90dG9tIiwidG9wIl06WyJsZWZ0IiwicmlnaHQiXSxkZmx0Omx9fSwic2lkZSIpO3ZhciBkPSExO2lmKGYubGVuZ3RoJiYoZD1pLmNvZXJjZSh0LGUse292ZXJsYXlpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITFdLmNvbmNhdChmKSxkZmx0OiExfX0sIm92ZXJsYXlpbmciKSksIWQpe3ZhciBnPXIoImRvbWFpbiIscyk7Z1swXT5nWzFdLTEvNDA5NiYmKGUuZG9tYWluPXMpLGkubm9uZU9yQWxsKHQuZG9tYWluLGUuZG9tYWluLHMpfXJldHVybiByKCJsYXllciIpLGV9fSx7Ii4uLy4uL2xpYiI6NzAwLCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNzY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ciYmKHI9blt0LmNvbnN0cmFpbnRvd2FyZHx8ImNlbnRlciJdKTt2YXIgaT1bdC5yMmwodC5yYW5nZVswXSksdC5yMmwodC5yYW5nZVsxXSldLGE9aVswXSsoaVsxXS1pWzBdKSpyO3QucmFuZ2U9dC5faW5wdXQucmFuZ2U9W3QubDJyKGErKGlbMF0tYSkqZSksdC5sMnIoYSsoaVsxXS1hKSplKV19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY3Mn1dLDc2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwb2x5Ym9vbGpzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHM9dCgiLi4vLi4vbGliL3BvbHlnb24iKSxsPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikubWFrZUV2ZW50RGF0YSx1PXQoIi4vYXhpc19pZHMiKS5nZXRGcm9tSWQsZj10KCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSxoPXQoIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIikucmVkcmF3UmVnbFRyYWNlcyxwPXQoIi4vY29uc3RhbnRzIiksZD1wLk1JTlNFTEVDVCxnPXMuZmlsdGVyLHY9cy50ZXN0ZXI7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24geSh0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmLGgscCxkLGcsdj1lLl9ob3ZlcmRhdGEsbT1lLl9mdWxsTGF5b3V0LmNsaWNrbW9kZS5pbmRleE9mKCJldmVudCIpPi0xLHk9W107aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LmlzQXJyYXkodCkmJiEwIT09dFswXS5ob3Zlck9uQm94fSh2KSl7dyh0LGUsYSk7dmFyIHg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPS0xLG89W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0saS5mdWxsRGF0YS5fZXhwYW5kZWRJbmRleD09PXIuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXgpe2lmKCEwPT09aS5ob3Zlck9uQm94KWJyZWFrO3ZvaWQgMCE9PWkucG9pbnROdW1iZXI/YT1pLnBvaW50TnVtYmVyOnZvaWQgMCE9PWkuYmluTnVtYmVyJiYoYT1pLmJpbk51bWJlcixvPWkucG9pbnROdW1iZXJzKTticmVha31yZXR1cm57cG9pbnROdW1iZXI6YSxwb2ludE51bWJlcnM6byxzZWFyY2hJbmZvOnJ9fSh2LHM9VChlLHIsbixpKSk7aWYoeC5wb2ludE51bWJlcnMubGVuZ3RoPjA/ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKShyPXRbaV0pLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzJiZyLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD4wJiZhLnB1c2gocik7aWYoMT09PWEubGVuZ3RoJiZhWzBdPT09ZS5zZWFyY2hJbmZvJiYobj1lLnNlYXJjaEluZm8uY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD09PWUucG9pbnROdW1iZXJzLmxlbmd0aCl7Zm9yKGk9MDtpPGUucG9pbnROdW1iZXJzLmxlbmd0aDtpKyspaWYobi5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGUucG9pbnROdW1iZXJzW2ldKTwwKXJldHVybiExO3JldHVybiEwfXJldHVybiExfShzLHgpOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTA7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPXRbbl0sKHI9ZS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMpe2lmKHIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjEpcmV0dXJuITE7aWYoKGkrPXIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoKT4xKXJldHVybiExfXJldHVybiAxPT09aX0ocykmJihoPU0oeCkpKXtmb3IobyYmby5yZW1vdmUoKSxnPTA7ZzxzLmxlbmd0aDtnKyspKGw9c1tnXSkuX21vZHVsZS5zZWxlY3RQb2ludHMobCwhMSk7UyhlLHMpLGsoYSksbSYmZS5lbWl0KCJwbG90bHlfZGVzZWxlY3QiLG51bGwpfWVsc2V7Zm9yKHA9dC5zaGlmdEtleSYmKHZvaWQgMCE9PWg/aDpNKHgpKSxjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57cG9pbnROdW1iZXI6dCxzZWFyY2hJbmZvOmUsc3VidHJhY3Q6cn19KHgucG9pbnROdW1iZXIseC5zZWFyY2hJbmZvLHApLHU9XyhhLnNlbGVjdGlvbkRlZnMuY29uY2F0KFtjXSkpLGc9MDtnPHMubGVuZ3RoO2crKylpZihmPUUoc1tnXS5fbW9kdWxlLnNlbGVjdFBvaW50cyhzW2ddLHUpLHNbZ10pLHkubGVuZ3RoKWZvcih2YXIgYj0wO2I8Zi5sZW5ndGg7YisrKXkucHVzaChmW2JdKTtlbHNlIHk9ZjtTKGUscyxkPXtwb2ludHM6eX0pLGMmJmEmJmEuc2VsZWN0aW9uRGVmcy5wdXNoKGMpLG8mJkEoYS5tZXJnZWRQb2x5Z29ucyxvKSxtJiZlLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsZCl9fX1mdW5jdGlvbiB4KHQpe3JldHVybiJwb2ludE51bWJlciJpbiB0JiYic2VhcmNoSW5mbyJpbiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJue3htaW46MCx4bWF4OjAseW1pbjowLHltYXg6MCxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4O3JldHVybiBpLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4PT09YSYmbj09PXQucG9pbnROdW1iZXJ9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExLHN1YnRyYWN0OnQuc3VidHJhY3R9fWZ1bmN0aW9uIF8odCl7Zm9yKHZhciBlPVtdLHI9eCh0WzBdKT8wOnRbMF1bMF1bMF0sbj1yLGk9eCh0WzBdKT8wOnRbMF1bMF1bMV0sYT1pLG89MDtvPHQubGVuZ3RoO28rKylpZih4KHRbb10pKWUucHVzaChiKHRbb10pKTtlbHNle3ZhciBsPXMudGVzdGVyKHRbb10pO2wuc3VidHJhY3Q9dFtvXS5zdWJ0cmFjdCxlLnB1c2gobCkscj1NYXRoLm1pbihyLGwueG1pbiksbj1NYXRoLm1heChuLGwueG1heCksaT1NYXRoLm1pbihpLGwueW1pbiksYT1NYXRoLm1heChhLGwueW1heCl9cmV0dXJue3htaW46cix4bWF4Om4seW1pbjppLHltYXg6YSxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24odCxyLG4saSl7Zm9yKHZhciBhPSExLG89MDtvPGUubGVuZ3RoO28rKyllW29dLmNvbnRhaW5zKHQscixuLGkpJiYoYT0hMT09PWVbb10uc3VidHJhY3QpO3JldHVybiBhfSxpc1JlY3Q6ITEsZGVnZW5lcmF0ZTohMX19ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49ZS5fZnVsbExheW91dCxpPW4uX3pvb21sYXllcixhPXIucGxvdGluZm8sbz1uLl9sYXN0U2VsZWN0ZWRTdWJwbG90JiZuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PT09YS5pZCxzPXQuc2hpZnRLZXl8fHQuYWx0S2V5O28mJnMmJmEuc2VsZWN0aW9uJiZhLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzJiYhci5zZWxlY3Rpb25EZWZzPyhyLnNlbGVjdGlvbkRlZnM9YS5zZWxlY3Rpb24uc2VsZWN0aW9uRGVmcyxyLm1lcmdlZFBvbHlnb25zPWEuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zKTpzJiZhLnNlbGVjdGlvbnx8ayhyKSxvfHwoQyhpKSxuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PWEuaWQpfWZ1bmN0aW9uIGsodCl7dmFyIGU9dC5wbG90aW5mbztlLnNlbGVjdGlvbj17fSxlLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzPXQuc2VsZWN0aW9uRGVmcz1bXSxlLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucz10Lm1lcmdlZFBvbHlnb25zPVtdfWZ1bmN0aW9uIFQodCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD1lLm1hcChtKSxjPXIubWFwKG0pO2ZvcihvPTA7bzx0LmNhbGNkYXRhLmxlbmd0aDtvKyspaWYoITA9PT0oYT0oaT10LmNhbGNkYXRhW29dKVswXS50cmFjZSkudmlzaWJsZSYmYS5fbW9kdWxlJiZhLl9tb2R1bGUuc2VsZWN0UG9pbnRzKWlmKCFufHxhLnN1YnBsb3QhPT1uJiZhLmdlbyE9PW4paWYoInNwbG9tIj09PWEudHlwZSYmYS5feGF4ZXNbbFswXV0mJmEuX3lheGVzW2NbMF1dKXt2YXIgZj1oKGEuX21vZHVsZSxpLGVbMF0sclswXSk7Zi5zY2VuZT10Ll9mdWxsTGF5b3V0Ll9zcGxvbVNjZW5lc1thLnVpZF0scy5wdXNoKGYpfWVsc2V7aWYoLTE9PT1sLmluZGV4T2YoYS54YXhpcykpY29udGludWU7aWYoLTE9PT1jLmluZGV4T2YoYS55YXhpcykpY29udGludWU7cy5wdXNoKGgoYS5fbW9kdWxlLGksdSh0LGEueGF4aXMpLHUodCxhLnlheGlzKSkpfWVsc2Ugcy5wdXNoKGgoYS5fbW9kdWxlLGksZVswXSxyWzBdKSk7cmV0dXJuIHM7ZnVuY3Rpb24gaCh0LGUscixuKXtyZXR1cm57X21vZHVsZTp0LGNkOmUseGF4aXM6cix5YXhpczpufX19ZnVuY3Rpb24gQSh0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2kucHVzaChhLmpvaW4oIkwiKSsiTCIrYVswXSl9bj10Lmxlbmd0aD4wPyJNIitpLmpvaW4oIk0iKSsiWiI6Ik0wLDBaIixlLmF0dHIoImQiLG4pfWZ1bmN0aW9uIE0odCl7dmFyIGU9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLHI9dC5wb2ludE51bWJlcixuPXQucG9pbnROdW1iZXJzLGk9bi5sZW5ndGg+MD9uWzBdOnI7cmV0dXJuISFlLnNlbGVjdGVkcG9pbnRzJiZlLnNlbGVjdGVkcG9pbnRzLmluZGV4T2YoaSk+LTF9ZnVuY3Rpb24gUyh0LGUscil7dmFyIG4sYSxvLHM7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGw9ZVtuXS5jZFswXS50cmFjZS5fZnVsbElucHV0LGM9dC5fZnVsbExheW91dC5fdHJhY2VQcmVHVUlbbC51aWRdO3ZvaWQgMD09PWMuc2VsZWN0ZWRwb2ludHMmJihjLnNlbGVjdGVkcG9pbnRzPWwuX2lucHV0LnNlbGVjdGVkcG9pbnRzfHxudWxsKX1pZihyKXt2YXIgdT1yLnBvaW50c3x8W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocz1lW25dLmNkWzBdLnRyYWNlKS5faW5wdXQuc2VsZWN0ZWRwb2ludHM9cy5fZnVsbElucHV0LnNlbGVjdGVkcG9pbnRzPVtdLHMuX2Z1bGxJbnB1dCE9PXMmJihzLnNlbGVjdGVkcG9pbnRzPVtdKTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgcD11W25dLGQ9cC5kYXRhLGc9cC5mdWxsRGF0YTtwLnBvaW50SW5kaWNlcz8oW10ucHVzaC5hcHBseShkLnNlbGVjdGVkcG9pbnRzLHAucG9pbnRJbmRpY2VzKSxzLl9mdWxsSW5wdXQhPT1zJiZbXS5wdXNoLmFwcGx5KGcuc2VsZWN0ZWRwb2ludHMscC5wb2ludEluZGljZXMpKTooZC5zZWxlY3RlZHBvaW50cy5wdXNoKHAucG9pbnRJbmRleCkscy5fZnVsbElucHV0IT09cyYmZy5zZWxlY3RlZHBvaW50cy5wdXNoKHAucG9pbnRJbmRleCkpfX1lbHNlIGZvcihuPTA7bjxlLmxlbmd0aDtuKyspZGVsZXRlKHM9ZVtuXS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMsZGVsZXRlIHMuX2lucHV0LnNlbGVjdGVkcG9pbnRzLHMuX2Z1bGxJbnB1dCE9PXMmJmRlbGV0ZSBzLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM7dmFyIHY9ITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7cz0obz0oYT1lW25dKS5jZClbMF0udHJhY2UsaS50cmFjZUlzKHMsInJlZ2wiKSYmKHY9ITApO3ZhciBtPWEuX21vZHVsZSx5PW0uc3R5bGVPblNlbGVjdHx8bS5zdHlsZTt5JiZ5KHQsbyl9diYmKGYodCksaCh0KSl9ZnVuY3Rpb24gRSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPWUuY2Qsbj1lLmNkWzBdLnRyYWNlLGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldPWModFtpXSxuLHIpO3JldHVybiB0fWZ1bmN0aW9uIEModCl7dC5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZSIpLnJlbW92ZSgpfWUuZXhwb3J0cz17cHJlcFNlbGVjdDpmdW5jdGlvbih0LGUscixpLHMpe3ZhciBjLHUsZixoLG0seCxiLE09aS5nZCxDPU0uX2Z1bGxMYXlvdXQsTD1DLl96b29tbGF5ZXIsej1pLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksTz1pLnBsb3RpbmZvLEk9Ty54YXhpcy5fb2Zmc2V0LEQ9Ty55YXhpcy5fb2Zmc2V0LFA9ZS16LmxlZnQsUj1yLXoudG9wLEY9UCxCPVIsTj0iTSIrUCsiLCIrUixqPWkueGF4ZXNbMF0uX2xlbmd0aCxWPWkueWF4ZXNbMF0uX2xlbmd0aCxVPWkueGF4ZXMuY29uY2F0KGkueWF4ZXMpLHE9dC5hbHRLZXk7dyh0LE0saSksImxhc3NvIj09PXMmJihjPWcoW1tQLFJdXSxwLkJFTkRQWCkpO3ZhciBIPUwuc2VsZWN0QWxsKCJwYXRoLnNlbGVjdC1vdXRsaW5lLSIrTy5pZCkuZGF0YShbMSwyXSk7SC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4ic2VsZWN0LW91dGxpbmUgc2VsZWN0LW91dGxpbmUtIit0KyIgc2VsZWN0LW91dGxpbmUtIitPLmlkfSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSSsiLCAiK0QrIikiKS5hdHRyKCJkIixOKyJaIik7dmFyIEcsWT1MLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuc3R5bGUoe2ZpbGw6YS5iYWNrZ3JvdW5kLHN0cm9rZTphLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOjF9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitJKyIsICIrRCsiKSIpLmF0dHIoImQiLCJNMCwwWiIpLFc9Qy5fdWlkK3AuU0VMRUNUSUQsWD1bXSxaPVQoTSxpLnhheGVzLGkueWF4ZXMsaS5zdWJwbG90KTtmdW5jdGlvbiAkKHQpe3ZhciBlPSJ5Ij09PXQuX2lkLmNoYXJBdCgwKT8xOjA7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LnAyZChyW2VdKX19ZnVuY3Rpb24gSih0LGUpe3JldHVybiB0LWV9Rz1PLmZpbGxSYW5nZUl0ZW1zP08uZmlsbFJhbmdlSXRlbXM6InNlbGVjdCI9PT1zP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3IobT0wO208VS5sZW5ndGg7bSsrKXt2YXIgbj1VW21dLGk9bi5faWQuY2hhckF0KDApO3Jbbi5faWRdPVtuLnAyZChlW2krIm1pbiJdKSxuLnAyZChlW2krIm1heCJdKV0uc29ydChKKX19OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lmxhc3NvUG9pbnRzPXt9O2ZvcihtPTA7bTxVLmxlbmd0aDttKyspe3ZhciBpPVVbbV07bltpLl9pZF09ci5maWx0ZXJlZC5tYXAoJChpKSl9fSxpLm1vdmVGbj1mdW5jdGlvbih0LGUpe0Y9TWF0aC5tYXgoMCxNYXRoLm1pbihqLHQrUCkpLEI9TWF0aC5tYXgoMCxNYXRoLm1pbihWLGUrUikpO3ZhciByPU1hdGguYWJzKEYtUCksYT1NYXRoLmFicyhCLVIpO2lmKCJzZWxlY3QiPT09cyl7dmFyIG89Qy5zZWxlY3RkaXJlY3Rpb247ImgiPT09KG89ImFueSI9PT1DLnNlbGVjdGRpcmVjdGlvbj9hPE1hdGgubWluKC42KnIsZCk/ImgiOnI8TWF0aC5taW4oLjYqYSxkKT8idiI6ImQiOkMuc2VsZWN0ZGlyZWN0aW9uKT8oKGg9W1tQLDBdLFtQLFZdLFtGLFZdLFtGLDBdXSkueG1pbj1NYXRoLm1pbihQLEYpLGgueG1heD1NYXRoLm1heChQLEYpLGgueW1pbj1NYXRoLm1pbigwLFYpLGgueW1heD1NYXRoLm1heCgwLFYpLFkuYXR0cigiZCIsIk0iK2gueG1pbisiLCIrKFItZCkrImgtNHYiKzIqZCsiaDRaTSIrKGgueG1heC0xKSsiLCIrKFItZCkrImg0diIrMipkKyJoLTRaIikpOiJ2Ij09PW8/KChoPVtbMCxSXSxbMCxCXSxbaixCXSxbaixSXV0pLnhtaW49TWF0aC5taW4oMCxqKSxoLnhtYXg9TWF0aC5tYXgoMCxqKSxoLnltaW49TWF0aC5taW4oUixCKSxoLnltYXg9TWF0aC5tYXgoUixCKSxZLmF0dHIoImQiLCJNIisoUC1kKSsiLCIraC55bWluKyJ2LTRoIisyKmQrInY0Wk0iKyhQLWQpKyIsIisoaC55bWF4LTEpKyJ2NGgiKzIqZCsidi00WiIpKToiZCI9PT1vJiYoKGg9W1tQLFJdLFtQLEJdLFtGLEJdLFtGLFJdXSkueG1pbj1NYXRoLm1pbihQLEYpLGgueG1heD1NYXRoLm1heChQLEYpLGgueW1pbj1NYXRoLm1pbihSLEIpLGgueW1heD1NYXRoLm1heChSLEIpLFkuYXR0cigiZCIsIk0wLDBaIikpfWVsc2UibGFzc28iPT09cyYmKGMuYWRkUHQoW0YsQl0pLGg9Yy5maWx0ZXJlZCk7aS5zZWxlY3Rpb25EZWZzJiZpLnNlbGVjdGlvbkRlZnMubGVuZ3RoPyhmPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcj9uLmRpZmZlcmVuY2Uoe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9uczpuLnVuaW9uKHtyZWdpb25zOnQsaW52ZXJ0ZWQ6ITF9LHtyZWdpb25zOltlXSxpbnZlcnRlZDohMX0pLnJlZ2lvbnN9KGkubWVyZ2VkUG9seWdvbnMsaCxxKSxoLnN1YnRyYWN0PXEsdT1fKGkuc2VsZWN0aW9uRGVmcy5jb25jYXQoW2hdKSkpOihmPVtoXSx1PXYoaCkpLEEoZixIKSxsLnRocm90dGxlKFcscC5TRUxFQ1RERUxBWSxmdW5jdGlvbigpe3ZhciB0O1g9W107dmFyIGUscj1bXTtmb3IobT0wO208Wi5sZW5ndGg7bSsrKWlmKGU9KHg9WlttXSkuX21vZHVsZS5zZWxlY3RQb2ludHMoeCx1KSxyLnB1c2goZSksdD1FKGUseCksWC5sZW5ndGgpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspWC5wdXNoKHRbbl0pO2Vsc2UgWD10O1MoTSxaLGI9e3BvaW50czpYfSksRyhiLGgsYyksaS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0aW5nIixiKX0pfSxpLmNsaWNrRm49ZnVuY3Rpb24odCxlKXt2YXIgcj1DLmNsaWNrbW9kZTtZLnJlbW92ZSgpLGwuZG9uZShXKS50aGVuKGZ1bmN0aW9uKCl7aWYobC5jbGVhcihXKSwyPT09dCl7Zm9yKEgucmVtb3ZlKCksbT0wO208Wi5sZW5ndGg7bSsrKSh4PVpbbV0pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHgsITEpO1MoTSxaKSxrKGkpLE0uZW1pdCgicGxvdGx5X2Rlc2VsZWN0IixudWxsKX1lbHNlIHIuaW5kZXhPZigic2VsZWN0Iik+LTEmJnkoZSxNLGkueGF4ZXMsaS55YXhlcyxpLnN1YnBsb3QsaSxIKSwiZXZlbnQiPT09ciYmTS5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLHZvaWQgMCk7by5jbGljayhNLGUpfSl9LGkuZG9uZUZuPWZ1bmN0aW9uKCl7WS5yZW1vdmUoKSxsLmRvbmUoVykudGhlbihmdW5jdGlvbigpe2wuY2xlYXIoVyksaS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLGIpLGgmJmkuc2VsZWN0aW9uRGVmcyYmKGguc3VidHJhY3Q9cSxpLnNlbGVjdGlvbkRlZnMucHVzaChoKSxpLm1lcmdlZFBvbHlnb25zLmxlbmd0aD0wLFtdLnB1c2guYXBwbHkoaS5tZXJnZWRQb2x5Z29ucyxmKSl9KX19LGNsZWFyU2VsZWN0OkMsc2VsZWN0T25DbGljazp5fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2MTIsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6Njg1LCIuLi8uLi9saWIvcG9seWdvbiI6NzEyLCIuLi8uLi9saWIvdGhyb3R0bGUiOjcyNSwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjczOSwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9heGlzX2lkcyI6NzUxLCIuL2NvbnN0YW50cyI6NzU0LHBvbHlib29sanM6NDY1fV0sNzY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz1hLmNsZWFuTnVtYmVyLHM9YS5tczJEYXRlVGltZSxsPWEuZGF0ZVRpbWUybXMsYz1hLmVuc3VyZU51bWJlcix1PWEuaXNBcnJheU9yVHlwZWRBcnJheSxmPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxoPWYuRlBfU0FGRSxwPWYuQkFETlVNLGQ9Zi5MT0dfQ0xJUCxnPXQoIi4vY29uc3RhbnRzIiksdj10KCIuL2F4aXNfaWRzIik7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gTWF0aC5wb3coMTAsdCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbnVsbCE9dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXQuX2lkfHwieCIsZj1yLmNoYXJBdCgwKTtmdW5jdGlvbiB4KGUscil7aWYoZT4wKXJldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMTA7aWYoZTw9MCYmciYmdC5yYW5nZSYmMj09PXQucmFuZ2UubGVuZ3RoKXt2YXIgbj10LnJhbmdlWzBdLGk9dC5yYW5nZVsxXTtyZXR1cm4uNSoobitpLTIqZCpNYXRoLmFicyhuLWkpKX1yZXR1cm4gcH1mdW5jdGlvbiBiKGUscixuKXt2YXIgbz1sKGUsbnx8dC5jYWxlbmRhcik7aWYobz09PXApe2lmKCFpKGUpKXJldHVybiBwO2U9K2U7dmFyIHM9TWF0aC5mbG9vcigxMCphLm1vZChlKy4wNSwxKSksYz1NYXRoLnJvdW5kKGUtcy8xMCk7bz1sKG5ldyBEYXRlKGMpKStzLzEwfXJldHVybiBvfWZ1bmN0aW9uIF8oZSxyLG4pe3JldHVybiBzKGUscixufHx0LmNhbGVuZGFyKX1mdW5jdGlvbiB3KGUpe3JldHVybiB0Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZSldfWZ1bmN0aW9uIGsoZSl7aWYoeShlKSl7aWYodm9pZCAwPT09dC5fY2F0ZWdvcmllc01hcCYmKHQuX2NhdGVnb3JpZXNNYXA9e30pLHZvaWQgMCE9PXQuX2NhdGVnb3JpZXNNYXBbZV0pcmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV07dC5fY2F0ZWdvcmllcy5wdXNoKGUpO3ZhciByPXQuX2NhdGVnb3JpZXMubGVuZ3RoLTE7cmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV09cixyfXJldHVybiBwfWZ1bmN0aW9uIFQoZSl7aWYodC5fY2F0ZWdvcmllc01hcClyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXX1mdW5jdGlvbiBBKHQpe3ZhciBlPVQodCk7cmV0dXJuIHZvaWQgMCE9PWU/ZTppKHQpPyt0OnZvaWQgMH1mdW5jdGlvbiBNKGUpe3JldHVybiBpKGUpP24ucm91bmQodC5fYit0Ll9tKmUsMik6cH1mdW5jdGlvbiBTKGUpe3JldHVybihlLXQuX2IpL3QuX219dC5jMmw9ImxvZyI9PT10LnR5cGU/eDpjLHQubDJjPSJsb2ciPT09dC50eXBlP206Yyx0LmwycD1NLHQucDJsPVMsdC5jMnA9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gTSh4KHQsZSkpfTpNLHQucDJjPSJsb2ciPT09dC50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiBtKFModCkpfTpTLC0xIT09WyJsaW5lYXIiLCItIl0uaW5kZXhPZih0LnR5cGUpPyh0LmQycj10LnIyZD10LmQyYz10LnIyYz10LmQybD10LnIybD1vLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPWMsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKG8oZSkpfSx0LnAyZD10LnAycj1TLHQuY2xlYW5Qb3M9Yyk6ImxvZyI9PT10LnR5cGU/KHQuZDJyPXQuZDJsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgobyh0KSxlKX0sdC5yMmQ9dC5yMmM9ZnVuY3Rpb24odCl7cmV0dXJuIG0obyh0KSl9LHQuZDJjPXQucjJsPW8sdC5jMmQ9dC5sMnI9Yyx0LmMycj14LHQubDJkPW0sdC5kMnA9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5sMnAodC5kMnIoZSxyKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBtKFModCkpfSx0LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobyhlKSl9LHQucDJyPVMsdC5jbGVhblBvcz1jKToiZGF0ZSI9PT10LnR5cGU/KHQuZDJyPXQucjJkPWEuaWRlbnRpdHksdC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9Yix0LmMyZD10LmMycj10LmwyZD10Lmwycj1fLHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5sMnAoYihlLDAsbikpfSx0LnAyZD10LnAycj1mdW5jdGlvbih0LGUscil7cmV0dXJuIF8oUyh0KSxlLHIpfSx0LmNsZWFuUG9zPWZ1bmN0aW9uKGUpe3JldHVybiBhLmNsZWFuRGF0ZShlLHAsdC5jYWxlbmRhcil9KToiY2F0ZWdvcnkiPT09dC50eXBlPyh0LmQyYz10LmQybD1rLHQucjJkPXQuYzJkPXQubDJkPXcsdC5kMnI9dC5kMmxfbm9hZGQ9QSx0LnIyYz1mdW5jdGlvbihlKXt2YXIgcj1BKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5mcmFjdGlvbjJyKC41KX0sdC5sMnI9dC5jMnI9Yyx0LnIybD1BLHQuZDJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycCh0LnIyYyhlKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB3KFModCkpfSx0LnIycD10LmQycCx0LnAycj1TLHQuY2xlYW5Qb3M9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQ/dDpjKHQpfSk6Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlJiYodC5yMmQ9dC5jMmQ9dC5sMmQ9dyx0LmQycj10LmQybF9ub2FkZD1BLHQucjJjPWZ1bmN0aW9uKGUpe3ZhciByPUEoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmZyYWN0aW9uMnIoLjUpfSx0LnIyY19qdXN0X2luZGljZXM9VCx0Lmwycj10LmMycj1jLHQucjJsPUEsdC5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHQucjJjKGUpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHcoUyh0KSl9LHQucjJwPXQuZDJwLHQucDJyPVMsdC5jbGVhblBvcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8InN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQ/dDpjKHQpfSx0LnNldHVwTXVsdGlDYXRlZ29yeT1mdW5jdGlvbihuKXt2YXIgaSxvLHM9dC5fdHJhY2VJbmRpY2VzLGw9ZS5fYXhpc01hdGNoR3JvdXBzO2lmKGwmJmwubGVuZ3RoJiYwPT09dC5fY2F0ZWdvcmllcy5sZW5ndGgpZm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGM9bFtpXTtpZihjW3JdKWZvcih2YXIgaCBpbiBjKWlmKGghPT1yKXt2YXIgcD1lW3YuaWQybmFtZShoKV07cz1zLmNvbmNhdChwLl90cmFjZUluZGljZXMpfX12YXIgZD1bWzAse31dLFswLHt9XV0sZz1bXTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXt2YXIgbT1uW3NbaV1dO2lmKGYgaW4gbSl7dmFyIHg9bVtmXSxiPW0uX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgoeCk7aWYodSh4WzBdKSYmdSh4WzFdKSlmb3Iobz0wO288YjtvKyspe3ZhciBfPXhbMF1bb10sdz14WzFdW29dO3koXykmJnkodykmJihnLnB1c2goW18sd10pLF8gaW4gZFswXVsxXXx8KGRbMF1bMV1bX109ZFswXVswXSsrKSx3IGluIGRbMV1bMV18fChkWzFdWzFdW3ddPWRbMV1bMF0rKykpfX19Zm9yKGcuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPWRbMF1bMV0sbj1yW3RbMF1dLXJbZVswXV07aWYobilyZXR1cm4gbjt2YXIgaT1kWzFdWzFdO3JldHVybiBpW3RbMV1dLWlbZVsxXV19KSxpPTA7aTxnLmxlbmd0aDtpKyspayhnW2ldKX0pLHQuZnJhY3Rpb24ycj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiB0LmwycihyK2UqKG4tcikpfSx0LnIyZnJhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHI9dC5yMmwodC5yYW5nZVswXSksbj10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4odC5yMmwoZSktcikvKG4tcil9LHQuY2xlYW5SYW5nZT1mdW5jdGlvbihlLHIpe3J8fChyPXt9KSxlfHwoZT0icmFuZ2UiKTt2YXIgbixvLHM9YS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpO2lmKG89KG89ImRhdGUiPT09dC50eXBlP2EuZGZsdFJhbmdlKHQuY2FsZW5kYXIpOiJ5Ij09PWY/Zy5ERkxUUkFOR0VZOnIuZGZsdFJhbmdlfHxnLkRGTFRSQU5HRVgpLnNsaWNlKCkscyYmMj09PXMubGVuZ3RoKWZvcigiZGF0ZSI9PT10LnR5cGUmJihzWzBdPWEuY2xlYW5EYXRlKHNbMF0scCx0LmNhbGVuZGFyKSxzWzFdPWEuY2xlYW5EYXRlKHNbMV0scCx0LmNhbGVuZGFyKSksbj0wO248MjtuKyspaWYoImRhdGUiPT09dC50eXBlKXtpZighYS5pc0RhdGVUaW1lKHNbbl0sdC5jYWxlbmRhcikpe3RbZV09bzticmVha31pZih0LnIybChzWzBdKT09PXQucjJsKHNbMV0pKXt2YXIgbD1hLmNvbnN0cmFpbih0LnIybChzWzBdKSxhLk1JTl9NUysxZTMsYS5NQVhfTVMtMWUzKTtzWzBdPXQubDJyKGwtMWUzKSxzWzFdPXQubDJyKGwrMWUzKTticmVha319ZWxzZXtpZighaShzW25dKSl7aWYoIWkoc1sxLW5dKSl7dFtlXT1vO2JyZWFrfXNbbl09c1sxLW5dKihuPzEwOi4xKX1pZihzW25dPC1oP3Nbbl09LWg6c1tuXT5oJiYoc1tuXT1oKSxzWzBdPT09c1sxXSl7dmFyIGM9TWF0aC5tYXgoMSxNYXRoLmFicygxZS02KnNbMF0pKTtzWzBdLT1jLHNbMV0rPWN9fWVsc2UgYS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLnNldChvKX0sdC5zZXRTY2FsZT1mdW5jdGlvbihyKXt2YXIgbj1lLl9zaXplO2lmKHQub3ZlcmxheWluZyl7dmFyIGk9di5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LHQub3ZlcmxheWluZyk7dC5kb21haW49aS5kb21haW59dmFyIGE9ciYmdC5fcj8iX3IiOiJyYW5nZSIsbz10LmNhbGVuZGFyO3QuY2xlYW5SYW5nZShhKTt2YXIgcz10LnIybCh0W2FdWzBdLG8pLGw9dC5yMmwodFthXVsxXSxvKTtpZigieSI9PT1mPyh0Ll9vZmZzZXQ9bi50KygxLXQuZG9tYWluWzFdKSpuLmgsdC5fbGVuZ3RoPW4uaCoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyhzLWwpLHQuX2I9LXQuX20qbCk6KHQuX29mZnNldD1uLmwrdC5kb21haW5bMF0qbi53LHQuX2xlbmd0aD1uLncqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8obC1zKSx0Ll9iPS10Ll9tKnMpLCFpc0Zpbml0ZSh0Ll9tKXx8IWlzRmluaXRlKHQuX2IpfHx0Ll9sZW5ndGg8MCl0aHJvdyBlLl9yZXBsb3R0aW5nPSExLG5ldyBFcnJvcigiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBheGlzIHNjYWxpbmciKX0sdC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpLG8scyxsPXQudHlwZSxjPSJkYXRlIj09PWwmJmVbcisiY2FsZW5kYXIiXTtpZihyIGluIGUpe2lmKG49ZVtyXSxzPWUuX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgobiksYS5pc1R5cGVkQXJyYXkobikmJigibGluZWFyIj09PWx8fCJsb2ciPT09bCkpe2lmKHM9PT1uLmxlbmd0aClyZXR1cm4gbjtpZihuLnN1YmFycmF5KXJldHVybiBuLnN1YmFycmF5KDAscyl9aWYoIm11bHRpY2F0ZWdvcnkiPT09bClyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXt2YXIgaT0odFswXXx8W10pW25dLGE9KHRbMV18fFtdKVtuXTtyW25dPVQoW2ksYV0pfXJldHVybiByfShuLHMpO2ZvcihpPW5ldyBBcnJheShzKSxvPTA7bzxzO28rKylpW29dPXQuZDJjKG5bb10sMCxjKX1lbHNle3ZhciB1PXIrIjAiaW4gZT90LmQyYyhlW3IrIjAiXSwwLGMpOjAsZj1lWyJkIityXT9OdW1iZXIoZVsiZCIrcl0pOjE7Zm9yKG49ZVt7eDoieSIseToieCJ9W3JdXSxzPWUuX2xlbmd0aHx8bi5sZW5ndGgsaT1uZXcgQXJyYXkocyksbz0wO288cztvKyspaVtvXT11K28qZn1yZXR1cm4gaX0sdC5pc1ZhbGlkUmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aCYmaSh0LnIybChlWzBdKSkmJmkodC5yMmwoZVsxXSkpfSx0LmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuYzJsKGVbZl0sbnVsbCxyKSxpPXQucjJsKHQucmFuZ2VbMF0pLGE9dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIGk8YT9pPD1uJiZuPD1hOmE8PW4mJm48PWl9LHQuY2xlYXJDYWxjPWZ1bmN0aW9uKCl7dmFyIG49ZnVuY3Rpb24oKXt0Ll9jYXRlZ29yaWVzPVtdLHQuX2NhdGVnb3JpZXNNYXA9e319LGk9ZS5fYXhpc01hdGNoR3JvdXBzO2lmKGkmJmkubGVuZ3RoKXtmb3IodmFyIGE9ITEsbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO2lmKHNbcl0pe2E9ITA7dmFyIGw9bnVsbCxjPW51bGw7Zm9yKHZhciB1IGluIHMpe3ZhciBmPWVbdi5pZDJuYW1lKHUpXTtpZihmLl9jYXRlZ29yaWVzKXtsPWYuX2NhdGVnb3JpZXMsYz1mLl9jYXRlZ29yaWVzTWFwO2JyZWFrfX1sJiZjPyh0Ll9jYXRlZ29yaWVzPWwsdC5fY2F0ZWdvcmllc01hcD1jKTpuKCk7YnJlYWt9fWF8fG4oKX1lbHNlIG4oKTtpZih0Ll9pbml0aWFsQ2F0ZWdvcmllcylmb3IodmFyIGg9MDtoPHQuX2luaXRpYWxDYXRlZ29yaWVzLmxlbmd0aDtoKyspayh0Ll9pbml0aWFsQ2F0ZWdvcmllc1toXSl9O3ZhciBFPWUuX2QzbG9jYWxlOyJkYXRlIj09PXQudHlwZSYmKHQuX2RhdGVGb3JtYXQ9RT9FLnRpbWVGb3JtYXQudXRjOm4udGltZS5mb3JtYXQudXRjLHQuX2V4dHJhRm9ybWF0PWUuX2V4dHJhRm9ybWF0KSx0Ll9zZXBhcmF0b3JzPWUuc2VwYXJhdG9ycyx0Ll9udW1Gb3JtYXQ9RT9FLm51bWJlckZvcm1hdDpuLmZvcm1hdCxkZWxldGUgdC5fbWluRHRpY2ssZGVsZXRlIHQuX2ZvcmNlVGljazB9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4vYXhpc19pZHMiOjc1MSwiLi9jb25zdGFudHMiOjc1NCxkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw3Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKTtmdW5jdGlvbiBvKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS50aWNrZm9ybWF0c3RvcHMscixhKX1yKCJlbmFibGVkIikmJihyKCJkdGlja3JhbmdlIikscigidmFsdWUiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9WyJzaG93ZXhwb25lbnQiLCJzaG93dGlja3ByZWZpeCIsInNob3d0aWNrc3VmZml4Il0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSk7aWYoZS5ldmVyeShmdW5jdGlvbihyKXtyZXR1cm4gdFtyXT09PXRbZVswXV19KXx8MT09PWUubGVuZ3RoKXJldHVybiB0W2VbMF1dfSh0KTtpZihyKCJ0aWNrcHJlZml4IikmJnIoInNob3d0aWNrcHJlZml4IixjKSxyKCJ0aWNrc3VmZml4IixsLnRpY2tTdWZmaXhEZmx0KSYmcigic2hvd3RpY2tzdWZmaXgiLGMpLHIoInNob3d0aWNrbGFiZWxzIikpe3ZhciB1PWwuZm9udHx8e30sZj1lLmNvbG9yLGg9ZiYmZiE9PWkuY29sb3IuZGZsdD9mOnUuY29sb3I7aWYobi5jb2VyY2VGb250KHIsInRpY2tmb250Iix7ZmFtaWx5OnUuZmFtaWx5LHNpemU6dS5zaXplLGNvbG9yOmh9KSxyKCJ0aWNrYW5nbGUiKSwiY2F0ZWdvcnkiIT09cyl7dmFyIHA9cigidGlja2Zvcm1hdCIpLGQ9dC50aWNrZm9ybWF0c3RvcHM7QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGgmJmEodCxlLHtuYW1lOiJ0aWNrZm9ybWF0c3RvcHMiLGluY2x1c2lvbkF0dHI6ImVuYWJsZWQiLGhhbmRsZUl0ZW1EZWZhdWx0czpvfSkscHx8ImRhdGUiPT09c3x8KHIoInNob3dleHBvbmVudCIsYykscigiZXhwb25lbnRmb3JtYXQiKSxyKCJzZXBhcmF0ZXRob3VzYW5kcyIpKX19fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MH1dLDc2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bi5jb2VyY2UyKHQsZSxpLCJ0aWNrbGVuIikscz1uLmNvZXJjZTIodCxlLGksInRpY2t3aWR0aCIpLGw9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrY29sb3IiLGUuY29sb3IpO3IoInRpY2tzIixhLm91dGVyVGlja3N8fG98fHN8fGw/Im91dHNpZGUiOiIiKXx8KGRlbGV0ZSBlLnRpY2tsZW4sZGVsZXRlIGUudGlja3dpZHRoLGRlbGV0ZSBlLnRpY2tjb2xvcil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3NjB9XSw3Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jbGVhbl90aWNrcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYTsiYXJyYXkiIT09dC50aWNrbW9kZXx8ImxvZyIhPT1pJiYiZGF0ZSIhPT1pP2E9cigidGlja21vZGUiLEFycmF5LmlzQXJyYXkodC50aWNrdmFscyk/ImFycmF5Ijp0LmR0aWNrPyJsaW5lYXIiOiJhdXRvIik6YT1lLnRpY2ttb2RlPSJhdXRvIjtpZigiYXV0byI9PT1hKXIoIm50aWNrcyIpO2Vsc2UgaWYoImxpbmVhciI9PT1hKXt2YXIgbz1lLmR0aWNrPW4uZHRpY2sodC5kdGljayxpKTtlLnRpY2swPW4udGljazAodC50aWNrMCxpLGUuY2FsZW5kYXIsbyl9ZWxzZSBpZigibXVsdGljYXRlZ29yeSIhPT1pKXt2b2lkIDA9PT1yKCJ0aWNrdmFscyIpP2UudGlja21vZGU9ImF1dG8iOnIoInRpY2t0ZXh0Iil9fX0seyIuL2NsZWFuX3RpY2tzIjo3NTN9XSw3NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXt2YXIgbD10Ll9mdWxsTGF5b3V0O2lmKDAhPT1lLmxlbmd0aCl7dmFyIGMsdSxmLGg7cyYmKGM9cygpKTt2YXIgcD1uLmVhc2Uoci5lYXNpbmcpO3JldHVybiB0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGgpLGg9bnVsbCxmdW5jdGlvbigpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl07YS54cjAmJihyW2EucGxvdGluZm8ueGF4aXMuX25hbWUrIi5yYW5nZSJdPWEueHIwLnNsaWNlKCkpLGEueXIwJiYoclthLnBsb3RpbmZvLnlheGlzLl9uYW1lKyIucmFuZ2UiXT1hLnlyMC5zbGljZSgpKX1yZXR1cm4gaS5jYWxsKCJyZWxheW91dCIsdCxyKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZChlW3RdLnBsb3RpbmZvKX0pfSgpfSksdT1EYXRlLm5vdygpLGg9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBuKCl7Zj1EYXRlLm5vdygpO2Zvcih2YXIgYT1NYXRoLm1pbigxLChmLXUpL3IuZHVyYXRpb24pLG89cChhKSxzPTA7czxlLmxlbmd0aDtzKyspZyhlW3NdLG8pO2YtdT5yLmR1cmF0aW9uPyhmdW5jdGlvbigpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl07YS54cjEmJihyW2EucGxvdGluZm8ueGF4aXMuX25hbWUrIi5yYW5nZSJdPWEueHIxLnNsaWNlKCkpLGEueXIxJiYoclthLnBsb3RpbmZvLnlheGlzLl9uYW1lKyIucmFuZ2UiXT1hLnlyMS5zbGljZSgpKX1jJiZjKCksaS5jYWxsKCJyZWxheW91dCIsdCxyKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZChlW3RdLnBsb3RpbmZvKX0pfSgpLGg9d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pKTpoPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSxQcm9taXNlLnJlc29sdmUoKX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQueGF4aXMscj10LnlheGlzO2wuX2RlZnMuc2VsZWN0KCIjIit0LmNsaXBJZCsiPiByZWN0IikuY2FsbChhLnNldFRyYW5zbGF0ZSwwLDApLmNhbGwoYS5zZXRTY2FsZSwxLDEpLHQucGxvdC5jYWxsKGEuc2V0VHJhbnNsYXRlLGUuX29mZnNldCxyLl9vZmZzZXQpLmNhbGwoYS5zZXRTY2FsZSwxLDEpO3ZhciBuPXQucGxvdC5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIgLnRyYWNlIik7bi5zZWxlY3RBbGwoIi5wb2ludCIpLmNhbGwoYS5zZXRQb2ludEdyb3VwU2NhbGUsMSwxKSxuLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpLmNhbGwoYS5zZXRUZXh0UG9pbnRzU2NhbGUsMSwxKSxuLmNhbGwoYS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHQpfWZ1bmN0aW9uIGcoZSxyKXt2YXIgbj1lLnBsb3RpbmZvLGk9bi54YXhpcyxzPW4ueWF4aXMsbD1lLnhyMCxjPWUueHIxLHU9aS5fbGVuZ3RoLGY9ZS55cjAsaD1lLnlyMSxwPXMuX2xlbmd0aCxkPSEhYyxnPSEhaCx2PVtdO2lmKGQpe3ZhciBtPWxbMV0tbFswXSx5PWNbMV0tY1swXTt2WzBdPShsWzBdKigxLXIpK3IqY1swXS1sWzBdKS8obFsxXS1sWzBdKSp1LHZbMl09dSooMS1yK3IqeS9tKSxpLnJhbmdlWzBdPWxbMF0qKDEtcikrcipjWzBdLGkucmFuZ2VbMV09bFsxXSooMS1yKStyKmNbMV19ZWxzZSB2WzBdPTAsdlsyXT11O2lmKGcpe3ZhciB4PWZbMV0tZlswXSxiPWhbMV0taFswXTt2WzFdPShmWzFdKigxLXIpK3IqaFsxXS1mWzFdKS8oZlswXS1mWzFdKSpwLHZbM109cCooMS1yK3IqYi94KSxzLnJhbmdlWzBdPWZbMF0qKDEtcikrcipoWzBdLHMucmFuZ2VbMV09ZlsxXSooMS1yKStyKmhbMV19ZWxzZSB2WzFdPTAsdlszXT1wO28uZHJhd09uZSh0LGkse3NraXBUaXRsZTohMH0pLG8uZHJhd09uZSh0LHMse3NraXBUaXRsZTohMH0pLG8ucmVkcmF3Q29tcG9uZW50cyh0LFtpLl9pZCxzLl9pZF0pO3ZhciBfPWQ/dS92WzJdOjEsdz1nP3AvdlszXToxLGs9ZD92WzBdOjAsVD1nP3ZbMV06MCxBPWQ/dlswXS92WzJdKnU6MCxNPWc/dlsxXS92WzNdKnA6MCxTPWkuX29mZnNldC1BLEU9cy5fb2Zmc2V0LU07bi5jbGlwUmVjdC5jYWxsKGEuc2V0VHJhbnNsYXRlLGssVCkuY2FsbChhLnNldFNjYWxlLDEvXywxL3cpLG4ucGxvdC5jYWxsKGEuc2V0VHJhbnNsYXRlLFMsRSkuY2FsbChhLnNldFNjYWxlLF8sdyksYS5zZXRQb2ludEdyb3VwU2NhbGUobi56b29tU2NhbGVQdHMsMS9fLDEvdyksYS5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQsMS9fLDEvdyl9by5yZWRyYXdDb21wb25lbnRzKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9heGVzIjo3NDgsZDM6MTU0fV0sNzcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxpPXQoIi4vYXhpc19hdXRvdHlwZSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJue3Y6IngiLGg6InkifVt0Lm9yaWVudGF0aW9ufHwidiJdfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1hKHQpLGk9bih0LCJib3gtdmlvbGluIiksbz1uKHQuX2Z1bGxJbnB1dHx8e30sImNhbmRsZXN0aWNrIik7cmV0dXJuIGkmJiFvJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyKyIwIl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpeyItIj09PXIoInR5cGUiLChzLnNwbG9tU3Rhc2h8fHt9KS50eXBlKSYmKCFmdW5jdGlvbih0LGUpe2lmKCItIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQscz1yLmNoYXJBdCgwKTstMSE9PXIuaW5kZXhPZigic2NlbmUiKSYmKHI9cyk7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKCJzcGxvbSI9PT1pLnR5cGUmJmkuX2xlbmd0aD4wJiYoaVsiXyIrcisiYXhlcyJdfHx7fSlbZV0pcmV0dXJuIGk7aWYoKGlbcisiYXhpcyJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyKyIwIl0pcmV0dXJuIGl9fX0oZSxyLHMpO2lmKCFsKXJldHVybjtpZigiaGlzdG9ncmFtIj09PWwudHlwZSYmcz09PXt2OiJ5IixoOiJ4In1bbC5vcmllbnRhdGlvbnx8InYiXSlyZXR1cm4gdm9pZCh0LnR5cGU9ImxpbmVhciIpO3ZhciBjLHU9cysiY2FsZW5kYXIiLGY9bFt1XSxoPXtub011bHRpQ2F0ZWdvcnk6IW4obCwiY2FydGVzaWFuIil8fG4obCwibm9NdWx0aUNhdGVnb3J5Iil9O2lmKG8obCxzKSl7dmFyIHA9YShsKSxkPVtdO2ZvcihjPTA7YzxlLmxlbmd0aDtjKyspe3ZhciBnPWVbY107bihnLCJib3gtdmlvbGluIikmJihnW3MrImF4aXMiXXx8cyk9PT1yJiYodm9pZCAwIT09Z1twXT9kLnB1c2goZ1twXVswXSk6dm9pZCAwIT09Zy5uYW1lP2QucHVzaChnLm5hbWUpOmQucHVzaCgidGV4dCIpLGdbdV0hPT1mJiYoZj12b2lkIDApKX10LnR5cGU9aShkLGYsaCl9ZWxzZSBpZigic3Bsb20iPT09bC50eXBlKXt2YXIgdj1sLmRpbWVuc2lvbnMsbT1sLl9kaWFnO2ZvcihjPTA7Yzx2Lmxlbmd0aDtjKyspe3ZhciB5PXZbY107aWYoeS52aXNpYmxlJiYobVtjXVswXT09PXJ8fG1bY11bMV09PT1yKSl7dC50eXBlPWkoeS52YWx1ZXMsZixoKTticmVha319fWVsc2UgdC50eXBlPWkobFtzXXx8W2xbcysiMCJdXSxmLGgpfShlLHMuZGF0YSksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjp0LnR5cGU9ZS50eXBlKX19LHsiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9heGlzX2F1dG90eXBlIjo3NDl9XSw3NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKSxpPXQoIi4uL2xpYiIpO2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuLGEsbyxzPSExO2lmKCJkYXRhIj09PWUudHlwZSluPXQuX2Z1bGxEYXRhW251bGwhPT1lLnRyYWNlcz9lLnRyYWNlc1swXTowXTtlbHNle2lmKCJsYXlvdXQiIT09ZS50eXBlKXJldHVybiExO249dC5fZnVsbExheW91dH1yZXR1cm4gYT1pLm5lc3RlZFByb3BlcnR5KG4sZS5wcm9wKS5nZXQoKSwobz1yW2UudHlwZV09cltlLnR5cGVdfHx7fSkuaGFzT3duUHJvcGVydHkoZS5wcm9wKSYmb1tlLnByb3BdIT09YSYmKHM9ITApLG9bZS5wcm9wXT1hLHtjaGFuZ2VkOnMsdmFsdWU6YX19ZnVuY3Rpb24gbyh0LGUpe3ZhciByPVtdLG49ZVswXSxhPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgbilhW25dPWVbMV07ZWxzZXtpZighaS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiByO2E9bn1yZXR1cm4gbChhLGZ1bmN0aW9uKHQsZSxuKXtyLnB1c2goe3R5cGU6ImxheW91dCIscHJvcDp0LHZhbHVlOm59KX0sIiIsMCkscn1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbixhLG8scz1bXTtpZihuPWVbMF0sYT1lWzFdLHI9ZVsyXSxvPXt9LCJzdHJpbmciPT10eXBlb2YgbilvW25dPWE7ZWxzZXtpZighaS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiBzO289bix2b2lkIDA9PT1yJiYocj1hKX1yZXR1cm4gdm9pZCAwPT09ciYmKHI9bnVsbCksbChvLGZ1bmN0aW9uKGUsbixpKXt2YXIgYTtpZihBcnJheS5pc0FycmF5KGkpKXt2YXIgbz1NYXRoLm1pbihpLmxlbmd0aCx0LmRhdGEubGVuZ3RoKTtyJiYobz1NYXRoLm1pbihvLHIubGVuZ3RoKSksYT1bXTtmb3IodmFyIGw9MDtsPG87bCsrKWFbbF09cj9yW2xdOmx9ZWxzZSBhPXI/ci5zbGljZSgwKTpudWxsO2lmKG51bGw9PT1hKUFycmF5LmlzQXJyYXkoaSkmJihpPWlbMF0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSl7aWYoIUFycmF5LmlzQXJyYXkoaSkpe3ZhciBjPWk7aT1bXTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKylpW3VdPWN9aS5sZW5ndGg9TWF0aC5taW4oYS5sZW5ndGgsaS5sZW5ndGgpfXMucHVzaCh7dHlwZToiZGF0YSIscHJvcDplLHRyYWNlczphLHZhbHVlOml9KX0sIiIsMCksc31mdW5jdGlvbiBsKHQsZSxyLG4pe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIG89dFthXTtpZigiXyIhPT1hWzBdKXt2YXIgcz1yKyhuPjA/Ii4iOiIiKSthO2kuaXNQbGFpbk9iamVjdChvKT9sKG8sZSxzLG4rMSk6ZShzLGEsbyl9fSl9ci5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9ZnVuY3Rpb24odCxlLG4sbyl7dmFyIHM9e30sbD0hMDtlJiZlLl9jb21tYW5kT2JzZXJ2ZXImJihzPWUuX2NvbW1hbmRPYnNlcnZlcikscy5jYWNoZXx8KHMuY2FjaGU9e30pLHMubG9va3VwVGFibGU9e307dmFyIGM9ci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3ModCxuLHMubG9va3VwVGFibGUpO2lmKGUmJmUuX2NvbW1hbmRPYnNlcnZlcil7aWYoYylyZXR1cm4gcztpZihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKXJldHVybiBlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZS5fY29tbWFuZE9ic2VydmVyPW51bGwsc31pZihjKXthKHQsYyxzLmNhY2hlKSxzLmNoZWNrPWZ1bmN0aW9uKCl7aWYobCl7dmFyIGU9YSh0LGMscy5jYWNoZSk7cmV0dXJuIGUuY2hhbmdlZCYmbyYmdm9pZCAwIT09cy5sb29rdXBUYWJsZVtlLnZhbHVlXSYmKHMuZGlzYWJsZSgpLFByb21pc2UucmVzb2x2ZShvKHt2YWx1ZTplLnZhbHVlLHR5cGU6Yy50eXBlLHByb3A6Yy5wcm9wLHRyYWNlczpjLnRyYWNlcyxpbmRleDpzLmxvb2t1cFRhYmxlW2UudmFsdWVdfSkpLnRoZW4ocy5lbmFibGUscy5lbmFibGUpKSxlLmNoYW5nZWR9fTtmb3IodmFyIHU9WyJwbG90bHlfcmVsYXlvdXQiLCJwbG90bHlfcmVkcmF3IiwicGxvdGx5X3Jlc3R5bGUiLCJwbG90bHlfdXBkYXRlIiwicGxvdGx5X2FuaW1hdGluZ2ZyYW1lIiwicGxvdGx5X2FmdGVycGxvdCJdLGY9MDtmPHUubGVuZ3RoO2YrKyl0Ll9pbnRlcm5hbE9uKHVbZl0scy5jaGVjayk7cy5yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKyl0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyKHVbZV0scy5jaGVjayl9fWVsc2UgaS5sb2coIlVuYWJsZSB0byBhdXRvbWF0aWNhbGx5IGJpbmQgcGxvdCB1cGRhdGVzIHRvIEFQSSBjb21tYW5kIikscy5sb29rdXBUYWJsZT17fSxzLnJlbW92ZT1mdW5jdGlvbigpe307cmV0dXJuIHMuZGlzYWJsZT1mdW5jdGlvbigpe2w9ITF9LHMuZW5hYmxlPWZ1bmN0aW9uKCl7bD0hMH0sZSYmKGUuX2NvbW1hbmRPYnNlcnZlcj1zKSxzfSxyLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbih0LGUsbil7dmFyIGksYSxvPWUubGVuZ3RoO2ZvcihpPTA7aTxvO2krKyl7dmFyIHMsbD1lW2ldLGM9bC5tZXRob2QsdT1sLmFyZ3M7aWYoQXJyYXkuaXNBcnJheSh1KXx8KHU9W10pLCFjKXJldHVybiExO3ZhciBmPXIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyh0LGMsdSk7aWYoMSE9PWYubGVuZ3RoKXJldHVybiExO2lmKGEpe2lmKChzPWZbMF0pLnR5cGUhPT1hLnR5cGUpcmV0dXJuITE7aWYocy5wcm9wIT09YS5wcm9wKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoYS50cmFjZXMpKXtpZighQXJyYXkuaXNBcnJheShzLnRyYWNlcykpcmV0dXJuITE7cy50cmFjZXMuc29ydCgpO2Zvcih2YXIgaD0wO2g8YS50cmFjZXMubGVuZ3RoO2grKylpZihhLnRyYWNlc1toXSE9PXMudHJhY2VzW2hdKXJldHVybiExfWVsc2UgaWYocy5wcm9wIT09YS5wcm9wKXJldHVybiExfWVsc2UgYT1mWzBdLEFycmF5LmlzQXJyYXkoYS50cmFjZXMpJiZhLnRyYWNlcy5zb3J0KCk7dmFyIHA9KHM9ZlswXSkudmFsdWU7aWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMSE9PXAubGVuZ3RoKXJldHVybiExO3A9cFswXX1uJiYobltwXT1pKX1yZXR1cm4gYX0sci5leGVjdXRlQVBJQ29tbWFuZD1mdW5jdGlvbih0LGUscil7aWYoInNraXAiPT09ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGE9bi5hcGlNZXRob2RSZWdpc3RyeVtlXSxvPVt0XTtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspby5wdXNoKHJbc10pO3JldHVybiBhLmFwcGx5KG51bGwsbykuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGkud2FybigiQVBJIGNhbGwgdG8gUGxvdGx5LiIrZSsiIHJlamVjdGVkLiIsdCksUHJvbWlzZS5yZWplY3QodCl9KX0sci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtzd2l0Y2goQXJyYXkuaXNBcnJheShyKXx8KHI9W10pLGUpe2Nhc2UicmVzdHlsZSI6bj1zKHQscik7YnJlYWs7Y2FzZSJyZWxheW91dCI6bj1vKHQscik7YnJlYWs7Y2FzZSJ1cGRhdGUiOm49cyh0LFtyWzBdLHJbMl1dKS5jb25jYXQobyh0LFtyWzFdXSkpO2JyZWFrO2Nhc2UiYW5pbWF0ZSI6bj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGVbMF0pJiYxPT09ZVswXS5sZW5ndGgmJi0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlWzBdWzBdKT9be3R5cGU6ImxheW91dCIscHJvcDoiX2N1cnJlbnRGcmFtZSIsdmFsdWU6ZVswXVswXS50b1N0cmluZygpfV06W119KDAscik7YnJlYWs7ZGVmYXVsdDpuPVtdfXJldHVybiBufX0seyIuLi9saWIiOjcwMCwiLi4vcmVnaXN0cnkiOjgyOX1dLDc3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToodD10fHx7fSkuZWRpdFR5cGUsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9XSxkZmx0OlswLDFdfSxpPSh0Lm5hbWUmJnQubmFtZSx0LnRyYWNlLGUuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb24se3g6bih7fSxyLHt9KSx5Om4oe30scix7fSksZWRpdFR5cGU6dC5lZGl0VHlwZX0pO3JldHVybiB0Lm5vR3JpZENlbGx8fChpLnJvdz17dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9LGkuY29sdW1uPXt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0pLGl9LHIuZGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9biYmbi54fHxbMCwxXSxhPW4mJm4ueXx8WzAsMV0sbz1lLmdyaWQ7aWYobyl7dmFyIHM9cigiZG9tYWluLmNvbHVtbiIpO3ZvaWQgMCE9PXMmJihzPG8uY29sdW1ucz9pPW8uX2RvbWFpbnMueFtzXTpkZWxldGUgdC5kb21haW4uY29sdW1uKTt2YXIgbD1yKCJkb21haW4ucm93Iik7dm9pZCAwIT09bCYmKGw8by5yb3dzP2E9by5fZG9tYWlucy55W2xdOmRlbGV0ZSB0LmRvbWFpbi5yb3cpfXIoImRvbWFpbi54IixpKSxyKCJkb21haW4ueSIsYSl9fSx7Ii4uL2xpYi9leHRlbmQiOjY5MH1dLDc3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lZGl0VHlwZSxyPXQuY29sb3JFZGl0VHlwZTt2b2lkIDA9PT1yJiYocj1lKTt2YXIgbj17ZmFtaWx5Ont2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOmV9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZWRpdFR5cGU6ZX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZTpyfSxlZGl0VHlwZTplfTtyZXR1cm4gdC5hcnJheU9rJiYobi5mYW1pbHkuYXJyYXlPaz0hMCxuLnNpemUuYXJyYXlPaz0hMCxuLmNvbG9yLmFycmF5T2s9ITApLG59fSx7fV0sNzc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToiZnJhbWVzX2VudHJ5Iixncm91cDp7dmFsVHlwZToic3RyaW5nIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIn0sdHJhY2VzOnt2YWxUeXBlOiJhbnkifSxiYXNlZnJhbWU6e3ZhbFR5cGU6InN0cmluZyJ9LGRhdGE6e3ZhbFR5cGU6ImFueSJ9LGxheW91dDp7dmFsVHlwZToiYW55In19fSx7fV0sNzc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IucHJvak5hbWVzPXtlcXVpcmVjdGFuZ3VsYXI6ImVxdWlyZWN0YW5ndWxhciIsbWVyY2F0b3I6Im1lcmNhdG9yIixvcnRob2dyYXBoaWM6Im9ydGhvZ3JhcGhpYyIsIm5hdHVyYWwgZWFydGgiOiJuYXR1cmFsRWFydGgiLGthdnJheXNraXk3OiJrYXZyYXlza2l5NyIsbWlsbGVyOiJtaWxsZXIiLHJvYmluc29uOiJyb2JpbnNvbiIsZWNrZXJ0NDoiZWNrZXJ0NCIsImF6aW11dGhhbCBlcXVhbCBhcmVhIjoiYXppbXV0aGFsRXF1YWxBcmVhIiwiYXppbXV0aGFsIGVxdWlkaXN0YW50IjoiYXppbXV0aGFsRXF1aWRpc3RhbnQiLCJjb25pYyBlcXVhbCBhcmVhIjoiY29uaWNFcXVhbEFyZWEiLCJjb25pYyBjb25mb3JtYWwiOiJjb25pY0NvbmZvcm1hbCIsImNvbmljIGVxdWlkaXN0YW50IjoiY29uaWNFcXVpZGlzdGFudCIsZ25vbW9uaWM6Imdub21vbmljIixzdGVyZW9ncmFwaGljOiJzdGVyZW9ncmFwaGljIixtb2xsd2VpZGU6Im1vbGx3ZWlkZSIsaGFtbWVyOiJoYW1tZXIiLCJ0cmFuc3ZlcnNlIG1lcmNhdG9yIjoidHJhbnN2ZXJzZU1lcmNhdG9yIiwiYWxiZXJzIHVzYSI6ImFsYmVyc1VzYSIsIndpbmtlbCB0cmlwZWwiOiJ3aW5rZWwzIixhaXRvZmY6ImFpdG9mZiIsc2ludXNvaWRhbDoic2ludXNvaWRhbCJ9LHIuYXhlc05hbWVzPVsibG9uYXhpcyIsImxhdGF4aXMiXSxyLmxvbmF4aXNTcGFuPXtvcnRob2dyYXBoaWM6MTgwLCJhemltdXRoYWwgZXF1YWwgYXJlYSI6MzYwLCJhemltdXRoYWwgZXF1aWRpc3RhbnQiOjM2MCwiY29uaWMgY29uZm9ybWFsIjoxODAsZ25vbW9uaWM6MTYwLHN0ZXJlb2dyYXBoaWM6MTgwLCJ0cmFuc3ZlcnNlIG1lcmNhdG9yIjoxODAsIioiOjM2MH0sci5sYXRheGlzU3Bhbj17ImNvbmljIGNvbmZvcm1hbCI6MTUwLHN0ZXJlb2dyYXBoaWM6MTc5LjUsIioiOjE4MH0sci5zY29wZURlZmF1bHRzPXt3b3JsZDp7bG9uYXhpc1JhbmdlOlstMTgwLDE4MF0sbGF0YXhpc1JhbmdlOlstOTAsOTBdLHByb2pUeXBlOiJlcXVpcmVjdGFuZ3VsYXIiLHByb2pSb3RhdGU6WzAsMCwwXX0sdXNhOntsb25heGlzUmFuZ2U6Wy0xODAsLTUwXSxsYXRheGlzUmFuZ2U6WzE1LDgwXSxwcm9qVHlwZToiYWxiZXJzIHVzYSJ9LGV1cm9wZTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbMzAsODVdLHByb2pUeXBlOiJjb25pYyBjb25mb3JtYWwiLHByb2pSb3RhdGU6WzE1LDAsMF0scHJvalBhcmFsbGVsczpbMCw2MF19LGFzaWE6e2xvbmF4aXNSYW5nZTpbMjIsMTYwXSxsYXRheGlzUmFuZ2U6Wy0xNSw1NV0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19LGFmcmljYTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbLTQwLDQwXSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX0sIm5vcnRoIGFtZXJpY2EiOntsb25heGlzUmFuZ2U6Wy0xODAsLTQ1XSxsYXRheGlzUmFuZ2U6WzUsODVdLHByb2pUeXBlOiJjb25pYyBjb25mb3JtYWwiLHByb2pSb3RhdGU6Wy0xMDAsMCwwXSxwcm9qUGFyYWxsZWxzOlsyOS41LDQ1LjVdfSwic291dGggYW1lcmljYSI6e2xvbmF4aXNSYW5nZTpbLTEwMCwtMzBdLGxhdGF4aXNSYW5nZTpbLTYwLDE1XSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX19LHIuY2xpcFBhZD0uMDAxLHIucHJlY2lzaW9uPS4xLHIubGFuZENvbG9yPSIjRjBEQzgyIixyLndhdGVyQ29sb3I9IiMzMzk5RkYiLHIubG9jYXRpb25tb2RlVG9MYXllcj17IklTTy0zIjoiY291bnRyaWVzIiwiVVNBLXN0YXRlcyI6InN1YnVuaXRzIiwiY291bnRyeSBuYW1lcyI6ImNvdW50cmllcyJ9LHIuc3BoZXJlU1ZHPXt0eXBlOiJTcGhlcmUifSxyLmZpbGxMYXllcnM9e29jZWFuOjEsbGFuZDoxLGxha2VzOjF9LHIubGluZUxheWVycz17c3VidW5pdHM6MSxjb3VudHJpZXM6MSxjb2FzdGxpbmVzOjEscml2ZXJzOjEsZnJhbWU6MX0sci5sYXllcnM9WyJiZyIsIm9jZWFuIiwibGFuZCIsImxha2VzIiwic3VidW5pdHMiLCJjb3VudHJpZXMiLCJjb2FzdGxpbmVzIiwicml2ZXJzIiwibGF0YXhpcyIsImxvbmF4aXMiLCJmcmFtZSIsImJhY2twbG90IiwiZnJvbnRwbG90Il0sci5sYXllcnNGb3JDaG9yb3BsZXRoPVsiYmciLCJvY2VhbiIsImxhbmQiLCJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJsYXRheGlzIiwibG9uYXhpcyIsImZyYW1lIiwiYmFja3Bsb3QiLCJyaXZlcnMiLCJsYWtlcyIsImZyb250cGxvdCJdLHIubGF5ZXJOYW1lVG9BZGplY3RpdmU9e29jZWFuOiJvY2VhbiIsbGFuZDoibGFuZCIsbGFrZXM6Imxha2UiLHN1YnVuaXRzOiJzdWJ1bml0Iixjb3VudHJpZXM6ImNvdW50cnkiLGNvYXN0bGluZXM6ImNvYXN0bGluZSIscml2ZXJzOiJyaXZlciIsZnJhbWU6ImZyYW1lIn19LHt9XSw3Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGM9dCgiLi4vcGxvdHMiKSx1PXQoIi4uL2NhcnRlc2lhbi9heGVzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksaD10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCxwPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLGQ9dCgiLi96b29tIiksZz10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIiksbT10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO2Z1bmN0aW9uIHkodCl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRvcG9qc29uVVJMPXQudG9wb2pzb25VUkwsdGhpcy5pc1N0YXRpYz10LnN0YXRpY1Bsb3QsdGhpcy50b3BvanNvbk5hbWU9bnVsbCx0aGlzLnRvcG9qc29uPW51bGwsdGhpcy5wcm9qZWN0aW9uPW51bGwsdGhpcy52aWV3SW5pdGlhbD1udWxsLHRoaXMuZml0U2NhbGU9bnVsbCx0aGlzLmJvdW5kcz1udWxsLHRoaXMubWlkUHQ9bnVsbCx0aGlzLmhhc0Nob3JvcGxldGg9ITEsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e30sdGhpcy5iYXNlUGF0aHM9e30sdGhpcy5kYXRhUGF0aHM9e30sdGhpcy5kYXRhUG9pbnRzPXt9LHRoaXMuY2xpcERlZj1udWxsLHRoaXMuY2xpcFJlY3Q9bnVsbCx0aGlzLmJnUmVjdD1udWxsLHRoaXMubWFrZUZyYW1ld29yaygpfXQoIi4vcHJvamVjdGlvbnMiKShuKTt2YXIgeD15LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB5KHQpfSx4LnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1lW3RoaXMuaWRdLGE9di5nZXRUb3BvanNvbk5hbWUoaSk7bnVsbD09PW4udG9wb2pzb258fGEhPT1uLnRvcG9qc29uTmFtZT8obi50b3BvanNvbk5hbWU9YSx2b2lkIDA9PT1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdP3IucHVzaChuLmZldGNoVG9wb2pzb24oKS50aGVuKGZ1bmN0aW9uKHIpe1Bsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV09cixuLnRvcG9qc29uPXIsbi51cGRhdGUodCxlKX0pKToobi50b3BvanNvbj1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdLG4udXBkYXRlKHQsZSkpKTpuLnVwZGF0ZSh0LGUpfSx4LmZldGNoVG9wb2pzb249ZnVuY3Rpb24oKXt2YXIgdD12LmdldFRvcG9qc29uUGF0aCh0aGlzLnRvcG9qc29uVVJMLHRoaXMudG9wb2pzb25OYW1lKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxyKXtuLmpzb24odCxmdW5jdGlvbihuLGkpe2lmKG4pcmV0dXJuIDQwND09PW4uc3RhdHVzP3IobmV3IEVycm9yKFsicGxvdGx5LmpzIGNvdWxkIG5vdCBmaW5kIHRvcG9qc29uIGZpbGUgYXQiLHQsIi4iLCJNYWtlIHN1cmUgdGhlICp0b3BvanNvblVSTCogcGxvdCBjb25maWcgb3B0aW9uIiwiaXMgc2V0IHByb3Blcmx5LiJdLmpvaW4oIiAiKSkpOnIobmV3IEVycm9yKFsidW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyB0b3BvanNvbiBmaWxlIGF0Iix0XS5qb2luKCIgIikpKTtlKGkpfSl9KX0seC51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO2lmKCF0aGlzLnVwZGF0ZVByb2plY3Rpb24oZSxyKSl7dGhpcy5oYXNDaG9yb3BsZXRoPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKCJjaG9yb3BsZXRoIj09PXRbbl1bMF0udHJhY2UudHlwZSl7dGhpcy5oYXNDaG9yb3BsZXRoPSEwO2JyZWFrfXRoaXMudmlld0luaXRpYWx8fHRoaXMuc2F2ZVZpZXdJbml0aWFsKHIpLHRoaXMudXBkYXRlQmFzZUxheWVycyhlLHIpLHRoaXMudXBkYXRlRGltcyhlLHIpLHRoaXMudXBkYXRlRngoZSxyKSxjLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdyYXBoRGl2LHRoaXMsdCxyKTt2YXIgaT10aGlzLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIik7dGhpcy5kYXRhUG9pbnRzLnBvaW50PWkuc2VsZWN0QWxsKCIucG9pbnQiKSx0aGlzLmRhdGFQb2ludHMudGV4dD1pLnNlbGVjdEFsbCgidGV4dCIpLHRoaXMuZGF0YVBhdGhzLmxpbmU9aS5zZWxlY3RBbGwoIi5qcy1saW5lIik7dmFyIGE9dGhpcy5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7dGhpcy5kYXRhUGF0aHMuY2hvcm9wbGV0aD1hLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMucmVuZGVyKCl9fSx4LnVwZGF0ZVByb2plY3Rpb249ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9zaXplLG89ZS5kb21haW4scz1lLnByb2plY3Rpb24sbD1zLnJvdGF0aW9ufHx7fSxjPWUuY2VudGVyfHx7fSx1PXRoaXMucHJvamVjdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5wcm9qZWN0aW9uLnR5cGUscj1uLmdlb1tnLnByb2pOYW1lc1tlXV0oKSxpPXQuX2lzQ2xpcHBlZD9nLmxvbmF4aXNTcGFuW2VdLzI6bnVsbCxhPVsiY2VudGVyIiwicm90YXRlIiwicGFyYWxsZWxzIiwiY2xpcEV4dGVudCJdLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQ/cjpbXX0scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdOyJmdW5jdGlvbiIhPXR5cGVvZiByW2xdJiYocltsXT1vKX1yLmlzTG9uTGF0T3ZlckVkZ2VzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT1yKHQpKXJldHVybiEwO2lmKGkpe3ZhciBlPXIucm90YXRlKCk7cmV0dXJuIG4uZ2VvLmRpc3RhbmNlKHQsWy1lWzBdLC1lWzFdXSk+aSpNYXRoLlBJLzE4MH1yZXR1cm4hMX0sci5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2VvLnBhdGgoKS5wcm9qZWN0aW9uKHIpfSxyLmdldEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gci5nZXRQYXRoKCkuYm91bmRzKHQpfSxyLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMV1bMF0tdFswXVswXSxpPXRbMV1bMV0tdFswXVsxXSxhPXIuY2xpcEV4dGVudCYmci5jbGlwRXh0ZW50KCk7ci5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksYSYmci5jbGlwRXh0ZW50KG51bGwpO3ZhciBvPXIuZ2V0Qm91bmRzKGUpLHM9TWF0aC5taW4obi8ob1sxXVswXS1vWzBdWzBdKSxpLyhvWzFdWzFdLW9bMF1bMV0pKSxsPSt0WzBdWzBdKyhuLXMqKG9bMV1bMF0rb1swXVswXSkpLzIsYz0rdFswXVsxXSsoaS1zKihvWzFdWzFdK29bMF1bMV0pKS8yO3JldHVybiBhJiZyLmNsaXBFeHRlbnQoYSksci5zY2FsZSgxNTAqcykudHJhbnNsYXRlKFtsLGNdKX0sci5wcmVjaXNpb24oZy5wcmVjaXNpb24pLGkmJnIuY2xpcEFuZ2xlKGktZy5jbGlwUGFkKTtyZXR1cm4gcn0oZSk7dS5jZW50ZXIoW2MubG9uLWwubG9uLGMubGF0LWwubGF0XSkucm90YXRlKFstbC5sb24sLWwubGF0LGwucm9sbF0pLnBhcmFsbGVscyhzLnBhcmFsbGVscyk7dmFyIGY9W1tyLmwrci53Km8ueFswXSxyLnQrci5oKigxLW8ueVsxXSldLFtyLmwrci53Km8ueFsxXSxyLnQrci5oKigxLW8ueVswXSldXSxoPWUubG9uYXhpcyxwPWUubGF0YXhpcyxkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Zy5jbGlwUGFkLG49dFswXStyLGk9dFsxXS1yLGE9ZVswXStyLG89ZVsxXS1yO24+MCYmaTwwJiYoaSs9MzYwKTt2YXIgcz0oaS1uKS80O3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbW1tuLGFdLFtuLG9dLFtuK3Msb10sW24rMipzLG9dLFtuKzMqcyxvXSxbaSxvXSxbaSxhXSxbaS1zLGFdLFtpLTIqcyxhXSxbaS0zKnMsYV0sW24sYV1dXX19KGgucmFuZ2UscC5yYW5nZSk7dS5maXRFeHRlbnQoZixkKTt2YXIgdj10aGlzLmJvdW5kcz11LmdldEJvdW5kcyhkKSxtPXRoaXMuZml0U2NhbGU9dS5zY2FsZSgpLHk9dS50cmFuc2xhdGUoKTtpZighaXNGaW5pdGUodlswXVswXSl8fCFpc0Zpbml0ZSh2WzBdWzFdKXx8IWlzRmluaXRlKHZbMV1bMF0pfHwhaXNGaW5pdGUodlsxXVsxXSl8fGlzTmFOKHlbMF0pfHxpc05hTih5WzBdKSl7Zm9yKHZhciB4PXRoaXMuZ3JhcGhEaXYsYj1bInByb2plY3Rpb24ucm90YXRpb24iLCJjZW50ZXIiLCJsb25heGlzLnJhbmdlIiwibGF0YXhpcy5yYW5nZSJdLF89IkludmFsaWQgZ2VvIHNldHRpbmdzLCByZWxheW91dCdpbmcgdG8gZGVmYXVsdCB2aWV3LiIsdz17fSxrPTA7azxiLmxlbmd0aDtrKyspd1t0aGlzLmlkKyIuIitiW2tdXT1udWxsO3JldHVybiB0aGlzLnZpZXdJbml0aWFsPW51bGwsYS53YXJuKF8pLHguX3Byb21pc2VzLnB1c2goaS5jYWxsKCJyZWxheW91dCIseCx3KSksX312YXIgVD10aGlzLm1pZFB0PVsodlswXVswXSt2WzFdWzBdKS8yLCh2WzBdWzFdK3ZbMV1bMV0pLzJdO2lmKHUuc2NhbGUocy5zY2FsZSptKS50cmFuc2xhdGUoW3lbMF0rKFRbMF0teVswXSkseVsxXSsoVFsxXS15WzFdKV0pLmNsaXBFeHRlbnQodiksZS5faXNBbGJlcnNVc2Epe3ZhciBBPXUoW2MubG9uLGMubGF0XSksTT11LnRyYW5zbGF0ZSgpO3UudHJhbnNsYXRlKFtNWzBdLShBWzBdLU1bMF0pLE1bMV0tKEFbMV0tTVsxXSldKX19LHgudXBkYXRlQmFzZUxheWVycz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsaT1yLnRvcG9qc29uLGE9ci5sYXllcnMsbD1yLmJhc2VQYXRocztmdW5jdGlvbiBjKHQpe3JldHVybiJsb25heGlzIj09PXR8fCJsYXRheGlzIj09PXR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gQm9vbGVhbihnLmxpbmVMYXllcnNbdF0pfWZ1bmN0aW9uIGYodCl7cmV0dXJuIEJvb2xlYW4oZy5maWxsTGF5ZXJzW3RdKX12YXIgaD0odGhpcy5oYXNDaG9yb3BsZXRoP2cubGF5ZXJzRm9yQ2hvcm9wbGV0aDpnLmxheWVycykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfHxmKHQpP2VbInNob3ciK3RdOiFjKHQpfHxlW3RdLnNob3dncmlkfSkscD1yLmZyYW1ld29yay5zZWxlY3RBbGwoIi5sYXllciIpLmRhdGEoaCxTdHJpbmcpO3AuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7ZGVsZXRlIGFbdF0sZGVsZXRlIGxbdF0sbi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSxwLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJsYXllciAiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF09bi5zZWxlY3QodGhpcyk7ImJnIj09PXQ/ci5iZ1JlY3Q9ZS5hcHBlbmQoInJlY3QiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTpjKHQpP2xbdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKToiYmFja3Bsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNob3JvcGxldGhsYXllciIsITApOiJmcm9udHBsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOnUodCk/bFt0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMik6Zih0KSYmKGxbdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpKX0pLHAub3JkZXIoKSxwLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bFt0XSxhPWcubGF5ZXJOYW1lVG9BZGplY3RpdmVbdF07ImZyYW1lIj09PXQ/ci5kYXR1bShnLnNwaGVyZVNWRyk6dSh0KXx8Zih0KT9yLmRhdHVtKG0oaSxpLm9iamVjdHNbdF0pKTpjKHQpJiZyLmRhdHVtKGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0XS5kdGljayxpPWcuc2NvcGVEZWZhdWx0c1tlLnNjb3BlXSxhPWkubG9uYXhpc1JhbmdlLG89aS5sYXRheGlzUmFuZ2Uscz0ibG9uYXhpcyI9PT10P1tyXTpbMCxyXTtyZXR1cm4gbi5nZW8uZ3JhdGljdWxlKCkuZXh0ZW50KFtbYVswXSxvWzBdXSxbYVsxXSxvWzFdXV0pLnN0ZXAocyl9KHQsZSkpLmNhbGwoby5zdHJva2UsZVt0XS5ncmlkY29sb3IpLmNhbGwocy5kYXNoTGluZSwiIixlW3RdLmdyaWR3aWR0aCksdSh0KT9yLmNhbGwoby5zdHJva2UsZVthKyJjb2xvciJdKS5jYWxsKHMuZGFzaExpbmUsIiIsZVthKyJ3aWR0aCJdKTpmKHQpJiZyLmNhbGwoby5maWxsLGVbYSsiY29sb3IiXSl9KX0seC51cGRhdGVEaW1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ib3VuZHMsbj0oZS5mcmFtZXdpZHRofHwwKS8yLGk9clswXVswXS1uLGE9clswXVsxXS1uLGw9clsxXVswXS1pK24sYz1yWzFdWzFdLWErbjtzLnNldFJlY3QodGhpcy5jbGlwUmVjdCxpLGEsbCxjKSx0aGlzLmJnUmVjdC5jYWxsKHMuc2V0UmVjdCxpLGEsbCxjKS5jYWxsKG8uZmlsbCxlLmJnY29sb3IpLHRoaXMueGF4aXMuX29mZnNldD1pLHRoaXMueGF4aXMuX2xlbmd0aD1sLHRoaXMueWF4aXMuX29mZnNldD1hLHRoaXMueWF4aXMuX2xlbmd0aD1jfSx4LnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxhPXIuZ3JhcGhEaXYsbz1yLmJnUmVjdCxzPXQuZHJhZ21vZGUsYz10LmNsaWNrbW9kZTtpZighci5pc1N0YXRpYyl7dmFyIHU7InNlbGVjdCI9PT1zP3U9ZnVuY3Rpb24odCxlKXsodC5yYW5nZT17fSlbci5pZF09W3YoW2UueG1pbixlLnltaW5dKSx2KFtlLnhtYXgsZS55bWF4XSldfToibGFzc28iPT09cyYmKHU9ZnVuY3Rpb24odCxlLG4peyh0Lmxhc3NvUG9pbnRzPXt9KVtyLmlkXT1uLmZpbHRlcmVkLm1hcCh2KX0pO3ZhciBnPXtlbGVtZW50OnIuYmdSZWN0Lm5vZGUoKSxnZDphLHBsb3RpbmZvOntpZDpyLmlkLHhheGlzOnIueGF4aXMseWF4aXM6ci55YXhpcyxmaWxsUmFuZ2VJdGVtczp1fSx4YXhlczpbci54YXhpc10seWF4ZXM6W3IueWF4aXNdLHN1YnBsb3Q6ci5pZCxjbGlja0ZuOmZ1bmN0aW9uKGUpezI9PT1lJiZ0Ll96b29tbGF5ZXIuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX19OyJwYW4iPT09cz8oby5ub2RlKCkub25tb3VzZWRvd249bnVsbCxvLmNhbGwoZChyLGUpKSxvLm9uKCJkYmxjbGljay56b29tIixmdW5jdGlvbigpe3ZhciB0PXIudmlld0luaXRpYWwsZT17fTtmb3IodmFyIG4gaW4gdCllW3IuaWQrIi4iK25dPXRbbl07aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGEsZSksYS5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpfSksYS5fY29udGV4dC5fc2Nyb2xsWm9vbS5nZW98fG8ub24oIndoZWVsLnpvb20iLG51bGwpKToic2VsZWN0IiE9PXMmJiJsYXNzbyIhPT1zfHwoby5vbigiLnpvb20iLG51bGwpLGcucHJlcEZuPWZ1bmN0aW9uKHQsZSxyKXtoKHQsZSxyLGcscyl9LGYuaW5pdChnKSksby5vbigibW91c2Vtb3ZlIixmdW5jdGlvbigpe3ZhciB0PXIucHJvamVjdGlvbi5pbnZlcnQobi5tb3VzZSh0aGlzKSk7aWYoIXR8fGlzTmFOKHRbMF0pfHxpc05hTih0WzFdKSlyZXR1cm4gZi51bmhvdmVyKGEsbi5ldmVudCk7ci54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFswXX0sci55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFsxXX0sbC5ob3ZlcihhLG4uZXZlbnQsci5pZCl9KSxvLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXthLl9kcmFnZ2luZ3x8Zi51bmhvdmVyKGEsbi5ldmVudCl9KSxvLm9uKCJjbGljayIsZnVuY3Rpb24oKXsic2VsZWN0IiE9PXMmJiJsYXNzbyIhPT1zJiYoYy5pbmRleE9mKCJzZWxlY3QiKT4tMSYmcChuLmV2ZW50LGEsW3IueGF4aXNdLFtyLnlheGlzXSxyLmlkLGcpLGMuaW5kZXhPZigiZXZlbnQiKT4tMSYmbC5jbGljayhhLG4uZXZlbnQpKX0pfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHIucHJvamVjdGlvbi5pbnZlcnQoW3RbMF0rci54YXhpcy5fb2Zmc2V0LHRbMV0rci55YXhpcy5fb2Zmc2V0XSl9fSx4Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5ncmFwaERpdixyPWUuX2Z1bGxMYXlvdXQsaT0iY2xpcCIrci5fdWlkK3QuaWQ7dC5jbGlwRGVmPXIuX2NsaXBzLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsaSksdC5jbGlwUmVjdD10LmNsaXBEZWYuYXBwZW5kKCJyZWN0IiksdC5mcmFtZXdvcms9bi5zZWxlY3QodC5jb250YWluZXIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ2VvICIrdC5pZCkuY2FsbChzLnNldENsaXBVcmwsaSxlKSx0LnByb2plY3Q9ZnVuY3Rpb24oZSl7dmFyIHI9dC5wcm9qZWN0aW9uKGUpO3JldHVybiByP1tyWzBdLXQueGF4aXMuX29mZnNldCxyWzFdLXQueWF4aXMuX29mZnNldF06W251bGwsbnVsbF19LHQueGF4aXM9e19pZDoieCIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMF19fSx0LnlheGlzPXtfaWQ6InkiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzFdfX0sdC5tb2NrQXhpcz17dHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIifSx1LnNldENvbnZlcnQodC5tb2NrQXhpcyxyKX0seC5zYXZlVmlld0luaXRpYWw9ZnVuY3Rpb24odCl7dmFyIGU9dC5jZW50ZXJ8fHt9LHI9dC5wcm9qZWN0aW9uLG49ci5yb3RhdGlvbnx8e307dC5faXNTY29wZWQ/dGhpcy52aWV3SW5pdGlhbD17ImNlbnRlci5sb24iOmUubG9uLCJjZW50ZXIubGF0IjplLmxhdCwicHJvamVjdGlvbi5zY2FsZSI6ci5zY2FsZX06dC5faXNDbGlwcGVkP3RoaXMudmlld0luaXRpYWw9eyJwcm9qZWN0aW9uLnNjYWxlIjpyLnNjYWxlLCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6bi5sb24sInByb2plY3Rpb24ucm90YXRpb24ubGF0IjpuLmxhdH06dGhpcy52aWV3SW5pdGlhbD17ImNlbnRlci5sb24iOmUubG9uLCJjZW50ZXIubGF0IjplLmxhdCwicHJvamVjdGlvbi5zY2FsZSI6ci5zY2FsZSwicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOm4ubG9ufX0seC5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMucHJvamVjdGlvbixyPWUuZ2V0UGF0aCgpO2Z1bmN0aW9uIG4odCl7dmFyIHI9ZSh0LmxvbmxhdCk7cmV0dXJuIHI/InRyYW5zbGF0ZSgiK3JbMF0rIiwiK3JbMV0rIikiOm51bGx9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5pc0xvbkxhdE92ZXJFZGdlcyh0LmxvbmxhdCk/Im5vbmUiOm51bGx9Zm9yKHQgaW4gdGhpcy5iYXNlUGF0aHMpdGhpcy5iYXNlUGF0aHNbdF0uYXR0cigiZCIscik7Zm9yKHQgaW4gdGhpcy5kYXRhUGF0aHMpdGhpcy5kYXRhUGF0aHNbdF0uYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIHIodC5nZW9qc29uKX0pO2Zvcih0IGluIHRoaXMuZGF0YVBvaW50cyl0aGlzLmRhdGFQb2ludHNbdF0uYXR0cigiZGlzcGxheSIsaSkuYXR0cigidHJhbnNmb3JtIixuKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo1OTUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjcyNywiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vY2FydGVzaWFuL3NlbGVjdCI6NzY1LCIuLi9wbG90cyI6ODEwLCIuL2NvbnN0YW50cyI6Nzc2LCIuL3Byb2plY3Rpb25zIjo3ODIsIi4vem9vbSI6NzgzLGQzOjE1NCwidG9wb2pzb24tY2xpZW50Ijo1MjR9XSw3Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9nZW8iKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGE9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4LG89ImdlbyI7ci5uYW1lPW8sci5hdHRyPW8sci5pZFJvb3Q9byxyLmlkUmVnZXg9ci5hdHRyUmVnZXg9YShvKSxyLmF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvYXR0cmlidXRlcyIpLHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXQvZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy5nZW87dm9pZCAwPT09d2luZG93LlBsb3RseUdlb0Fzc2V0cyYmKHdpbmRvdy5QbG90bHlHZW9Bc3NldHM9e3RvcG9qc29uOnt9fSk7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1pKHIsbyxsKSx1PWVbbF0uX3N1YnBsb3Q7dXx8KHU9bih7aWQ6bCxncmFwaERpdjp0LGNvbnRhaW5lcjplLl9nZW9sYXllci5ub2RlKCksdG9wb2pzb25VUkw6dC5fY29udGV4dC50b3BvanNvblVSTCxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbbF0uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5nZW98fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLmZyYW1ld29yay5yZW1vdmUoKSxzLmNsaXBEZWYucmVtb3ZlKCkpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdlbyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWVbcltuXV07aS5fc3VicGxvdC51cGRhdGVGeChlLGkpfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3ODQsIi4vZ2VvIjo3NzcsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjc3OSwiLi9sYXlvdXQvZGVmYXVsdHMiOjc4MCwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjc4MX1dLDc3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2dlbzp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJnZW8iLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sNzgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiKSxpPXQoIi4uL2NvbnN0YW50cyIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89aS5heGVzTmFtZXM7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49cigicmVzb2x1dGlvbiIpLGE9cigic2NvcGUiKSxzPWkuc2NvcGVEZWZhdWx0c1thXSxsPXIoInByb2plY3Rpb24udHlwZSIscy5wcm9qVHlwZSksYz1lLl9pc0FsYmVyc1VzYT0iYWxiZXJzIHVzYSI9PT1sO2MmJihhPWUuc2NvcGU9InVzYSIpO3ZhciB1PWUuX2lzU2NvcGVkPSJ3b3JsZCIhPT1hLGY9ZS5faXNDb25pYz0tMSE9PWwuaW5kZXhPZigiY29uaWMiKTtlLl9pc0NsaXBwZWQ9ISFpLmxvbmF4aXNTcGFuW2xdO2Zvcih2YXIgaD0wO2g8by5sZW5ndGg7aCsrKXt2YXIgcCxkPW9baF0sZz1bMzAsMTBdW2hdO2lmKHUpcD1zW2QrIlJhbmdlIl07ZWxzZXt2YXIgdj1pW2QrIlNwYW4iXSxtPSh2W2xdfHx2WyIqIl0pLzIseT1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLiIrZC5zdWJzdHIoMCwzKSxzLnByb2pSb3RhdGVbaF0pO3A9W3ktbSx5K21dfXZhciB4PXIoZCsiLnJhbmdlIixwKTtyKGQrIi50aWNrMCIseFswXSkscihkKyIuZHRpY2siLGcpLHIoZCsiLnNob3dncmlkIikmJihyKGQrIi5ncmlkY29sb3IiKSxyKGQrIi5ncmlkd2lkdGgiKSl9dmFyIGI9ZS5sb25heGlzLnJhbmdlLF89ZS5sYXRheGlzLnJhbmdlLHc9YlswXSxrPWJbMV07dz4wJiZrPDAmJihrKz0zNjApO3ZhciBULEEsTSxTPSh3K2spLzI7aWYoIWMpe3ZhciBFPXU/cy5wcm9qUm90YXRlOltTLDAsMF07VD1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsRVswXSkscigicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiLEVbMV0pLHIoInByb2plY3Rpb24ucm90YXRpb24ucm9sbCIsRVsyXSkscigic2hvd2NvYXN0bGluZXMiLCF1KSYmKHIoImNvYXN0bGluZWNvbG9yIikscigiY29hc3RsaW5ld2lkdGgiKSkscigic2hvd29jZWFuIikmJnIoIm9jZWFuY29sb3IiKX0oYz8oQT0tOTYuNixNPTM4LjcpOihBPXU/UzpULE09KF9bMF0rX1sxXSkvMikscigiY2VudGVyLmxvbiIsQSkscigiY2VudGVyLmxhdCIsTSksZikmJnIoInByb2plY3Rpb24ucGFyYWxsZWxzIixzLnByb2pQYXJhbGxlbHN8fFswLDYwXSk7cigicHJvamVjdGlvbi5zY2FsZSIpLHIoInNob3dsYW5kIikmJnIoImxhbmRjb2xvciIpLHIoInNob3dsYWtlcyIpJiZyKCJsYWtlY29sb3IiKSxyKCJzaG93cml2ZXJzIikmJihyKCJyaXZlcmNvbG9yIikscigicml2ZXJ3aWR0aCIpKSxyKCJzaG93Y291bnRyaWVzIix1JiYidXNhIiE9PWEpJiYocigiY291bnRyeWNvbG9yIikscigiY291bnRyeXdpZHRoIikpLCgidXNhIj09PWF8fCJub3J0aCBhbWVyaWNhIj09PWEmJjUwPT09bikmJihyKCJzaG93c3VidW5pdHMiLCEwKSxyKCJzdWJ1bml0Y29sb3IiKSxyKCJzdWJ1bml0d2lkdGgiKSksdXx8cigic2hvd2ZyYW1lIiwhMCkmJihyKCJmcmFtZWNvbG9yIikscigiZnJhbWV3aWR0aCIpKSxyKCJiZ2NvbG9yIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtuKHQsZSxyLHt0eXBlOiJnZW8iLGF0dHJpYnV0ZXM6YSxoYW5kbGVEZWZhdWx0czpzLHBhcnRpdGlvbjoieSJ9KX19LHsiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyI6ODI0LCIuLi9jb25zdGFudHMiOjc3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NzgxfV0sNzgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9e3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIn0sZHRpY2s6e3ZhbFR5cGU6Im51bWJlciJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5saWdodExpbmV9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9fTsoZS5leHBvcnRzPW8oe2RvbWFpbjppKHtuYW1lOiJnZW8ifSx7fSkscmVzb2x1dGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhhLnNjb3BlRGVmYXVsdHMpLGRmbHQ6IndvcmxkIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGEucHJvak5hbWVzKX0scm90YXRpb246e2xvbjp7dmFsVHlwZToibnVtYmVyIn0sbGF0Ont2YWxUeXBlOiJudW1iZXIifSxyb2xsOnt2YWxUeXBlOiJudW1iZXIifX0scGFyYWxsZWxzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9fSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvYXN0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYW5kY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd2xha2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scml2ZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvdW50cnljb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOiJib29sZWFuIn0sc3VidW5pdGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxmcmFtZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxsb25heGlzOnMsbGF0YXhpczpzfSwicGxvdCIsImZyb20tcm9vdCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1NzYsIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vZG9tYWluIjo3NzMsIi4uL2NvbnN0YW50cyI6Nzc2fV0sNzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6cih0Lmdlb21ldHJ5LGUpfX1mdW5jdGlvbiByKGUsbil7aWYoIWUpcmV0dXJuIG51bGw7aWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGUpcmV0dXJue3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczpvYmplY3QuZ2VvbWV0cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHIodCxuKX0pfTtpZighYy5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpKXJldHVybiBudWxsO3ZhciBpPWNbZS50eXBlXTtyZXR1cm4gdC5nZW8uc3RyZWFtKGUsbihpKSksaS5yZXN1bHQoKX10Lmdlby5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5zdHJlYW07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJub3QgeWV0IHN1cHBvcnRlZCIpO3JldHVybih0JiZuLmhhc093blByb3BlcnR5KHQudHlwZSk/blt0LnR5cGVdOnIpKHQsaSl9O3ZhciBuPXtGZWF0dXJlOmUsRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxyKXtyZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnQuZmVhdHVyZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQscil9KX19fSxpPVtdLGE9W10sbz17cG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2goW3QsZV0pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1pLmxlbmd0aD9pLmxlbmd0aDwyP3t0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6aVswXX06e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOml9Om51bGw7cmV0dXJuIGk9W10sdH19LHM9e2xpbmVTdGFydDp1LHBvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe2kubGVuZ3RoJiYoYS5wdXNoKGkpLGk9W10pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1hLmxlbmd0aD9hLmxlbmd0aDwyP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczphWzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczphfTpudWxsO3JldHVybiBhPVtdLHR9fSxsPXtwb2x5Z29uU3RhcnQ6dSxsaW5lU3RhcnQ6dSxwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD1pLmxlbmd0aDtpZih0KXtkb3tpLnB1c2goaVswXS5zbGljZSgpKX13aGlsZSgrK3Q8NCk7YS5wdXNoKGkpLGk9W119fSxwb2x5Z29uRW5kOnUscmVzdWx0OmZ1bmN0aW9uKCl7aWYoIWEubGVuZ3RoKXJldHVybiBudWxsO3ZhciB0PVtdLGU9W107cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihyKXshZnVuY3Rpb24odCl7aWYoKGU9dC5sZW5ndGgpPDQpcmV0dXJuITE7Zm9yKHZhciBlLHI9MCxuPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrcjxlOyluKz10W3ItMV1bMV0qdFtyXVswXS10W3ItMV1bMF0qdFtyXVsxXTtyZXR1cm4gbjw9MH0ocik/ZS5wdXNoKHIpOnQucHVzaChbcl0pfSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07dC5zb21lKGZ1bmN0aW9uKHQpe2lmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGk9ITEsYT0wLG89dC5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD10W2FdLGM9bFswXSx1PWxbMV0sZj10W3NdLGg9ZlswXSxwPWZbMV07dT5uXnA+biYmcjwoaC1jKSoobi11KS8ocC11KStjJiYoaT0haSl9cmV0dXJuIGl9KHRbMF0scikpcmV0dXJuIHQucHVzaChlKSwhMH0pfHx0LnB1c2goW2VdKX0pLGE9W10sdC5sZW5ndGg/dC5sZW5ndGg+MT97dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fTp7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19LGM9e1BvaW50Om8sTXVsdGlQb2ludDpvLExpbmVTdHJpbmc6cyxNdWx0aUxpbmVTdHJpbmc6cyxQb2x5Z29uOmwsTXVsdGlQb2x5Z29uOmwsU3BoZXJlOmx9O2Z1bmN0aW9uIHUoKXt9dmFyIGY9MWUtNixoPWYqZixwPU1hdGguUEksZD1wLzIsZz0oTWF0aC5zcXJ0KHApLHAvMTgwKSx2PTE4MC9wO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQ+MT9kOnQ8LTE/LWQ6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/cDpNYXRoLmFjb3ModCl9dmFyIHg9dC5nZW8ucHJvamVjdGlvbixiPXQuZ2VvLnByb2plY3Rpb25NdXRhdG9yO2Z1bmN0aW9uIF8odCxlKXt2YXIgcj0oMitkKSpNYXRoLnNpbihlKTtlLz0yO2Zvcih2YXIgbj0wLGk9MS8wO248MTAmJk1hdGguYWJzKGkpPmY7bisrKXt2YXIgYT1NYXRoLmNvcyhlKTtlLT1pPShlK01hdGguc2luKGUpKihhKzIpLXIpLygyKmEqKDErYSkpfXJldHVyblsyL01hdGguc3FydChwKig0K3ApKSp0KigxK01hdGguY29zKGUpKSwyKk1hdGguc3FydChwLyg0K3ApKSpNYXRoLnNpbihlKV19dC5nZW8uaW50ZXJydXB0PWZ1bmN0aW9uKGUpe3ZhciByLG49W1tbWy1wLDBdLFswLGRdLFtwLDBdXV0sW1tbLXAsMF0sWzAsLWRdLFtwLDBdXV1dO2Z1bmN0aW9uIGkodCxyKXtmb3IodmFyIGk9cjwwPy0xOjEsYT1uWysocjwwKV0sbz0wLHM9YS5sZW5ndGgtMTtvPHMmJnQ+YVtvXVsyXVswXTsrK28pO3ZhciBsPWUodC1hW29dWzFdWzBdLHIpO3JldHVybiBsWzBdKz1lKGFbb11bMV1bMF0saSpyPmkqYVtvXVswXVsxXT9hW29dWzBdWzFdOnIpWzBdLGx9ZS5pbnZlcnQmJihpLmludmVydD1mdW5jdGlvbih0LGEpe2Zvcih2YXIgbz1yWysoYTwwKV0scz1uWysoYTwwKV0sYz0wLHU9by5sZW5ndGg7Yzx1OysrYyl7dmFyIGY9b1tjXTtpZihmWzBdWzBdPD10JiZ0PGZbMV1bMF0mJmZbMF1bMV08PWEmJmE8ZlsxXVsxXSl7dmFyIGg9ZS5pbnZlcnQodC1lKHNbY11bMV1bMF0sMClbMF0sYSk7cmV0dXJuIGhbMF0rPXNbY11bMV1bMF0sbChpKGhbMF0saFsxXSksW3QsYV0pP2g6bnVsbH19fSk7dmFyIGE9dC5nZW8ucHJvamVjdGlvbihpKSxvPWEuc3RyZWFtO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHIsbixpLGE9LTEsbz10Lmxlbmd0aCxzPXRbMF0sbD1bXTsrK2E8bzspe249KChyPXRbYV0pWzBdLXNbMF0pL2UsaT0oclsxXS1zWzFdKS9lO2Zvcih2YXIgYz0wO2M8ZTsrK2MpbC5wdXNoKFtzWzBdK2MqbixzWzFdK2MqaV0pO3M9cn1yZXR1cm4gbC5wdXNoKHIpLGx9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF0pPGYmJk1hdGguYWJzKHRbMV0tZVsxXSk8Zn1yZXR1cm4gYS5zdHJlYW09ZnVuY3Rpb24oZSl7dmFyIHI9YS5yb3RhdGUoKSxpPW8oZSksbD0oYS5yb3RhdGUoWzAsMF0pLG8oZSkpO3JldHVybiBhLnJvdGF0ZShyKSxpLnNwaGVyZT1mdW5jdGlvbigpe3QuZ2VvLnN0cmVhbShmdW5jdGlvbigpe2Zvcih2YXIgZT0xZS02LHI9W10saT0wLGE9blswXS5sZW5ndGg7aTxhOysraSl7dmFyIG89blswXVtpXSxsPTE4MCpvWzBdWzBdL3AsYz0xODAqb1swXVsxXS9wLHU9MTgwKm9bMV1bMV0vcCxmPTE4MCpvWzJdWzBdL3AsaD0xODAqb1syXVsxXS9wO3IucHVzaChzKFtbbCtlLGMrZV0sW2wrZSx1LWVdLFtmLWUsdS1lXSxbZi1lLGgrZV1dLDMwKSl9Zm9yKHZhciBpPW5bMV0ubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPW5bMV1baV0sbD0xODAqb1swXVswXS9wLGM9MTgwKm9bMF1bMV0vcCx1PTE4MCpvWzFdWzFdL3AsZj0xODAqb1syXVswXS9wLGg9MTgwKm9bMl1bMV0vcDtyLnB1c2gocyhbW2YtZSxoLWVdLFtmLWUsdStlXSxbbCtlLHUrZV0sW2wrZSxjLWVdXSwzMCkpfXJldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdC5tZXJnZShyKV19fSgpLGwpfSxpfSxhLmxvYmVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bW3RbMF1bMF0qcC8xODAsdFswXVsxXSpwLzE4MF0sW3RbMV1bMF0qcC8xODAsdFsxXVsxXSpwLzE4MF0sW3RbMl1bMF0qcC8xODAsdFsyXVsxXSpwLzE4MF1dfSl9KSxyPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXt2YXIgcixuPWUodFswXVswXSx0WzBdWzFdKVswXSxpPWUodFsyXVswXSx0WzJdWzFdKVswXSxhPWUodFsxXVswXSx0WzBdWzFdKVsxXSxvPWUodFsxXVswXSx0WzFdWzFdKVsxXTtyZXR1cm4gYT5vJiYocj1hLGE9byxvPXIpLFtbbixhXSxbaSxvXV19KX0pLGEpOm4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bWzE4MCp0WzBdWzBdL3AsMTgwKnRbMF1bMV0vcF0sWzE4MCp0WzFdWzBdL3AsMTgwKnRbMV1bMV0vcF0sWzE4MCp0WzJdWzBdL3AsMTgwKnRbMl1bMV0vcF1dfSl9KX0sYX0sXy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0uNSplKk1hdGguc3FydCgoNCtwKS9wKSxuPW0ociksaT1NYXRoLmNvcyhuKTtyZXR1cm5bdC8oMi9NYXRoLnNxcnQocCooNCtwKSkqKDEraSkpLG0oKG4rciooaSsyKSkvKDIrZCkpXX0sKHQuZ2VvLmVja2VydDQ9ZnVuY3Rpb24oKXtyZXR1cm4geChfKX0pLnJhdz1fO3ZhciB3PXQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYS5yYXc7ZnVuY3Rpb24gayh0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCksMT09PWUpcmV0dXJuIHc7aWYoZT09PTEvMClyZXR1cm4gVDtmdW5jdGlvbiByKHIsbil7dmFyIGk9dyhyL2Usbik7cmV0dXJuIGlbMF0qPXQsaX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT13LmludmVydChyL3Qsbik7cmV0dXJuIGlbMF0qPWUsaX0scn1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSkvTWF0aC5jb3MoZS89MiksMipNYXRoLnNpbihlKV19ZnVuY3Rpb24gQSh0LGUpe3JldHVyblszKnQvKDIqcCkqTWF0aC5zcXJ0KHAqcC8zLWUqZSksZV19ZnVuY3Rpb24gTSh0LGUpe3JldHVyblt0LDEuMjUqTWF0aC5sb2coTWF0aC50YW4ocC80Ky40KmUpKV19ZnVuY3Rpb24gUyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsbj10Kk1hdGguc2luKGUpLGk9MzA7ZG97ZS09cj0oZStNYXRoLnNpbihlKS1uKS8oMStNYXRoLmNvcyhlKSl9d2hpbGUoTWF0aC5hYnMocik+ZiYmLS1pPjApO3JldHVybiBlLzJ9fVQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MiptKGUvMik7cmV0dXJuW3QqTWF0aC5jb3Moci8yKS9NYXRoLmNvcyhyKSxyXX0sKHQuZ2VvLmhhbW1lcj1mdW5jdGlvbigpe3ZhciB0PTIsZT1iKGspLHI9ZSh0KTtyZXR1cm4gci5jb2VmZmljaWVudD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHQ9K3IpOnR9LHJ9KS5yYXc9ayxBLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblsyLzMqcCp0L01hdGguc3FydChwKnAvMy1lKmUpLGVdfSwodC5nZW8ua2F2cmF5c2tpeTc9ZnVuY3Rpb24oKXtyZXR1cm4geChBKX0pLnJhdz1BLE0uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMi41Kk1hdGguYXRhbihNYXRoLmV4cCguOCplKSktLjYyNSpwXX0sKHQuZ2VvLm1pbGxlcj1mdW5jdGlvbigpe3JldHVybiB4KE0pfSkucmF3PU0sUyhwKTt2YXIgRT1mdW5jdGlvbih0LGUscil7dmFyIG49UyhyKTtmdW5jdGlvbiBpKHIsaSl7cmV0dXJuW3QqcipNYXRoLmNvcyhpPW4oaSkpLGUqTWF0aC5zaW4oaSldfXJldHVybiBpLmludmVydD1mdW5jdGlvbihuLGkpe3ZhciBhPW0oaS9lKTtyZXR1cm5bbi8odCpNYXRoLmNvcyhhKSksbSgoMiphK01hdGguc2luKDIqYSkpL3IpXX0saX0oTWF0aC5TUVJUMi9kLE1hdGguU1FSVDIscCk7ZnVuY3Rpb24gQyh0LGUpe3ZhciByPWUqZSxuPXIqcjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpyK24qKG4qKC4wMDM5NzEqci0uMDAxNTI5Km4pLS4wMTM3OTEpKSxlKigxLjAwNzIyNityKiguMDE1MDg1K24qKC4wMjg4NzQqci0uMDQ0NDc1LS4wMDU5MTYqbikpKV19KHQuZ2VvLm1vbGx3ZWlkZT1mdW5jdGlvbigpe3JldHVybiB4KEUpfSkucmF3PUUsQy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT0yNTtkb3t2YXIgYT1uKm4sbz1hKmE7bi09cj0obiooMS4wMDcyMjYrYSooLjAxNTA4NStvKiguMDI4ODc0KmEtLjA0NDQ3NS0uMDA1OTE2Km8pKSktZSkvKDEuMDA3MjI2K2EqKC4wNDUyNTUrbyooLjI1OTg2NiphLS4zMTEzMjUtLjAwNTkxNioxMSpvKSkpfXdoaWxlKE1hdGguYWJzKHIpPmYmJi0taT4wKTtyZXR1cm5bdC8oLjg3MDcrKGE9bipuKSooYSooYSphKmEqKC4wMDM5NzEtLjAwMTUyOSphKS0uMDEzNzkxKS0uMTMxOTc5KSksbl19LCh0Lmdlby5uYXR1cmFsRWFydGg9ZnVuY3Rpb24oKXtyZXR1cm4geChDKX0pLnJhdz1DO3ZhciBMPVtbLjk5ODYsLS4wNjJdLFsxLDBdLFsuOTk4NiwuMDYyXSxbLjk5NTQsLjEyNF0sWy45OSwuMTg2XSxbLjk4MjIsLjI0OF0sWy45NzMsLjMxXSxbLjk2LC4zNzJdLFsuOTQyNywuNDM0XSxbLjkyMTYsLjQ5NThdLFsuODk2MiwuNTU3MV0sWy44Njc5LC42MTc2XSxbLjgzNSwuNjc2OV0sWy43OTg2LC43MzQ2XSxbLjc1OTcsLjc5MDNdLFsuNzE4NiwuODQzNV0sWy42NzMyLC44OTM2XSxbLjYyMTMsLjkzOTRdLFsuNTcyMiwuOTc2MV0sWy41MzIyLDFdXTtmdW5jdGlvbiB6KHQsZSl7dmFyIHIsbj1NYXRoLm1pbigxOCwzNipNYXRoLmFicyhlKS9wKSxpPU1hdGguZmxvb3IobiksYT1uLWksbz0ocj1MW2ldKVswXSxzPXJbMV0sbD0ocj1MWysraV0pWzBdLGM9clsxXSx1PShyPUxbTWF0aC5taW4oMTksKytpKV0pWzBdLGY9clsxXTtyZXR1cm5bdCoobCthKih1LW8pLzIrYSphKih1LTIqbCtvKS8yKSwoZT4wP2Q6LWQpKihjK2EqKGYtcykvMithKmEqKGYtMipjK3MpLzIpXX1mdW5jdGlvbiBPKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksZV19ZnVuY3Rpb24gSSh0LGUpe3ZhciByLG49TWF0aC5jb3MoZSksaT0ocj15KG4qTWF0aC5jb3ModC89MikpKT9yL01hdGguc2luKHIpOjE7cmV0dXJuWzIqbipNYXRoLnNpbih0KSppLE1hdGguc2luKGUpKmldfWZ1bmN0aW9uIEQodCxlKXt2YXIgcj1JKHQsZSk7cmV0dXJuWyhyWzBdK3QvZCkvMiwoclsxXStlKS8yXX1MLmZvckVhY2goZnVuY3Rpb24odCl7dFsxXSo9MS4wMTQ0fSksei5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lL2Qsbj05MCpyLGk9TWF0aC5taW4oMTgsTWF0aC5hYnMobi81KSksYT1NYXRoLm1heCgwLE1hdGguZmxvb3IoaSkpO2Rve3ZhciBvPUxbYV1bMV0scz1MW2ErMV1bMV0sbD1MW01hdGgubWluKDE5LGErMildWzFdLGM9bC1vLHU9bC0yKnMrbyxmPTIqKE1hdGguYWJzKHIpLXMpL2MscD11L2MsbT1mKigxLXAqZiooMS0yKnAqZikpO2lmKG0+PTB8fDE9PT1hKXtuPShlPj0wPzU6LTUpKihtK2kpO3ZhciB5LHg9NTA7ZG97bT0oaT1NYXRoLm1pbigxOCxNYXRoLmFicyhuKS81KSktKGE9TWF0aC5mbG9vcihpKSksbz1MW2FdWzFdLHM9TFthKzFdWzFdLGw9TFtNYXRoLm1pbigxOSxhKzIpXVsxXSxuLT0oeT0oZT49MD9kOi1kKSoocyttKihsLW8pLzIrbSptKihsLTIqcytvKS8yKS1lKSp2fXdoaWxlKE1hdGguYWJzKHkpPmgmJi0teD4wKTticmVha319d2hpbGUoLS1hPj0wKTt2YXIgYj1MW2FdWzBdLF89TFthKzFdWzBdLHc9TFtNYXRoLm1pbigxOSxhKzIpXVswXTtyZXR1cm5bdC8oXyttKih3LWIpLzIrbSptKih3LTIqXytiKS8yKSxuKmddfSwodC5nZW8ucm9iaW5zb249ZnVuY3Rpb24oKXtyZXR1cm4geCh6KX0pLnJhdz16LE8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QvTWF0aC5jb3MoZSksZV19LCh0Lmdlby5zaW51c29pZGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHgoTyl9KS5yYXc9TyxJLmludmVydD1mdW5jdGlvbih0LGUpe2lmKCEodCp0KzQqZSplPnAqcCtmKSl7dmFyIHI9dCxuPWUsaT0yNTtkb3t2YXIgYSxvPU1hdGguc2luKHIpLHM9TWF0aC5zaW4oci8yKSxsPU1hdGguY29zKHIvMiksYz1NYXRoLnNpbihuKSx1PU1hdGguY29zKG4pLGg9TWF0aC5zaW4oMipuKSxkPWMqYyxnPXUqdSx2PXMqcyxtPTEtZypsKmwseD1tP3kodSpsKSpNYXRoLnNxcnQoYT0xL20pOmE9MCxiPTIqeCp1KnMtdCxfPXgqYy1lLHc9YSooZyp2K3gqdSpsKmQpLGs9YSooLjUqbypoLTIqeCpjKnMpLFQ9LjI1KmEqKGgqcy14KmMqZypvKSxBPWEqKGQqbCt4KnYqdSksTT1rKlQtQSp3O2lmKCFNKWJyZWFrO3ZhciBTPShfKmstYipBKS9NLEU9KGIqVC1fKncpL007ci09UyxuLT1FfXdoaWxlKChNYXRoLmFicyhTKT5mfHxNYXRoLmFicyhFKT5mKSYmLS1pPjApO3JldHVybltyLG5dfX0sKHQuZ2VvLmFpdG9mZj1mdW5jdGlvbigpe3JldHVybiB4KEkpfSkucmF3PUksRC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ZSxpPTI1O2Rve3ZhciBhLG89TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxsPU1hdGguc2luKDIqbiksYz1zKnMsdT1vKm8saD1NYXRoLnNpbihyKSxwPU1hdGguY29zKHIvMiksZz1NYXRoLnNpbihyLzIpLHY9ZypnLG09MS11KnAqcCx4PW0/eShvKnApKk1hdGguc3FydChhPTEvbSk6YT0wLGI9LjUqKDIqeCpvKmcrci9kKS10LF89LjUqKHgqcytuKS1lLHc9LjUqYSoodSp2K3gqbypwKmMpKy41L2Qsaz1hKihoKmwvNC14KnMqZyksVD0uMTI1KmEqKGwqZy14KnMqdSpoKSxBPS41KmEqKGMqcCt4KnYqbykrLjUsTT1rKlQtQSp3LFM9KF8qay1iKkEpL00sRT0oYipULV8qdykvTTtyLT1TLG4tPUV9d2hpbGUoKE1hdGguYWJzKFMpPmZ8fE1hdGguYWJzKEUpPmYpJiYtLWk+MCk7cmV0dXJuW3Isbl19LCh0Lmdlby53aW5rZWwzPWZ1bmN0aW9uKCl7cmV0dXJuIHgoRCl9KS5yYXc9RH19LHt9XSw3ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPU1hdGguUEkvMTgwLHM9MTgwL01hdGguUEksbD17Y3Vyc29yOiJwb2ludGVyIn0sYz17Y3Vyc29yOiJhdXRvIn07ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBuLmJlaGF2aW9yLnpvb20oKS50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSkuc2NhbGUoZS5zY2FsZSgpKX1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj10LmlkLG89dC5ncmFwaERpdixzPW8ubGF5b3V0LGw9c1tuXSxjPW8uX2Z1bGxMYXlvdXQsdT1jW25dLGY9e30saD17fTtmdW5jdGlvbiBwKHQsZSl7ZltuKyIuIit0XT1pLm5lc3RlZFByb3BlcnR5KGwsdCkuZ2V0KCksYS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixzLGMuX3ByZUdVSSxmKTt2YXIgcj1pLm5lc3RlZFByb3BlcnR5KHUsdCk7ci5nZXQoKSE9PWUmJihyLnNldChlKSxpLm5lc3RlZFByb3BlcnR5KGwsdCkuc2V0KGUpLGhbbisiLiIrdF09ZSl9cihwKSxwKCJwcm9qZWN0aW9uLnNjYWxlIixlLnNjYWxlKCkvdC5maXRTY2FsZSksby5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGgpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj11KDAsZSk7ZnVuY3Rpb24gaShyKXt2YXIgbj1lLmludmVydCh0Lm1pZFB0KTtyKCJjZW50ZXIubG9uIixuWzBdKSxyKCJjZW50ZXIubGF0IixuWzFdKX1yZXR1cm4gci5vbigiem9vbXN0YXJ0IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpfSkub24oInpvb20iLGZ1bmN0aW9uKCl7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKS50cmFuc2xhdGUobi5ldmVudC50cmFuc2xhdGUpLHQucmVuZGVyKCl9KS5vbigiem9vbWVuZCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShjKSxmKHQsZSxpKX0pLHJ9ZnVuY3Rpb24gcCh0LGUpe3ZhciByLGksYSxvLHMsaCxwLGQsZyx2PXUoMCxlKSxtPTI7ZnVuY3Rpb24geSh0KXtyZXR1cm4gZS5pbnZlcnQodCl9ZnVuY3Rpb24geChyKXt2YXIgbj1lLnJvdGF0ZSgpLGk9ZS5pbnZlcnQodC5taWRQdCk7cigicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iLC1uWzBdKSxyKCJjZW50ZXIubG9uIixpWzBdKSxyKCJjZW50ZXIubGF0IixpWzFdKX1yZXR1cm4gdi5vbigiem9vbXN0YXJ0IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpLHI9bi5tb3VzZSh0aGlzKSxpPWUucm90YXRlKCksYT1lLnRyYW5zbGF0ZSgpLG89aSxzPXkocil9KS5vbigiem9vbSIsZnVuY3Rpb24oKXtpZihoPW4ubW91c2UodGhpcyksZnVuY3Rpb24odCl7dmFyIHI9eSh0KTtpZighcilyZXR1cm4hMDt2YXIgbj1lKHIpO3JldHVybiBNYXRoLmFicyhuWzBdLXRbMF0pPm18fE1hdGguYWJzKG5bMV0tdFsxXSk+bX0ocikpcmV0dXJuIHYuc2NhbGUoZS5zY2FsZSgpKSx2b2lkIHYudHJhbnNsYXRlKGUudHJhbnNsYXRlKCkpO2Uuc2NhbGUobi5ldmVudC5zY2FsZSksZS50cmFuc2xhdGUoW2FbMF0sbi5ldmVudC50cmFuc2xhdGVbMV1dKSxzP3koaCkmJihkPXkoaCkscD1bb1swXSsoZFswXS1zWzBdKSxpWzFdLGlbMl1dLGUucm90YXRlKHApLG89cCk6cz15KHI9aCksZz0hMCx0LnJlbmRlcigpfSkub24oInpvb21lbmQiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksZyYmZih0LGUseCl9KSx2fWZ1bmN0aW9uIGQodCxlKXt2YXIgcixpPXtyOmUucm90YXRlKCksazplLnNjYWxlKCl9LGE9dSgwLGUpLGg9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPWFyZ3VtZW50cy5sZW5ndGgsaT1bXTtmb3IoOysrZTxyOylpLnB1c2goYXJndW1lbnRzW2VdKTt2YXIgYT1uLmRpc3BhdGNoLmFwcGx5KG51bGwsaSk7cmV0dXJuIGEub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG87dHJ5e289aS5zb3VyY2VFdmVudD1uLmV2ZW50LGkudGFyZ2V0PXQsbi5ldmVudD1pLGFbaS50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7bi5ldmVudD1vfX19LGF9KGEsInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIikscD0wLGQ9YS5vbjtmdW5jdGlvbiBtKHQpe3ZhciByPWUucm90YXRlKCk7dCgicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iLC1yWzBdKSx0KCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCIsLXJbMV0pfXJldHVybiBhLm9uKCJ6b29tc3RhcnQiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCk7dmFyIHQsYyx1LGYsbSxiLF8sdyxrLFQsQSxNPW4ubW91c2UodGhpcyksUz1lLnJvdGF0ZSgpLEU9UyxDPWUudHJhbnNsYXRlKCksTD0oYz0uNSoodD1TKVswXSpvLHU9LjUqdFsxXSpvLGY9LjUqdFsyXSpvLG09TWF0aC5zaW4oYyksYj1NYXRoLmNvcyhjKSxfPU1hdGguc2luKHUpLHc9TWF0aC5jb3ModSksaz1NYXRoLnNpbihmKSxUPU1hdGguY29zKGYpLFtiKncqVCttKl8qayxtKncqVC1iKl8qayxiKl8qVCttKncqayxiKncqay1tKl8qVF0pO3I9ZyhlLE0pLGQuY2FsbChhLCJ6b29tIixmdW5jdGlvbigpe3ZhciB0LGEsbyxsLGMsdSxmLHAsZCxtLGI9bi5tb3VzZSh0aGlzKTtpZihlLnNjYWxlKGkuaz1uLmV2ZW50LnNjYWxlKSxyKXtpZihnKGUsYikpe2Uucm90YXRlKFMpLnRyYW5zbGF0ZShDKTt2YXIgXz1nKGUsYiksdz1mdW5jdGlvbih0LGUpe2lmKCF0fHwhZSlyZXR1cm47dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfSh0LGUpLG49TWF0aC5zcXJ0KHgocixyKSksaT0uNSpNYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSx4KHQsZSkpKSksYT1NYXRoLnNpbihpKS9uO3JldHVybiBuJiZbTWF0aC5jb3MoaSksclsyXSphLC1yWzFdKmEsclswXSphXX0ocixfKSxrPWZ1bmN0aW9uKHQpe3JldHVybltNYXRoLmF0YW4yKDIqKHRbMF0qdFsxXSt0WzJdKnRbM10pLDEtMioodFsxXSp0WzFdK3RbMl0qdFsyXSkpKnMsTWF0aC5hc2luKE1hdGgubWF4KC0xLE1hdGgubWluKDEsMioodFswXSp0WzJdLXRbM10qdFsxXSkpKSkqcyxNYXRoLmF0YW4yKDIqKHRbMF0qdFszXSt0WzFdKnRbMl0pLDEtMioodFsyXSp0WzJdK3RbM10qdFszXSkpKnNdfSgoYT13LG89KHQ9TClbMF0sbD10WzFdLGM9dFsyXSx1PXRbM10sZj1hWzBdLHA9YVsxXSxkPWFbMl0sbT1hWzNdLFtvKmYtbCpwLWMqZC11Km0sbypwK2wqZitjKm0tdSpkLG8qZC1sKm0rYypmK3UqcCxvKm0rbCpkLWMqcCt1KmZdKSksVD1pLnI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXkoZSwyLHRbMF0pO249eShuLDEsdFsxXSksbj15KG4sMCx0WzJdLXJbMl0pO3ZhciBpLGEsbz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1uWzBdLGY9blsxXSxoPW5bMl0scD1NYXRoLmF0YW4yKGwsbykqcyxkPU1hdGguc3FydChvKm8rbCpsKTtNYXRoLmFicyhmKT5kPyhhPShmPjA/OTA6LTkwKS1wLGk9MCk6KGE9TWF0aC5hc2luKGYvZCkqcy1wLGk9TWF0aC5zcXJ0KGQqZC1mKmYpKTt2YXIgZz0xODAtYS0yKnAsbT0oTWF0aC5hdGFuMihoLHUpLU1hdGguYXRhbjIoYyxpKSkqcyx4PShNYXRoLmF0YW4yKGgsdSktTWF0aC5hdGFuMihjLC1pKSkqcyxiPXYoclswXSxyWzFdLGEsbSksXz12KHJbMF0sclsxXSxnLHgpO3JldHVybiBiPD1fP1thLG0sclsyXV06W2cseCxyWzJdXX0oayxyLEUpO2lzRmluaXRlKFRbMF0pJiZpc0Zpbml0ZShUWzFdKSYmaXNGaW5pdGUoVFsyXSl8fChUPUUpLGUucm90YXRlKFQpLEU9VH19ZWxzZSByPWcoZSxNPWIpO2gub2YodGhpcyxhcmd1bWVudHMpKHt0eXBlOiJ6b29tIn0pfSksQT1oLm9mKHRoaXMsYXJndW1lbnRzKSxwKyt8fEEoe3R5cGU6Inpvb21zdGFydCJ9KX0pLm9uKCJ6b29tZW5kIixmdW5jdGlvbigpe3ZhciByO24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGQuY2FsbChhLCJ6b29tIixudWxsKSxyPWgub2YodGhpcyxhcmd1bWVudHMpLC0tcHx8cih7dHlwZToiem9vbWVuZCJ9KSxmKHQsZSxtKX0pLm9uKCJ6b29tLnJlZHJhdyIsZnVuY3Rpb24oKXt0LnJlbmRlcigpfSksbi5yZWJpbmQoYSxoLCJvbiIpfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj10LmludmVydChlKTtyZXR1cm4gciYmaXNGaW5pdGUoclswXSkmJmlzRmluaXRlKHJbMV0pJiZmdW5jdGlvbih0KXt2YXIgZT10WzBdKm8scj10WzFdKm8sbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX0ocil9ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgaT1tKHItdCksYT1tKG4tZSk7cmV0dXJuIE1hdGguc3FydChpKmkrYSphKX1mdW5jdGlvbiBtKHQpe3JldHVybih0JTM2MCs1NDApJTM2MC0xODB9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49cipvLGk9dC5zbGljZSgpLGE9MD09PWU/MTowLHM9Mj09PWU/MToyLGw9TWF0aC5jb3MobiksYz1NYXRoLnNpbihuKTtyZXR1cm4gaVthXT10W2FdKmwtdFtzXSpjLGlbc109dFtzXSpsK3RbYV0qYyxpfWZ1bmN0aW9uIHgodCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXIrPXRbbl0qZVtuXTtyZXR1cm4gcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnByb2plY3Rpb247cmV0dXJuKGUuX2lzU2NvcGVkP2g6ZS5faXNDbGlwcGVkP2Q6cCkodCxyKX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksZDM6MTU0fV0sNzg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5IiksaT10KCIuL2NhcnRlc2lhbi9jb25zdGFudHMiKS5TVUJQTE9UX1BBVFRFUk47ci5nZXRTdWJwbG90Q2FsY0RhdGE9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uc3VicGxvdHNSZWdpc3RyeVtlXTtpZighaSlyZXR1cm5bXTtmb3IodmFyIGE9aS5hdHRyLG89W10scz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdO2xbMF0udHJhY2VbYV09PT1yJiZvLnB1c2gobCl9cmV0dXJuIG99LHIuZ2V0TW9kdWxlQ2FsY0RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixpPVtdLGE9W107aWYoIShyPSJzdHJpbmciPT10eXBlb2YgZT9uLmdldE1vZHVsZShlKS5wbG90OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZS5wbG90KSlyZXR1cm5baSx0XTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXSxsPXNbMF0udHJhY2U7ITA9PT1sLnZpc2libGUmJihsLl9tb2R1bGUucGxvdD09PXI/aS5wdXNoKHMpOmEucHVzaChzKSl9cmV0dXJuW2ksYV19LHIuZ2V0U3VicGxvdERhdGE9ZnVuY3Rpb24odCxlLHIpe2lmKCFuLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuW107dmFyIGEsbyxzLGw9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdLmF0dHIsYz1bXTtpZigiZ2wyZCI9PT1lKXt2YXIgdT1yLm1hdGNoKGkpO289IngiK3VbMV0scz0ieSIrdVsyXX1mb3IodmFyIGY9MDtmPHQubGVuZ3RoO2YrKylhPXRbZl0sImdsMmQiPT09ZSYmbi50cmFjZUlzKGEsImdsMmQiKT9hW2xbMF1dPT09byYmYVtsWzFdXT09PXMmJmMucHVzaChhKTphW2xdPT09ciYmYy5wdXNoKGEpO3JldHVybiBjfX0seyIuLi9yZWdpc3RyeSI6ODI5LCIuL2NhcnRlc2lhbi9jb25zdGFudHMiOjc1NH1dLDc4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtb3VzZS1jaGFuZ2UiKSxpPXQoIm1vdXNlLXdoZWVsIiksYT10KCJtb3VzZS1ldmVudC1vZmZzZXQiKSxvPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKSxzPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpO2Z1bmN0aW9uIGwodCxlKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLnBsb3Q9ZSx0aGlzLm1vdXNlTGlzdGVuZXI9bnVsbCx0aGlzLndoZWVsTGlzdGVuZXI9bnVsbCx0aGlzLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx0aGlzLmxhc3RQb3M9WzAsMF0sdGhpcy5ib3hFbmFibGVkPSExLHRoaXMuYm94SW5pdGVkPSExLHRoaXMuYm94U3RhcnQ9WzAsMF0sdGhpcy5ib3hFbmQ9WzAsMF0sdGhpcy5kcmFnU3RhcnQ9WzAsMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubW91c2VDb250YWluZXIscj10LmdscGxvdCxjPW5ldyBsKGUscik7ZnVuY3Rpb24gdSgpe3QueGF4aXMuYXV0b3JhbmdlPSExLHQueWF4aXMuYXV0b3JhbmdlPSExfWZ1bmN0aW9uIGYoZSxuLGkpe3ZhciBhLHMsbD10LmNhbGNEYXRhQm94KCksZj1yLnZpZXdCb3gsaD1jLmxhc3RQb3NbMF0scD1jLmxhc3RQb3NbMV0sZD1vLk1JTkRSQUcqci5waXhlbFJhdGlvLGc9by5NSU5aT09NKnIucGl4ZWxSYXRpbztmdW5jdGlvbiB2KGUscixuKXt2YXIgaT1NYXRoLm1pbihyLG4pLGE9TWF0aC5tYXgocixuKTtpIT09YT8obFtlXT1pLGxbZSsyXT1hLGMuZGF0YUJveD1sLHQuc2V0UmFuZ2VzKGwpKToodC5zZWxlY3RCb3guc2VsZWN0Qm94PVswLDAsMSwxXSx0LmdscGxvdC5zZXREaXJ0eSgpKX1zd2l0Y2gobio9ci5waXhlbFJhdGlvLGkqPXIucGl4ZWxSYXRpbyxpPWZbM10tZlsxXS1pLHQuZnVsbExheW91dC5kcmFnbW9kZSl7Y2FzZSJ6b29tIjppZihlKXt2YXIgbT1uLyhmWzJdLWZbMF0pKihsWzJdLWxbMF0pK2xbMF0seT1pLyhmWzNdLWZbMV0pKihsWzNdLWxbMV0pK2xbMV07Yy5ib3hJbml0ZWR8fChjLmJveFN0YXJ0WzBdPW0sYy5ib3hTdGFydFsxXT15LGMuZHJhZ1N0YXJ0WzBdPW4sYy5kcmFnU3RhcnRbMV09aSksYy5ib3hFbmRbMF09bSxjLmJveEVuZFsxXT15LGMuYm94SW5pdGVkPSEwLGMuYm94RW5hYmxlZHx8Yy5ib3hTdGFydFswXT09PWMuYm94RW5kWzBdJiZjLmJveFN0YXJ0WzFdPT09Yy5ib3hFbmRbMV18fChjLmJveEVuYWJsZWQ9ITApO3ZhciB4PU1hdGguYWJzKGMuZHJhZ1N0YXJ0WzBdLW4pPGcsYj1NYXRoLmFicyhjLmRyYWdTdGFydFsxXS1pKTxnO2lmKCFmdW5jdGlvbigpe2Zvcih2YXIgZT10LmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxyPXQueGF4aXMuX2lkLG49dC55YXhpcy5faWQsaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKC0xIT09ZVtpXVtyXSl7aWYoLTEhPT1lW2ldW25dKXJldHVybiEwO2JyZWFrfXJldHVybiExfSgpfHx4JiZiKXgmJihjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKSxiJiYoYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXSk7ZWxzZXthPWMuYm94RW5kWzBdLWMuYm94U3RhcnRbMF0scz1jLmJveEVuZFsxXS1jLmJveFN0YXJ0WzFdO3ZhciBfPShsWzNdLWxbMV0pLyhsWzJdLWxbMF0pO01hdGguYWJzKGEqXyk+TWF0aC5hYnMocyk/KGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rTWF0aC5hYnMoYSkqXyoocz49MD8xOi0xKSxjLmJveEVuZFsxXTxsWzFdPyhjLmJveEVuZFsxXT1sWzFdLGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rKGxbMV0tYy5ib3hTdGFydFsxXSkvTWF0aC5hYnMoXykpOmMuYm94RW5kWzFdPmxbM10mJihjLmJveEVuZFsxXT1sWzNdLGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rKGxbM10tYy5ib3hTdGFydFsxXSkvTWF0aC5hYnMoXykpKTooYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXStNYXRoLmFicyhzKS9fKihhPj0wPzE6LTEpLGMuYm94RW5kWzBdPGxbMF0/KGMuYm94RW5kWzBdPWxbMF0sYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXSsobFswXS1jLmJveFN0YXJ0WzBdKSpNYXRoLmFicyhfKSk6Yy5ib3hFbmRbMF0+bFsyXSYmKGMuYm94RW5kWzBdPWxbMl0sYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXSsobFsyXS1jLmJveFN0YXJ0WzBdKSpNYXRoLmFicyhfKSkpfX1lbHNlIGMuYm94RW5hYmxlZD8oYT1jLmJveFN0YXJ0WzBdIT09Yy5ib3hFbmRbMF0scz1jLmJveFN0YXJ0WzFdIT09Yy5ib3hFbmRbMV0sYXx8cz8oYSYmKHYoMCxjLmJveFN0YXJ0WzBdLGMuYm94RW5kWzBdKSx0LnhheGlzLmF1dG9yYW5nZT0hMSkscyYmKHYoMSxjLmJveFN0YXJ0WzFdLGMuYm94RW5kWzFdKSx0LnlheGlzLmF1dG9yYW5nZT0hMSksdC5yZWxheW91dENhbGxiYWNrKCkpOnQuZ2xwbG90LnNldERpcnR5KCksYy5ib3hFbmFibGVkPSExLGMuYm94SW5pdGVkPSExKTpjLmJveEluaXRlZCYmKGMuYm94SW5pdGVkPSExKTticmVhaztjYXNlInBhbiI6Yy5ib3hFbmFibGVkPSExLGMuYm94SW5pdGVkPSExLGU/KGMucGFubmluZ3x8KGMuZHJhZ1N0YXJ0WzBdPW4sYy5kcmFnU3RhcnRbMV09aSksTWF0aC5hYnMoYy5kcmFnU3RhcnRbMF0tbik8ZCYmKG49Yy5kcmFnU3RhcnRbMF0pLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzFdLWkpPGQmJihpPWMuZHJhZ1N0YXJ0WzFdKSxhPShoLW4pKihsWzJdLWxbMF0pLyhyLnZpZXdCb3hbMl0tci52aWV3Qm94WzBdKSxzPShwLWkpKihsWzNdLWxbMV0pLyhyLnZpZXdCb3hbM10tci52aWV3Qm94WzFdKSxsWzBdKz1hLGxbMl0rPWEsbFsxXSs9cyxsWzNdKz1zLHQuc2V0UmFuZ2VzKGwpLGMucGFubmluZz0hMCxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpKTpjLnBhbm5pbmcmJihjLnBhbm5pbmc9ITEsdC5yZWxheW91dENhbGxiYWNrKCkpfWMubGFzdFBvc1swXT1uLGMubGFzdFBvc1sxXT1pfXJldHVybiBjLm1vdXNlTGlzdGVuZXI9bihlLGYpLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24odCl7dmFyIHI9YSh0LmNoYW5nZWRUb3VjaGVzWzBdLGUpO2YoMCxyWzBdLHJbMV0pLGYoMSxyWzBdLHJbMV0pLHQucHJldmVudERlZmF1bHQoKX0sISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9YSh0LmNoYW5nZWRUb3VjaGVzWzBdLGUpO2YoMSxyWzBdLHJbMV0pLHQucHJldmVudERlZmF1bHQoKX0sISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGZ1bmN0aW9uKHQpe2YoMCxjLmxhc3RQb3NbMF0sYy5sYXN0UG9zWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhcyYme3Bhc3NpdmU6ITF9KSxjLndoZWVsTGlzdGVuZXI9aShlLGZ1bmN0aW9uKGUsbil7aWYoIXQuc2Nyb2xsWm9vbSlyZXR1cm4hMTt2YXIgaT10LmNhbGNEYXRhQm94KCksYT1yLnZpZXdCb3gsbz1jLmxhc3RQb3NbMF0scz1jLmxhc3RQb3NbMV0sbD1NYXRoLmV4cCg1Km4vKGFbM10tYVsxXSkpLGY9by8oYVsyXS1hWzBdKSooaVsyXS1pWzBdKStpWzBdLGg9cy8oYVszXS1hWzFdKSooaVszXS1pWzFdKStpWzFdO3JldHVybiBpWzBdPShpWzBdLWYpKmwrZixpWzJdPShpWzJdLWYpKmwrZixpWzFdPShpWzFdLWgpKmwraCxpWzNdPShpWzNdLWgpKmwraCx0LnNldFJhbmdlcyhpKSxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpLHQucmVsYXlvdXRDYWxsYmFjaygpLCEwfSwhMCksY319LHsiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NzU0LCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQwMywibW91c2UtY2hhbmdlIjo0MjcsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDI4LCJtb3VzZS13aGVlbCI6NDMwfV0sNzg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gYSh0KXt0aGlzLnNjZW5lPXQsdGhpcy5nbD10LmdsLHRoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sdGhpcy5zY3JlZW5Cb3g9WzAsMCwxLDFdLHRoaXMudmlld0JveD1bMCwwLDEsMV0sdGhpcy5kYXRhQm94PVstMSwtMSwxLDFdLHRoaXMuYm9yZGVyTGluZUVuYWJsZT1bITEsITEsITEsITFdLHRoaXMuYm9yZGVyTGluZVdpZHRoPVsxLDEsMSwxXSx0aGlzLmJvcmRlckxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tzPVtbXSxbXV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy50aWNrUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy50aWNrQW5nbGU9WzAsMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxzPVsieCIsInkiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbFNpemU9WzEyLDEyXSx0aGlzLmxhYmVsRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGU9IiIsdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQ2VudGVyPVswLDAsMCwwXSx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMudGl0bGVGb250PSJzYW5zLXNlcmlmIix0aGlzLnRpdGxlU2l6ZT0xOCx0aGlzLmdyaWRMaW5lRW5hYmxlPVshMCwhMF0sdGhpcy5ncmlkTGluZUNvbG9yPVtbMCwwLDAsLjVdLFswLDAsMCwuNV1dLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVsxLDFdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuc3RhdGljPXRoaXMuc2NlbmUuc3RhdGljUGxvdH12YXIgbz1hLnByb3RvdHlwZSxzPVsieGF4aXMiLCJ5YXhpcyJdO28ubWVyZ2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsbyxsLGMsdSxmLGgscDtmb3IodGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1pKHQucGxvdF9iZ2NvbG9yKSxoPTA7aDwyOysraCl7dmFyIGQ9KGU9c1toXSkuY2hhckF0KDApO2ZvcihuPShyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0pLnRpdGxlLnRleHQ9PT10aGlzLnNjZW5lLmZ1bGxMYXlvdXQuX2RmbHRUaXRsZVtkXT8iIjpyLnRpdGxlLnRleHQscD0wO3A8PTI7cCs9Mil0aGlzLmxhYmVsRW5hYmxlW2grcF09ITEsdGhpcy5sYWJlbHNbaCtwXT1uLHRoaXMubGFiZWxDb2xvcltoK3BdPWkoci50aXRsZS5mb250LmNvbG9yKSx0aGlzLmxhYmVsRm9udFtoK3BdPXIudGl0bGUuZm9udC5mYW1pbHksdGhpcy5sYWJlbFNpemVbaCtwXT1yLnRpdGxlLmZvbnQuc2l6ZSx0aGlzLmxhYmVsUGFkW2grcF09dGhpcy5nZXRMYWJlbFBhZChlLHIpLHRoaXMudGlja0VuYWJsZVtoK3BdPSExLHRoaXMudGlja0NvbG9yW2grcF09aSgoci50aWNrZm9udHx8e30pLmNvbG9yKSx0aGlzLnRpY2tBbmdsZVtoK3BdPSJhdXRvIj09PXIudGlja2FuZ2xlPzA6TWF0aC5QSSotci50aWNrYW5nbGUvMTgwLHRoaXMudGlja1BhZFtoK3BdPXRoaXMuZ2V0VGlja1BhZChyKSx0aGlzLnRpY2tNYXJrTGVuZ3RoW2grcF09MCx0aGlzLnRpY2tNYXJrV2lkdGhbaCtwXT1yLnRpY2t3aWR0aHx8MCx0aGlzLnRpY2tNYXJrQ29sb3JbaCtwXT1pKHIudGlja2NvbG9yKSx0aGlzLmJvcmRlckxpbmVFbmFibGVbaCtwXT0hMSx0aGlzLmJvcmRlckxpbmVDb2xvcltoK3BdPWkoci5saW5lY29sb3IpLHRoaXMuYm9yZGVyTGluZVdpZHRoW2grcF09ci5saW5ld2lkdGh8fDA7Yz10aGlzLmhhc1NoYXJlZEF4aXMociksbz10aGlzLmhhc0F4aXNJbkRmbHRQb3MoZSxyKSYmIWMsbD10aGlzLmhhc0F4aXNJbkFsdHJQb3MoZSxyKSYmIWMsYT1yLm1pcnJvcnx8ITEsdT1jPy0xIT09U3RyaW5nKGEpLmluZGV4T2YoImFsbCIpOiEhYSxmPWM/ImFsbHRpY2tzIj09PWE6LTEhPT1TdHJpbmcoYSkuaW5kZXhPZigidGlja3MiKSxvP3RoaXMubGFiZWxFbmFibGVbaF09ITA6bCYmKHRoaXMubGFiZWxFbmFibGVbaCsyXT0hMCksbz90aGlzLnRpY2tFbmFibGVbaF09ci5zaG93dGlja2xhYmVsczpsJiYodGhpcy50aWNrRW5hYmxlW2grMl09ci5zaG93dGlja2xhYmVscyksKG98fHUpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW2hdPXIuc2hvd2xpbmUpLChsfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtoKzJdPXIuc2hvd2xpbmUpLChvfHxmKSYmKHRoaXMudGlja01hcmtMZW5ndGhbaF09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksKGx8fGYpJiYodGhpcy50aWNrTWFya0xlbmd0aFtoKzJdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLHRoaXMuZ3JpZExpbmVFbmFibGVbaF09ci5zaG93Z3JpZCx0aGlzLmdyaWRMaW5lQ29sb3JbaF09aShyLmdyaWRjb2xvciksdGhpcy5ncmlkTGluZVdpZHRoW2hdPXIuZ3JpZHdpZHRoLHRoaXMuemVyb0xpbmVFbmFibGVbaF09ci56ZXJvbGluZSx0aGlzLnplcm9MaW5lQ29sb3JbaF09aShyLnplcm9saW5lY29sb3IpLHRoaXMuemVyb0xpbmVXaWR0aFtoXT1yLnplcm9saW5ld2lkdGh9fSxvLmhhc1NoYXJlZEF4aXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbExheW91dC5fc3VicGxvdHMuZ2wyZDtyZXR1cm4gMCE9PW4uZmluZFN1YnBsb3RzV2l0aEF4aXMocix0KS5pbmRleE9mKGUuaWQpfSxvLmhhc0F4aXNJbkRmbHRQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuInhheGlzIj09PXQ/ImJvdHRvbSI9PT1yOiJ5YXhpcyI9PT10PyJsZWZ0Ij09PXI6dm9pZCAwfSxvLmhhc0F4aXNJbkFsdHJQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1yOiJ5YXhpcyI9PT10PyJyaWdodCI9PT1yOnZvaWQgMH0sby5nZXRMYWJlbFBhZD1mdW5jdGlvbih0LGUpe3ZhciByPWUudGl0bGUuZm9udC5zaXplLG49ZS5zaG93dGlja2xhYmVscztyZXR1cm4ieGF4aXMiPT09dD8idG9wIj09PWUuc2lkZT9yKigxLjUrKG4/MTowKSktMTA6ciooMS41KyhuPy41OjApKS0xMDoieWF4aXMiPT09dD8icmlnaHQiPT09ZS5zaWRlPzEwK3IqKDEuNSsobj8xOi41KSk6MTArciooMS41KyhuPy41OjApKTp2b2lkIDB9LG8uZ2V0VGlja1BhZD1mdW5jdGlvbih0KXtyZXR1cm4ib3V0c2lkZSI9PT10LnRpY2tzPzEwK3QudGlja2xlbjoxNX0sby5nZXRUaWNrTWFya0xlbmd0aD1mdW5jdGlvbih0KXtpZighdC50aWNrcylyZXR1cm4gMDt2YXIgZT10LnRpY2tsZW47cmV0dXJuImluc2lkZSI9PT10LnRpY2tzPy1lOmV9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEodCl9fSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcyMywiLi4vY2FydGVzaWFuL2F4ZXMiOjc0OH1dLDc4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuL3NjZW5lMmQiKSxhPXQoIi4uL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLGw9dCgiLi4vY2FydGVzaWFuIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhO3IubmFtZT0iZ2wyZCIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9cy5pZFJlZ2V4LHIuYXR0clJlZ2V4PXMuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuLi9jYXJ0ZXNpYW4vYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2UuX2hhcygiY2FydGVzaWFuIil8fGwuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSxyLmxheW91dEF0dHJPdmVycmlkZXM9bihsLmxheW91dEF0dHJpYnV0ZXMsInBsb3QiLCJmcm9tLXJvb3QiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe3Bsb3RfYmdjb2xvcjphLnBsb3RfYmdjb2xvcixob3ZlcmxhYmVsOmMuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsMmQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9ZS5fcGxvdHNbb10sbD11KHIsImdsMmQiLG8pLGM9cy5fc2NlbmUyZDt2b2lkIDA9PT1jJiYoYz1uZXcgaSh7aWQ6byxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb30sZSkscy5fc2NlbmUyZD1jKSxjLnBsb3QobCx0LmNhbGNkYXRhLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMuZ2wyZHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bi5fcGxvdHNbb107aWYocy5fc2NlbmUyZCkwPT09dSh0LCJnbDJkIixvKS5sZW5ndGgmJihzLl9zY2VuZTJkLmRlc3Ryb3koKSxkZWxldGUgbi5fcGxvdHNbb10pfWwuY2xlYW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dC5fY29udGV4dC5zdGF0aWNQbG90fHxsLmRyYXdGcmFtZXdvcmsodCl9LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQsYT1pLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcsInhsaW5rOmhyZWYiOmEseDowLHk6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLGkuZGVzdHJveSgpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsMmQsbj0wO248ci5sZW5ndGg7bisrKXtlLl9wbG90c1tyW25dXS5fc2NlbmUyZC51cGRhdGVGeChlLmRyYWdtb2RlKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiOjYxNywiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY3OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi9jYXJ0ZXNpYW4iOjc1OSwiLi4vY2FydGVzaWFuL2F0dHJpYnV0ZXMiOjc0NiwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NzU0LCIuLi9nZXRfZGF0YSI6Nzg0LCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6ODAxLCIuL3NjZW5lMmQiOjc4OH1dLDc4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbD10KCJnbC1wbG90MmQiKSxjPXQoImdsLXNwaWtlczJkIiksdT10KCJnbC1zZWxlY3QtYm94IiksZj10KCJ3ZWJnbC1jb250ZXh0IiksaD10KCIuL2NvbnZlcnQiKSxwPXQoIi4vY2FtZXJhIiksZD10KCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciKSxnPXQoIi4uL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLHY9Zy5lbmZvcmNlLG09Zy5jbGVhbix5PXQoIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5kb0F1dG9SYW5nZSx4PVsieGF4aXMiLCJ5YXhpcyJdLGI9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLlNVQlBMT1RfUEFUVEVSTjtmdW5jdGlvbiBfKHQsZSl7dGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMucGl4ZWxSYXRpbz10LnBsb3RHbFBpeGVsUmF0aW98fHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuaWQ9dC5pZCx0aGlzLnN0YXRpY1Bsb3Q9ISF0LnN0YXRpY1Bsb3QsdGhpcy5zY3JvbGxab29tPXRoaXMuZ3JhcGhEaXYuX2NvbnRleHQuX3Njcm9sbFpvb20uY2FydGVzaWFuLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLnVwZGF0ZVJlZnMoZSksdGhpcy5tYWtlRnJhbWV3b3JrKCksdGhpcy5zdG9wcGVkfHwodGhpcy5nbHBsb3RPcHRpb25zPWgodGhpcyksdGhpcy5nbHBsb3RPcHRpb25zLm1lcmdlKGUpLHRoaXMuZ2xwbG90PWwodGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmNhbWVyYT1wKHRoaXMpLHRoaXMudHJhY2VzPXt9LHRoaXMuc3Bpa2VzPWModGhpcy5nbHBsb3QpLHRoaXMuc2VsZWN0Qm94PXUodGhpcy5nbHBsb3Qse2lubmVyRmlsbDohMSxvdXRlckZpbGw6ITB9KSx0aGlzLmxhc3RCdXR0b25TdGF0ZT0wLHRoaXMucGlja1Jlc3VsdD1udWxsLHRoaXMuaXNNb3VzZU92ZXI9ITAsdGhpcy5zdG9wcGVkPSExLHRoaXMucmVkcmF3PXRoaXMuZHJhdy5iaW5kKHRoaXMpLHRoaXMucmVkcmF3KCkpfWUuZXhwb3J0cz1fO3ZhciB3PV8ucHJvdG90eXBlO3cubWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe2lmKHRoaXMuc3RhdGljUGxvdCl7aWYoIShpfHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxpPWYoe2NhbnZhczpuLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpKSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIHN0YXRpYyBjYW52YXMvY29udGV4dCBmb3IgaW1hZ2Ugc2VydmVyIik7dGhpcy5jYW52YXM9bix0aGlzLmdsPWl9ZWxzZXt2YXIgdD10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuZ2wtY2FudmFzLWZvY3VzIiksZT1mKHtjYW52YXM6dCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwfSk7aWYoIWUpcmV0dXJuIGQodGhpcyksdm9pZCh0aGlzLnN0b3BwZWQ9ITApO3RoaXMuY2FudmFzPXQsdGhpcy5nbD1lfXZhciByPXRoaXMuY2FudmFzO3Iuc3R5bGUud2lkdGg9IjEwMCUiLHIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9IjBweCIsci5zdHlsZS5sZWZ0PSIwcHgiLHIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMudXBkYXRlU2l6ZShyKSxyLmNsYXNzTmFtZSs9IiB1c2VyLXNlbGVjdC1ub25lIjt2YXIgYT10aGlzLnN2Z0NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7YS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9wPWEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLndpZHRoPWEuc3R5bGUuaGVpZ2h0PSIxMDAlIixhLnN0eWxlWyJ6LWluZGV4Il09MjAsYS5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSI7dmFyIG89dGhpcy5tb3VzZUNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0iYXV0byIsdGhpcy5waWNrQ2FudmFzPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5nbC1jYW52YXMtcGljayIpO3ZhciBzPXRoaXMuY29udGFpbmVyO3MuYXBwZW5kQ2hpbGQoYSkscy5hcHBlbmRDaGlsZChvKTt2YXIgbD10aGlzO28uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMSxsLnVuaG92ZXIoKX0pLG8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITB9KX0sdy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5jbGVhckNvbG9yKDEsMSwxLDApLGUuY2xlYXIoZS5DT0xPUl9CVUZGRVJfQklUfGUuREVQVEhfQlVGRkVSX0JJVCksdGhpcy5nbHBsb3Quc2V0RGlydHkoKSx0aGlzLmdscGxvdC5kcmF3KCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKTtmb3IodmFyIG89MCxzPWktMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWFbNCoocipvK2wpK2NdO2FbNCoocipvK2wpK2NdPWFbNCoocipzK2wpK2NdLGFbNCoocipzK2wpK2NdPXV9dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zi53aWR0aD1yLGYuaGVpZ2h0PWk7dmFyIGgscD1mLmdldENvbnRleHQoIjJkIiksZD1wLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChkLmRhdGEuc2V0KGEpLHAucHV0SW1hZ2VEYXRhKGQsMCwwKSx0KXtjYXNlImpwZWciOmg9Zi50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlIndlYnAiOmg9Zi50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztkZWZhdWx0Omg9Zi50b0RhdGFVUkwoImltYWdlL3BuZyIpfXJldHVybiB0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKG4pLGh9LHcudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0fHwodD10aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5waXhlbFJhdGlvLHI9dGhpcy5mdWxsTGF5b3V0LG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9MHxNYXRoLmNlaWwoZSpuKSxvPTB8TWF0aC5jZWlsKGUqaSk7cmV0dXJuIHQud2lkdGg9PT1hJiZ0LmhlaWdodD09PW98fCh0LndpZHRoPWEsdC5oZWlnaHQ9byksdH0sdy5jb21wdXRlVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy54YXhpcy5zZXRTY2FsZSgpLHRoaXMueWF4aXMuc2V0U2NhbGUoKTtmb3IodmFyIHQ9W28uY2FsY1RpY2tzKHRoaXMueGF4aXMpLG8uY2FsY1RpY2tzKHRoaXMueWF4aXMpXSxlPTA7ZTwyOysrZSlmb3IodmFyIHI9MDtyPHRbZV0ubGVuZ3RoOysrcil0W2VdW3JdLnRleHQ9dFtlXVtyXS50ZXh0KyIiO3JldHVybiB0fSx3LnVwZGF0ZVJlZnM9ZnVuY3Rpb24odCl7dGhpcy5mdWxsTGF5b3V0PXQ7dmFyIGU9dGhpcy5pZC5tYXRjaChiKSxyPSJ4YXhpcyIrZVsxXSxuPSJ5YXhpcyIrZVsyXTt0aGlzLnhheGlzPXRoaXMuZnVsbExheW91dFtyXSx0aGlzLnlheGlzPXRoaXMuZnVsbExheW91dFtuXX0sdy5yZWxheW91dENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdixlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49dC5sYXlvdXQsaT17fSxvPWlbZS5fbmFtZSsiLnJhbmdlIl09ZS5yYW5nZS5zbGljZSgpLHM9aVtyLl9uYW1lKyIucmFuZ2UiXT1yLnJhbmdlLnNsaWNlKCk7aVtlLl9uYW1lKyIuYXV0b3JhbmdlIl09ZS5hdXRvcmFuZ2UsaVtyLl9uYW1lKyIuYXV0b3JhbmdlIl09ci5hdXRvcmFuZ2UsYS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksaSk7dmFyIGw9bltlLl9uYW1lXTtsLnJhbmdlPW8sbC5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2U7dmFyIGM9bltyLl9uYW1lXTtjLnJhbmdlPXMsYy5hdXRvcmFuZ2U9ci5hdXRvcmFuZ2UsaS5sYXN0SW5wdXRUaW1lPXRoaXMuY2FtZXJhLmxhc3RJbnB1dFRpbWUsdC5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGkpfSx3LmNhbWVyYUNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNhbWVyYTt0aGlzLmdscGxvdC5zZXREYXRhQm94KHRoaXMuY2FsY0RhdGFCb3goKSk7dmFyIGU9dGhpcy5jb21wdXRlVGlja01hcmtzKCk7KGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwyOysrcil7dmFyIG49dFtyXSxpPWVbcl07aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGE9MDthPG4ubGVuZ3RoOysrYSlpZihuW2FdLnghPT1pW2FdLngpcmV0dXJuITB9cmV0dXJuITF9KShlLHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcykmJih0aGlzLmdscGxvdE9wdGlvbnMudGlja3M9ZSx0aGlzLmdscGxvdE9wdGlvbnMuZGF0YUJveD10LmRhdGFCb3gsdGhpcy5nbHBsb3QudXBkYXRlKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5oYW5kbGVBbm5vdGF0aW9ucygpKX0sdy5oYW5kbGVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy5mdWxsTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLnhyZWY9PT10aGlzLnhheGlzLl9pZCYmbi55cmVmPT09dGhpcy55YXhpcy5faWQmJmEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSh0LHIpfX0sdy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5nbHBsb3Qpe3ZhciB0PXRoaXMudHJhY2VzO3QmJk9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXt0W2VdLmRpc3Bvc2UoKSxkZWxldGUgdFtlXX0pLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLnN2Z0NvbnRhaW5lciksdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5tb3VzZUNvbnRhaW5lciksdGhpcy5mdWxsRGF0YT1udWxsLHRoaXMuZ2xwbG90PW51bGwsdGhpcy5zdG9wcGVkPSEwLHRoaXMuY2FtZXJhLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSx0aGlzLm1vdXNlQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLmNhbWVyYS53aGVlbExpc3RlbmVyKSx0aGlzLmNhbWVyYT1udWxsfX0sdy5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmdscGxvdDt0aGlzLnVwZGF0ZVJlZnMociksdGhpcy54YXhpcy5jbGVhckNhbGMoKSx0aGlzLnlheGlzLmNsZWFyQ2FsYygpLHRoaXMudXBkYXRlVHJhY2VzKHQsZSksdGhpcy51cGRhdGVGeChyLmRyYWdtb2RlKTt2YXIgaT1yLndpZHRoLGE9ci5oZWlnaHQ7dGhpcy51cGRhdGVTaXplKHRoaXMuY2FudmFzKTt2YXIgbz10aGlzLmdscGxvdE9wdGlvbnM7by5tZXJnZShyKSxvLnNjcmVlbkJveD1bMCwwLGksYV07dmFyIHM9e19mdWxsTGF5b3V0OntfYXhpc0NvbnN0cmFpbnRHcm91cHM6dGhpcy5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfX07bShzLHRoaXMueGF4aXMpLG0ocyx0aGlzLnlheGlzKTt2YXIgbCxjLHU9ci5fc2l6ZSxmPXRoaXMueGF4aXMuZG9tYWluLGg9dGhpcy55YXhpcy5kb21haW47Zm9yKG8udmlld0JveD1bdS5sK2ZbMF0qdS53LHUuYitoWzBdKnUuaCxpLXUuci0oMS1mWzFdKSp1LncsYS11LnQtKDEtaFsxXSkqdS5oXSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLndpZHRoPXUudyooZlsxXS1mWzBdKSsicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUuaGVpZ2h0PXUuaCooaFsxXS1oWzBdKSsicHgiLHRoaXMubW91c2VDb250YWluZXIuaGVpZ2h0PXUuaCooaFsxXS1oWzBdKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmxlZnQ9dS5sK2ZbMF0qdS53KyJweCIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS50b3A9dS50KygxLWhbMV0pKnUuaCsicHgiLGM9MDtjPDI7KytjKShsPXRoaXNbeFtjXV0pLl9sZW5ndGg9by52aWV3Qm94W2MrMl0tby52aWV3Qm94W2NdLHkodGhpcy5ncmFwaERpdixsKSxsLnNldFNjYWxlKCk7dihzKSxvLnRpY2tzPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpLG8uZGF0YUJveD10aGlzLmNhbGNEYXRhQm94KCksby5tZXJnZShyKSxuLnVwZGF0ZShvKSx0aGlzLmdscGxvdC5kcmF3KCl9LHcuY2FsY0RhdGFCb3g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnhheGlzLGU9dGhpcy55YXhpcyxyPXQucmFuZ2Usbj1lLnJhbmdlLGk9dC5yMmwsYT1lLnIybDtyZXR1cm5baShyWzBdKSxhKG5bMF0pLGkoclsxXSksYShuWzFdKV19LHcuc2V0UmFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49ZS5sMnIsaT1yLmwycjtlLnJhbmdlPVtuKHRbMF0pLG4odFsyXSldLHIucmFuZ2U9W2kodFsxXSksaSh0WzNdKV19LHcudXBkYXRlVHJhY2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3RoaXMuZnVsbERhdGE9dDt0OmZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBvPWFbcl0scz10aGlzLnRyYWNlc1tvXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKChpPXRbbl0pLnVpZD09PW8mJmkudHlwZT09PXMudHlwZSljb250aW51ZSB0O3MuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1tvXX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpPXRbcl07dmFyIGw9ZVtyXSxjPXRoaXMudHJhY2VzW2kudWlkXTtjP2MudXBkYXRlKGksbCk6KGM9aS5fbW9kdWxlLnBsb3QodGhpcyxpLGwpLHRoaXMudHJhY2VzW2kudWlkXT1jKX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuaW5kZXgtZS5fdHJhY2UuaW5kZXh9KX0sdy51cGRhdGVGeD1mdW5jdGlvbih0KXsibGFzc28iPT09dHx8InNlbGVjdCI9PT10Pyh0aGlzLnBpY2tDYW52YXMuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiKToodGhpcy5waWNrQ2FudmFzLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIiksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5jdXJzb3I9InBhbiI9PT10PyJtb3ZlIjoiem9vbSI9PT10PyJjcm9zc2hhaXIiOm51bGx9LHcuZW1pdFBvaW50QWN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC50cmFjZS51aWQsaT10LnBvaW50SW5kZXgsYT0wO2E8dGhpcy5mdWxsRGF0YS5sZW5ndGg7YSsrKXRoaXMuZnVsbERhdGFbYV0udWlkPT09biYmKHI9dGhpcy5mdWxsRGF0YVthXSk7dmFyIG89e3g6dC50cmFjZUNvb3JkWzBdLHk6dC50cmFjZUNvb3JkWzFdLGN1cnZlTnVtYmVyOnIuaW5kZXgscG9pbnROdW1iZXI6aSxkYXRhOnIuX2lucHV0LGZ1bGxEYXRhOnRoaXMuZnVsbERhdGEseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfTtzLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShvLHIsaSksdGhpcy5ncmFwaERpdi5lbWl0KGUse3BvaW50czpbb119KX0sdy5kcmF3PWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RvcHBlZCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVkcmF3KTt2YXIgdD10aGlzLmdscGxvdCxlPXRoaXMuY2FtZXJhLHI9ZS5tb3VzZUxpc3RlbmVyLG49MT09PXRoaXMubGFzdEJ1dHRvblN0YXRlJiYwPT09ci5idXR0b25zLGk9dGhpcy5mdWxsTGF5b3V0O3RoaXMubGFzdEJ1dHRvblN0YXRlPXIuYnV0dG9ucyx0aGlzLmNhbWVyYUNoYW5nZWQoKTt2YXIgYSxvPXIueCp0LnBpeGVsUmF0aW8sbD10aGlzLmNhbnZhcy5oZWlnaHQtdC5waXhlbFJhdGlvKnIueTtpZihlLmJveEVuYWJsZWQmJiJ6b29tIj09PWkuZHJhZ21vZGUpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITA7Zm9yKHZhciBjPXRoaXMuc2VsZWN0Qm94LnNlbGVjdEJveD1bTWF0aC5taW4oZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5taW4oZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSksTWF0aC5tYXgoZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5tYXgoZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSldLHU9MDt1PDI7dSsrKWUuYm94U3RhcnRbdV09PT1lLmJveEVuZFt1XSYmKGNbdV09dC5kYXRhQm94W3VdLGNbdSsyXT10LmRhdGFCb3hbdSsyXSk7dC5zZXREaXJ0eSgpfWVsc2UgaWYoIWUucGFubmluZyYmdGhpcy5pc01vdXNlT3Zlcil7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMTt2YXIgZj1pLl9zaXplLGg9dGhpcy54YXhpcy5kb21haW4scD10aGlzLnlheGlzLmRvbWFpbixkPShhPXQucGljayhvL3QucGl4ZWxSYXRpbytmLmwraFswXSpmLncsbC90LnBpeGVsUmF0aW8tKGYudCsoMS1wWzFdKSpmLmgpKSkmJmEub2JqZWN0Ll90cmFjZS5oYW5kbGVQaWNrKGEpO2lmKGQmJm4mJnRoaXMuZW1pdFBvaW50QWN0aW9uKGQsInBsb3RseV9jbGljayIpLGEmJiJza2lwIiE9PWEub2JqZWN0Ll90cmFjZS5ob3ZlcmluZm8mJmkuaG92ZXJtb2RlJiZkJiYoIXRoaXMubGFzdFBpY2tSZXN1bHR8fHRoaXMubGFzdFBpY2tSZXN1bHQudHJhY2VVaWQhPT1kLnRyYWNlLnVpZHx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMF0hPT1kLmRhdGFDb29yZFswXXx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMV0hPT1kLmRhdGFDb29yZFsxXSkpe3ZhciBnPWQ7dGhpcy5sYXN0UGlja1Jlc3VsdD17dHJhY2VVaWQ6ZC50cmFjZT9kLnRyYWNlLnVpZDpudWxsLGRhdGFDb29yZDpkLmRhdGFDb29yZC5zbGljZSgpfSx0aGlzLnNwaWtlcy51cGRhdGUoe2NlbnRlcjphLmRhdGFDb29yZH0pLGcuc2NyZWVuQ29vcmQ9WygodC52aWV3Qm94WzJdLXQudmlld0JveFswXSkqKGEuZGF0YUNvb3JkWzBdLXQuZGF0YUJveFswXSkvKHQuZGF0YUJveFsyXS10LmRhdGFCb3hbMF0pK3Qudmlld0JveFswXSkvdC5waXhlbFJhdGlvLCh0aGlzLmNhbnZhcy5oZWlnaHQtKHQudmlld0JveFszXS10LnZpZXdCb3hbMV0pKihhLmRhdGFDb29yZFsxXS10LmRhdGFCb3hbMV0pLyh0LmRhdGFCb3hbM10tdC5kYXRhQm94WzFdKS10LnZpZXdCb3hbMV0pL3QucGl4ZWxSYXRpb10sdGhpcy5lbWl0UG9pbnRBY3Rpb24oZCwicGxvdGx5X2hvdmVyIik7dmFyIHY9dGhpcy5mdWxsRGF0YVtnLnRyYWNlLmluZGV4XXx8e30sbT1nLnBvaW50SW5kZXgseT1zLmNhc3RIb3ZlcmluZm8odixpLG0pO2lmKHkmJiJhbGwiIT09eSl7dmFyIHg9eS5zcGxpdCgiKyIpOy0xPT09eC5pbmRleE9mKCJ4IikmJihnLnRyYWNlQ29vcmRbMF09dm9pZCAwKSwtMT09PXguaW5kZXhPZigieSIpJiYoZy50cmFjZUNvb3JkWzFdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInoiKSYmKGcudHJhY2VDb29yZFsyXT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ0ZXh0IikmJihnLnRleHRMYWJlbD12b2lkIDApLC0xPT09eC5pbmRleE9mKCJuYW1lIikmJihnLm5hbWU9dm9pZCAwKX1zLmxvbmVIb3Zlcih7eDpnLnNjcmVlbkNvb3JkWzBdLHk6Zy5zY3JlZW5Db29yZFsxXSx4TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieGF4aXMiLGcudHJhY2VDb29yZFswXSkseUxhYmVsOnRoaXMuaG92ZXJGb3JtYXR0ZXIoInlheGlzIixnLnRyYWNlQ29vcmRbMV0pLHpMYWJlbDpnLnRyYWNlQ29vcmRbMl0sdGV4dDpnLnRleHRMYWJlbCxuYW1lOmcubmFtZSxjb2xvcjpzLmNhc3RIb3Zlck9wdGlvbih2LG0sImJnY29sb3IiKXx8Zy5jb2xvcixib3JkZXJDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbih2LG0sImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpzLmNhc3RIb3Zlck9wdGlvbih2LG0sImZvbnQuZmFtaWx5IiksZm9udFNpemU6cy5jYXN0SG92ZXJPcHRpb24odixtLCJmb250LnNpemUiKSxmb250Q29sb3I6cy5jYXN0SG92ZXJPcHRpb24odixtLCJmb250LmNvbG9yIil9LHtjb250YWluZXI6dGhpcy5zdmdDb250YWluZXIsZ2Q6dGhpcy5ncmFwaERpdn0pfX1hfHx0aGlzLnVuaG92ZXIoKSx0LmRyYXcoKX19LHcudW5ob3Zlcj1mdW5jdGlvbigpe3RoaXMubGFzdFBpY2tSZXN1bHQmJih0aGlzLnNwaWtlcy51cGRhdGUoe30pLHRoaXMubGFzdFBpY2tSZXN1bHQ9bnVsbCx0aGlzLmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIikscy5sb25lVW5ob3Zlcih0aGlzLnN2Z0NvbnRhaW5lcikpfSx3LmhvdmVyRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZSl7dmFyIHI9dGhpc1t0XTtyZXR1cm4gby50aWNrVGV4dChyLHIuYzJsKGUpLCJob3ZlciIpLnRleHR9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6NzIxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3NDcsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjc1NCwiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo3NTUsIi4vY2FtZXJhIjo3ODUsIi4vY29udmVydCI6Nzg2LCJnbC1wbG90MmQiOjI4MywiZ2wtc2VsZWN0LWJveCI6Mjk1LCJnbC1zcGlrZXMyZCI6MzA0LCJ3ZWJnbC1jb250ZXh0Ijo1NDB9XSw3ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi9zY2VuZSIpLG89dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTtyLm5hbWU9ImdsM2QiLHIuYXR0cj0ic2NlbmUiLHIuaWRSb290PSJzY2VuZSIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PXMuY291bnRlclJlZ2V4KCJzY2VuZSIpLHIuYXR0cmlidXRlcz10KCIuL2xheW91dC9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDNkLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHM9bltpXSxsPW8ociwiZ2wzZCIscyksYz1lW3NdLHU9Yy5jYW1lcmEsZj1jLl9zY2VuZTtmfHwoZj1uZXcgYSh7aWQ6cyxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbyxjYW1lcmE6dX0sZSksYy5fc2NlbmU9ZiksZi52aWV3SW5pdGlhbHx8KGYudmlld0luaXRpYWw9e3VwOnt4OnUudXAueCx5OnUudXAueSx6OnUudXAuen0sZXllOnt4OnUuZXllLngseTp1LmV5ZS55LHo6dS5leWUuen0sY2VudGVyOnt4OnUuY2VudGVyLngseTp1LmNlbnRlci55LHo6dS5jZW50ZXIuen19KSxmLnBsb3QobCxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsM2R8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc2NlbmUmJihuW29dLl9zY2VuZS5kZXN0cm95KCksbi5faW5mb2xheWVyJiZuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK28pLnJlbW92ZSgpKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0sbz1hLmRvbWFpbixzPWEuX3NjZW5lLGM9cy50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLCJ4bGluazpocmVmIjpjLHg6bi5sK24udypvLnhbMF0seTpuLnQrbi5oKigxLW8ueVsxXSksd2lkdGg6bi53KihvLnhbMV0tby54WzBdKSxoZWlnaHQ6bi5oKihvLnlbMV0tby55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHMuZGVzdHJveSgpfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goL15zY2VuZVswLTldKiQvKSl7dmFyIGU9dC5zdWJzdHIoNSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLCJzY2VuZSIrZX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7ZVtyW25dXS5fc2NlbmUudXBkYXRlRngoZS5kcmFnbW9kZSxlLmhvdmVybW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo2MTcsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NzgsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uL2dldF9kYXRhIjo3ODQsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjc5MCwiLi9sYXlvdXQvZGVmYXVsdHMiOjc5NCwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjc5NSwiLi9zY2VuZSI6Nzk5fV0sNzkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2NlbmU6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoic2NlbmUiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn19fSx7fV0sNzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPW8oe3Zpc2libGU6aS52aXNpYmxlLHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtlc2lkZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Mn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc2hvd2JhY2tncm91bmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGJhY2tncm91bmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KSJ9LHNob3dheGVzbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb2xvcjppLmNvbG9yLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRpdGxlOmkudGl0bGUsdHlwZTphKHt9LGkudHlwZSx7dmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdfSksYXV0b3JhbmdlOmkuYXV0b3JhbmdlLHJhbmdlbW9kZTppLnJhbmdlbW9kZSxyYW5nZTphKHt9LGkucmFuZ2Use2l0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fV0sYW5pbTohMX0pLHRpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyxtaXJyb3I6aS5taXJyb3IsdGlja2xlbjppLnRpY2tsZW4sdGlja3dpZHRoOmkudGlja3dpZHRoLHRpY2tjb2xvcjppLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczppLnNob3d0aWNrbGFiZWxzLHRpY2tmb250OmkudGlja2ZvbnQsdGlja2FuZ2xlOmkudGlja2FuZ2xlLHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Omkuc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6aS5zaG93dGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6aS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6aS5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczppLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb3JtYXQ6aS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczppLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkuc2hvd2xpbmUsbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDppLnNob3dncmlkLGdyaWRjb2xvcjphKHt9LGkuZ3JpZGNvbG9yLHtkZmx0OiJyZ2IoMjA0LCAyMDQsIDIwNCkifSksZ3JpZHdpZHRoOmkuZ3JpZHdpZHRoLHplcm9saW5lOmkuemVyb2xpbmUsemVyb2xpbmVjb2xvcjppLnplcm9saW5lY29sb3IsemVyb2xpbmV3aWR0aDppLnplcm9saW5ld2lkdGgsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sInBsb3QiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MH1dLDc5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vLi4vbGliIiksYT10KCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F4aXNfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksYz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsZjtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGkuY29lcmNlKHUsZixvLHQsZSl9Zm9yKHZhciBwPTA7cDxjLmxlbmd0aDtwKyspe3ZhciBkPWNbcF07dT10W2RdfHx7fSwoZj1hLm5ld0NvbnRhaW5lcihlLGQpKS5faWQ9ZFswXStyLnNjZW5lLGYuX25hbWU9ZCxzKHUsZixoLHIpLGwodSxmLGgse2ZvbnQ6ci5mb250LGxldHRlcjpkWzBdLGRhdGE6ci5kYXRhLHNob3dHcmlkOiEwLG5vVGlja3NvbjohMCxiZ0NvbG9yOnIuYmdDb2xvcixjYWxlbmRhcjpyLmNhbGVuZGFyfSxyLmZ1bGxMYXlvdXQpLGgoImdyaWRjb2xvciIsbihmLmNvbG9yLHIuYmdDb2xvciwxMzYwMC8xODcpLnRvUmdiU3RyaW5nKCkpLGgoInRpdGxlLnRleHQiLGRbMF0pLGYuc2V0U2NhbGU9aS5ub29wLGgoInNob3dzcGlrZXMiKSYmKGgoInNwaWtlc2lkZXMiKSxoKCJzcGlrZXRoaWNrbmVzcyIpLGgoInNwaWtlY29sb3IiLGYuY29sb3IpKSxoKCJzaG93YXhlc2xhYmVscyIpLGgoInNob3diYWNrZ3JvdW5kIikmJmgoImJhY2tncm91bmRjb2xvciIpfX19LHsiLi4vLi4vLi4vbGliIjo3MDAsIi4uLy4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjc1MCwiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiOjc3MSwiLi9heGlzX2F0dHJpYnV0ZXMiOjc5MSx0aW55Y29sb3IyOjUyMX1dLDc5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5IiksaT10KCIuLi8uLi8uLi9saWIiKSxhPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gbygpe3RoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzE4LDE4LDE4XSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD1bIk9wZW4gU2FucyIsIk9wZW4gU2FucyIsIk9wZW4gU2FucyJdLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMzAsMzAsMzBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzEwLDEwLDEwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9kZWZhdWx0VGlja1BhZD10aGlzLnRpY2tQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGFiZWxQYWQ9dGhpcy5sYWJlbFBhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aD10aGlzLmxpbmVUaWNrTGVuZ3RoLnNsaWNlKCl9by5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXt2YXIgbz1lW2Fbcl1dO28udmlzaWJsZT8odGhpcy5sYWJlbHNbcl09dC5tZXRhP2kudGVtcGxhdGVTdHJpbmcoby50aXRsZS50ZXh0LHttZXRhOnQubWV0YX0pOm8udGl0bGUudGV4dCwiZm9udCJpbiBvLnRpdGxlJiYoby50aXRsZS5mb250LmNvbG9yJiYodGhpcy5sYWJlbENvbG9yW3JdPW4oby50aXRsZS5mb250LmNvbG9yKSksby50aXRsZS5mb250LmZhbWlseSYmKHRoaXMubGFiZWxGb250W3JdPW8udGl0bGUuZm9udC5mYW1pbHkpLG8udGl0bGUuZm9udC5zaXplJiYodGhpcy5sYWJlbFNpemVbcl09by50aXRsZS5mb250LnNpemUpKSwic2hvd2xpbmUiaW4gbyYmKHRoaXMubGluZUVuYWJsZVtyXT1vLnNob3dsaW5lKSwibGluZWNvbG9yImluIG8mJih0aGlzLmxpbmVDb2xvcltyXT1uKG8ubGluZWNvbG9yKSksImxpbmV3aWR0aCJpbiBvJiYodGhpcy5saW5lV2lkdGhbcl09by5saW5ld2lkdGgpLCJzaG93Z3JpZCJpbiBvJiYodGhpcy5ncmlkRW5hYmxlW3JdPW8uc2hvd2dyaWQpLCJncmlkY29sb3IiaW4gbyYmKHRoaXMuZ3JpZENvbG9yW3JdPW4oby5ncmlkY29sb3IpKSwiZ3JpZHdpZHRoImluIG8mJih0aGlzLmdyaWRXaWR0aFtyXT1vLmdyaWR3aWR0aCksImxvZyI9PT1vLnR5cGU/dGhpcy56ZXJvRW5hYmxlW3JdPSExOiJ6ZXJvbGluZSJpbiBvJiYodGhpcy56ZXJvRW5hYmxlW3JdPW8uemVyb2xpbmUpLCJ6ZXJvbGluZWNvbG9yImluIG8mJih0aGlzLnplcm9MaW5lQ29sb3Jbcl09bihvLnplcm9saW5lY29sb3IpKSwiemVyb2xpbmV3aWR0aCJpbiBvJiYodGhpcy56ZXJvTGluZVdpZHRoW3JdPW8uemVyb2xpbmV3aWR0aCksInRpY2tzImluIG8mJm8udGlja3M/dGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMDp0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLCJ0aWNrbGVuImluIG8mJih0aGlzLmxpbmVUaWNrTGVuZ3RoW3JdPXRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aFtyXT1vLnRpY2tsZW4pLCJ0aWNrY29sb3IiaW4gbyYmKHRoaXMubGluZVRpY2tDb2xvcltyXT1uKG8udGlja2NvbG9yKSksInRpY2t3aWR0aCJpbiBvJiYodGhpcy5saW5lVGlja1dpZHRoW3JdPW8udGlja3dpZHRoKSwidGlja2FuZ2xlImluIG8mJih0aGlzLnRpY2tBbmdsZVtyXT0iYXV0byI9PT1vLnRpY2thbmdsZT8tMzYwMDpNYXRoLlBJKi1vLnRpY2thbmdsZS8xODApLCJzaG93dGlja2xhYmVscyJpbiBvJiYodGhpcy50aWNrRW5hYmxlW3JdPW8uc2hvd3RpY2tsYWJlbHMpLCJ0aWNrZm9udCJpbiBvJiYoby50aWNrZm9udC5jb2xvciYmKHRoaXMudGlja0NvbG9yW3JdPW4oby50aWNrZm9udC5jb2xvcikpLG8udGlja2ZvbnQuZmFtaWx5JiYodGhpcy50aWNrRm9udFtyXT1vLnRpY2tmb250LmZhbWlseSksby50aWNrZm9udC5zaXplJiYodGhpcy50aWNrU2l6ZVtyXT1vLnRpY2tmb250LnNpemUpKSwibWlycm9yImluIG8/LTEhPT1bInRpY2tzIiwiYWxsIiwiYWxsdGlja3MiXS5pbmRleE9mKG8ubWlycm9yKT8odGhpcy5saW5lVGlja01pcnJvcltyXT0hMCx0aGlzLmxpbmVNaXJyb3Jbcl09ITApOiEwPT09by5taXJyb3I/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSEwKToodGhpcy5saW5lVGlja01pcnJvcltyXT0hMSx0aGlzLmxpbmVNaXJyb3Jbcl09ITEpOnRoaXMubGluZU1pcnJvcltyXT0hMSwic2hvd2JhY2tncm91bmQiaW4gbyYmITEhPT1vLnNob3diYWNrZ3JvdW5kPyh0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITAsdGhpcy5iYWNrZ3JvdW5kQ29sb3Jbcl09bihvLmJhY2tncm91bmRjb2xvcikpOnRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSk6KHRoaXMudGlja0VuYWJsZVtyXT0hMSx0aGlzLmxhYmVsRW5hYmxlW3JdPSExLHRoaXMubGluZUVuYWJsZVtyXT0hMSx0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLHRoaXMuZ3JpZEVuYWJsZVtyXT0hMSx0aGlzLnplcm9FbmFibGVbcl09ITEsdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBvO3JldHVybiByLm1lcmdlKHQsZSkscn19LHsiLi4vLi4vLi4vbGliIjo3MDAsIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcyM31dLDc5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIiKSxpPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIikscz10KCIuL2F4aXNfZGVmYXVsdHMiKSxsPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGEsdT0iZ2wzZCI7ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIG89cigiYmdjb2xvciIpLGw9aS5jb21iaW5lKG8sbi5wYXBlcl9iZ2NvbG9yKSxmPVsidXAiLCJjZW50ZXIiLCJleWUiXSxoPTA7aDxmLmxlbmd0aDtoKyspcigiY2FtZXJhLiIrZltoXSsiLngiKSxyKCJjYW1lcmEuIitmW2hdKyIueSIpLHIoImNhbWVyYS4iK2ZbaF0rIi56Iik7cigiY2FtZXJhLnByb2plY3Rpb24udHlwZSIpO3ZhciBwPSEhcigiYXNwZWN0cmF0aW8ueCIpJiYhIXIoImFzcGVjdHJhdGlvLnkiKSYmISFyKCJhc3BlY3RyYXRpby56IiksZD1yKCJhc3BlY3Rtb2RlIixwPyJtYW51YWwiOiJhdXRvIik7cHx8KHQuYXNwZWN0cmF0aW89ZS5hc3BlY3RyYXRpbz17eDoxLHk6MSx6OjF9LCJtYW51YWwiPT09ZCYmKGUuYXNwZWN0bW9kZT0iYXV0byIpLHQuYXNwZWN0bW9kZT1lLmFzcGVjdG1vZGUpO3ZhciBnPWMobi5mdWxsRGF0YSx1LG4uaWQpO3ModCxlLHtmb250Om4uZm9udCxzY2VuZTpuLmlkLGRhdGE6ZyxiZ0NvbG9yOmwsY2FsZW5kYXI6bi5jYWxlbmRhcixmdWxsTGF5b3V0Om4uZnVsbExheW91dH0pLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsbik7dmFyIHY9bi5nZXREZmx0RnJvbUxheW91dCgiZHJhZ21vZGUiKTtpZighMSE9PXYmJiF2KWlmKHY9Im9yYml0Iix0LmNhbWVyYSYmdC5jYW1lcmEudXApe3ZhciBtPXQuY2FtZXJhLnVwLngseT10LmNhbWVyYS51cC55LHg9dC5jYW1lcmEudXAuejswIT09eCYmKG0mJnkmJng/eC9NYXRoLnNxcnQobSptK3kqeSt4KngpPi45OTkmJih2PSJ0dXJudGFibGUiKTp2PSJ0dXJudGFibGUiKX1lbHNlIHY9InR1cm50YWJsZSI7cigiZHJhZ21vZGUiLHYpLHIoImhvdmVybW9kZSIsbi5nZXREZmx0RnJvbUxheW91dCgiaG92ZXJtb2RlIikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aD4xO28odCxlLHIse3R5cGU6dSxhdHRyaWJ1dGVzOmwsaGFuZGxlRGVmYXVsdHM6ZixmdWxsTGF5b3V0OmUsZm9udDplLmZvbnQsZnVsbERhdGE6cixnZXREZmx0RnJvbUxheW91dDpmdW5jdGlvbihlKXtpZighaSlyZXR1cm4gbi52YWxpZGF0ZSh0W2VdLGxbZV0pP3RbZV06dm9pZCAwfSxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixjYWxlbmRhcjplLmNhbGVuZGFyfSl9fSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vLi4vbGliIjo3MDAsIi4uLy4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uLy4uL2dldF9kYXRhIjo3ODQsIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiOjgyNCwiLi9heGlzX2RlZmF1bHRzIjo3OTIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc5NX1dLDc5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vLi4vbGliIikuY291bnRlclJlZ2V4O2Z1bmN0aW9uIHModCxlLHIpe3JldHVybnt4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6dCxlZGl0VHlwZToiY2FtZXJhIn0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0OmUsZWRpdFR5cGU6ImNhbWVyYSJ9LHo6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpyLGVkaXRUeXBlOiJjYW1lcmEifSxlZGl0VHlwZToiY2FtZXJhIn19ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbbygic2NlbmUiLCIuYW5ub3RhdGlvbnMiLCEwKV0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJwbG90In0sY2FtZXJhOnt1cDphKHMoMCwwLDEpLHt9KSxjZW50ZXI6YShzKDAsMCwwKSx7fSksZXllOmEocygxLjI1LDEuMjUsMS4yNSkse30pLHByb2plY3Rpb246e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnNwZWN0aXZlIiwib3J0aG9ncmFwaGljIl0sZGZsdDoicGVyc3BlY3RpdmUiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FtZXJhIn0sZG9tYWluOmkoe25hbWU6InNjZW5lIixlZGl0VHlwZToicGxvdCJ9KSxhc3BlY3Rtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwiY3ViZSIsImRhdGEiLCJtYW51YWwiXSxkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiYXNwZWN0cmF0aW8ueCI6dm9pZCAwLCJhc3BlY3RyYXRpby55Ijp2b2lkIDAsImFzcGVjdHJhdGlvLnoiOnZvaWQgMH19LGFzcGVjdHJhdGlvOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnthc3BlY3Rtb2RlOiJtYW51YWwifX0seGF4aXM6bix5YXhpczpuLHpheGlzOm4sZHJhZ21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm9yYml0IiwidHVybnRhYmxlIiwiem9vbSIsInBhbiIsITFdLGVkaXRUeXBlOiJwbG90In0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9zZXN0IiwhMV0sZGZsdDoiY2xvc2VzdCIsZWRpdFR5cGU6Im1vZGViYXIifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6InBsb3QiLF9kZXByZWNhdGVkOntjYW1lcmFwb3NpdGlvbjp7dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6ImNhbWVyYSJ9fX19LHsiLi4vLi4vLi4vbGliIjo3MDAsIi4uLy4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vZG9tYWluIjo3NzMsIi4vYXhpc19hdHRyaWJ1dGVzIjo3OTF9XSw3OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGk9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtmdW5jdGlvbiBhKCl7dGhpcy5lbmFibGVkPVshMCwhMCwhMF0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMubGluZVdpZHRoPVsxLDEsMV19YS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwzOysrZSl7dmFyIHI9dFtpW2VdXTtyLnZpc2libGU/KHRoaXMuZW5hYmxlZFtlXT1yLnNob3dzcGlrZXMsdGhpcy5jb2xvcnNbZV09bihyLnNwaWtlY29sb3IpLHRoaXMuZHJhd1NpZGVzW2VdPXIuc3Bpa2VzaWRlcyx0aGlzLmxpbmVXaWR0aFtlXT1yLnNwaWtldGhpY2tuZXNzKToodGhpcy5lbmFibGVkW2VdPSExLHRoaXMuZHJhd1NpZGVzW2VdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYTtyZXR1cm4gZS5tZXJnZSh0KSxlfX0seyIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MjN9XSw3OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmF4ZXNPcHRpb25zLHI9dC5nbHBsb3QuYXhlc1BpeGVscyxzPXQuZnVsbFNjZW5lTGF5b3V0LGw9W1tdLFtdLFtdXSxjPTA7YzwzOysrYyl7dmFyIHU9c1thW2NdXTtpZih1Ll9sZW5ndGg9KHJbY10uaGktcltjXS5sbykqcltjXS5waXhlbHNQZXJEYXRhVW5pdC90LmRhdGFTY2FsZVtjXSxNYXRoLmFicyh1Ll9sZW5ndGgpPT09MS8wfHxpc05hTih1Ll9sZW5ndGgpKWxbY109W107ZWxzZXt1Ll9pbnB1dF9yYW5nZT11LnJhbmdlLnNsaWNlKCksdS5yYW5nZVswXT1yW2NdLmxvL3QuZGF0YVNjYWxlW2NdLHUucmFuZ2VbMV09cltjXS5oaS90LmRhdGFTY2FsZVtjXSx1Ll9tPTEvKHQuZGF0YVNjYWxlW2NdKnJbY10ucGl4ZWxzUGVyRGF0YVVuaXQpLHUucmFuZ2VbMF09PT11LnJhbmdlWzFdJiYodS5yYW5nZVswXS09MSx1LnJhbmdlWzFdKz0xKTt2YXIgZj11LnRpY2ttb2RlO2lmKCJhdXRvIj09PXUudGlja21vZGUpe3UudGlja21vZGU9ImxpbmVhciI7dmFyIGg9dS5udGlja3N8fGkuY29uc3RyYWluKHUuX2xlbmd0aC80MCw0LDkpO24uYXV0b1RpY2tzKHUsTWF0aC5hYnModS5yYW5nZVsxXS11LnJhbmdlWzBdKS9oKX1mb3IodmFyIHA9bi5jYWxjVGlja3ModSksZD0wO2Q8cC5sZW5ndGg7KytkKXBbZF0ueD1wW2RdLngqdC5kYXRhU2NhbGVbY10sImRhdGUiPT09dS50eXBlJiYocFtkXS50ZXh0PXBbZF0udGV4dC5yZXBsYWNlKC9cPGJyXD4vZywiICIpKTtsW2NdPXAsdS50aWNrbW9kZT1mfX1lLnRpY2tzPWw7Zm9yKHZhciBjPTA7YzwzOysrYyl7b1tjXT0uNSoodC5nbHBsb3QuYm91bmRzWzBdW2NdK3QuZ2xwbG90LmJvdW5kc1sxXVtjXSk7Zm9yKHZhciBkPTA7ZDwyOysrZCllLmJvdW5kc1tkXVtjXT10LmdscGxvdC5ib3VuZHNbZF1bY119dC5jb250b3VyTGV2ZWxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkoMykscj0wO3I8MzsrK3Ipe2Zvcih2YXIgbj10W3JdLGk9bmV3IEFycmF5KG4ubGVuZ3RoKSxhPTA7YTxuLmxlbmd0aDsrK2EpaVthXT1uW2FdLng7ZVtyXT1pfXJldHVybiBlfShsKX07dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxvPVswLDAsMF19LHsiLi4vLi4vLi4vbGliIjo3MDAsIi4uLy4uL2NhcnRlc2lhbi9heGVzIjo3NDh9XSw3OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByLG4saT1bMCwwLDAsMF07Zm9yKHI9MDtyPDQ7KytyKWZvcihuPTA7bjw0OysrbilpW25dKz10WzQqcituXSplW3JdO3JldHVybiBpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQucHJvamVjdGlvbixuKHQudmlldyxuKHQubW9kZWwsW2VbMF0sZVsxXSxlWzJdLDFdKSkpfX0se31dLDc5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGE9dCgiZ2wtcGxvdDNkIikuY3JlYXRlQ2FtZXJhLG89dCgiZ2wtcGxvdDNkIikuY3JlYXRlU2NlbmUscz10KCJ3ZWJnbC1jb250ZXh0IiksbD10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxjPXQoIi4uLy4uL3JlZ2lzdHJ5IiksdT10KCIuLi8uLi9saWIiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IikscD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksZD10KCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciKSxnPXQoIi4vcHJvamVjdCIpLHY9dCgiLi9sYXlvdXQvY29udmVydCIpLG09dCgiLi9sYXlvdXQvc3Bpa2VzIikseT10KCIuL2xheW91dC90aWNrX21hcmtzIik7ZnVuY3Rpb24geCh0LGUscixhKXtpZih0LmluaXRpYWxpemVHTENhbWVyYSgpLCFmdW5jdGlvbih0LGUscixhLGwpe3ZhciBjPXtjYW52YXM6YSxnbDpsLGNvbnRhaW5lcjp0LmNvbnRhaW5lcixheGVzOnQuYXhlc09wdGlvbnMsc3Bpa2VzOnQuc3Bpa2VPcHRpb25zLHBpY2tSYWRpdXM6MTAsc25hcFRvRGF0YTohMCxhdXRvU2NhbGU6ITAsYXV0b0JvdW5kczohMSxjYW1lcmFPYmplY3Q6ZSxwaXhlbFJhdGlvOnJ9O2lmKHQuc3RhdGljTW9kZSl7aWYoIShpfHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxpPXMoe2NhbnZhczpuLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpKSl0aHJvdyBuZXcgRXJyb3IoImVycm9yIGNyZWF0aW5nIHN0YXRpYyBjYW52YXMvY29udGV4dCBmb3IgaW1hZ2Ugc2VydmVyIik7Yy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyxjLmdsPWksYy5jYW52YXM9bn10cnl7dC5nbHBsb3Q9byhjKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hMH0odCx0LmNhbWVyYSxlLHIsYSkpcmV0dXJuIGQodCk7dmFyIGM9dC5ncmFwaERpdixwPWZ1bmN0aW9uKHQpe2lmKCExIT09dC5mdWxsU2NlbmVMYXlvdXQuZHJhZ21vZGUpe3ZhciBlPXt9O2VbdC5pZCsiLmNhbWVyYSJdPVQodC5jYW1lcmEpLHQuc2F2ZUNhbWVyYShjLmxheW91dCksdC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGUpfX07cmV0dXJuIHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixmdW5jdGlvbigpe3AodCl9KSx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGZ1bmN0aW9uKCl7Yy5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkJiZwKHQpfSwhIWwmJntwYXNzaXZlOiExfSksdC5zdGF0aWNNb2RlfHx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsZnVuY3Rpb24oZSl7YyYmYy5lbWl0JiZjLmVtaXQoInBsb3RseV93ZWJnbGNvbnRleHRsb3N0Iix7ZXZlbnQ6ZSxsYXllcjp0LmlkfSl9LCExKSx0LmdscGxvdC5jYW1lcmE9dC5jYW1lcmEsdC5nbHBsb3Qub25jb250ZXh0bG9zcz1mdW5jdGlvbigpe3QucmVjb3ZlckNvbnRleHQoKX0sdC5nbHBsb3Qub25yZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10LnN2Z0NvbnRhaW5lcixuPXQuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9bi53aWR0aCxhPW4uaGVpZ2h0O3Iuc2V0QXR0cmlidXRlTlMobnVsbCwidmlld0JveCIsIjAgMCAiK2krIiAiK2EpLHIuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLGkpLHIuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixhKSx5KHQpLHQuZ2xwbG90LmF4ZXMudXBkYXRlKHQuYXhlc09wdGlvbnMpO2Zvcih2YXIgbyxzPU9iamVjdC5rZXlzKHQudHJhY2VzKSxsPW51bGwsYz10LmdscGxvdC5zZWxlY3Rpb24scD0wO3A8cy5sZW5ndGg7KytwKSJza2lwIiE9PShlPXQudHJhY2VzW3NbcF1dKS5kYXRhLmhvdmVyaW5mbyYmZS5oYW5kbGVQaWNrKGMpJiYobD1lKSxlLnNldENvbnRvdXJMZXZlbHMmJmUuc2V0Q29udG91ckxldmVscygpO2Z1bmN0aW9uIGQoZSxyKXt2YXIgbj10LmZ1bGxTY2VuZUxheW91dFtlXTtyZXR1cm4gZi50aWNrVGV4dChuLG4uZDJsKHIpLCJob3ZlciIpLnRleHR9aWYobnVsbCE9PWwpe3ZhciB2PWcodC5nbHBsb3QuY2FtZXJhUGFyYW1zLGMuZGF0YUNvb3JkaW5hdGUpO2U9bC5kYXRhO3ZhciBtLHg9Yy5pbmRleCxiPXt4TGFiZWw6ZCgieGF4aXMiLGMudHJhY2VDb29yZGluYXRlWzBdKSx5TGFiZWw6ZCgieWF4aXMiLGMudHJhY2VDb29yZGluYXRlWzFdKSx6TGFiZWw6ZCgiemF4aXMiLGMudHJhY2VDb29yZGluYXRlWzJdKX0sXz1oLmNhc3RIb3ZlcmluZm8oZSx0LmZ1bGxMYXlvdXQseCksdz0oX3x8IiIpLnNwbGl0KCIrIiksaz1fJiYiYWxsIj09PV87ZS5ob3ZlcnRlbXBsYXRlfHxrfHwoLTE9PT13LmluZGV4T2YoIngiKSYmKGIueExhYmVsPXZvaWQgMCksLTE9PT13LmluZGV4T2YoInkiKSYmKGIueUxhYmVsPXZvaWQgMCksLTE9PT13LmluZGV4T2YoInoiKSYmKGIuekxhYmVsPXZvaWQgMCksLTE9PT13LmluZGV4T2YoInRleHQiKSYmKGMudGV4dExhYmVsPXZvaWQgMCksLTE9PT13LmluZGV4T2YoIm5hbWUiKSYmKGwubmFtZT12b2lkIDApKTt2YXIgVD1bXTsiY29uZSI9PT1lLnR5cGV8fCJzdHJlYW10dWJlIj09PWUudHlwZT8oYi51TGFiZWw9ZCgieGF4aXMiLGMudHJhY2VDb29yZGluYXRlWzNdKSwoa3x8LTEhPT13LmluZGV4T2YoInUiKSkmJlQucHVzaCgidTogIitiLnVMYWJlbCksYi52TGFiZWw9ZCgieWF4aXMiLGMudHJhY2VDb29yZGluYXRlWzRdKSwoa3x8LTEhPT13LmluZGV4T2YoInYiKSkmJlQucHVzaCgidjogIitiLnZMYWJlbCksYi53TGFiZWw9ZCgiemF4aXMiLGMudHJhY2VDb29yZGluYXRlWzVdKSwoa3x8LTEhPT13LmluZGV4T2YoInciKSkmJlQucHVzaCgidzogIitiLndMYWJlbCksYi5ub3JtTGFiZWw9Yy50cmFjZUNvb3JkaW5hdGVbNl0udG9QcmVjaXNpb24oMyksKGt8fC0xIT09dy5pbmRleE9mKCJub3JtIikpJiZULnB1c2goIm5vcm06ICIrYi5ub3JtTGFiZWwpLCJzdHJlYW10dWJlIj09PWUudHlwZSYmKGIuZGl2ZXJnZW5jZUxhYmVsPWMudHJhY2VDb29yZGluYXRlWzddLnRvUHJlY2lzaW9uKDMpLChrfHwtMSE9PXcuaW5kZXhPZigiZGl2ZXJnZW5jZSIpKSYmVC5wdXNoKCJkaXZlcmdlbmNlOiAiK2IuZGl2ZXJnZW5jZUxhYmVsKSksYy50ZXh0TGFiZWwmJlQucHVzaChjLnRleHRMYWJlbCksbT1ULmpvaW4oIjxicj4iKSk6Imlzb3N1cmZhY2UiPT09ZS50eXBlPyhiLnZhbHVlTGFiZWw9Zi50aWNrVGV4dCh0Lm1vY2tBeGlzLHQubW9ja0F4aXMuZDJsKGMudHJhY2VDb29yZGluYXRlWzNdKSwiaG92ZXIiKS50ZXh0LFQucHVzaCgidmFsdWU6ICIrYi52YWx1ZUxhYmVsKSxjLnRleHRMYWJlbCYmVC5wdXNoKGMudGV4dExhYmVsKSxtPVQuam9pbigiPGJyPiIpKTptPWMudGV4dExhYmVsO3ZhciBBPXt4OmMudHJhY2VDb29yZGluYXRlWzBdLHk6Yy50cmFjZUNvb3JkaW5hdGVbMV0sejpjLnRyYWNlQ29vcmRpbmF0ZVsyXSxkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmUsY3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcjp4fTtoLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShBLGUseCksZS5fbW9kdWxlLmV2ZW50RGF0YSYmKEE9ZS5fbW9kdWxlLmV2ZW50RGF0YShBLGMsZSx7fSx4KSk7dmFyIE09e3BvaW50czpbQV19O3QuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZSYmaC5sb25lSG92ZXIoe3RyYWNlOmUseDooLjUrLjUqdlswXS92WzNdKSppLHk6KC41LS41KnZbMV0vdlszXSkqYSx4TGFiZWw6Yi54TGFiZWwseUxhYmVsOmIueUxhYmVsLHpMYWJlbDpiLnpMYWJlbCx0ZXh0Om0sbmFtZTpsLm5hbWUsY29sb3I6aC5jYXN0SG92ZXJPcHRpb24oZSx4LCJiZ2NvbG9yIil8fGwuY29sb3IsYm9yZGVyQ29sb3I6aC5jYXN0SG92ZXJPcHRpb24oZSx4LCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6aC5jYXN0SG92ZXJPcHRpb24oZSx4LCJmb250LmZhbWlseSIpLGZvbnRTaXplOmguY2FzdEhvdmVyT3B0aW9uKGUseCwiZm9udC5zaXplIiksZm9udENvbG9yOmguY2FzdEhvdmVyT3B0aW9uKGUseCwiZm9udC5jb2xvciIpLGhvdmVydGVtcGxhdGU6dS5jYXN0T3B0aW9uKGUseCwiaG92ZXJ0ZW1wbGF0ZSIpLGhvdmVydGVtcGxhdGVMYWJlbHM6dS5leHRlbmRGbGF0KHt9LEEsYiksZXZlbnREYXRhOltBXX0se2NvbnRhaW5lcjpyLGdkOnQuZ3JhcGhEaXZ9KSxjLmJ1dHRvbnMmJmMuZGlzdGFuY2U8NT90LmdyYXBoRGl2LmVtaXQoInBsb3RseV9jbGljayIsTSk6dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfaG92ZXIiLE0pLG89TX1lbHNlIGgubG9uZVVuaG92ZXIociksdC5ncmFwaERpdi5lbWl0KCJwbG90bHlfdW5ob3ZlciIsbyk7dC5kcmF3QW5ub3RhdGlvbnModCl9LmJpbmQobnVsbCx0KSx0LnRyYWNlcz17fSx0Lm1ha2U0dGhEaW1lbnNpb24oKSwhMH1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbj10LmNvbnRhaW5lcjt0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXY7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2kuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLnN0eWxlLnRvcD1pLnN0eWxlLmxlZnQ9IjBweCIsaS5zdHlsZS53aWR0aD1pLnN0eWxlLmhlaWdodD0iMTAwJSIsaS5zdHlsZVsiei1pbmRleCJdPTIwLGkuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHIuYXBwZW5kQ2hpbGQoaSksdGhpcy5zdmdDb250YWluZXI9aSxyLmlkPXQuaWQsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPXIuc3R5bGUubGVmdD0iMHB4IixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PSIxMDAlIixuLmFwcGVuZENoaWxkKHIpLHRoaXMuZnVsbExheW91dD1lLHRoaXMuaWQ9dC5pZHx8InNjZW5lIix0aGlzLmZ1bGxTY2VuZUxheW91dD1lW3RoaXMuaWRdLHRoaXMucGxvdEFyZ3M9W1tdLHt9LHt9XSx0aGlzLmF4ZXNPcHRpb25zPXYoZSxlW3RoaXMuaWRdKSx0aGlzLnNwaWtlT3B0aW9ucz1tKGVbdGhpcy5pZF0pLHRoaXMuY29udGFpbmVyPXIsdGhpcy5zdGF0aWNNb2RlPSEhdC5zdGF0aWNQbG90LHRoaXMucGl4ZWxSYXRpbz10aGlzLnBpeGVsUmF0aW98fHQucGxvdEdsUGl4ZWxSYXRpb3x8Mix0aGlzLmRhdGFTY2FsZT1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bW10sW10sW11dLHRoaXMuY29udmVydEFubm90YXRpb25zPWMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiY29udmVydCIpLHRoaXMuZHJhd0Fubm90YXRpb25zPWMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiZHJhdyIpLHgodGhpcyx0aGlzLnBpeGVsUmF0aW8pfXZhciBfPWIucHJvdG90eXBlO18uaW5pdGlhbGl6ZUdMQ2FtZXJhPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mdWxsU2NlbmVMYXlvdXQuY2FtZXJhLGU9Im9ydGhvZ3JhcGhpYyI9PT10LnByb2plY3Rpb24udHlwZTt0aGlzLmNhbWVyYT1hKHRoaXMuY29udGFpbmVyLHtjZW50ZXI6W3QuY2VudGVyLngsdC5jZW50ZXIueSx0LmNlbnRlci56XSxleWU6W3QuZXllLngsdC5leWUueSx0LmV5ZS56XSx1cDpbdC51cC54LHQudXAueSx0LnVwLnpdLF9vcnRobzplLHpvb21NaW46LjAxLHpvb21NYXg6MTAwLG1vZGU6Im9yYml0In0pfSxfLnJlY292ZXJDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuZ2xwbG90LmdsLHI9dGhpcy5nbHBsb3QuY2FudmFzLG49dGhpcy5nbHBsb3QuY2FtZXJhLGk9dGhpcy5nbHBsb3QucGl4ZWxSYXRpbzt0aGlzLmdscGxvdC5kaXNwb3NlKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGEoKXtlLmlzQ29udGV4dExvc3QoKT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYSk6eCh0LG4saSxyKT90LnBsb3QuYXBwbHkodCx0LnBsb3RBcmdzKTp1LmVycm9yKCJDYXRhc3Ryb3BoaWMgYW5kIHVucmVjb3ZlcmFibGUgV2ViR0wgZXJyb3IuIENvbnRleHQgbG9zdC4iKX0pfTt2YXIgdz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2Z1bmN0aW9uIGsodCxlLHIpe2Zvcih2YXIgbj10LmZ1bGxTY2VuZUxheW91dCxpPTA7aTwzO2krKyl7dmFyIGE9d1tpXSxvPWEuY2hhckF0KDApLHM9blthXSxsPWVbb10sYz1lW28rImNhbGVuZGFyIl0sZj1lWyJfIitvKyJsZW5ndGgiXTtpZih1LmlzQXJyYXlPclR5cGVkQXJyYXkobCkpZm9yKHZhciBoLHA9MDtwPChmfHxsLmxlbmd0aCk7cCsrKWlmKHUuaXNBcnJheU9yVHlwZWRBcnJheShsW3BdKSlmb3IodmFyIGQ9MDtkPGxbcF0ubGVuZ3RoOysrZCloPXMuZDJsKGxbcF1bZF0sMCxjKSwhaXNOYU4oaCkmJmlzRmluaXRlKGgpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGgpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxoKSk7ZWxzZSBoPXMuZDJsKGxbcF0sMCxjKSwhaXNOYU4oaCkmJmlzRmluaXRlKGgpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGgpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxoKSk7ZWxzZSByWzBdW2ldPU1hdGgubWluKHJbMF1baV0sMCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGYtMSl9fWZ1bmN0aW9uIFQodCl7cmV0dXJue3VwOnt4OnQudXBbMF0seTp0LnVwWzFdLHo6dC51cFsyXX0sY2VudGVyOnt4OnQuY2VudGVyWzBdLHk6dC5jZW50ZXJbMV0sejp0LmNlbnRlclsyXX0sZXllOnt4OnQuZXllWzBdLHk6dC5leWVbMV0sejp0LmV5ZVsyXX0scHJvamVjdGlvbjp7dHlwZTohMD09PXQuX29ydGhvPyJvcnRob2dyYXBoaWMiOiJwZXJzcGVjdGl2ZSJ9fX1fLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucGxvdEFyZ3M9W3QsZSxyXSwhdGhpcy5nbHBsb3QuY29udGV4dExvc3Qpe3ZhciBuLGksYSxvLHMsbCxjPWVbdGhpcy5pZF0sdT1yW3RoaXMuaWRdO2MuYmdjb2xvcj90aGlzLmdscGxvdC5jbGVhckNvbG9yPXAoYy5iZ2NvbG9yKTp0aGlzLmdscGxvdC5jbGVhckNvbG9yPVswLDAsMCwwXSx0aGlzLmdscGxvdC5zbmFwVG9EYXRhPSEwLHRoaXMuZnVsbExheW91dD1lLHRoaXMuZnVsbFNjZW5lTGF5b3V0PWMsdGhpcy5nbHBsb3RMYXlvdXQ9Yyx0aGlzLmF4ZXNPcHRpb25zLm1lcmdlKGUsYyksdGhpcy5zcGlrZU9wdGlvbnMubWVyZ2UoYyksdGhpcy5zZXRDYW1lcmEoYy5jYW1lcmEpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5jYW1lcmEuZW5hYmxlV2hlZWw9dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkLHRoaXMuZ2xwbG90LnVwZGF0ZSh7fSksdGhpcy5zZXRDb252ZXJ0KHMpLHQ/QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTp0PVtdO3ZhciBmPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihhPTA7YTx0Lmxlbmd0aDsrK2EpITA9PT0obj10W2FdKS52aXNpYmxlJiZrKHRoaXMsbixmKTshZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsbj1yLmFubm90YXRpb25zfHxbXSxpPTA7aTwzO2krKylmb3IodmFyIGE9d1tpXSxvPWEuY2hhckF0KDApLHM9clthXSxsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciBjPW5bbF07aWYoYy52aXNpYmxlKXt2YXIgdT1zLnIybChjW29dKTshaXNOYU4odSkmJmlzRmluaXRlKHUpJiYoZVswXVtpXT1NYXRoLm1pbihlWzBdW2ldLHUpLGVbMV1baV09TWF0aC5tYXgoZVsxXVtpXSx1KSl9fX0odGhpcyxmKTt2YXIgaD1bMSwxLDFdO2ZvcihvPTA7bzwzOysrbylmWzFdW29dPT09ZlswXVtvXT9oW29dPTE6aFtvXT0xLyhmWzFdW29dLWZbMF1bb10pO2Zvcih0aGlzLmRhdGFTY2FsZT1oLHRoaXMuY29udmVydEFubm90YXRpb25zKHRoaXMpLGE9MDthPHQubGVuZ3RoOysrYSkhMD09PShuPXRbYV0pLnZpc2libGUmJigoaT10aGlzLnRyYWNlc1tuLnVpZF0pP2kuZGF0YS50eXBlPT09bi50eXBlP2kudXBkYXRlKG4pOihpLmRpc3Bvc2UoKSxpPW4uX21vZHVsZS5wbG90KHRoaXMsbiksdGhpcy50cmFjZXNbbi51aWRdPWkpOihpPW4uX21vZHVsZS5wbG90KHRoaXMsbiksdGhpcy50cmFjZXNbbi51aWRdPWkpLGkubmFtZT1uLm5hbWUpO3ZhciBkPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0OmZvcihhPTA7YTxkLmxlbmd0aDsrK2Epe2ZvcihvPTA7bzx0Lmxlbmd0aDsrK28paWYodFtvXS51aWQ9PT1kW2FdJiYhMD09PXRbb10udmlzaWJsZSljb250aW51ZSB0OyhpPXRoaXMudHJhY2VzW2RbYV1dKS5kaXNwb3NlKCksZGVsZXRlIHRoaXMudHJhY2VzW2RbYV1dfXRoaXMuZ2xwbG90Lm9iamVjdHMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5kYXRhLmluZGV4LWUuX3RyYWNlLmRhdGEuaW5kZXh9KTt2YXIgZz1bWzAsMCwwXSxbMCwwLDBdXSx2PVtdLG09e307Zm9yKGE9MDthPDM7KythKXtpZigobD0ocz1jW3dbYV1dKS50eXBlKWluIG0/KG1bbF0uYWNjKj1oW2FdLG1bbF0uY291bnQrPTEpOm1bbF09e2FjYzpoW2FdLGNvdW50OjF9LHMuYXV0b3JhbmdlKXtnWzBdW2FdPTEvMCxnWzFdW2FdPS0xLzA7dmFyIHk9dGhpcy5nbHBsb3Qub2JqZWN0cyx4PXRoaXMuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zfHxbXSxiPXMuX25hbWUuY2hhckF0KDApO2ZvcihvPTA7bzx5Lmxlbmd0aDtvKyspe3ZhciBfPXlbb10sVD1fLmJvdW5kcyxBPV8uX3RyYWNlLmRhdGEuX3BhZHx8MDsiRXJyb3JCYXJzIj09PV8uY29uc3RydWN0b3IubmFtZSYmcy5fbG93ZXJMb2dFcnJvckJvdW5kP2dbMF1bYV09TWF0aC5taW4oZ1swXVthXSxzLl9sb3dlckxvZ0Vycm9yQm91bmQpOmdbMF1bYV09TWF0aC5taW4oZ1swXVthXSxUWzBdW2FdL2hbYV0tQSksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLFRbMV1bYV0vaFthXStBKX1mb3Iobz0wO288eC5sZW5ndGg7bysrKXt2YXIgTT14W29dO2lmKE0udmlzaWJsZSl7dmFyIFM9cy5yMmwoTVtiXSk7Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLFMpLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSxTKX19aWYoInJhbmdlbW9kZSJpbiBzJiYidG96ZXJvIj09PXMucmFuZ2Vtb2RlJiYoZ1swXVthXT1NYXRoLm1pbihnWzBdW2FdLDApLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSwwKSksZ1swXVthXT5nWzFdW2FdKWdbMF1bYV09LTEsZ1sxXVthXT0xO2Vsc2V7dmFyIEU9Z1sxXVthXS1nWzBdW2FdO2dbMF1bYV0tPUUvMzIsZ1sxXVthXSs9RS8zMn1pZigicmV2ZXJzZWQiPT09cy5hdXRvcmFuZ2Upe3ZhciBDPWdbMF1bYV07Z1swXVthXT1nWzFdW2FdLGdbMV1bYV09Q319ZWxzZXt2YXIgTD1zLnJhbmdlO2dbMF1bYV09cy5yMmwoTFswXSksZ1sxXVthXT1zLnIybChMWzFdKX1nWzBdW2FdPT09Z1sxXVthXSYmKGdbMF1bYV0tPTEsZ1sxXVthXSs9MSksdlthXT1nWzFdW2FdLWdbMF1bYV0sdGhpcy5nbHBsb3QuYm91bmRzWzBdW2FdPWdbMF1bYV0qaFthXSx0aGlzLmdscGxvdC5ib3VuZHNbMV1bYV09Z1sxXVthXSpoW2FdfXZhciB6PVsxLDEsMV07Zm9yKGE9MDthPDM7KythKXt2YXIgTz1tW2w9KHM9Y1t3W2FdXSkudHlwZV07elthXT1NYXRoLnBvdyhPLmFjYywxL08uY291bnQpL2hbYV19dmFyIEk7aWYoImF1dG8iPT09Yy5hc3BlY3Rtb2RlKUk9TWF0aC5tYXguYXBwbHkobnVsbCx6KS9NYXRoLm1pbi5hcHBseShudWxsLHopPD00P3o6WzEsMSwxXTtlbHNlIGlmKCJjdWJlIj09PWMuYXNwZWN0bW9kZSlJPVsxLDEsMV07ZWxzZSBpZigiZGF0YSI9PT1jLmFzcGVjdG1vZGUpST16O2Vsc2V7aWYoIm1hbnVhbCIhPT1jLmFzcGVjdG1vZGUpdGhyb3cgbmV3IEVycm9yKCJzY2VuZS5qcyBhc3BlY3RSYXRpbyB3YXMgbm90IG9uZSBvZiB0aGUgZW51bWVyYXRlZCB0eXBlcyIpO3ZhciBEPWMuYXNwZWN0cmF0aW87ST1bRC54LEQueSxELnpdfWMuYXNwZWN0cmF0aW8ueD11LmFzcGVjdHJhdGlvLng9SVswXSxjLmFzcGVjdHJhdGlvLnk9dS5hc3BlY3RyYXRpby55PUlbMV0sYy5hc3BlY3RyYXRpby56PXUuYXNwZWN0cmF0aW8uej1JWzJdLHRoaXMuZ2xwbG90LmFzcGVjdD1JO3ZhciBQPWMuZG9tYWlufHxudWxsLFI9ZS5fc2l6ZXx8bnVsbDtpZihQJiZSKXt2YXIgRj10aGlzLmNvbnRhaW5lci5zdHlsZTtGLnBvc2l0aW9uPSJhYnNvbHV0ZSIsRi5sZWZ0PVIubCtQLnhbMF0qUi53KyJweCIsRi50b3A9Ui50KygxLVAueVsxXSkqUi5oKyJweCIsRi53aWR0aD1SLncqKFAueFsxXS1QLnhbMF0pKyJweCIsRi5oZWlnaHQ9Ui5oKihQLnlbMV0tUC55WzBdKSsicHgifXRoaXMuZ2xwbG90LnJlZHJhdygpfX0sXy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5nbHBsb3QmJih0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPXRoaXMuZ2xwbG90LmNhbWVyYT1udWxsLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmdscGxvdD1udWxsKX0sXy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHBsb3QuY2FtZXJhLnZpZXcucmVjYWxjTWF0cml4KHRoaXMuY2FtZXJhLnZpZXcubGFzdFQoKSksVCh0aGlzLmdscGxvdC5jYW1lcmEpfSxfLnNldENhbWVyYT1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLmdscGxvdC5jYW1lcmEubG9va0F0LmFwcGx5KHRoaXMsW1soZT10KS5leWUueCxlLmV5ZS55LGUuZXllLnpdLFtlLmNlbnRlci54LGUuY2VudGVyLnksZS5jZW50ZXIuel0sW2UudXAueCxlLnVwLnksZS51cC56XV0pO3ZhciByPSJvcnRob2dyYXBoaWMiPT09dC5wcm9qZWN0aW9uLnR5cGU7aWYociE9PXRoaXMuZ2xwbG90LmNhbWVyYS5fb3J0aG8pe3RoaXMuZ2xwbG90LnJlZHJhdygpO3ZhciBuPXRoaXMuZ2xwbG90LnBpeGVsUmF0aW8saT10aGlzLmdscGxvdC5jbGVhckNvbG9yO3RoaXMuZ2xwbG90LmdsLmNsZWFyQ29sb3IoaVswXSxpWzFdLGlbMl0saVszXSksdGhpcy5nbHBsb3QuZ2wuY2xlYXIodGhpcy5nbHBsb3QuZ2wuREVQVEhfQlVGRkVSX0JJVHx0aGlzLmdscGxvdC5nbC5DT0xPUl9CVUZGRVJfQklUKSx0aGlzLmdscGxvdC5kaXNwb3NlKCkseCh0aGlzLG4pLHRoaXMuZ2xwbG90LmNhbWVyYS5fb3J0aG89cn19LF8uc2F2ZUNhbWVyYT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1bGxMYXlvdXQscj10aGlzLmdldENhbWVyYSgpLG49dS5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKSxpPW4uZ2V0KCksYT0hMTtmdW5jdGlvbiBvKHQsZSxyLG4pe3ZhciBpPVsidXAiLCJjZW50ZXIiLCJleWUiXSxhPVsieCIsInkiLCJ6Il07cmV0dXJuIGVbaVtyXV0mJnRbaVtyXV1bYVtuXV09PT1lW2lbcl1dW2Fbbl1dfWlmKHZvaWQgMD09PWkpYT0hMDtlbHNle2Zvcih2YXIgcz0wO3M8MztzKyspZm9yKHZhciBsPTA7bDwzO2wrKylpZighbyhyLGkscyxsKSl7YT0hMDticmVha30oIWkucHJvamVjdGlvbnx8ci5wcm9qZWN0aW9uJiZyLnByb2plY3Rpb24udHlwZSE9PWkucHJvamVjdGlvbi50eXBlKSYmKGE9ITApfWlmKGEpe3ZhciBmPXt9O2ZbdGhpcy5pZCsiLmNhbWVyYSJdPWksYy5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LGUuX3ByZUdVSSxmKSxuLnNldChyKSx1Lm5lc3RlZFByb3BlcnR5KGUsdGhpcy5pZCsiLmNhbWVyYSIpLnNldChyKX1yZXR1cm4gYX0sXy51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY2FtZXJhO2lmKHIpaWYoIm9yYml0Ij09PXQpci5tb2RlPSJvcmJpdCIsci5rZXlCaW5kaW5nTW9kZT0icm90YXRlIjtlbHNlIGlmKCJ0dXJudGFibGUiPT09dCl7ci51cD1bMCwwLDFdLHIubW9kZT0idHVybnRhYmxlIixyLmtleUJpbmRpbmdNb2RlPSJyb3RhdGUiO3ZhciBuPXRoaXMuZ3JhcGhEaXYsaT1uLl9mdWxsTGF5b3V0LGE9dGhpcy5mdWxsU2NlbmVMYXlvdXQuY2FtZXJhLG89YS51cC54LHM9YS51cC55LGw9YS51cC56O2lmKGwvTWF0aC5zcXJ0KG8qbytzKnMrbCpsKTwuOTk5KXt2YXIgZj10aGlzLmlkKyIuY2FtZXJhLnVwIixoPXt4OjAseTowLHo6MX0scD17fTtwW2ZdPWg7dmFyIGQ9bi5sYXlvdXQ7Yy5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixkLGkuX3ByZUdVSSxwKSxhLnVwPWgsdS5uZXN0ZWRQcm9wZXJ0eShkLGYpLnNldChoKX19ZWxzZSByLmtleUJpbmRpbmdNb2RlPXQ7dGhpcy5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlPWV9LF8udG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD0icG5nIiksdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLmdscGxvdC5yZWRyYXcoKTt2YXIgZT10aGlzLmdscGxvdC5nbCxyPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGk9ZS5kcmF3aW5nQnVmZmVySGVpZ2h0O2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbnVsbCk7dmFyIGE9bmV3IFVpbnQ4QXJyYXkocippKjQpO2UucmVhZFBpeGVscygwLDAscixpLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsYSk7Zm9yKHZhciBvPTAscz1pLTE7bzxzOysrbywtLXMpZm9yKHZhciBsPTA7bDxyOysrbClmb3IodmFyIGM9MDtjPDQ7KytjKXt2YXIgdT1hWzQqKHIqbytsKStjXTthWzQqKHIqbytsKStjXT1hWzQqKHIqcytsKStjXSxhWzQqKHIqcytsKStjXT11fXZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Yud2lkdGg9cixmLmhlaWdodD1pO3ZhciBoLHA9Zi5nZXRDb250ZXh0KCIyZCIpLGQ9cC5jcmVhdGVJbWFnZURhdGEocixpKTtzd2l0Y2goZC5kYXRhLnNldChhKSxwLnB1dEltYWdlRGF0YShkLDAsMCksdCl7Y2FzZSJqcGVnIjpoPWYudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpoPWYudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpoPWYudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxofSxfLnNldENvbnZlcnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7dCsrKXt2YXIgZT10aGlzLmZ1bGxTY2VuZUxheW91dFt3W3RdXTtmLnNldENvbnZlcnQoZSx0aGlzLmZ1bGxMYXlvdXQpLGUuc2V0U2NhbGU9dS5ub29wfX0sXy5tYWtlNHRoRGltZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdi5fZnVsbExheW91dDt0aGlzLm1vY2tBeGlzPXt0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LGYuc2V0Q29udmVydCh0aGlzLm1vY2tBeGlzLHQpfSxlLmV4cG9ydHM9Yn0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciOjcyMSwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2xheW91dC9jb252ZXJ0Ijo3OTMsIi4vbGF5b3V0L3NwaWtlcyI6Nzk2LCIuL2xheW91dC90aWNrX21hcmtzIjo3OTcsIi4vcHJvamVjdCI6Nzk4LCJnbC1wbG90M2QiOjI4NiwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MDMsIndlYmdsLWNvbnRleHQiOjU0MH1dLDgwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7bj1ufHx0Lmxlbmd0aDtmb3IodmFyIGk9bmV3IEFycmF5KG4pLGE9MDthPG47YSsrKWlbYV09W3RbYV0sZVthXSxyW2FdXTtyZXR1cm4gaX19LHt9XSw4MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuL3BhZF9hdHRyaWJ1dGVzIiksbD10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW4oe2VkaXRUeXBlOiJjYWxjIn0pO2MuZmFtaWx5LmRmbHQ9JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsYy5zaXplLmRmbHQ9MTIsYy5jb2xvci5kZmx0PWEuZGVmYXVsdExpbmUsZS5leHBvcnRzPXtmb250OmMsdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sZm9udDpuKHtlZGl0VHlwZToibGF5b3V0c3R5bGUifSkseHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY29udGFpbmVyIix2YWx1ZXM6WyJjb250YWluZXIiLCJwYXBlciJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImNvbnRhaW5lciIsdmFsdWVzOlsiY29udGFpbmVyIiwicGFwZXIiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjUsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OiJhdXRvIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhdXRvIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiYXV0byIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHBhZDpsKHMoe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KSx7fSksZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sYXV0b3NpemU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6Im5vbmUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MTAsZGZsdDo3MDAsZWRpdFR5cGU6InBsb3QifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NDUwLGVkaXRUeXBlOiJwbG90In0sbWFyZ2luOntsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSxyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSx0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAwLGVkaXRUeXBlOiJwbG90In0sYjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGF1dG9leHBhbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHNlcGFyYXRvcnM6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxoaWRlc291cmNlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJsZWdlbmQifSxjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixkZmx0OmEuZGVmYXVsdHMsZWRpdFR5cGU6ImNhbGMifSxjb2xvcnNjYWxlOm8sZGF0YXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHNlbGVjdGlvbnJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sdGVtcGxhdGU6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxtb2RlYmFyOntvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIixlZGl0VHlwZToibW9kZWJhciJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSxhY3RpdmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJtb2RlYmFyIn0sbWV0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InBsb3QifSx0cmFuc2l0aW9uOmwoe30saS50cmFuc2l0aW9uLHtlZGl0VHlwZToibm9uZSJ9KSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvbGF5b3V0X2F0dHJpYnV0ZXMiOjU5MCwiLi4vbGliL2V4dGVuZCI6NjkwLCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo3NDMsIi4vZm9udF9hdHRyaWJ1dGVzIjo3NzQsIi4vcGFkX2F0dHJpYnV0ZXMiOjgwOX1dLDgwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3JlcXVpcmVkVmVyc2lvbjoiMC40NS4wIixzdHlsZVVybFByZWZpeDoibWFwYm94Oi8vc3R5bGVzL21hcGJveC8iLHN0eWxlVXJsU3VmZml4OiJ2OSIsY29udHJvbENvbnRhaW5lckNsYXNzTmFtZToibWFwYm94Z2wtY29udHJvbC1jb250YWluZXIiLHdyb25nVmVyc2lvbkVycm9yTXNnOlsiWW91ciBjdXN0b20gcGxvdGx5LmpzIGJ1bmRsZSBpcyBub3QgdXNpbmcgdGhlIGNvcnJlY3QgbWFwYm94LWdsIHZlcnNpb24iLCJQbGVhc2UgaW5zdGFsbCBtYXBib3gtZ2xAMC40NS4wLiJdLmpvaW4oIlxuIiksbm9BY2Nlc3NUb2tlbkVycm9yTXNnOlsiTWlzc2luZyBNYXBib3ggYWNjZXNzIHRva2VuLiIsIk1hcGJveCB0cmFjZSB0eXBlIHJlcXVpcmUgYSBNYXBib3ggYWNjZXNzIHRva2VuIHRvIGJlIHJlZ2lzdGVyZWQuIiwiRm9yIGV4YW1wbGU6IiwiICBQbG90bHkucGxvdChnZCwgZGF0YSwgbGF5b3V0LCB7IG1hcGJveEFjY2Vzc1Rva2VuOiAnbXktYWNjZXNzLXRva2VuJyB9KTsiLCJNb3JlIGluZm8gaGVyZTogaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL2RlZmluZS1hY2Nlc3MtdG9rZW4vIl0uam9pbigiXG4iKSxtYXBPbkVycm9yTXNnOiJNYXBib3ggZXJyb3IuIixzdHlsZVJ1bGVzOnttYXA6Im92ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTsiLCJtaXNzaW5nLWNzcyI6ImRpc3BsYXk6bm9uZSJ9fX0se31dLDgwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnNwbGl0KCIgIiksaT1yWzBdLGE9clsxXSxvPW4uaXNBcnJheU9yVHlwZWRBcnJheShlKT9uLm1lYW4oZSk6ZSxzPS41K28vMTAwLGw9MS41K28vMTAwLGM9WyIiLCIiXSx1PVswLDBdO3N3aXRjaChpKXtjYXNlInRvcCI6Y1swXT0idG9wIix1WzFdPS1sO2JyZWFrO2Nhc2UiYm90dG9tIjpjWzBdPSJib3R0b20iLHVbMV09bH1zd2l0Y2goYSl7Y2FzZSJsZWZ0IjpjWzFdPSJyaWdodCIsdVswXT0tczticmVhaztjYXNlInJpZ2h0IjpjWzFdPSJsZWZ0Iix1WzBdPXN9cmV0dXJue2FuY2hvcjpjWzBdJiZjWzFdP2Muam9pbigiLSIpOmNbMF0/Y1swXTpjWzFdP2NbMV06ImNlbnRlciIsb2Zmc2V0OnV9fX0seyIuLi8uLi9saWIiOjcwMH1dLDgwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtYXBib3gtZ2wiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi9tYXBib3giKSxsPXQoIi4vY29uc3RhbnRzIik7Zm9yKHZhciBjIGluIGwuc3R5bGVSdWxlcylpLmFkZFN0eWxlUnVsZSgiLm1hcGJveGdsLSIrYyxsLnN0eWxlUnVsZXNbY10pO3IubmFtZT0ibWFwYm94IixyLmF0dHI9InN1YnBsb3QiLHIuaWRSb290PSJtYXBib3giLHIuaWRSZWdleD1yLmF0dHJSZWdleD1pLmNvdW50ZXJSZWdleCgibWFwYm94Iiksci5hdHRyaWJ1dGVzPXtzdWJwbG90Ont2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6Im1hcGJveCIsZWRpdFR5cGU6ImNhbGMifX0sci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmNhbGNkYXRhLG89ZS5fc3VicGxvdHMubWFwYm94O2lmKG4udmVyc2lvbiE9PWwucmVxdWlyZWRWZXJzaW9uKXRocm93IG5ldyBFcnJvcihsLndyb25nVmVyc2lvbkVycm9yTXNnKTt2YXIgYz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7aWYoIiI9PT10Ll9jb250ZXh0Lm1hcGJveEFjY2Vzc1Rva2VuKXJldHVybiIiO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1yW2Vbbl1dO2lmKGkuYWNjZXNzdG9rZW4pcmV0dXJuIGkuYWNjZXNzdG9rZW59dGhyb3cgbmV3IEVycm9yKGwubm9BY2Nlc3NUb2tlbkVycm9yTXNnKX0odCxvKTtuLmFjY2Vzc1Rva2VuPWM7Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1Kyspe3ZhciBmPW9bdV0saD1hKHIsIm1hcGJveCIsZikscD1lW2ZdLGQ9cC5fc3VicGxvdDtkfHwoZD1zKHtnZDp0LGNvbnRhaW5lcjplLl9nbGNvbnRhaW5lci5ub2RlKCksaWQ6ZixmdWxsTGF5b3V0OmUsc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3R9KSxlW2ZdLl9zdWJwbG90PWQpLGQudmlld0luaXRpYWx8fChkLnZpZXdJbml0aWFsPXtjZW50ZXI6aS5leHRlbmRGbGF0KHt9LHAuY2VudGVyKSx6b29tOnAuem9vbSxiZWFyaW5nOnAuYmVhcmluZyxwaXRjaDpwLnBpdGNofSksZC5wbG90KGgsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5tYXBib3h8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc3VicGxvdCYmbltvXS5fc3VicGxvdC5kZXN0cm95KCl9fSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMubWFwYm94LG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0scz1hLmRvbWFpbixsPWEuX3N1YnBsb3QsYz1sLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcsInhsaW5rOmhyZWYiOmMseDpuLmwrbi53KnMueFswXSx5Om4udCtuLmgqKDEtcy55WzFdKSx3aWR0aDpuLncqKHMueFsxXS1zLnhbMF0pLGhlaWdodDpuLmgqKHMueVsxXS1zLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksbC5kZXN0cm95KCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMubWFwYm94LG49MDtuPHIubGVuZ3RoO24rKyl7ZVtyW25dXS5fc3VicGxvdC51cGRhdGVGeChlKX19fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NzgsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6Nzg0LCIuL2NvbnN0YW50cyI6ODAyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MDYsIi4vbGF5b3V0X2RlZmF1bHRzIjo4MDcsIi4vbWFwYm94Ijo4MDgsIm1hcGJveC1nbCI6NDE4fV0sODA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb252ZXJ0X3RleHRfb3B0cyIpO2Z1bmN0aW9uIGEodCxlKXt0aGlzLm1hcGJveD10LHRoaXMubWFwPXQubWFwLHRoaXMudWlkPXQudWlkKyItbGF5ZXIiK2UsdGhpcy5pZFNvdXJjZT10aGlzLnVpZCsiLXNvdXJjZSIsdGhpcy5pZExheWVyPXRoaXMudWlkKyItbGF5ZXIiLHRoaXMuc291cmNlVHlwZT1udWxsLHRoaXMuc291cmNlPW51bGwsdGhpcy5sYXllclR5cGU9bnVsbCx0aGlzLmJlbG93PW51bGwsdGhpcy52aXNpYmxlPSExfXZhciBvPWEucHJvdG90eXBlO2Z1bmN0aW9uIHModCl7dmFyIGU9dC5zb3VyY2U7cmV0dXJuIHQudmlzaWJsZSYmKG4uaXNQbGFpbk9iamVjdChlKXx8InN0cmluZyI9PXR5cGVvZiBlJiZlLmxlbmd0aD4wKX1mdW5jdGlvbiBsKHQpe3ZhciBlPXt9LHI9e307c3dpdGNoKHQudHlwZSl7Y2FzZSJjaXJjbGUiOm4uZXh0ZW5kRmxhdChyLHsiY2lyY2xlLXJhZGl1cyI6dC5jaXJjbGUucmFkaXVzLCJjaXJjbGUtY29sb3IiOnQuY29sb3IsImNpcmNsZS1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlImxpbmUiOm4uZXh0ZW5kRmxhdChyLHsibGluZS13aWR0aCI6dC5saW5lLndpZHRoLCJsaW5lLWNvbG9yIjp0LmNvbG9yLCJsaW5lLW9wYWNpdHkiOnQub3BhY2l0eSwibGluZS1kYXNoYXJyYXkiOnQubGluZS5kYXNofSk7YnJlYWs7Y2FzZSJmaWxsIjpuLmV4dGVuZEZsYXQocix7ImZpbGwtY29sb3IiOnQuY29sb3IsImZpbGwtb3V0bGluZS1jb2xvciI6dC5maWxsLm91dGxpbmVjb2xvciwiZmlsbC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlInN5bWJvbCI6dmFyIGE9dC5zeW1ib2wsbz1pKGEudGV4dHBvc2l0aW9uLGEuaWNvbnNpemUpO24uZXh0ZW5kRmxhdChlLHsiaWNvbi1pbWFnZSI6YS5pY29uKyItMTUiLCJpY29uLXNpemUiOmEuaWNvbnNpemUvMTAsInRleHQtZmllbGQiOmEudGV4dCwidGV4dC1zaXplIjphLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjpvLmFuY2hvciwidGV4dC1vZmZzZXQiOm8ub2Zmc2V0LCJzeW1ib2wtcGxhY2VtZW50IjphLnBsYWNlbWVudH0pLG4uZXh0ZW5kRmxhdChyLHsiaWNvbi1jb2xvciI6dC5jb2xvciwidGV4dC1jb2xvciI6YS50ZXh0Zm9udC5jb2xvciwidGV4dC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KX1yZXR1cm57bGF5b3V0OmUscGFpbnQ6cn19by51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy52aXNpYmxlP3RoaXMubmVlZHNOZXdTb3VyY2UodCk/KHRoaXMucmVtb3ZlTGF5ZXIoKSx0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKTp0aGlzLm5lZWRzTmV3TGF5ZXIodCk/dGhpcy51cGRhdGVMYXllcih0KTp0aGlzLnVwZGF0ZVN0eWxlKHQpOih0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKSx0aGlzLnZpc2libGU9cyh0KX0sby5uZWVkc05ld1NvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VUeXBlIT09dC5zb3VyY2V0eXBlfHx0aGlzLnNvdXJjZSE9PXQuc291cmNlfHx0aGlzLmxheWVyVHlwZSE9PXQudHlwZX0sby5uZWVkc05ld0xheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyVHlwZSE9PXQudHlwZXx8dGhpcy5iZWxvdyE9PXQuYmVsb3d9LG8udXBkYXRlU291cmNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2lmKGUuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiZlLnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKSx0aGlzLnNvdXJjZVR5cGU9dC5zb3VyY2V0eXBlLHRoaXMuc291cmNlPXQuc291cmNlLHModCkpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsaT17dHlwZTpyfTsiZ2VvanNvbiI9PT1yP2U9ImRhdGEiOiJ2ZWN0b3IiPT09ciYmKGU9InN0cmluZyI9PXR5cGVvZiBuPyJ1cmwiOiJ0aWxlcyIpO3JldHVybiBpW2VdPW4saX0odCk7ZS5hZGRTb3VyY2UodGhpcy5pZFNvdXJjZSxyKX19LG8udXBkYXRlTGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXAscj1sKHQpO3RoaXMucmVtb3ZlTGF5ZXIoKSx0aGlzLmxheWVyVHlwZT10LnR5cGUscyh0KSYmZS5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyLHNvdXJjZTp0aGlzLmlkU291cmNlLCJzb3VyY2UtbGF5ZXIiOnQuc291cmNlbGF5ZXJ8fCIiLHR5cGU6dC50eXBlLG1pbnpvb206dC5taW56b29tLG1heHpvb206dC5tYXh6b29tLGxheW91dDpyLmxheW91dCxwYWludDpyLnBhaW50fSx0LmJlbG93KX0sby51cGRhdGVTdHlsZT1mdW5jdGlvbih0KXtpZihzKHQpKXt2YXIgZT1sKHQpO3RoaXMubWFwYm94LnNldE9wdGlvbnModGhpcy5pZExheWVyLCJzZXRMYXlvdXRQcm9wZXJ0eSIsZS5sYXlvdXQpLHRoaXMubWFwYm94LnNldE9wdGlvbnModGhpcy5pZExheWVyLCJzZXRQYWludFByb3BlcnR5IixlLnBhaW50KX19LG8ucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcDt0LmdldExheWVyKHRoaXMuaWRMYXllcikmJnQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKX0sby5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXA7dC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpLHQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2UpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBhKHQsZSk7cmV0dXJuIG4udXBkYXRlKHIpLG59fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2NvbnZlcnRfdGV4dF9vcHRzIjo4MDN9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuZGVmYXVsdExpbmUsYT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikudGV4dHBvc2l0aW9uLGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LHU9byh7fSk7dS5mYW1pbHkuZGZsdD0iT3BlbiBTYW5zIFJlZ3VsYXIsIEFyaWFsIFVuaWNvZGUgTVMgUmVndWxhciIsKGUuZXhwb3J0cz1sKHtfYXJyYXlBdHRyUmVnZXhwczpbbi5jb3VudGVyUmVnZXgoIm1hcGJveCIsIi5sYXllcnMiLCEwKV0sZG9tYWluOmEoe25hbWU6Im1hcGJveCJ9KSxhY2Nlc3N0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sc3R5bGU6e3ZhbFR5cGU6ImFueSIsdmFsdWVzOlsiYmFzaWMiLCJzdHJlZXRzIiwib3V0ZG9vcnMiLCJsaWdodCIsImRhcmsiLCJzYXRlbGxpdGUiLCJzYXRlbGxpdGUtc3RyZWV0cyJdLGRmbHQ6ImJhc2ljIn0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfX0sem9vbTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LGJlYXJpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxwaXRjaDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGxheWVyczpjKCJsYXllciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNvdXJjZXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImdlb2pzb24iLCJ2ZWN0b3IiXSxkZmx0OiJnZW9qc29uIn0sc291cmNlOnt2YWxUeXBlOiJhbnkifSxzb3VyY2VsYXllcjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJsaW5lIiwiZmlsbCIsInN5bWJvbCJdLGRmbHQ6ImNpcmNsZSJ9LGJlbG93Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sbWluem9vbTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MjQsZGZsdDowfSxtYXh6b29tOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoyNCxkZmx0OjI0fSxjaXJjbGU6e3JhZGl1czp7dmFsVHlwZToibnVtYmVyIixkZmx0OjE1fX0sbGluZTp7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyfSxkYXNoOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGZpbGw6e291dGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX19LHN5bWJvbDp7aWNvbjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJtYXJrZXIifSxpY29uc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LHBsYWNlbWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicG9pbnQiLCJsaW5lIiwibGluZS1jZW50ZXIiXSxkZmx0OiJwb2ludCJ9LHRleHRmb250OnUsdGV4dHBvc2l0aW9uOm4uZXh0ZW5kRmxhdCh7fSxzLHthcnJheU9rOiExfSl9fSl9LCJwbG90IiwiZnJvbS1yb290IikpLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA1MSwiLi4vZG9tYWluIjo3NzMsIi4uL2ZvbnRfYXR0cmlidXRlcyI6Nzc0fV0sODA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLGE9dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXtyKCJhY2Nlc3N0b2tlbiIsbi5hY2Nlc3NUb2tlbikscigic3R5bGUiKSxyKCJjZW50ZXIubG9uIikscigiY2VudGVyLmxhdCIpLHIoInpvb20iKSxyKCJiZWFyaW5nIikscigicGl0Y2giKSxhKHQsZSx7bmFtZToibGF5ZXJzIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pLGUuX2lucHV0PXR9ZnVuY3Rpb24gbCh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8ubGF5ZXJzLHIsaSl9aWYocigidmlzaWJsZSIpKXt2YXIgaT1yKCJzb3VyY2V0eXBlIik7cigic291cmNlIiksInZlY3RvciI9PT1pJiZyKCJzb3VyY2VsYXllciIpO3ZhciBhPXIoInR5cGUiKTtyKCJiZWxvdyIpLHIoImNvbG9yIikscigib3BhY2l0eSIpLHIoIm1pbnpvb20iKSxyKCJtYXh6b29tIiksImNpcmNsZSI9PT1hJiZyKCJjaXJjbGUucmFkaXVzIiksImxpbmUiPT09YSYmKHIoImxpbmUud2lkdGgiKSxyKCJsaW5lLmRhc2giKSksImZpbGwiPT09YSYmcigiZmlsbC5vdXRsaW5lY29sb3IiKSwic3ltYm9sIj09PWEmJihyKCJzeW1ib2wuaWNvbiIpLHIoInN5bWJvbC5pY29uc2l6ZSIpLHIoInN5bWJvbC50ZXh0Iiksbi5jb2VyY2VGb250KHIsInN5bWJvbC50ZXh0Zm9udCIpLHIoInN5bWJvbC50ZXh0cG9zaXRpb24iKSxyKCJzeW1ib2wucGxhY2VtZW50IikpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2kodCxlLHIse3R5cGU6Im1hcGJveCIsYXR0cmlidXRlczpvLGhhbmRsZURlZmF1bHRzOnMscGFydGl0aW9uOiJ5IixhY2Nlc3NUb2tlbjplLl9tYXBib3hBY2Nlc3NUb2tlbn0pfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjgyNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODA2fV0sODA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1hcGJveC1nbCIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGw9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsYz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayx1PXQoIi4vY29uc3RhbnRzIiksZj10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksaD10KCIuL2xheWVycyIpO2Z1bmN0aW9uIHAodCl7dGhpcy5pZD10LmlkLHRoaXMuZ2Q9dC5nZCx0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmlzU3RhdGljPXQuc3RhdGljUGxvdDt2YXIgZT10LmZ1bGxMYXlvdXQ7dGhpcy51aWQ9ZS5fdWlkKyItIit0aGlzLmlkLHRoaXMuZGl2PW51bGwsdGhpcy54YXhpcz1udWxsLHRoaXMueWF4aXM9bnVsbCx0aGlzLmNyZWF0ZUZyYW1ld29yayhlKSx0aGlzLm1hcD1udWxsLHRoaXMuYWNjZXNzVG9rZW49bnVsbCx0aGlzLnN0eWxlT2JqPW51bGwsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllckxpc3Q9W119dmFyIGQ9cC5wcm90b3R5cGU7ZnVuY3Rpb24gZyh0KXt2YXIgZT1mLnN0eWxlLnZhbHVlcyxyPWYuc3R5bGUuZGZsdCxuPXt9O3JldHVybiBhLmlzUGxhaW5PYmplY3QodCk/KG4uaWQ9dC5pZCxuLnN0eWxlPXQpOiJzdHJpbmciPT10eXBlb2YgdD8obi5pZD10LG4uc3R5bGU9LTEhPT1lLmluZGV4T2YodCk/dih0KTp0KToobi5pZD1yLG4uc3R5bGU9dihyKSksbi50cmFuc2l0aW9uPXtkdXJhdGlvbjowLGRlbGF5OjB9LG59ZnVuY3Rpb24gdih0KXtyZXR1cm4gdS5zdHlsZVVybFByZWZpeCt0KyItIit1LnN0eWxlVXJsU3VmZml4fWZ1bmN0aW9uIG0odCl7cmV0dXJuW3QubG9uLHQubGF0XX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKHQpfSxkLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcyxhPWVbaS5pZF07aS5tYXAmJmEuYWNjZXNzdG9rZW4hPT1pLmFjY2Vzc1Rva2VuJiYoaS5tYXAucmVtb3ZlKCksaS5tYXA9bnVsbCxpLnN0eWxlT2JqPW51bGwsaS50cmFjZUhhc2g9W10saS5sYXllckxpc3Q9e30pLG49aS5tYXA/bmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXtpLnVwZGF0ZU1hcCh0LGUscixuKX0pOm5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7aS5jcmVhdGVNYXAodCxlLHIsbil9KSxyLnB1c2gobil9LGQuY3JlYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzPXRoaXMsbD1zLmdkLGY9ZVtzLmlkXSxoPXMuc3R5bGVPYmo9ZyhmLnN0eWxlKTtzLmFjY2Vzc1Rva2VuPWYuYWNjZXNzdG9rZW47dmFyIHA9cy5tYXA9bmV3IG4uTWFwKHtjb250YWluZXI6cy5kaXYsc3R5bGU6aC5zdHlsZSxjZW50ZXI6bShmLmNlbnRlciksem9vbTpmLnpvb20sYmVhcmluZzpmLmJlYXJpbmcscGl0Y2g6Zi5waXRjaCxpbnRlcmFjdGl2ZTohcy5pc1N0YXRpYyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6cy5pc1N0YXRpYyxkb3VibGVDbGlja1pvb206ITEsYm94Wm9vbTohMX0pLGQ9dS5jb250cm9sQ29udGFpbmVyQ2xhc3NOYW1lLHY9cy5kaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShkKVswXTtpZihzLmRpdi5yZW1vdmVDaGlsZCh2KSxwLl9jYW52YXMuc3R5bGUubGVmdD0iMHB4IixwLl9jYW52YXMuc3R5bGUudG9wPSIwcHgiLHMucmVqZWN0T25FcnJvcihhKSxwLm9uY2UoImxvYWQiLGZ1bmN0aW9uKCl7cy51cGRhdGVEYXRhKHQpLHMudXBkYXRlTGF5b3V0KGUpLHMucmVzb2x2ZU9uUmVuZGVyKHIpfSksIXMuaXNTdGF0aWMpe3ZhciB5PSExO3Aub24oIm1vdmVlbmQiLGZ1bmN0aW9uKHQpe2lmKHMubWFwKXtpZih0Lm9yaWdpbmFsRXZlbnR8fHkpe3ZhciBlPWwuX2Z1bGxMYXlvdXRbcy5pZF07by5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixsLmxheW91dCxsLl9mdWxsTGF5b3V0Ll9wcmVHVUkscy5nZXRWaWV3RWRpdHMoZSkpO3ZhciByPXMuZ2V0VmlldygpO2UuX2lucHV0LmNlbnRlcj1lLmNlbnRlcj1yLmNlbnRlcixlLl9pbnB1dC56b29tPWUuem9vbT1yLnpvb20sZS5faW5wdXQuYmVhcmluZz1lLmJlYXJpbmc9ci5iZWFyaW5nLGUuX2lucHV0LnBpdGNoPWUucGl0Y2g9ci5waXRjaCxsLmVtaXQoInBsb3RseV9yZWxheW91dCIscy5nZXRWaWV3RWRpdHMocikpfXk9ITF9fSkscC5vbigid2hlZWwiLGZ1bmN0aW9uKCl7eT0hMH0pLHAub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24odCl7dmFyIGU9cy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jbGllbnRYPXQucG9pbnQueCtlLmxlZnQsdC5jbGllbnRZPXQucG9pbnQueStlLnRvcCx0LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZX0scy54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5sbmdMYXQubG5nfSxzLnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0LmxuZ0xhdC5sYXR9LGkuaG92ZXIobCx0LHMuaWQpfSkscC5vbigiZHJhZ3N0YXJ0Iix4KSxwLm9uKCJ6b29tc3RhcnQiLHgpLHAub24oImRibGNsaWNrIixmdW5jdGlvbigpe3ZhciB0PWwuX2Z1bGxMYXlvdXRbcy5pZF07by5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixsLmxheW91dCxsLl9mdWxsTGF5b3V0Ll9wcmVHVUkscy5nZXRWaWV3RWRpdHModCkpO3ZhciBlPXMudmlld0luaXRpYWw7cC5zZXRDZW50ZXIobShlLmNlbnRlcikpLHAuc2V0Wm9vbShlLnpvb20pLHAuc2V0QmVhcmluZyhlLmJlYXJpbmcpLHAuc2V0UGl0Y2goZS5waXRjaCk7dmFyIHI9cy5nZXRWaWV3KCk7dC5faW5wdXQuY2VudGVyPXQuY2VudGVyPXIuY2VudGVyLHQuX2lucHV0Lnpvb209dC56b29tPXIuem9vbSx0Ll9pbnB1dC5iZWFyaW5nPXQuYmVhcmluZz1yLmJlYXJpbmcsdC5faW5wdXQucGl0Y2g9dC5waXRjaD1yLnBpdGNoLGwuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxsLmVtaXQoInBsb3RseV9yZWxheW91dCIscy5nZXRWaWV3RWRpdHMocikpfSkscy5jbGVhclNlbGVjdD1mdW5jdGlvbigpe2wuX2Z1bGxMYXlvdXQuX3pvb21sYXllci5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZSIpLnJlbW92ZSgpfSxzLm9uQ2xpY2tJblBhbkZuPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1sLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtyLmluZGV4T2YoInNlbGVjdCIpPi0xJiZjKGUub3JpZ2luYWxFdmVudCxsLFtzLnhheGlzXSxbcy55YXhpc10scy5pZCx0KSxyLmluZGV4T2YoImV2ZW50Iik+LTEmJmkuY2xpY2sobCxlLm9yaWdpbmFsRXZlbnQpfX19ZnVuY3Rpb24geCgpe2kubG9uZVVuaG92ZXIoZS5fdG9wcGFwZXIpfX0sZC51cGRhdGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPWkubWFwLG89ZVt0aGlzLmlkXTtpLnJlamVjdE9uRXJyb3Iobik7dmFyIHM9ZyhvLnN0eWxlKTtpLnN0eWxlT2JqLmlkIT09cy5pZD8oaS5zdHlsZU9iaj1zLGEuc2V0U3R5bGUocy5zdHlsZSksYS5vbmNlKCJzdHlsZWRhdGEiLGZ1bmN0aW9uKCl7aS50cmFjZUhhc2g9e30saS51cGRhdGVEYXRhKHQpLGkudXBkYXRlTGF5b3V0KGUpLGkucmVzb2x2ZU9uUmVuZGVyKHIpfSkpOihpLnVwZGF0ZURhdGEodCksaS51cGRhdGVMYXlvdXQoZSksaS5yZXNvbHZlT25SZW5kZXIocikpLHRoaXMuZ2QuX2NvbnRleHQuX3Njcm9sbFpvb20ubWFwYm94P2Euc2Nyb2xsWm9vbS5lbmFibGUoKTphLnNjcm9sbFpvb20uZGlzYWJsZSgpfSxkLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10aGlzLnRyYWNlSGFzaDtmb3Iobj0wO248dC5sZW5ndGg7bisrKXt2YXIgbz10W25dOyhlPWFbKHI9b1swXS50cmFjZSkudWlkXSk/ZS51cGRhdGUobyk6ci5fbW9kdWxlJiYoYVtyLnVpZF09ci5fbW9kdWxlLnBsb3QodGhpcyxvKSl9dmFyIHM9T2JqZWN0LmtleXMoYSk7dDpmb3Iobj0wO248cy5sZW5ndGg7bisrKXt2YXIgbD1zW25dO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYobD09PShyPXRbaV1bMF0udHJhY2UpLnVpZCljb250aW51ZSB0OyhlPWFbbF0pLmRpc3Bvc2UoKSxkZWxldGUgYVtsXX19LGQudXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwLHI9dFt0aGlzLmlkXTtlLnNldENlbnRlcihtKHIuY2VudGVyKSksZS5zZXRab29tKHIuem9vbSksZS5zZXRCZWFyaW5nKHIuYmVhcmluZyksZS5zZXRQaXRjaChyLnBpdGNoKSx0aGlzLnVwZGF0ZUxheWVycyh0KSx0aGlzLnVwZGF0ZUZyYW1ld29yayh0KSx0aGlzLnVwZGF0ZUZ4KHQpLHRoaXMubWFwLnJlc2l6ZSgpfSxkLnJlc29sdmVPblJlbmRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtlLm9uKCJyZW5kZXIiLGZ1bmN0aW9uIHIoKXtlLmxvYWRlZCgpJiYoZS5vZmYoInJlbmRlciIsciksc2V0VGltZW91dCh0LDApKX0pfSxkLnJlamVjdE9uRXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7ZnVuY3Rpb24gcigpe3QobmV3IEVycm9yKHUubWFwT25FcnJvck1zZykpfWUub25jZSgiZXJyb3IiLHIpLGUub25jZSgic3R5bGUuZXJyb3IiLHIpLGUub25jZSgic291cmNlLmVycm9yIixyKSxlLm9uY2UoInRpbGUuZXJyb3IiLHIpLGUub25jZSgibGF5ZXIuZXJyb3IiLHIpfSxkLmNyZWF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5pZD1lLnVpZCxyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5jb250YWluZXIuYXBwZW5kQ2hpbGQociksZS54YXhpcz17X2lkOiJ4IixjMnA6ZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvamVjdCh0KS54fX0sZS55YXhpcz17X2lkOiJ5IixjMnA6ZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvamVjdCh0KS55fX0sZS51cGRhdGVGcmFtZXdvcmsodCl9LGQudXBkYXRlRng9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUubWFwLG49ZS5nZDtpZighZS5pc1N0YXRpYyl7dmFyIGksbz10LmRyYWdtb2RlO2k9InNlbGVjdCI9PT1vP2Z1bmN0aW9uKHQscil7KHQucmFuZ2U9e30pW2UuaWRdPVt1KFtyLnhtaW4sci55bWluXSksdShbci54bWF4LHIueW1heF0pXX06ZnVuY3Rpb24odCxyLG4peyh0Lmxhc3NvUG9pbnRzPXt9KVtlLmlkXT1uLmZpbHRlcmVkLm1hcCh1KX07dmFyIGM9ZS5kcmFnT3B0aW9ucztlLmRyYWdPcHRpb25zPWEuZXh0ZW5kRGVlcChjfHx7fSx7ZWxlbWVudDplLmRpdixnZDpuLHBsb3RpbmZvOntpZDplLmlkLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxmaWxsUmFuZ2VJdGVtczppfSx4YXhlczpbZS54YXhpc10seWF4ZXM6W2UueWF4aXNdLHN1YnBsb3Q6ZS5pZH0pLHIub2ZmKCJjbGljayIsZS5vbkNsaWNrSW5QYW5IYW5kbGVyKSwic2VsZWN0Ij09PW98fCJsYXNzbyI9PT1vPyhyLmRyYWdQYW4uZGlzYWJsZSgpLHIub24oInpvb21zdGFydCIsZS5jbGVhclNlbGVjdCksZS5kcmFnT3B0aW9ucy5wcmVwRm49ZnVuY3Rpb24odCxyLG4pe2wodCxyLG4sZS5kcmFnT3B0aW9ucyxvKX0scy5pbml0KGUuZHJhZ09wdGlvbnMpKTooci5kcmFnUGFuLmVuYWJsZSgpLHIub2ZmKCJ6b29tc3RhcnQiLGUuY2xlYXJTZWxlY3QpLGUuZGl2Lm9ubW91c2Vkb3duPW51bGwsZS5vbkNsaWNrSW5QYW5IYW5kbGVyPWUub25DbGlja0luUGFuRm4oZS5kcmFnT3B0aW9ucyksci5vbigiY2xpY2siLGUub25DbGlja0luUGFuSGFuZGxlcikpfWZ1bmN0aW9uIHUodCl7dmFyIHI9ZS5tYXAudW5wcm9qZWN0KHQpO3JldHVybltyLmxuZyxyLmxhdF19fSxkLnVwZGF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10W3RoaXMuaWRdLmRvbWFpbixyPXQuX3NpemUsbj10aGlzLmRpdi5zdHlsZTtuLndpZHRoPXIudyooZS54WzFdLWUueFswXSkrInB4IixuLmhlaWdodD1yLmgqKGUueVsxXS1lLnlbMF0pKyJweCIsbi5sZWZ0PXIubCtlLnhbMF0qci53KyJweCIsbi50b3A9ci50KygxLWUueVsxXSkqci5oKyJweCIsdGhpcy54YXhpcy5fb2Zmc2V0PXIubCtlLnhbMF0qci53LHRoaXMueGF4aXMuX2xlbmd0aD1yLncqKGUueFsxXS1lLnhbMF0pLHRoaXMueWF4aXMuX29mZnNldD1yLnQrKDEtZS55WzFdKSpyLmgsdGhpcy55YXhpcy5fbGVuZ3RoPXIuaCooZS55WzFdLWUueVswXSl9LGQudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dFt0aGlzLmlkXS5sYXllcnMsbj10aGlzLmxheWVyTGlzdDtpZihyLmxlbmd0aCE9PW4ubGVuZ3RoKXtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0uZGlzcG9zZSgpO2ZvcihuPXRoaXMubGF5ZXJMaXN0PVtdLGU9MDtlPHIubGVuZ3RoO2UrKyluLnB1c2goaCh0aGlzLGUscltlXSkpfWVsc2UgZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyluW2VdLnVwZGF0ZShyW2VdKX0sZC5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLm1hcC5yZW1vdmUoKSx0aGlzLm1hcD1udWxsLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuZGl2KSl9LGQudG9JbWFnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcC5zdG9wKCksdGhpcy5tYXAuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCl9LGQuc2V0T3B0aW9ucz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHIpdGhpcy5tYXBbZV0odCxuLHJbbl0pfSxkLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLnByb2plY3QobmV3IG4uTG5nTGF0KHRbMF0sdFsxXSkpfSxkLmdldFZpZXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcCxlPXQuZ2V0Q2VudGVyKCk7cmV0dXJue2NlbnRlcjp7bG9uOmUubG5nLGxhdDplLmxhdH0sem9vbTp0LmdldFpvb20oKSxiZWFyaW5nOnQuZ2V0QmVhcmluZygpLHBpdGNoOnQuZ2V0UGl0Y2goKX19LGQuZ2V0Vmlld0VkaXRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmlkLHI9WyJjZW50ZXIiLCJ6b29tIiwiYmVhcmluZyIsInBpdGNoIl0sbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07bltlKyIuIithXT10W2FdfXJldHVybiBufX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo1OTUsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjc2NSwiLi9jb25zdGFudHMiOjgwMiwiLi9sYXllcnMiOjgwNSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODA2LCJtYXBib3gtZ2wiOjQxOH1dLDgwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lZGl0VHlwZTtyZXR1cm57dDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0scjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sYjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sZWRpdFR5cGU6ZX19fSx7fV0sODEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vcmVnaXN0cnkiKSxvPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIikscz10KCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbD10KCIuLi9saWIiKSxjPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sZj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxoPXQoIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxwPXQoIi4vZnJhbWVfYXR0cmlidXRlcyIpLGQ9bC5yZWxpbmtQcml2YXRlS2V5cyxnPWwuXyx2PWUuZXhwb3J0cz17fTtsLmV4dGVuZEZsYXQodixhKSx2LmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksdi5hdHRyaWJ1dGVzLnR5cGUudmFsdWVzPXYuYWxsVHlwZXMsdi5mb250QXR0cnM9dCgiLi9mb250X2F0dHJpYnV0ZXMiKSx2LmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHYuZm9udFdlaWdodD0ibm9ybWFsIjt2YXIgbT12LnRyYW5zZm9ybXNSZWdpc3RyeSx5PXQoIi4vY29tbWFuZCIpO3YuZXhlY3V0ZUFQSUNvbW1hbmQ9eS5leGVjdXRlQVBJQ29tbWFuZCx2LmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9eS5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzLHYubWFuYWdlQ29tbWFuZE9ic2VydmVyPXkubWFuYWdlQ29tbWFuZE9ic2VydmVyLHYuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzPXkuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzLHYucmVkcmF3VGV4dD1mdW5jdGlvbih0KXtpZighKCh0PWwuZ2V0R3JhcGhEaXYodCkpLmRhdGEmJnQuZGF0YVswXSYmdC5kYXRhWzBdLnIpKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksKHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pLGUodi5wcmV2aW91c1Byb21pc2VzKHQpKX0sMzAwKX0pfSx2LnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD1sLmdldEdyYXBoRGl2KHQpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5O3JldHVybiFlfHwibm9uZSI9PT1lfXQmJiFuKHQpfHxyKG5ldyBFcnJvcigiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgZGlzcGxheWVkIHBsb3QgZGl2IGVsZW1lbnQuIikpLHQuX3JlZHJhd1RpbWVyJiZjbGVhclRpbWVvdXQodC5fcmVkcmF3VGltZXIpLHQuX3JlZHJhd1RpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZighdC5sYXlvdXR8fHQubGF5b3V0LndpZHRoJiZ0LmxheW91dC5oZWlnaHR8fG4odCkpZSh0KTtlbHNle2RlbGV0ZSB0LmxheW91dC53aWR0aCxkZWxldGUgdC5sYXlvdXQuaGVpZ2h0O3ZhciByPXQuY2hhbmdlZDt0LmF1dG9wbGF5PSEwLGEuY2FsbCgicmVsYXlvdXQiLHQse2F1dG9zaXplOiEwfSkudGhlbihmdW5jdGlvbigpe3QuY2hhbmdlZD1yLGUodCl9KX19LDEwMCl9KX0sdi5wcmV2aW91c1Byb21pc2VzPWZ1bmN0aW9uKHQpe2lmKCh0Ll9wcm9taXNlc3x8W10pLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oKXt0Ll9wcm9taXNlcz1bXX0pfSx2LmFkZExpbmtzPWZ1bmN0aW9uKHQpe2lmKHQuX2NvbnRleHQuc2hvd0xpbmt8fHQuX2NvbnRleHQuc2hvd1NvdXJjZXMpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1sLmVuc3VyZVNpbmdsZShlLl9wYXBlciwidGV4dCIsImpzLXBsb3QtbGluay1jb250YWluZXIiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoeyJmb250LWZhbWlseSI6JyJPcGVuIFNhbnMiLCBBcmlhbCwgc2Fucy1zZXJpZicsImZvbnQtc2l6ZSI6IjEycHgiLGZpbGw6Yy5kZWZhdWx0TGluZSwicG9pbnRlci1ldmVudHMiOiJhbGwifSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pfSksaT1yLm5vZGUoKSxhPXt5OmUuX3BhcGVyLmF0dHIoImhlaWdodCIpLTl9O2RvY3VtZW50LmJvZHkuY29udGFpbnMoaSkmJmkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+PWUud2lkdGgtMjA/KGFbInRleHQtYW5jaG9yIl09InN0YXJ0IixhLng9NSk6KGFbInRleHQtYW5jaG9yIl09ImVuZCIsYS54PWUuX3BhcGVyLmF0dHIoIndpZHRoIiktNyksci5hdHRyKGEpO3ZhciBvPXIuc2VsZWN0KCIuanMtbGluay10by10b29sIikscz1yLnNlbGVjdCgiLmpzLWxpbmstc3BhY2VyIiksdT1yLnNlbGVjdCgiLmpzLXNvdXJjZWxpbmtzIik7dC5fY29udGV4dC5zaG93U291cmNlcyYmdC5fY29udGV4dC5zaG93U291cmNlcyh0KSx0Ll9jb250ZXh0LnNob3dMaW5rJiZmdW5jdGlvbih0LGUpe2UudGV4dCgiIik7dmFyIHI9ZS5hcHBlbmQoImEiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6IiMiLGNsYXNzOiJsaW5rLS1pbXB0IGxpbmstLWVtYmVkdmlldyIsImZvbnQtd2VpZ2h0IjoiYm9sZCJ9KS50ZXh0KHQuX2NvbnRleHQubGlua1RleHQrIiAiK1N0cmluZy5mcm9tQ2hhckNvZGUoMTg3KSk7aWYodC5fY29udGV4dC5zZW5kRGF0YSlyLm9uKCJjbGljayIsZnVuY3Rpb24oKXt2LnNlbmREYXRhVG9DbG91ZCh0KX0pO2Vsc2V7dmFyIG49d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCIvIiksaT13aW5kb3cubG9jYXRpb24uc2VhcmNoO3IuYXR0cih7InhsaW5rOnhsaW5rOnNob3ciOiJuZXciLCJ4bGluazp4bGluazpocmVmIjoiLyIrblsyXS5zcGxpdCgiLiIpWzBdKyIvIituWzFdK2l9KX19KHQsbykscy50ZXh0KG8udGV4dCgpJiZ1LnRleHQoKT8iIC0gIjoiIil9fSx2LnNlbmREYXRhVG9DbG91ZD1mdW5jdGlvbih0KXt0LmVtaXQoInBsb3RseV9iZWZvcmVleHBvcnQiKTt2YXIgZT0od2luZG93LlBMT1RMWUVOVnx8e30pLkJBU0VfVVJMfHx0Ll9jb250ZXh0LnBsb3RseVNlcnZlclVSTCxyPW4uc2VsZWN0KHQpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJoaWRkZW5mb3JtIikuc3R5bGUoImRpc3BsYXkiLCJub25lIiksaT1yLmFwcGVuZCgiZm9ybSIpLmF0dHIoe2FjdGlvbjplKyIvZXh0ZXJuYWwiLG1ldGhvZDoicG9zdCIsdGFyZ2V0OiJfYmxhbmsifSk7cmV0dXJuIGkuYXBwZW5kKCJpbnB1dCIpLmF0dHIoe3R5cGU6InRleHQiLG5hbWU6ImRhdGEifSkubm9kZSgpLnZhbHVlPXYuZ3JhcGhKc29uKHQsITEsImtlZXBkYXRhIiksaS5ub2RlKCkuc3VibWl0KCksci5yZW1vdmUoKSx0LmVtaXQoInBsb3RseV9hZnRlcmV4cG9ydCIpLCExfTt2YXIgeD1bImRheXMiLCJzaG9ydERheXMiLCJtb250aHMiLCJzaG9ydE1vbnRocyIsInBlcmlvZHMiLCJkYXRlVGltZSIsImRhdGUiLCJ0aW1lIiwiZGVjaW1hbCIsInRob3VzYW5kcyIsImdyb3VwaW5nIiwiY3VycmVuY3kiXSxiPVsieWVhciIsIm1vbnRoIiwiZGF5TW9udGgiLCJkYXlNb250aFllYXIiXTtmdW5jdGlvbiBfKHQsZSl7dmFyIHI9dC5fY29udGV4dC5sb2NhbGUsbj0hMSxpPXt9O2Z1bmN0aW9uIG8odCl7Zm9yKHZhciByPSEwLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXTtpW29dfHwodFtvXT9pW29dPXRbb106cj0hMSl9ciYmKG49ITApfWZvcih2YXIgcz0wO3M8MjtzKyspe2Zvcih2YXIgbD10Ll9jb250ZXh0LmxvY2FsZXMsYz0wO2M8MjtjKyspe3ZhciB1PShsW3JdfHx7fSkuZm9ybWF0O2lmKHUmJihvKHUpLG4pKWJyZWFrO2w9YS5sb2NhbGVSZWdpc3RyeX12YXIgZj1yLnNwbGl0KCItIilbMF07aWYobnx8Zj09PXIpYnJlYWs7cj1mfXJldHVybiBufHxvKGEubG9jYWxlUmVnaXN0cnkuZW4uZm9ybWF0KSxpfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj17X2Z1bGxMYXlvdXQ6ZX0sbj0ieCI9PT10Ll9pZC5jaGFyQXQoMCksaT10Ll9tYWluQXhpcy5fYW5jaG9yQXhpcyxhPSIiLG89IiIscz0iIjtpZihpJiYocz1pLl9tYWluQXhpcy5faWQsYT1uP3QuX2lkK3M6cyt0Ll9pZCksIWF8fCFlLl9wbG90c1thXSl7YT0iIjtmb3IodmFyIGw9dC5fY291bnRlckF4ZXMsYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdLGg9bj90Ll9pZCt1OnUrdC5faWQ7b3x8KG89aCk7dmFyIHA9Zi5nZXRGcm9tSWQocix1KTtpZihzJiZwLm92ZXJsYXlpbmc9PT1zKXthPWg7YnJlYWt9fX1yZXR1cm4gYXx8b31mdW5jdGlvbiBrKHQpe3ZhciBlPXQudHJhbnNmb3JtcztpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPW4uX21vZHVsZXx8bVtuLnR5cGVdO2lmKGkmJmkubWFrZXNEYXRhKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFQodCxlLHIsbil7Zm9yKHZhciBpPXQudHJhbnNmb3JtcyxhPVt0XSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sbD1tW3MudHlwZV07bCYmbC50cmFuc2Zvcm0mJihhPWwudHJhbnNmb3JtKGEse3RyYW5zZm9ybTpzLGZ1bGxUcmFjZTp0LGZ1bGxEYXRhOmUsbGF5b3V0OnIsZnVsbExheW91dDpuLHRyYW5zZm9ybUluZGV4Om99KSl9cmV0dXJuIGF9ZnVuY3Rpb24gQSh0KXt2YXIgZT10Lm1hcmdpbjtpZighdC5fc2l6ZSl7dmFyIHI9dC5fc2l6ZT17bDpNYXRoLnJvdW5kKGUubCkscjpNYXRoLnJvdW5kKGUuciksdDpNYXRoLnJvdW5kKGUudCksYjpNYXRoLnJvdW5kKGUuYikscDpNYXRoLnJvdW5kKGUucGFkKX07ci53PU1hdGgucm91bmQodC53aWR0aCktci5sLXIucixyLmg9TWF0aC5yb3VuZCh0LmhlaWdodCktci50LXIuYn10Ll9wdXNobWFyZ2lufHwodC5fcHVzaG1hcmdpbj17fSksdC5fcHVzaG1hcmdpbklkc3x8KHQuX3B1c2htYXJnaW5JZHM9e30pfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPSExO3ZhciBpPVt2LnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZih0Ll90cmFuc2l0aW9uRGF0YSlyZXR1cm4gdC5fdHJhbnNpdGlvbmluZz0hMSxmdW5jdGlvbih0KXt2YXIgZT1Qcm9taXNlLnJlc29sdmUoKTtpZighdClyZXR1cm4gZTtmb3IoO3QubGVuZ3RoOyllPWUudGhlbih0LnNoaWZ0KCkpO3JldHVybiBlfSh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX0sci5wcmVwYXJlRm4sdi5yZWhvdmVyLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbmciLFtdKSxuZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0Ll90cmFuc2l0aW9uaW5nPSEwLGUuZHVyYXRpb24+MCYmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITApLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe249ITB9KSxyLnJlZHJhdyYmdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbCgicmVkcmF3Iix0KX0pLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3QuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbnRlcnJ1cHRlZCIsW10pfSk7dmFyIG89MCxzPTA7ZnVuY3Rpb24gbCgpe3JldHVybiBvKyssZnVuY3Rpb24oKXt2YXIgZTtzKyssbnx8cyE9PW98fChlPWksdC5fdHJhbnNpdGlvbkRhdGEmJihmdW5jdGlvbih0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX0odC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe2lmKHIucmVkcmF3KXJldHVybiBhLmNhbGwoInJlZHJhdyIsdCl9KS50aGVuKGZ1bmN0aW9uKCl7dC5fdHJhbnNpdGlvbmluZz0hMSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSExLHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25lZCIsW10pfSkudGhlbihlKSkpfX1yLnJ1bkZuKGwpLHNldFRpbWVvdXQobCgpKX0pfV0sbz1sLnN5bmNPckFzeW5jKGksdCk7cmV0dXJuIG8mJm8udGhlbnx8KG89UHJvbWlzZS5yZXNvbHZlKCkpLG8udGhlbihmdW5jdGlvbigpe3JldHVybiB0fSl9ZnVuY3Rpb24gUyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uY2xlYXJDYWxjKCksIm11bHRpY2F0ZWdvcnkiPT09bi50eXBlJiZuLnNldHVwTXVsdGlDYXRlZ29yeShlKX19di5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUmJmUuc2tpcFVwZGF0ZUNhbGMsaT10Ll9mdWxsTGF5b3V0fHx7fTtpZihpLl9za2lwRGVmYXVsdHMpZGVsZXRlIGkuX3NraXBEZWZhdWx0cztlbHNle3ZhciBvLHM9dC5fZnVsbExheW91dD17fSxjPXQubGF5b3V0fHx7fSx1PXQuX2Z1bGxEYXRhfHxbXSxmPXQuX2Z1bGxEYXRhPVtdLGg9dC5kYXRhfHxbXSxwPXQuY2FsY2RhdGF8fFtdLG09dC5fY29udGV4dHx8e307dC5fdHJhbnNpdGlvbkRhdGF8fHYuY3JlYXRlVHJhbnNpdGlvbkRhdGEodCkscy5fZGZsdFRpdGxlPXtwbG90OmcodCwiQ2xpY2sgdG8gZW50ZXIgUGxvdCB0aXRsZSIpLHg6Zyh0LCJDbGljayB0byBlbnRlciBYIGF4aXMgdGl0bGUiKSx5OmcodCwiQ2xpY2sgdG8gZW50ZXIgWSBheGlzIHRpdGxlIiksY29sb3JiYXI6Zyh0LCJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlIiksYW5ub3RhdGlvbjpnKHQsIm5ldyB0ZXh0Iil9LHMuX3RyYWNlV29yZD1nKHQsInRyYWNlIik7dmFyIHk9Xyh0LHgpO2lmKHMuX21hcGJveEFjY2Vzc1Rva2VuPW0ubWFwYm94QWNjZXNzVG9rZW4saS5faW5pdGlhbEF1dG9TaXplSXNEb25lKXt2YXIgdz1pLndpZHRoLGs9aS5oZWlnaHQ7di5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyhjLHMseSksYy53aWR0aHx8KHMud2lkdGg9dyksYy5oZWlnaHR8fChzLmhlaWdodD1rKSx2LnNhbml0aXplTWFyZ2lucyhzKX1lbHNle3Yuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxzLHkpO3ZhciBUPSFjLndpZHRofHwhYy5oZWlnaHQsTT1zLmF1dG9zaXplLFM9bS5hdXRvc2l6YWJsZTtUJiYoTXx8Uyk/di5wbG90QXV0b1NpemUodCxjLHMpOlQmJnYuc2FuaXRpemVNYXJnaW5zKHMpLCFNJiZUJiYoYy53aWR0aD1zLndpZHRoLGMuaGVpZ2h0PXMuaGVpZ2h0KX1zLl9kM2xvY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmRlY2ltYWw9ZS5jaGFyQXQoMCksdC50aG91c2FuZHM9ZS5jaGFyQXQoMSksbi5sb2NhbGUodCl9KHkscy5zZXBhcmF0b3JzKSxzLl9leHRyYUZvcm1hdD1fKHQsYikscy5faW5pdGlhbEF1dG9TaXplSXNEb25lPSEwLHMuX2RhdGFMZW5ndGg9aC5sZW5ndGgscy5fbW9kdWxlcz1bXSxzLl92aXNpYmxlTW9kdWxlcz1bXSxzLl9iYXNlUGxvdE1vZHVsZXM9W107dmFyIEU9cy5fc3VicGxvdHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9YS5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcyxuPXt9O2lmKCFyKXtyPVtdO3ZhciBpPWEuc3VicGxvdHNSZWdpc3RyeTtmb3IodmFyIG8gaW4gaSl7dmFyIHM9aVtvXSxjPXMuYXR0cjtpZihjJiYoci5wdXNoKG8pLEFycmF5LmlzQXJyYXkoYykpKWZvcihlPTA7ZTxjLmxlbmd0aDtlKyspbC5wdXNoVW5pcXVlKHIsY1tlXSl9fWZvcih0PTA7dDxyLmxlbmd0aDt0KyspbltyW3RdXT1bXTtyZXR1cm4gbn0oKSxDPXMuX3NwbG9tQXhlcz17eDp7fSx5Ont9fSxMPXMuX3NwbG9tU3VicGxvdHM9e307cy5fc3Bsb21HcmlkRGZsdD17fSxzLl9zY2F0dGVyU3RhY2tPcHRzPXt9LHMuX2ZpcnN0U2NhdHRlcj17fSxzLl9hbGlnbm1lbnRPcHRzPXt9LHMuX3JlcXVlc3RSYW5nZXNsaWRlcj17fSxzLl90cmFjZVVpZHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLl9mdWxsSW5wdXQ7byE9PW4mJmEucHVzaChvKSxuPW99dmFyIHM9YS5sZW5ndGgsYz1uZXcgQXJyYXkoaSksdT17fTtmdW5jdGlvbiBmKHQsZSl7Y1tlXT10LHVbdF09MX1mdW5jdGlvbiBoKHQsZSl7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0JiYhdVt0XSlyZXR1cm4gZih0LGUpLCEwfWZvcihyPTA7cjxpO3IrKyl7dmFyIHA9ZVtyXS51aWQ7Im51bWJlciI9PXR5cGVvZiBwJiYocD1TdHJpbmcocCkpLGgocCxyKXx8KHI8cyYmaChhW3JdLnVpZCxyKXx8ZihsLnJhbmRzdHIodSkscikpfXJldHVybiBjfSh1LGgpLHMuX2dsb2JhbFRyYW5zZm9ybXM9KHQuX2NvbnRleHR8fHt9KS5nbG9iYWxUcmFuc2Zvcm1zLHYuc3VwcGx5RGF0YURlZmF1bHRzKGgsZixjLHMpO3ZhciB6PU9iamVjdC5rZXlzKEMueCksTz1PYmplY3Qua2V5cyhDLnkpO2lmKHoubGVuZ3RoPjEmJk8ubGVuZ3RoPjEpe2ZvcihhLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsInNpemVEZWZhdWx0cyIpKGMscyksbz0wO288ei5sZW5ndGg7bysrKWwucHVzaFVuaXF1ZShFLnhheGlzLHpbb10pO2ZvcihvPTA7bzxPLmxlbmd0aDtvKyspbC5wdXNoVW5pcXVlKEUueWF4aXMsT1tvXSk7Zm9yKHZhciBJIGluIEwpbC5wdXNoVW5pcXVlKEUuY2FydGVzaWFuLEkpfWlmKHMuX2hhcz12Ll9oYXNQbG90VHlwZS5iaW5kKHMpLHUubGVuZ3RoPT09Zi5sZW5ndGgpZm9yKG89MDtvPGYubGVuZ3RoO28rKylkKGZbb10sdVtvXSk7di5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cyhjLHMsZix0Ll90cmFuc2l0aW9uRGF0YSk7dmFyIEQ9cy5fdmlzaWJsZU1vZHVsZXMsUD1bXTtmb3Iobz0wO288RC5sZW5ndGg7bysrKXt2YXIgUj1EW29dLmNyb3NzVHJhY2VEZWZhdWx0cztSJiZsLnB1c2hVbmlxdWUoUCxSKX1mb3Iobz0wO288UC5sZW5ndGg7bysrKVBbb10oZixzKTthLmdldENvbXBvbmVudE1ldGhvZCgiY29sb3JzY2FsZSIsImNyb3NzVHJhY2VEZWZhdWx0cyIpKGYscykscy5faGFzT25seUxhcmdlU3Bsb21zPTE9PT1zLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoJiYic3Bsb20iPT09cy5fYmFzZVBsb3RNb2R1bGVzWzBdLm5hbWUmJnoubGVuZ3RoPjE1JiZPLmxlbmd0aD4xNSYmMD09PXMuc2hhcGVzLmxlbmd0aCYmMD09PXMuaW1hZ2VzLmxlbmd0aCxzLl9oYXNDYXJ0ZXNpYW49cy5faGFzKCJjYXJ0ZXNpYW4iKSxzLl9oYXNHZW89cy5faGFzKCJnZW8iKSxzLl9oYXNHTDNEPXMuX2hhcygiZ2wzZCIpLHMuX2hhc0dMMkQ9cy5faGFzKCJnbDJkIikscy5faGFzVGVybmFyeT1zLl9oYXMoInRlcm5hcnkiKSxzLl9oYXNQaWU9cy5faGFzKCJwaWUiKSx2LmxpbmtTdWJwbG90cyhmLHMsdSxpKSx2LmNsZWFuUGxvdChmLHMsdSxpKSxkKHMsaSkscy5fcHJlR1VJfHwocy5fcHJlR1VJPXt9KSxzLl90cmFjZVByZUdVSXx8KHMuX3RyYWNlUHJlR1VJPXt9KTt2YXIgRixCPXMuX3RyYWNlUHJlR1VJLE49e307Zm9yKEYgaW4gQilOW0ZdPSJvbGQiO2ZvcihvPTA7bzxmLmxlbmd0aDtvKyspTltGPWZbb10uX2Z1bGxJbnB1dC51aWRdfHwoQltGXT17fSksTltGXT0ibmV3Ijtmb3IoRiBpbiBOKSJvbGQiPT09TltGXSYmZGVsZXRlIEJbRl07QShzKSxhLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJtYWtlRGF0YSIpKHMpLHJ8fHAubGVuZ3RoIT09Zi5sZW5ndGh8fHYuc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKHAsZil9fSx2LnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9KHRbcl18fFtdKVswXTtpZihpJiZpLnRyYWNlKXt2YXIgYT1pLnRyYWNlO2lmKGEuX2hhc0NhbGNUcmFuc2Zvcm0pe3ZhciBvLHMsYyx1PWEuX2FycmF5QXR0cnM7Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzPXVbb10sYz1sLm5lc3RlZFByb3BlcnR5KGEscykuZ2V0KCkuc2xpY2UoKSxsLm5lc3RlZFByb3BlcnR5KG4scykuc2V0KGMpfWkudHJhY2U9bn19fSx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhPWZ1bmN0aW9uKHQpe3QuX3RyYW5zaXRpb25EYXRhfHwodC5fdHJhbnNpdGlvbkRhdGE9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXN8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzPVtdKSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNofHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXJ8fCh0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcj0wKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcz1bXSl9LHYuX2hhc1Bsb3RUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKHJbZV0ubmFtZT09PXQpcmV0dXJuITA7dmFyIG49dGhpcy5fbW9kdWxlc3x8W107Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIGk9bltlXS5uYW1lO2lmKGk9PT10KXJldHVybiEwO3ZhciBvPWEubW9kdWxlc1tpXTtpZihvJiZvLmNhdGVnb3JpZXNbdF0pcmV0dXJuITB9cmV0dXJuITF9LHYuY2xlYW5QbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBzPW9baV07cy5jbGVhbiYmcy5jbGVhbih0LGUscixuKX12YXIgbD1uLl9oYXMmJm4uX2hhcygiZ2wiKSxjPWUuX2hhcyYmZS5faGFzKCJnbCIpO2wmJiFjJiZ2b2lkIDAhPT1uLl9nbGNvbnRhaW5lciYmKG4uX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLnJlbW92ZSgpLG4uX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLm5vLXdlYmdsIikucmVtb3ZlKCksbi5fZ2xjYW52YXM9bnVsbCk7dmFyIHU9ISFuLl9pbmZvbGF5ZXI7dDpmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgZj1yW2ldLnVpZDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXtpZihmPT09dFthXS51aWQpY29udGludWUgdH11JiZuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuY2IiK2YpLnJlbW92ZSgpfW4uX3pvb21sYXllciYmbi5fem9vbWxheWVyLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCl9LHYubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9wbG90c3x8e30scz1lLl9wbG90cz17fSxjPWUuX3N1YnBsb3RzLHU9e19mdWxsRGF0YTp0LF9mdWxsTGF5b3V0OmV9LGg9Yy5jYXJ0ZXNpYW4uY29uY2F0KGMuZ2wyZHx8W10pO2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBwLGQ9aFtpXSxnPW9bZF0sdj1mLmdldEZyb21JZCh1LGQsIngiKSxtPWYuZ2V0RnJvbUlkKHUsZCwieSIpO2ZvcihnP3A9c1tkXT1nOihwPXNbZF09e30pLmlkPWQsdi5fY291bnRlckF4ZXMucHVzaChtLl9pZCksbS5fY291bnRlckF4ZXMucHVzaCh2Ll9pZCksdi5fc3VicGxvdHNXaXRoLnB1c2goZCksbS5fc3VicGxvdHNXaXRoLnB1c2goZCkscC54YXhpcz12LHAueWF4aXM9bSxwLl9oYXNDbGlwT25BeGlzRmFsc2U9ITEsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgeT10W2FdO2lmKHkueGF4aXM9PT1wLnhheGlzLl9pZCYmeS55YXhpcz09PXAueWF4aXMuX2lkJiYhMT09PXkuY2xpcG9uYXhpcyl7cC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX19dmFyIHgsYj1mLmxpc3QodSxudWxsLCEwKTtmb3IoaT0wO2k8Yi5sZW5ndGg7aSsrKXt2YXIgXz1udWxsOyh4PWJbaV0pLm92ZXJsYXlpbmcmJihfPWYuZ2V0RnJvbUlkKHUseC5vdmVybGF5aW5nKSkmJl8ub3ZlcmxheWluZyYmKHgub3ZlcmxheWluZz0hMSxfPW51bGwpLHguX21haW5BeGlzPV98fHgsXyYmKHguZG9tYWluPV8uZG9tYWluLnNsaWNlKCkpLHguX2FuY2hvckF4aXM9ImZyZWUiPT09eC5hbmNob3I/bnVsbDpmLmdldEZyb21JZCh1LHguYW5jaG9yKX1mb3IoaT0wO2k8Yi5sZW5ndGg7aSsrKSh4PWJbaV0pLl9jb3VudGVyQXhlcy5zb3J0KGYuaWRTb3J0KSx4Ll9zdWJwbG90c1dpdGguc29ydChsLnN1YnBsb3RTb3J0KSx4Ll9tYWluU3VicGxvdD13KHgsZSl9LHYuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycz1mdW5jdGlvbih0KXt2YXIgZSxyLG47Zm9yKHI9W10sKGU9dC5fbW9kdWxlLl9jb2xvckF0dHJzKXx8KHQuX21vZHVsZS5fY29sb3JBdHRycz1lPVtdLG8uY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsZnVuY3Rpb24odCxuLGksYSl7clthXT1uLHIubGVuZ3RoPWErMSwiY29sb3IiPT09dC52YWxUeXBlJiZ2b2lkIDA9PT10LmRmbHQmJmUucHVzaChyLmpvaW4oIi4iKSl9KSksbj0wO248ZS5sZW5ndGg7bisrKXtsLm5lc3RlZFByb3BlcnR5KHQsIl9pbnB1dC4iK2Vbbl0pLmdldCgpfHxsLm5lc3RlZFByb3BlcnR5KHQsZVtuXSkuc2V0KG51bGwpfX0sdi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksbyxjLHU9bi5fbW9kdWxlcyxmPW4uX3Zpc2libGVNb2R1bGVzLGg9bi5fYmFzZVBsb3RNb2R1bGVzLHA9MCxnPTA7ZnVuY3Rpb24gbSh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJihsLnB1c2hVbmlxdWUodSxyKSwhMD09PXQudmlzaWJsZSYmbC5wdXNoVW5pcXVlKGYsciksbC5wdXNoVW5pcXVlKGgsdC5fbW9kdWxlLmJhc2VQbG90TW9kdWxlKSxwKyssITEhPT10Ll9pbnB1dC52aXNpYmxlJiZnKyspfW4uX3RyYW5zZm9ybU1vZHVsZXM9W107dmFyIHk9e30seD1bXSxiPShyLnRlbXBsYXRlfHx7fSkuZGF0YXx8e30sXz1zLnRyYWNlVGVtcGxhdGVyKGIpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKGM9dFtpXSwobz1fLm5ld1RyYWNlKGMpKS51aWQ9bi5fdHJhY2VVaWRzW2ldLHYuc3VwcGx5VHJhY2VEZWZhdWx0cyhjLG8sZyxuLGkpLG8uaW5kZXg9aSxvLl9pbnB1dD1jLG8uX2V4cGFuZGVkSW5kZXg9cCxvLnRyYW5zZm9ybXMmJm8udHJhbnNmb3Jtcy5sZW5ndGgpZm9yKHZhciB3PSExIT09Yy52aXNpYmxlJiYhMT09PW8udmlzaWJsZSxrPVQobyxlLHIsbiksQT0wO0E8ay5sZW5ndGg7QSsrKXt2YXIgTT1rW0FdLFM9e190ZW1wbGF0ZTpvLl90ZW1wbGF0ZSx0eXBlOm8udHlwZSx1aWQ6by51aWQrQX07dyYmITE9PT1NLnZpc2libGUmJmRlbGV0ZSBNLnZpc2libGUsdi5zdXBwbHlUcmFjZURlZmF1bHRzKE0sUyxwLG4saSksZChTLE0pLFMuaW5kZXg9aSxTLl9pbnB1dD1jLFMuX2Z1bGxJbnB1dD1vLFMuX2V4cGFuZGVkSW5kZXg9cCxTLl9leHBhbmRlZElucHV0PU0sbShTKX1lbHNlIG8uX2Z1bGxJbnB1dD1vLG8uX2V4cGFuZGVkSW5wdXQ9byxtKG8pO2EudHJhY2VJcyhvLCJjYXJwZXRBeGlzIikmJih5W28uY2FycGV0XT1vKSxhLnRyYWNlSXMobywiY2FycGV0RGVwZW5kZW50IikmJngucHVzaChpKX1mb3IoaT0wO2k8eC5sZW5ndGg7aSsrKWlmKChvPWVbeFtpXV0pLnZpc2libGUpe3ZhciBFPXlbby5jYXJwZXRdO28uX2NhcnBldD1FLEUmJkUudmlzaWJsZT8oby54YXhpcz1FLnhheGlzLG8ueWF4aXM9RS55YXhpcyk6by52aXNpYmxlPSExfX0sdi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZTt0PXR8fHt9O3ZhciByPXt9O2Z1bmN0aW9uIG4oZSxuKXtyZXR1cm4gbC5jb2VyY2UodHx8e30scixoLGUsbil9aWYobigibW9kZSIpLG4oImRpcmVjdGlvbiIpLG4oImZyb21jdXJyZW50IiksQXJyYXkuaXNBcnJheSh0LmZyYW1lKSlmb3Ioci5mcmFtZT1bXSxlPTA7ZTx0LmZyYW1lLmxlbmd0aDtlKyspci5mcmFtZVtlXT12LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZVtlXXx8e30pO2Vsc2Ugci5mcmFtZT12LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZXx8e30pO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2l0aW9uKSlmb3Ioci50cmFuc2l0aW9uPVtdLGU9MDtlPHQudHJhbnNpdGlvbi5sZW5ndGg7ZSsrKXIudHJhbnNpdGlvbltlXT12LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb25bZV18fHt9KTtlbHNlIHIudHJhbnNpdGlvbj12LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb258fHt9KTtyZXR1cm4gcn0sdi5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gbC5jb2VyY2UodHx8e30sZSxoLmZyYW1lLHIsbil9cmV0dXJuIHIoImR1cmF0aW9uIikscigicmVkcmF3IiksZX0sdi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBsLmNvZXJjZSh0fHx7fSxlLGgudHJhbnNpdGlvbixyLG4pfXJldHVybiByKCJkdXJhdGlvbiIpLHIoImVhc2luZyIpLGV9LHYuc3VwcGx5RnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGwuY29lcmNlKHQsZSxwLHIsbil9cmV0dXJuIHIoImdyb3VwIikscigibmFtZSIpLHIoInRyYWNlcyIpLHIoImJhc2VmcmFtZSIpLHIoImRhdGEiKSxyKCJsYXlvdXQiKSxlfSx2LnN1cHBseVRyYWNlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxzPW4uY29sb3J3YXl8fGMuZGVmYXVsdHMsdT1zW3Ilcy5sZW5ndGhdO2Z1bmN0aW9uIGYocixuKXtyZXR1cm4gbC5jb2VyY2UodCxlLHYuYXR0cmlidXRlcyxyLG4pfXZhciBoPWYoInZpc2libGUiKTtmKCJ0eXBlIiksZigibmFtZSIsbi5fdHJhY2VXb3JkKyIgIitpKSxmKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pO3ZhciBwLGQsZyxtPXYuZ2V0TW9kdWxlKGUpO2lmKGUuX21vZHVsZT1tLG0pe3ZhciB5PW0uYmFzZVBsb3RNb2R1bGUseD15LmF0dHIsYj15LmF0dHJpYnV0ZXM7aWYoeCYmYil7dmFyIF89bi5fc3VicGxvdHMsdz0iIjtpZigiZ2wyZCIhPT15Lm5hbWV8fGgpe2lmKEFycmF5LmlzQXJyYXkoeCkpZm9yKG89MDtvPHgubGVuZ3RoO28rKyl7dmFyIGs9eFtvXSxUPWwuY29lcmNlKHQsZSxiLGspO19ba10mJmwucHVzaFVuaXF1ZShfW2tdLFQpLHcrPVR9ZWxzZSB3PWwuY29lcmNlKHQsZSxiLHgpO19beS5uYW1lXSYmbC5wdXNoVW5pcXVlKF9beS5uYW1lXSx3KX19fXJldHVybiBoJiYoZigiY3VzdG9tZGF0YSIpLGYoImlkcyIpLGEudHJhY2VJcyhlLCJzaG93TGVnZW5kIik/KGUuX2RmbHRTaG93TGVnZW5kPSEwLGYoInNob3dsZWdlbmQiKSxmKCJsZWdlbmRncm91cCIpKTplLl9kZmx0U2hvd0xlZ2VuZD0hMSxwPSJob3ZlcmxhYmVsIixkPSIiLGc9ZnVuY3Rpb24oKXthLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlEZWZhdWx0cyIpKHQsZSx1LG4pfSxtJiZwIGluIG0uYXR0cmlidXRlcyYmdm9pZCAwPT09bS5hdHRyaWJ1dGVzW3BdfHwoZyYmImZ1bmN0aW9uIj09dHlwZW9mIGc/ZygpOmYocCxkKSksbSYmKG0uc3VwcGx5RGVmYXVsdHModCxlLHUsbiksZS5ob3ZlcnRlbXBsYXRlfHxsLmNvZXJjZUhvdmVyaW5mbyh0LGUsbikpLGEudHJhY2VJcyhlLCJub09wYWNpdHkiKXx8Zigib3BhY2l0eSIpLGEudHJhY2VJcyhlLCJub3RMZWdlbmRJc29sYXRhYmxlIikmJihlLnZpc2libGU9ISFlLnZpc2libGUpLG0mJm0uc2VsZWN0UG9pbnRzJiZmKCJzZWxlY3RlZHBvaW50cyIpLHYuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHModCxlLG4pKSxlfSx2Lmhhc01ha2VzRGF0YVRyYW5zZm9ybT1rLHYuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2lmKGUuX2xlbmd0aHx8ayh0KSl7dmFyIG49ci5fZ2xvYmFsVHJhbnNmb3Jtc3x8W10saT1yLl90cmFuc2Zvcm1Nb2R1bGVzfHxbXTtpZihBcnJheS5pc0FycmF5KHQudHJhbnNmb3Jtcyl8fDAhPT1uLmxlbmd0aClmb3IodmFyIGE9dC50cmFuc2Zvcm1zfHxbXSxvPW4uY29uY2F0KGEpLHM9ZS50cmFuc2Zvcm1zPVtdLGM9MDtjPG8ubGVuZ3RoO2MrKyl7dmFyIHUsZj1vW2NdLGg9Zi50eXBlLHA9bVtoXSxkPSEoZi5fbW9kdWxlJiZmLl9tb2R1bGU9PT1wKSxnPXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBwLnRyYW5zZm9ybTtwfHxsLndhcm4oIlVucmVjb2duaXplZCB0cmFuc2Zvcm0gdHlwZSAiK2grIi4iKSxwJiZwLnN1cHBseURlZmF1bHRzJiYoZHx8Zyk/KCh1PXAuc3VwcGx5RGVmYXVsdHMoZixlLHIsdCkpLnR5cGU9aCx1Ll9tb2R1bGU9cCxsLnB1c2hVbmlxdWUoaSxwKSk6dT1sLmV4dGVuZEZsYXQoe30sZikscy5wdXNoKHUpfX19LHYuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gbC5jb2VyY2UodCxlLHYubGF5b3V0QXR0cmlidXRlcyxyLG4pfXZhciBpPXQudGVtcGxhdGU7bC5pc1BsYWluT2JqZWN0KGkpJiYoZS50ZW1wbGF0ZT1pLGUuX3RlbXBsYXRlPWkubGF5b3V0LGUuX2RhdGFUZW1wbGF0ZT1pLmRhdGEpO3ZhciBvPWwuY29lcmNlRm9udChuLCJmb250Iik7bigidGl0bGUudGV4dCIsZS5fZGZsdFRpdGxlLnBsb3QpLGwuY29lcmNlRm9udChuLCJ0aXRsZS5mb250Iix7ZmFtaWx5Om8uZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjQqby5zaXplKSxjb2xvcjpvLmNvbG9yfSksbigidGl0bGUueHJlZiIpLG4oInRpdGxlLnlyZWYiKSxuKCJ0aXRsZS54IiksbigidGl0bGUueSIpLG4oInRpdGxlLnhhbmNob3IiKSxuKCJ0aXRsZS55YW5jaG9yIiksbigidGl0bGUucGFkLnQiKSxuKCJ0aXRsZS5wYWQuciIpLG4oInRpdGxlLnBhZC5iIiksbigidGl0bGUucGFkLmwiKSxuKCJhdXRvc2l6ZSIsISh0LndpZHRoJiZ0LmhlaWdodCkpLG4oIndpZHRoIiksbigiaGVpZ2h0IiksbigibWFyZ2luLmwiKSxuKCJtYXJnaW4uciIpLG4oIm1hcmdpbi50IiksbigibWFyZ2luLmIiKSxuKCJtYXJnaW4ucGFkIiksbigibWFyZ2luLmF1dG9leHBhbmQiKSx0LndpZHRoJiZ0LmhlaWdodCYmdi5zYW5pdGl6ZU1hcmdpbnMoZSksYS5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJzaXplRGVmYXVsdHMiKSh0LGUpLG4oInBhcGVyX2JnY29sb3IiKSxuKCJzZXBhcmF0b3JzIixyLmRlY2ltYWwrci50aG91c2FuZHMpLG4oImhpZGVzb3VyY2VzIiksbigiY29sb3J3YXkiKSxuKCJkYXRhcmV2aXNpb24iKTt2YXIgcz1uKCJ1aXJldmlzaW9uIik7bigiZWRpdHJldmlzaW9uIixzKSxuKCJzZWxlY3Rpb25yZXZpc2lvbiIscyksbigibW9kZWJhci5vcmllbnRhdGlvbiIpLG4oIm1vZGViYXIuYmdjb2xvciIsYy5hZGRPcGFjaXR5KGUucGFwZXJfYmdjb2xvciwuNSkpO3ZhciB1PWMuY29udHJhc3QoYy5yZ2IoZS5tb2RlYmFyLmJnY29sb3IpKTtuKCJtb2RlYmFyLmNvbG9yIixjLmFkZE9wYWNpdHkodSwuMykpLG4oIm1vZGViYXIuYWN0aXZlY29sb3IiLGMuYWRkT3BhY2l0eSh1LC43KSksbigibW9kZWJhci51aXJldmlzaW9uIixzKSxuKCJtZXRhIiksbC5pc1BsYWluT2JqZWN0KHQudHJhbnNpdGlvbikmJihuKCJ0cmFuc2l0aW9uLmR1cmF0aW9uIiksbigidHJhbnNpdGlvbi5lYXNpbmciKSxuKCJ0cmFuc2l0aW9uLm9yZGVyaW5nIikpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiKSxhLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyIpKHQsZSxuKX0sdi5wbG90QXV0b1NpemU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsbz10Ll9jb250ZXh0fHx7fSxzPW8uZnJhbWVNYXJnaW5zLGM9bC5pc1Bsb3REaXYodCk7aWYoYyYmdC5lbWl0KCJwbG90bHlfYXV0b3NpemUiKSxvLmZpbGxGcmFtZSluPXdpbmRvdy5pbm5lcldpZHRoLGE9d2luZG93LmlubmVySGVpZ2h0LGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7ZWxzZXt2YXIgdT1jP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpOnt9O2lmKG49cGFyc2VGbG9hdCh1LndpZHRoKXx8cGFyc2VGbG9hdCh1Lm1heFdpZHRoKXx8ci53aWR0aCxhPXBhcnNlRmxvYXQodS5oZWlnaHQpfHxwYXJzZUZsb2F0KHUubWF4SGVpZ2h0KXx8ci5oZWlnaHQsaShzKSYmcz4wKXt2YXIgZj0xLTIqcztuPU1hdGgucm91bmQoZipuKSxhPU1hdGgucm91bmQoZiphKX19dmFyIGg9di5sYXlvdXRBdHRyaWJ1dGVzLndpZHRoLm1pbixwPXYubGF5b3V0QXR0cmlidXRlcy5oZWlnaHQubWluO248aCYmKG49aCksYTxwJiYoYT1wKTt2YXIgZD0hZS53aWR0aCYmTWF0aC5hYnMoci53aWR0aC1uKT4xLGc9IWUuaGVpZ2h0JiZNYXRoLmFicyhyLmhlaWdodC1hKT4xOyhnfHxkKSYmKGQmJihyLndpZHRoPW4pLGcmJihyLmhlaWdodD1hKSksdC5faW5pdGlhbEF1dG9TaXplfHwodC5faW5pdGlhbEF1dG9TaXplPXt3aWR0aDpuLGhlaWdodDphfSksdi5zYW5pdGl6ZU1hcmdpbnMocil9LHYuc3VwcGx5TGF5b3V0TW9kdWxlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksbyxzLGM9YS5jb21wb25lbnRzUmVnaXN0cnksdT1lLl9iYXNlUGxvdE1vZHVsZXMsZj1hLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuO2ZvcihpIGluIGMpKHM9Y1tpXSkuaW5jbHVkZUJhc2VQbG90JiZzLmluY2x1ZGVCYXNlUGxvdCh0LGUpO2Zvcih2YXIgaCBpbiB1Lmxlbmd0aHx8dS5wdXNoKGYpLGUuX2hhcygiY2FydGVzaWFuIikmJihhLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsImNvbnRlbnREZWZhdWx0cyIpKHQsZSksZi5maW5hbGl6ZVN1YnBsb3RzKHQsZSkpLGUuX3N1YnBsb3RzKWUuX3N1YnBsb3RzW2hdLnNvcnQobC5zdWJwbG90U29ydCk7Zm9yKG89MDtvPHUubGVuZ3RoO28rKykocz11W29dKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIHA9ZS5fbW9kdWxlcztmb3Iobz0wO288cC5sZW5ndGg7bysrKShzPXBbb10pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgZD1lLl90cmFuc2Zvcm1Nb2R1bGVzO2ZvcihvPTA7bzxkLmxlbmd0aDtvKyspKHM9ZFtvXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIsbik7Zm9yKGkgaW4gYykocz1jW2ldKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscil9LHYucHVyZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dHx8e307dm9pZCAwIT09ZS5fZ2xjb250YWluZXImJihlLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5yZW1vdmUoKSxlLl9nbGNvbnRhaW5lci5yZW1vdmUoKSxlLl9nbGNhbnZhcz1udWxsKSx2b2lkIDAhPT1lLl9nZW9jb250YWluZXImJmUuX2dlb2NvbnRhaW5lci5yZW1vdmUoKSxlLl9tb2RlQmFyJiZlLl9tb2RlQmFyLmRlc3Ryb3koKSx0Ll90cmFuc2l0aW9uRGF0YSYmKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLmxlbmd0aD0wKSx0Ll90cmFuc2l0aW9uRGF0YS5fYW5pbWF0aW9uUmFmJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZikpLGwuY2xlYXJUaHJvdHRsZSgpLGwuY2xlYXJSZXNwb25zaXZlKHQpLGRlbGV0ZSB0LmRhdGEsZGVsZXRlIHQubGF5b3V0LGRlbGV0ZSB0Ll9mdWxsRGF0YSxkZWxldGUgdC5fZnVsbExheW91dCxkZWxldGUgdC5jYWxjZGF0YSxkZWxldGUgdC5mcmFtZXdvcmssZGVsZXRlIHQuZW1wdHksZGVsZXRlIHQuZmlkLGRlbGV0ZSB0LnVuZG9xdWV1ZSxkZWxldGUgdC51bmRvbnVtLGRlbGV0ZSB0LmF1dG9wbGF5LGRlbGV0ZSB0LmNoYW5nZWQsZGVsZXRlIHQuX3Byb21pc2VzLGRlbGV0ZSB0Ll9yZWRyYXdUaW1lcixkZWxldGUgdC5faG1sdW1jb3VudCxkZWxldGUgdC5faG1waXhjb3VudCxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgdC5fZHJhZ2dpbmcsZGVsZXRlIHQuX2RyYWdnZWQsZGVsZXRlIHQuX2hvdmVyZGF0YSxkZWxldGUgdC5fc25hcHNob3RJblByb2dyZXNzLGRlbGV0ZSB0Ll9lZGl0aW5nLGRlbGV0ZSB0Ll9yZXBsb3RQZW5kaW5nLGRlbGV0ZSB0Ll9tb3VzZURvd25UaW1lLGRlbGV0ZSB0Ll9sZWdlbmRNb3VzZURvd25UaW1lLHQucmVtb3ZlQWxsTGlzdGVuZXJzJiZ0LnJlbW92ZUFsbExpc3RlbmVycygpfSx2LnN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5fZnVsbExheW91dC5fdmlzaWJsZU1vZHVsZXMsbj1bXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdO2kuc3R5bGUmJmwucHVzaFVuaXF1ZShuLGkuc3R5bGUpfWZvcihlPTA7ZTxuLmxlbmd0aDtlKyspbltlXSh0KX0sdi5zYW5pdGl6ZU1hcmdpbnM9ZnVuY3Rpb24odCl7aWYodCYmdC5tYXJnaW4pe3ZhciBlLHI9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5tYXJnaW4sYT1yLShpLmwraS5yKSxvPW4tKGkudCtpLmIpO2E8MCYmKGU9KHItMSkvKGkubCtpLnIpLGkubD1NYXRoLmZsb29yKGUqaS5sKSxpLnI9TWF0aC5mbG9vcihlKmkucikpLG88MCYmKGU9KG4tMSkvKGkudCtpLmIpLGkudD1NYXRoLmZsb29yKGUqaS50KSxpLmI9TWF0aC5mbG9vcihlKmkuYikpfX0sdi5jbGVhckF1dG9NYXJnaW5JZHM9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkcz17fX0sdi5hbGxvd0F1dG9NYXJnaW49ZnVuY3Rpb24odCxlKXt0Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2luSWRzW2VdPTF9LHYuYXV0b01hcmdpbj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPW4uX3B1c2htYXJnaW4sYT1uLl9wdXNobWFyZ2luSWRzO2lmKCExIT09bi5tYXJnaW4uYXV0b2V4cGFuZCl7aWYocil7dmFyIG89ci5wYWQ7aWYodm9pZCAwPT09byl7dmFyIHM9bi5tYXJnaW47bz1NYXRoLm1pbigxMixzLmwscy5yLHMudCxzLmIpfXIubCtyLnI+LjUqbi53aWR0aCYmKHIubD1yLnI9MCksci5iK3IudD4uNSpuLmhlaWdodCYmKHIuYj1yLnQ9MCk7dmFyIGw9dm9pZCAwIT09ci54bD9yLnhsOnIueCxjPXZvaWQgMCE9PXIueHI/ci54cjpyLngsdT12b2lkIDAhPT1yLnl0P3IueXQ6ci55LGY9dm9pZCAwIT09ci55Yj9yLnliOnIueTtpW2VdPXtsOnt2YWw6bCxzaXplOnIubCtvfSxyOnt2YWw6YyxzaXplOnIucitvfSxiOnt2YWw6ZixzaXplOnIuYitvfSx0Ont2YWw6dSxzaXplOnIudCtvfX0sYVtlXT0xfWVsc2UgZGVsZXRlIGlbZV0sZGVsZXRlIGFbZV07bi5fcmVwbG90dGluZ3x8di5kb0F1dG9NYXJnaW4odCl9fSx2LmRvQXV0b01hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX3NpemV8fChlLl9zaXplPXt9KSxBKGUpO3ZhciByPWUuX3NpemUsbj1KU09OLnN0cmluZ2lmeShyKSxvPWUubWFyZ2luLHM9by5sLGw9by5yLGM9by50LHU9by5iLGY9ZS53aWR0aCxoPWUuaGVpZ2h0LHA9ZS5fcHVzaG1hcmdpbixkPWUuX3B1c2htYXJnaW5JZHM7aWYoITEhPT1lLm1hcmdpbi5hdXRvZXhwYW5kKXtmb3IodmFyIGcgaW4gcClkW2ddfHxkZWxldGUgcFtnXTtmb3IodmFyIHYgaW4gcC5iYXNlPXtsOnt2YWw6MCxzaXplOnN9LHI6e3ZhbDoxLHNpemU6bH0sdDp7dmFsOjEsc2l6ZTpjfSxiOnt2YWw6MCxzaXplOnV9fSxwKXt2YXIgbT1wW3ZdLmx8fHt9LHk9cFt2XS5ifHx7fSx4PW0udmFsLGI9bS5zaXplLF89eS52YWwsdz15LnNpemU7Zm9yKHZhciBrIGluIHApe2lmKGkoYikmJnBba10ucil7dmFyIFQ9cFtrXS5yLnZhbCxNPXBba10uci5zaXplO2lmKFQ+eCl7dmFyIFM9KGIqVCsoTS1mKSp4KS8oVC14KSxFPShNKigxLXgpKyhiLWYpKigxLVQpKS8oVC14KTtTPj0wJiZFPj0wJiZmLShTK0UpPjAmJlMrRT5zK2wmJihzPVMsbD1FKX19aWYoaSh3KSYmcFtrXS50KXt2YXIgQz1wW2tdLnQudmFsLEw9cFtrXS50LnNpemU7aWYoQz5fKXt2YXIgej0odypDKyhMLWgpKl8pLyhDLV8pLE89KEwqKDEtXykrKHctaCkqKDEtQykpLyhDLV8pO3o+PTAmJk8+PTAmJmgtKE8reik+MCYmeitPPnUrYyYmKHU9eixjPU8pfX19fX1pZihyLmw9TWF0aC5yb3VuZChzKSxyLnI9TWF0aC5yb3VuZChsKSxyLnQ9TWF0aC5yb3VuZChjKSxyLmI9TWF0aC5yb3VuZCh1KSxyLnA9TWF0aC5yb3VuZChvLnBhZCksci53PU1hdGgucm91bmQoZiktci5sLXIucixyLmg9TWF0aC5yb3VuZChoKS1yLnQtci5iLCFlLl9yZXBsb3R0aW5nJiYie30iIT09biYmbiE9PUpTT04uc3RyaW5naWZ5KGUuX3NpemUpKXJldHVybiJfcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCJpbiBlP2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQrKzplLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PTEsYS5jYWxsKCJwbG90Iix0KX0sdi5ncmFwaEpzb249ZnVuY3Rpb24odCxlLHIsbixpKXsoaSYmZSYmIXQuX2Z1bGxEYXRhfHxpJiYhZSYmIXQuX2Z1bGxMYXlvdXQpJiZ2LnN1cHBseURlZmF1bHRzKHQpO3ZhciBhPWk/dC5fZnVsbERhdGE6dC5kYXRhLG89aT90Ll9mdWxsTGF5b3V0OnQubGF5b3V0LHM9KHQuX3RyYW5zaXRpb25EYXRhfHx7fSkuX2ZyYW1lcztmdW5jdGlvbiBjKHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBudWxsO2lmKGwuaXNQbGFpbk9iamVjdCh0KSl7dmFyIGUsbixpPXt9O2ZvcihlIGluIHQpaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbZV0mJi0xPT09WyJfIiwiWyJdLmluZGV4T2YoZS5jaGFyQXQoMCkpKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1lLnN1YnN0cihlLmxlbmd0aC0zKSljb250aW51ZX1lbHNlIGlmKCJrZWVwc3RyZWFtIj09PXIpe2lmKCJzdHJpbmciPT10eXBlb2Yobj10W2UrInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MCYmIWwuaXNQbGFpbk9iamVjdCh0LnN0cmVhbSkpY29udGludWV9ZWxzZSBpZigia2VlcGFsbCIhPT1yJiYic3RyaW5nIj09dHlwZW9mKG49dFtlKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjApY29udGludWU7aVtlXT1jKHRbZV0pfXJldHVybiBpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGMpOmwuaXNUeXBlZEFycmF5KHQpP2wuc2ltcGxlTWFwKHQsbC5pZGVudGl0eSk6bC5pc0pTRGF0ZSh0KT9sLm1zMkRhdGVUaW1lTG9jYWwoK3QpOnR9dmFyIHU9e2RhdGE6KGF8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9Yyh0KTtyZXR1cm4gZSYmZGVsZXRlIHIuZml0LHJ9KX07cmV0dXJuIGV8fCh1LmxheW91dD1jKG8pKSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHU9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpLHMmJih1LmZyYW1lcz1jKHMpKSwib2JqZWN0Ij09PW4/dTpKU09OLnN0cmluZ2lmeSh1KX0sdi5tb2RpZnlGcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXN3aXRjaCgobj1lW3JdKS50eXBlKXtjYXNlInJlcGxhY2UiOmk9bi52YWx1ZTt2YXIgcz0oYVtuLmluZGV4XXx8e30pLm5hbWUsbD1pLm5hbWU7YVtuLmluZGV4XT1vW2xdPWksbCE9PXMmJihkZWxldGUgb1tzXSxvW2xdPWkpO2JyZWFrO2Nhc2UiaW5zZXJ0IjpvWyhpPW4udmFsdWUpLm5hbWVdPWksYS5zcGxpY2Uobi5pbmRleCwwLGkpO2JyZWFrO2Nhc2UiZGVsZXRlIjpkZWxldGUgb1soaT1hW24uaW5kZXhdKS5uYW1lXSxhLnNwbGljZShuLmluZGV4LDEpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdi5jb21wdXRlRnJhbWU9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJjb21wdXRlRnJhbWUgbXVzdCBiZSBnaXZlbiBhIHN0cmluZyBmcmFtZSBuYW1lIik7dmFyIHM9b1tlLnRvU3RyaW5nKCldO2lmKCFzKXJldHVybiExO2Zvcih2YXIgbD1bc10sYz1bcy5uYW1lXTtzLmJhc2VmcmFtZSYmKHM9b1tzLmJhc2VmcmFtZS50b1N0cmluZygpXSkmJi0xPT09Yy5pbmRleE9mKHMubmFtZSk7KWwucHVzaChzKSxjLnB1c2gocy5uYW1lKTtmb3IodmFyIHU9e307cz1sLnBvcCgpOylpZihzLmxheW91dCYmKHUubGF5b3V0PXYuZXh0ZW5kTGF5b3V0KHUubGF5b3V0LHMubGF5b3V0KSkscy5kYXRhKXtpZih1LmRhdGF8fCh1LmRhdGE9W10pLCEobj1zLnRyYWNlcykpZm9yKG49W10scj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbltyXT1yO2Zvcih1LnRyYWNlc3x8KHUudHJhY2VzPVtdKSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyludWxsIT0oaT1uW3JdKSYmKC0xPT09KGE9dS50cmFjZXMuaW5kZXhPZihpKSkmJihhPXUuZGF0YS5sZW5ndGgsdS50cmFjZXNbYV09aSksdS5kYXRhW2FdPXYuZXh0ZW5kVHJhY2UodS5kYXRhW2FdLHMuZGF0YVtyXSkpfXJldHVybiB1fSx2LnJlY29tcHV0ZUZyYW1lSGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSxyPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kmJmkubmFtZSYmKGVbaS5uYW1lXT1pKX19LHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsYyx1LGY9bC5leHRlbmREZWVwTm9BcnJheXMoe30sZXx8e30pLGg9bC5leHBhbmRPYmplY3RQYXRocyhmKSxwPXt9O2lmKHImJnIubGVuZ3RoKWZvcihhPTA7YTxyLmxlbmd0aDthKyspdm9pZCAwPT09KGk9KG49bC5uZXN0ZWRQcm9wZXJ0eShoLHJbYV0pKS5nZXQoKSk/bC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChudWxsKToobi5zZXQobnVsbCksbC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChpKSk7aWYodD1sLmV4dGVuZERlZXBOb0FycmF5cyh0fHx7fSxoKSxyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWlmKGM9bC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLmdldCgpKXtmb3IodT0ocz1sLm5lc3RlZFByb3BlcnR5KHQsclthXSkpLmdldCgpLEFycmF5LmlzQXJyYXkodSl8fCh1PVtdLHMuc2V0KHUpKSxvPTA7bzxjLmxlbmd0aDtvKyspe3ZhciBkPWNbb107dVtvXT1udWxsPT09ZD9udWxsOnYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModVtvXSxkKX1zLnNldCh1KX1yZXR1cm4gdH0sdi5kYXRhQXJyYXlDb250YWluZXJzPVsidHJhbnNmb3JtcyIsImRpbWVuc2lvbnMiXSx2LmxheW91dEFycmF5Q29udGFpbmVycz1hLmxheW91dEFycmF5Q29udGFpbmVycyx2LmV4dGVuZFRyYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLHYuZGF0YUFycmF5Q29udGFpbmVycyl9LHYuZXh0ZW5kTGF5b3V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLHYubGF5b3V0QXJyYXlDb250YWluZXJzKX0sdi50cmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz17cmVkcmF3OmkucmVkcmF3fSxzPVtdLGM9W107cmV0dXJuIG8ucHJlcGFyZUZuPWZ1bmN0aW9uKCl7Zm9yKHZhciBpPUFycmF5LmlzQXJyYXkoZSk/ZS5sZW5ndGg6MCxhPW4uc2xpY2UoMCxpKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciB1PWFbb10sZj10Ll9mdWxsRGF0YVt1XS5fbW9kdWxlO2YmJihmLmFuaW1hdGFibGUmJnMucHVzaCh1KSx0LmRhdGFbYVtvXV09di5leHRlbmRUcmFjZSh0LmRhdGFbYVtvXV0sZVtvXSkpfXZhciBoPWwuZXhwYW5kT2JqZWN0UGF0aHMobC5leHRlbmREZWVwTm9BcnJheXMoe30scikpLHA9L15beHldYXhpc1swLTldKiQvO2Zvcih2YXIgZCBpbiBoKXAudGVzdChkKSYmZGVsZXRlIGhbZF0ucmFuZ2U7di5leHRlbmRMYXlvdXQodC5sYXlvdXQsaCksZGVsZXRlIHQuY2FsY2RhdGEsdi5zdXBwbHlEZWZhdWx0cyh0KSx2LmRvQ2FsY2RhdGEodCk7dmFyIGc9bC5leHBhbmRPYmplY3RQYXRocyhyKTtpZihnKXt2YXIgbT10Ll9mdWxsTGF5b3V0Ll9wbG90cztmb3IodmFyIHkgaW4gbSl7dmFyIHgsYixfLHcsaz1tW3ldLFQ9ay54YXhpcyxBPWsueWF4aXMsTT1ULnJhbmdlLnNsaWNlKCksUz1BLnJhbmdlLnNsaWNlKCk7QXJyYXkuaXNBcnJheShnW1QuX25hbWUrIi5yYW5nZSJdKT94PWdbVC5fbmFtZSsiLnJhbmdlIl0uc2xpY2UoKTpBcnJheS5pc0FycmF5KChnW1QuX25hbWVdfHx7fSkucmFuZ2UpJiYoeD1nW1QuX25hbWVdLnJhbmdlLnNsaWNlKCkpLEFycmF5LmlzQXJyYXkoZ1tBLl9uYW1lKyIucmFuZ2UiXSk/Yj1nW0EuX25hbWUrIi5yYW5nZSJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgoZ1tBLl9uYW1lXXx8e30pLnJhbmdlKSYmKGI9Z1tBLl9uYW1lXS5yYW5nZS5zbGljZSgpKSxNJiZ4JiYoTVswXSE9PXhbMF18fE1bMV0hPT14WzFdKSYmKF89e3hyMDpNLHhyMTp4fSksUyYmYiYmKFNbMF0hPT1iWzBdfHxTWzFdIT09YlsxXSkmJih3PXt5cjA6Uyx5cjE6Yn0pLChffHx3KSYmYy5wdXNoKGwuZXh0ZW5kRmxhdCh7cGxvdGluZm86a30sXyx3KSl9fXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihlKXt2YXIgbixpLG89dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHU9Yy5sZW5ndGg7aWYocilmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV0udHJhbnNpdGlvbkF4ZXMmJm9baV0udHJhbnNpdGlvbkF4ZXModCxjLGEsZSk7Zm9yKHU/KChuPWwuZXh0ZW5kRmxhdCh7fSxhKSkuZHVyYXRpb249MCxzPW51bGwpOm49YSxpPTA7aTxvLmxlbmd0aDtpKyspb1tpXS5wbG90KHQscyxuLGUpfSxNKHQsYSxvKX0sdi50cmFuc2l0aW9uRnJvbVJlYWN0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1pLnRyYW5zaXRpb24sbz17fSxzPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe3ZhciB0PWkuX3Bsb3RzO2Zvcih2YXIgYSBpbiBvLnJlZHJhdz0hMSwic29tZSI9PT1lLmFuaW0mJihvLnJlZHJhdz0hMCksInNvbWUiPT09ci5hbmltJiYoby5yZWRyYXc9ITApLHQpe3ZhciBjLHUsZj10W2FdLGg9Zi54YXhpcyxwPWYueWF4aXMsZD1uW2guX25hbWVdLnJhbmdlLnNsaWNlKCksZz1uW3AuX25hbWVdLnJhbmdlLnNsaWNlKCksdj1oLnJhbmdlLnNsaWNlKCksbT1wLnJhbmdlLnNsaWNlKCk7aC5zZXRTY2FsZSgpLHAuc2V0U2NhbGUoKSxkWzBdPT09dlswXSYmZFsxXT09PXZbMV18fChjPXt4cjA6ZCx4cjE6dn0pLGdbMF09PT1tWzBdJiZnWzFdPT09bVsxXXx8KHU9e3lyMDpnLHlyMTptfSksKGN8fHUpJiZzLnB1c2gobC5leHRlbmRGbGF0KHtwbG90aW5mbzpmfSxjLHUpKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24ocil7Zm9yKHZhciBuLGksbyxjPXQuX2Z1bGxEYXRhLHU9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGY9W10saD0wO2g8Yy5sZW5ndGg7aCsrKWYucHVzaChoKTtmdW5jdGlvbiBwKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdVtlXS50cmFuc2l0aW9uQXhlcyYmdVtlXS50cmFuc2l0aW9uQXhlcyh0LHMsbixyKX1mdW5jdGlvbiBkKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdVtlXS5wbG90KHQsbyxpLHIpfXMubGVuZ3RoJiZlLmFuaW0/InRyYWNlcyBmaXJzdCI9PT1hLm9yZGVyaW5nPyhuPWwuZXh0ZW5kRmxhdCh7fSxhLHtkdXJhdGlvbjowfSksbz1mLGk9YSxkKCksc2V0VGltZW91dChwLGEuZHVyYXRpb24pKToobj1hLG89bnVsbCxpPWwuZXh0ZW5kRmxhdCh7fSxhLHtkdXJhdGlvbjowfSkscCgpLGQoKSk6cy5sZW5ndGg/KG49YSxwKCkpOmUuYW5pbSYmKG89ZixpPWEsZCgpKX0sTSh0LGEsbyl9LHYuZG9DYWxjZGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxzLGM9Zi5saXN0KHQpLGg9dC5fZnVsbERhdGEscD10Ll9mdWxsTGF5b3V0LGQ9bmV3IEFycmF5KGgubGVuZ3RoKSxnPSh0LmNhbGNkYXRhfHxbXSkuc2xpY2UoMCk7Zm9yKHQuY2FsY2RhdGE9ZCxwLl9udW1Cb3hlcz0wLHAuX251bVZpb2xpbnM9MCxwLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sdC5faG1waXhjb3VudD0wLHQuX2htbHVtY291bnQ9MCxwLl9waWVjb2xvcm1hcD17fSxwLl9zdW5idXJzdGNvbG9ybWFwPXt9LGk9MDtpPGgubGVuZ3RoO2krKylBcnJheS5pc0FycmF5KGUpJiYtMT09PWUuaW5kZXhPZihpKSYmKGRbaV09Z1tpXSk7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKykocj1oW2ldKS5fYXJyYXlBdHRycz1vLmZpbmRBcnJheUF0dHJpYnV0ZXMociksci5fZXh0cmVtZXM9e307dmFyIHY9cC5fc3VicGxvdHMucG9sYXJ8fFtdO2ZvcihpPTA7aTx2Lmxlbmd0aDtpKyspYy5wdXNoKHBbdltpXV0ucmFkaWFsYXhpcyxwW3ZbaV1dLmFuZ3VsYXJheGlzKTtTKGMsaCk7dmFyIHk9ITE7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylpZighMD09PShyPWhbaV0pLnZpc2libGUmJnIudHJhbnNmb3Jtcyl7aWYoKG49ci5fbW9kdWxlKSYmbi5jYWxjKXt2YXIgeD1uLmNhbGModCxyKTt4WzBdJiZ4WzBdLnQmJnhbMF0udC5fc2NlbmUmJmRlbGV0ZSB4WzBdLnQuX3NjZW5lLmRpcnR5fWZvcihzPTA7czxyLnRyYW5zZm9ybXMubGVuZ3RoO3MrKyl7dmFyIGI9ci50cmFuc2Zvcm1zW3NdOyhuPW1bYi50eXBlXSkmJm4uY2FsY1RyYW5zZm9ybSYmKHIuX2hhc0NhbGNUcmFuc2Zvcm09ITAseT0hMCxuLmNhbGNUcmFuc2Zvcm0odCxyLGIpKX19ZnVuY3Rpb24gXyhlLGkpe2lmKHI9aFtlXSwhIShuPXIuX21vZHVsZSkuaXNDb250YWluZXI9PT1pKXt2YXIgYT1bXTtpZighMD09PXIudmlzaWJsZSl7ZGVsZXRlIHIuX2luZGV4VG9Qb2ludHM7dmFyIG89ci50cmFuc2Zvcm1zfHxbXTtmb3Iocz1vLmxlbmd0aC0xO3M+PTA7cy0tKWlmKG9bc10uZW5hYmxlZCl7ci5faW5kZXhUb1BvaW50cz1vW3NdLl9pbmRleFRvUG9pbnRzO2JyZWFrfW4mJm4uY2FsYyYmKGE9bi5jYWxjKHQscikpfUFycmF5LmlzQXJyYXkoYSkmJmFbMF18fChhPVt7eDp1LHk6dX1dKSxhWzBdLnR8fChhWzBdLnQ9e30pLGFbMF0udHJhY2U9cixkW2VdPWF9fWZvcih5JiZTKGMsaCksaT0wO2k8aC5sZW5ndGg7aSsrKV8oaSwhMCk7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylfKGksITEpOyFmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Ll9mdWxsTGF5b3V0LGE9aS5fdmlzaWJsZU1vZHVsZXMsbz17fTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgcz1hW3JdLGM9cy5jcm9zc1RyYWNlQ2FsYztpZihjKXt2YXIgdT1zLmJhc2VQbG90TW9kdWxlLm5hbWU7b1t1XT9sLnB1c2hVbmlxdWUob1t1XSxjKTpvW3VdPVtjXX19Zm9yKG4gaW4gbyl7dmFyIGY9b1tuXSxoPWkuX3N1YnBsb3RzW25dO2lmKEFycmF5LmlzQXJyYXkoaCkpZm9yKGU9MDtlPGgubGVuZ3RoO2UrKyl7dmFyIHA9aFtlXSxkPSJjYXJ0ZXNpYW4iPT09bj9pLl9wbG90c1twXTppW3BdO2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspZltyXSh0LGQscCl9ZWxzZSBmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWZbcl0odCl9fSh0KSxhLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJjYWxjIikodCksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsImNhbGMiKSh0KX0sdi5yZWhvdmVyPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXImJnQuX2Z1bGxMYXlvdXQuX3JlaG92ZXIoKX0sdi5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1lLnRyYWNlSGFzaCxvPXt9O2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBzPXJbaV0sYz1zWzBdLnRyYWNlO2MudmlzaWJsZSYmKG9bYy50eXBlXT1vW2MudHlwZV18fFtdLG9bYy50eXBlXS5wdXNoKHMpKX1mb3IodmFyIHUgaW4gYSlpZighb1t1XSl7dmFyIGY9YVt1XVswXTtmWzBdLnRyYWNlLnZpc2libGU9ITEsb1t1XT1bZl19Zm9yKHZhciBoIGluIG8pe3ZhciBwPW9baF07cFswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QodCxlLGwuZmlsdGVyVmlzaWJsZShwKSxuKX1lLnRyYWNlSGFzaD1vfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vbGliIjo3MDAsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3MzcsIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NTEsIi4uL3JlZ2lzdHJ5Ijo4MjksIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc0MywiLi9hdHRyaWJ1dGVzIjo3NDUsIi4vY29tbWFuZCI6NzcyLCIuL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuL2ZyYW1lX2F0dHJpYnV0ZXMiOjc3NSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODAxLGQzOjE1NCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDgxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHI6InN1YnBsb3QiLG5hbWU6InBvbGFyIixheGlzTmFtZXM6WyJhbmd1bGFyYXhpcyIsInJhZGlhbGF4aXMiXSxheGlzTmFtZTJkYXRhQXJyYXk6e2FuZ3VsYXJheGlzOiJ0aGV0YSIscmFkaWFsYXhpczoiciJ9LGxheWVyTmFtZXM6WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImFuZ3VsYXItZ3JpZCIsInJhZGlhbC1ncmlkIiwiZnJvbnRwbG90IiwiYW5ndWxhci1saW5lIiwicmFkaWFsLWxpbmUiLCJhbmd1bGFyLWF4aXMiLCJyYWRpYWwtYXhpcyJdLHJhZGlhbERyYWdCb3hTaXplOjUwLGFuZ3VsYXJEcmFnQm94U2l6ZTozMCxjb3JuZXJMZW46MjUsY29ybmVySGFsZldpZHRoOjIsTUlORFJBRzo4LE1JTlpPT006MjAsT0ZGRURHRToyMH19LHt9XSw4MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcixhPW4uZmluZEluZGV4T2ZNaW4sbz1uLmlzQW5nbGVJbnNpZGVTZWN0b3Iscz1uLmFuZ2xlRGVsdGEsbD1uLmFuZ2xlRGlzdDtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpLGEsbz1uWzBdLHM9blsxXSxsPWYoTWF0aC5zaW4oZSktTWF0aC5zaW4odCkpLGM9ZihNYXRoLmNvcyhlKS1NYXRoLmNvcyh0KSksdT1NYXRoLnRhbihyKSxoPWYoMS91KSxwPWwvYyxkPXMtcCpvO3JldHVybiBoP2wmJmM/YT11KihpPWQvKHUtcCkpOmM/KGk9cypoLGE9cyk6KGk9byxhPW8qdSk6bCYmYz8oaT0wLGE9ZCk6Yz8oaT0wLGE9cyk6aT1hPU5hTixbaSxhXX1mdW5jdGlvbiB1KHQsZSxyLGkpe3JldHVybiBuLmlzRnVsbENpcmNsZShbZSxyXSk/ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4rMSk7Zm9yKHI9MDtyPG47cisrKXt2YXIgYT1lW3JdO2lbcl09W3QqTWF0aC5jb3MoYSksdCpNYXRoLnNpbihhKV19cmV0dXJuIGlbcl09aVswXS5zbGljZSgpLGl9KHQsaSk6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIHMsdSxmPWkubGVuZ3RoLGg9W107ZnVuY3Rpb24gcChlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gYyh0LGUscixwKHQpKX1mdW5jdGlvbiBnKHQpe3JldHVybiBuLm1vZCh0LGYpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG8odCxbZSxyXSl9dmFyIG09YShpLGZ1bmN0aW9uKHQpe3JldHVybiB2KHQpP2wodCxlKToxLzB9KSx5PWQoaVttXSxpW2cobS0xKV0sZSk7Zm9yKGgucHVzaCh5KSxzPW0sdT0wO3U8ZjtzKyssdSsrKXt2YXIgeD1pW2cocyldO2lmKCF2KHgpKWJyZWFrO2gucHVzaChwKHgpKX12YXIgYj1hKGksZnVuY3Rpb24odCl7cmV0dXJuIHYodCk/bCh0LHIpOjEvMH0pLF89ZChpW2JdLGlbZyhiKzEpXSxyKTtyZXR1cm4gaC5wdXNoKF8pLGgucHVzaChbMCwwXSksaC5wdXNoKGhbMF0uc2xpY2UoKSksaH0odCxlLHIsaSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gTWF0aC5hYnModCk+MWUtMTA/dDowfWZ1bmN0aW9uIGgodCxlLHIpe2U9ZXx8MCxyPXJ8fDA7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9MDthPG47YSsrKXt2YXIgbz10W2FdO2lbYV09W2Urb1swXSxyLW9bMV1dfXJldHVybiBpfWUuZXhwb3J0cz17aXNQdEluc2lkZVBvbHlnb246ZnVuY3Rpb24odCxlLHIsbixhKXtpZighbyhlLG4pKXJldHVybiExO3ZhciBzLGw7clswXTxyWzFdPyhzPXJbMF0sbD1yWzFdKToocz1yWzFdLGw9clswXSk7dmFyIGM9aSh1KHMsblswXSxuWzFdLGEpKSxmPWkodShsLG5bMF0sblsxXSxhKSksaD1bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXTtyZXR1cm4gZi5jb250YWlucyhoKSYmIWMuY29udGFpbnMoaCl9LGZpbmRQb2x5Z29uT2Zmc2V0OmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0xLzAsYT0xLzAsbz11KHQsZSxyLG4pLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtpPU1hdGgubWluKGksbFswXSksYT1NYXRoLm1pbihhLC1sWzFdKX1yZXR1cm5baSxhXX0sZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlczpmdW5jdGlvbih0LGUpe3ZhciByPWEoZSxmdW5jdGlvbihlKXt2YXIgcj1zKGUsdCk7cmV0dXJuIHI+MD9yOjEvMH0pLGk9bi5tb2QocisxLGUubGVuZ3RoKTtyZXR1cm5bZVtyXSxlW2ldXX0sZmluZEludGVyc2VjdGlvblhZOmMsZmluZFhZYXRMZW5ndGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9LWUqcixhPWUqZSsxLG89MiooZSppLXIpLHM9aSppK3Iqci10KnQsbD1NYXRoLnNxcnQobypvLTQqYSpzKSxjPSgtbytsKS8oMiphKSx1PSgtby1sKS8oMiphKTtyZXR1cm5bW2MsZSpjK2krbl0sW3UsZSp1K2krbl1dfSxjbGFtcFRpbnk6ZixwYXRoUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIk0iK2godSh0LGUscixuKSxpLGEpLmpvaW4oIkwiKX0scGF0aFBvbHlnb25Bbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw7dDxlPyhzPXQsbD1lKToocz1lLGw9dCk7dmFyIGM9aCh1KHMscixuLGkpLGEsbyk7cmV0dXJuIk0iK2godShsLHIsbixpKSxhLG8pLnJldmVyc2UoKS5qb2luKCJMIikrIk0iK2Muam9pbigiTCIpfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9wb2x5Z29uIjo3MTJ9XSw4MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsaT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsYT10KCIuL3BvbGFyIiksbz10KCIuL2NvbnN0YW50cyIpLHM9by5hdHRyLGw9by5uYW1lLGM9aShsKSx1PXt9O3Vbc109e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpsLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOnMsbmFtZTpsLGlkUm9vdDpsLGlkUmVnZXg6YyxhdHRyUmVnZXg6YyxhdHRyaWJ1dGVzOnUsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzW2xdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPW4ocixsLHMpLHU9ZVtzXS5fc3VicGxvdDt1fHwodT1hKHQscyksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tsXXx8W10sYT1uLl9oYXMmJm4uX2hhcygiZ2wiKSxvPWUuX2hhcyYmZS5faGFzKCJnbCIpLHM9YSYmIW8sYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdLGY9blt1XS5fc3VicGxvdDtpZighZVt1XSYmZilmb3IodmFyIGggaW4gZi5mcmFtZXdvcmsucmVtb3ZlKCksZi5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl0ucmVtb3ZlKCksZi5jbGlwUGF0aHMpZi5jbGlwUGF0aHNbaF0ucmVtb3ZlKCk7cyYmZi5fc2NlbmUmJihmLl9zY2VuZS5kZXN0cm95KCksZi5fc2NlbmU9bnVsbCl9fSx0b1NWRzp0KCIuLi9jYXJ0ZXNpYW4iKS50b1NWR319LHsiLi4vLi4vbGliIjo3MDAsIi4uL2NhcnRlc2lhbiI6NzU5LCIuLi9nZXRfZGF0YSI6Nzg0LCIuL2NvbnN0YW50cyI6ODExLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MTQsIi4vbGF5b3V0X2RlZmF1bHRzIjo4MTUsIi4vcG9sYXIiOjgyMn1dLDgxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1zKHtjb2xvcjppLmNvbG9yLHNob3dsaW5lOm8oe30saS5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjppLmxpbmVjb2xvcixsaW5ld2lkdGg6aS5saW5ld2lkdGgsc2hvd2dyaWQ6byh7fSxpLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOmkuZ3JpZGNvbG9yLGdyaWR3aWR0aDppLmdyaWR3aWR0aH0sInBsb3QiLCJmcm9tLXJvb3QiKSxjPXMoe3RpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyx0aWNrbGVuOmkudGlja2xlbix0aWNrd2lkdGg6aS50aWNrd2lkdGgsdGlja2NvbG9yOmkudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmkuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6aS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDppLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3dleHBvbmVudDppLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDppLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmkuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6aS50aWNrZm9udCx0aWNrYW5nbGU6aS50aWNrYW5nbGUsdGlja2Zvcm1hdDppLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmkudGlja2Zvcm1hdHN0b3BzLGxheWVyOmkubGF5ZXJ9LCJwbG90IiwiZnJvbS1yb290IiksdT17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6byh7fSxpLnR5cGUse3ZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXX0pLGF1dG9yYW5nZTpvKHt9LGkuYXV0b3JhbmdlLHtlZGl0VHlwZToicGxvdCJ9KSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvemVybyIsIm5vbm5lZ2F0aXZlIiwibm9ybWFsIl0sZGZsdDoidG96ZXJvIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOm8oe30saS5yYW5nZSx7aXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToicGxvdCJ9KSxjYXRlZ29yeW9yZGVyOmkuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmkuY2F0ZWdvcnlhcnJheSxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNsb2Nrd2lzZSIsZWRpdFR5cGU6InBsb3QifSx0aXRsZTpzKGkudGl0bGUsInBsb3QiLCJmcm9tLXJvb3QiKSxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX07dS50aXRsZS50ZXh0LmRmbHQ9IiIsbyh1LGwsYyk7dmFyIGY9e3Zpc2libGU6byh7fSxpLnZpc2libGUse2RmbHQ6ITB9KSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyIsX25vVGVtcGxhdGluZzohMH0sY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGhldGF1bml0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYW5zIiwiZGVncmVlcyJdLGRmbHQ6ImRlZ3JlZXMiLGVkaXRUeXBlOiJjYWxjIn0scGVyaW9kOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb3VudGVyY2xvY2t3aXNlIiwiY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifTtvKGYsbCxjKSxlLmV4cG9ydHM9e2RvbWFpbjphKHtuYW1lOiJwb2xhciIsZWRpdFR5cGU6InBsb3QifSksc2VjdG9yOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9XSxkZmx0OlswLDM2MF0sZWRpdFR5cGU6InBsb3QifSxob2xlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCIsZGZsdDpuLmJhY2tncm91bmR9LHJhZGlhbGF4aXM6dSxhbmd1bGFyYXhpczpmLGdyaWRzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY3VsYXIiLCJsaW5lYXIiXSxkZmx0OiJjaXJjdWxhciIsZWRpdFR5cGU6InBsb3QifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU3NiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NjAsIi4uL2RvbWFpbiI6NzczfV0sODE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksYz10KCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGY9dCgiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksaD10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIikscD10KCIuLi9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpLGQ9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGc9dCgiLi9zZXRfY29udmVydCIpLHY9dCgiLi9jb25zdGFudHMiKSxtPXYuYXhpc05hbWVzO2Z1bmN0aW9uIHkodCxlLHIsbyl7dmFyIHA9cigiYmdjb2xvciIpO28uYmdDb2xvcj1pLmNvbWJpbmUocCxvLnBhcGVyX2JnY29sb3IpO3ZhciB5PXIoInNlY3RvciIpO3IoImhvbGUiKTt2YXIgYixfPXMoby5mdWxsRGF0YSx2Lm5hbWUsby5pZCksdz1vLmxheW91dE91dDtmdW5jdGlvbiBrKHQsZSl7cmV0dXJuIHIoYisiLiIrdCxlKX1mb3IodmFyIFQ9MDtUPG0ubGVuZ3RoO1QrKyl7Yj1tW1RdLG4uaXNQbGFpbk9iamVjdCh0W2JdKXx8KHRbYl09e30pO3ZhciBBPXRbYl0sTT1hLm5ld0NvbnRhaW5lcihlLGIpO00uX2lkPU0uX25hbWU9YixNLl9hdHRyPW8uaWQrIi4iK2IsTS5fdHJhY2VJbmRpY2VzPV8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9leHBhbmRlZEluZGV4fSk7dmFyIFM9di5heGlzTmFtZTJkYXRhQXJyYXlbYl0sRT14KEEsTSxrLF8sUyk7ZihBLE0sayx7YXhEYXRhOl8sZGF0YUF0dHI6U30pO3ZhciBDLEwsej1rKCJ2aXNpYmxlIik7c3dpdGNoKGcoTSxlLHcpLGsoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbikseiYmKEw9KEM9aygiY29sb3IiKSk9PT1BLmNvbG9yP0M6by5mb250LmNvbG9yKSxNLl9tPTEsYil7Y2FzZSJyYWRpYWxheGlzIjp2YXIgTz1rKCJhdXRvcmFuZ2UiLCFNLmlzVmFsaWRSYW5nZShBLnJhbmdlKSk7QS5hdXRvcmFuZ2U9TywhT3x8ImxpbmVhciIhPT1FJiYiLSIhPT1FfHxrKCJyYW5nZW1vZGUiKSwicmV2ZXJzZWQiPT09TyYmKE0uX209LTEpLGsoInJhbmdlIiksTS5jbGVhblJhbmdlKCJyYW5nZSIse2RmbHRSYW5nZTpbMCwxXX0pLHomJihrKCJzaWRlIiksaygiYW5nbGUiLHlbMF0pLGsoInRpdGxlLnRleHQiKSxuLmNvZXJjZUZvbnQoaywidGl0bGUuZm9udCIse2ZhbWlseTpvLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqby5mb250LnNpemUpLGNvbG9yOkx9KSk7YnJlYWs7Y2FzZSJhbmd1bGFyYXhpcyI6aWYoImRhdGUiPT09RSl7bi5sb2coIlBvbGFyIHBsb3RzIGRvIG5vdCBzdXBwb3J0IGRhdGUgYW5ndWxhciBheGVzIHlldC4iKTtmb3IodmFyIEk9MDtJPF8ubGVuZ3RoO0krKylfW0ldLnZpc2libGU9ITE7RT1BLnR5cGU9TS50eXBlPSJsaW5lYXIifWsoImxpbmVhciI9PT1FPyJ0aGV0YXVuaXQiOiJwZXJpb2QiKTt2YXIgRD1rKCJkaXJlY3Rpb24iKTtrKCJyb3RhdGlvbiIse2NvdW50ZXJjbG9ja3dpc2U6MCxjbG9ja3dpc2U6OTB9W0RdKX1pZih6KWwoQSxNLGssTS50eXBlKSx1KEEsTSxrLE0udHlwZSx7dGlja1N1ZmZpeERmbHQ6ImRlZ3JlZXMiPT09TS50aGV0YXVuaXQ/Ilx4YjAiOnZvaWQgMH0pLGMoQSxNLGsse291dGVyVGlja3M6ITB9KSxrKCJzaG93dGlja2xhYmVscyIpJiYobi5jb2VyY2VGb250KGssInRpY2tmb250Iix7ZmFtaWx5Om8uZm9udC5mYW1pbHksc2l6ZTpvLmZvbnQuc2l6ZSxjb2xvcjpMfSksaygidGlja2FuZ2xlIiksaygidGlja2Zvcm1hdCIpKSxoKEEsTSxrLHtkZmx0Q29sb3I6QyxiZ0NvbG9yOm8uYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6ZFtiXX0pLGsoImxheWVyIik7ImNhdGVnb3J5IiE9PUUmJmsoImhvdmVyZm9ybWF0IiksTS5faW5wdXQ9QX0iY2F0ZWdvcnkiPT09ZS5hbmd1bGFyYXhpcy50eXBlJiZyKCJncmlkc2hhcGUiKX1mdW5jdGlvbiB4KHQsZSxyLG4saSl7aWYoIi0iPT09cigidHlwZSIpKXtmb3IodmFyIGEsbz0wO288bi5sZW5ndGg7bysrKWlmKG5bb10udmlzaWJsZSl7YT1uW29dO2JyZWFrfWEmJmFbaV0mJihlLnR5cGU9cChhW2ldLCJncmVnb3JpYW4iKSksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjp0LnR5cGU9ZS50eXBlfXJldHVybiBlLnR5cGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOnYubmFtZSxhdHRyaWJ1dGVzOmQsaGFuZGxlRGVmYXVsdHM6eSxmb250OmUuZm9udCxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixmdWxsRGF0YTpyLGxheW91dE91dDplfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiOjc0OSwiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo3NTIsIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiOjc2MiwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc2NywiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6NzY4LCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6NzY5LCIuLi9nZXRfZGF0YSI6Nzg0LCIuLi9zdWJwbG90X2RlZmF1bHRzIjo4MjQsIi4vY29uc3RhbnRzIjo4MTEsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxNCwiLi9zZXRfY29udmVydCI6ODIzfV0sODE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPW4ubWFya2VyLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7WyJBcmVhIHRyYWNlcyBhcmUgZGVwcmVjYXRlZCEiLCJQbGVhc2Ugc3dpdGNoIHRvIHRoZSAqYmFycG9sYXIqIHRyYWNlIHR5cGUuIl0uam9pbigiICIpO2UuZXhwb3J0cz17cjphKHt9LG4ucix7fSksdDphKHt9LG4udCx7fSksbWFya2VyOntjb2xvcjphKHt9LGkuY29sb3Ise30pLHNpemU6YSh7fSxpLnNpemUse30pLHN5bWJvbDphKHt9LGkuc3ltYm9sLHt9KSxvcGFjaXR5OmEoe30saS5vcGFjaXR5LHt9KSxlZGl0VHlwZToiY2FsYyJ9fX0seyIuLi8uLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTF9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPVsiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCEiLCJQbGVhc2Ugc3dpdGNoIHRvICpwb2xhciogc3VicGxvdHMuIl0uam9pbigiICIpLHM9aSh7fSxuLmRvbWFpbix7fSk7ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBpKHt9LGUse3Nob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4ifSx0aWNrb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdfSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowfSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIn0sZW5kcGFkZGluZzp7dmFsVHlwZToibnVtYmVyIixkZXNjcmlwdGlvbjpvfSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn19KX1lLmV4cG9ydHM9YSh7cmFkaWFsYXhpczpsKDAse3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LGRvbWFpbjpzLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJudW1iZXIifX0pLGFuZ3VsYXJheGlzOmwoMCx7cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LHt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MzYwfV19LGRvbWFpbjpzfSksbGF5b3V0OntkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNsb2Nrd2lzZSIsImNvdW50ZXJjbG9ja3dpc2UiXX0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImFuZ2xlIn19fSwicGxvdCIsIm5lc3RlZCIpfSx7Ii4uLy4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MH1dLDgxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsoZS5leHBvcnRzPXQoIi4vbWljcm9wb2xhciIpKS5tYW5hZ2VyPXQoIi4vbWljcm9wb2xhcl9tYW5hZ2VyIil9LHsiLi9taWNyb3BvbGFyIjo4MTksIi4vbWljcm9wb2xhcl9tYW5hZ2VyIjo4MjB9XSw4MTk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vLi4vbGliIikuZXh0ZW5kRGVlcEFsbCxhPXQoIi4uLy4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5NSURfU0hJRlQsbz1lLmV4cG9ydHM9e3ZlcnNpb246IjAuMi4yIn07by5BeGlzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLHMsbD17ZGF0YTpbXSxsYXlvdXQ6e319LGM9e30sdT17fSxmPW4uZGlzcGF0Y2goImhvdmVyIiksaD17fTtyZXR1cm4gaC5yZW5kZXI9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKGMpe2U9Y3x8ZTt2YXIgZj1sLmRhdGEsaD1sLmxheW91dDsoInN0cmluZyI9PXR5cGVvZiBlfHxlLm5vZGVOYW1lKSYmKGU9bi5zZWxlY3QoZSkpLGUuZGF0dW0oZikuZWFjaChmdW5jdGlvbihlLGwpe3ZhciBjPWUuc2xpY2UoKTt1PXtkYXRhOm8udXRpbC5jbG9uZUpzb24oYyksbGF5b3V0Om8udXRpbC5jbG9uZUpzb24oaCl9O3ZhciBmPTA7Yy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5jb2xvcnx8KHQuY29sb3I9aC5kZWZhdWx0Q29sb3JSYW5nZVtmXSxmPShmKzEpJWguZGVmYXVsdENvbG9yUmFuZ2UubGVuZ3RoKSx0LnN0cm9rZUNvbG9yfHwodC5zdHJva2VDb2xvcj0iTGluZVBsb3QiPT09dC5nZW9tZXRyeT90LmNvbG9yOm4ucmdiKHQuY29sb3IpLmRhcmtlcigpLnRvU3RyaW5nKCkpLHUuZGF0YVtlXS5jb2xvcj10LmNvbG9yLHUuZGF0YVtlXS5zdHJva2VDb2xvcj10LnN0cm9rZUNvbG9yLHUuZGF0YVtlXS5zdHJva2VEYXNoPXQuc3Ryb2tlRGFzaCx1LmRhdGFbZV0uc3Ryb2tlU2l6ZT10LnN0cm9rZVNpemV9KTt2YXIgcD1jLmZpbHRlcihmdW5jdGlvbih0LGUpe3ZhciByPXQudmlzaWJsZTtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHJ8fCEwPT09cn0pLGQ9ITEsZz1wLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBkPWR8fCJ1bmRlZmluZWQiIT10eXBlb2YgdC5ncm91cElkLHR9KTtpZihkKXt2YXIgdj1uLm5lc3QoKS5rZXkoZnVuY3Rpb24odCxlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHQuZ3JvdXBJZD90Lmdyb3VwSWQ6InVuc3RhY2tlZCJ9KS5lbnRyaWVzKGcpLG09W10seT12Lm1hcChmdW5jdGlvbih0LGUpe2lmKCJ1bnN0YWNrZWQiPT09dC5rZXkpcmV0dXJuIHQudmFsdWVzO3ZhciByPXQudmFsdWVzWzBdLnIubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDB9KTtyZXR1cm4gdC52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbih0LGUsbil7dC55U3RhY2s9W3JdLG0ucHVzaChyKSxyPW8udXRpbC5zdW1BcnJheXModC5yLHIpfSksdC52YWx1ZXN9KTtwPW4ubWVyZ2UoeSl9cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC50PUFycmF5LmlzQXJyYXkodC50WzBdKT90LnQ6W3QudF0sdC5yPUFycmF5LmlzQXJyYXkodC5yWzBdKT90LnI6W3Qucl19KTt2YXIgeD1NYXRoLm1pbihoLndpZHRoLWgubWFyZ2luLmxlZnQtaC5tYXJnaW4ucmlnaHQsaC5oZWlnaHQtaC5tYXJnaW4udG9wLWgubWFyZ2luLmJvdHRvbSkvMjt4PU1hdGgubWF4KDEwLHgpO3ZhciBiLF89W2gubWFyZ2luLmxlZnQreCxoLm1hcmdpbi50b3AreF07Yj1kP1swLG4ubWF4KG8udXRpbC5zdW1BcnJheXMoby51dGlsLmFycmF5TGFzdChwKS5yWzBdLG8udXRpbC5hcnJheUxhc3QobSkpKV06bi5leHRlbnQoby51dGlsLmZsYXR0ZW5BcnJheShwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnJ9KSkpLGgucmFkaWFsQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmKGJbMF09MCkscj1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihoLnJhZGlhbEF4aXMuZG9tYWluIT1vLkRBVEFFWFRFTlQmJmgucmFkaWFsQXhpcy5kb21haW4/aC5yYWRpYWxBeGlzLmRvbWFpbjpiKS5yYW5nZShbMCx4XSksdS5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49ci5kb21haW4oKTt2YXIgdyxrPW8udXRpbC5mbGF0dGVuQXJyYXkocC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50fSkpLFQ9InN0cmluZyI9PXR5cGVvZiBrWzBdO1QmJihrPW8udXRpbC5kZWR1cGxpY2F0ZShrKSx3PWsuc2xpY2UoKSxrPW4ucmFuZ2Uoay5sZW5ndGgpLHA9cC5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj10O3JldHVybiB0LnQ9W2tdLGQmJihyLnlTdGFjaz10LnlTdGFjaykscn0pKTt2YXIgQT1wLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiJMaW5lUGxvdCI9PT10Lmdlb21ldHJ5fHwiRG90UGxvdCI9PT10Lmdlb21ldHJ5fSkubGVuZ3RoPT09cC5sZW5ndGgsTT1udWxsPT09aC5uZWVkc0VuZFNwYWNpbmc/VHx8IUE6aC5uZWVkc0VuZFNwYWNpbmcsUz1oLmFuZ3VsYXJBeGlzLmRvbWFpbiYmaC5hbmd1bGFyQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmIVQmJmguYW5ndWxhckF4aXMuZG9tYWluWzBdPj0wP2guYW5ndWxhckF4aXMuZG9tYWluOm4uZXh0ZW50KGspLEU9TWF0aC5hYnMoa1sxXS1rWzBdKTtBJiYhVCYmKEU9MCk7dmFyIEM9Uy5zbGljZSgpO00mJlQmJihDWzFdKz1FKTt2YXIgTD1oLmFuZ3VsYXJBeGlzLnRpY2tzQ291bnR8fDQ7TD44JiYoTD1MLyhMLzgpK0wlOCksaC5hbmd1bGFyQXhpcy50aWNrc1N0ZXAmJihMPShDWzFdLUNbMF0pL0wpO3ZhciB6PWguYW5ndWxhckF4aXMudGlja3NTdGVwfHwoQ1sxXS1DWzBdKS8oTCooaC5taW5vclRpY2tzKzEpKTt3JiYoej1NYXRoLm1heChNYXRoLnJvdW5kKHopLDEpKSxDWzJdfHwoQ1syXT16KTt2YXIgTz1uLnJhbmdlLmFwcGx5KHRoaXMsQyk7aWYoTz1PLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KHQudG9QcmVjaXNpb24oMTIpKX0pLHM9bi5zY2FsZS5saW5lYXIoKS5kb21haW4oQy5zbGljZSgwLDIpKS5yYW5nZSgiY2xvY2t3aXNlIj09PWguZGlyZWN0aW9uP1swLDM2MF06WzM2MCwwXSksdS5sYXlvdXQuYW5ndWxhckF4aXMuZG9tYWluPXMuZG9tYWluKCksdS5sYXlvdXQuYW5ndWxhckF4aXMuZW5kUGFkZGluZz1NP0U6MCwidW5kZWZpbmVkIj09dHlwZW9mKHQ9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJzdmcuY2hhcnQtcm9vdCIpKXx8dC5lbXB0eSgpKXt2YXIgST0obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKCI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgY2xhc3M9J2NoYXJ0LXJvb3QnPicgKyAnPGcgY2xhc3M9J291dGVyLWdyb3VwJz4nICsgJzxnIGNsYXNzPSdjaGFydC1ncm91cCc+JyArICc8Y2lyY2xlIGNsYXNzPSdiYWNrZ3JvdW5kLWNpcmNsZSc+PC9jaXJjbGU+JyArICc8ZyBjbGFzcz0nZ2VvbWV0cnktZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdyYWRpYWwgYXhpcy1ncm91cCc+JyArICc8Y2lyY2xlIGNsYXNzPSdvdXRzaWRlLWNpcmNsZSc+PC9jaXJjbGU+JyArICc8L2c+JyArICc8ZyBjbGFzcz0nYW5ndWxhciBheGlzLWdyb3VwJz48L2c+JyArICc8ZyBjbGFzcz0nZ3VpZGVzLWdyb3VwJz48bGluZT48L2xpbmU+PGNpcmNsZSByPScwJz48L2NpcmNsZT48L2c+JyArICc8L2c+JyArICc8ZyBjbGFzcz0nbGVnZW5kLWdyb3VwJz48L2c+JyArICc8ZyBjbGFzcz0ndG9vbHRpcHMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0aXRsZS1ncm91cCc+PHRleHQ+PC90ZXh0PjwvZz4nICsgJzwvZz4nICsgJzwvc3ZnPiIsImFwcGxpY2F0aW9uL3htbCIpLEQ9dGhpcy5hcHBlbmRDaGlsZCh0aGlzLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShJLmRvY3VtZW50RWxlbWVudCwhMCkpO3Q9bi5zZWxlY3QoRCl9dC5zZWxlY3QoIi5ndWlkZXMtZ3JvdXAiKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KSx0LnNlbGVjdCgiLmFuZ3VsYXIuYXhpcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pLHQuc2VsZWN0KCIucmFkaWFsLmF4aXMtZ3JvdXAiKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTt2YXIgUCxSPXQuc2VsZWN0KCIuY2hhcnQtZ3JvdXAiKSxGPXtmaWxsOiJub25lIixzdHJva2U6aC50aWNrQ29sb3J9LEI9eyJmb250LXNpemUiOmguZm9udC5zaXplLCJmb250LWZhbWlseSI6aC5mb250LmZhbWlseSxmaWxsOmguZm9udC5jb2xvciwidGV4dC1zaGFkb3ciOlsiLTFweCAwcHgiLCIxcHggLTFweCIsIi0xcHggMXB4IiwiMXB4IDFweCJdLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiIgIit0KyIgMCAiK2guZm9udC5vdXRsaW5lQ29sb3J9KS5qb2luKCIsIil9O2lmKGguc2hvd0xlZ2VuZCl7UD10LnNlbGVjdCgiLmxlZ2VuZC1ncm91cCIpLmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW3gsaC5tYXJnaW4udG9wXSsiKSJ9KS5zdHlsZSh7ZGlzcGxheToiYmxvY2sifSk7dmFyIE49cC5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj1vLnV0aWwuY2xvbmVKc29uKHQpO3JldHVybiByLnN5bWJvbD0iRG90UGxvdCI9PT10Lmdlb21ldHJ5P3QuZG90VHlwZXx8ImNpcmNsZSI6IkxpbmVQbG90IiE9dC5nZW9tZXRyeT8ic3F1YXJlIjoibGluZSIsci52aXNpYmxlSW5MZWdlbmQ9InVuZGVmaW5lZCI9PXR5cGVvZiB0LnZpc2libGVJbkxlZ2VuZHx8dC52aXNpYmxlSW5MZWdlbmQsci5jb2xvcj0iTGluZVBsb3QiPT09dC5nZW9tZXRyeT90LnN0cm9rZUNvbG9yOnQuY29sb3Iscn0pO28uTGVnZW5kKCkuY29uZmlnKHtkYXRhOnAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmFtZXx8IkVsZW1lbnQiK2V9KSxsZWdlbmRDb25maWc6aSh7fSxvLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCkubGVnZW5kQ29uZmlnLHtjb250YWluZXI6UCxlbGVtZW50czpOLHJldmVyc2VPcmRlcjpoLmxlZ2VuZC5yZXZlcnNlT3JkZXJ9KX0pKCk7dmFyIGo9UC5ub2RlKCkuZ2V0QkJveCgpO3g9TWF0aC5taW4oaC53aWR0aC1qLndpZHRoLWgubWFyZ2luLmxlZnQtaC5tYXJnaW4ucmlnaHQsaC5oZWlnaHQtaC5tYXJnaW4udG9wLWgubWFyZ2luLmJvdHRvbSkvMix4PU1hdGgubWF4KDEwLHgpLF89W2gubWFyZ2luLmxlZnQreCxoLm1hcmdpbi50b3AreF0sci5yYW5nZShbMCx4XSksdS5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49ci5kb21haW4oKSxQLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1tfWzBdK3gsX1sxXS14XSsiKSIpfWVsc2UgUD10LnNlbGVjdCgiLmxlZ2VuZC1ncm91cCIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pO3QuYXR0cih7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHR9KS5zdHlsZSh7b3BhY2l0eTpoLm9wYWNpdHl9KSxSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK18rIikiKS5zdHlsZSh7Y3Vyc29yOiJjcm9zc2hhaXIifSk7dmFyIFY9WyhoLndpZHRoLShoLm1hcmdpbi5sZWZ0K2gubWFyZ2luLnJpZ2h0KzIqeCsoaj9qLndpZHRoOjApKSkvMiwoaC5oZWlnaHQtKGgubWFyZ2luLnRvcCtoLm1hcmdpbi5ib3R0b20rMip4KSkvMl07aWYoVlswXT1NYXRoLm1heCgwLFZbMF0pLFZbMV09TWF0aC5tYXgoMCxWWzFdKSx0LnNlbGVjdCgiLm91dGVyLWdyb3VwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiKSIpLGgudGl0bGUmJmgudGl0bGUudGV4dCl7dmFyIFU9dC5zZWxlY3QoImcudGl0bGUtZ3JvdXAgdGV4dCIpLnN0eWxlKEIpLnRleHQoaC50aXRsZS50ZXh0KSxxPVUubm9kZSgpLmdldEJCb3goKTtVLmF0dHIoe3g6X1swXS1xLndpZHRoLzIseTpfWzFdLXgtMjB9KX12YXIgSD10LnNlbGVjdCgiLnJhZGlhbC5heGlzLWdyb3VwIik7aWYoaC5yYWRpYWxBeGlzLmdyaWRMaW5lc1Zpc2libGUpe3ZhciBHPUguc2VsZWN0QWxsKCJjaXJjbGUuZ3JpZC1jaXJjbGUiKS5kYXRhKHIudGlja3MoNSkpO0cuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoe2NsYXNzOiJncmlkLWNpcmNsZSJ9KS5zdHlsZShGKSxHLmF0dHIoInIiLHIpLEcuZXhpdCgpLnJlbW92ZSgpfUguc2VsZWN0KCJjaXJjbGUub3V0c2lkZS1jaXJjbGUiKS5hdHRyKHtyOnh9KS5zdHlsZShGKTt2YXIgWT10LnNlbGVjdCgiY2lyY2xlLmJhY2tncm91bmQtY2lyY2xlIikuYXR0cih7cjp4fSkuc3R5bGUoe2ZpbGw6aC5iYWNrZ3JvdW5kQ29sb3Isc3Ryb2tlOmguc3Ryb2tlfSk7ZnVuY3Rpb24gVyh0LGUpe3JldHVybiBzKHQpJTM2MCtoLm9yaWVudGF0aW9ufWlmKGgucmFkaWFsQXhpcy52aXNpYmxlKXt2YXIgWD1uLnN2Zy5heGlzKCkuc2NhbGUocikudGlja3MoNSkudGlja1NpemUoNSk7SC5jYWxsKFgpLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIraC5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKyIpIn0pLEguc2VsZWN0QWxsKCIuZG9tYWluIikuc3R5bGUoRiksSC5zZWxlY3RBbGwoImc+dGV4dCIpLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50ZXh0Q29udGVudCtoLnJhZGlhbEF4aXMudGlja3NTdWZmaXh9KS5zdHlsZShCKS5zdHlsZSh7InRleHQtYW5jaG9yIjoic3RhcnQifSkuYXR0cih7eDowLHk6MCxkeDowLGR5OjAsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuImhvcml6b250YWwiPT09aC5yYWRpYWxBeGlzLnRpY2tPcmllbnRhdGlvbj8icm90YXRlKCIrLWgucmFkaWFsQXhpcy5vcmllbnRhdGlvbisiKSB0cmFuc2xhdGUoIitbMCxCWyJmb250LXNpemUiXV0rIikiOiJ0cmFuc2xhdGUoIitbMCxCWyJmb250LXNpemUiXV0rIikifX0pLEguc2VsZWN0QWxsKCJnPmxpbmUiKS5zdHlsZSh7c3Ryb2tlOiJibGFjayJ9KX12YXIgWj10LnNlbGVjdCgiLmFuZ3VsYXIuYXhpcy1ncm91cCIpLnNlbGVjdEFsbCgiZy5hbmd1bGFyLXRpY2siKS5kYXRhKE8pLCQ9Wi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFuZ3VsYXItdGljayIsITApO1ouYXR0cih7dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInJvdGF0ZSgiK1codCkrIikifX0pLnN0eWxlKHtkaXNwbGF5OmguYW5ndWxhckF4aXMudmlzaWJsZT8iYmxvY2siOiJub25lIn0pLFouZXhpdCgpLnJlbW92ZSgpLCQuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiZ3JpZC1saW5lIiwhMCkuY2xhc3NlZCgibWFqb3IiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGgubWlub3JUaWNrcysxKT09MH0pLmNsYXNzZWQoIm1pbm9yIixmdW5jdGlvbih0LGUpe3JldHVybiEoZSUoaC5taW5vclRpY2tzKzEpPT0wKX0pLnN0eWxlKEYpLCQuc2VsZWN0QWxsKCIubWlub3IiKS5zdHlsZSh7c3Ryb2tlOmgubWlub3JUaWNrQ29sb3J9KSxaLnNlbGVjdCgibGluZS5ncmlkLWxpbmUiKS5hdHRyKHt4MTpoLnRpY2tMZW5ndGg/eC1oLnRpY2tMZW5ndGg6MCx4Mjp4fSkuc3R5bGUoe2Rpc3BsYXk6aC5hbmd1bGFyQXhpcy5ncmlkTGluZXNWaXNpYmxlPyJibG9jayI6Im5vbmUifSksJC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJheGlzLXRleHQiLCEwKS5zdHlsZShCKTt2YXIgSj1aLnNlbGVjdCgidGV4dC5heGlzLXRleHQiKS5hdHRyKHt4OngraC5sYWJlbE9mZnNldCxkeTphKyJlbSIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9Vyh0KSxuPXgraC5sYWJlbE9mZnNldCxpPWguYW5ndWxhckF4aXMudGlja09yaWVudGF0aW9uO3JldHVybiJob3Jpem9udGFsIj09aT8icm90YXRlKCIrLXIrIiAiK24rIiAwKSI6InJhZGlhbCI9PWk/cjwyNzAmJnI+OTA/InJvdGF0ZSgxODAgIituKyIgMCkiOm51bGw6InJvdGF0ZSgiKyhyPD0xODAmJnI+MD8tOTA6OTApKyIgIituKyIgMCkifX0pLnN0eWxlKHsidGV4dC1hbmNob3IiOiJtaWRkbGUiLGRpc3BsYXk6aC5hbmd1bGFyQXhpcy5sYWJlbHNWaXNpYmxlPyJibG9jayI6Im5vbmUifSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBlJShoLm1pbm9yVGlja3MrMSkhPTA/IiI6dz93W3RdK2guYW5ndWxhckF4aXMudGlja3NTdWZmaXg6dCtoLmFuZ3VsYXJBeGlzLnRpY2tzU3VmZml4fSkuc3R5bGUoQik7aC5hbmd1bGFyQXhpcy5yZXdyaXRlVGlja3MmJkoudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBlJShoLm1pbm9yVGlja3MrMSkhPTA/IiI6aC5hbmd1bGFyQXhpcy5yZXdyaXRlVGlja3ModGhpcy50ZXh0Q29udGVudCxlKX0pO3ZhciBLPW4ubWF4KFIuc2VsZWN0QWxsKCIuYW5ndWxhci10aWNrIHRleHQiKVswXS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRDVE0oKS5lK3QuZ2V0QkJveCgpLndpZHRofSkpO1AuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbeCtLLGgubWFyZ2luLnRvcF0rIikifSk7dmFyIFE9dC5zZWxlY3QoImcuZ2VvbWV0cnktZ3JvdXAiKS5zZWxlY3RBbGwoImciKS5zaXplKCk+MCx0dD10LnNlbGVjdCgiZy5nZW9tZXRyeS1ncm91cCIpLnNlbGVjdEFsbCgiZy5nZW9tZXRyeSIpLmRhdGEocCk7aWYodHQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKHtjbGFzczpmdW5jdGlvbih0LGUpe3JldHVybiJnZW9tZXRyeSBnZW9tZXRyeSIrZX19KSx0dC5leGl0KCkucmVtb3ZlKCkscFswXXx8USl7dmFyIGV0PVtdO3AuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPXt9O24ucmFkaWFsU2NhbGU9cixuLmFuZ3VsYXJTY2FsZT1zLG4uY29udGFpbmVyPXR0LmZpbHRlcihmdW5jdGlvbih0LHIpe3JldHVybiByPT1lfSksbi5nZW9tZXRyeT10Lmdlb21ldHJ5LG4ub3JpZW50YXRpb249aC5vcmllbnRhdGlvbixuLmRpcmVjdGlvbj1oLmRpcmVjdGlvbixuLmluZGV4PWUsZXQucHVzaCh7ZGF0YTp0LGdlb21ldHJ5Q29uZmlnOm59KX0pO3ZhciBydD1uLm5lc3QoKS5rZXkoZnVuY3Rpb24odCxlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHQuZGF0YS5ncm91cElkfHwidW5zdGFja2VkIn0pLmVudHJpZXMoZXQpLG50PVtdO3J0LmZvckVhY2goZnVuY3Rpb24odCxlKXsidW5zdGFja2VkIj09PXQua2V5P250PW50LmNvbmNhdCh0LnZhbHVlcy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bdF19KSk6bnQucHVzaCh0LnZhbHVlcyl9KSxudC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI7cj1BcnJheS5pc0FycmF5KHQpP3RbMF0uZ2VvbWV0cnlDb25maWcuZ2VvbWV0cnk6dC5nZW9tZXRyeUNvbmZpZy5nZW9tZXRyeTt2YXIgbj10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBpKG9bcl0uZGVmYXVsdENvbmZpZygpLHQpfSk7b1tyXSgpLmNvbmZpZyhuKSgpfSl9dmFyIGl0LGF0LG90PXQuc2VsZWN0KCIuZ3VpZGVzLWdyb3VwIiksc3Q9dC5zZWxlY3QoIi50b29sdGlwcy1ncm91cCIpLGx0PW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6c3QsZm9udFNpemU6OH0pKCksY3Q9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpzdCxmb250U2l6ZTo4fSkoKSx1dD1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOnN0LGhhc1RpY2s6ITB9KSgpO2lmKCFUKXt2YXIgZnQ9b3Quc2VsZWN0KCJsaW5lIikuYXR0cih7eDE6MCx5MTowLHkyOjB9KS5zdHlsZSh7c3Ryb2tlOiJncmV5IiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pO1Iub24oIm1vdXNlbW92ZS5hbmd1bGFyLWd1aWRlIixmdW5jdGlvbih0LGUpe3ZhciByPW8udXRpbC5nZXRNb3VzZVBvcyhZKS5hbmdsZTtmdC5hdHRyKHt4MjoteCx0cmFuc2Zvcm06InJvdGF0ZSgiK3IrIikifSkuc3R5bGUoe29wYWNpdHk6LjV9KTt2YXIgbj0ocisxODArMzYwLWgub3JpZW50YXRpb24pJTM2MDtpdD1zLmludmVydChuKTt2YXIgaT1vLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKHgrMTIscisxODApO2x0LnRleHQoby51dGlsLnJvdW5kKGl0KSkubW92ZShbaVswXStfWzBdLGlbMV0rX1sxXV0pfSkub24oIm1vdXNlb3V0LmFuZ3VsYXItZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7b3Quc2VsZWN0KCJsaW5lIikuc3R5bGUoe29wYWNpdHk6MH0pfSl9dmFyIGh0PW90LnNlbGVjdCgiY2lyY2xlIikuc3R5bGUoe3N0cm9rZToiZ3JleSIsZmlsbDoibm9uZSJ9KTtSLm9uKCJtb3VzZW1vdmUucmFkaWFsLWd1aWRlIixmdW5jdGlvbih0LGUpe3ZhciBuPW8udXRpbC5nZXRNb3VzZVBvcyhZKS5yYWRpdXM7aHQuYXR0cih7cjpufSkuc3R5bGUoe29wYWNpdHk6LjV9KSxhdD1yLmludmVydChvLnV0aWwuZ2V0TW91c2VQb3MoWSkucmFkaXVzKTt2YXIgaT1vLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKG4saC5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKTtjdC50ZXh0KG8udXRpbC5yb3VuZChhdCkpLm1vdmUoW2lbMF0rX1swXSxpWzFdK19bMV1dKX0pLm9uKCJtb3VzZW91dC5yYWRpYWwtZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7aHQuc3R5bGUoe29wYWNpdHk6MH0pLHV0LmhpZGUoKSxsdC5oaWRlKCksY3QuaGlkZSgpfSksdC5zZWxlY3RBbGwoIi5nZW9tZXRyeS1ncm91cCAubWFyayIpLm9uKCJtb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSxyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXRoaXMuc3R5bGUuZmlsbCxzPSJibGFjayIsbD10aGlzLnN0eWxlLm9wYWNpdHl8fDE7aWYoaS5hdHRyKHsiZGF0YS1vcGFjaXR5IjpsfSksYSYmIm5vbmUiIT09YSl7aS5hdHRyKHsiZGF0YS1maWxsIjphfSkscz1uLmhzbChhKS5kYXJrZXIoKS50b1N0cmluZygpLGkuc3R5bGUoe2ZpbGw6cyxvcGFjaXR5OjF9KTt2YXIgYz17dDpvLnV0aWwucm91bmQoZVswXSkscjpvLnV0aWwucm91bmQoZVsxXSl9O1QmJihjLnQ9d1tlWzBdXSk7dmFyIHU9InQ6ICIrYy50KyIsIHI6ICIrYy5yLGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHA9W2YubGVmdCtmLndpZHRoLzItVlswXS1oLmxlZnQsZi50b3ArZi5oZWlnaHQvMi1WWzFdLWgudG9wXTt1dC5jb25maWcoe2NvbG9yOnN9KS50ZXh0KHUpLHV0Lm1vdmUocCl9ZWxzZSBhPXRoaXMuc3R5bGUuc3Ryb2tlfHwiYmxhY2siLGkuYXR0cih7ImRhdGEtc3Ryb2tlIjphfSkscz1uLmhzbChhKS5kYXJrZXIoKS50b1N0cmluZygpLGkuc3R5bGUoe3N0cm9rZTpzLG9wYWNpdHk6MX0pfSkub24oIm1vdXNlbW92ZS50b29sdGlwIixmdW5jdGlvbih0LGUpe2lmKDAhPW4uZXZlbnQud2hpY2gpcmV0dXJuITE7bi5zZWxlY3QodGhpcykuYXR0cigiZGF0YS1maWxsIikmJnV0LnNob3coKX0pLm9uKCJtb3VzZW91dC50b29sdGlwIixmdW5jdGlvbih0LGUpe3V0LmhpZGUoKTt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXIuYXR0cigiZGF0YS1maWxsIik7aT9yLnN0eWxlKHtmaWxsOmksb3BhY2l0eTpyLmF0dHIoImRhdGEtb3BhY2l0eSIpfSk6ci5zdHlsZSh7c3Ryb2tlOnIuYXR0cigiZGF0YS1zdHJva2UiKSxvcGFjaXR5OnIuYXR0cigiZGF0YS1vcGFjaXR5Iil9KX0pfSl9KGMpLHRoaXN9LGguY29uZmlnPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBsO3ZhciBlPW8udXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIGUuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7bC5kYXRhW2VdfHwobC5kYXRhW2VdPXt9KSxpKGwuZGF0YVtlXSxvLkF4aXMuZGVmYXVsdENvbmZpZygpLmRhdGFbMF0pLGkobC5kYXRhW2VdLHQpfSksaShsLmxheW91dCxvLkF4aXMuZGVmYXVsdENvbmZpZygpLmxheW91dCksaShsLmxheW91dCxlLmxheW91dCksdGhpc30saC5nZXRMaXZlQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LGguZ2V0aW5wdXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gY30saC5yYWRpYWxTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gcn0saC5hbmd1bGFyU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHN9LGguc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucmViaW5kKGgsZiwib24iKSxofSxvLkF4aXMuZGVmYXVsdENvbmZpZz1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOlt7dDpbMSwyLDMsNF0scjpbMTAsMTEsMTIsMTNdLG5hbWU6IkxpbmUxIixnZW9tZXRyeToiTGluZVBsb3QiLGNvbG9yOm51bGwsc3Ryb2tlRGFzaDoic29saWQiLHN0cm9rZUNvbG9yOm51bGwsc3Ryb2tlU2l6ZToiMSIsdmlzaWJsZUluTGVnZW5kOiEwLG9wYWNpdHk6MX1dLGxheW91dDp7ZGVmYXVsdENvbG9yUmFuZ2U6bi5zY2FsZS5jYXRlZ29yeTEwKCkucmFuZ2UoKSx0aXRsZTpudWxsLGhlaWdodDo0NTAsd2lkdGg6NTAwLG1hcmdpbjp7dG9wOjQwLHJpZ2h0OjQwLGJvdHRvbTo0MCxsZWZ0OjQwfSxmb250OntzaXplOjEyLGNvbG9yOiJncmF5IixvdXRsaW5lQ29sb3I6IndoaXRlIixmYW1pbHk6IlRhaG9tYSwgc2Fucy1zZXJpZiJ9LGRpcmVjdGlvbjoiY2xvY2t3aXNlIixvcmllbnRhdGlvbjowLGxhYmVsT2Zmc2V0OjEwLHJhZGlhbEF4aXM6e2RvbWFpbjpudWxsLG9yaWVudGF0aW9uOi00NSx0aWNrc1N1ZmZpeDoiIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOiJob3Jpem9udGFsIixyZXdyaXRlVGlja3M6bnVsbH0sYW5ndWxhckF4aXM6e2RvbWFpbjpbMCwzNjBdLHRpY2tzU3VmZml4OiIiLHZpc2libGU6ITAsZ3JpZExpbmVzVmlzaWJsZTohMCxsYWJlbHNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmV3cml0ZVRpY2tzOm51bGwsdGlja3NDb3VudDpudWxsLHRpY2tzU3RlcDpudWxsfSxtaW5vclRpY2tzOjAsdGlja0xlbmd0aDpudWxsLHRpY2tDb2xvcjoic2lsdmVyIixtaW5vclRpY2tDb2xvcjoiI2VlZSIsYmFja2dyb3VuZENvbG9yOiJub25lIixuZWVkc0VuZFNwYWNpbmc6bnVsbCxzaG93TGVnZW5kOiEwLGxlZ2VuZDp7cmV2ZXJzZU9yZGVyOiExfSxvcGFjaXR5OjF9fX0sby51dGlsPXt9LG8uREFUQUVYVEVOVD0iZGF0YUV4dGVudCIsby5BUkVBPSJBcmVhQ2hhcnQiLG8uTElORT0iTGluZVBsb3QiLG8uRE9UPSJEb3RQbG90IixvLkJBUj0iQmFyQ2hhcnQiLG8udXRpbC5fb3ZlcnJpZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdClyIGluIGUmJihlW3JdPXRbcl0pfSxvLnV0aWwuX2V4dGVuZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sby51dGlsLl9ybmRTbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gMipNYXRoLnJhbmRvbSgpLTErKDIqTWF0aC5yYW5kb20oKS0xKSsoMipNYXRoLnJhbmRvbSgpLTEpfSxvLnV0aWwuZGF0YUZyb21FcXVhdGlvbjI9ZnVuY3Rpb24odCxlKXt2YXIgcj1lfHw2O3JldHVybiBuLnJhbmdlKDAsMzYwK3IscikubWFwKGZ1bmN0aW9uKGUscil7dmFyIG49ZSpNYXRoLlBJLzE4MDtyZXR1cm5bZSx0KG4pXX0pfSxvLnV0aWwuZGF0YUZyb21FcXVhdGlvbj1mdW5jdGlvbih0LGUscil7dmFyIGk9ZXx8NixhPVtdLG89W107bi5yYW5nZSgwLDM2MCtpLGkpLmZvckVhY2goZnVuY3Rpb24oZSxyKXt2YXIgbj1lKk1hdGguUEkvMTgwLGk9dChuKTthLnB1c2goZSksby5wdXNoKGkpfSk7dmFyIHM9e3Q6YSxyOm99O3JldHVybiByJiYocy5uYW1lPXIpLHN9LG8udXRpbC5lbnN1cmVBcnJheT1mdW5jdGlvbih0LGUpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgdClyZXR1cm4gbnVsbDt2YXIgcj1bXS5jb25jYXQodCk7cmV0dXJuIG4ucmFuZ2UoZSkubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbZV18fHJbMF19KX0sby51dGlsLmZpbGxBcnJheXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0W2VdPW8udXRpbC5lbnN1cmVBcnJheSh0W2VdLHIpfSksdH0sby51dGlsLmNsb25lSnNvbj1mdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSl9LG8udXRpbC52YWxpZGF0ZUtleXM9ZnVuY3Rpb24odCxlKXsic3RyaW5nIj09dHlwZW9mIGUmJihlPWUuc3BsaXQoIi4iKSk7dmFyIHI9ZS5zaGlmdCgpO3JldHVybiB0W3JdJiYoIWUubGVuZ3RofHxvYmpIYXNLZXlzKHRbcl0sZSkpfSxvLnV0aWwuc3VtQXJyYXlzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uemlwKHQsZSkubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc3VtKHQpfSl9LG8udXRpbC5hcnJheUxhc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19LG8udXRpbC5hcnJheUVxdWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWF4KHQubGVuZ3RoLGUubGVuZ3RoLDEpO3ItLSA+PTAmJnRbcl09PT1lW3JdOyk7cmV0dXJuLTI9PT1yfSxvLnV0aWwuZmxhdHRlbkFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTshby51dGlsLmFycmF5RXF1YWwoZSx0KTspZT10LHQ9W10uY29uY2F0LmFwcGx5KFtdLHQpO3JldHVybiB0fSxvLnV0aWwuZGVkdXBsaWNhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gci5pbmRleE9mKHQpPT1lfSl9LG8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlKXt2YXIgcj1lKk1hdGguUEkvMTgwO3JldHVyblt0Kk1hdGguY29zKHIpLHQqTWF0aC5zaW4ocildfSxvLnV0aWwucm91bmQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lfHwyLG49TWF0aC5wb3coMTAscik7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufSxvLnV0aWwuZ2V0TW91c2VQb3M9ZnVuY3Rpb24odCl7dmFyIGU9bi5tb3VzZSh0Lm5vZGUoKSkscj1lWzBdLGk9ZVsxXSxhPXt9O3JldHVybiBhLng9cixhLnk9aSxhLnBvcz1lLGEuYW5nbGU9MTgwKihNYXRoLmF0YW4yKGkscikrTWF0aC5QSSkvTWF0aC5QSSxhLnJhZGl1cz1NYXRoLnNxcnQocipyK2kqaSksYX0sby51dGlsLmR1cGxpY2F0ZXNDb3VudD1mdW5jdGlvbih0KXtmb3IodmFyIGUscj17fSxuPXt9LGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspKGU9dFtpXSlpbiByPyhyW2VdKyssbltlXT1yW2VdKTpyW2VdPTE7cmV0dXJuIG59LG8udXRpbC5kdXBsaWNhdGVzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyhvLnV0aWwuZHVwbGljYXRlc0NvdW50KHQpKX0sby51dGlsLnRyYW5zbGF0b3I9ZnVuY3Rpb24odCxlLHIsbil7aWYobil7dmFyIGk9ci5zbGljZSgpO3I9ZSxlPWl9dmFyIGE9ZS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQpcmV0dXJuIHRbZV19LHQpOyJ1bmRlZmluZWQiIT10eXBlb2YgYSYmKGUucmVkdWNlKGZ1bmN0aW9uKHQscixuKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQpcmV0dXJuIG49PT1lLmxlbmd0aC0xJiZkZWxldGUgdFtyXSx0W3JdfSx0KSxyLnJlZHVjZShmdW5jdGlvbih0LGUsbil7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiB0W2VdJiYodFtlXT17fSksbj09PXIubGVuZ3RoLTEmJih0W2VdPWEpLHRbZV19LHQpKX0sby5Qb2x5Q2hhcnQ9ZnVuY3Rpb24oKXt2YXIgdD1bby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpXSxlPW4uZGlzcGF0Y2goImhvdmVyIikscj17c29saWQ6Im5vbmUiLGRhc2g6WzUsMl0sZG90OlsyLDVdfTtmdW5jdGlvbiBhKCl7dmFyIGU9dFswXS5nZW9tZXRyeUNvbmZpZyxpPWUuY29udGFpbmVyOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9bi5zZWxlY3QoaSkpLGkuZGF0dW0odCkuZWFjaChmdW5jdGlvbih0LGkpe3ZhciBhPSEhdFswXS5kYXRhLnlTdGFjayxvPXQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGE/bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0sdC5kYXRhLnlTdGFja1swXSk6bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0pfSkscz1lLmFuZ3VsYXJTY2FsZSxsPWUucmFkaWFsU2NhbGUuZG9tYWluKClbMF0sYz17YmFyOmZ1bmN0aW9uKHIsaSxhKXt2YXIgbz10W2FdLmRhdGEsbD1lLnJhZGlhbFNjYWxlKHJbMV0pLWUucmFkaWFsU2NhbGUoMCksYz1lLnJhZGlhbFNjYWxlKHJbMl18fDApLHU9by5iYXJXaWR0aDtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBiYXIiLGQ6Ik0iK1tbbCtjLC11LzJdLFtsK2MsdS8yXSxbYyx1LzJdLFtjLC11LzJdXS5qb2luKCJMIikrIloiLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVybiJyb3RhdGUoIisoZS5vcmllbnRhdGlvbitzKHRbMF0pKSsiKSJ9fSl9fTtjLmRvdD1mdW5jdGlvbihyLGksYSl7dmFyIG89clsyXT9bclswXSxyWzFdK3JbMl1dOnIscz1uLnN2Zy5zeW1ib2woKS5zaXplKHRbYV0uZGF0YS5kb3RTaXplKS50eXBlKHRbYV0uZGF0YS5kb3RUeXBlKShyLGkpO24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGRvdCIsZDpzLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3ZhciBuLGksYSxzPShuPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5yYWRpYWxTY2FsZSh0WzFdKSxpPShlLmFuZ3VsYXJTY2FsZSh0WzBdKStlLm9yaWVudGF0aW9uKSpNYXRoLlBJLzE4MDtyZXR1cm57cjpuLHQ6aX19KG8pLGk9bi5yKk1hdGguY29zKG4udCksYT1uLnIqTWF0aC5zaW4obi50KSx7eDppLHk6YX0pO3JldHVybiJ0cmFuc2xhdGUoIitbcy54LHMueV0rIikifX0pfTt2YXIgdT1uLnN2Zy5saW5lLnJhZGlhbCgpLmludGVycG9sYXRlKHRbMF0uZGF0YS5saW5lSW50ZXJwb2xhdGlvbikucmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKHRbMV0pfSkuYW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuIGUuYW5ndWxhclNjYWxlKHRbMF0pKk1hdGguUEkvMTgwfSk7Yy5saW5lPWZ1bmN0aW9uKHIsaSxhKXt2YXIgcz1yWzJdP29bYV0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sdFsxXSt0WzJdXX0pOm9bYV07aWYobi5zZWxlY3QodGhpcykuZWFjaChjLmRvdCkuc3R5bGUoe29wYWNpdHk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4rdFthXS5kYXRhLmRvdFZpc2libGV9LGZpbGw6ZC5zdHJva2UocixpLGEpfSkuYXR0cih7Y2xhc3M6Im1hcmsgZG90In0pLCEoaT4wKSl7dmFyIGw9bi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInBhdGgubGluZSIpLmRhdGEoWzBdKTtsLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiksbC5hdHRyKHtjbGFzczoibGluZSIsZDp1KHMpLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVybiJyb3RhdGUoIisoZS5vcmllbnRhdGlvbis5MCkrIikifSwicG9pbnRlci1ldmVudHMiOiJub25lIn0pLnN0eWxlKHtmaWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuZmlsbChyLGksYSl9LCJmaWxsLW9wYWNpdHkiOjAsc3Ryb2tlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuc3Ryb2tlKHIsaSxhKX0sInN0cm9rZS13aWR0aCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZFsic3Ryb2tlLXdpZHRoIl0ocixpLGEpfSwic3Ryb2tlLWRhc2hhcnJheSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZFsic3Ryb2tlLWRhc2hhcnJheSJdKHIsaSxhKX0sb3BhY2l0eTpmdW5jdGlvbih0LGUpe3JldHVybiBkLm9wYWNpdHkocixpLGEpfSxkaXNwbGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuZGlzcGxheShyLGksYSl9fSl9fTt2YXIgZj1lLmFuZ3VsYXJTY2FsZS5yYW5nZSgpLGg9TWF0aC5hYnMoZlsxXS1mWzBdKS9vWzBdLmxlbmd0aCpNYXRoLlBJLzE4MCxwPW4uc3ZnLmFyYygpLnN0YXJ0QW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuLWgvMn0pLmVuZEFuZ2xlKGZ1bmN0aW9uKHQpe3JldHVybiBoLzJ9KS5pbm5lclJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZShsKyh0WzJdfHwwKSl9KS5vdXRlclJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZShsKyh0WzJdfHwwKSkrZS5yYWRpYWxTY2FsZSh0WzFdKX0pO2MuYXJjPWZ1bmN0aW9uKHQscixpKXtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBhcmMiLGQ6cCx0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXtyZXR1cm4icm90YXRlKCIrKGUub3JpZW50YXRpb24rcyh0WzBdKSs5MCkrIikifX0pfTt2YXIgZD17ZmlsbDpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRbbl0uZGF0YS5jb2xvcn0sc3Ryb2tlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLnN0cm9rZUNvbG9yfSwic3Ryb2tlLXdpZHRoIjpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRbbl0uZGF0YS5zdHJva2VTaXplKyJweCJ9LCJzdHJva2UtZGFzaGFycmF5IjpmdW5jdGlvbihlLG4saSl7cmV0dXJuIHJbdFtpXS5kYXRhLnN0cm9rZURhc2hdfSxvcGFjaXR5OmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLm9wYWNpdHl9LGRpc3BsYXk6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgdFtuXS5kYXRhLnZpc2libGV8fHRbbl0uZGF0YS52aXNpYmxlPyJibG9jayI6Im5vbmUifX0sZz1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcubGF5ZXIiKS5kYXRhKG8pO2cuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKHtjbGFzczoibGF5ZXIifSk7dmFyIHY9Zy5zZWxlY3RBbGwoInBhdGgubWFyayIpLmRhdGEoZnVuY3Rpb24odCxlKXtyZXR1cm4gdH0pO3YuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKHtjbGFzczoibWFyayJ9KSx2LnN0eWxlKGQpLmVhY2goY1tlLmdlb21ldHJ5VHlwZV0pLHYuZXhpdCgpLnJlbW92ZSgpLGcuZXhpdCgpLnJlbW92ZSgpfSl9cmV0dXJuIGEuY29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0W3JdfHwodFtyXT17fSksaSh0W3JdLG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWcoKSksaSh0W3JdLGUpfSksdGhpcyk6dH0sYS5nZXRDb2xvclNjYWxlPWZ1bmN0aW9uKCl7fSxuLnJlYmluZChhLGUsIm9uIiksYX0sby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntkYXRhOntuYW1lOiJnZW9tMSIsdDpbWzEsMiwzLDRdXSxyOltbMSwyLDMsNF1dLGRvdFR5cGU6ImNpcmNsZSIsZG90U2l6ZTo2NCxkb3RWaXNpYmxlOiExLGJhcldpZHRoOjIwLGNvbG9yOiIjZmZhNTAwIixzdHJva2VTaXplOjEsc3Ryb2tlQ29sb3I6InNpbHZlciIsc3Ryb2tlRGFzaDoic29saWQiLG9wYWNpdHk6MSxpbmRleDowLHZpc2libGU6ITAsdmlzaWJsZUluTGVnZW5kOiEwfSxnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnk6IkxpbmVQbG90IixnZW9tZXRyeVR5cGU6ImFyYyIsZGlyZWN0aW9uOiJjbG9ja3dpc2UiLG9yaWVudGF0aW9uOjAsY29udGFpbmVyOiJib2R5IixyYWRpYWxTY2FsZTpudWxsLGFuZ3VsYXJTY2FsZTpudWxsLGNvbG9yU2NhbGU6bi5zY2FsZS5jYXRlZ29yeTIwKCl9fX0sby5CYXJDaGFydD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkJhckNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToiYmFyIn19fSxvLkFyZWFDaGFydD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkFyZWFDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImFyYyJ9fX0sby5Eb3RQbG90PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uRG90UGxvdC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImRvdCIsZG90VHlwZToiY2lyY2xlIn19fSxvLkxpbmVQbG90PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uTGluZVBsb3QuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJsaW5lIn19fSxvLkxlZ2VuZD1mdW5jdGlvbigpe3ZhciB0PW8uTGVnZW5kLmRlZmF1bHRDb25maWcoKSxlPW4uZGlzcGF0Y2goImhvdmVyIik7ZnVuY3Rpb24gcigpe3ZhciBlPXQubGVnZW5kQ29uZmlnLGE9dC5kYXRhLm1hcChmdW5jdGlvbih0LHIpe3JldHVybltdLmNvbmNhdCh0KS5tYXAoZnVuY3Rpb24odCxuKXt2YXIgYT1pKHt9LGUuZWxlbWVudHNbcl0pO3JldHVybiBhLm5hbWU9dCxhLmNvbG9yPVtdLmNvbmNhdChlLmVsZW1lbnRzW3JdLmNvbG9yKVtuXSxhfSl9KSxvPW4ubWVyZ2UoYSk7bz1vLmZpbHRlcihmdW5jdGlvbih0LHIpe3JldHVybiBlLmVsZW1lbnRzW3JdJiYoZS5lbGVtZW50c1tyXS52aXNpYmxlSW5MZWdlbmR8fCJ1bmRlZmluZWQiPT10eXBlb2YgZS5lbGVtZW50c1tyXS52aXNpYmxlSW5MZWdlbmQpfSksZS5yZXZlcnNlT3JkZXImJihvPW8ucmV2ZXJzZSgpKTt2YXIgcz1lLmNvbnRhaW5lcjsoInN0cmluZyI9PXR5cGVvZiBzfHxzLm5vZGVOYW1lKSYmKHM9bi5zZWxlY3QocykpO3ZhciBsPW8ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29sb3J9KSxjPWUuZm9udFNpemUsdT1udWxsPT1lLmlzQ29udGludW91cz8ibnVtYmVyIj09dHlwZW9mIG9bMF06ZS5pc0NvbnRpbnVvdXMsZj11P2UuaGVpZ2h0OmMqby5sZW5ndGgsaD1zLmNsYXNzZWQoImxlZ2VuZC1ncm91cCIsITApLnNlbGVjdEFsbCgic3ZnIikuZGF0YShbMF0pLHA9aC5lbnRlcigpLmFwcGVuZCgic3ZnIikuYXR0cih7d2lkdGg6MzAwLGhlaWdodDpmK2MseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix2ZXJzaW9uOiIxLjEifSk7cC5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmQtYXhpcyIsITApLHAuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kLW1hcmtzIiwhMCk7dmFyIGQ9bi5yYW5nZShvLmxlbmd0aCksZz1uLnNjYWxlW3U/ImxpbmVhciI6Im9yZGluYWwiXSgpLmRvbWFpbihkKS5yYW5nZShsKSx2PW4uc2NhbGVbdT8ibGluZWFyIjoib3JkaW5hbCJdKCkuZG9tYWluKGQpW3U/InJhbmdlIjoicmFuZ2VQb2ludHMiXShbMCxmXSk7aWYodSl7dmFyIG09aC5zZWxlY3QoIi5sZWdlbmQtbWFya3MiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cih7aWQ6ImdyYWQxIix4MToiMCUiLHkxOiIwJSIseDI6IjAlIix5MjoiMTAwJSJ9KS5zZWxlY3RBbGwoInN0b3AiKS5kYXRhKGwpO20uZW50ZXIoKS5hcHBlbmQoInN0b3AiKSxtLmF0dHIoe29mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBlLyhsLmxlbmd0aC0xKSoxMDArIiUifX0pLnN0eWxlKHsic3RvcC1jb2xvciI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH19KSxoLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkuYXR0cih7aGVpZ2h0OmUuaGVpZ2h0LHdpZHRoOmUuY29sb3JCYW5kV2lkdGgsZmlsbDoidXJsKCNncmFkMSkifSl9ZWxzZXt2YXIgeT1oLnNlbGVjdCgiLmxlZ2VuZC1tYXJrcyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQtbWFyayIpLmRhdGEobyk7eS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkseS5hdHRyKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4idHJhbnNsYXRlKCIrW2MvMix2KGUpK2MvMl0rIikifSxkOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89dC5zeW1ib2w7cmV0dXJuIGE9MyooaT1jKSwibGluZSI9PT0ocj1vKT8iTSIrW1staS8yLC1pLzEyXSxbaS8yLC1pLzEyXSxbaS8yLGkvMTJdLFstaS8yLGkvMTJdXSsiWiI6LTEhPW4uc3ZnLnN5bWJvbFR5cGVzLmluZGV4T2Yocik/bi5zdmcuc3ltYm9sKCkudHlwZShyKS5zaXplKGEpKCk6bi5zdmcuc3ltYm9sKCkudHlwZSgic3F1YXJlIikuc2l6ZShhKSgpfSxmaWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGcoZSl9fSkseS5leGl0KCkucmVtb3ZlKCl9dmFyIHg9bi5zdmcuYXhpcygpLnNjYWxlKHYpLm9yaWVudCgicmlnaHQiKSxiPWguc2VsZWN0KCJnLmxlZ2VuZC1heGlzIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbdT9lLmNvbG9yQmFuZFdpZHRoOmMsYy8yXSsiKSJ9KS5jYWxsKHgpO3JldHVybiBiLnNlbGVjdEFsbCgiLmRvbWFpbiIpLnN0eWxlKHtmaWxsOiJub25lIixzdHJva2U6Im5vbmUifSksYi5zZWxlY3RBbGwoImxpbmUiKS5zdHlsZSh7ZmlsbDoibm9uZSIsc3Ryb2tlOnU/ZS50ZXh0Q29sb3I6Im5vbmUifSksYi5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSh7ZmlsbDplLnRleHRDb2xvciwiZm9udC1zaXplIjplLmZvbnRTaXplfSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBvW2VdLm5hbWV9KSxyfXJldHVybiByLmNvbmZpZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSh0LGUpLHRoaXMpOnR9LG4ucmViaW5kKHIsZSwib24iKSxyfSxvLkxlZ2VuZC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6WyJhIiwiYiIsImMiXSxsZWdlbmRDb25maWc6e2VsZW1lbnRzOlt7c3ltYm9sOiJsaW5lIixjb2xvcjoicmVkIn0se3N5bWJvbDoic3F1YXJlIixjb2xvcjoieWVsbG93In0se3N5bWJvbDoiZGlhbW9uZCIsY29sb3I6ImxpbWVncmVlbiJ9XSxoZWlnaHQ6MTUwLGNvbG9yQmFuZFdpZHRoOjMwLGZvbnRTaXplOjEyLGNvbnRhaW5lcjoiYm9keSIsaXNDb250aW51b3VzOm51bGwsdGV4dENvbG9yOiJncmV5IixyZXZlcnNlT3JkZXI6ITF9fX0sby50b29sdGlwUGFuZWw9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsYT17Y29udGFpbmVyOm51bGwsaGFzVGljazohMSxmb250U2l6ZToxMixjb2xvcjoid2hpdGUiLHBhZGRpbmc6NX0scz0idG9vbHRpcC0iK28udG9vbHRpcFBhbmVsLnVpZCsrLGw9MTAsYz1mdW5jdGlvbigpe3ZhciBuPSh0PWEuY29udGFpbmVyLnNlbGVjdEFsbCgiZy4iK3MpLmRhdGEoWzBdKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHMsITApLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIixkaXNwbGF5OiJub25lIn0pO3JldHVybiByPW4uYXBwZW5kKCJwYXRoIikuc3R5bGUoe2ZpbGw6IndoaXRlIiwiZmlsbC1vcGFjaXR5IjouOX0pLmF0dHIoe2Q6Ik0wIDAifSksZT1uLmFwcGVuZCgidGV4dCIpLmF0dHIoe2R4OmEucGFkZGluZytsLGR5Oi4zKithLmZvbnRTaXplfSksY307cmV0dXJuIGMudGV4dD1mdW5jdGlvbihpKXt2YXIgbz1uLmhzbChhLmNvbG9yKS5sLHM9bz49LjU/IiNhYWEiOiJ3aGl0ZSIsdT1vPj0uNT8iYmxhY2siOiJ3aGl0ZSIsZj1pfHwiIjtlLnN0eWxlKHtmaWxsOnUsImZvbnQtc2l6ZSI6YS5mb250U2l6ZSsicHgifSkudGV4dChmKTt2YXIgaD1hLnBhZGRpbmcscD1lLm5vZGUoKS5nZXRCQm94KCksZD17ZmlsbDphLmNvbG9yLHN0cm9rZTpzLCJzdHJva2Utd2lkdGgiOiIycHgifSxnPXAud2lkdGgrMipoK2wsdj1wLmhlaWdodCsyKmg7cmV0dXJuIHIuYXR0cih7ZDoiTSIrW1tsLC12LzJdLFtsLC12LzRdLFthLmhhc1RpY2s/MDpsLDBdLFtsLHYvNF0sW2wsdi8yXSxbZyx2LzJdLFtnLC12LzJdXS5qb2luKCJMIikrIloifSkuc3R5bGUoZCksdC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1tsLC12LzIrMipoXSsiKSJ9KSx0LnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxjfSxjLm1vdmU9ZnVuY3Rpb24oZSl7aWYodClyZXR1cm4gdC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1tlWzBdLGVbMV1dKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxjfSxjLmhpZGU9ZnVuY3Rpb24oKXtpZih0KXJldHVybiB0LnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLGN9LGMuc2hvdz1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGN9LGMuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBpKGEsdCksY30sY30sby50b29sdGlwUGFuZWwudWlkPTEsby5hZGFwdGVyPXt9LG8uYWRhcHRlci5wbG90bHk9ZnVuY3Rpb24oKXt2YXIgdD17Y29udmVydDpmdW5jdGlvbih0LGUpe3ZhciByPXt9O2lmKHQuZGF0YSYmKHIuZGF0YT10LmRhdGEubWFwKGZ1bmN0aW9uKHQscil7dmFyIG49aSh7fSx0KTtyZXR1cm5bW24sWyJtYXJrZXIiLCJjb2xvciJdLFsiY29sb3IiXV0sW24sWyJtYXJrZXIiLCJvcGFjaXR5Il0sWyJvcGFjaXR5Il1dLFtuLFsibWFya2VyIiwibGluZSIsImNvbG9yIl0sWyJzdHJva2VDb2xvciJdXSxbbixbIm1hcmtlciIsImxpbmUiLCJkYXNoIl0sWyJzdHJva2VEYXNoIl1dLFtuLFsibWFya2VyIiwibGluZSIsIndpZHRoIl0sWyJzdHJva2VTaXplIl1dLFtuLFsibWFya2VyIiwic3ltYm9sIl0sWyJkb3RUeXBlIl1dLFtuLFsibWFya2VyIiwic2l6ZSJdLFsiZG90U2l6ZSJdXSxbbixbIm1hcmtlciIsImJhcldpZHRoIl0sWyJiYXJXaWR0aCJdXSxbbixbImxpbmUiLCJpbnRlcnBvbGF0aW9uIl0sWyJsaW5lSW50ZXJwb2xhdGlvbiJdXSxbbixbInNob3dsZWdlbmQiXSxbInZpc2libGVJbkxlZ2VuZCJdXV0uZm9yRWFjaChmdW5jdGlvbih0LHIpe28udXRpbC50cmFuc2xhdG9yLmFwcGx5KG51bGwsdC5jb25jYXQoZSkpfSksZXx8ZGVsZXRlIG4ubWFya2VyLGUmJmRlbGV0ZSBuLmdyb3VwSWQsZT8oIkxpbmVQbG90Ij09PW4uZ2VvbWV0cnk/KG4udHlwZT0ic2NhdHRlciIsITA9PT1uLmRvdFZpc2libGU/KGRlbGV0ZSBuLmRvdFZpc2libGUsbi5tb2RlPSJsaW5lcyttYXJrZXJzIik6bi5tb2RlPSJsaW5lcyIpOiJEb3RQbG90Ij09PW4uZ2VvbWV0cnk/KG4udHlwZT0ic2NhdHRlciIsbi5tb2RlPSJtYXJrZXJzIik6IkFyZWFDaGFydCI9PT1uLmdlb21ldHJ5P24udHlwZT0iYXJlYSI6IkJhckNoYXJ0Ij09PW4uZ2VvbWV0cnkmJihuLnR5cGU9ImJhciIpLGRlbGV0ZSBuLmdlb21ldHJ5KTooInNjYXR0ZXIiPT09bi50eXBlPyJsaW5lcyI9PT1uLm1vZGU/bi5nZW9tZXRyeT0iTGluZVBsb3QiOiJtYXJrZXJzIj09PW4ubW9kZT9uLmdlb21ldHJ5PSJEb3RQbG90IjoibGluZXMrbWFya2VycyI9PT1uLm1vZGUmJihuLmdlb21ldHJ5PSJMaW5lUGxvdCIsbi5kb3RWaXNpYmxlPSEwKToiYXJlYSI9PT1uLnR5cGU/bi5nZW9tZXRyeT0iQXJlYUNoYXJ0IjoiYmFyIj09PW4udHlwZSYmKG4uZ2VvbWV0cnk9IkJhckNoYXJ0IiksZGVsZXRlIG4ubW9kZSxkZWxldGUgbi50eXBlKSxufSksIWUmJnQubGF5b3V0JiYic3RhY2siPT09dC5sYXlvdXQuYmFybW9kZSkpe3ZhciBhPW8udXRpbC5kdXBsaWNhdGVzKHIuZGF0YS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZW9tZXRyeX0pKTtyLmRhdGEuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPWEuaW5kZXhPZih0Lmdlb21ldHJ5KTstMSE9biYmKHIuZGF0YVtlXS5ncm91cElkPW4pfSl9aWYodC5sYXlvdXQpe3ZhciBzPWkoe30sdC5sYXlvdXQpO2lmKFtbcyxbInBsb3RfYmdjb2xvciJdLFsiYmFja2dyb3VuZENvbG9yIl1dLFtzLFsic2hvd2xlZ2VuZCJdLFsic2hvd0xlZ2VuZCJdXSxbcyxbInJhZGlhbGF4aXMiXSxbInJhZGlhbEF4aXMiXV0sW3MsWyJhbmd1bGFyYXhpcyJdLFsiYW5ndWxhckF4aXMiXV0sW3MuYW5ndWxhcmF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbcy5hbmd1bGFyYXhpcyxbInNob3d0aWNrbGFiZWxzIl0sWyJsYWJlbHNWaXNpYmxlIl1dLFtzLmFuZ3VsYXJheGlzLFsibnRpY2tzIl0sWyJ0aWNrc0NvdW50Il1dLFtzLmFuZ3VsYXJheGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW3MuYW5ndWxhcmF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbcy5hbmd1bGFyYXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW3MuYW5ndWxhcmF4aXMsWyJlbmRwYWRkaW5nIl0sWyJlbmRQYWRkaW5nIl1dLFtzLnJhZGlhbGF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbcy5yYWRpYWxheGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW3MucmFkaWFsYXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtzLnJhZGlhbGF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtzLmFuZ3VsYXJBeGlzLFsic2hvd2xpbmUiXSxbImdyaWRMaW5lc1Zpc2libGUiXV0sW3MuYW5ndWxhckF4aXMsWyJzaG93dGlja2xhYmVscyJdLFsibGFiZWxzVmlzaWJsZSJdXSxbcy5hbmd1bGFyQXhpcyxbIm50aWNrcyJdLFsidGlja3NDb3VudCJdXSxbcy5hbmd1bGFyQXhpcyxbInRpY2tvcmllbnRhdGlvbiJdLFsidGlja09yaWVudGF0aW9uIl1dLFtzLmFuZ3VsYXJBeGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW3MuYW5ndWxhckF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtzLmFuZ3VsYXJBeGlzLFsiZW5kcGFkZGluZyJdLFsiZW5kUGFkZGluZyJdXSxbcy5yYWRpYWxBeGlzLFsic2hvd2xpbmUiXSxbImdyaWRMaW5lc1Zpc2libGUiXV0sW3MucmFkaWFsQXhpcyxbInRpY2tvcmllbnRhdGlvbiJdLFsidGlja09yaWVudGF0aW9uIl1dLFtzLnJhZGlhbEF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbcy5yYWRpYWxBeGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbcy5mb250LFsib3V0bGluZWNvbG9yIl0sWyJvdXRsaW5lQ29sb3IiXV0sW3MubGVnZW5kLFsidHJhY2VvcmRlciJdLFsicmV2ZXJzZU9yZGVyIl1dLFtzLFsibGFiZWxvZmZzZXQiXSxbImxhYmVsT2Zmc2V0Il1dLFtzLFsiZGVmYXVsdGNvbG9ycmFuZ2UiXSxbImRlZmF1bHRDb2xvclJhbmdlIl1dXS5mb3JFYWNoKGZ1bmN0aW9uKHQscil7by51dGlsLnRyYW5zbGF0b3IuYXBwbHkobnVsbCx0LmNvbmNhdChlKSl9KSxlPygidW5kZWZpbmVkIiE9dHlwZW9mIHMudGlja0xlbmd0aCYmKHMuYW5ndWxhcmF4aXMudGlja2xlbj1zLnRpY2tMZW5ndGgsZGVsZXRlIHMudGlja0xlbmd0aCkscy50aWNrQ29sb3ImJihzLmFuZ3VsYXJheGlzLnRpY2tjb2xvcj1zLnRpY2tDb2xvcixkZWxldGUgcy50aWNrQ29sb3IpKToocy5hbmd1bGFyQXhpcyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzLmFuZ3VsYXJBeGlzLnRpY2tsZW4mJihzLnRpY2tMZW5ndGg9cy5hbmd1bGFyQXhpcy50aWNrbGVuKSxzLmFuZ3VsYXJBeGlzJiYidW5kZWZpbmVkIiE9dHlwZW9mIHMuYW5ndWxhckF4aXMudGlja2NvbG9yJiYocy50aWNrQ29sb3I9cy5hbmd1bGFyQXhpcy50aWNrY29sb3IpKSxzLmxlZ2VuZCYmImJvb2xlYW4iIT10eXBlb2Ygcy5sZWdlbmQucmV2ZXJzZU9yZGVyJiYocy5sZWdlbmQucmV2ZXJzZU9yZGVyPSJub3JtYWwiIT1zLmxlZ2VuZC5yZXZlcnNlT3JkZXIpLHMubGVnZW5kJiYiYm9vbGVhbiI9PXR5cGVvZiBzLmxlZ2VuZC50cmFjZW9yZGVyJiYocy5sZWdlbmQudHJhY2VvcmRlcj1zLmxlZ2VuZC50cmFjZW9yZGVyPyJyZXZlcnNlZCI6Im5vcm1hbCIsZGVsZXRlIHMubGVnZW5kLnJldmVyc2VPcmRlcikscy5tYXJnaW4mJiJ1bmRlZmluZWQiIT10eXBlb2Ygcy5tYXJnaW4udCl7dmFyIGw9WyJ0IiwiciIsImIiLCJsIiwicGFkIl0sYz1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInBhZCJdLHU9e307bi5lbnRyaWVzKHMubWFyZ2luKS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dVtjW2wuaW5kZXhPZih0LmtleSldXT10LnZhbHVlfSkscy5tYXJnaW49dX1lJiYoZGVsZXRlIHMubmVlZHNFbmRTcGFjaW5nLGRlbGV0ZSBzLm1pbm9yVGlja0NvbG9yLGRlbGV0ZSBzLm1pbm9yVGlja3MsZGVsZXRlIHMuYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgcy5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnRpY2tzU3RlcCxkZWxldGUgcy5hbmd1bGFyYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIHMuYW5ndWxhcmF4aXMubnRpY2tzLGRlbGV0ZSBzLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgcy5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMucmFkaWFsYXhpcy50aWNrc1N0ZXAsZGVsZXRlIHMucmFkaWFsYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIHMucmFkaWFsYXhpcy5udGlja3MpLHIubGF5b3V0PXN9cmV0dXJuIHJ9fTtyZXR1cm4gdH19LHsiLi4vLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi8uLi9saWIiOjcwMCxkMzoxNTR9XSw4MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi9taWNyb3BvbGFyIikscz10KCIuL3VuZG9fbWFuYWdlciIpLGw9aS5leHRlbmREZWVwQWxsLGM9ZS5leHBvcnRzPXt9O2MuZnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLHUsZj1uZXcgcztmdW5jdGlvbiBoKHIscyl7cmV0dXJuIHMmJih1PXMpLG4uc2VsZWN0KG4uc2VsZWN0KHUpLm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyPio6bm90KC5jaGFydC1yb290KSIpLnJlbW92ZSgpLGU9ZT9sKGUscik6cixpfHwoaT1vLkF4aXMoKSksYT1vLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChlKSxpLmNvbmZpZyhhKS5yZW5kZXIodSksdC5kYXRhPWUuZGF0YSx0LmxheW91dD1lLmxheW91dCxjLmZpbGxMYXlvdXQodCksZX1yZXR1cm4gaC5pc1BvbGFyPSEwLGguc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc3ZnKCl9LGguZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LGguZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiBvLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChpLmdldExpdmVDb25maWcoKSwhMCl9LGguZ2V0TGl2ZVNjYWxlcz1mdW5jdGlvbigpe3JldHVybnt0OmkuYW5ndWxhclNjYWxlKCkscjppLnJhZGlhbFNjYWxlKCl9fSxoLnNldFVuZG9Qb2ludD1mdW5jdGlvbigpe3ZhciB0LG4saT10aGlzLGE9by51dGlsLmNsb25lSnNvbihlKTt0PWEsbj1yLGYuYWRkKHt1bmRvOmZ1bmN0aW9uKCl7biYmaShuKX0scmVkbzpmdW5jdGlvbigpe2kodCl9fSkscj1vLnV0aWwuY2xvbmVKc29uKGEpfSxoLnVuZG89ZnVuY3Rpb24oKXtmLnVuZG8oKX0saC5yZWRvPWZ1bmN0aW9uKCl7Zi5yZWRvKCl9LGh9LGMuZmlsbExheW91dD1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLHI9ZS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIiksaT10LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuc3ZnJiZ0LmZyYW1ld29yay5zdmcoKSxvPXt3aWR0aDo4MDAsaGVpZ2h0OjYwMCxwYXBlcl9iZ2NvbG9yOmEuYmFja2dyb3VuZCxfY29udGFpbmVyOmUsX3BhcGVyZGl2OnIsX3BhcGVyOml9O3QuX2Z1bGxMYXlvdXQ9bChvLHQubGF5b3V0KX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi8uLi9saWIiOjcwMCwiLi9taWNyb3BvbGFyIjo4MTksIi4vdW5kb19tYW5hZ2VyIjo4MjEsZDM6MTU0fV0sODIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9W10scj0tMSxuPSExO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdD8obj0hMCx0W2VdKCksbj0hMSx0aGlzKTp0aGlzfXJldHVybnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4/dGhpczooZS5zcGxpY2UocisxLGUubGVuZ3RoLXIpLGUucHVzaCh0KSxyPWUubGVuZ3RoLTEsdGhpcyl9LHNldENhbGxiYWNrOmZ1bmN0aW9uKGUpe3Q9ZX0sdW5kbzpmdW5jdGlvbigpe3ZhciBuPWVbcl07cmV0dXJuIG4/KGkobiwidW5kbyIpLHItPTEsdCYmdChuLnVuZG8pLHRoaXMpOnRoaXN9LHJlZG86ZnVuY3Rpb24oKXt2YXIgbj1lW3IrMV07cmV0dXJuIG4/KGkobiwicmVkbyIpLHIrPTEsdCYmdChuLnJlZG8pLHRoaXMpOnRoaXN9LGNsZWFyOmZ1bmN0aW9uKCl7ZT1bXSxyPS0xfSxoYXNVbmRvOmZ1bmN0aW9uKCl7cmV0dXJuLTEhPT1yfSxoYXNSZWRvOmZ1bmN0aW9uKCl7cmV0dXJuIHI8ZS5sZW5ndGgtMX0sZ2V0Q29tbWFuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sZ2V0UHJldmlvdXNDb21tYW5kOmZ1bmN0aW9uKCl7cmV0dXJuIGVbci0xXX0sZ2V0SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gcn19fX0se31dLDgyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi9wbG90cyIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxmPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGg9dCgiLi9zZXRfY29udmVydCIpLHA9dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLGQ9dCgiLi4vY2FydGVzaWFuL2RyYWdib3giKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIikseT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCx4PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLGI9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LF89dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLHc9dCgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksaz10KCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMsVD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULEE9dCgiLi9jb25zdGFudHMiKSxNPXQoIi4vaGVscGVycyIpLFM9by5fLEU9by5tb2QsQz1vLmRlZzJyYWQsTD1vLnJhZDJkZWc7ZnVuY3Rpb24geih0LGUpe3RoaXMuaWQ9ZSx0aGlzLmdkPXQsdGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPW51bGwsdGhpcy52YW5nbGVzPW51bGwsdGhpcy5yYWRpYWxBeGlzQW5nbGU9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fSx0aGlzLmNsaXBQYXRocz17fSx0aGlzLmNsaXBJZHM9e30sdGhpcy52aWV3SW5pdGlhbD17fTt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ImNsaXAiK3IuX3VpZCtlO3RoaXMuY2xpcElkcy5mb3JUcmFjZXM9bisiLWZvci10cmFjZXMiLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcz1yLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHRoaXMuY2xpcElkcy5mb3JUcmFjZXMpLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcy5hcHBlbmQoInBhdGgiKSx0aGlzLmZyYW1ld29yaz1yLl9wb2xhcmxheWVyLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixlKSx0aGlzLnJhZGlhbFRpY2tMYXlvdXQ9bnVsbCx0aGlzLmFuZ3VsYXJUaWNrTGF5b3V0PW51bGx9dmFyIE89ei5wcm90b3R5cGU7ZnVuY3Rpb24gSSh0KXt2YXIgZT10LnRpY2tzK1N0cmluZyh0LnRpY2tsZW4pK1N0cmluZyh0LnNob3d0aWNrbGFiZWxzKTtyZXR1cm4ic2lkZSJpbiB0JiYoZSs9dC5zaWRlKSxlfWZ1bmN0aW9uIEQodCxlKXtyZXR1cm4gZVtvLmZpbmRJbmRleE9mTWluKGUsZnVuY3Rpb24oZSl7cmV0dXJuIG8uYW5nbGVEaXN0KHQsZSl9KV19ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIGU/KHQuYXR0cigiZGlzcGxheSIsbnVsbCksdC5hdHRyKHIpKTp0JiZ0LmF0dHIoImRpc3BsYXkiLCJub25lIiksdH1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuInRyYW5zbGF0ZSgiK3QrIiwiK2UrIikifWZ1bmN0aW9uIEYodCl7cmV0dXJuInJvdGF0ZSgiK3QrIikifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgeih0LGUpfSxPLnBsb3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7aWYoITE9PT10W25dWzBdLnRyYWNlLmNsaXBvbmF4aXMpe3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319dGhpcy51cGRhdGVMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZUxheW91dChlLHIpLGMuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ2QsdGhpcyx0LHIpLHRoaXMudXBkYXRlRngoZSxyKX0sTy51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVycyxpPWUucmFkaWFsYXhpcyxhPWUuYW5ndWxhcmF4aXMsbz1BLmxheWVyTmFtZXMscz1vLmluZGV4T2YoImZyb250cGxvdCIpLGw9by5zbGljZSgwLHMpLGM9ImJlbG93IHRyYWNlcyI9PT1hLmxheWVyLHU9ImJlbG93IHRyYWNlcyI9PT1pLmxheWVyO2MmJmwucHVzaCgiYW5ndWxhci1saW5lIiksdSYmbC5wdXNoKCJyYWRpYWwtbGluZSIpLGMmJmwucHVzaCgiYW5ndWxhci1heGlzIiksdSYmbC5wdXNoKCJyYWRpYWwtYXhpcyIpLGwucHVzaCgiZnJvbnRwbG90IiksY3x8bC5wdXNoKCJhbmd1bGFyLWxpbmUiKSx1fHxsLnB1c2goInJhZGlhbC1saW5lIiksY3x8bC5wdXNoKCJhbmd1bGFyLWF4aXMiKSx1fHxsLnB1c2goInJhZGlhbC1heGlzIik7dmFyIGY9dGhpcy5mcmFtZXdvcmsuc2VsZWN0QWxsKCIucG9sYXJzdWJsYXllciIpLmRhdGEobCxTdHJpbmcpO2YuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInBvbGFyc3VibGF5ZXIgIit0fSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1yW3RdPW4uc2VsZWN0KHRoaXMpO3N3aXRjaCh0KXtjYXNlImZyb250cGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJiYXJsYXllciIsITApLGUuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk7YnJlYWs7Y2FzZSJiYWNrcGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJtYXBsYXllciIsITApO2JyZWFrO2Nhc2UicGxvdGJnIjpyLmJnPWUuYXBwZW5kKCJwYXRoIik7YnJlYWs7Y2FzZSJyYWRpYWwtZ3JpZCI6Y2FzZSJhbmd1bGFyLWdyaWQiOmUuc3R5bGUoImZpbGwiLCJub25lIik7YnJlYWs7Y2FzZSJyYWRpYWwtbGluZSI6ZS5hcHBlbmQoImxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTticmVhaztjYXNlImFuZ3VsYXItbGluZSI6ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX19KSxmLm9yZGVyKCl9LE8udXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnMsbj10Ll9zaXplLGk9ZS5yYWRpYWxheGlzLGE9ZS5hbmd1bGFyYXhpcyxvPWUuZG9tYWluLngsYz1lLmRvbWFpbi55O3RoaXMueE9mZnNldD1uLmwrbi53Km9bMF0sdGhpcy55T2Zmc2V0PW4udCtuLmgqKDEtY1sxXSk7dmFyIHU9dGhpcy54TGVuZ3RoPW4udyoob1sxXS1vWzBdKSxmPXRoaXMueUxlbmd0aD1uLmgqKGNbMV0tY1swXSksaD1lLnNlY3Rvcjt0aGlzLnNlY3RvckluUmFkPWgubWFwKEMpO3ZhciBwLGQsZyx2LG0seT10aGlzLnNlY3RvckJCb3g9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10WzBdLG89dFsxXS1hLHM9RShhLDM2MCksbD1zK28sYz1NYXRoLmNvcyhDKHMpKSx1PU1hdGguc2luKEMocykpLGY9TWF0aC5jb3MoQyhsKSksaD1NYXRoLnNpbihDKGwpKTtpPXM8PTkwJiZsPj05MHx8cz45MCYmbD49NDUwPzE6dTw9MCYmaDw9MD8wOk1hdGgubWF4KHUsaCk7ZT1zPD0xODAmJmw+PTE4MHx8cz4xODAmJmw+PTU0MD8tMTpjPj0wJiZmPj0wPzA6TWF0aC5taW4oYyxmKTtyPXM8PTI3MCYmbD49MjcwfHxzPjI3MCYmbD49NjMwPy0xOnU+PTAmJmg+PTA/MDpNYXRoLm1pbih1LGgpO249bD49MzYwPzE6Yzw9MCYmZjw9MD8wOk1hdGgubWF4KGMsZik7cmV0dXJuW2UscixuLGldfShoKSx4PXlbMl0teVswXSxiPXlbM10teVsxXSxfPWYvdSx3PU1hdGguYWJzKGIveCk7Xz53PyhwPXUsbT0oZi0oZD11KncpKS9uLmgvMixnPVtvWzBdLG9bMV1dLHY9W2NbMF0rbSxjWzFdLW1dKTooZD1mLG09KHUtKHA9Zi93KSkvbi53LzIsZz1bb1swXSttLG9bMV0tbV0sdj1bY1swXSxjWzFdXSksdGhpcy54TGVuZ3RoMj1wLHRoaXMueUxlbmd0aDI9ZCx0aGlzLnhEb21haW4yPWcsdGhpcy55RG9tYWluMj12O3ZhciBrPXRoaXMueE9mZnNldDI9bi5sK24udypnWzBdLFQ9dGhpcy55T2Zmc2V0Mj1uLnQrbi5oKigxLXZbMV0pLEE9dGhpcy5yYWRpdXM9cC94LE09dGhpcy5pbm5lclJhZGl1cz1lLmhvbGUqQSxTPXRoaXMuY3g9ay1BKnlbMF0sTD10aGlzLmN5PVQrQSp5WzNdLHo9dGhpcy5jeHg9Uy1rLE89dGhpcy5jeXk9TC1UO3RoaXMucmFkaWFsQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxpLHtfaWQ6IngiLHNpZGU6e2NvdW50ZXJjbG9ja3dpc2U6InRvcCIsY2xvY2t3aXNlOiJib3R0b20ifVtpLnNpZGVdLGRvbWFpbjpbTS9uLncsQS9uLnddfSksdGhpcy5hbmd1bGFyQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxhLHtzaWRlOiJyaWdodCIsZG9tYWluOlswLE1hdGguUEldLGF1dG9yYW5nZTohMX0pLHRoaXMuZG9BdXRvUmFuZ2UodCxlKSx0aGlzLnVwZGF0ZUFuZ3VsYXJBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzVGl0bGUodCxlKSx0aGlzLnhheGlzPXRoaXMubW9ja0NhcnRlc2lhbkF4aXModCxlLHtfaWQ6IngiLGRvbWFpbjpnfSksdGhpcy55YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOiJ5Iixkb21haW46dn0pO3ZhciBJPXRoaXMucGF0aFN1YnBsb3QoKTt0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsSSkuYXR0cigidHJhbnNmb3JtIixSKHosTykpLHIuZnJvbnRwbG90LmF0dHIoInRyYW5zZm9ybSIsUihrLFQpKS5jYWxsKGwuc2V0Q2xpcFVybCx0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U/bnVsbDp0aGlzLmNsaXBJZHMuZm9yVHJhY2VzLHRoaXMuZ2QpLHIuYmcuYXR0cigiZCIsSSkuYXR0cigidHJhbnNmb3JtIixSKFMsTCkpLmNhbGwocy5maWxsLGUuYmdjb2xvcil9LE8ubW9ja0F4aXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9by5leHRlbmRGbGF0KHthbmNob3I6ImZyZWUiLHBvc2l0aW9uOjB9LHIsbik7cmV0dXJuIGgoaSxlLHQpLGl9LE8ubW9ja0NhcnRlc2lhbkF4aXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1yLl9pZCxhPW8uZXh0ZW5kRmxhdCh7dHlwZToibGluZWFyIn0scik7ZihhLHQpO3ZhciBzPXt4OlswLDJdLHk6WzEsM119O3JldHVybiBhLnNldFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWN0b3JCQm94LHI9c1tpXSxvPW4ucmFkaWFsQXhpcy5fcmwsbD0ob1sxXS1vWzBdKS8oMS1lLmhvbGUpO2EucmFuZ2U9W3RbclswXV0qbCx0W3JbMV1dKmxdfSxhLmlzUHRXaXRoaW5SYW5nZT0ieCI9PT1pP2Z1bmN0aW9uKHQpe3JldHVybiBuLmlzUHRJbnNpZGUodCl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9LGEuc2V0UmFuZ2UoKSxhLnNldFNjYWxlKCksYX0sTy5kb0F1dG9SYW5nZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2Qsbj10aGlzLnJhZGlhbEF4aXMsaT1lLnJhZGlhbGF4aXM7bi5zZXRTY2FsZSgpLHAocixuKTt2YXIgYT1uLnJhbmdlO2kucmFuZ2U9YS5zbGljZSgpLGkuX2lucHV0LnJhbmdlPWEuc2xpY2UoKSxuLl9ybD1bbi5yMmwoYVswXSxudWxsLCJncmVnb3JpYW4iKSxuLnIybChhWzFdLG51bGwsImdyZWdvcmlhbiIpXX0sTy51cGRhdGVSYWRpYWxBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLGw9ci5pbm5lclJhZGl1cyxjPXIuY3gsZj1yLmN5LGg9ZS5yYWRpYWxheGlzLHA9RShlLnNlY3RvclswXSwzNjApLGQ9ci5yYWRpYWxBeGlzLGc9bDxhO3IuZmlsbFZpZXdJbml0aWFsS2V5KCJyYWRpYWxheGlzLmFuZ2xlIixoLmFuZ2xlKSxyLmZpbGxWaWV3SW5pdGlhbEtleSgicmFkaWFsYXhpcy5yYW5nZSIsZC5yYW5nZS5zbGljZSgpKSxkLnNldEdlb21ldHJ5KCksImF1dG8iPT09ZC50aWNrYW5nbGUmJnA+OTAmJnA8PTI3MCYmKGQudGlja2FuZ2xlPTE4MCk7dmFyIHY9ZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiKyhkLmwycCh0LngpK2wpKyIsMCkifSxtPUkoaCk7aWYoci5yYWRpYWxUaWNrTGF5b3V0IT09bSYmKGlbInJhZGlhbC1heGlzIl0uc2VsZWN0QWxsKCIueHRpY2siKS5yZW1vdmUoKSxyLnJhZGlhbFRpY2tMYXlvdXQ9bSksZyl7ZC5zZXRTY2FsZSgpO3ZhciB5PXUuY2FsY1RpY2tzKGQpLHg9dS5jbGlwRW5kcyhkLHkpLGI9dS5nZXRUaWNrU2lnbnMoZClbMl07dS5kcmF3VGlja3MobixkLHt2YWxzOnksbGF5ZXI6aVsicmFkaWFsLWF4aXMiXSxwYXRoOnUubWFrZVRpY2tQYXRoKGQsMCxiKSx0cmFuc0ZuOnYsY3Jpc3A6ITF9KSx1LmRyYXdHcmlkKG4sZCx7dmFsczp4LGxheWVyOmlbInJhZGlhbC1ncmlkIl0scGF0aDpmdW5jdGlvbih0KXtyZXR1cm4gci5wYXRoQXJjKGQucjJwKHQueCkrbCl9LHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksdS5kcmF3TGFiZWxzKG4sZCx7dmFsczp5LGxheWVyOmlbInJhZGlhbC1heGlzIl0sdHJhbnNGbjp2LGxhYmVsRm5zOnUubWFrZUxhYmVsRm5zKGQsMCl9KX12YXIgXz1yLnJhZGlhbEF4aXNBbmdsZT1yLnZhbmdsZXM/TChEKEMoaC5hbmdsZSksci52YW5nbGVzKSk6aC5hbmdsZSx3PVIoYyxmKSxrPXcrRigtXyk7UChpWyJyYWRpYWwtYXhpcyJdLGcmJihoLnNob3d0aWNrbGFiZWxzfHxoLnRpY2tzKSx7dHJhbnNmb3JtOmt9KSxQKGlbInJhZGlhbC1ncmlkIl0sZyYmaC5zaG93Z3JpZCx7dHJhbnNmb3JtOnd9KSxQKGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIiksZyYmaC5zaG93bGluZSx7eDE6bCx5MTowLHgyOmEseTI6MCx0cmFuc2Zvcm06a30pLmF0dHIoInN0cm9rZS13aWR0aCIsaC5saW5ld2lkdGgpLmNhbGwocy5zdHJva2UsaC5saW5lY29sb3IpfSxPLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nZCxpPXRoaXMucmFkaXVzLGE9dGhpcy5jeCxvPXRoaXMuY3kscz1lLnJhZGlhbGF4aXMsYz10aGlzLmlkKyJ0aXRsZSIsdT12b2lkIDAhPT1yP3I6dGhpcy5yYWRpYWxBeGlzQW5nbGUsZj1DKHUpLGg9TWF0aC5jb3MoZikscD1NYXRoLnNpbihmKSxkPTA7aWYocy50aXRsZSl7dmFyIGc9bC5iQm94KHRoaXMubGF5ZXJzWyJyYWRpYWwtYXhpcyJdLm5vZGUoKSkuaGVpZ2h0LHY9cy50aXRsZS5mb250LnNpemU7ZD0iY291bnRlcmNsb2Nrd2lzZSI9PT1zLnNpZGU/LWctLjQqdjpnKy44KnZ9dGhpcy5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl09bS5kcmF3KG4sYyx7cHJvcENvbnRhaW5lcjpzLHByb3BOYW1lOnRoaXMuaWQrIi5yYWRpYWxheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpTKG4sIkNsaWNrIHRvIGVudGVyIHJhZGlhbCBheGlzIHRpdGxlIiksYXR0cmlidXRlczp7eDphK2kvMipoK2QqcCx5Om8taS8yKnArZCpoLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOi11fX0pfSxPLnVwZGF0ZUFuZ3VsYXJBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLGw9ci5pbm5lclJhZGl1cyxjPXIuY3gsZj1yLmN5LGg9ZS5hbmd1bGFyYXhpcyxwPXIuYW5ndWxhckF4aXM7ci5maWxsVmlld0luaXRpYWxLZXkoImFuZ3VsYXJheGlzLnJvdGF0aW9uIixoLnJvdGF0aW9uKSxwLnNldEdlb21ldHJ5KCkscC5zZXRTY2FsZSgpO3ZhciBkPWZ1bmN0aW9uKHQpe3JldHVybiBwLnQyZyh0LngpfTsibGluZWFyIj09PXAudHlwZSYmInJhZGlhbnMiPT09cC50aGV0YXVuaXQmJihwLnRpY2swPUwocC50aWNrMCkscC5kdGljaz1MKHAuZHRpY2spKTt2YXIgZz1mdW5jdGlvbih0KXtyZXR1cm4gUihjK2EqTWF0aC5jb3ModCksZi1hKk1hdGguc2luKHQpKX0sdj11Lm1ha2VMYWJlbEZucyhwLDApLmxhYmVsU3RhbmRvZmYsbT17eEZuOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCk7cmV0dXJuIE1hdGguY29zKGUpKnZ9LHlGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpLHI9TWF0aC5zaW4oZSk+MD8uMjoxO3JldHVybi1NYXRoLnNpbihlKSoodit0LmZvbnRTaXplKnIpK01hdGguYWJzKE1hdGguY29zKGUpKSoodC5mb250U2l6ZSpUKX0sYW5jaG9yRm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0saGVpZ2h0Rm46ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWQodCk7cmV0dXJuLS41KigxK01hdGguc2luKG4pKSpyfX0seT1JKGgpO3IuYW5ndWxhclRpY2tMYXlvdXQhPT15JiYoaVsiYW5ndWxhci1heGlzIl0uc2VsZWN0QWxsKCIuIitwLl9pZCsidGljayIpLnJlbW92ZSgpLHIuYW5ndWxhclRpY2tMYXlvdXQ9eSk7dmFyIHgsYj11LmNhbGNUaWNrcyhwKTtpZigibGluZWFyIj09PWUuZ3JpZHNoYXBlPyh4PWIubWFwKGQpLG8uYW5nbGVEZWx0YSh4WzBdLHhbMV0pPDAmJih4PXguc2xpY2UoKS5yZXZlcnNlKCkpKTp4PW51bGwsci52YW5nbGVzPXgsImNhdGVnb3J5Ij09PXAudHlwZSYmKGI9Yi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG8uaXNBbmdsZUluc2lkZVNlY3RvcihkKHQpLHIuc2VjdG9ySW5SYWQpfSkpLHAudmlzaWJsZSl7dmFyIF89Imluc2lkZSI9PT1wLnRpY2tzPy0xOjEsdz0ocC5saW5ld2lkdGh8fDEpLzI7dS5kcmF3VGlja3MobixwLHt2YWxzOmIsbGF5ZXI6aVsiYW5ndWxhci1heGlzIl0scGF0aDoiTSIrXyp3KyIsMGgiK18qcC50aWNrbGVuLHRyYW5zRm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KTtyZXR1cm4gZyhlKStGKC1MKGUpKX0sY3Jpc3A6ITF9KSx1LmRyYXdHcmlkKG4scCx7dmFsczpiLGxheWVyOmlbImFuZ3VsYXItZ3JpZCJdLHBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPU1hdGguY29zKGUpLG49TWF0aC5zaW4oZSk7cmV0dXJuIk0iK1tjK2wqcixmLWwqbl0rIkwiK1tjK2EqcixmLWEqbl19LHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksdS5kcmF3TGFiZWxzKG4scCx7dmFsczpiLGxheWVyOmlbImFuZ3VsYXItYXhpcyJdLHJlcG9zaXRpb25PblVwZGF0ZTohMCx0cmFuc0ZuOmZ1bmN0aW9uKHQpe3JldHVybiBnKGQodCkpfSxsYWJlbEZuczptfSl9UChpWyJhbmd1bGFyLWxpbmUiXS5zZWxlY3QoInBhdGgiKSxoLnNob3dsaW5lLHtkOnIucGF0aFN1YnBsb3QoKSx0cmFuc2Zvcm06UihjLGYpfSkuYXR0cigic3Ryb2tlLXdpZHRoIixoLmxpbmV3aWR0aCkuY2FsbChzLnN0cm9rZSxoLmxpbmVjb2xvcil9LE8udXBkYXRlRng9ZnVuY3Rpb24odCxlKXt0aGlzLmdkLl9jb250ZXh0LnN0YXRpY1Bsb3R8fCh0aGlzLnVwZGF0ZUFuZ3VsYXJEcmFnKHQpLHRoaXMudXBkYXRlUmFkaWFsRHJhZyh0LGUsMCksdGhpcy51cGRhdGVSYWRpYWxEcmFnKHQsZSwxKSx0aGlzLnVwZGF0ZU1haW5EcmFnKHQpKX0sTy51cGRhdGVNYWluRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxvPWUubGF5ZXJzLHM9dC5fem9vbWxheWVyLGw9QS5NSU5aT09NLGM9QS5PRkZFREdFLHU9ZS5yYWRpdXMsZj1lLmlubmVyUmFkaXVzLGg9ZS5jeCxwPWUuY3ksbT1lLmN4eCxfPWUuY3l5LHc9ZS5zZWN0b3JJblJhZCxrPWUudmFuZ2xlcyxUPWUucmFkaWFsQXhpcyxTPU0uY2xhbXBUaW55LEU9TS5maW5kWFlhdExlbmd0aCxDPU0uZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyxMPUEuY29ybmVySGFsZldpZHRoLHo9QS5jb3JuZXJMZW4vMixPPWQubWFrZURyYWdnZXIobywicGF0aCIsIm1haW5kcmFnIiwiY3Jvc3NoYWlyIik7bi5zZWxlY3QoTykuYXR0cigiZCIsZS5wYXRoU3VicGxvdCgpKS5hdHRyKCJ0cmFuc2Zvcm0iLFIoaCxwKSk7dmFyIEksRCxQLEYsQixOLGosVixVLHE9e2VsZW1lbnQ6TyxnZDpyLHN1YnBsb3Q6ZS5pZCxwbG90aW5mbzp7aWQ6ZS5pZCx4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXN9LHhheGVzOltlLnhheGlzXSx5YXhlczpbZS55YXhpc119O2Z1bmN0aW9uIEgodCxlKXtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpfWZ1bmN0aW9uIEcodCxlKXtyZXR1cm4gSCh0LW0sZS1fKX1mdW5jdGlvbiBZKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIoXy1lLHQtbSl9ZnVuY3Rpb24gVyh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oLWUpXX1mdW5jdGlvbiBYKHQscil7aWYoMD09PXQpcmV0dXJuIGUucGF0aFNlY3RvcigyKkwpO3ZhciBuPXovdCxpPXItbixhPXIrbixvPU1hdGgubWF4KDAsTWF0aC5taW4odCx1KSkscz1vLUwsbD1vK0w7cmV0dXJuIk0iK1cocyxpKSsiQSIrW3Msc10rIiAwLDAsMCAiK1cocyxhKSsiTCIrVyhsLGEpKyJBIitbbCxsXSsiIDAsMCwxICIrVyhsLGkpKyJaIn1mdW5jdGlvbiBaKHQscixuKXtpZigwPT09dClyZXR1cm4gZS5wYXRoU2VjdG9yKDIqTCk7dmFyIGksYSxvPVcodCxyKSxzPVcodCxuKSxsPVMoKG9bMF0rc1swXSkvMiksYz1TKChvWzFdK3NbMV0pLzIpO2lmKGwmJmMpe3ZhciB1PWMvbCxmPS0xL3UsaD1FKEwsdSxsLGMpO2k9RSh6LGYsaFswXVswXSxoWzBdWzFdKSxhPUUoeixmLGhbMV1bMF0saFsxXVsxXSl9ZWxzZXt2YXIgcCxkO2M/KHA9eixkPUwpOihwPUwsZD16KSxpPVtbbC1wLGMtZF0sW2wrcCxjLWRdXSxhPVtbbC1wLGMrZF0sW2wrcCxjK2RdXX1yZXR1cm4iTSIraS5qb2luKCJMIikrIkwiK2EucmV2ZXJzZSgpLmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gJCh0LGUpe3JldHVybiBlPU1hdGgubWF4KE1hdGgubWluKGUsdSksZiksdDxjP3Q9MDp1LXQ8Yz90PXU6ZTxjP2U9MDp1LWU8YyYmKGU9dSksTWF0aC5hYnMoZS10KT5sPyh0PGU/KFA9dCxGPWUpOihQPWUsRj10KSwhMCk6KFA9bnVsbCxGPW51bGwsITEpfWZ1bmN0aW9uIEoodCxlKXt0PXR8fEIsZT1lfHwiTTAsMFoiLFYuYXR0cigiZCIsdCksVS5hdHRyKCJkIixlKSxkLnRyYW5zaXRpb25ab29tYm94KFYsVSxOLGopLE49ITB9ZnVuY3Rpb24gSyh0LHIpe3ZhciBuLGksYT1JK3Qsbz1EK3Iscz1HKEksRCksbD1NYXRoLm1pbihHKGEsbyksdSksYz1ZKEksRCk7JChzLGwpJiYobj1CK2UucGF0aFNlY3RvcihGKSxQJiYobis9ZS5wYXRoU2VjdG9yKFApKSxpPVgoUCxjKStYKEYsYykpLEoobixpKX1mdW5jdGlvbiBRKHQsZSxyLG4pe3ZhciBpPU0uZmluZEludGVyc2VjdGlvblhZKHIsbixyLFt0LW0sXy1lXSk7cmV0dXJuIEgoaVswXSxpWzFdKX1mdW5jdGlvbiB0dCh0LHIpe3ZhciBuLGksYT1JK3Qsbz1EK3Iscz1ZKEksRCksbD1ZKGEsbyksYz1DKHMsayksZj1DKGwsayk7JChRKEksRCxjWzBdLGNbMV0pLE1hdGgubWluKFEoYSxvLGZbMF0sZlsxXSksdSkpJiYobj1CK2UucGF0aFNlY3RvcihGKSxQJiYobis9ZS5wYXRoU2VjdG9yKFApKSxpPVtaKFAsY1swXSxjWzFdKSxaKEYsY1swXSxjWzFdKV0uam9pbigiICIpKSxKKG4saSl9ZnVuY3Rpb24gZXQoKXtpZihkLnJlbW92ZVpvb21ib3gociksbnVsbCE9PVAmJm51bGwhPT1GKXtkLnNob3dEb3VibGVDbGlja05vdGlmaWVyKHIpO3ZhciB0PVQuX3JsLG49KHRbMV0tdFswXSkvKDEtZi91KS91LGk9W3RbMF0rKFAtZikqbix0WzBdKyhGLWYpKm5dO2EuY2FsbCgiX2d1aVJlbGF5b3V0IixyLGUuaWQrIi5yYWRpYWxheGlzLnJhbmdlIixpKX19ZnVuY3Rpb24gcnQodCxuKXt2YXIgaT1yLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtpZihkLnJlbW92ZVpvb21ib3gociksMj09PXQpe3ZhciBvPXt9O2Zvcih2YXIgcyBpbiBlLnZpZXdJbml0aWFsKW9bZS5pZCsiLiIrc109ZS52aWV3SW5pdGlhbFtzXTtyLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHIsbyl9aS5pbmRleE9mKCJzZWxlY3QiKT4tMSYmMT09PXQmJngobixyLFtlLnhheGlzXSxbZS55YXhpc10sZS5pZCxxKSxpLmluZGV4T2YoImV2ZW50Iik+LTEmJnYuY2xpY2socixuLGUuaWQpfXEucHJlcEZuPWZ1bmN0aW9uKHQsbixhKXt2YXIgbz1yLl9mdWxsTGF5b3V0LmRyYWdtb2RlLGw9Ty5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihJPW4tbC5sZWZ0LEQ9YS1sLnRvcCxrKXt2YXIgYz1NLmZpbmRQb2x5Z29uT2Zmc2V0KHUsd1swXSx3WzFdLGspO0krPW0rY1swXSxEKz1fK2NbMV19c3dpdGNoKG8pe2Nhc2Uiem9vbSI6cS5tb3ZlRm49az90dDpLLHEuY2xpY2tGbj1ydCxxLmRvbmVGbj1ldCxmdW5jdGlvbigpe1A9bnVsbCxGPW51bGwsQj1lLnBhdGhTdWJwbG90KCksTj0hMTt2YXIgdD1yLl9mdWxsTGF5b3V0W2UuaWRdO2o9aSh0LmJnY29sb3IpLmdldEx1bWluYW5jZSgpLChWPWQubWFrZVpvb21ib3gocyxqLGgscCxCKSkuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLFU9ZC5tYWtlQ29ybmVycyhzLGgscCksYihzKX0oKTticmVhaztjYXNlInNlbGVjdCI6Y2FzZSJsYXNzbyI6eSh0LG4sYSxxLG8pfX0sTy5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXt2LmhvdmVyKHIsdCxlLmlkKSxyLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9TyxyLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9ZS5pZH0sTy5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3IuX2RyYWdnaW5nfHxnLnVuaG92ZXIocix0KX0sZy5pbml0KHEpfSxPLnVwZGF0ZVJhZGlhbERyYWc9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMscz1pLmdkLGw9aS5sYXllcnMsYz1pLnJhZGl1cyx1PWkuaW5uZXJSYWRpdXMsZj1pLmN4LGg9aS5jeSxwPWkucmFkaWFsQXhpcyx2PUEucmFkaWFsRHJhZ0JveFNpemUsbT12LzI7aWYocC52aXNpYmxlKXt2YXIgeSx4LF8sVD1DKGkucmFkaWFsQXhpc0FuZ2xlKSxNPXAuX3JsLFM9TVswXSxFPU1bMV0sej1NW3JdLE89Ljc1KihNWzFdLU1bMF0pLygxLWUuaG9sZSkvYztyPyh5PWYrKGMrbSkqTWF0aC5jb3MoVCkseD1oLShjK20pKk1hdGguc2luKFQpLF89InJhZGlhbGRyYWciKTooeT1mKyh1LW0pKk1hdGguY29zKFQpLHg9aC0odS1tKSpNYXRoLnNpbihUKSxfPSJyYWRpYWxkcmFnLWlubmVyIik7dmFyIEksQixOLGo9ZC5tYWtlUmVjdERyYWdnZXIobCxfLCJjcm9zc2hhaXIiLC1tLC1tLHYsdiksVj17ZWxlbWVudDpqLGdkOnN9O1Aobi5zZWxlY3QoaikscC52aXNpYmxlJiZ1PGMse3RyYW5zZm9ybTpSKHkseCl9KSxWLnByZXBGbj1mdW5jdGlvbigpe0k9bnVsbCxCPW51bGwsTj1udWxsLFYubW92ZUZuPVUsVi5kb25lRm49cSxiKHQuX3pvb21sYXllcil9LFYuY2xhbXBGbj1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLnNxcnQodCp0K2UqZSk8QS5NSU5EUkFHJiYodD0wLGU9MCksW3QsZV19LGcuaW5pdChWKX1mdW5jdGlvbiBVKHQsZSl7aWYoSSlJKHQsZSk7ZWxzZXt2YXIgcj1bdCwtZV0sbj1bTWF0aC5jb3MoVCksTWF0aC5zaW4oVCldLGk9TWF0aC5hYnMoby5kb3QocixuKS9NYXRoLnNxcnQoby5kb3QocixyKSkpO2lzTmFOKGkpfHwoST1pPC41P0g6Ryl9fWZ1bmN0aW9uIHEoKXtudWxsIT09Qj9hLmNhbGwoIl9ndWlSZWxheW91dCIscyxpLmlkKyIucmFkaWFsYXhpcy5hbmdsZSIsQik6bnVsbCE9PU4mJmEuY2FsbCgiX2d1aVJlbGF5b3V0IixzLGkuaWQrIi5yYWRpYWxheGlzLnJhbmdlWyIrcisiXSIsTil9ZnVuY3Rpb24gSCh0LGUpe2lmKDAhPT1yKXt2YXIgbj15K3QsYT14K2U7Qj1NYXRoLmF0YW4yKGgtYSxuLWYpLGkudmFuZ2xlcyYmKEI9RChCLGkudmFuZ2xlcykpLEI9TChCKTt2YXIgbz1SKGYsaCkrRigtQik7bFsicmFkaWFsLWF4aXMiXS5hdHRyKCJ0cmFuc2Zvcm0iLG8pLGxbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIikuYXR0cigidHJhbnNmb3JtIixvKTt2YXIgcz1pLmdkLl9mdWxsTGF5b3V0LGM9c1tpLmlkXTtpLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZShzLGMsQil9fWZ1bmN0aW9uIEcodCxlKXt2YXIgbj1vLmRvdChbdCwtZV0sW01hdGguY29zKFQpLE1hdGguc2luKFQpXSk7aWYoTj16LU8qbixPPjA9PShyP04+UzpOPEUpKXt2YXIgbD1zLl9mdWxsTGF5b3V0LGM9bFtpLmlkXTtwLnJhbmdlW3JdPU4scC5fcmxbcl09TixpLnVwZGF0ZVJhZGlhbEF4aXMobCxjKSxpLnhheGlzLnNldFJhbmdlKCksaS54YXhpcy5zZXRTY2FsZSgpLGkueWF4aXMuc2V0UmFuZ2UoKSxpLnlheGlzLnNldFNjYWxlKCk7dmFyIHU9ITE7Zm9yKHZhciBmIGluIGkudHJhY2VIYXNoKXt2YXIgaD1pLnRyYWNlSGFzaFtmXSxkPW8uZmlsdGVyVmlzaWJsZShoKTtoWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdChzLGksZCxjKSxhLnRyYWNlSXMoZiwiZ2wiKSYmZC5sZW5ndGgmJih1PSEwKX11JiYodyhzKSxrKHMpKX1lbHNlIE49bnVsbH19LE8udXBkYXRlQW5ndWxhckRyYWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2QsaT1lLmxheWVycyxzPWUucmFkaXVzLGM9ZS5hbmd1bGFyQXhpcyx1PWUuY3gsZj1lLmN5LGg9ZS5jeHgscD1lLmN5eSx2PUEuYW5ndWxhckRyYWdCb3hTaXplLG09ZC5tYWtlRHJhZ2dlcihpLCJwYXRoIiwiYW5ndWxhcmRyYWciLCJtb3ZlIikseT17ZWxlbWVudDptLGdkOnJ9O2Z1bmN0aW9uIHgodCxlKXtyZXR1cm4gTWF0aC5hdGFuMihwK3YtZSx0LWgtdil9bi5zZWxlY3QobSkuYXR0cigiZCIsZS5wYXRoQW5udWx1cyhzLHMrdikpLmF0dHIoInRyYW5zZm9ybSIsUih1LGYpKS5jYWxsKF8sIm1vdmUiKTt2YXIgVCxNLFMsRSxDLHosTz1pLmZyb250cGxvdC5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLEk9Ty5zZWxlY3RBbGwoIi5wb2ludCIpLEQ9Ty5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKTtmdW5jdGlvbiBQKHQscyl7dmFyIGQ9ZS5nZC5fZnVsbExheW91dCxnPWRbZS5pZF0sdj14KFQrdCxNK3MpLG09TCh2LXopO2lmKEU9UyttLGkuZnJvbnRwbG90LmF0dHIoInRyYW5zZm9ybSIsUihlLnhPZmZzZXQyLGUueU9mZnNldDIpK0YoWy1tLGgscF0pKSxlLnZhbmdsZXMpe0M9ZS5yYWRpYWxBeGlzQW5nbGUrbTt2YXIgeT1SKHUsZikrRigtbSksYj1SKHUsZikrRigtQyk7aS5iZy5hdHRyKCJ0cmFuc2Zvcm0iLHkpLGlbInJhZGlhbC1ncmlkIl0uYXR0cigidHJhbnNmb3JtIix5KSxpWyJyYWRpYWwtYXhpcyJdLmF0dHIoInRyYW5zZm9ybSIsYiksaVsicmFkaWFsLWxpbmUiXS5zZWxlY3QoImxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGIpLGUudXBkYXRlUmFkaWFsQXhpc1RpdGxlKGQsZyxDKX1lbHNlIGUuY2xpcFBhdGhzLmZvclRyYWNlcy5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLFIoaCxwKStGKG0pKTtJLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPWwuZ2V0VHJhbnNsYXRlKHQpO3QuYXR0cigidHJhbnNmb3JtIixSKGUueCxlLnkpK0YoW21dKSl9KSxELmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXQuc2VsZWN0KCJ0ZXh0Iikscj1sLmdldFRyYW5zbGF0ZSh0KTt0LmF0dHIoInRyYW5zZm9ybSIsRihbbSxlLmF0dHIoIngiKSxlLmF0dHIoInkiKV0pK1Ioci54LHIueSkpfSksYy5yb3RhdGlvbj1vLm1vZEhhbGYoRSwzNjApLGUudXBkYXRlQW5ndWxhckF4aXMoZCxnKSxlLl9oYXNDbGlwT25BeGlzRmFsc2UmJiFvLmlzRnVsbENpcmNsZShlLnNlY3RvckluUmFkKSYmTy5jYWxsKGwuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxlKTt2YXIgXz0hMTtmb3IodmFyIEEgaW4gZS50cmFjZUhhc2gpaWYoYS50cmFjZUlzKEEsImdsIikpe3ZhciBQPWUudHJhY2VIYXNoW0FdLEI9by5maWx0ZXJWaXNpYmxlKFApO1BbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHIsZSxCLGcpLEIubGVuZ3RoJiYoXz0hMCl9XyYmKHcociksayhyKSl9ZnVuY3Rpb24gQigpe0Quc2VsZWN0KCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgdD17fTt0W2UuaWQrIi5hbmd1bGFyYXhpcy5yb3RhdGlvbiJdPUUsZS52YW5nbGVzJiYodFtlLmlkKyIucmFkaWFsYXhpcy5hbmdsZSJdPUMpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixyLHQpfXkucHJlcEZuPWZ1bmN0aW9uKHIsbixpKXt2YXIgYT10W2UuaWRdO1M9YS5hbmd1bGFyYXhpcy5yb3RhdGlvbjt2YXIgbz1tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1Q9bi1vLmxlZnQsTT1pLW8udG9wLHo9eChULE0pLHkubW92ZUZuPVAseS5kb25lRm49QixiKHQuX3pvb21sYXllcil9LGUudmFuZ2xlcyYmIW8uaXNGdWxsQ2lyY2xlKGUuc2VjdG9ySW5SYWQpJiYoeS5wcmVwRm49by5ub29wLF8obi5zZWxlY3QobSksbnVsbCkpLGcuaW5pdCh5KX0sTy5pc1B0SW5zaWRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VjdG9ySW5SYWQscj10aGlzLnZhbmdsZXMsbj10aGlzLmFuZ3VsYXJBeGlzLmMyZyh0LnRoZXRhKSxpPXRoaXMucmFkaWFsQXhpcyxhPWkuYzJsKHQucikscz1pLl9ybDtyZXR1cm4ocj9NLmlzUHRJbnNpZGVQb2x5Z29uOm8uaXNQdEluc2lkZVNlY3RvcikoYSxuLHMsZSxyKX0sTy5wYXRoQXJjPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VjdG9ySW5SYWQscj10aGlzLnZhbmdsZXM7cmV0dXJuKHI/TS5wYXRoUG9seWdvbjpvLnBhdGhBcmMpKHQsZVswXSxlWzFdLHIpfSxPLnBhdGhTZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcztyZXR1cm4ocj9NLnBhdGhQb2x5Z29uOm8ucGF0aFNlY3RvcikodCxlWzBdLGVbMV0scil9LE8ucGF0aEFubnVsdXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnNlY3RvckluUmFkLG49dGhpcy52YW5nbGVzO3JldHVybihuP00ucGF0aFBvbHlnb25Bbm51bHVzOm8ucGF0aEFubnVsdXMpKHQsZSxyWzBdLHJbMV0sbil9LE8ucGF0aFN1YnBsb3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlubmVyUmFkaXVzLGU9dGhpcy5yYWRpdXM7cmV0dXJuIHQ/dGhpcy5wYXRoQW5udWx1cyh0LGUpOnRoaXMucGF0aFNlY3RvcihlKX0sTy5maWxsVmlld0luaXRpYWxLZXk9ZnVuY3Rpb24odCxlKXt0IGluIHRoaXMudmlld0luaXRpYWx8fCh0aGlzLnZpZXdJbml0aWFsW3RdPWUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjU5NSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiOjY2NSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjo2ODUsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjczOSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSI6NzQ3LCIuLi9jYXJ0ZXNpYW4vZHJhZ2JveCI6NzU2LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo3NjUsIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NzY2LCIuLi9wbG90cyI6ODEwLCIuL2NvbnN0YW50cyI6ODExLCIuL2hlbHBlcnMiOjgxMiwiLi9zZXRfY29udmVydCI6ODIzLGQzOjE1NCx0aW55Y29sb3IyOjUyMX1dLDgyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGE9bi5kZWcycmFkLG89bi5yYWQyZGVnO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGkodCxyKSx0Ll9pZCl7Y2FzZSJ4IjpjYXNlInJhZGlhbGF4aXMiOiFmdW5jdGlvbih0LGUpe3ZhciByPWUuX3N1YnBsb3Q7dC5zZXRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBlPXQuX3JsWzBdLG49dC5fcmxbMV0saT1yLmlubmVyUmFkaXVzLGE9KHIucmFkaXVzLWkpLyhuLWUpLG89aS9hLHM9ZT5uP2Z1bmN0aW9uKHQpe3JldHVybiB0PD0wfTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MH07dC5jMmc9ZnVuY3Rpb24ocil7dmFyIG49dC5jMmwociktZTtyZXR1cm4ocyhuKT9uOjApK299LHQuZzJjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmwyYyhyK2Utbyl9LHQuZzJwPWZ1bmN0aW9uKHQpe3JldHVybiB0KmF9LHQuYzJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmcycCh0LmMyZyhlKSl9fX0odCxlKTticmVhaztjYXNlImFuZ3VsYXJheGlzIjohZnVuY3Rpb24odCxlKXt2YXIgcj10LnR5cGU7aWYoImxpbmVhciI9PT1yKXt2YXIgaT10LmQyYyxzPXQuYzJkO3QuZDJjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuImRlZ3JlZXMiPT09ZT9hKHQpOnR9KGkodCksZSl9LHQuYzJkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMoZnVuY3Rpb24odCxlKXtyZXR1cm4iZGVncmVlcyI9PT1lP28odCk6dH0odCxlKSl9fXQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUsaSl7dmFyIGEsbyxzPWVbaV0sbD1lLl9sZW5ndGgsYz1mdW5jdGlvbihyKXtyZXR1cm4gdC5kMmMocixlLnRoZXRhdW5pdCl9O2lmKHMpe2lmKG4uaXNUeXBlZEFycmF5KHMpJiYibGluZWFyIj09PXIpe2lmKGw9PT1zLmxlbmd0aClyZXR1cm4gcztpZihzLnN1YmFycmF5KXJldHVybiBzLnN1YmFycmF5KDAsbCl9Zm9yKGE9bmV3IEFycmF5KGwpLG89MDtvPGw7bysrKWFbb109YyhzW29dKX1lbHNle3ZhciB1PWkrIjAiLGY9ImQiK2ksaD11IGluIGU/YyhlW3VdKTowLHA9ZVtmXT9jKGVbZl0pOih0LnBlcmlvZHx8MipNYXRoLlBJKS9sO2ZvcihhPW5ldyBBcnJheShsKSxvPTA7bzxsO28rKylhW29dPWgrbypwfXJldHVybiBhfSx0LnNldEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGkscyxsLGMsdT1lLnNlY3RvcixmPXUubWFwKGEpLGg9e2Nsb2Nrd2lzZTotMSxjb3VudGVyY2xvY2t3aXNlOjF9W3QuZGlyZWN0aW9uXSxwPWEodC5yb3RhdGlvbiksZD1mdW5jdGlvbih0KXtyZXR1cm4gaCp0K3B9LGc9ZnVuY3Rpb24odCl7cmV0dXJuKHQtcCkvaH07c3dpdGNoKHIpe2Nhc2UibGluZWFyIjpzPWk9bi5pZGVudGl0eSxjPWEsbD1vLHQucmFuZ2U9bi5pc0Z1bGxDaXJjbGUoZik/W3VbMF0sdVswXSszNjBdOmYubWFwKGcpLm1hcChvKTticmVhaztjYXNlImNhdGVnb3J5Ijp2YXIgdj10Ll9jYXRlZ29yaWVzLmxlbmd0aCxtPXQucGVyaW9kP01hdGgubWF4KHQucGVyaW9kLHYpOnY7cz1jPWZ1bmN0aW9uKHQpe3JldHVybiAyKnQqTWF0aC5QSS9tfSxpPWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQqbS9NYXRoLlBJLzJ9LHQucmFuZ2U9WzAsbV19dC5jMmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQocyh0KSl9LHQuZzJjPWZ1bmN0aW9uKHQpe3JldHVybiBpKGcodCkpfSx0LnQyZz1mdW5jdGlvbih0KXtyZXR1cm4gZChjKHQpKX0sdC5nMnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwoZyh0KSl9fX0odCxlKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjc2Nn1dLDgyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4vZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYz1vLnR5cGUsdT1vLmF0dHJpYnV0ZXMsZj1vLmhhbmRsZURlZmF1bHRzLGg9by5wYXJ0aXRpb258fCJ4IixwPWUuX3N1YnBsb3RzW2NdLGQ9cC5sZW5ndGgsZz1kJiZwWzBdLnJlcGxhY2UoL1xkKyQvLCIiKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCx1LHQsZSl9Zm9yKHZhciBtPTA7bTxkO20rKyl7dmFyIHk9cFttXTtzPXRbeV0/dFt5XTp0W3ldPXt9LGw9aS5uZXdDb250YWluZXIoZSx5LGcpLHYoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbik7dmFyIHg9e307eFtoXT1bbS9kLChtKzEpL2RdLGEobCxlLHYseCksby5pZD15LGYocyxsLHYsbyl9fX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuL2RvbWFpbiI6NzczfV0sODI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdGVybmFyeSIpLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsYT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXg7ci5uYW1lPSJ0ZXJuYXJ5Ijt2YXIgbz1yLmF0dHI9InN1YnBsb3QiO3IuaWRSb290PSJ0ZXJuYXJ5IixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9YSgidGVybmFyeSIpLChyLmF0dHJpYnV0ZXM9e30pW29dPXt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6InRlcm5hcnkiLGVkaXRUeXBlOiJjYWxjIn0sci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWUuX3N1YnBsb3RzLnRlcm5hcnksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9aShyLCJ0ZXJuYXJ5IixzKSxjPWVbc10uX3N1YnBsb3Q7Y3x8KGM9bmV3IG4oe2lkOnMsZ3JhcGhEaXY6dCxjb250YWluZXI6ZS5fdGVybmFyeWxheWVyLm5vZGUoKX0sZSksZVtzXS5fc3VicGxvdD1jKSxjLnBsb3QobCxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLnRlcm5hcnl8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLnBsb3RDb250YWluZXIucmVtb3ZlKCkscy5jbGlwRGVmLnJlbW92ZSgpLHMuY2xpcERlZlJlbGF0aXZlLnJlbW92ZSgpLHMubGF5ZXJzWyJhLXRpdGxlIl0ucmVtb3ZlKCkscy5sYXllcnNbImItdGl0bGUiXS5yZW1vdmUoKSxzLmxheWVyc1siYy10aXRsZSJdLnJlbW92ZSgpKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6Nzg0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MjYsIi4vbGF5b3V0X2RlZmF1bHRzIjo4MjcsIi4vdGVybmFyeSI6ODI4fV0sODI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD17dGl0bGU6YS50aXRsZSxjb2xvcjphLmNvbG9yLHRpY2ttb2RlOmEudGlja21vZGUsbnRpY2tzOnMoe30sYS5udGlja3Mse2RmbHQ6NixtaW46MX0pLHRpY2swOmEudGljazAsZHRpY2s6YS5kdGljayx0aWNrdmFsczphLnRpY2t2YWxzLHRpY2t0ZXh0OmEudGlja3RleHQsdGlja3M6YS50aWNrcyx0aWNrbGVuOmEudGlja2xlbix0aWNrd2lkdGg6YS50aWNrd2lkdGgsdGlja2NvbG9yOmEudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmEuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6YS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmEudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDphLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6YS50aWNrc3VmZml4LHNob3dleHBvbmVudDphLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDphLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmEuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6YS50aWNrZm9udCx0aWNrYW5nbGU6YS50aWNrYW5nbGUsdGlja2Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmEudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmEuaG92ZXJmb3JtYXQsc2hvd2xpbmU6cyh7fSxhLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmEubGluZWNvbG9yLGxpbmV3aWR0aDphLmxpbmV3aWR0aCxzaG93Z3JpZDpzKHt9LGEuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6YS5ncmlkY29sb3IsZ3JpZHdpZHRoOmEuZ3JpZHdpZHRoLGxheWVyOmEubGF5ZXIsbWluOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH0sX2RlcHJlY2F0ZWQ6e3RpdGxlOmEuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmEuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sYz1lLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6InRlcm5hcnkifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxzdW06e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLG1pbjowfSxhYXhpczpsLGJheGlzOmwsY2F4aXM6bH0sInBsb3QiLCJmcm9tLXJvb3QiKTtjLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxjLmFheGlzLnVpcmV2aXNpb249Yy5iYXhpcy51aXJldmlzaW9uPWMuY2F4aXMudWlyZXZpc2lvbj17dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NjAsIi4uL2RvbWFpbiI6NzczfV0sODI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxjPXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIiksZj10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksaD1bImFheGlzIiwiYmF4aXMiLCJjYXhpcyJdO2Z1bmN0aW9uIHAodCxlLHIsYSl7dmFyIG8scyxsLGM9cigiYmdjb2xvciIpLHU9cigic3VtIik7YS5iZ0NvbG9yPW4uY29tYmluZShjLGEucGFwZXJfYmdjb2xvcik7Zm9yKHZhciBmPTA7ZjxoLmxlbmd0aDtmKyspcz10W289aFtmXV18fHt9LChsPWkubmV3Q29udGFpbmVyKGUsbykpLl9uYW1lPW8sZChzLGwsYSxlKTt2YXIgcD1lLmFheGlzLGc9ZS5iYXhpcyx2PWUuY2F4aXM7cC5taW4rZy5taW4rdi5taW4+PXUmJihwLm1pbj0wLGcubWluPTAsdi5taW49MCx0LmFheGlzJiZkZWxldGUgdC5hYXhpcy5taW4sdC5iYXhpcyYmZGVsZXRlIHQuYmF4aXMubWluLHQuY2F4aXMmJmRlbGV0ZSB0LmNheGlzLm1pbil9ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1mW2UuX25hbWVdO2Z1bmN0aW9uIG8ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGkscixuKX1vKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pLGUudHlwZT0ibGluZWFyIjt2YXIgaD1vKCJjb2xvciIpLHA9aCE9PWkuY29sb3IuZGZsdD9oOnIuZm9udC5jb2xvcixkPWUuX25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCksZz0iQ29tcG9uZW50ICIrZCx2PW8oInRpdGxlLnRleHQiLGcpO2UuX2hvdmVydGl0bGU9dj09PWc/djpkLGEuY29lcmNlRm9udChvLCJ0aXRsZS5mb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipyLmZvbnQuc2l6ZSksY29sb3I6cH0pLG8oIm1pbiIpLGModCxlLG8sImxpbmVhciIpLHModCxlLG8sImxpbmVhciIse30pLGwodCxlLG8se291dGVyVGlja3M6ITB9KSxvKCJzaG93dGlja2xhYmVscyIpJiYoYS5jb2VyY2VGb250KG8sInRpY2tmb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpyLmZvbnQuc2l6ZSxjb2xvcjpwfSksbygidGlja2FuZ2xlIiksbygidGlja2Zvcm1hdCIpKSx1KHQsZSxvLHtkZmx0Q29sb3I6aCxiZ0NvbG9yOnIuYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6aX0pLG8oImhvdmVyZm9ybWF0IiksbygibGF5ZXIiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6InRlcm5hcnkiLGF0dHJpYnV0ZXM6ZixoYW5kbGVEZWZhdWx0czpwLGZvbnQ6ZS5mb250LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6NzYyLCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6NzY3LCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo3NjgsIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3NjksIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjgyNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODI2fV0sODI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz1vLl8sbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSx1PXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi9wbG90cyIpLHA9dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxkPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksbT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCx5PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLHg9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LGI9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIF8odCxlKXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuaW5pdChlKSx0aGlzLm1ha2VGcmFtZXdvcmsoZSksdGhpcy5hVGlja0xheW91dD1udWxsLHRoaXMuYlRpY2tMYXlvdXQ9bnVsbCx0aGlzLmNUaWNrTGF5b3V0PW51bGx9ZS5leHBvcnRzPV87dmFyIHc9Xy5wcm90b3R5cGU7dy5pbml0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGFpbmVyPXQuX3Rlcm5hcnlsYXllcix0aGlzLmRlZnM9dC5fZGVmcyx0aGlzLmxheW91dElkPXQuX3VpZCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fX0sdy5wbG90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0aGlzLmlkXSxuPWUuX3NpemU7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXtpZighMT09PXRbaV1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhyKSx0aGlzLmFkanVzdExheW91dChyLG4pLGguZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ3JhcGhEaXYsdGhpcyx0LHIpLHRoaXMubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5jYWxsKGwuZmlsbCxyLmJnY29sb3IpfSx3Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaERpdixyPXRbdGhpcy5pZF0sbj10aGlzLmNsaXBJZD0iY2xpcCIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkLGk9dGhpcy5jbGlwSWRSZWxhdGl2ZT0iY2xpcC1yZWxhdGl2ZSIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkO3RoaXMuY2xpcERlZj1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsImNsaXBQYXRoIixuLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIil9KSx0aGlzLmNsaXBEZWZSZWxhdGl2ZT1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsImNsaXBQYXRoIixpLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIil9KSx0aGlzLnBsb3RDb250YWluZXI9by5lbnN1cmVTaW5nbGUodGhpcy5jb250YWluZXIsImciLHRoaXMuaWQpLHRoaXMudXBkYXRlTGF5ZXJzKHIpLGMuc2V0Q2xpcFVybCh0aGlzLmxheWVycy5iYWNrcGxvdCxuLGUpLGMuc2V0Q2xpcFVybCh0aGlzLmxheWVycy5ncmlkcyxuLGUpfSx3LnVwZGF0ZUxheWVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheWVycyxyPVsiZHJhZ2xheWVyIiwicGxvdGJnIiwiYmFja3Bsb3QiLCJncmlkcyJdOyJiZWxvdyB0cmFjZXMiPT09dC5hYXhpcy5sYXllciYmci5wdXNoKCJhYXhpcyIsImFsaW5lIiksImJlbG93IHRyYWNlcyI9PT10LmJheGlzLmxheWVyJiZyLnB1c2goImJheGlzIiwiYmxpbmUiKSwiYmVsb3cgdHJhY2VzIj09PXQuY2F4aXMubGF5ZXImJnIucHVzaCgiY2F4aXMiLCJjbGluZSIpLHIucHVzaCgiZnJvbnRwbG90IiksImFib3ZlIHRyYWNlcyI9PT10LmFheGlzLmxheWVyJiZyLnB1c2goImFheGlzIiwiYWxpbmUiKSwiYWJvdmUgdHJhY2VzIj09PXQuYmF4aXMubGF5ZXImJnIucHVzaCgiYmF4aXMiLCJibGluZSIpLCJhYm92ZSB0cmFjZXMiPT09dC5jYXhpcy5sYXllciYmci5wdXNoKCJjYXhpcyIsImNsaW5lIik7dmFyIGk9dGhpcy5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiZy50b3BsZXZlbCIpLmRhdGEocixTdHJpbmcpLGE9WyJhZ3JpZCIsImJncmlkIiwiY2dyaWQiXTtpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJ0b3BsZXZlbCAiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2VbdF09ciwiZnJvbnRwbG90Ij09PXQ/ci5hcHBlbmQoImciKS5jbGFzc2VkKCJzY2F0dGVybGF5ZXIiLCEwKToiYmFja3Bsb3QiPT09dD9yLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1hcGxheWVyIiwhMCk6InBsb3RiZyI9PT10P3IuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIik6ImFsaW5lIj09PXR8fCJibGluZSI9PT10fHwiY2xpbmUiPT09dD9yLmFwcGVuZCgicGF0aCIpOiJncmlkcyI9PT10JiZhLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1yLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdyaWQgIit0LCEwKX0pfSksaS5vcmRlcigpfTt2YXIgaz1NYXRoLnNxcnQoNC8zKTt3LmFkanVzdExheW91dD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxoPXRoaXMscD10LmRvbWFpbixkPShwLnhbMF0rcC54WzFdKS8yLGc9KHAueVswXStwLnlbMV0pLzIsdj1wLnhbMV0tcC54WzBdLG09cC55WzFdLXAueVswXSx5PXYqZS53LHg9bSplLmgsYj10LnN1bSxfPXQuYWF4aXMubWluLHc9dC5iYXhpcy5taW4sVD10LmNheGlzLm1pbjt5PmsqeD9pPShhPXgpKms6YT0oaT15KS9rLG89dippL3kscz1tKmEveCxyPWUubCtlLncqZC1pLzIsbj1lLnQrZS5oKigxLWcpLWEvMixoLngwPXIsaC55MD1uLGgudz1pLGguaD1hLGguc3VtPWIsaC54YXhpcz17dHlwZToibGluZWFyIixyYW5nZTpbXysyKlQtYixiLV8tMip3XSxkb21haW46W2Qtby8yLGQrby8yXSxfaWQ6IngifSx1KGgueGF4aXMsaC5ncmFwaERpdi5fZnVsbExheW91dCksaC54YXhpcy5zZXRTY2FsZSgpLGgueGF4aXMuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmE+PWguYWF4aXMucmFuZ2VbMF0mJnQuYTw9aC5hYXhpcy5yYW5nZVsxXSYmdC5iPj1oLmJheGlzLnJhbmdlWzFdJiZ0LmI8PWguYmF4aXMucmFuZ2VbMF0mJnQuYz49aC5jYXhpcy5yYW5nZVsxXSYmdC5jPD1oLmNheGlzLnJhbmdlWzBdfSxoLnlheGlzPXt0eXBlOiJsaW5lYXIiLHJhbmdlOltfLGItdy1UXSxkb21haW46W2ctcy8yLGcrcy8yXSxfaWQ6InkifSx1KGgueWF4aXMsaC5ncmFwaERpdi5fZnVsbExheW91dCksaC55YXhpcy5zZXRTY2FsZSgpLGgueWF4aXMuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3ZhciBBPWgueWF4aXMuZG9tYWluWzBdLE09aC5hYXhpcz1mKHt9LHQuYWF4aXMse3JhbmdlOltfLGItdy1UXSxzaWRlOiJsZWZ0Iix0aWNrYW5nbGU6KCt0LmFheGlzLnRpY2thbmdsZXx8MCktMzAsZG9tYWluOltBLEErcyprXSxhbmNob3I6ImZyZWUiLHBvc2l0aW9uOjAsX2lkOiJ5IixfbGVuZ3RoOml9KTt1KE0saC5ncmFwaERpdi5fZnVsbExheW91dCksTS5zZXRTY2FsZSgpO3ZhciBTPWguYmF4aXM9Zih7fSx0LmJheGlzLHtyYW5nZTpbYi1fLVQsd10sc2lkZToiYm90dG9tIixkb21haW46aC54YXhpcy5kb21haW4sYW5jaG9yOiJmcmVlIixwb3NpdGlvbjowLF9pZDoieCIsX2xlbmd0aDppfSk7dShTLGguZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLFMuc2V0U2NhbGUoKTt2YXIgRT1oLmNheGlzPWYoe30sdC5jYXhpcyx7cmFuZ2U6W2ItXy13LFRdLHNpZGU6InJpZ2h0Iix0aWNrYW5nbGU6KCt0LmNheGlzLnRpY2thbmdsZXx8MCkrMzAsZG9tYWluOltBLEErcyprXSxhbmNob3I6ImZyZWUiLHBvc2l0aW9uOjAsX2lkOiJ5IixfbGVuZ3RoOml9KTt1KEUsaC5ncmFwaERpdi5fZnVsbExheW91dCksRS5zZXRTY2FsZSgpO3ZhciBDPSJNIityKyIsIisobithKSsiaCIraSsibC0iK2kvMisiLC0iK2ErIloiO2guY2xpcERlZi5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixDKSxoLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQyk7dmFyIEw9Ik0wLCIrYSsiaCIraSsibC0iK2kvMisiLC0iK2ErIloiO2guY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEwpO3ZhciB6PSJ0cmFuc2xhdGUoIityKyIsIituKyIpIjtoLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLC5tYXBsYXllciIpLmF0dHIoInRyYW5zZm9ybSIseiksaC5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgTz0idHJhbnNsYXRlKCIrKHItUy5fb2Zmc2V0KSsiLCIrKG4rYSkrIikiO2gubGF5ZXJzLmJheGlzLmF0dHIoInRyYW5zZm9ybSIsTyksaC5sYXllcnMuYmdyaWQuYXR0cigidHJhbnNmb3JtIixPKTt2YXIgST0idHJhbnNsYXRlKCIrKHIraS8yKSsiLCIrbisiKXJvdGF0ZSgzMCl0cmFuc2xhdGUoMCwiKy1NLl9vZmZzZXQrIikiO2gubGF5ZXJzLmFheGlzLmF0dHIoInRyYW5zZm9ybSIsSSksaC5sYXllcnMuYWdyaWQuYXR0cigidHJhbnNmb3JtIixJKTt2YXIgRD0idHJhbnNsYXRlKCIrKHIraS8yKSsiLCIrbisiKXJvdGF0ZSgtMzApdHJhbnNsYXRlKDAsIistRS5fb2Zmc2V0KyIpIjtoLmxheWVycy5jYXhpcy5hdHRyKCJ0cmFuc2Zvcm0iLEQpLGgubGF5ZXJzLmNncmlkLmF0dHIoInRyYW5zZm9ybSIsRCksaC5kcmF3QXhlcyghMCksaC5sYXllcnMuYWxpbmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsTS5zaG93bGluZT8iTSIrcisiLCIrKG4rYSkrImwiK2kvMisiLC0iK2E6Ik0wLDAiKS5jYWxsKGwuc3Ryb2tlLE0ubGluZWNvbG9yfHwiIzAwMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChNLmxpbmV3aWR0aHx8MCkrInB4IiksaC5sYXllcnMuYmxpbmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsUy5zaG93bGluZT8iTSIrcisiLCIrKG4rYSkrImgiK2k6Ik0wLDAiKS5jYWxsKGwuc3Ryb2tlLFMubGluZWNvbG9yfHwiIzAwMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChTLmxpbmV3aWR0aHx8MCkrInB4IiksaC5sYXllcnMuY2xpbmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsRS5zaG93bGluZT8iTSIrKHIraS8yKSsiLCIrbisibCIraS8yKyIsIithOiJNMCwwIikuY2FsbChsLnN0cm9rZSxFLmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoRS5saW5ld2lkdGh8fDApKyJweCIpLGguZ3JhcGhEaXYuX2NvbnRleHQuc3RhdGljUGxvdHx8aC5pbml0SW50ZXJhY3Rpb25zKCksYy5zZXRDbGlwVXJsKGgubGF5ZXJzLmZyb250cGxvdCxoLl9oYXNDbGlwT25BeGlzRmFsc2U/bnVsbDpoLmNsaXBJZCxoLmdyYXBoRGl2KX0sdy5kcmF3QXhlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoRGl2LHI9dGhpcy5pZC5zdWJzdHIoNykrInRpdGxlIixuPXRoaXMubGF5ZXJzLGk9dGhpcy5hYXhpcyxhPXRoaXMuYmF4aXMsbz10aGlzLmNheGlzO2lmKHRoaXMuZHJhd0F4KGkpLHRoaXMuZHJhd0F4KGEpLHRoaXMuZHJhd0F4KG8pLHQpe3ZhciBsPU1hdGgubWF4KGkuc2hvd3RpY2tsYWJlbHM/aS50aWNrZm9udC5zaXplLzI6MCwoby5zaG93dGlja2xhYmVscz8uNzUqby50aWNrZm9udC5zaXplOjApKygib3V0c2lkZSI9PT1vLnRpY2tzPy44NypvLnRpY2tsZW46MCkpLGM9KGEuc2hvd3RpY2tsYWJlbHM/YS50aWNrZm9udC5zaXplOjApKygib3V0c2lkZSI9PT1hLnRpY2tzP2EudGlja2xlbjowKSszO25bImEtdGl0bGUiXT12LmRyYXcoZSwiYSIrcix7cHJvcENvbnRhaW5lcjppLHByb3BOYW1lOnRoaXMuaWQrIi5hYXhpcy50aXRsZSIscGxhY2Vob2xkZXI6cyhlLCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQSB0aXRsZSIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MCt0aGlzLncvMix5OnRoaXMueTAtaS50aXRsZS5mb250LnNpemUvMy1sLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSksblsiYi10aXRsZSJdPXYuZHJhdyhlLCJiIityLHtwcm9wQ29udGFpbmVyOmEscHJvcE5hbWU6dGhpcy5pZCsiLmJheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpzKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBCIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwLWMseTp0aGlzLnkwK3RoaXMuaCsuODMqYS50aXRsZS5mb250LnNpemUrYywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pLG5bImMtdGl0bGUiXT12LmRyYXcoZSwiYyIrcix7cHJvcENvbnRhaW5lcjpvLHByb3BOYW1lOnRoaXMuaWQrIi5jYXhpcy50aXRsZSIscGxhY2Vob2xkZXI6cyhlLCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQyB0aXRsZSIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MCt0aGlzLncrYyx5OnRoaXMueTArdGhpcy5oKy44MypvLnRpdGxlLmZvbnQuc2l6ZStjLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9fSx3LmRyYXdBeD1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZ3JhcGhEaXYsbj10Ll9uYW1lLGk9bi5jaGFyQXQoMCksYT10Ll9pZCxzPXRoaXMubGF5ZXJzW25dLGw9aSsidGlja0xheW91dCIsYz0oZT10KS50aWNrcytTdHJpbmcoZS50aWNrbGVuKStTdHJpbmcoZS5zaG93dGlja2xhYmVscyk7dGhpc1tsXSE9PWMmJihzLnNlbGVjdEFsbCgiLiIrYSsidGljayIpLnJlbW92ZSgpLHRoaXNbbF09YyksdC5zZXRTY2FsZSgpO3ZhciB1PXAuY2FsY1RpY2tzKHQpLGY9cC5jbGlwRW5kcyh0LHUpLGg9cC5tYWtlVHJhbnNGbih0KSxkPXAuZ2V0VGlja1NpZ25zKHQpWzJdLGc9by5kZWcycmFkKDMwKSx2PWQqKHQubGluZXdpZHRofHwxKS8yLG09ZCp0LnRpY2tsZW4seT10aGlzLncseD10aGlzLmgsYj0iYiI9PT1pPyJNMCwiK3YrImwiK01hdGguc2luKGcpKm0rIiwiK01hdGguY29zKGcpKm06Ik0iK3YrIiwwbCIrTWF0aC5jb3MoZykqbSsiLCIrLU1hdGguc2luKGcpKm0sXz17YToiTTAsMGwiK3grIiwtIit5LzIsYjoiTTAsMGwtIit5LzIrIiwtIit4LGM6Ik0wLDBsLSIreCsiLCIreS8yfVtpXTtwLmRyYXdUaWNrcyhyLHQse3ZhbHM6Imluc2lkZSI9PT10LnRpY2tzP2Y6dSxsYXllcjpzLHBhdGg6Yix0cmFuc0ZuOmgsY3Jpc3A6ITF9KSxwLmRyYXdHcmlkKHIsdCx7dmFsczpmLGxheWVyOnRoaXMubGF5ZXJzW2krImdyaWQiXSxwYXRoOl8sdHJhbnNGbjpoLGNyaXNwOiExfSkscC5kcmF3TGFiZWxzKHIsdCx7dmFsczp1LGxheWVyOnMsdHJhbnNGbjpoLGxhYmVsRm5zOnAubWFrZUxhYmVsRm5zKHQsMCwzMCl9KX07dmFyIFQ9Yi5NSU5aT09NLzIrLjg3LEE9Im0tMC44NywuNWgiK1QrInYzaC0iKyhUKzUuMikrImwiKyhULzIrMi42KSsiLC0iKyguODcqVCs0LjUpKyJsMi42LDEuNWwtIitULzIrIiwiKy44NypUKyJaIixNPSJtMC44NywuNWgtIitUKyJ2M2giKyhUKzUuMikrImwtIisoVC8yKzIuNikrIiwtIisoLjg3KlQrNC41KSsibC0yLjYsMS41bCIrVC8yKyIsIisuODcqVCsiWiIsUz0ibTAsMWwiK1QvMisiLCIrLjg3KlQrImwyLjYsLTEuNWwtIisoVC8yKzIuNikrIiwtIisoLjg3KlQrNC41KSsibC0iKyhULzIrMi42KSsiLCIrKC44NypUKzQuNSkrImwyLjYsMS41bCIrVC8yKyIsLSIrLjg3KlQrIloiLEU9Im0wLjUsMC41aDV2LTJoLTV2LTVoLTJ2NWgtNXYyaDV2NWgyWiIsQz0hMDtmdW5jdGlvbiBMKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzIikucmVtb3ZlKCl9dy5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4sdSxmLGgscCx2LF8sdz10aGlzLFQ9dy5sYXllcnMucGxvdGJnLnNlbGVjdCgicGF0aCIpLm5vZGUoKSx6PXcuZ3JhcGhEaXYsTz16Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsST17ZWxlbWVudDpULGdkOnoscGxvdGluZm86e2lkOncuaWQseGF4aXM6dy54YXhpcyx5YXhpczp3LnlheGlzfSxzdWJwbG90OncuaWQscHJlcEZuOmZ1bmN0aW9uKGEsbyxzKXtJLnhheGVzPVt3LnhheGlzXSxJLnlheGVzPVt3LnlheGlzXTt2YXIgYz16Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO0kubWluRHJhZz0ibGFzc28iPT09Yz8xOnZvaWQgMCwiem9vbSI9PT1jPyhJLm1vdmVGbj1OLEkuY2xpY2tGbj1QLEkuZG9uZUZuPWosZnVuY3Rpb24oYSxvLHMpe3ZhciBjPVQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD1vLWMubGVmdCxlPXMtYy50b3Ascj17YTp3LmFheGlzLnJhbmdlWzBdLGI6dy5iYXhpcy5yYW5nZVsxXSxjOncuY2F4aXMucmFuZ2VbMV19LHU9cixuPXcuYWF4aXMucmFuZ2VbMV0tci5hLGY9aSh3LmdyYXBoRGl2Ll9mdWxsTGF5b3V0W3cuaWRdLmJnY29sb3IpLmdldEx1bWluYW5jZSgpLGg9Ik0wLCIrdy5oKyJMIit3LncvMisiLCAwTCIrdy53KyIsIit3LmgrIloiLHA9ITEsdj1PLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3cueDArIiwgIit3LnkwKyIpIikuc3R5bGUoe2ZpbGw6Zj4uMj8icmdiYSgwLDAsMCwwKSI6InJnYmEoMjU1LDI1NSwyNTUsMCkiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJkIixoKSxfPU8uYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit3LngwKyIsICIrdy55MCsiKSIpLnN0eWxlKHtmaWxsOmwuYmFja2dyb3VuZCxzdHJva2U6bC5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoImQiLCJNMCwwWiIpLHgoTyl9KDAsbyxzKSk6InBhbiI9PT1jPyhJLm1vdmVGbj1WLEkuY2xpY2tGbj1QLEkuZG9uZUZuPVUscj17YTp3LmFheGlzLnJhbmdlWzBdLGI6dy5iYXhpcy5yYW5nZVsxXSxjOncuY2F4aXMucmFuZ2VbMV19LHU9cix4KE8pKToic2VsZWN0IiE9PWMmJiJsYXNzbyIhPT1jfHxtKGEsbyxzLEksYyl9fTtmdW5jdGlvbiBEKHQpe3ZhciBlPXt9O3JldHVybiBlW3cuaWQrIi5hYXhpcy5taW4iXT10LmEsZVt3LmlkKyIuYmF4aXMubWluIl09dC5iLGVbdy5pZCsiLmNheGlzLm1pbiJdPXQuYyxlfWZ1bmN0aW9uIFAodCxlKXt2YXIgcj16Ll9mdWxsTGF5b3V0LmNsaWNrbW9kZTtMKHopLDI9PT10JiYoei5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLGEuY2FsbCgiX2d1aVJlbGF5b3V0Iix6LEQoe2E6MCxiOjAsYzowfSkpKSxyLmluZGV4T2YoInNlbGVjdCIpPi0xJiYxPT09dCYmeShlLHosW3cueGF4aXNdLFt3LnlheGlzXSx3LmlkLEkpLHIuaW5kZXhPZigiZXZlbnQiKT4tMSYmZy5jbGljayh6LGUsdy5pZCl9ZnVuY3Rpb24gUih0LGUpe3JldHVybiAxLWUvdy5ofWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gMS0odCsody5oLWUpL01hdGguc3FydCgzKSkvdy53fWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4odC0ody5oLWUpL01hdGguc3FydCgzKSkvdy53fWZ1bmN0aW9uIE4oaSxhKXt2YXIgbz10K2kscz1lK2EsbD1NYXRoLm1heCgwLE1hdGgubWluKDEsUigwLGUpLFIoMCxzKSkpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLEYodCxlKSxGKG8scykpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxCKHQsZSksQihvLHMpKSksZz0obC8yK2QpKncudyxtPSgxLWwvMi1jKSp3LncseT0oZyttKS8yLHg9bS1nLFQ9KDEtbCkqdy5oLEM9VC14L2s7eDxiLk1JTlpPT00/KHU9cix2LmF0dHIoImQiLGgpLF8uYXR0cigiZCIsIk0wLDBaIikpOih1PXthOnIuYStsKm4sYjpyLmIrYypuLGM6ci5jK2Qqbn0sdi5hdHRyKCJkIixoKyJNIitnKyIsIitUKyJIIittKyJMIit5KyIsIitDKyJMIitnKyIsIitUKyJaIiksXy5hdHRyKCJkIiwiTSIrdCsiLCIrZStFKyJNIitnKyIsIitUK0ErIk0iK20rIiwiK1QrTSsiTSIreSsiLCIrQytTKSkscHx8KHYudHJhbnNpdGlvbigpLnN0eWxlKCJmaWxsIixmPi4yPyJyZ2JhKDAsMCwwLDAuNCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiKS5kdXJhdGlvbigyMDApLF8udHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxKS5kdXJhdGlvbigyMDApLHA9ITApfWZ1bmN0aW9uIGooKXtMKHopLHUhPT1yJiYoYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHosRCh1KSksQyYmei5kYXRhJiZ6Ll9jb250ZXh0LnNob3dUaXBzJiYoby5ub3RpZmllcihzKHosIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSxDPSExKSl9ZnVuY3Rpb24gVih0LGUpe3ZhciBuPXQvdy54YXhpcy5fbSxpPWUvdy55YXhpcy5fbSxhPVsodT17YTpyLmEtaSxiOnIuYisobitpKS8yLGM6ci5jLShuLWkpLzJ9KS5hLHUuYix1LmNdLnNvcnQoKSxvPWEuaW5kZXhPZih1LmEpLHM9YS5pbmRleE9mKHUuYiksbD1hLmluZGV4T2YodS5jKTthWzBdPDAmJihhWzFdK2FbMF0vMjwwPyhhWzJdKz1hWzBdK2FbMV0sYVswXT1hWzFdPTApOihhWzJdKz1hWzBdLzIsYVsxXSs9YVswXS8yLGFbMF09MCksdT17YTphW29dLGI6YVtzXSxjOmFbbF19LGU9KHIuYS11LmEpKncueWF4aXMuX20sdD0oci5jLXUuYy1yLmIrdS5iKSp3LnhheGlzLl9tKTt2YXIgZj0idHJhbnNsYXRlKCIrKHcueDArdCkrIiwiKyh3LnkwK2UpKyIpIjt3LnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLC5tYXBsYXllciIpLmF0dHIoInRyYW5zZm9ybSIsZik7dmFyIGg9InRyYW5zbGF0ZSgiKy10KyIsIistZSsiKSI7dy5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixoKSx3LmFheGlzLnJhbmdlPVt1LmEsdy5zdW0tdS5iLXUuY10sdy5iYXhpcy5yYW5nZT1bdy5zdW0tdS5hLXUuYyx1LmJdLHcuY2F4aXMucmFuZ2U9W3cuc3VtLXUuYS11LmIsdS5jXSx3LmRyYXdBeGVzKCExKSx3Ll9oYXNDbGlwT25BeGlzRmFsc2UmJncucGxvdENvbnRhaW5lci5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLmNhbGwoYy5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHcpfWZ1bmN0aW9uIFUoKXthLmNhbGwoIl9ndWlSZWxheW91dCIseixEKHUpKX1ULm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe2cuaG92ZXIoeix0LHcuaWQpLHouX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj1ULHouX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD13LmlkfSxULm9ubW91c2VvdXQ9ZnVuY3Rpb24odCl7ei5fZHJhZ2dpbmd8fGQudW5ob3Zlcih6LHQpfSxkLmluaXQoSSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NTk1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vY29tcG9uZW50cy9meCI6NjE2LCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NjY1LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NTQsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjc2NSwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo3NjYsIi4uL3Bsb3RzIjo4MTAsZDM6MTU0LHRpbnljb2xvcjI6NTIxfV0sODI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2xvZ2dlcnMiKSxpPXQoIi4vbGliL25vb3AiKSxhPXQoIi4vbGliL3B1c2hfdW5pcXVlIiksbz10KCIuL2xpYi9pc19wbGFpbl9vYmplY3QiKSxzPXQoIi4vbGliL2V4dGVuZCIpLGw9dCgiLi9wbG90cy9hdHRyaWJ1dGVzIiksYz10KCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIiksdT1zLmV4dGVuZEZsYXQsZj1zLmV4dGVuZERlZXBBbGw7ZnVuY3Rpb24gaCh0KXt2YXIgZT10Lm5hbWUsaT10LmNhdGVnb3JpZXMsYT10Lm1ldGE7aWYoci5tb2R1bGVzW2VdKW4ubG9nKCJUeXBlICIrZSsiIGFscmVhZHkgcmVnaXN0ZXJlZCIpO2Vsc2V7ci5zdWJwbG90c1JlZ2lzdHJ5W3QuYmFzZVBsb3RNb2R1bGUubmFtZV18fGZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZTtpZihyLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuIHZvaWQgbi5sb2coIlBsb3QgdHlwZSAiK2UrIiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7Zm9yKHZhciBpIGluIHYodCksci5zdWJwbG90c1JlZ2lzdHJ5W2VdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeChpLHQubmFtZSl9KHQuYmFzZVBsb3RNb2R1bGUpO2Zvcih2YXIgbz17fSxzPTA7czxpLmxlbmd0aDtzKyspb1tpW3NdXT0hMCxyLmFsbENhdGVnb3JpZXNbaVtzXV09ITA7Zm9yKHZhciBsIGluIHIubW9kdWxlc1tlXT17X21vZHVsZTp0LGNhdGVnb3JpZXM6b30sYSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoJiYoci5tb2R1bGVzW2VdLm1ldGE9YSksci5hbGxUeXBlcy5wdXNoKGUpLHIuY29tcG9uZW50c1JlZ2lzdHJ5KW0obCxlKTt0LmxheW91dEF0dHJpYnV0ZXMmJnUoci50cmFjZUxheW91dEF0dHJpYnV0ZXMsdC5sYXlvdXRBdHRyaWJ1dGVzKX19ZnVuY3Rpb24gcCh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbXBvbmVudCBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuIik7dmFyIGU9dC5uYW1lO2Zvcih2YXIgbiBpbiByLmNvbXBvbmVudHNSZWdpc3RyeVtlXT10LHQubGF5b3V0QXR0cmlidXRlcyYmKHQubGF5b3V0QXR0cmlidXRlcy5faXNMaW5rZWRUb0FycmF5JiZhKHIubGF5b3V0QXJyYXlDb250YWluZXJzLGUpLHYodCkpLHIubW9kdWxlcyltKGUsbik7Zm9yKHZhciBpIGluIHIuc3VicGxvdHNSZWdpc3RyeSl4KGUsaSk7Zm9yKHZhciBvIGluIHIudHJhbnNmb3Jtc1JlZ2lzdHJ5KXkoZSxvKTt0LnNjaGVtYSYmdC5zY2hlbWEubGF5b3V0JiZmKGMsdC5zY2hlbWEubGF5b3V0KX1mdW5jdGlvbiBkKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcigiVHJhbnNmb3JtIG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgZT0iVHJhbnNmb3JtIG1vZHVsZSAiK3QubmFtZSxpPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnRyYW5zZm9ybSxhPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGNUcmFuc2Zvcm07aWYoIWkmJiFhKXRocm93IG5ldyBFcnJvcihlKyIgaXMgbWlzc2luZyBhICp0cmFuc2Zvcm0qIG9yICpjYWxjVHJhbnNmb3JtKiBtZXRob2QuIik7Zm9yKHZhciBzIGluIGkmJmEmJm4ubG9nKFtlKyIgaGFzIGJvdGggYSAqdHJhbnNmb3JtKiBhbmQgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIiwiUGxlYXNlIG5vdGUgdGhhdCBhbGwgKnRyYW5zZm9ybSogbWV0aG9kcyBhcmUgZXhlY3V0ZWQiLCJiZWZvcmUgYWxsICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLiJdLmpvaW4oIiAiKSksbyh0LmF0dHJpYnV0ZXMpfHxuLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGFuICphdHRyaWJ1dGVzKiBvYmplY3QuIiksImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3VwcGx5RGVmYXVsdHMmJm4ubG9nKGUrIiByZWdpc3RlcmVkIHdpdGhvdXQgYSAqc3VwcGx5RGVmYXVsdHMqIG1ldGhvZC4iKSxyLnRyYW5zZm9ybXNSZWdpc3RyeVt0Lm5hbWVdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeShzLHQubmFtZSl9ZnVuY3Rpb24gZyh0KXt2YXIgZT10Lm5hbWUsbj1lLnNwbGl0KCItIilbMF0saT10LmRpY3Rpb25hcnksYT10LmZvcm1hdCxvPWkmJk9iamVjdC5rZXlzKGkpLmxlbmd0aCxzPWEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCxsPXIubG9jYWxlUmVnaXN0cnksYz1sW2VdO2lmKGN8fChsW2VdPWM9e30pLG4hPT1lKXt2YXIgdT1sW25dO3V8fChsW25dPXU9e30pLG8mJnUuZGljdGlvbmFyeT09PWMuZGljdGlvbmFyeSYmKHUuZGljdGlvbmFyeT1pKSxzJiZ1LmZvcm1hdD09PWMuZm9ybWF0JiYodS5mb3JtYXQ9YSl9byYmKGMuZGljdGlvbmFyeT1pKSxzJiYoYy5mb3JtYXQ9YSl9ZnVuY3Rpb24gdih0KXtpZih0LmxheW91dEF0dHJpYnV0ZXMpe3ZhciBlPXQubGF5b3V0QXR0cmlidXRlcy5fYXJyYXlBdHRyUmVnZXhwcztpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWEoci5sYXlvdXRBcnJheVJlZ2V4ZXMsZVtuXSl9fWZ1bmN0aW9uIG0odCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi50cmFjZXMpe3ZhciBpPW4udHJhY2VzW2VdO2kmJmYoci5tb2R1bGVzW2VdLl9tb2R1bGUuYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24geSh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYW5zZm9ybXMpe3ZhciBpPW4udHJhbnNmb3Jtc1tlXTtpJiZmKHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W2VdLmF0dHJpYnV0ZXMsaSl9fWZ1bmN0aW9uIHgodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi5zdWJwbG90cyl7dmFyIGk9ci5zdWJwbG90c1JlZ2lzdHJ5W2VdLGE9aS5sYXlvdXRBdHRyaWJ1dGVzLG89InN1YnBsb3QiPT09aS5hdHRyP2kubmFtZTppLmF0dHI7QXJyYXkuaXNBcnJheShvKSYmKG89b1swXSk7dmFyIHM9bi5zdWJwbG90c1tvXTthJiZzJiZmKGEscyl9fWZ1bmN0aW9uIGIodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYodD10LnR5cGUpLHR9ci5tb2R1bGVzPXt9LHIuYWxsQ2F0ZWdvcmllcz17fSxyLmFsbFR5cGVzPVtdLHIuc3VicGxvdHNSZWdpc3RyeT17fSxyLnRyYW5zZm9ybXNSZWdpc3RyeT17fSxyLmNvbXBvbmVudHNSZWdpc3RyeT17fSxyLmxheW91dEFycmF5Q29udGFpbmVycz1bXSxyLmxheW91dEFycmF5UmVnZXhlcz1bXSxyLnRyYWNlTGF5b3V0QXR0cmlidXRlcz17fSxyLmxvY2FsZVJlZ2lzdHJ5PXt9LHIuYXBpTWV0aG9kUmVnaXN0cnk9e30sci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLHIucmVnaXN0ZXI9ZnVuY3Rpb24odCl7aWYoci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLCF0KXRocm93IG5ldyBFcnJvcigiTm8gYXJndW1lbnQgcGFzc2VkIHRvIFBsb3RseS5yZWdpc3Rlci4iKTt0JiYhQXJyYXkuaXNBcnJheSh0KSYmKHQ9W3RdKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCEiKTtzd2l0Y2gobi5tb2R1bGVUeXBlKXtjYXNlInRyYWNlIjpoKG4pO2JyZWFrO2Nhc2UidHJhbnNmb3JtIjpkKG4pO2JyZWFrO2Nhc2UiY29tcG9uZW50IjpwKG4pO2JyZWFrO2Nhc2UibG9jYWxlIjpnKG4pO2JyZWFrO2Nhc2UiYXBpTWV0aG9kIjp2YXIgaT1uLm5hbWU7ci5hcGlNZXRob2RSZWdpc3RyeVtpXT1uLmZuO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIil9fX0sci5nZXRNb2R1bGU9ZnVuY3Rpb24odCl7dmFyIGU9ci5tb2R1bGVzW2IodCldO3JldHVybiEhZSYmZS5fbW9kdWxlfSxyLnRyYWNlSXM9ZnVuY3Rpb24odCxlKXtpZigidmFyaW91cyI9PT0odD1iKHQpKSlyZXR1cm4hMTt2YXIgaT1yLm1vZHVsZXNbdF07cmV0dXJuIGl8fCh0JiYiYXJlYSIhPT10JiZuLmxvZygiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgIit0KyIuIiksaT1yLm1vZHVsZXNbbC50eXBlLmRmbHRdKSwhIWkuY2F0ZWdvcmllc1tlXX0sci5nZXRUcmFuc2Zvcm1JbmRpY2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50cmFuc2Zvcm1zfHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspbltpXS50eXBlPT09ZSYmci5wdXNoKGkpO3JldHVybiByfSxyLmhhc1RyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYW5zZm9ybXN8fFtdLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dLnR5cGU9PT1lKXJldHVybiEwO3JldHVybiExfSxyLmdldENvbXBvbmVudE1ldGhvZD1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdO3JldHVybiBuJiZuW2VdfHxpfSxyLmNhbGw9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gci5hcGlNZXRob2RSZWdpc3RyeVt0XS5hcHBseShudWxsLGUpfX0seyIuL2xpYi9leHRlbmQiOjY5MCwiLi9saWIvaXNfcGxhaW5fb2JqZWN0Ijo3MDEsIi4vbGliL2xvZ2dlcnMiOjcwNCwiLi9saWIvbm9vcCI6NzA5LCIuL2xpYi9wdXNoX3VuaXF1ZSI6NzE0LCIuL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6ODAxfV0sODMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9bi5leHRlbmRGbGF0LGE9bi5leHRlbmREZWVwO2Z1bmN0aW9uIG8odCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2UidGhlbWVzX190aHVtYiI6ZT17YXV0b3NpemU6ITAsd2lkdGg6MTUwLGhlaWdodDoxNTAsdGl0bGU6e3RleHQ6IiJ9LHNob3dsZWdlbmQ6ITEsbWFyZ2luOntsOjUscjo1LHQ6NSxiOjUscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztjYXNlInRodW1ibmFpbCI6ZT17dGl0bGU6e3RleHQ6IiJ9LGhpZGVzb3VyY2VzOiEwLHNob3dsZWdlbmQ6ITEsYm9yZGVyd2lkdGg6MCxib3JkZXJjb2xvcjoiIixtYXJnaW46e2w6MSxyOjEsdDoxLGI6MSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2RlZmF1bHQ6ZT17fX1yZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcjt0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHQ9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpO3ZhciBuLHM9dC5kYXRhLGw9dC5sYXlvdXQsYz1hKFtdLHMpLHU9YSh7fSxsLG8oZS50aWxlQ2xhc3MpKSxmPXQuX2NvbnRleHR8fHt9O2lmKGUud2lkdGgmJih1LndpZHRoPWUud2lkdGgpLGUuaGVpZ2h0JiYodS5oZWlnaHQ9ZS5oZWlnaHQpLCJ0aHVtYm5haWwiPT09ZS50aWxlQ2xhc3N8fCJ0aGVtZXNfX3RodW1iIj09PWUudGlsZUNsYXNzKXt1LmFubm90YXRpb25zPVtdO3ZhciBoPU9iamVjdC5rZXlzKHUpO2ZvcihyPTA7cjxoLmxlbmd0aDtyKyspbj1oW3JdLFsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0uaW5kZXhPZihuLnNsaWNlKDAsNSkpPi0xJiYodVtoW3JdXS50aXRsZT17dGV4dDoiIn0pO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspe3ZhciBwPWNbcl07cC5zaG93c2NhbGU9ITEscC5tYXJrZXImJihwLm1hcmtlci5zaG93c2NhbGU9ITEpLCJwaWUiPT09cC50eXBlJiYocC50ZXh0cG9zaXRpb249Im5vbmUiKX19aWYoQXJyYXkuaXNBcnJheShlLmFubm90YXRpb25zKSlmb3Iocj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKXUuYW5ub3RhdGlvbnMucHVzaChlLmFubm90YXRpb25zW3JdKTt2YXIgZD1PYmplY3Qua2V5cyh1KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goL15zY2VuZVxkKiQvKX0pO2lmKGQubGVuZ3RoKXt2YXIgZz17fTtmb3IoInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzcyYmKGc9e3RpdGxlOnt0ZXh0OiIifSxzaG93YXhlc2xhYmVsczohMSxzaG93dGlja2xhYmVsczohMSxsaW5ldGlja2VuYWJsZTohMX0pLHI9MDtyPGQubGVuZ3RoO3IrKyl7dmFyIHY9dVtkW3JdXTt2LnhheGlzfHwodi54YXhpcz17fSksdi55YXhpc3x8KHYueWF4aXM9e30pLHYuemF4aXN8fCh2LnpheGlzPXt9KSxpKHYueGF4aXMsZyksaSh2LnlheGlzLGcpLGkodi56YXhpcyxnKSx2Ll9zY2VuZT1udWxsfX12YXIgbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnRpbGVDbGFzcyYmKG0uY2xhc3NOYW1lPWUudGlsZUNsYXNzKTt2YXIgeT17Z2Q6bSx0ZDptLGxheW91dDp1LGRhdGE6Yyxjb25maWc6e3N0YXRpY1Bsb3Q6dm9pZCAwPT09ZS5zdGF0aWNQbG90fHxlLnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp2b2lkIDA9PT1lLnBsb3RHbFBpeGVsUmF0aW8/MjplLnBsb3RHbFBpeGVsUmF0aW8sZGlzcGxheWxvZ286ZS5kaXNwbGF5bG9nb3x8ITEsc2hvd0xpbms6ZS5zaG93TGlua3x8ITEsc2hvd1RpcHM6ZS5zaG93VGlwc3x8ITEsbWFwYm94QWNjZXNzVG9rZW46Zi5tYXBib3hBY2Nlc3NUb2tlbn19O3JldHVybiJ0cmFuc3BhcmVudCIhPT1lLnNldEJhY2tncm91bmQmJih5LmNvbmZpZy5zZXRCYWNrZ3JvdW5kPWUuc2V0QmFja2dyb3VuZHx8Im9wYXF1ZSIpLHkuZ2QuZGVmYXVsdExheW91dD1vKGUudGlsZUNsYXNzKSx5fX0seyIuLi9saWIiOjcwMH1dLDgzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90X2FwaS90b19pbWFnZSIpLGk9dCgiLi4vbGliIiksYT10KCIuL2ZpbGVzYXZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBpLmlzUGxhaW5PYmplY3QodCl8fChyPWkuZ2V0R3JhcGhEaXYodCkpLChlPWV8fHt9KS5mb3JtYXQ9ZS5mb3JtYXR8fCJwbmciLG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8scyl7ciYmci5fc25hcHNob3RJblByb2dyZXNzJiZzKG5ldyBFcnJvcigiU25hcHNob3R0aW5nIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIikpLGkuaXNJRSgpJiYic3ZnIiE9PWUuZm9ybWF0JiZzKG5ldyBFcnJvcigiU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuIikpLHImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITApO3ZhciBsPW4odCxlKSxjPWUuZmlsZW5hbWV8fHQuZm58fCJuZXdwbG90IjtjKz0iLiIrZS5mb3JtYXQsbC50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiByJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxhKHQsYyl9KS50aGVuKGZ1bmN0aW9uKHQpe28odCl9KS5jYXRjaChmdW5jdGlvbih0KXtyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxzKHQpfSl9KX19LHsiLi4vbGliIjo3MDAsIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIjo3NDEsIi4vZmlsZXNhdmVyIjo4MzJ9XSw4MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG49ImRvd25sb2FkImluIHIsaT0vVmVyc2lvblwvW1xkXC5dKy4qU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhLG8pe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYvTVNJRSBbMS05XVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZvKG5ldyBFcnJvcigiSUUgPCAxMCB1bnN1cHBvcnRlZCIpKSxpJiYoZG9jdW1lbnQubG9jYXRpb24uaHJlZj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iK3Quc2xpY2UodC5zZWFyY2goL1ssO10vKSksYShlKSksZXx8KGU9ImRvd25sb2FkIiksbiYmKHIuaHJlZj10LHIuZG93bmxvYWQ9ZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLHIuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHIpLGEoZSkpLCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubXNTYXZlQmxvYil7dmFyIHM9dC5zcGxpdCgvXmRhdGE6aW1hZ2VcL3N2Z1wreG1sLC8pWzFdLGw9ZGVjb2RlVVJJQ29tcG9uZW50KHMpO25hdmlnYXRvci5tc1NhdmVCbG9iKG5ldyBCbG9iKFtsXSksZSksYShlKX1vKG5ldyBFcnJvcigiZG93bmxvYWQgZXJyb3IiKSl9KX19LHt9XSw4MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5nZXREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdC5faGFzJiYodC5faGFzKCJnbDNkIil8fHQuX2hhcygiZ2wyZCIpfHx0Ll9oYXMoIm1hcGJveCIpKT81MDA6MH0sci5nZXRSZWRyYXdGdW5jPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXR8fHt9O2lmKCEoIShlLl9oYXMmJmUuX2hhcygicG9sYXIiKSkmJnQuZGF0YSYmdC5kYXRhWzBdJiZ0LmRhdGFbMF0ucikpcmV0dXJuIGZ1bmN0aW9uKCl7KHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pfX19LHt9XSw4MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9oZWxwZXJzIiksaT17Z2V0RGVsYXk6bi5nZXREZWxheSxnZXRSZWRyYXdGdW5jOm4uZ2V0UmVkcmF3RnVuYyxjbG9uZTp0KCIuL2Nsb25lcGxvdCIpLHRvU1ZHOnQoIi4vdG9zdmciKSxzdmdUb0ltZzp0KCIuL3N2Z3RvaW1nIiksdG9JbWFnZTp0KCIuL3RvaW1hZ2UiKSxkb3dubG9hZEltYWdlOnQoIi4vZG93bmxvYWQiKX07ZS5leHBvcnRzPWl9LHsiLi9jbG9uZXBsb3QiOjgzMCwiLi9kb3dubG9hZCI6ODMxLCIuL2hlbHBlcnMiOjgzMywiLi9zdmd0b2ltZyI6ODM1LCIuL3RvaW1hZ2UiOjgzNiwiLi90b3N2ZyI6ODM3fV0sODM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVtaXR0ZXJ8fG5ldyBpLHI9bmV3IFByb21pc2UoZnVuY3Rpb24oaSxhKXt2YXIgbz13aW5kb3cuSW1hZ2Uscz10LnN2ZyxsPXQuZm9ybWF0fHwicG5nIjtpZihuLmlzSUUoKSYmInN2ZyIhPT1sKXt2YXIgYz1uZXcgRXJyb3IoIlNvcnJ5IElFIGRvZXMgbm90IHN1cHBvcnQgZG93bmxvYWRpbmcgZnJvbSBjYW52YXMuIFRyeSB7Zm9ybWF0OidzdmcnfSBpbnN0ZWFkLiIpO3JldHVybiBhKGMpLHQucHJvbWlzZT9yOmUuZW1pdCgiZXJyb3IiLGMpfXZhciB1PXQuY2FudmFzLGY9dC5zY2FsZXx8MSxoPXQud2lkdGh8fDMwMCxwPXQuaGVpZ2h0fHwxNTAsZD1mKmgsZz1mKnAsdj11LmdldENvbnRleHQoIjJkIiksbT1uZXcgbyx5PSJkYXRhOmltYWdlL3N2Zyt4bWwsIitlbmNvZGVVUklDb21wb25lbnQocyk7dS53aWR0aD1kLHUuaGVpZ2h0PWcsbS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgcjtzd2l0Y2goInN2ZyIhPT1sJiZ2LmRyYXdJbWFnZShtLDAsMCxkLGcpLGwpe2Nhc2UianBlZyI6cj11LnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2UicG5nIjpyPXUudG9EYXRhVVJMKCJpbWFnZS9wbmciKTticmVhaztjYXNlIndlYnAiOnI9dS50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztjYXNlInN2ZyI6cj15O2JyZWFrO2RlZmF1bHQ6dmFyIG49IkltYWdlIGZvcm1hdCBpcyBub3QganBlZywgcG5nLCBzdmcgb3Igd2VicC4iO2lmKGEobmV3IEVycm9yKG4pKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoImVycm9yIixuKX1pKHIpLHQucHJvbWlzZXx8ZS5lbWl0KCJzdWNjZXNzIixyKX0sbS5vbmVycm9yPWZ1bmN0aW9uKHIpe2lmKGEociksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KCJlcnJvciIscil9LG0uc3JjPXl9KTtyZXR1cm4gdC5wcm9taXNlP3I6ZX19LHsiLi4vbGliIjo3MDAsZXZlbnRzOjk0fV0sODM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixpPXQoIi4uL3JlZ2lzdHJ5IiksYT10KCIuLi9saWIiKSxvPXQoIi4vaGVscGVycyIpLHM9dCgiLi9jbG9uZXBsb3QiKSxsPXQoIi4vdG9zdmciKSxjPXQoIi4vc3ZndG9pbWciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbix1PXModCx7Zm9ybWF0OiJwbmcifSksZj11LmdkO2Yuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnN0eWxlLmxlZnQ9Ii01MDAwcHgiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZik7dmFyIGg9by5nZXRSZWRyYXdGdW5jKGYpO3JldHVybiBpLmNhbGwoInBsb3QiLGYsdS5kYXRhLHUubGF5b3V0LHUuY29uZmlnKS50aGVuKGgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgdD1vLmdldERlbGF5KGYuX2Z1bGxMYXlvdXQpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1sKGYpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7bi5pZD1hLnJhbmRzdHIoKSwocj1jKHtmb3JtYXQ6ZS5mb3JtYXQsd2lkdGg6Zi5fZnVsbExheW91dC53aWR0aCxoZWlnaHQ6Zi5fZnVsbExheW91dC5oZWlnaHQsY2FudmFzOm4sZW1pdHRlcjpyLHN2Zzp0fSkpLmNsZWFuPWZ1bmN0aW9uKCl7ZiYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChmKX19LHQpfSkuY2F0Y2goZnVuY3Rpb24odCl7ci5lbWl0KCJlcnJvciIsdCl9KSxyfX0seyIuLi9saWIiOjcwMCwiLi4vcmVnaXN0cnkiOjgyOSwiLi9jbG9uZXBsb3QiOjgzMCwiLi9oZWxwZXJzIjo4MzMsIi4vc3ZndG9pbWciOjgzNSwiLi90b3N2ZyI6ODM3LGV2ZW50czo5NH1dLDgzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksbD0vIi9nLGM9bmV3IFJlZ0V4cCgnKCJUT0JFU1RSSVBQRUQpfChUT0JFU1RSSVBQRUQiKScsImciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGY9dC5fZnVsbExheW91dCxoPWYuX3BhcGVyLHA9Zi5fdG9wcGFwZXIsZD1mLndpZHRoLGc9Zi5oZWlnaHQ7aC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5jYWxsKGEuc2V0UmVjdCwwLDAsZCxnKS5jYWxsKG8uZmlsbCxmLnBhcGVyX2JnY29sb3IpO3ZhciB2PWYuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHU9MDt1PHYubGVuZ3RoO3UrKyl7dmFyIG09dlt1XTttLnRvU1ZHJiZtLnRvU1ZHKHQpfWlmKHApe3ZhciB5PXAubm9kZSgpLmNoaWxkTm9kZXMseD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5KTtmb3IodT0wO3U8eC5sZW5ndGg7dSsrKXt2YXIgYj14W3VdO2IuY2hpbGROb2Rlcy5sZW5ndGgmJmgubm9kZSgpLmFwcGVuZENoaWxkKGIpfX1mLl9kcmFnZ2VycyYmZi5fZHJhZ2dlcnMucmVtb3ZlKCksaC5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD0iIixoLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpudWxsLCJkYXRhLW1hdGgiOm51bGx9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7aWYoImhpZGRlbiIhPT10aGlzLnN0eWxlLnZpc2liaWxpdHkmJiJub25lIiE9PXRoaXMuc3R5bGUuZGlzcGxheSl7dC5zdHlsZSh7dmlzaWJpbGl0eTpudWxsLGRpc3BsYXk6bnVsbH0pO3ZhciBlPXRoaXMuc3R5bGUuZm9udEZhbWlseTtlJiYtMSE9PWUuaW5kZXhPZignIicpJiZ0LnN0eWxlKCJmb250LWZhbWlseSIsZS5yZXBsYWNlKGwsIlRPQkVTVFJJUFBFRCIpKX1lbHNlIHQucmVtb3ZlKCl9KSxoLnNlbGVjdEFsbCgiLnBvaW50LCAuc2NhdHRlcnB0cywgLmxlZ2VuZGZpbGw+cGF0aCwgLmxlZ2VuZGxpbmVzPnBhdGgsIC5jYmZpbGwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10aGlzLnN0eWxlLmZpbGw7ZSYmLTEhPT1lLmluZGV4T2YoInVybCgiKSYmdC5zdHlsZSgiZmlsbCIsZS5yZXBsYWNlKGwsIlRPQkVTVFJJUFBFRCIpKTt2YXIgcj10aGlzLnN0eWxlLnN0cm9rZTtyJiYtMSE9PXIuaW5kZXhPZigidXJsKCIpJiZ0LnN0eWxlKCJzdHJva2UiLHIucmVwbGFjZShsLCJUT0JFU1RSSVBQRUQiKSl9KSwicGRmIiE9PWUmJiJlcHMiIT09ZXx8aC5zZWxlY3RBbGwoIiNNYXRoSmF4X1NWR19nbHlwaHMgcGF0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsMCksaC5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucywieG1sbnMiLHMuc3ZnKSxoLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhzLnhtbG5zLCJ4bWxuczp4bGluayIscy54bGluayksInN2ZyI9PT1lJiZyJiYoaC5hdHRyKCJ3aWR0aCIscipkKSxoLmF0dHIoImhlaWdodCIscipnKSxoLmF0dHIoInZpZXdCb3giLCIwIDAgIitkKyIgIitnKSk7dmFyIF89KG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcikuc2VyaWFsaXplVG9TdHJpbmcoaC5ub2RlKCkpO3JldHVybiBfPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5zdHlsZSh7ZGlzcGxheToibm9uZSJ9KS5odG1sKCIiKSxyPXQucmVwbGFjZSgvKCZbXjtdKjspL2dpLGZ1bmN0aW9uKHQpe3JldHVybiImbHQ7Ij09PXQ/IiYjNjA7IjoiJnJ0OyI9PT10PyImIzYyOyI6LTEhPT10LmluZGV4T2YoIjwiKXx8LTEhPT10LmluZGV4T2YoIj4iKT8iIjplLmh0bWwodCkudGV4dCgpfSk7cmV0dXJuIGUucmVtb3ZlKCkscn0oXyksXz0oXz1fLnJlcGxhY2UoLyYoPyFcdys7fFwjWzAtOV0rO3wgXCN4WzAtOUEtRl0rOykvZywiJmFtcDsiKSkucmVwbGFjZShjLCInIiksaS5pc0lFKCkmJihfPShfPShfPV8ucmVwbGFjZSgvIi9naSwiJyIpKS5yZXBsYWNlKC8oXCgnIykoW14nXSopKCdcKSkvZ2ksJygiIyQyIiknKSkucmVwbGFjZSgvKFxcJykvZ2ksJyInKSksX319LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY3OCwiLi4vbGliIjo3MDAsZDM6MTU0fV0sODM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLm1lcmdlQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bihlLnRleHQsdCwidHgiKSxuKGUuaG92ZXJ0ZXh0LHQsImh0eCIpO3ZhciBpPWUubWFya2VyO2lmKGkpe24oaS5vcGFjaXR5LHQsIm1vIiksbihpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2EmJihuKGEuY29sb3IsdCwibWxjIiksbihhLndpZHRoLHQsIm1sdyIpKX19fSx7Ii4uLy4uL2xpYiI6NzAwfV0sODM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMuanMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9cyh7ZWRpdFR5cGU6ImNhbGMiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZToic3R5bGUifSksZj1jKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MH0pLGg9Yyh7d2lkdGg6ZixlZGl0VHlwZToiY2FsYyJ9LGEoIm1hcmtlci5saW5lIikpLHA9Yyh7bGluZTpoLGVkaXRUeXBlOiJjYWxjIn0sYSgibWFya2VyIikse2NvbG9yYmFyOm8sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MSxtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifX0pO2UuZXhwb3J0cz17eDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOmwuZXZlbnREYXRhS2V5c30pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoibm9uZSIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxvdXRzaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxjb25zdHJhaW50ZXh0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYm90aCIsIm5vbmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LGNsaXBvbmF4aXM6Yyh7fSxuLmNsaXBvbmF4aXMse30pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYmFzZTp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOnAsb2Zmc2V0Z3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGFsaWdubWVudGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Om4uc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6bi5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4udW5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6bi51bnNlbGVjdGVkLnRleHRmb250LGVkaXRUeXBlOiJzdHlsZSJ9LHI6bi5yLHQ6bi50LF9kZXByZWNhdGVkOntiYXJkaXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGVkaXRUeXBlOiJjYWxjIix2YWx1ZXM6WyJ2IiwiaCJdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTEsIi4vY29uc3RhbnRzLmpzIjo4NDF9XSw4NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksbz10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGwsYz1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksdT1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1jLm1ha2VDYWxjZGF0YShlLCJ4IiksbD11Lm1ha2VDYWxjZGF0YShlLCJ5IikpOihyPXUubWFrZUNhbGNkYXRhKGUsInkiKSxsPWMubWFrZUNhbGNkYXRhKGUsIngiKSk7Zm9yKHZhciBmPU1hdGgubWluKGwubGVuZ3RoLHIubGVuZ3RoKSxoPW5ldyBBcnJheShmKSxwPTA7cDxmO3ArKyloW3BdPXtwOmxbcF0sczpyW3BdfSxlLmlkcyYmKGhbcF0uaWQ9U3RyaW5nKGUuaWRzW3BdKSk7cmV0dXJuIGkoZSwibWFya2VyIikmJmEodCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLGkoZSwibWFya2VyLmxpbmUiKSYmYSh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlci5saW5lIixjTGV0dGVyOiJjIn0pLG8oaCxlKSxzKGgsZSksaH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU4NSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjU4OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTA1MywiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjgzOH1dLDg0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2V2ZW50RGF0YUtleXM6W119fSx7fV0sODQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0QXhpc0dyb3VwLGM9dCgiLi9zaWV2ZS5qcyIpO2Z1bmN0aW9uIHUodCxlLHIsbyl7aWYoby5sZW5ndGgpe3ZhciB1LGIsXyx3LGs9dC5fZnVsbExheW91dC5iYXJtb2RlO3N3aXRjaChmdW5jdGlvbih0LGUscixhKXt2YXIgbyxzO2ZvcihvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBsLGM9YVtvXSx1PWNbMF0udHJhY2UsZj11LmJhc2UsaD0iaCI9PT11Lm9yaWVudGF0aW9uP3UueGNhbGVuZGFyOnUueWNhbGVuZGFyLHA9ImNhdGVnb3J5Ij09PXIudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP2Z1bmN0aW9uKCl7cmV0dXJuIG51bGx9OnIuZDJjO2lmKGkoZikpe2ZvcihzPTA7czxNYXRoLm1pbihmLmxlbmd0aCxjLmxlbmd0aCk7cysrKWw9cChmW3NdLDAsaCksbihsKT8oY1tzXS5iPStsLGNbc10uaGFzQj0xKTpjW3NdLmI9MDtmb3IoO3M8Yy5sZW5ndGg7cysrKWNbc10uYj0wfWVsc2V7bD1wKGYsMCxoKTt2YXIgZD1uKGwpO2ZvcihsPWQ/bDowLHM9MDtzPGMubGVuZ3RoO3MrKyljW3NdLmI9bCxkJiYoY1tzXS5oYXNCPTEpfX19KDAsMCxyLG8pLGspe2Nhc2Uib3ZlcmxheSI6Zih0LGUscixvKTticmVhaztjYXNlImdyb3VwIjpmb3IodT1bXSxiPVtdLF89MDtfPG8ubGVuZ3RoO18rKyl2b2lkIDA9PT0odz1vW19dKVswXS50cmFjZS5vZmZzZXQ/Yi5wdXNoKHcpOnUucHVzaCh3KTtiLmxlbmd0aCYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dC5iYXJub3JtLG89bmV3IGMobix7c2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFpfSk7KGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dCxpPW4uYmFyZ2FwLGE9bi5iYXJncm91cGdhcHx8MCxvPXIucG9zaXRpb25zLHM9ci5kaXN0aW5jdFBvc2l0aW9ucyxjPXIubWluRGlmZix1PXIudHJhY2VzLGY9dS5sZW5ndGgsaD1vLmxlbmd0aCE9PXMubGVuZ3RoLHY9YyooMS1pKSxtPWwobixlLl9pZCkrdVswXVswXS50cmFjZS5vcmllbnRhdGlvbix5PW4uX2FsaWdubWVudE9wdHNbbV18fHt9LHg9MDt4PGY7eCsrKXt2YXIgYixfLHc9dVt4XSxrPXdbMF0udHJhY2UsVD15W2suYWxpZ25tZW50Z3JvdXBdfHx7fSxBPU9iamVjdC5rZXlzKFQub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLE09KGI9QT92L0E6aD92L2Y6dikqKDEtYSk7Xz1BPygoMiprLl9vZmZzZXRJbmRleCsxLUEpKmItTSkvMjpoPygoMip4KzEtZikqYi1NKS8yOi1NLzI7dmFyIFM9d1swXS50O1MuYmFyd2lkdGg9TSxTLnBvZmZzZXQ9XyxTLmJhcmdyb3Vwd2lkdGg9dixTLmJhcmRlbHRhPWN9ci5iaW5XaWR0aD11WzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAociksZCh0LGUsciksZyh0LGUscixoKX0pKHQsZSxvKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxzPW9bMF0udHJhY2U7aWYodm9pZCAwPT09cy5iYXNlKWZvcih2YXIgbD1uZXcgYyhbb10se3NlcE5lZ1ZhbDohMCxvdmVybGFwTm9NZXJnZTohMH0pLHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGY9b1t1XTtpZihmLnAhPT1hKXt2YXIgaD1sLnB1dChmLnAsZi5iK2Yucyk7aCYmKGYuYj1oKX19fX0oMCwwLG8pLGk/KG0odCxyLG8pLHkodCxyLG8pKTp2KHQscixvKX0odCxlLHIsYiksdS5sZW5ndGgmJmYodCxlLHIsdSk7YnJlYWs7Y2FzZSJzdGFjayI6Y2FzZSJyZWxhdGl2ZSI6Zm9yKHU9W10sYj1bXSxfPTA7XzxvLmxlbmd0aDtfKyspdm9pZCAwPT09KHc9b1tfXSlbMF0udHJhY2UuYmFzZT9iLnB1c2godyk6dS5wdXNoKHcpO2IubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89aS5iYXJtb2RlLGw9aS5iYXJub3JtLHU9bmV3IGMobix7c2VwTmVnVmFsOiJyZWxhdGl2ZSI9PT1vLG92ZXJsYXBOb01lcmdlOiEobHx8InN0YWNrIj09PW98fCJyZWxhdGl2ZSI9PT1vKX0pO2godCxlLHUpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dC5iYXJub3JtLGk9eChlKSxvPXIudHJhY2VzLGw9MDtsPG8ubGVuZ3RoO2wrKyl7Zm9yKHZhciBjPW9bbF0sdT1jWzBdLnRyYWNlLGY9W10saD0wO2g8Yy5sZW5ndGg7aCsrKXt2YXIgcD1jW2hdO2lmKHAucyE9PWEpe3ZhciBkPXIucHV0KHAucCxwLmIrcC5zKSxnPWQrcC5iK3AucztwLmI9ZCxwW2ldPWcsbnx8KGYucHVzaChnKSxwLmhhc0ImJmYucHVzaChkKSl9fW58fCh1Ll9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxmLHt0b3plcm86ITAscGFkZGVkOiEwfSkpfX0odCxyLHUpO2Zvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKWZvcih2YXIgcD1uW2ZdLGQ9MDtkPHAubGVuZ3RoO2QrKyl7dmFyIGc9cFtkXTtpZihnLnMhPT1hKXt2YXIgdj1nLmIrZy5zPT09dS5nZXQoZy5wLGcucyk7diYmKGcuX291dG1vc3Q9ITApfX1sJiZ5KHQscix1KX0odCxlLHIsYiksdS5sZW5ndGgmJmYodCxlLHIsdSl9IWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89eChlKSxzPXt9LGw9MS8wLGM9LTEvMDtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihhPXRbcl0saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgdT1hW2ldLnA7bih1KSYmKGw9TWF0aC5taW4obCx1KSxjPU1hdGgubWF4KGMsdSkpfXZhciBmPTFlNC8oYy1sKSxoPXMucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKGYqKHQtbCkpKX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7KGE9dFtyXSlbMF0udC5leHRlbnRzPXM7dmFyIHA9YVswXS50LnBvZmZzZXQsZD1BcnJheS5pc0FycmF5KHApO2ZvcihpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBnPWFbaV0sdj1nW29dLWcudy8yO2lmKG4odikpe3ZhciBtPWdbb10rZy53LzIseT1oKGcucCk7c1t5XT9zW3ldPVtNYXRoLm1pbih2LHNbeV1bMF0pLE1hdGgubWF4KG0sc1t5XVsxXSldOnNbeV09W3YsbV19Zy5wMD1nLnArKGQ/cFtpXTpwKSxnLnAxPWcucDArZy53LGcuczA9Zy5iLGcuczE9Zy5zMCtnLnN9fX0obyxlKX19ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9dC5fZnVsbExheW91dC5iYXJub3JtLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW5ldyBjKFtvXSx7c2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFpfSk7aCh0LGUscyksaT8obSh0LHIscykseSh0LHIscykpOnYodCxyLHMpfX1mdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dCxpPW4uYmFyZ2FwLGE9bi5iYXJncm91cGdhcHx8MCxvPXIubWluRGlmZixzPXIudHJhY2VzLGw9byooMS1pKSxjPWwqKDEtYSksdT0tYy8yLGY9MDtmPHMubGVuZ3RoO2YrKyl7dmFyIGg9c1tmXVswXS50O2guYmFyd2lkdGg9YyxoLnBvZmZzZXQ9dSxoLmJhcmdyb3Vwd2lkdGg9bCxoLmJhcmRlbHRhPW99ci5iaW5XaWR0aD1zWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAociksZCh0LGUsciksZyh0LGUscil9ZnVuY3Rpb24gcCh0KXt2YXIgZSxyLGE9dC50cmFjZXM7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIG8scz1hW2VdLGw9c1swXSxjPWwudHJhY2UsdT1sLnQsZj1jLl9vZmZzZXR8fGMub2Zmc2V0LGg9dS5wb2Zmc2V0O2lmKGkoZikpe2ZvcihvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGYsMCxzLmxlbmd0aCkscj0wO3I8by5sZW5ndGg7cisrKW4ob1tyXSl8fChvW3JdPWgpO2ZvcihyPW8ubGVuZ3RoO3I8cy5sZW5ndGg7cisrKW8ucHVzaChoKTt1LnBvZmZzZXQ9b31lbHNlIHZvaWQgMCE9PWYmJih1LnBvZmZzZXQ9Zik7dmFyIHA9Yy5fd2lkdGh8fGMud2lkdGgsZD11LmJhcndpZHRoO2lmKGkocCkpe3ZhciBnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHAsMCxzLmxlbmd0aCk7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKyluKGdbcl0pfHwoZ1tyXT1kKTtmb3Iocj1nLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylnLnB1c2goZCk7aWYodS5iYXJ3aWR0aD1nLHZvaWQgMD09PWYpe2ZvcihvPVtdLHI9MDtyPHMubGVuZ3RoO3IrKylvLnB1c2goaCsoZC1nW3JdKS8yKTt1LnBvZmZzZXQ9b319ZWxzZSB2b2lkIDAhPT1wJiYodS5iYXJ3aWR0aD1wLHZvaWQgMD09PWYmJih1LnBvZmZzZXQ9aCsoZC1wKS8yKSl9fWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPXgoZSksYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz1uW2FdLHM9b1swXS50LGw9cy5wb2Zmc2V0LGM9QXJyYXkuaXNBcnJheShsKSx1PXMuYmFyd2lkdGgsZj1BcnJheS5pc0FycmF5KHUpLGg9MDtoPG8ubGVuZ3RoO2grKyl7dmFyIHA9b1toXSxkPXAudz1mP3VbaF06dTtwW2ldPXAucCsoYz9sW2hdOmwpK2QvMn19ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1yLnRyYWNlcyxhPXIubWluRGlmZi8yO3MubWluRHRpY2soZSxyLm1pbkRpZmYsci5kaXN0aW5jdFBvc2l0aW9uc1swXSxuKTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGwsYyx1LGYsaD1pW29dLHA9aFswXSxkPXAudHJhY2UsZz1bXTtmb3IoZj0wO2Y8aC5sZW5ndGg7ZisrKWM9KGw9aFtmXSkucC1hLHU9bC5wK2EsZy5wdXNoKGMsdSk7aWYoZC53aWR0aHx8ZC5vZmZzZXQpe3ZhciB2PXAudCxtPXYucG9mZnNldCx5PXYuYmFyd2lkdGgseD1BcnJheS5pc0FycmF5KG0pLGI9QXJyYXkuaXNBcnJheSh5KTtmb3IoZj0wO2Y8aC5sZW5ndGg7ZisrKXtsPWhbZl07dmFyIF89eD9tW2ZdOm0sdz1iP3lbZl06eTt1PShjPWwucCtfKSt3LGcucHVzaChjLHUpfX1kLl9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxnLHtwYWRkZWQ6ITF9KX19ZnVuY3Rpb24gdih0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9eChlKSxhPTA7YTxuLmxlbmd0aDthKyspe2Zvcih2YXIgbz1uW2FdLGw9b1swXS50cmFjZSxjPVtdLHU9ITAsZj0wO2Y8by5sZW5ndGg7ZisrKXt2YXIgaD1vW2ZdLHA9aC5iLGQ9cCtoLnM7aFtpXT1kLGMucHVzaChkKSxoLmhhc0ImJmMucHVzaChwKSxoLmhhc0ImJmguYj4wJiZoLnM+MHx8KHU9ITEpfWwuX2V4dHJlbWVzW2UuX2lkXT1zLmZpbmRFeHRyZW1lcyhlLGMse3RvemVybzohdSxwYWRkZWQ6ITB9KX19ZnVuY3Rpb24gbSh0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9MDtpPG4ubGVuZ3RoO2krKylmb3IodmFyIG89bltpXSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107bC5zIT09YSYmci5wdXQobC5wLGwuYitsLnMpfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89ci50cmFjZXMsbD14KGUpLGM9ImZyYWN0aW9uIj09PWkuYmFybm9ybT8xOjEwMCx1PWMvMWU5LGY9ZS5sMmMoZS5jMmwoMCkpLGg9InN0YWNrIj09PWkuYmFybW9kZT9jOmY7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbihlLmMybCh0KSkmJih0PGYtdXx8dD5oK3V8fCFuKGYpKX1mb3IodmFyIGQ9MDtkPG8ubGVuZ3RoO2QrKyl7Zm9yKHZhciBnPW9bZF0sdj1nWzBdLnRyYWNlLG09W10seT0hMCxiPSExLF89MDtfPGcubGVuZ3RoO18rKyl7dmFyIHc9Z1tfXTtpZih3LnMhPT1hKXt2YXIgaz1NYXRoLmFicyhjL3IuZ2V0KHcucCx3LnMpKTt3LmIqPWssdy5zKj1rO3ZhciBUPXcuYixBPVQrdy5zO3dbbF09QSxtLnB1c2goQSksYj1ifHxwKEEpLHcuaGFzQiYmKG0ucHVzaChUKSxiPWJ8fHAoVCkpLHcuaGFzQiYmdy5iPjAmJncucz4wfHwoeT0hMSl9fXYuX2V4dHJlbWVzW2UuX2lkXT1zLmZpbmRFeHRyZW1lcyhlLG0se3RvemVybzoheSxwYWRkZWQ6Yn0pfX1mdW5jdGlvbiB4KHQpe3JldHVybiB0Ll9pZC5jaGFyQXQoMCl9ZS5leHBvcnRzPXtjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnhheGlzLG49ZS55YXhpcyxpPXQuX2Z1bGxEYXRhLGE9dC5jYWxjZGF0YSxzPVtdLGw9W10sYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgZj1pW2NdOyEwPT09Zi52aXNpYmxlJiZvLnRyYWNlSXMoZiwiYmFyIikmJmYueGF4aXM9PT1yLl9pZCYmZi55YXhpcz09PW4uX2lkJiYoImgiPT09Zi5vcmllbnRhdGlvbj9zLnB1c2goYVtjXSk6bC5wdXNoKGFbY10pKX11KHQscixuLGwpLHUodCxuLHIscyl9LHNldEdyb3VwUG9zaXRpb25zOnV9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL3NpZXZlLmpzIjo4NTEsImZhc3QtaXNudW1lcmljIjoyMjF9XSw4NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0QXhpc0dyb3VwLGM9dCgiLi9hdHRyaWJ1dGVzIiksdT1uLmNvZXJjZUZvbnQ7ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT1lLm9yaWVudGF0aW9uLGE9ZVt7djoieCIsaDoieSJ9W2ldKyJheGlzIl0sbz1sKHIsYSkraSxzPXIuX2FsaWdubWVudE9wdHN8fHt9LGM9bigiYWxpZ25tZW50Z3JvdXAiKSx1PXNbb107dXx8KHU9c1tvXT17fSk7dmFyIGY9dVtjXTtmP2YudHJhY2VzLnB1c2goZSk6Zj11W2NdPXt0cmFjZXM6W2VdLGFsaWdubWVudEluZGV4Ok9iamVjdC5rZXlzKHUpLmxlbmd0aCxvZmZzZXRHcm91cHM6e319O3ZhciBoPW4oIm9mZnNldGdyb3VwIikscD1mLm9mZnNldEdyb3VwcyxkPXBbaF07aCYmKGR8fChkPXBbaF09e29mZnNldEluZGV4Ok9iamVjdC5rZXlzKHApLmxlbmd0aH0pLGUuX29mZnNldEluZGV4PWQub2Zmc2V0SW5kZXgpfWZ1bmN0aW9uIGgodCxlLHIsaSxhKXt2YXIgbz1pKCJ0ZXh0cG9zaXRpb24iKSxzPUFycmF5LmlzQXJyYXkobyl8fCJhdXRvIj09PW8sbD1zfHwib3V0c2lkZSI9PT1vO2lmKHN8fCJpbnNpZGUiPT09b3x8bCl7dmFyIGM9dShpLCJ0ZXh0Zm9udCIsci5mb250KSxmPW4uZXh0ZW5kRmxhdCh7fSxjKTshKHQudGV4dGZvbnQmJnQudGV4dGZvbnQuY29sb3IpJiZkZWxldGUgZi5jb2xvcix1KGksImluc2lkZXRleHRmb250IixmKSxsJiZ1KGksIm91dHNpZGV0ZXh0Zm9udCIsYyksaSgiY29uc3RyYWludGV4dCIpLGEmJihpKCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpLGkoInVuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSksaSgiY2xpcG9uYXhpcyIpfX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX1pZihvKHQsZSxsLHUpKXt1KCJvcmllbnRhdGlvbiIsZS54JiYhZS55PyJoIjoidiIpLHUoImJhc2UiKSx1KCJvZmZzZXQiKSx1KCJ3aWR0aCIpLHUoInRleHQiKSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIiksaCh0LDAsbCx1LCEwKSxzKHQsZSx1LHIsbCk7dmFyIGY9KGUubWFya2VyLmxpbmV8fHt9KS5jb2xvcixwPWEuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO3AodCxlLGZ8fGkuZGVmYXVsdExpbmUse2F4aXM6InkifSkscCh0LGUsZnx8aS5kZWZhdWx0TGluZSx7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx1KX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5jb2VyY2Uoci5faW5wdXQscixjLHQpfWlmKCJncm91cCI9PT1lLmJhcm1vZGUpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspImJhciI9PT0ocj10W2FdKS50eXBlJiYoci5faW5wdXQsZigwLHIsZSxpKSl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6ZixoYW5kbGVUZXh0Omh9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMDc3LCIuL2F0dHJpYnV0ZXMiOjgzOSwiLi9zdHlsZV9kZWZhdWx0cyI6ODUzfV0sODQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIik7ci5jb2VyY2VTdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoZXx8IXQubm9CbGFuaylyZXR1cm4gZX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZSYmIXQuc3RyaWN0KXJldHVybiBTdHJpbmcoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlTnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUpKXtlPStlO3ZhciBpPXQubWluLGE9dC5tYXg7aWYoISh2b2lkIDAhPT1pJiZlPGl8fHZvaWQgMCE9PWEmJmU+YSkpcmV0dXJuIGV9cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlQ29sb3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpKGUpLmlzVmFsaWQoKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlRW51bWVyYXRlZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuY29lcmNlTnVtYmVyJiYoZT0rZSksLTEhPT10LnZhbHVlcy5pbmRleE9mKGUpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0sci5nZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U8dC5sZW5ndGgmJihyPXRbZV0pOnI9dCxyfX0seyJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sODQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpO2Z1bmN0aW9uIHModCxlLHIsaSl7dmFyIGEscyxsLGMsdSxmLGgscD10LmNkLGQ9cFswXS50cmFjZSxnPXBbMF0udCx2PSJjbG9zZXN0Ij09PWksbT10Lm1heEhvdmVyRGlzdGFuY2UseT10Lm1heFNwaWtlRGlzdGFuY2U7ZnVuY3Rpb24geCh0KXtyZXR1cm4gdFtsXS10LncvMn1mdW5jdGlvbiBiKHQpe3JldHVybiB0W2xdK3Qudy8yfXZhciBfPXY/eDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oeCh0KSx0LnAtZy5iYXJkZWx0YS8yKX0sdz12P2I6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KGIodCksdC5wK2cuYmFyZGVsdGEvMil9O2Z1bmN0aW9uIGsodCxlKXtyZXR1cm4gbi5pbmJveCh0LWEsZS1hLG0rTWF0aC5taW4oMSxNYXRoLmFicyhlLXQpL2gpLTEpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIGsoXyh0KSx3KHQpKX1mdW5jdGlvbiBBKHQpe3JldHVybiBuLmluYm94KHQuYi1zLHRbY10tcyxtKyh0W2NdLXMpLyh0W2NdLXQuYiktMSl9ImgiPT09ZC5vcmllbnRhdGlvbj8oYT1yLHM9ZSxsPSJ5IixjPSJ4Iix1PUEsZj1UKTooYT1lLHM9cixsPSJ4IixjPSJ5IixmPUEsdT1UKTt2YXIgTT10W2wrImEiXSxTPXRbYysiYSJdO2g9TWF0aC5hYnMoTS5yMmMoTS5yYW5nZVsxXSktTS5yMmMoTS5yYW5nZVswXSkpO3ZhciBFPW4uZ2V0RGlzdGFuY2VGdW5jdGlvbihpLHUsZixmdW5jdGlvbih0KXtyZXR1cm4odSh0KStmKHQpKS8yfSk7aWYobi5nZXRDbG9zZXN0KHAsRSx0KSwhMSE9PXQuaW5kZXgpe3Z8fChfPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbih4KHQpLHQucC1nLmJhcmdyb3Vwd2lkdGgvMil9LHc9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KGIodCksdC5wK2cuYmFyZ3JvdXB3aWR0aC8yKX0pO3ZhciBDPXBbdC5pbmRleF0sTD1kLmJhc2U/Qy5iK0MuczpDLnM7dFtjKyIwIl09dFtjKyIxIl09Uy5jMnAoQ1tjXSwhMCksdFtjKyJMYWJlbFZhbCJdPUw7dmFyIHo9Zy5leHRlbnRzW2cuZXh0ZW50cy5yb3VuZChDLnApXTtyZXR1cm4gdFtsKyIwIl09TS5jMnAodj9fKEMpOnpbMF0sITApLHRbbCsiMSJdPU0uYzJwKHY/dyhDKTp6WzFdLCEwKSx0W2wrIkxhYmVsVmFsIl09Qy5wLHQuc3Bpa2VEaXN0YW5jZT0oQShDKStmdW5jdGlvbih0KXtyZXR1cm4gayh4KHQpLGIodCkpfShDKSkvMit5LW0sdFtsKyJTcGlrZSJdPU0uYzJwKEMucCwhMCksbyhDLGQsdCksdC5ob3ZlcnRlbXBsYXRlPWQuaG92ZXJ0ZW1wbGF0ZSx0fX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZS5tY2N8fHQubWFya2VyLmNvbG9yLG49ZS5tbGNjfHx0Lm1hcmtlci5saW5lLmNvbG9yLGk9ZS5tbHd8fHQubWFya2VyLmxpbmUud2lkdGg7cmV0dXJuIGEub3BhY2l0eShyKT9yOmEub3BhY2l0eShuKSYmaT9uOnZvaWQgMH1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXModCxlLHIsbik7aWYoYSl7dmFyIG89YS5jZCxjPW9bMF0udHJhY2UsdT1vW2EuaW5kZXhdO3JldHVybiBhLmNvbG9yPWwoYyx1KSxpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikodSxjLGEpLFthXX19LGhvdmVyT25CYXJzOnMsZ2V0VHJhY2VDb2xvcjpsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTl9XSw4NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4ubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsbi5jcm9zc1RyYWNlRGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4uY3Jvc3NUcmFjZUNhbGM9dCgiLi9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG4uYXJyYXlzVG9DYWxjZGF0YT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImJhciIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzdmciLCJiYXIiLCJvcmllbnRlZCIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInpvb21TY2FsZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwNjksIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo4MzgsIi4vYXR0cmlidXRlcyI6ODM5LCIuL2NhbGMiOjg0MCwiLi9jcm9zc190cmFjZV9jYWxjIjo4NDIsIi4vZGVmYXVsdHMiOjg0MywiLi9ob3ZlciI6ODQ1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDcsIi4vbGF5b3V0X2RlZmF1bHRzIjo4NDgsIi4vcGxvdCI6ODQ5LCIuL3NlbGVjdCI6ODUwLCIuL3N0eWxlIjo4NTJ9XSw4NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsImdyb3VwIiwib3ZlcmxheSIsInJlbGF0aXZlIl0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sYmFybm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwiZnJhY3Rpb24iLCJwZXJjZW50Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGJhcmdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LGJhcmdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDg0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gcyhyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsbyxyLG4pfWZvcih2YXIgbD0hMSxjPSExLHU9ITEsZj17fSxoPXMoImJhcm1vZGUiKSxwPTA7cDxyLmxlbmd0aDtwKyspe3ZhciBkPXJbcF07aWYobi50cmFjZUlzKGQsImJhciIpJiZkLnZpc2libGUpe2lmKGw9ITAsImdyb3VwIj09PWgpe3ZhciBnPWQueGF4aXMrZC55YXhpcztmW2ddJiYodT0hMCksZltnXT0hMH1pZihkLnZpc2libGUmJiJoaXN0b2dyYW0iPT09ZC50eXBlKSJjYXRlZ29yeSIhPT1pLmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6ZX0sZFsidiI9PT1kLm9yaWVudGF0aW9uPyJ4YXhpcyI6InlheGlzIl0pLnR5cGUmJihjPSEwKX19bD8oIm92ZXJsYXkiIT09aCYmcygiYmFybm9ybSIpLHMoImJhcmdhcCIsYyYmIXU/MDouMikscygiYmFyZ3JvdXBnYXAiKSk6ZGVsZXRlIGUuYmFybW9kZX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0N31dLDg0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL3JlZ2lzdHJ5IiksdT10KCIuL2F0dHJpYnV0ZXMiKSxmPXUudGV4dCxoPXUudGV4dHBvc2l0aW9uLHA9dCgiLi9oZWxwZXJzIiksZD10KCIuL3N0eWxlIiksZz0zO2Z1bmN0aW9uIHYodCxlLHIsbixpLGEpe3ZhciBvO3JldHVybiBpPDE/bz0ic2NhbGUoIitpKyIpICI6KGk9MSxvPSIiKSwidHJhbnNsYXRlKCIrKHItaSp0KSsiICIrKG4taSplKSsiKSIrbysoYT8icm90YXRlKCIrYSsiICIrdCsiICIrZSsiKSAiOiIiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7dmFyIG09ZS54YXhpcyx5PWUueWF4aXMseD10Ll9mdWxsTGF5b3V0LGI9YS5tYWtlVHJhY2VHcm91cHModSxyLCJ0cmFjZSBiYXJzIikuZWFjaChmdW5jdGlvbihyKXt2YXIgYyx1PW4uc2VsZWN0KHRoaXMpLGI9clswXSxfPWIudHJhY2Usdz0wOyJ3YXRlcmZhbGwiPT09Xy50eXBlJiZfLmNvbm5lY3Rvci52aXNpYmxlJiYiYmV0d2VlbiI9PT1fLmNvbm5lY3Rvci5tb2RlJiYodz1fLmNvbm5lY3Rvci5saW5lLndpZHRoLzIpO3ZhciBrPSJoIj09PV8ub3JpZW50YXRpb247ZS5pc1JhbmdlUGxvdHx8KGIubm9kZTM9dSk7dmFyIFQ9YS5lbnN1cmVTaW5nbGUodSwiZyIsInBvaW50cyIpLnNlbGVjdEFsbCgiZy5wb2ludCIpLmRhdGEoYS5pZGVudGl0eSk7VC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50IiwhMCksVC5leGl0KCkucmVtb3ZlKCksVC5lYWNoKGZ1bmN0aW9uKHUsYil7dmFyIFQsQSxNLFMsRT1uLnNlbGVjdCh0aGlzKTtrPyhNPXkuYzJwKHUucDAsITApLFM9eS5jMnAodS5wMSwhMCksVD1tLmMycCh1LnMwLCEwKSxBPW0uYzJwKHUuczEsITApLHUuY3Q9W0EsKE0rUykvMl0pOihUPW0uYzJwKHUucDAsITApLEE9bS5jMnAodS5wMSwhMCksTT15LmMycCh1LnMwLCEwKSxTPXkuYzJwKHUuczEsITApLHUuY3Q9WyhUK0EpLzIsU10pO3ZhciBDLEwseixPPXUuaXNCbGFuaz0hKGkoVCkmJmkoQSkmJmkoTSkmJmkoUykmJlQhPT1BJiZNIT09Uyk7aWYodyYmKGs/KFQtPShjPUE8VD8tMToxKSp3LEErPWMqdyk6KE0tPShjPVM8TT8tMToxKSp3LFMrPWMqdykpLCJ3YXRlcmZhbGwiPT09Xy50eXBlKXt2YXIgST1fW3UuZGlyXS5tYXJrZXI7Qz1JLmxpbmUud2lkdGgsTD1JLmNvbG9yLHo9IndhdGVyZmFsbCJ9ZWxzZSBDPSh1Lm1sdysxfHxfLm1hcmtlci5saW5lLndpZHRoKzF8fCh1LnRyYWNlP3UudHJhY2UubWFya2VyLmxpbmUud2lkdGg6MCkrMSktMSxMPXUubWN8fF8ubWFya2VyLmNvbG9yLHo9ImJhciI7dmFyIEQ9bi5yb3VuZChDLzIlMSwyKSxQPXhbeisiZ2FwIl0sUj14W3orImdyb3VwZ2FwIl07ZnVuY3Rpb24gRih0KXtyZXR1cm4gMD09PVAmJjA9PT1SP24ucm91bmQoTWF0aC5yb3VuZCh0KS1ELDIpOnR9aWYoIXQuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIEI9cy5vcGFjaXR5KEwpPDF8fEM+LjAxP0Y6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKT49Mj9GKHQpOnQ+ZT9NYXRoLmNlaWwodCk6TWF0aC5mbG9vcih0KX07VD1CKFQsQSksQT1CKEEsVCksTT1CKE0sUyksUz1CKFMsTSl9YS5lbnN1cmVTaW5nbGUoRSwicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiZCIsTz8iTTAsMFoiOiJNIitUKyIsIitNKyJWIitTKyJIIitBKyJWIitNKyJaIikuY2FsbChsLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KSxmdW5jdGlvbih0LGUscixuLGkscyxjLHUpe3ZhciBtLHk9dC5fZnVsbExheW91dDtmdW5jdGlvbiB4KGUscixuKXt2YXIgaT1hLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IikudGV4dChyKS5hdHRyKHtjbGFzczoiYmFydGV4dCBiYXJ0ZXh0LSIrbSx0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIiwiZGF0YS1ub3RleCI6MX0pLmNhbGwobC5mb250LG4pLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCk7cmV0dXJuIGl9dmFyIGI9clswXS50cmFjZSxfPWIub3JpZW50YXRpb24sdz1mdW5jdGlvbih0LGUpe3ZhciByPXAuZ2V0VmFsdWUodC50ZXh0LGUpO3JldHVybiBwLmNvZXJjZVN0cmluZyhmLHIpfShiLG4pO209ZnVuY3Rpb24odCxlKXt2YXIgcj1wLmdldFZhbHVlKHQudGV4dHBvc2l0aW9uLGUpO3JldHVybiBwLmNvZXJjZUVudW1lcmF0ZWQoaCxyKX0oYixuKTt2YXIgaz0id2F0ZXJmYWxsIj09PWIudHlwZT8id2F0ZXJmYWxsIjoiYmFyIixUPXlbaysibW9kZSJdLEE9InN0YWNrIj09PVR8fCJyZWxhdGl2ZSI9PT1ULE09cltuXSxTPSFBfHxNLl9vdXRtb3N0O2lmKCF3fHwibm9uZSI9PT1tfHxNLmlzQmxhbmsmJigiYXV0byI9PT1tfHwiaW5zaWRlIj09PW0pKXJldHVybiB2b2lkIGUuc2VsZWN0KCJ0ZXh0IikucmVtb3ZlKCk7dmFyIEUsQyxMLHosTyxJLEQ9eS5mb250LFA9ZC5nZXRCYXJDb2xvcihyW25dLGIpLFI9ZC5nZXRJbnNpZGVUZXh0Rm9udChiLG4sRCxQKSxGPWQuZ2V0T3V0c2lkZVRleHRGb250KGIsbixEKSxCPU1hdGguYWJzKHMtaSktMipnLE49TWF0aC5hYnModS1jKS0yKmc7Im91dHNpZGUiPT09bSYmKFN8fE0uaGFzQnx8KG09Imluc2lkZSIpKTtpZigiYXV0byI9PT1tKWlmKFMpe209Imluc2lkZSIsRT14KGUsdyxSKSxDPWwuYkJveChFLm5vZGUoKSksTD1DLndpZHRoLHo9Qy5oZWlnaHQ7dmFyIGo9TD4wJiZ6PjAsVj1MPD1CJiZ6PD1OLFU9TDw9TiYmejw9QixxPSJoIj09PV8/Qj49TCooTi96KTpOPj16KihCL0wpO2omJihWfHxVfHxxKT9tPSJpbnNpZGUiOihtPSJvdXRzaWRlIixFLnJlbW92ZSgpLEU9bnVsbCl9ZWxzZSBtPSJpbnNpZGUiO2lmKCFFJiYoRT14KGUsdywib3V0c2lkZSI9PT1tP0Y6UiksQz1sLmJCb3goRS5ub2RlKCkpLEw9Qy53aWR0aCx6PUMuaGVpZ2h0LEw8PTB8fHo8PTApKXJldHVybiB2b2lkIEUucmVtb3ZlKCk7Im91dHNpZGUiPT09bT8oST0iYm90aCI9PT1iLmNvbnN0cmFpbnRleHR8fCJvdXRzaWRlIj09PWIuY29uc3RyYWludGV4dCxPPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9ImgiPT09YT9NYXRoLmFicyhuLXIpOk1hdGguYWJzKGUtdCk7bD4yKmcmJihzPWcpO3ZhciBjPTE7byYmKGM9ImgiPT09YT9NYXRoLm1pbigxLGwvaS5oZWlnaHQpOk1hdGgubWluKDEsbC9pLndpZHRoKSk7dmFyIHUsZixoLHAsZD0oaS5sZWZ0K2kucmlnaHQpLzIsbT0oaS50b3AraS5ib3R0b20pLzI7dT1jKmkud2lkdGgsZj1jKmkuaGVpZ2h0LCJoIj09PWE/ZTx0PyhoPWUtcy11LzIscD0ocituKS8yKTooaD1lK3MrdS8yLHA9KHIrbikvMik6bj5yPyhoPSh0K2UpLzIscD1uK3MrZi8yKTooaD0odCtlKS8yLHA9bi1zLWYvMik7cmV0dXJuIHYoZCxtLGgscCxjLCExKX0oaSxzLGMsdSxDLF8sSSkpOihJPSJib3RoIj09PWIuY29uc3RyYWludGV4dHx8Imluc2lkZSI9PT1iLmNvbnN0cmFpbnRleHQsTz1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmLGgscCxkPWkud2lkdGgsbT1pLmhlaWdodCx5PShpLmxlZnQraS5yaWdodCkvMix4PShpLnRvcCtpLmJvdHRvbSkvMixiPU1hdGguYWJzKGUtdCksXz1NYXRoLmFicyhuLXIpO2I+MipnJiZfPjIqZz8oYi09MiooZj1nKSxfLT0yKmYpOmY9MDtkPD1iJiZtPD1fPyhoPSExLHA9MSk6ZDw9XyYmbTw9Yj8oaD0hMCxwPTEpOmQ8bT09YjxfPyhoPSExLHA9bz9NYXRoLm1pbihiL2QsXy9tKToxKTooaD0hMCxwPW8/TWF0aC5taW4oXy9kLGIvbSk6MSk7aCYmKGg9OTApO2g/KHM9cCptLGw9cCpkKToocz1wKmQsbD1wKm0pOyJoIj09PWE/ZTx0PyhjPWUrZitzLzIsdT0ocituKS8yKTooYz1lLWYtcy8yLHU9KHIrbikvMik6bj5yPyhjPSh0K2UpLzIsdT1uLWYtbC8yKTooYz0odCtlKS8yLHU9bitmK2wvMik7cmV0dXJuIHYoeSx4LGMsdSxwLGgpfShpLHMsYyx1LEMsXyxJKSk7RS5hdHRyKCJ0cmFuc2Zvcm0iLE8pfSh0LEUscixiLFQsQSxNLFMpLGUubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHUsRS5zZWxlY3QoInRleHQiKSxtLHksXy54Y2FsZW5kYXIsXy55Y2FsZW5kYXIpfSk7dmFyIEE9ITE9PT1iLnRyYWNlLmNsaXBvbmF4aXM7bC5zZXRDbGlwVXJsKHUsQT9udWxsOmUubGF5ZXJDbGlwSWQsdCl9KTtjLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwicGxvdCIpKHQsYixlKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2F0dHJpYnV0ZXMiOjgzOSwiLi9oZWxwZXJzIjo4NDQsIi4vc3R5bGUiOjg1MixkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw4NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LmNkLGk9dC54YXhpcyxhPXQueWF4aXMsbz1bXTtpZighMT09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgcz1uW3JdO2UuY29udGFpbnMocy5jdCwhMSxyLHQpPyhvLnB1c2goe3BvaW50TnVtYmVyOnIseDppLmMyZChzLngpLHk6YS5jMmQocy55KX0pLHMuc2VsZWN0ZWQ9MSk6cy5zZWxlY3RlZD0wfXJldHVybiBvfX0se31dLDg1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9YTt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gYSh0LGUpe3RoaXMudHJhY2VzPXQsdGhpcy5zZXBOZWdWYWw9ZS5zZXBOZWdWYWwsdGhpcy5vdmVybGFwTm9NZXJnZT1lLm92ZXJsYXBOb01lcmdlO2Zvcih2YXIgcj0xLzAsYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe2Zvcih2YXIgcz10W29dLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXTtjLnAhPT1pJiZhLnB1c2goYy5wKX1zWzBdJiZzWzBdLndpZHRoMSYmKHI9TWF0aC5taW4oc1swXS53aWR0aDEscikpfXRoaXMucG9zaXRpb25zPWE7dmFyIHU9bi5kaXN0aW5jdFZhbHMoYSk7dGhpcy5kaXN0aW5jdFBvc2l0aW9ucz11LnZhbHMsMT09PXUudmFscy5sZW5ndGgmJnIhPT0xLzA/dGhpcy5taW5EaWZmPXI6dGhpcy5taW5EaWZmPU1hdGgubWluKHUubWluRGlmZixyKSx0aGlzLmJpbldpZHRoPXRoaXMubWluRGlmZix0aGlzLmJpbnM9e319YS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZXRMYWJlbCh0LGUpLG49dGhpcy5iaW5zW3JdfHwwO3JldHVybiB0aGlzLmJpbnNbcl09bitlLG59LGEucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKTtyZXR1cm4gdGhpcy5iaW5zW3JdfHwwfSxhLnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbih0LGUpe3JldHVybihlPDAmJnRoaXMuc2VwTmVnVmFsPyJ2IjoiXiIpKyh0aGlzLm92ZXJsYXBOb01lcmdlP3Q6TWF0aC5yb3VuZCh0L3RoaXMuYmluV2lkdGgpKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMH1dLDg1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPWwudGV4dGZvbnQsdT1sLmluc2lkZXRleHRmb250LGY9bC5vdXRzaWRldGV4dGZvbnQsaD10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBwKHQsZSxyKXthLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlLHIpLGQodCxlLHIpfWZ1bmN0aW9uIGQodCxlLHIpe3Quc2VsZWN0QWxsKCJ0ZXh0IikuZWFjaChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxvPWcoaSx0LGUscik7YS5mb250KGksbyl9KX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPW4uX2Z1bGxMYXlvdXQuZm9udCxhPXIudGV4dGZvbnQ7aWYodC5jbGFzc2VkKCJiYXJ0ZXh0LWluc2lkZSIpKXt2YXIgbz1iKGUscik7YT1tKHIsZS5pLGksbyl9ZWxzZSB0LmNsYXNzZWQoImJhcnRleHQtb3V0c2lkZSIpJiYoYT15KHIsZS5pLGkpKTtyZXR1cm4gYX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4geChjLHQudGV4dGZvbnQsZSxyKX1mdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBhPXYodCxlLHIpO3JldHVybih2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udHx8dm9pZCAwPT09dC5faW5wdXQudGV4dGZvbnQuY29sb3J8fEFycmF5LmlzQXJyYXkodC50ZXh0Zm9udC5jb2xvcikmJnZvaWQgMD09PXQudGV4dGZvbnQuY29sb3JbZV0pJiYoYT17Y29sb3I6aS5jb250cmFzdChuKSxmYW1pbHk6YS5mYW1pbHksc2l6ZTphLnNpemV9KSx4KHUsdC5pbnNpZGV0ZXh0Zm9udCxlLGEpfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXYodCxlLHIpO3JldHVybiB4KGYsdC5vdXRzaWRldGV4dGZvbnQsZSxuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe2U9ZXx8e307dmFyIGk9aC5nZXRWYWx1ZShlLmZhbWlseSxyKSxhPWguZ2V0VmFsdWUoZS5zaXplLHIpLG89aC5nZXRWYWx1ZShlLmNvbG9yLHIpO3JldHVybntmYW1pbHk6aC5jb2VyY2VTdHJpbmcodC5mYW1pbHksaSxuLmZhbWlseSksc2l6ZTpoLmNvZXJjZU51bWJlcih0LnNpemUsYSxuLnNpemUpLGNvbG9yOmguY29lcmNlQ29sb3IodC5jb2xvcixvLG4uY29sb3IpfX1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuIndhdGVyZmFsbCI9PT1lLnR5cGU/ZVt0LmRpcl0ubWFya2VyLmNvbG9yOnQubWN8fGUubWFya2VyLmNvbG9yfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmJhcmxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIiksaT1yLnNpemUoKSxhPXQuX2Z1bGxMYXlvdXQ7ci5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLmVhY2goZnVuY3Rpb24odCl7KCJzdGFjayI9PT1hLmJhcm1vZGUmJmk+MXx8MD09PWEuYmFyZ2FwJiYwPT09YS5iYXJncm91cGdhcCYmIXRbMF0udHJhY2UubWFya2VyLmxpbmUud2lkdGgpJiZuLnNlbGVjdCh0aGlzKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSxyLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe3Aobi5zZWxlY3QodGhpcyksZVswXS50cmFjZSx0KX0pLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdHlsZSIpKHIpfSxzdHlsZVRleHRQb2ludHM6ZCxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxpPWVbMF0udHJhY2U7aS5zZWxlY3RlZHBvaW50cz9mdW5jdGlvbih0LGUscil7YS5zZWxlY3RlZFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlKSxmdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpLHM9bi5zZWxlY3QodGhpcyk7aWYodC5zZWxlY3RlZCl7aT1vLmV4dGVuZEZsYXQoe30sZyhzLHQsZSxyKSk7dmFyIGw9ZS5zZWxlY3RlZC50ZXh0Zm9udCYmZS5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvcjtsJiYoaS5jb2xvcj1sKSxhLmZvbnQocyxpKX1lbHNlIGEuc2VsZWN0ZWRUZXh0U3R5bGUocyxlKX0pfSh0LnNlbGVjdEFsbCgidGV4dCIpLGUscil9KHIsaSx0KTpwKHIsaSx0KX0sZ2V0SW5zaWRlVGV4dEZvbnQ6bSxnZXRPdXRzaWRlVGV4dEZvbnQ6eSxnZXRCYXJDb2xvcjpifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9hdHRyaWJ1dGVzIjo4MzksIi4vaGVscGVycyI6ODQ0LGQzOjE1NH1dLDg1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtyKCJtYXJrZXIuY29sb3IiLG8pLGkodCwibWFya2VyIikmJmEodCxlLHMscix7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLHIoIm1hcmtlci5saW5lLmNvbG9yIixuLmRlZmF1bHRMaW5lKSxpKHQsIm1hcmtlci5saW5lIikmJmEodCxlLHMscix7cHJlZml4OiJtYXJrZXIubGluZS4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUud2lkdGgiKSxyKCJtYXJrZXIub3BhY2l0eSIpLHIoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo1ODcsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo1ODh9XSw4NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiLi4vc2NhdHRlcnBvbGFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtyOmEucix0aGV0YTphLnRoZXRhLHIwOmEucjAsZHI6YS5kcix0aGV0YTA6YS50aGV0YTAsZHRoZXRhOmEuZHRoZXRhLHRoZXRhdW5pdDphLnRoZXRhdW5pdCxiYXNlOmkoe30sby5iYXNlLHt9KSxvZmZzZXQ6aSh7fSxvLm9mZnNldCx7fSksd2lkdGg6aSh7fSxvLndpZHRoLHt9KSx0ZXh0Omkoe30sby50ZXh0LHt9KSxob3ZlcnRleHQ6aSh7fSxvLmhvdmVydGV4dCx7fSksbWFya2VyOm8ubWFya2VyLGhvdmVyaW5mbzphLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDpvLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6by51bnNlbGVjdGVkfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2Jhci9hdHRyaWJ1dGVzIjo4MzksIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxMTEzfV0sODU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbz10KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldEdyb3VwUG9zaXRpb25zLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzLGM9dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxvPWUuc3VicGxvdCxsPXJbb10ucmFkaWFsYXhpcyxjPXJbb10uYW5ndWxhcmF4aXMsdT1sLm1ha2VDYWxjZGF0YShlLCJyIiksZj1jLm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLGg9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9dSxnPWYsdj0wO3Y8aDt2KyspcFt2XT17cDpnW3ZdLHM6ZFt2XX07ZnVuY3Rpb24gbSh0KXt2YXIgcj1lW3RdO3ZvaWQgMCE9PXImJihlWyJfIit0XT1BcnJheS5pc0FycmF5KHIpP2MubWFrZUNhbGNkYXRhKGUsdCk6Yy5kMmMocixlLnRoZXRhdW5pdCkpfXJldHVybiJsaW5lYXIiPT09Yy50eXBlJiYobSgid2lkdGgiKSxtKCJvZmZzZXQiKSksbihlLCJtYXJrZXIiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbihlLCJtYXJrZXIubGluZSIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSksYShwLGUpLHMocCxlKSxwfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQuY2FsY2RhdGEsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sdT1zWzBdLnRyYWNlOyEwPT09dS52aXNpYmxlJiZsKHUsImJhciIpJiZ1LnN1YnBsb3Q9PT1yJiZpLnB1c2gocyl9dmFyIGY9Yyh7fSxlLnJhZGlhbGF4aXMse19pZDoieCJ9KSxoPWUuYW5ndWxhcmF4aXM7byh7X2Z1bGxMYXlvdXQ6ZX0saCxmLGkpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU4NSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjU4OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiOjgzOCwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjg0MiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTA1M31dLDg1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLGE9dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLHMsbCk/KGwoInRoZXRhdW5pdCIpLGwoImJhc2UiKSxsKCJvZmZzZXQiKSxsKCJ3aWR0aCIpLGwoInRleHQiKSxsKCJob3ZlcnRleHQiKSxsKCJob3ZlcnRlbXBsYXRlIiksYSh0LGUsbCxyLHMpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGwpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiOjg1MywiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIjoxMTE1LCIuL2F0dHJpYnV0ZXMiOjg1NH1dLDg1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2Jhci9ob3ZlciIpLmdldFRyYWNlQ29sb3Isbz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpLHM9dCgiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIikubWFrZUhvdmVyUG9pbnRUZXh0LGw9dCgiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyIpLmlzUHRJbnNpZGVQb2x5Z29uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsZj10LnN1YnBsb3QsaD1mLnJhZGlhbEF4aXMscD1mLmFuZ3VsYXJBeGlzLGQ9Zi52YW5nbGVzLGc9ZD9sOmkuaXNQdEluc2lkZVNlY3Rvcix2PXQubWF4SG92ZXJEaXN0YW5jZSxtPXAuX3BlcmlvZHx8MipNYXRoLlBJLHk9TWF0aC5hYnMoaC5nMnAoTWF0aC5zcXJ0KGUqZStyKnIpKSkseD1NYXRoLmF0YW4yKHIsZSk7aC5yYW5nZVswXT5oLnJhbmdlWzFdJiYoeCs9TWF0aC5QSSk7aWYobi5nZXRDbG9zZXN0KGMsZnVuY3Rpb24odCl7cmV0dXJuIGcoeSx4LFt0LnJwMCx0LnJwMV0sW3QudGhldGFnMCx0LnRoZXRhZzFdLGQpP3YrTWF0aC5taW4oMSxNYXRoLmFicyh0LnRoZXRhZzEtdC50aGV0YWcwKS9tKS0xKyh0LnJwMS15KS8odC5ycDEtdC5ycDApLTE6MS8wfSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBiPWNbdC5pbmRleF07dC54MD10LngxPWIuY3RbMF0sdC55MD10LnkxPWIuY3RbMV07dmFyIF89aS5leHRlbmRGbGF0KHt9LGIse3I6Yi5zLHRoZXRhOmIucH0pO3JldHVybiBvKGIsdSx0KSxzKF8sdSxmLHQpLHQuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsdC5jb2xvcj1hKHUsYiksdC54TGFiZWxWYWw9dC55TGFiZWxWYWw9dm9pZCAwLGIuczwwJiYodC5pZGVhbEFsaWduPSJsZWZ0IiksW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjE2LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyI6ODEyLCIuLi9iYXIvaG92ZXIiOjg0NSwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTksIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciI6MTExNn1dLDg1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJiYXJwb2xhciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvcG9sYXIiKSxjYXRlZ29yaWVzOlsicG9sYXIiLCJiYXIiLCJzaG93TGVnZW5kIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLHN0eWxlOnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vYmFyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo4MTMsIi4uL2Jhci9zZWxlY3QiOjg1MCwiLi4vYmFyL3N0eWxlIjo4NTIsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuL2F0dHJpYnV0ZXMiOjg1NCwiLi9jYWxjIjo4NTUsIi4vZGVmYXVsdHMiOjg1NiwiLi9ob3ZlciI6ODU3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NTksIi4vbGF5b3V0X2RlZmF1bHRzIjo4NjAsIi4vcGxvdCI6ODYxfV0sODU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJvdmVybGF5Il0sZGZsdDoic3RhY2siLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw4NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvPXt9O2Z1bmN0aW9uIHMocixvKXtyZXR1cm4gbi5jb2VyY2UodFthXXx8e30sZVthXSxpLHIsbyl9Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF07ImJhcnBvbGFyIj09PWMudHlwZSYmITA9PT1jLnZpc2libGUmJihvW2E9Yy5zdWJwbG90XXx8KHMoImJhcm1vZGUiKSxzKCJiYXJnYXAiKSxvW2FdPTEpKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NTl9XSw4NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9dCgiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9ZS54YXhpcyxjPWUueWF4aXMsdT1lLnJhZGlhbEF4aXMsZj1lLmFuZ3VsYXJBeGlzLGg9ZnVuY3Rpb24odCl7dmFyIGU9dC5jeHgscj10LmN5eTtpZih0LnZhbmdsZXMpcmV0dXJuIGZ1bmN0aW9uKG4saSxvLGwpe3ZhciBjLHU7YS5hbmdsZURlbHRhKG8sbCk+MD8oYz1vLHU9bCk6KGM9bCx1PW8pO3ZhciBmPXMuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyhjLHQudmFuZ2xlcylbMF0saD1zLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXModSx0LnZhbmdsZXMpWzFdLHA9W2YsKGMrdSkvMixoXTtyZXR1cm4gcy5wYXRoUG9seWdvbkFubnVsdXMobixpLGMsdSxwLGUscil9O3JldHVybiBmdW5jdGlvbih0LG4saSxvKXtyZXR1cm4gYS5wYXRoQW5udWx1cyh0LG4saSxvLGUscil9fShlKSxwPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuYmFybGF5ZXIiKTthLm1ha2VUcmFjZUdyb3VwcyhwLHIsInRyYWNlIGJhcnMiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBzPXJbMF0ubm9kZTM9bi5zZWxlY3QodGhpcykscD1hLmVuc3VyZVNpbmdsZShzLCJnIiwicG9pbnRzIikuc2VsZWN0QWxsKCJnLnBvaW50IikuZGF0YShhLmlkZW50aXR5KTtwLmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpLmNsYXNzZWQoInBvaW50IiwhMCkscC5leGl0KCkucmVtb3ZlKCkscC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHI9bi5zZWxlY3QodGhpcyksbz10LnJwMD11LmMycCh0LnMwKSxzPXQucnAxPXUuYzJwKHQuczEpLHA9dC50aGV0YWcwPWYuYzJnKHQucDApLGQ9dC50aGV0YWcxPWYuYzJnKHQucDEpO2lmKGkobykmJmkocykmJmkocCkmJmkoZCkmJm8hPT1zJiZwIT09ZCl7dmFyIGc9dS5jMmcodC5zMSksdj0ocCtkKS8yO3QuY3Q9W2wuYzJwKGcqTWF0aC5jb3ModikpLGMuYzJwKGcqTWF0aC5zaW4odikpXSxlPWgobyxzLHAsZCl9ZWxzZSBlPSJNMCwwWiI7YS5lbnN1cmVTaW5nbGUociwicGF0aCIpLmF0dHIoImQiLGUpfSksby5zZXRDbGlwVXJsKHMsZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbCx0KX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnMiOjgxMixkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw4NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD1uLm1hcmtlcixjPWwubGluZTtlLmV4cG9ydHM9e3k6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRleHQ6cyh7fSxuLnRleHQse30pLGhvdmVydGV4dDpzKHt9LG4uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOm8oe30pLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJjYWxjIn0sbm90Y2hlZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxub3RjaHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4yNSxlZGl0VHlwZToiY2FsYyJ9LGJveHBvaW50czp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwib3V0bGllcnMiLCJzdXNwZWN0ZWRvdXRsaWVycyIsITFdLGRmbHQ6Im91dGxpZXJzIixlZGl0VHlwZToiY2FsYyJ9LGJveG1lYW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInNkIiwhMV0sZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGppdHRlcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LHBvaW50cG9zOnt2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MixlZGl0VHlwZToiY2FsYyJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOntvdXRsaWVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsIDAsIDAsIDApIixlZGl0VHlwZToic3R5bGUifSxzeW1ib2w6cyh7fSxsLnN5bWJvbCx7YXJyYXlPazohMSxlZGl0VHlwZToicGxvdCJ9KSxvcGFjaXR5OnMoe30sbC5vcGFjaXR5LHthcnJheU9rOiExLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSksc2l6ZTpzKHt9LGwuc2l6ZSx7YXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9KSxjb2xvcjpzKHt9LGwuY29sb3Ise2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLGxpbmU6e2NvbG9yOnMoe30sYy5jb2xvcix7YXJyYXlPazohMSxkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InN0eWxlIn0pLHdpZHRoOnMoe30sYy53aWR0aCx7YXJyYXlPazohMSxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0pLG91dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LG91dGxpZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGZpbGxjb2xvcjpuLmZpbGxjb2xvcixvZmZzZXRncm91cDppLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOmkuYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6e21hcmtlcjpuLnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6bi51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToic3R5bGUifSxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJib3hlcyIsInBvaW50cyJdLGRmbHQ6ImJveGVzK3BvaW50cyIsZWRpdFR5cGU6InN0eWxlIn19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2Jhci9hdHRyaWJ1dGVzIjo4MzksIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA1MX1dLDg2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLl8sbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuPXt0ZXh0OiJ0eCIsaG92ZXJ0ZXh0OiJodHgifTtmb3IodmFyIGkgaW4gbilBcnJheS5pc0FycmF5KGVbaV0pJiYodFtuW2ldXT1lW2ldW3JdKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQudi1lLnZ9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC52fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsZixoLHAsZD10Ll9mdWxsTGF5b3V0LGc9by5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLHY9by5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLG09W10seT0idmlvbGluIj09PWUudHlwZT8iX251bVZpb2xpbnMiOiJfbnVtQm94ZXMiOyJoIj09PWUub3JpZW50YXRpb24/KHU9ZyxmPSJ4IixoPXYscD0ieSIpOih1PXYsZj0ieSIsaD1nLHA9IngiKTt2YXIgeCxiPXUubWFrZUNhbGNkYXRhKGUsZiksXz1mdW5jdGlvbih0LGUscixhLG8pe2lmKGUgaW4gdClyZXR1cm4gci5tYWtlQ2FsY2RhdGEodCxlKTt2YXIgcztzPWUrIjAiaW4gdD90W2UrIjAiXToibmFtZSJpbiB0JiYoImNhdGVnb3J5Ij09PXIudHlwZXx8bih0Lm5hbWUpJiYtMSE9PVsibGluZWFyIiwibG9nIl0uaW5kZXhPZihyLnR5cGUpfHxpLmlzRGF0ZVRpbWUodC5uYW1lKSYmImRhdGUiPT09ci50eXBlKT90Lm5hbWU6bzt2YXIgbD0ibXVsdGljYXRlZ29yeSI9PT1yLnR5cGU/ci5yMmNfanVzdF9pbmRpY2VzKHMpOnIuZDJjKHMsMCx0W2UrImNhbGVuZGFyIl0pO3JldHVybiBhLm1hcChmdW5jdGlvbigpe3JldHVybiBsfSl9KGUscCxoLGIsZFt5XSksdz1pLmRpc3RpbmN0VmFscyhfKSxrPXcudmFscyxUPXcubWluRGlmZi8yLEE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkocisxKSxpPTA7aTxyO2krKyluW2ldPXRbaV0tZTtyZXR1cm4gbltyXT10W3ItMV0rZSxufShrLFQpLE09ay5sZW5ndGgsUz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09W107cmV0dXJuIGV9KE0pO2ZvcihyPTA7cjxlLl9sZW5ndGg7cisrKXt2YXIgRT1iW3JdO2lmKG4oRSkpe3ZhciBDPWkuZmluZEJpbihfW3JdLEEpO2lmKEM+PTAmJkM8TSl7dmFyIEw9e3Y6RSxpOnJ9O3MoTCxlLHIpLFNbQ10ucHVzaChMKX19fXZhciB6PSJhbGwiPT09KGUuYm94cG9pbnRzfHxlLnBvaW50cyk/aS5pZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdC52PHgubGZ8fHQudj54LnVmfTtmb3Iocj0wO3I8TTtyKyspaWYoU1tyXS5sZW5ndGg+MCl7dmFyIE89U1tyXS5zb3J0KGwpLEk9Ty5tYXAoYyksRD1JLmxlbmd0aDsoeD17fSkucG9zPWtbcl0seC5wdHM9Tyx4Lm1pbj1JWzBdLHgubWF4PUlbRC0xXSx4Lm1lYW49aS5tZWFuKEksRCkseC5zZD1pLnN0ZGV2KEksRCx4Lm1lYW4pLHgucTE9aS5pbnRlcnAoSSwuMjUpLHgubWVkPWkuaW50ZXJwKEksLjUpLHgucTM9aS5pbnRlcnAoSSwuNzUpLHgubGY9TWF0aC5taW4oeC5xMSxJW01hdGgubWluKGkuZmluZEJpbigyLjUqeC5xMS0xLjUqeC5xMyxJLCEwKSsxLEQtMSldKSx4LnVmPU1hdGgubWF4KHgucTMsSVtNYXRoLm1heChpLmZpbmRCaW4oMi41KngucTMtMS41KngucTEsSSksMCldKSx4LmxvPTQqeC5xMS0zKngucTMseC51bz00KngucTMtMyp4LnExO3ZhciBQPTEuNTcqKHgucTMteC5xMSkvTWF0aC5zcXJ0KEQpO3gubG49eC5tZWQtUCx4LnVuPXgubWVkK1AseC5wdHMyPU8uZmlsdGVyKHopLG0ucHVzaCh4KX0hZnVuY3Rpb24odCxlKXtpZihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe2Zvcih2YXIgbj10W3JdLnB0c3x8W10sYT17fSxvPTA7bzxuLmxlbmd0aDtvKyspYVtuW29dLmldPW87aS50YWdTZWxlY3RlZChuLGUsYSl9fShtLGUpO3ZhciBSPW8uZmluZEV4dHJlbWVzKHUsYix7cGFkZGVkOiEwfSk7cmV0dXJuIGUuX2V4dHJlbWVzW3UuX2lkXT1SLG0ubGVuZ3RoPjA/KG1bMF0udD17bnVtOmRbeV0sZFBvczpULHBvc0xldHRlcjpwLHZhbExldHRlcjpmLGxhYmVsczp7bWVkOmEodCwibWVkaWFuOiIpLG1pbjphKHQsIm1pbjoiKSxxMTphKHQsInExOiIpLHEzOmEodCwicTM6IiksbWF4OmEodCwibWF4OiIpLG1lYW46InNkIj09PWUuYm94bWVhbj9hKHQsIm1lYW4gXHhiMSBcdTAzYzM6Iik6YSh0LCJtZWFuOiIpLGxmOmEodCwibG93ZXIgZmVuY2U6IiksdWY6YSh0LCJ1cHBlciBmZW5jZToiKX19LGRbeV0rKyxtKTpbe3Q6e2VtcHR5OiEwfX1dfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDg2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKS5nZXRBeGlzR3JvdXAsbz1bInYiLCJoIl07ZnVuY3Rpb24gcyh0LGUscixvKXt2YXIgcyxsLGMsdT1lLmNhbGNkYXRhLGY9ZS5fZnVsbExheW91dCxoPW8uX2lkLHA9aC5jaGFyQXQoMCksZD1bXSxnPTA7Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKylmb3IoYz11W3Jbc11dLGw9MDtsPGMubGVuZ3RoO2wrKylkLnB1c2goY1tsXS5wb3MpLGcrPShjW2xdLnB0czJ8fFtdKS5sZW5ndGg7aWYoZC5sZW5ndGgpe3ZhciB2PWkuZGlzdGluY3RWYWxzKGQpLG09di5taW5EaWZmLzI7bi5taW5EdGljayhvLHYubWluRGlmZix2LnZhbHNbMF0sITApO3ZhciB5PWZbInZpb2xpbiI9PT10PyJfbnVtVmlvbGlucyI6Il9udW1Cb3hlcyJdLHg9Imdyb3VwIj09PWZbdCsibW9kZSJdJiZ5PjEsYj0xLWZbdCsiZ2FwIl0sXz0xLWZbdCsiZ3JvdXBnYXAiXTtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgdyxrLFQsQSxNLFMsRT0oYz11W3Jbc11dKVswXS50cmFjZSxDPWNbMF0udCxMPUUud2lkdGgsej1FLnNpZGU7aWYoTCl3PWs9QT1MLzIsVD0wO2Vsc2UgaWYodz1tLHgpe3ZhciBPPWEoZixvLl9pZCkrRS5vcmllbnRhdGlvbixJPShmLl9hbGlnbm1lbnRPcHRzW09dfHx7fSlbRS5hbGlnbm1lbnRncm91cF18fHt9LEQ9T2JqZWN0LmtleXMoSS5vZmZzZXRHcm91cHN8fHt9KS5sZW5ndGgsUD1EfHx5O2s9dypiKl8vUCxUPTIqdyooKChEP0UuX29mZnNldEluZGV4OkMubnVtKSsuNSkvUC0uNSkqYixBPXcqYi9QfWVsc2Ugaz13KmIqXyxUPTAsQT13O0MuZFBvcz13LEMuYlBvcz1ULEMuYmRQb3M9ayxDLndIb3Zlcj1BO3ZhciBSLEYsQixOLGosVixVPVQrazsicG9zaXRpdmUiPT09ej8oTT13KihMPzE6LjUpLFI9VSxTPVI9VCk6Im5lZ2F0aXZlIj09PXo/KE09Uj1ULFM9dyooTD8xOi41KSxGPVUpOihNPVM9dyxSPUY9VSk7dmFyIHE9ITE7aWYoKEUuYm94cG9pbnRzfHxFLnBvaW50cykmJmc+MCl7dmFyIEg9RS5wb2ludHBvcyxHPUUuaml0dGVyLFk9RS5tYXJrZXIuc2l6ZS8yLFc9MDtIK0c+PTAmJigoVz1VKihIK0cpKT5NPyhxPSEwLGo9WSxCPVcpOlc+UiYmKGo9WSxCPU0pKSxXPD1NJiYoQj1NKTt2YXIgWD0wO0gtRzw9MCYmKChYPS1VKihILUcpKT5TPyhxPSEwLFY9WSxOPVgpOlg+RiYmKFY9WSxOPVMpKSxYPD1TJiYoTj1TKX1lbHNlIEI9TSxOPVM7dmFyIFo9bmV3IEFycmF5KGMubGVuZ3RoKTtmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKVpbbF09Y1tsXS5wb3M7RS5fZXh0cmVtZXNbaF09bi5maW5kRXh0cmVtZXMobyxaLHtwYWRkZWQ6cSx2cGFkbWludXM6Tix2cGFkcGx1czpCLHBwYWRtaW51czp7eDpWLHk6an1bcF0scHBhZHBsdXM6e3g6aix5OlZ9W3BdfSl9fX1lLmV4cG9ydHM9e2Nyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2FsY2RhdGEsbj1lLnhheGlzLGk9ZS55YXhpcyxhPTA7YTxvLmxlbmd0aDthKyspe2Zvcih2YXIgbD1vW2FdLGM9ImgiPT09bD9pOm4sdT1bXSxmPTA7ZjxyLmxlbmd0aDtmKyspe3ZhciBoPXJbZl0scD1oWzBdLnQsZD1oWzBdLnRyYWNlOyEwIT09ZC52aXNpYmxlfHwiYm94IiE9PWQudHlwZSYmImNhbmRsZXN0aWNrIiE9PWQudHlwZXx8cC5lbXB0eXx8KGQub3JpZW50YXRpb258fCJ2IikhPT1sfHxkLnhheGlzIT09bi5faWR8fGQueWF4aXMhPT1pLl9pZHx8dS5wdXNoKGYpfXMoImJveCIsdCx1LGMpfX0sc2V0UG9zaXRpb25PZmZzZXQ6c319LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxfV0sODY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyLGEpe3ZhciBvLHMsbD1yKCJ5IiksYz1yKCJ4IiksdT1jJiZjLmxlbmd0aDtpZihsJiZsLmxlbmd0aClvPSJ2Iix1P3M9TWF0aC5taW4obi5taW5Sb3dMZW5ndGgoYyksbi5taW5Sb3dMZW5ndGgobCkpOihyKCJ4MCIpLHM9bi5taW5Sb3dMZW5ndGgobCkpO2Vsc2V7aWYoIXUpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTtvPSJoIixyKCJ5MCIpLHM9bi5taW5Sb3dMZW5ndGgoYyl9ZS5fbGVuZ3RoPXMsaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpLHIoIm9yaWVudGF0aW9uIixvKX1mdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWkucHJlZml4LG89bi5jb2VyY2UyKHQsZSxzLCJtYXJrZXIub3V0bGllcmNvbG9yIiksbD1yKCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3IiKSxjPXIoYSsicG9pbnRzIixvfHxsPyJzdXNwZWN0ZWRvdXRsaWVycyI6dm9pZCAwKTtjPyhyKCJqaXR0ZXIiLCJhbGwiPT09Yz8uMzowKSxyKCJwb2ludHBvcyIsImFsbCI9PT1jPy0xLjU6MCkscigibWFya2VyLnN5bWJvbCIpLHIoIm1hcmtlci5vcGFjaXR5IikscigibWFya2VyLnNpemUiKSxyKCJtYXJrZXIuY29sb3IiLGUubGluZS5jb2xvcikscigibWFya2VyLmxpbmUuY29sb3IiKSxyKCJtYXJrZXIubGluZS53aWR0aCIpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT1jJiYocigibWFya2VyLmxpbmUub3V0bGllcmNvbG9yIixlLm1hcmtlci5jb2xvcikscigibWFya2VyLmxpbmUub3V0bGllcndpZHRoIikpLHIoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigic2VsZWN0ZWQubWFya2VyLnNpemUiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplIikscigidGV4dCIpLHIoImhvdmVydGV4dCIpKTpkZWxldGUgZS5tYXJrZXI7dmFyIHU9cigiaG92ZXJvbiIpOyJhbGwiIT09dSYmLTE9PT11LmluZGV4T2YoInBvaW50cyIpfHxyKCJob3ZlcnRlbXBsYXRlIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9bCh0LGUsbyxpKSwhMSE9PWUudmlzaWJsZSYmKG8oImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxvKCJsaW5lLndpZHRoIiksbygiZmlsbGNvbG9yIixhLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLC41KSksbygid2hpc2tlcndpZHRoIiksbygiYm94bWVhbiIpLG8oIndpZHRoIiksbygibm90Y2hlZCIsdm9pZCAwIT09dC5ub3RjaHdpZHRoKSYmbygibm90Y2h3aWR0aCIpLGModCxlLG8se3ByZWZpeDoiYm94In0pKX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaTtmdW5jdGlvbiBhKHQpe3JldHVybiBuLmNvZXJjZShpLl9pbnB1dCxpLHMsdCl9Zm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPShpPXRbbF0pLnR5cGU7ImJveCIhPT1jJiYidmlvbGluIiE9PWN8fChyPWkuX2lucHV0LCJncm91cCI9PT1lW2MrIm1vZGUiXSYmbyhyLGksZSxhKSl9fSxoYW5kbGVTYW1wbGVEZWZhdWx0czpsLGhhbmRsZVBvaW50c0RlZmF1bHRzOmN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL2Jhci9kZWZhdWx0cyI6ODQzLCIuL2F0dHJpYnV0ZXMiOjg2Mn1dLDg2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ob3Zlck9uQm94JiYodC5ob3Zlck9uQm94PWUuaG92ZXJPbkJveCksInhWYWwiaW4gZSYmKHQueD1lLnhWYWwpLCJ5VmFsImluIGUmJih0Lnk9ZS55VmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDg2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpO2Z1bmN0aW9uIGwodCxlLHIscyl7dmFyIGwsYyx1LGYsaCxwLGQsZyx2LG0seSx4LGI9dC5jZCxfPXQueGEsdz10LnlhLGs9YlswXS50cmFjZSxUPWJbMF0udCxBPSJ2aW9saW4iPT09ay50eXBlLE09W10sUz1ULmJkUG9zLEU9VC53SG92ZXIsQz1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3MrVC5iUG9zLXB9O0EmJiJib3RoIiE9PWsuc2lkZT8oInBvc2l0aXZlIj09PWsuc2lkZSYmKHY9ZnVuY3Rpb24odCl7dmFyIGU9Qyh0KTtyZXR1cm4gYS5pbmJveChlLGUrRSxtKX0pLCJuZWdhdGl2ZSI9PT1rLnNpZGUmJih2PWZ1bmN0aW9uKHQpe3ZhciBlPUModCk7cmV0dXJuIGEuaW5ib3goZS1FLGUsbSl9KSk6dj1mdW5jdGlvbih0KXt2YXIgZT1DKHQpO3JldHVybiBhLmluYm94KGUtRSxlK0UsbSl9LHg9QT9mdW5jdGlvbih0KXtyZXR1cm4gYS5pbmJveCh0LnNwYW5bMF0taCx0LnNwYW5bMV0taCxtKX06ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4taCx0Lm1heC1oLG0pfSwiaCI9PT1rLm9yaWVudGF0aW9uPyhoPWUscD1yLGQ9eCxnPXYsbD0ieSIsdT13LGM9IngiLGY9Xyk6KGg9cixwPWUsZD12LGc9eCxsPSJ4Iix1PV8sYz0ieSIsZj13KTt2YXIgTD1NYXRoLm1pbigxLFMvTWF0aC5hYnModS5yMmModS5yYW5nZVsxXSktdS5yMmModS5yYW5nZVswXSkpKTtmdW5jdGlvbiB6KHQpe3JldHVybihkKHQpK2codCkpLzJ9bT10Lm1heEhvdmVyRGlzdGFuY2UtTCx5PXQubWF4U3Bpa2VEaXN0YW5jZS1MO3ZhciBPPWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihzLGQsZyx6KTtpZihhLmdldENsb3Nlc3QoYixPLHQpLCExPT09dC5pbmRleClyZXR1cm5bXTt2YXIgST1iW3QuaW5kZXhdLEQ9ay5saW5lLmNvbG9yLFA9KGsubWFya2VyfHx7fSkuY29sb3I7by5vcGFjaXR5KEQpJiZrLmxpbmUud2lkdGg/dC5jb2xvcj1EOm8ub3BhY2l0eShQKSYmay5ib3hwb2ludHM/dC5jb2xvcj1QOnQuY29sb3I9ay5maWxsY29sb3IsdFtsKyIwIl09dS5jMnAoSS5wb3MrVC5iUG9zLVMsITApLHRbbCsiMSJdPXUuYzJwKEkucG9zK1QuYlBvcytTLCEwKSx0W2wrIkxhYmVsVmFsIl09SS5wb3M7dmFyIFI9bCsiU3Bpa2UiO3Quc3Bpa2VEaXN0YW5jZT16KEkpKnkvbSx0W1JdPXUuYzJwKEkucG9zLCEwKTt2YXIgRj17fSxCPVsibWVkIiwibWluIiwicTEiLCJxMyIsIm1heCJdOyhrLmJveG1lYW58fChrLm1lYW5saW5lfHx7fSkudmlzaWJsZSkmJkIucHVzaCgibWVhbiIpLChrLmJveHBvaW50c3x8ay5wb2ludHMpJiZCLnB1c2goImxmIiwidWYiKTtmb3IodmFyIE49MDtOPEIubGVuZ3RoO04rKyl7dmFyIGo9QltOXTtpZihqIGluIEkmJiEoSVtqXWluIEYpKXtGW0lbal1dPSEwO3ZhciBWPUlbal0sVT1mLmMycChWLCEwKSxxPWkuZXh0ZW5kRmxhdCh7fSx0KTtxW2MrIjAiXT1xW2MrIjEiXT1VLHFbYysiTGFiZWxWYWwiXT1WLHFbYysiTGFiZWwiXT0oVC5sYWJlbHM/VC5sYWJlbHNbal0rIiAiOiIiKStuLmhvdmVyTGFiZWxUZXh0KGYsVikscS5ob3Zlck9uQm94PSEwLCJtZWFuIj09PWomJiJzZCJpbiBJJiYic2QiPT09ay5ib3htZWFuJiYocVtjKyJlcnIiXT1JLnNkKSx0Lm5hbWU9IiIsdC5zcGlrZURpc3RhbmNlPXZvaWQgMCx0W1JdPXZvaWQgMCxxLmhvdmVydGVtcGxhdGU9ITEsTS5wdXNoKHEpfX1yZXR1cm4gTX1mdW5jdGlvbiBjKHQsZSxyKXtmb3IodmFyIG4sbyxsLGM9dC5jZCx1PXQueGEsZj10LnlhLGg9Y1swXS50cmFjZSxwPXUuYzJwKGUpLGQ9Zi5jMnAociksZz1hLnF1YWRyYXR1cmUoZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHUuYzJwKHQueCktcCktZSwxLTMvZSl9LGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhmLmMycCh0LnkpLWQpLWUsMS0zL2UpfSksdj0hMSxtPTA7bTxjLmxlbmd0aDttKyspe289Y1ttXTtmb3IodmFyIHk9MDt5PChvLnB0c3x8W10pLmxlbmd0aDt5Kyspe3ZhciB4PWcobD1vLnB0c1t5XSk7eDw9dC5kaXN0YW5jZSYmKHQuZGlzdGFuY2U9eCx2PVttLHldKX19aWYoIXYpcmV0dXJuITE7bD0obz1jW3ZbMF1dKS5wdHNbdlsxXV07dmFyIGIsXz11LmMycChsLngsITApLHc9Zi5jMnAobC55LCEwKSxrPWwubXJjfHwxO3JldHVybiBuPWkuZXh0ZW5kRmxhdCh7fSx0LHtpbmRleDpsLmksY29sb3I6KGgubWFya2VyfHx7fSkuY29sb3IsbmFtZTpoLm5hbWUseDA6Xy1rLHgxOl8rayx5MDp3LWsseTE6dytrLHNwaWtlRGlzdGFuY2U6dC5kaXN0YW5jZSxob3ZlcnRlbXBsYXRlOmguaG92ZXJ0ZW1wbGF0ZX0pLCJoIj09PWgub3JpZW50YXRpb24/KGI9ZixuLnhMYWJlbFZhbD1sLngsbi55TGFiZWxWYWw9by5wb3MpOihiPXUsbi54TGFiZWxWYWw9by5wb3Msbi55TGFiZWxWYWw9bC55KSxuW2IuX2lkLmNoYXJBdCgwKSsiU3Bpa2UiXT1iLmMycChvLnBvcywhMCkscyhsLGgsbiksbn1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5jZFswXS50cmFjZS5ob3Zlcm9uLG89W107cmV0dXJuLTEhPT1hLmluZGV4T2YoImJveGVzIikmJihvPW8uY29uY2F0KGwodCxlLHIsbikpKSwtMSE9PWEuaW5kZXhPZigicG9pbnRzIikmJihpPWModCxlLHIpKSwiY2xvc2VzdCI9PT1uP2k/W2ldOm86aT8oby5wdXNoKGkpLG8pOm99LGhvdmVyT25Cb3hlczpsLGhvdmVyT25Qb2ludHM6Y319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCI6MTA1OX1dLDg2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KCIuL2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKS5zdXBwbHlMYXlvdXREZWZhdWx0cyxuLmNhbGM9dCgiLi9jYWxjIiksbi5jcm9zc1RyYWNlQ2FsYz10KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxuLnBsb3Q9dCgiLi9wbG90IikucGxvdCxuLnN0eWxlPXQoIi4vc3R5bGUiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImJveCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzdmciLCJzeW1ib2xzIiwib3JpZW50ZWQiLCJib3gtdmlvbGluIiwic2hvd0xlZ2VuZCIsImJveExheW91dCIsInpvb21TY2FsZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi9hdHRyaWJ1dGVzIjo4NjIsIi4vY2FsYyI6ODYzLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjg2NCwiLi9kZWZhdWx0cyI6ODY1LCIuL2V2ZW50X2RhdGEiOjg2NiwiLi9ob3ZlciI6ODY3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NjksIi4vbGF5b3V0X2RlZmF1bHRzIjo4NzAsIi4vcGxvdCI6ODcxLCIuL3NlbGVjdCI6ODcyLCIuL3N0eWxlIjo4NzN9XSw4Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtib3htb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJncm91cCIsIm92ZXJsYXkiXSxkZmx0OiJvdmVybGF5IixlZGl0VHlwZToiY2FsYyJ9LGJveGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zLGVkaXRUeXBlOiJjYWxjIn0sYm94Z3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDg3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbyh0LGUscixpLGEpe2Zvcih2YXIgbz1hKyJMYXlvdXQiLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdO2lmKG4udHJhY2VJcyhjLG8pKXtzPSEwO2JyZWFrfX1zJiYoaShhKyJtb2RlIiksaShhKyJnYXAiKSxpKGErImdyb3VwZ2FwIikpfWUuZXhwb3J0cz17c3VwcGx5TGF5b3V0RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIpe28oMCwwLHIsZnVuY3Rpb24ocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX0sImJveCIpfSxfc3VwcGx5Om99fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4Njl9XSw4NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz01LHM9LjAxO2Z1bmN0aW9uIGwodCxlLHIsYSl7dmFyIG8scyxsPWUucG9zLGM9ZS52YWwsdT1hLmJQb3MsZj1hLndkUG9zfHwwLGg9YS5iUG9zUHhPZmZzZXR8fDAscD1yLndoaXNrZXJ3aWR0aHx8MCxkPXIubm90Y2hlZHx8ITEsZz1kPzEtMipyLm5vdGNod2lkdGg6MTtBcnJheS5pc0FycmF5KGEuYmRQb3MpPyhvPWEuYmRQb3NbMF0scz1hLmJkUG9zWzFdKToobz1hLmJkUG9zLHM9YS5iZFBvcyk7dmFyIHY9dC5zZWxlY3RBbGwoInBhdGguYm94IikuZGF0YSgidmlvbGluIiE9PXIudHlwZXx8ci5ib3gudmlzaWJsZT9pLmlkZW50aXR5OltdKTt2LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJjbGFzcyIsImJveCIpLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaChmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVybiJNMCwwWiI7dmFyIGU9dC5wb3MsYT1sLmMycChlK3UsITApK2gsdj1sLmMycChlK3UtbywhMCkraCxtPWwuYzJwKGUrdStzLCEwKStoLHk9bC5jMnAoZSt1LWYsITApK2gseD1sLmMycChlK3UrZiwhMCkraCxiPWwuYzJwKGUrdS1vKmcsITApK2gsXz1sLmMycChlK3UrcypnLCEwKStoLHc9Yy5jMnAodC5xMSwhMCksaz1jLmMycCh0LnEzLCEwKSxUPWkuY29uc3RyYWluKGMuYzJwKHQubWVkLCEwKSxNYXRoLm1pbih3LGspKzEsTWF0aC5tYXgodyxrKS0xKSxBPXZvaWQgMD09PXQubGZ8fCExPT09ci5ib3hwb2ludHMsTT1jLmMycChBP3QubWluOnQubGYsITApLFM9Yy5jMnAoQT90Lm1heDp0LnVmLCEwKSxFPWMuYzJwKHQubG4sITApLEM9Yy5jMnAodC51biwhMCk7ImgiPT09ci5vcmllbnRhdGlvbj9uLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrVCsiLCIrYisiViIrXysiTSIrdysiLCIrdisiViIrbSsoZD8iSCIrRSsiTCIrVCsiLCIrXysiTCIrQysiLCIrbToiIikrIkgiK2srIlYiK3YrKGQ/IkgiK0MrIkwiK1QrIiwiK2IrIkwiK0UrIiwiK3Y6IiIpKyJaTSIrdysiLCIrYSsiSCIrTSsiTSIraysiLCIrYSsiSCIrUysoMD09PXA/IiI6Ik0iK00rIiwiK3krIlYiK3grIk0iK1MrIiwiK3krIlYiK3gpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrYisiLCIrVCsiSCIrXysiTSIrdisiLCIrdysiSCIrbSsoZD8iViIrRSsiTCIrXysiLCIrVCsiTCIrbSsiLCIrQzoiIikrIlYiK2srIkgiK3YrKGQ/IlYiK0MrIkwiK2IrIiwiK1QrIkwiK3YrIiwiK0U6IiIpKyJaTSIrYSsiLCIrdysiViIrTSsiTSIrYSsiLCIraysiViIrUysoMD09PXA/IiI6Ik0iK3krIiwiK00rIkgiK3grIk0iK3krIiwiK1MrIkgiK3gpKX0pfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGw9ZS54LGM9ZS55LHU9bi5iZFBvcyxmPW4uYlBvcyxoPXIuYm94cG9pbnRzfHxyLnBvaW50cztpLnNlZWRQc2V1ZG9SYW5kb20oKTt2YXIgcD10LnNlbGVjdEFsbCgiZy5wb2ludHMiKS5kYXRhKGg/ZnVuY3Rpb24odCl7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LnQ9bix0LnRyYWNlPXJ9KSx0fTpbXSk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicG9pbnRzIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9cC5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKGZ1bmN0aW9uKHQpe3ZhciBlLG4sYT10LnB0czIsbD1NYXRoLm1heCgodC5tYXgtdC5taW4pLzEwLHQucTMtdC5xMSksYz0xZS05KmwscD1sKnMsZD1bXSxnPTA7aWYoci5qaXR0ZXIpe2lmKDA9PT1sKWZvcihnPTEsZD1uZXcgQXJyYXkoYS5sZW5ndGgpLGU9MDtlPGEubGVuZ3RoO2UrKylkW2VdPTE7ZWxzZSBmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgdj1NYXRoLm1heCgwLGUtbyksbT1hW3ZdLnYseT1NYXRoLm1pbihhLmxlbmd0aC0xLGUrbykseD1hW3ldLnY7ImFsbCIhPT1oJiYoYVtlXS52PHQubGY/eD1NYXRoLm1pbih4LHQubGYpOm09TWF0aC5tYXgobSx0LnVmKSk7dmFyIGI9TWF0aC5zcXJ0KHAqKHktdikvKHgtbStjKSl8fDA7Yj1pLmNvbnN0cmFpbihNYXRoLmFicyhiKSwwLDEpLGQucHVzaChiKSxnPU1hdGgubWF4KGIsZyl9bj0yKnIuaml0dGVyLyhnfHwxKX1mb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgXz1hW2VdLHc9Xy52LGs9ci5qaXR0ZXI/bipkW2VdKihpLnBzZXVkb1JhbmRvbSgpLS41KTowLFQ9dC5wb3MrZit1KihyLnBvaW50cG9zK2spOyJoIj09PXIub3JpZW50YXRpb24/KF8ueT1ULF8ueD13KTooXy54PVQsXy55PXcpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT1oJiZ3PHQudW8mJnc+dC5sbyYmKF8uc289ITApfXJldHVybiBhfSk7ZC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCksZC5leGl0KCkucmVtb3ZlKCksZC5jYWxsKGEudHJhbnNsYXRlUG9pbnRzLGwsYyl9ZnVuY3Rpb24gdSh0LGUscixhKXt2YXIgbyxzLGw9ZS5wb3MsYz1lLnZhbCx1PWEuYlBvcyxmPWEuYlBvc1B4T2Zmc2V0fHwwLGg9ci5ib3htZWFufHwoci5tZWFubGluZXx8e30pLnZpc2libGU7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciBwPXQuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5kYXRhKCJib3giPT09ci50eXBlJiZyLmJveG1lYW58fCJ2aW9saW4iPT09ci50eXBlJiZyLmJveC52aXNpYmxlJiZyLm1lYW5saW5lLnZpc2libGU/aS5pZGVudGl0eTpbXSk7cC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibWVhbiIpLnN0eWxlKHtmaWxsOiJub25lIiwidmVjdG9yLWVmZmVjdCI6Im5vbi1zY2FsaW5nLXN0cm9rZSJ9KSxwLmV4aXQoKS5yZW1vdmUoKSxwLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bC5jMnAodC5wb3MrdSwhMCkrZixpPWwuYzJwKHQucG9zK3UtbywhMCkrZixhPWwuYzJwKHQucG9zK3UrcywhMCkrZixwPWMuYzJwKHQubWVhbiwhMCksZD1jLmMycCh0Lm1lYW4tdC5zZCwhMCksZz1jLmMycCh0Lm1lYW4rdC5zZCwhMCk7ImgiPT09ci5vcmllbnRhdGlvbj9uLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrcCsiLCIraSsiViIrYSsoInNkIj09PWg/Im0wLDBMIitkKyIsIitlKyJMIitwKyIsIitpKyJMIitnKyIsIitlKyJaIjoiIikpOm4uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitpKyIsIitwKyJIIithKygic2QiPT09aD8ibTAsMEwiK2UrIiwiK2QrIkwiK2krIiwiK3ArIkwiK2UrIiwiK2crIloiOiIiKSl9KX1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89ZS54YXhpcyxzPWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBib3hlcyIpLmVhY2goZnVuY3Rpb24odCl7dmFyIHIsaSxhPW4uc2VsZWN0KHRoaXMpLGY9dFswXSxoPWYudCxwPWYudHJhY2U7ZS5pc1JhbmdlUGxvdHx8KGYubm9kZTM9YSksaC53ZFBvcz1oLmJkUG9zKnAud2hpc2tlcndpZHRoLCEwIT09cC52aXNpYmxlfHxoLmVtcHR5P2EucmVtb3ZlKCk6KCJoIj09PXAub3JpZW50YXRpb24/KHI9cyxpPW8pOihyPW8saT1zKSxsKGEse3BvczpyLHZhbDppfSxwLGgpLGMoYSx7eDpvLHk6c30scCxoKSx1KGEse3BvczpyLHZhbDppfSxwLGgpKX0pfSxwbG90Qm94QW5kV2hpc2tlcnM6bCxwbG90UG9pbnRzOmMscGxvdEJveE1lYW46dX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2xpYiI6NzAwLGQzOjE1NH1dLDg3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5jZCxhPXQueGF4aXMsbz10LnlheGlzLHM9W107aWYoITE9PT1lKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKG49MDtuPChpW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspaVtyXS5wdHNbbl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKG49MDtuPChpW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspe3ZhciBsPWlbcl0ucHRzW25dLGM9YS5jMnAobC54KSx1PW8uYzJwKGwueSk7ZS5jb250YWlucyhbYyx1XSxudWxsLGwuaSx0KT8ocy5wdXNoKHtwb2ludE51bWJlcjpsLmkseDphLmMyZChsLngpLHk6by5jMmQobC55KX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBzfX0se31dLDg3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UuYm94ZXMiKTtyLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89ZVswXS50cmFjZSxzPW8ubGluZS53aWR0aDtmdW5jdGlvbiBsKHQsZSxyLG4pe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsZSsicHgiKS5jYWxsKGkuc3Ryb2tlLHIpLmNhbGwoaS5maWxsLG4pfXZhciBjPXIuc2VsZWN0QWxsKCJwYXRoLmJveCIpO2lmKCJjYW5kbGVzdGljayI9PT1vLnR5cGUpYy5lYWNoKGZ1bmN0aW9uKHQpe2lmKCF0LmVtcHR5KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPW9bdC5kaXJdO2woZSxyLmxpbmUud2lkdGgsci5saW5lLmNvbG9yLHIuZmlsbGNvbG9yKSxlLnN0eWxlKCJvcGFjaXR5IixvLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KTtlbHNle2woYyxzLG8ubGluZS5jb2xvcixvLmZpbGxjb2xvciksci5zZWxlY3RBbGwoInBhdGgubWVhbiIpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjpzLCJzdHJva2UtZGFzaGFycmF5IjoyKnMrInB4LCIrcysicHgifSkuY2FsbChpLnN0cm9rZSxvLmxpbmUuY29sb3IpO3ZhciB1PXIuc2VsZWN0QWxsKCJwYXRoLnBvaW50Iik7YS5wb2ludFN0eWxlKHUsbyx0KX19KX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsbj1lWzBdLnRyYWNlLGk9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKTtuLnNlbGVjdGVkcG9pbnRzP2Euc2VsZWN0ZWRQb2ludFN0eWxlKGksbik6YS5wb2ludFN0eWxlKGksbix0KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsZDM6MTU0fV0sODc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsaT10KCIuLi9vaGxjL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbyh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxhLmxpbmUuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOmEubGluZS53aWR0aCxlZGl0VHlwZToic3R5bGUifSxmaWxsY29sb3I6YS5maWxsY29sb3IsZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4OmkueCxvcGVuOmkub3BlbixoaWdoOmkuaGlnaCxsb3c6aS5sb3csY2xvc2U6aS5jbG9zZSxsaW5lOnt3aWR0aDpuKHt9LGEubGluZS53aWR0aCx7fSksZWRpdFR5cGU6InN0eWxlIn0saW5jcmVhc2luZzpvKGkuaW5jcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLGRlY3JlYXNpbmc6byhpLmRlY3JlYXNpbmcubGluZS5jb2xvci5kZmx0KSx0ZXh0OmkudGV4dCxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsd2hpc2tlcndpZHRoOm4oe30sYS53aGlza2Vyd2lkdGgse2RmbHQ6MH0pLGhvdmVybGFiZWw6aS5ob3ZlcmxhYmVsfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vYm94L2F0dHJpYnV0ZXMiOjg2MiwiLi4vb2hsYy9hdHRyaWJ1dGVzIjo5OTl9XSw4NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vb2hsYy9jYWxjIikuY2FsY0NvbW1vbjtmdW5jdGlvbiBvKHQsZSxyLG4pe3JldHVybnttaW46cixxMTpNYXRoLm1pbih0LG4pLG1lZDpuLHEzOk1hdGgubWF4KHQsbiksbWF4OmV9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQscz1pLmdldEZyb21JZCh0LGUueGF4aXMpLGw9aS5nZXRGcm9tSWQodCxlLnlheGlzKSxjPXMubWFrZUNhbGNkYXRhKGUsIngiKSx1PWEodCxlLGMsbCxvKTtyZXR1cm4gdS5sZW5ndGg/KG4uZXh0ZW5kRmxhdCh1WzBdLnQse251bTpyLl9udW1Cb3hlcyxkUG9zOm4uZGlzdGluY3RWYWxzKGMpLm1pbkRpZmYvMixwb3NMZXR0ZXI6IngiLHZhbExldHRlcjoieSJ9KSxyLl9udW1Cb3hlcysrLHUpOlt7dDp7ZW1wdHk6ITB9fV19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9vaGxjL2NhbGMiOjFlM31dLDg3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uL29obGMvb2hsY19kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgYT1yKG4rIi5saW5lLmNvbG9yIik7cihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5maWxsY29sb3IiLGkuYWRkT3BhY2l0eShhLC41KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1hKHQsZSxsLGkpPyhsKCJsaW5lLndpZHRoIikscyh0LGUsbCwiaW5jcmVhc2luZyIpLHModCxlLGwsImRlY3JlYXNpbmciKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgid2hpc2tlcndpZHRoIiksaS5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uL29obGMvb2hsY19kZWZhdWx0cyI6MTAwNCwiLi9hdHRyaWJ1dGVzIjo4NzR9XSw4Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2FuZGxlc3RpY2siLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzaG93TGVnZW5kIiwiY2FuZGxlc3RpY2siLCJib3hMYXlvdXQiXSxtZXRhOnt9LGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIikuc3VwcGx5TGF5b3V0RGVmYXVsdHMsY3Jvc3NUcmFjZUNhbGM6dCgiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4uL2JveC9wbG90IikucGxvdCxsYXllck5hbWU6ImJveGxheWVyIixzdHlsZTp0KCIuLi9ib3gvc3R5bGUiKS5zdHlsZSxob3ZlclBvaW50czp0KCIuLi9vaGxjL2hvdmVyIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4uL29obGMvc2VsZWN0Iil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsYyI6ODY0LCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjg2OSwiLi4vYm94L2xheW91dF9kZWZhdWx0cyI6ODcwLCIuLi9ib3gvcGxvdCI6ODcxLCIuLi9ib3gvc3R5bGUiOjg3MywiLi4vb2hsYy9ob3ZlciI6MTAwMiwiLi4vb2hsYy9zZWxlY3QiOjEwMDYsIi4vYXR0cmlidXRlcyI6ODc0LCIuL2NhbGMiOjg3NSwiLi9kZWZhdWx0cyI6ODc2fV0sODc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXhpc19kZWZhdWx0cyIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe2EoImEiKXx8KGEoImRhIiksYSgiYTAiKSksYSgiYiIpfHwoYSgiZGIiKSxhKCJiMCIpKSxmdW5jdGlvbih0LGUscixhKXtbImFheGlzIiwiYmF4aXMiXS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2hhckF0KDApLGw9dFtvXXx8e30sYz1pLm5ld0NvbnRhaW5lcihlLG8pLHU9e3RpY2tmb250OiJ4IixpZDpzKyJheGlzIixsZXR0ZXI6cyxmb250OmUuZm9udCxuYW1lOm8sZGF0YTp0W3NdLGNhbGVuZGFyOmUuY2FsZW5kYXIsZGZsdENvbG9yOmEsYmdDb2xvcjpyLnBhcGVyX2JnY29sb3IsZnVsbExheW91dDpyfTtuKGwsYyx1KSxjLl9jYXRlZ29yaWVzPWMuX2NhdGVnb3JpZXN8fFtdLHRbb118fCItIj09PWwudHlwZXx8KHRbb109e3R5cGU6bC50eXBlfSl9KX0odCxlLHIsbyl9fSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi9heGlzX2RlZmF1bHRzIjo4ODN9XSw4Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZighbihlKXx8cj49MTApcmV0dXJuIG51bGw7dmFyIGk9MS8wO3ZhciBhPS0xLzA7dmFyIG89ZS5sZW5ndGg7Zm9yKHZhciBzPTA7czxvO3MrKyl7dmFyIGw9ZVtzXTtpZihuKGwpKXt2YXIgYz10KGwscisxKTtjJiYoaT1NYXRoLm1pbihjWzBdLGkpLGE9TWF0aC5tYXgoY1sxXSxhKSl9ZWxzZSBpPU1hdGgubWluKGwsaSksYT1NYXRoLm1heChsLGEpfXJldHVybltpLGFdfSh0LDApfX0seyIuLi8uLi9saWIiOjcwMH1dLDg4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4vYXhpc19hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPW4oe2VkaXRUeXBlOiJjYWxjIn0pO28uZmFtaWx5LmRmbHQ9JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsby5zaXplLmRmbHQ9MTIsby5jb2xvci5kZmx0PWEuZGVmYXVsdExpbmUsZS5leHBvcnRzPXtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxhMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkYTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGIwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGNoZWF0ZXJzbG9wZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhYXhpczppLGJheGlzOmksZm9udDpvLGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sdHJhbnNmb3Jtczp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NCwiLi9heGlzX2F0dHJpYnV0ZXMiOjg4Mn1dLDg4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxnLHYsbSx5PW4ocik/ImEiOiJiIix4PSgiYSI9PT15P3QuYWF4aXM6dC5iYXhpcykuc21vb3RoaW5nLGI9ImEiPT09eT90LmEyaTp0LmIyaixfPSJhIj09PXk/cjppLHc9ImEiPT09eT9pOnIsaz0iYSI9PT15P2UuYS5sZW5ndGg6ZS5iLmxlbmd0aCxUPSJhIj09PXk/ZS5iLmxlbmd0aDplLmEubGVuZ3RoLEE9TWF0aC5mbG9vcigiYSI9PT15P3QuYjJqKHcpOnQuYTJpKHcpKSxNPSJhIj09PXk/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsQSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxBLGUpfTt4JiYocz1NYXRoLm1heCgwLE1hdGgubWluKFQtMixBKSksbD1BLXMsbz0iYSI9PT15P2Z1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxzLHIsbCl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10scyxlLGwscil9KTt2YXIgUz1iKF9bMF0pLEU9YihfWzFdKSxDPVM8RT8xOi0xLEw9MWUtOCooRS1TKSx6PUM+MD9NYXRoLmZsb29yOk1hdGguY2VpbCxPPUM+MD9NYXRoLmNlaWw6TWF0aC5mbG9vcixJPUM+MD9NYXRoLm1pbjpNYXRoLm1heCxEPUM+MD9NYXRoLm1heDpNYXRoLm1pbixQPXooUytMKSxSPU8oRS1MKSxGPVtbZj1NKFMpXV07Zm9yKGE9UDthKkM8UipDO2ErPUMpYz1bXSxnPUQoUyxhKSxtPSh2PUkoRSxhK0MpKS1nLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihrLTIsTWF0aC5mbG9vciguNSooZyt2KSkpKSxoPU0odikseCYmKHA9byh1LGctdSksZD1vKHUsdi11KSxjLnB1c2goW2ZbMF0rcFswXS8zKm0sZlsxXStwWzFdLzMqbV0pLGMucHVzaChbaFswXS1kWzBdLzMqbSxoWzFdLWRbMV0vMyptXSkpLGMucHVzaChoKSxGLnB1c2goYyksZj1oO3JldHVybiBGfX0seyIuLi8uLi9saWIiOjcwMH1dLDg4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPXtjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxtaW46MCxtYXg6MS4zLGVkaXRUeXBlOiJjYWxjIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJkYXRlIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyJ9LGF1dG9yYW5nZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub3JtYWwiLCJ0b3plcm8iLCJub25uZWdhdGl2ZSJdLGRmbHQ6Im5vcm1hbCIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dfSxmaXhlZHJhbmdlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2hlYXRlcnR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGV4IiwidmFsdWUiXSxkZmx0OiJ2YWx1ZSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiYXJyYXkiXSxkZmx0OiJhcnJheSIsZWRpdFR5cGU6ImNhbGMifSxudGlja3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsImVuZCIsImJvdGgiLCJub25lIl0sZGZsdDoic3RhcnQiLGVkaXRUeXBlOiJjYWxjIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGlja2FuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMifSx0aWNrcHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJlIiwiRSIsInBvd2VyIiwiU0kiLCJCIl0sZGZsdDoiQiIsZWRpdFR5cGU6ImNhbGMifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb3JtYXRzdG9wczpvKGEudGlja2Zvcm1hdHN0b3BzLCJjYWxjIiwiZnJvbS1yb290IiksY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVscGFkZGluZzp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJjYWxjIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWlub3JncmlkY291bnQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkdGljazp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhcnJheXRpY2swOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxhcnJheWR0aWNrOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGl0bGVvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9fSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzYwLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NH1dLDg4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5hZGRPcGFjaXR5LGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBoPXIubGV0dGVyLHA9ci5mb250fHx7fSxkPW5baCsiYXhpcyJdO2Z1bmN0aW9uIGcocixuKXtyZXR1cm4gby5jb2VyY2UodCxlLGQscixuKX1mdW5jdGlvbiB2KHIsbil7cmV0dXJuIG8uY29lcmNlMih0LGUsZCxyLG4pfXIubmFtZSYmKGUuX25hbWU9ci5uYW1lLGUuX2lkPXIubmFtZSk7dmFyIG09ZygidHlwZSIpOygiLSI9PT1tJiYoci5kYXRhJiZmdW5jdGlvbih0LGUpe2lmKCItIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQuY2hhckF0KDApLG49dFtyKyJjYWxlbmRhciJdO3QudHlwZT1mKGUsbil9KGUsci5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOm09dC50eXBlPWUudHlwZSksZygic21vb3RoaW5nIiksZygiY2hlYXRlcnR5cGUiKSxnKCJzaG93dGlja2xhYmVscyIpLGcoImxhYmVscHJlZml4IixoKyIgPSAiKSxnKCJsYWJlbHN1ZmZpeCIpLGcoInNob3d0aWNrcHJlZml4IiksZygic2hvd3RpY2tzdWZmaXgiKSxnKCJzZXBhcmF0ZXRob3VzYW5kcyIpLGcoInRpY2tmb3JtYXQiKSxnKCJleHBvbmVudGZvcm1hdCIpLGcoInNob3dleHBvbmVudCIpLGcoImNhdGVnb3J5b3JkZXIiKSxnKCJ0aWNrbW9kZSIpLGcoInRpY2t2YWxzIiksZygidGlja3RleHQiKSxnKCJ0aWNrMCIpLGcoImR0aWNrIiksImFycmF5Ij09PWUudGlja21vZGUmJihnKCJhcnJheXRpY2swIiksZygiYXJyYXlkdGljayIpKSxnKCJsYWJlbHBhZGRpbmciKSxlLl9ob3ZlcnRpdGxlPWgsImRhdGUiPT09bSkmJmEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiLHIuY2FsZW5kYXIpO3UoZSxyLmZ1bGxMYXlvdXQpLGUuYzJwPW8uaWRlbnRpdHk7dmFyIHk9ZygiY29sb3IiLHIuZGZsdENvbG9yKSx4PXk9PT10LmNvbG9yP3k6cC5jb2xvcjtnKCJ0aXRsZS50ZXh0IikmJihvLmNvZXJjZUZvbnQoZywidGl0bGUuZm9udCIse2ZhbWlseTpwLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKnAuc2l6ZSksY29sb3I6eH0pLGcoInRpdGxlLm9mZnNldCIpKSxnKCJ0aWNrYW5nbGUiKSxnKCJhdXRvcmFuZ2UiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSkmJmcoInJhbmdlbW9kZSIpLGcoInJhbmdlIiksZS5jbGVhblJhbmdlKCksZygiZml4ZWRyYW5nZSIpLHModCxlLGcsbSksbCh0LGUsZyxtLHIpLGModCxlLGcse2RhdGE6ci5kYXRhLGRhdGFBdHRyOmh9KTt2YXIgYj12KCJncmlkY29sb3IiLGkoeSwuMykpLF89digiZ3JpZHdpZHRoIiksdz1nKCJzaG93Z3JpZCIpO3d8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgaz12KCJzdGFydGxpbmVjb2xvciIseSksVD12KCJzdGFydGxpbmV3aWR0aCIsXyk7Zygic3RhcnRsaW5lIixlLnNob3dncmlkfHwhIWt8fCEhVCl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIEE9digiZW5kbGluZWNvbG9yIix5KSxNPXYoImVuZGxpbmV3aWR0aCIsXyk7cmV0dXJuIGcoImVuZGxpbmUiLGUuc2hvd2dyaWR8fCEhQXx8ISFNKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLHc/KGcoIm1pbm9yZ3JpZGNvdW50IiksZygibWlub3Jncmlkd2lkdGgiLF8pLGcoIm1pbm9yZ3JpZGNvbG9yIixpKGIsLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLCJub25lIj09PWUuc2hvd3RpY2tsYWJlbHMmJihkZWxldGUgZS50aWNrZm9udCxkZWxldGUgZS50aWNrYW5nbGUsZGVsZXRlIGUuc2hvd2V4cG9uZW50LGRlbGV0ZSBlLmV4cG9uZW50Zm9ybWF0LGRlbGV0ZSBlLnRpY2tmb3JtYXQsZGVsZXRlIGUuc2hvd3RpY2tzdWZmaXgsZGVsZXRlIGUuc2hvd3RpY2twcmVmaXgpLGUuc2hvd3RpY2tzdWZmaXh8fGRlbGV0ZSBlLnRpY2tzdWZmaXgsZS5zaG93dGlja3ByZWZpeHx8ZGVsZXRlIGUudGlja3ByZWZpeCxnKCJ0aWNrbW9kZSIpLGV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo3NDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6NzUyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjc2NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc2NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjc2OSwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9hdHRyaWJ1dGVzIjo4ODB9XSw4ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXkxRCxhPXQoIi4vY2hlYXRlcl9iYXNpcyIpLG89dCgiLi9hcnJheV9taW5tYXgiKSxzPXQoIi4vY2FsY19ncmlkbGluZXMiKSxsPXQoIi4vY2FsY19sYWJlbHMiKSxjPXQoIi4vY2FsY19jbGlwcGF0aCIpLHU9dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSIpLGg9dCgiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiKSxwPXQoIi4vc2V0X2NvbnZlcnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmdldEZyb21JZCh0LGUueGF4aXMpLGQ9bi5nZXRGcm9tSWQodCxlLnlheGlzKSxnPWUuYWF4aXMsdj1lLmJheGlzLG09ZS54LHk9ZS55LHg9W107bSYmaShtKSYmeC5wdXNoKCJ4IikseSYmaSh5KSYmeC5wdXNoKCJ5IikseC5sZW5ndGgmJmgoZSxnLHYsImEiLCJiIix4KTt2YXIgYj1lLl9hPWUuX2F8fGUuYSxfPWUuX2I9ZS5fYnx8ZS5iO209ZS5feHx8ZS54LHk9ZS5feXx8ZS55O3ZhciB3PXt9O2lmKGUuX2NoZWF0ZXIpe3ZhciBrPSJpbmRleCI9PT1nLmNoZWF0ZXJ0eXBlP2IubGVuZ3RoOmIsVD0iaW5kZXgiPT09di5jaGVhdGVydHlwZT9fLmxlbmd0aDpfO209YShrLFQsZS5jaGVhdGVyc2xvcGUpfWUuX3g9bT11KG0pLGUuX3k9eT11KHkpLGYobSxiLF8pLGYoeSxiLF8pLHAoZSksZS5zZXRTY2FsZSgpO3ZhciBBPW8obSksTT1vKHkpLFM9LjUqKEFbMV0tQVswXSksRT0uNSooQVsxXStBWzBdKSxDPS41KihNWzFdLU1bMF0pLEw9LjUqKE1bMV0rTVswXSk7cmV0dXJuIEE9W0UtMS4zKlMsRSsxLjMqU10sTT1bTC0xLjMqQyxMKzEuMypDXSxlLl9leHRyZW1lc1tyLl9pZF09bi5maW5kRXh0cmVtZXMocixBLHtwYWRkZWQ6ITB9KSxlLl9leHRyZW1lc1tkLl9pZF09bi5maW5kRXh0cmVtZXMoZCxNLHtwYWRkZWQ6ITB9KSxzKGUsImEiLCJiIikscyhlLCJiIiwiYSIpLGwoZSxnKSxsKGUsdiksdy5jbGlwc2VnbWVudHM9YyhlLl94Y3RybCxlLl95Y3RybCxnLHYpLHcueD1tLHcueT15LHcuYT1iLHcuYj1fLFt3XX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjk1MCwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjk1MiwiLi9hcnJheV9taW5tYXgiOjg3OSwiLi9jYWxjX2NsaXBwYXRoIjo4ODUsIi4vY2FsY19ncmlkbGluZXMiOjg4NiwiLi9jYWxjX2xhYmVscyI6ODg3LCIuL2NoZWF0ZXJfYmFzaXMiOjg4OSwiLi9zZXRfY29udmVydCI6OTAyLCIuL3Ntb290aF9maWxsXzJkX2FycmF5Ijo5MDN9XSw4ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ISFyLnNtb290aGluZyxjPSEhbi5zbW9vdGhpbmcsdT10WzBdLmxlbmd0aC0xLGY9dC5sZW5ndGgtMTtmb3IoaT0wLGE9W10sbz1bXTtpPD11O2krKylhW2ldPXRbMF1baV0sb1tpXT1lWzBdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT0wLGE9W10sbz1bXTtpPD1mO2krKylhW2ldPXRbaV1bdV0sb1tpXT1lW2ldW3VdO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksaT11LGE9W10sbz1bXTtpPj0wO2ktLSlhW3UtaV09dFtmXVtpXSxvW3UtaV09ZVtmXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9ZixhPVtdLG89W107aT49MDtpLS0pYVtmLWldPXRbaV1bMF0sb1tmLWldPWVbaV1bMF07cmV0dXJuIHMucHVzaCh7eDphLHk6byxiaWN1YmljOmN9KSxzfX0se31dLDg4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxnLHYsbSx5LHg9dFsiXyIrZV0sYj10W2UrImF4aXMiXSxfPWIuX2dyaWRsaW5lcz1bXSx3PWIuX21pbm9yZ3JpZGxpbmVzPVtdLGs9Yi5fYm91bmRhcnlsaW5lcz1bXSxUPXRbIl8iK3JdLEE9dFtyKyJheGlzIl07ImFycmF5Ij09PWIudGlja21vZGUmJihiLnRpY2t2YWxzPXguc2xpY2UoKSk7dmFyIE09dC5feGN0cmwsUz10Ll95Y3RybCxFPU1bMF0ubGVuZ3RoLEM9TS5sZW5ndGgsTD10Ll9hLmxlbmd0aCx6PXQuX2IubGVuZ3RoO24ucHJlcFRpY2tzKGIpLCJhcnJheSI9PT1iLnRpY2ttb2RlJiZkZWxldGUgYi50aWNrdmFsczt2YXIgTz1iLnNtb290aGluZz8zOjE7ZnVuY3Rpb24gSShuKXt2YXIgaSxhLG8scyxsLGMsdSxmLHAsZCxnLHYsbT1bXSx5PVtdLHg9e307aWYoImIiPT09ZSlmb3IoYT10LmIyaihuKSxvPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbih6LTIsYSkpKSxzPWEtbyx4Lmxlbmd0aD16LHguY3Jvc3NMZW5ndGg9TCx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLGEpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLHMpfSxpPTA7aTxMO2krKyljPU1hdGgubWluKEwtMixpKSx1PWktYyxmPXQuZXZhbHh5KFtdLGksYSksQS5zbW9vdGhpbmcmJmk+MCYmKHA9dC5keHlkaShbXSxpLTEsbywwLHMpLG0ucHVzaChsWzBdK3BbMF0vMykseS5wdXNoKGxbMV0rcFsxXS8zKSxkPXQuZHh5ZGkoW10saS0xLG8sMSxzKSxtLnB1c2goZlswXS1kWzBdLzMpLHkucHVzaChmWzFdLWRbMV0vMykpLG0ucHVzaChmWzBdKSx5LnB1c2goZlsxXSksbD1mO2Vsc2UgZm9yKGk9dC5hMmkobiksYz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oTC0yLGkpKSksdT1pLWMseC5sZW5ndGg9TCx4LmNyb3NzTGVuZ3RoPXoseC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10saSxlKX0seC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxjLGUsdSxyKX0sYT0wO2E8ejthKyspbz1NYXRoLm1pbih6LTIsYSkscz1hLW8sZj10LmV2YWx4eShbXSxpLGEpLEEuc21vb3RoaW5nJiZhPjAmJihnPXQuZHh5ZGooW10sYyxhLTEsdSwwKSxtLnB1c2gobFswXStnWzBdLzMpLHkucHVzaChsWzFdK2dbMV0vMyksdj10LmR4eWRqKFtdLGMsYS0xLHUsMSksbS5wdXNoKGZbMF0tdlswXS8zKSx5LnB1c2goZlsxXS12WzFdLzMpKSxtLnB1c2goZlswXSkseS5wdXNoKGZbMV0pLGw9ZjtyZXR1cm4geC5heGlzTGV0dGVyPWUseC5heGlzPWIseC5jcm9zc0F4aXM9QSx4LnZhbHVlPW4seC5jb25zdHZhcj1yLHguaW5kZXg9aCx4Lng9bSx4Lnk9eSx4LnNtb290aGluZz1BLnNtb290aGluZyx4fWZ1bmN0aW9uIEQobil7dmFyIGksYSxvLHMsbCxjPVtdLHU9W10sZj17fTtpZihmLmxlbmd0aD14Lmxlbmd0aCxmLmNyb3NzTGVuZ3RoPVQubGVuZ3RoLCJiIj09PWUpZm9yKG89TWF0aC5tYXgoMCxNYXRoLm1pbih6LTIsbikpLGw9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tbykpLGYueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsbil9LGYuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIsbCl9LGk9MDtpPEU7aSsrKWNbaV09TVtuKk9dW2ldLHVbaV09U1tuKk9dW2ldO2Vsc2UgZm9yKGE9TWF0aC5tYXgoMCxNYXRoLm1pbihMLTIsbikpLHM9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tYSkpLGYueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLG4sZSl9LGYuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sYSxlLHMscil9LGk9MDtpPEM7aSsrKWNbaV09TVtpXVtuKk9dLHVbaV09U1tpXVtuKk9dO3JldHVybiBmLmF4aXNMZXR0ZXI9ZSxmLmF4aXM9YixmLmNyb3NzQXhpcz1BLGYudmFsdWU9eFtuXSxmLmNvbnN0dmFyPXIsZi5pbmRleD1uLGYueD1jLGYueT11LGYuc21vb3RoaW5nPUEuc21vb3RoaW5nLGZ9aWYoImFycmF5Ij09PWIudGlja21vZGUpe2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHgubGVuZ3RoLTEtYi5hcnJheXRpY2swKS9iLmFycmF5ZHRpY2sqKDErbCkpLE1hdGguY2VpbCgtYi5hcnJheXRpY2swL2IuYXJyYXlkdGljay8oMStsKSldLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpWzBdLTEsZj1jWzFdKzEsaD11O2g8ZjtoKyspKG89Yi5hcnJheXRpY2swK2IuYXJyYXlkdGljaypoKTwwfHxvPngubGVuZ3RoLTF8fF8ucHVzaChpKEQobykse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihoPXU7aDxmO2grKylpZihzPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqaCxnPU1hdGgubWluKHMrYi5hcnJheWR0aWNrLHgubGVuZ3RoLTEpLCEoczwwfHxzPngubGVuZ3RoLTF8fGc8MHx8Zz54Lmxlbmd0aC0xKSlmb3Iodj14W3NdLG09eFtnXSxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoeT1nLXMpPD0wfHwoZD12KyhtLXYpKihhKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKihiLmFycmF5ZHRpY2sveSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoSShkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goaShEKDApLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goaShEKHgubGVuZ3RoLTEpLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX1lbHNle2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHhbeC5sZW5ndGgtMV0tYi50aWNrMCkvYi5kdGljayooMStsKSksTWF0aC5jZWlsKCh4WzBdLWIudGljazApL2IuZHRpY2svKDErbCkpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKVswXSxmPWNbMV0saD11O2g8PWY7aCsrKXA9Yi50aWNrMCtiLmR0aWNrKmgsXy5wdXNoKGkoSShwKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGg9dS0xO2g8ZisxO2grKylmb3IocD1iLnRpY2swK2IuZHRpY2sqaCxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoZD1wK2IuZHRpY2sqKGErMSkvKGIubWlub3JncmlkY291bnQrMSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoSShkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goaShJKHhbMF0pLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goaShJKHhbeC5sZW5ndGgtMV0pLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OH1dLDg4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZS5fbGFiZWxzPVtdLGw9ZS5fZ3JpZGxpbmVzO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspbz1sW3JdLC0xIT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSksLTEhPT1bImVuZCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OH1dLDg4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coaSppK2EqYSwuMjUpLGM9TWF0aC5wb3cobypvK3MqcywuMjUpLHU9KGMqYyppLWwqbCpvKSpuLGY9KGMqYyphLWwqbCpzKSpuLGg9YyoobCtjKSozLHA9bCoobCtjKSozO3JldHVybltbZVswXSsoaCYmdS9oKSxlWzFdKyhoJiZmL2gpXSxbZVswXS0ocCYmdS9wKSxlWzFdLShwJiZmL3ApXV19fSx7fV0sODg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLGMsdT1bXSxmPW4odCk/dC5sZW5ndGg6dCxoPW4oZSk/ZS5sZW5ndGg6ZSxwPW4odCk/dDpudWxsLGQ9bihlKT9lOm51bGw7cCYmKG89KHAubGVuZ3RoLTEpLyhwW3AubGVuZ3RoLTFdLXBbMF0pLyhmLTEpKSxkJiYocz0oZC5sZW5ndGgtMSkvKGRbZC5sZW5ndGgtMV0tZFswXSkvKGgtMSkpO3ZhciBnPTEvMCx2PS0xLzA7Zm9yKGE9MDthPGg7YSsrKWZvcih1W2FdPVtdLGw9ZD8oZFthXS1kWzBdKSpzOmEvKGgtMSksaT0wO2k8ZjtpKyspYz0ocD8ocFtpXS1wWzBdKSpvOmkvKGYtMSkpLWwqcixnPU1hdGgubWluKGMsZyksdj1NYXRoLm1heChjLHYpLHVbYV1baV09Yzt2YXIgbT0xLyh2LWcpLHk9LWcqbTtmb3IoYT0wO2E8aDthKyspZm9yKGk9MDtpPGY7aSsrKXVbYV1baV09bSp1W2FdW2ldK3k7cmV0dXJuIHV9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sODkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2F0bXVsbF9yb20iKSxpPXQoIi4uLy4uL2xpYiIpLmVuc3VyZUFycmF5O2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuPS0uNSpyWzBdKzEuNSplWzBdLGk9LS41KnJbMV0rMS41KmVbMV07cmV0dXJuWygyKm4rdFswXSkvMywoMippK3RbMV0pLzNdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsdSxmLGgscCxkLGcsdixtLHkseD1yWzBdLmxlbmd0aCxiPXIubGVuZ3RoLF89cz8zKngtMjp4LHc9bD8zKmItMjpiO2Zvcih0PWkodCx3KSxlPWkoZSx3KSxmPTA7Zjx3O2YrKyl0W2ZdPWkodFtmXSxfKSxlW2ZdPWkoZVtmXSxfKTtmb3IodT0wLGg9MDt1PGI7dSsrLGgrPWw/MzoxKWZvcihwPXRbaF0sZD1lW2hdLGc9clt1XSx2PW9bdV0sYz0wLGY9MDtjPHg7YysrLGYrPXM/MzoxKXBbZl09Z1tjXSxkW2ZdPXZbY107aWYocylmb3IodT0wLGg9MDt1PGI7dSsrLGgrPWw/MzoxKXtmb3IoYz0xLGY9MztjPHgtMTtjKyssZis9MyltPW4oW3JbdV1bYy0xXSxvW3VdW2MtMV1dLFtyW3VdW2NdLG9bdV1bY11dLFtyW3VdW2MrMV0sb1t1XVtjKzFdXSxzKSx0W2hdW2YtMV09bVswXVswXSxlW2hdW2YtMV09bVswXVsxXSx0W2hdW2YrMV09bVsxXVswXSxlW2hdW2YrMV09bVsxXVsxXTt5PWEoW3RbaF1bMF0sZVtoXVswXV0sW3RbaF1bMl0sZVtoXVsyXV0sW3RbaF1bM10sZVtoXVszXV0pLHRbaF1bMV09eVswXSxlW2hdWzFdPXlbMV0seT1hKFt0W2hdW18tMV0sZVtoXVtfLTFdXSxbdFtoXVtfLTNdLGVbaF1bXy0zXV0sW3RbaF1bXy00XSxlW2hdW18tNF1dKSx0W2hdW18tMl09eVswXSxlW2hdW18tMl09eVsxXX1pZihsKWZvcihmPTA7ZjxfO2YrKyl7Zm9yKGg9MztoPHctMztoKz0zKW09bihbdFtoLTNdW2ZdLGVbaC0zXVtmXV0sW3RbaF1bZl0sZVtoXVtmXV0sW3RbaCszXVtmXSxlW2grM11bZl1dLGwpLHRbaC0xXVtmXT1tWzBdWzBdLGVbaC0xXVtmXT1tWzBdWzFdLHRbaCsxXVtmXT1tWzFdWzBdLGVbaCsxXVtmXT1tWzFdWzFdO3k9YShbdFswXVtmXSxlWzBdW2ZdXSxbdFsyXVtmXSxlWzJdW2ZdXSxbdFszXVtmXSxlWzNdW2ZdXSksdFsxXVtmXT15WzBdLGVbMV1bZl09eVsxXSx5PWEoW3Rbdy0xXVtmXSxlW3ctMV1bZl1dLFt0W3ctM11bZl0sZVt3LTNdW2ZdXSxbdFt3LTRdW2ZdLGVbdy00XVtmXV0pLHRbdy0yXVtmXT15WzBdLGVbdy0yXVtmXT15WzFdfWlmKHMmJmwpZm9yKGg9MTtoPHc7aCs9KGgrMSklMz09MD8yOjEpe2ZvcihmPTM7ZjxfLTM7Zis9MyltPW4oW3RbaF1bZi0zXSxlW2hdW2YtM11dLFt0W2hdW2ZdLGVbaF1bZl1dLFt0W2hdW2YrM10sZVtoXVtmKzNdXSxzKSx0W2hdW2YtMV09LjUqKHRbaF1bZi0xXSttWzBdWzBdKSxlW2hdW2YtMV09LjUqKGVbaF1bZi0xXSttWzBdWzFdKSx0W2hdW2YrMV09LjUqKHRbaF1bZisxXSttWzFdWzBdKSxlW2hdW2YrMV09LjUqKGVbaF1bZisxXSttWzFdWzFdKTt5PWEoW3RbaF1bMF0sZVtoXVswXV0sW3RbaF1bMl0sZVtoXVsyXV0sW3RbaF1bM10sZVtoXVszXV0pLHRbaF1bMV09LjUqKHRbaF1bMV0reVswXSksZVtoXVsxXT0uNSooZVtoXVsxXSt5WzFdKSx5PWEoW3RbaF1bXy0xXSxlW2hdW18tMV1dLFt0W2hdW18tM10sZVtoXVtfLTNdXSxbdFtoXVtfLTRdLGVbaF1bXy00XV0pLHRbaF1bXy0yXT0uNSoodFtoXVtfLTJdK3lbMF0pLGVbaF1bXy0yXT0uNSooZVtoXVtfLTJdK3lbMV0pfXJldHVyblt0LGVdfX0seyIuLi8uLi9saWIiOjcwMCwiLi9jYXRtdWxsX3JvbSI6ODg4fV0sODkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U6MWUtNn19LHt9XSw4OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBoPWkqaSxwPTEtaSxkPXAqcCxnPXAqaSoyLHY9LTMqZCxtPTMqKGQtZykseT0zKihnLWgpLHg9MypoLGI9YSphLF89YiphLHc9MS1hLGs9dyp3LFQ9ayp3O2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspbz12Kih1PXRbZl0pW25dW3JdK20qdVtuXVtyKzFdK3kqdVtuXVtyKzJdK3gqdVtuXVtyKzNdLHM9dip1W24rMV1bcl0rbSp1W24rMV1bcisxXSt5KnVbbisxXVtyKzJdK3gqdVtuKzFdW3IrM10sbD12KnVbbisyXVtyXSttKnVbbisyXVtyKzFdK3kqdVtuKzJdW3IrMl0reCp1W24rMl1bciszXSxjPXYqdVtuKzNdW3JdK20qdVtuKzNdW3IrMV0reSp1W24rM11bcisyXSt4KnVbbiszXVtyKzNdLGVbZl09VCpvKzMqKGsqYSpzK3cqYipsKStfKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSkscio9Mzt2YXIgdT1pKmksZj0xLWksaD1mKmYscD1mKmkqMixkPS0zKmgsZz0zKihoLXApLHY9MyoocC11KSxtPTMqdSx5PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZCooYz10W2xdKVtuXVtyXStnKmNbbl1bcisxXSt2KmNbbl1bcisyXSttKmNbbl1bciszXSxzPWQqY1tuKzFdW3JdK2cqY1tuKzFdW3IrMV0rdipjW24rMV1bcisyXSttKmNbbisxXVtyKzNdLGVbbF09eSpvK2EqcztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSksbio9Mzt2YXIgaD1hKmEscD1oKmEsZD0xLWEsZz1kKmQsdj1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShmPXRbdV0pW25dW3IrMV0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbisxXVtyXSxsPWZbbisyXVtyKzFdLWZbbisyXVtyXSxjPWZbbiszXVtyKzFdLWZbbiszXVtyXSxlW3VdPXYqbyszKihnKmEqcytkKmgqbCkrcCpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW25dW3IrMV0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbisxXVtyXSxlW2xdPXUqbythKnM7cmV0dXJuIGV9fX0se31dLDg5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxmO2V8fChlPVtdKSxyKj0zLG4qPTM7dmFyIGg9aSppLHA9aCppLGQ9MS1pLGc9ZCpkLHY9ZypkLG09YSphLHk9MS1hLHg9eSp5LGI9eSphKjIsXz0tMyp4LHc9MyooeC1iKSxrPTMqKGItbSksVD0zKm07Zm9yKGY9MDtmPHQubGVuZ3RoO2YrKylvPV8qKHU9dFtmXSlbbl1bcl0rdyp1W24rMV1bcl0rayp1W24rMl1bcl0rVCp1W24rM11bcl0scz1fKnVbbl1bcisxXSt3KnVbbisxXVtyKzFdK2sqdVtuKzJdW3IrMV0rVCp1W24rM11bcisxXSxsPV8qdVtuXVtyKzJdK3cqdVtuKzFdW3IrMl0rayp1W24rMl1bcisyXStUKnVbbiszXVtyKzJdLGM9Xyp1W25dW3IrM10rdyp1W24rMV1bciszXStrKnVbbisyXVtyKzNdK1QqdVtuKzNdW3IrM10sZVtmXT12Km8rMyooZyppKnMrZCpoKmwpK3AqYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9Mzt2YXIgaD1hKmEscD1oKmEsZD0xLWEsZz1kKmQsdj1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShmPXRbdV0pW24rMV1bcl0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbl1bcisxXSxsPWZbbisxXVtyKzJdLWZbbl1bcisyXSxjPWZbbisxXVtyKzNdLWZbbl1bciszXSxlW3VdPXYqbyszKihnKmEqcytkKmgqbCkrcCpjO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pLG4qPTM7dmFyIHU9MS1pLGY9YSphLGg9MS1hLHA9aCpoLGQ9aCphKjIsZz0tMypwLHY9MyoocC1kKSxtPTMqKGQtZikseT0zKmY7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPWcqKGM9dFtsXSlbbl1bcl0rdipjW24rMV1bcl0rbSpjW24rMl1bcl0reSpjW24rM11bcl0scz1nKmNbbl1bcisxXSt2KmNbbisxXVtyKzFdK20qY1tuKzJdW3IrMV0reSpjW24rM11bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pO3ZhciB1PTEtaTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89KGM9dFtsXSlbbisxXVtyXS1jW25dW3JdLHM9Y1tuKzFdW3IrMV0tY1tuXVtyKzFdLGVbbF09dSpvK2kqcztyZXR1cm4gZX19fSx7fV0sODk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWUtMixvPXItMjtyZXR1cm4gbiYmaT9mdW5jdGlvbihlLHIsbil7dmFyIGkscyxsLGMsdSxmO2V8fChlPVtdKTt2YXIgaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtoKj0zLHAqPTM7dmFyIHY9ZCpkLG09dipkLHk9MS1kLHg9eSp5LGI9eCp5LF89ZypnLHc9XypnLGs9MS1nLFQ9ayprLEE9VCprO2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspaT1iKih1PXRbZl0pW3BdW2hdKzMqKHgqZCp1W3BdW2grMV0reSp2KnVbcF1baCsyXSkrbSp1W3BdW2grM10scz1iKnVbcCsxXVtoXSszKih4KmQqdVtwKzFdW2grMV0reSp2KnVbcCsxXVtoKzJdKSttKnVbcCsxXVtoKzNdLGw9Yip1W3ArMl1baF0rMyooeCpkKnVbcCsyXVtoKzFdK3kqdip1W3ArMl1baCsyXSkrbSp1W3ArMl1baCszXSxjPWIqdVtwKzNdW2hdKzMqKHgqZCp1W3ArM11baCsxXSt5KnYqdVtwKzNdW2grMl0pK20qdVtwKzNdW2grM10sZVtmXT1BKmkrMyooVCpnKnMraypfKmwpK3cqYztyZXR1cm4gZX06bj9mdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHUsZixoPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItaCkpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO2gqPTM7dmFyIHY9ZCpkLG09dipkLHk9MS1kLHg9eSp5LGI9eCp5LF89MS1nO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaT1fKihmPXRbdV0pW3BdW2hdK2cqZltwKzFdW2hdLHM9XypmW3BdW2grMV0rZypmW3ArMV1baCsxXSxsPV8qZltwXVtoKzJdK2cqZltwKzFdW2grMV0sYz1fKmZbcF1baCszXStnKmZbcCsxXVtoKzFdLGVbdV09YippKzMqKHgqZCpzK3kqdipsKSttKmM7cmV0dXJuIGV9Omk/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGYsaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtwKj0zO3ZhciB2PWcqZyxtPXYqZyx5PTEtZyx4PXkqeSxiPXgqeSxfPTEtZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooZj10W3VdKVtwXVtoXStkKmZbcF1baCsxXSxzPV8qZltwKzFdW2hdK2QqZltwKzFdW2grMV0sbD1fKmZbcCsyXVtoXStkKmZbcCsyXVtoKzFdLGM9XypmW3ArM11baF0rZCpmW3ArM11baCsxXSxlW3VdPWIqaSszKih4Kmcqcyt5KnYqbCkrbSpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksaD1NYXRoLm1heCgwLE1hdGgubWluKDEsci11KSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1mKSksZD0xLXAsZz0xLWg7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylpPWcqKGM9dFtsXSlbZl1bdV0raCpjW2ZdW3UrMV0scz1nKmNbZisxXVt1XStoKmNbZisxXVt1KzFdLGVbbF09ZCppK3AqcztyZXR1cm4gZX19fSx7fV0sODk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi94eV9kZWZhdWx0cyIpLGE9dCgiLi9hYl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWUuX2NsaXBQYXRoSWQ9ImNsaXAiK2UudWlkKyJjYXJwZXQiO3ZhciB1PWMoImNvbG9yIixzLmRlZmF1bHRMaW5lKTsobi5jb2VyY2VGb250KGMsImZvbnQiKSxjKCJjYXJwZXQiKSxhKHQsZSxsLGMsdSksZS5hJiZlLmIpPyhlLmEubGVuZ3RoPDMmJihlLmFheGlzLnNtb290aGluZz0wKSxlLmIubGVuZ3RoPDMmJihlLmJheGlzLnNtb290aGluZz0wKSxpKHQsZSxjKXx8KGUudmlzaWJsZT0hMSksZS5fY2hlYXRlciYmYygiY2hlYXRlcnNsb3BlIikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1NzYsIi4uLy4uL2xpYiI6NzAwLCIuL2FiX2RlZmF1bHRzIjo4NzgsIi4vYXR0cmlidXRlcyI6ODgwLCIuL3h5X2RlZmF1bHRzIjo5MDR9XSw4OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5hbmltYXRhYmxlPSEwLG4uaXNDb250YWluZXI9ITAsbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjYXJwZXQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwiY2FycGV0IiwiY2FycGV0QXhpcyIsIm5vdExlZ2VuZElzb2xhdGFibGUiLCJub011bHRpQ2F0ZWdvcnkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4vYXR0cmlidXRlcyI6ODgwLCIuL2NhbGMiOjg4NCwiLi9kZWZhdWx0cyI6ODk1LCIuL3Bsb3QiOjkwMX1dLDg5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Ll9mdWxsRGF0YS5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXQuX2Z1bGxEYXRhW2ldO2lmKGEuaW5kZXghPT1lLmluZGV4JiYoImNhcnBldCI9PT1hLnR5cGUmJihyfHwocj1hKSxhLmNhcnBldD09PWUuY2FycGV0KSkpcmV0dXJuIGF9cmV0dXJuIHJ9fSx7fV0sODk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoMD09PXQubGVuZ3RoKXJldHVybiIiO3ZhciBuLGk9W10sYT1yPzM6MTtmb3Iobj0wO248dC5sZW5ndGg7bis9YSlpLnB1c2godFtuXSsiLCIrZVtuXSksciYmbjx0Lmxlbmd0aC1hJiYoaS5wdXNoKCJDIiksaS5wdXNoKFt0W24rMV0rIiwiK2VbbisxXSx0W24rMl0rIiwiK2VbbisyXSsiICJdLmpvaW4oIiAiKSkpO3JldHVybiBpLmpvaW4ocj8iIjoiTCIpfX0se31dLDg5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk7Zm9yKG4odCk/dC5sZW5ndGg+ZS5sZW5ndGgmJih0PXQuc2xpY2UoMCxlLmxlbmd0aCkpOnQ9W10saT0wO2k8ZS5sZW5ndGg7aSsrKXRbaV09cihlW2ldKTtyZXR1cm4gdH19LHsiLi4vLi4vbGliIjo3MDB9XSw5MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pWzBdKnQuZHBkeChlKSxzPWlbMV0qdC5kcGR5KHIpLGw9MSxjPTE7aWYoYSl7dmFyIHU9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLGY9TWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0pLGg9KGlbMF0qYVswXStpWzFdKmFbMV0pL3UvZjtjPU1hdGgubWF4KDAsaCl9dmFyIHA9MTgwKk1hdGguYXRhbjIocyxvKS9NYXRoLlBJO3JldHVybiBwPC05MD8ocCs9MTgwLGw9LWwpOnA+OTAmJihwLT0xODAsbD0tbCkse2FuZ2xlOnAsZmxpcDpsLHA6dC5jMnAobixlLHIpLG9mZnNldE11bHRwbGllcjpjfX19LHt9XSw5MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi9tYXBfMWRfYXJyYXkiKSxvPXQoIi4vbWFrZXBhdGgiKSxzPXQoIi4vb3JpZW50X3RleHQiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vbGliIiksdT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iik7ZnVuY3Rpb24gZih0LGUscixpLHMsbCl7dmFyIGM9ImNvbnN0LSIrcysiLWxpbmVzIix1PXIuc2VsZWN0QWxsKCIuIitjKS5kYXRhKGwpO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKGMsITApLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIiksdS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXIscz1pLngsbD1pLnksYz1hKFtdLHMsdC5jMnApLHU9YShbXSxsLGUuYzJwKSxmPSJNIitvKGMsdSxpLnNtb290aGluZyk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsZikuc3R5bGUoInN0cm9rZS13aWR0aCIsaS53aWR0aCkuc3R5bGUoInN0cm9rZSIsaS5jb2xvcikuc3R5bGUoImZpbGwiLCJub25lIil9KSx1LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBoKHQsZSxyLGEsbyxjLHUsZil7dmFyIGg9Yy5zZWxlY3RBbGwoInRleHQuIitmKS5kYXRhKHUpO2guZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKGYsITApO3ZhciBwPTAsZD17fTtyZXR1cm4gaC5lYWNoKGZ1bmN0aW9uKG8sYyl7dmFyIHU7aWYoImF1dG8iPT09by5heGlzLnRpY2thbmdsZSl1PXMoYSxlLHIsby54eSxvLmR4eSk7ZWxzZXt2YXIgZj0oby5heGlzLnRpY2thbmdsZSsxODApKk1hdGguUEkvMTgwO3U9cyhhLGUscixvLnh5LFtNYXRoLmNvcyhmKSxNYXRoLnNpbihmKV0pfWN8fChkPXthbmdsZTp1LmFuZ2xlLGZsaXA6dS5mbGlwfSk7dmFyIGg9KG8uZW5kQW5jaG9yPy0xOjEpKnUuZmxpcCxnPW4uc2VsZWN0KHRoaXMpLmF0dHIoeyJ0ZXh0LWFuY2hvciI6aD4wPyJzdGFydCI6ImVuZCIsImRhdGEtbm90ZXgiOjF9KS5jYWxsKGkuZm9udCxvLmZvbnQpLnRleHQoby50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLHY9aS5iQm94KHRoaXMpO2cuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS5wWzBdKyIsIit1LnBbMV0rIikgcm90YXRlKCIrdS5hbmdsZSsiKXRyYW5zbGF0ZSgiK28uYXhpcy5sYWJlbHBhZGRpbmcqaCsiLCIrLjMqdi5oZWlnaHQrIikiKSxwPU1hdGgubWF4KHAsdi53aWR0aCtvLmF4aXMubGFiZWxwYWRkaW5nKX0pLGguZXhpdCgpLnJlbW92ZSgpLGQubWF4RXh0ZW50PXAsZH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGw9ZS54YXhpcyx1PWUueWF4aXMscD10Ll9mdWxsTGF5b3V0Ll9jbGlwcztjLm1ha2VUcmFjZUdyb3VwcyhpLHIsInRyYWNlIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbMF0sZD1pLnRyYWNlLHY9ZC5hYXhpcyxtPWQuYmF4aXMseT1jLmVuc3VyZVNpbmdsZShyLCJnIiwibWlub3JsYXllciIpLHg9Yy5lbnN1cmVTaW5nbGUociwiZyIsIm1ham9ybGF5ZXIiKSxiPWMuZW5zdXJlU2luZ2xlKHIsImciLCJib3VuZGFyeWxheWVyIiksXz1jLmVuc3VyZVNpbmdsZShyLCJnIiwibGFiZWxsYXllciIpO3Iuc3R5bGUoIm9wYWNpdHkiLGQub3BhY2l0eSksZihsLHUseCx2LCJhIix2Ll9ncmlkbGluZXMpLGYobCx1LHgsbSwiYiIsbS5fZ3JpZGxpbmVzKSxmKGwsdSx5LHYsImEiLHYuX21pbm9yZ3JpZGxpbmVzKSxmKGwsdSx5LG0sImIiLG0uX21pbm9yZ3JpZGxpbmVzKSxmKGwsdSxiLHYsImEtYm91bmRhcnkiLHYuX2JvdW5kYXJ5bGluZXMpLGYobCx1LGIsbSwiYi1ib3VuZGFyeSIsbS5fYm91bmRhcnlsaW5lcyk7dmFyIHc9aCh0LGwsdSxkLGksXyx2Ll9sYWJlbHMsImEtbGFiZWwiKSxrPWgodCxsLHUsZCxpLF8sbS5fbGFiZWxzLCJiLWxhYmVsIik7IWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sbCl7dmFyIHUsZixoLHA7dT0uNSooci5hWzBdK3IuYVtyLmEubGVuZ3RoLTFdKSxmPXIuYlswXSxoPXIuYWIyeHkodSxmLCEwKSxwPXIuZHh5ZGFfcm91Z2godSxmKSx2b2lkIDA9PT1vLmFuZ2xlJiZjLmV4dGVuZEZsYXQobyxzKHIsaSxhLGgsci5keHlkYl9yb3VnaCh1LGYpKSk7Zyh0LGUscixuLGgscCxyLmFheGlzLGksYSxvLCJhLXRpdGxlIiksdT1yLmFbMF0sZj0uNSooci5iWzBdK3IuYltyLmIubGVuZ3RoLTFdKSxoPXIuYWIyeHkodSxmLCEwKSxwPXIuZHh5ZGJfcm91Z2godSxmKSx2b2lkIDA9PT1sLmFuZ2xlJiZjLmV4dGVuZEZsYXQobCxzKHIsaSxhLGgsci5keHlkYV9yb3VnaCh1LGYpKSk7Zyh0LGUscixuLGgscCxyLmJheGlzLGksYSxsLCJiLXRpdGxlIil9KHQsXyxkLGksbCx1LHcsayksZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgcyxsLHUsZixoPXIuc2VsZWN0KCIjIit0Ll9jbGlwUGF0aElkKTtoLnNpemUoKXx8KGg9ci5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY2FycGV0Y2xpcCIsITApKTt2YXIgcD1jLmVuc3VyZVNpbmdsZShoLCJwYXRoIiwiY2FycGV0Ym91bmRhcnkiKSxkPWUuY2xpcHNlZ21lbnRzLGc9W107Zm9yKGY9MDtmPGQubGVuZ3RoO2YrKylzPWRbZl0sbD1hKFtdLHMueCxuLmMycCksdT1hKFtdLHMueSxpLmMycCksZy5wdXNoKG8obCx1LHMuYmljdWJpYykpO3ZhciB2PSJNIitnLmpvaW4oIkwiKSsiWiI7aC5hdHRyKCJpZCIsdC5fY2xpcFBhdGhJZCkscC5hdHRyKCJkIix2KX0oZCxpLHAsbCx1KX0pfTt2YXIgcD11LkxJTkVfU1BBQ0lORyxkPSgxLXUuTUlEX1NISUZUKS9wKzE7ZnVuY3Rpb24gZyh0LGUscixhLG8sYyx1LGYsaCxnLHYpe3ZhciBtPVtdO3UudGl0bGUudGV4dCYmbS5wdXNoKHUudGl0bGUudGV4dCk7dmFyIHk9ZS5zZWxlY3RBbGwoInRleHQuIit2KS5kYXRhKG0pLHg9Zy5tYXhFeHRlbnQ7eS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQodiwhMCkseS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9cyhyLGYsaCxvLGMpOy0xPT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKHUuc2hvd3RpY2tsYWJlbHMpJiYoeD0wKTt2YXIgYT11LnRpdGxlLmZvbnQuc2l6ZTt4Kz1hK3UudGl0bGUub2Zmc2V0O3ZhciB2PShnLmFuZ2xlKyhnLmZsaXA8MD8xODA6MCktZS5hbmdsZSs0NTApJTM2MCxtPXY+OTAmJnY8MjcwLHk9bi5zZWxlY3QodGhpcyk7eS50ZXh0KHUudGl0bGUudGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSxtJiYoeD0oLWwubGluZUNvdW50KHkpK2QpKnAqYS14KSx5LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UucFswXSsiLCIrZS5wWzFdKyIpIHJvdGF0ZSgiK2UuYW5nbGUrIikgdHJhbnNsYXRlKDAsIit4KyIpIikuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChpLmZvbnQsdS50aXRsZS5mb250KX0pLHkuZXhpdCgpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4vbWFrZXBhdGgiOjg5OCwiLi9tYXBfMWRfYXJyYXkiOjg5OSwiLi9vcmllbnRfdGV4dCI6OTAwLGQzOjE1NH1dLDkwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vbGliL3NlYXJjaCIpLmZpbmRCaW4sYT10KCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiKSxvPXQoIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiKSxzPXQoIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiKSxsPXQoIi4vY3JlYXRlX2pfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fYSxyPXQuX2IsYz1lLmxlbmd0aCx1PXIubGVuZ3RoLGY9dC5hYXhpcyxoPXQuYmF4aXMscD1lWzBdLGQ9ZVtjLTFdLGc9clswXSx2PXJbdS0xXSxtPWVbZS5sZW5ndGgtMV0tZVswXSx5PXJbci5sZW5ndGgtMV0tclswXSx4PW0qbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRSxiPXkqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRTtwLT14LGQrPXgsZy09Yix2Kz1iLHQuaXNWaXNpYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+cCYmdDxkJiZlPmcmJmU8dn0sdC5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8cHx8dD5kfHxlPGd8fGU+dn0sdC5zZXRTY2FsZT1mdW5jdGlvbigpe3ZhciBlPXQuX3gscj10Ll95LG49YSh0Ll94Y3RybCx0Ll95Y3RybCxlLHIsZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpO3QuX3hjdHJsPW5bMF0sdC5feWN0cmw9blsxXSx0LmV2YWx4eT1vKFt0Ll94Y3RybCx0Ll95Y3RybF0sYyx1LGYuc21vb3RoaW5nLGguc21vb3RoaW5nKSx0LmR4eWRpPXMoW3QuX3hjdHJsLHQuX3ljdHJsXSxmLnNtb290aGluZyxoLnNtb290aGluZyksdC5keHlkaj1sKFt0Ll94Y3RybCx0Ll95Y3RybF0sZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpfSx0LmkyYT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGguZmxvb3IodFswXSksYy0yKSxuPXRbMF0tcjtyZXR1cm4oMS1uKSplW3JdK24qZVtyKzFdfSx0LmoyYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGguZmxvb3IodFsxXSksYy0yKSxuPXRbMV0tZTtyZXR1cm4oMS1uKSpyW2VdK24qcltlKzFdfSx0LmlqMmFiPWZ1bmN0aW9uKGUpe3JldHVyblt0LmkyYShlWzBdKSx0LmoyYihlWzFdKV19LHQuYTJpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LGUpLGMtMikpLG49ZVtyXSxhPWVbcisxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihjLTEscisodC1uKS8oYS1uKSkpfSx0LmIyaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGkodCxyKSx1LTIpKSxuPXJbZV0sYT1yW2UrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odS0xLGUrKHQtbikvKGEtbikpKX0sdC5hYjJpaj1mdW5jdGlvbihlKXtyZXR1cm5bdC5hMmkoZVswXSksdC5iMmooZVsxXSldfSx0LmkyYz1mdW5jdGlvbihlLHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSx0LmFiMnh5PWZ1bmN0aW9uKG4saSxhKXtpZighYSYmKG48ZVswXXx8bj5lW2MtMV18aTxyWzBdfHxpPnJbdS0xXSkpcmV0dXJuWyExLCExXTt2YXIgbz10LmEyaShuKSxzPXQuYjJqKGkpLGw9dC5ldmFseHkoW10sbyxzKTtpZihhKXt2YXIgZixoLHAsZCxnPTAsdj0wLG09W107bjxlWzBdPyhmPTAsaD0wLGc9KG4tZVswXSkvKGVbMV0tZVswXSkpOm4+ZVtjLTFdPyhmPWMtMixoPTEsZz0obi1lW2MtMV0pLyhlW2MtMV0tZVtjLTJdKSk6aD1vLShmPU1hdGgubWF4KDAsTWF0aC5taW4oYy0yLE1hdGguZmxvb3IobykpKSksaTxyWzBdPyhwPTAsZD0wLHY9KGktclswXSkvKHJbMV0tclswXSkpOmk+clt1LTFdPyhwPXUtMixkPTEsdj0oaS1yW3UtMV0pLyhyW3UtMV0tclt1LTJdKSk6ZD1zLShwPU1hdGgubWF4KDAsTWF0aC5taW4odS0yLE1hdGguZmxvb3IocykpKSksZyYmKHQuZHh5ZGkobSxmLHAsaCxkKSxsWzBdKz1tWzBdKmcsbFsxXSs9bVsxXSpnKSx2JiYodC5keHlkaihtLGYscCxoLGQpLGxbMF0rPW1bMF0qdixsWzFdKz1tWzFdKnYpfXJldHVybiBsfSx0LmMycD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UuYzJwKHRbMF0pLHIuYzJwKHRbMV0pXX0sdC5wMng9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLnAyYyh0WzBdKSxyLnAyYyh0WzFdKV19LHQuZGFkaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGUubGVuZ3RoLTIsdCkpO3JldHVybiBlW3IrMV0tZVtyXX0sdC5kYmRqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMix0KSk7cmV0dXJuIHJbZSsxXS1yW2VdfSx0LmR4eWRhPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGkobnVsbCxlLHIsbixpKSxvPXQuZGFkaShlLG4pO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRqKG51bGwsZSxyLG4saSksbz10LmRiZGoocixpKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGFfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW0qKG58fC4xKSxhPXQuYWIyeHkoZStpLHIsITApLG89dC5hYjJ4eShlLWksciwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHh5ZGJfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXkqKG58fC4xKSxhPXQuYWIyeHkoZSxyK2ksITApLG89dC5hYjJ4eShlLHItaSwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHBkeD1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX0sdC5kcGR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfX19LHsiLi4vLi4vbGliL3NlYXJjaCI6NzE5LCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiOjg5MCwiLi9jb25zdGFudHMiOjg5MSwiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciI6ODkyLCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yIjo4OTMsIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiOjg5NH1dLDkwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzPVtdLGw9W10sYz10WzBdLmxlbmd0aCx1PXQubGVuZ3RoO2Z1bmN0aW9uIGYoZSxyKXt2YXIgbixpPTAsYT0wO3JldHVybiBlPjAmJnZvaWQgMCE9PShuPXRbcl1bZS0xXSkmJihhKyssaSs9biksZTxjLTEmJnZvaWQgMCE9PShuPXRbcl1bZSsxXSkmJihhKyssaSs9bikscj4wJiZ2b2lkIDAhPT0obj10W3ItMV1bZV0pJiYoYSsrLGkrPW4pLHI8dS0xJiZ2b2lkIDAhPT0obj10W3IrMV1bZV0pJiYoYSsrLGkrPW4pLGkvTWF0aC5tYXgoMSxhKX12YXIgaCxwLGQsZyx2LG0seSx4LGIsXyx3LGs9MDtmb3IoaT0wO2k8YztpKyspZm9yKGE9MDthPHU7YSsrKXZvaWQgMD09PXRbYV1baV0mJihzLnB1c2goaSksbC5wdXNoKGEpLHRbYV1baV09ZihpLGEpKSxrPU1hdGgubWF4KGssTWF0aC5hYnModFthXVtpXSkpO2lmKCFzLmxlbmd0aClyZXR1cm4gdDt2YXIgVD0wLEE9MCxNPXMubGVuZ3RoO2Rve2ZvcihUPTAsbz0wO288TTtvKyspe2k9c1tvXSxhPWxbb107dmFyIFMsRSxDLEwseixPLEk9MCxEPTA7MD09PWk/KEM9ZVt6PU1hdGgubWluKGMtMSwyKV0sTD1lWzFdLFM9dFthXVt6XSxEKz0oRT10W2FdWzFdKSsoRS1TKSooZVswXS1MKS8oTC1DKSxJKyspOmk9PT1jLTEmJihDPWVbej1NYXRoLm1heCgwLGMtMyldLEw9ZVtjLTJdLFM9dFthXVt6XSxEKz0oRT10W2FdW2MtMl0pKyhFLVMpKihlW2MtMV0tTCkvKEwtQyksSSsrKSwoMD09PWl8fGk9PT1jLTEpJiZhPjAmJmE8dS0xJiYoaD1yW2ErMV0tclthXSxEKz0oKHA9clthXS1yW2EtMV0pKnRbYSsxXVtpXStoKnRbYS0xXVtpXSkvKHAraCksSSsrKSwwPT09YT8oQz1yW089TWF0aC5taW4odS0xLDIpXSxMPXJbMV0sUz10W09dW2ldLEQrPShFPXRbMV1baV0pKyhFLVMpKihyWzBdLUwpLyhMLUMpLEkrKyk6YT09PXUtMSYmKEM9cltPPU1hdGgubWF4KDAsdS0zKV0sTD1yW3UtMl0sUz10W09dW2ldLEQrPShFPXRbdS0yXVtpXSkrKEUtUykqKHJbdS0xXS1MKS8oTC1DKSxJKyspLCgwPT09YXx8YT09PXUtMSkmJmk+MCYmaTxjLTEmJihoPWVbaSsxXS1lW2ldLEQrPSgocD1lW2ldLWVbaS0xXSkqdFthXVtpKzFdK2gqdFthXVtpLTFdKS8ocCtoKSxJKyspLEk/RC89STooZD1lW2krMV0tZVtpXSxnPWVbaV0tZVtpLTFdLHg9KHY9clthKzFdLXJbYV0pKihtPXJbYV0tclthLTFdKSoodittKSxEPSgoeT1kKmcqKGQrZykpKihtKnRbYSsxXVtpXSt2KnRbYS0xXVtpXSkreCooZyp0W2FdW2krMV0rZCp0W2FdW2ktMV0pKS8oeCooZytkKSt5KihtK3YpKSksVCs9KF89KGI9RC10W2FdW2ldKS9rKSpfLHc9ST8wOi44NSx0W2FdW2ldKz1iKigxK3cpfVQ9TWF0aC5zcXJ0KFQpfXdoaWxlKEErKzwxMDAmJlQ+MWUtNSk7cmV0dXJuIG4ubG9nKCJTbW9vdGhlciBjb252ZXJnZWQgdG8iLFQsImFmdGVyIixBLCJpdGVyYXRpb25zIiksdH19LHsiLi4vLi4vbGliIjo3MDB9XSw5MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheTFEO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9cigieCIpLGE9aSYmaS5sZW5ndGgsbz1yKCJ5Iikscz1vJiZvLmxlbmd0aDtpZighYSYmIXMpcmV0dXJuITE7aWYoZS5fY2hlYXRlcj0haSxhJiYhbihpKXx8cyYmIW4obykpZS5fbGVuZ3RoPW51bGw7ZWxzZXt2YXIgbD1hP2kubGVuZ3RoOjEvMDtzJiYobD1NYXRoLm1pbihsLG8ubGVuZ3RoKSksZS5hJiZlLmEubGVuZ3RoJiYobD1NYXRoLm1pbihsLGUuYS5sZW5ndGgpKSxlLmImJmUuYi5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5iLmxlbmd0aCkpLGUuX2xlbmd0aD1sfXJldHVybiEwfX0seyIuLi8uLi9saWIiOjcwMH1dLDkwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPWkubWFya2VyLmxpbmU7ZS5leHBvcnRzPWwoe2xvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsb2NhdGlvbm1vZGU6aS5sb2NhdGlvbm1vZGUsejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Omwoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxpLmhvdmVydGV4dCx7fSksbWFya2VyOntsaW5lOntjb2xvcjpjLmNvbG9yLHdpZHRoOmwoe30sYy53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJjYWxjIn0sc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTppLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMiLGZsYWdzOlsibG9jYXRpb24iLCJ6IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSxhKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1ODQsIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MTUsIi4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEwOTF9XSw5MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLG89dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxzPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5fbGVuZ3RoLGw9bmV3IEFycmF5KHIpLGM9MDtjPHI7YysrKXt2YXIgdT1sW2NdPXt9LGY9ZS5sb2NhdGlvbnNbY10saD1lLnpbY107dS5sb2M9InN0cmluZyI9PXR5cGVvZiBmP2Y6bnVsbCx1Lno9bihoKT9oOml9cmV0dXJuIG8obCxlKSxhKHQsZSx7dmFsczplLnosY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6InoifSkscyhsLGUpLGx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo1ODUsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNTAsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjEwNTMsImZhc3QtaXNudW1lcmljIjoyMjF9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6Iik7bCYmbC5sZW5ndGgmJm4uaXNBcnJheU9yVHlwZWRBcnJheShjKSYmYy5sZW5ndGg/KGUuX2xlbmd0aD1NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCkscygibG9jYXRpb25tb2RlIikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5saW5lLndpZHRoIikscygibWFya2VyLm9wYWNpdHkiKSxpKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHMpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9saWIiOjcwMCwiLi9hdHRyaWJ1dGVzIjo5MDV9XSw5MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9jYXRpb249ZS5sb2NhdGlvbix0Lno9ZS56LHR9fSx7fV0sOTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzLGwsYyx1PXQuY2QsZj11WzBdLnRyYWNlLGg9dC5zdWJwbG90O2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspaWYoYz0hMSwobz11W3NdKS5fcG9seWdvbnMpe2ZvcihsPTA7bDxvLl9wb2x5Z29ucy5sZW5ndGg7bCsrKW8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKFtlLHJdKSYmKGM9IWMpLG8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKFtlKzM2MCxyXSkmJihjPSFjKTtpZihjKWJyZWFrfWlmKGMmJm8pcmV0dXJuIHQueDA9dC54MT10LnhhLmMycChvLmN0KSx0LnkwPXQueTE9dC55YS5jMnAoby5jdCksdC5pbmRleD1vLmluZGV4LHQubG9jYXRpb249by5sb2MsdC56PW8ueix0LmhvdmVydGVtcGxhdGU9by5ob3ZlcnRlbXBsYXRlLGZ1bmN0aW9uKHQsZSxyLG8pe2lmKGUuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIHM9ci5oaXx8ZS5ob3ZlcmluZm8sbD0iYWxsIj09PXM/aS5ob3ZlcmluZm8uZmxhZ3M6cy5zcGxpdCgiKyIpLGM9LTEhPT1sLmluZGV4T2YoIm5hbWUiKSx1PS0xIT09bC5pbmRleE9mKCJsb2NhdGlvbiIpLGY9LTEhPT1sLmluZGV4T2YoInoiKSxoPS0xIT09bC5pbmRleE9mKCJ0ZXh0IikscD1bXTshYyYmdT90Lm5hbWVPdmVycmlkZT1yLmxvYzooYyYmKHQubmFtZU92ZXJyaWRlPWUubmFtZSksdSYmcC5wdXNoKHIubG9jKSk7ZiYmcC5wdXNoKChkPXIueixuLnRpY2tUZXh0KG8sby5jMmwoZCksImhvdmVyIikudGV4dCkpO3ZhciBkO2gmJmEocixlLHApO3QuZXh0cmFUZXh0PXAuam9pbigiPGJyPiIpfSh0LGYsbyxoLm1vY2tBeGlzKSxbdF19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0IjoxMDU5LCIuL2F0dHJpYnV0ZXMiOjkwNX1dLDkxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImNob3JvcGxldGgiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2VvIiksbi5jYXRlZ29yaWVzPVsiZ2VvIiwibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dlbyI6Nzc4LCIuLi9oZWF0bWFwL2NvbG9yYmFyIjo5NTEsIi4vYXR0cmlidXRlcyI6OTA1LCIuL2NhbGMiOjkwNiwiLi9kZWZhdWx0cyI6OTA3LCIuL2V2ZW50X2RhdGEiOjkwOCwiLi9ob3ZlciI6OTA5LCIuL3Bsb3QiOjkxMSwiLi9zZWxlY3QiOjkxMiwiLi9zdHlsZSI6OTEzfV0sOTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi9wb2x5Z29uIiksbz10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKS5nZXRUb3BvanNvbkZlYXR1cmVzLHM9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLmxvY2F0aW9uVG9GZWF0dXJlLGw9dCgiLi9zdHlsZSIpLnN0eWxlO2Z1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9dFswXS50cmFjZSxuPXQubGVuZ3RoLGk9byhyLGUpLGE9MDthPG47YSsrKXt2YXIgbD10W2FdLGM9cyhyLmxvY2F0aW9ubW9kZSxsLmxvYyxpKTtjPyhsLmdlb2pzb249YyxsLmN0PWMucHJvcGVydGllcy5jdCxsLmluZGV4PWEsbC5fcG9seWdvbnM9dShjKSk6bC5nZW9qc29uPW51bGx9fWZ1bmN0aW9uIHUodCl7dmFyIGUscixuLGksbz10Lmdlb21ldHJ5LHM9by5jb29yZGluYXRlcyxsPXQuaWQsYz1bXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgtMTtlKyspaWYodFtlXVswXT4wJiZ0W2UrMV1bMF08MClyZXR1cm4gZTtyZXR1cm4gbnVsbH1zd2l0Y2goZT0iUlVTIj09PWx8fCJGSkkiPT09bD9mdW5jdGlvbih0KXt2YXIgZTtpZihudWxsPT09dSh0KSllPXQ7ZWxzZSBmb3IoZT1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoO2krKyllW2ldPVt0W2ldWzBdPDA/dFtpXVswXSszNjA6dFtpXVswXSx0W2ldWzFdXTtjLnB1c2goYS50ZXN0ZXIoZSkpfToiQVRBIj09PWw/ZnVuY3Rpb24odCl7dmFyIGU9dSh0KTtpZihudWxsPT09ZSlyZXR1cm4gYy5wdXNoKGEudGVzdGVyKHQpKTt2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgrMSksbj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaT5lP3JbbisrXT1bdFtpXVswXSszNjAsdFtpXVsxXV06aT09PWU/KHJbbisrXT10W2ldLHJbbisrXT1bdFtpXVswXSwtOTBdKTpyW24rK109dFtpXTt2YXIgbz1hLnRlc3RlcihyKTtvLnB0cy5wb3AoKSxjLnB1c2gobyl9OmZ1bmN0aW9uKHQpe2MucHVzaChhLnRlc3Rlcih0KSl9LG8udHlwZSl7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihyPTA7cjxzLmxlbmd0aDtyKyspZm9yKG49MDtuPHNbcl0ubGVuZ3RoO24rKyllKHNbcl1bbl0pO2JyZWFrO2Nhc2UiUG9seWdvbiI6Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyllKHNbcl0pfXJldHVybiBjfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspYyhyW2FdLGUudG9wb2pzb24pO3ZhciBvPWUubGF5ZXJzLmJhY2twbG90LnNlbGVjdCgiLmNob3JvcGxldGhsYXllciIpO2kubWFrZVRyYWNlR3JvdXBzKG8sciwidHJhY2UgY2hvcm9wbGV0aCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9KGVbMF0ubm9kZTM9bi5zZWxlY3QodGhpcykpLnNlbGVjdEFsbCgicGF0aC5jaG9yb3BsZXRobG9jYXRpb24iKS5kYXRhKGkuaWRlbnRpdHkpO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJjaG9yb3BsZXRobG9jYXRpb24iLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxsKHQsZSl9KX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjY5MywiLi4vLi4vbGliL3BvbHlnb24iOjcxMiwiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIjo3MjcsIi4vc3R5bGUiOjkxMyxkMzoxNTR9XSw5MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspKGk9KG49c1tyXSkuY3QpJiYoYT1sLmMycChpKSxvPWMuYzJwKGkpLGUuY29udGFpbnMoW2Esb10sbnVsbCxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmlbMF0sbGF0OmlbMV19KSxuLnNlbGVjdGVkPTEpOm4uc2VsZWN0ZWQ9MCk7cmV0dXJuIHV9fSx7fV0sOTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpO2Z1bmN0aW9uIHModCxlKXt2YXIgcj1lWzBdLnRyYWNlLHM9ZVswXS5ub2RlMy5zZWxlY3RBbGwoIi5jaG9yb3BsZXRobG9jYXRpb24iKSxsPXIubWFya2VyfHx7fSxjPWwubGluZXx8e30sdT1vLm1ha2VDb2xvclNjYWxlRnVuYyhvLmV4dHJhY3RTY2FsZShyLHtjTGV0dGVyOiJ6In0pKTtzLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cigiZmlsbCIsdSh0LnopKS5jYWxsKGkuc3Ryb2tlLHQubWxjfHxjLmNvbG9yKS5jYWxsKGEuZGFzaExpbmUsIiIsdC5tbHd8fGMud2lkdGh8fDApLnN0eWxlKCJvcGFjaXR5IixsLm9wYWNpdHkpfSksYS5zZWxlY3RlZFBvaW50U3R5bGUocyxyLHQpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXtlJiZzKHQsZSl9LHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLm5vZGUzLG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzP2Euc2VsZWN0ZWRQb2ludFN0eWxlKHIuc2VsZWN0QWxsKCIuY2hvcm9wbGV0aGxvY2F0aW9uIiksbix0KTpzKHQsZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NTg5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCxkMzoxNTR9XSw5MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx1Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHY6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwiYWJzb2x1dGUiXSxlZGl0VHlwZToiY2FsYyIsZGZsdDoic2NhbGVkIn0sc2l6ZXJlZjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjB9LGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZWRpdFR5cGU6ImNhbGMiLHZhbHVlczpbInRpcCIsInRhaWwiLCJjbSIsImNlbnRlciJdLGRmbHQ6ImNtIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZW1wbGF0ZTphKHtlZGl0VHlwZToiY2FsYyJ9LHtrZXlzOlsibm9ybSJdfSl9O2woYyxuKCIiLHtjb2xvckF0dHI6InUvdi93IG5vcm0iLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7Y29sb3JiYXI6aX0pO1sib3BhY2l0eSIsImxpZ2h0cG9zaXRpb24iLCJsaWdodGluZyJdLmZvckVhY2goZnVuY3Rpb24odCl7Y1t0XT1vW3RdfSksYy5ob3ZlcmluZm89bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMiLGZsYWdzOlsieCIsInkiLCJ6IiwidSIsInYiLCJ3Iiwibm9ybSIsInRleHQiLCJuYW1lIl0sZGZsdDoieCt5K3orbm9ybSt0ZXh0K25hbWUifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjo5OTR9XSw5MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS51LGk9ZS52LGE9ZS53LG89TWF0aC5taW4oZS54Lmxlbmd0aCxlLnkubGVuZ3RoLGUuei5sZW5ndGgsci5sZW5ndGgsaS5sZW5ndGgsYS5sZW5ndGgpLHM9LTEvMCxsPTEvMCxjPTA7YzxvO2MrKyl7dmFyIHU9cltjXSxmPWlbY10saD1hW2NdLHA9TWF0aC5zcXJ0KHUqdStmKmYraCpoKTtzPU1hdGgubWF4KHMscCksbD1NYXRoLm1pbihsLHApfWUuX2xlbj1vLGUuX25vcm1NYXg9cyxuKHQsZSx7dmFsczpbbCxzXSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU4NX1dLDkxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1jb25lM2QiKSxpPXQoImdsLWNvbmUzZCIpLmNyZWF0ZUNvbmVNZXNoLGE9dCgiLi4vLi4vbGliIikuc2ltcGxlTWFwLG89dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpO2Z1bmN0aW9uIGwodCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLm1lc2g9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgYz1sLnByb3RvdHlwZTtjLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLnhbZV0sbj10aGlzLmRhdGEueVtlXSxpPXRoaXMuZGF0YS56W2VdLGE9dGhpcy5kYXRhLnVbZV0sbz10aGlzLmRhdGEudltlXSxzPXRoaXMuZGF0YS53W2VdO3QudHJhY2VDb29yZGluYXRlPVtyLG4saSxhLG8scyxNYXRoLnNxcnQoYSphK28qbytzKnMpXTt2YXIgbD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmdm9pZCAwIT09bFtlXT90LnRleHRMYWJlbD1sW2VdOmwmJih0LnRleHRMYWJlbD1sKSwhMH19O3ZhciB1PXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn0sZj17dGlwOjEsdGFpbDowLGNtOi4yNSxjZW50ZXI6LjV9LGg9e3RpcDoxLHRhaWw6MSxjbTouNzUsY2VudGVyOi41fTtmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxsPXt9O2Z1bmN0aW9uIGModCxlKXt2YXIgbj1yW2VdLG89aVt1W2VdXTtyZXR1cm4gYSh0LGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSl9bC52ZWN0b3JzPXMoYyhlLnUsInhheGlzIiksYyhlLnYsInlheGlzIiksYyhlLncsInpheGlzIiksZS5fbGVuKSxsLnBvc2l0aW9ucz1zKGMoZS54LCJ4YXhpcyIpLGMoZS55LCJ5YXhpcyIpLGMoZS56LCJ6YXhpcyIpLGUuX2xlbiksbC5jb2xvcm1hcD1vKGUpLGwudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtlLmNtaW4vZS5fbm9ybU1heCxlLmNtYXgvZS5fbm9ybU1heF0sbC5jb25lT2Zmc2V0PWZbZS5hbmNob3JdLCJzY2FsZWQiPT09ZS5zaXplbW9kZT9sLmNvbmVTaXplPWUuc2l6ZXJlZnx8LjU6bC5jb25lU2l6ZT1lLnNpemVyZWYmJmUuX25vcm1NYXg/ZS5zaXplcmVmL2UuX25vcm1NYXg6LjU7dmFyIHA9bihsKSxkPWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gcC5saWdodFBvc2l0aW9uPVtkLngsZC55LGQuel0scC5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLHAuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixwLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxwLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLHAub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPWhbZS5hbmNob3JdKnAudmVjdG9yU2NhbGUqcC5jb25lU2NhbGUqZS5fbm9ybU1heCxwfWMudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YT10O3ZhciBlPXAodGhpcy5zY2VuZSx0KTt0aGlzLm1lc2gudXBkYXRlKGUpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxuPXAodCxlKSxhPWkocixuKSxvPW5ldyBsKHQsZS51aWQpO3JldHVybiBvLm1lc2g9YSxvLmRhdGE9ZSxhLl90cmFjZT1vLHQuZ2xwbG90LmFkZChhKSxvfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6Njk3LCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjgwMCwiZ2wtY29uZTNkIjoyMzh9XSw5MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygidSIpLGM9cygidiIpLHU9cygidyIpLGY9cygieCIpLGg9cygieSIpLHA9cygieiIpO2wmJmwubGVuZ3RoJiZjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmYmJmYubGVuZ3RoJiZoJiZoLmxlbmd0aCYmcCYmcC5sZW5ndGg/KHMoInNpemVyZWYiKSxzKCJzaXplbW9kZSIpLHMoImFuY2hvciIpLHMoImxpZ2h0aW5nLmFtYmllbnQiKSxzKCJsaWdodGluZy5kaWZmdXNlIikscygibGlnaHRpbmcuc3BlY3VsYXIiKSxzKCJsaWdodGluZy5yb3VnaG5lc3MiKSxzKCJsaWdodGluZy5mcmVzbmVsIikscygibGlnaHRwb3NpdGlvbi54IikscygibGlnaHRwb3NpdGlvbi55IikscygibGlnaHRwb3NpdGlvbi56IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9saWIiOjcwMCwiLi9hdHRyaWJ1dGVzIjo5MTR9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY29uZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0sY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLGV2ZW50RGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vcm09ZS50cmFjZUNvb3JkaW5hdGVbNl0sdH0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjkxNCwiLi9jYWxjIjo5MTUsIi4vY29udmVydCI6OTE2LCIuL2RlZmF1bHRzIjo5MTd9XSw5MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxsPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGY9dS5DT01QQVJJU09OX09QUzIsaD11LklOVEVSVkFMX09QUyxwPWkubGluZTtlLmV4cG9ydHM9Yyh7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLHh0eXBlOm4ueHR5cGUseXR5cGU6bi55dHlwZSx6aG92ZXJmb3JtYXQ6bi56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LGF1dG9jb250b3VyOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJjb250b3Vycy5zdGFydCI6dm9pZCAwLCJjb250b3Vycy5lbmQiOnZvaWQgMCwiY29udG91cnMuc2l6ZSI6dm9pZCAwfX0sbmNvbnRvdXJzOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjE1LG1pbjoxLGVkaXRUeXBlOiJjYWxjIn0sY29udG91cnM6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxldmVscyIsImNvbnN0cmFpbnQiXSxkZmx0OiJsZXZlbHMiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b2NvbnRvdXIiOiExfX0sZW5kOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b2NvbnRvdXIiOiExfX0sY29sb3Jpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJoZWF0bWFwIiwibGluZXMiLCJub25lIl0sZGZsdDoiZmlsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93bGluZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzaG93bGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250Omwoe2VkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxsYWJlbGZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sb3BlcmF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10uY29uY2F0KGYpLmNvbmNhdChoKSxkZmx0OiI9IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2F1dG9jb250b3VyOiExfX0sbGluZTp7Y29sb3I6Yyh7fSxwLmNvbG9yLHtlZGl0VHlwZToic3R5bGUrY29sb3JiYXJzIn0pLHdpZHRoOmMoe30scC53aWR0aCx7ZWRpdFR5cGU6InN0eWxlK2NvbG9yYmFycyJ9KSxkYXNoOnMsc21vb3RoaW5nOmMoe30scC5zbW9vdGhpbmcse30pLGVkaXRUeXBlOiJwbG90In19LGEoIiIse2NMZXR0ZXI6InoiLGF1dG9Db2xvckRmbHQ6ITEsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7Y29sb3JiYXI6b30pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3LCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NjczLCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjk0OCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sOTIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvY2FsYyIpLGk9dCgiLi9zZXRfY29udG91cnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZSk7cmV0dXJuIGkoZSkscn19LHsiLi4vaGVhdG1hcC9jYWxjIjo5NDksIi4vc2V0X2NvbnRvdXJzIjo5Mzh9XSw5MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPXRbMF0sbD1zLngubGVuZ3RoLGM9cy55Lmxlbmd0aCx1PXMueixmPW4uY29udG91cnMsaD0tMS8wLHA9MS8wO2ZvcihpPTA7aTxjO2krKylwPU1hdGgubWluKHAsdVtpXVswXSkscD1NYXRoLm1pbihwLHVbaV1bbC0xXSksaD1NYXRoLm1heChoLHVbaV1bMF0pLGg9TWF0aC5tYXgoaCx1W2ldW2wtMV0pO2ZvcihpPTE7aTxsLTE7aSsrKXA9TWF0aC5taW4ocCx1WzBdW2ldKSxwPU1hdGgubWluKHAsdVtjLTFdW2ldKSxoPU1hdGgubWF4KGgsdVswXVtpXSksaD1NYXRoLm1heChoLHVbYy0xXVtpXSk7c3dpdGNoKHMucHJlZml4Qm91bmRhcnk9ITEsZSl7Y2FzZSI+IjpmLnZhbHVlPmgmJihzLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIjwiOmYudmFsdWU8cCYmKHMucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiW10iOmE9TWF0aC5taW4uYXBwbHkobnVsbCxmLnZhbHVlKSwoKG89TWF0aC5tYXguYXBwbHkobnVsbCxmLnZhbHVlKSk8cHx8YT5oKSYmKHMucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiXVsiOmE9TWF0aC5taW4uYXBwbHkobnVsbCxmLnZhbHVlKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsZi52YWx1ZSksYTxwJiZvPmgmJihzLnByZWZpeEJvdW5kYXJ5PSEwKX19fSx7fV0sOTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyIpLGk9dCgiLi9tYWtlX2NvbG9yX21hcCIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2Usbz0iY2IiK3IudWlkO2lmKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK28pLnJlbW92ZSgpLHIuc2hvd3NjYWxlKXt2YXIgcz1lWzBdLnQuY2I9bih0LG8pLGw9ci5jb250b3VycyxjPXIubGluZSx1PWwuc2l6ZXx8MSxmPWwuY29sb3JpbmcsaD1pKHIse2lzQ29sb3JiYXI6ITB9KTtzLmZpbGxncmFkaWVudCgiaGVhdG1hcCI9PT1mP3IuY29sb3JzY2FsZToiIikuenJhbmdlKCJoZWF0bWFwIj09PWY/W3Iuem1pbixyLnptYXhdOiIiKS5maWxsY29sb3IoImZpbGwiPT09Zj9oOiIiKS5saW5lKHtjb2xvcjoibGluZXMiPT09Zj9oOmMuY29sb3Isd2lkdGg6ITEhPT1sLnNob3dsaW5lcz9jLndpZHRoOjAsZGFzaDpjLmRhc2h9KS5sZXZlbHMoe3N0YXJ0Omwuc3RhcnQsZW5kOmEobCksc2l6ZTp1fSkub3B0aW9ucyhyLmNvbG9yYmFyKSgpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Ijo1ODIsIi4vZW5kX3BsdXMiOjkzMCwiLi9tYWtlX2NvbG9yX21hcCI6OTM1fV0sOTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Qk9UVE9NU1RBUlQ6WzEsOSwxMywxMDQsNzEzXSxUT1BTVEFSVDpbNCw2LDcsMTA0LDcxM10sTEVGVFNUQVJUOls4LDEyLDE0LDIwOCwxMTE0XSxSSUdIVFNUQVJUOlsyLDMsMTEsMjA4LDExMTRdLE5FV0RFTFRBOltudWxsLFstMSwwXSxbMCwtMV0sWy0xLDBdLFsxLDBdLG51bGwsWzAsLTFdLFstMSwwXSxbMCwxXSxbMCwxXSxudWxsLFswLDFdLFsxLDBdLFsxLDBdLFswLC0xXV0sQ0hPT1NFU0FERExFOnsxMDQ6WzQsMV0sMjA4OlsyLDhdLDcxMzpbNywxM10sMTExNDpbMTEsMTRdfSxTQURETEVSRU1BSU5ERVI6ezE6NCwyOjgsNDoxLDc6MTMsODoyLDExOjE0LDEzOjcsMTQ6MTF9LExBQkVMRElTVEFOQ0U6MixMQUJFTElOQ1JFQVNFOjEwLExBQkVMTUlOOjMsTEFCRUxNQVg6MTAsTEFCRUxPUFRJTUlaRVI6e0VER0VDT1NUOjEsQU5HTEVDT1NUOjEsTkVJR0hCT1JDT1NUOjUsU0FNRUxFVkVMRkFDVE9SOjEwLFNBTUVMRVZFTERJU1RBTkNFOjUsTUFYQ09TVDoxMDAsSU5JVElBTFNFQVJDSFBPSU5UUzoxMCxJVEVSQVRJT05TOjV9fX0se31dLDkyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9sYWJlbF9kZWZhdWx0cyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89YS5hZGRPcGFjaXR5LHM9YS5vcGFjaXR5LGw9dCgiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSxjPWwuQ09OU1RSQUlOVF9SRURVQ1RJT04sdT1sLkNPTVBBUklTT05fT1BTMjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxsLGYpe3ZhciBoLHAsZCxnPWUuY29udG91cnMsdj1yKCJjb250b3Vycy5vcGVyYXRpb24iKTsoZy5fb3BlcmF0aW9uPWNbdl0sZnVuY3Rpb24odCxlKXt2YXIgcjstMT09PXUuaW5kZXhPZihlLm9wZXJhdGlvbik/KHQoImNvbnRvdXJzLnZhbHVlIixbMCwxXSksQXJyYXkuaXNBcnJheShlLnZhbHVlKT9lLnZhbHVlLmxlbmd0aD4yP2UudmFsdWU9ZS52YWx1ZS5zbGljZSgyKTowPT09ZS5sZW5ndGg/ZS52YWx1ZT1bMCwxXTplLmxlbmd0aDwyPyhyPXBhcnNlRmxvYXQoZS52YWx1ZVswXSksZS52YWx1ZT1bcixyKzFdKTplLnZhbHVlPVtwYXJzZUZsb2F0KGUudmFsdWVbMF0pLHBhcnNlRmxvYXQoZS52YWx1ZVsxXSldOm4oZS52YWx1ZSkmJihyPXBhcnNlRmxvYXQoZS52YWx1ZSksZS52YWx1ZT1bcixyKzFdKSk6KHQoImNvbnRvdXJzLnZhbHVlIiwwKSxuKGUudmFsdWUpfHwoQXJyYXkuaXNBcnJheShlLnZhbHVlKT9lLnZhbHVlPXBhcnNlRmxvYXQoZS52YWx1ZVswXSk6ZS52YWx1ZT0wKSl9KHIsZyksIj0iPT09dj9oPWcuc2hvd2xpbmVzPSEwOihoPXIoImNvbnRvdXJzLnNob3dsaW5lcyIpLGQ9cigiZmlsbGNvbG9yIixvKCh0LmxpbmV8fHt9KS5jb2xvcnx8bCwuNSkpKSxoKSYmKHA9cigibGluZS5jb2xvciIsZCYmcyhkKT9vKGUuZmlsbGNvbG9yLDEpOmwpLHIoImxpbmUud2lkdGgiLDIpLHIoImxpbmUuZGFzaCIpKTtyKCJsaW5lLnNtb290aGluZyIpLGkocixhLHAsZil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiOjY3MywiLi9sYWJlbF9kZWZhdWx0cyI6OTM0LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sOTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcixhPUFycmF5LmlzQXJyYXkoZSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaSh0KT8rdDpudWxsfXJldHVybi0xIT09bi5DT01QQVJJU09OX09QUzIuaW5kZXhPZih0KT9yPW8oYT9lWzBdOmUpOi0xIT09bi5JTlRFUlZBTF9PUFMuaW5kZXhPZih0KT9yPWE/W28oZVswXSksbyhlWzFdKV06W28oZSksbyhlKV06LTEhPT1uLlNFVF9PUFMuaW5kZXhPZih0KSYmKHI9YT9lLm1hcChvKTpbbyhlKV0pLHJ9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1hKHQsZSk7dmFyIHI9TWF0aC5taW4oZVswXSxlWzFdKSxuPU1hdGgubWF4KGVbMF0sZVsxXSk7cmV0dXJue3N0YXJ0OnIsZW5kOm4sc2l6ZTpuLXJ9fX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm57c3RhcnQ6ZT1hKHQsZSksZW5kOjEvMCxzaXplOjEvMH19fWUuZXhwb3J0cz17IltdIjpvKCJbXSIpLCJdWyI6bygiXVsiKSwiPiI6cygiPiIpLCI8IjpzKCI8IiksIj0iOnMoIj0iKX19LHsiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiOjY3MywiZmFzdC1pc251bWVyaWMiOjIyMX1dLDkyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bigiY29udG91cnMuc3RhcnQiKSxhPW4oImNvbnRvdXJzLmVuZCIpLG89ITE9PT1pfHwhMT09PWEscz1yKCJjb250b3Vycy5zaXplIik7IShvP2UuYXV0b2NvbnRvdXI9ITA6cigiYXV0b2NvbnRvdXIiLCExKSkmJnN8fHIoIm5jb250b3VycyIpfX0se31dLDkyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuLmV4dGVuZEZsYXQoe30sdCx7ZWRnZXBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LmVkZ2VwYXRocykscGF0aHM6bi5leHRlbmREZWVwKFtdLHQucGF0aHMpfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmV2ZXJzZSgpfSxsPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtzd2l0Y2goZSl7Y2FzZSI9IjpjYXNlIjwiOnJldHVybiB0O2Nhc2UiPiI6Zm9yKDEhPT10Lmxlbmd0aCYmbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IG9wZXJhdGlvbi4iKSxhPXRbMF0scj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtyZXR1cm4gdDtjYXNlIl1bIjp2YXIgYz1zO3M9bCxsPWM7Y2FzZSJbXSI6Zm9yKDIhPT10Lmxlbmd0aCYmbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IHJhbmdlIG9wZXJhdGlvbi4iKSxhPWkodFswXSksbz1pKHRbMV0pLHI9MDtyPGEuZWRnZXBhdGhzLmxlbmd0aDtyKyspYS5lZGdlcGF0aHNbcl09cyhhLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGEucGF0aHMubGVuZ3RoO3IrKylhLnBhdGhzW3JdPXMoYS5wYXRoc1tyXSk7Zm9yKDtvLmVkZ2VwYXRocy5sZW5ndGg7KWEuZWRnZXBhdGhzLnB1c2gobChvLmVkZ2VwYXRocy5zaGlmdCgpKSk7Zm9yKDtvLnBhdGhzLmxlbmd0aDspYS5wYXRocy5wdXNoKGwoby5wYXRocy5zaGlmdCgpKSk7cmV0dXJuW2FdfX19LHsiLi4vLi4vbGliIjo3MDB9XSw5Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyIpLGE9dCgiLi9jb25zdHJhaW50X2RlZmF1bHRzIiksbz10KCIuL2NvbnRvdXJzX2RlZmF1bHRzIikscz10KCIuL3N0eWxlX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfWlmKGkodCxlLHUsYykpe3UoInRleHQiKSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIik7dmFyIGY9ImNvbnN0cmFpbnQiPT09dSgiY29udG91cnMudHlwZSIpO3UoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopKSxmP2EodCxlLHUsYyxyKToobyh0LGUsdSxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxsLHIpfSkscyh0LGUsdSxjKSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyI6OTYyLCIuL2F0dHJpYnV0ZXMiOjkxOSwiLi9jb25zdHJhaW50X2RlZmF1bHRzIjo5MjQsIi4vY29udG91cnNfZGVmYXVsdHMiOjkyNiwiLi9zdHlsZV9kZWZhdWx0cyI6OTQwfV0sOTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb25zdHJhaW50X21hcHBpbmciKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz0iY29uc3RyYWludCI9PT10LnR5cGU/aVt0Ll9vcGVyYXRpb25dKHQudmFsdWUpOnQscz1vLnNpemUsbD1bXSxjPWEobyksdT1yLnRyYWNlLl9jYXJwZXRUcmFjZSxmPXU/e3hheGlzOnUuYWF4aXMseWF4aXM6dS5iYXhpcyx4OnIuYSx5OnIuYn06e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4OnIueCx5OnIueX0saD1vLnN0YXJ0O2g8YztoKz1zKWlmKGwucHVzaChuLmV4dGVuZEZsYXQoe2xldmVsOmgsY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10sejpyLnosc21vb3RoaW5nOnIudHJhY2UubGluZS5zbW9vdGhpbmd9LGYpKSxsLmxlbmd0aD4xZTMpe24ud2FybigiVG9vIG1hbnkgY29udG91cnMsIGNsaXBwaW5nIGF0IDEwMDAiLHQpO2JyZWFrfXJldHVybiBsfX0seyIuLi8uLi9saWIiOjcwMCwiLi9jb25zdHJhaW50X21hcHBpbmciOjkyNSwiLi9lbmRfcGx1cyI6OTMwfV0sOTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5lbmQrdC5zaXplLzFlNn19LHt9XSw5MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8ciYmTWF0aC5hYnModFsxXS1lWzFdKTxufWZ1bmN0aW9uIG8odCxlLHIsbyxsKXt2YXIgYyx1PWUuam9pbigiLCIpLGY9dSxoPXQuY3Jvc3NpbmdzW2ZdLHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTAsYT0wO3Q+MjAmJmU/MjA4PT09dHx8MTExND09PXQ/bj0wPT09clswXT8xOi0xOmE9MD09PXJbMV0/MTotMTotMSE9PWkuQk9UVE9NU1RBUlQuaW5kZXhPZih0KT9hPTE6LTEhPT1pLkxFRlRTVEFSVC5pbmRleE9mKHQpP249MTotMSE9PWkuVE9QU1RBUlQuaW5kZXhPZih0KT9hPS0xOm49LTE7cmV0dXJuW24sYV19KGgscixlKSxkPVtzKHQsZSxbLXBbMF0sLXBbMV1dKV0sZz1wLmpvaW4oIiwiKSx2PXQuei5sZW5ndGgsbT10LnpbMF0ubGVuZ3RoO2ZvcihjPTA7YzwxZTQ7YysrKXtpZihoPjIwPyhoPWkuQ0hPT1NFU0FERExFW2hdWyhwWzBdfHxwWzFdKTwwPzA6MV0sdC5jcm9zc2luZ3NbZl09aS5TQURETEVSRU1BSU5ERVJbaF0pOmRlbGV0ZSB0LmNyb3NzaW5nc1tmXSwhKHA9aS5ORVdERUxUQVtoXSkpe24ubG9nKCJGb3VuZCBiYWQgbWFyY2hpbmcgaW5kZXg6IixoLGUsdC5sZXZlbCk7YnJlYWt9ZC5wdXNoKHModCxlLHApKSxlWzBdKz1wWzBdLGVbMV0rPXBbMV0sYShkW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMl0sbyxsKSYmZC5wb3AoKSxmPWUuam9pbigiLCIpO3ZhciB5PXBbMF0mJihlWzBdPDB8fGVbMF0+bS0yKXx8cFsxXSYmKGVbMV08MHx8ZVsxXT52LTIpO2lmKGY9PT11JiZwLmpvaW4oIiwiKT09PWd8fHImJnkpYnJlYWs7aD10LmNyb3NzaW5nc1tmXX0xZTQ9PT1jJiZuLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpO3ZhciB4LGIsXyx3LGssVCxBLE0sUyxFLEMsTCx6LE8sSSxEPWEoZFswXSxkW2QubGVuZ3RoLTFdLG8sbCksUD0wLFI9LjIqdC5zbW9vdGhpbmcsRj1bXSxCPTA7Zm9yKGM9MTtjPGQubGVuZ3RoO2MrKylMPWRbY10sej1kW2MtMV0sdm9pZCAwLHZvaWQgMCxPPUxbMl0telsyXSxJPUxbM10telszXSxQKz1BPU1hdGguc3FydChPKk8rSSpJKSxGLnB1c2goQSk7dmFyIE49UC9GLmxlbmd0aCpSO2Z1bmN0aW9uIGoodCl7cmV0dXJuIGRbdCVkLmxlbmd0aF19Zm9yKGM9ZC5sZW5ndGgtMjtjPj1CO2MtLSlpZigoeD1GW2NdKTxOKXtmb3IoXz0wLGI9Yy0xO2I+PUImJngrRltiXTxOO2ItLSl4Kz1GW2JdO2lmKEQmJmM9PT1kLmxlbmd0aC0yKWZvcihfPTA7XzxiJiZ4K0ZbX108TjtfKyspeCs9RltfXTtrPWMtYitfKzEsVD1NYXRoLmZsb29yKChjK2IrXysyKS8yKSx3PUR8fGMhPT1kLmxlbmd0aC0yP0R8fC0xIT09Yj9rJTI/aihUKTpbKGooVClbMF0raihUKzEpWzBdKS8yLChqKFQpWzFdK2ooVCsxKVsxXSkvMl06ZFswXTpkW2QubGVuZ3RoLTFdLGQuc3BsaWNlKGIrMSxjLWIrMSx3KSxjPWIrMSxfJiYoQj1fKSxEJiYoYz09PWQubGVuZ3RoLTI/ZFtfXT1kW2QubGVuZ3RoLTFdOjA9PT1jJiYoZFtkLmxlbmd0aC0xXT1kWzBdKSl9Zm9yKGQuc3BsaWNlKDAsQiksYz0wO2M8ZC5sZW5ndGg7YysrKWRbY10ubGVuZ3RoPTI7aWYoIShkLmxlbmd0aDwyKSlpZihEKWQucG9wKCksdC5wYXRocy5wdXNoKGQpO2Vsc2V7cnx8bi5sb2coIlVuY2xvc2VkIGludGVyaW9yIGNvbnRvdXI/Iix0LmxldmVsLHUsZC5qb2luKCJMIikpO3ZhciBWPSExO2ZvcihNPTA7TTx0LmVkZ2VwYXRocy5sZW5ndGg7TSsrKWlmKEU9dC5lZGdlcGF0aHNbTV0sIVYmJmEoRVswXSxkW2QubGVuZ3RoLTFdLG8sbCkpe2QucG9wKCksVj0hMDt2YXIgVT0hMTtmb3IoUz0wO1M8dC5lZGdlcGF0aHMubGVuZ3RoO1MrKylpZihhKChDPXQuZWRnZXBhdGhzW1NdKVtDLmxlbmd0aC0xXSxkWzBdLG8sbCkpe1U9ITAsZC5zaGlmdCgpLHQuZWRnZXBhdGhzLnNwbGljZShNLDEpLFM9PT1NP3QucGF0aHMucHVzaChkLmNvbmNhdChDKSk6KFM+TSYmUy0tLHQuZWRnZXBhdGhzW1NdPUMuY29uY2F0KGQsRSkpO2JyZWFrfVV8fCh0LmVkZ2VwYXRoc1tNXT1kLmNvbmNhdChFKSl9Zm9yKE09MDtNPHQuZWRnZXBhdGhzLmxlbmd0aCYmIVY7TSsrKWEoKEU9dC5lZGdlcGF0aHNbTV0pW0UubGVuZ3RoLTFdLGRbMF0sbyxsKSYmKGQuc2hpZnQoKSx0LmVkZ2VwYXRoc1tNXT1FLmNvbmNhdChkKSxWPSEwKTtWfHx0LmVkZ2VwYXRocy5wdXNoKGQpfX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1lWzBdK01hdGgubWF4KHJbMF0sMCksaT1lWzFdK01hdGgubWF4KHJbMV0sMCksYT10LnpbaV1bbl0sbz10LnhheGlzLHM9dC55YXhpcztpZihyWzFdKXt2YXIgbD0odC5sZXZlbC1hKS8odC56W2ldW24rMV0tYSk7cmV0dXJuW28uYzJwKCgxLWwpKnQueFtuXStsKnQueFtuKzFdLCEwKSxzLmMycCh0LnlbaV0sITApLG4rbCxpXX12YXIgYz0odC5sZXZlbC1hKS8odC56W2krMV1bbl0tYSk7cmV0dXJuW28uYzJwKHQueFtuXSwhMCkscy5jMnAoKDEtYykqdC55W2ldK2MqdC55W2krMV0sITApLG4saStjXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEscyxsO2ZvcihlPWV8fC4wMSxyPXJ8fC4wMSxhPTA7YTx0Lmxlbmd0aDthKyspe2ZvcihzPXRbYV0sbD0wO2w8cy5zdGFydHMubGVuZ3RoO2wrKylvKHMscy5zdGFydHNbbF0sImVkZ2UiLGUscik7Zm9yKGk9MDtPYmplY3Qua2V5cyhzLmNyb3NzaW5ncykubGVuZ3RoJiZpPDFlNDspaSsrLG8ocyxPYmplY3Qua2V5cyhzLmNyb3NzaW5ncylbMF0uc3BsaXQoIiwiKS5tYXAoTnVtYmVyKSx2b2lkIDAsZSxyKTsxZTQ9PT1pJiZuLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpfX19LHsiLi4vLi4vbGliIjo3MDAsIi4vY29uc3RhbnRzIjo5MjN9XSw5MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vaGVhdG1hcC9ob3ZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzPWkodCxlLHIsYSxvLCEwKTtyZXR1cm4gcyYmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2U7ImNvbnN0cmFpbnQiPT09ZS5jb250b3Vycy50eXBlJiYoZS5maWxsY29sb3ImJm4ub3BhY2l0eShlLmZpbGxjb2xvcik/dC5jb2xvcj1uLmFkZE9wYWNpdHkoZS5maWxsY29sb3IsMSk6ZS5jb250b3Vycy5zaG93bGluZXMmJm4ub3BhY2l0eShlLmxpbmUuY29sb3IpJiYodC5jb2xvcj1uLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLDEpKSl9KSxzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uL2hlYXRtYXAvaG92ZXIiOjk1NX1dLDkzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKS5wbG90LG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uY29sb3JiYXI9dCgiLi9jb2xvcmJhciIpLG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iY29udG91ciIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImNvbnRvdXIiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuL2F0dHJpYnV0ZXMiOjkxOSwiLi9jYWxjIjo5MjAsIi4vY29sb3JiYXIiOjkyMiwiLi9kZWZhdWx0cyI6OTI4LCIuL2hvdmVyIjo5MzIsIi4vcGxvdCI6OTM3LCIuL3N0eWxlIjo5Mzl9XSw5MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2lmKGl8fChpPXt9KSx0KCJjb250b3Vycy5zaG93bGFiZWxzIikpe3ZhciBhPWUuZm9udDtuLmNvZXJjZUZvbnQodCwiY29udG91cnMubGFiZWxmb250Iix7ZmFtaWx5OmEuZmFtaWx5LHNpemU6YS5zaXplLGNvbG9yOnJ9KSx0KCJjb250b3Vycy5sYWJlbGZvcm1hdCIpfSExIT09aS5oYXNIb3ZlciYmdCgiemhvdmVyZm9ybWF0Iil9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sOTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250b3VycyxyPWUuc3RhcnQsbz1hKGUpLHM9ZS5zaXplfHwxLGw9TWF0aC5mbG9vcigoby1yKS9zKSsxLGM9ImxpbmVzIj09PWUuY29sb3Jpbmc/MDoxO2lzRmluaXRlKHMpfHwocz0xLGw9MSk7dmFyIHUsZixoPXQucmV2ZXJzZXNjYWxlP2kuZmxpcFNjYWxlKHQuY29sb3JzY2FsZSk6dC5jb2xvcnNjYWxlLHA9aC5sZW5ndGgsZD1uZXcgQXJyYXkocCksZz1uZXcgQXJyYXkocCk7aWYoImhlYXRtYXAiPT09ZS5jb2xvcmluZyl7Zm9yKHQuemF1dG8mJiExPT09dC5hdXRvY29udG91ciYmKHQuem1pbj1yLXMvMix0LnptYXg9dC56bWluK2wqcyksZj0wO2Y8cDtmKyspdT1oW2ZdLGRbZl09dVswXSoodC56bWF4LXQuem1pbikrdC56bWluLGdbZl09dVsxXTt2YXIgdj1uLmV4dGVudChbdC56bWluLHQuem1heCxlLnN0YXJ0LGUuc3RhcnQrcyoobC0xKV0pLG09dlt0LnptaW48dC56bWF4PzA6MV0seT12W3Quem1pbjx0LnptYXg/MTowXTttIT09dC56bWluJiYoZC5zcGxpY2UoMCwwLG0pLGcuc3BsaWNlKDAsMCxSYW5nZVswXSkpLHkhPT10LnptYXgmJihkLnB1c2goeSksZy5wdXNoKGdbZy5sZW5ndGgtMV0pKX1lbHNlIGZvcihmPTA7ZjxwO2YrKyl1PWhbZl0sZFtmXT0odVswXSoobCtjLTEpLWMvMikqcytyLGdbZl09dVsxXTtyZXR1cm4gaS5tYWtlQ29sb3JTY2FsZUZ1bmMoe2RvbWFpbjpkLHJhbmdlOmd9LHtub051bWVyaWNDaGVjazohMH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjU4OSwiLi9lbmRfcGx1cyI6OTMwLGQzOjE1NH1dLDkzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj0oZVswXVswXT50PzA6MSkrKGVbMF1bMV0+dD8wOjIpKyhlWzFdWzFdPnQ/MDo0KSsoZVsxXVswXT50PzA6OCk7cmV0dXJuIDU9PT1yfHwxMD09PXI/dD4oZVswXVswXStlWzBdWzFdK2VbMV1bMF0rZVsxXVsxXSkvND81PT09cj83MTM6MTExNDo1PT09cj8xMDQ6MjA4OjE1PT09cj8wOnJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHMsbCxjLHUsZixoPXRbMF0ueixwPWgubGVuZ3RoLGQ9aFswXS5sZW5ndGgsZz0yPT09cHx8Mj09PWQ7Zm9yKHI9MDtyPHAtMTtyKyspZm9yKG89W10sMD09PXImJihvPW8uY29uY2F0KG4uQk9UVE9NU1RBUlQpKSxyPT09cC0yJiYobz1vLmNvbmNhdChuLlRPUFNUQVJUKSksZT0wO2U8ZC0xO2UrKylmb3IoYT1vLnNsaWNlKCksMD09PWUmJihhPWEuY29uY2F0KG4uTEVGVFNUQVJUKSksZT09PWQtMiYmKGE9YS5jb25jYXQobi5SSUdIVFNUQVJUKSkscz1lKyIsIityLGw9W1toW3JdW2VdLGhbcl1bZSsxXV0sW2hbcisxXVtlXSxoW3IrMV1bZSsxXV1dLGY9MDtmPHQubGVuZ3RoO2YrKykoYz1pKCh1PXRbZl0pLmxldmVsLGwpKSYmKHUuY3Jvc3NpbmdzW3NdPWMsLTEhPT1hLmluZGV4T2YoYykmJih1LnN0YXJ0cy5wdXNoKFtlLHJdKSxnJiYtMSE9PWEuaW5kZXhPZihjLGEuaW5kZXhPZihjKSsxKSYmdS5zdGFydHMucHVzaChbZSxyXSkpKX19LHsiLi9jb25zdGFudHMiOjkyM31dLDkzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGM9dCgiLi4vaGVhdG1hcC9wbG90IiksdT10KCIuL21ha2VfY3Jvc3NpbmdzIiksZj10KCIuL2ZpbmRfYWxsX3BhdGhzIiksaD10KCIuL2VtcHR5X3BhdGhpbmZvIikscD10KCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxkPXQoIi4vY2xvc2VfYm91bmRhcmllcyIpLGc9dCgiLi9jb25zdGFudHMiKSx2PWcuTEFCRUxPUFRJTUlaRVI7ZnVuY3Rpb24gbSh0LGUpe3ZhciByLG4sbyxzLGwsYyx1LGY9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnByZWZpeEJvdW5kYXJ5O2lmKHZvaWQgMD09PXIpe3ZhciBuPU1hdGgubWluKHQuelswXVswXSx0LnpbMF1bMV0pO3I9IXQuZWRnZXBhdGhzLmxlbmd0aCYmbj50LmxldmVsfXJldHVybiByPyJNIitlLmpvaW4oIkwiKSsiWiI6IiJ9KHQsZSksaD0wLHA9dC5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxkPSEwO2Z1bmN0aW9uIGcodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tZVsyXVsxXSk8LjAxfWZ1bmN0aW9uIHYodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXVswXSk8LjAxfWZ1bmN0aW9uIG0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVsyXVswXSk8LjAxfWZvcig7cC5sZW5ndGg7KXtmb3IoYz1hLnNtb290aG9wZW4odC5lZGdlcGF0aHNbaF0sdC5zbW9vdGhpbmcpLGYrPWQ/YzpjLnJlcGxhY2UoL15NLywiTCIpLHAuc3BsaWNlKHAuaW5kZXhPZihoKSwxKSxyPXQuZWRnZXBhdGhzW2hdW3QuZWRnZXBhdGhzW2hdLmxlbmd0aC0xXSxzPS0xLG89MDtvPDQ7bysrKXtpZighcil7aS5sb2coIk1pc3NpbmcgZW5kPyIsaCx0KTticmVha31mb3IodT1yLE1hdGguYWJzKHVbMV0tZVswXVsxXSk8LjAxJiYhbShyKT9uPWVbMV06dihyKT9uPWVbMF06ZyhyKT9uPWVbM106bShyKSYmKG49ZVsyXSksbD0wO2w8dC5lZGdlcGF0aHMubGVuZ3RoO2wrKyl7dmFyIHk9dC5lZGdlcGF0aHNbbF1bMF07TWF0aC5hYnMoclswXS1uWzBdKTwuMDE/TWF0aC5hYnMoclswXS15WzBdKTwuMDEmJih5WzFdLXJbMV0pKihuWzFdLXlbMV0pPj0wJiYobj15LHM9bCk6TWF0aC5hYnMoclsxXS1uWzFdKTwuMDE/TWF0aC5hYnMoclsxXS15WzFdKTwuMDEmJih5WzBdLXJbMF0pKihuWzBdLXlbMF0pPj0wJiYobj15LHM9bCk6aS5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIscixuLHkpfWlmKHI9bixzPj0wKWJyZWFrO2YrPSJMIitufWlmKHM9PT10LmVkZ2VwYXRocy5sZW5ndGgpe2kubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfWg9cywoZD0tMT09PXAuaW5kZXhPZihoKSkmJihoPXBbMF0sZis9IloiKX1mb3IoaD0wO2g8dC5wYXRocy5sZW5ndGg7aCsrKWYrPWEuc21vb3RoY2xvc2VkKHQucGF0aHNbaF0sdC5zbW9vdGhpbmcpO3JldHVybiBmfWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGE9ZS53aWR0aC8yLG89ZS5oZWlnaHQvMixzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLmNvcyhjKSphLGY9TWF0aC5zaW4oYykqYSxoPShzPm4uY2VudGVyP24ucmlnaHQtczpzLW4ubGVmdCkvKHUrTWF0aC5hYnMoTWF0aC5zaW4oYykqbykpLHA9KGw+bi5taWRkbGU/bi5ib3R0b20tbDpsLW4udG9wKS8oTWF0aC5hYnMoZikrTWF0aC5jb3MoYykqbyk7aWYoaDwxfHxwPDEpcmV0dXJuIDEvMDt2YXIgZD12LkVER0VDT1NUKigxLyhoLTEpKzEvKHAtMSkpO2QrPXYuQU5HTEVDT1NUKmMqYztmb3IodmFyIGc9cy11LG09bC1mLHk9cyt1LHg9bCtmLGI9MDtiPHIubGVuZ3RoO2IrKyl7dmFyIF89cltiXSx3PU1hdGguY29zKF8udGhldGEpKl8ud2lkdGgvMixrPU1hdGguc2luKF8udGhldGEpKl8ud2lkdGgvMixUPTIqaS5zZWdtZW50RGlzdGFuY2UoZyxtLHkseCxfLngtdyxfLnktayxfLngrdyxfLnkraykvKGUuaGVpZ2h0K18uaGVpZ2h0KSxBPV8ubGV2ZWw9PT1lLmxldmVsLE09QT92LlNBTUVMRVZFTERJU1RBTkNFOjE7aWYoVDw9TSlyZXR1cm4gMS8wO2QrPXYuTkVJR0hCT1JDT1NUKihBP3YuU0FNRUxFVkVMRkFDVE9SOjEpLyhULU0pfXJldHVybiBkfXIucGxvdD1mdW5jdGlvbih0LGUsbyxzKXt2YXIgbD1lLnhheGlzLHY9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLG8sImNvbnRvdXIiKS5lYWNoKGZ1bmN0aW9uKG8pe3ZhciBzPW4uc2VsZWN0KHRoaXMpLHk9b1swXSx4PXkudHJhY2UsYj15LngsXz15Lnksdz14LmNvbnRvdXJzLGs9aCh3LGUseSksVD1pLmVuc3VyZVNpbmdsZShzLCJnIiwiaGVhdG1hcGNvbG9yaW5nIiksQT1bXTsiaGVhdG1hcCI9PT13LmNvbG9yaW5nJiYoeC56YXV0byYmITE9PT14LmF1dG9jb250b3VyJiYoeC5faW5wdXQuem1pbj14LnptaW49dy5zdGFydC13LnNpemUvMix4Ll9pbnB1dC56bWF4PXguem1heD14LnptaW4ray5sZW5ndGgqdy5zaXplKSxBPVtvXSksYyh0LGUsQSxUKSx1KGspLGYoayk7dmFyIE09bC5jMnAoYlswXSwhMCksUz1sLmMycChiW2IubGVuZ3RoLTFdLCEwKSxFPXYuYzJwKF9bMF0sITApLEM9di5jMnAoX1tfLmxlbmd0aC0xXSwhMCksTD1bW00sQ10sW1MsQ10sW1MsRV0sW00sRV1dLHo9azsiY29uc3RyYWludCI9PT13LnR5cGUmJih6PXAoayx3Ll9vcGVyYXRpb24pLGQoeix3Ll9vcGVyYXRpb24sTCx4KSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyYmciKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIj09PXIuY29sb3Jpbmc/WzBdOltdKTtuLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksbi5leGl0KCkucmVtb3ZlKCksbi5hdHRyKCJkIiwiTSIrZS5qb2luKCJMIikrIloiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfShzLEwsdyksZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1hLmNvbG9yaW5nfHwiY29uc3RyYWludCI9PT1hLnR5cGUmJiI9IiE9PWEuX29wZXJhdGlvbj9lOltdKTtvLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW0odCxyKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX0ocyx6LEwsdyksZnVuY3Rpb24odCxlLG8scyxsLGMpe3ZhciB1PWkuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VybGluZXMiKSxmPSExIT09bC5zaG93bGluZXMsaD1sLnNob3dsYWJlbHMscD1mJiZoLGQ9ci5jcmVhdGVMaW5lcyh1LGZ8fGgsZSksdj1yLmNyZWF0ZUxpbmVDbGlwKHUscCxvLHMudHJhY2UudWlkKSxtPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMiKS5kYXRhKGg/WzBdOltdKTtpZihtLmV4aXQoKS5yZW1vdmUoKSxtLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxhYmVscyIsITApLGgpe3ZhciB5PVtdLHg9W107aS5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgYj1yLmxhYmVsRm9ybWF0dGVyKGwscy50LmNiLG8uX2Z1bGxMYXlvdXQpLF89YS50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChhLmZvbnQsbC5sYWJlbGZvbnQpLHc9ZVswXS54YXhpcyxrPWVbMF0ueWF4aXMsVD13Ll9sZW5ndGgsQT1rLl9sZW5ndGgsTT13LnJhbmdlLFM9ay5yYW5nZSxFPU1hdGgubWF4KGNbMF1bMF0sMCksQz1NYXRoLm1pbihjWzJdWzBdLFQpLEw9TWF0aC5tYXgoY1swXVsxXSwwKSx6PU1hdGgubWluKGNbMl1bMV0sQSksTz17fTtNWzBdPE1bMV0/KE8ubGVmdD1FLE8ucmlnaHQ9Qyk6KE8ubGVmdD1DLE8ucmlnaHQ9RSksU1swXTxTWzFdPyhPLnRvcD1MLE8uYm90dG9tPXopOihPLnRvcD16LE8uYm90dG9tPUwpLE8ubWlkZGxlPShPLnRvcCtPLmJvdHRvbSkvMixPLmNlbnRlcj0oTy5sZWZ0K08ucmlnaHQpLzIseS5wdXNoKFtbTy5sZWZ0LE8udG9wXSxbTy5yaWdodCxPLnRvcF0sW08ucmlnaHQsTy5ib3R0b21dLFtPLmxlZnQsTy5ib3R0b21dXSk7dmFyIEk9TWF0aC5zcXJ0KFQqVCtBKkEpLEQ9Zy5MQUJFTERJU1RBTkNFKkkvTWF0aC5tYXgoMSxlLmxlbmd0aC9nLkxBQkVMSU5DUkVBU0UpO2QuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1yLmNhbGNUZXh0T3B0cyh0LmxldmVsLGIsXyxvKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9aS5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLE8sZS5oZWlnaHQvMik7aWYodCYmISh0LmxlbjwoZS53aWR0aCtlLmhlaWdodCkqZy5MQUJFTE1JTikpZm9yKHZhciBuPU1hdGgubWluKE1hdGguY2VpbCh0Lmxlbi9EKSxnLkxBQkVMTUFYKSxhPTA7YTxuO2ErKyl7dmFyIG89ci5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLHQsZSx4LE8pO2lmKCFvKWJyZWFrO3IuYWRkTGFiZWxEYXRhKG8sZSx4LHkpfX0pfSksXy5yZW1vdmUoKSxyLmRyYXdMYWJlbHMobSx4LG8sdixwP3k6bnVsbCl9aCYmIWYmJmQucmVtb3ZlKCl9KHMsayx0LHksdyxMKSxmdW5jdGlvbih0LGUscixuLG8pe3ZhciBzPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLGw9ImNsaXAiK24udHJhY2UudWlkLGM9cy5zZWxlY3RBbGwoIiMiK2wpLmRhdGEobi50cmFjZS5jb25uZWN0Z2Fwcz9bXTpbMF0pO2lmKGMuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY29udG91cmNsaXAiLCEwKS5hdHRyKCJpZCIsbCksYy5leGl0KCkucmVtb3ZlKCksITE9PT1uLnRyYWNlLmNvbm5lY3RnYXBzKXt2YXIgaD17bGV2ZWw6LjksY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6bi54LHk6bi55LHo6ZnVuY3Rpb24odCl7dmFyIGUscixuPXQudHJhY2UuX2VtcHR5cG9pbnRzLGk9W10sYT10LnoubGVuZ3RoLG89dC56WzBdLmxlbmd0aCxzPVtdO2ZvcihlPTA7ZTxvO2UrKylzLnB1c2goMSk7Zm9yKGU9MDtlPGE7ZSsrKWkucHVzaChzLnNsaWNlKCkpO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspcj1uW2VdLGlbclswXV1bclsxXV09MDtyZXR1cm4gdC56bWFzaz1pLGl9KG4pLHNtb290aGluZzowfTt1KFtoXSksZihbaF0pO3ZhciBwPW0oaCxvKSxkPWkuZW5zdXJlU2luZ2xlKGMsInBhdGgiLCIiKTtkLmF0dHIoImQiLHApfWVsc2UgbD1udWxsO2Euc2V0Q2xpcFVybCh0LGwscil9KHMsZSx0LHksTCl9KX0sci5jcmVhdGVMaW5lcz1mdW5jdGlvbih0LGUscil7dmFyIG49clswXS5zbW9vdGhpbmcsaT10LnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5kYXRhKGU/cjpbXSk7aWYoaS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsZXZlbCIsITApLGUpe3ZhciBvPWkuc2VsZWN0QWxsKCJwYXRoLm9wZW5saW5lIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wZWRnZXBhdGhzfHx0LmVkZ2VwYXRoc30pO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJvcGVubGluZSIsITApLG8uYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIGEuc21vb3Rob3Blbih0LG4pfSkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpO3ZhciBzPWkuc2VsZWN0QWxsKCJwYXRoLmNsb3NlZGxpbmUiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBwYXRoc3x8dC5wYXRoc30pO3MuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJjbG9zZWRsaW5lIiwhMCkscy5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gYS5zbW9vdGhjbG9zZWQodCxuKX0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKX1yZXR1cm4gaX0sci5jcmVhdGVMaW5lQ2xpcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lPyJjbGlwbGluZSIrbjpudWxsLG89ci5fZnVsbExheW91dC5fY2xpcHMuc2VsZWN0QWxsKCIjIitpKS5kYXRhKGU/WzBdOltdKTtyZXR1cm4gby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VybGluZWNsaXAiLCEwKS5hdHRyKCJpZCIsaSksYS5zZXRDbGlwVXJsKHQsaSxyKSxvfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSxyKXtpZih0LmxhYmVsZm9ybWF0KXJldHVybiByLl9kM2xvY2FsZS5udW1iZXJGb3JtYXQodC5sYWJlbGZvcm1hdCk7dmFyIG47aWYoZSluPWUuYXhpcztlbHNle2lmKG49e3R5cGU6ImxpbmVhciIsX2lkOiJ5Y29udG91ciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0sImNvbnN0cmFpbnQiPT09dC50eXBlKXt2YXIgaT10LnZhbHVlO0FycmF5LmlzQXJyYXkoaSk/bi5yYW5nZT1baVswXSxpW2kubGVuZ3RoLTFdXTpuLnJhbmdlPVtpLGldfWVsc2Ugbi5yYW5nZT1bdC5zdGFydCx0LmVuZF0sbi5udGlja3M9KHQuZW5kLXQuc3RhcnQpL3Quc2l6ZTtuLnJhbmdlWzBdPT09bi5yYW5nZVsxXSYmKG4ucmFuZ2VbMV0rPW4ucmFuZ2VbMF18fDEpLG4ubnRpY2tzfHwobi5udGlja3M9MWUzKSxsKG4scikscy5wcmVwVGlja3Mobiksbi5fdG1pbj1udWxsLG4uX3RtYXg9bnVsbH1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHMudGlja1RleHQobix0KS50ZXh0fX0sci5jYWxjVGV4dE9wdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSh0KTtyLnRleHQoaSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyxuKTt2YXIgcz1hLmJCb3goci5ub2RlKCksITApO3JldHVybnt0ZXh0Omksd2lkdGg6cy53aWR0aCxoZWlnaHQ6cy5oZWlnaHQsbGV2ZWw6dCxkeToocy50b3Arcy5ib3R0b20pLzJ9fSxyLmZpbmRCZXN0VGV4dExvY2F0aW9uPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG8scyxsLGMsdSxmPXIud2lkdGg7ZS5pc0Nsb3NlZD8ocz1lLmxlbi92LklOSVRJQUxTRUFSQ0hQT0lOVFMsbz1lLm1pbitzLzIsbD1lLm1heCk6KHM9KGUubGVuLWYpLyh2LklOSVRJQUxTRUFSQ0hQT0lOVFMrMSksbz1lLm1pbitzK2YvMixsPWUubWF4LShzK2YpLzIpO2Zvcih2YXIgaD0xLzAscD0wO3A8di5JVEVSQVRJT05TO3ArKyl7Zm9yKHZhciBkPW87ZDxsO2QrPXMpe3ZhciBnPWkuZ2V0VGV4dExvY2F0aW9uKHQsZS50b3RhbCxkLGYpLG09eShnLHIsbixhKTttPGgmJihoPW0sdT1nLGM9ZCl9aWYoaD4yKnYuTUFYQ09TVClicmVhaztwJiYocy89MiksbD0obz1jLXMvMikrMS41KnN9aWYoaDw9di5NQVhDT1NUKXJldHVybiB1fSxyLmFkZExhYmVsRGF0YT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lLndpZHRoLzIsYT1lLmhlaWdodC8yLG89dC54LHM9dC55LGw9dC50aGV0YSxjPU1hdGguc2luKGwpLHU9TWF0aC5jb3MobCksZj1pKnUsaD1hKmMscD1pKmMsZD0tYSp1LGc9W1tvLWYtaCxzLXAtZF0sW28rZi1oLHMrcC1kXSxbbytmK2gscytwK2RdLFtvLWYraCxzLXArZF1dO3IucHVzaCh7dGV4dDplLnRleHQseDpvLHk6cyxkeTplLmR5LHRoZXRhOmwsbGV2ZWw6ZS5sZXZlbCx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodH0pLG4ucHVzaChnKX0sci5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyLGEscyl7dmFyIGw9dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKGUsZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dCsiLCIrdC54KyIsIit0LnkrIiwiK3QudGhldGF9KTtpZihsLmV4aXQoKS5yZW1vdmUoKSxsLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cih7ImRhdGEtbm90ZXgiOjEsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC54K01hdGguc2luKHQudGhldGEpKnQuZHksaT10LnktTWF0aC5jb3ModC50aGV0YSkqdC5keTtuLnNlbGVjdCh0aGlzKS50ZXh0KHQudGV4dCkuYXR0cih7eDplLHk6aSx0cmFuc2Zvcm06InJvdGF0ZSgiKzE4MCp0LnRoZXRhL01hdGguUEkrIiAiK2UrIiAiK2krIikifSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyxyKX0pLHMpe2Zvcih2YXIgYz0iIix1PTA7dTxzLmxlbmd0aDt1KyspYys9Ik0iK3NbdV0uam9pbigiTCIpKyJaIjtpLmVuc3VyZVNpbmdsZShhLCJwYXRoIiwiIikuYXR0cigiZCIsYyl9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjc2NiwiLi4vaGVhdG1hcC9wbG90Ijo5NTksIi4vY2xvc2VfYm91bmRhcmllcyI6OTIxLCIuL2NvbnN0YW50cyI6OTIzLCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHMiOjkyNywiLi9lbXB0eV9wYXRoaW5mbyI6OTI5LCIuL2ZpbmRfYWxsX3BhdGhzIjo5MzEsIi4vbWFrZV9jcm9zc2luZ3MiOjkzNixkMzoxNTR9XSw5Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBpPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt0LGVdfTtyZXR1cm4gbi5hdXRvVGlja3MoaSwoZS10KS8ocnx8MTUpKSxpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNvbnRvdXJzO2lmKHQuYXV0b2NvbnRvdXIpe3ZhciByPXQuem1pbixvPXQuem1heDt2b2lkIDAhPT1yJiZ2b2lkIDAhPT1vfHwocj1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0Ll96KSxvPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQuX3opKTt2YXIgcz1hKHIsbyx0Lm5jb250b3Vycyk7ZS5zaXplPXMuZHRpY2ssZS5zdGFydD1uLnRpY2tGaXJzdChzKSxzLnJhbmdlLnJldmVyc2UoKSxlLmVuZD1uLnRpY2tGaXJzdChzKSxlLnN0YXJ0PT09ciYmKGUuc3RhcnQrPWUuc2l6ZSksZS5lbmQ9PT1vJiYoZS5lbmQtPWUuc2l6ZSksZS5zdGFydD5lLmVuZCYmKGUuc3RhcnQ9ZS5lbmQ9KGUuc3RhcnQrZS5lbmQpLzIpLHQuX2lucHV0LmNvbnRvdXJzfHwodC5faW5wdXQuY29udG91cnM9e30pLGkuZXh0ZW5kRmxhdCh0Ll9pbnB1dC5jb250b3Vycyx7c3RhcnQ6ZS5zdGFydCxlbmQ6ZS5lbmQsc2l6ZTplLnNpemV9KSx0Ll9pbnB1dC5hdXRvY29udG91cj0hMH1lbHNlIGlmKCJjb25zdHJhaW50IiE9PWUudHlwZSl7dmFyIGwsYz1lLnN0YXJ0LHU9ZS5lbmQsZj10Ll9pbnB1dC5jb250b3VycztpZihjPnUmJihlLnN0YXJ0PWYuc3RhcnQ9dSx1PWUuZW5kPWYuZW5kPWMsYz1lLnN0YXJ0KSwhKGUuc2l6ZT4wKSlsPWM9PT11PzE6YShjLHUsdC5uY29udG91cnMpLmR0aWNrLGYuc2l6ZT1lLnNpemU9bH19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4fV0sOTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGUiKSxvPXQoIi4vbWFrZV9jb2xvcl9tYXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmNvbnRvdXIiKTtlLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksZS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZSxhPXIuY29udG91cnMscz1yLmxpbmUsbD1hLnNpemV8fDEsYz1hLnN0YXJ0LHU9ImNvbnN0cmFpbnQiPT09YS50eXBlLGY9IXUmJiJsaW5lcyI9PT1hLmNvbG9yaW5nLGg9IXUmJiJmaWxsIj09PWEuY29sb3JpbmcscD1mfHxoP28ocik6bnVsbDtlLnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmNhbGwoaS5saW5lR3JvdXBTdHlsZSxzLndpZHRoLGY/cCh0LmxldmVsKTpzLmNvbG9yLHMuZGFzaCl9KTt2YXIgZD1hLmxhYmVsZm9udDtpZihlLnNlbGVjdEFsbCgiZy5jb250b3VybGFiZWxzIHRleHQiKS5lYWNoKGZ1bmN0aW9uKHQpe2kuZm9udChuLnNlbGVjdCh0aGlzKSx7ZmFtaWx5OmQuZmFtaWx5LHNpemU6ZC5zaXplLGNvbG9yOmQuY29sb3J8fChmP3AodC5sZXZlbCk6cy5jb2xvcil9KX0pLHUpZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIixyLmZpbGxjb2xvcik7ZWxzZSBpZihoKXt2YXIgZztlLnNlbGVjdEFsbCgiZy5jb250b3VyZmlsbCBwYXRoIikuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT1nJiYoZz10LmxldmVsKSxwKHQubGV2ZWwrLjUqbCl9KSx2b2lkIDA9PT1nJiYoZz1jKSxlLnNlbGVjdEFsbCgiZy5jb250b3VyYmcgcGF0aCIpLnN0eWxlKCJmaWxsIixwKGctLjUqbCkpfX0pLGEodCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi9oZWF0bWFwL3N0eWxlIjo5NjAsIi4vbWFrZV9jb2xvcl9tYXAiOjkzNSxkMzoxNTR9XSw5NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksaT10KCIuL2xhYmVsX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHMsbD1yKCJjb250b3Vycy5jb2xvcmluZyIpLGM9IiI7ImZpbGwiPT09bCYmKHM9cigiY29udG91cnMuc2hvd2xpbmVzIikpLCExIT09cyYmKCJsaW5lcyIhPT1sJiYoYz1yKCJsaW5lLmNvbG9yIiwiIzAwMCIpKSxyKCJsaW5lLndpZHRoIiwuNSkscigibGluZS5kYXNoIikpLCJub25lIiE9PWwmJighMCE9PXQuc2hvd2xlZ2VuZCYmKGUuc2hvd2xlZ2VuZD0hMSksZS5fZGZsdFNob3dMZWdlbmQ9ITEsbih0LGUsYSxyLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSkscigibGluZS5zbW9vdGhpbmciKSxpKHIsYSxjLG8pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU4NywiLi9sYWJlbF9kZWZhdWx0cyI6OTM0fV0sOTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT1pLmNvbnRvdXJzLG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PW8ubGluZTtlLmV4cG9ydHM9Yyh7Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sejpuLnosYTpuLngsYTA6bi54MCxkYTpuLmR4LGI6bi55LGIwOm4ueTAsZGI6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLGF0eXBlOm4ueHR5cGUsYnR5cGU6bi55dHlwZSxmaWxsY29sb3I6aS5maWxsY29sb3IsYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6e3R5cGU6YS50eXBlLHN0YXJ0OmEuc3RhcnQsZW5kOmEuZW5kLHNpemU6YS5zaXplLGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwibGluZXMiLCJub25lIl0sZGZsdDoiZmlsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93bGluZXM6YS5zaG93bGluZXMsc2hvd2xhYmVsczphLnNob3dsYWJlbHMsbGFiZWxmb250OmEubGFiZWxmb250LGxhYmVsZm9ybWF0OmEubGFiZWxmb3JtYXQsb3BlcmF0aW9uOmEub3BlcmF0aW9uLHZhbHVlOmEudmFsdWUsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpjKHt9LHUuY29sb3Ise30pLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc21vb3RoaW5nOmMoe30sdS5zbW9vdGhpbmcse30pLGVkaXRUeXBlOiJwbG90In0sdHJhbnNmb3Jtczp2b2lkIDB9LHMoIiIse2NMZXR0ZXI6InoiLGF1dG9Db2xvckRmbHQ6ITF9KSx7Y29sb3JiYXI6bH0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2NvbnRvdXIvYXR0cmlidXRlcyI6OTE5LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjk0OCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sOTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6Iiksbz10KCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5Iikscz10KCIuLi9oZWF0bWFwL2ludGVycDJkIiksbD10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGM9dCgiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IiksdT10KCIuL2RlZmF1bHRzIiksZj10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksaD10KCIuLi9jb250b3VyL3NldF9jb250b3VycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWYodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7aWYoIWUuYXx8IWUuYil7dmFyIHA9dC5kYXRhW3IuaW5kZXhdLGQ9dC5kYXRhW2UuaW5kZXhdO2QuYXx8KGQuYT1wLmEpLGQuYnx8KGQuYj1wLmIpLHUoZCxlLGUuX2RlZmF1bHRDb2xvcix0Ll9mdWxsTGF5b3V0KX12YXIgZz1mdW5jdGlvbih0LGUpe3ZhciByLHUsZixoLHAsZCxnLHY9ZS5fY2FycGV0VHJhY2UsbT12LmFheGlzLHk9di5iYXhpczttLl9taW5EdGljaz0wLHkuX21pbkR0aWNrPTAsaS5pc0FycmF5MUQoZS56KSYmYShlLG0seSwiYSIsImIiLFsieiJdKTtyPWUuX2E9ZS5fYXx8ZS5hLGg9ZS5fYj1lLl9ifHxlLmIscj1yP20ubWFrZUNhbGNkYXRhKGUsIl9hIik6W10saD1oP3kubWFrZUNhbGNkYXRhKGUsIl9iIik6W10sdT1lLmEwfHwwLGY9ZS5kYXx8MSxwPWUuYjB8fDAsZD1lLmRifHwxLGc9ZS5fej1vKGUuX3p8fGUueixlLnRyYW5zcG9zZSksZS5fZW1wdHlwb2ludHM9bChnKSxzKGcsZS5fZW1wdHlwb2ludHMpO3ZhciB4PWkubWF4Um93TGVuZ3RoKGcpLGI9InNjYWxlZCI9PT1lLnh0eXBlPyIiOnIsXz1jKGUsYix1LGYseCxtKSx3PSJzY2FsZWQiPT09ZS55dHlwZT8iIjpoLGs9YyhlLHcscCxkLGcubGVuZ3RoLHkpLFQ9e2E6XyxiOmssejpnfTsibGV2ZWxzIj09PWUuY29udG91cnMudHlwZSYmIm5vbmUiIT09ZS5jb250b3Vycy5jb2xvcmluZyYmbih0LGUse3ZhbHM6Zyxjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KTtyZXR1cm5bVF19KHQsZSk7cmV0dXJuIGgoZSksZ319fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo1ODUsIi4uLy4uL2xpYiI6NzAwLCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo4OTcsIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzIjo5MzgsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjk1MCwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjk1MiwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiOjk1NCwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6OTU3LCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXkiOjk1OCwiLi9kZWZhdWx0cyI6OTQzfV0sOTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vY29udG91ci9jb25zdHJhaW50X2RlZmF1bHRzIikscz10KCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIiksbD10KCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pZih1KCJjYXJwZXQiKSx0LmEmJnQuYil7aWYoIWkodCxlLHUsYywiYSIsImIiKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3UoInRleHQiKSwiY29uc3RyYWludCI9PT11KCJjb250b3Vycy50eXBlIik/byh0LGUsdSxjLHIse2hhc0hvdmVyOiExfSk6KHModCxlLHUsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsYSxyKX0pLGwodCxlLHUsYyx7aGFzSG92ZXI6ITF9KSl9ZWxzZSBlLl9kZWZhdWx0Q29sb3I9cixlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3MDAsIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0cyI6OTI0LCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjo5MjYsIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiOjk0MCwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjk2MiwiLi9hdHRyaWJ1dGVzIjo5NDF9XSw5NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vY29udG91ci9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuLi9jb250b3VyL3N0eWxlIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjb250b3VyY2FycGV0IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN2ZyIsImNhcnBldCIsImNvbnRvdXIiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsImhhc0xpbmVzIiwiY2FycGV0RGVwZW5kZW50Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuLi9jb250b3VyL2NvbG9yYmFyIjo5MjIsIi4uL2NvbnRvdXIvc3R5bGUiOjkzOSwiLi9hdHRyaWJ1dGVzIjo5NDEsIi4vY2FsYyI6OTQyLCIuL2RlZmF1bHRzIjo5NDMsIi4vcGxvdCI6OTQ3fV0sOTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGk9dCgiLi4vY2FycGV0L2F4aXNfYWxpZ25lZF9saW5lIiksYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwsYyx1KXt2YXIgZixoLHAsZCxnLHYsbSx5PSIiLHg9ZS5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxiPSEwLF89MWUtNCpNYXRoLmFicyhyWzBdWzBdLXJbMl1bMF0pLHc9MWUtNCpNYXRoLmFicyhyWzBdWzFdLXJbMl1bMV0pO2Z1bmN0aW9uIGsodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclswXVsxXSk8d31mdW5jdGlvbiBUKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMl1bMV0pPHd9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzBdWzBdKTxffWZ1bmN0aW9uIE0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclsyXVswXSk8X31mdW5jdGlvbiBTKHQsZSl7dmFyIHIsbixhLG8sZj0iIjtmb3Ioayh0KSYmIU0odCl8fFQodCkmJiFBKHQpPyhvPXMuYWF4aXMsYT1pKHMsbCxbdFswXSxlWzBdXSwuNSoodFsxXStlWzFdKSkpOihvPXMuYmF4aXMsYT1pKHMsbCwuNSoodFswXStlWzBdKSxbdFsxXSxlWzFdXSkpLHI9MTtyPGEubGVuZ3RoO3IrKylmb3IoZis9by5zbW9vdGhpbmc/IkMiOiJMIixuPTA7bjxhW3JdLmxlbmd0aDtuKyspe3ZhciBoPWFbcl1bbl07Zis9W2MuYzJwKGhbMF0pLHUuYzJwKGhbMV0pXSsiICJ9cmV0dXJuIGZ9Zm9yKGY9MCxoPW51bGw7eC5sZW5ndGg7KXt2YXIgRT1lLmVkZ2VwYXRoc1tmXVswXTtmb3IoaCYmKHkrPVMoaCxFKSksbT1uLnNtb290aG9wZW4oZS5lZGdlcGF0aHNbZl0ubWFwKG8pLGUuc21vb3RoaW5nKSx5Kz1iP206bS5yZXBsYWNlKC9eTS8sIkwiKSx4LnNwbGljZSh4LmluZGV4T2YoZiksMSksaD1lLmVkZ2VwYXRoc1tmXVtlLmVkZ2VwYXRoc1tmXS5sZW5ndGgtMV0sZz0tMSxkPTA7ZDw0O2QrKyl7aWYoIWgpe2EubG9nKCJNaXNzaW5nIGVuZD8iLGYsZSk7YnJlYWt9Zm9yKGsoaCkmJiFNKGgpP3A9clsxXTpBKGgpP3A9clswXTpUKGgpP3A9clszXTpNKGgpJiYocD1yWzJdKSx2PTA7djxlLmVkZ2VwYXRocy5sZW5ndGg7disrKXt2YXIgQz1lLmVkZ2VwYXRoc1t2XVswXTtNYXRoLmFicyhoWzBdLXBbMF0pPF8/TWF0aC5hYnMoaFswXS1DWzBdKTxfJiYoQ1sxXS1oWzFdKSoocFsxXS1DWzFdKT49MCYmKHA9QyxnPXYpOk1hdGguYWJzKGhbMV0tcFsxXSk8dz9NYXRoLmFicyhoWzFdLUNbMV0pPHcmJihDWzBdLWhbMF0pKihwWzBdLUNbMF0pPj0wJiYocD1DLGc9dik6YS5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsaCxwLEMpfWlmKGc+PTApYnJlYWs7eSs9UyhoLHApLGg9cH1pZihnPT09ZS5lZGdlcGF0aHMubGVuZ3RoKXthLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha31mPWcsKGI9LTE9PT14LmluZGV4T2YoZikpJiYoZj14WzBdLHkrPVMoaCxwKSsiWiIsaD1udWxsKX1mb3IoZj0wO2Y8ZS5wYXRocy5sZW5ndGg7ZisrKXkrPW4uc21vb3RoY2xvc2VkKGUucGF0aHNbZl0ubWFwKG8pLGUuc21vb3RoaW5nKTtyZXR1cm4geX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2xpYiI6NzAwLCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiOjg4MX1dLDk0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHU7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7Zm9yKG89KGE9dFtyXSkucGVkZ2VwYXRocz1bXSxzPWEucHBhdGhzPVtdLG49MDtuPGEuZWRnZXBhdGhzLmxlbmd0aDtuKyspe2Zvcih1PWEuZWRnZXBhdGhzW25dLGw9W10saT0wO2k8dS5sZW5ndGg7aSsrKWxbaV09ZSh1W2ldKTtvLnB1c2gobCl9Zm9yKG49MDtuPGEucGF0aHMubGVuZ3RoO24rKyl7Zm9yKHU9YS5wYXRoc1tuXSxjPVtdLGk9MDtpPHUubGVuZ3RoO2krKyljW2ldPWUodVtpXSk7cy5wdXNoKGMpfX19fSx7fV0sOTQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5IiksYT10KCIuLi9jYXJwZXQvbWFrZXBhdGgiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIiksYz10KCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzIiksdT10KCIuLi9jb250b3VyL3Bsb3QiKSxmPXQoIi4uL2NvbnRvdXIvY29uc3RhbnRzIiksaD10KCIuLi9jb250b3VyL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxwPXQoIi4vam9pbl9hbGxfcGF0aHMiKSxkPXQoIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm8iKSxnPXQoIi4vbWFwX3BhdGhpbmZvIiksdj10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksbT10KCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiKTtmdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LmdldFBvaW50QXRMZW5ndGgoZSksaT10LmdldFBvaW50QXRMZW5ndGgociksYT1pLngtbi54LG89aS55LW4ueSxzPU1hdGguc3FydChhKmErbypvKTtyZXR1cm5bYS9zLG8vc119ZnVuY3Rpb24geCh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSk7cmV0dXJuW3RbMF0vZSx0WzFdL2VdfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1NYXRoLmFicyh0WzBdKmVbMF0rdFsxXSplWzFdKTtyZXR1cm4gTWF0aC5zcXJ0KDEtcipyKS9yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixfKXt2YXIgdz1lLnhheGlzLGs9ZS55YXhpcztzLm1ha2VUcmFjZUdyb3VwcyhfLHIsImNvbnRvdXIiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBfPW4uc2VsZWN0KHRoaXMpLFQ9clswXSxBPVQudHJhY2UsTT1BLl9jYXJwZXRUcmFjZT12KHQsQSksUz10LmNhbGNkYXRhW00uaW5kZXhdWzBdO2lmKE0udmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09TS52aXNpYmxlKXt2YXIgRT1ULmEsQz1ULmIsTD1BLmNvbnRvdXJzLHo9ZChMLGUsVCksTz0iY29uc3RyYWludCI9PT1MLnR5cGUsST1MLl9vcGVyYXRpb24sRD1PPyI9Ij09PUk/ImxpbmVzIjoiZmlsbCI6TC5jb2xvcmluZyxQPVtbRVswXSxDW0MubGVuZ3RoLTFdXSxbRVtFLmxlbmd0aC0xXSxDW0MubGVuZ3RoLTFdXSxbRVtFLmxlbmd0aC0xXSxDWzBdXSxbRVswXSxDWzBdXV07bCh6KTt2YXIgUj0xZS04KihFW0UubGVuZ3RoLTFdLUVbMF0pLEY9MWUtOCooQ1tDLmxlbmd0aC0xXS1DWzBdKTtjKHosUixGKTt2YXIgQixOLGosVixVPXo7ImNvbnN0cmFpbnQiPT09TC50eXBlJiYoVT1oKHosSSksbShVLEksUCxBKSksZyh6LEcpO3ZhciBxPVtdO2ZvcihWPVMuY2xpcHNlZ21lbnRzLmxlbmd0aC0xO1Y+PTA7Vi0tKUI9Uy5jbGlwc2VnbWVudHNbVl0sTj1pKFtdLEIueCx3LmMycCksaj1pKFtdLEIueSxrLmMycCksTi5yZXZlcnNlKCksai5yZXZlcnNlKCkscS5wdXNoKGEoTixqLEIuYmljdWJpYykpO3ZhciBIPSJNIitxLmpvaW4oIkwiKSsiWiI7IWZ1bmN0aW9uKHQsZSxyLG4sbyxsKXt2YXIgYyx1LGYsaCxwPXMuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyYmciKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIiE9PWx8fG8/W106WzBdKTtwLmVudGVyKCkuYXBwZW5kKCJwYXRoIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9W107Zm9yKGg9MDtoPGUubGVuZ3RoO2grKyljPWVbaF0sdT1pKFtdLGMueCxyLmMycCksZj1pKFtdLGMueSxuLmMycCksZC5wdXNoKGEodSxmLGMuYmljdWJpYykpO3AuYXR0cigiZCIsIk0iK2Quam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0oXyxTLmNsaXBzZWdtZW50cyx3LGssTyxEKSxmdW5jdGlvbih0LGUscixpLGEsbyxsLGMsdSxmLGgpe3ZhciBkPXMuZW5zdXJlU2luZ2xlKGUsImciLCJjb250b3VyZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiPT09Zj9hOltdKTtkLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksZC5leGl0KCkucmVtb3ZlKCksZC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPXAodCxlLG8sbCxjLHUscixpKTtlLnByZWZpeEJvdW5kYXJ5JiYoYT1oK2EpLGE/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsYSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKTpuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfShBLF8sdyxrLFUsUCxHLE0sUyxELEgpLGZ1bmN0aW9uKHQsZSxyLGksYSxsLGMpe3ZhciBoPXMuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VybGluZXMiKSxwPSExIT09YS5zaG93bGluZXMsZD1hLnNob3dsYWJlbHMsZz1wJiZkLHY9dS5jcmVhdGVMaW5lcyhoLHB8fGQsZSksbT11LmNyZWF0ZUxpbmVDbGlwKGgsZyxyLGkudHJhY2UudWlkKSxfPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMiKS5kYXRhKGQ/WzBdOltdKTtpZihfLmV4aXQoKS5yZW1vdmUoKSxfLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxhYmVscyIsITApLGQpe3ZhciB3PWwueGF4aXMsaz1sLnlheGlzLFQ9dy5fbGVuZ3RoLEE9ay5fbGVuZ3RoLE09W1tbMCwwXSxbVCwwXSxbVCxBXSxbMCxBXV1dLFM9W107cy5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgRT11LmxhYmVsRm9ybWF0dGVyKGEsaS50LmNiLHIuX2Z1bGxMYXlvdXQpLEM9by50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChvLmZvbnQsYS5sYWJlbGZvbnQpLEw9e2xlZnQ6MCxyaWdodDpULGNlbnRlcjpULzIsdG9wOjAsYm90dG9tOkEsbWlkZGxlOkEvMn0sej1NYXRoLnNxcnQoVCpUK0EqQSksTz1mLkxBQkVMRElTVEFOQ0Uqei9NYXRoLm1heCgxLGUubGVuZ3RoL2YuTEFCRUxJTkNSRUFTRSk7di5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXUuY2FsY1RleHRPcHRzKHQubGV2ZWwsRSxDLHIpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goZnVuY3Rpb24ocil7dmFyIG49cy5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLEwsZS5oZWlnaHQvMik7aWYobiYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG8scz0wO3M8ci5wZWRnZXBhdGhzLmxlbmd0aDtzKyspZT09PXIucGVkZ2VwYXRoc1tzXSYmKG89ci5lZGdlcGF0aHNbc10pO2lmKCFvKXJldHVybjt2YXIgbD1pLmFbMF0sYz1pLmFbaS5hLmxlbmd0aC0xXSx1PWkuYlswXSxmPWkuYltpLmIubGVuZ3RoLTFdO2Z1bmN0aW9uIGgodCxlKXt2YXIgcixuPTA7cmV0dXJuKE1hdGguYWJzKHRbMF0tbCk8LjF8fE1hdGguYWJzKHRbMF0tYyk8LjEpJiYocj14KGkuZHh5ZGJfcm91Z2godFswXSx0WzFdLC4xKSksbj1NYXRoLm1heChuLGEqYihlLHIpLzIpKSwoTWF0aC5hYnModFsxXS11KTwuMXx8TWF0aC5hYnModFsxXS1mKTwuMSkmJihyPXgoaS5keHlkYV9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSpiKGUscikvMikpLG59dmFyIHA9eSh0LDAsMSksZD15KHQsbi50b3RhbCxuLnRvdGFsLTEpLGc9aChvWzBdLHApLHY9bi50b3RhbC1oKG9bby5sZW5ndGgtMV0sZCk7bi5taW48ZyYmKG4ubWluPWcpO24ubWF4PnYmJihuLm1heD12KTtuLmxlbj1uLm1heC1uLm1pbn0odGhpcyxyLHQsbixjLGUuaGVpZ2h0KSwhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpmLkxBQkVMTUlOKSkpZm9yKHZhciBpPU1hdGgubWluKE1hdGguY2VpbChuLmxlbi9PKSxmLkxBQkVMTUFYKSxhPTA7YTxpO2ErKyl7dmFyIG89dS5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLG4sZSxTLEwpO2lmKCFvKWJyZWFrO3UuYWRkTGFiZWxEYXRhKG8sZSxTLE0pfX0pfSksQy5yZW1vdmUoKSx1LmRyYXdMYWJlbHMoXyxTLHIsbSxnP006bnVsbCl9ZCYmIXAmJnYucmVtb3ZlKCl9KF8seix0LFQsTCxlLE0pLG8uc2V0Q2xpcFVybChfLE0uX2NsaXBQYXRoSWQsdCl9ZnVuY3Rpb24gRyh0KXt2YXIgZT1NLmFiMnh5KHRbMF0sdFsxXSwhMCk7cmV0dXJuW3cuYzJwKGVbMF0pLGsuYzJwKGVbMV0pXX19KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2xpYiI6NzAwLCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo4OTcsIi4uL2NhcnBldC9tYWtlcGF0aCI6ODk4LCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5Ijo4OTksIi4uL2NvbnRvdXIvY2xvc2VfYm91bmRhcmllcyI6OTIxLCIuLi9jb250b3VyL2NvbnN0YW50cyI6OTIzLCIuLi9jb250b3VyL2NvbnZlcnRfdG9fY29uc3RyYWludHMiOjkyNywiLi4vY29udG91ci9lbXB0eV9wYXRoaW5mbyI6OTI5LCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzIjo5MzEsIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3MiOjkzNiwiLi4vY29udG91ci9wbG90Ijo5MzcsIi4vam9pbl9hbGxfcGF0aHMiOjk0NSwiLi9tYXBfcGF0aGluZm8iOjk0NixkMzoxNTR9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe3o6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seDpzKHt9LG4ueCx7aW1wbGllZEVkaXRzOnt4dHlwZToiYXJyYXkifX0pLHgwOnMoe30sbi54MCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSxkeDpzKHt9LG4uZHgse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseTpzKHt9LG4ueSx7aW1wbGllZEVkaXRzOnt5dHlwZToiYXJyYXkifX0pLHkwOnMoe30sbi55MCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSxkeTpzKHt9LG4uZHkse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSksdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNwb3NlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0seHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFycmF5Iiwic2NhbGVkIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXJyYXkiLCJzY2FsZWQiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHpzbW9vdGg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZhc3QiLCJiZXN0IiwhMV0sZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0seGdhcDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSx5Z2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToicGxvdCJ9LHpob3ZlcmZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJub25lIn0saG92ZXJ0ZW1wbGF0ZTppKCl9LHt0cmFuc2Zvcm1zOnZvaWQgMH0sYSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pLHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1ODQsIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MTUsIi4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sOTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9oaXN0b2dyYW0yZC9jYWxjIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGw9dCgiLi9jb252ZXJ0X2NvbHVtbl94eXoiKSxjPXQoIi4vY2xlYW5fMmRfYXJyYXkiKSx1PXQoIi4vaW50ZXJwMmQiKSxmPXQoIi4vZmluZF9lbXB0aWVzIiksaD10KCIuL21ha2VfYm91bmRfYXJyYXkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixwLGQsZyx2LG0seSx4LGIsXz1hLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4Iiksdz1hLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iiksaz1uLnRyYWNlSXMoZSwiY29udG91ciIpLFQ9bi50cmFjZUlzKGUsImhpc3RvZ3JhbSIpLEE9bi50cmFjZUlzKGUsImdsMmQiKSxNPWs/ImJlc3QiOmUuenNtb290aDtpZihfLl9taW5EdGljaz0wLHcuX21pbkR0aWNrPTAsVClyPShiPW8odCxlKSkueCxwPWIueDAsZD1iLmR4LGc9Yi55LHY9Yi55MCxtPWIuZHkseT1iLno7ZWxzZXt2YXIgUz1lLno7aS5pc0FycmF5MUQoUyk/KGwoZSxfLHcsIngiLCJ5IixbInoiXSkscj1lLl94LGc9ZS5feSxTPWUuX3opOihyPWUueD9fLm1ha2VDYWxjZGF0YShlLCJ4Iik6W10sZz1lLnk/dy5tYWtlQ2FsY2RhdGEoZSwieSIpOltdKSxwPWUueDAsZD1lLmR4LHY9ZS55MCxtPWUuZHkseT1jKFMsZS50cmFuc3Bvc2UpLChrfHxlLmNvbm5lY3RnYXBzKSYmKGUuX2VtcHR5cG9pbnRzPWYoeSksdSh5LGUuX2VtcHR5cG9pbnRzKSl9ZnVuY3Rpb24gRSh0KXtNPWUuX2lucHV0LnpzbW9vdGg9ZS56c21vb3RoPSExLGkud2FybignY2Fubm90IHVzZSB6c21vb3RoOiAiZmFzdCI6ICcrdCl9aWYoImZhc3QiPT09TSlpZigibG9nIj09PV8udHlwZXx8ImxvZyI9PT13LnR5cGUpRSgibG9nIGF4aXMgZm91bmQiKTtlbHNlIGlmKCFUKXtpZihyLmxlbmd0aCl7dmFyIEM9KHJbci5sZW5ndGgtMV0tclswXSkvKHIubGVuZ3RoLTEpLEw9TWF0aC5hYnMoQy8xMDApO2Zvcih4PTA7eDxyLmxlbmd0aC0xO3grKylpZihNYXRoLmFicyhyW3grMV0tclt4XS1DKT5MKXtFKCJ4IHNjYWxlIGlzIG5vdCBsaW5lYXIiKTticmVha319aWYoZy5sZW5ndGgmJiJmYXN0Ij09PU0pe3ZhciB6PShnW2cubGVuZ3RoLTFdLWdbMF0pLyhnLmxlbmd0aC0xKSxPPU1hdGguYWJzKHovMTAwKTtmb3IoeD0wO3g8Zy5sZW5ndGgtMTt4KyspaWYoTWF0aC5hYnMoZ1t4KzFdLWdbeF0teik+Tyl7RSgieSBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fX12YXIgST1pLm1heFJvd0xlbmd0aCh5KSxEPSJzY2FsZWQiPT09ZS54dHlwZT8iIjpyLFA9aChlLEQscCxkLEksXyksUj0ic2NhbGVkIj09PWUueXR5cGU/IiI6ZyxGPWgoZSxSLHYsbSx5Lmxlbmd0aCx3KTtBfHwoZS5fZXh0cmVtZXNbXy5faWRdPWEuZmluZEV4dHJlbWVzKF8sUCksZS5fZXh0cmVtZXNbdy5faWRdPWEuZmluZEV4dHJlbWVzKHcsRikpO3ZhciBCPXt4OlAseTpGLHo6eSx0ZXh0OmUuX3RleHR8fGUudGV4dCxob3ZlcnRleHQ6ZS5faG92ZXJ0ZXh0fHxlLmhvdmVydGV4dH07aWYoRCYmRC5sZW5ndGg9PT1QLmxlbmd0aC0xJiYoQi54Q2VudGVyPUQpLFImJlIubGVuZ3RoPT09Ri5sZW5ndGgtMSYmKEIueUNlbnRlcj1SKSxUJiYoQi54UmFuZ2VzPWIueFJhbmdlcyxCLnlSYW5nZXM9Yi55UmFuZ2VzLEIucHRzPWIucHRzKSxrJiYiY29uc3RyYWludCI9PT1lLmNvbnRvdXJzLnR5cGV8fHModCxlLHt2YWxzOnksY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6InoifSksayYmZS5jb250b3VycyYmImhlYXRtYXAiPT09ZS5jb250b3Vycy5jb2xvcmluZyl7dmFyIE49e3R5cGU6ImNvbnRvdXIiPT09ZS50eXBlPyJoZWF0bWFwIjoiaGlzdG9ncmFtMmQiLHhjYWxlbmRhcjplLnhjYWxlbmRhcix5Y2FsZW5kYXI6ZS55Y2FsZW5kYXJ9O0IueGZpbGw9aChOLEQscCxkLEksXyksQi55ZmlsbD1oKE4sUix2LG0seS5sZW5ndGgsdyl9cmV0dXJuW0JdfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vaGlzdG9ncmFtMmQvY2FsYyI6OTgwLCIuL2NsZWFuXzJkX2FycmF5Ijo5NTAsIi4vY29udmVydF9jb2x1bW5feHl6Ijo5NTIsIi4vZmluZF9lbXB0aWVzIjo5NTQsIi4vaW50ZXJwMmQiOjk1NywiLi9tYWtlX2JvdW5kX2FycmF5Ijo5NTh9XSw5NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzLGw7ZnVuY3Rpb24gYyh0KXtpZihuKHQpKXJldHVybit0fWlmKGUpe2ZvcihyPTAscz0wO3M8dC5sZW5ndGg7cysrKXI9TWF0aC5tYXgocix0W3NdLmxlbmd0aCk7aWYoMD09PXIpcmV0dXJuITE7YT1mdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9LG89ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W3JdW2VdfX1lbHNlIHI9dC5sZW5ndGgsYT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdLmxlbmd0aH0sbz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV1bcl19O3ZhciB1PW5ldyBBcnJheShyKTtmb3Iocz0wO3M8cjtzKyspZm9yKGk9YSh0LHMpLHVbc109bmV3IEFycmF5KGkpLGw9MDtsPGk7bCsrKXVbc11bbF09YyhvKHQscyxsKSk7cmV0dXJuIHV9fSx7ImZhc3QtaXNudW1lcmljIjoyMjF9XSw5NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttaW46InptaW4iLG1heDoiem1heCJ9fSx7fV0sOTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3ZhciBsLGMsdSxmLGg9dC5fbGVuZ3RoLHA9ZS5tYWtlQ2FsY2RhdGEodCxhKSxkPXIubWFrZUNhbGNkYXRhKHQsbyksZz10LnRleHQsdj12b2lkIDAhPT1nJiZuLmlzQXJyYXkxRChnKSxtPXQuaG92ZXJ0ZXh0LHk9dm9pZCAwIT09bSYmbi5pc0FycmF5MUQobSkseD1uLmRpc3RpbmN0VmFscyhwKSxiPXgudmFscyxfPW4uZGlzdGluY3RWYWxzKGQpLHc9Xy52YWxzLGs9W107Zm9yKGw9MDtsPHMubGVuZ3RoO2wrKylrW2xdPW4uaW5pdDJkQXJyYXkody5sZW5ndGgsYi5sZW5ndGgpO2Zvcih2JiYodT1uLmluaXQyZEFycmF5KHcubGVuZ3RoLGIubGVuZ3RoKSkseSYmKGY9bi5pbml0MmRBcnJheSh3Lmxlbmd0aCxiLmxlbmd0aCkpLGw9MDtsPGg7bCsrKWlmKHBbbF0hPT1pJiZkW2xdIT09aSl7dmFyIFQ9bi5maW5kQmluKHBbbF0reC5taW5EaWZmLzIsYiksQT1uLmZpbmRCaW4oZFtsXStfLm1pbkRpZmYvMix3KTtmb3IoYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgTT10W3NbY11dO2tbY11bQV1bVF09TVtsXX12JiYodVtBXVtUXT1nW2xdKSx5JiYoZltBXVtUXT1tW2xdKX1mb3IodFsiXyIrYV09Yix0WyJfIitvXT13LGM9MDtjPHMubGVuZ3RoO2MrKyl0WyJfIitzW2NdXT1rW2NdO3YmJih0Ll90ZXh0PXUpLHkmJih0Ll9ob3ZlcnRleHQ9Zil9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDB9XSw5NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3h5el9kZWZhdWx0cyIpLGE9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWkodCxlLGMsbCk/KGMoInRleHQiKSxjKCJob3ZlcnRleHQiKSxjKCJob3ZlcnRlbXBsYXRlIiksYSh0LGUsYyxsKSxjKCJjb25uZWN0Z2FwcyIsbi5pc0FycmF5MUQoZS56KSYmITEhPT1lLnpzbW9vdGgpLG8odCxlLGwsYyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSkpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo1ODcsIi4uLy4uL2xpYiI6NzAwLCIuL2F0dHJpYnV0ZXMiOjk0OCwiLi9zdHlsZV9kZWZhdWx0cyI6OTYxLCIuL3h5el9kZWZhdWx0cyI6OTYyfV0sOTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLm1heFJvd0xlbmd0aDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxzLGwsYyx1PVtdLGY9e30saD1bXSxwPXRbMF0sZD1bXSxnPVswLDAsMF0sdj1uKHQpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspZm9yKGU9ZCxkPXAscD10W3IrMV18fFtdLGk9MDtpPHY7aSsrKXZvaWQgMD09PWRbaV0mJigocz0odm9pZCAwIT09ZFtpLTFdPzE6MCkrKHZvaWQgMCE9PWRbaSsxXT8xOjApKyh2b2lkIDAhPT1lW2ldPzE6MCkrKHZvaWQgMCE9PXBbaV0/MTowKSk/KDA9PT1yJiZzKyssMD09PWkmJnMrKyxyPT09dC5sZW5ndGgtMSYmcysrLGk9PT1kLmxlbmd0aC0xJiZzKyssczw0JiYoZltbcixpXV09W3IsaSxzXSksdS5wdXNoKFtyLGksc10pKTpoLnB1c2goW3IsaV0pKTtmb3IoO2gubGVuZ3RoOyl7Zm9yKGw9e30sYz0hMSxvPWgubGVuZ3RoLTE7bz49MDtvLS0pKHM9KChmW1socj0oYT1oW29dKVswXSktMSxpPWFbMV1dXXx8ZylbMl0rKGZbW3IrMSxpXV18fGcpWzJdKyhmW1tyLGktMV1dfHxnKVsyXSsoZltbcixpKzFdXXx8ZylbMl0pLzIwKSYmKGxbYV09W3IsaSxzXSxoLnNwbGljZShvLDEpLGM9ITApO2lmKCFjKXRocm93ImZpbmRFbXB0aWVzIGl0ZXJhdGVkIHdpdGggbm8gbmV3IG5laWdoYm9ycyI7Zm9yKGEgaW4gbClmW2FdPWxbYV0sdS5wdXNoKGxbYV0pfXJldHVybiB1LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVsyXS10WzJdfSl9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sOTU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLHUsZixoLHA9dC5jZFswXSxkPXAudHJhY2UsZz10LnhhLHY9dC55YSxtPXAueCx5PXAueSx4PXAueixiPXAueENlbnRlcixfPXAueUNlbnRlcix3PXAuem1hc2ssaz1bZC56bWluLGQuem1heF0sVD1kLnpob3ZlcmZvcm1hdCxBPW0sTT15O2lmKCExIT09dC5pbmRleCl7dHJ5e2Y9TWF0aC5yb3VuZCh0LmluZGV4WzFdKSxoPU1hdGgucm91bmQodC5pbmRleFswXSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgaS5lcnJvcigiRXJyb3IgaG92ZXJpbmcgb24gaGVhdG1hcCwgcG9pbnROdW1iZXIgbXVzdCBiZSBbcm93LGNvbF0sIGZvdW5kOiIsdC5pbmRleCl9aWYoZjwwfHxmPj14WzBdLmxlbmd0aHx8aDwwfHxoPngubGVuZ3RoKXJldHVybn1lbHNle2lmKG4uaW5ib3goZS1tWzBdLGUtbVttLmxlbmd0aC0xXSwwKT4wfHxuLmluYm94KHIteVswXSxyLXlbeS5sZW5ndGgtMV0sMCk+MClyZXR1cm47aWYobCl7dmFyIFM7Zm9yKEE9WzIqbVswXS1tWzFdXSxTPTE7UzxtLmxlbmd0aDtTKyspQS5wdXNoKChtW1NdK21bUy0xXSkvMik7Zm9yKEEucHVzaChbMiptW20ubGVuZ3RoLTFdLW1bbS5sZW5ndGgtMl1dKSxNPVsyKnlbMF0teVsxXV0sUz0xO1M8eS5sZW5ndGg7UysrKU0ucHVzaCgoeVtTXSt5W1MtMV0pLzIpO00ucHVzaChbMip5W3kubGVuZ3RoLTFdLXlbeS5sZW5ndGgtMl1dKX1mPU1hdGgubWF4KDAsTWF0aC5taW4oQS5sZW5ndGgtMixpLmZpbmRCaW4oZSxBKSkpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNLmxlbmd0aC0yLGkuZmluZEJpbihyLE0pKSl9dmFyIEU9Zy5jMnAobVtmXSksQz1nLmMycChtW2YrMV0pLEw9di5jMnAoeVtoXSksej12LmMycCh5W2grMV0pO2w/KEM9RSxjPW1bZl0sej1MLHU9eVtoXSk6KGM9Yj9iW2ZdOihtW2ZdK21bZisxXSkvMix1PV8/X1toXTooeVtoXSt5W2grMV0pLzIsZC56c21vb3RoJiYoRT1DPWcuYzJwKGMpLEw9ej12LmMycCh1KSkpO3ZhciBPLEksRD14W2hdW2ZdO3cmJiF3W2hdW2ZdJiYoRD12b2lkIDApLEFycmF5LmlzQXJyYXkocC5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KHAuaG92ZXJ0ZXh0W2hdKT9PPXAuaG92ZXJ0ZXh0W2hdW2ZdOkFycmF5LmlzQXJyYXkocC50ZXh0KSYmQXJyYXkuaXNBcnJheShwLnRleHRbaF0pJiYoTz1wLnRleHRbaF1bZl0pO3ZhciBQPXt0eXBlOiJsaW5lYXIiLHJhbmdlOmssaG92ZXJmb3JtYXQ6VCxfc2VwYXJhdG9yczpnLl9zZXBhcmF0b3JzLF9udW1Gb3JtYXQ6Zy5fbnVtRm9ybWF0fTtyZXR1cm4gST1hLnRpY2tUZXh0KFAsRCwiaG92ZXIiKS50ZXh0LFtpLmV4dGVuZEZsYXQodCx7aW5kZXg6W2gsZl0sZGlzdGFuY2U6dC5tYXhIb3ZlckRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6dC5tYXhTcGlrZURpc3RhbmNlLHgwOkUseDE6Qyx5MDpMLHkxOnoseExhYmVsVmFsOmMseUxhYmVsVmFsOnUsekxhYmVsVmFsOkQsekxhYmVsOkksdGV4dDpPfSldfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4fV0sOTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uY29sb3JiYXI9dCgiLi9jb2xvcmJhciIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iaGVhdG1hcCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi9hdHRyaWJ1dGVzIjo5NDgsIi4vY2FsYyI6OTQ5LCIuL2NvbG9yYmFyIjo5NTEsIi4vZGVmYXVsdHMiOjk1MywiLi9ob3ZlciI6OTU1LCIuL3Bsb3QiOjk1OSwiLi9zdHlsZSI6OTYwfV0sOTU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9W1stMSwwXSxbMSwwXSxbMCwtMV0sWzAsMV1dO2Z1bmN0aW9uIGEodCl7cmV0dXJuLjUtLjI1Kk1hdGgubWluKDEsLjUqdCl9ZnVuY3Rpb24gbyh0LGUscil7dmFyIG4sYSxvLHMsbCxjLHUsZixoLHAsZCxnLHYsbT0wO2ZvcihzPTA7czxlLmxlbmd0aDtzKyspe2ZvcihhPShuPWVbc10pWzBdLG89blsxXSxkPXRbYV1bb10scD0wLGg9MCxsPTA7bDw0O2wrKykodT10W2ErKGM9aVtsXSlbMF1dKSYmdm9pZCAwIT09KGY9dVtvK2NbMV1dKSYmKDA9PT1wP2c9dj1mOihnPU1hdGgubWluKGcsZiksdj1NYXRoLm1heCh2LGYpKSxoKysscCs9Zik7aWYoMD09PWgpdGhyb3ciaXRlcmF0ZUludGVycDJkIG9yZGVyIGlzIHdyb25nOiBubyBkZWZpbmVkIG5laWdoYm9ycyI7dFthXVtvXT1wL2gsdm9pZCAwPT09ZD9oPDQmJihtPTEpOih0W2FdW29dPSgxK3IpKnRbYV1bb10tcipkLHY+ZyYmKG09TWF0aC5tYXgobSxNYXRoLmFicyh0W2FdW29dLWQpLyh2LWcpKSkpfXJldHVybiBtfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGk9MTtmb3Iobyh0LGUpLHI9MDtyPGUubGVuZ3RoJiYhKGVbcl1bMl08NCk7cisrKTtmb3IoZT1lLnNsaWNlKHIpLHI9MDtyPDEwMCYmaT4uMDE7cisrKWk9byh0LGUsYShpKSk7cmV0dXJuIGk+LjAxJiZuLmxvZygiaW50ZXJwMmQgZGlkbid0IGNvbnZlcmdlIHF1aWNrbHkiLGkpLHR9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sOTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGwsYyx1LGY9W10saD1uLnRyYWNlSXModCwiY29udG91ciIpLHA9bi50cmFjZUlzKHQsImhpc3RvZ3JhbSIpLGQ9bi50cmFjZUlzKHQsImdsMmQiKTtpZihpKGUpJiZlLmxlbmd0aD4xJiYhcCYmImNhdGVnb3J5IiE9PXMudHlwZSl7dmFyIGc9ZS5sZW5ndGg7aWYoIShnPD1vKSlyZXR1cm4gaD9lLnNsaWNlKDAsbyk6ZS5zbGljZSgwLG8rMSk7aWYoaHx8ZClmPWUuc2xpY2UoMCxvKTtlbHNlIGlmKDE9PT1vKWY9W2VbMF0tLjUsZVswXSsuNV07ZWxzZXtmb3IoZj1bMS41KmVbMF0tLjUqZVsxXV0sdT0xO3U8Zzt1KyspZi5wdXNoKC41KihlW3UtMV0rZVt1XSkpO2YucHVzaCgxLjUqZVtnLTFdLS41KmVbZy0yXSl9aWYoZzxvKXt2YXIgdj1mW2YubGVuZ3RoLTFdLG09di1mW2YubGVuZ3RoLTJdO2Zvcih1PWc7dTxvO3UrKyl2Kz1tLGYucHVzaCh2KX19ZWxzZXt2YXIgeT10W3MuX2lkLmNoYXJBdCgwKSsiY2FsZW5kYXIiXTtmb3IobD1pKGUpJiYxPT09ZS5sZW5ndGg/ZVswXTp2b2lkIDA9PT1yPzA6cHx8ImNhdGVnb3J5Ij09PXMudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09cy50eXBlP3MucjJjKHIsMCx5KTpzLmQyYyhyLDAseSksYz1hfHwxLHU9aHx8ZD8wOi0uNTt1PG87dSsrKWYucHVzaChsK2MqdSl9cmV0dXJuIGZ9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5fV0sOTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUubGVuZ3RoLTIsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPWVbbisxXSxzPW8uY29uc3RyYWluKG4rKHQtaSkvKGEtaSktLjUsMCxyKSxsPU1hdGgucm91bmQocyksYz1NYXRoLmFicyhzLWwpO3JldHVybiBzJiZzIT09ciYmYz97YmluMDpsLGZyYWM6YyxiaW4xOk1hdGgucm91bmQobCtjLyhzLWwpKX06e2JpbjA6bCxiaW4xOmwsZnJhYzowfX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9ZS5sZW5ndGgtMSxuPW8uY29uc3RyYWluKG8uZmluZEJpbih0LGUpLDAsciksaT1lW25dLGE9KHQtaSkvKGVbbisxXS1pKXx8MDtyZXR1cm4gYTw9MD97YmluMDpuLGJpbjE6bixmcmFjOjB9OmE8LjU/e2JpbjA6bixiaW4xOm4rMSxmcmFjOmF9OntiaW4wOm4rMSxiaW4xOm4sZnJhYzoxLWF9fWZ1bmN0aW9uIGYodCxlLHIpe3RbZV09clswXSx0W2UrMV09clsxXSx0W2UrMl09clsyXSx0W2UrM109TWF0aC5yb3VuZCgyNTUqclszXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe3ZhciBwPWUueGF4aXMsZD1lLnlheGlzO28ubWFrZVRyYWNlR3JvdXBzKGgsciwiaG0iKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByLGgsZyx2LG0seSx4PW4uc2VsZWN0KHRoaXMpLGI9ZVswXSxfPWIudHJhY2Usdz1iLnosaz1iLngsVD1iLnksQT1iLnhDZW50ZXIsTT1iLnlDZW50ZXIsUz1hLnRyYWNlSXMoXywiY29udG91ciIpLEU9Uz8iYmVzdCI6Xy56c21vb3RoLEM9dy5sZW5ndGgsTD1vLm1heFJvd0xlbmd0aCh3KSx6PSExLE89ITE7Zm9yKHk9MDt2b2lkIDA9PT1yJiZ5PGsubGVuZ3RoLTE7KXI9cC5jMnAoa1t5XSkseSsrO2Zvcih5PWsubGVuZ3RoLTE7dm9pZCAwPT09aCYmeT4wOyloPXAuYzJwKGtbeV0pLHktLTtmb3IoaDxyJiYoZz1oLGg9cixyPWcsej0hMCkseT0wO3ZvaWQgMD09PXYmJnk8VC5sZW5ndGgtMTspdj1kLmMycChUW3ldKSx5Kys7Zm9yKHk9VC5sZW5ndGgtMTt2b2lkIDA9PT1tJiZ5PjA7KW09ZC5jMnAoVFt5XSkseS0tO2lmKG08diYmKGc9dix2PW0sbT1nLE89ITApLFMmJihBPWssTT1ULGs9Yi54ZmlsbCxUPWIueWZpbGwpLCJmYXN0IiE9PUUpe3ZhciBJPSJiZXN0Ij09PUU/MDouNTtyPU1hdGgubWF4KC1JKnAuX2xlbmd0aCxyKSxoPU1hdGgubWluKCgxK0kpKnAuX2xlbmd0aCxoKSx2PU1hdGgubWF4KC1JKmQuX2xlbmd0aCx2KSxtPU1hdGgubWluKCgxK0kpKmQuX2xlbmd0aCxtKX12YXIgRD1NYXRoLnJvdW5kKGgtciksUD1NYXRoLnJvdW5kKG0tdik7aWYoRDw9MHx8UDw9MCl7eC5zZWxlY3RBbGwoImltYWdlIikuZGF0YShbXSkuZXhpdCgpLnJlbW92ZSgpfWVsc2V7dmFyIFIsRjsiZmFzdCI9PT1FPyhSPUwsRj1DKTooUj1ELEY9UCk7dmFyIEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Qi53aWR0aD1SLEIuaGVpZ2h0PUY7dmFyIE4saixWPUIuZ2V0Q29udGV4dCgiMmQiKSxVPXMubWFrZUNvbG9yU2NhbGVGdW5jKHMuZXh0cmFjdFNjYWxlKF8se2NMZXR0ZXI6InoifSkse25vTnVtZXJpY0NoZWNrOiEwLHJldHVybkFycmF5OiEwfSk7ImZhc3QiPT09RT8oTj16P2Z1bmN0aW9uKHQpe3JldHVybiBMLTEtdH06by5pZGVudGl0eSxqPU8/ZnVuY3Rpb24odCl7cmV0dXJuIEMtMS10fTpvLmlkZW50aXR5KTooTj1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChwLmMycChrW3RdKS1yKSwwLEQpfSxqPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNvbnN0cmFpbihNYXRoLnJvdW5kKGQuYzJwKFRbdF0pLXYpLDAsUCl9KTt2YXIgcSxILEcsWSxXLFg9aigwKSxaPVtYLFhdLCQ9ej8wOjEsSj1PPzA6MSxLPTAsUT0wLHR0PTAsZXQ9MDtpZihFKXt2YXIgcnQsbnQ9MDt0cnl7cnQ9bmV3IFVpbnQ4QXJyYXkoRCpQKjQpfWNhdGNoKHQpe3J0PW5ldyBBcnJheShEKlAqNCl9aWYoImJlc3QiPT09RSl7dmFyIGl0LGF0LG90LHN0PUF8fGssbHQ9TXx8VCxjdD1uZXcgQXJyYXkoc3QubGVuZ3RoKSx1dD1uZXcgQXJyYXkobHQubGVuZ3RoKSxmdD1uZXcgQXJyYXkoRCksaHQ9QT91OmMscHQ9TT91OmM7Zm9yKHk9MDt5PHN0Lmxlbmd0aDt5KyspY3RbeV09TWF0aC5yb3VuZChwLmMycChzdFt5XSktcik7Zm9yKHk9MDt5PGx0Lmxlbmd0aDt5KyspdXRbeV09TWF0aC5yb3VuZChkLmMycChsdFt5XSktdik7Zm9yKHk9MDt5PEQ7eSsrKWZ0W3ldPWh0KHksY3QpO2ZvcihIPTA7SDxQO0grKylmb3IoYXQ9d1soaXQ9cHQoSCx1dCkpLmJpbjBdLG90PXdbaXQuYmluMV0seT0wO3k8RDt5KyssbnQrPTQpZihydCxudCxXPVR0KGF0LG90LGZ0W3ldLGl0KSl9ZWxzZSBmb3IoSD0wO0g8QztIKyspZm9yKFk9d1tIXSxaPWooSCkseT0wO3k8RDt5KyspVz1rdChZW3ldLDEpLGYocnQsbnQ9NCooWipEK04oeSkpLFcpO3ZhciBkdD1WLmNyZWF0ZUltYWdlRGF0YShELFApO3RyeXtkdC5kYXRhLnNldChydCl9Y2F0Y2godCl7dmFyIGd0PWR0LmRhdGEsdnQ9Z3QubGVuZ3RoO2ZvcihIPTA7SDx2dDtIKyspZ3RbSF09cnRbSF19Vi5wdXRJbWFnZURhdGEoZHQsMCwwKX1lbHNle3ZhciBtdD1fLnhnYXAseXQ9Xy55Z2FwLHh0PU1hdGguZmxvb3IobXQvMiksYnQ9TWF0aC5mbG9vcih5dC8yKTtmb3IoSD0wO0g8QztIKyspaWYoWT13W0hdLFoucmV2ZXJzZSgpLFpbSl09aihIKzEpLFpbMF0hPT1aWzFdJiZ2b2lkIDAhPT1aWzBdJiZ2b2lkIDAhPT1aWzFdKWZvcihxPVtHPU4oMCksR10seT0wO3k8TDt5KyspcS5yZXZlcnNlKCkscVskXT1OKHkrMSkscVswXSE9PXFbMV0mJnZvaWQgMCE9PXFbMF0mJnZvaWQgMCE9PXFbMV0mJihXPWt0KFlbeV0sKHFbMV0tcVswXSkqKFpbMV0tWlswXSkpLFYuZmlsbFN0eWxlPSJyZ2JhKCIrVy5qb2luKCIsIikrIikiLFYuZmlsbFJlY3QocVswXSt4dCxaWzBdK2J0LHFbMV0tcVswXS1tdCxaWzFdLVpbMF0teXQpKX1RPU1hdGgucm91bmQoUS9LKSx0dD1NYXRoLnJvdW5kKHR0L0spLGV0PU1hdGgucm91bmQoZXQvSyk7dmFyIF90PWkoInJnYigiK1ErIiwiK3R0KyIsIitldCsiKSIpO3QuX2htcGl4Y291bnQ9KHQuX2htcGl4Y291bnR8fDApK0ssdC5faG1sdW1jb3VudD0odC5faG1sdW1jb3VudHx8MCkrSypfdC5nZXRMdW1pbmFuY2UoKTt2YXIgd3Q9eC5zZWxlY3RBbGwoImltYWdlIikuZGF0YShlKTt3dC5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSx3dC5hdHRyKHtoZWlnaHQ6UCx3aWR0aDpELHg6cix5OnYsInhsaW5rOmhyZWYiOkIudG9EYXRhVVJMKCJpbWFnZS9wbmciKX0pfWZ1bmN0aW9uIGt0KHQsZSl7aWYodm9pZCAwIT09dCl7dmFyIHI9VSh0KTtyZXR1cm4gclswXT1NYXRoLnJvdW5kKHJbMF0pLHJbMV09TWF0aC5yb3VuZChyWzFdKSxyWzJdPU1hdGgucm91bmQoclsyXSksSys9ZSxRKz1yWzBdKmUsdHQrPXJbMV0qZSxldCs9clsyXSplLHJ9cmV0dXJuWzAsMCwwLDBdfWZ1bmN0aW9uIFR0KHQsZSxyLG4pe3ZhciBpPXRbci5iaW4wXTtpZih2b2lkIDA9PT1pKXJldHVybiBrdCh2b2lkIDAsMSk7dmFyIGEsbz10W3IuYmluMV0scz1lW3IuYmluMF0sbD1lW3IuYmluMV0sYz1vLWl8fDAsdT1zLWl8fDA7cmV0dXJuIGE9dm9pZCAwPT09bz92b2lkIDA9PT1sPzA6dm9pZCAwPT09cz8yKihsLWkpOjIqKDIqbC1zLWkpLzM6dm9pZCAwPT09bD92b2lkIDA9PT1zPzA6MiooMippLW8tcykvMzp2b2lkIDA9PT1zPzIqKDIqbC1vLWkpLzM6bCtpLW8tcyxrdChpK3IuZnJhYypjK24uZnJhYyoodStyLmZyYWMqYSkpfX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjU4OSwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY3OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksZDM6MTU0LHRpbnljb2xvcjI6NTIxfV0sOTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmhtIGltYWdlIikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KX19LHtkMzoxNTR9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXshMT09PXIoInpzbW9vdGgiKSYmKHIoInhnYXAiKSxyKCJ5Z2FwIikpLHIoInpob3ZlcmZvcm1hdCIpfX0se31dLDk2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1lKHQpO3JldHVybiJzY2FsZWQiPT09KHI/ZSh0KyJ0eXBlIiwiYXJyYXkiKToic2NhbGVkIikmJihlKHQrIjAiKSxlKCJkIit0KSkscn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1LGYsaD1yKCJ6Iik7aWYobD1sfHwieCIsYz1jfHwieSIsdm9pZCAwPT09aHx8IWgubGVuZ3RoKXJldHVybiAwO2lmKGkuaXNBcnJheTFEKHQueikpe3U9cihsKSxmPXIoYyk7dmFyIHA9aS5taW5Sb3dMZW5ndGgodSksZD1pLm1pblJvd0xlbmd0aChmKTtpZigwPT09cHx8MD09PWQpcmV0dXJuIDA7ZS5fbGVuZ3RoPU1hdGgubWluKHAsZCxoLmxlbmd0aCl9ZWxzZXtpZih1PW8obCxyKSxmPW8oYyxyKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9ITAsYT0hMSxvPSExLHM9MDtzPHQubGVuZ3RoO3MrKyl7aWYoZT10W3NdLCFpLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkpe3I9ITE7YnJlYWt9ZS5sZW5ndGg+MCYmKGE9ITApO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKG4oZVtsXSkpe289ITA7YnJlYWt9fXJldHVybiByJiZhJiZvfShoKSlyZXR1cm4gMDtyKCJ0cmFuc3Bvc2UiKSxlLl9sZW5ndGg9bnVsbH1yZXR1cm4gYS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsW2wsY10scyksITB9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sOTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Zvcih2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGw9WyJ6IiwieCIsIngwIiwiZHgiLCJ5IiwieTAiLCJkeSIsInRleHQiLCJ0cmFuc3Bvc2UiLCJ4dHlwZSIsInl0eXBlIl0sYz17fSx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBmPWxbdV07Y1tmXT1uW2ZdfW8oYyxpKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkse2NvbG9yYmFyOmF9KSxlLmV4cG9ydHM9cyhjLCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1ODQsIi4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjk0OH1dLDk2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1oZWF0bWFwMmQiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0iaGVhdG1hcGdsIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuekRhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuaWRUb0luZGV4PVtdLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLm9wdGlvbnM9e3o6W10seDpbXSx5OltdLHNoYXBlOlswLDBdLGNvbG9yTGV2ZWxzOlswXSxjb2xvclZhbHVlczpbMCwwLDAsMV19LHRoaXMuaGVhdG1hcD1uKHQuZ2xwbG90LHRoaXMub3B0aW9ucyksdGhpcy5oZWF0bWFwLl90cmFjZT10aGlzfXZhciBzPW8ucHJvdG90eXBlO3MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLnNoYXBlLG49dC5wb2ludElkLGk9biVyWzBdLGE9TWF0aC5mbG9vcihuL3JbMF0pLG89bjtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDpbZS54W2ldLGUueVthXSxlLnpbb11dLHRleHRMYWJlbDp0aGlzLnRleHRMYWJlbHNbbl0sbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDpbYSxpXSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxzLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhpcy5pbmRleD10LmluZGV4LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm87dmFyIG49ci56O3RoaXMub3B0aW9ucy56PVtdLmNvbmNhdC5hcHBseShbXSxuKTt2YXIgbz1uWzBdLmxlbmd0aCxzPW4ubGVuZ3RoO3RoaXMub3B0aW9ucy5zaGFwZT1bbyxzXSx0aGlzLm9wdGlvbnMueD1yLngsdGhpcy5vcHRpb25zLnk9ci55O3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNvbG9yc2NhbGUscj10LnptaW4sbj10LnptYXgsaT1lLmxlbmd0aCxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheSg0KmkpLGw9MDtsPGk7bCsrKXt2YXIgYz1lW2xdLHU9YShjWzFdKTtvW2xdPXIrY1swXSoobi1yKTtmb3IodmFyIGY9MDtmPDQ7ZisrKXNbNCpsK2ZdPXVbZl19cmV0dXJue2NvbG9yTGV2ZWxzOm8sY29sb3JWYWx1ZXM6c319KHQpO3RoaXMub3B0aW9ucy5jb2xvckxldmVscz1sLmNvbG9yTGV2ZWxzLHRoaXMub3B0aW9ucy5jb2xvclZhbHVlcz1sLmNvbG9yVmFsdWVzLHRoaXMudGV4dExhYmVscz1bXS5jb25jYXQuYXBwbHkoW10sdC50ZXh0KSx0aGlzLmhlYXRtYXAudXBkYXRlKHRoaXMub3B0aW9ucyk7dmFyIGM9dGhpcy5zY2VuZS54YXhpcyx1PXRoaXMuc2NlbmUueWF4aXM7dC5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsci54KSx0Ll9leHRyZW1lc1t1Ll9pZF09aS5maW5kRXh0cmVtZXModSxyLnkpfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmhlYXRtYXAuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBvKHQsZS51aWQpO3JldHVybiBuLnVwZGF0ZShlLHIpLG59fSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiZ2wtaGVhdG1hcDJkIjoyNDd9XSw5NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi4vaGVhdG1hcC9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLG4uY2FsYz10KCIuLi9oZWF0bWFwL2NhbGMiKSxuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoZWF0bWFwZ2wiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLG4uY2F0ZWdvcmllcz1bImdsIiwiZ2wyZCIsIjJkTWFwIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsMmQiOjc4NywiLi4vaGVhdG1hcC9jYWxjIjo5NDksIi4uL2hlYXRtYXAvY29sb3JiYXIiOjk1MSwiLi4vaGVhdG1hcC9kZWZhdWx0cyI6OTUzLCIuL2F0dHJpYnV0ZXMiOjk2MywiLi9jb252ZXJ0Ijo5NjR9XSw5NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksYT10KCIuL2Jpbl9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24saGlzdGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWluIiwibWF4Il0sZGZsdDoiY291bnQiLGVkaXRUeXBlOiJjYWxjIn0saGlzdG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsInBlcmNlbnQiLCJwcm9iYWJpbGl0eSIsImRlbnNpdHkiLCJwcm9iYWJpbGl0eSBkZW5zaXR5Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGN1bXVsYXRpdmU6e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY3JlYXNpbmciLCJkZWNyZWFzaW5nIl0sZGZsdDoiaW5jcmVhc2luZyIsZWRpdFR5cGU6ImNhbGMifSxjdXJyZW50YmluOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmNsdWRlIiwiZXhjbHVkZSIsImhhbGYiXSxkZmx0OiJpbmNsdWRlIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbmJpbnN4Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx4YmluczphKCJ4IiwhMCksbmJpbnN5Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5YmluczphKCJ5IiwhMCksYXV0b2Jpbng6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LGF1dG9iaW55Ont2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmkoe30se2tleXM6by5ldmVudERhdGFLZXlzfSksbWFya2VyOm4ubWFya2VyLG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLF9kZXByZWNhdGVkOntiYXJkaXI6bi5fZGVwcmVjYXRlZC5iYXJkaXJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2Jhci9hdHRyaWJ1dGVzIjo4MzksIi4vYmluX2F0dHJpYnV0ZXMiOjk2OCwiLi9jb25zdGFudHMiOjk3Mn1dLDk2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wLGk9MDtpPHI7aSsrKWVbaV0/KHRbaV0vPWVbaV0sbis9dFtpXSk6dFtpXT1udWxsO3JldHVybiBufX0se31dLDk2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxlbmQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxzaXplOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX19LHt9XSw5Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9e2NvdW50OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gclt0XSsrLDF9LHN1bTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO3JldHVybiBuKGEpPyhhPU51bWJlcihhKSxyW3RdKz1hLGEpOjB9LGF2ZzpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPWlbZV07cmV0dXJuIG4obykmJihvPU51bWJlcihvKSxyW3RdKz1vLGFbdF0rKyksMH0sbWluOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPWlbZV07aWYobihhKSl7aWYoYT1OdW1iZXIoYSksIW4oclt0XSkpcmV0dXJuIHJbdF09YSxhO2lmKHJbdF0+YSl7dmFyIG89YS1yW3RdO3JldHVybiByW3RdPWEsb319cmV0dXJuIDB9LG1heDpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPGEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfX19LHsiZmFzdC1pc251bWVyaWMiOjIyMX1dLDk3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksaT1uLk9ORUFWR1lFQVIsYT1uLk9ORUFWR01PTlRILG89bi5PTkVEQVkscz1uLk9ORUhPVVIsbD1uLk9ORU1JTixjPW4uT05FU0VDLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrSW5jcmVtZW50O2Z1bmN0aW9uIGYodCxlLHIsbil7aWYodCplPD0wKXJldHVybiAxLzA7Zm9yKHZhciBpPU1hdGguYWJzKGUtdCksYT0iZGF0ZSI9PT1yLnR5cGUsbz1oKGksYSkscz0wO3M8MTA7cysrKXt2YXIgbD1oKDgwKm8sYSk7aWYobz09PWwpYnJlYWs7aWYoIXAobCx0LGUsYSxyLG4pKWJyZWFrO289bH1yZXR1cm4gb31mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGUmJnQ+Yz90Pm8/dD4xLjEqaT9pOnQ+MS4xKmE/YTpvOnQ+cz9zOnQ+bD9sOmM6TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMTApKX1mdW5jdGlvbiBwKHQsZSxyLG4sYSxzKXtpZihuJiZ0Pm8pe3ZhciBsPWQoZSxhLHMpLGM9ZChyLGEscyksdT10PT09aT8wOjE7cmV0dXJuIGxbdV0hPT1jW3VdfXJldHVybiBNYXRoLmZsb29yKHIvdCktTWF0aC5mbG9vcihlL3QpPi4xfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPWUuYzJkKHQsaSxyKS5zcGxpdCgiLSIpO3JldHVybiIiPT09blswXSYmKG4udW5zaGlmdCgpLG5bMF09Ii0iK25bMF0pLG59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIHMsbCxjPS0xLjEqZSxoPS0uMSplLHA9dC1oLGQ9clswXSxnPXJbMV0sdj1NYXRoLm1pbihmKGQraCxkK3AsbixhKSxmKGcraCxnK3AsbixhKSksbT1NYXRoLm1pbihmKGQrYyxkK2gsbixhKSxmKGcrYyxnK2gsbixhKSk7aWYodj5tJiZtPE1hdGguYWJzKGctZCkvNGUzPyhzPXYsbD0hMSk6KHM9TWF0aC5taW4odixtKSxsPSEwKSwiZGF0ZSI9PT1uLnR5cGUmJnM+byl7dmFyIHk9cz09PWk/MTo2LHg9cz09PWk/Ik0xMiI6Ik0xIjtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbz1uLmMyZChlLGksYSkscz1vLmluZGV4T2YoIi0iLHkpO3M+MCYmKG89by5zdWJzdHIoMCxzKSk7dmFyIGM9bi5kMmMobywwLGEpO2lmKGM8ZSl7dmFyIGY9dShjLHgsITEsYSk7KGMrZikvMjxlK3QmJihjPWYpfXJldHVybiByJiZsP3UoYyx4LCEwLGEpOmN9fXJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXMqTWF0aC5yb3VuZChlL3MpO3JldHVybiBuK3MvMTA8ZSYmbisuOSpzPGUrdCYmKG4rPXMpLHImJmwmJihuLT1zKSxufX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4fV0sOTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIikscz10KCIuL2Jpbl9mdW5jdGlvbnMiKSxsPXQoIi4vbm9ybV9mdW5jdGlvbnMiKSxjPXQoIi4vYXZlcmFnZSIpLHU9dCgiLi9iaW5fbGFiZWxfdmFscyIpO2Z1bmN0aW9uIGYodCxlLHIsbyxzKXt2YXIgbCxjLHUsaCxwLGQsZyx2PW8rImJpbnMiLG09dC5fZnVsbExheW91dCx5PSJvdmVybGF5Ij09PW0uYmFybW9kZSx4PSJkYXRlIj09PXIudHlwZT9mdW5jdGlvbih0KXtyZXR1cm4gdHx8MD09PXQ/aS5jbGVhbkRhdGUodCxudWxsLHIuY2FsZW5kYXIpOm51bGx9OmZ1bmN0aW9uKHQpe3JldHVybiBuKHQpP051bWJlcih0KTpudWxsfTtmdW5jdGlvbiBiKHQsZSxyKXtlW3QrIkZvdW5kIl0/KGVbdF09eChlW3RdKSxudWxsPT09ZVt0XSYmKGVbdF09clt0XSkpOihkW3RdPWVbdF09clt0XSxpLm5lc3RlZFByb3BlcnR5KGNbMF0sdisiLiIrdCkuc2V0KHJbdF0pKX12YXIgXz1tLl9oaXN0b2dyYW1CaW5PcHRzW2UuX2dyb3VwTmFtZV07aWYoZS5fYXV0b0JpbkZpbmlzaGVkKWRlbGV0ZSBlLl9hdXRvQmluRmluaXNoZWQ7ZWxzZXtjPV8udHJhY2VzO3ZhciB3PV8uc2l6ZUZvdW5kLGs9W107ZD1jWzBdLl9hdXRvQmluPXt9O3ZhciBUPSEwO2ZvcihsPTA7bDxjLmxlbmd0aDtsKyspKHU9Y1tsXSkudmlzaWJsZSYmKHA9dS5fcG9zMD1yLm1ha2VDYWxjZGF0YSh1LG8pLGs9aS5jb25jYXQoayxwKSxkZWxldGUgdS5fYXV0b0JpbkZpbmlzaGVkLCEwPT09ZS52aXNpYmxlJiYoVD9UPSExOihkZWxldGUgdS5fYXV0b0Jpbix1Ll9hdXRvQmluRmluaXNoZWQ9MSkpKTtoPWNbMF1bbysiY2FsZW5kYXIiXTt2YXIgQT1hLmF1dG9CaW4oayxyLF8ubmJpbnMsITEsaCx3JiZfLnNpemUpO2lmKHkmJjA9PT1BLl9kYXRhU3BhbiYmImNhdGVnb3J5IiE9PXIudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09ci50eXBlKXtpZihzKXJldHVybltBLHAsITBdO0E9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT1lLm9yaWVudGF0aW9uLGE9W10sbz10Ll9mdWxsRGF0YSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Imhpc3RvZ3JhbSI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLm9yaWVudGF0aW9uPT09aSYmbC54YXhpcz09PXImJmwueWF4aXM9PT1uJiZhLnB1c2gobCl9cmV0dXJuIGF9KHQsZSksYz0hMSx1PTEvMCxoPVtlXTtmb3Iobz0wO288bC5sZW5ndGg7bysrKWlmKChzPWxbb10pPT09ZSljPSEwO2Vsc2UgaWYoYyl7dmFyIHA9Zih0LHMscixuLCEwKSxkPXBbMF0sZz1wWzJdO3MuX2F1dG9CaW5GaW5pc2hlZD0xLHMuX3BvczA9cFsxXSxnP2gucHVzaChzKTp1PU1hdGgubWluKHUsZC5zaXplKX1lbHNlIHU9TWF0aC5taW4odSxzW2FdLnNpemUpO3ZhciB2PW5ldyBBcnJheShoLmxlbmd0aCk7Zm9yKG89MDtvPGgubGVuZ3RoO28rKylmb3IodmFyIG09aFtvXS5fcG9zMCx5PTA7eTxtLmxlbmd0aDt5KyspaWYodm9pZCAwIT09bVt5XSl7dltvXT1tW3ldO2JyZWFrfWlzRmluaXRlKHUpfHwodT1pLmRpc3RpbmN0VmFscyh2KS5taW5EaWZmKTtmb3Iobz0wO288aC5sZW5ndGg7bysrKXt2YXIgeD0ocz1oW29dKVtuKyJjYWxlbmRhciJdO3MuX2lucHV0W2FdPXNbYV09e3N0YXJ0OnIuYzJyKHZbb10tdS8yLDAseCksZW5kOnIuYzJyKHZbb10rdS8yLDAseCksc2l6ZTp1fX1yZXR1cm4gZVthXX0odCxlLHIsbyx2KX0oZz11LmN1bXVsYXRpdmUpLmVuYWJsZWQmJiJpbmNsdWRlIiE9PWcuY3VycmVudGJpbiYmKCJkZWNyZWFzaW5nIj09PWcuZGlyZWN0aW9uP0Euc3RhcnQ9ci5jMnIoYS50aWNrSW5jcmVtZW50KHIucjJjKEEuc3RhcnQsMCxoKSxBLnNpemUsITAsaCkpOkEuZW5kPXIuYzJyKGEudGlja0luY3JlbWVudChyLnIyYyhBLmVuZCwwLGgpLEEuc2l6ZSwhMSxoKSkpLF8uc2l6ZT1BLnNpemUsd3x8KGQuc2l6ZT1BLnNpemUsaS5uZXN0ZWRQcm9wZXJ0eShjWzBdLHYrIi5zaXplIikuc2V0KEEuc2l6ZSkpLGIoInN0YXJ0IixfLEEpLGIoImVuZCIsXyxBKX1wPWUuX3BvczAsZGVsZXRlIGUuX3BvczA7dmFyIE09ZS5faW5wdXRbdl18fHt9LFM9aS5leHRlbmRGbGF0KHt9LF8pLEU9Xy5zdGFydCxDPXIucjJsKE0uc3RhcnQpLEw9dm9pZCAwIT09QztpZigoXy5zdGFydEZvdW5kfHxMKSYmQyE9PXIucjJsKEUpKXt2YXIgej1MP0M6aS5hZ2dOdW1zKE1hdGgubWluLG51bGwscCksTz17dHlwZToiY2F0ZWdvcnkiPT09ci50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1yLnR5cGU/ImxpbmVhciI6ci50eXBlLHIybDpyLnIybCxkdGljazpfLnNpemUsdGljazA6RSxjYWxlbmRhcjpoLHJhbmdlOlt6LGEudGlja0luY3JlbWVudCh6LF8uc2l6ZSwhMSxoKV0ubWFwKHIubDJyKX0sST1hLnRpY2tGaXJzdChPKTtJPnIucjJsKHopJiYoST1hLnRpY2tJbmNyZW1lbnQoSSxfLnNpemUsITAsaCkpLFMuc3RhcnQ9ci5sMnIoSSksTHx8aS5uZXN0ZWRQcm9wZXJ0eShlLHYrIi5zdGFydCIpLnNldChTLnN0YXJ0KX12YXIgRD1fLmVuZCxQPXIucjJsKE0uZW5kKSxSPXZvaWQgMCE9PVA7aWYoKF8uZW5kRm91bmR8fFIpJiZQIT09ci5yMmwoRCkpe3ZhciBGPVI/UDppLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxwKTtTLmVuZD1yLmwycihGKSxSfHxpLm5lc3RlZFByb3BlcnR5KGUsdisiLnN0YXJ0Iikuc2V0KFMuZW5kKX12YXIgQj0iYXV0b2JpbiIrbztyZXR1cm4hMT09PWUuX2lucHV0W0JdJiYoZS5faW5wdXRbdl09aS5leHRlbmRGbGF0KHt9LGVbdl18fHt9KSxkZWxldGUgZS5faW5wdXRbQl0sZGVsZXRlIGVbQl0pLFtTLHBdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEwPT09ZS52aXNpYmxlKXt2YXIgcixoLHAsZCxnPVtdLHY9W10sbT1hLmdldEZyb21JZCh0LCJoIj09PWUub3JpZW50YXRpb24/ZS55YXhpc3x8InkiOmUueGF4aXN8fCJ4IikseT0iaCI9PT1lLm9yaWVudGF0aW9uPyJ5IjoieCIseD17eDoieSIseToieCJ9W3ldLGI9ZVt5KyJjYWxlbmRhciJdLF89ZS5jdW11bGF0aXZlLHc9Zih0LGUsbSx5KSxrPXdbMF0sVD13WzFdLEE9InN0cmluZyI9PXR5cGVvZiBrLnNpemUsTT1bXSxTPUE/TTprLEU9W10sQz1bXSxMPVtdLHo9MCxPPWUuaGlzdG5vcm0sST1lLmhpc3RmdW5jLEQ9LTEhPT1PLmluZGV4T2YoImRlbnNpdHkiKTtfLmVuYWJsZWQmJkQmJihPPU8ucmVwbGFjZSgvID9kZW5zaXR5JC8sIiIpLEQ9ITEpO3ZhciBQLFI9Im1heCI9PT1JfHwibWluIj09PUk/bnVsbDowLEY9cy5jb3VudCxCPWxbT10sTj0hMSxqPWZ1bmN0aW9uKHQpe3JldHVybiBtLnIyYyh0LDAsYil9O2ZvcihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZVt4XSkmJiJjb3VudCIhPT1JJiYoUD1lW3hdLE49ImF2ZyI9PT1JLEY9c1tJXSkscj1qKGsuc3RhcnQpLHA9aihrLmVuZCkrKHItYS50aWNrSW5jcmVtZW50KHIsay5zaXplLCExLGIpKS8xZTY7cjxwJiZnLmxlbmd0aDwxZTYmJihoPWEudGlja0luY3JlbWVudChyLGsuc2l6ZSwhMSxiKSxnLnB1c2goKHIraCkvMiksdi5wdXNoKFIpLEwucHVzaChbXSksTS5wdXNoKHIpLEQmJkUucHVzaCgxLyhoLXIpKSxOJiZDLnB1c2goMCksIShoPD1yKSk7KXI9aDtNLnB1c2gociksQXx8ImRhdGUiIT09bS50eXBlfHwoUz17c3RhcnQ6aihTLnN0YXJ0KSxlbmQ6aihTLmVuZCksc2l6ZTpTLnNpemV9KTt2YXIgVixVPXYubGVuZ3RoLHE9ITAsSD0xLzAsRz0xLzAsWT17fTtmb3Iocj0wO3I8VC5sZW5ndGg7cisrKXt2YXIgVz1UW3JdOyhkPWkuZmluZEJpbihXLFMpKT49MCYmZDxVJiYoeis9RihkLHIsdixQLEMpLHEmJkxbZF0ubGVuZ3RoJiZXIT09VFtMW2RdWzBdXSYmKHE9ITEpLExbZF0ucHVzaChyKSxZW3JdPWQsSD1NYXRoLm1pbihILFctTVtkXSksRz1NYXRoLm1pbihHLE1bZCsxXS1XKSl9cXx8KFY9dShILEcsTSxtLGIpKSxOJiYoej1jKHYsQykpLEImJkIodix6LEUpLF8uZW5hYmxlZCYmZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKGUpe2E9dFtlXSx0W2VdLz0yfWZ1bmN0aW9uIHMoZSl7aT10W2VdLHRbZV09YStpLzIsYSs9aX1pZigiaGFsZiI9PT1yKWlmKCJpbmNyZWFzaW5nIj09PWUpZm9yKG8oMCksbj0xO248dC5sZW5ndGg7bisrKXMobik7ZWxzZSBmb3Iobyh0Lmxlbmd0aC0xKSxuPXQubGVuZ3RoLTI7bj49MDtuLS0pcyhuKTtlbHNlIGlmKCJpbmNyZWFzaW5nIj09PWUpe2ZvcihuPTE7bjx0Lmxlbmd0aDtuKyspdFtuXSs9dFtuLTFdOyJleGNsdWRlIj09PXImJih0LnVuc2hpZnQoMCksdC5wb3AoKSl9ZWxzZXtmb3Iobj10Lmxlbmd0aC0yO24+PTA7bi0tKXRbbl0rPXRbbisxXTsiZXhjbHVkZSI9PT1yJiYodC5wdXNoKDApLHQuc2hpZnQoKSl9fSh2LF8uZGlyZWN0aW9uLF8uY3VycmVudGJpbik7dmFyIFg9TWF0aC5taW4oZy5sZW5ndGgsdi5sZW5ndGgpLFo9W10sJD0wLEo9WC0xO2ZvcihyPTA7cjxYO3IrKylpZih2W3JdKXskPXI7YnJlYWt9Zm9yKHI9WC0xO3I+PSQ7ci0tKWlmKHZbcl0pe0o9cjticmVha31mb3Iocj0kO3I8PUo7cisrKWlmKG4oZ1tyXSkmJm4odltyXSkpe3ZhciBLPXtwOmdbcl0sczp2W3JdLGI6MH07Xy5lbmFibGVkfHwoSy5wdHM9TFtyXSxxP0sucGgwPUsucGgxPUxbcl0ubGVuZ3RoP1RbTFtyXVswXV06Z1tyXTooSy5waDA9VihNW3JdKSxLLnBoMT1WKE1bcisxXSwhMCkpKSxaLnB1c2goSyl9cmV0dXJuIDE9PT1aLmxlbmd0aCYmKFpbMF0ud2lkdGgxPWEudGlja0luY3JlbWVudChaWzBdLnAsay5zaXplLCExLGIpLVpbMF0ucCksbyhaLGUpLGkuaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSYmaS50YWdTZWxlY3RlZChaLGUsWSksWn19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo4MzgsIi4vYXZlcmFnZSI6OTY3LCIuL2Jpbl9mdW5jdGlvbnMiOjk2OSwiLi9iaW5fbGFiZWxfdmFscyI6OTcwLCIuL25vcm1fZnVuY3Rpb25zIjo5NzgsImZhc3QtaXNudW1lcmljIjoyMjF9XSw5NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOlsiYmluTnVtYmVyIl19fSx7fV0sOTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9bi5uZXN0ZWRQcm9wZXJ0eSxhPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKS5nZXRBeGlzR3JvdXAscz10KCIuL2F0dHJpYnV0ZXMiKSxsPXt4Olt7YVN0cjoieGJpbnMuc3RhcnQiLG5hbWU6InN0YXJ0In0se2FTdHI6InhiaW5zLmVuZCIsbmFtZToiZW5kIn0se2FTdHI6InhiaW5zLnNpemUiLG5hbWU6InNpemUifSx7YVN0cjoibmJpbnN4IixuYW1lOiJuYmlucyJ9XSx5Olt7YVN0cjoieWJpbnMuc3RhcnQiLG5hbWU6InN0YXJ0In0se2FTdHI6InliaW5zLmVuZCIsbmFtZToiZW5kIn0se2FTdHI6InliaW5zLnNpemUiLG5hbWU6InNpemUifSx7YVN0cjoibmJpbnN5IixuYW1lOiJuYmlucyJ9XX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1LGYsaCxwLGQsZz1lLl9oaXN0b2dyYW1CaW5PcHRzPXt9LHY9Im92ZXJsYXkiPT09ZS5iYXJtb2RlO2Z1bmN0aW9uIG0odCl7cmV0dXJuIG4uY29lcmNlKHUuX2lucHV0LHUscyx0KX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKSJoaXN0b2dyYW0iPT09KHU9dFtyXSkudHlwZSYmKGRlbGV0ZSB1Ll9hdXRvQmluRmluaXNoZWQsaD0idiI9PT11Lm9yaWVudGF0aW9uPyJ4IjoieSIsKGQ9Z1twPXUuX2dyb3VwTmFtZT12P3UudWlkOm8oZSx1LnhheGlzKStvKGUsdS55YXhpcykraF0pP2QudHJhY2VzLnB1c2godSk6ZD1nW3BdPXt0cmFjZXM6W3VdLGRpcmVjdGlvbjpofSxhKHUuX2lucHV0LHUsZSxtKSk7Zm9yKHAgaW4gZyl7aD0oZD1nW3BdKS5kaXJlY3Rpb247dmFyIHk9bFtoXTtmb3IoYz0wO2M8eS5sZW5ndGg7YysrKXt2YXIgeD15W2NdLGI9eC5uYW1lO2lmKCJuYmlucyIhPT1ifHwhZC5zaXplRm91bmQpe3ZhciBfPXguYVN0cjtmb3Iocj0wO3I8ZC50cmFjZXMubGVuZ3RoO3IrKyl7aWYoZj0odT1kLnRyYWNlc1tyXSkuX2lucHV0LHZvaWQgMCE9PWkoZixfKS5nZXQoKSl7ZFtiXT1tKF8pLGRbYisiRm91bmQiXT0hMDticmVha312YXIgdz11Ll9hdXRvQmluO3cmJndbYl0mJmkodSxfKS5zZXQod1tiXSl9aWYoInN0YXJ0Ij09PWJ8fCJlbmQiPT09Yilmb3IoO3I8ZC50cmFjZXMubGVuZ3RoO3IrKyltKF8sKCh1PWQudHJhY2VzW3JdKS5fYXV0b0Jpbnx8e30pW2JdKTsibmJpbnMiIT09Ynx8ZC5zaXplRm91bmR8fGQubmJpbnNGb3VuZHx8KHU9ZC50cmFjZXNbMF0sZFtiXT1tKF8pKX19fX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi9iYXIvZGVmYXVsdHMiOjg0MywiLi9hdHRyaWJ1dGVzIjo5NjZ9XSw5NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUscyxyLG4pfXZhciB1PWMoIngiKSxmPWMoInkiKTtjKCJjdW11bGF0aXZlLmVuYWJsZWQiKSYmKGMoImN1bXVsYXRpdmUuZGlyZWN0aW9uIiksYygiY3VtdWxhdGl2ZS5jdXJyZW50YmluIikpLGMoInRleHQiKSxjKCJob3ZlcnRleHQiKSxjKCJob3ZlcnRlbXBsYXRlIik7dmFyIGg9Yygib3JpZW50YXRpb24iLGYmJiF1PyJoIjoidiIpLHA9InYiPT09aD8ieCI6InkiLGQ9InYiPT09aD8ieSI6IngiLGc9dSYmZj9NYXRoLm1pbihpLm1pblJvd0xlbmd0aCh1KSYmaS5taW5Sb3dMZW5ndGgoZikpOmkubWluUm93TGVuZ3RoKGVbcF18fFtdKTtpZihnKXtlLl9sZW5ndGg9ZyxuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0sbCksZVtkXSYmYygiaGlzdGZ1bmMiKSxjKCJoaXN0bm9ybSIpLGMoImF1dG9iaW4iK3ApLG8odCxlLGMscixsKSxpLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxjKTt2YXIgdj0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yLG09bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN1cHBseURlZmF1bHRzIik7bSh0LGUsdnx8YS5kZWZhdWx0TGluZSx7YXhpczoieSJ9KSxtKHQsZSx2fHxhLmRlZmF1bHRMaW5lLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiOjg1MywiLi9hdHRyaWJ1dGVzIjo5NjZ9XSw5NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodC54PSJ4VmFsImluIGU/ZS54VmFsOmUueCx0Lnk9InlWYWwiaW4gZT9lLnlWYWw6ZS55LCJ6TGFiZWxWYWwiaW4gZSYmKHQuej1lLnpMYWJlbFZhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksIShyLmN1bXVsYXRpdmV8fHt9KS5lbmFibGVkKXt2YXIgYSxvPUFycmF5LmlzQXJyYXkoaSk/blswXS5wdHNbaVswXV1baVsxXV06bltpXS5wdHM7aWYodC5wb2ludE51bWJlcnM9byx0LmJpbk51bWJlcj10LnBvaW50TnVtYmVyLGRlbGV0ZSB0LnBvaW50TnVtYmVyLGRlbGV0ZSB0LnBvaW50SW5kZXgsci5faW5kZXhUb1BvaW50cyl7YT1bXTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKylhPWEuY29uY2F0KHIuX2luZGV4VG9Qb2ludHNbb1tzXV0pfWVsc2UgYT1vO3QucG9pbnRJbmRpY2VzPWF9cmV0dXJuIHR9fSx7fV0sOTc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9ob3ZlciIpLmhvdmVyUG9pbnRzLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvKXt2YXIgcz0odD1vWzBdKS5jZFt0LmluZGV4XSxsPXQuY2RbMF0udHJhY2U7aWYoIWwuY3VtdWxhdGl2ZS5lbmFibGVkKXt2YXIgYz0iaCI9PT1sLm9yaWVudGF0aW9uPyJ5IjoieCI7dFtjKyJMYWJlbCJdPWkodFtjKyJhIl0scy5waDAscy5waDEpfXJldHVybiBsLmhvdmVybXBsYXRlJiYodC5ob3ZlcnRlbXBsYXRlPWwuaG92ZXJ0ZW1wbGF0ZSksb319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL2Jhci9ob3ZlciI6ODQ1fV0sOTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLmxheW91dEF0dHJpYnV0ZXM9dCgiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jcm9zc1RyYWNlRGVmYXVsdHM9dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi4vYmFyL2xheW91dF9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmNyb3NzVHJhY2VDYWxjPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsbi5wbG90PXQoIi4uL2Jhci9wbG90Iiksbi5sYXllck5hbWU9ImJhcmxheWVyIixuLnN0eWxlPXQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KCIuLi9iYXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuLi9iYXIvc2VsZWN0Iiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoaXN0b2dyYW0iLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwiYmFyIiwiaGlzdG9ncmFtIiwib3JpZW50ZWQiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIjo4NDIsIi4uL2Jhci9sYXlvdXRfYXR0cmlidXRlcyI6ODQ3LCIuLi9iYXIvbGF5b3V0X2RlZmF1bHRzIjo4NDgsIi4uL2Jhci9wbG90Ijo4NDksIi4uL2Jhci9zZWxlY3QiOjg1MCwiLi4vYmFyL3N0eWxlIjo4NTIsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuL2F0dHJpYnV0ZXMiOjk2NiwiLi9jYWxjIjo5NzEsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjk3MywiLi9kZWZhdWx0cyI6OTc0LCIuL2V2ZW50X2RhdGEiOjk3NSwiLi9ob3ZlciI6OTc2fV0sOTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17cGVyY2VudDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTEwMC9lLGk9MDtpPHI7aSsrKXRbaV0qPW59LHByb2JhYmlsaXR5OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MDtuPHI7bisrKXRbbl0vPWV9LGRlbnNpdHk6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7bj1ufHwxO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXSpufSwicHJvYmFiaWxpdHkgZGVuc2l0eSI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7biYmKGUvPW4pO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXS9lfX19LHt9XSw5Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlcyIpLGE9dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWMoe3g6bi54LHk6bi55LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOntjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGhpc3Rub3JtOm4uaGlzdG5vcm0saGlzdGZ1bmM6bi5oaXN0ZnVuYyxuYmluc3g6bi5uYmluc3gseGJpbnM6aSgieCIpLG5iaW5zeTpuLm5iaW5zeSx5YmluczppKCJ5IiksYXV0b2Jpbng6bi5hdXRvYmlueCxhdXRvYmlueTpuLmF1dG9iaW55LHhnYXA6YS54Z2FwLHlnYXA6YS55Z2FwLHpzbW9vdGg6YS56c21vb3RoLHpob3ZlcmZvcm1hdDphLnpob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOm8oe30se2tleXM6InoifSl9LHMoIiIse2NMZXR0ZXI6InoiLGF1dG9Db2xvckRmbHQ6ITF9KSx7Y29sb3JiYXI6bH0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6OTQ4LCIuLi9oaXN0b2dyYW0vYXR0cmlidXRlcyI6OTY2LCIuLi9oaXN0b2dyYW0vYmluX2F0dHJpYnV0ZXMiOjk2OH1dLDk4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9ucyIpLG89dCgiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIikscz10KCIuLi9oaXN0b2dyYW0vYXZlcmFnZSIpLGw9dCgiLi4vaGlzdG9ncmFtL2Jpbl9sYWJlbF92YWxzIik7ZnVuY3Rpb24gYyh0LGUscixhLG8scyxsKXt2YXIgYz1lKyJiaW5zIix1PXRbY107dXx8KHU9dFtjXT17fSk7dmFyIGY9dC5faW5wdXRbY118fHt9LGg9dC5fYXV0b0Jpbj17fTtmLnNpemV8fGRlbGV0ZSB1LnNpemUsdm9pZCAwPT09Zi5zdGFydCYmZGVsZXRlIHUuc3RhcnQsdm9pZCAwPT09Zi5lbmQmJmRlbGV0ZSB1LmVuZDt2YXIgcD0hdS5zaXplLGQ9dm9pZCAwPT09dS5zdGFydCxnPXZvaWQgMD09PXUuZW5kO2lmKHB8fGR8fGcpe3ZhciB2PWkuYXV0b0JpbihyLGEsdFsibmJpbnMiK2VdLCIyZCIsbCx1LnNpemUpOyJoaXN0b2dyYW0yZGNvbnRvdXIiPT09dC50eXBlJiYoZCYmKHYuc3RhcnQ9cyhpLnRpY2tJbmNyZW1lbnQobyh2LnN0YXJ0KSx2LnNpemUsITAsbCkpKSxnJiYodi5lbmQ9cyhpLnRpY2tJbmNyZW1lbnQobyh2LmVuZCksdi5zaXplLCExLGwpKSkpLHAmJih1LnNpemU9aC5zaXplPXYuc2l6ZSksZCYmKHUuc3RhcnQ9aC5zdGFydD12LnN0YXJ0KSxnJiYodS5lbmQ9aC5lbmQ9di5lbmQpfXZhciBtPSJhdXRvYmluIitlOyExPT09dC5faW5wdXRbbV0mJih0Ll9pbnB1dFtjXT1uLmV4dGVuZEZsYXQoe30sdSksZGVsZXRlIHQuX2lucHV0W21dLGRlbGV0ZSB0W21dKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KHQpO2lmKG4pZm9yKGk9MDtpPHQ7aSsrKWFbaV09MS8oZVtpKzFdLWVbaV0pO2Vsc2V7dmFyIG89MS9yO2ZvcihpPTA7aTx0O2krKylhW2ldPW99cmV0dXJuIGF9ZnVuY3Rpb24gZih0LGUpe3JldHVybntzdGFydDp0KGUuc3RhcnQpLGVuZDp0KGUuZW5kKSxzaXplOmUuc2l6ZX19ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIG8scz10Lmxlbmd0aC0xLGM9bmV3IEFycmF5KHMpO2lmKGUpZm9yKG89MDtvPHM7bysrKWNbb109W2Vbb10sZVtvXV07ZWxzZXt2YXIgdT1sKHIsbix0LGksYSk7Zm9yKG89MDtvPHM7bysrKWNbb109W3UodFtvXSksdSh0W28rMV0sITApXX1yZXR1cm4gY31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLHAsZCxnPWkuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSx2PWUueD9nLm1ha2VDYWxjZGF0YShlLCJ4Iik6W10sbT1pLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IikseT1lLnk/bS5tYWtlQ2FsY2RhdGEoZSwieSIpOltdLHg9ZS54Y2FsZW5kYXIsYj1lLnljYWxlbmRhcixfPWZ1bmN0aW9uKHQpe3JldHVybiBnLnIyYyh0LDAseCl9LHc9ZnVuY3Rpb24odCl7cmV0dXJuIG0ucjJjKHQsMCxiKX0saz1mdW5jdGlvbih0KXtyZXR1cm4gZy5jMnIodCwwLHgpfSxUPWZ1bmN0aW9uKHQpe3JldHVybiBtLmMycih0LDAsYil9LEE9ZS5fbGVuZ3RoO3YubGVuZ3RoPkEmJnYuc3BsaWNlKEEsdi5sZW5ndGgtQSkseS5sZW5ndGg+QSYmeS5zcGxpY2UoQSx5Lmxlbmd0aC1BKSxjKGUsIngiLHYsZyxfLGsseCksYyhlLCJ5Iix5LG0sdyxULGIpO3ZhciBNPVtdLFM9W10sRT1bXSxDPSJzdHJpbmciPT10eXBlb2YgZS54Ymlucy5zaXplLEw9InN0cmluZyI9PXR5cGVvZiBlLnliaW5zLnNpemUsej1bXSxPPVtdLEk9Qz96OmUueGJpbnMsRD1MP086ZS55YmlucyxQPTAsUj1bXSxGPVtdLEI9ZS5oaXN0bm9ybSxOPWUuaGlzdGZ1bmMsaj0tMSE9PUIuaW5kZXhPZigiZGVuc2l0eSIpLFY9Im1heCI9PT1OfHwibWluIj09PU4/bnVsbDowLFU9YS5jb3VudCxxPW9bQl0sSD0hMSxHPVtdLFk9W10sVz0ieiJpbiBlP2UuejoibWFya2VyImluIGUmJkFycmF5LmlzQXJyYXkoZS5tYXJrZXIuY29sb3IpP2UubWFya2VyLmNvbG9yOiIiO1cmJiJjb3VudCIhPT1OJiYoSD0iYXZnIj09PU4sVT1hW05dKTt2YXIgWD1lLnhiaW5zLFo9XyhYLnN0YXJ0KSwkPV8oWC5lbmQpKyhaLWkudGlja0luY3JlbWVudChaLFguc2l6ZSwhMSx4KSkvMWU2O2ZvcihyPVo7cjwkO3I9aS50aWNrSW5jcmVtZW50KHIsWC5zaXplLCExLHgpKVMucHVzaChWKSx6LnB1c2gociksSCYmRS5wdXNoKDApO3oucHVzaChyKTt2YXIgSj1TLmxlbmd0aCxLPV8oZS54Ymlucy5zdGFydCksUT0oci1LKS9KLHR0PWsoSytRLzIpO2ZvcihaPXcoKFg9ZS55Ymlucykuc3RhcnQpLCQ9dyhYLmVuZCkrKFotaS50aWNrSW5jcmVtZW50KFosWC5zaXplLCExLGIpKS8xZTYscj1aO3I8JDtyPWkudGlja0luY3JlbWVudChyLFguc2l6ZSwhMSxiKSl7TS5wdXNoKFMuc2xpY2UoKSksTy5wdXNoKHIpO3ZhciBldD1uZXcgQXJyYXkoSik7Zm9yKGw9MDtsPEo7bCsrKWV0W2xdPVtdO0YucHVzaChldCksSCYmUi5wdXNoKEUuc2xpY2UoKSl9Ty5wdXNoKHIpO3ZhciBydD1NLmxlbmd0aCxudD13KGUueWJpbnMuc3RhcnQpLGl0PShyLW50KS9ydCxhdD1UKG50K2l0LzIpO2omJihHPXUoUy5sZW5ndGgsSSxRLEMpLFk9dShNLmxlbmd0aCxELGl0LEwpKSxDfHwiZGF0ZSIhPT1nLnR5cGV8fChJPWYoXyxJKSksTHx8ImRhdGUiIT09bS50eXBlfHwoRD1mKHcsRCkpO3ZhciBvdD0hMCxzdD0hMCxsdD1uZXcgQXJyYXkoSiksY3Q9bmV3IEFycmF5KHJ0KSx1dD0xLzAsZnQ9MS8wLGh0PTEvMCxwdD0xLzA7Zm9yKHI9MDtyPEE7cisrKXt2YXIgZHQ9dltyXSxndD15W3JdO3A9bi5maW5kQmluKGR0LEkpLGQ9bi5maW5kQmluKGd0LEQpLHA+PTAmJnA8SiYmZD49MCYmZDxydCYmKFArPVUocCxyLE1bZF0sVyxSW2RdKSxGW2RdW3BdLnB1c2gociksb3QmJih2b2lkIDA9PT1sdFtwXT9sdFtwXT1kdDpsdFtwXSE9PWR0JiYob3Q9ITEpKSxzdCYmKHZvaWQgMD09PWN0W3BdP2N0W3BdPWd0OmN0W3BdIT09Z3QmJihzdD0hMSkpLHV0PU1hdGgubWluKHV0LGR0LXpbcF0pLGZ0PU1hdGgubWluKGZ0LHpbcCsxXS1kdCksaHQ9TWF0aC5taW4oaHQsZ3QtT1tkXSkscHQ9TWF0aC5taW4ocHQsT1tkKzFdLWd0KSl9aWYoSClmb3IoZD0wO2Q8cnQ7ZCsrKVArPXMoTVtkXSxSW2RdKTtpZihxKWZvcihkPTA7ZDxydDtkKyspcShNW2RdLFAsRyxZW2RdKTtyZXR1cm57eDp2LHhSYW5nZXM6aCh6LG90JiZsdCx1dCxmdCxnLHgpLHgwOnR0LGR4OlEseTp5LHlSYW5nZXM6aChPLHN0JiZjdCxodCxwdCxtLGIpLHkwOmF0LGR5Oml0LHo6TSxwdHM6Rn19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9oaXN0b2dyYW0vYXZlcmFnZSI6OTY3LCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9ucyI6OTY5LCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHMiOjk3MCwiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIjo5Nzh9XSw5ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD1bIngiLCJ5Il07ZnVuY3Rpb24gYyh0LGUscixzKXt2YXIgbD1yW2EuaWQybmFtZSh0W2UrImF4aXMiXSldLnR5cGUsYz1lKyJiaW5zIix1PXRbY10sZj10W2UrImNhbGVuZGFyIl07dXx8KHU9dFtjXT17fSk7dmFyIGg9ImRhdGUiPT09bD9mdW5jdGlvbih0LGUpe3JldHVybiB0fHwwPT09dD9vLmNsZWFuRGF0ZSh0LGksZik6ZX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KT9OdW1iZXIodCk6ZX07dS5zdGFydD1oKHUuc3RhcnQscy5zdGFydCksdS5lbmQ9aCh1LmVuZCxzLmVuZCk7dmFyIHA9cy5zaXplLGQ9dS5zaXplO2lmKG4oZCkpdS5zaXplPWQ+MD9OdW1iZXIoZCk6cDtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZCl1LnNpemU9cDtlbHNle3ZhciBnPWQuY2hhckF0KDApLHY9ZC5zdWJzdHIoMSk7KCh2PW4odik/TnVtYmVyKHYpOjApPD0wfHwiZGF0ZSIhPT1sfHwiTSIhPT1nfHx2IT09TWF0aC5yb3VuZCh2KSkmJih1LnNpemU9cCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhO2Z1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29lcmNlKGkuX2lucHV0LGkscyx0KX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgZj0oaT10W3JdKS50eXBlO2lmKCJoaXN0b2dyYW0yZCI9PT1mfHwiaGlzdG9ncmFtMmRjb250b3VyIj09PWYpZm9yKG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGg9KGE9bFtuXSkrImJpbnMiLHA9KGkuX2F1dG9CaW58fHt9KVthXXx8e307dShoKyIuc3RhcnQiLHAuc3RhcnQpLHUoaCsiLmVuZCIscC5lbmQpLHUoaCsiLnNpemUiLHAuc2l6ZSksYyhpLGEsZSxwKSwoaVtoXXx8e30pLnNpemV8fHUoIm5iaW5zIithKX19fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi9hdHRyaWJ1dGVzIjo5NzksImZhc3QtaXNudW1lcmljIjoyMjF9XSw5ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWkodCxlLGMsbCksITEhPT1lLnZpc2libGUmJihhKHQsZSxjLGwpLG8odCxlLGwsYyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSksYygiaG92ZXJ0ZW1wbGF0ZSIpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo1ODcsIi4uLy4uL2xpYiI6NzAwLCIuLi9oZWF0bWFwL3N0eWxlX2RlZmF1bHRzIjo5NjEsIi4vYXR0cmlidXRlcyI6OTc5LCIuL3NhbXBsZV9kZWZhdWx0cyI6OTg1fV0sOTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvaG92ZXIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD1uKHQsZSxyLGEsbyxzKTtpZihsKXt2YXIgYz0odD1sWzBdKS5pbmRleCx1PWNbMF0sZj1jWzFdLGg9dC5jZFswXSxwPWgueFJhbmdlc1tmXSxkPWgueVJhbmdlc1t1XTtyZXR1cm4gdC54TGFiZWw9aSh0LnhhLHBbMF0scFsxXSksdC55TGFiZWw9aSh0LnlhLGRbMF0sZFsxXSksbH19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL2hlYXRtYXAvaG92ZXIiOjk1NX1dLDk4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jcm9zc1RyYWNlRGVmYXVsdHM9dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLG4uY2FsYz10KCIuLi9oZWF0bWFwL2NhbGMiKSxuLnBsb3Q9dCgiLi4vaGVhdG1hcC9wbG90Iiksbi5sYXllck5hbWU9ImhlYXRtYXBsYXllciIsbi5jb2xvcmJhcj10KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksbi5zdHlsZT10KCIuLi9oZWF0bWFwL3N0eWxlIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGEiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9Imhpc3RvZ3JhbTJkIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwiaGlzdG9ncmFtIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuLi9oZWF0bWFwL2NhbGMiOjk0OSwiLi4vaGVhdG1hcC9jb2xvcmJhciI6OTUxLCIuLi9oZWF0bWFwL3Bsb3QiOjk1OSwiLi4vaGVhdG1hcC9zdHlsZSI6OTYwLCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YSI6OTc1LCIuL2F0dHJpYnV0ZXMiOjk3OSwiLi9jcm9zc190cmFjZV9kZWZhdWx0cyI6OTgxLCIuL2RlZmF1bHRzIjo5ODIsIi4vaG92ZXIiOjk4M31dLDk4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoIngiKSxzPXIoInkiKSxsPWkubWluUm93TGVuZ3RoKG8pLGM9aS5taW5Sb3dMZW5ndGgocyk7bCYmYz8oZS5fbGVuZ3RoPU1hdGgubWluKGwsYyksbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpLChyKCJ6Iil8fHIoIm1hcmtlci5jb2xvciIpKSYmcigiaGlzdGZ1bmMiKSxyKCJoaXN0bm9ybSIpLHIoImF1dG9iaW54IikscigiYXV0b2JpbnkiKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOX1dLDk4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt4Om4ueCx5Om4ueSx6Om4ueixtYXJrZXI6bi5tYXJrZXIsaGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLG5iaW5zeDpuLm5iaW5zeCx4YmluczpuLnhiaW5zLG5iaW5zeTpuLm5iaW5zeSx5YmluczpuLnliaW5zLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSxhdXRvY29udG91cjppLmF1dG9jb250b3VyLG5jb250b3VyczppLm5jb250b3Vycyxjb250b3VyczppLmNvbnRvdXJzLGxpbmU6aS5saW5lLHpob3ZlcmZvcm1hdDpuLnpob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZX0sYSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7Y29sb3JiYXI6b30pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2NvbnRvdXIvYXR0cmlidXRlcyI6OTE5LCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIjo5Nzl9XSw5ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oaXN0b2dyYW0yZC9zYW1wbGVfZGVmYXVsdHMiKSxhPXQoIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHMiKSxvPXQoIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKSwhMSE9PWUudmlzaWJsZSYmKGEodCxlLGMsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUscyxyKX0pLG8odCxlLGMsbCksYygiaG92ZXJ0ZW1wbGF0ZSIpKX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHMiOjkyNiwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyI6OTQwLCIuLi9oaXN0b2dyYW0yZC9zYW1wbGVfZGVmYXVsdHMiOjk4NSwiLi9hdHRyaWJ1dGVzIjo5ODZ9XSw5ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoIi4uL2hpc3RvZ3JhbTJkL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksbi5jYWxjPXQoIi4uL2NvbnRvdXIvY2FsYyIpLG4ucGxvdD10KCIuLi9jb250b3VyL3Bsb3QiKS5wbG90LG4ubGF5ZXJOYW1lPSJjb250b3VybGF5ZXIiLG4uc3R5bGU9dCgiLi4vY29udG91ci9zdHlsZSIpLG4uY29sb3JiYXI9dCgiLi4vY29udG91ci9jb2xvcmJhciIpLG4uaG92ZXJQb2ludHM9dCgiLi4vY29udG91ci9ob3ZlciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iaGlzdG9ncmFtMmRjb250b3VyIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwiY29udG91ciIsImhpc3RvZ3JhbSIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4uL2NvbnRvdXIvY2FsYyI6OTIwLCIuLi9jb250b3VyL2NvbG9yYmFyIjo5MjIsIi4uL2NvbnRvdXIvaG92ZXIiOjkzMiwiLi4vY29udG91ci9wbG90Ijo5MzcsIi4uL2NvbnRvdXIvc3R5bGUiOjkzOSwiLi4vaGlzdG9ncmFtMmQvY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjk4MSwiLi9hdHRyaWJ1dGVzIjo5ODYsIi4vZGVmYXVsdHMiOjk4N31dLDk4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLG89dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO3ZhciB1PWUuZXhwb3J0cz1jKGwoe3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHZhbHVlOnt2YWxUeXBlOiJkYXRhX2FycmF5In0saXNvbWluOnt2YWxUeXBlOiJudW1iZXIifSxpc29tYXg6e3ZhbFR5cGU6Im51bWJlciJ9LHN1cmZhY2U6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGNvdW50Ont2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjIsbWluOjF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxwYXR0ZXJuOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJBIiwiQiIsIkMiLCJEIiwiRSJdLGV4dHJhczpbImFsbCIsIm9kZCIsImV2ZW4iXSxkZmx0OiJhbGwifX0sc3BhY2VmcmFtZTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4xNX19LHNsaWNlczp7eDp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx6OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX19LGNhcHM6e3g6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0seTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx6OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19fSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMH0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMH0saG92ZXJ0ZW1wbGF0ZTphKCl9LG4oIiIse2NvbG9yQXR0cjoiYHZhbHVlYCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjppLG9wYWNpdHk6by5vcGFjaXR5LGxpZ2h0cG9zaXRpb246by5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOm8ubGlnaHRpbmcsZmxhdHNoYWRpbmc6by5mbGF0c2hhZGluZyxjb250b3VyOm8uY29udG91cixob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyl9KSwiY2FsYyIsIm5lc3RlZCIpO3UuZmxhdHNoYWRpbmcuZGZsdD0hMCx1LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbi5kZmx0PTAsdS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9dS52YWx1ZS5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsdS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiOjk5NH1dLDk5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuX2xlbj1NYXRoLm1pbihlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCxlLnZhbHVlLmxlbmd0aCk7Zm9yKHZhciByPTEvMCxpPS0xLzAsYT1lLnZhbHVlLmxlbmd0aCxvPTA7bzxhO28rKyl7dmFyIHM9ZS52YWx1ZVtvXTtyPU1hdGgubWluKHIscyksaT1NYXRoLm1heChpLHMpfWUuX21pblZhbHVlcz1yLGUuX21heFZhbHVlcz1pLGUuX3ZNaW49dm9pZCAwPT09ZS5pc29taW58fG51bGw9PT1lLmlzb21pbj9yOmUuaXNvbWluLGUuX3ZNYXg9dm9pZCAwPT09ZS5pc29tYXh8fG51bGw9PT1lLmlzb21pbj9pOmUuaXNvbWF4LG4odCxlLHt2YWxzOltlLl92TWluLGUuX3ZNYXhdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1fV0sOTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLW1lc2gzZCIpLGk9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxhPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxvPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLHM9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcy5kaXN0aW5jdFZhbHModCkudmFsc31mdW5jdGlvbiBjKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLTE7cj4wO3ItLSl7dmFyIG49TWF0aC5taW4oZVtyXSxlW3ItMV0pLGk9TWF0aC5tYXgoZVtyXSxlW3ItMV0pO2lmKGk+biYmbjx0JiZ0PD1pKXJldHVybntpZDpyLGRpc3RSYXRpbzooaS10KS8oaS1uKX19cmV0dXJue2lkOjAsZGlzdFJhdGlvOjB9fXUuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLl94W2VdLG49dGhpcy5kYXRhLl95W2VdLGk9dGhpcy5kYXRhLl96W2VdLGE9dGhpcy5kYXRhLl9Zcy5sZW5ndGgsbz10aGlzLmRhdGEuX1pzLmxlbmd0aCxzPWYocix0aGlzLmRhdGEuX1hzKS5pZCxsPWYobix0aGlzLmRhdGEuX1lzKS5pZCxjPWYoaSx0aGlzLmRhdGEuX1pzKS5pZCx1PXQuaW5kZXg9YytvKmwrbyphKnM7dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS5feFt1XSx0aGlzLmRhdGEuX3lbdV0sdGhpcy5kYXRhLl96W3VdLHRoaXMuZGF0YS52YWx1ZVt1XV07dmFyIGg9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkoaCkmJnZvaWQgMCE9PWhbdV0/dC50ZXh0TGFiZWw9aFt1XTpoJiYodC50ZXh0TGFiZWw9aCksITB9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7ZnVuY3Rpb24gbih0LGUscixuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSl9dGhpcy5kYXRhPWZ1bmN0aW9uKHQpe3QuX2k9W10sdC5faj1bXSx0Ll9rPVtdO3ZhciBlLHIsbj10LnN1cmZhY2Uuc2hvdyxpPXQuc3BhY2VmcmFtZS5zaG93LGE9dC5zdXJmYWNlLmZpbGwsbz10LnNwYWNlZnJhbWUuZmlsbCxzPSExLGM9ITEsdT0wLGg9bCh0Lnguc2xpY2UoMCx0Ll9sZW4pKSxwPWwodC55LnNsaWNlKDAsdC5fbGVuKSksZD1sKHQuei5zbGljZSgwLHQuX2xlbikpLGc9aC5sZW5ndGgsdj1wLmxlbmd0aCxtPWQubGVuZ3RoO2Z1bmN0aW9uIHkodCxlLHIpe3JldHVybiByK20qZSttKnYqdH12YXIgeCxiLF8sdyxrLFQ9dC5fbWluVmFsdWVzLEE9dC5fbWF4VmFsdWVzLE09dC5fdk1pbixTPXQuX3ZNYXg7ZnVuY3Rpb24gRSh0LGUsbil7Zm9yKHZhciBpPXcubGVuZ3RoLGE9cjthPGk7YSsrKWlmKHQ9PT14W2FdJiZlPT09YlthXSYmbj09PV9bYV0pcmV0dXJuIGE7cmV0dXJuLTF9ZnVuY3Rpb24gQygpe3I9ZX1mdW5jdGlvbiBMKCl7eD1bXSxiPVtdLF89W10sdz1bXSxlPTAsQygpfWZ1bmN0aW9uIHoodCxyLG4saSl7cmV0dXJuIHgucHVzaCh0KSxiLnB1c2gociksXy5wdXNoKG4pLHcucHVzaChpKSwrK2UtMX1mdW5jdGlvbiBPKGUscixuKXtyZXR1cm4gdC5faS5wdXNoKGUpLHQuX2oucHVzaChyKSx0Ll9rLnB1c2gobiksKyt1LTF9ZnVuY3Rpb24gSSh0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyluW2ldPXRbaV0qKDEtcikrciplW2ldO3JldHVybiBufWZ1bmN0aW9uIEQodCl7az10fWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4iYWxsIj09PXR8fG51bGw9PT10fHx0LmluZGV4T2YoZSk+LTF9ZnVuY3Rpb24gUih0LGUpe3JldHVybiBudWxsPT09dD9lOnR9ZnVuY3Rpb24gRih0LGUscil7QygpO3ZhciBuPVtlXSxpPVtyXTtpZihrPj0xKW49W2VdLGk9W3JdO2Vsc2UgaWYoaz4wKXt2YXIgYT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKW5baV09KHRbaV0rZVtpXStyW2ldKS8zO3JldHVybiBufShyLG4saSksbz1NYXRoLnNxcnQoMS1rKSxzPUkoYSxyLG8pLGw9SShhLG4sbyksYz1JKGEsaSxvKSx1PWVbMF0sZj1lWzFdLGg9ZVsyXTtyZXR1cm57eHl6djpbW3IsbixsXSxbbCxzLHJdLFtuLGksY10sW2MsbCxuXSxbaSxyLHNdLFtzLGMsaV1dLGFiYzpbW3UsZiwtMV0sWy0xLC0xLHVdLFtmLGgsLTFdLFstMSwtMSxmXSxbaCx1LC0xXSxbLTEsLTEsaF1dfX0oZSxyKTtuPWEueHl6dixpPWEuYWJjfWZvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXtlPW5bb10scj1pW29dO2Zvcih2YXIgcz1bXSxsPTA7bDwzO2wrKyl7dmFyIGM9ZVtsXVswXSx1PWVbbF1bMV0sZj1lW2xdWzJdLGg9ZVtsXVszXSxwPXJbbF0+LTE/cltsXTpFKGMsdSxmKTtzW2xdPXA+LTE/cDp6KGMsdSxmLFIodCxoKSl9TyhzWzBdLHNbMV0sc1syXSl9fWZ1bmN0aW9uIEIodCxlLHIsbil7dmFyIGk9dFszXTtpPHImJihpPXIpLGk+biYmKGk9bik7Zm9yKHZhciBhPSh0WzNdLWkpLyh0WzNdLWVbM10rMWUtOSksbz1bXSxzPTA7czw0O3MrKylvW3NdPSgxLWEpKnRbc10rYSplW3NdO3JldHVybiBvfWZ1bmN0aW9uIE4odCxlLHIpe3JldHVybiB0Pj1lJiZ0PD1yfWZ1bmN0aW9uIGoodCl7dmFyIGU9LjAwMSooUy1NKTtyZXR1cm4gdD49TS1lJiZ0PD1TK2V9ZnVuY3Rpb24gVihlKXtmb3IodmFyIHI9W10sbj0wO248NDtuKyspe3ZhciBpPWVbbl07ci5wdXNoKFt0LnhbaV0sdC55W2ldLHQueltpXSx0LnZhbHVlW2ldXSl9cmV0dXJuIHJ9dmFyIFU9MztmdW5jdGlvbiBxKHQsZSxyLG4saSxhKXthfHwoYT0xKSxyPVstMSwtMSwtMV07dmFyIG89ITEscz1bTihlWzBdWzNdLG4saSksTihlWzFdWzNdLG4saSksTihlWzJdWzNdLG4saSldO2lmKCFzWzBdJiYhc1sxXSYmIXNbMl0pcmV0dXJuITE7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBqKGVbMF1bM10pJiZqKGVbMV1bM10pJiZqKGVbMl1bM10pPyhGKHQsZSxyKSwhMCk6YTxVJiZxKHQsZSxyLE0sUywrK2EpfTtpZihzWzBdJiZzWzFdJiZzWzJdKXJldHVybiBsKHQsZSxyKXx8bzt2YXIgYz0hMTtyZXR1cm5bWzAsMSwyXSxbMiwwLDFdLFsxLDIsMF1dLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoc1thWzBdXSYmc1thWzFdXSYmIXNbYVsyXV0pe3ZhciB1PWVbYVswXV0sZj1lW2FbMV1dLGg9ZVthWzJdXSxwPUIoaCx1LG4saSksZD1CKGgsZixuLGkpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbYVswXV1dKXx8byxvPWwodCxbdSxmLGRdLFtyW2FbMF1dLHJbYVsxXV0sLTFdKXx8byxjPSEwfX0pLGM/bzooW1swLDEsMl0sWzEsMiwwXSxbMiwwLDFdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKHNbYVswXV0mJiFzW2FbMV1dJiYhc1thWzJdXSl7dmFyIHU9ZVthWzBdXSxmPWVbYVsxXV0saD1lW2FbMl1dLHA9QihmLHUsbixpKSxkPUIoaCx1LG4saSk7bz1sKHQsW2QscCx1XSxbLTEsLTEsclthWzBdXV0pfHxvLGM9ITB9fSksbyl9ZnVuY3Rpb24gSCh0LGUscixuKXt2YXIgaT0hMSxhPVYoZSksbz1bTihhWzBdWzNdLHIsbiksTihhWzFdWzNdLHIsbiksTihhWzJdWzNdLHIsbiksTihhWzNdWzNdLHIsbildO2lmKCEob1swXXx8b1sxXXx8b1syXXx8b1szXSkpcmV0dXJuIGk7aWYob1swXSYmb1sxXSYmb1syXSYmb1szXSlyZXR1cm4gYyYmKGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKG4saSxhKXtGKHQsW2Vbbl0sZVtpXSxlW2FdXSxbcltuXSxyW2ldLHJbYV1dKX07bigwLDEsMiksbigzLDAsMSksbigyLDMsMCksbigxLDIsMyl9KHQsYSxlKXx8aSksaTt2YXIgcz0hMTtyZXR1cm5bWzAsMSwyLDNdLFszLDAsMSwyXSxbMiwzLDAsMV0sWzEsMiwzLDBdXS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJm9bbFsyXV0mJiFvW2xbM11dKXt2YXIgdT1hW2xbMF1dLGY9YVtsWzFdXSxoPWFbbFsyXV0scD1hW2xbM11dO2lmKGMpaT1GKHQsW3UsZixoXSxbZVtsWzBdXSxlW2xbMV1dLGVbbFsyXV1dKXx8aTtlbHNle3ZhciBkPUIocCx1LHIsbiksZz1CKHAsZixyLG4pLHY9QihwLGgscixuKTtpPUYobnVsbCxbZCxnLHZdLFstMSwtMSwtMV0pfHxpfXM9ITB9fSkscz9pOihbWzAsMSwyLDNdLFsxLDIsMywwXSxbMiwzLDAsMV0sWzMsMCwxLDJdLFswLDIsMywxXSxbMSwzLDIsMF1dLmZvckVhY2goZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgdT1hW2xbMF1dLGY9YVtsWzFdXSxoPWFbbFsyXV0scD1hW2xbM11dLGQ9QihoLHUscixuKSxnPUIoaCxmLHIsbiksdj1CKHAsZixyLG4pLG09QihwLHUscixuKTtjPyhpPUYodCxbdSxtLGRdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1GKHQsW2YsZyx2XSxbZVtsWzFdXSwtMSwtMV0pfHxpKTppPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGksYSl7Rih0LFtlW25dLGVbaV0sZVthXV0sW3Jbbl0scltpXSxyW2FdXSl9O24oMCwxLDIpLG4oMiwzLDApfShudWxsLFtkLGcsdixtXSxbLTEsLTEsLTEsLTFdKXx8aSxzPSEwfX0pLHM/aTooW1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXV0uZm9yRWFjaChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiYhb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgdT1hW2xbMF1dLGY9YVtsWzFdXSxoPWFbbFsyXV0scD1hW2xbM11dLGQ9QihmLHUscixuKSxnPUIoaCx1LHIsbiksdj1CKHAsdSxyLG4pO2M/KGk9Rih0LFt1LGQsZ10sW2VbbFswXV0sLTEsLTFdKXx8aSxpPUYodCxbdSxnLHZdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1GKHQsW3UsdixkXSxbZVtsWzBdXSwtMSwtMV0pfHxpKTppPUYobnVsbCxbZCxnLHZdLFstMSwtMSwtMV0pfHxpLHM9ITB9fSksaSkpfWZ1bmN0aW9uIEcodCxlLHIsbixpLGEsbyxsLHUsZixoKXt2YXIgcD0hMTtyZXR1cm4gcyYmKFAodCwiQSIpJiYocD1IKG51bGwsW2UscixuLGFdLGYsaCl8fHApLFAodCwiQiIpJiYocD1IKG51bGwsW3IsbixpLHVdLGYsaCl8fHApLFAodCwiQyIpJiYocD1IKG51bGwsW3IsYSxvLHVdLGYsaCl8fHApLFAodCwiRCIpJiYocD1IKG51bGwsW24sYSxsLHVdLGYsaCl8fHApLFAodCwiRSIpJiYocD1IKG51bGwsW3IsbixhLHVdLGYsaCl8fHApKSxjJiYocD1IKHQsW3IsbixhLHVdLGYsaCl8fHApLHB9ZnVuY3Rpb24gWSh0LGUscixuLGksYSxvLHMpe3JldHVyblshMD09PXNbMF18fHEodCxWKFtlLHIsbl0pLFtlLHIsbl0sYSxvKSwhMD09PXNbMV18fHEodCxWKFtuLGksZV0pLFtuLGksZV0sYSxvKV19ZnVuY3Rpb24gVyh0LGUscixuLGksYSxvLHMsbCl7cmV0dXJuIHM/WSh0LGUscixpLG4sYSxvLGwpOlkodCxyLGksbixlLGEsbyxsKX1mdW5jdGlvbiBYKHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGY9ITEsaD1mdW5jdGlvbigpe2Y9cSh0LFtzLGwsY10sWy0xLC0xLC0xXSxpLGEpfHxmLGY9cSh0LFtjLHUsc10sWy0xLC0xLC0xXSxpLGEpfHxmfSxwPW9bMF0sZD1vWzFdLGc9b1syXTtyZXR1cm4gcCYmKHM9SShWKFt5KGUsci0wLG4tMCldKVswXSxWKFt5KGUtMSxyLTAsbi0wKV0pWzBdLHApLGw9SShWKFt5KGUsci0wLG4tMSldKVswXSxWKFt5KGUtMSxyLTAsbi0xKV0pWzBdLHApLGM9SShWKFt5KGUsci0xLG4tMSldKVswXSxWKFt5KGUtMSxyLTEsbi0xKV0pWzBdLHApLHU9SShWKFt5KGUsci0xLG4tMCldKVswXSxWKFt5KGUtMSxyLTEsbi0wKV0pWzBdLHApLGgoKSksZCYmKHM9SShWKFt5KGUtMCxyLG4tMCldKVswXSxWKFt5KGUtMCxyLTEsbi0wKV0pWzBdLGQpLGw9SShWKFt5KGUtMCxyLG4tMSldKVswXSxWKFt5KGUtMCxyLTEsbi0xKV0pWzBdLGQpLGM9SShWKFt5KGUtMSxyLG4tMSldKVswXSxWKFt5KGUtMSxyLTEsbi0xKV0pWzBdLGQpLHU9SShWKFt5KGUtMSxyLG4tMCldKVswXSxWKFt5KGUtMSxyLTEsbi0wKV0pWzBdLGQpLGgoKSksZyYmKHM9SShWKFt5KGUtMCxyLTAsbildKVswXSxWKFt5KGUtMCxyLTAsbi0xKV0pWzBdLGcpLGw9SShWKFt5KGUtMCxyLTEsbildKVswXSxWKFt5KGUtMCxyLTEsbi0xKV0pWzBdLGcpLGM9SShWKFt5KGUtMSxyLTEsbildKVswXSxWKFt5KGUtMSxyLTEsbi0xKV0pWzBdLGcpLHU9SShWKFt5KGUtMSxyLTAsbildKVswXSxWKFt5KGUtMSxyLTAsbi0xKV0pWzBdLGcpLGgoKSksZn1mdW5jdGlvbiBaKHQsZSxyLG4saSxhLG8sbCxjLHUsZixoKXt2YXIgcD10O3JldHVybiBoPyhzJiYiZXZlbiI9PT10JiYocD1udWxsKSxHKHAsZSxyLG4saSxhLG8sbCxjLHUsZikpOihzJiYib2RkIj09PXQmJihwPW51bGwpLEcocCxjLGwsbyxhLGksbixyLGUsdSxmKSl9ZnVuY3Rpb24gJCh0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPG07YysrKWZvcih2YXIgdT0xO3U8djt1KyspYS5wdXNoKFcodCx5KGwsdS0xLGMtMSkseShsLHUtMSxjKSx5KGwsdSxjLTEpLHkobCx1LGMpLHIsbiwobCt1K2MpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uIEoodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7YzxnO2MrKylmb3IodmFyIHU9MTt1PG07dSsrKWEucHVzaChXKHQseShjLTEsbCx1LTEpLHkoYyxsLHUtMSkseShjLTEsbCx1KSx5KGMsbCx1KSxyLG4sKGMrbCt1KSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBLKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8djtjKyspZm9yKHZhciB1PTE7dTxnO3UrKylhLnB1c2goVyh0LHkodS0xLGMtMSxsKSx5KHUtMSxjLGwpLHkodSxjLTEsbCkseSh1LGMsbCkscixuLCh1K2MrbCklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gUSh0LGUscil7Zm9yKHZhciBuPTE7bjxtO24rKylmb3IodmFyIGk9MTtpPHY7aSsrKWZvcih2YXIgYT0xO2E8ZzthKyspWih0LHkoYS0xLGktMSxuLTEpLHkoYS0xLGktMSxuKSx5KGEtMSxpLG4tMSkseShhLTEsaSxuKSx5KGEsaS0xLG4tMSkseShhLGktMSxuKSx5KGEsaSxuLTEpLHkoYSxpLG4pLGUsciwoYStpK24pJTIpfWZ1bmN0aW9uIHR0KHQsZSxyKXtzPSEwLFEodCxlLHIpLHM9ITF9ZnVuY3Rpb24gZXQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PG07dSsrKWZvcih2YXIgZj0xO2Y8djtmKyspby5wdXNoKFgodCxjLGYsdSxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIHJ0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTxnO3UrKylmb3IodmFyIGY9MTtmPG07ZisrKW8ucHVzaChYKHQsdSxjLGYscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBudCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8djt1KyspZm9yKHZhciBmPTE7ZjxnO2YrKylvLnB1c2goWCh0LGYsdSxjLHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gaXQodCxlKXtmb3IodmFyIHI9W10sbj10O248ZTtuKyspci5wdXNoKG4pO3JldHVybiByfXJldHVybiBmdW5jdGlvbigpe2lmKEwoKSxmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8ZztlKyspZm9yKHZhciByPTA7cjx2O3IrKylmb3IodmFyIG49MDtuPG07bisrKXt2YXIgaT15KGUscixuKTt6KHQueFtpXSx0LnlbaV0sdC56W2ldLHQudmFsdWVbaV0pfX0oKSxpJiZvJiYoRChvKSxjPSEwLFEobnVsbCxNLFMpLGM9ITEpLG4mJmEpe0QoYSk7Zm9yKHZhciBlPXQuc3VyZmFjZS5wYXR0ZXJuLHI9dC5zdXJmYWNlLmNvdW50LHM9MDtzPHI7cysrKXt2YXIgbD0xPT09cj8uNTpzLyhyLTEpLGs9KDEtbCkqTStsKlMsRT1NYXRoLmFicyhrLVQpLEM9TWF0aC5hYnMoay1BKSxPPUU+Qz9bVCxrXTpbayxBXTt0dChlLE9bMF0sT1sxXSl9fXZhciBJPVtbTWF0aC5taW4oTSxBKSxNYXRoLm1heChNLEEpXSxbTWF0aC5taW4oVCxTKSxNYXRoLm1heChULFMpXV07WyJ4IiwieSIsInoiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxJLmxlbmd0aDtuKyspe3ZhciBpPTAsYT1JW25dWzBdLG89SVtuXVsxXSxzPXQuc2xpY2VzW2VdO2lmKHMuc2hvdyYmcy5maWxsKXtEKHMuZmlsbCk7dmFyIGw9W10sYz1bXSx1PVtdO2lmKHMubG9jYXRpb25zLmxlbmd0aClmb3IodmFyIHk9MDt5PHMubG9jYXRpb25zLmxlbmd0aDt5Kyspe3ZhciB4PWYocy5sb2NhdGlvbnNbeV0sIngiPT09ZT9oOiJ5Ij09PWU/cDpkKTswPT09eC5kaXN0UmF0aW8/bC5wdXNoKHguaWQpOnguaWQ+MCYmKGMucHVzaCh4LmlkKSwieCI9PT1lP3UucHVzaChbeC5kaXN0UmF0aW8sMCwwXSk6InkiPT09ZT91LnB1c2goWzAseC5kaXN0UmF0aW8sMF0pOnUucHVzaChbMCwwLHguZGlzdFJhdGlvXSkpfWVsc2UgbD1pdCgxLCJ4Ij09PWU/Zy0xOiJ5Ij09PWU/di0xOm0tMSk7Yy5sZW5ndGg+MCYmKHJbaV09IngiPT09ZT9ldChudWxsLGMsYSxvLHUscltpXSk6InkiPT09ZT9ydChudWxsLGMsYSxvLHUscltpXSk6bnQobnVsbCxjLGEsbyx1LHJbaV0pLGkrKyksbC5sZW5ndGg+MCYmKHJbaV09IngiPT09ZT8kKG51bGwsbCxhLG8scltpXSk6InkiPT09ZT9KKG51bGwsbCxhLG8scltpXSk6SyhudWxsLGwsYSxvLHJbaV0pLGkrKyl9dmFyIGI9dC5jYXBzW2VdO2Iuc2hvdyYmYi5maWxsJiYoRChiLmZpbGwpLHJbaV09IngiPT09ZT8kKG51bGwsWzAsZy0xXSxhLG8scltpXSk6InkiPT09ZT9KKG51bGwsWzAsdi0xXSxhLG8scltpXSk6SyhudWxsLFswLG0tMV0sYSxvLHJbaV0pLGkrKyl9fSksMD09PXUmJkwoKSx0Ll94PXgsdC5feT1iLHQuX3o9Xyx0Ll9pbnRlbnNpdHk9dyx0Ll9Ycz1oLHQuX1lzPXAsdC5fWnM9ZH0oKSx0fSh0KTt2YXIgcz17cG9zaXRpb25zOm8obihyLnhheGlzLHQuX3gsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll95LGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxuKHIuemF4aXMsdC5feixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpLGNlbGxzOm8odC5faSx0Ll9qLHQuX2spLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfTtzLnZlcnRleEludGVuc2l0eT10Ll9pbnRlbnNpdHkscy52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHMuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKHMpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBjKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo2OTcsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcyMywiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4MDAsImdsLW1lc2gzZCI6Mjc2fV0sOTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX12YXIgYz1sKCJpc29taW4iKSx1PWwoImlzb21heCIpO251bGwhPXUmJm51bGwhPWMmJmM+dSYmKGUuaXNvbWluPW51bGwsZS5pc29tYXg9bnVsbCk7dmFyIGY9bCgieCIpLGg9bCgieSIpLHA9bCgieiIpLGQ9bCgidmFsdWUiKTtmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGgmJnAmJnAubGVuZ3RoJiZkJiZkLmxlbmd0aD8obi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxzKSxbIngiLCJ5IiwieiJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ImNhcHMuIit0O2woZSsiLnNob3ciKSYmbChlKyIuZmlsbCIpO3ZhciByPSJzbGljZXMuIit0O2wocisiLnNob3ciKSYmKGwocisiLmZpbGwiKSxsKHIrIi5sb2NhdGlvbnMiKSl9KSxsKCJzcGFjZWZyYW1lLnNob3ciKSYmbCgic3BhY2VmcmFtZS5maWxsIiksbCgic3VyZmFjZS5zaG93IikmJihsKCJzdXJmYWNlLmNvdW50IiksbCgic3VyZmFjZS5maWxsIiksbCgic3VyZmFjZS5wYXR0ZXJuIikpLGwoImNvbnRvdXIuc2hvdyIpJiYobCgiY29udG91ci5jb2xvciIpLGwoImNvbnRvdXIud2lkdGgiKSksWyJ0ZXh0IiwiaG92ZXJ0ZXh0IiwiaG92ZXJ0ZW1wbGF0ZSIsImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJmbGF0c2hhZGluZyIsIm9wYWNpdHkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wodCl9KSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9hdHRyaWJ1dGVzIjo5ODl9XSw5OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmNvbG9yYmFyPXttaW46ImNtaW4iLG1heDoiY21heCJ9LG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9Imlzb3N1cmZhY2UiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLG4uY2F0ZWdvcmllcz1bImdsM2QiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wzZCI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjk4OSwiLi9jYWxjIjo5OTAsIi4vY29udmVydCI6OTkxLCIuL2RlZmF1bHRzIjo5OTJ9XSw5OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3N1cmZhY2UvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWwoe3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sajp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxrOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6ImNhbGMifSksZGVsYXVuYXlheGlzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsInoiXSxkZmx0OiJ6IixlZGl0VHlwZToiY2FsYyJ9LGFscGhhaHVsbDp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi0xLGVkaXRUeXBlOiJjYWxjIn0saW50ZW5zaXR5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx2ZXJ0ZXhjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxmYWNlY29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNmb3Jtczp2b2lkIDB9LG4oIiIse2NvbG9yQXR0cjoiYGludGVuc2l0eWAiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7Y29sb3JiYXI6aSxvcGFjaXR5Om8ub3BhY2l0eSxmbGF0c2hhZGluZzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXI6e3Nob3c6bCh7fSxvLmNvbnRvdXJzLnguc2hvdyx7fSksY29sb3I6by5jb250b3Vycy54LmNvbG9yLHdpZHRoOm8uY29udG91cnMueC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0cG9zaXRpb246e3g6bCh7fSxvLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5Omwoe30sby5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpsKHt9LG8ubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KSxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0aW5nOmwoe3ZlcnRleG5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtMTIsZWRpdFR5cGU6ImNhbGMifSxmYWNlbm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxZS02LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvLmxpZ2h0aW5nKSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMifSl9KX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uL3N1cmZhY2UvYXR0cmlidXRlcyI6MTE0OH1dLDk5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuaW50ZW5zaXR5JiZuKHQsZSx7dmFsczplLmludGVuc2l0eSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU4NX1dLDk5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1tZXNoM2QiKSxpPXQoImRlbGF1bmF5LXRyaWFuZ3VsYXRlIiksYT10KCJhbHBoYS1zaGFwZSIpLG89dCgiY29udmV4LWh1bGwiKSxzPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsbD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksYz10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKTtmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj0iI2ZmZiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgZj11LnByb3RvdHlwZTtmdW5jdGlvbiBoKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWVbbl09bCh0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBwKHQsZSxyLG4pe2Zvcih2YXIgaT1bXSxhPWUubGVuZ3RoLG89MDtvPGE7bysrKWlbb109dC5kMmwoZVtvXSwwLG4pKnI7cmV0dXJuIGl9ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9W10scj10Lmxlbmd0aCxuPTA7bjxyO24rKyllW25dPU1hdGgucm91bmQodFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZih0W25dPD0tLjV8fHRbbl0+PWUtLjUpcmV0dXJuITE7cmV0dXJuITB9Zi5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDt0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLnhbZV0sdGhpcy5kYXRhLnlbZV0sdGhpcy5kYXRhLnpbZV1dO3ZhciByPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KHIpJiZ2b2lkIDAhPT1yW2VdP3QudGV4dExhYmVsPXJbZV06ciYmKHQudGV4dExhYmVsPXIpLCEwfX0sZi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O3RoaXMuZGF0YT10O3ZhciBuLHU9dC54Lmxlbmd0aCxmPWMocChyLnhheGlzLHQueCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhcikscChyLnlheGlzLHQueSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhcikscChyLnpheGlzLHQueixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpO2lmKHQuaSYmdC5qJiZ0Lmspe2lmKHQuaS5sZW5ndGghPT10LmoubGVuZ3RofHx0LmoubGVuZ3RoIT09dC5rLmxlbmd0aHx8IWcodC5pLHUpfHwhZyh0LmosdSl8fCFnKHQuayx1KSlyZXR1cm47bj1jKGQodC5pKSxkKHQuaiksZCh0LmspKX1lbHNlIG49MD09PXQuYWxwaGFodWxsP28oZik6dC5hbHBoYWh1bGw+MD9hKHQuYWxwaGFodWxsLGYpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVsieCIsInkiLCJ6Il0uaW5kZXhPZih0KSxuPVtdLGE9ZS5sZW5ndGgsbz0wO288YTtvKyspbltvXT1bZVtvXVsocisxKSUzXSxlW29dWyhyKzIpJTNdXTtyZXR1cm4gaShuKX0odC5kZWxhdW5heWF4aXMsZik7dmFyIHY9e3Bvc2l0aW9uczpmLGNlbGxzOm4sbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmwodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9O3QuaW50ZW5zaXR5Pyh0aGlzLmNvbG9yPSIjZmZmIix2LnZlcnRleEludGVuc2l0eT10LmludGVuc2l0eSx2LnZlcnRleEludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0sdi5jb2xvcm1hcD1zKHQpKTp0LnZlcnRleGNvbG9yPyh0aGlzLmNvbG9yPXQudmVydGV4Y29sb3JbMF0sdi52ZXJ0ZXhDb2xvcnM9aCh0LnZlcnRleGNvbG9yKSk6dC5mYWNlY29sb3I/KHRoaXMuY29sb3I9dC5mYWNlY29sb3JbMF0sdi5jZWxsQ29sb3JzPWgodC5mYWNlY29sb3IpKToodGhpcy5jb2xvcj10LmNvbG9yLHYubWVzaENvbG9yPWwodC5jb2xvcikpLHRoaXMubWVzaC51cGRhdGUodil9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IHUodCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19LHsiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6Njk3LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MjMsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODAwLCJhbHBoYS1zaGFwZSI6NTQsImNvbnZleC1odWxsIjoxMjAsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNTYsImdsLW1lc2gzZCI6Mjc2fV0sOTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX1mdW5jdGlvbiBjKHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPWwodCk7cmV0dXJuIGUmJmkuaXNBcnJheU9yVHlwZWRBcnJheShlKT9lOm51bGx9KTtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg9PT1lWzBdLmxlbmd0aH0pJiZlfWMoWyJ4IiwieSIsInoiXSk/KGMoWyJpIiwiaiIsImsiXSksKCFlLml8fGUuaiYmZS5rKSYmKCFlLmp8fGUuayYmZS5pKSYmKCFlLmt8fGUuaSYmZS5qKT8obi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxzKSxbImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJjb250b3VyLnNob3ciLCJjb250b3VyLmNvbG9yIiwiY29udG91ci53aWR0aCIsImNvbG9yc2NhbGUiLCJyZXZlcnNlc2NhbGUiLCJmbGF0c2hhZGluZyIsImFscGhhaHVsbCIsImRlbGF1bmF5YXhpcyIsIm9wYWNpdHkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wodCl9KSwiaW50ZW5zaXR5ImluIHQ/KGwoImludGVuc2l0eSIpLGEodCxlLHMsbCx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkpOihlLnNob3dzY2FsZT0hMSwiZmFjZWNvbG9yImluIHQ/bCgiZmFjZWNvbG9yIik6InZlcnRleGNvbG9yImluIHQ/bCgidmVydGV4Y29sb3IiKTpsKCJjb2xvciIscikpLGwoInRleHQiKSxsKCJob3ZlcnRleHQiKSxsKCJob3ZlcnRlbXBsYXRlIiksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU4NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vYXR0cmlidXRlcyI6OTk0fV0sOTk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5jb2xvcmJhcj17bWluOiJjbWluIixtYXg6ImNtYXgifSxuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJtZXNoM2QiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLG4uY2F0ZWdvcmllcz1bImdsM2QiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wzZCI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjk5NCwiLi9jYWxjIjo5OTUsIi4vY29udmVydCI6OTk2LCIuL2RlZmF1bHRzIjo5OTd9XSw5OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLG89dCgiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIikscz1pLmxpbmU7ZnVuY3Rpb24gbCh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxzLmNvbG9yLHtkZmx0OnR9KSx3aWR0aDpzLndpZHRoLGRhc2g6YSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifX1lLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sb3Blbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxoaWdoOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxvdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxjbG9zZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOnt3aWR0aDpuKHt9LHMud2lkdGgse30pLGRhc2g6bih7fSxhLHt9KSxlZGl0VHlwZToic3R5bGUifSxpbmNyZWFzaW5nOmwoIiMzRDk5NzAiKSxkZWNyZWFzaW5nOmwoIiNGRjQxMzYiKSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4Oi41LGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmxhYmVsOm4oe30sby5ob3ZlcmxhYmVsLHtzcGxpdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToic3R5bGUifX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3LCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjYwNywiLi4vLi4vbGliIjo3MDAsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA1MX1dLDEwMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1uLl8sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybntvOnQsaDplLGw6cixjOm59fWZ1bmN0aW9uIGwodCxlLHIscyxsKXtmb3IodmFyIGM9cy5tYWtlQ2FsY2RhdGEoZSwib3BlbiIpLHU9cy5tYWtlQ2FsY2RhdGEoZSwiaGlnaCIpLGY9cy5tYWtlQ2FsY2RhdGEoZSwibG93IiksaD1zLm1ha2VDYWxjZGF0YShlLCJjbG9zZSIpLHA9QXJyYXkuaXNBcnJheShlLnRleHQpLGQ9QXJyYXkuaXNBcnJheShlLmhvdmVydGV4dCksZz0hMCx2PW51bGwsbT1bXSx5PTA7eTxyLmxlbmd0aDt5Kyspe3ZhciB4PXJbeV0sYj1jW3ldLF89dVt5XSx3PWZbeV0saz1oW3ldO2lmKHghPT1vJiZiIT09byYmXyE9PW8mJnchPT1vJiZrIT09byl7az09PWI/bnVsbCE9PXYmJmshPT12JiYoZz1rPnYpOmc9az5iLHY9azt2YXIgVD1sKGIsXyx3LGspO1QucG9zPXgsVC55Yz0oYitrKS8yLFQuaT15LFQuZGlyPWc/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIixwJiYoVC50eD1lLnRleHRbeV0pLGQmJihULmh0eD1lLmhvdmVydGV4dFt5XSksbS5wdXNoKFQpfWVsc2UgbS5wdXNoKHtwb3M6eCxlbXB0eTohMH0pfXJldHVybiBlLl9leHRyZW1lc1tzLl9pZF09YS5maW5kRXh0cmVtZXMocyxuLmNvbmNhdChmLHUpLHtwYWRkZWQ6ITB9KSxtLmxlbmd0aCYmKG1bMF0udD17bGFiZWxzOntvcGVuOmkodCwib3BlbjoiKSsiICIsaGlnaDppKHQsImhpZ2g6IikrIiAiLGxvdzppKHQsImxvdzoiKSsiICIsY2xvc2U6aSh0LCJjbG9zZToiKSsiICJ9fSksbX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hLmdldEZyb21JZCh0LGUueGF4aXMpLGk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxvPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLl9taW5EaWZmO2lmKCFpKXt2YXIgYSxvPXQuX2Z1bGxEYXRhLHM9W107Zm9yKGk9MS8wLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGw9b1thXTtpZigib2hsYyI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLnhheGlzPT09ZS5faWQpe3MucHVzaChsKTt2YXIgYz1lLm1ha2VDYWxjZGF0YShsLCJ4Iik7bC5feGNhbGM9Yzt2YXIgdT1uLmRpc3RpbmN0VmFscyhjKS5taW5EaWZmO3UmJmlzRmluaXRlKHUpJiYoaT1NYXRoLm1pbihpLHUpKX19Zm9yKGk9PT0xLzAmJihpPTEpLGE9MDthPHMubGVuZ3RoO2ErKylzW2FdLl9taW5EaWZmPWl9cmV0dXJuIGkqci50aWNrd2lkdGh9KHQscixlKSxjPWUuX21pbkRpZmY7ZS5fbWluRGlmZj1udWxsO3ZhciB1PWUuX3hjYWxjO2UuX3hjYWxjPW51bGw7dmFyIGY9bCh0LGUsdSxpLHMpO3JldHVybiBlLl9leHRyZW1lc1tyLl9pZF09YS5maW5kRXh0cmVtZXMocix1LHt2cGFkOmMvMn0pLGYubGVuZ3RoPyhuLmV4dGVuZEZsYXQoZlswXS50LHt3SG92ZXI6Yy8yLHRpY2tMZW46b30pLGYpOlt7dDp7ZW1wdHk6ITB9fV19LGNhbGNDb21tb246bH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OH1dLDEwMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL29obGNfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIG8odCxlLHIsbil7cihuKyIubGluZS5jb2xvciIpLHIobisiLmxpbmUud2lkdGgiLGUubGluZS53aWR0aCkscihuKyIubGluZS5kYXNoIixlLmxpbmUuZGFzaCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pKHQsZSxsLHMpPyhsKCJsaW5lLndpZHRoIiksbCgibGluZS5kYXNoIiksbyh0LGUsbCwiaW5jcmVhc2luZyIpLG8odCxlLGwsImRlY3JlYXNpbmciKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgidGlja3dpZHRoIikscy5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2F0dHJpYnV0ZXMiOjk5OSwiLi9vaGxjX2RlZmF1bHRzIjoxMDA0fV0sMTAwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpLGw9e2luY3JlYXNpbmc6Ilx1MjViMiIsZGVjcmVhc2luZzoiXHUyNWJjIn07ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaSxzLGw9dC5jZCxjPXQueGEsdT1sWzBdLnRyYWNlLGY9bFswXS50LGg9dS50eXBlLHA9Im9obGMiPT09aD8ibCI6Im1pbiIsZD0ib2hsYyI9PT1oPyJoIjoibWF4IixnPWYuYlBvc3x8MCx2PWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcytnLWV9LG09Zi5iZFBvc3x8Zi50aWNrTGVuLHk9Zi53SG92ZXIseD1NYXRoLm1pbigxLG0vTWF0aC5hYnMoYy5yMmMoYy5yYW5nZVsxXSktYy5yMmMoYy5yYW5nZVswXSkpKTtmdW5jdGlvbiBiKHQpe3ZhciBlPXYodCk7cmV0dXJuIGEuaW5ib3goZS15LGUreSxpKX1mdW5jdGlvbiBfKHQpe3ZhciBlPXRbcF0sbj10W2RdO3JldHVybiBlPT09bnx8YS5pbmJveChlLXIsbi1yLGkpfWZ1bmN0aW9uIHcodCl7cmV0dXJuKGIodCkrXyh0KSkvMn1pPXQubWF4SG92ZXJEaXN0YW5jZS14LHM9dC5tYXhTcGlrZURpc3RhbmNlLXg7dmFyIGs9YS5nZXREaXN0YW5jZUZ1bmN0aW9uKG4sYixfLHcpO2lmKGEuZ2V0Q2xvc2VzdChsLGssdCksITE9PT10LmluZGV4KXJldHVybiBudWxsO3ZhciBUPWxbdC5pbmRleF07aWYoVC5lbXB0eSlyZXR1cm4gbnVsbDt2YXIgQT11W1QuZGlyXSxNPUEubGluZS5jb2xvcjtyZXR1cm4gby5vcGFjaXR5KE0pJiZBLmxpbmUud2lkdGg/dC5jb2xvcj1NOnQuY29sb3I9QS5maWxsY29sb3IsdC54MD1jLmMycChULnBvcytnLW0sITApLHQueDE9Yy5jMnAoVC5wb3MrZyttLCEwKSx0LnhMYWJlbFZhbD1ULnBvcyx0LnNwaWtlRGlzdGFuY2U9dyhUKSpzL2ksdC54U3Bpa2U9Yy5jMnAoVC5wb3MsITApLHR9ZnVuY3Rpb24gdSh0LGUscixhKXt2YXIgbz10LmNkLHM9dC55YSxsPW9bMF0udHJhY2UsdT1vWzBdLnQsZj1bXSxoPWModCxlLHIsYSk7aWYoIWgpcmV0dXJuW107dmFyIHA9b1toLmluZGV4XS5oaXx8bC5ob3ZlcmluZm8sZD1wLnNwbGl0KCIrIik7aWYoISgiYWxsIj09PXB8fC0xIT09ZC5pbmRleE9mKCJ5IikpKXJldHVybltdO2Zvcih2YXIgZz1bImhpZ2giLCJvcGVuIiwiY2xvc2UiLCJsb3ciXSx2PXt9LG09MDttPGcubGVuZ3RoO20rKyl7dmFyIHkseD1nW21dLGI9bFt4XVtoLmluZGV4XSxfPXMuYzJwKGIsITApO2IgaW4gdj8oeT12W2JdKS55TGFiZWwrPSI8YnI+Iit1LmxhYmVsc1t4XStuLmhvdmVyTGFiZWxUZXh0KHMsYik6KCh5PWkuZXh0ZW5kRmxhdCh7fSxoKSkueTA9eS55MT1fLHkueUxhYmVsVmFsPWIseS55TGFiZWw9dS5sYWJlbHNbeF0rbi5ob3ZlckxhYmVsVGV4dChzLGIpLHkubmFtZT0iIixmLnB1c2goeSksdltiXT15KX1yZXR1cm4gZn1mdW5jdGlvbiBmKHQsZSxyLGkpe3ZhciBhPXQuY2Qsbz10LnlhLHU9YVswXS50cmFjZSxmPWFbMF0udCxoPWModCxlLHIsaSk7aWYoIWgpcmV0dXJuW107dmFyIHA9YVtoLmluZGV4XSxkPWguaW5kZXg9cC5pLGc9cC5kaXI7ZnVuY3Rpb24gdih0KXtyZXR1cm4gZi5sYWJlbHNbdF0rbi5ob3ZlckxhYmVsVGV4dChvLHVbdF1bZF0pfXZhciBtPXAuaGl8fHUuaG92ZXJpbmZvLHk9bS5zcGxpdCgiKyIpLHg9ImFsbCI9PT1tLGI9eHx8LTEhPT15LmluZGV4T2YoInkiKSxfPXh8fC0xIT09eS5pbmRleE9mKCJ0ZXh0Iiksdz1iP1t2KCJvcGVuIiksdigiaGlnaCIpLHYoImxvdyIpLHYoImNsb3NlIikrIiAgIitsW2ddXTpbXTtyZXR1cm4gXyYmcyhwLHUsdyksaC5leHRyYVRleHQ9dy5qb2luKCI8YnI+IiksaC55MD1oLnkxPW8uYzJwKHAueWMsITApLFtoXX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmNkWzBdLnRyYWNlLmhvdmVybGFiZWwuc3BsaXQ/dSh0LGUscixuKTpmKHQsZSxyLG4pfSxob3ZlclNwbGl0OnUsaG92ZXJPblBvaW50czpmfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0IjoxMDU5fV0sMTAwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJvaGxjIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCJdLG1ldGE6e30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4vYXR0cmlidXRlcyI6OTk5LCIuL2NhbGMiOjFlMywiLi9kZWZhdWx0cyI6MTAwMSwiLi9ob3ZlciI6MTAwMiwiLi9wbG90IjoxMDA1LCIuL3NlbGVjdCI6MTAwNiwiLi9zdHlsZSI6MTAwN31dLDEwMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKCJ4Iikscz1yKCJvcGVuIiksbD1yKCJoaWdoIiksYz1yKCJsb3ciKSx1PXIoImNsb3NlIik7aWYocigiaG92ZXJsYWJlbC5zcGxpdCIpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCJdLGEpLHMmJmwmJmMmJnUpe3ZhciBmPU1hdGgubWluKHMubGVuZ3RoLGwubGVuZ3RoLGMubGVuZ3RoLHUubGVuZ3RoKTtyZXR1cm4gbyYmKGY9TWF0aC5taW4oZixpLm1pblJvd0xlbmd0aChvKSkpLGUuX2xlbmd0aD1mLGZ9fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOX1dLDEwMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1lLnhheGlzLHM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIG9obGMiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxsPWEudCxjPWEudHJhY2U7aWYoZS5pc1JhbmdlUGxvdHx8KGEubm9kZTM9ciksITAhPT1jLnZpc2libGV8fGwuZW1wdHkpci5yZW1vdmUoKTtlbHNle3ZhciB1PWwudGlja0xlbixmPXIuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShpLmlkZW50aXR5KTtmLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksZi5leGl0KCkucmVtb3ZlKCksZi5hdHRyKCJkIixmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVybiJNMCwwWiI7dmFyIGU9by5jMnAodC5wb3MsITApLHI9by5jMnAodC5wb3MtdSwhMCksbj1vLmMycCh0LnBvcyt1LCEwKTtyZXR1cm4iTSIrcisiLCIrcy5jMnAodC5vLCEwKSsiSCIrZSsiTSIrZSsiLCIrcy5jMnAodC5oLCEwKSsiViIrcy5jMnAodC5sLCEwKSsiTSIrbisiLCIrcy5jMnAodC5jLCEwKSsiSCIrZX0pfX0pfX0seyIuLi8uLi9saWIiOjcwMCxkMzoxNTR9XSwxMDA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5jZCxpPXQueGF4aXMsYT10LnlheGlzLG89W10scz1uWzBdLnQuYlBvc3x8MDtpZighMT09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbD1uW3JdO2UuY29udGFpbnMoW2kuYzJwKGwucG9zK3MpLGEuYzJwKGwueWMpXSxudWxsLGwuaSx0KT8oby5wdXNoKHtwb2ludE51bWJlcjpsLmkseDppLmMyZChsLnBvcykseTphLmMyZChsLnljKX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBvfX0se31dLDEwMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcub2hsY2xheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7ci5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goZnVuY3Rpb24odCl7aWYoIXQuZW1wdHkpe3ZhciByPWVbdC5kaXJdLmxpbmU7bi5zZWxlY3QodGhpcykuc3R5bGUoImZpbGwiLCJub25lIikuY2FsbChhLnN0cm9rZSxyLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsci5kYXNoLHIud2lkdGgpLnN0eWxlKCJvcGFjaXR5IixlLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LGQzOjE1NH1dLDEwMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxjPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLmxpbmUsdT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxmPW4oe2VkaXRUeXBlOiJjYWxjIn0sbygibGluZSIse2VkaXRUeXBlOiJjYWxjIn0pLHtzaG93c2NhbGU6Yy5zaG93c2NhbGUsY29sb3JiYXI6dSxzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHNwbGluZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx7a2V5czpbImNvdW50IiwicHJvYmFiaWxpdHkiXX0pfSk7ZS5leHBvcnRzPXtkb21haW46bCh7bmFtZToicGFyY2F0cyIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG92ZXJpbmZvOm4oe30saS5ob3ZlcmluZm8se2ZsYWdzOlsiY291bnQiLCJwcm9iYWJpbGl0eSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSksaG92ZXJvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2F0ZWdvcnkiLCJjb2xvciIsImRpbWVuc2lvbiJdLGRmbHQ6ImNhdGVnb3J5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITF9LHtrZXlzOlsiY291bnQiLCJwcm9iYWJpbGl0eSIsImNhdGVnb3J5IiwiY2F0ZWdvcnljb3VudCIsImNvbG9yY291bnQiLCJiYW5kY29sb3Jjb3VudCJdfSksYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnBlbmRpY3VsYXIiLCJmcmVlZm9ybSIsImZpeGVkIl0sZGZsdDoicGVycGVuZGljdWxhciIsZWRpdFR5cGU6InBsb3QifSxidW5kbGVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzb3J0cGF0aHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZvcndhcmQiLCJiYWNrd2FyZCJdLGRmbHQ6ImZvcndhcmQiLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2tmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImRpbWVuc2lvbiIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sZGlzcGxheWluZGV4Ont2YWxUeXBlOiJpbnRlZ2VyIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19LGxpbmU6Zixjb3VudHM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxjdXN0b21kYXRhOnZvaWQgMCxob3ZlcmxhYmVsOnZvaWQgMCxpZHM6dm9pZCAwLGxlZ2VuZGdyb3VwOnZvaWQgMCxvcGFjaXR5OnZvaWQgMCxzZWxlY3RlZHBvaW50czp2b2lkIDAsc2hvd2xlZ2VuZDp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi4vLi4vcGxvdHMvZG9tYWluIjo3NzMsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTF9XSwxMDA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KCIuL3Bsb3QiKTtyLm5hbWU9InBhcmNhdHMiLHIucGxvdD1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQuY2FsY2RhdGEsInBhcmNhdHMiKTtpZihvLmxlbmd0aCl7dmFyIHM9b1swXTtpKHQscyxyLGEpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygicGFyY2F0cyIpLGE9ZS5faGFzJiZlLl9oYXMoInBhcmNhdHMiKTtpJiYhYSYmbi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIucGFyY2F0cyIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9nZXRfZGF0YSI6Nzg0LCIuL3Bsb3QiOjEwMTR9XSwxMDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxvPXQoIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGModCxlLHIpe3QudmFsdWVJbmRzLnB1c2goZSksdC5jb3VudCs9cn1mdW5jdGlvbiB1KHQsZSxyKXt0LnZhbHVlSW5kcy5wdXNoKGUpLHQuY291bnQrPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bC5maWx0ZXJWaXNpYmxlKGUuZGltZW5zaW9ucyk7aWYoMD09PXIubGVuZ3RoKXJldHVybltdO3ZhciBmLGgscCxkPXIubWFwKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJ0cmFjZSI9PT10LmNhdGVnb3J5b3JkZXI/ZT1udWxsOiJhcnJheSI9PT10LmNhdGVnb3J5b3JkZXI/ZT10LmNhdGVnb3J5YXJyYXk6KGU9byh0LnZhbHVlcykuc29ydCgpLCJjYXRlZ29yeSBkZXNjZW5kaW5nIj09PXQuY2F0ZWdvcnlvcmRlciYmKGU9ZS5yZXZlcnNlKCkpKSxmdW5jdGlvbih0LGUpe2U9bnVsbD09ZT9bXTplLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdH0pO3ZhciByPXt9LG49e30saT1bXTtlLmZvckVhY2goZnVuY3Rpb24odCxlKXtyW3RdPTAsblt0XT1lfSk7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvLHM9dFthXTt2b2lkIDA9PT1yW3NdPyhyW3NdPTEsbz1lLnB1c2gocyktMSxuW3NdPW8pOihyW3NdKyssbz1uW3NdKSxpLnB1c2gobyl9dmFyIGw9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHJbdF19KTtyZXR1cm57dW5pcXVlVmFsdWVzOmUsdW5pcXVlQ291bnRzOmwsaW5kczppfX0odC52YWx1ZXMsZSl9KTtmPWwuaXNBcnJheU9yVHlwZWRBcnJheShlLmNvdW50cyk/ZS5jb3VudHM6W2UuY291bnRzXSxmdW5jdGlvbih0KXt2YXIgZTtpZihmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKHRbcl08MHx8dFtyXT49dC5sZW5ndGgpcmV0dXJuITE7aWYodm9pZCAwIT09ZVt0W3JdXSlyZXR1cm4hMTtlW3Rbcl1dPSEwfXJldHVybiEwfSh0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5aW5kZXh9KSkpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLl9kaXNwbGF5aW5kZXg9dFtlXS5kaXNwbGF5aW5kZXg7ZWxzZSBmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uX2Rpc3BsYXlpbmRleD1lfShyKSxyLmZvckVhY2goZnVuY3Rpb24odCxlKXshZnVuY3Rpb24odCxlKXt0Ll9jYXRlZ29yeWFycmF5PWUudW5pcXVlVmFsdWVzLG51bGw9PT10LnRpY2t0ZXh0fHx2b2lkIDA9PT10LnRpY2t0ZXh0P3QuX3RpY2t0ZXh0PVtdOnQuX3RpY2t0ZXh0PXQudGlja3RleHQuc2xpY2UoKTtmb3IodmFyIHI9dC5fdGlja3RleHQubGVuZ3RoO3I8ZS51bmlxdWVWYWx1ZXMubGVuZ3RoO3IrKyl0Ll90aWNrdGV4dC5wdXNoKGUudW5pcXVlVmFsdWVzW3JdKX0odCxkW2VdKX0pO3ZhciBnLHY9ZS5saW5lO3Y/KGkoZSwibGluZSIpJiZhKHQsZSx7dmFsczplLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJsaW5lIixjTGV0dGVyOiJjIn0pLGc9cy50cnlDb2xvcnNjYWxlKHYpKTpnPWwuaWRlbnRpdHk7dmFyIG0seSx4LGIsXz1yWzBdLnZhbHVlcy5sZW5ndGgsdz17fSxrPWQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluZHN9KTtmb3IocD0wLG09MDttPF87bSsrKXt2YXIgVD1bXTtmb3IoeT0wO3k8ay5sZW5ndGg7eSsrKVQucHVzaChrW3ldW21dKTtoPWZbbSVmLmxlbmd0aF0scCs9aDt2YXIgQT0oeD1tLGI9dm9pZCAwLGI9bC5pc0FycmF5T3JUeXBlZEFycmF5KHYuY29sb3IpP3YuY29sb3JbeCV2LmNvbG9yLmxlbmd0aF06di5jb2xvcix7Y29sb3I6ZyhiKSxyYXdDb2xvcjpifSksTT1UKyItIitBLnJhd0NvbG9yO3ZvaWQgMD09PXdbTV0mJih3W01dPXtjYXRlZ29yeUluZHM6VCxjb2xvcjpBLmNvbG9yLHJhd0NvbG9yOkEucmF3Q29sb3IsdmFsdWVJbmRzOltdLGNvdW50OjB9KSx1KHdbTV0sbSxoKX12YXIgUyxFPXIubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHI9ZSxuPXQuX2luZGV4LGk9dC5fZGlzcGxheWluZGV4LGE9dC5sYWJlbCx7ZGltZW5zaW9uSW5kOnIsY29udGFpbmVySW5kOm4sZGlzcGxheUluZDppLGRpbWVuc2lvbkxhYmVsOmEsY291bnQ6cCxjYXRlZ29yaWVzOltdLGRyYWdYOm51bGx9O3ZhciByLG4saSxhfSk7Zm9yKG09MDttPF87bSsrKWZvcihoPWZbbSVmLmxlbmd0aF0seT0wO3k8RS5sZW5ndGg7eSsrKXt2YXIgQz1FW3ldLmNvbnRhaW5lckluZCxMPWRbeV0uaW5kc1ttXSx6PUVbeV0uY2F0ZWdvcmllcztpZih2b2lkIDA9PT16W0xdKXt2YXIgTz1lLmRpbWVuc2lvbnNbQ10uX2NhdGVnb3J5YXJyYXlbTF0sST1lLmRpbWVuc2lvbnNbQ10uX3RpY2t0ZXh0W0xdO3pbTF09e2RpbWVuc2lvbkluZDp5LGNhdGVnb3J5SW5kOlM9TCxjYXRlZ29yeVZhbHVlOk8sZGlzcGxheUluZDpTLGNhdGVnb3J5TGFiZWw6SSx2YWx1ZUluZHM6W10sY291bnQ6MCxkcmFnWTpudWxsfX1jKHpbTF0sbSxoKX1yZXR1cm4gbihmdW5jdGlvbih0LGUscil7dmFyIG49dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5sZW5ndGh9KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlKX0pO3JldHVybntkaW1lbnNpb25zOnQscGF0aHM6ZSx0cmFjZTp2b2lkIDAsbWF4Q2F0czpuLGNvdW50OnJ9fShFLHcscCkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NTg4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzIjo2OTEsIi4uLy4uL2xpYi9ndXAiOjY5OH1dLDEwMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKTtmdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbC5kaW1lbnNpb25zLHIsaSl9dmFyIGk9cigidmFsdWVzIiksYT1yKCJ2aXNpYmxlIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cigibGFiZWwiKSxyKCJkaXNwbGF5aW5kZXgiLGUuX2luZGV4KTt2YXIgbyxzPXQuY2F0ZWdvcnlhcnJheSxjPUFycmF5LmlzQXJyYXkocykmJnMubGVuZ3RoPjA7YyYmKG89ImFycmF5Iik7dmFyIHU9cigiY2F0ZWdvcnlvcmRlciIsbyk7ImFycmF5Ij09PXU/KHIoImNhdGVnb3J5YXJyYXkiKSxyKCJ0aWNrdGV4dCIpKTooZGVsZXRlIHQuY2F0ZWdvcnlhcnJheSxkZWxldGUgdC50aWNrdGV4dCksY3x8ImFycmF5IiE9PXV8fChlLmNhdGVnb3J5b3JkZXI9InRyYWNlIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9dmFyIHA9cyh0LGUse25hbWU6ImRpbWVuc2lvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czp1fSksZD1mdW5jdGlvbih0LGUscixvLHMpe3MoImxpbmUuc2hhcGUiKSxzKCJsaW5lLmhvdmVydGVtcGxhdGUiKTt2YXIgbD1zKCJsaW5lLmNvbG9yIixvLmNvbG9yd2F5WzBdKTtpZihpKHQsImxpbmUiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcygibGluZS5jb2xvcnNjYWxlIiksYSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGYsaCk7byhlLGYsaCksQXJyYXkuaXNBcnJheShwKSYmcC5sZW5ndGh8fChlLnZpc2libGU9ITEpLGMoZSxwLCJ2YWx1ZXMiLGQpLGgoImhvdmVyb24iKSxoKCJob3ZlcnRlbXBsYXRlIiksaCgiYXJyYW5nZW1lbnQiKSxoKCJidW5kbGVjb2xvcnMiKSxoKCJzb3J0cGF0aHMiKSxoKCJjb3VudHMiKTt2YXIgZz17ZmFtaWx5OmYuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGYuZm9udC5zaXplKSxjb2xvcjpmLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChoLCJsYWJlbGZvbnQiLGcpO3ZhciB2PXtmYW1pbHk6Zi5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoZi5mb250LnNpemUvMS4yKSxjb2xvcjpmLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChoLCJ0aWNrZm9udCIsdil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NTg4LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjoxMDIzLCIuL2F0dHJpYnV0ZXMiOjEwMDh9XSwxMDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uY29sb3JiYXI9e2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InBhcmNhdHMiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMDA4LCIuL2Jhc2VfcGxvdCI6MTAwOSwiLi9jYWxjIjoxMDEwLCIuL2RlZmF1bHRzIjoxMDExLCIuL3Bsb3QiOjEwMTR9XSwxMDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X2FwaSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoInRpbnljb2xvcjIiKSxjPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpO2Z1bmN0aW9uIHUodCxlLHIsaSl7dmFyIGE9dC5tYXAoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9clswXSxhPWUubWFyZ2lufHx7bDo4MCxyOjgwLHQ6MTAwLGI6ODB9LG89aS50cmFjZSxzPW8uZG9tYWluLGw9ZS53aWR0aCxjPWUuaGVpZ2h0LHU9TWF0aC5mbG9vcihsKihzLnhbMV0tcy54WzBdKSksZj1NYXRoLmZsb29yKGMqKHMueVsxXS1zLnlbMF0pKSxoPXMueFswXSpsK2EubCxwPWUuaGVpZ2h0LXMueVsxXSplLmhlaWdodCthLnQsZD1vLmxpbmUuc2hhcGU7bj0iYWxsIj09PW8uaG92ZXJpbmZvP1siY291bnQiLCJwcm9iYWJpbGl0eSJdOihvLmhvdmVyaW5mb3x8IiIpLnNwbGl0KCIrIik7dmFyIGc9e3RyYWNlOm8sa2V5Om8udWlkLG1vZGVsOmkseDpoLHk6cCx3aWR0aDp1LGhlaWdodDpmLGhvdmVyb246by5ob3Zlcm9uLGhvdmVyaW5mb0l0ZW1zOm4sYXJyYW5nZW1lbnQ6by5hcnJhbmdlbWVudCxidW5kbGVjb2xvcnM6by5idW5kbGVjb2xvcnMsc29ydHBhdGhzOm8uc29ydHBhdGhzLGxhYmVsZm9udDpvLmxhYmVsZm9udCxjYXRlZ29yeWxhYmVsZm9udDpvLnRpY2tmb250LHBhdGhTaGFwZTpkLGRyYWdEaW1lbnNpb246bnVsbCxtYXJnaW46YSxwYXRoczpbXSxkaW1lbnNpb25zOltdLGdyYXBoRGl2OnQsdHJhY2VTZWxlY3Rpb246bnVsbCxwYXRoU2VsZWN0aW9uOm51bGwsZGltZW5zaW9uU2VsZWN0aW9uOm51bGx9O2kuZGltZW5zaW9ucyYmKFIoZyksUChnKSk7cmV0dXJuIGd9LmJpbmQoMCxlLHIpKSxsPWkuc2VsZWN0QWxsKCJnLnBhcmNhdHNsYXllciIpLmRhdGEoW251bGxdKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwYXJjYXRzbGF5ZXIiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTt2YXIgdT1sLnNlbGVjdEFsbCgiZy50cmFjZS5wYXJjYXRzIikuZGF0YShhLGYpLHY9dS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgcGFyY2F0cyIpO3UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIsICIrdC55KyIpIn0pLHYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwYXRocyIpO3ZhciB4PXUuc2VsZWN0KCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdGhzfSxmKTt4LmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSk7dmFyIHc9eC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwicGF0aCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7eSh3KSx4LmF0dHIoImQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0R9KSx3LmVtcHR5KCl8fHguc29ydChwKSx4LmV4aXQoKS5yZW1vdmUoKSx4Lm9uKCJtb3VzZW92ZXIiLGQpLm9uKCJtb3VzZW91dCIsZykub24oImNsaWNrIixtKSx2LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGltZW5zaW9ucyIpO3ZhciBrPXUuc2VsZWN0KCJnLmRpbWVuc2lvbnMiKS5zZWxlY3RBbGwoImcuZGltZW5zaW9uIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxmKTtrLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkaW1lbnNpb24iKSxrLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSxrLmV4aXQoKS5yZW1vdmUoKTt2YXIgVD1rLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllc30sZiksQT1ULmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXRlZ29yeSIpO1QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrdC55KyIpIn0pLEEuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJjYXRyZWN0IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksVC5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSxiKEEpO3ZhciB6PVQuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30sZik7ei5lYWNoKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSksei5hdHRyKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pO3ZhciBPPXouZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhbmRyZWN0IikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTt6LmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4iZml4ZWQiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50PyJkZWZhdWx0IjoicGVycGVuZGljdWxhciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/Im5zLXJlc2l6ZSI6Im1vdmUifSksXyhPKSx6LmV4aXQoKS5yZW1vdmUoKSxBLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY2F0bGFiZWwiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKTt2YXIgST1lLl9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3I7VC5zZWxlY3QoInRleHQuY2F0bGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24odCl7cmV0dXJuIGgodCk/InN0YXJ0IjoiZW5kIn0pLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsSSsiIC0xcHggIDFweCAycHgsICIrSSsiIDFweCAgMXB4IDJweCwgIitJKyIgIDFweCAtMXB4IDJweCwgIitJKyIgLTFweCAtMXB4IDJweCIpLnN0eWxlKCJmaWxsIiwicmdiKDAsIDAsIDApIikuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIGgodCk/dC53aWR0aCs1Oi01fSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0LzJ9KS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNhdGVnb3J5TGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe3MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwuY2F0ZWdvcnlsYWJlbGZvbnQpLGMuY29udmVydFRvVHNwYW5zKG4uc2VsZWN0KHRoaXMpLGUpfSksQS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImRpbWxhYmVsIiksVC5zZWxlY3QoInRleHQuZGltbGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImJhc2VsaW5lIikuYXR0cigiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4iZml4ZWQiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50PyJkZWZhdWx0IjoiZXctcmVzaXplIn0pLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoLzJ9KS5hdHRyKCJ5IiwtNSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KG4uc2VsZWN0KHRoaXMpLHQucGFyY2F0c1ZpZXdNb2RlbC5sYWJlbGZvbnQpfSksVC5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5vbigibW91c2VvdmVyIixNKS5vbigibW91c2VvdXQiLFMpLFQuZXhpdCgpLnJlbW92ZSgpLGsuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJue3g6dC54LHk6MH19KS5vbigiZHJhZ3N0YXJ0IixFKS5vbigiZHJhZyIsQykub24oImRyYWdlbmQiLEwpKSx1LmVhY2goZnVuY3Rpb24odCl7dC50cmFjZVNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKSx0LnBhdGhTZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKSx0LmRpbWVuc2lvblNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZGltZW5zaW9ucyIpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb24iKX0pLHUuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQua2V5fWZ1bmN0aW9uIGgodCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLHI9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZS0xXS5tb2RlbC5kaW1lbnNpb25JbmQ7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kPT09cn1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQubW9kZWwucmF3Q29sb3I+ZS5tb2RlbC5yYXdDb2xvcj8xOnQubW9kZWwucmF3Q29sb3I8ZS5tb2RlbC5yYXdDb2xvcj8tMTowfWZ1bmN0aW9uIGQodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpe28ucmFpc2VUb1RvcCh0aGlzKSx4KG4uc2VsZWN0KHRoaXMpKTt2YXIgZT12KHQpO2lmKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5lbWl0KCJwbG90bHlfaG92ZXIiLHtwb2ludHM6ZSxldmVudDpuLmV2ZW50fSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigibm9uZSIpKXt2YXIgcixpLHMsYz1uLm1vdXNlKHRoaXMpWzBdLHU9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGY9dC5wYXJjYXRzVmlld01vZGVsLnRyYWNlLGg9dS5fZnVsbExheW91dCxwPWguX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3Iocz0wO3M8dC5sZWZ0WHMubGVuZ3RoLTE7cysrKWlmKHQubGVmdFhzW3NdK3QuZGltV2lkdGhzW3NdLTI8PWMmJmM8PXQubGVmdFhzW3MrMV0rMil7dmFyIGc9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbc10sbT10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tzKzFdO3I9KGcueCtnLndpZHRoK20ueCkvMixpPSh0LnRvcFlzW3NdK3QudG9wWXNbcysxXSt0LmhlaWdodCkvMjticmVha312YXIgeT10LnBhcmNhdHNWaWV3TW9kZWwueCtyLGI9dC5wYXJjYXRzVmlld01vZGVsLnkraSxfPWwubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pLHc9dC5tb2RlbC5jb3VudCxrPXcvdC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LFQ9e2NvdW50TGFiZWw6dyxwcm9iYWJpbGl0eUxhYmVsOmsudG9GaXhlZCgzKX0sQT1bXTstMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZBLnB1c2goWyJDb3VudDoiLFQuY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiZBLnB1c2goWyJQOiIsVC5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKCIgIikpO3ZhciBNPUEuam9pbigiPGJyPiIpLFM9bi5tb3VzZSh1KVswXTthLmxvbmVIb3Zlcih7dHJhY2U6Zix4OnktcC5sZWZ0K2QubGVmdCx5OmItcC50b3ArZC50b3AsdGV4dDpNLGNvbG9yOnQubW9kZWwuY29sb3IsYm9yZGVyQ29sb3I6ImJsYWNrIixmb250RmFtaWx5OidNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTAsZm9udENvbG9yOl8saWRlYWxBbGlnbjpTPHk/InJpZ2h0IjoibGVmdCIsaG92ZXJ0ZW1wbGF0ZTooZi5saW5lfHx7fSkuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOlQsZXZlbnREYXRhOlt7ZGF0YTpmLl9pbnB1dCxmdWxsRGF0YTpmLGNvdW50OncscHJvYmFiaWxpdHk6a31dfSx7Y29udGFpbmVyOmguX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOmguX3BhcGVyLm5vZGUoKSxnZDp1fSl9fX1mdW5jdGlvbiBnKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmKHkobi5zZWxlY3QodGhpcykpLGEubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSksdC5wYXJjYXRzVmlld01vZGVsLnBhdGhTZWxlY3Rpb24uc29ydChwKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpKXt2YXIgZT12KHQpO3QucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5lbWl0KCJwbG90bHlfdW5ob3ZlciIse3BvaW50czplLGV2ZW50Om4uZXZlbnR9KX19ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9W10scj16KHQucGFyY2F0c1ZpZXdNb2RlbCksbj0wO248dC5tb2RlbC52YWx1ZUluZHMubGVuZ3RoO24rKyl7dmFyIGk9dC5tb2RlbC52YWx1ZUluZHNbbl07ZS5wdXNoKHtjdXJ2ZU51bWJlcjpyLHBvaW50TnVtYmVyOml9KX1yZXR1cm4gZX1mdW5jdGlvbiBtKHQpe2lmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7dmFyIGU9dih0KTt0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2NsaWNrIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudH0pfX1mdW5jdGlvbiB5KHQpe3QuYXR0cigiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY29sb3J9KS5hdHRyKCJmaWxsLW9wYWNpdHkiLC42KS5hdHRyKCJzdHJva2UiLCJsaWdodGdyYXkiKS5hdHRyKCJzdHJva2Utd2lkdGgiLC4yKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSl9ZnVuY3Rpb24geCh0KXt0LmF0dHIoImZpbGwtb3BhY2l0eSIsLjgpLmF0dHIoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIGwubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pfSkuYXR0cigic3Ryb2tlLXdpZHRoIiwuMyl9ZnVuY3Rpb24gYih0KXt0LnNlbGVjdCgicmVjdC5jYXRyZWN0IikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKX1mdW5jdGlvbiBfKHQpe3QuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLC4yKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSkuYXR0cigiZmlsbC1vcGFjaXR5IiwxKX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLHI9dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25JbmQsbj10LmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLmNhdGVnb3J5SW5kO3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5tb2RlbC5jYXRlZ29yeUluZHNbcl09PT1uJiZlLm1vZGVsLmNvbG9yPT09dC5jb2xvcn0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLmRhdHVtKCkucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixhPW4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0Iiksbz1bXTthLmVhY2goZnVuY3Rpb24odCl7dyh0KS5lYWNoKGZ1bmN0aW9uKHQpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG8sdih0KSl9KX0pLGkuZW1pdChlLHtwb2ludHM6byxldmVudDpyfSl9ZnVuY3Rpb24gVCh0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuZGF0dW0oKSxhPWkucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixvPXcoaSkscz1bXTtvLmVhY2goZnVuY3Rpb24odCl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocyx2KHQpKX0pLGEuZW1pdChlLHtwb2ludHM6cyxldmVudDpyfSl9ZnVuY3Rpb24gQSh0LGUpe3ZhciByLGksYT1uLnNlbGVjdChlLnBhcmVudE5vZGUpLnNlbGVjdCgicmVjdC5jYXRyZWN0Iiksbz1hLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWEuZGF0dW0oKSxsPXMucGFyY2F0c1ZpZXdNb2RlbCxjPWwubW9kZWwuZGltZW5zaW9uc1tzLm1vZGVsLmRpbWVuc2lvbkluZF0sdT1sLnRyYWNlLGY9by50b3Arby5oZWlnaHQvMjtsLmRpbWVuc2lvbnMubGVuZ3RoPjEmJmMuZGlzcGxheUluZD09PWwuZGltZW5zaW9ucy5sZW5ndGgtMT8ocj1vLmxlZnQsaT0ibGVmdCIpOihyPW8ubGVmdCtvLndpZHRoLGk9InJpZ2h0Iik7dmFyIGg9cy5tb2RlbC5jb3VudCxwPXMubW9kZWwuY2F0ZWdvcnlMYWJlbCxkPWgvcy5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LGc9e2NvdW50TGFiZWw6aCxjYXRlZ29yeUxhYmVsOnAscHJvYmFiaWxpdHlMYWJlbDpkLnRvRml4ZWQoMyl9LHY9W107LTEhPT1zLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigiY291bnQiKSYmdi5wdXNoKFsiQ291bnQ6IixnLmNvdW50TGFiZWxdLmpvaW4oIiAiKSksLTEhPT1zLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigicHJvYmFiaWxpdHkiKSYmdi5wdXNoKFsiUCgiK2cuY2F0ZWdvcnlMYWJlbCsiKToiLGcucHJvYmFiaWxpdHlMYWJlbF0uam9pbigiICIpKTt2YXIgbT12LmpvaW4oIjxicj4iKTtyZXR1cm57dHJhY2U6dSx4OnItdC5sZWZ0LHk6Zi10LnRvcCx0ZXh0Om0sY29sb3I6ImxpZ2h0Z3JheSIsYm9yZGVyQ29sb3I6ImJsYWNrIixmb250RmFtaWx5OidNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTIsZm9udENvbG9yOiJibGFjayIsaWRlYWxBbGlnbjppLGhvdmVydGVtcGxhdGU6dS5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6ZyxldmVudERhdGE6W3tkYXRhOnUuX2lucHV0LGZ1bGxEYXRhOnUsY291bnQ6aCxjYXRlZ29yeTpwLHByb2JhYmlsaXR5OmR9XX19ZnVuY3Rpb24gTSh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJi0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7aWYobi5tb3VzZSh0aGlzKVsxXTwtMSlyZXR1cm47dmFyIGUscj10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsaT1yLl9mdWxsTGF5b3V0LHM9aS5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb247aWYoImNvbG9yIj09PWM/KCFmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5kYXR1bSgpLHI9dyhlKTt4KHIpLHIuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKX0pLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yPT09ZS5jb2xvcn0pLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyksbi5zZWxlY3QodGhpcykuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSl9KX0odGhpcyksVCh0aGlzLCJwbG90bHlfaG92ZXIiLG4uZXZlbnQpKTooIWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT13KHQpO3goZSksZS5lYWNoKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSl9KSxuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDIuNSl9KHRoaXMpLGsodGhpcywicGxvdGx5X2hvdmVyIixuLmV2ZW50KSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigibm9uZSIpKSJjYXRlZ29yeSI9PT1jP2U9QShzLHRoaXMpOiJjb2xvciI9PT1jP2U9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPW4uc2VsZWN0KGUpLmRhdHVtKCkscz1vLmNhdGVnb3J5Vmlld01vZGVsLGM9cy5wYXJjYXRzVmlld01vZGVsLHU9Yy5tb2RlbC5kaW1lbnNpb25zW3MubW9kZWwuZGltZW5zaW9uSW5kXSxmPWMudHJhY2UsaD1hLnkrYS5oZWlnaHQvMjtjLmRpbWVuc2lvbnMubGVuZ3RoPjEmJnUuZGlzcGxheUluZD09PWMuZGltZW5zaW9ucy5sZW5ndGgtMT8ocj1hLmxlZnQsaT0ibGVmdCIpOihyPWEubGVmdCthLndpZHRoLGk9InJpZ2h0Iik7dmFyIHA9cy5tb2RlbC5jYXRlZ29yeUxhYmVsLGQ9by5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LGc9MDtvLmNhdGVnb3J5Vmlld01vZGVsLmJhbmRzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jb2xvcj09PW8uY29sb3ImJihnKz10LmNvdW50KX0pO3ZhciB2PXMubW9kZWwuY291bnQsbT0wO2MucGF0aFNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKHQpe3QubW9kZWwuY29sb3I9PT1vLmNvbG9yJiYobSs9dC5tb2RlbC5jb3VudCl9KTt2YXIgeT1nL2QseD1nL20sYj1nL3YsXz17Y291bnRMYWJlbDpkLGNhdGVnb3J5TGFiZWw6cCxwcm9iYWJpbGl0eUxhYmVsOnkudG9GaXhlZCgzKX0sdz1bXTstMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZ3LnB1c2goWyJDb3VudDoiLF8uY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiYody5wdXNoKCJQKGNvbG9yIFx1MjIyOSAiK3ArIik6ICIrXy5wcm9iYWJpbGl0eUxhYmVsKSx3LnB1c2goIlAoIitwKyIgfCBjb2xvcik6ICIreC50b0ZpeGVkKDMpKSx3LnB1c2goIlAoY29sb3IgfCAiK3ArIik6ICIrYi50b0ZpeGVkKDMpKSk7dmFyIGs9dy5qb2luKCI8YnI+IiksVD1sLm1vc3RSZWFkYWJsZShvLmNvbG9yLFsiYmxhY2siLCJ3aGl0ZSJdKTtyZXR1cm57dHJhY2U6Zix4OnItdC5sZWZ0LHk6aC10LnRvcCx0ZXh0OmssY29sb3I6by5jb2xvcixib3JkZXJDb2xvcjoiYmxhY2siLGZvbnRGYW1pbHk6J01vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlJyxmb250Q29sb3I6VCxmb250U2l6ZToxMCxpZGVhbEFsaWduOmksaG92ZXJ0ZW1wbGF0ZTpmLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpfLGV2ZW50RGF0YTpbe2RhdGE6Zi5faW5wdXQsZnVsbERhdGE6ZixjYXRlZ29yeTpwLGNvdW50OmQscHJvYmFiaWxpdHk6eSxjYXRlZ29yeWNvdW50OnYsY29sb3Jjb3VudDptLGJhbmRjb2xvcmNvdW50Omd9XX19KHMsdGhpcyk6ImRpbWVuc2lvbiI9PT1jJiYoZT1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBuLnNlbGVjdChlLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJnLmNhdGVnb3J5Iikuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKS5lYWNoKGZ1bmN0aW9uKCl7ci5wdXNoKEEodCx0aGlzKSl9KSxyfShzLHRoaXMpKSxlJiZhLm11bHRpSG92ZXJzKGUse2NvbnRhaW5lcjppLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjppLl9wYXBlci5ub2RlKCksZ2Q6cn0pfX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbDtpZighZS5kcmFnRGltZW5zaW9uJiYoeShlLnBhdGhTZWxlY3Rpb24pLGIoZS5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKCJnLmNhdGVnb3J5IikpLF8oZS5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKCJnLmNhdGVnb3J5Iikuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikpLGEubG9uZVVuaG92ZXIoZS5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLGUucGF0aFNlbGVjdGlvbi5zb3J0KHApLC0xPT09ZS5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpKXsiY29sb3IiPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb24/VCh0aGlzLCJwbG90bHlfdW5ob3ZlciIsbi5ldmVudCk6ayh0aGlzLCJwbG90bHlfdW5ob3ZlciIsbi5ldmVudCl9fWZ1bmN0aW9uIEUodCl7ImZpeGVkIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmKHQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9dC5tb2RlbC5kaXNwbGF5SW5kLHQuaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kcz10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pLHQuZHJhZ0hhc01vdmVkPSExLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1udWxsLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLm1vdXNlKHRoaXMpWzBdLGk9bi5tb3VzZSh0aGlzKVsxXTstMjw9ciYmcjw9ZS53aWR0aCsyJiYtMjw9aSYmaTw9ZS5oZWlnaHQrMiYmKHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1lLm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM9dC5tb2RlbC5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksZS5tb2RlbC5kcmFnWT1lLnksby5yYWlzZVRvVG9wKHRoaXMucGFyZW50Tm9kZSksbi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5lYWNoKGZ1bmN0aW9uKGUpe2UueTxpJiZpPD1lLnkrZS5oZWlnaHQmJih0LnBvdGVudGlhbENsaWNrQmFuZD10aGlzKX0pKX0pLHQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uPXQsYS5sb25lVW5ob3Zlcih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSl9ZnVuY3Rpb24gQyh0KXtpZigiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnSGFzTW92ZWQ9ITAsbnVsbCE9PXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpKXt2YXIgZT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kLHI9ZS0xLGk9ZSsxLGE9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZV07aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIG89YS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF07by5tb2RlbC5kcmFnWSs9bi5ldmVudC5keTt2YXIgcz1vLm1vZGVsLmRyYWdZLGw9by5tb2RlbC5kaXNwbGF5SW5kLGM9YS5jYXRlZ29yaWVzLHU9Y1tsLTFdLGY9Y1tsKzFdO3ZvaWQgMCE9PXUmJnM8dS55K3UuaGVpZ2h0LzImJihvLm1vZGVsLmRpc3BsYXlJbmQ9dS5tb2RlbC5kaXNwbGF5SW5kLHUubW9kZWwuZGlzcGxheUluZD1sKSx2b2lkIDAhPT1mJiZzK28uaGVpZ2h0PmYueStmLmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPWYubW9kZWwuZGlzcGxheUluZCxmLm1vZGVsLmRpc3BsYXlJbmQ9bCksdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW8ubW9kZWwuZGlzcGxheUluZH1pZihudWxsPT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kfHwiZnJlZWZvcm0iPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50KXthLm1vZGVsLmRyYWdYPW4uZXZlbnQueDt2YXIgaD10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tyXSxwPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2ldO3ZvaWQgMCE9PWgmJmEubW9kZWwuZHJhZ1g8aC54K2gud2lkdGgmJihhLm1vZGVsLmRpc3BsYXlJbmQ9aC5tb2RlbC5kaXNwbGF5SW5kLGgubW9kZWwuZGlzcGxheUluZD1lKSx2b2lkIDAhPT1wJiZhLm1vZGVsLmRyYWdYK2Eud2lkdGg+cC54JiYoYS5tb2RlbC5kaXNwbGF5SW5kPXAubW9kZWwuZGlzcGxheUluZCxwLm1vZGVsLmRpc3BsYXlJbmQ9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCksdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1hLm1vZGVsLmRpc3BsYXlJbmR9Uih0LnBhcmNhdHNWaWV3TW9kZWwpLFAodC5wYXJjYXRzVmlld01vZGVsKSxJKHQucGFyY2F0c1ZpZXdNb2RlbCksTyh0LnBhcmNhdHNWaWV3TW9kZWwpfX1mdW5jdGlvbiBMKHQpe2lmKCJmaXhlZCIhPT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQmJm51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJmb250LXdlaWdodCIsIm5vcm1hbCIpO3ZhciBlPXt9LHI9eih0LnBhcmNhdHNWaWV3TW9kZWwpLGE9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSxvPXQuaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kcy5zb21lKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1hW2VdfSk7byYmYS5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7dmFyIGk9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbbl0uY29udGFpbmVySW5kO2VbImRpbWVuc2lvbnNbIitpKyJdLmRpc3BsYXlpbmRleCJdPXJ9KTt2YXIgcz0hMTtpZihudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXt2YXIgbD10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KTtpZihzPXQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzLnNvbWUoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCE9PWxbZV19KSl7dmFyIGM9dC5tb2RlbC5jYXRlZ29yaWVzLnNsaWNlKCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSksdT1jLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeVZhbHVlfSksZj1jLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeUxhYmVsfSk7ZVsiZGltZW5zaW9uc1siK3QubW9kZWwuY29udGFpbmVySW5kKyJdLmNhdGVnb3J5YXJyYXkiXT1bdV0sZVsiZGltZW5zaW9uc1siK3QubW9kZWwuY29udGFpbmVySW5kKyJdLnRpY2t0ZXh0Il09W2ZdLGVbImRpbWVuc2lvbnNbIit0Lm1vZGVsLmNvbnRhaW5lckluZCsiXS5jYXRlZ29yeW9yZGVyIl09ImFycmF5In19aWYoLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpJiYhdC5kcmFnSGFzTW92ZWQmJnQucG90ZW50aWFsQ2xpY2tCYW5kJiYoImNvbG9yIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uP1QodC5wb3RlbnRpYWxDbGlja0JhbmQsInBsb3RseV9jbGljayIsbi5ldmVudC5zb3VyY2VFdmVudCk6ayh0LnBvdGVudGlhbENsaWNrQmFuZCwicGxvdGx5X2NsaWNrIixuLmV2ZW50LnNvdXJjZUV2ZW50KSksdC5tb2RlbC5kcmFnWD1udWxsLG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpdC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZF0uY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdLm1vZGVsLmRyYWdZPW51bGwsdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW51bGw7dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1udWxsLHQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uPW51bGwsdC5kcmFnSGFzTW92ZWQ9bnVsbCx0LnBvdGVudGlhbENsaWNrQmFuZD1udWxsLFIodC5wYXJjYXRzVmlld01vZGVsKSxQKHQucGFyY2F0c1ZpZXdNb2RlbCksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oMzAwKS5lYXNlKCJjdWJpYy1pbi1vdXQiKS5lYWNoKGZ1bmN0aW9uKCl7SSh0LnBhcmNhdHNWaWV3TW9kZWwsITApLE8odC5wYXJjYXRzVmlld01vZGVsLCEwKX0pLmVhY2goImVuZCIsZnVuY3Rpb24oKXsob3x8cykmJmkucmVzdHlsZSh0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsZSxbcl0pfSl9fWZ1bmN0aW9uIHoodCl7Zm9yKHZhciBlLHI9dC5ncmFwaERpdi5fZnVsbERhdGEsbj0wO248ci5sZW5ndGg7bisrKWlmKHQua2V5PT09cltuXS51aWQpe2U9bjticmVha31yZXR1cm4gZX1mdW5jdGlvbiBPKHQsZSl7dmFyIHI7dm9pZCAwPT09ZSYmKGU9ITEpLHQucGF0aFNlbGVjdGlvbi5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdGhzfSxmKSwocj10LnBhdGhTZWxlY3Rpb24sZT9yLnRyYW5zaXRpb24oKTpyKS5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSl9ZnVuY3Rpb24gSSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/dC50cmFuc2l0aW9uKCk6dH12b2lkIDA9PT1lJiYoZT0hMSksdC5kaW1lbnNpb25TZWxlY3Rpb24uZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxmKTt2YXIgaT10LmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXN9LGYpO3IodC5kaW1lbnNpb25TZWxlY3Rpb24pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSxyKGkpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwLCAiK3QueSsiKSJ9KSxpLnNlbGVjdCgiLmRpbWxhYmVsIikudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pLGkuc2VsZWN0KCIuY2F0bGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24odCl7cmV0dXJuIGgodCk/InN0YXJ0IjoiZW5kIn0pLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpP3Qud2lkdGgrNTotNX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscjtoKHQpPyhlPXQud2lkdGgrNSxyPSJzdGFydCIpOihlPS01LHI9ImVuZCIpLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgidHNwYW4iKS5hdHRyKCJ4IixlKS5hdHRyKCJ0ZXh0LWFuY2hvciIscil9KTt2YXIgYT1pLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmFuZHN9LGYpLHM9YS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFuZHJlY3QiKS5hdHRyKCJjdXJzb3IiLCJtb3ZlIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTthLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdC55fSksXyhzKSxhLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSxhLmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBEKHQsZSxyLGksYSl7dmFyIG8scyxsPVtdLGM9W107Zm9yKHM9MDtzPHIubGVuZ3RoLTE7cysrKW89bi5pbnRlcnBvbGF0ZU51bWJlcihyW3NdK3Rbc10sdFtzKzFdKSxsLnB1c2gobyhhKSksYy5wdXNoKG8oMS1hKSk7dmFyIHU9Ik0gIit0WzBdKyIsIitlWzBdO2Zvcih1Kz0ibCIrclswXSsiLDAgIixzPTE7czxyLmxlbmd0aDtzKyspdSs9IkMiK2xbcy0xXSsiLCIrZVtzLTFdKyIgIitjW3MtMV0rIiwiK2Vbc10rIiAiK3Rbc10rIiwiK2Vbc10sdSs9ImwiK3Jbc10rIiwwICI7Zm9yKHUrPSJsMCwiK2krIiAiLHUrPSJsIC0iK3Jbci5sZW5ndGgtMV0rIiwwICIscz1yLmxlbmd0aC0yO3M+PTA7cy0tKXUrPSJDIitjW3NdKyIsIisoZVtzKzFdK2kpKyIgIitsW3NdKyIsIisoZVtzXStpKSsiICIrKHRbc10rcltzXSkrIiwiKyhlW3NdK2kpLHUrPSJsLSIrcltzXSsiLDAgIjtyZXR1cm4gdSs9IloifWZ1bmN0aW9uIFAodCl7dmFyIGU9dC5kaW1lbnNpb25zLHI9dC5tb2RlbCxuPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KX0pLGk9dC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSl9KSxhPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pLG89dC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5kaW1lbnNpb25JbmR9KSxzPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSxsPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSksYz1bXTtmb3IodmFyIHUgaW4gci5wYXRocylyLnBhdGhzLmhhc093blByb3BlcnR5KHUpJiZjLnB1c2goci5wYXRoc1t1XSk7ZnVuY3Rpb24gZih0KXt2YXIgZT10LmNhdGVnb3J5SW5kcy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaVtlXVt0XX0pO3JldHVybiBvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pfWMuc29ydChmdW5jdGlvbihlLHIpe3ZhciBuPWYoZSksaT1mKHIpO3JldHVybiJiYWNrd2FyZCI9PT10LnNvcnRwYXRocyYmKG4ucmV2ZXJzZSgpLGkucmV2ZXJzZSgpKSxuLnB1c2goZS52YWx1ZUluZHNbMF0pLGkucHVzaChyLnZhbHVlSW5kc1swXSksdC5idW5kbGVjb2xvcnMmJihuLnVuc2hpZnQoZS5yYXdDb2xvciksaS51bnNoaWZ0KHIucmF3Q29sb3IpKSxuPGk/LTE6bj5pPzE6MH0pO2Zvcih2YXIgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLHA9ZVswXS5tb2RlbC5jb3VudCxkPWVbMF0uY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIHYsbT1jW2ddO3Y9cD4wP2QqKG0uY291bnQvcCk6MDtmb3IodmFyIHkseD1uZXcgQXJyYXkobi5sZW5ndGgpLGI9MDtiPG0uY2F0ZWdvcnlJbmRzLmxlbmd0aDtiKyspe3ZhciBfPW0uY2F0ZWdvcnlJbmRzW2JdLHc9aVtiXVtfXSxrPWFbYl07eFtrXT1uW2tdW3ddLG5ba11bd10rPXY7dmFyIFQ9dC5kaW1lbnNpb25zW2tdLmNhdGVnb3JpZXNbd10sQT1ULmJhbmRzLmxlbmd0aCxNPVQuYmFuZHNbQS0xXTtpZih2b2lkIDA9PT1NfHxtLnJhd0NvbG9yIT09TS5yYXdDb2xvcil7dmFyIFM9dm9pZCAwPT09TT8wOk0ueStNLmhlaWdodDtULmJhbmRzLnB1c2goe2tleTpTLGNvbG9yOm0uY29sb3IscmF3Q29sb3I6bS5yYXdDb2xvcixoZWlnaHQ6dix3aWR0aDpULndpZHRoLGNvdW50Om0uY291bnQseTpTLGNhdGVnb3J5Vmlld01vZGVsOlQscGFyY2F0c1ZpZXdNb2RlbDp0fSl9ZWxzZXt2YXIgRT1ULmJhbmRzW0EtMV07RS5oZWlnaHQrPXYsRS5jb3VudCs9bS5jb3VudH19eT0iaHNwbGluZSI9PT10LnBhdGhTaGFwZT9EKHMseCxsLHYsLjUpOkQocyx4LGwsdiwwKSxoW2ddPXtrZXk6bS52YWx1ZUluZHNbMF0sbW9kZWw6bSxoZWlnaHQ6dixsZWZ0WHM6cyx0b3BZczp4LGRpbVdpZHRoczpsLHN2Z0Q6eSxwYXJjYXRzVmlld01vZGVsOnR9fXQucGF0aHM9aH1mdW5jdGlvbiBSKHQpe3ZhciBlPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2Rpc3BsYXlJbmQ6dC5kaXNwbGF5SW5kLGRpbWVuc2lvbkluZDp0LmRpbWVuc2lvbkluZH19KTtlLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pO3ZhciByPVtdO2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dLmRpbWVuc2lvbkluZCxhPXQubW9kZWwuZGltZW5zaW9uc1tpXTtyLnB1c2goRih0LGEpKX10LmRpbWVuc2lvbnM9cn1mdW5jdGlvbiBGKHQsZSl7dmFyIHIsbj10Lm1vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLGk9ZS5kaXNwbGF5SW5kO3I9NDArKG4+MT8odC53aWR0aC04MC0xNikvKG4tMSk6MCkqaTt2YXIgYSxvLHMsbCxjLHU9W10sZj10Lm1vZGVsLm1heENhdHMsaD1lLmNhdGVnb3JpZXMubGVuZ3RoLHA9ZS5jb3VudCxkPXQuaGVpZ2h0LTgqKGYtMSksZz04KihmLWgpLzIsdj1lLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5SW5kOnQuZGlzcGxheUluZCxjYXRlZ29yeUluZDp0LmNhdGVnb3J5SW5kfX0pO2Zvcih2LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pLGM9MDtjPGg7YysrKWw9dltjXS5jYXRlZ29yeUluZCxvPWUuY2F0ZWdvcmllc1tsXSxhPXA+MD9vLmNvdW50L3AqZDowLHM9e2tleTpvLnZhbHVlSW5kc1swXSxtb2RlbDpvLHdpZHRoOjE2LGhlaWdodDphLHk6bnVsbCE9PW8uZHJhZ1k/by5kcmFnWTpnLGJhbmRzOltdLHBhcmNhdHNWaWV3TW9kZWw6dH0sZz1nK2ErOCx1LnB1c2gocyk7cmV0dXJue2tleTplLmRpbWVuc2lvbkluZCx4Om51bGwhPT1lLmRyYWdYP2UuZHJhZ1g6cix5OjAsd2lkdGg6MTYsbW9kZWw6ZSxjYXRlZ29yaWVzOnUscGFyY2F0c1ZpZXdNb2RlbDp0LGRyYWdDYXRlZ29yeURpc3BsYXlJbmQ6bnVsbCxkcmFnRGltZW5zaW9uRGlzcGxheUluZDpudWxsLGluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM6bnVsbCxpbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM6bnVsbCxkcmFnSGFzTW92ZWQ6bnVsbCxwb3RlbnRpYWxDbGlja0JhbmQ6bnVsbH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3Uocix0LG4sZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcyNCwiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGkiOjczNSxkMzoxNTQsdGlueWNvbG9yMjo1MjF9XSwxMDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGFyY2F0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YS5fcGFwZXIscz1hLl9zaXplO24odCxvLGUse3dpZHRoOnMudyxoZWlnaHQ6cy5oLG1hcmdpbjp7dDpzLnQscjpzLnIsYjpzLmIsbDpzLmx9fSxyLGkpfX0seyIuL3BhcmNhdHMiOjEwMTN9XSwxMDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPXtkb21haW46cyh7bmFtZToicGFyY29vcmRzIix0cmFjZTohMCxlZGl0VHlwZToiY2FsYyJ9KSxob3ZlcmxhYmVsOnZvaWQgMCxsYWJlbGZvbnQ6byh7ZWRpdFR5cGU6ImNhbGMifSksdGlja2ZvbnQ6byh7ZWRpdFR5cGU6ImNhbGMifSkscmFuZ2Vmb250Om8oe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6YygiZGltZW5zaW9uIix7bGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aWNrdmFsczpsKHt9LGEudGlja3ZhbHMse2VkaXRUeXBlOiJjYWxjIn0pLHRpY2t0ZXh0Omwoe30sYS50aWNrdGV4dCx7ZWRpdFR5cGU6ImNhbGMifSksdGlja2Zvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIzcyIsZWRpdFR5cGU6ImNhbGMifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0sY29uc3RyYWludHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6IjEtMiIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSxtdWx0aXNlbGVjdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9KSxsaW5lOmwobigibGluZSIse2NvbG9yc2NhbGVEZmx0OiJWaXJpZGlzIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOmksZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NjAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NH1dLDEwMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoImQzIiksYT10KCIuLi8uLi9saWIvZ3VwIikua2V5RnVuLG89dCgiLi4vLi4vbGliL2d1cCIpLnJlcGVhdCxzPXQoIi4uLy4uL2xpYiIpLnNvcnRlckFzYyxsPW4uYmFyLnNuYXBSYXRpbztmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQqKDEtbCkrZSpsfXZhciB1PW4uYmFyLnNuYXBDbG9zZTtmdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQqKDEtdSkrZSp1fWZ1bmN0aW9uIGgodCxlLHIpe2lmKGQoZSxyKSlyZXR1cm4gZTtmb3IodmFyIG49dFswXSxpPW4sYT0xO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2lmKGU8ZihuLG8pKXJldHVybiBjKG4saSk7aWYoZTxvfHxhPT09dC5sZW5ndGgtMSlyZXR1cm4gYyhvLG4pO2k9bixuPW99fWZ1bmN0aW9uIHAodCxlLHIpe2lmKGQoZSxyKSlyZXR1cm4gZTtmb3IodmFyIG49dFt0Lmxlbmd0aC0xXSxpPW4sYT10Lmxlbmd0aC0yO2E+PTA7YS0tKXt2YXIgbz10W2FdO2lmKGU+ZihuLG8pKXJldHVybiBjKG4saSk7aWYoZT5vfHxhPT09dC5sZW5ndGgtMSlyZXR1cm4gYyhvLG4pO2k9bixuPW99fWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZih0Pj1lW3JdWzBdJiZ0PD1lW3JdWzFdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGcodCl7dC5hdHRyKCJ4Iiwtbi5iYXIuY2FwdHVyZVdpZHRoLzIpLmF0dHIoIndpZHRoIixuLmJhci5jYXB0dXJlV2lkdGgpfWZ1bmN0aW9uIHYodCl7dC5hdHRyKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLmF0dHIoImZpbGwiLCJ5ZWxsb3ciKS5hdHRyKCJvcGFjaXR5IiwwKX1mdW5jdGlvbiBtKHQpe2lmKCF0LmJydXNoLmZpbHRlclNwZWNpZmllZClyZXR1cm4iMCwiK3QuaGVpZ2h0O2Zvcih2YXIgZSxyLG4saT15KHQuYnJ1c2guZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpLHQuaGVpZ2h0KSxhPVswXSxvPWkubGVuZ3RoP2lbMF1bMF06bnVsbCxzPTA7czxpLmxlbmd0aDtzKyspcj0oZT1pW3NdKVsxXS1lWzBdLGEucHVzaChvKSxhLnB1c2gociksKG49cysxKTxpLmxlbmd0aCYmKG89aVtuXVswXS1lWzFdKTtyZXR1cm4gYS5wdXNoKHQuaGVpZ2h0KSxhfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0KmV9KS5zb3J0KHMpfSl9ZnVuY3Rpb24geCgpe2kuc2VsZWN0KGRvY3VtZW50LmJvZHkpLnN0eWxlKCJjdXJzb3IiLG51bGwpfWZ1bmN0aW9uIGIodCl7dC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixtKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9aS5zZWxlY3QodCkuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0LCAuaGlnaGxpZ2h0LXNoYWRvdyIpO2IoZT9yLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLmJhci5zbmFwRHVyYXRpb24pLmVhY2goImVuZCIsZSk6cil9ZnVuY3Rpb24gdyh0LGUpe3ZhciByLGk9dC5icnVzaCxhPU5hTixvPXt9O2lmKGkuZmlsdGVyU3BlY2lmaWVkKXt2YXIgcz10LmhlaWdodCxsPWkuZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpLGM9eShsLHMpLHU9TmFOLGY9TmFOLGg9TmFOO2ZvcihyPTA7cjw9Yy5sZW5ndGg7cisrKXt2YXIgcD1jW3JdO2lmKHAmJnBbMF08PWUmJmU8PXBbMV0pe3U9cjticmVha31pZihmPXI/ci0xOk5hTixwJiZwWzBdPmUpe2g9cjticmVha319aWYoYT11LGlzTmFOKGEpJiYoYT1pc05hTihmKXx8aXNOYU4oaCk/aXNOYU4oZik/aDpmOmUtY1tmXVsxXTxjW2hdWzBdLWU/ZjpoKSwhaXNOYU4oYSkpe3ZhciBkPWNbYV0sZz1mdW5jdGlvbih0LGUpe3ZhciByPW4uYmFyLmhhbmRsZUhlaWdodDtpZighKGU+dFsxXStyfHxlPHRbMF0tcikpcmV0dXJuIGU+PS45KnRbMV0rLjEqdFswXT8ibiI6ZTw9LjkqdFswXSsuMSp0WzFdPyJzIjoibnMifShkLGUpO2cmJihvLmludGVydmFsPWxbYV0sby5pbnRlcnZhbFBpeD1kLG8ucmVnaW9uPWcpfX1pZih0Lm9yZGluYWwmJiFvLnJlZ2lvbil7dmFyIHY9dC51bml0VGlja3ZhbHMsbT10LnVuaXRUb1BhZGRlZFB4LmludmVydChlKTtmb3Iocj0wO3I8di5sZW5ndGg7cisrKXt2YXIgeD1bLjI1KnZbTWF0aC5tYXgoci0xLDApXSsuNzUqdltyXSwuMjUqdltNYXRoLm1pbihyKzEsdi5sZW5ndGgtMSldKy43NSp2W3JdXTtpZihtPj14WzBdJiZtPD14WzFdKXtvLmNsaWNrYWJsZU9yZGluYWxSYW5nZT14O2JyZWFrfX19cmV0dXJuIG99ZnVuY3Rpb24gayh0KXt0Lm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHQpe2lmKGkuZXZlbnQucHJldmVudERlZmF1bHQoKSwhdC5wYXJlbnQuaW5CcnVzaERyYWcpe3ZhciBlPXcodCx0LmhlaWdodC1pLm1vdXNlKHRoaXMpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcpLHI9ImNyb3NzaGFpciI7ZS5jbGlja2FibGVPcmRpbmFsUmFuZ2U/cj0icG9pbnRlciI6ZS5yZWdpb24mJihyPWUucmVnaW9uKyItcmVzaXplIiksaS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoImN1cnNvciIscil9fSkub24oIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKHQpe3QucGFyZW50LmluQnJ1c2hEcmFnfHx4KCl9KS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKHQpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dC5oZWlnaHQtaS5tb3VzZSh0aGlzKVsxXS0yKm4udmVydGljYWxQYWRkaW5nLHI9dC51bml0VG9QYWRkZWRQeC5pbnZlcnQoZSksYT10LmJydXNoLG89dyh0LGUpLHM9by5pbnRlcnZhbCxsPWEuc3ZnQnJ1c2g7aWYobC53YXNEcmFnZ2VkPSExLGwuZ3JhYmJpbmdCYXI9Im5zIj09PW8ucmVnaW9uLGwuZ3JhYmJpbmdCYXIpe3ZhciBjPXMubWFwKHQudW5pdFRvUGFkZGVkUHgpO2wuZ3JhYlBvaW50PWUtY1swXS1uLnZlcnRpY2FsUGFkZGluZyxsLmJhckxlbmd0aD1jWzFdLWNbMF19bC5jbGlja2FibGVPcmRpbmFsUmFuZ2U9by5jbGlja2FibGVPcmRpbmFsUmFuZ2UsbC5zdGF5aW5nSW50ZXJ2YWxzPXQubXVsdGlzZWxlY3QmJmEuZmlsdGVyU3BlY2lmaWVkP2EuZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpOltdLHMmJihsLnN0YXlpbmdJbnRlcnZhbHM9bC5zdGF5aW5nSW50ZXJ2YWxzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdFswXSE9PXNbMF0mJnRbMV0hPT1zWzFdfSkpLGwuc3RhcnRFeHRlbnQ9by5yZWdpb24/c1sicyI9PT1vLnJlZ2lvbj8xOjBdOnIsdC5wYXJlbnQuaW5CcnVzaERyYWc9ITAsbC5icnVzaFN0YXJ0Q2FsbGJhY2soKX0pLm9uKCJkcmFnIixmdW5jdGlvbih0KXtpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBlPXQuaGVpZ2h0LWkubW91c2UodGhpcylbMV0tMipuLnZlcnRpY2FsUGFkZGluZyxyPXQuYnJ1c2guc3ZnQnJ1c2g7ci53YXNEcmFnZ2VkPSEwLHIuZ3JhYmJpbmdCYXI/ci5uZXdFeHRlbnQ9W2Utci5ncmFiUG9pbnQsZStyLmJhckxlbmd0aC1yLmdyYWJQb2ludF0ubWFwKHQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KTpyLm5ld0V4dGVudD1bci5zdGFydEV4dGVudCx0LnVuaXRUb1BhZGRlZFB4LmludmVydChlKV0uc29ydChzKTt2YXIgYT1NYXRoLm1heCgwLC1yLm5ld0V4dGVudFswXSksbz1NYXRoLm1heCgwLHIubmV3RXh0ZW50WzFdLTEpO3IubmV3RXh0ZW50WzBdKz1hLHIubmV3RXh0ZW50WzFdLT1vLHIuZ3JhYmJpbmdCYXImJihyLm5ld0V4dGVudFsxXSs9YSxyLm5ld0V4dGVudFswXS09byksdC5icnVzaC5maWx0ZXJTcGVjaWZpZWQ9ITAsci5leHRlbnQ9ci5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChbci5uZXdFeHRlbnRdKSxyLmJydXNoQ2FsbGJhY2sodCksXyh0aGlzLnBhcmVudE5vZGUpfSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKHQpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dC5icnVzaCxyPWUuZmlsdGVyLG49ZS5zdmdCcnVzaCxhPW4uZ3JhYmJpbmdCYXI7aWYobi5ncmFiYmluZ0Jhcj0hMSxuLmdyYWJMb2NhdGlvbj12b2lkIDAsdC5wYXJlbnQuaW5CcnVzaERyYWc9ITEseCgpLCFuLndhc0RyYWdnZWQpcmV0dXJuIG4ud2FzRHJhZ2dlZD12b2lkIDAsbi5jbGlja2FibGVPcmRpbmFsUmFuZ2U/ZS5maWx0ZXJTcGVjaWZpZWQmJnQubXVsdGlzZWxlY3Q/bi5leHRlbnQucHVzaChuLmNsaWNrYWJsZU9yZGluYWxSYW5nZSk6KG4uZXh0ZW50PVtuLmNsaWNrYWJsZU9yZGluYWxSYW5nZV0sZS5maWx0ZXJTcGVjaWZpZWQ9ITApOmE/KG4uZXh0ZW50PW4uc3RheWluZ0ludGVydmFscywwPT09bi5leHRlbnQubGVuZ3RoJiZBKGUpKTpBKGUpLG4uYnJ1c2hDYWxsYmFjayh0KSxfKHRoaXMucGFyZW50Tm9kZSksdm9pZCBuLmJydXNoRW5kQ2FsbGJhY2soZS5maWx0ZXJTcGVjaWZpZWQ/ci5nZXRDb25zb2xpZGF0ZWQoKTpbXSk7dmFyIG89ZnVuY3Rpb24oKXtyLnNldChyLmdldENvbnNvbGlkYXRlZCgpKX07aWYodC5vcmRpbmFsKXt2YXIgcz10LnVuaXRUaWNrdmFscztzW3MubGVuZ3RoLTFdPHNbMF0mJnMucmV2ZXJzZSgpLG4ubmV3RXh0ZW50PVtoKHMsbi5uZXdFeHRlbnRbMF0sbi5zdGF5aW5nSW50ZXJ2YWxzKSxwKHMsbi5uZXdFeHRlbnRbMV0sbi5zdGF5aW5nSW50ZXJ2YWxzKV07dmFyIGw9bi5uZXdFeHRlbnRbMV0+bi5uZXdFeHRlbnRbMF07bi5leHRlbnQ9bi5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChsP1tuLm5ld0V4dGVudF06W10pLG4uZXh0ZW50Lmxlbmd0aHx8QShlKSxuLmJydXNoQ2FsbGJhY2sodCksbD9fKHRoaXMucGFyZW50Tm9kZSxvKToobygpLF8odGhpcy5wYXJlbnROb2RlKSl9ZWxzZSBvKCk7bi5icnVzaEVuZENhbGxiYWNrKGUuZmlsdGVyU3BlY2lmaWVkP3IuZ2V0Q29uc29saWRhdGVkKCk6W10pfSkpfWZ1bmN0aW9uIFQodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIEEodCl7dC5maWx0ZXJTcGVjaWZpZWQ9ITEsdC5zdmdCcnVzaC5leHRlbnQ9W1swLDFdXX1mdW5jdGlvbiBNKHQpe2Zvcih2YXIgZSxyPXQuc2xpY2UoKSxuPVtdLGk9ci5zaGlmdCgpO2k7KXtmb3IoZT1pLnNsaWNlKCk7KGk9ci5zaGlmdCgpKSYmaVswXTw9ZVsxXTspZVsxXT1NYXRoLm1heChlWzFdLGlbMV0pO24ucHVzaChlKX1yZXR1cm4gbn1lLmV4cG9ydHM9e21ha2VCcnVzaDpmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbD1mdW5jdGlvbigpe3ZhciB0LGUscj1bXTtyZXR1cm57c2V0OmZ1bmN0aW9uKG4pe3I9bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKS5zb3J0KHMpfSkuc29ydChUKSx0PU0ociksZT1yLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybltNYXRoLm1pbih0WzBdLGVbMF0pLE1hdGgubWF4KHRbMV0sZVsxXSldfSxbMS8wLC0xLzBdKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sZ2V0Q29uc29saWRhdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHR9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiBlfX19KCk7cmV0dXJuIGwuc2V0KHIpLHtmaWx0ZXI6bCxmaWx0ZXJTcGVjaWZpZWQ6ZSxzdmdCcnVzaDp7ZXh0ZW50OltdLGJydXNoU3RhcnRDYWxsYmFjazpuLGJydXNoQ2FsbGJhY2s6KG89aSxmdW5jdGlvbih0KXt2YXIgZT10LmJydXNoLHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnQnJ1c2guZXh0ZW50Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSl9KGUpLnNsaWNlKCk7ZS5maWx0ZXIuc2V0KHIpLG8oKX0pLGJydXNoRW5kQ2FsbGJhY2s6YX19fSxlbnN1cmVBeGlzQnJ1c2g6ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uYXhpc0JydXNoKS5kYXRhKG8sYSk7ZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5heGlzQnJ1c2gsITApLGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEobyk7ZS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5jYWxsKGcpLmNhbGwodikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwICIrbi52ZXJ0aWNhbFBhZGRpbmcrIikiKSxlLmNhbGwoaykuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQtbi52ZXJ0aWNhbFBhZGRpbmd9KTt2YXIgcj10LnNlbGVjdEFsbCgiLmhpZ2hsaWdodC1zaGFkb3ciKS5kYXRhKG8pO3IuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJoaWdobGlnaHQtc2hhZG93IiwhMCkuYXR0cigieCIsLW4uYmFyLndpZHRoLzIpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5iYXIud2lkdGgrbi5iYXIuc3Ryb2tlV2lkdGgpLmF0dHIoInN0cm9rZSIsbi5iYXIuc3Ryb2tlQ29sb3IpLmF0dHIoIm9wYWNpdHkiLG4uYmFyLnN0cm9rZU9wYWNpdHkpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwiYnV0dCIpLHIuYXR0cigieTEiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLmNhbGwoYik7dmFyIGk9dC5zZWxlY3RBbGwoIi5oaWdobGlnaHQiKS5kYXRhKG8pO2kuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJoaWdobGlnaHQiLCEwKS5hdHRyKCJ4Iiwtbi5iYXIud2lkdGgvMikuYXR0cigic3Ryb2tlLXdpZHRoIixuLmJhci53aWR0aC1uLmJhci5zdHJva2VXaWR0aCkuYXR0cigic3Ryb2tlIixuLmJhci5maWxsQ29sb3IpLmF0dHIoIm9wYWNpdHkiLG4uYmFyLmZpbGxPcGFjaXR5KS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKSxpLmF0dHIoInkxIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5jYWxsKGIpfShlKX0sY2xlYW5SYW5nZXM6ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHRbMF0pPyh0PXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvcnQocyl9KSx0PWUubXVsdGlzZWxlY3Q/TSh0LnNvcnQoVCkpOlt0WzBdXSk6dD1bdC5zb3J0KHMpXSxlLnRpY2t2YWxzKXt2YXIgcj1lLnRpY2t2YWxzLnNsaWNlKCkuc29ydChzKTtpZighKHQ9dC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9W2gocix0WzBdLFtdKSxwKHIsdFsxXSxbXSldO2lmKGVbMV0+ZVswXSlyZXR1cm4gZX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5sZW5ndGgpcmV0dXJufXJldHVybiB0Lmxlbmd0aD4xP3Q6dFswXX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvZ3VwIjo2OTgsIi4vY29uc3RhbnRzIjoxMDE5LGQzOjE1NH1dLDEwMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ci5uYW1lPSJwYXJjb29yZHMiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsInBhcmNvb3JkcyIpWzBdO2UubGVuZ3RoJiZhKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInBhcmNvb3JkcyIpLGE9ZS5faGFzJiZlLl9oYXMoInBhcmNvb3JkcyIpO2kmJiFhJiYobi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIucGFyY29vcmRzIikucmVtb3ZlKCksbi5fZ2xpbWFnZXMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkuc2VsZWN0QWxsKCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXMiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe24uc2VsZWN0QWxsKCIjZmlsdGVyQmFyUGF0dGVybiIpLmF0dHIoImlkIiwiZmlsdGVyQmFyUGF0dGVybiIpfSw2MCl9fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NzgsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3ODQsIi4vcGxvdCI6MTAyNSxkMzoxNTR9XSwxMDE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwO2Z1bmN0aW9uIHModCl7cmV0dXJuIGEuaXNUeXBlZEFycmF5KHQpP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpOnR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmRpbWVuc2lvbnMubGVuZ3RoO3IrKyllLmRpbWVuc2lvbnNbcl0udmFsdWVzPXMoZS5kaW1lbnNpb25zW3JdLnZhbHVlcyk7ZS5saW5lLmNvbG9yPXMoZS5saW5lLmNvbG9yKTt2YXIgYT0hIWUubGluZS5jb2xvcnNjYWxlJiZBcnJheS5pc0FycmF5KGUubGluZS5jb2xvciksbD1hP2UubGluZS5jb2xvcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09LjU7cmV0dXJuIGV9KGUuX2xlbmd0aCksYz1hP2UubGluZS5jb2xvcnNjYWxlOltbMCxlLmxpbmUuY29sb3JdLFsxLGUubGluZS5jb2xvcl1dO3JldHVybiBuKGUsImxpbmUiKSYmaSh0LGUse3ZhbHM6bCxjb250YWluZXJTdHI6ImxpbmUiLGNMZXR0ZXI6ImMifSksbyh7bGluZUNvbG9yOmwsY3NjYWxlOmN9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU4NSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjU4OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9ndXAiOjY5OH1dLDEwMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSx2ZXJ0aWNhbFBhZGRpbmc6Mix0aWNrRGlzdGFuY2U6NTAsY2FudmFzUGl4ZWxSYXRpbzoxLGJsb2NrTGluZUNvdW50OjVlMyxsYXllcnM6WyJjb250ZXh0TGluZUxheWVyIiwiZm9jdXNMaW5lTGF5ZXIiLCJwaWNrTGluZUxheWVyIl0sYXhpc1RpdGxlT2Zmc2V0OjI4LGF4aXNFeHRlbnRPZmZzZXQ6MTAsYmFyOnt3aWR0aDo0LGNhcHR1cmVXaWR0aDoxMCxmaWxsQ29sb3I6Im1hZ2VudGEiLGZpbGxPcGFjaXR5OjEsc25hcER1cmF0aW9uOjE1MCxzbmFwUmF0aW86LjI1LHNuYXBDbG9zZTouMDEsc3Ryb2tlQ29sb3I6IndoaXRlIixzdHJva2VPcGFjaXR5OjEsc3Ryb2tlV2lkdGg6MSxoYW5kbGVIZWlnaHQ6OCxoYW5kbGVPcGFjaXR5OjEsaGFuZGxlT3ZlcmxhcDowfSxjbjp7YXhpc0V4dGVudFRleHQ6ImF4aXMtZXh0ZW50LXRleHQiLHBhcmNvb3Jkc0xpbmVMYXllcnM6InBhcmNvb3Jkcy1saW5lLWxheWVycyIscGFyY29vcmRzTGluZUxheWVyOiJwYXJjb29yZHMtbGluZXMiLHBhcmNvb3JkczoicGFyY29vcmRzIixwYXJjb29yZHNDb250cm9sVmlldzoicGFyY29vcmRzLWNvbnRyb2wtdmlldyIseUF4aXM6InktYXhpcyIsYXhpc092ZXJsYXlzOiJheGlzLW92ZXJsYXlzIixheGlzOiJheGlzIixheGlzSGVhZGluZzoiYXhpcy1oZWFkaW5nIixheGlzVGl0bGU6ImF4aXMtdGl0bGUiLGF4aXNFeHRlbnQ6ImF4aXMtZXh0ZW50IixheGlzRXh0ZW50VG9wOiJheGlzLWV4dGVudC10b3AiLGF4aXNFeHRlbnRUb3BUZXh0OiJheGlzLWV4dGVudC10b3AtdGV4dCIsYXhpc0V4dGVudEJvdHRvbToiYXhpcy1leHRlbnQtYm90dG9tIixheGlzRXh0ZW50Qm90dG9tVGV4dDoiYXhpcy1leHRlbnQtYm90dG9tLXRleHQiLGF4aXNCcnVzaDoiYXhpcy1icnVzaCJ9LGlkOntmaWx0ZXJCYXJQYXR0ZXJuOiJmaWx0ZXItYmFyLXBhdHRlcm4ifX19LHt9XSwxMDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIiksYz10KCIuL2F4aXNicnVzaCIpLHU9dCgiLi9jb25zdGFudHMiKS5tYXhEaW1lbnNpb25Db3VudCxmPXQoIi4vbWVyZ2VfbGVuZ3RoIik7ZnVuY3Rpb24gaCh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwuZGltZW5zaW9ucyxyLGkpfXZhciBpPXIoInZhbHVlcyIpLGE9cigidmlzaWJsZSIpO2lmKGkmJmkubGVuZ3RofHwoYT1lLnZpc2libGU9ITEpLGEpe3IoImxhYmVsIikscigidGlja3ZhbHMiKSxyKCJ0aWNrdGV4dCIpLHIoInRpY2tmb3JtYXQiKSxyKCJyYW5nZSIpLHIoIm11bHRpc2VsZWN0Iik7dmFyIG89cigiY29uc3RyYWludHJhbmdlIik7byYmKGUuY29uc3RyYWludHJhbmdlPWMuY2xlYW5SYW5nZXMobyxlKSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9dmFyIGQ9dC5kaW1lbnNpb25zO0FycmF5LmlzQXJyYXkoZCkmJmQubGVuZ3RoPnUmJihuLmxvZygicGFyY29vcmRzIHRyYWNlcyBzdXBwb3J0IHVwIHRvICIrdSsiIGRpbWVuc2lvbnMgYXQgdGhlIG1vbWVudCIpLGQuc3BsaWNlKHUpKTt2YXIgZz1zKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmh9KSx2PWZ1bmN0aW9uKHQsZSxyLG8scyl7dmFyIGw9cygibGluZS5jb2xvciIscik7aWYoaSh0LCJsaW5lIikmJm4uaXNBcnJheU9yVHlwZWRBcnJheShsKSl7aWYobC5sZW5ndGgpcmV0dXJuIHMoImxpbmUuY29sb3JzY2FsZSIpLGEodCxlLG8scyx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KSxsLmxlbmd0aDtlLmxpbmUuY29sb3I9cn1yZXR1cm4gMS8wfSh0LGUscixjLHApO28oZSxjLHApLEFycmF5LmlzQXJyYXkoZykmJmcubGVuZ3RofHwoZS52aXNpYmxlPSExKSxmKGUsZywidmFsdWVzIix2KTt2YXIgbT17ZmFtaWx5OmMuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGMuZm9udC5zaXplLzEuMiksY29sb3I6Yy5mb250LmNvbG9yfTtuLmNvZXJjZUZvbnQocCwibGFiZWxmb250IixtKSxuLmNvZXJjZUZvbnQocCwidGlja2ZvbnQiLG0pLG4uY29lcmNlRm9udChwLCJyYW5nZWZvbnQiLG0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU4NywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjU4OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzQ0LCIuLi8uLi9wbG90cy9kb21haW4iOjc3MywiLi9hdHRyaWJ1dGVzIjoxMDE1LCIuL2F4aXNicnVzaCI6MTAxNiwiLi9jb25zdGFudHMiOjEwMTksIi4vbWVyZ2VfbGVuZ3RoIjoxMDIzfV0sMTAyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNvbG9yYmFyPXtjb250YWluZXI6ImxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0sbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJwYXJjb29yZHMiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJnbCIsInJlZ2wiLCJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMDE1LCIuL2Jhc2VfcGxvdCI6MTAxNywiLi9jYWxjIjoxMDE4LCIuL2RlZmF1bHRzIjoxMDIwLCIuL3Bsb3QiOjEwMjV9XSwxMDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCBwMCwgcDEsIHAyLCBwMyxcbiAgICAgICAgICAgICAgIHA0LCBwNSwgcDYsIHA3LFxuICAgICAgICAgICAgICAgcDgsIHA5LCBwYSwgcGIsXG4gICAgICAgICAgICAgICBwYywgcGQsIHBlO1xuXG5hdHRyaWJ1dGUgdmVjNCBwZjtcblxudW5pZm9ybSBtYXQ0IGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCxcbiAgICAgICAgICAgICBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRDtcblxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgdmlld0JveFBvc2l0aW9uLFxuICAgICAgICAgICAgIHZpZXdCb3hTaXplO1xuXG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcbnVuaWZvcm0gZmxvYXQgbWFza0hlaWdodDtcblxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzQgdW5pdF8xID0gdmVjNCgxLCAxLCAxLCAxKTtcblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXRfMSwgdW5pdF8xKTtcbn1cblxuZmxvYXQgYXhpc1koXG4gICAgICAgIGZsb2F0IHgsXG4gICAgICAgIG1hdDQgZFs0XSxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRFxuICAgICkge1xuXG4gICAgZmxvYXQgeTEgPSB2YWwoZFswXSwgZGltMUEpICsgdmFsKGRbMV0sIGRpbTFCKSArIHZhbChkWzJdLCBkaW0xQykgKyB2YWwoZFszXSwgZGltMUQpO1xuICAgIGZsb2F0IHkyID0gdmFsKGRbMF0sIGRpbTJBKSArIHZhbChkWzFdLCBkaW0yQikgKyB2YWwoZFsyXSwgZGltMkMpICsgdmFsKGRbM10sIGRpbTJEKTtcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XG59XG5cbmNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7XG5cbmludCBtb2QyKGludCBhKSB7XG4gICAgcmV0dXJuIGEgLSAyICogKGEgLyAyKTtcbn1cblxuaW50IG1vZDgoaW50IGEpIHtcbiAgICByZXR1cm4gYSAtIDggKiAoYSAvIDgpO1xufVxuXG52ZWM0IHplcm8gPSB2ZWM0KDAsIDAsIDAsIDApO1xudmVjNCB1bml0XzAgPSB2ZWM0KDEsIDEsIDEsIDEpO1xudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xuXG5tYXQ0IG1jbGFtcChtYXQ0IG0sIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMV0sIGxvWzFdLCBoaVsxXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVsyXSwgbG9bMl0sIGhpWzJdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcbn1cblxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWNsYW1wKHAsIGxvLCBoaSkgPT0gcDtcbn1cblxuYm9vbCB3aXRoaW5Cb3VuZGluZ0JveChcbiAgICAgICAgbWF0NCBkWzRdLFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaURcbiAgICApIHtcblxuICAgIHJldHVybiBtc2hvdyhkWzBdLCBsb0EsIGhpQSkgJiZcbiAgICAgICAgICAgbXNob3coZFsxXSwgbG9CLCBoaUIpICYmXG4gICAgICAgICAgIG1zaG93KGRbMl0sIGxvQywgaGlDKSAmJlxuICAgICAgICAgICBtc2hvdyhkWzNdLCBsb0QsIGhpRCk7XG59XG5cbmJvb2wgd2l0aGluUmFzdGVyTWFzayhtYXQ0IGRbNF0sIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBoZWlnaHQpIHtcbiAgICBib29sIHJlc3VsdCA9IHRydWU7XG4gICAgaW50IGJpdEluQnl0ZVN0ZXBwZXI7XG4gICAgZmxvYXQgdmFsWSwgdmFsdWVZLCBzY2FsZVg7XG4gICAgaW50IGhpdCwgYml0bWFzaywgdmFsWDtcbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyBrKyspIHtcbiAgICAgICAgICAgICAgICBiaXRJbkJ5dGVTdGVwcGVyID0gbW9kOChqICogNCArIGspO1xuICAgICAgICAgICAgICAgIHZhbFggPSBpICogMiArIGogLyAyO1xuICAgICAgICAgICAgICAgIHZhbFkgPSBkW2ldW2pdW2tdO1xuICAgICAgICAgICAgICAgIHZhbHVlWSA9IHZhbFkgKiAoaGVpZ2h0IC0gMS4wKSArIDAuNTtcbiAgICAgICAgICAgICAgICBzY2FsZVggPSAoZmxvYXQodmFsWCkgKyAwLjUpIC8gOC4wO1xuICAgICAgICAgICAgICAgIGhpdCA9IGludCh0ZXh0dXJlMkQobWFzaywgdmVjMihzY2FsZVgsICh2YWx1ZVkgKyAwLjUpIC8gaGVpZ2h0KSlbM10gKiAyNTUuMCkgLyBpbnQocG93KDIuMCwgZmxvYXQoYml0SW5CeXRlU3RlcHBlcikpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgbW9kMihoaXQpID09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmVjNCBwb3NpdGlvbihcbiAgICAgICAgZmxvYXQgZGVwdGgsXG4gICAgICAgIHZlYzIgcmVzb2x1dGlvbiwgdmVjMiB2aWV3Qm94UG9zaXRpb24sIHZlYzIgdmlld0JveFNpemUsXG4gICAgICAgIG1hdDQgZGltc1s0XSxcbiAgICAgICAgZmxvYXQgc2lnbnVtLFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJELFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaUQsXG4gICAgICAgIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBtYXNrSGVpZ2h0XG4gICAgKSB7XG5cbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbnVtICsgMC41O1xuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBkaW1zLCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQpO1xuXG4gICAgZmxvYXQgc2hvdyA9IGZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbkJvdW5kaW5nQm94KGRpbXMsIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEKVxuICAgICAgICAgICAgICAgICAgICAgICAgICYmIHdpdGhpblJhc3Rlck1hc2soZGltcywgbWFzaywgbWFza0hlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XG4gICAgZmxvYXQgZGVwdGhPckhpZGUgPSBkZXB0aCArIDIuMCAqICgxLjAgLSBzaG93KTtcblxuICAgIHJldHVybiB2ZWM0KFxuICAgICAgICB4eVByb2plY3Rpb24gKiAoMi4wICogdmlld0JveFhZIC8gcmVzb2x1dGlvbiAtIDEuMCksXG4gICAgICAgIGRlcHRoT3JIaWRlLFxuICAgICAgICAxLjBcbiAgICApO1xufVxuXG52b2lkIG1haW4oKSB7XG5cbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcblxuICAgIG1hdDQgcFs0XTtcbiAgICBwWzBdID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XG4gICAgcFsxXSA9IG1hdDQocDQsIHA1LCBwNiwgcDcpO1xuICAgIHBbMl0gPSBtYXQ0KHA4LCBwOSwgcGEsIHBiKTtcbiAgICBwWzNdID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb24oXG4gICAgICAgIDEuMCAtIHByb21pbmVuY2UsXG4gICAgICAgIHJlc29sdXRpb24sIHZpZXdCb3hQb3NpdGlvbiwgdmlld0JveFNpemUsXG4gICAgICAgIHAsXG4gICAgICAgIHNpZ24ocGZbM10pLFxuICAgICAgICBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXG4gICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlELFxuICAgICAgICBtYXNrLCBtYXNrSGVpZ2h0XG4gICAgKTtcblxuICAgIGZsb2F0IGNsYW1wZWRDb2xvckluZGV4ID0gY2xhbXAoKHByb21pbmVuY2UgLSBjb2xvckNsYW1wWzBdKSAvIChjb2xvckNsYW1wWzFdIC0gY29sb3JDbGFtcFswXSksIDAuMCwgMS4wKTtcbiAgICBmcmFnQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMigoY2xhbXBlZENvbG9ySW5kZXggKiAyNTUuMCArIDAuNSkgLyAyNTYuMCwgMC41KSk7XG59XG4iXSksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgcDAsIHAxLCBwMiwgcDMsXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxuICAgICAgICAgICAgICAgcGMsIHBkLCBwZTtcblxuYXR0cmlidXRlIHZlYzQgcGY7XG5cbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQ7XG5cbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94U2l6ZTtcblxudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcblxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzIgeHlQcm9qZWN0aW9uID0gdmVjMigxLCAxKTtcblxudmVjNCB1bml0ID0gdmVjNCgxLCAxLCAxLCAxKTtcblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXQsIHVuaXQpO1xufVxuXG5mbG9hdCBheGlzWShcbiAgICAgICAgZmxvYXQgeCxcbiAgICAgICAgbWF0NCBkWzRdLFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJEXG4gICAgKSB7XG5cbiAgICBmbG9hdCB5MSA9IHZhbChkWzBdLCBkaW0xQSkgKyB2YWwoZFsxXSwgZGltMUIpICsgdmFsKGRbMl0sIGRpbTFDKSArIHZhbChkWzNdLCBkaW0xRCk7XG4gICAgZmxvYXQgeTIgPSB2YWwoZFswXSwgZGltMkEpICsgdmFsKGRbMV0sIGRpbTJCKSArIHZhbChkWzJdLCBkaW0yQykgKyB2YWwoZFszXSwgZGltMkQpO1xuICAgIHJldHVybiB5MSAqICgxLjAgLSB4KSArIHkyICogeDtcbn1cblxudmVjNCBwb3NpdGlvbihcbiAgICAgICAgZmxvYXQgZGVwdGgsXG4gICAgICAgIHZlYzIgcmVzb2x1dGlvbiwgdmVjMiB2aWV3Qm94UG9zaXRpb24sIHZlYzIgdmlld0JveFNpemUsXG4gICAgICAgIG1hdDQgZGltc1s0XSxcbiAgICAgICAgZmxvYXQgc2lnbnVtLFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJEXG4gICAgKSB7XG5cbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbnVtICsgMC41O1xuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBkaW1zLCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQpO1xuXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XG5cbiAgICByZXR1cm4gdmVjNChcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgMS4wXG4gICAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuXG4gICAgZmxvYXQgcHJvbWluZW5jZSA9IGFicyhwZlszXSk7XG5cbiAgICBtYXQ0IHBbNF07XG4gICAgcFswXSA9IG1hdDQocDAsIHAxLCBwMiwgcDMpO1xuICAgIHBbMV0gPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcbiAgICBwWzJdID0gbWF0NChwOCwgcDksIHBhLCBwYik7XG4gICAgcFszXSA9IG1hdDQocGMsIHBkLCBwZSwgYWJzKHBmKSk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uKFxuICAgICAgICAxLjAgLSBwcm9taW5lbmNlLFxuICAgICAgICByZXNvbHV0aW9uLCB2aWV3Qm94UG9zaXRpb24sIHZpZXdCb3hTaXplLFxuICAgICAgICBwLFxuICAgICAgICBzaWduKHBmWzNdKSxcbiAgICAgICAgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEXG4gICAgKTtcblxuICAgIGZsb2F0IGNsYW1wZWRDb2xvckluZGV4ID0gY2xhbXAoKHByb21pbmVuY2UgLSBjb2xvckNsYW1wWzBdKSAvIChjb2xvckNsYW1wWzFdIC0gY29sb3JDbGFtcFswXSksIDAuMCwgMS4wKTtcbiAgICBmcmFnQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMigoY2xhbXBlZENvbG9ySW5kZXggKiAyNTUuMCArIDAuNSkgLyAyNTYuMCwgMC41KSk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgcDAsIHAxLCBwMiwgcDMsXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxuICAgICAgICAgICAgICAgcGMsIHBkLCBwZTtcblxuYXR0cmlidXRlIHZlYzQgcGY7XG5cbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XG5cbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94U2l6ZTtcblxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcbnVuaWZvcm0gZmxvYXQgbWFza0hlaWdodDtcblxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzQgdW5pdF8xID0gdmVjNCgxLCAxLCAxLCAxKTtcblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXRfMSwgdW5pdF8xKTtcbn1cblxuZmxvYXQgYXhpc1koXG4gICAgICAgIGZsb2F0IHgsXG4gICAgICAgIG1hdDQgZFs0XSxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRFxuICAgICkge1xuXG4gICAgZmxvYXQgeTEgPSB2YWwoZFswXSwgZGltMUEpICsgdmFsKGRbMV0sIGRpbTFCKSArIHZhbChkWzJdLCBkaW0xQykgKyB2YWwoZFszXSwgZGltMUQpO1xuICAgIGZsb2F0IHkyID0gdmFsKGRbMF0sIGRpbTJBKSArIHZhbChkWzFdLCBkaW0yQikgKyB2YWwoZFsyXSwgZGltMkMpICsgdmFsKGRbM10sIGRpbTJEKTtcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XG59XG5cbmNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7XG5cbmludCBtb2QyKGludCBhKSB7XG4gICAgcmV0dXJuIGEgLSAyICogKGEgLyAyKTtcbn1cblxuaW50IG1vZDgoaW50IGEpIHtcbiAgICByZXR1cm4gYSAtIDggKiAoYSAvIDgpO1xufVxuXG52ZWM0IHplcm8gPSB2ZWM0KDAsIDAsIDAsIDApO1xudmVjNCB1bml0XzAgPSB2ZWM0KDEsIDEsIDEsIDEpO1xudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xuXG5tYXQ0IG1jbGFtcChtYXQ0IG0sIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMV0sIGxvWzFdLCBoaVsxXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVsyXSwgbG9bMl0sIGhpWzJdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcbn1cblxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWNsYW1wKHAsIGxvLCBoaSkgPT0gcDtcbn1cblxuYm9vbCB3aXRoaW5Cb3VuZGluZ0JveChcbiAgICAgICAgbWF0NCBkWzRdLFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaURcbiAgICApIHtcblxuICAgIHJldHVybiBtc2hvdyhkWzBdLCBsb0EsIGhpQSkgJiZcbiAgICAgICAgICAgbXNob3coZFsxXSwgbG9CLCBoaUIpICYmXG4gICAgICAgICAgIG1zaG93KGRbMl0sIGxvQywgaGlDKSAmJlxuICAgICAgICAgICBtc2hvdyhkWzNdLCBsb0QsIGhpRCk7XG59XG5cbmJvb2wgd2l0aGluUmFzdGVyTWFzayhtYXQ0IGRbNF0sIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBoZWlnaHQpIHtcbiAgICBib29sIHJlc3VsdCA9IHRydWU7XG4gICAgaW50IGJpdEluQnl0ZVN0ZXBwZXI7XG4gICAgZmxvYXQgdmFsWSwgdmFsdWVZLCBzY2FsZVg7XG4gICAgaW50IGhpdCwgYml0bWFzaywgdmFsWDtcbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyBrKyspIHtcbiAgICAgICAgICAgICAgICBiaXRJbkJ5dGVTdGVwcGVyID0gbW9kOChqICogNCArIGspO1xuICAgICAgICAgICAgICAgIHZhbFggPSBpICogMiArIGogLyAyO1xuICAgICAgICAgICAgICAgIHZhbFkgPSBkW2ldW2pdW2tdO1xuICAgICAgICAgICAgICAgIHZhbHVlWSA9IHZhbFkgKiAoaGVpZ2h0IC0gMS4wKSArIDAuNTtcbiAgICAgICAgICAgICAgICBzY2FsZVggPSAoZmxvYXQodmFsWCkgKyAwLjUpIC8gOC4wO1xuICAgICAgICAgICAgICAgIGhpdCA9IGludCh0ZXh0dXJlMkQobWFzaywgdmVjMihzY2FsZVgsICh2YWx1ZVkgKyAwLjUpIC8gaGVpZ2h0KSlbM10gKiAyNTUuMCkgLyBpbnQocG93KDIuMCwgZmxvYXQoYml0SW5CeXRlU3RlcHBlcikpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgbW9kMihoaXQpID09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmVjNCBwb3NpdGlvbihcbiAgICAgICAgZmxvYXQgZGVwdGgsXG4gICAgICAgIHZlYzIgcmVzb2x1dGlvbiwgdmVjMiB2aWV3Qm94UG9zaXRpb24sIHZlYzIgdmlld0JveFNpemUsXG4gICAgICAgIG1hdDQgZGltc1s0XSxcbiAgICAgICAgZmxvYXQgc2lnbnVtLFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJELFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaUQsXG4gICAgICAgIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBtYXNrSGVpZ2h0XG4gICAgKSB7XG5cbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbnVtICsgMC41O1xuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBkaW1zLCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQpO1xuXG4gICAgZmxvYXQgc2hvdyA9IGZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbkJvdW5kaW5nQm94KGRpbXMsIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEKVxuICAgICAgICAgICAgICAgICAgICAgICAgICYmIHdpdGhpblJhc3Rlck1hc2soZGltcywgbWFzaywgbWFza0hlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XG4gICAgZmxvYXQgZGVwdGhPckhpZGUgPSBkZXB0aCArIDIuMCAqICgxLjAgLSBzaG93KTtcblxuICAgIHJldHVybiB2ZWM0KFxuICAgICAgICB4eVByb2plY3Rpb24gKiAoMi4wICogdmlld0JveFhZIC8gcmVzb2x1dGlvbiAtIDEuMCksXG4gICAgICAgIGRlcHRoT3JIaWRlLFxuICAgICAgICAxLjBcbiAgICApO1xufVxuXG52b2lkIG1haW4oKSB7XG5cbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcblxuICAgIG1hdDQgcFs0XTtcbiAgICBwWzBdID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XG4gICAgcFsxXSA9IG1hdDQocDQsIHA1LCBwNiwgcDcpO1xuICAgIHBbMl0gPSBtYXQ0KHA4LCBwOSwgcGEsIHBiKTtcbiAgICBwWzNdID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb24oXG4gICAgICAgIDEuMCAtIHByb21pbmVuY2UsXG4gICAgICAgIHJlc29sdXRpb24sIHZpZXdCb3hQb3NpdGlvbiwgdmlld0JveFNpemUsXG4gICAgICAgIHAsXG4gICAgICAgIHNpZ24ocGZbM10pLFxuICAgICAgICBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXG4gICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlELFxuICAgICAgICBtYXNrLCBtYXNrSGVpZ2h0XG4gICAgKTtcblxuICAgIGZyYWdDb2xvciA9IHZlYzQocGYucmdiLCAxLjApO1xufVxuIl0pLHM9bihbInByZWNpc2lvbiBsb3dwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJdKSxsPXQoIi4uLy4uL2xpYiIpLGM9MWUtNix1PTFlLTcsZj0yMDQ4LGg9NjQscD0yLGQ9NCxnPTgsdj1oL2csbT1bMTE5LDExOSwxMTldLHk9bmV3IFVpbnQ4QXJyYXkoNCkseD1uZXcgVWludDhBcnJheSg0KSxiPXtzaGFwZTpbMjU2LDFdLGZvcm1hdDoicmdiYSIsdHlwZToidWludDgiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0In07ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPXQuX2dsO2EuZW5hYmxlKGEuU0NJU1NPUl9URVNUKSxhLnNjaXNzb3IoZSxyLG4saSksdC5jbGVhcih7Y29sb3I6WzAsMCwwLDBdLGRlcHRoOjF9KX1mdW5jdGlvbiB3KHQsZSxyLG4saSxhKXt2YXIgbz1hLmtleTtyLmRyYXdDb21wbGV0ZWR8fCghZnVuY3Rpb24odCl7dC5yZWFkKHt4OjAseTowLHdpZHRoOjEsaGVpZ2h0OjEsZGF0YTp5fSl9KHQpLHIuZHJhd0NvbXBsZXRlZD0hMCksZnVuY3Rpb24gcyhsKXt2YXIgYztjPU1hdGgubWluKG4saS1sKm4pLGEub2Zmc2V0PXAqbCpuLGEuY291bnQ9cCpjLDA9PT1sJiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHIuY3VycmVudFJhZnNbb10pLGRlbGV0ZSByLmN1cnJlbnRSYWZzW29dLF8odCxhLnNjaXNzb3JYLGEuc2Npc3NvclksYS5zY2lzc29yV2lkdGgsYS52aWV3Qm94U2l6ZVsxXSkpLHIuY2xlYXJPbmx5fHwoZShhKSxsKm4rYzxpJiYoci5jdXJyZW50UmFmc1tvXT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cyhsKzEpfSkpLHIuZHJhd0NvbXBsZXRlZD0hMSl9KDApfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4odD4+PjgqZSklMjU2LzI1NX1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgbixpLGEsbz1bXTtmb3IoaT0wO2k8dDtpKyspZm9yKGE9MDthPHA7YSsrKWZvcihuPTA7bjxkO24rKylvLnB1c2goZVtpKmgrcipkK25dKSxyKmQrbj09PWgtMSYmYSUyPT0wJiYob1tvLmxlbmd0aC0xXSo9LTEpO3JldHVybiBvfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4scCxkLHksQT1lLmNvbnRleHQsTT1lLnBpY2ssUz1lLnJlZ2wsRT17Y3VycmVudFJhZnM6e30sZHJhd0NvbXBsZXRlZDohMCxjbGVhck9ubHk6ITF9LEM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9MDtyPDE2O3IrKyllWyJwIityLnRvU3RyaW5nKDE2KV09dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pO3JldHVybiBlfShTKSxMPVMudGV4dHVyZShiKTtPKGUpO3ZhciB6PVMoe3Byb2ZpbGU6ITEsYmxlbmQ6e2VuYWJsZTpBLGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOjEsZHN0QWxwaGE6MX0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sY29sb3I6WzAsMCwwLDBdfSxkZXB0aDp7ZW5hYmxlOiFBLG1hc2s6ITAsZnVuYzoibGVzcyIscmFuZ2U6WzAsMV19LGN1bGw6e2VuYWJsZTohMCxmYWNlOiJiYWNrIn0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp7eDpTLnByb3AoInNjaXNzb3JYIikseTpTLnByb3AoInNjaXNzb3JZIiksd2lkdGg6Uy5wcm9wKCJzY2lzc29yV2lkdGgiKSxoZWlnaHQ6Uy5wcm9wKCJzY2lzc29ySGVpZ2h0Iil9fSx2aWV3cG9ydDp7eDpTLnByb3AoInZpZXdwb3J0WCIpLHk6Uy5wcm9wKCJ2aWV3cG9ydFkiKSx3aWR0aDpTLnByb3AoInZpZXdwb3J0V2lkdGgiKSxoZWlnaHQ6Uy5wcm9wKCJ2aWV3cG9ydEhlaWdodCIpfSxkaXRoZXI6ITEsdmVydDpNP286QT9hOmksZnJhZzpzLHByaW1pdGl2ZToibGluZXMiLGxpbmVXaWR0aDoxLGF0dHJpYnV0ZXM6Qyx1bmlmb3Jtczp7cmVzb2x1dGlvbjpTLnByb3AoInJlc29sdXRpb24iKSx2aWV3Qm94UG9zaXRpb246Uy5wcm9wKCJ2aWV3Qm94UG9zaXRpb24iKSx2aWV3Qm94U2l6ZTpTLnByb3AoInZpZXdCb3hTaXplIiksZGltMUE6Uy5wcm9wKCJkaW0xQSIpLGRpbTJBOlMucHJvcCgiZGltMkEiKSxkaW0xQjpTLnByb3AoImRpbTFCIiksZGltMkI6Uy5wcm9wKCJkaW0yQiIpLGRpbTFDOlMucHJvcCgiZGltMUMiKSxkaW0yQzpTLnByb3AoImRpbTJDIiksZGltMUQ6Uy5wcm9wKCJkaW0xRCIpLGRpbTJEOlMucHJvcCgiZGltMkQiKSxsb0E6Uy5wcm9wKCJsb0EiKSxoaUE6Uy5wcm9wKCJoaUEiKSxsb0I6Uy5wcm9wKCJsb0IiKSxoaUI6Uy5wcm9wKCJoaUIiKSxsb0M6Uy5wcm9wKCJsb0MiKSxoaUM6Uy5wcm9wKCJoaUMiKSxsb0Q6Uy5wcm9wKCJsb0QiKSxoaUQ6Uy5wcm9wKCJoaUQiKSxwYWxldHRlOkwsbWFzazpTLnByb3AoIm1hc2tUZXh0dXJlIiksbWFza0hlaWdodDpTLnByb3AoIm1hc2tIZWlnaHQiKSxjb2xvckNsYW1wOlMucHJvcCgiY29sb3JDbGFtcCIpfSxvZmZzZXQ6Uy5wcm9wKCJvZmZzZXQiKSxjb3VudDpTLnByb3AoImNvdW50Iil9KTtmdW5jdGlvbiBPKHQpe3I9dC5tb2RlbCxuPXQudmlld01vZGVsLHA9bi5kaW1lbnNpb25zLnNsaWNlKCksZD1wWzBdP3BbMF0udmFsdWVzLmxlbmd0aDowO3ZhciBlPXIubGluZXMsaT1NP2UuY29sb3IubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIHIvZS5jb2xvci5sZW5ndGh9KTplLmNvbG9yLGE9TWF0aC5tYXgoMS8yNTUsTWF0aC5wb3coMS9pLmxlbmd0aCwxLzMpKSxvPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1lLmxlbmd0aCxhPVtdLG89MDtvPHQ7bysrKWZvcih2YXIgcz0wO3M8aDtzKyspYS5wdXNoKHM8aT9lW3NdLnBhZGRlZFVuaXRWYWx1ZXNbb106cz09PWgtMT8obj1yW29dLE1hdGgubWF4KGMsTWF0aC5taW4oMS1jLG4pKSk6cz49aC00P2sobyxoLTItcyk6LjUpO3JldHVybiBhfShkLHAsaSk7IWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPDE2O24rKyl0WyJwIituLnRvU3RyaW5nKDE2KV0oVChlLHIsbikpfShDLGQsbyksTD1TLnRleHR1cmUobC5leHRlbmRGbGF0KHtkYXRhOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8MjU2O2krKyl7dmFyIGE9dChpLzI1NSk7bi5wdXNoKChlP206YSkuY29uY2F0KHIpKX1yZXR1cm4gbn0oci51bml0VG9Db2xvcixBLE1hdGgucm91bmQoMjU1KihBP2E6MSkpKX0sYikpfXZhciBJPVswLDFdO3ZhciBEPVtdO2Z1bmN0aW9uIFAodCxlLG4saSxhLG8scyxjLHUsZixoKXt2YXIgcCxkLGcsdixtPVt0LGVdLHk9WzAsMV0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuWzAsMSwyLDNdLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KDE2KX0pfSk7Zm9yKHA9MDtwPDI7cCsrKWZvcih2PW1bcF0sZD0wO2Q8NDtkKyspZm9yKGc9MDtnPDE2O2crKyl5W3BdW2RdW2ddPWcrMTYqZD09PXY/MTowO3ZhciB4PXIubGluZXMuY2FudmFzT3ZlcmRyYWcsYj1yLmRvbWFpbixfPXIuY2FudmFzV2lkdGgsdz1yLmNhbnZhc0hlaWdodDtyZXR1cm4gbC5leHRlbmRGbGF0KHtrZXk6cyxyZXNvbHV0aW9uOltfLHddLHZpZXdCb3hQb3NpdGlvbjpbbit4LGldLHZpZXdCb3hTaXplOlthLG9dLGk6dCxpaTplLGRpbTFBOnlbMF1bMF0sZGltMUI6eVswXVsxXSxkaW0xQzp5WzBdWzJdLGRpbTFEOnlbMF1bM10sZGltMkE6eVsxXVswXSxkaW0yQjp5WzFdWzFdLGRpbTJDOnlbMV1bMl0sZGltMkQ6eVsxXVszXSxjb2xvckNsYW1wOkksc2Npc3Nvclg6KGM9PT11PzA6bit4KSsoci5wYWQubC14KStyLmxheW91dFdpZHRoKmIueFswXSxzY2lzc29yV2lkdGg6KGM9PT1mP18tbit4OmErLjUpKyhjPT09dT9uK3g6MCksc2Npc3Nvclk6aStyLnBhZC5iK3IubGF5b3V0SGVpZ2h0KmIueVswXSxzY2lzc29ySGVpZ2h0Om8sdmlld3BvcnRYOnIucGFkLmwteCtyLmxheW91dFdpZHRoKmIueFswXSx2aWV3cG9ydFk6ci5wYWQuYityLmxheW91dEhlaWdodCpiLnlbMF0sdmlld3BvcnRXaWR0aDpfLHZpZXdwb3J0SGVpZ2h0Ond9LGgpfXJldHVybntzZXRDb2xvckRvbWFpbjpmdW5jdGlvbih0KXtJWzBdPXRbMF0sSVsxXT10WzFdfSxyZW5kZXI6ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzPXQubGVuZ3RoLGw9MS8wLGM9LTEvMDtmb3IoaT0wO2k8cztpKyspdFtpXS5kaW0yLmNhbnZhc1g+YyYmKGM9dFtpXS5kaW0yLmNhbnZhc1gsbz1pKSx0W2ldLmRpbTEuY2FudmFzWDxsJiYobD10W2ldLmRpbTEuY2FudmFzWCxhPWkpOzA9PT1zJiZfKFMsMCwwLHIuY2FudmFzV2lkdGgsci5jYW52YXNIZWlnaHQpO3ZhciBoPUE/e306ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj1bMCwxXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bMCwxLDIsM10ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMTYpfSl9KTtmb3IodD0wO3Q8Mjt0KyspZm9yKGU9MDtlPDQ7ZSsrKWZvcihyPTA7cjwxNjtyKyspe3ZhciBpLGE9cisxNiplO2k9YTxwLmxlbmd0aD9wW2FdLmJydXNoLmZpbHRlci5nZXRCb3VuZHMoKVt0XTp0LG5bdF1bZV1bcl09aSsoMip0LTEpKnV9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWYtMTtyZXR1cm5bTWF0aC5tYXgoMCxNYXRoLmZsb29yKGVbMF0qcikpLE1hdGgubWluKHIsTWF0aC5jZWlsKGVbMV0qcikpXX1mb3IodmFyIHM9QXJyYXkuYXBwbHkobnVsbCxuZXcgQXJyYXkoZip2KSkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIDI1NX0pLGw9MDtsPHAubGVuZ3RoO2wrKyl7dmFyIGM9bCVnLGg9KGwtYykvZyxkPU1hdGgucG93KDIsYyksbT1wW2xdLHg9bS5icnVzaC5maWx0ZXIuZ2V0KCk7aWYoISh4Lmxlbmd0aDwyKSlmb3IodmFyIGI9bygwLHhbMF0pWzFdLF89MTtfPHgubGVuZ3RoO18rKyl7Zm9yKHZhciB3PW8oMCx4W19dKSxrPWIrMTtrPHdbMF07aysrKXNbayp2K2hdJj1+ZDtiPU1hdGgubWF4KGIsd1sxXSl9fXZhciBUPXtzaGFwZTpbdixmXSxmb3JtYXQ6ImFscGhhIix0eXBlOiJ1aW50OCIsbWFnOiJuZWFyZXN0IixtaW46Im5lYXJlc3QiLGRhdGE6c307cmV0dXJuIHk/eShUKTp5PVMudGV4dHVyZShUKSx7bWFza1RleHR1cmU6eSxtYXNrSGVpZ2h0OmYsbG9BOm5bMF1bMF0sbG9COm5bMF1bMV0sbG9DOm5bMF1bMl0sbG9EOm5bMF1bM10saGlBOm5bMV1bMF0saGlCOm5bMV1bMV0saGlDOm5bMV1bMl0saGlEOm5bMV1bM119fSgpO2ZvcihpPTA7aTxzO2krKyl7dmFyIG09dFtpXSx4PW0uZGltMSxiPXguY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxrPW0uY2FudmFzWCxUPW0uY2FudmFzWSxNPW0uZGltMi5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LEM9bS5wYW5lbFNpemVYLEw9bS5wYW5lbFNpemVZLE89aytDO2lmKGV8fCFEW2JdfHxEW2JdWzBdIT09a3x8RFtiXVsxXSE9PU8pe0RbYl09W2ssT107dmFyIEk9UChiLE0sayxULEMsTCx4LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsaSxhLG8saCk7RS5jbGVhck9ubHk9bix3KFMseixFLGU/ci5saW5lcy5ibG9ja0xpbmVDb3VudDpkLGQsSSl9fX0scmVhZFBpeGVsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFMucmVhZCh7eDp0LHk6ZSx3aWR0aDoxLGhlaWdodDoxLGRhdGE6eH0pLHh9LHJlYWRQaXhlbHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoNCpyKm4pO3JldHVybiBTLnJlYWQoe3g6dCx5OmUsd2lkdGg6cixoZWlnaHQ6bixkYXRhOml9KSxpfSxkZXN0cm95OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHQuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLEwuZGVzdHJveSgpLHkmJnkuZGVzdHJveSgpLEMpQ1tlXS5kZXN0cm95KCl9LHVwZGF0ZTpPfX19LHsiLi4vLi4vbGliIjo3MDAsZ2xzbGlmeTo0MDF9XSwxMDIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhO2ZvcihufHwobj0xLzApLGk9MDtpPGUubGVuZ3RoO2krKykoYT1lW2ldKS52aXNpYmxlJiYobj1NYXRoLm1pbihuLGFbcl0ubGVuZ3RoKSk7Zm9yKG49PT0xLzAmJihuPTApLHQuX2xlbmd0aD1uLGk9MDtpPGUubGVuZ3RoO2krKykoYT1lW2ldKS52aXNpYmxlJiYoYS5fbGVuZ3RoPW4pO3JldHVybiBufX0se31dLDEwMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uLy4uL2xpYi9ndXAiKSxsPXMua2V5RnVuLGM9cy5yZXBlYXQsdT1zLnVud3JhcCxmPXQoIi4vY29uc3RhbnRzIiksaD10KCIuL2F4aXNicnVzaCIpLHA9dCgiLi9saW5lcyIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuISgidmlzaWJsZSJpbiB0KXx8dC52aXNpYmxlfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5yYW5nZT90LnJhbmdlWzBdOmkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQudmFsdWVzLHQuX2xlbmd0aCkscj10LnJhbmdlP3QucmFuZ2VbMV06aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdC52YWx1ZXMsdC5fbGVuZ3RoKTtyZXR1cm4haXNOYU4oZSkmJmlzRmluaXRlKGUpfHwoZT0wKSwhaXNOYU4ocikmJmlzRmluaXRlKHIpfHwocj0wKSxlPT09ciYmKDA9PT1lPyhlLT0xLHIrPTEpOihlKj0uOSxyKj0xLjEpKSxbZSxyXX1mdW5jdGlvbiB2KHQpe3JldHVybiB0LmRpbWVuc2lvbnMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5icnVzaC5maWx0ZXJTcGVjaWZpZWR9KX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgYT11KGUpLHM9YS50cmFjZSxsPWEubGluZUNvbG9yLGM9cy5saW5lLGg9Yy5yZXZlcnNlc2NhbGU/by5mbGlwU2NhbGUoYS5jc2NhbGUpOmEuY3NjYWxlLHA9cy5kb21haW4sdj1zLmRpbWVuc2lvbnMsbT10LndpZHRoLHk9cy5sYWJlbGZvbnQseD1zLnRpY2tmb250LGI9cy5yYW5nZWZvbnQsXz1pLmV4dGVuZERlZXBOb0FycmF5cyh7fSxjLHtjb2xvcjpsLm1hcChuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihnKHt2YWx1ZXM6bCxyYW5nZTpbYy5jbWluLGMuY21heF0sX2xlbmd0aDpzLl9sZW5ndGh9KSkpLGJsb2NrTGluZUNvdW50OmYuYmxvY2tMaW5lQ291bnQsY2FudmFzT3ZlcmRyYWc6Zi5vdmVyZHJhZypmLmNhbnZhc1BpeGVsUmF0aW99KSx3PU1hdGguZmxvb3IobSoocC54WzFdLXAueFswXSkpLGs9TWF0aC5mbG9vcih0LmhlaWdodCoocC55WzFdLXAueVswXSkpLFQ9dC5tYXJnaW58fHtsOjgwLHI6ODAsdDoxMDAsYjo4MH0sQT13LE09aztyZXR1cm57a2V5OnIsY29sQ291bnQ6di5maWx0ZXIoZCkubGVuZ3RoLGRpbWVuc2lvbnM6dix0aWNrRGlzdGFuY2U6Zi50aWNrRGlzdGFuY2UsdW5pdFRvQ29sb3I6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxyPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnJnYih0WzFdKX0pLGk9InJnYiIuc3BsaXQoIiIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5jbGFtcCghMCkuZG9tYWluKGUpLnJhbmdlKHIubWFwKChpPXQsZnVuY3Rpb24odCl7cmV0dXJuIHRbaV19KSkpO3ZhciBpfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfX0oaCksbGluZXM6XyxsYWJlbEZvbnQ6eSx0aWNrRm9udDp4LHJhbmdlRm9udDpiLGxheW91dFdpZHRoOm0sbGF5b3V0SGVpZ2h0OnQuaGVpZ2h0LGRvbWFpbjpwLHRyYW5zbGF0ZVg6cC54WzBdKm0sdHJhbnNsYXRlWTp0LmhlaWdodC1wLnlbMV0qdC5oZWlnaHQscGFkOlQsY2FudmFzV2lkdGg6QSpmLmNhbnZhc1BpeGVsUmF0aW8rMipfLmNhbnZhc092ZXJkcmFnLGNhbnZhc0hlaWdodDpNKmYuY2FudmFzUGl4ZWxSYXRpbyx3aWR0aDpBLGhlaWdodDpNLGNhbnZhc1BpeGVsUmF0aW86Zi5jYW52YXNQaXhlbFJhdGlvfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgYT1yLndpZHRoLG89ci5oZWlnaHQscz1yLmRpbWVuc2lvbnMsbD1yLmNhbnZhc1BpeGVsUmF0aW8sYz1mdW5jdGlvbih0KXtyZXR1cm4gYSp0L01hdGgubWF4KDEsci5jb2xDb3VudC0xKX0sdT1mLnZlcnRpY2FsUGFkZGluZy9vLHA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5yYW5nZShbZSx0LWVdKX0obyxmLnZlcnRpY2FsUGFkZGluZyksbT17a2V5OnIua2V5LHhTY2FsZTpjLG1vZGVsOnIsaW5CcnVzaERyYWc6ITF9LHk9e307cmV0dXJuIG0uZGltZW5zaW9ucz1zLmZpbHRlcihkKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgZD1mdW5jdGlvbih0LGUpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihnKHQpKS5yYW5nZShbZSwxLWVdKX0oYSx1KSx4PXlbYS5sYWJlbF07eVthLmxhYmVsXT0oeHx8MCkrMTt2YXIgYj1hLmxhYmVsKyh4PyJfXyIreDoiIiksXz1hLmNvbnN0cmFpbnRyYW5nZSx3PV8mJl8ubGVuZ3RoO3cmJiFBcnJheS5pc0FycmF5KF9bMF0pJiYoXz1bX10pO3ZhciBrPXc/Xy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGQpfSk6W1swLDFdXSxUPWEudmFsdWVzO1QubGVuZ3RoPmEuX2xlbmd0aCYmKFQ9VC5zbGljZSgwLGEuX2xlbmd0aCkpO3ZhciBBLE09YS50aWNrdmFscztmdW5jdGlvbiBTKHQsZSl7cmV0dXJue3ZhbDp0LHRleHQ6QVtlXX19ZnVuY3Rpb24gRSh0LGUpe3JldHVybiB0LnZhbC1lLnZhbH1pZihBcnJheS5pc0FycmF5KE0pJiZNLmxlbmd0aCl7QT1hLnRpY2t0ZXh0LEFycmF5LmlzQXJyYXkoQSkmJkEubGVuZ3RoP0EubGVuZ3RoPk0ubGVuZ3RoP0E9QS5zbGljZSgwLE0ubGVuZ3RoKTpNLmxlbmd0aD5BLmxlbmd0aCYmKE09TS5zbGljZSgwLEEubGVuZ3RoKSk6QT1NLm1hcChuLmZvcm1hdChhLnRpY2tmb3JtYXQpKTtmb3IodmFyIEM9MTtDPE0ubGVuZ3RoO0MrKylpZihNW0NdPE1bQy0xXSl7Zm9yKHZhciBMPU0ubWFwKFMpLnNvcnQoRSksej0wO3o8TS5sZW5ndGg7eisrKU1bel09TFt6XS52YWwsQVt6XT1MW3pdLnRleHQ7YnJlYWt9fWVsc2UgTT12b2lkIDA7cmV0dXJue2tleTpiLGxhYmVsOmEubGFiZWwsdGlja0Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja3ZhbHM6TSx0aWNrdGV4dDpBLG9yZGluYWw6ISFNLG11bHRpc2VsZWN0OmEubXVsdGlzZWxlY3QseEluZGV4OnMsY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleDpzLHZpc2libGVJbmRleDphLl9pbmRleCxoZWlnaHQ6byx2YWx1ZXM6VCxwYWRkZWRVbml0VmFsdWVzOlQubWFwKGQpLHVuaXRUaWNrdmFsczpNJiZNLm1hcChkKSx4U2NhbGU6Yyx4OmMocyksY2FudmFzWDpjKHMpKmwsdW5pdFRvUGFkZGVkUHg6cCxkb21haW5TY2FsZTpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvLHMsbD1nKHIpO3JldHVybiBpP24uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihpLm1hcCgobz1uLmZvcm1hdChyLnRpY2tmb3JtYXQpLHM9YSxzP2Z1bmN0aW9uKHQsZSl7dmFyIHI9c1tlXTtyZXR1cm4gbnVsbD09cj9vKHQpOnJ9Om8pKSkucmFuZ2UoaS5tYXAoZnVuY3Rpb24ocil7dmFyIG49KHItbFswXSkvKGxbMV0tbFswXSk7cmV0dXJuIHQtZStuKigyKmUtdCl9KSk6bi5zY2FsZS5saW5lYXIoKS5kb21haW4obCkucmFuZ2UoW3QtZSxlXSl9KG8sZi52ZXJ0aWNhbFBhZGRpbmcsYSxNLEEpLG9yZGluYWxTY2FsZTpmdW5jdGlvbih0KXtpZih0LnRpY2t2YWxzKXt2YXIgZT1nKHQpO3JldHVybiBuLnNjYWxlLm9yZGluYWwoKS5kb21haW4odC50aWNrdmFscykucmFuZ2UodC50aWNrdmFscy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZVswXSkvKGVbMV0tZVswXSl9KSl9fShhKSxwYXJlbnQ6bSxtb2RlbDpyLGJydXNoOmgubWFrZUJydXNoKHQsdyxrLGZ1bmN0aW9uKCl7dC5saW5lUGlja0FjdGl2ZSghMSl9LGZ1bmN0aW9uKCl7dmFyIGU9bTtlLmZvY3VzTGF5ZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMsITApO3ZhciByPXYoZSk7IXQuY29udGV4dFNob3duKCkmJnI/KGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITApLHQuY29udGV4dFNob3duKCEwKSk6dC5jb250ZXh0U2hvd24oKSYmIXImJihlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwLCEwKSx0LmNvbnRleHRTaG93bighMSkpfSxmdW5jdGlvbihyKXt2YXIgbj1tO2lmKG4uZm9jdXNMYXllci5yZW5kZXIobi5wYW5lbHMsITApLG4ucGlja0xheWVyJiZuLnBpY2tMYXllci5yZW5kZXIobi5wYW5lbHMsITApLHQubGluZVBpY2tBY3RpdmUoITApLGUmJmUuZmlsdGVyQ2hhbmdlZCl7dmFyIG89ZC5pbnZlcnQscz1yLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAobykuc29ydChpLnNvcnRlckFzYyl9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pO2UuZmlsdGVyQ2hhbmdlZChuLmtleSxhLl9pbmRleCxzKX19KX19KSxtfWZ1bmN0aW9uIHgodCl7dC5jbGFzc2VkKGYuY24uYXhpc0V4dGVudFRleHQsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImN1cnNvciIsImRlZmF1bHQiKS5zdHlsZSgidXNlci1zZWxlY3QiLCJub25lIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxkKXt2YXIgZyxiLF89KGc9ITAsYj0hMSx7bGluZVBpY2tBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Zz0hIXQ6Z30sY29udGV4dFNob3duOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2I9ISF0OmJ9fSksdz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdSh0KS50cmFjZS52aXNpYmxlfSkubWFwKG0uYmluZCgwLHMpKS5tYXAoeS5iaW5kKDAsXyxkKSk7ci5lYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZXh0ZW5kRmxhdCh0LHdbZV0pfSk7dmFyIGs9ci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5lYWNoKGZ1bmN0aW9uKHQpe3Qudmlld01vZGVsPXdbMF0sdC5tb2RlbD10LnZpZXdNb2RlbD90LnZpZXdNb2RlbC5tb2RlbDpudWxsfSksVD1udWxsO2suZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2t9KS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24odCl7aWYoXy5saW5lUGlja0FjdGl2ZSgpJiZ0LmxpbmVMYXllciYmZCYmZC5ob3Zlcil7dmFyIGU9bi5ldmVudCxyPXRoaXMud2lkdGgsaT10aGlzLmhlaWdodCxhPW4ubW91c2UodGhpcyksbz1hWzBdLHM9YVsxXTtpZihvPDB8fHM8MHx8bz49cnx8cz49aSlyZXR1cm47dmFyIGw9dC5saW5lTGF5ZXIucmVhZFBpeGVsKG8saS0xLXMpLGM9MCE9PWxbM10sdT1jP2xbMl0rMjU2KihsWzFdKzI1NipsWzBdKTpudWxsLGY9e3g6byx5OnMsY2xpZW50WDplLmNsaWVudFgsY2xpZW50WTplLmNsaWVudFksZGF0YUluZGV4OnQubW9kZWwua2V5LGN1cnZlTnVtYmVyOnV9O3UhPT1UJiYoYz9kLmhvdmVyKGYpOmQudW5ob3ZlciYmZC51bmhvdmVyKGYpLFQ9dSl9fSksay5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucGljaz8uMDE6MX0pLGUuc3R5bGUoImJhY2tncm91bmQiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApIik7dmFyIEE9ZS5zZWxlY3RBbGwoIi4iK2YuY24ucGFyY29vcmRzKS5kYXRhKHcsbCk7QS5leGl0KCkucmVtb3ZlKCksQS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jbi5wYXJjb29yZHMsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEEuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5tb2RlbC50cmFuc2xhdGVYKyIsIit0Lm1vZGVsLnRyYW5zbGF0ZVkrIikifSk7dmFyIE09QS5zZWxlY3RBbGwoIi4iK2YuY24ucGFyY29vcmRzQ29udHJvbFZpZXcpLmRhdGEoYyxsKTtNLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3LCEwKSxNLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QubW9kZWwucGFkLmwrIiwiK3QubW9kZWwucGFkLnQrIikifSk7dmFyIFM9TS5zZWxlY3RBbGwoIi4iK2YuY24ueUF4aXMpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30sbCk7ZnVuY3Rpb24gRSh0LGUpe2Zvcih2YXIgcj1lLnBhbmVsc3x8KGUucGFuZWxzPVtdKSxuPXQuZGF0YSgpLGk9bi5sZW5ndGgtMSxhPTA7YTxpO2ErKyl7dmFyIG89clthXXx8KHJbYV09e30pLHM9blthXSxsPW5bYSsxXTtvLmRpbTE9cyxvLmRpbTI9bCxvLmNhbnZhc1g9cy5jYW52YXNYLG8ucGFuZWxTaXplWD1sLmNhbnZhc1gtcy5jYW52YXNYLG8ucGFuZWxTaXplWT1lLm1vZGVsLmNhbnZhc0hlaWdodCxvLnk9MCxvLmNhbnZhc1k9MH19Uy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jbi55QXhpcywhMCksTS5lYWNoKGZ1bmN0aW9uKHQpe0UoUyx0KX0pLGsuZWFjaChmdW5jdGlvbih0KXtpZih0LnZpZXdNb2RlbCl7IXQubGluZUxheWVyfHxkP3QubGluZUxheWVyPXAodGhpcyx0KTp0LmxpbmVMYXllci51cGRhdGUodCksKHQua2V5fHwwPT09dC5rZXkpJiYodC52aWV3TW9kZWxbdC5rZXldPXQubGluZUxheWVyKTt2YXIgZT0hdC5jb250ZXh0fHxkO3QubGluZUxheWVyLnJlbmRlcih0LnZpZXdNb2RlbC5wYW5lbHMsZSl9fSksUy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnhTY2FsZSh0LnhJbmRleCkrIiwgMCkifSksUy5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLm9uKCJkcmFnIixmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudDtfLmxpbmVQaWNrQWN0aXZlKCExKSx0Lng9TWF0aC5tYXgoLWYub3ZlcmRyYWcsTWF0aC5taW4odC5tb2RlbC53aWR0aCtmLm92ZXJkcmFnLG4uZXZlbnQueCkpLHQuY2FudmFzWD10LngqdC5tb2RlbC5jYW52YXNQaXhlbFJhdGlvLFMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSkuZWFjaChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlLnhJbmRleCksZS5jYW52YXNYPWUueCplLm1vZGVsLmNhbnZhc1BpeGVsUmF0aW99KSxFKFMsZSksUy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT1NYXRoLmFicyh0LnhJbmRleC1lLnhJbmRleCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnhTY2FsZSh0LnhJbmRleCkrIiwgMCkifSksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIsIDApIiksUy5lYWNoKGZ1bmN0aW9uKHIsbixpKXtpPT09dC5wYXJlbnQua2V5JiYoZS5kaW1lbnNpb25zW25dPXIpfSksZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMSwhdihlKSksZS5mb2N1c0xheWVyLnJlbmRlciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscyl9KS5vbigiZHJhZ2VuZCIsZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7dC54PXQueFNjYWxlKHQueEluZGV4KSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxFKFMsZSksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIsIDApIn0pLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIXYoZSkpLGUuZm9jdXNMYXllciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscyksZS5waWNrTGF5ZXImJmUucGlja0xheWVyLnJlbmRlcihlLnBhbmVscywhMCksXy5saW5lUGlja0FjdGl2ZSghMCksZCYmZC5heGVzTW92ZWQmJmQuYXhlc01vdmVkKGUua2V5LGUuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleH0pKX0pKSxTLmV4aXQoKS5yZW1vdmUoKTt2YXIgQz1TLnNlbGVjdEFsbCgiLiIrZi5jbi5heGlzT3ZlcmxheXMpLmRhdGEoYyxsKTtDLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmNuLmF4aXNPdmVybGF5cywhMCksQy5zZWxlY3RBbGwoIi4iK2YuY24uYXhpcykucmVtb3ZlKCk7dmFyIEw9Qy5zZWxlY3RBbGwoIi4iK2YuY24uYXhpcykuZGF0YShjLGwpO0wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuY24uYXhpcywhMCksTC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubW9kZWwuaGVpZ2h0L3QubW9kZWwudGlja0Rpc3RhbmNlLHI9dC5kb21haW5TY2FsZSxpPXIuZG9tYWluKCk7bi5zZWxlY3QodGhpcykuY2FsbChuLnN2Zy5heGlzKCkub3JpZW50KCJsZWZ0IikudGlja1NpemUoNCkub3V0ZXJUaWNrU2l6ZSgyKS50aWNrcyhlLHQudGlja0Zvcm1hdCkudGlja1ZhbHVlcyh0Lm9yZGluYWw/aTpudWxsKS50aWNrRm9ybWF0KHQub3JkaW5hbD9mdW5jdGlvbih0KXtyZXR1cm4gdH06bnVsbCkuc2NhbGUocikpLGEuZm9udChMLnNlbGVjdEFsbCgidGV4dCIpLHQubW9kZWwudGlja0ZvbnQpfSksTC5zZWxlY3RBbGwoIi5kb21haW4sIC50aWNrPmxpbmUiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC4yNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IiksTC5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1zaGFkb3ciLCIxcHggMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IDFweCAxcHggI2ZmZiIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iikuc3R5bGUoInVzZXItc2VsZWN0Iiwibm9uZSIpO3ZhciB6PUMuc2VsZWN0QWxsKCIuIitmLmNuLmF4aXNIZWFkaW5nKS5kYXRhKGMsbCk7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jbi5heGlzSGVhZGluZywhMCk7dmFyIE89ei5zZWxlY3RBbGwoIi4iK2YuY24uYXhpc1RpdGxlKS5kYXRhKGMsbCk7Ty5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoZi5jbi5heGlzVGl0bGUsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImN1cnNvciIsImV3LXJlc2l6ZSIpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIiksTy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKy1mLmF4aXNUaXRsZU9mZnNldCsiKSIpLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQubGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe2EuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLmxhYmVsRm9udCl9KTt2YXIgST1DLnNlbGVjdEFsbCgiLiIrZi5jbi5heGlzRXh0ZW50KS5kYXRhKGMsbCk7SS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jbi5heGlzRXh0ZW50LCEwKTt2YXIgRD1JLnNlbGVjdEFsbCgiLiIrZi5jbi5heGlzRXh0ZW50VG9wKS5kYXRhKGMsbCk7RC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jbi5heGlzRXh0ZW50VG9wLCEwKSxELmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrLWYuYXhpc0V4dGVudE9mZnNldCsiKSIpO3ZhciBQPUQuc2VsZWN0QWxsKCIuIitmLmNuLmF4aXNFeHRlbnRUb3BUZXh0KS5kYXRhKGMsbCk7ZnVuY3Rpb24gUih0LGUpe2lmKHQub3JkaW5hbClyZXR1cm4iIjt2YXIgcj10LmRvbWFpblNjYWxlLmRvbWFpbigpO3JldHVybiBuLmZvcm1hdCh0LnRpY2tGb3JtYXQpKHJbZT9yLmxlbmd0aC0xOjBdKX1QLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChmLmNuLmF4aXNFeHRlbnRUb3BUZXh0LCEwKS5jYWxsKHgpLFAudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gUih0LCEwKX0pLmVhY2goZnVuY3Rpb24odCl7YS5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwucmFuZ2VGb250KX0pO3ZhciBGPUkuc2VsZWN0QWxsKCIuIitmLmNuLmF4aXNFeHRlbnRCb3R0b20pLmRhdGEoYyxsKTtGLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmNuLmF4aXNFeHRlbnRCb3R0b20sITApLEYuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodC5tb2RlbC5oZWlnaHQrZi5heGlzRXh0ZW50T2Zmc2V0KSsiKSJ9KTt2YXIgQj1GLnNlbGVjdEFsbCgiLiIrZi5jbi5heGlzRXh0ZW50Qm90dG9tVGV4dCkuZGF0YShjLGwpO0IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKGYuY24uYXhpc0V4dGVudEJvdHRvbVRleHQsITApLmF0dHIoImR5IiwiMC43NWVtIikuY2FsbCh4KSxCLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIFIodCl9KS5lYWNoKGZ1bmN0aW9uKHQpe2EuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLnJhbmdlRm9udCl9KSxoLmVuc3VyZUF4aXNCcnVzaChDKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo1ODksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2d1cCI6Njk4LCIuL2F4aXNicnVzaCI6MTAxNiwiLi9jb25zdGFudHMiOjEwMTksIi4vbGluZXMiOjEwMjIsZDM6MTU0fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNvb3JkcyIpLGk9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsYT1yLl90b3BwYXBlcixvPXIuX3BhcGVyZGl2LHM9ci5fZ2xjb250YWluZXI7aWYoaSh0KSl7dmFyIGw9e30sYz17fSx1PXt9LGY9e30saD1yLl9zaXplO2UuZm9yRWFjaChmdW5jdGlvbihlLHIpe3ZhciBuPWVbMF0udHJhY2U7dVtyXT1uLmluZGV4O3ZhciBpPWZbcl09bi5fZnVsbElucHV0LmluZGV4O2xbcl09dC5kYXRhW2ldLmRpbWVuc2lvbnMsY1tyXT10LmRhdGFbaV0uZGltZW5zaW9ucy5zbGljZSgpfSk7bihvLGEscyxlLHt3aWR0aDpoLncsaGVpZ2h0OmguaCxtYXJnaW46e3Q6aC50LHI6aC5yLGI6aC5iLGw6aC5sfX0se2ZpbHRlckNoYW5nZWQ6ZnVuY3Rpb24oZSxuLGkpe3ZhciBhPWNbZV1bbl0sbz1pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkscz0iZGltZW5zaW9uc1siK24rIl0uY29uc3RyYWludHJhbmdlIixsPXIuX3RyYWNlUHJlR1VJW3QuX2Z1bGxEYXRhW3VbZV1dLl9mdWxsSW5wdXQudWlkXTtpZih2b2lkIDA9PT1sW3NdKXt2YXIgaD1hLmNvbnN0cmFpbnRyYW5nZTtsW3NdPWh8fG51bGx9dmFyIHA9dC5fZnVsbERhdGFbdVtlXV0uZGltZW5zaW9uc1tuXTtvLmxlbmd0aD8oMT09PW8ubGVuZ3RoJiYobz1vWzBdKSxhLmNvbnN0cmFpbnRyYW5nZT1vLHAuY29uc3RyYWludHJhbmdlPW8uc2xpY2UoKSxvPVtvXSk6KGRlbGV0ZSBhLmNvbnN0cmFpbnRyYW5nZSxkZWxldGUgcC5jb25zdHJhaW50cmFuZ2Usbz1udWxsKTt2YXIgZD17fTtkW3NdPW8sdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIsW2QsW2ZbZV1dXSl9LGhvdmVyOmZ1bmN0aW9uKGUpe3QuZW1pdCgicGxvdGx5X2hvdmVyIixlKX0sdW5ob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoInBsb3RseV91bmhvdmVyIixlKX0sYXhlc01vdmVkOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4hKCJ2aXNpYmxlImluIHQpfHx0LnZpc2libGV9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49ZS5pbmRleE9mKHIpLGk9dC5pbmRleE9mKG4pO3JldHVybi0xPT09aSYmKGkrPWUubGVuZ3RoKSxpfXZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBpKHIsdCxlKS1pKHIsdCxuKX19KGNbZV0uZmlsdGVyKG4pKTtsW2VdLnNvcnQoYSksY1tlXS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIW4odCl9KS5zb3J0KGZ1bmN0aW9uKHQpe3JldHVybiBjW2VdLmluZGV4T2YodCl9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbZV0uc3BsaWNlKGxbZV0uaW5kZXhPZih0KSwxKSxsW2VdLnNwbGljZShjW2VdLmluZGV4T2YodCksMCx0KX0pLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLFt7ZGltZW5zaW9uczpbbFtlXV19LFtmW2VdXV0pfX0pfX19LHsiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6NzEzLCIuL3BhcmNvb3JkcyI6MTAyNH1dLDEwMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz1pKHtlZGl0VHlwZToiY2FsYyIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJwbG90In0pO2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVsMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkbGFiZWw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxzY2FsZWdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOmwoe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoiYXV0byIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250Omwoe30sYyx7fSksaW5zaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSxvdXRzaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sZm9udDpsKHt9LGMse30pLHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGRvbWFpbjpzKHtuYW1lOiJwaWUiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGhvbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc29ydDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNvdW50ZXJjbG9ja3dpc2UiLGVkaXRUeXBlOiJjYWxjIn0scm90YXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOi0zNjAsbWF4OjM2MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxwdWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6bCh7fSxjLHt9KSx0aXRsZXBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6ImNhbGMifX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi4vLi4vcGxvdHMvZG9tYWluIjo3NzMsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0fV0sMTAyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPW4uZ2V0TW9kdWxlKCJwaWUiKSxyPWkodC5jYWxjZGF0YSxlKVswXTtlLnBsb3QodCxyKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygicGllIiksYT1lLl9oYXMmJmUuX2hhcygicGllIik7aSYmIWEmJm4uX3BpZWxheWVyLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9nZXRfZGF0YSI6Nzg0LCIuLi8uLi9yZWdpc3RyeSI6ODI5fV0sMTAyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxhPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4vaGVscGVycyIpLGw9e307ZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4hIWUmJighIShlPWEoZSkpLmlzVmFsaWQoKSYmKGU9by5hZGRPcGFjaXR5KGUsZS5nZXRBbHBoYSgpKSx0W3JdfHwodFtyXT1lKSxlKSl9fWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuPUpTT04uc3RyaW5naWZ5KHQpLGk9ZVtuXTtpZighaSl7Zm9yKGk9dC5zbGljZSgpLHI9MDtyPHQubGVuZ3RoO3IrKylpLnB1c2goYSh0W3JdKS5saWdodGVuKDIwKS50b0hleFN0cmluZygpKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWkucHVzaChhKHRbcl0pLmRhcmtlbigyMCkudG9IZXhTdHJpbmcoKSk7ZVtuXT1pfXJldHVybiBpfWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLGEsbyxsLHUsZj1lLnZhbHVlcyxoPWkoZikmJmYubGVuZ3RoLHA9ZS5sYWJlbHMsZD1lLm1hcmtlci5jb2xvcnN8fFtdLGc9W10sdj10Ll9mdWxsTGF5b3V0LG09e30seT0wLHg9di5oaWRkZW5sYWJlbHN8fFtdO2lmKGUuZGxhYmVsKWZvcihwPW5ldyBBcnJheShmLmxlbmd0aCkscj0wO3I8Zi5sZW5ndGg7cisrKXBbcl09U3RyaW5nKGUubGFiZWwwK3IqZS5kbGFiZWwpO3ZhciBiPWModi5fcGllY29sb3JtYXApLF89KGg/ZjpwKS5sZW5ndGg7Zm9yKHI9MDtyPF87cisrKXtpZihoKXtpZihhPWZbcl0sIW4oYSkpY29udGludWU7aWYoKGE9K2EpPDApY29udGludWV9ZWxzZSBhPTE7dm9pZCAwIT09KG89cFtyXSkmJiIiIT09b3x8KG89cik7dmFyIHc9bVtvPVN0cmluZyhvKV07dm9pZCAwPT09dz8obVtvXT1nLmxlbmd0aCwobD0tMSE9PXguaW5kZXhPZihvKSl8fCh5Kz1hKSxnLnB1c2goe3Y6YSxsYWJlbDpvLGNvbG9yOmIoZFtyXSxvKSxpOnIscHRzOltyXSxoaWRkZW46bH0pKTooKHU9Z1t3XSkudis9YSx1LnB0cy5wdXNoKHIpLHUuaGlkZGVufHwoeSs9YSksITE9PT11LmNvbG9yJiZkW3JdJiYodS5jb2xvcj1iKGRbcl0sbykpKX1pZihlLnNvcnQmJmcuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnYtdC52fSksZ1swXSYmKGdbMF0udlRvdGFsPXkpLGUudGV4dGluZm8mJiJub25lIiE9PWUudGV4dGluZm8pe3ZhciBrLFQ9LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoImxhYmVsIiksQT0tMSE9PWUudGV4dGluZm8uaW5kZXhPZigidGV4dCIpLE09LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoInZhbHVlIiksUz0tMSE9PWUudGV4dGluZm8uaW5kZXhPZigicGVyY2VudCIpLEU9di5zZXBhcmF0b3JzO2ZvcihyPTA7cjxnLmxlbmd0aDtyKyspe2lmKHU9Z1tyXSxrPVQ/W3UubGFiZWxdOltdLEEpe3ZhciBDPXMuZ2V0Rmlyc3RGaWxsZWQoZS50ZXh0LHUucHRzKTtDJiZrLnB1c2goQyl9TSYmay5wdXNoKHMuZm9ybWF0UGllVmFsdWUodS52LEUpKSxTJiZrLnB1c2gocy5mb3JtYXRQaWVQZXJjZW50KHUudi95LEUpKSx1LnRleHQ9ay5qb2luKCI8YnI+Iil9fXJldHVybiBnfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxuPWUucGllY29sb3J3YXksaT1lLl9waWVjb2xvcm1hcDtlLmV4dGVuZHBpZWNvbG9ycyYmKG49dShuLGwpKTtmb3IodmFyIGE9MCxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBzPXJbb107aWYoInBpZSI9PT1zWzBdLnRyYWNlLnR5cGUpZm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBmPXNbY107ITE9PT1mLmNvbG9yJiYoaVtmLmxhYmVsXT9mLmNvbG9yPWlbZi5sYWJlbF06KGlbZi5sYWJlbF09Zi5jb2xvcj1uW2Elbi5sZW5ndGhdLGErKykpfX19LG1ha2VQdWxsQ29sb3JGbjpjLGdlbmVyYXRlRXh0ZW5kZWRDb2xvcnM6dX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9saWIiOjcwMCwiLi9oZWxwZXJzIjoxMDMxLCJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sMTAyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgbCxjPW4uY29lcmNlRm9udCx1PXMoInZhbHVlcyIpLGY9bi5pc0FycmF5T3JUeXBlZEFycmF5KHUpLGg9cygibGFiZWxzIik7aWYoQXJyYXkuaXNBcnJheShoKT8obD1oLmxlbmd0aCxmJiYobD1NYXRoLm1pbihsLHUubGVuZ3RoKSkpOmYmJihsPXUubGVuZ3RoLHMoImxhYmVsMCIpLHMoImRsYWJlbCIpKSxsKXtlLl9sZW5ndGg9bCxzKCJtYXJrZXIubGluZS53aWR0aCIpJiZzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5jb2xvcnMiKSxzKCJzY2FsZWdyb3VwIik7dmFyIHA9cygidGV4dCIpLGQ9cygidGV4dGluZm8iLEFycmF5LmlzQXJyYXkocCk/InRleHQrcGVyY2VudCI6InBlcmNlbnQiKTtpZihzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIiksZCYmIm5vbmUiIT09ZCl7dmFyIGc9cygidGV4dHBvc2l0aW9uIiksdj1BcnJheS5pc0FycmF5KGcpfHwiYXV0byI9PT1nLG09dnx8Imluc2lkZSI9PT1nLHk9dnx8Im91dHNpZGUiPT09ZztpZihtfHx5KXt2YXIgeD1jKHMsInRleHRmb250IixvLmZvbnQpO2lmKG0pe3ZhciBiPW4uZXh0ZW5kRmxhdCh7fSx4KTshKHQudGV4dGZvbnQmJnQudGV4dGZvbnQuY29sb3IpJiZkZWxldGUgYi5jb2xvcixjKHMsImluc2lkZXRleHRmb250IixiKX15JiZjKHMsIm91dHNpZGV0ZXh0Zm9udCIseCl9fWEoZSxvLHMpO3ZhciBfPXMoImhvbGUiKTtpZihzKCJ0aXRsZS50ZXh0Iikpe3ZhciB3PXMoInRpdGxlLnBvc2l0aW9uIixfPyJtaWRkbGUgY2VudGVyIjoidG9wIGNlbnRlciIpO198fCJtaWRkbGUgY2VudGVyIiE9PXd8fChlLnRpdGxlLnBvc2l0aW9uPSJ0b3AgY2VudGVyIiksYyhzLCJ0aXRsZS5mb250IixvLmZvbnQpfXMoInNvcnQiKSxzKCJkaXJlY3Rpb24iKSxzKCJyb3RhdGlvbiIpLHMoInB1bGwiKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuL2F0dHJpYnV0ZXMiOjEwMjZ9XSwxMDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17Y3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcnM6dC5wdHMsZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGxhYmVsOnQubGFiZWwsY29sb3I6dC5jb2xvcix2YWx1ZTp0LnYscGVyY2VudDp0LnBlcmNlbnQsdGV4dDp0LnRleHQsdjp0LnZ9O3JldHVybiAxPT09dC5wdHMubGVuZ3RoJiYoci5wb2ludE51bWJlcj1yLmk9dC5wdHNbMF0pLG4ocixlLHQucHRzKSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjYxMn1dLDEwMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KDEwMCp0KS50b1ByZWNpc2lvbigzKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoIi4iKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKSsiJSJ9LHIuZm9ybWF0UGllVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvUHJlY2lzaW9uKDEwKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoIi4iKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKX0sci5nZXRGaXJzdEZpbGxlZD1mdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXRbZVtyXV07aWYobnx8MD09PW4pcmV0dXJuIG59fSxyLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9yLmdldEZpcnN0RmlsbGVkKHQsZSk6dHx8dm9pZCAwfX0seyIuLi8uLi9saWIiOjcwMH1dLDEwMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxuLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO3ZhciBpPXQoIi4vY2FsYyIpO24uY2FsYz1pLmNhbGMsbi5jcm9zc1RyYWNlQ2FsYz1pLmNyb3NzVHJhY2VDYWxjLG4ucGxvdD10KCIuL3Bsb3QiKS5wbG90LG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uc3R5bGVPbmU9dCgiLi9zdHlsZV9vbmUiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InBpZSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuL2Jhc2VfcGxvdCIpLG4uY2F0ZWdvcmllcz1bInBpZSIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMDI2LCIuL2Jhc2VfcGxvdCI6MTAyNywiLi9jYWxjIjoxMDI4LCIuL2RlZmF1bHRzIjoxMDI5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDMzLCIuL2xheW91dF9kZWZhdWx0cyI6MTAzNCwiLi9wbG90IjoxMDM1LCIuL3N0eWxlIjoxMDM2LCIuL3N0eWxlX29uZSI6MTAzN31dLDEwMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtoaWRkZW5sYWJlbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0scGllY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRwaWVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJoaWRkZW5sYWJlbHMiKSxyKCJwaWVjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kcGllY29sb3JzIil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDMzfV0sMTAzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi9oZWxwZXJzIiksdT10KCIuL2V2ZW50X2RhdGEiKTtmdW5jdGlvbiBmKHQsZSxyKXt2YXIgYT1yWzBdLG89YS50cmFjZSxzPWEuY3gsbD1hLmN5OyJfaGFzSG92ZXJMYWJlbCJpbiBvfHwoby5faGFzSG92ZXJMYWJlbD0hMSksIl9oYXNIb3ZlckV2ZW50ImluIG98fChvLl9oYXNIb3ZlckV2ZW50PSExKSx0Lm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsZj1lLl9mdWxsRGF0YVtvLmluZGV4XTtpZighZS5fZHJhZ2dpbmcmJiExIT09ci5ob3Zlcm1vZGUpe3ZhciBoPWYuaG92ZXJpbmZvO2lmKEFycmF5LmlzQXJyYXkoaCkmJihoPWkuY2FzdEhvdmVyaW5mbyh7aG92ZXJpbmZvOltjLmNhc3RPcHRpb24oaCx0LnB0cyldLF9tb2R1bGU6by5fbW9kdWxlfSxyLDApKSwiYWxsIj09PWgmJihoPSJsYWJlbCt0ZXh0K3ZhbHVlK3BlcmNlbnQrbmFtZSIpLGYuaG92ZXJ0ZW1wbGF0ZXx8Im5vbmUiIT09aCYmInNraXAiIT09aCYmaCl7dmFyIHA9dC5ySW5zY3JpYmVkLGQ9cyt0LnB4bWlkWzBdKigxLXApLGc9bCt0LnB4bWlkWzFdKigxLXApLHY9ci5zZXBhcmF0b3JzLG09W107aWYoaCYmLTEhPT1oLmluZGV4T2YoImxhYmVsIikmJm0ucHVzaCh0LmxhYmVsKSx0LnRleHQ9Yy5jYXN0T3B0aW9uKGYuaG92ZXJ0ZXh0fHxmLnRleHQsdC5wdHMpLGgmJi0xIT09aC5pbmRleE9mKCJ0ZXh0Iikpe3ZhciB5PXQudGV4dDt5JiZtLnB1c2goeSl9dC52YWx1ZT10LnYsdC52YWx1ZUxhYmVsPWMuZm9ybWF0UGllVmFsdWUodC52LHYpLGgmJi0xIT09aC5pbmRleE9mKCJ2YWx1ZSIpJiZtLnB1c2godC52YWx1ZUxhYmVsKSx0LnBlcmNlbnQ9dC52L2EudlRvdGFsLHQucGVyY2VudExhYmVsPWMuZm9ybWF0UGllUGVyY2VudCh0LnBlcmNlbnQsdiksaCYmLTEhPT1oLmluZGV4T2YoInBlcmNlbnQiKSYmbS5wdXNoKHQucGVyY2VudExhYmVsKTt2YXIgeD1vLmhvdmVybGFiZWwsYj14LmZvbnQ7aS5sb25lSG92ZXIoe3gwOmQtcCphLnIseDE6ZCtwKmEucix5OmcsdGV4dDptLmpvaW4oIjxicj4iKSxuYW1lOmYuaG92ZXJ0ZW1wbGF0ZXx8LTEhPT1oLmluZGV4T2YoIm5hbWUiKT9mLm5hbWU6dm9pZCAwLGlkZWFsQWxpZ246dC5weG1pZFswXTwwPyJsZWZ0IjoicmlnaHQiLGNvbG9yOmMuY2FzdE9wdGlvbih4LmJnY29sb3IsdC5wdHMpfHx0LmNvbG9yLGJvcmRlckNvbG9yOmMuY2FzdE9wdGlvbih4LmJvcmRlcmNvbG9yLHQucHRzKSxmb250RmFtaWx5OmMuY2FzdE9wdGlvbihiLmZhbWlseSx0LnB0cyksZm9udFNpemU6Yy5jYXN0T3B0aW9uKGIuc2l6ZSx0LnB0cyksZm9udENvbG9yOmMuY2FzdE9wdGlvbihiLmNvbG9yLHQucHRzKSx0cmFjZTpmLGhvdmVydGVtcGxhdGU6Yy5jYXN0T3B0aW9uKGYuaG92ZXJ0ZW1wbGF0ZSx0LnB0cyksaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LGV2ZW50RGF0YTpbdSh0LGYpXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6ZX0pLG8uX2hhc0hvdmVyTGFiZWw9ITB9by5faGFzSG92ZXJFdmVudD0hMCxlLmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czpbdSh0LGYpXSxldmVudDpuLmV2ZW50fSl9fSksdC5vbigibW91c2VvdXQiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsYT1lLl9mdWxsRGF0YVtvLmluZGV4XSxzPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7by5faGFzSG92ZXJFdmVudCYmKHQub3JpZ2luYWxFdmVudD1uLmV2ZW50LGUuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W3UocyxhKV0sZXZlbnQ6bi5ldmVudH0pLG8uX2hhc0hvdmVyRXZlbnQ9ITEpLG8uX2hhc0hvdmVyTGFiZWwmJihpLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxvLl9oYXNIb3ZlckxhYmVsPSExKX0pLHQub24oImNsaWNrIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGE9ZS5fZnVsbERhdGFbby5pbmRleF07ZS5fZHJhZ2dpbmd8fCExPT09ci5ob3Zlcm1vZGV8fChlLl9ob3ZlcmRhdGE9W3UodCxhKV0saS5jbGljayhlLG4uZXZlbnQpKX0pfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPU1hdGguc3FydCh0LndpZHRoKnQud2lkdGgrdC5oZWlnaHQqdC5oZWlnaHQpLGk9dC53aWR0aC90LmhlaWdodCxhPWUuaGFsZmFuZ2xlLG89ZS5yaW5nLHM9ZS5ySW5zY3JpYmVkLGw9ci5yfHxlLnJweDEsYz17c2NhbGU6cypsKjIvbixyQ2VudGVyOjEtcyxyb3RhdGU6MH07aWYoYy5zY2FsZT49MSlyZXR1cm4gYzt2YXIgdT1pKzEvKDIqTWF0aC50YW4oYSkpLGY9bCpNYXRoLm1pbigxLyhNYXRoLnNxcnQodSp1Ky41KSt1KSxvLyhNYXRoLnNxcnQoaSppK28vMikraSkpLGg9e3NjYWxlOjIqZi90LmhlaWdodCxyQ2VudGVyOk1hdGguY29zKGYvbCktZippL2wscm90YXRlOigxODAvTWF0aC5QSSplLm1pZGFuZ2xlKzcyMCklMTgwLTkwfSxwPTEvaSxkPXArMS8oMipNYXRoLnRhbihhKSksZz1sKk1hdGgubWluKDEvKE1hdGguc3FydChkKmQrLjUpK2QpLG8vKE1hdGguc3FydChwKnArby8yKStwKSksdj17c2NhbGU6MipnL3Qud2lkdGgsckNlbnRlcjpNYXRoLmNvcyhnL2wpLWcvaS9sLHJvdGF0ZTooMTgwL01hdGguUEkqZS5taWRhbmdsZSs4MTApJTE4MC05MH0sbT12LnNjYWxlPmguc2NhbGU/djpoO3JldHVybiBjLnNjYWxlPDEmJm0uc2NhbGU+Yy5zY2FsZT9tOmN9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB0LnYhPT1lLnZUb3RhbHx8ZS50cmFjZS5ob2xlP01hdGgubWluKDEvKDErMS9NYXRoLnNpbih0LmhhbGZhbmdsZSkpLHQucmluZy8yKToxfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj1lLnB4bWlkWzBdLG49ZS5weG1pZFsxXSxpPXQud2lkdGgvMixhPXQuaGVpZ2h0LzI7cmV0dXJuIHI8MCYmKGkqPS0xKSxuPDAmJihhKj0tMSkse3NjYWxlOjEsckNlbnRlcjoxLHJvdGF0ZTowLHg6aStNYXRoLmFicyhhKSooaT4wPzE6LTEpLzIseTphLygxK3Iqci8obipuKSksb3V0c2lkZTohMH19ZnVuY3Rpb24gZyh0LGUpe3ZhciByPXQudHJhY2Usbj1lLmgqKHIuZG9tYWluLnlbMV0tci5kb21haW4ueVswXSk7cmV0dXJuIE1hdGgubWluKHQudGl0bGVCb3guaGVpZ2h0LG4vMil9ZnVuY3Rpb24gdih0KXt2YXIgZSxyPXQucHVsbDtpZihBcnJheS5pc0FycmF5KHIpKWZvcihyPTAsZT0wO2U8dC5wdWxsLmxlbmd0aDtlKyspdC5wdWxsW2VdPnImJihyPXQucHVsbFtlXSk7cmV0dXJuIHJ9ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDshZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPWUuX2Z1bGxMYXlvdXQsYT0wO2E8dC5sZW5ndGg7YSsrKWlmKHI9dFthXVswXSwobj1yLnRyYWNlKS50aXRsZS50ZXh0KXt2YXIgYz1pLm1ldGE/cy50ZW1wbGF0ZVN0cmluZyhuLnRpdGxlLnRleHQse21ldGE6aS5tZXRhfSk6bi50aXRsZS50ZXh0LHU9by50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkudGV4dChjKS5jYWxsKG8uZm9udCxuLnRpdGxlLmZvbnQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsZSksZj1vLmJCb3godS5ub2RlKCksITApO3IudGl0bGVCb3g9e3dpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0fSx1LnJlbW92ZSgpfX0oZSx0KSxmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxmPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspbz10W2ldWzBdLHM9by50cmFjZSxyPWUudyoocy5kb21haW4ueFsxXS1zLmRvbWFpbi54WzBdKSxuPWUuaCoocy5kb21haW4ueVsxXS1zLmRvbWFpbi55WzBdKSxzLnRpdGxlLnRleHQmJiJtaWRkbGUgY2VudGVyIiE9PXMudGl0bGUucG9zaXRpb24mJihuLT1nKG8sZSkpLGw9dihzKSxvLnI9TWF0aC5taW4ocixuKS8oMisyKmwpLG8uY3g9ZS5sK2Uudyoocy5kb21haW4ueFsxXStzLmRvbWFpbi54WzBdKS8yLG8uY3k9ZS50K2UuaCooMS1zLmRvbWFpbi55WzBdKS1uLzIscy50aXRsZS50ZXh0JiYtMSE9PXMudGl0bGUucG9zaXRpb24uaW5kZXhPZigiYm90dG9tIikmJihvLmN5LT1nKG8sZSkpLHMuc2NhbGVncm91cCYmLTE9PT1mLmluZGV4T2Yocy5zY2FsZWdyb3VwKSYmZi5wdXNoKHMuc2NhbGVncm91cCk7Zm9yKGE9MDthPGYubGVuZ3RoO2ErKyl7Zm9yKHU9MS8wLGM9ZlthXSxpPTA7aTx0Lmxlbmd0aDtpKyspKG89dFtpXVswXSkudHJhY2Uuc2NhbGVncm91cD09PWMmJih1PU1hdGgubWluKHUsby5yKm8uci9vLnZUb3RhbCkpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspKG89dFtpXVswXSkudHJhY2Uuc2NhbGVncm91cD09PWMmJihvLnI9TWF0aC5zcXJ0KHUqby52VG90YWwpKX19KGUsci5fc2l6ZSk7dmFyIGk9cy5tYWtlVHJhY2VHcm91cHMoci5fcGllbGF5ZXIsZSwidHJhY2UiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLHU9ZVswXSxtPXUudHJhY2U7IWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRbMF0sYT1pLnRyYWNlLG89YS5yb3RhdGlvbipNYXRoLlBJLzE4MCxzPTIqTWF0aC5QSS9pLnZUb3RhbCxsPSJweDAiLGM9InB4MSI7aWYoImNvdW50ZXJjbG9ja3dpc2UiPT09YS5kaXJlY3Rpb24pe2ZvcihlPTA7ZTx0Lmxlbmd0aCYmdFtlXS5oaWRkZW47ZSsrKTtpZihlPT09dC5sZW5ndGgpcmV0dXJuO28rPXMqdFtlXS52LHMqPS0xLGw9InB4MSIsYz0icHgwIn1mdW5jdGlvbiB1KHQpe3JldHVybltpLnIqTWF0aC5zaW4odCksLWkucipNYXRoLmNvcyh0KV19Zm9yKG49dShvKSxlPTA7ZTx0Lmxlbmd0aDtlKyspKHI9dFtlXSkuaGlkZGVufHwocltsXT1uLG8rPXMqci52LzIsci5weG1pZD11KG8pLHIubWlkYW5nbGU9byxvKz1zKnIudi8yLG49dShvKSxyW2NdPW4sci5sYXJnZUFyYz1yLnY+aS52VG90YWwvMj8xOjAsci5oYWxmYW5nbGU9TWF0aC5QSSpNYXRoLm1pbihyLnYvaS52VG90YWwsLjUpLHIucmluZz0xLWEuaG9sZSxyLnJJbnNjcmliZWQ9cChyLGkpKX0oZSksaS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLGkuZWFjaChmdW5jdGlvbigpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLmRhdGEoZSk7aS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksaS5leGl0KCkucmVtb3ZlKCk7dmFyIHA9W1tbXSxbXV0sW1tdLFtdXV0seT0hMTtpLmVhY2goZnVuY3Rpb24ocil7aWYoci5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle3IucG9pbnROdW1iZXI9ci5pLHIuY3VydmVOdW1iZXI9bS5pbmRleCxwW3IucHhtaWRbMV08MD8wOjFdW3IucHhtaWRbMF08MD8wOjFdLnB1c2gocik7dmFyIGk9dS5jeCxnPXUuY3ksdj1uLnNlbGVjdCh0aGlzKSx4PXYuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5kYXRhKFtyXSk7aWYoeC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInN1cmZhY2UiLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLHYuY2FsbChmLHQsZSksbS5wdWxsKXt2YXIgYj0rYy5jYXN0T3B0aW9uKG0ucHVsbCxyLnB0cyl8fDA7Yj4wJiYoaSs9YipyLnB4bWlkWzBdLGcrPWIqci5weG1pZFsxXSl9ci5jeEZpbmFsPWksci5jeUZpbmFsPWc7dmFyIF89bS5ob2xlO2lmKHIudj09PXUudlRvdGFsKXt2YXIgdz0iTSIrKGkrci5weDBbMF0pKyIsIisoZytyLnB4MFsxXSkrUyhyLnB4MCxyLnB4bWlkLCEwLDEpK1Moci5weG1pZCxyLnB4MCwhMCwxKSsiWiI7Xz94LmF0dHIoImQiLCJNIisoaStfKnIucHgwWzBdKSsiLCIrKGcrXypyLnB4MFsxXSkrUyhyLnB4MCxyLnB4bWlkLCExLF8pK1Moci5weG1pZCxyLnB4MCwhMSxfKSsiWiIrdyk6eC5hdHRyKCJkIix3KX1lbHNle3ZhciBrPVMoci5weDAsci5weDEsITAsMSk7aWYoXyl7dmFyIFQ9MS1fO3guYXR0cigiZCIsIk0iKyhpK18qci5weDFbMF0pKyIsIisoZytfKnIucHgxWzFdKStTKHIucHgxLHIucHgwLCExLF8pKyJsIitUKnIucHgwWzBdKyIsIitUKnIucHgwWzFdK2srIloiKX1lbHNlIHguYXR0cigiZCIsIk0iK2krIiwiK2crImwiK3IucHgwWzBdKyIsIityLnB4MFsxXStrKyJaIil9dmFyIEE9Yy5jYXN0T3B0aW9uKG0udGV4dHBvc2l0aW9uLHIucHRzKSxNPXYuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoci50ZXh0JiYibm9uZSIhPT1BP1swXTpbXSk7TS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLE0uZXhpdCgpLnJlbW92ZSgpLE0uZWFjaChmdW5jdGlvbigpe3ZhciBlPXMuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSk7ZS50ZXh0KHIudGV4dCkuYXR0cih7Y2xhc3M6InNsaWNldGV4dCIsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9KS5jYWxsKG8uZm9udCwib3V0c2lkZSI9PT1BP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuY29sb3IsZS5wdHMpfHxjLmNhc3RPcHRpb24odC50ZXh0Zm9udC5jb2xvcixlLnB0cyl8fHIuY29sb3IsaT1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8Yy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8ci5mYW1pbHksYT1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm4sZmFtaWx5Omksc2l6ZTphfX0obSxyLHQuX2Z1bGxMYXlvdXQuZm9udCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWMuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmNvbG9yLGUucHRzKTshbiYmdC5faW5wdXQudGV4dGZvbnQmJihuPWMuY2FzdE9wdGlvbih0Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcixlLnB0cykpO3ZhciBpPWMuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmZhbWlseSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LmZhbWlseSxlLnB0cyl8fHIuZmFtaWx5LG89Yy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm58fGEuY29udHJhc3QoZS5jb2xvciksZmFtaWx5Omksc2l6ZTpvfX0obSxyLHQuX2Z1bGxMYXlvdXQuZm9udCkpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIGYscD1vLmJCb3goZS5ub2RlKCkpOyJvdXRzaWRlIj09PUE/Zj1kKHAscik6KGY9aChwLHIsdSksImF1dG8iPT09QSYmZi5zY2FsZTwxJiYoZS5jYWxsKG8uZm9udCxtLm91dHNpZGV0ZXh0Zm9udCksbS5vdXRzaWRldGV4dGZvbnQuZmFtaWx5PT09bS5pbnNpZGV0ZXh0Zm9udC5mYW1pbHkmJm0ub3V0c2lkZXRleHRmb250LnNpemU9PT1tLmluc2lkZXRleHRmb250LnNpemV8fChwPW8uYkJveChlLm5vZGUoKSkpLGY9ZChwLHIpKSk7dmFyIHY9aStyLnB4bWlkWzBdKmYuckNlbnRlcisoZi54fHwwKSx4PWcrci5weG1pZFsxXSpmLnJDZW50ZXIrKGYueXx8MCk7Zi5vdXRzaWRlJiYoci55TGFiZWxNaW49eC1wLmhlaWdodC8yLHIueUxhYmVsTWlkPXgsci55TGFiZWxNYXg9eCtwLmhlaWdodC8yLHIubGFiZWxFeHRyYVg9MCxyLmxhYmVsRXh0cmFZPTAseT0hMCksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsIit4KyIpIisoZi5zY2FsZTwxPyJzY2FsZSgiK2Yuc2NhbGUrIikiOiIiKSsoZi5yb3RhdGU/InJvdGF0ZSgiK2Yucm90YXRlKyIpIjoiIikrInRyYW5zbGF0ZSgiKy0ocC5sZWZ0K3AucmlnaHQpLzIrIiwiKy0ocC50b3ArcC5ib3R0b20pLzIrIikiKX0pfWZ1bmN0aW9uIFModCxlLG4saSl7cmV0dXJuImEiK2kqdS5yKyIsIitpKnUucisiIDAgIityLmxhcmdlQXJjKyhuPyIgMSAiOiIgMCAiKStpKihlWzBdLXRbMF0pKyIsIitpKihlWzFdLXRbMV0pfX0pO3ZhciB4PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50aXRsZXRleHQiKS5kYXRhKG0udGl0bGUudGV4dD9bMF06W10pO3guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aXRsZXRleHQiLCEwKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmVhY2goZnVuY3Rpb24oKXt2YXIgZSxpPXMuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSksYT1yLm1ldGE/cy50ZW1wbGF0ZVN0cmluZyhtLnRpdGxlLnRleHQse21ldGE6ci5tZXRhfSk6bS50aXRsZS50ZXh0O2kudGV4dChhKS5hdHRyKHtjbGFzczoidGl0bGV0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwoby5mb250LG0udGl0bGUuZm9udCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSxlPSJtaWRkbGUgY2VudGVyIj09PW0udGl0bGUucG9zaXRpb24/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQudGl0bGVCb3gud2lkdGgqdC50aXRsZUJveC53aWR0aCt0LnRpdGxlQm94LmhlaWdodCp0LnRpdGxlQm94LmhlaWdodCk7cmV0dXJue3g6dC5jeCx5OnQuY3ksc2NhbGU6dC50cmFjZS5ob2xlKnQucioyL2UsdHg6MCx0eTotdC50aXRsZUJveC5oZWlnaHQvMit0LnRyYWNlLnRpdGxlLmZvbnQuc2l6ZX19KHUpOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPTEsYT0xLG89dC50cmFjZSxzPXt4OnQuY3gseTp0LmN5fSxsPXt0eDowLHR5OjB9O3JldHVybiBsLnR5Kz1vLnRpdGxlLmZvbnQuc2l6ZSxuPXYobyksLTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoInRvcCIpPyhzLnktPSgxK24pKnQucixsLnR5LT10LnRpdGxlQm94LmhlaWdodCk6LTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpJiYocy55Kz0oMStuKSp0LnIpLC0xIT09by50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJsZWZ0Iik/KHI9ZS53KihvLmRvbWFpbi54WzFdLW8uZG9tYWluLnhbMF0pLzIrdC5yLHMueC09KDErbikqdC5yLGwudHgrPXQudGl0bGVCb3gud2lkdGgvMik6LTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImNlbnRlciIpP3I9ZS53KihvLmRvbWFpbi54WzFdLW8uZG9tYWluLnhbMF0pOi0xIT09by50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpJiYocj1lLncqKG8uZG9tYWluLnhbMV0tby5kb21haW4ueFswXSkvMit0LnIscy54Kz0oMStuKSp0LnIsbC50eC09dC50aXRsZUJveC53aWR0aC8yKSxpPXIvdC50aXRsZUJveC53aWR0aCxhPWcodCxlKS90LnRpdGxlQm94LmhlaWdodCx7eDpzLngseTpzLnksc2NhbGU6TWF0aC5taW4oaSxhKSx0eDpsLnR4LHR5OmwudHl9fSh1LHIuX3NpemUpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS54KyIsIitlLnkrIikiKyhlLnNjYWxlPDE/InNjYWxlKCIrZS5zY2FsZSsiKSI6IiIpKyJ0cmFuc2xhdGUoIitlLnR4KyIsIitlLnR5KyIpIil9KSx5JiZmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLHUsZixoLHAsZCxnO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm4gdC5weG1pZFsxXS1lLnB4bWlkWzFdfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZS5weG1pZFsxXS10LnB4bWlkWzFdfWZ1bmN0aW9uIHkodCxyKXtyfHwocj17fSk7dmFyIGksdSxmLHAsZCxnLHY9ci5sYWJlbEV4dHJhWSsobj9yLnlMYWJlbE1heDpyLnlMYWJlbE1pbiksbT1uP3QueUxhYmVsTWluOnQueUxhYmVsTWF4LHk9bj90LnlMYWJlbE1heDp0LnlMYWJlbE1pbix4PXQuY3lGaW5hbCtvKHQucHgwWzFdLHQucHgxWzFdKSxiPXYtbTtpZihiKmw+MCYmKHQubGFiZWxFeHRyYVk9YiksQXJyYXkuaXNBcnJheShlLnB1bGwpKWZvcih1PTA7dTxoLmxlbmd0aDt1KyspKGY9aFt1XSk9PT10fHwoYy5jYXN0T3B0aW9uKGUucHVsbCx0LnB0cyl8fDApPj0oYy5jYXN0T3B0aW9uKGUucHVsbCxmLnB0cyl8fDApfHwoKHQucHhtaWRbMV0tZi5weG1pZFsxXSkqbD4wPyhwPWYuY3lGaW5hbCtvKGYucHgwWzFdLGYucHgxWzFdKSwoYj1wLW0tdC5sYWJlbEV4dHJhWSkqbD4wJiYodC5sYWJlbEV4dHJhWSs9YikpOih5K3QubGFiZWxFeHRyYVkteCkqbD4wJiYoaT0zKnMqTWF0aC5hYnModS1oLmluZGV4T2YodCkpLGQ9Zi5jeEZpbmFsK2EoZi5weDBbMF0sZi5weDFbMF0pLChnPWQraS0odC5jeEZpbmFsK3QucHhtaWRbMF0pLXQubGFiZWxFeHRyYVgpKnM+MCYmKHQubGFiZWxFeHRyYVgrPWcpKSl9Zm9yKG49MDtuPDI7bisrKWZvcihpPW4/djptLG89bj9NYXRoLm1heDpNYXRoLm1pbixsPW4/MTotMSxyPTA7cjwyO3IrKyl7Zm9yKGE9cj9NYXRoLm1heDpNYXRoLm1pbixzPXI/MTotMSwodT10W25dW3JdKS5zb3J0KGkpLGY9dFsxLW5dW3JdLGg9Zi5jb25jYXQodSksZD1bXSxwPTA7cDx1Lmxlbmd0aDtwKyspdm9pZCAwIT09dVtwXS55TGFiZWxNaWQmJmQucHVzaCh1W3BdKTtmb3IoZz0hMSxwPTA7biYmcDxmLmxlbmd0aDtwKyspaWYodm9pZCAwIT09ZltwXS55TGFiZWxNaWQpe2c9ZltwXTticmVha31mb3IocD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgeD1wJiZkW3AtMV07ZyYmIXAmJih4PWcpLHkoZFtwXSx4KX19fShwLG0pLGZ1bmN0aW9uKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBpPXIuc2VsZWN0KCJnLnNsaWNldGV4dCB0ZXh0Iik7aS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxhYmVsRXh0cmFYKyIsIit0LmxhYmVsRXh0cmFZKyIpIitpLmF0dHIoInRyYW5zZm9ybSIpKTt2YXIgbz10LmN4RmluYWwrdC5weG1pZFswXSxsPXQuY3lGaW5hbCt0LnB4bWlkWzFdLGM9Ik0iK28rIiwiK2wsdT0odC55TGFiZWxNYXgtdC55TGFiZWxNaW4pKih0LnB4bWlkWzBdPDA/LTE6MSkvNDtpZih0LmxhYmVsRXh0cmFYKXt2YXIgZj10LmxhYmVsRXh0cmFYKnQucHhtaWRbMV0vdC5weG1pZFswXSxoPXQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVktKHQuY3lGaW5hbCt0LnB4bWlkWzFdKTtNYXRoLmFicyhmKT5NYXRoLmFicyhoKT9jKz0ibCIraCp0LnB4bWlkWzBdL3QucHhtaWRbMV0rIiwiK2grIkgiKyhvK3QubGFiZWxFeHRyYVgrdSk6Yys9ImwiK3QubGFiZWxFeHRyYVgrIiwiK2YrInYiKyhoLWYpKyJoIit1fWVsc2UgYys9IlYiKyh0LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZKSsiaCIrdTtzLmVuc3VyZVNpbmdsZShyLCJwYXRoIiwidGV4dGxpbmUiKS5jYWxsKGEuc3Ryb2tlLGUub3V0c2lkZXRleHRmb250LmNvbG9yKS5hdHRyKHsic3Ryb2tlLXdpZHRoIjpNYXRoLm1pbigyLGUub3V0c2lkZXRleHRmb250LnNpemUvOCksZDpjLGZpbGw6Im5vbmUifSl9ZWxzZSByLnNlbGVjdCgicGF0aC50ZXh0bGluZSIpLnJlbW92ZSgpfSl9KGksbSl9KX0pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpLnNlbGVjdEFsbCgidHNwYW4iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hdHRyKCJkeSIpJiZ0LmF0dHIoImR5Iix0LmF0dHIoImR5IikpfSl9LDApfSx0cmFuc2Zvcm1JbnNpZGVUZXh0Omh9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzI0LCIuL2V2ZW50X2RhdGEiOjEwMzAsIi4vaGVscGVycyI6MTAzMSxkMzoxNTR9XSwxMDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuL3N0eWxlX29uZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9waWVsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpO3Iuc3R5bGUoe29wYWNpdHk6ZS5vcGFjaXR5fSksci5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChpLHQsZSl9KX0pfX0seyIuL3N0eWxlX29uZSI6MTAzNyxkMzoxNTR9XSwxMDM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vaGVscGVycyIpLmNhc3RPcHRpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLm1hcmtlci5saW5lLG89aShhLmNvbG9yLGUucHRzKXx8bi5kZWZhdWx0TGluZSxzPWkoYS53aWR0aCxlLnB0cyl8fDA7dC5zdHlsZSh7InN0cm9rZS13aWR0aCI6c30pLmNhbGwobi5maWxsLGUuY29sb3IpLmNhbGwobi5zdHJva2Usbyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi9oZWxwZXJzIjoxMDMxfV0sMTAzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3g6bi54LHk6bi55LHh5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGluZGljZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seGJvdW5kczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx5Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6bi50ZXh0LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsYXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9LGJsZW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSxzaXplbWluOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxtYXg6MixkZmx0Oi41LGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1heDp7dmFsVHlwZToibnVtYmVyIixtaW46LjEsZGZsdDoyMCxlZGl0VHlwZToiY2FsYyJ9LGJvcmRlcjp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sYXJlYXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0cmFuc2Zvcm1zOnZvaWQgMH19LHsiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sMTAzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1wb2ludGNsb3VkMmQiKSxpPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5maW5kRXh0cmVtZXMsbz10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpO2Z1bmN0aW9uIHModCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9InBvaW50Y2xvdWQiLHRoaXMucGlja1hEYXRhPVtdLHRoaXMucGlja1lEYXRhPVtdLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnRleHRMYWJlbHM9W10sdGhpcy5jb2xvcj0icmdiKDAsIDAsIDApIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy5pZFRvSW5kZXg9bmV3IEludDMyQXJyYXkoMCksdGhpcy5ib3VuZHM9WzAsMCwwLDBdLHRoaXMucG9pbnRjbG91ZE9wdGlvbnM9e3Bvc2l0aW9uczpuZXcgRmxvYXQzMkFycmF5KDApLGlkVG9JbmRleDp0aGlzLmlkVG9JbmRleCxzaXplbWluOi41LHNpemVtYXg6MTIsY29sb3I6WzAsMCwwLDFdLGFyZWFSYXRpbzoxLGJvcmRlckNvbG9yOlswLDAsMCwxXX0sdGhpcy5wb2ludGNsb3VkPW4odC5nbHBsb3QsdGhpcy5wb2ludGNsb3VkT3B0aW9ucyksdGhpcy5wb2ludGNsb3VkLl90cmFjZT10aGlzfXZhciBsPXMucHJvdG90eXBlO2wuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkVG9JbmRleFt0LnBvaW50SWRdO3JldHVybnt0cmFjZTp0aGlzLGRhdGFDb29yZDp0LmRhdGFDb29yZCx0cmFjZUNvb3JkOnRoaXMucGlja1hZRGF0YT9bdGhpcy5waWNrWFlEYXRhWzIqZV0sdGhpcy5waWNrWFlEYXRhWzIqZSsxXV06W3RoaXMucGlja1hEYXRhW2VdLHRoaXMucGlja1lEYXRhW2VdXSx0ZXh0TGFiZWw6QXJyYXkuaXNBcnJheSh0aGlzLnRleHRMYWJlbHMpP3RoaXMudGV4dExhYmVsc1tlXTp0aGlzLnRleHRMYWJlbHMsY29sb3I6dGhpcy5jb2xvcixuYW1lOnRoaXMubmFtZSxwb2ludEluZGV4OmUsaG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0sbC51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5pbmRleD10LmluZGV4LHRoaXMudGV4dExhYmVscz10LnRleHQsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmhvdmVyaW5mbz10LmhvdmVyaW5mbyx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMudXBkYXRlRmFzdCh0KSx0aGlzLmNvbG9yPW8odCx7fSl9LGwudXBkYXRlRmFzdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sbyxzLGwsYz10aGlzLnhEYXRhPXRoaXMucGlja1hEYXRhPXQueCx1PXRoaXMueURhdGE9dGhpcy5waWNrWURhdGE9dC55LGY9dGhpcy5waWNrWFlEYXRhPXQueHksaD10Lnhib3VuZHMmJnQueWJvdW5kcyxwPXQuaW5kaWNlcyxkPXRoaXMuYm91bmRzO2lmKGYpe2lmKG49ZixlPWYubGVuZ3RoPj4+MSxoKWRbMF09dC54Ym91bmRzWzBdLGRbMl09dC54Ym91bmRzWzFdLGRbMV09dC55Ym91bmRzWzBdLGRbM109dC55Ym91bmRzWzFdO2Vsc2UgZm9yKGw9MDtsPGU7bCsrKW89blsyKmxdLHM9blsyKmwrMV0sbzxkWzBdJiYoZFswXT1vKSxvPmRbMl0mJihkWzJdPW8pLHM8ZFsxXSYmKGRbMV09cykscz5kWzNdJiYoZFszXT1zKTtpZihwKXI9cDtlbHNlIGZvcihyPW5ldyBJbnQzMkFycmF5KGUpLGw9MDtsPGU7bCsrKXJbbF09bH1lbHNlIGZvcihlPWMubGVuZ3RoLG49bmV3IEZsb2F0MzJBcnJheSgyKmUpLHI9bmV3IEludDMyQXJyYXkoZSksbD0wO2w8ZTtsKyspbz1jW2xdLHM9dVtsXSxyW2xdPWwsblsyKmxdPW8sblsyKmwrMV09cyxvPGRbMF0mJihkWzBdPW8pLG8+ZFsyXSYmKGRbMl09byksczxkWzFdJiYoZFsxXT1zKSxzPmRbM10mJihkWzNdPXMpO3RoaXMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5pZFRvSW5kZXg9cix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnBvc2l0aW9ucz1uO3ZhciBnPWkodC5tYXJrZXIuY29sb3IpLHY9aSh0Lm1hcmtlci5ib3JkZXIuY29sb3IpLG09dC5vcGFjaXR5KnQubWFya2VyLm9wYWNpdHk7Z1szXSo9bSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmNvbG9yPWc7dmFyIHk9dC5tYXJrZXIuYmxlbmQ7aWYobnVsbD09PXkpe3k9Yy5sZW5ndGg8MTAwfHx1Lmxlbmd0aDwxMDB9dGhpcy5wb2ludGNsb3VkT3B0aW9ucy5ibGVuZD15LHZbM10qPW0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5ib3JkZXJDb2xvcj12O3ZhciB4PXQubWFya2VyLnNpemVtaW4sYj1NYXRoLm1heCh0Lm1hcmtlci5zaXplbWF4LHQubWFya2VyLnNpemVtaW4pO3RoaXMucG9pbnRjbG91ZE9wdGlvbnMuc2l6ZU1pbj14LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuc2l6ZU1heD1iLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYXJlYVJhdGlvPXQubWFya2VyLmJvcmRlci5hcmVhcmF0aW8sdGhpcy5wb2ludGNsb3VkLnVwZGF0ZSh0aGlzLnBvaW50Y2xvdWRPcHRpb25zKTt2YXIgXz10aGlzLnNjZW5lLnhheGlzLHc9dGhpcy5zY2VuZS55YXhpcyxrPWIvMnx8LjU7dC5fZXh0cmVtZXNbXy5faWRdPWEoXyxbZFswXSxkWzJdXSx7cHBhZDprfSksdC5fZXh0cmVtZXNbdy5faWRdPWEodyxbZFsxXSxkWzNdXSx7cHBhZDprfSl9LGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucG9pbnRjbG91ZC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBzKHQsZS51aWQpO3JldHVybiByLnVwZGF0ZShlKSxyfX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjc0NywiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjEwNjEsImdsLXBvaW50Y2xvdWQyZCI6Mjg4fV0sMTA0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoIngiKSxhKCJ5IiksYSgieGJvdW5kcyIpLGEoInlib3VuZHMiKSx0Lnh5JiZ0Lnh5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiYoZS54eT10Lnh5KSx0LmluZGljZXMmJnQuaW5kaWNlcyBpbnN0YW5jZW9mIEludDMyQXJyYXkmJihlLmluZGljZXM9dC5pbmRpY2VzKSxhKCJ0ZXh0IiksYSgibWFya2VyLmNvbG9yIixyKSxhKCJtYXJrZXIub3BhY2l0eSIpLGEoIm1hcmtlci5ibGVuZCIpLGEoIm1hcmtlci5zaXplbWluIiksYSgibWFya2VyLnNpemVtYXgiKSxhKCJtYXJrZXIuYm9yZGVyLmNvbG9yIixyKSxhKCJtYXJrZXIuYm9yZGVyLmFyZWFyYXRpbyIpLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9saWIiOjcwMCwiLi9hdHRyaWJ1dGVzIjoxMDM4fV0sMTA0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4uL3NjYXR0ZXIzZC9jYWxjIiksbi5wbG90PXQoIi4vY29udmVydCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0icG9pbnRjbG91ZCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDJkIiksbi5jYXRlZ29yaWVzPVsiZ2wiLCJnbDJkIiwic2hvd0xlZ2VuZCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9nbDJkIjo3ODcsIi4uL3NjYXR0ZXIzZC9jYWxjIjoxMDc5LCIuL2F0dHJpYnV0ZXMiOjEwMzgsIi4vY29udmVydCI6MTAzOSwiLi9kZWZhdWx0cyI6MTA0MH1dLDEwNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHU9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7KGUuZXhwb3J0cz1oKHtob3ZlcmluZm86Zih7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6W10sYXJyYXlPazohMX0pLGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGRvbWFpbjpzKHtuYW1lOiJzYW5rZXkiLHRyYWNlOiEwfSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoiaCJ9LHZhbHVlZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Ii4zcyJ9LHZhbHVlc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGFycmFuZ2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzbmFwIiwicGVycGVuZGljdWxhciIsImZyZWVmb3JtIiwiZml4ZWQiXSxkZmx0OiJzbmFwIn0sdGV4dGZvbnQ6bih7fSksbm9kZTp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGdyb3Vwczp7dmFsVHlwZToiaW5mb19hcnJheSIsaW1wbGllZEVkaXRzOnt4OltdLHk6W119LGRpbWVuc2lvbnM6MixmcmVlTGVuZ3RoOiEwLGRmbHQ6W10saXRlbXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifX0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0Oi41LGFycmF5T2s6ITB9fSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MCxkZmx0OjIwfSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MSxkZmx0OjIwfSxob3ZlcmluZm86e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm5vbmUiLCJza2lwIl0sZGZsdDoiYWxsIn0saG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOlsidmFsdWUiLCJsYWJlbCJdfSl9LGxpbms6e2xhYmVsOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITB9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGFycmF5T2s6ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxhcnJheU9rOiEwfX0sc291cmNlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSx0YXJnZXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHZhbHVlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxob3ZlcmluZm86e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm5vbmUiLCJza2lwIl0sZGZsdDoiYWxsIn0saG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOlsidmFsdWUiLCJsYWJlbCJdfSksY29sb3JzY2FsZXM6dSgiY29uY2VudHJhdGlvbnNjYWxlcyIse2VkaXRUeXBlOiJjYWxjIixsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyIsZGZsdDoiIn0sY21heDp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDoxfSxjbWluOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixkZmx0OjB9LGNvbG9yc2NhbGU6ZihjKCkuY29sb3JzY2FsZSx7ZGZsdDpbWzAsIndoaXRlIl0sWzEsImJsYWNrIl1dfSl9KX19LCJjYWxjIiwibmVzdGVkIikpLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjYwNywiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi8uLi9wbG90cy9kb21haW4iOjc3MywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NzR9XSwxMDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiKTtyLm5hbWU9InNhbmtleSIsci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLCJzYW5rZXkiKVswXTthKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInNhbmtleSIpLGE9ZS5faGFzJiZlLl9oYXMoInNhbmtleSIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5zYW5rZXkiKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyI6NjE3LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3ODQsIi4vcGxvdCI6MTA0OH1dLDEwNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzSW5kZXgsbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKTtmdW5jdGlvbiBjKHQpe3ZhciBlLHI9dC5ub2RlLGE9dC5saW5rLGM9W10sdT1vKGEuY29sb3IpLGY9e30saD17fSxwPWEuY29sb3JzY2FsZXMubGVuZ3RoO2ZvcihlPTA7ZTxwO2UrKyl7dmFyIGQ9YS5jb2xvcnNjYWxlc1tlXSxnPWwuZXh0cmFjdFNjYWxlKGQse2NMZXR0ZXI6ImMifSksdj1sLm1ha2VDb2xvclNjYWxlRnVuYyhnKTtoW2QubGFiZWxdPXZ9dmFyIG09MDtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKWEuc291cmNlW2VdPm0mJihtPWEuc291cmNlW2VdKSxhLnRhcmdldFtlXT5tJiYobT1hLnRhcmdldFtlXSk7dmFyIHkseD1tKzEsYj10Lm5vZGUuZ3JvdXBzLF89e307Zm9yKGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIHc9YltlXTtmb3IoeT0wO3k8dy5sZW5ndGg7eSsrKXt2YXIgaz13W3ldLFQ9eCtlO18uaGFzT3duUHJvcGVydHkoayk/aS53YXJuKCJOb2RlICIraysiIGlzIGFscmVhZHkgcGFydCBvZiBhIGdyb3VwLiIpOl9ba109VH19dmFyIEE9e3NvdXJjZTpbXSx0YXJnZXQ6W119O2ZvcihlPTA7ZTxhLnZhbHVlLmxlbmd0aDtlKyspe3ZhciBNPWEudmFsdWVbZV0sUz1hLnNvdXJjZVtlXSxFPWEudGFyZ2V0W2VdO2lmKE0+MCYmcyhTLHgpJiZzKEUseCkmJighXy5oYXNPd25Qcm9wZXJ0eShTKXx8IV8uaGFzT3duUHJvcGVydHkoRSl8fF9bU10hPT1fW0VdKSl7Xy5oYXNPd25Qcm9wZXJ0eShFKSYmKEU9X1tFXSksXy5oYXNPd25Qcm9wZXJ0eShTKSYmKFM9X1tTXSksRT0rRSxmW1M9K1NdPWZbRV09ITA7dmFyIEM9IiI7YS5sYWJlbCYmYS5sYWJlbFtlXSYmKEM9YS5sYWJlbFtlXSk7dmFyIEw9bnVsbDtDJiZoLmhhc093blByb3BlcnR5KEMpJiYoTD1oW0NdKSxjLnB1c2goe3BvaW50TnVtYmVyOmUsbGFiZWw6Qyxjb2xvcjp1P2EuY29sb3JbZV06YS5jb2xvcixjb25jZW50cmF0aW9uc2NhbGU6TCxzb3VyY2U6Uyx0YXJnZXQ6RSx2YWx1ZTorTX0pLEEuc291cmNlLnB1c2goUyksQS50YXJnZXQucHVzaChFKX19dmFyIHo9eCtiLmxlbmd0aCxPPW8oci5jb2xvciksST1bXTtmb3IoZT0wO2U8ejtlKyspaWYoZltlXSl7dmFyIEQ9ci5sYWJlbFtlXTtJLnB1c2goe2dyb3VwOmU+eC0xLGNoaWxkcmVuTm9kZXM6W10scG9pbnROdW1iZXI6ZSxsYWJlbDpELGNvbG9yOk8/ci5jb2xvcltlXTpyLmNvbG9yfSl9dmFyIFA9ITE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9aS5pbml0MmRBcnJheSh0LDApLG89MDtvPE1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKTtvKyspaWYoaS5pc0luZGV4KGVbb10sdCkmJmkuaXNJbmRleChyW29dLHQpKXtpZihlW29dPT09cltvXSlyZXR1cm4hMDthW2Vbb11dLnB1c2gocltvXSl9cmV0dXJuIG4oYSkuY29tcG9uZW50cy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSl9KHosQS5zb3VyY2UsQS50YXJnZXQpJiYoUD0hMCkse2NpcmN1bGFyOlAsbGlua3M6Yyxub2RlczpJLGdyb3VwczpiLGdyb3VwTG9va3VwOl99fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWMoZSk7cmV0dXJuIGEoe2NpcmN1bGFyOnIuY2lyY3VsYXIsX25vZGVzOnIubm9kZXMsX2xpbmtzOnIubGlua3MsX2dyb3VwczpyLmdyb3VwcyxfZ3JvdXBMb29rdXA6ci5ncm91cExvb2t1cH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjU4OSwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9ndXAiOjY5OCwic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiOjUxNH1dLDEwNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtub2RlVGV4dE9mZnNldEhvcml6b250YWw6NCxub2RlVGV4dE9mZnNldFZlcnRpY2FsOjMsbm9kZVBhZEFjcm9zczoxMCxzYW5rZXlJdGVyYXRpb25zOjUwLGZvcmNlSXRlcmF0aW9uczo1LGZvcmNlVGlja3NQZXJGcmFtZToxMCxkdXJhdGlvbjo1MDAsZWFzZToibGluZWFyIixjbjp7c2Fua2V5OiJzYW5rZXkiLHNhbmtleUxpbmtzOiJzYW5rZXktbGlua3MiLHNhbmtleUxpbms6InNhbmtleS1saW5rIixzYW5rZXlOb2RlU2V0OiJzYW5rZXktbm9kZS1zZXQiLHNhbmtleU5vZGU6InNhbmtleS1ub2RlIixub2RlUmVjdDoibm9kZS1yZWN0Iixub2RlQ2FwdHVyZToibm9kZS1jYXB0dXJlIixub2RlQ2VudGVyZWQ6Im5vZGUtZW50ZXJlZCIsbm9kZUxhYmVsR3VpZGU6Im5vZGUtbGFiZWwtZ3VpZGUiLG5vZGVMYWJlbDoibm9kZS1sYWJlbCIsbm9kZUxhYmVsVGV4dFBhdGg6Im5vZGUtbGFiZWwtdGV4dC1wYXRoIn19fSx7fV0sMTA0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgidGlueWNvbG9yMiIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMsbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybGFiZWxfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSx1PXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpO2Z1bmN0aW9uIGYodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLmxpbmsuY29sb3JzY2FsZXMscixhKX1yKCJsYWJlbCIpLHIoImNtaW4iKSxyKCJjbWF4IikscigiY29sb3JzY2FsZSIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGQ9bi5leHRlbmREZWVwKGguaG92ZXJsYWJlbCx0LmhvdmVybGFiZWwpLGc9dC5ub2RlLHY9Yy5uZXdDb250YWluZXIoZSwibm9kZSIpO2Z1bmN0aW9uIG0odCxlKXtyZXR1cm4gbi5jb2VyY2UoZyx2LGkubm9kZSx0LGUpfW0oImxhYmVsIiksbSgiZ3JvdXBzIiksbSgieCIpLG0oInkiKSxtKCJwYWQiKSxtKCJ0aGlja25lc3MiKSxtKCJsaW5lLmNvbG9yIiksbSgibGluZS53aWR0aCIpLG0oImhvdmVyaW5mbyIsdC5ob3ZlcmluZm8pLGwoZyx2LG0sZCksbSgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB5PWguY29sb3J3YXk7bSgiY29sb3IiLHYubGFiZWwubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuYWRkT3BhY2l0eShmdW5jdGlvbih0KXtyZXR1cm4geVt0JXkubGVuZ3RoXX0oZSksLjgpfSkpO3ZhciB4PXQubGlua3x8e30sYj1jLm5ld0NvbnRhaW5lcihlLCJsaW5rIik7ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZSh4LGIsaS5saW5rLHQsZSl9XygibGFiZWwiKSxfKCJzb3VyY2UiKSxfKCJ0YXJnZXQiKSxfKCJ2YWx1ZSIpLF8oImxpbmUuY29sb3IiKSxfKCJsaW5lLndpZHRoIiksXygiaG92ZXJpbmZvIix0LmhvdmVyaW5mbyksbCh4LGIsXyxkKSxfKCJob3ZlcnRlbXBsYXRlIik7dmFyIHcsaz1vKGgucGFwZXJfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCk8LjMzMz8icmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpIjoicmdiYSgwLCAwLCAwLCAwLjIpIjtfKCJjb2xvciIsbi5yZXBlYXQoayxiLnZhbHVlLmxlbmd0aCkpLHUoeCxiLHtuYW1lOiJjb2xvcnNjYWxlcyIsaGFuZGxlSXRlbURlZmF1bHRzOmZ9KSxzKGUsaCxwKSxwKCJvcmllbnRhdGlvbiIpLHAoInZhbHVlZm9ybWF0IikscCgidmFsdWVzdWZmaXgiKSx2LngubGVuZ3RoJiZ2LnkubGVuZ3RoJiYodz0iZnJlZWZvcm0iKSxwKCJhcnJhbmdlbWVudCIsdyksbi5jb2VyY2VGb250KHAsInRleHRmb250IixuLmV4dGVuZEZsYXQoe30saC5mb250KSksZS5fbGVuZ3RoPW51bGx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2MTQsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzQ0LCIuLi8uLi9wbG90cy9kb21haW4iOjc3MywiLi9hdHRyaWJ1dGVzIjoxMDQyLHRpbnljb2xvcjI6NTIxfV0sMTA0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNhbmtleSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuL2Jhc2VfcGxvdCIpLG4uY2F0ZWdvcmllcz1bIm5vT3BhY2l0eSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuL2F0dHJpYnV0ZXMiOjEwNDIsIi4vYmFzZV9wbG90IjoxMDQzLCIuL2NhbGMiOjEwNDQsIi4vZGVmYXVsdHMiOjEwNDYsIi4vcGxvdCI6MTA0OH1dLDEwNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4vcmVuZGVyIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4vY29uc3RhbnRzIikuY24sYz1zLl87ZnVuY3Rpb24gdSh0KXtyZXR1cm4iIiE9PXR9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXk9PT1lLnRyYWNlSWR9KX1mdW5jdGlvbiBoKHQsZSl7bi5zZWxlY3QodCkuc2VsZWN0KCJwYXRoIikuc3R5bGUoImZpbGwtb3BhY2l0eSIsZSksbi5zZWxlY3QodCkuc2VsZWN0KCJyZWN0Iikuc3R5bGUoImZpbGwtb3BhY2l0eSIsZSl9ZnVuY3Rpb24gcCh0KXtuLnNlbGVjdCh0KS5zZWxlY3QoInRleHQubmFtZSIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKX1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PXQubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKGUubGluayl8fC0xIT09dC5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YoZS5saW5rKX19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLm5vZGUuc291cmNlTGlua3MuaW5kZXhPZih0LmxpbmspfHwtMSE9PWUubm9kZS50YXJnZXRMaW5rcy5pbmRleE9mKHQubGluayl9fWZ1bmN0aW9uIHYodCxlLHIpe2UmJnImJmYocixlKS5zZWxlY3RBbGwoIi4iK2wuc2Fua2V5TGluaykuZmlsdGVyKGQoZSkpLmNhbGwoeS5iaW5kKDAsZSxyLCExKSl9ZnVuY3Rpb24gbSh0LGUscil7ZSYmciYmZihyLGUpLnNlbGVjdEFsbCgiLiIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZChlKSkuY2FsbCh4LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSxpJiZmKGUsdCkuc2VsZWN0QWxsKCIuIitsLnNhbmtleUxpbmspLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe2lmKCF0LmxpbmsuY29uY2VudHJhdGlvbnNjYWxlKXJldHVybi40fSksciYmZihlLHQpLnNlbGVjdEFsbCgiLiIrbC5zYW5rZXlOb2RlKS5maWx0ZXIoZyh0KSkuY2FsbCh2KX1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxpJiZmKGUsdCkuc2VsZWN0QWxsKCIuIitsLnNhbmtleUxpbmspLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksciYmZihlLHQpLnNlbGVjdEFsbChsLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKG0pfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10LmhvdmVybGFiZWx8fHt9LG49cy5uZXN0ZWRQcm9wZXJ0eShyLGUpLmdldCgpO3JldHVybiFBcnJheS5pc0FycmF5KG4pJiZufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQscz1yLl9wYXBlcixmPXIuX3NpemUsZD1jKHQsInNvdXJjZToiKSsiICIsZz1jKHQsInRhcmdldDoiKSsiICIsXz1jKHQsImNvbmNlbnRyYXRpb246IikrIiAiLHc9Yyh0LCJpbmNvbWluZyBmbG93IGNvdW50OiIpKyIgIixrPWModCwib3V0Z29pbmcgZmxvdyBjb3VudDoiKSsiICI7aSh0LHMsZSx7d2lkdGg6Zi53LGhlaWdodDpmLmgsbWFyZ2luOnt0OmYudCxyOmYucixiOmYuYixsOmYubH19LHtsaW5rRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoeS5iaW5kKDAscixpLCEwKSksInNraXAiIT09ci5saW5rLnRyYWNlLmxpbmsuaG92ZXJpbmZvJiYoci5saW5rLmZ1bGxEYXRhPXIubGluay50cmFjZSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltyLmxpbmtdfSkpKX0sZm9sbG93OmZ1bmN0aW9uKGUsaSl7aWYoITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSl7dmFyIHM9aS5saW5rLnRyYWNlLmxpbms7aWYoIm5vbmUiIT09cy5ob3ZlcmluZm8mJiJza2lwIiE9PXMuaG92ZXJpbmZvKXt2YXIgbCxjLGY9dC5fZnVsbExheW91dC5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGkubGluay5jaXJjdWxhcilsPShpLmxpbmsuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQraS5saW5rLmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCkvMitpLnBhcmVudC50cmFuc2xhdGVYLGM9aS5saW5rLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2kucGFyZW50LnRyYW5zbGF0ZVk7ZWxzZXt2YXIgdj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2w9di5sZWZ0K3Yud2lkdGgvMi1mLmxlZnQsYz12LnRvcCt2LmhlaWdodC8yLWYudG9wfXZhciBtPXt2YWx1ZUxhYmVsOm4uZm9ybWF0KGkudmFsdWVGb3JtYXQpKGkubGluay52YWx1ZSkraS52YWx1ZVN1ZmZpeH07aS5saW5rLmZ1bGxEYXRhPWkubGluay50cmFjZTt2YXIgeT1hLmxvbmVIb3Zlcih7eDpsLHk6YyxuYW1lOm0udmFsdWVMYWJlbCx0ZXh0OltpLmxpbmsubGFiZWx8fCIiLGQraS5saW5rLnNvdXJjZS5sYWJlbCxnK2kubGluay50YXJnZXQubGFiZWwsaS5saW5rLmNvbmNlbnRyYXRpb25zY2FsZT9fK24uZm9ybWF0KCIlMC4yZiIpKGkubGluay5mbG93LmxhYmVsQ29uY2VudHJhdGlvbik6IiJdLmZpbHRlcih1KS5qb2luKCI8YnI+IiksY29sb3I6YihzLCJiZ2NvbG9yIil8fG8uYWRkT3BhY2l0eShpLnRpbnlDb2xvckh1ZSwxKSxib3JkZXJDb2xvcjpiKHMsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpiKHMsImZvbnQuZmFtaWx5IiksZm9udFNpemU6YihzLCJmb250LnNpemUiKSxmb250Q29sb3I6YihzLCJmb250LmNvbG9yIiksaWRlYWxBbGlnbjpuLmV2ZW50Lng8bD8icmlnaHQiOiJsZWZ0Iixob3ZlcnRlbXBsYXRlOnMuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOm0sZXZlbnREYXRhOltpLmxpbmtdfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0fSk7aS5saW5rLmNvbmNlbnRyYXRpb25zY2FsZXx8aCh5LC42NSkscCh5KX19fSx1bmhvdmVyOmZ1bmN0aW9uKGUsaSxvKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh4LmJpbmQoMCxpLG8sITApKSwic2tpcCIhPT1pLmxpbmsudHJhY2UubGluay5ob3ZlcmluZm8mJihpLmxpbmsuZnVsbERhdGE9aS5saW5rLnRyYWNlLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5saW5rXX0pKSxhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIpe3ZhciBpPXIubGluaztpLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W2ldLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fSxub2RlRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwodixyLGkpLCJza2lwIiE9PXIubm9kZS50cmFjZS5ub2RlLmhvdmVyaW5mbyYmKHIubm9kZS5mdWxsRGF0YT1yLm5vZGUudHJhY2UsdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5ub2RlXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBvPWkubm9kZS50cmFjZS5ub2RlO2lmKCJub25lIiE9PW8uaG92ZXJpbmZvJiYic2tpcCIhPT1vLmhvdmVyaW5mbyl7dmFyIHM9bi5zZWxlY3QoZSkuc2VsZWN0KCIuIitsLm5vZGVSZWN0KSxjPXQuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9Zi5sZWZ0LTItYy5sZWZ0LGc9Zi5yaWdodCsyLWMubGVmdCx2PWYudG9wK2YuaGVpZ2h0LzQtYy50b3AsbT17dmFsdWVMYWJlbDpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXh9O2kubm9kZS5mdWxsRGF0YT1pLm5vZGUudHJhY2U7dmFyIHk9YS5sb25lSG92ZXIoe3gwOmQseDE6Zyx5OnYsbmFtZTpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5ub2RlLmxhYmVsLHcraS5ub2RlLnRhcmdldExpbmtzLmxlbmd0aCxrK2kubm9kZS5zb3VyY2VMaW5rcy5sZW5ndGhdLmZpbHRlcih1KS5qb2luKCI8YnI+IiksY29sb3I6YihvLCJiZ2NvbG9yIil8fGkudGlueUNvbG9ySHVlLGJvcmRlckNvbG9yOmIobywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmIobywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpiKG8sImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpiKG8sImZvbnQuY29sb3IiKSxpZGVhbEFsaWduOiJsZWZ0Iixob3ZlcnRlbXBsYXRlOm8uaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOm0sZXZlbnREYXRhOltpLm5vZGVdfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0fSk7aCh5LC44NSkscCh5KX19fSx1bmhvdmVyOmZ1bmN0aW9uKGUsaSxvKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbChtLGksbyksInNraXAiIT09aS5ub2RlLnRyYWNlLm5vZGUuaG92ZXJpbmZvJiYoaS5ub2RlLmZ1bGxEYXRhPWkubm9kZS50cmFjZSx0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W2kubm9kZV19KSksYS5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSxyLGkpe3ZhciBvPXIubm9kZTtvLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W29dLG4uc2VsZWN0KGUpLmNhbGwobSxyLGkpLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vbGliIjo3MDAsIi4vY29uc3RhbnRzIjoxMDQ1LCIuL3JlbmRlciI6MTA0OSxkMzoxNTR9XSwxMDQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJkMyIpLGE9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCJAcGxvdGx5L2QzLXNhbmtleSIpLGM9dCgiZDMtc2Fua2V5LWNpcmN1bGFyIiksdT10KCJkMy1mb3JjZSIpLGY9dCgiLi4vLi4vbGliIiksaD10KCIuLi8uLi9saWIvZ3VwIikscD1oLmtleUZ1bixkPWgucmVwZWF0LGc9aC51bndyYXAsdj10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlTnVtYmVyLG09dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiB5KCl7dmFyIHQ9LjU7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGUubGluay5jaXJjdWxhcilyZXR1cm4gcj1lLmxpbmssbj1yLndpZHRoLzIsaT1yLmNpcmN1bGFyUGF0aERhdGEsInRvcCI9PT1yLmNpcmN1bGFyTGlua1R5cGU/Ik0gIitpLnRhcmdldFgrIiAiKyhpLnRhcmdldFkrbikrIiBMIitpLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhpLnRhcmdldFkrbikrIkEiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrIiAiKyhpLnJpZ2h0U21hbGxBcmNSYWRpdXMrbikrIiAwIDAgMSAiKyhpLnJpZ2h0RnVsbEV4dGVudC1uKSsiICIrKGkudGFyZ2V0WS1pLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyJMIisoaS5yaWdodEZ1bGxFeHRlbnQtbikrIiAiK2kudmVydGljYWxSaWdodElubmVyRXh0ZW50KyJBIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pKyIgIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pKyIgMCAwIDEgIitpLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKSsiTCIraS5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKSsiQSIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pKyIgIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrIiAwIDAgMSAiKyhpLmxlZnRGdWxsRXh0ZW50K24pKyIgIitpLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyJMIisoaS5sZWZ0RnVsbEV4dGVudCtuKSsiICIrKGkuc291cmNlWS1pLmxlZnRTbWFsbEFyY1JhZGl1cykrIkEiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKSsiICIrKGkubGVmdFNtYWxsQXJjUmFkaXVzK24pKyIgMCAwIDEgIitpLmxlZnRJbm5lckV4dGVudCsiICIrKGkuc291cmNlWStuKSsiTCIraS5zb3VyY2VYKyIgIisoaS5zb3VyY2VZK24pKyJMIitpLnNvdXJjZVgrIiAiKyhpLnNvdXJjZVktbikrIkwiK2kubGVmdElubmVyRXh0ZW50KyIgIisoaS5zb3VyY2VZLW4pKyJBIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrIiAiKyhpLmxlZnRTbWFsbEFyY1JhZGl1cy1uKSsiIDAgMCAwICIrKGkubGVmdEZ1bGxFeHRlbnQtbikrIiAiKyhpLnNvdXJjZVktaS5sZWZ0U21hbGxBcmNSYWRpdXMpKyJMIisoaS5sZWZ0RnVsbEV4dGVudC1uKSsiICIraS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiQSIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pKyIgIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrIiAwIDAgMCAiK2kubGVmdElubmVyRXh0ZW50KyIgIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrIkwiK2kucmlnaHRJbm5lckV4dGVudCsiICIrKGkudmVydGljYWxGdWxsRXh0ZW50K24pKyJBIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pKyIgIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pKyIgMCAwIDAgIisoaS5yaWdodEZ1bGxFeHRlbnQrbikrIiAiK2kudmVydGljYWxSaWdodElubmVyRXh0ZW50KyJMIisoaS5yaWdodEZ1bGxFeHRlbnQrbikrIiAiKyhpLnRhcmdldFktaS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiQSIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKSsiICIrKGkucmlnaHRTbWFsbEFyY1JhZGl1cy1uKSsiIDAgMCAwICIraS5yaWdodElubmVyRXh0ZW50KyIgIisoaS50YXJnZXRZLW4pKyJMIitpLnRhcmdldFgrIiAiKyhpLnRhcmdldFktbikrIloiOiJNICIraS50YXJnZXRYKyIgIisoaS50YXJnZXRZLW4pKyIgTCIraS5yaWdodElubmVyRXh0ZW50KyIgIisoaS50YXJnZXRZLW4pKyJBIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pKyIgIisoaS5yaWdodFNtYWxsQXJjUmFkaXVzK24pKyIgMCAwIDAgIisoaS5yaWdodEZ1bGxFeHRlbnQtbikrIiAiKyhpLnRhcmdldFkraS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiTCIrKGkucmlnaHRGdWxsRXh0ZW50LW4pKyIgIitpLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiQSIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cytuKSsiICIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cytuKSsiIDAgMCAwICIraS5yaWdodElubmVyRXh0ZW50KyIgIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrIkwiK2kubGVmdElubmVyRXh0ZW50KyIgIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrIkEiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKSsiICIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pKyIgMCAwIDAgIisoaS5sZWZ0RnVsbEV4dGVudCtuKSsiICIraS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiTCIrKGkubGVmdEZ1bGxFeHRlbnQrbikrIiAiKyhpLnNvdXJjZVkraS5sZWZ0U21hbGxBcmNSYWRpdXMpKyJBIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrIiAiKyhpLmxlZnRTbWFsbEFyY1JhZGl1cytuKSsiIDAgMCAwICIraS5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhpLnNvdXJjZVktbikrIkwiK2kuc291cmNlWCsiICIrKGkuc291cmNlWS1uKSsiTCIraS5zb3VyY2VYKyIgIisoaS5zb3VyY2VZK24pKyJMIitpLmxlZnRJbm5lckV4dGVudCsiICIrKGkuc291cmNlWStuKSsiQSIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pKyIgIisoaS5sZWZ0U21hbGxBcmNSYWRpdXMtbikrIiAwIDAgMSAiKyhpLmxlZnRGdWxsRXh0ZW50LW4pKyIgIisoaS5zb3VyY2VZK2kubGVmdFNtYWxsQXJjUmFkaXVzKSsiTCIrKGkubGVmdEZ1bGxFeHRlbnQtbikrIiAiK2kudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkEiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cy1uKSsiICIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pKyIgMCAwIDEgIitpLmxlZnRJbm5lckV4dGVudCsiICIrKGkudmVydGljYWxGdWxsRXh0ZW50LW4pKyJMIitpLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKSsiQSIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKSsiICIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKSsiIDAgMCAxICIrKGkucmlnaHRGdWxsRXh0ZW50K24pKyIgIitpLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiTCIrKGkucmlnaHRGdWxsRXh0ZW50K24pKyIgIisoaS50YXJnZXRZK2kucmlnaHRTbWFsbEFyY1JhZGl1cykrIkEiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrIiAiKyhpLnJpZ2h0U21hbGxBcmNSYWRpdXMtbikrIiAwIDAgMSAiK2kucmlnaHRJbm5lckV4dGVudCsiICIrKGkudGFyZ2V0WStuKSsiTCIraS50YXJnZXRYKyIgIisoaS50YXJnZXRZK24pKyJaIjt2YXIgcixuLGksYT1lLmxpbmsuc291cmNlLngxLG89ZS5saW5rLnRhcmdldC54MCxzPXYoYSxvKSxsPXModCksYz1zKDEtdCksdT1lLmxpbmsueTAtZS5saW5rLndpZHRoLzIsZj1lLmxpbmsueTArZS5saW5rLndpZHRoLzIsaD1lLmxpbmsueTEtZS5saW5rLndpZHRoLzIscD1lLmxpbmsueTErZS5saW5rLndpZHRoLzI7cmV0dXJuIk0iK2ErIiwiK3UrIkMiK2wrIiwiK3UrIiAiK2MrIiwiK2grIiAiK28rIiwiK2grIkwiK28rIiwiK3ArIkMiK2MrIiwiK3ArIiAiK2wrIiwiK2YrIiAiK2ErIiwiK2YrIloifX1mdW5jdGlvbiB4KHQpe3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5ub2RlLngwLnRvRml4ZWQoMykrIiwgIit0Lm5vZGUueTAudG9GaXhlZCgzKSsiKSJ9KX1mdW5jdGlvbiBiKHQpe3QuY2FsbCh4KX1mdW5jdGlvbiBfKHQsZSl7dC5jYWxsKGIpLGUuYXR0cigiZCIseSgpKX1mdW5jdGlvbiB3KHQpe3QuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGUueDEtdC5ub2RlLngwfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlSGVpZ2h0fSl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdC5saW5rLndpZHRoPjF8fHQubGlua0xpbmVXaWR0aD4wfWZ1bmN0aW9uIFQodCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QudHJhbnNsYXRlWCsiLCIrdC50cmFuc2xhdGVZKyIpIisodC5ob3Jpem9udGFsPyJtYXRyaXgoMSAwIDAgMSAwIDApIjoibWF0cml4KDAgMSAxIDAgMCAwKSIpfWZ1bmN0aW9uIEEodCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Lmhvcml6b250YWw/MDp0LmxhYmVsWSkrIiAiKyh0Lmhvcml6b250YWw/dC5sYWJlbFk6MCkrIikifWZ1bmN0aW9uIE0odCl7cmV0dXJuIGkuc3ZnLmxpbmUoKShbW3QuaG9yaXpvbnRhbD90LmxlZnQ/LXQuc2l6ZUFjcm9zczp0LnZpc2libGVXaWR0aCtuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDpuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXSxbdC5ob3Jpem9udGFsP3QubGVmdD8tbi5ub2RlVGV4dE9mZnNldEhvcml6b250YWw6dC5zaXplQWNyb3NzOnQudmlzaWJsZUhlaWdodC1uLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXV0pfWZ1bmN0aW9uIFModCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8ibWF0cml4KDEgMCAwIDEgMCAwKSI6Im1hdHJpeCgwIDEgMSAwIDAgMCkifWZ1bmN0aW9uIEUodCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8ic2NhbGUoMSAxKSI6InNjYWxlKC0xIDEpIn1mdW5jdGlvbiBDKHQpe3JldHVybiB0LmRhcmtCYWNrZ3JvdW5kJiYhdC5ob3Jpem9udGFsPyJyZ2IoMjU1LDI1NSwyNTUpIjoicmdiKDAsMCwwKSJ9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/IjEwMCUiOiIwJSJ9ZnVuY3Rpb24geih0LGUscil7dC5vbigiLmJhc2ljIixudWxsKS5vbigibW91c2VvdmVyLmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KS5vbigibW91c2Vtb3ZlLmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmZvbGxvdyh0aGlzLHQpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pLm9uKCJtb3VzZW91dC5iYXNpYyIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSl9KS5vbigiY2xpY2suYmFzaWMiLGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksdC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHxyLnNlbGVjdCh0aGlzLHQsZSl9KX1mdW5jdGlvbiBPKHQsZSxyLGEpe3ZhciBvPWkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm57eDp0Lm5vZGUueDArdC52aXNpYmxlV2lkdGgvMix5OnQubm9kZS55MCt0LnZpc2libGVIZWlnaHQvMn19KS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbihpKXtpZigiZml4ZWQiIT09aS5hcnJhbmdlbWVudCYmKGYuZW5zdXJlU2luZ2xlKGEuX2Z1bGxMYXlvdXQuX2luZm9sYXllciwiZyIsImRyYWdjb3ZlciIsZnVuY3Rpb24odCl7YS5fZnVsbExheW91dC5fZHJhZ0NvdmVyPXR9KSxmLnJhaXNlVG9Ub3AodGhpcyksaS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPWkubm9kZSxEKGkubm9kZSksaS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLm5vZGVFdmVudHMudW5ob3Zlci5hcHBseSgwLGkuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkKSxpLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksInNuYXAiPT09aS5hcnJhbmdlbWVudCkpe3ZhciBvPWkudHJhY2VJZCsifCIraS5rZXk7aS5mb3JjZUxheW91dHNbb10/aS5mb3JjZUxheW91dHNbb10uYWxwaGEoMSk6ZnVuY3Rpb24odCxlLHIsaSl7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueT0odFtlXS55MCt0W2VdLnkxKS8yLHRbZV0ueD0odFtlXS54MCt0W2VdLngxKS8yfShyLmdyYXBoLm5vZGVzKTt2YXIgYT1yLmdyYXBoLm5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5vcmlnaW5hbFg9PT1yLm5vZGUub3JpZ2luYWxYfSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LnBhcnRPZkdyb3VwfSk7ci5mb3JjZUxheW91dHNbZV09dS5mb3JjZVNpbXVsYXRpb24oYSkuYWxwaGFEZWNheSgwKS5mb3JjZSgiY29sbGlkZSIsdS5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkvMityLm5vZGVQYWQvMn0pLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMobi5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZSgiY29uc3RyYWluIixmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV07bz09PWkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz8oby54PW8ubGFzdERyYWdnZWRYLG8ueT1vLmxhc3REcmFnZ2VkWSk6KG8udng9KG8ub3JpZ2luYWxYLW8ueCkvbi5mb3JjZVRpY2tzUGVyRnJhbWUsby55PU1hdGgubWluKGkuc2l6ZS1vLmR5LzIsTWF0aC5tYXgoby5keS8yLG8ueSkpKSx0PU1hdGgubWF4KHQsTWF0aC5hYnMoby52eCksTWF0aC5hYnMoby52eSkpfSFpLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3MmJnQ8LjEmJmkuZm9yY2VMYXlvdXRzW2VdLmFscGhhKCk+MCYmaS5mb3JjZUxheW91dHNbZV0uYWxwaGEoMCl9fSgwLGUsYSxyKSkuc3RvcCgpfSgwLG8saSksZnVuY3Rpb24odCxlLHIsaSxhKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIG8oKXt2YXIgcztmb3Iocz0wO3M8bi5mb3JjZVRpY2tzUGVyRnJhbWU7cysrKXIuZm9yY2VMYXlvdXRzW2ldLnRpY2soKTt2YXIgbD1yLmdyYXBoLm5vZGVzO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueTA9dFtlXS55LXRbZV0uZHkvMix0W2VdLnkxPXRbZV0ueTArdFtlXS5keSx0W2VdLngwPXRbZV0ueC10W2VdLmR4LzIsdFtlXS54MT10W2VdLngwK3RbZV0uZHh9KGwpLHIuc2Fua2V5LnVwZGF0ZShyLmdyYXBoKSxfKHQuZmlsdGVyKFAocikpLGUpLHIuZm9yY2VMYXlvdXRzW2ldLmFscGhhKCk+MCl3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG8pO2Vsc2V7dmFyIGM9ci5ub2RlLm9yaWdpbmFsWDtyLm5vZGUueDA9Yy1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1jK3IudmlzaWJsZVdpZHRoLzIsSShyLGEpfX0pfSh0LGUsaSxvLGEpfX0pLm9uKCJkcmFnIixmdW5jdGlvbihyKXtpZigiZml4ZWQiIT09ci5hcnJhbmdlbWVudCl7dmFyIG49aS5ldmVudC54LGE9aS5ldmVudC55OyJzbmFwIj09PXIuYXJyYW5nZW1lbnQ/KHIubm9kZS54MD1uLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPW4rci52aXNpYmxlV2lkdGgvMixyLm5vZGUueTA9YS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9YStyLnZpc2libGVIZWlnaHQvMik6KCJmcmVlZm9ybSI9PT1yLmFycmFuZ2VtZW50JiYoci5ub2RlLngwPW4tci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bityLnZpc2libGVXaWR0aC8yKSxhPU1hdGgubWF4KDAsTWF0aC5taW4oci5zaXplLXIudmlzaWJsZUhlaWdodC8yLGEpKSxyLm5vZGUueTA9YS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9YStyLnZpc2libGVIZWlnaHQvMiksRChyLm5vZGUpLCJzbmFwIiE9PXIuYXJyYW5nZW1lbnQmJihyLnNhbmtleS51cGRhdGUoci5ncmFwaCksXyh0LmZpbHRlcihQKHIpKSxlKSl9fSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKHQpe2lmKCJmaXhlZCIhPT10LmFycmFuZ2VtZW50KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M9ITE7Zm9yKHZhciBlPTA7ZTx0Lm5vZGUuY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7ZSsrKXQubm9kZS5jaGlsZHJlbk5vZGVzW2VdLng9dC5ub2RlLngsdC5ub2RlLmNoaWxkcmVuTm9kZXNbZV0ueT10Lm5vZGUueTsic25hcCIhPT10LmFycmFuZ2VtZW50JiZJKHQsYSl9fSk7dC5vbigiLmRyYWciLG51bGwpLmNhbGwobyl9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGk9MDtpPHQuZ3JhcGgubm9kZXMubGVuZ3RoO2krKyl7dmFyIGE9KHQuZ3JhcGgubm9kZXNbaV0ueDArdC5ncmFwaC5ub2Rlc1tpXS54MSkvMixvPSh0LmdyYXBoLm5vZGVzW2ldLnkwK3QuZ3JhcGgubm9kZXNbaV0ueTEpLzI7ci5wdXNoKGEvdC5maWd1cmUud2lkdGgpLG4ucHVzaChvL3QuZmlndXJlLmhlaWdodCl9bS5jYWxsKCJfZ3VpUmVzdHlsZSIsZSx7Im5vZGUueCI6W3JdLCJub2RlLnkiOltuXX0sdC50cmFjZS5pbmRleCkudGhlbihmdW5jdGlvbigpe2UuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlciYmZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyLnJlbW92ZSgpfSl9ZnVuY3Rpb24gRCh0KXt0Lmxhc3REcmFnZ2VkWD10LngwK3QuZHgvMix0Lmxhc3REcmFnZ2VkWT10LnkwK3QuZHkvMn1mdW5jdGlvbiBQKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlLm9yaWdpbmFsWD09PXQubm9kZS5vcmlnaW5hbFh9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLHUpe3ZhciBoPSExO2YuZW5zdXJlU2luZ2xlKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllciwiZyIsImZpcnN0LXJlbmRlciIsZnVuY3Rpb24oKXtoPSEwfSk7dmFyIHY9dC5fZnVsbExheW91dC5fZHJhZ0NvdmVyLG09ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGcodCkudHJhY2UudmlzaWJsZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIGksYT1nKGUpLG89YS50cmFjZSxzPW8uZG9tYWluLHU9ImgiPT09by5vcmllbnRhdGlvbixoPW8ubm9kZS5wYWQscD1vLm5vZGUudGhpY2tuZXNzLGQ9dC53aWR0aCoocy54WzFdLXMueFswXSksdj10LmhlaWdodCoocy55WzFdLXMueVswXSksbT1hLl9ub2Rlcyx5PWEuX2xpbmtzLHg9YS5jaXJjdWxhcjsoaT14P2Muc2Fua2V5Q2lyY3VsYXIoKS5jaXJjdWxhckxpbmtHYXAoMCk6bC5zYW5rZXkoKSkuaXRlcmF0aW9ucyhuLnNhbmtleUl0ZXJhdGlvbnMpLnNpemUodT9bZCx2XTpbdixkXSkubm9kZVdpZHRoKHApLm5vZGVQYWRkaW5nKGgpLm5vZGVJZChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb2ludE51bWJlcn0pLm5vZGVzKG0pLmxpbmtzKHkpO3ZhciBiLF8sdyxrPWkoKTtmb3IodmFyIFQgaW4gaS5ub2RlUGFkZGluZygpPGgmJmYud2Fybigibm9kZS5wYWQgd2FzIHJlZHVjZWQgdG8gIixpLm5vZGVQYWRkaW5nKCksIiB0byBmaXQgd2l0aGluIHRoZSBmaWd1cmUuIiksYS5fZ3JvdXBMb29rdXApe3ZhciBBLE09cGFyc2VJbnQoYS5fZ3JvdXBMb29rdXBbVF0pO2ZvcihiPTA7YjxrLm5vZGVzLmxlbmd0aDtiKyspaWYoay5ub2Rlc1tiXS5wb2ludE51bWJlcj09PU0pe0E9ay5ub2Rlc1tiXTticmVha31pZihBKXt2YXIgUz17cG9pbnROdW1iZXI6cGFyc2VJbnQoVCkseDA6QS54MCx4MTpBLngxLHkwOkEueTAseTE6QS55MSxwYXJ0T2ZHcm91cDohMCxzb3VyY2VMaW5rczpbXSx0YXJnZXRMaW5rczpbXX07ay5ub2Rlcy51bnNoaWZ0KFMpLEEuY2hpbGRyZW5Ob2Rlcy51bnNoaWZ0KFMpfX1pZihmdW5jdGlvbigpe2ZvcihiPTA7YjxrLm5vZGVzLmxlbmd0aDtiKyspe3ZhciB0LGUscj1rLm5vZGVzW2JdLG49e307Zm9yKF89MDtfPHIudGFyZ2V0TGlua3MubGVuZ3RoO18rKyl0PShlPXIudGFyZ2V0TGlua3NbX10pLnNvdXJjZS5wb2ludE51bWJlcisiOiIrZS50YXJnZXQucG9pbnROdW1iZXIsbi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG5bdF09W10pLG5bdF0ucHVzaChlKTt2YXIgaT1PYmplY3Qua2V5cyhuKTtmb3IoXz0wO188aS5sZW5ndGg7XysrKXt2YXIgYT1uW3Q9aVtfXV0sbz0wLHM9e307Zm9yKHc9MDt3PGEubGVuZ3RoO3crKylzWyhlPWFbd10pLmxhYmVsXXx8KHNbZS5sYWJlbF09MCksc1tlLmxhYmVsXSs9ZS52YWx1ZSxvKz1lLnZhbHVlO2Zvcih3PTA7dzxhLmxlbmd0aDt3KyspKGU9YVt3XSkuZmxvdz17dmFsdWU6byxsYWJlbENvbmNlbnRyYXRpb246c1tlLmxhYmVsXS9vLGNvbmNlbnRyYXRpb246ZS52YWx1ZS9vLGxpbmtzOmF9fXZhciBsPTA7Zm9yKF89MDtfPHIuc291cmNlTGlua3MubGVuZ3RoO18rKylsKz1yLnNvdXJjZUxpbmtzW19dLnZhbHVlO2ZvcihfPTA7XzxyLnNvdXJjZUxpbmtzLmxlbmd0aDtfKyspKGU9ci5zb3VyY2VMaW5rc1tfXSkuY29uY2VudHJhdGlvbk91dD1lLnZhbHVlL2w7dmFyIGM9MDtmb3IoXz0wO188ci50YXJnZXRMaW5rcy5sZW5ndGg7XysrKWMrPXIudGFyZ2V0TGlua3NbX10udmFsdWU7Zm9yKF89MDtfPHIudGFyZ2V0TGlua3MubGVuZ3RoO18rKykoZT1yLnRhcmdldExpbmtzW19dKS5jb25jZW5yYXRpb25Jbj1lLnZhbHVlL2N9fSgpLG8ubm9kZS54Lmxlbmd0aCYmby5ub2RlLnkubGVuZ3RoKXtmb3IoYj0wO2I8TWF0aC5taW4oby5ub2RlLngubGVuZ3RoLG8ubm9kZS55Lmxlbmd0aCxrLm5vZGVzLmxlbmd0aCk7YisrKWlmKG8ubm9kZS54W2JdJiZvLm5vZGUueVtiXSl7dmFyIEU9W28ubm9kZS54W2JdKmQsby5ub2RlLnlbYl0qdl07ay5ub2Rlc1tiXS54MD1FWzBdLXAvMixrLm5vZGVzW2JdLngxPUVbMF0rcC8yO3ZhciBDPWsubm9kZXNbYl0ueTEtay5ub2Rlc1tiXS55MDtrLm5vZGVzW2JdLnkwPUVbMV0tQy8yLGsubm9kZXNbYl0ueTE9RVsxXStDLzJ9InNuYXAiPT09by5hcnJhbmdlbWVudCYmZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTAsYT10Lmxlbmd0aDtmb3IodC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueTAtZS55MH0pLG49MDtuPGE7KytuKShlPXRbbl0pLnkwPj1pfHwocj1pLWUueTApPjFlLTYmJihlLnkwKz1yLGUueTErPXIpLGk9ZS55MStofSl9KGZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybnt4MDp0LngwLGluZGV4OmV9fSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngwLWUueDB9KSxpPVtdLGE9LTEsbz0tMS8wO2ZvcihiPTA7YjxuLmxlbmd0aDtiKyspe3ZhciBzPXRbbltiXS5pbmRleF07cy54MD5vK3AmJihhKz0xLGU9cy54MCksbz1zLngwLGlbYV18fChpW2FdPVtdKSxpW2FdLnB1c2gocykscj1lLXMueDAscy54MCs9cixzLngxKz1yfXJldHVybiBpfShtPWsubm9kZXMpKSxpLnVwZGF0ZShrKX1yZXR1cm57Y2lyY3VsYXI6eCxrZXk6cix0cmFjZTpvLGd1aWQ6Zi5yYW5kc3RyKCksaG9yaXpvbnRhbDp1LHdpZHRoOmQsaGVpZ2h0OnYsbm9kZVBhZDpvLm5vZGUucGFkLG5vZGVMaW5lQ29sb3I6by5ub2RlLmxpbmUuY29sb3Isbm9kZUxpbmVXaWR0aDpvLm5vZGUubGluZS53aWR0aCxsaW5rTGluZUNvbG9yOm8ubGluay5saW5lLmNvbG9yLGxpbmtMaW5lV2lkdGg6by5saW5rLmxpbmUud2lkdGgsdmFsdWVGb3JtYXQ6by52YWx1ZWZvcm1hdCx2YWx1ZVN1ZmZpeDpvLnZhbHVlc3VmZml4LHRleHRGb250Om8udGV4dGZvbnQsdHJhbnNsYXRlWDpzLnhbMF0qdC53aWR0aCt0Lm1hcmdpbi5sLHRyYW5zbGF0ZVk6dC5oZWlnaHQtcy55WzFdKnQuaGVpZ2h0K3QubWFyZ2luLnQsZHJhZ1BhcmFsbGVsOnU/djpkLGRyYWdQZXJwZW5kaWN1bGFyOnU/ZDp2LGFycmFuZ2VtZW50Om8uYXJyYW5nZW1lbnQsc2Fua2V5OmksZ3JhcGg6ayxmb3JjZUxheW91dHM6e30saW50ZXJhY3Rpb25TdGF0ZTp7ZHJhZ0luUHJvZ3Jlc3M6ITEsaG92ZXJlZDohMX19fS5iaW5kKG51bGwsaSkpLGI9ZS5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5KS5kYXRhKG0scCk7Yi5leGl0KCkucmVtb3ZlKCksYi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zYW5rZXksITApLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLmF0dHIoInRyYW5zZm9ybSIsVCksYi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsVCk7dmFyIF89Yi5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5TGlua3MpLmRhdGEoZCxwKTtfLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmtzLCEwKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgST1fLnNlbGVjdEFsbCgiLiIrbi5jbi5zYW5rZXlMaW5rKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdyYXBoLmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIG49YShlLmNvbG9yKTtlLmNvbmNlbnRyYXRpb25zY2FsZSYmKG49YShlLmNvbmNlbnRyYXRpb25zY2FsZShlLmZsb3cubGFiZWxDb25jZW50cmF0aW9uKSkpO3ZhciBpPWUuc291cmNlLmxhYmVsKyJ8IitlLnRhcmdldC5sYWJlbCsiX18iK3I7cmV0dXJuIGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2NpcmN1bGFyOnQuY2lyY3VsYXIsa2V5OmksdHJhY2VJZDp0LmtleSxwb2ludE51bWJlcjplLnBvaW50TnVtYmVyLGxpbms6ZSx0aW55Q29sb3JIdWU6by50aW55UkdCKG4pLHRpbnlDb2xvckFscGhhOm4uZ2V0QWxwaGEoKSxsaW5rUGF0aDp5LGxpbmtMaW5lQ29sb3I6dC5saW5rTGluZUNvbG9yLGxpbmtMaW5lV2lkdGg6dC5saW5rTGluZVdpZHRoLHZhbHVlRm9ybWF0OnQudmFsdWVGb3JtYXQsdmFsdWVTdWZmaXg6dC52YWx1ZVN1ZmZpeCxzYW5rZXk6dC5zYW5rZXkscGFyZW50OnQsaW50ZXJhY3Rpb25TdGF0ZTp0LmludGVyYWN0aW9uU3RhdGUsZmxvdzplLmZsb3d9fS5iaW5kKG51bGwsdCkpfSxwKTtJLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmssITApLmNhbGwoeixiLHUubGlua0V2ZW50cyksSS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbih0KXtyZXR1cm4gayh0KT9vLnRpbnlSR0IoYSh0LmxpbmtMaW5lQ29sb3IpKTp0LnRpbnlDb2xvckh1ZX0pLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIGsodCk/by5vcGFjaXR5KHQubGlua0xpbmVDb2xvcik6dC50aW55Q29sb3JBbHBoYX0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiBrKHQpP3QubGlua0xpbmVXaWR0aDoxfSkuYXR0cigiZCIseSgpKSxJLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fGh8fHY/MTowfSkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSksSS5leGl0KCkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIEQ9Yi5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5Tm9kZVNldCkuZGF0YShkLHApO0QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Fua2V5Tm9kZVNldCwhMCksRC5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbih0KXtzd2l0Y2godC5hcnJhbmdlbWVudCl7Y2FzZSJmaXhlZCI6cmV0dXJuImRlZmF1bHQiO2Nhc2UicGVycGVuZGljdWxhciI6cmV0dXJuIm5zLXJlc2l6ZSI7ZGVmYXVsdDpyZXR1cm4ibW92ZSJ9fSk7dmFyIFA9RC5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5Tm9kZSkuZGF0YShmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoLm5vZGVzO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbFg9KHRbZV0ueDArdFtlXS54MSkvMix0W2VdLm9yaWdpbmFsWT0odFtlXS55MCt0W2VdLnkxKS8yLC0xPT09ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSYmci5wdXNoKHRbZV0ub3JpZ2luYWxYKTtmb3Ioci5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsTGF5ZXJJbmRleD1yLmluZGV4T2YodFtlXS5vcmlnaW5hbFgpLHRbZV0ub3JpZ2luYWxMYXllcj10W2VdLm9yaWdpbmFsTGF5ZXJJbmRleC8oci5sZW5ndGgtMSl9KGUpLGUubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9YShlLmNvbG9yKSxpPW4ubm9kZVBhZEFjcm9zcyxzPXQubm9kZVBhZC8yO2UuZHg9ZS54MS1lLngwLGUuZHk9ZS55MS1lLnkwO3ZhciBsPWUuZHgsYz1NYXRoLm1heCguNSxlLmR5KSx1PSJub2RlXyIrZS5wb2ludE51bWJlcjtyZXR1cm4gZS5ncm91cCYmKHU9Zi5yYW5kc3RyKCkpLGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2luZGV4OmUucG9pbnROdW1iZXIsa2V5OnUscGFydE9mR3JvdXA6ZS5wYXJ0T2ZHcm91cHx8ITEsZ3JvdXA6ZS5ncm91cCx0cmFjZUlkOnQua2V5LHRyYWNlOnQudHJhY2Usbm9kZTplLG5vZGVQYWQ6dC5ub2RlUGFkLG5vZGVMaW5lQ29sb3I6dC5ub2RlTGluZUNvbG9yLG5vZGVMaW5lV2lkdGg6dC5ub2RlTGluZVdpZHRoLHRleHRGb250OnQudGV4dEZvbnQsc2l6ZTp0Lmhvcml6b250YWw/dC5oZWlnaHQ6dC53aWR0aCx2aXNpYmxlV2lkdGg6TWF0aC5jZWlsKGwpLHZpc2libGVIZWlnaHQ6Yyx6b25lWDotaSx6b25lWTotcyx6b25lV2lkdGg6bCsyKmksem9uZUhlaWdodDpjKzIqcyxsYWJlbFk6dC5ob3Jpem9udGFsP2UuZHkvMisxOmUuZHgvMisxLGxlZnQ6MT09PWUub3JpZ2luYWxMYXllcixzaXplQWNyb3NzOnQud2lkdGgsZm9yY2VMYXlvdXRzOnQuZm9yY2VMYXlvdXRzLGhvcml6b250YWw6dC5ob3Jpem9udGFsLGRhcmtCYWNrZ3JvdW5kOnIuZ2V0QnJpZ2h0bmVzcygpPD0xMjgsdGlueUNvbG9ySHVlOm8udGlueVJHQihyKSx0aW55Q29sb3JBbHBoYTpyLmdldEFscGhhKCksdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxncmFwaDp0LmdyYXBoLGFycmFuZ2VtZW50OnQuYXJyYW5nZW1lbnQsdW5pcXVlTm9kZUxhYmVsUGF0aElkOlt0Lmd1aWQsdC5rZXksdV0uam9pbigiXyIpLGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZpZ3VyZTp0fX0uYmluZChudWxsLHQpKX0scCk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zYW5rZXlOb2RlLCEwKS5jYWxsKHgpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbihlKXtyZXR1cm4hdC5fY29udGV4dC5zdGF0aWNQbG90JiYhaHx8ZS5wYXJ0T2ZHcm91cD8wOjF9KSxQLmNhbGwoeixiLHUubm9kZUV2ZW50cykuY2FsbChPLEksdSx0KSxQLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuY2FsbCh4KS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucGFydE9mR3JvdXA/MDoxfSksUC5leGl0KCkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIFI9UC5zZWxlY3RBbGwoIi4iK24uY24ubm9kZVJlY3QpLmRhdGEoZCk7Ui5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5ub2RlUmVjdCwhMCkuY2FsbCh3KSxSLnN0eWxlKCJzdHJva2Utd2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVMaW5lV2lkdGh9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbih0KXtyZXR1cm4gby50aW55UkdCKGEodC5ub2RlTGluZUNvbG9yKSl9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiBvLm9wYWNpdHkodC5ub2RlTGluZUNvbG9yKX0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLFIudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5jYWxsKHcpO3ZhciBGPVAuc2VsZWN0QWxsKCIuIituLmNuLm5vZGVDYXB0dXJlKS5kYXRhKGQpO0YuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24ubm9kZUNhcHR1cmUsITApLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLEYuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVh9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lWX0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lV2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVIZWlnaHR9KTt2YXIgQj1QLnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlQ2VudGVyZWQpLmRhdGEoZCk7Qi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5ub2RlQ2VudGVyZWQsITApLmF0dHIoInRyYW5zZm9ybSIsQSksQi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsQSk7dmFyIE49Qi5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUxhYmVsR3VpZGUpLmRhdGEoZCk7Ti5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxHdWlkZSwhMCkuYXR0cigiaWQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pLmF0dHIoImQiLE0pLmF0dHIoInRyYW5zZm9ybSIsUyksTi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoImQiLE0pLmF0dHIoInRyYW5zZm9ybSIsUyk7dmFyIGo9Qi5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUxhYmVsKS5kYXRhKGQpO2ouZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLEUpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKSxqLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8iLTFweCAxcHggMXB4ICNmZmYsIDFweCAxcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYiOiJub25lIn0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KGosdC50ZXh0Rm9udCl9KSxqLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIixFKTt2YXIgVj1qLnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlTGFiZWxUZXh0UGF0aCkuZGF0YShkKTtWLmVudGVyKCkuYXBwZW5kKCJ0ZXh0UGF0aCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxUZXh0UGF0aCwhMCkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigieGxpbms6aHJlZiIsZnVuY3Rpb24odCl7cmV0dXJuIiMiK3QudW5pcXVlTm9kZUxhYmVsUGF0aElkfSkuYXR0cigic3RhcnRPZmZzZXQiLEwpLnN0eWxlKCJmaWxsIixDKSxWLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbHx8dC5ub2RlLmR5PjU/dC5ub2RlLmxhYmVsOiIifSkuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD8iZW5kIjoic3RhcnQifSksVi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInN0YXJ0T2Zmc2V0IixMKS5zdHlsZSgiZmlsbCIsQyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvZ3VwIjo2OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vY29uc3RhbnRzIjoxMDQ1LCJAcGxvdGx5L2QzLXNhbmtleSI6NDgsZDM6MTU0LCJkMy1mb3JjZSI6MTQ2LCJkMy1pbnRlcnBvbGF0ZSI6MTQ4LCJkMy1zYW5rZXktY2lyY3VsYXIiOjE1MSx0aW55Y29sb3IyOjUyMX1dLDEwNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LCJ0eCIpLG4ubWVyZ2VBcnJheShlLmhvdmVydGV4dCx0LCJodHgiKSxuLm1lcmdlQXJyYXkoZS5jdXN0b21kYXRhLHQsImRhdGEiKSxuLm1lcmdlQXJyYXkoZS50ZXh0cG9zaXRpb24sdCwidHAiKSxlLnRleHRmb250JiYobi5tZXJnZUFycmF5KGUudGV4dGZvbnQuc2l6ZSx0LCJ0cyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmNvbG9yLHQsInRjIiksbi5tZXJnZUFycmF5KGUudGV4dGZvbnQuZmFtaWx5LHQsInRmIikpO3ZhciBpPWUubWFya2VyO2lmKGkpe24ubWVyZ2VBcnJheShpLnNpemUsdCwibXMiKSxuLm1lcmdlQXJyYXkoaS5vcGFjaXR5LHQsIm1vIiksbi5tZXJnZUFycmF5KGkuc3ltYm9sLHQsIm14Iiksbi5tZXJnZUFycmF5KGkuY29sb3IsdCwibWMiKTt2YXIgYT1pLmxpbmU7aS5saW5lJiYobi5tZXJnZUFycmF5KGEuY29sb3IsdCwibWxjIiksbi5tZXJnZUFycmF5KGEud2lkdGgsdCwibWx3IikpO3ZhciBvPWkuZ3JhZGllbnQ7byYmIm5vbmUiIT09by50eXBlJiYobi5tZXJnZUFycmF5KG8udHlwZSx0LCJtZ3QiKSxuLm1lcmdlQXJyYXkoby5jb2xvcix0LCJtZ2MiKSl9fX0seyIuLi8uLi9saWIiOjcwMH1dLDEwNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0seDA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSxkeDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSx5MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sc3RhY2tncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMifSxncm91cG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzdGFja2dhcHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZmVyIHplcm8iLCJpbnRlcnBvbGF0ZSJdLGRmbHQ6ImluZmVyIHplcm8iLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyIsInRleHQiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6ImNhbGMifSxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJwb2ludHMiLCJmaWxscyJdLGVkaXRUeXBlOiJzdHlsZSJ9LGhvdmVydGVtcGxhdGU6bih7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsInNwbGluZSIsImh2IiwidmgiLCJodmgiLCJ2aHYiXSxkZmx0OiJsaW5lYXIiLGVkaXRUeXBlOiJwbG90In0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLjMsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sZGFzaDp1KHt9LHMse2VkaXRUeXBlOiJzdHlsZSJ9KSxzaW1wbGlmeTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sY29ubmVjdGdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjbGlwb25heGlzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvemVyb3kiLCJ0b3plcm94IiwidG9uZXh0eSIsInRvbmV4dHgiLCJ0b3NlbGYiLCJ0b25leHQiXSxlZGl0VHlwZToiY2FsYyJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sbWFya2VyOnUoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmwuc3ltYm9sTGlzdCxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjYsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1pbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGlhbWV0ZXIiLCJhcmVhIl0sZGZsdDoiZGlhbWV0ZXIiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3JiYXI6YSxsaW5lOnUoe3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSxlZGl0VHlwZToiY2FsYyJ9LGkoIm1hcmtlci5saW5lIix7YW5pbTohMH0pKSxncmFkaWVudDp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFkaWFsIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwibm9uZSJdLGFycmF5T2s6ITAsZGZsdDoibm9uZSIsZWRpdFR5cGU6ImNhbGMifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0saSgibWFya2VyIix7YW5pbTohMH0pKSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIGxlZnQiLCJ0b3AgY2VudGVyIiwidG9wIHJpZ2h0IiwibWlkZGxlIGxlZnQiLCJtaWRkbGUgY2VudGVyIiwibWlkZGxlIHJpZ2h0IiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZGZsdDoibWlkZGxlIGNlbnRlciIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250Om8oe2VkaXRUeXBlOiJjYWxjIixjb2xvckVkaXRUeXBlOiJzdHlsZSIsYXJyYXlPazohMH0pLHI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1ODQsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuL2NvbnN0YW50cyI6MTA1NX1dLDEwNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0scz10KCIuL3N1YnR5cGVzIiksbD10KCIuL2NvbG9yc2NhbGVfY2FsYyIpLGM9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSx1PXQoIi4vY2FsY19zZWxlY3Rpb24iKTtmdW5jdGlvbiBmKHQsZSxyLG4saSxvLGwpe3ZhciBjPWUuX2xlbmd0aCx1PXQuX2Z1bGxMYXlvdXQsZj1yLl9pZCxoPW4uX2lkLHA9dS5fZmlyc3RTY2F0dGVyW2QoZSldPT09ZS51aWQsdj0oZyhlLHUscixuKXx8e30pLm9yaWVudGF0aW9uLG09ZS5maWxsO3IuX21pbkR0aWNrPTAsbi5fbWluRHRpY2s9MDt2YXIgeT17cGFkZGVkOiEwfSx4PXtwYWRkZWQ6ITB9O2wmJih5LnBwYWQ9eC5wcGFkPWwpO3ZhciBiPWM8Mnx8aVswXSE9PWlbYy0xXXx8b1swXSE9PW9bYy0xXTtiJiYoInRvemVyb3giPT09bXx8InRvbmV4dHgiPT09bSYmKHB8fCJoIj09PXYpKT95LnRvemVybz0hMDooZS5lcnJvcl95fHx7fSkudmlzaWJsZXx8InRvbmV4dHkiIT09bSYmInRvemVyb3kiIT09bSYmKHMuaGFzTWFya2VycyhlKXx8cy5oYXNUZXh0KGUpKXx8KHkucGFkZGVkPSExLHkucHBhZD0wKSxiJiYoInRvemVyb3kiPT09bXx8InRvbmV4dHkiPT09bSYmKHB8fCJ2Ij09PXYpKT94LnRvemVybz0hMDoidG9uZXh0eCIhPT1tJiYidG96ZXJveCIhPT1tfHwoeC5wYWRkZWQ9ITEpLGYmJihlLl9leHRyZW1lc1tmXT1hLmZpbmRFeHRyZW1lcyhyLGkseSkpLGgmJihlLl9leHRyZW1lc1toXT1hLmZpbmRFeHRyZW1lcyhuLG8seCkpfWZ1bmN0aW9uIGgodCxlKXtpZihzLmhhc01hcmtlcnModCkpe3ZhciByLG49dC5tYXJrZXIsbz0xLjYqKHQubWFya2VyLnNpemVyZWZ8fDEpO2lmKHI9ImFyZWEiPT09dC5tYXJrZXIuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydCgodHx8MCkvbyksMyl9OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgodHx8MCkvbywzKX0saS5pc0FycmF5T3JUeXBlZEFycmF5KG4uc2l6ZSkpe3ZhciBsPXt0eXBlOiJsaW5lYXIifTthLnNldENvbnZlcnQobCk7Zm9yKHZhciBjPWwubWFrZUNhbGNkYXRhKHQubWFya2VyLCJzaXplIiksdT1uZXcgQXJyYXkoZSksZj0wO2Y8ZTtmKyspdVtmXT1yKGNbZl0pO3JldHVybiB1fXJldHVybiByKG4uc2l6ZSl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1kKGUpLG49dC5fZmlyc3RTY2F0dGVyO25bcl18fChuW3JdPWUudWlkKX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQuc3RhY2tncm91cDtyZXR1cm4gdC54YXhpcyt0LnlheGlzK3QudHlwZSsoZT8iLSIrZToiIil9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT10LnN0YWNrZ3JvdXA7aWYoaSl7dmFyIGE9ZS5fc2NhdHRlclN0YWNrT3B0c1tyLl9pZCtuLl9pZF1baV0sbz0idiI9PT1hLm9yaWVudGF0aW9uP246cjtyZXR1cm4ibGluZWFyIj09PW8udHlwZXx8ImxvZyI9PT1vLnR5cGU/YTp2b2lkIDB9fWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLHMsZCx2LG0seSx4PXQuX2Z1bGxMYXlvdXQsYj1hLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksXz1hLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iiksdz1iLm1ha2VDYWxjZGF0YShlLCJ4Iiksaz1fLm1ha2VDYWxjZGF0YShlLCJ5IiksVD1lLl9sZW5ndGgsQT1uZXcgQXJyYXkoVCksTT1lLmlkcyxTPWcoZSx4LGIsXyksRT0hMTtwKHgsZSk7dmFyIEMsTD0ieCIsej0ieSI7Zm9yKFM/KGkucHVzaFVuaXF1ZShTLnRyYWNlSW5kaWNlcyxlLl9leHBhbmRlZEluZGV4KSwocj0idiI9PT1TLm9yaWVudGF0aW9uKT8oej0icyIsQz0ieCIpOihMPSJzIixDPSJ5IiksbT0iaW50ZXJwb2xhdGUiPT09Uy5zdGFja2dhcHMpOmYodCxlLGIsXyx3LGssaChlLFQpKSxzPTA7czxUO3MrKyl7dmFyIE89QVtzXT17fSxJPW4od1tzXSksRD1uKGtbc10pO0kmJkQ/KE9bTF09d1tzXSxPW3pdPWtbc10pOlMmJihyP0k6RCk/KE9bQ109cj93W3NdOmtbc10sTy5nYXA9ITAsbT8oTy5zPW8sRT0hMCk6Ty5zPTApOk9bTF09T1t6XT1vLE0mJihPLmlkPVN0cmluZyhNW3NdKSl9aWYoYyhBLGUpLGwodCxlKSx1KEEsZSksUyl7Zm9yKHM9MDtzPEEubGVuZ3RoOylBW3NdW0NdPT09bz9BLnNwbGljZShzLDEpOnMrKztpZihpLnNvcnQoQSxmdW5jdGlvbih0LGUpe3JldHVybiB0W0NdLWVbQ118fHQuaS1lLml9KSxFKXtmb3Iocz0wO3M8QS5sZW5ndGgtMSYmQVtzXS5nYXA7KXMrKztmb3IoKHk9QVtzXS5zKXx8KHk9QVtzXS5zPTApLGQ9MDtkPHM7ZCsrKUFbZF0ucz15O2Zvcih2PUEubGVuZ3RoLTE7dj5zJiZBW3ZdLmdhcDspdi0tO2Zvcih5PUFbdl0ucyxkPUEubGVuZ3RoLTE7ZD52O2QtLSlBW2RdLnM9eTtmb3IoO3M8djspaWYoQVsrK3NdLmdhcCl7Zm9yKGQ9cysxO0FbZF0uZ2FwOylkKys7Zm9yKHZhciBQPUFbcy0xXVtDXSxSPUFbcy0xXS5zLEY9KEFbZF0ucy1SKS8oQVtkXVtDXS1QKTtzPGQ7KUFbc10ucz1SKyhBW3NdW0NdLVApKkYscysrfX19cmV0dXJuIEF9LGNhbGNNYXJrZXJTaXplOmgsY2FsY0F4aXNFeHBhbnNpb246ZixzZXRGaXJzdFNjYXR0ZXI6cCxnZXRTdGFja09wdHM6Z319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNTAsIi4vY2FsY19zZWxlY3Rpb24iOjEwNTMsIi4vY29sb3JzY2FsZV9jYWxjIjoxMDU0LCIuL3N1YnR5cGVzIjoxMDc1LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sMTA1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJm4udGFnU2VsZWN0ZWQodCxlKX19LHsiLi4vLi4vbGliIjo3MDB9XSwxMDU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YS5oYXNMaW5lcyhlKSYmbihlLCJsaW5lIikmJmkodCxlLHt2YWxzOmUubGluZS5jb2xvcixjb250YWluZXJTdHI6ImxpbmUiLGNMZXR0ZXI6ImMifSksYS5oYXNNYXJrZXJzKGUpJiYobihlLCJtYXJrZXIiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbihlLCJtYXJrZXIubGluZSIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NTg4LCIuL3N1YnR5cGVzIjoxMDc1fV0sMTA1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1BUU19MSU5FU09OTFk6MjAsbWluVG9sZXJhbmNlOi4yLHRvbGVyYW5jZUdyb3d0aDoxMCxtYXhTY3JlZW5zQXdheToyMCxldmVudERhdGFLZXlzOltdfX0se31dLDEwNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jYWxjIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSxvKXtpW25dPSEwO3ZhciBzPXtpOm51bGwsZ2FwOiEwLHM6MH07aWYoc1tvXT1yLHQuc3BsaWNlKGUsMCxzKSxlJiZyPT09dFtlLTFdW29dKXt2YXIgbD10W2UtMV07cy5zPWwucyxzLmk9bC5pLHMuZ2FwPWwuZ2FwfWVsc2UgYSYmKHMucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10W2UtMV0sYT10W2UrMV07cmV0dXJuIGE/aT9pLnMrKGEucy1pLnMpKihyLWlbbl0pLyhhW25dLWlbbl0pOmEuczppLnN9KHQsZSxyLG8pKTtlfHwodFswXS50PXRbMV0udCx0WzBdLnRyYWNlPXRbMV0udHJhY2UsZGVsZXRlIHRbMV0udCxkZWxldGUgdFsxXS50cmFjZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS54YXhpcyxhPWUueWF4aXMsbz1yLl9pZCthLl9pZCxzPXQuX2Z1bGxMYXlvdXQuX3NjYXR0ZXJTdGFja09wdHNbb107aWYocyl7dmFyIGwsYyx1LGYsaCxwLGQsZyx2LG0seSx4LGIsXyx3LGs9dC5jYWxjZGF0YTtmb3IodmFyIFQgaW4gcyl7dmFyIEE9KG09c1tUXSkudHJhY2VJbmRpY2VzO2lmKEEubGVuZ3RoKXtmb3IoeT0iaW50ZXJwb2xhdGUiPT09bS5zdGFja2dhcHMseD1tLmdyb3Vwbm9ybSwidiI9PT1tLm9yaWVudGF0aW9uPyhiPSJ4IixfPSJ5Iik6KGI9InkiLF89IngiKSx3PW5ldyBBcnJheShBLmxlbmd0aCksbD0wO2w8dy5sZW5ndGg7bCsrKXdbbF09ITE7cD1rW0FbMF1dO3ZhciBNPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKGw9MDtsPHAubGVuZ3RoO2wrKylNW2xdPXBbbF1bYl07Zm9yKGw9MTtsPEEubGVuZ3RoO2wrKyl7Zm9yKGg9a1tBW2xdXSxjPXU9MDtjPGgubGVuZ3RoO2MrKyl7Zm9yKGQ9aFtjXVtiXTtkPk1bdV0mJnU8TS5sZW5ndGg7dSsrKWkoaCxjLE1bdV0sbCx3LHksYiksYysrO2lmKGQhPT1NW3VdKXtmb3IoZj0wO2Y8bDtmKyspaShrW0FbZl1dLHUsZCxmLHcseSxiKTtNLnNwbGljZSh1LDAsZCl9dSsrfWZvcig7dTxNLmxlbmd0aDt1KyspaShoLGMsTVt1XSxsLHcseSxiKSxjKyt9dmFyIFM9TS5sZW5ndGg7Zm9yKGM9MDtjPHAubGVuZ3RoO2MrKyl7Zm9yKGc9cFtjXVtfXT1wW2NdLnMsbD0xO2w8QS5sZW5ndGg7bCsrKShoPWtbQVtsXV0pWzBdLnRyYWNlLl9yYXdMZW5ndGg9aFswXS50cmFjZS5fbGVuZ3RoLGhbMF0udHJhY2UuX2xlbmd0aD1TLGcrPWhbY10ucyxoW2NdW19dPWc7aWYoeClmb3Iodj0oImZyYWN0aW9uIj09PXg/ZzpnLzEwMCl8fDEsbD0wO2w8QS5sZW5ndGg7bCsrKXt2YXIgRT1rW0FbbF1dW2NdO0VbX10vPXYsRS5zTm9ybT1FLnMvdn19Zm9yKGw9MDtsPEEubGVuZ3RoO2wrKyl7dmFyIEM9KGg9a1tBW2xdXSlbMF0udHJhY2UsTD1uLmNhbGNNYXJrZXJTaXplKEMsQy5fcmF3TGVuZ3RoKSx6PUFycmF5LmlzQXJyYXkoTCk7aWYoTCYmd1tsXXx8eil7dmFyIE89TDtmb3IoTD1uZXcgQXJyYXkoUyksYz0wO2M8UztjKyspTFtjXT1oW2NdLmdhcD8wOno/T1toW2NdLmldOk99dmFyIEk9bmV3IEFycmF5KFMpLEQ9bmV3IEFycmF5KFMpO2ZvcihjPTA7YzxTO2MrKylJW2NdPWhbY10ueCxEW2NdPWhbY10ueTtuLmNhbGNBeGlzRXhwYW5zaW9uKHQsQyxyLGEsSSxELEwpLGhbMF0udC5vcmllbnRhdGlvbj1tLm9yaWVudGF0aW9ufX19fX19LHsiLi9jYWxjIjoxMDUyfV0sMTA1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07aWYoInNjYXR0ZXIiPT09ci50eXBlKXt2YXIgbj1yLmZpbGw7aWYoIm5vbmUiIT09biYmInRvc2VsZiIhPT1uJiYoci5vcGFjaXR5PXZvaWQgMCwidG9uZXh0eSI9PT1ufHwidG9uZXh0eCI9PT1uKSlmb3IodmFyIGk9ZS0xO2k+PTA7aS0tKXt2YXIgYT10W2ldO2lmKCJzY2F0dGVyIj09PWEudHlwZSYmYS54YXhpcz09PXIueGF4aXMmJmEueWF4aXM9PT1yLnlheGlzKXthLm9wYWNpdHk9dm9pZCAwO2JyZWFrfX19fX19LHt9XSwxMDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKSxzPXQoIi4vc3VidHlwZXMiKSxsPXQoIi4veHlfZGVmYXVsdHMiKSxjPXQoIi4vc3RhY2tfZGVmYXVsdHMiKSx1PXQoIi4vbWFya2VyX2RlZmF1bHRzIiksZj10KCIuL2xpbmVfZGVmYXVsdHMiKSxoPXQoIi4vbGluZV9zaGFwZV9kZWZhdWx0cyIpLHA9dCgiLi90ZXh0X2RlZmF1bHRzIiksZD10KCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixnKXtmdW5jdGlvbiB2KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIG09bCh0LGUsZyx2KTtpZihtfHwoZS52aXNpYmxlPSExKSxlLnZpc2libGUpe3ZhciB5PWModCxlLGcsdikseD0heSYmbTxvLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyI7digidGV4dCIpLHYoImhvdmVydGV4dCIpLHYoIm1vZGUiLHgpLHMuaGFzTGluZXMoZSkmJihmKHQsZSxyLGcsdiksaCh0LGUsdiksdigiY29ubmVjdGdhcHMiKSx2KCJsaW5lLnNpbXBsaWZ5IikpLHMuaGFzTWFya2VycyhlKSYmdSh0LGUscixnLHYse2dyYWRpZW50OiEwfSkscy5oYXNUZXh0KGUpJiZwKHQsZSxnLHYpO3ZhciBiPVtdOyhzLmhhc01hcmtlcnMoZSl8fHMuaGFzVGV4dChlKSkmJih2KCJjbGlwb25heGlzIiksdigibWFya2VyLm1heGRpc3BsYXllZCIpLGIucHVzaCgicG9pbnRzIikpLHYoImZpbGwiLHk/eS5maWxsRGZsdDoibm9uZSIpLCJub25lIiE9PWUuZmlsbCYmKGQodCxlLHIsdikscy5oYXNMaW5lcyhlKXx8aCh0LGUsdikpO3ZhciBfPShlLmxpbmV8fHt9KS5jb2xvcix3PShlLm1hcmtlcnx8e30pLmNvbG9yOyJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8Yi5wdXNoKCJmaWxscyIpLHYoImhvdmVyb24iLGIuam9pbigiKyIpfHwicG9pbnRzIiksImZpbGxzIiE9PWUuaG92ZXJvbiYmdigiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBrPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO2sodCxlLF98fHd8fHIse2F4aXM6InkifSksayh0LGUsX3x8d3x8cix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx2KX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2F0dHJpYnV0ZXMiOjEwNTEsIi4vY29uc3RhbnRzIjoxMDU1LCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA2MCwiLi9saW5lX2RlZmF1bHRzIjoxMDY0LCIuL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEwNjYsIi4vbWFya2VyX2RlZmF1bHRzIjoxMDcwLCIuL3N0YWNrX2RlZmF1bHRzIjoxMDczLCIuL3N1YnR5cGVzIjoxMDc1LCIuL3RleHRfZGVmYXVsdHMiOjEwNzYsIi4veHlfZGVmYXVsdHMiOjEwNzd9XSwxMDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHR8fDA9PT10fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9QXJyYXkuaXNBcnJheShyKT9mdW5jdGlvbih0KXtyLnB1c2godCl9OmZ1bmN0aW9uKHQpe3IudGV4dD10fSxvPW4uZXh0cmFjdE9wdGlvbih0LGUsImh0eCIsImhvdmVydGV4dCIpO2lmKGkobykpcmV0dXJuIGEobyk7dmFyIHM9bi5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7cmV0dXJuIGkocyk/YShzKTp2b2lkIDB9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sMTA2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz0hMTtpZihlLm1hcmtlcil7dmFyIHM9ZS5tYXJrZXIuY29sb3IsbD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yO3MmJiFpKHMpP289czpsJiYhaShsKSYmKG89bCl9YSgiZmlsbGNvbG9yIixuLmFkZE9wYWNpdHkoKGUubGluZXx8e30pLmNvbG9yfHxvfHxyLC41KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDB9XSwxMDYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhO2lmKCJsaW5lcyI9PT10Lm1vZGUpcmV0dXJuKHI9dC5saW5lLmNvbG9yKSYmbi5vcGFjaXR5KHIpP3I6dC5maWxsY29sb3I7aWYoIm5vbmUiPT09dC5tb2RlKXJldHVybiB0LmZpbGw/dC5maWxsY29sb3I6IiI7dmFyIG89ZS5tY2N8fCh0Lm1hcmtlcnx8e30pLmNvbG9yLHM9ZS5tbGNjfHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybihhPW8mJm4ub3BhY2l0eShvKT9vOnMmJm4ub3BhY2l0eShzKSYmKGUubWx3fHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9zOiIiKT9uLm9wYWNpdHkoYSk8LjM/bi5hZGRPcGFjaXR5KGEsLjMpOmE6KHI9KHQubGluZXx8e30pLmNvbG9yKSYmbi5vcGFjaXR5KHIpJiZpLmhhc0xpbmVzKHQpJiZ0LmxpbmUud2lkdGg/cjp0LmZpbGxjb2xvcn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuL3N1YnR5cGVzIjoxMDc1fV0sMTA2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuL2dldF90cmFjZV9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi9maWxsX2hvdmVyX3RleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9dC5jZCxmPXVbMF0udHJhY2UsaD10LnhhLHA9dC55YSxkPWguYzJwKGUpLGc9cC5jMnAociksdj1bZCxnXSxtPWYuaG92ZXJvbnx8IiIseT0tMSE9PWYubW9kZS5pbmRleE9mKCJtYXJrZXJzIik/MzouNTtpZigtMSE9PW0uaW5kZXhPZigicG9pbnRzIikpe3ZhciB4PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KHksdC5tcmN8fDApLHI9aC5jMnAodC54KS1kLG49cC5jMnAodC55KS1nO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocipyK24qbiktZSwxLXkvZSl9LGI9aS5nZXREaXN0YW5jZUZ1bmN0aW9uKGMsZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCkscj0xLTEvZSxuPU1hdGguYWJzKGguYzJwKHQueCktZCk7cmV0dXJuIG48ZT9yKm4vZTpuLWUrcn0sZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCkscj0xLTEvZSxuPU1hdGguYWJzKHAuYzJwKHQueSktZyk7cmV0dXJuIG48ZT9yKm4vZTpuLWUrcn0seCk7aWYoaS5nZXRDbG9zZXN0KHUsYix0KSwhMSE9PXQuaW5kZXgpe3ZhciBfPXVbdC5pbmRleF0sdz1oLmMycChfLngsITApLGs9cC5jMnAoXy55LCEwKSxUPV8ubXJjfHwxO3QuaW5kZXg9Xy5pO3ZhciBBPXVbMF0udC5vcmllbnRhdGlvbixNPUEmJihfLnNOb3JtfHxfLnMpLFM9ImgiPT09QT9NOl8ueCxFPSJ2Ij09PUE/TTpfLnk7cmV0dXJuIG4uZXh0ZW5kRmxhdCh0LHtjb2xvcjpvKGYsXykseDA6dy1ULHgxOncrVCx4TGFiZWxWYWw6Uyx5MDprLVQseTE6aytULHlMYWJlbFZhbDpFLHNwaWtlRGlzdGFuY2U6eChfKSxob3ZlcnRlbXBsYXRlOmYuaG92ZXJ0ZW1wbGF0ZX0pLGwoXyxmLHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKShfLGYsdCksW3RdfX1pZigtMSE9PW0uaW5kZXhPZigiZmlsbHMiKSYmZi5fcG9seWdvbnMpe3ZhciBDLEwseixPLEksRCxQLFIsRixCPWYuX3BvbHlnb25zLE49W10saj0hMSxWPTEvMCxVPS0xLzAscT0xLzAsSD0tMS8wO2ZvcihDPTA7QzxCLmxlbmd0aDtDKyspKHo9QltDXSkuY29udGFpbnModikmJihqPSFqLE4ucHVzaCh6KSxxPU1hdGgubWluKHEsei55bWluKSxIPU1hdGgubWF4KEgsei55bWF4KSk7aWYoail7dmFyIEc9KChxPU1hdGgubWF4KHEsMCkpKyhIPU1hdGgubWluKEgscC5fbGVuZ3RoKSkpLzI7Zm9yKEM9MDtDPE4ubGVuZ3RoO0MrKylmb3IoTz1OW0NdLnB0cyxMPTE7TDxPLmxlbmd0aDtMKyspKFI9T1tMLTFdWzFdKT5HIT0oRj1PW0xdWzFdKT49RyYmKEQ9T1tMLTFdWzBdLFA9T1tMXVswXSxGLVImJihJPUQrKFAtRCkqKEctUikvKEYtUiksVj1NYXRoLm1pbihWLEkpLFU9TWF0aC5tYXgoVSxJKSkpO1Y9TWF0aC5tYXgoViwwKSxVPU1hdGgubWluKFUsaC5fbGVuZ3RoKTt2YXIgWT1zLmRlZmF1bHRMaW5lO3JldHVybiBzLm9wYWNpdHkoZi5maWxsY29sb3IpP1k9Zi5maWxsY29sb3I6cy5vcGFjaXR5KChmLmxpbmV8fHt9KS5jb2xvcikmJihZPWYubGluZS5jb2xvciksbi5leHRlbmRGbGF0KHQse2Rpc3RhbmNlOnQubWF4SG92ZXJEaXN0YW5jZSx4MDpWLHgxOlUseTA6Ryx5MTpHLGNvbG9yOlksaG92ZXJ0ZW1wbGF0ZTohMX0pLGRlbGV0ZSB0LmluZGV4LGYudGV4dCYmIUFycmF5LmlzQXJyYXkoZi50ZXh0KT90LnRleHQ9U3RyaW5nKGYudGV4dCk6dC50ZXh0PWYubmFtZSxbdF19fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2ZpbGxfaG92ZXJfdGV4dCI6MTA1OSwiLi9nZXRfdHJhY2VfY29sb3IiOjEwNjF9XSwxMDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9LGk9dCgiLi9zdWJ0eXBlcyIpO24uaGFzTGluZXM9aS5oYXNMaW5lcyxuLmhhc01hcmtlcnM9aS5oYXNNYXJrZXJzLG4uaGFzVGV4dD1pLmhhc1RleHQsbi5pc0J1YmJsZT1pLmlzQnViYmxlLG4uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLmNhbGMsbi5jcm9zc1RyYWNlQ2FsYz10KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxuLmFycmF5c1RvQ2FsY2RhdGE9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5jb2xvcmJhcj10KCIuL21hcmtlcl9jb2xvcmJhciIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4uYW5pbWF0YWJsZT0hMCxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXIiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSIsInpvb21TY2FsZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNTAsIi4vYXR0cmlidXRlcyI6MTA1MSwiLi9jYWxjIjoxMDUyLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjEwNTYsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjEwNTcsIi4vZGVmYXVsdHMiOjEwNTgsIi4vaG92ZXIiOjEwNjIsIi4vbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuL3Bsb3QiOjEwNzEsIi4vc2VsZWN0IjoxMDcyLCIuL3N0eWxlIjoxMDc0LCIuL3N1YnR5cGVzIjoxMDc1fV0sMTA2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYz0odC5tYXJrZXJ8fHt9KS5jb2xvcjsocygibGluZS5jb2xvciIsciksaSh0LCJsaW5lIikpP2EodCxlLG8scyx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KTpzKCJsaW5lLmNvbG9yIiwhbihjKSYmY3x8cik7cygibGluZS53aWR0aCIpLChsfHx7fSkubm9EYXNofHxzKCJsaW5lLmRhc2giKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo1ODcsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo1ODgsIi4uLy4uL2xpYiI6NzAwfV0sMTA2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksaT1uLkJBRE5VTSxhPW4uTE9HX0NMSVAsbz1hKy41LHM9YS0uNSxsPXQoIi4uLy4uL2xpYiIpLGM9bC5zZWdtZW50c0ludGVyc2VjdCx1PWwuY29uc3RyYWluLGY9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGEsaCxwLGQsZyx2LG0seSx4LGIsXyx3LGssVCxBLE0sUz1lLnhheGlzLEU9ZS55YXhpcyxDPSJsb2ciPT09Uy50eXBlLEw9ImxvZyI9PT1FLnR5cGUsej1TLl9sZW5ndGgsTz1FLl9sZW5ndGgsST1lLmNvbm5lY3RHYXBzLEQ9ZS5iYXNlVG9sZXJhbmNlLFA9ZS5zaGFwZSxSPSJsaW5lYXIiPT09UCxGPWUuZmlsbCYmIm5vbmUiIT09ZS5maWxsLEI9W10sTj1mLm1pblRvbGVyYW5jZSxqPXQubGVuZ3RoLFY9bmV3IEFycmF5KGopLFU9MDtmdW5jdGlvbiBxKGUpe3ZhciByPXRbZV07aWYoIXIpcmV0dXJuITE7dmFyIG49Uy5jMnAoci54KSxhPUUuYzJwKHIueSk7aWYobj09PWkpe2lmKEMmJihuPVMuYzJwKHIueCwhMCkpLG49PT1pKXJldHVybiExO0wmJmE9PT1pJiYobio9TWF0aC5hYnMoUy5fbSpPKihTLl9tPjA/bzpzKS8oRS5fbSp6KihFLl9tPjA/bzpzKSkpKSxuKj0xZTN9aWYoYT09PWkpe2lmKEwmJihhPUUuYzJwKHIueSwhMCkpLGE9PT1pKXJldHVybiExO2EqPTFlM31yZXR1cm5bbixhXX1mdW5jdGlvbiBIKHQsZSxyLG4pe3ZhciBpPXItdCxhPW4tZSxvPS41LXQscz0uNS1lLGw9aSppK2EqYSxjPWkqbythKnM7aWYoYz4wJiZjPGwpe3ZhciB1PW8qYS1zKmk7aWYodSp1PGwpcmV0dXJuITB9fWZ1bmN0aW9uIEcodCxlKXt2YXIgcj10WzBdL3osbj10WzFdL08saT1NYXRoLm1heCgwLC1yLHItMSwtbixuLTEpO3JldHVybiBpJiZ2b2lkIDAhPT1BJiZIKHIsbixBLE0pJiYoaT0wKSxpJiZlJiZIKHIsbixlWzBdL3osZVsxXS9PKSYmKGk9MCksKDErZi50b2xlcmFuY2VHcm93dGgqaSkqRH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dFswXS1lWzBdLG49dFsxXS1lWzFdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9dmFyIFcsWCxaLCQsSixLLFEsdHQ9Zi5tYXhTY3JlZW5zQXdheSxldD0teip0dCxydD16KigxK3R0KSxudD0tTyp0dCxpdD1PKigxK3R0KSxhdD1bW2V0LG50LHJ0LG50XSxbcnQsbnQscnQsaXRdLFtydCxpdCxldCxpdF0sW2V0LGl0LGV0LG50XV07ZnVuY3Rpb24gb3QodCl7aWYodFswXTxldHx8dFswXT5ydHx8dFsxXTxudHx8dFsxXT5pdClyZXR1cm5bdSh0WzBdLGV0LHJ0KSx1KHRbMV0sbnQsaXQpXX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmKHRbMF09PT1ldHx8dFswXT09PXJ0KXx8KHRbMV09PT1lWzFdJiYodFsxXT09PW50fHx0WzFdPT09aXQpfHx2b2lkIDApfWZ1bmN0aW9uIGx0KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obixpKXt2YXIgYT1vdChuKSxvPW90KGkpLHM9W107aWYoYSYmbyYmc3QoYSxvKSlyZXR1cm4gczthJiZzLnB1c2goYSksbyYmcy5wdXNoKG8pO3ZhciBjPTIqbC5jb25zdHJhaW4oKG5bdF0raVt0XSkvMixlLHIpLSgoYXx8bilbdF0rKG98fGkpW3RdKTtjJiYoKGEmJm8/Yz4wPT1hW3RdPm9bdF0/YTpvOmF8fG8pW3RdKz1jKTtyZXR1cm4gc319ZnVuY3Rpb24gY3QodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1lPT09VltVLTFdWzBdLGk9cj09PVZbVS0xXVsxXTtpZighbnx8IWkpaWYoVT4xKXt2YXIgYT1lPT09VltVLTJdWzBdLG89cj09PVZbVS0yXVsxXTtuJiYoZT09PWV0fHxlPT09cnQpJiZhP28/VS0tOlZbVS0xXT10OmkmJihyPT09bnR8fHI9PT1pdCkmJm8/YT9VLS06VltVLTFdPXQ6VltVKytdPXR9ZWxzZSBWW1UrK109dH1mdW5jdGlvbiB1dCh0KXtWW1UtMV1bMF0hPT10WzBdJiZWW1UtMV1bMV0hPT10WzFdJiZjdChbWiwkXSksY3QodCksSj1udWxsLFo9JD0wfWZ1bmN0aW9uIGZ0KHQpe2lmKEE9dFswXS96LE09dFsxXS9PLFc9dFswXTxldD9ldDp0WzBdPnJ0P3J0OjAsWD10WzFdPG50P250OnRbMV0+aXQ/aXQ6MCxXfHxYKXtpZihVKWlmKEope3ZhciBlPVEoSix0KTtlLmxlbmd0aD4xJiYodXQoZVswXSksVltVKytdPWVbMV0pfWVsc2UgSz1RKFZbVS0xXSx0KVswXSxWW1UrK109SztlbHNlIFZbVSsrXT1bV3x8dFswXSxYfHx0WzFdXTt2YXIgcj1WW1UtMV07VyYmWCYmKHJbMF0hPT1XfHxyWzFdIT09WCk/KEomJihaIT09VyYmJCE9PVg/Y3QoWiYmJD8obj1KLGE9KGk9dClbMF0tblswXSxvPShpWzFdLW5bMV0pL2EsKG5bMV0qaVswXS1pWzFdKm5bMF0pL2E+MD9bbz4wP2V0OnJ0LGl0XTpbbz4wP3J0OmV0LG50XSk6W1p8fFcsJHx8WF0pOlomJiQmJmN0KFtaLCRdKSksY3QoW1csWF0pKTpaLVcmJiQtWCYmY3QoW1d8fFosWHx8JF0pLEo9dCxaPVcsJD1YfWVsc2UgSiYmdXQoUShKLHQpWzBdKSxWW1UrK109dDt2YXIgbixpLGEsb31mb3IoImxpbmVhciI9PT1QfHwic3BsaW5lIj09PVA/UT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTAsaT0wO2k8NDtpKyspe3ZhciBhPWF0W2ldLG89Yyh0WzBdLHRbMV0sZVswXSxlWzFdLGFbMF0sYVsxXSxhWzJdLGFbM10pO28mJighbnx8TWF0aC5hYnMoby54LXJbMF1bMF0pPjF8fE1hdGguYWJzKG8ueS1yWzBdWzFdKT4xKSYmKG89W28ueCxvLnldLG4mJlkobyx0KTxZKHJbMF0sdCk/ci51bnNoaWZ0KG8pOnIucHVzaChvKSxuKyspfXJldHVybiByfToiaHYiPT09UHx8InZoIj09PVA/UT1mdW5jdGlvbih0LGUpe3ZhciByPVtdLG49b3QodCksaT1vdChlKTtyZXR1cm4gbiYmaSYmc3QobixpKT9yOihuJiZyLnB1c2gobiksaSYmci5wdXNoKGkpLHIpfToiaHZoIj09PVA/UT1sdCgwLGV0LHJ0KToidmh2Ij09PVAmJihRPWx0KDEsbnQsaXQpKSxyPTA7cjxqO3IrKylpZihuPXEocikpe2ZvcihVPTAsSj1udWxsLGZ0KG4pLHIrKztyPGo7cisrKXtpZighKGg9cShyKSkpe2lmKEkpY29udGludWU7YnJlYWt9aWYoUiYmZS5zaW1wbGlmeSl7dmFyIGh0PXEocisxKTtpZih5PVkoaCxuKSxGJiYoMD09PVV8fFU9PT1qLTEpfHwhKHk8RyhoLGh0KSpOKSl7Zm9yKHY9WyhoWzBdLW5bMF0pL3ksKGhbMV0tblsxXSkveV0scD1uLHg9eSxiPXc9az0wLGc9ITEsYT1oLHIrKztyPHQubGVuZ3RoO3IrKyl7aWYoZD1odCxodD1xKHIrMSksIWQpe2lmKEkpY29udGludWU7YnJlYWt9aWYoVD0obT1bZFswXS1uWzBdLGRbMV0tblsxXV0pWzBdKnZbMV0tbVsxXSp2WzBdLHc9TWF0aC5taW4odyxUKSwoaz1NYXRoLm1heChrLFQpKS13PkcoZCxodCkpYnJlYWs7YT1kLChfPW1bMF0qdlswXSttWzFdKnZbMV0pPng/KHg9XyxoPWQsZz0hMSk6XzxiJiYoYj1fLHA9ZCxnPSEwKX1pZihnPyhmdChoKSxhIT09cCYmZnQocCkpOihwIT09biYmZnQocCksYSE9PWgmJmZ0KGgpKSxmdChhKSxyPj10Lmxlbmd0aHx8IWQpYnJlYWs7ZnQoZCksbj1kfX1lbHNlIGZ0KGgpfUomJmN0KFtafHxKWzBdLCR8fEpbMV1dKSxCLnB1c2goVi5zbGljZSgwLFUpKX1yZXR1cm4gQn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiLi9jb25zdGFudHMiOjEwNTV9XSwxMDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7InNwbGluZSI9PT1yKCJsaW5lLnNoYXBlIikmJnIoImxpbmUuc21vb3RoaW5nIil9fSx7fV0sMTA2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17dG9uZXh0eDoxLHRvbmV4dHk6MSx0b25leHQ6MX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLGM9e30sdT0hMSxmPS0xLGg9MCxwPS0xO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspKG89KGk9clthXVswXS50cmFjZSkuc3RhY2tncm91cHx8IiIpP28gaW4gYz9sPWNbb106KGw9Y1tvXT1oLGgrKyk6aS5maWxsIGluIG4mJnA+PTA/bD1wOihsPXA9aCxoKyspLGw8ZiYmKHU9ITApLGkuX2dyb3VwSW5kZXg9Zj1sO3ZhciBkPXIuc2xpY2UoKTt1JiZkLnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLnRyYWNlLG49ZVswXS50cmFjZTtyZXR1cm4gci5fZ3JvdXBJbmRleC1uLl9ncm91cEluZGV4fHxyLmluZGV4LW4uaW5kZXh9KTt2YXIgZz17fTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKW89KGk9ZFthXVswXS50cmFjZSkuc3RhY2tncm91cHx8IiIsITA9PT1pLnZpc2libGU/KGkuX25leHR0cmFjZT1udWxsLGkuZmlsbCBpbiBuJiYocz1nW29dLGkuX3ByZXZ0cmFjZT1zfHxudWxsLHMmJihzLl9uZXh0dHJhY2U9aSkpLGkuX293bmZpbGw9aS5maWxsJiYoInRvemVybyI9PT1pLmZpbGwuc3Vic3RyKDAsNil8fCJ0b3NlbGYiPT09aS5maWxsfHwidG8iPT09aS5maWxsLnN1YnN0cigwLDIpJiYhaS5fcHJldnRyYWNlKSxnW29dPWkpOmkuX3ByZXZ0cmFjZT1pLl9uZXh0dHJhY2U9aS5fb3duZmlsbD1udWxsO3JldHVybiBkfX0se31dLDEwNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXJrZXIscj1lLnNpemVyZWZ8fDEsaT1lLnNpemVtaW58fDAsYT0iYXJlYSI9PT1lLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodC9yKX06ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWEodC8yKTtyZXR1cm4gbihlKSYmZT4wP01hdGgubWF4KGUsaSk6MH19fSx7ImZhc3QtaXNudW1lcmljIjoyMjF9XSwxMDY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y29udGFpbmVyOiJtYXJrZXIiLG1pbjoiY21pbiIsbWF4OiJjbWF4In19LHt9XSwxMDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwsYyl7dmFyIHU9by5pc0J1YmJsZSh0KSxmPSh0LmxpbmV8fHt9KS5jb2xvcjsoYz1jfHx7fSxmJiYocj1mKSxsKCJtYXJrZXIuc3ltYm9sIiksbCgibWFya2VyLm9wYWNpdHkiLHU/Ljc6MSksbCgibWFya2VyLnNpemUiKSxsKCJtYXJrZXIuY29sb3IiLHIpLGkodCwibWFya2VyIikmJmEodCxlLHMsbCx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLGMubm9TZWxlY3R8fChsKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxsKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpLGwoInNlbGVjdGVkLm1hcmtlci5zaXplIiksbCgidW5zZWxlY3RlZC5tYXJrZXIuc2l6ZSIpKSxjLm5vTGluZXx8KGwoIm1hcmtlci5saW5lLmNvbG9yIixmJiYhQXJyYXkuaXNBcnJheShmKSYmZS5tYXJrZXIuY29sb3IhPT1mP2Y6dT9uLmJhY2tncm91bmQ6bi5kZWZhdWx0TGluZSksaSh0LCJtYXJrZXIubGluZSIpJiZhKHQsZSxzLGwse3ByZWZpeDoibWFya2VyLmxpbmUuIixjTGV0dGVyOiJjIn0pLGwoIm1hcmtlci5saW5lLndpZHRoIix1PzE6MCkpLHUmJihsKCJtYXJrZXIuc2l6ZXJlZiIpLGwoIm1hcmtlci5zaXplbWluIiksbCgibWFya2VyLnNpemVtb2RlIikpLGMuZ3JhZGllbnQpJiYoIm5vbmUiIT09bCgibWFya2VyLmdyYWRpZW50LnR5cGUiKSYmbCgibWFya2VyLmdyYWRpZW50LmNvbG9yIikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NTg4LCIuL3N1YnR5cGVzIjoxMDc1fV0sMTA3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5lbnN1cmVTaW5nbGUscz1hLmlkZW50aXR5LGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuL3N1YnR5cGVzIiksdT10KCIuL2xpbmVfcG9pbnRzIiksZj10KCIuL2xpbmtfdHJhY2VzIiksaD10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcjtmdW5jdGlvbiBwKHQsZSxyLGYscCxkLGcpe3ZhciB2OyFmdW5jdGlvbih0LGUscixpLG8pe3ZhciBzPXIueGF4aXMsbD1yLnlheGlzLHU9bi5leHRlbnQoYS5zaW1wbGVNYXAocy5yYW5nZSxzLnIyYykpLGY9bi5leHRlbnQoYS5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGg9aVswXS50cmFjZTtpZighYy5oYXNNYXJrZXJzKGgpKXJldHVybjt2YXIgcD1oLm1hcmtlci5tYXhkaXNwbGF5ZWQ7aWYoMD09PXApcmV0dXJuO3ZhciBkPWkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng+PXVbMF0mJnQueDw9dVsxXSYmdC55Pj1mWzBdJiZ0Lnk8PWZbMV19KSxnPU1hdGguY2VpbChkLmxlbmd0aC9wKSx2PTA7by5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dmFyIG49dFswXS50cmFjZTtjLmhhc01hcmtlcnMobikmJm4ubWFya2VyLm1heGRpc3BsYXllZD4wJiZyPGUmJnYrK30pO3ZhciBtPU1hdGgucm91bmQodipnLzMrTWF0aC5mbG9vcih2LzMpKmcvNy4xKTtpLmZvckVhY2goZnVuY3Rpb24odCl7ZGVsZXRlIHQudmlzfSksZC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7MD09PU1hdGgucm91bmQoKGUrbSklZykmJih0LnZpcz0hMCl9KX0oMCxlLHIsZixwKTt2YXIgbT0hIWcmJmcuZHVyYXRpb24+MDtmdW5jdGlvbiB5KHQpe3JldHVybiBtP3QudHJhbnNpdGlvbigpOnR9dmFyIHg9ci54YXhpcyxiPXIueWF4aXMsXz1mWzBdLnRyYWNlLHc9Xy5saW5lLGs9bi5zZWxlY3QoZCksVD1vKGssImciLCJlcnJvcmJhcnMiKSxBPW8oaywiZyIsImxpbmVzIiksTT1vKGssImciLCJwb2ludHMiKSxTPW8oaywiZyIsInRleHQiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwicGxvdCIpKHQsVCxyLGcpLCEwPT09Xy52aXNpYmxlKXt2YXIgRSxDO3koaykuc3R5bGUoIm9wYWNpdHkiLF8ub3BhY2l0eSk7dmFyIEw9Xy5maWxsLmNoYXJBdChfLmZpbGwubGVuZ3RoLTEpOyJ4IiE9PUwmJiJ5IiE9PUwmJihMPSIiKSxyLmlzUmFuZ2VQbG90fHwoZlswXS5ub2RlMz1rKTt2YXIgeixPLEk9IiIsRD1bXSxQPV8uX3ByZXZ0cmFjZTtQJiYoST1QLl9wcmV2UmV2cGF0aHx8IiIsQz1QLl9uZXh0RmlsbCxEPVAuX3BvbHlnb25zKTt2YXIgUixGLEIsTixqLFYsVSxxPSIiLEg9IiIsRz1bXSxZPWEubm9vcDtpZihFPV8uX293bkZpbGwsYy5oYXNMaW5lcyhfKXx8Im5vbmUiIT09Xy5maWxsKXtmb3IoQyYmQy5kYXR1bShmKSwtMSE9PVsiaHYiLCJ2aCIsImh2aCIsInZodiJdLmluZGV4T2Yody5zaGFwZSk/KFI9bC5zdGVwcyh3LnNoYXBlKSxGPWwuc3RlcHMody5zaGFwZS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpKSk6Uj1GPSJzcGxpbmUiPT09dy5zaGFwZT9mdW5jdGlvbih0KXt2YXIgZT10W3QubGVuZ3RoLTFdO3JldHVybiB0Lmxlbmd0aD4xJiZ0WzBdWzBdPT09ZVswXSYmdFswXVsxXT09PWVbMV0/bC5zbW9vdGhjbG9zZWQodC5zbGljZSgxKSx3LnNtb290aGluZyk6bC5zbW9vdGhvcGVuKHQsdy5zbW9vdGhpbmcpfTpmdW5jdGlvbih0KXtyZXR1cm4iTSIrdC5qb2luKCJMIil9LEI9ZnVuY3Rpb24odCl7cmV0dXJuIEYodC5yZXZlcnNlKCkpfSxHPXUoZix7eGF4aXM6eCx5YXhpczpiLGNvbm5lY3RHYXBzOl8uY29ubmVjdGdhcHMsYmFzZVRvbGVyYW5jZTpNYXRoLm1heCh3LndpZHRofHwxLDMpLzQsc2hhcGU6dy5zaGFwZSxzaW1wbGlmeTp3LnNpbXBsaWZ5LGZpbGw6Xy5maWxsfSksVT1fLl9wb2x5Z29ucz1uZXcgQXJyYXkoRy5sZW5ndGgpLHY9MDt2PEcubGVuZ3RoO3YrKylfLl9wb2x5Z29uc1t2XT1oKEdbdl0pO0cubGVuZ3RoJiYoTj1HWzBdWzBdLFY9KGo9R1tHLmxlbmd0aC0xXSlbai5sZW5ndGgtMV0pLFk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHo9UihlKSxPPUIoZSkscT9MPyhxKz0iTCIrei5zdWJzdHIoMSksSD1PKyJMIitILnN1YnN0cigxKSk6KHErPSJaIit6LEg9TysiWiIrSCk6KHE9eixIPU8pLGMuaGFzTGluZXMoXykmJmUubGVuZ3RoPjEpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuZGF0dW0oZiksdCl5KHIuc3R5bGUoIm9wYWNpdHkiLDApLmF0dHIoImQiLHopLmNhbGwobC5saW5lR3JvdXBTdHlsZSkpLnN0eWxlKCJvcGFjaXR5IiwxKTtlbHNle3ZhciBpPXkocik7aS5hdHRyKCJkIix6KSxsLnNpbmdsZUxpbmVTdHlsZShmLGkpfX19fX12YXIgVz1BLnNlbGVjdEFsbCgiLmpzLWxpbmUiKS5kYXRhKEcpO3koVy5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxXLmVhY2goWSghMSkpLFcuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jYWxsKGwubGluZUdyb3VwU3R5bGUpLmVhY2goWSghMCkpLGwuc2V0Q2xpcFVybChXLHIubGF5ZXJDbGlwSWQsdCksRy5sZW5ndGg/KEU/KEUuZGF0dW0oZiksTiYmViYmKEw/KCJ5Ij09PUw/TlsxXT1WWzFdPWIuYzJwKDAsITApOiJ4Ij09PUwmJihOWzBdPVZbMF09eC5jMnAoMCwhMCkpLHkoRSkuYXR0cigiZCIsIk0iK1YrIkwiK04rIkwiK3Euc3Vic3RyKDEpKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSk6eShFKS5hdHRyKCJkIixxKyJaIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpKTpDJiYoInRvbmV4dCI9PT1fLmZpbGwuc3Vic3RyKDAsNikmJnEmJkk/KCJ0b25leHQiPT09Xy5maWxsP3koQykuYXR0cigiZCIscSsiWiIrSSsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpOnkoQykuYXR0cigiZCIscSsiTCIrSS5zdWJzdHIoMSkrIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSxfLl9wb2x5Z29ucz1fLl9wb2x5Z29ucy5jb25jYXQoRCkpOihaKEMpLF8uX3BvbHlnb25zPW51bGwpKSxfLl9wcmV2UmV2cGF0aD1ILF8uX3ByZXZQb2x5Z29ucz1VKTooRT9aKEUpOkMmJlooQyksXy5fcG9seWdvbnM9Xy5fcHJldlJldnBhdGg9Xy5fcHJldlBvbHlnb25zPW51bGwpLE0uZGF0dW0oZiksUy5kYXR1bShmKSxmdW5jdGlvbihlLGksYSl7dmFyIG8sdT1hWzBdLnRyYWNlLGY9Yy5oYXNNYXJrZXJzKHUpLGg9Yy5oYXNUZXh0KHUpLHA9dHQodSksZD1ldCxnPWV0O2lmKGZ8fGgpe3ZhciB2PXMsXz11LnN0YWNrZ3JvdXAsdz1fJiYiaW5mZXIgemVybyI9PT10Ll9mdWxsTGF5b3V0Ll9zY2F0dGVyU3RhY2tPcHRzW3guX2lkK2IuX2lkXVtfXS5zdGFja2dhcHM7dS5tYXJrZXIubWF4ZGlzcGxheWVkfHx1Ll9uZWVkc0N1bGw/dj13P0o6JDpfJiYhdyYmKHY9SyksZiYmKGQ9diksaCYmKGc9dil9dmFyIGssVD0obz1lLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmRhdGEoZCxwKSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApO20mJlQuY2FsbChsLnBvaW50U3R5bGUsdSx0KS5jYWxsKGwudHJhbnNsYXRlUG9pbnRzLHgsYikuc3R5bGUoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSksby5vcmRlcigpLGYmJihrPWwubWFrZVBvaW50U3R5bGVGbnModSkpLG8uZWFjaChmdW5jdGlvbihlKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXkoaSk7bC50cmFuc2xhdGVQb2ludChlLGEseCxiKT8obC5zaW5nbGVQb2ludFN0eWxlKGUsYSx1LGssdCksci5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQoZSxhLHgsYix1LnhjYWxlbmRhcix1LnljYWxlbmRhciksdS5jdXN0b21kYXRhJiZpLmNsYXNzZWQoInBsb3RseS1jdXN0b21kYXRhIixudWxsIT09ZS5kYXRhJiZ2b2lkIDAhPT1lLmRhdGEpKTphLnJlbW92ZSgpfSksbT9vLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpOm8uZXhpdCgpLnJlbW92ZSgpLChvPWkuc2VsZWN0QWxsKCJnIikuZGF0YShnLHApKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHRwb2ludCIsITApLmFwcGVuZCgidGV4dCIpLG8ub3JkZXIoKSxvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcyksaT15KGUuc2VsZWN0KCJ0ZXh0IikpO2wudHJhbnNsYXRlUG9pbnQodCxpLHgsYik/ci5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxlLHgsYix1LnhjYWxlbmRhcix1LnljYWxlbmRhcik6ZS5yZW1vdmUoKX0pLG8uc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChsLnRleHRQb2ludFN0eWxlLHUsdCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT14LmMycCh0LngpLHI9Yi5jMnAodC55KTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKGZ1bmN0aW9uKCl7eShuLnNlbGVjdCh0aGlzKSkuYXR0cih7eDplLHk6cn0pfSl9KSxvLmV4aXQoKS5yZW1vdmUoKX0oTSxTLGYpO3ZhciBYPSExPT09Xy5jbGlwb25heGlzP251bGw6ci5sYXllckNsaXBJZDtsLnNldENsaXBVcmwoTSxYLHQpLGwuc2V0Q2xpcFVybChTLFgsdCl9ZnVuY3Rpb24gWih0KXt5KHQpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uICQodCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmdhcCYmdC52aXN9KX1mdW5jdGlvbiBKKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52aXN9KX1mdW5jdGlvbiBLKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5nYXB9KX1mdW5jdGlvbiBRKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHR0KHQpe2lmKHQuaWRzKXJldHVybiBRfWZ1bmN0aW9uIGV0KCl7cmV0dXJuITF9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsYyl7dmFyIHUsaCxkPSFhLGc9ISFhJiZhLmR1cmF0aW9uPjAsdj1mKHQsZSxyKTsoKHU9aS5zZWxlY3RBbGwoImcudHJhY2UiKS5kYXRhKHYsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFjZSBzY2F0dGVyIHRyYWNlIit0WzBdLnRyYWNlLnVpZH0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMiksdS5vcmRlcigpLGZ1bmN0aW9uKHQsZSxyKXtlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9byhuLnNlbGVjdCh0aGlzKSwiZyIsImZpbGxzIik7bC5zZXRDbGlwVXJsKGksci5sYXllckNsaXBJZCx0KTt2YXIgYT1lWzBdLnRyYWNlLGM9W107YS5fb3duZmlsbCYmYy5wdXNoKCJfb3duRmlsbCIpLGEuX25leHR0cmFjZSYmYy5wdXNoKCJfbmV4dEZpbGwiKTt2YXIgdT1pLnNlbGVjdEFsbCgiZyIpLmRhdGEoYyxzKTt1LmVudGVyKCkuYXBwZW5kKCJnIiksdS5leGl0KCkuZWFjaChmdW5jdGlvbih0KXthW3RdPW51bGx9KS5yZW1vdmUoKSx1Lm9yZGVyKCkuZWFjaChmdW5jdGlvbih0KXthW3RdPW8obi5zZWxlY3QodGhpcyksInBhdGgiLCJqcy1maWxsIil9KX0pfSh0LHUsZSksZyk/KGMmJihoPWMoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS5kdXJhdGlvbikuZWFzZShhLmVhc2luZykuZWFjaCgiZW5kIixmdW5jdGlvbigpe2gmJmgoKX0pLmVhY2goImludGVycnVwdCIsZnVuY3Rpb24oKXtoJiZoKCl9KS5lYWNoKGZ1bmN0aW9uKCl7aS5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKGZ1bmN0aW9uKHIsbil7cCh0LG4sZSxyLHYsdGhpcyxhKX0pfSkpOnUuZWFjaChmdW5jdGlvbihyLG4pe3AodCxuLGUscix2LHRoaXMsYSl9KTtkJiZ1LmV4aXQoKS5yZW1vdmUoKSxpLnNlbGVjdEFsbCgicGF0aDpub3QoW2RdKSIpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9wb2x5Z29uIjo3MTIsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vbGluZV9wb2ludHMiOjEwNjUsIi4vbGlua190cmFjZXMiOjEwNjcsIi4vc3VidHlwZXMiOjEwNzUsZDM6MTU0fV0sMTA3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scz10LmNkLGw9dC54YXhpcyxjPXQueWF4aXMsdT1bXSxmPXNbMF0udHJhY2U7aWYoIW4uaGFzTWFya2VycyhmKSYmIW4uaGFzVGV4dChmKSlyZXR1cm5bXTtpZighMT09PWUpZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylzW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWk9c1tyXSxhPWwuYzJwKGkueCksbz1jLmMycChpLnkpLG51bGwhPT1pLmkmJmUuY29udGFpbnMoW2Esb10sITEscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjppLmkseDpsLmMyZChpLngpLHk6Yy5jMmQoaS55KX0pLGkuc2VsZWN0ZWQ9MSk6aS5zZWxlY3RlZD0wO3JldHVybiB1fX0seyIuL3N1YnR5cGVzIjoxMDc1fV0sMTA3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1bIm9yaWVudGF0aW9uIiwiZ3JvdXBub3JtIiwic3RhY2tnYXBzIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXIuX3NjYXR0ZXJTdGFja09wdHMsbz1pKCJzdGFja2dyb3VwIik7aWYobyl7dmFyIHM9ZS54YXhpcytlLnlheGlzLGw9YVtzXTtsfHwobD1hW3NdPXt9KTt2YXIgYz1sW29dLHU9ITE7Yz9jLnRyYWNlcy5wdXNoKGUpOihjPWxbb109e3RyYWNlSW5kaWNlczpbXSx0cmFjZXM6W2VdfSx1PSEwKTtmb3IodmFyIGY9e29yaWVudGF0aW9uOmUueCYmIWUueT8iaCI6InYifSxoPTA7aDxuLmxlbmd0aDtoKyspe3ZhciBwPW5baF0sZD1wKyJGb3VuZCI7aWYoIWNbZF0pe3ZhciBnPXZvaWQgMCE9PXRbcF0sdj0ib3JpZW50YXRpb24iPT09cDtpZigoZ3x8dSkmJihjW3BdPWkocCxmW3BdKSx2JiYoYy5maWxsRGZsdD0iaCI9PT1jW3BdPyJ0b25leHR4IjoidG9uZXh0eSIpLGcmJihjW2RdPSEwLCF1JiYoZGVsZXRlIGMudHJhY2VzWzBdW3BdLHYpKSkpZm9yKHZhciBtPTA7bTxjLnRyYWNlcy5sZW5ndGgtMTttKyspe3ZhciB5PWMudHJhY2VzW21dO3kuX2lucHV0LmZpbGwhPT15LmZpbGwmJih5LmZpbGw9Yy5maWxsRGZsdCl9fX1yZXR1cm4gY319fSx7fV0sMTA3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8odCxlLHIpe2kucG9pbnRTdHlsZSh0LnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLGUscil9ZnVuY3Rpb24gcyh0LGUscil7aS50ZXh0UG9pbnRTdHlsZSh0LnNlbGVjdEFsbCgidGV4dCIpLGUscil9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2Uuc2NhdHRlciIpO3Iuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe28obi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pLHIuc2VsZWN0QWxsKCJnLnRleHQiKS5lYWNoKGZ1bmN0aW9uKGUpe3Mobi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pLHIuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtbGluZSIpLmNhbGwoaS5saW5lR3JvdXBTdHlsZSksci5zZWxlY3RBbGwoImcudHJhY2UgcGF0aC5qcy1maWxsIikuY2FsbChpLmZpbGxHcm91cFN0eWxlKSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3R5bGUiKShyKX0sc3R5bGVQb2ludHM6byxzdHlsZVRleHQ6cyxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz8oaS5zZWxlY3RlZFBvaW50U3R5bGUoci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxuKSxpLnNlbGVjdGVkVGV4dFN0eWxlKHIuc2VsZWN0QWxsKCJ0ZXh0IiksbikpOihvKHIsbix0KSxzKHIsbix0KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vcmVnaXN0cnkiOjgyOSxkMzoxNTR9XSwxMDc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJsaW5lcyIpfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJih0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKXx8InNwbG9tIj09PXQudHlwZSl9LGhhc1RleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJ0ZXh0Iil9LGlzQnViYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5tYXJrZXIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkodC5tYXJrZXIuc2l6ZSl9fX0seyIuLi8uLi9saWIiOjcwMH1dLDEwNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7YT1hfHx7fSxpKCJ0ZXh0cG9zaXRpb24iKSxuLmNvZXJjZUZvbnQoaSwidGV4dGZvbnQiLHIuZm9udCksYS5ub1NlbGVjdHx8KGkoInNlbGVjdGVkLnRleHRmb250LmNvbG9yIiksaSgidW5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpKX19LHsiLi4vLi4vbGliIjo3MDB9XSwxMDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scz1hKCJ4IiksbD1hKCJ5Iik7aWYoaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLHIpLHMpe3ZhciBjPW4ubWluUm93TGVuZ3RoKHMpO2w/bz1NYXRoLm1pbihjLG4ubWluUm93TGVuZ3RoKGwpKToobz1jLGEoInkwIiksYSgiZHkiKSl9ZWxzZXtpZighbClyZXR1cm4gMDtvPW4ubWluUm93TGVuZ3RoKGwpLGEoIngwIiksYSgiZHgiKX1yZXR1cm4gZS5fbGVuZ3RoPW8sb319LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4Mjl9XSwxMDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGY9bi5saW5lLGg9bi5tYXJrZXIscD1oLmxpbmUsZD1jKHt3aWR0aDpmLndpZHRoLGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhzKSxkZmx0OiJzb2xpZCJ9fSxpKCJsaW5lIikpO3ZhciBnPWUuZXhwb3J0cz11KHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDpjKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OmMoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6YSgpLG1vZGU6Yyh7fSxuLm1vZGUse2RmbHQ6ImxpbmVzK21hcmtlcnMifSksc3VyZmFjZWF4aXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbLTEsMCwxLDJdLGRmbHQ6LTF9LHN1cmZhY2Vjb2xvcjp7dmFsVHlwZToiY29sb3IifSxwcm9qZWN0aW9uOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0seTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjIvM319LHo6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fX0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxsaW5lOmQsbWFya2VyOmMoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGwpLGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMH0sc2l6ZTpjKHt9LGguc2l6ZSx7ZGZsdDo4fSksc2l6ZXJlZjpoLnNpemVyZWYsc2l6ZW1pbjpoLnNpemVtaW4sc2l6ZW1vZGU6aC5zaXplbW9kZSxvcGFjaXR5OmMoe30saC5vcGFjaXR5LHthcnJheU9rOiExfSksY29sb3JiYXI6aC5jb2xvcmJhcixsaW5lOmMoe3dpZHRoOmMoe30scC53aWR0aCx7YXJyYXlPazohMX0pfSxpKCJtYXJrZXIubGluZSIpKX0saSgibWFya2VyIikpLHRleHRwb3NpdGlvbjpjKHt9LG4udGV4dHBvc2l0aW9uLHtkZmx0OiJ0b3AgY2VudGVyIn0pLHRleHRmb250Ontjb2xvcjpuLnRleHRmb250LmNvbG9yLHNpemU6bi50ZXh0Zm9udC5zaXplLGZhbWlseTpjKHt9LG4udGV4dGZvbnQuZmFtaWx5LHthcnJheU9rOiExfSl9LGhvdmVyaW5mbzpjKHt9LG8uaG92ZXJpbmZvKX0sImNhbGMiLCJuZXN0ZWQiKTtnLnguZWRpdFR5cGU9Zy55LmVkaXRUeXBlPWcuei5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyJ9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIjo2NzQsIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjY3NSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sMTA3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLGk9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1be3g6ITEseTohMSx0cmFjZTplLHQ6e319XTtyZXR1cm4gbihyLGUpLGkodCxlKSxyfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTA1MCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwNTR9XSwxMDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gaSh0LGUscixpKXtpZighZXx8IWUudmlzaWJsZSlyZXR1cm4gbnVsbDtmb3IodmFyIGE9bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsIm1ha2VDb21wdXRlRXJyb3IiKShlKSxvPW5ldyBBcnJheSh0Lmxlbmd0aCkscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1hKCt0W3NdLHMpO2lmKCJsb2ciPT09aS50eXBlKXt2YXIgYz1pLmMybCh0W3NdKSx1PXRbc10tbFswXSxmPXRbc10rbFsxXTtpZihvW3NdPVsoaS5jMmwodSwhMCktYykqciwoaS5jMmwoZiwhMCktYykqcl0sdT4wKXt2YXIgaD1pLmMybCh1KTtpLl9sb3dlckxvZ0Vycm9yQm91bmR8fChpLl9sb3dlckxvZ0Vycm9yQm91bmQ9aCksaS5fbG93ZXJFcnJvckJvdW5kPU1hdGgubWluKGkuX2xvd2VyTG9nRXJyb3JCb3VuZCxoKX19ZWxzZSBvW3NdPVstbFswXSpyLGxbMV0qcl19cmV0dXJuIG99ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1baSh0LngsdC5lcnJvcl94LGVbMF0sci54YXhpcyksaSh0LnksdC5lcnJvcl95LGVbMV0sci55YXhpcyksaSh0LnosdC5lcnJvcl96LGVbMl0sci56YXhpcyldLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXSlyZXR1cm4gdFtlXS5sZW5ndGg7cmV0dXJuIDB9KG4pO2lmKDA9PT1hKXJldHVybiBudWxsO2Zvcih2YXIgbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspe2Zvcih2YXIgbD1bWzAsMCwwXSxbMCwwLDBdXSxjPTA7YzwzO2MrKylpZihuW2NdKWZvcih2YXIgdT0wO3U8Mjt1KyspbFt1XVtjXT1uW2NdW3NdW3VdO29bc109bH1yZXR1cm4gb319LHsiLi4vLi4vcmVnaXN0cnkiOjgyOX1dLDEwODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbGluZTNkIiksaT10KCJnbC1zY2F0dGVyM2QiKSxhPXQoImdsLWVycm9yM2QiKSxvPXQoImdsLW1lc2gzZCIpLHM9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLHU9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLmZvcm1hdENvbG9yLGY9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLGQ9dCgiLi9jYWxjX2Vycm9ycyIpO2Z1bmN0aW9uIGcodCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLmxpbmVQbG90PW51bGwsdGhpcy5zY2F0dGVyUGxvdD1udWxsLHRoaXMuZXJyb3JCYXJzPW51bGwsdGhpcy50ZXh0TWFya2Vycz1udWxsLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwsdGhpcy5jb2xvcj1udWxsLHRoaXMubW9kZT0iIix0aGlzLmRhdGFQb2ludHM9W10sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMudGV4dExhYmVscz1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB2PWcucHJvdG90eXBlO2Z1bmN0aW9uIG0odCl7cmV0dXJuIG51bGw9PXQ/MDp0LmluZGV4T2YoImxlZnQiKT4tMT8tMTp0LmluZGV4T2YoInJpZ2h0Iik+LTE/MTowfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG51bGw9PXQ/MDp0LmluZGV4T2YoInRvcCIpPi0xPy0xOnQuaW5kZXhPZigiYm90dG9tIik+LTE/MTowfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gZSg0KnQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHBbdF19ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPW51bGw7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXthPVtdO2Zvcih2YXIgbz0wO288ZTtvKyspdm9pZCAwPT09dFtvXT9hW29dPW46YVtvXT1yKHRbb10saSl9ZWxzZSBhPXIodCxsLmlkZW50aXR5KTtyZXR1cm4gYX1mdW5jdGlvbiB3KHQsZSl7dmFyIHIsbixpLGEsbyxzLGg9W10scD10LmZ1bGxTY2VuZUxheW91dCxnPXQuZGF0YVNjYWxlLHY9cC54YXhpcyx3PXAueWF4aXMsaz1wLnpheGlzLFQ9ZS5tYXJrZXIsQT1lLmxpbmUsTT1lLnh8fFtdLFM9ZS55fHxbXSxFPWUuenx8W10sQz1NLmxlbmd0aCxMPWUueGNhbGVuZGFyLHo9ZS55Y2FsZW5kYXIsTz1lLnpjYWxlbmRhcjtmb3Iobz0wO288QztvKyspcj12LmQybChNW29dLDAsTCkqZ1swXSxuPXcuZDJsKFNbb10sMCx6KSpnWzFdLGk9ay5kMmwoRVtvXSwwLE8pKmdbMl0saFtvXT1bcixuLGldO2lmKEFycmF5LmlzQXJyYXkoZS50ZXh0KSlzPWUudGV4dDtlbHNlIGlmKHZvaWQgMCE9PWUudGV4dClmb3Iocz1uZXcgQXJyYXkoQyksbz0wO288QztvKyspc1tvXT1lLnRleHQ7aWYoYT17cG9zaXRpb246aCxtb2RlOmUubW9kZSx0ZXh0OnN9LCJsaW5lImluIGUmJihhLmxpbmVDb2xvcj11KEEsMSxDKSxhLmxpbmVXaWR0aD1BLndpZHRoLGEubGluZURhc2hlcz1BLmRhc2gpLCJtYXJrZXIiaW4gZSl7dmFyIEk9ZihlKTthLnNjYXR0ZXJDb2xvcj11KFQsMSxDKSxhLnNjYXR0ZXJTaXplPV8oVC5zaXplLEMseCwyMCxJKSxhLnNjYXR0ZXJNYXJrZXI9XyhULnN5bWJvbCxDLGIsIlx1MjVjZiIpLGEuc2NhdHRlckxpbmVXaWR0aD1ULmxpbmUud2lkdGgsYS5zY2F0dGVyTGluZUNvbG9yPXUoVC5saW5lLDEsQyksYS5zY2F0dGVyQW5nbGU9MH0idGV4dHBvc2l0aW9uImluIGUmJihhLnRleHRPZmZzZXQ9ZnVuY3Rpb24odCl7dmFyIGU9WzAsMF07aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPVswLDBdLHRbcl0mJihlW3JdWzBdPW0odFtyXSksZVtyXVsxXT15KHRbcl0pKTtlbHNlIGVbMF09bSh0KSxlWzFdPXkodCk7cmV0dXJuIGV9KGUudGV4dHBvc2l0aW9uKSxhLnRleHRDb2xvcj11KGUudGV4dGZvbnQsMSxDKSxhLnRleHRTaXplPV8oZS50ZXh0Zm9udC5zaXplLEMsbC5pZGVudGl0eSwxMiksYS50ZXh0Rm9udD1lLnRleHRmb250LmZhbWlseSxhLnRleHRBbmdsZT0wKTt2YXIgRD1bIngiLCJ5IiwieiJdO2ZvcihhLnByb2plY3Q9WyExLCExLCExXSxhLnByb2plY3RTY2FsZT1bMSwxLDFdLGEucHJvamVjdE9wYWNpdHk9WzEsMSwxXSxvPTA7bzwzOysrbyl7dmFyIFA9ZS5wcm9qZWN0aW9uW0Rbb11dOyhhLnByb2plY3Rbb109UC5zaG93KSYmKGEucHJvamVjdE9wYWNpdHlbb109UC5vcGFjaXR5LGEucHJvamVjdFNjYWxlW29dPVAuc2NhbGUpfWEuZXJyb3JCb3VuZHM9ZChlLGcscCk7dmFyIFI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVswLDAsMF0scj1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLG49WzEsMSwxXSxpPTA7aTwzO2krKyl7dmFyIGE9dFtpXTthJiYhMSE9PWEuY29weV96c3R5bGUmJiExIT09dFsyXS52aXNpYmxlJiYoYT10WzJdKSxhJiZhLnZpc2libGUmJihlW2ldPWEud2lkdGgvMixyW2ldPWMoYS5jb2xvciksbltpXT1hLnRoaWNrbmVzcyl9cmV0dXJue2NhcFNpemU6ZSxjb2xvcjpyLGxpbmVXaWR0aDpufX0oW2UuZXJyb3JfeCxlLmVycm9yX3ksZS5lcnJvcl96XSk7cmV0dXJuIGEuZXJyb3JDb2xvcj1SLmNvbG9yLGEuZXJyb3JMaW5lV2lkdGg9Ui5saW5lV2lkdGgsYS5lcnJvckNhcFNpemU9Ui5jYXBTaXplLGEuZGVsYXVuYXlBeGlzPWUuc3VyZmFjZWF4aXMsYS5kZWxhdW5heUNvbG9yPWMoZS5zdXJmYWNlY29sb3IpLGF9ZnVuY3Rpb24gayh0KXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgZT10WzBdO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYodD1lKSwicmdiKCIrdC5zbGljZSgwLDMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqdCl9KSsiKSJ9cmV0dXJuIG51bGx9di5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0JiYodC5vYmplY3Q9PT10aGlzLmxpbmVQbG90fHx0Lm9iamVjdD09PXRoaXMuZGVsYXVuYXlNZXNofHx0Lm9iamVjdD09PXRoaXMudGV4dE1hcmtlcnN8fHQub2JqZWN0PT09dGhpcy5zY2F0dGVyUGxvdCkpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0Lm9iamVjdC5oaWdobGlnaHQmJnQub2JqZWN0LmhpZ2hsaWdodChudWxsKSx0aGlzLnNjYXR0ZXJQbG90JiYodC5vYmplY3Q9dGhpcy5zY2F0dGVyUGxvdCx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodCh0LmRhdGEpKSx0LnRleHRMYWJlbD0iIix0aGlzLnRleHRMYWJlbHMmJihBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/KHRoaXMudGV4dExhYmVsc1tlXXx8MD09PXRoaXMudGV4dExhYmVsc1tlXSkmJih0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHNbZV0pOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVscyksdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LHYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHU9dGhpcy5zY2VuZS5nbHBsb3QuZ2wsZj1oLnNvbGlkO3RoaXMuZGF0YT10O3ZhciBwPXcodGhpcy5zY2VuZSx0KTsibW9kZSJpbiBwJiYodGhpcy5tb2RlPXAubW9kZSksImxpbmVEYXNoZXMiaW4gcCYmcC5saW5lRGFzaGVzIGluIGgmJihmPWhbcC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1rKHAuc2NhdHRlckNvbG9yKXx8ayhwLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPXAucG9zaXRpb24sZT17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLmxpbmVDb2xvcixsaW5lV2lkdGg6cC5saW5lV2lkdGh8fDEsZGFzaGVzOmZbMF0sZGFzaFNjYWxlOmZbMV0sb3BhY2l0eTp0Lm9wYWNpdHksY29ubmVjdEdhcHM6dC5jb25uZWN0Z2Fwc30sLTEhPT10aGlzLm1vZGUuaW5kZXhPZigibGluZXMiKT90aGlzLmxpbmVQbG90P3RoaXMubGluZVBsb3QudXBkYXRlKGUpOih0aGlzLmxpbmVQbG90PW4oZSksdGhpcy5saW5lUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5saW5lUGxvdCkpOnRoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCksdGhpcy5saW5lUGxvdD1udWxsKTt2YXIgZD10Lm9wYWNpdHk7aWYodC5tYXJrZXImJnQubWFya2VyLm9wYWNpdHkmJihkKj10Lm1hcmtlci5vcGFjaXR5KSxyPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuc2NhdHRlckNvbG9yLHNpemU6cC5zY2F0dGVyU2l6ZSxnbHlwaDpwLnNjYXR0ZXJNYXJrZXIsb3BhY2l0eTpkLG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6cC5zY2F0dGVyTGluZVdpZHRoLGxpbmVDb2xvcjpwLnNjYXR0ZXJMaW5lQ29sb3IscHJvamVjdDpwLnByb2plY3QscHJvamVjdFNjYWxlOnAucHJvamVjdFNjYWxlLHByb2plY3RPcGFjaXR5OnAucHJvamVjdE9wYWNpdHl9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKT90aGlzLnNjYXR0ZXJQbG90P3RoaXMuc2NhdHRlclBsb3QudXBkYXRlKHIpOih0aGlzLnNjYXR0ZXJQbG90PWkociksdGhpcy5zY2F0dGVyUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodFNjYWxlPTEsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuc2NhdHRlclBsb3QpKTp0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCksYz17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixnbHlwaDpwLnRleHQsY29sb3I6cC50ZXh0Q29sb3Isc2l6ZTpwLnRleHRTaXplLGFuZ2xlOnAudGV4dEFuZ2xlLGFsaWdubWVudDpwLnRleHRPZmZzZXQsZm9udDpwLnRleHRGb250LG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6MCxwcm9qZWN0OiExLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLnRleHRMYWJlbHM9dC5ob3ZlcnRleHR8fHQudGV4dCwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJ0ZXh0Iik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShjKToodGhpcy50ZXh0TWFya2Vycz1pKGMpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLGw9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5lcnJvckNvbG9yLGVycm9yOnAuZXJyb3JCb3VuZHMsbGluZVdpZHRoOnAuZXJyb3JMaW5lV2lkdGgsY2FwU2l6ZTpwLmVycm9yQ2FwU2l6ZSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy5lcnJvckJhcnM/cC5lcnJvckJvdW5kcz90aGlzLmVycm9yQmFycy51cGRhdGUobCk6KHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpLHRoaXMuZXJyb3JCYXJzPW51bGwpOnAuZXJyb3JCb3VuZHMmJih0aGlzLmVycm9yQmFycz1hKGwpLHRoaXMuZXJyb3JCYXJzLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmVycm9yQmFycykpLHAuZGVsYXVuYXlBeGlzPj0wKXt2YXIgZz1mdW5jdGlvbih0LGUscil7dmFyIG4saT0ocisxKSUzLGE9KHIrMiklMyxvPVtdLGw9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGM9dFtuXTshaXNOYU4oY1tpXSkmJmlzRmluaXRlKGNbaV0pJiYhaXNOYU4oY1thXSkmJmlzRmluaXRlKGNbYV0pJiYoby5wdXNoKFtjW2ldLGNbYV1dKSxsLnB1c2gobikpfXZhciB1PXMobyk7Zm9yKG49MDtuPHUubGVuZ3RoOysrbilmb3IodmFyIGY9dVtuXSxoPTA7aDxmLmxlbmd0aDsrK2gpZltoXT1sW2ZbaF1dO3JldHVybntwb3NpdGlvbnM6dCxjZWxsczp1LG1lc2hDb2xvcjplfX0ocC5wb3NpdGlvbixwLmRlbGF1bmF5Q29sb3IscC5kZWxhdW5heUF4aXMpO2cub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKGcpOihnLmdsPXUsdGhpcy5kZWxhdW5heU1lc2g9byhnKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LHYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgZyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIjo2NzQsIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjY3NSwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjY5NywiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzIzLCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTA2OCwiLi9jYWxjX2Vycm9ycyI6MTA4MCwiZGVsYXVuYXktdHJpYW5ndWxhdGUiOjE1NiwiZ2wtZXJyb3IzZCI6MjQzLCJnbC1saW5lM2QiOjI1MSwiZ2wtbWVzaDNkIjoyNzYsImdsLXNjYXR0ZXIzZCI6MjkzfV0sMTA4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBmKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxjLHIsbil9aWYoZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9MCxvPXIoIngiKSxzPXIoInkiKSxsPXIoInoiKTtuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLGkpLG8mJnMmJmwmJihhPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoLGwubGVuZ3RoKSxlLl9sZW5ndGg9ZS5feGxlbmd0aD1lLl95bGVuZ3RoPWUuX3psZW5ndGg9YSk7cmV0dXJuIGF9KHQsZSxmLHUpKXtmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLGYoIm1vZGUiKSxhLmhhc0xpbmVzKGUpJiYoZigiY29ubmVjdGdhcHMiKSxzKHQsZSxyLHUsZikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscix1LGYse25vU2VsZWN0OiEwfSksYS5oYXNUZXh0KGUpJiZsKHQsZSx1LGYse25vU2VsZWN0OiEwfSk7dmFyIGg9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7Zigic3VyZmFjZWF4aXMiKT49MCYmZigic3VyZmFjZWNvbG9yIixofHxwKTtmb3IodmFyIGQ9WyJ4IiwieSIsInoiXSxnPTA7ZzwzOysrZyl7dmFyIHY9InByb2plY3Rpb24uIitkW2ddO2YodisiLnNob3ciKSYmKGYodisiLm9wYWNpdHkiKSxmKHYrIi5zY2FsZSIpKX12YXIgbT1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTttKHQsZSxofHxwfHxyLHtheGlzOiJ6In0pLG0odCxlLGh8fHB8fHIse2F4aXM6InkiLGluaGVyaXQ6InoifSksbSh0LGUsaHx8cHx8cix7YXhpczoieCIsaW5oZXJpdDoieiJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTA2NCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNzAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA3NiwiLi9hdHRyaWJ1dGVzIjoxMDc4fV0sMTA4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4ubWFya2VyU3ltYm9scz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj1be2NvbnRhaW5lcjoibWFya2VyIixtaW46ImNtaW4iLG1heDoiY21heCJ9LHtjb250YWluZXI6ImxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In1dLG4uY2FsYz10KCIuL2NhbGMiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXIzZCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDNkIiksbi5jYXRlZ29yaWVzPVsiZ2wzZCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjY3NSwiLi4vLi4vcGxvdHMvZ2wzZCI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjEwNzgsIi4vY2FsYyI6MTA3OSwiLi9jb252ZXJ0IjoxMDgxLCIuL2RlZmF1bHRzIjoxMDgyfV0sMTA4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW4ubWFya2VyLHU9bi5saW5lLGY9Yy5saW5lO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1vZGU6bCh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30sbi5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aCxkYXNoOnUuZGFzaCxzaGFwZTpsKHt9LHUuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOnUuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsOmwoe30sbi5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6bi5maWxsY29sb3IsbWFya2VyOmwoe3N5bWJvbDpjLnN5bWJvbCxvcGFjaXR5OmMub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6Yy5tYXhkaXNwbGF5ZWQsc2l6ZTpjLnNpemUsc2l6ZXJlZjpjLnNpemVyZWYsc2l6ZW1pbjpjLnNpemVtaW4sc2l6ZW1vZGU6Yy5zaXplbW9kZSxsaW5lOmwoe3dpZHRoOmYud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDpjLmdyYWRpZW50LGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyIikse2NvbG9yYmFyOnN9KSx0ZXh0Zm9udDpuLnRleHRmb250LHRleHRwb3NpdGlvbjpuLnRleHRwb3NpdGlvbixzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246bi5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6YSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA1MX1dLDEwODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbD10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fY2FycGV0VHJhY2U9bCh0LGUpO2lmKHImJnIudmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09ci52aXNpYmxlKXt2YXIgYztlLnhheGlzPXIueGF4aXMsZS55YXhpcz1yLnlheGlzO3ZhciB1LGYsaD1lLl9sZW5ndGgscD1uZXcgQXJyYXkoaCksZD0hMTtmb3IoYz0wO2M8aDtjKyspaWYodT1lLmFbY10sZj1lLmJbY10sbih1KSYmbihmKSl7dmFyIGc9ci5hYjJ4eSgrdSwrZiwhMCksdj1yLmlzVmlzaWJsZSgrdSwrZik7dnx8KGQ9ITApLHBbY109e3g6Z1swXSx5OmdbMV0sYTp1LGI6Zix2aXM6dn19ZWxzZSBwW2NdPXt4OiExLHk6ITF9O3JldHVybiBlLl9uZWVkc0N1bGw9ZCxwWzBdLmNhcnBldD1yLHBbMF0udHJhY2U9ZSxzKGUsaCksaSh0LGUpLGEocCxlKSxvKHAsZSkscH19fSx7Ii4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjg5NywiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNTAsIi4uL3NjYXR0ZXIvY2FsYyI6MTA1MiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTA1MywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSwxMDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGY9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX1wKCJjYXJwZXQiKSxlLnhheGlzPSJ4IixlLnlheGlzPSJ5Ijt2YXIgZD1wKCJhIiksZz1wKCJiIiksdj1NYXRoLm1pbihkLmxlbmd0aCxnLmxlbmd0aCk7aWYodil7ZS5fbGVuZ3RoPXYscCgidGV4dCIpLHAoImhvdmVydGV4dCIpLHAoIm1vZGUiLHY8aS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixoLHApLGwodCxlLHApLHAoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixoLHAse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZjKHQsZSxoLHApO3ZhciBtPVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihwKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksbS5wdXNoKCJwb2ludHMiKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKHUodCxlLHIscCksYS5oYXNMaW5lcyhlKXx8bCh0LGUscCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8bS5wdXNoKCJmaWxscyIpLCJmaWxscyIhPT1wKCJob3Zlcm9uIixtLmpvaW4oIisiKXx8InBvaW50cyIpJiZwKCJob3ZlcnRlbXBsYXRlIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTA1NSwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwNjAsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTA2NCwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMDY2LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA3MCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDc2LCIuL2F0dHJpYnV0ZXMiOjEwODR9XSwxMDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5baV07cmV0dXJuIHQuYT1hLmEsdC5iPWEuYix0Lnk9YS55LHR9fSx7fV0sMTA4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIiksaT10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXt2YXIgbD0xLXMueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLHU9YypsLzIsZj1jLXU7cmV0dXJuIHMueDA9TWF0aC5tYXgoTWF0aC5taW4ocy54MCxmKSx1KSxzLngxPU1hdGgubWF4KE1hdGgubWluKHMueDEsZiksdSksb312YXIgaD1zLmNkW3MuaW5kZXhdO3MuYT1oLmEscy5iPWguYixzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1wLl9jYXJwZXQsZz1kLmFiMmlqKFtoLmEsaC5iXSksdj1NYXRoLmZsb29yKGdbMF0pLG09Z1swXS12LHk9TWF0aC5mbG9vcihnWzFdKSx4PWdbMV0teSxiPWQuZXZhbHh5KFtdLHYseSxtLHgpO3MueUxhYmVsPWJbMV0udG9GaXhlZCgzKSxkZWxldGUgcy50ZXh0O3ZhciBfPVtdO2lmKCFwLmhvdmVydGVtcGxhdGUpe3ZhciB3PShoLmhpfHxwLmhvdmVyaW5mbykuc3BsaXQoIisiKTstMSE9PXcuaW5kZXhPZigiYWxsIikmJih3PVsiYSIsImIiLCJ0ZXh0Il0pLC0xIT09dy5pbmRleE9mKCJhIikmJmsoZC5hYXhpcyxoLmEpLC0xIT09dy5pbmRleE9mKCJiIikmJmsoZC5iYXhpcyxoLmIpLF8ucHVzaCgieTogIitzLnlMYWJlbCksLTEhPT13LmluZGV4T2YoInRleHQiKSYmaShoLHAsXykscy5leHRyYVRleHQ9Xy5qb2luKCI8YnI+Iil9cmV0dXJuIG99ZnVuY3Rpb24gayh0LGUpe3ZhciByO3I9dC5sYWJlbHByZWZpeCYmdC5sYWJlbHByZWZpeC5sZW5ndGg+MD90LmxhYmVscHJlZml4LnJlcGxhY2UoLyA9ICQvLCIiKTp0Ll9ob3ZlcnRpdGxlLF8ucHVzaChyKyI6ICIrZS50b0ZpeGVkKDMpK3QubGFiZWxzdWZmaXgpfX19LHsiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTksIi4uL3NjYXR0ZXIvaG92ZXIiOjEwNjJ9XSwxMDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5zZWxlY3RQb2ludHM9dCgiLi4vc2NhdHRlci9zZWxlY3QiKSxuLmV2ZW50RGF0YT10KCIuL2V2ZW50X2RhdGEiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJjYXJwZXQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsic3ZnIiwiY2FycGV0Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJjYXJwZXREZXBlbmRlbnQiLCJ6b29tU2NhbGUiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuLi9zY2F0dGVyL3NlbGVjdCI6MTA3MiwiLi4vc2NhdHRlci9zdHlsZSI6MTA3NCwiLi9hdHRyaWJ1dGVzIjoxMDg0LCIuL2NhbGMiOjEwODUsIi4vZGVmYXVsdHMiOjEwODYsIi4vZXZlbnRfZGF0YSI6MTA4NywiLi9ob3ZlciI6MTA4OCwiLi9wbG90IjoxMDkwfV0sMTA5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3Bsb3QiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbCxjLHU9clswXVswXS5jYXJwZXQsZj17eGF4aXM6aS5nZXRGcm9tSWQodCx1LnhheGlzfHwieCIpLHlheGlzOmkuZ2V0RnJvbUlkKHQsdS55YXhpc3x8InkiKSxwbG90OmUucGxvdH07Zm9yKG4odCxmLHIsbykscz0wO3M8ci5sZW5ndGg7cysrKWw9cltzXVswXS50cmFjZSxjPW8uc2VsZWN0QWxsKCJnLnRyYWNlIitsLnVpZCsiIC5qcy1saW5lIiksYS5zZXRDbGlwVXJsKGMscltzXVswXS5jYXJwZXQuX2NsaXBQYXRoSWQsdCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9zY2F0dGVyL3Bsb3QiOjEwNzF9XSwxMDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCx1PWkubWFya2VyLGY9aS5saW5lLGg9dS5saW5lO2UuZXhwb3J0cz1jKHtsb246e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIklTTy0zIiwiVVNBLXN0YXRlcyIsImNvdW50cnkgbmFtZXMiXSxkZmx0OiJJU08tMyJ9LG1vZGU6bCh7fSxpLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30saS5ob3ZlcnRleHQse30pLHRleHRmb250OmkudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLGxpbmU6e2NvbG9yOmYuY29sb3Isd2lkdGg6Zi53aWR0aCxkYXNoOnN9LGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsbWFya2VyOmwoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpsKHt3aWR0aDpoLndpZHRofSxvKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDp1LmdyYWRpZW50fSxvKCJtYXJrZXIiKSksZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvc2VsZiJdLGRmbHQ6Im5vbmUifSxmaWxsY29sb3I6aS5maWxsY29sb3Isc2VsZWN0ZWQ6aS5zZWxlY3RlZCx1bnNlbGVjdGVkOmkudW5zZWxlY3RlZCxob3ZlcmluZm86bCh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsb24iLCJsYXQiLCJsb2NhdGlvbiIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sImNhbGMiLCJuZXN0ZWQiKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTF9XSwxMDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxvPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIikscz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIiksbD10KCIuLi8uLi9saWIiKS5fO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxjPXI/ZS5sb2NhdGlvbnMubGVuZ3RoOmUuX2xlbmd0aCx1PW5ldyBBcnJheShjKSxmPTA7ZjxjO2YrKyl7dmFyIGg9dVtmXT17fTtpZihyKXt2YXIgcD1lLmxvY2F0aW9uc1tmXTtoLmxvYz0ic3RyaW5nIj09dHlwZW9mIHA/cDpudWxsfWVsc2V7dmFyIGQ9ZS5sb25bZl0sZz1lLmxhdFtmXTtuKGQpJiZuKGcpP2gubG9ubGF0PVsrZCwrZ106aC5sb25sYXQ9W2ksaV19fXJldHVybiBvKHUsZSksYSh0LGUpLHModSxlKSxjJiYodVswXS50PXtsYWJlbHM6e2xhdDpsKHQsImxhdDoiKSsiICIsbG9uOmwodCwibG9uOiIpKyIgIn19KSx1fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTA1MCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTA1MywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSwxMDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX0hZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT0wLG89cigibG9jYXRpb25zIik7aWYobylyZXR1cm4gcigibG9jYXRpb25tb2RlIiksYT1vLmxlbmd0aDtyZXR1cm4gbj1yKCJsb24iKXx8W10saT1yKCJsYXQiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCksZS5fbGVuZ3RoPWEsYX0oMCxlLGYpP2UudmlzaWJsZT0hMTooZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJtb2RlIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxmKSxmKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkmJmEodCxlLHIsdSxmLHtncmFkaWVudDohMH0pLGkuaGFzVGV4dChlKSYmcyh0LGUsdSxmKSxmKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGYpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpKX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDYwLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwNjQsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDcwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDc1LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNzYsIi4vYXR0cmlidXRlcyI6MTA5MX1dLDEwOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHQubG9jYXRpb249ZS5sb2M/ZS5sb2M6bnVsbCx0fX0se31dLDEwOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLHM9dCgiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiKSxsPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsZj10LnhhLGg9dC55YSxwPXQuc3VicGxvdCxkPXAucHJvamVjdGlvbi5pc0xvbkxhdE92ZXJFZGdlcyxnPXAucHJvamVjdDtpZihuLmdldENsb3Nlc3QoYyxmdW5jdGlvbih0KXt2YXIgbj10LmxvbmxhdDtpZihuWzBdPT09YSlyZXR1cm4gMS8wO2lmKGQobikpcmV0dXJuIDEvMDt2YXIgaT1nKG4pLG89ZyhbZSxyXSkscz1NYXRoLmFicyhpWzBdLW9bMF0pLGw9TWF0aC5hYnMoaVsxXS1vWzFdKSxjPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocypzK2wqbCktYywxLTMvYyl9LHQpLCExIT09dC5pbmRleCl7dmFyIHY9Y1t0LmluZGV4XSxtPXYubG9ubGF0LHk9W2YuYzJwKG0pLGguYzJwKG0pXSx4PXYubXJjfHwxO3JldHVybiB0LngwPXlbMF0teCx0LngxPXlbMF0reCx0LnkwPXlbMV0teCx0LnkxPXlbMV0reCx0LmxvYz12LmxvYyx0Lmxvbj1tWzBdLHQubGF0PW1bMV0sdC5jb2xvcj1vKHUsdiksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIsbil7aWYodC5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgYT1lLmhpfHx0LmhvdmVyaW5mbyxvPSJhbGwiPT09YT9sLmhvdmVyaW5mby5mbGFnczphLnNwbGl0KCIrIiksYz0tMSE9PW8uaW5kZXhPZigibG9jYXRpb24iKSYmQXJyYXkuaXNBcnJheSh0LmxvY2F0aW9ucyksdT0tMSE9PW8uaW5kZXhPZigibG9uIiksZj0tMSE9PW8uaW5kZXhPZigibGF0IiksaD0tMSE9PW8uaW5kZXhPZigidGV4dCIpLHA9W107ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaS50aWNrVGV4dChyLHIuYzJsKHQpLCJob3ZlciIpLnRleHQrIlx4YjAifWM/cC5wdXNoKGUubG9jKTp1JiZmP3AucHVzaCgiKCIrZChlLmxvbmxhdFswXSkrIiwgIitkKGUubG9ubGF0WzFdKSsiKSIpOnU/cC5wdXNoKG4ubG9uK2QoZS5sb25sYXRbMF0pKTpmJiZwLnB1c2gobi5sYXQrZChlLmxvbmxhdFsxXSkpO2gmJnMoZSx0LHApO3JldHVybiBwLmpvaW4oIjxicj4iKX0odSx2LHAubW9ja0F4aXMsY1swXS50LmxhYmVscyksdC5ob3ZlcnRlbXBsYXRlPXUuaG92ZXJ0ZW1wbGF0ZSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTksIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDYxLCIuL2F0dHJpYnV0ZXMiOjEwOTF9XSwxMDk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLnN0eWxlT25TZWxlY3Q9dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJnZW8iLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2VvIiksbi5jYXRlZ29yaWVzPVsiZ2VvIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2VvIjo3NzgsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuLi9zY2F0dGVyL3N0eWxlIjoxMDc0LCIuL2F0dHJpYnV0ZXMiOjEwOTEsIi4vY2FsYyI6MTA5MiwiLi9kZWZhdWx0cyI6MTA5MywiLi9ldmVudF9kYXRhIjoxMDk0LCIuL2hvdmVyIjoxMDk1LCIuL3Bsb3QiOjEwOTcsIi4vc2VsZWN0IjoxMDk4LCIuL3N0eWxlIjoxMDk5fV0sMTA5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIikuZ2V0VG9wb2pzb25GZWF0dXJlcyxzPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKS5sb2NhdGlvblRvRmVhdHVyZSxsPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIiksYz10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksdT10KCIuL3N0eWxlIik7ZnVuY3Rpb24gZih0LGUpe3ZhciByPXRbMF0udHJhY2U7aWYoQXJyYXkuaXNBcnJheShyLmxvY2F0aW9ucykpZm9yKHZhciBuPW8ocixlKSxpPXIubG9jYXRpb25tb2RlLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dFtsXSx1PXMoaSxjLmxvYyxuKTtjLmxvbmxhdD11P3UucHJvcGVydGllcy5jdDpbYSxhXX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylmKHJbb10sZS50b3BvanNvbik7ZnVuY3Rpb24gcyh0LGUpe3QubG9ubGF0WzBdPT09YSYmbi5zZWxlY3QoZSkucmVtb3ZlKCl9dmFyIGg9ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLHA9aS5tYWtlVHJhY2VHcm91cHMoaCxyLCJ0cmFjZSBzY2F0dGVyZ2VvIik7cC5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxwLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS5ub2RlMz1uLnNlbGVjdCh0aGlzKSxhPWVbMF0udHJhY2U7aWYoYy5oYXNMaW5lcyhhKXx8Im5vbmUiIT09YS5maWxsKXt2YXIgbz1sLmNhbGNUcmFjZVRvTGluZUNvb3JkcyhlKSxmPSJub25lIiE9PWEuZmlsbD9sLm1ha2VQb2x5Z29uKG8pOmwubWFrZUxpbmUobyk7ci5zZWxlY3RBbGwoInBhdGguanMtbGluZSIpLmRhdGEoW3tnZW9qc29uOmYsdHJhY2U6YX1dKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpfWMuaGFzTWFya2VycyhhKSYmci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKS5lYWNoKGZ1bmN0aW9uKHQpe3ModCx0aGlzKX0pLGMuaGFzVGV4dChhKSYmci5zZWxlY3RBbGwoImciKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuZWFjaChmdW5jdGlvbih0KXtzKHQsdGhpcyl9KSx1KHQsZSl9KX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NjkzLCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6Njk0LCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjcyNywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiLi9zdHlsZSI6MTA5OSxkMzoxNTR9XSwxMDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHMsbCxjPXQuY2QsdT10LnhheGlzLGY9dC55YXhpcyxoPVtdLHA9Y1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKHApJiYhbi5oYXNUZXh0KHApKXJldHVybltdO2lmKCExPT09ZSlmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKWNbbF0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihsPTA7bDxjLmxlbmd0aDtsKyspKGE9KHI9Y1tsXSkubG9ubGF0KVswXSE9PWkmJihvPXUuYzJwKGEpLHM9Zi5jMnAoYSksZS5jb250YWlucyhbbyxzXSxudWxsLGwsdCk/KGgucHVzaCh7cG9pbnROdW1iZXI6bCxsb246YVswXSxsYXQ6YVsxXX0pLHIuc2VsZWN0ZWQ9MSk6ci5zZWxlY3RlZD0wKTtyZXR1cm4gaH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDc1fV0sMTA5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9zY2F0dGVyL3N0eWxlIikscz1vLnN0eWxlUG9pbnRzLGw9by5zdHlsZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZSYmZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLG89ZVswXS5ub2RlMztvLnN0eWxlKCJvcGFjaXR5IixlWzBdLnRyYWNlLm9wYWNpdHkpLHMobyxyLHQpLGwobyxyLHQpLG8uc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dC50cmFjZSxvPXIubGluZXx8e307ZS5jYWxsKGEuc3Ryb2tlLG8uY29sb3IpLmNhbGwoaS5kYXNoTGluZSxvLmRhc2h8fCIiLG8ud2lkdGh8fDApLCJub25lIiE9PXIuZmlsbCYmZS5jYWxsKGEuZmlsbCxyLmZpbGxjb2xvcil9KX0odCxlKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vc2NhdHRlci9zdHlsZSI6MTA3NCxkMzoxNTR9XSwxMTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGw9dCgiLi9jb25zdGFudHMiKS5EQVNIRVMsYz1pLmxpbmUsdT1pLm1hcmtlcixmPXUubGluZSxoPWUuZXhwb3J0cz1zKHt4OmkueCx4MDppLngwLGR4OmkuZHgseTppLnkseTA6aS55MCxkeTppLmR5LHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6aS50ZXh0Zm9udCxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdfSxsaW5lOntjb2xvcjpjLmNvbG9yLHdpZHRoOmMud2lkdGgsc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImh2IiwidmgiLCJodmgiLCJ2aHYiXSxkZmx0OiJsaW5lYXIiLGVkaXRUeXBlOiJwbG90In0sZGFzaDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGwpLGRmbHQ6InNvbGlkIn19LG1hcmtlcjpvKHt9LGEoIm1hcmtlciIpLHtzeW1ib2w6dS5zeW1ib2wsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxvcGFjaXR5OnUub3BhY2l0eSxjb2xvcmJhcjp1LmNvbG9yYmFyLGxpbmU6byh7fSxhKCJtYXJrZXIubGluZSIpLHt3aWR0aDpmLndpZHRofSl9KSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGZpbGw6byh7fSxpLmZpbGwse2RmbHQ6Im5vbmUifSksZmlsbGNvbG9yOmkuZmlsbGNvbG9yLHNlbGVjdGVkOnttYXJrZXI6aS5zZWxlY3RlZC5tYXJrZXIsdGV4dGZvbnQ6aS5zZWxlY3RlZC50ZXh0Zm9udH0sdW5zZWxlY3RlZDp7bWFya2VyOmkudW5zZWxlY3RlZC5tYXJrZXIsdGV4dGZvbnQ6aS51bnNlbGVjdGVkLnRleHRmb250fSxvcGFjaXR5Om4ub3BhY2l0eX0sImNhbGMiLCJuZXN0ZWQiKTtoLnguZWRpdFR5cGU9aC55LmVkaXRUeXBlPWgueDAuZWRpdFR5cGU9aC55MC5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsaC5ob3ZlcnRlbXBsYXRlPWkuaG92ZXJ0ZW1wbGF0ZX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTEsIi4vY29uc3RhbnRzIjoxMTAxfV0sMTEwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1RPT19NQU5ZX1BPSU5UUzoxZTUsU1lNQk9MX1NERl9TSVpFOjIwMCxTWU1CT0xfU0laRToyMCxTWU1CT0xfU1RST0tFOjEsRE9UX1JFOi8tZG90LyxPUEVOX1JFOi8tb3Blbi8sREFTSEVTOntzb2xpZDpbMV0sZG90OlsxLDFdLGRhc2g6WzQsMV0sbG9uZ2Rhc2g6WzgsMV0sZGFzaGRvdDpbNCwxLDEsMV0sbG9uZ2Rhc2hkb3Q6WzgsMSwxLDFdfX19LHt9XSwxMTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJzdmctcGF0aC1zZGYiKSxhPXQoImNvbG9yLW5vcm1hbGl6ZSIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSx1PXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5mb3JtYXRDb2xvcixmPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxoPXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIikscD10KCIuL2NvbnN0YW50cyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGc9e3N0YXJ0OjEsbGVmdDoxLGVuZDotMSxyaWdodDotMSxtaWRkbGU6MCxjZW50ZXI6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIHYodCl7dmFyIGUscj10Ll9sZW5ndGgsaT10LnRleHRmb250LGE9dC50ZXh0cG9zaXRpb24sbz1BcnJheS5pc0FycmF5KGEpP2E6W2FdLHM9aS5jb2xvcixsPWkuc2l6ZSxjPWkuZmFtaWx5LHU9e307Zm9yKHUudGV4dD10LnRleHQsdS5vcGFjaXR5PXQub3BhY2l0eSx1LmZvbnQ9e30sdS5hbGlnbj1bXSx1LmJhc2VsaW5lPVtdLGU9MDtlPG8ubGVuZ3RoO2UrKyl7dmFyIGY9b1tlXS5zcGxpdCgvXHMrLyk7c3dpdGNoKGZbMV0pe2Nhc2UibGVmdCI6dS5hbGlnbi5wdXNoKCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnUuYWxpZ24ucHVzaCgibGVmdCIpO2JyZWFrO2RlZmF1bHQ6dS5hbGlnbi5wdXNoKGZbMV0pfXN3aXRjaChmWzBdKXtjYXNlInRvcCI6dS5iYXNlbGluZS5wdXNoKCJib3R0b20iKTticmVhaztjYXNlImJvdHRvbSI6dS5iYXNlbGluZS5wdXNoKCJ0b3AiKTticmVhaztkZWZhdWx0OnUuYmFzZWxpbmUucHVzaChmWzBdKX19aWYoQXJyYXkuaXNBcnJheShzKSlmb3IodS5jb2xvcj1uZXcgQXJyYXkociksZT0wO2U8cjtlKyspdS5jb2xvcltlXT1zW2VdO2Vsc2UgdS5jb2xvcj1zO2lmKEFycmF5LmlzQXJyYXkobCl8fEFycmF5LmlzQXJyYXkoYykpZm9yKHUuZm9udD1uZXcgQXJyYXkociksZT0wO2U8cjtlKyspe3ZhciBoPXUuZm9udFtlXT17fTtoLnNpemU9QXJyYXkuaXNBcnJheShsKT9uKGxbZV0pP2xbZV06MDpsLGguZmFtaWx5PUFycmF5LmlzQXJyYXkoYyk/Y1tlXTpjfWVsc2UgdS5mb250PXtzaXplOmwsZmFtaWx5OmN9O3JldHVybiB1fWZ1bmN0aW9uIG0odCl7dmFyIGUscixuPXQuX2xlbmd0aCxpPXQubWFya2VyLG89e30sbD1BcnJheS5pc0FycmF5KGkuc3ltYm9sKSxjPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmNvbG9yKSxmPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmxpbmUuY29sb3IpLGQ9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkub3BhY2l0eSksZz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5zaXplKSx2PXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmxpbmUud2lkdGgpO2lmKGx8fChyPXAuT1BFTl9SRS50ZXN0KGkuc3ltYm9sKSksbHx8Y3x8Znx8ZCl7by5jb2xvcnM9bmV3IEFycmF5KG4pLG8uYm9yZGVyQ29sb3JzPW5ldyBBcnJheShuKTt2YXIgbT11KGksaS5vcGFjaXR5LG4pLHk9dShpLmxpbmUsaS5vcGFjaXR5LG4pO2lmKCFBcnJheS5pc0FycmF5KHlbMF0pKXt2YXIgeD15O2Zvcih5PUFycmF5KG4pLGU9MDtlPG47ZSsrKXlbZV09eH1pZighQXJyYXkuaXNBcnJheShtWzBdKSl7dmFyIGI9bTtmb3IobT1BcnJheShuKSxlPTA7ZTxuO2UrKyltW2VdPWJ9Zm9yKG8uY29sb3JzPW0sby5ib3JkZXJDb2xvcnM9eSxlPTA7ZTxuO2UrKyl7aWYobCl7dmFyIF89aS5zeW1ib2xbZV07cj1wLk9QRU5fUkUudGVzdChfKX1yJiYoeVtlXT1tW2VdLnNsaWNlKCksbVtlXT1tW2VdLnNsaWNlKCksbVtlXVszXT0wKX1vLm9wYWNpdHk9dC5vcGFjaXR5fWVsc2Ugcj8oby5jb2xvcj1hKGkuY29sb3IsInVpbnQ4Iiksby5jb2xvclszXT0wLG8uYm9yZGVyQ29sb3I9YShpLmNvbG9yLCJ1aW50OCIpKTooby5jb2xvcj1hKGkuY29sb3IsInVpbnQ4Iiksby5ib3JkZXJDb2xvcj1hKGkubGluZS5jb2xvciwidWludDgiKSksby5vcGFjaXR5PXQub3BhY2l0eSppLm9wYWNpdHk7aWYobClmb3Ioby5tYXJrZXJzPW5ldyBBcnJheShuKSxlPTA7ZTxuO2UrKylvLm1hcmtlcnNbZV09TShpLnN5bWJvbFtlXSk7ZWxzZSBvLm1hcmtlcj1NKGkuc3ltYm9sKTt2YXIgdyxrPWgodCk7aWYoZ3x8dil7dmFyIFQsQT1vLnNpemVzPW5ldyBBcnJheShuKSxTPW8uYm9yZGVyU2l6ZXM9bmV3IEFycmF5KG4pLEU9MDtpZihnKXtmb3IoZT0wO2U8bjtlKyspQVtlXT1rKGkuc2l6ZVtlXSksRSs9QVtlXTtUPUUvbn1lbHNlIGZvcih3PWsoaS5zaXplKSxlPTA7ZTxuO2UrKylBW2VdPXc7aWYodilmb3IoZT0wO2U8bjtlKyspU1tlXT1pLmxpbmUud2lkdGhbZV0vMjtlbHNlIGZvcih3PWkubGluZS53aWR0aC8yLGU9MDtlPG47ZSsrKVNbZV09dztvLnNpemVBdmc9VH1lbHNlIG8uc2l6ZT1rKGkmJmkuc2l6ZXx8MTApLG8uYm9yZGVyU2l6ZXM9ayhpLmxpbmUud2lkdGgpO3JldHVybiBvfWZ1bmN0aW9uIHkodCxlKXt2YXIgcj10Lm1hcmtlcixuPXt9O3JldHVybiBlPyhlLm1hcmtlciYmZS5tYXJrZXIuc3ltYm9sP249bShzLmV4dGVuZEZsYXQoe30scixlLm1hcmtlcikpOmUubWFya2VyJiYoZS5tYXJrZXIuc2l6ZSYmKG4uc2l6ZT1lLm1hcmtlci5zaXplLzIpLGUubWFya2VyLmNvbG9yJiYobi5jb2xvcnM9ZS5tYXJrZXIuY29sb3IpLHZvaWQgMCE9PWUubWFya2VyLm9wYWNpdHkmJihuLm9wYWNpdHk9ZS5tYXJrZXIub3BhY2l0eSkpLG4pOm59ZnVuY3Rpb24geCh0LGUpe3ZhciByPXt9O2lmKCFlKXJldHVybiByO2lmKGUudGV4dGZvbnQpe3ZhciBuPXtvcGFjaXR5OjEsdGV4dDp0LnRleHQsdGV4dHBvc2l0aW9uOnQudGV4dHBvc2l0aW9uLHRleHRmb250OnMuZXh0ZW5kRmxhdCh7fSx0LnRleHRmb250KX07ZS50ZXh0Zm9udCYmcy5leHRlbmRGbGF0KG4udGV4dGZvbnQsZS50ZXh0Zm9udCkscj12KG4pfXJldHVybiByfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj17Y2FwU2l6ZToyKmUud2lkdGgsbGluZVdpZHRoOmUudGhpY2tuZXNzLGNvbG9yOmUuY29sb3J9O3JldHVybiBlLmNvcHlfeXN0eWxlJiYocj10LmVycm9yX3kpLHJ9dmFyIF89cC5TWU1CT0xfU0RGX1NJWkUsdz1wLlNZTUJPTF9TSVpFLGs9cC5TWU1CT0xfU1RST0tFLFQ9e30sQT1sLnN5bWJvbEZ1bmNzWzBdKC4wNSp3KTtmdW5jdGlvbiBNKHQpe2lmKCJjaXJjbGUiPT09dClyZXR1cm4gbnVsbDt2YXIgZSxyLG49bC5zeW1ib2xOdW1iZXIodCksYT1sLnN5bWJvbEZ1bmNzW24lMTAwXSxvPSEhbC5zeW1ib2xOb0RvdFtuJTEwMF0scz0hIWwuc3ltYm9sTm9GaWxsW24lMTAwXSxjPXAuRE9UX1JFLnRlc3QodCk7cmV0dXJuIFRbdF0/VFt0XTooZT1jJiYhbz9hKDEuMSp3KStBOmEodykscj1pKGUse3c6XyxoOl8sdmlld0JveDpbLXcsLXcsdyx3XSxzdHJva2U6cz9rOi1rfSksVFt0XT1yLHJ8fG51bGwpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXttYXJrZXI6dm9pZCAwLG1hcmtlclNlbDp2b2lkIDAsbWFya2VyVW5zZWw6dm9pZCAwLGxpbmU6dm9pZCAwLGZpbGw6dm9pZCAwLGVycm9yWDp2b2lkIDAsZXJyb3JZOnZvaWQgMCx0ZXh0OnZvaWQgMCx0ZXh0U2VsOnZvaWQgMCx0ZXh0VW5zZWw6dm9pZCAwfTtpZighMCE9PWUudmlzaWJsZSlyZXR1cm4gbjtpZihmLmhhc1RleHQoZSkmJihuLnRleHQ9dihlKSxuLnRleHRTZWw9eChlLGUuc2VsZWN0ZWQpLG4udGV4dFVuc2VsPXgoZSxlLnVuc2VsZWN0ZWQpKSxmLmhhc01hcmtlcnMoZSkmJihuLm1hcmtlcj1tKGUpLG4ubWFya2VyU2VsPXkoZSxlLnNlbGVjdGVkKSxuLm1hcmtlclVuc2VsPXkoZSxlLnVuc2VsZWN0ZWQpLCFlLnVuc2VsZWN0ZWQmJkFycmF5LmlzQXJyYXkoZS5tYXJrZXIub3BhY2l0eSkpKXt2YXIgaT1lLm1hcmtlci5vcGFjaXR5O2ZvcihuLm1hcmtlclVuc2VsLm9wYWNpdHk9bmV3IEFycmF5KGkubGVuZ3RoKSxyPTA7cjxpLmxlbmd0aDtyKyspbi5tYXJrZXJVbnNlbC5vcGFjaXR5W3JdPWQqaVtyXX1pZihmLmhhc0xpbmVzKGUpKXtuLmxpbmU9e292ZXJsYXk6ITAsdGhpY2tuZXNzOmUubGluZS53aWR0aCxjb2xvcjplLmxpbmUuY29sb3Isb3BhY2l0eTplLm9wYWNpdHl9O3ZhciBhPShwLkRBU0hFU1tlLmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8YS5sZW5ndGg7KytyKWFbcl0qPWUubGluZS53aWR0aDtuLmxpbmUuZGFzaGVzPWF9cmV0dXJuIGUuZXJyb3JfeCYmZS5lcnJvcl94LnZpc2libGUmJihuLmVycm9yWD1iKGUsZS5lcnJvcl94KSksZS5lcnJvcl95JiZlLmVycm9yX3kudmlzaWJsZSYmKG4uZXJyb3JZPWIoZSxlLmVycm9yX3kpKSxlLmZpbGwmJiJub25lIiE9PWUuZmlsbCYmKG4uZmlsbD17Y2xvc2VkOiEwLGZpbGw6ZS5maWxsY29sb3IsdGhpY2tuZXNzOjB9KSxufSxtYXJrZXJTdHlsZTptLG1hcmtlclNlbGVjdGlvbjp5LGxpbmVQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPWEvMjtpZihmLmhhc0xpbmVzKGUpJiZvKWlmKCJodiI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOLE5hTixOYU4pOihuLnB1c2goclsyKmldLHJbMippKzFdKSxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippKzJdLHJbMippKzFdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoImh2aCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBzPShyWzIqaV0rclsyKmkrMl0pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxzLHJbMippKzFdLHMsclsyKmkrM10pfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKCJ2aHYiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlmKGlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKXx8aXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSkpaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmldLHJbMippKzFdKSxuLnB1c2goTmFOLE5hTik7ZWxzZXt2YXIgbD0oclsyKmkrMV0rclsyKmkrM10pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxyWzIqaV0sbCxyWzIqaSsyXSxsKX1uLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBpZigidmgiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrM10pKTtuLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBuPXI7dmFyIGM9ITE7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylpZihpc05hTihuW2ldKSl7Yz0hMDticmVha312YXIgdT1jfHxuLmxlbmd0aD5wLlRPT19NQU5ZX1BPSU5UUz8icmVjdCI6Zi5oYXNNYXJrZXJzKGUpPyJyZWN0Ijoicm91bmQiO2lmKGMmJmUuY29ubmVjdGdhcHMpe3ZhciBoPW5bMF0sZD1uWzFdO2ZvcihpPTA7aTxuLmxlbmd0aDtpKz0yKWlzTmFOKG5baV0pfHxpc05hTihuW2krMV0pPyhuW2ldPWgsbltpKzFdPWQpOihoPW5baV0sZD1uW2krMV0pfXJldHVybntqb2luOnUscG9zaXRpb25zOm59fSxlcnJvckJhclBvc2l0aW9uczpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJtYWtlQ29tcHV0ZUVycm9yIiksbD1jLmdldEZyb21JZCh0LGUueGF4aXMpLHU9Yy5nZXRGcm9tSWQodCxlLnlheGlzKSxmPXIubGVuZ3RoLzIsaD17fTtmdW5jdGlvbiBwKHQsaSl7dmFyIGE9aS5faWQuY2hhckF0KDApLG89ZVsiZXJyb3JfIithXTtpZihvJiZvLnZpc2libGUmJigibGluZWFyIj09PWkudHlwZXx8ImxvZyI9PT1pLnR5cGUpKXtmb3IodmFyIGw9cyhvKSxjPXt4OjAseToxfVthXSx1PXt4OlswLDEsMiwzXSx5OlsyLDMsMCwxXX1bYV0scD1uZXcgRmxvYXQ2NEFycmF5KDQqZiksZD0xLzAsZz0tMS8wLHY9MCxtPTA7djxmO3YrKyxtKz00KXt2YXIgeT10W3ZdO2lmKG4oeSkpe3ZhciB4PXJbMip2K2NdLGI9bCh5LHYpLF89YlswXSx3PWJbMV07aWYobihfKSYmbih3KSl7dmFyIGs9eS1fLFQ9eSt3O3BbbSt1WzBdXT14LWkuYzJsKGspLHBbbSt1WzFdXT1pLmMybChUKS14LHBbbSt1WzJdXT0wLHBbbSt1WzNdXT0wLGQ9TWF0aC5taW4oZCx5LV8pLGc9TWF0aC5tYXgoZyx5K3cpfX19aFthXT17cG9zaXRpb25zOnIsZXJyb3JzOnAsX2JuZHM6W2QsZ119fX1yZXR1cm4gcChpLGwpLHAoYSx1KSxofSx0ZXh0UG9zaXRpb246ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1lLl9sZW5ndGgsbz17fTtpZihmLmhhc01hcmtlcnMoZSkpe3ZhciBzPXIuZm9udCxsPXIuYWxpZ24sYz1yLmJhc2VsaW5lO2ZvcihvLm9mZnNldD1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspe3ZhciB1PW4uc2l6ZXM/bi5zaXplc1tpXTpuLnNpemUsaD1BcnJheS5pc0FycmF5KHMpP3NbaV0uc2l6ZTpzLnNpemUscD1BcnJheS5pc0FycmF5KGwpP2wubGVuZ3RoPjE/bFtpXTpsWzBdOmwsZD1BcnJheS5pc0FycmF5KGMpP2MubGVuZ3RoPjE/Y1tpXTpjWzBdOmMsdj1nW3BdLG09Z1tkXSx5PXU/dS8uOCsxOjAseD0tbSp5LS41Km07by5vZmZzZXRbaV09W3YqeS9oLHgvaF19fXJldHVybiBvfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjY3NiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjY5NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NTEsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMDY4LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDc1LCIuL2NvbnN0YW50cyI6MTEwMSwiY29sb3Itbm9ybWFsaXplIjoxMTAsImZhc3QtaXNudW1lcmljIjoyMjEsInN2Zy1wYXRoLXNkZiI6NTE5fV0sMTEwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIikscz10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbD10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksZj10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGg9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgZz0hIXQubWFya2VyJiYvLW9wZW4vLnRlc3QodC5tYXJrZXIuc3ltYm9sKSx2PXMuaXNCdWJibGUodCksbT1sKHQsZSxwLGQpO2lmKG0pe3ZhciB5PW08by5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiO2QoInRleHQiKSxkKCJob3ZlcnRleHQiKSxkKCJob3ZlcnRlbXBsYXRlIiksZCgibW9kZSIseSkscy5oYXNMaW5lcyhlKSYmKGQoImNvbm5lY3RnYXBzIiksdSh0LGUscixwLGQpLGQoImxpbmUuc2hhcGUiKSkscy5oYXNNYXJrZXJzKGUpJiYoYyh0LGUscixwLGQpLGQoIm1hcmtlci5saW5lLndpZHRoIixnfHx2PzE6MCkpLHMuaGFzVGV4dChlKSYmaCh0LGUscCxkKTt2YXIgeD0oZS5saW5lfHx7fSkuY29sb3IsYj0oZS5tYXJrZXJ8fHt9KS5jb2xvcjtkKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZmKHQsZSxyLGQpO3ZhciBfPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO18odCxlLHh8fGJ8fHIse2F4aXM6InkifSksXyh0LGUseHx8Ynx8cix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxkKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDU1LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA2MCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDY0LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA3MCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDc2LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMDc3LCIuL2F0dHJpYnV0ZXMiOjExMDB9XSwxMTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtc2NhdHRlcjJkIiksaT10KCJyZWdsLWxpbmUyZCIpLGE9dCgicmVnbC1lcnJvcjJkIiksbz10KCJwb2ludC1jbHVzdGVyIikscz10KCJhcnJheS1yYW5nZSIpLGw9dCgiZ2wtdGV4dCIpLGM9dCgiLi4vLi4vcmVnaXN0cnkiKSx1PXQoIi4uLy4uL2xpYiIpLGY9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikscD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLGQ9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGc9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLHY9dCgiLi4vc2NhdHRlci9jYWxjIiksbT12LmNhbGNNYXJrZXJTaXplLHk9di5jYWxjQXhpc0V4cGFuc2lvbix4PXYuc2V0Rmlyc3RTY2F0dGVyLGI9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxfPXQoIi4uL3NjYXR0ZXIvbGlua190cmFjZXMiKSx3PXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIiksaz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpLFQ9dCgiLi9jb252ZXJ0IiksQT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLE09dCgiLi9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFMsUz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU07ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49dC5fZXh0cmVtZXNbZS5faWRdLGk9cChlLHIuX2JuZHMse3BhZGRlZDohMH0pO24ubWluPW4ubWluLmNvbmNhdChpLm1pbiksbi5tYXg9bi5tYXguY29uY2F0KGkubWF4KX1mdW5jdGlvbiBDKHQsZSl7dmFyIHI9ZS5fc2NlbmUsbj17Y291bnQ6MCxkaXJ0eTohMCxsaW5lT3B0aW9uczpbXSxmaWxsT3B0aW9uczpbXSxtYXJrZXJPcHRpb25zOltdLG1hcmtlclNlbGVjdGVkT3B0aW9uczpbXSxtYXJrZXJVbnNlbGVjdGVkT3B0aW9uczpbXSxlcnJvclhPcHRpb25zOltdLGVycm9yWU9wdGlvbnM6W10sdGV4dE9wdGlvbnM6W10sdGV4dFNlbGVjdGVkT3B0aW9uczpbXSx0ZXh0VW5zZWxlY3RlZE9wdGlvbnM6W119LGk9e3NlbGVjdEJhdGNoOm51bGwsdW5zZWxlY3RCYXRjaDpudWxsLGZpbGwyZDohMSxzY2F0dGVyMmQ6ITEsZXJyb3IyZDohMSxsaW5lMmQ6ITEsZ2xUZXh0OiExLHNlbGVjdDJkOm51bGx9O3JldHVybiBlLl9zY2VuZXx8KChyPWUuX3NjZW5lPXt9KS5pbml0PWZ1bmN0aW9uKCl7dS5leHRlbmRGbGF0KHIsaSxuKX0sci5pbml0KCksci51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dS5yZXBlYXQodCxyLmNvdW50KTtpZihyLmZpbGwyZCYmci5maWxsMmQudXBkYXRlKGUpLHIuc2NhdHRlcjJkJiZyLnNjYXR0ZXIyZC51cGRhdGUoZSksci5saW5lMmQmJnIubGluZTJkLnVwZGF0ZShlKSxyLmVycm9yMmQmJnIuZXJyb3IyZC51cGRhdGUoZS5jb25jYXQoZSkpLHIuc2VsZWN0MmQmJnIuc2VsZWN0MmQudXBkYXRlKGUpLHIuZ2xUZXh0KWZvcih2YXIgbj0wO248ci5jb3VudDtuKyspci5nbFRleHRbbl0udXBkYXRlKHQpfSxyLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ci5jb3VudCxlPXIuZmlsbDJkLG49ci5lcnJvcjJkLGk9ci5saW5lMmQsYT1yLnNjYXR0ZXIyZCxvPXIuZ2xUZXh0LHM9ci5zZWxlY3QyZCxsPXIuc2VsZWN0QmF0Y2gsYz1yLnVuc2VsZWN0QmF0Y2gsdT0wO3U8dDt1KyspZSYmci5maWxsT3JkZXJbdV0mJmUuZHJhdyhyLmZpbGxPcmRlclt1XSksaSYmci5saW5lT3B0aW9uc1t1XSYmaS5kcmF3KHUpLG4mJihyLmVycm9yWE9wdGlvbnNbdV0mJm4uZHJhdyh1KSxyLmVycm9yWU9wdGlvbnNbdV0mJm4uZHJhdyh1K3QpKSwhYXx8IXIubWFya2VyT3B0aW9uc1t1XXx8bCYmbFt1XXx8YS5kcmF3KHUpLG9bdV0mJnIudGV4dE9wdGlvbnNbdV0mJm9bdV0ucmVuZGVyKCk7YSYmcyYmbCYmKHMuZHJhdyhsKSxhLmRyYXcoYykpLHIuZGlydHk9ITF9LHIuZGVzdHJveT1mdW5jdGlvbigpe3IuZmlsbDJkJiZyLmZpbGwyZC5kZXN0cm95JiZyLmZpbGwyZC5kZXN0cm95KCksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLmRlc3Ryb3kmJnIuc2NhdHRlcjJkLmRlc3Ryb3koKSxyLmVycm9yMmQmJnIuZXJyb3IyZC5kZXN0cm95JiZyLmVycm9yMmQuZGVzdHJveSgpLHIubGluZTJkJiZyLmxpbmUyZC5kZXN0cm95JiZyLmxpbmUyZC5kZXN0cm95KCksci5zZWxlY3QyZCYmci5zZWxlY3QyZC5kZXN0cm95JiZyLnNlbGVjdDJkLmRlc3Ryb3koKSxyLmdsVGV4dCYmci5nbFRleHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSksci5saW5lT3B0aW9ucz1udWxsLHIuZmlsbE9wdGlvbnM9bnVsbCxyLm1hcmtlck9wdGlvbnM9bnVsbCxyLm1hcmtlclNlbGVjdGVkT3B0aW9ucz1udWxsLHIubWFya2VyVW5zZWxlY3RlZE9wdGlvbnM9bnVsbCxyLmVycm9yWE9wdGlvbnM9bnVsbCxyLmVycm9yWU9wdGlvbnM9bnVsbCxyLnRleHRPcHRpb25zPW51bGwsci50ZXh0U2VsZWN0ZWRPcHRpb25zPW51bGwsci50ZXh0VW5zZWxlY3RlZE9wdGlvbnM9bnVsbCxyLnNlbGVjdEJhdGNoPW51bGwsci51bnNlbGVjdEJhdGNoPW51bGwsZS5fc2NlbmU9bnVsbH0pLHIuZGlydHl8fHUuZXh0ZW5kRmxhdChyLG4pLHJ9ZnVuY3Rpb24gTCh0LGUscixuKXt2YXIgaT10LnhhLGE9dC55YSxvPXQuZGlzdGFuY2Uscz10LmR4eSxsPXQuaW5kZXgsZj17cG9pbnROdW1iZXI6bCx4OmVbbF0seTpyW2xdfTtmLnR4PUFycmF5LmlzQXJyYXkobi50ZXh0KT9uLnRleHRbbF06bi50ZXh0LGYuaHR4PUFycmF5LmlzQXJyYXkobi5ob3ZlcnRleHQpP24uaG92ZXJ0ZXh0W2xdOm4uaG92ZXJ0ZXh0LGYuZGF0YT1BcnJheS5pc0FycmF5KG4uY3VzdG9tZGF0YSk/bi5jdXN0b21kYXRhW2xdOm4uY3VzdG9tZGF0YSxmLnRwPUFycmF5LmlzQXJyYXkobi50ZXh0cG9zaXRpb24pP24udGV4dHBvc2l0aW9uW2xdOm4udGV4dHBvc2l0aW9uO3ZhciBoPW4udGV4dGZvbnQ7aCYmKGYudHM9QXJyYXkuaXNBcnJheShoLnNpemUpP2guc2l6ZVtsXTpoLnNpemUsZi50Yz1BcnJheS5pc0FycmF5KGguY29sb3IpP2guY29sb3JbbF06aC5jb2xvcixmLnRmPUFycmF5LmlzQXJyYXkoaC5mYW1pbHkpP2guZmFtaWx5W2xdOmguZmFtaWx5KTt2YXIgcD1uLm1hcmtlcjtwJiYoZi5tcz11LmlzQXJyYXlPclR5cGVkQXJyYXkocC5zaXplKT9wLnNpemVbbF06cC5zaXplLGYubW89dS5pc0FycmF5T3JUeXBlZEFycmF5KHAub3BhY2l0eSk/cC5vcGFjaXR5W2xdOnAub3BhY2l0eSxmLm14PUFycmF5LmlzQXJyYXkocC5zeW1ib2wpP3Auc3ltYm9sW2xdOnAuc3ltYm9sLGYubWM9dS5pc0FycmF5T3JUeXBlZEFycmF5KHAuY29sb3IpP3AuY29sb3JbbF06cC5jb2xvcik7dmFyIGQ9cCYmcC5saW5lO2QmJihmLm1sYz1BcnJheS5pc0FycmF5KGQuY29sb3IpP2QuY29sb3JbbF06ZC5jb2xvcixmLm1sdz11LmlzQXJyYXlPclR5cGVkQXJyYXkoZC53aWR0aCk/ZC53aWR0aFtsXTpkLndpZHRoKTt2YXIgZz1wJiZwLmdyYWRpZW50O2cmJiJub25lIiE9PWcudHlwZSYmKGYubWd0PUFycmF5LmlzQXJyYXkoZy50eXBlKT9nLnR5cGVbbF06Zy50eXBlLGYubWdjPUFycmF5LmlzQXJyYXkoZy5jb2xvcik/Zy5jb2xvcltsXTpnLmNvbG9yKTt2YXIgdj1pLmMycChmLngsITApLG09YS5jMnAoZi55LCEwKSx5PWYubXJjfHwxLHg9bi5ob3ZlcmxhYmVsO3gmJihmLmhiZz1BcnJheS5pc0FycmF5KHguYmdjb2xvcik/eC5iZ2NvbG9yW2xdOnguYmdjb2xvcixmLmhiYz1BcnJheS5pc0FycmF5KHguYm9yZGVyY29sb3IpP3guYm9yZGVyY29sb3JbbF06eC5ib3JkZXJjb2xvcixmLmh0cz1BcnJheS5pc0FycmF5KHguZm9udC5zaXplKT94LmZvbnQuc2l6ZVtsXTp4LmZvbnQuc2l6ZSxmLmh0Yz1BcnJheS5pc0FycmF5KHguZm9udC5jb2xvcik/eC5mb250LmNvbG9yW2xdOnguZm9udC5jb2xvcixmLmh0Zj1BcnJheS5pc0FycmF5KHguZm9udC5mYW1pbHkpP3guZm9udC5mYW1pbHlbbF06eC5mb250LmZhbWlseSxmLmhubD1BcnJheS5pc0FycmF5KHgubmFtZWxlbmd0aCk/eC5uYW1lbGVuZ3RoW2xdOngubmFtZWxlbmd0aCk7dmFyIGI9bi5ob3ZlcmluZm87YiYmKGYuaGk9QXJyYXkuaXNBcnJheShiKT9iW2xdOmIpO3ZhciBfPW4uaG92ZXJ0ZW1wbGF0ZTtfJiYoZi5odD1BcnJheS5pc0FycmF5KF8pP19bbF06Xyk7dmFyIFQ9e307cmV0dXJuIFRbdC5pbmRleF09Zix1LmV4dGVuZEZsYXQodCx7Y29sb3I6dyhuLGYpLHgwOnYteSx4MTp2K3kseExhYmVsVmFsOmYueCx5MDptLXkseTE6bSt5LHlMYWJlbFZhbDpmLnksY2Q6VCxkaXN0YW5jZTpvLHNwaWtlRGlzdGFuY2U6cyxob3ZlcnRlbXBsYXRlOmYuaHR9KSxmLmh0eD90LnRleHQ9Zi5odHg6Zi50eD90LnRleHQ9Zi50eDpuLnRleHQmJih0LnRleHQ9bi50ZXh0KSxrKGYsbix0KSxjLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoZixuLHQpLHR9ZnVuY3Rpb24geih0KXt2YXIgZSxyLG49dFswXSxpPW4udHJhY2UsYT1uLnQsbz1hLl9zY2VuZSxzPWEuaW5kZXgsbD1vLnNlbGVjdEJhdGNoW3NdLGM9by51bnNlbGVjdEJhdGNoW3NdLGY9by50ZXh0T3B0aW9uc1tzXSxoPW8udGV4dFNlbGVjdGVkT3B0aW9uc1tzXXx8e30scD1vLnRleHRVbnNlbGVjdGVkT3B0aW9uc1tzXXx8e30sZz11LmV4dGVuZEZsYXQoe30sZik7aWYobCYmYyl7dmFyIHY9aC5jb2xvcixtPXAuY29sb3IseT1mLmNvbG9yLHg9QXJyYXkuaXNBcnJheSh5KTtmb3IoZy5jb2xvcj1uZXcgQXJyYXkoaS5fbGVuZ3RoKSxlPTA7ZTxsLmxlbmd0aDtlKyspcj1sW2VdLGcuY29sb3Jbcl09dnx8KHg/eVtyXTp5KTtmb3IoZT0wO2U8Yy5sZW5ndGg7ZSsrKXtyPWNbZV07dmFyIGI9eD95W3JdOnk7Zy5jb2xvcltyXT1tfHwodj9iOmQuYWRkT3BhY2l0eShiLFMpKX19by5nbFRleHRbc10udXBkYXRlKGcpfWUuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJnbCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsImNhcnRlc2lhbiIsInN5bWJvbHMiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksY2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPXQuX2Z1bGxMYXlvdXQscz1oLmdldEZyb21JZCh0LGUueGF4aXMpLGw9aC5nZXRGcm9tSWQodCxlLnlheGlzKSxjPWEuX3Bsb3RzW2UueGF4aXMrZS55YXhpc10sZj1lLl9sZW5ndGgscD1mPj1NLGQ9MipmLGc9e30sdj1zLm1ha2VDYWxjZGF0YShlLCJ4IiksXz1sLm1ha2VDYWxjZGF0YShlLCJ5Iiksdz1uZXcgQXJyYXkoZCk7Zm9yKHI9MDtyPGY7cisrKW49dltyXSxpPV9bcl0sd1syKnJdPW49PT1BP05hTjpuLHdbMipyKzFdPWk9PT1BP05hTjppO2lmKCJsb2ciPT09cy50eXBlKWZvcihyPTA7cjxkO3IrPTIpd1tyXT1zLmMybCh3W3JdKTtpZigibG9nIj09PWwudHlwZSlmb3Iocj0xO3I8ZDtyKz0yKXdbcl09bC5jMmwod1tyXSk7aWYocCYmImxvZyIhPT1zLnR5cGUmJiJsb2ciIT09bC50eXBlKWcudHJlZT1vKHcpO2Vsc2V7dmFyIGs9Zy5pZHM9bmV3IEFycmF5KGYpO2ZvcihyPTA7cjxmO3IrKylrW3JdPXJ9Yih0LGUpO3ZhciBTLEw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPVQuc3R5bGUodCxyKTtpZihvLm1hcmtlciYmKG8ubWFya2VyLnBvc2l0aW9ucz1uKSxvLmxpbmUmJm4ubGVuZ3RoPjEmJnUuZXh0ZW5kRmxhdChvLmxpbmUsVC5saW5lUG9zaXRpb25zKHQscixuKSksby5lcnJvclh8fG8uZXJyb3JZKXt2YXIgcz1ULmVycm9yQmFyUG9zaXRpb25zKHQscixuLGksYSk7by5lcnJvclgmJnUuZXh0ZW5kRmxhdChvLmVycm9yWCxzLngpLG8uZXJyb3JZJiZ1LmV4dGVuZEZsYXQoby5lcnJvclkscy55KX1yZXR1cm4gby50ZXh0JiYodS5leHRlbmRGbGF0KG8udGV4dCx7cG9zaXRpb25zOm59LFQudGV4dFBvc2l0aW9uKHQscixvLnRleHQsby5tYXJrZXIpKSx1LmV4dGVuZEZsYXQoby50ZXh0U2VsLHtwb3NpdGlvbnM6bn0sVC50ZXh0UG9zaXRpb24odCxyLG8udGV4dCxvLm1hcmtlclNlbCkpLHUuZXh0ZW5kRmxhdChvLnRleHRVbnNlbCx7cG9zaXRpb25zOm59LFQudGV4dFBvc2l0aW9uKHQscixvLnRleHQsby5tYXJrZXJVbnNlbCkpKSxvfSh0LDAsZSx3LHYsXyksej1DKDAsYyk7cmV0dXJuIHgoYSxlKSxwP0wubWFya2VyJiYoUz0yKihMLm1hcmtlci5zaXplQXZnfHxNYXRoLm1heChMLm1hcmtlci5zaXplLDMpKSk6Uz1tKGUsZikseSh0LGUscyxsLHYsXyxTKSxMLmVycm9yWCYmRShlLHMsTC5lcnJvclgpLEwuZXJyb3JZJiZFKGUsbCxMLmVycm9yWSksTC5maWxsJiYhei5maWxsMmQmJih6LmZpbGwyZD0hMCksTC5tYXJrZXImJiF6LnNjYXR0ZXIyZCYmKHouc2NhdHRlcjJkPSEwKSxMLmxpbmUmJiF6LmxpbmUyZCYmKHoubGluZTJkPSEwKSwhTC5lcnJvclgmJiFMLmVycm9yWXx8ei5lcnJvcjJkfHwoei5lcnJvcjJkPSEwKSxMLnRleHQmJiF6LmdsVGV4dCYmKHouZ2xUZXh0PSEwKSxMLm1hcmtlciYmKEwubWFya2VyLnNuYXA9Zy50cmVlfHxNKSx6LmxpbmVPcHRpb25zLnB1c2goTC5saW5lKSx6LmVycm9yWE9wdGlvbnMucHVzaChMLmVycm9yWCksei5lcnJvcllPcHRpb25zLnB1c2goTC5lcnJvclkpLHouZmlsbE9wdGlvbnMucHVzaChMLmZpbGwpLHoubWFya2VyT3B0aW9ucy5wdXNoKEwubWFya2VyKSx6Lm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKEwubWFya2VyU2VsKSx6Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTC5tYXJrZXJVbnNlbCksei50ZXh0T3B0aW9ucy5wdXNoKEwudGV4dCksei50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goTC50ZXh0U2VsKSx6LnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKEwudGV4dFVuc2VsKSxnLl9zY2VuZT16LGcuaW5kZXg9ei5jb3VudCxnLng9dixnLnk9XyxnLnBvc2l0aW9ucz13LHouY291bnQrKyxbe3g6ITEseTohMSx0OmcsdHJhY2U6ZX1dfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aCl7dmFyIG8scyxjPXQuX2Z1bGxMYXlvdXQsaD1lLl9zY2VuZSxwPWUueGF4aXMsZD1lLnlheGlzO2lmKGgpaWYoZih0LFsiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIsIk9FU19lbGVtZW50X2luZGV4X3VpbnQiXSkpe3ZhciB2PWMuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKF8odCxlLHIpLGguZGlydHkpe2lmKCEwPT09aC5lcnJvcjJkJiYoaC5lcnJvcjJkPWEodikpLCEwPT09aC5saW5lMmQmJihoLmxpbmUyZD1pKHYpKSwhMD09PWguc2NhdHRlcjJkJiYoaC5zY2F0dGVyMmQ9bih2KSksITA9PT1oLmZpbGwyZCYmKGguZmlsbDJkPWkodikpLCEwPT09aC5nbFRleHQpZm9yKGguZ2xUZXh0PW5ldyBBcnJheShoLmNvdW50KSxvPTA7bzxoLmNvdW50O28rKyloLmdsVGV4dFtvXT1uZXcgbCh2KTtpZihoLmdsVGV4dCl7aWYoaC5jb3VudD5oLmdsVGV4dC5sZW5ndGgpe3ZhciBtPWguY291bnQtaC5nbFRleHQubGVuZ3RoO2ZvcihvPTA7bzxtO28rKyloLmdsVGV4dC5wdXNoKG5ldyBsKHYpKX1lbHNlIGlmKGguY291bnQ8aC5nbFRleHQubGVuZ3RoKXt2YXIgeT1oLmdsVGV4dC5sZW5ndGgtaC5jb3VudDtoLmdsVGV4dC5zcGxpY2UoaC5jb3VudCx5KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9Zm9yKG89MDtvPGguY291bnQ7bysrKWguZ2xUZXh0W29dLnVwZGF0ZShoLnRleHRPcHRpb25zW29dKX1pZihoLmxpbmUyZCYmKGgubGluZTJkLnVwZGF0ZShoLmxpbmVPcHRpb25zKSxoLmxpbmVPcHRpb25zPWgubGluZU9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe2lmKHQmJnQucG9zaXRpb25zKXtmb3IodmFyIGU9dC5wb3NpdGlvbnMscj0wO3I8ZS5sZW5ndGgmJihpc05hTihlW3JdKXx8aXNOYU4oZVtyKzFdKSk7KXIrPTI7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj5yJiYoaXNOYU4oZVtuXSl8fGlzTmFOKGVbbisxXSkpOyluLT0yO3QucG9zaXRpb25zPWUuc2xpY2UocixuKzIpfXJldHVybiB0fSksaC5saW5lMmQudXBkYXRlKGgubGluZU9wdGlvbnMpKSxoLmVycm9yMmQpe3ZhciB4PShoLmVycm9yWE9wdGlvbnN8fFtdKS5jb25jYXQoaC5lcnJvcllPcHRpb25zfHxbXSk7aC5lcnJvcjJkLnVwZGF0ZSh4KX1oLnNjYXR0ZXIyZCYmaC5zY2F0dGVyMmQudXBkYXRlKGgubWFya2VyT3B0aW9ucyksaC5maWxsT3JkZXI9dS5yZXBlYXQobnVsbCxoLmNvdW50KSxoLmZpbGwyZCYmKGguZmlsbE9wdGlvbnM9aC5maWxsT3B0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXt2YXIgbj1yW2VdO2lmKHQmJm4mJm5bMF0mJm5bMF0udHJhY2Upe3ZhciBpLGEsbz1uWzBdLHM9by50cmFjZSxsPW8udCxjPWgubGluZU9wdGlvbnNbZV0sdT1bXTtzLl9vd25maWxsJiZ1LnB1c2goZSkscy5fbmV4dHRyYWNlJiZ1LnB1c2goZSsxKSx1Lmxlbmd0aCYmKGguZmlsbE9yZGVyW2VdPXUpO3ZhciBmLHAsZD1bXSxnPWMmJmMucG9zaXRpb25zfHxsLnBvc2l0aW9ucztpZigidG96ZXJveSI9PT1zLmZpbGwpe2ZvcihmPTA7ZjxnLmxlbmd0aCYmaXNOYU4oZ1tmKzFdKTspZis9Mjtmb3IocD1nLmxlbmd0aC0yO3A+ZiYmaXNOYU4oZ1twKzFdKTspcC09MjswIT09Z1tmKzFdJiYoZD1bZ1tmXSwwXSksZD1kLmNvbmNhdChnLnNsaWNlKGYscCsyKSksMCE9PWdbcCsxXSYmKGQ9ZC5jb25jYXQoW2dbcF0sMF0pKX1lbHNlIGlmKCJ0b3plcm94Ij09PXMuZmlsbCl7Zm9yKGY9MDtmPGcubGVuZ3RoJiZpc05hTihnW2ZdKTspZis9Mjtmb3IocD1nLmxlbmd0aC0yO3A+ZiYmaXNOYU4oZ1twXSk7KXAtPTI7MCE9PWdbZl0mJihkPVswLGdbZisxXV0pLGQ9ZC5jb25jYXQoZy5zbGljZShmLHArMikpLDAhPT1nW3BdJiYoZD1kLmNvbmNhdChbMCxnW3ArMV1dKSl9ZWxzZSBpZigidG9zZWxmIj09PXMuZmlsbHx8InRvbmV4dCI9PT1zLmZpbGwpe2ZvcihkPVtdLGk9MCxhPTA7YTxnLmxlbmd0aDthKz0yKShpc05hTihnW2FdKXx8aXNOYU4oZ1thKzFdKSkmJigoZD1kLmNvbmNhdChnLnNsaWNlKGksYSkpKS5wdXNoKGdbaV0sZ1tpKzFdKSxpPWErMik7ZD1kLmNvbmNhdChnLnNsaWNlKGkpKSxpJiZkLnB1c2goZ1tpXSxnW2krMV0pfWVsc2V7dmFyIHY9cy5fbmV4dHRyYWNlO2lmKHYpe3ZhciBtPWgubGluZU9wdGlvbnNbZSsxXTtpZihtKXt2YXIgeT1tLnBvc2l0aW9ucztpZigidG9uZXh0eSI9PT1zLmZpbGwpe2ZvcihkPWcuc2xpY2UoKSxlPU1hdGguZmxvb3IoeS5sZW5ndGgvMik7ZS0tOyl7dmFyIHg9eVsyKmVdLGI9eVsyKmUrMV07aXNOYU4oeCl8fGlzTmFOKGIpfHxkLnB1c2goeCxiKX10LmZpbGw9di5maWxsY29sb3J9fX19aWYocy5fcHJldnRyYWNlJiYidG9uZXh0Ij09PXMuX3ByZXZ0cmFjZS5maWxsKXt2YXIgXz1oLmxpbmVPcHRpb25zW2UtMV0ucG9zaXRpb25zLHc9ZC5sZW5ndGgvMixrPVtpPXddO2ZvcihhPTA7YTxfLmxlbmd0aDthKz0yKShpc05hTihfW2FdKXx8aXNOYU4oX1thKzFdKSkmJihrLnB1c2goYS8yK3crMSksaT1hKzIpO2Q9ZC5jb25jYXQoXyksdC5ob2xlPWt9cmV0dXJuIHQuZmlsbG1vZGU9cy5maWxsLHQub3BhY2l0eT1zLm9wYWNpdHksdC5wb3NpdGlvbnM9ZCx0fX0pLGguZmlsbDJkLnVwZGF0ZShoLmZpbGxPcHRpb25zKSl9aC5zZWxlY3RCYXRjaD1udWxsLGgudW5zZWxlY3RCYXRjaD1udWxsO3ZhciBiPWMuZHJhZ21vZGUsdz0ibGFzc28iPT09Ynx8InNlbGVjdCI9PT1iLGs9Yy5jbGlja21vZGUuaW5kZXhPZigic2VsZWN0Iik+LTE7Zm9yKG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIFQ9cltvXVswXSxBPVQudHJhY2UsTT1ULnQsUz1NLmluZGV4LEU9QS5fbGVuZ3RoLEM9TS54LEw9TS55O2lmKEEuc2VsZWN0ZWRwb2ludHN8fHd8fGspe2lmKHd8fCh3PSEwKSxoLnNlbGVjdEJhdGNofHwoaC5zZWxlY3RCYXRjaD1bXSxoLnVuc2VsZWN0QmF0Y2g9W10pLEEuc2VsZWN0ZWRwb2ludHMpe3ZhciBPPWguc2VsZWN0QmF0Y2hbU109dS5zZWxJbmRpY2VzMnNlbFBvaW50cyhBKSxJPXt9O2ZvcihzPTA7czxPLmxlbmd0aDtzKyspSVtPW3NdXT0xO3ZhciBEPVtdO2ZvcihzPTA7czxFO3MrKylJW3NdfHxELnB1c2gocyk7aC51bnNlbGVjdEJhdGNoW1NdPUR9dmFyIFA9TS54cHg9bmV3IEFycmF5KEUpLFI9TS55cHg9bmV3IEFycmF5KEUpO2ZvcihzPTA7czxFO3MrKylQW3NdPXAuYzJwKENbc10pLFJbc109ZC5jMnAoTFtzXSl9ZWxzZSBNLnhweD1NLnlweD1udWxsfXc/KGguc2VsZWN0MmR8fChoLnNlbGVjdDJkPW4oYy5fZ2xjYW52YXMuZGF0YSgpWzFdLnJlZ2wpKSxoLnNjYXR0ZXIyZCYmaC5zZWxlY3RCYXRjaCYmaC5zZWxlY3RCYXRjaC5sZW5ndGgmJmguc2NhdHRlcjJkLnVwZGF0ZShoLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBoLnNlbGVjdEJhdGNoW2VdP3Q6bnVsbH0pKSxoLnNlbGVjdDJkJiYoaC5zZWxlY3QyZC51cGRhdGUoaC5tYXJrZXJPcHRpb25zKSxoLnNlbGVjdDJkLnVwZGF0ZShoLm1hcmtlclNlbGVjdGVkT3B0aW9ucykpLGguZ2xUZXh0JiZyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9KCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e307Zy5oYXNUZXh0KGUpJiZ6KHQpfSkpOmguc2NhdHRlcjJkJiZoLnNjYXR0ZXIyZC51cGRhdGUoaC5tYXJrZXJPcHRpb25zKTt2YXIgRj17dmlld3BvcnQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX3NpemUsaT10LndpZHRoLGE9dC5oZWlnaHQ7cmV0dXJuW24ubCtlLmRvbWFpblswXSpuLncsbi5iK3IuZG9tYWluWzBdKm4uaCxpLW4uci0oMS1lLmRvbWFpblsxXSkqbi53LGEtbi50LSgxLXIuZG9tYWluWzFdKSpuLmhdfShjLHAsZCkscmFuZ2U6WyhwLl9ybHx8cC5yYW5nZSlbMF0sKGQuX3JsfHxkLnJhbmdlKVswXSwocC5fcmx8fHAucmFuZ2UpWzFdLChkLl9ybHx8ZC5yYW5nZSlbMV1dfSxCPXUucmVwZWF0KEYsaC5jb3VudCk7aC5maWxsMmQmJmguZmlsbDJkLnVwZGF0ZShCKSxoLmxpbmUyZCYmaC5saW5lMmQudXBkYXRlKEIpLGguZXJyb3IyZCYmaC5lcnJvcjJkLnVwZGF0ZShCLmNvbmNhdChCKSksaC5zY2F0dGVyMmQmJmguc2NhdHRlcjJkLnVwZGF0ZShCKSxoLnNlbGVjdDJkJiZoLnNlbGVjdDJkLnVwZGF0ZShCKSxoLmdsVGV4dCYmaC5nbFRleHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwZGF0ZShGKX0pfWVsc2UgaC5pbml0KCl9fSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD10LmNkLGQ9cFswXS50LGc9cFswXS50cmFjZSx2PXQueGEsbT10LnlhLHk9ZC54LHg9ZC55LGI9di5jMnAoZSksXz1tLmMycChyKSx3PXQuZGlzdGFuY2U7aWYoZC50cmVlKXt2YXIgaz12LnAyYyhiLXcpLFQ9di5wMmMoYit3KSxBPW0ucDJjKF8tdyksTT1tLnAyYyhfK3cpO2k9IngiPT09bj9kLnRyZWUucmFuZ2UoTWF0aC5taW4oayxUKSxNYXRoLm1pbihtLl9ybFswXSxtLl9ybFsxXSksTWF0aC5tYXgoayxUKSxNYXRoLm1heChtLl9ybFswXSxtLl9ybFsxXSkpOmQudHJlZS5yYW5nZShNYXRoLm1pbihrLFQpLE1hdGgubWluKEEsTSksTWF0aC5tYXgoayxUKSxNYXRoLm1heChBLE0pKX1lbHNle2lmKCFkLmlkcylyZXR1cm5bdF07aT1kLmlkc312YXIgUz13O2lmKCJ4Ij09PW4pZm9yKGw9MDtsPGkubGVuZ3RoO2wrKylvPXlbaVtsXV0sKGM9TWF0aC5hYnModi5jMnAobyktYikpPFMmJihTPWMsdT1tLmMycCh4W2lbbF1dKS1fLGg9TWF0aC5zcXJ0KGMqYyt1KnUpLGE9aVtsXSk7ZWxzZSBmb3IobD0wO2w8aS5sZW5ndGg7bCsrKW89eVtpW2xdXSxzPXhbaVtsXV0sYz12LmMycChvKS1iLHU9bS5jMnAocyktXywoZj1NYXRoLnNxcnQoYypjK3UqdSkpPFMmJihTPWg9ZixhPWlbbF0pO3JldHVybiB0LmluZGV4PWEsdC5kaXN0YW5jZT1TLHQuZHh5PWgsdm9pZCAwPT09YT9bdF06KEwodCx5LHgsZyksW3RdKX0sc2VsZWN0UG9pbnRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jZCxuPVtdLGk9clswXS50cmFjZSxhPXJbMF0udCxvPWkuX2xlbmd0aCxsPWEueCxjPWEueSx1PWEuX3NjZW5lO2lmKCF1KXJldHVybiBuO3ZhciBmPWcuaGFzVGV4dChpKSxoPWcuaGFzTWFya2VycyhpKSxwPSFoJiYhZjtpZighMCE9PWkudmlzaWJsZXx8cClyZXR1cm4gbjt2YXIgZCx2PW51bGwsbT1udWxsO2lmKCExPT09ZXx8ZS5kZWdlbmVyYXRlKW09cyhvKTtlbHNlIGZvcih2PVtdLG09W10sZD0wO2Q8bztkKyspZS5jb250YWlucyhbYS54cHhbZF0sYS55cHhbZF1dLCExLGQsdCk/KHYucHVzaChkKSxuLnB1c2goe3BvaW50TnVtYmVyOmQseDpsW2RdLHk6Y1tkXX0pKTptLnB1c2goZCk7aWYodS5zZWxlY3RCYXRjaHx8KHUuc2VsZWN0QmF0Y2g9W10sdS51bnNlbGVjdEJhdGNoPVtdKSwhdS5zZWxlY3RCYXRjaFthLmluZGV4XSl7Zm9yKGQ9MDtkPHUuY291bnQ7ZCsrKXUuc2VsZWN0QmF0Y2hbZF09W10sdS51bnNlbGVjdEJhdGNoW2RdPVtdO2gmJnUuc2NhdHRlcjJkLnVwZGF0ZSh1Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zKX1yZXR1cm4gdS5zZWxlY3RCYXRjaFthLmluZGV4XT12LHUudW5zZWxlY3RCYXRjaFthLmluZGV4XT1tLGYmJnoociksbn0sc2NlbmVVcGRhdGU6QyxjYWxjSG92ZXI6TCxtZXRhOnt9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjY3NiwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6NzEzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NzQ3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vc2NhdHRlci9jYWxjIjoxMDUyLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTA1NCwiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0cyI6MTA1NywiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTksIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDYxLCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzIjoxMDY3LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTA2OSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiLi9hdHRyaWJ1dGVzIjoxMTAwLCIuL2NvbnN0YW50cyI6MTEwMSwiLi9jb252ZXJ0IjoxMTAyLCIuL2RlZmF1bHRzIjoxMTAzLCJhcnJheS1yYW5nZSI6NTcsImdsLXRleHQiOjMxMywicG9pbnQtY2x1c3RlciI6NDYxLCJyZWdsLWVycm9yMmQiOjQ4MiwicmVnbC1saW5lMmQiOjQ4MywicmVnbC1zY2F0dGVyMmQiOjQ4NH1dLDExMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyIpLGE9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsZj1pLmxpbmUsaD1pLm1hcmtlcjtlLmV4cG9ydHM9dSh7bG9uOmkubG9uLGxhdDppLmxhdCxtb2RlOmMoe30sYS5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6Yyh7fSxhLnRleHQse30pLGhvdmVydGV4dDpjKHt9LGEuaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpmLmNvbG9yLHdpZHRoOmYud2lkdGh9LGNvbm5lY3RnYXBzOmEuY29ubmVjdGdhcHMsbWFya2VyOntzeW1ib2w6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxvcGFjaXR5Omgub3BhY2l0eSxzaXplOmguc2l6ZSxzaXplcmVmOmguc2l6ZXJlZixzaXplbWluOmguc2l6ZW1pbixzaXplbW9kZTpoLnNpemVtb2RlLGNvbG9yOmguY29sb3IsY29sb3JzY2FsZTpoLmNvbG9yc2NhbGUsY2F1dG86aC5jYXV0byxjbWF4OmguY21heCxjbWluOmguY21pbixjbWlkOmguY21pZCxhdXRvY29sb3JzY2FsZTpoLmF1dG9jb2xvcnNjYWxlLHJldmVyc2VzY2FsZTpoLnJldmVyc2VzY2FsZSxzaG93c2NhbGU6aC5zaG93c2NhbGUsY29sb3JiYXI6bH0sZmlsbDppLmZpbGwsZmlsbGNvbG9yOmEuZmlsbGNvbG9yLHRleHRmb250Om8ubGF5ZXJzLnN5bWJvbC50ZXh0Zm9udCx0ZXh0cG9zaXRpb246by5sYXllcnMuc3ltYm9sLnRleHRwb3NpdGlvbixzZWxlY3RlZDp7bWFya2VyOmEuc2VsZWN0ZWQubWFya2VyfSx1bnNlbGVjdGVkOnttYXJrZXI6YS51bnNlbGVjdGVkLm1hcmtlcn0saG92ZXJpbmZvOmMoe30scy5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjgwNiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxLCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEwOTF9XSwxMTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIiksdT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksZj10KCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiKTtmdW5jdGlvbiBoKCl7cmV0dXJue2dlb2pzb246by5tYWtlQmxhbmsoKSxsYXlvdXQ6e3Zpc2liaWxpdHk6Im5vbmUifSxwYWludDp7fX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gaS5pc0FycmF5T3JUeXBlZEFycmF5KHQpP2Z1bmN0aW9uKHQpe3JldHVybiB0fTp0P2Z1bmN0aW9uKCl7cmV0dXJuIHR9OmR9ZnVuY3Rpb24gZCgpe3JldHVybiIifWZ1bmN0aW9uIGcodCl7cmV0dXJuIHRbMF09PT1hfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyPXRbMF0udHJhY2UsYT0hMD09PXIudmlzaWJsZSx2PSJub25lIiE9PXIuZmlsbCxtPXUuaGFzTGluZXMocikseT11Lmhhc01hcmtlcnMocikseD11Lmhhc1RleHQociksYj15JiYiY2lyY2xlIj09PXIubWFya2VyLnN5bWJvbCxfPXkmJiJjaXJjbGUiIT09ci5tYXJrZXIuc3ltYm9sLHc9aCgpLGs9aCgpLFQ9aCgpLEE9aCgpLE09e2ZpbGw6dyxsaW5lOmssY2lyY2xlOlQsc3ltYm9sOkF9O2lmKCFhKXJldHVybiBNO2lmKCh2fHxtKSYmKGU9by5jYWxjVHJhY2VUb0xpbmVDb29yZHModCkpLHYmJih3Lmdlb2pzb249by5tYWtlUG9seWdvbihlKSx3LmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixpLmV4dGVuZEZsYXQody5wYWludCx7ImZpbGwtY29sb3IiOnIuZmlsbGNvbG9yfSkpLG0mJihrLmdlb2pzb249by5tYWtlTGluZShlKSxrLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixpLmV4dGVuZEZsYXQoay5wYWludCx7ImxpbmUtd2lkdGgiOnIubGluZS53aWR0aCwibGluZS1jb2xvciI6ci5saW5lLmNvbG9yLCJsaW5lLW9wYWNpdHkiOnIub3BhY2l0eX0pKSxiKXt2YXIgUz1mdW5jdGlvbih0KXt2YXIgZSxyLGEsbyx1PXRbMF0udHJhY2UsZj11Lm1hcmtlcixoPXUuc2VsZWN0ZWRwb2ludHMscD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5jb2xvciksZD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5zaXplKSx2PWkuaXNBcnJheU9yVHlwZWRBcnJheShmLm9wYWNpdHkpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHUub3BhY2l0eSp0fXAmJihyPXMuaGFzQ29sb3JzY2FsZSh1LCJtYXJrZXIiKT9zLm1ha2VDb2xvclNjYWxlRnVuYyhzLmV4dHJhY3RTY2FsZShmLHtjTGV0dGVyOiJjIn0pKTppLmlkZW50aXR5KTtkJiYoYT1jKHUpKTt2JiYobz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpPytpLmNvbnN0cmFpbih0LDAsMSk6MDtyZXR1cm4gbShlKX0pO3ZhciB5LHg9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGI9dFtlXSxfPWIubG9ubGF0O2lmKCFnKF8pKXt2YXIgdz17fTtyJiYody5tY2M9Yi5tY2M9cihiLm1jKSksYSYmKHcubXJjPWIubXJjPWEoYi5tcykpLG8mJih3Lm1vPW8oYi5tbykpLGgmJih3LnNlbGVjdGVkPWIuc2VsZWN0ZWR8fDApLHgucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpffSxwcm9wZXJ0aWVzOnd9KX19aWYoaClmb3IoeT1sLm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnModSksZT0wO2U8eC5sZW5ndGg7ZSsrKXt2YXIgaz14W2VdLnByb3BlcnRpZXM7eS5zZWxlY3RlZE9wYWNpdHlGbiYmKGsubW89bSh5LnNlbGVjdGVkT3BhY2l0eUZuKGspKSkseS5zZWxlY3RlZENvbG9yRm4mJihrLm1jYz15LnNlbGVjdGVkQ29sb3JGbihrKSkseS5zZWxlY3RlZFNpemVGbiYmKGsubXJjPXkuc2VsZWN0ZWRTaXplRm4oaykpfXJldHVybntnZW9qc29uOnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6eH0sbWNjOnB8fHkmJnkuc2VsZWN0ZWRDb2xvckZuP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1jYyJ9OmYuY29sb3IsbXJjOmR8fHkmJnkuc2VsZWN0ZWRTaXplRm4/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibXJjIn06KFQ9Zi5zaXplLFQvMiksbW86dnx8eSYmeS5zZWxlY3RlZE9wYWNpdHlGbj97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9Om0oZi5vcGFjaXR5KX07dmFyIFR9KHQpO1QuZ2VvanNvbj1TLmdlb2pzb24sVC5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaS5leHRlbmRGbGF0KFQucGFpbnQseyJjaXJjbGUtY29sb3IiOlMubWNjLCJjaXJjbGUtcmFkaXVzIjpTLm1yYywiY2lyY2xlLW9wYWNpdHkiOlMubW99KX1pZigoX3x8eCkmJihBLmdlb2pzb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0udHJhY2Uscj0oZS5tYXJrZXJ8fHt9KS5zeW1ib2wsbj1lLnRleHQsaT0iY2lyY2xlIiE9PXI/cChyKTpkLGE9dS5oYXNUZXh0KGUpP3Aobik6ZCxvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtnKGwubG9ubGF0KXx8by5wdXNoKHt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOmwubG9ubGF0fSxwcm9wZXJ0aWVzOntzeW1ib2w6aShsLm14KSx0ZXh0OmEobC50eCl9fSl9cmV0dXJue3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpvfX0odCksaS5leHRlbmRGbGF0KEEubGF5b3V0LHt2aXNpYmlsaXR5OiJ2aXNpYmxlIiwiaWNvbi1pbWFnZSI6IntzeW1ib2x9LTE1IiwidGV4dC1maWVsZCI6Int0ZXh0fSJ9KSxfJiYoaS5leHRlbmRGbGF0KEEubGF5b3V0LHsiaWNvbi1zaXplIjpyLm1hcmtlci5zaXplLzEwfSksaS5leHRlbmRGbGF0KEEucGFpbnQseyJpY29uLW9wYWNpdHkiOnIub3BhY2l0eSpyLm1hcmtlci5vcGFjaXR5LCJpY29uLWNvbG9yIjpyLm1hcmtlci5jb2xvcn0pKSx4KSl7dmFyIEU9KHIubWFya2VyfHx7fSkuc2l6ZSxDPWYoci50ZXh0cG9zaXRpb24sRSk7aS5leHRlbmRGbGF0KEEubGF5b3V0LHsidGV4dC1zaXplIjpyLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjpDLmFuY2hvciwidGV4dC1vZmZzZXQiOkMub2Zmc2V0fSksaS5leHRlbmRGbGF0KEEucGFpbnQseyJ0ZXh0LWNvbG9yIjpyLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOnIub3BhY2l0eX0pfXJldHVybiBNfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjU4OSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo2OTQsIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0cyI6ODAzLCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTA2OCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDExMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWlmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKCJsb24iKXx8W10saT1yKCJsYXQiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCk7cmV0dXJuIGUuX2xlbmd0aD1hLGF9KDAsZSxmKSl7aWYoZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJtb2RlIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxmLHtub0Rhc2g6ITB9KSxmKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkpe2EodCxlLHIsdSxmLHtub0xpbmU6ITB9KTt2YXIgaD1lLm1hcmtlcjsiY2lyY2xlIiE9PWguc3ltYm9sJiYobi5pc0FycmF5T3JUeXBlZEFycmF5KGguc2l6ZSkmJihoLnNpemU9aC5zaXplWzBdKSxuLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5jb2xvcikmJihoLmNvbG9yPWguY29sb3JbMF0pKX1pLmhhc1RleHQoZSkmJnModCxlLHUsZix7bm9TZWxlY3Q6ITB9KSxmKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGYpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwNjAsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTA2NCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNzAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA3NiwiLi9hdHRyaWJ1dGVzIjoxMTA1fV0sMTEwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdH19LHt9XSwxMTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxvPXQoIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0Iikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9dC5jZCxjPWxbMF0udHJhY2UsdT10LnhhLGY9dC55YSxoPXQuc3VicGxvdCxwPTM2MCooZT49MD9NYXRoLmZsb29yKChlKzE4MCkvMzYwKTpNYXRoLmNlaWwoKGUtMTgwKS8zNjApKSxkPWUtcDtpZihuLmdldENsb3Nlc3QobCxmdW5jdGlvbih0KXt2YXIgZT10LmxvbmxhdDtpZihlWzBdPT09cylyZXR1cm4gMS8wO3ZhciBuPWkubW9kSGFsZihlWzBdLDM2MCksYT1lWzFdLG89aC5wcm9qZWN0KFtuLGFdKSxsPW8ueC11LmMycChbZCxhXSksYz1vLnktZi5jMnAoW24scl0pLHA9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChsKmwrYypjKS1wLDEtMy9wKX0sdCksITEhPT10LmluZGV4KXt2YXIgZz1sW3QuaW5kZXhdLHY9Zy5sb25sYXQsbT1baS5tb2RIYWxmKHZbMF0sMzYwKStwLHZbMV1dLHk9dS5jMnAobSkseD1mLmMycChtKSxiPWcubXJjfHwxO3JldHVybiB0LngwPXktYix0LngxPXkrYix0LnkwPXgtYix0LnkxPXgrYix0LmNvbG9yPWEoYyxnKSx0LmV4dHJhVGV4dD1mdW5jdGlvbih0LGUscil7aWYodC5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgbj0oZS5oaXx8dC5ob3ZlcmluZm8pLnNwbGl0KCIrIiksaT0tMSE9PW4uaW5kZXhPZigiYWxsIiksYT0tMSE9PW4uaW5kZXhPZigibG9uIikscz0tMSE9PW4uaW5kZXhPZigibGF0IiksbD1lLmxvbmxhdCxjPVtdO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQrIlx4YjAifWl8fGEmJnM/Yy5wdXNoKCIoIit1KGxbMF0pKyIsICIrdShsWzFdKSsiKSIpOmE/Yy5wdXNoKHIubG9uK3UobFswXSkpOnMmJmMucHVzaChyLmxhdCt1KGxbMV0pKTsoaXx8LTEhPT1uLmluZGV4T2YoInRleHQiKSkmJm8oZSx0LGMpO3JldHVybiBjLmpvaW4oIjxicj4iKX0oYyxnLGxbMF0udC5sYWJlbHMpLHQuaG92ZXJ0ZW1wbGF0ZT1jLmhvdmVydGVtcGxhdGUsW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjE2LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCI6MTA1OSwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjEwNjF9XSwxMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbi5jYWxjPXQoIi4uL3NjYXR0ZXJnZW8vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLmV2ZW50RGF0YT10KCIuL2V2ZW50X2RhdGEiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4uc3R5bGU9ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZShlKX0sbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzY2F0dGVybWFwYm94IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLG4uY2F0ZWdvcmllcz1bIm1hcGJveCIsImdsIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVybGlrZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9tYXBib3giOjgwNCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwNjksIi4uL3NjYXR0ZXJnZW8vY2FsYyI6MTA5MiwiLi9hdHRyaWJ1dGVzIjoxMTA1LCIuL2RlZmF1bHRzIjoxMTA3LCIuL2V2ZW50X2RhdGEiOjExMDgsIi4vaG92ZXIiOjExMDksIi4vcGxvdCI6MTExMSwiLi9zZWxlY3QiOjExMTJ9XSwxMTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29udmVydCIpO2Z1bmN0aW9uIGkodCxlKXt0aGlzLnN1YnBsb3Q9dCx0aGlzLnVpZD1lLHRoaXMuc291cmNlSWRzPXtmaWxsOmUrIi1zb3VyY2UtZmlsbCIsbGluZTplKyItc291cmNlLWxpbmUiLGNpcmNsZTplKyItc291cmNlLWNpcmNsZSIsc3ltYm9sOmUrIi1zb3VyY2Utc3ltYm9sIn0sdGhpcy5sYXllcklkcz17ZmlsbDplKyItbGF5ZXItZmlsbCIsbGluZTplKyItbGF5ZXItbGluZSIsY2lyY2xlOmUrIi1sYXllci1jaXJjbGUiLHN5bWJvbDplKyItbGF5ZXItc3ltYm9sIn0sdGhpcy5vcmRlcj1bImZpbGwiLCJsaW5lIiwiY2lyY2xlIiwic3ltYm9sIl19dmFyIGE9aS5wcm90b3R5cGU7YS5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXt0aGlzLnN1YnBsb3QubWFwLmFkZFNvdXJjZSh0aGlzLnNvdXJjZUlkc1t0XSx7dHlwZToiZ2VvanNvbiIsZGF0YTplLmdlb2pzb259KX0sYS5zZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0pLnNldERhdGEoZS5nZW9qc29uKX0sYS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuYWRkTGF5ZXIoe3R5cGU6dCxpZDp0aGlzLmxheWVySWRzW3RdLHNvdXJjZTp0aGlzLnNvdXJjZUlkc1t0XSxsYXlvdXQ6ZS5sYXlvdXQscGFpbnQ6ZS5wYWludH0pfSxhLnVwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdWJwbG90LHI9bih0KSxpPTA7aTx0aGlzLm9yZGVyLmxlbmd0aDtpKyspe3ZhciBhPXRoaXMub3JkZXJbaV0sbz1yW2FdO2Uuc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW2FdLCJzZXRMYXlvdXRQcm9wZXJ0eSIsby5sYXlvdXQpLCJ2aXNpYmxlIj09PW8ubGF5b3V0LnZpc2liaWxpdHkmJih0aGlzLnNldFNvdXJjZURhdGEoYSxvKSxlLnNldE9wdGlvbnModGhpcy5sYXllcklkc1thXSwic2V0UGFpbnRQcm9wZXJ0eSIsby5wYWludCkpfXRbMF0udHJhY2UuX2dsVHJhY2U9dGhpc30sYS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT0wO2U8dGhpcy5vcmRlci5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLm9yZGVyW2VdO3QucmVtb3ZlTGF5ZXIodGhpcy5sYXllcklkc1tyXSksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZHNbcl0pfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBpKHQsZVswXS50cmFjZS51aWQpLGE9bihlKSxvPTA7bzxyLm9yZGVyLmxlbmd0aDtvKyspe3ZhciBzPXIub3JkZXJbb10sbD1hW3NdO3IuYWRkU291cmNlKHMsbCksci5hZGRMYXllcihzLGwpfXJldHVybiBlWzBdLnRyYWNlLl9nbFRyYWNlPXIscn19LHsiLi9jb252ZXJ0IjoxMTA2fV0sMTExMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbz10LmNkLHM9dC54YXhpcyxsPXQueWF4aXMsYz1bXSx1PW9bMF0udHJhY2U7aWYoIWkuaGFzTWFya2Vycyh1KSlyZXR1cm5bXTtpZighMT09PWUpZm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylvW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8by5sZW5ndGg7cisrKXt2YXIgZj1vW3JdLGg9Zi5sb25sYXQ7aWYoaFswXSE9PWEpe3ZhciBwPVtuLm1vZEhhbGYoaFswXSwzNjApLGhbMV1dLGQ9W3MuYzJwKHApLGwuYzJwKHApXTtlLmNvbnRhaW5zKGQsbnVsbCxyLHQpPyhjLnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmhbMF0sbGF0OmhbMV19KSxmLnNlbGVjdGVkPTEpOmYuc2VsZWN0ZWQ9MH19cmV0dXJuIGN9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzV9XSwxMTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9YS5saW5lO2UuZXhwb3J0cz17bW9kZTphLm1vZGUscjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx0aGV0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxyMDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkcjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSx0aGV0YTA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHRoZXRhOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0sdGhldGF1bml0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYW5zIiwiZGVncmVlcyIsImdyYWRpYW5zIl0sZGZsdDoiZGVncmVlcyIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx0ZXh0OmEudGV4dCxob3ZlcnRleHQ6YS5ob3ZlcnRleHQsbGluZTp7Y29sb3I6cy5jb2xvcix3aWR0aDpzLndpZHRoLGRhc2g6cy5kYXNoLHNoYXBlOmkoe30scy5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6cy5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLG1hcmtlcjphLm1hcmtlcixjbGlwb25heGlzOmkoe30sYS5jbGlwb25heGlzLHtkZmx0OiExfSksdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLHRleHRmb250OmEudGV4dGZvbnQsZmlsbDppKHt9LGEuZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdLGRmbHQ6Im5vbmUifSksZmlsbGNvbG9yOmEuZmlsbGNvbG9yLGhvdmVyaW5mbzppKHt9LG8uaG92ZXJpbmZvLHtmbGFnczpbInIiLCJ0aGV0YSIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOmEuaG92ZXJvbixob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDphLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6YS51bnNlbGVjdGVkfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sMTExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHM9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxjPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHU9ZS5zdWJwbG90LGY9clt1XS5yYWRpYWxheGlzLGg9clt1XS5hbmd1bGFyYXhpcyxwPWYubWFrZUNhbGNkYXRhKGUsInIiKSxkPWgubWFrZUNhbGNkYXRhKGUsInRoZXRhIiksZz1lLl9sZW5ndGgsdj1uZXcgQXJyYXkoZyksbT0wO208ZzttKyspe3ZhciB5PXBbbV0seD1kW21dLGI9dlttXT17fTtuKHkpJiZuKHgpPyhiLnI9eSxiLnRoZXRhPXgpOmIucj1pfXZhciBfPWMoZSxnKTtyZXR1cm4gZS5fZXh0cmVtZXMueD1hLmZpbmRFeHRyZW1lcyhmLHAse3BwYWQ6X30pLG8odCxlKSxzKHYsZSksbCh2LGUpLHZ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNTAsIi4uL3NjYXR0ZXIvY2FsYyI6MTA1MiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTA1MywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSwxMTE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksZj10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpLGE9bigiciIpLG89bigidGhldGEiKTtpZihhKW8/aT1NYXRoLm1pbihhLmxlbmd0aCxvLmxlbmd0aCk6KGk9YS5sZW5ndGgsbigidGhldGEwIiksbigiZHRoZXRhIikpO2Vsc2V7aWYoIW8pcmV0dXJuIDA7aT1lLnRoZXRhLmxlbmd0aCxuKCJyMCIpLG4oImRyIil9cmV0dXJuIGUuX2xlbmd0aD1pLGl9ZS5leHBvcnRzPXtoYW5kbGVSVGhldGFEZWZhdWx0czpoLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX12YXIgZz1oKDAsZSwwLGQpO2lmKGcpe2QoInRoZXRhdW5pdCIpLGQoIm1vZGUiLGc8dT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksZCgidGV4dCIpLGQoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJmQoImhvdmVydGVtcGxhdGUiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscixwLGQpLHModCxlLGQpLGQoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscixwLGQse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiZsKHQsZSxwLGQpO3ZhciB2PVtdOyhpLmhhc01hcmtlcnMoZSl8fGkuaGFzVGV4dChlKSkmJihkKCJjbGlwb25heGlzIiksZCgibWFya2VyLm1heGRpc3BsYXllZCIpLHYucHVzaCgicG9pbnRzIikpLGQoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJihjKHQsZSxyLGQpLGkuaGFzTGluZXMoZSl8fHModCxlLGQpKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHYucHVzaCgiZmlsbHMiKSxkKCJob3Zlcm9uIix2LmpvaW4oIisiKXx8InBvaW50cyIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGQpfWVsc2UgZS52aXNpYmxlPSExfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDU1LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA2MCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDY0LCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEwNjYsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDcwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDc1LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNzYsIi4vYXR0cmlidXRlcyI6MTExM31dLDExMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIG8odCxlLHIsbil7dmFyIG89ci5yYWRpYWxBeGlzLHM9ci5hbmd1bGFyQXhpcztvLl9ob3ZlcnRpdGxlPSJyIixzLl9ob3ZlcnRpdGxlPSJcdTAzYjgiO3ZhciBsPXQuaGl8fGUuaG92ZXJpbmZvLGM9W107ZnVuY3Rpb24gdSh0LGUpe2MucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIraS50aWNrVGV4dCh0LGUsImhvdmVyIikudGV4dCl9aWYoIWUuaG92ZXJ0ZW1wbGF0ZSl7dmFyIGY9bC5zcGxpdCgiKyIpO2lmKC0xIT09Zi5pbmRleE9mKCJhbGwiKSYmKGY9WyJyIiwidGhldGEiLCJ0ZXh0Il0pLC0xIT09Zi5pbmRleE9mKCJyIikmJnUobyxvLmMybCh0LnIpKSwtMSE9PWYuaW5kZXhPZigidGhldGEiKSl7dmFyIGg9dC50aGV0YTt1KHMsImRlZ3JlZXMiPT09cy50aGV0YXVuaXQ/YS5yYWQyZGVnKGgpOmgpfS0xIT09Zi5pbmRleE9mKCJ0ZXh0IikmJm4udGV4dCYmKGMucHVzaChuLnRleHQpLGRlbGV0ZSBuLnRleHQpLG4uZXh0cmFUZXh0PWMuam9pbigiPGJyPiIpfX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxlLHIsaSk7aWYoYSYmITEhPT1hWzBdLmluZGV4KXt2YXIgcz1hWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpcmV0dXJuIGE7dmFyIGw9dC5zdWJwbG90LGM9cy5jZFtzLmluZGV4XSx1PXMudHJhY2U7aWYobC5pc1B0SW5zaWRlKGMpKXJldHVybiBzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwLG8oYyx1LGwscykscy5ob3ZlcnRlbXBsYXRlPXUuaG92ZXJ0ZW1wbGF0ZSxhfX0sbWFrZUhvdmVyUG9pbnRUZXh0Om99fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9zY2F0dGVyL2hvdmVyIjoxMDYyfV0sMTExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVycG9sYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo4MTMsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuLi9zY2F0dGVyL3NlbGVjdCI6MTA3MiwiLi4vc2NhdHRlci9zdHlsZSI6MTA3NCwiLi9hdHRyaWJ1dGVzIjoxMTEzLCIuL2NhbGMiOjExMTQsIi4vZGVmYXVsdHMiOjExMTUsIi4vaG92ZXIiOjExMTYsIi4vcGxvdCI6MTExOH1dLDExMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIiksbz17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6ZS5mcmFtZXdvcmssbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbH0scz1lLnJhZGlhbEF4aXMsbD1lLmFuZ3VsYXJBeGlzLGM9MDtjPHIubGVuZ3RoO2MrKylmb3IodmFyIHU9cltjXSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBoPXVbZl0scD1oLnI7aWYocD09PWkpaC54PWgueT1pO2Vsc2V7dmFyIGQ9cy5jMmcocCksZz1sLmMyZyhoLnRoZXRhKTtoLng9ZCpNYXRoLmNvcyhnKSxoLnk9ZCpNYXRoLnNpbihnKX19bih0LG8scixhKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi9zY2F0dGVyL3Bsb3QiOjEwNzF9XSwxMTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17bW9kZTpuLm1vZGUscjpuLnIsdGhldGE6bi50aGV0YSxyMDpuLnIwLGRyOm4uZHIsdGhldGEwOm4udGhldGEwLGR0aGV0YTpuLmR0aGV0YSx0aGV0YXVuaXQ6bi50aGV0YXVuaXQsdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlLGxpbmU6aS5saW5lLGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsbWFya2VyOmkubWFya2VyLGZpbGw6aS5maWxsLGZpbGxjb2xvcjppLmZpbGxjb2xvcix0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6aS50ZXh0Zm9udCxob3ZlcmluZm86bi5ob3ZlcmluZm8sc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZH19LHsiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjExMDAsIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxMTEzfV0sMTEyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKS5QVFNfTElORVNPTkxZLGY9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX12YXIgZD1hKHQsZSxoLHApO2Q/KHAoInRoZXRhdW5pdCIpLHAoIm1vZGUiLGQ8dT8ibGluZXMrbWFya2VycyI6ImxpbmVzIikscCgidGV4dCIpLHAoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJnAoImhvdmVydGVtcGxhdGUiKSxpLmhhc0xpbmVzKGUpJiYocyh0LGUscixoLHApLHAoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmbyh0LGUscixoLHApLGkuaGFzVGV4dChlKSYmbCh0LGUsaCxwKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZjKHQsZSxyLHApLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTA1NSwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwNjAsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTA2NCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNzAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA3NiwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIjoxMTE1LCIuL2F0dHJpYnV0ZXMiOjExMTl9XSwxMTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBvaW50LWNsdXN0ZXIiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi9zY2F0dGVyZ2wiKSxvPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIikscz10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxsPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IiksYz10KCIuLi8uLi9saWIiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZj10KCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiKS5tYWtlSG92ZXJQb2ludFRleHQsaD10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJwb2xhcmdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9wb2xhciIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJwb2xhciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUuc3VicGxvdCxpPXJbbl0ucmFkaWFsYXhpcyxhPXJbbl0uYW5ndWxhcmF4aXMsYz1pLm1ha2VDYWxjZGF0YShlLCJyIiksZj1hLm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLHA9ZS5fbGVuZ3RoLGQ9e307cDxjLmxlbmd0aCYmKGM9Yy5zbGljZSgwLHApKSxwPGYubGVuZ3RoJiYoZj1mLnNsaWNlKDAscCkpLGQucj1jLGQudGhldGE9ZixvKHQsZSk7dmFyIGcsdj1kLm9wdHM9bC5zdHlsZSh0LGUpO3JldHVybiBwPGg/Zz1zKGUscCk6di5tYXJrZXImJihnPTIqKHYubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KHYubWFya2VyLnNpemUsMykpKSxlLl9leHRyZW1lcy54PXUuZmluZEV4dHJlbWVzKGksYyx7cHBhZDpnfSksW3t4OiExLHk6ITEsdDpkLHRyYWNlOmV9XX0scGxvdDpmdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciBvPWUucmFkaWFsQXhpcyxzPWUuYW5ndWxhckF4aXMsdT1hLnNjZW5lVXBkYXRlKHQsZSk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihyKXtpZihyJiZyWzBdJiZyWzBdLnRyYWNlKXt2YXIgYSxmPXJbMF0scD1mLnRyYWNlLGQ9Zi50LGc9cC5fbGVuZ3RoLHY9ZC5yLG09ZC50aGV0YSx5PWQub3B0cyx4PXYuc2xpY2UoKSxiPW0uc2xpY2UoKTtmb3IoYT0wO2E8di5sZW5ndGg7YSsrKWUuaXNQdEluc2lkZSh7cjp2W2FdLHRoZXRhOm1bYV19KXx8KHhbYV09TmFOLGJbYV09TmFOKTt2YXIgXz1uZXcgQXJyYXkoMipnKSx3PUFycmF5KGcpLGs9QXJyYXkoZyk7Zm9yKGE9MDthPGc7YSsrKXt2YXIgVCxBLE09eFthXTtpZihpKE0pKXt2YXIgUz1vLmMyZyhNKSxFPXMuYzJnKGJbYV0scC50aGV0YXVuaXQpO1Q9UypNYXRoLmNvcyhFKSxBPVMqTWF0aC5zaW4oRSl9ZWxzZSBUPUE9TmFOO3dbYV09X1syKmFdPVQsa1thXT1fWzIqYSsxXT1BfWQudHJlZT1uKF8pLHkubWFya2VyJiZnPj1oJiYoeS5tYXJrZXIuY2x1c3Rlcj1kLnRyZWUpLHkubWFya2VyJiYoeS5tYXJrZXJTZWwucG9zaXRpb25zPXkubWFya2VyVW5zZWwucG9zaXRpb25zPXkubWFya2VyLnBvc2l0aW9ucz1fKSx5LmxpbmUmJl8ubGVuZ3RoPjEmJmMuZXh0ZW5kRmxhdCh5LmxpbmUsbC5saW5lUG9zaXRpb25zKHQscCxfKSkseS50ZXh0JiYoYy5leHRlbmRGbGF0KHkudGV4dCx7cG9zaXRpb25zOl99LGwudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXIpKSxjLmV4dGVuZEZsYXQoeS50ZXh0U2VsLHtwb3NpdGlvbnM6X30sbC50ZXh0UG9zaXRpb24odCxwLHkudGV4dCx5Lm1hcmtlclNlbCkpLGMuZXh0ZW5kRmxhdCh5LnRleHRVbnNlbCx7cG9zaXRpb25zOl99LGwudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJVbnNlbCkpKSx5LmZpbGwmJiF1LmZpbGwyZCYmKHUuZmlsbDJkPSEwKSx5Lm1hcmtlciYmIXUuc2NhdHRlcjJkJiYodS5zY2F0dGVyMmQ9ITApLHkubGluZSYmIXUubGluZTJkJiYodS5saW5lMmQ9ITApLHkudGV4dCYmIXUuZ2xUZXh0JiYodS5nbFRleHQ9ITApLHUubGluZU9wdGlvbnMucHVzaCh5LmxpbmUpLHUuZmlsbE9wdGlvbnMucHVzaCh5LmZpbGwpLHUubWFya2VyT3B0aW9ucy5wdXNoKHkubWFya2VyKSx1Lm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyU2VsKSx1Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goeS5tYXJrZXJVbnNlbCksdS50ZXh0T3B0aW9ucy5wdXNoKHkudGV4dCksdS50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goeS50ZXh0U2VsKSx1LnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFVuc2VsKSxkLng9dyxkLnk9ayxkLnJhd3g9dyxkLnJhd3k9ayxkLnI9dixkLnRoZXRhPW0sZC5wb3NpdGlvbnM9XyxkLl9zY2VuZT11LGQuaW5kZXg9dS5jb3VudCx1LmNvdW50Kyt9fSksYS5wbG90KHQsZSxyKX19LGhvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuY2RbMF0udCxvPWkucixzPWkudGhldGEsbD1hLmhvdmVyUG9pbnRzKHQsZSxyLG4pO2lmKGwmJiExIT09bFswXS5pbmRleCl7dmFyIGM9bFswXTtpZih2b2lkIDA9PT1jLmluZGV4KXJldHVybiBsO3ZhciB1PXQuc3VicGxvdCxoPWMuY2RbYy5pbmRleF0scD1jLnRyYWNlO2lmKGgucj1vW2MuaW5kZXhdLGgudGhldGE9c1tjLmluZGV4XSx1LmlzUHRJbnNpZGUoaCkpcmV0dXJuIGMueExhYmVsVmFsPXZvaWQgMCxjLnlMYWJlbFZhbD12b2lkIDAsZihoLHAsdSxjKSxsfX0sc2VsZWN0UG9pbnRzOmEuc2VsZWN0UG9pbnRzLG1ldGE6e319fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi8uLi9wbG90cy9wb2xhciI6ODEzLCIuLi9zY2F0dGVyL2NhbGMiOjEwNTIsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMDU0LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTA2OSwiLi4vc2NhdHRlcmdsIjoxMTA0LCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjoxMTAxLCIuLi9zY2F0dGVyZ2wvY29udmVydCI6MTEwMiwiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIjoxMTE2LCIuL2F0dHJpYnV0ZXMiOjExMTksIi4vZGVmYXVsdHMiOjExMjAsImZhc3QtaXNudW1lcmljIjoyMjEsInBvaW50LWNsdXN0ZXIiOjQ2MX1dLDExMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT1pLm1hcmtlcixmPWkubGluZSxoPXUubGluZTtlLmV4cG9ydHM9e2E6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxjOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHN1bTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6ImNhbGMifSxtb2RlOmMoe30saS5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6Yyh7fSxpLnRleHQse30pLGhvdmVydGV4dDpjKHt9LGkuaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpmLmNvbG9yLHdpZHRoOmYud2lkdGgsZGFzaDpsLHNoYXBlOmMoe30sZi5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6Zi5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGNsaXBvbmF4aXM6aS5jbGlwb25heGlzLGZpbGw6Yyh7fSxpLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0pLGZpbGxjb2xvcjppLmZpbGxjb2xvcixtYXJrZXI6Yyh7c3ltYm9sOnUuc3ltYm9sLG9wYWNpdHk6dS5vcGFjaXR5LG1heGRpc3BsYXllZDp1Lm1heGRpc3BsYXllZCxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLGxpbmU6Yyh7d2lkdGg6aC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LG8oIm1hcmtlci5saW5lIikpLGdyYWRpZW50OnUuZ3JhZGllbnQsZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIiKSx7Y29sb3JiYXI6c30pLHRleHRmb250OmkudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHNlbGVjdGVkOmkuc2VsZWN0ZWQsdW5zZWxlY3RlZDppLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsiYSIsImIiLCJjIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246aS5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6bigpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjU5NywiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA1MX1dLDExMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbD1bImEiLCJiIiwiYyJdLGM9e2E6WyJiIiwiYyJdLGI6WyJhIiwiYyJdLGM6WyJhIiwiYiJdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsZz10Ll9mdWxsTGF5b3V0W2Uuc3VicGxvdF0uc3VtLHY9ZS5zdW18fGcsbT17YTplLmEsYjplLmIsYzplLmN9O2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspaWYoIW1bZj1sW3JdXSl7Zm9yKHA9bVtjW2ZdWzBdXSxkPW1bY1tmXVsxXV0saD1uZXcgQXJyYXkocC5sZW5ndGgpLHU9MDt1PHAubGVuZ3RoO3UrKyloW3VdPXYtcFt1XS1kW3VdO21bZl09aH12YXIgeSx4LGIsXyx3LGssVD1lLl9sZW5ndGgsQT1uZXcgQXJyYXkoVCk7Zm9yKHI9MDtyPFQ7cisrKXk9bS5hW3JdLHg9bS5iW3JdLGI9bS5jW3JdLG4oeSkmJm4oeCkmJm4oYik/KDEhPT0oXz1nLygoeT0reSkrKHg9K3gpKyhiPStiKSkpJiYoeSo9Xyx4Kj1fLGIqPV8pLGs9eSx3PWIteCxBW3JdPXt4OncseTprLGE6eSxiOngsYzpifSk6QVtyXT17eDohMSx5OiExfTtyZXR1cm4gcyhlLFQpLGkodCxlKSxhKEEsZSksbyhBLGUpLEF9fSx7Ii4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDUwLCIuLi9zY2F0dGVyL2NhbGMiOjEwNTIsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjEwNTMsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMDU0LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sMTEyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxmLHIsaSl9dmFyIGQsZz1wKCJhIiksdj1wKCJiIiksbT1wKCJjIik7aWYoZz8oZD1nLmxlbmd0aCx2PyhkPU1hdGgubWluKGQsdi5sZW5ndGgpLG0mJihkPU1hdGgubWluKGQsbS5sZW5ndGgpKSk6ZD1tP01hdGgubWluKGQsbS5sZW5ndGgpOjApOnYmJm0mJihkPU1hdGgubWluKHYubGVuZ3RoLG0ubGVuZ3RoKSksZCl7ZS5fbGVuZ3RoPWQscCgic3VtIikscCgidGV4dCIpLHAoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJnAoImhvdmVydGVtcGxhdGUiKSxwKCJtb2RlIixkPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsaCxwKSxsKHQsZSxwKSxwKCJjb25uZWN0Z2FwcyIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsaCxwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsaCxwKTt2YXIgeT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocCgiY2xpcG9uYXhpcyIpLHAoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSx5LnB1c2goInBvaW50cyIpKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYodSh0LGUscixwKSxhLmhhc0xpbmVzKGUpfHxsKHQsZSxwKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHx5LnB1c2goImZpbGxzIikscCgiaG92ZXJvbiIseS5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDU1LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA2MCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDY0LCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEwNjYsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDcwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDc1LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNzYsIi4vYXR0cmlidXRlcyI6MTEyMn1dLDExMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksbltpXSl7dmFyIGE9bltpXTt0LmE9YS5hLHQuYj1hLmIsdC5jPWEuY31lbHNlIHQuYT1lLmEsdC5iPWUuYix0LmM9ZS5jO3JldHVybiB0fX0se31dLDExMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvJiYhMSE9PW9bMF0uaW5kZXgpe3ZhciBzPW9bMF07aWYodm9pZCAwPT09cy5pbmRleCl7dmFyIGw9MS1zLnkwL3QueWEuX2xlbmd0aCxjPXQueGEuX2xlbmd0aCx1PWMqbC8yLGY9Yy11O3JldHVybiBzLngwPU1hdGgubWF4KE1hdGgubWluKHMueDAsZiksdSkscy54MT1NYXRoLm1heChNYXRoLm1pbihzLngxLGYpLHUpLG99dmFyIGg9cy5jZFtzLmluZGV4XTtzLmE9aC5hLHMuYj1oLmIscy5jPWguYyxzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1zLnN1YnBsb3QsZz1oLmhpfHxwLmhvdmVyaW5mbyx2PVtdO2lmKCFwLmhvdmVydGVtcGxhdGUpe3ZhciBtPWcuc3BsaXQoIisiKTstMSE9PW0uaW5kZXhPZigiYWxsIikmJihtPVsiYSIsImIiLCJjIl0pLC0xIT09bS5pbmRleE9mKCJhIikmJnkoZC5hYXhpcyxoLmEpLC0xIT09bS5pbmRleE9mKCJiIikmJnkoZC5iYXhpcyxoLmIpLC0xIT09bS5pbmRleE9mKCJjIikmJnkoZC5jYXhpcyxoLmMpfXJldHVybiBzLmV4dHJhVGV4dD12LmpvaW4oIjxicj4iKSxzLmhvdmVydGVtcGxhdGU9cC5ob3ZlcnRlbXBsYXRlLG99ZnVuY3Rpb24geSh0LGUpe3YucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIraS50aWNrVGV4dCh0LGUsImhvdmVyIikudGV4dCl9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9zY2F0dGVyL2hvdmVyIjoxMDYyfV0sMTEyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsbi5zdHlsZU9uU2VsZWN0PXQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4uc2VsZWN0UG9pbnRzPXQoIi4uL3NjYXR0ZXIvc2VsZWN0Iiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzY2F0dGVydGVybmFyeSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy90ZXJuYXJ5Iiksbi5jYXRlZ29yaWVzPVsidGVybmFyeSIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL3Rlcm5hcnkiOjgyNSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwNjksIi4uL3NjYXR0ZXIvc2VsZWN0IjoxMDcyLCIuLi9zY2F0dGVyL3N0eWxlIjoxMDc0LCIuL2F0dHJpYnV0ZXMiOjExMjIsIi4vY2FsYyI6MTEyMywiLi9kZWZhdWx0cyI6MTEyNCwiLi9ldmVudF9kYXRhIjoxMTI1LCIuL2hvdmVyIjoxMTI2LCIuL3Bsb3QiOjExMjh9XSwxMTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5wbG90Q29udGFpbmVyO2kuc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIGE9e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxwbG90OmksbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkUmVsYXRpdmU6bnVsbH0sbz1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpO24odCxhLHIsbyl9fSx7Ii4uL3NjYXR0ZXIvcGxvdCI6MTA3MX1dLDExMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuaWRSZWdleCxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9bi5tYXJrZXIsZj11LmxpbmUsaD1jKGkoIm1hcmtlci5saW5lIix7ZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7d2lkdGg6Yyh7fSxmLndpZHRoLHtlZGl0VHlwZToiY2FsYyJ9KSxlZGl0VHlwZToiY2FsYyJ9KSxwPWMoaSgibWFya2VyIikse3N5bWJvbDp1LnN5bWJvbCxzaXplOmMoe30sdS5zaXplLHtlZGl0VHlwZToibWFya2VyU2l6ZSJ9KSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLG9wYWNpdHk6dS5vcGFjaXR5LGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpoLGVkaXRUeXBlOiJjYWxjIn0pO2Z1bmN0aW9uIGQodCl7cmV0dXJue3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOnt2YWxUeXBlOiJzdWJwbG90aWQiLHJlZ2V4OnNbdF0sZWRpdFR5cGU6InBsb3QifX19cC5jb2xvci5lZGl0VHlwZT1wLmNtaW4uZWRpdFR5cGU9cC5jbWF4LmVkaXRUeXBlPSJzdHlsZSIsZS5leHBvcnRzPXtkaW1lbnNpb25zOmwoImRpbWVuc2lvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxheGlzOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1hdGNoZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0pLHRleHQ6Yyh7fSxvLnRleHQse30pLGhvdmVydGV4dDpjKHt9LG8uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOmEoKSxtYXJrZXI6cCx4YXhlczpkKCJ4IikseWF4ZXM6ZCgieSIpLGRpYWdvbmFsOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxzaG93dXBwZXJoYWxmOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xvd2VyaGFsZjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6by5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6ImNhbGMifSx1bnNlbGVjdGVkOnttYXJrZXI6by51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6by5vcGFjaXR5fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzU0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTEsIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIjoxMTAwfV0sMTEzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLWxpbmUyZCIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSxvPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLmdldEZyb21JZCxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuc2hvdWxkU2hvd1plcm9MaW5lLHU9InNwbG9tIjtmdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49ci5tYXRyaXhPcHRpb25zLmRhdGEubGVuZ3RoLGk9ZS5fdmlzaWJsZURpbXMsYT1yLnZpZXdPcHRzLnJhbmdlcz1uZXcgQXJyYXkobiksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGM9YVtvXT1uZXcgQXJyYXkoNCksdT1sKHQsZS5fZGlhZ1tzXVswXSk7dSYmKGNbMF09dS5yMmwodS5yYW5nZVswXSksY1syXT11LnIybCh1LnJhbmdlWzFdKSk7dmFyIGY9bCh0LGUuX2RpYWdbc11bMV0pO2YmJihjWzFdPWYucjJsKGYucmFuZ2VbMF0pLGNbM109Zi5yMmwoZi5yYW5nZVsxXSkpfXIuc2VsZWN0QmF0Y2g/ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0se3JhbmdlczphfSk6ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0pfWZ1bmN0aW9uIGgodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLGk9ZS5fc3Bsb21HcmlkO2l8fChpPWUuX3NwbG9tR3JpZD1uKHIpKSxpLnVwZGF0ZShmdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQsbj1yLl9zaXplLGk9WzAsMCxyLndpZHRoLHIuaGVpZ2h0XSxhPXt9O2Z1bmN0aW9uIG8odCxlLHIsbixvLHMpe3ZhciBsPWVbdCsiY29sb3IiXSxjPWVbdCsid2lkdGgiXSx1PVN0cmluZyhsK2MpO3UgaW4gYT9hW3VdLmRhdGEucHVzaChOYU4sTmFOLHIsbixvLHMpOmFbdV09e2RhdGE6W3IsbixvLHNdLGpvaW46InJlY3QiLHRoaWNrbmVzczpjLGNvbG9yOmwsdmlld3BvcnQ6aSxyYW5nZTppLG92ZXJsYXk6ITF9fWZvcihlIGluIHIuX3NwbG9tU3VicGxvdHMpe3ZhciBzLGwsdT1yLl9wbG90c1tlXSxmPXUueGF4aXMsaD11LnlheGlzLHA9Zi5fdmFscyxkPWguX3ZhbHMsZz1uLmIraC5kb21haW5bMF0qbi5oLHY9LWguX20sbT0tdipoLnIybChoLnJhbmdlWzBdLGguY2FsZW5kYXIpO2lmKGYuc2hvd2dyaWQpZm9yKGU9MDtlPHAubGVuZ3RoO2UrKylzPWYuX29mZnNldCtmLmwycChwW2VdLngpLG8oImdyaWQiLGYscyxnLHMsZytoLl9sZW5ndGgpO2lmKGguc2hvd2dyaWQpZm9yKGU9MDtlPGQubGVuZ3RoO2UrKylsPWcrbSt2KmRbZV0ueCxvKCJncmlkIixoLGYuX29mZnNldCxsLGYuX29mZnNldCtmLl9sZW5ndGgsbCk7Yyh0LGYsaCkmJihzPWYuX29mZnNldCtmLmwycCgwKSxvKCJ6ZXJvbGluZSIsZixzLGcscyxnK2guX2xlbmd0aCkpLGModCxoLGYpJiYobD1nK20rMCxvKCJ6ZXJvbGluZSIsaCxmLl9vZmZzZXQsbCxmLl9vZmZzZXQrZi5fbGVuZ3RoLGwpKX12YXIgeT1bXTtmb3IoZSBpbiBhKXkucHVzaChhW2VdKTtyZXR1cm4geX0odCkpfWUuZXhwb3J0cz17bmFtZTp1LGF0dHI6cy5hdHRyLGF0dHJSZWdleDpzLmF0dHJSZWdleCxsYXlvdXRBdHRyaWJ1dGVzOnMubGF5b3V0QXR0cmlidXRlcyxzdXBwbHlMYXlvdXREZWZhdWx0czpzLnN1cHBseUxheW91dERlZmF1bHRzLGRyYXdGcmFtZXdvcms6cy5kcmF3RnJhbWV3b3JrLHBsb3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0TW9kdWxlKHUpLG49byh0LmNhbGNkYXRhLHIpWzBdO2EodCxbIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiLCJPRVNfZWxlbWVudF9pbmRleF91aW50Il0pJiYoZS5faGFzT25seUxhcmdlU3Bsb21zJiZoKHQpLHIucGxvdCh0LHt9LG4pKX0sZHJhZzpmdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtyLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmgodCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl1bMF0udHJhY2UsYT1yLl9zcGxvbVNjZW5lc1tpLnVpZF07InNwbG9tIj09PWkudHlwZSYmYSYmYS5tYXRyaXgmJmYodCxpLGEpfX0sdXBkYXRlR3JpZDpoLGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9e307aWYobi5fc3Bsb21TY2VuZXMpe2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07InNwbG9tIj09PW8udHlwZSYmKGFbby51aWRdPTEpfWZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBsPXJbaV07aWYoIWFbbC51aWRdKXt2YXIgYz1uLl9zcGxvbVNjZW5lc1tsLnVpZF07YyYmYy5kZXN0cm95JiZjLmRlc3Ryb3koKSxuLl9zcGxvbVNjZW5lc1tsLnVpZF09bnVsbCxkZWxldGUgbi5fc3Bsb21TY2VuZXNbbC51aWRdfX19MD09PU9iamVjdC5rZXlzKG4uX3NwbG9tU2NlbmVzfHx7fSkubGVuZ3RoJiZkZWxldGUgbi5fc3Bsb21TY2VuZXMsbi5fc3Bsb21HcmlkJiYhZS5faGFzT25seUxhcmdlU3Bsb21zJiZuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJihuLl9zcGxvbUdyaWQuZGVzdHJveSgpLG4uX3NwbG9tR3JpZD1udWxsLGRlbGV0ZSBuLl9zcGxvbUdyaWQpLHMuY2xlYW4odCxlLHIsbil9LHVwZGF0ZUZ4OmZ1bmN0aW9uKHQpe3MudXBkYXRlRngodCk7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuZHJhZ21vZGU7aWYoInpvb20iPT09cnx8InBhbiI9PT1yKWZvcih2YXIgbj10LmNhbGNkYXRhLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXVswXS50cmFjZTtpZigic3Bsb20iPT09YS50eXBlKXt2YXIgbz1lLl9zcGxvbVNjZW5lc1thLnVpZF07bnVsbD09PW8uc2VsZWN0QmF0Y2gmJm8ubWF0cml4LnVwZGF0ZShvLm1hdHJpeE9wdGlvbnMsbnVsbCl9fX0sdG9TVkc6cy50b1NWR319LHsiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6NzEzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NTEsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksInJlZ2wtbGluZTJkIjo0ODN9XSwxMTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxzPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksbD10KCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIiksYz0vLW9wZW4vO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLmRpbWVuc2lvbnMscixpKX1yKCJsYWJlbCIpO3ZhciBpPXIoInZhbHVlcyIpO2kmJmkubGVuZ3RoP3IoInZpc2libGUiKTplLnZpc2libGU9ITEscigiYXhpcy50eXBlIikscigiYXhpcy5tYXRjaGVzIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgcD1pKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWgoImRpYWdvbmFsLnZpc2libGUiKSxnPWgoInNob3d1cHBlcmhhbGYiKSx2PWgoInNob3dsb3dlcmhhbGYiKTtpZihsKGUscCwidmFsdWVzIikmJihkfHxnfHx2KSl7aCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxzKHQsZSxyLGYsaCk7dmFyIG09Yy50ZXN0KGUubWFya2VyLnN5bWJvbCkseT1vLmlzQnViYmxlKGUpO2goIm1hcmtlci5saW5lLndpZHRoIixtfHx5PzE6MCksZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPWUuZGltZW5zaW9ucyxzPW8ubGVuZ3RoLGw9ZS5zaG93dXBwZXJoYWxmLGM9ZS5zaG93bG93ZXJoYWxmLHU9ZS5kaWFnb25hbC52aXNpYmxlLGY9bmV3IEFycmF5KHMpLGg9bmV3IEFycmF5KHMpO2ZvcihpPTA7aTxzO2krKyl7dmFyIHA9aT9pKzE6IiI7ZltpXT0ieCIrcCxoW2ldPSJ5IitwfXZhciBkPW4oInhheGVzIixmKSxnPW4oInlheGVzIixoKSx2PWUuX2RpYWc9bmV3IEFycmF5KHMpO2UuX3hheGVzPXt9LGUuX3lheGVzPXt9O3ZhciBtPVtdLHk9W107ZnVuY3Rpb24geCh0LG4saSxhKXtpZih0KXt2YXIgbz10LmNoYXJBdCgwKSxzPXIuX3NwbG9tQXhlc1tvXTtpZihlWyJfIitvKyJheGVzIl1bdF09MSxhLnB1c2godCksISh0IGluIHMpKXt2YXIgbD1zW3RdPXt9O2kmJihsLmxhYmVsPWkubGFiZWx8fCIiLGkudmlzaWJsZSYmaS5heGlzJiYoaS5heGlzLnR5cGUmJihsLnR5cGU9aS5heGlzLnR5cGUpLGkuYXhpcy5tYXRjaGVzJiYobC5tYXRjaGVzPW4pKSl9fX12YXIgYj0hdSYmIWMsXz0hdSYmIWw7Zm9yKGk9MDtpPHM7aSsrKXt2YXIgdz1vW2ldLGs9MD09PWksVD1pPT09cy0xLEE9ayYmYnx8VCYmXz92b2lkIDA6ZFtpXSxNPWsmJl98fFQmJmI/dm9pZCAwOmdbaV07eChBLE0sdyxtKSx4KE0sQSx3LHkpLHZbaV09W0EsTV19Zm9yKGk9MDtpPG0ubGVuZ3RoO2krKylmb3IoYT0wO2E8eS5sZW5ndGg7YSsrKXt2YXIgUz1tW2ldK3lbYV07aT5hJiZsP3IuX3NwbG9tU3VicGxvdHNbU109MTppPGEmJmM/ci5fc3Bsb21TdWJwbG90c1tTXT0xOmkhPT1hfHwhdSYmYyYmbHx8KHIuX3NwbG9tU3VicGxvdHNbU109MSl9KCFjfHwhdSYmbCYmYykmJihyLl9zcGxvbUdyaWREZmx0LnhzaWRlPSJib3R0b20iLHIuX3NwbG9tR3JpZERmbHQueXNpZGU9ImxlZnQiKX0oMCxlLGYsaCksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsaCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc0NCwiLi4vcGFyY29vcmRzL21lcmdlX2xlbmd0aCI6MTAyMywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNzAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4vYXR0cmlidXRlcyI6MTEyOX1dLDExMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1zcGxvbSIpLGk9dCgiYXJyYXktcmFuZ2UiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2dyaWQiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksdT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxmPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNBeGlzRXhwYW5zaW9uLGg9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxwPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IikubWFya2VyU2VsZWN0aW9uLGQ9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKS5tYXJrZXJTdHlsZSxnPXQoIi4uL3NjYXR0ZXJnbCIpLmNhbGNIb3Zlcix2PXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbT10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2Z1bmN0aW9uIHkodCxlKXt2YXIgcixpLGEsbyxjLHU9dC5fZnVsbExheW91dCxmPXUuX3NpemUsaD1lLnRyYWNlLHA9ZS50LGQ9dS5fc3Bsb21TY2VuZXNbaC51aWRdLGc9ZC5tYXRyaXhPcHRpb25zLHY9Zy5jZGF0YSxtPXUuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLHk9dS5kcmFnbW9kZTtpZigwIT09di5sZW5ndGgpe2cubG93ZXI9aC5zaG93dXBwZXJoYWxmLGcudXBwZXI9aC5zaG93bG93ZXJoYWxmLGcuZGlhZ29uYWw9aC5kaWFnb25hbC52aXNpYmxlO3ZhciB4PWguX3Zpc2libGVEaW1zLGI9di5sZW5ndGgsXz1kLnZpZXdPcHRzPXt9O2ZvcihfLnJhbmdlcz1uZXcgQXJyYXkoYiksXy5kb21haW5zPW5ldyBBcnJheShiKSxjPTA7Yzx4Lmxlbmd0aDtjKyspe2E9eFtjXTt2YXIgdz1fLnJhbmdlc1tjXT1uZXcgQXJyYXkoNCksaz1fLmRvbWFpbnNbY109bmV3IEFycmF5KDQpOyhyPWwuZ2V0RnJvbUlkKHQsaC5fZGlhZ1thXVswXSkpJiYod1swXT1yLl9ybFswXSx3WzJdPXIuX3JsWzFdLGtbMF09ci5kb21haW5bMF0sa1syXT1yLmRvbWFpblsxXSksKGk9bC5nZXRGcm9tSWQodCxoLl9kaWFnW2FdWzFdKSkmJih3WzFdPWkuX3JsWzBdLHdbM109aS5fcmxbMV0sa1sxXT1pLmRvbWFpblswXSxrWzNdPWkuZG9tYWluWzFdKX1fLnZpZXdwb3J0PVtmLmwsZi5iLGYudytmLmwsZi5oK2YuYl0sITA9PT1kLm1hdHJpeCYmKGQubWF0cml4PW4obSkpO3ZhciBUPXUuY2xpY2ttb2RlLmluZGV4T2YoInNlbGVjdCIpPi0xLEE9Imxhc3NvIj09PXl8fCJzZWxlY3QiPT09eXx8ISFoLnNlbGVjdGVkcG9pbnRzfHxUO2lmKGQuc2VsZWN0QmF0Y2g9bnVsbCxkLnVuc2VsZWN0QmF0Y2g9bnVsbCxBKXt2YXIgTT1oLl9sZW5ndGg7aWYoZC5zZWxlY3RCYXRjaHx8KGQuc2VsZWN0QmF0Y2g9W10sZC51bnNlbGVjdEJhdGNoPVtdKSxoLnNlbGVjdGVkcG9pbnRzKXtkLnNlbGVjdEJhdGNoPWguc2VsZWN0ZWRwb2ludHM7dmFyIFM9aC5zZWxlY3RlZHBvaW50cyxFPXt9O2ZvcihhPTA7YTxTLmxlbmd0aDthKyspRVtTW2FdXT0hMDt2YXIgQz1bXTtmb3IoYT0wO2E8TTthKyspRVthXXx8Qy5wdXNoKGEpO2QudW5zZWxlY3RCYXRjaD1DfXZhciBMPXAueHB4PW5ldyBBcnJheShiKSx6PXAueXB4PW5ldyBBcnJheShiKTtmb3IoYz0wO2M8eC5sZW5ndGg7YysrKXtpZihhPXhbY10scj1sLmdldEZyb21JZCh0LGguX2RpYWdbYV1bMF0pKWZvcihMW2NdPW5ldyBBcnJheShNKSxvPTA7bzxNO28rKylMW2NdW29dPXIuYzJwKHZbY11bb10pO2lmKGk9bC5nZXRGcm9tSWQodCxoLl9kaWFnW2FdWzFdKSlmb3IoeltjXT1uZXcgQXJyYXkoTSksbz0wO288TTtvKyspeltjXVtvXT1pLmMycCh2W2NdW29dKX1kLnNlbGVjdEJhdGNoPyhkLm1hdHJpeC51cGRhdGUoZyxnKSxkLm1hdHJpeC51cGRhdGUoZC51bnNlbGVjdGVkT3B0aW9ucyxkLnNlbGVjdGVkT3B0aW9ucyksZC5tYXRyaXgudXBkYXRlKF8sXykpOmQubWF0cml4LnVwZGF0ZShfLG51bGwpfWVsc2V7dmFyIE89cy5leHRlbmRGbGF0KHt9LGcsXyk7ZC5tYXRyaXgudXBkYXRlKE8sbnVsbCkscC54cHg9cC55cHg9bnVsbH19fWZ1bmN0aW9uIHgodCxlKXtmb3IodmFyIHI9ZS5faWQsbj17eDowLHk6MX1bci5jaGFyQXQoMCldLGk9dC5fdmlzaWJsZURpbXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKHQuX2RpYWdbb11bbl09PT1yKXJldHVybiBhfXJldHVybiExfWUuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNwbG9tIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJjYXJ0ZXNpYW4iLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksY2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8sYyxnPWUuZGltZW5zaW9ucyx5PWUuX2xlbmd0aCx4PXt9LGI9eC5jZGF0YT1bXSxfPXguZGF0YT1bXSx3PWUuX3Zpc2libGVEaW1zPVtdO2Z1bmN0aW9uIGsodCxyKXtmb3IodmFyIG49dC5tYWtlQ2FsY2RhdGEoe3Y6ci52YWx1ZXMsdmNhbGVuZGFyOmUuY2FsZW5kYXJ9LCJ2IiksaT0wO2k8bi5sZW5ndGg7aSsrKW5baV09bltpXT09PXY/TmFOOm5baV07Yi5wdXNoKG4pLF8ucHVzaCgibG9nIj09PXQudHlwZT9zLnNpbXBsZU1hcChuLHQuYzJsKTpuKX1mb3Iocj0wO3I8Zy5sZW5ndGg7cisrKWlmKChpPWdbcl0pLnZpc2libGUpe2lmKGE9bC5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzBdKSxvPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSksYSYmbyYmYS50eXBlIT09by50eXBlKXtzLmxvZygiU2tpcHBpbmcgc3Bsb20gZGltZW5zaW9uICIrcisiIHdpdGggY29uZmxpY3RpbmcgYXhpcyB0eXBlcyIpO2NvbnRpbnVlfWE/KGsoYSxpKSxvJiYiY2F0ZWdvcnkiPT09by50eXBlJiYoby5fY2F0ZWdvcmllcz1hLl9jYXRlZ29yaWVzLnNsaWNlKCkpKTprKG8saSksdy5wdXNoKHIpfWZvcihoKHQsZSkscy5leHRlbmRGbGF0KHgsZChlKSksYz1iLmxlbmd0aCp5Pm0/MiooeC5zaXplQXZnfHxNYXRoLm1heCh4LnNpemUsMykpOnUoZSx5KSxuPTA7bjx3Lmxlbmd0aDtuKyspaT1nW3I9d1tuXV0sYT1sLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pfHx7fSxvPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSl8fHt9LGYodCxlLGEsbyxiW25dLGJbbl0sYyk7dmFyIFQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZS51aWQsaT1yLl9zcGxvbVNjZW5lcztpfHwoaT1yLl9zcGxvbVNjZW5lcz17fSk7dmFyIGE9e2RpcnR5OiEwfSxvPWlbZS51aWRdO3JldHVybiBvfHwoKG89aVtuXT1zLmV4dGVuZEZsYXQoe30sYSx7c2VsZWN0QmF0Y2g6bnVsbCx1bnNlbGVjdEJhdGNoOm51bGwsbWF0cml4OiExLHNlbGVjdDpudWxsfSkpLmRyYXc9ZnVuY3Rpb24oKXtvLm1hdHJpeCYmby5tYXRyaXguZHJhdyYmKG8uc2VsZWN0QmF0Y2g/by5tYXRyaXguZHJhdyhvLnVuc2VsZWN0QmF0Y2gsby5zZWxlY3RCYXRjaCk6by5tYXRyaXguZHJhdygpKSxvLmRpcnR5PSExfSxvLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvLm1hdHJpeCYmby5tYXRyaXguZGVzdHJveSYmby5tYXRyaXguZGVzdHJveSgpLG8ubWF0cml4T3B0aW9ucz1udWxsLG8uc2VsZWN0QmF0Y2g9bnVsbCxvLnVuc2VsZWN0QmF0Y2g9bnVsbCxvPW51bGx9KSxvLmRpcnR5fHxzLmV4dGVuZEZsYXQobyxhKSxvfSh0LGUpO3JldHVybiBULm1hdHJpeHx8KFQubWF0cml4PSEwKSxULm1hdHJpeE9wdGlvbnM9eCxULnNlbGVjdGVkT3B0aW9ucz1wKGUsZS5zZWxlY3RlZCksVC51bnNlbGVjdGVkT3B0aW9ucz1wKGUsZS51bnNlbGVjdGVkKSxbe3g6ITEseTohMSx0Ont9LHRyYWNlOmV9XX0scGxvdDpmdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspeSh0LHJbbl1bMF0pfSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscil7dmFyIG49dC5jZFswXS50cmFjZSxpPXQuc2NlbmUubWF0cml4T3B0aW9ucy5jZGF0YSxhPXQueGEsbz10LnlhLHM9YS5jMnAoZSksbD1vLmMycChyKSxjPXQuZGlzdGFuY2UsdT14KG4sYSksZj14KG4sbyk7aWYoITE9PT11fHwhMT09PWYpcmV0dXJuW3RdO2Zvcih2YXIgaCxwLGQ9aVt1XSx2PWlbZl0sbT1jLHk9MDt5PGQubGVuZ3RoO3krKyl7dmFyIGI9ZFt5XSxfPXZbeV0sdz1hLmMycChiKS1zLGs9by5jMnAoXyktbCxUPU1hdGguc3FydCh3KncrayprKTtUPG0mJihtPXA9VCxoPXkpfXJldHVybiB0LmluZGV4PWgsdC5kaXN0YW5jZT1tLHQuZHh5PXAsdm9pZCAwPT09aD9bdF06KGcodCxkLHYsbiksW3RdKX0sc2VsZWN0UG9pbnRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LmNkLGE9blswXS50cmFjZSxvPW5bMF0udCxzPXQuc2NlbmUsbD1zLm1hdHJpeE9wdGlvbnMuY2RhdGEsdT10LnhheGlzLGY9dC55YXhpcyxoPVtdO2lmKCFzKXJldHVybiBoO3ZhciBwPSFjLmhhc01hcmtlcnMoYSkmJiFjLmhhc1RleHQoYSk7aWYoITAhPT1hLnZpc2libGV8fHApcmV0dXJuIGg7dmFyIGQ9eChhLHUpLGc9eChhLGYpO2lmKCExPT09ZHx8ITE9PT1nKXJldHVybiBoO3ZhciB2PW8ueHB4W2RdLG09by55cHhbZ10seT1sW2RdLGI9bFtnXSxfPW51bGwsdz1udWxsO2lmKCExPT09ZXx8ZS5kZWdlbmVyYXRlKXc9aShvLmNvdW50KTtlbHNlIGZvcihfPVtdLHc9W10scj0wO3I8eS5sZW5ndGg7cisrKWUuY29udGFpbnMoW3Zbcl0sbVtyXV0sbnVsbCxyLHQpPyhfLnB1c2gociksaC5wdXNoKHtwb2ludE51bWJlcjpyLHg6eVtyXSx5OmJbcl19KSk6dy5wdXNoKHIpO2lmKHMuc2VsZWN0QmF0Y2h8fChzLnNlbGVjdEJhdGNoPVtdLHMudW5zZWxlY3RCYXRjaD1bXSksIXMuc2VsZWN0QmF0Y2gpe2ZvcihyPTA7cjxzLmNvdW50O3IrKylzLnNlbGVjdEJhdGNoPVtdLHMudW5zZWxlY3RCYXRjaD1bXTtzLm1hdHJpeC51cGRhdGUocy51bnNlbGVjdGVkT3B0aW9ucyxzLnNlbGVjdGVkT3B0aW9ucyl9cmV0dXJuIHMuc2VsZWN0QmF0Y2g9XyxzLnVuc2VsZWN0QmF0Y2g9dyxofSxlZGl0U3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRyYWNlLG49dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbci51aWRdO2lmKG4pe2godCxyKSxzLmV4dGVuZEZsYXQobi5tYXRyaXhPcHRpb25zLGQocikpO3ZhciBpPXMuZXh0ZW5kRmxhdCh7fSxuLm1hdHJpeE9wdGlvbnMsbi52aWV3T3B0cyk7bi5tYXRyaXgudXBkYXRlKGksbnVsbCl9fSxtZXRhOnt9fSxhLnJlZ2lzdGVyKG8pfSx7Ii4uLy4uL2NvbXBvbmVudHMvZ3JpZCI6NjIwLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vc2NhdHRlci9jYWxjIjoxMDUyLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTA1NCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwNjksIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL3NjYXR0ZXJnbCI6MTEwNCwiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6MTEwMSwiLi4vc2NhdHRlcmdsL2NvbnZlcnQiOjExMDIsIi4vYXR0cmlidXRlcyI6MTEyOSwiLi9iYXNlX3Bsb3QiOjExMzAsIi4vZGVmYXVsdHMiOjExMzEsImFycmF5LXJhbmdlIjo1NywicmVnbC1zcGxvbSI6NDg1fV0sMTEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLG89dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx3Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0czp7eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxtYXhkaXNwbGF5ZWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MWUzLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZXJlZjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjAsZGZsdDoxfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6ImNhbGMifSx7a2V5czpbInR1YmV4IiwidHViZXkiLCJ0dWJleiIsInR1YmV1IiwidHViZXYiLCJ0dWJldyIsIm5vcm0iLCJkaXZlcmdlbmNlIl19KX07bChjLG4oIiIse2NvbG9yQXR0cjoidS92L3cgbm9ybSIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjppfSk7WyJvcGFjaXR5IiwibGlnaHRwb3NpdGlvbiIsImxpZ2h0aW5nIl0uZm9yRWFjaChmdW5jdGlvbih0KXtjW3RdPW9bdF19KSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ1IiwidiIsInciLCJub3JtIiwiZGl2ZXJnZW5jZSIsInRleHQiLCJuYW1lIl0sZGZsdDoieCt5K3orbm9ybSt0ZXh0K25hbWUifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjo5OTR9XSwxMTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scz1lLnUsbD1lLnYsYz1lLncsdT1lLngsZj1lLnksaD1lLnoscD1NYXRoLm1pbih1Lmxlbmd0aCxmLmxlbmd0aCxoLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCxjLmxlbmd0aCksZD0wO2Uuc3RhcnRzJiYoaT1lLnN0YXJ0cy54fHxbXSxhPWUuc3RhcnRzLnl8fFtdLG89ZS5zdGFydHMuenx8W10sZD1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCxvLmxlbmd0aCkpO3ZhciBnPTAsdj0xLzA7Zm9yKHI9MDtyPHA7cisrKXt2YXIgbT1zW3JdLHk9bFtyXSx4PWNbcl0sYj1NYXRoLnNxcnQobSptK3kqeSt4KngpO2c9TWF0aC5tYXgoZyxiKSx2PU1hdGgubWluKHYsYil9bih0LGUse3ZhbHM6W3YsZ10sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSk7dmFyIF89LTEvMCx3PTEvMCxrPS0xLzAsVD0xLzAsQT0tMS8wLE09MS8wO2ZvcihyPTA7cjxwO3IrKyl7dmFyIFM9dVtyXTtfPU1hdGgubWF4KF8sUyksdz1NYXRoLm1pbih3LFMpO3ZhciBFPWZbcl07az1NYXRoLm1heChrLEUpLFQ9TWF0aC5taW4oVCxFKTt2YXIgQz1oW3JdO0E9TWF0aC5tYXgoQSxDKSxNPU1hdGgubWluKE0sQyl9Zm9yKHI9MDtyPGQ7cisrKXt2YXIgTD1pW3JdO189TWF0aC5tYXgoXyxMKSx3PU1hdGgubWluKHcsTCk7dmFyIHo9YVtyXTtrPU1hdGgubWF4KGsseiksVD1NYXRoLm1pbihULHopO3ZhciBPPW9bcl07QT1NYXRoLm1heChBLE8pLE09TWF0aC5taW4oTSxPKX1lLl9sZW49cCxlLl9zbGVuPWQsZS5fbm9ybU1heD1nLGUuX3hibmRzPVt3LF9dLGUuX3libmRzPVtULGtdLGUuX3pibmRzPVtNLEFdfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1fV0sMTEzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdHJlYW10dWJlM2QiKSxpPW4uY3JlYXRlVHViZU1lc2gsYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUscz10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxsPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn07ZnVuY3Rpb24gYyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGEuZGlzdGluY3RWYWxzKHQpLnZhbHN9ZnVuY3Rpb24gaCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT4yP3Quc2xpY2UoMSxlLTEpOjI9PT1lP1sodFswXSt0WzFdKS8yXTp0fWZ1bmN0aW9uIHAodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIDE9PT1lP1suNSwuNV06W3RbMV0tdFswXSx0W2UtMV0tdFtlLTJdXX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxjPWUuX2xlbix1PXt9O2Z1bmN0aW9uIGQodCxlKXt2YXIgbj1yW2VdLG89aVtsW2VdXTtyZXR1cm4gYS5zaW1wbGVNYXAodCxmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pfXUudmVjdG9ycz1zKGQoZS51LCJ4YXhpcyIpLGQoZS52LCJ5YXhpcyIpLGQoZS53LCJ6YXhpcyIpLGMpO3ZhciBnPWYoZS54LnNsaWNlKDAsYykpLHY9ZihlLnkuc2xpY2UoMCxjKSksbT1mKGUuei5zbGljZSgwLGMpKTtpZihnLmxlbmd0aCp2Lmxlbmd0aCptLmxlbmd0aD5jKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O3ZhciB5PWQoZywieGF4aXMiKSx4PWQodiwieWF4aXMiKSxiPWQobSwiemF4aXMiKTtpZih1Lm1lc2hncmlkPVt5LHgsYl0sZS5zdGFydHMpe3ZhciBfPWUuX3NsZW47dS5zdGFydGluZ1Bvc2l0aW9ucz1zKGQoZS5zdGFydHMueC5zbGljZSgwLF8pLCJ4YXhpcyIpLGQoZS5zdGFydHMueS5zbGljZSgwLF8pLCJ5YXhpcyIpLGQoZS5zdGFydHMuei5zbGljZSgwLF8pLCJ6YXhpcyIpKX1lbHNle2Zvcih2YXIgdz14WzBdLGs9aCh5KSxUPWgoYiksQT1uZXcgQXJyYXkoay5sZW5ndGgqVC5sZW5ndGgpLE09MCxTPTA7UzxrLmxlbmd0aDtTKyspZm9yKHZhciBFPTA7RTxULmxlbmd0aDtFKyspQVtNKytdPVtrW1NdLHcsVFtFXV07dS5zdGFydGluZ1Bvc2l0aW9ucz1BfXUuY29sb3JtYXA9byhlKSx1LnR1YmVTaXplPWUuc2l6ZXJlZix1Lm1heExlbmd0aD1lLm1heGRpc3BsYXllZDt2YXIgQz1kKGUuX3hibmRzLCJ4YXhpcyIpLEw9ZChlLl95Ym5kcywieWF4aXMiKSx6PWQoZS5femJuZHMsInpheGlzIiksTz1wKHkpLEk9cCh4KSxEPXAoYiksUD1bW0NbMF0tT1swXSxMWzBdLUlbMF0selswXS1EWzBdXSxbQ1sxXStPWzFdLExbMV0rSVsxXSx6WzFdK0RbMV1dXSxSPW4odSxQKTtSLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZS5jbWluL2UuX25vcm1NYXgsZS5jbWF4L2UuX25vcm1NYXhdO3ZhciBGPWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gUi5saWdodFBvc2l0aW9uPVtGLngsRi55LEYuel0sUi5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxSLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLFIuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixSLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxSLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLFIub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPVIudHViZVNjYWxlKmUuc2l6ZXJlZioyLFJ9dS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LHI9dGhpcy5zY2VuZS5kYXRhU2NhbGU7ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWVbbl0sYT1yW2xbbl1dO3JldHVybiBpLmwyYyh0KS9hfWlmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgaT10LmRhdGEucG9zaXRpb24sYT10LmRhdGEudmVsb2NpdHk7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVtuKGlbMF0sInhheGlzIiksbihpWzFdLCJ5YXhpcyIpLG4oaVsyXSwiemF4aXMiKSxuKGFbMF0sInhheGlzIiksbihhWzFdLCJ5YXhpcyIpLG4oYVsyXSwiemF4aXMiKSx0LmRhdGEuaW50ZW5zaXR5KnRoaXMuZGF0YS5fbm9ybU1heCx0LmRhdGEuZGl2ZXJnZW5jZV0sdC50ZXh0TGFiZWw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQsITB9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1kKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1kKHQsZSksYT1pKHIsbiksbz1uZXcgYyh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjY5NywiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4MDAsImdsLXN0cmVhbXR1YmUzZCI6MzA5fV0sMTEzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKCJ1IiksYz1zKCJ2IiksdT1zKCJ3IiksZj1zKCJ4IiksaD1zKCJ5IikscD1zKCJ6Iik7bCYmbC5sZW5ndGgmJmMmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmZiYmZi5sZW5ndGgmJmgmJmgubGVuZ3RoJiZwJiZwLmxlbmd0aD8ocygic3RhcnRzLngiKSxzKCJzdGFydHMueSIpLHMoInN0YXJ0cy56IikscygibWF4ZGlzcGxheWVkIikscygic2l6ZXJlZiIpLHMoImxpZ2h0aW5nLmFtYmllbnQiKSxzKCJsaWdodGluZy5kaWZmdXNlIikscygibGlnaHRpbmcuc3BlY3VsYXIiKSxzKCJsaWdodGluZy5yb3VnaG5lc3MiKSxzKCJsaWdodGluZy5mcmVzbmVsIikscygibGlnaHRwb3NpdGlvbi54IikscygibGlnaHRwb3NpdGlvbi55IikscygibGlnaHRwb3NpdGlvbi56IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9saWIiOjcwMCwiLi9hdHRyaWJ1dGVzIjoxMTMzfV0sMTEzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzdHJlYW10dWJlIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9jb252ZXJ0IiksZXZlbnREYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHViZXg9dC54LHQudHViZXk9dC55LHQudHViZXo9dC56LHQudHViZXU9ZS50cmFjZUNvb3JkaW5hdGVbM10sdC50dWJldj1lLnRyYWNlQ29vcmRpbmF0ZVs0XSx0LnR1YmV3PWUudHJhY2VDb29yZGluYXRlWzVdLHQubm9ybT1lLnRyYWNlQ29vcmRpbmF0ZVs2XSx0LmRpdmVyZ2VuY2U9ZS50cmFjZUNvb3JkaW5hdGVbN10sZGVsZXRlIHQueCxkZWxldGUgdC55LGRlbGV0ZSB0LnosdH0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjExMzMsIi4vY2FsYyI6MTEzNCwiLi9jb252ZXJ0IjoxMTM1LCIuL2RlZmF1bHRzIjoxMTM2fV0sMTEzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxwYXJlbnRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxicmFuY2h2YWx1ZXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlbWFpbmRlciIsInRvdGFsIl0sZGZsdDoicmVtYWluZGVyIixlZGl0VHlwZToiY2FsYyJ9LGxldmVsOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In0sbWF4ZGVwdGg6e3ZhbFR5cGU6ImludGVnZXIiLGVkaXRUeXBlOiJwbG90IixkZmx0Oi0xfSxtYXJrZXI6e2NvbG9yczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjpzKHt9LG8ubWFya2VyLmxpbmUuY29sb3Ise2RmbHQ6bnVsbH0pLHdpZHRoOnMoe30sby5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGxlYWY6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIixtaW46MCxtYXg6MSxkZmx0Oi43fSxlZGl0VHlwZToicGxvdCJ9LHRleHQ6by50ZXh0LHRleHRpbmZvOnMoe30sby50ZXh0aW5mbyx7ZWRpdFR5cGU6InBsb3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiXX0pLHRleHRmb250Om8udGV4dGZvbnQsaG92ZXJ0ZXh0Om8uaG92ZXJ0ZXh0LGhvdmVyaW5mbzpzKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTppKCksaW5zaWRldGV4dGZvbnQ6by5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6by5vdXRzaWRldGV4dGZvbnQsZG9tYWluOmEoe25hbWU6InN1bmJ1cnN0Iix0cmFjZTohMCxlZGl0VHlwZToiY2FsYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuLi9waWUvYXR0cmlidXRlcyI6MTAyNn1dLDExMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT1yLm5hbWU9InN1bmJ1cnN0IjtyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9bi5nZXRNb2R1bGUoYSksbD1pKHQuY2FsY2RhdGEscylbMF07cy5wbG90KHQsbCxyLG8pfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKGEpLG89ZS5faGFzJiZlLl9oYXMoYSk7aSYmIW8mJm4uX3N1bmJ1cnN0bGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCl9fSx7Ii4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4Mjl9XSwxMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLWhpZXJhcmNoeSIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vcGllL2NhbGMiKS5tYWtlUHVsbENvbG9yRm4scz10KCIuLi9waWUvY2FsYyIpLmdlbmVyYXRlRXh0ZW5kZWRDb2xvcnMsbD1hLmlzQXJyYXlPclR5cGVkQXJyYXksYz17fTtyLmNhbGM9ZnVuY3Rpb24odCxlKXt2YXIgcixzLGMsdSxmLGgscD10Ll9mdWxsTGF5b3V0LGQ9ZS5pZHMsZz1sKGQpLHY9ZS5sYWJlbHMsbT1lLnBhcmVudHMseT1lLnZhbHVlcyx4PWwoeSksYj1bXSxfPXt9LHc9e30saz1mdW5jdGlvbih0KXtyZXR1cm4heHx8aSh5W3RdKSYmeVt0XT49MH07Zz8ocj1NYXRoLm1pbihkLmxlbmd0aCxtLmxlbmd0aCkscz1mdW5jdGlvbih0KXtyZXR1cm4gZFt0XSYmayh0KX0sYz1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKGRbdF0pfSk6KHI9TWF0aC5taW4odi5sZW5ndGgsbS5sZW5ndGgpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZbdF0mJmsodCl9LGM9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh2W3RdKX0pLHgmJihyPU1hdGgubWluKHIseS5sZW5ndGgpKTtmb3IodmFyIFQ9MDtUPHI7VCsrKWlmKHMoVCkpe3ZhciBBPWMoVCksTT1tW1RdP1N0cmluZyhtW1RdKToiIixTPXtpOlQsaWQ6QSxwaWQ6TSxsYWJlbDp2W1RdP1N0cmluZyh2W1RdKToiIn07eCYmKFMudj0reVtUXSksYi5wdXNoKFMpLGY9QSxfW3U9TV0/X1t1XS5wdXNoKGYpOl9bdV09W2ZdLHdbZl09MX1pZihfWyIiXSl7aWYoX1siIl0ubGVuZ3RoPjEpe2Zvcih2YXIgRT1hLnJhbmRzdHIoKSxDPTA7QzxiLmxlbmd0aDtDKyspIiI9PT1iW0NdLnBpZCYmKGJbQ10ucGlkPUUpO2IudW5zaGlmdCh7aGFzTXVsdGlwbGVSb290czohMCxpZDpFLHBpZDoiIn0pfX1lbHNle3ZhciBMLHo9W107Zm9yKEwgaW4gXyl3W0xdfHx6LnB1c2goTCk7aWYoMSE9PXoubGVuZ3RoKXJldHVybiBhLndhcm4oIk11bHRpcGxlIGltcGxpZWQgcm9vdHMsIGNhbm5vdCBidWlsZCBzdW5idXJzdCBoaWVyYXJjaHkuIik7TD16WzBdLGIudW5zaGlmdCh7aWQ6TCxwaWQ6IiIsbGFiZWw6TH0pfXRyeXtoPW4uc3RyYXRpZnkoKS5pZChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLnBhcmVudElkKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpZH0pKGIpfWNhdGNoKHQpe3JldHVybiBhLndhcm4oIkZhaWxlZCB0byBidWlsZCBzdW5idXJzdCBoaWVyYXJjaHkuIEVycm9yOiAiK3QubWVzc2FnZSl9dmFyIE89bi5oaWVyYXJjaHkoaCksST0hMTtpZih4KXN3aXRjaChlLmJyYW5jaHZhbHVlcyl7Y2FzZSJyZW1haW5kZXIiOk8uc3VtKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEudn0pO2JyZWFrO2Nhc2UidG90YWwiOk8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmRhdGEuZGF0YS52O2lmKHQuY2hpbGRyZW4mJmU8dC5jaGlsZHJlbi5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLmRhdGEuZGF0YS52fSwwKSlyZXR1cm4gST0hMCxhLndhcm4oWyJUb3RhbCB2YWx1ZSBmb3Igbm9kZSIsdC5kYXRhLmRhdGEuaWQsImlzIHNtYWxsZXIgdGhhbiB0aGUgc3VtIG9mIGl0cyBjaGlsZHJlbi4iXS5qb2luKCIgIikpO3QudmFsdWU9ZX0pfWVsc2UgTy5jb3VudCgpO2lmKCFJKXtPLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS52YWx1ZS10LnZhbHVlfSk7dmFyIEQ9ZS5tYXJrZXIuY29sb3JzfHxbXSxQPW8ocC5fc3VuYnVyc3Rjb2xvcm1hcCk7cmV0dXJuIE8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmRhdGEuZGF0YSxyPWUuaWQ7ZS5jb2xvcj1QKERbZS5pXSxyKX0pLGJbMF0uaGllcmFyY2h5PU8sYn19LHIuY3Jvc3NUcmFjZUNhbGM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsbj1lLnN1bmJ1cnN0Y29sb3J3YXksaT1lLl9zdW5idXJzdGNvbG9ybWFwO2UuZXh0ZW5kc3VuYnVyc3Rjb2xvcnMmJihuPXMobixjKSk7dmFyIGE9MDtmdW5jdGlvbiBvKHQpe3ZhciBlPXQuZGF0YS5kYXRhLHI9ZS5pZDshMT09PWUuY29sb3ImJihpW3JdP2UuY29sb3I9aVtyXTp0LnBhcmVudD90LnBhcmVudC5wYXJlbnQ/ZS5jb2xvcj10LnBhcmVudC5kYXRhLmRhdGEuY29sb3I6KGlbcl09ZS5jb2xvcj1uW2Elbi5sZW5ndGhdLGErKyk6ZS5jb2xvcj0icmdiYSgwLDAsMCwwKSIpfWZvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgdT1yW2xdWzBdOyJzdW5idXJzdCI9PT11LnRyYWNlLnR5cGUmJnUuaGllcmFyY2h5JiZ1LmhpZXJhcmNoeS5lYWNoKG8pfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL3BpZS9jYWxjIjoxMDI4LCJkMy1oaWVyYXJjaHkiOjE0NywiZmFzdC1pc251bWVyaWMiOjIyMX1dLDExNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDTElDS19UUkFOU0lUSU9OX1RJTUU6NzUwLENMSUNLX1RSQU5TSVRJT05fRUFTSU5HOiJsaW5lYXIifX0se31dLDExNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLG89bi5jb2VyY2VGb250O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGM9bCgibGFiZWxzIiksdT1sKCJwYXJlbnRzIik7aWYoYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoKXt2YXIgZj1sKCJ2YWx1ZXMiKTtmJiZmLmxlbmd0aCYmbCgiYnJhbmNodmFsdWVzIiksbCgibGV2ZWwiKSxsKCJtYXhkZXB0aCIpLGwoIm1hcmtlci5saW5lLndpZHRoIikmJmwoIm1hcmtlci5saW5lLmNvbG9yIixzLnBhcGVyX2JnY29sb3IpLGwoIm1hcmtlci5jb2xvcnMiKSxsKCJsZWFmLm9wYWNpdHkiKTt2YXIgaD1sKCJ0ZXh0Iik7bCgidGV4dGluZm8iLEFycmF5LmlzQXJyYXkoaCk/InRleHQrbGFiZWwiOiJsYWJlbCIpLGwoImhvdmVydGV4dCIpLGwoImhvdmVydGVtcGxhdGUiKTt2YXIgcD1vKGwsInRleHRmb250IixzLmZvbnQpLGQ9bi5leHRlbmRGbGF0KHt9LHApOyEodC50ZXh0Zm9udCYmdC50ZXh0Zm9udC5jb2xvcikmJmRlbGV0ZSBkLmNvbG9yLG8obCwiaW5zaWRldGV4dGZvbnQiLGQpLG8obCwib3V0c2lkZXRleHRmb250IixwKSxhKGUscyxsKSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuL2F0dHJpYnV0ZXMiOjExMzh9XSwxMTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN1bmJ1cnN0IixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjExMzgsIi4vYmFzZV9wbG90IjoxMTM5LCIuL2NhbGMiOjExNDAsIi4vZGVmYXVsdHMiOjExNDIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExNDQsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMTQ1LCIuL3Bsb3QiOjExNDYsIi4vc3R5bGUiOjExNDd9XSwxMTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c3VuYnVyc3Rjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHN1bmJ1cnN0Y29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTE0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigic3VuYnVyc3Rjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kc3VuYnVyc3Rjb2xvcnMiKX19LHsiLi4vLi4vbGliIjo3MDAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExNDR9XSwxMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJkMy1oaWVyYXJjaHkiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vbGliL2V2ZW50cyIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIikscD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUsZD10KCIuLi9waWUvcGxvdCIpLnRyYW5zZm9ybUluc2lkZVRleHQsZz10KCIuLi9waWUvaGVscGVycyIpLmZvcm1hdFBpZVZhbHVlLHY9dCgiLi9zdHlsZSIpLnN0eWxlT25lLG09dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiB5KHQsZSxyLGEpe3ZhciBvPXQuX2Z1bGxMYXlvdXQsdT1hJiZhLmR1cmF0aW9uPjAsaD1uLnNlbGVjdChyKS5zZWxlY3RBbGwoImcuc2xpY2UiKSxwPWVbMF0sbT1wLnRyYWNlLHk9eChwLmhpZXJhcmNoeSxtLmxldmVsKSx3PW0ubWF4ZGVwdGg+PTA/bS5tYXhkZXB0aDoxLzAsTT1vLl9zaXplLFM9bS5kb21haW4sRT1NLncqKFMueFsxXS1TLnhbMF0pLEM9TS5oKihTLnlbMV0tUy55WzBdKSxMPS41Kk1hdGgubWluKEUsQyksej1wLmN4PU0ubCtNLncqKFMueFsxXStTLnhbMF0pLzIsTz1wLmN5PU0udCtNLmgqKDEtUy55WzBdKS1DLzI7aWYoIXkpcmV0dXJuIGgucmVtb3ZlKCk7dmFyIEk9bnVsbCxEPXt9O3UmJmguZWFjaChmdW5jdGlvbih0KXtEW2sodCldPXtycHgwOnQucnB4MCxycHgxOnQucnB4MSx4MDp0LngwLHgxOnQueDEsdHJhbnNmb3JtOnQudHJhbnNmb3JtfSwhSSYmXyh0KSYmKEk9dCl9KTt2YXIgUD1mdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJ0aXRpb24oKS5zaXplKFsyKk1hdGguUEksdC5oZWlnaHQrMV0pKHQpfSh5KS5kZXNjZW5kYW50cygpLFI9eS5oZWlnaHQrMSxGPTAsQj13O3AuaGFzTXVsdGlwbGVSb290cyYmYih5KSYmKFA9UC5zbGljZSgxKSxSLT0xLEY9MSxCKz0xKSxQPVAuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxPD1CfSk7dmFyIE49TWF0aC5taW4oUix3KSxqPWZ1bmN0aW9uKHQpe3JldHVybih0LUYpL04qTH0sVj1mdW5jdGlvbih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLC10Kk1hdGguc2luKGUpXX0sVT1mdW5jdGlvbih0KXtyZXR1cm4gYy5wYXRoQW5udWx1cyh0LnJweDAsdC5ycHgxLHQueDAsdC54MSx6LE8pfSxxPWZ1bmN0aW9uKHQpe3JldHVybiB6K3QucHhtaWRbMF0qdC50cmFuc2Zvcm0uckNlbnRlcisodC50cmFuc2Zvcm0ueHx8MCl9LEg9ZnVuY3Rpb24odCl7cmV0dXJuIE8rdC5weG1pZFsxXSp0LnRyYW5zZm9ybS5yQ2VudGVyKyh0LnRyYW5zZm9ybS55fHwwKX07KGg9aC5kYXRhKFAsZnVuY3Rpb24odCl7cmV0dXJuIGsodCl9KSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLHU/aC5leGl0KCkudHJhbnNpdGlvbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LnNlbGVjdCgicGF0aC5zdXJmYWNlIikudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj1rKHQpLGk9RFtyXSxhPURbayh5KV07aWYoYSl7dmFyIG89dC54MT5hLngxPzIqTWF0aC5QSTowO2U9dC5ycHgxPGEucnB4MT97cnB4MDowLHJweDE6MH06e3gwOm8seDE6b319ZWxzZXt2YXIgcyxsPWsodC5wYXJlbnQpO2guZWFjaChmdW5jdGlvbih0KXtpZihrKHQpPT09bClyZXR1cm4gcz10fSk7dmFyIGMsdT1zLmNoaWxkcmVuO3UuZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKGsodCk9PT1yKXJldHVybiBjPWV9KTt2YXIgZj11Lmxlbmd0aCxwPW4uaW50ZXJwb2xhdGUocy54MCxzLngxKTtlPXtycHgwOkwscnB4MTpMLHgwOnAoYy9mKSx4MTpwKChjKzEpL2YpfX1yZXR1cm4gbi5pbnRlcnBvbGF0ZShpLGUpfSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFUoZSh0KSl9fSksdC5zZWxlY3QoImcuc2xpY2V0ZXh0IikuYXR0cigib3BhY2l0eSIsMCl9KS5yZW1vdmUoKTpoLmV4aXQoKS5yZW1vdmUoKSxoLm9yZGVyKCk7dmFyIEc9bnVsbDtpZih1JiZJKXt2YXIgWT1rKEkpO2guZWFjaChmdW5jdGlvbih0KXtudWxsPT09RyYmayh0KT09PVkmJihHPXQueDEpfSl9dmFyIFc9aDtmdW5jdGlvbiBYKHQpe3ZhciBlPXQucGFyZW50LHI9RFtrKGUpXSxpPXt9O2lmKHIpe3ZhciBhPWUuY2hpbGRyZW4sbz1hLmluZGV4T2YodCkscz1hLmxlbmd0aCxsPW4uaW50ZXJwb2xhdGUoci54MCxyLngxKTtpLngwPWwoby9zKSxpLngxPWwoby9zKX1lbHNlIGkueDA9aS54MT0wO3JldHVybiBpfXUmJihXPVcudHJhbnNpdGlvbigpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtUKG4uc2VsZWN0KHRoaXMpLHQse2lzVHJhbnNpdGlvbmluZzohMX0pfSkpLFcuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPWMuZW5zdXJlU2luZ2xlKGksInBhdGgiLCJzdXJmYWNlIixmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSk7ci5ycHgwPWooci55MCksci5ycHgxPWooci55MSksci54bWlkPShyLngwK3IueDEpLzIsci5weG1pZD1WKHIucnB4MSxyLnhtaWQpLHIubWlkYW5nbGU9LShyLnhtaWQtTWF0aC5QSS8yKSxyLmhhbGZhbmdsZT0uNSpNYXRoLm1pbihjLmFuZ2xlRGVsdGEoci54MCxyLngxKXx8TWF0aC5QSSxNYXRoLlBJKSxyLnJpbmc9MS1yLnJweDAvci5ycHgxLHIuckluc2NyaWJlZD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQucnB4MCYmdC54bWlkPT09TWF0aC5QST8xOk1hdGgubWF4KDAsTWF0aC5taW4oMS8oMSsxL01hdGguc2luKHQuaGFsZmFuZ2xlKSksdC5yaW5nLzIpKX0ociksdT9hLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9RFtrKHQpXSxpPXt4MDp0LngwLHgxOnQueDEscnB4MDp0LnJweDAscnB4MTp0LnJweDF9O2lmKHIpZT1yO2Vsc2UgaWYoSSlpZih0LnBhcmVudClpZihHKXt2YXIgYT10LngxPkc/MipNYXRoLlBJOjA7ZT17eDA6YSx4MTphfX1lbHNlIGU9e3JweDA6TCxycHgxOkx9LGMuZXh0ZW5kRmxhdChlLFgodCkpO2Vsc2UgZT17cnB4MDowLHJweDE6MH07ZWxzZSBlPXt4MDowLHgxOjB9O3JldHVybiBuLmludGVycG9sYXRlKGUsaSl9KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShlKHQpKX19KTphLmF0dHIoImQiLFUpLGkuY2FsbChBLHQsZSkuY2FsbChULHQse2lzVHJhbnNpdGlvbmluZzp0Ll90cmFuc2l0aW9uaW5nfSksYS5jYWxsKHYscixtKTt2YXIgaD1jLmVuc3VyZVNpbmdsZShpLCJnIiwic2xpY2V0ZXh0IikseT1jLmVuc3VyZVNpbmdsZShoLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSk7eS50ZXh0KGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnRleHRpbmZvO2lmKCFufHwibm9uZSI9PT1uKXJldHVybiIiO3ZhciBpPXQuZGF0YS5kYXRhLGE9ci5zZXBhcmF0b3JzLG89bi5zcGxpdCgiKyIpLHM9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1vLmluZGV4T2YodCl9LGw9W107cygibGFiZWwiKSYmaS5sYWJlbCYmbC5wdXNoKGkubGFiZWwpO2kuaGFzT3duUHJvcGVydHkoInYiKSYmcygidmFsdWUiKSYmbC5wdXNoKGcoaS52LGEpKTtpZihzKCJ0ZXh0Iikpe3ZhciB1PWMuY2FzdE9wdGlvbihlLGkuaSwidGV4dCIpO3UmJmwucHVzaCh1KX1yZXR1cm4gbC5qb2luKCI8YnI+Iil9KHIsbSxvKSkuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGwuZm9udCxiKHIpP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YS5pLGk9Yy5jYXN0T3B0aW9uKHQsbiwib3V0c2lkZXRleHRmb250LmNvbG9yIil8fGMuY2FzdE9wdGlvbih0LG4sInRleHRmb250LmNvbG9yIil8fHIuY29sb3IsYT1jLmNhc3RPcHRpb24odCxuLCJvdXRzaWRldGV4dGZvbnQuZmFtaWx5Iil8fGMuY2FzdE9wdGlvbih0LG4sInRleHRmb250LmZhbWlseSIpfHxyLmZhbWlseSxvPWMuY2FzdE9wdGlvbih0LG4sIm91dHNpZGV0ZXh0Zm9udC5zaXplIil8fGMuY2FzdE9wdGlvbih0LG4sInRleHRmb250LnNpemUiKXx8ci5zaXplO3JldHVybntjb2xvcjppLGZhbWlseTphLHNpemU6b319KG0scixvLmZvbnQpOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YSxpPW4uaSxhPWMuY2FzdE9wdGlvbih0LGksImluc2lkZXRleHRmb250LmNvbG9yIik7IWEmJnQuX2lucHV0LnRleHRmb250JiYoYT1jLmNhc3RPcHRpb24odC5faW5wdXQsaSwidGV4dGZvbnQuY29sb3IiKSk7dmFyIG89Yy5jYXN0T3B0aW9uKHQsaSwiaW5zaWRldGV4dGZvbnQuZmFtaWx5Iil8fGMuY2FzdE9wdGlvbih0LGksInRleHRmb250LmZhbWlseSIpfHxyLmZhbWlseSxsPWMuY2FzdE9wdGlvbih0LGksImluc2lkZXRleHRmb250LnNpemUiKXx8Yy5jYXN0T3B0aW9uKHQsaSwidGV4dGZvbnQuc2l6ZSIpfHxyLnNpemU7cmV0dXJue2NvbG9yOmF8fHMuY29udHJhc3Qobi5jb2xvciksZmFtaWx5Om8sc2l6ZTpsfX0obSxyLG8uZm9udCkpLmNhbGwoZi5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHg9bC5iQm94KHkubm9kZSgpKTtyLnRyYW5zZm9ybT1kKHgscixwKSxyLnRyYW5zbGF0ZVg9cShyKSxyLnRyYW5zbGF0ZVk9SChyKTt2YXIgXz1mdW5jdGlvbih0LGUpe3JldHVybiJ0cmFuc2xhdGUoIit0LnRyYW5zbGF0ZVgrIiwiK3QudHJhbnNsYXRlWSsiKSIrKHQudHJhbnNmb3JtLnNjYWxlPDE/InNjYWxlKCIrdC50cmFuc2Zvcm0uc2NhbGUrIikiOiIiKSsodC50cmFuc2Zvcm0ucm90YXRlPyJyb3RhdGUoIit0LnRyYW5zZm9ybS5yb3RhdGUrIikiOiIiKSsidHJhbnNsYXRlKCIrLShlLmxlZnQrZS5yaWdodCkvMisiLCIrLShlLnRvcCtlLmJvdHRvbSkvMisiKSJ9O3U/eS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9RFtrKHQpXSxpPXQudHJhbnNmb3JtO2lmKHIpZT1yO2Vsc2UgaWYoZT17cnB4MTp0LnJweDEsdHJhbnNmb3JtOntzY2FsZTowLHJvdGF0ZTppLnJvdGF0ZSxyQ2VudGVyOmkuckNlbnRlcix4OmkueCx5OmkueX19LEkpaWYodC5wYXJlbnQpaWYoRyl7dmFyIGE9dC54MT5HPzIqTWF0aC5QSTowO2UueDA9ZS54MT1hfWVsc2UgYy5leHRlbmRGbGF0KGUsWCh0KSk7ZWxzZSBlLngwPWUueDE9MDtlbHNlIGUueDA9ZS54MT0wO3ZhciBvPW4uaW50ZXJwb2xhdGUoZS5ycHgxLHQucnB4MSkscz1uLmludGVycG9sYXRlKGUueDAsdC54MCksbD1uLmludGVycG9sYXRlKGUueDEsdC54MSksdT1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnNjYWxlLGkuc2NhbGUpLGY9bi5pbnRlcnBvbGF0ZShlLnRyYW5zZm9ybS5yb3RhdGUsaS5yb3RhdGUpLGg9MD09PWkuckNlbnRlcj8zOjA9PT1lLnRyYW5zZm9ybS5yQ2VudGVyPzEvMzoxLHA9bi5pbnRlcnBvbGF0ZShlLnRyYW5zZm9ybS5yQ2VudGVyLGkuckNlbnRlcik7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPW8odCkscj1zKHQpLG49bCh0KSxhPWZ1bmN0aW9uKHQpe3JldHVybiBwKE1hdGgucG93KHQsaCkpfSh0KSxjPXtweG1pZDpWKGUsKHIrbikvMiksdHJhbnNmb3JtOntyQ2VudGVyOmEseDppLngseTppLnl9fSxkPXtycHgxOm8odCksdHJhbnNsYXRlWDpxKGMpLHRyYW5zbGF0ZVk6SChjKSx0cmFuc2Zvcm06e3NjYWxlOnUodCkscm90YXRlOmYodCksckNlbnRlcjphfX07cmV0dXJuIGR9fSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSx4KX19KTp5LmF0dHIoInRyYW5zZm9ybSIsXyhyLHgpKX0pfWZ1bmN0aW9uIHgodCxlKXt2YXIgcjtyZXR1cm4gZSYmdC5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7aWYoayh0KT09PWUpcmV0dXJuIHI9dC5jb3B5KCl9KSxyfHx0fWZ1bmN0aW9uIGIodCl7cmV0dXJuIiI9PT10LmRhdGEuZGF0YS5waWR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4hdC5wYXJlbnR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4hdC5jaGlsZHJlbn1mdW5jdGlvbiBrKHQpe3JldHVybiB0LmRhdGEuZGF0YS5pZH1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgbj10LmRhdHVtKCksaT0ocnx8e30pLmlzVHJhbnNpdGlvbmluZztoKHQsaXx8dyhuKXx8YihuKT9udWxsOiJwb2ludGVyIil9ZnVuY3Rpb24gQSh0LGUscil7dmFyIGk9clswXSxzPWkudHJhY2U7Il9oYXNIb3ZlckxhYmVsImluIHN8fChzLl9oYXNIb3ZlckxhYmVsPSExKSwiX2hhc0hvdmVyRXZlbnQiaW4gc3x8KHMuX2hhc0hvdmVyRXZlbnQ9ITEpLHQub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dDtpZighZS5fZHJhZ2dpbmcmJiExIT09ci5ob3Zlcm1vZGUpe3ZhciBhPWUuX2Z1bGxEYXRhW3MuaW5kZXhdLGw9dC5kYXRhLmRhdGEsdT1sLmksZj1mdW5jdGlvbih0KXtyZXR1cm4gYy5jYXN0T3B0aW9uKGEsdSx0KX0saD1mKCJob3ZlcnRlbXBsYXRlIikscD1vLmNhc3RIb3ZlcmluZm8oYSxyLHUpLGQ9ci5zZXBhcmF0b3JzO2lmKGh8fHAmJiJub25lIiE9PXAmJiJza2lwIiE9PXApe3ZhciB2PXQuckluc2NyaWJlZCxtPWkuY3grdC5weG1pZFswXSooMS12KSx5PWkuY3krdC5weG1pZFsxXSooMS12KSx4PXt9LGI9W10sXz1bXSx3PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Yi5pbmRleE9mKHQpfTtwJiYoYj0iYWxsIj09PXA/YS5fbW9kdWxlLmF0dHJpYnV0ZXMuaG92ZXJpbmZvLmZsYWdzOnAuc3BsaXQoIisiKSkseC5sYWJlbD1sLmxhYmVsLHcoImxhYmVsIikmJngubGFiZWwmJl8ucHVzaCh4LmxhYmVsKSxsLmhhc093blByb3BlcnR5KCJ2IikmJih4LnZhbHVlPWwudix4LnZhbHVlTGFiZWw9Zyh4LnZhbHVlLGQpLHcoInZhbHVlIikmJl8ucHVzaCh4LnZhbHVlTGFiZWwpKSx4LnRleHQ9ZigiaG92ZXJ0ZXh0Iil8fGYoInRleHQiKSx3KCJ0ZXh0IikmJngudGV4dCYmXy5wdXNoKHgudGV4dCksby5sb25lSG92ZXIoe3gwOm0tdip0LnJweDEseDE6bSt2KnQucnB4MSx5OnksaWRlYWxBbGlnbjp0LnB4bWlkWzBdPDA/ImxlZnQiOiJyaWdodCIsdHJhY2U6YSx0ZXh0Ol8uam9pbigiPGJyPiIpLG5hbWU6aHx8dygibmFtZSIpP2EubmFtZTp2b2lkIDAsY29sb3I6ZigiaG92ZXJsYWJlbC5iZ2NvbG9yIil8fGwuY29sb3IsYm9yZGVyQ29sb3I6ZigiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6ZigiaG92ZXJsYWJlbC5mb250LmZhbWlseSIpLGZvbnRTaXplOmYoImhvdmVybGFiZWwuZm9udC5zaXplIiksZm9udENvbG9yOmYoImhvdmVybGFiZWwuZm9udC5jb2xvciIpLGhvdmVydGVtcGxhdGU6aCxob3ZlcnRlbXBsYXRlTGFiZWxzOngsZXZlbnREYXRhOltNKHQsYSldfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDplfSkscy5faGFzSG92ZXJMYWJlbD0hMH1zLl9oYXNIb3ZlckV2ZW50PSEwLGUuZW1pdCgicGxvdGx5X2hvdmVyIix7cG9pbnRzOltNKHQsYSldLGV2ZW50Om4uZXZlbnR9KX19KSx0Lm9uKCJtb3VzZW91dCIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxpPWUuX2Z1bGxEYXRhW3MuaW5kZXhdLGE9bi5zZWxlY3QodGhpcykuZGF0dW0oKTtzLl9oYXNIb3ZlckV2ZW50JiYodC5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsZS5lbWl0KCJwbG90bHlfdW5ob3ZlciIse3BvaW50czpbTShhLGkpXSxldmVudDpuLmV2ZW50fSkscy5faGFzSG92ZXJFdmVudD0hMSkscy5faGFzSG92ZXJMYWJlbCYmKG8ubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpLHMuX2hhc0hvdmVyTGFiZWw9ITEpfSksdC5vbigiY2xpY2siLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsbD1lLl9mdWxsRGF0YVtzLmluZGV4XTtpZighMT09PXUudHJpZ2dlckhhbmRsZXIoZSwicGxvdGx5X3N1bmJ1cnN0Y2xpY2siLHtwb2ludHM6W00odCxsKV0sZXZlbnQ6bi5ldmVudH0pfHx3KHQpfHxiKHQpKXIuaG92ZXJtb2RlJiYoZS5faG92ZXJkYXRhPVtNKHQsbCldLG8uY2xpY2soZSxuLmV2ZW50KSk7ZWxzZSBpZighZS5fZHJhZ2dpbmcmJiFlLl90cmFuc2l0aW9uaW5nKXthLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLGwsci5fdHJhY2VQcmVHVUlbbC51aWRdLHtsZXZlbDpsLmxldmVsfSk7dmFyIGM9aS5oaWVyYXJjaHksZj1rKHQpLGg9Xyh0KT9mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiB0LmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIG49dC5jaGlsZHJlbnx8W10saT0wO2k8bi5sZW5ndGg7aSsrKWlmKGsobltpXSk9PT1lKXJldHVybiByPXQuY29weSgpfSkscnx8dH0oYyxmKTp4KGMsZikscD17ZGF0YTpbe2xldmVsOmsoaCl9XSx0cmFjZXM6W3MuaW5kZXhdfSxkPXtmcmFtZTp7cmVkcmF3OiExLGR1cmF0aW9uOm0uQ0xJQ0tfVFJBTlNJVElPTl9USU1FfSx0cmFuc2l0aW9uOntkdXJhdGlvbjptLkNMSUNLX1RSQU5TSVRJT05fVElNRSxlYXNpbmc6bS5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30sbW9kZToiaW1tZWRpYXRlIixmcm9tY3VycmVudDohMH07by5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSksYS5jYWxsKCJhbmltYXRlIixlLHAsZCl9fSl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXQuZGF0YS5kYXRhLG49e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6ci5pLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZX07cmV0dXJuIHAobixlLHIuaSksbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzPXQuX2Z1bGxMYXlvdXQuX3N1bmJ1cnN0bGF5ZXIsbD0hcixjPXImJnIuZHVyYXRpb24+MDsoKGE9cy5zZWxlY3RBbGwoImcudHJhY2Uuc3VuYnVyc3QiKS5kYXRhKGUsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidHJhY2UiLCEwKS5jbGFzc2VkKCJzdW5idXJzdCIsITApLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIiksYS5vcmRlcigpLGMpPyhpJiYobz1pKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtvJiZvKCl9KS5lYWNoKCJpbnRlcnJ1cHQiLGZ1bmN0aW9uKCl7byYmbygpfSkuZWFjaChmdW5jdGlvbigpe3Muc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaChmdW5jdGlvbihlKXt5KHQsZSx0aGlzLHIpfSl9KSk6YS5lYWNoKGZ1bmN0aW9uKGUpe3kodCxlLHRoaXMscil9KTtsJiZhLmV4aXQoKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vY29tcG9uZW50cy9meCI6NjE2LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjYxMiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9ldmVudHMiOjY4OSwiLi4vLi4vbGliL3NldGN1cnNvciI6NzIwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcyNCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vcGllL2hlbHBlcnMiOjEwMzEsIi4uL3BpZS9wbG90IjoxMDM1LCIuL2NvbnN0YW50cyI6MTE0MSwiLi9zdHlsZSI6MTE0NyxkMzoxNTQsImQzLWhpZXJhcmNoeSI6MTQ3fV0sMTE0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49ZS5kYXRhLmRhdGEsbz0hZS5jaGlsZHJlbixzPW4uaSxsPWEuY2FzdE9wdGlvbihyLHMsIm1hcmtlci5saW5lLmNvbG9yIil8fGkuZGVmYXVsdExpbmUsYz1hLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS53aWR0aCIpfHwwO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsYykuY2FsbChpLmZpbGwsbi5jb2xvcikuY2FsbChpLnN0cm9rZSxsKS5zdHlsZSgib3BhY2l0eSIsbz9yLmxlYWYub3BhY2l0eTpudWxsKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3N1bmJ1cnN0bGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZTtlLnN0eWxlKCJvcGFjaXR5IixyLm9wYWNpdHkpLGUuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwobyx0LHIpfSl9KX0sc3R5bGVPbmU6b319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9saWIiOjcwMCxkMzoxNTR9XSwxMTQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtmdW5jdGlvbiB1KHQpe3JldHVybntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxwcm9qZWN0Ont4Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx6Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHVzZWNvbG9ybWFwOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfSxoaWdobGlnaHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGhpZ2hsaWdodGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxoaWdobGlnaHR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfX19dmFyIGY9ZS5leHBvcnRzPWMobCh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6bygpLGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGkoIiIse2NvbG9yQXR0cjoieiBvciBzdXJmYWNlY29sb3IiLHNob3dTY2FsZURmbHQ6ITAsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjphLGNvbnRvdXJzOnt4OnUoKSx5OnUoKSx6OnUoKX0saGlkZXN1cmZhY2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxpZ2h0cG9zaXRpb246e3g6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjEwfSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxZTR9LHo6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjB9fSxsaWdodGluZzp7YW1iaWVudDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxkaWZmdXNlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6Ljh9LHNwZWN1bGFyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoyLGRmbHQ6LjA1fSxyb3VnaG5lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNX0sZnJlc25lbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6NSxkZmx0Oi4yfX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LF9kZXByZWNhdGVkOnt6YXV0bzpsKHt9LGkuemF1dG8se30pLHptaW46bCh7fSxpLnptaW4se30pLHptYXg6bCh7fSxpLnptYXgse30pfSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyl9KSwiY2FsYyIsIm5lc3RlZCIpO2YueC5lZGl0VHlwZT1mLnkuZWRpdFR5cGU9Zi56LmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIixmLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1ODQsIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MTUsIi4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDV9XSwxMTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bih0LGUse3ZhbHM6ZS5zdXJmYWNlY29sb3IsY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSk6bih0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1fV0sMTE1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdXJmYWNlM2QiKSxpPXQoIm5kYXJyYXkiKSxhPXQoIm5kYXJyYXktaG9tb2dyYXBoeSIpLG89dCgibmRhcnJheS1maWxsIikscz10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGw9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxjPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSx1PXQoIi4uL2hlYXRtYXAvaW50ZXJwMmQiKSxmPXQoIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIik7ZnVuY3Rpb24gaCh0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5zdXJmYWNlPWUsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj1bITEsITEsITFdLHRoaXMubWluVmFsdWVzPVsxLzAsMS8wLDEvMF0sdGhpcy5tYXhWYWx1ZXM9Wy0xLzAsLTEvMCwtMS8wXSx0aGlzLmRhdGFTY2FsZVg9MSx0aGlzLmRhdGFTY2FsZVk9MSx0aGlzLnJlZmluZURhdGE9ITAsdGhpcy5faW50ZXJwb2xhdGVkWj0hMX12YXIgcD1oLnByb3RvdHlwZTtwLmdldFhhdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1zKHRoaXMuZGF0YS54KT9zKHRoaXMuZGF0YS54WzBdKT90aGlzLmRhdGEueFtlXVt0XTp0aGlzLmRhdGEueFt0XTp0O3JldHVybiB2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmdldFlhdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1zKHRoaXMuZGF0YS55KT9zKHRoaXMuZGF0YS55WzBdKT90aGlzLmRhdGEueVtlXVt0XTp0aGlzLmRhdGEueVtlXTplO3JldHVybiB2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmdldFphdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmRhdGEueltlXVt0XTtyZXR1cm4gbnVsbD09PWkmJnRoaXMuZGF0YS5jb25uZWN0Z2FwcyYmdGhpcy5kYXRhLl9pbnRlcnBvbGF0ZWRaJiYoaT10aGlzLmRhdGEuX2ludGVycG9sYXRlZFpbZV1bdF0pLHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMuc3VyZmFjZSl7dmFyIGU9KHQuZGF0YS5pbmRleFswXS0xKS90aGlzLmRhdGFTY2FsZVgtMSxyPSh0LmRhdGEuaW5kZXhbMV0tMSkvdGhpcy5kYXRhU2NhbGVZLTEsbj1NYXRoLm1heChNYXRoLm1pbihNYXRoLnJvdW5kKGUpLHRoaXMuZGF0YS56WzBdLmxlbmd0aC0xKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKE1hdGgucm91bmQociksdGhpcy5kYXRhLl95bGVuZ3RoLTEpLDApO3QuaW5kZXg9W24saV0sdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZ2V0WGF0KG4saSksdGhpcy5nZXRZYXQobixpKSx0aGlzLmdldFphdChuLGkpXSx0LmRhdGFDb29yZGluYXRlPVt0aGlzLmdldFhhdChuLGksdGhpcy5kYXRhLnhjYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC54YXhpcyksdGhpcy5nZXRZYXQobixpLHRoaXMuZGF0YS55Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQueWF4aXMpLHRoaXMuZ2V0WmF0KG4saSx0aGlzLmRhdGEuemNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnpheGlzKV07Zm9yKHZhciBhPTA7YTwzO2ErKyl7dmFyIG89dC5kYXRhQ29vcmRpbmF0ZVthXTtudWxsIT1vJiYodC5kYXRhQ29vcmRpbmF0ZVthXSo9dGhpcy5zY2VuZS5kYXRhU2NhbGVbYV0pfXZhciBzPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KHMpJiZzW2ldJiZ2b2lkIDAhPT1zW2ldW25dP3QudGV4dExhYmVsPXNbaV1bbl06dC50ZXh0TGFiZWw9c3x8IiIsdC5kYXRhLmRhdGFDb29yZGluYXRlPXQuZGF0YUNvb3JkaW5hdGUuc2xpY2UoKSx0aGlzLnN1cmZhY2UuaGlnaGxpZ2h0KHQuZGF0YSksdGhpcy5zY2VuZS5nbHBsb3Quc3Bpa2VzLnBvc2l0aW9uPXQuZGF0YUNvb3JkaW5hdGUsITB9fTt2YXIgZD1bMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3LDEwMDksMTAxMywxMDE5LDEwMjEsMTAzMSwxMDMzLDEwMzksMTA0OSwxMDUxLDEwNjEsMTA2MywxMDY5LDEwODcsMTA5MSwxMDkzLDEwOTcsMTEwMywxMTA5LDExMTcsMTEyMywxMTI5LDExNTEsMTE1MywxMTYzLDExNzEsMTE4MSwxMTg3LDExOTMsMTIwMSwxMjEzLDEyMTcsMTIyMywxMjI5LDEyMzEsMTIzNywxMjQ5LDEyNTksMTI3NywxMjc5LDEyODMsMTI4OSwxMjkxLDEyOTcsMTMwMSwxMzAzLDEzMDcsMTMxOSwxMzIxLDEzMjcsMTM2MSwxMzY3LDEzNzMsMTM4MSwxMzk5LDE0MDksMTQyMywxNDI3LDE0MjksMTQzMywxNDM5LDE0NDcsMTQ1MSwxNDUzLDE0NTksMTQ3MSwxNDgxLDE0ODMsMTQ4NywxNDg5LDE0OTMsMTQ5OSwxNTExLDE1MjMsMTUzMSwxNTQzLDE1NDksMTU1MywxNTU5LDE1NjcsMTU3MSwxNTc5LDE1ODMsMTU5NywxNjAxLDE2MDcsMTYwOSwxNjEzLDE2MTksMTYyMSwxNjI3LDE2MzcsMTY1NywxNjYzLDE2NjcsMTY2OSwxNjkzLDE2OTcsMTY5OSwxNzA5LDE3MjEsMTcyMywxNzMzLDE3NDEsMTc0NywxNzUzLDE3NTksMTc3NywxNzgzLDE3ODcsMTc4OSwxODAxLDE4MTEsMTgyMywxODMxLDE4NDcsMTg2MSwxODY3LDE4NzEsMTg3MywxODc3LDE4NzksMTg4OSwxOTAxLDE5MDcsMTkxMywxOTMxLDE5MzMsMTk0OSwxOTUxLDE5NzMsMTk3OSwxOTg3LDE5OTMsMTk5NywxOTk5LDIwMDMsMjAxMSwyMDE3LDIwMjcsMjAyOSwyMDM5LDIwNTMsMjA2MywyMDY5LDIwODEsMjA4MywyMDg3LDIwODksMjA5OSwyMTExLDIxMTMsMjEyOSwyMTMxLDIxMzcsMjE0MSwyMTQzLDIxNTMsMjE2MSwyMTc5LDIyMDMsMjIwNywyMjEzLDIyMjEsMjIzNywyMjM5LDIyNDMsMjI1MSwyMjY3LDIyNjksMjI3MywyMjgxLDIyODcsMjI5MywyMjk3LDIzMDksMjMxMSwyMzMzLDIzMzksMjM0MSwyMzQ3LDIzNTEsMjM1NywyMzcxLDIzNzcsMjM4MSwyMzgzLDIzODksMjM5MywyMzk5LDI0MTEsMjQxNywyNDIzLDI0MzcsMjQ0MSwyNDQ3LDI0NTksMjQ2NywyNDczLDI0NzcsMjUwMywyNTIxLDI1MzEsMjUzOSwyNTQzLDI1NDksMjU1MSwyNTU3LDI1NzksMjU5MSwyNTkzLDI2MDksMjYxNywyNjIxLDI2MzMsMjY0NywyNjU3LDI2NTksMjY2MywyNjcxLDI2NzcsMjY4MywyNjg3LDI2ODksMjY5MywyNjk5LDI3MDcsMjcxMSwyNzEzLDI3MTksMjcyOSwyNzMxLDI3NDEsMjc0OSwyNzUzLDI3NjcsMjc3NywyNzg5LDI3OTEsMjc5NywyODAxLDI4MDMsMjgxOSwyODMzLDI4MzcsMjg0MywyODUxLDI4NTcsMjg2MSwyODc5LDI4ODcsMjg5NywyOTAzLDI5MDksMjkxNywyOTI3LDI5MzksMjk1MywyOTU3LDI5NjMsMjk2OSwyOTcxLDI5OTldO2Z1bmN0aW9uIGcodCxlKXtpZih0PGUpcmV0dXJuIDA7Zm9yKHZhciByPTA7MD09PU1hdGguZmxvb3IodCVlKTspdC89ZSxyKys7cmV0dXJuIHJ9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9W10scj0wO3I8ZC5sZW5ndGg7cisrKXt2YXIgbj1kW3JdO2UucHVzaChnKHQsbikpfXJldHVybiBlfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPXYodCkscj10LG49MDtuPGQubGVuZ3RoO24rKylpZihlW25dPjApe3I9ZFtuXTticmVha31yZXR1cm4gcn1mdW5jdGlvbiB5KHQsZSl7aWYoISh0PDF8fGU8MSkpe2Zvcih2YXIgcj12KHQpLG49dihlKSxpPTEsYT0wO2E8ZC5sZW5ndGg7YSsrKWkqPU1hdGgucG93KGRbYV0sTWF0aC5tYXgoclthXSxuW2FdKSk7cmV0dXJuIGl9fXAuY2FsY1hudW1zPWZ1bmN0aW9uKHQpe3ZhciBlLHI9W107Zm9yKGU9MTtlPHQ7ZSsrKXt2YXIgbj10aGlzLmdldFhhdChlLTEsMCksaT10aGlzLmdldFhhdChlLDApO3JbZS0xXT1pIT09biYmbnVsbCE9biYmbnVsbCE9aT9NYXRoLmFicyhpLW4pOjB9dmFyIGE9MDtmb3IoZT0xO2U8dDtlKyspYSs9cltlLTFdO2ZvcihlPTE7ZTx0O2UrKykwPT09cltlLTFdP3JbZS0xXT0xOnJbZS0xXT1NYXRoLnJvdW5kKGEvcltlLTFdKTtyZXR1cm4gcn0scC5jYWxjWW51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WWF0KDAsZS0xKSxpPXRoaXMuZ2V0WWF0KDAsZSk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfTt2YXIgeD1bMSwyLDQsNiwxMiwyNCwzNiw0OCw2MCwxMjAsMTgwLDI0MCwzNjAsNzIwLDg0MCwxMjYwXSxiPXhbOV0sXz14WzEzXTtwLmVzdGltYXRlU2NhbGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MStmdW5jdGlvbih0KXtpZigwIT09dC5sZW5ndGgpe2Zvcih2YXIgZT0xLHI9MDtyPHQubGVuZ3RoO3IrKyllPXkoZSx0W3JdKTtyZXR1cm4gZX19KDA9PT1lP3RoaXMuY2FsY1hudW1zKHQpOnRoaXMuY2FsY1ludW1zKHQpKTtyPGI7KXIqPTI7Zm9yKDtyPl87KXItLSxyLz1tKHIpLCsrcjxiJiYocj1fKTt2YXIgbj1NYXRoLnJvdW5kKHIvdCk7cmV0dXJuIG4+MT9uOjF9LHAucmVmaW5lQ29vcmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGFTY2FsZVgscj10aGlzLmRhdGFTY2FsZVksbj10WzBdLnNoYXBlWzBdLG89dFswXS5zaGFwZVsxXSxzPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzBdKmUrMSksbD0wfE1hdGguZmxvb3IodFswXS5zaGFwZVsxXSpyKzEpLGM9MStuKzEsdT0xK28rMSxmPWkobmV3IEZsb2F0MzJBcnJheShjKnUpLFtjLHVdKSxoPTA7aDx0Lmxlbmd0aDsrK2gpe3RoaXMuc3VyZmFjZS5wYWRGaWVsZChmLHRbaF0pO3ZhciBwPWkobmV3IEZsb2F0MzJBcnJheShzKmwpLFtzLGxdKTthKHAsZixbZSwwLDAsMCxyLDAsMCwwLDFdKSx0W2hdPXB9fSxwLnNldENvbnRvdXJMZXZlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W1tdLFtdLFtdXSxlPSExLHI9MDtyPDM7KytyKXRoaXMuc2hvd0NvbnRvdXJbcl0mJihlPSEwLHRbcl09dGhpcy5zY2VuZS5jb250b3VyTGV2ZWxzW3JdKTtlJiZ0aGlzLnN1cmZhY2UudXBkYXRlKHtsZXZlbHM6dH0pfSxwLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxzPXRoaXMuc2NlbmUsaD1zLmZ1bGxTY2VuZUxheW91dCxwPXRoaXMuc3VyZmFjZSxkPXQub3BhY2l0eSxnPWwodCxkKSx2PXMuZGF0YVNjYWxlLG09dC56WzBdLmxlbmd0aCx5PXQuX3lsZW5ndGgseD1zLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIGI9W107Zm9yKGU9MDtlPDM7ZSsrKWZvcihiW2VdPVtdLHI9MDtyPG07cisrKWJbZV1bcl09W107Zm9yKHI9MDtyPG07cisrKWZvcihuPTA7bjx5O24rKyliWzBdW3JdW25dPXRoaXMuZ2V0WGF0KHIsbix0LnhjYWxlbmRhcixoLnhheGlzKSxiWzFdW3JdW25dPXRoaXMuZ2V0WWF0KHIsbix0LnljYWxlbmRhcixoLnlheGlzKSxiWzJdW3JdW25dPXRoaXMuZ2V0WmF0KHIsbix0LnpjYWxlbmRhcixoLnpheGlzKTtpZih0LmNvbm5lY3RnYXBzKWZvcih0Ll9lbXB0eXBvaW50cz1mKGJbMl0pLHUoYlsyXSx0Ll9lbXB0eXBvaW50cyksdC5faW50ZXJwb2xhdGVkWj1bXSxyPTA7cjxtO3IrKylmb3IodC5faW50ZXJwb2xhdGVkWltyXT1bXSxuPTA7bjx5O24rKyl0Ll9pbnRlcnBvbGF0ZWRaW3JdW25dPWJbMl1bcl1bbl07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248eTtuKyspbnVsbD09KGE9YltlXVtyXVtuXSk/YltlXVtyXVtuXT1OYU46YT1iW2VdW3JdW25dKj12W2VdO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHk7bisrKW51bGwhPShhPWJbZV1bcl1bbl0pJiYodGhpcy5taW5WYWx1ZXNbZV0+YSYmKHRoaXMubWluVmFsdWVzW2VdPWEpLHRoaXMubWF4VmFsdWVzW2VdPGEmJih0aGlzLm1heFZhbHVlc1tlXT1hKSk7Zm9yKGU9MDtlPDM7ZSsrKXQuX29iamVjdE9mZnNldFtlXT0uNSoodGhpcy5taW5WYWx1ZXNbZV0rdGhpcy5tYXhWYWx1ZXNbZV0pO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHk7bisrKW51bGwhPShhPWJbZV1bcl1bbl0pJiYoYltlXVtyXVtuXS09dC5fb2JqZWN0T2Zmc2V0W2VdKTt2YXIgdz1baShuZXcgRmxvYXQzMkFycmF5KG0qeSksW20seV0pLGkobmV3IEZsb2F0MzJBcnJheShtKnkpLFttLHldKSxpKG5ldyBGbG9hdDMyQXJyYXkobSp5KSxbbSx5XSldO28od1swXSxmdW5jdGlvbih0LGUpe3JldHVybiBiWzBdW3RdW2VdfSksbyh3WzFdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJbMV1bdF1bZV19KSxvKHdbMl0sZnVuY3Rpb24odCxlKXtyZXR1cm4gYlsyXVt0XVtlXX0pLGI9W107dmFyIGs9e2NvbG9ybWFwOmcsbGV2ZWxzOltbXSxbXSxbXV0sc2hvd0NvbnRvdXI6WyEwLCEwLCEwXSxzaG93U3VyZmFjZTohdC5oaWRlc3VyZmFjZSxjb250b3VyUHJvamVjdDpbWyExLCExLCExXSxbITEsITEsITFdLFshMSwhMSwhMV1dLGNvbnRvdXJXaWR0aDpbMSwxLDFdLGNvbnRvdXJDb2xvcjpbWzEsMSwxLDFdLFsxLDEsMSwxXSxbMSwxLDEsMV1dLGNvbnRvdXJUaW50OlsxLDEsMV0sZHluYW1pY0NvbG9yOltbMSwxLDEsMV0sWzEsMSwxLDFdLFsxLDEsMSwxXV0sZHluYW1pY1dpZHRoOlsxLDEsMV0sZHluYW1pY1RpbnQ6WzEsMSwxXSxvcGFjaXR5OnQub3BhY2l0eX07aWYoay5pbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHQuc3VyZmFjZWNvbG9yKXt2YXIgVD1pKG5ldyBGbG9hdDMyQXJyYXkobSp5KSxbbSx5XSk7byhULGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc3VyZmFjZWNvbG9yW3JdW2VdfSksdy5wdXNoKFQpfWVsc2Ugay5pbnRlbnNpdHlCb3VuZHNbMF0qPXZbMl0say5pbnRlbnNpdHlCb3VuZHNbMV0qPXZbMl07KF88d1swXS5zaGFwZVswXXx8Xzx3WzBdLnNoYXBlWzFdKSYmKHRoaXMucmVmaW5lRGF0YT0hMSksITA9PT10aGlzLnJlZmluZURhdGEmJih0aGlzLmRhdGFTY2FsZVg9dGhpcy5lc3RpbWF0ZVNjYWxlKHdbMF0uc2hhcGVbMF0sMCksdGhpcy5kYXRhU2NhbGVZPXRoaXMuZXN0aW1hdGVTY2FsZSh3WzBdLnNoYXBlWzFdLDEpLDE9PT10aGlzLmRhdGFTY2FsZVgmJjE9PT10aGlzLmRhdGFTY2FsZVl8fHRoaXMucmVmaW5lQ29vcmRzKHcpKSx0LnN1cmZhY2Vjb2xvciYmKGsuaW50ZW5zaXR5PXcucG9wKCkpO3ZhciBBPVshMCwhMCwhMF0sTT1bIngiLCJ5IiwieiJdO2ZvcihlPTA7ZTwzOysrZSl7dmFyIFM9dC5jb250b3Vyc1tNW2VdXTtBW2VdPVMuaGlnaGxpZ2h0LGsuc2hvd0NvbnRvdXJbZV09Uy5zaG93fHxTLmhpZ2hsaWdodCxrLnNob3dDb250b3VyW2VdJiYoay5jb250b3VyUHJvamVjdFtlXT1bUy5wcm9qZWN0LngsUy5wcm9qZWN0LnksUy5wcm9qZWN0LnpdLFMuc2hvdz8odGhpcy5zaG93Q29udG91cltlXT0hMCxrLmxldmVsc1tlXT14W2VdLHAuaGlnaGxpZ2h0Q29sb3JbZV09ay5jb250b3VyQ29sb3JbZV09YyhTLmNvbG9yKSxTLnVzZWNvbG9ybWFwP3AuaGlnaGxpZ2h0VGludFtlXT1rLmNvbnRvdXJUaW50W2VdPTA6cC5oaWdobGlnaHRUaW50W2VdPWsuY29udG91clRpbnRbZV09MSxrLmNvbnRvdXJXaWR0aFtlXT1TLndpZHRoKTp0aGlzLnNob3dDb250b3VyW2VdPSExLFMuaGlnaGxpZ2h0JiYoay5keW5hbWljQ29sb3JbZV09YyhTLmhpZ2hsaWdodGNvbG9yKSxrLmR5bmFtaWNXaWR0aFtlXT1TLmhpZ2hsaWdodHdpZHRoKSl9KGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0ucmdiLHI9dFt0Lmxlbmd0aC0xXS5yZ2I7cmV0dXJuIGVbMF09PT1yWzBdJiZlWzFdPT09clsxXSYmZVsyXT09PXJbMl0mJmVbM109PT1yWzNdfSkoZykmJihrLnZlcnRleENvbG9yPSEwKSxrLm9iamVjdE9mZnNldD1bdC5fb2JqZWN0T2Zmc2V0WzBdLHQuX29iamVjdE9mZnNldFsxXSx0Ll9vYmplY3RPZmZzZXRbMl1dLGsuY29vcmRzPXcscC51cGRhdGUoaykscC52aXNpYmxlPXQudmlzaWJsZSxwLmVuYWJsZUR5bmFtaWM9QSxwLmVuYWJsZUhpZ2hsaWdodD1BLHAuc25hcFRvRGF0YT0hMCwibGlnaHRpbmciaW4gdCYmKHAuYW1iaWVudExpZ2h0PXQubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2VMaWdodD10LmxpZ2h0aW5nLmRpZmZ1c2UscC5zcGVjdWxhckxpZ2h0PXQubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9dC5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPXQubGlnaHRpbmcuZnJlc25lbCksImxpZ2h0cG9zaXRpb24iaW4gdCYmKHAubGlnaHRQb3NpdGlvbj1bdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdKSxkJiZkPDEmJihwLnN1cHBvcnRzVHJhbnNwYXJlbmN5PSEwKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc3VyZmFjZSksdGhpcy5zdXJmYWNlLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgaCh0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6Njk3LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MjMsIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIjo5NTQsIi4uL2hlYXRtYXAvaW50ZXJwMmQiOjk1NywiZ2wtc3VyZmFjZTNkIjozMTIsbmRhcnJheTo0NDIsIm5kYXJyYXktZmlsbCI6NDMyLCJuZGFycmF5LWhvbW9ncmFwaHkiOjQzNH1dLDExNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyKXtlIGluIHQmJiEociBpbiB0KSYmKHRbcl09dFtlXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjLHU7ZnVuY3Rpb24gZihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbyxyLG4pfXZhciBoPWYoIngiKSxwPWYoInkiKSxkPWYoInoiKTtpZighZHx8IWQubGVuZ3RofHxoJiZoLmxlbmd0aDwxfHxwJiZwLmxlbmd0aDwxKWUudmlzaWJsZT0hMTtlbHNle2UuX3hsZW5ndGg9QXJyYXkuaXNBcnJheShoKSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KGhbMF0pP2QubGVuZ3RoOmRbMF0ubGVuZ3RoLGUuX3lsZW5ndGg9ZC5sZW5ndGgsZS5fb2JqZWN0T2Zmc2V0PVswLDAsMF0sbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxsKSxmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJoaWRlc3VyZmFjZSIsImNvbm5lY3RnYXBzIiwib3BhY2l0eSJdLmZvckVhY2goZnVuY3Rpb24odCl7Zih0KX0pO3ZhciBnPWYoInN1cmZhY2Vjb2xvciIpLHY9WyJ4IiwieSIsInoiXTtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBtPSJjb250b3Vycy4iK3ZbY10seT1mKG0rIi5zaG93IikseD1mKG0rIi5oaWdobGlnaHQiKTtpZih5fHx4KWZvcih1PTA7dTwzOysrdSlmKG0rIi5wcm9qZWN0LiIrdlt1XSk7eSYmKGYobSsiLmNvbG9yIiksZihtKyIud2lkdGgiKSxmKG0rIi51c2Vjb2xvcm1hcCIpKSx4JiYoZihtKyIuaGlnaGxpZ2h0Y29sb3IiKSxmKG0rIi5oaWdobGlnaHR3aWR0aCIpKX1nfHwocyh0LCJ6bWluIiwiY21pbiIpLHModCwiem1heCIsImNtYXgiKSxzKHQsInphdXRvIiwiY2F1dG8iKSksYSh0LGUsbCxmLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxlLl9sZW5ndGg9bnVsbH19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9hdHRyaWJ1dGVzIjoxMTQ4fV0sMTE1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj17bWluOiJjbWluIixtYXg6ImNtYXgifSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vY29udmVydCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic3VyZmFjZSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDNkIiksbi5jYXRlZ29yaWVzPVsiZ2wzZCIsIjJkTWFwIiwibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjc4OSwiLi9hdHRyaWJ1dGVzIjoxMTQ4LCIuL2NhbGMiOjExNDksIi4vY29udmVydCI6MTE1MCwiLi9kZWZhdWx0cyI6MTE1MX1dLDExNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlczsoZS5leHBvcnRzPWEoe2RvbWFpbjpzKHtuYW1lOiJ0YWJsZSIsdHJhY2U6ITB9KSxjb2x1bW53aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sY29sdW1ub3JkZXI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxoZWFkZXI6e3ZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZm9ybWF0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6Mjh9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoiZ3JleSJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoid2hpdGUifX0sZm9udDppKHt9LG8oe2FycmF5T2s6ITB9KSl9LGNlbGxzOnt2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjIwfSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6ImdyZXkifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6IndoaXRlIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfX0sImNhbGMiLCJmcm9tLXJvb3QiKSkudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1NjAsIi4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi8uLi9wbG90cy9kb21haW4iOjc3MywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NzR9XSwxMTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KCIuL3Bsb3QiKTtyLm5hbWU9InRhYmxlIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9bih0LmNhbGNkYXRhLCJ0YWJsZSIpWzBdO2UubGVuZ3RoJiZpKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInRhYmxlIiksYT1lLl9oYXMmJmUuX2hhcygidGFibGUiKTtpJiYhYSYmbi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIudGFibGUiKS5yZW1vdmUoKX19LHsiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjc4NCwiLi9wbG90IjoxMTYxfV0sMTE1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih7fSl9fSx7Ii4uLy4uL2xpYi9ndXAiOjY5OH1dLDExNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjZWxsUGFkOjgsY29sdW1uRXh0ZW50T2Zmc2V0OjEwLGNvbHVtblRpdGxlT2Zmc2V0OjI4LGVtcHR5SGVhZGVySGVpZ2h0OjE2LGxhdGV4Q2hlY2s6L15cJC4qXCQkLyxnb2xkZW5SYXRpbzoxLjYxOCxsaW5lQnJlYWtlcjoiPGJyPiIsbWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUscmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbjoxMjAscmVsZWFzZVRyYW5zaXRpb25FYXNlOiJjdWJpYy1vdXQiLHNjcm9sbGJhckNhcHR1cmVXaWR0aDoxOCxzY3JvbGxiYXJIaWRlRGVsYXk6MWUzLHNjcm9sbGJhckhpZGVEdXJhdGlvbjoxZTMsc2Nyb2xsYmFyT2Zmc2V0OjUsc2Nyb2xsYmFyV2lkdGg6OCx0cmFuc2l0aW9uRHVyYXRpb246MTAwLHRyYW5zaXRpb25FYXNlOiJjdWJpYy1vdXQiLHVwbGlmdDo1LHdyYXBTcGFjZXI6IiAiLHdyYXBTcGxpdENoYXJhY3RlcjoiICIsY246e3RhYmxlOiJ0YWJsZSIsdGFibGVDb250cm9sVmlldzoidGFibGUtY29udHJvbC12aWV3IixzY3JvbGxCYWNrZ3JvdW5kOiJzY3JvbGwtYmFja2dyb3VuZCIseUNvbHVtbjoieS1jb2x1bW4iLGNvbHVtbkJsb2NrOiJjb2x1bW4tYmxvY2siLHNjcm9sbEFyZWFDbGlwOiJzY3JvbGwtYXJlYS1jbGlwIixzY3JvbGxBcmVhQ2xpcFJlY3Q6InNjcm9sbC1hcmVhLWNsaXAtcmVjdCIsY29sdW1uQm91bmRhcnk6ImNvbHVtbi1ib3VuZGFyeSIsY29sdW1uQm91bmRhcnlDbGlwcGF0aDoiY29sdW1uLWJvdW5kYXJ5LWNsaXBwYXRoIixjb2x1bW5Cb3VuZGFyeVJlY3Q6ImNvbHVtbi1ib3VuZGFyeS1yZWN0Iixjb2x1bW5DZWxsczoiY29sdW1uLWNlbGxzIixjb2x1bW5DZWxsOiJjb2x1bW4tY2VsbCIsY2VsbFJlY3Q6ImNlbGwtcmVjdCIsY2VsbFRleHQ6ImNlbGwtdGV4dCIsY2VsbFRleHRIb2xkZXI6ImNlbGwtdGV4dC1ob2xkZXIiLHNjcm9sbGJhcktpdDoic2Nyb2xsYmFyLWtpdCIsc2Nyb2xsYmFyOiJzY3JvbGxiYXIiLHNjcm9sbGJhclNsaWRlcjoic2Nyb2xsYmFyLXNsaWRlciIsc2Nyb2xsYmFyR2x5cGg6InNjcm9sbGJhci1nbHlwaCIsc2Nyb2xsYmFyQ2FwdHVyZVpvbmU6InNjcm9sbGJhci1jYXB0dXJlLXpvbmUifX19LHt9XSwxMTU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoImZhc3QtaXNudW1lcmljIik7ZnVuY3Rpb24gbyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLG8odFtyXSkpO3JldHVybiBlfXJldHVybiB0fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdCtlfWZ1bmN0aW9uIGwodCl7dmFyIGUscj10LnNsaWNlKCksbj0xLzAsaT0wO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspQXJyYXkuaXNBcnJheShyW2VdKXx8KHJbZV09W3JbZV1dKSxuPU1hdGgubWluKG4scltlXS5sZW5ndGgpLGk9TWF0aC5tYXgoaSxyW2VdLmxlbmd0aCk7aWYobiE9PWkpZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGE9aS1yW2VdLmxlbmd0aDthJiYocltlXT1yW2VdLmNvbmNhdChjKGEpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09IiI7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5jYWxjZGF0YS5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbihlLHIpe3JldHVybiByLnhJbmRleDx0LnhJbmRleD9lK3IuY29sdW1uV2lkdGg6ZX0sMCl9ZnVuY3Rpb24gZih0LGUpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGkoe30sdFtyXSx7YXV4aWxpYXJ5QmxvY2tzOmV9KX0pfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHIsbj17fSxpPTAsYT0wLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxzPTAsbD0wLGM9MDtjPHQubGVuZ3RoO2MrKylyPXRbY10sby5yb3dzLnB1c2goe3Jvd0luZGV4OmMscm93SGVpZ2h0OnJ9KSwoKGErPXIpPj1lfHxjPT09dC5sZW5ndGgtMSkmJihuW2ldPW8sby5rZXk9bCsrLG8uZmlyc3RSb3dJbmRleD1zLG8ubGFzdFJvd0luZGV4PWMsbz17Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119LGkrPWEscz1jKzEsYT0wKTtyZXR1cm4gbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sKGUuY2VsbHMudmFsdWVzKSxwPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKGUuaGVhZGVyLnZhbHVlcy5sZW5ndGgsdC5sZW5ndGgpfSxkPWwoZS5oZWFkZXIudmFsdWVzKTtkLmxlbmd0aCYmIWRbMF0ubGVuZ3RoJiYoZFswXT1bIiJdLGQ9bChkKSk7dmFyIGc9ZC5jb25jYXQocChyKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gYygoZFswXXx8WyIiXSkubGVuZ3RoKX0pKSx2PWUuZG9tYWluLG09TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLncqKHYueFsxXS12LnhbMF0pKSx5PU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS5oKih2LnlbMV0tdi55WzBdKSkseD1lLmhlYWRlci52YWx1ZXMubGVuZ3RoP2dbMF0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaGVhZGVyLmhlaWdodH0pOltuLmVtcHR5SGVhZGVySGVpZ2h0XSxiPXIubGVuZ3RoP3JbMF0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2VsbHMuaGVpZ2h0fSk6W10sXz14LnJlZHVjZShzLDApLHc9aChiLHktXytuLnVwbGlmdCksaz1mKGgoeCxfKSxbXSksVD1mKHcsayksQT17fSxNPWUuX2Z1bGxJbnB1dC5jb2x1bW5vcmRlci5jb25jYXQocChyLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxTPWcubWFwKGZ1bmN0aW9uKHQscil7dmFyIG49QXJyYXkuaXNBcnJheShlLmNvbHVtbndpZHRoKT9lLmNvbHVtbndpZHRoW01hdGgubWluKHIsZS5jb2x1bW53aWR0aC5sZW5ndGgtMSldOmUuY29sdW1ud2lkdGg7cmV0dXJuIGEobik/TnVtYmVyKG4pOjF9KSxFPVMucmVkdWNlKHMsMCk7Uz1TLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC9FKm19KTt2YXIgQz1NYXRoLm1heChvKGUuaGVhZGVyLmxpbmUud2lkdGgpLG8oZS5jZWxscy5saW5lLndpZHRoKSksTD17a2V5OmUudWlkK3QuX2NvbnRleHQuc3RhdGljUGxvdCx0cmFuc2xhdGVYOnYueFswXSp0Ll9mdWxsTGF5b3V0Ll9zaXplLncsdHJhbnNsYXRlWTp0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKDEtdi55WzFdKSxzaXplOnQuX2Z1bGxMYXlvdXQuX3NpemUsd2lkdGg6bSxtYXhMaW5lV2lkdGg6QyxoZWlnaHQ6eSxjb2x1bW5PcmRlcjpNLGdyb3VwSGVpZ2h0Onkscm93QmxvY2tzOlQsaGVhZGVyUm93QmxvY2tzOmssc2Nyb2xsWTowLGNlbGxzOmkoe30sZS5jZWxscyx7dmFsdWVzOnJ9KSxoZWFkZXJDZWxsczppKHt9LGUuaGVhZGVyLHt2YWx1ZXM6Z30pLGdkQ29sdW1uczpnLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGdkQ29sdW1uc09yaWdpbmFsT3JkZXI6Zy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxwcmV2UGFnZXM6WzAsMF0sc2Nyb2xsYmFyU3RhdGU6e3Njcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M6ITF9LGNvbHVtbnM6Zy5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj1BW3RdO3JldHVybiBBW3RdPShyfHwwKSsxLHtrZXk6dCsiX18iK0FbdF0sbGFiZWw6dCxzcGVjSW5kZXg6ZSx4SW5kZXg6TVtlXSx4U2NhbGU6dSx4OnZvaWQgMCxjYWxjZGF0YTp2b2lkIDAsY29sdW1uV2lkdGg6U1tlXX19KX07cmV0dXJuIEwuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2FsY2RhdGE9TCx0Lng9dSh0KX0pLEx9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi9jb25zdGFudHMiOjExNTYsImZhc3QtaXNudW1lcmljIjoyMjF9XSwxMTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3Iuc3BsaXRUb1BhbmVscz1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXSxyPW4oe30sdCx7a2V5OiJoZWFkZXIiLHR5cGU6ImhlYWRlciIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITAsdmFsdWVzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5oZWFkZXJSb3dCbG9ja3MsY2FsY2RhdGE6bih7fSx0LmNhbGNkYXRhLHtjZWxsczp0LmNhbGNkYXRhLmhlYWRlckNlbGxzfSl9KTtyZXR1cm5bbih7fSx0LHtrZXk6ImNlbGxzMSIsdHlwZToiY2VsbHMiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSksbih7fSx0LHtrZXk6ImNlbGxzMiIsdHlwZToiY2VsbHMiLHBhZ2U6MSxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSkscl19LHIuc3BsaXRUb0NlbGxzPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzW3QucGFnZV0scj1lP2Uucm93c1swXS5yb3dJbmRleDowLG49ZT9yK2Uucm93cy5sZW5ndGg6MDtyZXR1cm5bcixuXX0odCk7cmV0dXJuKHQudmFsdWVzfHxbXSkuc2xpY2UoZVswXSxlWzFdKS5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm57a2V5V2l0aGluQmxvY2s6bisoInN0cmluZyI9PXR5cGVvZiByJiZyLm1hdGNoKC9bPCQmPiBdLyk/Il9rZXlidXN0ZXJfIitNYXRoLnJhbmRvbSgpOiIiKSxrZXk6ZVswXStuLGNvbHVtbjp0LGNhbGNkYXRhOnQuY2FsY2RhdGEscGFnZTp0LnBhZ2Uscm93QmxvY2tzOnQucm93QmxvY2tzLHZhbHVlOnJ9fSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY5MH1dLDExNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YShlLG8scykscygiY29sdW1ud2lkdGgiKSxzKCJoZWFkZXIudmFsdWVzIikscygiaGVhZGVyLmZvcm1hdCIpLHMoImhlYWRlci5hbGlnbiIpLHMoImhlYWRlci5wcmVmaXgiKSxzKCJoZWFkZXIuc3VmZml4IikscygiaGVhZGVyLmhlaWdodCIpLHMoImhlYWRlci5saW5lLndpZHRoIikscygiaGVhZGVyLmxpbmUuY29sb3IiKSxzKCJoZWFkZXIuZmlsbC5jb2xvciIpLG4uY29lcmNlRm9udChzLCJoZWFkZXIuZm9udCIsbi5leHRlbmRGbGF0KHt9LG8uZm9udCkpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29sdW1ub3JkZXJ8fFtdLG49dC5oZWFkZXIudmFsdWVzLmxlbmd0aCxpPXIuc2xpY2UoMCxuKSxhPWkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLG89aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5kZXhPZih0KX0pLHM9by5sZW5ndGg7czxuO3MrKylvLnB1c2gocyk7ZSgiY29sdW1ub3JkZXIiLG8pfShlLHMpLHMoImNlbGxzLnZhbHVlcyIpLHMoImNlbGxzLmZvcm1hdCIpLHMoImNlbGxzLmFsaWduIikscygiY2VsbHMucHJlZml4IikscygiY2VsbHMuc3VmZml4IikscygiY2VsbHMuaGVpZ2h0IikscygiY2VsbHMubGluZS53aWR0aCIpLHMoImNlbGxzLmxpbmUuY29sb3IiKSxzKCJjZWxscy5maWxsLmNvbG9yIiksbi5jb2VyY2VGb250KHMsImNlbGxzLmZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuL2F0dHJpYnV0ZXMiOjExNTN9XSwxMTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0idGFibGUiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMTUzLCIuL2Jhc2VfcGxvdCI6MTE1NCwiLi9jYWxjIjoxMTU1LCIuL2RlZmF1bHRzIjoxMTU5LCIuL3Bsb3QiOjExNjF9XSwxMTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJkMyIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxsPXQoIi4uLy4uL2xpYiIpLnJhaXNlVG9Ub3AsYz10KCIuLi8uLi9saWIiKS5jYW5jZWxUcmFuc2l0aW9uLHU9dCgiLi9kYXRhX3ByZXBhcmF0aW9uX2hlbHBlciIpLGY9dCgiLi9kYXRhX3NwbGl0X2hlbHBlcnMiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtmdW5jdGlvbiBwKHQpe3JldHVybiBNYXRoLmNlaWwodC5jYWxjZGF0YS5tYXhMaW5lV2lkdGgvMil9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrIl9zY3JvbGxBcmVhQm90dG9tQ2xpcF8iK2Uua2V5fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4iY2xpcCIrdC5fZnVsbExheW91dC5fdWlkKyJfY29sdW1uQm91bmRhcnlDbGlwcGF0aF8iK2UuY2FsY2RhdGEua2V5KyJfIitlLnNwZWNJbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybltdLmNvbmNhdC5hcHBseShbXSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX19kYXRhX199KX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbz10LnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJLaXQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO28uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyS2l0LCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIiksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2Nyb2xsYmFyU3RhdGU7ZS50b3RhbEhlaWdodD1mdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2NrcztyZXR1cm4gSShlLGUubGVuZ3RoLTEpKyhlLmxlbmd0aD9EKGVbZS5sZW5ndGgtMV0sMS8wKToxKX0odCksZS5zY3JvbGxhYmxlQXJlYUhlaWdodD10Lmdyb3VwSGVpZ2h0LUEodCksZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0PU1hdGgubWluKGUudG90YWxIZWlnaHQsZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS5yYXRpbz1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQvZS50b3RhbEhlaWdodCxlLmJhckxlbmd0aD1NYXRoLm1heChlLnJhdGlvKmUuY3VycmVudGx5VmlzaWJsZUhlaWdodCxuLmdvbGRlblJhdGlvKm4uc2Nyb2xsYmFyV2lkdGgpLGUuYmFyV2lnZ2xlUm9vbT1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQtZS5iYXJMZW5ndGgsZS53aWdnbGVSb29tPU1hdGgubWF4KDAsZS50b3RhbEhlaWdodC1lLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnRvcFk9MD09PWUuYmFyV2lnZ2xlUm9vbT8wOnQuc2Nyb2xsWS9lLndpZ2dsZVJvb20qZS5iYXJXaWdnbGVSb29tLGUuYm90dG9tWT1lLnRvcFkrZS5iYXJMZW5ndGgsZS5kcmFnTXVsdGlwbGllcj1lLndpZ2dsZVJvb20vZS5iYXJXaWdnbGVSb29tfSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQud2lkdGgrbi5zY3JvbGxiYXJXaWR0aC8yK24uc2Nyb2xsYmFyT2Zmc2V0KSsiICIrQSh0KSsiKSJ9KTt2YXIgcz1vLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXIpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyLCEwKTt2YXIgbD1zLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJTbGlkZXIpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyU2xpZGVyLCEwKSxsLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwICIrKHQuc2Nyb2xsYmFyU3RhdGUudG9wWXx8MCkrIikifSk7dmFyIGM9bC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyR2x5cGgpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2MuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyR2x5cGgsITApLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIixuLnNjcm9sbGJhcldpZHRoKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsInJvdW5kIikuYXR0cigieTEiLG4uc2Nyb2xsYmFyV2lkdGgvMiksYy5hdHRyKCJ5MiIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Nyb2xsYmFyU3RhdGUuYmFyTGVuZ3RoLW4uc2Nyb2xsYmFyV2lkdGgvMn0pLmF0dHIoInN0cm9rZS1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5EcmFnSW5Qcm9ncmVzc3x8IXQuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbXx8cj8wOi40fSksYy50cmFuc2l0aW9uKCkuZGVsYXkoMCkuZHVyYXRpb24oMCksYy50cmFuc2l0aW9uKCkuZGVsYXkobi5zY3JvbGxiYXJIaWRlRGVsYXkpLmR1cmF0aW9uKG4uc2Nyb2xsYmFySGlkZUR1cmF0aW9uKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCk7dmFyIHU9cy5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyQ2FwdHVyZVpvbmUpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3UuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyQ2FwdHVyZVpvbmUsITApLmF0dHIoInN0cm9rZSIsIndoaXRlIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC4wMSkuYXR0cigic3Ryb2tlLXdpZHRoIixuLnNjcm9sbGJhckNhcHR1cmVXaWR0aCkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJidXR0IikuYXR0cigieTEiLDApLm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3ZhciBuPWkuZXZlbnQueSxhPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLnNjcm9sbGJhclN0YXRlLHM9bi1hLnRvcCxsPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLG8uc2Nyb2xsYWJsZUFyZWFIZWlnaHRdKS5yYW5nZShbMCxvLnRvdGFsSGVpZ2h0XSkuY2xhbXAoITApO28udG9wWTw9cyYmczw9by5ib3R0b21ZfHxTKGUsdCxudWxsLGwocy1vLmJhckxlbmd0aC8yKSkocil9KS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0LnNjcm9sbGJhclN0YXRlLnNjcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M9ITAsdH0pLm9uKCJkcmFnIixTKGUsdCkpLm9uKCJkcmFnZW5kIixmdW5jdGlvbigpe30pKSx1LmF0dHIoInkyIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxhYmxlQXJlYUhlaWdodH0pLGUuX2NvbnRleHQuc3RhdGljUGxvdCYmKGMucmVtb3ZlKCksdS5yZW1vdmUoKSl9ZnVuY3Rpb24geSh0LGUscixzKXt2YXIgbD1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5DZWxsKS5kYXRhKGYuc3BsaXRUb0NlbGxzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQ2VsbCwhMCksZS5leGl0KCkucmVtb3ZlKCksZX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbHMpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGxzLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShyKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0LGUpe3ZhciByPXQuY2FsY2RhdGEuY2VsbHMuZm9udCxuPXQuY29sdW1uLnNwZWNJbmRleCxpPXtzaXplOl8oci5zaXplLG4sZSksY29sb3I6XyhyLmNvbG9yLG4sZSksZmFtaWx5Ol8oci5mYW1pbHksbixlKX07dC5yb3dOdW1iZXI9dC5rZXksdC5hbGlnbj1fKHQuY2FsY2RhdGEuY2VsbHMuYWxpZ24sbixlKSx0LmNlbGxCb3JkZXJXaWR0aD1fKHQuY2FsY2RhdGEuY2VsbHMubGluZS53aWR0aCxuLGUpLHQuZm9udD1pfSl9KGwpLGZ1bmN0aW9uKHQpe3QuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbi5jb2x1bW5XaWR0aH0pLmF0dHIoInN0cm9rZS13aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2VsbEJvcmRlcldpZHRofSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKTtoLnN0cm9rZShlLF8odC5jYWxjZGF0YS5jZWxscy5saW5lLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpLGguZmlsbChlLF8odC5jYWxjZGF0YS5jZWxscy5maWxsLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpfSl9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxSZWN0KS5kYXRhKGEucmVwZWF0LGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uY2VsbFJlY3QsITApLGV9KGwpKTt2YXIgYz1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsVGV4dCkuZGF0YShhLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChuLmNuLmNlbGxUZXh0LCEwKS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbigpe3JldHVybiJhdXRvIn0pLm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7aS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLGV9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxUZXh0SG9sZGVyKS5kYXRhKGEucmVwZWF0LGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY2VsbFRleHRIb2xkZXIsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKSxlfShsKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0KXtvLmZvbnQoaS5zZWxlY3QodGhpcyksdC5mb250KX0pfShjKSx4KGMsZSxzLHQpLE8obCl9ZnVuY3Rpb24geCh0LGUscixhKXt0LnRleHQoZnVuY3Rpb24odCl7dmFyIGU9dC5jb2x1bW4uc3BlY0luZGV4LHI9dC5yb3dOdW1iZXIsYT10LnZhbHVlLG89InN0cmluZyI9PXR5cGVvZiBhLHM9byYmYS5tYXRjaCgvPGJyPi9pKSxsPSFvfHxzO3QubWF5SGF2ZU1hcmt1cD1vJiZhLm1hdGNoKC9bPCY+XS8pO3ZhciBjLHU9InN0cmluZyI9PXR5cGVvZihjPWEpJiZjLm1hdGNoKG4ubGF0ZXhDaGVjayk7dC5sYXRleD11O3ZhciBmLGgscD11PyIiOl8odC5jYWxjZGF0YS5jZWxscy5wcmVmaXgsZSxyKXx8IiIsZD11PyIiOl8odC5jYWxjZGF0YS5jZWxscy5zdWZmaXgsZSxyKXx8IiIsZz11P251bGw6Xyh0LmNhbGNkYXRhLmNlbGxzLmZvcm1hdCxlLHIpfHxudWxsLHY9cCsoZz9pLmZvcm1hdChnKSh0LnZhbHVlKTp0LnZhbHVlKStkO2lmKHQud3JhcHBpbmdOZWVkZWQ9IXQud3JhcHBlZCYmIWwmJiF1JiYoZj1iKHYpKSx0LmNlbGxIZWlnaHRNYXlJbmNyZWFzZT1zfHx1fHx0Lm1heUhhdmVNYXJrdXB8fCh2b2lkIDA9PT1mP2Iodik6ZiksdC5uZWVkc0NvbnZlcnRUb1RzcGFucz10Lm1heUhhdmVNYXJrdXB8fHQud3JhcHBpbmdOZWVkZWR8fHQubGF0ZXgsdC53cmFwcGluZ05lZWRlZCl7dmFyIG09KCIgIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP3YucmVwbGFjZSgvPGEgaHJlZj0vZ2ksIjxhX2hyZWY9Iik6dikuc3BsaXQobi53cmFwU3BsaXRDaGFyYWN0ZXIpLHk9IiAiPT09bi53cmFwU3BsaXRDaGFyYWN0ZXI/bS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvPGFfaHJlZj0vZ2ksIjxhIGhyZWY9Iil9KTptO3QuZnJhZ21lbnRzPXkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0ZXh0OnQsd2lkdGg6bnVsbH19KSx0LmZyYWdtZW50cy5wdXNoKHtmcmFnbWVudDpuLndyYXBTcGFjZXIsd2lkdGg6bnVsbH0pLGg9eS5qb2luKG4ubGluZUJyZWFrZXIpK24ubGluZUJyZWFrZXIrbi53cmFwU3BhY2VyfWVsc2UgZGVsZXRlIHQuZnJhZ21lbnRzLGg9djtyZXR1cm4gaH0pLmF0dHIoImR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC5uZWVkc0NvbnZlcnRUb1RzcGFucz8wOiIwLjc1ZW0ifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgbz1pLnNlbGVjdCh0aGlzKSxsPXQud3JhcHBpbmdOZWVkZWQ/QzpMO3QubmVlZHNDb252ZXJ0VG9Uc3BhbnM/cy5jb252ZXJ0VG9Uc3BhbnMobyxhLGwocix0aGlzLGUsYSx0KSk6aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit6KHQpKyIgIituLmNlbGxQYWQrIikifSkuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW9uKHQpe3JldHVybntsZWZ0OiJzdGFydCIsY2VudGVyOiJtaWRkbGUiLHJpZ2h0OiJlbmQifVt0LmFsaWduXX0pfSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZihuLndyYXBTcGxpdENoYXJhY3Rlcil9ZnVuY3Rpb24gXyh0LGUscil7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG49dFtNYXRoLm1pbihlLHQubGVuZ3RoLTEpXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uW01hdGgubWluKHIsbi5sZW5ndGgtMSldOm59cmV0dXJuIHR9ZnVuY3Rpb24gdyh0LGUscil7dC50cmFuc2l0aW9uKCkuZWFzZShuLnJlbGVhc2VUcmFuc2l0aW9uRWFzZSkuZHVyYXRpb24obi5yZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLngrIiAiK3IrIikiKX1mdW5jdGlvbiBrKHQpe3JldHVybiJjZWxscyI9PT10LnR5cGV9ZnVuY3Rpb24gVCh0KXtyZXR1cm4iaGVhZGVyIj09PXQudHlwZX1mdW5jdGlvbiBBKHQpe3JldHVybih0LnJvd0Jsb2Nrcy5sZW5ndGg/dC5yb3dCbG9ja3NbMF0uYXV4aWxpYXJ5QmxvY2tzOltdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtEKGUsMS8wKX0sMCl9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dihlKVswXTtpZih2b2lkIDAhPT1uKXt2YXIgaT1uLnJvd0Jsb2NrcyxhPW4uY2FsY2RhdGEsbz1JKGksaS5sZW5ndGgpLHM9bi5jYWxjZGF0YS5ncm91cEhlaWdodC1BKG4pLGw9YS5zY3JvbGxZPU1hdGgubWF4KDAsTWF0aC5taW4oby1zLGEuc2Nyb2xsWSkpLGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPW8ucm93cyxsPTAsYz0wO2M8cy5sZW5ndGg7YysrKWwrPXNbY10ucm93SGVpZ2h0O28uYWxsUm93c0hlaWdodD1sLGU8aStsJiZlK3I+aSYmbi5wdXNoKGEpLGkrPWx9cmV0dXJuIG59KGksbCxzKTsxPT09Yy5sZW5ndGgmJihjWzBdPT09aS5sZW5ndGgtMT9jLnVuc2hpZnQoY1swXS0xKTpjLnB1c2goY1swXSsxKSksY1swXSUyJiZjLnJldmVyc2UoKSxlLmVhY2goZnVuY3Rpb24odCxlKXt0LnBhZ2U9Y1tlXSx0LnNjcm9sbFk9bH0pLGUuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAgIisoSSh0LnJvd0Jsb2Nrcyx0LnBhZ2UpLXQuc2Nyb2xsWSkrIikifSksdCYmKEUodCxyLGUsYyxuLnByZXZQYWdlcyxuLDApLEUodCxyLGUsYyxuLnByZXZQYWdlcyxuLDEpLG0ocix0KSl9fWZ1bmN0aW9uIFModCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2FsY2RhdGE/by5jYWxjZGF0YTpvLGw9ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHMua2V5PT09dC5rZXl9KSxjPXJ8fHMuc2Nyb2xsYmFyU3RhdGUuZHJhZ011bHRpcGxpZXIsdT1zLnNjcm9sbFk7cy5zY3JvbGxZPXZvaWQgMD09PWE/cy5zY3JvbGxZK2MqaS5ldmVudC5keTphO3ZhciBmPWwuc2VsZWN0QWxsKCIuIituLmNuLnlDb2x1bW4pLnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5CbG9jaykuZmlsdGVyKGspO3JldHVybiBNKHQsZixsKSxzLnNjcm9sbFk9PT11fX1mdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8pe25bb10hPT1pW29dJiYoY2xlYXJUaW1lb3V0KGEuY3VycmVudFJlcGFpbnRbb10pLGEuY3VycmVudFJlcGFpbnRbb109c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPXIuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1vJiZuW2VdIT09aVtlXX0pO3kodCxlLGEsciksaVtvXT1uW29dfSkpfWZ1bmN0aW9uIEModCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89aS5zZWxlY3QoZS5wYXJlbnROb2RlKTtvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5mcmFnbWVudHM7by5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKGZ1bmN0aW9uKHQscil7ZVtyXS53aWR0aD10aGlzLmdldENvbXB1dGVkVGV4dExlbmd0aCgpfSk7dmFyIHIsaSxhPWVbZS5sZW5ndGgtMV0ud2lkdGgscz1lLnNsaWNlKDAsLTEpLGw9W10sYz0wLHU9dC5jb2x1bW4uY29sdW1uV2lkdGgtMipuLmNlbGxQYWQ7Zm9yKHQudmFsdWU9IiI7cy5sZW5ndGg7KWMrKGk9KHI9cy5zaGlmdCgpKS53aWR0aCthKT51JiYodC52YWx1ZSs9bC5qb2luKG4ud3JhcFNwYWNlcikrbi5saW5lQnJlYWtlcixsPVtdLGM9MCksbC5wdXNoKHIudGV4dCksYys9aTtjJiYodC52YWx1ZSs9bC5qb2luKG4ud3JhcFNwYWNlcikpLHQud3JhcHBlZD0hMH0pLG8uc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikucmVtb3ZlKCkseChvLnNlbGVjdCgiLiIrbi5jbi5jZWxsVGV4dCkscix0LGEpLGkuc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5jYWxsKE8pfX1mdW5jdGlvbiBMKHQsZSxyLGEsbyl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW8uc2V0dGxlZFkpe3ZhciBzPWkuc2VsZWN0KGUucGFyZW50Tm9kZSksbD1SKG8pLGM9by5rZXktbC5maXJzdFJvd0luZGV4LHU9bC5yb3dzW2NdLnJvd0hlaWdodCxmPW8uY2VsbEhlaWdodE1heUluY3JlYXNlP2UucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQrMipuLmNlbGxQYWQ6dSxoPU1hdGgubWF4KGYsdSk7aC1sLnJvd3NbY10ucm93SGVpZ2h0JiYobC5yb3dzW2NdLnJvd0hlaWdodD1oLHQuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkNlbGwpLmNhbGwoTyksTShudWxsLHQuZmlsdGVyKGspLDApLG0ocixhLCEwKSkscy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3QoIi4iK24uY24uY2VsbFJlY3QpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSxhPWUudG9wLXQudG9wKyhyP3IubWF0cml4LmY6bi5jZWxsUGFkKTtyZXR1cm4idHJhbnNsYXRlKCIreihvLGkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KCIuIituLmNuLmNlbGxUZXh0SG9sZGVyKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpKyIgIithKyIpIn0pLG8uc2V0dGxlZFk9ITB9fX1mdW5jdGlvbiB6KHQsZSl7c3dpdGNoKHQuYWxpZ24pe2Nhc2UibGVmdCI6cmV0dXJuIG4uY2VsbFBhZDtjYXNlInJpZ2h0IjpyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApLW4uY2VsbFBhZDtjYXNlImNlbnRlciI6cmV0dXJuKHQuY29sdW1uLmNvbHVtbldpZHRoLShlfHwwKSkvMjtkZWZhdWx0OnJldHVybiBuLmNlbGxQYWR9fWZ1bmN0aW9uIE8odCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2Nrcy5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtEKGUsMS8wKX0sMCk7cmV0dXJuInRyYW5zbGF0ZSgwICIrKEQoUih0KSx0LmtleSkrZSkrIikifSkuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxSZWN0KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybihlPVIodCkscj10LmtleSxlLnJvd3Nbci1lLmZpcnN0Um93SW5kZXhdKS5yb3dIZWlnaHQ7dmFyIGUscn0pfWZ1bmN0aW9uIEkodCxlKXtmb3IodmFyIHI9MCxuPWUtMTtuPj0wO24tLSlyKz1QKHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIEQodCxlKXtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoJiZ0LnJvd3Nbbl0ucm93SW5kZXg8ZTtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gcn1mdW5jdGlvbiBQKHQpe3ZhciBlPXQuYWxsUm93c0hlaWdodDtpZih2b2lkIDAhPT1lKXJldHVybiBlO2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGg7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHQuYWxsUm93c0hlaWdodD1yLHJ9ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5yb3dCbG9ja3NbdC5wYWdlXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hdC5fY29udGV4dC5zdGF0aWNQbG90LHM9dC5fZnVsbExheW91dC5fcGFwZXIuc2VsZWN0QWxsKCIuIituLmNuLnRhYmxlKS5kYXRhKGUubWFwKGZ1bmN0aW9uKGUpe3ZhciByPWEudW53cmFwKGUpLnRyYWNlO3JldHVybiB1KHQscil9KSxhLmtleUZ1bik7cy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi50YWJsZSwhMCkuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHMuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoK3Quc2l6ZS5sK3Quc2l6ZS5yfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQrdC5zaXplLnQrdC5zaXplLmJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnRyYW5zbGF0ZVgrIiwiK3QudHJhbnNsYXRlWSsiKSJ9KTt2YXIgaD1zLnNlbGVjdEFsbCgiLiIrbi5jbi50YWJsZUNvbnRyb2xWaWV3KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKSx4PWguZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24udGFibGVDb250cm9sVmlldywhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpO3ImJngub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24oZSl7aC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10fSkuY2FsbChtLHQpfSkub24oIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe2lmKCFlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nKXtlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nPSEwO3ZhciByPWUuc2Nyb2xsWStpLmV2ZW50LmRlbHRhWTtTKHQsaCxudWxsLHIpKGUpfHwoaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSxpLmV2ZW50LnByZXZlbnREZWZhdWx0KCkpLGUuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmc9ITF9fSkuY2FsbChtLHQsITApLGguYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5zaXplLmwrIiAiK3Quc2l6ZS50KyIpIn0pO3ZhciBiPWguc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEJhY2tncm91bmQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2IuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQmFja2dyb3VuZCwhMCkuYXR0cigiZmlsbCIsIm5vbmUiKSxiLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSksaC5lYWNoKGZ1bmN0aW9uKGUpe28uc2V0Q2xpcFVybChpLnNlbGVjdCh0aGlzKSxkKHQsZSksdCl9KTt2YXIgXz1oLnNlbGVjdEFsbCgiLiIrbi5jbi55Q29sdW1uKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbnN9LGEua2V5RnVuKTtfLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnlDb2x1bW4sITApLF8uZXhpdCgpLnJlbW92ZSgpLF8uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIgMCkifSksciYmXy5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbihlKXtyZXR1cm4gdyhpLnNlbGVjdCh0aGlzKSxlLC1uLnVwbGlmdCksbCh0aGlzKSxlLmNhbGNkYXRhLmNvbHVtbkRyYWdJblByb2dyZXNzPSEwLG0oaC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5rZXl9KSx0KSxlfSkub24oImRyYWciLGZ1bmN0aW9uKHQpe3ZhciBlPWkuc2VsZWN0KHRoaXMpLHI9ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9PT1lP2kuZXZlbnQueDplLngpK2UuY29sdW1uV2lkdGgvMn07dC54PU1hdGgubWF4KC1uLm92ZXJkcmFnLE1hdGgubWluKHQuY2FsY2RhdGEud2lkdGgrbi5vdmVyZHJhZy10LmNvbHVtbldpZHRoLGkuZXZlbnQueCkpLHYoXykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNhbGNkYXRhLmtleT09PXQuY2FsY2RhdGEua2V5fSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiByKHQpLXIoZSl9KS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7ZS54SW5kZXg9cixlLng9dD09PWU/ZS54OmUueFNjYWxlKGUpfSksXy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQhPT1lfSkudHJhbnNpdGlvbigpLmVhc2Uobi50cmFuc2l0aW9uRWFzZSkuZHVyYXRpb24obi50cmFuc2l0aW9uRHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiIDApIn0pLGUuY2FsbChjKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LngrIiAtIituLnVwbGlmdCsiICkiKX0pLm9uKCJkcmFnZW5kIixmdW5jdGlvbihlKXt2YXIgcj1pLnNlbGVjdCh0aGlzKSxuPWUuY2FsY2RhdGE7ZS54PWUueFNjYWxlKGUpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITEsdyhyLGUsMCksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjtlLmdkQ29sdW1ucy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbbi5pbmRleE9mKHQpXS1yW24uaW5kZXhPZihlKV19KSxlLmNvbHVtbm9yZGVyPXIsdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIpfSh0LG4sbi5jb2x1bW5zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC54SW5kZXh9KSl9KSksXy5lYWNoKGZ1bmN0aW9uKGUpe28uc2V0Q2xpcFVybChpLnNlbGVjdCh0aGlzKSxnKHQsZSksdCl9KTt2YXIgQT1fLnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5CbG9jaykuZGF0YShmLnNwbGl0VG9QYW5lbHMsYS5rZXlGdW4pO0EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQmxvY2ssITApLmF0dHIoImlkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSxBLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRyYWdIYW5kbGU/ImV3LXJlc2l6ZSI6dC5jYWxjZGF0YS5zY3JvbGxiYXJTdGF0ZS5iYXJXaWdnbGVSb29tPyJucy1yZXNpemUiOiJkZWZhdWx0In0pO3ZhciBFPUEuZmlsdGVyKFQpLEM9QS5maWx0ZXIoayk7ciYmQy5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0fSkub24oImRyYWciLFModCxoLC0xKSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKCl7fSkpLHkodCxoLEUsQSkseSh0LGgsQyxBKTt2YXIgTD1oLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxBcmVhQ2xpcCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7TC5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXAsITApLmF0dHIoImlkIixmdW5jdGlvbihlKXtyZXR1cm4gZCh0LGUpfSk7dmFyIHo9TC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsQXJlYUNsaXBSZWN0KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTt6LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCwhMCkuYXR0cigieCIsLW4ub3ZlcmRyYWcpLmF0dHIoInkiLC1uLnVwbGlmdCkuYXR0cigiZmlsbCIsIm5vbmUiKSx6LmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCsyKm4ub3ZlcmRyYWd9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodCtuLnVwbGlmdH0pLF8uc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJvdW5kYXJ5KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeSwhMCk7dmFyIE89Xy5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7Ty5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCwhMCksTy5hdHRyKCJpZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGcodCxlKX0pO3ZhciBJPU8uc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7SS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeVJlY3QsITApLmF0dHIoImZpbGwiLCJub25lIiksSS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uV2lkdGgrMipwKHQpfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5jYWxjZGF0YS5oZWlnaHQrMipwKHQpK24udXBsaWZ0fSkuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuLXAodCl9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4tcCh0KX0pLE0obnVsbCxDLGgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2d1cCI6Njk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcyNCwiLi9jb25zdGFudHMiOjExNTYsIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXIiOjExNTcsIi4vZGF0YV9zcGxpdF9oZWxwZXJzIjoxMTU4LGQzOjE1NH1dLDExNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eTpuLnkseDpuLngseDA6bi54MCx5MDpuLnkwLG5hbWU6aSh7fSxuLm5hbWUse30pLG9yaWVudGF0aW9uOmkoe30sbi5vcmllbnRhdGlvbix7fSksYmFuZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ3aWR0aCIsImNvdW50Il0sZGZsdDoid2lkdGgiLGVkaXRUeXBlOiJjYWxjIn0sc3Bhbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNvZnQiLCJoYXJkIiwibWFudWFsIl0sZGZsdDoic29mdCIsZWRpdFR5cGU6ImNhbGMifSxzcGFuOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHBvaW50czppKHt9LG4uYm94cG9pbnRzLHt9KSxqaXR0ZXI6aSh7fSxuLmppdHRlcix7fSkscG9pbnRwb3M6aSh7fSxuLnBvaW50cG9zLHt9KSx3aWR0aDppKHt9LG4ud2lkdGgse30pLG1hcmtlcjpuLm1hcmtlcix0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsYm94Ont2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMjUsZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sbWVhbmxpbmU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90aCIsInBvc2l0aXZlIiwibmVnYXRpdmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInZpb2xpbnMiLCJwb2ludHMiLCJrZGUiXSxkZmx0OiJ2aW9saW5zK3BvaW50cytrZGUiLGV4dHJhczpbImFsbCJdLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2JveC9hdHRyaWJ1dGVzIjo4NjJ9XSwxMTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2JveC9jYWxjIiksbz10KCIuL2hlbHBlcnMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0LGUscil7dmFyIGk9ZS5tYXgtZS5taW47aWYoIWkpcmV0dXJuIHQuYmFuZHdpZHRoP3QuYmFuZHdpZHRoOjA7aWYodC5iYW5kd2lkdGgpcmV0dXJuIE1hdGgubWF4KHQuYmFuZHdpZHRoLGkvMWU0KTt2YXIgYT1yLmxlbmd0aCxvPW4uc3RkZXYocixhLTEsZS5tZWFuKTtyZXR1cm4gTWF0aC5tYXgoZnVuY3Rpb24odCxlLHIpe3JldHVybiAxLjA1OSpNYXRoLm1pbihlLHIvMS4zNDkpKk1hdGgucG93KHQsLS4yKX0oYSxvLGUucTMtZS5xMSksaS8xMDApfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGEsbz10LnNwYW5tb2RlLGw9dC5zcGFufHxbXSxjPVtlLm1pbixlLm1heF0sdT1bZS5taW4tMipuLGUubWF4KzIqbl07ZnVuY3Rpb24gZihuKXt2YXIgaT1sW25dLGE9Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP3IucjJjKGkpOnIuZDJjKGksMCx0W2UudmFsTGV0dGVyKyJjYWxlbmRhciJdKTtyZXR1cm4gYT09PXM/dVtuXTphfXZhciBoPXt0eXBlOiJsaW5lYXIiLHJhbmdlOmE9InNvZnQiPT09bz91OiJoYXJkIj09PW8/YzpbZigwKSxmKDEpXX07cmV0dXJuIGkuc2V0Q29udmVydChoKSxoLmNsZWFuUmFuZ2UoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKTtpZihyWzBdLnQuZW1wdHkpcmV0dXJuIHI7Zm9yKHZhciBzPXQuX2Z1bGxMYXlvdXQsdT1pLmdldEZyb21JZCh0LGVbImgiPT09ZS5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKSxmPTEvMCxoPS0xLzAscD0wLGQ9MCxnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB2PXJbZ10sbT12LnB0cy5tYXAoby5leHRyYWN0VmFsKSx5PXYuYmFuZHdpZHRoPWwoZSx2LG0pLHg9di5zcGFuPWMoZSx2LHUseSk7aWYodi5taW49PT12Lm1heCYmMD09PXkpeD12LnNwYW49W3YubWluLHYubWF4XSx2LmRlbnNpdHk9W3t2OjEsdDp4WzBdfV0sdi5iYW5kd2lkdGg9eSxwPU1hdGgubWF4KHAsMSk7ZWxzZXt2YXIgYj14WzFdLXhbMF0sXz1NYXRoLmNlaWwoYi8oeS8zKSksdz1iL187aWYoIWlzRmluaXRlKHcpfHwhaXNGaW5pdGUoXykpcmV0dXJuIG4uZXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29tcHV0aW5nIHRoZSB2aW9saW4gc3BhbiIpLHJbMF0udC5lbXB0eT0hMCxyO3ZhciBrPW8ubWFrZUtERSh2LGUsbSk7di5kZW5zaXR5PW5ldyBBcnJheShfKTtmb3IodmFyIFQ9MCxBPXhbMF07QTx4WzFdK3cvMjtUKyssQSs9dyl7dmFyIE09ayhBKTt2LmRlbnNpdHlbVF09e3Y6TSx0OkF9LHA9TWF0aC5tYXgocCxNKX19ZD1NYXRoLm1heChkLG0ubGVuZ3RoKSxmPU1hdGgubWluKGYseFswXSksaD1NYXRoLm1heChoLHhbMV0pfXZhciBTPWkuZmluZEV4dHJlbWVzKHUsW2YsaF0se3BhZGRlZDohMH0pO2lmKGUuX2V4dHJlbWVzW3UuX2lkXT1TLGUud2lkdGgpclswXS50Lm1heEtERT1wO2Vsc2V7dmFyIEU9cy5fdmlvbGluU2NhbGVHcm91cFN0YXRzLEM9ZS5zY2FsZWdyb3VwLEw9RVtDXTtMPyhMLm1heEtERT1NYXRoLm1heChMLm1heEtERSxwKSxMLm1heENvdW50PU1hdGgubWF4KEwubWF4Q291bnQsZCkpOkVbQ109e21heEtERTpwLG1heENvdW50OmR9fXJldHVybiByWzBdLnQubGFiZWxzLmtkZT1uLl8odCwia2RlOiIpLHJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL2JveC9jYWxjIjo4NjMsIi4vaGVscGVycyI6MTE2Nn1dLDExNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRQb3NpdGlvbk9mZnNldCxpPVsidiIsImgiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxhPWUueGF4aXMsbz1lLnlheGlzLHM9MDtzPGkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPWlbc10sYz0iaCI9PT1sP286YSx1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGg9cltmXSxwPWhbMF0udCxkPWhbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fCJ2aW9saW4iIT09ZC50eXBlfHxwLmVtcHR5fHxkLm9yaWVudGF0aW9uIT09bHx8ZC54YXhpcyE9PWEuX2lkfHxkLnlheGlzIT09by5faWR8fHUucHVzaChmKX1uKCJ2aW9saW4iLHQsdSxjKX19fSx7Ii4uL2JveC9jcm9zc190cmFjZV9jYWxjIjo4NjR9XSwxMTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vYm94L2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSwhMSE9PWUudmlzaWJsZSl7bCgiYmFuZHdpZHRoIiksbCgic2lkZSIpLGwoIndpZHRoIil8fChsKCJzY2FsZWdyb3VwIixlLm5hbWUpLGwoInNjYWxlbW9kZSIpKTt2YXIgdSxmPWwoInNwYW4iKTtBcnJheS5pc0FycmF5KGYpJiYodT0ibWFudWFsIiksbCgic3Bhbm1vZGUiLHUpO3ZhciBoPWwoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxwPWwoImxpbmUud2lkdGgiKSxkPWwoImZpbGxjb2xvciIsaS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpO2EuaGFuZGxlUG9pbnRzRGVmYXVsdHModCxlLGwse3ByZWZpeDoiIn0pO3ZhciBnPWMoImJveC53aWR0aCIpLHY9YygiYm94LmZpbGxjb2xvciIsZCksbT1jKCJib3gubGluZS5jb2xvciIsaCkseT1jKCJib3gubGluZS53aWR0aCIscCk7bCgiYm94LnZpc2libGUiLEJvb2xlYW4oZ3x8dnx8bXx8eSkpfHwoZS5ib3g9e3Zpc2libGU6ITF9KTt2YXIgeD1jKCJtZWFubGluZS5jb2xvciIsaCksYj1jKCJtZWFubGluZS53aWR0aCIscCk7bCgibWVhbmxpbmUudmlzaWJsZSIsQm9vbGVhbih4fHxiKSl8fChlLm1lYW5saW5lPXt2aXNpYmxlOiExfSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi9ib3gvZGVmYXVsdHMiOjg2NSwiLi9hdHRyaWJ1dGVzIjoxMTYyfV0sMTE2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGguc3FydCgyKk1hdGguUEkpKk1hdGguZXhwKC0uNSp0KnQpfTtyLm1ha2VLREU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIubGVuZ3RoLGE9aSxvPXQuYmFuZHdpZHRoLHM9MS8obipvKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT0wO2k8bjtpKyspZSs9YSgodC1yW2ldKS9vKTtyZXR1cm4gcyplfX0sci5nZXRQb3NpdGlvbk9uS2RlUGF0aD1mdW5jdGlvbih0LGUscil7dmFyIGksYTsiaCI9PT1lLm9yaWVudGF0aW9uPyhpPSJ5IixhPSJ4Iik6KGk9IngiLGE9InkiKTt2YXIgbz1uLmZpbmRQb2ludE9uUGF0aCh0LnBhdGgscixhLHtwYXRoTGVuZ3RoOnQucGF0aExlbmd0aH0pLHM9dC5wb3NDZW50ZXJQeCxsPW9baV07cmV0dXJuW2wsImJvdGgiPT09ZS5zaWRlPzIqcy1sOnNdfSxyLmdldEtkZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LnB0cy5tYXAoci5leHRyYWN0VmFsKTtyZXR1cm4gci5tYWtlS0RFKHQsZSxpKShuKS90LnBvc0RlbnNpdHlTY2FsZX0sci5leHRyYWN0VmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZ9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sMTE2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9ib3gvaG92ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe3ZhciBjLHUsZj10LmNkLGg9ZlswXS50cmFjZSxwPWguaG92ZXJvbixkPS0xIT09cC5pbmRleE9mKCJ2aW9saW5zIiksZz0tMSE9PXAuaW5kZXhPZigia2RlIiksdj1bXTtpZihkfHxnKXt2YXIgbT1hLmhvdmVyT25Cb3hlcyh0LGUscixzKTtpZihkJiYodj12LmNvbmNhdChtKSksZyYmbS5sZW5ndGg+MCl7dmFyIHkseCxiLF8sdyxrPXQueGEsVD10LnlhOyJoIj09PWgub3JpZW50YXRpb24/KHc9ZSx5PSJ5IixiPVQseD0ieCIsXz1rKToodz1yLHk9IngiLGI9ayx4PSJ5IixfPVQpO3ZhciBBPWZbdC5pbmRleF07aWYodz49QS5zcGFuWzBdJiZ3PD1BLnNwYW5bMV0pe3ZhciBNPW4uZXh0ZW5kRmxhdCh7fSx0KSxTPV8uYzJwKHcsITApLEU9by5nZXRLZGVWYWx1ZShBLGgsdyksQz1vLmdldFBvc2l0aW9uT25LZGVQYXRoKEEsaCxTKSxMPWIuX29mZnNldCx6PWIuX2xlbmd0aDtNW3krIjAiXT1DWzBdLE1beSsiMSJdPUNbMV0sTVt4KyIwIl09TVt4KyIxIl09UyxNW3grIkxhYmVsIl09eCsiOiAiK2kuaG92ZXJMYWJlbFRleHQoXyx3KSsiLCAiK2ZbMF0udC5sYWJlbHMua2RlKyIgIitFLnRvRml4ZWQoMyksTS5zcGlrZURpc3RhbmNlPW1bMF0uc3Bpa2VEaXN0YW5jZTt2YXIgTz15KyJTcGlrZSI7TVtPXT1tWzBdW09dLG1bMF0uc3Bpa2VEaXN0YW5jZT12b2lkIDAsbVswXVtPXT12b2lkIDAsTS5ob3ZlcnRlbXBsYXRlPSExLHYucHVzaChNKSwodT17c3Ryb2tlOnQuY29sb3J9KVt5KyIxIl09bi5jb25zdHJhaW4oTCtDWzBdLEwsTCt6KSx1W3krIjIiXT1uLmNvbnN0cmFpbihMK0NbMV0sTCxMK3opLHVbeCsiMSJdPXVbeCsiMiJdPV8uX29mZnNldCtTfX19LTEhPT1wLmluZGV4T2YoInBvaW50cyIpJiYoYz1hLmhvdmVyT25Qb2ludHModCxlLHIpKTt2YXIgST1sLnNlbGVjdEFsbCgiLnZpb2xpbmxpbmUtIitoLnVpZCkuZGF0YSh1P1swXTpbXSk7cmV0dXJuIEkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJ2aW9saW5saW5lLSIraC51aWQsITApLmF0dHIoInN0cm9rZS13aWR0aCIsMS41KSxJLmV4aXQoKS5yZW1vdmUoKSxJLmF0dHIodSksImNsb3Nlc3QiPT09cz9jP1tjXTp2OmM/KHYucHVzaChjKSx2KTp2fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vYm94L2hvdmVyIjo4NjcsIi4vaGVscGVycyI6MTE2Nn1dLDExNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vYm94L2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vYm94L3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJ2aW9saW4iLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzeW1ib2xzIiwib3JpZW50ZWQiLCJib3gtdmlvbGluIiwic2hvd0xlZ2VuZCIsInZpb2xpbkxheW91dCIsInpvb21TY2FsZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuLi9ib3gvZGVmYXVsdHMiOjg2NSwiLi4vYm94L3NlbGVjdCI6ODcyLCIuLi9zY2F0dGVyL3N0eWxlIjoxMDc0LCIuL2F0dHJpYnV0ZXMiOjExNjIsIi4vY2FsYyI6MTE2MywiLi9jcm9zc190cmFjZV9jYWxjIjoxMTY0LCIuL2RlZmF1bHRzIjoxMTY1LCIuL2hvdmVyIjoxMTY3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTY5LCIuL2xheW91dF9kZWZhdWx0cyI6MTE3MCwiLi9wbG90IjoxMTcxLCIuL3N0eWxlIjoxMTcyfV0sMTE2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt2aW9saW5tb2RlOmkoe30sbi5ib3htb2RlLHt9KSx2aW9saW5nYXA6aSh7fSxuLmJveGdhcCx7fSksdmlvbGluZ3JvdXBnYXA6aSh7fSxuLmJveGdyb3VwZ2FwLHt9KX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL2JveC9sYXlvdXRfYXR0cmlidXRlcyI6ODY5fV0sMTE3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EuX3N1cHBseSh0LGUscixmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSwidmlvbGluIil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIjo4NzAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExNjl9XSwxMTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vYm94L3Bsb3QiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9wb2ludHMiKSxsPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXt2YXIgdT10Ll9mdWxsTGF5b3V0LGY9ZS54YXhpcyxoPWUueWF4aXM7ZnVuY3Rpb24gcCh0KXt2YXIgZT1zKHQse3hheGlzOmYseWF4aXM6aCxjb25uZWN0R2FwczohMCxiYXNlVG9sZXJhbmNlOi43NSxzaGFwZToic3BsaW5lIixzaW1wbGlmeTohMH0pO3JldHVybiBhLnNtb290aG9wZW4oZVswXSwxKX1pLm1ha2VUcmFjZUdyb3VwcyhjLHIsInRyYWNlIHZpb2xpbnMiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxzPWEudCxjPWEudHJhY2U7aWYoZS5pc1JhbmdlUGxvdHx8KGEubm9kZTM9ciksITAhPT1jLnZpc2libGV8fHMuZW1wdHkpci5yZW1vdmUoKTtlbHNle3ZhciBkPXMuYlBvcyxnPXMuYmRQb3Msdj1lW3MudmFsTGV0dGVyKyJheGlzIl0sbT1lW3MucG9zTGV0dGVyKyJheGlzIl0seT0iYm90aCI9PT1jLnNpZGUseD15fHwicG9zaXRpdmUiPT09Yy5zaWRlLGI9eXx8Im5lZ2F0aXZlIj09PWMuc2lkZSxfPXIuc2VsZWN0QWxsKCJwYXRoLnZpb2xpbiIpLmRhdGEoaS5pZGVudGl0eSk7Xy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiY2xhc3MiLCJ2aW9saW4iKSxfLmV4aXQoKS5yZW1vdmUoKSxfLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxsLGYsaCxfPW4uc2VsZWN0KHRoaXMpLHc9dC5kZW5zaXR5LGs9dy5sZW5ndGgsVD10LnBvcytkLEE9bS5jMnAoVCk7aWYoYy53aWR0aCllPXMubWF4S0RFL2c7ZWxzZXt2YXIgTT11Ll92aW9saW5TY2FsZUdyb3VwU3RhdHNbYy5zY2FsZWdyb3VwXTtlPSJjb3VudCI9PT1jLnNjYWxlbW9kZT9NLm1heEtERS9nKihNLm1heENvdW50L3QucHRzLmxlbmd0aCk6TS5tYXhLREUvZ31pZih4KXtmb3IoZj1uZXcgQXJyYXkoayksbz0wO288aztvKyspKGg9ZltvXT17fSlbcy5wb3NMZXR0ZXJdPVQrd1tvXS52L2UsaFtzLnZhbExldHRlcl09d1tvXS50O3I9cChmKX1pZihiKXtmb3IoZj1uZXcgQXJyYXkoayksbD0wLG89ay0xO2w8aztsKyssby0tKShoPWZbbF09e30pW3MucG9zTGV0dGVyXT1ULXdbb10udi9lLGhbcy52YWxMZXR0ZXJdPXdbb10udDtpPXAoZil9aWYoeSlhPXIrIkwiK2kuc3Vic3RyKDEpKyJaIjtlbHNle3ZhciBTPVtBLHYuYzJwKHdbMF0udCldLEU9W0Esdi5jMnAod1trLTFdLnQpXTsiaCI9PT1jLm9yaWVudGF0aW9uJiYoUy5yZXZlcnNlKCksRS5yZXZlcnNlKCkpLGE9eD8iTSIrUysiTCIrci5zdWJzdHIoMSkrIkwiK0U6Ik0iK0UrIkwiK2kuc3Vic3RyKDEpKyJMIitTfV8uYXR0cigiZCIsYSksdC5wb3NDZW50ZXJQeD1BLHQucG9zRGVuc2l0eVNjYWxlPWUqZyx0LnBhdGg9Xy5ub2RlKCksdC5wYXRoTGVuZ3RoPXQucGF0aC5nZXRUb3RhbExlbmd0aCgpLyh5PzI6MSl9KTt2YXIgdyxrLFQsQT1jLmJveCxNPUEud2lkdGgsUz0oQS5saW5lfHx7fSkud2lkdGg7eT8odz1nKk0saz0wKTp4Pyh3PVswLGcqTS8yXSxrPS1TKToodz1bZypNLzIsMF0saz1TKSxvLnBsb3RCb3hBbmRXaGlza2VycyhyLHtwb3M6bSx2YWw6dn0sYyx7YlBvczpkLGJkUG9zOncsYlBvc1B4T2Zmc2V0Omt9KSxvLnBsb3RCb3hNZWFuKHIse3BvczptLHZhbDp2fSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6a30pLCFjLmJveC52aXNpYmxlJiZjLm1lYW5saW5lLnZpc2libGUmJihUPWkuaWRlbnRpdHkpO3ZhciBFPXIuc2VsZWN0QWxsKCJwYXRoLm1lYW5saW5lIikuZGF0YShUfHxbXSk7RS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibWVhbmxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLEUuZXhpdCgpLnJlbW92ZSgpLEUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT12LmMycCh0Lm1lYW4sITApLHI9bC5nZXRQb3NpdGlvbk9uS2RlUGF0aCh0LGMsZSk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsImgiPT09Yy5vcmllbnRhdGlvbj8iTSIrZSsiLCIrclswXSsiViIrclsxXToiTSIrclswXSsiLCIrZSsiSCIrclsxXSl9KSxvLnBsb3RQb2ludHMocix7eDpmLHk6aH0sYyxzKX19KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2xpYiI6NzAwLCIuLi9ib3gvcGxvdCI6ODcxLCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIjoxMDY1LCIuL2hlbHBlcnMiOjExNjYsZDM6MTU0fV0sMTE3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlUG9pbnRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UudmlvbGlucyIpO3Iuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS50cmFjZSxvPW4uc2VsZWN0KHRoaXMpLHM9ci5ib3h8fHt9LGw9cy5saW5lfHx7fSxjPXIubWVhbmxpbmV8fHt9LHU9Yy53aWR0aDtvLnNlbGVjdEFsbCgicGF0aC52aW9saW4iKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLmxpbmUud2lkdGgrInB4IikuY2FsbChpLnN0cm9rZSxyLmxpbmUuY29sb3IpLmNhbGwoaS5maWxsLHIuZmlsbGNvbG9yKSxvLnNlbGVjdEFsbCgicGF0aC5ib3giKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixsLndpZHRoKyJweCIpLmNhbGwoaS5zdHJva2UsbC5jb2xvcikuY2FsbChpLmZpbGwscy5maWxsY29sb3IpO3ZhciBmPXsic3Ryb2tlLXdpZHRoIjp1KyJweCIsInN0cm9rZS1kYXNoYXJyYXkiOjIqdSsicHgsIit1KyJweCJ9O28uc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5zdHlsZShmKS5jYWxsKGkuc3Ryb2tlLGMuY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLm1lYW5saW5lIikuc3R5bGUoZikuY2FsbChpLnN0cm9rZSxjLmNvbG9yKSxhKG8scix0KX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uL3NjYXR0ZXIvc3R5bGUiOjEwNzQsZDM6MTU0fV0sMTE3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2Z1bmN0aW9uIG8odCl7cmV0dXJue21hcmtlcjp7Y29sb3I6YSh7fSxuLm1hcmtlci5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6YSh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOiJzdHlsZSJ9KSx3aWR0aDphKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fWUuZXhwb3J0cz17bWVhc3VyZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LGJhc2U6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSx4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSx0ZXh0Om4udGV4dCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6bi50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpuLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpuLm91dHNpZGV0ZXh0Zm9udCxjb25zdHJhaW50ZXh0Om4uY29uc3RyYWludGV4dCxjbGlwb25heGlzOm4uY2xpcG9uYXhpcyxvcmllbnRhdGlvbjpuLm9yaWVudGF0aW9uLG9mZnNldDpuLm9mZnNldCx3aWR0aDpuLndpZHRoLGluY3JlYXNpbmc6bygpLGRlY3JlYXNpbmc6bygpLHRvdGFsczpvKCksY29ubmVjdG9yOntsaW5lOntjb2xvcjppLmNvbG9yLHdpZHRoOmkud2lkdGgsZGFzaDppLmRhc2gsZWRpdFR5cGU6InBsb3QifSxtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzcGFubmluZyIsImJldHdlZW4iXSxkZmx0OiJiZXR3ZWVuIixlZGl0VHlwZToicGxvdCJ9LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5vZmZzZXRncm91cH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi9iYXIvYXR0cmlidXRlcyI6ODM5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTF9XSwxMTc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKS5tZXJnZUFycmF5LGE9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBzKHQpe3JldHVybiJhIj09PXR8fCJhYnNvbHV0ZSI9PT10fWZ1bmN0aW9uIGwodCl7cmV0dXJuInQiPT09dHx8InRvdGFsIj09PXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1PW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxmPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKTsiaCI9PT1lLm9yaWVudGF0aW9uPyhyPXUubWFrZUNhbGNkYXRhKGUsIngiKSxjPWYubWFrZUNhbGNkYXRhKGUsInkiKSk6KHI9Zi5tYWtlQ2FsY2RhdGEoZSwieSIpLGM9dS5tYWtlQ2FsY2RhdGEoZSwieCIpKTtmb3IodmFyIGgscD1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCksZD1uZXcgQXJyYXkocCksZz0wLHY9ITEsbT0wO208cDttKyspe3ZhciB5PXJbbV18fDAseD0hMTsoclttXSE9PW98fGwoZS5tZWFzdXJlW21dKXx8cyhlLm1lYXN1cmVbbV0pKSYmbSsxPHAmJihyW20rMV0hPT1vfHxsKGUubWVhc3VyZVttKzFdKXx8cyhlLm1lYXN1cmVbbSsxXSkpJiYoeD0hMCk7dmFyIGI9ZFttXT17aTptLHA6Y1ttXSxzOnkscmF3Uzp5LGNOZXh0Onh9O3MoZS5tZWFzdXJlW21dKT8oZz1iLnMsYi5pc1N1bT0hMCxiLmRpcj0idG90YWxzIixiLnM9Zyk6bChlLm1lYXN1cmVbbV0pPyhiLmlzU3VtPSEwLGIuZGlyPSJ0b3RhbHMiLGIucz1nKTooYi5pc1N1bT0hMSxiLmRpcj1iLnJhd1M8MD8iZGVjcmVhc2luZyI6ImluY3JlYXNpbmciLGg9Yi5zLGIucz1nK2gsZys9aCksInRvdGFscyI9PT1iLmRpciYmKHY9ITApLGUuaWRzJiYoYi5pZD1TdHJpbmcoZS5pZHNbbV0pKX1yZXR1cm4gZFswXS5oYXNUb3RhbHM9dixpKGUudGV4dCxkLCJ0eCIpLGkoZS5ob3ZlcnRleHQsZCwiaHR4IiksYShkLGUpLGR9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjEwNTN9XSwxMTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1lLnhheGlzLGM9ZS55YXhpcyx1PVtdLGY9W10saD1bXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcD1vW2ldOyEwPT09cC52aXNpYmxlJiZwLnhheGlzPT09bC5faWQmJnAueWF4aXM9PT1jLl9pZCYmIndhdGVyZmFsbCI9PT1wLnR5cGUmJihyPXNbaV0sImgiPT09cC5vcmllbnRhdGlvbj9oLnB1c2gocik6Zi5wdXNoKHIpLHUucHVzaChyKSl9dmFyIGQ9e19mdWxsTGF5b3V0OntfYXhpc01hdGNoR3JvdXBzOmEuX2F4aXNNYXRjaEdyb3VwcyxfYWxpZ25tZW50T3B0czphLl9hbGlnbm1lbnRPcHRzLGJhcm1vZGU6YS53YXRlcmZhbGxtb2RlLGJhcmdhcDphLndhdGVyZmFsbGdhcCxiYXJncm91cGdhcDphLndhdGVyZmFsbGdyb3VwZ2FwfX07Zm9yKG4oZCxsLGMsZiksbihkLGMsbCxoKSxpPTA7aTx1Lmxlbmd0aDtpKyspe3I9dVtpXTtmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXTshMT09PXYuaXNTdW0mJih2LnMwKz0wPT09Zz8wOnJbZy0xXS5zKX19fX0seyIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6ODQyfV0sMTE3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsYT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0LG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYz0iIzNEOTk3MCIsdT0iI0ZGNDEzNiIsZj0iIzQ0OTlGRiI7ZnVuY3Rpb24gaCh0LGUscil7dChlKyIubWFya2VyLmNvbG9yIixyKSx0KGUrIi5tYXJrZXIubGluZS5jb2xvciIsbC5kZWZhdWx0TGluZSksdChlKyIubWFya2VyLmxpbmUud2lkdGgiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1vKHQsZSxpLGwpPyhsKCJtZWFzdXJlIiksbCgib3JpZW50YXRpb24iLGUueCYmIWUueT8iaCI6InYiKSxsKCJiYXNlIiksbCgib2Zmc2V0IiksbCgid2lkdGgiKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgiaG92ZXJ0ZW1wbGF0ZSIpLGEodCxlLGksbCwhMSksaChsLCJpbmNyZWFzaW5nIixjKSxoKGwsImRlY3JlYXNpbmciLHUpLGgobCwidG90YWxzIixmKSxsKCJjb25uZWN0b3IudmlzaWJsZSIpJiYobCgiY29ubmVjdG9yLm1vZGUiKSxsKCJjb25uZWN0b3IubGluZS53aWR0aCIpJiYobCgiY29ubmVjdG9yLmxpbmUuY29sb3IiKSxsKCJjb25uZWN0b3IubGluZS5kYXNoIikpKSk6ZS52aXNpYmxlPSExfSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcixhO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG4uY29lcmNlKGEuX2lucHV0LGEscyx0KX1pZigiZ3JvdXAiPT09ZS53YXRlcmZhbGxtb2RlKWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKXI9KGE9dFtsXSkuX2lucHV0LGkocixhLGUsbyl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6aX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9saWIiOjcwMCwiLi4vYmFyL2RlZmF1bHRzIjo4NDMsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjEwNzcsIi4vYXR0cmlidXRlcyI6MTE3M31dLDExNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dCxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5vcGFjaXR5LGE9dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJPbkJhcnMsbz0iXHUyNWIyIixzPSJcdTI1YmMiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz1hKHQsZSxyLGwpO2lmKGMpe3ZhciB1PWMuY2QsZj11WzBdLnRyYWNlLGg9ImgiPT09Zi5vcmllbnRhdGlvbixwPWg/dC54YTp0LnlhLGQ9dVtjLmluZGV4XSxnPWg/IngiOiJ5Iix2PWQuaXNTdW0/ZC5iK2QuczpkLnJhd1M7aWYoZC5pc1N1bSljW2crIkxhYmVsVmFsIl09bSh2KTtlbHNle2lmKHY+MCljLmV4dHJhVGV4dD1tKHYpKyIgIitvO2Vsc2V7aWYoISh2PDApKXJldHVybjtjLmV4dHJhVGV4dD0iKCIrbSgtdikrIikgIitzfWMuZXh0cmFUZXh0Kz0iPGJyPkluaXRpYWw6ICIrbShkLmIrZC5zLXYpfXJldHVybiBjLmNvbG9yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFtlLmRpcl0ubWFya2VyLG49ci5jb2xvcixhPXIubGluZS5jb2xvcixvPXIubGluZS53aWR0aDtpZihpKG4pKXJldHVybiBuO2lmKGkoYSkmJm8pcmV0dXJuIGF9KGYsZCksW2NdfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG4ocCx0KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vYmFyL2hvdmVyIjo4NDV9XSwxMTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmNyb3NzVHJhY2VDYWxjPXQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKS5zdHlsZSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuLi9iYXIvc2VsZWN0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJ3YXRlcmZhbGwiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwib3JpZW50ZWQiLCJzaG93TGVnZW5kIiwiem9vbVNjYWxlIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuLi9iYXIvc2VsZWN0Ijo4NTAsIi4vYXR0cmlidXRlcyI6MTE3MywiLi9jYWxjIjoxMTc0LCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjExNzUsIi4vZGVmYXVsdHMiOjExNzYsIi4vaG92ZXIiOjExNzcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExNzksIi4vbGF5b3V0X2RlZmF1bHRzIjoxMTgwLCIuL3Bsb3QiOjExODEsIi4vc3R5bGUiOjExODJ9XSwxMTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17d2F0ZXJmYWxsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTE4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPSExO2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1mb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZihsLnZpc2libGUmJiJ3YXRlcmZhbGwiPT09bC50eXBlKXthPSEwO2JyZWFrfX1hJiYobygid2F0ZXJmYWxsbW9kZSIpLG8oIndhdGVyZmFsbGdhcCIsLjIpLG8oIndhdGVyZmFsbGdyb3VwZ2FwIikpfX0seyIuLi8uLi9saWIiOjcwMCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTE3OX1dLDExODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi9iYXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtvKHQsZSxyLHMpLGZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPWUueGF4aXMsbD1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKG8sciwidHJhY2UgYmFycyIpLmVhY2goZnVuY3Rpb24ocil7dmFyIG89bi5zZWxlY3QodGhpcyksYz1yWzBdLHU9Yy50cmFjZSxmPWkuZW5zdXJlU2luZ2xlKG8sImciLCJsaW5lcyIpO2lmKHUuY29ubmVjdG9yJiZ1LmNvbm5lY3Rvci52aXNpYmxlKXt2YXIgaD0iaCI9PT11Lm9yaWVudGF0aW9uLHA9dS5jb25uZWN0b3IubW9kZTtlLmlzUmFuZ2VQbG90fHwoYy5ub2RlMz1vKTt2YXIgZD1mLnNlbGVjdEFsbCgiZy5saW5lIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGluZSIsITApLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciBnPWQuc2l6ZSgpO2QuZWFjaChmdW5jdGlvbihyLG8pe2lmKG89PT1nLTF8fHIuY05leHQpe3ZhciBjLGYsZCx2LG0seSx4LGIsXz1uLnNlbGVjdCh0aGlzKSx3PSIiLGs9MDtvKzE8ZyYmQXJyYXkuaXNBcnJheSh1Lm9mZnNldCkmJihrLT11Lm9mZnNldFtvKzFdLXUub2Zmc2V0W29dKSxoPyhjPXMuYzJwKHIuczEsITApLGY9bC5jMnAoci5wMSwhMCksZD1zLmMycChyLnMwLCEwKSx2PWwuYzJwKHIucDAsITApLG09cy5jMnAoci5zMSwhMCkseT1sLmMycChyLnAxLCEwKSxvKzE8ZyYmKHg9cy5jMnAoci5zMCsxLWssITApLGI9bC5jMnAoci5wMCsxLWssITApKSk6KGM9cy5jMnAoci5wMSwhMCksZj1sLmMycChyLnMxLCEwKSxkPXMuYzJwKHIucDAsITApLHY9bC5jMnAoci5zMCwhMCksbT1zLmMycChyLnAxLCEwKSx5PWwuYzJwKHIuczEsITApLG8rMTxnJiYoeD1zLmMycChyLnAwKzEtaywhMCksYj1sLmMycChyLnMwKzEtaywhMCkpKSwic3Bhbm5pbmciPT09cCYmIXIuaXNTdW0mJm8+MCYmKHcrPWg/Ik0iK2QrIiwiK2YrIlYiK3Y6Ik0iK2MrIiwiK3YrIkgiK2QpLCJiZXR3ZWVuIiE9PXAmJihyLmlzU3VtfHxvPGctMSkmJih3Kz1oPyJNIittKyIsIit2KyJWIit5OiJNIitkKyIsIit5KyJIIittKSx2b2lkIDAhPT14JiZ2b2lkIDAhPT1iJiYodys9aD8iTSIrbSsiLCIreSsiViIrYjoiTSIrbSsiLCIreSsiSCIreCksaS5lbnN1cmVTaW5nbGUoXywicGF0aCIpLmF0dHIoImQiLHcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSl9ZWxzZSBmLnJlbW92ZSgpfSl9KHQsZSxyLHMpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uL2Jhci9wbG90Ijo4NDksZDM6MTU0fV0sMTE4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9iYXIvc3R5bGUiKS5zdHlsZVRleHRQb2ludHM7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcud2F0ZXJmYWxsbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtyLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLHM9ZVswXS50cmFjZTtyLnNlbGVjdEFsbCgiLnBvaW50ID4gcGF0aCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9c1t0LmRpcl0ubWFya2VyO24uc2VsZWN0KHRoaXMpLmNhbGwoYS5maWxsLGUuY29sb3IpLmNhbGwoYS5zdHJva2UsZS5saW5lLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsZS5saW5lLmRhc2gsZS5saW5lLndpZHRoKS5zdHlsZSgib3BhY2l0eSIscy5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/LjM6MSl9KSxvKHIscyx0KSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9cy5jb25uZWN0b3IubGluZTtpLmxpbmVHcm91cFN0eWxlKHQuc2VsZWN0QWxsKCJwYXRoIiksZS53aWR0aCxlLmNvbG9yLGUuZGFzaCl9KX0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vYmFyL3N0eWxlIjo4NTIsZDM6MTU0fV0sMTE4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iYWdncmVnYXRlIjt2YXIgbD1yLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxncm91cHM6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LGFnZ3JlZ2F0aW9uczp7X2lzTGlua2VkVG9BcnJheToiYWdncmVnYXRpb24iLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWVkaWFuIiwibW9kZSIsInJtcyIsInN0ZGRldiIsIm1pbiIsIm1heCIsImZpcnN0IiwibGFzdCIsImNoYW5nZSIsInJhbmdlIl0sZGZsdDoiZmlyc3QiLGVkaXRUeXBlOiJjYWxjIn0sZnVuY21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNhbXBsZSIsInBvcHVsYXRpb24iXSxkZmx0OiJzYW1wbGUiLGVkaXRUeXBlOiJjYWxjIn0sZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxjPWwuYWdncmVnYXRpb25zO2Z1bmN0aW9uIHUodCxlLHIsYSl7aWYoYS5lbmFibGVkKXtmb3IodmFyIG89YS50YXJnZXQsbD1pLm5lc3RlZFByb3BlcnR5KGUsbyksYz1sLmdldCgpLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZ1bmMsbj1lLmQyYyxpPWUuYzJkO3N3aXRjaChyKXtjYXNlImNvdW50IjpyZXR1cm4gZjtjYXNlImZpcnN0IjpyZXR1cm4gaDtjYXNlImxhc3QiOnJldHVybiBwO2Nhc2Uic3VtIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPW4odFtlW2FdXSk7byE9PXMmJihyKz1vKX1yZXR1cm4gaShyKX07Y2FzZSJhdmciOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sLGErKyl9cmV0dXJuIGE/aShyL2EpOnN9O2Nhc2UibWluIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89bih0W2VbYV1dKTtvIT09cyYmKHI9TWF0aC5taW4ocixvKSl9cmV0dXJuIHI9PT0xLzA/czppKHIpfTtjYXNlIm1heCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLzAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1zJiYocj1NYXRoLm1heChyLG8pKX1yZXR1cm4gcj09PS0xLzA/czppKHIpfTtjYXNlInJhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGE9LTEvMCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyPU1hdGgubWluKHIsbCksYT1NYXRoLm1heChhLGwpKX1yZXR1cm4gYT09PS0xLzB8fHI9PT0xLzA/czppKGEtcil9O2Nhc2UiY2hhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRbZVswXV0pLGE9bih0W2VbZS5sZW5ndGgtMV1dKTtyZXR1cm4gcj09PXN8fGE9PT1zP3M6aShhLXIpfTtjYXNlIm1lZGlhbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89bih0W2VbYV1dKTtvIT09cyYmci5wdXNoKG8pfWlmKCFyLmxlbmd0aClyZXR1cm4gcztyLnNvcnQoKTt2YXIgbD0oci5sZW5ndGgtMSkvMjtyZXR1cm4gaSgocltNYXRoLmZsb29yKGwpXStyW01hdGguY2VpbChsKV0pLzIpfTtjYXNlIm1vZGUiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxhPTAsbz1zLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9bih0W2VbbF1dKTtpZihjIT09cyl7dmFyIHU9cltjXT0ocltjXXx8MCkrMTt1PmEmJihhPXUsbz1jKX19cmV0dXJuIGE/aShvKTpzfTtjYXNlInJtcyI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsYT0wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHIrPWwqbCxhKyspfXJldHVybiBhP2koTWF0aC5zcXJ0KHIvYSkpOnN9O2Nhc2Uic3RkZGV2IjpyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgaSxhPTAsbz0wLGw9MSxjPXM7Zm9yKGk9MDtpPHIubGVuZ3RoJiZjPT09cztpKyspYz1uKGVbcltpXV0pO2lmKGM9PT1zKXJldHVybiBzO2Zvcig7aTxyLmxlbmd0aDtpKyspe3ZhciB1PW4oZVtyW2ldXSk7aWYodSE9PXMpe3ZhciBmPXUtYzthKz1mLG8rPWYqZixsKyt9fXZhciBoPSJzYW1wbGUiPT09dC5mdW5jbW9kZT9sLTE6bDtyZXR1cm4gaD9NYXRoLnNxcnQoKG8tYSphL2wpL2gpOjB9fX0oYSxuLmdldERhdGFDb252ZXJzaW9ucyh0LGUsbyxjKSksZD1uZXcgQXJyYXkoci5sZW5ndGgpLGc9MDtnPHIubGVuZ3RoO2crKylkW2ddPXUoYyxyW2ddKTtsLnNldChkKSwiY291bnQiPT09YS5mdW5jJiZpLnB1c2hVbmlxdWUoZS5fYXJyYXlBdHRycyxvKX19ZnVuY3Rpb24gZih0LGUpe3JldHVybiBlLmxlbmd0aH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHRbZVswXV19ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB0W2VbZS5sZW5ndGgtMV1dfXIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXt9O2Z1bmN0aW9uIG8oZSxyKXtyZXR1cm4gaS5jb2VyY2UodCxuLGwsZSxyKX1pZighbygiZW5hYmxlZCIpKXJldHVybiBuO3ZhciBzPWEuZmluZEFycmF5QXR0cmlidXRlcyhlKSx1PXt9O2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXT0xO3ZhciBmPW8oImdyb3VwcyIpO2lmKCFBcnJheS5pc0FycmF5KGYpKXtpZighdVtmXSlyZXR1cm4gbi5lbmFibGVkPSExLG47dVtmXT0wfXZhciBoLHA9dC5hZ2dyZWdhdGlvbnN8fFtdLGQ9bi5hZ2dyZWdhdGlvbnM9bmV3IEFycmF5KHAubGVuZ3RoKTtmdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGkuY29lcmNlKHBbcl0saCxjLHQsZSl9Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKyl7aD17X2luZGV4OnJ9O3ZhciB2PWcoInRhcmdldCIpLG09ZygiZnVuYyIpO2coImVuYWJsZWQiKSYmdiYmKHVbdl18fCJjb3VudCI9PT1tJiZ2b2lkIDA9PT11W3ZdKT8oInN0ZGRldiI9PT1tJiZnKCJmdW5jbW9kZSIpLHVbdl09MCxkW3JdPWgpOmRbcl09e2VuYWJsZWQ6ITEsX2luZGV4OnJ9fWZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXSYmZC5wdXNoKHt0YXJnZXQ6c1tyXSxmdW5jOmMuZnVuYy5kZmx0LGVuYWJsZWQ6ITAsX2luZGV4Oi0xfSk7cmV0dXJuIG59LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgbj1yLmdyb3VwcyxhPWkuZ2V0VGFyZ2V0QXJyYXkoZSx7dGFyZ2V0Om59KTtpZihhKXt2YXIgcyxsLGMsZixoPXt9LHA9e30sZD1bXSxnPW8oZS50cmFuc2Zvcm1zLHIpLHY9YS5sZW5ndGg7Zm9yKGUuX2xlbmd0aCYmKHY9TWF0aC5taW4odixlLl9sZW5ndGgpKSxzPTA7czx2O3MrKyl2b2lkIDA9PT0oYz1oW2w9YVtzXV0pPyhoW2xdPWQubGVuZ3RoLGY9W3NdLGQucHVzaChmKSxwW2hbbF1dPWcocykpOihkW2NdLnB1c2gocykscFtoW2xdXT0ocFtoW2xdXXx8W10pLmNvbmNhdChnKHMpKSk7ci5faW5kZXhUb1BvaW50cz1wO3ZhciBtPXIuYWdncmVnYXRpb25zO2ZvcihzPTA7czxtLmxlbmd0aDtzKyspdSh0LGUsZCxtW3NdKTsic3RyaW5nIj09dHlwZW9mIG4mJnUodCxlLGQse3RhcmdldDpuLGZ1bmM6ImZpcnN0IixlbmFibGVkOiEwfSksZS5fbGVuZ3RoPWQubGVuZ3RofX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vbGliIjo3MDAsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3MzcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4vaGVscGVycyI6MTE4Nn1dLDExODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9yZWdpc3RyeSIpLGE9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24scz10KCIuLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGw9cy5DT01QQVJJU09OX09QUyxjPXMuSU5URVJWQUxfT1BTLHU9cy5TRVRfT1BTO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImZpbHRlciIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMifSxvcGVyYXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXS5jb25jYXQobCkuY29uY2F0KGMpLmNvbmNhdCh1KSxkZmx0OiI9IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHByZXNlcnZlZ2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBhKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1pZihhKCJlbmFibGVkIikpe2EoInByZXNlcnZlZ2FwcyIpLGEoIm9wZXJhdGlvbiIpLGEoInZhbHVlIiksYSgidGFyZ2V0Iik7dmFyIG89aS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIik7byh0LGUsInZhbHVlY2FsZW5kYXIiLG51bGwpLG8odCxlLCJ0YXJnZXRjYWxlbmRhciIsbnVsbCl9cmV0dXJuIGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgaT1uLmdldFRhcmdldEFycmF5KGUscik7aWYoaSl7dmFyIHM9ci50YXJnZXQsZj1pLmxlbmd0aDtlLl9sZW5ndGgmJihmPU1hdGgubWluKGYsZS5fbGVuZ3RoKSk7dmFyIGg9ci50YXJnZXRjYWxlbmRhcixwPWUuX2FycmF5QXR0cnMsZD1yLnByZXNlcnZlZ2FwcztpZigic3RyaW5nIj09dHlwZW9mIHMpe3ZhciBnPW4ubmVzdGVkUHJvcGVydHkoZSxzKyJjYWxlbmRhciIpLmdldCgpO2cmJihoPWcpfXZhciB2LG0seT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vcGVyYXRpb24saT10LnZhbHVlLGE9QXJyYXkuaXNBcnJheShpKTtmdW5jdGlvbiBvKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4pfXZhciBzLGY9ZnVuY3Rpb24ocil7cmV0dXJuIGUociwwLHQudmFsdWVjYWxlbmRhcil9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCwwLHIpfTtvKGwpP3M9ZihhP2lbMF06aSk6byhjKT9zPWE/W2YoaVswXSksZihpWzFdKV06W2YoaSksZihpKV06byh1KSYmKHM9YT9pLm1hcChmKTpbZihpKV0pO3N3aXRjaChuKXtjYXNlIj0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT09PXN9O2Nhc2UiIT0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KSE9PXN9O2Nhc2UiPCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPHN9O2Nhc2UiPD0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KTw9c307Y2FzZSI+IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCk+c307Y2FzZSI+PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPj1zfTtjYXNlIltdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTw9c1sxXX07Y2FzZSIoKSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU+c1swXSYmZTxzWzFdfTtjYXNlIlspIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTxzWzFdfTtjYXNlIihdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT5zWzBdJiZlPD1zWzFdfTtjYXNlIl1bIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT49c1sxXX07Y2FzZSIpKCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU8c1swXXx8ZT5zWzFdfTtjYXNlIl0oIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT5zWzFdfTtjYXNlIilbIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTxzWzBdfHxlPj1zWzFdfTtjYXNlInt9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1zLmluZGV4T2YoaCh0KSl9O2Nhc2UifXsiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMT09PXMuaW5kZXhPZihoKHQpKX19fShyLGEuZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxzLGkpLGgpLHg9e30sYj17fSxfPTA7ZD8odj1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KG5ldyBBcnJheShmKSl9LG09ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKVtlXT1yfSk6KHY9ZnVuY3Rpb24odCl7eFt0LmFzdHJdPW4uZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChbXSl9LG09ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKS5wdXNoKHIpfSksVCh2KTtmb3IodmFyIHc9byhlLnRyYW5zZm9ybXMsciksaz0wO2s8ZjtrKyspe3koaVtrXSk/KFQobSxrKSxiW18rK109dyhrKSk6ZCYmXysrfXIuX2luZGV4VG9Qb2ludHM9YixlLl9sZW5ndGg9X319ZnVuY3Rpb24gVCh0LHIpe2Zvcih2YXIgaT0wO2k8cC5sZW5ndGg7aSsrKXt0KG4ubmVzdGVkUHJvcGVydHkoZSxwW2ldKSxyKX19fX0seyIuLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NjczLCIuLi9saWIiOjcwMCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vcmVnaXN0cnkiOjgyOSwiLi9oZWxwZXJzIjoxMTg2fV0sMTE4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksYT10KCIuLi9wbG90cy9wbG90cyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxmLGgscCxkLGcsdj1lLnRyYW5zZm9ybSxtPWUudHJhbnNmb3JtSW5kZXgseT10LnRyYW5zZm9ybXNbbV0uZ3JvdXBzLHg9byh0LnRyYW5zZm9ybXMsdik7aWYoIUFycmF5LmlzQXJyYXkoeSl8fDA9PT15Lmxlbmd0aClyZXR1cm5bdF07dmFyIGI9bi5maWx0ZXJVbmlxdWUoeSksXz1uZXcgQXJyYXkoYi5sZW5ndGgpLHc9eS5sZW5ndGgsaz1pLmZpbmRBcnJheUF0dHJpYnV0ZXModCksVD12LnN0eWxlc3x8W10sQT17fTtmb3Iocj0wO3I8VC5sZW5ndGg7cisrKUFbVFtyXS50YXJnZXRdPVRbcl0udmFsdWU7di5zdHlsZXMmJihnPW4ua2V5ZWRDb250YWluZXIodiwic3R5bGVzIiwidGFyZ2V0IiwidmFsdWUubmFtZSIpKTt2YXIgTT17fSxTPXt9O2ZvcihyPTA7cjxiLmxlbmd0aDtyKyspe01bZj1iW3JdXT1yLFNbZl09MCwoaD1fW3JdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHQpKS5fZ3JvdXA9ZixoLnRyYW5zZm9ybXNbbV0uX2luZGV4VG9Qb2ludHM9e307dmFyIEU9bnVsbDtmb3IoZyYmKEU9Zy5nZXQoZikpLGgubmFtZT1FfHwiIj09PUU/RTpuLnRlbXBsYXRlU3RyaW5nKHYubmFtZWZvcm1hdCx7dHJhY2U6dC5uYW1lLGdyb3VwOmZ9KSxwPWgudHJhbnNmb3JtcyxoLnRyYW5zZm9ybXM9W10scz0wO3M8cC5sZW5ndGg7cysrKWgudHJhbnNmb3Jtc1tzXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSxwW3NdKTtmb3Iocz0wO3M8ay5sZW5ndGg7cysrKW4ubmVzdGVkUHJvcGVydHkoaCxrW3NdKS5zZXQoW10pfWZvcihsPTA7bDxrLmxlbmd0aDtsKyspe2ZvcihjPWtbbF0scz0wLGQ9W107czxiLmxlbmd0aDtzKyspZFtzXT1uLm5lc3RlZFByb3BlcnR5KF9bc10sYykuZ2V0KCk7Zm9yKHU9bi5uZXN0ZWRQcm9wZXJ0eSh0LGMpLmdldCgpLHM9MDtzPHc7cysrKWRbTVt5W3NdXV0ucHVzaCh1W3NdKX1mb3Iocz0wO3M8dztzKyspeyhoPV9bTVt5W3NdXV0pLnRyYW5zZm9ybXNbbV0uX2luZGV4VG9Qb2ludHNbU1t5W3NdXV09eChzKSxTW3lbc11dKyt9Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKylmPWJbcl0saD1fW3JdLGEuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycyhoKSxoPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKGgsQVtmXXx8e30pO3JldHVybiBffXIubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9Imdyb3VwYnkiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGdyb3Vwczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LG5hbWVmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxzdHlsZXM6e19pc0xpbmtlZFRvQXJyYXk6InN0eWxlIix0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZTp7dmFsVHlwZToiYW55IixkZmx0Ont9LGVkaXRUeXBlOiJjYWxjIixfY29tcGFyZUFzSlNPTjohMH0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlLGkpe3ZhciBhLG89e307ZnVuY3Rpb24gcyhlLGkpe3JldHVybiBuLmNvZXJjZSh0LG8sci5hdHRyaWJ1dGVzLGUsaSl9aWYoIXMoImVuYWJsZWQiKSlyZXR1cm4gbztzKCJncm91cHMiKSxzKCJuYW1lZm9ybWF0IixpLl9kYXRhTGVuZ3RoPjE/IiV7Z3JvdXB9ICgle3RyYWNlfSkiOiIle2dyb3VwfSIpO3ZhciBsPXQuc3R5bGVzLGM9by5zdHlsZXM9W107aWYobClmb3IoYT0wO2E8bC5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdPXt9O24uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLCJ0YXJnZXQiKTt2YXIgZj1uLmNvZXJjZShsW2FdLGNbYV0sci5hdHRyaWJ1dGVzLnN0eWxlcywidmFsdWUiKTtuLmlzUGxhaW5PYmplY3QoZik/dS52YWx1ZT1uLmV4dGVuZERlZXAoe30sZik6ZiYmZGVsZXRlIHUudmFsdWV9cmV0dXJuIG99LHIudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9W107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylmb3Iocj1zKHRbbl0sZSksaT0wO2k8ci5sZW5ndGg7aSsrKWEucHVzaChyW2ldKTtyZXR1cm4gYX19LHsiLi4vbGliIjo3MDAsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3MzcsIi4uL3Bsb3RzL3Bsb3RzIjo4MTAsIi4vaGVscGVycyI6MTE4Nn1dLDExODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT0wO2k8dC5sZW5ndGgmJihyPXRbaV0pIT09ZTtpKyspci5faW5kZXhUb1BvaW50cyYmITEhPT1yLmVuYWJsZWQmJihuPXIuX2luZGV4VG9Qb2ludHMpO3JldHVybiBuP2Z1bmN0aW9uKHQpe3JldHVybiBuW3RdfTpmdW5jdGlvbih0KXtyZXR1cm5bdF19fX0se31dLDExODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJzb3J0IixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIl0sZGZsdDoiYXNjZW5kaW5nIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1yZXR1cm4gaSgiZW5hYmxlZCIpJiYoaSgidGFyZ2V0IiksaSgib3JkZXIiKSksZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBvPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihvKXt2YXIgcz1yLnRhcmdldCxsPW8ubGVuZ3RoO2UuX2xlbmd0aCYmKGw9TWF0aC5taW4obCxlLl9sZW5ndGgpKTt2YXIgYyx1LGY9ZS5fYXJyYXlBdHRycyxoPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pO2ZvcihpPTA7aTxuO2krKylhW2ldPXt2OmVbaV0saTppfTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQub3JkZXIpe2Nhc2UiYXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnYpLWUoci52KX07Y2FzZSJkZXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZShyLnYpLWUodC52KX19fSh0LHIpKSxpPTA7aTxuO2krKylvW2ldPWFbaV0uaTtyZXR1cm4gb30ocixvLGkuZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxzLG8pLGwpLHA9YShlLnRyYW5zZm9ybXMsciksZD17fTtmb3IoYz0wO2M8Zi5sZW5ndGg7YysrKXt2YXIgZz1uLm5lc3RlZFByb3BlcnR5KGUsZltjXSksdj1nLmdldCgpLG09bmV3IEFycmF5KGwpO2Zvcih1PTA7dTxsO3UrKyltW3VdPXZbaFt1XV07Zy5zZXQobSl9Zm9yKHU9MDt1PGw7dSsrKWRbdV09cChoW3VdKTtyLl9pbmRleFRvUG9pbnRzPWQsZS5fbGVuZ3RoPWx9fX19LHsiLi4vbGliIjo3MDAsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4vaGVscGVycyI6MTE4Nn1dfSx7fSxbMjJdKSgyMil9KTs=\"></script>\n",
       "\t</head>\n",
       "\t<body>\n",
       "\t\t<div id=\"htmlwidget-a08430e133f65ab318a1\" style=\"width:100%;height:400px;\" class=\"plotly html-widget\"></div>\n",
       "<script type=\"application/json\" data-for=\"htmlwidget-a08430e133f65ab318a1\">{\"x\":{\"data\":[{\"x\":[0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199],\"y\":[1,0.997978748630856,0.993845910635847,0.989166575888964,0.986048778937844,0.981398017149043,0.97805587805279,0.974989995911174,0.971479068462082,0.969512511643333,0.968287993156888,0.967110951635101,0.965635514597171,0.964393599558222,0.963124702351474,0.961690996183822,0.960613527847849,0.959819232796782,0.959062222029902,0.958076049015177,0.957126663495153,0.956121532520867,0.954805873902808,0.953980597176106,0.953336233381999,0.952844083035662,0.952322479714462,0.951897781304439,0.951400706745012,0.950737185701624,0.949962413056165,0.949542488610315,0.949091083519025,0.948632235412489,0.948141212231034,0.947317045652074,0.946601838779632,0.945892163385423,0.945434781732336,0.945023996988079,0.944383661378525,0.943930828167602,0.943585266376882,0.942996206685665,0.942451297160132,0.942265384884259,0.941950066681641,0.941405309031238,0.941177547058293,0.940813493572899,0.940475217471369,0.939745250751718,0.939532059905358,0.93931532817297,0.938875144475618,0.938502486245692,0.938048133970913,0.937235904110138,0.936560576242979,0.936114189209803,0.935825595916204,0.934947357657534,0.934523479814828,0.934136691527022,0.933217093246408,0.93276858212359,0.93263133626816,0.932259566339905,0.932071164467255,0.931593668993655,0.931351318923677,0.930906594715787,0.930653520935145,0.930395393259731,0.930133250976045,0.929761452623097,0.929331007506142,0.929112624000677,0.928778910995947,0.92838075725861,0.928322827596982,0.928205266294177,0.928026513193723,0.92772471595366,0.927235280598369,0.926799081205614,0.926352922511684,0.926028341950187,0.925633278664372,0.925299669034637,0.924961697061142,0.924687471832247,0.924198514867235,0.923912584473588,0.923766776443213,0.923322764534324,0.923022667755406,0.922794629543822,0.922717517934434,0.922402812096121,0.922080067935136,0.921915322523677,0.921497106536323,0.921242666470091,0.921156705597975,0.92089481495006,0.920538465984228,0.920081849681657,0.919709007274735,0.919236003259473,0.918852388860617,0.91865790216597,0.918262822969253,0.917658437609686,0.916936115663968,0.916936115663968,0.91661543387952,0.91661543387952,0.916395093630991,0.91605913062465,0.915944637544957,0.915238525785318,0.914997578430892,0.914997578430892,0.914873004220078,0.914873004220078,0.914615945213554,0.914353200041128,0.914083399746044,0.913945237200737,0.913804413589458,0.913518134011266,0.913227019245807,0.91278219361539,0.912630467851824,0.912474222265819,0.911993466616575,0.911830114750801,0.91166396494855,0.91166396494855,0.911319225313478,0.910433589526001,0.90970040362745,0.90970040362745,0.909507752123082,0.909311441362856,0.909111899681627,0.908908518943443,0.908908518943443,0.908476220004588,0.908030888524193,0.907347473404883,0.907347473404883,0.907110258379156,0.906867715529322,0.906617268769993,0.905052786856671,0.904243740861269,0.903967298262412,0.903684808481705,0.903684808481705,0.903388809527076,0.903082576032321,0.902123210689511,0.901791303695144,0.901449845420363,0.901099495694199,0.900026758199325,0.899291742471927,0.898526061975995,0.897321603447877,0.897321603447877,0.896888533175943,0.896888533175943,0.895969118995342,0.895493551522414,0.895493551522414,0.895493551522414,0.895493551522414,0.894329060558146,0.894329060558146,0.894329060558146,0.894329060558146,0.893628175714449,0.893628175714449,0.891965611666608,0.891074537129478,0.889182659131326,0.888185817585215,0.888185817585215,0.888185817585215,0.885465493488476,0.880805148785905,0.880805148785905,0.878816875312348,0.878816875312348,0.878816875312348,0.878816875312348,0.878816875312348,0.878816875312348,0.878816875312348],\"text\":[\"time:   0<br />surv: 1.0000000\",\"time:   0<br />surv: 0.9979787\",\"time:   1<br />surv: 0.9938459\",\"time:   2<br />surv: 0.9891666\",\"time:   3<br />surv: 0.9860488\",\"time:   4<br />surv: 0.9813980\",\"time:   5<br />surv: 0.9780559\",\"time:   6<br />surv: 0.9749900\",\"time:   7<br />surv: 0.9714791\",\"time:   8<br />surv: 0.9695125\",\"time:   9<br />surv: 0.9682880\",\"time:  10<br />surv: 0.9671110\",\"time:  11<br />surv: 0.9656355\",\"time:  12<br />surv: 0.9643936\",\"time:  13<br />surv: 0.9631247\",\"time:  14<br />surv: 0.9616910\",\"time:  15<br />surv: 0.9606135\",\"time:  16<br />surv: 0.9598192\",\"time:  17<br />surv: 0.9590622\",\"time:  18<br />surv: 0.9580760\",\"time:  19<br />surv: 0.9571267\",\"time:  20<br />surv: 0.9561215\",\"time:  21<br />surv: 0.9548059\",\"time:  22<br />surv: 0.9539806\",\"time:  23<br />surv: 0.9533362\",\"time:  24<br />surv: 0.9528441\",\"time:  25<br />surv: 0.9523225\",\"time:  26<br />surv: 0.9518978\",\"time:  27<br />surv: 0.9514007\",\"time:  28<br />surv: 0.9507372\",\"time:  29<br />surv: 0.9499624\",\"time:  30<br />surv: 0.9495425\",\"time:  31<br />surv: 0.9490911\",\"time:  32<br />surv: 0.9486322\",\"time:  33<br />surv: 0.9481412\",\"time:  34<br />surv: 0.9473170\",\"time:  35<br />surv: 0.9466018\",\"time:  36<br />surv: 0.9458922\",\"time:  37<br />surv: 0.9454348\",\"time:  38<br />surv: 0.9450240\",\"time:  39<br />surv: 0.9443837\",\"time:  40<br />surv: 0.9439308\",\"time:  41<br />surv: 0.9435853\",\"time:  42<br />surv: 0.9429962\",\"time:  43<br />surv: 0.9424513\",\"time:  44<br />surv: 0.9422654\",\"time:  45<br />surv: 0.9419501\",\"time:  46<br />surv: 0.9414053\",\"time:  47<br />surv: 0.9411775\",\"time:  48<br />surv: 0.9408135\",\"time:  49<br />surv: 0.9404752\",\"time:  50<br />surv: 0.9397453\",\"time:  51<br />surv: 0.9395321\",\"time:  52<br />surv: 0.9393153\",\"time:  53<br />surv: 0.9388751\",\"time:  54<br />surv: 0.9385025\",\"time:  55<br />surv: 0.9380481\",\"time:  56<br />surv: 0.9372359\",\"time:  57<br />surv: 0.9365606\",\"time:  58<br />surv: 0.9361142\",\"time:  59<br />surv: 0.9358256\",\"time:  60<br />surv: 0.9349474\",\"time:  61<br />surv: 0.9345235\",\"time:  62<br />surv: 0.9341367\",\"time:  63<br />surv: 0.9332171\",\"time:  64<br />surv: 0.9327686\",\"time:  65<br />surv: 0.9326313\",\"time:  66<br />surv: 0.9322596\",\"time:  67<br />surv: 0.9320712\",\"time:  68<br />surv: 0.9315937\",\"time:  69<br />surv: 0.9313513\",\"time:  70<br />surv: 0.9309066\",\"time:  71<br />surv: 0.9306535\",\"time:  72<br />surv: 0.9303954\",\"time:  73<br />surv: 0.9301333\",\"time:  74<br />surv: 0.9297615\",\"time:  75<br />surv: 0.9293310\",\"time:  76<br />surv: 0.9291126\",\"time:  77<br />surv: 0.9287789\",\"time:  78<br />surv: 0.9283808\",\"time:  79<br />surv: 0.9283228\",\"time:  80<br />surv: 0.9282053\",\"time:  81<br />surv: 0.9280265\",\"time:  82<br />surv: 0.9277247\",\"time:  83<br />surv: 0.9272353\",\"time:  84<br />surv: 0.9267991\",\"time:  85<br />surv: 0.9263529\",\"time:  86<br />surv: 0.9260283\",\"time:  87<br />surv: 0.9256333\",\"time:  88<br />surv: 0.9252997\",\"time:  89<br />surv: 0.9249617\",\"time:  90<br />surv: 0.9246875\",\"time:  91<br />surv: 0.9241985\",\"time:  92<br />surv: 0.9239126\",\"time:  93<br />surv: 0.9237668\",\"time:  94<br />surv: 0.9233228\",\"time:  95<br />surv: 0.9230227\",\"time:  96<br />surv: 0.9227946\",\"time:  97<br />surv: 0.9227175\",\"time:  98<br />surv: 0.9224028\",\"time:  99<br />surv: 0.9220801\",\"time: 100<br />surv: 0.9219153\",\"time: 101<br />surv: 0.9214971\",\"time: 102<br />surv: 0.9212427\",\"time: 103<br />surv: 0.9211567\",\"time: 104<br />surv: 0.9208948\",\"time: 105<br />surv: 0.9205385\",\"time: 106<br />surv: 0.9200818\",\"time: 107<br />surv: 0.9197090\",\"time: 108<br />surv: 0.9192360\",\"time: 109<br />surv: 0.9188524\",\"time: 110<br />surv: 0.9186579\",\"time: 111<br />surv: 0.9182628\",\"time: 112<br />surv: 0.9176584\",\"time: 113<br />surv: 0.9169361\",\"time: 114<br />surv: 0.9169361\",\"time: 115<br />surv: 0.9166154\",\"time: 116<br />surv: 0.9166154\",\"time: 117<br />surv: 0.9163951\",\"time: 118<br />surv: 0.9160591\",\"time: 119<br />surv: 0.9159446\",\"time: 120<br />surv: 0.9152385\",\"time: 121<br />surv: 0.9149976\",\"time: 122<br />surv: 0.9149976\",\"time: 123<br />surv: 0.9148730\",\"time: 124<br />surv: 0.9148730\",\"time: 125<br />surv: 0.9146159\",\"time: 126<br />surv: 0.9143532\",\"time: 127<br />surv: 0.9140834\",\"time: 128<br />surv: 0.9139452\",\"time: 129<br />surv: 0.9138044\",\"time: 130<br />surv: 0.9135181\",\"time: 131<br />surv: 0.9132270\",\"time: 132<br />surv: 0.9127822\",\"time: 133<br />surv: 0.9126305\",\"time: 134<br />surv: 0.9124742\",\"time: 135<br />surv: 0.9119935\",\"time: 136<br />surv: 0.9118301\",\"time: 137<br />surv: 0.9116640\",\"time: 138<br />surv: 0.9116640\",\"time: 139<br />surv: 0.9113192\",\"time: 140<br />surv: 0.9104336\",\"time: 141<br />surv: 0.9097004\",\"time: 142<br />surv: 0.9097004\",\"time: 143<br />surv: 0.9095078\",\"time: 144<br />surv: 0.9093114\",\"time: 145<br />surv: 0.9091119\",\"time: 146<br />surv: 0.9089085\",\"time: 147<br />surv: 0.9089085\",\"time: 148<br />surv: 0.9084762\",\"time: 149<br />surv: 0.9080309\",\"time: 150<br />surv: 0.9073475\",\"time: 151<br />surv: 0.9073475\",\"time: 152<br />surv: 0.9071103\",\"time: 153<br />surv: 0.9068677\",\"time: 154<br />surv: 0.9066173\",\"time: 155<br />surv: 0.9050528\",\"time: 156<br />surv: 0.9042437\",\"time: 157<br />surv: 0.9039673\",\"time: 158<br />surv: 0.9036848\",\"time: 159<br />surv: 0.9036848\",\"time: 160<br />surv: 0.9033888\",\"time: 161<br />surv: 0.9030826\",\"time: 162<br />surv: 0.9021232\",\"time: 163<br />surv: 0.9017913\",\"time: 164<br />surv: 0.9014498\",\"time: 165<br />surv: 0.9010995\",\"time: 166<br />surv: 0.9000268\",\"time: 167<br />surv: 0.8992917\",\"time: 168<br />surv: 0.8985261\",\"time: 169<br />surv: 0.8973216\",\"time: 170<br />surv: 0.8973216\",\"time: 171<br />surv: 0.8968885\",\"time: 172<br />surv: 0.8968885\",\"time: 173<br />surv: 0.8959691\",\"time: 174<br />surv: 0.8954936\",\"time: 175<br />surv: 0.8954936\",\"time: 176<br />surv: 0.8954936\",\"time: 177<br />surv: 0.8954936\",\"time: 178<br />surv: 0.8943291\",\"time: 179<br />surv: 0.8943291\",\"time: 180<br />surv: 0.8943291\",\"time: 181<br />surv: 0.8943291\",\"time: 182<br />surv: 0.8936282\",\"time: 183<br />surv: 0.8936282\",\"time: 184<br />surv: 0.8919656\",\"time: 185<br />surv: 0.8910745\",\"time: 186<br />surv: 0.8891827\",\"time: 187<br />surv: 0.8881858\",\"time: 188<br />surv: 0.8881858\",\"time: 189<br />surv: 0.8881858\",\"time: 190<br />surv: 0.8854655\",\"time: 191<br />surv: 0.8808051\",\"time: 192<br />surv: 0.8808051\",\"time: 193<br />surv: 0.8788169\",\"time: 194<br />surv: 0.8788169\",\"time: 195<br />surv: 0.8788169\",\"time: 196<br />surv: 0.8788169\",\"time: 197<br />surv: 0.8788169\",\"time: 198<br />surv: 0.8788169\",\"time: 199<br />surv: 0.8788169\"],\"type\":\"scatter\",\"mode\":\"lines\",\"line\":{\"width\":1.88976377952756,\"color\":\"rgba(31,119,180,1)\",\"dash\":\"solid\",\"shape\":\"hv\"},\"hoveron\":\"points\",\"name\":\"Post-follow (loss)\",\"legendgroup\":\"Post-follow (loss)\",\"showlegend\":true,\"xaxis\":\"x\",\"yaxis\":\"y\",\"hoverinfo\":\"text\",\"frame\":null},{\"x\":[0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199],\"y\":[1,0.997629428552836,0.992562913106936,0.986947518649488,0.983446976702582,0.979134640183618,0.975303296571898,0.971271603124964,0.967550393518786,0.96523354089574,0.963505983305462,0.962133774281486,0.960711663658669,0.959251981674971,0.957330041515579,0.955400639596006,0.954017322338373,0.953059114888542,0.951978548998645,0.951196859752578,0.950223874983898,0.949120412158482,0.947780650192175,0.946924118697242,0.946120644175997,0.945399881877234,0.944827494550649,0.944138479538712,0.943306733419399,0.942232152354221,0.941619089527666,0.941035696867306,0.940607531690904,0.94029233094048,0.939525936076433,0.938870001103205,0.938248610114664,0.937793889745991,0.93757431730634,0.937154520441781,0.93661244981683,0.936176261585365,0.9358205602543,0.935151899899458,0.934806964251316,0.934453418553989,0.934125953801201,0.933892505687077,0.933654804882052,0.933308968379892,0.93256492888646,0.932163165904525,0.931975999579349,0.931480166225777,0.931130351016262,0.93085316996344,0.930611201372339,0.930114875398274,0.929858798251833,0.929552779841501,0.929240983902123,0.929195621881917,0.928872519733332,0.928449771178207,0.928112940476043,0.927666827654836,0.927209723825168,0.927054507644627,0.926738340586941,0.926577467133535,0.926086116838684,0.925638705223568,0.925350362221505,0.924936599683303,0.924455018635632,0.92439368678274,0.924206271694523,0.923951757058601,0.923560969624345,0.923024794895971,0.922818915759563,0.922469707057618,0.921829695697495,0.921395689249426,0.921322054174764,0.920944988588214,0.920867337240104,0.920708320259058,0.920141381638208,0.919976422623931,0.919724489327001,0.919467941352293,0.918679225047283,0.91858887500548,0.918125969908219,0.917842918021493,0.917746728237588,0.917453143231754,0.917054943082782,0.916442824976375,0.916232535204696,0.916017204409113,0.915687978146596,0.915687978146596,0.915574058268748,0.91534200300116,0.914747856562758,0.914380438759881,0.914004150513478,0.913748556511657,0.9136182815535,0.913353118795829,0.91294826368998,0.912533098495032,0.911676661987764,0.911384035872537,0.911085612809056,0.910628240513469,0.910162287124156,0.910004190496203,0.909517210016095,0.909349587972229,0.9091775581599,0.908826117279281,0.908826117279281,0.908460539597351,0.908088524634371,0.90770689465974,0.907509524167315,0.907306683415378,0.907306683415378,0.9070945471789,0.9070945471789,0.906874485425582,0.906648444925725,0.906414531498241,0.906414531498241,0.906168490637357,0.906168490637357,0.905911275624403,0.905911275624403,0.905641096299731,0.905641096299731,0.905641096299731,0.905050139630041,0.905050139630041,0.905050139630041,0.904733799140831,0.904081268452666,0.902722769176253,0.902722769176253,0.902722769176253,0.902354461232893,0.901600299543605,0.901600299543605,0.901199588299364,0.900361263100946,0.89992777188135,0.89992777188135,0.899011348488395,0.899011348488395,0.898530593756583,0.898530593756583,0.898007279491145,0.898007279491145,0.897444970612316,0.896864100081175,0.895664281887086,0.895041860565414,0.895041860565414,0.894350174428964,0.894350174428964,0.894350174428964,0.894350174428964,0.894350174428964,0.8935032519153,0.89170726547929,0.89170726547929,0.890692808977038,0.890692808977038,0.890692808977038,0.890692808977038,0.890692808977038,0.890692808977038,0.890692808977038,0.885963466628487,0.884301246240817,0.884301246240817,0.884301246240817,0.884301246240817,0.884301246240817,0.884301246240817,0.884301246240817,0.884301246240817,0.880505961922186,0.876168494129466,0.871014561811058,0.871014561811058,0.871014561811058,0.852079462641252,0.852079462641252],\"text\":[\"time:   0<br />surv: 1.0000000\",\"time:   0<br />surv: 0.9976294\",\"time:   1<br />surv: 0.9925629\",\"time:   2<br />surv: 0.9869475\",\"time:   3<br />surv: 0.9834470\",\"time:   4<br />surv: 0.9791346\",\"time:   5<br />surv: 0.9753033\",\"time:   6<br />surv: 0.9712716\",\"time:   7<br />surv: 0.9675504\",\"time:   8<br />surv: 0.9652335\",\"time:   9<br />surv: 0.9635060\",\"time:  10<br />surv: 0.9621338\",\"time:  11<br />surv: 0.9607117\",\"time:  12<br />surv: 0.9592520\",\"time:  13<br />surv: 0.9573300\",\"time:  14<br />surv: 0.9554006\",\"time:  15<br />surv: 0.9540173\",\"time:  16<br />surv: 0.9530591\",\"time:  17<br />surv: 0.9519785\",\"time:  18<br />surv: 0.9511969\",\"time:  19<br />surv: 0.9502239\",\"time:  20<br />surv: 0.9491204\",\"time:  21<br />surv: 0.9477807\",\"time:  22<br />surv: 0.9469241\",\"time:  23<br />surv: 0.9461206\",\"time:  24<br />surv: 0.9453999\",\"time:  25<br />surv: 0.9448275\",\"time:  26<br />surv: 0.9441385\",\"time:  27<br />surv: 0.9433067\",\"time:  28<br />surv: 0.9422322\",\"time:  29<br />surv: 0.9416191\",\"time:  30<br />surv: 0.9410357\",\"time:  31<br />surv: 0.9406075\",\"time:  32<br />surv: 0.9402923\",\"time:  33<br />surv: 0.9395259\",\"time:  34<br />surv: 0.9388700\",\"time:  35<br />surv: 0.9382486\",\"time:  36<br />surv: 0.9377939\",\"time:  37<br />surv: 0.9375743\",\"time:  38<br />surv: 0.9371545\",\"time:  39<br />surv: 0.9366124\",\"time:  40<br />surv: 0.9361763\",\"time:  41<br />surv: 0.9358206\",\"time:  42<br />surv: 0.9351519\",\"time:  43<br />surv: 0.9348070\",\"time:  44<br />surv: 0.9344534\",\"time:  45<br />surv: 0.9341260\",\"time:  46<br />surv: 0.9338925\",\"time:  47<br />surv: 0.9336548\",\"time:  48<br />surv: 0.9333090\",\"time:  49<br />surv: 0.9325649\",\"time:  50<br />surv: 0.9321632\",\"time:  51<br />surv: 0.9319760\",\"time:  52<br />surv: 0.9314802\",\"time:  53<br />surv: 0.9311304\",\"time:  54<br />surv: 0.9308532\",\"time:  55<br />surv: 0.9306112\",\"time:  56<br />surv: 0.9301149\",\"time:  57<br />surv: 0.9298588\",\"time:  58<br />surv: 0.9295528\",\"time:  59<br />surv: 0.9292410\",\"time:  60<br />surv: 0.9291956\",\"time:  61<br />surv: 0.9288725\",\"time:  62<br />surv: 0.9284498\",\"time:  63<br />surv: 0.9281129\",\"time:  64<br />surv: 0.9276668\",\"time:  65<br />surv: 0.9272097\",\"time:  66<br />surv: 0.9270545\",\"time:  67<br />surv: 0.9267383\",\"time:  68<br />surv: 0.9265775\",\"time:  69<br />surv: 0.9260861\",\"time:  70<br />surv: 0.9256387\",\"time:  71<br />surv: 0.9253504\",\"time:  72<br />surv: 0.9249366\",\"time:  73<br />surv: 0.9244550\",\"time:  74<br />surv: 0.9243937\",\"time:  75<br />surv: 0.9242063\",\"time:  76<br />surv: 0.9239518\",\"time:  77<br />surv: 0.9235610\",\"time:  78<br />surv: 0.9230248\",\"time:  79<br />surv: 0.9228189\",\"time:  80<br />surv: 0.9224697\",\"time:  81<br />surv: 0.9218297\",\"time:  82<br />surv: 0.9213957\",\"time:  83<br />surv: 0.9213221\",\"time:  84<br />surv: 0.9209450\",\"time:  85<br />surv: 0.9208673\",\"time:  86<br />surv: 0.9207083\",\"time:  87<br />surv: 0.9201414\",\"time:  88<br />surv: 0.9199764\",\"time:  89<br />surv: 0.9197245\",\"time:  90<br />surv: 0.9194679\",\"time:  91<br />surv: 0.9186792\",\"time:  92<br />surv: 0.9185889\",\"time:  93<br />surv: 0.9181260\",\"time:  94<br />surv: 0.9178429\",\"time:  95<br />surv: 0.9177467\",\"time:  96<br />surv: 0.9174531\",\"time:  97<br />surv: 0.9170549\",\"time:  98<br />surv: 0.9164428\",\"time:  99<br />surv: 0.9162325\",\"time: 100<br />surv: 0.9160172\",\"time: 101<br />surv: 0.9156880\",\"time: 102<br />surv: 0.9156880\",\"time: 103<br />surv: 0.9155741\",\"time: 104<br />surv: 0.9153420\",\"time: 105<br />surv: 0.9147479\",\"time: 106<br />surv: 0.9143804\",\"time: 107<br />surv: 0.9140042\",\"time: 108<br />surv: 0.9137486\",\"time: 109<br />surv: 0.9136183\",\"time: 110<br />surv: 0.9133531\",\"time: 111<br />surv: 0.9129483\",\"time: 112<br />surv: 0.9125331\",\"time: 113<br />surv: 0.9116767\",\"time: 114<br />surv: 0.9113840\",\"time: 115<br />surv: 0.9110856\",\"time: 116<br />surv: 0.9106282\",\"time: 117<br />surv: 0.9101623\",\"time: 118<br />surv: 0.9100042\",\"time: 119<br />surv: 0.9095172\",\"time: 120<br />surv: 0.9093496\",\"time: 121<br />surv: 0.9091776\",\"time: 122<br />surv: 0.9088261\",\"time: 123<br />surv: 0.9088261\",\"time: 124<br />surv: 0.9084605\",\"time: 125<br />surv: 0.9080885\",\"time: 126<br />surv: 0.9077069\",\"time: 127<br />surv: 0.9075095\",\"time: 128<br />surv: 0.9073067\",\"time: 129<br />surv: 0.9073067\",\"time: 130<br />surv: 0.9070945\",\"time: 131<br />surv: 0.9070945\",\"time: 132<br />surv: 0.9068745\",\"time: 133<br />surv: 0.9066484\",\"time: 134<br />surv: 0.9064145\",\"time: 135<br />surv: 0.9064145\",\"time: 136<br />surv: 0.9061685\",\"time: 137<br />surv: 0.9061685\",\"time: 138<br />surv: 0.9059113\",\"time: 139<br />surv: 0.9059113\",\"time: 140<br />surv: 0.9056411\",\"time: 141<br />surv: 0.9056411\",\"time: 142<br />surv: 0.9056411\",\"time: 143<br />surv: 0.9050501\",\"time: 144<br />surv: 0.9050501\",\"time: 145<br />surv: 0.9050501\",\"time: 146<br />surv: 0.9047338\",\"time: 147<br />surv: 0.9040813\",\"time: 148<br />surv: 0.9027228\",\"time: 149<br />surv: 0.9027228\",\"time: 150<br />surv: 0.9027228\",\"time: 151<br />surv: 0.9023545\",\"time: 152<br />surv: 0.9016003\",\"time: 153<br />surv: 0.9016003\",\"time: 154<br />surv: 0.9011996\",\"time: 155<br />surv: 0.9003613\",\"time: 156<br />surv: 0.8999278\",\"time: 157<br />surv: 0.8999278\",\"time: 158<br />surv: 0.8990113\",\"time: 159<br />surv: 0.8990113\",\"time: 160<br />surv: 0.8985306\",\"time: 161<br />surv: 0.8985306\",\"time: 162<br />surv: 0.8980073\",\"time: 163<br />surv: 0.8980073\",\"time: 164<br />surv: 0.8974450\",\"time: 165<br />surv: 0.8968641\",\"time: 166<br />surv: 0.8956643\",\"time: 167<br />surv: 0.8950419\",\"time: 168<br />surv: 0.8950419\",\"time: 169<br />surv: 0.8943502\",\"time: 170<br />surv: 0.8943502\",\"time: 171<br />surv: 0.8943502\",\"time: 172<br />surv: 0.8943502\",\"time: 173<br />surv: 0.8943502\",\"time: 174<br />surv: 0.8935033\",\"time: 175<br />surv: 0.8917073\",\"time: 176<br />surv: 0.8917073\",\"time: 177<br />surv: 0.8906928\",\"time: 178<br />surv: 0.8906928\",\"time: 179<br />surv: 0.8906928\",\"time: 180<br />surv: 0.8906928\",\"time: 181<br />surv: 0.8906928\",\"time: 182<br />surv: 0.8906928\",\"time: 183<br />surv: 0.8906928\",\"time: 184<br />surv: 0.8859635\",\"time: 185<br />surv: 0.8843012\",\"time: 186<br />surv: 0.8843012\",\"time: 187<br />surv: 0.8843012\",\"time: 188<br />surv: 0.8843012\",\"time: 189<br />surv: 0.8843012\",\"time: 190<br />surv: 0.8843012\",\"time: 191<br />surv: 0.8843012\",\"time: 192<br />surv: 0.8843012\",\"time: 193<br />surv: 0.8805060\",\"time: 194<br />surv: 0.8761685\",\"time: 195<br />surv: 0.8710146\",\"time: 196<br />surv: 0.8710146\",\"time: 197<br />surv: 0.8710146\",\"time: 198<br />surv: 0.8520795\",\"time: 199<br />surv: 0.8520795\"],\"type\":\"scatter\",\"mode\":\"lines\",\"line\":{\"width\":1.88976377952756,\"color\":\"rgba(255,127,14,1)\",\"dash\":\"solid\",\"shape\":\"hv\"},\"hoveron\":\"points\",\"name\":\"Pre-follow (loss)\",\"legendgroup\":\"Pre-follow (loss)\",\"showlegend\":true,\"xaxis\":\"x\",\"yaxis\":\"y\",\"hoverinfo\":\"text\",\"frame\":null},{\"x\":[0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199],\"y\":[1,0.99516604343627,0.97140239221416,0.965832448404832,0.95718662533745,0.952641895175845,0.948198172996054,0.944508779769148,0.940801625933229,0.938531748659887,0.936961132802615,0.935264349141978,0.933500134196568,0.931754610540573,0.930085248163899,0.928228274483022,0.92681761799926,0.925875781452034,0.925041356882897,0.924099932990617,0.92304612455038,0.92164597874143,0.920386317293365,0.919601858136481,0.919047425665146,0.918409534093827,0.917894924811038,0.91743382734767,0.916580614216395,0.915660431423196,0.914987757169259,0.914320856471614,0.913701076792998,0.913304322179903,0.912836758083759,0.912090261383504,0.911325737427146,0.910687021207953,0.910283212094852,0.90984337950071,0.909409948752238,0.908924459335287,0.90837058396068,0.907558841376082,0.906990926926411,0.906651846789235,0.906191433794384,0.905822974786428,0.905397170029839,0.904946999326466,0.90429220243637,0.903764387726283,0.903243368087083,0.902883713792101,0.902652491704826,0.902162207473992,0.901763188385788,0.901395804894979,0.901080727014769,0.90075825216376,0.900408264742146,0.89985188017992,0.899512330516942,0.899097999641531,0.898580262277518,0.898241321559987,0.89789455805518,0.897642524552104,0.897385915957567,0.89702045641126,0.896596044804595,0.896162054887279,0.895994521865646,0.895565871045081,0.895362254015806,0.895125244617615,0.894763541316426,0.89433447162715,0.893895657531093,0.89363753931199,0.893175062395298,0.893006894172976,0.892664562311375,0.89245570303147,0.892137297365598,0.891920153080004,0.891622014057539,0.891354764160374,0.891121364117389,0.890685433538126,0.89048379326068,0.889909155182521,0.889572959808444,0.889313091374788,0.889002235904918,0.888866427436249,0.888589723142142,0.888401989613775,0.887972256306964,0.887336908223306,0.887135446784272,0.886877168151809,0.886719079530035,0.88639716300089,0.88601537736583,0.885738116326474,0.885454262296117,0.88522027821412,0.884920366207678,0.884553407731125,0.884428761298696,0.883984739113435,0.883726452849268,0.88366028089473,0.883387251300757,0.883107055518884,0.882821098405464,0.882748204251521,0.882525212957082,0.882222252018889,0.881522754153664,0.881201675022666,0.880954424272098,0.880533920966957,0.880448182513114,0.88018601431981,0.880007911119826,0.879551143803767,0.879362317881954,0.879168348031312,0.878871432006986,0.878669555027083,0.878669555027083,0.878564476151811,0.878024552063713,0.877801050841348,0.877571199819918,0.877219138627158,0.876979133390871,0.876856530408431,0.87673119356875,0.87673119356875,0.876597116310214,0.876182780190956,0.87575916240843,0.874748393383392,0.874453069820467,0.874150856905374,0.873216435893182,0.873054729145795,0.87238725611128,0.87238725611128,0.87221228875145,0.871854090686254,0.871670619707574,0.871101891595543,0.870310700050042,0.869900852769586,0.869479797177732,0.869047650161242,0.868604145364018,0.868376165273371,0.867902419411247,0.867653594176324,0.867394824837172,0.867128507727919,0.867128507727919,0.866845686949143,0.866554114232375,0.866554114232375,0.865913171840192,0.865913171840192,0.865221271583028,0.864862853492066,0.864490549207308,0.863329639785812,0.863329639785812,0.863329639785812,0.862868459422679,0.861423118619626,0.86092024464495,0.86092024464495,0.860365527992472,0.859772172455926,0.857824048198095,0.857123211557411,0.857123211557411,0.856331045927505,0.854638692081799,0.853728533730274,0.852715807118494,0.852715807118494,0.852715807118494,0.852715807118494,0.852715807118494,0.850812423620462,0.848608246357196,0.840261279999585,0.840261279999585,0.840261279999585,0.840261279999585],\"text\":[\"time:   0<br />surv: 1.0000000\",\"time:   0<br />surv: 0.9951660\",\"time:   1<br />surv: 0.9714024\",\"time:   2<br />surv: 0.9658324\",\"time:   3<br />surv: 0.9571866\",\"time:   4<br />surv: 0.9526419\",\"time:   5<br />surv: 0.9481982\",\"time:   6<br />surv: 0.9445088\",\"time:   7<br />surv: 0.9408016\",\"time:   8<br />surv: 0.9385317\",\"time:   9<br />surv: 0.9369611\",\"time:  10<br />surv: 0.9352643\",\"time:  11<br />surv: 0.9335001\",\"time:  12<br />surv: 0.9317546\",\"time:  13<br />surv: 0.9300852\",\"time:  14<br />surv: 0.9282283\",\"time:  15<br />surv: 0.9268176\",\"time:  16<br />surv: 0.9258758\",\"time:  17<br />surv: 0.9250414\",\"time:  18<br />surv: 0.9240999\",\"time:  19<br />surv: 0.9230461\",\"time:  20<br />surv: 0.9216460\",\"time:  21<br />surv: 0.9203863\",\"time:  22<br />surv: 0.9196019\",\"time:  23<br />surv: 0.9190474\",\"time:  24<br />surv: 0.9184095\",\"time:  25<br />surv: 0.9178949\",\"time:  26<br />surv: 0.9174338\",\"time:  27<br />surv: 0.9165806\",\"time:  28<br />surv: 0.9156604\",\"time:  29<br />surv: 0.9149878\",\"time:  30<br />surv: 0.9143209\",\"time:  31<br />surv: 0.9137011\",\"time:  32<br />surv: 0.9133043\",\"time:  33<br />surv: 0.9128368\",\"time:  34<br />surv: 0.9120903\",\"time:  35<br />surv: 0.9113257\",\"time:  36<br />surv: 0.9106870\",\"time:  37<br />surv: 0.9102832\",\"time:  38<br />surv: 0.9098434\",\"time:  39<br />surv: 0.9094099\",\"time:  40<br />surv: 0.9089245\",\"time:  41<br />surv: 0.9083706\",\"time:  42<br />surv: 0.9075588\",\"time:  43<br />surv: 0.9069909\",\"time:  44<br />surv: 0.9066518\",\"time:  45<br />surv: 0.9061914\",\"time:  46<br />surv: 0.9058230\",\"time:  47<br />surv: 0.9053972\",\"time:  48<br />surv: 0.9049470\",\"time:  49<br />surv: 0.9042922\",\"time:  50<br />surv: 0.9037644\",\"time:  51<br />surv: 0.9032434\",\"time:  52<br />surv: 0.9028837\",\"time:  53<br />surv: 0.9026525\",\"time:  54<br />surv: 0.9021622\",\"time:  55<br />surv: 0.9017632\",\"time:  56<br />surv: 0.9013958\",\"time:  57<br />surv: 0.9010807\",\"time:  58<br />surv: 0.9007583\",\"time:  59<br />surv: 0.9004083\",\"time:  60<br />surv: 0.8998519\",\"time:  61<br />surv: 0.8995123\",\"time:  62<br />surv: 0.8990980\",\"time:  63<br />surv: 0.8985803\",\"time:  64<br />surv: 0.8982413\",\"time:  65<br />surv: 0.8978946\",\"time:  66<br />surv: 0.8976425\",\"time:  67<br />surv: 0.8973859\",\"time:  68<br />surv: 0.8970205\",\"time:  69<br />surv: 0.8965960\",\"time:  70<br />surv: 0.8961621\",\"time:  71<br />surv: 0.8959945\",\"time:  72<br />surv: 0.8955659\",\"time:  73<br />surv: 0.8953623\",\"time:  74<br />surv: 0.8951252\",\"time:  75<br />surv: 0.8947635\",\"time:  76<br />surv: 0.8943345\",\"time:  77<br />surv: 0.8938957\",\"time:  78<br />surv: 0.8936375\",\"time:  79<br />surv: 0.8931751\",\"time:  80<br />surv: 0.8930069\",\"time:  81<br />surv: 0.8926646\",\"time:  82<br />surv: 0.8924557\",\"time:  83<br />surv: 0.8921373\",\"time:  84<br />surv: 0.8919202\",\"time:  85<br />surv: 0.8916220\",\"time:  86<br />surv: 0.8913548\",\"time:  87<br />surv: 0.8911214\",\"time:  88<br />surv: 0.8906854\",\"time:  89<br />surv: 0.8904838\",\"time:  90<br />surv: 0.8899092\",\"time:  91<br />surv: 0.8895730\",\"time:  92<br />surv: 0.8893131\",\"time:  93<br />surv: 0.8890022\",\"time:  94<br />surv: 0.8888664\",\"time:  95<br />surv: 0.8885897\",\"time:  96<br />surv: 0.8884020\",\"time:  97<br />surv: 0.8879723\",\"time:  98<br />surv: 0.8873369\",\"time:  99<br />surv: 0.8871354\",\"time: 100<br />surv: 0.8868772\",\"time: 101<br />surv: 0.8867191\",\"time: 102<br />surv: 0.8863972\",\"time: 103<br />surv: 0.8860154\",\"time: 104<br />surv: 0.8857381\",\"time: 105<br />surv: 0.8854543\",\"time: 106<br />surv: 0.8852203\",\"time: 107<br />surv: 0.8849204\",\"time: 108<br />surv: 0.8845534\",\"time: 109<br />surv: 0.8844288\",\"time: 110<br />surv: 0.8839847\",\"time: 111<br />surv: 0.8837265\",\"time: 112<br />surv: 0.8836603\",\"time: 113<br />surv: 0.8833873\",\"time: 114<br />surv: 0.8831071\",\"time: 115<br />surv: 0.8828211\",\"time: 116<br />surv: 0.8827482\",\"time: 117<br />surv: 0.8825252\",\"time: 118<br />surv: 0.8822223\",\"time: 119<br />surv: 0.8815228\",\"time: 120<br />surv: 0.8812017\",\"time: 121<br />surv: 0.8809544\",\"time: 122<br />surv: 0.8805339\",\"time: 123<br />surv: 0.8804482\",\"time: 124<br />surv: 0.8801860\",\"time: 125<br />surv: 0.8800079\",\"time: 126<br />surv: 0.8795511\",\"time: 127<br />surv: 0.8793623\",\"time: 128<br />surv: 0.8791683\",\"time: 129<br />surv: 0.8788714\",\"time: 130<br />surv: 0.8786696\",\"time: 131<br />surv: 0.8786696\",\"time: 132<br />surv: 0.8785645\",\"time: 133<br />surv: 0.8780246\",\"time: 134<br />surv: 0.8778011\",\"time: 135<br />surv: 0.8775712\",\"time: 136<br />surv: 0.8772191\",\"time: 137<br />surv: 0.8769791\",\"time: 138<br />surv: 0.8768565\",\"time: 139<br />surv: 0.8767312\",\"time: 140<br />surv: 0.8767312\",\"time: 141<br />surv: 0.8765971\",\"time: 142<br />surv: 0.8761828\",\"time: 143<br />surv: 0.8757592\",\"time: 144<br />surv: 0.8747484\",\"time: 145<br />surv: 0.8744531\",\"time: 146<br />surv: 0.8741509\",\"time: 147<br />surv: 0.8732164\",\"time: 148<br />surv: 0.8730547\",\"time: 149<br />surv: 0.8723873\",\"time: 150<br />surv: 0.8723873\",\"time: 151<br />surv: 0.8722123\",\"time: 152<br />surv: 0.8718541\",\"time: 153<br />surv: 0.8716706\",\"time: 154<br />surv: 0.8711019\",\"time: 155<br />surv: 0.8703107\",\"time: 156<br />surv: 0.8699009\",\"time: 157<br />surv: 0.8694798\",\"time: 158<br />surv: 0.8690477\",\"time: 159<br />surv: 0.8686041\",\"time: 160<br />surv: 0.8683762\",\"time: 161<br />surv: 0.8679024\",\"time: 162<br />surv: 0.8676536\",\"time: 163<br />surv: 0.8673948\",\"time: 164<br />surv: 0.8671285\",\"time: 165<br />surv: 0.8671285\",\"time: 166<br />surv: 0.8668457\",\"time: 167<br />surv: 0.8665541\",\"time: 168<br />surv: 0.8665541\",\"time: 169<br />surv: 0.8659132\",\"time: 170<br />surv: 0.8659132\",\"time: 171<br />surv: 0.8652213\",\"time: 172<br />surv: 0.8648629\",\"time: 173<br />surv: 0.8644905\",\"time: 174<br />surv: 0.8633296\",\"time: 175<br />surv: 0.8633296\",\"time: 176<br />surv: 0.8633296\",\"time: 177<br />surv: 0.8628685\",\"time: 178<br />surv: 0.8614231\",\"time: 179<br />surv: 0.8609202\",\"time: 180<br />surv: 0.8609202\",\"time: 181<br />surv: 0.8603655\",\"time: 182<br />surv: 0.8597722\",\"time: 183<br />surv: 0.8578240\",\"time: 184<br />surv: 0.8571232\",\"time: 185<br />surv: 0.8571232\",\"time: 186<br />surv: 0.8563310\",\"time: 187<br />surv: 0.8546387\",\"time: 188<br />surv: 0.8537285\",\"time: 189<br />surv: 0.8527158\",\"time: 190<br />surv: 0.8527158\",\"time: 191<br />surv: 0.8527158\",\"time: 192<br />surv: 0.8527158\",\"time: 193<br />surv: 0.8527158\",\"time: 194<br />surv: 0.8508124\",\"time: 195<br />surv: 0.8486082\",\"time: 196<br />surv: 0.8402613\",\"time: 197<br />surv: 0.8402613\",\"time: 198<br />surv: 0.8402613\",\"time: 199<br />surv: 0.8402613\"],\"type\":\"scatter\",\"mode\":\"lines\",\"line\":{\"width\":1.88976377952756,\"color\":\"rgba(255,127,14,1)\",\"dash\":\"dashdot\",\"shape\":\"hv\"},\"hoveron\":\"points\",\"name\":\"Pre-follow (gain)\",\"legendgroup\":\"Pre-follow (gain)\",\"showlegend\":true,\"xaxis\":\"x\",\"yaxis\":\"y\",\"hoverinfo\":\"text\",\"frame\":null},{\"x\":[0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199],\"y\":[1,0.996277531864967,0.978534478161165,0.97399330173037,0.967426231319507,0.963482909879952,0.960326665463945,0.956976147619652,0.953788765938965,0.951901351838011,0.950580426334317,0.949237847996243,0.947703031101437,0.946339922566717,0.944867482940233,0.943272273932248,0.942074167592834,0.941322015797412,0.940200599227992,0.939040718993299,0.938132663525504,0.937051182265257,0.935854768144157,0.934980919813851,0.934396745182397,0.933907476976314,0.933067342215281,0.932331312119087,0.931450942833209,0.930478104880005,0.929711086841544,0.92919866311237,0.928688559183603,0.928181048282356,0.927538843373552,0.926699652663287,0.925723502681035,0.925087829511104,0.924750730227794,0.92426856714347,0.923585194041638,0.923244508576006,0.922698934437878,0.921816137906651,0.921035339532286,0.920707928629684,0.920201798841215,0.919893533367103,0.919416719302898,0.918872488945193,0.91824052712336,0.917924633175678,0.917505776395767,0.917047963658725,0.916600000005245,0.916263169504554,0.915818879269435,0.915226567268385,0.914583663866921,0.914365077478695,0.914013789712603,0.913544679781525,0.913220788573027,0.91260176075498,0.912128296806469,0.911643036141383,0.911374911902795,0.910935241028686,0.91070142808181,0.910334618683431,0.909874975323273,0.909451165548294,0.908925510865119,0.908669245822968,0.908219971448276,0.907980025351357,0.907663486324016,0.907317700348655,0.907015781087267,0.906680784634226,0.90631295215618,0.905859342070016,0.905588483517788,0.905423581214264,0.905116828122193,0.90454871562651,0.904053710696021,0.90372721964846,0.903305353719512,0.903060572104793,0.90275003925788,0.90249789205049,0.90211220919064,0.901683761918994,0.90151573169986,0.901174455302336,0.9009665958962,0.900579748925012,0.900294156583814,0.900002905289679,0.89966686039474,0.899552573446011,0.899397665133036,0.899004124542709,0.898524783500564,0.898240863783844,0.897826851586304,0.897444200562755,0.897183429329118,0.896873735359725,0.89664860514853,0.896374120881648,0.895862995728483,0.895435625487756,0.894947250453403,0.894597310181189,0.894444526853707,0.894392687017909,0.894234378087527,0.894073119183087,0.893742755916976,0.893174903603667,0.892767433300928,0.892530026723798,0.892409104080968,0.892162701346356,0.891786340788944,0.891143982263561,0.89081272660143,0.890540930193619,0.890332859882826,0.890262176105446,0.890046389846391,0.889606860764986,0.889306672858536,0.888842121227232,0.888445104021038,0.888202226737271,0.887954471583369,0.887617710619462,0.88736043012363,0.886920402140825,0.886738339038672,0.886644623297915,0.886356938475301,0.885866534060962,0.885766141208054,0.885355589114795,0.884933186639072,0.884494394926346,0.884154727339969,0.883806771917954,0.883332117368052,0.883210613638015,0.882838055730125,0.882326339714632,0.881793131471867,0.881517269394135,0.881375500775705,0.881375500775705,0.881225963025319,0.880919609483506,0.880602845869884,0.880602845869884,0.880602845869884,0.880247118604333,0.879697536636422,0.878187974153992,0.877606135831893,0.877202916840011,0.876990621845616,0.876768711263165,0.87630810253647,0.876069196292595,0.875324872421488,0.874553887507435,0.874014205997094,0.873725942736541,0.873116437370139,0.873116437370139,0.871780375491991,0.870026995814815,0.868185279058221,0.867793321821626,0.866081697912708,0.866081697912708,0.865100302221022,0.864056125634153,0.864056125634153,0.863461045657821,0.862809376944117,0.862063002050566,0.859517540430338,0.858575086986884,0.85436122152928,0.853167979599769,0.851794118118932,0.851794118118932,0.849243836328157,0.844976279361684,0.836174443118333],\"text\":[\"time:   0<br />surv: 1.0000000\",\"time:   0<br />surv: 0.9962775\",\"time:   1<br />surv: 0.9785345\",\"time:   2<br />surv: 0.9739933\",\"time:   3<br />surv: 0.9674262\",\"time:   4<br />surv: 0.9634829\",\"time:   5<br />surv: 0.9603267\",\"time:   6<br />surv: 0.9569761\",\"time:   7<br />surv: 0.9537888\",\"time:   8<br />surv: 0.9519014\",\"time:   9<br />surv: 0.9505804\",\"time:  10<br />surv: 0.9492378\",\"time:  11<br />surv: 0.9477030\",\"time:  12<br />surv: 0.9463399\",\"time:  13<br />surv: 0.9448675\",\"time:  14<br />surv: 0.9432723\",\"time:  15<br />surv: 0.9420742\",\"time:  16<br />surv: 0.9413220\",\"time:  17<br />surv: 0.9402006\",\"time:  18<br />surv: 0.9390407\",\"time:  19<br />surv: 0.9381327\",\"time:  20<br />surv: 0.9370512\",\"time:  21<br />surv: 0.9358548\",\"time:  22<br />surv: 0.9349809\",\"time:  23<br />surv: 0.9343967\",\"time:  24<br />surv: 0.9339075\",\"time:  25<br />surv: 0.9330673\",\"time:  26<br />surv: 0.9323313\",\"time:  27<br />surv: 0.9314509\",\"time:  28<br />surv: 0.9304781\",\"time:  29<br />surv: 0.9297111\",\"time:  30<br />surv: 0.9291987\",\"time:  31<br />surv: 0.9286886\",\"time:  32<br />surv: 0.9281810\",\"time:  33<br />surv: 0.9275388\",\"time:  34<br />surv: 0.9266997\",\"time:  35<br />surv: 0.9257235\",\"time:  36<br />surv: 0.9250878\",\"time:  37<br />surv: 0.9247507\",\"time:  38<br />surv: 0.9242686\",\"time:  39<br />surv: 0.9235852\",\"time:  40<br />surv: 0.9232445\",\"time:  41<br />surv: 0.9226989\",\"time:  42<br />surv: 0.9218161\",\"time:  43<br />surv: 0.9210353\",\"time:  44<br />surv: 0.9207079\",\"time:  45<br />surv: 0.9202018\",\"time:  46<br />surv: 0.9198935\",\"time:  47<br />surv: 0.9194167\",\"time:  48<br />surv: 0.9188725\",\"time:  49<br />surv: 0.9182405\",\"time:  50<br />surv: 0.9179246\",\"time:  51<br />surv: 0.9175058\",\"time:  52<br />surv: 0.9170480\",\"time:  53<br />surv: 0.9166000\",\"time:  54<br />surv: 0.9162632\",\"time:  55<br />surv: 0.9158189\",\"time:  56<br />surv: 0.9152266\",\"time:  57<br />surv: 0.9145837\",\"time:  58<br />surv: 0.9143651\",\"time:  59<br />surv: 0.9140138\",\"time:  60<br />surv: 0.9135447\",\"time:  61<br />surv: 0.9132208\",\"time:  62<br />surv: 0.9126018\",\"time:  63<br />surv: 0.9121283\",\"time:  64<br />surv: 0.9116430\",\"time:  65<br />surv: 0.9113749\",\"time:  66<br />surv: 0.9109352\",\"time:  67<br />surv: 0.9107014\",\"time:  68<br />surv: 0.9103346\",\"time:  69<br />surv: 0.9098750\",\"time:  70<br />surv: 0.9094512\",\"time:  71<br />surv: 0.9089255\",\"time:  72<br />surv: 0.9086692\",\"time:  73<br />surv: 0.9082200\",\"time:  74<br />surv: 0.9079800\",\"time:  75<br />surv: 0.9076635\",\"time:  76<br />surv: 0.9073177\",\"time:  77<br />surv: 0.9070158\",\"time:  78<br />surv: 0.9066808\",\"time:  79<br />surv: 0.9063130\",\"time:  80<br />surv: 0.9058593\",\"time:  81<br />surv: 0.9055885\",\"time:  82<br />surv: 0.9054236\",\"time:  83<br />surv: 0.9051168\",\"time:  84<br />surv: 0.9045487\",\"time:  85<br />surv: 0.9040537\",\"time:  86<br />surv: 0.9037272\",\"time:  87<br />surv: 0.9033054\",\"time:  88<br />surv: 0.9030606\",\"time:  89<br />surv: 0.9027500\",\"time:  90<br />surv: 0.9024979\",\"time:  91<br />surv: 0.9021122\",\"time:  92<br />surv: 0.9016838\",\"time:  93<br />surv: 0.9015157\",\"time:  94<br />surv: 0.9011745\",\"time:  95<br />surv: 0.9009666\",\"time:  96<br />surv: 0.9005797\",\"time:  97<br />surv: 0.9002942\",\"time:  98<br />surv: 0.9000029\",\"time:  99<br />surv: 0.8996669\",\"time: 100<br />surv: 0.8995526\",\"time: 101<br />surv: 0.8993977\",\"time: 102<br />surv: 0.8990041\",\"time: 103<br />surv: 0.8985248\",\"time: 104<br />surv: 0.8982409\",\"time: 105<br />surv: 0.8978269\",\"time: 106<br />surv: 0.8974442\",\"time: 107<br />surv: 0.8971834\",\"time: 108<br />surv: 0.8968737\",\"time: 109<br />surv: 0.8966486\",\"time: 110<br />surv: 0.8963741\",\"time: 111<br />surv: 0.8958630\",\"time: 112<br />surv: 0.8954356\",\"time: 113<br />surv: 0.8949473\",\"time: 114<br />surv: 0.8945973\",\"time: 115<br />surv: 0.8944445\",\"time: 116<br />surv: 0.8943927\",\"time: 117<br />surv: 0.8942344\",\"time: 118<br />surv: 0.8940731\",\"time: 119<br />surv: 0.8937428\",\"time: 120<br />surv: 0.8931749\",\"time: 121<br />surv: 0.8927674\",\"time: 122<br />surv: 0.8925300\",\"time: 123<br />surv: 0.8924091\",\"time: 124<br />surv: 0.8921627\",\"time: 125<br />surv: 0.8917863\",\"time: 126<br />surv: 0.8911440\",\"time: 127<br />surv: 0.8908127\",\"time: 128<br />surv: 0.8905409\",\"time: 129<br />surv: 0.8903329\",\"time: 130<br />surv: 0.8902622\",\"time: 131<br />surv: 0.8900464\",\"time: 132<br />surv: 0.8896069\",\"time: 133<br />surv: 0.8893067\",\"time: 134<br />surv: 0.8888421\",\"time: 135<br />surv: 0.8884451\",\"time: 136<br />surv: 0.8882022\",\"time: 137<br />surv: 0.8879545\",\"time: 138<br />surv: 0.8876177\",\"time: 139<br />surv: 0.8873604\",\"time: 140<br />surv: 0.8869204\",\"time: 141<br />surv: 0.8867383\",\"time: 142<br />surv: 0.8866446\",\"time: 143<br />surv: 0.8863569\",\"time: 144<br />surv: 0.8858665\",\"time: 145<br />surv: 0.8857661\",\"time: 146<br />surv: 0.8853556\",\"time: 147<br />surv: 0.8849332\",\"time: 148<br />surv: 0.8844944\",\"time: 149<br />surv: 0.8841547\",\"time: 150<br />surv: 0.8838068\",\"time: 151<br />surv: 0.8833321\",\"time: 152<br />surv: 0.8832106\",\"time: 153<br />surv: 0.8828381\",\"time: 154<br />surv: 0.8823263\",\"time: 155<br />surv: 0.8817931\",\"time: 156<br />surv: 0.8815173\",\"time: 157<br />surv: 0.8813755\",\"time: 158<br />surv: 0.8813755\",\"time: 159<br />surv: 0.8812260\",\"time: 160<br />surv: 0.8809196\",\"time: 161<br />surv: 0.8806028\",\"time: 162<br />surv: 0.8806028\",\"time: 163<br />surv: 0.8806028\",\"time: 164<br />surv: 0.8802471\",\"time: 165<br />surv: 0.8796975\",\"time: 166<br />surv: 0.8781880\",\"time: 167<br />surv: 0.8776061\",\"time: 168<br />surv: 0.8772029\",\"time: 169<br />surv: 0.8769906\",\"time: 170<br />surv: 0.8767687\",\"time: 171<br />surv: 0.8763081\",\"time: 172<br />surv: 0.8760692\",\"time: 173<br />surv: 0.8753249\",\"time: 174<br />surv: 0.8745539\",\"time: 175<br />surv: 0.8740142\",\"time: 176<br />surv: 0.8737259\",\"time: 177<br />surv: 0.8731164\",\"time: 178<br />surv: 0.8731164\",\"time: 179<br />surv: 0.8717804\",\"time: 180<br />surv: 0.8700270\",\"time: 181<br />surv: 0.8681853\",\"time: 182<br />surv: 0.8677933\",\"time: 183<br />surv: 0.8660817\",\"time: 184<br />surv: 0.8660817\",\"time: 185<br />surv: 0.8651003\",\"time: 186<br />surv: 0.8640561\",\"time: 187<br />surv: 0.8640561\",\"time: 188<br />surv: 0.8634610\",\"time: 189<br />surv: 0.8628094\",\"time: 190<br />surv: 0.8620630\",\"time: 191<br />surv: 0.8595175\",\"time: 192<br />surv: 0.8585751\",\"time: 193<br />surv: 0.8543612\",\"time: 194<br />surv: 0.8531680\",\"time: 195<br />surv: 0.8517941\",\"time: 196<br />surv: 0.8517941\",\"time: 197<br />surv: 0.8492438\",\"time: 198<br />surv: 0.8449763\",\"time: 199<br />surv: 0.8361744\"],\"type\":\"scatter\",\"mode\":\"lines\",\"line\":{\"width\":1.88976377952756,\"color\":\"rgba(31,119,180,1)\",\"dash\":\"dashdot\",\"shape\":\"hv\"},\"hoveron\":\"points\",\"name\":\"Post-follow (gain)\",\"legendgroup\":\"Post-follow (gain)\",\"showlegend\":true,\"xaxis\":\"x\",\"yaxis\":\"y\",\"hoverinfo\":\"text\",\"frame\":null}],\"layout\":{\"margin\":{\"t\":23.3059360730594,\"r\":7.30593607305936,\"b\":25.5707762557078,\"l\":25.5707762557078},\"font\":{\"color\":\"rgba(0,0,0,1)\",\"family\":\"\",\"size\":14.6118721461187},\"xaxis\":{\"domain\":[0,1],\"automargin\":true,\"type\":\"linear\",\"autorange\":false,\"range\":[-9.95,208.95],\"tickmode\":\"array\",\"ticktext\":[null],\"categoryorder\":\"array\",\"categoryarray\":[null],\"nticks\":null,\"ticks\":\"\",\"tickcolor\":null,\"ticklen\":100,\"tickwidth\":0,\"showticklabels\":true,\"tickfont\":{\"color\":\"rgba(77,77,77,1)\",\"family\":\"\",\"size\":11.689497716895},\"tickangle\":-0,\"showline\":false,\"linecolor\":null,\"linewidth\":0,\"showgrid\":true,\"gridcolor\":\"rgba(235,235,235,1)\",\"gridwidth\":0.66417600664176,\"zeroline\":true,\"anchor\":\"y\",\"title\":{\"text\":\"Holding period (days)\",\"font\":{\"color\":\"rgba(0,0,0,1)\",\"family\":\"\",\"size\":14.6118721461187}},\"hoverformat\":\".2f\"},\"yaxis\":{\"domain\":[0,1],\"automargin\":true,\"type\":\"linear\",\"autorange\":false,\"range\":[0.82798316527425,1.00819127784408],\"tickmode\":\"array\",\"ticktext\":[null],\"categoryorder\":\"array\",\"categoryarray\":[null],\"nticks\":null,\"ticks\":\"\",\"tickcolor\":null,\"ticklen\":3.65296803652968,\"tickwidth\":0,\"showticklabels\":true,\"tickfont\":{\"color\":\"rgba(77,77,77,1)\",\"family\":\"\",\"size\":11.689497716895},\"tickangle\":-0,\"showline\":false,\"linecolor\":null,\"linewidth\":0,\"showgrid\":true,\"gridcolor\":\"rgba(235,235,235,1)\",\"gridwidth\":0.66417600664176,\"zeroline\":false,\"anchor\":\"x\",\"title\":{\"text\":\"Remaining position\",\"font\":{\"color\":\"rgba(0,0,0,1)\",\"family\":\"\",\"size\":14.6118721461187}},\"hoverformat\":\".2f\",\"rang\":[0.9,1]},\"shapes\":[{\"type\":\"rect\",\"fillcolor\":null,\"line\":{\"color\":null,\"width\":0,\"linetype\":[]},\"yref\":\"paper\",\"xref\":\"paper\",\"x0\":0,\"x1\":1,\"y0\":0,\"y1\":1}],\"showlegend\":true,\"legend\":{\"bgcolor\":null,\"bordercolor\":null,\"borderwidth\":0,\"font\":{\"color\":\"rgba(0,0,0,1)\",\"family\":\"\",\"size\":11.689497716895},\"y\":0.95,\"x\":0.7},\"annotations\":[{\"text\":\"state\",\"x\":1.02,\"y\":1,\"showarrow\":false,\"ax\":0,\"ay\":0,\"font\":{\"color\":\"rgba(0,0,0,1)\",\"family\":\"\",\"size\":14.6118721461187},\"xref\":\"paper\",\"yref\":\"paper\",\"textangle\":-0,\"xanchor\":\"left\",\"yanchor\":\"bottom\",\"legendTitle\":true}],\"hovermode\":\"closest\",\"barmode\":\"relative\",\"autosize\":false},\"config\":{\"doubleClick\":\"reset\",\"showSendToCloud\":false},\"source\":\"A\",\"attrs\":{\"47d05bd8271d\":{\"colour\":{},\"linetype\":{},\"x\":{},\"y\":{},\"type\":\"scatter\"}},\"cur_data\":\"47d05bd8271d\",\"visdat\":{\"47d05bd8271d\":[\"function (y) \",\"x\"]},\"highlight\":{\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.2,\"selected\":{\"opacity\":1},\"debounce\":0},\"shinyEvents\":[\"plotly_hover\",\"plotly_click\",\"plotly_selected\",\"plotly_relayout\",\"plotly_brushed\",\"plotly_brushing\",\"plotly_clickannotation\",\"plotly_doubleclick\",\"plotly_deselect\",\"plotly_afterplot\"],\"base_url\":\"https://plot.ly\"},\"evals\":[],\"jsHooks\":[]}</script>\n",
       "\t</body>\n",
       "</html>\n"
      ],
      "text/plain": [
       "HTML widgets cannot be represented in plain text (need html)"
      ]
     },
     "metadata": {
      "text/html": {
       "isolated": true
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "load(file = \"sample1.Rdata\")\n",
    "sample1[gain == 1 & pre.follow == 1, state := \"Pre-follow (gain)\"\n",
    "    ][gain == 0 & pre.follow == 1, state := \"Pre-follow (loss)\"\n",
    "    ][gain == 1 & post.follow == 1, state := \"Post-follow (gain)\"\n",
    "    ][gain == 0 & post.follow == 1, state := \"Post-follow (loss)\"]\n",
    "gg.main <- survfit(Surv(hold.period, sale) ~ state, data = sample1[hold.period < 200 & (pre.follow == 1 | (post.follow == 1 & date - as.Date(follow.date) <= pre.period))])\n",
    "\n",
    "fig4 <- ggsurv(gg.main,\n",
    "                 lty.est = c(1, 1, 4, 4),\n",
    "                 surv.col = c(\"#1F77B4\", \"#1F77B4\", \"#FF7F0E\", \"#FF7F0E\"),\n",
    "                 plot.cens = F,\n",
    "                 xlab = \"Holding period (days)\",\n",
    "                 ylab = \"Remaining position\",\n",
    "                 main = \"\",\n",
    "                 size.est = 0.5,\n",
    "                 order.legend = T\n",
    "                ) +\n",
    "        theme_minimal()\n",
    "\n",
    "fig4 <- ggplotly(fig4) %>%\n",
    "    plotly::layout(autosize=F, legend=list(x=0.7, y=0.95), xaxis=list(ticklen=100, zeroline=T), yaxis=list(rang=c(0.9,1)))\n",
    "\n",
    "fig4\n",
    "\n",
    "# orca(fig4, '../Figs/Fig4.svg')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fig 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Fig 5\n",
    "f.rbst1.early <- sample1[pre.follow == 1]\n",
    "f.rbst1.late <- sample1[post.follow == 1 & date - as.Date(follow.date) <= pre.period]\n",
    "\n",
    "suppressWarnings({\n",
    "DEbeta.e <- f.rbst1.early[, .(pre.follow = glm(sale ~ gain, family = binomial, maxit=10) %>% coef()), by = .(cube.symbol)\n",
    "    ][, .SD[2], by = .(cube.symbol)]\n",
    "\n",
    "DEbeta.l <- f.rbst1.late[, .(post.follow = glm(sale ~ gain, family = binomial, maxit=10) %>% coef()), by = .(cube.symbol)\n",
    "    ][, .SD[2], by = .(cube.symbol)]\n",
    "\n",
    "DEbeta <- DEbeta.e[DEbeta.l, on = \"cube.symbol\"]\n",
    "})\n",
    "\n",
    "ggDE <- melt(DEbeta[!is.na(pre.follow) & !is.na(post.follow)], id.vars = \"cube.symbol\", measure.vars = c(\"pre.follow\", \"post.follow\"))\n",
    "setnames(ggDE, 2:3, c(\"Stage\", \"DE\"))\n",
    "\n",
    "ggDE = ggDE[, Stage := as.character(Stage)\n",
    "    ][, Stage := ifelse(Stage == \"pre.follow\", \"pre-follow\", \"post-follow\")]\n",
    "rm(DEbeta, DEbeta.e, DEbeta.l, f.rbst1.early, f.rbst1.late)\n",
    "\n",
    "pre_density = ggDE[Stage=='pre-follow', density(DE)]\n",
    "post_density = ggDE[Stage=='post-follow', density(DE)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.plotly.v1+json": {
       "attrs": {
        "47d04e2a5ee9": {
         "alpha": 0.3,
         "alpha_stroke": 1,
         "colors": "#FF7F0E",
         "fill": "tozeroy",
         "inherit": true,
         "mode": "lines",
         "name": "Post-follow",
         "sizes": [
          10,
          100
         ],
         "spans": [
          1,
          20
         ],
         "type": "scatter",
         "x": [
          -25.0172,
          -24.9193,
          -24.8214,
          -24.7234,
          -24.6255,
          -24.5276,
          -24.4297,
          -24.3318,
          -24.2339,
          -24.136,
          -24.038,
          -23.9401,
          -23.8422,
          -23.7443,
          -23.6464,
          -23.5485,
          -23.4505,
          -23.3526,
          -23.2547,
          -23.1568,
          -23.0589,
          -22.961,
          -22.8631,
          -22.7651,
          -22.6672,
          -22.5693,
          -22.4714,
          -22.3735,
          -22.2756,
          -22.1777,
          -22.0797,
          -21.9818,
          -21.8839,
          -21.786,
          -21.6881,
          -21.5902,
          -21.4923,
          -21.3943,
          -21.2964,
          -21.1985,
          -21.1006,
          -21.0027,
          -20.9048,
          -20.8069,
          -20.7089,
          -20.611,
          -20.5131,
          -20.4152,
          -20.3173,
          -20.2194,
          -20.1215,
          -20.0235,
          -19.9256,
          -19.8277,
          -19.7298,
          -19.6319,
          -19.534,
          -19.4361,
          -19.3381,
          -19.2402,
          -19.1423,
          -19.0444,
          -18.9465,
          -18.8486,
          -18.7506,
          -18.6527,
          -18.5548,
          -18.4569,
          -18.359,
          -18.2611,
          -18.1632,
          -18.0652,
          -17.9673,
          -17.8694,
          -17.7715,
          -17.6736,
          -17.5757,
          -17.4778,
          -17.3798,
          -17.2819,
          -17.184,
          -17.0861,
          -16.9882,
          -16.8903,
          -16.7924,
          -16.6944,
          -16.5965,
          -16.4986,
          -16.4007,
          -16.3028,
          -16.2049,
          -16.107,
          -16.009,
          -15.9111,
          -15.8132,
          -15.7153,
          -15.6174,
          -15.5195,
          -15.4216,
          -15.3236,
          -15.2257,
          -15.1278,
          -15.0299,
          -14.932,
          -14.8341,
          -14.7361,
          -14.6382,
          -14.5403,
          -14.4424,
          -14.3445,
          -14.2466,
          -14.1487,
          -14.0507,
          -13.9528,
          -13.8549,
          -13.757,
          -13.6591,
          -13.5612,
          -13.4633,
          -13.3653,
          -13.2674,
          -13.1695,
          -13.0716,
          -12.9737,
          -12.8758,
          -12.7779,
          -12.6799,
          -12.582,
          -12.4841,
          -12.3862,
          -12.2883,
          -12.1904,
          -12.0925,
          -11.9945,
          -11.8966,
          -11.7987,
          -11.7008,
          -11.6029,
          -11.505,
          -11.4071,
          -11.3091,
          -11.2112,
          -11.1133,
          -11.0154,
          -10.9175,
          -10.8196,
          -10.7217,
          -10.6237,
          -10.5258,
          -10.4279,
          -10.33,
          -10.2321,
          -10.1342,
          -10.0362,
          -9.9383,
          -9.8404,
          -9.7425,
          -9.6446,
          -9.5467,
          -9.4488,
          -9.3508,
          -9.2529,
          -9.155,
          -9.0571,
          -8.9592,
          -8.8613,
          -8.7634,
          -8.6654,
          -8.5675,
          -8.4696,
          -8.3717,
          -8.2738,
          -8.1759,
          -8.078,
          -7.98,
          -7.8821,
          -7.7842,
          -7.6863,
          -7.5884,
          -7.4905,
          -7.3926,
          -7.2946,
          -7.1967,
          -7.0988,
          -7.0009,
          -6.903,
          -6.8051,
          -6.7072,
          -6.6092,
          -6.5113,
          -6.4134,
          -6.3155,
          -6.2176,
          -6.1197,
          -6.0217,
          -5.9238,
          -5.8259,
          -5.728,
          -5.6301,
          -5.5322,
          -5.4343,
          -5.3363,
          -5.2384,
          -5.1405,
          -5.0426,
          -4.9447,
          -4.8468,
          -4.7489,
          -4.6509,
          -4.553,
          -4.4551,
          -4.3572,
          -4.2593,
          -4.1614,
          -4.0635,
          -3.9655,
          -3.8676,
          -3.7697,
          -3.6718,
          -3.5739,
          -3.476,
          -3.3781,
          -3.2801,
          -3.1822,
          -3.0843,
          -2.9864,
          -2.8885,
          -2.7906,
          -2.6927,
          -2.5947,
          -2.4968,
          -2.3989,
          -2.301,
          -2.2031,
          -2.1052,
          -2.0072,
          -1.9093,
          -1.8114,
          -1.7135,
          -1.6156,
          -1.5177,
          -1.4198,
          -1.3218,
          -1.2239,
          -1.126,
          -1.0281,
          -0.9302,
          -0.8323,
          -0.7344,
          -0.6364,
          -0.5385,
          -0.4406,
          -0.3427,
          -0.2448,
          -0.1469,
          -0.049,
          0.049,
          0.1469,
          0.2448,
          0.3427,
          0.4406,
          0.5385,
          0.6364,
          0.7344,
          0.8323,
          0.9302,
          1.0281,
          1.126,
          1.2239,
          1.3218,
          1.4198,
          1.5177,
          1.6156,
          1.7135,
          1.8114,
          1.9093,
          2.0072,
          2.1052,
          2.2031,
          2.301,
          2.3989,
          2.4968,
          2.5947,
          2.6927,
          2.7906,
          2.8885,
          2.9864,
          3.0843,
          3.1822,
          3.2801,
          3.3781,
          3.476,
          3.5739,
          3.6718,
          3.7697,
          3.8676,
          3.9655,
          4.0635,
          4.1614,
          4.2593,
          4.3572,
          4.4551,
          4.553,
          4.6509,
          4.7489,
          4.8468,
          4.9447,
          5.0426,
          5.1405,
          5.2384,
          5.3363,
          5.4343,
          5.5322,
          5.6301,
          5.728,
          5.8259,
          5.9238,
          6.0217,
          6.1197,
          6.2176,
          6.3155,
          6.4134,
          6.5113,
          6.6092,
          6.7072,
          6.8051,
          6.903,
          7.0009,
          7.0988,
          7.1967,
          7.2946,
          7.3926,
          7.4905,
          7.5884,
          7.6863,
          7.7842,
          7.8821,
          7.98,
          8.078,
          8.1759,
          8.2738,
          8.3717,
          8.4696,
          8.5675,
          8.6654,
          8.7634,
          8.8613,
          8.9592,
          9.0571,
          9.155,
          9.2529,
          9.3508,
          9.4488,
          9.5467,
          9.6446,
          9.7425,
          9.8404,
          9.9383,
          10.0362,
          10.1342,
          10.2321,
          10.33,
          10.4279,
          10.5258,
          10.6237,
          10.7217,
          10.8196,
          10.9175,
          11.0154,
          11.1133,
          11.2112,
          11.3091,
          11.4071,
          11.505,
          11.6029,
          11.7008,
          11.7987,
          11.8966,
          11.9945,
          12.0925,
          12.1904,
          12.2883,
          12.3862,
          12.4841,
          12.582,
          12.6799,
          12.7779,
          12.8758,
          12.9737,
          13.0716,
          13.1695,
          13.2674,
          13.3653,
          13.4633,
          13.5612,
          13.6591,
          13.757,
          13.8549,
          13.9528,
          14.0507,
          14.1487,
          14.2466,
          14.3445,
          14.4424,
          14.5403,
          14.6382,
          14.7361,
          14.8341,
          14.932,
          15.0299,
          15.1278,
          15.2257,
          15.3236,
          15.4216,
          15.5195,
          15.6174,
          15.7153,
          15.8132,
          15.9111,
          16.009,
          16.107,
          16.2049,
          16.3028,
          16.4007,
          16.4986,
          16.5965,
          16.6944,
          16.7924,
          16.8903,
          16.9882,
          17.0861,
          17.184,
          17.2819,
          17.3798,
          17.4778,
          17.5757,
          17.6736,
          17.7715,
          17.8694,
          17.9673,
          18.0652,
          18.1632,
          18.2611,
          18.359,
          18.4569,
          18.5548,
          18.6527,
          18.7506,
          18.8486,
          18.9465,
          19.0444,
          19.1423,
          19.2402,
          19.3381,
          19.4361,
          19.534,
          19.6319,
          19.7298,
          19.8277,
          19.9256,
          20.0235,
          20.1215,
          20.2194,
          20.3173,
          20.4152,
          20.5131,
          20.611,
          20.7089,
          20.8069,
          20.9048,
          21.0027,
          21.1006,
          21.1985,
          21.2964,
          21.3943,
          21.4923,
          21.5902,
          21.6881,
          21.786,
          21.8839,
          21.9818,
          22.0797,
          22.1777,
          22.2756,
          22.3735,
          22.4714,
          22.5693,
          22.6672,
          22.7651,
          22.8631,
          22.961,
          23.0589,
          23.1568,
          23.2547,
          23.3526,
          23.4505,
          23.5485,
          23.6464,
          23.7443,
          23.8422,
          23.9401,
          24.038,
          24.136,
          24.2339,
          24.3318,
          24.4297,
          24.5276,
          24.6255,
          24.7234,
          24.8214,
          24.9193,
          25.0172
         ],
         "y": [
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0002,
          0.0002,
          0.0003,
          0.0004,
          0.0005,
          0.0006,
          0.0008,
          0.0009,
          0.0011,
          0.0013,
          0.0014,
          0.0015,
          0.0017,
          0.0017,
          0.0018,
          0.0017,
          0.0017,
          0.0016,
          0.0015,
          0.0013,
          0.0012,
          0.001,
          0.0009,
          0.0007,
          0.0006,
          0.0004,
          0.0003,
          0.0003,
          0.0002,
          0.0001,
          0.0001,
          0.0001,
          0,
          0,
          0,
          0,
          6.0677e-06,
          3.5592e-06,
          2.032e-06,
          1.1285e-06,
          6.0942e-07,
          3.1988e-07,
          1.6314e-07,
          8.3358e-08,
          4.2204e-08,
          2.0755e-08,
          9.9091e-09,
          4.5909e-09,
          2.0634e-09,
          8.9944e-10,
          3.8021e-10,
          1.5584e-10,
          6.1929e-11,
          2.3862e-11,
          9.5309e-12,
          3.8072e-12,
          1.5114e-12,
          7.1586e-13,
          6.9979e-13,
          1.4496e-12,
          3.6586e-12,
          9.2489e-12,
          2.2709e-11,
          5.3923e-11,
          1.2371e-10,
          2.9115e-10,
          6.8133e-10,
          1.5477e-09,
          3.4134e-09,
          7.3106e-09,
          1.521e-08,
          3.0749e-08,
          6.0434e-08,
          1.1553e-07,
          2.1495e-07,
          3.8952e-07,
          7.0748e-07,
          1.262e-06,
          2.1912e-06,
          3.7048e-06,
          6.1029e-06,
          9.8001e-06,
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0002,
          0.0002,
          0.0003,
          0.0004,
          0.0005,
          0.0006,
          0.0007,
          0.0008,
          0.0009,
          0.001,
          0.0011,
          0.0012,
          0.0012,
          0.0013,
          0.0013,
          0.0013,
          0.0013,
          0.0013,
          0.0012,
          0.0012,
          0.0012,
          0.0012,
          0.0012,
          0.0012,
          0.0013,
          0.0013,
          0.0014,
          0.0015,
          0.0017,
          0.0018,
          0.002,
          0.0022,
          0.0023,
          0.0025,
          0.0027,
          0.0029,
          0.0031,
          0.0033,
          0.0035,
          0.0037,
          0.0039,
          0.0041,
          0.0043,
          0.0046,
          0.0048,
          0.005,
          0.0053,
          0.0055,
          0.0057,
          0.0059,
          0.0061,
          0.0063,
          0.0066,
          0.0068,
          0.007,
          0.0072,
          0.0074,
          0.0076,
          0.0078,
          0.0081,
          0.0083,
          0.0085,
          0.0087,
          0.0089,
          0.009,
          0.0092,
          0.0094,
          0.0095,
          0.0097,
          0.0098,
          0.0099,
          0.0099,
          0.0099,
          0.0098,
          0.0096,
          0.0094,
          0.0091,
          0.0088,
          0.0084,
          0.0079,
          0.0075,
          0.007,
          0.0066,
          0.0061,
          0.0057,
          0.0052,
          0.0048,
          0.0044,
          0.004,
          0.0037,
          0.0033,
          0.003,
          0.0027,
          0.0024,
          0.0022,
          0.0019,
          0.0017,
          0.0016,
          0.0014,
          0.0013,
          0.0011,
          0.001,
          0.0009,
          0.0009,
          0.0008,
          0.0007,
          0.0007,
          0.0006,
          0.0006,
          0.0005,
          0.0005,
          0.0005,
          0.0005,
          0.0005,
          0.0005,
          0.0006,
          0.0007,
          0.0008,
          0.0009,
          0.001,
          0.0012,
          0.0014,
          0.0016,
          0.0019,
          0.0023,
          0.0027,
          0.0032,
          0.0038,
          0.0045,
          0.0053,
          0.0063,
          0.0075,
          0.009,
          0.0106,
          0.0126,
          0.0148,
          0.0174,
          0.0202,
          0.0235,
          0.0271,
          0.0311,
          0.0355,
          0.0404,
          0.0457,
          0.0515,
          0.0579,
          0.0649,
          0.0727,
          0.0814,
          0.0911,
          0.1018,
          0.1137,
          0.1267,
          0.1406,
          0.1553,
          0.1704,
          0.1855,
          0.2001,
          0.2137,
          0.2258,
          0.2359,
          0.2436,
          0.2485,
          0.2504,
          0.2495,
          0.2461,
          0.2404,
          0.2327,
          0.2236,
          0.2133,
          0.2023,
          0.1909,
          0.1793,
          0.1678,
          0.1565,
          0.1456,
          0.1349,
          0.1247,
          0.1148,
          0.1054,
          0.0963,
          0.0878,
          0.0797,
          0.0721,
          0.065,
          0.0585,
          0.0526,
          0.0472,
          0.0422,
          0.0377,
          0.0337,
          0.03,
          0.0267,
          0.0237,
          0.021,
          0.0186,
          0.0164,
          0.0144,
          0.0127,
          0.0111,
          0.0097,
          0.0085,
          0.0075,
          0.0066,
          0.0059,
          0.0053,
          0.0048,
          0.0044,
          0.0041,
          0.0038,
          0.0036,
          0.0036,
          0.0035,
          0.0036,
          0.0037,
          0.004,
          0.0043,
          0.0048,
          0.0054,
          0.0061,
          0.007,
          0.0081,
          0.0093,
          0.0107,
          0.0122,
          0.0139,
          0.0158,
          0.0177,
          0.0198,
          0.022,
          0.0242,
          0.0265,
          0.0289,
          0.0313,
          0.0337,
          0.0362,
          0.0386,
          0.041,
          0.0433,
          0.0455,
          0.0477,
          0.0496,
          0.0514,
          0.053,
          0.0543,
          0.0553,
          0.0561,
          0.0565,
          0.0567,
          0.0565,
          0.056,
          0.0552,
          0.0541,
          0.0529,
          0.0514,
          0.0498,
          0.0481,
          0.0464,
          0.0447,
          0.043,
          0.0414,
          0.0399,
          0.0385,
          0.0372,
          0.036,
          0.035,
          0.0341,
          0.0332,
          0.0324,
          0.0317,
          0.0309,
          0.0302,
          0.0294,
          0.0285,
          0.0277,
          0.0267,
          0.0257,
          0.0246,
          0.0235,
          0.0224,
          0.0213,
          0.0201,
          0.0189,
          0.0178,
          0.0167,
          0.0156,
          0.0145,
          0.0135,
          0.0125,
          0.0116,
          0.0107,
          0.0099,
          0.0091,
          0.0083,
          0.0076,
          0.0069,
          0.0063,
          0.0057,
          0.0052,
          0.0047,
          0.0042,
          0.0038,
          0.0034,
          0.0031,
          0.0027,
          0.0024,
          0.0021,
          0.0019,
          0.0016,
          0.0014,
          0.0012,
          0.0011,
          0.001,
          0.0009,
          0.0008,
          0.0008,
          0.0007,
          0.0007,
          0.0007,
          0.0007,
          0.0007,
          0.0007,
          0.0007,
          0.0007,
          0.0006,
          0.0006,
          0.0005,
          0.0005,
          0.0004,
          0.0003,
          0.0003,
          0.0002,
          0.0002,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0,
          0,
          0,
          0,
          8.3738e-06,
          5.3237e-06,
          3.3009e-06,
          1.9948e-06,
          1.1744e-06,
          6.7323e-07,
          3.756e-07,
          2.0618e-07,
          1.1327e-07,
          6.0597e-08,
          3.1547e-08,
          1.5973e-08,
          7.8611e-09,
          3.7594e-09,
          1.7471e-09,
          7.9079e-10,
          3.5378e-10,
          1.6933e-10,
          1.194e-10,
          1.7557e-10,
          3.8529e-10,
          9.1706e-10,
          2.1604e-09,
          4.9527e-09,
          1.1018e-08,
          2.3782e-08,
          4.9813e-08,
          1.0129e-07,
          2.0006e-07,
          3.9153e-07,
          7.677e-07,
          1.4626e-06,
          2.7084e-06,
          4.8767e-06,
          8.5421e-06,
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0001,
          0.0002,
          0.0003,
          0.0004,
          0.0006,
          0.0008,
          0.0011,
          0.0013,
          0.0017,
          0.0021,
          0.0024,
          0.0028,
          0.0032,
          0.0036,
          0.0039,
          0.0041,
          0.0042,
          0.0042,
          0.0041,
          0.004,
          0.0037,
          0.0034,
          0.003,
          0.0026,
          0.0022,
          0.0019,
          0.0015,
          0.0012,
          0.0009,
          0.0007,
          0.0005,
          0.0004,
          0.0003,
          0.0002,
          0.0001,
          0.0001,
          0
         ]
        },
        "47d04e2a5ee9.1": {
         "alpha": 0.3,
         "alpha_stroke": 1,
         "colors": "#1F77B4",
         "fill": "tozeroy",
         "inherit": true,
         "mode": "lines",
         "name": "Pre-follow",
         "sizes": [
          10,
          100
         ],
         "spans": [
          1,
          20
         ],
         "type": "scatter",
         "x": [
          -26.1775,
          -26.075,
          -25.9726,
          -25.8701,
          -25.7677,
          -25.6652,
          -25.5628,
          -25.4603,
          -25.3579,
          -25.2554,
          -25.1529,
          -25.0505,
          -24.948,
          -24.8456,
          -24.7431,
          -24.6407,
          -24.5382,
          -24.4358,
          -24.3333,
          -24.2308,
          -24.1284,
          -24.0259,
          -23.9235,
          -23.821,
          -23.7186,
          -23.6161,
          -23.5136,
          -23.4112,
          -23.3087,
          -23.2063,
          -23.1038,
          -23.0014,
          -22.8989,
          -22.7965,
          -22.694,
          -22.5915,
          -22.4891,
          -22.3866,
          -22.2842,
          -22.1817,
          -22.0793,
          -21.9768,
          -21.8744,
          -21.7719,
          -21.6694,
          -21.567,
          -21.4645,
          -21.3621,
          -21.2596,
          -21.1572,
          -21.0547,
          -20.9522,
          -20.8498,
          -20.7473,
          -20.6449,
          -20.5424,
          -20.44,
          -20.3375,
          -20.2351,
          -20.1326,
          -20.0301,
          -19.9277,
          -19.8252,
          -19.7228,
          -19.6203,
          -19.5179,
          -19.4154,
          -19.313,
          -19.2105,
          -19.108,
          -19.0056,
          -18.9031,
          -18.8007,
          -18.6982,
          -18.5958,
          -18.4933,
          -18.3908,
          -18.2884,
          -18.1859,
          -18.0835,
          -17.981,
          -17.8786,
          -17.7761,
          -17.6737,
          -17.5712,
          -17.4687,
          -17.3663,
          -17.2638,
          -17.1614,
          -17.0589,
          -16.9565,
          -16.854,
          -16.7516,
          -16.6491,
          -16.5466,
          -16.4442,
          -16.3417,
          -16.2393,
          -16.1368,
          -16.0344,
          -15.9319,
          -15.8294,
          -15.727,
          -15.6245,
          -15.5221,
          -15.4196,
          -15.3172,
          -15.2147,
          -15.1123,
          -15.0098,
          -14.9073,
          -14.8049,
          -14.7024,
          -14.6,
          -14.4975,
          -14.3951,
          -14.2926,
          -14.1902,
          -14.0877,
          -13.9852,
          -13.8828,
          -13.7803,
          -13.6779,
          -13.5754,
          -13.473,
          -13.3705,
          -13.268,
          -13.1656,
          -13.0631,
          -12.9607,
          -12.8582,
          -12.7558,
          -12.6533,
          -12.5509,
          -12.4484,
          -12.3459,
          -12.2435,
          -12.141,
          -12.0386,
          -11.9361,
          -11.8337,
          -11.7312,
          -11.6288,
          -11.5263,
          -11.4238,
          -11.3214,
          -11.2189,
          -11.1165,
          -11.014,
          -10.9116,
          -10.8091,
          -10.7066,
          -10.6042,
          -10.5017,
          -10.3993,
          -10.2968,
          -10.1944,
          -10.0919,
          -9.9895,
          -9.887,
          -9.7845,
          -9.6821,
          -9.5796,
          -9.4772,
          -9.3747,
          -9.2723,
          -9.1698,
          -9.0674,
          -8.9649,
          -8.8624,
          -8.76,
          -8.6575,
          -8.5551,
          -8.4526,
          -8.3502,
          -8.2477,
          -8.1453,
          -8.0428,
          -7.9403,
          -7.8379,
          -7.7354,
          -7.633,
          -7.5305,
          -7.4281,
          -7.3256,
          -7.2231,
          -7.1207,
          -7.0182,
          -6.9158,
          -6.8133,
          -6.7109,
          -6.6084,
          -6.506,
          -6.4035,
          -6.301,
          -6.1986,
          -6.0961,
          -5.9937,
          -5.8912,
          -5.7888,
          -5.6863,
          -5.5839,
          -5.4814,
          -5.3789,
          -5.2765,
          -5.174,
          -5.0716,
          -4.9691,
          -4.8667,
          -4.7642,
          -4.6617,
          -4.5593,
          -4.4568,
          -4.3544,
          -4.2519,
          -4.1495,
          -4.047,
          -3.9446,
          -3.8421,
          -3.7396,
          -3.6372,
          -3.5347,
          -3.4323,
          -3.3298,
          -3.2274,
          -3.1249,
          -3.0225,
          -2.92,
          -2.8175,
          -2.7151,
          -2.6126,
          -2.5102,
          -2.4077,
          -2.3053,
          -2.2028,
          -2.1003,
          -1.9979,
          -1.8954,
          -1.793,
          -1.6905,
          -1.5881,
          -1.4856,
          -1.3832,
          -1.2807,
          -1.1782,
          -1.0758,
          -0.9733,
          -0.8709,
          -0.7684,
          -0.666,
          -0.5635,
          -0.4611,
          -0.3586,
          -0.2561,
          -0.1537,
          -0.0512,
          0.0512,
          0.1537,
          0.2561,
          0.3586,
          0.4611,
          0.5635,
          0.666,
          0.7684,
          0.8709,
          0.9733,
          1.0758,
          1.1782,
          1.2807,
          1.3832,
          1.4856,
          1.5881,
          1.6905,
          1.793,
          1.8954,
          1.9979,
          2.1003,
          2.2028,
          2.3053,
          2.4077,
          2.5102,
          2.6126,
          2.7151,
          2.8175,
          2.92,
          3.0225,
          3.1249,
          3.2274,
          3.3298,
          3.4323,
          3.5347,
          3.6372,
          3.7396,
          3.8421,
          3.9446,
          4.047,
          4.1495,
          4.2519,
          4.3544,
          4.4568,
          4.5593,
          4.6617,
          4.7642,
          4.8667,
          4.9691,
          5.0716,
          5.174,
          5.2765,
          5.3789,
          5.4814,
          5.5839,
          5.6863,
          5.7888,
          5.8912,
          5.9937,
          6.0961,
          6.1986,
          6.301,
          6.4035,
          6.506,
          6.6084,
          6.7109,
          6.8133,
          6.9158,
          7.0182,
          7.1207,
          7.2231,
          7.3256,
          7.4281,
          7.5305,
          7.633,
          7.7354,
          7.8379,
          7.9403,
          8.0428,
          8.1453,
          8.2477,
          8.3502,
          8.4526,
          8.5551,
          8.6575,
          8.76,
          8.8624,
          8.9649,
          9.0674,
          9.1698,
          9.2723,
          9.3747,
          9.4772,
          9.5796,
          9.6821,
          9.7845,
          9.887,
          9.9895,
          10.0919,
          10.1944,
          10.2968,
          10.3993,
          10.5017,
          10.6042,
          10.7066,
          10.8091,
          10.9116,
          11.014,
          11.1165,
          11.2189,
          11.3214,
          11.4238,
          11.5263,
          11.6288,
          11.7312,
          11.8337,
          11.9361,
          12.0386,
          12.141,
          12.2435,
          12.3459,
          12.4484,
          12.5509,
          12.6533,
          12.7558,
          12.8582,
          12.9607,
          13.0631,
          13.1656,
          13.268,
          13.3705,
          13.473,
          13.5754,
          13.6779,
          13.7803,
          13.8828,
          13.9852,
          14.0877,
          14.1902,
          14.2926,
          14.3951,
          14.4975,
          14.6,
          14.7024,
          14.8049,
          14.9073,
          15.0098,
          15.1123,
          15.2147,
          15.3172,
          15.4196,
          15.5221,
          15.6245,
          15.727,
          15.8294,
          15.9319,
          16.0344,
          16.1368,
          16.2393,
          16.3417,
          16.4442,
          16.5466,
          16.6491,
          16.7516,
          16.854,
          16.9565,
          17.0589,
          17.1614,
          17.2638,
          17.3663,
          17.4687,
          17.5712,
          17.6737,
          17.7761,
          17.8786,
          17.981,
          18.0835,
          18.1859,
          18.2884,
          18.3908,
          18.4933,
          18.5958,
          18.6982,
          18.8007,
          18.9031,
          19.0056,
          19.108,
          19.2105,
          19.313,
          19.4154,
          19.5179,
          19.6203,
          19.7228,
          19.8252,
          19.9277,
          20.0301,
          20.1326,
          20.2351,
          20.3375,
          20.44,
          20.5424,
          20.6449,
          20.7473,
          20.8498,
          20.9522,
          21.0547,
          21.1572,
          21.2596,
          21.3621,
          21.4645,
          21.567,
          21.6694,
          21.7719,
          21.8744,
          21.9768,
          22.0793,
          22.1817,
          22.2842,
          22.3866,
          22.4891,
          22.5915,
          22.694,
          22.7965,
          22.8989,
          23.0014,
          23.1038,
          23.2063,
          23.3087,
          23.4112,
          23.5136,
          23.6161,
          23.7186,
          23.821,
          23.9235,
          24.0259,
          24.1284,
          24.2308,
          24.3333,
          24.4358,
          24.5382,
          24.6407,
          24.7431,
          24.8456,
          24.948,
          25.0505,
          25.1529,
          25.2554,
          25.3579,
          25.4603,
          25.5628,
          25.6652,
          25.7677,
          25.8701,
          25.9726,
          26.075,
          26.1775
         ],
         "y": [
          4.9679e-06,
          6.6571e-06,
          8.8183e-06,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          7.6149e-06,
          5.6851e-06,
          4.1931e-06,
          3.0546e-06,
          2.2022e-06,
          1.5933e-06,
          1.1399e-06,
          8.0747e-07,
          5.6799e-07,
          3.9951e-07,
          2.8513e-07,
          2.1233e-07,
          1.7557e-07,
          1.6712e-07,
          1.8427e-07,
          2.2865e-07,
          3.0444e-07,
          4.1841e-07,
          5.8022e-07,
          8.0608e-07,
          1.1272e-06,
          1.5593e-06,
          2.1323e-06,
          2.8814e-06,
          3.8484e-06,
          5.0812e-06,
          6.6343e-06,
          8.6374e-06,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0005,
          0.0005,
          0.0005,
          0.0006,
          0.0006,
          0.0007,
          0.0008,
          0.0008,
          0.0009,
          0.001,
          0.0011,
          0.0012,
          0.0013,
          0.0015,
          0.0016,
          0.0017,
          0.0019,
          0.002,
          0.0022,
          0.0024,
          0.0025,
          0.0027,
          0.0029,
          0.003,
          0.0032,
          0.0034,
          0.0036,
          0.0038,
          0.004,
          0.0043,
          0.0045,
          0.0047,
          0.005,
          0.0052,
          0.0055,
          0.0057,
          0.006,
          0.0062,
          0.0065,
          0.0067,
          0.0069,
          0.0072,
          0.0073,
          0.0075,
          0.0076,
          0.0077,
          0.0078,
          0.0079,
          0.0079,
          0.0079,
          0.0079,
          0.0078,
          0.0077,
          0.0076,
          0.0074,
          0.0072,
          0.007,
          0.0068,
          0.0065,
          0.0063,
          0.006,
          0.0057,
          0.0054,
          0.0051,
          0.0048,
          0.0045,
          0.0042,
          0.0039,
          0.0036,
          0.0033,
          0.003,
          0.0027,
          0.0024,
          0.0022,
          0.0019,
          0.0017,
          0.0015,
          0.0013,
          0.0012,
          0.001,
          0.0009,
          0.0008,
          0.0007,
          0.0006,
          0.0006,
          0.0005,
          0.0005,
          0.0005,
          0.0005,
          0.0006,
          0.0006,
          0.0007,
          0.0007,
          0.0008,
          0.0009,
          0.0011,
          0.0012,
          0.0014,
          0.0017,
          0.0019,
          0.0023,
          0.0027,
          0.0031,
          0.0037,
          0.0044,
          0.0052,
          0.0061,
          0.0072,
          0.0085,
          0.0101,
          0.0119,
          0.014,
          0.0165,
          0.0193,
          0.0225,
          0.0262,
          0.0304,
          0.0352,
          0.0406,
          0.0465,
          0.053,
          0.0601,
          0.0678,
          0.076,
          0.0849,
          0.0941,
          0.1038,
          0.1136,
          0.1237,
          0.1337,
          0.1437,
          0.1533,
          0.1624,
          0.1709,
          0.1786,
          0.1855,
          0.1913,
          0.1961,
          0.1996,
          0.2017,
          0.2026,
          0.2023,
          0.2007,
          0.1981,
          0.1943,
          0.1896,
          0.1839,
          0.1775,
          0.1705,
          0.163,
          0.1552,
          0.1471,
          0.1389,
          0.1307,
          0.1225,
          0.1145,
          0.1066,
          0.099,
          0.0916,
          0.0846,
          0.0778,
          0.0715,
          0.0655,
          0.0599,
          0.0546,
          0.0496,
          0.045,
          0.0407,
          0.0367,
          0.0331,
          0.0298,
          0.0267,
          0.0239,
          0.0214,
          0.0191,
          0.017,
          0.0152,
          0.0136,
          0.0121,
          0.0109,
          0.0098,
          0.0089,
          0.0082,
          0.0076,
          0.0072,
          0.007,
          0.0069,
          0.0069,
          0.007,
          0.0073,
          0.0078,
          0.0084,
          0.0091,
          0.0099,
          0.0109,
          0.012,
          0.0132,
          0.0145,
          0.016,
          0.0175,
          0.0192,
          0.0209,
          0.0227,
          0.0246,
          0.0265,
          0.0284,
          0.0303,
          0.0323,
          0.0342,
          0.036,
          0.0378,
          0.0396,
          0.0412,
          0.0428,
          0.0442,
          0.0455,
          0.0467,
          0.0477,
          0.0486,
          0.0494,
          0.05,
          0.0504,
          0.0508,
          0.0509,
          0.051,
          0.0509,
          0.0506,
          0.0503,
          0.0498,
          0.0492,
          0.0484,
          0.0476,
          0.0467,
          0.0457,
          0.0446,
          0.0434,
          0.0422,
          0.0409,
          0.0395,
          0.0382,
          0.0368,
          0.0354,
          0.034,
          0.0326,
          0.0312,
          0.0298,
          0.0285,
          0.0272,
          0.0259,
          0.0247,
          0.0235,
          0.0223,
          0.0211,
          0.02,
          0.019,
          0.0179,
          0.0169,
          0.0159,
          0.015,
          0.0141,
          0.0132,
          0.0124,
          0.0115,
          0.0107,
          0.01,
          0.0092,
          0.0086,
          0.0079,
          0.0072,
          0.0066,
          0.0061,
          0.0055,
          0.005,
          0.0046,
          0.0041,
          0.0037,
          0.0033,
          0.003,
          0.0027,
          0.0024,
          0.0021,
          0.0019,
          0.0016,
          0.0014,
          0.0013,
          0.0011,
          0.001,
          0.0009,
          0.0008,
          0.0007,
          0.0006,
          0.0005,
          0.0005,
          0.0004,
          0.0004,
          0.0004,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          8.0473e-06,
          6.4975e-06,
          5.4254e-06,
          4.8399e-06,
          4.7843e-06,
          5.2535e-06,
          6.3348e-06,
          8.1571e-06,
          0,
          0,
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0002,
          0.0002,
          0.0003,
          0.0003,
          0.0004,
          0.0005,
          0.0006,
          0.0007,
          0.0009,
          0.001,
          0.0012,
          0.0014,
          0.0016,
          0.0018,
          0.0021,
          0.0023,
          0.0025,
          0.0028,
          0.003,
          0.0032,
          0.0034,
          0.0036,
          0.0037,
          0.0038,
          0.0039,
          0.0039,
          0.0039,
          0.0039,
          0.0038,
          0.0037,
          0.0035,
          0.0033,
          0.0031,
          0.0029,
          0.0027,
          0.0024,
          0.0022,
          0.002,
          0.0017,
          0.0015,
          0.0013,
          0.0011,
          0.001,
          0.0008,
          0.0007,
          0.0005,
          0.0004,
          0.0004,
          0.0003,
          0.0002,
          0.0002,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0
         ]
        }
       },
       "base_url": "https://plot.ly",
       "config": {
        "showSendToCloud": false
       },
       "cur_data": "47d04e2a5ee9",
       "data": [
        {
         "error_x": {
          "color": "rgba(31,119,180,0.3)"
         },
         "error_y": {
          "color": "rgba(31,119,180,0.3)"
         },
         "fill": "tozeroy",
         "fillcolor": "rgba(31,119,180,0.3)",
         "line": {
          "color": "rgba(31,119,180,1)"
         },
         "marker": {
          "color": "rgba(31,119,180,0.3)",
          "line": {
           "color": "rgba(31,119,180,1)"
          }
         },
         "mode": "lines",
         "name": "Post-follow",
         "type": "scatter",
         "x": [
          -25.0172,
          -24.9193,
          -24.8214,
          -24.7234,
          -24.6255,
          -24.5276,
          -24.4297,
          -24.3318,
          -24.2339,
          -24.136,
          -24.038,
          -23.9401,
          -23.8422,
          -23.7443,
          -23.6464,
          -23.5485,
          -23.4505,
          -23.3526,
          -23.2547,
          -23.1568,
          -23.0589,
          -22.961,
          -22.8631,
          -22.7651,
          -22.6672,
          -22.5693,
          -22.4714,
          -22.3735,
          -22.2756,
          -22.1777,
          -22.0797,
          -21.9818,
          -21.8839,
          -21.786,
          -21.6881,
          -21.5902,
          -21.4923,
          -21.3943,
          -21.2964,
          -21.1985,
          -21.1006,
          -21.0027,
          -20.9048,
          -20.8069,
          -20.7089,
          -20.611,
          -20.5131,
          -20.4152,
          -20.3173,
          -20.2194,
          -20.1215,
          -20.0235,
          -19.9256,
          -19.8277,
          -19.7298,
          -19.6319,
          -19.534,
          -19.4361,
          -19.3381,
          -19.2402,
          -19.1423,
          -19.0444,
          -18.9465,
          -18.8486,
          -18.7506,
          -18.6527,
          -18.5548,
          -18.4569,
          -18.359,
          -18.2611,
          -18.1632,
          -18.0652,
          -17.9673,
          -17.8694,
          -17.7715,
          -17.6736,
          -17.5757,
          -17.4778,
          -17.3798,
          -17.2819,
          -17.184,
          -17.0861,
          -16.9882,
          -16.8903,
          -16.7924,
          -16.6944,
          -16.5965,
          -16.4986,
          -16.4007,
          -16.3028,
          -16.2049,
          -16.107,
          -16.009,
          -15.9111,
          -15.8132,
          -15.7153,
          -15.6174,
          -15.5195,
          -15.4216,
          -15.3236,
          -15.2257,
          -15.1278,
          -15.0299,
          -14.932,
          -14.8341,
          -14.7361,
          -14.6382,
          -14.5403,
          -14.4424,
          -14.3445,
          -14.2466,
          -14.1487,
          -14.0507,
          -13.9528,
          -13.8549,
          -13.757,
          -13.6591,
          -13.5612,
          -13.4633,
          -13.3653,
          -13.2674,
          -13.1695,
          -13.0716,
          -12.9737,
          -12.8758,
          -12.7779,
          -12.6799,
          -12.582,
          -12.4841,
          -12.3862,
          -12.2883,
          -12.1904,
          -12.0925,
          -11.9945,
          -11.8966,
          -11.7987,
          -11.7008,
          -11.6029,
          -11.505,
          -11.4071,
          -11.3091,
          -11.2112,
          -11.1133,
          -11.0154,
          -10.9175,
          -10.8196,
          -10.7217,
          -10.6237,
          -10.5258,
          -10.4279,
          -10.33,
          -10.2321,
          -10.1342,
          -10.0362,
          -9.9383,
          -9.8404,
          -9.7425,
          -9.6446,
          -9.5467,
          -9.4488,
          -9.3508,
          -9.2529,
          -9.155,
          -9.0571,
          -8.9592,
          -8.8613,
          -8.7634,
          -8.6654,
          -8.5675,
          -8.4696,
          -8.3717,
          -8.2738,
          -8.1759,
          -8.078,
          -7.98,
          -7.8821,
          -7.7842,
          -7.6863,
          -7.5884,
          -7.4905,
          -7.3926,
          -7.2946,
          -7.1967,
          -7.0988,
          -7.0009,
          -6.903,
          -6.8051,
          -6.7072,
          -6.6092,
          -6.5113,
          -6.4134,
          -6.3155,
          -6.2176,
          -6.1197,
          -6.0217,
          -5.9238,
          -5.8259,
          -5.728,
          -5.6301,
          -5.5322,
          -5.4343,
          -5.3363,
          -5.2384,
          -5.1405,
          -5.0426,
          -4.9447,
          -4.8468,
          -4.7489,
          -4.6509,
          -4.553,
          -4.4551,
          -4.3572,
          -4.2593,
          -4.1614,
          -4.0635,
          -3.9655,
          -3.8676,
          -3.7697,
          -3.6718,
          -3.5739,
          -3.476,
          -3.3781,
          -3.2801,
          -3.1822,
          -3.0843,
          -2.9864,
          -2.8885,
          -2.7906,
          -2.6927,
          -2.5947,
          -2.4968,
          -2.3989,
          -2.301,
          -2.2031,
          -2.1052,
          -2.0072,
          -1.9093,
          -1.8114,
          -1.7135,
          -1.6156,
          -1.5177,
          -1.4198,
          -1.3218,
          -1.2239,
          -1.126,
          -1.0281,
          -0.9302,
          -0.8323,
          -0.7344,
          -0.6364,
          -0.5385,
          -0.4406,
          -0.3427,
          -0.2448,
          -0.1469,
          -0.049,
          0.049,
          0.1469,
          0.2448,
          0.3427,
          0.4406,
          0.5385,
          0.6364,
          0.7344,
          0.8323,
          0.9302,
          1.0281,
          1.126,
          1.2239,
          1.3218,
          1.4198,
          1.5177,
          1.6156,
          1.7135,
          1.8114,
          1.9093,
          2.0072,
          2.1052,
          2.2031,
          2.301,
          2.3989,
          2.4968,
          2.5947,
          2.6927,
          2.7906,
          2.8885,
          2.9864,
          3.0843,
          3.1822,
          3.2801,
          3.3781,
          3.476,
          3.5739,
          3.6718,
          3.7697,
          3.8676,
          3.9655,
          4.0635,
          4.1614,
          4.2593,
          4.3572,
          4.4551,
          4.553,
          4.6509,
          4.7489,
          4.8468,
          4.9447,
          5.0426,
          5.1405,
          5.2384,
          5.3363,
          5.4343,
          5.5322,
          5.6301,
          5.728,
          5.8259,
          5.9238,
          6.0217,
          6.1197,
          6.2176,
          6.3155,
          6.4134,
          6.5113,
          6.6092,
          6.7072,
          6.8051,
          6.903,
          7.0009,
          7.0988,
          7.1967,
          7.2946,
          7.3926,
          7.4905,
          7.5884,
          7.6863,
          7.7842,
          7.8821,
          7.98,
          8.078,
          8.1759,
          8.2738,
          8.3717,
          8.4696,
          8.5675,
          8.6654,
          8.7634,
          8.8613,
          8.9592,
          9.0571,
          9.155,
          9.2529,
          9.3508,
          9.4488,
          9.5467,
          9.6446,
          9.7425,
          9.8404,
          9.9383,
          10.0362,
          10.1342,
          10.2321,
          10.33,
          10.4279,
          10.5258,
          10.6237,
          10.7217,
          10.8196,
          10.9175,
          11.0154,
          11.1133,
          11.2112,
          11.3091,
          11.4071,
          11.505,
          11.6029,
          11.7008,
          11.7987,
          11.8966,
          11.9945,
          12.0925,
          12.1904,
          12.2883,
          12.3862,
          12.4841,
          12.582,
          12.6799,
          12.7779,
          12.8758,
          12.9737,
          13.0716,
          13.1695,
          13.2674,
          13.3653,
          13.4633,
          13.5612,
          13.6591,
          13.757,
          13.8549,
          13.9528,
          14.0507,
          14.1487,
          14.2466,
          14.3445,
          14.4424,
          14.5403,
          14.6382,
          14.7361,
          14.8341,
          14.932,
          15.0299,
          15.1278,
          15.2257,
          15.3236,
          15.4216,
          15.5195,
          15.6174,
          15.7153,
          15.8132,
          15.9111,
          16.009,
          16.107,
          16.2049,
          16.3028,
          16.4007,
          16.4986,
          16.5965,
          16.6944,
          16.7924,
          16.8903,
          16.9882,
          17.0861,
          17.184,
          17.2819,
          17.3798,
          17.4778,
          17.5757,
          17.6736,
          17.7715,
          17.8694,
          17.9673,
          18.0652,
          18.1632,
          18.2611,
          18.359,
          18.4569,
          18.5548,
          18.6527,
          18.7506,
          18.8486,
          18.9465,
          19.0444,
          19.1423,
          19.2402,
          19.3381,
          19.4361,
          19.534,
          19.6319,
          19.7298,
          19.8277,
          19.9256,
          20.0235,
          20.1215,
          20.2194,
          20.3173,
          20.4152,
          20.5131,
          20.611,
          20.7089,
          20.8069,
          20.9048,
          21.0027,
          21.1006,
          21.1985,
          21.2964,
          21.3943,
          21.4923,
          21.5902,
          21.6881,
          21.786,
          21.8839,
          21.9818,
          22.0797,
          22.1777,
          22.2756,
          22.3735,
          22.4714,
          22.5693,
          22.6672,
          22.7651,
          22.8631,
          22.961,
          23.0589,
          23.1568,
          23.2547,
          23.3526,
          23.4505,
          23.5485,
          23.6464,
          23.7443,
          23.8422,
          23.9401,
          24.038,
          24.136,
          24.2339,
          24.3318,
          24.4297,
          24.5276,
          24.6255,
          24.7234,
          24.8214,
          24.9193,
          25.0172
         ],
         "xaxis": "x",
         "y": [
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0002,
          0.0002,
          0.0003,
          0.0004,
          0.0005,
          0.0006,
          0.0008,
          0.0009,
          0.0011,
          0.0013,
          0.0014,
          0.0015,
          0.0017,
          0.0017,
          0.0018,
          0.0017,
          0.0017,
          0.0016,
          0.0015,
          0.0013,
          0.0012,
          0.001,
          0.0009,
          0.0007,
          0.0006,
          0.0004,
          0.0003,
          0.0003,
          0.0002,
          0.0001,
          0.0001,
          0.0001,
          0,
          0,
          0,
          0,
          6.0677e-06,
          3.5592e-06,
          2.032e-06,
          1.1285e-06,
          6.0942e-07,
          3.1988e-07,
          1.6314e-07,
          8.3358e-08,
          4.2204e-08,
          2.0755e-08,
          9.9091e-09,
          4.5909e-09,
          2.0634e-09,
          8.9944e-10,
          3.8021e-10,
          1.5584e-10,
          6.1929e-11,
          2.3862e-11,
          9.5309e-12,
          3.8072e-12,
          1.5114e-12,
          7.1586e-13,
          6.9979e-13,
          1.4496e-12,
          3.6586e-12,
          9.2489e-12,
          2.2709e-11,
          5.3923e-11,
          1.2371e-10,
          2.9115e-10,
          6.8133e-10,
          1.5477e-09,
          3.4134e-09,
          7.3106e-09,
          1.521e-08,
          3.0749e-08,
          6.0434e-08,
          1.1553e-07,
          2.1495e-07,
          3.8952e-07,
          7.0748e-07,
          1.262e-06,
          2.1912e-06,
          3.7048e-06,
          6.1029e-06,
          9.8001e-06,
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0002,
          0.0002,
          0.0003,
          0.0004,
          0.0005,
          0.0006,
          0.0007,
          0.0008,
          0.0009,
          0.001,
          0.0011,
          0.0012,
          0.0012,
          0.0013,
          0.0013,
          0.0013,
          0.0013,
          0.0013,
          0.0012,
          0.0012,
          0.0012,
          0.0012,
          0.0012,
          0.0012,
          0.0013,
          0.0013,
          0.0014,
          0.0015,
          0.0017,
          0.0018,
          0.002,
          0.0022,
          0.0023,
          0.0025,
          0.0027,
          0.0029,
          0.0031,
          0.0033,
          0.0035,
          0.0037,
          0.0039,
          0.0041,
          0.0043,
          0.0046,
          0.0048,
          0.005,
          0.0053,
          0.0055,
          0.0057,
          0.0059,
          0.0061,
          0.0063,
          0.0066,
          0.0068,
          0.007,
          0.0072,
          0.0074,
          0.0076,
          0.0078,
          0.0081,
          0.0083,
          0.0085,
          0.0087,
          0.0089,
          0.009,
          0.0092,
          0.0094,
          0.0095,
          0.0097,
          0.0098,
          0.0099,
          0.0099,
          0.0099,
          0.0098,
          0.0096,
          0.0094,
          0.0091,
          0.0088,
          0.0084,
          0.0079,
          0.0075,
          0.007,
          0.0066,
          0.0061,
          0.0057,
          0.0052,
          0.0048,
          0.0044,
          0.004,
          0.0037,
          0.0033,
          0.003,
          0.0027,
          0.0024,
          0.0022,
          0.0019,
          0.0017,
          0.0016,
          0.0014,
          0.0013,
          0.0011,
          0.001,
          0.0009,
          0.0009,
          0.0008,
          0.0007,
          0.0007,
          0.0006,
          0.0006,
          0.0005,
          0.0005,
          0.0005,
          0.0005,
          0.0005,
          0.0005,
          0.0006,
          0.0007,
          0.0008,
          0.0009,
          0.001,
          0.0012,
          0.0014,
          0.0016,
          0.0019,
          0.0023,
          0.0027,
          0.0032,
          0.0038,
          0.0045,
          0.0053,
          0.0063,
          0.0075,
          0.009,
          0.0106,
          0.0126,
          0.0148,
          0.0174,
          0.0202,
          0.0235,
          0.0271,
          0.0311,
          0.0355,
          0.0404,
          0.0457,
          0.0515,
          0.0579,
          0.0649,
          0.0727,
          0.0814,
          0.0911,
          0.1018,
          0.1137,
          0.1267,
          0.1406,
          0.1553,
          0.1704,
          0.1855,
          0.2001,
          0.2137,
          0.2258,
          0.2359,
          0.2436,
          0.2485,
          0.2504,
          0.2495,
          0.2461,
          0.2404,
          0.2327,
          0.2236,
          0.2133,
          0.2023,
          0.1909,
          0.1793,
          0.1678,
          0.1565,
          0.1456,
          0.1349,
          0.1247,
          0.1148,
          0.1054,
          0.0963,
          0.0878,
          0.0797,
          0.0721,
          0.065,
          0.0585,
          0.0526,
          0.0472,
          0.0422,
          0.0377,
          0.0337,
          0.03,
          0.0267,
          0.0237,
          0.021,
          0.0186,
          0.0164,
          0.0144,
          0.0127,
          0.0111,
          0.0097,
          0.0085,
          0.0075,
          0.0066,
          0.0059,
          0.0053,
          0.0048,
          0.0044,
          0.0041,
          0.0038,
          0.0036,
          0.0036,
          0.0035,
          0.0036,
          0.0037,
          0.004,
          0.0043,
          0.0048,
          0.0054,
          0.0061,
          0.007,
          0.0081,
          0.0093,
          0.0107,
          0.0122,
          0.0139,
          0.0158,
          0.0177,
          0.0198,
          0.022,
          0.0242,
          0.0265,
          0.0289,
          0.0313,
          0.0337,
          0.0362,
          0.0386,
          0.041,
          0.0433,
          0.0455,
          0.0477,
          0.0496,
          0.0514,
          0.053,
          0.0543,
          0.0553,
          0.0561,
          0.0565,
          0.0567,
          0.0565,
          0.056,
          0.0552,
          0.0541,
          0.0529,
          0.0514,
          0.0498,
          0.0481,
          0.0464,
          0.0447,
          0.043,
          0.0414,
          0.0399,
          0.0385,
          0.0372,
          0.036,
          0.035,
          0.0341,
          0.0332,
          0.0324,
          0.0317,
          0.0309,
          0.0302,
          0.0294,
          0.0285,
          0.0277,
          0.0267,
          0.0257,
          0.0246,
          0.0235,
          0.0224,
          0.0213,
          0.0201,
          0.0189,
          0.0178,
          0.0167,
          0.0156,
          0.0145,
          0.0135,
          0.0125,
          0.0116,
          0.0107,
          0.0099,
          0.0091,
          0.0083,
          0.0076,
          0.0069,
          0.0063,
          0.0057,
          0.0052,
          0.0047,
          0.0042,
          0.0038,
          0.0034,
          0.0031,
          0.0027,
          0.0024,
          0.0021,
          0.0019,
          0.0016,
          0.0014,
          0.0012,
          0.0011,
          0.001,
          0.0009,
          0.0008,
          0.0008,
          0.0007,
          0.0007,
          0.0007,
          0.0007,
          0.0007,
          0.0007,
          0.0007,
          0.0007,
          0.0006,
          0.0006,
          0.0005,
          0.0005,
          0.0004,
          0.0003,
          0.0003,
          0.0002,
          0.0002,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0,
          0,
          0,
          0,
          8.3738e-06,
          5.3237e-06,
          3.3009e-06,
          1.9948e-06,
          1.1744e-06,
          6.7323e-07,
          3.756e-07,
          2.0618e-07,
          1.1327e-07,
          6.0597e-08,
          3.1547e-08,
          1.5973e-08,
          7.8611e-09,
          3.7594e-09,
          1.7471e-09,
          7.9079e-10,
          3.5378e-10,
          1.6933e-10,
          1.194e-10,
          1.7557e-10,
          3.8529e-10,
          9.1706e-10,
          2.1604e-09,
          4.9527e-09,
          1.1018e-08,
          2.3782e-08,
          4.9813e-08,
          1.0129e-07,
          2.0006e-07,
          3.9153e-07,
          7.677e-07,
          1.4626e-06,
          2.7084e-06,
          4.8767e-06,
          8.5421e-06,
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0001,
          0.0002,
          0.0003,
          0.0004,
          0.0006,
          0.0008,
          0.0011,
          0.0013,
          0.0017,
          0.0021,
          0.0024,
          0.0028,
          0.0032,
          0.0036,
          0.0039,
          0.0041,
          0.0042,
          0.0042,
          0.0041,
          0.004,
          0.0037,
          0.0034,
          0.003,
          0.0026,
          0.0022,
          0.0019,
          0.0015,
          0.0012,
          0.0009,
          0.0007,
          0.0005,
          0.0004,
          0.0003,
          0.0002,
          0.0001,
          0.0001,
          0
         ],
         "yaxis": "y"
        },
        {
         "error_x": {
          "color": "rgba(255,127,14,0.3)"
         },
         "error_y": {
          "color": "rgba(255,127,14,0.3)"
         },
         "fill": "tozeroy",
         "fillcolor": "rgba(255,127,14,0.3)",
         "line": {
          "color": "rgba(255,127,14,1)"
         },
         "marker": {
          "color": "rgba(255,127,14,0.3)",
          "line": {
           "color": "rgba(255,127,14,1)"
          }
         },
         "mode": "lines",
         "name": "Pre-follow",
         "type": "scatter",
         "x": [
          -26.1775,
          -26.075,
          -25.9726,
          -25.8701,
          -25.7677,
          -25.6652,
          -25.5628,
          -25.4603,
          -25.3579,
          -25.2554,
          -25.1529,
          -25.0505,
          -24.948,
          -24.8456,
          -24.7431,
          -24.6407,
          -24.5382,
          -24.4358,
          -24.3333,
          -24.2308,
          -24.1284,
          -24.0259,
          -23.9235,
          -23.821,
          -23.7186,
          -23.6161,
          -23.5136,
          -23.4112,
          -23.3087,
          -23.2063,
          -23.1038,
          -23.0014,
          -22.8989,
          -22.7965,
          -22.694,
          -22.5915,
          -22.4891,
          -22.3866,
          -22.2842,
          -22.1817,
          -22.0793,
          -21.9768,
          -21.8744,
          -21.7719,
          -21.6694,
          -21.567,
          -21.4645,
          -21.3621,
          -21.2596,
          -21.1572,
          -21.0547,
          -20.9522,
          -20.8498,
          -20.7473,
          -20.6449,
          -20.5424,
          -20.44,
          -20.3375,
          -20.2351,
          -20.1326,
          -20.0301,
          -19.9277,
          -19.8252,
          -19.7228,
          -19.6203,
          -19.5179,
          -19.4154,
          -19.313,
          -19.2105,
          -19.108,
          -19.0056,
          -18.9031,
          -18.8007,
          -18.6982,
          -18.5958,
          -18.4933,
          -18.3908,
          -18.2884,
          -18.1859,
          -18.0835,
          -17.981,
          -17.8786,
          -17.7761,
          -17.6737,
          -17.5712,
          -17.4687,
          -17.3663,
          -17.2638,
          -17.1614,
          -17.0589,
          -16.9565,
          -16.854,
          -16.7516,
          -16.6491,
          -16.5466,
          -16.4442,
          -16.3417,
          -16.2393,
          -16.1368,
          -16.0344,
          -15.9319,
          -15.8294,
          -15.727,
          -15.6245,
          -15.5221,
          -15.4196,
          -15.3172,
          -15.2147,
          -15.1123,
          -15.0098,
          -14.9073,
          -14.8049,
          -14.7024,
          -14.6,
          -14.4975,
          -14.3951,
          -14.2926,
          -14.1902,
          -14.0877,
          -13.9852,
          -13.8828,
          -13.7803,
          -13.6779,
          -13.5754,
          -13.473,
          -13.3705,
          -13.268,
          -13.1656,
          -13.0631,
          -12.9607,
          -12.8582,
          -12.7558,
          -12.6533,
          -12.5509,
          -12.4484,
          -12.3459,
          -12.2435,
          -12.141,
          -12.0386,
          -11.9361,
          -11.8337,
          -11.7312,
          -11.6288,
          -11.5263,
          -11.4238,
          -11.3214,
          -11.2189,
          -11.1165,
          -11.014,
          -10.9116,
          -10.8091,
          -10.7066,
          -10.6042,
          -10.5017,
          -10.3993,
          -10.2968,
          -10.1944,
          -10.0919,
          -9.9895,
          -9.887,
          -9.7845,
          -9.6821,
          -9.5796,
          -9.4772,
          -9.3747,
          -9.2723,
          -9.1698,
          -9.0674,
          -8.9649,
          -8.8624,
          -8.76,
          -8.6575,
          -8.5551,
          -8.4526,
          -8.3502,
          -8.2477,
          -8.1453,
          -8.0428,
          -7.9403,
          -7.8379,
          -7.7354,
          -7.633,
          -7.5305,
          -7.4281,
          -7.3256,
          -7.2231,
          -7.1207,
          -7.0182,
          -6.9158,
          -6.8133,
          -6.7109,
          -6.6084,
          -6.506,
          -6.4035,
          -6.301,
          -6.1986,
          -6.0961,
          -5.9937,
          -5.8912,
          -5.7888,
          -5.6863,
          -5.5839,
          -5.4814,
          -5.3789,
          -5.2765,
          -5.174,
          -5.0716,
          -4.9691,
          -4.8667,
          -4.7642,
          -4.6617,
          -4.5593,
          -4.4568,
          -4.3544,
          -4.2519,
          -4.1495,
          -4.047,
          -3.9446,
          -3.8421,
          -3.7396,
          -3.6372,
          -3.5347,
          -3.4323,
          -3.3298,
          -3.2274,
          -3.1249,
          -3.0225,
          -2.92,
          -2.8175,
          -2.7151,
          -2.6126,
          -2.5102,
          -2.4077,
          -2.3053,
          -2.2028,
          -2.1003,
          -1.9979,
          -1.8954,
          -1.793,
          -1.6905,
          -1.5881,
          -1.4856,
          -1.3832,
          -1.2807,
          -1.1782,
          -1.0758,
          -0.9733,
          -0.8709,
          -0.7684,
          -0.666,
          -0.5635,
          -0.4611,
          -0.3586,
          -0.2561,
          -0.1537,
          -0.0512,
          0.0512,
          0.1537,
          0.2561,
          0.3586,
          0.4611,
          0.5635,
          0.666,
          0.7684,
          0.8709,
          0.9733,
          1.0758,
          1.1782,
          1.2807,
          1.3832,
          1.4856,
          1.5881,
          1.6905,
          1.793,
          1.8954,
          1.9979,
          2.1003,
          2.2028,
          2.3053,
          2.4077,
          2.5102,
          2.6126,
          2.7151,
          2.8175,
          2.92,
          3.0225,
          3.1249,
          3.2274,
          3.3298,
          3.4323,
          3.5347,
          3.6372,
          3.7396,
          3.8421,
          3.9446,
          4.047,
          4.1495,
          4.2519,
          4.3544,
          4.4568,
          4.5593,
          4.6617,
          4.7642,
          4.8667,
          4.9691,
          5.0716,
          5.174,
          5.2765,
          5.3789,
          5.4814,
          5.5839,
          5.6863,
          5.7888,
          5.8912,
          5.9937,
          6.0961,
          6.1986,
          6.301,
          6.4035,
          6.506,
          6.6084,
          6.7109,
          6.8133,
          6.9158,
          7.0182,
          7.1207,
          7.2231,
          7.3256,
          7.4281,
          7.5305,
          7.633,
          7.7354,
          7.8379,
          7.9403,
          8.0428,
          8.1453,
          8.2477,
          8.3502,
          8.4526,
          8.5551,
          8.6575,
          8.76,
          8.8624,
          8.9649,
          9.0674,
          9.1698,
          9.2723,
          9.3747,
          9.4772,
          9.5796,
          9.6821,
          9.7845,
          9.887,
          9.9895,
          10.0919,
          10.1944,
          10.2968,
          10.3993,
          10.5017,
          10.6042,
          10.7066,
          10.8091,
          10.9116,
          11.014,
          11.1165,
          11.2189,
          11.3214,
          11.4238,
          11.5263,
          11.6288,
          11.7312,
          11.8337,
          11.9361,
          12.0386,
          12.141,
          12.2435,
          12.3459,
          12.4484,
          12.5509,
          12.6533,
          12.7558,
          12.8582,
          12.9607,
          13.0631,
          13.1656,
          13.268,
          13.3705,
          13.473,
          13.5754,
          13.6779,
          13.7803,
          13.8828,
          13.9852,
          14.0877,
          14.1902,
          14.2926,
          14.3951,
          14.4975,
          14.6,
          14.7024,
          14.8049,
          14.9073,
          15.0098,
          15.1123,
          15.2147,
          15.3172,
          15.4196,
          15.5221,
          15.6245,
          15.727,
          15.8294,
          15.9319,
          16.0344,
          16.1368,
          16.2393,
          16.3417,
          16.4442,
          16.5466,
          16.6491,
          16.7516,
          16.854,
          16.9565,
          17.0589,
          17.1614,
          17.2638,
          17.3663,
          17.4687,
          17.5712,
          17.6737,
          17.7761,
          17.8786,
          17.981,
          18.0835,
          18.1859,
          18.2884,
          18.3908,
          18.4933,
          18.5958,
          18.6982,
          18.8007,
          18.9031,
          19.0056,
          19.108,
          19.2105,
          19.313,
          19.4154,
          19.5179,
          19.6203,
          19.7228,
          19.8252,
          19.9277,
          20.0301,
          20.1326,
          20.2351,
          20.3375,
          20.44,
          20.5424,
          20.6449,
          20.7473,
          20.8498,
          20.9522,
          21.0547,
          21.1572,
          21.2596,
          21.3621,
          21.4645,
          21.567,
          21.6694,
          21.7719,
          21.8744,
          21.9768,
          22.0793,
          22.1817,
          22.2842,
          22.3866,
          22.4891,
          22.5915,
          22.694,
          22.7965,
          22.8989,
          23.0014,
          23.1038,
          23.2063,
          23.3087,
          23.4112,
          23.5136,
          23.6161,
          23.7186,
          23.821,
          23.9235,
          24.0259,
          24.1284,
          24.2308,
          24.3333,
          24.4358,
          24.5382,
          24.6407,
          24.7431,
          24.8456,
          24.948,
          25.0505,
          25.1529,
          25.2554,
          25.3579,
          25.4603,
          25.5628,
          25.6652,
          25.7677,
          25.8701,
          25.9726,
          26.075,
          26.1775
         ],
         "xaxis": "x",
         "y": [
          4.9679e-06,
          6.6571e-06,
          8.8183e-06,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          7.6149e-06,
          5.6851e-06,
          4.1931e-06,
          3.0546e-06,
          2.2022e-06,
          1.5933e-06,
          1.1399e-06,
          8.0747e-07,
          5.6799e-07,
          3.9951e-07,
          2.8513e-07,
          2.1233e-07,
          1.7557e-07,
          1.6712e-07,
          1.8427e-07,
          2.2865e-07,
          3.0444e-07,
          4.1841e-07,
          5.8022e-07,
          8.0608e-07,
          1.1272e-06,
          1.5593e-06,
          2.1323e-06,
          2.8814e-06,
          3.8484e-06,
          5.0812e-06,
          6.6343e-06,
          8.6374e-06,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0004,
          0.0004,
          0.0004,
          0.0004,
          0.0005,
          0.0005,
          0.0005,
          0.0006,
          0.0006,
          0.0007,
          0.0008,
          0.0008,
          0.0009,
          0.001,
          0.0011,
          0.0012,
          0.0013,
          0.0015,
          0.0016,
          0.0017,
          0.0019,
          0.002,
          0.0022,
          0.0024,
          0.0025,
          0.0027,
          0.0029,
          0.003,
          0.0032,
          0.0034,
          0.0036,
          0.0038,
          0.004,
          0.0043,
          0.0045,
          0.0047,
          0.005,
          0.0052,
          0.0055,
          0.0057,
          0.006,
          0.0062,
          0.0065,
          0.0067,
          0.0069,
          0.0072,
          0.0073,
          0.0075,
          0.0076,
          0.0077,
          0.0078,
          0.0079,
          0.0079,
          0.0079,
          0.0079,
          0.0078,
          0.0077,
          0.0076,
          0.0074,
          0.0072,
          0.007,
          0.0068,
          0.0065,
          0.0063,
          0.006,
          0.0057,
          0.0054,
          0.0051,
          0.0048,
          0.0045,
          0.0042,
          0.0039,
          0.0036,
          0.0033,
          0.003,
          0.0027,
          0.0024,
          0.0022,
          0.0019,
          0.0017,
          0.0015,
          0.0013,
          0.0012,
          0.001,
          0.0009,
          0.0008,
          0.0007,
          0.0006,
          0.0006,
          0.0005,
          0.0005,
          0.0005,
          0.0005,
          0.0006,
          0.0006,
          0.0007,
          0.0007,
          0.0008,
          0.0009,
          0.0011,
          0.0012,
          0.0014,
          0.0017,
          0.0019,
          0.0023,
          0.0027,
          0.0031,
          0.0037,
          0.0044,
          0.0052,
          0.0061,
          0.0072,
          0.0085,
          0.0101,
          0.0119,
          0.014,
          0.0165,
          0.0193,
          0.0225,
          0.0262,
          0.0304,
          0.0352,
          0.0406,
          0.0465,
          0.053,
          0.0601,
          0.0678,
          0.076,
          0.0849,
          0.0941,
          0.1038,
          0.1136,
          0.1237,
          0.1337,
          0.1437,
          0.1533,
          0.1624,
          0.1709,
          0.1786,
          0.1855,
          0.1913,
          0.1961,
          0.1996,
          0.2017,
          0.2026,
          0.2023,
          0.2007,
          0.1981,
          0.1943,
          0.1896,
          0.1839,
          0.1775,
          0.1705,
          0.163,
          0.1552,
          0.1471,
          0.1389,
          0.1307,
          0.1225,
          0.1145,
          0.1066,
          0.099,
          0.0916,
          0.0846,
          0.0778,
          0.0715,
          0.0655,
          0.0599,
          0.0546,
          0.0496,
          0.045,
          0.0407,
          0.0367,
          0.0331,
          0.0298,
          0.0267,
          0.0239,
          0.0214,
          0.0191,
          0.017,
          0.0152,
          0.0136,
          0.0121,
          0.0109,
          0.0098,
          0.0089,
          0.0082,
          0.0076,
          0.0072,
          0.007,
          0.0069,
          0.0069,
          0.007,
          0.0073,
          0.0078,
          0.0084,
          0.0091,
          0.0099,
          0.0109,
          0.012,
          0.0132,
          0.0145,
          0.016,
          0.0175,
          0.0192,
          0.0209,
          0.0227,
          0.0246,
          0.0265,
          0.0284,
          0.0303,
          0.0323,
          0.0342,
          0.036,
          0.0378,
          0.0396,
          0.0412,
          0.0428,
          0.0442,
          0.0455,
          0.0467,
          0.0477,
          0.0486,
          0.0494,
          0.05,
          0.0504,
          0.0508,
          0.0509,
          0.051,
          0.0509,
          0.0506,
          0.0503,
          0.0498,
          0.0492,
          0.0484,
          0.0476,
          0.0467,
          0.0457,
          0.0446,
          0.0434,
          0.0422,
          0.0409,
          0.0395,
          0.0382,
          0.0368,
          0.0354,
          0.034,
          0.0326,
          0.0312,
          0.0298,
          0.0285,
          0.0272,
          0.0259,
          0.0247,
          0.0235,
          0.0223,
          0.0211,
          0.02,
          0.019,
          0.0179,
          0.0169,
          0.0159,
          0.015,
          0.0141,
          0.0132,
          0.0124,
          0.0115,
          0.0107,
          0.01,
          0.0092,
          0.0086,
          0.0079,
          0.0072,
          0.0066,
          0.0061,
          0.0055,
          0.005,
          0.0046,
          0.0041,
          0.0037,
          0.0033,
          0.003,
          0.0027,
          0.0024,
          0.0021,
          0.0019,
          0.0016,
          0.0014,
          0.0013,
          0.0011,
          0.001,
          0.0009,
          0.0008,
          0.0007,
          0.0006,
          0.0005,
          0.0005,
          0.0004,
          0.0004,
          0.0004,
          0.0003,
          0.0003,
          0.0003,
          0.0003,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0002,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          8.0473e-06,
          6.4975e-06,
          5.4254e-06,
          4.8399e-06,
          4.7843e-06,
          5.2535e-06,
          6.3348e-06,
          8.1571e-06,
          0,
          0,
          0,
          0,
          0,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0.0002,
          0.0002,
          0.0003,
          0.0003,
          0.0004,
          0.0005,
          0.0006,
          0.0007,
          0.0009,
          0.001,
          0.0012,
          0.0014,
          0.0016,
          0.0018,
          0.0021,
          0.0023,
          0.0025,
          0.0028,
          0.003,
          0.0032,
          0.0034,
          0.0036,
          0.0037,
          0.0038,
          0.0039,
          0.0039,
          0.0039,
          0.0039,
          0.0038,
          0.0037,
          0.0035,
          0.0033,
          0.0031,
          0.0029,
          0.0027,
          0.0024,
          0.0022,
          0.002,
          0.0017,
          0.0015,
          0.0013,
          0.0011,
          0.001,
          0.0008,
          0.0007,
          0.0005,
          0.0004,
          0.0004,
          0.0003,
          0.0002,
          0.0002,
          0.0001,
          0.0001,
          0.0001,
          0.0001,
          0
         ],
         "yaxis": "y"
        }
       ],
       "highlight": {
        "debounce": 0,
        "dynamic": false,
        "on": "plotly_click",
        "opacityDim": 0.2,
        "persistent": false,
        "selected": {
         "opacity": 1
        },
        "selectize": false
       },
       "layout": {
        "autosize": false,
        "hovermode": "closest",
        "legend": {
         "x": 0.05,
         "y": 0.95
        },
        "margin": {
         "b": 40,
         "l": 60,
         "r": 10,
         "t": 25
        },
        "showlegend": true,
        "xaxis": {
         "automargin": true,
         "domain": [
          0,
          1
         ],
         "title": "Disposition Effect"
        },
        "yaxis": {
         "automargin": true,
         "domain": [
          0,
          1
         ],
         "title": "Density"
        }
       },
       "shinyEvents": [
        "plotly_hover",
        "plotly_click",
        "plotly_selected",
        "plotly_relayout",
        "plotly_brushed",
        "plotly_brushing",
        "plotly_clickannotation",
        "plotly_doubleclick",
        "plotly_deselect",
        "plotly_afterplot"
       ],
       "source": "A",
       "visdat": {
        "47d04e2a5ee9": [
         "function () ",
         "plotlyVisDat"
        ]
       }
      },
      "text/html": [
       "<!doctype html>\n",
       "<html>\n",
       "\t<head>\n",
       "\t\t<meta charset=\"utf-8\">\n",
       "\t\t<script title=\"htmlwidgets\" src=\"data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbChjb2RlKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCFlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICByZXN1bHQgPSBldmFsKCIoIiArIGNvZGUgKyAiKSIpOwogICAgICB9IGNhdGNoKGUpIHsKICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBpbml0U2l6aW5nKGVsKSB7CiAgICB2YXIgc2l6aW5nID0gc2l6aW5nUG9saWN5KGVsKTsKICAgIGlmICghc2l6aW5nKQogICAgICByZXR1cm47CgogICAgdmFyIGNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodG1sd2lkZ2V0X2NvbnRhaW5lciIpOwogICAgaWYgKCFjZWwpCiAgICAgIHJldHVybjsKCiAgICBpZiAodHlwZW9mKHNpemluZy5wYWRkaW5nKSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAiMCI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZyA9IHBhZGRpbmdUb0Nzcyh1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKSk7CiAgICB9CgogICAgaWYgKHNpemluZy5maWxsKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgaWYgKGNlbCkgewogICAgICAgIGNlbC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICAgdmFyIHBhZCA9IHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpOwogICAgICAgIGNlbC5zdHlsZS50b3AgPSBwYWQudG9wICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUucmlnaHQgPSBwYWQucmlnaHQgKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5ib3R0b20gPSBwYWQuYm90dG9tICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUubGVmdCA9IHBhZC5sZWZ0ICsgInB4IjsKICAgICAgICBlbC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIH0KCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwub2Zmc2V0SGVpZ2h0OyB9CiAgICAgIH07CgogICAgfSBlbHNlIHsKICAgICAgZWwuc3R5bGUud2lkdGggPSBweChzaXppbmcud2lkdGgpOwogICAgICBlbC5zdHlsZS5oZWlnaHQgPSBweChzaXppbmcuaGVpZ2h0KTsKCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0V2lkdGg7IH0sCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwogICAgfQogIH0KCiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgZm9yIG1ldGhvZHMKICB2YXIgZGVmYXVsdHMgPSB7CiAgICBmaW5kOiBmdW5jdGlvbihzY29wZSkgewogICAgICByZXR1cm4gcXVlcnlTZWxlY3RvckFsbChzY29wZSwgIi4iICsgdGhpcy5uYW1lKTsKICAgIH0sCiAgICByZW5kZXJFcnJvcjogZnVuY3Rpb24oZWwsIGVycikgewogICAgICB2YXIgJGVsID0gJChlbCk7CgogICAgICB0aGlzLmNsZWFyRXJyb3IoZWwpOwoKICAgICAgLy8gQWRkIGFsbCB0aGVzZSBlcnJvciBjbGFzc2VzLCBhcyBTaGlueSBkb2VzCiAgICAgIHZhciBlcnJDbGFzcyA9ICJzaGlueS1vdXRwdXQtZXJyb3IiOwogICAgICBpZiAoZXJyLnR5cGUgIT09IG51bGwpIHsKICAgICAgICAvLyB1c2UgdGhlIGNsYXNzZXMgb2YgdGhlIGVycm9yIGNvbmRpdGlvbiBhcyBDU1MgY2xhc3MgbmFtZXMKICAgICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiAiICsgJC5tYXAoYXNBcnJheShlcnIudHlwZSksIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICAgIHJldHVybiBlcnJDbGFzcyArICItIiArIHR5cGU7CiAgICAgICAgfSkuam9pbigiICIpOwogICAgICB9CiAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiIGh0bWx3aWRnZXRzLWVycm9yIjsKCiAgICAgIC8vIElzIGVsIGlubGluZSBvciBibG9jaz8gSWYgaW5saW5lIG9yIGlubGluZS1ibG9jaywganVzdCBkaXNwbGF5Om5vbmUgaXQKICAgICAgLy8gYW5kIGFkZCBhbiBpbmxpbmUgZXJyb3IuCiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmNzcygiZGlzcGxheSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBkaXNwbGF5KTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgICRlbC5oaWRlKCk7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yU3BhbiA9ICQoIjxzcGFuPiIpLmFkZENsYXNzKGVyckNsYXNzKTsKICAgICAgICAgIGVycm9yU3Bhbi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvclNwYW4pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKSB7CiAgICAgICAgLy8gSWYgYmxvY2ssIGFkZCBhbiBlcnJvciBqdXN0IGFmdGVyIHRoZSBlbCwgc2V0IHZpc2liaWxpdHk6bm9uZSBvbiB0aGUKICAgICAgICAvLyBlbCwgYW5kIHBvc2l0aW9uIHRoZSBlcnJvciB0byBiZSBvbiB0b3Agb2YgdGhlIGVsLgogICAgICAgIC8vIE1hcmsgaXQgd2l0aCBhIHVuaXF1ZSBJRCBhbmQgQ1NTIGNsYXNzIHNvIHdlIGNhbiByZW1vdmUgaXQgbGF0ZXIuCiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JEaXYgPSAkKCI8ZGl2PiIpLmFkZENsYXNzKGVyckNsYXNzKS5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIikKICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgLy8gc2V0dGluZyB3aWR0aCBjYW4gcHVzaCBvdXQgdGhlIHBhZ2Ugc2l6ZSwgZm9yY2luZyBvdGhlcndpc2UKICAgICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgc2Nyb2xsYmFycyB0byBhcHBlYXIgYW5kIG1ha2luZyBpdCBpbXBvc3NpYmxlIGZvcgogICAgICAgICAgICAvLyB0aGUgZWxlbWVudCB0byBzaHJpbms7IHNvIHVzZSBtYXgtd2lkdGggaW5zdGVhZAogICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgZXJyb3JEaXYudGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JEaXYpOwoKICAgICAgICAgIC8vIFJlYWxseSBkdW1iIHdheSB0byBrZWVwIHRoZSBzaXplL3Bvc2l0aW9uIG9mIHRoZSBlcnJvciBpbiBzeW5jIHdpdGgKICAgICAgICAgIC8vIHRoZSBwYXJlbnQgZWxlbWVudCBhcyB0aGUgd2luZG93IGlzIHJlc2l6ZWQgb3Igd2hhdGV2ZXIuCiAgICAgICAgICB2YXIgaW50SWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFlcnJvckRpdlswXS5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRJZCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yRGl2CiAgICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZWwpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwogICAgICB2YXIgZGlzcGxheSA9ICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBudWxsKTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgIGlmIChkaXNwbGF5KQogICAgICAgICAgJGVsLmNzcygiZGlzcGxheSIsIGRpc3BsYXkpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIil7CiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJpbmhlcml0Iik7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfQogICAgfSwKICAgIHNpemluZzoge30KICB9OwoKICAvLyBDYWxsZWQgYnkgd2lkZ2V0IGJpbmRpbmdzIHRvIHJlZ2lzdGVyIGEgbmV3IHR5cGUgb2Ygd2lkZ2V0LiBUaGUgZGVmaW5pdGlvbgogIC8vIG9iamVjdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAgLy8gLSBuYW1lIChyZXF1aXJlZCkgLSBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBiaW5kaW5nIG5hbWUsIHdoaWNoIHdpbGwgYmUKICAvLyAgIHVzZWQgYnkgZGVmYXVsdCBhcyB0aGUgQ1NTIGNsYXNzbmFtZSB0byBsb29rIGZvci4KICAvLyAtIGluaXRpYWxpemUgKG9wdGlvbmFsKSAtIEEgZnVuY3Rpb24oZWwpIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIHdpZGdldCBlbGVtZW50OyBpZiBhIHZhbHVlIGlzIHJldHVybmVkLCBpdCB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgdGhpcmQKICAvLyAgIHZhbHVlIHRvIHJlbmRlclZhbHVlLgogIC8vIC0gcmVuZGVyVmFsdWUgKHJlcXVpcmVkKSAtIEEgZnVuY3Rpb24oZWwsIGRhdGEsIGluaXRWYWx1ZSkgdGhhdCB3aWxsIGJlCiAgLy8gICBjYWxsZWQgd2l0aCBkYXRhLiBTdGF0aWMgY29udGV4dHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgZWxlbWVudDsgU2hpbnkgYXBwcyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlcgogIC8vICAgZWxlbWVudCwgYXMgdGhlIGRhdGEgY2hhbmdlcy4KICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0ID0gZnVuY3Rpb24oZGVmaW5pdGlvbikgewogICAgaWYgKCFkZWZpbml0aW9uLm5hbWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgfQogICAgaWYgKCFkZWZpbml0aW9uLnR5cGUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgdHlwZSIpOwogICAgfQogICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBvdXRwdXQgd2lkZ2V0cwogICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gIm91dHB1dCIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgd2lkZ2V0IHR5cGUgJyIgKyBkZWZpbml0aW9uLnR5cGUgKyAiJyIpOwogICAgfQogICAgLy8gVE9ETzogVmVyaWZ5IHRoYXQgLm5hbWUgaXMgYSB2YWxpZCBDU1MgY2xhc3NuYW1lCgogICAgLy8gU3VwcG9ydCBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMuIE9sZC1zdHlsZSBjbGFzcy1ib3VuZAogICAgLy8gZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0ICJvYmplY3QiIHBlciB3aWRnZXQgcGVyIHR5cGUvY2xhc3Mgb2YKICAgIC8vIHdpZGdldDsgdGhlIHJlbmRlclZhbHVlIGFuZCByZXNpemUgbWV0aG9kcyBvbiBzdWNoIHdpZGdldCBvYmplY3RzCiAgICAvLyB0YWtlIGVsIGFuZCBpbnN0YW5jZSBhcmd1bWVudHMsIGJlY2F1c2UgdGhlIHdpZGdldCBvYmplY3QgY2FuJ3QKICAgIC8vIHN0b3JlIHRoZW0uIE5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQKICAgIC8vIG9iamVjdCBwZXIgd2lkZ2V0IGluc3RhbmNlOyB0aGUgZGVmaW5pdGlvbiB0aGF0J3MgcGFzc2VkIGluIGRvZXNuJ3QKICAgIC8vIHByb3ZpZGUgcmVuZGVyVmFsdWUgb3IgcmVzaXplIG1ldGhvZHMgYXQgYWxsLCBqdXN0IHRoZSBzaW5nbGUgbWV0aG9kCiAgICAvLyAgIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpCiAgICAvLyB3aGljaCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGhhcyByZW5kZXJWYWx1ZSh4KSBhbmQgcmVzaXplKHcsIGgpLgogICAgLy8gVGhpcyBlbmFibGVzIGEgZmFyIG1vcmUgbmF0dXJhbCBwcm9ncmFtbWluZyBzdHlsZSBmb3IgdGhlIHdpZGdldAogICAgLy8gYXV0aG9yLCB3aG8gY2FuIHN0b3JlIHBlci1pbnN0YW5jZSBzdGF0ZSB1c2luZyBlaXRoZXIgT08tc3R5bGUKICAgIC8vIGluc3RhbmNlIGZpZWxkcyBvciBmdW5jdGlvbmFsLXN0eWxlIGNsb3N1cmUgdmFyaWFibGVzIChJIGd1ZXNzIHRoaXMKICAgIC8vIGlzIGluIGNvbnRyYXN0IHRvIHdoYXQgY2FuIG9ubHkgYmUgY2FsbGVkIEMtc3R5bGUgcHNldWRvLU9PIHdoaWNoIGlzCiAgICAvLyB3aGF0IHdlIHJlcXVpcmVkIGJlZm9yZSkuCiAgICBpZiAoZGVmaW5pdGlvbi5mYWN0b3J5KSB7CiAgICAgIGRlZmluaXRpb24gPSBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZpbml0aW9uKTsKICAgIH0KCiAgICBpZiAoIWRlZmluaXRpb24ucmVuZGVyVmFsdWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgcmVuZGVyVmFsdWUgZnVuY3Rpb24iKTsKICAgIH0KCiAgICAvLyBGb3Igc3RhdGljIHJlbmRlcmluZyAobm9uLVNoaW55KSwgdXNlIGEgc2ltcGxlIHdpZGdldCByZWdpc3RyYXRpb24KICAgIC8vIHNjaGVtZS4gV2UgYWxzbyB1c2UgdGhpcyBzY2hlbWUgZm9yIFNoaW55IGFwcHMvZG9jdW1lbnRzIHRoYXQgYWxzbwogICAgLy8gY29udGFpbiBzdGF0aWMgd2lkZ2V0cy4KICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICAvLyBNZXJnZSBkZWZhdWx0cyBpbnRvIHRoZSBkZWZpbml0aW9uOyBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24uCiAgICB2YXIgc3RhdGljQmluZGluZyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwogICAgb3ZlcnJpZGVNZXRob2Qoc3RhdGljQmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBzdXBlcmZ1bmMoc2NvcGUpOwogICAgICAgIC8vIEZpbHRlciBvdXQgU2hpbnkgb3V0cHV0cywgd2Ugb25seSB3YW50IHRoZSBzdGF0aWMga2luZAogICAgICAgIHJldHVybiBmaWx0ZXJCeUNsYXNzKHJlc3VsdHMsICJodG1sLXdpZGdldC1vdXRwdXQiLCBmYWxzZSk7CiAgICAgIH07CiAgICB9KTsKICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzLnB1c2goc3RhdGljQmluZGluZyk7CgogICAgaWYgKHNoaW55TW9kZSkgewogICAgICAvLyBTaGlueSBpcyBydW5uaW5nLiBSZWdpc3RlciB0aGUgZGVmaW5pdGlvbiB3aXRoIGFuIG91dHB1dCBiaW5kaW5nLgogICAgICAvLyBUaGUgZGVmaW5pdGlvbiBpdHNlbGYgd2lsbCBub3QgYmUgdGhlIG91dHB1dCBiaW5kaW5nLCBpbnN0ZWFkCiAgICAgIC8vIHdlIHdpbGwgbWFrZSBhbiBvdXRwdXQgYmluZGluZyBvYmplY3QgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlCiAgICAgIC8vIGRlZmluaXRpb24uIFRoaXMgaXMgYmVjYXVzZSB3ZSBmb29saXNobHkgdXNlZCB0aGUgc2FtZSBtZXRob2QKICAgICAgLy8gbmFtZSAocmVuZGVyVmFsdWUpIGZvciBodG1sd2lkZ2V0cyBkZWZpbml0aW9uIGFuZCBTaGlueSBiaW5kaW5ncwogICAgICAvLyBidXQgdGhleSBhY3R1YWxseSBoYXZlIHF1aXRlIGRpZmZlcmVudCBzZW1hbnRpY3MgKHRoZSBTaGlueQogICAgICAvLyBiaW5kaW5ncyByZWNlaXZlIGRhdGEgdGhhdCBpbmNsdWRlcyBsb3RzIG9mIG1ldGFkYXRhIHRoYXQgaXQKICAgICAgLy8gc3RyaXBzIG9mZiBiZWZvcmUgY2FsbGluZyBodG1sd2lkZ2V0cyByZW5kZXJWYWx1ZSkuIFdlIGNhbid0CiAgICAgIC8vIGp1c3QgaWdub3JlIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgaW4gc29tZSB3aWRnZXRzIGl0J3MgaGVscGZ1bAogICAgICAvLyB0byBjYWxsIHRoaXMucmVuZGVyVmFsdWUoKSBmcm9tIGluc2lkZSBvZiByZXNpemUoKSwgYW5kIGlmCiAgICAgIC8vIHdlJ3JlIG5vdCBkZWxlZ2F0aW5nLCB0aGVuIHRoYXQgY2FsbCB3aWxsIGdvIHRvIHRoZSBTaGlueQogICAgICAvLyB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIGh0bWx3aWRnZXRzIHZlcnNpb24uCgogICAgICAvLyBNZXJnZSBkZWZhdWx0cyB3aXRoIGRlZmluaXRpb24sIHdpdGhvdXQgbXV0YXRpbmcgZWl0aGVyLgogICAgICB2YXIgYmluZGluZ0RlZiA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwoKICAgICAgLy8gVGhpcyBvYmplY3Qgd2lsbCBiZSBvdXIgYWN0dWFsIFNoaW55IGJpbmRpbmcuCiAgICAgIHZhciBzaGlueUJpbmRpbmcgPSBuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpOwoKICAgICAgLy8gV2l0aCBhIGZldyBleGNlcHRpb25zLCB3ZSdsbCB3YW50IHRvIHNpbXBseSB1c2UgdGhlIGJpbmRpbmdEZWYncwogICAgICAvLyB2ZXJzaW9uIG9mIG1ldGhvZHMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCiAgICAgIC8vIFNoaW55J3MgZGVmYXVsdHMuIE5PVEU6IElmIFNoaW55J3Mgb3V0cHV0IGJpbmRpbmdzIGdhaW4gYWRkaXRpb25hbAogICAgICAvLyBtZXRob2RzIGluIHRoZSBmdXR1cmUsIGFuZCB3ZSB3YW50IHRoZW0gdG8gYmUgb3ZlcnJpZGVhYmxlIGJ5CiAgICAgIC8vIEhUTUxXaWRnZXQgYmluZGluZyBkZWZpbml0aW9ucywgdGhlbiB3ZSdsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoaXMKICAgICAgLy8gbGlzdC4KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiZ2V0SWQiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUNoYW5nZSIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAicmVuZGVyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiY2xlYXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJzaG93UHJvZ3Jlc3MiKTsKCiAgICAgIC8vIFRoZSBmaW5kLCByZW5kZXJWYWx1ZSwgYW5kIHJlc2l6ZSBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB3ZQogICAgICAvLyB3YW50IHRvIGFjdHVhbGx5IGRlY29yYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgYmluZGluZ0RlZiBtZXRob2RzLgoKICAgICAgc2hpbnlCaW5kaW5nLmZpbmQgPSBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gYmluZGluZ0RlZi5maW5kKHNjb3BlKTsKCiAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzCiAgICAgICAgdmFyIGR5bmFtaWNSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoIi5odG1sLXdpZGdldC1vdXRwdXQiKTsKCiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdoYXRldmVyIGNhdXNlZCBTaGlueSB0byB0aGluayB0aGVyZSBtaWdodCBiZQogICAgICAgIC8vIG5ldyBkeW5hbWljIG91dHB1dHMsIGFsc28gY2F1c2VkIHRoZXJlIHRvIGJlIG5ldyBzdGF0aWMgb3V0cHV0cy4KICAgICAgICAvLyBTaW5jZSB0aGVyZSBtaWdodCBiZSBsb3RzIG9mIGRpZmZlcmVudCBodG1sd2lkZ2V0cyBiaW5kaW5ncywgd2UKICAgICAgICAvLyBzY2hlZHVsZSBleGVjdXRpb24gZm9yIGxhdGVyLS1ubyBuZWVkIHRvIHN0YXRpY1JlbmRlciBtdWx0aXBsZQogICAgICAgIC8vIHRpbWVzLgogICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gZHluYW1pY1Jlc3VsdHMubGVuZ3RoKQogICAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXIoKTsKCiAgICAgICAgcmV0dXJuIGR5bmFtaWNSZXN1bHRzOwogICAgICB9OwoKICAgICAgLy8gV3JhcCByZW5kZXJWYWx1ZSB0byBoYW5kbGUgaW5pdGlhbGl6YXRpb24sIHdoaWNoIHVuZm9ydHVuYXRlbHkgaXNuJ3QKICAgICAgLy8gc3VwcG9ydGVkIG5hdGl2ZWx5IGJ5IFNoaW55IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4KCiAgICAgIHNoaW55QmluZGluZy5yZW5kZXJWYWx1ZSA9IGZ1bmN0aW9uKGVsLCBkYXRhKSB7CiAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7CiAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICBpZiAoIShkYXRhLmV2YWxzIGluc3RhbmNlb2YgQXJyYXkpKSBkYXRhLmV2YWxzID0gW2RhdGEuZXZhbHNdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBkYXRhLmV2YWxzICYmIGkgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2ldKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFiaW5kaW5nRGVmLnJlbmRlck9uTnVsbFZhbHVlKSB7CiAgICAgICAgICBpZiAoZGF0YS54ID09PSBudWxsKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJpbmhlcml0IjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgIGluaXRTaXppbmcoZWwpOwoKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiLCB0cnVlKTsKICAgICAgICAgIGlmIChiaW5kaW5nRGVmLmluaXRpYWxpemUpIHsKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJpbmRpbmdEZWYuaW5pdGlhbGl6ZShlbCwgZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSwgW2VsLCBkYXRhLnhdKTsKICAgICAgfTsKCiAgICAgIC8vIE9ubHkgb3ZlcnJpZGUgcmVzaXplIGlmIGJpbmRpbmdEZWYgaW1wbGVtZW50cyBpdAogICAgICBpZiAoYmluZGluZ0RlZi5yZXNpemUpIHsKICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICAgIC8vIFNoaW55IGNhbiBjYWxsIHJlc2l6ZSBiZWZvcmUgaW5pdGlhbGl6ZS9yZW5kZXJWYWx1ZSBoYXZlIGJlZW4KICAgICAgICAgIC8vIGNhbGxlZCwgd2hpY2ggZG9lc24ndCBtYWtlIHNlbnNlIGZvciB3aWRnZXRzLgogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgICBiaW5kaW5nRGVmLnJlc2l6ZShlbCwgd2lkdGgsIGhlaWdodCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CgogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7CiAgICB9CiAgfTsKCiAgdmFyIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgZnVuY3Rpb24gc2NoZWR1bGVTdGF0aWNSZW5kZXIoKSB7CiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgewogICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9LCAxKTsKICAgIH0KICB9CgogIC8vIFJlbmRlciBzdGF0aWMgd2lkZ2V0cyBhZnRlciB0aGUgZG9jdW1lbnQgZmluaXNoZXMgbG9hZGluZwogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzCiAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGJpbmRpbmdzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7CiAgICAgIHZhciBtYXRjaGVzID0gYmluZGluZy5maW5kKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICAgIGZvckVhY2gobWF0Y2hlcywgZnVuY3Rpb24oZWwpIHsKICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOwoKICAgICAgICBpZiAoaGFzQ2xhc3MoZWwsICJodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUgKyAiIGh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCI7CgogICAgICAgIHZhciBpbml0UmVzdWx0OwogICAgICAgIGlmIChiaW5kaW5nLmluaXRpYWxpemUpIHsKICAgICAgICAgIGluaXRSZXN1bHQgPSBiaW5kaW5nLmluaXRpYWxpemUoZWwsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICk7CiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsKICAgICAgICAgIHZhciBsYXN0U2l6ZSA9IHsKICAgICAgICAgICAgdzogc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgfTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCgogIGZ1bmN0aW9uIGhhc19qUXVlcnkzKCkgewogICAgaWYgKCF3aW5kb3cualF1ZXJ5KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciAkdmVyc2lvbiA9IHdpbmRvdy5qUXVlcnkuZm4uanF1ZXJ5OwogICAgdmFyICRtYWpvcl92ZXJzaW9uID0gcGFyc2VJbnQoJHZlcnNpb24uc3BsaXQoIi4iKVswXSk7CiAgICByZXR1cm4gJG1ham9yX3ZlcnNpb24gPj0gMzsKICB9CgogIC8qCiAgLyBTaGlueSAxLjQgYnVtcGVkIGpRdWVyeSBmcm9tIDEueCB0byAzLnggd2hpY2ggbWVhbnMgalF1ZXJ5J3MKICAvIG9uLXJlYWR5IGhhbmRsZXIgKGkuZS4sICQoZm4pKSBpcyBub3cgYXN5bmNyb25vdXMgKGkuZS4sIGl0IG5vdwogIC8gcmVhbGx5IG1lYW5zICQoc2V0VGltZW91dChmbikpLgogIC8gaHR0cHM6Ly9qcXVlcnkuY29tL3VwZ3JhZGUtZ3VpZGUvMy4wLyNicmVha2luZy1jaGFuZ2UtZG9jdW1lbnQtcmVhZHktaGFuZGxlcnMtYXJlLW5vdy1hc3luY2hyb25vdXMKICAvCiAgLyBTaW5jZSBTaGlueSB1c2VzICQoKSB0byBzY2hlZHVsZSBpbml0U2hpbnksIHNoaW55Pj0xLjQgY2FsbHMgaW5pdFNoaW55CiAgLyBvbmUgdGljayBsYXRlciB0aGFuIGl0IGRpZCBiZWZvcmUsIHdoaWNoIG1lYW5zIHN0YXRpY1JlbmRlcigpIGlzCiAgLyBjYWxsZWQgcmVuZGVyVmFsdWUoKSBlYXJsaWVyIHRoYW4gKGFkdmFuY2VkKSB3aWRnZXQgYXV0aG9ycyBtaWdodCBiZSBleHBlY3RpbmcuCiAgLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9zaGlueS9pc3N1ZXMvMjYzMAogIC8KICAvIEZvciBhIGNvbmNyZXRlIGV4YW1wbGUsIGxlYWZsZXQgaGFzIHNvbWUgbWV0aG9kcyAoZS5nLiwgdXBkYXRlQm91bmRzKQogIC8gd2hpY2ggcmVmZXJlbmNlIFNoaW55IG1ldGhvZHMgcmVnaXN0ZXJlZCBpbiBpbml0U2hpbnkgKGUuZy4sIHNldElucHV0VmFsdWUpLgogIC8gU2luY2UgbGVhZmxldCBpcyBwcml2eSB0byB0aGlzIGxpZmUtY3ljbGUsIGl0IGtub3dzIHRvIHVzZSBzZXRUaW1lb3V0KCkgdG8KICAvIGRlbGF5IGV4ZWN1dGlvbiBvZiB0aG9zZSBtZXRob2RzICh1bnRpbCBTaGlueSBtZXRob2RzIGFyZSByZWFkeSkKICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvYmxvYi8xOGVjOTgxL2phdmFzY3JpcHQvc3JjL2luZGV4LmpzI0wyNjYtTDI2OAogIC8KICAvIElkZWFsbHkgd2lkZ2V0IGF1dGhvcnMgd291bGRuJ3QgbmVlZCB0byB1c2UgdGhpcyBzZXRUaW1lb3V0KCkgaGFjayB0aGF0CiAgLyBsZWFmbGV0IHVzZXMgdG8gY2FsbCBTaGlueSBtZXRob2RzIG9uIGEgc3RhdGljUmVuZGVyKCkuIEluIHRoZSBsb25nIHJ1biwKICAvIHRoZSBsb2dpYyBpbml0U2hpbnkgc2hvdWxkIGJlIGJyb2tlbiB1cCBzbyB0aGF0IG1ldGhvZCByZWdpc3RyYXRpb24gaGFwcGVucwogIC8gcmlnaHQgYXdheSwgYnV0IGJpbmRpbmcgaGFwcGVucyBsYXRlci4KICAqLwogIGZ1bmN0aW9uIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKSB7CiAgICBpZiAoc2hpbnlNb2RlICYmIGhhc19qUXVlcnkzKCkpIHsKICAgICAgd2luZG93LmpRdWVyeSh3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgIH0KICB9CgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBhcmd1bWVudHMuY2FsbGVlLCBmYWxzZSk7CiAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgIH0sIGZhbHNlKTsKICB9IGVsc2UgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7CiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUpOwogICAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgICAgfQogICAgfSk7CiAgfQoKCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsKICAgIC8vIElmIG5vIGtleSwgZGVmYXVsdCB0byB0aGUgZmlyc3QgaXRlbQogICAgaWYgKHR5cGVvZihrZXkpID09PSAidW5kZWZpbmVkIikKICAgICAga2V5ID0gMTsKCiAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlcG5hbWUgKyAiLSIgKyBrZXkgKyAiLWF0dGFjaG1lbnQiKTsKICAgIGlmICghbGluaykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0dGFjaG1lbnQgIiArIGRlcG5hbWUgKyAiLyIgKyBrZXkgKyAiIG5vdCBmb3VuZCBpbiBkb2N1bWVudCIpOwogICAgfQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgewogICAgdmFyIG5hbWVzID0gW107CiAgICB2YXIgbGVuZ3RoOwogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgewogICAgICAgIGlmIChkZi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGxlbmd0aCkgIT09ICJ1bmRlZmluZWQiICYmIGxlbmd0aCAhPT0gZGZbbmFtZV0ubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoID0gZGZbbmFtZV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBpdGVtOwogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgewogICAgICAgIGl0ZW0gPSB7fTsKICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuYW1lcy5sZW5ndGg7IGNvbCsrKSB7CiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOwogICAgICAgIH0KICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMudHJhbnNwb3NlQXJyYXkyRCA9IGZ1bmN0aW9uKGFycmF5KSB7CiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBhcnJheTsKICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgewogICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbihyb3cpIHsKICAgICAgICAgICAgICByZXR1cm4gcm93W2ldCiAgICAgICAgICB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ld0FycmF5OwogIH07CiAgLy8gU3BsaXQgdmFsdWUgYXQgc3BsaXRDaGFyLCBidXQgYWxsb3cgc3BsaXRDaGFyIHRvIGJlIGVzY2FwZWQKICAvLyB1c2luZyBlc2NhcGVDaGFyLiBBbnkgb3RoZXIgY2hhcmFjdGVycyBlc2NhcGVkIGJ5IGVzY2FwZUNoYXIKICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLgogIGZ1bmN0aW9uIHNwbGl0V2l0aEVzY2FwZSh2YWx1ZSwgc3BsaXRDaGFyLCBlc2NhcGVDaGFyKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgIHZhciBjdXJyZW50UmVzdWx0ID0gIiI7CiAgICBmb3IgKHZhciBwb3MgPSAwOyBwb3MgPCB2YWx1ZS5sZW5ndGg7IHBvcysrKSB7CiAgICAgIGlmICghZXNjYXBlTW9kZSkgewogICAgICAgIGlmICh2YWx1ZVtwb3NdID09PSBzcGxpdENoYXIpIHsKICAgICAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW3Bvc10gPT09IGVzY2FwZUNoYXIpIHsKICAgICAgICAgIGVzY2FwZU1vZGUgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICBlc2NhcGVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChjdXJyZW50UmVzdWx0ICE9PSAiIikgewogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CiAgLy8gRnVuY3Rpb24gYXV0aG9yZWQgYnkgWWlodWkvSkogQWxsYWlyZQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlciA9IGZ1bmN0aW9uKG8sIG1lbWJlcikgewogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsKICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07CiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQogICAgICBpZiAobyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gIm9iamVjdCIgJiYgcGFydCBpbiBvKSB7CiAgICAgICAgaWYgKGkgPT0gKGwgLSAxKSkgeyAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGVuIGV2YWx1bGF0ZQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikKICAgICAgICAgICAgb1twYXJ0XSA9IHRyeUV2YWwob1twYXJ0XSk7CiAgICAgICAgfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHRvIG5leHQgZW1iZWRkZWQgb2JqZWN0CiAgICAgICAgICBvID0gb1twYXJ0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuCiAgLy8gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCwgb3IgbnVsbCBpZiBub25lLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICByZXR1cm4gZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpOwogIH07CgogIC8vIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzY29wZSB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLAogIC8vIGFuZCByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YKICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVsZW1lbnQsIGlmIGFueS4gSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZQogIC8vIHNlbGVjdG9yLCBvciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8gSFRNTFdpZGdldAogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAoZWwgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKGVsKTsKICAgIH0KICB9OwoKICAvLyBGaW5kcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLCBhbmQKICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50cywgaW4gYW4gYXJyYXkuIElmIGVsZW1lbnRzIHRoYXQKICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQKICAvLyBpbnN0YW5jZSwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbiBudWxscy4KICAvLwogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4KICB3aW5kb3cuSFRNTFdpZGdldHMuZmluZEFsbCA9IGZ1bmN0aW9uKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICBzZWxlY3RvciA9IHNjb3BlOwogICAgICBzY29wZSA9IGRvY3VtZW50OwogICAgfQoKICAgIHZhciBub2RlcyA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0cy5wdXNoKHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShub2Rlc1tpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOwogIGZ1bmN0aW9uIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpIHsKICAgIHdoaWxlIChwb3N0UmVuZGVySGFuZGxlcnMubGVuZ3RoKSB7CiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7CiAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgaGFuZGxlcigpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZWdpc3RlciB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUKICAvLyBuZXh0IHRpbWUgc3RhdGljIHdpZGdldHMgYXJlIHJlbmRlcmVkLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICBwb3N0UmVuZGVySGFuZGxlcnMucHVzaChjYWxsYmFjayk7CiAgfTsKCiAgLy8gVGFrZXMgYSBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbiwgYW5kIHJldHVybnMgYW4KICAvLyBvbGQtc3R5bGUgY2xhc3MtYm91bmQgZGVmaW5pdGlvbi4gVGhpcyBzYXZlcyB1cyBmcm9tIGhhdmluZwogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoCiAgLy8gdHlwZXMgb2YgZGVmaW5pdGlvbnMuCiAgZnVuY3Rpb24gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmbikgewogICAgdmFyIHJlc3VsdCA9IHsKICAgICAgbmFtZTogZGVmbi5uYW1lLAogICAgICB0eXBlOiBkZWZuLnR5cGUsCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGRlZm4uZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0sCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyVmFsdWUoeCk7CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgfQogICAgfTsKCiAgICBpZiAoZGVmbi5maW5kKQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsKICAgIGlmIChkZWZuLnJlbmRlckVycm9yKQogICAgICByZXN1bHQucmVuZGVyRXJyb3IgPSBkZWZuLnJlbmRlckVycm9yOwogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikKICAgICAgcmVzdWx0LmNsZWFyRXJyb3IgPSBkZWZuLmNsZWFyRXJyb3I7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0pKCk7Cgo=\"></script>\n",
       "<script title=\"plotly-binding\" src=\"data:application/javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICByZXR1cm4ge307CiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgIGlmIChpbnN0YW5jZS5hdXRvc2l6ZSkgewogICAgICB2YXIgd2lkdGggPSBpbnN0YW5jZS53aWR0aCB8fCB3aWR0aDsKICAgICAgdmFyIGhlaWdodCA9IGluc3RhbmNlLmhlaWdodCB8fCBoZWlnaHQ7CiAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwge3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgIH0KICB9LCAgCiAgCiAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgCiAgICAvKiAKICAgIC8gJ2luZm9ybSB0aGUgd29ybGQnIGFib3V0IGhpZ2hsaWdodGluZyBvcHRpb25zIHRoaXMgaXMgc28gb3RoZXIKICAgIC8gY3Jvc3N0YWxrIGxpYnJhcmllcyBoYXZlIGEgY2hhbmNlIHRvIHJlc3BvbmQgdG8gc3BlY2lhbCBzZXR0aW5ncyAKICAgIC8gc3VjaCBhcyBwZXJzaXN0ZW50IHNlbGVjdGlvbi4gCiAgICAvIEFGQUlLLCBsZWFmbGV0IGlzIHRoZSBvbmx5IGxpYnJhcnkgd2l0aCBzdWNoIGludGVyZ3JhdGlvbgogICAgLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9sZWFmbGV0L3B1bGwvMzQ2L2ZpbGVzI2RpZmYtYWQwYzJkNTFjZTVmZGY4YzkwYzczOTViMTAyZjQyNjVSMTU0CiAgICAqLwogICAgdmFyIGN0Q29uZmlnID0gY3Jvc3N0YWxrLnZhcigncGxvdGx5Q3Jvc3N0YWxrT3B0cycpLnNldCh4LmhpZ2hsaWdodCk7CiAgICAgIAogICAgaWYgKHR5cGVvZih3aW5kb3cpICE9PSAidW5kZWZpbmVkIikgewogICAgICAvLyBtYWtlIHN1cmUgcGxvdHMgZG9uJ3QgZ2V0IGNyZWF0ZWQgb3V0c2lkZSB0aGUgbmV0d29yayAoZm9yIG9uLXByZW0pCiAgICAgIHdpbmRvdy5QTE9UTFlFTlYgPSB3aW5kb3cuUExPVExZRU5WIHx8IHt9OwogICAgICB3aW5kb3cuUExPVExZRU5WLkJBU0VfVVJMID0geC5iYXNlX3VybDsKICAgICAgCiAgICAgIC8vIEVuYWJsZSBwZXJzaXN0ZW50IHNlbGVjdGlvbiB3aGVuIHNoaWZ0IGtleSBpcyBkb3duCiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4Mjg2MTMvY2hlY2staWYtYS1rZXktaXMtZG93bgogICAgICB2YXIgcGVyc2lzdE9uU2hpZnQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKCFlKSB3aW5kb3cuZXZlbnQ7CiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50ID0gdHJ1ZTsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50U2hpZnQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50ID0gZmFsc2U7IAogICAgICAgICAgeC5oaWdobGlnaHQucGVyc2lzdGVudFNoaWZ0ID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9OwogICAgICAKICAgICAgLy8gT25seSByZWxldmFudCBpZiB3ZSBoYXZlbid0IGZvcmNlZCBwZXJzaXN0ZW50IG1vZGUgYXQgY29tbWFuZCBsaW5lCiAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgIHdpbmRvdy5vbm1vdXNlbW92ZSA9IHBlcnNpc3RPblNoaWZ0OwogICAgICB9CiAgICB9CgogICAgdmFyIGdyYXBoRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwuaWQpOwogICAgCiAgICAvLyBUT0RPOiBtb3ZlIHRoZSBjb250cm9sIHBhbmVsIGluamVjdGlvbiBzdHJhdGVneSBpbnNpZGUgaGVyZS4uLgogICAgSFRNTFdpZGdldHMuYWRkUG9zdFJlbmRlckhhbmRsZXIoZnVuY3Rpb24oKSB7CiAgICAgIAogICAgICAvLyBsb3dlciB0aGUgei1pbmRleCBvZiB0aGUgbW9kZWJhciB0byBwcmV2ZW50IGl0IGZyb20gaGlnaGphY2tpbmcgaG92ZXIKICAgICAgLy8gKFRPRE86IGRvIHRoaXMgdmlhIENTUz8pCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yb3BlbnNjaS9wbG90bHkvaXNzdWVzLzk1NgogICAgICAvLyBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL3Byb3Bfc3R5bGVfemluZGV4LmFzcAogICAgICB2YXIgbW9kZWJhcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSAubW9kZWJhciIpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGViYXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbW9kZWJhcnNbaV0uc3R5bGUuekluZGV4ID0gMTsKICAgICAgfQogICAgfSk7CiAgICAgIAogICAgICAvLyBpbmplY3QgYSAiY29udHJvbCBwYW5lbCIgaG9sZGluZyBzZWxlY3RpemUvZHluYW1pYyBjb2xvciB3aWRnZXQocykKICAgIGlmICh4LnNlbGVjdGl6ZSB8fCB4LmhpZ2hsaWdodC5keW5hbWljICYmICFpbnN0YW5jZS5wbG90bHkpIHsKICAgICAgdmFyIGZsZXggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgZmxleC5jbGFzcyA9ICJwbG90bHktY3Jvc3N0YWxrLWNvbnRyb2wtcGFuZWwiOwogICAgICBmbGV4LnN0eWxlID0gImRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcCI7CiAgICAgIAogICAgICAvLyBpbmplY3QgdGhlIGNvbG91cnBpY2tlciBIVE1MIGNvbnRhaW5lciBpbnRvIHRoZSBmbGV4Ym94CiAgICAgIGlmICh4LmhpZ2hsaWdodC5keW5hbWljKSB7CiAgICAgICAgdmFyIHBpY2tlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIAogICAgICAgIHZhciBwaWNrZXJJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICAgICAgcGlja2VySW5wdXQuaWQgPSBlbC5pZCArICItY29sb3VycGlja2VyIjsKICAgICAgICBwaWNrZXJJbnB1dC5wbGFjZWhvbGRlciA9ICJhc2Rhc2QiOwogICAgICAgIAogICAgICAgIHZhciBwaWNrZXJMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CiAgICAgICAgcGlja2VyTGFiZWwuZm9yID0gcGlja2VySW5wdXQuaWQ7CiAgICAgICAgcGlja2VyTGFiZWwuaW5uZXJIVE1MID0gIkJydXNoIGNvbG9yJm5ic3A7Jm5ic3A7IjsKICAgICAgICAKICAgICAgICBwaWNrZXJEaXYuYXBwZW5kQ2hpbGQocGlja2VyTGFiZWwpOwogICAgICAgIHBpY2tlckRpdi5hcHBlbmRDaGlsZChwaWNrZXJJbnB1dCk7CiAgICAgICAgZmxleC5hcHBlbmRDaGlsZChwaWNrZXJEaXYpOwogICAgICB9CiAgICAgIAogICAgICAvLyBpbmplY3Qgc2VsZWN0aXplIEhUTUwgY29udGFpbmVycyAob25lIGZvciBldmVyeSBjcm9zc3RhbGsgZ3JvdXApCiAgICAgIGlmICh4LnNlbGVjdGl6ZSkgewogICAgICAgIHZhciBpZHMgPSBPYmplY3Qua2V5cyh4LnNlbGVjdGl6ZSk7CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIGNvbnRhaW5lci5pZCA9IGlkc1tpXTsKICAgICAgICAgIGNvbnRhaW5lci5zdHlsZSA9ICJ3aWR0aDogODAlOyBoZWlnaHQ6IDEwJSI7CiAgICAgICAgICBjb250YWluZXIuY2xhc3MgPSAiZm9ybS1ncm91cCBjcm9zc3RhbGstaW5wdXQtcGxvdGx5LWhpZ2hsaWdodCI7CiAgICAgICAgICAKICAgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CiAgICAgICAgICBsYWJlbC5mb3IgPSBpZHNbaV07CiAgICAgICAgICBsYWJlbC5pbm5lckhUTUwgPSB4LnNlbGVjdGl6ZVtpZHNbaV1dLmdyb3VwOwogICAgICAgICAgbGFiZWwuY2xhc3MgPSAiY29udHJvbC1sYWJlbCI7CiAgICAgICAgICAKICAgICAgICAgIHZhciBzZWxlY3REaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKICAgICAgICAgIHNlbGVjdC5tdWx0aXBsZSA9IHRydWU7CiAgICAgICAgICAKICAgICAgICAgIHNlbGVjdERpdi5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsKTsKICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxlY3REaXYpOwogICAgICAgICAgZmxleC5hcHBlbmRDaGlsZChjb250YWluZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLy8gZmluYWxseSwgaW5zZXJ0IHRoZSBmbGV4Ym94IGluc2lkZSB0aGUgaHRtbHdpZGdldCBjb250YWluZXIsCiAgICAgIC8vIGJ1dCBiZWZvcmUgdGhlIHBsb3RseSBncmFwaCBkaXYKICAgICAgZ3JhcGhEaXYucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoZmxleCwgZ3JhcGhEaXYpOwogICAgICAKICAgICAgaWYgKHguaGlnaGxpZ2h0LmR5bmFtaWMpIHsKICAgICAgICB2YXIgcGlja2VyID0gJCgiIyIgKyBwaWNrZXJJbnB1dC5pZCk7CiAgICAgICAgdmFyIGNvbG9ycyA9IHguaGlnaGxpZ2h0LmNvbG9yIHx8IFtdOwogICAgICAgIC8vIFRPRE86IGxldCB1c2VycyBzcGVjaWZ5IG9wdGlvbnM/CiAgICAgICAgdmFyIG9wdHMgPSB7CiAgICAgICAgICB2YWx1ZTogY29sb3JzWzBdLAogICAgICAgICAgc2hvd0NvbG91cjogImJvdGgiLAogICAgICAgICAgcGFsZXR0ZTogImxpbWl0ZWQiLAogICAgICAgICAgYWxsb3dlZENvbHM6IGNvbG9ycy5qb2luKCIgIiksCiAgICAgICAgICB3aWR0aDogIjIwJSIsCiAgICAgICAgICBoZWlnaHQ6ICIxMCUiCiAgICAgICAgfTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKHtjaGFuZ2VEZWxheTogMH0pOwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoInNldHRpbmdzIiwgb3B0cyk7CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcigidmFsdWUiLCBvcHRzLnZhbHVlKTsKICAgICAgICAvLyBpbmZvcm0gY3Jvc3N0YWxrIGFib3V0IGEgY2hhbmdlIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBjb2xvdXIKICAgICAgICB2YXIgZ3JwcyA9IHguaGlnaGxpZ2h0LmN0R3JvdXBzIHx8IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3Jwcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgY3Jvc3N0YWxrLmdyb3VwKGdycHNbaV0pLnZhcigncGxvdGx5U2VsZWN0aW9uQ29sb3VyJykKICAgICAgICAgICAgLnNldChwaWNrZXIuY29sb3VycGlja2VyKCd2YWx1ZScpKTsKICAgICAgICB9CiAgICAgICAgcGlja2VyLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3Jwcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBjcm9zc3RhbGsuZ3JvdXAoZ3Jwc1tpXSkudmFyKCdwbG90bHlTZWxlY3Rpb25Db2xvdXInKQogICAgICAgICAgICAgIC5zZXQocGlja2VyLmNvbG91cnBpY2tlcigndmFsdWUnKSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gaWYgbm8gcGxvdCBleGlzdHMgeWV0LCBjcmVhdGUgb25lIHdpdGggYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24KICAgIGlmICghaW5zdGFuY2UucGxvdGx5KSB7CiAgICAgIAogICAgICB2YXIgcGxvdCA9IFBsb3RseS5wbG90KGdyYXBoRGl2LCB4KTsKICAgICAgaW5zdGFuY2UucGxvdGx5ID0gdHJ1ZTsKICAgICAgaW5zdGFuY2UuYXV0b3NpemUgPSB4LmxheW91dC5hdXRvc2l6ZSB8fCB0cnVlOwogICAgICBpbnN0YW5jZS53aWR0aCA9IHgubGF5b3V0LndpZHRoOwogICAgICBpbnN0YW5jZS5oZWlnaHQgPSB4LmxheW91dC5oZWlnaHQ7CiAgICAgIAogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIC8vIG5ldyB4IGRhdGEgY291bGQgY29udGFpbiBhIG5ldyBoZWlnaHQvd2lkdGguLi4KICAgICAgLy8gYXR0YWNoIHRvIGluc3RhbmNlIHNvIHRoYXQgcmVzaXplIGxvZ2ljIGtub3dzIGFib3V0IHRoZSBuZXcgc2l6ZQogICAgICBpbnN0YW5jZS53aWR0aCA9IHgubGF5b3V0LndpZHRoIHx8IGluc3RhbmNlLndpZHRoOwogICAgICBpbnN0YW5jZS5oZWlnaHQgPSB4LmxheW91dC5oZWlnaHQgfHwgaW5zdGFuY2UuaGVpZ2h0OwogICAgICAKICAgICAgLy8gdGhpcyBpcyBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIFBsb3RseS5uZXdQbG90KCksIGJ1dCBhdm9pZHMgY3JlYXRpbmcgCiAgICAgIC8vIGEgbmV3IHdlYmdsIGNvbnRleHQKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Bsb3RseS9wbG90bHkuanMvYmxvYi8yYjI0ZjlkZWY5MDE4MzFlNjEyODIwNzZjZjNmODM1NTk4ZDU2ZjBlL3NyYy9wbG90X2FwaS9wbG90X2FwaS5qcyNMNTMxLUw1MzIKCiAgICAgIC8vIFRPRE86IHJlc3RvcmUgY3Jvc3N0YWxrIHNlbGVjdGlvbnM/CiAgICAgIFBsb3RseS5wdXJnZShncmFwaERpdik7CiAgICAgIC8vIFRPRE86IHdoeSBpcyB0aGlzIG5lY2Vzc2FyeSB0byBnZXQgY3Jvc3N0YWxrIHdvcmtpbmc/CiAgICAgIGdyYXBoRGl2LmRhdGEgPSB1bmRlZmluZWQ7CiAgICAgIGdyYXBoRGl2LmxheW91dCA9IHVuZGVmaW5lZDsKICAgICAgdmFyIHBsb3QgPSBQbG90bHkucGxvdChncmFwaERpdiwgeCk7CiAgICB9CiAgICAKICAgIC8vIFRyaWdnZXIgcGxvdGx5LmpzIGNhbGxzIGRlZmluZWQgdmlhIGBwbG90bHlQcm94eSgpYAogICAgcGxvdC50aGVuKGZ1bmN0aW9uKCkgewogICAgICBpZiAoSFRNTFdpZGdldHMuc2hpbnlNb2RlKSB7CiAgICAgICAgU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoInBsb3RseS1jYWxscyIsIGZ1bmN0aW9uKG1zZykgewogICAgICAgICAgdmFyIGdkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobXNnLmlkKTsKICAgICAgICAgIGlmICghZ2QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBmaW5kIHBsb3RseSBncmFwaCB3aXRoIGlkOiAiICsgbXNnLmlkKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIFRoaXMgaXNuJ3QgYW4gb2ZmaWNpYWwgcGxvdGx5LmpzIG1ldGhvZCwgYnV0IGl0J3MgdGhlIG9ubHkgY3VycmVudCB3YXkgdG8gCiAgICAgICAgICAvLyBjaGFuZ2UganVzdCB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHBsb3QgCiAgICAgICAgICAvLyBodHRwczovL2NvbW11bml0eS5wbG90Lmx5L3QvdXBkYXRlLWNvbmZpZy1mdW5jdGlvbi85MDU3CiAgICAgICAgICBpZiAobXNnLm1ldGhvZCA9PSAicmVjb25maWciKSB7CiAgICAgICAgICAgIFBsb3RseS5yZWFjdChnZCwgZ2QuZGF0YSwgZ2QubGF5b3V0LCBtc2cuYXJncyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghUGxvdGx5W21zZy5tZXRob2RdKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXRob2QgIiArIG1zZy5tZXRob2QpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGFyZ3MgPSBbZ2RdLmNvbmNhdChtc2cuYXJncyk7CiAgICAgICAgICBQbG90bHlbbXNnLm1ldGhvZF0uYXBwbHkobnVsbCwgYXJncyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgCiAgICAgIC8vIHBsb3RseSdzIG1hcGJveCBBUEkgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBzZXR0aW5nIGJvdW5kaW5nIGJveGVzCiAgICAgIC8vIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZml0Ym91bmRzLwogICAgICAvLyBzbyB3ZSBkbyB0aGlzIG1hbnVhbGx5Li4uCiAgICAgIC8vIFRPRE86IG1ha2Ugc3VyZSB0aGlzIHRyaWdnZXJzIG9uIGEgcmVkcmF3IGFuZCByZWxheW91dCBhcyB3ZWxsIGFzIG9uIGluaXRpYWwgZHJhdwogICAgICB2YXIgbWFwYm94SURzID0gZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLm1hcGJveCB8fCBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBib3hJRHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgaWQgPSBtYXBib3hJRHNbaV07CiAgICAgICAgdmFyIG1hcE9wdHMgPSB4LmxheW91dFtpZF0gfHwge307CiAgICAgICAgdmFyIGFyZ3MgPSBtYXBPcHRzLl9maXRCb3VuZHMgfHwge307CiAgICAgICAgaWYgKCFhcmdzKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdmFyIG1hcE9iaiA9IGdyYXBoRGl2Ll9mdWxsTGF5b3V0W2lkXS5fc3VicGxvdC5tYXA7CiAgICAgICAgbWFwT2JqLmZpdEJvdW5kcyhhcmdzLmJvdW5kcywgYXJncy5vcHRpb25zKTsKICAgICAgfQogICAgICAKICAgIH0pOwogICAgCiAgICAvLyBBdHRhY2ggYXR0cmlidXRlcyAoZS5nLiwgImtleSIsICJ6IikgdG8gcGxvdGx5IGV2ZW50IGRhdGEKICAgIGZ1bmN0aW9uIGV2ZW50RGF0YVdpdGhLZXkoZXZlbnREYXRhKSB7CiAgICAgIGlmIChldmVudERhdGEgPT09IHVuZGVmaW5lZCB8fCAhZXZlbnREYXRhLmhhc093blByb3BlcnR5KCJwb2ludHMiKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBldmVudERhdGEucG9pbnRzLm1hcChmdW5jdGlvbihwdCkgewogICAgICAgIHZhciBvYmogPSB7CiAgICAgICAgICBjdXJ2ZU51bWJlcjogcHQuY3VydmVOdW1iZXIsIAogICAgICAgICAgcG9pbnROdW1iZXI6IHB0LnBvaW50TnVtYmVyLCAKICAgICAgICAgIHg6IHB0LngsCiAgICAgICAgICB5OiBwdC55CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICAvLyBJZiAneicgaXMgcmVwb3J0ZWQgd2l0aCB0aGUgZXZlbnQgZGF0YSwgdGhlbiB1c2UgaXQhCiAgICAgICAgaWYgKHB0Lmhhc093blByb3BlcnR5KCJ6IikpIHsKICAgICAgICAgIG9iai56ID0gcHQuejsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHB0Lmhhc093blByb3BlcnR5KCJjdXN0b21kYXRhIikpIHsKICAgICAgICAgIG9iai5jdXN0b21kYXRhID0gcHQuY3VzdG9tZGF0YTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogCiAgICAgICAgICBUTDtEUjogKEkgdGhpbmspIHdlIGhhdmUgdG8gc2VsZWN0IHRoZSBncmFwaCBkaXYgKGFnYWluKSB0byBhdHRhY2gga2V5cy4uLgogICAgICAgICAgCiAgICAgICAgICBXaHk/IFJlbWVtYmVyIHRoYXQgY3Jvc3N0YWxrIHdpbGwgZHluYW1pY2FsbHkgYWRkL2RlbGV0ZSB0cmFjZXMgCiAgICAgICAgICAoc2VlIHRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlU2VsZWN0aW9uKCkgYmVsb3cpCiAgICAgICAgICBGb3IgdGhpcyByZWFzb24sIHdlIGNhbid0IHNpbXBseSBncmFiIGtleXMgZnJvbSB4LmRhdGEgKGxpa2Ugd2UgZGlkIHByZXZpb3VzbHkpCiAgICAgICAgICBNb3Jlb3Zlciwgd2UgY2FuJ3QgdXNlIF9mdWxsRGF0YSwgc2luY2UgdGhhdCBkb2Vzbid0IGluY2x1ZGUgCiAgICAgICAgICB1bm9mZmljaWFsIGF0dHJpYnV0ZXMuIEl0J3MgdHJ1ZSB0aGF0IGNsaWNrL2hvdmVyIGV2ZW50cyBmaXJlIHdpdGggCiAgICAgICAgICBwdC5kYXRhLCBidXQgZHJhZyBldmVudHMgZG9uJ3QuLi4KICAgICAgICAqLwogICAgICAgIHZhciBnZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsLmlkKTsKICAgICAgICB2YXIgdHJhY2UgPSBnZC5kYXRhW3B0LmN1cnZlTnVtYmVyXTsKICAgICAgICAKICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgdmFyIGF0dHJzVG9BdHRhY2ggPSBbImtleSJdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBzaW1wbGUga2V5cyBmaXJlIHRoZSB3aG9sZSBrZXkKICAgICAgICAgIG9iai5rZXkgPSB0cmFjZS5rZXk7CiAgICAgICAgICB2YXIgYXR0cnNUb0F0dGFjaCA9IFtdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzVG9BdHRhY2gubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBhdHRyID0gdHJhY2VbYXR0cnNUb0F0dGFjaFtpXV07CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyKSkgewogICAgICAgICAgICAgIC8vIHBvaW50TnVtYmVyIGNhbiBiZSBhbiBhcnJheSAoZS5nLiwgaGVhdG1hcHMpCiAgICAgICAgICAgICAgLy8gVE9ETzogY2FuIHBvaW50TnVtYmVyIGJlIDNEPwogICAgICAgICAgICAgIG9ialthdHRyc1RvQXR0YWNoW2ldXSA9IHR5cGVvZiBwdC5wb2ludE51bWJlciA9PT0gIm51bWJlciIgPyAKICAgICAgICAgICAgICAgIGF0dHJbcHQucG9pbnROdW1iZXJdIDogYXR0cltwdC5wb2ludE51bWJlclswXV1bcHQucG9pbnROdW1iZXJbMV1dOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqOwogICAgICB9KTsKICAgIH0KICAgIAogICAgCiAgICB2YXIgbGVnZW5kRXZlbnREYXRhID0gZnVuY3Rpb24oZCkgewogICAgICAvLyBpZiBsZWdlbmRncm91cCBpcyBub3QgcmVsZXZhbnQganVzdCByZXR1cm4gdGhlIHRyYWNlCiAgICAgIHZhciB0cmFjZSA9IGQuZGF0YVtkLmN1cnZlTnVtYmVyXTsKICAgICAgaWYgKCF0cmFjZS5sZWdlbmRncm91cCkgcmV0dXJuIHRyYWNlOwogICAgICAKICAgICAgLy8gaWYgbGVnZW5kZ3JvdXAgd2FzIHNwZWNpZmllZCwgcmV0dXJuIGFsbCB0cmFjZXMgdGhhdCBtYXRjaCB0aGUgZ3JvdXAKICAgICAgdmFyIGxlZ2VuZGdycHMgPSBkLmRhdGEubWFwKGZ1bmN0aW9uKHRyYWNlKXsgcmV0dXJuIHRyYWNlLmxlZ2VuZGdyb3VwOyB9KTsKICAgICAgdmFyIHRyYWNlcyA9IFtdOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbGVnZW5kZ3Jwcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChsZWdlbmRncnBzW2ldID09IHRyYWNlLmxlZ2VuZGdyb3VwKSB7CiAgICAgICAgICB0cmFjZXMucHVzaChkLmRhdGFbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgcmV0dXJuIHRyYWNlczsKICAgIH07CgogICAgCiAgICAvLyBzZW5kIHVzZXIgaW5wdXQgZXZlbnQgZGF0YSB0byBzaGlueQogICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSkgewogICAgICAKICAgICAgLy8gU29tZSBldmVudHMgY2xlYXIgb3RoZXIgaW5wdXQgdmFsdWVzCiAgICAgIC8vIFRPRE86IGFsd2F5cyByZWdpc3RlciB0aGVzZT8KICAgICAgdmFyIGV2ZW50Q2xlYXJNYXAgPSB7CiAgICAgICAgcGxvdGx5X2Rlc2VsZWN0OiBbInBsb3RseV9zZWxlY3RlZCIsICJwbG90bHlfc2VsZWN0aW5nIiwgInBsb3RseV9icnVzaGVkIiwgInBsb3RseV9icnVzaGluZyIsICJwbG90bHlfY2xpY2siXSwKICAgICAgICBwbG90bHlfdW5ob3ZlcjogWyJwbG90bHlfaG92ZXIiXSwKICAgICAgICBwbG90bHlfZG91YmxlY2xpY2s6IFsicGxvdGx5X2NsaWNrIl0KICAgICAgfTsKICAgIAogICAgICBPYmplY3Qua2V5cyhldmVudENsZWFyTWFwKS5tYXAoZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgZ3JhcGhEaXYub24oZXZ0LCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBpbnB1dHNUb0NsZWFyID0gZXZlbnRDbGVhck1hcFtldnRdOwogICAgICAgICAgaW5wdXRzVG9DbGVhci5tYXAoZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShpbnB1dCArICItIiArIHguc291cmNlLCBudWxsLCB7cHJpb3JpdHk6ICJldmVudCJ9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgCiAgICAgIHZhciBldmVudERhdGFGdW5jdGlvbk1hcCA9IHsKICAgICAgICBwbG90bHlfY2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X2hvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIHBsb3RseV91bmhvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIC8vIElmICdwbG90bHlfc2VsZWN0ZWQnIGhhcyBhbHJlYWR5IGJlZW4gZmlyZWQsIGFuZCB5b3UgY2xpY2sKICAgICAgICAvLyBvbiB0aGUgcGxvdCBhZnRlcndhcmRzLCB0aGlzIGV2ZW50IGZpcmVzIGB1bmRlZmluZWRgPyE/CiAgICAgICAgLy8gVGhhdCBtaWdodCBiZSBjb25zaWRlcmVkIGEgcGxvdGx5LmpzIGJ1ZywgYnV0IGl0IGRvZXNuJ3QgbWFrZSAKICAgICAgICAvLyBzZW5zZSBmb3IgdGhpcyBpbnB1dCBjaGFuZ2UgdG8gb2NjdXIgaWYgYGRgIGlzIGZhbHN5IGJlY2F1c2UsCiAgICAgICAgLy8gZXZlbiBpbiB0aGUgZW1wdHkgc2VsZWN0aW9uIGNhc2UsIGBkYCBpcyB0cnV0aHkgKGFuIG9iamVjdCksCiAgICAgICAgLy8gYW5kIHRoZSAncGxvdGx5X2Rlc2VsZWN0JyBldmVudCB3aWxsIHJlc2V0IHRoaXMgaW5wdXQKICAgICAgICBwbG90bHlfc2VsZWN0ZWQ6IGZ1bmN0aW9uKGQpIHsgaWYgKGQpIHsgcmV0dXJuIGV2ZW50RGF0YVdpdGhLZXkoZCk7IH0gfSwKICAgICAgICBwbG90bHlfc2VsZWN0aW5nOiBmdW5jdGlvbihkKSB7IGlmIChkKSB7IHJldHVybiBldmVudERhdGFXaXRoS2V5KGQpOyB9IH0sCiAgICAgICAgcGxvdGx5X2JydXNoZWQ6IGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIGlmIChkKSB7IHJldHVybiBkLnJhbmdlID8gZC5yYW5nZSA6IGQubGFzc29Qb2ludHM7IH0KICAgICAgICB9LAogICAgICAgIHBsb3RseV9icnVzaGluZzogZnVuY3Rpb24oZCkgewogICAgICAgICAgaWYgKGQpIHsgcmV0dXJuIGQucmFuZ2UgPyBkLnJhbmdlIDogZC5sYXNzb1BvaW50czsgfQogICAgICAgIH0sCiAgICAgICAgcGxvdGx5X2xlZ2VuZGNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2NsaWNrYW5ub3RhdGlvbjogZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5mdWxsQW5ub3RhdGlvbiB9CiAgICAgIH07CiAgICAgIAogICAgICB2YXIgcmVnaXN0ZXJTaGlueVZhbHVlID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB2YXIgZXZlbnREYXRhUHJlUHJvY2Vzc29yID0gZXZlbnREYXRhRnVuY3Rpb25NYXBbZXZlbnRdIHx8IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQgPyBkIDogZWwuaWQgfTsKICAgICAgICAvLyBzb21lIGV2ZW50cyBhcmUgdW5pcXVlIHRvIHRoZSBSIHBhY2thZ2UKICAgICAgICB2YXIgcGxvdGx5SlNldmVudCA9IChldmVudCA9PSAicGxvdGx5X2JydXNoZWQiKSA/ICJwbG90bHlfc2VsZWN0ZWQiIDogKGV2ZW50ID09ICJwbG90bHlfYnJ1c2hpbmciKSA/ICJwbG90bHlfc2VsZWN0aW5nIiA6IGV2ZW50OwogICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBldmVudAogICAgICAgIGdyYXBoRGl2Lm9uKHBsb3RseUpTZXZlbnQsIGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIFNoaW55LnNldElucHV0VmFsdWUoCiAgICAgICAgICAgIGV2ZW50ICsgIi0iICsgeC5zb3VyY2UsCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVByZVByb2Nlc3NvcihkKSksCiAgICAgICAgICAgIHtwcmlvcml0eTogImV2ZW50In0KICAgICAgICAgICk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIAogICAgICB2YXIgc2hpbnlFdmVudHMgPSB4LnNoaW55RXZlbnRzIHx8IFtdOwogICAgICBzaGlueUV2ZW50cy5tYXAocmVnaXN0ZXJTaGlueVZhbHVlKTsKICAgIH0KICAgIAogICAgLy8gR2l2ZW4gYW4gYXJyYXkgb2Yge2N1cnZlTnVtYmVyOiB4LCBwb2ludE51bWJlcjogeX0gb2JqZWN0cywKICAgIC8vIHJldHVybiBhIGhhc2ggb2YgewogICAgLy8gICBzZXQxOiB7dmFsdWU6IFtrZXkxLCBrZXkyLCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfSwgCiAgICAvLyAgIHNldDI6IHt2YWx1ZTogW2tleTMsIGtleTQsIC4uLl0sIF9pc1NpbXBsZUtleTogZmFsc2V9CiAgICAvLyB9CiAgICBmdW5jdGlvbiBwb2ludHNUb0tleXMocG9pbnRzKSB7CiAgICAgIHZhciBrZXlzQnlTZXQgPSB7fTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAKICAgICAgICB2YXIgdHJhY2UgPSBncmFwaERpdi5kYXRhW3BvaW50c1tpXS5jdXJ2ZU51bWJlcl07CiAgICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgIXRyYWNlLnNldCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHNldCBkZWZhdWx0cyBmb3IgdGhpcyBrZXlTZXQKICAgICAgICAvLyBub3RlIHRoYXQgd2UgZG9uJ3QgdHJhY2sgdGhlIG5lc3RlZCBwcm9wZXJ0eSAoeWV0KSBzaW5jZSB3ZSBhbHdheXMgCiAgICAgICAgLy8gZW1pdCB0aGUgdW5pb24gLS0gaHR0cDovL2Nwc2lldmVydC5naXRodWIuaW8vdGFsa3MvMjAxNjEyMTJiLyMyMQogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdID0ga2V5c0J5U2V0W3RyYWNlLnNldF0gfHwgewogICAgICAgICAgdmFsdWU6IFtdLAogICAgICAgICAgX2lzU2ltcGxlS2V5OiB0cmFjZS5faXNTaW1wbGVLZXkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIFVzZSBwb2ludE51bWJlciBieSBkZWZhdWx0LCBidXQgYWdncmVnYXRlZCB0cmFjZXMgc2hvdWxkIGVtaXQgcG9pbnROdW1iZXJzCiAgICAgICAgdmFyIHB0TnVtID0gcG9pbnRzW2ldLnBvaW50TnVtYmVyOwogICAgICAgIHZhciBoYXNQdE51bSA9IHR5cGVvZiBwdE51bSA9PT0gIm51bWJlciI7CiAgICAgICAgdmFyIHB0TnVtID0gaGFzUHROdW0gPyBwdE51bSA6IHBvaW50c1tpXS5wb2ludE51bWJlcnM7CiAgICAgICAgCiAgICAgICAgLy8gc2VsZWN0aW5nIGEgcG9pbnQgb2YgYSAic2ltcGxlIiB0cmFjZSBtZWFuczogc2VsZWN0IHRoZSAKICAgICAgICAvLyBlbnRpcmUga2V5IGF0dGFjaGVkIHRvIHRoaXMgdHJhY2UsIHdoaWNoIGlzIHVzZWZ1bCBmb3IsCiAgICAgICAgLy8gc2F5IGNsaWNraW5nIG9uIGEgZml0dGVkIGxpbmUgdG8gc2VsZWN0IGNvcnJlc3BvbmRpbmcgb2JzZXJ2YXRpb25zIAogICAgICAgIHZhciBrZXkgPSB0cmFjZS5faXNTaW1wbGVLZXkgPyB0cmFjZS5rZXkgOiBBcnJheS5pc0FycmF5KHB0TnVtKSA/IHB0TnVtLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIHRyYWNlLmtleVtpZHhdOyB9KSA6IHRyYWNlLmtleVtwdE51bV07CiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDg2NTAyNS9tZXJnZS1mbGF0dGVuLWFuLWFycmF5LW9mLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgdmFyIGtleUZsYXQgPSB0cmFjZS5faXNOZXN0ZWRLZXkgPyBbXS5jb25jYXQuYXBwbHkoW10sIGtleSkgOiBrZXk7CiAgICAgICAgCiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHRvIG9ubHkgYWRkIG5ldyB2YWx1ZXM/CiAgICAgICAga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUgPSBrZXlzQnlTZXRbdHJhY2Uuc2V0XS52YWx1ZS5jb25jYXQoa2V5RmxhdCk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBrZXlzQnlTZXQ7CiAgICB9CiAgICAKICAgIAogICAgeC5oaWdobGlnaHQuY29sb3IgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgIC8vIG1ha2Ugc3VyZSBoaWdobGlnaHQgY29sb3IgaXMgYW4gYXJyYXkKICAgIGlmICghQXJyYXkuaXNBcnJheSh4LmhpZ2hsaWdodC5jb2xvcikpIHsKICAgICAgeC5oaWdobGlnaHQuY29sb3IgPSBbeC5oaWdobGlnaHQuY29sb3JdOwogICAgfQoKICAgIHZhciB0cmFjZU1hbmFnZXIgPSBuZXcgVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCB4LmhpZ2hsaWdodCk7CgogICAgLy8gR2F0aGVyIGFsbCAqdW5pcXVlKiBzZXRzLgogICAgdmFyIGFsbFNldHMgPSBbXTsKICAgIGZvciAodmFyIGN1cnZlSWR4ID0gMDsgY3VydmVJZHggPCB4LmRhdGEubGVuZ3RoOyBjdXJ2ZUlkeCsrKSB7CiAgICAgIHZhciBuZXdTZXQgPSB4LmRhdGFbY3VydmVJZHhdLnNldDsKICAgICAgaWYgKG5ld1NldCkgewogICAgICAgIGlmIChhbGxTZXRzLmluZGV4T2YobmV3U2V0KSA9PT0gLTEpIHsKICAgICAgICAgIGFsbFNldHMucHVzaChuZXdTZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVycyBmb3IgYWxsIHNldHMKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsU2V0cy5sZW5ndGg7IGkrKykgewogICAgICAKICAgICAgdmFyIHNldCA9IGFsbFNldHNbaV07CiAgICAgIHZhciBzZWxlY3Rpb24gPSBuZXcgY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShzZXQpOwogICAgICB2YXIgZmlsdGVyID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoc2V0KTsKICAgICAgCiAgICAgIHZhciBmaWx0ZXJDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVGaWx0ZXIoc2V0LCBlLnZhbHVlKTsKICAgICAgfTsKICAgICAgZmlsdGVyLm9uKCJjaGFuZ2UiLCBmaWx0ZXJDaGFuZ2UpOwogICAgICAKICAgICAgCiAgICAgIHZhciBzZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgCiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgJ3Bsb3RseV9zZWxlY3RlZCcgbm93IGZpcmluZyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgLy8gcG9pbnRzIChpbiBhZGRpdGlvbiB0byBuZXcgb25lcykgd2hlbiBob2xkaW5nIHNoaWZ0IGtleS4gSW4gb3VyIGNhc2UsCiAgICAgICAgLy8gd2UganVzdCB3YW50IHRoZSBuZXcga2V5cyAKICAgICAgICBpZiAoeC5oaWdobGlnaHQub24gPT09ICJwbG90bHlfc2VsZWN0ZWQiICYmIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCkgewogICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4NzUxOC9ob3ctdG8tZ2V0LXRoZS1kaWZmZXJlbmNlLWJldHdlZW4tdHdvLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZGlmZiA9IGZ1bmN0aW9uKGEpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaSkge3JldHVybiBhLmluZGV4T2YoaSkgPCAwO30pOwogICAgICAgICAgfTsKICAgICAgICAgIGUudmFsdWUgPSBlLnZhbHVlLmRpZmYoZS5vbGRWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGFycmF5IG9mICJldmVudCBvYmplY3RzIiB0cmFja2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICAvLyB0aGlzIGlzIHVzZWQgdG8gYXZvaWQgYWRkaW5nIHJlZHVuZGFudCBzZWxlY3Rpb25zCiAgICAgICAgdmFyIHNlbGVjdGlvbkhpc3RvcnkgPSBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5IikuZ2V0KCkgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gQ29uc3RydWN0IGFuIGV2ZW50IG9iamVjdCAiZGVmaW5pbmciIHRoZSBjdXJyZW50IGV2ZW50LiAKICAgICAgICB2YXIgZXZlbnQgPSB7CiAgICAgICAgICByZWNlaXZlcklEOiB0cmFjZU1hbmFnZXIuZ2QuaWQsCiAgICAgICAgICBwbG90bHlTZWxlY3Rpb25Db2xvdXI6IGNyb3NzdGFsay5ncm91cChzZXQpLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkKICAgICAgICB9OwogICAgICAgIGV2ZW50W3NldF0gPSBlLnZhbHVlOwogICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgc21hcnRlciB3YXkgdG8gY2hlY2sgb2JqZWN0IGVxdWFsaXR5PwogICAgICAgIGlmIChzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhciBldiA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2VsID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0aW9uSGlzdG9yeVtpXSk7CiAgICAgICAgICAgIGlmIChzZWwgPT0gZXYpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWNjdW11bGF0ZSBoaXN0b3J5IGZvciBwZXJzaXN0ZW50IHNlbGVjdGlvbgogICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeSA9IFtldmVudF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdGlvbkhpc3RvcnkucHVzaChldmVudCk7CiAgICAgICAgfQogICAgICAgIGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5zZXQoc2VsZWN0aW9uSGlzdG9yeSk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0cmFjZXMsIGZyYW1lcywgYW5kIHRoZSBzZWxlY3RpemUgd2lkZ2V0CiAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIGUudmFsdWUpOwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3RpemUvc2VsZWN0aXplLmpzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpLm1kI21ldGhvZHNfaXRlbXMKICAgICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCB8fCBlLnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGVjdGl6ZS5jbGVhcih0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdGl6ZS5hZGRJdGVtcyhlLnZhbHVlLCB0cnVlKTsKICAgICAgICAgIHNlbGVjdGl6ZS5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZWxlY3Rpb24ub24oImNoYW5nZSIsIHNlbGVjdGlvbkNoYW5nZSk7CiAgICAgIAogICAgICAvLyBTZXQgYSBjcm9zc3RhbGsgdmFyaWFibGUgc2VsZWN0aW9uIHZhbHVlLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZQogICAgICB2YXIgdHVybk9uID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChlKSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0gcG9pbnRzVG9LZXlzKGUucG9pbnRzKTsKICAgICAgICAgIC8vIEtleXMgYXJlIGdyb3VwIG5hbWVzLCB2YWx1ZXMgYXJlIGFycmF5IG9mIHNlbGVjdGVkIGtleXMgZnJvbSBncm91cC4KICAgICAgICAgIGZvciAodmFyIHNldCBpbiBzZWxlY3RlZEtleXMpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkS2V5cy5oYXNPd25Qcm9wZXJ0eShzZXQpKSB7CiAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3RlZEtleXNbc2V0XS52YWx1ZSwge3NlbmRlcjogZWx9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKHguaGlnaGxpZ2h0LmRlYm91bmNlID4gMCkgewogICAgICAgIHR1cm5PbiA9IGRlYm91bmNlKHR1cm5PbiwgeC5oaWdobGlnaHQuZGVib3VuY2UpOwogICAgICB9CiAgICAgIGdyYXBoRGl2Lm9uKHguaGlnaGxpZ2h0Lm9uLCB0dXJuT24pOwogICAgICAKICAgICAgZ3JhcGhEaXYub24oeC5oaWdobGlnaHQub2ZmLCBmdW5jdGlvbiB0dXJuT2ZmKGUpIHsKICAgICAgICAvLyByZW1vdmUgYW55IHZpc3VhbCBjbHVlcwogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAvLyByZW1vdmUgYW55IHNlbGVjdGlvbiBoaXN0b3J5CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChudWxsKTsKICAgICAgICAvLyB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiBzZWxlY3Rpb24gdHJhY2VzCiAgICAgICAgc2VsZWN0aW9uLnNldChudWxsLCB7c2VuZGVyOiBlbH0pOwogICAgICB9KTsKICAgICAgICAgIAogICAgICAvLyByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBzZWxlY3RpemUgc28gdGhhdCB0aGVyZSBpcyBiaS1kaXJlY3Rpb25hbAogICAgICAvLyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHdpZGdldCBhbmQgZGlyZWN0IG1hbmlwdWxhdGlvbiBldmVudHMKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIHNlbGVjdGl6ZUlEID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpW2ldOwogICAgICAgIHZhciBpdGVtcyA9IHguc2VsZWN0aXplW3NlbGVjdGl6ZUlEXS5pdGVtczsKICAgICAgICB2YXIgZmlyc3QgPSBbe3ZhbHVlOiAiIiwgbGFiZWw6ICIoQWxsKSJ9XTsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIG9wdGlvbnM6IGZpcnN0LmNvbmNhdChpdGVtcyksCiAgICAgICAgICBzZWFyY2hGaWVsZDogImxhYmVsIiwKICAgICAgICAgIHZhbHVlRmllbGQ6ICJ2YWx1ZSIsCiAgICAgICAgICBsYWJlbEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgbWF4SXRlbXM6IDUwCiAgICAgICAgfTsKICAgICAgICB2YXIgc2VsZWN0ID0gJCgiIyIgKyBzZWxlY3RpemVJRCkuZmluZCgic2VsZWN0IilbMF07CiAgICAgICAgdmFyIHNlbGVjdGl6ZSA9ICQoc2VsZWN0KS5zZWxlY3RpemUob3B0cylbMF0uc2VsZWN0aXplOwogICAgICAgIC8vIE5PVEU6IHRoaXMgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gKmRpcmVjdGx5KiBhbHRlcmluZyAKICAgICAgICAvLyBkcm9wZG93biBpdGVtcwogICAgICAgIHNlbGVjdGl6ZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgY3VycmVudEl0ZW1zID0gdHJhY2VNYW5hZ2VyLmdyb3VwU2VsZWN0aW9uc1tzZXRdIHx8IFtdOwogICAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBzZWxlY3RpemUucmVtb3ZlSXRlbShjdXJyZW50SXRlbXNbaV0sIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBzZWxlY3RpemUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGlkeCkgeyAKICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtcy5pbmRleE9mKGlkeCkgPCAwOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgbmV3SXRlbXMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSXRlbSBoYXMgYmVlbiByZW1vdmVkLi4uCiAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgbG9naWMgd29uJ3Qgd29yayBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgcGFsZXR0ZSAKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIG51bGwpOwogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgc2VsZWN0aXplLml0ZW1zKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSAvLyBlbmQgb2Ygc2VsZWN0aW9uQ2hhbmdlCiAgICAKICB9IC8vIGVuZCBvZiByZW5kZXJWYWx1ZQp9KTsgLy8gZW5kIG9mIHdpZGdldCBkZWZpbml0aW9uCgovKioKICogQHBhcmFtIGdyYXBoRGl2IFRoZSBQbG90bHkgZ3JhcGggZGl2CiAqIEBwYXJhbSBoaWdobGlnaHQgQW4gb2JqZWN0IHdpdGggb3B0aW9ucyBmb3IgdXBkYXRpbmcgc2VsZWN0aW9uKHMpCiAqLwpmdW5jdGlvbiBUcmFjZU1hbmFnZXIoZ3JhcGhEaXYsIGhpZ2hsaWdodCkgewogIC8vIFRoZSBQbG90bHkgZ3JhcGggZGl2CiAgdGhpcy5nZCA9IGdyYXBoRGl2OwoKICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZGF0YS4KICAvLyBUT0RPOiB0cnkgdXNpbmcgTGliLmV4dGVuZEZsYXQoKSBhcyBkb25lIGluICAKICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgdGhpcy5vcmlnRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JhcGhEaXYuZGF0YSkpOwogIAogIC8vIGF2b2lkIGRvaW5nIHRoaXMgb3ZlciBhbmQgb3ZlcgogIHRoaXMub3JpZ09wYWNpdHkgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgIHRoaXMub3JpZ09wYWNpdHlbaV0gPSB0aGlzLm9yaWdEYXRhW2ldLm9wYWNpdHkgPT09IDAgPyAwIDogKHRoaXMub3JpZ0RhdGFbaV0ub3BhY2l0eSB8fCAxKTsKICB9CgogIC8vIGtleTogZ3JvdXAgbmFtZSwgdmFsdWU6IG51bGwgb3IgYXJyYXkgb2Yga2V5cyByZXByZXNlbnRpbmcgdGhlCiAgLy8gbW9zdCByZWNlbnRseSByZWNlaXZlZCBzZWxlY3Rpb24gZm9yIHRoYXQgZ3JvdXAuCiAgdGhpcy5ncm91cFNlbGVjdGlvbnMgPSB7fTsKICAKICAvLyBzZWxlY3Rpb24gcGFyYW1ldGVycyAoZS5nLiwgdHJhbnNpZW50IHZlcnN1cyBwZXJzaXN0ZW50IHNlbGVjdGlvbikKICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKfQoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewogIC8vIFRPRE86IFVuaG9vayBhbGwgZXZlbnQgaGFuZGxlcnMKfTsKClRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlRmlsdGVyID0gZnVuY3Rpb24oZ3JvdXAsIGtleXMpIHsKCiAgaWYgKHR5cGVvZihrZXlzKSA9PT0gInVuZGVmaW5lZCIgfHwga2V5cyA9PT0gbnVsbCkgewogICAgCiAgICB0aGlzLmdkLmRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ0RhdGEpKTsKICAgIAogIH0gZWxzZSB7CiAgCiAgICB2YXIgdHJhY2VzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHRyYWNlID0gdGhpcy5vcmlnRGF0YVtpXTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICAvLyBzdWJzZXRBcnJheUF0dHJzIGRvZXNuJ3QgbXV0YXRlIHRyYWNlIChpdCBtYWtlcyBhIG1vZGlmaWVkIGNsb25lKQogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgdHJhY2VzLnB1c2godHJhY2UpOwogICAgICB9CiAgICB9CiAgfQogIAogIHRoaXMuZ2QuZGF0YSA9IHRyYWNlczsKICBQbG90bHkucmVkcmF3KHRoaXMuZ2QpOwogIAogIC8vIE5PVEU6IHdlIHB1cnBvc2VseSBkbyBfbm90XyByZXN0b3JlIHNlbGVjdGlvbihzKSwgc2luY2Ugb24gZmlsdGVyLAogIC8vIGF4aXMgbGlrZWx5IHdpbGwgdXBkYXRlLCBjaGFuZ2luZyB0aGUgcGl4ZWwgLT4gZGF0YSBtYXBwaW5nLCBsZWFkaW5nIAogIC8vIHRvIGEgbGlrZWx5IG1pc21hdGNoIGluIHRoZSBicnVzaCBvdXRsaW5lIGFuZCBoaWdobGlnaHRlZCBtYXJrcwogIAp9OwoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihncm91cCwga2V5cykgewogIAogIGlmIChrZXlzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGtleXMpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5cyBhcmd1bWVudDsgbnVsbCBvciBhcnJheSBleHBlY3RlZCIpOwogIH0KICAKICAvLyBpZiBzZWxlY3Rpb24gaGFzIGJlZW4gY2xlYXJlZCwgb3IgaWYgdGhpcyBpcyB0cmFuc2llbnQKICAvLyBzZWxlY3Rpb24sIGRlbGV0ZSB0aGUgInNlbGVjdGlvbiB0cmFjZXMiCiAgdmFyIG5OZXdUcmFjZXMgPSB0aGlzLmdkLmRhdGEubGVuZ3RoIC0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgaWYgKGtleXMgPT09IG51bGwgfHwgIXRoaXMuaGlnaGxpZ2h0LnBlcnNpc3RlbnQgJiYgbk5ld1RyYWNlcyA+IDApIHsKICAgIHZhciB0cmFjZXNUb1JlbW92ZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdkLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXMuZ2QuZGF0YVtpXS5faXNDcm9zc3RhbGtUcmFjZSkgdHJhY2VzVG9SZW1vdmUucHVzaChpKTsKICAgIH0KICAgIFBsb3RseS5kZWxldGVUcmFjZXModGhpcy5nZCwgdHJhY2VzVG9SZW1vdmUpOwogICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdID0ga2V5czsKICB9IGVsc2UgewogICAgLy8gYWRkIHRvIHRoZSBncm91cFNlbGVjdGlvbiwgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgaXQKICAgIC8vIFRPRE86IGNhbiB0aGlzIGJlIHJlbW92ZWQ/CiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gPSB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gfHwgW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGsgPSBrZXlzW2ldOwogICAgICBpZiAodGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLmluZGV4T2YoaykgPCAwKSB7CiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLnB1c2goayk7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgaWYgKGtleXMgPT09IG51bGwpIHsKICAgIAogICAgUGxvdGx5LnJlc3R5bGUodGhpcy5nZCwgeyJvcGFjaXR5IjogdGhpcy5vcmlnT3BhY2l0eX0pOwogICAgCiAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA+PSAxKSB7CiAgICAKICAgIC8vIHBsYWNlaG9sZGVyIGZvciBuZXcgInNlbGVjdGlvbiB0cmFjZXMiCiAgICB2YXIgdHJhY2VzID0gW107CiAgICAvLyB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBSL2hpZ2hsaWdodC5SCiAgICB2YXIgc2VsZWN0aW9uQ29sb3VyID0gY3Jvc3N0YWxrLmdyb3VwKGdyb3VwKS52YXIoInBsb3RseVNlbGVjdGlvbkNvbG91ciIpLmdldCgpIHx8IAogICAgICB0aGlzLmhpZ2hsaWdodC5jb2xvclswXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvcGxvdGx5LmpzL3B1bGwvMTEzNiAKICAgICAgdmFyIHRyYWNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdkLmRhdGFbaV0pKTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIEdldCBzb3J0ZWQgYXJyYXkgb2YgbWF0Y2hpbmcgaW5kaWNlcyBpbiB0cmFjZS5rZXkKICAgICAgdmFyIG1hdGNoRnVuYyA9IGdldE1hdGNoRnVuYyh0cmFjZSk7CiAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hGdW5jKHRyYWNlLmtleSwga2V5cyk7CiAgICAgIAogICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gSWYgdGhpcyBpcyBhICJzaW1wbGUiIGtleSwgdGhhdCBtZWFucyBzZWxlY3QgdGhlIGVudGlyZSB0cmFjZQogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB0cmFjZSA9IHN1YnNldEFycmF5QXR0cnModHJhY2UsIG1hdGNoZXMpOwogICAgICAgIH0KICAgICAgICAvLyByZWFjaCBpbnRvIHRoZSBmdWxsIHRyYWNlIG9iamVjdCBzbyB3ZSBjYW4gcHJvcGVybHkgcmVmbGVjdCB0aGUgCiAgICAgICAgLy8gc2VsZWN0aW9uIGF0dHJpYnV0ZXMgaW4gZXZlcnkgdmlldwogICAgICAgIHZhciBkID0gdGhpcy5nZC5fZnVsbERhdGFbaV07CiAgICAgICAgCiAgICAgICAgLyogCiAgICAgICAgLyBSZWN1cnNpdmVseSBpbmhlcml0IHNlbGVjdGlvbiBhdHRyaWJ1dGVzIGZyb20gdmFyaW91cyBzb3VyY2VzLCAKICAgICAgICAvIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6CiAgICAgICAgLyAgKDEpIG9mZmljaWFsIHBsb3RseS5qcyBzZWxlY3RlZCBhdHRyaWJ1dGUKICAgICAgICAvICAoMikgaGlnaGxpZ2h0KHNlbGVjdGVkID0gYXR0cnNfc2VsZWN0ZWQoLi4uKSkKICAgICAgICAqLwogICAgICAgIC8vIFRPRE86IGl0IHdvdWxkIGJlIG5lYXQgdG8gaGF2ZSBhIGRyb3Bkb3duIHRvIGR5bmFtaWNhbGx5IHNwZWNpZnkgdGhlc2UhCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdHJhY2UsIHRoaXMuaGlnaGxpZ2h0LnNlbGVjdGVkKTsKICAgICAgICAKICAgICAgICAvLyBpZiBpdCBpcyBkZWZpbmVkLCBvdmVycmlkZSBjb2xvciB3aXRoIHRoZSAiZHluYW1pYyBicnVzaCBjb2xvciIiCiAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICB0cmFjZS5tYXJrZXIgPSB0cmFjZS5tYXJrZXIgfHwge307CiAgICAgICAgICB0cmFjZS5tYXJrZXIuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLm1hcmtlci5jb2xvciB8fCBkLm1hcmtlci5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgdHJhY2UubGluZSA9IHRyYWNlLmxpbmUgfHwge307CiAgICAgICAgICB0cmFjZS5saW5lLmNvbG9yID0gIHNlbGVjdGlvbkNvbG91ciB8fCB0cmFjZS5saW5lLmNvbG9yIHx8IGQubGluZS5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQudGV4dGZvbnQpIHsKICAgICAgICAgIHRyYWNlLnRleHRmb250ID0gdHJhY2UudGV4dGZvbnQgfHwge307CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udC5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UudGV4dGZvbnQuY29sb3IgfHwgZC50ZXh0Zm9udC5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQuZmlsbGNvbG9yKSB7CiAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgc2VsZWN0aW9uQ29sb3VyIGluaGVyaXQgYWxwaGEgZnJvbSB0aGUgZXhpc3RpbmcgZmlsbGNvbG9yPwogICAgICAgICAgdHJhY2UuZmlsbGNvbG9yID0gc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLmZpbGxjb2xvciB8fCBkLmZpbGxjb2xvcjsKICAgICAgICB9CiAgICAgICAgLy8gYXR0YWNoIGEgc2Vuc2libGUgbmFtZS9sZWdlbmRncm91cAogICAgICAgIHRyYWNlLm5hbWUgPSB0cmFjZS5uYW1lIHx8IGtleXMuam9pbigiPGJyIC8+Iik7CiAgICAgICAgdHJhY2UubGVnZW5kZ3JvdXAgPSB0cmFjZS5sZWdlbmRncm91cCB8fCBrZXlzLmpvaW4oIjxiciAvPiIpOwogICAgICAgIAogICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbWFwcGluZyBiZXR3ZWVuIHRoaXMgbmV3IHRyYWNlIGFuZCB0aGUgdHJhY2UgaXQgdGFyZ2V0cwogICAgICAgIC8vIChuZWNlc3NhcnkgZm9yIHVwZGF0aW5nIGZyYW1lcyB0byByZWZsZWN0IHRoZSBzZWxlY3Rpb24gdHJhY2VzKQogICAgICAgIHRyYWNlLl9vcmlnaW5hbEluZGV4ID0gaTsKICAgICAgICB0cmFjZS5fbmV3SW5kZXggPSB0aGlzLmdkLl9mdWxsRGF0YS5sZW5ndGggKyB0cmFjZXMubGVuZ3RoOwogICAgICAgIHRyYWNlLl9pc0Nyb3NzdGFsa1RyYWNlID0gdHJ1ZTsKICAgICAgICB0cmFjZXMucHVzaCh0cmFjZSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHRyYWNlcy5sZW5ndGggPiAwKSB7CiAgICAgIAogICAgICBQbG90bHkuYWRkVHJhY2VzKHRoaXMuZ2QsIHRyYWNlcykudGhlbihmdW5jdGlvbihnZCkgewogICAgICAgIC8vIGluY3JlbWVudGFsbHkgYWRkIHNlbGVjdGlvbiB0cmFjZXMgdG8gZnJhbWVzCiAgICAgICAgLy8gKHRoaXMgaXMgaGVhdmlseSBpbnNwaXJlZCBieSBQbG90bHkuUGxvdHMubW9kaWZ5RnJhbWVzKCkgCiAgICAgICAgLy8gaW4gc3JjL3Bsb3RzL3Bsb3RzLmpzKQogICAgICAgIHZhciBfaGFzaCA9IGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoOwogICAgICAgIHZhciBfZnJhbWVzID0gZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMgfHwgW107CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZnJhbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkZCB0byBfZnJhbWVzW2ldLnRyYWNlcyAqaWYqIHRoaXMgZnJhbWUgcmVmZXJlbmNlcyBzZWxlY3RlZCB0cmFjZShzKQogICAgICAgICAgdmFyIG5ld0luZGljZXMgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdHJhY2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHZhciB0ciA9IHRyYWNlc1tqXTsKICAgICAgICAgICAgaWYgKF9mcmFtZXNbaV0udHJhY2VzLmluZGV4T2YodHIuX29yaWdpbmFsSW5kZXgpID4gLTEpIHsKICAgICAgICAgICAgICBuZXdJbmRpY2VzLnB1c2godHIuX25ld0luZGV4KTsKICAgICAgICAgICAgICBfZnJhbWVzW2ldLnRyYWNlcy5wdXNoKHRyLl9uZXdJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gbm90aGluZyB0byBkby4uLgogICAgICAgICAgaWYgKG5ld0luZGljZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICB2YXIgY3RyID0gMDsKICAgICAgICAgIHZhciBuRnJhbWVUcmFjZXMgPSBfZnJhbWVzW2ldLmRhdGEubGVuZ3RoOwogICAgICAgICAgCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5GcmFtZVRyYWNlczsgaisrKSB7CiAgICAgICAgICAgIHZhciBmcmFtZVRyYWNlID0gX2ZyYW1lc1tpXS5kYXRhW2pdOwogICAgICAgICAgICBpZiAoIWZyYW1lVHJhY2Uua2V5IHx8IGZyYW1lVHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKGZyYW1lVHJhY2UpOwogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyhmcmFtZVRyYWNlLmtleSwga2V5cyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgaWYgKCF0cmFjZS5faXNTaW1wbGVLZXkpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKGZyYW1lVHJhY2UsIG1hdGNoZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgZCA9IGdkLl9mdWxsRGF0YVtuZXdJbmRpY2VzW2N0cl1dOwogICAgICAgICAgICAgIGlmIChkLm1hcmtlcikgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5tYXJrZXIgPSBkLm1hcmtlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5saW5lID0gZC5saW5lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZC50ZXh0Zm9udCkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS50ZXh0Zm9udCA9IGQudGV4dGZvbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGN0ciA9IGN0ciArIDE7CiAgICAgICAgICAgICAgX2ZyYW1lc1tpXS5kYXRhLnB1c2goZnJhbWVUcmFjZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gdXBkYXRlIGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoCiAgICAgICAgICBfaGFzaFtfZnJhbWVzW2ldLm5hbWVdID0gX2ZyYW1lc1tpXTsKICAgICAgICB9CiAgICAgIAogICAgICB9KTsKICAgICAgCiAgICAgIC8vIGRpbSB0cmFjZXMgdGhhdCBoYXZlIGEgc2V0IG1hdGNoaW5nIHRoZSBzZXQgb2Ygc2VsZWN0aW9uIHNldHMKICAgICAgdmFyIHRyYWNlc1RvRGltID0gW10sCiAgICAgICAgICBvcGFjaXRpZXMgPSBbXSwKICAgICAgICAgIHNldHMgPSBPYmplY3Qua2V5cyh0aGlzLmdyb3VwU2VsZWN0aW9ucyksCiAgICAgICAgICBuID0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgICAgICAgICAKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2YXIgb3BhY2l0eSA9IHRoaXMub3JpZ09wYWNpdHlbaV0gfHwgMTsKICAgICAgICAvLyBoYXZlIHdlIGFscmVhZHkgZGltbWVkIHRoaXMgdHJhY2U/IE9yIGlzIHRoaXMgZXZlbiB3b3J0aCBkb2luZz8KICAgICAgICBpZiAob3BhY2l0eSAhPT0gdGhpcy5nZC5fZnVsbERhdGFbaV0ub3BhY2l0eSB8fCB0aGlzLmhpZ2hsaWdodC5vcGFjaXR5RGltID09PSAxKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gaXMgdGhpcyBzZXQgYW4gZWxlbWVudCBvZiB0aGUgc2V0IG9mIHNlbGVjdGlvbiBzZXRzPwogICAgICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoZXMoc2V0cywgW3RoaXMuZ2QuZGF0YVtpXS5zZXRdKTsKICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIHsKICAgICAgICAgIHRyYWNlc1RvRGltLnB1c2goaSk7CiAgICAgICAgICBvcGFjaXRpZXMucHVzaChvcGFjaXR5ICogdGhpcy5oaWdobGlnaHQub3BhY2l0eURpbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZiAodHJhY2VzVG9EaW0ubGVuZ3RoID4gMCkgewogICAgICAgIFBsb3RseS5yZXN0eWxlKHRoaXMuZ2QsIHsib3BhY2l0eSI6IG9wYWNpdGllc30sIHRyYWNlc1RvRGltKTsKICAgICAgICAvLyB0dXJuIG9mZiB0aGUgc2VsZWN0ZWQvdW5zZWxlY3RlZCBBUEkKICAgICAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7InNlbGVjdGVkcG9pbnRzIjogbnVsbH0pOwogICAgICB9CiAgICAgIAogICAgfQogICAgCiAgfQp9OwoKLyogCk5vdGU6IGluIGFsbCBvZiB0aGVzZSBtYXRjaCBmdW5jdGlvbnMsIHdlIGFzc3VtZSBuZWVkbGVTZXQgKGkuZS4gdGhlIHNlbGVjdGVkIGtleXMpCmlzIGEgMUQgKG9yIGZsYXQpIGFycmF5LiBUaGUgcmVhbCBkaWZmZXJlbmNlIGlzIHRoZSBtZWFuaW5nIG9mIGhheXN0YWNrLgpmaW5kTWF0Y2hlcygpIGRvZXMgdGhlIHVzdWFsIHRoaW5nIHlvdSdkIGV4cGVjdCBmb3IgCmxpbmtlZCBicnVzaGluZyBvbiBhIHNjYXR0ZXJwbG90IG1hdHJpeC4gZmluZFNpbXBsZU1hdGNoZXMoKSByZXR1cm5zIGEgbWF0Y2ggaWZmIApoYXlzdGFjayBpcyBhIHN1YnNldCBvZiB0aGUgbmVlZGxlU2V0LiBmaW5kTmVzdGVkTWF0Y2hlcygpIHJldHVybnMgCiovCgpmdW5jdGlvbiBnZXRNYXRjaEZ1bmModHJhY2UpIHsKICByZXR1cm4gKHRyYWNlLl9pc05lc3RlZEtleSkgPyBmaW5kTmVzdGVkTWF0Y2hlcyA6IAogICAgKHRyYWNlLl9pc1NpbXBsZUtleSkgPyBmaW5kU2ltcGxlTWF0Y2hlcyA6IGZpbmRNYXRjaGVzOwp9CgovLyBmaW5kIG1hdGNoZXMgZm9yICJmbGF0IiBrZXlzCmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2hlcyA9IFtdOwogIGhheXN0YWNrLmZvckVhY2goZnVuY3Rpb24ob2JqLCBpKSB7CiAgICBpZiAob2JqID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKG9iaikgPj0gMCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgInNpbXBsZSIga2V5cwpmdW5jdGlvbiBmaW5kU2ltcGxlTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoID0gaGF5c3RhY2suZXZlcnkoZnVuY3Rpb24odmFsKSB7CiAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsKICB9KTsKICAvLyB5ZXMsIHRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2Ugb3RoZXIgdGhhbiBjb25mb3JtaW5nIAogIC8vIHRvIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgb3RoZXIgbWF0Y2ggZnVuY3Rpb25zCiAgcmV0dXJuIChtYXRjaCkgPyBbMF0gOiBbXQp9CgovLyBmaW5kIG1hdGNoZXMgZm9yIGEgIm5lc3RlZCIgaGF5c3RhY2sgKDJEIGFycmF5cykKZnVuY3Rpb24gZmluZE5lc3RlZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgdmFyIGhheSA9IGhheXN0YWNrW2ldOwogICAgdmFyIG1hdGNoID0gaGF5LmV2ZXJ5KGZ1bmN0aW9uKHZhbCkgeyAKICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBuZWVkbGVTZXQuaW5kZXhPZih2YWwpID49IDA7IAogICAgfSk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgbWF0Y2hlcy5wdXNoKGkpOwogICAgfQogIH0KICByZXR1cm4gbWF0Y2hlczsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gKAogICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmCiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZQogICk7Cn0KCmZ1bmN0aW9uIHN1YnNldEFycmF5QXR0cnMob2JqLCBpbmRpY2VzKSB7CiAgdmFyIG5ld09iaiA9IHt9OwogIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICB2YXIgdmFsID0gb2JqW2tdOwoKICAgIGlmIChrLmNoYXJBdCgwKSA9PT0gIl8iKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoayA9PT0gInRyYW5zZm9ybXMiICYmIEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICBuZXdPYmpba10gPSB2YWwubWFwKGZ1bmN0aW9uKHRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBzdWJzZXRBcnJheUF0dHJzKHRyYW5zZm9ybSwgaW5kaWNlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChrID09PSAiY29sb3JzY2FsZSIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5QXR0cnModmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5KHZhbCwgaW5kaWNlcyk7CiAgICB9IGVsc2UgewogICAgICBuZXdPYmpba10gPSB2YWw7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld09iajsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXkoYXJyLCBpbmRpY2VzKSB7CiAgdmFyIHJlc3VsdCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0LnB1c2goYXJyW2luZGljZXNbaV1dKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlbW92aW5nIHBsb3RseSdzIGJydXNoIApmdW5jdGlvbiByZW1vdmVCcnVzaChlbCkgewogIHZhciBvdXRsaW5lcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWxlY3Qtb3V0bGluZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0bGluZXMubGVuZ3RoOyBpKyspIHsKICAgIG91dGxpbmVzW2ldLnJlbW92ZSgpOwogIH0KfQoKCi8vIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24KCi8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QKLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvcgovLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUKLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy4KZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7Cgl2YXIgdGltZW91dDsKCXJldHVybiBmdW5jdGlvbigpIHsKCQl2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CgkJdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CgkJCXRpbWVvdXQgPSBudWxsOwoJCQlpZiAoIWltbWVkaWF0ZSkgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKCQl9OwoJCXZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0OwoJCWNsZWFyVGltZW91dCh0aW1lb3V0KTsKCQl0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CgkJaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Cgl9Owp9Owo=\"></script>\n",
       "<script title=\"typedarray\" src=\"data:application/javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw==\"></script>\n",
       "<script title=\"jquery\" src=\"data:application/javascript;base64,LyohIGpRdWVyeSB2My40LjEgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKEMsZSl7InVzZSBzdHJpY3QiO3ZhciB0PVtdLEU9Qy5kb2N1bWVudCxyPU9iamVjdC5nZXRQcm90b3R5cGVPZixzPXQuc2xpY2UsZz10LmNvbmNhdCx1PXQucHVzaCxpPXQuaW5kZXhPZixuPXt9LG89bi50b1N0cmluZyx2PW4uaGFzT3duUHJvcGVydHksYT12LnRvU3RyaW5nLGw9YS5jYWxsKE9iamVjdCkseT17fSxtPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYibnVtYmVyIiE9dHlwZW9mIGUubm9kZVR5cGV9LHg9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd30sYz17dHlwZTohMCxzcmM6ITAsbm9uY2U6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0aW9uIGIoZSx0LG4pe3ZhciByLGksbz0obj1ufHxFKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpZihvLnRleHQ9ZSx0KWZvcihyIGluIGMpKGk9dFtyXXx8dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKHIpKSYmby5zZXRBdHRyaWJ1dGUocixpKTtuLmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB3KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9uW28uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBmPSIzLjQuMSIsaz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgay5mbi5pbml0KGUsdCl9LHA9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nO2Z1bmN0aW9uIGQoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49dyhlKTtyZXR1cm4hbShlKSYmIXgoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9ay5mbj1rLnByb3RvdHlwZT17anF1ZXJ5OmYsY29uc3RydWN0b3I6ayxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3MuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ay5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGsuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGsubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2socy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soMDw9biYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDp1LHNvcnQ6dC5zb3J0LHNwbGljZTp0LnNwbGljZX0say5leHRlbmQ9ay5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgYSYmKGw9YSxhPWFyZ3VtZW50c1tzXXx8e30scysrKSwib2JqZWN0Ij09dHlwZW9mIGF8fG0oYSl8fChhPXt9KSxzPT09dSYmKGE9dGhpcyxzLS0pO3M8dTtzKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW3NdKSlmb3IodCBpbiBlKXI9ZVt0XSwiX19wcm90b19fIiE9PXQmJmEhPT1yJiYobCYmciYmKGsuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhuPWFbdF0sbz1pJiYhQXJyYXkuaXNBcnJheShuKT9bXTppfHxrLmlzUGxhaW5PYmplY3Qobik/bjp7fSxpPSExLGFbdF09ay5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LGsuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhmK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1vLmNhbGwoZSkpJiYoISh0PXIoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj12LmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJmEuY2FsbChuKT09PWwpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSx0KXtiKGUse25vbmNlOnQmJnQubm9uY2V9KX0sZWFjaDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MDtpZihkKGUpKXtmb3Iobj1lLmxlbmd0aDtyPG47cisrKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVha31lbHNlIGZvcihyIGluIGUpaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKHAsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKGQoT2JqZWN0KGUpKT9rLm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTp1LmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ/LTE6aS5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUubGVuZ3RoO3I8bjtyKyspZVtpKytdPXRbcl07cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPVtdLGk9MCxvPWUubGVuZ3RoLGE9IW47aTxvO2krKykhdChlW2ldLGkpIT09YSYmci5wdXNoKGVbaV0pO3JldHVybiByfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz0wLGE9W107aWYoZChlKSlmb3Iocj1lLmxlbmd0aDtvPHI7bysrKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO2Vsc2UgZm9yKG8gaW4gZSludWxsIT0oaT10KGVbb10sbyxuKSkmJmEucHVzaChpKTtyZXR1cm4gZy5hcHBseShbXSxhKX0sZ3VpZDoxLHN1cHBvcnQ6eX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihrLmZuW1N5bWJvbC5pdGVyYXRvcl09dFtTeW1ib2wuaXRlcmF0b3JdKSxrLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7blsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTt2YXIgaD1mdW5jdGlvbihuKXt2YXIgZSxkLGIsbyxpLGgsZixnLHcsdSxsLFQsQyxhLEUsdixzLGMseSxrPSJzaXp6bGUiKzEqbmV3IERhdGUsbT1uLmRvY3VtZW50LFM9MCxyPTAscD11ZSgpLHg9dWUoKSxOPXVlKCksQT11ZSgpLEQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQmJihsPSEwKSwwfSxqPXt9Lmhhc093blByb3BlcnR5LHQ9W10scT10LnBvcCxMPXQucHVzaCxIPXQucHVzaCxPPXQuc2xpY2UsUD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihlW25dPT09dClyZXR1cm4gbjtyZXR1cm4tMX0sUj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLE09IltcXHgyMFxcdFxcclxcblxcZl0iLEk9Iig/OlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIixXPSJcXFsiK00rIiooIitJKyIpKD86IitNKyIqKFsqXiR8IX5dPz0pIitNKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrSSsiKSl8KSIrTSsiKlxcXSIsJD0iOigiK0krIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK1crIikqKXwuKilcXCl8KSIsRj1uZXcgUmVnRXhwKE0rIisiLCJnIiksQj1uZXcgUmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89bmV3IFJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSx6PW5ldyBSZWdFeHAoIl4iK00rIiooWz4rfl18IitNKyIpIitNKyIqIiksVT1uZXcgUmVnRXhwKE0rInw+IiksWD1uZXcgUmVnRXhwKCQpLFY9bmV3IFJlZ0V4cCgiXiIrSSsiJCIpLEc9e0lEOm5ldyBSZWdFeHAoIl4jKCIrSSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitJKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitJKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrVyksUFNFVURPOm5ldyBSZWdFeHAoIl4iKyQpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L0hUTUwkL2ksUT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLEo9L15oXGQkL2ksSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGVlPS9bK35dLyx0ZT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIiksbmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNjtyZXR1cm4gciE9cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxvZT1mdW5jdGlvbigpe1QoKX0sYWU9YmUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0guYXBwbHkodD1PLmNhbGwobS5jaGlsZE5vZGVzKSxtLmNoaWxkTm9kZXMpLHRbbS5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7SD17YXBwbHk6dC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtMLmFwcGx5KGUsTy5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gc2UodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQscD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1wJiY5IT09cCYmMTEhPT1wKXJldHVybiBuO2lmKCFyJiYoKGU/ZS5vd25lckRvY3VtZW50fHxlOm0pIT09QyYmVChlKSxlPWV8fEMsRSkpe2lmKDExIT09cCYmKHU9Wi5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1wKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYoZiYmKGE9Zi5nZXRFbGVtZW50QnlJZChpKSkmJnkoZSxhKSYmYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gSC5hcHBseShuLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLG47aWYoKGk9dVszXSkmJmQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKGQucXNhJiYhQVt0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigxIT09cHx8Im9iamVjdCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtpZihjPXQsZj1lLDE9PT1wJiZVLnRlc3QodCkpeyhzPWUuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXMucmVwbGFjZShyZSxpZSk6ZS5zZXRBdHRyaWJ1dGUoImlkIixzPWspLG89KGw9aCh0KSkubGVuZ3RoO3doaWxlKG8tLSlsW29dPSIjIitzKyIgIit4ZShsW29dKTtjPWwuam9pbigiLCIpLGY9ZWUudGVzdCh0KSYmeWUoZS5wYXJlbnROb2RlKXx8ZX10cnl7cmV0dXJuIEguYXBwbHkobixmLnF1ZXJ5U2VsZWN0b3JBbGwoYykpLG59Y2F0Y2goZSl7QSh0LCEwKX1maW5hbGx5e3M9PT1rJiZlLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBnKHQucmVwbGFjZShCLCIkMSIpLGUsbixyKX1mdW5jdGlvbiB1ZSgpe3ZhciByPVtdO3JldHVybiBmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHIucHVzaCh0KyIgIik+Yi5jYWNoZUxlbmd0aCYmZGVsZXRlIGVbci5zaGlmdCgpXSxlW3QrIiAiXT1ufX1mdW5jdGlvbiBsZShlKXtyZXR1cm4gZVtrXT0hMCxlfWZ1bmN0aW9uIGNlKGUpe3ZhciB0PUMuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKGUpe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBmZShlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxyPW4ubGVuZ3RoO3doaWxlKHItLSliLmF0dHJIYW5kbGVbbltyXV09dH1mdW5jdGlvbiBwZShlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJmUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRleDtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJmUudHlwZT09PXR9fWZ1bmN0aW9uIGhlKG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT10fHwiYnV0dG9uIj09PXQpJiZlLnR5cGU9PT1ufX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImZvcm0iaW4gZT9lLnBhcmVudE5vZGUmJiExPT09ZS5kaXNhYmxlZD8ibGFiZWwiaW4gZT8ibGFiZWwiaW4gZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5kaXNhYmxlZD09PXQ6ZS5kaXNhYmxlZD09PXQ6ZS5pc0Rpc2FibGVkPT09dHx8ZS5pc0Rpc2FibGVkIT09IXQmJmFlKGUpPT09dDplLmRpc2FibGVkPT09dDoibGFiZWwiaW4gZSYmZS5kaXNhYmxlZD09PXR9fWZ1bmN0aW9uIHZlKGEpe3JldHVybiBsZShmdW5jdGlvbihvKXtyZXR1cm4gbz0rbyxsZShmdW5jdGlvbihlLHQpe3ZhciBuLHI9YShbXSxlLmxlbmd0aCxvKSxpPXIubGVuZ3RoO3doaWxlKGktLSllW249cltpXV0mJihlW25dPSEodFtuXT1lW25dKSl9KX0pfWZ1bmN0aW9uIHllKGUpe3JldHVybiBlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmV9Zm9yKGUgaW4gZD1zZS5zdXBwb3J0PXt9LGk9c2UuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lc3BhY2VVUkksbj0oZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIVkudGVzdCh0fHxuJiZuLm5vZGVOYW1lfHwiSFRNTCIpfSxUPXNlLnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lP2Uub3duZXJEb2N1bWVudHx8ZTptO3JldHVybiByIT09QyYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50JiYoYT0oQz1yKS5kb2N1bWVudEVsZW1lbnQsRT0haShDKSxtIT09QyYmKG49Qy5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsb2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNoRXZlbnQoIm9udW5sb2FkIixvZSkpLGQuYXR0cmlidXRlcz1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxkLmdldEVsZW1lbnRzQnlUYWdOYW1lPWNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKEMuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPUsudGVzdChDLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGQuZ2V0QnlJZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5pZD1rLCFDLmdldEVsZW1lbnRzQnlOYW1lfHwhQy5nZXRFbGVtZW50c0J5TmFtZShrKS5sZW5ndGh9KSxkLmdldEJ5SWQ/KGIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0ZSxuZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4/W25dOltdfX0pOihiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgbj1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiB0JiZ0LnZhbHVlPT09bn19LGIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmRSl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb107aT10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDt3aGlsZShvPWlbcisrXSlpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119cmV0dXJuW119fSksYi5maW5kLlRBRz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6ZC5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoIioiPT09ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gb30sYi5maW5kLkNMQVNTPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmRSlyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxzPVtdLHY9W10sKGQucXNhPUsudGVzdChDLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGNlKGZ1bmN0aW9uKGUpe2EuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIitrKyInPjwvYT48c2VsZWN0IGlkPSciK2srIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmdi5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49IitrKyItXSIpLmxlbmd0aHx8di5wdXNoKCJ+PSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHYucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitrKyIrKiIpLmxlbmd0aHx8di5wdXNoKCIuIy4rWyt+XSIpfSksY2UoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmdi5wdXNoKCJuYW1lIitNKyIqWypeJHwhfl0/PSIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJnYucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSx2LnB1c2goIiwuKjoiKX0pKSwoZC5tYXRjaGVzU2VsZWN0b3I9Sy50ZXN0KGM9YS5tYXRjaGVzfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEub01hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcikpJiZjZShmdW5jdGlvbihlKXtkLmRpc2Nvbm5lY3RlZE1hdGNoPWMuY2FsbChlLCIqIiksYy5jYWxsKGUsIltzIT0nJ106eCIpLHMucHVzaCgiIT0iLCQpfSksdj12Lmxlbmd0aCYmbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSkscz1zLmxlbmd0aCYmbmV3IFJlZ0V4cChzLmpvaW4oInwiKSksdD1LLnRlc3QoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseT10fHxLLnRlc3QoYS5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBufHwoMSYobj0oZS5vd25lckRvY3VtZW50fHxlKT09PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFkLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09PUN8fGUub3duZXJEb2N1bWVudD09PW0mJnkobSxlKT8tMTp0PT09Q3x8dC5vd25lckRvY3VtZW50PT09bSYmeShtLHQpPzE6dT9QKHUsZSktUCh1LHQpOjA6NCZuPy0xOjEpfTpmdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBsPSEwLDA7dmFyIG4scj0wLGk9ZS5wYXJlbnROb2RlLG89dC5wYXJlbnROb2RlLGE9W2VdLHM9W3RdO2lmKCFpfHwhbylyZXR1cm4gZT09PUM/LTE6dD09PUM/MTppPy0xOm8/MTp1P1AodSxlKS1QKHUsdCk6MDtpZihpPT09bylyZXR1cm4gcGUoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP3BlKGFbcl0sc1tyXSk6YVtyXT09PW0/LTE6c1tyXT09PW0/MTowfSksQ30sc2UubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBzZShlLG51bGwsbnVsbCx0KX0sc2UubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1DJiZUKGUpLGQubWF0Y2hlc1NlbGVjdG9yJiZFJiYhQVt0KyIgIl0mJighc3x8IXMudGVzdCh0KSkmJighdnx8IXYudGVzdCh0KSkpdHJ5e3ZhciBuPWMuY2FsbChlLHQpO2lmKG58fGQuZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gbn1jYXRjaChlKXtBKHQsITApfXJldHVybiAwPHNlKHQsQyxudWxsLFtlXSkubGVuZ3RofSxzZS5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1lbnR8fGUpIT09QyYmVChlKSx5KGUsdCl9LHNlLmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PUMmJlQoZSk7dmFyIG49Yi5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZqLmNhbGwoYi5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUUpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmQuYXR0cmlidXRlc3x8IUU/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSxzZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UocmUsaWUpfSxzZS5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHNlLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wO2lmKGw9IWQuZGV0ZWN0RHVwbGljYXRlcyx1PSFkLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KEQpLGwpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSllLnNwbGljZShuW3JdLDEpfXJldHVybiB1PW51bGwsZX0sbz1zZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKHQ9ZVtyKytdKW4rPW8odCk7cmV0dXJuIG59LChiPXNlLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmxlLG1hdGNoOkcsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh0ZSxuZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UodGUsbmUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxzZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZzZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gRy5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWgobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1wW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJnAoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24obixyLGkpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1zZS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UoRiwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oaCxlLHQsZyx2KXt2YXIgeT0ibnRoIiE9PWguc2xpY2UoMCwzKSxtPSJsYXN0IiE9PWguc2xpY2UoLTQpLHg9Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWcmJjA9PT12P2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9eSE9PW0/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixjPWUucGFyZW50Tm9kZSxmPXgmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPSFuJiYheCxkPSExO2lmKGMpe2lmKHkpe3doaWxlKGwpe2E9ZTt3aGlsZShhPWFbbF0paWYoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKXJldHVybiExO3U9bD0ib25seSI9PT1oJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVttP2MuZmlyc3RDaGlsZDpjLmxhc3RDaGlsZF0sbSYmcCl7ZD0ocz0ocj0oaT0obz0oYT1jKVtrXXx8KGFba109e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09UyYmclsxXSkmJnJbMl0sYT1zJiZjLmNoaWxkTm9kZXNbc107d2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoMT09PWEubm9kZVR5cGUmJisrZCYmYT09PWUpe2lbaF09W1MscyxkXTticmVha319ZWxzZSBpZihwJiYoZD1zPShyPShpPShvPShhPWUpW2tdfHwoYVtrXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1TJiZyWzFdKSwhMT09PWQpd2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoKHg/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSkmJisrZCYmKHAmJigoaT0obz1hW2tdfHwoYVtrXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdPVtTLGRdKSxhPT09ZSkpYnJlYWs7cmV0dXJuKGQtPXYpPT09Z3x8ZCVnPT0wJiYwPD1kL2d9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbyl7dmFyIHQsYT1iLnBzZXVkb3NbZV18fGIuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBhW2tdP2Eobyk6MTxhLmxlbmd0aD8odD1bZSxlLCIiLG9dLGIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2xlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPVAoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpsZShmdW5jdGlvbihlKXt2YXIgcj1bXSxpPVtdLHM9ZihlLnJlcGxhY2UoQiwiJDEiKSk7cmV0dXJuIHNba10/bGUoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpsZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8c2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6bGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHRlLG5lKSxmdW5jdGlvbihlKXtyZXR1cm4tMTwoZS50ZXh0Q29udGVudHx8byhlKSkuaW5kZXhPZih0KX19KSxsYW5nOmxlKGZ1bmN0aW9uKG4pe3JldHVybiBWLnRlc3Qobnx8IiIpfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIituKSxuPW4ucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUU/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PW4ubG9jYXRpb24mJm4ubG9jYXRpb24uaGFzaDtyZXR1cm4gdCYmdC5zbGljZSgxKT09PWUuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUMuYWN0aXZlRWxlbWVudCYmKCFDLmhhc0ZvY3VzfHxDLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmdlKCExKSxkaXNhYmxlZDpnZSghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWIucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBKLnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBRLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OnZlKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp2ZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dmUoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnZlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDp0PG4/dDpuOzA8PS0tcjspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0pLnBzZXVkb3MubnRoPWIucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pYi5wc2V1ZG9zW2VdPWRlKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0pYi5wc2V1ZG9zW2VdPWhlKGUpO2Z1bmN0aW9uIG1lKCl7fWZ1bmN0aW9uIHhlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gYmUocyxlLHQpe3ZhciB1PWUuZGlyLGw9ZS5uZXh0LGM9bHx8dSxmPXQmJiJwYXJlbnROb2RlIj09PWMscD1yKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe3doaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1bUyxwXTtpZihuKXt3aGlsZShlPWVbdV0paWYoKDE9PT1lLm5vZGVUeXBlfHxmKSYmcyhlLHQsbikpcmV0dXJuITB9ZWxzZSB3aGlsZShlPWVbdV0paWYoMT09PWUubm9kZVR5cGV8fGYpaWYoaT0obz1lW2tdfHwoZVtrXT17fSkpW2UudW5pcXVlSURdfHwob1tlLnVuaXF1ZUlEXT17fSksbCYmbD09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSllPWVbdV18fGU7ZWxzZXtpZigocj1pW2NdKSYmclswXT09PVMmJnJbMV09PT1wKXJldHVybiBhWzJdPXJbMl07aWYoKGlbY109YSlbMl09cyhlLHQsbikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHdlKGkpe3JldHVybiAxPGkubGVuZ3RoP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmxlbmd0aDt3aGlsZShyLS0paWYoIWlbcl0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTppWzBdfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQ2UoZCxoLGcsdix5LGUpe3JldHVybiB2JiYhdltrXSYmKHY9Q2UodikpLHkmJiF5W2tdJiYoeT1DZSh5LGUpKSxsZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1bXSx1PVtdLGw9dC5sZW5ndGgsYz1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKXNlKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGY9IWR8fCFlJiZoP2M6VGUoYyxzLGQsbixyKSxwPWc/eXx8KGU/ZDpsfHx2KT9bXTp0OmY7aWYoZyYmZyhmLHAsbixyKSx2KXtpPVRlKHAsdSksdihpLFtdLG4sciksbz1pLmxlbmd0aDt3aGlsZShvLS0pKGE9aVtvXSkmJihwW3Vbb11dPSEoZlt1W29dXT1hKSl9aWYoZSl7aWYoeXx8ZCl7aWYoeSl7aT1bXSxvPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmaS5wdXNoKGZbb109YSk7eShudWxsLHA9W10saSxyKX1vPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmLTE8KGk9eT9QKGUsYSk6c1tvXSkmJihlW2ldPSEodFtpXT1hKSl9fWVsc2UgcD1UZShwPT09dD9wLnNwbGljZShsLHAubGVuZ3RoKTpwKSx5P3kobnVsbCx0LHAscik6SC5hcHBseSh0LHApfSl9ZnVuY3Rpb24gRWUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89Yi5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8Yi5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT1iZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PWl9LGEsITApLGw9YmUoZnVuY3Rpb24oZSl7cmV0dXJuLTE8UChpLGUpfSxhLCEwKSxjPVtmdW5jdGlvbihlLHQsbil7dmFyIHI9IW8mJihufHx0IT09dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PWIucmVsYXRpdmVbZVtzXS50eXBlXSljPVtiZSh3ZShjKSx0KV07ZWxzZXtpZigodD1iLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSlba10pe2ZvcihuPSsrcztuPHI7bisrKWlmKGIucmVsYXRpdmVbZVtuXS50eXBlXSlicmVhaztyZXR1cm4gQ2UoMTxzJiZ3ZShjKSwxPHMmJnhlKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtzLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoQiwiJDEiKSx0LHM8biYmRWUoZS5zbGljZShzLG4pKSxuPHImJkVlKGU9ZS5zbGljZShuKSksbjxyJiZ4ZShlKSl9Yy5wdXNoKHQpfXJldHVybiB3ZShjKX1yZXR1cm4gbWUucHJvdG90eXBlPWIuZmlsdGVycz1iLnBzZXVkb3MsYi5zZXRGaWx0ZXJzPW5ldyBtZSxoPXNlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD14W2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PWIucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj1fLmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj16LmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKEIsIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpLGIuZmlsdGVyKSEocj1HW29dLmV4ZWMoYSkpfHx1W29dJiYhKHI9dVtvXShyKSl8fChuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpvLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/c2UuZXJyb3IoZSk6eChlLHMpLnNsaWNlKDApfSxmPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbix2LHksbSx4LHIsaT1bXSxvPVtdLGE9TltlKyIgIl07aWYoIWEpe3R8fCh0PWgoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPUVlKHRbbl0pKVtrXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPU4oZSwodj1vLG09MDwoeT1pKS5sZW5ndGgseD0wPHYubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxwPXcsZD1lfHx4JiZiLmZpbmQuVEFHKCIqIixpKSxoPVMrPW51bGw9PXA/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPWQubGVuZ3RoO2ZvcihpJiYodz10PT09Q3x8dHx8aSk7bCE9PWcmJm51bGwhPShvPWRbbF0pO2wrKyl7aWYoeCYmbyl7YT0wLHR8fG8ub3duZXJEb2N1bWVudD09PUN8fChUKG8pLG49IUUpO3doaWxlKHM9dlthKytdKWlmKHMobyx0fHxDLG4pKXtyLnB1c2gobyk7YnJlYWt9aSYmKFM9aCl9bSYmKChvPSFzJiZvKSYmdS0tLGUmJmMucHVzaChvKSl9aWYodSs9bCxtJiZsIT09dSl7YT0wO3doaWxlKHM9eVthKytdKXMoYyxmLHQsbik7aWYoZSl7aWYoMDx1KXdoaWxlKGwtLSljW2xdfHxmW2xdfHwoZltsXT1xLmNhbGwocikpO2Y9VGUoZil9SC5hcHBseShyLGYpLGkmJiFlJiYwPGYubGVuZ3RoJiYxPHUreS5sZW5ndGgmJnNlLnVuaXF1ZVNvcnQocil9cmV0dXJuIGkmJihTPWgsdz1wKSxjfSxtP2xlKHIpOnIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gYX0sZz1zZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLGM9IXImJmgoZT1sLnNlbGVjdG9yfHxlKTtpZihuPW58fFtdLDE9PT1jLmxlbmd0aCl7aWYoMjwobz1jWzBdPWNbMF0uc2xpY2UoMCkpLmxlbmd0aCYmIklEIj09PShhPW9bMF0pLnR5cGUmJjk9PT10Lm5vZGVUeXBlJiZFJiZiLnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEodD0oYi5maW5kLklEKGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtsJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPUcubmVlZHNDb250ZXh0LnRlc3QoZSk/MDpvLmxlbmd0aDt3aGlsZShpLS0pe2lmKGE9b1tpXSxiLnJlbGF0aXZlW3M9YS50eXBlXSlicmVhaztpZigodT1iLmZpbmRbc10pJiYocj11KGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSxlZS50ZXN0KG9bMF0udHlwZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoby5zcGxpY2UoaSwxKSwhKGU9ci5sZW5ndGgmJnhlKG8pKSlyZXR1cm4gSC5hcHBseShuLHIpLG47YnJlYWt9fX1yZXR1cm4obHx8ZihlLGMpKShyLHQsIUUsbiwhdHx8ZWUudGVzdChlKSYmeWUodC5wYXJlbnROb2RlKXx8dCksbn0sZC5zb3J0U3RhYmxlPWsuc3BsaXQoIiIpLnNvcnQoRCkuam9pbigiIik9PT1rLGQuZGV0ZWN0RHVwbGljYXRlcz0hIWwsVCgpLGQuc29ydERldGFjaGVkPWNlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oQy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGZlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxkLmF0dHJpYnV0ZXMmJmNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGZlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxmZShSLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHNlfShDKTtrLmZpbmQ9aCxrLmV4cHI9aC5zZWxlY3RvcnMsay5leHByWyI6Il09ay5leHByLnBzZXVkb3Msay51bmlxdWVTb3J0PWsudW5pcXVlPWgudW5pcXVlU29ydCxrLnRleHQ9aC5nZXRUZXh0LGsuaXNYTUxEb2M9aC5pc1hNTCxrLmNvbnRhaW5zPWguY29udGFpbnMsay5lc2NhcGVTZWxlY3Rvcj1oLmVzY2FwZTt2YXIgVD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmayhlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LFM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LE49ay5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBBKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX12YXIgRD0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaTtmdW5jdGlvbiBqKGUsbixyKXtyZXR1cm4gbShuKT9rLmdyZXAoZSxmdW5jdGlvbihlLHQpe3JldHVybiEhbi5jYWxsKGUsdCxlKSE9PXJ9KTpuLm5vZGVUeXBlP2suZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09biE9PXJ9KToic3RyaW5nIiE9dHlwZW9mIG4/ay5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuLTE8aS5jYWxsKG4sZSkhPT1yfSk6ay5maWx0ZXIobixlLHIpfWsuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP2suZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106ay5maW5kLm1hdGNoZXMoZSxrLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGsuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxpPXRoaXM7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayhrKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihrLmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKWsuZmluZChlLGlbdF0sbik7cmV0dXJuIDE8cj9rLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFqKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZOLnRlc3QoZSk/ayhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBxLEw9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsoay5mbi5pbml0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8cSwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCEocj0iPCI9PT1lWzBdJiYiPiI9PT1lW2UubGVuZ3RoLTFdJiYzPD1lLmxlbmd0aD9bbnVsbCxlLG51bGxdOkwuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2Ygaz90WzBdOnQsay5tZXJnZSh0aGlzLGsucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6RSwhMCkpLEQudGVzdChyWzFdKSYmay5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpbSh0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlzfXJldHVybihpPUUuZ2V0RWxlbWVudEJ5SWQoclsyXSkpJiYodGhpc1swXT1pLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0oZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoayk6ay5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT1rLmZuLHE9ayhFKTt2YXIgSD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxPPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2Z1bmN0aW9uIFAoZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfWsuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9ayhlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihrLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT0ic3RyaW5nIiE9dHlwZW9mIGUmJmsoZSk7aWYoIU4udGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT8tMTxhLmluZGV4KG4pOjE9PT1uLm5vZGVUeXBlJiZrLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8by5sZW5ndGg/ay51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/aS5jYWxsKGsoZSksdGhpc1swXSk6aS5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhrLnVuaXF1ZVNvcnQoay5tZXJnZSh0aGlzLmdldCgpLGsoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksay5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBUKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVChlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gUChlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBQKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBUKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIFQoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFQoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBUKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBTKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gUyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGUuY29udGVudERvY3VtZW50P2UuY29udGVudERvY3VtZW50OihBKGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksay5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKHIsaSl7ay5mbltyXT1mdW5jdGlvbihlLHQpe3ZhciBuPWsubWFwKHRoaXMsaSxlKTtyZXR1cm4iVW50aWwiIT09ci5zbGljZSgtNSkmJih0PWUpLHQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG49ay5maWx0ZXIodCxuKSksMTx0aGlzLmxlbmd0aCYmKE9bcl18fGsudW5pcXVlU29ydChuKSxILnRlc3QocikmJm4ucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUj0vW15ceDIwXHRcclxuXGZdKy9nO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIGV9ZnVuY3Rpb24gSShlKXt0aHJvdyBlfWZ1bmN0aW9uIFcoZSx0LG4scil7dmFyIGk7dHJ5e2UmJm0oaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmbShpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fWsuQ2FsbGJhY2tzPWZ1bmN0aW9uKHIpe3ZhciBlLG47cj0ic3RyaW5nIj09dHlwZW9mIHI/KGU9cixuPXt9LGsuZWFjaChlLm1hdGNoKFIpfHxbXSxmdW5jdGlvbihlLHQpe25bdF09ITB9KSxuKTprLmV4dGVuZCh7fSxyKTt2YXIgaSx0LG8sYSxzPVtdLHU9W10sbD0tMSxjPWZ1bmN0aW9uKCl7Zm9yKGE9YXx8ci5vbmNlLG89aT0hMDt1Lmxlbmd0aDtsPS0xKXt0PXUuc2hpZnQoKTt3aGlsZSgrK2w8cy5sZW5ndGgpITE9PT1zW2xdLmFwcGx5KHRbMF0sdFsxXSkmJnIuc3RvcE9uRmFsc2UmJihsPXMubGVuZ3RoLHQ9ITEpfXIubWVtb3J5fHwodD0hMSksaT0hMSxhJiYocz10P1tdOiIiKX0sZj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIHMmJih0JiYhaSYmKGw9cy5sZW5ndGgtMSx1LnB1c2godCkpLGZ1bmN0aW9uIG4oZSl7ay5lYWNoKGUsZnVuY3Rpb24oZSx0KXttKHQpP3IudW5pcXVlJiZmLmhhcyh0KXx8cy5wdXNoKHQpOnQmJnQubGVuZ3RoJiYic3RyaW5nIiE9PXcodCkmJm4odCl9KX0oYXJndW1lbnRzKSx0JiYhaSYmYygpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKC0xPChuPWsuaW5BcnJheSh0LHMsbikpKXMuc3BsaWNlKG4sMSksbjw9bCYmbC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlPy0xPGsuaW5BcnJheShlLHMpOjA8cy5sZW5ndGh9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHMmJihzPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT1bXSxzPXQ9IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hc30sbG9jazpmdW5jdGlvbigpe3JldHVybiBhPXU9W10sdHx8aXx8KHM9dD0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFhfSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiBhfHwodD1bZSwodD10fHxbXSkuc2xpY2U/dC5zbGljZSgpOnRdLHUucHVzaCh0KSxpfHxjKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99fTtyZXR1cm4gZn0say5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciBvPVtbIm5vdGlmeSIsInByb2dyZXNzIixrLkNhbGxiYWNrcygibWVtb3J5Iiksay5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLGsuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGsuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixrLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxrLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxpPSJwZW5kaW5nIixhPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBpfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGEudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGk9YXJndW1lbnRzO3JldHVybiBrLkRlZmVycmVkKGZ1bmN0aW9uKHIpe2suZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49bShpW3RbNF1dKSYmaVt0WzRdXTtzW3RbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmbShlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHIubm90aWZ5KS5kb25lKHIucmVzb2x2ZSkuZmFpbChyLnJlamVjdCk6clt0WzBdKyJXaXRoIl0odGhpcyxuP1tlXTphcmd1bWVudHMpfSl9KSxpPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxuLHIpe3ZhciB1PTA7ZnVuY3Rpb24gbChpLG8sYSxzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzLGU9ZnVuY3Rpb24oKXt2YXIgZSx0O2lmKCEoaTx1KSl7aWYoKGU9YS5hcHBseShuLHIpKT09PW8ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO3Q9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sbSh0KT9zP3QuY2FsbChlLGwodSxvLE0scyksbCh1LG8sSSxzKSk6KHUrKyx0LmNhbGwoZSxsKHUsbyxNLHMpLGwodSxvLEkscyksbCh1LG8sTSxvLm5vdGlmeVdpdGgpKSk6KGEhPT1NJiYobj12b2lkIDAscj1bZV0pLChzfHxvLnJlc29sdmVXaXRoKShuLHIpKX19LHQ9cz9lOmZ1bmN0aW9uKCl7dHJ5e2UoKX1jYXRjaChlKXtrLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJmsuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLHQuc3RhY2tUcmFjZSksdTw9aSsxJiYoYSE9PUkmJihuPXZvaWQgMCxyPVtlXSksby5yZWplY3RXaXRoKG4scikpfX07aT90KCk6KGsuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYodC5zdGFja1RyYWNlPWsuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLEMuc2V0VGltZW91dCh0KSl9fXJldHVybiBrLkRlZmVycmVkKGZ1bmN0aW9uKGUpe29bMF1bM10uYWRkKGwoMCxlLG0ocik/cjpNLGUubm90aWZ5V2l0aCkpLG9bMV1bM10uYWRkKGwoMCxlLG0odCk/dDpNKSksb1syXVszXS5hZGQobCgwLGUsbShuKT9uOkkpKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT9rLmV4dGVuZChlLGEpOmF9fSxzPXt9O3JldHVybiBrLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPXRbMl0scj10WzVdO2FbdFsxXV09bi5hZGQsciYmbi5hZGQoZnVuY3Rpb24oKXtpPXJ9LG9bMy1lXVsyXS5kaXNhYmxlLG9bMy1lXVszXS5kaXNhYmxlLG9bMF1bMl0ubG9jayxvWzBdWzNdLmxvY2spLG4uYWRkKHRbM10uZmlyZSksc1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBzW3RbMF0rIldpdGgiXSh0aGlzPT09cz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LHNbdFswXSsiV2l0aCJdPW4uZmlyZVdpdGh9KSxhLnByb21pc2UocyksZSYmZS5jYWxsKHMscyksc30sd2hlbjpmdW5jdGlvbihlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9bixyPUFycmF5KHQpLGk9cy5jYWxsKGFyZ3VtZW50cyksbz1rLkRlZmVycmVkKCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7clt0XT10aGlzLGlbdF09MTxhcmd1bWVudHMubGVuZ3RoP3MuY2FsbChhcmd1bWVudHMpOmUsLS1ufHxvLnJlc29sdmVXaXRoKHIsaSl9fTtpZihuPD0xJiYoVyhlLG8uZG9uZShhKHQpKS5yZXNvbHZlLG8ucmVqZWN0LCFuKSwicGVuZGluZyI9PT1vLnN0YXRlKCl8fG0oaVt0XSYmaVt0XS50aGVuKSkpcmV0dXJuIG8udGhlbigpO3doaWxlKHQtLSlXKGlbdF0sYSh0KSxvLnJlamVjdCk7cmV0dXJuIG8ucHJvbWlzZSgpfX0pO3ZhciAkPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO2suRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihlLHQpe0MuY29uc29sZSYmQy5jb25zb2xlLndhcm4mJmUmJiQudGVzdChlLm5hbWUpJiZDLmNvbnNvbGUud2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UsZS5zdGFjayx0KX0say5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbihlKXtDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9O3ZhciBGPWsuRGVmZXJyZWQoKTtmdW5jdGlvbiBCKCl7RS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEIpLGsucmVhZHkoKX1rLmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBGLnRoZW4oZSlbImNhdGNoIl0oZnVuY3Rpb24oZSl7ay5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LGsuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS1rLnJlYWR5V2FpdDprLmlzUmVhZHkpfHwoay5pc1JlYWR5PSEwKSE9PWUmJjA8LS1rLnJlYWR5V2FpdHx8Ri5yZXNvbHZlV2l0aChFLFtrXSl9fSksay5yZWFkeS50aGVuPUYudGhlbiwiY29tcGxldGUiPT09RS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1FLnJlYWR5U3RhdGUmJiFFLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9DLnNldFRpbWVvdXQoay5yZWFkeSk6KEUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixCKSk7dmFyIF89ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXcobikpZm9yKHMgaW4gaT0hMCxuKV8oZSx0LHMsbltzXSwhMCxvLGEpO2Vsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsbShyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbChrKGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LHo9L14tbXMtLyxVPS8tKFthLXpdKS9nO2Z1bmN0aW9uIFgoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuIGUucmVwbGFjZSh6LCJtcy0iKS5yZXBsYWNlKFUsWCl9dmFyIEc9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfTtmdW5jdGlvbiBZKCl7dGhpcy5leHBhbmRvPWsuZXhwYW5kbytZLnVpZCsrfVkudWlkPTEsWS5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sRyhlKSYmKGUubm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdGhpcy5leHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuY2FjaGUoZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbVih0KV09bjtlbHNlIGZvcihyIGluIHQpaVtWKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW1YodCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKFYpOih0PVYodCkpaW4gcj9bdF06dC5tYXRjaChSKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fGsuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIWsuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBRPW5ldyBZLEo9bmV3IFksSz0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLFo9L1tBLVpdL2c7ZnVuY3Rpb24gZWUoZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShaLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPSJ0cnVlIj09PShpPW4pfHwiZmFsc2UiIT09aSYmKCJudWxsIj09PWk/bnVsbDppPT09K2krIiI/K2k6Sy50ZXN0KGkpP0pTT04ucGFyc2UoaSk6aSl9Y2F0Y2goZSl7fUouc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufWsuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBKLmhhc0RhdGEoZSl8fFEuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEouYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0oucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1EucmVtb3ZlKGUsdCl9fSksay5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT1KLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVEuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9VihyLnNsaWNlKDUpKSxlZShvLHIsaVtyXSkpO1Euc2V0KG8sImhhc0RhdGFBdHRycyIsITApfXJldHVybiBpfXJldHVybiJvYmplY3QiPT10eXBlb2Ygbj90aGlzLmVhY2goZnVuY3Rpb24oKXtKLnNldCh0aGlzLG4pfSk6Xyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0O2lmKG8mJnZvaWQgMD09PWUpcmV0dXJuIHZvaWQgMCE9PSh0PUouZ2V0KG8sbikpP3Q6dm9pZCAwIT09KHQ9ZWUobyxuKSk/dDp2b2lkIDA7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Si5zZXQodGhpcyxuLGUpfSl9LG51bGwsZSwxPGFyZ3VtZW50cy5sZW5ndGgsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0oucmVtb3ZlKHRoaXMsZSl9KX19KSxrLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1RLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPVEuYWNjZXNzKGUsdCxrLm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj1rLnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPWsuX3F1ZXVlSG9va3MoZSx0KTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsZnVuY3Rpb24oKXtrLmRlcXVldWUoZSx0KX0sbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gUS5nZXQoZSxuKXx8US5hY2Nlc3MoZSxuLHtlbXB0eTprLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtRLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxrLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxuKXt2YXIgZT0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSJmeCIsZS0tKSxhcmd1bWVudHMubGVuZ3RoPGU/ay5xdWV1ZSh0aGlzWzBdLHQpOnZvaWQgMD09PW4/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1rLnF1ZXVlKHRoaXMsdCxuKTtrLl9xdWV1ZUhvb2tzKHRoaXMsdCksImZ4Ij09PXQmJiJpbnByb2dyZXNzIiE9PWVbMF0mJmsuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2suZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT1rLkRlZmVycmVkKCksbz10aGlzLGE9dGhpcy5sZW5ndGgscz1mdW5jdGlvbigpey0tcnx8aS5yZXNvbHZlV2l0aChvLFtvXSl9OyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiZngiO3doaWxlKGEtLSkobj1RLmdldChvW2FdLGUrInF1ZXVlSG9va3MiKSkmJm4uZW1wdHkmJihyKyssbi5lbXB0eS5hZGQocykpO3JldHVybiBzKCksaS5wcm9taXNlKHQpfX0pO3ZhciB0ZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSxuZT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrdGUrIikoW2EteiVdKikkIiwiaSIpLHJlPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0saWU9RS5kb2N1bWVudEVsZW1lbnQsb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfSxhZT17Y29tcG9zZWQ6ITB9O2llLmdldFJvb3ROb2RlJiYob2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHxlLmdldFJvb3ROb2RlKGFlKT09PWUub3duZXJEb2N1bWVudH0pO3ZhciBzZT1mdW5jdGlvbihlLHQpe3JldHVybiJub25lIj09PShlPXR8fGUpLnN0eWxlLmRpc3BsYXl8fCIiPT09ZS5zdHlsZS5kaXNwbGF5JiZvZShlKSYmIm5vbmUiPT09ay5jc3MoZSwiZGlzcGxheSIpfSx1ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGE9e307Zm9yKG8gaW4gdClhW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2ZvcihvIGluIGk9bi5hcHBseShlLHJ8fFtdKSx0KWUuc3R5bGVbb109YVtvXTtyZXR1cm4gaX07ZnVuY3Rpb24gbGUoZSx0LG4scil7dmFyIGksbyxhPTIwLHM9cj9mdW5jdGlvbigpe3JldHVybiByLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBrLmNzcyhlLHQsIiIpfSx1PXMoKSxsPW4mJm5bM118fChrLmNzc051bWJlclt0XT8iIjoicHgiKSxjPWUubm9kZVR5cGUmJihrLmNzc051bWJlclt0XXx8InB4IiE9PWwmJit1KSYmbmUuZXhlYyhrLmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pay5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLGsuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgY2U9e307ZnVuY3Rpb24gZmUoZSx0KXtmb3IodmFyIG4scixpLG8sYSxzLHUsbD1bXSxjPTAsZj1lLmxlbmd0aDtjPGY7YysrKShyPWVbY10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKGxbY109US5nZXQociwiZGlzcGxheSIpfHxudWxsLGxbY118fChyLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmc2UocikmJihsW2NdPSh1PWE9bz12b2lkIDAsYT0oaT1yKS5vd25lckRvY3VtZW50LHM9aS5ub2RlTmFtZSwodT1jZVtzXSl8fChvPWEuYm9keS5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQocykpLHU9ay5jc3MobywiZGlzcGxheSIpLG8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSwibm9uZSI9PT11JiYodT0iYmxvY2siKSxjZVtzXT11KSkpKToibm9uZSIhPT1uJiYobFtjXT0ibm9uZSIsUS5zZXQociwiZGlzcGxheSIsbikpKTtmb3IoYz0wO2M8ZjtjKyspbnVsbCE9bFtjXSYmKGVbY10uc3R5bGUuZGlzcGxheT1sW2NdKTtyZXR1cm4gZX1rLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtzZSh0aGlzKT9rKHRoaXMpLnNob3coKTprKHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKikvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksZ2U9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtmdW5jdGlvbiB2ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmQShlLHQpP2subWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24geWUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspUS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fFEuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9Z2Uub3B0Z3JvdXA9Z2Uub3B0aW9uLGdlLnRib2R5PWdlLnRmb290PWdlLmNvbGdyb3VwPWdlLmNhcHRpb249Z2UudGhlYWQsZ2UudGg9Z2UudGQ7dmFyIG1lLHhlLGJlPS88fCYjP1x3KzsvO2Z1bmN0aW9uIHdlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGEscyx1LGwsYyxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHA9W10sZD0wLGg9ZS5sZW5ndGg7ZDxoO2QrKylpZigobz1lW2RdKXx8MD09PW8paWYoIm9iamVjdCI9PT13KG8pKWsubWVyZ2UocCxvLm5vZGVUeXBlP1tvXTpvKTtlbHNlIGlmKGJlLnRlc3Qobykpe2E9YXx8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShkZS5leGVjKG8pfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLHU9Z2Vbc118fGdlLl9kZWZhdWx0LGEuaW5uZXJIVE1MPXVbMV0ray5odG1sUHJlZmlsdGVyKG8pK3VbMl0sYz11WzBdO3doaWxlKGMtLSlhPWEubGFzdENoaWxkO2subWVyZ2UocCxhLmNoaWxkTm9kZXMpLChhPWYuZmlyc3RDaGlsZCkudGV4dENvbnRlbnQ9IiJ9ZWxzZSBwLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7Zi50ZXh0Q29udGVudD0iIixkPTA7d2hpbGUobz1wW2QrK10paWYociYmLTE8ay5pbkFycmF5KG8scikpaSYmaS5wdXNoKG8pO2Vsc2UgaWYobD1vZShvKSxhPXZlKGYuYXBwZW5kQ2hpbGQobyksInNjcmlwdCIpLGwmJnllKGEpLG4pe2M9MDt3aGlsZShvPWFbYysrXSloZS50ZXN0KG8udHlwZXx8IiIpJiZuLnB1c2gobyl9cmV0dXJuIGZ9bWU9RS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoRS5jcmVhdGVFbGVtZW50KCJkaXYiKSksKHhlPUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSx4ZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIikseGUuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLG1lLmFwcGVuZENoaWxkKHhlKSx5LmNoZWNrQ2xvbmU9bWUuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLG1lLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIseS5ub0Nsb25lQ2hlY2tlZD0hIW1lLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTt2YXIgVGU9L15rZXkvLENlPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxFZT0vXihbXi5dKikoPzpcLiguKyl8KS87ZnVuY3Rpb24ga2UoKXtyZXR1cm4hMH1mdW5jdGlvbiBTZSgpe3JldHVybiExfWZ1bmN0aW9uIE5lKGUsdCl7cmV0dXJuIGU9PT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gRS5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319KCk9PSgiZm9jdXMiPT09dCl9ZnVuY3Rpb24gQWUoZSx0LG4scixpLG8pe3ZhciBhLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtmb3IocyBpbiJzdHJpbmciIT10eXBlb2YgbiYmKHI9cnx8bixuPXZvaWQgMCksdClBZShlLHMsbixyLHRbc10sbyk7cmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12b2lkIDApOm51bGw9PWkmJigic3RyaW5nIj09dHlwZW9mIG4/KGk9cixyPXZvaWQgMCk6KGk9cixyPW4sbj12b2lkIDApKSwhMT09PWkpaT1TZTtlbHNlIGlmKCFpKXJldHVybiBlO3JldHVybiAxPT09byYmKGE9aSwoaT1mdW5jdGlvbihlKXtyZXR1cm4gaygpLm9mZihlKSxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLmd1aWQ9YS5ndWlkfHwoYS5ndWlkPWsuZ3VpZCsrKSksZS5lYWNoKGZ1bmN0aW9uKCl7ay5ldmVudC5hZGQodGhpcyx0LGkscixuKX0pfWZ1bmN0aW9uIERlKGUsaSxvKXtvPyhRLnNldChlLGksITEpLGsuZXZlbnQuYWRkKGUsaSx7bmFtZXNwYWNlOiExLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPVEuZ2V0KHRoaXMsaSk7aWYoMSZlLmlzVHJpZ2dlciYmdGhpc1tpXSl7aWYoci5sZW5ndGgpKGsuZXZlbnQuc3BlY2lhbFtpXXx8e30pLmRlbGVnYXRlVHlwZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtlbHNlIGlmKHI9cy5jYWxsKGFyZ3VtZW50cyksUS5zZXQodGhpcyxpLHIpLHQ9byh0aGlzLGkpLHRoaXNbaV0oKSxyIT09KG49US5nZXQodGhpcyxpKSl8fHQ/US5zZXQodGhpcyxpLCExKTpuPXt9LHIhPT1uKXJldHVybiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSxuLnZhbHVlfWVsc2Ugci5sZW5ndGgmJihRLnNldCh0aGlzLGkse3ZhbHVlOmsuZXZlbnQudHJpZ2dlcihrLmV4dGVuZChyWzBdLGsuRXZlbnQucHJvdG90eXBlKSxyLnNsaWNlKDEpLHRoaXMpfSksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSkpOnZvaWQgMD09PVEuZ2V0KGUsaSkmJmsuZXZlbnQuYWRkKGUsaSxrZSl9ay5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcsdj1RLmdldCh0KTtpZih2KXtuLmhhbmRsZXImJihuPShvPW4pLmhhbmRsZXIsaT1vLnNlbGVjdG9yKSxpJiZrLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGllLGkpLG4uZ3VpZHx8KG4uZ3VpZD1rLmd1aWQrKyksKHU9di5ldmVudHMpfHwodT12LmV2ZW50cz17fSksKGE9di5oYW5kbGUpfHwoYT12LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGsmJmsuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlP2suZXZlbnQuZGlzcGF0Y2guYXBwbHkodCxhcmd1bWVudHMpOnZvaWQgMH0pLGw9KGU9KGV8fCIiKS5tYXRjaChSKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9RWUuZXhlYyhlW2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KGk/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LGM9ay5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmay5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGkpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwodCxyLGgsYSl8fHQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbCh0LGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSxrLmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9US5oYXNEYXRhKGUpJiZRLmdldChlKTtpZih2JiYodT12LmV2ZW50cykpe2w9KHQ9KHR8fCIiKS5tYXRjaChSKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlpZihkPWc9KHM9RWUuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtmPWsuZXZlbnQuc3BlY2lhbFtkXXx8e30scD11W2Q9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGRdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksYT1vPXAubGVuZ3RoO3doaWxlKG8tLSljPXBbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx2LmhhbmRsZSl8fGsucmVtb3ZlRXZlbnQoZSxkLHYuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KWsuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7ay5pc0VtcHR5T2JqZWN0KHUpJiZRLnJlbW92ZShlLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1rLmV2ZW50LmZpeChlKSx1PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxsPShRLmdldCh0aGlzLCJldmVudHMiKXx8e30pW3MudHlwZV18fFtdLGM9ay5ldmVudC5zcGVjaWFsW3MudHlwZV18fHt9O2Zvcih1WzBdPXMsdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspdVt0XT1hcmd1bWVudHNbdF07aWYocy5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLHMpKXthPWsuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHMsbCksdD0wO3doaWxlKChpPWFbdCsrXSkmJiFzLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3MuY3VycmVudFRhcmdldD1pLmVsZW0sbj0wO3doaWxlKChvPWkuaGFuZGxlcnNbbisrXSkmJiFzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcy5ybmFtZXNwYWNlJiYhMSE9PW8ubmFtZXNwYWNlJiYhcy5ybmFtZXNwYWNlLnRlc3Qoby5uYW1lc3BhY2UpfHwocy5oYW5kbGVPYmo9byxzLmRhdGE9by5kYXRhLHZvaWQgMCE9PShyPSgoay5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSx1KSkmJiExPT09KHMucmVzdWx0PXIpJiYocy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyxzKSxzLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQ7aWYodSYmbC5ub2RlVHlwZSYmISgiY2xpY2siPT09ZS50eXBlJiYxPD1lLmJ1dHRvbikpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKCJjbGljayIhPT1lLnR5cGV8fCEwIT09bC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30sbj0wO248dTtuKyspdm9pZCAwPT09YVtpPShyPXRbbl0pLnNlbGVjdG9yKyIgIl0mJihhW2ldPXIubmVlZHNDb250ZXh0Py0xPGsoaSx0aGlzKS5pbmRleChsKTprLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLGFbaV0mJm8ucHVzaChyKTtvLmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6dC5zbGljZSh1KX0pLHN9LGFkZFByb3A6ZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoay5FdmVudC5wcm90b3R5cGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0Om0oZSk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIGUodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFt0XX0sc2V0OmZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX19KX0sZml4OmZ1bmN0aW9uKGUpe3JldHVybiBlW2suZXhwYW5kb10/ZTpuZXcgay5FdmVudChlKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOntzZXR1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmRGUodCwiY2xpY2siLGtlKSwhMX0sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmRGUodCwiY2xpY2siKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZRLmdldCh0LCJjbGljayIpfHxBKHQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUucmVzdWx0JiZlLm9yaWdpbmFsRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19fSxrLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSxrLkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2Ygay5FdmVudCkpcmV0dXJuIG5ldyBrLkV2ZW50KGUsdCk7ZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09ZS5kZWZhdWx0UHJldmVudGVkJiYhMT09PWUucmV0dXJuVmFsdWU/a2U6U2UsdGhpcy50YXJnZXQ9ZS50YXJnZXQmJjM9PT1lLnRhcmdldC5ub2RlVHlwZT9lLnRhcmdldC5wYXJlbnROb2RlOmUudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1lLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PWUucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPWUsdCYmay5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKSx0aGlzW2suZXhwYW5kb109ITB9LGsuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjprLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDpTZSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpTZSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpTZSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1rZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1rZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9a2UsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LGsuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCwiY2hhciI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmVGUudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJkNlLnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSxrLmV2ZW50LmFkZFByb3ApLGsuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtrLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIERlKHRoaXMsZSxOZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gRGUodGhpcyxlKSwhMH0sZGVsZWdhdGVUeXBlOnR9fSksay5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe2suZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxrLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxrLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEFlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gQWUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosayhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49U2UpLHRoaXMuZWFjaChmdW5jdGlvbigpe2suZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIGplPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0qKVtePl0qKVwvPi9naSxxZT0vPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxMZT0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSxIZT0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2c7ZnVuY3Rpb24gT2UoZSx0KXtyZXR1cm4gQShlLCJ0YWJsZSIpJiZBKDExIT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKSYmayhlKS5jaGlsZHJlbigidGJvZHkiKVswXXx8ZX1mdW5jdGlvbiBQZShlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIFJlKGUpe3JldHVybiJ0cnVlLyI9PT0oZS50eXBlfHwiIikuc2xpY2UoMCw1KT9lLnR5cGU9ZS50eXBlLnNsaWNlKDUpOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBNZShlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw7aWYoMT09PXQubm9kZVR5cGUpe2lmKFEuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1RLnNldCh0LG8pLGw9by5ldmVudHMpKWZvcihpIGluIGRlbGV0ZSBhLmhhbmRsZSxhLmV2ZW50cz17fSxsKWZvcihuPTAscj1sW2ldLmxlbmd0aDtuPHI7bisrKWsuZXZlbnQuYWRkKHQsaSxsW2ldW25dKTtKLmhhc0RhdGEoZSkmJihzPUouYWNjZXNzKGUpLHU9ay5leHRlbmQoe30scyksSi5zZXQodCx1KSl9fWZ1bmN0aW9uIEllKG4scixpLG8pe3I9Zy5hcHBseShbXSxyKTt2YXIgZSx0LGEscyx1LGwsYz0wLGY9bi5sZW5ndGgscD1mLTEsZD1yWzBdLGg9bShkKTtpZihofHwxPGYmJiJzdHJpbmciPT10eXBlb2YgZCYmIXkuY2hlY2tDbG9uZSYmTGUudGVzdChkKSlyZXR1cm4gbi5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW4uZXEoZSk7aCYmKHJbMF09ZC5jYWxsKHRoaXMsZSx0Lmh0bWwoKSkpLEllKHQscixpLG8pfSk7aWYoZiYmKHQ9KGU9d2UocixuWzBdLm93bmVyRG9jdW1lbnQsITEsbixvKSkuZmlyc3RDaGlsZCwxPT09ZS5jaGlsZE5vZGVzLmxlbmd0aCYmKGU9dCksdHx8bykpe2ZvcihzPShhPWsubWFwKHZlKGUsInNjcmlwdCIpLFBlKSkubGVuZ3RoO2M8ZjtjKyspdT1lLGMhPT1wJiYodT1rLmNsb25lKHUsITAsITApLHMmJmsubWVyZ2UoYSx2ZSh1LCJzY3JpcHQiKSkpLGkuY2FsbChuW2NdLHUsYyk7aWYocylmb3IobD1hW2EubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsay5tYXAoYSxSZSksYz0wO2M8cztjKyspdT1hW2NdLGhlLnRlc3QodS50eXBlfHwiIikmJiFRLmFjY2Vzcyh1LCJnbG9iYWxFdmFsIikmJmsuY29udGFpbnMobCx1KSYmKHUuc3JjJiYibW9kdWxlIiE9PSh1LnR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpP2suX2V2YWxVcmwmJiF1Lm5vTW9kdWxlJiZrLl9ldmFsVXJsKHUuc3JjLHtub25jZTp1Lm5vbmNlfHx1LmdldEF0dHJpYnV0ZSgibm9uY2UiKX0pOmIodS50ZXh0Q29udGVudC5yZXBsYWNlKEhlLCIiKSx1LGwpKX1yZXR1cm4gbn1mdW5jdGlvbiBXZShlLHQsbil7Zm9yKHZhciByLGk9dD9rLmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlbb10pO28rKylufHwxIT09ci5ub2RlVHlwZXx8ay5jbGVhbkRhdGEodmUocikpLHIucGFyZW50Tm9kZSYmKG4mJm9lKHIpJiZ5ZSh2ZShyLCJzY3JpcHQiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX1rLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGplLCI8JDE+PC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGM9ZS5jbG9uZU5vZGUoITApLGY9b2UoZSk7aWYoISh5Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHxrLmlzWE1MRG9jKGUpKSlmb3IoYT12ZShjKSxyPTAsaT0obz12ZShlKSkubGVuZ3RoO3I8aTtyKyspcz1vW3JdLHU9YVtyXSx2b2lkIDAsImlucHV0Ij09PShsPXUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkmJnBlLnRlc3Qocy50eXBlKT91LmNoZWNrZWQ9cy5jaGVja2VkOiJpbnB1dCIhPT1sJiYidGV4dGFyZWEiIT09bHx8KHUuZGVmYXVsdFZhbHVlPXMuZGVmYXVsdFZhbHVlKTtpZih0KWlmKG4pZm9yKG89b3x8dmUoZSksYT1hfHx2ZShjKSxyPTAsaT1vLmxlbmd0aDtyPGk7cisrKU1lKG9bcl0sYVtyXSk7ZWxzZSBNZShlLGMpO3JldHVybiAwPChhPXZlKGMsInNjcmlwdCIpKS5sZW5ndGgmJnllKGEsIWYmJnZlKGUsInNjcmlwdCIpKSxjfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpPWsuZXZlbnQuc3BlY2lhbCxvPTA7dm9pZCAwIT09KG49ZVtvXSk7bysrKWlmKEcobikpe2lmKHQ9bltRLmV4cGFuZG9dKXtpZih0LmV2ZW50cylmb3IociBpbiB0LmV2ZW50cylpW3JdP2suZXZlbnQucmVtb3ZlKG4scik6ay5yZW1vdmVFdmVudChuLHIsdC5oYW5kbGUpO25bUS5leHBhbmRvXT12b2lkIDB9bltKLmV4cGFuZG9dJiYobltKLmV4cGFuZG9dPXZvaWQgMCl9fX0pLGsuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFdlKHRoaXMsZSwhMCl9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gV2UodGhpcyxlKX0sdGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gXyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP2sudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHwodGhpcy50ZXh0Q29udGVudD1lKX0pfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiBJZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8T2UodGhpcyxlKS5hcHBlbmRDaGlsZChlKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1PZSh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9kZVR5cGUmJihrLmNsZWFuRGF0YSh2ZShlLCExKSksZS50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbCE9ZSYmZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGsuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIF8odGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1lJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYhcWUudGVzdChlKSYmIWdlWyhkZS5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1rLmh0bWxQcmVmaWx0ZXIoZSk7dHJ5e2Zvcig7bjxyO24rKykxPT09KHQ9dGhpc1tuXXx8e30pLm5vZGVUeXBlJiYoay5jbGVhbkRhdGEodmUodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChlKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gSWUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2suaW5BcnJheSh0aGlzLG4pPDAmJihrLmNsZWFuRGF0YSh2ZSh0aGlzKSksdCYmdC5yZXBsYWNlQ2hpbGQoZSx0aGlzKSl9LG4pfX0pLGsuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsYSl7ay5mbltlXT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXSxyPWsoZSksaT1yLmxlbmd0aC0xLG89MDtvPD1pO28rKyl0PW89PT1pP3RoaXM6dGhpcy5jbG9uZSghMCksayhyW29dKVthXSh0KSx1LmFwcGx5KG4sdC5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4pfX0pO3ZhciAkZT1uZXcgUmVnRXhwKCJeKCIrdGUrIikoPyFweClbYS16JV0rJCIsImkiKSxGZT1mdW5jdGlvbihlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIHQmJnQub3BlbmVyfHwodD1DKSx0LmdldENvbXB1dGVkU3R5bGUoZSl9LEJlPW5ldyBSZWdFeHAocmUuam9pbigifCIpLCJpIik7ZnVuY3Rpb24gX2UoZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5zdHlsZTtyZXR1cm4obj1ufHxGZShlKSkmJigiIiE9PShhPW4uZ2V0UHJvcGVydHlWYWx1ZSh0KXx8blt0XSl8fG9lKGUpfHwoYT1rLnN0eWxlKGUsdCkpLCF5LnBpeGVsQm94U3R5bGVzKCkmJiRlLnRlc3QoYSkmJkJlLnRlc3QodCkmJihyPXMud2lkdGgsaT1zLm1pbldpZHRoLG89cy5tYXhXaWR0aCxzLm1pbldpZHRoPXMubWF4V2lkdGg9cy53aWR0aD1hLGE9bi53aWR0aCxzLndpZHRoPXIscy5taW5XaWR0aD1pLHMubWF4V2lkdGg9bykpLHZvaWQgMCE9PWE/YSsiIjphfWZ1bmN0aW9uIHplKGUsdCl7cmV0dXJue2dldDpmdW5jdGlvbigpe2lmKCFlKCkpcmV0dXJuKHRoaXMuZ2V0PXQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtkZWxldGUgdGhpcy5nZXR9fX0hZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aWYodSl7cy5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowIix1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjYwJTt0b3A6MSUiLGllLmFwcGVuZENoaWxkKHMpLmFwcGVuZENoaWxkKHUpO3ZhciBlPUMuZ2V0Q29tcHV0ZWRTdHlsZSh1KTtuPSIxJSIhPT1lLnRvcCxhPTEyPT09dChlLm1hcmdpbkxlZnQpLHUuc3R5bGUucmlnaHQ9IjYwJSIsbz0zNj09PXQoZS5yaWdodCkscj0zNj09PXQoZS53aWR0aCksdS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGk9MTI9PT10KHUub2Zmc2V0V2lkdGgvMyksaWUucmVtb3ZlQ2hpbGQocyksdT1udWxsfX1mdW5jdGlvbiB0KGUpe3JldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZSkpfXZhciBuLHIsaSxvLGEscz1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LnN0eWxlJiYodS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLHUuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIix5LmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09dS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxrLmV4dGVuZCh5LHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBlKCkscn0scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG99LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG59LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBlKCksYX0sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiBlKCksaX19KSl9KCk7dmFyIFVlPVsiV2Via2l0IiwiTW96IiwibXMiXSxYZT1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLFZlPXt9O2Z1bmN0aW9uIEdlKGUpe3ZhciB0PWsuY3NzUHJvcHNbZV18fFZlW2VdO3JldHVybiB0fHwoZSBpbiBYZT9lOlZlW2VdPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49VWUubGVuZ3RoO3doaWxlKG4tLSlpZigoZT1VZVtuXSt0KWluIFhlKXJldHVybiBlfShlKXx8ZSl9dmFyIFllPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxRZT0vXi0tLyxKZT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sS2U9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9O2Z1bmN0aW9uIFplKGUsdCxuKXt2YXIgcj1uZS5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsyXS0obnx8MCkpKyhyWzNdfHwicHgiKTp0fWZ1bmN0aW9uIGV0KGUsdCxuLHIsaSxvKXt2YXIgYT0id2lkdGgiPT09dD8xOjAscz0wLHU9MDtpZihuPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKSJtYXJnaW4iPT09biYmKHUrPWsuY3NzKGUsbityZVthXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKHUtPWsuY3NzKGUsInBhZGRpbmciK3JlW2FdLCEwLGkpKSwibWFyZ2luIiE9PW4mJih1LT1rLmNzcyhlLCJib3JkZXIiK3JlW2FdKyJXaWR0aCIsITAsaSkpKToodSs9ay5jc3MoZSwicGFkZGluZyIrcmVbYV0sITAsaSksInBhZGRpbmciIT09bj91Kz1rLmNzcyhlLCJib3JkZXIiK3JlW2FdKyJXaWR0aCIsITAsaSk6cys9ay5jc3MoZSwiYm9yZGVyIityZVthXSsiV2lkdGgiLCEwLGkpKTtyZXR1cm4hciYmMDw9byYmKHUrPU1hdGgubWF4KDAsTWF0aC5jZWlsKGVbIm9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLW8tdS1zLS41KSl8fDApLHV9ZnVuY3Rpb24gdHQoZSx0LG4pe3ZhciByPUZlKGUpLGk9KCF5LmJveFNpemluZ1JlbGlhYmxlKCl8fG4pJiYiYm9yZGVyLWJveCI9PT1rLmNzcyhlLCJib3hTaXppbmciLCExLHIpLG89aSxhPV9lKGUsdCxyKSxzPSJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO2lmKCRlLnRlc3QoYSkpe2lmKCFuKXJldHVybiBhO2E9ImF1dG8ifXJldHVybigheS5ib3hTaXppbmdSZWxpYWJsZSgpJiZpfHwiYXV0byI9PT1hfHwhcGFyc2VGbG9hdChhKSYmImlubGluZSI9PT1rLmNzcyhlLCJkaXNwbGF5IiwhMSxyKSkmJmUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJihpPSJib3JkZXItYm94Ij09PWsuY3NzKGUsImJveFNpemluZyIsITEsciksKG89cyBpbiBlKSYmKGE9ZVtzXSkpLChhPXBhcnNlRmxvYXQoYSl8fDApK2V0KGUsdCxufHwoaT8iYm9yZGVyIjoiY29udGVudCIpLG8scixhKSsicHgifWZ1bmN0aW9uIG50KGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBudC5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfWsuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49X2UoZSwib3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsZ3JpZEFyZWE6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TdGFydDohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1N0YXJ0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1WKHQpLHU9UWUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9R2UocykpLGE9ay5jc3NIb29rc1t0XXx8ay5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiYiZ2V0ImluIGEmJnZvaWQgMCE9PShpPWEuZ2V0KGUsITEscikpP2k6bFt0XTsic3RyaW5nIj09PShvPXR5cGVvZiBuKSYmKGk9bmUuZXhlYyhuKSkmJmlbMV0mJihuPWxlKGUsdCxpKSxvPSJudW1iZXIiKSxudWxsIT1uJiZuPT1uJiYoIm51bWJlciIhPT1vfHx1fHwobis9aSYmaVszXXx8KGsuY3NzTnVtYmVyW3NdPyIiOiJweCIpKSx5LmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChsW3RdPSJpbmhlcml0IiksYSYmInNldCJpbiBhJiZ2b2lkIDA9PT0obj1hLnNldChlLG4scikpfHwodT9sLnNldFByb3BlcnR5KHQsbik6bFt0XT1uKSl9fSxjc3M6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHM9Vih0KTtyZXR1cm4gUWUudGVzdCh0KXx8KHQ9R2UocykpLChhPWsuY3NzSG9va3NbdF18fGsuY3NzSG9va3Nbc10pJiYiZ2V0ImluIGEmJihpPWEuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkmJihpPV9lKGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIEtlJiYoaT1LZVt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksITA9PT1ufHxpc0Zpbml0ZShvKT9vfHwwOmkpOml9fSksay5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHUpe2suY3NzSG9va3NbdV09e2dldDpmdW5jdGlvbihlLHQsbil7aWYodClyZXR1cm4hWWUudGVzdChrLmNzcyhlLCJkaXNwbGF5IikpfHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoP3R0KGUsdSxuKTp1ZShlLEplLGZ1bmN0aW9uKCl7cmV0dXJuIHR0KGUsdSxuKX0pfSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9RmUoZSksbz0heS5zY3JvbGxib3hTaXplKCkmJiJhYnNvbHV0ZSI9PT1pLnBvc2l0aW9uLGE9KG98fG4pJiYiYm9yZGVyLWJveCI9PT1rLmNzcyhlLCJib3hTaXppbmciLCExLGkpLHM9bj9ldChlLHUsbixhLGkpOjA7cmV0dXJuIGEmJm8mJihzLT1NYXRoLmNlaWwoZVsib2Zmc2V0Iit1WzBdLnRvVXBwZXJDYXNlKCkrdS5zbGljZSgxKV0tcGFyc2VGbG9hdChpW3VdKS1ldChlLHUsImJvcmRlciIsITEsaSktLjUpKSxzJiYocj1uZS5leGVjKHQpKSYmInB4IiE9PShyWzNdfHwicHgiKSYmKGUuc3R5bGVbdV09dCx0PWsuY3NzKGUsdSkpLFplKDAsdCxzKX19fSksay5jc3NIb29rcy5tYXJnaW5MZWZ0PXplKHkucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4ocGFyc2VGbG9hdChfZShlLCJtYXJnaW5MZWZ0IikpfHxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdWUoZSx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkrInB4In0pLGsuZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGksbyl7ay5jc3NIb29rc1tpK29dPXtleHBhbmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj17fSxyPSJzdHJpbmciPT10eXBlb2YgZT9lLnNwbGl0KCIgIik6W2VdO3Q8NDt0KyspbltpK3JlW3RdK29dPXJbdF18fHJbdC0yXXx8clswXTtyZXR1cm4gbn19LCJtYXJnaW4iIT09aSYmKGsuY3NzSG9va3NbaStvXS5zZXQ9WmUpfSksay5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiBfKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fSxhPTA7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHI9RmUoZSksaT10Lmxlbmd0aDthPGk7YSsrKW9bdFthXV09ay5jc3MoZSx0W2FdLCExLHIpO3JldHVybiBvfXJldHVybiB2b2lkIDAhPT1uP2suc3R5bGUoZSx0LG4pOmsuY3NzKGUsdCl9LGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfX0pLCgoay5Ud2Vlbj1udCkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpudCxpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHxrLmVhc2luZy5fZGVmYXVsdCx0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KGsuY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1udC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6bnQucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49bnQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz10PWsuZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPXQ9ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpudC5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSkuaW5pdC5wcm90b3R5cGU9bnQucHJvdG90eXBlLChudC5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGwhPWUuZWxlbVtlLnByb3BdJiZudWxsPT1lLmVsZW0uc3R5bGVbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXToodD1rLmNzcyhlLmVsZW0sZS5wcm9wLCIiKSkmJiJhdXRvIiE9PXQ/dDowfSxzZXQ6ZnVuY3Rpb24oZSl7ay5meC5zdGVwW2UucHJvcF0/ay5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5ub2RlVHlwZXx8IWsuY3NzSG9va3NbZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW0dlKGUucHJvcCldP2UuZWxlbVtlLnByb3BdPWUubm93Omsuc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpfX19KS5zY3JvbGxUb3A9bnQucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0say5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfSxfZGVmYXVsdDoic3dpbmcifSxrLmZ4PW50LnByb3RvdHlwZS5pbml0LGsuZnguc3RlcD17fTt2YXIgcnQsaXQsb3QsYXQsc3Q9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLHV0PS9xdWV1ZUhvb2tzJC87ZnVuY3Rpb24gbHQoKXtpdCYmKCExPT09RS5oaWRkZW4mJkMucmVxdWVzdEFuaW1hdGlvbkZyYW1lP0MucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGx0KTpDLnNldFRpbWVvdXQobHQsay5meC5pbnRlcnZhbCksay5meC50aWNrKCkpfWZ1bmN0aW9uIGN0KCl7cmV0dXJuIEMuc2V0VGltZW91dChmdW5jdGlvbigpe3J0PXZvaWQgMH0pLHJ0PURhdGUubm93KCl9ZnVuY3Rpb24gZnQoZSx0KXt2YXIgbixyPTAsaT17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowO3I8NDtyKz0yLXQpaVsibWFyZ2luIisobj1yZVtyXSldPWlbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihpLm9wYWNpdHk9aS53aWR0aD1lKSxpfWZ1bmN0aW9uIHB0KGUsdCxuKXtmb3IodmFyIHIsaT0oZHQudHdlZW5lcnNbdF18fFtdKS5jb25jYXQoZHQudHdlZW5lcnNbIioiXSksbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gZHQobyxlLHQpe3ZhciBuLGEscj0wLGk9ZHQucHJlZmlsdGVycy5sZW5ndGgscz1rLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihhKXJldHVybiExO2Zvcih2YXIgZT1ydHx8Y3QoKSx0PU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi1lKSxuPTEtKHQvbC5kdXJhdGlvbnx8MCkscj0wLGk9bC50d2VlbnMubGVuZ3RoO3I8aTtyKyspbC50d2VlbnNbcl0ucnVuKG4pO3JldHVybiBzLm5vdGlmeVdpdGgobyxbbCxuLHRdKSxuPDEmJmk/dDooaXx8cy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsXSksITEpfSxsPXMucHJvbWlzZSh7ZWxlbTpvLHByb3BzOmsuZXh0ZW5kKHt9LGUpLG9wdHM6ay5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOmsuZWFzaW5nLl9kZWZhdWx0fSx0KSxvcmlnaW5hbFByb3BlcnRpZXM6ZSxvcmlnaW5hbE9wdGlvbnM6dCxzdGFydFRpbWU6cnR8fGN0KCksZHVyYXRpb246dC5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj1rLlR3ZWVuKG8sbC5vcHRzLGUsdCxsLm9wdHMuc3BlY2lhbEVhc2luZ1tlXXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gobiksbn0sc3RvcDpmdW5jdGlvbihlKXt2YXIgdD0wLG49ZT9sLnR3ZWVucy5sZW5ndGg6MDtpZihhKXJldHVybiB0aGlzO2ZvcihhPSEwO3Q8bjt0KyspbC50d2VlbnNbdF0ucnVuKDEpO3JldHVybiBlPyhzLm5vdGlmeVdpdGgobyxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKG8sW2wsZV0pKTpzLnJlamVjdFdpdGgobyxbbCxlXSksdGhpc319KSxjPWwucHJvcHM7Zm9yKCFmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihpPXRbcj1WKG4pXSxvPWVbbl0sQXJyYXkuaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLChhPWsuY3NzSG9va3Nbcl0pJiYiZXhwYW5kImluIGEpZm9yKG4gaW4gbz1hLmV4cGFuZChvKSxkZWxldGUgZVtyXSxvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpO2Vsc2UgdFtyXT1pfShjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtyPGk7cisrKWlmKG49ZHQucHJlZmlsdGVyc1tyXS5jYWxsKGwsbyxjLGwub3B0cykpcmV0dXJuIG0obi5zdG9wKSYmKGsuX3F1ZXVlSG9va3MobC5lbGVtLGwub3B0cy5xdWV1ZSkuc3RvcD1uLnN0b3AuYmluZChuKSksbjtyZXR1cm4gay5tYXAoYyxwdCxsKSxtKGwub3B0cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKG8sbCksbC5wcm9ncmVzcyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyksay5meC50aW1lcihrLmV4dGVuZCh1LHtlbGVtOm8sYW5pbTpsLHF1ZXVlOmwub3B0cy5xdWV1ZX0pKSxsfWsuQW5pbWF0aW9uPWsuZXh0ZW5kKGR0LHt0d2VlbmVyczp7IioiOltmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KTtyZXR1cm4gbGUobi5lbGVtLGUsbmUuZXhlYyh0KSxuKSxufV19LHR3ZWVuZXI6ZnVuY3Rpb24oZSx0KXttKGUpPyh0PWUsZT1bIioiXSk6ZT1lLm1hdGNoKFIpO2Zvcih2YXIgbixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW49ZVtyXSxkdC50d2VlbmVyc1tuXT1kdC50d2VlbmVyc1tuXXx8W10sZHQudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGMsZj0id2lkdGgiaW4gdHx8ImhlaWdodCJpbiB0LHA9dGhpcyxkPXt9LGg9ZS5zdHlsZSxnPWUubm9kZVR5cGUmJnNlKGUpLHY9US5nZXQoZSwiZnhzaG93Iik7Zm9yKHIgaW4gbi5xdWV1ZXx8KG51bGw9PShhPWsuX3F1ZXVlSG9va3MoZSwiZngiKSkudW5xdWV1ZWQmJihhLnVucXVldWVkPTAscz1hLmVtcHR5LmZpcmUsYS5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7YS51bnF1ZXVlZHx8cygpfSksYS51bnF1ZXVlZCsrLHAuYWx3YXlzKGZ1bmN0aW9uKCl7cC5hbHdheXMoZnVuY3Rpb24oKXthLnVucXVldWVkLS0say5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8YS5lbXB0eS5maXJlKCl9KX0pKSx0KWlmKGk9dFtyXSxzdC50ZXN0KGkpKXtpZihkZWxldGUgdFtyXSxvPW98fCJ0b2dnbGUiPT09aSxpPT09KGc/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWl8fCF2fHx2b2lkIDA9PT12W3JdKWNvbnRpbnVlO2c9ITB9ZFtyXT12JiZ2W3JdfHxrLnN0eWxlKGUscil9aWYoKHU9IWsuaXNFbXB0eU9iamVjdCh0KSl8fCFrLmlzRW1wdHlPYmplY3QoZCkpZm9yKHIgaW4gZiYmMT09PWUubm9kZVR5cGUmJihuLm92ZXJmbG93PVtoLm92ZXJmbG93LGgub3ZlcmZsb3dYLGgub3ZlcmZsb3dZXSxudWxsPT0obD12JiZ2LmRpc3BsYXkpJiYobD1RLmdldChlLCJkaXNwbGF5IikpLCJub25lIj09PShjPWsuY3NzKGUsImRpc3BsYXkiKSkmJihsP2M9bDooZmUoW2VdLCEwKSxsPWUuc3R5bGUuZGlzcGxheXx8bCxjPWsuY3NzKGUsImRpc3BsYXkiKSxmZShbZV0pKSksKCJpbmxpbmUiPT09Y3x8ImlubGluZS1ibG9jayI9PT1jJiZudWxsIT1sKSYmIm5vbmUiPT09ay5jc3MoZSwiZmxvYXQiKSYmKHV8fChwLmRvbmUoZnVuY3Rpb24oKXtoLmRpc3BsYXk9bH0pLG51bGw9PWwmJihjPWguZGlzcGxheSxsPSJub25lIj09PWM/IiI6YykpLGguZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihoLm92ZXJmbG93PSJoaWRkZW4iLHAuYWx3YXlzKGZ1bmN0aW9uKCl7aC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGgub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0saC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKSx1PSExLGQpdXx8KHY/ImhpZGRlbiJpbiB2JiYoZz12LmhpZGRlbik6dj1RLmFjY2VzcyhlLCJmeHNob3ciLHtkaXNwbGF5Omx9KSxvJiYodi5oaWRkZW49IWcpLGcmJmZlKFtlXSwhMCkscC5kb25lKGZ1bmN0aW9uKCl7Zm9yKHIgaW4gZ3x8ZmUoW2VdKSxRLnJlbW92ZShlLCJmeHNob3ciKSxkKWsuc3R5bGUoZSxyLGRbcl0pfSkpLHU9cHQoZz92W3JdOjAscixwKSxyIGluIHZ8fCh2W3JdPXUuc3RhcnQsZyYmKHUuZW5kPXUuc3RhcnQsdS5zdGFydD0wKSl9XSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P2R0LnByZWZpbHRlcnMudW5zaGlmdChlKTpkdC5wcmVmaWx0ZXJzLnB1c2goZSl9fSksay5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP2suZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8bShlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYhbSh0KSYmdH07cmV0dXJuIGsuZngub2ZmP3IuZHVyYXRpb249MDoibnVtYmVyIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIGsuZnguc3BlZWRzP3IuZHVyYXRpb249ay5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJhdGlvbj1rLmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXttKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZrLmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0say5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoc2UpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWsuaXNFbXB0eU9iamVjdCh0KSxvPWsuc3BlZWQoZSxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgZT1kdCh0aGlzLGsuZXh0ZW5kKHt9LHQpLG8pOyhpfHxRLmdldCh0aGlzLCJmaW5pc2giKSkmJmUuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGksZSxvKXt2YXIgYT1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG8pfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGkmJihvPWUsZT1pLGk9dm9pZCAwKSxlJiYhMSE9PWkmJnRoaXMucXVldWUoaXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9ITAsdD1udWxsIT1pJiZpKyJxdWV1ZUhvb2tzIixuPWsudGltZXJzLHI9US5nZXQodGhpcyk7aWYodClyW3RdJiZyW3RdLnN0b3AmJmEoclt0XSk7ZWxzZSBmb3IodCBpbiByKXJbdF0mJnJbdF0uc3RvcCYmdXQudGVzdCh0KSYmYShyW3RdKTtmb3IodD1uLmxlbmd0aDt0LS07KW5bdF0uZWxlbSE9PXRoaXN8fG51bGwhPWkmJm5bdF0ucXVldWUhPT1pfHwoblt0XS5hbmltLnN0b3AobyksZT0hMSxuLnNwbGljZSh0LDEpKTshZSYmb3x8ay5kZXF1ZXVlKHRoaXMsaSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiExIT09YSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdD1RLmdldCh0aGlzKSxuPXRbYSsicXVldWUiXSxyPXRbYSsicXVldWVIb29rcyJdLGk9ay50aW1lcnMsbz1uP24ubGVuZ3RoOjA7Zm9yKHQuZmluaXNoPSEwLGsucXVldWUodGhpcyxhLFtdKSxyJiZyLnN0b3AmJnIuc3RvcC5jYWxsKHRoaXMsITApLGU9aS5sZW5ndGg7ZS0tOylpW2VdLmVsZW09PT10aGlzJiZpW2VdLnF1ZXVlPT09YSYmKGlbZV0uYW5pbS5zdG9wKCEwKSxpLnNwbGljZShlLDEpKTtmb3IoZT0wO2U8bztlKyspbltlXSYmbltlXS5maW5pc2gmJm5bZV0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIHQuZmluaXNofSl9fSksay5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHIpe3ZhciBpPWsuZm5bcl07ay5mbltyXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGZ0KHIsITApLGUsdCxuKX19KSxrLmVhY2goe3NsaWRlRG93bjpmdCgic2hvdyIpLHNsaWRlVXA6ZnQoImhpZGUiKSxzbGlkZVRvZ2dsZTpmdCgidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHIpe2suZm5bZV09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmFuaW1hdGUocixlLHQsbil9fSksay50aW1lcnM9W10say5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD0wLG49ay50aW1lcnM7Zm9yKHJ0PURhdGUubm93KCk7dDxuLmxlbmd0aDt0KyspKGU9blt0XSkoKXx8blt0XSE9PWV8fG4uc3BsaWNlKHQtLSwxKTtuLmxlbmd0aHx8ay5meC5zdG9wKCkscnQ9dm9pZCAwfSxrLmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2sudGltZXJzLnB1c2goZSksay5meC5zdGFydCgpfSxrLmZ4LmludGVydmFsPTEzLGsuZnguc3RhcnQ9ZnVuY3Rpb24oKXtpdHx8KGl0PSEwLGx0KCkpfSxrLmZ4LnN0b3A9ZnVuY3Rpb24oKXtpdD1udWxsfSxrLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxrLmZuLmRlbGF5PWZ1bmN0aW9uKHIsZSl7cmV0dXJuIHI9ay5meCYmay5meC5zcGVlZHNbcl18fHIsZT1lfHwiZngiLHRoaXMucXVldWUoZSxmdW5jdGlvbihlLHQpe3ZhciBuPUMuc2V0VGltZW91dChlLHIpO3Quc3RvcD1mdW5jdGlvbigpe0MuY2xlYXJUaW1lb3V0KG4pfX0pfSxvdD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYXQ9RS5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChFLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxvdC50eXBlPSJjaGVja2JveCIseS5jaGVja09uPSIiIT09b3QudmFsdWUseS5vcHRTZWxlY3RlZD1hdC5zZWxlY3RlZCwob3Q9RS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS52YWx1ZT0idCIsb3QudHlwZT0icmFkaW8iLHkucmFkaW9WYWx1ZT0idCI9PT1vdC52YWx1ZTt2YXIgaHQsZ3Q9ay5leHByLmF0dHJIYW5kbGU7ay5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gXyh0aGlzLGsuYXR0cixlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ay5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSxrLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGUuZ2V0QXR0cmlidXRlP2sucHJvcChlLHQsbik6KDE9PT1vJiZrLmlzWE1MRG9jKGUpfHwoaT1rLmF0dHJIb29rc1t0LnRvTG93ZXJDYXNlKCldfHwoay5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9odDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgay5yZW1vdmVBdHRyKGUsdCk6aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6KGUuc2V0QXR0cmlidXRlKHQsbisiIiksbik6aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjpudWxsPT0ocj1rLmZpbmQuYXR0cihlLHQpKT92b2lkIDA6cil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXkucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJkEoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10JiZ0Lm1hdGNoKFIpO2lmKGkmJjE9PT1lLm5vZGVUeXBlKXdoaWxlKG49aVtyKytdKWUucmVtb3ZlQXR0cmlidXRlKG4pfX0pLGh0PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD9rLnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSxrLmVhY2goay5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgYT1ndFt0XXx8ay5maW5kLmF0dHI7Z3RbdF09ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIG58fChpPWd0W29dLGd0W29dPXIscj1udWxsIT1hKGUsdCxuKT9vOm51bGwsZ3Rbb109aSkscn19KTt2YXIgdnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSx5dD0vXig/OmF8YXJlYSkkL2k7ZnVuY3Rpb24gbXQoZSl7cmV0dXJuKGUubWF0Y2goUil8fFtdKS5qb2luKCIgIil9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiJ9ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZToic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goUil8fFtdfWsuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIF8odGhpcyxrLnByb3AsZSx0LDE8YXJndW1lbnRzLmxlbmd0aCl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2sucHJvcEZpeFtlXXx8ZV19KX19KSxrLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4gMT09PW8mJmsuaXNYTUxEb2MoZSl8fCh0PWsucHJvcEZpeFt0XXx8dCxpPWsucHJvcEhvb2tzW3RdKSx2b2lkIDAhPT1uP2kmJiJzZXQiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOmVbdF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD1rLmZpbmQuYXR0cihlLCJ0YWJpbmRleCIpO3JldHVybiB0P3BhcnNlSW50KHQsMTApOnZ0LnRlc3QoZS5ub2RlTmFtZSl8fHl0LnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOi0xfX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifX0pLHkub3B0U2VsZWN0ZWR8fChrLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3QmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksay5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtrLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSksay5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYSxzLHU9MDtpZihtKHQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7ayh0aGlzKS5hZGRDbGFzcyh0LmNhbGwodGhpcyxlLHh0KHRoaXMpKSl9KTtpZigoZT1idCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9eHQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK210KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXIuaW5kZXhPZigiICIrbysiICIpPDAmJihyKz1vKyIgIik7aSE9PShzPW10KHIpKSYmbi5zZXRBdHRyaWJ1dGUoImNsYXNzIixzKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLnJlbW92ZUNsYXNzKHQuY2FsbCh0aGlzLGUseHQodGhpcykpKX0pO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLmF0dHIoImNsYXNzIiwiIik7aWYoKGU9YnQodCkpLmxlbmd0aCl3aGlsZShuPXRoaXNbdSsrXSlpZihpPXh0KG4pLHI9MT09PW4ubm9kZVR5cGUmJiIgIittdChpKSsiICIpe2E9MDt3aGlsZShvPWVbYSsrXSl3aGlsZSgtMTxyLmluZGV4T2YoIiAiK28rIiAiKSlyPXIucmVwbGFjZSgiICIrbysiICIsIiAiKTtpIT09KHM9bXQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihpLHQpe3ZhciBvPXR5cGVvZiBpLGE9InN0cmluZyI9PT1vfHxBcnJheS5pc0FycmF5KGkpO3JldHVybiJib29sZWFuIj09dHlwZW9mIHQmJmE/dD90aGlzLmFkZENsYXNzKGkpOnRoaXMucmVtb3ZlQ2xhc3MoaSk6bShpKT90aGlzLmVhY2goZnVuY3Rpb24oZSl7ayh0aGlzKS50b2dnbGVDbGFzcyhpLmNhbGwodGhpcyxlLHh0KHRoaXMpLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7aWYoYSl7dD0wLG49ayh0aGlzKSxyPWJ0KGkpO3doaWxlKGU9clt0KytdKW4uaGFzQ2xhc3MoZSk/bi5yZW1vdmVDbGFzcyhlKTpuLmFkZENsYXNzKGUpfWVsc2Ugdm9pZCAwIT09aSYmImJvb2xlYW4iIT09b3x8KChlPXh0KHRoaXMpKSYmUS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsZSksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKCJjbGFzcyIsZXx8ITE9PT1pPyIiOlEuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpKX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHI9MDt0PSIgIitlKyIgIjt3aGlsZShuPXRoaXNbcisrXSlpZigxPT09bi5ub2RlVHlwZSYmLTE8KCIgIittdCh4dChuKSkrIiAiKS5pbmRleE9mKHQpKXJldHVybiEwO3JldHVybiExfX0pO3ZhciB3dD0vXHIvZztrLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKG4pe3ZhciByLGUsaSx0PXRoaXNbMF07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bShuKSx0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ7MT09PXRoaXMubm9kZVR5cGUmJihudWxsPT0odD1pP24uY2FsbCh0aGlzLGUsayh0aGlzKS52YWwoKSk6bik/dD0iIjoibnVtYmVyIj09dHlwZW9mIHQ/dCs9IiI6QXJyYXkuaXNBcnJheSh0KSYmKHQ9ay5tYXAodCxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifSkpLChyPWsudmFsSG9va3NbdGhpcy50eXBlXXx8ay52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmInNldCJpbiByJiZ2b2lkIDAhPT1yLnNldCh0aGlzLHQsInZhbHVlIil8fCh0aGlzLnZhbHVlPXQpKX0pKTp0PyhyPWsudmFsSG9va3NbdC50eXBlXXx8ay52YWxIb29rc1t0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmImdldCJpbiByJiZ2b2lkIDAhPT0oZT1yLmdldCh0LCJ2YWx1ZSIpKT9lOiJzdHJpbmciPT10eXBlb2YoZT10LnZhbHVlKT9lLnJlcGxhY2Uod3QsIiIpOm51bGw9PWU/IiI6ZTp2b2lkIDB9fSksay5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD1rLmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVybiBudWxsIT10P3Q6bXQoay50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUub3B0aW9ucyxvPWUuc2VsZWN0ZWRJbmRleCxhPSJzZWxlY3Qtb25lIj09PWUudHlwZSxzPWE/bnVsbDpbXSx1PWE/bysxOmkubGVuZ3RoO2ZvcihyPW88MD91OmE/bzowO3I8dTtyKyspaWYoKChuPWlbcl0pLnNlbGVjdGVkfHxyPT09bykmJiFuLmRpc2FibGVkJiYoIW4ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IUEobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD1rKG4pLnZhbCgpLGEpcmV0dXJuIHQ7cy5wdXNoKHQpfXJldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5vcHRpb25zLG89ay5tYWtlQXJyYXkodCksYT1pLmxlbmd0aDt3aGlsZShhLS0pKChyPWlbYV0pLnNlbGVjdGVkPS0xPGsuaW5BcnJheShrLnZhbEhvb2tzLm9wdGlvbi5nZXQociksbykpJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX19KSxrLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtrLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmNoZWNrZWQ9LTE8ay5pbkFycmF5KGsoZSkudmFsKCksdCl9fSx5LmNoZWNrT258fChrLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSkseS5mb2N1c2luPSJvbmZvY3VzaW4iaW4gQzt2YXIgVHQ9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLEN0PWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9O2suZXh0ZW5kKGsuZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsLGMsZixwPVtufHxFXSxkPXYuY2FsbChlLCJ0eXBlIik/ZS50eXBlOmUsaD12LmNhbGwoZSwibmFtZXNwYWNlIik/ZS5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihvPWY9YT1uPW58fEUsMyE9PW4ubm9kZVR5cGUmJjghPT1uLm5vZGVUeXBlJiYhVHQudGVzdChkK2suZXZlbnQudHJpZ2dlcmVkKSYmKC0xPGQuaW5kZXhPZigiLiIpJiYoZD0oaD1kLnNwbGl0KCIuIikpLnNoaWZ0KCksaC5zb3J0KCkpLHU9ZC5pbmRleE9mKCI6Iik8MCYmIm9uIitkLChlPWVbay5leHBhbmRvXT9lOm5ldyBrLkV2ZW50KGQsIm9iamVjdCI9PXR5cGVvZiBlJiZlKSkuaXNUcmlnZ2VyPXI/MjozLGUubmFtZXNwYWNlPWguam9pbigiLiIpLGUucm5hbWVzcGFjZT1lLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsZS5yZXN1bHQ9dm9pZCAwLGUudGFyZ2V0fHwoZS50YXJnZXQ9biksdD1udWxsPT10P1tlXTprLm1ha2VBcnJheSh0LFtlXSksYz1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LHJ8fCFjLnRyaWdnZXJ8fCExIT09Yy50cmlnZ2VyLmFwcGx5KG4sdCkpKXtpZighciYmIWMubm9CdWJibGUmJiF4KG4pKXtmb3Iocz1jLmRlbGVnYXRlVHlwZXx8ZCxUdC50ZXN0KHMrZCl8fChvPW8ucGFyZW50Tm9kZSk7bztvPW8ucGFyZW50Tm9kZSlwLnB1c2gobyksYT1vO2E9PT0obi5vd25lckRvY3VtZW50fHxFKSYmcC5wdXNoKGEuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93fHxDKX1pPTA7d2hpbGUoKG89cFtpKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlmPW8sZS50eXBlPTE8aT9zOmMuYmluZFR5cGV8fGQsKGw9KFEuZ2V0KG8sImV2ZW50cyIpfHx7fSlbZS50eXBlXSYmUS5nZXQobywiaGFuZGxlIikpJiZsLmFwcGx5KG8sdCksKGw9dSYmb1t1XSkmJmwuYXBwbHkmJkcobykmJihlLnJlc3VsdD1sLmFwcGx5KG8sdCksITE9PT1lLnJlc3VsdCYmZS5wcmV2ZW50RGVmYXVsdCgpKTtyZXR1cm4gZS50eXBlPWQscnx8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Yy5fZGVmYXVsdCYmITEhPT1jLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksdCl8fCFHKG4pfHx1JiZtKG5bZF0pJiYheChuKSYmKChhPW5bdV0pJiYoblt1XT1udWxsKSxrLmV2ZW50LnRyaWdnZXJlZD1kLGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmZi5hZGRFdmVudExpc3RlbmVyKGQsQ3QpLG5bZF0oKSxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLEN0KSxrLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsYSYmKG5bdV09YSkpLGUucmVzdWx0fX0sc2ltdWxhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWsuZXh0ZW5kKG5ldyBrLkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMH0pO2suZXZlbnQudHJpZ2dlcihyLG51bGwsdCl9fSksay5mbi5leHRlbmQoe3RyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ay5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXNbMF07aWYobilyZXR1cm4gay5ldmVudC50cmlnZ2VyKGUsdCxuLCEwKX19KSx5LmZvY3VzaW58fGsuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24obixyKXt2YXIgaT1mdW5jdGlvbihlKXtrLmV2ZW50LnNpbXVsYXRlKHIsZS50YXJnZXQsay5ldmVudC5maXgoZSkpfTtrLmV2ZW50LnNwZWNpYWxbcl09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLHQ9US5hY2Nlc3MoZSxyKTt0fHxlLmFkZEV2ZW50TGlzdGVuZXIobixpLCEwKSxRLmFjY2VzcyhlLHIsKHR8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyx0PVEuYWNjZXNzKGUsciktMTt0P1EuYWNjZXNzKGUscix0KTooZS5yZW1vdmVFdmVudExpc3RlbmVyKG4saSwhMCksUS5yZW1vdmUoZSxyKSl9fX0pO3ZhciBFdD1DLmxvY2F0aW9uLGt0PURhdGUubm93KCksU3Q9L1w/LztrLnBhcnNlWE1MPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e3Q9KG5ldyBDLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIil9Y2F0Y2goZSl7dD12b2lkIDB9cmV0dXJuIHQmJiF0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8ay5lcnJvcigiSW52YWxpZCBYTUw6ICIrZSksdH07dmFyIE50PS9cW1xdJC8sQXQ9L1xyP1xuL2csRHQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGp0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBxdChuLGUscixpKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKWsuZWFjaChlLGZ1bmN0aW9uKGUsdCl7cnx8TnQudGVzdChuKT9pKG4sdCk6cXQobisiWyIrKCJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dD9lOiIiKSsiXSIsdCxyLGkpfSk7ZWxzZSBpZihyfHwib2JqZWN0IiE9PXcoZSkpaShuLGUpO2Vsc2UgZm9yKHQgaW4gZSlxdChuKyJbIit0KyJdIixlW3RdLHIsaSl9ay5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPW0odCk/dCgpOnQ7cltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQobnVsbD09bj8iIjpuKX07aWYobnVsbD09ZSlyZXR1cm4iIjtpZihBcnJheS5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIWsuaXNQbGFpbk9iamVjdChlKSlrLmVhY2goZSxmdW5jdGlvbigpe2kodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IobiBpbiBlKXF0KG4sZVtuXSx0LGkpO3JldHVybiByLmpvaW4oIiYiKX0say5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBrLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9ay5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGU/ay5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhayh0aGlzKS5pcygiOmRpc2FibGVkIikmJmp0LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFEdC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhcGUudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj1rKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1uP251bGw6QXJyYXkuaXNBcnJheShuKT9rLm1hcChuLGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2UoQXQsIlxyXG4iKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKEF0LCJcclxuIil9fSkuZ2V0KCl9fSk7dmFyIEx0PS8lMjAvZyxIdD0vIy4qJC8sT3Q9LyhbPyZdKV89W14mXSovLFB0PS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvZ20sUnQ9L14oPzpHRVR8SEVBRCkkLyxNdD0vXlwvXC8vLEl0PXt9LFd0PXt9LCR0PSIqLyIuY29uY2F0KCIqIiksRnQ9RS5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gQnQobyl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7InN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9IioiKTt2YXIgbixyPTAsaT1lLnRvTG93ZXJDYXNlKCkubWF0Y2goUil8fFtdO2lmKG0odCkpd2hpbGUobj1pW3IrK10pIisiPT09blswXT8obj1uLnNsaWNlKDEpfHwiKiIsKG9bbl09b1tuXXx8W10pLnVuc2hpZnQodCkpOihvW25dPW9bbl18fFtdKS5wdXNoKHQpfX1mdW5jdGlvbiBfdCh0LGksbyxhKXt2YXIgcz17fSx1PXQ9PT1XdDtmdW5jdGlvbiBsKGUpe3ZhciByO3JldHVybiBzW2VdPSEwLGsuZWFjaCh0W2VdfHxbXSxmdW5jdGlvbihlLHQpe3ZhciBuPXQoaSxvLGEpO3JldHVybiJzdHJpbmciIT10eXBlb2Ygbnx8dXx8c1tuXT91PyEocj1uKTp2b2lkIDA6KGkuZGF0YVR5cGVzLnVuc2hpZnQobiksbChuKSwhMSl9KSxyfXJldHVybiBsKGkuZGF0YVR5cGVzWzBdKXx8IXNbIioiXSYmbCgiKiIpfWZ1bmN0aW9uIHp0KGUsdCl7dmFyIG4scixpPWsuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJmsuZXh0ZW5kKCEwLGUsciksZX1GdC5ocmVmPUV0LmhyZWYsay5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOkV0LmhyZWYsdHlwZToiR0VUIixpc0xvY2FsOi9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLnRlc3QoRXQucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6JHQsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6SlNPTi5wYXJzZSwidGV4dCB4bWwiOmsucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P3p0KHp0KGUsay5hamF4U2V0dGluZ3MpLHQpOnp0KGsuYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOkJ0KEl0KSxhamF4VHJhbnNwb3J0OkJ0KFd0KSxhamF4OmZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dm9pZCAwKSx0PXR8fHt9O3ZhciBjLGYscCxuLGQscixoLGcsaSxvLHY9ay5hamF4U2V0dXAoe30sdCkseT12LmNvbnRleHR8fHYsbT12LmNvbnRleHQmJih5Lm5vZGVUeXBlfHx5LmpxdWVyeSk/ayh5KTprLmV2ZW50LHg9ay5EZWZlcnJlZCgpLGI9ay5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksdz12LnN0YXR1c0NvZGV8fHt9LGE9e30scz17fSx1PSJjYW5jZWxlZCIsVD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGgpe2lmKCFuKXtuPXt9O3doaWxlKHQ9UHQuZXhlYyhwKSluW3RbMV0udG9Mb3dlckNhc2UoKSsiICJdPShuW3RbMV0udG9Mb3dlckNhc2UoKSsiICJdfHxbXSkuY29uY2F0KHRbMl0pfXQ9bltlLnRvTG93ZXJDYXNlKCkrIiAiXX1yZXR1cm4gbnVsbD09dD9udWxsOnQuam9pbigiLCAiKX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGg/cDpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWgmJihlPXNbZS50b0xvd2VyQ2FzZSgpXT1zW2UudG9Mb3dlckNhc2UoKV18fGUsYVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1oJiYodi5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoaClULmFsd2F5cyhlW1Quc3RhdHVzXSk7ZWxzZSBmb3IodCBpbiBlKXdbdF09W3dbdF0sZVt0XV07cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fHU7cmV0dXJuIGMmJmMuYWJvcnQodCksbCgwLHQpLHRoaXN9fTtpZih4LnByb21pc2UoVCksdi51cmw9KChlfHx2LnVybHx8RXQuaHJlZikrIiIpLnJlcGxhY2UoTXQsRXQucHJvdG9jb2wrIi8vIiksdi50eXBlPXQubWV0aG9kfHx0LnR5cGV8fHYubWV0aG9kfHx2LnR5cGUsdi5kYXRhVHlwZXM9KHYuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChSKXx8WyIiXSxudWxsPT12LmNyb3NzRG9tYWluKXtyPUUuY3JlYXRlRWxlbWVudCgiYSIpO3RyeXtyLmhyZWY9di51cmwsci5ocmVmPXIuaHJlZix2LmNyb3NzRG9tYWluPUZ0LnByb3RvY29sKyIvLyIrRnQuaG9zdCE9ci5wcm90b2NvbCsiLy8iK3IuaG9zdH1jYXRjaChlKXt2LmNyb3NzRG9tYWluPSEwfX1pZih2LmRhdGEmJnYucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2Ygdi5kYXRhJiYodi5kYXRhPWsucGFyYW0odi5kYXRhLHYudHJhZGl0aW9uYWwpKSxfdChJdCx2LHQsVCksaClyZXR1cm4gVDtmb3IoaSBpbihnPWsuZXZlbnQmJnYuZ2xvYmFsKSYmMD09ay5hY3RpdmUrKyYmay5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSx2LnR5cGU9di50eXBlLnRvVXBwZXJDYXNlKCksdi5oYXNDb250ZW50PSFSdC50ZXN0KHYudHlwZSksZj12LnVybC5yZXBsYWNlKEh0LCIiKSx2Lmhhc0NvbnRlbnQ/di5kYXRhJiZ2LnByb2Nlc3NEYXRhJiYwPT09KHYuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmKHYuZGF0YT12LmRhdGEucmVwbGFjZShMdCwiKyIpKToobz12LnVybC5zbGljZShmLmxlbmd0aCksdi5kYXRhJiYodi5wcm9jZXNzRGF0YXx8InN0cmluZyI9PXR5cGVvZiB2LmRhdGEpJiYoZis9KFN0LnRlc3QoZik/IiYiOiI/Iikrdi5kYXRhLGRlbGV0ZSB2LmRhdGEpLCExPT09di5jYWNoZSYmKGY9Zi5yZXBsYWNlKE90LCIkMSIpLG89KFN0LnRlc3QoZik/IiYiOiI/IikrIl89IitrdCsrK28pLHYudXJsPWYrbyksdi5pZk1vZGlmaWVkJiYoay5sYXN0TW9kaWZpZWRbZl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGsubGFzdE1vZGlmaWVkW2ZdKSxrLmV0YWdbZl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsay5ldGFnW2ZdKSksKHYuZGF0YSYmdi5oYXNDb250ZW50JiYhMSE9PXYuY29udGVudFR5cGV8fHQuY29udGVudFR5cGUpJiZULnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsdi5jb250ZW50VHlwZSksVC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLHYuZGF0YVR5cGVzWzBdJiZ2LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dP3YuYWNjZXB0c1t2LmRhdGFUeXBlc1swXV0rKCIqIiE9PXYuZGF0YVR5cGVzWzBdPyIsICIrJHQrIjsgcT0wLjAxIjoiIik6di5hY2NlcHRzWyIqIl0pLHYuaGVhZGVycylULnNldFJlcXVlc3RIZWFkZXIoaSx2LmhlYWRlcnNbaV0pO2lmKHYuYmVmb3JlU2VuZCYmKCExPT09di5iZWZvcmVTZW5kLmNhbGwoeSxULHYpfHxoKSlyZXR1cm4gVC5hYm9ydCgpO2lmKHU9ImFib3J0IixiLmFkZCh2LmNvbXBsZXRlKSxULmRvbmUodi5zdWNjZXNzKSxULmZhaWwodi5lcnJvciksYz1fdChXdCx2LHQsVCkpe2lmKFQucmVhZHlTdGF0ZT0xLGcmJm0udHJpZ2dlcigiYWpheFNlbmQiLFtULHZdKSxoKXJldHVybiBUO3YuYXN5bmMmJjA8di50aW1lb3V0JiYoZD1DLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtULmFib3J0KCJ0aW1lb3V0Iil9LHYudGltZW91dCkpO3RyeXtoPSExLGMuc2VuZChhLGwpfWNhdGNoKGUpe2lmKGgpdGhyb3cgZTtsKC0xLGUpfX1lbHNlIGwoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGwoZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPXQ7aHx8KGg9ITAsZCYmQy5jbGVhclRpbWVvdXQoZCksYz12b2lkIDAscD1yfHwiIixULnJlYWR5U3RhdGU9MDxlPzQ6MCxpPTIwMDw9ZSYmZTwzMDB8fDMwND09PWUsbiYmKHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5jb250ZW50cyx1PWUuZGF0YVR5cGVzO3doaWxlKCIqIj09PXVbMF0pdS5zaGlmdCgpLHZvaWQgMD09PXImJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihyKWZvcihpIGluIHMpaWYoc1tpXSYmc1tpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpKyIgIit1WzBdXSl7bz1pO2JyZWFrfWF8fChhPWkpfW89b3x8YX1pZihvKXJldHVybiBvIT09dVswXSYmdS51bnNoaWZ0KG8pLG5bb119KHYsVCxuKSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoay5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKGsuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLWsuYWN0aXZlfHxrLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGsuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBrLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxrLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtrW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksay5hamF4KGsuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxrLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxrLl9ldmFsVXJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGsuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0IixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbigpe319LGRhdGFGaWx0ZXI6ZnVuY3Rpb24oZSl7ay5nbG9iYWxFdmFsKGUsdCl9fSl9LGsuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PWsoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1rKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtrKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLGsuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hay5leHByLnBzZXVkb3MudmlzaWJsZShlKX0say5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LGsuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIFV0PXswOjIwMCwxMjIzOjIwNH0sWHQ9ay5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhWHQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gWHQseS5hamF4PVh0PSEhWHQsay5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHxYdCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChVdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksay5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxrLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gay5nbG9iYWxFdmFsKGUpLGV9fX0pLGsuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxrLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1rKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgVnQsR3Q9W10sWXQ9Lyg9KVw/KD89JnwkKXxcP1w/LztrLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9R3QucG9wKCl8fGsuZXhwYW5kbysiXyIra3QrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLGsuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPSExIT09ZS5qc29ucCYmKFl0LnRlc3QoZS51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgZS5kYXRhJiYwPT09KGUuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmWXQudGVzdChlLmRhdGEpJiYiZGF0YSIpO2lmKGF8fCJqc29ucCI9PT1lLmRhdGFUeXBlc1swXSlyZXR1cm4gcj1lLmpzb25wQ2FsbGJhY2s9bShlLmpzb25wQ2FsbGJhY2spP2UuanNvbnBDYWxsYmFjaygpOmUuanNvbnBDYWxsYmFjayxhP2VbYV09ZVthXS5yZXBsYWNlKFl0LCIkMSIrcik6ITEhPT1lLmpzb25wJiYoZS51cmwrPShTdC50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmpzb25wKyI9IityKSxlLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gb3x8ay5lcnJvcihyKyIgd2FzIG5vdCBjYWxsZWQiKSxvWzBdfSxlLmRhdGFUeXBlc1swXT0ianNvbiIsaT1DW3JdLENbcl09ZnVuY3Rpb24oKXtvPWFyZ3VtZW50c30sbi5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1pP2soQykucmVtb3ZlUHJvcChyKTpDW3JdPWksZVtyXSYmKGUuanNvbnBDYWxsYmFjaz10Lmpzb25wQ2FsbGJhY2ssR3QucHVzaChyKSksbyYmbShpKSYmaShvWzBdKSxvPWk9dm9pZCAwfSksInNjcmlwdCJ9KSx5LmNyZWF0ZUhUTUxEb2N1bWVudD0oKFZ0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKS5ib2R5KS5pbm5lckhUTUw9Ijxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IiwyPT09VnQuY2hpbGROb2Rlcy5sZW5ndGgpLGsucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/W106KCJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdHx8KHkuY3JlYXRlSFRNTERvY3VtZW50Pygocj0odD1FLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikpLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSkuaHJlZj1FLmxvY2F0aW9uLmhyZWYsdC5oZWFkLmFwcGVuZENoaWxkKHIpKTp0PUUpLG89IW4mJltdLChpPUQuZXhlYyhlKSk/W3QuY3JlYXRlRWxlbWVudChpWzFdKV06KGk9d2UoW2VdLHQsbyksbyYmby5sZW5ndGgmJmsobykucmVtb3ZlKCksay5tZXJnZShbXSxpLmNoaWxkTm9kZXMpKSk7dmFyIHIsaSxvfSxrLmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPXRoaXMscz1lLmluZGV4T2YoIiAiKTtyZXR1cm4tMTxzJiYocj1tdChlLnNsaWNlKHMpKSxlPWUuc2xpY2UoMCxzKSksbSh0KT8obj10LHQ9dm9pZCAwKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihpPSJQT1NUIiksMDxhLmxlbmd0aCYmay5hamF4KHt1cmw6ZSx0eXBlOml8fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLGEuaHRtbChyP2soIjxkaXY+IikuYXBwZW5kKGsucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuYWx3YXlzKG4mJmZ1bmN0aW9uKGUsdCl7YS5lYWNoKGZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pfSksdGhpc30say5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oZSx0KXtrLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKHQsZSl9fSksay5leHByLnBzZXVkb3MuYW5pbWF0ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGsuZ3JlcChrLnRpbWVycyxmdW5jdGlvbihlKXtyZXR1cm4gdD09PWUuZWxlbX0pLmxlbmd0aH0say5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9ay5jc3MoZSwicG9zaXRpb24iKSxjPWsoZSksZj17fTsic3RhdGljIj09PWwmJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHM9Yy5vZmZzZXQoKSxvPWsuY3NzKGUsInRvcCIpLHU9ay5jc3MoZSwibGVmdCIpLCgiYWJzb2x1dGUiPT09bHx8ImZpeGVkIj09PWwpJiYtMTwobyt1KS5pbmRleE9mKCJhdXRvIik/KGE9KHI9Yy5wb3NpdGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxtKHQpJiYodD10LmNhbGwoZSxuLGsuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LXMubGVmdCtpKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTpjLmNzcyhmKX19LGsuZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihlKXtrLm9mZnNldC5zZXRPZmZzZXQodGhpcyx0LGUpfSk7dmFyIGUsbixyPXRoaXNbMF07cmV0dXJuIHI/ci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD8oZT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LHt0b3A6ZS50b3Arbi5wYWdlWU9mZnNldCxsZWZ0OmUubGVmdCtuLnBhZ2VYT2Zmc2V0fSk6e3RvcDowLGxlZnQ6MH06dm9pZCAwfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbixyPXRoaXNbMF0saT17dG9wOjAsbGVmdDowfTtpZigiZml4ZWQiPT09ay5jc3MociwicG9zaXRpb24iKSl0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt0PXRoaXMub2Zmc2V0KCksbj1yLm93bmVyRG9jdW1lbnQsZT1yLm9mZnNldFBhcmVudHx8bi5kb2N1bWVudEVsZW1lbnQ7d2hpbGUoZSYmKGU9PT1uLmJvZHl8fGU9PT1uLmRvY3VtZW50RWxlbWVudCkmJiJzdGF0aWMiPT09ay5jc3MoZSwicG9zaXRpb24iKSllPWUucGFyZW50Tm9kZTtlJiZlIT09ciYmMT09PWUubm9kZVR5cGUmJigoaT1rKGUpLm9mZnNldCgpKS50b3ArPWsuY3NzKGUsImJvcmRlclRvcFdpZHRoIiwhMCksaS5sZWZ0Kz1rLmNzcyhlLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSl9cmV0dXJue3RvcDp0LnRvcC1pLnRvcC1rLmNzcyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1pLmxlZnQtay5jc3MociwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50O3doaWxlKGUmJiJzdGF0aWMiPT09ay5jc3MoZSwicG9zaXRpb24iKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxpZX0pfX0pLGsuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbih0LGkpe3ZhciBvPSJwYWdlWU9mZnNldCI9PT1pO2suZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIF8odGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoeChlKT9yPWU6OT09PWUubm9kZVR5cGUmJihyPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PW4pcmV0dXJuIHI/cltpXTplW3RdO3I/ci5zY3JvbGxUbyhvP3IucGFnZVhPZmZzZXQ6bixvP246ci5wYWdlWU9mZnNldCk6ZVt0XT1ufSx0LGUsYXJndW1lbnRzLmxlbmd0aCl9fSksay5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsbil7ay5jc3NIb29rc1tuXT16ZSh5LnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiB0PV9lKGUsbiksJGUudGVzdCh0KT9rKGUpLnBvc2l0aW9uKClbbl0rInB4Ijp0fSl9KSxrLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLHMpe2suZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpzLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24ocixvKXtrLmZuW29dPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCYmKHJ8fCJib29sZWFuIiE9dHlwZW9mIGUpLGk9cnx8KCEwPT09ZXx8ITA9PT10PyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gXyh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4geChlKT8wPT09by5pbmRleE9mKCJvdXRlciIpP2VbImlubmVyIithXTplLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09ZS5ub2RlVHlwZT8ocj1lLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChlLmJvZHlbInNjcm9sbCIrYV0sclsic2Nyb2xsIithXSxlLmJvZHlbIm9mZnNldCIrYV0sclsib2Zmc2V0IithXSxyWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09bj9rLmNzcyhlLHQsaSk6ay5zdHlsZShlLHQsbixpKX0scyxuP2U6dm9pZCAwLG4pfX0pfSksay5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsbil7ay5mbltuXT1mdW5jdGlvbihlLHQpe3JldHVybiAwPGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vbihuLG51bGwsZSx0KTp0aGlzLnRyaWdnZXIobil9fSksay5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLGsuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KSxrLnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxtKGUpKXJldHVybiByPXMuY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHMuY2FsbChhcmd1bWVudHMpKSl9KS5ndWlkPWUuZ3VpZD1lLmd1aWR8fGsuZ3VpZCsrLGl9LGsuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/ay5yZWFkeVdhaXQrKzprLnJlYWR5KCEwKX0say5pc0FycmF5PUFycmF5LmlzQXJyYXksay5wYXJzZUpTT049SlNPTi5wYXJzZSxrLm5vZGVOYW1lPUEsay5pc0Z1bmN0aW9uPW0say5pc1dpbmRvdz14LGsuY2FtZWxDYXNlPVYsay50eXBlPXcsay5ub3c9RGF0ZS5ub3csay5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9ay50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4ga30pO3ZhciBRdD1DLmpRdWVyeSxKdD1DLiQ7cmV0dXJuIGsubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gQy4kPT09ayYmKEMuJD1KdCksZSYmQy5qUXVlcnk9PT1rJiYoQy5qUXVlcnk9UXQpLGt9LGV8fChDLmpRdWVyeT1DLiQ9ayksa30pOwo=\"></script>\n",
       "<script title=\"crosstalk\" src=\"data:application/javascript;base64,IWZ1bmN0aW9uIG8odSxhLGwpe2Z1bmN0aW9uIHMobixlKXtpZighYVtuXSl7aWYoIXVbbl0pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFlJiZ0KXJldHVybiB0KG4sITApO2lmKGYpcmV0dXJuIGYobiwhMCk7dmFyIHI9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbisiJyIpO3Rocm93IHIuY29kZT0iTU9EVUxFX05PVF9GT1VORCIscn12YXIgaT1hW25dPXtleHBvcnRzOnt9fTt1W25dWzBdLmNhbGwoaS5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXVbbl1bMV1bZV07cmV0dXJuIHModHx8ZSl9LGksaS5leHBvcnRzLG8sdSxhLGwpfXJldHVybiBhW25dLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGwubGVuZ3RoO2UrKylzKGxbZV0pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCk7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fdHlwZXM9e30sdGhpcy5fc2VxPTB9cmV0dXJuIHIoZSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdHlwZXNbZV07bnx8KG49dGhpcy5fdHlwZXNbZV09e30pO3ZhciByPSJzdWIiK3RoaXMuX3NlcSsrO3JldHVybiBuW3JdPXQscn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90eXBlc1tlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl7Zm9yKHZhciByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSYmbltyXT09PXQpcmV0dXJuIGRlbGV0ZSBuW3JdLHI7cmV0dXJuITF9aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiEoIW58fCFuW3RdKSYmKGRlbGV0ZSBuW3RdLHQpO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIGZvciBsaXN0ZW5lciIpfX0se2tleToidHJpZ2dlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3R5cGVzW2VdO2Zvcih2YXIgaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJnJbaV0uY2FsbChuLHQpfX1dKSxlfSgpO24uZGVmYXVsdD1pfSx7fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5GaWx0ZXJIYW5kbGU9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGk9bChlKCIuL2V2ZW50cyIpKSxvPWwoZSgiLi9maWx0ZXJzZXQiKSksdT1sKGUoIi4vZ3JvdXAiKSksYT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPTE7bi5GaWx0ZXJIYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IGEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPWEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5faWQ9ImZpbHRlciIrcysrLHRoaXMuc2V0R3JvdXAoZSl9cmV0dXJuIHIobixbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzO2lmKHRoaXMuX2dyb3VwIT09ZSYmKCh0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl9maWx0ZXJWYXImJih0aGlzLl9maWx0ZXJWYXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLmNsZWFyKCksdGhpcy5fdmFyT25DaGFuZ2VTdWI9bnVsbCx0aGlzLl9maWx0ZXJWYXI9bnVsbCx0aGlzLl9maWx0ZXJTZXQ9bnVsbCksdGhpcy5fZ3JvdXA9ZSkpKXtlPSgwLHUuZGVmYXVsdCkoZSksdGhpcy5fZmlsdGVyU2V0PSh0PWUudmFyKCJmaWx0ZXJzZXQiKSwobj10LmdldCgpKXx8KG49bmV3IG8uZGVmYXVsdCx0LnNldChuKSksbiksdGhpcy5fZmlsdGVyVmFyPSgwLHUuZGVmYXVsdCkoZSkudmFyKCJmaWx0ZXIiKTt2YXIgaT10aGlzLl9maWx0ZXJWYXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7ci5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUscil9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1pfX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShlKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxlKSx0aGlzLl9vbkNoYW5nZSh0KSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihlLHQpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihlLHQpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGUpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksbn0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxhPWUoIi4vdXRpbCIpO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZT09PXQ/MDplPHQ/LTE6dDxlPzE6dm9pZCAwfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gcihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzPXt9LHRoaXMuX2tleXM9e30sdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl9hY3RpdmVIYW5kbGVzPTB9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7bnVsbCE9PXQmJih0PXQuc2xpY2UoMCkpLnNvcnQobCk7dmFyIG49KDAsYS5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbZV0sdCkscj1uLmFkZGVkLGk9bi5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbZV09dDtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl0aGlzLl9rZXlzW3Jbb11dPSh0aGlzLl9rZXlzW3Jbb11dfHwwKSsxO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXRoaXMuX2tleXNbaVt1XV0tLTt0aGlzLl91cGRhdGVWYWx1ZSh0KX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyx0PU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09dCl0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3RoaXMuX2tleXNbZVtuXV09PT10JiZ0aGlzLl92YWx1ZS5wdXNoKGVbbl0pfX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dGhpcy5faGFuZGxlc1tlXSl7dmFyIHQ9dGhpcy5faGFuZGxlc1tlXTt0fHwodD1bXSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5fa2V5c1t0W25dXS0tO2RlbGV0ZSB0aGlzLl9oYW5kbGVzW2VdLHRoaXMuX3VwZGF0ZVZhbHVlKCl9fX0se2tleToidmFsdWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19LHtrZXk6Il9hbGxLZXlzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Qua2V5cyh0aGlzLl9rZXlzKTtyZXR1cm4gZS5zb3J0KGwpLGV9fV0pLGV9KCk7bi5kZWZhdWx0PWl9LHsiLi91dGlsIjoxMX1dLDQ6W2Z1bmN0aW9uKGwsZSxzKXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtzLmRlZmF1bHQ9ZnVuY3Rpb24gZSh0KXt7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1Lmhhc093blByb3BlcnR5KHQpfHwodVt0XT1uZXcgYSh0KSksdVt0XTtpZigib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnIodCkpJiZ0Ll92YXJzJiZ0LnZhcilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYxPT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdKXJldHVybiBlKHRbMF0pO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBncm91cE5hbWUgYXJndW1lbnQiKX19O3ZhciB0LGk9bCgiLi92YXIiKSxvPSh0PWkpJiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fTtlLl9fY3Jvc3N0YWxrX2dyb3Vwcz1lLl9fY3Jvc3N0YWxrX2dyb3Vwc3x8e307dmFyIHU9ZS5fX2Nyb3NzdGFsa19ncm91cHM7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMubmFtZT1lLHRoaXMuX3ZhcnM9e319cmV0dXJuIG4odCxbe2tleToidmFyIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YXIgbmFtZSIpO3JldHVybiB0aGlzLl92YXJzLmhhc093blByb3BlcnR5KGUpfHwodGhpcy5fdmFyc1tlXT1uZXcgby5kZWZhdWx0KHRoaXMsZSkpLHRoaXMuX3ZhcnNbZV19fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoZSl9fV0pLHR9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi92YXIiOjEyfV0sNTpbZnVuY3Rpb24oZixlLGMpeyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0LG49ZigiLi9ncm91cCIpLHI9KHQ9bikmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9LGk9ZigiLi9zZWxlY3Rpb24iKSxvPWYoIi4vZmlsdGVyIiksdT1mKCIuL2lucHV0Iik7ZigiLi9pbnB1dF9zZWxlY3RpemUiKSxmKCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiKSxmKCIuL2lucHV0X3NsaWRlciIpO3ZhciBhPSgwLHIuZGVmYXVsdCkoImRlZmF1bHQiKTtmdW5jdGlvbiBsKGUpe3JldHVybiBhLnZhcihlKX1lLlNoaW55JiZlLlNoaW55LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJ1cGRhdGUtY2xpZW50LXZhbHVlIixmdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGUuZ3JvdXA/KDAsci5kZWZhdWx0KShlLmdyb3VwKS52YXIoZS5uYW1lKS5zZXQoZS52YWx1ZSk6bChlLm5hbWUpLnNldChlLnZhbHVlKX0pO3ZhciBzPXtncm91cDpyLmRlZmF1bHQsdmFyOmwsaGFzOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhcyhlKX0sU2VsZWN0aW9uSGFuZGxlOmkuU2VsZWN0aW9uSGFuZGxlLEZpbHRlckhhbmRsZTpvLkZpbHRlckhhbmRsZSxiaW5kOnUuYmluZH07Yy5kZWZhdWx0PXMsZS5jcm9zc3RhbGs9c30pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9ncm91cCI6NCwiLi9pbnB1dCI6NiwiLi9pbnB1dF9jaGVja2JveGdyb3VwIjo3LCIuL2lucHV0X3NlbGVjdGl6ZSI6OCwiLi9pbnB1dF9zbGlkZXIiOjksIi4vc2VsZWN0aW9uIjoxMH1dLDY6W2Z1bmN0aW9uKGUsdCxhKXsoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxhLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3JbZS5jbGFzc05hbWVdPWUsdC5kb2N1bWVudCYmImNvbXBsZXRlIiE9PXQuZG9jdW1lbnQucmVhZHlTdGF0ZT9vKGZ1bmN0aW9uKCl7bigpfSk6dC5kb2N1bWVudCYmc2V0VGltZW91dChuLDEwMCl9LGEuYmluZD1uO3ZhciBvPXQualF1ZXJ5LHI9e307ZnVuY3Rpb24gbigpe09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cltlXTtvKCIuIituLmNsYXNzTmFtZSkubm90KCIuY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikuZWFjaChmdW5jdGlvbihlLHQpe2kobix0KX0pfSl9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPW8odCkuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIit0LmlkLnJlcGxhY2UoLyhbISIjJCUmJygpKissLi86Ozw9Pj9AW1xcXF1eYHt8fX5dKS9nLCJcXCQxIikrIiddIikscj1KU09OLnBhcnNlKG5bMF0uaW5uZXJUZXh0KSxpPWUuZmFjdG9yeSh0LHIpO28odCkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIixpKSxvKHQpLmFkZENsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKX1pZih0LlNoaW55KXt2YXIgZT1uZXcgdC5TaGlueS5JbnB1dEJpbmRpbmcsdT10LmpRdWVyeTt1LmV4dGVuZChlLHtmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpLmZpbmQoIi5jcm9zc3RhbGstaW5wdXQiKX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgdCxuO3UoZSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHwobj1vKHQ9ZSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXtuLmhhc0NsYXNzKGUpJiYhbi5oYXNDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikmJmkocltlXSx0KX0pKX0sZ2V0SWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9LGdldFZhbHVlOmZ1bmN0aW9uKGUpe30sc2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt9LHJlY2VpdmVNZXNzYWdlOmZ1bmN0aW9uKGUsdCl7fSxzdWJzY3JpYmU6ZnVuY3Rpb24oZSx0KXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnJlc3VtZSgpfSx1bnN1YnNjcmliZTpmdW5jdGlvbihlKXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnN1c3BlbmQoKX19KSx0LlNoaW55LmlucHV0QmluZGluZ3MucmVnaXN0ZXIoZSwiY3Jvc3N0YWxrLmlucHV0QmluZGluZyIpfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDc6W2Z1bmN0aW9uKHIsZSx0KXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShyKCIuL2lucHV0IikpLG49cigiLi9maWx0ZXIiKTt2YXIgYT1lLmpRdWVyeTt0LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1jaGVja2JveGdyb3VwIixmYWN0b3J5OmZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IG4uRmlsdGVySGFuZGxlKHIuZ3JvdXApLG89dm9pZCAwLHU9YShlKTtyZXR1cm4gdS5vbigiY2hhbmdlIiwiaW5wdXRbdHlwZT0nY2hlY2tib3gnXSIsZnVuY3Rpb24oKXt2YXIgZT11LmZpbmQoImlucHV0W3R5cGU9J2NoZWNrYm94J106Y2hlY2tlZCIpO2lmKDA9PT1lLmxlbmd0aClvPW51bGwsaS5jbGVhcigpO2Vsc2V7dmFyIHQ9e307ZS5lYWNoKGZ1bmN0aW9uKCl7ci5tYXBbdGhpcy52YWx1ZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLnNvcnQoKSxvPW4saS5zZXQobil9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXtpLmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe28mJmkuc2V0KG8pfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjZ9XSw4OltmdW5jdGlvbihyLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1uKHIoIi4vaW5wdXQiKSksbD1uKHIoIi4vdXRpbCIpKSxzPXIoIi4vZmlsdGVyIik7ZnVuY3Rpb24gbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9dmFyIGY9ZS5qUXVlcnk7dC5yZWdpc3Rlcih7Y2xhc3NOYW1lOiJjcm9zc3RhbGstaW5wdXQtc2VsZWN0IixmYWN0b3J5OmZ1bmN0aW9uKGUsbil7dmFyIHQ9bC5kYXRhZnJhbWVUb0QzKG4uaXRlbXMpLHI9e29wdGlvbnM6W3t2YWx1ZToiIixsYWJlbDoiKEFsbCkifV0uY29uY2F0KHQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0saT1mKGUpLmZpbmQoInNlbGVjdCIpWzBdLG89ZihpKS5zZWxlY3RpemUocilbMF0uc2VsZWN0aXplLHU9bmV3IHMuRmlsdGVySGFuZGxlKG4uZ3JvdXApLGE9dm9pZCAwO3JldHVybiBvLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7aWYoMD09PW8uaXRlbXMubGVuZ3RoKWE9bnVsbCx1LmNsZWFyKCk7ZWxzZXt2YXIgdD17fTtvLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7bi5tYXBbZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgZT1PYmplY3Qua2V5cyh0KTtlLnNvcnQoKSxhPWUsdS5zZXQoZSl9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXt1LmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe2EmJnUuc2V0KGEpfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjYsIi4vdXRpbCI6MTF9XSw5OltmdW5jdGlvbihuLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyPSEwLGk9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0odT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2godS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe2k9ITAsbz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIG59KGUsdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSx0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShuKCIuL2lucHV0IikpLGE9bigiLi9maWx0ZXIiKTt2YXIgdj1lLmpRdWVyeSxwPWUuc3RyZnRpbWU7ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbj1lLnRvU3RyaW5nKCk7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn10LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oZSxsKXt2YXIgcz1uZXcgYS5GaWx0ZXJIYW5kbGUobC5ncm91cCksdD17fSxmPXYoZSkuZmluZCgiaW5wdXQiKSxuPWYuZGF0YSgiZGF0YS10eXBlIikscj1mLmRhdGEoInRpbWUtZm9ybWF0IiksaT1mLmRhdGEoInJvdW5kIiksbz12b2lkIDA7aWYoImRhdGUiPT09bilvPXAudXRjKCksdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX07ZWxzZSBpZigiZGF0ZXRpbWUiPT09bil7dmFyIHU9Zi5kYXRhKCJ0aW1lem9uZSIpO289dT9wLnRpbWV6b25lKHUpOnAsdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX19ZWxzZSJudW1iZXIiPT09biYmdm9pZCAwIT09aSYmKHQucHJldHRpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5wb3coMTAsaSk7cmV0dXJuIE1hdGgucm91bmQoZSp0KS90fSk7ZnVuY3Rpb24gYygpe3ZhciBlPWYuZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5yZXN1bHQsdD12b2lkIDAsbj1mLmRhdGEoImRhdGEtdHlwZSIpO3JldHVybiB0PSJkYXRlIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9bmV3IERhdGUoK2UpKWluc3RhbmNlb2YgRGF0ZT90LmdldFVUQ0Z1bGxZZWFyKCkrIi0iK3kodC5nZXRVVENNb250aCgpKzEsMikrIi0iK3kodC5nZXRVVENEYXRlKCksMik6bnVsbDt2YXIgdH06ImRhdGV0aW1lIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuK2UvMWUzfTpmdW5jdGlvbihlKXtyZXR1cm4rZX0sImRvdWJsZSI9PT1mLmRhdGEoImlvblJhbmdlU2xpZGVyIikub3B0aW9ucy50eXBlP1t0KGUuZnJvbSksdChlLnRvKV06dChlLmZyb20pfWYuaW9uUmFuZ2VTbGlkZXIodCk7dmFyIGg9bnVsbDtyZXR1cm4gZi5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihlKXtpZighZi5kYXRhKCJ1cGRhdGluZyIpJiYhZi5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciB0PWMoKSxuPWQodCwyKSxyPW5bMF0saT1uWzFdLG89W10sdT0wO3U8bC52YWx1ZXMubGVuZ3RoO3UrKyl7dmFyIGE9bC52YWx1ZXNbdV07cjw9YSYmYTw9aSYmby5wdXNoKGwua2V5c1t1XSl9by5zb3J0KCkscy5zZXQobyksaD1vfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7cy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtoJiZzLnNldChoKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uU2VsZWN0aW9uSGFuZGxlPXZvaWQgMDt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxpPWEoZSgiLi9ldmVudHMiKSksbz1hKGUoIi4vZ3JvdXAiKSksdT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW4uU2VsZWN0aW9uSGFuZGxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHUuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXUuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5zZXRHcm91cChlKX1yZXR1cm4gcihuLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLl9ncm91cCE9PWUmJih0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1lKSl7dGhpcy5fdmFyPSgwLG8uZGVmYXVsdCkoZSkudmFyKCJzZWxlY3Rpb24iKTt2YXIgbj10aGlzLl92YXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dC5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUsdCl9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1ufX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoZSx0aGlzLl9tZXJnZUV4dHJhSW5mbyh0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oZSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oZSx0KX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoZSx0KX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxufSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O2Z1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PTE7dDxlLmxlbmd0aDt0KyspaWYoZVt0XTw9ZVt0LTFdKXRocm93IG5ldyBFcnJvcigiTGlzdCBpcyBub3Qgc29ydGVkIG9yIGNvbnRhaW5zIGR1cGxpY2F0ZSIpfW4uZXh0ZW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoMTx0P3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKG51bGwhPW8pZm9yKHZhciB1IGluIG8pby5oYXNPd25Qcm9wZXJ0eSh1KSYmKGVbdV09b1t1XSl9cmV0dXJuIGV9LG4uY2hlY2tTb3J0ZWQ9dSxuLmRpZmZTb3J0ZWRMaXN0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0wO2V8fChlPVtdKTt0fHwodD1bXSk7dmFyIGk9W10sbz1bXTt1KGUpLHUodCk7Zm9yKDtuPGUubGVuZ3RoJiZyPHQubGVuZ3RoOyllW25dPT09dFtyXT8obisrLHIrKyk6ZVtuXTx0W3JdP2kucHVzaChlW24rK10pOm8ucHVzaCh0W3IrK10pO248ZS5sZW5ndGgmJihpPWkuY29uY2F0KGUuc2xpY2UobikpKTtyPHQubGVuZ3RoJiYobz1vLmNvbmNhdCh0LnNsaWNlKHIpKSk7cmV0dXJue3JlbW92ZWQ6aSxhZGRlZDpvfX0sbi5kYXRhZnJhbWVUb0QzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49dm9pZCAwO2Zvcih2YXIgciBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KHIpJiZ0LnB1c2gociksIm9iamVjdCIhPT1sKGVbcl0pfHx2b2lkIDA9PT1lW3JdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTtpZih2b2lkIDAhPT1uJiZuIT09ZVtyXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO249ZVtyXS5sZW5ndGh9Zm9yKHZhciBpPVtdLG89dm9pZCAwLHU9MDt1PG47dSsrKXtvPXt9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKW9bdFthXV09ZVt0W2FdXVt1XTtpLnB1c2gobyl9cmV0dXJuIGl9O24uU3Vic2NyaXB0aW9uVHJhY2tlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5fZW1pdHRlcj1lLHRoaXMuX3N1YnM9e319cmV0dXJuIHIodCxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZW1pdHRlci5vbihlLHQpO3JldHVybiB0aGlzLl9zdWJzW25dPWUsbn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9lbWl0dGVyLm9mZihlLHQpO3JldHVybiBuJiZkZWxldGUgdGhpcy5fc3Vic1tuXSxufX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll9lbWl0dGVyLm9mZihuW2VdLGUpfSl9fV0pLHR9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxlLGwpeyhmdW5jdGlvbihvKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlLHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCksbj1hKCIuL2V2ZW50cyIpLGk9KGU9bikmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9O3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsciksdGhpcy5fZ3JvdXA9ZSx0aGlzLl9uYW1lPXQsdGhpcy5fdmFsdWU9bix0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gdChyLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX3ZhbHVlIT09ZSl7dmFyIG49dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9ZTt2YXIgcj17fTtpZih0JiYib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnUodCkpKWZvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPXRbaV0pO3Iub2xkVmFsdWU9bixyLnZhbHVlPWUsdGhpcy5fZXZlbnRzLnRyaWdnZXIoImNoYW5nZSIscix0aGlzKSxvLlNoaW55JiZvLlNoaW55Lm9uSW5wdXRDaGFuZ2UmJm8uU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLSIrKG51bGwhPT10aGlzLl9ncm91cC5uYW1lP3RoaXMuX2dyb3VwLm5hbWUrIi0iOiIiKSt0aGlzLl9uYW1lLHZvaWQgMD09PWU/bnVsbDplKX19fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZXZlbnRzLm9uKGUsdCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2V2ZW50cy5vZmYoZSx0KX19XSkscn0oKTtsLmRlZmF1bHQ9cn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2V2ZW50cyI6MX1dfSx7fSxbNV0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1jcm9zc3RhbGsubWluLmpzLm1hcA==\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LyogQWRqdXN0IG1hcmdpbnMgb3V0d2FyZHMsIHNvIGNvbHVtbiBjb250ZW50cyBsaW5lIHVwIHdpdGggdGhlIGVkZ2VzIG9mIHRoZQogICBwYXJlbnQgb2YgY29udGFpbmVyLWZsdWlkLiAqLwouY29udGFpbmVyLWZsdWlkLmNyb3NzdGFsay1ic2NvbHMgewogIG1hcmdpbi1sZWZ0OiAtMzBweDsKICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogIHdoaXRlLXNwYWNlOiBub3JtYWw7Cn0KCi8qIEJ1dCBkb24ndCBhZGp1c3QgdGhlIG1hcmdpbnMgb3V0d2FyZHMgaWYgd2UncmUgZGlyZWN0bHkgdW5kZXIgdGhlIGJvZHksCiAgIGkuZS4gd2Ugd2VyZSB0aGUgdG9wLWxldmVsIG9mIHNvbWV0aGluZyBhdCB0aGUgY29uc29sZS4gKi8KYm9keSA+IC5jb250YWluZXItZmx1aWQuY3Jvc3N0YWxrLWJzY29scyB7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9CgouY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW4gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwYWRkaW5nLXJpZ2h0OiAxMnB4OwogIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCkgewogIC5jcm9zc3RhbGstaW5wdXQtY2hlY2tib3hncm91cCAuY3Jvc3N0YWxrLW9wdGlvbnMtZ3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWNvbHVtbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBhZGRpbmctcmlnaHQ6IGluaGVyaXQ7CiAgfQp9Cg==\" rel=\"stylesheet\" />\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LyoKanVzdCBoZXJlIHNvIHRoYXQgcGxvdGx5IHdvcmtzCmNvcnJlY3RseSB3aXRoIGlvc2xpZGVzLgpzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JvcGVuc2NpL3Bsb3RseS9pc3N1ZXMvNDYzCiovCgpzbGlkZTpub3QoLmN1cnJlbnQpIC5wbG90bHkuaHRtbC13aWRnZXR7CiAgZGlzcGxheTogbm9uZTsKfQo=\" rel=\"stylesheet\" />\n",
       "<script title=\"plotly-main\" src=\"data:application/javascript;base64,LyoqCiogcGxvdGx5LmpzIHYxLjQ2LjEKKiBDb3B5cmlnaHQgMjAxMi0yMDE5LCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNleygidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLlBsb3RseT10KCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXtmdW5jdGlvbiBpKG8scyl7aWYoIXJbb10pe2lmKCFlW29dKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmbClyZXR1cm4gbChvLCEwKTtpZihhKXJldHVybiBhKG8sITApO3ZhciBjPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBjLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGN9dmFyIHU9cltvXT17ZXhwb3J0czp7fX07ZVtvXVswXS5jYWxsKHUuZXhwb3J0cyxmdW5jdGlvbih0KXtyZXR1cm4gaShlW29dWzFdW3RdfHx0KX0sdSx1LmV4cG9ydHMsdCxlLHIsbil9cmV0dXJuIHJbb10uZXhwb3J0c31mb3IodmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsbz0wO288bi5sZW5ndGg7bysrKWkobltvXSk7cmV0dXJuIGl9fSgpKHsxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NyYy9saWIiKSxpPXsiWCxYIGRpdiI6ImRpcmVjdGlvbjpsdHI7Zm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDsiLCJYIGlucHV0LFggYnV0dG9uIjoiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOyIsIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXMiOiJvdXRsaW5lOm5vbmU7IiwiWCBhIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCBhOmhvdmVyIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCAuY3Jpc3AiOiJzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC51c2VyLXNlbGVjdC1ub25lIjoiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7IiwiWCBzdmciOiJvdmVyZmxvdzpoaWRkZW47IiwiWCBzdmcgYSI6ImZpbGw6IzQ0N2FkYjsiLCJYIHN2ZyBhOmhvdmVyIjoiZmlsbDojM2M2ZGM1OyIsIlggLm1haW4tc3ZnIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7IiwiWCAubWFpbi1zdmcgLmRyYWdsYXllciI6InBvaW50ZXItZXZlbnRzOmFsbDsiLCJYIC5jdXJzb3ItZGVmYXVsdCI6ImN1cnNvcjpkZWZhdWx0OyIsIlggLmN1cnNvci1wb2ludGVyIjoiY3Vyc29yOnBvaW50ZXI7IiwiWCAuY3Vyc29yLWNyb3NzaGFpciI6ImN1cnNvcjpjcm9zc2hhaXI7IiwiWCAuY3Vyc29yLW1vdmUiOiJjdXJzb3I6bW92ZTsiLCJYIC5jdXJzb3ItY29sLXJlc2l6ZSI6ImN1cnNvcjpjb2wtcmVzaXplOyIsIlggLmN1cnNvci1yb3ctcmVzaXplIjoiY3Vyc29yOnJvdy1yZXNpemU7IiwiWCAuY3Vyc29yLW5zLXJlc2l6ZSI6ImN1cnNvcjpucy1yZXNpemU7IiwiWCAuY3Vyc29yLWV3LXJlc2l6ZSI6ImN1cnNvcjpldy1yZXNpemU7IiwiWCAuY3Vyc29yLXN3LXJlc2l6ZSI6ImN1cnNvcjpzdy1yZXNpemU7IiwiWCAuY3Vyc29yLXMtcmVzaXplIjoiY3Vyc29yOnMtcmVzaXplOyIsIlggLmN1cnNvci1zZS1yZXNpemUiOiJjdXJzb3I6c2UtcmVzaXplOyIsIlggLmN1cnNvci13LXJlc2l6ZSI6ImN1cnNvcjp3LXJlc2l6ZTsiLCJYIC5jdXJzb3ItZS1yZXNpemUiOiJjdXJzb3I6ZS1yZXNpemU7IiwiWCAuY3Vyc29yLW53LXJlc2l6ZSI6ImN1cnNvcjpudy1yZXNpemU7IiwiWCAuY3Vyc29yLW4tcmVzaXplIjoiY3Vyc29yOm4tcmVzaXplOyIsIlggLmN1cnNvci1uZS1yZXNpemUiOiJjdXJzb3I6bmUtcmVzaXplOyIsIlggLmN1cnNvci1ncmFiIjoiY3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYjsiLCJYIC5tb2RlYmFyIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDtyaWdodDoycHg7IiwiWCAuZWFzZS1iZyI6Ii13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzOyIsIlggLm1vZGViYXItLWhvdmVyPjpub3QoLndhdGVybWFyaykiOiJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7IiwiWDpob3ZlciAubW9kZWJhci0taG92ZXIgLm1vZGViYXItZ3JvdXAiOiJvcGFjaXR5OjE7IiwiWCAubW9kZWJhci1ncm91cCI6ImZsb2F0OmxlZnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDo4cHg7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDsiLCJYIC5tb2RlYmFyLWJ0biI6InBvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6M3B4IDRweDtoZWlnaHQ6MjJweDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDpub3JtYWw7Ym94LXNpemluZzpib3JkZXItYm94OyIsIlggLm1vZGViYXItYnRuIHN2ZyI6InBvc2l0aW9uOnJlbGF0aXZlO3RvcDoycHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCI6ImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOndyYXA7YWxpZ24tY29udGVudDpmbGV4LWVuZDttYXgtaGVpZ2h0OjEwMCU7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCBzdmciOiJ0b3A6LTFweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIjoiZGlzcGxheTpibG9jaztmbG9hdDpub25lO3BhZGRpbmctbGVmdDowcHg7cGFkZGluZy1ib3R0b206OHB4OyIsIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXAgLm1vZGViYXItYnRuIjoiZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmNlbnRlcjsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUsWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7ZGlzcGxheTpub25lO29wYWNpdHk6MDt6LWluZGV4OjEwMDE7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MTEwJTtyaWdodDo1MCU7IiwiWCBbZGF0YS10aXRsZV06aG92ZXI6YmVmb3JlLFggW2RhdGEtdGl0bGVdOmhvdmVyOmFmdGVyIjoiZGlzcGxheTpibG9jaztvcGFjaXR5OjE7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlIjoiY29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7ei1pbmRleDoxMDAyO21hcmdpbi10b3A6LTEycHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjk3MzhhO21hcmdpbi1yaWdodDotNnB4OyIsIlggW2RhdGEtdGl0bGVdOmFmdGVyIjoiY29udGVudDphdHRyKGRhdGEtdGl0bGUpO2JhY2tncm91bmQ6IzY5NzM4YTtjb2xvcjp3aGl0ZTtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlLFggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTphZnRlciI6InRvcDowJTtyaWdodDoyMDAlOyIsIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmUiOiJib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiM2OTczOGE7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0zMHB4OyIsIlggLnNlbGVjdC1vdXRsaW5lIjoiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnNlbGVjdC1vdXRsaW5lLTEiOiJzdHJva2U6d2hpdGU7IiwiWCAuc2VsZWN0LW91dGxpbmUtMiI6InN0cm9rZTpibGFjaztzdHJva2UtZGFzaGFycmF5OjJweCAycHg7IixZOiJmb250LWZhbWlseTonT3BlbiBTYW5zJztwb3NpdGlvbjpmaXhlZDt0b3A6NTBweDtyaWdodDoyMHB4O3otaW5kZXg6MTAwMDA7Zm9udC1zaXplOjEwcHQ7bWF4LXdpZHRoOjE4MHB4OyIsIlkgcCI6Im1hcmdpbjowOyIsIlkgLm5vdGlmaWVyLW5vdGUiOiJtaW4td2lkdGg6MTgwcHg7bWF4LXdpZHRoOjI1MHB4O2JvcmRlcjoxcHggc29saWQgI2ZmZjt6LWluZGV4OjMwMDA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojOGM5N2FmO2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDAsMTUxLDE3NSwwLjkpO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4O292ZXJmbG93LXdyYXA6YnJlYWstd29yZDt3b3JkLXdyYXA6YnJlYWstd29yZDstbXMtaHlwaGVuczphdXRvOy13ZWJraXQtaHlwaGVuczphdXRvO2h5cGhlbnM6YXV0bzsiLCJZIC5ub3RpZmllci1jbG9zZSI6ImNvbG9yOiNmZmY7b3BhY2l0eTowLjg7ZmxvYXQ6cmlnaHQ7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4OyIsIlkgLm5vdGlmaWVyLWNsb3NlOmhvdmVyIjoiY29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjsifTtmb3IodmFyIGEgaW4gaSl7dmFyIG89YS5yZXBsYWNlKC9eLC8sIiAsIikucmVwbGFjZSgvWC9nLCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSIpLnJlcGxhY2UoL1kvZywiLnBsb3RseS1ub3RpZmllciIpO24uYWRkU3R5bGVSdWxlKG8saVthXSl9fSx7Ii4uL3NyYy9saWIiOjcwMH1dLDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt1bmRvOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0saG9tZTp7d2lkdGg6OTI4LjYsaGVpZ2h0OjFlMyxwYXRoOiJtNzg2IDI5NnYtMjY3cTAtMTUtMTEtMjZ0LTI1LTEwaC0yMTR2MjE0aC0xNDN2LTIxNGgtMjE0cS0xNSAwLTI1IDEwdC0xMSAyNnYyNjdxMCAxIDAgMnQwIDJsMzIxIDI2NCAzMjEtMjY0cTEtMSAxLTR6IG0xMjQgMzlsLTM0LTQxcS01LTUtMTItNmgtMnEtNyAwLTEyIDNsLTM4NiAzMjItMzg2LTMyMnEtNy00LTEzLTQtNyAyLTEyIDdsLTM1IDQxcS00IDUtMyAxM3Q2IDEybDQwMSAzMzRxMTggMTUgNDIgMTV0NDMtMTVsMTM2LTExNHYxMDlxMCA4IDUgMTN0MTMgNWgxMDdxOCAwIDEzLTV0NS0xM3YtMjI3bDEyMi0xMDJxNS01IDYtMTJ0LTQtMTN6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiY2FtZXJhLXJldHJvIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTUxOCAzODZxMCA4LTUgMTN0LTEzIDVxLTM3IDAtNjMtMjd0LTI2LTYzcTAtOCA1LTEzdDEzLTUgMTIgNSA1IDEzcTAgMjMgMTYgMzh0MzggMTZxOCAwIDEzIDV0NSAxM3ogbTEyNS03M3EwLTU5LTQyLTEwMXQtMTAxLTQyLTEwMSA0Mi00MiAxMDEgNDIgMTAxIDEwMSA0MiAxMDEtNDIgNDItMTAxeiBtLTU3Mi0zMjBoODU4djcxaC04NTh2LTcxeiBtNjQzIDMyMHEwIDg5LTYyIDE1MnQtMTUyIDYyLTE1MS02Mi02My0xNTIgNjMtMTUxIDE1MS02MyAxNTIgNjMgNjIgMTUxeiBtLTU3MSAzNThoMjE0djcyaC0yMTR2LTcyeiBtLTcyLTEwN2g4NTh2MTQzaC00NjJsLTM2LTcxaC0zNjB2LTcyeiBtOTI5IDE0M3YtNzE0cTAtMzAtMjEtNTF0LTUwLTIxaC04NThxLTI5IDAtNTAgMjF0LTIxIDUxdjcxNHEwIDMwIDIxIDUxdDUwIDIxaDg1OHEyOSAwIDUwLTIxdDIxLTUxeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbWJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTEwMDAtMjVsLTI1MCAyNTFjNDAgNjMgNjMgMTM4IDYzIDIxOCAwIDIyNC0xODIgNDA2LTQwNyA0MDYtMjI0IDAtNDA2LTE4Mi00MDYtNDA2czE4My00MDYgNDA3LTQwNmM4MCAwIDE1NSAyMiAyMTggNjJsMjUwLTI1MCAxMjUgMTI1eiBtLTgxMiAyNTBsMCA0MzggNDM3IDAgMC00MzgtNDM3IDB6IG02MiAzNzVsMzEzIDAgMC0zMTItMzEzIDAgMCAzMTJ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxwYW46e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0xMDAwIDM1MGwtMTg3IDE4OCAwLTEyNS0yNTAgMCAwIDI1MCAxMjUgMC0xODggMTg3LTE4Ny0xODcgMTI1IDAgMC0yNTAtMjUwIDAgMCAxMjUtMTg4LTE4OCAxODYtMTg3IDAgMTI1IDI1MiAwIDAtMjUwLTEyNSAwIDE4Ny0xODggMTg4IDE4OC0xMjUgMCAwIDI1MCAyNTAgMCAwLTEyNiAxODcgMTg4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbV9wbHVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOiJtMSA3ODdsMC04NzUgODc1IDAgMCA4NzUtODc1IDB6IG02ODctNTAwbC0xODcgMCAwLTE4Ny0xMjUgMCAwIDE4Ny0xODggMCAwIDEyNSAxODggMCAwIDE4NyAxMjUgMCAwLTE4NyAxODcgMCAwLTEyNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21fbWludXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6Im0wIDc4OGwwLTg3NiA4NzUgMCAwIDg3Ni04NzUgMHogbTY4OC01MDBsLTUwMCAwIDAgMTI1IDUwMCAwIDAtMTI1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sYXV0b3NjYWxlOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMjUwIDg1MGwtMTg3IDAtNjMgMCAwLTYyIDAtMTg4IDYzIDAgMCAxODggMTg3IDAgMCA2MnogbTY4OCAwbC0xODggMCAwLTYyIDE4OCAwIDAtMTg4IDYyIDAgMCAxODggMCA2Mi02MiAweiBtLTg3NS05MzhsMCAxODgtNjMgMCAwLTE4OCAwLTYyIDYzIDAgMTg3IDAgMCA2Mi0xODcgMHogbTg3NSAxODhsMC0xODgtMTg4IDAgMC02MiAxODggMCA2MiAwIDAgNjIgMCAxODgtNjIgMHogbS0xMjUgMTg4bC0xIDAtOTMtOTQtMTU2IDE1NiAxNTYgMTU2IDkyLTkzIDIgMCAwIDI1MC0yNTAgMCAwLTIgOTMtOTItMTU2LTE1Ni0xNTYgMTU2IDk0IDkyIDAgMi0yNTAgMCAwLTI1MCAwIDAgOTMgOTMgMTU3LTE1Ni0xNTctMTU2LTkzIDk0IDAgMCAwLTI1MCAyNTAgMCAwIDAtOTQgOTMgMTU2IDE1NyAxNTYtMTU3LTkzLTkzIDAgMCAyNTAgMCAwIDI1MHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAsaGVpZ2h0OjFlMyxwYXRoOiJtMzc1IDcyNWwwIDAtMzc1LTM3NSAzNzUtMzc0IDAtMSAxMTI1IDAgMCA3NTAtMTEyNSAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sdG9vbHRpcF9jb21wYXJlOnt3aWR0aDoxMTI1LGhlaWdodDoxZTMscGF0aDoibTE4NyA3ODZsMCAyLTE4Ny0xODggMTg4LTE4NyAwIDAgOTM3IDAgMCAzNzMtOTM4IDB6IG0wLTQ5OWwwIDEtMTg3LTE4OCAxODgtMTg4IDAgMCA5MzcgMCAwIDM3Ni05MzgtMXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHBsb3RseWxvZ286e3dpZHRoOjE1NDIsaGVpZ2h0OjFlMyxwYXRoOiJtMC0xMGgxODJ2LTE0MGgtMTgydjE0MHogbTIyOCAxNDZoMTgzdi0yODZoLTE4M3YyODZ6IG0yMjUgNzE0aDE4MnYtMTAwMGgtMTgydjEwMDB6IG0yMjUtMjg1aDE4MnYtNzE1aC0xODJ2NzE1eiBtMjI1IDE0MmgxODN2LTg1N2gtMTgzdjg1N3ogbTIzMS00MjhoMTgydi00MjloLTE4MnY0Mjl6IG0yMjUtMjkxaDE4M3YtMTM4aC0xODN2MTM4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sInotYXhpcyI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im04MzMgNWwtMTcgMTA4djQxbC0xMzAtNjUgMTMwLTY2YzAgMCAwIDM4IDAgMzkgMC0xIDM2LTE0IDM5LTI1IDQtMTUtNi0yMi0xNi0zMC0xNS0xMi0zOS0xNi01Ni0yMC05MC0yMi0xODctMjMtMjc5LTIzLTI2MSAwLTM0MSAzNC0zNTMgNTkgMyA2MCAyMjggMTEwIDIyOCAxMTAtMTQwLTgtMzUxLTM1LTM1MS0xMTYgMC0xMjAgMjkzLTE0MiA0NzQtMTQyIDE1NSAwIDQ3NyAyMiA0NzcgMTQyIDAgNTAtNzQgNzktMTYzIDk2eiBtLTM3NCA5NGMtNTgtNS05OS0yMS05OS00MCAwLTI0IDY1LTQzIDE0NC00MyA3OSAwIDE0MyAxOSAxNDMgNDMgMCAxOS00MiAzNC05OCA0MHYyMTZoODdsLTEzMiAxMzUtMTMzLTEzNWg4OHYtMjE2eiBtMTY3IDUxNWgtMTM2djFjMTYgMTYgMzEgMzQgNDYgNTJsODQgMTA5djU0aC0yMzB2LTcxaDEyNHYtMWMtMTYtMTctMjgtMzItNDQtNTFsLTg5LTExNHYtNTFoMjQ1djcyeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sIjNkX3JvdGF0ZSI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sY2FtZXJhOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDQ1MGMtODMgMC0xNTAtNjctMTUwLTE1MCAwLTgzIDY3LTE1MCAxNTAtMTUwIDgzIDAgMTUwIDY3IDE1MCAxNTAgMCA4My02NyAxNTAtMTUwIDE1MHogbTQwMCAxNTBoLTEyMGMtMTYgMC0zNCAxMy0zOSAyOWwtMzEgOTNjLTYgMTUtMjMgMjgtNDAgMjhoLTM0MGMtMTYgMC0zNC0xMy0zOS0yOGwtMzEtOTRjLTYtMTUtMjMtMjgtNDAtMjhoLTEyMGMtNTUgMC0xMDAtNDUtMTAwLTEwMHYtNDUwYzAtNTUgNDUtMTAwIDEwMC0xMDBoODAwYzU1IDAgMTAwIDQ1IDEwMCAxMDB2NDUwYzAgNTUtNDUgMTAwLTEwMCAxMDB6IG0tNDAwLTU1MGMtMTM4IDAtMjUwIDExMi0yNTAgMjUwIDAgMTM4IDExMiAyNTAgMjUwIDI1MCAxMzggMCAyNTAtMTEyIDI1MC0yNTAgMC0xMzgtMTEyLTI1MC0yNTAtMjUweiBtMzY1IDM4MGMtMTkgMC0zNSAxNi0zNSAzNSAwIDE5IDE2IDM1IDM1IDM1IDE5IDAgMzUtMTYgMzUtMzUgMC0xOS0xNi0zNS0zNS0zNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LG1vdmllOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtOTM4IDQxM2wtMTg4LTEyNWMwIDM3LTE3IDcxLTQ0IDk0IDY0IDM4IDEwNyAxMDcgMTA3IDE4NyAwIDEyMS05OCAyMTktMjE5IDIxOS0xMjEgMC0yMTktOTgtMjE5LTIxOSAwLTYxIDI1LTExNyA2Ni0xNTZoLTExNWMzMCAzMyA0OSA3NiA0OSAxMjUgMCAxMDMtODQgMTg3LTE4NyAxODdzLTE4OC04NC0xODgtMTg3YzAtNTcgMjYtMTA3IDY1LTE0MS0zOC0yMi02NS02Mi02NS0xMDl2LTI1MGMwLTcwIDU2LTEyNiAxMjUtMTI2aDUwMGM2OSAwIDEyNSA1NiAxMjUgMTI2bDE4OC0xMjZjMzQgMCA2MiAyOCA2MiA2M3YzNzVjMCAzNS0yOCA2My02MiA2M3ogbS03NTAgMGMtNjkgMC0xMjUgNTYtMTI1IDEyNXM1NiAxMjUgMTI1IDEyNSAxMjUtNTYgMTI1LTEyNS01Ni0xMjUtMTI1LTEyNXogbTQwNi0xYy04NyAwLTE1NyA3MC0xNTcgMTU3IDAgODYgNzAgMTU2IDE1NyAxNTZzMTU2LTcwIDE1Ni0xNTYtNzAtMTU3LTE1Ni0xNTd6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxxdWVzdGlvbjp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZGlzazp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtMjE0LTdoNDI5djIxNGgtNDI5di0yMTR6IG01MDAgMGg3MnY1MDBxMCA4LTYgMjF0LTExIDIwbC0xNTcgMTU2cS01IDYtMTkgMTJ0LTIyIDV2LTIzMnEwLTIyLTE1LTM4dC0zOC0xNmgtMzIycS0yMiAwLTM3IDE2dC0xNiAzOHYyMzJoLTcydi03MTRoNzJ2MjMycTAgMjIgMTYgMzh0MzcgMTZoNDY1cTIyIDAgMzgtMTZ0MTUtMzh2LTIzMnogbS0yMTQgNTE4djE3OHEwIDgtNSAxM3QtMTMgNWgtMTA3cS03IDAtMTMtNXQtNS0xM3YtMTc4cTAtOCA1LTEzdDEzLTVoMTA3cTcgMCAxMyA1dDUgMTN6IG0zNTctMTh2LTUxOHEwLTIyLTE1LTM4dC0zOC0xNmgtNzUwcS0yMyAwLTM4IDE2dC0xNiAzOHY3NTBxMCAyMiAxNiAzOHQzOCAxNmg1MTdxMjMgMCA1MC0xMnQ0Mi0yNmwxNTYtMTU3cTE2LTE1IDI3LTQydDExLTQ5eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sbGFzc286e3dpZHRoOjEwMzEsaGVpZ2h0OjFlMyxwYXRoOiJtMTAxOCA1MzhjLTM2IDIwNy0yOTAgMzM2LTU2OCAyODYtMjc3LTQ4LTQ3My0yNTYtNDM2LTQ2MyAxMC01NyAzNi0xMDggNzYtMTUxLTEzLTY2IDExLTEzNyA2OC0xODMgMzQtMjggNzUtNDEgMTE0LTQybC01NS03MCAwIDBjLTItMS0zLTItNC0zLTEwLTE0LTgtMzQgNS00NSAxNC0xMSAzNC04IDQ1IDQgMSAxIDIgMyAyIDVsMCAwIDExMyAxNDBjMTYgMTEgMzEgMjQgNDUgNDAgNCAzIDYgNyA4IDExIDQ4LTMgMTAwIDAgMTUxIDkgMjc4IDQ4IDQ3MyAyNTUgNDM2IDQ2MnogbS02MjQtMzc5Yy04MCAxNC0xNDkgNDgtMTk3IDk2IDQyIDQyIDEwOSA0NyAxNTYgOSAzMy0yNiA0Ny02NiA0MS0xMDV6IG0tMTg3LTc0Yy0xOSAxNi0zMyAzNy0zOSA2MCA1MC0zMiAxMDktNTUgMTc0LTY4LTQyLTI1LTk1LTI0LTEzNSA4eiBtMzYwIDc1Yy0zNC03LTY5LTktMTAyLTggOCA2Mi0xNiAxMjgtNjggMTcwLTczIDU5LTE3NSA1NC0yNDQtNS05IDIwLTE2IDQwLTIwIDYxLTI4IDE1OSAxMjEgMzE3IDMzMyAzNTRzNDA3LTYwIDQzNC0yMTdjMjgtMTU5LTEyMS0zMTgtMzMzLTM1NXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHNlbGVjdGJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTAgODUwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg1bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHNwaWtlbGluZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoiTTUxMiA0MDljMC01Ny00Ni0xMDQtMTAzLTEwNC01NyAwLTEwNCA0Ny0xMDQgMTA0IDAgNTcgNDcgMTAzIDEwNCAxMDMgNTcgMCAxMDMtNDYgMTAzLTEwM3ogbS0zMjctMzlsOTIgMCAwIDkyLTkyIDB6IG0tMTg1IDBsOTIgMCAwIDkyLTkyIDB6IG0zNzAtMTg2bDkyIDAgMCA5My05MiAweiBtMC0xODRsOTIgMCAwIDkyLTkyIDB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxLjUgMCAwIC0xLjUgMCA4NTApIn0sbmV3cGxvdGx5bG9nbzp7bmFtZToibmV3cGxvdGx5bG9nbyIsc3ZnOiI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDEzMiAxMzInPjxkZWZzPjxzdHlsZT4uY2xzLTEge2ZpbGw6ICMxMTlkZmY7fSAuY2xzLTIge2ZpbGw6ICMyNWZlZmQ7fSAuY2xzLTMge2ZpbGw6ICNmZmY7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5wbG90bHktbG9nb21hcms8L3RpdGxlPjxnIGlkPSdzeW1ib2wnPjxyZWN0IGNsYXNzPSdjbHMtMScgd2lkdGg9JzEzMicgaGVpZ2h0PScxMzInIHJ4PSc2JyByeT0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSc1NCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMTAyJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzU0JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nNTQnIHI9JzYnLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00zMCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCwzMCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J003OCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCw3OCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J001NCw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCw1NCw0OFonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00xMDIsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsMTAyLDQ4WicvPjwvZz48L3N2Zz4ifX19LHt9XSwzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiOjExODN9XSw0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhciIpfSx7Ii4uL3NyYy90cmFjZXMvYmFyIjo4NDZ9XSw1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhcnBvbGFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXJwb2xhciI6ODU4fV0sNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9ib3giKX0seyIuLi9zcmMvdHJhY2VzL2JveCI6ODY4fV0sNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIil9LHsiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIjo1NzV9XSw4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIil9LHsiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGljayI6ODc3fV0sOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL2NhcnBldCI6ODk2fV0sMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY2hvcm9wbGV0aCIpfSx7Ii4uL3NyYy90cmFjZXMvY2hvcm9wbGV0aCI6OTEwfV0sMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29uZSIpfSx7Ii4uL3NyYy90cmFjZXMvY29uZSI6OTE4fV0sMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29udG91ciIpfSx7Ii4uL3NyYy90cmFjZXMvY29udG91ciI6OTMzfV0sMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldCI6OTQ0fV0sMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb3JlIil9LHsiLi4vc3JjL2NvcmUiOjY3OX1dLDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXIiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXIiOjExODR9XSwxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZ3JvdXBieSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnkiOjExODV9XSwxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIil9LHsiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIjo5NTZ9XSwxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwZ2wiKX0seyIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCI6OTY1fV0sMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjk3N31dLDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZCI6OTg0fV0sMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRjb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiOjk4OH1dLDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29yZSIpO24ucmVnaXN0ZXIoW3QoIi4vYmFyIiksdCgiLi9ib3giKSx0KCIuL2hlYXRtYXAiKSx0KCIuL2hpc3RvZ3JhbSIpLHQoIi4vaGlzdG9ncmFtMmQiKSx0KCIuL2hpc3RvZ3JhbTJkY29udG91ciIpLHQoIi4vY29udG91ciIpLHQoIi4vc2NhdHRlcnRlcm5hcnkiKSx0KCIuL3Zpb2xpbiIpLHQoIi4vd2F0ZXJmYWxsIiksdCgiLi9waWUiKSx0KCIuL3N1bmJ1cnN0IiksdCgiLi9zY2F0dGVyM2QiKSx0KCIuL3N1cmZhY2UiKSx0KCIuL2lzb3N1cmZhY2UiKSx0KCIuL21lc2gzZCIpLHQoIi4vY29uZSIpLHQoIi4vc3RyZWFtdHViZSIpLHQoIi4vc2NhdHRlcmdlbyIpLHQoIi4vY2hvcm9wbGV0aCIpLHQoIi4vc2NhdHRlcmdsIiksdCgiLi9zcGxvbSIpLHQoIi4vcG9pbnRjbG91ZCIpLHQoIi4vaGVhdG1hcGdsIiksdCgiLi9wYXJjb29yZHMiKSx0KCIuL3BhcmNhdHMiKSx0KCIuL3NjYXR0ZXJtYXBib3giKSx0KCIuL3NhbmtleSIpLHQoIi4vdGFibGUiKSx0KCIuL2NhcnBldCIpLHQoIi4vc2NhdHRlcmNhcnBldCIpLHQoIi4vY29udG91cmNhcnBldCIpLHQoIi4vb2hsYyIpLHQoIi4vY2FuZGxlc3RpY2siKSx0KCIuL3NjYXR0ZXJwb2xhciIpLHQoIi4vc2NhdHRlcnBvbGFyZ2wiKSx0KCIuL2JhcnBvbGFyIildKSxuLnJlZ2lzdGVyKFt0KCIuL2FnZ3JlZ2F0ZSIpLHQoIi4vZmlsdGVyIiksdCgiLi9ncm91cGJ5IiksdCgiLi9zb3J0IildKSxuLnJlZ2lzdGVyKFt0KCIuL2NhbGVuZGFycyIpXSksZS5leHBvcnRzPW59LHsiLi9hZ2dyZWdhdGUiOjMsIi4vYmFyIjo0LCIuL2JhcnBvbGFyIjo1LCIuL2JveCI6NiwiLi9jYWxlbmRhcnMiOjcsIi4vY2FuZGxlc3RpY2siOjgsIi4vY2FycGV0Ijo5LCIuL2Nob3JvcGxldGgiOjEwLCIuL2NvbmUiOjExLCIuL2NvbnRvdXIiOjEyLCIuL2NvbnRvdXJjYXJwZXQiOjEzLCIuL2NvcmUiOjE0LCIuL2ZpbHRlciI6MTUsIi4vZ3JvdXBieSI6MTYsIi4vaGVhdG1hcCI6MTcsIi4vaGVhdG1hcGdsIjoxOCwiLi9oaXN0b2dyYW0iOjE5LCIuL2hpc3RvZ3JhbTJkIjoyMCwiLi9oaXN0b2dyYW0yZGNvbnRvdXIiOjIxLCIuL2lzb3N1cmZhY2UiOjIzLCIuL21lc2gzZCI6MjQsIi4vb2hsYyI6MjUsIi4vcGFyY2F0cyI6MjYsIi4vcGFyY29vcmRzIjoyNywiLi9waWUiOjI4LCIuL3BvaW50Y2xvdWQiOjI5LCIuL3NhbmtleSI6MzAsIi4vc2NhdHRlcjNkIjozMSwiLi9zY2F0dGVyY2FycGV0IjozMiwiLi9zY2F0dGVyZ2VvIjozMywiLi9zY2F0dGVyZ2wiOjM0LCIuL3NjYXR0ZXJtYXBib3giOjM1LCIuL3NjYXR0ZXJwb2xhciI6MzYsIi4vc2NhdHRlcnBvbGFyZ2wiOjM3LCIuL3NjYXR0ZXJ0ZXJuYXJ5IjozOCwiLi9zb3J0IjozOSwiLi9zcGxvbSI6NDAsIi4vc3RyZWFtdHViZSI6NDEsIi4vc3VuYnVyc3QiOjQyLCIuL3N1cmZhY2UiOjQzLCIuL3RhYmxlIjo0NCwiLi92aW9saW4iOjQ1LCIuL3dhdGVyZmFsbCI6NDZ9XSwyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlIjo5OTN9XSwyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9tZXNoM2QiKX0seyIuLi9zcmMvdHJhY2VzL21lc2gzZCI6OTk4fV0sMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvb2hsYyIpfSx7Ii4uL3NyYy90cmFjZXMvb2hsYyI6MTAwM31dLDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BhcmNhdHMiKX0seyIuLi9zcmMvdHJhY2VzL3BhcmNhdHMiOjEwMTJ9XSwyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9wYXJjb29yZHMiKX0seyIuLi9zcmMvdHJhY2VzL3BhcmNvb3JkcyI6MTAyMX1dLDI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BpZSIpfSx7Ii4uL3NyYy90cmFjZXMvcGllIjoxMDMyfV0sMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZCIpfSx7Ii4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZCI6MTA0MX1dLDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NhbmtleSIpfSx7Ii4uL3NyYy90cmFjZXMvc2Fua2V5IjoxMDQ3fV0sMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2QiOjEwODN9XSwzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0IjoxMDg5fV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyI6MTA5Nn1dLDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdsIjoxMTA0fV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveCI6MTExMH1dLDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhciIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyIjoxMTE3fV0sMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsIjoxMTIxfV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5IjoxMTI3fV0sMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0IjoxMTg3fV0sNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3Bsb20iKX0seyIuLi9zcmMvdHJhY2VzL3NwbG9tIjoxMTMyfV0sNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3RyZWFtdHViZSIpfSx7Ii4uL3NyYy90cmFjZXMvc3RyZWFtdHViZSI6MTEzN31dLDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0Iil9LHsiLi4vc3JjL3RyYWNlcy9zdW5idXJzdCI6MTE0M31dLDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N1cmZhY2UiKX0seyIuLi9zcmMvdHJhY2VzL3N1cmZhY2UiOjExNTJ9XSw0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy90YWJsZSIpfSx7Ii4uL3NyYy90cmFjZXMvdGFibGUiOjExNjB9XSw0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy92aW9saW4iKX0seyIuLi9zcmMvdHJhY2VzL3Zpb2xpbiI6MTE2OH1dLDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3dhdGVyZmFsbCIpfSx7Ii4uL3NyYy90cmFjZXMvd2F0ZXJmYWxsIjoxMTc4fV0sNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5leWV8fFswLDAsMV0scj10LmNlbnRlcnx8WzAsMCwwXSxzPXQudXB8fFswLDEsMF0sbD10LmRpc3RhbmNlTGltaXRzfHxbMCwxLzBdLGM9dC5tb2RlfHwidHVybnRhYmxlIix1PW4oKSxmPWkoKSxoPWEoKTtyZXR1cm4gdS5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLHUubG9va0F0KDAsZSxyLHMpLGYuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxmLmxvb2tBdCgwLGUscixzKSxoLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksaC5sb29rQXQoMCxlLHIscyksbmV3IG8oe3R1cm50YWJsZTp1LG9yYml0OmYsbWF0cml4Omh9LGMpfTt2YXIgbj10KCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiKSxpPXQoIm9yYml0LWNhbWVyYS1jb250cm9sbGVyIiksYT10KCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiKTtmdW5jdGlvbiBvKHQsZSl7dGhpcy5fY29udHJvbGxlck5hbWVzPU9iamVjdC5rZXlzKHQpLHRoaXMuX2NvbnRyb2xsZXJMaXN0PXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSx0aGlzLl9tb2RlPWUsdGhpcy5fYWN0aXZlPXRbZV0sdGhpcy5fYWN0aXZlfHwodGhpcy5fbW9kZT0idHVybnRhYmxlIix0aGlzLl9hY3RpdmU9dC50dXJudGFibGUpLHRoaXMubW9kZXM9dGhpcy5fY29udHJvbGxlck5hbWVzLHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c312YXIgcz1vLnByb3RvdHlwZTtbWyJmbHVzaCIsMV0sWyJpZGxlIiwxXSxbImxvb2tBdCIsNF0sWyJyb3RhdGUiLDRdLFsicGFuIiw0XSxbInRyYW5zbGF0ZSIsNF0sWyJzZXRNYXRyaXgiLDJdLFsic2V0RGlzdGFuY2VMaW1pdHMiLDJdLFsic2V0RGlzdGFuY2UiLDJdXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLHI9W10sbj0wO248dFsxXTsrK24pci5wdXNoKCJhIituKTt2YXIgaT0idmFyIGNjPXRoaXMuX2NvbnRyb2xsZXJMaXN0O2Zvcih2YXIgaT0wO2k8Y2MubGVuZ3RoOysraSl7Y2NbaV0uIit0WzBdKyIoIityLmpvaW4oKSsiKX0iO3NbZV09RnVuY3Rpb24uYXBwbHkobnVsbCxyLmNvbmNhdChpKSl9KSxzLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLl9hY3RpdmUucmVjYWxjTWF0cml4KHQpfSxzLmdldERpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2UodCl9LHMuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZUxpbWl0cyh0KX0scy5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmUubGFzdFQoKX0scy5zZXRNb2RlPWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLl9tb2RlKXt2YXIgZT10aGlzLl9jb250cm9sbGVyTmFtZXMuaW5kZXhPZih0KTtpZighKGU8MCkpe3ZhciByPXRoaXMuX2FjdGl2ZSxuPXRoaXMuX2NvbnRyb2xsZXJMaXN0W2VdLGk9TWF0aC5tYXgoci5sYXN0VCgpLG4ubGFzdFQoKSk7ci5yZWNhbGNNYXRyaXgoaSksbi5zZXRNYXRyaXgoaSxyLmNvbXB1dGVkTWF0cml4KSx0aGlzLl9hY3RpdmU9bix0aGlzLl9tb2RlPXQsdGhpcy5jb21wdXRlZE1hdHJpeD10aGlzLl9hY3RpdmUuY29tcHV0ZWRNYXRyaXgsdGhpcy5jb21wdXRlZEV5ZT10aGlzLl9hY3RpdmUuY29tcHV0ZWRFeWUsdGhpcy5jb21wdXRlZFVwPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFVwLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5fYWN0aXZlLmNvbXB1dGVkQ2VudGVyLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5fYWN0aXZlLmNvbXB1dGVkUmFkaXVzfX19LHMuZ2V0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RlfX0seyJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiOjQyNSwib3JiaXQtY2FtZXJhLWNvbnRyb2xsZXIiOjQ0OCwidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyIjo1MjZ9XSw0ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlLHIsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBjKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYyh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiB1KHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGYodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBoKHQpe3JldHVybiBmKHQuc291cmNlKSp0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGYodC50YXJnZXQpKnQudmFsdWV9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBnKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiB5KHQpe3JldHVyblt0LnNvdXJjZS54MSx0LnkwXX1mdW5jdGlvbiB4KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX10LnNhbmtleT1mdW5jdGlvbigpe3ZhciB0PTAsbj0wLGk9MSx5PTEseD0yNCxiPTgsXz1kLHc9YSxrPWcsVD12LEE9MzIsTT0yLzM7ZnVuY3Rpb24gUygpe3ZhciBhPXtub2RlczprLmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczpULmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIGZ1bmN0aW9uKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KTt2YXIgZT1yLm1hcCh0Lm5vZGVzLF8pO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbih0LHIpe3QuaW5kZXg9cjt2YXIgbj10LnNvdXJjZSxpPXQudGFyZ2V0OyJvYmplY3QiIT10eXBlb2YgbiYmKG49dC5zb3VyY2U9bShlLG4pKSwib2JqZWN0IiE9dHlwZW9mIGkmJihpPXQudGFyZ2V0PW0oZSxpKSksbi5zb3VyY2VMaW5rcy5wdXNoKHQpLGkudGFyZ2V0TGlua3MucHVzaCh0KX0pfShhKSxmdW5jdGlvbih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC52YWx1ZT1NYXRoLm1heChlLnN1bSh0LnNvdXJjZUxpbmtzLHUpLGUuc3VtKHQudGFyZ2V0TGlua3MsdSkpfSl9KGEpLGZ1bmN0aW9uKGUpe3ZhciByLG4sYTtmb3Iocj1lLm5vZGVzLG49W10sYT0wO3IubGVuZ3RoOysrYSxyPW4sbj1bXSlyLmZvckVhY2goZnVuY3Rpb24odCl7dC5kZXB0aD1hLHQuc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtuLmluZGV4T2YodC50YXJnZXQpPDAmJm4ucHVzaCh0LnRhcmdldCl9KX0pO2ZvcihyPWUubm9kZXMsbj1bXSxhPTA7ci5sZW5ndGg7KythLHI9bixuPVtdKXIuZm9yRWFjaChmdW5jdGlvbih0KXt0LmhlaWdodD1hLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtuLmluZGV4T2YodC5zb3VyY2UpPDAmJm4ucHVzaCh0LnNvdXJjZSl9KX0pO3ZhciBvPShpLXQteCkvKGEtMSk7ZS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UueDE9KGUueDA9dCtNYXRoLm1heCgwLE1hdGgubWluKGEtMSxNYXRoLmZsb29yKHcuY2FsbChudWxsLGUsYSkpKSkqbykreH0pfShhKSxmdW5jdGlvbih0KXt2YXIgaT1yLm5lc3QoKS5rZXkoZnVuY3Rpb24odCl7cmV0dXJuIHQueDB9KS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyh0Lm5vZGVzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSk7KGZ1bmN0aW9uKCl7dmFyIHI9ZS5tYXgoaSxmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KSxhPU0qKHktbikvKHItMSk7Yj5hJiYoYj1hKTt2YXIgbz1lLm1pbihpLGZ1bmN0aW9uKHQpe3JldHVybih5LW4tKHQubGVuZ3RoLTEpKmIpL2Uuc3VtKHQsdSl9KTtpLmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC55MT0odC55MD1lKSt0LnZhbHVlKm99KX0pLHQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqb30pfSkoKSxkKCk7Zm9yKHZhciBhPTEsbz1BO28+MDstLW8pbChhKj0uOTkpLGQoKSxzKGEpLGQoKTtmdW5jdGlvbiBzKHQpe2kuZm9yRWFjaChmdW5jdGlvbihyKXtyLmZvckVhY2goZnVuY3Rpb24ocil7aWYoci50YXJnZXRMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnRhcmdldExpbmtzLGgpL2Uuc3VtKHIudGFyZ2V0TGlua3MsdSktZihyKSkqdDtyLnkwKz1uLHIueTErPW59fSl9KX1mdW5jdGlvbiBsKHQpe2kuc2xpY2UoKS5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbihyKXtyLmZvckVhY2goZnVuY3Rpb24ocil7aWYoci5zb3VyY2VMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnNvdXJjZUxpbmtzLHApL2Uuc3VtKHIuc291cmNlTGlua3MsdSktZihyKSkqdDtyLnkwKz1uLHIueTErPW59fSl9KX1mdW5jdGlvbiBkKCl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhPW4sbz10Lmxlbmd0aDtmb3IodC5zb3J0KGMpLGk9MDtpPG87KytpKWU9dFtpXSwocj1hLWUueTApPjAmJihlLnkwKz1yLGUueTErPXIpLGE9ZS55MStiO2lmKChyPWEtYi15KT4wKWZvcihhPWUueTAtPXIsZS55MS09cixpPW8tMjtpPj0wOy0taSllPXRbaV0sKHI9ZS55MStiLWEpPjAmJihlLnkwLT1yLGUueTEtPXIpLGE9ZS55MH0pfX0oYSksRShhKSxhfWZ1bmN0aW9uIEUodCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydChsKSx0LnRhcmdldExpbmtzLnNvcnQocyl9KSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC55MCxyPWU7dC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aH0pLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnkxPXIrdC53aWR0aC8yLHIrPXQud2lkdGh9KX0pfXJldHVybiBTLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gRSh0KSx0fSxTLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om8odCksUyk6X30sUy5ub2RlQWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLFMpOnd9LFMubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PSt0LFMpOnh9LFMubm9kZVBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K3QsUyk6Yn0sUy5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om8odCksUyk6a30sUy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om8odCksUyk6VH0sUy5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW49MCxpPStlWzBdLHk9K2VbMV0sUyk6W2ktdCx5LW5dfSxTLmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZVswXVswXSxpPStlWzFdWzBdLG49K2VbMF1bMV0seT0rZVsxXVsxXSxTKTpbW3Qsbl0sW2kseV1dfSxTLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9K3QsUyk6QX0sU30sdC5zYW5rZXlDZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/ZS5taW4odC5zb3VyY2VMaW5rcyxpKS0xOjB9LHQuc2Fua2V5TGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZXB0aH0sdC5zYW5rZXlSaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9LHQuc2Fua2V5SnVzdGlmeT1hLHQuc2Fua2V5TGlua0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbi5saW5rSG9yaXpvbnRhbCgpLnNvdXJjZSh5KS50YXJnZXQoeCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/aShyLHQoImQzLWFycmF5IiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLXNoYXBlIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyl9LHsiZDMtYXJyYXkiOjE0MiwiZDMtY29sbGVjdGlvbiI6MTQzLCJkMy1zaGFwZSI6MTUyfV0sNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWstbWFwIik6V2Vha01hcCxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz1uZXcgbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodCkscj1lJiYoZS5fdHJpYW5nbGVCdWZmZXIuaGFuZGxlfHxlLl90cmlhbmdsZUJ1ZmZlci5idWZmZXIpO2lmKCFyfHwhdC5pc0J1ZmZlcihyKSl7dmFyIG49aSh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTsoZT1hKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pKS5fdHJpYW5nbGVCdWZmZXI9bixvLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9fSx7ImdsLWJ1ZmZlciI6MjM3LCJnbC12YW8iOjMxOSwid2Vhay1tYXAiOjUzNn1dLDUwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49MCxpPTA7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBhPSh0PXQuc2xpY2UoKSlbMF0sbz1hLnRvVXBwZXJDYXNlKCk7aWYoYSE9bylzd2l0Y2godFswXT1vLGEpe2Nhc2UiYSI6dFs2XSs9bix0WzddKz1pO2JyZWFrO2Nhc2UidiI6dFsxXSs9aTticmVhaztjYXNlImgiOnRbMV0rPW47YnJlYWs7ZGVmYXVsdDpmb3IodmFyIHM9MTtzPHQubGVuZ3RoOyl0W3MrK10rPW4sdFtzKytdKz1pfXN3aXRjaChvKXtjYXNlIloiOm49ZSxpPXI7YnJlYWs7Y2FzZSJIIjpuPXRbMV07YnJlYWs7Y2FzZSJWIjppPXRbMV07YnJlYWs7Y2FzZSJNIjpuPWU9dFsxXSxpPXI9dFsyXTticmVhaztkZWZhdWx0Om49dFt0Lmxlbmd0aC0yXSxpPXRbdC5sZW5ndGgtMV19cmV0dXJuIHR9KX19LHt9XSw1MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInBhZC1sZWZ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPSJudW1iZXIiPT10eXBlb2YgZT9lOjEscj1yfHwiOiAiO3ZhciBpPXQuc3BsaXQoL1xyP1xuLyksYT1TdHJpbmcoaS5sZW5ndGgrZS0xKS5sZW5ndGg7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKHQsaSl7dmFyIG89aStlLHM9U3RyaW5nKG8pLmxlbmd0aCxsPW4obyxhLXMpO3JldHVybiBsK3IrdH0pLmpvaW4oIlxuIil9fSx7InBhZC1sZWZ0Ijo0NDl9XSw1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuWzBdO2Zvcih2YXIgcj10WzBdLmxlbmd0aCxuPVt0WzBdXSxhPVswXSxvPTE7bzxlOysrbylpZihuLnB1c2godFtvXSksaShuLHIpKXtpZihhLnB1c2gobyksYS5sZW5ndGg9PT1yKzEpcmV0dXJuIGF9ZWxzZSBuLnBvcCgpO3JldHVybiBhfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKTtmdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKzEpLGk9MDtpPHQubGVuZ3RoOysraSlyW2ldPXRbaV07Zm9yKGk9MDtpPD10Lmxlbmd0aDsrK2kpe2Zvcih2YXIgYT10Lmxlbmd0aDthPD1lOysrYSl7Zm9yKHZhciBvPW5ldyBBcnJheShlKSxzPTA7czxlOysrcylvW3NdPU1hdGgucG93KGErMS1pLHMpO3JbYV09b31pZihuLmFwcGx5KHZvaWQgMCxyKSlyZXR1cm4hMH1yZXR1cm4hMX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo0OTR9XSw1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlKS5maWx0ZXIoZnVuY3Rpb24ocil7Zm9yKHZhciBuPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKW5bYV09ZVtyW2FdXTtyZXR1cm4gaShuKSp0PDF9KX07dmFyIG49dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxpPXQoImNpcmN1bXJhZGl1cyIpfSx7Y2lyY3VtcmFkaXVzOjEwNCwiZGVsYXVuYXktdHJpYW5ndWxhdGUiOjE1Nn1dLDU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkobih0LGUpKX07dmFyIG49dCgiYWxwaGEtY29tcGxleCIpLGk9dCgic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5Iil9LHsiYWxwaGEtY29tcGxleCI6NTMsInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeSI6NTAxfV0sNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtlPW51bGw9PWU/MTpNYXRoLmZsb29yKGUpO2Zvcih2YXIgcj1BcnJheSgyKmUpLG49MDtuPGU7bisrKXtmb3IodmFyIGk9LTEvMCxhPTEvMCxvPW4scz10Lmxlbmd0aDtvPHM7bys9ZSl0W29dPmkmJihpPXRbb10pLHRbb108YSYmKGE9dFtvXSk7cltuXT1hLHJbZStuXT1pfXJldHVybiByfX0se31dLDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImFycmF5LWJvdW5kcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtudWxsPT1lJiYoZT0xKTtudWxsPT1yJiYocj1uKHQsZSkpO2Zvcih2YXIgaT0wO2k8ZTtpKyspe3ZhciBhPXJbZStpXSxvPXJbaV0scz1pLGw9dC5sZW5ndGg7aWYoYT09PTEvMCYmbz09PS0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6dFtzXT09PW8/MDouNTtlbHNlIGlmKGE9PT0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6MDtlbHNlIGlmKG89PT0tMS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09bz8wOjE7ZWxzZXt2YXIgYz1hLW87Zm9yKHM9aTtzPGw7cys9ZSl0W3NdPTA9PT1jPy41Oih0W3NdLW8pL2N9fXJldHVybiB0fX0seyJhcnJheS1ib3VuZHMiOjU1fV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0ibnVtYmVyIj09dHlwZW9mIHQsbj0ibnVtYmVyIj09dHlwZW9mIGU7ciYmIW4/KGU9dCx0PTApOnJ8fG58fCh0PTAsZT0wKTt2YXIgaT0oZXw9MCktKHR8PTApO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoImFycmF5IGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7Zm9yKHZhciBhPW5ldyBBcnJheShpKSxvPTAscz10O288aTtvKysscysrKWFbb109cztyZXR1cm4gYX19LHt9XSw1ODpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5CdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiByLkJ1ZmZlci5pc0J1ZmZlcj9yLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9dmFyIGE9dCgidXRpbC8iKSxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz1BcnJheS5wcm90b3R5cGUuc2xpY2UsbD0iZm9vIj09PWZ1bmN0aW9uKCl7fS5uYW1lO2Z1bmN0aW9uIGModCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB1KHQpe3JldHVybiFpKHQpJiYoImZ1bmN0aW9uIj09dHlwZW9mIHIuQXJyYXlCdWZmZXImJigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyh0KTohIXQmJih0IGluc3RhbmNlb2YgRGF0YVZpZXd8fCEhKHQuYnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkpKX12YXIgZj1lLmV4cG9ydHM9bSxoPS9ccypmdW5jdGlvblxzKyhbXlwoXHNdKilccyovO2Z1bmN0aW9uIHAodCl7aWYoYS5pc0Z1bmN0aW9uKHQpKXtpZihsKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLm1hdGNoKGgpO3JldHVybiBlJiZlWzFdfX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QubGVuZ3RoPGU/dDp0LnNsaWNlKDAsZSk6dH1mdW5jdGlvbiBnKHQpe2lmKGx8fCFhLmlzRnVuY3Rpb24odCkpcmV0dXJuIGEuaW5zcGVjdCh0KTt2YXIgZT1wKHQpO3JldHVybiJbRnVuY3Rpb24iKyhlPyI6ICIrZToiIikrIl0ifWZ1bmN0aW9uIHYodCxlLHIsbixpKXt0aHJvdyBuZXcgZi5Bc3NlcnRpb25FcnJvcih7bWVzc2FnZTpyLGFjdHVhbDp0LGV4cGVjdGVkOmUsb3BlcmF0b3I6bixzdGFja1N0YXJ0RnVuY3Rpb246aX0pfWZ1bmN0aW9uIG0odCxlKXt0fHx2KHQsITAsZSwiPT0iLGYub2spfWZ1bmN0aW9uIHkodCxlLHIsbyl7aWYodD09PWUpcmV0dXJuITA7aWYoaSh0KSYmaShlKSlyZXR1cm4gMD09PW4odCxlKTtpZihhLmlzRGF0ZSh0KSYmYS5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYoYS5pc1JlZ0V4cCh0KSYmYS5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKHUodCkmJnUoZSkmJmModCk9PT1jKGUpJiYhKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpKXJldHVybiAwPT09bihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKTtpZihpKHQpIT09aShlKSlyZXR1cm4hMTt2YXIgbD0obz1vfHx7YWN0dWFsOltdLGV4cGVjdGVkOltdfSkuYWN0dWFsLmluZGV4T2YodCk7cmV0dXJuLTEhPT1sJiZsPT09by5leHBlY3RlZC5pbmRleE9mKGUpfHwoby5hY3R1YWwucHVzaCh0KSxvLmV4cGVjdGVkLnB1c2goZSksZnVuY3Rpb24odCxlLHIsbil7aWYobnVsbD09dHx8bnVsbD09ZSlyZXR1cm4hMTtpZihhLmlzUHJpbWl0aXZlKHQpfHxhLmlzUHJpbWl0aXZlKGUpKXJldHVybiB0PT09ZTtpZihyJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITE7dmFyIGk9eCh0KSxvPXgoZSk7aWYoaSYmIW98fCFpJiZvKXJldHVybiExO2lmKGkpcmV0dXJuIHQ9cy5jYWxsKHQpLGU9cy5jYWxsKGUpLHkodCxlLHIpO3ZhciBsLGMsdT13KHQpLGY9dyhlKTtpZih1Lmxlbmd0aCE9PWYubGVuZ3RoKXJldHVybiExO2Zvcih1LnNvcnQoKSxmLnNvcnQoKSxjPXUubGVuZ3RoLTE7Yz49MDtjLS0paWYodVtjXSE9PWZbY10pcmV0dXJuITE7Zm9yKGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZihsPXVbY10sIXkodFtsXSxlW2xdLHIsbikpcmV0dXJuITE7cmV0dXJuITB9KHQsZSxyLG8pKX1yZXR1cm4gcj90PT09ZTp0PT1lfWZ1bmN0aW9uIHgodCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBiKHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKCJbb2JqZWN0IFJlZ0V4cF0iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiYhMD09PWUuY2FsbCh7fSx0KX1mdW5jdGlvbiBfKHQsZSxyLG4pe3ZhciBpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJibG9jayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksaT1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dCgpfWNhdGNoKHQpe2U9dH1yZXR1cm4gZX0oZSksbj0ociYmci5uYW1lPyIgKCIrci5uYW1lKyIpLiI6Ii4iKSsobj8iICIrbjoiLiIpLHQmJiFpJiZ2KGksciwiTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24iK24pO3ZhciBvPSJzdHJpbmciPT10eXBlb2YgbixzPSF0JiZpJiYhcjtpZigoIXQmJmEuaXNFcnJvcihpKSYmbyYmYihpLHIpfHxzKSYmdihpLHIsIkdvdCB1bndhbnRlZCBleGNlcHRpb24iK24pLHQmJmkmJnImJiFiKGkscil8fCF0JiZpKXRocm93IGl9Zi5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLmFjdHVhbD10LmFjdHVhbCx0aGlzLmV4cGVjdGVkPXQuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj10Lm9wZXJhdG9yLHQubWVzc2FnZT8odGhpcy5tZXNzYWdlPXQubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9ZChnKChlPXRoaXMpLmFjdHVhbCksMTI4KSsiICIrZS5vcGVyYXRvcisiICIrZChnKGUuZXhwZWN0ZWQpLDEyOCksdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSEwKTt2YXIgcj10LnN0YWNrU3RhcnRGdW5jdGlvbnx8djtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHIpO2Vsc2V7dmFyIG49bmV3IEVycm9yO2lmKG4uc3RhY2spe3ZhciBpPW4uc3RhY2ssYT1wKHIpLG89aS5pbmRleE9mKCJcbiIrYSk7aWYobz49MCl7dmFyIHM9aS5pbmRleE9mKCJcbiIsbysxKTtpPWkuc3Vic3RyaW5nKHMrMSl9dGhpcy5zdGFjaz1pfX19LGEuaW5oZXJpdHMoZi5Bc3NlcnRpb25FcnJvcixFcnJvciksZi5mYWlsPXYsZi5vaz1tLGYuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPWUmJnYodCxlLHIsIj09IixmLmVxdWFsKX0sZi5ub3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09ZSYmdih0LGUsciwiIT0iLGYubm90RXF1YWwpfSxmLmRlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7eSh0LGUsITEpfHx2KHQsZSxyLCJkZWVwRXF1YWwiLGYuZGVlcEVxdWFsKX0sZi5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3kodCxlLCEwKXx8dih0LGUsciwiZGVlcFN0cmljdEVxdWFsIixmLmRlZXBTdHJpY3RFcXVhbCl9LGYubm90RGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSwhMSkmJnYodCxlLHIsIm5vdERlZXBFcXVhbCIsZi5ub3REZWVwRXF1YWwpfSxmLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiB0KGUscixuKXt5KGUsciwhMCkmJnYoZSxyLG4sIm5vdERlZXBTdHJpY3RFcXVhbCIsdCl9LGYuc3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPT1lJiZ2KHQsZSxyLCI9PT0iLGYuc3RyaWN0RXF1YWwpfSxmLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT09ZSYmdih0LGUsciwiIT09IixmLm5vdFN0cmljdEVxdWFsKX0sZi50aHJvd3M9ZnVuY3Rpb24odCxlLHIpe18oITAsdCxlLHIpfSxmLmRvZXNOb3RUaHJvdz1mdW5jdGlvbih0LGUscil7XyghMSx0LGUscil9LGYuaWZFcnJvcj1mdW5jdGlvbih0KXtpZih0KXRocm93IHR9O3ZhciB3PU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdClvLmNhbGwodCxyKSYmZS5wdXNoKHIpO3JldHVybiBlfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJ1dGlsLyI6NjF9XSw1OTpbZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSx7fV0sNjA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZFVJbnQ4fX0se31dLDYxOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUsbil7dmFyIGk9LyVbc2RqJV0vZztyLmZvcm1hdD1mdW5jdGlvbih0KXtpZighbSh0KSl7Zm9yKHZhciBlPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWUucHVzaChzKGFyZ3VtZW50c1tyXSkpO3JldHVybiBlLmpvaW4oIiAiKX1yPTE7Zm9yKHZhciBuPWFyZ3VtZW50cyxhPW4ubGVuZ3RoLG89U3RyaW5nKHQpLnJlcGxhY2UoaSxmdW5jdGlvbih0KXtpZigiJSUiPT09dClyZXR1cm4iJSI7aWYocj49YSlyZXR1cm4gdDtzd2l0Y2godCl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIobltyKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5bcisrXSl9Y2F0Y2godCl7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIHR9fSksbD1uW3JdO3I8YTtsPW5bKytyXSlnKGwpfHwhYihsKT9vKz0iICIrbDpvKz0iICIrcyhsKTtyZXR1cm4gb30sci5kZXByZWNhdGU9ZnVuY3Rpb24odCxpKXtpZih5KG4ucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVwcmVjYXRlKHQsaSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PWUubm9EZXByZWNhdGlvbilyZXR1cm4gdDt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighYSl7aWYoZS50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihpKTtlLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShpKTpjb25zb2xlLmVycm9yKGkpLGE9ITB9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIGEsbz17fTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49e3NlZW46W10sc3R5bGl6ZTpjfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKG4uZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYobi5jb2xvcnM9YXJndW1lbnRzWzNdKSxkKGUpP24uc2hvd0hpZGRlbj1lOmUmJnIuX2V4dGVuZChuLGUpLHkobi5zaG93SGlkZGVuKSYmKG4uc2hvd0hpZGRlbj0hMSkseShuLmRlcHRoKSYmKG4uZGVwdGg9MikseShuLmNvbG9ycykmJihuLmNvbG9ycz0hMSkseShuLmN1c3RvbUluc3BlY3QpJiYobi5jdXN0b21JbnNwZWN0PSEwKSxuLmNvbG9ycyYmKG4uc3R5bGl6ZT1sKSx1KG4sdCxuLmRlcHRoKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9cy5zdHlsZXNbZV07cmV0dXJuIHI/Ilx4MWJbIitzLmNvbG9yc1tyXVswXSsibSIrdCsiXHgxYlsiK3MuY29sb3JzW3JdWzFdKyJtIjp0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdH1mdW5jdGlvbiB1KHQsZSxuKXtpZih0LmN1c3RvbUluc3BlY3QmJmUmJmsoZS5pbnNwZWN0KSYmZS5pbnNwZWN0IT09ci5pbnNwZWN0JiYoIWUuY29uc3RydWN0b3J8fGUuY29uc3RydWN0b3IucHJvdG90eXBlIT09ZSkpe3ZhciBpPWUuaW5zcGVjdChuLHQpO3JldHVybiBtKGkpfHwoaT11KHQsaSxuKSksaX12YXIgYT1mdW5jdGlvbih0LGUpe2lmKHkoZSkpcmV0dXJuIHQuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYobShlKSl7dmFyIHI9IiciK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHQuc3R5bGl6ZShyLCJzdHJpbmciKX1pZih2KGUpKXJldHVybiB0LnN0eWxpemUoIiIrZSwibnVtYmVyIik7aWYoZChlKSlyZXR1cm4gdC5zdHlsaXplKCIiK2UsImJvb2xlYW4iKTtpZihnKGUpKXJldHVybiB0LnN0eWxpemUoIm51bGwiLCJudWxsIil9KHQsZSk7aWYoYSlyZXR1cm4gYTt2YXIgbz1PYmplY3Qua2V5cyhlKSxzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCxyKXtlW3RdPSEwfSksZX0obyk7aWYodC5zaG93SGlkZGVuJiYobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSksdyhlKSYmKG8uaW5kZXhPZigibWVzc2FnZSIpPj0wfHxvLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBmKGUpO2lmKDA9PT1vLmxlbmd0aCl7aWYoayhlKSl7dmFyIGw9ZS5uYW1lPyI6ICIrZS5uYW1lOiIiO3JldHVybiB0LnN0eWxpemUoIltGdW5jdGlvbiIrbCsiXSIsInNwZWNpYWwiKX1pZih4KGUpKXJldHVybiB0LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJyZWdleHAiKTtpZihfKGUpKXJldHVybiB0LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwiZGF0ZSIpO2lmKHcoZSkpcmV0dXJuIGYoZSl9dmFyIGMsYj0iIixUPSExLEE9WyJ7IiwifSJdOyhwKGUpJiYoVD0hMCxBPVsiWyIsIl0iXSksayhlKSkmJihiPSIgW0Z1bmN0aW9uIisoZS5uYW1lPyI6ICIrZS5uYW1lOiIiKSsiXSIpO3JldHVybiB4KGUpJiYoYj0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKSxfKGUpJiYoYj0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChlKSksdyhlKSYmKGI9IiAiK2YoZSkpLDAhPT1vLmxlbmd0aHx8VCYmMCE9ZS5sZW5ndGg/bjwwP3goZSk/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik6dC5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKToodC5zZWVuLnB1c2goZSksYz1UP2Z1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPWUubGVuZ3RoO288czsrK28pUyhlLFN0cmluZyhvKSk/YS5wdXNoKGgodCxlLHIsbixTdHJpbmcobyksITApKTphLnB1c2goIiIpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxkKyQvKXx8YS5wdXNoKGgodCxlLHIsbixpLCEwKSl9KSxhfSh0LGUsbixzLG8pOm8ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBoKHQsZSxuLHMscixUKX0pLHQuc2Vlbi5wb3AoKSxmdW5jdGlvbih0LGUscil7aWYodC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gMCxlLmluZGV4T2YoIlxuIik+PTAmJjAsdCtlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MClyZXR1cm4gclswXSsoIiI9PT1lPyIiOmUrIlxuICIpKyIgIit0LmpvaW4oIixcbiAgIikrIiAiK3JbMV07cmV0dXJuIHJbMF0rZSsiICIrdC5qb2luKCIsICIpKyIgIityWzFdfShjLGIsQSkpOkFbMF0rYitBWzFdfWZ1bmN0aW9uIGYodCl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKyJdIn1mdW5jdGlvbiBoKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7aWYoKGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpfHx7dmFsdWU6ZVtpXX0pLmdldD9zPWwuc2V0P3Quc3R5bGl6ZSgiW0dldHRlci9TZXR0ZXJdIiwic3BlY2lhbCIpOnQuc3R5bGl6ZSgiW0dldHRlcl0iLCJzcGVjaWFsIik6bC5zZXQmJihzPXQuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLFMobixpKXx8KG89IlsiK2krIl0iKSxzfHwodC5zZWVuLmluZGV4T2YobC52YWx1ZSk8MD8ocz1nKHIpP3UodCxsLnZhbHVlLG51bGwpOnUodCxsLnZhbHVlLHItMSkpLmluZGV4T2YoIlxuIik+LTEmJihzPWE/cy5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiAgIit0fSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitzLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iICAgIit0fSkuam9pbigiXG4iKSk6cz10LnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLHkobykpe2lmKGEmJmkubWF0Y2goL15cZCskLykpcmV0dXJuIHM7KG89SlNPTi5zdHJpbmdpZnkoIiIraSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KG89by5zdWJzdHIoMSxvLmxlbmd0aC0yKSxvPXQuc3R5bGl6ZShvLCJuYW1lIikpOihvPW8ucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLG89dC5zdHlsaXplKG8sInN0cmluZyIpKX1yZXR1cm4gbysiOiAiK3N9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBkKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHR9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbnVsbD09PXR9ZnVuY3Rpb24gdih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiB4KHQpe3JldHVybiBiKHQpJiYiW29iamVjdCBSZWdFeHBdIj09PVQodCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIF8odCl7cmV0dXJuIGIodCkmJiJbb2JqZWN0IERhdGVdIj09PVQodCl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gYih0KSYmKCJbb2JqZWN0IEVycm9yXSI9PT1UKHQpfHx0IGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIGsodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIHQ8MTA/IjAiK3QudG9TdHJpbmcoMTApOnQudG9TdHJpbmcoMTApfXIuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoeShhKSYmKGE9ZS5lbnYuTk9ERV9ERUJVR3x8IiIpLHQ9dC50b1VwcGVyQ2FzZSgpLCFvW3RdKWlmKG5ldyBSZWdFeHAoIlxcYiIrdCsiXFxiIiwiaSIpLnRlc3QoYSkpe3ZhciBuPWUucGlkO29bdF09ZnVuY3Rpb24oKXt2YXIgZT1yLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIix0LG4sZSl9fWVsc2Ugb1t0XT1mdW5jdGlvbigpe307cmV0dXJuIG9bdF19LHIuaW5zcGVjdD1zLHMuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxzLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LHIuaXNBcnJheT1wLHIuaXNCb29sZWFuPWQsci5pc051bGw9ZyxyLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fSxyLmlzTnVtYmVyPXYsci5pc1N0cmluZz1tLHIuaXNTeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fSxyLmlzVW5kZWZpbmVkPXksci5pc1JlZ0V4cD14LHIuaXNPYmplY3Q9YixyLmlzRGF0ZT1fLHIuaXNFcnJvcj13LHIuaXNGdW5jdGlvbj1rLHIuaXNQcmltaXRpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8InN5bWJvbCI9PXR5cGVvZiB0fHwidW5kZWZpbmVkIj09dHlwZW9mIHR9LHIuaXNCdWZmZXI9dCgiLi9zdXBwb3J0L2lzQnVmZmVyIik7dmFyIE09WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBTKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXIubG9nPWZ1bmN0aW9uKCl7dmFyIHQsZTtjb25zb2xlLmxvZygiJXMgLSAlcyIsKHQ9bmV3IERhdGUsZT1bQSh0LmdldEhvdXJzKCkpLEEodC5nZXRNaW51dGVzKCkpLEEodC5nZXRTZWNvbmRzKCkpXS5qb2luKCI6IiksW3QuZ2V0RGF0ZSgpLE1bdC5nZXRNb250aCgpXSxlXS5qb2luKCIgIikpLHIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKSl9LHIuaW5oZXJpdHM9dCgiaW5oZXJpdHMiKSxyLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtpZighZXx8IWIoZSkpcmV0dXJuIHQ7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyl0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9zdXBwb3J0L2lzQnVmZmVyIjo2MCxfcHJvY2Vzczo0NzQsaW5oZXJpdHM6NTl9XSw2MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYXRvYih0KX19LHt9XSw2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsYT1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBzPW5ldyBBcnJheShyKzEpLGw9MDtsPD1yOysrbClzW2xdPXRbbF1bb107YVtvXT1zfWFbcl09bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBvPTA7bzw9cjsrK28pYVtyXVtvXT0xO2Zvcih2YXIgYz1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyljW29dPWVbb107Y1tyXT0xO3ZhciB1PW4oYSxjKSxmPWkodVtyKzFdKTswPT09ZiYmKGY9MSk7Zm9yKHZhciBoPW5ldyBBcnJheShyKzEpLG89MDtvPD1yOysrbyloW29dPWkodVtvXSkvZjtyZXR1cm4gaH07dmFyIG49dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl07cmV0dXJuIGV9fSx7InJvYnVzdC1saW5lYXItc29sdmUiOjQ5M31dLDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuYnl0ZUxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT1jKHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIDMqKHIrbikvNC1ufSxyLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPWModCksbj1yWzBdLG89clsxXSxzPW5ldyBhKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMyooZStyKS80LXJ9KDAsbixvKSksbD0wLHU9bz4wP24tNDpuLGY9MDtmPHU7Zis9NCllPWlbdC5jaGFyQ29kZUF0KGYpXTw8MTh8aVt0LmNoYXJDb2RlQXQoZisxKV08PDEyfGlbdC5jaGFyQ29kZUF0KGYrMildPDw2fGlbdC5jaGFyQ29kZUF0KGYrMyldLHNbbCsrXT1lPj4xNiYyNTUsc1tsKytdPWU+PjgmMjU1LHNbbCsrXT0yNTUmZTsyPT09byYmKGU9aVt0LmNoYXJDb2RlQXQoZildPDwyfGlbdC5jaGFyQ29kZUF0KGYrMSldPj40LHNbbCsrXT0yNTUmZSk7MT09PW8mJihlPWlbdC5jaGFyQ29kZUF0KGYpXTw8MTB8aVt0LmNoYXJDb2RlQXQoZisxKV08PDR8aVt0LmNoYXJDb2RlQXQoZisyKV0+PjIsc1tsKytdPWU+PjgmMjU1LHNbbCsrXT0yNTUmZSk7cmV0dXJuIHN9LHIuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxpPXIlMyxhPVtdLG89MCxzPXItaTtvPHM7bys9MTYzODMpYS5wdXNoKHUodCxvLG8rMTYzODM+cz9zOm8rMTYzODMpKTsxPT09aT8oZT10W3ItMV0sYS5wdXNoKG5bZT4+Ml0rbltlPDw0JjYzXSsiPT0iKSk6Mj09PWkmJihlPSh0W3ItMl08PDgpK3Rbci0xXSxhLnB1c2gobltlPj4xMF0rbltlPj40JjYzXStuW2U8PDImNjNdKyI9IikpO3JldHVybiBhLmpvaW4oIiIpfTtmb3IodmFyIG49W10saT1bXSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHM9MCxsPW8ubGVuZ3RoO3M8bDsrK3MpbltzXT1vW3NdLGlbby5jaGFyQ29kZUF0KHMpXT1zO2Z1bmN0aW9uIGModCl7dmFyIGU9dC5sZW5ndGg7aWYoZSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIHI9dC5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1yJiYocj1lKSxbcixyPT09ZT8wOjQtciU0XX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIGksYSxvPVtdLHM9ZTtzPHI7cys9MylpPSh0W3NdPDwxNiYxNjcxMTY4MCkrKHRbcysxXTw8OCY2NTI4MCkrKDI1NSZ0W3MrMl0pLG8ucHVzaChuWyhhPWkpPj4xOCY2M10rblthPj4xMiY2M10rblthPj42JjYzXStuWzYzJmFdKTtyZXR1cm4gby5qb2luKCIiKX1pWyItIi5jaGFyQ29kZUF0KDApXT02MixpWyJfIi5jaGFyQ29kZUF0KDApXT02M30se31dLDY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuYWRkKGVbMF0ubXVsKHRbMV0pKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo3NX1dLDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLm11bChlWzFdKS5jbXAoZVswXS5tdWwodFsxXSkpfX0se31dLDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSksdFsxXS5tdWwoZVswXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6NzV9XSw2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXJhdCIpLGk9dCgiLi9saWIvaXMtYm4iKSxhPXQoIi4vbGliL251bS10by1ibiIpLG89dCgiLi9saWIvc3RyLXRvLWJuIikscz10KCIuL2xpYi9yYXRpb25hbGl6ZSIpLGw9dCgiLi9kaXYiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2lmKG4oZSkpcmV0dXJuIHI/bChlLHQocikpOltlWzBdLmNsb25lKCksZVsxXS5jbG9uZSgpXTt2YXIgYz0wO3ZhciB1LGY7aWYoaShlKSl1PWUuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSl1PW8oZSk7ZWxzZXtpZigwPT09ZSlyZXR1cm5bYSgwKSxhKDEpXTtpZihlPT09TWF0aC5mbG9vcihlKSl1PWEoZSk7ZWxzZXtmb3IoO2UhPT1NYXRoLmZsb29yKGUpOyllKj1NYXRoLnBvdygyLDI1NiksYy09MjU2O3U9YShlKX19aWYobihyKSl1Lm11bChyWzFdKSxmPXJbMF0uY2xvbmUoKTtlbHNlIGlmKGkocikpZj1yLmNsb25lKCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHIpZj1vKHIpO2Vsc2UgaWYocilpZihyPT09TWF0aC5mbG9vcihyKSlmPWEocik7ZWxzZXtmb3IoO3IhPT1NYXRoLmZsb29yKHIpOylyKj1NYXRoLnBvdygyLDI1NiksYys9MjU2O2Y9YShyKX1lbHNlIGY9YSgxKTtjPjA/dT11LnVzaGxuKGMpOmM8MCYmKGY9Zi51c2hsbigtYykpO3JldHVybiBzKHUsZil9fSx7Ii4vZGl2Ijo2NywiLi9pcy1yYXQiOjY5LCIuL2xpYi9pcy1ibiI6NzMsIi4vbGliL251bS10by1ibiI6NzQsIi4vbGliL3JhdGlvbmFsaXplIjo3NSwiLi9saWIvc3RyLXRvLWJuIjo3Nn1dLDY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2lzLWJuIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYyPT09dC5sZW5ndGgmJm4odFswXSkmJm4odFsxXSl9fSx7Ii4vbGliL2lzLWJuIjo3M31dLDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNtcChuZXcgbigwKSl9fSx7ImJuLmpzIjo4NH1dLDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYm4tc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxyPXQud29yZHMsaT0wO2lmKDE9PT1lKWk9clswXTtlbHNlIGlmKDI9PT1lKWk9clswXSs2NzEwODg2NCpyWzFdO2Vsc2UgZm9yKHZhciBhPTA7YTxlO2ErKyl7dmFyIG89clthXTtpKz1vKk1hdGgucG93KDY3MTA4ODY0LGEpfXJldHVybiBuKHQpKml9fSx7Ii4vYm4tc2lnbiI6NzB9XSw3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGk9dCgiYml0LXR3aWRkbGUiKS5jb3VudFRyYWlsaW5nWmVyb3M7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkobi5sbyh0KSk7aWYoZTwzMilyZXR1cm4gZTt2YXIgcj1pKG4uaGkodCkpO2lmKHI+MjApcmV0dXJuIDUyO3JldHVybiByKzMyfX0seyJiaXQtdHdpZGRsZSI6ODIsImRvdWJsZS1iaXRzIjoxNTh9XSw3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt0KCJibi5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZCb29sZWFuKHQud29yZHMpfX0seyJibi5qcyI6ODR9XSw3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJibi5qcyIpLGk9dCgiZG91YmxlLWJpdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aS5leHBvbmVudCh0KTtyZXR1cm4gZTw1Mj9uZXcgbih0KTpuZXcgbih0Kk1hdGgucG93KDIsNTItZSkpLnVzaGxuKGUtNTIpfX0seyJibi5qcyI6ODQsImRvdWJsZS1iaXRzIjoxNTh9XSw3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL251bS10by1ibiIpLGk9dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0KSxhPWkoZSk7aWYoMD09PXIpcmV0dXJuW24oMCksbigxKV07aWYoMD09PWEpcmV0dXJuW24oMCksbigwKV07YTwwJiYodD10Lm5lZygpLGU9ZS5uZWcoKSk7dmFyIG89dC5nY2QoZSk7aWYoby5jbXBuKDEpKXJldHVyblt0LmRpdihvKSxlLmRpdihvKV07cmV0dXJuW3QsZV19fSx7Ii4vYm4tc2lnbiI6NzAsIi4vbnVtLXRvLWJuIjo3NH1dLDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX19LHsiYm4uanMiOjg0fV0sNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzBdKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo3NX1dLDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odFswXSkqbih0WzFdKX19LHsiLi9saWIvYm4tc2lnbiI6NzB9XSw3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLnN1Yih0WzFdLm11bChlWzBdKSksdFsxXS5tdWwoZVsxXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6NzV9XSw4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9ibi10by1udW0iKSxpPXQoIi4vbGliL2N0eiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXTtpZigwPT09ZS5jbXBuKDApKXJldHVybiAwO3ZhciBhPWUuYWJzKCkuZGl2bW9kKHIuYWJzKCkpLG89YS5kaXYscz1uKG8pLGw9YS5tb2QsYz1lLm5lZ2F0aXZlIT09ci5uZWdhdGl2ZT8tMToxO2lmKDA9PT1sLmNtcG4oMCkpcmV0dXJuIGMqcztpZihzKXt2YXIgdT1pKHMpKzQsZj1uKGwudXNobG4odSkuZGl2Um91bmQocikpO3JldHVybiBjKihzK2YqTWF0aC5wb3coMiwtdSkpfXZhciBoPXIuYml0TGVuZ3RoKCktbC5iaXRMZW5ndGgoKSs1MyxmPW4obC51c2hsbihoKS5kaXZSb3VuZChyKSk7cmV0dXJuIGg8MTAyMz9jKmYqTWF0aC5wb3coMiwtaCk6KGYqPU1hdGgucG93KDIsLTEwMjMpLGMqZipNYXRoLnBvdygyLDEwMjMtaCkpfX0seyIuL2xpYi9ibi10by1udW0iOjcxLCIuL2xpYi9jdHoiOjcyfV0sODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dmFyIG89WyJmdW5jdGlvbiAiLHQsIihhLGwsaCwiLG4uam9pbigiLCIpLCIpeyIsYT8iIjoidmFyIGk9IixyPyJsLTEiOiJoKzEiLCI7d2hpbGUobDw9aCl7dmFyIG09KGwraCk+Pj4xLHg9YSIsaT8iLmdldChtKSI6IlttXSJdO3JldHVybiBhP2UuaW5kZXhPZigiYyIpPDA/by5wdXNoKCI7aWYoeD09PXkpe3JldHVybiBtfWVsc2UgaWYoeDw9eSl7Iik6by5wdXNoKCI7dmFyIHA9Yyh4LHkpO2lmKHA9PT0wKXtyZXR1cm4gbX1lbHNlIGlmKHA8PTApeyIpOm8ucHVzaCgiO2lmKCIsZSwiKXtpPW07Iikscj9vLnB1c2goImw9bSsxfWVsc2V7aD1tLTF9Iik6by5wdXNoKCJoPW0tMX1lbHNle2w9bSsxfSIpLG8ucHVzaCgifSIpLGE/by5wdXNoKCJyZXR1cm4gLTF9OyIpOm8ucHVzaCgicmV0dXJuIGl9OyIpLG8uam9pbigiIil9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtuKCJBIiwieCIrdCsieSIsZSxbInkiXSwhMSxpKSxuKCJCIiwieCIrdCsieSIsZSxbInkiXSwhMCxpKSxuKCJQIiwiYyh4LHkpIit0KyIwIixlLFsieSIsImMiXSwhMSxpKSxuKCJRIiwiYyh4LHkpIit0KyIwIixlLFsieSIsImMiXSwhMCxpKSwiZnVuY3Rpb24gZGlzcGF0Y2hCc2VhcmNoIixyLCIoYSx5LGMsbCxoKXtpZihhLnNoYXBlKXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUShhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmh8MCx5LGMpfWVsc2V7cmV0dXJuIEIoYSwoYz09PXVuZGVmaW5lZCk/MDpjfDAsKGw9PT11bmRlZmluZWQpP2Euc2hhcGVbMF0tMTpsfDAseSl9fWVsc2V7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXVuZGVmaW5lZCk/MDpsfDAsKGg9PT11bmRlZmluZWQpP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpsfDAseSl9fX1yZXR1cm4gZGlzcGF0Y2hCc2VhcmNoIixyXS5qb2luKCIiKSkoKX1lLmV4cG9ydHM9e2dlOmkoIj49IiwhMSwiR0UiKSxndDppKCI+IiwhMSwiR1QiKSxsdDppKCI8IiwhMCwiTFQiKSxsZTppKCI8PSIsITAsIkxFIiksZXE6aSgiLSIsITAsIkVRIiwhMCl9fSx7fV0sODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT0zMjtyZXR1cm4odCY9LXQpJiZlLS0sNjU1MzUmdCYmKGUtPTE2KSwxNjcxMTkzNSZ0JiYoZS09OCksMjUyNjQ1MTM1JnQmJihlLT00KSw4NTg5OTM0NTkmdCYmKGUtPTIpLDE0MzE2NTU3NjUmdCYmKGUtPTEpLGV9ci5JTlRfQklUUz0zMixyLklOVF9NQVg9MjE0NzQ4MzY0NyxyLklOVF9NSU49LTE8PDMxLHIuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4odD4wKS0odDwwKX0sci5hYnM9ZnVuY3Rpb24odCl7dmFyIGU9dD4+MzE7cmV0dXJuKHReZSktZX0sci5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZV4odF5lKSYtKHQ8ZSl9LHIubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReKHReZSkmLSh0PGUpfSxyLmlzUG93Mj1mdW5jdGlvbih0KXtyZXR1cm4hKHQmdC0xfHwhdCl9LHIubG9nMj1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiBlPSh0PjY1NTM1KTw8NCxlfD1yPSgodD4+Pj1lKT4yNTUpPDwzLGV8PXI9KCh0Pj4+PXIpPjE1KTw8MiwoZXw9cj0oKHQ+Pj49cik+Myk8PDEpfCh0Pj4+PXIpPj4xfSxyLmxvZzEwPWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xZTk/OTp0Pj0xZTg/ODp0Pj0xZTc/Nzp0Pj0xZTY/Njp0Pj0xZTU/NTp0Pj0xZTQ/NDp0Pj0xZTM/Mzp0Pj0xMDA/Mjp0Pj0xMD8xOjB9LHIucG9wQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDE2ODQzMDA5KigodD0oODU4OTkzNDU5Jih0LT10Pj4+MSYxNDMxNjU1NzY1KSkrKHQ+Pj4yJjg1ODk5MzQ1OSkpKyh0Pj4+NCkmMjUyNjQ1MTM1KT4+PjI0fSxyLmNvdW50VHJhaWxpbmdaZXJvcz1uLHIubmV4dFBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHQrPTA9PT10LC0tdCx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KSsxfSxyLnByZXZQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KS0odD4+PjEpfSxyLnBhcml0eT1mdW5jdGlvbih0KXtyZXR1cm4gdF49dD4+PjE2LHRePXQ+Pj44LHRePXQ+Pj40LDI3MDMwPj4+KHQmPTE1KSYxfTt2YXIgaT1uZXcgQXJyYXkoMjU2KTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwyNTY7KytlKXt2YXIgcj1lLG49ZSxpPTc7Zm9yKHI+Pj49MTtyO3I+Pj49MSluPDw9MSxufD0xJnIsLS1pO3RbZV09bjw8aSYyNTV9fShpKSxyLnJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGlbMjU1JnRdPDwyNHxpW3Q+Pj44JjI1NV08PDE2fGlbdD4+PjE2JjI1NV08PDh8aVt0Pj4+MjQmMjU1XX0sci5pbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQmPTY1NTM1KXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZSY9NjU1MzUpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX0sci5kZWludGVybGVhdmUyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9NjU1MzUmKCh0PTE2NzExOTM1JigodD0yNTI2NDUxMzUmKCh0PTg1ODk5MzQ1OSYoKHQ9dD4+PmUmMTQzMTY1NTc2NSl8dD4+PjEpKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjE2KSk8PDE2Pj4xNn0sci5pbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9MTIyNzEzMzUxMyYoKHQ9MzI3MjM1NjAzNSYoKHQ9MjUxNzE5Njk1JigodD00Mjc4MTkwMzM1JigodCY9MTAyMyl8dDw8MTYpKXx0PDw4KSl8dDw8NCkpfHQ8PDIpLCh0fD0oZT0xMjI3MTMzNTEzJigoZT0zMjcyMzU2MDM1JigoZT0yNTE3MTk2OTUmKChlPTQyNzgxOTAzMzUmKChlJj0xMDIzKXxlPDwxNikpfGU8PDgpKXxlPDw0KSl8ZTw8MikpPDwxKXwocj0xMjI3MTMzNTEzJigocj0zMjcyMzU2MDM1Jigocj0yNTE3MTk2OTUmKChyPTQyNzgxOTAzMzUmKChyJj0xMDIzKXxyPDwxNikpfHI8PDgpKXxyPDw0KSl8cjw8MikpPDwyfSxyLmRlaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xMDIzJigodD00Mjc4MTkwMzM1JigodD0yNTE3MTk2OTUmKCh0PTMyNzIzNTYwMzUmKCh0PXQ+Pj5lJjEyMjcxMzM1MTMpfHQ+Pj4yKSl8dD4+PjQpKXx0Pj4+OCkpfHQ+Pj4xNikpPDwyMj4+MjJ9LHIubmV4dENvbWJpbmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXR8dC0xO3JldHVybiBlKzF8KH5lJi1+ZSktMT4+Pm4odCkrMX19LHt9XSw4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjbGFtcCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXt9KTt2YXIgcixvLHMsbCxjLHUsZixoLHAsZCxnLHY9bnVsbD09ZS5jdXRvZmY/LjI1OmUuY3V0b2ZmLG09bnVsbD09ZS5yYWRpdXM/ODplLnJhZGl1cyx5PWUuY2hhbm5lbHx8MDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fEFycmF5LmlzQXJyYXkodCkpe2lmKCFlLndpZHRofHwhZS5oZWlnaHQpdGhyb3cgRXJyb3IoIkZvciByYXcgZGF0YSB3aWR0aCBhbmQgaGVpZ2h0IHNob3VsZCBiZSBwcm92aWRlZCBieSBvcHRpb25zIik7cj1lLndpZHRoLG89ZS5oZWlnaHQsbD10LHU9ZS5zdHJpZGU/ZS5zdHJpZGU6TWF0aC5mbG9vcih0Lmxlbmd0aC9yL28pfWVsc2Ugd2luZG93LkhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50PyhmPShoPXQpLmdldENvbnRleHQoIjJkIikscj1oLndpZHRoLG89aC5oZWlnaHQscD1mLmdldEltYWdlRGF0YSgwLDAscixvKSxsPXAuZGF0YSx1PTQpOndpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQmJnQgaW5zdGFuY2VvZiB3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPyhoPXQuY2FudmFzLGY9dCxyPWgud2lkdGgsbz1oLmhlaWdodCxwPWYuZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkltYWdlRGF0YSYmdCBpbnN0YW5jZW9mIHdpbmRvdy5JbWFnZURhdGEmJihwPXQscj10LndpZHRoLG89dC5oZWlnaHQsbD1wLmRhdGEsdT00KTtpZihzPU1hdGgubWF4KHIsbyksd2luZG93LlVpbnQ4Q2xhbXBlZEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4Q2xhbXBlZEFycmF5fHx3aW5kb3cuVWludDhBcnJheSYmbCBpbnN0YW5jZW9mIHdpbmRvdy5VaW50OEFycmF5KWZvcihjPWwsbD1BcnJheShyKm8pLGQ9MCxnPWMubGVuZ3RoO2Q8ZztkKyspbFtkXT1jW2QqdSt5XS8yNTU7ZWxzZSBpZigxIT09dSl0aHJvdyBFcnJvcigiUmF3IGRhdGEgY2FuIGhhdmUgb25seSAxIHZhbHVlIHBlciBwaXhlbCIpO3ZhciB4PUFycmF5KHIqbyksYj1BcnJheShyKm8pLF89QXJyYXkocyksdz1BcnJheShzKSxrPUFycmF5KHMrMSksVD1BcnJheShzKTtmb3IoZD0wLGc9cipvO2Q8ZztkKyspe3ZhciBBPWxbZF07eFtkXT0xPT09QT8wOjA9PT1BP2k6TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1BKSwyKSxiW2RdPTE9PT1BP2k6MD09PUE/MDpNYXRoLnBvdyhNYXRoLm1heCgwLEEtLjUpLDIpfWEoeCxyLG8sXyx3LFQsayksYShiLHIsbyxfLHcsVCxrKTt2YXIgTT13aW5kb3cuRmxvYXQzMkFycmF5P25ldyBGbG9hdDMyQXJyYXkocipvKTpuZXcgQXJyYXkocipvKTtmb3IoZD0wLGc9cipvO2Q8ZztkKyspTVtkXT1uKDEtKCh4W2RdLWJbZF0pL20rdiksMCwxKTtyZXR1cm4gTX07dmFyIGk9MWUyMDtmdW5jdGlvbiBhKHQsZSxyLG4saSxhLHMpe2Zvcih2YXIgbD0wO2w8ZTtsKyspe2Zvcih2YXIgYz0wO2M8cjtjKyspbltjXT10W2MqZStsXTtmb3IobyhuLGksYSxzLHIpLGM9MDtjPHI7YysrKXRbYyplK2xdPWlbY119Zm9yKGM9MDtjPHI7YysrKXtmb3IobD0wO2w8ZTtsKyspbltsXT10W2MqZStsXTtmb3IobyhuLGksYSxzLGUpLGw9MDtsPGU7bCsrKXRbYyplK2xdPU1hdGguc3FydChpW2xdKX19ZnVuY3Rpb24gbyh0LGUscixuLGEpe3JbMF09MCxuWzBdPS1pLG5bMV09K2k7Zm9yKHZhciBvPTEscz0wO288YTtvKyspe2Zvcih2YXIgbD0odFtvXStvKm8tKHRbcltzXV0rcltzXSpyW3NdKSkvKDIqby0yKnJbc10pO2w8PW5bc107KXMtLSxsPSh0W29dK28qby0odFtyW3NdXStyW3NdKnJbc10pKS8oMipvLTIqcltzXSk7clsrK3NdPW8sbltzXT1sLG5bcysxXT0raX1mb3Iobz0wLHM9MDtvPGE7bysrKXtmb3IoO25bcysxXTxvOylzKys7ZVtvXT0oby1yW3NdKSooby1yW3NdKSt0W3Jbc11dfX19LHtjbGFtcDoxMDV9XSw4NDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gYSh0LGUscil7aWYoYS5pc0JOKHQpKXJldHVybiB0O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT10JiYoImxlIiE9PWUmJiJiZSIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHwiYmUiKSl9dmFyIG87Im9iamVjdCI9PXR5cGVvZiBlP2UuZXhwb3J0cz1hOnIuQk49YSxhLkJOPWEsYS53b3JkU2l6ZT0yNjt0cnl7bz10KCJidWZmZXIiKS5CdWZmZXJ9Y2F0Y2godCl7fWZ1bmN0aW9uIHModCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksYT1lO2E8aTthKyspe3ZhciBvPXQuY2hhckNvZGVBdChhKS00ODtuPDw9NCxufD1vPj00OSYmbzw9NTQ/by00OSsxMDpvPj0xNyYmbzw9MjI/by0xNysxMDoxNSZvfXJldHVybiBufWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxhO28rKyl7dmFyIHM9dC5jaGFyQ29kZUF0KG8pLTQ4O2kqPW4saSs9cz49NDk/cy00OSsxMDpzPj0xNz9zLTE3KzEwOnN9cmV0dXJuIGl9YS5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYXx8bnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWEud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LGEubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxhLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sYS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdE51bWJlcih0LGUscik7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpOyJoZXgiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNik7dmFyIGk9MDsiLSI9PT0odD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmaSsrLDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGkpOnRoaXMuX3BhcnNlQmFzZSh0LGUsaSksIi0iPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLCJsZSI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxhLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHQsZSxyKXtpZihuKCJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIGEsbyxzPTA7aWYoImJlIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxhPTA7aT49MDtpLT0zKW89dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7ZWxzZSBpZigibGUiPT09cilmb3IoaT0wLGE9MDtpPHQubGVuZ3RoO2krPTMpbz10W2ldfHRbaSsxXTw8OHx0W2krMl08PDE2LHRoaXMud29yZHNbYV18PW88PHMmNjcxMDg4NjMsdGhpcy53b3Jkc1thKzFdPW8+Pj4yNi1zJjY3MTA4ODYzLChzKz0yNCk+PTI2JiYocy09MjYsYSsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24odCxlKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPTA7dmFyIG4saSxhPTA7Zm9yKHI9dC5sZW5ndGgtNixuPTA7cj49ZTtyLT02KWk9cyh0LHIscis2KSx0aGlzLndvcmRzW25dfD1pPDxhJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LWEmNDE5NDMwMywoYSs9MjQpPj0yNiYmKGEtPTI2LG4rKyk7cis2IT09ZSYmKGk9cyh0LGUscis2KSx0aGlzLndvcmRzW25dfD1pPDxhJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LWEmNDE5NDMwMyksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGk9MTtpPD02NzEwODg2MztpKj1lKW4rKztuLS0saT1pL2V8MDtmb3IodmFyIGE9dC5sZW5ndGgtcixvPWElbixzPU1hdGgubWluKGEsYS1vKStyLGM9MCx1PXI7dTxzO3UrPW4pYz1sKHQsdSx1K24sZSksdGhpcy5pbXVsbihpKSx0aGlzLndvcmRzWzBdK2M8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9Yzp0aGlzLl9pYWRkbihjKTtpZigwIT09byl7dmFyIGY9MTtmb3IoYz1sKHQsdSx0Lmxlbmd0aCxlKSx1PTA7dTxvO3UrKylmKj1lO3RoaXMuaW11bG4oZiksdGhpcy53b3Jkc1swXStjPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWM6dGhpcy5faWFkZG4oYyl9fSxhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxhLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0sYS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxhLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sYS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgYz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSx1PVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGY9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gaCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLGE9MHxlLndvcmRzWzBdLG89aSphLHM9NjcxMDg4NjMmbyxsPW8vNjcxMDg4NjR8MDtyLndvcmRzWzBdPXM7Zm9yKHZhciBjPTE7YzxuO2MrKyl7Zm9yKHZhciB1PWw+Pj4yNixmPTY3MTA4ODYzJmwsaD1NYXRoLm1pbihjLGUubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxjLXQubGVuZ3RoKzEpO3A8PWg7cCsrKXt2YXIgZD1jLXB8MDt1Kz0obz0oaT0wfHQud29yZHNbZF0pKihhPTB8ZS53b3Jkc1twXSkrZikvNjcxMDg4NjR8MCxmPTY3MTA4ODYzJm99ci53b3Jkc1tjXT0wfGYsbD0wfHV9cmV0dXJuIDAhPT1sP3Iud29yZHNbY109MHxsOnIubGVuZ3RoLS0sci5zdHJpcCgpfWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoZT0wfGV8fDEsMTY9PT0odD10fHwxMCl8fCJoZXgiPT09dCl7cj0iIjtmb3IodmFyIGk9MCxhPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihzPDxpfGEpKS50b1N0cmluZygxNik7cj0wIT09KGE9cz4+PjI0LWkmMTY3NzcyMTUpfHxvIT09dGhpcy5sZW5ndGgtMT9jWzYtbC5sZW5ndGhdK2wrcjpsK3IsKGkrPTIpPj0yNiYmKGktPTI2LG8tLSl9Zm9yKDAhPT1hJiYocj1hLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT0wOylyPSIwIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9Ii0iK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIGg9dVt0XSxwPWZbdF07cj0iIjt2YXIgZD10aGlzLmNsb25lKCk7Zm9yKGQubmVnYXRpdmU9MDshZC5pc1plcm8oKTspe3ZhciBnPWQubW9kbihwKS50b1N0cmluZyh0KTtyPShkPWQuaWRpdm4ocCkpLmlzWmVybygpP2crcjpjW2gtZy5sZW5ndGhdK2crcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9IjAiK3IpO3IubGVuZ3RoJWUhPTA7KXI9IjAiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj0iLSIrcikscn1uKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGEucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxhLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKCJ1bmRlZmluZWQiIT10eXBlb2YgbyksdGhpcy50b0FycmF5TGlrZShvLHQsZSl9LGEucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5ieXRlTGVuZ3RoKCksYT1yfHxNYXRoLm1heCgxLGkpO24oaTw9YSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG4oYT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIG8scyxsPSJsZSI9PT1lLGM9bmV3IHQoYSksdT10aGlzLmNsb25lKCk7aWYobCl7Zm9yKHM9MDshdS5pc1plcm8oKTtzKyspbz11LmFuZGxuKDI1NSksdS5pdXNocm4oOCksY1tzXT1vO2Zvcig7czxhO3MrKyljW3NdPTB9ZWxzZXtmb3Iocz0wO3M8YS1pO3MrKyljW3NdPTA7Zm9yKHM9MDshdS5pc1plcm8oKTtzKyspbz11LmFuZGxuKDI1NSksdS5pdXNocm4oOCksY1thLXMtMV09b31yZXR1cm4gY30sTWF0aC5jbHozMj9hLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTphLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0sYS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT0oMSZlKSYmcisrLHJ9LGEucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxhLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sYS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sYS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sYS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sYS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGEucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxhLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxhLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0sYS5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0sYS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0sYS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sYS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sYS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sYS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LGEucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LGEucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LGEucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LGEucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIHI9dC8yNnwwLGk9dCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXT1lP3RoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGk9MCxhPTA7YTxuLmxlbmd0aDthKyspZT0oMHxyLndvcmRzW2FdKSsoMHxuLndvcmRzW2FdKStpLHRoaXMud29yZHNbYV09NjcxMDg4NjMmZSxpPWU+Pj4yNjtmb3IoOzAhPT1pJiZhPHIubGVuZ3RoO2ErKyllPSgwfHIud29yZHNbYV0pK2ksdGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7YTxyLmxlbmd0aDthKyspdGhpcy53b3Jkc1thXT1yLndvcmRzW2FdO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odC5uZWdhdGl2ZT0wLGU9dGhpcy5zdWIodCksdC5uZWdhdGl2ZV49MSxlKTowPT09dC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxlPXQuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxlKTp0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh0KTp0LmNsb25lKCkuaWFkZCh0aGlzKX0sYS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0KXtpZigwIT09dC5uZWdhdGl2ZSl7dC5uZWdhdGl2ZT0wO3ZhciBlPXRoaXMuaWFkZCh0KTtyZXR1cm4gdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHIsbixpPXRoaXMuY21wKHQpO2lmKDA9PT1pKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztpPjA/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGE9MCxvPTA7bzxuLmxlbmd0aDtvKyspYT0oZT0oMHxyLndvcmRzW29dKS0oMHxuLndvcmRzW29dKSthKT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlO2Zvcig7MCE9PWEmJm88ci5sZW5ndGg7bysrKWE9KGU9KDB8ci53b3Jkc1tvXSkrYSk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtpZigwPT09YSYmbzxyLmxlbmd0aCYmciE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLG8pLHIhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbz10LndvcmRzLHM9ZS53b3JkcyxsPXIud29yZHMsYz0wLHU9MHxvWzBdLGY9ODE5MSZ1LGg9dT4+PjEzLHA9MHxvWzFdLGQ9ODE5MSZwLGc9cD4+PjEzLHY9MHxvWzJdLG09ODE5MSZ2LHk9dj4+PjEzLHg9MHxvWzNdLGI9ODE5MSZ4LF89eD4+PjEzLHc9MHxvWzRdLGs9ODE5MSZ3LFQ9dz4+PjEzLEE9MHxvWzVdLE09ODE5MSZBLFM9QT4+PjEzLEU9MHxvWzZdLEM9ODE5MSZFLEw9RT4+PjEzLHo9MHxvWzddLE89ODE5MSZ6LEk9ej4+PjEzLEQ9MHxvWzhdLFA9ODE5MSZELFI9RD4+PjEzLEY9MHxvWzldLEI9ODE5MSZGLE49Rj4+PjEzLGo9MHxzWzBdLFY9ODE5MSZqLFU9aj4+PjEzLHE9MHxzWzFdLEg9ODE5MSZxLEc9cT4+PjEzLFk9MHxzWzJdLFc9ODE5MSZZLFg9WT4+PjEzLFo9MHxzWzNdLCQ9ODE5MSZaLEo9Wj4+PjEzLEs9MHxzWzRdLFE9ODE5MSZLLHR0PUs+Pj4xMyxldD0wfHNbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8c1s2XSxhdD04MTkxJml0LG90PWl0Pj4+MTMsc3Q9MHxzWzddLGx0PTgxOTEmc3QsY3Q9c3Q+Pj4xMyx1dD0wfHNbOF0sZnQ9ODE5MSZ1dCxodD11dD4+PjEzLHB0PTB8c1s5XSxkdD04MTkxJnB0LGd0PXB0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTk7dmFyIHZ0PShjKyhuPU1hdGguaW11bChmLFYpKXwwKSsoKDgxOTEmKGk9KGk9TWF0aC5pbXVsKGYsVSkpK01hdGguaW11bChoLFYpfDApKTw8MTMpfDA7Yz0oKGE9TWF0aC5pbXVsKGgsVSkpKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChkLFYpLGk9KGk9TWF0aC5pbXVsKGQsVSkpK01hdGguaW11bChnLFYpfDAsYT1NYXRoLmltdWwoZyxVKTt2YXIgbXQ9KGMrKG49bitNYXRoLmltdWwoZixIKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixHKXwwKStNYXRoLmltdWwoaCxIKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsRyl8MCkrKGk+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKG0sViksaT0oaT1NYXRoLmltdWwobSxVKSkrTWF0aC5pbXVsKHksVil8MCxhPU1hdGguaW11bCh5LFUpLG49bitNYXRoLmltdWwoZCxIKXwwLGk9KGk9aStNYXRoLmltdWwoZCxHKXwwKStNYXRoLmltdWwoZyxIKXwwLGE9YStNYXRoLmltdWwoZyxHKXwwO3ZhciB5dD0oYysobj1uK01hdGguaW11bChmLFcpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLFgpfDApK01hdGguaW11bChoLFcpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxYKXwwKSsoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoYixWKSxpPShpPU1hdGguaW11bChiLFUpKStNYXRoLmltdWwoXyxWKXwwLGE9TWF0aC5pbXVsKF8sVSksbj1uK01hdGguaW11bChtLEgpfDAsaT0oaT1pK01hdGguaW11bChtLEcpfDApK01hdGguaW11bCh5LEgpfDAsYT1hK01hdGguaW11bCh5LEcpfDAsbj1uK01hdGguaW11bChkLFcpfDAsaT0oaT1pK01hdGguaW11bChkLFgpfDApK01hdGguaW11bChnLFcpfDAsYT1hK01hdGguaW11bChnLFgpfDA7dmFyIHh0PShjKyhuPW4rTWF0aC5pbXVsKGYsJCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsSil8MCkrTWF0aC5pbXVsKGgsJCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLEopfDApKyhpPj4+MTMpfDApKyh4dD4+PjI2KXwwLHh0Jj02NzEwODg2MyxuPU1hdGguaW11bChrLFYpLGk9KGk9TWF0aC5pbXVsKGssVSkpK01hdGguaW11bChULFYpfDAsYT1NYXRoLmltdWwoVCxVKSxuPW4rTWF0aC5pbXVsKGIsSCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsRyl8MCkrTWF0aC5pbXVsKF8sSCl8MCxhPWErTWF0aC5pbXVsKF8sRyl8MCxuPW4rTWF0aC5pbXVsKG0sVyl8MCxpPShpPWkrTWF0aC5pbXVsKG0sWCl8MCkrTWF0aC5pbXVsKHksVyl8MCxhPWErTWF0aC5pbXVsKHksWCl8MCxuPW4rTWF0aC5pbXVsKGQsJCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsSil8MCkrTWF0aC5pbXVsKGcsJCl8MCxhPWErTWF0aC5pbXVsKGcsSil8MDt2YXIgYnQ9KGMrKG49bitNYXRoLmltdWwoZixRKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZix0dCl8MCkrTWF0aC5pbXVsKGgsUSl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLHR0KXwwKSsoaT4+PjEzKXwwKSsoYnQ+Pj4yNil8MCxidCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoTSxWKSxpPShpPU1hdGguaW11bChNLFUpKStNYXRoLmltdWwoUyxWKXwwLGE9TWF0aC5pbXVsKFMsVSksbj1uK01hdGguaW11bChrLEgpfDAsaT0oaT1pK01hdGguaW11bChrLEcpfDApK01hdGguaW11bChULEgpfDAsYT1hK01hdGguaW11bChULEcpfDAsbj1uK01hdGguaW11bChiLFcpfDAsaT0oaT1pK01hdGguaW11bChiLFgpfDApK01hdGguaW11bChfLFcpfDAsYT1hK01hdGguaW11bChfLFgpfDAsbj1uK01hdGguaW11bChtLCQpfDAsaT0oaT1pK01hdGguaW11bChtLEopfDApK01hdGguaW11bCh5LCQpfDAsYT1hK01hdGguaW11bCh5LEopfDAsbj1uK01hdGguaW11bChkLFEpfDAsaT0oaT1pK01hdGguaW11bChkLHR0KXwwKStNYXRoLmltdWwoZyxRKXwwLGE9YStNYXRoLmltdWwoZyx0dCl8MDt2YXIgX3Q9KGMrKG49bitNYXRoLmltdWwoZixydCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsbnQpfDApK01hdGguaW11bChoLHJ0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsbnQpfDApKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChDLFYpLGk9KGk9TWF0aC5pbXVsKEMsVSkpK01hdGguaW11bChMLFYpfDAsYT1NYXRoLmltdWwoTCxVKSxuPW4rTWF0aC5pbXVsKE0sSCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sRyl8MCkrTWF0aC5pbXVsKFMsSCl8MCxhPWErTWF0aC5pbXVsKFMsRyl8MCxuPW4rTWF0aC5pbXVsKGssVyl8MCxpPShpPWkrTWF0aC5pbXVsKGssWCl8MCkrTWF0aC5pbXVsKFQsVyl8MCxhPWErTWF0aC5pbXVsKFQsWCl8MCxuPW4rTWF0aC5pbXVsKGIsJCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsSil8MCkrTWF0aC5pbXVsKF8sJCl8MCxhPWErTWF0aC5pbXVsKF8sSil8MCxuPW4rTWF0aC5pbXVsKG0sUSl8MCxpPShpPWkrTWF0aC5pbXVsKG0sdHQpfDApK01hdGguaW11bCh5LFEpfDAsYT1hK01hdGguaW11bCh5LHR0KXwwLG49bitNYXRoLmltdWwoZCxydCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsbnQpfDApK01hdGguaW11bChnLHJ0KXwwLGE9YStNYXRoLmltdWwoZyxudCl8MDt2YXIgd3Q9KGMrKG49bitNYXRoLmltdWwoZixhdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsb3QpfDApK01hdGguaW11bChoLGF0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsb3QpfDApKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChPLFYpLGk9KGk9TWF0aC5pbXVsKE8sVSkpK01hdGguaW11bChJLFYpfDAsYT1NYXRoLmltdWwoSSxVKSxuPW4rTWF0aC5pbXVsKEMsSCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsRyl8MCkrTWF0aC5pbXVsKEwsSCl8MCxhPWErTWF0aC5pbXVsKEwsRyl8MCxuPW4rTWF0aC5pbXVsKE0sVyl8MCxpPShpPWkrTWF0aC5pbXVsKE0sWCl8MCkrTWF0aC5pbXVsKFMsVyl8MCxhPWErTWF0aC5pbXVsKFMsWCl8MCxuPW4rTWF0aC5pbXVsKGssJCl8MCxpPShpPWkrTWF0aC5pbXVsKGssSil8MCkrTWF0aC5pbXVsKFQsJCl8MCxhPWErTWF0aC5pbXVsKFQsSil8MCxuPW4rTWF0aC5pbXVsKGIsUSl8MCxpPShpPWkrTWF0aC5pbXVsKGIsdHQpfDApK01hdGguaW11bChfLFEpfDAsYT1hK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwobSxydCl8MCxpPShpPWkrTWF0aC5pbXVsKG0sbnQpfDApK01hdGguaW11bCh5LHJ0KXwwLGE9YStNYXRoLmltdWwoeSxudCl8MCxuPW4rTWF0aC5pbXVsKGQsYXQpfDAsaT0oaT1pK01hdGguaW11bChkLG90KXwwKStNYXRoLmltdWwoZyxhdCl8MCxhPWErTWF0aC5pbXVsKGcsb3QpfDA7dmFyIGt0PShjKyhuPW4rTWF0aC5pbXVsKGYsbHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLGN0KXwwKStNYXRoLmltdWwoaCxsdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLGN0KXwwKSsoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUCxWKSxpPShpPU1hdGguaW11bChQLFUpKStNYXRoLmltdWwoUixWKXwwLGE9TWF0aC5pbXVsKFIsVSksbj1uK01hdGguaW11bChPLEgpfDAsaT0oaT1pK01hdGguaW11bChPLEcpfDApK01hdGguaW11bChJLEgpfDAsYT1hK01hdGguaW11bChJLEcpfDAsbj1uK01hdGguaW11bChDLFcpfDAsaT0oaT1pK01hdGguaW11bChDLFgpfDApK01hdGguaW11bChMLFcpfDAsYT1hK01hdGguaW11bChMLFgpfDAsbj1uK01hdGguaW11bChNLCQpfDAsaT0oaT1pK01hdGguaW11bChNLEopfDApK01hdGguaW11bChTLCQpfDAsYT1hK01hdGguaW11bChTLEopfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT0oaT1pK01hdGguaW11bChrLHR0KXwwKStNYXRoLmltdWwoVCxRKXwwLGE9YStNYXRoLmltdWwoVCx0dCl8MCxuPW4rTWF0aC5pbXVsKGIscnQpfDAsaT0oaT1pK01hdGguaW11bChiLG50KXwwKStNYXRoLmltdWwoXyxydCl8MCxhPWErTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bChtLGF0KXwwLGk9KGk9aStNYXRoLmltdWwobSxvdCl8MCkrTWF0aC5pbXVsKHksYXQpfDAsYT1hK01hdGguaW11bCh5LG90KXwwLG49bitNYXRoLmltdWwoZCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsY3QpfDApK01hdGguaW11bChnLGx0KXwwLGE9YStNYXRoLmltdWwoZyxjdCl8MDt2YXIgVHQ9KGMrKG49bitNYXRoLmltdWwoZixmdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsaHQpfDApK01hdGguaW11bChoLGZ0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsaHQpfDApKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLFYpLGk9KGk9TWF0aC5pbXVsKEIsVSkpK01hdGguaW11bChOLFYpfDAsYT1NYXRoLmltdWwoTixVKSxuPW4rTWF0aC5pbXVsKFAsSCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsRyl8MCkrTWF0aC5pbXVsKFIsSCl8MCxhPWErTWF0aC5pbXVsKFIsRyl8MCxuPW4rTWF0aC5pbXVsKE8sVyl8MCxpPShpPWkrTWF0aC5pbXVsKE8sWCl8MCkrTWF0aC5pbXVsKEksVyl8MCxhPWErTWF0aC5pbXVsKEksWCl8MCxuPW4rTWF0aC5pbXVsKEMsJCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsSil8MCkrTWF0aC5pbXVsKEwsJCl8MCxhPWErTWF0aC5pbXVsKEwsSil8MCxuPW4rTWF0aC5pbXVsKE0sUSl8MCxpPShpPWkrTWF0aC5pbXVsKE0sdHQpfDApK01hdGguaW11bChTLFEpfDAsYT1hK01hdGguaW11bChTLHR0KXwwLG49bitNYXRoLmltdWwoayxydCl8MCxpPShpPWkrTWF0aC5pbXVsKGssbnQpfDApK01hdGguaW11bChULHJ0KXwwLGE9YStNYXRoLmltdWwoVCxudCl8MCxuPW4rTWF0aC5pbXVsKGIsYXQpfDAsaT0oaT1pK01hdGguaW11bChiLG90KXwwKStNYXRoLmltdWwoXyxhdCl8MCxhPWErTWF0aC5pbXVsKF8sb3QpfDAsbj1uK01hdGguaW11bChtLGx0KXwwLGk9KGk9aStNYXRoLmltdWwobSxjdCl8MCkrTWF0aC5pbXVsKHksbHQpfDAsYT1hK01hdGguaW11bCh5LGN0KXwwLG49bitNYXRoLmltdWwoZCxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsaHQpfDApK01hdGguaW11bChnLGZ0KXwwLGE9YStNYXRoLmltdWwoZyxodCl8MDt2YXIgQXQ9KGMrKG49bitNYXRoLmltdWwoZixkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsZ3QpfDApK01hdGguaW11bChoLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsZ3QpfDApKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLEgpLGk9KGk9TWF0aC5pbXVsKEIsRykpK01hdGguaW11bChOLEgpfDAsYT1NYXRoLmltdWwoTixHKSxuPW4rTWF0aC5pbXVsKFAsVyl8MCxpPShpPWkrTWF0aC5pbXVsKFAsWCl8MCkrTWF0aC5pbXVsKFIsVyl8MCxhPWErTWF0aC5pbXVsKFIsWCl8MCxuPW4rTWF0aC5pbXVsKE8sJCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sSil8MCkrTWF0aC5pbXVsKEksJCl8MCxhPWErTWF0aC5pbXVsKEksSil8MCxuPW4rTWF0aC5pbXVsKEMsUSl8MCxpPShpPWkrTWF0aC5pbXVsKEMsdHQpfDApK01hdGguaW11bChMLFEpfDAsYT1hK01hdGguaW11bChMLHR0KXwwLG49bitNYXRoLmltdWwoTSxydCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sbnQpfDApK01hdGguaW11bChTLHJ0KXwwLGE9YStNYXRoLmltdWwoUyxudCl8MCxuPW4rTWF0aC5pbXVsKGssYXQpfDAsaT0oaT1pK01hdGguaW11bChrLG90KXwwKStNYXRoLmltdWwoVCxhdCl8MCxhPWErTWF0aC5pbXVsKFQsb3QpfDAsbj1uK01hdGguaW11bChiLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoYixjdCl8MCkrTWF0aC5pbXVsKF8sbHQpfDAsYT1hK01hdGguaW11bChfLGN0KXwwLG49bitNYXRoLmltdWwobSxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKG0saHQpfDApK01hdGguaW11bCh5LGZ0KXwwLGE9YStNYXRoLmltdWwoeSxodCl8MDt2YXIgTXQ9KGMrKG49bitNYXRoLmltdWwoZCxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGQsZ3QpfDApK01hdGguaW11bChnLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGcsZ3QpfDApKyhpPj4+MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2MyxuPU1hdGguaW11bChCLFcpLGk9KGk9TWF0aC5pbXVsKEIsWCkpK01hdGguaW11bChOLFcpfDAsYT1NYXRoLmltdWwoTixYKSxuPW4rTWF0aC5pbXVsKFAsJCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsSil8MCkrTWF0aC5pbXVsKFIsJCl8MCxhPWErTWF0aC5pbXVsKFIsSil8MCxuPW4rTWF0aC5pbXVsKE8sUSl8MCxpPShpPWkrTWF0aC5pbXVsKE8sdHQpfDApK01hdGguaW11bChJLFEpfDAsYT1hK01hdGguaW11bChJLHR0KXwwLG49bitNYXRoLmltdWwoQyxydCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsbnQpfDApK01hdGguaW11bChMLHJ0KXwwLGE9YStNYXRoLmltdWwoTCxudCl8MCxuPW4rTWF0aC5pbXVsKE0sYXQpfDAsaT0oaT1pK01hdGguaW11bChNLG90KXwwKStNYXRoLmltdWwoUyxhdCl8MCxhPWErTWF0aC5pbXVsKFMsb3QpfDAsbj1uK01hdGguaW11bChrLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoayxjdCl8MCkrTWF0aC5pbXVsKFQsbHQpfDAsYT1hK01hdGguaW11bChULGN0KXwwLG49bitNYXRoLmltdWwoYixmdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsaHQpfDApK01hdGguaW11bChfLGZ0KXwwLGE9YStNYXRoLmltdWwoXyxodCl8MDt2YXIgU3Q9KGMrKG49bitNYXRoLmltdWwobSxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKG0sZ3QpfDApK01hdGguaW11bCh5LGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKHksZ3QpfDApKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLCQpLGk9KGk9TWF0aC5pbXVsKEIsSikpK01hdGguaW11bChOLCQpfDAsYT1NYXRoLmltdWwoTixKKSxuPW4rTWF0aC5pbXVsKFAsUSl8MCxpPShpPWkrTWF0aC5pbXVsKFAsdHQpfDApK01hdGguaW11bChSLFEpfDAsYT1hK01hdGguaW11bChSLHR0KXwwLG49bitNYXRoLmltdWwoTyxydCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sbnQpfDApK01hdGguaW11bChJLHJ0KXwwLGE9YStNYXRoLmltdWwoSSxudCl8MCxuPW4rTWF0aC5pbXVsKEMsYXQpfDAsaT0oaT1pK01hdGguaW11bChDLG90KXwwKStNYXRoLmltdWwoTCxhdCl8MCxhPWErTWF0aC5pbXVsKEwsb3QpfDAsbj1uK01hdGguaW11bChNLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxjdCl8MCkrTWF0aC5pbXVsKFMsbHQpfDAsYT1hK01hdGguaW11bChTLGN0KXwwLG49bitNYXRoLmltdWwoayxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKGssaHQpfDApK01hdGguaW11bChULGZ0KXwwLGE9YStNYXRoLmltdWwoVCxodCl8MDt2YXIgRXQ9KGMrKG49bitNYXRoLmltdWwoYixkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGIsZ3QpfDApK01hdGguaW11bChfLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKF8sZ3QpfDApKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLFEpLGk9KGk9TWF0aC5pbXVsKEIsdHQpKStNYXRoLmltdWwoTixRKXwwLGE9TWF0aC5pbXVsKE4sdHQpLG49bitNYXRoLmltdWwoUCxydCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsbnQpfDApK01hdGguaW11bChSLHJ0KXwwLGE9YStNYXRoLmltdWwoUixudCl8MCxuPW4rTWF0aC5pbXVsKE8sYXQpfDAsaT0oaT1pK01hdGguaW11bChPLG90KXwwKStNYXRoLmltdWwoSSxhdCl8MCxhPWErTWF0aC5pbXVsKEksb3QpfDAsbj1uK01hdGguaW11bChDLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxjdCl8MCkrTWF0aC5pbXVsKEwsbHQpfDAsYT1hK01hdGguaW11bChMLGN0KXwwLG49bitNYXRoLmltdWwoTSxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKE0saHQpfDApK01hdGguaW11bChTLGZ0KXwwLGE9YStNYXRoLmltdWwoUyxodCl8MDt2YXIgQ3Q9KGMrKG49bitNYXRoLmltdWwoayxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGssZ3QpfDApK01hdGguaW11bChULGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFQsZ3QpfDApKyhpPj4+MTMpfDApKyhDdD4+PjI2KXwwLEN0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLHJ0KSxpPShpPU1hdGguaW11bChCLG50KSkrTWF0aC5pbXVsKE4scnQpfDAsYT1NYXRoLmltdWwoTixudCksbj1uK01hdGguaW11bChQLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxvdCl8MCkrTWF0aC5pbXVsKFIsYXQpfDAsYT1hK01hdGguaW11bChSLG90KXwwLG49bitNYXRoLmltdWwoTyxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sY3QpfDApK01hdGguaW11bChJLGx0KXwwLGE9YStNYXRoLmltdWwoSSxjdCl8MCxuPW4rTWF0aC5pbXVsKEMsZnQpfDAsaT0oaT1pK01hdGguaW11bChDLGh0KXwwKStNYXRoLmltdWwoTCxmdCl8MCxhPWErTWF0aC5pbXVsKEwsaHQpfDA7dmFyIEx0PShjKyhuPW4rTWF0aC5pbXVsKE0sZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChNLGd0KXwwKStNYXRoLmltdWwoUyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChTLGd0KXwwKSsoaT4+PjEzKXwwKSsoTHQ+Pj4yNil8MCxMdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixhdCksaT0oaT1NYXRoLmltdWwoQixvdCkpK01hdGguaW11bChOLGF0KXwwLGE9TWF0aC5pbXVsKE4sb3QpLG49bitNYXRoLmltdWwoUCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsY3QpfDApK01hdGguaW11bChSLGx0KXwwLGE9YStNYXRoLmltdWwoUixjdCl8MCxuPW4rTWF0aC5pbXVsKE8sZnQpfDAsaT0oaT1pK01hdGguaW11bChPLGh0KXwwKStNYXRoLmltdWwoSSxmdCl8MCxhPWErTWF0aC5pbXVsKEksaHQpfDA7dmFyIHp0PShjKyhuPW4rTWF0aC5pbXVsKEMsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChDLGd0KXwwKStNYXRoLmltdWwoTCxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChMLGd0KXwwKSsoaT4+PjEzKXwwKSsoenQ+Pj4yNil8MCx6dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixsdCksaT0oaT1NYXRoLmltdWwoQixjdCkpK01hdGguaW11bChOLGx0KXwwLGE9TWF0aC5pbXVsKE4sY3QpLG49bitNYXRoLmltdWwoUCxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsaHQpfDApK01hdGguaW11bChSLGZ0KXwwLGE9YStNYXRoLmltdWwoUixodCl8MDt2YXIgT3Q9KGMrKG49bitNYXRoLmltdWwoTyxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKE8sZ3QpfDApK01hdGguaW11bChJLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKEksZ3QpfDApKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGZ0KSxpPShpPU1hdGguaW11bChCLGh0KSkrTWF0aC5pbXVsKE4sZnQpfDAsYT1NYXRoLmltdWwoTixodCk7dmFyIEl0PShjKyhuPW4rTWF0aC5pbXVsKFAsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChQLGd0KXwwKStNYXRoLmltdWwoUixkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChSLGd0KXwwKSsoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjM7dmFyIER0PShjKyhuPU1hdGguaW11bChCLGR0KSl8MCkrKCg4MTkxJihpPShpPU1hdGguaW11bChCLGd0KSkrTWF0aC5pbXVsKE4sZHQpfDApKTw8MTMpfDA7cmV0dXJuIGM9KChhPU1hdGguaW11bChOLGd0KSkrKGk+Pj4xMyl8MCkrKER0Pj4+MjYpfDAsRHQmPTY3MTA4ODYzLGxbMF09dnQsbFsxXT1tdCxsWzJdPXl0LGxbM109eHQsbFs0XT1idCxsWzVdPV90LGxbNl09d3QsbFs3XT1rdCxsWzhdPVR0LGxbOV09QXQsbFsxMF09TXQsbFsxMV09U3QsbFsxMl09RXQsbFsxM109Q3QsbFsxNF09THQsbFsxNV09enQsbFsxNl09T3QsbFsxN109SXQsbFsxOF09RHQsMCE9PWMmJihsWzE5XT1jLHIubGVuZ3RoKyspLHJ9O2Z1bmN0aW9uIGQodCxlLHIpe3JldHVybihuZXcgZykubXVscCh0LGUscil9ZnVuY3Rpb24gZyh0LGUpe3RoaXMueD10LHRoaXMueT1lfU1hdGguaW11bHx8KHA9aCksYS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aCt0Lmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT10Lmxlbmd0aD9wKHRoaXMsdCxlKTpyPDYzP2godGhpcyx0LGUpOnI8MTAyND9mdW5jdGlvbih0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLGE9MDthPHIubGVuZ3RoLTE7YSsrKXt2YXIgbz1pO2k9MDtmb3IodmFyIHM9NjcxMDg4NjMmbixsPU1hdGgubWluKGEsZS5sZW5ndGgtMSksYz1NYXRoLm1heCgwLGEtdC5sZW5ndGgrMSk7Yzw9bDtjKyspe3ZhciB1PWEtYyxmPSgwfHQud29yZHNbdV0pKigwfGUud29yZHNbY10pLGg9NjcxMDg4NjMmZjtzPTY3MTA4ODYzJihoPWgrc3wwKSxpKz0obz0obz1vKyhmLzY3MTA4ODY0fDApfDApKyhoPj4+MjYpfDApPj4+MjYsbyY9NjcxMDg4NjN9ci53b3Jkc1thXT1zLG49byxvPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbYV09bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX0odGhpcyx0LGUpOmQodGhpcyx0LGUpfSxnLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj1hLnByb3RvdHlwZS5fY291bnRCaXRzKHQpLTEsbj0wO248dDtuKyspZVtuXT10aGlzLnJldkJpbihuLHIsdCk7cmV0dXJuIGV9LGcucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbih0LGUscil7aWYoMD09PXR8fHQ9PT1yLTEpcmV0dXJuIHQ7Zm9yKHZhciBuPTAsaT0wO2k8ZTtpKyspbnw9KDEmdCk8PGUtaS0xLHQ+Pj0xO3JldHVybiBufSxnLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPGE7bysrKW5bb109ZVt0W29dXSxpW29dPXJbdFtvXV19LGcucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5wZXJtdXRlKGEsdCxlLHIsbixpKTtmb3IodmFyIG89MTtvPGk7bzw8PTEpZm9yKHZhciBzPW88PDEsbD1NYXRoLmNvcygyKk1hdGguUEkvcyksYz1NYXRoLnNpbigyKk1hdGguUEkvcyksdT0wO3U8aTt1Kz1zKWZvcih2YXIgZj1sLGg9YyxwPTA7cDxvO3ArKyl7dmFyIGQ9clt1K3BdLGc9blt1K3BdLHY9clt1K3Arb10sbT1uW3UrcCtvXSx5PWYqdi1oKm07bT1mKm0raCp2LHY9eSxyW3UrcF09ZCt2LG5bdStwXT1nK20sclt1K3Arb109ZC12LG5bdStwK29dPWctbSxwIT09cyYmKHk9bCpmLWMqaCxoPWwqaCtjKmYsZj15KX19LGcucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MXxNYXRoLm1heChlLHQpLG49MSZyLGk9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStufSxnLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgaT10W25dO3Rbbl09dFtyLW4tMV0sdFtyLW4tMV09aSxpPWVbbl0sZVtuXT0tZVtyLW4tMV0sZVtyLW4tMV09LWl9fSxnLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTA7bjxlLzI7bisrKXt2YXIgaT04MTkyKk1hdGgucm91bmQodFsyKm4rMV0vZSkrTWF0aC5yb3VuZCh0WzIqbl0vZSkrcjt0W25dPTY3MTA4ODYzJmkscj1pPDY3MTA4ODY0PzA6aS82NzEwODg2NHwwfXJldHVybiB0fSxnLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgYT0wLG89MDtvPGU7bysrKWErPTB8dFtvXSxyWzIqb109ODE5MSZhLGE+Pj49MTMsclsyKm8rMV09ODE5MSZhLGE+Pj49MTM7Zm9yKG89MiplO288aTsrK28pcltvXT0wO24oMD09PWEpLG4oMD09KC04MTkyJmEpKX0sZy5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09MDtyZXR1cm4gZX0sZy5wcm90b3R5cGUubXVscD1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKHQubGVuZ3RoLGUubGVuZ3RoKSxpPXRoaXMubWFrZVJCVChuKSxhPXRoaXMuc3R1YihuKSxvPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxmPW5ldyBBcnJheShuKSxoPXIud29yZHM7aC5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IodC53b3Jkcyx0Lmxlbmd0aCxvLG4pLHRoaXMuY29udmVydDEzYihlLndvcmRzLGUubGVuZ3RoLGMsbiksdGhpcy50cmFuc2Zvcm0obyxhLHMsbCxuLGkpLHRoaXMudHJhbnNmb3JtKGMsYSx1LGYsbixpKTtmb3IodmFyIHA9MDtwPG47cCsrKXt2YXIgZD1zW3BdKnVbcF0tbFtwXSpmW3BdO2xbcF09c1twXSpmW3BdK2xbcF0qdVtwXSxzW3BdPWR9cmV0dXJuIHRoaXMuY29uanVnYXRlKHMsbCxuKSx0aGlzLnRyYW5zZm9ybShzLGwsaCxhLG4saSksdGhpcy5jb25qdWdhdGUoaCxhLG4pLHRoaXMubm9ybWFsaXplMTNiKGgsbiksci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGgsci5zdHJpcCgpfSxhLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGEobnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSx0aGlzLm11bFRvKHQsZSl9LGEucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGEobnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSxkKHRoaXMsdCxlKX0sYS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHQsdGhpcyl9LGEucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxhPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1hPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZhfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxhLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LGEucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sYS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sYS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfSh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBhKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LGEucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsYT02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBvPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHM9dGhpcy53b3Jkc1tlXSZhLGw9KDB8dGhpcy53b3Jkc1tlXSktczw8cjt0aGlzLndvcmRzW2VdPWx8byxvPXM+Pj4yNi1yfW8mJih0aGlzLndvcmRzW2VdPW8sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LGEucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7dmFyIGk7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApLGk9ZT8oZS1lJTI2KS8yNjowO3ZhciBhPXQlMjYsbz1NYXRoLm1pbigodC1hKS8yNix0aGlzLmxlbmd0aCkscz02NzEwODg2M142NzEwODg2Mz4+PmE8PGEsbD1yO2lmKGktPW8saT1NYXRoLm1heCgwLGkpLGwpe2Zvcih2YXIgYz0wO2M8bztjKyspbC53b3Jkc1tjXT10aGlzLndvcmRzW2NdO2wubGVuZ3RoPW99aWYoMD09PW8pO2Vsc2UgaWYodGhpcy5sZW5ndGg+bylmb3IodGhpcy5sZW5ndGgtPW8sYz0wO2M8dGhpcy5sZW5ndGg7YysrKXRoaXMud29yZHNbY109dGhpcy53b3Jkc1tjK29dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHU9MDtmb3IoYz10aGlzLmxlbmd0aC0xO2M+PTAmJigwIT09dXx8Yz49aSk7Yy0tKXt2YXIgZj0wfHRoaXMud29yZHNbY107dGhpcy53b3Jkc1tjXT11PDwyNi1hfGY+Pj5hLHU9ZiZzfXJldHVybiBsJiYwIT09dSYmKGwud29yZHNbbC5sZW5ndGgrK109dSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LGEucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sYS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LGEucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sYS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LGEucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO3JldHVybiEodGhpcy5sZW5ndGg8PXIpJiYhISh0aGlzLndvcmRzW3JdJmkpfSxhLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sYS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sYS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LGEucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LGEucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sYS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sYS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGEucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBzPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7YT0oMHx0aGlzLndvcmRzW2krcl0pK3M7dmFyIGw9KDB8dC53b3Jkc1tpXSkqZTtzPSgoYS09NjcxMDg4NjMmbCk+PjI2KS0obC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYX1mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspcz0oYT0oMHx0aGlzLndvcmRzW2krcl0pK3MpPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYTtpZigwPT09cylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKC0xPT09cykscz0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylzPShhPS0oMHx0aGlzLndvcmRzW2ldKStzKT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZhO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPSh0aGlzLmxlbmd0aCx0Lmxlbmd0aCksbj10aGlzLmNsb25lKCksaT10LG89MHxpLndvcmRzW2kubGVuZ3RoLTFdOzAhPT0ocj0yNi10aGlzLl9jb3VudEJpdHMobykpJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLG89MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyxsPW4ubGVuZ3RoLWkubGVuZ3RoO2lmKCJtb2QiIT09ZSl7KHM9bmV3IGEobnVsbCkpLmxlbmd0aD1sKzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgYz0wO2M8cy5sZW5ndGg7YysrKXMud29yZHNbY109MH12YXIgdT1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSxsKTswPT09dS5uZWdhdGl2ZSYmKG49dSxzJiYocy53b3Jkc1tsXT0xKSk7Zm9yKHZhciBmPWwtMTtmPj0wO2YtLSl7dmFyIGg9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtmXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtmLTFdKTtmb3IoaD1NYXRoLm1pbihoL298MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxoLGYpOzAhPT1uLm5lZ2F0aXZlOyloLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxmKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbZl09aCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksImRpdiIhPT1lJiYwIT09ciYmbi5pdXNocm4ocikse2RpdjpzfHxudWxsLG1vZDpufX0sYS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBhKDApLG1vZDpuZXcgYSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksIm1vZCIhPT1lJiYoaT1zLmRpdi5uZWcoKSksImRpdiIhPT1lJiYobz1zLm1vZC5uZWcoKSxyJiYwIT09by5uZWdhdGl2ZSYmby5pYWRkKHQpKSx7ZGl2OmksbW9kOm99KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmU/KHM9dGhpcy5kaXZtb2QodC5uZWcoKSxlKSwibW9kIiE9PWUmJihpPXMuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOnMubW9kfSk6MCE9KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KHM9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSwiZGl2IiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlzdWIodCkpLHtkaXY6cy5kaXYsbW9kOm99KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBhKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/ImRpdiI9PT1lP3tkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgYSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IGEodGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpO3ZhciBpLG8sc30sYS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJkaXYiLCExKS5kaXZ9LGEucHJvdG90eXBlLm1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwibW9kIiwhMSkubW9kfSxhLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJtb2QiLCEwKS5tb2R9LGEucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLGE9ci5jbXAobik7cmV0dXJuIGE8MHx8MT09PWkmJjA9PT1hP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sYS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxhLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LGEucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBhKDEpLG89bmV3IGEoMCkscz1uZXcgYSgwKSxsPW5ldyBhKDEpLGM9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK2M7Zm9yKHZhciB1PXIuY2xvbmUoKSxmPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgaD0wLHA9MTswPT0oZS53b3Jkc1swXSZwKSYmaDwyNjsrK2gscDw8PTEpO2lmKGg+MClmb3IoZS5pdXNocm4oaCk7aC0tID4wOykoaS5pc09kZCgpfHxvLmlzT2RkKCkpJiYoaS5pYWRkKHUpLG8uaXN1YihmKSksaS5pdXNocm4oMSksby5pdXNocm4oMSk7Zm9yKHZhciBkPTAsZz0xOzA9PShyLndvcmRzWzBdJmcpJiZkPDI2OysrZCxnPDw9MSk7aWYoZD4wKWZvcihyLml1c2hybihkKTtkLS0gPjA7KShzLmlzT2RkKCl8fGwuaXNPZGQoKSkmJihzLmlhZGQodSksbC5pc3ViKGYpKSxzLml1c2hybigxKSxsLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihzKSxvLmlzdWIobCkpOihyLmlzdWIoZSkscy5pc3ViKGkpLGwuaXN1YihvKSl9cmV0dXJue2E6cyxiOmwsZ2NkOnIuaXVzaGxuKGMpfX0sYS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaSxvPW5ldyBhKDEpLHM9bmV3IGEoMCksbD1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBjPTAsdT0xOzA9PShlLndvcmRzWzBdJnUpJiZjPDI2OysrYyx1PDw9MSk7aWYoYz4wKWZvcihlLml1c2hybihjKTtjLS0gPjA7KW8uaXNPZGQoKSYmby5pYWRkKGwpLG8uaXVzaHJuKDEpO2Zvcih2YXIgZj0wLGg9MTswPT0oci53b3Jkc1swXSZoKSYmZjwyNjsrK2YsaDw8PTEpO2lmKGY+MClmb3Ioci5pdXNocm4oZik7Zi0tID4wOylzLmlzT2RkKCkmJnMuaWFkZChsKSxzLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLG8uaXN1YihzKSk6KHIuaXN1YihlKSxzLmlzdWIobykpfXJldHVybihpPTA9PT1lLmNtcG4oMSk/bzpzKS5jbXBuKDApPDAmJmkuaWFkZCh0KSxpfSxhLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIGE9ZTtlPXIscj1hfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sYS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sYS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxhLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sYS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIGE9aSxvPXI7MCE9PWEmJm88dGhpcy5sZW5ndGg7bysrKXt2YXIgcz0wfHRoaXMud29yZHNbb107YT0ocys9YSk+Pj4yNixzJj02NzEwODg2Myx0aGlzLndvcmRzW29dPXN9cmV0dXJuIDAhPT1hJiYodGhpcy53b3Jkc1tvXT1hLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxhLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhcilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmcilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSllPTE7ZWxzZXtyJiYodD0tdCksbih0PD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgaT0wfHRoaXMud29yZHNbMF07ZT1pPT09dD8wOmk8dD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LGEucHJvdG90eXBlLmNtcD1mdW5jdGlvbih0KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBlPXRoaXMudWNtcCh0KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxhLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPnQubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHx0LndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0sYS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5ndD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wKHQpfSxhLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk+PTB9LGEucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk+PTB9LGEucHJvdG90eXBlLmx0bj1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcCh0KX0sYS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxhLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxhLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LGEucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdyh0KX0sYS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbigwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LGEucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxhLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30sYS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQodCl9LGEucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5tdWwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sYS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxhLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sYS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LGEucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCYmIXQucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgdj17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIG0odCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IGEoZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IGEoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHkoKXttLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24geCgpe20uY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7bS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIF8oKXttLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdyh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPWEuX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXQsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGsodCl7dy5jYWxsKHRoaXMsdCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgYSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1tLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxtLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkb3t0aGlzLnNwbGl0KHIsdGhpcy50bXApLGU9KHI9KHI9dGhpcy5pbXVsSyhyKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LG0ucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LG0ucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saSh5LG0pLHkucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLDkpLG49MDtuPHI7bisrKWUud29yZHNbbl09dC53b3Jkc1tuXTtpZihlLmxlbmd0aD1yLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgaT10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPTQxOTQzMDMmaSxuPTEwO248dC5sZW5ndGg7bisrKXt2YXIgYT0wfHQud29yZHNbbl07dC53b3Jkc1tuLTEwXT0oNDE5NDMwMyZhKTw8NHxpPj4+MjIsaT1hfWk+Pj49MjIsdC53b3Jkc1tuLTEwXT1pLDA9PT1pJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saSh4LG0pLGkoYixtKSxpKF8sbSksXy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxhLl9wcmltZT1mdW5jdGlvbih0KXtpZih2W3RdKXJldHVybiB2W3RdO3ZhciBlO2lmKCJrMjU2Ij09PXQpZT1uZXcgeTtlbHNlIGlmKCJwMjI0Ij09PXQpZT1uZXcgeDtlbHNlIGlmKCJwMTkyIj09PXQpZT1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09dCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit0KTtlPW5ldyBffXJldHVybiB2W3RdPWUsZX0sdy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHcucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHcucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSx3LnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sdy5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgYSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxvPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylvKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIHM9bmV3IGEoMSkudG9SZWQodGhpcyksbD1zLnJlZE5lZygpLGM9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHU9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih1PW5ldyBhKDIqdSp1KS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3codSxjKS5jbXAobCk7KXUucmVkSUFkZChsKTtmb3IodmFyIGY9dGhpcy5wb3codSxpKSxoPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSkscD10aGlzLnBvdyh0LGkpLGQ9bzswIT09cC5jbXAocyk7KXtmb3IodmFyIGc9cCx2PTA7MCE9PWcuY21wKHMpO3YrKylnPWcucmVkU3FyKCk7bih2PGQpO3ZhciBtPXRoaXMucG93KGYsbmV3IGEoMSkuaXVzaGxuKGQtdi0xKSk7aD1oLnJlZE11bChtKSxmPW0ucmVkU3FyKCkscD1wLnJlZE11bChmKSxkPXZ9cmV0dXJuIGh9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMSkudG9SZWQodGhpcyk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPW5ldyBBcnJheSgxNik7clswXT1uZXcgYSgxKS50b1JlZCh0aGlzKSxyWzFdPXQ7Zm9yKHZhciBuPTI7bjxyLmxlbmd0aDtuKyspcltuXT10aGlzLm11bChyW24tMV0sdCk7dmFyIGk9clswXSxvPTAscz0wLGw9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2Zvcih2YXIgYz1lLndvcmRzW25dLHU9bC0xO3U+PTA7dS0tKXt2YXIgZj1jPj51JjE7aSE9PXJbMF0mJihpPXRoaXMuc3FyKGkpKSwwIT09Znx8MCE9PW8/KG88PD0xLG98PWYsKDQ9PT0rK3N8fDA9PT1uJiYwPT09dSkmJihpPXRoaXMubXVsKGkscltvXSkscz0wLG89MCkpOnM9MH1sPTI2fXJldHVybiBpfSx3LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSx3LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sYS5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgayh0KX0saShrLHcpLGsucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxrLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0say5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBhKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxrLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KCJ1bmRlZmluZWQiPT10eXBlb2YgZXx8ZSx0aGlzKX0se2J1ZmZlcjo5M31dLDg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPTA7Zm9yKGU9MDtlPGk7KytlKWErPXRbZV0ubGVuZ3RoO3ZhciBvPW5ldyBBcnJheShhKSxzPTA7Zm9yKGU9MDtlPGk7KytlKXt2YXIgbD10W2VdLGM9bC5sZW5ndGg7Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1vW3MrK109bmV3IEFycmF5KGMtMSksZj0wO2ZvcihuPTA7bjxjOysrbiluIT09ciYmKHVbZisrXT1sW25dKTtpZigxJnIpe3ZhciBoPXVbMV07dVsxXT11WzBdLHVbMF09aH19fXJldHVybiBvfX0se31dLDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gbj1bXSxjKGk9dCxpLHUsITApLG47Y2FzZSAyOnJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2ModCx0LGUsITApOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG49W10sYyh0LGUsdSwhMSksbn0odCxlKTtjYXNlIDM6cmV0dXJuIGModCxlLHIsITEpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJib3gtaW50ZXJzZWN0OiBJbnZhbGlkIGFyZ3VtZW50cyIpfXZhciBpfTt2YXIgbixpPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgiLi9saWIvc3dlZXAiKSxvPXQoIi4vbGliL2ludGVyc2VjdCIpO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPHQ7KytyKWlmKCEoZVtyXTw9ZVtyK3RdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBsKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9MCxvPTAsbD10Lmxlbmd0aDtvPGw7KytvKXt2YXIgYz10W29dO2lmKCFzKGUsYykpe2Zvcih2YXIgdT0wO3U8MiplOysrdSlyW2krK109Y1t1XTtuW2ErK109b319cmV0dXJuIGF9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgcz10Lmxlbmd0aCxjPWUubGVuZ3RoO2lmKCEoczw9MHx8Yzw9MCkpe3ZhciB1PXRbMF0ubGVuZ3RoPj4+MTtpZighKHU8PTApKXt2YXIgZixoPWkubWFsbG9jRG91YmxlKDIqdSpzKSxwPWkubWFsbG9jSW50MzIocyk7aWYoKHM9bCh0LHUsaCxwKSk+MCl7aWYoMT09PXUmJm4pYS5pbml0KHMpLGY9YS5zd2VlcENvbXBsZXRlKHUsciwwLHMsaCxwLDAscyxoLHApO2Vsc2V7dmFyIGQ9aS5tYWxsb2NEb3VibGUoMip1KmMpLGc9aS5tYWxsb2NJbnQzMihjKTsoYz1sKGUsdSxkLGcpKT4wJiYoYS5pbml0KHMrYyksZj0xPT09dT9hLnN3ZWVwQmlwYXJ0aXRlKHUsciwwLHMsaCxwLDAsYyxkLGcpOm8odSxyLG4scyxoLHAsYyxkLGcpLGkuZnJlZShkKSxpLmZyZWUoZykpfWkuZnJlZShoKSxpLmZyZWUocCl9cmV0dXJuIGZ9fX1mdW5jdGlvbiB1KHQsZSl7bi5wdXNoKFt0LGVdKX19LHsiLi9saWIvaW50ZXJzZWN0Ijo4OCwiLi9saWIvc3dlZXAiOjkyLCJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPSJkIixpPSJheCIsYT0idnYiLG89ImZwIixzPSJlcyIsbD0icnMiLGM9InJlIix1PSJyYiIsZj0icmkiLGg9InJwIixwPSJicyIsZD0iYmUiLGc9ImJiIix2PSJiaSIsbT0iYnAiLHk9InJ2Iix4PSJRIixiPVtuLGksYSxsLGMsdSxmLHAsZCxnLHZdO2Z1bmN0aW9uIF8odCl7dmFyIGU9ImJydXRlRm9yY2UiKyh0PyJGdWxsIjoiUGFydGlhbCIpLHI9W10sXz1iLnNsaWNlKCk7dHx8Xy5zcGxpY2UoMywwLG8pO3ZhciB3PVsiZnVuY3Rpb24gIitlKyIoIitfLmpvaW4oKSsiKXsiXTtmdW5jdGlvbiBrKGUsbyl7dmFyIF89ZnVuY3Rpb24odCxlLHIpe3ZhciBvPSJicnV0ZUZvcmNlIisodD8iUmVkIjoiQmx1ZSIpKyhlPyJGbGlwIjoiIikrKHI/IkZ1bGwiOiIiKSxfPVsiZnVuY3Rpb24gIixvLCIoIixiLmpvaW4oKSwiKXsiLCJ2YXIgIixzLCI9MioiLG4sIjsiXSx3PSJmb3IodmFyIGk9IitsKyIsIitoKyI9IitzKyIqIitsKyI7aTwiK2MrIjsrK2ksIitoKyIrPSIrcysiKXt2YXIgeDA9Iit1KyJbIitpKyIrIitoKyJdLHgxPSIrdSsiWyIraSsiKyIraCsiKyIrbisiXSx4aT0iK2YrIltpXTsiLGs9ImZvcih2YXIgaj0iK3ArIiwiK20rIj0iK3MrIioiK3ArIjtqPCIrZCsiOysraiwiK20rIis9IitzKyIpe3ZhciB5MD0iK2crIlsiK2krIisiK20rIl0sIisocj8ieTE9IitnKyJbIitpKyIrIittKyIrIituKyJdLCI6IiIpKyJ5aT0iK3YrIltqXTsiO3JldHVybiB0P18ucHVzaCh3LHgsIjoiLGspOl8ucHVzaChrLHgsIjoiLHcpLHI/Xy5wdXNoKCJpZih5MTx4MHx8eDE8eTApY29udGludWU7Iik6ZT9fLnB1c2goImlmKHkwPD14MHx8eDE8eTApY29udGludWU7Iik6Xy5wdXNoKCJpZih5MDx4MHx8eDE8eTApY29udGludWU7IiksXy5wdXNoKCJmb3IodmFyIGs9IitpKyIrMTtrPCIrbisiOysrayl7dmFyIHIwPSIrdSsiW2srIitoKyJdLHIxPSIrdSsiW2srIituKyIrIitoKyJdLGIwPSIrZysiW2srIittKyJdLGIxPSIrZysiW2srIituKyIrIittKyJdO2lmKHIxPGIwfHxiMTxyMCljb250aW51ZSAiK3grIjt9dmFyICIreSsiPSIrYSsiKCIpLGU/Xy5wdXNoKCJ5aSx4aSIpOl8ucHVzaCgieGkseWkiKSxfLnB1c2goIik7aWYoIit5KyIhPT12b2lkIDApcmV0dXJuICIreSsiO319fSIpLHtuYW1lOm8sY29kZTpfLmpvaW4oIiIpfX0oZSxvLHQpO3IucHVzaChfLmNvZGUpLHcucHVzaCgicmV0dXJuICIrXy5uYW1lKyIoIitiLmpvaW4oKSsiKTsiKX13LnB1c2goImlmKCIrYysiLSIrbCsiPiIrZCsiLSIrcCsiKXsiKSx0PyhrKCEwLCExKSx3LnB1c2goIn1lbHNleyIpLGsoITEsITEpKToody5wdXNoKCJpZigiK28rIil7IiksayghMCwhMCksdy5wdXNoKCJ9ZWxzZXsiKSxrKCEwLCExKSx3LnB1c2goIn19ZWxzZXtpZigiK28rIil7IiksayghMSwhMCksdy5wdXNoKCJ9ZWxzZXsiKSxrKCExLCExKSx3LnB1c2goIn0iKSksdy5wdXNoKCJ9fXJldHVybiAiK2UpO3ZhciBUPXIuam9pbigiIikrdy5qb2luKCIiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFQpKCl9ci5wYXJ0aWFsPV8oITEpLHIuZnVsbD1fKCEwKX0se31dLDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHUsUyxFLEMsTCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9OCppLmxvZzIoZSsxKSoodCsxKXwwLGE9aS5uZXh0UG93MihiKnIpO3cubGVuZ3RoPGEmJihuLmZyZWUodyksdz1uLm1hbGxvY0ludDMyKGEpKTt2YXIgbz1pLm5leHRQb3cyKF8qcik7azxvJiYobi5mcmVlKGspLGs9bi5tYWxsb2NEb3VibGUobykpfSh0LGErRSk7dmFyIHosTz0wLEk9Mip0O1QoTysrLDAsMCxhLDAsRSxyPzE2OjAsLTEvMCwxLzApLHJ8fFQoTysrLDAsMCxFLDAsYSwxLC0xLzAsMS8wKTtmb3IoO08+MDspe3ZhciBEPShPLT0xKSpiLFA9d1tEXSxSPXdbRCsxXSxGPXdbRCsyXSxCPXdbRCszXSxOPXdbRCs0XSxqPXdbRCs1XSxWPU8qXyxVPWtbVl0scT1rW1YrMV0sSD0xJmosRz0hISgxNiZqKSxZPXUsVz1TLFg9QyxaPUw7aWYoSCYmKFk9QyxXPUwsWD11LFo9UyksISgyJmomJihGPXYodCxQLFIsRixZLFcscSksUj49Ril8fDQmaiYmKFI9bSh0LFAsUixGLFksVyxVKSk+PUYpKXt2YXIgJD1GLVIsSj1OLUI7aWYoRyl7aWYodCokKigkK0opPHApe2lmKHZvaWQgMCE9PSh6PWwuc2NhbkNvbXBsZXRlKHQsUCxlLFIsRixZLFcsQixOLFgsWikpKXJldHVybiB6O2NvbnRpbnVlfX1lbHNle2lmKHQqTWF0aC5taW4oJCxKKTxmKXtpZih2b2lkIDAhPT0oej1vKHQsUCxlLEgsUixGLFksVyxCLE4sWCxaKSkpcmV0dXJuIHo7Y29udGludWV9aWYodCokKko8aCl7aWYodm9pZCAwIT09KHo9bC5zY2FuQmlwYXJ0aXRlKHQsUCxlLEgsUixGLFksVyxCLE4sWCxaKSkpcmV0dXJuIHo7Y29udGludWV9fXZhciBLPWQodCxQLFIsRixZLFcsVSxxKTtpZihSPEspaWYodCooSy1SKTxmKXtpZih2b2lkIDAhPT0oej1zKHQsUCsxLGUsUixLLFksVyxCLE4sWCxaKSkpcmV0dXJuIHp9ZWxzZSBpZihQPT09dC0yKXtpZih2b2lkIDAhPT0oej1IP2wuc3dlZXBCaXBhcnRpdGUodCxlLEIsTixYLFosUixLLFksVyk6bC5zd2VlcEJpcGFydGl0ZSh0LGUsUixLLFksVyxCLE4sWCxaKSkpcmV0dXJuIHp9ZWxzZSBUKE8rKyxQKzEsUixLLEIsTixILC0xLzAsMS8wKSxUKE8rKyxQKzEsQixOLFIsSywxXkgsLTEvMCwxLzApO2lmKEs8Ril7dmFyIFE9Yyh0LFAsQixOLFgsWiksdHQ9WFtJKlErUF0sZXQ9Zyh0LFAsUSxOLFgsWix0dCk7aWYoZXQ8TiYmVChPKyssUCxLLEYsZXQsTiwoNHxIKSsoRz8xNjowKSx0dCxxKSxCPFEmJlQoTysrLFAsSyxGLEIsUSwoMnxIKSsoRz8xNjowKSxVLHR0KSxRKzE9PT1ldCl7aWYodm9pZCAwIT09KHo9Rz9NKHQsUCxlLEssRixZLFcsUSxYLFpbUV0pOkEodCxQLGUsSCxLLEYsWSxXLFEsWCxaW1FdKSkpcmV0dXJuIHp9ZWxzZSBpZihRPGV0KXt2YXIgcnQ7aWYoRyl7aWYocnQ9eSh0LFAsSyxGLFksVyx0dCksSzxydCl7dmFyIG50PWcodCxQLEsscnQsWSxXLHR0KTtpZihQPT09dC0yKXtpZihLPG50JiZ2b2lkIDAhPT0oej1sLnN3ZWVwQ29tcGxldGUodCxlLEssbnQsWSxXLFEsZXQsWCxaKSkpcmV0dXJuIHo7aWYobnQ8cnQmJnZvaWQgMCE9PSh6PWwuc3dlZXBCaXBhcnRpdGUodCxlLG50LHJ0LFksVyxRLGV0LFgsWikpKXJldHVybiB6fWVsc2UgSzxudCYmVChPKyssUCsxLEssbnQsUSxldCwxNiwtMS8wLDEvMCksbnQ8cnQmJihUKE8rKyxQKzEsbnQscnQsUSxldCwwLC0xLzAsMS8wKSxUKE8rKyxQKzEsUSxldCxudCxydCwxLC0xLzAsMS8wKSl9fWVsc2UgcnQ9SD94KHQsUCxLLEYsWSxXLHR0KTp5KHQsUCxLLEYsWSxXLHR0KSxLPHJ0JiYoUD09PXQtMj96PUg/bC5zd2VlcEJpcGFydGl0ZSh0LGUsUSxldCxYLFosSyxydCxZLFcpOmwuc3dlZXBCaXBhcnRpdGUodCxlLEsscnQsWSxXLFEsZXQsWCxaKTooVChPKyssUCsxLEsscnQsUSxldCxILC0xLzAsMS8wKSxUKE8rKyxQKzEsUSxldCxLLHJ0LDFeSCwtMS8wLDEvMCkpKX19fX19O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoIi4vYnJ1dGUiKSxvPWEucGFydGlhbCxzPWEuZnVsbCxsPXQoIi4vc3dlZXAiKSxjPXQoIi4vbWVkaWFuIiksdT10KCIuL3BhcnRpdGlvbiIpLGY9MTI4LGg9MTw8MjIscD0xPDwyMixkPXUoIiEobG8+PXAwKSYmIShwMT49aGkpIixbInAwIiwicDEiXSksZz11KCJsbz09PXAwIixbInAwIl0pLHY9dSgibG88cDAiLFsicDAiXSksbT11KCJoaTw9cDAiLFsicDAiXSkseT11KCJsbzw9cDAmJnAwPD1oaSIsWyJwMCJdKSx4PXUoImxvPHAwJiZwMDw9aGkiLFsicDAiXSksYj02LF89Mix3PW4ubWFsbG9jSW50MzIoMTAyNCksaz1uLm1hbGxvY0RvdWJsZSgxMDI0KTtmdW5jdGlvbiBUKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1iKnQ7d1tjXT1lLHdbYysxXT1yLHdbYysyXT1uLHdbYyszXT1pLHdbYys0XT1hLHdbYys1XT1vO3ZhciB1PV8qdDtrW3VdPXMsa1t1KzFdPWx9ZnVuY3Rpb24gQSh0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPTIqdCxoPWwqZixwPWNbaCtlXTt0OmZvcih2YXIgZD1pLGc9aSpmO2Q8YTsrK2QsZys9Zil7dmFyIHY9b1tnK2VdLG09b1tnK2UrdF07aWYoIShwPHZ8fG08cCkmJighbnx8cCE9PXYpKXtmb3IodmFyIHkseD1zW2RdLGI9ZSsxO2I8dDsrK2Ipe3Y9b1tnK2JdLG09b1tnK2IrdF07dmFyIF89Y1toK2JdLHc9Y1toK2IrdF07aWYobTxffHx3PHYpY29udGludWUgdH1pZih2b2lkIDAhPT0oeT1uP3IodSx4KTpyKHgsdSkpKXJldHVybiB5fX19ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT0yKnQsZj1zKnUsaD1sW2YrZV07dDpmb3IodmFyIHA9bixkPW4qdTtwPGk7KytwLGQrPXUpe3ZhciBnPW9bcF07aWYoZyE9PWMpe3ZhciB2PWFbZCtlXSxtPWFbZCtlK3RdO2lmKCEoaDx2fHxtPGgpKXtmb3IodmFyIHk9ZSsxO3k8dDsrK3kpe3Y9YVtkK3ldLG09YVtkK3krdF07dmFyIHg9bFtmK3ldLGI9bFtmK3krdF07aWYobTx4fHxiPHYpY29udGludWUgdH12YXIgXz1yKGcsYyk7aWYodm9pZCAwIT09XylyZXR1cm4gX319fX19LHsiLi9icnV0ZSI6ODcsIi4vbWVkaWFuIjo4OSwiLi9wYXJ0aXRpb24iOjkwLCIuL3N3ZWVwIjo5MiwiYml0LXR3aWRkbGUiOjgyLCJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7aWYobzw9cisxKXJldHVybiByO3ZhciBjPXIsdT1vLGY9bytyPj4+MSxoPTIqdCxwPWYsZD1zW2gqZitlXTtmb3IoO2M8dTspe2lmKHUtYzxpKXthKHQsZSxjLHUscyxsKSxkPXNbaCpmK2VdO2JyZWFrfXZhciBnPXUtYyx2PU1hdGgucmFuZG9tKCkqZytjfDAsbT1zW2gqditlXSx5PU1hdGgucmFuZG9tKCkqZytjfDAseD1zW2gqeStlXSxiPU1hdGgucmFuZG9tKCkqZytjfDAsXz1zW2gqYitlXTttPD14P18+PXg/KHA9eSxkPXgpOm0+PV8/KHA9dixkPW0pOihwPWIsZD1fKTp4Pj1fPyhwPXksZD14KTpfPj1tPyhwPXYsZD1tKToocD1iLGQ9Xyk7Zm9yKHZhciB3PWgqKHUtMSksaz1oKnAsVD0wO1Q8aDsrK1QsKyt3LCsrayl7dmFyIEE9c1t3XTtzW3ddPXNba10sc1trXT1BfXZhciBNPWxbdS0xXTtsW3UtMV09bFtwXSxsW3BdPU0scD1uKHQsZSxjLHUtMSxzLGwsZCk7Zm9yKHZhciB3PWgqKHUtMSksaz1oKnAsVD0wO1Q8aDsrK1QsKyt3LCsrayl7dmFyIEE9c1t3XTtzW3ddPXNba10sc1trXT1BfXZhciBNPWxbdS0xXTtpZihsW3UtMV09bFtwXSxsW3BdPU0sZjxwKXtmb3IodT1wLTE7Yzx1JiZzW2gqKHUtMSkrZV09PT1kOyl1LT0xO3UrPTF9ZWxzZXtpZighKHA8ZikpYnJlYWs7Zm9yKGM9cCsxO2M8dSYmc1toKmMrZV09PT1kOyljKz0xfX1yZXR1cm4gbih0LGUscixmLHMsbCxzW2gqZitlXSl9O3ZhciBuPXQoIi4vcGFydGl0aW9uIikoImxvPHAwIixbInAwIl0pLGk9ODtmdW5jdGlvbiBhKHQsZSxyLG4saSxhKXtmb3IodmFyIG89Mip0LHM9byoocisxKStlLGw9cisxO2w8bjsrK2wscys9bylmb3IodmFyIGM9aVtzXSx1PWwsZj1vKihsLTEpO3U+ciYmaVtmK2VdPmM7LS11LGYtPW8pe2Zvcih2YXIgaD1mLHA9ZitvLGQ9MDtkPG87KytkLCsraCwrK3Ape3ZhciBnPWlbaF07aVtoXT1pW3BdLGlbcF09Z312YXIgdj1hW3VdO2FbdV09YVt1LTFdLGFbdS0xXT12fX19LHsiLi9wYXJ0aXRpb24iOjkwfV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ImFiY2RlZiIuc3BsaXQoIiIpLmNvbmNhdChlKSxpPVtdO3QuaW5kZXhPZigibG8iKT49MCYmaS5wdXNoKCJsbz1lW2srbl0iKTt0LmluZGV4T2YoImhpIik+PTAmJmkucHVzaCgiaGk9ZVtrK29dIik7cmV0dXJuIHIucHVzaChuLnJlcGxhY2UoIl8iLGkuam9pbigpKS5yZXBsYWNlKCIkIix0KSksRnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpfTt2YXIgbj0iZm9yKHZhciBqPTIqYSxrPWoqYyxsPWssbT1jLG49YixvPWErYixwPWM7ZD5wOysrcCxrKz1qKXt2YXIgXztpZigkKWlmKG09PT1wKW0rPTEsbCs9ajtlbHNle2Zvcih2YXIgcz0wO2o+czsrK3Mpe3ZhciB0PWVbaytzXTtlW2src109ZVtsXSxlW2wrK109dH12YXIgdT1mW3BdO2ZbcF09ZlttXSxmW20rK109dX19cmV0dXJuIG0ifSx7fV0sOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZTw9NCpuP2koMCxlLTEsdCk6ZnVuY3Rpb24gdChlLHIsZil7dmFyIGg9KHItZSsxKS82fDAscD1lK2gsZD1yLWgsZz1lK3I+PjEsdj1nLWgsbT1nK2gseT1wLHg9dixiPWcsXz1tLHc9ZCxrPWUrMSxUPXItMSxBPTA7Yyh5LHgsZikmJihBPXkseT14LHg9QSk7YyhfLHcsZikmJihBPV8sXz13LHc9QSk7Yyh5LGIsZikmJihBPXkseT1iLGI9QSk7Yyh4LGIsZikmJihBPXgseD1iLGI9QSk7Yyh5LF8sZikmJihBPXkseT1fLF89QSk7YyhiLF8sZikmJihBPWIsYj1fLF89QSk7Yyh4LHcsZikmJihBPXgseD13LHc9QSk7Yyh4LGIsZikmJihBPXgseD1iLGI9QSk7YyhfLHcsZikmJihBPV8sXz13LHc9QSk7dmFyIE09ZlsyKnhdO3ZhciBTPWZbMip4KzFdO3ZhciBFPWZbMipfXTt2YXIgQz1mWzIqXysxXTt2YXIgTD0yKnk7dmFyIHo9MipiO3ZhciBPPTIqdzt2YXIgST0yKnA7dmFyIEQ9MipnO3ZhciBQPTIqZDtmb3IodmFyIFI9MDtSPDI7KytSKXt2YXIgRj1mW0wrUl0sQj1mW3orUl0sTj1mW08rUl07ZltJK1JdPUYsZltEK1JdPUIsZltQK1JdPU59byh2LGUsZik7byhtLHIsZik7Zm9yKHZhciBqPWs7ajw9VDsrK2opaWYodShqLE0sUyxmKSlqIT09ayYmYShqLGssZiksKytrO2Vsc2UgaWYoIXUoaixFLEMsZikpZm9yKDs7KXtpZih1KFQsRSxDLGYpKXt1KFQsTSxTLGYpPyhzKGosayxULGYpLCsraywtLVQpOihhKGosVCxmKSwtLVQpO2JyZWFrfWlmKC0tVDxqKWJyZWFrfWwoZSxrLTEsTSxTLGYpO2wocixUKzEsRSxDLGYpO2stMi1lPD1uP2koZSxrLTIsZik6dChlLGstMixmKTtyLShUKzIpPD1uP2koVCsyLHIsZik6dChUKzIscixmKTtULWs8PW4/aShrLFQsZik6dChrLFQsZil9KDAsZS0xLHQpfTt2YXIgbj0zMjtmdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49MioodCsxKSxpPXQrMTtpPD1lOysraSl7Zm9yKHZhciBhPXJbbisrXSxvPXJbbisrXSxzPWksbD1uLTI7cy0tID50Oyl7dmFyIGM9cltsLTJdLHU9cltsLTFdO2lmKGM8YSlicmVhaztpZihjPT09YSYmdTxvKWJyZWFrO3JbbF09YyxyW2wrMV09dSxsLT0yfXJbbF09YSxyW2wrMV09b319ZnVuY3Rpb24gYSh0LGUscil7ZSo9Mjt2YXIgbj1yW3QqPTJdLGk9clt0KzFdO3JbdF09cltlXSxyW3QrMV09cltlKzFdLHJbZV09bixyW2UrMV09aX1mdW5jdGlvbiBvKHQsZSxyKXtlKj0yLHJbdCo9Ml09cltlXSxyW3QrMV09cltlKzFdfWZ1bmN0aW9uIHModCxlLHIsbil7ZSo9MixyKj0yO3ZhciBpPW5bdCo9Ml0sYT1uW3QrMV07blt0XT1uW2VdLG5bdCsxXT1uW2UrMV0sbltlXT1uW3JdLG5bZSsxXT1uW3IrMV0sbltyXT1pLG5bcisxXT1hfWZ1bmN0aW9uIGwodCxlLHIsbixpKXtlKj0yLGlbdCo9Ml09aVtlXSxpW2VdPXIsaVt0KzFdPWlbZSsxXSxpW2UrMV09bn1mdW5jdGlvbiBjKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0saT1yW2VdO3JldHVybiEobjxpKSYmKG4hPT1pfHxyW3QrMV0+cltlKzFdKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPW5bdCo9Ml07cmV0dXJuIGk8ZXx8aT09PWUmJm5bdCsxXTxyfX0se31dLDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT1pLm5leHRQb3cyKHQpO3MubGVuZ3RoPGUmJihuLmZyZWUocykscz1uLm1hbGxvY0ludDMyKGUpKTtsLmxlbmd0aDxlJiYobi5mcmVlKGwpLGw9bi5tYWxsb2NJbnQzMihlKSk7Yy5sZW5ndGg8ZSYmKG4uZnJlZShjKSxjPW4ubWFsbG9jSW50MzIoZSkpO3UubGVuZ3RoPGUmJihuLmZyZWUodSksdT1uLm1hbGxvY0ludDMyKGUpKTtmLmxlbmd0aDxlJiYobi5mcmVlKGYpLGY9bi5tYWxsb2NJbnQzMihlKSk7aC5sZW5ndGg8ZSYmKG4uZnJlZShoKSxoPW4ubWFsbG9jSW50MzIoZSkpO3ZhciByPTgqZTtwLmxlbmd0aDxyJiYobi5mcmVlKHApLHA9bi5tYWxsb2NEb3VibGUocikpfSxzd2VlcEJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksZixoLHYsbSx5KXtmb3IodmFyIHg9MCxiPTIqdCxfPXQtMSx3PWItMSxrPXI7azxuOysrayl7dmFyIFQ9ZltrXSxBPWIqaztwW3grK109aVtBK19dLHBbeCsrXT0tKFQrMSkscFt4KytdPWlbQSt3XSxwW3grK109VH1mb3IodmFyIGs9aDtrPHY7KytrKXt2YXIgVD15W2tdK28sTT1iKms7cFt4KytdPW1bTStfXSxwW3grK109LVQscFt4KytdPW1bTSt3XSxwW3grK109VH12YXIgUz14Pj4+MTthKHAsUyk7Zm9yKHZhciBFPTAsQz0wLGs9MDtrPFM7KytrKXt2YXIgTD0wfHBbMiprKzFdO2lmKEw+PW8pZChjLHUsQy0tLEw9TC1vfDApO2Vsc2UgaWYoTD49MClkKHMsbCxFLS0sTCk7ZWxzZSBpZihMPD0tbyl7TD0tTC1vfDA7Zm9yKHZhciB6PTA7ejxFOysreil7dmFyIE89ZShzW3pdLEwpO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE99ZyhjLHUsQysrLEwpfWVsc2V7TD0tTC0xfDA7Zm9yKHZhciB6PTA7ejxDOysreil7dmFyIE89ZShMLGNbel0pO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE99ZyhzLGwsRSsrLEwpfX19LHN3ZWVwQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLG8sdixtLHkseCl7Zm9yKHZhciBiPTAsXz0yKnQsdz10LTEsaz1fLTEsVD1yO1Q8bjsrK1Qpe3ZhciBBPW9bVF0rMTw8MSxNPV8qVDtwW2IrK109aVtNK3ddLHBbYisrXT0tQSxwW2IrK109aVtNK2tdLHBbYisrXT1BfWZvcih2YXIgVD12O1Q8bTsrK1Qpe3ZhciBBPXhbVF0rMTw8MSxTPV8qVDtwW2IrK109eVtTK3ddLHBbYisrXT0xfC1BLHBbYisrXT15W1Mra10scFtiKytdPTF8QX12YXIgRT1iPj4+MTthKHAsRSk7Zm9yKHZhciBDPTAsTD0wLHo9MCxUPTA7VDxFOysrVCl7dmFyIE89MHxwWzIqVCsxXSxJPTEmTztpZihUPEUtMSYmTz4+MT09cFsyKlQrM10+PjEmJihJPTIsVCs9MSksTzwwKXtmb3IodmFyIEQ9LShPPj4xKS0xLFA9MDtQPHo7KytQKXt2YXIgUj1lKGZbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigwIT09SSlmb3IodmFyIFA9MDtQPEM7KytQKXt2YXIgUj1lKHNbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigxIT09SSlmb3IodmFyIFA9MDtQPEw7KytQKXt2YXIgUj1lKGNbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn0wPT09ST9nKHMsbCxDKyssRCk6MT09PUk/ZyhjLHUsTCsrLEQpOjI9PT1JJiZnKGYsaCx6KyssRCl9ZWxzZXt2YXIgRD0oTz4+MSktMTswPT09ST9kKHMsbCxDLS0sRCk6MT09PUk/ZChjLHUsTC0tLEQpOjI9PT1JJiZkKGYsaCx6LS0sRCl9fX0sc2NhbkJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksYyx1LGYsaCx2LG0seSl7dmFyIHg9MCxiPTIqdCxfPWUsdz1lK3Qsaz0xLFQ9MTtuP1Q9bzprPW87Zm9yKHZhciBBPWk7QTxjOysrQSl7dmFyIE09QStrLFM9YipBO3BbeCsrXT11W1MrX10scFt4KytdPS1NLHBbeCsrXT11W1Mrd10scFt4KytdPU19Zm9yKHZhciBBPWg7QTx2OysrQSl7dmFyIE09QStULEU9YipBO3BbeCsrXT1tW0UrX10scFt4KytdPS1NfXZhciBDPXg+Pj4xO2EocCxDKTtmb3IodmFyIEw9MCxBPTA7QTxDOysrQSl7dmFyIHo9MHxwWzIqQSsxXTtpZih6PDApe3ZhciBNPS16LE89ITE7aWYoTT49bz8oTz0hbixNLT1vKTooTz0hIW4sTS09MSksTylnKHMsbCxMKyssTSk7ZWxzZXt2YXIgST15W01dLEQ9YipNLFA9bVtEK2UrMV0sUj1tW0QrZSsxK3RdO3Q6Zm9yKHZhciBGPTA7RjxMOysrRil7dmFyIEI9c1tGXSxOPWIqQjtpZighKFI8dVtOK2UrMV18fHVbTitlKzErdF08UCkpe2Zvcih2YXIgaj1lKzI7ajx0OysrailpZihtW0Qrait0XTx1W04ral18fHVbTitqK3RdPG1bRCtqXSljb250aW51ZSB0O3ZhciBWLFU9ZltCXTtpZih2b2lkIDAhPT0oVj1uP3IoSSxVKTpyKFUsSSkpKXJldHVybiBWfX19fWVsc2UgZChzLGwsTC0tLHotayl9fSxzY2FuQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLGwsYyx1LGYsaCxkKXtmb3IodmFyIGc9MCx2PTIqdCxtPWUseT1lK3QseD1uO3g8aTsrK3gpe3ZhciBiPXgrbyxfPXYqeDtwW2crK109bFtfK21dLHBbZysrXT0tYixwW2crK109bFtfK3ldLHBbZysrXT1ifWZvcih2YXIgeD11O3g8ZjsrK3gpe3ZhciBiPXgrMSx3PXYqeDtwW2crK109aFt3K21dLHBbZysrXT0tYn12YXIgaz1nPj4+MTthKHAsayk7Zm9yKHZhciBUPTAseD0wO3g8azsrK3gpe3ZhciBBPTB8cFsyKngrMV07aWYoQTwwKXt2YXIgYj0tQTtpZihiPj1vKXNbVCsrXT1iLW87ZWxzZXt2YXIgTT1kW2ItPTFdLFM9dipiLEU9aFtTK2UrMV0sQz1oW1MrZSsxK3RdO3Q6Zm9yKHZhciBMPTA7TDxUOysrTCl7dmFyIHo9c1tMXSxPPWNbel07aWYoTz09PU0pYnJlYWs7dmFyIEk9dip6O2lmKCEoQzxsW0krZSsxXXx8bFtJK2UrMSt0XTxFKSl7Zm9yKHZhciBEPWUrMjtEPHQ7KytEKWlmKGhbUytEK3RdPGxbSStEXXx8bFtJK0QrdF08aFtTK0RdKWNvbnRpbnVlIHQ7dmFyIFA9cihPLE0pO2lmKHZvaWQgMCE9PVApcmV0dXJuIFB9fX19ZWxzZXtmb3IodmFyIGI9QS1vLEw9VC0xO0w+PTA7LS1MKWlmKHNbTF09PT1iKXtmb3IodmFyIEQ9TCsxO0Q8VDsrK0Qpc1tELTFdPXNbRF07YnJlYWt9LS1UfX19fTt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoImJpdC10d2lkZGxlIiksYT10KCIuL3NvcnQiKSxvPTE8PDI4LHM9bi5tYWxsb2NJbnQzMigxMDI0KSxsPW4ubWFsbG9jSW50MzIoMTAyNCksYz1uLm1hbGxvY0ludDMyKDEwMjQpLHU9bi5tYWxsb2NJbnQzMigxMDI0KSxmPW4ubWFsbG9jSW50MzIoMTAyNCksaD1uLm1hbGxvY0ludDMyKDEwMjQpLHA9bi5tYWxsb2NEb3VibGUoODE5Mik7ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1lW25dLGE9dFtyLTFdO3RbaV09YSxlW2FdPWl9ZnVuY3Rpb24gZyh0LGUscixuKXt0W3JdPW4sZVtuXT1yfX0seyIuL3NvcnQiOjkxLCJiaXQtdHdpZGRsZSI6ODIsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sOTM6W2Z1bmN0aW9uKHQsZSxyKXt9LHt9XSw5NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZS5wcm90b3R5cGU9dCxuZXcgZX0saT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gcn0sYT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fTtmdW5jdGlvbiBvKCl7dGhpcy5fZXZlbnRzJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcywiX2V2ZW50cyIpfHwodGhpcy5fZXZlbnRzPW4obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfWUuZXhwb3J0cz1vLG8uRXZlbnRFbWl0dGVyPW8sby5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsby5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIHMsbD0xMDt0cnl7dmFyIGM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYywieCIse3ZhbHVlOjB9KSxzPTA9PT1jLnh9Y2F0Y2godCl7cz0hMX1mdW5jdGlvbiB1KHQpe3JldHVybiB2b2lkIDA9PT10Ll9tYXhMaXN0ZW5lcnM/by5kZWZhdWx0TWF4TGlzdGVuZXJzOnQuX21heExpc3RlbmVyc31mdW5jdGlvbiBmKHQsZSxyLGkpe3ZhciBhLG8scztpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKChvPXQuX2V2ZW50cyk/KG8ubmV3TGlzdGVuZXImJih0LmVtaXQoIm5ld0xpc3RlbmVyIixlLHIubGlzdGVuZXI/ci5saXN0ZW5lcjpyKSxvPXQuX2V2ZW50cykscz1vW2VdKToobz10Ll9ldmVudHM9bihudWxsKSx0Ll9ldmVudHNDb3VudD0wKSxzKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcz9zPW9bZV09aT9bcixzXTpbcyxyXTppP3MudW5zaGlmdChyKTpzLnB1c2gociksIXMud2FybmVkJiYoYT11KHQpKSYmYT4wJiZzLmxlbmd0aD5hKXtzLndhcm5lZD0hMDt2YXIgbD1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitzLmxlbmd0aCsnICInK1N0cmluZyhlKSsnIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicpO2wubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixsLmVtaXR0ZXI9dCxsLnR5cGU9ZSxsLmNvdW50PXMubGVuZ3RoLCJvYmplY3QiPT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIiVzOiAlcyIsbC5uYW1lLGwubWVzc2FnZSl9fWVsc2Ugcz1vW2VdPXIsKyt0Ll9ldmVudHNDb3VudDtyZXR1cm4gdH1mdW5jdGlvbiBoKCl7aWYoIXRoaXMuZmlyZWQpc3dpdGNoKHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCxhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7Y2FzZSAxOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQsYXJndW1lbnRzWzBdKTtjYXNlIDI6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTtjYXNlIDM6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7ZGVmYXVsdDpmb3IodmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdPWFyZ3VtZW50c1tlXTt0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LHQpfX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6dCx0eXBlOmUsbGlzdGVuZXI6cn0saT1hLmNhbGwoaCxuKTtyZXR1cm4gaS5saXN0ZW5lcj1yLG4ud3JhcEZuPWksaX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj10Ll9ldmVudHM7aWYoIW4pcmV0dXJuW107dmFyIGk9bltlXTtyZXR1cm4gaT8iZnVuY3Rpb24iPT10eXBlb2YgaT9yP1tpLmxpc3RlbmVyfHxpXTpbaV06cj9mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT10W3JdLmxpc3RlbmVyfHx0W3JdO3JldHVybiBlfShpKTp2KGksaS5sZW5ndGgpOltdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dGhpcy5fZXZlbnRzO2lmKGUpe3ZhciByPWVbdF07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIDE7aWYocilyZXR1cm4gci5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gdih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dO3JldHVybiByfXM/T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXQ6ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQhPXQpdGhyb3cgbmV3IFR5cGVFcnJvcignImRlZmF1bHRNYXhMaXN0ZW5lcnMiIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtsPXR9fSk6by5kZWZhdWx0TWF4TGlzdGVuZXJzPWwsby5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHxpc05hTih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibiIgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxvLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKX0sby5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz0iZXJyb3IiPT09dDtpZihvPXRoaXMuX2V2ZW50cylzPXMmJm51bGw9PW8uZXJyb3I7ZWxzZSBpZighcylyZXR1cm4hMTtpZihzKXtpZihhcmd1bWVudHMubGVuZ3RoPjEmJihlPWFyZ3VtZW50c1sxXSksZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGU7dmFyIGw9bmV3IEVycm9yKCdVbmhhbmRsZWQgImVycm9yIiBldmVudC4gKCcrZSsiKSIpO3Rocm93IGwuY29udGV4dD1lLGx9aWYoIShyPW9bdF0pKXJldHVybiExO3ZhciBjPSJmdW5jdGlvbiI9PXR5cGVvZiByO3N3aXRjaChuPWFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTohZnVuY3Rpb24odCxlLHIpe2lmKGUpdC5jYWxsKHIpO2Vsc2UgZm9yKHZhciBuPXQubGVuZ3RoLGk9dih0LG4pLGE9MDthPG47KythKWlbYV0uY2FsbChyKX0ocixjLHRoaXMpO2JyZWFrO2Nhc2UgMjohZnVuY3Rpb24odCxlLHIsbil7aWYoZSl0LmNhbGwocixuKTtlbHNlIGZvcih2YXIgaT10Lmxlbmd0aCxhPXYodCxpKSxvPTA7bzxpOysrbylhW29dLmNhbGwocixuKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6IWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZSl0LmNhbGwocixuLGkpO2Vsc2UgZm9yKHZhciBhPXQubGVuZ3RoLG89dih0LGEpLHM9MDtzPGE7KytzKW9bc10uY2FsbChyLG4saSl9KHIsYyx0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2Nhc2UgNDohZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKGUpdC5jYWxsKHIsbixpLGEpO2Vsc2UgZm9yKHZhciBvPXQubGVuZ3RoLHM9dih0LG8pLGw9MDtsPG87KytsKXNbbF0uY2FsbChyLG4saSxhKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10pO2JyZWFrO2RlZmF1bHQ6Zm9yKGk9bmV3IEFycmF5KG4tMSksYT0xO2E8bjthKyspaVthLTFdPWFyZ3VtZW50c1thXTshZnVuY3Rpb24odCxlLHIsbil7aWYoZSl0LmFwcGx5KHIsbik7ZWxzZSBmb3IodmFyIGk9dC5sZW5ndGgsYT12KHQsaSksbz0wO288aTsrK28pYVtvXS5hcHBseShyLG4pfShyLGMsdGhpcyxpKX1yZXR1cm4hMH0sby5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0aGlzLHQsZSwhMSl9LG8ucHJvdG90eXBlLm9uPW8ucHJvdG90eXBlLmFkZExpc3RlbmVyLG8ucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBmKHRoaXMsdCxlLCEwKX0sby5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMub24odCxwKHRoaXMsdCxlKSksdGhpc30sby5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMucHJlcGVuZExpc3RlbmVyKHQscCh0aGlzLHQsZSkpLHRoaXN9LG8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scztpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKCEoaT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCEocj1pW3RdKSlyZXR1cm4gdGhpcztpZihyPT09ZXx8ci5saXN0ZW5lcj09PWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bihudWxsKTooZGVsZXRlIGlbdF0saS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxyLmxpc3RlbmVyfHxlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil7Zm9yKGE9LTEsbz1yLmxlbmd0aC0xO28+PTA7by0tKWlmKHJbb109PT1lfHxyW29dLmxpc3RlbmVyPT09ZSl7cz1yW29dLmxpc3RlbmVyLGE9bzticmVha31pZihhPDApcmV0dXJuIHRoaXM7MD09PWE/ci5zaGlmdCgpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUsbj1yKzEsaT10Lmxlbmd0aDtuPGk7cis9MSxuKz0xKXRbcl09dFtuXTt0LnBvcCgpfShyLGEpLDE9PT1yLmxlbmd0aCYmKGlbdF09clswXSksaS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxzfHxlKX1yZXR1cm4gdGhpc30sby5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYTtpZighKHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZighci5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1uKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnJbdF0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1uKG51bGwpOmRlbGV0ZSByW3RdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgbyxzPWkocik7Zm9yKGE9MDthPHMubGVuZ3RoOysrYSkicmVtb3ZlTGlzdGVuZXIiIT09KG89c1thXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKG8pO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9bihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKGU9clt0XSkpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGUpO2Vsc2UgaWYoZSlmb3IoYT1lLmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlW2FdKTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMCl9LG8ucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gZCh0aGlzLHQsITEpfSxvLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5saXN0ZW5lckNvdW50P3QubGlzdGVuZXJDb3VudChlKTpnLmNhbGwodCxlKX0sby5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1nLG8ucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX19LHt9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiYXNlNjQtanMiKSxpPXQoImllZWU3NTQiKTtyLkJ1ZmZlcj1zLHIuU2xvd0J1ZmZlcj1mdW5jdGlvbih0KXsrdCE9dCYmKHQ9MCk7cmV0dXJuIHMuYWxsb2MoK3QpfSxyLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBhPTIxNDc0ODM2NDc7ZnVuY3Rpb24gbyh0KXtpZih0PmEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189cy5wcm90b3R5cGUsZX1mdW5jdGlvbiBzKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gdSh0KX1yZXR1cm4gbCh0LGUscil9ZnVuY3Rpb24gbCh0LGUscil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBmdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgZSYmIiIhPT1lfHwoZT0idXRmOCIpO2lmKCFzLmlzRW5jb2RpbmcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTt2YXIgcj0wfHAodCxlKSxuPW8ociksaT1uLndyaXRlKHQsZSk7aSE9PXImJihuPW4uc2xpY2UoMCxpKSk7cmV0dXJuIG59KHQsZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBmKHQpO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiB0KTtpZihqKHQsQXJyYXlCdWZmZXIpfHx0JiZqKHQuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKHQuYnl0ZUxlbmd0aDxlKyhyfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIG47bj12b2lkIDA9PT1lJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUscik7cmV0dXJuIG4uX19wcm90b19fPXMucHJvdG90eXBlLG59KHQsZSxyKTtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIG49dC52YWx1ZU9mJiZ0LnZhbHVlT2YoKTtpZihudWxsIT1uJiZuIT09dClyZXR1cm4gcy5mcm9tKG4sZSxyKTt2YXIgaT1mdW5jdGlvbih0KXtpZihzLmlzQnVmZmVyKHQpKXt2YXIgZT0wfGgodC5sZW5ndGgpLHI9byhlKTtyZXR1cm4gMD09PXIubGVuZ3RoP3I6KHQuY29weShyLDAsMCxlKSxyKX1pZih2b2lkIDAhPT10Lmxlbmd0aClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHxWKHQubGVuZ3RoKT9vKDApOmYodCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gZih0LmRhdGEpfSh0KTtpZihpKXJldHVybiBpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIHMuZnJvbSh0W1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLGUscik7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gYyh0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiB1KHQpe3JldHVybiBjKHQpLG8odDwwPzA6MHxoKHQpKX1mdW5jdGlvbiBmKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDwwPzA6MHxoKHQubGVuZ3RoKSxyPW8oZSksbj0wO248ZTtuKz0xKXJbbl09MjU1JnRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0KXtpZih0Pj1hKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IithLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8dH1mdW5jdGlvbiBwKHQsZSl7aWYocy5pc0J1ZmZlcih0KSlyZXR1cm4gdC5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpfHxqKHQsQXJyYXlCdWZmZXIpKXJldHVybiB0LmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTt2YXIgcj10Lmxlbmd0aCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIW4mJjA9PT1yKXJldHVybiAwO2Zvcih2YXIgaT0hMTs7KXN3aXRjaChlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEYodCkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBCKHQpLmxlbmd0aDtkZWZhdWx0OmlmKGkpcmV0dXJuIG4/LTE6Rih0KS5sZW5ndGg7ZT0oIiIrZSkudG9Mb3dlckNhc2UoKSxpPSEwfX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZyh0LGUscixuLGkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLFYocj0rcikmJihyPWk/MDp0Lmxlbmd0aC0xKSxyPDAmJihyPXQubGVuZ3RoK3IpLHI+PXQubGVuZ3RoKXtpZihpKXJldHVybi0xO3I9dC5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWkpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9cy5mcm9tKGUsbikpLHMuaXNCdWZmZXIoZSkpcmV0dXJuIDA9PT1lLmxlbmd0aD8tMTp2KHQsZSxyLG4saSk7aWYoIm51bWJlciI9PXR5cGVvZiBlKXJldHVybiBlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodCxlLHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwodCxlLHIpOnYodCxbZV0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgYSxvPTEscz10Lmxlbmd0aCxsPWUubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKHQubGVuZ3RoPDJ8fGUubGVuZ3RoPDIpcmV0dXJuLTE7bz0yLHMvPTIsbC89MixyLz0yfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gMT09PW8/dFtlXTp0LnJlYWRVSW50MTZCRShlKm8pfWlmKGkpe3ZhciB1PS0xO2ZvcihhPXI7YTxzO2ErKylpZihjKHQsYSk9PT1jKGUsLTE9PT11PzA6YS11KSl7aWYoLTE9PT11JiYodT1hKSxhLXUrMT09PWwpcmV0dXJuIHUqb31lbHNlLTEhPT11JiYoYS09YS11KSx1PS0xfWVsc2UgZm9yKHIrbD5zJiYocj1zLWwpLGE9cjthPj0wO2EtLSl7Zm9yKHZhciBmPSEwLGg9MDtoPGw7aCsrKWlmKGModCxhK2gpIT09YyhlLGgpKXtmPSExO2JyZWFrfWlmKGYpcmV0dXJuIGF9cmV0dXJuLTF9ZnVuY3Rpb24gbSh0LGUscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT10Lmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIGE9ZS5sZW5ndGg7bj5hLzImJihuPWEvMik7Zm9yKHZhciBvPTA7bzxuOysrbyl7dmFyIHM9cGFyc2VJbnQoZS5zdWJzdHIoMipvLDIpLDE2KTtpZihWKHMpKXJldHVybiBvO3RbcitvXT1zfXJldHVybiBvfWZ1bmN0aW9uIHkodCxlLHIsbil7cmV0dXJuIE4oRihlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiBOKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKDI1NSZ0LmNoYXJDb2RlQXQocikpO3JldHVybiBlfShlKSx0LHIsbil9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4geCh0LGUscixuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiBOKEIoZSksdCxyLG4pfWZ1bmN0aW9uIHcodCxlLHIsbil7cmV0dXJuIE4oZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9W10sbz0wO288dC5sZW5ndGgmJiEoKGUtPTIpPDApOysrbylyPXQuY2hhckNvZGVBdChvKSxuPXI+PjgsaT1yJTI1NixhLnB1c2goaSksYS5wdXNoKG4pO3JldHVybiBhfShlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBrKHQsZSxyKXtyZXR1cm4gMD09PWUmJnI9PT10Lmxlbmd0aD9uLmZyb21CeXRlQXJyYXkodCk6bi5mcm9tQnl0ZUFycmF5KHQuc2xpY2UoZSxyKSl9ZnVuY3Rpb24gVCh0LGUscil7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49W10saT1lO2k8cjspe3ZhciBhLG8scyxsLGM9dFtpXSx1PW51bGwsZj1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkrZjw9cilzd2l0Y2goZil7Y2FzZSAxOmM8MTI4JiYodT1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihhPXRbaSsxXSkpJiYobD0oMzEmYyk8PDZ8NjMmYSk+MTI3JiYodT1sKTticmVhaztjYXNlIDM6YT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJihsPSgxNSZjKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPjIwNDcmJihsPDU1Mjk2fHxsPjU3MzQzKSYmKHU9bCk7YnJlYWs7Y2FzZSA0OmE9dFtpKzFdLG89dFtpKzJdLHM9dFtpKzNdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihsPSgxNSZjKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+NjU1MzUmJmw8MTExNDExMiYmKHU9bCl9bnVsbD09PXU/KHU9NjU1MzMsZj0xKTp1PjY1NTM1JiYodS09NjU1MzYsbi5wdXNoKHU+Pj4xMCYxMDIzfDU1Mjk2KSx1PTU2MzIwfDEwMjMmdSksbi5wdXNoKHUpLGkrPWZ9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PUEpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQpO3ZhciByPSIiLG49MDtmb3IoO248ZTspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdC5zbGljZShuLG4rPUEpKTtyZXR1cm4gcn0obil9ci5rTWF4TGVuZ3RoPWEscy5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybiB0Ll9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09dC5mb28oKX1jYXRjaCh0KXtyZXR1cm4hMX19KCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHMuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSwidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnNwZWNpZXMmJnNbU3ltYm9sLnNwZWNpZXNdPT09cyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITF9KSxzLnBvb2xTaXplPTgxOTIscy5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbCh0LGUscil9LHMucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxzLl9fcHJvdG9fXz1VaW50OEFycmF5LHMuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscil7cmV0dXJuIGModCksdDw9MD9vKHQpOnZvaWQgMCE9PWU/InN0cmluZyI9PXR5cGVvZiByP28odCkuZmlsbChlLHIpOm8odCkuZmlsbChlKTpvKHQpfSh0LGUscil9LHMuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7cmV0dXJuIHUodCl9LHMuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfSxzLmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYhMD09PXQuX2lzQnVmZmVyJiZ0IT09cy5wcm90b3R5cGV9LHMuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKGoodCxVaW50OEFycmF5KSYmKHQ9cy5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksaihlLFVpbnQ4QXJyYXkpJiYoZT1zLmZyb20oZSxlLm9mZnNldCxlLmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcih0KXx8IXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wLGE9TWF0aC5taW4ocixuKTtpPGE7KytpKWlmKHRbaV0hPT1lW2ldKXtyPXRbaV0sbj1lW2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0scy5pc0VuY29kaW5nPWZ1bmN0aW9uKHQpe3N3aXRjaChTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxzLmNvbmNhdD1mdW5jdGlvbih0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHMuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09ZSlmb3IoZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdLmxlbmd0aDt2YXIgbj1zLmFsbG9jVW5zYWZlKGUpLGk9MDtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgYT10W3JdO2lmKGooYSxVaW50OEFycmF5KSYmKGE9cy5mcm9tKGEpKSwhcy5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KG4saSksaSs9YS5sZW5ndGh9cmV0dXJuIG59LHMuYnl0ZUxlbmd0aD1wLHMucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxzLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTIpZCh0aGlzLGUsZSsxKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz00KWQodGhpcyxlLGUrMyksZCh0aGlzLGUrMSxlKzIpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTgpZCh0aGlzLGUsZSs3KSxkKHRoaXMsZSsxLGUrNiksZCh0aGlzLGUrMixlKzUpLGQodGhpcyxlKzMsZSs0KTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/VCh0aGlzLDAsdCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PShlPj4+PTApKXJldHVybiIiO2Zvcih0fHwodD0idXRmOCIpOzspc3dpdGNoKHQpe2Nhc2UiaGV4IjpyZXR1cm4gRSh0aGlzLGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gVCh0aGlzLGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIE0odGhpcyxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFModGhpcyxlLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gayh0aGlzLGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBDKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0KTt0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHMucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPXMucHJvdG90eXBlLnRvU3RyaW5nLHMucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT10fHwwPT09cy5jb21wYXJlKHRoaXMsdCl9LHMucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgdD0iIixlPXIuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLGUpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+ZSYmKHQrPSIgLi4uICIpLCI8QnVmZmVyICIrdCsiPiJ9LHMucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlLHIsbixpKXtpZihqKHQsVWludDhBcnJheSkmJih0PXMuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PXImJihyPXQ/dC5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLGU8MHx8cj50Lmxlbmd0aHx8bjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1pJiZlPj1yKXJldHVybiAwO2lmKG4+PWkpcmV0dXJuLTE7aWYoZT49cilyZXR1cm4gMTtpZih0aGlzPT09dClyZXR1cm4gMDtmb3IodmFyIGE9KGk+Pj49MCktKG4+Pj49MCksbz0ocj4+Pj0wKS0oZT4+Pj0wKSxsPU1hdGgubWluKGEsbyksYz10aGlzLnNsaWNlKG4saSksdT10LnNsaWNlKGUsciksZj0wO2Y8bDsrK2YpaWYoY1tmXSE9PXVbZl0pe2E9Y1tmXSxvPXVbZl07YnJlYWt9cmV0dXJuIGE8bz8tMTpvPGE/MTowfSxzLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YodCxlLHIpfSxzLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZyh0aGlzLHQsZSxyLCEwKX0scy5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBnKHRoaXMsdCxlLHIsITEpfSxzLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT1lKW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiBlKW49ZSxyPXRoaXMubGVuZ3RoLGU9MDtlbHNle2lmKCFpc0Zpbml0ZShlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7ZT4+Pj0wLGlzRmluaXRlKHIpPyhyPj4+PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtZTtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksdC5sZW5ndGg+MCYmKHI8MHx8ZTwwKXx8ZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgYT0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIG0odGhpcyx0LGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4geSh0aGlzLHQsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBiKHRoaXMsdCxlLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gXyh0aGlzLHQsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHcodGhpcyx0LGUscik7ZGVmYXVsdDppZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxhPSEwfX0scy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgQT00MDk2O2Z1bmN0aW9uIE0odCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZ0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBTKHQsZSxyKXt2YXIgbj0iIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10Lmxlbmd0aDsoIWV8fGU8MCkmJihlPTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsYT1lO2E8cjsrK2EpaSs9Uih0W2FdKTtyZXR1cm4gaX1mdW5jdGlvbiBDKHQsZSxyKXtmb3IodmFyIG49dC5zbGljZShlLHIpLGk9IiIsYT0wO2E8bi5sZW5ndGg7YSs9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bYV0rMjU2Km5bYSsxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gTCh0LGUscil7aWYodCUxIT0wfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKHQrZT5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24geih0LGUscixuLGksYSl7aWYoIXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKGU+aXx8ZTxhKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIE8odCxlLHIsbixpLGEpe2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBJKHQsZSxyLG4sYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fE8odCwwLHIsNCksaS53cml0ZSh0LGUscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBEKHQsZSxyLG4sYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fE8odCwwLHIsOCksaS53cml0ZSh0LGUscixuLDUyLDgpLHIrOH1zLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoOyh0PX5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSwoZT12b2lkIDA9PT1lP3I6fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLGU8dCYmKGU9dCk7dmFyIG49dGhpcy5zdWJhcnJheSh0LGUpO3JldHVybiBuLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxufSxzLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEwodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIG59LHMucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3QrLS1lXSxpPTE7ZT4wJiYoaSo9MjU2KTspbis9dGhpc1t0Ky0tZV0qaTtyZXR1cm4gbn0scy5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0scy5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LHMucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDh8dGhpc1t0KzFdfSxzLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSxzLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxzLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbj49KGkqPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqZSkpLG59LHMucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxMKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPWUsaT0xLGE9dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspYSs9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gYT49KGkqPTEyOCkmJihhLT1NYXRoLnBvdygyLDgqZSkpLGF9LHMucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/LTEqKDI1NS10aGlzW3RdKzEpOnRoaXNbdF19LHMucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fEwodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3RdfHRoaXNbdCsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0scy5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxzLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0scy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdPDwyNHx0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM119LHMucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsNCx0aGlzLmxlbmd0aCksaS5yZWFkKHRoaXMsdCwhMCwyMyw0KX0scy5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCExLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw4LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCEwLDUyLDgpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw4LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCExLDUyLDgpfSxzLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHx6KHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihpKj0yNTYpOyl0aGlzW2UrYV09dC9pJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHx6KHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLGE9MTtmb3IodGhpc1tlK2ldPTI1NSZ0Oy0taT49MCYmKGEqPTI1Nik7KXRoaXNbZStpXT10L2EmMjU1O3JldHVybiBlK3J9LHMucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDEsMjU1LDApLHRoaXNbZV09MjU1JnQsZSsxfSxzLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0scy5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMiw2NTUzNSwwKSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LHMucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2UrM109dD4+PjI0LHRoaXNbZSsyXT10Pj4+MTYsdGhpc1tlKzFdPXQ+Pj44LHRoaXNbZV09MjU1JnQsZSs0fSxzLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0scy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7eih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9MCxvPTEscz0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrYTxyJiYobyo9MjU2KTspdDwwJiYwPT09cyYmMCE9PXRoaXNbZSthLTFdJiYocz0xKSx0aGlzW2UrYV09KHQvbz4+MCktcyYyNTU7cmV0dXJuIGUrcn0scy5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7eih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9ci0xLG89MSxzPTA7Zm9yKHRoaXNbZSthXT0yNTUmdDstLWE+PTAmJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2ErMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDEsMTI3LC0xMjgpLHQ8MCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LHMucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0scy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSxzLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0LGUrNH0scy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LHMucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITAscil9LHMucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITEscil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBEKHRoaXMsdCxlLCEwLHIpfSxzLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRCh0aGlzLHQsZSwhMSxyKX0scy5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0LGUscixuKXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLGU+PXQubGVuZ3RoJiYoZT10Lmxlbmd0aCksZXx8KGU9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT10Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksdC5sZW5ndGgtZTxuLXImJihuPXQubGVuZ3RoLWUrcik7dmFyIGk9bi1yO2lmKHRoaXM9PT10JiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbil0aGlzLmNvcHlXaXRoaW4oZSxyLG4pO2Vsc2UgaWYodGhpcz09PXQmJnI8ZSYmZTxuKWZvcih2YXIgYT1pLTE7YT49MDstLWEpdFthK2VdPXRoaXNbYStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHQsdGhpcy5zdWJhcnJheShyLG4pLGUpO3JldHVybiBpfSxzLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoInN0cmluZyI9PXR5cGVvZiBlPyhuPWUsZT0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIXMuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIGk9dC5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1uJiZpPDEyOHx8ImxhdGluMSI9PT1uKSYmKHQ9aSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHQmJih0Jj0yNTUpO2lmKGU8MHx8dGhpcy5sZW5ndGg8ZXx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9ZSlyZXR1cm4gdGhpczt2YXIgYTtpZihlPj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLHR8fCh0PTApLCJudW1iZXIiPT10eXBlb2YgdClmb3IoYT1lO2E8cjsrK2EpdGhpc1thXT10O2Vsc2V7dmFyIG89cy5pc0J1ZmZlcih0KT90OnMuZnJvbSh0LG4pLGw9by5sZW5ndGg7aWYoMD09PWwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihhPTA7YTxyLWU7KythKXRoaXNbYStlXT1vW2ElbF19cmV0dXJuIHRoaXN9O3ZhciBQPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQ8MTY/IjAiK3QudG9TdHJpbmcoMTYpOnQudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEYodCxlKXt2YXIgcjtlPWV8fDEvMDtmb3IodmFyIG49dC5sZW5ndGgsaT1udWxsLGE9W10sbz0wO288bjsrK28pe2lmKChyPXQuY2hhckNvZGVBdChvKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYobysxPT09bil7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKGUtPTEpPDApYnJlYWs7YS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigoZS09Mik8MClicmVhazthLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKGUtPTMpPDApYnJlYWs7YS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoZS09NCk8MClicmVhazthLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBhfWZ1bmN0aW9uIEIodCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24odCl7aWYoKHQ9KHQ9dC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShQLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDt0Lmxlbmd0aCU0IT0wOyl0Kz0iPSI7cmV0dXJuIHR9KHQpKX1mdW5jdGlvbiBOKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PWUubGVuZ3RofHxpPj10Lmxlbmd0aCk7KytpKWVbaStyXT10W2ldO3JldHVybiBpfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fG51bGwhPXQmJm51bGwhPXQuY29uc3RydWN0b3ImJm51bGwhPXQuY29uc3RydWN0b3IubmFtZSYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09ZS5uYW1lfWZ1bmN0aW9uIFYodCl7cmV0dXJuIHQhPXR9fSx7ImJhc2U2NC1qcyI6NjQsaWVlZTc1NDo0MDR9XSw5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9tb25vdG9uZSIpLGk9dCgiLi9saWIvdHJpYW5ndWxhdGlvbiIpLGE9dCgiLi9saWIvZGVsYXVuYXkiKSxvPXQoIi4vbGliL2ZpbHRlciIpO2Z1bmN0aW9uIHModCl7cmV0dXJuW01hdGgubWluKHRbMF0sdFsxXSksTWF0aC5tYXgodFswXSx0WzFdKV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkoZSk/KHI9cnx8e30sZT1lfHxbXSk6KHI9ZXx8e30sZT1bXSk7dmFyIHU9ISFjKHIsImRlbGF1bmF5IiwhMCksZj0hIWMociwiaW50ZXJpb3IiLCEwKSxoPSEhYyhyLCJleHRlcmlvciIsITApLHA9ISFjKHIsImluZmluaXR5IiwhMSk7aWYoIWYmJiFofHwwPT09dC5sZW5ndGgpcmV0dXJuW107dmFyIGQ9bih0LGUpO2lmKHV8fGYhPT1ofHxwKXtmb3IodmFyIGc9aSh0Lmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuc29ydChsKX0oZSkpLHY9MDt2PGQubGVuZ3RoOysrdil7dmFyIG09ZFt2XTtnLmFkZFRyaWFuZ2xlKG1bMF0sbVsxXSxtWzJdKX1yZXR1cm4gdSYmYSh0LGcpLGg/Zj9wP28oZywwLHApOmcuY2VsbHMoKTpvKGcsMSxwKTpvKGcsLTEpfXJldHVybiBkfX0seyIuL2xpYi9kZWxhdW5heSI6OTcsIi4vbGliL2ZpbHRlciI6OTgsIi4vbGliL21vbm90b25lIjo5OSwiLi9saWIvdHJpYW5ndWxhdGlvbiI6MTAwfV0sOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicm9idXN0LWluLXNwaGVyZSIpWzRdO3QoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gaSh0LGUscixpLGEsbyl7dmFyIHM9ZS5vcHBvc2l0ZShpLGEpO2lmKCEoczwwKSl7aWYoYTxpKXt2YXIgbD1pO2k9YSxhPWwsbD1vLG89cyxzPWx9ZS5pc0NvbnN0cmFpbnQoaSxhKXx8bih0W2ldLHRbYV0sdFtvXSx0W3NdKTwwJiZyLnB1c2goaSxhKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGE9dC5sZW5ndGgsbz1lLnN0YXJzLHM9MDtzPGE7KytzKWZvcih2YXIgbD1vW3NdLGM9MTtjPGwubGVuZ3RoO2MrPTIpe3ZhciB1PWxbY107aWYoISh1PHMpJiYhZS5pc0NvbnN0cmFpbnQocyx1KSl7Zm9yKHZhciBmPWxbYy0xXSxoPS0xLHA9MTtwPGwubGVuZ3RoO3ArPTIpaWYobFtwLTFdPT09dSl7aD1sW3BdO2JyZWFrfWg8MHx8bih0W3NdLHRbdV0sdFtmXSx0W2hdKTwwJiZyLnB1c2gocyx1KX19Zm9yKDtyLmxlbmd0aD4wOyl7Zm9yKHZhciB1PXIucG9wKCkscz1yLnBvcCgpLGY9LTEsaD0tMSxsPW9bc10sZD0xO2Q8bC5sZW5ndGg7ZCs9Mil7dmFyIGc9bFtkLTFdLHY9bFtkXTtnPT09dT9oPXY6dj09PXUmJihmPWcpfWY8MHx8aDwwfHwobih0W3NdLHRbdV0sdFtmXSx0W2hdKT49MHx8KGUuZmxpcChzLHUpLGkodCxlLHIsZixzLGgpLGkodCxlLHIscyxoLGYpLGkodCxlLHIsaCx1LGYpLGkodCxlLHIsdSxmLGgpKSl9fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAxLCJyb2J1c3QtaW4tc3BoZXJlIjo0OTJ9XSw5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0aGlzLmNlbGxzPXQsdGhpcy5uZWlnaGJvcj1lLHRoaXMuZmxhZ3M9bix0aGlzLmNvbnN0cmFpbnQ9cix0aGlzLmFjdGl2ZT1pLHRoaXMubmV4dD1hLHRoaXMuYm91bmRhcnk9b31mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfHx0WzJdLWVbMl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNlbGxzKCksbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIHM9cltpXSxsPXNbMF0sYz1zWzFdLHU9c1syXTtjPHU/YzxsJiYoc1swXT1jLHNbMV09dSxzWzJdPWwpOnU8bCYmKHNbMF09dSxzWzFdPWwsc1syXT1jKX1yLnNvcnQobyk7Zm9yKHZhciBmPW5ldyBBcnJheShuKSxpPTA7aTxmLmxlbmd0aDsrK2kpZltpXT0wO3ZhciBoPVtdLHA9W10sZD1uZXcgQXJyYXkoMypuKSxnPW5ldyBBcnJheSgzKm4pLHY9bnVsbDtlJiYodj1bXSk7Zm9yKHZhciBtPW5ldyBhKHIsZCxnLGYsaCxwLHYpLGk9MDtpPG47KytpKWZvcih2YXIgcz1yW2ldLHk9MDt5PDM7Kyt5KXt2YXIgbD1zW3ldLGM9c1soeSsxKSUzXSx4PWRbMyppK3ldPW0ubG9jYXRlKGMsbCx0Lm9wcG9zaXRlKGMsbCkpLGI9Z1szKmkreV09dC5pc0NvbnN0cmFpbnQobCxjKTt4PDAmJihiP3AucHVzaChpKTooaC5wdXNoKGkpLGZbaV09MSksZSYmdi5wdXNoKFtjLGwsLTFdKSl9cmV0dXJuIG19KHQscik7aWYoMD09PWUpcmV0dXJuIHI/bi5jZWxscy5jb25jYXQobi5ib3VuZGFyeSk6bi5jZWxsczt2YXIgaT0xLHM9bi5hY3RpdmUsbD1uLm5leHQsYz1uLmZsYWdzLHU9bi5jZWxscyxmPW4uY29uc3RyYWludCxoPW4ubmVpZ2hib3I7Zm9yKDtzLmxlbmd0aD4wfHxsLmxlbmd0aD4wOyl7Zm9yKDtzLmxlbmd0aD4wOyl7dmFyIHA9cy5wb3AoKTtpZihjW3BdIT09LWkpe2NbcF09aTt1W3BdO2Zvcih2YXIgZD0wO2Q8MzsrK2Qpe3ZhciBnPWhbMypwK2RdO2c+PTAmJjA9PT1jW2ddJiYoZlszKnArZF0/bC5wdXNoKGcpOihzLnB1c2goZyksY1tnXT1pKSl9fX12YXIgdj1sO2w9cyxzPXYsbC5sZW5ndGg9MCxpPS1pfXZhciBtPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT09PXImJih0W24rK109dFtpXSk7cmV0dXJuIHQubGVuZ3RoPW4sdH0odSxjLGUpO2lmKHIpcmV0dXJuIG0uY29uY2F0KG4uYm91bmRhcnkpO3JldHVybiBtfSxhLnByb3RvdHlwZS5sb2NhdGU9KG49WzAsMCwwXSxmdW5jdGlvbih0LGUscil7dmFyIGE9dCxzPWUsbD1yO3JldHVybiBlPHI/ZTx0JiYoYT1lLHM9cixsPXQpOnI8dCYmKGE9cixzPXQsbD1lKSxhPDA/LTE6KG5bMF09YSxuWzFdPXMsblsyXT1sLGkuZXEodGhpcy5jZWxscyxuLG8pKX0pfSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDF9XSw5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgicm9idXN0LW9yaWVudGF0aW9uIilbM10sYT0wLG89MSxzPTI7ZnVuY3Rpb24gbCh0LGUscixuLGkpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuaWR4PXIsdGhpcy5sb3dlcklkcz1uLHRoaXMudXBwZXJJZHM9aX1mdW5jdGlvbiBjKHQsZSxyLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMudHlwZT1yLHRoaXMuaWR4PW59ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuYVswXS1lLmFbMF18fHQuYVsxXS1lLmFbMV18fHQudHlwZS1lLnR5cGU7cmV0dXJuIHJ8fCh0LnR5cGUhPT1hJiYocj1pKHQuYSx0LmIsZS5iKSk/cjp0LmlkeC1lLmlkeCl9ZnVuY3Rpb24gZih0LGUpe3JldHVybiBpKHQuYSx0LmIsZSl9ZnVuY3Rpb24gaCh0LGUscixhLG8pe2Zvcih2YXIgcz1uLmx0KGUsYSxmKSxsPW4uZ3QoZSxhLGYpLGM9cztjPGw7KytjKXtmb3IodmFyIHU9ZVtjXSxoPXUubG93ZXJJZHMscD1oLmxlbmd0aDtwPjEmJmkocltoW3AtMl1dLHJbaFtwLTFdXSxhKT4wOyl0LnB1c2goW2hbcC0xXSxoW3AtMl0sb10pLHAtPTE7aC5sZW5ndGg9cCxoLnB1c2gobyk7dmFyIGQ9dS51cHBlcklkcztmb3IocD1kLmxlbmd0aDtwPjEmJmkocltkW3AtMl1dLHJbZFtwLTFdXSxhKTwwOyl0LnB1c2goW2RbcC0yXSxkW3AtMV0sb10pLHAtPTE7ZC5sZW5ndGg9cCxkLnB1c2gobyl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcjtyZXR1cm4ocj10LmFbMF08ZS5hWzBdP2kodC5hLHQuYixlLmEpOmkoZS5iLGUuYSx0LmEpKT9yOihyPWUuYlswXTx0LmJbMF0/aSh0LmEsdC5iLGUuYik6aShlLmIsZS5hLHQuYikpfHx0LmlkeC1lLmlkeH1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgaT1uLmxlKHQscixwKSxhPXRbaV0sbz1hLnVwcGVySWRzLHM9b1tvLmxlbmd0aC0xXTthLnVwcGVySWRzPVtzXSx0LnNwbGljZShpKzEsMCxuZXcgbChyLmEsci5iLHIuaWR4LFtzXSxvKSl9ZnVuY3Rpb24gZyh0LGUscil7dmFyIGk9ci5hO3IuYT1yLmIsci5iPWk7dmFyIGE9bi5lcSh0LHIscCksbz10W2FdO3RbYS0xXS51cHBlcklkcz1vLnVwcGVySWRzLHQuc3BsaWNlKGEsMSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT1bXSxmPTA7ZjxyOysrZilpLnB1c2gobmV3IGModFtmXSxudWxsLGEsZikpO2Zvcih2YXIgZj0wO2Y8bjsrK2Ype3ZhciBwPWVbZl0sdj10W3BbMF1dLG09dFtwWzFdXTt2WzBdPG1bMF0/aS5wdXNoKG5ldyBjKHYsbSxzLGYpLG5ldyBjKG0sdixvLGYpKTp2WzBdPm1bMF0mJmkucHVzaChuZXcgYyhtLHYscyxmKSxuZXcgYyh2LG0sbyxmKSl9aS5zb3J0KHUpO2Zvcih2YXIgeT1pWzBdLmFbMF0tKDErTWF0aC5hYnMoaVswXS5hWzBdKSkqTWF0aC5wb3coMiwtNTIpLHg9W25ldyBsKFt5LDFdLFt5LDBdLC0xLFtdLFtdLFtdLFtdKV0sYj1bXSxmPTAsXz1pLmxlbmd0aDtmPF87KytmKXt2YXIgdz1pW2ZdLGs9dy50eXBlO2s9PT1hP2goYix4LHQsdy5hLHcuaWR4KTprPT09cz9kKHgsdCx3KTpnKHgsdCx3KX1yZXR1cm4gYn19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjEwMSwicm9idXN0LW9yaWVudGF0aW9uIjo0OTR9XSwxMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09W107cmV0dXJuIG5ldyBpKHIsZSl9O3ZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0xLGk9dC5sZW5ndGg7bjxpO24rPTIpaWYodFtuLTFdPT09ZSYmdFtuXT09PXIpcmV0dXJuIHRbbi0xXT10W2ktMl0sdFtuXT10W2ktMV0sdm9pZCh0Lmxlbmd0aD1pLTIpfWEuaXNDb25zdHJhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF07ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1yZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdFswXT1NYXRoLm1pbihyLGkpLHRbMV09TWF0aC5tYXgocixpKSxuLmVxKHRoaXMuZWRnZXMsdCxlKT49MH19KCksYS5yZW1vdmVUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztvKG5bdF0sZSxyKSxvKG5bZV0scix0KSxvKG5bcl0sdCxlKX0sYS5hZGRUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztuW3RdLnB1c2goZSxyKSxuW2VdLnB1c2gocix0KSxuW3JdLnB1c2godCxlKX0sYS5vcHBvc2l0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN0YXJzW2VdLG49MSxpPXIubGVuZ3RoO248aTtuKz0yKWlmKHJbbl09PT10KXJldHVybiByW24tMV07cmV0dXJuLTF9LGEuZmxpcD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub3Bwb3NpdGUodCxlKSxuPXRoaXMub3Bwb3NpdGUoZSx0KTt0aGlzLnJlbW92ZVRyaWFuZ2xlKHQsZSxyKSx0aGlzLnJlbW92ZVRyaWFuZ2xlKGUsdCxuKSx0aGlzLmFkZFRyaWFuZ2xlKHQsbixyKSx0aGlzLmFkZFRyaWFuZ2xlKGUscixuKX0sYS5lZGdlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9MillLnB1c2goW2lbYV0saVthKzFdXSk7cmV0dXJuIGV9LGEuY2VsbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdGFycyxlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvO2ErPTIpe3ZhciBzPWlbYV0sbD1pW2ErMV07cjxNYXRoLm1pbihzLGwpJiZlLnB1c2goW3IscyxsXSl9cmV0dXJuIGV9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDF9XSwxMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPVsiZnVuY3Rpb24gIix0LCIoYSxsLGgsIixuLmpvaW4oIiwiKSwiKXsiLGk/IiI6InZhciBpPSIscj8ibC0xIjoiaCsxIiwiO3doaWxlKGw8PWgpe3ZhciBtPShsK2gpPj4+MSx4PWFbbV0iXTtyZXR1cm4gaT9lLmluZGV4T2YoImMiKTwwP2EucHVzaCgiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpeyIpOmEucHVzaCgiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXsiKTphLnB1c2goIjtpZigiLGUsIil7aT1tOyIpLHI/YS5wdXNoKCJsPW0rMX1lbHNle2g9bS0xfSIpOmEucHVzaCgiaD1tLTF9ZWxzZXtsPW0rMX0iKSxhLnB1c2goIn0iKSxpP2EucHVzaCgicmV0dXJuIC0xfTsiKTphLnB1c2goInJldHVybiBpfTsiKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIGkodCxlLHIsaSl7cmV0dXJuIG5ldyBGdW5jdGlvbihbbigiQSIsIngiK3QrInkiLGUsWyJ5Il0saSksbigiUCIsImMoeCx5KSIrdCsiMCIsZSxbInkiLCJjIl0saSksImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaCIsciwiKGEseSxjLGwsaCl7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXZvaWQgMCk/MDpsfDAsKGg9PT12b2lkIDApP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dm9pZCAwKT8wOmN8MCwobD09PXZvaWQgMCk/YS5sZW5ndGgtMTpsfDAseSl9fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSwxMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9fSx7fV0sMTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImR1cCIpLGk9dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk9MDtpPG47KytpKXIrPXRbaV0qZVtpXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO3RbMF0ubGVuZ3RoO3ZhciByPW4oW3QubGVuZ3RoKzEsdC5sZW5ndGgrMV0sMSksbz1uKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBzPTA7czxlOysrcyl7Zm9yKHZhciBsPTA7bDw9czsrK2wpcltsXVtzXT1yW3NdW2xdPTIqYSh0W3NdLHRbbF0pO29bc109YSh0W3NdLHRbc10pfXZhciBjPWkocixvKSx1PTAsZj1jW2UrMV07Zm9yKHM9MDtzPGYubGVuZ3RoOysrcyl1Kz1mW3NdO3ZhciBoPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8ZTsrK3Mpe2Y9Y1tzXTt2YXIgcD0wO2ZvcihsPTA7bDxmLmxlbmd0aDsrK2wpcCs9ZltsXTtoW3NdPXAvdX1yZXR1cm4gaH1mdW5jdGlvbiBzKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1uKFtlXSksaT1vKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qaVthXTtyZXR1cm4gcn1zLmJhcnljZW5ldHJpYz1vLGUuZXhwb3J0cz1zfSx7ZHVwOjE2MSwicm9idXN0LWxpbmVhci1zb2x2ZSI6NDkzfV0sMTA0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHQpLHI9MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288ZS5sZW5ndGg7KytvKXIrPU1hdGgucG93KGFbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KHIvdC5sZW5ndGgpfTt2YXIgbj10KCJjaXJjdW1jZW50ZXIiKX0se2NpcmN1bWNlbnRlcjoxMDN9XSwxMDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHI/dDxlP2U6dD5yP3I6dDp0PHI/cjp0PmU/ZTp0fX0se31dLDEwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHIpe249ZTtmb3IodmFyIGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07aVthXT1bb1swXSxvWzFdLHJbYV1dfWU9aX12YXIgcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZCh0LFtdLHAodCkpO3JldHVybiBtKGUsbixyKSwhIW59KHQsZSwhIXIpO2Zvcig7eSh0LGUsISFyKTspcz0hMDtpZihyJiZzKXtuLmxlbmd0aD0wLHIubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07bi5wdXNoKFtvWzBdLG9bMV1dKSxyLnB1c2gob1syXSl9fXJldHVybiBzfTt2YXIgbj10KCJ1bmlvbi1maW5kIiksaT10KCJib3gtaW50ZXJzZWN0IiksYT10KCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiKSxvPXQoImJpZy1yYXQiKSxzPXQoImJpZy1yYXQvY21wIiksbD10KCJiaWctcmF0L3RvLWZsb2F0IiksYz10KCJyYXQtdmVjIiksdT10KCJuZXh0YWZ0ZXIiKSxmPXQoIi4vbGliL3JhdC1zZWctaW50ZXJzZWN0Iik7ZnVuY3Rpb24gaCh0KXt2YXIgZT1sKHQpO3JldHVyblt1KGUsLTEvMCksdShlLDEvMCldfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2Vbcl09W3UoblswXSwtMS8wKSx1KG5bMV0sLTEvMCksdShuWzBdLDEvMCksdShuWzFdLDEvMCldfXJldHVybiBlfWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPW5ldyBuKGEpLHM9W10sbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgYz1lW2xdLGY9aChjWzBdKSxwPWgoY1sxXSk7cy5wdXNoKFt1KGZbMF0sLTEvMCksdShwWzBdLC0xLzApLHUoZlsxXSwxLzApLHUocFsxXSwxLzApXSl9aShzLGZ1bmN0aW9uKHQsZSl7by5saW5rKHQsZSl9KTt2YXIgZD0hMCxnPW5ldyBBcnJheShhKTtmb3IobD0wO2w8YTsrK2wpeyhtPW8uZmluZChsKSkhPT1sJiYoZD0hMSx0W21dPVtNYXRoLm1pbih0W2xdWzBdLHRbbV1bMF0pLE1hdGgubWluKHRbbF1bMV0sdFttXVsxXSldKX1pZihkKXJldHVybiBudWxsO3ZhciB2PTA7Zm9yKGw9MDtsPGE7KytsKXt2YXIgbTsobT1vLmZpbmQobCkpPT09bD8oZ1tsXT12LHRbdisrXT10W2xdKTpnW2xdPS0xfXQubGVuZ3RoPXY7Zm9yKGw9MDtsPGE7KytsKWdbbF08MCYmKGdbbF09Z1tvLmZpbmQobCldKTtyZXR1cm4gZ31mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10WzBdLWVbMF18fHRbMV0tZVsxXTtyZXR1cm4gcnx8KHRbMl08ZVsyXT8tMTp0WzJdPmVbMl0/MTowKX1mdW5jdGlvbiBtKHQsZSxyKXtpZigwIT09dC5sZW5ndGgpe2lmKGUpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPWVbKG89dFtuXSlbMF1dLGE9ZVtvWzFdXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfWVsc2UgZm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIG87aT0obz10W25dKVswXSxhPW9bMV07b1swXT1NYXRoLm1pbihpLGEpLG9bMV09TWF0aC5tYXgoaSxhKX1yP3Quc29ydCh2KTp0LnNvcnQoZyk7dmFyIHM9MTtmb3Iobj0xO248dC5sZW5ndGg7KytuKXt2YXIgbD10W24tMV0sYz10W25dOyhjWzBdIT09bFswXXx8Y1sxXSE9PWxbMV18fHImJmNbMl0hPT1sWzJdKSYmKHRbcysrXT1jKX10Lmxlbmd0aD1zfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGk9ZVtuXSxhPXRbaVswXV0sbz10W2lbMV1dO3Jbbl09W3UoTWF0aC5taW4oYVswXSxvWzBdKSwtMS8wKSx1KE1hdGgubWluKGFbMV0sb1sxXSksLTEvMCksdShNYXRoLm1heChhWzBdLG9bMF0pLDEvMCksdShNYXRoLm1heChhWzFdLG9bMV0pLDEvMCldfXJldHVybiByfSh0LGUpLGg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdO3JldHVybiBpKHIsZnVuY3Rpb24ocixpKXt2YXIgbz1lW3JdLHM9ZVtpXTtpZihvWzBdIT09c1swXSYmb1swXSE9PXNbMV0mJm9bMV0hPT1zWzBdJiZvWzFdIT09c1sxXSl7dmFyIGw9dFtvWzBdXSxjPXRbb1sxXV0sdT10W3NbMF1dLGY9dFtzWzFdXTthKGwsYyx1LGYpJiZuLnB1c2goW3IsaV0pfX0pLG59KHQsZSxuKSxnPXAodCksdj1mdW5jdGlvbih0LGUscixuKXt2YXIgbz1bXTtyZXR1cm4gaShyLG4sZnVuY3Rpb24ocixuKXt2YXIgaT1lW3JdO2lmKGlbMF0hPT1uJiZpWzFdIT09bil7dmFyIHM9dFtuXSxsPXRbaVswXV0sYz10W2lbMV1dO2EobCxjLHMscykmJm8ucHVzaChbcixuXSl9fSksb30odCxlLG4sZykseT1kKHQsZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSx1LGg9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW28odFswXSksbyh0WzFdKV19KTtmb3IoYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgcD1yW2FdO3U9cFswXTt2YXIgZD1wWzFdLGc9ZVt1XSx2PWVbZF0sbT1mKGModFtnWzBdXSksYyh0W2dbMV1dKSxjKHRbdlswXV0pLGModFt2WzFdXSkpO2lmKG0pe3ZhciB5PXQubGVuZ3RoO3QucHVzaChbbChtWzBdKSxsKG1bMV0pXSksaC5wdXNoKG0pLG4ucHVzaChbdSx5XSxbZCx5XSl9fWZvcihuLnNvcnQoZnVuY3Rpb24odCxlKXtpZih0WzBdIT09ZVswXSlyZXR1cm4gdFswXS1lWzBdO3ZhciByPWhbdFsxXV0sbj1oW2VbMV1dO3JldHVybiBzKHJbMF0sblswXSl8fHMoclsxXSxuWzFdKX0pLGE9bi5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIHg9ZVt1PShTPW5bYV0pWzBdXSxiPXhbMF0sXz14WzFdLHc9dFtiXSxrPXRbX107aWYoKHdbMF0ta1swXXx8d1sxXS1rWzFdKTwwKXt2YXIgVD1iO2I9XyxfPVR9eFswXT1iO3ZhciBBLE09eFsxXT1TWzFdO2ZvcihpJiYoQT14WzJdKTthPjAmJm5bYS0xXVswXT09PXU7KXt2YXIgUyxFPShTPW5bLS1hXSlbMV07aT9lLnB1c2goW00sRSxBXSk6ZS5wdXNoKFtNLEVdKSxNPUV9aT9lLnB1c2goW00sXyxBXSk6ZS5wdXNoKFtNLF9dKX1yZXR1cm4gaH0odCxlLGgsdixyKSk7cmV0dXJuIG0oZSx5LHIpLCEheXx8KGgubGVuZ3RoPjB8fHYubGVuZ3RoPjApfX0seyIuL2xpYi9yYXQtc2VnLWludGVyc2VjdCI6MTA3LCJiaWctcmF0Ijo2OCwiYmlnLXJhdC9jbXAiOjY2LCJiaWctcmF0L3RvLWZsb2F0Ijo4MCwiYm94LWludGVyc2VjdCI6ODYsbmV4dGFmdGVyOjQ0MywicmF0LXZlYyI6NDc4LCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiOjQ5NywidW5pb24tZmluZCI6NTMwfV0sMTA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1zKGUsdCksZj1zKG4sciksaD11KGEsZik7aWYoMD09PW8oaCkpcmV0dXJuIG51bGw7dmFyIHA9cyh0LHIpLGQ9dShmLHApLGc9aShkLGgpLHY9YyhhLGcpO3JldHVybiBsKHQsdil9O3ZhciBuPXQoImJpZy1yYXQvbXVsIiksaT10KCJiaWctcmF0L2RpdiIpLGE9dCgiYmlnLXJhdC9zdWIiKSxvPXQoImJpZy1yYXQvc2lnbiIpLHM9dCgicmF0LXZlYy9zdWIiKSxsPXQoInJhdC12ZWMvYWRkIiksYz10KCJyYXQtdmVjL211bHMiKTtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGEobih0WzBdLGVbMV0pLG4odFsxXSxlWzBdKSl9fSx7ImJpZy1yYXQvZGl2Ijo2NywiYmlnLXJhdC9tdWwiOjc3LCJiaWctcmF0L3NpZ24iOjc4LCJiaWctcmF0L3N1YiI6NzksInJhdC12ZWMvYWRkIjo0NzcsInJhdC12ZWMvbXVscyI6NDc5LCJyYXQtdmVjL3N1YiI6NDgwfV0sMTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNsYW1wIik7ZnVuY3Rpb24gaSh0LGUpe251bGw9PWUmJihlPSEwKTt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz10WzNdO3JldHVybiBudWxsPT1vJiYobz1lPzE6MjU1KSxlJiYocio9MjU1LGkqPTI1NSxhKj0yNTUsbyo9MjU1KSwxNjc3NzIxNioocj0yNTUmbihyLDAsMjU1KSkrKChpPTI1NSZuKGksMCwyNTUpKTw8MTYpKygoYT0yNTUmbihhLDAsMjU1KSk8PDgpKyhvPTI1NSZuKG8sMCwyNTUpKX1lLmV4cG9ydHM9aSxlLmV4cG9ydHMudG89aSxlLmV4cG9ydHMuZnJvbT1mdW5jdGlvbih0LGUpe3ZhciByPSh0PSt0KT4+PjI0LG49KDE2NzExNjgwJnQpPj4+MTYsaT0oNjUyODAmdCk+Pj44LGE9MjU1JnQ7cmV0dXJuITE9PT1lP1tyLG4saSxhXTpbci8yNTUsbi8yNTUsaS8yNTUsYS8yNTVdfX0se2NsYW1wOjEwNX1dLDEwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSwxMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItcmdiYSIpLGk9dCgiY2xhbXAiKSxhPXQoImR0eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ImZsb2F0IiE9PWUmJmV8fChlPSJhcnJheSIpLCJ1aW50Ij09PWUmJihlPSJ1aW50OCIpLCJ1aW50X2NsYW1wZWQiPT09ZSYmKGU9InVpbnQ4X2NsYW1wZWQiKTt2YXIgcj1uZXcoYShlKSkoNCksbz0idWludDgiIT09ZSYmInVpbnQ4X2NsYW1wZWQiIT09ZTtyZXR1cm4gdC5sZW5ndGgmJiJzdHJpbmciIT10eXBlb2YgdHx8KCh0PW4odCkpWzBdLz0yNTUsdFsxXS89MjU1LHRbMl0vPTI1NSksZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fCEhKEFycmF5LmlzQXJyYXkodCkmJih0WzBdPjF8fDA9PT10WzBdKSYmKHRbMV0+MXx8MD09PXRbMV0pJiYodFsyXT4xfHwwPT09dFsyXSkmJighdFszXXx8dFszXT4xKSl9KHQpPyhyWzBdPXRbMF0sclsxXT10WzFdLHJbMl09dFsyXSxyWzNdPW51bGwhPXRbM10/dFszXToyNTUsbyYmKHJbMF0vPTI1NSxyWzFdLz0yNTUsclsyXS89MjU1LHJbM10vPTI1NSkscik6KG8/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjEpOihyWzBdPWkoTWF0aC5mbG9vcigyNTUqdFswXSksMCwyNTUpLHJbMV09aShNYXRoLmZsb29yKDI1NSp0WzFdKSwwLDI1NSksclsyXT1pKE1hdGguZmxvb3IoMjU1KnRbMl0pLDAsMjU1KSxyWzNdPW51bGw9PXRbM10/MjU1OmkoTWF0aC5mbG9vcigyNTUqdFszXSksMCwyNTUpKSxyKX19LHtjbGFtcDoxMDUsImNvbG9yLXJnYmEiOjExMixkdHlwZToxNjB9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5hbWUiKSxpPXQoImlzLXBsYWluLW9iaiIpLGE9dCgiZGVmaW5lZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxzLGw9W10sYz0xO2lmKCJzdHJpbmciPT10eXBlb2YgdClpZihuW3RdKWw9blt0XS5zbGljZSgpLHM9InJnYiI7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT09dCljPTAscz0icmdiIixsPVswLDAsMF07ZWxzZSBpZigvXiNbQS1GYS1mMC05XSskLy50ZXN0KHQpKXt2YXIgdT10LnNsaWNlKDEpLGY9dS5sZW5ndGgsaD1mPD00O2M9MSxoPyhsPVtwYXJzZUludCh1WzBdK3VbMF0sMTYpLHBhcnNlSW50KHVbMV0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzJdLDE2KV0sND09PWYmJihjPXBhcnNlSW50KHVbM10rdVszXSwxNikvMjU1KSk6KGw9W3BhcnNlSW50KHVbMF0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzNdLDE2KSxwYXJzZUludCh1WzRdK3VbNV0sMTYpXSw4PT09ZiYmKGM9cGFyc2VJbnQodVs2XSt1WzddLDE2KS8yNTUpKSxsWzBdfHwobFswXT0wKSxsWzFdfHwobFsxXT0wKSxsWzJdfHwobFsyXT0wKSxzPSJyZ2IifWVsc2UgaWYoZT0vXigoPzpyZ2J8aHNbbHZiXXxod2J8Y215az98eHlbenldfGdyYXl8bGFifGxjaHU/dj98W2x5XXV2fGxtcylhPylccypcKChbXlwpXSopXCkvLmV4ZWModCkpe3ZhciBwPWVbMV0sdT1wLnJlcGxhY2UoL2EkLywiIik7cz11O3ZhciBmPSJjbXlrIj09PXU/NDoiZ3JheSI9PT11PzE6MztsPWVbMl0udHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKGZ1bmN0aW9uKHQsZSl7aWYoLyUkLy50ZXN0KHQpKXJldHVybiBlPT09Zj9wYXJzZUZsb2F0KHQpLzEwMDoicmdiIj09PXU/MjU1KnBhcnNlRmxvYXQodCkvMTAwOnBhcnNlRmxvYXQodCk7aWYoImgiPT09dVtlXSl7aWYoL2RlZyQvLnRlc3QodCkpcmV0dXJuIHBhcnNlRmxvYXQodCk7aWYodm9pZCAwIT09b1t0XSlyZXR1cm4gb1t0XX1yZXR1cm4gcGFyc2VGbG9hdCh0KX0pLHA9PT11JiZsLnB1c2goMSksYz12b2lkIDA9PT1sW2ZdPzE6bFtmXSxsPWwuc2xpY2UoMCxmKX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcc3xcLykvLnRlc3QodCkmJihsPXQubWF0Y2goLyhbMC05XSspL2cpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pLHM9dC5tYXRjaCgvKFthLXpdKS9naSkuam9pbigiIikudG9Mb3dlckNhc2UoKSk7ZWxzZSBpZihpc05hTih0KSlpZihpKHQpKXt2YXIgZD1hKHQucix0LnJlZCx0LlIsbnVsbCk7bnVsbCE9PWQ/KHM9InJnYiIsbD1bZCxhKHQuZyx0LmdyZWVuLHQuRyksYSh0LmIsdC5ibHVlLHQuQildKToocz0iaHNsIixsPVthKHQuaCx0Lmh1ZSx0LkgpLGEodC5zLHQuc2F0dXJhdGlvbix0LlMpLGEodC5sLHQubGlnaHRuZXNzLHQuTCx0LmIsdC5icmlnaHRuZXNzKV0pLGM9YSh0LmEsdC5hbHBoYSx0Lm9wYWNpdHksMSksbnVsbCE9dC5vcGFjaXR5JiYoYy89MTAwKX1lbHNlKEFycmF5LmlzQXJyYXkodCl8fHIuQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpKSYmKGw9W3RbMF0sdFsxXSx0WzJdXSxzPSJyZ2IiLGM9ND09PXQubGVuZ3RoP3RbM106MSk7ZWxzZSBzPSJyZ2IiLGw9W3Q+Pj4xNiwoNjUyODAmdCk+Pj44LDI1NSZ0XTtyZXR1cm57c3BhY2U6cyx2YWx1ZXM6bCxhbHBoYTpjfX07dmFyIG89e3JlZDowLG9yYW5nZTo2MCx5ZWxsb3c6MTIwLGdyZWVuOjE4MCxibHVlOjI0MCxwdXJwbGU6MzAwfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJjb2xvci1uYW1lIjoxMDksZGVmaW5lZDoxNTUsImlzLXBsYWluLW9iaiI6NDE0fV0sMTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLXBhcnNlIiksaT10KCJjb2xvci1zcGFjZS9oc2wiKSxhPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9bih0KTtyZXR1cm4gci5zcGFjZT8oKGU9QXJyYXkoMykpWzBdPWEoci52YWx1ZXNbMF0sMCwyNTUpLGVbMV09YShyLnZhbHVlc1sxXSwwLDI1NSksZVsyXT1hKHIudmFsdWVzWzJdLDAsMjU1KSwiaCI9PT1yLnNwYWNlWzBdJiYoZT1pLnJnYihlKSksZS5wdXNoKGEoci5hbHBoYSwwLDEpKSxlKTpbXX19LHtjbGFtcDoxMDUsImNvbG9yLXBhcnNlIjoxMTEsImNvbG9yLXNwYWNlL2hzbCI6MTEzfV0sMTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcmdiIik7ZS5leHBvcnRzPXtuYW1lOiJoc2wiLG1pbjpbMCwwLDBdLG1heDpbMzYwLDEwMCwxMDBdLGNoYW5uZWw6WyJodWUiLCJzYXR1cmF0aW9uIiwibGlnaHRuZXNzIl0sYWxpYXM6WyJIU0wiXSxyZ2I6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRbMF0vMzYwLHM9dFsxXS8xMDAsbD10WzJdLzEwMDtpZigwPT09cylyZXR1cm5bYT0yNTUqbCxhLGFdO2U9MipsLShyPWw8LjU/bCooMStzKTpsK3MtbCpzKSxpPVswLDAsMF07Zm9yKHZhciBjPTA7YzwzO2MrKykobj1vKzEvMyotKGMtMSkpPDA/bisrOm4+MSYmbi0tLGE9NipuPDE/ZSs2KihyLWUpKm46MipuPDE/cjozKm48Mj9lKyhyLWUpKigyLzMtbikqNjplLGlbY109MjU1KmE7cmV0dXJuIGl9fSxuLmhzbD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dFswXS8yNTUsaT10WzFdLzI1NSxhPXRbMl0vMjU1LG89TWF0aC5taW4obixpLGEpLHM9TWF0aC5tYXgobixpLGEpLGw9cy1vO3JldHVybiBzPT09bz9lPTA6bj09PXM/ZT0oaS1hKS9sOmk9PT1zP2U9MisoYS1uKS9sOmE9PT1zJiYoZT00KyhuLWkpL2wpLChlPU1hdGgubWluKDYwKmUsMzYwKSk8MCYmKGUrPTM2MCkscj0obytzKS8yLFtlLDEwMCoocz09PW8/MDpyPD0uNT9sLyhzK28pOmwvKDItcy1vKSksMTAwKnJdfX0seyIuL3JnYiI6MTE0fV0sMTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmdiIixtaW46WzAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1XSxjaGFubmVsOlsicmVkIiwiZ3JlZW4iLCJibHVlIl0sYWxpYXM6WyJSR0IiXX19LHt9XSwxMTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzAsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMjU1XX1dLHNwcmluZzpbe2luZGV4OjAscmdiOlsyNTUsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSxzdW1tZXI6W3tpbmRleDowLHJnYjpbMCwxMjgsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDEwMl19XSxhdXR1bW46W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHdpbnRlcjpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlswLDI1NSwxMjhdfV0sYm9uZTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMzc2LHJnYjpbODQsODQsMTE2XX0se2luZGV4Oi43NTMscmdiOlsxNjksMjAwLDIwMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29wcGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi44MDQscmdiOlsyNTUsMTYwLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDE5OSwxMjddfV0sZ3JleXM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLHlpZ25idTpbe2luZGV4OjAscmdiOls4LDI5LDg4XX0se2luZGV4Oi4xMjUscmdiOlszNyw1MiwxNDhdfSx7aW5kZXg6LjI1LHJnYjpbMzQsOTQsMTY4XX0se2luZGV4Oi4zNzUscmdiOlsyOSwxNDUsMTkyXX0se2luZGV4Oi41LHJnYjpbNjUsMTgyLDE5Nl19LHtpbmRleDouNjI1LHJnYjpbMTI3LDIwNSwxODddfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxODBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIzNywyNDgsMjE3XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIxN119XSxncmVlbnM6W3tpbmRleDowLHJnYjpbMCw2OCwyN119LHtpbmRleDouMTI1LHJnYjpbMCwxMDksNDRdfSx7aW5kZXg6LjI1LHJnYjpbMzUsMTM5LDY5XX0se2luZGV4Oi4zNzUscmdiOls2NSwxNzEsOTNdfSx7aW5kZXg6LjUscmdiOlsxMTYsMTk2LDExOF19LHtpbmRleDouNjI1LHJnYjpbMTYxLDIxNywxNTVdfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxOTJdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIyOSwyNDUsMjI0XX0se2luZGV4OjEscmdiOlsyNDcsMjUyLDI0NV19XSx5aW9ycmQ6W3tpbmRleDowLHJnYjpbMTI4LDAsMzhdfSx7aW5kZXg6LjEyNSxyZ2I6WzE4OSwwLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzIyNywyNiwyOF19LHtpbmRleDouMzc1LHJnYjpbMjUyLDc4LDQyXX0se2luZGV4Oi41LHJnYjpbMjUzLDE0MSw2MF19LHtpbmRleDouNjI1LHJnYjpbMjU0LDE3OCw3Nl19LHtpbmRleDouNzUscmdiOlsyNTQsMjE3LDExOF19LHtpbmRleDouODc1LHJnYjpbMjU1LDIzNywxNjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjA0XX1dLGJsdWVyZWQ6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyZGJ1Olt7aW5kZXg6MCxyZ2I6WzUsMTAsMTcyXX0se2luZGV4Oi4zNSxyZ2I6WzEwNiwxMzcsMjQ3XX0se2luZGV4Oi41LHJnYjpbMTkwLDE5MCwxOTBdfSx7aW5kZXg6LjYscmdiOlsyMjAsMTcwLDEzMl19LHtpbmRleDouNyxyZ2I6WzIzMCwxNDUsOTBdfSx7aW5kZXg6MSxyZ2I6WzE3OCwxMCwyOF19XSxwaWNuaWM6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDouMSxyZ2I6WzUxLDE1MywyNTVdfSx7aW5kZXg6LjIscmdiOlsxMDIsMjA0LDI1NV19LHtpbmRleDouMyxyZ2I6WzE1MywyMDQsMjU1XX0se2luZGV4Oi40LHJnYjpbMjA0LDIwNCwyNTVdfSx7aW5kZXg6LjUscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDouNixyZ2I6WzI1NSwyMDQsMjU1XX0se2luZGV4Oi43LHJnYjpbMjU1LDE1MywyNTVdfSx7aW5kZXg6LjgscmdiOlsyNTUsMTAyLDIwNF19LHtpbmRleDouOSxyZ2I6WzI1NSwxMDIsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJhaW5ib3c6W3tpbmRleDowLHJnYjpbMTUwLDAsOTBdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMCwyMDBdfSx7aW5kZXg6LjI1LHJnYjpbMCwyNSwyNTVdfSx7aW5kZXg6LjM3NSxyZ2I6WzAsMTUyLDI1NV19LHtpbmRleDouNSxyZ2I6WzQ0LDI1NSwxNTBdfSx7aW5kZXg6LjYyNSxyZ2I6WzE1MSwyNTUsMF19LHtpbmRleDouNzUscmdiOlsyNTUsMjM0LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwxMTEsMF19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxwb3J0bGFuZDpbe2luZGV4OjAscmdiOlsxMiw1MSwxMzFdfSx7aW5kZXg6LjI1LHJnYjpbMTAsMTM2LDE4Nl19LHtpbmRleDouNSxyZ2I6WzI0MiwyMTEsNTZdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0Myw1Nl19LHtpbmRleDoxLHJnYjpbMjE3LDMwLDMwXX1dLGJsYWNrYm9keTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMixyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjEwLDBdfSx7aW5kZXg6LjcscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMTYwLDIwMCwyNTVdfV0sZWFydGg6W3tpbmRleDowLHJnYjpbMCwwLDEzMF19LHtpbmRleDouMSxyZ2I6WzAsMTgwLDE4MF19LHtpbmRleDouMixyZ2I6WzQwLDIxMCw0MF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMzAsNTBdfSx7aW5kZXg6LjYscmdiOlsxMjAsNzAsMjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGVsZWN0cmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4xNSxyZ2I6WzMwLDAsMTAwXX0se2luZGV4Oi40LHJnYjpbMTIwLDAsMTAwXX0se2luZGV4Oi42LHJnYjpbMTYwLDkwLDBdfSx7aW5kZXg6LjgscmdiOlsyMzAsMjAwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTAsMjIwXX1dLGFscGhhOlt7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1LDFdfV0sdmlyaWRpczpbe2luZGV4OjAscmdiOls2OCwxLDg0XX0se2luZGV4Oi4xMyxyZ2I6WzcxLDQ0LDEyMl19LHtpbmRleDouMjUscmdiOls1OSw4MSwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNDQsMTEzLDE0Ml19LHtpbmRleDouNSxyZ2I6WzMzLDE0NCwxNDFdfSx7aW5kZXg6LjYzLHJnYjpbMzksMTczLDEyOV19LHtpbmRleDouNzUscmdiOls5MiwyMDAsOTldfSx7aW5kZXg6Ljg4LHJnYjpbMTcwLDIyMCw1MF19LHtpbmRleDoxLHJnYjpbMjUzLDIzMSwzN119XSxpbmZlcm5vOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzMxLDEyLDcyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDE1LDEwOV19LHtpbmRleDouMzgscmdiOlsxMzYsMzQsMTA2XX0se2luZGV4Oi41LHJnYjpbMTg2LDU0LDg1XX0se2luZGV4Oi42MyxyZ2I6WzIyNyw4OSw1MV19LHtpbmRleDouNzUscmdiOlsyNDksMTQwLDEwXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwyMDEsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTUsMTY0XX1dLG1hZ21hOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzI4LDE2LDY4XX0se2luZGV4Oi4yNSxyZ2I6Wzc5LDE4LDEyM119LHtpbmRleDouMzgscmdiOlsxMjksMzcsMTI5XX0se2luZGV4Oi41LHJnYjpbMTgxLDU0LDEyMl19LHtpbmRleDouNjMscmdiOlsyMjksODAsMTAwXX0se2luZGV4Oi43NSxyZ2I6WzI1MSwxMzUsOTddfSx7aW5kZXg6Ljg4LHJnYjpbMjU0LDE5NCwxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTMsMTkxXX1dLHBsYXNtYTpbe2luZGV4OjAscmdiOlsxMyw4LDEzNV19LHtpbmRleDouMTMscmdiOls3NSwzLDE2MV19LHtpbmRleDouMjUscmdiOlsxMjUsMywxNjhdfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDM0LDE1MF19LHtpbmRleDouNSxyZ2I6WzIwMyw3MCwxMjFdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDEwNyw5M119LHtpbmRleDouNzUscmdiOlsyNDgsMTQ4LDY1XX0se2luZGV4Oi44OCxyZ2I6WzI1MywxOTUsNDBdfSx7aW5kZXg6MSxyZ2I6WzI0MCwyNDksMzNdfV0sd2FybTpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTcyLDAsMTg3XX0se2luZGV4Oi4yNSxyZ2I6WzIxOSwwLDE3MF19LHtpbmRleDouMzgscmdiOlsyNTUsMCwxMzBdfSx7aW5kZXg6LjUscmdiOlsyNTUsNjMsNzRdfSx7aW5kZXg6LjYzLHJnYjpbMjU1LDEyMywwXX0se2luZGV4Oi43NSxyZ2I6WzIzNCwxNzYsMF19LHtpbmRleDouODgscmdiOlsxOTAsMjI4LDBdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxMTYsMCwyMThdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNzQsMjM3XX0se2luZGV4Oi4zOCxyZ2I6WzY4LDE0NiwyMzFdfSx7aW5kZXg6LjUscmdiOlswLDIwNCwxOTddfSx7aW5kZXg6LjYzLHJnYjpbMCwyNDcsMTQ2XX0se2luZGV4Oi43NSxyZ2I6WzAsMjU1LDg4XX0se2luZGV4Oi44OCxyZ2I6WzQwLDI1NSw4XX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sInJhaW5ib3ctc29mdCI6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xLHJnYjpbMTk5LDAsMTgwXX0se2luZGV4Oi4yLHJnYjpbMjU1LDAsMTIxXX0se2luZGV4Oi4zLHJnYjpbMjU1LDEwOCwwXX0se2luZGV4Oi40LHJnYjpbMjIyLDE5NCwwXX0se2luZGV4Oi41LHJnYjpbMTUwLDI1NSwwXX0se2luZGV4Oi42LHJnYjpbMCwyNTUsNTVdfSx7aW5kZXg6LjcscmdiOlswLDI0NiwxNTBdfSx7aW5kZXg6LjgscmdiOls1MCwxNjcsMjIyXX0se2luZGV4Oi45LHJnYjpbMTAzLDUxLDIzNV19LHtpbmRleDoxLHJnYjpbMTI0LDAsMTg2XX1dLGJhdGh5bWV0cnk6W3tpbmRleDowLHJnYjpbNDAsMjYsNDRdfSx7aW5kZXg6LjEzLHJnYjpbNTksNDksOTBdfSx7aW5kZXg6LjI1LHJnYjpbNjQsNzYsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzYzLDExMCwxNTFdfSx7aW5kZXg6LjUscmdiOls3MiwxNDIsMTU4XX0se2luZGV4Oi42MyxyZ2I6Wzg1LDE3NCwxNjNdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwNiwxNjNdfSx7aW5kZXg6Ljg4LHJnYjpbMTg3LDIzMCwxNzJdfSx7aW5kZXg6MSxyZ2I6WzI1MywyNTQsMjA0XX1dLGNkb206W3tpbmRleDowLHJnYjpbNDcsMTUsNjJdfSx7aW5kZXg6LjEzLHJnYjpbODcsMjMsODZdfSx7aW5kZXg6LjI1LHJnYjpbMTMwLDI4LDk5XX0se2luZGV4Oi4zOCxyZ2I6WzE3MSw0MSw5Nl19LHtpbmRleDouNSxyZ2I6WzIwNiw2Nyw4Nl19LHtpbmRleDouNjMscmdiOlsyMzAsMTA2LDg0XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDksMTAzXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTMsMTM1XX0se2luZGV4OjEscmdiOlsyNTQsMjM3LDE3Nl19XSxjaGxvcm9waHlsbDpbe2luZGV4OjAscmdiOlsxOCwzNiwyMF19LHtpbmRleDouMTMscmdiOlsyNSw2Myw0MV19LHtpbmRleDouMjUscmdiOlsyNCw5MSw1OV19LHtpbmRleDouMzgscmdiOlsxMywxMTksNzJdfSx7aW5kZXg6LjUscmdiOlsxOCwxNDgsODBdfSx7aW5kZXg6LjYzLHJnYjpbODAsMTczLDg5XX0se2luZGV4Oi43NSxyZ2I6WzEzMiwxOTYsMTIyXX0se2luZGV4Oi44OCxyZ2I6WzE3NSwyMjEsMTYyXX0se2luZGV4OjEscmdiOlsyMTUsMjQ5LDIwOF19XSxkZW5zaXR5Olt7aW5kZXg6MCxyZ2I6WzU0LDE0LDM2XX0se2luZGV4Oi4xMyxyZ2I6Wzg5LDIzLDgwXX0se2luZGV4Oi4yNSxyZ2I6WzExMCw0NSwxMzJdfSx7aW5kZXg6LjM4LHJnYjpbMTIwLDc3LDE3OF19LHtpbmRleDouNSxyZ2I6WzEyMCwxMTMsMjEzXX0se2luZGV4Oi42MyxyZ2I6WzExNSwxNTEsMjI4XX0se2luZGV4Oi43NSxyZ2I6WzEzNCwxODUsMjI3XX0se2luZGV4Oi44OCxyZ2I6WzE3NywyMTQsMjI3XX0se2luZGV4OjEscmdiOlsyMzAsMjQxLDI0MV19XSwiZnJlZXN1cmZhY2UtYmx1ZSI6W3tpbmRleDowLHJnYjpbMzAsNCwxMTBdfSx7aW5kZXg6LjEzLHJnYjpbNDcsMTQsMTc2XX0se2luZGV4Oi4yNSxyZ2I6WzQxLDQ1LDIzNl19LHtpbmRleDouMzgscmdiOlsyNSw5OSwyMTJdfSx7aW5kZXg6LjUscmdiOls2OCwxMzEsMjAwXX0se2luZGV4Oi42MyxyZ2I6WzExNCwxNTYsMTk3XX0se2luZGV4Oi43NSxyZ2I6WzE1NywxODEsMjAzXX0se2luZGV4Oi44OCxyZ2I6WzIwMCwyMDgsMjE2XX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSwiZnJlZXN1cmZhY2UtcmVkIjpbe2luZGV4OjAscmdiOls2MCw5LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzEwMCwxNywyN119LHtpbmRleDouMjUscmdiOlsxNDIsMjAsMjldfSx7aW5kZXg6LjM4LHJnYjpbMTc3LDQzLDI3XX0se2luZGV4Oi41LHJnYjpbMTkyLDg3LDYzXX0se2luZGV4Oi42MyxyZ2I6WzIwNSwxMjUsMTA1XX0se2luZGV4Oi43NSxyZ2I6WzIxNiwxNjIsMTQ4XX0se2luZGV4Oi44OCxyZ2I6WzIyNywxOTksMTkzXX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSxveHlnZW46W3tpbmRleDowLHJnYjpbNjQsNSw1XX0se2luZGV4Oi4xMyxyZ2I6WzEwNiw2LDE1XX0se2luZGV4Oi4yNSxyZ2I6WzE0NCwyNiw3XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCw2NCwzXX0se2luZGV4Oi41LHJnYjpbMTg4LDEwMCw0XX0se2luZGV4Oi42MyxyZ2I6WzIwNiwxMzYsMTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjIwLDE3NCwyNV19LHtpbmRleDouODgscmdiOlsyMzEsMjE1LDQ0XX0se2luZGV4OjEscmdiOlsyNDgsMjU0LDEwNV19XSxwYXI6W3tpbmRleDowLHJnYjpbNTEsMjAsMjRdfSx7aW5kZXg6LjEzLHJnYjpbOTAsMzIsMzVdfSx7aW5kZXg6LjI1LHJnYjpbMTI5LDQ0LDM0XX0se2luZGV4Oi4zOCxyZ2I6WzE1OSw2OCwyNV19LHtpbmRleDouNSxyZ2I6WzE4Miw5OSwxOV19LHtpbmRleDouNjMscmdiOlsxOTksMTM0LDIyXX0se2luZGV4Oi43NSxyZ2I6WzIxMiwxNzEsMzVdfSx7aW5kZXg6Ljg4LHJnYjpbMjIxLDIxMCw1NF19LHtpbmRleDoxLHJnYjpbMjI1LDI1Myw3NV19XSxwaGFzZTpbe2luZGV4OjAscmdiOlsxNDUsMTA1LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzE4NCw3MSwzOF19LHtpbmRleDouMjUscmdiOlsxODYsNTgsMTE1XX0se2luZGV4Oi4zOCxyZ2I6WzE2MCw3MSwxODVdfSx7aW5kZXg6LjUscmdiOlsxMTAsOTcsMjE4XX0se2luZGV4Oi42MyxyZ2I6WzUwLDEyMywxNjRdfSx7aW5kZXg6Ljc1LHJnYjpbMzEsMTMxLDExMF19LHtpbmRleDouODgscmdiOls3NywxMjksMzRdfSx7aW5kZXg6MSxyZ2I6WzE0NSwxMDUsMThdfV0sc2FsaW5pdHk6W3tpbmRleDowLHJnYjpbNDIsMjQsMTA4XX0se2luZGV4Oi4xMyxyZ2I6WzMzLDUwLDE2Ml19LHtpbmRleDouMjUscmdiOlsxNSw5MCwxNDVdfSx7aW5kZXg6LjM4LHJnYjpbNDAsMTE4LDEzN119LHtpbmRleDouNSxyZ2I6WzU5LDE0NiwxMzVdfSx7aW5kZXg6LjYzLHJnYjpbNzksMTc1LDEyNl19LHtpbmRleDouNzUscmdiOlsxMjAsMjAzLDEwNF19LHtpbmRleDouODgscmdiOlsxOTMsMjIxLDEwMF19LHtpbmRleDoxLHJnYjpbMjUzLDIzOSwxNTRdfV0sdGVtcGVyYXR1cmU6W3tpbmRleDowLHJnYjpbNCwzNSw1MV19LHtpbmRleDouMTMscmdiOlsyMyw1MSwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbODUsNTksMTU3XX0se2luZGV4Oi4zOCxyZ2I6WzEyOSw3OSwxNDNdfSx7aW5kZXg6LjUscmdiOlsxNzUsOTUsMTMwXX0se2luZGV4Oi42MyxyZ2I6WzIyMiwxMTIsMTAxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDYsNjZdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5Niw2NV19LHtpbmRleDoxLHJnYjpbMjMyLDI1MCw5MV19XSx0dXJiaWRpdHk6W3tpbmRleDowLHJnYjpbMzQsMzEsMjddfSx7aW5kZXg6LjEzLHJnYjpbNjUsNTAsNDFdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNjksNTJdfSx7aW5kZXg6LjM4LHJnYjpbMTMxLDg5LDU3XX0se2luZGV4Oi41LHJnYjpbMTYxLDExMiw1OV19LHtpbmRleDouNjMscmdiOlsxODUsMTQwLDY2XX0se2luZGV4Oi43NSxyZ2I6WzIwMiwxNzQsODhdfSx7aW5kZXg6Ljg4LHJnYjpbMjE2LDIwOSwxMjZdfSx7aW5kZXg6MSxyZ2I6WzIzMywyNDYsMTcxXX1dLCJ2ZWxvY2l0eS1ibHVlIjpbe2luZGV4OjAscmdiOlsxNywzMiw2NF19LHtpbmRleDouMTMscmdiOlszNSw1MiwxMTZdfSx7aW5kZXg6LjI1LHJnYjpbMjksODEsMTU2XX0se2luZGV4Oi4zOCxyZ2I6WzMxLDExMywxNjJdfSx7aW5kZXg6LjUscmdiOls1MCwxNDQsMTY5XX0se2luZGV4Oi42MyxyZ2I6Wzg3LDE3MywxNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMTQ5LDE5NiwxODldfSx7aW5kZXg6Ljg4LHJnYjpbMjAzLDIyMSwyMTFdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyNTEsMjMwXX1dLCJ2ZWxvY2l0eS1ncmVlbiI6W3tpbmRleDowLHJnYjpbMjMsMzUsMTldfSx7aW5kZXg6LjEzLHJnYjpbMjQsNjQsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTEsOTUsNDVdfSx7aW5kZXg6LjM4LHJnYjpbMzksMTIzLDM1XX0se2luZGV4Oi41LHJnYjpbOTUsMTQ2LDEyXX0se2luZGV4Oi42MyxyZ2I6WzE1MiwxNjUsMThdfSx7aW5kZXg6Ljc1LHJnYjpbMjAxLDE4Niw2OV19LHtpbmRleDouODgscmdiOlsyMzMsMjE2LDEzN119LHtpbmRleDoxLHJnYjpbMjU1LDI1MywyMDVdfV0sY3ViZWhlbGl4Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4wNyxyZ2I6WzIyLDUsNTldfSx7aW5kZXg6LjEzLHJnYjpbNjAsNCwxMDVdfSx7aW5kZXg6LjIscmdiOlsxMDksMSwxMzVdfSx7aW5kZXg6LjI3LHJnYjpbMTYxLDAsMTQ3XX0se2luZGV4Oi4zMyxyZ2I6WzIxMCwyLDE0Ml19LHtpbmRleDouNCxyZ2I6WzI1MSwxMSwxMjNdfSx7aW5kZXg6LjQ3LHJnYjpbMjU1LDI5LDk3XX0se2luZGV4Oi41MyxyZ2I6WzI1NSw1NCw2OV19LHtpbmRleDouNixyZ2I6WzI1NSw4NSw0Nl19LHtpbmRleDouNjcscmdiOlsyNTUsMTIwLDM0XX0se2luZGV4Oi43MyxyZ2I6WzI1NSwxNTcsMzddfSx7aW5kZXg6LjgscmdiOlsyNDEsMTkxLDU3XX0se2luZGV4Oi44NyxyZ2I6WzIyNCwyMjAsOTNdfSx7aW5kZXg6LjkzLHJnYjpbMjE4LDI0MSwxNDJdfSx7aW5kZXg6MSxyZ2I6WzIyNywyNTMsMTk4XX1dfX0se31dLDExNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbG9yU2NhbGUiKSxpPXQoImxlcnAiKTtmdW5jdGlvbiBhKHQpe3JldHVyblt0WzBdLzI1NSx0WzFdLzI1NSx0WzJdLzI1NSx0WzNdXX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZSxyPSIjIixuPTA7bjwzOysrbilyKz0oIjAwIisoZT0oZT10W25dKS50b1N0cmluZygxNikpKS5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiByfWZ1bmN0aW9uIHModCl7cmV0dXJuInJnYmEoIit0LmpvaW4oIiwiKSsiKSJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHUsZixoLHAsZCxnO3R8fCh0PXt9KTtwPSh0Lm5zaGFkZXN8fDcyKS0xLGg9dC5mb3JtYXR8fCJoZXgiLChmPXQuY29sb3JtYXApfHwoZj0iamV0Iik7aWYoInN0cmluZyI9PXR5cGVvZiBmKXtpZihmPWYudG9Mb3dlckNhc2UoKSwhbltmXSl0aHJvdyBFcnJvcihmKyIgbm90IGEgc3VwcG9ydGVkIGNvbG9yc2NhbGUiKTt1PW5bZl19ZWxzZXtpZighQXJyYXkuaXNBcnJheShmKSl0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgY29sb3JtYXAgb3B0aW9uIixmKTt1PWYuc2xpY2UoKX1pZih1Lmxlbmd0aD5wKzEpdGhyb3cgbmV3IEVycm9yKGYrIiBtYXAgcmVxdWlyZXMgbnNoYWRlcyB0byBiZSBhdCBsZWFzdCBzaXplICIrdS5sZW5ndGgpO2Q9QXJyYXkuaXNBcnJheSh0LmFscGhhKT8yIT09dC5hbHBoYS5sZW5ndGg/WzEsMV06dC5hbHBoYS5zbGljZSgpOiJudW1iZXIiPT10eXBlb2YgdC5hbHBoYT9bdC5hbHBoYSx0LmFscGhhXTpbMSwxXTtlPXUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQuaW5kZXgqcCl9KSxkWzBdPU1hdGgubWluKE1hdGgubWF4KGRbMF0sMCksMSksZFsxXT1NYXRoLm1pbihNYXRoLm1heChkWzFdLDApLDEpO3ZhciB2PXUubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dVtlXS5pbmRleCxuPXVbZV0ucmdiLnNsaWNlKCk7cmV0dXJuIDQ9PT1uLmxlbmd0aCYmblszXT49MCYmblszXTw9MT9uOihuWzNdPWRbMF0rKGRbMV0tZFswXSkqcixuKX0pLG09W107Zm9yKGc9MDtnPGUubGVuZ3RoLTE7KytnKXtjPWVbZysxXS1lW2ddLHI9dltnXSxsPXZbZysxXTtmb3IodmFyIHk9MDt5PGM7eSsrKXt2YXIgeD15L2M7bS5wdXNoKFtNYXRoLnJvdW5kKGkoclswXSxsWzBdLHgpKSxNYXRoLnJvdW5kKGkoclsxXSxsWzFdLHgpKSxNYXRoLnJvdW5kKGkoclsyXSxsWzJdLHgpKSxpKHJbM10sbFszXSx4KV0pfX1tLnB1c2godVt1Lmxlbmd0aC0xXS5yZ2IuY29uY2F0KGRbMV0pKSwiaGV4Ij09PWg/bT1tLm1hcChvKToicmdiYVN0cmluZyI9PT1oP209bS5tYXAocyk6ImZsb2F0Ij09PWgmJihtPW0ubWFwKGEpKTtyZXR1cm4gbX19LHsiLi9jb2xvclNjYWxlIjoxMTUsbGVycDo0MTd9XSwxMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4oZSxyLGEpO2lmKDA9PT1vKXt2YXIgcz1pKG4odCxlLHIpKSxjPWkobih0LGUsYSkpO2lmKHM9PT1jKXtpZigwPT09cyl7dmFyIHU9bCh0LGUsciksZj1sKHQsZSxhKTtyZXR1cm4gdT09PWY/MDp1PzE6LTF9cmV0dXJuIDB9cmV0dXJuIDA9PT1jP3M+MD8tMTpsKHQsZSxhKT8tMToxOjA9PT1zP2M+MD8xOmwodCxlLHIpPzE6LTE6aShjLXMpfXZhciBoPW4odCxlLHIpO2lmKGg+MClyZXR1cm4gbz4wJiZuKHQsZSxhKT4wPzE6LTE7aWYoaDwwKXJldHVybiBvPjB8fG4odCxlLGEpPjA/MTotMTt2YXIgcD1uKHQsZSxhKTtyZXR1cm4gcD4wPzE6bCh0LGUscik/MTotMX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaWdudW0iKSxhPXQoInR3by1zdW0iKSxvPXQoInJvYnVzdC1wcm9kdWN0Iikscz10KCJyb2J1c3Qtc3VtIik7ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49YSh0WzBdLC1lWzBdKSxpPWEodFsxXSwtZVsxXSksbD1hKHJbMF0sLWVbMF0pLGM9YShyWzFdLC1lWzFdKSx1PXMobyhuLGwpLG8oaSxjKSk7cmV0dXJuIHVbdS5sZW5ndGgtMV0+PTB9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NDk0LCJyb2J1c3QtcHJvZHVjdCI6NDk1LCJyb2J1c3Qtc3VtIjo0OTksc2lnbnVtOjUwMCwidHdvLXN1bSI6NTI4fV0sMTE4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgsYT10Lmxlbmd0aC1lLmxlbmd0aDtpZihhKXJldHVybiBhO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybiB0WzBdK3RbMV0tZVswXS1lWzFdfHxuKHRbMF0sdFsxXSktbihlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgbz10WzBdK3RbMV0scz1lWzBdK2VbMV07aWYoYT1vK3RbMl0tKHMrZVsyXSkpcmV0dXJuIGE7dmFyIGw9bih0WzBdLHRbMV0pLGM9bihlWzBdLGVbMV0pO3JldHVybiBuKGwsdFsyXSktbihjLGVbMl0pfHxuKGwrdFsyXSxvKS1uKGMrZVsyXSxzKTtjYXNlIDQ6dmFyIHU9dFswXSxmPXRbMV0saD10WzJdLHA9dFszXSxkPWVbMF0sZz1lWzFdLHY9ZVsyXSxtPWVbM107cmV0dXJuIHUrZitoK3AtKGQrZyt2K20pfHxuKHUsZixoLHApLW4oZCxnLHYsbSxkKXx8bih1K2YsdStoLHUrcCxmK2gsZitwLGgrcCktbihkK2csZCt2LGQrbSxnK3YsZyttLHYrbSl8fG4odStmK2gsdStmK3AsdStoK3AsZitoK3ApLW4oZCtnK3YsZCtnK20sZCt2K20sZyt2K20pO2RlZmF1bHQ6Zm9yKHZhciB5PXQuc2xpY2UoKS5zb3J0KGkpLHg9ZS5zbGljZSgpLnNvcnQoaSksYj0wO2I8cjsrK2IpaWYoYT15W2JdLXhbYl0pcmV0dXJuIGE7cmV0dXJuIDB9fTt2YXIgbj1NYXRoLm1pbjtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZX19LHt9XSwxMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksaT10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKXx8aSh0KS1pKGUpfX0seyJjZWxsLW9yaWVudGF0aW9uIjoxMDIsImNvbXBhcmUtY2VsbCI6MTE4fV0sMTIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NoMWQiKSxpPXQoIi4vbGliL2NoMmQiKSxhPXQoIi4vbGliL2NobmQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuW1swXV07dmFyIHI9dFswXS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107aWYoMT09PXIpcmV0dXJuIG4odCk7aWYoMj09PXIpcmV0dXJuIGkodCk7cmV0dXJuIGEodCxyKX19LHsiLi9saWIvY2gxZCI6MTIxLCIuL2xpYi9jaDJkIjoxMjIsIi4vbGliL2NobmQiOjEyM31dLDEyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49MTtuPHQubGVuZ3RoOysrbil0W25dWzBdPHRbZV1bMF0mJihlPW4pLHRbbl1bMF0+dFtyXVswXSYmKHI9bik7cmV0dXJuIGU8cj9bW2VdLFtyXV06ZT5yP1tbcl0sW2VdXTpbW2VdXX19LHt9XSwxMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1lLmxlbmd0aDtpZihyPD0yKXJldHVybltdO2Zvcih2YXIgaT1uZXcgQXJyYXkociksYT1lW3ItMV0sbz0wO288cjsrK28pe3ZhciBzPWVbb107aVtvXT1bYSxzXSxhPXN9cmV0dXJuIGl9O3ZhciBuPXQoIm1vbm90b25lLWNvbnZleC1odWxsLTJkIil9LHsibW9ub3RvbmUtY29udmV4LWh1bGwtMmQiOjQyNn1dLDEyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIG4odCwhMCl9Y2F0Y2gocyl7dmFyIHI9aSh0KTtpZihyLmxlbmd0aDw9ZSlyZXR1cm5bXTt2YXIgYT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxlLmxlbmd0aDsrK2kpbltpXT10W2VbaV1dO2Zvcih2YXIgYT1lLmxlbmd0aCxpPTA7aTxyOysraSllLmluZGV4T2YoaSk8MCYmKG5bYSsrXT10W2ldKTtyZXR1cm4gbn0odCxyKSxvPW4oYSwhMCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288YS5sZW5ndGg7KytvKXt2YXIgcz1hW29dO2lmKHM8bilhW29dPWVbc107ZWxzZXtzLT1uO2Zvcih2YXIgbD0wO2w8bjsrK2wpcz49ZVtsXSYmKHMrPTEpO2Fbb109c319cmV0dXJuIHR9KG8scil9fTt2YXIgbj10KCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCIpLGk9dCgiYWZmaW5lLWh1bGwiKX0seyJhZmZpbmUtaHVsbCI6NTIsImluY3JlbWVudGFsLWNvbnZleC1odWxsIjo0MDV9XSwxMjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0FGRzoiYWZnaGFuIixBTEE6IlxcYlxcd2xhbmQiLEFMQjoiYWxiYW5pYSIsRFpBOiJhbGdlcmlhIixBU006Il4oPz0uKmFtZXJpYykuKnNhbW9hIixBTkQ6ImFuZG9ycmEiLEFHTzoiYW5nb2xhIixBSUE6ImFuZ3VpbGw/YSIsQVRBOiJhbnRhcmN0aWNhIixBVEc6ImFudGlndWEiLEFSRzoiYXJnZW50aW4iLEFSTToiYXJtZW5pYSIsQUJXOiJeKD8hLipib25haXJlKS4qXFxiYXJ1YmEiLEFVUzoiYXVzdHJhbGlhIixBVVQ6Il4oPyEuKmh1bmdhcnkpLiphdXN0cmlhfFxcYmF1c3RyaS4qXFxiZW1wIixBWkU6ImF6ZXJiYWlqYW4iLEJIUzoiYmFoYW1hcyIsQkhSOiJiYWhyYWluIixCR0Q6ImJhbmdsYWRlc2h8Xig/PS4qZWFzdCkuKnBha2k/c3RhbiIsQlJCOiJiYXJiYWRvcyIsQkxSOiJiZWxhcnVzfGJ5ZWxvIixCRUw6Il4oPyEuKmx1eGVtKS4qYmVsZ2l1bSIsQkxaOiJiZWxpemV8Xig/PS4qYnJpdGlzaCkuKmhvbmR1cmFzIixCRU46ImJlbmlufGRhaG9tZSIsQk1VOiJiZXJtdWRhIixCVE46ImJodXRhbiIsQk9MOiJib2xpdmlhIixCRVM6Il4oPz0uKmJvbmFpcmUpLipldXN0YXRpdXN8Xig/PS4qY2FyaWIpLipuZXRoZXJsYW5kc3xcXGJiZXMuP2lzbGFuZHMiLEJJSDoiaGVyemVnb3ZpbmF8Ym9zbmlhIixCV0E6ImJvdHN3YW5hfGJlY2h1YW5hIixCVlQ6ImJvdXZldCIsQlJBOiJicmF6aWwiLElPVDoiYnJpdGlzaC4/aW5kaWFuLj9vY2VhbiIsQlJOOiJicnVuZWkiLEJHUjoiYnVsZ2FyaWEiLEJGQToiYnVya2luYXxcXGJmYXNvfHVwcGVyLj92b2x0YSIsQkRJOiJidXJ1bmRpIixDUFY6InZlcmRlIixLSE06ImNhbWJvZGlhfGthbXB1Y2hlYXxraG1lciIsQ01SOiJjYW1lcm9vbiIsQ0FOOiJjYW5hZGEiLENZTToiY2F5bWFuIixDQUY6IlxcYmNlbnRyYWwuYWZyaWNhbi5yZXB1YmxpYyIsVENEOiJcXGJjaGFkIixDSEw6IlxcYmNoaWxlIixDSE46Il4oPyEuKlxcYm1hYykoPyEuKlxcYmhvbmcpKD8hLipcXGJ0YWkpKD8hLipcXGJyZXApLipjaGluYXxeKD89LipwZW8pKD89LipyZXApLipjaGluYSIsQ1hSOiJjaHJpc3RtYXMiLENDSzoiXFxiY29jb3N8a2VlbGluZyIsQ09MOiJjb2xvbWJpYSIsQ09NOiJjb21vcm8iLENPRzoiXig/IS4qXFxiZGVtKSg/IS4qXFxiZFtcXC5dP3IpKD8hLipraW5zaGFzYSkoPyEuKnphaXJlKSg/IS4qYmVsZykoPyEuKmwub3BvbGR2aWxsZSkoPyEuKmZyZWUpLipcXGJjb25nbyIsQ09LOiJcXGJjb29rIixDUkk6ImNvc3RhLj9yaWNhIixDSVY6Iml2b2lyZXxpdm9yeSIsSFJWOiJjcm9hdGlhIixDVUI6IlxcYmN1YmEiLENVVzoiXig/IS4qYm9uYWlyZSkuKlxcYmN1cmEoY3xceGU3KWFvIixDWVA6ImN5cHJ1cyIsQ1NLOiJjemVjaG9zbG92YWtpYSIsQ1pFOiJeKD89LipyZXApLipjemVjaHxjemVjaGlhfGJvaGVtaWEiLENPRDoiXFxiZGVtLipjb25nb3xjb25nby4qXFxiZGVtfGNvbmdvLipcXGJkW1xcLl0/cnxcXGJkW1xcLl0/ci4qY29uZ298YmVsZ2lhbi4/Y29uZ298Y29uZ28uP2ZyZWUuP3N0YXRlfGtpbnNoYXNhfHphaXJlfGwub3BvbGR2aWxsZXxkcmN8ZHJvY3xyZGMiLEROSzoiZGVubWFyayIsREpJOiJkamlib3V0aSIsRE1BOiJkb21pbmljYSg/IW4pIixET006ImRvbWluaWNhbi5yZXAiLEVDVToiZWN1YWRvciIsRUdZOiJlZ3lwdCIsU0xWOiJlbC4/c2FsdmFkb3IiLEdOUToiZ3VpbmUuKmVxfGVxLipndWluZXxeKD89LipzcGFuKS4qZ3VpbmVhIixFUkk6ImVyaXRyZWEiLEVTVDoiZXN0b25pYSIsRVRIOiJldGhpb3BpYXxhYnlzc2luaWEiLEZMSzoiZmFsa2xhbmR8bWFsdmluYXMiLEZSTzoiZmFyb2V8ZmFlcm9lIixGSkk6ImZpamkiLEZJTjoiZmlubGFuZCIsRlJBOiJeKD8hLipcXGJkZXApKD8hLiptYXJ0aW5pcXVlKS4qZnJhbmNlfGZyZW5jaC4/cmVwdWJsaWN8XFxiZ2F1bCIsR1VGOiJeKD89LipmcmVuY2gpLipndWlhbmEiLFBZRjoiZnJlbmNoLj9wb2x5bmVzaWF8dGFoaXRpIixBVEY6ImZyZW5jaC4/c291dGhlcm4iLEdBQjoiZ2Fib24iLEdNQjoiZ2FtYmlhIixHRU86Il4oPyEuKnNvdXRoKS4qZ2VvcmdpYSIsRERSOiJnZXJtYW4uP2RlbW9jcmF0aWMuP3JlcHVibGljfGRlbW9jcmF0aWMuP3JlcHVibGljLipnZXJtYW55fGVhc3QuZ2VybWFueSIsREVVOiJeKD8hLiplYXN0KS4qZ2VybWFueXxeKD89LipcXGJmZWQuKlxcYnJlcCkuKmdlcm1hbiIsR0hBOiJnaGFuYXxnb2xkLj9jb2FzdCIsR0lCOiJnaWJyYWx0YXIiLEdSQzoiZ3JlZWNlfGhlbGxlbmljfGhlbGxhcyIsR1JMOiJncmVlbmxhbmQiLEdSRDoiZ3JlbmFkYSIsR0xQOiJndWFkZWxvdXBlIixHVU06IlxcYmd1YW0iLEdUTToiZ3VhdGVtYWxhIixHR1k6Imd1ZXJuc2V5IixHSU46Il4oPyEuKmVxKSg/IS4qc3BhbikoPyEuKmJpc3NhdSkoPyEuKnBvcnR1KSg/IS4qbmV3KS4qZ3VpbmVhIixHTkI6ImJpc3NhdXxeKD89Lipwb3J0dSkuKmd1aW5lYSIsR1VZOiJndXlhbmF8YnJpdGlzaC4/Z3VpYW5hIixIVEk6ImhhaXRpIixITUQ6ImhlYXJkLiptY2RvbmFsZCIsVkFUOiJob2x5Lj9zZWV8dmF0aWNhbnxwYXBhbC4/c3QiLEhORDoiXig/IS4qYnJpdCkuKmhvbmR1cmFzIixIS0c6ImhvbmcuP2tvbmciLEhVTjoiXig/IS4qYXVzdHIpLipodW5nYXJ5IixJU0w6ImljZWxhbmQiLElORDoiaW5kaWEoPyEuKm9jZWEpIixJRE46ImluZG9uZXNpYSIsSVJOOiJcXGJpcmFufHBlcnNpYSIsSVJROiJcXGJpcmFxfG1lc29wb3RhbWlhIixJUkw6IiheaXJlbGFuZCl8KF5yZXB1YmxpYy4qaXJlbGFuZCkiLElNTjoiXig/PS4qaXNsZSkuKlxcYm1hbiIsSVNSOiJpc3JhZWwiLElUQToiaXRhbHkiLEpBTToiamFtYWljYSIsSlBOOiJqYXBhbiIsSkVZOiJqZXJzZXkiLEpPUjoiam9yZGFuIixLQVo6ImthemFrIixLRU46ImtlbnlhfGJyaXRpc2guP2Vhc3QuP2FmcmljYXxlYXN0Lj9hZnJpY2EuP3Byb3QiLEtJUjoia2lyaWJhdGkiLFBSSzoiXig/PS4qZGVtb2NyYXR8cGVvcGxlfG5vcnRofGQuKnAuKi5yKS4qXFxia29yZWF8ZHBya3xrb3JlYS4qKGQuKnAuKnIpIixLV1Q6Imt1d2FpdCIsS0daOiJreXJneXp8a2lyZ2hpeiIsTEFPOiJcXGJsYW9zP1xcYiIsTFZBOiJsYXR2aWEiLExCTjoibGViYW5vbiIsTFNPOiJsZXNvdGhvfGJhc3V0byIsTEJSOiJsaWJlcmlhIixMQlk6ImxpYnlhIixMSUU6ImxpZWNodGVuc3RlaW4iLExUVToibGl0aHVhbmlhIixMVVg6Il4oPyEuKmJlbGcpLipsdXhlbSIsTUFDOiJtYWNhKG98dSkiLE1ERzoibWFkYWdhc2NhcnxtYWxhZ2FzeSIsTVdJOiJtYWxhd2l8bnlhc2EiLE1ZUzoibWFsYXlzaWEiLE1EVjoibWFsZGl2ZSIsTUxJOiJcXGJtYWxpXFxiIixNTFQ6IlxcYm1hbHRhIixNSEw6Im1hcnNoYWxsIixNVFE6Im1hcnRpbmlxdWUiLE1SVDoibWF1cml0YW5pYSIsTVVTOiJtYXVyaXRpdXMiLE1ZVDoiXFxibWF5b3R0ZSIsTUVYOiJcXGJtZXhpYyIsRlNNOiJmZWQuKm1pY3JvbmVzaWF8bWljcm9uZXNpYS4qZmVkIixNQ086Im1vbmFjbyIsTU5HOiJtb25nb2xpYSIsTU5FOiJeKD8hLipzZXJiaWEpLiptb250ZW5lZ3JvIixNU1I6Im1vbnRzZXJyYXQiLE1BUjoibW9yb2Njb3xcXGJtYXJvYyIsTU9aOiJtb3phbWJpcXVlIixNTVI6Im15YW5tYXJ8YnVybWEiLE5BTToibmFtaWJpYSIsTlJVOiJuYXVydSIsTlBMOiJuZXBhbCIsTkxEOiJeKD8hLipcXGJhbnQpKD8hLipcXGJjYXJpYikuKm5ldGhlcmxhbmRzIixBTlQ6Il4oPz0uKlxcYmFudCkuKihuZXRoZXJ8ZHV0Y2gpIixOQ0w6Im5ldy4/Y2FsZWRvbmlhIixOWkw6Im5ldy4/emVhbGFuZCIsTklDOiJuaWNhcmFndWEiLE5FUjoiXFxibmlnZXIoPyFpYSkiLE5HQToibmlnZXJpYSIsTklVOiJuaXVlIixORks6Im5vcmZvbGsiLE1OUDoibWFyaWFuYSIsTk9SOiJub3J3YXkiLE9NTjoiXFxib21hbnx0cnVjaWFsIixQQUs6Il4oPyEuKmVhc3QpLipwYWtpP3N0YW4iLFBMVzoicGFsYXUiLFBTRToicGFsZXN0aW58XFxiZ2F6YXx3ZXN0Lj9iYW5rIixQQU46InBhbmFtYSIsUE5HOiJwYXB1YXxuZXcuP2d1aW5lYSIsUFJZOiJwYXJhZ3VheSIsUEVSOiJwZXJ1IixQSEw6InBoaWxpcHBpbmVzIixQQ046InBpdGNhaXJuIixQT0w6InBvbGFuZCIsUFJUOiJwb3J0dWdhbCIsUFJJOiJwdWVydG8uP3JpY28iLFFBVDoicWF0YXIiLEtPUjoiXig/IS4qZC4qcC4qcikoPyEuKmRlbW9jcmF0KSg/IS4qcGVvcGxlKSg/IS4qbm9ydGgpLipcXGJrb3JlYSg/IS4qZC4qcC4qcikiLE1EQToibW9sZG92fGIoYXxlKXNzYXJhYmlhIixSRVU6InIoZXxceGU5KXVuaW9uIixST1U6InIob3x1fG91KW1hbmlhIixSVVM6IlxcYnJ1c3NpYXxzb3ZpZXQuP3VuaW9ufHVcXC4/c1xcLj9zXFwuP3J8c29jaWFsaXN0Lj9yZXB1YmxpY3MiLFJXQToicndhbmRhIixCTE06ImJhcnRoKGV8XHhlOSlsZW15IixTSE46ImhlbGVuYSIsS05BOiJraXR0c3xcXGJuZXZpcyIsTENBOiJcXGJsdWNpYSIsTUFGOiJeKD89Lipjb2xsZWN0aXZpdHkpLiptYXJ0aW58Xig/PS4qZnJhbmNlKS4qbWFydGluKD8haXF1ZSl8Xig/PS4qZnJlbmNoKS4qbWFydGluKD8haXF1ZSkiLFNQTToibWlxdWVsb24iLFZDVDoidmluY2VudCIsV1NNOiJeKD8hLiphbWVyKS4qc2Ftb2EiLFNNUjoic2FuLj9tYXJpbm8iLFNUUDoiXFxicyhhfFx4ZTMpby4/dG9tKGV8XHhlOSkiLFNBVToiXFxic2FcXHcqLj9hcmFiaWEiLFNFTjoic2VuZWdhbCIsU1JCOiJeKD8hLiptb250ZSkuKnNlcmJpYSIsU1lDOiJzZXljaGVsbCIsU0xFOiJzaWVycmEiLFNHUDoic2luZ2Fwb3JlIixTWE06Il4oPyEuKm1hcnRpbikoPyEuKnNhYmEpLiptYWFydGVuIixTVks6Il4oPyEuKmN6ZSkuKnNsb3ZhayIsU1ZOOiJzbG92ZW5pYSIsU0xCOiJzb2xvbW9uIixTT006InNvbWFsaSIsWkFGOiJzb3V0aC5hZnJpY2F8c1xcXFwuLj9hZnJpY2EiLFNHUzoic291dGguP2dlb3JnaWF8c2FuZHdpY2giLFNTRDoiXFxic1xcdyouP3N1ZGFuIixFU1A6InNwYWluIixMS0E6InNyaS4/bGFua2F8Y2V5bG9uIixTRE46Il4oPyEuKlxcYnMoPyF1KSkuKnN1ZGFuIixTVVI6InN1cmluYW18ZHV0Y2guP2d1aWFuYSIsU0pNOiJzdmFsYmFyZCIsU1daOiJzd2F6aWxhbmQiLFNXRToic3dlZGVuIixDSEU6InN3aXR6fHN3aXNzIixTWVI6InN5cmlhIixUV046InRhaXdhbnx0YWlwZWl8Zm9ybW9zYXxeKD8hLipwZW8pKD89LipyZXApLipjaGluYSIsVEpLOiJ0YWppayIsVEhBOiJ0aGFpbGFuZHxcXGJzaWFtIixNS0Q6Im1hY2Vkb25pYXxmeXJvbSIsVExTOiJeKD89LipsZXN0ZSkuKnRpbW9yfF4oPz0uKmVhc3QpLip0aW1vciIsVEdPOiJ0b2dvIixUS0w6InRva2VsYXUiLFRPTjoidG9uZ2EiLFRUTzoidHJpbmlkYWR8dG9iYWdvIixUVU46InR1bmlzaWEiLFRVUjoidHVya2V5IixUS006InR1cmttZW4iLFRDQToidHVya3MiLFRVVjoidHV2YWx1IixVR0E6InVnYW5kYSIsVUtSOiJ1a3JhaW4iLEFSRToiZW1pcmF0ZXN8XnVcXC4/YVxcLj9lXFwuPyR8dW5pdGVkLj9hcmFiLj9lbSIsR0JSOiJ1bml0ZWQuP2tpbmdkb218YnJpdGFpbnxedVxcLj9rXFwuPyQiLFRaQToidGFuemFuaWEiLFVTQToidW5pdGVkLj9zdGF0ZXNcXGIoPyEuKmlzbGFuZHMpfFxcYnVcXC4/c1xcLj9hXFwuP1xcYnxeXFxzKnVcXC4/c1xcLj9cXGIoPyEuKmlzbGFuZHMpIixVTUk6Im1pbm9yLj9vdXRseWluZy4/aXMiLFVSWToidXJ1Z3VheSIsVVpCOiJ1emJlayIsVlVUOiJ2YW51YXR1fG5ldy4/aGVicmlkZXMiLFZFTjoidmVuZXp1ZWxhIixWTk06Il4oPyEuKnJlcHVibGljKS4qdmlldC4/bmFtfF4oPz0uKnNvY2lhbGlzdCkuKnZpZXQuP25hbSIsVkdCOiJeKD89LipcXGJ1XFwuP1xccz9rKS4qdmlyZ2lufF4oPz0uKmJyaXQpLip2aXJnaW58Xig/PS4qa2luZ2RvbSkuKnZpcmdpbiIsVklSOiJeKD89LipcXGJ1XFwuP1xccz9zKS4qdmlyZ2lufF4oPz0uKnN0YXRlcykuKnZpcmdpbiIsV0xGOiJmdXR1bmF8d2FsbGlzIixFU0g6Indlc3Rlcm4uc2FoYXJhIixZRU06Il4oPyEuKmFyYWIpKD8hLipub3J0aCkoPyEuKnNhbmEpKD8hLipwZW8pKD8hLipkZW0pKD8hLipzb3V0aCkoPyEuKmFkZW4pKD8hLipcXGJwXFwuP2RcXC4/cikuKnllbWVuIixZTUQ6Il4oPz0uKnBlbykuKnllbWVufF4oPyEuKnJlcCkoPz0uKmRlbSkuKnllbWVufF4oPz0uKnNvdXRoKS4qeWVtZW58Xig/PS4qYWRlbikuKnllbWVufF4oPz0uKlxcYnBcXC4/ZFxcLj9yKS4qeWVtZW4iLFlVRzoieXVnb3NsYXZpYSIsWk1COiJ6YW1iaWF8bm9ydGhlcm4uP3Job2Rlc2lhIixFQVo6InphbnppYmFyIixaV0U6InppbWJhYndlfF4oPyEuKm5vcnRoZXJuKS4qcmhvZGVzaWEifX0se31dLDEyNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInh4LXNtYWxsIiwieC1zbWFsbCIsInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJ4LWxhcmdlIiwieHgtbGFyZ2UiLCJsYXJnZXIiLCJzbWFsbGVyIl19LHt9XSwxMjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJjb25kZW5zZWQiLCJzZW1pLWNvbmRlbnNlZCIsImV4dHJhLWNvbmRlbnNlZCIsInVsdHJhLWNvbmRlbnNlZCIsImV4cGFuZGVkIiwic2VtaS1leHBhbmRlZCIsImV4dHJhLWV4cGFuZGVkIiwidWx0cmEtZXhwYW5kZWQiXX0se31dLDEyNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIm5vcm1hbCIsIml0YWxpYyIsIm9ibGlxdWUiXX0se31dLDEyODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIiwiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIl19LHt9XSwxMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwYXJzZTp0KCIuL3BhcnNlIiksc3RyaW5naWZ5OnQoIi4vc3RyaW5naWZ5Iil9fSx7Ii4vcGFyc2UiOjEzMSwiLi9zdHJpbmdpZnkiOjEzMn1dLDEzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udC1zaXplLWtleXdvcmRzIik7ZS5leHBvcnRzPXtpc1NpemU6ZnVuY3Rpb24odCl7cmV0dXJuL15bXGRcLl0vLnRlc3QodCl8fC0xIT09dC5pbmRleE9mKCIvIil8fC0xIT09bi5pbmRleE9mKHQpfX19LHsiY3NzLWZvbnQtc2l6ZS1rZXl3b3JkcyI6MTI1fV0sMTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInVucXVvdGUiKSxpPXQoImNzcy1nbG9iYWwta2V5d29yZHMiKSxhPXQoImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyIpLG89dCgiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIikscz10KCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyIpLGw9dCgiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyIpLGM9dCgic3RyaW5nLXNwbGl0LWJ5IiksdT10KCIuL2xpYi91dGlsIikuaXNTaXplO2UuZXhwb3J0cz1oO3ZhciBmPWguY2FjaGU9e307ZnVuY3Rpb24gaCh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJGb250IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIik7aWYoZlt0XSlyZXR1cm4gZlt0XTtpZigiIj09PXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGFyc2UgYW4gZW1wdHkgc3RyaW5nLiIpO2lmKC0xIT09YS5pbmRleE9mKHQpKXJldHVybiBmW3RdPXtzeXN0ZW06dH07Zm9yKHZhciBlLHI9e3N0eWxlOiJub3JtYWwiLHZhcmlhbnQ6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHN0cmV0Y2g6Im5vcm1hbCIsbGluZUhlaWdodDoibm9ybWFsIixzaXplOiIxcmVtIixmYW1pbHk6WyJzZXJpZiJdfSxoPWModCwvXHMrLyk7ZT1oLnNoaWZ0KCk7KXtpZigtMSE9PWkuaW5kZXhPZihlKSlyZXR1cm5bInN0eWxlIiwidmFyaWFudCIsIndlaWdodCIsInN0cmV0Y2giXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09ZX0pLGZbdF09cjtpZigtMT09PXMuaW5kZXhPZihlKSlpZigibm9ybWFsIiE9PWUmJiJzbWFsbC1jYXBzIiE9PWUpaWYoLTE9PT1sLmluZGV4T2YoZSkpe2lmKC0xPT09by5pbmRleE9mKGUpKXtpZih1KGUpKXt2YXIgZD1jKGUsIi8iKTtpZihyLnNpemU9ZFswXSxudWxsIT1kWzFdP3IubGluZUhlaWdodD1wKGRbMV0pOiIvIj09PWhbMF0mJihoLnNoaWZ0KCksci5saW5lSGVpZ2h0PXAoaC5zaGlmdCgpKSksIWgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCBmb250LWZhbWlseS4iKTtyZXR1cm4gci5mYW1pbHk9YyhoLmpvaW4oIiAiKSwvXHMqLFxzKi8pLm1hcChuKSxmW3RdPXJ9dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG9yIHVuc3VwcG9ydGVkIGZvbnQgdG9rZW46ICIrZSl9ci53ZWlnaHQ9ZX1lbHNlIHIuc3RyZXRjaD1lO2Vsc2Ugci52YXJpYW50PWU7ZWxzZSByLnN0eWxlPWV9dGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGZvbnQtc2l6ZS4iKX1mdW5jdGlvbiBwKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGUudG9TdHJpbmcoKT09PXQ/ZTp0fX0seyIuL2xpYi91dGlsIjoxMzAsImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiOjEyNiwiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjEyNywiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIjoxMjgsImNzcy1nbG9iYWwta2V5d29yZHMiOjEzMywiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIjoxMzQsInN0cmluZy1zcGxpdC1ieSI6NTEzLHVucXVvdGU6NTMyfV0sMTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKSxpPXQoIi4vbGliL3V0aWwiKS5pc1NpemUsYT1nKHQoImNzcy1nbG9iYWwta2V5d29yZHMiKSksbz1nKHQoImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyIpKSxzPWcodCgiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIikpLGw9Zyh0KCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyIpKSxjPWcodCgiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyIpKSx1PXtub3JtYWw6MSwic21hbGwtY2FwcyI6MX0sZj17c2VyaWY6MSwic2Fucy1zZXJpZiI6MSxtb25vc3BhY2U6MSxjdXJzaXZlOjEsZmFudGFzeToxLCJzeXN0ZW0tdWkiOjF9LGg9IjFyZW0iLHA9InNlcmlmIjtmdW5jdGlvbiBkKHQsZSl7aWYodCYmIWVbdF0mJiFhW3RdKXRocm93IEVycm9yKCJVbmtub3duIGtleXdvcmQgYCIrdCsiYCIpO3JldHVybiB0fWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPTE7cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCh0PW4odCx7c3R5bGU6InN0eWxlIGZvbnRzdHlsZSBmb250U3R5bGUgZm9udC1zdHlsZSBzbG9wZSBkaXN0aW5jdGlvbiIsdmFyaWFudDoidmFyaWFudCBmb250LXZhcmlhbnQgZm9udFZhcmlhbnQgZm9udHZhcmlhbnQgdmFyIGNhcGl0YWxpemF0aW9uIix3ZWlnaHQ6IndlaWdodCB3IGZvbnQtd2VpZ2h0IGZvbnRXZWlnaHQgZm9udHdlaWdodCIsc3RyZXRjaDoic3RyZXRjaCBmb250LXN0cmV0Y2ggZm9udFN0cmV0Y2ggZm9udHN0cmV0Y2ggd2lkdGgiLHNpemU6InNpemUgcyBmb250LXNpemUgZm9udFNpemUgZm9udHNpemUgaGVpZ2h0IGVtIGVtU2l6ZSIsbGluZUhlaWdodDoibGggbGluZS1oZWlnaHQgbGluZUhlaWdodCBsaW5laGVpZ2h0IGxlYWRpbmciLGZhbWlseToiZm9udCBmYW1pbHkgZm9udEZhbWlseSBmb250LWZhbWlseSBmb250ZmFtaWx5IHR5cGUgdHlwZWZhY2UgZmFjZSIsc3lzdGVtOiJzeXN0ZW0gcmVzZXJ2ZWQgZGVmYXVsdCBnbG9iYWwifSkpLnN5c3RlbSlyZXR1cm4gdC5zeXN0ZW0mJmQodC5zeXN0ZW0sbyksdC5zeXN0ZW07aWYoZCh0LnN0eWxlLGwpLGQodC52YXJpYW50LHUpLGQodC53ZWlnaHQscyksZCh0LnN0cmV0Y2gsYyksbnVsbD09dC5zaXplJiYodC5zaXplPWgpLCJudW1iZXIiPT10eXBlb2YgdC5zaXplJiYodC5zaXplKz0icHgiKSwhaSl0aHJvdyBFcnJvcigiQmFkIHNpemUgdmFsdWUgYCIrdC5zaXplKyJgIik7dC5mYW1pbHl8fCh0LmZhbWlseT1wKSxBcnJheS5pc0FycmF5KHQuZmFtaWx5KSYmKHQuZmFtaWx5Lmxlbmd0aHx8KHQuZmFtaWx5PVtwXSksdC5mYW1pbHk9dC5mYW1pbHkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBmW3RdP3Q6JyInK3QrJyInfSkuam9pbigiLCAiKSk7dmFyIGU9W107cmV0dXJuIGUucHVzaCh0LnN0eWxlKSx0LnZhcmlhbnQhPT10LnN0eWxlJiZlLnB1c2godC52YXJpYW50KSx0LndlaWdodCE9PXQudmFyaWFudCYmdC53ZWlnaHQhPT10LnN0eWxlJiZlLnB1c2godC53ZWlnaHQpLHQuc3RyZXRjaCE9PXQud2VpZ2h0JiZ0LnN0cmV0Y2ghPT10LnZhcmlhbnQmJnQuc3RyZXRjaCE9PXQuc3R5bGUmJmUucHVzaCh0LnN0cmV0Y2gpLGUucHVzaCh0LnNpemUrKG51bGw9PXQubGluZUhlaWdodHx8Im5vcm1hbCI9PT10LmxpbmVIZWlnaHR8fHQubGluZUhlaWdodCsiIj09IjEiPyIiOiIvIit0LmxpbmVIZWlnaHQpKSxlLnB1c2godC5mYW1pbHkpLGUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKX19LHsiLi9saWIvdXRpbCI6MTMwLCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIjoxMjYsImNzcy1mb250LXN0eWxlLWtleXdvcmRzIjoxMjcsImNzcy1mb250LXdlaWdodC1rZXl3b3JkcyI6MTI4LCJjc3MtZ2xvYmFsLWtleXdvcmRzIjoxMzMsImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyI6MTM0LCJwaWNrLWJ5LWFsaWFzIjo0NTd9XSwxMzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJpbmhlcml0IiwiaW5pdGlhbCIsInVuc2V0Il19LHt9XSwxMzQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJjYXB0aW9uIiwiaWNvbiIsIm1lbnUiLCJtZXNzYWdlLWJveCIsInNtYWxsLWNhcHRpb24iLCJzdGF0dXMtYmFyIl19LHt9XSwxMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pLTEscz1pKmksbD1vKm8sYz0oMSsyKmkpKmwsdT1pKmwsZj1zKigzLTIqaSksaD1zKm87aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgcD10Lmxlbmd0aC0xO3A+PTA7LS1wKWFbcF09Yyp0W3BdK3UqZVtwXStmKnJbcF0raCpuW3BdO3JldHVybiBhfXJldHVybiBjKnQrdSplK2YqcitoKm59LGUuZXhwb3J0cy5kZXJpdmF0aXZlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz02KmkqaS02Kmkscz0zKmkqaS00KmkrMSxsPS02KmkqaSs2KmksYz0zKmkqaS0yKmk7aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgdT10Lmxlbmd0aC0xO3U+PTA7LS11KWFbdV09byp0W3VdK3MqZVt1XStsKnJbdV0rYypuW3VdO3JldHVybiBhfXJldHVybiBvKnQrcyplK2wqclt1XStjKm59fSx7fV0sMTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3RodW5rLmpzIik7ZnVuY3Rpb24gaSgpe3RoaXMuYXJnVHlwZXM9W10sdGhpcy5zaGltQXJncz1bXSx0aGlzLmFycmF5QXJncz1bXSx0aGlzLmFycmF5QmxvY2tJbmRpY2VzPVtdLHRoaXMuc2NhbGFyQXJncz1bXSx0aGlzLm9mZnNldEFyZ3M9W10sdGhpcy5vZmZzZXRBcmdJbmRleD1bXSx0aGlzLmluZGV4QXJncz1bXSx0aGlzLnNoYXBlQXJncz1bXSx0aGlzLmZ1bmNOYW1lPSIiLHRoaXMucHJlPW51bGwsdGhpcy5ib2R5PW51bGwsdGhpcy5wb3N0PW51bGwsdGhpcy5kZWJ1Zz0hMX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGk7ZS5wcmU9dC5wcmUsZS5ib2R5PXQuYm9keSxlLnBvc3Q9dC5wb3N0O3ZhciByPXQuYXJncy5zbGljZSgwKTtlLmFyZ1R5cGVzPXI7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBvPXJbYV07aWYoImFycmF5Ij09PW98fCJvYmplY3QiPT10eXBlb2YgbyYmby5ibG9ja0luZGljZXMpe2lmKGUuYXJnVHlwZXNbYV09ImFycmF5IixlLmFycmF5QXJncy5wdXNoKGEpLGUuYXJyYXlCbG9ja0luZGljZXMucHVzaChvLmJsb2NrSW5kaWNlcz9vLmJsb2NrSW5kaWNlczowKSxlLnNoaW1BcmdzLnB1c2goImFycmF5IithKSxhPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJncyIpO2lmKGE8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBhcmdzIil9ZWxzZSBpZigic2NhbGFyIj09PW8pZS5zY2FsYXJBcmdzLnB1c2goYSksZS5zaGltQXJncy5wdXNoKCJzY2FsYXIiK2EpO2Vsc2UgaWYoImluZGV4Ij09PW8pe2lmKGUuaW5kZXhBcmdzLnB1c2goYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGluZGV4Iik7aWYoYTxlLmJvZHkuYXJncy5sZW5ndGgmJmUuYm9keS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBib2R5KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBpbmRleCIpO2lmKGE8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleCIpfWVsc2UgaWYoInNoYXBlIj09PW8pe2lmKGUuc2hhcGVBcmdzLnB1c2goYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZSIpO2lmKGE8ZS5ib2R5LmFyZ3MubGVuZ3RoJiZlLmJvZHkuYXJnc1thXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGUiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IHNoYXBlIil9ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIG98fCFvLm9mZnNldCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBVbmtub3duIGFyZ3VtZW50IHR5cGUgIityW2FdKTtlLmFyZ1R5cGVzW2FdPSJvZmZzZXQiLGUub2Zmc2V0QXJncy5wdXNoKHthcnJheTpvLmFycmF5LG9mZnNldDpvLm9mZnNldH0pLGUub2Zmc2V0QXJnSW5kZXgucHVzaChhKX19aWYoZS5hcnJheUFyZ3MubGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IE5vIGFycmF5IGFyZ3VtZW50cyBzcGVjaWZpZWQiKTtpZihlLnByZS5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcHJlKCkgYmxvY2siKTtpZihlLmJvZHkuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIGJvZHkoKSBibG9jayIpO2lmKGUucG9zdC5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcG9zdCgpIGJsb2NrIik7cmV0dXJuIGUuZGVidWc9ISF0LnByaW50Q29kZXx8ISF0LmRlYnVnLGUuZnVuY05hbWU9dC5mdW5jTmFtZXx8ImN3aXNlIixlLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZXx8NjQsbihlKX19LHsiLi9saWIvdGh1bmsuanMiOjEzOH1dLDEzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ1bmlxIik7ZnVuY3Rpb24gaSh0LGUscil7dmFyIG4saSxhPXQubGVuZ3RoLG89ZS5hcnJheUFyZ3MubGVuZ3RoLHM9ZS5pbmRleEFyZ3MubGVuZ3RoPjAsbD1bXSxjPVtdLHU9MCxmPTA7Zm9yKG49MDtuPGE7KytuKWMucHVzaChbImkiLG4sIj0wIl0uam9pbigiIikpO2ZvcihpPTA7aTxvOysraSlmb3Iobj0wO248YTsrK24pZj11LHU9dFtuXSwwPT09bj9jLnB1c2goWyJkIixpLCJzIixuLCI9dCIsaSwicCIsdV0uam9pbigiIikpOmMucHVzaChbImQiLGksInMiLG4sIj0odCIsaSwicCIsdSwiLXMiLGYsIip0IixpLCJwIixmLCIpIl0uam9pbigiIikpO2ZvcihjLmxlbmd0aD4wJiZsLnB1c2goInZhciAiK2Muam9pbigiLCIpKSxuPWEtMTtuPj0wOy0tbil1PXRbbl0sbC5wdXNoKFsiZm9yKGkiLG4sIj0wO2kiLG4sIjxzIix1LCI7KytpIixuLCIpeyJdLmpvaW4oIiIpKTtmb3IobC5wdXNoKHIpLG49MDtuPGE7KytuKXtmb3IoZj11LHU9dFtuXSxpPTA7aTxvOysraSlsLnB1c2goWyJwIixpLCIrPWQiLGksInMiLG5dLmpvaW4oIiIpKTtzJiYobj4wJiZsLnB1c2goWyJpbmRleFsiLGYsIl0tPXMiLGZdLmpvaW4oIiIpKSxsLnB1c2goWyIrK2luZGV4WyIsdSwiXSJdLmpvaW4oIiIpKSksbC5wdXNoKCJ9Iil9cmV0dXJuIGwuam9pbigiXG4iKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49dC5ib2R5LGk9W10sYT1bXSxvPTA7bzx0LmFyZ3MubGVuZ3RoOysrbyl7dmFyIHM9dC5hcmdzW29dO2lmKCEocy5jb3VudDw9MCkpe3ZhciBsPW5ldyBSZWdFeHAocy5uYW1lLCJnIiksYz0iIix1PWUuYXJyYXlBcmdzLmluZGV4T2Yobyk7c3dpdGNoKGUuYXJnVHlwZXNbb10pe2Nhc2Uib2Zmc2V0Ijp2YXIgZj1lLm9mZnNldEFyZ0luZGV4LmluZGV4T2Yobyk7dT1lLm9mZnNldEFyZ3NbZl0uYXJyYXksYz0iK3EiK2Y7Y2FzZSJhcnJheSI6Yz0icCIrdStjO3ZhciBoPSJsIitvLHA9ImEiK3U7aWYoMD09PWUuYXJyYXlCbG9ja0luZGljZXNbdV0pMT09PXMuY291bnQ/ImdlbmVyaWMiPT09clt1XT9zLmx2YWx1ZT8oaS5wdXNoKFsidmFyICIsaCwiPSIscCwiLmdldCgiLGMsIikiXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxoKSxhLnB1c2goW3AsIi5zZXQoIixjLCIsIixoLCIpIl0uam9pbigiIikpKTpuPW4ucmVwbGFjZShsLFtwLCIuZ2V0KCIsYywiKSJdLmpvaW4oIiIpKTpuPW4ucmVwbGFjZShsLFtwLCJbIixjLCJdIl0uam9pbigiIikpOiJnZW5lcmljIj09PXJbdV0/KGkucHVzaChbInZhciAiLGgsIj0iLHAsIi5nZXQoIixjLCIpIl0uam9pbigiIikpLG49bi5yZXBsYWNlKGwsaCkscy5sdmFsdWUmJmEucHVzaChbcCwiLnNldCgiLGMsIiwiLGgsIikiXS5qb2luKCIiKSkpOihpLnB1c2goWyJ2YXIgIixoLCI9IixwLCJbIixjLCJdIl0uam9pbigiIikpLG49bi5yZXBsYWNlKGwsaCkscy5sdmFsdWUmJmEucHVzaChbcCwiWyIsYywiXT0iLGhdLmpvaW4oIiIpKSk7ZWxzZXtmb3IodmFyIGQ9W3MubmFtZV0sZz1bY10sdj0wO3Y8TWF0aC5hYnMoZS5hcnJheUJsb2NrSW5kaWNlc1t1XSk7disrKWQucHVzaCgiXFxzKlxcWyhbXlxcXV0rKVxcXSIpLGcucHVzaCgiJCIrKHYrMSkrIip0Iit1KyJiIit2KTtpZihsPW5ldyBSZWdFeHAoZC5qb2luKCIiKSwiZyIpLGM9Zy5qb2luKCIrIiksImdlbmVyaWMiPT09clt1XSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBHZW5lcmljIGFycmF5cyBub3Qgc3VwcG9ydGVkIGluIGNvbWJpbmF0aW9uIHdpdGggYmxvY2tzISIpO249bi5yZXBsYWNlKGwsW3AsIlsiLGMsIl0iXS5qb2luKCIiKSl9YnJlYWs7Y2FzZSJzY2FsYXIiOm49bi5yZXBsYWNlKGwsIlkiK2Uuc2NhbGFyQXJncy5pbmRleE9mKG8pKTticmVhaztjYXNlImluZGV4IjpuPW4ucmVwbGFjZShsLCJpbmRleCIpO2JyZWFrO2Nhc2Uic2hhcGUiOm49bi5yZXBsYWNlKGwsInNoYXBlIil9fX1yZXR1cm5baS5qb2luKCJcbiIpLG4sYS5qb2luKCJcbiIpXS5qb2luKCJcbiIpLnRyaW0oKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVsxXS5sZW5ndGgtTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSl8MCxvPW5ldyBBcnJheSh0LmFycmF5QXJncy5sZW5ndGgpLHM9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksbD0wO2w8dC5hcnJheUFyZ3MubGVuZ3RoOysrbClzW2xdPWVbMipsXSxvW2xdPWVbMipsKzFdO3ZhciBjPVtdLHU9W10sZj1bXSxoPVtdLHA9W107Zm9yKGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpe3QuYXJyYXlCbG9ja0luZGljZXNbbF08MD8oZi5wdXNoKDApLGgucHVzaChyKSxjLnB1c2gociksdS5wdXNoKHIrdC5hcnJheUJsb2NrSW5kaWNlc1tsXSkpOihmLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tsXSksaC5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbbF0rciksYy5wdXNoKDApLHUucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKSk7Zm9yKHZhciBkPVtdLGc9MDtnPG9bbF0ubGVuZ3RoO2crKylmW2xdPD1vW2xdW2ddJiZvW2xdW2ddPGhbbF0mJmQucHVzaChvW2xdW2ddLWZbbF0pO3AucHVzaChkKX12YXIgdj1bIlNTIl0sbT1bIid1c2Ugc3RyaWN0JyJdLHk9W107Zm9yKGc9MDtnPHI7KytnKXkucHVzaChbInMiLGcsIj1TU1siLGcsIl0iXS5qb2luKCIiKSk7Zm9yKGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpe2Zvcih2LnB1c2goImEiK2wpLHYucHVzaCgidCIrbCksdi5wdXNoKCJwIitsKSxnPTA7ZzxyOysrZyl5LnB1c2goWyJ0IixsLCJwIixnLCI9dCIsbCwiWyIsZltsXStnLCJdIl0uam9pbigiIikpO2ZvcihnPTA7ZzxNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKTsrK2cpeS5wdXNoKFsidCIsbCwiYiIsZywiPXQiLGwsIlsiLGNbbF0rZywiXSJdLmpvaW4oIiIpKX1mb3IobD0wO2w8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK2wpdi5wdXNoKCJZIitsKTtpZih0LnNoYXBlQXJncy5sZW5ndGg+MCYmeS5wdXNoKCJzaGFwZT1TUy5zbGljZSgwKSIpLHQuaW5kZXhBcmdzLmxlbmd0aD4wKXt2YXIgeD1uZXcgQXJyYXkocik7Zm9yKGw9MDtsPHI7KytsKXhbbF09IjAiO3kucHVzaChbImluZGV4PVsiLHguam9pbigiLCIpLCJdIl0uam9pbigiIikpfWZvcihsPTA7bDx0Lm9mZnNldEFyZ3MubGVuZ3RoOysrbCl7dmFyIGI9dC5vZmZzZXRBcmdzW2xdLF89W107Zm9yKGc9MDtnPGIub2Zmc2V0Lmxlbmd0aDsrK2cpMCE9PWIub2Zmc2V0W2ddJiYoMT09PWIub2Zmc2V0W2ddP18ucHVzaChbInQiLGIuYXJyYXksInAiLGddLmpvaW4oIiIpKTpfLnB1c2goW2Iub2Zmc2V0W2ddLCIqdCIsYi5hcnJheSwicCIsZ10uam9pbigiIikpKTswPT09Xy5sZW5ndGg/eS5wdXNoKCJxIitsKyI9MCIpOnkucHVzaChbInEiLGwsIj0iLF8uam9pbigiKyIpXS5qb2luKCIiKSl9dmFyIHc9bihbXS5jb25jYXQodC5wcmUudGhpc1ZhcnMpLmNvbmNhdCh0LmJvZHkudGhpc1ZhcnMpLmNvbmNhdCh0LnBvc3QudGhpc1ZhcnMpKTtmb3IoKHk9eS5jb25jYXQodykpLmxlbmd0aD4wJiZtLnB1c2goInZhciAiK3kuam9pbigiLCIpKSxsPTA7bDx0LmFycmF5QXJncy5sZW5ndGg7KytsKW0ucHVzaCgicCIrbCsifD0wIik7dC5wcmUuYm9keS5sZW5ndGg+MyYmbS5wdXNoKGEodC5wcmUsdCxzKSk7dmFyIGs9YSh0LmJvZHksdCxzKSxUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dFswXS5sZW5ndGg7ZTxyOyl7Zm9yKHZhciBuPTE7bjx0Lmxlbmd0aDsrK24paWYodFtuXVtlXSE9PXRbMF1bZV0pcmV0dXJuIGU7KytlfXJldHVybiBlfShwKTtUPHI/bS5wdXNoKGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXIuYXJyYXlBcmdzLmxlbmd0aCxzPXIuYmxvY2tTaXplLGw9ci5pbmRleEFyZ3MubGVuZ3RoPjAsYz1bXSx1PTA7dTxvOysrdSljLnB1c2goWyJ2YXIgb2Zmc2V0Iix1LCI9cCIsdV0uam9pbigiIikpO2Zvcih1PXQ7dTxhOysrdSljLnB1c2goWyJmb3IodmFyIGoiK3UrIj1TU1siLGVbdV0sIl18MDtqIix1LCI+MDspeyJdLmpvaW4oIiIpKSxjLnB1c2goWyJpZihqIix1LCI8IixzLCIpeyJdLmpvaW4oIiIpKSxjLnB1c2goWyJzIixlW3VdLCI9aiIsdV0uam9pbigiIikpLGMucHVzaChbImoiLHUsIj0wIl0uam9pbigiIikpLGMucHVzaChbIn1lbHNle3MiLGVbdV0sIj0iLHNdLmpvaW4oIiIpKSxjLnB1c2goWyJqIix1LCItPSIscywifSJdLmpvaW4oIiIpKSxsJiZjLnB1c2goWyJpbmRleFsiLGVbdV0sIl09aiIsdV0uam9pbigiIikpO2Zvcih1PTA7dTxvOysrdSl7Zm9yKHZhciBmPVsib2Zmc2V0Iit1XSxoPXQ7aDxhOysraClmLnB1c2goWyJqIixoLCIqdCIsdSwicCIsZVtoXV0uam9pbigiIikpO2MucHVzaChbInAiLHUsIj0oIixmLmpvaW4oIisiKSwiKSJdLmpvaW4oIiIpKX1mb3IoYy5wdXNoKGkoZSxyLG4pKSx1PXQ7dTxhOysrdSljLnB1c2goIn0iKTtyZXR1cm4gYy5qb2luKCJcbiIpfShULHBbMF0sdCxrKSk6bS5wdXNoKGkocFswXSx0LGspKSx0LnBvc3QuYm9keS5sZW5ndGg+MyYmbS5wdXNoKGEodC5wb3N0LHQscykpLHQuZGVidWcmJmNvbnNvbGUubG9nKCItLS0tLUdlbmVyYXRlZCBjd2lzZSByb3V0aW5lIGZvciAiLGUsIjpcbiIrbS5qb2luKCJcbiIpKyJcbi0tLS0tLS0tLS0iKTt2YXIgQT1bdC5mdW5jTmFtZXx8InVubmFtZWQiLCJfY3dpc2VfbG9vcF8iLG9bMF0uam9pbigicyIpLCJtIixULGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9ITAsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT10W25dLGE9aS5tYXRjaCgvXGQrLyk7YT1hP2FbMF06IiIsMD09PWkuY2hhckF0KDApP2Vbbl09InUiK2kuY2hhckF0KDEpK2E6ZVtuXT1pLmNoYXJBdCgwKSthLG4+MCYmKHI9ciYmZVtuXT09PWVbbi0xXSl9cmV0dXJuIHI/ZVswXTplLmpvaW4oIiIpfShzKV0uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbihbImZ1bmN0aW9uICIsQSwiKCIsdi5qb2luKCIsIiksIil7IixtLmpvaW4oIlxuIiksIn0gcmV0dXJuICIsQV0uam9pbigiIikpKCl9fSx7dW5pcTo1MzF9XSwxMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb21waWxlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVsiJ3VzZSBzdHJpY3QnIiwidmFyIENBQ0hFRD17fSJdLHI9W10saT10LmZ1bmNOYW1lKyJfY3dpc2VfdGh1bmsiO2UucHVzaChbInJldHVybiBmdW5jdGlvbiAiLGksIigiLHQuc2hpbUFyZ3Muam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIGE9W10sbz1bXSxzPVtbImFycmF5Iix0LmFycmF5QXJnc1swXSwiLnNoYXBlLnNsaWNlKCIsTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSx0LmFycmF5QmxvY2tJbmRpY2VzWzBdPDA/IiwiK3QuYXJyYXlCbG9ja0luZGljZXNbMF0rIikiOiIpIl0uam9pbigiIildLGw9W10sYz1bXSx1PTA7dTx0LmFycmF5QXJncy5sZW5ndGg7Kyt1KXt2YXIgZj10LmFycmF5QXJnc1t1XTtyLnB1c2goWyJ0IixmLCI9YXJyYXkiLGYsIi5kdHlwZSwiLCJyIixmLCI9YXJyYXkiLGYsIi5vcmRlciJdLmpvaW4oIiIpKSxhLnB1c2goInQiK2YpLGEucHVzaCgiciIrZiksby5wdXNoKCJ0IitmKSxvLnB1c2goInIiK2YrIi5qb2luKCkiKSxzLnB1c2goImFycmF5IitmKyIuZGF0YSIpLHMucHVzaCgiYXJyYXkiK2YrIi5zdHJpZGUiKSxzLnB1c2goImFycmF5IitmKyIub2Zmc2V0fDAiKSx1PjAmJihsLnB1c2goImFycmF5Iit0LmFycmF5QXJnc1swXSsiLnNoYXBlLmxlbmd0aD09PWFycmF5IitmKyIuc2hhcGUubGVuZ3RoKyIrKE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLU1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbdV0pKSksYy5wdXNoKCJhcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZVtzaGFwZUluZGV4KyIrTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiXT09PWFycmF5IitmKyIuc2hhcGVbc2hhcGVJbmRleCsiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1t1XSkrIl0iKSl9Zm9yKHQuYXJyYXlBcmdzLmxlbmd0aD4xJiYoZS5wdXNoKCJpZiAoISgiK2wuam9pbigiICYmICIpKyIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5IScpIiksZS5wdXNoKCJmb3IodmFyIHNoYXBlSW5kZXg9YXJyYXkiK3QuYXJyYXlBcmdzWzBdKyIuc2hhcGUubGVuZ3RoLSIrTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSkrIjsgc2hhcGVJbmRleC0tXHgzZTA7KSB7IiksZS5wdXNoKCJpZiAoISgiK2Muam9pbigiICYmICIpKyIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIHNoYXBlIScpIiksZS5wdXNoKCJ9IikpLHU9MDt1PHQuc2NhbGFyQXJncy5sZW5ndGg7Kyt1KXMucHVzaCgic2NhbGFyIit0LnNjYWxhckFyZ3NbdV0pO3JldHVybiByLnB1c2goWyJ0eXBlPVsiLG8uam9pbigiLCIpLCJdLmpvaW4oKSJdLmpvaW4oIiIpKSxyLnB1c2goInByb2M9Q0FDSEVEW3R5cGVdIiksZS5wdXNoKCJ2YXIgIityLmpvaW4oIiwiKSksZS5wdXNoKFsiaWYoIXByb2MpeyIsIkNBQ0hFRFt0eXBlXT1wcm9jPWNvbXBpbGUoWyIsYS5qb2luKCIsIiksIl0pfSIsInJldHVybiBwcm9jKCIscy5qb2luKCIsIiksIil9Il0uam9pbigiIikpLHQuZGVidWcmJmNvbnNvbGUubG9nKCItLS0tLUdlbmVyYXRlZCB0aHVuazpcbiIrZS5qb2luKCJcbiIpKyJcbi0tLS0tLS0tLS0iKSxuZXcgRnVuY3Rpb24oImNvbXBpbGUiLGUuam9pbigiXG4iKSkobi5iaW5kKHZvaWQgMCx0KSl9fSx7Ii4vY29tcGlsZS5qcyI6MTM3fV0sMTM5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIil9LHsiY3dpc2UtY29tcGlsZXIiOjEzNn1dLDE0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L2NvcHkiKSxhPXQoImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIiksbz10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLHM9dCgiZXM1LWV4dC9vYmplY3QvbWFwIiksbD10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGM9dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSx1PUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5LGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhPWMoZSkmJmwoZS52YWx1ZSk7cmV0dXJuIGRlbGV0ZShuPWkoZSkpLndyaXRhYmxlLGRlbGV0ZSBuLnZhbHVlLG4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIXIub3ZlcndyaXRlRGVmaW5pdGlvbiYmaC5jYWxsKHRoaXMsdCk/YTooZS52YWx1ZT11LmNhbGwoYSxyLnJlc29sdmVDb250ZXh0P3IucmVzb2x2ZUNvbnRleHQodGhpcyk6dGhpcyksZih0aGlzLHQsZSksdGhpc1t0XSl9LG59LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hKGFyZ3VtZW50c1sxXSk7cmV0dXJuIG51bGwhPWUucmVzb2x2ZUNvbnRleHQmJm8oZS5yZXNvbHZlQ29udGV4dCkscyh0LGZ1bmN0aW9uKHQscil7cmV0dXJuIG4ocix0LGUpfSl9fSx7ImVzNS1leHQvb2JqZWN0L2NvcHkiOjE4MSwiZXM1LWV4dC9vYmplY3QvbWFwIjoxOTAsImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIjoxOTEsImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIjoxOTUsImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIjoxOTd9XSwxNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM1LWV4dC9vYmplY3QvYXNzaWduIiksaT10KCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9ucyIpLGE9dCgiZXM1LWV4dC9vYmplY3QvaXMtY2FsbGFibGUiKSxvPXQoImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxzLGwsYztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyfHwic3RyaW5nIiE9dHlwZW9mIHQ/KGw9ZSxlPXQsdD1udWxsKTpsPWFyZ3VtZW50c1syXSxudWxsPT10PyhyPXM9ITAsYT0hMSk6KHI9by5jYWxsKHQsImMiKSxhPW8uY2FsbCh0LCJlIikscz1vLmNhbGwodCwidyIpKSxjPXt2YWx1ZTplLGNvbmZpZ3VyYWJsZTpyLGVudW1lcmFibGU6YSx3cml0YWJsZTpzfSxsP24oaShsKSxjKTpjfSkuZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBzLGwsYyx1O3JldHVybiJzdHJpbmciIT10eXBlb2YgdD8oYz1yLHI9ZSxlPXQsdD1udWxsKTpjPWFyZ3VtZW50c1szXSxudWxsPT1lP2U9dm9pZCAwOmEoZSk/bnVsbD09cj9yPXZvaWQgMDphKHIpfHwoYz1yLHI9dm9pZCAwKTooYz1lLGU9cj12b2lkIDApLG51bGw9PXQ/KHM9ITAsbD0hMSk6KHM9by5jYWxsKHQsImMiKSxsPW8uY2FsbCh0LCJlIikpLHU9e2dldDplLHNldDpyLGNvbmZpZ3VyYWJsZTpzLGVudW1lcmFibGU6bH0sYz9uKGkoYyksdSk6dX19LHsiZXM1LWV4dC9vYmplY3QvYXNzaWduIjoxNzgsImVzNS1leHQvb2JqZWN0L2lzLWNhbGxhYmxlIjoxODQsImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIjoxOTEsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjE5OH1dLDE0MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiByKHQpe3ZhciByO3JldHVybiAxPT09dC5sZW5ndGgmJihyPXQsdD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHIodCksbil9KSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dmFyIG49cihlKSxpPW4ucmlnaHQsYT1uLmxlZnQ7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9MCxvPS0xLGw9MCxjPTA7aWYobnVsbD09ZSlmb3IoOysrbzxpOylpc05hTihyPXModFtvXSkpfHwoYys9KG49ci1sKSooci0obCs9bi8rK2EpKSk7ZWxzZSBmb3IoOysrbzxpOylpc05hTihyPXMoZSh0W29dLG8sdCkpKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2lmKGE+MSlyZXR1cm4gYy8oYS0xKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9bCh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9dFtvXSkmJihuPnImJihuPXIpLGk8ciYmKGk9cikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KHI9ZSh0W29dLG8sdCkpJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9ZSh0W29dLG8sdCkpJiYobj5yJiYobj1yKSxpPHImJihpPXIpKTtyZXR1cm5bbixpXX12YXIgZj1BcnJheS5wcm90b3R5cGUsaD1mLnNsaWNlLHA9Zi5tYXA7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdH1mdW5jdGlvbiB2KHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfXZhciBtPU1hdGguc3FydCg1MCkseT1NYXRoLnNxcnQoMTApLHg9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj1tPzEwOmE+PXk/NTphPj14PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49bT8xMDphPj15PzU6YT49eD8yOjEpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PW0/aSo9MTA6YT49eT9pKj01OmE+PXgmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiB3KHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIGsodCxlLHIpe2lmKG51bGw9PXImJihyPXMpLG49dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8bjwyKXJldHVybityKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybityKHRbbi0xXSxuLTEsdCk7dmFyIG4saT0obi0xKSplLGE9TWF0aC5mbG9vcihpKSxvPStyKHRbYV0sYSx0KTtyZXR1cm4gbysoK3IodFthKzFdLGErMSx0KS1vKSooaS1hKX19ZnVuY3Rpb24gVCh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9VCh0LE0pLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksYT0tMSxvPW5bZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIG59ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3Q9aSx0LmJpc2VjdFJpZ2h0PWksdC5iaXNlY3RMZWZ0PWEsdC5hc2NlbmRpbmc9ZSx0LmJpc2VjdG9yPXIsdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLHMsbD10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KGwqYyk7Zm9yKG51bGw9PXImJihyPW8pLG49YT0wO248bDsrK24pZm9yKHM9dFtuXSxpPTA7aTxjOysraSwrK2EpdVthXT1yKHMsZVtpXSk7cmV0dXJuIHV9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5kZXZpYXRpb249Yyx0LmV4dGVudD11LHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxlPXUscj13O2Z1bmN0aW9uIG4obil7dmFyIGEsbyxzPW4ubGVuZ3RoLGw9bmV3IEFycmF5KHMpO2ZvcihhPTA7YTxzOysrYSlsW2FdPXQoblthXSxhLG4pO3ZhciBjPWUobCksdT1jWzBdLGY9Y1sxXSxoPXIobCx1LGYpO0FycmF5LmlzQXJyYXkoaCl8fChoPV8odSxmLGgpLGg9dihNYXRoLmNlaWwodS9oKSpoLGYsaCkpO2Zvcih2YXIgcD1oLmxlbmd0aDtoWzBdPD11OyloLnNoaWZ0KCksLS1wO2Zvcig7aFtwLTFdPmY7KWgucG9wKCksLS1wO3ZhciBkLGc9bmV3IEFycmF5KHArMSk7Zm9yKGE9MDthPD1wOysrYSkoZD1nW2FdPVtdKS54MD1hPjA/aFthLTFdOnUsZC54MT1hPHA/aFthXTpmO2ZvcihhPTA7YTxzOysrYSl1PD0obz1sW2FdKSYmbzw9ZiYmZ1tpKGgsbywwLHApXS5wdXNoKG5bYV0pO3JldHVybiBnfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZChlKSxuKTp0fSxuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmQoW3RbMF0sdFsxXV0pLG4pOmV9LG4udGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZChoLmNhbGwodCkpOmQodCksbik6cn0sbn0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdD1wLmNhbGwodCxzKS5zb3J0KGUpLE1hdGguY2VpbCgobi1yKS8oMiooayh0LC43NSktayh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmNlaWwoKHItZSkvKDMuNSpjKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU3R1cmdlcz13LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9bixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPG47KWlzTmFOKHI9cyh0W2FdKSk/LS1pOm8rPXI7ZWxzZSBmb3IoOysrYTxuOylpc05hTihyPXMoZSh0W2FdLGEsdCkpKT8tLWk6bys9cjtpZihpKXJldHVybiBvL2l9LHQubWVkaWFuPWZ1bmN0aW9uKHQscil7dmFyIG4saT10Lmxlbmd0aCxhPS0xLG89W107aWYobnVsbD09cilmb3IoOysrYTxpOylpc05hTihuPXModFthXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrYTxpOylpc05hTihuPXMocih0W2FdLGEsdCkpKXx8by5wdXNoKG4pO3JldHVybiBrKG8uc29ydChlKSwuNSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sdC5taW49VCx0LnBhaXJzPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9byk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09ZShpLGk9dFsrK3JdKTtyZXR1cm4gYX0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnF1YW50aWxlPWssdC5yYW5nZT12LHQuc2Nhbj1mdW5jdGlvbih0LHIpe2lmKG49dC5sZW5ndGgpe3ZhciBuLGksYT0wLG89MCxzPXRbb107Zm9yKG51bGw9PXImJihyPWUpOysrYTxuOykocihpPXRbYV0scyk8MHx8MCE9PXIocyxzKSkmJihzPWksbz1hKTtyZXR1cm4gMD09PXIocyxzKT9vOnZvaWQgMH19LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0obnVsbD09cj90Lmxlbmd0aDpyKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxuOykocj0rdFtpXSkmJihhKz1yKTtlbHNlIGZvcig7KytpPG47KShyPStlKHRbaV0saSx0KSkmJihhKz1yKTtyZXR1cm4gYX0sdC50aWNrcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz0tMTtpZihyPStyLCh0PSt0KT09KGU9K2UpJiZyPjApcmV0dXJuW3RdO2lmKChuPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShvPWIodCxlLHIpKXx8IWlzRmluaXRlKG8pKXJldHVybltdO2lmKG8+MClmb3IodD1NYXRoLmNlaWwodC9vKSxlPU1hdGguZmxvb3IoZS9vKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrczxpOylhW3NdPSh0K3MpKm87ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqbyksZT1NYXRoLmNlaWwoZSpvKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrczxpOylhW3NdPSh0LXMpL287cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9LHQudGlja0luY3JlbWVudD1iLHQudGlja1N0ZXA9Xyx0LnRyYW5zcG9zZT1BLHQudmFyaWFuY2U9bCx0LnppcD1mdW5jdGlvbigpe3JldHVybiBBKGFyZ3VtZW50cyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiByKHQscil7dmFyIG49bmV3IGU7aWYodCBpbnN0YW5jZW9mIGUpdC5lYWNoKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGksYT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PXIpZm9yKDsrK2E8bzspbi5zZXQoYSx0W2FdKTtlbHNlIGZvcig7KythPG87KW4uc2V0KHIoaT10W2FdLGEsdCksaSl9ZWxzZSBpZih0KWZvcih2YXIgcyBpbiB0KW4uc2V0KHMsdFtzXSk7cmV0dXJuIG59ZS5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiIkIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzWyIkIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT0iJCIrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcykiJCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZigiJCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbigpe3JldHVybnt9fWZ1bmN0aW9uIGkodCxlLHIpe3RbZV09cn1mdW5jdGlvbiBhKCl7cmV0dXJuIHIoKX1mdW5jdGlvbiBvKHQsZSxyKXt0LnNldChlLHIpfWZ1bmN0aW9uIHMoKXt9dmFyIGw9ci5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPW5ldyBzO2lmKHQgaW5zdGFuY2VvZiBzKXQuZWFjaChmdW5jdGlvbih0KXtyLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIG49LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytuPGk7KXIuYWRkKHRbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQoZSh0W25dLG4sdCkpfXJldHVybiByfXMucHJvdG90eXBlPWMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGhhczpsLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmwucmVtb3ZlLGNsZWFyOmwuY2xlYXIsdmFsdWVzOmwua2V5cyxzaXplOmwuc2l6ZSxlbXB0eTpsLmVtcHR5LGVhY2g6bC5lYWNofTt0Lm5lc3Q9ZnVuY3Rpb24oKXt2YXIgdCxlLHMsbD1bXSxjPVtdO2Z1bmN0aW9uIHUobixpLGEsbyl7aWYoaT49bC5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJm4uc29ydCh0KSxudWxsIT1lP2Uobik6bjtmb3IodmFyIHMsYyxmLGg9LTEscD1uLmxlbmd0aCxkPWxbaSsrXSxnPXIoKSx2PWEoKTsrK2g8cDspKGY9Zy5nZXQocz1kKGM9bltoXSkrIiIpKT9mLnB1c2goYyk6Zy5zZXQocyxbY10pO3JldHVybiBnLmVhY2goZnVuY3Rpb24odCxlKXtvKHYsZSx1KHQsaSxhLG8pKX0pLHZ9cmV0dXJuIHM9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsbixpKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxhLG8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7aWYoKytuPmwubGVuZ3RoKXJldHVybiByO3ZhciBpLGE9Y1tuLTFdO3JldHVybiBudWxsIT1lJiZuPj1sLmxlbmd0aD9pPXIuZW50cmllcygpOihpPVtdLHIuZWFjaChmdW5jdGlvbihlLHIpe2kucHVzaCh7a2V5OnIsdmFsdWVzOnQoZSxuKX0pfSkpLG51bGwhPWE/aS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodC5rZXksZS5rZXkpfSk6aX0odSh0LDAsYSxvKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBsLnB1c2godCksc30sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGNbbC5sZW5ndGgtMV09dCxzfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsc30scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsc319fSx0LnNldD1jLHQubWFwPXIsdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gcih0LGUpe3ZhciByPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBuKCl7fXZhciBpPSJcXHMqKFsrLV0/XFxkKylcXHMqIixhPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG89IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHM9L14jKFswLTlhLWZdezN9KSQvLGw9L14jKFswLTlhLWZdezZ9KSQvLGM9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2ksaSxpXSsiXFwpJCIpLHU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW28sbyxvXSsiXFwpJCIpLGY9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tpLGksaSxhXSsiXFwpJCIpLGg9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tvLG8sbyxhXSsiXFwpJCIpLHA9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2EsbyxvXSsiXFwpJCIpLGQ9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1thLG8sbyxhXSsiXFwpJCIpLGc9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gdih0KXt2YXIgZTtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9cy5leGVjKHQpKT9uZXcgXygoZT1wYXJzZUludChlWzFdLDE2KSk+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTooZT1sLmV4ZWModCkpP20ocGFyc2VJbnQoZVsxXSwxNikpOihlPWMuZXhlYyh0KSk/bmV3IF8oZVsxXSxlWzJdLGVbM10sMSk6KGU9dS5leGVjKHQpKT9uZXcgXygyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1mLmV4ZWModCkpP3koZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9aC5leGVjKHQpKT95KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPXAuZXhlYyh0KSk/ayhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPWQuZXhlYyh0KSk/ayhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOmcuaGFzT3duUHJvcGVydHkodCk/bShnW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgXyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBfKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3JldHVybiBuPD0wJiYodD1lPXI9TmFOKSxuZXcgXyh0LGUscixuKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbnx8KHQ9dih0KSksdD9uZXcgXygodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgX31mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD94KHQpOm5ldyBfKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB3KHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gayh0LGUscixuKXtyZXR1cm4gbjw9MD90PWU9cj1OYU46cjw9MHx8cj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IEEodCxlLHIsbil9ZnVuY3Rpb24gVCh0LGUscixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEEpcmV0dXJuIG5ldyBBKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIG58fCh0PXYodCkpLCF0KXJldHVybiBuZXcgQTtpZih0IGluc3RhbmNlb2YgQSlyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxyPXQuZy8yNTUsaT10LmIvMjU1LGE9TWF0aC5taW4oZSxyLGkpLG89TWF0aC5tYXgoZSxyLGkpLHM9TmFOLGw9by1hLGM9KG8rYSkvMjtyZXR1cm4gbD8ocz1lPT09bz8oci1pKS9sKzYqKHI8aSk6cj09PW8/KGktZSkvbCsyOihlLXIpL2wrNCxsLz1jPC41P28rYToyLW8tYSxzKj02MCk6bD1jPjAmJmM8MT8wOnMsbmV3IEEocyxsLGMsdC5vcGFjaXR5KX0odCk6bmV3IEEodCxlLHIsbnVsbD09aT8xOmkpfWZ1bmN0aW9uIEEodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIE0odCxlLHIpe3JldHVybiAyNTUqKHQ8NjA/ZSsoci1lKSp0LzYwOnQ8MTgwP3I6dDwyNDA/ZSsoci1lKSooMjQwLXQpLzYwOmUpfWUobix2LHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmhleCgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLGUoXyxiLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IF8odGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IF8odGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4iIyIrdyh0aGlzLnIpK3codGhpcy5nKSt3KHRoaXMuYil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpLGUoQSxULHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEEodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgQSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKmUsaT0yKnItbjtyZXR1cm4gbmV3IF8oTSh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxuKSxNKHQsaSxuKSxNKHQ8MTIwP3QrMjQwOnQtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBTPU1hdGguUEkvMTgwLEU9MTgwL01hdGguUEksQz0uOTY0MjIsTD0xLHo9LjgyNTIxLE89NC8yOSxJPTYvMjksRD0zKkkqSSxQPUkqSSpJO2Z1bmN0aW9uIFIodCl7aWYodCBpbnN0YW5jZW9mIEIpcmV0dXJuIG5ldyBCKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEcpe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBCKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqUztyZXR1cm4gbmV3IEIodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgX3x8KHQ9eCh0KSk7dmFyIHIsbixpPVUodC5yKSxhPVUodC5nKSxvPVUodC5iKSxzPU4oKC4yMjI1MDQ1KmkrLjcxNjg3ODYqYSsuMDYwNjE2OSpvKS9MKTtyZXR1cm4gaT09PWEmJmE9PT1vP3I9bj1zOihyPU4oKC40MzYwNzQ3KmkrLjM4NTA2NDkqYSsuMTQzMDgwNCpvKS9DKSxuPU4oKC4wMTM5MzIyKmkrLjA5NzEwNDUqYSsuNzE0MTczMypvKS96KSksbmV3IEIoMTE2KnMtMTYsNTAwKihyLXMpLDIwMCoocy1uKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEYodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1IodCk6bmV3IEIodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIEIodCxlLHIsbil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQ+UD9NYXRoLnBvdyh0LDEvMyk6dC9EK099ZnVuY3Rpb24gaih0KXtyZXR1cm4gdD5JP3QqdCp0OkQqKHQtTyl9ZnVuY3Rpb24gVih0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gcSh0KXtpZih0IGluc3RhbmNlb2YgRylyZXR1cm4gbmV3IEcodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgQnx8KHQ9Uih0KSksMD09PXQuYSYmMD09PXQuYilyZXR1cm4gbmV3IEcoTmFOLDAsdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpFO3JldHVybiBuZXcgRyhlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBIKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9xKHQpOm5ldyBHKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBHKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1lKEIsRixyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQih0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEIodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IF8oVigzLjEzMzg1NjEqKGU9QypqKGUpKS0xLjYxNjg2NjcqKHQ9TCpqKHQpKS0uNDkwNjE0Nioocj16KmoocikpKSxWKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqciksViguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3KnIpLHRoaXMub3BhY2l0eSl9fSkpLGUoRyxILHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRyh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBSKHRoaXMpLnJnYigpfX0pKTt2YXIgWT0tLjE0ODYxLFc9MS43ODI3NyxYPS0uMjkyMjcsWj0tLjkwNjQ5LCQ9MS45NzI5NCxKPSQqWixLPSQqVyxRPVcqWC1aKlk7ZnVuY3Rpb24gdHQodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBldClyZXR1cm4gbmV3IGV0KHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIF98fCh0PXgodCkpO3ZhciBlPXQuci8yNTUscj10LmcvMjU1LG49dC5iLzI1NSxpPShRKm4rSiplLUsqcikvKFErSi1LKSxhPW4taSxvPSgkKihyLWkpLVgqYSkvWixzPU1hdGguc3FydChvKm8rYSphKS8oJCppKigxLWkpKSxsPXM/TWF0aC5hdGFuMihvLGEpKkUtMTIwOk5hTjtyZXR1cm4gbmV3IGV0KGw8MD9sKzM2MDpsLHMsaSx0Lm9wYWNpdHkpfSh0KTpuZXcgZXQodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIGV0KHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1lKGV0LHR0LHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IGV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IGV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpTLGU9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxuPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBfKDI1NSooZStyKihZKm4rVyppKSksMjU1KihlK3IqKFgqbitaKmkpKSwyNTUqKGUrciooJCpuKSksdGhpcy5vcGFjaXR5KX19KSksdC5jb2xvcj12LHQucmdiPWIsdC5oc2w9VCx0LmxhYj1GLHQuaGNsPUgsdC5sY2g9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3EodCk6bmV3IEcocixlLHQsbnVsbD09bj8xOm4pfSx0LmdyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEIodCwwLDAsbnVsbD09ZT8xOmUpfSx0LmN1YmVoZWxpeD10dCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHIoKXtmb3IodmFyIHQsZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8cjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IG4oaSl9ZnVuY3Rpb24gbih0KXt0aGlzLl89dH1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByLG49MCxpPXQubGVuZ3RoO248aTsrK24paWYoKHI9dFtuXSkubmFtZT09PWUpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24gYSh0LHIsbil7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDtpPGE7KytpKWlmKHRbaV0ubmFtZT09PXIpe3RbaV09ZSx0PXQuc2xpY2UoMCxpKS5jb25jYXQodC5zbGljZShpKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOnIsdmFsdWU6bn0pLHR9bi5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm4sb246ZnVuY3Rpb24odCxlKXt2YXIgcixuLG89dGhpcy5fLHM9KG49bywodCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihlPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIW4uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOmV9fSkpLGw9LTEsYz1zLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbDxjOylpZihyPSh0PXNbbF0pLnR5cGUpb1tyXT1hKG9bcl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IociBpbiBvKW9bcl09YShvW3JdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbDxjOylpZigocj0odD1zW2xdKS50eXBlKSYmKHI9aShvW3JdLHQubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBuKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKHI9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcixuLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT0wLHI9KG49dGhpcy5fW3RdKS5sZW5ndGg7YTxyOysrYSluW2FdLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgbj10aGlzLl9bdF0saT0wLGE9bi5sZW5ndGg7aTxhOysraSluW2ldLnZhbHVlLmFwcGx5KGUscil9fSx0LmRpc3BhdGNoPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSgib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQ2OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG89ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC55fXZhciBwPTEwLGQ9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO3QuZm9yY2VDZW50ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBuKCl7dmFyIG4saSxhPXIubGVuZ3RoLG89MCxzPTA7Zm9yKG49MDtuPGE7KytuKW8rPShpPXJbbl0pLngscys9aS55O2ZvcihvPW8vYS10LHM9cy9hLWUsbj0wO248YTsrK24pKGk9cltuXSkueC09byxpLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXR9LG4ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxuKTp0fSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qsbik6ZX0sbn0sdC5mb3JjZUNvbGxpZGU9ZnVuY3Rpb24odCl7dmFyIHIsbixpPTEsYz0xO2Z1bmN0aW9uIHUoKXtmb3IodmFyIHQsYSx1LGgscCxkLGcsdj1yLmxlbmd0aCxtPTA7bTxjOysrbSlmb3IoYT1lLnF1YWR0cmVlKHIscyxsKS52aXNpdEFmdGVyKGYpLHQ9MDt0PHY7Kyt0KXU9clt0XSxkPW5bdS5pbmRleF0sZz1kKmQsaD11LngrdS52eCxwPXUueSt1LnZ5LGEudmlzaXQoeSk7ZnVuY3Rpb24geSh0LGUscixuLGEpe3ZhciBzPXQuZGF0YSxsPXQucixjPWQrbDtpZighcylyZXR1cm4gZT5oK2N8fG48aC1jfHxyPnArY3x8YTxwLWM7aWYocy5pbmRleD51LmluZGV4KXt2YXIgZj1oLXMueC1zLnZ4LHY9cC1zLnktcy52eSxtPWYqZit2KnY7bTxjKmMmJigwPT09ZiYmKG0rPShmPW8oKSkqZiksMD09PXYmJihtKz0odj1vKCkpKnYpLG09KGMtKG09TWF0aC5zcXJ0KG0pKSkvbSppLHUudngrPShmKj1tKSooYz0obCo9bCkvKGcrbCkpLHUudnkrPSh2Kj1tKSpjLHMudngtPWYqKGM9MS1jKSxzLnZ5LT12KmMpfX19ZnVuY3Rpb24gZih0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1uW3QuZGF0YS5pbmRleF07Zm9yKHZhciBlPXQucj0wO2U8NDsrK2UpdFtlXSYmdFtlXS5yPnQuciYmKHQucj10W2VdLnIpfWZ1bmN0aW9uIGgoKXtpZihyKXt2YXIgZSxpLGE9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLGU9MDtlPGE7KytlKWk9cltlXSxuW2kuaW5kZXhdPSt0KGksZSxyKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8xOit0KSksdS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxoKCl9LHUuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCx1KTpjfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LHUpOml9LHUucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSksaCgpLHUpOnR9LHV9LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxzLGwsZj1jLGg9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oc1t0LnNvdXJjZS5pbmRleF0sc1t0LnRhcmdldC5pbmRleF0pfSxwPWEoMzApLGQ9MTtmdW5jdGlvbiBnKHIpe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxkOysraSlmb3IodmFyIHMsYyx1LGYsaCxwLGcsdj0wO3Y8YTsrK3YpYz0ocz10W3ZdKS5zb3VyY2UsZj0odT1zLnRhcmdldCkueCt1LnZ4LWMueC1jLnZ4fHxvKCksaD11LnkrdS52eS1jLnktYy52eXx8bygpLGYqPXA9KChwPU1hdGguc3FydChmKmYraCpoKSktblt2XSkvcCpyKmVbdl0saCo9cCx1LnZ4LT1mKihnPWxbdl0pLHUudnktPWgqZyxjLnZ4Kz1mKihnPTEtZyksYy52eSs9aCpnfWZ1bmN0aW9uIHYoKXtpZihpKXt2YXIgYSxvLGM9aS5sZW5ndGgsaD10Lmxlbmd0aCxwPXIubWFwKGksZik7Zm9yKGE9MCxzPW5ldyBBcnJheShjKTthPGg7KythKShvPXRbYV0pLmluZGV4PWEsIm9iamVjdCIhPXR5cGVvZiBvLnNvdXJjZSYmKG8uc291cmNlPXUocCxvLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2Ygby50YXJnZXQmJihvLnRhcmdldD11KHAsby50YXJnZXQpKSxzW28uc291cmNlLmluZGV4XT0oc1tvLnNvdXJjZS5pbmRleF18fDApKzEsc1tvLnRhcmdldC5pbmRleF09KHNbby50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihhPTAsbD1uZXcgQXJyYXkoaCk7YTxoOysrYSlvPXRbYV0sbFthXT1zW28uc291cmNlLmluZGV4XS8oc1tvLnNvdXJjZS5pbmRleF0rc1tvLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGgpLG0oKSxuPW5ldyBBcnJheShoKSx5KCl9fWZ1bmN0aW9uIG0oKXtpZihpKWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPStoKHRbcl0scix0KX1mdW5jdGlvbiB5KCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rcCh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxnLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LHYoKX0sZy5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHYoKSxnKTp0fSxnLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXQsZyk6Zn0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LGcpOmR9LGcuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxtKCksZyk6aH0sZy5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHkoKSxnKTpwfSxnfSx0LmZvcmNlTWFueUJvZHk9ZnVuY3Rpb24oKXt2YXIgdCxyLG4saSxzPWEoLTMwKSxsPTEsYz0xLzAsdT0uODE7ZnVuY3Rpb24gcChpKXt2YXIgYSxvPXQubGVuZ3RoLHM9ZS5xdWFkdHJlZSh0LGYsaCkudmlzaXRBZnRlcihnKTtmb3Iobj1pLGE9MDthPG87KythKXI9dFthXSxzLnZpc2l0KHYpfWZ1bmN0aW9uIGQoKXtpZih0KXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKXI9dFtlXSxpW3IuaW5kZXhdPStzKHIsZSx0KX19ZnVuY3Rpb24gZyh0KXt2YXIgZSxyLG4sYSxvLHM9MCxsPTA7aWYodC5sZW5ndGgpe2ZvcihuPWE9bz0wO288NDsrK28pKGU9dFtvXSkmJihyPU1hdGguYWJzKGUudmFsdWUpKSYmKHMrPWUudmFsdWUsbCs9cixuKz1yKmUueCxhKz1yKmUueSk7dC54PW4vbCx0Lnk9YS9sfWVsc2V7KGU9dCkueD1lLmRhdGEueCxlLnk9ZS5kYXRhLnk7ZG97cys9aVtlLmRhdGEuaW5kZXhdfXdoaWxlKGU9ZS5uZXh0KX10LnZhbHVlPXN9ZnVuY3Rpb24gdih0LGUsYSxzKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgZj10Lngtci54LGg9dC55LXIueSxwPXMtZSxkPWYqZitoKmg7aWYocCpwL3U8ZClyZXR1cm4gZDxjJiYoMD09PWYmJihkKz0oZj1vKCkpKmYpLDA9PT1oJiYoZCs9KGg9bygpKSpoKSxkPGwmJihkPU1hdGguc3FydChsKmQpKSxyLnZ4Kz1mKnQudmFsdWUqbi9kLHIudnkrPWgqdC52YWx1ZSpuL2QpLCEwO2lmKCEodC5sZW5ndGh8fGQ+PWMpKXsodC5kYXRhIT09cnx8dC5uZXh0KSYmKDA9PT1mJiYoZCs9KGY9bygpKSpmKSwwPT09aCYmKGQrPShoPW8oKSkqaCksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSkpO2Rve3QuZGF0YSE9PXImJihwPWlbdC5kYXRhLmluZGV4XSpuL2Qsci52eCs9ZipwLHIudnkrPWgqcCl9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gcC5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSxkKCl9LHAuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxkKCkscCk6c30scC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10KnQscCk6TWF0aC5zcXJ0KGwpfSxwLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQqdCxwKTpNYXRoLnNxcnQoYyl9LHAudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCp0LHApOk1hdGguc3FydCh1KX0scH0sdC5mb3JjZVJhZGlhbD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLHM9YSguMSk7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2Epe3ZhciBsPW5bYV0sYz1sLngtZXx8MWUtNix1PWwueS1yfHwxZS02LGY9TWF0aC5zcXJ0KGMqYyt1KnUpLGg9KG9bYV0tZikqaVthXSp0L2Y7bC52eCs9YypoLGwudnkrPXUqaH19ZnVuY3Rpb24gYygpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKW9bZV09K3QobltlXSxlLG4pLGlbZV09aXNOYU4ob1tlXSk/MDorcyhuW2VdLGUsbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09ciYmKHI9MCksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxjKCl9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxjKCksbCk6c30sbC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxjKCksbCk6dH0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxsKTpyfSxsfSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxhPTEsbz0uMDAxLHM9MS1NYXRoLnBvdyhvLDEvMzAwKSxsPTAsYz0uNix1PXIubWFwKCksZj1pLnRpbWVyKGcpLGg9bi5kaXNwYXRjaCgidGljayIsImVuZCIpO2Z1bmN0aW9uIGcoKXt2KCksaC5jYWxsKCJ0aWNrIixlKSxhPG8mJihmLnN0b3AoKSxoLmNhbGwoImVuZCIsZSkpfWZ1bmN0aW9uIHYoKXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGErPShsLWEpKnMsdS5lYWNoKGZ1bmN0aW9uKHQpe3QoYSl9KSxlPTA7ZTxuOysrZSludWxsPT0ocj10W2VdKS5meD9yLngrPXIudngqPWM6KHIueD1yLmZ4LHIudng9MCksbnVsbD09ci5meT9yLnkrPXIudnkqPWM6KHIueT1yLmZ5LHIudnk9MCl9ZnVuY3Rpb24gbSgpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtpZigoZT10W3JdKS5pbmRleD1yLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciBpPXAqTWF0aC5zcXJ0KHIpLGE9cipkO2UueD1pKk1hdGguY29zKGEpLGUueT1pKk1hdGguc2luKGEpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiB5KGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksbSgpLGU9e3RpY2s6dixyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGYucmVzdGFydChnKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGYuc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIsbSgpLHUuZWFjaCh5KSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxlKTphfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxlKTpvfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGUpOitzfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxlKTpsfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTEtdCxlKToxLWN9LGZvcmNlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09cj91LnJlbW92ZSh0KTp1LnNldCh0LHkocikpLGUpOnUuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUscixuKXt2YXIgaSxhLG8scyxsLGM9MCx1PXQubGVuZ3RoO2ZvcihudWxsPT1uP249MS8wOm4qPW4sYz0wO2M8dTsrK2MpKG89KGk9ZS0ocz10W2NdKS54KSppKyhhPXItcy55KSphKTxuJiYobD1zLG49byk7cmV0dXJuIGx9LG9uOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oaC5vbih0LHIpLGUpOmgub24odCl9fX0sdC5mb3JjZVg9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9YSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eCs9KG5bYV0taS54KSpyW2FdKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGE9MDthPG87KythKXJbYV09aXNOYU4oblthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YShudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHMoKSxvKTppfSxvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxzKCksbyk6dH0sb30sdC5mb3JjZVk9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9YSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eSs9KG5bYV0taS55KSpyW2FdKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGE9MDthPG87KythKXJbYV09aXNOYU4oblthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YShudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHMoKSxvKTppfSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxzKCksbyk6dH0sb30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9pKHIsdCgiZDMtcXVhZHRyZWUiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtZGlzcGF0Y2giKSx0KCJkMy10aW1lciIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMsbi5kMyl9LHsiZDMtY29sbGVjdGlvbiI6MTQzLCJkMy1kaXNwYXRjaCI6MTQ1LCJkMy1xdWFkdHJlZSI6MTUwLCJkMy10aW1lciI6MTUzfV0sMTQ3OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT0wLHI9dC5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKG4pZm9yKDstLW4+PTA7KWUrPXJbbl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIGEodCxlKXt2YXIgcixuLGksYSxzLHU9bmV3IGModCksZj0rdC52YWx1ZSYmKHUudmFsdWU9dC52YWx1ZSksaD1bdV07Zm9yKG51bGw9PWUmJihlPW8pO3I9aC5wb3AoKTspaWYoZiYmKHIudmFsdWU9K3IuZGF0YS52YWx1ZSksKGk9ZShyLmRhdGEpKSYmKHM9aS5sZW5ndGgpKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzKSxhPXMtMTthPj0wOy0tYSloLnB1c2gobj1yLmNoaWxkcmVuW2FdPW5ldyBjKGlbYV0pKSxuLnBhcmVudD1yLG4uZGVwdGg9ci5kZXB0aCsxO3JldHVybiB1LmVhY2hCZWZvcmUobCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBzKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBsKHQpe3ZhciBlPTA7ZG97dC5oZWlnaHQ9ZX13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrZSl9ZnVuY3Rpb24gYyh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1jLnByb3RvdHlwZT1hLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Yyxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihpKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXRoaXMsbz1bYV07ZG97Zm9yKGU9by5yZXZlcnNlKCksbz1bXTthPWUucG9wKCk7KWlmKHQoYSkscj1hLmNoaWxkcmVuKWZvcihuPTAsaT1yLmxlbmd0aDtuPGk7KytuKW8ucHVzaChyW25dKX13aGlsZShvLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dGhpcyxhPVtpXSxvPVtdO2k9YS5wb3AoKTspaWYoby5wdXNoKGkpLGU9aS5jaGlsZHJlbilmb3Iocj0wLG49ZS5sZW5ndGg7cjxuOysrcilhLnB1c2goZVtyXSk7Zm9yKDtpPW8ucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10aGlzLGk9W25dO249aS5wb3AoKTspaWYodChuKSxlPW4uY2hpbGRyZW4pZm9yKHI9ZS5sZW5ndGgtMTtyPj0wOy0tcilpLnB1c2goZVtyXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7Zm9yKHZhciByPSt0KGUuZGF0YSl8fDAsbj1lLmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO2UudmFsdWU9cn0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXQuYW5jZXN0b3JzKCksbj1lLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1yLnBvcCgpLGU9bi5wb3AoKTt0PT09ZTspaT10LHQ9ci5wb3AoKSxlPW4ucG9wKCk7cmV0dXJuIGl9KGUsdCksbj1bZV07ZSE9PXI7KWU9ZS5wYXJlbnQsbi5wdXNoKGUpO2Zvcih2YXIgaT1uLmxlbmd0aDt0IT09cjspbi5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIG59LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKS5lYWNoQmVmb3JlKHMpfX07dmFyIHU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGYodCl7Zm9yKHZhciBlLHIsbj0wLGk9KHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10Lmxlbmd0aDtuOylyPU1hdGgucmFuZG9tKCkqbi0tfDAsZT10W25dLHRbbl09dFtyXSx0W3JdPWU7cmV0dXJuIHR9KHUuY2FsbCh0KSkpLmxlbmd0aCxhPVtdO248aTspZT10W25dLHImJmQocixlKT8rK246KHI9dihhPWgoYSxlKSksbj0wKTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7dmFyIHIsbjtpZihnKGUsdCkpcmV0dXJuW2VdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpaWYocChlLHRbcl0pJiZnKG0odFtyXSxlKSx0KSlyZXR1cm5bdFtyXSxlXTtmb3Iocj0wO3I8dC5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248dC5sZW5ndGg7KytuKWlmKHAobSh0W3JdLHRbbl0pLGUpJiZwKG0odFtyXSxlKSx0W25dKSYmcChtKHRbbl0sZSksdFtyXSkmJmcoeSh0W3JdLHRbbl0sZSksdCkpcmV0dXJuW3Rbcl0sdFtuXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXQuci1lLnIsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcjwwfHxyKnI8bipuK2kqaX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5yLWUucisxZS02LG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWlmKCFkKHQsZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdih0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIG0odFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHkodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10Lngsbj10LnksaT10LnIsYT1lLngsbz1lLnkscz1lLnIsbD1hLXIsYz1vLW4sdT1zLWksZj1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrYStsL2YqdSkvMix5OihuK28rYy9mKnUpLzIscjooZitpK3MpLzJ9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXQueCxpPXQueSxhPXQucixvPWUueCxzPWUueSxsPWUucixjPXIueCx1PXIueSxmPXIucixoPW4tbyxwPW4tYyxkPWktcyxnPWktdSx2PWwtYSxtPWYtYSx5PW4qbitpKmktYSphLHg9eS1vKm8tcypzK2wqbCxiPXktYypjLXUqdStmKmYsXz1wKmQtaCpnLHc9KGQqYi1nKngpLygyKl8pLW4saz0oZyp2LWQqbSkvXyxUPShwKngtaCpiKS8oMipfKS1pLEE9KGgqbS1wKnYpL18sTT1rKmsrQSpBLTEsUz0yKihhK3cqaytUKkEpLEU9dyp3K1QqVC1hKmEsQz0tKE0/KFMrTWF0aC5zcXJ0KFMqUy00Kk0qRSkpLygyKk0pOkUvUyk7cmV0dXJue3g6bit3K2sqQyx5OmkrVCtBKkMscjpDfX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbixpLGEsbyxzPXQueC1lLngsbD10LnktZS55LGM9cypzK2wqbDtjPyhpPWUucityLnIsaSo9aSxvPXQucityLnIsaT4obyo9byk/KG49KGMrby1pKS8oMipjKSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vYy1uKm4pKSxyLng9dC54LW4qcy1hKmwsci55PXQueS1uKmwrYSpzKToobj0oYytpLW8pLygyKmMpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS9jLW4qbikpLHIueD1lLngrbipzLWEqbCxyLnk9ZS55K24qbCthKnMpKTooci54PWUueCtyLnIsci55PWUueSl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQucitlLnItMWUtNixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIF8odCl7dmFyIGU9dC5fLHI9dC5uZXh0Ll8sbj1lLnIrci5yLGk9KGUueCpyLnIrci54KmUucikvbixhPShlLnkqci5yK3IueSplLnIpL247cmV0dXJuIGkqaSthKmF9ZnVuY3Rpb24gdyh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gayh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEoaT4xKSlyZXR1cm4gZS5yO2lmKHI9dFsxXSxlLng9LXIucixyLng9ZS5yLHIueT0wLCEoaT4yKSlyZXR1cm4gZS5yK3Iucjt4KHIsZSxuPXRbMl0pLGU9bmV3IHcoZSkscj1uZXcgdyhyKSxuPW5ldyB3KG4pLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz1lO3Q6Zm9yKHM9MztzPGk7KytzKXt4KGUuXyxyLl8sbj10W3NdKSxuPW5ldyB3KG4pLGw9ci5uZXh0LGM9ZS5wcmV2aW91cyx1PXIuXy5yLGg9ZS5fLnI7ZG97aWYodTw9aCl7aWYoYihsLl8sbi5fKSl7cj1sLGUubmV4dD1yLHIucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGIoYy5fLG4uXykpeyhlPWMpLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz1lLG4ubmV4dD1yLGUubmV4dD1yLnByZXZpb3VzPXI9bixhPV8oZSk7KG49bi5uZXh0KSE9PXI7KShvPV8obikpPGEmJihlPW4sYT1vKTtyPWUubmV4dH1mb3IoZT1bci5fXSxuPXI7KG49bi5uZXh0KSE9PXI7KWUucHVzaChuLl8pO2ZvcihuPWYoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09bi54LGUueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gVCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gQSgpe3JldHVybiAwfWZ1bmN0aW9uIE0odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFModCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBFKHQpe3JldHVybiBmdW5jdGlvbihlKXtlLmNoaWxkcmVufHwoZS5yPU1hdGgubWF4KDAsK3QoZSl8fDApKX19ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtpZihuPXIuY2hpbGRyZW4pe3ZhciBuLGksYSxvPW4ubGVuZ3RoLHM9dChyKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKW5baV0ucis9cztpZihhPWsobikscylmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1zO3Iucj1hK3N9fX1mdW5jdGlvbiBMKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lLnBhcmVudDtlLnIqPXQsciYmKGUueD1yLngrdCplLngsZS55PXIueSt0KmUueSl9fWZ1bmN0aW9uIHoodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfWZ1bmN0aW9uIE8odCxlLHIsbixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihuLWUpL3QudmFsdWU7KytzPGw7KShhPW9bc10pLnkwPXIsYS55MT1pLGEueDA9ZSxhLngxPWUrPWEudmFsdWUqY312YXIgST0iJCIsRD17ZGVwdGg6LTF9LFA9e307ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBGKHQpe3JldHVybiB0LnBhcmVudElkfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gTih0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIFUodCxlLHIpe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOnJ9ZnVuY3Rpb24gcSh0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfWZ1bmN0aW9uIEgodCxlLHIsbixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihpLXIpL3QudmFsdWU7KytzPGw7KShhPW9bc10pLngwPWUsYS54MT1uLGEueTA9cixhLnkxPXIrPWEudmFsdWUqY31xLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTt2YXIgRz0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gWSh0LGUscixuLGksYSl7Zm9yKHZhciBvLHMsbCxjLHUsZixoLHAsZCxnLHYsbT1bXSx5PWUuY2hpbGRyZW4seD0wLGI9MCxfPXkubGVuZ3RoLHc9ZS52YWx1ZTt4PF87KXtsPWktcixjPWEtbjtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjxfKTtmb3IoZj1oPXUsdj11KnUqKGc9TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGQ9TWF0aC5tYXgoaC92LHYvZik7YjxfOysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8ZiYmKGY9cykscz5oJiYoaD1zKSx2PXUqdSpnLChwPU1hdGgubWF4KGgvdix2L2YpKT5kKXt1LT1zO2JyZWFrfWQ9cH1tLnB1c2gobz17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHgsYil9KSxvLmRpY2U/TyhvLHIsbixpLHc/bis9Yyp1L3c6YSk6SChvLHIsbix3P3IrPWwqdS93OmksYSksdy09dSx4PWJ9cmV0dXJuIG19dmFyIFc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7WShlLHQscixuLGksYSl9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dmFyIFg9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7aWYoKG89dC5fc3F1YXJpZnkpJiZvLnJhdGlvPT09ZSlmb3IodmFyIG8scyxsLGMsdSxmPS0xLGg9by5sZW5ndGgscD10LnZhbHVlOysrZjxoOyl7Zm9yKGw9KHM9b1tmXSkuY2hpbGRyZW4sYz1zLnZhbHVlPTAsdT1sLmxlbmd0aDtjPHU7KytjKXMudmFsdWUrPWxbY10udmFsdWU7cy5kaWNlP08ocyxyLG4saSxuKz0oYS1uKSpzLnZhbHVlL3ApOkgocyxyLG4scis9KGktcikqcy52YWx1ZS9wLGEpLHAtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1vPVkoZSx0LHIsbixpLGEpLG8ucmF0aW89ZX1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxyfShHKTt0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1lLGk9MSxhPTEsbz0hMTtmdW5jdGlvbiBzKGUpe3ZhciBzLGw9MDtlLmVhY2hBZnRlcihmdW5jdGlvbihlKXt2YXIgaT1lLmNoaWxkcmVuO2k/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UociwwKS90Lmxlbmd0aH0oaSksZS55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKG4sMCl9KGkpKTooZS54PXM/bCs9dChlLHMpOjAsZS55PTAscz1lKX0pO3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oZSksdT1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGUpLGY9Yy54LXQoYyx1KS8yLGg9dS54K3QodSxjKS8yO3JldHVybiBlLmVhY2hBZnRlcihvP2Z1bmN0aW9uKHQpe3QueD0odC54LWUueCkqaSx0Lnk9KGUueS10LnkpKmF9OmZ1bmN0aW9uKHQpe3QueD0odC54LWYpLyhoLWYpKmksdC55PSgxLShlLnk/dC55L2UueToxKSkqYX0pfXJldHVybiBzLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxzKTp0fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ITEsaT0rdFswXSxhPSt0WzFdLHMpOm8/bnVsbDpbaSxhXX0scy5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMCxpPSt0WzBdLGE9K3RbMV0scyk6bz9baSxhXTpudWxsfSxzfSx0LmhpZXJhcmNoeT1hLHQucGFjaz1mdW5jdGlvbigpe3ZhciB0PW51bGwsZT0xLHI9MSxuPUE7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9ci8yLHQ/aS5lYWNoQmVmb3JlKEUodCkpLmVhY2hBZnRlcihDKG4sLjUpKS5lYWNoQmVmb3JlKEwoMSkpOmkuZWFjaEJlZm9yZShFKFMpKS5lYWNoQWZ0ZXIoQyhBLDEpKS5lYWNoQWZ0ZXIoQyhuLGkuci9NYXRoLm1pbihlLHIpKSkuZWFjaEJlZm9yZShMKE1hdGgubWluKGUscikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PShyPWUpP251bGw6VChyKSxpKTp0O3ZhciByfSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxpKTpbZSxyXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TSgrdCksaSk6bn0saX0sdC5wYWNrU2libGluZ3M9ZnVuY3Rpb24odCl7cmV0dXJuIGsodCksdH0sdC5wYWNrRW5jbG9zZT1mLHQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9MSxlPTEscj0wLG49ITE7ZnVuY3Rpb24gaShpKXt2YXIgYT1pLmhlaWdodCsxO3JldHVybiBpLngwPWkueTA9cixpLngxPXQsaS55MT1lL2EsaS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uY2hpbGRyZW4mJk8obixuLngwLHQqKG4uZGVwdGgrMSkvZSxuLngxLHQqKG4uZGVwdGgrMikvZSk7dmFyIGk9bi54MCxhPW4ueTAsbz1uLngxLXIscz1uLnkxLXI7bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxuLngwPWksbi55MD1hLG4ueDE9byxuLnkxPXN9fShlLGEpKSxuJiZpLmVhY2hCZWZvcmUoeiksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hIXQsaSk6bn0saS5zaXplPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStyWzBdLGU9K3JbMV0saSk6W3QsZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxpKTpyfSxpfSx0LnN0cmF0aWZ5PWZ1bmN0aW9uKCl7dmFyIHQ9UixlPUY7ZnVuY3Rpb24gcihyKXt2YXIgbixpLGEsbyxzLHUsZixoPXIubGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9e307Zm9yKGk9MDtpPGg7KytpKW49cltpXSxzPXBbaV09bmV3IGMobiksbnVsbCE9KHU9dChuLGkscikpJiYodSs9IiIpJiYoZFtmPUkrKHMuaWQ9dSldPWYgaW4gZD9QOnMpO2ZvcihpPTA7aTxoOysraSlpZihzPXBbaV0sbnVsbCE9KHU9ZShyW2ldLGkscikpJiYodSs9IiIpKXtpZighKG89ZFtJK3VdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrdSk7aWYobz09PVApdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIrdSk7by5jaGlsZHJlbj9vLmNoaWxkcmVuLnB1c2gocyk6by5jaGlsZHJlbj1bc10scy5wYXJlbnQ9b31lbHNle2lmKGEpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO2E9c31pZighYSl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihhLnBhcmVudD1ELGEuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1ofSkuZWFjaEJlZm9yZShsKSxhLnBhcmVudD1udWxsLGg+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIGF9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VChlKSxyKTp0fSxyLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVQodCkscik6ZX0scn0sdC50cmVlPWZ1bmN0aW9uKCl7dmFyIHQ9QixlPTEscj0xLG49bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG89bmV3IHEodCwwKSxzPVtvXTtlPXMucG9wKCk7KWlmKG49ZS5fLmNoaWxkcmVuKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhPW4ubGVuZ3RoKSxpPWEtMTtpPj0wOy0taSlzLnB1c2gocj1lLmNoaWxkcmVuW2ldPW5ldyBxKG5baV0saSkpLHIucGFyZW50PWU7cmV0dXJuKG8ucGFyZW50PW5ldyBxKG51bGwsMCkpLmNoaWxkcmVuPVtvXSxvfShpKTtpZihsLmVhY2hBZnRlcihhKSxsLnBhcmVudC5tPS1sLnosbC5lYWNoQmVmb3JlKG8pLG4paS5lYWNoQmVmb3JlKHMpO2Vsc2V7dmFyIGM9aSx1PWksZj1pO2kuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng8Yy54JiYoYz10KSx0Lng+dS54JiYodT10KSx0LmRlcHRoPmYuZGVwdGgmJihmPXQpfSk7dmFyIGg9Yz09PXU/MTp0KGMsdSkvMixwPWgtYy54LGQ9ZS8odS54K2grcCksZz1yLyhmLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PSh0LngrcCkqZCx0Lnk9dC5kZXB0aCpnfSl9cmV0dXJuIGl9ZnVuY3Rpb24gYShlKXt2YXIgcj1lLmNoaWxkcmVuLG49ZS5wYXJlbnQuY2hpbGRyZW4saT1lLmk/bltlLmktMV06bnVsbDtpZihyKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9MCxuPTAsaT10LmNoaWxkcmVuLGE9aS5sZW5ndGg7LS1hPj0wOykoZT1pW2FdKS56Kz1yLGUubSs9cixyKz1lLnMrKG4rPWUuYyl9KGUpO3ZhciBhPShyWzBdLnorcltyLmxlbmd0aC0xXS56KS8yO2k/KGUuej1pLnordChlLl8saS5fKSxlLm09ZS56LWEpOmUuej1hfWVsc2UgaSYmKGUuej1pLnordChlLl8saS5fKSk7ZS5wYXJlbnQuQT1mdW5jdGlvbihlLHIsbil7aWYocil7Zm9yKHZhciBpLGE9ZSxvPWUscz1yLGw9YS5wYXJlbnQuY2hpbGRyZW5bMF0sYz1hLm0sdT1vLm0sZj1zLm0saD1sLm07cz1qKHMpLGE9TihhKSxzJiZhOylsPU4obCksKG89aihvKSkuYT1lLChpPXMueitmLWEuei1jK3Qocy5fLGEuXykpPjAmJihWKFUocyxlLG4pLGUsaSksYys9aSx1Kz1pKSxmKz1zLm0sYys9YS5tLGgrPWwubSx1Kz1vLm07cyYmIWoobykmJihvLnQ9cyxvLm0rPWYtdSksYSYmIU4obCkmJihsLnQ9YSxsLm0rPWMtaCxuPWUpfXJldHVybiBufShlLGksZS5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gbyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcyh0KXt0LngqPWUsdC55PXQuZGVwdGgqcn1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSExLGU9K3RbMF0scj0rdFsxXSxpKTpuP251bGw6W2Uscl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITAsZT0rdFswXSxyPSt0WzFdLGkpOm4/W2Uscl06bnVsbH0saX0sdC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIHQ9VyxlPSExLHI9MSxuPTEsaT1bMF0sYT1BLG89QSxzPUEsbD1BLGM9QTtmdW5jdGlvbiB1KHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPXIsdC55MT1uLHQuZWFjaEJlZm9yZShmKSxpPVswXSxlJiZ0LmVhY2hCZWZvcmUoeiksdH1mdW5jdGlvbiBmKGUpe3ZhciByPWlbZS5kZXB0aF0sbj1lLngwK3IsdT1lLnkwK3IsZj1lLngxLXIsaD1lLnkxLXI7ZjxuJiYobj1mPShuK2YpLzIpLGg8dSYmKHU9aD0odStoKS8yKSxlLngwPW4sZS55MD11LGUueDE9ZixlLnkxPWgsZS5jaGlsZHJlbiYmKHI9aVtlLmRlcHRoKzFdPWEoZSkvMixuKz1jKGUpLXIsdSs9byhlKS1yLChmLT1zKGUpLXIpPG4mJihuPWY9KG4rZikvMiksKGgtPWwoZSktcik8dSYmKHU9aD0odStoKS8yKSx0KGUsbix1LGYsaCkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCx1KTplfSx1LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF0sbj0rdFsxXSx1KTpbcixuXX0sdS50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVQoZSksdSk6dH0sdS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKHQpLnBhZGRpbmdPdXRlcih0KTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok0oK3QpLHUpOmF9LHUucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ1RvcCh0KS5wYWRkaW5nUmlnaHQodCkucGFkZGluZ0JvdHRvbSh0KS5wYWRkaW5nTGVmdCh0KTp1LnBhZGRpbmdUb3AoKX0sdS5wYWRkaW5nVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6b30sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTpsfSx1LnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6Y30sdX0sdC50cmVlbWFwQmluYXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPXQuY2hpbGRyZW4sbD1zLmxlbmd0aCxjPW5ldyBBcnJheShsKzEpO2ZvcihjWzBdPW89YT0wO2E8bDsrK2EpY1thKzFdPW8rPXNbYV0udmFsdWU7IWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8sbCl7aWYoZT49ci0xKXt2YXIgdT1zW2VdO3JldHVybiB1LngwPWksdS55MD1hLHUueDE9byx2b2lkKHUueTE9bCl9Zm9yKHZhciBmPWNbZV0saD1uLzIrZixwPWUrMSxkPXItMTtwPGQ7KXt2YXIgZz1wK2Q+Pj4xO2NbZ108aD9wPWcrMTpkPWd9aC1jW3AtMV08Y1twXS1oJiZlKzE8cCYmLS1wO3ZhciB2PWNbcF0tZixtPW4tdjtpZihvLWk+bC1hKXt2YXIgeT0oaSptK28qdikvbjt0KGUscCx2LGksYSx5LGwpLHQocCxyLG0seSxhLG8sbCl9ZWxzZXt2YXIgeD0oYSptK2wqdikvbjt0KGUscCx2LGksYSxvLHgpLHQocCxyLG0saSx4LG8sbCl9fSgwLGwsdC52YWx1ZSxlLHIsbixpKX0sdC50cmVlbWFwRGljZT1PLHQudHJlZW1hcFNsaWNlPUgsdC50cmVlbWFwU2xpY2VEaWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7KDEmdC5kZXB0aD9IOk8pKHQsZSxyLG4saSl9LHQudHJlZW1hcFNxdWFyaWZ5PVcsdC50cmVlbWFwUmVzcXVhcmlmeT1YLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUscixuLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKnIrKDErMyp0KzMqYS0zKm8pKm4rbyppKS82fWZ1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGE9dFtpXSxvPXRbaSsxXSxzPWk+MD90W2ktMV06MiphLW8sbD1pPGUtMT90W2krMl06MipvLWE7cmV0dXJuIHIoKG4taS9lKSplLHMsYSxvLGwpfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksYT10WyhpK2UtMSklZV0sbz10W2klZV0scz10WyhpKzEpJWVdLGw9dFsoaSsyKSVlXTtyZXR1cm4gcigobi1pL2UpKmUsYSxvLHMsbCl9fWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQrciplfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOmEoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBsKHQpe3JldHVybiAxPT0odD0rdCk/YzpmdW5jdGlvbihlLHIpe3JldHVybiByLWU/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PU1hdGgucG93KHQsciksZT1NYXRoLnBvdyhlLHIpLXQscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQrbiplLHIpfX0oZSxyLHQpOmEoaXNOYU4oZSk/cjplKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9vKHQscik6YShpc05hTih0KT9lOnQpfXZhciB1PWZ1bmN0aW9uIHQocil7dmFyIG49bChyKTtmdW5jdGlvbiBpKHQscil7dmFyIGk9bigodD1lLnJnYih0KSkuciwocj1lLnJnYihyKSkuciksYT1uKHQuZyxyLmcpLG89bih0LmIsci5iKSxzPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9YShlKSx0LmI9byhlKSx0Lm9wYWNpdHk9cyhlKSx0KyIifX1yZXR1cm4gaS5nYW1tYT10LGl9KDEpO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKTtmb3Iobj0wO248YTsrK24paT1lLnJnYihyW25dKSxvW25dPWkucnx8MCxzW25dPWkuZ3x8MCxsW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLHM9dChzKSxsPXQobCksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1zKHQpLGkuYj1sKHQpLGkrIiJ9fX12YXIgaD1mKG4pLHA9ZihpKTtmdW5jdGlvbiBkKHQsZSl7dmFyIHIsbj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKG4sdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkobik7Zm9yKHI9MDtyPGk7KytyKWFbcl09Xyh0W3JdLGVbcl0pO2Zvcig7cjxuOysrcilvW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxpOysrcilvW3JdPWFbcl0odCk7cmV0dXJuIG99fWZ1bmN0aW9uIGcodCxlKXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKHQrZSpuKSxyfX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIHQrZSpyfX1mdW5jdGlvbiBtKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSlyIGluIHQ/bltyXT1fKHRbcl0sZVtyXSk6aVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19dmFyIHk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHg9bmV3IFJlZ0V4cCh5LnNvdXJjZSwiZyIpO2Z1bmN0aW9uIGIodCxlKXt2YXIgcixuLGksYT15Lmxhc3RJbmRleD14Lmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj15LmV4ZWModCkpJiYobj14LmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDp2KHIsbil9KSksYT14Lmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShsWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gXyh0LHIpe3ZhciBuLGk9dHlwZW9mIHI7cmV0dXJuIG51bGw9PXJ8fCJib29sZWFuIj09PWk/YShyKTooIm51bWJlciI9PT1pP3Y6InN0cmluZyI9PT1pPyhuPWUuY29sb3IocikpPyhyPW4sdSk6YjpyIGluc3RhbmNlb2YgZS5jb2xvcj91OnIgaW5zdGFuY2VvZiBEYXRlP2c6QXJyYXkuaXNBcnJheShyKT9kOiJmdW5jdGlvbiIhPXR5cGVvZiByLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiByLnRvU3RyaW5nfHxpc05hTihyKT9tOnYpKHQscil9dmFyIHcsayxULEEsTT0xODAvTWF0aC5QSSxTPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIEUodCxlLHIsbixpLGEpe3ZhciBvLHMsbDtyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwobD10KnIrZSpuKSYmKHItPXQqbCxuLT1lKmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksdCpuPGUqciYmKHQ9LXQsZT0tZSxsPS1sLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqTSxza2V3WDpNYXRoLmF0YW4obCkqTSxzY2FsZVg6byxzY2FsZVk6c319ZnVuY3Rpb24gQyh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxsPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQsbixpLGEsbyxzKXtpZih0IT09aXx8biE9PWEpe3ZhciBsPW8ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwscik7cy5wdXNoKHtpOmwtNCx4OnYodCxpKX0se2k6bC0yLHg6dihuLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrYStyKX0oYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLHMsbCksZnVuY3Rpb24odCxlLHIsYSl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLGEucHVzaCh7aTpyLnB1c2goaShyKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6dih0LGUpfSkpOmUmJnIucHVzaChpKHIpKyJyb3RhdGUoIitlK24pfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lP2EucHVzaCh7aTpyLnB1c2goaShyKSsic2tld1goIixudWxsLG4pLTIseDp2KHQsZSl9KTplJiZyLnB1c2goaShyKSsic2tld1goIitlK24pfShhLnNrZXdYLG8uc2tld1gscyxsKSxmdW5jdGlvbih0LGUscixuLGEsbyl7aWYodCE9PXJ8fGUhPT1uKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OnYodCxyKX0se2k6cy0yLHg6dihlLG4pfSl9ZWxzZSAxPT09ciYmMT09PW58fGEucHVzaChpKGEpKyJzY2FsZSgiK3IrIiwiK24rIikiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxsKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPWwubGVuZ3RoOysrcjxuOylzWyhlPWxbcl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBMPUMoZnVuY3Rpb24odCl7cmV0dXJuIm5vbmUiPT09dD9TOih3fHwodz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxrPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxUPWRvY3VtZW50LmRlZmF1bHRWaWV3KSx3LnN0eWxlLnRyYW5zZm9ybT10LHQ9VC5nZXRDb21wdXRlZFN0eWxlKGsuYXBwZW5kQ2hpbGQodyksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksay5yZW1vdmVDaGlsZCh3KSxFKCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9LCJweCwgIiwicHgpIiwiZGVnKSIpLHo9QyhmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9TOihBfHwoQT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxBLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1BLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP0UoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6Uyl9LCIsICIsIikiLCIpIiksTz1NYXRoLlNRUlQyLEk9MixEPTQsUD0xZS0xMjtmdW5jdGlvbiBSKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIEYodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhzbChyKSkuaCwobj1lLmhzbChuKSkuaCksYT1jKHIucyxuLnMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLnM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyKyIifX19dmFyIEI9RihzKSxOPUYoYyk7ZnVuY3Rpb24gaih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaGNsKHIpKS5oLChuPWUuaGNsKG4pKS5oKSxhPWMoci5jLG4uYyksbz1jKHIubCxuLmwpLHM9YyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIuYz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1zKHQpLHIrIiJ9fX12YXIgVj1qKHMpLFU9aihjKTtmdW5jdGlvbiBxKHQpe3JldHVybiBmdW5jdGlvbiByKG4pe2Z1bmN0aW9uIGkocixpKXt2YXIgYT10KChyPWUuY3ViZWhlbGl4KHIpKS5oLChpPWUuY3ViZWhlbGl4KGkpKS5oKSxvPWMoci5zLGkucykscz1jKHIubCxpLmwpLGw9YyhyLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1hKHQpLHIucz1vKHQpLHIubD1zKE1hdGgucG93KHQsbikpLHIub3BhY2l0eT1sKHQpLHIrIiJ9fXJldHVybiBuPStuLGkuZ2FtbWE9cixpfSgxKX12YXIgSD1xKHMpLEc9cShjKTt0LmludGVycG9sYXRlPV8sdC5pbnRlcnBvbGF0ZUFycmF5PWQsdC5pbnRlcnBvbGF0ZUJhc2lzPW4sdC5pbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkPWksdC5pbnRlcnBvbGF0ZURhdGU9Zyx0LmludGVycG9sYXRlRGlzY3JldGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IociplKSkpXX19LHQuaW50ZXJwb2xhdGVIdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1zKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9cih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSx0LmludGVycG9sYXRlTnVtYmVyPXYsdC5pbnRlcnBvbGF0ZU9iamVjdD1tLHQuaW50ZXJwb2xhdGVSb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQrZSpyKX19LHQuaW50ZXJwb2xhdGVTdHJpbmc9Yix0LmludGVycG9sYXRlVHJhbnNmb3JtQ3NzPUwsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Zz16LHQuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxmPWwtYSxoPXUqdStmKmY7aWYoaDxQKW49TWF0aC5sb2coYy9vKS9PLHI9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCp1LGErdCpmLG8qTWF0aC5leHAoTyp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoaCksZD0oYypjLW8qbytEKmgpLygyKm8qSSpwKSxnPShjKmMtbypvLUQqaCkvKDIqYypJKnApLHY9TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSxtPU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0obS12KS9PLHI9ZnVuY3Rpb24odCl7dmFyIGUscj10Km4scz1SKHYpLGw9by8oSSpwKSoocyooZT1PKnIrdiwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfSh2KSk7cmV0dXJuW2krbCp1LGErbCpmLG8qcy9SKE8qcit2KV19fXJldHVybiByLmR1cmF0aW9uPTFlMypuLHJ9LHQuaW50ZXJwb2xhdGVSZ2I9dSx0LmludGVycG9sYXRlUmdiQmFzaXM9aCx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9cCx0LmludGVycG9sYXRlSHNsPUIsdC5pbnRlcnBvbGF0ZUhzbExvbmc9Tix0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKHQscil7dmFyIG49YygodD1lLmxhYih0KSkubCwocj1lLmxhYihyKSkubCksaT1jKHQuYSxyLmEpLGE9Yyh0LmIsci5iKSxvPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX0sdC5pbnRlcnBvbGF0ZUhjbD1WLHQuaW50ZXJwb2xhdGVIY2xMb25nPVUsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1ILHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPUcsdC5waWVjZXdpc2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KG48MD8wOm4pO3I8bjspYVtyXT10KGksaT1lWysrcl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKHQqPW4pKSk7cmV0dXJuIGFbZV0odC1lKX19LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dChuLyhlLTEpKTtyZXR1cm4gcn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9pKHIsdCgiZDMtY29sb3IiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMpfSx7ImQzLWNvbG9yIjoxNDR9XSwxNDk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPU1hdGguUEkscj0yKmUsbj1yLTFlLTY7ZnVuY3Rpb24gaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGEoKXtyZXR1cm4gbmV3IGl9aS5wcm90b3R5cGU9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQscixuLGksYSl7dD0rdCxyPStyLG49K24saT0raSxhPSthO3ZhciBvPXRoaXMuX3gxLHM9dGhpcy5feTEsbD1uLXQsYz1pLXIsdT1vLXQsZj1zLXIsaD11KnUrZipmO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIithKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9cik7ZWxzZSBpZihoPjFlLTYpaWYoTWF0aC5hYnMoZipsLWMqdSk+MWUtNiYmYSl7dmFyIHA9bi1vLGQ9aS1zLGc9bCpsK2MqYyx2PXAqcCtkKmQsbT1NYXRoLnNxcnQoZykseT1NYXRoLnNxcnQoaCkseD1hKk1hdGgudGFuKChlLU1hdGguYWNvcygoZytoLXYpLygyKm0qeSkpKS8yKSxiPXgveSxfPXgvbTtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisocitiKmYpKSx0aGlzLl8rPSJBIithKyIsIithKyIsMCwwLCIrICsoZipwPnUqZCkrIiwiKyh0aGlzLl94MT10K18qbCkrIiwiKyh0aGlzLl95MT1yK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1yKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsaSxhLG8scyxsKXt0PSt0LGk9K2k7dmFyIGM9KGE9K2EpKk1hdGguY29zKG8pLHU9YSpNYXRoLnNpbihvKSxmPXQrYyxoPWkrdSxwPTFebCxkPWw/by1zOnMtbztpZihhPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrYSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2YrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLWYpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWgpPjFlLTYpJiYodGhpcy5fKz0iTCIrZisiLCIraCksYSYmKGQ8MCYmKGQ9ZCVyK3IpLGQ+bj90aGlzLl8rPSJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHQtYykrIiwiKyhpLXUpKyJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHRoaXMuX3gxPWYpKyIsIisodGhpcy5feTE9aCk6ZD4xZS02JiYodGhpcy5fKz0iQSIrYSsiLCIrYSsiLDAsIisgKyhkPj1lKSsiLCIrcCsiLCIrKHRoaXMuX3gxPXQrYSpNYXRoLmNvcyhzKSkrIiwiKyh0aGlzLl95MT1pK2EqTWF0aC5zaW4ocykpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX0sdC5wYXRoPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSgib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTUwOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD10Ll9yb290LGQ9e2RhdGE6bn0sZz10Ll94MCx2PXQuX3kwLG09dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1kLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KGE9KGcrbSkvMikpP2c9YTptPWEsKHU9cj49KG89KHYreSkvMikpP3Y9bzp5PW8saT1wLCEocD1wW2Y9dTw8MXxjXSkpcmV0dXJuIGlbZl09ZCx0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmcj09PWwpcmV0dXJuIGQubmV4dD1wLGk/aVtmXT1kOnQuX3Jvb3Q9ZCx0O2Rve2k9aT9pW2ZdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0oYT0oZyttKS8yKSk/Zz1hOm09YSwodT1yPj0obz0odit5KS8yKSk/dj1vOnk9b313aGlsZSgoZj11PDwxfGMpPT0oaD0obD49byk8PDF8cz49YSkpO3JldHVybiBpW2hdPXAsaVtmXT1kLHR9dmFyIHI9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9O2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgYT1uZXcgbyhudWxsPT1lP246ZSxudWxsPT1yP2k6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P2E6YS5hZGRBbGwodCl9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0scj1lO3Q9dC5uZXh0OylyPXIubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBsPWEucHJvdG90eXBlPW8ucHJvdG90eXBlO2wuY29weT1mdW5jdGlvbigpe3ZhciB0LGUscj1uZXcgbyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLG49dGhpcy5fcm9vdDtpZighbilyZXR1cm4gcjtpZighbi5sZW5ndGgpcmV0dXJuIHIuX3Jvb3Q9cyhuKSxyO2Zvcih0PVt7c291cmNlOm4sdGFyZ2V0OnIuX3Jvb3Q9bmV3IEFycmF5KDQpfV07bj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShlPW4uc291cmNlW2ldKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0Om4udGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOm4udGFyZ2V0W2ldPXMoZSkpO3JldHVybiByfSxsLmFkZD1mdW5jdGlvbih0KXt2YXIgcj0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGUodGhpcy5jb3ZlcihyLG4pLHIsbix0KX0sbC5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIHIsbixpLGEsbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTEvMCx1PTEvMCxmPS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCxyPXRbbl0pKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwscikpfHwoc1tuXT1pLGxbbl09YSxpPGMmJihjPWkpLGk+ZiYmKGY9aSksYTx1JiYodT1hKSxhPmgmJihoPWEpKTtmb3IoZjxjJiYoYz10aGlzLl94MCxmPXRoaXMuX3gxKSxoPHUmJih1PXRoaXMuX3kwLGg9dGhpcy5feTEpLHRoaXMuY292ZXIoYyx1KS5jb3ZlcihmLGgpLG49MDtuPG87KytuKWUodGhpcyxzW25dLGxbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LGwuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy5feDAsbj10aGlzLl95MCxpPXRoaXMuX3gxLGE9dGhpcy5feTE7aWYoaXNOYU4ocikpaT0ocj1NYXRoLmZsb29yKHQpKSsxLGE9KG49TWF0aC5mbG9vcihlKSkrMTtlbHNle2lmKCEocj50fHx0Pml8fG4+ZXx8ZT5hKSlyZXR1cm4gdGhpczt2YXIgbyxzLGw9aS1yLGM9dGhpcy5fcm9vdDtzd2l0Y2gocz0oZTwobithKS8yKTw8MXx0PChyK2kpLzIpe2Nhc2UgMDpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKGE9bisobCo9MiksdD4oaT1yK2wpfHxlPmEpO2JyZWFrO2Nhc2UgMTpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKGE9bisobCo9MiksKHI9aS1sKT50fHxlPmEpO2JyZWFrO2Nhc2UgMjpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKG49YS0obCo9MiksdD4oaT1yK2wpfHxuPmUpO2JyZWFrO2Nhc2UgMzpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKG49YS0obCo9MiksKHI9aS1sKT50fHxuPmUpfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1jKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzfSxsLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSksdH0sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LGwuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIGksYSxvLHMsbCxjLHUsZj10aGlzLl94MCxoPXRoaXMuX3kwLHA9dGhpcy5feDEsZD10aGlzLl95MSxnPVtdLHY9dGhpcy5fcm9vdDtmb3IodiYmZy5wdXNoKG5ldyByKHYsZixoLHAsZCkpLG51bGw9PW4/bj0xLzA6KGY9dC1uLGg9ZS1uLHA9dCtuLGQ9ZStuLG4qPW4pO2M9Zy5wb3AoKTspaWYoISghKHY9Yy5ub2RlKXx8KGE9Yy54MCk+cHx8KG89Yy55MCk+ZHx8KHM9Yy54MSk8Znx8KGw9Yy55MSk8aCkpaWYodi5sZW5ndGgpe3ZhciBtPShhK3MpLzIseT0obytsKS8yO2cucHVzaChuZXcgcih2WzNdLG0seSxzLGwpLG5ldyByKHZbMl0sYSx5LG0sbCksbmV3IHIodlsxXSxtLG8scyx5KSxuZXcgcih2WzBdLGEsbyxtLHkpKSwodT0oZT49eSk8PDF8dD49bSkmJihjPWdbZy5sZW5ndGgtMV0sZ1tnLmxlbmd0aC0xXT1nW2cubGVuZ3RoLTEtdV0sZ1tnLmxlbmd0aC0xLXVdPWMpfWVsc2V7dmFyIHg9dC0rdGhpcy5feC5jYWxsKG51bGwsdi5kYXRhKSxiPWUtK3RoaXMuX3kuY2FsbChudWxsLHYuZGF0YSksXz14KngrYipiO2lmKF88bil7dmFyIHc9TWF0aC5zcXJ0KG49Xyk7Zj10LXcsaD1lLXcscD10K3csZD1lK3csaT12LmRhdGF9fXJldHVybiBpfSxsLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihhPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscD10aGlzLl9yb290LGQ9dGhpcy5feDAsZz10aGlzLl95MCx2PXRoaXMuX3gxLG09dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigoYz1hPj0ocz0oZCt2KS8yKSk/ZD1zOnY9cywodT1vPj0obD0oZyttKS8yKSk/Zz1sOm09bCxlPXAsIShwPXBbZj11PDwxfGNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KGVbZisxJjNdfHxlW2YrMiYzXXx8ZVtmKzMmM10pJiYocj1lLGg9Zil9Zm9yKDtwLmRhdGEhPT10OylpZihuPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxuPyhpP24ubmV4dD1pOmRlbGV0ZSBuLm5leHQsdGhpcyk6ZT8oaT9lW2ZdPWk6ZGVsZXRlIGVbZl0sKHA9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJnA9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFwLmxlbmd0aCYmKHI/cltoXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0sbC5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxsLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sbC5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pLHR9LGwudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixpLGEsbyxzLGw9W10sYz10aGlzLl9yb290O2ZvcihjJiZsLnB1c2gobmV3IHIoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bC5wb3AoKTspaWYoIXQoYz1lLm5vZGUsaT1lLngwLGE9ZS55MCxvPWUueDEscz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShpK28pLzIsZj0oYStzKS8yOyhuPWNbM10pJiZsLnB1c2gobmV3IHIobix1LGYsbyxzKSksKG49Y1syXSkmJmwucHVzaChuZXcgcihuLGksZix1LHMpKSwobj1jWzFdKSYmbC5wdXNoKG5ldyByKG4sdSxhLG8sZikpLChuPWNbMF0pJiZsLnB1c2gobmV3IHIobixpLGEsdSxmKSl9cmV0dXJuIHRoaXN9LGwudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgcih0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGE9ZS5ub2RlO2lmKGEubGVuZ3RoKXt2YXIgbyxzPWUueDAsbD1lLnkwLGM9ZS54MSx1PWUueTEsZj0ocytjKS8yLGg9KGwrdSkvMjsobz1hWzBdKSYmbi5wdXNoKG5ldyByKG8scyxsLGYsaCkpLChvPWFbMV0pJiZuLnB1c2gobmV3IHIobyxmLGwsYyxoKSksKG89YVsyXSkmJm4ucHVzaChuZXcgcihvLHMsaCxmLHUpKSwobz1hWzNdKSYmbi5wdXNoKG5ldyByKG8sZixoLGMsdSkpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LHQucXVhZHRyZWU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpO249dGhpcyxpPWZ1bmN0aW9uKHQsZSxyLG4saSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19aT1pJiZpLmhhc093blByb3BlcnR5KCJkZWZhdWx0Iik/aS5kZWZhdWx0Omk7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9O2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gZih0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGYodC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LnBhcnRPZkN5Y2xlPT09ZS5wYXJ0T2ZDeWNsZT90LnkwLWUueTA6InRvcCI9PT10LmNpcmN1bGFyTGlua1R5cGV8fCJib3R0b20iPT09ZS5jaXJjdWxhckxpbmtUeXBlPy0xOjF9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBwKHQpe3JldHVybih0LnkwK3QueTEpLzJ9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gcCh0LnNvdXJjZSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gcCh0LnRhcmdldCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBtKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24geCh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuIGUodCl9dmFyIF89MjUsdz0xMCxrPS4zO2Z1bmN0aW9uIFQodCxlKXt2YXIgcj0wLG49MDt0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24oaSl7aS5jaXJjdWxhciYmKGkuc291cmNlLmNpcmN1bGFyTGlua1R5cGV8fGkudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU/aS5jaXJjdWxhckxpbmtUeXBlPWkuc291cmNlLmNpcmN1bGFyTGlua1R5cGU/aS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZTppLnRhcmdldC5jaXJjdWxhckxpbmtUeXBlOmkuY2lyY3VsYXJMaW5rVHlwZT1yPG4/InRvcCI6ImJvdHRvbSIsInRvcCI9PWkuY2lyY3VsYXJMaW5rVHlwZT9yKz0xOm4rPTEsdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IodCxlKSE9YihpLnNvdXJjZSxlKSYmYih0LGUpIT1iKGkudGFyZ2V0LGUpfHwodC5jaXJjdWxhckxpbmtUeXBlPWkuY2lyY3VsYXJMaW5rVHlwZSl9KSl9KSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9PXQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGUmJih0LmNpcmN1bGFyTGlua1R5cGU9dC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZSksWSh0LGUpJiYodC5jaXJjdWxhckxpbmtUeXBlPXQuc291cmNlLmNpcmN1bGFyTGlua1R5cGUpKX0pfWZ1bmN0aW9uIEEodCl7dmFyIGU9TWF0aC5hYnModC55MS10LnkwKSxyPU1hdGguYWJzKHQudGFyZ2V0LngwLXQuc291cmNlLngxKTtyZXR1cm4gTWF0aC5hdGFuKHIvZSl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPTA7dC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3I9dC5jaXJjdWxhciYmIVkodCxlKT9yKzE6cn0pO3ZhciBuPTA7cmV0dXJuIHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtuPXQuY2lyY3VsYXImJiFZKHQsZSk/bisxOm59KSxyK259ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnNvdXJjZS5zb3VyY2VMaW5rcyxyPTA7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3I9dC5jaXJjdWxhcj9yKzE6cn0pO3ZhciBuPXQudGFyZ2V0LnRhcmdldExpbmtzLGk9MDtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2k9dC5jaXJjdWxhcj9pKzE6aX0pLCEocj4xfHxpPjEpfWZ1bmN0aW9uIEUodCxlLHIpe3JldHVybiB0LnNvcnQoTCksdC5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7dmFyIGEsbyxzPTA7aWYoWShuLHIpJiZTKG4pKW4uY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcj1zK24ud2lkdGgvMjtlbHNle2Zvcih2YXIgbD0wO2w8aTtsKyspaWYoYT10W2ldLG89dFtsXSwhKGEuc291cmNlLmNvbHVtbjxvLnRhcmdldC5jb2x1bW58fGEudGFyZ2V0LmNvbHVtbj5vLnNvdXJjZS5jb2x1bW4pKXt2YXIgYz10W2xdLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIrdFtsXS53aWR0aC8yK2U7cz1jPnM/YzpzfW4uY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcj1zK24ud2lkdGgvMn19KSx0fWZ1bmN0aW9uIEModCxyLGksYSl7dmFyIG89ZS5taW4odC5saW5rcyxmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UueTB9KTt0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuY2lyY3VsYXJQYXRoRGF0YT17fSl9KSxFKHQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGV9KSxyLGEpLEUodC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZX0pLHIsYSksdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUuY2lyY3VsYXIpe2lmKGUuY2lyY3VsYXJQYXRoRGF0YS5hcmNSYWRpdXM9ZS53aWR0aCt3LGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXI9NSxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGg9ZS5zb3VyY2UueDEtZS5zb3VyY2UueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVg9ZS5zb3VyY2UueDArZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVdpZHRoLGUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYPWUudGFyZ2V0LngwLGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZPWUueTAsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk9ZS55MSxZKGUsYSkmJlMoZSkpZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz13K2Uud2lkdGgvMixlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yLCJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9ZS5zb3VyY2UueTErXytlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpOihlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PWUuc291cmNlLnkwLV8tZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTtlbHNle3ZhciBzPWUuc291cmNlLmNvbHVtbixsPWUuY2lyY3VsYXJMaW5rVHlwZSxjPXQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvdXJjZS5jb2x1bW49PXMmJnQuY2lyY3VsYXJMaW5rVHlwZT09bH0pOyJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/Yy5zb3J0KE8pOmMuc29ydCh6KTt2YXIgdT0wO2MuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yK3UsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cz13K2Uud2lkdGgvMituKnIrdSksdSs9dC53aWR0aH0pLHM9ZS50YXJnZXQuY29sdW1uLGM9dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0LmNvbHVtbj09cyYmdC5jaXJjdWxhckxpbmtUeXBlPT1sfSksImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT9jLnNvcnQoRCk6Yy5zb3J0KEkpLHU9MCxjLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9dytlLndpZHRoLzIrdSxlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cz13K2Uud2lkdGgvMituKnIrdSksdSs9dC53aWR0aH0pLCJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9TWF0aC5tYXgoaSxlLnNvdXJjZS55MSxlLnRhcmdldC55MSkrXytlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpOihlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PW8tXy1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpfWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnROb2RlQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYLWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYK2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnROb2RlQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcn1pZihlLmNpcmN1bGFyKWUucGF0aD1mdW5jdGlvbih0KXt2YXIgZT0iIjtlPSJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/Ik0iK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYKyIgIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50KyIgIisodC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVktdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cykrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAwIDAgMCAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WS10LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cykrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMrIiAwIDAgMCAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYKyIgIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WToiTSIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSt0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiIDAgMCAxICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cysiIDAgMCAxICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZO3JldHVybiBlfShlKTtlbHNle3ZhciBmPW4ubGlua0hvcml6b250YWwoKS5zb3VyY2UoZnVuY3Rpb24odCl7cmV0dXJuW3Quc291cmNlLngwKyh0LnNvdXJjZS54MS10LnNvdXJjZS54MCksdC55MF19KS50YXJnZXQoZnVuY3Rpb24odCl7cmV0dXJuW3QudGFyZ2V0LngwLHQueTFdfSk7ZS5wYXRoPWYoZSl9fSl9ZnVuY3Rpb24gTCh0LGUpe3JldHVybiBQKHQpPT1QKGUpPyJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGU/Tyh0LGUpOnoodCxlKTpQKGUpLVAodCl9ZnVuY3Rpb24geih0LGUpe3JldHVybiB0LnkwLWUueTB9ZnVuY3Rpb24gTyh0LGUpe3JldHVybiBlLnkwLXQueTB9ZnVuY3Rpb24gSSh0LGUpe3JldHVybiB0LnkxLWUueTF9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiBlLnkxLXQueTF9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gdC50YXJnZXQuY29sdW1uLXQuc291cmNlLmNvbHVtbn1mdW5jdGlvbiBSKHQpe3JldHVybiB0LnRhcmdldC54MC10LnNvdXJjZS54MX1mdW5jdGlvbiBGKHQsZSl7dmFyIHI9QSh0KSxuPVIoZSkvTWF0aC50YW4ocik7cmV0dXJuInVwIj09Ryh0KT90LnkxK246dC55MS1ufWZ1bmN0aW9uIEIodCxlKXt2YXIgcj1BKHQpLG49UihlKS9NYXRoLnRhbihyKTtyZXR1cm4idXAiPT1HKHQpP3QueTEtbjp0LnkxK259ZnVuY3Rpb24gTih0LGUscixuKXt0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoIWkuY2lyY3VsYXImJmkudGFyZ2V0LmNvbHVtbi1pLnNvdXJjZS5jb2x1bW4+MSl7dmFyIGE9aS5zb3VyY2UuY29sdW1uKzEsbz1pLnRhcmdldC5jb2x1bW4tMSxzPTEsbD1vLWErMTtmb3Iocz0xO2E8PW87YSsrLHMrKyl0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby5jb2x1bW49PWEpe3ZhciBjLHU9cy8obCsxKSxmPU1hdGgucG93KDEtdSwzKSxoPTMqdSpNYXRoLnBvdygxLXUsMikscD0zKk1hdGgucG93KHUsMikqKDEtdSksZD1NYXRoLnBvdyh1LDMpLGc9ZippLnkwK2gqaS55MCtwKmkueTErZCppLnkxLHY9Zy1pLndpZHRoLzIsbT1nK2kud2lkdGgvMjt2Pm8ueTAmJnY8by55MT8oYz1vLnkxLXYrMTAsYz0iYm90dG9tIj09by5jaXJjdWxhckxpbmtUeXBlP2M6LWMsbz1WKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtiKHQsbikhPWIobyxuKSYmdC5jb2x1bW49PW8uY29sdW1uJiZqKG8sdCkmJlYodCxjLGUscil9KSk6bT5vLnkwJiZtPG8ueTE/KGM9bS1vLnkwKzEwLG89VihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmdC55MDxvLnkxJiZ0LnkxPm8ueTEmJlYodCxjLGUscil9KSk6djxvLnkwJiZtPm8ueTEmJihjPW0tby55MCsxMCxvPVYobyxjLGUsciksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJnQueTA8by55MSYmdC55MT5vLnkxJiZWKHQsYyxlLHIpfSkpfX0pfX0pfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdC55MD5lLnkwJiZ0LnkwPGUueTF8fCh0LnkxPmUueTAmJnQueTE8ZS55MXx8dC55MDxlLnkwJiZ0LnkxPmUueTEpfWZ1bmN0aW9uIFYodCxlLHIsbil7cmV0dXJuIHQueTArZT49ciYmdC55MStlPD1uJiYodC55MD10LnkwK2UsdC55MT10LnkxK2UsdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTE9dC55MStlfSksdC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9dC55MCtlfSkpLHR9ZnVuY3Rpb24gVSh0LGUscixuKXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24oaSl7biYmaS55KyhpLnkxLWkueTApPmUmJihpLnk9aS55LShpLnkrKGkueTEtaS55MCktZSkpO3ZhciBhPXQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQuc291cmNlLHIpPT1iKGkscil9KSxvPWEubGVuZ3RoO28+MSYmYS5zb3J0KGZ1bmN0aW9uKHQsZSl7aWYoIXQuY2lyY3VsYXImJiFlLmNpcmN1bGFyKXtpZih0LnRhcmdldC5jb2x1bW49PWUudGFyZ2V0LmNvbHVtbilyZXR1cm4gdC55MS1lLnkxO2lmKCFIKHQsZSkpcmV0dXJuIHQueTEtZS55MTtpZih0LnRhcmdldC5jb2x1bW4+ZS50YXJnZXQuY29sdW1uKXt2YXIgcj1CKGUsdCk7cmV0dXJuIHQueTEtcn1pZihlLnRhcmdldC5jb2x1bW4+dC50YXJnZXQuY29sdW1uKXJldHVybiBCKHQsZSktZS55MX1yZXR1cm4gdC5jaXJjdWxhciYmIWUuY2lyY3VsYXI/InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOmUuY2lyY3VsYXImJiF0LmNpcmN1bGFyPyJ0b3AiPT1lLmNpcmN1bGFyTGlua1R5cGU/MTotMTp0LmNpcmN1bGFyJiZlLmNpcmN1bGFyP3QuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmInRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/dC50YXJnZXQueTEtZS50YXJnZXQueTE6ZS50YXJnZXQuY29sdW1uLXQudGFyZ2V0LmNvbHVtbjp0LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJiJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGU/dC50YXJnZXQuY29sdW1uPT09ZS50YXJnZXQuY29sdW1uP2UudGFyZ2V0LnkxLXQudGFyZ2V0LnkxOnQudGFyZ2V0LmNvbHVtbi1lLnRhcmdldC5jb2x1bW46InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOnZvaWQgMH0pO3ZhciBzPWkueTA7YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9cyt0LndpZHRoLzIscys9dC53aWR0aH0pLGEuZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKCJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgcj1lKzEsbj0wO3I8bztyKyspbis9YVtyXS53aWR0aDt0LnkwPWkueTEtbi10LndpZHRoLzJ9fSl9KX1mdW5jdGlvbiBxKHQsZSxyKXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGIodC50YXJnZXQscik9PWIoZSxyKX0pLGk9bi5sZW5ndGg7aT4xJiZuLnNvcnQoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQuc291cmNlLmNvbHVtbj09ZS5zb3VyY2UuY29sdW1uKXJldHVybiB0LnkwLWUueTA7aWYoIUgodCxlKSlyZXR1cm4gdC55MC1lLnkwO2lmKGUuc291cmNlLmNvbHVtbjx0LnNvdXJjZS5jb2x1bW4pe3ZhciByPUYoZSx0KTtyZXR1cm4gdC55MC1yfWlmKHQuc291cmNlLmNvbHVtbjxlLnNvdXJjZS5jb2x1bW4pcmV0dXJuIEYodCxlKS1lLnkwfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTp0LnNvdXJjZS5jb2x1bW4tZS5zb3VyY2UuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnNvdXJjZS5jb2x1bW49PT1lLnNvdXJjZS5jb2x1bW4/dC5zb3VyY2UueTEtZS5zb3VyY2UueTE6ZS5zb3VyY2UuY29sdW1uLXQuc291cmNlLmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSk7dmFyIGE9ZS55MDtuLmZvckVhY2goZnVuY3Rpb24odCl7dC55MT1hK3Qud2lkdGgvMixhKz10LndpZHRofSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQscil7aWYoImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZSl7Zm9yKHZhciBhPXIrMSxvPTA7YTxpO2ErKylvKz1uW2FdLndpZHRoO3QueTE9ZS55MS1vLXQud2lkdGgvMn19KX0pfWZ1bmN0aW9uIEgodCxlKXtyZXR1cm4gRyh0KT09RyhlKX1mdW5jdGlvbiBHKHQpe3JldHVybiB0LnkwLXQueTE+MD8idXAiOiJkb3duIn1mdW5jdGlvbiBZKHQsZSl7cmV0dXJuIGIodC5zb3VyY2UsZSk9PWIodC50YXJnZXQsZSl9dC5zYW5rZXlDaXJjdWxhcj1mdW5jdGlvbigpe3ZhciB0LG4sYT0wLGI9MCxBPTEsUz0xLEU9MjQsTD12LHo9byxPPW0sST15LEQ9MzIsUD0yLFI9bnVsbDtmdW5jdGlvbiBGKCl7dmFyIG89e25vZGVzOk8uYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOkkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTshZnVuY3Rpb24odCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pO3ZhciBlPXIubWFwKHQubm9kZXMsTCk7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7Im9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBuPyJ1bmRlZmluZWQiOmwobikpJiYobj10LnNvdXJjZT14KGUsbikpLCJvYmplY3QiIT09KCJ1bmRlZmluZWQiPT10eXBlb2YgaT8idW5kZWZpbmVkIjpsKGkpKSYmKGk9dC50YXJnZXQ9eChlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSl9KG8pLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0wO2lmKG51bGw9PT1yKXtmb3IodmFyIGE9W10sbz0wO288dC5saW5rcy5sZW5ndGg7bysrKXt2YXIgcz10LmxpbmtzW29dLGw9cy5zb3VyY2UuaW5kZXgsYz1zLnRhcmdldC5pbmRleDthW2xdfHwoYVtsXT1bXSksYVtjXXx8KGFbY109W10pLC0xPT09YVtsXS5pbmRleE9mKGMpJiZhW2xdLnB1c2goYyl9dmFyIHU9aShhKTt1LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KTt2YXIgZj17fTtmb3Iobz0wO288dS5sZW5ndGg7bysrKXtmb3IodmFyIGg9dVtvXSxwPSExLGQ9MDtkPGgubGVuZ3RoLTE7ZCsrKWlmKGZbaFtkXV18fChmW2hbZF1dPXt9KSxmW2hbZF1dJiZmW2hbZF1dW2hbZCsxXV0pe3A9ITA7YnJlYWt9aWYoIXApe3ZhciBnPWguc2xpY2UoLTIpO2ZbZ1swXV1bZ1sxXV09ITB9fXQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldC5pbmRleCxyPXQuc291cmNlLmluZGV4O2U9PT1yfHxmW3JdJiZmW3JdW2VdPyh0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKTp0LmNpcmN1bGFyPSExfSl9ZWxzZSB0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zb3VyY2Vbcl08dC50YXJnZXRbcl0/dC5jaXJjdWxhcj0hMToodC5jaXJjdWxhcj0hMCx0LmNpcmN1bGFyTGlua0lEPW4sbis9MSl9KX0obywwLFIpLGZ1bmN0aW9uKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcnRPZkN5Y2xlPSExLHQudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyxoKSxlLnN1bSh0LnRhcmdldExpbmtzLGgpKSx0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KX0pfShvKSxmdW5jdGlvbih0KXt2YXIgZSxyLG47Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9bix0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7ci5pbmRleE9mKHQudGFyZ2V0KTwwJiYhdC5jaXJjdWxhciYmci5wdXNoKHQudGFyZ2V0KX0pfSk7Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuaGVpZ2h0PW4sdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnNvdXJjZSk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnNvdXJjZSl9KX0pO3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNvbHVtbj1NYXRoLmZsb29yKHouY2FsbChudWxsLHQsbikpfSl9KG8pLFQobyxMKSxmdW5jdGlvbihpLG8scyl7dmFyIGw9ci5uZXN0KCkua2V5KGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKGkubm9kZXMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZXN9KTsoZnVuY3Rpb24ocil7aWYobil7dmFyIG89MS8wO2wuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1TKm4vKHQubGVuZ3RoKzEpO289ZTxvP2U6b30pLHQ9b312YXIgcz1lLm1pbihsLGZ1bmN0aW9uKHIpe3JldHVybihTLWItKHIubGVuZ3RoLTEpKnQpL2Uuc3VtKHIsaCl9KTtzKj1rLGkubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqc30pO3ZhciBjPWZ1bmN0aW9uKHQpe3ZhciByPTAsbj0wLGk9MCxhPTAsbz1lLm1heCh0Lm5vZGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pO3JldHVybiB0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKCJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/cis9dC53aWR0aDpuKz10LndpZHRoLDA9PXQudGFyZ2V0LmNvbHVtbiYmKGErPXQud2lkdGgpLHQuc291cmNlLmNvbHVtbj09byYmKGkrPXQud2lkdGgpKX0pLHt0b3A6cj1yPjA/citfK3c6cixib3R0b206bj1uPjA/bitfK3c6bixsZWZ0OmE9YT4wP2ErXyt3OmEscmlnaHQ6aT1pPjA/aStfK3c6aX19KGkpLHU9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLm1heCh0Lm5vZGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pLGk9QS1hLG89Uy1iLHM9aStyLnJpZ2h0K3IubGVmdCxsPW8rci50b3Arci5ib3R0b20sYz1pL3MsdT1vL2w7cmV0dXJuIGE9YSpjK3IubGVmdCxBPTA9PXIucmlnaHQ/QTpBKmMsYj1iKnUrci50b3AsUyo9dSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC54MD1hK3QuY29sdW1uKigoQS1hLUUpL24pLHQueDE9dC54MCtFfSksdX0oaSxjKTtzKj11LGkubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqc30pLGwuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0LmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmRlcHRoPT1sLmxlbmd0aC0xJiYxPT1lPyh0LnkwPVMvMi10LnZhbHVlKnMsdC55MT10LnkwK3QudmFsdWUqcyk6MD09dC5kZXB0aCYmMT09ZT8odC55MD1TLzItdC52YWx1ZSpzLHQueTE9dC55MCt0LnZhbHVlKnMpOnQucGFydE9mQ3ljbGU/MD09TSh0LHIpPyh0LnkwPVMvMituLHQueTE9dC55MCt0LnZhbHVlKnMpOiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/KHQueTA9YituLHQueTE9dC55MCt0LnZhbHVlKnMpOih0LnkwPVMtdC52YWx1ZSpzLW4sdC55MT10LnkwK3QudmFsdWUqcyk6MD09Yy50b3B8fDA9PWMuYm90dG9tPyh0LnkwPShTLWIpL2Uqbix0LnkxPXQueTArdC52YWx1ZSpzKToodC55MD0oUy1iKS8yLWUvMituLHQueTE9dC55MCt0LnZhbHVlKnMpfSl9KX0pKHMpLG0oKTtmb3IodmFyIGM9MSx1PW87dT4wOy0tdSl2KGMqPS45OSxzKSxtKCk7ZnVuY3Rpb24gdih0LHIpe3ZhciBuPWwubGVuZ3RoO2wuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgYT1pLmxlbmd0aCxvPWlbMF0uZGVwdGg7aS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzO2lmKGkuc291cmNlTGlua3MubGVuZ3RofHxpLnRhcmdldExpbmtzLmxlbmd0aClpZihpLnBhcnRPZkN5Y2xlJiZNKGkscik+MCk7ZWxzZSBpZigwPT1vJiYxPT1hKXM9aS55MS1pLnkwLGkueTA9Uy8yLXMvMixpLnkxPVMvMitzLzI7ZWxzZSBpZihvPT1uLTEmJjE9PWEpcz1pLnkxLWkueTAsaS55MD1TLzItcy8yLGkueTE9Uy8yK3MvMjtlbHNle3ZhciBsPWUubWVhbihpLnNvdXJjZUxpbmtzLGcpLGM9ZS5tZWFuKGkudGFyZ2V0TGlua3MsZCksdT0oKGwmJmM/KGwrYykvMjpsfHxjKS1wKGkpKSp0O2kueTArPXUsaS55MSs9dX19KX0pfWZ1bmN0aW9uIG0oKXtsLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHIsbixpLGE9YixvPWUubGVuZ3RoO2ZvcihlLnNvcnQoZiksaT0wO2k8bzsrK2kpcj1lW2ldLChuPWEtci55MCk+MCYmKHIueTArPW4sci55MSs9biksYT1yLnkxK3Q7aWYoKG49YS10LVMpPjApZm9yKGE9ci55MC09bixyLnkxLT1uLGk9by0yO2k+PTA7LS1pKXI9ZVtpXSwobj1yLnkxK3QtYSk+MCYmKHIueTAtPW4sci55MS09biksYT1yLnkwfSl9fShvLEQsTCksQihvKTtmb3IodmFyIHM9MDtzPDQ7cysrKVUobyxTLEwpLHEobywwLEwpLE4obyxiLFMsTCksVShvLFMsTCkscShvLDAsTCk7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT10Lm5vZGVzLGE9dC5saW5rcyxvPSExLHM9ITE7aWYoYS5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/bz0hMDoiYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlJiYocz0hMCl9KSwwPT1vfHwwPT1zKXt2YXIgbD1lLm1pbihpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnkwfSksYz1lLm1heChpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxfSksdT1jLWwsZj1uLXIsaD1mL3U7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnkxLXQueTApKmg7dC55MD0odC55MC1sKSpoLHQueTE9dC55MCtlfSksYS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9KHQueTAtbCkqaCx0LnkxPSh0LnkxLWwpKmgsdC53aWR0aD10LndpZHRoKmh9KX19KG8sYixTKSxDKG8sUCxTLEwpLG99ZnVuY3Rpb24gQih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zb3VyY2VMaW5rcy5zb3J0KHUpLHQudGFyZ2V0TGlua3Muc29ydChjKX0pLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnkwLHI9ZSxuPXQueTEsaT1uO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyPyh0LnkwPW4tdC53aWR0aC8yLG4tPXQud2lkdGgpOih0LnkwPWUrdC53aWR0aC8yLGUrPXQud2lkdGgpfSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTE9aS10LndpZHRoLzIsaS09dC53aWR0aCk6KHQueTE9cit0LndpZHRoLzIscis9dC53aWR0aCl9KX0pfXJldHVybiBGLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksRik6TH0sRi5ub2RlQWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHo9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLEYpOnp9LEYubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPSt0LEYpOkV9LEYubm9kZVBhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsRik6dH0sRi5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksRik6T30sRi5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oST0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksRik6SX0sRi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWI9MCxBPSt0WzBdLFM9K3RbMV0sRik6W0EtYSxTLWJdfSxGLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdFswXVswXSxBPSt0WzFdWzBdLGI9K3RbMF1bMV0sUz0rdFsxXVsxXSxGKTpbW2EsYl0sW0EsU11dfSxGLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEQ9K3QsRik6RH0sRi5jaXJjdWxhckxpbmtHYXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9K3QsRik6UH0sRi5ub2RlUGFkZGluZ1JhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LEYpOm59LEYuc29ydE5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhSPXQsRik6Un0sRi51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIFQodCxMKSxCKHQpLHQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhckxpbmtUeXBlPXQueTArdC55MTxTPyJ0b3AiOiJib3R0b20iLHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlLHQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlKX0pLFUodCxTLEwsITEpLHEodCwwLEwpLEModCxQLFMsTCksdH0sRn0sdC5zYW5rZXlDZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/ZS5taW4odC5zb3VyY2VMaW5rcyxhKS0xOjB9LHQuc2Fua2V5TGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZXB0aH0sdC5zYW5rZXlSaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9LHQuc2Fua2V5SnVzdGlmeT1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/aShyLHQoImQzLWFycmF5IiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLXNoYXBlIiksdCgiZWxlbWVudGFyeS1jaXJjdWl0cy1kaXJlY3RlZC1ncmFwaCIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMsbnVsbCl9LHsiZDMtYXJyYXkiOjE0MiwiZDMtY29sbGVjdGlvbiI6MTQzLCJkMy1zaGFwZSI6MTUyLCJlbGVtZW50YXJ5LWNpcmN1aXRzLWRpcmVjdGVkLWdyYXBoIjoxNjR9XSwxNTI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpO249dGhpcyxpPWZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBuPU1hdGguYWJzLGk9TWF0aC5hdGFuMixhPU1hdGguY29zLG89TWF0aC5tYXgscz1NYXRoLm1pbixsPU1hdGguc2luLGM9TWF0aC5zcXJ0LHU9MWUtMTIsZj1NYXRoLlBJLGg9Zi8yLHA9MipmO2Z1bmN0aW9uIGQodCl7cmV0dXJuIHQ+PTE/aDp0PD0tMT8taDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiB2KHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiB5KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gYih0LGUscixuLGksYSxzKXt2YXIgbD10LXIsdT1lLW4sZj0ocz9hOi1hKS9jKGwqbCt1KnUpLGg9Zip1LHA9LWYqbCxkPXQraCxnPWUrcCx2PXIraCxtPW4rcCx5PShkK3YpLzIseD0oZyttKS8yLGI9di1kLF89bS1nLHc9YipiK18qXyxrPWktYSxUPWQqbS12KmcsQT0oXzwwPy0xOjEpKmMobygwLGsqayp3LVQqVCkpLE09KFQqXy1iKkEpL3csUz0oLVQqYi1fKkEpL3csRT0oVCpfK2IqQSkvdyxDPSgtVCpiK18qQSkvdyxMPU0teSx6PVMteCxPPUUteSxJPUMteDtyZXR1cm4gTCpMK3oqej5PKk8rSSpJJiYoTT1FLFM9Qykse2N4Ok0sY3k6Uyx4MDE6LWgseTAxOi1wLHgxMTpNKihpL2stMSkseTExOlMqKGkvay0xKX19ZnVuY3Rpb24gXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbmV3IF8odCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBUKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIEEoKXt2YXIgdD1rLG49VCxpPXIoITApLGE9bnVsbCxvPXcscz1udWxsO2Z1bmN0aW9uIGwocil7dmFyIGwsYyx1LGY9ci5sZW5ndGgsaD0hMTtmb3IobnVsbD09YSYmKHM9byh1PWUucGF0aCgpKSksbD0wO2w8PWY7KytsKSEobDxmJiZpKGM9cltsXSxsLHIpKT09PWgmJigoaD0haCk/cy5saW5lU3RhcnQoKTpzLmxpbmVFbmQoKSksaCYmcy5wb2ludCgrdChjLGwsciksK24oYyxsLHIpKTtpZih1KXJldHVybiBzPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSksbCk6dH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6bn0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cighIXQpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxudWxsIT1hJiYocz1vKGEpKSxsKTpvfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/YT1zPW51bGw6cz1vKGE9dCksbCk6YX0sbH1mdW5jdGlvbiBNKCl7dmFyIHQ9ayxuPW51bGwsaT1yKDApLGE9VCxvPXIoITApLHM9bnVsbCxsPXcsYz1udWxsO2Z1bmN0aW9uIHUocil7dmFyIHUsZixoLHAsZCxnPXIubGVuZ3RoLHY9ITEsbT1uZXcgQXJyYXkoZykseT1uZXcgQXJyYXkoZyk7Zm9yKG51bGw9PXMmJihjPWwoZD1lLnBhdGgoKSkpLHU9MDt1PD1nOysrdSl7aWYoISh1PGcmJm8ocD1yW3VdLHUscikpPT09dilpZih2PSF2KWY9dSxjLmFyZWFTdGFydCgpLGMubGluZVN0YXJ0KCk7ZWxzZXtmb3IoYy5saW5lRW5kKCksYy5saW5lU3RhcnQoKSxoPXUtMTtoPj1mOy0taCljLnBvaW50KG1baF0seVtoXSk7Yy5saW5lRW5kKCksYy5hcmVhRW5kKCl9diYmKG1bdV09K3QocCx1LHIpLHlbdV09K2kocCx1LHIpLGMucG9pbnQobj8rbihwLHUscik6bVt1XSxhPythKHAsdSxyKTp5W3VdKSl9aWYoZClyZXR1cm4gYz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gZigpe3JldHVybiBBKCkuZGVmaW5lZChvKS5jdXJ2ZShsKS5jb250ZXh0KHMpfXJldHVybiB1Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxuPW51bGwsdSk6dH0sdS54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLHUpOnR9LHUueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksdSk6bn0sdS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYT1udWxsLHUpOml9LHUueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTppfSx1LnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHUpOmF9LHUubGluZVgwPXUubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KHQpLnkoaSl9LHUubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KHQpLnkoYSl9LHUubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KG4pLnkoaSl9LHUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoISF0KSx1KTpvfSx1LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsbnVsbCE9cyYmKGM9bChzKSksdSk6bH0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3M9Yz1udWxsOmM9bChzPXQpLHUpOnN9LHV9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBFKHQpe3JldHVybiB0fV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEM9eih3KTtmdW5jdGlvbiBMKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24geih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgTCh0KGUpKX1yZXR1cm4gZS5fY3VydmU9dCxlfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2Uoeih0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBJKCl7cmV0dXJuIE8oQSgpLmN1cnZlKEMpKX1mdW5jdGlvbiBEKCl7dmFyIHQ9TSgpLmN1cnZlKEMpLGU9dC5jdXJ2ZSxyPXQubGluZVgwLG49dC5saW5lWDEsaT10LmxpbmVZMCxhPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhyKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhuKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHoodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gUCh0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX1MLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIFI9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEYodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIE4odCl7dmFyIG49RixpPUIsYT1rLG89VCxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciByLGw9Ui5jYWxsKGFyZ3VtZW50cyksYz1uLmFwcGx5KHRoaXMsbCksdT1pLmFwcGx5KHRoaXMsbCk7aWYoc3x8KHM9cj1lLnBhdGgoKSksdChzLCthLmFwcGx5KHRoaXMsKGxbMF09YyxsKSksK28uYXBwbHkodGhpcyxsKSwrYS5hcHBseSh0aGlzLChsWzBdPXUsbCkpLCtvLmFwcGx5KHRoaXMsbCkpLHIpcmV0dXJuIHM9bnVsbCxyKyIifHxudWxsfXJldHVybiBsLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGwpOm59LGwudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbCk6aX0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6YX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGwpOnN9LGx9ZnVuY3Rpb24gaih0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIFYodCxlLHIsbixpKXt0Lm1vdmVUbyhlLHIpLHQuYmV6aWVyQ3VydmVUbyhlLHI9KHIraSkvMixuLHIsbixpKX1mdW5jdGlvbiBVKHQsZSxyLG4saSl7dmFyIGE9UChlLHIpLG89UChlLHI9KHIraSkvMikscz1QKG4sciksbD1QKG4saSk7dC5tb3ZlVG8oYVswXSxhWzFdKSx0LmJlemllckN1cnZlVG8ob1swXSxvWzFdLHNbMF0sc1sxXSxsWzBdLGxbMV0pfXZhciBxPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvZik7dC5tb3ZlVG8ociwwKSx0LmFyYygwLDAsciwwLHApfX0sSD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqciwtciksdC5saW5lVG8oLXIsLXIpLHQubGluZVRvKC1yLC0zKnIpLHQubGluZVRvKHIsLTMqciksdC5saW5lVG8ociwtciksdC5saW5lVG8oMypyLC1yKSx0LmxpbmVUbygzKnIsciksdC5saW5lVG8ocixyKSx0LmxpbmVUbyhyLDMqciksdC5saW5lVG8oLXIsMypyKSx0LmxpbmVUbygtcixyKSx0LmxpbmVUbygtMypyLHIpLHQuY2xvc2VQYXRoKCl9fSxHPU1hdGguc3FydCgxLzMpLFk9MipHLFc9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9ZKSxuPXIqRzt0Lm1vdmVUbygwLC1yKSx0LmxpbmVUbyhuLDApLHQubGluZVRvKDAsciksdC5saW5lVG8oLW4sMCksdC5jbG9zZVBhdGgoKX19LFg9TWF0aC5zaW4oZi8xMCkvTWF0aC5zaW4oNypmLzEwKSxaPU1hdGguc2luKHAvMTApKlgsJD0tTWF0aC5jb3MocC8xMCkqWCxKPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLG49WipyLGk9JCpyO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4saSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89cCphLzUscz1NYXRoLmNvcyhvKSxsPU1hdGguc2luKG8pO3QubGluZVRvKGwqciwtcypyKSx0LmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfXQuY2xvc2VQYXRoKCl9fSxLPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUpLG49LXIvMjt0LnJlY3QobixuLHIscil9fSxRPU1hdGguc3FydCgzKSx0dD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPS1NYXRoLnNxcnQoZS8oMypRKSk7dC5tb3ZlVG8oMCwyKnIpLHQubGluZVRvKC1RKnIsLXIpLHQubGluZVRvKFEqciwtciksdC5jbG9zZVBhdGgoKX19LGV0PS0uNSxydD1NYXRoLnNxcnQoMykvMixudD0xL01hdGguc3FydCgxMiksaXQ9MyoobnQvMisxKSxhdD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL2l0KSxuPXIvMixpPXIqbnQsYT1uLG89cipudCtyLHM9LWEsbD1vO3QubW92ZVRvKG4saSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGwpLHQubGluZVRvKGV0Km4tcnQqaSxydCpuK2V0KmkpLHQubGluZVRvKGV0KmEtcnQqbyxydCphK2V0Km8pLHQubGluZVRvKGV0KnMtcnQqbCxydCpzK2V0KmwpLHQubGluZVRvKGV0Km4rcnQqaSxldCppLXJ0Km4pLHQubGluZVRvKGV0KmErcnQqbyxldCpvLXJ0KmEpLHQubGluZVRvKGV0KnMrcnQqbCxldCpsLXJ0KnMpLHQuY2xvc2VQYXRoKCl9fSxvdD1bcSxILFcsSyxKLHR0LGF0XTtmdW5jdGlvbiBzdCgpe31mdW5jdGlvbiBsdCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gY3QodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHV0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBmdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gaHQodCxlKXt0aGlzLl9iYXNpcz1uZXcgY3QodCksdGhpcy5fYmV0YT1lfWN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6bHQodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6bHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LHV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0Omx0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Omx0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxodC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGgtMTtpZihyPjApZm9yKHZhciBuLGk9dFswXSxhPWVbMF0sbz10W3JdLWkscz1lW3JdLWEsbD0tMTsrK2w8PXI7KW49bC9yLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtsXSsoMS10aGlzLl9iZXRhKSooaStuKm8pLHRoaXMuX2JldGEqZVtsXSsoMS10aGlzLl9iZXRhKSooYStuKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIHB0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gMT09PWU/bmV3IGN0KHQpOm5ldyBodCh0LGUpfXJldHVybiByLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguODUpO2Z1bmN0aW9uIGR0KHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1yKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gZ3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWd0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpkdCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6ZHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciB2dD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyBndCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiBtdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9bXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OmR0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgeXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgbXQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24geHQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXh0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmR0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgYnQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgeHQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24gX3QodCxlLHIpe3ZhciBuPXQuX3gxLGk9dC5feTEsYT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPnUpe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO249KG4qcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9sLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9sfWlmKHQuX2wyM19hPnUpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGY9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2Ysbz0obypjK3QuX3kxKnQuX2wyM18yYS1yKnQuX2wxMl8yYSkvZn10Ll9jb250ZXh0LmJlemllckN1cnZlVG8obixpLGEsbyx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gd3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX13dC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ol90KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGt0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgd3QodCxlKTpuZXcgZ3QodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBUdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVR0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6X3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgQXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBUdCh0LGUpOm5ldyBtdCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIE10KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9TXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ol90KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFN0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgTXQodCxlKTpuZXcgeHQodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBFdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQ3QodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIEx0KHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxvPShyLXQuX3kxKS8oaXx8bjwwJiYtMCkscz0oYSppK28qbikvKG4raSk7cmV0dXJuKEN0KGEpK0N0KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24genQodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIE90KHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqZSxhLXMsby1zKnIsYSxvKX1mdW5jdGlvbiBJdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRHQodCl7dGhpcy5fY29udGV4dD1uZXcgUHQodCl9ZnVuY3Rpb24gUHQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFJ0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBGdCh0KXt2YXIgZSxyLG49dC5sZW5ndGgtMSxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPG4tMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtuLTFdPTIsYVtuLTFdPTcsb1tuLTFdPTgqdFtuLTFdK3Rbbl0sZT0xO2U8bjsrK2Upcj1pW2VdL2FbZS0xXSxhW2VdLT1yLG9bZV0tPXIqb1tlLTFdO2ZvcihpW24tMV09b1tuLTFdL2Fbbi0xXSxlPW4tMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtuLTFdPSh0W25dK2lbbi0xXSkvMixlPTA7ZTxuLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIEJ0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBOdCh0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKG49byxvPXRbZVthXV0scj0wO3I8czsrK3Ipb1tyXVsxXSs9b1tyXVswXT1pc05hTihuW3JdWzFdKT9uW3JdWzBdOm5bcl1bMV19ZnVuY3Rpb24ganQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpOy0tZT49MDspcltlXT1lO3JldHVybiByfWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIHRbZV19ZnVuY3Rpb24gVXQodCl7dmFyIGU9dC5tYXAocXQpO3JldHVybiBqdCh0KS5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGVbdF0tZVtyXX0pfWZ1bmN0aW9uIHF0KHQpe2Zvcih2YXIgZSxyPS0xLG49MCxpPXQubGVuZ3RoLGE9LTEvMDsrK3I8aTspKGU9K3Rbcl1bMV0pPmEmJihhPWUsbj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBIdCh0KXt2YXIgZT10Lm1hcChHdCk7cmV0dXJuIGp0KHQpLnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSl9ZnVuY3Rpb24gR3QodCl7Zm9yKHZhciBlLHI9MCxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KShlPSt0W25dWzFdKSYmKHIrPWUpO3JldHVybiByfUV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0sSXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOk90KHRoaXMsdGhpcy5fdDAsenQodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLE90KHRoaXMsenQodGhpcyxyPUx0KHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDpPdCh0aGlzLHRoaXMuX3QwLHI9THQodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19fSwoRHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSXQucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtJdC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LFB0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxuLHIsYSxpKX19LFJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09cil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBuPUZ0KHQpLGk9RnQoZSksYT0wLG89MTtvPHI7KythLCsrbyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVthXSxpWzBdW2FdLG5bMV1bYV0saVsxXVthXSx0W29dLGVbb10pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXIpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19LHQuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxvPXYsXz1yKDApLHc9bnVsbCxrPW0sVD15LEE9eCxNPW51bGw7ZnVuY3Rpb24gUygpe3ZhciByLGcsdixtPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx5PStvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx4PWsuYXBwbHkodGhpcyxhcmd1bWVudHMpLWgsUz1ULmFwcGx5KHRoaXMsYXJndW1lbnRzKS1oLEU9bihTLXgpLEM9Uz54O2lmKE18fChNPXI9ZS5wYXRoKCkpLHk8bSYmKGc9eSx5PW0sbT1nKSx5PnUpaWYoRT5wLXUpTS5tb3ZlVG8oeSphKHgpLHkqbCh4KSksTS5hcmMoMCwwLHkseCxTLCFDKSxtPnUmJihNLm1vdmVUbyhtKmEoUyksbSpsKFMpKSxNLmFyYygwLDAsbSxTLHgsQykpO2Vsc2V7dmFyIEwseixPPXgsST1TLEQ9eCxQPVMsUj1FLEY9RSxCPUEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTj1CPnUmJih3Pyt3LmFwcGx5KHRoaXMsYXJndW1lbnRzKTpjKG0qbSt5KnkpKSxqPXMobih5LW0pLzIsK18uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxWPWosVT1qO2lmKE4+dSl7dmFyIHE9ZChOL20qbChCKSksSD1kKE4veSpsKEIpKTsoUi09MipxKT51PyhEKz1xKj1DPzE6LTEsUC09cSk6KFI9MCxEPVA9KHgrUykvMiksKEYtPTIqSCk+dT8oTys9SCo9Qz8xOi0xLEktPUgpOihGPTAsTz1JPSh4K1MpLzIpfXZhciBHPXkqYShPKSxZPXkqbChPKSxXPW0qYShQKSxYPW0qbChQKTtpZihqPnUpe3ZhciBaLCQ9eSphKEkpLEo9eSpsKEkpLEs9bSphKEQpLFE9bSpsKEQpO2lmKEU8ZiYmKFo9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD1yLXQsYz1uLWUsZj1vLWksaD1zLWEscD1oKmwtZipjO2lmKCEocCpwPHUpKXJldHVyblt0KyhwPShmKihlLWEpLWgqKHQtaSkpL3ApKmwsZStwKmNdfShHLFksSyxRLCQsSixXLFgpKSl7dmFyIHR0PUctWlswXSxldD1ZLVpbMV0scnQ9JC1aWzBdLG50PUotWlsxXSxpdD0xL2woKCh2PSh0dCpydCtldCpudCkvKGModHQqdHQrZXQqZXQpKmMocnQqcnQrbnQqbnQpKSk+MT8wOnY8LTE/ZjpNYXRoLmFjb3ModikpLzIpLGF0PWMoWlswXSpaWzBdK1pbMV0qWlsxXSk7Vj1zKGosKG0tYXQpLyhpdC0xKSksVT1zKGosKHktYXQpLyhpdCsxKSl9fUY+dT9VPnU/KEw9YihLLFEsRyxZLHksVSxDKSx6PWIoJCxKLFcsWCx5LFUsQyksTS5tb3ZlVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxVPGo/TS5hcmMoTC5jeCxMLmN5LFUsaShMLnkwMSxMLngwMSksaSh6LnkwMSx6LngwMSksIUMpOihNLmFyYyhMLmN4LEwuY3ksVSxpKEwueTAxLEwueDAxKSxpKEwueTExLEwueDExKSwhQyksTS5hcmMoMCwwLHksaShMLmN5K0wueTExLEwuY3grTC54MTEpLGkoei5jeSt6LnkxMSx6LmN4K3oueDExKSwhQyksTS5hcmMoei5jeCx6LmN5LFUsaSh6LnkxMSx6LngxMSksaSh6LnkwMSx6LngwMSksIUMpKSk6KE0ubW92ZVRvKEcsWSksTS5hcmMoMCwwLHksTyxJLCFDKSk6TS5tb3ZlVG8oRyxZKSxtPnUmJlI+dT9WPnU/KEw9YihXLFgsJCxKLG0sLVYsQyksej1iKEcsWSxLLFEsbSwtVixDKSxNLmxpbmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLFY8aj9NLmFyYyhMLmN4LEwuY3ksVixpKEwueTAxLEwueDAxKSxpKHoueTAxLHoueDAxKSwhQyk6KE0uYXJjKEwuY3gsTC5jeSxWLGkoTC55MDEsTC54MDEpLGkoTC55MTEsTC54MTEpLCFDKSxNLmFyYygwLDAsbSxpKEwuY3krTC55MTEsTC5jeCtMLngxMSksaSh6LmN5K3oueTExLHouY3grei54MTEpLEMpLE0uYXJjKHouY3gsei5jeSxWLGkoei55MTEsei54MTEpLGkoei55MDEsei54MDEpLCFDKSkpOk0uYXJjKDAsMCxtLFAsRCxDKTpNLmxpbmVUbyhXLFgpfWVsc2UgTS5tb3ZlVG8oMCwwKTtpZihNLmNsb3NlUGF0aCgpLHIpcmV0dXJuIE09bnVsbCxyKyIifHxudWxsfXJldHVybiBTLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGU9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK1QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWYvMjtyZXR1cm5bYShyKSplLGwocikqZV19LFMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxTKTp0fSxTLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksUyk6b30sUy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTpffSxTLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTp3fSxTLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTprfSxTLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksUyk6VH0sUy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLFMpOkF9LFMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT1udWxsPT10P251bGw6dCxTKTpNfSxTfSx0LmFyZWE9TSx0LmxpbmU9QSx0LnBpZT1mdW5jdGlvbigpe3ZhciB0PUUsZT1TLG49bnVsbCxpPXIoMCksYT1yKHApLG89cigwKTtmdW5jdGlvbiBzKHIpe3ZhciBzLGwsYyx1LGYsaD1yLmxlbmd0aCxkPTAsZz1uZXcgQXJyYXkoaCksdj1uZXcgQXJyYXkoaCksbT0raS5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1NYXRoLm1pbihwLE1hdGgubWF4KC1wLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLW0pKSx4PU1hdGgubWluKE1hdGguYWJzKHkpL2gsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooeTwwPy0xOjEpO2ZvcihzPTA7czxoOysrcykoZj12W2dbc109c109K3QocltzXSxzLHIpKT4wJiYoZCs9Zik7Zm9yKG51bGwhPWU/Zy5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodlt0XSx2W3JdKX0pOm51bGwhPW4mJmcuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBuKHJbdF0scltlXSl9KSxzPTAsYz1kPyh5LWgqYikvZDowO3M8aDsrK3MsbT11KWw9Z1tzXSx1PW0rKChmPXZbbF0pPjA/ZipjOjApK2IsdltsXT17ZGF0YTpyW2xdLGluZGV4OnMsdmFsdWU6ZixzdGFydEFuZ2xlOm0sZW5kQW5nbGU6dSxwYWRBbmdsZTp4fTtyZXR1cm4gdn1yZXR1cm4gcy52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLHMpOnR9LHMuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxzKTplfSxzLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwscyk6bn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCkscyk6aX0scy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTpvfSxzfSx0LmFyZWFSYWRpYWw9RCx0LnJhZGlhbEFyZWE9RCx0LmxpbmVSYWRpYWw9SSx0LnJhZGlhbExpbmU9SSx0LnBvaW50UmFkaWFsPVAsdC5saW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBOKGopfSx0LmxpbmtWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiBOKFYpfSx0LmxpbmtSYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1OKFUpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHQuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9cihxKSxuPXIoNjQpLGk9bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHI7aWYoaXx8KGk9cj1lLnBhdGgoKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhpLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscilyZXR1cm4gaT1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIGEudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoZSksYSk6dH0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYSk6bn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDp0LGEpOml9LGF9LHQuc3ltYm9scz1vdCx0LnN5bWJvbENpcmNsZT1xLHQuc3ltYm9sQ3Jvc3M9SCx0LnN5bWJvbERpYW1vbmQ9Vyx0LnN5bWJvbFNxdWFyZT1LLHQuc3ltYm9sU3Rhcj1KLHQuc3ltYm9sVHJpYW5nbGU9dHQsdC5zeW1ib2xXeWU9YXQsdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdXQodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmdCh0KX0sdC5jdXJ2ZUJhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgY3QodCl9LHQuY3VydmVCdW5kbGU9cHQsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPXl0LHQuY3VydmVDYXJkaW5hbE9wZW49YnQsdC5jdXJ2ZUNhcmRpbmFsPXZ0LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPUF0LHQuY3VydmVDYXRtdWxsUm9tT3Blbj1TdCx0LmN1cnZlQ2F0bXVsbFJvbT1rdCx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRXQodCl9LHQuY3VydmVMaW5lYXI9dyx0LmN1cnZlTW9ub3RvbmVYPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSXQodCl9LHQuY3VydmVNb25vdG9uZVk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEdCh0KX0sdC5jdXJ2ZU5hdHVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBSdCh0KX0sdC5jdXJ2ZVN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCdCh0LC41KX0sdC5jdXJ2ZVN0ZXBBZnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJ0KHQsMSl9LHQuY3VydmVTdGVwQmVmb3JlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnQodCwwKX0sdC5zdGFjaz1mdW5jdGlvbigpe3ZhciB0PXIoW10pLGU9anQsbj1OdCxpPVZ0O2Z1bmN0aW9uIGEocil7dmFyIGEsbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGw9ci5sZW5ndGgsYz1zLmxlbmd0aCx1PW5ldyBBcnJheShjKTtmb3IoYT0wO2E8YzsrK2Epe2Zvcih2YXIgZixoPXNbYV0scD11W2FdPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZClwW2RdPWY9WzAsK2kocltkXSxoLGQscildLGYuZGF0YT1yW2RdO3Aua2V5PWh9Zm9yKGE9MCxvPWUodSk7YTxjOysrYSl1W29bYV1dLmluZGV4PWE7cmV0dXJuIG4odSxvKSx1fXJldHVybiBhLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKFIuY2FsbChlKSksYSk6dH0sYS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLGEpOml9LGEub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9qdDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoUi5jYWxsKHQpKSxhKTplfSxhLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P050OnQsYSk6bn0sYX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLGE9MCxvPXRbMF0ubGVuZ3RoO2E8bzsrK2Epe2ZvcihpPXI9MDtyPG47KytyKWkrPXRbcl1bYV1bMV18fDA7aWYoaSlmb3Iocj0wO3I8bjsrK3IpdFtyXVthXVsxXS89aX1OdCh0LGUpfX0sdC5zdGFja09mZnNldERpdmVyZ2luZz1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYSxvLHMsbD0wLGM9dFtlWzBdXS5sZW5ndGg7bDxjOysrbClmb3IoYT1vPTAscj0wO3I8czsrK3IpKGk9KG49dFtlW3JdXVtsXSlbMV0tblswXSk+PTA/KG5bMF09YSxuWzFdPWErPWkpOmk8MD8oblsxXT1vLG5bMF09bys9aSk6blswXT1hfSx0LnN0YWNrT2Zmc2V0Tm9uZT1OdCx0LnN0YWNrT2Zmc2V0U2lsaG91ZXR0ZT1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO248YTsrK24pe2Zvcih2YXIgbz0wLHM9MDtvPHI7KytvKXMrPXRbb11bbl1bMV18fDA7aVtuXVsxXSs9aVtuXVswXT0tcy8yfU50KHQsZSl9fSx0LnN0YWNrT2Zmc2V0V2lnZ2xlPWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihuPShyPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxhPTAsbz0xO288bjsrK28pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxpOysrcyl7Zm9yKHZhciB1PXRbZVtzXV0sZj11W29dWzFdfHwwLGg9KGYtKHVbby0xXVsxXXx8MCkpLzIscD0wO3A8czsrK3Ape3ZhciBkPXRbZVtwXV07aCs9KGRbb11bMV18fDApLShkW28tMV1bMV18fDApfWwrPWYsYys9aCpmfXJbby0xXVsxXSs9cltvLTFdWzBdPWEsbCYmKGEtPWMvbCl9cltvLTFdWzFdKz1yW28tMV1bMF09YSxOdCh0LGUpfX0sdC5zdGFja09yZGVyQXBwZWFyYW5jZT1VdCx0LnN0YWNrT3JkZXJBc2NlbmRpbmc9SHQsdC5zdGFja09yZGVyRGVzY2VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gSHQodCkucmV2ZXJzZSgpfSx0LnN0YWNrT3JkZXJJbnNpZGVPdXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXQubGVuZ3RoLGk9dC5tYXAoR3QpLGE9VXQodCksbz0wLHM9MCxsPVtdLGM9W107Zm9yKGU9MDtlPG47KytlKXI9YVtlXSxvPHM/KG8rPWlbcl0sbC5wdXNoKHIpKToocys9aVtyXSxjLnB1c2gocikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9LHQuc3RhY2tPcmRlck5vbmU9anQsdC5zdGFja09yZGVyUmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4ganQodCkucmV2ZXJzZSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2kocix0KCJkMy1wYXRoIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzKX0seyJkMy1wYXRoIjoxNDl9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlLHIsbj0wLGk9MCxhPTAsbz0xZTMscz0wLGw9MCxjPTAsdT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxmPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gbHx8KGYocCksbD11Lm5vdygpK2MpfWZ1bmN0aW9uIHAoKXtsPTB9ZnVuY3Rpb24gZCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ucmVzdGFydCh0LGUsciksbn1mdW5jdGlvbiB2KCl7aCgpLCsrbjtmb3IodmFyIHQscj1lO3I7KSh0PWwtci5fdGltZSk+PTAmJnIuX2NhbGwuY2FsbChudWxsLHQpLHI9ci5fbmV4dDstLW59ZnVuY3Rpb24gbSgpe2w9KHM9dS5ub3coKSkrYyxuPWk9MDt0cnl7digpfWZpbmFsbHl7bj0wLGZ1bmN0aW9uKCl7dmFyIHQsbixpPWUsYT0xLzA7Zm9yKDtpOylpLl9jYWxsPyhhPmkuX3RpbWUmJihhPWkuX3RpbWUpLHQ9aSxpPWkuX25leHQpOihuPWkuX25leHQsaS5fbmV4dD1udWxsLGk9dD90Ll9uZXh0PW46ZT1uKTtyPXQseChhKX0oKSxsPTB9fWZ1bmN0aW9uIHkoKXt2YXIgdD11Lm5vdygpLGU9dC1zO2U+byYmKGMtPWUscz10KX1mdW5jdGlvbiB4KHQpe258fChpJiYoaT1jbGVhclRpbWVvdXQoaSkpLHQtbD4yND8odDwxLzAmJihpPXNldFRpbWVvdXQobSx0LXUubm93KCktYykpLGEmJihhPWNsZWFySW50ZXJ2YWwoYSkpKTooYXx8KHM9dS5ub3coKSxhPXNldEludGVydmFsKHksbykpLG49MSxmKG0pKSl9ZC5wcm90b3R5cGU9Zy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmQscmVzdGFydDpmdW5jdGlvbih0LG4saSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtpPShudWxsPT1pP2goKToraSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8cj09PXRoaXN8fChyP3IuX25leHQ9dGhpczplPXRoaXMscj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1pLHgoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAseCgpKX19O3Qubm93PWgsdC50aW1lcj1nLHQudGltZXJGbHVzaD12LHQudGltZW91dD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIGU9bnVsbD09ZT8wOitlLG4ucmVzdGFydChmdW5jdGlvbihyKXtuLnN0b3AoKSx0KHIrZSl9LGUsciksbn0sdC5pbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IGQsaT1lO3JldHVybiBudWxsPT1lPyhuLnJlc3RhcnQodCxlLHIpLG4pOihlPStlLHI9bnVsbD09cj9oKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIGEobyl7bys9aSxuLnJlc3RhcnQoYSxpKz1lLHIpLHQobyl9LGUsciksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE1NDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpe3ZhciB0PXt2ZXJzaW9uOiIzLjUuMTcifSxyPVtdLnNsaWNlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KX0saT10aGlzLmRvY3VtZW50O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBvKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWlmKGkpdHJ5e24oaS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGV9Y2F0Y2godCl7bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxpKXRyeXtpLmNyZWF0ZUVsZW1lbnQoIkRJViIpLnN0eWxlLnNldFByb3BlcnR5KCJvcGFjaXR5IiwwLCIiKX1jYXRjaCh0KXt2YXIgcz10aGlzLkVsZW1lbnQucHJvdG90eXBlLGw9cy5zZXRBdHRyaWJ1dGUsYz1zLnNldEF0dHJpYnV0ZU5TLHU9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxmPXUuc2V0UHJvcGVydHk7cy5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtsLmNhbGwodGhpcyx0LGUrIiIpfSxzLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxyKXtjLmNhbGwodGhpcyx0LGUscisiIil9LHUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2YuY2FsbCh0aGlzLHQsZSsiIixyKX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gZCh0KXtyZXR1cm4haXNOYU4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm57bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik+MD9pPWE6bj1hKzF9cmV0dXJuIG59fX10LmFzY2VuZGluZz1oLHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5taW49ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmcj5uJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJnI+biYmKHI9bil9cmV0dXJuIHJ9LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPnImJihyPW4pfXJldHVybiByfSx0LmV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPS0xLG89dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZXtmb3IoOysrYTxvOylpZihudWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfXJldHVybltyLGldfSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLGE9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPSt0W2FdKSYmKG4rPXIpO2Vsc2UgZm9yKDsrK2E8aTspZChyPStlLmNhbGwodCx0W2FdLGEpKSYmKG4rPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xLG89aTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylkKHI9cCh0W2FdKSk/bis9cjotLW87ZWxzZSBmb3IoOysrYTxpOylkKHI9cChlLmNhbGwodCx0W2FdLGEpKSk/bis9cjotLW87aWYobylyZXR1cm4gbi9vfSx0LnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksaT0rdFtuLTFdLGE9ci1uO3JldHVybiBhP2krYSoodFtuXS1pKTppfSx0Lm1lZGlhbj1mdW5jdGlvbihlLHIpe3ZhciBuLGk9W10sYT1lLmxlbmd0aCxvPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGE7KWQobj1wKGVbb10pKSYmaS5wdXNoKG4pO2Vsc2UgZm9yKDsrK288YTspZChuPXAoci5jYWxsKGUsZVtvXSxvKSkpJiZpLnB1c2gobik7aWYoaS5sZW5ndGgpcmV0dXJuIHQucXVhbnRpbGUoaS5zb3J0KGgpLC41KX0sdC52YXJpYW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0wLHM9LTEsbD0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytzPGk7KWQocj1wKHRbc10pKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2Vsc2UgZm9yKDsrK3M8aTspZChyPXAoZS5jYWxsKHQsdFtzXSxzKSkpJiYobys9KG49ci1hKSooci0oYSs9bi8rK2wpKSk7aWYobD4xKXJldHVybiBvLyhsLTEpfSx0LmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlP01hdGguc3FydChlKTplfTt2YXIgdj1nKGgpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0TGVmdD12LmxlZnQsdC5iaXNlY3Q9dC5iaXNlY3RSaWdodD12LnJpZ2h0LHQuYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGcoMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIGgodChlKSxyKX06dCl9LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7KGE9YXJndW1lbnRzLmxlbmd0aCk8MyYmKHI9dC5sZW5ndGgsYTwyJiYoZT0wKSk7Zm9yKHZhciBuLGksYT1yLWU7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLG49dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5wYWlycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj10WzBdLGk9bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspaVtlXT1bbixuPXRbKytlXV07cmV0dXJuIGl9LHQudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe2lmKCEoYT1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciByPS0xLG49dC5taW4oZSxtKSxpPW5ldyBBcnJheShuKTsrK3I8bjspZm9yKHZhciBhLG89LTEscz1pW3JdPW5ldyBBcnJheShhKTsrK288YTspc1tvXT1lW29dW3JdO3JldHVybiBpfSx0LnppcD1mdW5jdGlvbigpe3JldHVybiB0LnRyYW5zcG9zZShhcmd1bWVudHMpfSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShuPXRbaV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeT1NYXRoLmFicztmdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLHIse3ZhbHVlOmVbcl0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIGIoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX10LnJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCkpLChlLXQpL3I9PTEvMCl0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIHJhbmdlIik7dmFyIG4saT1bXSxhPWZ1bmN0aW9uKHQpe3ZhciBlPTE7Zm9yKDt0KmUlMTspZSo9MTA7cmV0dXJuIGV9KHkocikpLG89LTE7aWYodCo9YSxlKj1hLChyKj1hKTwwKWZvcig7KG49dCtyKisrbyk+ZTspaS5wdXNoKG4vYSk7ZWxzZSBmb3IoOyhuPXQrciorK28pPGU7KWkucHVzaChuL2EpO3JldHVybiBpfSx0Lm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBiO2lmKHQgaW5zdGFuY2VvZiBiKXQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOylyLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspci5zZXQoZS5jYWxsKHQsbj10W2ldLGkpLG4pfWVsc2UgZm9yKHZhciBvIGluIHQpci5zZXQobyx0W29dKTtyZXR1cm4gcn07dmFyIF89Il9fcHJvdG9fXyIsdz0iXDAiO2Z1bmN0aW9uIGsodCl7cmV0dXJuKHQrPSIiKT09PV98fHRbMF09PT13P3crdDp0fWZ1bmN0aW9uIFQodCl7cmV0dXJuKHQrPSIiKVswXT09PXc/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIEEodCl7cmV0dXJuIGsodClpbiB0aGlzLl99ZnVuY3Rpb24gTSh0KXtyZXR1cm4odD1rKHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiBTKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goVChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gRSgpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gQygpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTCgpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIHoodCl7cmV0dXJuIHR9ZnVuY3Rpb24gTyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24gSSh0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPUQubGVuZ3RoO3I8bjsrK3Ipe3ZhciBpPURbcl0rZTtpZihpIGluIHQpcmV0dXJuIGl9fXgoYix7aGFzOkEsZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0KV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9bayh0KV09ZX0scmVtb3ZlOk0sa2V5czpTLHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHRoaXMuX1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh7a2V5OlQoZSksdmFsdWU6dGhpcy5fW2VdfSk7cmV0dXJuIHR9LHNpemU6RSxlbXB0eTpDLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpLHRoaXMuX1tlXSl9fSksdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9W10sYT1bXTtmdW5jdGlvbiBvKHQsYSxzKXtpZihzPj1pLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwobixhKTplP2Euc29ydChlKTphO2Zvcih2YXIgbCxjLHUsZixoPS0xLHA9YS5sZW5ndGgsZD1pW3MrK10sZz1uZXcgYjsrK2g8cDspKGY9Zy5nZXQobD1kKGM9YVtoXSkpKT9mLnB1c2goYyk6Zy5zZXQobCxbY10pO3JldHVybiB0PyhjPXQoKSx1PWZ1bmN0aW9uKGUscil7Yy5zZXQoZSxvKHQscixzKSl9KTooYz17fSx1PWZ1bmN0aW9uKGUscil7Y1tlXT1vKHQscixzKX0pLGcuZm9yRWFjaCh1KSxjfXJldHVybiBuLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBvKGUsdCwwKX0sbi5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYocj49aS5sZW5ndGgpcmV0dXJuIGU7dmFyIG49W10sbz1hW3IrK107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLGkpe24ucHVzaCh7a2V5OmUsdmFsdWVzOnQoaSxyKX0pfSksbz9uLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LmtleSxlLmtleSl9KTpufShvKHQubWFwLGUsMCksMCl9LG4ua2V5PWZ1bmN0aW9uKHQpe3JldHVybiBpLnB1c2godCksbn0sbi5zb3J0S2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYVtpLmxlbmd0aC0xXT10LG59LG4uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gZT10LG59LG4ucm9sbHVwPWZ1bmN0aW9uKHQpe3JldHVybiByPXQsbn0sbn0sdC5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEw7aWYodClmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZS5hZGQodFtyXSk7cmV0dXJuIGV9LHgoTCx7aGFzOkEsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0Kz0iIildPSEwLHR9LHJlbW92ZTpNLHZhbHVlczpTLHNpemU6RSxlbXB0eTpDLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpKX19KSx0LmJlaGF2aW9yPXt9LHQucmViaW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49MSxpPWFyZ3VtZW50cy5sZW5ndGg7KytuPGk7KXRbcj1hcmd1bWVudHNbbl1dPU8odCxlLGVbcl0pO3JldHVybiB0fTt2YXIgRD1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTtmdW5jdGlvbiBQKCl7fWZ1bmN0aW9uIFIoKXt9ZnVuY3Rpb24gRih0KXt2YXIgZT1bXSxyPW5ldyBiO2Z1bmN0aW9uIG4oKXtmb3IodmFyIHIsbj1lLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspKHI9bltpXS5vbikmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0fXJldHVybiBuLm9uPWZ1bmN0aW9uKG4saSl7dmFyIGEsbz1yLmdldChuKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsZT1lLnNsaWNlKDAsYT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKGErMSkpLHIucmVtb3ZlKG4pKSxpJiZlLnB1c2goci5zZXQobix7b246aX0pKSx0KX0sbn1mdW5jdGlvbiBCKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIE4oKXtmb3IodmFyIGUscj10LmV2ZW50O2U9ci5zb3VyY2VFdmVudDspcj1lO3JldHVybiByfWZ1bmN0aW9uIGooZSl7Zm9yKHZhciByPW5ldyBSLG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7KytuPGk7KXJbYXJndW1lbnRzW25dXT1GKHIpO3JldHVybiByLm9mPWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RyeXt2YXIgbz1hLnNvdXJjZUV2ZW50PXQuZXZlbnQ7YS50YXJnZXQ9ZSx0LmV2ZW50PWEsclthLnR5cGVdLmFwcGx5KG4saSl9ZmluYWxseXt0LmV2ZW50PW99fX0scn10LmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBSLGU9LTEscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2FyZ3VtZW50c1tlXV09Rih0KTtyZXR1cm4gdH0sUi5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgcj10LmluZGV4T2YoIi4iKSxuPSIiO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbdF0ub24obik6dGhpc1t0XS5vbihuLGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT1lKWZvcih0IGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpc1t0XS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sdC5ldmVudD1udWxsLHQucmVxdW90ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKFYsIlxcJCYiKX07dmFyIFY9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLFU9e30uX19wcm90b19fP2Z1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX06ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19O2Z1bmN0aW9uIHEodCl7cmV0dXJuIFUodCxXKSx0fXZhciBIPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3Rvcih0KX0sRz1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodCl9LFk9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hdGNoZXN8fHRbSSh0LCJtYXRjaGVzU2VsZWN0b3IiKV07cmV0dXJuKFk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5jYWxsKHQsZSl9KSh0LGUpfTsiZnVuY3Rpb24iPT10eXBlb2YgU2l6emxlJiYoSD1mdW5jdGlvbih0LGUpe3JldHVybiBTaXp6bGUodCxlKVswXXx8bnVsbH0sRz1TaXp6bGUsWT1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yKSx0LnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LnNlbGVjdChpLmRvY3VtZW50RWxlbWVudCl9O3ZhciBXPXQuc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtmdW5jdGlvbiBYKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0LHRoaXMpfX1mdW5jdGlvbiBaKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gRyh0LHRoaXMpfX1XLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdO3Q9WCh0KTtmb3IodmFyIG89LTEscz10aGlzLmxlbmd0aDsrK288czspe2EucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KG49dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEsYz1uLmxlbmd0aDsrK2w8YzspKGk9bltsXSk/KGUucHVzaChyPXQuY2FsbChpLGkuX19kYXRhX18sbCxvKSksciYmIl9fZGF0YV9fImluIGkmJihyLl9fZGF0YV9fPWkuX19kYXRhX18pKTplLnB1c2gobnVsbCl9cmV0dXJuIHEoYSl9LFcuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaT1bXTt0PVoodCk7Zm9yKHZhciBhPS0xLG89dGhpcy5sZW5ndGg7KythPG87KWZvcih2YXIgcz10aGlzW2FdLGw9LTEsYz1zLmxlbmd0aDsrK2w8YzspKHI9c1tsXSkmJihpLnB1c2goZT1uKHQuY2FsbChyLHIuX19kYXRhX18sbCxhKSkpLGUucGFyZW50Tm9kZT1yKTtyZXR1cm4gcShpKX07dmFyICQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBLKGUscil7cmV0dXJuIGU9dC5ucy5xdWFsaWZ5KGUpLG51bGw9PXI/ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX06ImZ1bmN0aW9uIj09dHlwZW9mIHI/ZS5sb2NhbD9mdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfTpmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX06ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfTpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFEodCl7cmV0dXJuIHQudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gdHQoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3QucmVxdW90ZShlKSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiBldCh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHJ0KHQsZSl7dmFyIHI9KHQ9ZXQodCkubWFwKG50KSkubGVuZ3RoO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7KytuPHI7KXRbbl0odGhpcyxpKX06ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPHI7KXRbbl0odGhpcyxlKX19ZnVuY3Rpb24gbnQodCl7dmFyIGU9dHQodCk7cmV0dXJuIGZ1bmN0aW9uKHIsbil7aWYoaT1yLmNsYXNzTGlzdClyZXR1cm4gbj9pLmFkZCh0KTppLnJlbW92ZSh0KTt2YXIgaT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiI7bj8oZS5sYXN0SW5kZXg9MCxlLnRlc3QoaSl8fHIuc2V0QXR0cmlidXRlKCJjbGFzcyIsUShpKyIgIit0KSkpOnIuc2V0QXR0cmlidXRlKCJjbGFzcyIsUShpLnJlcGxhY2UoZSwiICIpKSl9fWZ1bmN0aW9uIGl0KHQsZSxyKXtyZXR1cm4gbnVsbD09ZT9mdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLHIpfTpmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfX1mdW5jdGlvbiBhdCh0LGUpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9OmZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBvdChlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOihlPXQubnMucXVhbGlmeShlKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09JCYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09JD90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gc3QoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBsdCh0KXtyZXR1cm57X19kYXRhX186dH19ZnVuY3Rpb24gY3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFkodGhpcyx0KX19ZnVuY3Rpb24gdXQodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBpLGE9dFtyXSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKShpPWFbb10pJiZlKGksbyxyKTtyZXR1cm4gdH1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gVSh0LGh0KSx0fXQubnM9e3ByZWZpeDpKLHF1YWxpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI6Iikscj10O3JldHVybiBlPj0wJiYieG1sbnMiIT09KHI9dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSxKLmhhc093blByb3BlcnR5KHIpP3tzcGFjZTpKW3JdLGxvY2FsOnR9OnR9fSxXLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuKGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUoZSl9Zm9yKHIgaW4gZSl0aGlzLmVhY2goSyhyLGVbcl0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKEsoZSxyKSl9LFcuY2xhc3NlZD1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10aGlzLm5vZGUoKSxuPSh0PWV0KHQpKS5sZW5ndGgsaT0tMTtpZihlPXIuY2xhc3NMaXN0KXtmb3IoOysraTxuOylpZighZS5jb250YWlucyh0W2ldKSlyZXR1cm4hMX1lbHNlIGZvcihlPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysraTxuOylpZighdHQodFtpXSkudGVzdChlKSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IoZSBpbiB0KXRoaXMuZWFjaChydChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKHJ0KHQsZSkpfSxXLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSIiKSx0KXRoaXMuZWFjaChpdChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG8oaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKGl0KHQsZSxyKSl9LFcucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdGhpcy5ub2RlKClbdF07Zm9yKGUgaW4gdCl0aGlzLmVhY2goYXQoZSx0W2VdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChhdCh0LGUpKX0sVy50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sVy5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LFcuYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0PW90KHQpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LFcuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9b3QodCksZT1YKGUpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxXLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goc3QpfSxXLmRhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKHQ9bmV3IEFycmF5KGE9KHI9dGhpc1swXSkubGVuZ3RoKTsrK2k8YTspKG49cltpXSkmJih0W2ldPW4uX19kYXRhX18pO3JldHVybiB0fWZ1bmN0aW9uIG8odCxyKXt2YXIgbixpLGEsbz10Lmxlbmd0aCx1PXIubGVuZ3RoLGY9TWF0aC5taW4obyx1KSxoPW5ldyBBcnJheSh1KSxwPW5ldyBBcnJheSh1KSxkPW5ldyBBcnJheShvKTtpZihlKXt2YXIgZyx2PW5ldyBiLG09bmV3IEFycmF5KG8pO2ZvcihuPS0xOysrbjxvOykoaT10W25dKSYmKHYuaGFzKGc9ZS5jYWxsKGksaS5fX2RhdGFfXyxuKSk/ZFtuXT1pOnYuc2V0KGcsaSksbVtuXT1nKTtmb3Iobj0tMTsrK248dTspKGk9di5nZXQoZz1lLmNhbGwocixhPXJbbl0sbikpKT8hMCE9PWkmJihoW25dPWksaS5fX2RhdGFfXz1hKTpwW25dPWx0KGEpLHYuc2V0KGcsITApO2ZvcihuPS0xOysrbjxvOyluIGluIG0mJiEwIT09di5nZXQobVtuXSkmJihkW25dPXRbbl0pfWVsc2V7Zm9yKG49LTE7KytuPGY7KWk9dFtuXSxhPXJbbl0saT8oaS5fX2RhdGFfXz1hLGhbbl09aSk6cFtuXT1sdChhKTtmb3IoO248dTsrK24pcFtuXT1sdChyW25dKTtmb3IoO248bzsrK24pZFtuXT10W25dfXAudXBkYXRlPWgscC5wYXJlbnROb2RlPWgucGFyZW50Tm9kZT1kLnBhcmVudE5vZGU9dC5wYXJlbnROb2RlLHMucHVzaChwKSxsLnB1c2goaCksYy5wdXNoKGQpfXZhciBzPWZ0KFtdKSxsPXEoW10pLGM9cShbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKDsrK2k8YTspbyhyPXRoaXNbaV0sdC5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGkpKTtlbHNlIGZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQpO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiBjfSxsfSxXLmRhdHVtPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxXLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgYT0wLG89dGhpcy5sZW5ndGg7YTxvO2ErKyl7aS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0ocj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIHEoaSl9LFcub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciByLG49dGhpc1t0XSxpPW4ubGVuZ3RoLTEsYT1uW2ldOy0taT49MDspKHI9bltpXSkmJihhJiZhIT09ci5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LFcuc29ydD1mdW5jdGlvbih0KXt0PWZ1bmN0aW9uKHQpe2FyZ3VtZW50cy5sZW5ndGh8fCh0PWgpO3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiBlJiZyP3QoZS5fX2RhdGFfXyxyLl9fZGF0YV9fKTohZS0hcn19LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGU9LTEscj10aGlzLmxlbmd0aDsrK2U8cjspdGhpc1tlXS5zb3J0KHQpO3JldHVybiB0aGlzLm9yZGVyKCl9LFcuZWFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdXQodGhpcyxmdW5jdGlvbihlLHIsbil7dC5jYWxsKGUsZS5fX2RhdGFfXyxyLG4pfSl9LFcuY2FsbD1mdW5jdGlvbih0KXt2YXIgZT1uKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LFcuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LFcubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylmb3IodmFyIHI9dGhpc1t0XSxuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXt2YXIgYT1yW25dO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LFcuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHV0KHRoaXMsZnVuY3Rpb24oKXsrK3R9KSx0fTt2YXIgaHQ9W107ZnVuY3Rpb24gcHQoZSxyLGkpe3ZhciBhPSJfX29uIitlLG89ZS5pbmRleE9mKCIuIikscz1ndDtvPjAmJihlPWUuc2xpY2UoMCxvKSk7dmFyIGw9ZHQuZ2V0KGUpO2Z1bmN0aW9uIGMoKXt2YXIgdD10aGlzW2FdO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LHQuJCksZGVsZXRlIHRoaXNbYV0pfXJldHVybiBsJiYoZT1sLHM9dnQpLG8/cj9mdW5jdGlvbigpe3ZhciB0PXMocixuKGFyZ3VtZW50cykpO2MuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzW2FdPXQsdC4kPWkpLHQuXz1yfTpjOnI/UDpmdW5jdGlvbigpe3ZhciByLG49bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIit0LnJlcXVvdGUoZSkrIiQiKTtmb3IodmFyIGkgaW4gdGhpcylpZihyPWkubWF0Y2gobikpe3ZhciBhPXRoaXNbaV07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHJbMV0sYSxhLiQpLGRlbGV0ZSB0aGlzW2ldfX19dC5zZWxlY3Rpb24uZW50ZXI9ZnQsdC5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPWh0LGh0LmFwcGVuZD1XLmFwcGVuZCxodC5lbXB0eT1XLmVtcHR5LGh0Lm5vZGU9Vy5ub2RlLGh0LmNhbGw9Vy5jYWxsLGh0LnNpemU9Vy5zaXplLGh0LnNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPVtdLHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe249KGk9dGhpc1tzXSkudXBkYXRlLG8ucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9aS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSx1PWkubGVuZ3RoOysrYzx1OykoYT1pW2NdKT8oZS5wdXNoKG5bY109cj10LmNhbGwoaS5wYXJlbnROb2RlLGEuX19kYXRhX18sYyxzKSksci5fX2RhdGFfXz1hLl9fZGF0YV9fKTplLnB1c2gobnVsbCl9cmV0dXJuIHEobyl9LGh0Lmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByLG4saTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYocj10aGlzLGU9ZnVuY3Rpb24odCxlLGEpe3ZhciBvLHM9clthXS51cGRhdGUsbD1zLmxlbmd0aDtmb3IoYSE9aSYmKGk9YSxuPTApLGU+PW4mJihuPWUrMSk7IShvPXNbbl0pJiYrK248bDspO3JldHVybiBvfSksVy5pbnNlcnQuY2FsbCh0aGlzLHQsZSl9LHQuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1bSCh0LGkpXSkucGFyZW50Tm9kZT1pLmRvY3VtZW50RWxlbWVudDooZT1bdF0pLnBhcmVudE5vZGU9YSh0KSxxKFtlXSl9LHQuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1uKEcodCxpKSkpLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9bih0KSkucGFyZW50Tm9kZT1udWxsLHEoW2VdKX0sVy5vbj1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0hMSksdCl0aGlzLmVhY2gocHQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpcmV0dXJuKG49dGhpcy5ub2RlKClbIl9fb24iK3RdKSYmbi5fO3I9ITF9cmV0dXJuIHRoaXMuZWFjaChwdCh0LGUscikpfTt2YXIgZHQ9dC5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7ZnVuY3Rpb24gZ3QoZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9dC5ldmVudDt0LmV2ZW50PW4sclswXT10aGlzLl9fZGF0YV9fO3RyeXtlLmFwcGx5KHRoaXMscil9ZmluYWxseXt0LmV2ZW50PWl9fX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPWd0KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHIuY2FsbCh0aGlzLHQpfX1pJiZkdC5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJvbiIrdCBpbiBpJiZkdC5yZW1vdmUodCl9KTt2YXIgbXQseXQ9MDtmdW5jdGlvbiB4dChlKXt2YXIgcj0iLmRyYWdzdXBwcmVzcy0iKyArK3l0LG49ImNsaWNrIityLGk9dC5zZWxlY3QobyhlKSkub24oInRvdWNobW92ZSIrcixCKS5vbigiZHJhZ3N0YXJ0IityLEIpLm9uKCJzZWxlY3RzdGFydCIrcixCKTtpZihudWxsPT1tdCYmKG10PSEoIm9uc2VsZWN0c3RhcnQiaW4gZSkmJkkoZS5zdHlsZSwidXNlclNlbGVjdCIpKSxtdCl7dmFyIHM9YShlKS5zdHlsZSxsPXNbbXRdO3NbbXRdPSJub25lIn1yZXR1cm4gZnVuY3Rpb24odCl7aWYoaS5vbihyLG51bGwpLG10JiYoc1ttdF09bCksdCl7dmFyIGU9ZnVuY3Rpb24oKXtpLm9uKG4sbnVsbCl9O2kub24obixmdW5jdGlvbigpe0IoKSxlKCl9LCEwKSxzZXRUaW1lb3V0KGUsMCl9fX10Lm1vdXNlPWZ1bmN0aW9uKHQpe3JldHVybiBfdCh0LE4oKSl9O3ZhciBidD10aGlzLm5hdmlnYXRvciYmL1dlYktpdC8udGVzdCh0aGlzLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7ZnVuY3Rpb24gX3QoZSxyKXtyLmNoYW5nZWRUb3VjaGVzJiYocj1yLmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgbj1lLm93bmVyU1ZHRWxlbWVudHx8ZTtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgaT1uLmNyZWF0ZVNWR1BvaW50KCk7aWYoYnQ8MCl7dmFyIGE9byhlKTtpZihhLnNjcm9sbFh8fGEuc2Nyb2xsWSl7dmFyIHM9KG49dC5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpKVswXVswXS5nZXRTY3JlZW5DVE0oKTtidD0hKHMuZnx8cy5lKSxuLnJlbW92ZSgpfX1yZXR1cm4gYnQ/KGkueD1yLnBhZ2VYLGkueT1yLnBhZ2VZKTooaS54PXIuY2xpZW50WCxpLnk9ci5jbGllbnRZKSxbKGk9aS5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGkueV19dmFyIGw9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bci5jbGllbnRYLWwubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLWwudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiB3dCgpe3JldHVybiB0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9dC50b3VjaD1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj1lLGU9TigpLmNoYW5nZWRUb3VjaGVzKSxlKWZvcih2YXIgbixpPTAsYT1lLmxlbmd0aDtpPGE7KytpKWlmKChuPWVbaV0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBfdCh0LG4pfSx0LmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXt2YXIgZT1qKGEsImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIikscj1udWxsLG49cyhQLHQubW91c2UsbywibW91c2Vtb3ZlIiwibW91c2V1cCIpLGk9cyh3dCx0LnRvdWNoLHosInRvdWNobW92ZSIsInRvdWNoZW5kIik7ZnVuY3Rpb24gYSgpe3RoaXMub24oIm1vdXNlZG93bi5kcmFnIixuKS5vbigidG91Y2hzdGFydC5kcmFnIixpKX1mdW5jdGlvbiBzKG4saSxhLG8scyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGwsYz10LmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8dC5ldmVudC50YXJnZXQsdT10aGlzLnBhcmVudE5vZGUsZj1lLm9mKHRoaXMsYXJndW1lbnRzKSxoPTAscD1uKCksZD0iLmRyYWciKyhudWxsPT1wPyIiOiItIitwKSxnPXQuc2VsZWN0KGEoYykpLm9uKG8rZCxmdW5jdGlvbigpe3ZhciB0LGUscj1pKHUscCk7aWYoIXIpcmV0dXJuO3Q9clswXS1tWzBdLGU9clsxXS1tWzFdLGh8PXR8ZSxtPXIsZih7dHlwZToiZHJhZyIseDpyWzBdK2xbMF0seTpyWzFdK2xbMV0sZHg6dCxkeTplfSl9KS5vbihzK2QsZnVuY3Rpb24oKXtpZighaSh1LHApKXJldHVybjtnLm9uKG8rZCxudWxsKS5vbihzK2QsbnVsbCksdihoKSxmKHt0eXBlOiJkcmFnZW5kIn0pfSksdj14dChjKSxtPWkodSxwKTtsPXI/WyhsPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKS54LW1bMF0sbC55LW1bMV1dOlswLDBdLGYoe3R5cGU6ImRyYWdzdGFydCJ9KX19cmV0dXJuIGEub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sdC5yZWJpbmQoYSxlLCJvbiIpfSx0LnRvdWNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1OKCkudG91Y2hlcyksZT9uKGUpLm1hcChmdW5jdGlvbihlKXt2YXIgcj1fdCh0LGUpO3JldHVybiByLmlkZW50aWZpZXI9ZS5pZGVudGlmaWVyLHJ9KTpbXX07dmFyIGt0PTFlLTYsVHQ9a3Qqa3QsQXQ9TWF0aC5QSSxNdD0yKkF0LFN0PU10LWt0LEV0PUF0LzIsQ3Q9QXQvMTgwLEx0PTE4MC9BdDtmdW5jdGlvbiB6dCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gT3QodCxlLHIpe3JldHVybihlWzBdLXRbMF0pKihyWzFdLXRbMV0pLShlWzFdLXRbMV0pKihyWzBdLXRbMF0pfWZ1bmN0aW9uIEl0KHQpe3JldHVybiB0PjE/MDp0PC0xP0F0Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4gdD4xP0V0OnQ8LTE/LUV0Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBQdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBSdCh0KXtyZXR1cm4odD1NYXRoLnNpbih0LzIpKSp0fXZhciBGdD1NYXRoLlNRUlQyO3QuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxmPWwtYSxoPXUqdStmKmY7aWYoaDxUdCluPU1hdGgubG9nKGMvbykvRnQscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmYsbypNYXRoLmV4cChGdCp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoaCksZD0oYypjLW8qbys0KmgpLygyKm8qMipwKSxnPShjKmMtbypvLTQqaCkvKDIqYyoyKnApLHY9TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSxtPU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0obS12KS9GdCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9UHQodiksbD1vLygyKnApKihzKihlPUZ0KnIrdiwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfSh2KSk7cmV0dXJuW2krbCp1LGErbCpmLG8qcy9QdChGdCpyK3YpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7dmFyIGUscixuLGEscyxsLGMsdSxmLGg9e3g6MCx5OjAsazoxfSxwPVs5NjAsNTAwXSxkPWp0LGc9MjUwLHY9MCxtPSJtb3VzZWRvd24uem9vbSIseT0ibW91c2Vtb3ZlLnpvb20iLHg9Im1vdXNldXAuem9vbSIsYj0idG91Y2hzdGFydC56b29tIixfPWoodywiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKTtmdW5jdGlvbiB3KHQpe3Qub24obSx6KS5vbihOdCsiLnpvb20iLEkpLm9uKCJkYmxjbGljay56b29tIixEKS5vbihiLE8pfWZ1bmN0aW9uIGsodCl7cmV0dXJuWyh0WzBdLWgueCkvaC5rLCh0WzFdLWgueSkvaC5rXX1mdW5jdGlvbiBUKHQpe2guaz1NYXRoLm1heChkWzBdLE1hdGgubWluKGRbMV0sdCkpfWZ1bmN0aW9uIEEodCxlKXtlPWZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKmguaytoLngsdFsxXSpoLmsraC55XX0oZSksaC54Kz10WzBdLWVbMF0saC55Kz10WzFdLWVbMV19ZnVuY3Rpb24gTShlLG4saSxhKXtlLl9fY2hhcnRfXz17eDpoLngseTpoLnksazpoLmt9LFQoTWF0aC5wb3coMixhKSksQShyPW4saSksZT10LnNlbGVjdChlKSxnPjAmJihlPWUudHJhbnNpdGlvbigpLmR1cmF0aW9uKGcpKSxlLmNhbGwody5ldmVudCl9ZnVuY3Rpb24gUygpe2MmJmMuZG9tYWluKGwucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtaC54KS9oLmt9KS5tYXAobC5pbnZlcnQpKSxmJiZmLmRvbWFpbih1LnJhbmdlKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LWgueSkvaC5rfSkubWFwKHUuaW52ZXJ0KSl9ZnVuY3Rpb24gRSh0KXt2Kyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBDKHQpe1MoKSx0KHt0eXBlOiJ6b29tIixzY2FsZTpoLmssdHJhbnNsYXRlOltoLngsaC55XX0pfWZ1bmN0aW9uIEwodCl7LS12fHwodCh7dHlwZToiem9vbWVuZCJ9KSxyPW51bGwpfWZ1bmN0aW9uIHooKXt2YXIgZT10aGlzLHI9Xy5vZihlLGFyZ3VtZW50cyksbj0wLGk9dC5zZWxlY3QobyhlKSkub24oeSxmdW5jdGlvbigpe249MSxBKHQubW91c2UoZSksYSksQyhyKX0pLm9uKHgsZnVuY3Rpb24oKXtpLm9uKHksbnVsbCkub24oeCxudWxsKSxzKG4pLEwocil9KSxhPWsodC5tb3VzZShlKSkscz14dChlKTtmcy5jYWxsKGUpLEUocil9ZnVuY3Rpb24gTygpe3ZhciBlLHI9dGhpcyxuPV8ub2Yocixhcmd1bWVudHMpLGk9e30sYT0wLG89Ii56b29tLSIrdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyLGw9InRvdWNobW92ZSIrbyxjPSJ0b3VjaGVuZCIrbyx1PVtdLGY9dC5zZWxlY3QocikscD14dChyKTtmdW5jdGlvbiBkKCl7dmFyIG49dC50b3VjaGVzKHIpO3JldHVybiBlPWguayxuLmZvckVhY2goZnVuY3Rpb24odCl7dC5pZGVudGlmaWVyIGluIGkmJihpW3QuaWRlbnRpZmllcl09ayh0KSl9KSxufWZ1bmN0aW9uIGcoKXt2YXIgZT10LmV2ZW50LnRhcmdldDt0LnNlbGVjdChlKS5vbihsLHYpLm9uKGMseSksdS5wdXNoKGUpO2Zvcih2YXIgbj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89MCxmPW4ubGVuZ3RoO288ZjsrK28paVtuW29dLmlkZW50aWZpZXJdPW51bGw7dmFyIHA9ZCgpLGc9RGF0ZS5ub3coKTtpZigxPT09cC5sZW5ndGgpe2lmKGctczw1MDApe3ZhciBtPXBbMF07TShyLG0saVttLmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coaC5rKS9NYXRoLkxOMikrMSksQigpfXM9Z31lbHNlIGlmKHAubGVuZ3RoPjEpe209cFswXTt2YXIgeD1wWzFdLGI9bVswXS14WzBdLF89bVsxXS14WzFdO2E9YipiK18qX319ZnVuY3Rpb24gdigpe3ZhciBvLGwsYyx1LGY9dC50b3VjaGVzKHIpO2ZzLmNhbGwocik7Zm9yKHZhciBoPTAscD1mLmxlbmd0aDtoPHA7KytoLHU9bnVsbClpZihjPWZbaF0sdT1pW2MuaWRlbnRpZmllcl0pe2lmKGwpYnJlYWs7bz1jLGw9dX1pZih1KXt2YXIgZD0oZD1jWzBdLW9bMF0pKmQrKGQ9Y1sxXS1vWzFdKSpkLGc9YSYmTWF0aC5zcXJ0KGQvYSk7bz1bKG9bMF0rY1swXSkvMiwob1sxXStjWzFdKS8yXSxsPVsobFswXSt1WzBdKS8yLChsWzFdK3VbMV0pLzJdLFQoZyplKX1zPW51bGwsQShvLGwpLEMobil9ZnVuY3Rpb24geSgpe2lmKHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgZT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxhPWUubGVuZ3RoO3I8YTsrK3IpZGVsZXRlIGlbZVtyXS5pZGVudGlmaWVyXTtmb3IodmFyIHMgaW4gaSlyZXR1cm4gdm9pZCBkKCl9dC5zZWxlY3RBbGwodSkub24obyxudWxsKSxmLm9uKG0seikub24oYixPKSxwKCksTChuKX1nKCksRShuKSxmLm9uKG0sbnVsbCkub24oYixnKX1mdW5jdGlvbiBJKCl7dmFyIGk9Xy5vZih0aGlzLGFyZ3VtZW50cyk7YT9jbGVhclRpbWVvdXQoYSk6KGZzLmNhbGwodGhpcyksZT1rKHI9bnx8dC5tb3VzZSh0aGlzKSksRShpKSksYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YT1udWxsLEwoaSl9LDUwKSxCKCksVChNYXRoLnBvdygyLC4wMDIqQnQoKSkqaC5rKSxBKHIsZSksQyhpKX1mdW5jdGlvbiBEKCl7dmFyIGU9dC5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGguaykvTWF0aC5MTjI7TSh0aGlzLGUsayhlKSx0LmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChyKS0xOk1hdGguZmxvb3IocikrMSl9cmV0dXJuIE50fHwoTnQ9Im9ud2hlZWwiaW4gaT8oQnQ9ZnVuY3Rpb24oKXtyZXR1cm4tdC5ldmVudC5kZWx0YVkqKHQuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBpPyhCdD1mdW5jdGlvbigpe3JldHVybiB0LmV2ZW50LndoZWVsRGVsdGF9LCJtb3VzZXdoZWVsIik6KEJ0PWZ1bmN0aW9uKCl7cmV0dXJuLXQuZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSx3LmV2ZW50PWZ1bmN0aW9uKGUpe2UuZWFjaChmdW5jdGlvbigpe3ZhciBlPV8ub2YodGhpcyxhcmd1bWVudHMpLG49aDtkcz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtoPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LEUoZSl9KS50d2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBpPXBbMF0sYT1wWzFdLG89cj9yWzBdOmkvMixzPXI/clsxXTphLzIsbD10LmludGVycG9sYXRlWm9vbShbKG8taC54KS9oLmssKHMtaC55KS9oLmssaS9oLmtdLFsoby1uLngpL24uaywocy1uLnkpL24uayxpL24ua10pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1sKHQpLG49aS9yWzJdO3RoaXMuX19jaGFydF9fPWg9e3g6by1yWzBdKm4seTpzLXJbMV0qbixrOm59LEMoZSl9fSkuZWFjaCgiaW50ZXJydXB0Lnpvb20iLGZ1bmN0aW9uKCl7TChlKX0pLmVhY2goImVuZC56b29tIixmdW5jdGlvbigpe0woZSl9KToodGhpcy5fX2NoYXJ0X189aCxFKGUpLEMoZSksTChlKSl9KX0sdy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9e3g6K3RbMF0seTordFsxXSxrOmgua30sUygpLHcpOltoLngsaC55XX0sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD17eDpoLngseTpoLnksazpudWxsfSxUKCt0KSxTKCksdyk6aC5rfSx3LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PXQ/anQ6Wyt0WzBdLCt0WzFdXSx3KTpkfSx3LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10JiZbK3RbMF0sK3RbMV1dLHcpOm59LHcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10JiZbK3RbMF0sK3RbMV1dLHcpOnB9LHcuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3Qsdyk6Z30sdy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbD10LmNvcHkoKSxoPXt4OjAseTowLGs6MX0sdyk6Y30sdy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXQsdT10LmNvcHkoKSxoPXt4OjAseTowLGs6MX0sdyk6Zn0sdC5yZWJpbmQodyxfLCJvbiIpfTt2YXIgQnQsTnQsanQ9WzAsMS8wXTtmdW5jdGlvbiBWdCgpe31mdW5jdGlvbiBVdCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBVdD8odGhpcy5oPSt0LHRoaXMucz0rZSx2b2lkKHRoaXMubD0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgVXQ/bmV3IFV0KHQuaCx0LnMsdC5sKTp1ZSgiIit0LGZlLFV0KTpuZXcgVXQodCxlLHIpfXQuY29sb3I9VnQsVnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LHQuaHNsPVV0O3ZhciBxdD1VdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIEh0KHQsZSxyKXt2YXIgbixpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KmZ1bmN0aW9uKHQpe3JldHVybiB0PjM2MD90LT0zNjA6dDwwJiYodCs9MzYwKSx0PDYwP24rKGktbikqdC82MDp0PDE4MD9pOnQ8MjQwP24rKGktbikqKDI0MC10KS82MDpufSh0KSl9cmV0dXJuIHQ9aXNOYU4odCk/MDoodCU9MzYwKTwwP3QrMzYwOnQsZT1pc05hTihlKT8wOmU8MD8wOmU+MT8xOmUsbj0yKihyPXI8MD8wOnI+MT8xOnIpLShpPXI8PS41P3IqKDErZSk6citlLXIqZSksbmV3IGFlKGEodCsxMjApLGEodCksYSh0LTEyMCkpfWZ1bmN0aW9uIEd0KGUscixuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEd0Pyh0aGlzLmg9K2UsdGhpcy5jPStyLHZvaWQodGhpcy5sPStuKSk6YXJndW1lbnRzLmxlbmd0aDwyP2UgaW5zdGFuY2VvZiBHdD9uZXcgR3QoZS5oLGUuYyxlLmwpOmVlKGUgaW5zdGFuY2VvZiBYdD9lLmw6KGU9aGUoKGU9dC5yZ2IoZSkpLnIsZS5nLGUuYikpLmwsZS5hLGUuYik6bmV3IEd0KGUscixuKX1xdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IFV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL3QpfSxxdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBVdCh0aGlzLmgsdGhpcy5zLHQqdGhpcy5sKX0scXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sdC5oY2w9R3Q7dmFyIFl0PUd0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gV3QodCxlLHIpe3JldHVybiBpc05hTih0KSYmKHQ9MCksaXNOYU4oZSkmJihlPTApLG5ldyBYdChyLE1hdGguY29zKHQqPUN0KSplLE1hdGguc2luKHQpKmUpfWZ1bmN0aW9uIFh0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFh0Pyh0aGlzLmw9K3QsdGhpcy5hPStlLHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBYdD9uZXcgWHQodC5sLHQuYSx0LmIpOnQgaW5zdGFuY2VvZiBHdD9XdCh0LmgsdC5jLHQubCk6aGUoKHQ9YWUodCkpLnIsdC5nLHQuYik6bmV3IFh0KHQsZSxyKX1ZdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtadCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFl0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtWnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxZdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gV3QodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSx0LmxhYj1YdDt2YXIgWnQ9MTgsJHQ9Ljk1MDQ3LEp0PTEsS3Q9MS4wODg4MyxRdD1YdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj0odCsxNikvMTE2LGk9bitlLzUwMCxhPW4tci8yMDA7cmV0dXJuIG5ldyBhZShpZSgzLjI0MDQ1NDIqKGk9cmUoaSkqJHQpLTEuNTM3MTM4NSoobj1yZShuKSpKdCktLjQ5ODUzMTQqKGE9cmUoYSkqS3QpKSxpZSgtLjk2OTI2NippKzEuODc2MDEwOCpuKy4wNDE1NTYqYSksaWUoLjA1NTY0MzQqaS0uMjA0MDI1OSpuKzEuMDU3MjI1MiphKSl9ZnVuY3Rpb24gZWUodCxlLHIpe3JldHVybiB0PjA/bmV3IEd0KE1hdGguYXRhbjIocixlKSpMdCxNYXRoLnNxcnQoZSplK3IqciksdCk6bmV3IEd0KE5hTixOYU4sdCl9ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ+LjIwNjg5MzAzND90KnQqdDoodC00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD4uMDA4ODU2P01hdGgucG93KHQsMS8zKTo3Ljc4NzAzNyp0KzQvMjl9ZnVuY3Rpb24gaWUodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Kih0PD0uMDAzMDQ/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gYWUodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYWU/KHRoaXMucj1+fnQsdGhpcy5nPX5+ZSx2b2lkKHRoaXMuYj1+fnIpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIGFlP25ldyBhZSh0LnIsdC5nLHQuYik6dWUoIiIrdCxhZSxIdCk6bmV3IGFlKHQsZSxyKX1mdW5jdGlvbiBvZSh0KXtyZXR1cm4gbmV3IGFlKHQ+PjE2LHQ+PjgmMjU1LDI1NSZ0KX1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gb2UodCkrIiJ9UXQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1pbigxMDAsdGhpcy5sK1p0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxRdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1heCgwLHRoaXMubC1adCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sUXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHRlKHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sdC5yZ2I9YWU7dmFyIGxlPWFlLnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gY2UodCl7cmV0dXJuIHQ8MTY/IjAiK01hdGgubWF4KDAsdCkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx0KS50b1N0cmluZygxNil9ZnVuY3Rpb24gdWUodCxlLHIpe3ZhciBuLGksYSxvPTAscz0wLGw9MDtpZihuPS8oW2Etel0rKVwoKC4qKVwpLy5leGVjKHQ9dC50b0xvd2VyQ2FzZSgpKSlzd2l0Y2goaT1uWzJdLnNwbGl0KCIsIiksblsxXSl7Y2FzZSJoc2wiOnJldHVybiByKHBhcnNlRmxvYXQoaVswXSkscGFyc2VGbG9hdChpWzFdKS8xMDAscGFyc2VGbG9hdChpWzJdKS8xMDApO2Nhc2UicmdiIjpyZXR1cm4gZShkZShpWzBdKSxkZShpWzFdKSxkZShpWzJdKSl9cmV0dXJuKGE9Z2UuZ2V0KHQpKT9lKGEucixhLmcsYS5iKToobnVsbD09dHx8IiMiIT09dC5jaGFyQXQoMCl8fGlzTmFOKGE9cGFyc2VJbnQodC5zbGljZSgxKSwxNikpfHwoND09PXQubGVuZ3RoPyhvPSgzODQwJmEpPj40LG98PW8+PjQscz0yNDAmYSxzfD1zPj40LGw9MTUmYSxsfD1sPDw0KTo3PT09dC5sZW5ndGgmJihvPSgxNjcxMTY4MCZhKT4+MTYscz0oNjUyODAmYSk+PjgsbD0yNTUmYSkpLGUobyxzLGwpKX1mdW5jdGlvbiBmZSh0LGUscil7dmFyIG4saSxhPU1hdGgubWluKHQvPTI1NSxlLz0yNTUsci89MjU1KSxvPU1hdGgubWF4KHQsZSxyKSxzPW8tYSxsPShvK2EpLzI7cmV0dXJuIHM/KGk9bDwuNT9zLyhvK2EpOnMvKDItby1hKSxuPXQ9PW8/KGUtcikvcysoZTxyPzY6MCk6ZT09bz8oci10KS9zKzI6KHQtZSkvcys0LG4qPTYwKToobj1OYU4saT1sPjAmJmw8MT8wOm4pLG5ldyBVdChuLGksbCl9ZnVuY3Rpb24gaGUodCxlLHIpe3ZhciBuPW5lKCguNDEyNDU2NCoodD1wZSh0KSkrLjM1NzU3NjEqKGU9cGUoZSkpKy4xODA0Mzc1KihyPXBlKHIpKSkvJHQpLGk9bmUoKC4yMTI2NzI5KnQrLjcxNTE1MjIqZSsuMDcyMTc1KnIpL0p0KTtyZXR1cm4gWHQoMTE2KmktMTYsNTAwKihuLWkpLDIwMCooaS1uZSgoLjAxOTMzMzkqdCsuMTE5MTkyKmUrLjk1MDMwNDEqcikvS3QpKSl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZGUodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4iJSI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqZSk6ZX1sZS5icmlnaHRlcj1mdW5jdGlvbih0KXt0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKTt2YXIgZT10aGlzLnIscj10aGlzLmcsbj10aGlzLmIsaT0zMDtyZXR1cm4gZXx8cnx8bj8oZSYmZTxpJiYoZT1pKSxyJiZyPGkmJihyPWkpLG4mJm48aSYmKG49aSksbmV3IGFlKE1hdGgubWluKDI1NSxlL3QpLE1hdGgubWluKDI1NSxyL3QpLE1hdGgubWluKDI1NSxuL3QpKSk6bmV3IGFlKGksaSxpKX0sbGUuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYWUoKHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpKSp0aGlzLnIsdCp0aGlzLmcsdCp0aGlzLmIpfSxsZS5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gZmUodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxsZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIjIitjZSh0aGlzLnIpK2NlKHRoaXMuZykrY2UodGhpcy5iKX07dmFyIGdlPXQubWFwKHthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9KTtmdW5jdGlvbiB2ZSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG1lKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKG49cixyPW51bGwpLHllKGUscix0LG4pfX1mdW5jdGlvbiB5ZShlLHIsaSxhKXt2YXIgbz17fSxzPXQuZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGw9e30sYz1uZXcgWE1MSHR0cFJlcXVlc3QsdT1udWxsO2Z1bmN0aW9uIGYoKXt2YXIgdCxlPWMuc3RhdHVzO2lmKCFlJiZmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlVHlwZTtyZXR1cm4gZSYmInRleHQiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fShjKXx8ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSl7dHJ5e3Q9aS5jYWxsKG8sYyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcy5lcnJvci5jYWxsKG8sdCl9cy5sb2FkLmNhbGwobyx0KX1lbHNlIHMuZXJyb3IuY2FsbChvLGMpfXJldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3QoZSl8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj1mOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJmYoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKGUpe3ZhciByPXQuZXZlbnQ7dC5ldmVudD1lO3RyeXtzLnByb2dyZXNzLmNhbGwobyxjKX1maW5hbGx5e3QuZXZlbnQ9cn19LG8uaGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2xbdF06KG51bGw9PWU/ZGVsZXRlIGxbdF06bFt0XT1lKyIiLG8pfSxvLm1pbWVUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDp0KyIiLG8pOnJ9LG8ucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbyk6dX0sby5yZXNwb25zZT1mdW5jdGlvbih0KXtyZXR1cm4gaT10LG99LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24odCl7b1t0XT1mdW5jdGlvbigpe3JldHVybiBvLnNlbmQuYXBwbHkobyxbdF0uY29uY2F0KG4oYXJndW1lbnRzKSkpfX0pLG8uc2VuZD1mdW5jdGlvbih0LG4saSl7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49bnVsbCksYy5vcGVuKHQsZSwhMCksbnVsbD09cnx8ImFjY2VwdCJpbiBsfHwobC5hY2NlcHQ9cisiLCovKiIpLGMuc2V0UmVxdWVzdEhlYWRlcilmb3IodmFyIGEgaW4gbCljLnNldFJlcXVlc3RIZWFkZXIoYSxsW2FdKTtyZXR1cm4gbnVsbCE9ciYmYy5vdmVycmlkZU1pbWVUeXBlJiZjLm92ZXJyaWRlTWltZVR5cGUociksbnVsbCE9dSYmKGMucmVzcG9uc2VUeXBlPXUpLG51bGwhPWkmJm8ub24oImVycm9yIixpKS5vbigibG9hZCIsZnVuY3Rpb24odCl7aShudWxsLHQpfSkscy5iZWZvcmVzZW5kLmNhbGwobyxjKSxjLnNlbmQobnVsbD09bj9udWxsOm4pLG99LG8uYWJvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5hYm9ydCgpLG99LHQucmViaW5kKG8scywib24iKSxudWxsPT1hP286by5nZXQoZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3QobnVsbD09ZT9yOm51bGwpfTp0fShhKSl9Z2UuZm9yRWFjaChmdW5jdGlvbih0LGUpe2dlLnNldCh0LG9lKGUpKX0pLHQuZnVuY3Rvcj12ZSx0Lnhocj1tZSh6KSx0LmRzdj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBSZWdFeHAoJ1siJyt0KyJcbl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBpKHQscixuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPXIscj1udWxsKTt2YXIgaT15ZSh0LGUsbnVsbD09cj9hOm8ociksbik7cmV0dXJuIGkucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kucmVzcG9uc2UobnVsbD09KHI9dCk/YTpvKHQpKTpyfSxpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGkucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBpLnBhcnNlKGUucmVzcG9uc2VUZXh0LHQpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLm1hcChsKS5qb2luKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIudGVzdCh0KT8nIicrdC5yZXBsYWNlKC9cIi9nLCciIicpKyciJzp0fXJldHVybiBpLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIGkucGFyc2VSb3dzKHQsZnVuY3Rpb24odCxuKXtpZihyKXJldHVybiByKHQsbi0xKTt2YXIgaT1uZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkuam9pbigiLCIpKyJ9Iik7cj1lP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUoaSh0KSxyKX06aX0pfSxpLnBhcnNlUm93cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT17fSxvPXt9LHM9W10sbD10Lmxlbmd0aCxjPTAsdT0wO2Z1bmN0aW9uIGYoKXtpZihjPj1sKXJldHVybiBvO2lmKGkpcmV0dXJuIGk9ITEsYTt2YXIgZT1jO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8bDspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBjPXIrMiwxMz09PShzPXQuY2hhckNvZGVBdChyKzEpKT8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09cyYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M8bDspe3ZhciBzLHU9MTtpZigxMD09PShzPXQuY2hhckNvZGVBdChjKyspKSlpPSEwO2Vsc2UgaWYoMTM9PT1zKWk9ITAsMTA9PT10LmNoYXJDb2RlQXQoYykmJigrK2MsKyt1KTtlbHNlIGlmKHMhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGUsYy11KX1yZXR1cm4gdC5zbGljZShlKX1mb3IoOyhyPWYoKSkhPT1vOyl7Zm9yKHZhciBoPVtdO3IhPT1hJiZyIT09bzspaC5wdXNoKHIpLHI9ZigpO2UmJm51bGw9PShoPWUoaCx1KyspKXx8cy5wdXNoKGgpfXJldHVybiBzfSxpLmZvcm1hdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiBpLmZvcm1hdFJvd3MoZSk7dmFyIHI9bmV3IEwsbj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KXIuaGFzKGUpfHxuLnB1c2goci5hZGQoZSkpfSksW24ubWFwKGwpLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGwoZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LGkuZm9ybWF0Um93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuam9pbigiXG4iKX0saX0sdC5jc3Y9dC5kc3YoIiwiLCJ0ZXh0L2NzdiIpLHQudHN2PXQuZHN2KCJcdCIsInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiKTt2YXIgeGUsYmUsX2Usd2Usa2U9dGhpc1tJKHRoaXMsInJlcXVlc3RBbmltYXRpb25GcmFtZSIpXXx8ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gVGUodCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7bjwyJiYoZT0wKSxuPDMmJihyPURhdGUubm93KCkpO3ZhciBpPXtjOnQsdDpyK2UsbjpudWxsfTtyZXR1cm4gYmU/YmUubj1pOnhlPWksYmU9aSxfZXx8KHdlPWNsZWFyVGltZW91dCh3ZSksX2U9MSxrZShBZSkpLGl9ZnVuY3Rpb24gQWUoKXt2YXIgdD1NZSgpLGU9U2UoKS10O2U+MjQ/KGlzRmluaXRlKGUpJiYoY2xlYXJUaW1lb3V0KHdlKSx3ZT1zZXRUaW1lb3V0KEFlLGUpKSxfZT0wKTooX2U9MSxrZShBZSkpfWZ1bmN0aW9uIE1lKCl7Zm9yKHZhciB0PURhdGUubm93KCksZT14ZTtlOyl0Pj1lLnQmJmUuYyh0LWUudCkmJihlLmM9bnVsbCksZT1lLm47cmV0dXJuIHR9ZnVuY3Rpb24gU2UoKXtmb3IodmFyIHQsZT14ZSxyPTEvMDtlOyllLmM/KGUudDxyJiYocj1lLnQpLGU9KHQ9ZSkubik6ZT10P3Qubj1lLm46eGU9ZS5uO3JldHVybiBiZT10LHJ9ZnVuY3Rpb24gRWUodCxlKXtyZXR1cm4gZS0odD9NYXRoLmNlaWwoTWF0aC5sb2codCkvTWF0aC5MTjEwKToxKX10LnRpbWVyPWZ1bmN0aW9uKCl7VGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0LnRpbWVyLmZsdXNoPWZ1bmN0aW9uKCl7TWUoKSxTZSgpfSx0LnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/TWF0aC5yb3VuZCh0KihlPU1hdGgucG93KDEwLGUpKSkvZTpNYXRoLnJvdW5kKHQpfTt2YXIgQ2U9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0ubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMTAsMyp5KDgtZSkpO3JldHVybntzY2FsZTplPjg/ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sc3ltYm9sOnR9fSk7dC5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wO3JldHVybihlPStlKSYmKGU8MCYmKGUqPS0xKSxyJiYoZT10LnJvdW5kKGUsRWUoZSxyKSkpLG49MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKGUpL01hdGguTE4xMCksbj1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChuLTEpLzMpKSkpLENlWzgrbi8zXX07dmFyIExlPS8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1wtIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLi0/XGQrKT8oW2EteiVdKT8vaSx6ZT10Lm1hcCh7YjpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0KX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZyg4KX0seDpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNil9LFg6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxyOmZ1bmN0aW9uKGUscil7cmV0dXJuKGU9dC5yb3VuZChlLEVlKGUscikpKS50b0ZpeGVkKE1hdGgubWF4KDAsTWF0aC5taW4oMjAsRWUoZSooMSsxZS0xNSkscikpKSl9fSk7ZnVuY3Rpb24gT2UodCl7cmV0dXJuIHQrIiJ9dmFyIEllPXQudGltZT17fSxEZT1EYXRlO2Z1bmN0aW9uIFBlKCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1QZS5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdldFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7UmUuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7UmUuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe1JlLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe1JlLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtSZS5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtSZS5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe1JlLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1bmN0aW9uKCl7UmUuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0VGltZTpmdW5jdGlvbigpe1JlLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2YXIgUmU9RGF0ZS5wcm90b3R5cGU7ZnVuY3Rpb24gRmUodCxlLHIpe2Z1bmN0aW9uIG4oZSl7dmFyIHI9dChlKSxuPWEociwxKTtyZXR1cm4gZS1yPG4tZT9yOm59ZnVuY3Rpb24gaShyKXtyZXR1cm4gZShyPXQobmV3IERlKHItMSkpLDEpLHJ9ZnVuY3Rpb24gYSh0LHIpe3JldHVybiBlKHQ9bmV3IERlKCt0KSxyKSx0fWZ1bmN0aW9uIG8odCxuLGEpe3ZhciBvPWkodCkscz1bXTtpZihhPjEpZm9yKDtvPG47KXIobyklYXx8cy5wdXNoKG5ldyBEYXRlKCtvKSksZShvLDEpO2Vsc2UgZm9yKDtvPG47KXMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtyZXR1cm4gc310LmZsb29yPXQsdC5yb3VuZD1uLHQuY2VpbD1pLHQub2Zmc2V0PWEsdC5yYW5nZT1vO3ZhciBzPXQudXRjPUJlKHQpO3JldHVybiBzLmZsb29yPXMscy5yb3VuZD1CZShuKSxzLmNlaWw9QmUoaSkscy5vZmZzZXQ9QmUoYSkscy5yYW5nZT1mdW5jdGlvbih0LGUscil7dHJ5e0RlPVBlO3ZhciBuPW5ldyBQZTtyZXR1cm4gbi5fPXQsbyhuLGUscil9ZmluYWxseXtEZT1EYXRlfX0sdH1mdW5jdGlvbiBCZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt0cnl7RGU9UGU7dmFyIG49bmV3IFBlO3JldHVybiBuLl89ZSx0KG4scikuX31maW5hbGx5e0RlPURhdGV9fX1JZS55ZWFyPUZlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0TW9udGgoMCwxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSksSWUueWVhcnM9SWUueWVhci5yYW5nZSxJZS55ZWFycy51dGM9SWUueWVhci51dGMucmFuZ2UsSWUuZGF5PUZlKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEZSgyZTMsMCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSksZX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSksSWUuZGF5cz1JZS5kYXkucmFuZ2UsSWUuZGF5cy51dGM9SWUuZGF5LnV0Yy5yYW5nZSxJZS5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9SWUueWVhcih0KTtyZXR1cm4gTWF0aC5mbG9vcigodC1lLTZlNCoodC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0sWyJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlkYXkiLCJzYXR1cmRheSJdLmZvckVhY2goZnVuY3Rpb24odCxlKXtlPTctZTt2YXIgcj1JZVt0XT1GZShmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrZSklNyksdH0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7dmFyIHI9SWUueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoSWUuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpLShyIT09ZSl9KTtJZVt0KyJzIl09ci5yYW5nZSxJZVt0KyJzIl0udXRjPXIudXRjLnJhbmdlLEllW3QrIk9mWWVhciJdPWZ1bmN0aW9uKHQpe3ZhciByPUllLnllYXIodCkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKEllLmRheU9mWWVhcih0KSsocitlKSU3KS83KX19KSxJZS53ZWVrPUllLnN1bmRheSxJZS53ZWVrcz1JZS5zdW5kYXkucmFuZ2UsSWUud2Vla3MudXRjPUllLnN1bmRheS51dGMucmFuZ2UsSWUud2Vla09mWWVhcj1JZS5zdW5kYXlPZlllYXI7dmFyIE5lPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGplPS9eXHMqXGQrLyxWZT0vXiUvO2Z1bmN0aW9uIFVlKHQsZSxyKXt2YXIgbj10PDA/Ii0iOiIiLGk9KG4/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIHFlKGUpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86IitlLm1hcCh0LnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBIZSh0KXtmb3IodmFyIGU9bmV3IGIscj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnNldCh0W3JdLnRvTG93ZXJDYXNlKCkscik7cmV0dXJuIGV9ZnVuY3Rpb24gR2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8odC55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFplKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbixpPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBpPyh0Lnk9KG49K2lbMF0pKyhuPjY4PzE5MDA6MmUzKSxyK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkZSh0LGUscil7cmV0dXJuL15bKy1dXGR7NH0kLy50ZXN0KGU9ZS5zbGljZShyLHIrNSkpPyh0Llo9LWUscis1KTotMX1mdW5jdGlvbiBKZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lmo9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdHIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXIodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpLHI9ZT4wPyItIjoiKyIsbj15KGUpLzYwfDAsaT15KGUpJTYwO3JldHVybiByK1VlKG4sIjAiLDIpK1VlKGksIjAiLDIpfWZ1bmN0aW9uIGFyKHQsZSxyKXtWZS5sYXN0SW5kZXg9MDt2YXIgbj1WZS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIG9yKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPS0xOysrcjxlOyl0W3JdWzBdPXRoaXModFtyXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49dFtyXTshblsxXShlKTspbj10Wysrcl07cmV0dXJuIG5bMF0oZSl9fXQubG9jYWxlPWZ1bmN0aW9uKGUpe3JldHVybntudW1iZXJGb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHI9ZS5kZWNpbWFsLG49ZS50aG91c2FuZHMsaT1lLmdyb3VwaW5nLGE9ZS5jdXJyZW5jeSxvPWkmJm4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsYT1bXSxvPTAscz1pWzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmUmJihzPU1hdGgubWF4KDEsZS1sKSksYS5wdXNoKHQuc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5lKSk7KXM9aVtvPShvKzEpJWkubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX06ejtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49TGUuZXhlYyhlKSxpPW5bMV18fCIgIixzPW5bMl18fCI+IixsPW5bM118fCItIixjPW5bNF18fCIiLHU9bls1XSxmPStuWzZdLGg9bls3XSxwPW5bOF0sZD1uWzldLGc9MSx2PSIiLG09IiIseT0hMSx4PSEwO3N3aXRjaChwJiYocD0rcC5zdWJzdHJpbmcoMSkpLCh1fHwiMCI9PT1pJiYiPSI9PT1zKSYmKHU9aT0iMCIscz0iPSIpLGQpe2Nhc2UibiI6aD0hMCxkPSJnIjticmVhaztjYXNlIiUiOmc9MTAwLG09IiUiLGQ9ImYiO2JyZWFrO2Nhc2UicCI6Zz0xMDAsbT0iJSIsZD0iciI7YnJlYWs7Y2FzZSJiIjpjYXNlIm8iOmNhc2UieCI6Y2FzZSJYIjoiIyI9PT1jJiYodj0iMCIrZC50b0xvd2VyQ2FzZSgpKTtjYXNlImMiOng9ITE7Y2FzZSJkIjp5PSEwLHA9MDticmVhaztjYXNlInMiOmc9LTEsZD0iciJ9IiQiPT09YyYmKHY9YVswXSxtPWFbMV0pLCJyIiE9ZHx8cHx8KGQ9ImciKSxudWxsIT1wJiYoImciPT1kP3A9TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwKSk6ImUiIT1kJiYiZiIhPWR8fChwPU1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpKSksZD16ZS5nZXQoZCl8fE9lO3ZhciBiPXUmJmg7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW07aWYoeSYmZSUxKXJldHVybiIiO3ZhciBhPWU8MHx8MD09PWUmJjEvZTwwPyhlPS1lLCItIik6Ii0iPT09bD8iIjpsO2lmKGc8MCl7dmFyIGM9dC5mb3JtYXRQcmVmaXgoZSxwKTtlPWMuc2NhbGUoZSksbj1jLnN5bWJvbCttfWVsc2UgZSo9Zzt2YXIgXyx3LGs9KGU9ZChlLHApKS5sYXN0SW5kZXhPZigiLiIpO2lmKGs8MCl7dmFyIFQ9eD9lLmxhc3RJbmRleE9mKCJlIik6LTE7VDwwPyhfPWUsdz0iIik6KF89ZS5zdWJzdHJpbmcoMCxUKSx3PWUuc3Vic3RyaW5nKFQpKX1lbHNlIF89ZS5zdWJzdHJpbmcoMCxrKSx3PXIrZS5zdWJzdHJpbmcoaysxKTshdSYmaCYmKF89byhfLDEvMCkpO3ZhciBBPXYubGVuZ3RoK18ubGVuZ3RoK3cubGVuZ3RoKyhiPzA6YS5sZW5ndGgpLE09QTxmP25ldyBBcnJheShBPWYtQSsxKS5qb2luKGkpOiIiO3JldHVybiBiJiYoXz1vKE0rXyxNLmxlbmd0aD9mLXcubGVuZ3RoOjEvMCkpLGErPXYsZT1fK3csKCI8Ij09PXM/YStlK006Ij4iPT09cz9NK2ErZToiXiI9PT1zP00uc3Vic3RyaW5nKDAsQT4+PTEpK2ErZStNLnN1YnN0cmluZyhBKTphKyhiP2U6TStlKSkrbn19fShlKSx0aW1lRm9ybWF0OmZ1bmN0aW9uKGUpe3ZhciByPWUuZGF0ZVRpbWUsbj1lLmRhdGUsaT1lLnRpbWUsYT1lLnBlcmlvZHMsbz1lLmRheXMscz1lLnNob3J0RGF5cyxsPWUubW9udGhzLGM9ZS5zaG9ydE1vbnRocztmdW5jdGlvbiB1KHQpe3ZhciBlPXQubGVuZ3RoO2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYSxvPVtdLHM9LTEsbD0wOysrczxlOykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShpPU5lW249dC5jaGFyQXQoKytzKV0pJiYobj10LmNoYXJBdCgrK3MpKSwoYT1fW25dKSYmKG49YShyLG51bGw9PWk/ImUiPT09bj8iICI6IjAiOmkpKSxvLnB1c2gobiksbD1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShsLHMpKSxvLmpvaW4oIiIpfXJldHVybiByLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxsfTtpZihmKHIsdCxlLDApIT1lLmxlbmd0aClyZXR1cm4gbnVsbDsicCJpbiByJiYoci5IPXIuSCUxMisxMipyLnApO3ZhciBuPW51bGwhPXIuWiYmRGUhPT1QZSxpPW5ldyhuP1BlOkRlKTtyZXR1cm4iaiJpbiByP2kuc2V0RnVsbFllYXIoci55LDAsci5qKToiVyJpbiByfHwiVSJpbiByPygidyJpbiByfHwoci53PSJXImluIHI/MTowKSxpLnNldEZ1bGxZZWFyKHIueSwwLDEpLGkuc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcrNypyLlctKGkuZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKGkuZ2V0RGF5KCkrNiklNykpOmkuc2V0RnVsbFllYXIoci55LHIubSxyLmQpLGkuc2V0SG91cnMoci5IKyhyLlovMTAwfDApLHIuTStyLlolMTAwLHIuUyxyLkwpLG4/aS5fOml9LHIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0scn1mdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0wLGw9ZS5sZW5ndGgsYz1yLmxlbmd0aDtzPGw7KXtpZihuPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KHMrKykpKXtpZihvPWUuY2hhckF0KHMrKyksIShhPXdbbyBpbiBOZT9lLmNoYXJBdChzKyspOm9dKXx8KG49YSh0LHIsbikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1yLmNoYXJDb2RlQXQobisrKSlyZXR1cm4tMX1yZXR1cm4gbn11LnV0Yz1mdW5jdGlvbih0KXt2YXIgZT11KHQpO2Z1bmN0aW9uIHIodCl7dHJ5e3ZhciByPW5ldyhEZT1QZSk7cmV0dXJuIHIuXz10LGUocil9ZmluYWxseXtEZT1EYXRlfX1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0KXt0cnl7RGU9UGU7dmFyIHI9ZS5wYXJzZSh0KTtyZXR1cm4gciYmci5ffWZpbmFsbHl7RGU9RGF0ZX19LHIudG9TdHJpbmc9ZS50b1N0cmluZyxyfSx1Lm11bHRpPXUudXRjLm11bHRpPW9yO3ZhciBoPXQubWFwKCkscD1xZShvKSxkPUhlKG8pLGc9cWUocyksdj1IZShzKSxtPXFlKGwpLHk9SGUobCkseD1xZShjKSxiPUhlKGMpO2EuZm9yRWFjaChmdW5jdGlvbih0LGUpe2guc2V0KHQudG9Mb3dlckNhc2UoKSxlKX0pO3ZhciBfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRNb250aCgpXX0sYzp1KHIpLGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXREYXRlKCksZSwyKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldERhdGUoKSxlLDIpfSxIOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSxlLDIpfSxJOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX0sajpmdW5jdGlvbih0LGUpe3JldHVybiBVZSgxK0llLmRheU9mWWVhcih0KSxlLDMpfSxMOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX0sbTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldE1vbnRoKCkrMSxlLDIpfSxNOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0TWludXRlcygpLGUsMil9LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGFbKyh0LmdldEhvdXJzKCk+PTEyKV19LFM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXRTZWNvbmRzKCksZSwyKX0sVTpmdW5jdGlvbih0LGUpe3JldHVybiBVZShJZS5zdW5kYXlPZlllYXIodCksZSwyKX0sdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sVzpmdW5jdGlvbih0LGUpe3JldHVybiBVZShJZS5tb25kYXlPZlllYXIodCksZSwyKX0seDp1KG4pLFg6dShpKSx5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX0sWTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9LFo6aXIsIiUiOmZ1bmN0aW9uKCl7cmV0dXJuIiUifX0sdz17YTpmdW5jdGlvbih0LGUscil7Zy5sYXN0SW5kZXg9MDt2YXIgbj1nLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz12LmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxyKXtwLmxhc3RJbmRleD0wO3ZhciBuPXAuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PWQuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLHIpe3gubGFzdEluZGV4PTA7dmFyIG49eC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09Yi5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUscil7bS5sYXN0SW5kZXg9MDt2YXIgbj1tLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT15LmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZih0LF8uYy50b1N0cmluZygpLGUscil9LGQ6S2UsZTpLZSxIOnRyLEk6dHIsajpRZSxMOm5yLG06SmUsTTplcixwOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1oLmdldChlLnNsaWNlKHIscis9MikudG9Mb3dlckNhc2UoKSk7cmV0dXJuIG51bGw9PW4/LTE6KHQucD1uLHIpfSxTOnJyLFU6WWUsdzpHZSxXOldlLHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmKHQsXy54LnRvU3RyaW5nKCksZSxyKX0sWDpmdW5jdGlvbih0LGUscil7cmV0dXJuIGYodCxfLlgudG9TdHJpbmcoKSxlLHIpfSx5OlplLFk6WGUsWjokZSwiJSI6YXJ9O3JldHVybiB1fShlKX19O3ZhciBzcj10LmxvY2FsZSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlbS8lZC8lWSIsdGltZToiJUg6JU06JVMiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gbHIoKXt9dC5mb3JtYXQ9c3IubnVtYmVyRm9ybWF0LHQuZ2VvPXt9LGxyLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24odCl7dXIodCx0aGlzLnQsY3IpLHVyKGNyLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWNyLnQ6dGhpcy5zPWNyLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBjcj1uZXcgbHI7ZnVuY3Rpb24gdXIodCxlLHIpe3ZhciBuPXIucz10K2UsaT1uLXQsYT1uLWk7ci50PXQtYSsoZS1pKX1mdW5jdGlvbiBmcih0LGUpe3QmJnByLmhhc093blByb3BlcnR5KHQudHlwZSkmJnByW3QudHlwZV0odCxlKX10Lmdlby5zdHJlYW09ZnVuY3Rpb24odCxlKXt0JiZoci5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP2hyW3QudHlwZV0odCxlKTpmcih0LGUpfTt2YXIgaHI9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtmcih0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZnIocltuXS5nZW9tZXRyeSxlKX19LHByPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspdD1yW25dLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7ZHIodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWRyKHJbbl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe2dyKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZ3IocltuXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWZyKHJbbl0sZSl9fTtmdW5jdGlvbiBkcih0LGUscil7dmFyIG4saT0tMSxhPXQubGVuZ3RoLXI7Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KW49dFtpXSxlLnBvaW50KG5bMF0sblsxXSxuWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBncih0LGUpe3ZhciByPS0xLG49dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytyPG47KWRyKHRbcl0sZSwxKTtlLnBvbHlnb25FbmQoKX10Lmdlby5hcmVhPWZ1bmN0aW9uKGUpe3JldHVybiB2cj0wLHQuZ2VvLnN0cmVhbShlLENyKSx2cn07dmFyIHZyLG1yLHlyLHhyLGJyLF9yLHdyLGtyLFRyLEFyLE1yLFNyLEVyPW5ldyBscixDcj17c3BoZXJlOmZ1bmN0aW9uKCl7dnIrPTQqQXR9LHBvaW50OlAsbGluZVN0YXJ0OlAsbGluZUVuZDpQLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0VyLnJlc2V0KCksQ3IubGluZVN0YXJ0PUxyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9MipFcjt2cis9dDwwPzQqQXQrdDp0LENyLmxpbmVTdGFydD1Dci5saW5lRW5kPUNyLnBvaW50PVB9fTtmdW5jdGlvbiBMcigpe3ZhciB0LGUscixuLGk7ZnVuY3Rpb24gYSh0LGUpe2U9ZSpDdC8yK0F0LzQ7dmFyIGE9KHQqPUN0KS1yLG89YT49MD8xOi0xLHM9byphLGw9TWF0aC5jb3MoZSksYz1NYXRoLnNpbihlKSx1PWkqYyxmPW4qbCt1Kk1hdGguY29zKHMpLGg9dSpvKk1hdGguc2luKHMpO0VyLmFkZChNYXRoLmF0YW4yKGgsZikpLHI9dCxuPWwsaT1jfUNyLnBvaW50PWZ1bmN0aW9uKG8scyl7Q3IucG9pbnQ9YSxyPSh0PW8pKkN0LG49TWF0aC5jb3Mocz0oZT1zKSpDdC8yK0F0LzQpLGk9TWF0aC5zaW4ocyl9LENyLmxpbmVFbmQ9ZnVuY3Rpb24oKXthKHQsZSl9fWZ1bmN0aW9uIHpyKHQpe3ZhciBlPXRbMF0scj10WzFdLG49TWF0aC5jb3Mocik7cmV0dXJuW24qTWF0aC5jb3MoZSksbipNYXRoLnNpbihlKSxNYXRoLnNpbihyKV19ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gSXIodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIERyKHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gUHIodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIFJyKHQpe3ZhciBlPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89ZSx0WzFdLz1lLHRbMl0vPWV9ZnVuY3Rpb24gRnIodCl7cmV0dXJuW01hdGguYXRhbjIodFsxXSx0WzBdKSxEdCh0WzJdKV19ZnVuY3Rpb24gQnIodCxlKXtyZXR1cm4geSh0WzBdLWVbMF0pPGt0JiZ5KHRbMV0tZVsxXSk8a3R9dC5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsZixoPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoLnBvaW50PW0saC5saW5lU3RhcnQ9eCxoLmxpbmVFbmQ9YixjPTAsQ3IucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtDci5wb2x5Z29uRW5kKCksaC5wb2ludD1wLGgubGluZVN0YXJ0PWcsaC5saW5lRW5kPXYsRXI8MD8oZT0tKG49MTgwKSxyPS0oaT05MCkpOmM+a3Q/aT05MDpjPC1rdCYmKHI9LTkwKSxmWzBdPWUsZlsxXT1ufX07ZnVuY3Rpb24gcCh0LGEpe3UucHVzaChmPVtlPXQsbj10XSksYTxyJiYocj1hKSxhPmkmJihpPWEpfWZ1bmN0aW9uIGQodCxvKXt2YXIgcz16cihbdCpDdCxvKkN0XSk7aWYobCl7dmFyIGM9SXIobCxzKSx1PUlyKFtjWzFdLC1jWzBdLDBdLGMpO1JyKHUpLHU9RnIodSk7dmFyIGY9dC1hLGg9Zj4wPzE6LTEsZD11WzBdKkx0KmgsZz15KGYpPjE4MDtpZihnXihoKmE8ZCYmZDxoKnQpKSh2PXVbMV0qTHQpPmkmJihpPXYpO2Vsc2UgaWYoZ14oaCphPChkPShkKzM2MCklMzYwLTE4MCkmJmQ8aCp0KSl7dmFyIHY7KHY9LXVbMV0qTHQpPHImJihyPXYpfWVsc2UgbzxyJiYocj1vKSxvPmkmJihpPW8pO2c/dDxhP18oZSx0KT5fKGUsbikmJihuPXQpOl8odCxuKT5fKGUsbikmJihlPXQpOm4+PWU/KHQ8ZSYmKGU9dCksdD5uJiYobj10KSk6dD5hP18oZSx0KT5fKGUsbikmJihuPXQpOl8odCxuKT5fKGUsbikmJihlPXQpfWVsc2UgcCh0LG8pO2w9cyxhPXR9ZnVuY3Rpb24gZygpe2gucG9pbnQ9ZH1mdW5jdGlvbiB2KCl7ZlswXT1lLGZbMV09bixoLnBvaW50PXAsbD1udWxsfWZ1bmN0aW9uIG0odCxlKXtpZihsKXt2YXIgcj10LWE7Yys9eShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyfWVsc2Ugbz10LHM9ZTtDci5wb2ludCh0LGUpLGQodCxlKX1mdW5jdGlvbiB4KCl7Q3IubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYigpe20obyxzKSxDci5saW5lRW5kKCkseShjKT5rdCYmKGU9LShuPTE4MCkpLGZbMF09ZSxmWzFdPW4sbD1udWxsfWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4gZVswXTw9ZVsxXT9lWzBdPD10JiZ0PD1lWzFdOnQ8ZVswXXx8ZVsxXTx0fXJldHVybiBmdW5jdGlvbihhKXtpZihpPW49LShlPXI9MS8wKSx1PVtdLHQuZ2VvLnN0cmVhbShhLGgpLGM9dS5sZW5ndGgpe3Uuc29ydCh3KTtmb3IodmFyIG89MSxzPVtnPXVbMF1dO288YzsrK28paygocD11W29dKVswXSxnKXx8ayhwWzFdLGcpPyhfKGdbMF0scFsxXSk+XyhnWzBdLGdbMV0pJiYoZ1sxXT1wWzFdKSxfKHBbMF0sZ1sxXSk+XyhnWzBdLGdbMV0pJiYoZ1swXT1wWzBdKSk6cy5wdXNoKGc9cCk7Zm9yKHZhciBsLGMscCxkPS0xLzAsZz0obz0wLHNbYz1zLmxlbmd0aC0xXSk7bzw9YztnPXAsKytvKXA9c1tvXSwobD1fKGdbMV0scFswXSkpPmQmJihkPWwsZT1wWzBdLG49Z1sxXSl9cmV0dXJuIHU9Zj1udWxsLGU9PT0xLzB8fHI9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZSxyXSxbbixpXV19fSgpLHQuZ2VvLmNlbnRyb2lkPWZ1bmN0aW9uKGUpe21yPXlyPXhyPWJyPV9yPXdyPWtyPVRyPUFyPU1yPVNyPTAsdC5nZW8uc3RyZWFtKGUsTnIpO3ZhciByPUFyLG49TXIsaT1TcixhPXIqcituKm4raSppO3JldHVybiBhPFR0JiYocj13cixuPWtyLGk9VHIseXI8a3QmJihyPXhyLG49YnIsaT1fciksKGE9cipyK24qbitpKmkpPFR0KT9bTmFOLE5hTl06W01hdGguYXRhbjIobixyKSpMdCxEdChpL01hdGguc3FydChhKSkqTHRdfTt2YXIgTnI9e3NwaGVyZTpQLHBvaW50OmpyLGxpbmVTdGFydDpVcixsaW5lRW5kOnFyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe05yLmxpbmVTdGFydD1Icn0scG9seWdvbkVuZDpmdW5jdGlvbigpe05yLmxpbmVTdGFydD1Vcn19O2Z1bmN0aW9uIGpyKHQsZSl7dCo9Q3Q7dmFyIHI9TWF0aC5jb3MoZSo9Q3QpO1ZyKHIqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKSl9ZnVuY3Rpb24gVnIodCxlLHIpe3hyKz0odC14cikvKyttcixicis9KGUtYnIpL21yLF9yKz0oci1fcikvbXJ9ZnVuY3Rpb24gVXIoKXt2YXIgdCxlLHI7ZnVuY3Rpb24gbihuLGkpe24qPUN0O3ZhciBhPU1hdGguY29zKGkqPUN0KSxvPWEqTWF0aC5jb3Mobikscz1hKk1hdGguc2luKG4pLGw9TWF0aC5zaW4oaSksYz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYz1lKmwtcipzKSpjKyhjPXIqby10KmwpKmMrKGM9dCpzLWUqbykqYyksdCpvK2UqcytyKmwpO3lyKz1jLHdyKz1jKih0Kyh0PW8pKSxrcis9YyooZSsoZT1zKSksVHIrPWMqKHIrKHI9bCkpLFZyKHQsZSxyKX1Oci5wb2ludD1mdW5jdGlvbihpLGEpe2kqPUN0O3ZhciBvPU1hdGguY29zKGEqPUN0KTt0PW8qTWF0aC5jb3MoaSksZT1vKk1hdGguc2luKGkpLHI9TWF0aC5zaW4oYSksTnIucG9pbnQ9bixWcih0LGUscil9fWZ1bmN0aW9uIHFyKCl7TnIucG9pbnQ9anJ9ZnVuY3Rpb24gSHIoKXt2YXIgdCxlLHIsbixpO2Z1bmN0aW9uIGEodCxlKXt0Kj1DdDt2YXIgYT1NYXRoLmNvcyhlKj1DdCksbz1hKk1hdGguY29zKHQpLHM9YSpNYXRoLnNpbih0KSxsPU1hdGguc2luKGUpLGM9bipsLWkqcyx1PWkqby1yKmwsZj1yKnMtbipvLGg9TWF0aC5zcXJ0KGMqYyt1KnUrZipmKSxwPXIqbytuKnMraSpsLGQ9aCYmLUl0KHApL2gsZz1NYXRoLmF0YW4yKGgscCk7QXIrPWQqYyxNcis9ZCp1LFNyKz1kKmYseXIrPWcsd3IrPWcqKHIrKHI9bykpLGtyKz1nKihuKyhuPXMpKSxUcis9ZyooaSsoaT1sKSksVnIocixuLGkpfU5yLnBvaW50PWZ1bmN0aW9uKG8scyl7dD1vLGU9cyxOci5wb2ludD1hLG8qPUN0O3ZhciBsPU1hdGguY29zKHMqPUN0KTtyPWwqTWF0aC5jb3Mobyksbj1sKk1hdGguc2luKG8pLGk9TWF0aC5zaW4ocyksVnIocixuLGkpfSxOci5saW5lRW5kPWZ1bmN0aW9uKCl7YSh0LGUpLE5yLmxpbmVFbmQ9cXIsTnIucG9pbnQ9anJ9fWZ1bmN0aW9uIEdyKHQsZSl7ZnVuY3Rpb24gcihyLG4pe3JldHVybiByPXQocixuKSxlKHJbMF0sclsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7cmV0dXJuKHI9ZS5pbnZlcnQocixuKSkmJnQuaW52ZXJ0KHJbMF0sclsxXSl9KSxyfWZ1bmN0aW9uIFlyKCl7cmV0dXJuITB9ZnVuY3Rpb24gV3IodCxlLHIsbixpKXt2YXIgYT1bXSxvPVtdO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUscj10WzBdLG49dFtlXTtpZihCcihyLG4pKXtpLmxpbmVTdGFydCgpO2Zvcih2YXIgcz0wO3M8ZTsrK3MpaS5wb2ludCgocj10W3NdKVswXSxyWzFdKTtpLmxpbmVFbmQoKX1lbHNle3ZhciBsPW5ldyBacihyLHQsbnVsbCwhMCksYz1uZXcgWnIocixudWxsLGwsITEpO2wubz1jLGEucHVzaChsKSxvLnB1c2goYyksbD1uZXcgWnIobix0LG51bGwsITEpLGM9bmV3IFpyKG4sbnVsbCxsLCEwKSxsLm89YyxhLnB1c2gobCksby5wdXNoKGMpfX19KSxvLnNvcnQoZSksWHIoYSksWHIobyksYS5sZW5ndGgpe2Zvcih2YXIgcz0wLGw9cixjPW8ubGVuZ3RoO3M8YzsrK3Mpb1tzXS5lPWw9IWw7Zm9yKHZhciB1LGYsaD1hWzBdOzspe2Zvcih2YXIgcD1oLGQ9ITA7cC52OylpZigocD1wLm4pPT09aClyZXR1cm47dT1wLnosaS5saW5lU3RhcnQoKTtkb3tpZihwLnY9cC5vLnY9ITAscC5lKXtpZihkKWZvcihzPTAsYz11Lmxlbmd0aDtzPGM7KytzKWkucG9pbnQoKGY9dVtzXSlbMF0sZlsxXSk7ZWxzZSBuKHAueCxwLm4ueCwxLGkpO3A9cC5ufWVsc2V7aWYoZClmb3Iocz0odT1wLnAueikubGVuZ3RoLTE7cz49MDstLXMpaS5wb2ludCgoZj11W3NdKVswXSxmWzFdKTtlbHNlIG4ocC54LHAucC54LC0xLGkpO3A9cC5wfXU9KHA9cC5vKS56LGQ9IWR9d2hpbGUoIXAudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBYcih0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUscixuPTAsaT10WzBdOysrbjxlOylpLm49cj10W25dLHIucD1pLGk9cjtpLm49cj10WzBdLHIucD1pfX1mdW5jdGlvbiBacih0LGUscixuKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89cix0aGlzLmU9bix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uICRyKGUscixuLGkpe3JldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzLGw9cihvKSxjPWEuaW52ZXJ0KGlbMF0saVsxXSksdT17cG9pbnQ6ZixsaW5lU3RhcnQ6cCxsaW5lRW5kOmQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dS5wb2ludD1iLHUubGluZVN0YXJ0PV8sdS5saW5lRW5kPXcscz1bXSxnPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dS5wb2ludD1mLHUubGluZVN0YXJ0PXAsdS5saW5lRW5kPWQscz10Lm1lcmdlKHMpO3ZhciBlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT1bTWF0aC5zaW4ociksLU1hdGguY29zKHIpLDBdLGE9MCxvPTA7RXIucmVzZXQoKTtmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDsrK3Mpe3ZhciBjPWVbc10sdT1jLmxlbmd0aDtpZih1KWZvcih2YXIgZj1jWzBdLGg9ZlswXSxwPWZbMV0vMitBdC80LGQ9TWF0aC5zaW4ocCksZz1NYXRoLmNvcyhwKSx2PTE7Oyl7dj09PXUmJih2PTApO3ZhciBtPSh0PWNbdl0pWzBdLHk9dFsxXS8yK0F0LzQseD1NYXRoLnNpbih5KSxiPU1hdGguY29zKHkpLF89bS1oLHc9Xz49MD8xOi0xLGs9dypfLFQ9az5BdCxBPWQqeDtpZihFci5hZGQoTWF0aC5hdGFuMihBKncqTWF0aC5zaW4oayksZypiK0EqTWF0aC5jb3MoaykpKSxhKz1UP18rdypNdDpfLFReaD49cl5tPj1yKXt2YXIgTT1Jcih6cihmKSx6cih0KSk7UnIoTSk7dmFyIFM9SXIoaSxNKTtScihTKTt2YXIgRT0oVF5fPj0wPy0xOjEpKkR0KFNbMl0pOyhuPkV8fG49PT1FJiYoTVswXXx8TVsxXSkpJiYobys9VF5fPj0wPzE6LTEpfWlmKCF2KyspYnJlYWs7aD1tLGQ9eCxnPWIsZj10fX1yZXR1cm4oYTwta3R8fGE8a3QmJkVyPC1rdCleMSZvfShjLGcpO3MubGVuZ3RoPyh4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxXcihzLFFyLGUsbixvKSk6ZSYmKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSkseCYmKG8ucG9seWdvbkVuZCgpLHg9ITEpLHM9Zz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtvLnBvbHlnb25TdGFydCgpLG8ubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSxvLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIGYodCxyKXt2YXIgbj1hKHQscik7ZSh0PW5bMF0scj1uWzFdKSYmby5wb2ludCh0LHIpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1hKHQsZSk7bC5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIHAoKXt1LnBvaW50PWgsbC5saW5lU3RhcnQoKX1mdW5jdGlvbiBkKCl7dS5wb2ludD1mLGwubGluZUVuZCgpfXZhciBnLHYsbT1LcigpLHk9cihtKSx4PSExO2Z1bmN0aW9uIGIodCxlKXt2LnB1c2goW3QsZV0pO3ZhciByPWEodCxlKTt5LnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gXygpe3kubGluZVN0YXJ0KCksdj1bXX1mdW5jdGlvbiB3KCl7Yih2WzBdWzBdLHZbMF1bMV0pLHkubGluZUVuZCgpO3ZhciB0LGU9eS5jbGVhbigpLHI9bS5idWZmZXIoKSxuPXIubGVuZ3RoO2lmKHYucG9wKCksZy5wdXNoKHYpLHY9bnVsbCxuKWlmKDEmZSl7dmFyIGksYT0tMTtpZigobj0odD1yWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCk7KythPG47KW8ucG9pbnQoKGk9dFthXSlbMF0saVsxXSk7by5saW5lRW5kKCl9fWVsc2Ugbj4xJiYyJmUmJnIucHVzaChyLnBvcCgpLmNvbmNhdChyLnNoaWZ0KCkpKSxzLnB1c2goci5maWx0ZXIoSnIpKX1yZXR1cm4gdX19ZnVuY3Rpb24gSnIodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gS3IoKXt2YXIgdCxlPVtdO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LHBvaW50OmZ1bmN0aW9uKGUscil7dC5wdXNoKFtlLHJdKX0sbGluZUVuZDpQLGJ1ZmZlcjpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9LHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX19fWZ1bmN0aW9uIFFyKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLUV0LWt0OkV0LXRbMV0pLSgoZT1lLngpWzBdPDA/ZVsxXS1FdC1rdDpFdC1lWzFdKX12YXIgdG49JHIoWXIsZnVuY3Rpb24odCl7dmFyIGUscj1OYU4sbj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihhLG8pe3ZhciBzPWE+MD9BdDotQXQsbD15KGEtcik7eShsLUF0KTxrdD8odC5wb2ludChyLG49KG4rbykvMj4wP0V0Oi1FdCksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLG4pLHQucG9pbnQoYSxuKSxlPTApOmkhPT1zJiZsPj1BdCYmKHkoci1pKTxrdCYmKHItPWkqa3QpLHkoYS1zKTxrdCYmKGEtPXMqa3QpLG49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPU1hdGguc2luKHQtcik7cmV0dXJuIHkobyk+a3Q/TWF0aC5hdGFuKChNYXRoLnNpbihlKSooYT1NYXRoLmNvcyhuKSkqTWF0aC5zaW4ociktTWF0aC5zaW4obikqKGk9TWF0aC5jb3MoZSkpKk1hdGguc2luKHQpKS8oaSphKm8pKTooZStuKS8yfShyLG4sYSxvKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksZT0wKSx0LnBvaW50KHI9YSxuPW8pLGk9c30sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLHI9bj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSxmdW5jdGlvbih0LGUscixuKXt2YXIgaTtpZihudWxsPT10KWk9cipFdCxuLnBvaW50KC1BdCxpKSxuLnBvaW50KDAsaSksbi5wb2ludChBdCxpKSxuLnBvaW50KEF0LDApLG4ucG9pbnQoQXQsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQXQsLWkpLG4ucG9pbnQoLUF0LDApLG4ucG9pbnQoLUF0LGkpO2Vsc2UgaWYoeSh0WzBdLWVbMF0pPmt0KXt2YXIgYT10WzBdPGVbMF0/QXQ6LUF0O2k9ciphLzIsbi5wb2ludCgtYSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChhLGkpfWVsc2Ugbi5wb2ludChlWzBdLGVbMV0pfSxbLUF0LC1BdC8yXSk7ZnVuY3Rpb24gZW4odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBhLG89aS5hLHM9aS5iLGw9by54LGM9by55LHU9MCxmPTEsaD1zLngtbCxwPXMueS1jO2lmKGE9dC1sLGh8fCEoYT4wKSl7aWYoYS89aCxoPDApe2lmKGE8dSlyZXR1cm47YTxmJiYoZj1hKX1lbHNlIGlmKGg+MCl7aWYoYT5mKXJldHVybjthPnUmJih1PWEpfWlmKGE9ci1sLGh8fCEoYTwwKSl7aWYoYS89aCxoPDApe2lmKGE+ZilyZXR1cm47YT51JiYodT1hKX1lbHNlIGlmKGg+MCl7aWYoYTx1KXJldHVybjthPGYmJihmPWEpfWlmKGE9ZS1jLHB8fCEoYT4wKSl7aWYoYS89cCxwPDApe2lmKGE8dSlyZXR1cm47YTxmJiYoZj1hKX1lbHNlIGlmKHA+MCl7aWYoYT5mKXJldHVybjthPnUmJih1PWEpfWlmKGE9bi1jLHB8fCEoYTwwKSl7aWYoYS89cCxwPDApe2lmKGE+ZilyZXR1cm47YT51JiYodT1hKX1lbHNlIGlmKHA+MCl7aWYoYTx1KXJldHVybjthPGYmJihmPWEpfXJldHVybiB1PjAmJihpLmE9e3g6bCt1KmgseTpjK3UqcH0pLGY8MSYmKGkuYj17eDpsK2YqaCx5OmMrZipwfSksaX19fX19fXZhciBybj0xZTk7ZnVuY3Rpb24gbm4oZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjLHUsZixoLHAsZCxnLHYsbSx5LHgsYj1sLF89S3IoKSx3PWVuKGUscixuLGkpLGs9e3BvaW50Ok0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ay5wb2ludD1TLHUmJnUucHVzaChmPVtdKTt5PSEwLG09ITEsZz12PU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2MmJihTKGgscCksZCYmbSYmXy5yZWpvaW4oKSxjLnB1c2goXy5idWZmZXIoKSkpO2sucG9pbnQ9TSxtJiZsLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bD1fLGM9W10sdT1bXSx4PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bD1iLGM9dC5tZXJnZShjKTt2YXIgcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXUubGVuZ3RoLG49dFsxXSxpPTA7aTxyOysraSlmb3IodmFyIGEsbz0xLHM9dVtpXSxsPXMubGVuZ3RoLGM9c1swXTtvPGw7KytvKWE9c1tvXSxjWzFdPD1uP2FbMV0+biYmT3QoYyxhLHQpPjAmJisrZTphWzFdPD1uJiZPdChjLGEsdCk8MCYmLS1lLGM9YTtyZXR1cm4gMCE9PWV9KFtlLGldKSxuPXgmJnIsYT1jLmxlbmd0aDsobnx8YSkmJihsLnBvbHlnb25TdGFydCgpLG4mJihsLmxpbmVTdGFydCgpLFQobnVsbCxudWxsLDEsbCksbC5saW5lRW5kKCkpLGEmJldyKGMsbyxyLFQsbCksbC5wb2x5Z29uRW5kKCkpLGM9dT1mPW51bGx9fTtmdW5jdGlvbiBUKHQsbyxsLGMpe3ZhciB1PTAsZj0wO2lmKG51bGw9PXR8fCh1PWEodCxsKSkhPT0oZj1hKG8sbCkpfHxzKHQsbyk8MF5sPjApZG97Yy5wb2ludCgwPT09dXx8Mz09PXU/ZTpuLHU+MT9pOnIpfXdoaWxlKCh1PSh1K2wrNCklNCkhPT1mKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBBKHQsYSl7cmV0dXJuIGU8PXQmJnQ8PW4mJnI8PWEmJmE8PWl9ZnVuY3Rpb24gTSh0LGUpe0EodCxlKSYmbC5wb2ludCh0LGUpfWZ1bmN0aW9uIFModCxlKXt2YXIgcj1BKHQ9TWF0aC5tYXgoLXJuLE1hdGgubWluKHJuLHQpKSxlPU1hdGgubWF4KC1ybixNYXRoLm1pbihybixlKSkpO2lmKHUmJmYucHVzaChbdCxlXSkseSloPXQscD1lLGQ9cix5PSExLHImJihsLmxpbmVTdGFydCgpLGwucG9pbnQodCxlKSk7ZWxzZSBpZihyJiZtKWwucG9pbnQodCxlKTtlbHNle3ZhciBuPXthOnt4OmcseTp2fSxiOnt4OnQseTplfX07dyhuKT8obXx8KGwubGluZVN0YXJ0KCksbC5wb2ludChuLmEueCxuLmEueSkpLGwucG9pbnQobi5iLngsbi5iLnkpLHJ8fGwubGluZUVuZCgpLHg9ITEpOnImJihsLmxpbmVTdGFydCgpLGwucG9pbnQodCxlKSx4PSExKX1nPXQsdj1lLG09cn1yZXR1cm4ga307ZnVuY3Rpb24gYSh0LGkpe3JldHVybiB5KHRbMF0tZSk8a3Q/aT4wPzA6Mzp5KHRbMF0tbik8a3Q/aT4wPzI6MTp5KHRbMV0tcik8a3Q/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gcyh0LngsZS54KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9YSh0LDEpLG49YShlLDEpO3JldHVybiByIT09bj9yLW46MD09PXI/ZVsxXS10WzFdOjE9PT1yP3RbMF0tZVswXToyPT09cj90WzFdLWVbMV06ZVswXS10WzBdfX1mdW5jdGlvbiBhbih0KXt2YXIgZT0wLHI9QXQvMyxuPUNuKHQpLGk9bihlLHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGU9dFswXSpBdC8xODAscj10WzFdKkF0LzE4MCk6W2UvQXQqMTgwLHIvQXQqMTgwXX0saX1mdW5jdGlvbiBvbih0LGUpe3ZhciByPU1hdGguc2luKHQpLG49KHIrTWF0aC5zaW4oZSkpLzIsaT0xK3IqKDIqbi1yKSxhPU1hdGguc3FydChpKS9uO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1NYXRoLnNxcnQoaS0yKm4qTWF0aC5zaW4oZSkpL247cmV0dXJuW3IqTWF0aC5zaW4odCo9biksYS1yKk1hdGguY29zKHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1hLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9uLER0KChpLSh0KnQrcipyKSpuKm4pLygyKm4pKV19LG99dC5nZW8uY2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksYSxvPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJihpLnZhbGlkPSExKSwoaT1hKHQpKS52YWxpZD0hMCxpfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bm4odD0rc1swXVswXSxlPStzWzBdWzFdLHI9K3NbMV1bMF0sbj0rc1sxXVsxXSksaSYmKGkudmFsaWQ9ITEsaT1udWxsKSxvKTpbW3QsZV0sW3Isbl1dfX07cmV0dXJuIG8uZXh0ZW50KFtbMCwwXSxbOTYwLDUwMF1dKX0sKHQuZ2VvLmNvbmljRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGFuKG9uKX0pLnJhdz1vbix0Lmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKX0sdC5nZW8uYWxiZXJzVXNhPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYT10Lmdlby5hbGJlcnMoKSxvPXQuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxzPXQuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGw9e3BvaW50OmZ1bmN0aW9uKHQscil7ZT1bdCxyXX19O2Z1bmN0aW9uIGModCl7dmFyIGE9dFswXSxvPXRbMV07cmV0dXJuIGU9bnVsbCxyKGEsbyksZXx8KG4oYSxvKSxlKXx8aShhLG8pLGV9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPWEuc2NhbGUoKSxyPWEudHJhbnNsYXRlKCksbj0odFswXS1yWzBdKS9lLGk9KHRbMV0tclsxXSkvZTtyZXR1cm4oaT49LjEyJiZpPC4yMzQmJm4+PS0uNDI1JiZuPC0uMjE0P286aT49LjE2NiYmaTwuMjM0JiZuPj0tLjIxNCYmbjwtLjExNT9zOmEpLmludmVydCh0KX0sYy5zdHJlYW09ZnVuY3Rpb24odCl7dmFyIGU9YS5zdHJlYW0odCkscj1vLnN0cmVhbSh0KSxuPXMuc3RyZWFtKHQpO3JldHVybntwb2ludDpmdW5jdGlvbih0LGkpe2UucG9pbnQodCxpKSxyLnBvaW50KHQsaSksbi5wb2ludCh0LGkpfSxzcGhlcmU6ZnVuY3Rpb24oKXtlLnNwaGVyZSgpLHIuc3BoZXJlKCksbi5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxyLmxpbmVTdGFydCgpLG4ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSxyLmxpbmVFbmQoKSxuLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSxyLnBvbHlnb25TdGFydCgpLG4ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSxyLnBvbHlnb25FbmQoKSxuLnBvbHlnb25FbmQoKX19fSxjLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5wcmVjaXNpb24odCksby5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksYyk6YS5wcmVjaXNpb24oKX0sYy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5zY2FsZSh0KSxvLnNjYWxlKC4zNSp0KSxzLnNjYWxlKHQpLGMudHJhbnNsYXRlKGEudHJhbnNsYXRlKCkpKTphLnNjYWxlKCl9LGMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhLnRyYW5zbGF0ZSgpO3ZhciBlPWEuc2NhbGUoKSx1PSt0WzBdLGY9K3RbMV07cmV0dXJuIHI9YS50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW3UtLjQ1NSplLGYtLjIzOCplXSxbdSsuNDU1KmUsZisuMjM4KmVdXSkuc3RyZWFtKGwpLnBvaW50LG49by50cmFuc2xhdGUoW3UtLjMwNyplLGYrLjIwMSplXSkuY2xpcEV4dGVudChbW3UtLjQyNSplK2t0LGYrLjEyKmUra3RdLFt1LS4yMTQqZS1rdCxmKy4yMzQqZS1rdF1dKS5zdHJlYW0obCkucG9pbnQsaT1zLnRyYW5zbGF0ZShbdS0uMjA1KmUsZisuMjEyKmVdKS5jbGlwRXh0ZW50KFtbdS0uMjE0KmUra3QsZisuMTY2KmUra3RdLFt1LS4xMTUqZS1rdCxmKy4yMzQqZS1rdF1dKS5zdHJlYW0obCkucG9pbnQsY30sYy5zY2FsZSgxMDcwKX07dmFyIHNuLGxuLGNuLHVuLGZuLGhuLHBuPXtwb2ludDpQLGxpbmVTdGFydDpQLGxpbmVFbmQ6UCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtsbj0wLHBuLmxpbmVTdGFydD1kbn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3BuLmxpbmVTdGFydD1wbi5saW5lRW5kPXBuLnBvaW50PVAsc24rPXkobG4vMil9fTtmdW5jdGlvbiBkbigpe3ZhciB0LGUscixuO2Z1bmN0aW9uIGkodCxlKXtsbis9bip0LXIqZSxyPXQsbj1lfXBuLnBvaW50PWZ1bmN0aW9uKGEsbyl7cG4ucG9pbnQ9aSx0PXI9YSxlPW49b30scG4ubGluZUVuZD1mdW5jdGlvbigpe2kodCxlKX19dmFyIGduPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8Y24mJihjbj10KTt0PmZuJiYoZm49dCk7ZTx1biYmKHVuPWUpO2U+aG4mJihobj1lKX0sbGluZVN0YXJ0OlAsbGluZUVuZDpQLHBvbHlnb25TdGFydDpQLHBvbHlnb25FbmQ6UH07ZnVuY3Rpb24gdm4oKXt2YXIgdD1tbig0LjUpLGU9W10scj17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtyLnBvaW50PWl9LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9c30scG9seWdvbkVuZDpmdW5jdGlvbigpe3IubGluZUVuZD1vLHIucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHQ9bW4oZSkscn0scmVzdWx0OmZ1bmN0aW9uKCl7aWYoZS5sZW5ndGgpe3ZhciB0PWUuam9pbigiIik7cmV0dXJuIGU9W10sdH19fTtmdW5jdGlvbiBuKHIsbil7ZS5wdXNoKCJNIixyLCIsIixuLHQpfWZ1bmN0aW9uIGkodCxuKXtlLnB1c2goIk0iLHQsIiwiLG4pLHIucG9pbnQ9YX1mdW5jdGlvbiBhKHQscil7ZS5wdXNoKCJMIix0LCIsIixyKX1mdW5jdGlvbiBvKCl7ci5wb2ludD1ufWZ1bmN0aW9uIHMoKXtlLnB1c2goIloiKX1yZXR1cm4gcn1mdW5jdGlvbiBtbih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In12YXIgeW4seG49e3BvaW50OmJuLGxpbmVTdGFydDpfbixsaW5lRW5kOnduLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3huLmxpbmVTdGFydD1rbn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3huLnBvaW50PWJuLHhuLmxpbmVTdGFydD1fbix4bi5saW5lRW5kPXdufX07ZnVuY3Rpb24gYm4odCxlKXt4cis9dCxicis9ZSwrK19yfWZ1bmN0aW9uIF9uKCl7dmFyIHQsZTtmdW5jdGlvbiByKHIsbil7dmFyIGk9ci10LGE9bi1lLG89TWF0aC5zcXJ0KGkqaSthKmEpO3dyKz1vKih0K3IpLzIsa3IrPW8qKGUrbikvMixUcis9byxibih0PXIsZT1uKX14bi5wb2ludD1mdW5jdGlvbihuLGkpe3huLnBvaW50PXIsYm4odD1uLGU9aSl9fWZ1bmN0aW9uIHduKCl7eG4ucG9pbnQ9Ym59ZnVuY3Rpb24ga24oKXt2YXIgdCxlLHIsbjtmdW5jdGlvbiBpKHQsZSl7dmFyIGk9dC1yLGE9ZS1uLG89TWF0aC5zcXJ0KGkqaSthKmEpO3dyKz1vKihyK3QpLzIsa3IrPW8qKG4rZSkvMixUcis9byxBcis9KG89bip0LXIqZSkqKHIrdCksTXIrPW8qKG4rZSksU3IrPTMqbyxibihyPXQsbj1lKX14bi5wb2ludD1mdW5jdGlvbihhLG8pe3huLnBvaW50PWksYm4odD1yPWEsZT1uPW8pfSx4bi5saW5lRW5kPWZ1bmN0aW9uKCl7aSh0LGUpfX1mdW5jdGlvbiBUbih0KXt2YXIgZT00LjUscj17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtyLnBvaW50PWl9LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9c30scG9seWdvbkVuZDpmdW5jdGlvbigpe3IubGluZUVuZD1vLHIucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxyfSxyZXN1bHQ6UH07ZnVuY3Rpb24gbihyLG4pe3QubW92ZVRvKHIrZSxuKSx0LmFyYyhyLG4sZSwwLE10KX1mdW5jdGlvbiBpKGUsbil7dC5tb3ZlVG8oZSxuKSxyLnBvaW50PWF9ZnVuY3Rpb24gYShlLHIpe3QubGluZVRvKGUscil9ZnVuY3Rpb24gbygpe3IucG9pbnQ9bn1mdW5jdGlvbiBzKCl7dC5jbG9zZVBhdGgoKX1yZXR1cm4gcn1mdW5jdGlvbiBBbih0KXt2YXIgZT0uNSxyPU1hdGguY29zKDMwKkN0KSxuPTE2O2Z1bmN0aW9uIGkoZSl7cmV0dXJuKG4/ZnVuY3Rpb24oZSl7dmFyIHIsaSxvLHMsbCxjLHUsZixoLHAsZCxnLHY9e3BvaW50Om0sbGluZVN0YXJ0OnksbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksdi5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHYubGluZVN0YXJ0PXl9fTtmdW5jdGlvbiBtKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIHkoKXtmPU5hTix2LnBvaW50PXgsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB4KHIsaSl7dmFyIG89enIoW3IsaV0pLHM9dChyLGkpO2EoZixoLHUscCxkLGcsZj1zWzBdLGg9c1sxXSx1PXIscD1vWzBdLGQ9b1sxXSxnPW9bMl0sbixlKSxlLnBvaW50KGYsaCl9ZnVuY3Rpb24gYigpe3YucG9pbnQ9bSxlLmxpbmVFbmQoKX1mdW5jdGlvbiBfKCl7eSgpLHYucG9pbnQ9dyx2LmxpbmVFbmQ9a31mdW5jdGlvbiB3KHQsZSl7eChyPXQsZSksaT1mLG89aCxzPXAsbD1kLGM9Zyx2LnBvaW50PXh9ZnVuY3Rpb24gaygpe2EoZixoLHUscCxkLGcsaSxvLHIscyxsLGMsbixlKSx2LmxpbmVFbmQ9YixiKCl9cmV0dXJuIHZ9OmZ1bmN0aW9uKGUpe3JldHVybiBTbihlLGZ1bmN0aW9uKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfSl9KShlKX1mdW5jdGlvbiBhKG4saSxvLHMsbCxjLHUsZixoLHAsZCxnLHYsbSl7dmFyIHg9dS1uLGI9Zi1pLF89eCp4K2IqYjtpZihfPjQqZSYmdi0tKXt2YXIgdz1zK3Asaz1sK2QsVD1jK2csQT1NYXRoLnNxcnQodyp3K2sqaytUKlQpLE09TWF0aC5hc2luKFQvPUEpLFM9eSh5KFQpLTEpPGt0fHx5KG8taCk8a3Q/KG8raCkvMjpNYXRoLmF0YW4yKGssdyksRT10KFMsTSksQz1FWzBdLEw9RVsxXSx6PUMtbixPPUwtaSxJPWIqei14Kk87KEkqSS9fPmV8fHkoKHgqeitiKk8pL18tLjUpPi4zfHxzKnArbCpkK2MqZzxyKSYmKGEobixpLG8scyxsLGMsQyxMLFMsdy89QSxrLz1BLFQsdixtKSxtLnBvaW50KEMsTCksYShDLEwsUyx3LGssVCx1LGYsaCxwLGQsZyx2LG0pKX19cmV0dXJuIGkucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPShlPXQqdCk+MCYmMTYsaSk6TWF0aC5zcXJ0KGUpfSxpfWZ1bmN0aW9uIE1uKHQpe3RoaXMuc3RyZWFtPXR9ZnVuY3Rpb24gU24odCxlKXtyZXR1cm57cG9pbnQ6ZSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIEVuKHQpe3JldHVybiBDbihmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBDbihlKXt2YXIgcixuLGksYSxvLHMsbD1BbihmdW5jdGlvbih0LGUpe3JldHVyblsodD1yKHQsZSkpWzBdKmMrYSxvLXRbMV0qY119KSxjPTE1MCx1PTQ4MCxmPTI1MCxoPTAscD0wLGQ9MCxnPTAsdj0wLG09dG4seD16LGI9bnVsbCxfPW51bGw7ZnVuY3Rpb24gdyh0KXtyZXR1cm5bKHQ9aSh0WzBdKkN0LHRbMV0qQ3QpKVswXSpjK2Esby10WzFdKmNdfWZ1bmN0aW9uIGsodCl7cmV0dXJuKHQ9aS5pbnZlcnQoKHRbMF0tYSkvYywoby10WzFdKS9jKSkmJlt0WzBdKkx0LHRbMV0qTHRdfWZ1bmN0aW9uIFQoKXtpPUdyKG49SW4oZCxnLHYpLHIpO3ZhciB0PXIoaCxwKTtyZXR1cm4gYT11LXRbMF0qYyxvPWYrdFsxXSpjLEEoKX1mdW5jdGlvbiBBKCl7cmV0dXJuIHMmJihzLnZhbGlkPSExLHM9bnVsbCksd31yZXR1cm4gdy5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIHMmJihzLnZhbGlkPSExKSwocz1MbihtKG4sbCh4KHQpKSkpKS52YWxpZD0hMCxzfSx3LmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1udWxsPT10PyhiPXQsdG4pOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguY29zKHQpLHI9ZT4wLG49eShlKT5rdDtyZXR1cm4gJHIoaSxmdW5jdGlvbih0KXt2YXIgZSxzLGwsYyx1O3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtjPWw9ITEsdT0xfSxwb2ludDpmdW5jdGlvbihmLGgpe3ZhciBwLGQ9W2YsaF0sZz1pKGYsaCksdj1yP2c/MDpvKGYsaCk6Zz9vKGYrKGY8MD9BdDotQXQpLGgpOjA7aWYoIWUmJihjPWw9ZykmJnQubGluZVN0YXJ0KCksZyE9PWwmJihwPWEoZSxkKSwoQnIoZSxwKXx8QnIoZCxwKSkmJihkWzBdKz1rdCxkWzFdKz1rdCxnPWkoZFswXSxkWzFdKSkpLGchPT1sKXU9MCxnPyh0LmxpbmVTdGFydCgpLHA9YShkLGUpLHQucG9pbnQocFswXSxwWzFdKSk6KHA9YShlLGQpLHQucG9pbnQocFswXSxwWzFdKSx0LmxpbmVFbmQoKSksZT1wO2Vsc2UgaWYobiYmZSYmcl5nKXt2YXIgbTt2JnN8fCEobT1hKGQsZSwhMCkpfHwodT0wLHI/KHQubGluZVN0YXJ0KCksdC5wb2ludChtWzBdWzBdLG1bMF1bMV0pLHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdKSkpfSFnfHxlJiZCcihlLGQpfHx0LnBvaW50KGRbMF0sZFsxXSksZT1kLGw9ZyxzPXZ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHV8KGMmJmwpPDwxfX19LEZuKHQsNipDdCkscj9bMCwtdF06Wy1BdCx0LUF0XSk7ZnVuY3Rpb24gaSh0LHIpe3JldHVybiBNYXRoLmNvcyh0KSpNYXRoLmNvcyhyKT5lfWZ1bmN0aW9uIGEodCxyLG4pe3ZhciBpPVsxLDAsMF0sYT1Jcih6cih0KSx6cihyKSksbz1PcihhLGEpLHM9YVswXSxsPW8tcypzO2lmKCFsKXJldHVybiFuJiZ0O3ZhciBjPWUqby9sLHU9LWUqcy9sLGY9SXIoaSxhKSxoPVByKGksYyk7RHIoaCxQcihhLHUpKTt2YXIgcD1mLGQ9T3IoaCxwKSxnPU9yKHAscCksdj1kKmQtZyooT3IoaCxoKS0xKTtpZighKHY8MCkpe3ZhciBtPU1hdGguc3FydCh2KSx4PVByKHAsKC1kLW0pL2cpO2lmKERyKHgsaCkseD1Gcih4KSwhbilyZXR1cm4geDt2YXIgYixfPXRbMF0sdz1yWzBdLGs9dFsxXSxUPXJbMV07dzxfJiYoYj1fLF89dyx3PWIpO3ZhciBBPXctXyxNPXkoQS1BdCk8a3Q7aWYoIU0mJlQ8ayYmKGI9ayxrPVQsVD1iKSxNfHxBPGt0P00/aytUPjBeeFsxXTwoeSh4WzBdLV8pPGt0P2s6VCk6azw9eFsxXSYmeFsxXTw9VDpBPkF0XihfPD14WzBdJiZ4WzBdPD13KSl7dmFyIFM9UHIocCwoLWQrbSkvZyk7cmV0dXJuIERyKFMsaCksW3gsRnIoUyldfX19ZnVuY3Rpb24gbyhlLG4pe3ZhciBpPXI/dDpBdC10LGE9MDtyZXR1cm4gZTwtaT9hfD0xOmU+aSYmKGF8PTIpLG48LWk/YXw9NDpuPmkmJihhfD04KSxhfX0oKGI9K3QpKkN0KSxBKCkpOmJ9LHcuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz10LHg9dD9ubih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKTp6LEEoKSk6X30sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxUKCkpOmN9LHcudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0WzBdLGY9K3RbMV0sVCgpKTpbdSxmXX0sdy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9dFswXSUzNjAqQ3QscD10WzFdJTM2MCpDdCxUKCkpOltoKkx0LHAqTHRdfSx3LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10WzBdJTM2MCpDdCxnPXRbMV0lMzYwKkN0LHY9dC5sZW5ndGg+Mj90WzJdJTM2MCpDdDowLFQoKSk6W2QqTHQsZypMdCx2Kkx0XX0sdC5yZWJpbmQodyxsLCJwcmVjaXNpb24iKSxmdW5jdGlvbigpe3JldHVybiByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHcuaW52ZXJ0PXIuaW52ZXJ0JiZrLFQoKX19ZnVuY3Rpb24gTG4odCl7cmV0dXJuIFNuKHQsZnVuY3Rpb24oZSxyKXt0LnBvaW50KGUqQ3QscipDdCl9KX1mdW5jdGlvbiB6bih0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIE9uKHQsZSl7cmV0dXJuW3Q+QXQ/dC1NdDp0PC1BdD90K010OnQsZV19ZnVuY3Rpb24gSW4odCxlLHIpe3JldHVybiB0P2V8fHI/R3IoUG4odCksUm4oZSxyKSk6UG4odCk6ZXx8cj9SbihlLHIpOk9ufWZ1bmN0aW9uIERuKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblsoZSs9dCk+QXQ/ZS1NdDplPC1BdD9lK010OmUscl19fWZ1bmN0aW9uIFBuKHQpe3ZhciBlPURuKHQpO3JldHVybiBlLmludmVydD1EbigtdCksZX1mdW5jdGlvbiBSbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT1NYXRoLmNvcyhlKSxhPU1hdGguc2luKGUpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbz1NYXRoLmNvcyhlKSxzPU1hdGguY29zKHQpKm8sbD1NYXRoLnNpbih0KSpvLGM9TWF0aC5zaW4oZSksdT1jKnIrcypuO3JldHVybltNYXRoLmF0YW4yKGwqaS11KmEscypyLWMqbiksRHQodSppK2wqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqbyxsPU1hdGguc2luKHQpKm8sYz1NYXRoLnNpbihlKSx1PWMqaS1sKmE7cmV0dXJuW01hdGguYXRhbjIobCppK2MqYSxzKnIrdSpuKSxEdCh1KnItcypuKV19LG99ZnVuY3Rpb24gRm4odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD1vKmU7bnVsbCE9aT8oaT1CbihyLGkpLGE9Qm4ocixhKSwobz4wP2k8YTppPmEpJiYoaSs9bypNdCkpOihpPXQrbypNdCxhPXQtLjUqbCk7Zm9yKHZhciBjLHU9aTtvPjA/dT5hOnU8YTt1LT1sKXMucG9pbnQoKGM9RnIoW3IsLW4qTWF0aC5jb3ModSksLW4qTWF0aC5zaW4odSldKSlbMF0sY1sxXSl9fWZ1bmN0aW9uIEJuKHQsZSl7dmFyIHI9enIoZSk7clswXS09dCxScihyKTt2YXIgbj1JdCgtclsxXSk7cmV0dXJuKCgtclsyXTwwPy1uOm4pKzIqTWF0aC5QSS1rdCklKDIqTWF0aC5QSSl9ZnVuY3Rpb24gTm4oZSxyLG4pe3ZhciBpPXQucmFuZ2UoZSxyLWt0LG4pLmNvbmNhdChyKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSl9fWZ1bmN0aW9uIGpuKGUscixuKXt2YXIgaT10LnJhbmdlKGUsci1rdCxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pfX1mdW5jdGlvbiBWbih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gVW4odCl7cmV0dXJuIHQudGFyZ2V0fXQuZ2VvLnBhdGg9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG89NC41O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJigiZnVuY3Rpb24iPT10eXBlb2YgbyYmaS5wb2ludFJhZGl1cygrby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGEmJmEudmFsaWR8fChhPW4oaSkpLHQuZ2VvLnN0cmVhbShlLGEpKSxpLnJlc3VsdCgpfWZ1bmN0aW9uIGwoKXtyZXR1cm4gYT1udWxsLHN9cmV0dXJuIHMuYXJlYT1mdW5jdGlvbihlKXtyZXR1cm4gc249MCx0Lmdlby5zdHJlYW0oZSxuKHBuKSksc259LHMuY2VudHJvaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHhyPWJyPV9yPXdyPWtyPVRyPUFyPU1yPVNyPTAsdC5nZW8uc3RyZWFtKGUsbih4bikpLFNyP1tBci9TcixNci9Tcl06VHI/W3dyL1RyLGtyL1RyXTpfcj9beHIvX3IsYnIvX3JdOltOYU4sTmFOXX0scy5ib3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZuPWhuPS0oY249dW49MS8wKSx0Lmdlby5zdHJlYW0oZSxuKGduKSksW1tjbix1bl0sW2ZuLGhuXV19LHMucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0oZT10KT90LnN0cmVhbXx8KHI9dCxpPUFuKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoW3QqTHQsZSpMdF0pfSksZnVuY3Rpb24odCl7cmV0dXJuIExuKGkodCkpfSk6eixsKCkpOmU7dmFyIHIsaX0scy5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShyPXQpP25ldyB2bjpuZXcgVG4odCksImZ1bmN0aW9uIiE9dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMobyksbCgpKTpyfSxzLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxzKTpvfSxzLnByb2plY3Rpb24odC5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCl9LHQuZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciByPW5ldyBNbihlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9fX0sTW4ucHJvdG90eXBlPXtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSx0Lmdlby5wcm9qZWN0aW9uPUVuLHQuZ2VvLnByb2plY3Rpb25NdXRhdG9yPUNuLCh0Lmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oem4pfSkucmF3PXpuLmludmVydD16bix0Lmdlby5yb3RhdGlvbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpDdCxlWzFdKkN0KSlbMF0qPUx0LGVbMV0qPUx0LGV9cmV0dXJuIHQ9SW4odFswXSUzNjAqQ3QsdFsxXSpDdCx0Lmxlbmd0aD4yP3RbMl0qQ3Q6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSpDdCxlWzFdKkN0KSlbMF0qPUx0LGVbMV0qPUx0LGV9LGV9LE9uLmludmVydD16bix0Lmdlby5jaXJjbGU9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9WzAsMF0sbj02O2Z1bmN0aW9uIGkoKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyLG49SW4oLXRbMF0qQ3QsLXRbMV0qQ3QsMCkuaW52ZXJ0LGk9W107cmV0dXJuIGUobnVsbCxudWxsLDEse3BvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQ9bih0LGUpKSx0WzBdKj1MdCx0WzFdKj1MdH19KSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2ldfX1yZXR1cm4gaS5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUZuKCh0PStyKSpDdCxuKkN0KSxpKTp0fSxpLnByZWNpc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Gbih0KkN0LChuPStyKSpDdCksaSk6bn0saS5hbmdsZSg5MCl9LHQuZ2VvLmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0oZVswXS10WzBdKSpDdCxpPXRbMV0qQ3QsYT1lWzFdKkN0LG89TWF0aC5zaW4obikscz1NYXRoLmNvcyhuKSxsPU1hdGguc2luKGkpLGM9TWF0aC5jb3MoaSksdT1NYXRoLnNpbihhKSxmPU1hdGguY29zKGEpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgocj1mKm8pKnIrKHI9Yyp1LWwqZipzKSpyKSxsKnUrYypmKnMpfSx0Lmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscD0xMCxkPXAsZz05MCx2PTM2MCxtPTIuNTtmdW5jdGlvbiB4KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6YigpfX1mdW5jdGlvbiBiKCl7cmV0dXJuIHQucmFuZ2UoTWF0aC5jZWlsKGkvZykqZyxuLGcpLm1hcChmKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwobC92KSp2LHMsdikubWFwKGgpKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwoci9wKSpwLGUscCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQlZyk+a3R9KS5tYXAoYykpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChvL2QpKmQsYSxkKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHkodCV2KT5rdH0pLm1hcCh1KSl9cmV0dXJuIHgubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYigpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KX0seC5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltmKGkpLmNvbmNhdChoKHMpLnNsaWNlKDEpLGYobikucmV2ZXJzZSgpLnNsaWNlKDEpLGgobCkucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx4LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQpOngubWlub3JFeHRlbnQoKX0seC5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxuPSt0WzFdWzBdLGw9K3RbMF1bMV0scz0rdFsxXVsxXSxpPm4mJih0PWksaT1uLG49dCksbD5zJiYodD1sLGw9cyxzPXQpLHgucHJlY2lzaW9uKG0pKTpbW2ksbF0sW24sc11dfSx4Lm1pbm9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sbz0rdFswXVsxXSxhPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSxvPmEmJih0PW8sbz1hLGE9dCkseC5wcmVjaXNpb24obSkpOltbcixvXSxbZSxhXV19LHguc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yU3RlcCh0KS5taW5vclN0ZXAodCk6eC5taW5vclN0ZXAoKX0seC5tYWpvclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3RbMF0sdj0rdFsxXSx4KTpbZyx2XX0seC5taW5vclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sZD0rdFsxXSx4KTpbcCxkXX0seC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3QsYz1ObihvLGEsOTApLHU9am4ocixlLG0pLGY9Tm4obCxzLDkwKSxoPWpuKGksbixtKSx4KTptfSx4Lm1ham9yRXh0ZW50KFtbLTE4MCwtOTAra3RdLFsxODAsOTAta3RdXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1rdF0sWzE4MCw4MCtrdF1dKX0sdC5nZW8uZ3JlYXRBcmM9ZnVuY3Rpb24oKXt2YXIgZSxyLG49Vm4saT1VbjtmdW5jdGlvbiBhKCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOltlfHxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyfHxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKV19fXJldHVybiBhLmRpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2VvLmRpc3RhbmNlKGV8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sYS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P251bGw6dCxhKTpufSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bnVsbDp0LGEpOml9LGEucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YTowfSxhfSx0Lmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiByPXRbMF0qQ3Qsbj10WzFdKkN0LGk9ZVswXSpDdCxhPWVbMV0qQ3Qsbz1NYXRoLmNvcyhuKSxzPU1hdGguc2luKG4pLGw9TWF0aC5jb3MoYSksYz1NYXRoLnNpbihhKSx1PW8qTWF0aC5jb3MociksZj1vKk1hdGguc2luKHIpLGg9bCpNYXRoLmNvcyhpKSxwPWwqTWF0aC5zaW4oaSksZD0yKk1hdGguYXNpbihNYXRoLnNxcnQoUnQoYS1uKStvKmwqUnQoaS1yKSkpLGc9MS9NYXRoLnNpbihkKSwodj1kP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGguc2luKHQqPWQpKmcscj1NYXRoLnNpbihkLXQpKmcsbj1yKnUrZSpoLGk9cipmK2UqcCxhPXIqcytlKmM7cmV0dXJuW01hdGguYXRhbjIoaSxuKSpMdCxNYXRoLmF0YW4yKGEsTWF0aC5zcXJ0KG4qbitpKmkpKSpMdF19OmZ1bmN0aW9uKCl7cmV0dXJuW3IqTHQsbipMdF19KS5kaXN0YW5jZT1kLHY7dmFyIHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsZyx2fSx0Lmdlby5sZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHluPTAsdC5nZW8uc3RyZWFtKGUscW4pLHlufTt2YXIgcW49e3NwaGVyZTpQLHBvaW50OlAsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixpKXt2YXIgYT1NYXRoLnNpbihpKj1DdCksbz1NYXRoLmNvcyhpKSxzPXkoKG4qPUN0KS10KSxsPU1hdGguY29zKHMpO3luKz1NYXRoLmF0YW4yKE1hdGguc3FydCgocz1vKk1hdGguc2luKHMpKSpzKyhzPXIqYS1lKm8qbCkqcyksZSphK3IqbypsKSx0PW4sZT1hLHI9b31xbi5wb2ludD1mdW5jdGlvbihpLGEpe3Q9aSpDdCxlPU1hdGguc2luKGEqPUN0KSxyPU1hdGguY29zKGEpLHFuLnBvaW50PW59LHFuLmxpbmVFbmQ9ZnVuY3Rpb24oKXtxbi5wb2ludD1xbi5saW5lRW5kPVB9fSxsaW5lRW5kOlAscG9seWdvblN0YXJ0OlAscG9seWdvbkVuZDpQfTtmdW5jdGlvbiBIbih0LGUpe2Z1bmN0aW9uIHIoZSxyKXt2YXIgbj1NYXRoLmNvcyhlKSxpPU1hdGguY29zKHIpLGE9dChuKmkpO3JldHVyblthKmkqTWF0aC5zaW4oZSksYSpNYXRoLnNpbihyKV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7dmFyIG49TWF0aC5zcXJ0KHQqdCtyKnIpLGk9ZShuKSxhPU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSk7cmV0dXJuW01hdGguYXRhbjIodCphLG4qbyksTWF0aC5hc2luKG4mJnIqYS9uKV19LHJ9dmFyIEduPUhuKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoMi8oMSt0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXNpbih0LzIpfSk7KHQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBFbihHbil9KS5yYXc9R247dmFyIFluPUhuKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguYWNvcyh0KTtyZXR1cm4gZSYmZS9NYXRoLnNpbihlKX0seik7ZnVuY3Rpb24gV24odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnRhbihBdC80K3QvMil9LGk9dD09PWU/TWF0aC5zaW4odCk6TWF0aC5sb2coci9NYXRoLmNvcyhlKSkvTWF0aC5sb2cobihlKS9uKHQpKSxhPXIqTWF0aC5wb3cobih0KSxpKS9pO2lmKCFpKXJldHVybiAkbjtmdW5jdGlvbiBvKHQsZSl7YT4wP2U8LUV0K2t0JiYoZT0tRXQra3QpOmU+RXQta3QmJihlPUV0LWt0KTt2YXIgcj1hL01hdGgucG93KG4oZSksaSk7cmV0dXJuW3IqTWF0aC5zaW4oaSp0KSxhLXIqTWF0aC5jb3MoaSp0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lLG49enQoaSkqTWF0aC5zcXJ0KHQqdCtyKnIpO3JldHVybltNYXRoLmF0YW4yKHQscikvaSwyKk1hdGguYXRhbihNYXRoLnBvdyhhL24sMS9pKSktRXRdfSxvfWZ1bmN0aW9uIFhuKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj10PT09ZT9NYXRoLnNpbih0KTooci1NYXRoLmNvcyhlKSkvKGUtdCksaT1yL24rdDtpZih5KG4pPGt0KXJldHVybiB6bjtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aS1lO3JldHVybltyKk1hdGguc2luKG4qdCksaS1yKk1hdGguY29zKG4qdCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWktZTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL24saS16dChuKSpNYXRoLnNxcnQodCp0K3IqcildfSxhfSh0Lmdlby5hemltdXRoYWxFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBFbihZbil9KS5yYXc9WW4sKHQuZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIGFuKFduKX0pLnJhdz1XbiwodC5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBhbihYbil9KS5yYXc9WG47dmFyIFpuPUhuKGZ1bmN0aW9uKHQpe3JldHVybiAxL3R9LE1hdGguYXRhbik7ZnVuY3Rpb24gJG4odCxlKXtyZXR1cm5bdCxNYXRoLmxvZyhNYXRoLnRhbihBdC80K2UvMikpXX1mdW5jdGlvbiBKbih0KXt2YXIgZSxyPUVuKHQpLG49ci5zY2FsZSxpPXIudHJhbnNsYXRlLGE9ci5jbGlwRXh0ZW50O3JldHVybiByLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gdD09PXI/ZT9yLmNsaXBFeHRlbnQobnVsbCk6cjp0fSxyLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5hcHBseShyLGFyZ3VtZW50cyk7aWYobz09PXIpe2lmKGU9bnVsbD09dCl7dmFyIHM9QXQqbigpLGw9aSgpO2EoW1tsWzBdLXMsbFsxXS1zXSxbbFswXStzLGxbMV0rc11dKX19ZWxzZSBlJiYobz1udWxsKTtyZXR1cm4gb30sci5jbGlwRXh0ZW50KG51bGwpfSh0Lmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBFbihabil9KS5yYXc9Wm4sJG4uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMipNYXRoLmF0YW4oTWF0aC5leHAoZSkpLUV0XX0sKHQuZ2VvLm1lcmNhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIEpuKCRuKX0pLnJhdz0kbjt2YXIgS249SG4oZnVuY3Rpb24oKXtyZXR1cm4gMX0sTWF0aC5hc2luKTsodC5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEVuKEtuKX0pLnJhdz1Lbjt2YXIgUW49SG4oZnVuY3Rpb24odCl7cmV0dXJuIDEvKDErdCl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXRhbih0KX0pO2Z1bmN0aW9uIHRpKHQsZSl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKEF0LzQrZS8yKSksLXRdfWZ1bmN0aW9uIGVpKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIHJpKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVswLDFdLG49MixpPTI7aTxlO2krKyl7Zm9yKDtuPjEmJk90KHRbcltuLTJdXSx0W3Jbbi0xXV0sdFtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGlpKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfSh0Lmdlby5zdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEVuKFFuKX0pLnJhdz1Rbix0aS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLUV0XX0sKHQuZ2VvLnRyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PUpuKHRpKSxlPXQuY2VudGVyLHI9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0P2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0P3IoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9cigpKVswXSx0WzFdLHRbMl0tOTBdfSxyKFswLDAsOTBdKX0pLnJhdz10aSx0Lmdlb209e30sdC5nZW9tLmh1bGw9ZnVuY3Rpb24odCl7dmFyIGU9ZWkscj1yaTtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuKHQpO2Z1bmN0aW9uIG4odCl7aWYodC5sZW5ndGg8MylyZXR1cm5bXTt2YXIgbixpPXZlKGUpLGE9dmUociksbz10Lmxlbmd0aCxzPVtdLGw9W107Zm9yKG49MDtuPG87bisrKXMucHVzaChbK2kuY2FsbCh0aGlzLHRbbl0sbiksK2EuY2FsbCh0aGlzLHRbbl0sbiksbl0pO2ZvcihzLnNvcnQoaWkpLG49MDtuPG87bisrKWwucHVzaChbc1tuXVswXSwtc1tuXVsxXV0pO3ZhciBjPW5pKHMpLHU9bmkobCksZj11WzBdPT09Y1swXSxoPXVbdS5sZW5ndGgtMV09PT1jW2MubGVuZ3RoLTFdLHA9W107Zm9yKG49Yy5sZW5ndGgtMTtuPj0wOy0tbilwLnB1c2godFtzW2Nbbl1dWzJdXSk7Zm9yKG49K2Y7bjx1Lmxlbmd0aC1oOysrbilwLnB1c2godFtzW3Vbbl1dWzJdXSk7cmV0dXJuIHB9cmV0dXJuIG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKHQpe3JldHVybiBVKHQsYWkpLHR9O3ZhciBhaT10Lmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gb2kodCxlLHIpe3JldHVybihyWzBdLWVbMF0pKih0WzFdLWVbMV0pPChyWzFdLWVbMV0pKih0WzBdLWVbMF0pfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPXRbMF0sYT1yWzBdLG89ZVswXS1pLHM9blswXS1hLGw9dFsxXSxjPXJbMV0sdT1lWzFdLWwsZj1uWzFdLWMsaD0ocyoobC1jKS1mKihpLWEpKS8oZipvLXMqdSk7cmV0dXJuW2kraCpvLGwraCp1XX1mdW5jdGlvbiBsaSh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4hKGVbMF0tclswXXx8ZVsxXS1yWzFdKX1haS5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9LTEscj10aGlzLmxlbmd0aCxuPXRoaXNbci0xXSxpPTA7KytlPHI7KXQ9bixuPXRoaXNbZV0saSs9dFsxXSpuWzBdLXRbMF0qblsxXTtyZXR1cm4uNSppfSxhaS5jZW50cm9pZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10aGlzLmxlbmd0aCxhPTAsbz0wLHM9dGhpc1tpLTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwodD0tMS8oNip0aGlzLmFyZWEoKSkpOysrbjxpOyllPXMscz10aGlzW25dLHI9ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpyLG8rPShlWzFdK3NbMV0pKnI7cmV0dXJuW2EqdCxvKnRdfSxhaS5jbGlwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scz1saSh0KSxsPS0xLGM9dGhpcy5sZW5ndGgtbGkodGhpcyksdT10aGlzW2MtMV07KytsPGM7KXtmb3IoZT10LnNsaWNlKCksdC5sZW5ndGg9MCxpPXRoaXNbbF0sYT1lWyhuPWUubGVuZ3RoLXMpLTFdLHI9LTE7KytyPG47KW9pKG89ZVtyXSx1LGkpPyhvaShhLHUsaSl8fHQucHVzaChzaShhLG8sdSxpKSksdC5wdXNoKG8pKTpvaShhLHUsaSkmJnQucHVzaChzaShhLG8sdSxpKSksYT1vO3MmJnQucHVzaCh0WzBdKSx1PWl9cmV0dXJuIHR9O3ZhciBjaSx1aSxmaSxoaSxwaSxkaT1bXSxnaT1bXTtmdW5jdGlvbiB2aSgpe0RpKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBtaSh0KXt2YXIgZT1kaS5wb3AoKXx8bmV3IHZpO3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIHlpKHQpe1NpKHQpLGZpLnJlbW92ZSh0KSxkaS5wdXNoKHQpLERpKHQpfWZ1bmN0aW9uIHhpKHQpe3ZhciBlPXQuY2lyY2xlLHI9ZS54LG49ZS5jeSxpPXt4OnIseTpufSxhPXQuUCxvPXQuTixzPVt0XTt5aSh0KTtmb3IodmFyIGw9YTtsLmNpcmNsZSYmeShyLWwuY2lyY2xlLngpPGt0JiZ5KG4tbC5jaXJjbGUuY3kpPGt0OylhPWwuUCxzLnVuc2hpZnQobCkseWkobCksbD1hO3MudW5zaGlmdChsKSxTaShsKTtmb3IodmFyIGM9bztjLmNpcmNsZSYmeShyLWMuY2lyY2xlLngpPGt0JiZ5KG4tYy5jaXJjbGUuY3kpPGt0OylvPWMuTixzLnB1c2goYykseWkoYyksYz1vO3MucHVzaChjKSxTaShjKTt2YXIgdSxmPXMubGVuZ3RoO2Zvcih1PTE7dTxmOysrdSljPXNbdV0sbD1zW3UtMV0semkoYy5lZGdlLGwuc2l0ZSxjLnNpdGUsaSk7bD1zWzBdLChjPXNbZi0xXSkuZWRnZT1MaShsLnNpdGUsYy5zaXRlLG51bGwsaSksTWkobCksTWkoYyl9ZnVuY3Rpb24gYmkodCl7Zm9yKHZhciBlLHIsbixpLGE9dC54LG89dC55LHM9ZmkuXztzOylpZigobj1faShzLG8pLWEpPmt0KXM9cy5MO2Vsc2V7aWYoISgoaT1hLXdpKHMsbykpPmt0KSl7bj4ta3Q/KGU9cy5QLHI9cyk6aT4ta3Q/KGU9cyxyPXMuTik6ZT1yPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfXZhciBsPW1pKHQpO2lmKGZpLmluc2VydChlLGwpLGV8fHIpe2lmKGU9PT1yKXJldHVybiBTaShlKSxyPW1pKGUuc2l0ZSksZmkuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1MaShlLnNpdGUsbC5zaXRlKSxNaShlKSx2b2lkIE1pKHIpO2lmKHIpe1NpKGUpLFNpKHIpO3ZhciBjPWUuc2l0ZSx1PWMueCxmPWMueSxoPXQueC11LHA9dC55LWYsZD1yLnNpdGUsZz1kLngtdSx2PWQueS1mLG09MiooaCp2LXAqZykseT1oKmgrcCpwLHg9ZypnK3YqdixiPXt4Oih2KnktcCp4KS9tK3UseTooaCp4LWcqeSkvbStmfTt6aShyLmVkZ2UsYyxkLGIpLGwuZWRnZT1MaShjLHQsbnVsbCxiKSxyLmVkZ2U9TGkodCxkLG51bGwsYiksTWkoZSksTWkocil9ZWxzZSBsLmVkZ2U9TGkoZS5zaXRlLGwuc2l0ZSl9fWZ1bmN0aW9uIF9pKHQsZSl7dmFyIHI9dC5zaXRlLG49ci54LGk9ci55LGE9aS1lO2lmKCFhKXJldHVybiBuO3ZhciBvPXQuUDtpZighbylyZXR1cm4tMS8wO3ZhciBzPShyPW8uc2l0ZSkueCxsPXIueSxjPWwtZTtpZighYylyZXR1cm4gczt2YXIgdT1zLW4sZj0xL2EtMS9jLGg9dS9jO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZioodSp1LygtMipjKS1sK2MvMitpLWEvMikpKS9mK246KG4rcykvMn1mdW5jdGlvbiB3aSh0LGUpe3ZhciByPXQuTjtpZihyKXJldHVybiBfaShyLGUpO3ZhciBuPXQuc2l0ZTtyZXR1cm4gbi55PT09ZT9uLng6MS8wfWZ1bmN0aW9uIGtpKHQpe3RoaXMuc2l0ZT10LHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gVGkodCxlKXtyZXR1cm4gZS5hbmdsZS10LmFuZ2xlfWZ1bmN0aW9uIEFpKCl7RGkodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE1pKHQpe3ZhciBlPXQuUCxyPXQuTjtpZihlJiZyKXt2YXIgbj1lLnNpdGUsaT10LnNpdGUsYT1yLnNpdGU7aWYobiE9PWEpe3ZhciBvPWkueCxzPWkueSxsPW4ueC1vLGM9bi55LXMsdT1hLngtbyxmPTIqKGwqKHY9YS55LXMpLWMqdSk7aWYoIShmPj0tVHQpKXt2YXIgaD1sKmwrYypjLHA9dSp1K3YqdixkPSh2KmgtYypwKS9mLGc9KGwqcC11KmgpL2Ysdj1nK3MsbT1naS5wb3AoKXx8bmV3IEFpO20uYXJjPXQsbS5zaXRlPWksbS54PWQrbyxtLnk9ditNYXRoLnNxcnQoZCpkK2cqZyksbS5jeT12LHQuY2lyY2xlPW07Zm9yKHZhciB5PW51bGwseD1waS5fO3g7KWlmKG0ueTx4Lnl8fG0ueT09PXgueSYmbS54PD14Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9eC5SfXBpLmluc2VydCh5LG0pLHl8fChoaT1tKX19fX1mdW5jdGlvbiBTaSh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoaGk9ZS5OKSxwaS5yZW1vdmUoZSksZ2kucHVzaChlKSxEaShlKSx0LmNpcmNsZT1udWxsKX1mdW5jdGlvbiBFaSh0LGUpe3ZhciByPXQuYjtpZihyKXJldHVybiEwO3ZhciBuLGksYT10LmEsbz1lWzBdWzBdLHM9ZVsxXVswXSxsPWVbMF1bMV0sYz1lWzFdWzFdLHU9dC5sLGY9dC5yLGg9dS54LHA9dS55LGQ9Zi54LGc9Zi55LHY9KGgrZCkvMixtPShwK2cpLzI7aWYoZz09PXApe2lmKHY8b3x8dj49cylyZXR1cm47aWYoaD5kKXtpZihhKXtpZihhLnk+PWMpcmV0dXJufWVsc2UgYT17eDp2LHk6bH07cj17eDp2LHk6Y319ZWxzZXtpZihhKXtpZihhLnk8bClyZXR1cm59ZWxzZSBhPXt4OnYseTpjfTtyPXt4OnYseTpsfX19ZWxzZSBpZihpPW0tKG49KGgtZCkvKGctcCkpKnYsbjwtMXx8bj4xKWlmKGg+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6KGwtaSkvbix5Omx9O3I9e3g6KGMtaSkvbix5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDooYy1pKS9uLHk6Y307cj17eDoobC1pKS9uLHk6bH19ZWxzZSBpZihwPGcpe2lmKGEpe2lmKGEueD49cylyZXR1cm59ZWxzZSBhPXt4Om8seTpuKm8raX07cj17eDpzLHk6bipzK2l9fWVsc2V7aWYoYSl7aWYoYS54PG8pcmV0dXJufWVsc2UgYT17eDpzLHk6bipzK2l9O3I9e3g6byx5Om4qbytpfX1yZXR1cm4gdC5hPWEsdC5iPXIsITB9ZnVuY3Rpb24gQ2kodCxlKXt0aGlzLmw9dCx0aGlzLnI9ZSx0aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gTGkodCxlLHIsbil7dmFyIGk9bmV3IENpKHQsZSk7cmV0dXJuIGNpLnB1c2goaSksciYmemkoaSx0LGUsciksbiYmemkoaSxlLHQsbiksdWlbdC5pXS5lZGdlcy5wdXNoKG5ldyBPaShpLHQsZSkpLHVpW2UuaV0uZWRnZXMucHVzaChuZXcgT2koaSxlLHQpKSxpfWZ1bmN0aW9uIHppKHQsZSxyLG4pe3QuYXx8dC5iP3QubD09PXI/dC5iPW46dC5hPW46KHQuYT1uLHQubD1lLHQucj1yKX1mdW5jdGlvbiBPaSh0LGUscil7dmFyIG49dC5hLGk9dC5iO3RoaXMuZWRnZT10LHRoaXMuc2l0ZT1lLHRoaXMuYW5nbGU9cj9NYXRoLmF0YW4yKHIueS1lLnksci54LWUueCk6dC5sPT09ZT9NYXRoLmF0YW4yKGkueC1uLngsbi55LWkueSk6TWF0aC5hdGFuMihuLngtaS54LGkueS1uLnkpfWZ1bmN0aW9uIElpKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gRGkodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBQaSh0LGUpe3ZhciByPWUsbj1lLlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gUmkodCxlKXt2YXIgcj1lLG49ZS5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIEZpKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1mdW5jdGlvbiBCaSh0LGUpe3ZhciByLG4saSxhPXQuc29ydChOaSkucG9wKCk7Zm9yKGNpPVtdLHVpPW5ldyBBcnJheSh0Lmxlbmd0aCksZmk9bmV3IElpLHBpPW5ldyBJaTs7KWlmKGk9aGksYSYmKCFpfHxhLnk8aS55fHxhLnk9PT1pLnkmJmEueDxpLngpKWEueD09PXImJmEueT09PW58fCh1aVthLmldPW5ldyBraShhKSxiaShhKSxyPWEueCxuPWEueSksYT10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7eGkoaS5hcmMpfWUmJihmdW5jdGlvbih0KXtmb3IodmFyIGUscj1jaSxuPWVuKHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0pLGk9ci5sZW5ndGg7aS0tOykoIUVpKGU9cltpXSx0KXx8IW4oZSl8fHkoZS5hLngtZS5iLngpPGt0JiZ5KGUuYS55LWUuYi55KTxrdCkmJihlLmE9ZS5iPW51bGwsci5zcGxpY2UoaSwxKSl9KGUpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmPXRbMF1bMF0saD10WzFdWzBdLHA9dFswXVsxXSxkPXRbMV1bMV0sZz11aSx2PWcubGVuZ3RoO3YtLTspaWYoKGE9Z1t2XSkmJmEucHJlcGFyZSgpKWZvcihsPShzPWEuZWRnZXMpLmxlbmd0aCxvPTA7bzxsOyluPSh1PXNbb10uZW5kKCkpLngsaT11LnksZT0oYz1zWysrbyVsXS5zdGFydCgpKS54LHI9Yy55LCh5KG4tZSk+a3R8fHkoaS1yKT5rdCkmJihzLnNwbGljZShvLDAsbmV3IE9pKChtPWEuc2l0ZSx4PXUsYj15KG4tZik8a3QmJmQtaT5rdD97eDpmLHk6eShlLWYpPGt0P3I6ZH06eShpLWQpPGt0JiZoLW4+a3Q/e3g6eShyLWQpPGt0P2U6aCx5OmR9Onkobi1oKTxrdCYmaS1wPmt0P3t4OmgseTp5KGUtaCk8a3Q/cjpwfTp5KGktcCk8a3QmJm4tZj5rdD97eDp5KHItcCk8a3Q/ZTpmLHk6cH06bnVsbCxfPXZvaWQgMCxfPW5ldyBDaShtLG51bGwpLF8uYT14LF8uYj1iLGNpLnB1c2goXyksXyksYS5zaXRlLG51bGwpKSwrK2wpO3ZhciBtLHgsYixffShlKSk7dmFyIG89e2NlbGxzOnVpLGVkZ2VzOmNpfTtyZXR1cm4gZmk9cGk9Y2k9dWk9bnVsbCxvfWZ1bmN0aW9uIE5pKHQsZSl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9a2kucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLmVkZ2VzLHI9ZS5sZW5ndGg7ci0tOykodD1lW3JdLmVkZ2UpLmImJnQuYXx8ZS5zcGxpY2UociwxKTtyZXR1cm4gZS5zb3J0KFRpKSxlLmxlbmd0aH0sT2kucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYTp0aGlzLmVkZ2UuYn0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5iOnRoaXMuZWRnZS5hfX0sSWkucHJvdG90eXBlPXtpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7cj10fWVsc2UgdGhpcy5fPyh0PUZpKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLHI9dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxyPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPXIsZS5DPSEwLHQ9ZTtyJiZyLkM7KXI9PT0obj1yLlUpLkw/KGk9bi5SKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5SJiYoUGkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsUmkodGhpcyxuKSk6KGk9bi5MKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5MJiYoUmkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsUGkodGhpcyxuKSkscj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLHIsbixpPXQuVSxhPXQuTCxvPXQuUjtpZihyPWE/bz9GaShvKTphOm8saT9pLkw9PT10P2kuTD1yOmkuUj1yOnRoaXMuXz1yLGEmJm8/KG49ci5DLHIuQz10LkMsci5MPWEsYS5VPXIsciE9PW8/KGk9ci5VLHIuVT10LlUsdD1yLlIsaS5MPXQsci5SPW8sby5VPXIpOihyLlU9aSxpPXIsdD1yLlIpKToobj10LkMsdD1yKSx0JiYodC5VPWkpLCFuKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsUGkodGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxSaSh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxQaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsUmkodGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxQaSh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxSaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX0sdC5nZW9tLnZvcm9ub2k9ZnVuY3Rpb24odCl7dmFyIGU9ZWkscj1yaSxuPWUsaT1yLGE9amk7aWYodClyZXR1cm4gbyh0KTtmdW5jdGlvbiBvKHQpe3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj1hWzBdWzBdLG49YVswXVsxXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBCaShzKHQpLGEpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oYSxzKXt2YXIgbD1hLmVkZ2VzLGM9YS5zaXRlOyhlW3NdPWwubGVuZ3RoP2wubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhcnQoKTtyZXR1cm5bZS54LGUueV19KTpjLng+PXImJmMueDw9aSYmYy55Pj1uJiZjLnk8PW8/W1tyLG9dLFtpLG9dLFtpLG5dLFtyLG5dXTpbXSkucG9pbnQ9dFtzXX0pLGV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm57eDpNYXRoLnJvdW5kKG4odCxlKS9rdCkqa3QseTpNYXRoLnJvdW5kKGkodCxlKS9rdCkqa3QsaTplfX0pfXJldHVybiBvLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBCaShzKHQpKS5lZGdlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubCYmdC5yfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dFtlLmwuaV0sdGFyZ2V0OnRbZS5yLmldfX0pfSxvLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gQmkocyh0KSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihyLG4pe2Zvcih2YXIgaSxhLG8scyxsPXIuc2l0ZSxjPXIuZWRnZXMuc29ydChUaSksdT0tMSxmPWMubGVuZ3RoLGg9Y1tmLTFdLmVkZ2UscD1oLmw9PT1sP2gucjpoLmw7Kyt1PGY7KWgsaT1wLHA9KGg9Y1t1XS5lZGdlKS5sPT09bD9oLnI6aC5sLG48aS5pJiZuPHAuaSYmKG89aSxzPXAsKChhPWwpLngtcy54KSooby55LWEueSktKGEueC1vLngpKihzLnktYS55KTwwKSYmZS5wdXNoKFt0W25dLHRbaS5pXSx0W3AuaV1dKX0pLGV9LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj12ZShlPXQpLG8pOmV9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT12ZShyPXQpLG8pOnJ9LG8uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P2ppOnQsbyk6YT09PWppP251bGw6YX0sby5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28uY2xpcEV4dGVudCh0JiZbWzAsMF0sdF0pOmE9PT1qaT9udWxsOmEmJmFbMV19LG99O3ZhciBqaT1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTtmdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIFVpKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gcWkoZSxyKXtlPXQucmdiKGUpLHI9dC5yZ2Iocik7dmFyIG49ZS5yLGk9ZS5nLGE9ZS5iLG89ci5yLW4scz1yLmctaSxsPXIuYi1hO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iIyIrY2UoTWF0aC5yb3VuZChuK28qdCkpK2NlKE1hdGgucm91bmQoaStzKnQpKStjZShNYXRoLnJvdW5kKGErbCp0KSl9fWZ1bmN0aW9uIEhpKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIHQpciBpbiBlP25bcl09WmkodFtyXSxlW3JdKTppW3JdPXRbcl07Zm9yKHIgaW4gZSlyIGluIHR8fChpW3JdPWVbcl0pO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19ZnVuY3Rpb24gR2kodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiB0KigxLXIpK2Uqcn19ZnVuY3Rpb24gWWkodCxlKXt2YXIgcixuLGksYT1XaS5sYXN0SW5kZXg9WGkubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhyPVdpLmV4ZWModCkpJiYobj1YaS5leGVjKGUpKTspKGk9bi5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKHI9clswXSk9PT0obj1uWzBdKT9zW29dP3Nbb10rPW46c1srK29dPW46KHNbKytvXT1udWxsLGwucHVzaCh7aTpvLHg6R2kocixuKX0pKSxhPVhpLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT8oZT1sWzBdLngsZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9KTpmdW5jdGlvbigpe3JldHVybiBlfTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbigiIil9KX10Lmdlb20uZGVsYXVuYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKGUpfSx0Lmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvPWVpLHM9cmk7aWYoYT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBvPVZpLHM9VWksMz09PWEmJihpPXIsbj1lLHI9ZT0wKSxsKHQpO2Z1bmN0aW9uIGwodCl7dmFyIGwsYyx1LGYsaCxwLGQsZyx2LG09dmUobykseD12ZShzKTtpZihudWxsIT1lKXA9ZSxkPXIsZz1uLHY9aTtlbHNlIGlmKGc9dj0tKHA9ZD0xLzApLGM9W10sdT1bXSxoPXQubGVuZ3RoLGEpZm9yKGY9MDtmPGg7KytmKShsPXRbZl0pLng8cCYmKHA9bC54KSxsLnk8ZCYmKGQ9bC55KSxsLng+ZyYmKGc9bC54KSxsLnk+diYmKHY9bC55KSxjLnB1c2gobC54KSx1LnB1c2gobC55KTtlbHNlIGZvcihmPTA7ZjxoOysrZil7dmFyIGI9K20obD10W2ZdLGYpLF89K3gobCxmKTtiPHAmJihwPWIpLF88ZCYmKGQ9XyksYj5nJiYoZz1iKSxfPnYmJih2PV8pLGMucHVzaChiKSx1LnB1c2goXyl9dmFyIHc9Zy1wLGs9di1kO2Z1bmN0aW9uIFQodCxlLHIsbixpLGEsbyxzKXtpZighaXNOYU4ocikmJiFpc05hTihuKSlpZih0LmxlYWYpe3ZhciBsPXQueCxjPXQueTtpZihudWxsIT1sKWlmKHkobC1yKSt5KGMtbik8LjAxKUEodCxlLHIsbixpLGEsbyxzKTtlbHNle3ZhciB1PXQucG9pbnQ7dC54PXQueT10LnBvaW50PW51bGwsQSh0LHUsbCxjLGksYSxvLHMpLEEodCxlLHIsbixpLGEsbyxzKX1lbHNlIHQueD1yLHQueT1uLHQucG9pbnQ9ZX1lbHNlIEEodCxlLHIsbixpLGEsbyxzKX1mdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9LjUqKGkrbyksYz0uNSooYStzKSx1PXI+PWwsZj1uPj1jLGg9Zjw8MXx1O3QubGVhZj0hMSx1P2k9bDpvPWwsZj9hPWM6cz1jLFQodD10Lm5vZGVzW2hdfHwodC5ub2Rlc1toXT17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGwsYWRkOmZ1bmN0aW9uKHQpe1QoTSx0LCttKHQsKytmKSwreCh0LGYpLHAsZCxnLHYpfX0pLGUscixuLGksYSxvLHMpfXc+az92PWQrdzpnPXArazt2YXIgTT17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGwsYWRkOmZ1bmN0aW9uKHQpe1QoTSx0LCttKHQsKytmKSwreCh0LGYpLHAsZCxnLHYpfX07aWYoTS52aXNpdD1mdW5jdGlvbih0KXshZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7aWYoIWUocixuLGksYSxvKSl7dmFyIHM9LjUqKG4rYSksbD0uNSooaStvKSxjPXIubm9kZXM7Y1swXSYmdChlLGNbMF0sbixpLHMsbCksY1sxXSYmdChlLGNbMV0scyxpLGEsbCksY1syXSYmdChlLGNbMl0sbixsLHMsbyksY1szXSYmdChlLGNbM10scyxsLGEsbyl9fSh0LE0scCxkLGcsdil9LE0uZmluZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIHQoYyx1LGYsaCxwKXtpZighKHU+YXx8Zj5vfHxoPG58fHA8aSkpe2lmKGQ9Yy5wb2ludCl7dmFyIGQsZz1lLWMueCx2PXItYy55LG09ZypnK3YqdjtpZihtPGwpe3ZhciB5PU1hdGguc3FydChsPW0pO249ZS15LGk9ci15LGE9ZSt5LG89cit5LHM9ZH19Zm9yKHZhciB4PWMubm9kZXMsYj0uNSoodStoKSxfPS41KihmK3ApLHc9KHI+PV8pPDwxfGU+PWIsaz13KzQ7dzxrOysrdylpZihjPXhbMyZ3XSlzd2l0Y2goMyZ3KXtjYXNlIDA6dChjLHUsZixiLF8pO2JyZWFrO2Nhc2UgMTp0KGMsYixmLGgsXyk7YnJlYWs7Y2FzZSAyOnQoYyx1LF8sYixwKTticmVhaztjYXNlIDM6dChjLGIsXyxoLHApfX19KHQsbixpLGEsbyksc30oTSx0WzBdLHRbMV0scCxkLGcsdil9LGY9LTEsbnVsbD09ZSl7Zm9yKDsrK2Y8aDspVChNLHRbZl0sY1tmXSx1W2ZdLHAsZCxnLHYpOy0tZn1lbHNlIHQuZm9yRWFjaChNLmFkZCk7cmV0dXJuIGM9dT10PWw9bnVsbCxNfXJldHVybiBsLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxsKTpvfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxsKTpzfSxsLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9lPXI9bj1pPW51bGw6KGU9K3RbMF1bMF0scj0rdFswXVsxXSxuPSt0WzFdWzBdLGk9K3RbMV1bMV0pLGwpOm51bGw9PWU/bnVsbDpbW2Uscl0sW24saV1dfSxsLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPXI9MCxuPSt0WzBdLGk9K3RbMV0pLGwpOm51bGw9PWU/bnVsbDpbbi1lLGktcl19LGx9LHQuaW50ZXJwb2xhdGVSZ2I9cWksdC5pbnRlcnBvbGF0ZU9iamVjdD1IaSx0LmludGVycG9sYXRlTnVtYmVyPUdpLHQuaW50ZXJwb2xhdGVTdHJpbmc9WWk7dmFyIFdpPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxYaT1uZXcgUmVnRXhwKFdpLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFppKGUscil7Zm9yKHZhciBuLGk9dC5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLWk+PTAmJiEobj10LmludGVycG9sYXRvcnNbaV0oZSxyKSk7KTtyZXR1cm4gbn1mdW5jdGlvbiAkaSh0LGUpe3ZhciByLG49W10saT1bXSxhPXQubGVuZ3RoLG89ZS5sZW5ndGgscz1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk7Zm9yKHI9MDtyPHM7KytyKW4ucHVzaChaaSh0W3JdLGVbcl0pKTtmb3IoO3I8YTsrK3IpaVtyXT10W3JdO2Zvcig7cjxvOysrcilpW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxzOysrcilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fXQuaW50ZXJwb2xhdGU9WmksdC5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbih0LGUpe3ZhciByPXR5cGVvZiBlO3JldHVybigic3RyaW5nIj09PXI/Z2UuaGFzKGUudG9Mb3dlckNhc2UoKSl8fC9eKCN8cmdiXCh8aHNsXCgpL2kudGVzdChlKT9xaTpZaTplIGluc3RhbmNlb2YgVnQ/cWk6QXJyYXkuaXNBcnJheShlKT8kaToib2JqZWN0Ij09PXImJmlzTmFOKGUpP0hpOkdpKSh0LGUpfV0sdC5pbnRlcnBvbGF0ZUFycmF5PSRpO3ZhciBKaT1mdW5jdGlvbigpe3JldHVybiB6fSxLaT10Lm1hcCh7bGluZWFyOkppLHBvbHk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhlLHQpfX0scXVhZDpmdW5jdGlvbigpe3JldHVybiByYX0sY3ViaWM6ZnVuY3Rpb24oKXtyZXR1cm4gbmF9LHNpbjpmdW5jdGlvbigpe3JldHVybiBhYX0sZXhwOmZ1bmN0aW9uKCl7cmV0dXJuIG9hfSxjaXJjbGU6ZnVuY3Rpb24oKXtyZXR1cm4gc2F9LGVsYXN0aWM6ZnVuY3Rpb24odCxlKXt2YXIgcjthcmd1bWVudHMubGVuZ3RoPDImJihlPS40NSk7YXJndW1lbnRzLmxlbmd0aD9yPWUvTXQqTWF0aC5hc2luKDEvdCk6KHQ9MSxyPWUvNCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiAxK3QqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqTXQvZSl9fSxiYWNrOmZ1bmN0aW9uKHQpe3R8fCh0PTEuNzAxNTgpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZSplKigodCsxKSplLXQpfX0sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIGxhfX0pLFFpPXQubWFwKHtpbjp6LG91dDp0YSwiaW4tb3V0IjplYSwib3V0LWluIjpmdW5jdGlvbih0KXtyZXR1cm4gZWEodGEodCkpfX0pO2Z1bmN0aW9uIHRhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMS10KDEtZSl9fWZ1bmN0aW9uIGVhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4uNSooZTwuNT90KDIqZSk6Mi10KDItMiplKSl9fWZ1bmN0aW9uIHJhKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gbmEodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIGlhKHQpe2lmKHQ8PTApcmV0dXJuIDA7aWYodD49MSlyZXR1cm4gMTt2YXIgZT10KnQscj1lKnQ7cmV0dXJuIDQqKHQ8LjU/cjozKih0LWUpK3ItLjc1KX1mdW5jdGlvbiBhYSh0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KkV0KX1mdW5jdGlvbiBvYSh0KXtyZXR1cm4gTWF0aC5wb3coMiwxMCoodC0xKSl9ZnVuY3Rpb24gc2EodCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX1mdW5jdGlvbiBsYSh0KXtyZXR1cm4gdDwxLzIuNzU/Ny41NjI1KnQqdDp0PDIvMi43NT83LjU2MjUqKHQtPTEuNS8yLjc1KSp0Ky43NTp0PDIuNS8yLjc1PzcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1OjcuNTYyNSoodC09Mi42MjUvMi43NSkqdCsuOTg0Mzc1fWZ1bmN0aW9uIGNhKHQsZSl7cmV0dXJuIGUtPXQsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCtlKnIpfX1mdW5jdGlvbiB1YSh0KXt2YXIgZSxyLG4saT1bdC5hLHQuYl0sYT1bdC5jLHQuZF0sbz1oYShpKSxzPWZhKGksYSksbD1oYSgoKGU9YSlbMF0rPShuPS1zKSoocj1pKVswXSxlWzFdKz1uKnJbMV0sZSkpfHwwO2lbMF0qYVsxXTxhWzBdKmlbMV0mJihpWzBdKj0tMSxpWzFdKj0tMSxvKj0tMSxzKj0tMSksdGhpcy5yb3RhdGU9KG8/TWF0aC5hdGFuMihpWzFdLGlbMF0pOk1hdGguYXRhbjIoLWFbMF0sYVsxXSkpKkx0LHRoaXMudHJhbnNsYXRlPVt0LmUsdC5mXSx0aGlzLnNjYWxlPVtvLGxdLHRoaXMuc2tldz1sP01hdGguYXRhbjIocyxsKSpMdDowfWZ1bmN0aW9uIGZhKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV19ZnVuY3Rpb24gaGEodCl7dmFyIGU9TWF0aC5zcXJ0KGZhKHQsdCkpO3JldHVybiBlJiYodFswXS89ZSx0WzFdLz1lKSxlfXQuZWFzZT1mdW5jdGlvbih0KXt2YXIgZSxuPXQuaW5kZXhPZigiLSIpLGk9bj49MD90LnNsaWNlKDAsbik6dCxhPW4+PTA/dC5zbGljZShuKzEpOiJpbiI7cmV0dXJuIGk9S2kuZ2V0KGkpfHxKaSxhPVFpLmdldChhKXx8eixlPWEoaS5hcHBseShudWxsLHIuY2FsbChhcmd1bWVudHMsMSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD8wOnQ+PTE/MTplKHQpfX0sdC5pbnRlcnBvbGF0ZUhjbD1mdW5jdGlvbihlLHIpe2U9dC5oY2woZSkscj10LmhjbChyKTt2YXIgbj1lLmgsaT1lLmMsYT1lLmwsbz1yLmgtbixzPXIuYy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLmM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFd0KG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVIc2w9ZnVuY3Rpb24oZSxyKXtlPXQuaHNsKGUpLHI9dC5oc2wocik7dmFyIG49ZS5oLGk9ZS5zLGE9ZS5sLG89ci5oLW4scz1yLnMtaSxsPXIubC1hO2lzTmFOKHMpJiYocz0wLGk9aXNOYU4oaSk/ci5zOmkpO2lzTmFOKG8pPyhvPTAsbj1pc05hTihuKT9yLmg6bik6bz4xODA/by09MzYwOm88LTE4MCYmKG8rPTM2MCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBIdChuK28qdCxpK3MqdCxhK2wqdCkrIiJ9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKGUscil7ZT10LmxhYihlKSxyPXQubGFiKHIpO3ZhciBuPWUubCxpPWUuYSxhPWUuYixvPXIubC1uLHM9ci5hLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHRlKG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVSb3VuZD1jYSx0LnRyYW5zZm9ybT1mdW5jdGlvbihlKXt2YXIgcj1pLmNyZWF0ZUVsZW1lbnROUyh0Lm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4odC50cmFuc2Zvcm09ZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7ci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCk7dmFyIGU9ci50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpfXJldHVybiBuZXcgdWEoZT9lLm1hdHJpeDpwYSl9KShlKX0sdWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3RoaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBwYT17YToxLGI6MCxjOjAsZDoxLGU6MCxmOjB9O2Z1bmN0aW9uIGRhKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIsIjoiIn1mdW5jdGlvbiBnYShlLHIpe3ZhciBuPVtdLGk9W107cmV0dXJuIGU9dC50cmFuc2Zvcm0oZSkscj10LnRyYW5zZm9ybShyKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaCgidHJhbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO24ucHVzaCh7aTppLTQseDpHaSh0WzBdLGVbMF0pfSx7aTppLTIseDpHaSh0WzFdLGVbMV0pfSl9ZWxzZShlWzBdfHxlWzFdKSYmci5wdXNoKCJ0cmFuc2xhdGUoIitlKyIpIil9KGUudHJhbnNsYXRlLHIudHJhbnNsYXRlLG4saSksZnVuY3Rpb24odCxlLHIsbil7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG4ucHVzaCh7aTpyLnB1c2goZGEocikrInJvdGF0ZSgiLG51bGwsIikiKS0yLHg6R2kodCxlKX0pKTplJiZyLnB1c2goZGEocikrInJvdGF0ZSgiK2UrIikiKX0oZS5yb3RhdGUsci5yb3RhdGUsbixpKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT9uLnB1c2goe2k6ci5wdXNoKGRhKHIpKyJza2V3WCgiLG51bGwsIikiKS0yLHg6R2kodCxlKX0pOmUmJnIucHVzaChkYShyKSsic2tld1goIitlKyIpIil9KGUuc2tldyxyLnNrZXcsbixpKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaChkYShyKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OkdpKHRbMF0sZVswXSl9LHtpOmktMix4OkdpKHRbMV0sZVsxXSl9KX1lbHNlIDE9PT1lWzBdJiYxPT09ZVsxXXx8ci5wdXNoKGRhKHIpKyJzY2FsZSgiK2UrIikiKX0oZS5zY2FsZSxyLnNjYWxlLG4saSksZT1yPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsYT1pLmxlbmd0aDsrK3I8YTspblsoZT1pW3JdKS5pXT1lLngodCk7cmV0dXJuIG4uam9pbigiIil9fWZ1bmN0aW9uIHZhKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX19ZnVuY3Rpb24gbWEodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChyLXQpL2UpKX19ZnVuY3Rpb24geWEodCl7Zm9yKHZhciBlPXQuc291cmNlLHI9dC50YXJnZXQsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXhhKHQpLG49eGEoZSksaT1yLnBvcCgpLGE9bi5wb3AoKSxvPW51bGw7Zm9yKDtpPT09YTspbz1pLGk9ci5wb3AoKSxhPW4ucG9wKCk7cmV0dXJuIG99KGUsciksaT1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsaS5wdXNoKGUpO2Zvcih2YXIgYT1pLmxlbmd0aDtyIT09bjspaS5zcGxpY2UoYSwwLHIpLHI9ci5wYXJlbnQ7cmV0dXJuIGl9ZnVuY3Rpb24geGEodCl7Zm9yKHZhciBlPVtdLHI9dC5wYXJlbnQ7bnVsbCE9cjspZS5wdXNoKHQpLHQ9cixyPXIucGFyZW50O3JldHVybiBlLnB1c2godCksZX1mdW5jdGlvbiBiYSh0KXt0LmZpeGVkfD0yfWZ1bmN0aW9uIF9hKHQpe3QuZml4ZWQmPS03fWZ1bmN0aW9uIHdhKHQpe3QuZml4ZWR8PTQsdC5weD10LngsdC5weT10Lnl9ZnVuY3Rpb24ga2EodCl7dC5maXhlZCY9LTV9dC5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1nYSx0LmxheW91dD17fSx0LmxheW91dC5idW5kbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9LTEsbj10Lmxlbmd0aDsrK3I8bjspZS5wdXNoKHlhKHRbcl0pKTtyZXR1cm4gZX19LHQubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbD17fSxjPTA7ZnVuY3Rpb24gdSgpe3ZhciBsLHUsaCxwLGQsZz17fSx2PVtdLG09dC5yYW5nZShpKSx5PVtdO2ZvcihlPVtdLHI9W10sbD0wLHA9LTE7KytwPGk7KXtmb3IodT0wLGQ9LTE7KytkPGk7KXUrPW5bcF1bZF07di5wdXNoKHUpLHkucHVzaCh0LnJhbmdlKGkpKSxsKz11fWZvcihhJiZtLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh2W3RdLHZbZV0pfSksbyYmeS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIG8obltlXVt0XSxuW2VdW3JdKX0pfSksbD0oTXQtYyppKS9sLHU9MCxwPS0xOysrcDxpOyl7Zm9yKGg9dSxkPS0xOysrZDxpOyl7dmFyIHg9bVtwXSxiPXlbeF1bZF0sXz1uW3hdW2JdLHc9dSxrPXUrPV8qbDtnW3grIi0iK2JdPXtpbmRleDp4LHN1YmluZGV4OmIsc3RhcnRBbmdsZTp3LGVuZEFuZ2xlOmssdmFsdWU6X319clt4XT17aW5kZXg6eCxzdGFydEFuZ2xlOmgsZW5kQW5nbGU6dSx2YWx1ZTp2W3hdfSx1Kz1jfWZvcihwPS0xOysrcDxpOylmb3IoZD1wLTE7KytkPGk7KXt2YXIgVD1nW3ArIi0iK2RdLEE9Z1tkKyItIitwXTsoVC52YWx1ZXx8QS52YWx1ZSkmJmUucHVzaChULnZhbHVlPEEudmFsdWU/e3NvdXJjZTpBLHRhcmdldDpUfTp7c291cmNlOlQsdGFyZ2V0OkF9KX1zJiZmKCl9ZnVuY3Rpb24gZigpe2Uuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBzKCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMiwoZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUpLzIpfSl9cmV0dXJuIGwubWF0cml4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPShuPXQpJiZuLmxlbmd0aCxlPXI9bnVsbCxsKTpufSxsLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxlPXI9bnVsbCxsKTpjfSxsLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxlPXI9bnVsbCxsKTphfSxsLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxlPW51bGwsbCk6b30sbC5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZSYmZigpLGwpOnN9LGwuY2hvcmRzPWZ1bmN0aW9uKCl7cmV0dXJuIGV8fHUoKSxlfSxsLmdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiByfHx1KCkscn0sbH0sdC5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scz17fSxsPXQuZGlzcGF0Y2goInN0YXJ0IiwidGljayIsImVuZCIpLGM9WzEsMV0sdT0uOSxmPVRhLGg9QWEscD0tMzAsZD1NYSxnPS4xLHY9LjY0LG09W10seT1bXTtmdW5jdGlvbiB4KHQpe3JldHVybiBmdW5jdGlvbihlLHIsbixpKXtpZihlLnBvaW50IT09dCl7dmFyIGE9ZS5jeC10Lngsbz1lLmN5LXQueSxzPWktcixsPWEqYStvKm87aWYocypzL3Y8bCl7aWYobDxkKXt2YXIgYz1lLmNoYXJnZS9sO3QucHgtPWEqYyx0LnB5LT1vKmN9cmV0dXJuITB9aWYoZS5wb2ludCYmbCYmbDxkKXtjPWUucG9pbnRDaGFyZ2UvbDt0LnB4LT1hKmMsdC5weS09bypjfX1yZXR1cm4hZS5jaGFyZ2V9fWZ1bmN0aW9uIGIoZSl7ZS5weD10LmV2ZW50LngsZS5weT10LmV2ZW50Lnkscy5yZXN1bWUoKX1yZXR1cm4gcy50aWNrPWZ1bmN0aW9uKCl7aWYoKG4qPS45OSk8LjAwNSlyZXR1cm4gZT1udWxsLGwuZW5kKHt0eXBlOiJlbmQiLGFscGhhOm49MH0pLCEwO3ZhciByLHMsZixoLGQsdixiLF8sdyxrPW0ubGVuZ3RoLFQ9eS5sZW5ndGg7Zm9yKHM9MDtzPFQ7KytzKWg9KGY9eVtzXSkuc291cmNlLCh2PShfPShkPWYudGFyZ2V0KS54LWgueCkqXysodz1kLnktaC55KSp3KSYmKF8qPXY9biphW3NdKigodj1NYXRoLnNxcnQodikpLWlbc10pL3Ysdyo9dixkLngtPV8qKGI9aC53ZWlnaHQrZC53ZWlnaHQ/aC53ZWlnaHQvKGgud2VpZ2h0K2Qud2VpZ2h0KTouNSksZC55LT13KmIsaC54Kz1fKihiPTEtYiksaC55Kz13KmIpO2lmKChiPW4qZykmJihfPWNbMF0vMix3PWNbMV0vMixzPS0xLGIpKWZvcig7KytzPGs7KShmPW1bc10pLngrPShfLWYueCkqYixmLnkrPSh3LWYueSkqYjtpZihwKWZvcighZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPTA7ZS5jaGFyZ2U9MDtpZighZS5sZWFmKWZvcih2YXIgbyxzPWUubm9kZXMsbD1zLmxlbmd0aCxjPS0xOysrYzxsOyludWxsIT0obz1zW2NdKSYmKHQobyxyLG4pLGUuY2hhcmdlKz1vLmNoYXJnZSxpKz1vLmNoYXJnZSpvLmN4LGErPW8uY2hhcmdlKm8uY3kpO2lmKGUucG9pbnQpe2UubGVhZnx8KGUucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxlLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PXIqbltlLnBvaW50LmluZGV4XTtlLmNoYXJnZSs9ZS5wb2ludENoYXJnZT11LGkrPXUqZS5wb2ludC54LGErPXUqZS5wb2ludC55fWUuY3g9aS9lLmNoYXJnZTtlLmN5PWEvZS5jaGFyZ2V9KHI9dC5nZW9tLnF1YWR0cmVlKG0pLG4sbykscz0tMTsrK3M8azspKGY9bVtzXSkuZml4ZWR8fHIudmlzaXQoeChmKSk7Zm9yKHM9LTE7KytzPGs7KShmPW1bc10pLmZpeGVkPyhmLng9Zi5weCxmLnk9Zi5weSk6KGYueC09KGYucHgtKGYucHg9Zi54KSkqdSxmLnktPShmLnB5LShmLnB5PWYueSkpKnUpO2wudGljayh7dHlwZToidGljayIsYWxwaGE6bn0pfSxzLm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXQscyk6bX0scy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10LHMpOnl9LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHMpOmN9LHMubGlua0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3Qscyk6Zn0scy5kaXN0YW5jZT1zLmxpbmtEaXN0YW5jZSxzLmxpbmtTdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LHMpOmh9LHMuZnJpY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qscyk6dX0scy5jaGFyZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxzKTpwfSxzLmNoYXJnZURpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQqdCxzKTpNYXRoLnNxcnQoZCl9LHMuZ3Jhdml0eT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rdCxzKTpnfSxzLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQqdCxzKTpNYXRoLnNxcnQodil9LHMuYWxwaGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3Qsbj90PjA/bj10OihlLmM9bnVsbCxlLnQ9TmFOLGU9bnVsbCxsLmVuZCh7dHlwZToiZW5kIixhbHBoYTpuPTB9KSk6dD4wJiYobC5zdGFydCh7dHlwZToic3RhcnQiLGFscGhhOm49dH0pLGU9VGUocy50aWNrKSkscyk6bn0scy5zdGFydD1mdW5jdGlvbigpe3ZhciB0LGUscixuPW0ubGVuZ3RoLGw9eS5sZW5ndGgsdT1jWzBdLGQ9Y1sxXTtmb3IodD0wO3Q8bjsrK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7dDxsOysrdCkibnVtYmVyIj09dHlwZW9mKHI9eVt0XSkuc291cmNlJiYoci5zb3VyY2U9bVtyLnNvdXJjZV0pLCJudW1iZXIiPT10eXBlb2Ygci50YXJnZXQmJihyLnRhcmdldD1tW3IudGFyZ2V0XSksKytyLnNvdXJjZS53ZWlnaHQsKytyLnRhcmdldC53ZWlnaHQ7Zm9yKHQ9MDt0PG47Kyt0KXI9bVt0XSxpc05hTihyLngpJiYoci54PWcoIngiLHUpKSxpc05hTihyLnkpJiYoci55PWcoInkiLGQpKSxpc05hTihyLnB4KSYmKHIucHg9ci54KSxpc05hTihyLnB5KSYmKHIucHk9ci55KTtpZihpPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBmKWZvcih0PTA7dDxsOysrdClpW3RdPStmLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PGw7Kyt0KWlbdF09ZjtpZihhPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBoKWZvcih0PTA7dDxsOysrdClhW3RdPStoLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PGw7Kyt0KWFbdF09aDtpZihvPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBwKWZvcih0PTA7dDxuOysrdClvW3RdPStwLmNhbGwodGhpcyxtW3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PG47Kyt0KW9bdF09cDtmdW5jdGlvbiBnKHIsaSl7aWYoIWUpe2ZvcihlPW5ldyBBcnJheShuKSxjPTA7YzxuOysrYyllW2NdPVtdO2ZvcihjPTA7YzxsOysrYyl7dmFyIGE9eVtjXTtlW2Euc291cmNlLmluZGV4XS5wdXNoKGEudGFyZ2V0KSxlW2EudGFyZ2V0LmluZGV4XS5wdXNoKGEuc291cmNlKX19Zm9yKHZhciBvLHM9ZVt0XSxjPS0xLHU9cy5sZW5ndGg7KytjPHU7KWlmKCFpc05hTihvPXNbY11bcl0pKXJldHVybiBvO3JldHVybiBNYXRoLnJhbmRvbSgpKml9cmV0dXJuIHMucmVzdW1lKCl9LHMucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHMuYWxwaGEoLjEpfSxzLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSgwKX0scy5kcmFnPWZ1bmN0aW9uKCl7aWYocnx8KHI9dC5iZWhhdmlvci5kcmFnKCkub3JpZ2luKHopLm9uKCJkcmFnc3RhcnQuZm9yY2UiLGJhKS5vbigiZHJhZy5mb3JjZSIsYikub24oImRyYWdlbmQuZm9yY2UiLF9hKSksIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7dGhpcy5vbigibW91c2VvdmVyLmZvcmNlIix3YSkub24oIm1vdXNlb3V0LmZvcmNlIixrYSkuY2FsbChyKX0sdC5yZWJpbmQocyxsLCJvbiIpfTt2YXIgVGE9MjAsQWE9MSxNYT0xLzA7ZnVuY3Rpb24gU2EoZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLCJzb3J0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIpLGUubm9kZXM9ZSxlLmxpbmtzPUlhLGV9ZnVuY3Rpb24gRWEodCxlKXtmb3IodmFyIHI9W3RdO251bGwhPSh0PXIucG9wKCkpOylpZihlKHQpLChpPXQuY2hpbGRyZW4pJiYobj1pLmxlbmd0aCkpZm9yKHZhciBuLGk7LS1uPj0wOylyLnB1c2goaVtuXSl9ZnVuY3Rpb24gQ2EodCxlKXtmb3IodmFyIHI9W3RdLG49W107bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKG4ucHVzaCh0KSwoYT10LmNoaWxkcmVuKSYmKGk9YS5sZW5ndGgpKWZvcih2YXIgaSxhLG89LTE7KytvPGk7KXIucHVzaChhW29dKTtmb3IoO251bGwhPSh0PW4ucG9wKCkpOyllKHQpfWZ1bmN0aW9uIExhKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHphKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIE9hKHQsZSl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBJYShlKXtyZXR1cm4gdC5tZXJnZShlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC5jaGlsZHJlbnx8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnQsdGFyZ2V0OmV9fSl9KSl9dC5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7dmFyIHQ9T2EsZT1MYSxyPXphO2Z1bmN0aW9uIG4oaSl7dmFyIGEsbz1baV0scz1bXTtmb3IoaS5kZXB0aD0wO251bGwhPShhPW8ucG9wKCkpOylpZihzLnB1c2goYSksKGM9ZS5jYWxsKG4sYSxhLmRlcHRoKSkmJihsPWMubGVuZ3RoKSl7Zm9yKHZhciBsLGMsdTstLWw+PTA7KW8ucHVzaCh1PWNbbF0pLHUucGFyZW50PWEsdS5kZXB0aD1hLmRlcHRoKzE7ciYmKGEudmFsdWU9MCksYS5jaGlsZHJlbj1jfWVsc2UgciYmKGEudmFsdWU9K3IuY2FsbChuLGEsYS5kZXB0aCl8fDApLGRlbGV0ZSBhLmNoaWxkcmVuO3JldHVybiBDYShpLGZ1bmN0aW9uKGUpe3ZhciBuLGk7dCYmKG49ZS5jaGlsZHJlbikmJm4uc29ydCh0KSxyJiYoaT1lLnBhcmVudCkmJihpLnZhbHVlKz1lLnZhbHVlKX0pLHN9cmV0dXJuIG4uc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiByJiYoRWEodCxmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiYodC52YWx1ZT0wKX0pLENhKHQsZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQudmFsdWU9K3IuY2FsbChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUudmFsdWUrPXQudmFsdWUpfSkpLHR9LG59LHQubGF5b3V0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLHI9WzEsMV07ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWUuY2FsbCh0aGlzLHQsbik7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtpZihlLng9cixlLnk9ZS5kZXB0aCppLGUuZHg9bixlLmR5PWksYSYmKG89YS5sZW5ndGgpKXt2YXIgbyxzLGwsYz0tMTtmb3Iobj1lLnZhbHVlP24vZS52YWx1ZTowOysrYzxvOyl0KHM9YVtjXSxyLGw9cy52YWx1ZSpuLGkpLHIrPWx9fShpWzBdLDAsclswXSxyWzFdL2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPTA7aWYociYmKGk9ci5sZW5ndGgpKWZvcih2YXIgaSxhPS0xOysrYTxpOyluPU1hdGgubWF4KG4sdChyW2FdKSk7cmV0dXJuIDErbn0oaVswXSkpLGl9cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LFNhKG4sZSl9LHQubGF5b3V0LnBpZT1mdW5jdGlvbigpe3ZhciBlPU51bWJlcixyPURhLG49MCxpPU10LGE9MDtmdW5jdGlvbiBvKHMpe3ZhciBsLGM9cy5sZW5ndGgsdT1zLm1hcChmdW5jdGlvbih0LHIpe3JldHVybitlLmNhbGwobyx0LHIpfSksZj0rKCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLGg9KCJmdW5jdGlvbiI9PXR5cGVvZiBpP2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOmkpLWYscD1NYXRoLm1pbihNYXRoLmFicyhoKS9jLCsoImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YSkpLGQ9cCooaDwwPy0xOjEpLGc9dC5zdW0odSksdj1nPyhoLWMqZCkvZzowLG09dC5yYW5nZShjKSx5PVtdO3JldHVybiBudWxsIT1yJiZtLnNvcnQocj09PURhP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHVbZV0tdVt0XX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihzW3RdLHNbZV0pfSksbS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3lbdF09e2RhdGE6c1t0XSx2YWx1ZTpsPXVbdF0sc3RhcnRBbmdsZTpmLGVuZEFuZ2xlOmYrPWwqditkLHBhZEFuZ2xlOnB9fSkseX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG8pOnJ9LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvKTppfSxvLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbyk6YX0sb307dmFyIERhPXt9O2Z1bmN0aW9uIFBhKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gUmEodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBGYSh0LGUscil7dC55MD1lLHQueT1yfXQubGF5b3V0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIGU9eixyPWphLG49VmEsaT1GYSxhPVBhLG89UmE7ZnVuY3Rpb24gcyhsLGMpe2lmKCEocD1sLmxlbmd0aCkpcmV0dXJuIGw7dmFyIHU9bC5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5jYWxsKHMsdCxyKX0pLGY9dS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2EuY2FsbChzLHQsZSksby5jYWxsKHMsdCxlKV19KX0pLGg9ci5jYWxsKHMsZixjKTt1PXQucGVybXV0ZSh1LGgpLGY9dC5wZXJtdXRlKGYsaCk7dmFyIHAsZCxnLHYsbT1uLmNhbGwocyxmLGMpLHk9dVswXS5sZW5ndGg7Zm9yKGc9MDtnPHk7KytnKWZvcihpLmNhbGwocyx1WzBdW2ddLHY9bVtnXSxmWzBdW2ddWzFdKSxkPTE7ZDxwOysrZClpLmNhbGwocyx1W2RdW2ddLHYrPWZbZC0xXVtnXVsxXSxmW2RdW2ddWzFdKTtyZXR1cm4gbH1yZXR1cm4gcy52YWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QmEuZ2V0KHQpfHxqYSxzKTpyfSxzLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hLmdldCh0KXx8VmEscyk6bn0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30scy5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKTppfSxzfTt2YXIgQmE9dC5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1lLm1hcChVYSksbz1lLm1hcChxYSkscz10LnJhbmdlKGkpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYVt0XS1hW2VdfSksbD0wLGM9MCx1PVtdLGY9W107Zm9yKHI9MDtyPGk7KytyKW49c1tyXSxsPGM/KGwrPW9bbl0sdS5wdXNoKG4pKTooYys9b1tuXSxmLnB1c2gobikpO3JldHVybiBmLnJldmVyc2UoKS5jb25jYXQodSl9LHJldmVyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpLnJldmVyc2UoKX0sZGVmYXVsdDpqYX0pLE5hPXQubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz1bXSxzPTAsbD1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtuPnMmJihzPW4pLG8ucHVzaChuKX1mb3Iocj0wO3I8YTsrK3IpbFtyXT0ocy1vW3JdKS8yO3JldHVybiBsfSx3aWdnbGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHU9dC5sZW5ndGgsZj10WzBdLGg9Zi5sZW5ndGgscD1bXTtmb3IocFswXT1sPWM9MCxyPTE7cjxoOysrcil7Zm9yKGU9MCxpPTA7ZTx1OysrZSlpKz10W2VdW3JdWzFdO2ZvcihlPTAsYT0wLHM9ZltyXVswXS1mW3ItMV1bMF07ZTx1OysrZSl7Zm9yKG49MCxvPSh0W2VdW3JdWzFdLXRbZV1bci0xXVsxXSkvKDIqcyk7bjxlOysrbilvKz0odFtuXVtyXVsxXS10W25dW3ItMV1bMV0pL3M7YSs9byp0W2VdW3JdWzFdfXBbcl09bC09aT9hL2kqczowLGw8YyYmKGM9bCl9Zm9yKHI9MDtyPGg7KytyKXBbcl0tPWM7cmV0dXJuIHB9LGV4cGFuZDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPXRbMF0ubGVuZ3RoLG89MS9pLHM9W107Zm9yKHI9MDtyPGE7KytyKXtmb3IoZT0wLG49MDtlPGk7ZSsrKW4rPXRbZV1bcl1bMV07aWYobilmb3IoZT0wO2U8aTtlKyspdFtlXVtyXVsxXS89bjtlbHNlIGZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdPW99Zm9yKHI9MDtyPGE7KytyKXNbcl09MDtyZXR1cm4gc30semVybzpWYX0pO2Z1bmN0aW9uIGphKGUpe3JldHVybiB0LnJhbmdlKGUubGVuZ3RoKX1mdW5jdGlvbiBWYSh0KXtmb3IodmFyIGU9LTEscj10WzBdLmxlbmd0aCxuPVtdOysrZTxyOyluW2VdPTA7cmV0dXJuIG59ZnVuY3Rpb24gVWEodCl7Zm9yKHZhciBlLHI9MSxuPTAsaT10WzBdWzFdLGE9dC5sZW5ndGg7cjxhOysrcikoZT10W3JdWzFdKT5pJiYobj1yLGk9ZSk7cmV0dXJuIG59ZnVuY3Rpb24gcWEodCl7cmV0dXJuIHQucmVkdWNlKEhhLDApfWZ1bmN0aW9uIEhhKHQsZSl7cmV0dXJuIHQrZVsxXX1mdW5jdGlvbiBHYSh0LGUpe3JldHVybiBZYSh0LE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIrMSkpfWZ1bmN0aW9uIFlhKHQsZSl7Zm9yKHZhciByPS0xLG49K3RbMF0saT0odFsxXS1uKS9lLGE9W107KytyPD1lOylhW3JdPWkqcituO3JldHVybiBhfWZ1bmN0aW9uIFdhKGUpe3JldHVyblt0Lm1pbihlKSx0Lm1heChlKV19ZnVuY3Rpb24gWGEodCxlKXtyZXR1cm4gdC52YWx1ZS1lLnZhbHVlfWZ1bmN0aW9uIFphKHQsZSl7dmFyIHI9dC5fcGFja19uZXh0O3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10LGUuX3BhY2tfbmV4dD1yLHIuX3BhY2tfcHJldj1lfWZ1bmN0aW9uICRhKHQsZSl7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXR9ZnVuY3Rpb24gSmEodCxlKXt2YXIgcj1lLngtdC54LG49ZS55LXQueSxpPXQucitlLnI7cmV0dXJuLjk5OSppKmk+cipyK24qbn1mdW5jdGlvbiBLYSh0KXtpZigoZT10LmNoaWxkcmVuKSYmKGw9ZS5sZW5ndGgpKXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MS8wLHU9LTEvMCxmPTEvMCxoPS0xLzA7aWYoZS5mb3JFYWNoKFFhKSwocj1lWzBdKS54PS1yLnIsci55PTAseChyKSxsPjEmJigobj1lWzFdKS54PW4ucixuLnk9MCx4KG4pLGw+MikpZm9yKGVvKHIsbixpPWVbMl0pLHgoaSksWmEocixpKSxyLl9wYWNrX3ByZXY9aSxaYShpLG4pLG49ci5fcGFja19uZXh0LGE9MzthPGw7YSsrKXtlbyhyLG4saT1lW2FdKTt2YXIgcD0wLGQ9MSxnPTE7Zm9yKG89bi5fcGFja19uZXh0O28hPT1uO289by5fcGFja19uZXh0LGQrKylpZihKYShvLGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3Iocz1yLl9wYWNrX3ByZXY7cyE9PW8uX3BhY2tfcHJldiYmIUphKHMsaSk7cz1zLl9wYWNrX3ByZXYsZysrKTtwPyhkPGd8fGQ9PWcmJm4ucjxyLnI/JGEocixuPW8pOiRhKHI9cyxuKSxhLS0pOihaYShyLGkpLG49aSx4KGkpKX12YXIgdj0oYyt1KS8yLG09KGYraCkvMix5PTA7Zm9yKGE9MDthPGw7YSsrKShpPWVbYV0pLngtPXYsaS55LT1tLHk9TWF0aC5tYXgoeSxpLnIrTWF0aC5zcXJ0KGkueCppLngraS55KmkueSkpO3Qucj15LGUuZm9yRWFjaCh0byl9ZnVuY3Rpb24geCh0KXtjPU1hdGgubWluKHQueC10LnIsYyksdT1NYXRoLm1heCh0LngrdC5yLHUpLGY9TWF0aC5taW4odC55LXQucixmKSxoPU1hdGgubWF4KHQueSt0LnIsaCl9fWZ1bmN0aW9uIFFhKHQpe3QuX3BhY2tfbmV4dD10Ll9wYWNrX3ByZXY9dH1mdW5jdGlvbiB0byh0KXtkZWxldGUgdC5fcGFja19uZXh0LGRlbGV0ZSB0Ll9wYWNrX3ByZXZ9ZnVuY3Rpb24gZW8odCxlLHIpe3ZhciBuPXQucityLnIsaT1lLngtdC54LGE9ZS55LXQueTtpZihuJiYoaXx8YSkpe3ZhciBvPWUucityLnIscz1pKmkrYSphLGw9LjUrKChuKj1uKS0obyo9bykpLygyKnMpLGM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihuK3MpLShuLT1zKSpuLW8qbykpLygyKnMpO3IueD10LngrbCppK2MqYSxyLnk9dC55K2wqYS1jKml9ZWxzZSByLng9dC54K24sci55PXQueX1mdW5jdGlvbiBybyh0LGUpe3JldHVybiB0LnBhcmVudD09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIG5vKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGUubGVuZ3RoP2VbMF06dC50fWZ1bmN0aW9uIGlvKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4oZT1yLmxlbmd0aCk/cltlLTFdOnQudH1mdW5jdGlvbiBhbyh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBvbyh0LGUscil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6cn1mdW5jdGlvbiBzbyh0KXtyZXR1cm57eDp0LngseTp0LnksZHg6dC5keCxkeTp0LmR5fX1mdW5jdGlvbiBsbyh0LGUpe3ZhciByPXQueCtlWzNdLG49dC55K2VbMF0saT10LmR4LWVbMV0tZVszXSxhPXQuZHktZVswXS1lWzJdO3JldHVybiBpPDAmJihyKz1pLzIsaT0wKSxhPDAmJihuKz1hLzIsYT0wKSx7eDpyLHk6bixkeDppLGR5OmF9fWZ1bmN0aW9uIGNvKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBlPHI/W2Uscl06W3IsZV19ZnVuY3Rpb24gdW8odCl7cmV0dXJuIHQucmFuZ2VFeHRlbnQ/dC5yYW5nZUV4dGVudCgpOmNvKHQucmFuZ2UoKSl9ZnVuY3Rpb24gZm8odCxlLHIsbil7dmFyIGk9cih0WzBdLHRbMV0pLGE9bihlWzBdLGVbMV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gaG8odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aC0xLGE9dFtuXSxvPXRbaV07cmV0dXJuIG88YSYmKHI9bixuPWksaT1yLHI9YSxhPW8sbz1yKSx0W25dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBwbyh0KXtyZXR1cm4gdD97Zmxvb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90KSp0fSxjZWlsOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZS90KSp0fX06Z299dC5sYXlvdXQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIGU9ITAscj1OdW1iZXIsbj1XYSxpPUdhO2Z1bmN0aW9uIGEoYSxvKXtmb3IodmFyIHMsbCxjPVtdLHU9YS5tYXAocix0aGlzKSxmPW4uY2FsbCh0aGlzLHUsbyksaD1pLmNhbGwodGhpcyxmLHUsbykscD0obz0tMSx1Lmxlbmd0aCksZD1oLmxlbmd0aC0xLGc9ZT8xOjEvcDsrK288ZDspKHM9Y1tvXT1bXSkuZHg9aFtvKzFdLShzLng9aFtvXSkscy55PTA7aWYoZD4wKWZvcihvPS0xOysrbzxwOykobD11W29dKT49ZlswXSYmbDw9ZlsxXSYmKChzPWNbdC5iaXNlY3QoaCxsLDEsZCktMV0pLnkrPWcscy5wdXNoKGFbb10pKTtyZXR1cm4gY31yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dmUodCksYSk6bn0sYS5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJudW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihlKXtyZXR1cm4gWWEoZSx0KX06dmUodCksYSk6aX0sYS5mcmVxdWVuY3k9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LGEpOmV9LGF9LHQubGF5b3V0LnBhY2s9ZnVuY3Rpb24oKXt2YXIgZSxyPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQoWGEpLG49MCxpPVsxLDFdO2Z1bmN0aW9uIGEodCxhKXt2YXIgbz1yLmNhbGwodGhpcyx0LGEpLHM9b1swXSxsPWlbMF0sYz1pWzFdLHU9bnVsbD09ZT9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTtpZihzLng9cy55PTAsQ2EocyxmdW5jdGlvbih0KXt0LnI9K3UodC52YWx1ZSl9KSxDYShzLEthKSxuKXt2YXIgZj1uKihlPzE6TWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSkvMjtDYShzLGZ1bmN0aW9uKHQpe3Qucis9Zn0pLENhKHMsS2EpLENhKHMsZnVuY3Rpb24odCl7dC5yLT1mfSl9cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtlLng9cis9aSplLng7ZS55PW4rPWkqZS55O2Uucio9aTtpZihhKWZvcih2YXIgbz0tMSxzPWEubGVuZ3RoOysrbzxzOyl0KGFbb10scixuLGkpfShzLGwvMixjLzIsZT8xOjEvTWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSksb31yZXR1cm4gYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsYSk6aX0sYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxhKTplfSxhLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsYSk6bn0sU2EoYSxyKX0sdC5sYXlvdXQudHJlZT1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1ybyxuPVsxLDFdLGk9bnVsbDtmdW5jdGlvbiBhKHQsYSl7dmFyIGM9ZS5jYWxsKHRoaXMsdCxhKSx1PWNbMF0sZj1mdW5jdGlvbih0KXt2YXIgZSxyPXtBOm51bGwsY2hpbGRyZW46W3RdfSxuPVtyXTtmb3IoO251bGwhPShlPW4ucG9wKCkpOylmb3IodmFyIGksYT1lLmNoaWxkcmVuLG89MCxzPWEubGVuZ3RoO288czsrK28pbi5wdXNoKChhW29dPWk9e186YVtvXSxwYXJlbnQ6ZSxjaGlsZHJlbjooaT1hW29dLmNoaWxkcmVuKSYmaS5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT1pKTtyZXR1cm4gci5jaGlsZHJlblswXX0odSk7aWYoQ2EoZixvKSxmLnBhcmVudC5tPS1mLnosRWEoZixzKSxpKUVhKHUsbCk7ZWxzZXt2YXIgaD11LHA9dSxkPXU7RWEodSxmdW5jdGlvbih0KXt0Lng8aC54JiYoaD10KSx0Lng+cC54JiYocD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSk7dmFyIGc9cihoLHApLzItaC54LHY9blswXS8ocC54K3IocCxoKS8yK2cpLG09blsxXS8oZC5kZXB0aHx8MSk7RWEodSxmdW5jdGlvbih0KXt0Lng9KHQueCtnKSp2LHQueT10LmRlcHRoKm19KX1yZXR1cm4gY31mdW5jdGlvbiBvKHQpe3ZhciBlPXQuY2hpbGRyZW4sbj10LnBhcmVudC5jaGlsZHJlbixpPXQuaT9uW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXshZnVuY3Rpb24odCl7dmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDtmb3IoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfSh0KTt2YXIgYT0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K3IodC5fLGkuXyksdC5tPXQuei1hKTp0Lno9YX1lbHNlIGkmJih0Lno9aS56K3IodC5fLGkuXykpO3QucGFyZW50LkE9ZnVuY3Rpb24odCxlLG4pe2lmKGUpe2Zvcih2YXIgaSxhPXQsbz10LHM9ZSxsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGY9cy5tLGg9bC5tO3M9aW8ocyksYT1ubyhhKSxzJiZhOylsPW5vKGwpLChvPWlvKG8pKS5hPXQsKGk9cy56K2YtYS56LWMrcihzLl8sYS5fKSk+MCYmKGFvKG9vKHMsdCxuKSx0LGkpLGMrPWksdSs9aSksZis9cy5tLGMrPWEubSxoKz1sLm0sdSs9by5tO3MmJiFpbyhvKSYmKG8udD1zLG8ubSs9Zi11KSxhJiYhbm8obCkmJihsLnQ9YSxsLm0rPWMtaCxuPXQpfXJldHVybiBufSh0LGksdC5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gcyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gbCh0KXt0LngqPW5bMF0sdC55PXQuZGVwdGgqblsxXX1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP2w6bnVsbCxhKTppP251bGw6bn0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9udWxsOmwsYSk6aT9uOm51bGx9LFNhKGEsZSl9LHQubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgZT10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9cm8sbj1bMSwxXSxpPSExO2Z1bmN0aW9uIGEoYSxvKXt2YXIgcyxsPWUuY2FsbCh0aGlzLGEsbyksYz1sWzBdLHU9MDtDYShjLGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47biYmbi5sZW5ndGg/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLnh9LDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIDErdC5tYXgoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC55fSl9KG4pKTooZS54PXM/dSs9cihlLHMpOjAsZS55PTAscz1lKX0pO3ZhciBmPWZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbjtyZXR1cm4gciYmci5sZW5ndGg/dChyWzBdKTplfShjKSxoPWZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLmNoaWxkcmVuO3JldHVybiBuJiYocj1uLmxlbmd0aCk/dChuW3ItMV0pOmV9KGMpLHA9Zi54LXIoZixoKS8yLGQ9aC54K3IoaCxmKS8yO3JldHVybiBDYShjLGk/ZnVuY3Rpb24odCl7dC54PSh0LngtYy54KSpuWzBdLHQueT0oYy55LXQueSkqblsxXX06ZnVuY3Rpb24odCl7dC54PSh0LngtcCkvKGQtcCkqblswXSx0Lnk9KDEtKGMueT90LnkvYy55OjEpKSpuWzFdfSksbH1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShuPXQpLGEpOmk/bjpudWxsfSxTYShhLGUpfSx0LmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKSxuPU1hdGgucm91bmQsaT1bMSwxXSxhPW51bGwsbz1zbyxzPSExLGw9InNxdWFyaWZ5IixjPS41KigxK01hdGguc3FydCg1KSk7ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspbj0ocj10W2ldKS52YWx1ZSooZTwwPzA6ZSksci5hcmVhPWlzTmFOKG4pfHxuPD0wPzA6bn1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG4saSxhPW8odCkscz1bXSxjPWUuc2xpY2UoKSxoPTEvMCxnPSJzbGljZSI9PT1sP2EuZHg6ImRpY2UiPT09bD9hLmR5OiJzbGljZS1kaWNlIj09PWw/MSZ0LmRlcHRoP2EuZHk6YS5keDpNYXRoLm1pbihhLmR4LGEuZHkpO2Zvcih1KGMsYS5keCphLmR5L3QudmFsdWUpLHMuYXJlYT0wOyhpPWMubGVuZ3RoKT4wOylzLnB1c2gocj1jW2ktMV0pLHMuYXJlYSs9ci5hcmVhLCJzcXVhcmlmeSIhPT1sfHwobj1wKHMsZykpPD1oPyhjLnBvcCgpLGg9bik6KHMuYXJlYS09cy5wb3AoKS5hcmVhLGQocyxnLGEsITEpLGc9TWF0aC5taW4oYS5keCxhLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxoPTEvMCk7cy5sZW5ndGgmJihkKHMsZyxhLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksZS5mb3JFYWNoKGYpfX1mdW5jdGlvbiBoKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG49byh0KSxpPWUuc2xpY2UoKSxhPVtdO2Zvcih1KGksbi5keCpuLmR5L3QudmFsdWUpLGEuYXJlYT0wO3I9aS5wb3AoKTspYS5wdXNoKHIpLGEuYXJlYSs9ci5hcmVhLG51bGwhPXIueiYmKGQoYSxyLno/bi5keDpuLmR5LG4sIWkubGVuZ3RoKSxhLmxlbmd0aD1hLmFyZWE9MCk7ZS5mb3JFYWNoKGgpfX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxhPTEvMCxvPS0xLHM9dC5sZW5ndGg7KytvPHM7KShyPXRbb10uYXJlYSkmJihyPGEmJihhPXIpLHI+aSYmKGk9cikpO3JldHVybiBlKj1lLChuKj1uKT9NYXRoLm1heChlKmkqYy9uLG4vKGUqYSpjKSk6MS8wfWZ1bmN0aW9uIGQodCxlLHIsaSl7dmFyIGEsbz0tMSxzPXQubGVuZ3RoLGw9ci54LGM9ci55LHU9ZT9uKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2ZvcigoaXx8dT5yLmR5KSYmKHU9ci5keSk7KytvPHM7KShhPXRbb10pLng9bCxhLnk9YyxhLmR5PXUsbCs9YS5keD1NYXRoLm1pbihyLngrci5keC1sLHU/bihhLmFyZWEvdSk6MCk7YS56PSEwLGEuZHgrPXIueCtyLmR4LWwsci55Kz11LHIuZHktPXV9ZWxzZXtmb3IoKGl8fHU+ci5keCkmJih1PXIuZHgpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keD11LGMrPWEuZHk9TWF0aC5taW4oci55K3IuZHktYyx1P24oYS5hcmVhL3UpOjApO2Euej0hMSxhLmR5Kz1yLnkrci5keS1jLHIueCs9dSxyLmR4LT11fX1mdW5jdGlvbiBnKHQpe3ZhciBuPWV8fHIodCksYT1uWzBdO3JldHVybiBhLng9YS55PTAsYS52YWx1ZT8oYS5keD1pWzBdLGEuZHk9aVsxXSk6YS5keD1hLmR5PTAsZSYmci5yZXZhbHVlKGEpLHUoW2FdLGEuZHgqYS5keS9hLnZhbHVlKSwoZT9oOmYpKGEpLHMmJihlPW4pLG59cmV0dXJuIGcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGcpOml9LGcucGFkZGluZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYTtmdW5jdGlvbiBlKGUpe3JldHVybiBsbyhlLHQpfXZhciByO3JldHVybiBvPW51bGw9PShhPXQpP3NvOiJmdW5jdGlvbiI9PShyPXR5cGVvZiB0KT9mdW5jdGlvbihlKXt2YXIgcj10LmNhbGwoZyxlLGUuZGVwdGgpO3JldHVybiBudWxsPT1yP3NvKGUpOmxvKGUsIm51bWJlciI9PXR5cGVvZiByP1tyLHIscixyXTpyKX06Im51bWJlciI9PT1yPyh0PVt0LHQsdCx0XSxlKTplLGd9LGcucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD9NYXRoLnJvdW5kOk51bWJlcixnKTpuIT1OdW1iZXJ9LGcuc3RpY2t5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZT1udWxsLGcpOnN9LGcucmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxnKTpjfSxnLm1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCsiIixnKTpsfSxTYShnLHIpfSx0LnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcjwyJiYoZT0xKSxyPDEmJih0PTApLGZ1bmN0aW9uKCl7dmFyIHIsbixpO2Rve2k9KHI9MipNYXRoLnJhbmRvbSgpLTEpKnIrKG49MipNYXRoLnJhbmRvbSgpLTEpKm59d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrZSpyKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19LGxvZ05vcm1hbDpmdW5jdGlvbigpe3ZhciBlPXQucmFuZG9tLm5vcm1hbC5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGUoKSl9fSxiYXRlczpmdW5jdGlvbihlKXt2YXIgcj10LnJhbmRvbS5pcndpbkhhbGwoZSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9lfX0saXJ3aW5IYWxsOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MDtyPHQ7cisrKWUrPU1hdGgucmFuZG9tKCk7cmV0dXJuIGV9fX0sdC5zY2FsZT17fTt2YXIgZ289e2Zsb29yOnosY2VpbDp6fTtmdW5jdGlvbiB2byhlLHIsbixpKXt2YXIgYT1bXSxvPVtdLHM9MCxsPU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKS0xO2ZvcihlW2xdPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCkscj1yLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8PWw7KWEucHVzaChuKGVbcy0xXSxlW3NdKSksby5wdXNoKGkocltzLTFdLHJbc10pKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dC5iaXNlY3QoZSxyLDEsbCktMTtyZXR1cm4gb1tuXShhW25dKHIpKX19ZnVuY3Rpb24gbW8oZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24geW8odCxlKXtyZXR1cm4gaG8odCxwbyh4byh0LGUpWzJdKSksaG8odCxwbyh4byh0LGUpWzJdKSksdH1mdW5jdGlvbiB4byh0LGUpe251bGw9PWUmJihlPTEwKTt2YXIgcj1jbyh0KSxuPXJbMV0tclswXSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobi9lKS9NYXRoLkxOMTApKSxhPWUvbippO3JldHVybiBhPD0uMTU/aSo9MTA6YTw9LjM1P2kqPTU6YTw9Ljc1JiYoaSo9MiksclswXT1NYXRoLmNlaWwoclswXS9pKSppLHJbMV09TWF0aC5mbG9vcihyWzFdL2kpKmkrLjUqaSxyWzJdPWkscn1mdW5jdGlvbiBibyhlLHIpe3JldHVybiB0LnJhbmdlLmFwcGx5KHQseG8oZSxyKSl9ZnVuY3Rpb24gX28oZSxyLG4pe3ZhciBpPXhvKGUscik7aWYobil7dmFyIGE9TGUuZXhlYyhuKTtpZihhLnNoaWZ0KCksInMiPT09YVs4XSl7dmFyIG89dC5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoeShpWzBdKSx5KGlbMV0pKSk7cmV0dXJuIGFbN118fChhWzddPSIuIitrbyhvLnNjYWxlKGlbMl0pKSksYVs4XT0iZiIsbj10LmZvcm1hdChhLmpvaW4oIiIpKSxmdW5jdGlvbih0KXtyZXR1cm4gbihvLnNjYWxlKHQpKStvLnN5bWJvbH19YVs3XXx8KGFbN109Ii4iK2Z1bmN0aW9uKHQsZSl7dmFyIHI9a28oZVsyXSk7cmV0dXJuIHQgaW4gd28/TWF0aC5hYnMoci1rbyhNYXRoLm1heCh5KGVbMF0pLHkoZVsxXSkpKSkrICsoImUiIT09dCk6ci0yKigiJSI9PT10KX0oYVs4XSxpKSksbj1hLmpvaW4oIiIpfWVsc2Ugbj0iLC4iK2tvKGlbMl0pKyJmIjtyZXR1cm4gdC5mb3JtYXQobil9dC5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYSxvO2Z1bmN0aW9uIHMoKXt2YXIgdD1NYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCk+Mj92bzpmbyxzPWk/bWE6dmE7cmV0dXJuIGE9dChlLHIscyxuKSxvPXQocixlLHMsWmkpLGx9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYSh0KX1sLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbyh0KX07bC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAoTnVtYmVyKSxzKCkpOmV9O2wucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxzKCkpOnJ9O2wucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gbC5yYW5nZSh0KS5pbnRlcnBvbGF0ZShjYSl9O2wuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKCkpOml9O2wuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59O2wudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKGUsdCl9O2wudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBfbyhlLHQscil9O2wubmljZT1mdW5jdGlvbih0KXtyZXR1cm4geW8oZSx0KSxzKCl9O2wuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuLGkpfTtyZXR1cm4gcygpfShbMCwxXSxbMCwxXSxaaSwhMSl9O3ZhciB3bz17czoxLGc6MSxwOjEscjoxLGU6MX07ZnVuY3Rpb24ga28odCl7cmV0dXJuLU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKy4wMSl9dC5zY2FsZS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4saSxhKXtmdW5jdGlvbiBvKHQpe3JldHVybihpP01hdGgubG9nKHQ8MD8wOnQpOi1NYXRoLmxvZyh0PjA/MDotdCkpL01hdGgubG9nKG4pfWZ1bmN0aW9uIHModCl7cmV0dXJuIGk/TWF0aC5wb3cobix0KTotTWF0aC5wb3cobiwtdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcihvKHQpKX1sLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gcyhyLmludmVydCh0KSl9O2wuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXRbMF0+PTAsci5kb21haW4oKGE9dC5tYXAoTnVtYmVyKSkubWFwKG8pKSxsKTphfTtsLmJhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3Qsci5kb21haW4oYS5tYXAobykpLGwpOm59O2wubmljZT1mdW5jdGlvbigpe3ZhciB0PWhvKGEubWFwKG8pLGk/TWF0aDpBbyk7cmV0dXJuIHIuZG9tYWluKHQpLGE9dC5tYXAocyksbH07bC50aWNrcz1mdW5jdGlvbigpe3ZhciB0PWNvKGEpLGU9W10scj10WzBdLGw9dFsxXSxjPU1hdGguZmxvb3IobyhyKSksdT1NYXRoLmNlaWwobyhsKSksZj1uJTE/MjpuO2lmKGlzRmluaXRlKHUtYykpe2lmKGkpe2Zvcig7Yzx1O2MrKylmb3IodmFyIGg9MTtoPGY7aCsrKWUucHVzaChzKGMpKmgpO2UucHVzaChzKGMpKX1lbHNlIGZvcihlLnB1c2gocyhjKSk7YysrPHU7KWZvcih2YXIgaD1mLTE7aD4wO2gtLSllLnB1c2gocyhjKSpoKTtmb3IoYz0wO2VbY108cjtjKyspO2Zvcih1PWUubGVuZ3RoO2VbdS0xXT5sO3UtLSk7ZT1lLnNsaWNlKGMsdSl9cmV0dXJuIGV9O2wudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBUbzthcmd1bWVudHMubGVuZ3RoPDI/cj1UbzoiZnVuY3Rpb24iIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpO3ZhciBpPU1hdGgubWF4KDEsbiplL2wudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10L3MoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIGUqbjxuLS41JiYoZSo9biksZTw9aT9yKHQpOiIifX07bC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUoci5jb3B5KCksbixpLGEpfTtyZXR1cm4gbW8obCxyKX0odC5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBUbz10LmZvcm1hdCgiLjBlIiksQW89e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmNlaWwoLXQpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmZsb29yKC10KX19O2Z1bmN0aW9uIE1vKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfX10LnNjYWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT1NbyhyKSxhPU1vKDEvcik7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZShpKHQpKX1vLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gYShlLmludmVydCh0KSl9O28uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbigobj10Lm1hcChOdW1iZXIpKS5tYXAoaSkpLG8pOm59O28udGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKG4sdCl9O28udGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBfbyhuLHQsZSl9O28ubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gby5kb21haW4oeW8obix0KSl9O28uZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9TW8ocj10KSxhPU1vKDEvciksZS5kb21haW4obi5tYXAoaSkpLG8pOnJ9O28uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUuY29weSgpLHIsbil9O3JldHVybiBtbyhvLGUpfSh0LnNjYWxlLmxpbmVhcigpLDEsWzAsMV0pfSx0LnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LHQuc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7dmFyIGksYSxvO2Z1bmN0aW9uIHModCl7cmV0dXJuIGFbKChpLmdldCh0KXx8KCJyYW5nZSI9PT1uLnQ/aS5zZXQodCxyLnB1c2godCkpOk5hTikpLTEpJWEubGVuZ3RoXX1mdW5jdGlvbiBsKGUsbil7cmV0dXJuIHQucmFuZ2Uoci5sZW5ndGgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZStuKnR9KX1zLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjtyPVtdLGk9bmV3IGI7Zm9yKHZhciBlLGE9LTEsbz10Lmxlbmd0aDsrK2E8bzspaS5oYXMoZT10W2FdKXx8aS5zZXQoZSxyLnB1c2goZSkpO3JldHVybiBzW24udF0uYXBwbHkocyxuLmEpfTtzLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbz0wLG49e3Q6InJhbmdlIixhOmFyZ3VtZW50c30scyk6YX07cy5yYW5nZVBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPShpK2MpLzIsMCk6KGMtaSkvKHIubGVuZ3RoLTErZSk7cmV0dXJuIGE9bChpK3UqZS8yLHUpLG89MCxuPXt0OiJyYW5nZVBvaW50cyIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VSb3VuZFBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPWM9TWF0aC5yb3VuZCgoaStjKS8yKSwwKTooYy1pKS8oci5sZW5ndGgtMStlKXwwO3JldHVybiBhPWwoaStNYXRoLnJvdW5kKHUqZS8yKyhjLWktKHIubGVuZ3RoLTErZSkqdSkvMiksdSksbz0wLG49e3Q6InJhbmdlUm91bmRQb2ludHMiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0sZj10WzEtY10saD0oZi11KS8oci5sZW5ndGgtZSsyKmkpO3JldHVybiBhPWwodStoKmksaCksYyYmYS5yZXZlcnNlKCksbz1oKigxLWUpLG49e3Q6InJhbmdlQmFuZHMiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbih0LGUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihpPWUpO3ZhciBjPXRbMV08dFswXSx1PXRbYy0wXSxmPXRbMS1jXSxoPU1hdGguZmxvb3IoKGYtdSkvKHIubGVuZ3RoLWUrMippKSk7cmV0dXJuIGE9bCh1K01hdGgucm91bmQoKGYtdS0oci5sZW5ndGgtZSkqaCkvMiksaCksYyYmYS5yZXZlcnNlKCksbz1NYXRoLnJvdW5kKGgqKDEtZSkpLG49e3Q6InJhbmdlUm91bmRCYW5kcyIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG99O3MucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gY28obi5hWzBdKX07cy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX07cmV0dXJuIHMuZG9tYWluKHIpfShbXSx7dDoicmFuZ2UiLGE6W1tdXX0pfSx0LnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoU28pfSx0LnNjYWxlLmNhdGVnb3J5MjA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoRW8pfSx0LnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKENvKX0sdC5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShMbyl9O3ZhciBTbz1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcChzZSksRW89WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAoc2UpLENvPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcChzZSksTG89WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcChzZSk7ZnVuY3Rpb24gem8oKXtyZXR1cm4gMH10LnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXt2YXIgaTtmdW5jdGlvbiBhKCl7dmFyIGU9MCxhPW4ubGVuZ3RoO2ZvcihpPVtdOysrZTxhOylpW2UtMV09dC5xdWFudGlsZShyLGUvYSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtpZighaXNOYU4oZT0rZSkpcmV0dXJuIG5bdC5iaXNlY3QoaSxlKV19by5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dC5tYXAocCkuZmlsdGVyKGQpLnNvcnQoaCksYSgpKTpyfTtvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSgpKTpufTtvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpfTtvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4odD1uLmluZGV4T2YodCkpPDA/W05hTixOYU5dOlt0PjA/aVt0LTFdOnJbMF0sdDxpLmxlbmd0aD9pW3RdOnJbci5sZW5ndGgtMV1dfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfTtyZXR1cm4gYSgpfShbXSxbXSl9LHQuc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7dmFyIGksYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuW01hdGgubWF4KDAsTWF0aC5taW4oYSxNYXRoLmZsb29yKGkqKHQtZSkpKSldfWZ1bmN0aW9uIHMoKXtyZXR1cm4gaT1uLmxlbmd0aC8oci1lKSxhPW4ubGVuZ3RoLTEsb31vLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0W3QubGVuZ3RoLTFdLHMoKSk6W2Uscl19O28ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59O28uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVyblt0PSh0PW4uaW5kZXhPZih0KSk8MD9OYU46dC9pK2UsdCsxL2ldfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbil9O3JldHVybiBzKCl9KDAsMSxbMCwxXSl9LHQuc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXtmdW5jdGlvbiBpKGUpe2lmKGU8PWUpcmV0dXJuIG5bdC5iaXNlY3QocixlKV19aS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfTtpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn07aS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bi5pbmRleE9mKHQpLFtyW3QtMV0sclt0XV19O2kuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9O3JldHVybiBpfShbLjVdLFswLDFdKX0sdC5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuK3R9ci5pbnZlcnQ9cjtyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKHIpLHIpOmV9O3IudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKGUsdCl9O3IudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBfbyhlLHQscil9O3IuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpfTtyZXR1cm4gcn0oWzAsMV0pfSx0LnN2Zz17fSx0LnN2Zy5hcmM9ZnVuY3Rpb24oKXt2YXIgdD1JbyxlPURvLHI9em8sbj1PbyxpPVBvLGE9Um8sbz1GbztmdW5jdGlvbiBzKCl7dmFyIHM9TWF0aC5tYXgoMCwrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGM9TWF0aC5tYXgoMCwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHU9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktRXQsZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxoPU1hdGguYWJzKGYtdSkscD11PmY/MDoxO2lmKGM8cyYmKGQ9YyxjPXMscz1kKSxoPj1TdClyZXR1cm4gbChjLHApKyhzP2wocywxLXApOiIiKSsiWiI7dmFyIGQsZyx2LG0seSx4LGIsXyx3LGssVCxBLE09MCxTPTAsRT1bXTtpZigobT0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwKS8yKSYmKHY9bj09PU9vP01hdGguc3FydChzKnMrYypjKTorbi5hcHBseSh0aGlzLGFyZ3VtZW50cykscHx8KFMqPS0xKSxjJiYoUz1EdCh2L2MqTWF0aC5zaW4obSkpKSxzJiYoTT1EdCh2L3MqTWF0aC5zaW4obSkpKSksYyl7eT1jKk1hdGguY29zKHUrUykseD1jKk1hdGguc2luKHUrUyksYj1jKk1hdGguY29zKGYtUyksXz1jKk1hdGguc2luKGYtUyk7dmFyIEM9TWF0aC5hYnMoZi11LTIqUyk8PUF0PzA6MTtpZihTJiZCbyh5LHgsYixfKT09PXBeQyl7dmFyIEw9KHUrZikvMjt5PWMqTWF0aC5jb3MoTCkseD1jKk1hdGguc2luKEwpLGI9Xz1udWxsfX1lbHNlIHk9eD0wO2lmKHMpe3c9cypNYXRoLmNvcyhmLU0pLGs9cypNYXRoLnNpbihmLU0pLFQ9cypNYXRoLmNvcyh1K00pLEE9cypNYXRoLnNpbih1K00pO3ZhciB6PU1hdGguYWJzKHUtZisyKk0pPD1BdD8wOjE7aWYoTSYmQm8odyxrLFQsQSk9PT0xLXBeeil7dmFyIE89KHUrZikvMjt3PXMqTWF0aC5jb3MoTyksaz1zKk1hdGguc2luKE8pLFQ9QT1udWxsfX1lbHNlIHc9az0wO2lmKGg+a3QmJihkPU1hdGgubWluKE1hdGguYWJzKGMtcykvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpKT4uMDAxKXtnPXM8Y15wPzA6MTt2YXIgST1kLEQ9ZDtpZihoPEF0KXt2YXIgUD1udWxsPT1UP1t3LGtdOm51bGw9PWI/W3kseF06c2koW3kseF0sW1QsQV0sW2IsX10sW3csa10pLFI9eS1QWzBdLEY9eC1QWzFdLEI9Yi1QWzBdLE49Xy1QWzFdLGo9MS9NYXRoLnNpbihNYXRoLmFjb3MoKFIqQitGKk4pLyhNYXRoLnNxcnQoUipSK0YqRikqTWF0aC5zcXJ0KEIqQitOKk4pKSkvMiksVj1NYXRoLnNxcnQoUFswXSpQWzBdK1BbMV0qUFsxXSk7RD1NYXRoLm1pbihkLChzLVYpLyhqLTEpKSxJPU1hdGgubWluKGQsKGMtVikvKGorMSkpfWlmKG51bGwhPWIpe3ZhciBVPU5vKG51bGw9PVQ/W3csa106W1QsQV0sW3kseF0sYyxJLHApLHE9Tm8oW2IsX10sW3csa10sYyxJLHApO2Q9PT1JP0UucHVzaCgiTSIsVVswXSwiQSIsSSwiLCIsSSwiIDAgMCwiLGcsIiAiLFVbMV0sIkEiLGMsIiwiLGMsIiAwICIsMS1wXkJvKFVbMV1bMF0sVVsxXVsxXSxxWzFdWzBdLHFbMV1bMV0pLCIsIixwLCIgIixxWzFdLCJBIixJLCIsIixJLCIgMCAwLCIsZywiICIscVswXSk6RS5wdXNoKCJNIixVWzBdLCJBIixJLCIsIixJLCIgMCAxLCIsZywiICIscVswXSl9ZWxzZSBFLnB1c2goIk0iLHksIiwiLHgpO2lmKG51bGwhPVQpe3ZhciBIPU5vKFt5LHhdLFtULEFdLHMsLUQscCksRz1ObyhbdyxrXSxudWxsPT1iP1t5LHhdOltiLF9dLHMsLUQscCk7ZD09PUQ/RS5wdXNoKCJMIixHWzBdLCJBIixELCIsIixELCIgMCAwLCIsZywiICIsR1sxXSwiQSIscywiLCIscywiIDAgIixwXkJvKEdbMV1bMF0sR1sxXVsxXSxIWzFdWzBdLEhbMV1bMV0pLCIsIiwxLXAsIiAiLEhbMV0sIkEiLEQsIiwiLEQsIiAwIDAsIixnLCIgIixIWzBdKTpFLnB1c2goIkwiLEdbMF0sIkEiLEQsIiwiLEQsIiAwIDAsIixnLCIgIixIWzBdKX1lbHNlIEUucHVzaCgiTCIsdywiLCIsayl9ZWxzZSBFLnB1c2goIk0iLHksIiwiLHgpLG51bGwhPWImJkUucHVzaCgiQSIsYywiLCIsYywiIDAgIixDLCIsIixwLCIgIixiLCIsIixfKSxFLnB1c2goIkwiLHcsIiwiLGspLG51bGwhPVQmJkUucHVzaCgiQSIscywiLCIscywiIDAgIix6LCIsIiwxLXAsIiAiLFQsIiwiLEEpO3JldHVybiBFLnB1c2goIloiKSxFLmpvaW4oIiIpfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4iTTAsIit0KyJBIit0KyIsIit0KyIgMCAxLCIrZSsiIDAsIistdCsiQSIrdCsiLCIrdCsiIDAgMSwiK2UrIiAwLCIrdH1yZXR1cm4gcy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxzKTp0fSxzLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXZlKHQpLHMpOmV9LHMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXZlKHQpLHMpOnJ9LHMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQ9PU9vP09vOnZlKHQpLHMpOm59LHMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT12ZSh0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXZlKHQpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dmUodCkscyk6b30scy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciByPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixuPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1FdDtyZXR1cm5bTWF0aC5jb3MobikqcixNYXRoLnNpbihuKSpyXX0sc307dmFyIE9vPSJhdXRvIjtmdW5jdGlvbiBJbyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBEbyh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBQbyh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIFJvKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIEZvKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIEJvKHQsZSxyLG4pe3JldHVybih0LXIpKmUtKGUtbikqdD4wPzA6MX1mdW5jdGlvbiBObyh0LGUscixuLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPShpP246LW4pL01hdGguc3FydChhKmErbypvKSxsPXMqbyxjPS1zKmEsdT10WzBdK2wsZj10WzFdK2MsaD1lWzBdK2wscD1lWzFdK2MsZD0odStoKS8yLGc9KGYrcCkvMix2PWgtdSxtPXAtZix5PXYqdittKm0seD1yLW4sYj11KnAtaCpmLF89KG08MD8tMToxKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCx4KngqeS1iKmIpKSx3PShiKm0tdipfKS95LGs9KC1iKnYtbSpfKS95LFQ9KGIqbSt2Kl8pL3ksQT0oLWIqdittKl8pL3ksTT13LWQsUz1rLWcsRT1ULWQsQz1BLWc7cmV0dXJuIE0qTStTKlM+RSpFK0MqQyYmKHc9VCxrPUEpLFtbdy1sLGstY10sW3cqci94LGsqci94XV19ZnVuY3Rpb24gam8odCl7dmFyIGU9ZWkscj1yaSxuPVlyLGk9VW8sYT1pLmtleSxvPS43O2Z1bmN0aW9uIHMoYSl7dmFyIHMsbD1bXSxjPVtdLHU9LTEsZj1hLmxlbmd0aCxoPXZlKGUpLHA9dmUocik7ZnVuY3Rpb24gZCgpe2wucHVzaCgiTSIsaSh0KGMpLG8pKX1mb3IoOysrdTxmOyluLmNhbGwodGhpcyxzPWFbdV0sdSk/Yy5wdXNoKFsraC5jYWxsKHRoaXMscyx1KSwrcC5jYWxsKHRoaXMscyx1KV0pOmMubGVuZ3RoJiYoZCgpLGM9W10pO3JldHVybiBjLmxlbmd0aCYmZCgpLGwubGVuZ3RoP2wuam9pbigiIik6bnVsbH1yZXR1cm4gcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscyk6cn0scy5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscyk6bn0scy5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD9pPXQ6KGk9Vm8uZ2V0KHQpfHxVbykua2V5LHMpOmF9LHMudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHMpOm99LHN9dC5zdmcubGluZT1mdW5jdGlvbigpe3JldHVybiBqbyh6KX07dmFyIFZvPXQubWFwKHtsaW5lYXI6VW8sImxpbmVhci1jbG9zZWQiOnFvLHN0ZXA6ZnVuY3Rpb24odCl7dmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTtmb3IoOysrZTxyOylpLnB1c2goIkgiLChuWzBdKyhuPXRbZV0pWzBdKS8yLCJWIixuWzFdKTtyPjEmJmkucHVzaCgiSCIsblswXSk7cmV0dXJuIGkuam9pbigiIil9LCJzdGVwLWJlZm9yZSI6SG8sInN0ZXAtYWZ0ZXIiOkdvLGJhc2lzOlhvLCJiYXNpcy1vcGVuIjpmdW5jdGlvbih0KXtpZih0Lmxlbmd0aDw0KXJldHVybiBVbyh0KTt2YXIgZSxyPVtdLG49LTEsaT10Lmxlbmd0aCxhPVswXSxvPVswXTtmb3IoOysrbjwzOyllPXRbbl0sYS5wdXNoKGVbMF0pLG8ucHVzaChlWzFdKTtyLnB1c2goWm8oS28sYSkrIiwiK1pvKEtvLG8pKSwtLW47Zm9yKDsrK248aTspZT10W25dLGEuc2hpZnQoKSxhLnB1c2goZVswXSksby5zaGlmdCgpLG8ucHVzaChlWzFdKSxRbyhyLGEsbyk7cmV0dXJuIHIuam9pbigiIil9LCJiYXNpcy1jbG9zZWQiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0tMSxpPXQubGVuZ3RoLGE9aSs0LG89W10scz1bXTtmb3IoOysrbjw0OylyPXRbbiVpXSxvLnB1c2goclswXSkscy5wdXNoKHJbMV0pO2U9W1pvKEtvLG8pLCIsIixabyhLbyxzKV0sLS1uO2Zvcig7KytuPGE7KXI9dFtuJWldLG8uc2hpZnQoKSxvLnB1c2goclswXSkscy5zaGlmdCgpLHMucHVzaChyWzFdKSxRbyhlLG8scyk7cmV0dXJuIGUuam9pbigiIil9LGJ1bmRsZTpmdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLTE7aWYocilmb3IodmFyIG4saSxhPXRbMF1bMF0sbz10WzBdWzFdLHM9dFtyXVswXS1hLGw9dFtyXVsxXS1vLGM9LTE7KytjPD1yOyluPXRbY10saT1jL3IsblswXT1lKm5bMF0rKDEtZSkqKGEraSpzKSxuWzFdPWUqblsxXSsoMS1lKSoobytpKmwpO3JldHVybiBYbyh0KX0sY2FyZGluYWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9Vbyh0KTp0WzBdK1lvKHQsV28odCxlKSl9LCJjYXJkaW5hbC1vcGVuIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDw0P1VvKHQpOnRbMV0rWW8odC5zbGljZSgxLC0xKSxXbyh0LGUpKX0sImNhcmRpbmFsLWNsb3NlZCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9xbyh0KTp0WzBdK1lvKCh0LnB1c2godFswXSksdCksV28oW3RbdC5sZW5ndGgtMl1dLmNvbmNhdCh0LFt0WzFdXSksZSkpfSxtb25vdG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg8Mz9Vbyh0KTp0WzBdK1lvKHQsZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT1bXSxvPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj10Lmxlbmd0aC0xLG49W10saT10WzBdLGE9dFsxXSxvPW5bMF09dHMoaSxhKTtmb3IoOysrZTxyOyluW2VdPShvKyhvPXRzKGk9YSxhPXRbZSsxXSkpKS8yO3JldHVybiBuW2VdPW8sbn0odCkscz0tMSxsPXQubGVuZ3RoLTE7Zm9yKDsrK3M8bDspZT10cyh0W3NdLHRbcysxXSkseShlKTxrdD9vW3NdPW9bcysxXT0wOihyPW9bc10vZSxuPW9bcysxXS9lLChpPXIqcituKm4pPjkmJihpPTMqZS9NYXRoLnNxcnQoaSksb1tzXT1pKnIsb1tzKzFdPWkqbikpO3M9LTE7Zm9yKDsrK3M8PWw7KWk9KHRbTWF0aC5taW4obCxzKzEpXVswXS10W01hdGgubWF4KDAscy0xKV1bMF0pLyg2KigxK29bc10qb1tzXSkpLGEucHVzaChbaXx8MCxvW3NdKml8fDBdKTtyZXR1cm4gYX0odCkpfX0pO2Z1bmN0aW9uIFVvKHQpe3JldHVybiB0Lmxlbmd0aD4xP3Quam9pbigiTCIpOnQrIloifWZ1bmN0aW9uIHFvKHQpe3JldHVybiB0LmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gSG8odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07KytlPHI7KWkucHVzaCgiViIsKG49dFtlXSlbMV0sIkgiLG5bMF0pO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIEdvKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dOysrZTxyOylpLnB1c2goIkgiLChuPXRbZV0pWzBdLCJWIixuWzFdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBZbyh0LGUpe2lmKGUubGVuZ3RoPDF8fHQubGVuZ3RoIT1lLmxlbmd0aCYmdC5sZW5ndGghPWUubGVuZ3RoKzIpcmV0dXJuIFVvKHQpO3ZhciByPXQubGVuZ3RoIT1lLmxlbmd0aCxuPSIiLGk9dFswXSxhPXRbMV0sbz1lWzBdLHM9byxsPTE7aWYociYmKG4rPSJRIisoYVswXS0yKm9bMF0vMykrIiwiKyhhWzFdLTIqb1sxXS8zKSsiLCIrYVswXSsiLCIrYVsxXSxpPXRbMV0sbD0yKSxlLmxlbmd0aD4xKXtzPWVbMV0sYT10W2xdLGwrKyxuKz0iQyIrKGlbMF0rb1swXSkrIiwiKyhpWzFdK29bMV0pKyIsIisoYVswXS1zWzBdKSsiLCIrKGFbMV0tc1sxXSkrIiwiK2FbMF0rIiwiK2FbMV07Zm9yKHZhciBjPTI7YzxlLmxlbmd0aDtjKyssbCsrKWE9dFtsXSxzPWVbY10sbis9IlMiKyhhWzBdLXNbMF0pKyIsIisoYVsxXS1zWzFdKSsiLCIrYVswXSsiLCIrYVsxXX1pZihyKXt2YXIgdT10W2xdO24rPSJRIisoYVswXSsyKnNbMF0vMykrIiwiKyhhWzFdKzIqc1sxXS8zKSsiLCIrdVswXSsiLCIrdVsxXX1yZXR1cm4gbn1mdW5jdGlvbiBXbyh0LGUpe2Zvcih2YXIgcixuPVtdLGk9KDEtZSkvMixhPXRbMF0sbz10WzFdLHM9MSxsPXQubGVuZ3RoOysrczxsOylyPWEsYT1vLG89dFtzXSxuLnB1c2goW2kqKG9bMF0tclswXSksaSoob1sxXS1yWzFdKV0pO3JldHVybiBufWZ1bmN0aW9uIFhvKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIFVvKHQpO3ZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT1uWzBdLGE9blsxXSxvPVtpLGksaSwobj10WzFdKVswXV0scz1bYSxhLGEsblsxXV0sbD1baSwiLCIsYSwiTCIsWm8oS28sbyksIiwiLFpvKEtvLHMpXTtmb3IodC5wdXNoKHRbci0xXSk7KytlPD1yOyluPXRbZV0sby5zaGlmdCgpLG8ucHVzaChuWzBdKSxzLnNoaWZ0KCkscy5wdXNoKG5bMV0pLFFvKGwsbyxzKTtyZXR1cm4gdC5wb3AoKSxsLnB1c2goIkwiLG4pLGwuam9pbigiIil9ZnVuY3Rpb24gWm8odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl0rdFszXSplWzNdfVZvLmZvckVhY2goZnVuY3Rpb24odCxlKXtlLmtleT10LGUuY2xvc2VkPS8tY2xvc2VkJC8udGVzdCh0KX0pO3ZhciAkbz1bMCwyLzMsMS8zLDBdLEpvPVswLDEvMywyLzMsMF0sS289WzAsMS82LDIvMywxLzZdO2Z1bmN0aW9uIFFvKHQsZSxyKXt0LnB1c2goIkMiLFpvKCRvLGUpLCIsIixabygkbyxyKSwiLCIsWm8oSm8sZSksIiwiLFpvKEpvLHIpLCIsIixabyhLbyxlKSwiLCIsWm8oS28scikpfWZ1bmN0aW9uIHRzKHQsZSl7cmV0dXJuKGVbMV0tdFsxXSkvKGVbMF0tdFswXSl9ZnVuY3Rpb24gZXModCl7Zm9yKHZhciBlLHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXI9KGU9dFtpXSlbMF0sbj1lWzFdLUV0LGVbMF09cipNYXRoLmNvcyhuKSxlWzFdPXIqTWF0aC5zaW4obik7cmV0dXJuIHR9ZnVuY3Rpb24gcnModCl7dmFyIGU9ZWkscj1laSxuPTAsaT1yaSxhPVlyLG89VW8scz1vLmtleSxsPW8sYz0iTCIsdT0uNztmdW5jdGlvbiBmKHMpe3ZhciBmLGgscCxkPVtdLGc9W10sdj1bXSxtPS0xLHk9cy5sZW5ndGgseD12ZShlKSxiPXZlKG4pLF89ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gaH06dmUociksdz1uPT09aT9mdW5jdGlvbigpe3JldHVybiBwfTp2ZShpKTtmdW5jdGlvbiBrKCl7ZC5wdXNoKCJNIixvKHQodiksdSksYyxsKHQoZy5yZXZlcnNlKCkpLHUpLCJaIil9Zm9yKDsrK208eTspYS5jYWxsKHRoaXMsZj1zW21dLG0pPyhnLnB1c2goW2g9K3guY2FsbCh0aGlzLGYsbSkscD0rYi5jYWxsKHRoaXMsZixtKV0pLHYucHVzaChbK18uY2FsbCh0aGlzLGYsbSksK3cuY2FsbCh0aGlzLGYsbSldKSk6Zy5sZW5ndGgmJihrKCksZz1bXSx2PVtdKTtyZXR1cm4gZy5sZW5ndGgmJmsoKSxkLmxlbmd0aD9kLmpvaW4oIiIpOm51bGx9cmV0dXJuIGYueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yPXQsZik6cn0sZi54MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGYpOmV9LGYueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxmKTpyfSxmLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aT10LGYpOml9LGYueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxmKTpufSxmLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZik6aX0sZi5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZik6YX0sZi5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD9vPXQ6KG89Vm8uZ2V0KHQpfHxVbykua2V5LGw9by5yZXZlcnNlfHxvLGM9by5jbG9zZWQ/Ik0iOiJMIixmKTpzfSxmLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxmKTp1fSxmfWZ1bmN0aW9uIG5zKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBpcyh0KXtyZXR1cm5bdC54LHQueV19ZnVuY3Rpb24gYXMoKXtyZXR1cm4gNjR9ZnVuY3Rpb24gb3MoKXtyZXR1cm4iY2lyY2xlIn1mdW5jdGlvbiBzcyh0KXt2YXIgZT1NYXRoLnNxcnQodC9BdCk7cmV0dXJuIk0wLCIrZSsiQSIrZSsiLCIrZSsiIDAgMSwxIDAsIistZSsiQSIrZSsiLCIrZSsiIDAgMSwxIDAsIitlKyJaIn10LnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PWpvKGVzKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0fSxIby5yZXZlcnNlPUdvLEdvLnJldmVyc2U9SG8sdC5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiBycyh6KX0sdC5zdmcuYXJlYS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1ycyhlcyk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuaW5uZXJSYWRpdXM9dC54MCxkZWxldGUgdC54MCx0Lm91dGVyUmFkaXVzPXQueDEsZGVsZXRlIHQueDEsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0LnN0YXJ0QW5nbGU9dC55MCxkZWxldGUgdC55MCx0LmVuZEFuZ2xlPXQueTEsZGVsZXRlIHQueTEsdH0sdC5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPVVuLHI9bnMsbj1QbyxpPVJvO2Z1bmN0aW9uIGEocixuKXt2YXIgaSxhLGM9byh0aGlzLHQscixuKSx1PW8odGhpcyxlLHIsbik7cmV0dXJuIk0iK2MucDArcyhjLnIsYy5wMSxjLmExLWMuYTApKyhhPXUsKGk9YykuYTA9PWEuYTAmJmkuYTE9PWEuYTE/bChjLnIsYy5wMSxjLnIsYy5wMCk6bChjLnIsYy5wMSx1LnIsdS5wMCkrcyh1LnIsdS5wMSx1LmExLXUuYTApK2wodS5yLHUucDEsYy5yLGMucDApKSsiWiJ9ZnVuY3Rpb24gbyh0LGUsYSxvKXt2YXIgcz1lLmNhbGwodCxhLG8pLGw9ci5jYWxsKHQscyxvKSxjPW4uY2FsbCh0LHMsbyktRXQsdT1pLmNhbGwodCxzLG8pLUV0O3JldHVybntyOmwsYTA6YyxhMTp1LHAwOltsKk1hdGguY29zKGMpLGwqTWF0aC5zaW4oYyldLHAxOltsKk1hdGguY29zKHUpLGwqTWF0aC5zaW4odSldfX1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4iQSIrdCsiLCIrdCsiIDAgIisgKyhyPkF0KSsiLDEgIitlfWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuIlEgMCwwICIrbn1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dmUodCksYSk6cn0sYS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dmUoZSksYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dmUodCksYSk6ZX0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXZlKHQpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dmUodCksYSk6aX0sYX0sdC5zdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPVVuLHI9aXM7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPXQuY2FsbCh0aGlzLG4saSksbz1lLmNhbGwodGhpcyxuLGkpLHM9KGEueStvLnkpLzIsbD1bYSx7eDphLngseTpzfSx7eDpvLngseTpzfSxvXTtyZXR1cm4iTSIrKGw9bC5tYXAocikpWzBdKyJDIitsWzFdKyIgIitsWzJdKyIgIitsWzNdfXJldHVybiBuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxuKTp0fSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSh0KSxuKTplfSxuLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0LnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgZT10LnN2Zy5kaWFnb25hbCgpLHI9aXMsbj1lLnByb2plY3Rpb247cmV0dXJuIGUucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZVswXSxuPWVbMV0tRXQ7cmV0dXJuW3IqTWF0aC5jb3MobikscipNYXRoLnNpbihuKV19fShyPXQpKTpyfSxlfSx0LnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1vcyxlPWFzO2Z1bmN0aW9uIHIocixuKXtyZXR1cm4obHMuZ2V0KHQuY2FsbCh0aGlzLHIsbikpfHxzcykoZS5jYWxsKHRoaXMscixuKSl9cmV0dXJuIHIudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dmUodCkscik6ZX0scn07dmFyIGxzPXQubWFwKHtjaXJjbGU6c3MsY3Jvc3M6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvNSkvMjtyZXR1cm4iTSIrLTMqZSsiLCIrLWUrIkgiKy1lKyJWIistMyplKyJIIitlKyJWIistZSsiSCIrMyplKyJWIitlKyJIIitlKyJWIiszKmUrIkgiKy1lKyJWIitlKyJIIistMyplKyJaIn0sZGlhbW9uZDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC8oMip1cykpLHI9ZSp1cztyZXR1cm4iTTAsIistZSsiTCIrcisiLDAgMCwiK2UrIiAiKy1yKyIsMFoifSxzcXVhcmU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQpLzI7cmV0dXJuIk0iKy1lKyIsIistZSsiTCIrZSsiLCIrLWUrIiAiK2UrIiwiK2UrIiAiKy1lKyIsIitlKyJaIn0sInRyaWFuZ2xlLWRvd24iOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L2NzKSxyPWUqY3MvMjtyZXR1cm4iTTAsIityKyJMIitlKyIsIistcisiICIrLWUrIiwiKy1yKyJaIn0sInRyaWFuZ2xlLXVwIjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC9jcykscj1lKmNzLzI7cmV0dXJuIk0wLCIrLXIrIkwiK2UrIiwiK3IrIiAiKy1lKyIsIityKyJaIn19KTt0LnN2Zy5zeW1ib2xUeXBlcz1scy5rZXlzKCk7dmFyIGNzPU1hdGguc3FydCgzKSx1cz1NYXRoLnRhbigzMCpDdCk7Vy50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49ZHN8fCsrbXMsaT1icyh0KSxhPVtdLG89Z3N8fHt0aW1lOkRhdGUubm93KCksZWFzZTppYSxkZWxheTowLGR1cmF0aW9uOjI1MH0scz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7YS5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsZj1jLmxlbmd0aDsrK3U8ZjspKHI9Y1t1XSkmJl9zKHIsdSxpLG4sbyksZS5wdXNoKHIpfXJldHVybiBwcyhhLGksbil9LFcuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2gobnVsbD09dD9mczpocyhicyh0KSkpfTt2YXIgZnM9aHMoYnMoKSk7ZnVuY3Rpb24gaHModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscixuOyhlPXRoaXNbdF0pJiYobj1lW3I9ZS5hY3RpdmVdKSYmKG4udGltZXIuYz1udWxsLG4udGltZXIudD1OYU4sLS1lLmNvdW50P2RlbGV0ZSBlW3JdOmRlbGV0ZSB0aGlzW3RdLGUuYWN0aXZlKz0uNSxuLmV2ZW50JiZuLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxuLmluZGV4KSl9fWZ1bmN0aW9uIHBzKHQsZSxyKXtyZXR1cm4gVSh0LHZzKSx0Lm5hbWVzcGFjZT1lLHQuaWQ9cix0fXZhciBkcyxncyx2cz1bXSxtcz0wO2Z1bmN0aW9uIHlzKHQsZSxyLG4pe3ZhciBpPXQuaWQsYT10Lm5hbWVzcGFjZTtyZXR1cm4gdXQodCwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbih0LG8scyl7dFthXVtpXS50d2Vlbi5zZXQoZSxuKHIuY2FsbCh0LHQuX19kYXRhX18sbyxzKSkpfToocj1uKHIpLGZ1bmN0aW9uKHQpe3RbYV1baV0udHdlZW4uc2V0KGUscil9KSl9ZnVuY3Rpb24geHModCl7cmV0dXJuIG51bGw9PXQmJih0PSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gYnModCl7cmV0dXJuIG51bGw9PXQ/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrdCsiX18ifWZ1bmN0aW9uIF9zKHQsZSxyLG4saSl7dmFyIGEsbyxzLGwsYyx1PXRbcl18fCh0W3JdPXthY3RpdmU6MCxjb3VudDowfSksZj11W25dO2Z1bmN0aW9uIGgocil7dmFyIGk9dS5hY3RpdmUsaD11W2ldO2Zvcih2YXIgZCBpbiBoJiYoaC50aW1lci5jPW51bGwsaC50aW1lci50PU5hTiwtLXUuY291bnQsZGVsZXRlIHVbaV0saC5ldmVudCYmaC5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0LHQuX19kYXRhX18saC5pbmRleCkpLHUpaWYoK2Q8bil7dmFyIGc9dVtkXTtnLnRpbWVyLmM9bnVsbCxnLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtkXX1vLmM9cCxUZShmdW5jdGlvbigpe3JldHVybiBvLmMmJnAocnx8MSkmJihvLmM9bnVsbCxvLnQ9TmFOKSwxfSwwLGEpLHUuYWN0aXZlPW4sZi5ldmVudCYmZi5ldmVudC5zdGFydC5jYWxsKHQsdC5fX2RhdGFfXyxlKSxjPVtdLGYudHdlZW4uZm9yRWFjaChmdW5jdGlvbihyLG4peyhuPW4uY2FsbCh0LHQuX19kYXRhX18sZSkpJiZjLnB1c2gobil9KSxsPWYuZWFzZSxzPWYuZHVyYXRpb259ZnVuY3Rpb24gcChpKXtmb3IodmFyIGE9aS9zLG89bChhKSxoPWMubGVuZ3RoO2g+MDspY1stLWhdLmNhbGwodCxvKTtpZihhPj0xKXJldHVybiBmLmV2ZW50JiZmLmV2ZW50LmVuZC5jYWxsKHQsdC5fX2RhdGFfXyxlKSwtLXUuY291bnQ/ZGVsZXRlIHVbbl06ZGVsZXRlIHRbcl0sMX1mfHwoYT1pLnRpbWUsbz1UZShmdW5jdGlvbih0KXt2YXIgZT1mLmRlbGF5O2lmKG8udD1lK2EsZTw9dClyZXR1cm4gaCh0LWUpO28uYz1ofSwwLGEpLGY9dVtuXT17dHdlZW46bmV3IGIsdGltZTphLHRpbWVyOm8sZGVsYXk6aS5kZWxheSxkdXJhdGlvbjppLmR1cmF0aW9uLGVhc2U6aS5lYXNlLGluZGV4OmV9LGk9bnVsbCwrK3UuY291bnQpfXZzLmNhbGw9Vy5jYWxsLHZzLmVtcHR5PVcuZW1wdHksdnMubm9kZT1XLm5vZGUsdnMuc2l6ZT1XLnNpemUsdC50cmFuc2l0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJmUudHJhbnNpdGlvbj9kcz9lLnRyYW5zaXRpb24ocik6ZTp0LnNlbGVjdGlvbigpLnRyYW5zaXRpb24oZSl9LHQudHJhbnNpdGlvbi5wcm90b3R5cGU9dnMsdnMuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRoaXMuaWQsYT10aGlzLm5hbWVzcGFjZSxvPVtdO3Q9WCh0KTtmb3IodmFyIHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe28ucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGY9Yy5sZW5ndGg7Kyt1PGY7KShuPWNbdV0pJiYocj10LmNhbGwobixuLl9fZGF0YV9fLHUscykpPygiX19kYXRhX18iaW4gbiYmKHIuX19kYXRhX189bi5fX2RhdGFfXyksX3Mocix1LGEsaSxuW2FdW2ldKSxlLnB1c2gocikpOmUucHVzaChudWxsKX1yZXR1cm4gcHMobyxhLGkpfSx2cy5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRoaXMuaWQscz10aGlzLm5hbWVzcGFjZSxsPVtdO3Q9Wih0KTtmb3IodmFyIGM9LTEsdT10aGlzLmxlbmd0aDsrK2M8dTspZm9yKHZhciBmPXRoaXNbY10saD0tMSxwPWYubGVuZ3RoOysraDxwOylpZihuPWZbaF0pe2E9bltzXVtvXSxyPXQuY2FsbChuLG4uX19kYXRhX18saCxjKSxsLnB1c2goZT1bXSk7Zm9yKHZhciBkPS0xLGc9ci5sZW5ndGg7KytkPGc7KShpPXJbZF0pJiZfcyhpLGQscyxvLGEpLGUucHVzaChpKX1yZXR1cm4gcHMobCxzLG8pfSx2cy5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1jdCh0KSk7Zm9yKHZhciBpPTAsYT10aGlzLmxlbmd0aDtpPGE7aSsrKXtuLnB1c2goZT1bXSk7Zm9yKHZhciBvLHM9MCxsPShvPXRoaXNbaV0pLmxlbmd0aDtzPGw7cysrKShyPW9bc10pJiZ0LmNhbGwocixyLl9fZGF0YV9fLHMsaSkmJmUucHVzaChyKX1yZXR1cm4gcHMobix0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0sdnMudHdlZW49ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtuXVtyXS50d2Vlbi5nZXQodCk6dXQodGhpcyxudWxsPT1lP2Z1bmN0aW9uKGUpe2Vbbl1bcl0udHdlZW4ucmVtb3ZlKHQpfTpmdW5jdGlvbihpKXtpW25dW3JdLnR3ZWVuLnNldCh0LGUpfSl9LHZzLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2ZvcihyIGluIGUpdGhpcy5hdHRyKHIsZVtyXSk7cmV0dXJuIHRoaXN9dmFyIG49InRyYW5zZm9ybSI9PWU/Z2E6WmksaT10Lm5zLnF1YWxpZnkoZSk7ZnVuY3Rpb24gYSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfWZ1bmN0aW9uIG8oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9cmV0dXJuIHlzKHRoaXMsImF0dHIuIitlLHIsaS5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9vOih0Kz0iIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGUodCkpfSl9KX06ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/YToodCs9IiIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlKGkpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKGksZSh0KSl9KX0pfSl9LHZzLmF0dHJUd2Vlbj1mdW5jdGlvbihlLHIpe3ZhciBuPXQubnMucXVhbGlmeShlKTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK2Usbi5sb2NhbD9mdW5jdGlvbih0LGUpe3ZhciBpPXIuY2FsbCh0aGlzLHQsZSx0aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCkpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxpKHQpKX19OmZ1bmN0aW9uKHQsZSl7dmFyIGk9ci5jYWxsKHRoaXMsdCxlLHRoaXMuZ2V0QXR0cmlidXRlKG4pKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUobixpKHQpKX19KX0sdnMuc3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9IiIpLHQpdGhpcy5zdHlsZShyLHRbcl0sZSk7cmV0dXJuIHRoaXN9cj0iIn1mdW5jdGlvbiBpKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX1yZXR1cm4geXModGhpcywic3R5bGUuIit0LGUsZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/aTooZSs9IiIsZnVuY3Rpb24oKXt2YXIgbixpPW8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIGkhPT1lJiYobj1aaShpLGUpLGZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuKGUpLHIpfSl9KX0pfSx2cy5zdHlsZVR3ZWVuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj0iIiksdGhpcy50d2Vlbigic3R5bGUuIit0LGZ1bmN0aW9uKG4saSl7dmFyIGE9ZS5jYWxsKHRoaXMsbixpLG8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCkpO3JldHVybiBhJiZmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsYShlKSxyKX19KX0sdnMudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4geXModGhpcywidGV4dCIsdCx4cyl9LHZzLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubmFtZXNwYWNlO3JldHVybiB0aGlzLmVhY2goImVuZC50cmFuc2l0aW9uIixmdW5jdGlvbigpe3ZhciBlO3RoaXNbdF0uY291bnQ8MiYmKGU9dGhpcy5wYXJlbnROb2RlKSYmZS5yZW1vdmVDaGlsZCh0aGlzKX0pfSx2cy5lYXNlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW25dW3JdLmVhc2U6KCJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT10LmVhc2UuYXBwbHkodCxhcmd1bWVudHMpKSx1dCh0aGlzLGZ1bmN0aW9uKHQpe3Rbbl1bcl0uZWFzZT1lfSkpfSx2cy5kZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kZWxheTp1dCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmRlbGF5PSt0LmNhbGwobixuLl9fZGF0YV9fLGksYSl9Oih0PSt0LGZ1bmN0aW9uKG4pe25bcl1bZV0uZGVsYXk9dH0pKX0sdnMuZHVyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZHVyYXRpb246dXQodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbihuLGksYSl7bltyXVtlXS5kdXJhdGlvbj1NYXRoLm1heCgxLHQuY2FsbChuLG4uX19kYXRhX18saSxhKSl9Oih0PU1hdGgubWF4KDEsdCksZnVuY3Rpb24obil7bltyXVtlXS5kdXJhdGlvbj10fSkpfSx2cy5lYWNoPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5pZCxpPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9Z3Msbz1kczt0cnl7ZHM9bix1dCh0aGlzLGZ1bmN0aW9uKHQscixhKXtncz10W2ldW25dLGUuY2FsbCh0LHQuX19kYXRhX18scixhKX0pfWZpbmFsbHl7Z3M9YSxkcz1vfX1lbHNlIHV0KHRoaXMsZnVuY3Rpb24oYSl7dmFyIG89YVtpXVtuXTsoby5ldmVudHx8KG8uZXZlbnQ9dC5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSkpLm9uKGUscil9KTtyZXR1cm4gdGhpc30sdnMudHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbj10aGlzLmlkLGk9KyttcyxhPXRoaXMubmFtZXNwYWNlLG89W10scz0wLGw9dGhpcy5sZW5ndGg7czxsO3MrKyl7by5wdXNoKHQ9W10pO2Zvcih2YXIgYyx1PTAsZj0oYz10aGlzW3NdKS5sZW5ndGg7dTxmO3UrKykoZT1jW3VdKSYmX3MoZSx1LGEsaSx7dGltZToocj1lW2FdW25dKS50aW1lLGVhc2U6ci5lYXNlLGRlbGF5OnIuZGVsYXkrci5kdXJhdGlvbixkdXJhdGlvbjpyLmR1cmF0aW9ufSksdC5wdXNoKGUpfXJldHVybiBwcyhvLGEsaSl9LHQuc3ZnLmF4aXM9ZnVuY3Rpb24oKXt2YXIgZSxyPXQuc2NhbGUubGluZWFyKCksaT13cyxhPTYsbz02LHM9MyxsPVsxMF0sYz1udWxsO2Z1bmN0aW9uIHUobil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG4sdT10LnNlbGVjdCh0aGlzKSxmPXRoaXMuX19jaGFydF9ffHxyLGg9dGhpcy5fX2NoYXJ0X189ci5jb3B5KCkscD1udWxsPT1jP2gudGlja3M/aC50aWNrcy5hcHBseShoLGwpOmguZG9tYWluKCk6YyxkPW51bGw9PWU/aC50aWNrRm9ybWF0P2gudGlja0Zvcm1hdC5hcHBseShoLGwpOno6ZSxnPXUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEocCxoKSx2PWcuZW50ZXIoKS5pbnNlcnQoImciLCIuZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLGt0KSxtPXQudHJhbnNpdGlvbihnLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLGt0KS5yZW1vdmUoKSx5PXQudHJhbnNpdGlvbihnLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5IiwxKSx4PU1hdGgubWF4KGEsMCkrcyxiPXVvKGgpLF89dS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksdz0oXy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiksdC50cmFuc2l0aW9uKF8pKTt2LmFwcGVuZCgibGluZSIpLHYuYXBwZW5kKCJ0ZXh0Iik7dmFyIGssVCxBLE0sUz12LnNlbGVjdCgibGluZSIpLEU9eS5zZWxlY3QoImxpbmUiKSxDPWcuc2VsZWN0KCJ0ZXh0IikudGV4dChkKSxMPXYuc2VsZWN0KCJ0ZXh0IiksTz15LnNlbGVjdCgidGV4dCIpLEk9InRvcCI9PT1pfHwibGVmdCI9PT1pPy0xOjE7aWYoImJvdHRvbSI9PT1pfHwidG9wIj09PWk/KG49VHMsaz0ieCIsQT0ieSIsVD0ieDIiLE09InkyIixDLmF0dHIoImR5IixJPDA/IjBlbSI6Ii43MWVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksdy5hdHRyKCJkIiwiTSIrYlswXSsiLCIrSSpvKyJWMEgiK2JbMV0rIlYiK0kqbykpOihuPUFzLGs9InkiLEE9IngiLFQ9InkyIixNPSJ4MiIsQy5hdHRyKCJkeSIsIi4zMmVtIikuc3R5bGUoInRleHQtYW5jaG9yIixJPDA/ImVuZCI6InN0YXJ0Iiksdy5hdHRyKCJkIiwiTSIrSSpvKyIsIitiWzBdKyJIMFYiK2JbMV0rIkgiK0kqbykpLFMuYXR0cihNLEkqYSksTC5hdHRyKEEsSSp4KSxFLmF0dHIoVCwwKS5hdHRyKE0sSSphKSxPLmF0dHIoaywwKS5hdHRyKEEsSSp4KSxoLnJhbmdlQmFuZCl7dmFyIEQ9aCxQPUQucmFuZ2VCYW5kKCkvMjtmPWg9ZnVuY3Rpb24odCl7cmV0dXJuIEQodCkrUH19ZWxzZSBmLnJhbmdlQmFuZD9mPWg6bS5jYWxsKG4saCxmKTt2LmNhbGwobixmLGgpLHkuY2FsbChuLGgsaCl9KX1yZXR1cm4gdS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHUpOnJ9LHUub3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQgaW4ga3M/dCsiIjp3cyx1KTppfSx1LnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bihhcmd1bWVudHMpLHUpOmx9LHUudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHUpOmN9LHUudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHUpOmV9LHUudGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZT8oYT0rdCxvPSthcmd1bWVudHNbZS0xXSx1KTphfSx1LmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsdSk6YX0sdS5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LHUpOm99LHUudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdSk6c30sdS50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnV9LHV9O3ZhciB3cz0iYm90dG9tIixrcz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2Z1bmN0aW9uIFRzKHQsZSxyKXt0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrKGlzRmluaXRlKG4pP246cih0KSkrIiwwKSJ9KX1mdW5jdGlvbiBBcyh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKG4pP246cih0KSkrIikifSl9dC5zdmcuYnJ1c2g9ZnVuY3Rpb24oKXt2YXIgZSxyLG49aihoLCJicnVzaHN0YXJ0IiwiYnJ1c2giLCJicnVzaGVuZCIpLGk9bnVsbCxhPW51bGwscz1bMCwwXSxsPVswLDBdLGM9ITAsdT0hMCxmPVNzWzBdO2Z1bmN0aW9uIGgoZSl7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dC5zZWxlY3QodGhpcykuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIix2KS5vbigidG91Y2hzdGFydC5icnVzaCIsdikscj1lLnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoImN1cnNvciIsImNyb3NzaGFpciIpLGUuc2VsZWN0QWxsKCIuZXh0ZW50IikuZGF0YShbMF0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJleHRlbnQiKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpO3ZhciBuPWUuc2VsZWN0QWxsKCIucmVzaXplIikuZGF0YShmLHopO24uZXhpdCgpLnJlbW92ZSgpLG4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInJlc2l6ZSAiK3R9KS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4gTXNbdF19KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4vW2V3XSQvLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybi9eW25zXS8udGVzdCh0KT8tMzpudWxsfSkuYXR0cigid2lkdGgiLDYpLmF0dHIoImhlaWdodCIsNikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKSxuLnN0eWxlKCJkaXNwbGF5IixoLmVtcHR5KCk/Im5vbmUiOm51bGwpO3ZhciBvLHM9dC50cmFuc2l0aW9uKGUpLGw9dC50cmFuc2l0aW9uKHIpO2kmJihvPXVvKGkpLGwuYXR0cigieCIsb1swXSkuYXR0cigid2lkdGgiLG9bMV0tb1swXSksZChzKSksYSYmKG89dW8oYSksbC5hdHRyKCJ5IixvWzBdKS5hdHRyKCJoZWlnaHQiLG9bMV0tb1swXSksZyhzKSkscChzKX0pfWZ1bmN0aW9uIHAodCl7dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitzWysvZSQvLnRlc3QodCldKyIsIitsWysvXnMvLnRlc3QodCldKyIpIn0pfWZ1bmN0aW9uIGQodCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ4IixzWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwubj5yZWN0LC5zPnJlY3QiKS5hdHRyKCJ3aWR0aCIsc1sxXS1zWzBdKX1mdW5jdGlvbiBnKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsbFswXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0cigiaGVpZ2h0IixsWzFdLWxbMF0pfWZ1bmN0aW9uIHYoKXt2YXIgZix2LG09dGhpcyx5PXQuc2VsZWN0KHQuZXZlbnQudGFyZ2V0KSx4PW4ub2YobSxhcmd1bWVudHMpLGI9dC5zZWxlY3QobSksXz15LmRhdHVtKCksdz0hL14obnxzKSQvLnRlc3QoXykmJmksaz0hL14oZXx3KSQvLnRlc3QoXykmJmEsVD15LmNsYXNzZWQoImV4dGVudCIpLEE9eHQobSksTT10Lm1vdXNlKG0pLFM9dC5zZWxlY3QobyhtKSkub24oImtleWRvd24uYnJ1c2giLGZ1bmN0aW9uKCl7MzI9PXQuZXZlbnQua2V5Q29kZSYmKFR8fChmPW51bGwsTVswXS09c1sxXSxNWzFdLT1sWzFdLFQ9MiksQigpKX0pLm9uKCJrZXl1cC5icnVzaCIsZnVuY3Rpb24oKXszMj09dC5ldmVudC5rZXlDb2RlJiYyPT1UJiYoTVswXSs9c1sxXSxNWzFdKz1sWzFdLFQ9MCxCKCkpfSk7aWYodC5ldmVudC5jaGFuZ2VkVG91Y2hlcz9TLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLEwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsTyk6Uy5vbigibW91c2Vtb3ZlLmJydXNoIixMKS5vbigibW91c2V1cC5icnVzaCIsTyksYi5pbnRlcnJ1cHQoKS5zZWxlY3RBbGwoIioiKS5pbnRlcnJ1cHQoKSxUKU1bMF09c1swXS1NWzBdLE1bMV09bFswXS1NWzFdO2Vsc2UgaWYoXyl7dmFyIEU9Ky93JC8udGVzdChfKSxDPSsvXm4vLnRlc3QoXyk7dj1bc1sxLUVdLU1bMF0sbFsxLUNdLU1bMV1dLE1bMF09c1tFXSxNWzFdPWxbQ119ZWxzZSB0LmV2ZW50LmFsdEtleSYmKGY9TS5zbGljZSgpKTtmdW5jdGlvbiBMKCl7dmFyIGU9dC5tb3VzZShtKSxyPSExO3YmJihlWzBdKz12WzBdLGVbMV0rPXZbMV0pLFR8fCh0LmV2ZW50LmFsdEtleT8oZnx8KGY9WyhzWzBdK3NbMV0pLzIsKGxbMF0rbFsxXSkvMl0pLE1bMF09c1srKGVbMF08ZlswXSldLE1bMV09bFsrKGVbMV08ZlsxXSldKTpmPW51bGwpLHcmJnooZSxpLDApJiYoZChiKSxyPSEwKSxrJiZ6KGUsYSwxKSYmKGcoYikscj0hMCksciYmKHAoYikseCh7dHlwZToiYnJ1c2giLG1vZGU6VD8ibW92ZSI6InJlc2l6ZSJ9KSl9ZnVuY3Rpb24geih0LG4saSl7dmFyIGEsbyxoPXVvKG4pLHA9aFswXSxkPWhbMV0sZz1NW2ldLHY9aT9sOnMsbT12WzFdLXZbMF07aWYoVCYmKHAtPWcsZC09bStnKSxhPShpP3U6Yyk/TWF0aC5tYXgocCxNYXRoLm1pbihkLHRbaV0pKTp0W2ldLFQ/bz0oYSs9ZykrbTooZiYmKGc9TWF0aC5tYXgocCxNYXRoLm1pbihkLDIqZltpXS1hKSkpLGc8YT8obz1hLGE9Zyk6bz1nKSx2WzBdIT1hfHx2WzFdIT1vKXJldHVybiBpP3I9bnVsbDplPW51bGwsdlswXT1hLHZbMV09bywhMH1mdW5jdGlvbiBPKCl7TCgpLGIuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLGguZW1wdHkoKT8ibm9uZSI6bnVsbCksdC5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxTLm9uKCJtb3VzZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigidG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwpLm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwpLEEoKSx4KHt0eXBlOiJicnVzaGVuZCJ9KX1iLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksdC5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIix5LnN0eWxlKCJjdXJzb3IiKSkseCh7dHlwZToiYnJ1c2hzdGFydCJ9KSxMKCl9cmV0dXJuIGguZXZlbnQ9ZnVuY3Rpb24oaSl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9bi5vZih0aGlzLGFyZ3VtZW50cyksYT17eDpzLHk6bCxpOmUsajpyfSxvPXRoaXMuX19jaGFydF9ffHxhO3RoaXMuX19jaGFydF9fPWEsZHM/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe2U9by5pLHI9by5qLHM9by54LGw9by55LGkoe3R5cGU6ImJydXNoc3RhcnQifSl9KS50d2VlbigiYnJ1c2g6YnJ1c2giLGZ1bmN0aW9uKCl7dmFyIHQ9JGkocyxhLngpLG49JGkobCxhLnkpO3JldHVybiBlPXI9bnVsbCxmdW5jdGlvbihlKXtzPWEueD10KGUpLGw9YS55PW4oZSksaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KS5lYWNoKCJlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7ZT1hLmkscj1hLmosaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxpKHt0eXBlOiJicnVzaGVuZCJ9KX0pOihpKHt0eXBlOiJicnVzaHN0YXJ0In0pLGkoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksaSh7dHlwZToiYnJ1c2hlbmQifSkpfSl9LGgueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1Tc1shKGk9dCk8PDF8IWFdLGgpOml9LGgueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1Tc1shaTw8MXwhKGE9dCldLGgpOmF9LGguY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkmJmE/KGM9ISF0WzBdLHU9ISF0WzFdKTppP2M9ISF0OmEmJih1PSEhdCksaCk6aSYmYT9bYyx1XTppP2M6YT91Om51bGx9LGguZXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuLG8sYyx1LGY7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkmJihuPXRbMF0sbz10WzFdLGEmJihuPW5bMF0sbz1vWzBdKSxlPVtuLG9dLGkuaW52ZXJ0JiYobj1pKG4pLG89aShvKSksbzxuJiYoZj1uLG49byxvPWYpLG49PXNbMF0mJm89PXNbMV18fChzPVtuLG9dKSksYSYmKGM9dFswXSx1PXRbMV0saSYmKGM9Y1sxXSx1PXVbMV0pLHI9W2MsdV0sYS5pbnZlcnQmJihjPWEoYyksdT1hKHUpKSx1PGMmJihmPWMsYz11LHU9ZiksYz09bFswXSYmdT09bFsxXXx8KGw9W2MsdV0pKSxoKTooaSYmKGU/KG49ZVswXSxvPWVbMV0pOihuPXNbMF0sbz1zWzFdLGkuaW52ZXJ0JiYobj1pLmludmVydChuKSxvPWkuaW52ZXJ0KG8pKSxvPG4mJihmPW4sbj1vLG89ZikpKSxhJiYocj8oYz1yWzBdLHU9clsxXSk6KGM9bFswXSx1PWxbMV0sYS5pbnZlcnQmJihjPWEuaW52ZXJ0KGMpLHU9YS5pbnZlcnQodSkpLHU8YyYmKGY9YyxjPXUsdT1mKSkpLGkmJmE/W1tuLGNdLFtvLHVdXTppP1tuLG9dOmEmJltjLHVdKX0saC5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBoLmVtcHR5KCl8fChzPVswLDBdLGw9WzAsMF0sZT1yPW51bGwpLGh9LGguZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIWkmJnNbMF09PXNbMV18fCEhYSYmbFswXT09bFsxXX0sdC5yZWJpbmQoaCxuLCJvbiIpfTt2YXIgTXM9e246Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sU3M9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sRXM9SWUuZm9ybWF0PXNyLnRpbWVGb3JtYXQsQ3M9RXMudXRjLExzPUNzKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTtmdW5jdGlvbiB6cyh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIE9zKGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiBlKHQpfWZ1bmN0aW9uIGEoZSxuKXt2YXIgaT0oZVsxXS1lWzBdKS9uLGE9dC5iaXNlY3QoRHMsaSk7cmV0dXJuIGE9PURzLmxlbmd0aD9bci55ZWFyLHhvKGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LzMxNTM2ZTZ9KSxuKVsyXV06YT9yW2kvRHNbYS0xXTxEc1thXS9pP2EtMTphXTpbRnMseG8oZSxuKVsyXV19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBJcyhlLmludmVydCh0KSl9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbih0KSxpKTplLmRvbWFpbigpLm1hcChJcyl9LGkubmljZT1mdW5jdGlvbih0LGUpe3ZhciByPWkuZG9tYWluKCksbj1jbyhyKSxvPW51bGw9PXQ/YShuLDEwKToibnVtYmVyIj09dHlwZW9mIHQmJmEobix0KTtmdW5jdGlvbiBzKHIpe3JldHVybiFpc05hTihyKSYmIXQucmFuZ2UocixJcygrcisxKSxlKS5sZW5ndGh9cmV0dXJuIG8mJih0PW9bMF0sZT1vWzFdKSxpLmRvbWFpbihobyhyLGU+MT97Zmxvb3I6ZnVuY3Rpb24oZSl7Zm9yKDtzKGU9dC5mbG9vcihlKSk7KWU9SXMoZS0xKTtyZXR1cm4gZX0sY2VpbDpmdW5jdGlvbihlKXtmb3IoO3MoZT10LmNlaWwoZSkpOyllPUlzKCtlKzEpO3JldHVybiBlfX06dCkpfSxpLnRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Y28oaS5kb21haW4oKSksbj1udWxsPT10P2EociwxMCk6Im51bWJlciI9PXR5cGVvZiB0P2Eocix0KTohdC5yYW5nZSYmW3tyYW5nZTp0fSxlXTtyZXR1cm4gbiYmKHQ9blswXSxlPW5bMV0pLHQucmFuZ2UoclswXSxJcygrclsxXSsxKSxlPDE/MTplKX0saS50aWNrRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIG59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBPcyhlLmNvcHkoKSxyLG4pfSxtbyhpLGUpfWZ1bmN0aW9uIElzKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1Fcy5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcmJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/enM6THMsenMucGFyc2U9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX0senMudG9TdHJpbmc9THMudG9TdHJpbmcsSWUuc2Vjb25kPUZlKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrMWUzKk1hdGguZmxvb3IoZSkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCl9KSxJZS5zZWNvbmRzPUllLnNlY29uZC5yYW5nZSxJZS5zZWNvbmRzLnV0Yz1JZS5zZWNvbmQudXRjLnJhbmdlLEllLm1pbnV0ZT1GZShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERlKDZlNCpNYXRoLmZsb29yKHQvNmU0KSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksSWUubWludXRlcz1JZS5taW51dGUucmFuZ2UsSWUubWludXRlcy51dGM9SWUubWludXRlLnV0Yy5yYW5nZSxJZS5ob3VyPUZlKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1cm4gbmV3IERlKDM2ZTUqKE1hdGguZmxvb3IodC8zNmU1LWUpK2UpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLEllLmhvdXJzPUllLmhvdXIucmFuZ2UsSWUuaG91cnMudXRjPUllLmhvdXIudXRjLnJhbmdlLEllLm1vbnRoPUZlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0RGF0ZSgxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksSWUubW9udGhzPUllLm1vbnRoLnJhbmdlLEllLm1vbnRocy51dGM9SWUubW9udGgudXRjLnJhbmdlO3ZhciBEcz1bMWUzLDVlMywxNWUzLDNlNCw2ZTQsM2U1LDllNSwxOGU1LDM2ZTUsMTA4ZTUsMjE2ZTUsNDMyZTUsODY0ZTUsMTcyOGU1LDYwNDhlNSwyNTkyZTYsNzc3NmU2LDMxNTM2ZTZdLFBzPVtbSWUuc2Vjb25kLDFdLFtJZS5zZWNvbmQsNV0sW0llLnNlY29uZCwxNV0sW0llLnNlY29uZCwzMF0sW0llLm1pbnV0ZSwxXSxbSWUubWludXRlLDVdLFtJZS5taW51dGUsMTVdLFtJZS5taW51dGUsMzBdLFtJZS5ob3VyLDFdLFtJZS5ob3VyLDNdLFtJZS5ob3VyLDZdLFtJZS5ob3VyLDEyXSxbSWUuZGF5LDFdLFtJZS5kYXksMl0sW0llLndlZWssMV0sW0llLm1vbnRoLDFdLFtJZS5tb250aCwzXSxbSWUueWVhciwxXV0sUnM9RXMubXVsdGkoW1siLiVMIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCkmJjEhPXQuZ2V0RGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24odCl7cmV0dXJuIDEhPXQuZ2V0RGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX1dLFsiJVkiLFlyXV0pLEZzPXtyYW5nZTpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQucmFuZ2UoTWF0aC5jZWlsKGUvbikqbiwrcixuKS5tYXAoSXMpfSxmbG9vcjp6LGNlaWw6en07UHMueWVhcj1JZS55ZWFyLEllLnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIE9zKHQuc2NhbGUubGluZWFyKCksUHMsUnMpfTt2YXIgQnM9UHMubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdLnV0Yyx0WzFdXX0pLE5zPUNzLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RheSgpJiYxIT10LmdldFVUQ0RhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKHQpe3JldHVybiAxIT10LmdldFVUQ0RhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9XSxbIiVZIixZcl1dKTtmdW5jdGlvbiBqcyh0KXtyZXR1cm4gSlNPTi5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gVnModCl7dmFyIGU9aS5jcmVhdGVSYW5nZSgpO3JldHVybiBlLnNlbGVjdE5vZGUoaS5ib2R5KSxlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9QnMueWVhcj1JZS55ZWFyLnV0YyxJZS5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gT3ModC5zY2FsZS5saW5lYXIoKSxCcyxOcyl9LHQudGV4dD1tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVRleHR9KSx0Lmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4geWUodCwiYXBwbGljYXRpb24vanNvbiIsanMsZSl9LHQuaHRtbD1mdW5jdGlvbih0LGUpe3JldHVybiB5ZSh0LCJ0ZXh0L2h0bWwiLFZzLGUpfSx0LnhtbD1tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVhNTH0pLCJvYmplY3QiPT10eXBlb2YgZSYmZS5leHBvcnRzP2UuZXhwb3J0cz10OnRoaXMuZDM9dH0oKX0se31dLDE1NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspaWYodm9pZCAwIT09YXJndW1lbnRzW3RdKXJldHVybiBhcmd1bWVudHNbdF19fSx7fV0sMTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImluY3JlbWVudGFsLWNvbnZleC1odWxsIiksaT10KCJ1bmlxIik7ZnVuY3Rpb24gYSh0LGUpe3RoaXMucG9pbnQ9dCx0aGlzLmluZGV4PWV9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj10LnBvaW50LG49ZS5wb2ludCxpPXIubGVuZ3RoLGE9MDthPGk7KythKXt2YXIgbz1uW2FdLXJbYV07aWYobylyZXR1cm4gb31yZXR1cm4gMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTt2YXIgcz10WzBdLmxlbmd0aDtpZihzPDEpcmV0dXJuW107aWYoMT09PXMpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZigxPT09dClyZXR1cm4gcj9bWy0xLDBdXTpbXTt2YXIgbj1lLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdLGVdfSk7bi5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pO2Zvcih2YXIgaT1uZXcgQXJyYXkodC0xKSxhPTE7YTx0OysrYSl7dmFyIG89blthLTFdLHM9blthXTtpW2EtMV09W29bMV0sc1sxXV19ciYmaS5wdXNoKFstMSxpWzBdWzFdXSxbaVt0LTFdWzFdLC0xXSk7cmV0dXJuIGl9KHIsdCxlKTtmb3IodmFyIGw9bmV3IEFycmF5KHIpLGM9MSx1PTA7dTxyOysrdSl7Zm9yKHZhciBmPXRbdV0saD1uZXcgQXJyYXkocysxKSxwPTAsZD0wO2Q8czsrK2Qpe3ZhciBnPWZbZF07aFtkXT1nLHArPWcqZ31oW3NdPXAsbFt1XT1uZXcgYShoLHUpLGM9TWF0aC5tYXgocCxjKX1pKGwsbykscj1sLmxlbmd0aDtmb3IodmFyIHY9bmV3IEFycmF5KHIrcysxKSxtPW5ldyBBcnJheShyK3MrMSkseT0ocysxKSoocysxKSpjLHg9bmV3IEFycmF5KHMrMSksdT0wO3U8PXM7Kyt1KXhbdV09MDt4W3NdPXksdlswXT14LnNsaWNlKCksbVswXT0tMTtmb3IodmFyIHU9MDt1PD1zOysrdSl7dmFyIGg9eC5zbGljZSgpO2hbdV09MSx2W3UrMV09aCxtW3UrMV09LTF9Zm9yKHZhciB1PTA7dTxyOysrdSl7dmFyIGI9bFt1XTt2W3UrcysxXT1iLnBvaW50LG1bdStzKzFdPWIuaW5kZXh9dmFyIF89bih2LCExKTtfPWU/Xy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PXM7KytyKXt2YXIgbj1tW3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pOl8uZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8PXM7KytlKXt2YXIgcj1tW3RbZV1dO2lmKHI8MClyZXR1cm4hMTt0W2VdPXJ9cmV0dXJuITB9KTtpZigxJnMpZm9yKHZhciB1PTA7dTxfLmxlbmd0aDsrK3Upe3ZhciBiPV9bdV0saD1iWzBdO2JbMF09YlsxXSxiWzFdPWh9cmV0dXJuIF99fSx7ImluY3JlbWVudGFsLWNvbnZleC1odWxsIjo0MDUsdW5pcTo1MzF9XSwxNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWE7dmFyIG49KGEuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS5nZXRDb250ZXh0KCIyZCIpLGk9byhbMzIsMTI2XSk7ZnVuY3Rpb24gYSh0LGUpe0FycmF5LmlzQXJyYXkodCkmJih0PXQuam9pbigiLCAiKSk7dmFyIHIsYT17fSxzPTE2LGw9LjA1O2UmJigyPT09ZS5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgZVswXT9yPW8oZSk6QXJyYXkuaXNBcnJheShlKT9yPWU6KGUubz9yPW8oZS5vKTplLnBhaXJzJiYocj1lLnBhaXJzKSxlLmZvbnRTaXplJiYocz1lLmZvbnRTaXplKSxudWxsIT1lLnRocmVzaG9sZCYmKGw9ZS50aHJlc2hvbGQpKSkscnx8KHI9aSksbi5mb250PXMrInB4ICIrdDtmb3IodmFyIGM9MDtjPHIubGVuZ3RoO2MrKyl7dmFyIHU9cltjXSxmPW4ubWVhc3VyZVRleHQodVswXSkud2lkdGgrbi5tZWFzdXJlVGV4dCh1WzFdKS53aWR0aCxoPW4ubWVhc3VyZVRleHQodSkud2lkdGg7aWYoTWF0aC5hYnMoZi1oKT5zKmwpe3ZhciBwPShoLWYpL3M7YVt1XT0xZTMqcH19cmV0dXJuIGF9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj10WzBdO3I8PXRbMV07cisrKWZvcih2YXIgbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLGk9dFswXTtpPHRbMV07aSsrKXt2YXIgYT1uK1N0cmluZy5mcm9tQ2hhckNvZGUoaSk7ZS5wdXNoKGEpfXJldHVybiBlfWEuY3JlYXRlUGFpcnM9byxhLmFzY2lpPWl9LHt9XSwxNTg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7dmFyIHI9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDY0QXJyYXkpe3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoMSksaT1uZXcgVWludDMyQXJyYXkobi5idWZmZXIpO2lmKG5bMF09MSxyPSEwLDEwNzI2OTMyNDg9PT1pWzFdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVswXSxpWzFdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVswXT10LGlbMV09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfX1lbHNlIGlmKDEwNzI2OTMyNDg9PT1pWzBdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVsxXSxpWzBdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVsxXT10LGlbMF09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfX1lbHNlIHI9ITF9aWYoIXIpe3ZhciBhPW5ldyB0KDgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksW2EucmVhZFVJbnQzMkxFKDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS53cml0ZVVJbnQzMkxFKHQsMCwhMCksYS53cml0ZVVJbnQzMkxFKGUsNCwhMCksYS5yZWFkRG91YmxlTEUoMCwhMCl9LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoMCwhMCl9LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoNCwhMCl9fWUuZXhwb3J0cy5zaWduPWZ1bmN0aW9uKHQpe3JldHVybiBlLmV4cG9ydHMuaGkodCk+Pj4zMX0sZS5leHBvcnRzLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybihlLmV4cG9ydHMuaGkodCk8PDE+Pj4yMSktMTAyM30sZS5leHBvcnRzLmZyYWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciByPWUuZXhwb3J0cy5sbyh0KSxuPWUuZXhwb3J0cy5oaSh0KSxpPTEwNDg1NzUmbjtyZXR1cm4gMjE0NjQzNTA3MiZuJiYoaSs9MTw8MjApLFtyLGldfSxlLmV4cG9ydHMuZGVub3JtYWxpemVkPWZ1bmN0aW9uKHQpe3JldHVybiEoMjE0NjQzNTA3MiZlLmV4cG9ydHMuaGkodCkpfX0pLmNhbGwodGhpcyx0KCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjk1fV0sMTU5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiYWJzLXN2Zy1wYXRoIiksaT10KCJub3JtYWxpemUtc3ZnLXBhdGgiKSxhPXtNOiJtb3ZlVG8iLEM6ImJlemllckN1cnZlVG8ifTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmJlZ2luUGF0aCgpLGkobihlKSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLG49ZS5zbGljZSgxKTt0W2Fbcl1dLmFwcGx5KHQsbil9KSx0LmNsb3NlUGF0aCgpfX0seyJhYnMtc3ZnLXBhdGgiOjUwLCJub3JtYWxpemUtc3ZnLXBhdGgiOjQ0NH1dLDE2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJpbnQ4IjpyZXR1cm4gSW50OEFycmF5O2Nhc2UiaW50MTYiOnJldHVybiBJbnQxNkFycmF5O2Nhc2UiaW50MzIiOnJldHVybiBJbnQzMkFycmF5O2Nhc2UidWludDgiOnJldHVybiBVaW50OEFycmF5O2Nhc2UidWludDE2IjpyZXR1cm4gVWludDE2QXJyYXk7Y2FzZSJ1aW50MzIiOnJldHVybiBVaW50MzJBcnJheTtjYXNlImZsb2F0MzIiOnJldHVybiBGbG9hdDMyQXJyYXk7Y2FzZSJmbG9hdDY0IjpyZXR1cm4gRmxvYXQ2NEFycmF5O2Nhc2UiYXJyYXkiOnJldHVybiBBcnJheTtjYXNlInVpbnQ4X2NsYW1wZWQiOnJldHVybiBVaW50OENsYW1wZWRBcnJheX19fSx7fV0sMTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3N3aXRjaCgidW5kZWZpbmVkIj09dHlwZW9mIGUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn0oMHx0LGUpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wfGVbbl07aWYoaTw9MClyZXR1cm5bXTt2YXIgYSxvPW5ldyBBcnJheShpKTtpZihuPT09ZS5sZW5ndGgtMSlmb3IoYT0wO2E8aTsrK2Epb1thXT1yO2Vsc2UgZm9yKGE9MDthPGk7KythKW9bYV09dChlLHIsbisxKTtyZXR1cm4gb30odCxlLDApfXJldHVybltdfX0se31dLDE2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyPXJ8fDI7dmFyIG4scyxsLGMsdSxwLGcsdj1lJiZlLmxlbmd0aCxtPXY/ZVswXSpyOnQubGVuZ3RoLHk9aSh0LDAsbSxyLCEwKSx4PVtdO2lmKCF5KXJldHVybiB4O2lmKHYmJih5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBvLHMsbCxjLHUscD1bXTtmb3Iobz0wLHM9ZS5sZW5ndGg7bzxzO28rKylsPWVbb10qbixjPW88cy0xP2VbbysxXSpuOnQubGVuZ3RoLCh1PWkodCxsLGMsbiwhMSkpPT09dS5uZXh0JiYodS5zdGVpbmVyPSEwKSxwLnB1c2goZCh1KSk7Zm9yKHAuc29ydChmKSxvPTA7bzxwLmxlbmd0aDtvKyspaChwW29dLHIpLHI9YShyLHIubmV4dCk7cmV0dXJuIHJ9KHQsZSx5LHIpKSx0Lmxlbmd0aD44MCpyKXtuPWw9dFswXSxzPWM9dFsxXTtmb3IodmFyIGI9cjtiPG07Yis9cikodT10W2JdKTxuJiYobj11KSwocD10W2IrMV0pPHMmJihzPXApLHU+bCYmKGw9dSkscD5jJiYoYz1wKTtnPTAhPT0oZz1NYXRoLm1heChsLW4sYy1zKSk/MS9nOjB9cmV0dXJuIG8oeSx4LHIsbixzLGcpLHh9ZnVuY3Rpb24gaSh0LGUscixuLGkpe3ZhciBhLG87aWYoaT09PUEodCxlLHIsbik+MClmb3IoYT1lO2E8cjthKz1uKW89dyhhLHRbYV0sdFthKzFdLG8pO2Vsc2UgZm9yKGE9ci1uO2E+PWU7YS09bilvPXcoYSx0W2FdLHRbYSsxXSxvKTtyZXR1cm4gbyYmeShvLG8ubmV4dCkmJihrKG8pLG89by5uZXh0KSxvfWZ1bmN0aW9uIGEodCxlKXtpZighdClyZXR1cm4gdDtlfHwoZT10KTt2YXIgcixuPXQ7ZG97aWYocj0hMSxuLnN0ZWluZXJ8fCF5KG4sbi5uZXh0KSYmMCE9PW0obi5wcmV2LG4sbi5uZXh0KSluPW4ubmV4dDtlbHNle2lmKGsobiksKG49ZT1uLnByZXYpPT09bi5uZXh0KWJyZWFrO3I9ITB9fXdoaWxlKHJ8fG4hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSxyLG4saSxmLGgpe2lmKHQpeyFoJiZmJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10O2Rve251bGw9PT1pLnomJihpLno9cChpLngsaS55LGUscixuKSksaS5wcmV2Wj1pLnByZXYsaS5uZXh0Wj1pLm5leHQsaT1pLm5leHR9d2hpbGUoaSE9PXQpO2kucHJldloubmV4dFo9bnVsbCxpLnByZXZaPW51bGwsZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjPTE7ZG97Zm9yKHI9dCx0PW51bGwsYT1udWxsLG89MDtyOyl7Zm9yKG8rKyxuPXIscz0wLGU9MDtlPGMmJihzKyssbj1uLm5leHRaKTtlKyspO2ZvcihsPWM7cz4wfHxsPjAmJm47KTAhPT1zJiYoMD09PWx8fCFufHxyLno8PW4ueik/KGk9cixyPXIubmV4dFoscy0tKTooaT1uLG49bi5uZXh0WixsLS0pLGE/YS5uZXh0Wj1pOnQ9aSxpLnByZXZaPWEsYT1pO3I9bn1hLm5leHRaPW51bGwsYyo9Mn13aGlsZShvPjEpfShpKX0odCxuLGksZik7Zm9yKHZhciBkLGcsdj10O3QucHJldiE9PXQubmV4dDspaWYoZD10LnByZXYsZz10Lm5leHQsZj9sKHQsbixpLGYpOnModCkpZS5wdXNoKGQuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChnLmkvciksayh0KSx0PWcubmV4dCx2PWcubmV4dDtlbHNlIGlmKCh0PWcpPT09dil7aD8xPT09aD9vKHQ9Yyh0LGUsciksZSxyLG4saSxmLDIpOjI9PT1oJiZ1KHQsZSxyLG4saSxmKTpvKGEodCksZSxyLG4saSxmLDEpO2JyZWFrfX19ZnVuY3Rpb24gcyh0KXt2YXIgZT10LnByZXYscj10LG49dC5uZXh0O2lmKG0oZSxyLG4pPj0wKXJldHVybiExO2Zvcih2YXIgaT10Lm5leHQubmV4dDtpIT09dC5wcmV2Oyl7aWYoZyhlLngsZS55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmbShpLnByZXYsaSxpLm5leHQpPj0wKXJldHVybiExO2k9aS5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIGwodCxlLHIsbil7dmFyIGk9dC5wcmV2LGE9dCxvPXQubmV4dDtpZihtKGksYSxvKT49MClyZXR1cm4hMTtmb3IodmFyIHM9aS54PGEueD9pLng8by54P2kueDpvLng6YS54PG8ueD9hLng6by54LGw9aS55PGEueT9pLnk8by55P2kueTpvLnk6YS55PG8ueT9hLnk6by55LGM9aS54PmEueD9pLng+by54P2kueDpvLng6YS54Pm8ueD9hLng6by54LHU9aS55PmEueT9pLnk+by55P2kueTpvLnk6YS55Pm8ueT9hLnk6by55LGY9cChzLGwsZSxyLG4pLGg9cChjLHUsZSxyLG4pLGQ9dC5wcmV2Wix2PXQubmV4dFo7ZCYmZC56Pj1mJiZ2JiZ2Lno8PWg7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZtKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7aWYoZD1kLnByZXZaLHYhPT10LnByZXYmJnYhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnksdi54LHYueSkmJm0odi5wcmV2LHYsdi5uZXh0KT49MClyZXR1cm4hMTt2PXYubmV4dFp9Zm9yKDtkJiZkLno+PWY7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZtKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLnByZXZafWZvcig7diYmdi56PD1oOyl7aWYodiE9PXQucHJldiYmdiE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSx2Lngsdi55KSYmbSh2LnByZXYsdix2Lm5leHQpPj0wKXJldHVybiExO3Y9di5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj10O2Rve3ZhciBpPW4ucHJldixhPW4ubmV4dC5uZXh0OyF5KGksYSkmJngoaSxuLG4ubmV4dCxhKSYmYihpLGEpJiZiKGEsaSkmJihlLnB1c2goaS5pL3IpLGUucHVzaChuLmkvciksZS5wdXNoKGEuaS9yKSxrKG4pLGsobi5uZXh0KSxuPXQ9YSksbj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiBufWZ1bmN0aW9uIHUodCxlLHIsbixpLHMpe3ZhciBsPXQ7ZG97Zm9yKHZhciBjPWwubmV4dC5uZXh0O2MhPT1sLnByZXY7KXtpZihsLmkhPT1jLmkmJnYobCxjKSl7dmFyIHU9XyhsLGMpO3JldHVybiBsPWEobCxsLm5leHQpLHU9YSh1LHUubmV4dCksbyhsLGUscixuLGkscyksdm9pZCBvKHUsZSxyLG4saSxzKX1jPWMubmV4dH1sPWwubmV4dH13aGlsZShsIT09dCl9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIGgodCxlKXtpZihlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9dC54LGE9dC55LG89LTEvMDtkb3tpZihhPD1uLnkmJmE+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7dmFyIHM9bi54KyhhLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9aSYmcz5vKXtpZihvPXMscz09PWkpe2lmKGE9PT1uLnkpcmV0dXJuIG47aWYoYT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gci5wcmV2O3ZhciBsLGM9cix1PXIueCxmPXIueSxoPTEvMDtuPXIubmV4dDtmb3IoO24hPT1jOylpPj1uLngmJm4ueD49dSYmaSE9PW4ueCYmZyhhPGY/aTpvLGEsdSxmLGE8Zj9vOmksYSxuLngsbi55KSYmKChsPU1hdGguYWJzKGEtbi55KS8oaS1uLngpKTxofHxsPT09aCYmbi54PnIueCkmJmIobix0KSYmKHI9bixoPWwpLG49bi5uZXh0O3JldHVybiByfSh0LGUpKXt2YXIgcj1fKGUsdCk7YShyLHIubmV4dCl9fWZ1bmN0aW9uIHAodCxlLHIsbixpKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LXIpKmkpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLW4pKmkpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQscj10O2Rve2UueDxyLngmJihyPWUpLGU9ZS5uZXh0fXdoaWxlKGUhPT10KTtyZXR1cm4gcn1mdW5jdGlvbiBnKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuKGktbykqKGUtcyktKHQtbykqKGEtcyk+PTAmJih0LW8pKihuLXMpLShyLW8pKihlLXMpPj0wJiYoci1vKSooYS1zKS0oaS1vKSoobi1zKT49MH1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZ4KHIsci5uZXh0LHQsZSkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiExfSh0LGUpJiZiKHQsZSkmJmIoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4oZS55LXQueSkqKHIueC1lLngpLShlLngtdC54KSooci55LWUueSl9ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiEhKHkodCxlKSYmeShyLG4pfHx5KHQsbikmJnkocixlKSl8fG0odCxlLHIpPjAhPW0odCxlLG4pPjAmJm0ocixuLHQpPjAhPW0ocixuLGUpPjB9ZnVuY3Rpb24gYih0LGUpe3JldHVybiBtKHQucHJldix0LHQubmV4dCk8MD9tKHQsZSx0Lm5leHQpPj0wJiZtKHQsdC5wcmV2LGUpPj0wOm0odCxlLHQucHJldik8MHx8bSh0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1uZXcgVCh0LmksdC54LHQueSksbj1uZXcgVChlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGEubmV4dD1uLG4ucHJldj1hLG59ZnVuY3Rpb24gdyh0LGUscixuKXt2YXIgaT1uZXcgVCh0LGUscik7cmV0dXJuIG4/KGkubmV4dD1uLm5leHQsaS5wcmV2PW4sbi5uZXh0LnByZXY9aSxuLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIGsodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBUKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBBKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZSxvPXItbjthPHI7YSs9bilpKz0odFtvXS10W2FdKSoodFthKzFdK3RbbysxXSksbz1hO3JldHVybiBpfWUuZXhwb3J0cz1uLGUuZXhwb3J0cy5kZWZhdWx0PW4sbi5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKEEodCwwLGEscikpO2lmKGkpZm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7cysrKXt2YXIgYz1lW3NdKnIsdT1zPGwtMT9lW3MrMV0qcjp0Lmxlbmd0aDtvLT1NYXRoLmFicyhBKHQsYyx1LHIpKX12YXIgZj0wO2ZvcihzPTA7czxuLmxlbmd0aDtzKz0zKXt2YXIgaD1uW3NdKnIscD1uW3MrMV0qcixkPW5bcysyXSpyO2YrPU1hdGguYWJzKCh0W2hdLXRbZF0pKih0W3ArMV0tdFtoKzFdKS0odFtoXS10W3BdKSoodFtkKzFdLXRbaCsxXSkpfXJldHVybiAwPT09byYmMD09PWY/MDpNYXRoLmFicygoZi1vKS9vKX0sbi5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn19LHt9XSwxNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoIm51bWJlciIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtlPU1hdGgubWF4KGUsYVswXSxhWzFdKX1lPTErKDB8ZSl9ZXw9MDtmb3IodmFyIG89bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW9baV09W107Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtvW2FbMF1dLnB1c2goYVsxXSksb1thWzFdXS5wdXNoKGFbMF0pfWZvcih2YXIgcz0wO3M8ZTsrK3MpbihvW3NdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO3JldHVybiBvfTt2YXIgbj10KCJ1bmlxIil9LHt1bmlxOjUzMX1dLDE2NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9W10saT1bXSxhPVtdLG89e30scz1bXTtmdW5jdGlvbiBsKHQpe3ZhciByLG4sdT0hMTtmb3IoaS5wdXNoKHQpLGFbdF09ITAscj0wO3I8c1t0XS5sZW5ndGg7cisrKShuPXNbdF1bcl0pPT09ZT8oYyhlLGkpLHU9ITApOmFbbl18fCh1PWwobikpO2lmKHUpIWZ1bmN0aW9uIHQoZSl7YVtlXT0hMSxvLmhhc093blByb3BlcnR5KGUpJiZPYmplY3Qua2V5cyhvW2VdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2RlbGV0ZSBvW2VdW3JdLGFbcl0mJnQocil9KX0odCk7ZWxzZSBmb3Iocj0wO3I8c1t0XS5sZW5ndGg7cisrKXtuPXNbdF1bcl07dmFyIGY9b1tuXTtmfHwoZj17fSxvW25dPWYpLGZbbl09ITB9cmV0dXJuIGkucG9wKCksdX1mdW5jdGlvbiBjKHQsZSl7dmFyIG49W10uY29uY2F0KGUpLmNvbmNhdCh0KTtyLnB1c2gobil9ZnVuY3Rpb24gdShlKXshZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspcjxlJiYodFtyXT1bXSksdFtyXT10W3JdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdD49ZX0pfShlKTtmb3IodmFyIHIsaT1uKHQpLmNvbXBvbmVudHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSksYT0xLzAsbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8aVtvXS5sZW5ndGg7cysrKWlbb11bc108YSYmKGE9aVtvXVtzXSxyPW8pO3ZhciBsPWlbcl07cmV0dXJuISFsJiZ7bGVhc3RWZXJ0ZXg6YSxhZGpMaXN0OnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuLTE9PT1sLmluZGV4T2YoZSk/W106dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1sLmluZGV4T2YodCl9KX0pfX1lPTA7Zm9yKHZhciBmPXQubGVuZ3RoO2U8Zjspe3ZhciBoPXUoZSk7aWYoZT1oLmxlYXN0VmVydGV4LHM9aC5hZGpMaXN0KXtmb3IodmFyIHA9MDtwPHMubGVuZ3RoO3ArKylmb3IodmFyIGQ9MDtkPHNbcF0ubGVuZ3RoO2QrKyl7dmFyIGc9c1twXVtkXTthWytnXT0hMSxvW2ddPXt9fWwoZSksZSs9MX1lbHNlIGU9Zn1yZXR1cm4gcn19LHsic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiOjUxNH1dLDE2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzKS5sZW5ndGg9MCx0aGlzfX0seyIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjE5N31dLDE2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/QXJyYXkuZnJvbTp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxNjcsIi4vc2hpbSI6MTY4fV0sMTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUscj1BcnJheS5mcm9tO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZT1yKHQ9WyJyYXoiLCJkd2EiXSksQm9vbGVhbihlJiZlIT09dCYmImR3YSI9PT1lWzFdKSl9fSx7fV0sMTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcixpPXQoIi4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGE9dCgiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb24iKSxvPXQoIi4uLy4uL251bWJlci90by1wb3MtaW50ZWdlciIpLHM9dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIiksbD10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKSxjPXQoIi4uLy4uL29iamVjdC9pcy12YWx1ZSIpLHU9dCgiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyIpLGY9QXJyYXkuaXNBcnJheSxoPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLHA9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9LGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGcsdixtLHkseCxiLF8sdyxrPWFyZ3VtZW50c1sxXSxUPWFyZ3VtZW50c1syXTtpZih0PU9iamVjdChsKHQpKSxjKGspJiZzKGspLHRoaXMmJnRoaXMhPT1BcnJheSYmYSh0aGlzKSllPXRoaXM7ZWxzZXtpZighayl7aWYoaSh0KSlyZXR1cm4gMSE9PShtPXQubGVuZ3RoKT9BcnJheS5hcHBseShudWxsLHQpOigodj1uZXcgQXJyYXkoMSkpWzBdPXRbMF0sdik7aWYoZih0KSl7Zm9yKHY9bmV3IEFycmF5KG09dC5sZW5ndGgpLHI9MDtyPG07KytyKXZbcl09dFtyXTtyZXR1cm4gdn19dj1bXX1pZighZih0KSlpZih2b2lkIDAhPT0oXz10W25dKSl7Zm9yKHg9cyhfKS5jYWxsKHQpLGUmJih2PW5ldyBlKSxiPXgubmV4dCgpLHI9MDshYi5kb25lOyl3PWs/aC5jYWxsKGssVCxiLnZhbHVlLHIpOmIudmFsdWUsZT8ocC52YWx1ZT13LGQodixyLHApKTp2W3JdPXcsYj14Lm5leHQoKSwrK3I7bT1yfWVsc2UgaWYodSh0KSl7Zm9yKG09dC5sZW5ndGgsZSYmKHY9bmV3IGUpLHI9MCxnPTA7cjxtOysrcil3PXRbcl0scisxPG0mJih5PXcuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZ5PD01NjMxOSYmKHcrPXRbKytyXSksdz1rP2guY2FsbChrLFQsdyxnKTp3LGU/KHAudmFsdWU9dyxkKHYsZyxwKSk6dltnXT13LCsrZzttPWd9aWYodm9pZCAwPT09bSlmb3IobT1vKHQubGVuZ3RoKSxlJiYodj1uZXcgZShtKSkscj0wO3I8bTsrK3Ipdz1rP2guY2FsbChrLFQsdFtyXSxyKTp0W3JdLGU/KHAudmFsdWU9dyxkKHYscixwKSk6dltyXT13O3JldHVybiBlJiYocC52YWx1ZT1udWxsLHYubGVuZ3RoPW0pLHZ9fSx7Ii4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTY5LCIuLi8uLi9mdW5jdGlvbi9pcy1mdW5jdGlvbiI6MTcwLCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXIiOjE3NiwiLi4vLi4vb2JqZWN0L2lzLXZhbHVlIjoxODYsIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZSI6MTk1LCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjE5NywiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyI6MjAxLCJlczYtc3ltYm9sIjoyMTF9XSwxNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHQpPT09aX19LHt9XSwxNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbCh0KCIuL25vb3AiKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZuLmNhbGwodCk9PT1pfX0seyIuL25vb3AiOjE3MX1dLDE3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sMTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9NYXRoLnNpZ246dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTczLCIuL3NoaW0iOjE3NH1dLDE3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnNpZ247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJigxPT09dCgxMCkmJi0xPT09dCgtMjApKX19LHt9XSwxNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PU51bWJlcih0KSxpc05hTih0KXx8MD09PXQ/dDp0PjA/MTotMX19LHt9XSwxNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbWF0aC9zaWduIiksaT1NYXRoLmFicyxhPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0KT8wOjAhPT0odD1OdW1iZXIodCkpJiZpc0Zpbml0ZSh0KT9uKHQpKmEoaSh0KSk6dH19LHsiLi4vbWF0aC9zaWduIjoxNzJ9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90by1pbnRlZ2VyIiksaT1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkoMCxuKHQpKX19LHsiLi90by1pbnRlZ2VyIjoxNzV9XSwxNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZC1jYWxsYWJsZSIpLGk9dCgiLi92YWxpZC12YWx1ZSIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsbz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxzPU9iamVjdC5rZXlzLGw9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixjKXt2YXIgdSxmPWFyZ3VtZW50c1syXSxoPWFyZ3VtZW50c1szXTtyZXR1cm4gcj1PYmplY3QoaShyKSksbihjKSx1PXMociksaCYmdS5zb3J0KCJmdW5jdGlvbiI9PXR5cGVvZiBoP2EuY2FsbChoLHIpOnZvaWQgMCksImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXVbdF0pLG8uY2FsbCh0LHUsZnVuY3Rpb24odCxuKXtyZXR1cm4gbC5jYWxsKHIsdCk/by5jYWxsKGMsZixyW3RdLHQscixuKTplfSl9fX0seyIuL3ZhbGlkLWNhbGxhYmxlIjoxOTUsIi4vdmFsaWQtdmFsdWUiOjE5N31dLDE3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LmFzc2lnbjp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxNzksIi4vc2hpbSI6MTgwfV0sMTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmFzc2lnbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmKGUodD17Zm9vOiJyYXoifSx7YmFyOiJkd2EifSx7dHJ6eToidHJ6eSJ9KSx0LmZvbyt0LmJhcit0LnRyenk9PT0icmF6ZHdhdHJ6eSIpfX0se31dLDE4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9rZXlzIiksaT10KCIuLi92YWxpZC12YWx1ZSIpLGE9TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxzLGw9YShhcmd1bWVudHMubGVuZ3RoLDIpO2Zvcih0PU9iamVjdChpKHQpKSxzPWZ1bmN0aW9uKG4pe3RyeXt0W25dPWVbbl19Y2F0Y2godCl7cnx8KHI9dCl9fSxvPTE7bzxsOysrbyllPWFyZ3VtZW50c1tvXSxuKGUpLmZvckVhY2gocyk7aWYodm9pZCAwIT09cil0aHJvdyByO3JldHVybiB0fX0seyIuLi9rZXlzIjoxODcsIi4uL3ZhbGlkLXZhbHVlIjoxOTd9XSwxODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYXJyYXkvZnJvbSIpLGk9dCgiLi9hc3NpZ24iKSxhPXQoIi4vdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGEodCkpLHI9YXJndW1lbnRzWzFdLG89T2JqZWN0KGFyZ3VtZW50c1syXSk7aWYoZSE9PXQmJiFyKXJldHVybiBlO3ZhciBzPXt9O3JldHVybiByP24ocixmdW5jdGlvbihlKXsoby5lbnN1cmV8fGUgaW4gdCkmJihzW2VdPXRbZV0pfSk6aShzLHQpLHN9fSx7Ii4uL2FycmF5L2Zyb20iOjE2NiwiLi9hc3NpZ24iOjE3OCwiLi92YWxpZC12YWx1ZSI6MTk3fV0sMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYSxvLHM9T2JqZWN0LmNyZWF0ZTt0KCIuL3NldC1wcm90b3R5cGUtb2YvaXMtaW1wbGVtZW50ZWQiKSgpfHwobj10KCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSIpKSxlLmV4cG9ydHM9bj8xIT09bi5sZXZlbD9zOihpPXt9LGE9e30sbz17Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09Il9fcHJvdG9fXyIhPT10P286e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJudWxsUG9seWZpbGwiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSx2YWx1ZTppfSksZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhudWxsPT09dD9pOnQsZSl9KTpzfSx7Ii4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZCI6MTkzLCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSI6MTk0fV0sMTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL19pdGVyYXRlIikoImZvckVhY2giKX0seyIuL19pdGVyYXRlIjoxNzd9XSwxODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fX0se31dLDE4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksaT17ZnVuY3Rpb246ITAsb2JqZWN0OiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCkmJmlbdHlwZW9mIHRdfHwhMX19LHsiLi9pcy12YWx1ZSI6MTg2fV0sMTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Z1bmN0aW9uL25vb3AiKSgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PW4mJm51bGwhPT10fX0seyIuLi9mdW5jdGlvbi9ub29wIjoxNzF9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP09iamVjdC5rZXlzOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE4OCwiLi9zaGltIjoxODl9XSwxODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3Qua2V5cygicHJpbWl0aXZlIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0se31dLDE4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9pcy12YWx1ZSIpLGk9T2JqZWN0LmtleXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCk/T2JqZWN0KHQpOnQpfX0seyIuLi9pcy12YWx1ZSI6MTg2fV0sMTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdmFsaWQtY2FsbGFibGUiKSxpPXQoIi4vZm9yLWVhY2giKSxhPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9LG89YXJndW1lbnRzWzJdO3JldHVybiBuKGUpLGkodCxmdW5jdGlvbih0LG4saSxzKXtyW25dPWEuY2FsbChlLG8sdCxuLGkscyl9KSxyfX0seyIuL2Zvci1lYWNoIjoxODMsIi4vdmFsaWQtY2FsbGFibGUiOjE5NX1dLDE5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksaT1BcnJheS5wcm90b3R5cGUuZm9yRWFjaCxhPU9iamVjdC5jcmVhdGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEobnVsbCk7cmV0dXJuIGkuY2FsbChhcmd1bWVudHMsZnVuY3Rpb24odCl7bih0KSYmZnVuY3Rpb24odCxlKXt2YXIgcjtmb3IociBpbiB0KWVbcl09dFtyXX0oT2JqZWN0KHQpLGUpfSksZX19LHsiLi9pcy12YWx1ZSI6MTg2fV0sMTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3Quc2V0UHJvdG90eXBlT2Y6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTkzLCIuL3NoaW0iOjE5NH1dLDE5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlLGk9T2JqZWN0LmdldFByb3RvdHlwZU9mLGE9e307ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mLGU9YXJndW1lbnRzWzBdfHxuO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZpKHQoZShudWxsKSxhKSk9PT1hfX0se31dLDE5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbyxzPXQoIi4uL2lzLW9iamVjdCIpLGw9dCgiLi4vdmFsaWQtdmFsdWUiKSxjPU9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZix1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9O249ZnVuY3Rpb24odCxlKXtpZihsKHQpLG51bGw9PT1lfHxzKGUpKXJldHVybiB0O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3RvdHlwZSBtdXN0IGJlIG51bGwgb3IgYW4gb2JqZWN0Iil9LGUuZXhwb3J0cz0oaT1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXt9LG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKTtpZihuKXt0cnl7KHQ9bi5zZXQpLmNhbGwoZSxyKX1jYXRjaCh0KXt9aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cilyZXR1cm57c2V0OnQsbGV2ZWw6Mn19cmV0dXJuIGUuX19wcm90b19fPXIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cj97bGV2ZWw6Mn06KChlPXt9KS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yJiZ7bGV2ZWw6MX0pfSgpKT8oMj09PWkubGV2ZWw/aS5zZXQ/KG89aS5zZXQsYT1mdW5jdGlvbih0LGUpe3JldHVybiBvLmNhbGwobih0LGUpLGUpLHR9KTphPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKS5fX3Byb3RvX189ZSx0fTphPWZ1bmN0aW9uIHQoZSxyKXt2YXIgaTtyZXR1cm4gbihlLHIpLChpPWMuY2FsbCh0Lm51bGxQb2x5ZmlsbCxlKSkmJmRlbGV0ZSB0Lm51bGxQb2x5ZmlsbC5fX3Byb3RvX18sbnVsbD09PXImJihyPXQubnVsbFBvbHlmaWxsKSxlLl9fcHJvdG9fXz1yLGkmJnUodC5udWxsUG9seWZpbGwsIl9fcHJvdG9fXyIsZiksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImxldmVsIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6aS5sZXZlbH0pKTpudWxsLHQoIi4uL2NyZWF0ZSIpfSx7Ii4uL2NyZWF0ZSI6MTgyLCIuLi9pcy1vYmplY3QiOjE4NSwiLi4vdmFsaWQtdmFsdWUiOjE5N31dLDE5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gdH19LHt9XSwxOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1vYmplY3QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGFuIE9iamVjdCIpO3JldHVybiB0fX0seyIuL2lzLW9iamVjdCI6MTg1fV0sMTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiB0fX0seyIuL2lzLXZhbHVlIjoxODZ9XSwxOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP1N0cmluZy5wcm90b3R5cGUuY29udGFpbnM6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTk5LCIuL3NoaW0iOjIwMH1dLDE5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0icmF6ZHdhdHJ6eSI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4uY29udGFpbnMmJighMD09PW4uY29udGFpbnMoImR3YSIpJiYhMT09PW4uY29udGFpbnMoImZvbyIpKX19LHt9XSwyMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxhcmd1bWVudHNbMV0pPi0xfX0se31dLDIwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9bi5jYWxsKCIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHx0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0IGluc3RhbmNlb2YgU3RyaW5nfHxuLmNhbGwodCk9PT1pKXx8ITF9fSx7fV0sMjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksaT1NYXRoLnJhbmRvbTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdDtkb3t0PWkoKS50b1N0cmluZygzNikuc2xpY2UoMil9d2hpbGUoblt0XSk7cmV0dXJuIHR9fSx7fV0sMjAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyIpLG89dCgiZCIpLHM9dCgiZXM2LXN5bWJvbCIpLGw9dCgiLi8iKSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7bC5jYWxsKHRoaXMsdCksZT1lP2EuY2FsbChlLCJrZXkrdmFsdWUiKT8ia2V5K3ZhbHVlIjphLmNhbGwoZSwia2V5Iik/ImtleSI6InZhbHVlIjoidmFsdWUiLGModGhpcywiX19raW5kX18iLG8oIiIsZSkpfSxpJiZpKG4sbCksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobC5wcm90b3R5cGUse19yZXNvbHZlOm8oZnVuY3Rpb24odCl7cmV0dXJuInZhbHVlIj09PXRoaXMuX19raW5kX18/dGhpcy5fX2xpc3RfX1t0XToia2V5K3ZhbHVlIj09PXRoaXMuX19raW5kX18/W3QsdGhpcy5fX2xpc3RfX1t0XV06dH0pfSksYyhuLnByb3RvdHlwZSxzLnRvU3RyaW5nVGFnLG8oImMiLCJBcnJheSBJdGVyYXRvciIpKX0seyIuLyI6MjA2LGQ6MTQxLCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoxOTIsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjE5OCwiZXM2LXN5bWJvbCI6MjExfV0sMjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCIuL2dldCIpLHM9QXJyYXkuaXNBcnJheSxsPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGM9QXJyYXkucHJvdG90eXBlLnNvbWU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxmLGgscCxkLGcsdixtPWFyZ3VtZW50c1syXTtpZihzKHQpfHxuKHQpP3I9ImFycmF5IjphKHQpP3I9InN0cmluZyI6dD1vKHQpLGkoZSksZj1mdW5jdGlvbigpe2g9ITB9LCJhcnJheSIhPT1yKWlmKCJzdHJpbmciIT09cilmb3IodT10Lm5leHQoKTshdS5kb25lOyl7aWYobC5jYWxsKGUsbSx1LnZhbHVlLGYpLGgpcmV0dXJuO3U9dC5uZXh0KCl9ZWxzZSBmb3IoZD10Lmxlbmd0aCxwPTA7cDxkJiYoZz10W3BdLHArMTxkJiYodj1nLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmdjw9NTYzMTkmJihnKz10WysrcF0pLGwuY2FsbChlLG0sZyxmKSwhaCk7KytwKTtlbHNlIGMuY2FsbCh0LGZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwoZSxtLHQsZiksaH0pfX0seyIuL2dldCI6MjA1LCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTY5LCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSI6MTk1LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjIwMX1dLDIwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGk9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksYT10KCIuL2FycmF5Iiksbz10KCIuL3N0cmluZyIpLHM9dCgiLi92YWxpZC1pdGVyYWJsZSIpLGw9dCgiZXM2LXN5bWJvbCIpLml0ZXJhdG9yO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcyh0KVtsXT90W2xdKCk6bih0KT9uZXcgYSh0KTppKHQpP25ldyBvKHQpOm5ldyBhKHQpfX0seyIuL2FycmF5IjoyMDMsIi4vc3RyaW5nIjoyMDgsIi4vdmFsaWQtaXRlcmFibGUiOjIwOSwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjE2OSwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIjoyMDEsImVzNi1zeW1ib2wiOjIxMX1dLDIwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvYXJyYXkvIy9jbGVhciIpLGE9dCgiZXM1LWV4dC9vYmplY3QvYXNzaWduIiksbz10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLHM9dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSxsPXQoImQiKSxjPXQoImQvYXV0by1iaW5kIiksdT10KCJlczYtc3ltYm9sIiksZj1PYmplY3QuZGVmaW5lUHJvcGVydHksaD1PYmplY3QuZGVmaW5lUHJvcGVydGllcztlLmV4cG9ydHM9bj1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7aCh0aGlzLHtfX2xpc3RfXzpsKCJ3IixzKHQpKSxfX2NvbnRleHRfXzpsKCJ3IixlKSxfX25leHRJbmRleF9fOmwoInciLDApfSksZSYmKG8oZS5vbiksZS5vbigiX2FkZCIsdGhpcy5fb25BZGQpLGUub24oIl9kZWxldGUiLHRoaXMuX29uRGVsZXRlKSxlLm9uKCJfY2xlYXIiLHRoaXMuX29uQ2xlYXIpKX0sZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGgobi5wcm90b3R5cGUsYSh7X25leHQ6bChmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19yZWRvX18mJnZvaWQgMCE9PSh0PXRoaXMuX19yZWRvX18uc2hpZnQoKSk/dDp0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xpc3RfXy5sZW5ndGg/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pLG5leHQ6bChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKX0pLF9jcmVhdGVSZXN1bHQ6bChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD97ZG9uZTohMCx2YWx1ZTp2b2lkIDB9Ontkb25lOiExLHZhbHVlOnRoaXMuX3Jlc29sdmUodCl9fSksX3Jlc29sdmU6bChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2xpc3RfX1t0XX0pLF91bkJpbmQ6bChmdW5jdGlvbigpe3RoaXMuX19saXN0X189bnVsbCxkZWxldGUgdGhpcy5fX3JlZG9fXyx0aGlzLl9fY29udGV4dF9fJiYodGhpcy5fX2NvbnRleHRfXy5vZmYoIl9hZGQiLHRoaXMuX29uQWRkKSx0aGlzLl9fY29udGV4dF9fLm9mZigiX2RlbGV0ZSIsdGhpcy5fb25EZWxldGUpLHRoaXMuX19jb250ZXh0X18ub2ZmKCJfY2xlYXIiLHRoaXMuX29uQ2xlYXIpLHRoaXMuX19jb250ZXh0X189bnVsbCl9KSx0b1N0cmluZzpsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIisodGhpc1t1LnRvU3RyaW5nVGFnXXx8Ik9iamVjdCIpKyJdIn0pfSxjKHtfb25BZGQ6bChmdW5jdGlvbih0KXt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgrK3RoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fPyh0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlPj10JiYodGhpcy5fX3JlZG9fX1tyXT0rK2UpfSx0aGlzKSx0aGlzLl9fcmVkb19fLnB1c2godCkpOmYodGhpcywiX19yZWRvX18iLGwoImMiLFt0XSkpKX0pLF9vbkRlbGV0ZTpsKGZ1bmN0aW9uKHQpe3ZhciBlO3Q+PXRoaXMuX19uZXh0SW5kZXhfX3x8KC0tdGhpcy5fX25leHRJbmRleF9fLHRoaXMuX19yZWRvX18mJigtMSE9PShlPXRoaXMuX19yZWRvX18uaW5kZXhPZih0KSkmJnRoaXMuX19yZWRvX18uc3BsaWNlKGUsMSksdGhpcy5fX3JlZG9fXy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7ZT50JiYodGhpcy5fX3JlZG9fX1tyXT0tLWUpfSx0aGlzKSkpfSksX29uQ2xlYXI6bChmdW5jdGlvbigpe3RoaXMuX19yZWRvX18mJmkuY2FsbCh0aGlzLl9fcmVkb19fKSx0aGlzLl9fbmV4dEluZGV4X189MH0pfSkpKSxmKG4ucHJvdG90eXBlLHUuaXRlcmF0b3IsbChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpfSx7ZDoxNDEsImQvYXV0by1iaW5kIjoxNDAsImVzNS1leHQvYXJyYXkvIy9jbGVhciI6MTY1LCJlczUtZXh0L29iamVjdC9hc3NpZ24iOjE3OCwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjE5NSwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiOjE5NywiZXM2LXN5bWJvbCI6MjExfV0sMjA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCJlczYtc3ltYm9sIikuaXRlcmF0b3Iscz1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighIXModCl8fCghIWEodCl8fCghIW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0W29dKSkpfX0seyJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTY5LCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSI6MTg2LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjIwMSwiZXM2LXN5bWJvbCI6MjExfV0sMjA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGE9dCgiZCIpLG89dCgiZXM2LXN5bWJvbCIpLHM9dCgiLi8iKSxsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO3Q9U3RyaW5nKHQpLHMuY2FsbCh0aGlzLHQpLGwodGhpcywiX19sZW5ndGhfXyIsYSgiIix0Lmxlbmd0aCkpfSxpJiZpKG4scyksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocy5wcm90b3R5cGUse19uZXh0OmEoZnVuY3Rpb24oKXtpZih0aGlzLl9fbGlzdF9fKXJldHVybiB0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xlbmd0aF9fP3RoaXMuX19uZXh0SW5kZXhfXysrOnZvaWQgdGhpcy5fdW5CaW5kKCl9KSxfcmVzb2x2ZTphKGZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fX2xpc3RfX1t0XTtyZXR1cm4gdGhpcy5fX25leHRJbmRleF9fPT09dGhpcy5fX2xlbmd0aF9fP3I6KGU9ci5jaGFyQ29kZUF0KDApKT49NTUyOTYmJmU8PTU2MzE5P3IrdGhpcy5fX2xpc3RfX1t0aGlzLl9fbmV4dEluZGV4X18rK106cn0pfSksbChuLnByb3RvdHlwZSxvLnRvU3RyaW5nVGFnLGEoImMiLCJTdHJpbmcgSXRlcmF0b3IiKSl9LHsiLi8iOjIwNixkOjE0MSwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiI6MTkyLCJlczYtc3ltYm9sIjoyMTF9XSwyMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1pdGVyYWJsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gdH19LHsiLi9pcy1pdGVyYWJsZSI6MjA3fV0sMjEwOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKG4saSl7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/ZS5leHBvcnRzPW4oKTp0LkVTNlByb21pc2U9bigpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9dmFyIHI9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LGE9MCxvPXZvaWQgMCxzPXZvaWQgMCxsPWZ1bmN0aW9uKHQsZSl7Z1thXT10LGdbYSsxXT1lLDI9PT0oYSs9MikmJihzP3Modik6XygpKX07dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCx1PWN8fHt9LGY9dS5NdXRhdGlvbk9ic2VydmVyfHx1LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsaD0idW5kZWZpbmVkIj09dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgbiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChuKSxwPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbDtmdW5jdGlvbiBkKCl7dmFyIHQ9c2V0VGltZW91dDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh2LDEpfX12YXIgZz1uZXcgQXJyYXkoMWUzKTtmdW5jdGlvbiB2KCl7Zm9yKHZhciB0PTA7dDxhO3QrPTIpeygwLGdbdF0pKGdbdCsxXSksZ1t0XT12b2lkIDAsZ1t0KzFdPXZvaWQgMH1hPTB9dmFyIG0seSx4LGIsXz12b2lkIDA7ZnVuY3Rpb24gdyh0LGUpe3ZhciByPWFyZ3VtZW50cyxuPXRoaXMsaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihBKTt2b2lkIDA9PT1pW1RdJiZVKGkpO3ZhciBhLG89bi5fc3RhdGU7cmV0dXJuIG8/KGE9cltvLTFdLGwoZnVuY3Rpb24oKXtyZXR1cm4gaihvLGksYSxuLl9yZXN1bHQpfSkpOlIobixpLHQsZSksaX1mdW5jdGlvbiBrKHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvcj09PXRoaXMpcmV0dXJuIHQ7dmFyIGU9bmV3IHRoaXMoQSk7cmV0dXJuIE8oZSx0KSxlfWg/Xz1mdW5jdGlvbigpe3JldHVybiBuLm5leHRUaWNrKHYpfTpmPyh5PTAseD1uZXcgZih2KSxiPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSx4Lm9ic2VydmUoYix7Y2hhcmFjdGVyRGF0YTohMH0pLF89ZnVuY3Rpb24oKXtiLmRhdGE9eT0rK3klMn0pOnA/KChtPW5ldyBNZXNzYWdlQ2hhbm5lbCkucG9ydDEub25tZXNzYWdlPXYsXz1mdW5jdGlvbigpe3JldHVybiBtLnBvcnQyLnBvc3RNZXNzYWdlKDApfSk6Xz12b2lkIDA9PT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3RyeXt2YXIgZT10KCJ2ZXJ0eCIpO3JldHVybiBvPWUucnVuT25Mb29wfHxlLnJ1bk9uQ29udGV4dCxmdW5jdGlvbigpe28odil9fWNhdGNoKHQpe3JldHVybiBkKCl9fSgpOmQoKTt2YXIgVD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO2Z1bmN0aW9uIEEoKXt9dmFyIE09dm9pZCAwLFM9MSxFPTIsQz1uZXcgQjtmdW5jdGlvbiBMKHQpe3RyeXtyZXR1cm4gdC50aGVufWNhdGNoKHQpe3JldHVybiBDLmVycm9yPXQsQ319ZnVuY3Rpb24geih0LHIsbil7ci5jb25zdHJ1Y3Rvcj09PXQuY29uc3RydWN0b3ImJm49PT13JiZyLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1rP2Z1bmN0aW9uKHQsZSl7ZS5fc3RhdGU9PT1TP0QodCxlLl9yZXN1bHQpOmUuX3N0YXRlPT09RT9QKHQsZS5fcmVzdWx0KTpSKGUsdm9pZCAwLGZ1bmN0aW9uKGUpe3JldHVybiBPKHQsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBQKHQsZSl9KX0odCxyKTpuPT09Qz9QKHQsQy5lcnJvcik6dm9pZCAwPT09bj9EKHQscik6ZShuKT9mdW5jdGlvbih0LGUscil7bChmdW5jdGlvbih0KXt2YXIgbj0hMSxpPWZ1bmN0aW9uKHQsZSxyLG4pe3RyeXt0LmNhbGwoZSxyLG4pfWNhdGNoKHQpe3JldHVybiB0fX0ocixlLGZ1bmN0aW9uKHIpe258fChuPSEwLGUhPT1yP08odCxyKTpEKHQscikpfSxmdW5jdGlvbihlKXtufHwobj0hMCxQKHQsZSkpfSx0Ll9sYWJlbCk7IW4mJmkmJihuPSEwLFAodCxpKSl9LHQpfSh0LHIsbik6RCh0LHIpfWZ1bmN0aW9uIE8odCxlKXt2YXIgcjt0PT09ZT9QKHQsbmV3IFR5cGVFcnJvcigiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKToiZnVuY3Rpb24iPT10eXBlb2Yocj1lKXx8Im9iamVjdCI9PXR5cGVvZiByJiZudWxsIT09cj96KHQsZSxMKGUpKTpEKHQsZSl9ZnVuY3Rpb24gSSh0KXt0Ll9vbmVycm9yJiZ0Ll9vbmVycm9yKHQuX3Jlc3VsdCksRih0KX1mdW5jdGlvbiBEKHQsZSl7dC5fc3RhdGU9PT1NJiYodC5fcmVzdWx0PWUsdC5fc3RhdGU9UywwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZsKEYsdCkpfWZ1bmN0aW9uIFAodCxlKXt0Ll9zdGF0ZT09PU0mJih0Ll9zdGF0ZT1FLHQuX3Jlc3VsdD1lLGwoSSx0KSl9ZnVuY3Rpb24gUih0LGUscixuKXt2YXIgaT10Ll9zdWJzY3JpYmVycyxhPWkubGVuZ3RoO3QuX29uZXJyb3I9bnVsbCxpW2FdPWUsaVthK1NdPXIsaVthK0VdPW4sMD09PWEmJnQuX3N0YXRlJiZsKEYsdCl9ZnVuY3Rpb24gRih0KXt2YXIgZT10Ll9zdWJzY3JpYmVycyxyPXQuX3N0YXRlO2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBuPXZvaWQgMCxpPXZvaWQgMCxhPXQuX3Jlc3VsdCxvPTA7bzxlLmxlbmd0aDtvKz0zKW49ZVtvXSxpPWVbbytyXSxuP2oocixuLGksYSk6aShhKTt0Ll9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gQigpe3RoaXMuZXJyb3I9bnVsbH12YXIgTj1uZXcgQjtmdW5jdGlvbiBqKHQscixuLGkpe3ZhciBhPWUobiksbz12b2lkIDAscz12b2lkIDAsbD12b2lkIDAsYz12b2lkIDA7aWYoYSl7aWYoKG89ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2godCl7cmV0dXJuIE4uZXJyb3I9dCxOfX0obixpKSk9PT1OPyhjPSEwLHM9by5lcnJvcixvPW51bGwpOmw9ITAscj09PW8pcmV0dXJuIHZvaWQgUChyLG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4iKSl9ZWxzZSBvPWksbD0hMDtyLl9zdGF0ZSE9PU18fChhJiZsP08ocixvKTpjP1AocixzKTp0PT09Uz9EKHIsbyk6dD09PUUmJlAocixvKSl9dmFyIFY9MDtmdW5jdGlvbiBVKHQpe3RbVF09VisrLHQuX3N0YXRlPXZvaWQgMCx0Ll9yZXN1bHQ9dm9pZCAwLHQuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIHEodCxlKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPXQsdGhpcy5wcm9taXNlPW5ldyB0KEEpLHRoaXMucHJvbWlzZVtUXXx8VSh0aGlzLnByb21pc2UpLHIoZSk/KHRoaXMuX2lucHV0PWUsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWUubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9EKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoKSwwPT09dGhpcy5fcmVtYWluaW5nJiZEKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6UCh0aGlzLnByb21pc2UsbmV3IEVycm9yKCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXkiKSl9ZnVuY3Rpb24gSCh0KXt0aGlzW1RdPVYrKyx0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3N1YnNjcmliZXJzPVtdLEEhPT10JiYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvciIpfSgpLHRoaXMgaW5zdGFuY2VvZiBIP2Z1bmN0aW9uKHQsZSl7dHJ5e2UoZnVuY3Rpb24oZSl7Tyh0LGUpfSxmdW5jdGlvbihlKXtQKHQsZSl9KX1jYXRjaChlKXtQKHQsZSl9fSh0aGlzLHQpOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIil9KCkpfWZ1bmN0aW9uIEcoKXt2YXIgdD12b2lkIDA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBpKXQ9aTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZil0PXNlbGY7ZWxzZSB0cnl7dD1GdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKHQpe3Rocm93IG5ldyBFcnJvcigicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Iil9dmFyIGU9dC5Qcm9taXNlO2lmKGUpe3ZhciByPW51bGw7dHJ5e3I9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUucmVzb2x2ZSgpKX1jYXRjaCh0KXt9aWYoIltvYmplY3QgUHJvbWlzZV0iPT09ciYmIWUuY2FzdClyZXR1cm59dC5Qcm9taXNlPUh9cmV0dXJuIHEucHJvdG90eXBlLl9lbnVtZXJhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5sZW5ndGgsZT10aGlzLl9pbnB1dCxyPTA7dGhpcy5fc3RhdGU9PT1NJiZyPHQ7cisrKXRoaXMuX2VhY2hFbnRyeShlW3JdLHIpfSxxLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixuPXIucmVzb2x2ZTtpZihuPT09ayl7dmFyIGk9TCh0KTtpZihpPT09dyYmdC5fc3RhdGUhPT1NKXRoaXMuX3NldHRsZWRBdCh0Ll9zdGF0ZSxlLHQuX3Jlc3VsdCk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgaSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbZV09dDtlbHNlIGlmKHI9PT1IKXt2YXIgYT1uZXcgcihBKTt6KGEsdCxpKSx0aGlzLl93aWxsU2V0dGxlQXQoYSxlKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgcihmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pLGUpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG4odCksZSl9LHEucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucHJvbWlzZTtuLl9zdGF0ZT09PU0mJih0aGlzLl9yZW1haW5pbmctLSx0PT09RT9QKG4scik6dGhpcy5fcmVzdWx0W2VdPXIpLDA9PT10aGlzLl9yZW1haW5pbmcmJkQobix0aGlzLl9yZXN1bHQpfSxxLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztSKHQsdm9pZCAwLGZ1bmN0aW9uKHQpe3JldHVybiByLl9zZXR0bGVkQXQoUyxlLHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gci5fc2V0dGxlZEF0KEUsZSx0KX0pfSxILmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHEodGhpcyx0KS5wcm9taXNlfSxILnJhY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gcih0KT9uZXcgZShmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTA7YTxpO2ErKyllLnJlc29sdmUodFthXSkudGhlbihyLG4pfSk6bmV3IGUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZShuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuIikpfSl9LEgucmVzb2x2ZT1rLEgucmVqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzKEEpO3JldHVybiBQKGUsdCksZX0sSC5fc2V0U2NoZWR1bGVyPWZ1bmN0aW9uKHQpe3M9dH0sSC5fc2V0QXNhcD1mdW5jdGlvbih0KXtsPXR9LEguX2FzYXA9bCxILnByb3RvdHlwZT17Y29uc3RydWN0b3I6SCx0aGVuOncsY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbihudWxsLHQpfX0sRygpLEgucG9seWZpbGw9RyxILlByb21pc2U9SCxIfSl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjQ3NH1dLDIxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/U3ltYm9sOnQoIi4vcG9seWZpbGwiKX0seyIuL2lzLWltcGxlbWVudGVkIjoyMTIsIi4vcG9seWZpbGwiOjIxNH1dLDIxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17b2JqZWN0OiEwLHN5bWJvbDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbClyZXR1cm4hMTt0PVN5bWJvbCgidGVzdCBzeW1ib2wiKTt0cnl7U3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEhblt0eXBlb2YgU3ltYm9sLml0ZXJhdG9yXSYmKCEhblt0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlXSYmISFuW3R5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWddKX19LHt9XSwyMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKCJzeW1ib2wiPT10eXBlb2YgdHx8ISF0LmNvbnN0cnVjdG9yJiYoIlN5bWJvbCI9PT10LmNvbnN0cnVjdG9yLm5hbWUmJiJTeW1ib2wiPT09dFt0LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSkpfX0se31dLDIxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbyxzPXQoImQiKSxsPXQoIi4vdmFsaWRhdGUtc3ltYm9sIiksYz1PYmplY3QuY3JlYXRlLHU9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsZj1PYmplY3QuZGVmaW5lUHJvcGVydHksaD1PYmplY3QucHJvdG90eXBlLHA9YyhudWxsKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sKXtuPVN5bWJvbDt0cnl7U3RyaW5nKG4oKSksbz0hMH1jYXRjaCh0KXt9fXZhciBkLGc9KGQ9YyhudWxsKSxmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPTA7ZFt0KyhufHwiIildOykrK247cmV0dXJuIGRbdCs9bnx8IiJdPSEwLGYoaCxlPSJAQCIrdCxzLmdzKG51bGwsZnVuY3Rpb24odCl7cnx8KHI9ITAsZih0aGlzLGUscyh0KSkscj0hMSl9KSksZX0pO2E9ZnVuY3Rpb24odCl7aWYodGhpcyBpbnN0YW5jZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7cmV0dXJuIGkodCl9LGUuZXhwb3J0cz1pPWZ1bmN0aW9uIHQoZSl7dmFyIHI7aWYodGhpcyBpbnN0YW5jZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7cmV0dXJuIG8/bihlKToocj1jKGEucHJvdG90eXBlKSxlPXZvaWQgMD09PWU/IiI6U3RyaW5nKGUpLHUocix7X19kZXNjcmlwdGlvbl9fOnMoIiIsZSksX19uYW1lX186cygiIixnKGUpKX0pKX0sdShpLHtmb3I6cyhmdW5jdGlvbih0KXtyZXR1cm4gcFt0XT9wW3RdOnBbdF09aShTdHJpbmcodCkpfSksa2V5Rm9yOnMoZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGUgaW4gbCh0KSxwKWlmKHBbZV09PT10KXJldHVybiBlfSksaGFzSW5zdGFuY2U6cygiIixuJiZuLmhhc0luc3RhbmNlfHxpKCJoYXNJbnN0YW5jZSIpKSxpc0NvbmNhdFNwcmVhZGFibGU6cygiIixuJiZuLmlzQ29uY2F0U3ByZWFkYWJsZXx8aSgiaXNDb25jYXRTcHJlYWRhYmxlIikpLGl0ZXJhdG9yOnMoIiIsbiYmbi5pdGVyYXRvcnx8aSgiaXRlcmF0b3IiKSksbWF0Y2g6cygiIixuJiZuLm1hdGNofHxpKCJtYXRjaCIpKSxyZXBsYWNlOnMoIiIsbiYmbi5yZXBsYWNlfHxpKCJyZXBsYWNlIikpLHNlYXJjaDpzKCIiLG4mJm4uc2VhcmNofHxpKCJzZWFyY2giKSksc3BlY2llczpzKCIiLG4mJm4uc3BlY2llc3x8aSgic3BlY2llcyIpKSxzcGxpdDpzKCIiLG4mJm4uc3BsaXR8fGkoInNwbGl0IikpLHRvUHJpbWl0aXZlOnMoIiIsbiYmbi50b1ByaW1pdGl2ZXx8aSgidG9QcmltaXRpdmUiKSksdG9TdHJpbmdUYWc6cygiIixuJiZuLnRvU3RyaW5nVGFnfHxpKCJ0b1N0cmluZ1RhZyIpKSx1bnNjb3BhYmxlczpzKCIiLG4mJm4udW5zY29wYWJsZXN8fGkoInVuc2NvcGFibGVzIikpfSksdShhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6cyhpKSx0b1N0cmluZzpzKCIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uYW1lX199KX0pLHUoaS5wcm90b3R5cGUse3RvU3RyaW5nOnMoZnVuY3Rpb24oKXtyZXR1cm4iU3ltYm9sICgiK2wodGhpcykuX19kZXNjcmlwdGlvbl9fKyIpIn0pLHZhbHVlT2Y6cyhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMpfSl9KSxmKGkucHJvdG90eXBlLGkudG9QcmltaXRpdmUscygiIixmdW5jdGlvbigpe3ZhciB0PWwodGhpcyk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dC50b1N0cmluZygpfSkpLGYoaS5wcm90b3R5cGUsaS50b1N0cmluZ1RhZyxzKCJjIiwiU3ltYm9sIikpLGYoYS5wcm90b3R5cGUsaS50b1N0cmluZ1RhZyxzKCJjIixpLnByb3RvdHlwZVtpLnRvU3RyaW5nVGFnXSkpLGYoYS5wcm90b3R5cGUsaS50b1ByaW1pdGl2ZSxzKCJjIixpLnByb3RvdHlwZVtpLnRvUHJpbWl0aXZlXSkpfSx7Ii4vdmFsaWRhdGUtc3ltYm9sIjoyMTUsZDoxNDF9XSwyMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1zeW1ib2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgc3ltYm9sIik7cmV0dXJuIHR9fSx7Ii4vaXMtc3ltYm9sIjoyMTN9XSwyMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP1dlYWtNYXA6dCgiLi9wb2x5ZmlsbCIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIxNywiLi9wb2x5ZmlsbCI6MjE5fV0sMjE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFdlYWtNYXApcmV0dXJuITE7dHJ5e3Q9bmV3IFdlYWtNYXAoW1tlPXt9LCJvbmUiXSxbe30sInR3byJdLFt7fSwidGhyZWUiXV0pfWNhdGNoKHQpe3JldHVybiExfXJldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PVN0cmluZyh0KSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNldCYmKHQuc2V0KHt9LDEpPT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlbGV0ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmhhcyYmIm9uZSI9PT10LmdldChlKSkpKSl9fSx7fV0sMjE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCYmIltvYmplY3QgV2Vha01hcF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBXZWFrTWFwKX0se31dLDIxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiKSxhPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLW9iamVjdCIpLG89dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSxzPXQoImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxIiksbD10KCJkIiksYz10KCJlczYtaXRlcmF0b3IvZ2V0IiksdT10KCJlczYtaXRlcmF0b3IvZm9yLW9mIiksZj10KCJlczYtc3ltYm9sIikudG9TdHJpbmdUYWcsaD10KCIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZCIpLHA9QXJyYXkuaXNBcnJheSxkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxnPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdj1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7ZS5leHBvcnRzPW49ZnVuY3Rpb24oKXt2YXIgdCxlPWFyZ3VtZW50c1swXTtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO3JldHVybiB0PWgmJmkmJldlYWtNYXAhPT1uP2kobmV3IFdlYWtNYXAsdih0aGlzKSk6dGhpcyxudWxsIT1lJiYocChlKXx8KGU9YyhlKSkpLGQodCwiX193ZWFrTWFwRGF0YV9fIixsKCJjIiwiJHdlYWtNYXAkIitzKCkpKSxlPyh1KGUsZnVuY3Rpb24oZSl7byhlKSx0LnNldChlWzBdLGVbMV0pfSksdCk6dH0saCYmKGkmJmkobixXZWFrTWFwKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFdlYWtNYXAucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpsKG4pfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLHtkZWxldGU6bChmdW5jdGlvbih0KXtyZXR1cm4hIWcuY2FsbChhKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKSYmKGRlbGV0ZSB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXSwhMCl9KSxnZXQ6bChmdW5jdGlvbih0KXtpZihnLmNhbGwoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXykpcmV0dXJuIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dfSksaGFzOmwoZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChhKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKX0pLHNldDpsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXyxsKCJjIixlKSksdGhpc30pLHRvU3RyaW5nOmwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBXZWFrTWFwXSJ9KX0pLGQobi5wcm90b3R5cGUsZixsKCJjIiwiV2Vha01hcCIpKX0seyIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZCI6MjE4LGQ6MTQxLCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoxOTIsImVzNS1leHQvb2JqZWN0L3ZhbGlkLW9iamVjdCI6MTk2LCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSI6MTk3LCJlczUtZXh0L3N0cmluZy9yYW5kb20tdW5pcSI6MjAyLCJlczYtaXRlcmF0b3IvZm9yLW9mIjoyMDQsImVzNi1pdGVyYXRvci9nZXQiOjIwNSwiZXM2LXN5bWJvbCI6MjExfV0sMjIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZXx8MCxpPXJ8fDE7cmV0dXJuW1t0WzEyXSt0WzBdLHRbMTNdK3RbMV0sdFsxNF0rdFsyXSx0WzE1XSt0WzNdXSxbdFsxMl0tdFswXSx0WzEzXS10WzFdLHRbMTRdLXRbMl0sdFsxNV0tdFszXV0sW3RbMTJdK3RbNF0sdFsxM10rdFs1XSx0WzE0XSt0WzZdLHRbMTVdK3RbN11dLFt0WzEyXS10WzRdLHRbMTNdLXRbNV0sdFsxNF0tdFs2XSx0WzE1XS10WzddXSxbbip0WzEyXSt0WzhdLG4qdFsxM10rdFs5XSxuKnRbMTRdK3RbMTBdLG4qdFsxNV0rdFsxMV1dLFtpKnRbMTJdLXRbOF0saSp0WzEzXS10WzldLGkqdFsxNF0tdFsxMF0saSp0WzE1XS10WzExXV1dfX0se31dLDIyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpcy1zdHJpbmctYmxhbmsiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7aWYoInN0cmluZyI9PT1lKXt2YXIgcj10O2lmKDA9PT0odD0rdCkmJm4ocikpcmV0dXJuITF9ZWxzZSBpZigibnVtYmVyIiE9PWUpcmV0dXJuITE7cmV0dXJuIHQtdDwxfX0seyJpcy1zdHJpbmctYmxhbmsiOjQxNX1dLDIyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBvKFswXSxbMF0sMCk7Y2FzZSAxOmlmKCJudW1iZXIiPT10eXBlb2YgdCl7dmFyIG49bCh0KTtyZXR1cm4gbmV3IG8obixuLDApfXJldHVybiBuZXcgbyh0LGwodC5sZW5ndGgpLDApO2Nhc2UgMjppZigibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBuPWwodC5sZW5ndGgpO3JldHVybiBuZXcgbyh0LG4sK2UpfXI9MDtjYXNlIDM6aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInN0YXRlIGFuZCB2ZWxvY2l0eSBsZW5ndGhzIG11c3QgbWF0Y2giKTtyZXR1cm4gbmV3IG8odCxlLHIpfX07dmFyIG49dCgiY3ViaWMtaGVybWl0ZSIpLGk9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4oZSxNYXRoLm1heCh0LHIpKX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10Lmxlbmd0aCx0aGlzLmJvdW5kcz1bbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKSxuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pXTtmb3IodmFyIG49MDtuPHRoaXMuZGltZW5zaW9uOysrbil0aGlzLmJvdW5kc1swXVtuXT0tMS8wLHRoaXMuYm91bmRzWzFdW25dPTEvMDt0aGlzLl9zdGF0ZT10LnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3ZlbG9jaXR5PWUuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdGltZT1bcl0sdGhpcy5fc2NyYXRjaD1bdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKV19dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1zLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZ3QodGhpcy5fdGltZSx0KS0xO2U8PTB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX3N0YXRlLnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pLHRoaXMuX3ZlbG9jaXR5LnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pKX0scy5jdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsbz1pLmxlKGUsdCkscz10aGlzLl9zY3JhdGNoWzBdLGw9dGhpcy5fc3RhdGUsYz10aGlzLl92ZWxvY2l0eSx1PXRoaXMuZGltZW5zaW9uLGY9dGhpcy5ib3VuZHM7aWYobzwwKWZvcih2YXIgaD11LTEscD0wO3A8dTsrK3AsLS1oKXNbcF09bFtoXTtlbHNlIGlmKG8+PXItMSl7aD1sLmxlbmd0aC0xO3ZhciBkPXQtZVtyLTFdO2ZvcihwPTA7cDx1OysrcCwtLWgpc1twXT1sW2hdK2QqY1toXX1lbHNle2g9dSoobysxKS0xO3ZhciBnPWVbb10sdj1lW28rMV0tZ3x8MSxtPXRoaXMuX3NjcmF0Y2hbMV0seT10aGlzLl9zY3JhdGNoWzJdLHg9dGhpcy5fc2NyYXRjaFszXSxiPXRoaXMuX3NjcmF0Y2hbNF0sXz0hMDtmb3IocD0wO3A8dTsrK3AsLS1oKW1bcF09bFtoXSx4W3BdPWNbaF0qdix5W3BdPWxbaCt1XSxiW3BdPWNbaCt1XSp2LF89XyYmbVtwXT09PXlbcF0mJnhbcF09PT1iW3BdJiYwPT09eFtwXTtpZihfKWZvcihwPTA7cDx1OysrcClzW3BdPW1bcF07ZWxzZSBuKG0seCx5LGIsKHQtZykvdixzKX12YXIgdz1mWzBdLGs9ZlsxXTtmb3IocD0wO3A8dTsrK3Apc1twXT1hKHdbcF0sa1twXSxzW3BdKTtyZXR1cm4gc30scy5kY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLGE9aS5sZShlLHQpLG89dGhpcy5fc2NyYXRjaFswXSxzPXRoaXMuX3N0YXRlLGw9dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbjtpZihhPj1yLTEpZm9yKHZhciB1PXMubGVuZ3RoLTEsZj0oZVtyLTFdLDApO2Y8YzsrK2YsLS11KW9bZl09bFt1XTtlbHNle3U9YyooYSsxKS0xO3ZhciBoPWVbYV0scD1lW2ErMV0taHx8MSxkPXRoaXMuX3NjcmF0Y2hbMV0sZz10aGlzLl9zY3JhdGNoWzJdLHY9dGhpcy5fc2NyYXRjaFszXSxtPXRoaXMuX3NjcmF0Y2hbNF0seT0hMDtmb3IoZj0wO2Y8YzsrK2YsLS11KWRbZl09c1t1XSx2W2ZdPWxbdV0qcCxnW2ZdPXNbdStjXSxtW2ZdPWxbdStjXSpwLHk9eSYmZFtmXT09PWdbZl0mJnZbZl09PT1tW2ZdJiYwPT09dltmXTtpZih5KWZvcihmPTA7ZjxjOysrZilvW2ZdPTA7ZWxzZXtuLmRlcml2YXRpdmUoZCx2LGcsbSwodC1oKS9wLG8pO2ZvcihmPTA7ZjxjOysrZilvW2ZdLz1wfX1yZXR1cm4gb30scy5sYXN0VD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbWU7cmV0dXJuIHRbdC5sZW5ndGgtMV19LHMuc3RhYmxlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZlbG9jaXR5LGU9dC5sZW5ndGgscj10aGlzLmRpbWVuc2lvbi0xO3I+PTA7LS1yKWlmKHRbLS1lXSlyZXR1cm4hMTtyZXR1cm4hMH0scy5qdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXTt0aGlzLl90aW1lLnB1c2goZSx0KTtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgZj0wO2Y8cjsrK2Ypbi5wdXNoKG5bbysrXSksaS5wdXNoKDApO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IoZj1yO2Y+MDstLWYpbi5wdXNoKGEobFtmLTFdLGNbZi0xXSxhcmd1bWVudHNbZl0pKSxpLnB1c2goMCl9fSxzLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10LWUsbD10aGlzLmJvdW5kcyxjPWxbMF0sdT1sWzFdLGY9cz4xZS02PzEvczowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9cjtoPjA7LS1oKXt2YXIgcD1hKGNbaC0xXSx1W2gtMV0sYXJndW1lbnRzW2hdKTtuLnB1c2gocCksaS5wdXNoKChwLW5bbysrXSkqZil9fX0scy5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaW1lbnNpb247aWYoISh0PHRoaXMubGFzdFQoKXx8YXJndW1lbnRzLmxlbmd0aCE9PWUrMSkpe3ZhciByPXRoaXMuX3N0YXRlLG49dGhpcy5fdmVsb2NpdHksaT10aGlzLmJvdW5kcyxvPWlbMF0scz1pWzFdO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGw9ZTtsPjA7LS1sKXIucHVzaChhKG9bbC0xXSxzW2wtMV0sYXJndW1lbnRzW2xdKSksbi5wdXNoKDApfX0scy5tb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDw9ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV0sdT10LWUsZj11PjFlLTY/MS91OjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgaD1yO2g+MDstLWgpe3ZhciBwPWFyZ3VtZW50c1toXTtuLnB1c2goYShsW2gtMV0sY1toLTFdLG5bbysrXStwKSksaS5wdXNoKHAqZil9fX0scy5pZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKTtpZighKHQ8ZSkpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXIscz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9ci0xO2Y+PTA7LS1mKW4ucHVzaChhKGxbZl0sY1tmXSxuW29dK3UqaVtvXSkpLGkucHVzaCgwKSxvKz0xfX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgxLCJjdWJpYy1oZXJtaXRlIjoxMzV9XSwyMjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJkdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBzcGVjaWZ5IGRhdGEgYXMgZmlyc3QgcGFyYW1ldGVyIik7aWYocj0wfCsocnx8MCksQXJyYXkuaXNBcnJheSh0KSYmdFswXSYmIm51bWJlciI9PXR5cGVvZiB0WzBdWzBdKXt2YXIgaSxhLG8scyxsPXRbMF0ubGVuZ3RoLGM9dC5sZW5ndGgqbDtlJiYic3RyaW5nIiE9dHlwZW9mIGV8fChlPW5ldyhuKGV8fCJmbG9hdDMyIikpKGMrcikpO3ZhciB1PWUubGVuZ3RoLXI7aWYoYyE9PXUpdGhyb3cgbmV3IEVycm9yKCJzb3VyY2UgbGVuZ3RoICIrYysiICgiK2wrIngiK3QubGVuZ3RoKyIpIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIGxlbmd0aCAiK3UpO2ZvcihpPTAsbz1yO2k8dC5sZW5ndGg7aSsrKWZvcihhPTA7YTxsO2ErKyllW28rK109bnVsbD09PXRbaV1bYV0/TmFOOnRbaV1bYV19ZWxzZSBpZihlJiYic3RyaW5nIiE9dHlwZW9mIGUpZS5zZXQodCxyKTtlbHNle3ZhciBmPW4oZXx8ImZsb2F0MzIiKTtpZihBcnJheS5pc0FycmF5KHQpfHwiYXJyYXkiPT09ZSlmb3IoZT1uZXcgZih0Lmxlbmd0aCtyKSxpPTAsbz1yLHM9ZS5sZW5ndGg7bzxzO28rKyxpKyspZVtvXT1udWxsPT09dFtpXT9OYU46dFtpXTtlbHNlIDA9PT1yP2U9bmV3IGYodCk6KGU9bmV3IGYodC5sZW5ndGgrcikpLnNldCh0LHIpfXJldHVybiBlfX0se2R0eXBlOjE2MH1dLDIyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udC9zdHJpbmdpZnkiKSxpPVszMiwxMjZdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuc2hhcGU/dC5zaGFwZTp0LmNhbnZhcz9bdC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0XTpbNTEyLDUxMl0scj10LmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYT10LmZvbnQsbz0ibnVtYmVyIj09dHlwZW9mIHQuc3RlcD9bdC5zdGVwLHQuc3RlcF06dC5zdGVwfHxbMzIsMzJdLHM9dC5jaGFyc3x8aTthJiYic3RyaW5nIiE9dHlwZW9mIGEmJihhPW4oYSkpO2lmKEFycmF5LmlzQXJyYXkocykpe2lmKDI9PT1zLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiBzWzBdJiYibnVtYmVyIj09dHlwZW9mIHNbMV0pe2Zvcih2YXIgbD1bXSxjPXNbMF0sdT0wO2M8PXNbMV07YysrKWxbdSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpO3M9bH19ZWxzZSBzPVN0cmluZyhzKS5zcGxpdCgiIik7ZT1lLnNsaWNlKCksci53aWR0aD1lWzBdLHIuaGVpZ2h0PWVbMV07dmFyIGY9ci5nZXRDb250ZXh0KCIyZCIpO2YuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KSxmLmZvbnQ9YSxmLnRleHRBbGlnbj0iY2VudGVyIixmLnRleHRCYXNlbGluZT0ibWlkZGxlIixmLmZpbGxTdHlsZT0iI2ZmZiI7Zm9yKHZhciBoPW9bMF0vMixwPW9bMV0vMixjPTA7YzxzLmxlbmd0aDtjKyspZi5maWxsVGV4dChzW2NdLGgscCksKGgrPW9bMF0pPmVbMF0tb1swXS8yJiYoaD1vWzBdLzIscCs9b1sxXSk7cmV0dXJuIHJ9fSx7ImNzcy1mb250L3N0cmluZ2lmeSI6MTMyfV0sMjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtlfHwoZT17fSksKCJzdHJpbmciPT10eXBlb2YgdHx8QXJyYXkuaXNBcnJheSh0KSkmJihlLmZhbWlseT10KTt2YXIgcj1BcnJheS5pc0FycmF5KGUuZmFtaWx5KT9lLmZhbWlseS5qb2luKCIsICIpOmUuZmFtaWx5O2lmKCFyKXRocm93IEVycm9yKCJgZmFtaWx5YCBtdXN0IGJlIGRlZmluZWQiKTt2YXIgcz1lLnNpemV8fGUuZm9udFNpemV8fGUuZW18fDQ4LGw9ZS53ZWlnaHR8fGUuZm9udFdlaWdodHx8IiIsYz0odD1bZS5zdHlsZXx8ZS5mb250U3R5bGV8fCIiLGwsc10uam9pbigiICIpKyJweCAiK3IsZS5vcmlnaW58fCJ0b3AiKTtpZihuLmNhY2hlW3JdJiZzPD1uLmNhY2hlW3JdLmVtKXJldHVybiBpKG4uY2FjaGVbcl0sYyk7dmFyIHU9ZS5jYW52YXN8fG4uY2FudmFzLGY9dS5nZXRDb250ZXh0KCIyZCIpLGg9e3VwcGVyOnZvaWQgMCE9PWUudXBwZXI/ZS51cHBlcjoiSCIsbG93ZXI6dm9pZCAwIT09ZS5sb3dlcj9lLmxvd2VyOiJ4IixkZXNjZW50OnZvaWQgMCE9PWUuZGVzY2VudD9lLmRlc2NlbnQ6InAiLGFzY2VudDp2b2lkIDAhPT1lLmFzY2VudD9lLmFzY2VudDoiaCIsdGl0dGxlOnZvaWQgMCE9PWUudGl0dGxlP2UudGl0dGxlOiJpIixvdmVyc2hvb3Q6dm9pZCAwIT09ZS5vdmVyc2hvb3Q/ZS5vdmVyc2hvb3Q6Ik8ifSxwPU1hdGguY2VpbCgxLjUqcyk7dS5oZWlnaHQ9cCx1LndpZHRoPS41KnAsZi5mb250PXQ7dmFyIGQ9e3RvcDowfTtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxTdHlsZT0iYmxhY2siLGYuZmlsbFRleHQoIkgiLDAsMCk7dmFyIGc9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7Zi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9ImJvdHRvbSIsZi5maWxsVGV4dCgiSCIsMCxwKTt2YXIgdj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLmxpbmVIZWlnaHQ9ZC5ib3R0b209cC12K2csZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiLGYuZmlsbFRleHQoIkgiLDAscCk7dmFyIG09cC1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKS0xK2c7ZC5iYXNlbGluZT1kLmFscGhhYmV0aWM9bSxmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0ibWlkZGxlIixmLmZpbGxUZXh0KCJIIiwwLC41KnApO3ZhciB5PWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubWVkaWFuPWQubWlkZGxlPXAteS0xK2ctLjUqcCxmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iaGFuZ2luZyIsZi5maWxsVGV4dCgiSCIsMCwuNSpwKTt2YXIgeD1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLmhhbmdpbmc9cC14LTErZy0uNSpwLGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJpZGVvZ3JhcGhpYyIsZi5maWxsVGV4dCgiSCIsMCxwKTt2YXIgYj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtpZihkLmlkZW9ncmFwaGljPXAtYi0xK2csaC51cHBlciYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC51cHBlciwwLDApLGQudXBwZXI9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSksZC5jYXBIZWlnaHQ9ZC5iYXNlbGluZS1kLnVwcGVyKSxoLmxvd2VyJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLmxvd2VyLDAsMCksZC5sb3dlcj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLnhIZWlnaHQ9ZC5iYXNlbGluZS1kLmxvd2VyKSxoLnRpdHRsZSYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC50aXR0bGUsMCwwKSxkLnRpdHRsZT1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksaC5hc2NlbnQmJihmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGguYXNjZW50LDAsMCksZC5hc2NlbnQ9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGguZGVzY2VudCYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC5kZXNjZW50LDAsMCksZC5kZXNjZW50PW8oZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpKSxoLm92ZXJzaG9vdCl7Zi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLm92ZXJzaG9vdCwwLDApO3ZhciBfPW8oZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2Qub3ZlcnNob290PV8tbX1mb3IodmFyIHcgaW4gZClkW3ddLz1zO3JldHVybiBkLmVtPXMsbi5jYWNoZVtyXT1kLGkoZCxjKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9e307Zm9yKHZhciBuIGluInN0cmluZyI9PXR5cGVvZiBlJiYoZT10W2VdKSx0KSJlbSIhPT1uJiYocltuXT10W25dLWUpO3JldHVybiByfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPXQuaGVpZ2h0LHI9dC5kYXRhLG49MztuPHIubGVuZ3RoO24rPTQpaWYoMCE9PXJbbl0pcmV0dXJuIE1hdGguZmxvb3IoLjI1KihuLTMpL2UpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXQuaGVpZ2h0LHI9dC5kYXRhLG49ci5sZW5ndGgtMTtuPjA7bi09NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZS5leHBvcnRzPW4sbi5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbi5jYWNoZT17fX0se31dLDIyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjKHR8fGQsbnVsbCl9O3ZhciBuPTAsaT0xO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEpe3RoaXMuX2NvbG9yPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPXIsdGhpcy5sZWZ0PW4sdGhpcy5yaWdodD1pLHRoaXMuX2NvdW50PWF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbmV3IGEodC5fY29sb3IsdC5rZXksdC52YWx1ZSx0LmxlZnQsdC5yaWdodCx0Ll9jb3VudCl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBuZXcgYSh0LGUua2V5LGUudmFsdWUsZS5sZWZ0LGUucmlnaHQsZS5fY291bnQpfWZ1bmN0aW9uIGwodCl7dC5fY291bnQ9MSsodC5sZWZ0P3QubGVmdC5fY291bnQ6MCkrKHQucmlnaHQ/dC5yaWdodC5fY291bnQ6MCl9ZnVuY3Rpb24gYyh0LGUpe3RoaXMuX2NvbXBhcmU9dCx0aGlzLnJvb3Q9ZX12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBmKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodSwia2V5cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0LnB1c2goZSl9KSx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LCJ2YWx1ZXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dC5wdXNoKHIpfSksdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuX2NvdW50OjB9fSksdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5fY29tcGFyZSxvPXRoaXMucm9vdCx1PVtdLGY9W107bzspe3ZhciBoPXIodCxvLmtleSk7dS5wdXNoKG8pLGYucHVzaChoKSxvPWg8PTA/by5sZWZ0Om8ucmlnaHR9dS5wdXNoKG5ldyBhKG4sdCxlLG51bGwsbnVsbCwxKSk7Zm9yKHZhciBwPXUubGVuZ3RoLTI7cD49MDstLXApe289dVtwXTtmW3BdPD0wP3VbcF09bmV3IGEoby5fY29sb3Isby5rZXksby52YWx1ZSx1W3ArMV0sby5yaWdodCxvLl9jb3VudCsxKTp1W3BdPW5ldyBhKG8uX2NvbG9yLG8ua2V5LG8udmFsdWUsby5sZWZ0LHVbcCsxXSxvLl9jb3VudCsxKX1mb3IocD11Lmxlbmd0aC0xO3A+MTstLXApe3ZhciBkPXVbcC0xXTtvPXVbcF07aWYoZC5fY29sb3I9PT1pfHxvLl9jb2xvcj09PWkpYnJlYWs7dmFyIGc9dVtwLTJdO2lmKGcubGVmdD09PWQpaWYoZC5sZWZ0PT09byl7aWYoISh2PWcucmlnaHQpfHx2Ll9jb2xvciE9PW4pe2lmKGcuX2NvbG9yPW4sZy5sZWZ0PWQucmlnaHQsZC5fY29sb3I9aSxkLnJpZ2h0PWcsdVtwLTJdPWQsdVtwLTFdPW8sbChnKSxsKGQpLHA+PTMpKG09dVtwLTNdKS5sZWZ0PT09Zz9tLmxlZnQ9ZDptLnJpZ2h0PWQ7YnJlYWt9ZC5fY29sb3I9aSxnLnJpZ2h0PXMoaSx2KSxnLl9jb2xvcj1uLHAtPTF9ZWxzZXtpZighKHY9Zy5yaWdodCl8fHYuX2NvbG9yIT09bil7aWYoZC5yaWdodD1vLmxlZnQsZy5fY29sb3I9bixnLmxlZnQ9by5yaWdodCxvLl9jb2xvcj1pLG8ubGVmdD1kLG8ucmlnaHQ9Zyx1W3AtMl09byx1W3AtMV09ZCxsKGcpLGwoZCksbChvKSxwPj0zKShtPXVbcC0zXSkubGVmdD09PWc/bS5sZWZ0PW86bS5yaWdodD1vO2JyZWFrfWQuX2NvbG9yPWksZy5yaWdodD1zKGksdiksZy5fY29sb3I9bixwLT0xfWVsc2UgaWYoZC5yaWdodD09PW8pe2lmKCEodj1nLmxlZnQpfHx2Ll9jb2xvciE9PW4pe2lmKGcuX2NvbG9yPW4sZy5yaWdodD1kLmxlZnQsZC5fY29sb3I9aSxkLmxlZnQ9Zyx1W3AtMl09ZCx1W3AtMV09byxsKGcpLGwoZCkscD49MykobT11W3AtM10pLnJpZ2h0PT09Zz9tLnJpZ2h0PWQ6bS5sZWZ0PWQ7YnJlYWt9ZC5fY29sb3I9aSxnLmxlZnQ9cyhpLHYpLGcuX2NvbG9yPW4scC09MX1lbHNle3ZhciB2O2lmKCEodj1nLmxlZnQpfHx2Ll9jb2xvciE9PW4pe3ZhciBtO2lmKGQubGVmdD1vLnJpZ2h0LGcuX2NvbG9yPW4sZy5yaWdodD1vLmxlZnQsby5fY29sb3I9aSxvLnJpZ2h0PWQsby5sZWZ0PWcsdVtwLTJdPW8sdVtwLTFdPWQsbChnKSxsKGQpLGwobykscD49MykobT11W3AtM10pLnJpZ2h0PT09Zz9tLnJpZ2h0PW86bS5sZWZ0PW87YnJlYWt9ZC5fY29sb3I9aSxnLmxlZnQ9cyhpLHYpLGcuX2NvbG9yPW4scC09MX19cmV0dXJuIHVbMF0uX2NvbG9yPWksbmV3IGMocix1WzBdKX0sdS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnJvb3Qpc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24gdChlLHIpe3ZhciBuO2lmKHIubGVmdCYmKG49dChlLHIubGVmdCkpKXJldHVybiBuO3JldHVybihuPWUoci5rZXksci52YWx1ZSkpfHwoci5yaWdodD90KGUsci5yaWdodCk6dm9pZCAwKX0odCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXtpZihyKGUsaS5rZXkpPD0wKXt2YXIgYTtpZihpLmxlZnQmJihhPXQoZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYoYT1uKGkua2V5LGkudmFsdWUpKXJldHVybiBhfWlmKGkucmlnaHQpcmV0dXJuIHQoZSxyLG4saS5yaWdodCl9KGUsdGhpcy5fY29tcGFyZSx0LHRoaXMucm9vdCk7Y2FzZSAzOmlmKHRoaXMuX2NvbXBhcmUoZSxyKT49MClyZXR1cm47cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSxhKXt2YXIgbyxzPW4oZSxhLmtleSksbD1uKHIsYS5rZXkpO2lmKHM8PTApe2lmKGEubGVmdCYmKG89dChlLHIsbixpLGEubGVmdCkpKXJldHVybiBvO2lmKGw+MCYmKG89aShhLmtleSxhLnZhbHVlKSkpcmV0dXJuIG99aWYobD4wJiZhLnJpZ2h0KXJldHVybiB0KGUscixuLGksYS5yaWdodCl9KGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LCJiZWdpbiIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7cmV0dXJuIG5ldyBmKHRoaXMsdCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsImVuZCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgZih0aGlzLHQpfX0pLHUuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgZih0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgZih0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgZih0aGlzLFtdKX0sdS5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgZih0aGlzLG4pfSx1Lmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgZih0aGlzLG4pfSx1Lmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGYodGhpcyxuKX0sdS5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBmKHRoaXMsbil9LHUuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGYodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBmKHRoaXMsW10pfSx1LnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSx1LmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgaD1mLnByb3RvdHlwZTtmdW5jdGlvbiBwKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJub2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wP3RoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXTpudWxsfSxlbnVtZXJhYmxlOiEwfSksaC5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZih0aGlzLnRyZWUsdGhpcy5fc3RhY2suc2xpY2UoKSl9LGgucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLnRyZWU7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPXRbdC5sZW5ndGgtMV07ZVtlLmxlbmd0aC0xXT1uZXcgYShyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxyLnJpZ2h0LHIuX2NvdW50KTtmb3IodmFyIHU9dC5sZW5ndGgtMjt1Pj0wOy0tdSl7KHI9dFt1XSkubGVmdD09PXRbdSsxXT9lW3VdPW5ldyBhKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsZVt1KzFdLHIucmlnaHQsci5fY291bnQpOmVbdV09bmV3IGEoci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVt1KzFdLHIuX2NvdW50KX1pZigocj1lW2UubGVuZ3RoLTFdKS5sZWZ0JiZyLnJpZ2h0KXt2YXIgZj1lLmxlbmd0aDtmb3Iocj1yLmxlZnQ7ci5yaWdodDspZS5wdXNoKHIpLHI9ci5yaWdodDt2YXIgaD1lW2YtMV07ZS5wdXNoKG5ldyBhKHIuX2NvbG9yLGgua2V5LGgudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpKSxlW2YtMV0ua2V5PXIua2V5LGVbZi0xXS52YWx1ZT1yLnZhbHVlO2Zvcih1PWUubGVuZ3RoLTI7dT49ZjstLXUpcj1lW3VdLGVbdV09bmV3IGEoci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVt1KzFdLHIuX2NvdW50KTtlW2YtMV0ubGVmdD1lW2ZdfWlmKChyPWVbZS5sZW5ndGgtMV0pLl9jb2xvcj09PW4pe3ZhciBkPWVbZS5sZW5ndGgtMl07ZC5sZWZ0PT09cj9kLmxlZnQ9bnVsbDpkLnJpZ2h0PT09ciYmKGQucmlnaHQ9bnVsbCksZS5wb3AoKTtmb3IodT0wO3U8ZS5sZW5ndGg7Kyt1KWVbdV0uX2NvdW50LS07cmV0dXJuIG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX1pZihyLmxlZnR8fHIucmlnaHQpe3IubGVmdD9wKHIsci5sZWZ0KTpyLnJpZ2h0JiZwKHIsci5yaWdodCksci5fY29sb3I9aTtmb3IodT0wO3U8ZS5sZW5ndGgtMTsrK3UpZVt1XS5fY291bnQtLTtyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKDE9PT1lLmxlbmd0aClyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLG51bGwpO2Zvcih1PTA7dTxlLmxlbmd0aDsrK3UpZVt1XS5fY291bnQtLTt2YXIgZz1lW2UubGVuZ3RoLTJdO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscixhLGMsdT10Lmxlbmd0aC0xO3U+PTA7LS11KXtpZihlPXRbdV0sMD09PXUpcmV0dXJuIHZvaWQoZS5fY29sb3I9aSk7aWYoKHI9dFt1LTFdKS5sZWZ0PT09ZSl7aWYoKGE9ci5yaWdodCkucmlnaHQmJmEucmlnaHQuX2NvbG9yPT09bilyZXR1cm4gYz0oYT1yLnJpZ2h0PW8oYSkpLnJpZ2h0PW8oYS5yaWdodCksci5yaWdodD1hLmxlZnQsYS5sZWZ0PXIsYS5yaWdodD1jLGEuX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPWksci5fY29sb3I9aSxjLl9jb2xvcj1pLGwociksbChhKSx1PjEmJigoZj10W3UtMl0pLmxlZnQ9PT1yP2YubGVmdD1hOmYucmlnaHQ9YSksdm9pZCh0W3UtMV09YSk7aWYoYS5sZWZ0JiZhLmxlZnQuX2NvbG9yPT09bilyZXR1cm4gYz0oYT1yLnJpZ2h0PW8oYSkpLmxlZnQ9byhhLmxlZnQpLHIucmlnaHQ9Yy5sZWZ0LGEubGVmdD1jLnJpZ2h0LGMubGVmdD1yLGMucmlnaHQ9YSxjLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj1pLGEuX2NvbG9yPWksZS5fY29sb3I9aSxsKHIpLGwoYSksbChjKSx1PjEmJigoZj10W3UtMl0pLmxlZnQ9PT1yP2YubGVmdD1jOmYucmlnaHQ9Yyksdm9pZCh0W3UtMV09Yyk7aWYoYS5fY29sb3I9PT1pKXtpZihyLl9jb2xvcj09PW4pcmV0dXJuIHIuX2NvbG9yPWksdm9pZChyLnJpZ2h0PXMobixhKSk7ci5yaWdodD1zKG4sYSk7Y29udGludWV9YT1vKGEpLHIucmlnaHQ9YS5sZWZ0LGEubGVmdD1yLGEuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPW4sbChyKSxsKGEpLHU+MSYmKChmPXRbdS0yXSkubGVmdD09PXI/Zi5sZWZ0PWE6Zi5yaWdodD1hKSx0W3UtMV09YSx0W3VdPXIsdSsxPHQubGVuZ3RoP3RbdSsxXT1lOnQucHVzaChlKSx1Kz0yfWVsc2V7aWYoKGE9ci5sZWZ0KS5sZWZ0JiZhLmxlZnQuX2NvbG9yPT09bilyZXR1cm4gYz0oYT1yLmxlZnQ9byhhKSkubGVmdD1vKGEubGVmdCksci5sZWZ0PWEucmlnaHQsYS5yaWdodD1yLGEubGVmdD1jLGEuX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPWksci5fY29sb3I9aSxjLl9jb2xvcj1pLGwociksbChhKSx1PjEmJigoZj10W3UtMl0pLnJpZ2h0PT09cj9mLnJpZ2h0PWE6Zi5sZWZ0PWEpLHZvaWQodFt1LTFdPWEpO2lmKGEucmlnaHQmJmEucmlnaHQuX2NvbG9yPT09bilyZXR1cm4gYz0oYT1yLmxlZnQ9byhhKSkucmlnaHQ9byhhLnJpZ2h0KSxyLmxlZnQ9Yy5yaWdodCxhLnJpZ2h0PWMubGVmdCxjLnJpZ2h0PXIsYy5sZWZ0PWEsYy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9aSxhLl9jb2xvcj1pLGUuX2NvbG9yPWksbChyKSxsKGEpLGwoYyksdT4xJiYoKGY9dFt1LTJdKS5yaWdodD09PXI/Zi5yaWdodD1jOmYubGVmdD1jKSx2b2lkKHRbdS0xXT1jKTtpZihhLl9jb2xvcj09PWkpe2lmKHIuX2NvbG9yPT09bilyZXR1cm4gci5fY29sb3I9aSx2b2lkKHIubGVmdD1zKG4sYSkpO3IubGVmdD1zKG4sYSk7Y29udGludWV9dmFyIGY7YT1vKGEpLHIubGVmdD1hLnJpZ2h0LGEucmlnaHQ9cixhLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj1uLGwociksbChhKSx1PjEmJigoZj10W3UtMl0pLnJpZ2h0PT09cj9mLnJpZ2h0PWE6Zi5sZWZ0PWEpLHRbdS0xXT1hLHRbdV09cix1KzE8dC5sZW5ndGg/dFt1KzFdPWU6dC5wdXNoKGUpLHUrPTJ9fX0oZSksZy5sZWZ0PT09cj9nLmxlZnQ9bnVsbDpnLnJpZ2h0PW51bGwsbmV3IGModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwia2V5Iix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2subGVuZ3RoPjApcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS5rZXl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdLnZhbHVlfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImluZGV4Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9MCxlPXRoaXMuX3N0YWNrO2lmKDA9PT1lLmxlbmd0aCl7dmFyIHI9dGhpcy50cmVlLnJvb3Q7cmV0dXJuIHI/ci5fY291bnQ6MH1lW2UubGVuZ3RoLTFdLmxlZnQmJih0PWVbZS5sZW5ndGgtMV0ubGVmdC5fY291bnQpO2Zvcih2YXIgbj1lLmxlbmd0aC0yO24+PTA7LS1uKWVbbisxXT09PWVbbl0ucmlnaHQmJigrK3QsZVtuXS5sZWZ0JiYodCs9ZVtuXS5sZWZ0Ll9jb3VudCkpO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksaC5uZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMCE9PXQubGVuZ3RoKXt2YXIgZT10W3QubGVuZ3RoLTFdO2lmKGUucmlnaHQpZm9yKGU9ZS5yaWdodDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7ZWxzZSBmb3IodC5wb3AoKTt0Lmxlbmd0aD4wJiZ0W3QubGVuZ3RoLTFdLnJpZ2h0PT09ZTspZT10W3QubGVuZ3RoLTFdLHQucG9wKCl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiaGFzTmV4dCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4hMTtpZih0W3QubGVuZ3RoLTFdLnJpZ2h0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLmxlZnQ9PT10W2VdKXJldHVybiEwO3JldHVybiExfX0pLGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N0YWNrO2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbid0IHVwZGF0ZSBlbXB0eSBub2RlISIpO3ZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj1lW2UubGVuZ3RoLTFdO3Jbci5sZW5ndGgtMV09bmV3IGEobi5fY29sb3Isbi5rZXksdCxuLmxlZnQsbi5yaWdodCxuLl9jb3VudCk7Zm9yKHZhciBpPWUubGVuZ3RoLTI7aT49MDstLWkpKG49ZVtpXSkubGVmdD09PWVbaSsxXT9yW2ldPW5ldyBhKG4uX2NvbG9yLG4ua2V5LG4udmFsdWUscltpKzFdLG4ucmlnaHQsbi5fY291bnQpOnJbaV09bmV3IGEobi5fY29sb3Isbi5rZXksbi52YWx1ZSxuLmxlZnQscltpKzFdLG4uX2NvdW50KTtyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLHJbMF0pfSxoLnByZXY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5sZWZ0KWZvcihlPWUubGVmdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5sZWZ0PT09ZTspZT10W3QubGVuZ3RoLTFdLHQucG9wKCl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiaGFzUHJldiIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4hMTtpZih0W3QubGVuZ3RoLTFdLmxlZnQpcmV0dXJuITA7Zm9yKHZhciBlPXQubGVuZ3RoLTE7ZT4wOy0tZSlpZih0W2UtMV0ucmlnaHQ9PT10W2VdKXJldHVybiEwO3JldHVybiExfX0pfSx7fV0sMjI3OltmdW5jdGlvbih0LGUscil7dmFyIG49Wy45OTk5OTk5OTk5OTk4MDk5LDY3Ni41MjAzNjgxMjE4ODUxLC0xMjU5LjEzOTIxNjcyMjQwMjgsNzcxLjMyMzQyODc3NzY1MzEsLTE3Ni42MTUwMjkxNjIxNDA2LDEyLjUwNzM0MzI3ODY4NjkwNSwtLjEzODU3MTA5NTI2NTcyMDEyLDk5ODQzNjk1NzgwMTk1NzJlLTIxLDEuNTA1NjMyNzM1MTQ5MzExNmUtN10saT02MDcvMTI4LGE9Wy45OTk5OTk5OTk5OTk5OTcxLDU3LjE1NjIzNTY2NTg2MjkyLC01OS41OTc5NjAzNTU0NzU0OSwxNC4xMzYwOTc5NzQ3NDE3NDYsLS40OTE5MTM4MTYwOTc2MjAyLDMzOTk0NjQ5OTg0ODExODllLTIwLDQ2NTIzNjI4OTI3MDQ4NThlLTIwLC05ODM3NDQ3NTMwNDg3OTU2ZS0yMCwuMDAwMTU4MDg4NzAzMjI0OTEyNSwtLjAwMDIxMDI2NDQ0MTcyNDEwNDg4LC4wMDAyMTc0Mzk2MTgxMTUyMTI2NSwtLjAwMDE2NDMxODEwNjUzNjc2MzksODQ0MTgyMjM5ODM4NTI3NWUtMjAsLTI2MTkwODM4NDAxNTgxNDA4ZS0yMSwzNjg5OTE4MjY1OTUzMTYyNWUtMjJdO2Z1bmN0aW9uIG8odCl7aWYodDwwKXJldHVybiBOdW1iZXIoIjAvMCIpO2Zvcih2YXIgZT1hWzBdLHI9YS5sZW5ndGgtMTtyPjA7LS1yKWUrPWFbcl0vKHQrcik7dmFyIG49dCtpKy41O3JldHVybi41Kk1hdGgubG9nKDIqTWF0aC5QSSkrKHQrLjUpKk1hdGgubG9nKG4pLW4rTWF0aC5sb2coZSktTWF0aC5sb2codCl9ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSl7aWYoZTwuNSlyZXR1cm4gTWF0aC5QSS8oTWF0aC5zaW4oTWF0aC5QSSplKSp0KDEtZSkpO2lmKGU+MTAwKXJldHVybiBNYXRoLmV4cChvKGUpKTtlLT0xO2Zvcih2YXIgcj1uWzBdLGk9MTtpPDk7aSsrKXIrPW5baV0vKGUraSk7dmFyIGE9ZSs3Ky41O3JldHVybiBNYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLnBvdyhhLGUrLjUpKk1hdGguZXhwKC1hKSpyfSxlLmV4cG9ydHMubG9nPW99LHt9XSwyMjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBzcGVjaWZ5IHR5cGUgc3RyaW5nIik7aWYoZT1lfHx7fSwidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50JiYhZS5jYW52YXMpcmV0dXJuIG51bGw7dmFyIHI9ZS5jYW52YXN8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOyJudW1iZXIiPT10eXBlb2YgZS53aWR0aCYmKHIud2lkdGg9ZS53aWR0aCk7Im51bWJlciI9PXR5cGVvZiBlLmhlaWdodCYmKHIuaGVpZ2h0PWUuaGVpZ2h0KTt2YXIgbixpPWU7dHJ5e3ZhciBhPVt0XTswPT09dC5pbmRleE9mKCJ3ZWJnbCIpJiZhLnB1c2goImV4cGVyaW1lbnRhbC0iK3QpO2Zvcih2YXIgbz0wO288YS5sZW5ndGg7bysrKWlmKG49ci5nZXRDb250ZXh0KGFbb10saSkpcmV0dXJuIG59Y2F0Y2godCl7bj1udWxsfXJldHVybiBufHxudWxsfX0se31dLDIyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdSh0KTtyZXR1cm4gci51cGRhdGUoZSkscn07dmFyIG49dCgiLi9saWIvdGV4dC5qcyIpLGk9dCgiLi9saWIvbGluZXMuanMiKSxhPXQoIi4vbGliL2JhY2tncm91bmQuanMiKSxvPXQoIi4vbGliL2N1YmUuanMiKSxzPXQoIi4vbGliL3RpY2tzLmpzIiksbD1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSk7ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fWZ1bmN0aW9uIHUodCl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLmF1dG9UaWNrcz0hMCx0aGlzLnRpY2tTcGFjaW5nPVsxLDEsMV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy50aWNrRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMudGlja1NpemU9WzEyLDEyLDEyXSx0aGlzLnRpY2tBbmdsZT1bMCwwLDBdLHRoaXMudGlja0FsaWduPVsiYXV0byIsImF1dG8iLCJhdXRvIl0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzEwLDEwLDEwXSx0aGlzLmxhc3RDdWJlUHJvcHM9e2N1YmVFZGdlczpbMCwwLDBdLGF4aXM6WzAsMCwwXX0sdGhpcy5sYWJlbHM9WyJ4IiwieSIsInoiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5sYWJlbEZvbnQ9InNhbnMtc2VyaWYiLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbEFuZ2xlPVswLDAsMF0sdGhpcy5sYWJlbEFsaWduPVsiYXV0byIsImF1dG8iLCJhdXRvIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMTAsMTAsMTBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzAsMCwwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMSwhMSwhMV0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9maXJzdEluaXQ9ITAsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fYmFja2dyb3VuZD1hKHQpfXZhciBmPXUucHJvdG90eXBlO2Z1bmN0aW9uIGgoKXt0aGlzLnByaW1hbE9mZnNldD1bMCwwLDBdLHRoaXMucHJpbWFsTWlub3I9WzAsMCwwXSx0aGlzLm1pcnJvck9mZnNldD1bMCwwLDBdLHRoaXMubWlycm9yTWlub3I9WzAsMCwwXX1mLnVwZGF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXtpZihuIGluIHQpe3ZhciBpLGE9dFtuXSxvPXRoaXNbbl07KGU/QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShhWzBdKTpBcnJheS5pc0FycmF5KGEpKT90aGlzW25dPWk9W3IoYVswXSkscihhWzFdKSxyKGFbMl0pXTp0aGlzW25dPWk9W3IoYSkscihhKSxyKGEpXTtmb3IodmFyIHM9MDtzPDM7KytzKWlmKGlbc10hPT1vW3NdKXJldHVybiEwfXJldHVybiExfXQ9dHx8e307dmFyIHIsYT1lLmJpbmQodGhpcywhMSxOdW1iZXIpLG89ZS5iaW5kKHRoaXMsITEsQm9vbGVhbiksbD1lLmJpbmQodGhpcywhMSxTdHJpbmcpLGM9ZS5iaW5kKHRoaXMsITAsZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMz09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwxXTtpZig0PT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdXX1yZXR1cm5bMCwwLDAsMV19KSx1PSExLGY9ITE7aWYoImJvdW5kcyJpbiB0KWZvcih2YXIgaD10LmJvdW5kcyxwPTA7cDwyOysrcClmb3IodmFyIGQ9MDtkPDM7KytkKWhbcF1bZF0hPT10aGlzLmJvdW5kc1twXVtkXSYmKGY9ITApLHRoaXMuYm91bmRzW3BdW2RdPWhbcF1bZF07aWYoInRpY2tzImluIHQpe3I9dC50aWNrcyx1PSEwLHRoaXMuYXV0b1RpY2tzPSExO2ZvcihwPTA7cDwzOysrcCl0aGlzLnRpY2tTcGFjaW5nW3BdPTB9ZWxzZSBhKCJ0aWNrU3BhY2luZyIpJiYodGhpcy5hdXRvVGlja3M9ITAsZj0hMCk7aWYodGhpcy5fZmlyc3RJbml0JiYoInRpY2tzImluIHR8fCJ0aWNrU3BhY2luZyJpbiB0fHwodGhpcy5hdXRvVGlja3M9ITApLGY9ITAsdT0hMCx0aGlzLl9maXJzdEluaXQ9ITEpLGYmJnRoaXMuYXV0b1RpY2tzJiYocj1zLmNyZWF0ZSh0aGlzLmJvdW5kcyx0aGlzLnRpY2tTcGFjaW5nKSx1PSEwKSx1KXtmb3IocD0wO3A8MzsrK3ApcltwXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KTtzLmVxdWFsKHIsdGhpcy50aWNrcyk/dT0hMTp0aGlzLnRpY2tzPXJ9bygidGlja0VuYWJsZSIpLGwoInRpY2tGb250IikmJih1PSEwKSxhKCJ0aWNrU2l6ZSIpLGEoInRpY2tBbmdsZSIpLGEoInRpY2tQYWQiKSxjKCJ0aWNrQ29sb3IiKTt2YXIgZz1sKCJsYWJlbHMiKTtsKCJsYWJlbEZvbnQiKSYmKGc9ITApLG8oImxhYmVsRW5hYmxlIiksYSgibGFiZWxTaXplIiksYSgibGFiZWxQYWQiKSxjKCJsYWJlbENvbG9yIiksbygibGluZUVuYWJsZSIpLG8oImxpbmVNaXJyb3IiKSxhKCJsaW5lV2lkdGgiKSxjKCJsaW5lQ29sb3IiKSxvKCJsaW5lVGlja0VuYWJsZSIpLG8oImxpbmVUaWNrTWlycm9yIiksYSgibGluZVRpY2tMZW5ndGgiKSxhKCJsaW5lVGlja1dpZHRoIiksYygibGluZVRpY2tDb2xvciIpLG8oImdyaWRFbmFibGUiKSxhKCJncmlkV2lkdGgiKSxjKCJncmlkQ29sb3IiKSxvKCJ6ZXJvRW5hYmxlIiksYygiemVyb0xpbmVDb2xvciIpLGEoInplcm9MaW5lV2lkdGgiKSxvKCJiYWNrZ3JvdW5kRW5hYmxlIiksYygiYmFja2dyb3VuZENvbG9yIiksdGhpcy5fdGV4dD90aGlzLl90ZXh0JiYoZ3x8dSkmJnRoaXMuX3RleHQudXBkYXRlKHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCk6dGhpcy5fdGV4dD1uKHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KSx0aGlzLl9saW5lcyYmdSYmKHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsKSx0aGlzLl9saW5lc3x8KHRoaXMuX2xpbmVzPWkodGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLnRpY2tzKSl9O3ZhciBwPVtuZXcgaCxuZXcgaCxuZXcgaF07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT10LnByaW1hbE9mZnNldCxvPXQucHJpbWFsTWlub3Iscz10Lm1pcnJvck9mZnNldCxsPXQubWlycm9yTWlub3IsYz1uW2VdLHU9MDt1PDM7Kyt1KWlmKGUhPT11KXt2YXIgZj1hLGg9cyxwPW8sZD1sO2MmMTw8dSYmKGY9cyxoPWEscD1sLGQ9byksZlt1XT1yWzBdW3VdLGhbdV09clsxXVt1XSxpW3VdPjA/KHBbdV09LTEsZFt1XT0wKToocFt1XT0wLGRbdV09MSl9fXZhciBnPVswLDAsMF0sdj17bW9kZWw6bCx2aWV3OmwscHJvamVjdGlvbjpsLF9vcnRobzohMX07Zi5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxmLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZi5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fTt2YXIgbT1bMCwwLDBdLHk9WzAsMCwwXSx4PVswLDAsMF07Zi5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8djtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGwsbj10LnZpZXd8fGwsaT10LnByb2plY3Rpb258fGwsYT10aGlzLmJvdW5kcyxzPXQuX29ydGhvfHwhMSx1PW8ocixuLGksYSxzKSxmPXUuY3ViZUVkZ2VzLGg9dS5heGlzLGI9blsxMl0sXz1uWzEzXSx3PW5bMTRdLGs9blsxNV0sVD0ocz8yOjEpKnRoaXMucGl4ZWxSYXRpbyooaVszXSpiK2lbN10qXytpWzExXSp3K2lbMTVdKmspL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxBPTA7QTwzOysrQSl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW0FdPWZbQV0sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNbQV09aFtBXTt2YXIgTT1wO2ZvcihBPTA7QTwzOysrQSlkKHBbQV0sQSx0aGlzLmJvdW5kcyxmLGgpO2U9dGhpcy5nbDt2YXIgUyxFPWc7Zm9yKEE9MDtBPDM7KytBKXRoaXMuYmFja2dyb3VuZEVuYWJsZVtBXT9FW0FdPWhbQV06RVtBXT0wO3RoaXMuX2JhY2tncm91bmQuZHJhdyhyLG4saSxhLEUsdGhpcy5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuX2xpbmVzLmJpbmQocixuLGksdGhpcyk7Zm9yKEE9MDtBPDM7KytBKXt2YXIgQz1bMCwwLDBdO2hbQV0+MD9DW0FdPWFbMV1bQV06Q1tBXT1hWzBdW0FdO2Zvcih2YXIgTD0wO0w8MjsrK0wpe3ZhciB6PShBKzErTCklMyxPPShBKzErKDFeTCkpJTM7dGhpcy5ncmlkRW5hYmxlW3pdJiZ0aGlzLl9saW5lcy5kcmF3R3JpZCh6LE8sdGhpcy5ib3VuZHMsQyx0aGlzLmdyaWRDb2xvclt6XSx0aGlzLmdyaWRXaWR0aFt6XSp0aGlzLnBpeGVsUmF0aW8pfWZvcihMPTA7TDwyOysrTCl7ej0oQSsxK0wpJTMsTz0oQSsxKygxXkwpKSUzO3RoaXMuemVyb0VuYWJsZVtPXSYmTWF0aC5taW4oYVswXVtPXSxhWzFdW09dKTw9MCYmTWF0aC5tYXgoYVswXVtPXSxhWzFdW09dKT49MCYmdGhpcy5fbGluZXMuZHJhd1plcm8oeixPLHRoaXMuYm91bmRzLEMsdGhpcy56ZXJvTGluZUNvbG9yW09dLHRoaXMuemVyb0xpbmVXaWR0aFtPXSp0aGlzLnBpeGVsUmF0aW8pfX1mb3IoQT0wO0E8MzsrK0Epe3RoaXMubGluZUVuYWJsZVtBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKEEsdGhpcy5ib3VuZHMsTVtBXS5wcmltYWxPZmZzZXQsdGhpcy5saW5lQ29sb3JbQV0sdGhpcy5saW5lV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKSx0aGlzLmxpbmVNaXJyb3JbQV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzTGluZShBLHRoaXMuYm91bmRzLE1bQV0ubWlycm9yT2Zmc2V0LHRoaXMubGluZUNvbG9yW0FdLHRoaXMubGluZVdpZHRoW0FdKnRoaXMucGl4ZWxSYXRpbyk7dmFyIEk9YyhtLE1bQV0ucHJpbWFsTWlub3IpLEQ9Yyh5LE1bQV0ubWlycm9yTWlub3IpLFA9dGhpcy5saW5lVGlja0xlbmd0aDtmb3IoTD0wO0w8MzsrK0wpe3ZhciBSPVQvcls1KkxdO0lbTF0qPVBbTF0qUixEW0xdKj1QW0xdKlJ9dGhpcy5saW5lVGlja0VuYWJsZVtBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhBLE1bQV0ucHJpbWFsT2Zmc2V0LEksdGhpcy5saW5lVGlja0NvbG9yW0FdLHRoaXMubGluZVRpY2tXaWR0aFtBXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZVRpY2tNaXJyb3JbQV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzVGlja3MoQSxNW0FdLm1pcnJvck9mZnNldCxELHRoaXMubGluZVRpY2tDb2xvcltBXSx0aGlzLmxpbmVUaWNrV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKX10aGlzLl9saW5lcy51bmJpbmQoKSx0aGlzLl90ZXh0LmJpbmQocixuLGksdGhpcy5waXhlbFJhdGlvKTt2YXIgRixCO2Z1bmN0aW9uIE4odCl7KEI9WzAsMCwwXSlbdF09MX1mdW5jdGlvbiBqKHQsZSxyKXt2YXIgbj0odCsxKSUzLGk9KHQrMiklMyxhPWVbbl0sbz1lW2ldLHM9cltuXSxsPXJbaV07YT4wJiZsPjA/TihuKTphPjAmJmw8MD9OKG4pOmE8MCYmbD4wP04obik6YTwwJiZsPDA/TihuKTpvPjAmJnM+MD9OKGkpOm8+MCYmczwwP04oaSk6bzwwJiZzPjA/TihpKTpvPDAmJnM8MCYmTihpKX1mb3IoQT0wO0E8MzsrK0Epe3ZhciBWPU1bQV0ucHJpbWFsTWlub3IsVT1NW0FdLm1pcnJvck1pbm9yLHE9Yyh4LE1bQV0ucHJpbWFsT2Zmc2V0KTtmb3IoTD0wO0w8MzsrK0wpdGhpcy5saW5lVGlja0VuYWJsZVtBXSYmKHFbTF0rPVQqVltMXSpNYXRoLm1heCh0aGlzLmxpbmVUaWNrTGVuZ3RoW0xdLDApL3JbNSpMXSk7dmFyIEg9WzAsMCwwXTtpZihIW0FdPTEsdGhpcy50aWNrRW5hYmxlW0FdKXstMzYwMD09PXRoaXMudGlja0FuZ2xlW0FdPyh0aGlzLnRpY2tBbmdsZVtBXT0wLHRoaXMudGlja0FsaWduW0FdPSJhdXRvIik6dGhpcy50aWNrQWxpZ25bQV09LTEsRj0xLCJhdXRvIj09PShTPVt0aGlzLnRpY2tBbGlnbltBXSwuNSxGXSlbMF0/U1swXT0wOlNbMF09cGFyc2VJbnQoIiIrU1swXSksQj1bMCwwLDBdLGooQSxWLFUpO2ZvcihMPTA7TDwzOysrTClxW0xdKz1UKlZbTF0qdGhpcy50aWNrUGFkW0xdL3JbNSpMXTt0aGlzLl90ZXh0LmRyYXdUaWNrcyhBLHRoaXMudGlja1NpemVbQV0sdGhpcy50aWNrQW5nbGVbQV0scSx0aGlzLnRpY2tDb2xvcltBXSxILEIsUyl9aWYodGhpcy5sYWJlbEVuYWJsZVtBXSl7Rj0wLEI9WzAsMCwwXSx0aGlzLmxhYmVsc1tBXS5sZW5ndGg+NCYmKE4oQSksRj0xKSwiYXV0byI9PT0oUz1bdGhpcy5sYWJlbEFsaWduW0FdLC41LEZdKVswXT9TWzBdPTA6U1swXT1wYXJzZUludCgiIitTWzBdKTtmb3IoTD0wO0w8MzsrK0wpcVtMXSs9VCpWW0xdKnRoaXMubGFiZWxQYWRbTF0vcls1KkxdO3FbQV0rPS41KihhWzBdW0FdK2FbMV1bQV0pLHRoaXMuX3RleHQuZHJhd0xhYmVsKEEsdGhpcy5sYWJlbFNpemVbQV0sdGhpcy5sYWJlbEFuZ2xlW0FdLHEsdGhpcy5sYWJlbENvbG9yW0FdLFswLDAsMF0sQixTKX19dGhpcy5fdGV4dC51bmJpbmQoKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dC5kaXNwb3NlKCksdGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2JhY2tncm91bmQuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2JhY2tncm91bmQ9bnVsbCx0aGlzLmdsPW51bGx9fSx7Ii4vbGliL2JhY2tncm91bmQuanMiOjIzMCwiLi9saWIvY3ViZS5qcyI6MjMxLCIuL2xpYi9saW5lcy5qcyI6MjMyLCIuL2xpYi90ZXh0LmpzIjoyMzQsIi4vbGliL3RpY2tzLmpzIjoyMzV9XSwyMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPVtdLHM9MCxsPTA7bDwzOysrbClmb3IodmFyIGM9KGwrMSklMyx1PShsKzIpJTMsZj1bMCwwLDBdLGg9WzAsMCwwXSxwPS0xO3A8PTE7cCs9Mil7ci5wdXNoKHMscysyLHMrMSxzKzEscysyLHMrMyksZltsXT1wLGhbbF09cDtmb3IodmFyIGQ9LTE7ZDw9MTtkKz0yKXtmW2NdPWQ7Zm9yKHZhciBnPS0xO2c8PTE7Zys9MilmW3VdPWcsZS5wdXNoKGZbMF0sZlsxXSxmWzJdLGhbMF0saFsxXSxoWzJdKSxzKz0xfXZhciB2PWM7Yz11LHU9dn12YXIgbT1uKHQsbmV3IEZsb2F0MzJBcnJheShlKSkseT1uKHQsbmV3IFVpbnQxNkFycmF5KHIpLHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLHg9aSh0LFt7YnVmZmVyOm0sdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6MjR9LHtidWZmZXI6bSx0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6MjR9XSx5KSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGIuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MSxuZXcgbyh0LG0seCxiKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycyIpLmJnO2Z1bmN0aW9uIG8odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1ufXZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPSExLHM9MDtzPDM7KytzKW89b3x8aVtzXTtpZihvKXt2YXIgbD10aGlzLmdsO2wuZW5hYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCksbC5wb2x5Z29uT2Zmc2V0KDEsMiksdGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zPXttb2RlbDp0LHZpZXc6ZSxwcm9qZWN0aW9uOnIsYm91bmRzOm4sZW5hYmxlOmksY29sb3JzOmF9LHRoaXMudmFvLmJpbmQoKSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDM2KSx0aGlzLnZhby51bmJpbmQoKSxsLmRpc2FibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKX19LHMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjIzMywiZ2wtYnVmZmVyIjoyMzcsImdsLXZhbyI6MzE5fV0sMjMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHApe2kocyxlLHQpLGkocyxyLHMpO2Zvcih2YXIgeT0wLHg9MDt4PDI7Kyt4KXt1WzJdPWFbeF1bMl07Zm9yKHZhciBiPTA7YjwyOysrYil7dVsxXT1hW2JdWzFdO2Zvcih2YXIgXz0wO188MjsrK18pdVswXT1hW19dWzBdLGgobFt5XSx1LHMpLHkrPTF9fWZvcih2YXIgdz0tMSx4PTA7eDw4OysreCl7Zm9yKHZhciBrPWxbeF1bM10sVD0wO1Q8MzsrK1QpY1t4XVtUXT1sW3hdW1RdL2s7cCYmKGNbeF1bMl0qPS0xKSxrPDAmJih3PDA/dz14OmNbeF1bMl08Y1t3XVsyXSYmKHc9eCkpfWlmKHc8MCl7dz0wO2Zvcih2YXIgQT0wO0E8MzsrK0Epe2Zvcih2YXIgTT0oQSsyKSUzLFM9KEErMSklMyxFPS0xLEM9LTEsTD0wO0w8MjsrK0wpe3ZhciB6PUw8PEEsTz16KyhMPDxNKSsoMS1MPDxTKSxJPXorKDEtTDw8TSkrKEw8PFMpO28oY1t6XSxjW09dLGNbSV0sZik8MHx8KEw/RT0xOkM9MSl9aWYoRTwwfHxDPDApQz5FJiYod3w9MTw8QSk7ZWxzZXtmb3IodmFyIEw9MDtMPDI7KytMKXt2YXIgej1MPDxBLE89eisoTDw8TSkrKDEtTDw8UyksST16KygxLUw8PE0pKyhMPDxTKSxEPWQoW2xbel0sbFtPXSxsW0ldLGxbeisoMTw8TSkrKDE8PFMpXV0pO0w/RT1EOkM9RH1DPkUmJih3fD0xPDxBKX19fWZvcih2YXIgUD03XncsUj0tMSx4PTA7eDw4OysreCl4IT09dyYmeCE9PVAmJihSPDA/Uj14OmNbUl1bMV0+Y1t4XVsxXSYmKFI9eCkpO2Zvcih2YXIgRj0tMSx4PTA7eDwzOysreCl7dmFyIEI9Ul4xPDx4O2lmKEIhPT13JiZCIT09UCl7RjwwJiYoRj1CKTt2YXIgUz1jW0JdO1NbMF08Y1tGXVswXSYmKEY9Qil9fWZvcih2YXIgTj0tMSx4PTA7eDwzOysreCl7dmFyIEI9Ul4xPDx4O2lmKEIhPT13JiZCIT09UCYmQiE9PUYpe048MCYmKE49Qik7dmFyIFM9Y1tCXTtTWzBdPmNbTl1bMF0mJihOPUIpfX12YXIgaj1nO2pbMF09alsxXT1qWzJdPTAsaltuLmxvZzIoRl5SKV09UiZGLGpbbi5sb2cyKFJeTildPVImTjt2YXIgVj03Xk47Vj09PXd8fFY9PT1QPyhWPTdeRixqW24ubG9nMihOXlYpXT1WJk4pOmpbbi5sb2cyKEZeVildPVYmRjtmb3IodmFyIFU9dixxPXcsQT0wO0E8MzsrK0EpVVtBXT1xJjE8PEE/LTE6MTtyZXR1cm4gbX07dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxhPXQoInNwbGl0LXBvbHlnb24iKSxvPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLHM9bmV3IEFycmF5KDE2KSxsPW5ldyBBcnJheSg4KSxjPW5ldyBBcnJheSg4KSx1PW5ldyBBcnJheSgzKSxmPVswLDAsMF07ZnVuY3Rpb24gaCh0LGUscil7Zm9yKHZhciBuPTA7bjw0Oysrbil7dFtuXT1yWzEyK25dO2Zvcih2YXIgaT0wO2k8MzsrK2kpdFtuXSs9ZVtpXSpyWzQqaStuXX19IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDw4OysrdClsW3RdPVsxLDEsMSwxXSxjW3RdPVsxLDEsMV19KCk7dmFyIHA9W1swLDAsMSwwLDBdLFswLDAsLTEsMSwwXSxbMCwtMSwwLDEsMF0sWzAsMSwwLDEsMF0sWy0xLDAsMCwxLDBdLFsxLDAsMCwxLDBdXTtmdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT0wO2U8cC5sZW5ndGg7KytlKWlmKCh0PWEucG9zaXRpdmUodCxwW2VdKSkubGVuZ3RoPDMpcmV0dXJuIDA7dmFyIHI9dFswXSxuPXJbMF0vclszXSxpPXJbMV0vclszXSxvPTA7Zm9yKGU9MTtlKzE8dC5sZW5ndGg7KytlKXt2YXIgcz10W2VdLGw9dFtlKzFdLGM9c1swXS9zWzNdLW4sdT1zWzFdL3NbM10taSxmPWxbMF0vbFszXS1uLGg9bFsxXS9sWzNdLWk7bys9TWF0aC5hYnMoYypoLXUqZil9cmV0dXJuIG99dmFyIGc9WzEsMSwxXSx2PVswLDAsMF0sbT17Y3ViZUVkZ2VzOmcsYXhpczp2fX0seyJiaXQtdHdpZGRsZSI6ODIsImdsLW1hdDQvbXVsdGlwbHkiOjI2Mywicm9idXN0LW9yaWVudGF0aW9uIjo0OTQsInNwbGl0LXBvbHlnb24iOjUxMX1dLDIzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPVtdLHM9WzAsMCwwXSxsPVswLDAsMF0sYz1bMCwwLDBdLHU9WzAsMCwwXTtvLnB1c2goMCwwLDEsMCwxLDEsMCwwLC0xLDAsMCwtMSwwLDEsMSwwLDEsLTEpO2Zvcih2YXIgZj0wO2Y8MzsrK2Ype2Zvcih2YXIgaD1vLmxlbmd0aC8zfDAsZD0wO2Q8cltmXS5sZW5ndGg7KytkKXt2YXIgZz0rcltmXVtkXS54O28ucHVzaChnLDAsMSxnLDEsMSxnLDAsLTEsZywwLC0xLGcsMSwxLGcsMSwtMSl9dmFyIHY9by5sZW5ndGgvM3wwO3NbZl09aCxsW2ZdPXYtaDtmb3IodmFyIGg9by5sZW5ndGgvM3wwLG09MDttPHJbZl0ubGVuZ3RoOysrbSl7dmFyIGc9K3JbZl1bbV0ueDtvLnB1c2goZywwLDEsZywxLDEsZywwLC0xLGcsMCwtMSxnLDEsMSxnLDEsLTEpfXZhciB2PW8ubGVuZ3RoLzN8MDtjW2ZdPWgsdVtmXT12LWh9dmFyIHk9bih0LG5ldyBGbG9hdDMyQXJyYXkobykpLHg9aSh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBwKHQseSx4LGIsbCxzLHUsYyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMiKS5saW5lLG89WzAsMCwwXSxzPVswLDAsMF0sbD1bMCwwLDBdLGM9WzAsMCwwXSx1PVsxLDFdO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gcCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfXZhciBkPXAucHJvdG90eXBlO2QuYmluZD1mdW5jdGlvbih0LGUscil7dGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXQsdGhpcy5zaGFkZXIudW5pZm9ybXMudmlldz1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb249cix1WzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHVbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlblNoYXBlPXUsdGhpcy52YW8uYmluZCgpfSxkLnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSxkLmRyYXdBeGlzTGluZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWYocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPXMsYVt0XT1lWzFdW3RdLWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPWE7dmFyIG8sdT1oKGMscik7dVt0XSs9ZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLChvPWYobCkpWyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNiksKG89ZihsKSlbKHQrMSklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kcmF3QXhpc1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodGhpcy50aWNrQ291bnRbdF0pe3ZhciBhPWYobyk7YVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWk7dmFyIHM9ZihsKTtzW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKX19LGQuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZ3JpZENvdW50W3RdKXt2YXIgdT1mKHMpO3VbZV09clsxXVtlXS1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz11O3ZhciBwPWgoYyxuKTtwW2VdKz1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1wO3ZhciBkPWYobyk7ZFt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1kO3ZhciBnPWYobCk7Z1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Zyx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5ncmlkQ291bnRbdF0sdGhpcy5ncmlkT2Zmc2V0W3RdKX19LGQuZHJhd1plcm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWYocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPW8sb1t0XT1yWzFdW3RdLXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPW87dmFyIHU9aChjLG4pO3VbdF0rPXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXU7dmFyIHA9ZihsKTtwW2VdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1wLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMudmVydEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjIzMywiZ2wtYnVmZmVyIjoyMzcsImdsLXZhbyI6MzE5fV0sMjMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBtYWpvckF4aXMsIG1pbm9yQXhpcywgc2NyZWVuQXhpcztcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xuXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBtYWpvciA9IHBvc2l0aW9uLnggKiBtYWpvckF4aXM7XG4gIHZlYzMgbWlub3IgPSBwb3NpdGlvbi55ICogbWlub3JBeGlzO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gbWFqb3IgKyBtaW5vciArIG9mZnNldDtcbiAgdmVjMyBwUG9zaXRpb24gPSBwcm9qZWN0KHZQb3NpdGlvbik7XG4gIHZlYzMgb2Zmc2V0ID0gcHJvamVjdCh2UG9zaXRpb24gKyBzY3JlZW5BeGlzICogcG9zaXRpb24ueik7XG5cbiAgdmVjMiBzY3JlZW4gPSBub3JtYWxpemUoKG9mZnNldCAtIHBQb3NpdGlvbikueHkgKiBzY3JlZW5TaGFwZSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocFBvc2l0aW9uICsgdmVjMygwLjUgKiBzY3JlZW4gKiBsaW5lV2lkdGgsIDApLCAxLjApO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59Il0pO3IubGluZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTt2YXIgcz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIGF4aXMsIGFsaWduRGlyLCBhbGlnbk9wdDtcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIGFuZ2xlLCBwaXhlbFNjYWxlO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG5cbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcbiAgdmVjNCBwcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG4gIHJldHVybiBwcC54eXogLyBtYXgocHAudywgMC4wMDAxKTtcbn1cblxuZmxvYXQgY29tcHV0ZVZpZXdBbmdsZSh2ZWMzIGEsIHZlYzMgYikge1xuICB2ZWMzIEEgPSBwcm9qZWN0KGEpO1xuICB2ZWMzIEIgPSBwcm9qZWN0KGIpO1xuXG4gIHJldHVybiBhdGFuKFxuICAgIChCLnkgLSBBLnkpICogcmVzb2x1dGlvbi55LFxuICAgIChCLnggLSBBLngpICogcmVzb2x1dGlvbi54XG4gICk7XG59XG5cbmNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI7XG5jb25zdCBmbG9hdCBUV09fUEkgPSAyLjAgKiBQSTtcbmNvbnN0IGZsb2F0IEhBTEZfUEkgPSAwLjUgKiBQSTtcbmNvbnN0IGZsb2F0IE9ORV9BTkRfSEFMRl9QSSA9IDEuNSAqIFBJO1xuXG5pbnQgb3B0aW9uID0gaW50KGZsb29yKGFsaWduT3B0LnggKyAwLjAwMSkpO1xuZmxvYXQgaHZfcmF0aW8gPSAgICAgICBhbGlnbk9wdC55O1xuYm9vbCBlbmFibGVBbGlnbiA9ICAgIChhbGlnbk9wdC56ICE9IDAuMCk7XG5cbmZsb2F0IG1vZF9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2QoYSwgUEkpO1xufVxuXG5mbG9hdCBwb3NpdGl2ZV9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2RfYW5nbGUoKGEgPCAwLjApID9cbiAgICBhICsgVFdPX1BJIDpcbiAgICBhXG4gICk7XG59XG5cbmZsb2F0IGxvb2tfdXB3YXJkcyhmbG9hdCBhKSB7XG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcbiAgcmV0dXJuICgoYiA+IEhBTEZfUEkpICYmIChiIDw9IE9ORV9BTkRfSEFMRl9QSSkpID9cbiAgICBiIC0gUEkgOlxuICAgIGI7XG59XG5cbmZsb2F0IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChmbG9hdCBhLCBmbG9hdCByYXRpbykge1xuICAvLyByYXRpbyBjb250cm9scyB0aGUgcmF0aW8gYmV0d2VlbiBiZWluZyBob3Jpem9udGFsIHRvICh2ZXJ0aWNhbCArIGhvcml6b250YWwpXG4gIC8vIGlmIHJhdGlvIGlzIHNldCB0byAwLjUgdGhlbiBpdCBpcyA1MCUsIDUwJS5cbiAgLy8gd2hlbiB1c2luZyBhIGhpZ2hlciByYXRpbyBlLmcuIDAuNzUgdGhlIHJlc3VsdCB3b3VsZFxuICAvLyBsaWtlbHkgYmUgbW9yZSBob3Jpem9udGFsIHRoYW4gdmVydGljYWwuXG5cbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuXG4gIHJldHVyblxuICAgIChiIDwgKCAgICAgIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcbiAgICAoYiA8ICgyLjAgLSByYXRpbykgKiBIQUxGX1BJKSA/IC1IQUxGX1BJIDpcbiAgICAoYiA8ICgyLjAgKyByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XG4gICAgKGIgPCAoNC4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDtcbn1cblxuZmxvYXQgcm91bmRUbyhmbG9hdCBhLCBmbG9hdCBiKSB7XG4gIHJldHVybiBmbG9hdChiICogZmxvb3IoKGEgKyAwLjUgKiBiKSAvIGIpKTtcbn1cblxuZmxvYXQgbG9va19yb3VuZF9uX2RpcmVjdGlvbnMoZmxvYXQgYSwgaW50IG4pIHtcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuICBmbG9hdCBkaXYgPSBUV09fUEkgLyBmbG9hdChuKTtcbiAgZmxvYXQgYyA9IHJvdW5kVG8oYiwgZGl2KTtcbiAgcmV0dXJuIGxvb2tfdXB3YXJkcyhjKTtcbn1cblxuZmxvYXQgYXBwbHlBbGlnbk9wdGlvbihmbG9hdCByYXdBbmdsZSwgZmxvYXQgZGVsdGEpIHtcbiAgcmV0dXJuXG4gICAgKG9wdGlvbiA+ICAyKSA/IGxvb2tfcm91bmRfbl9kaXJlY3Rpb25zKHJhd0FuZ2xlICsgZGVsdGEsIG9wdGlvbikgOiAgICAgICAvLyBvcHRpb24gMy1uOiByb3VuZCB0byBuIGRpcmVjdGlvbnNcbiAgICAob3B0aW9uID09IDIpID8gbG9va19ob3Jpem9udGFsX29yX3ZlcnRpY2FsKHJhd0FuZ2xlICsgZGVsdGEsIGh2X3JhdGlvKSA6IC8vIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAgICAob3B0aW9uID09IDEpID8gcmF3QW5nbGUgKyBkZWx0YSA6ICAgICAgIC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgZmxpcCB0byBhbGlnbiB3aXRoIG9uZSBkaXJlY3Rpb24gb2YgdGhlIGF4aXNcbiAgICAob3B0aW9uID09IDApID8gbG9va191cHdhcmRzKHJhd0FuZ2xlKSA6IC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgc3RheSB1cHdhcmRzXG4gICAgKG9wdGlvbiA9PS0xKSA/IDAuMCA6ICAgICAgICAgICAgICAgICAgICAvLyB1c2VmdWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGFsbCB0ZXh0cyByZW1haW5zIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgcmF3QW5nbGU7ICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSByZXR1cm4gYmFjayByYXcgaW5wdXQgYW5nbGVcbn1cblxuYm9vbCBpc0F4aXNUaXRsZSA9IChheGlzLnggPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnkgPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnogPT0gMC4wKTtcblxudm9pZCBtYWluKCkge1xuICAvL0NvbXB1dGUgd29ybGQgb2Zmc2V0XG4gIGZsb2F0IGF4aXNEaXN0YW5jZSA9IHBvc2l0aW9uLno7XG4gIHZlYzMgZGF0YVBvc2l0aW9uID0gYXhpc0Rpc3RhbmNlICogYXhpcyArIG9mZnNldDtcblxuICBmbG9hdCBiZXRhID0gYW5nbGU7IC8vIGkuZS4gdXNlciBkZWZpbmVkIGF0dHJpYnV0ZXMgZm9yIGVhY2ggdGlja1xuXG4gIGZsb2F0IGF4aXNBbmdsZTtcbiAgZmxvYXQgY2xpcEFuZ2xlO1xuICBmbG9hdCBmbGlwO1xuXG4gIGlmIChlbmFibGVBbGlnbikge1xuICAgIGF4aXNBbmdsZSA9IChpc0F4aXNUaXRsZSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYXhpcyk7XG4gICAgY2xpcEFuZ2xlID0gY29tcHV0ZVZpZXdBbmdsZShkYXRhUG9zaXRpb24sIGRhdGFQb3NpdGlvbiArIGFsaWduRGlyKTtcblxuICAgIGF4aXNBbmdsZSArPSAoc2luKGF4aXNBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XG4gICAgY2xpcEFuZ2xlICs9IChzaW4oY2xpcEFuZ2xlKSA8IDAuMCkgPyBQSSA6IDAuMDtcblxuICAgIGZsaXAgPSAoZG90KHZlYzIoY29zKGF4aXNBbmdsZSksIHNpbihheGlzQW5nbGUpKSxcbiAgICAgICAgICAgICAgICB2ZWMyKHNpbihjbGlwQW5nbGUpLC1jb3MoY2xpcEFuZ2xlKSkpID4gMC4wKSA/IDEuMCA6IDAuMDtcblxuICAgIGJldGEgKz0gYXBwbHlBbGlnbk9wdGlvbihjbGlwQW5nbGUsIGZsaXAgKiBQSSk7XG4gIH1cblxuICAvL0NvbXB1dGUgcGxhbmUgb2Zmc2V0XG4gIHZlYzIgcGxhbmVDb29yZCA9IHBvc2l0aW9uLnh5ICogcGl4ZWxTY2FsZTtcblxuICBtYXQyIHBsYW5lWGZvcm0gPSBzY2FsZSAqIG1hdDIoXG4gICAgIGNvcyhiZXRhKSwgc2luKGJldGEpLFxuICAgIC1zaW4oYmV0YSksIGNvcyhiZXRhKVxuICApO1xuXG4gIHZlYzIgdmlld09mZnNldCA9IDIuMCAqIHBsYW5lWGZvcm0gKiBwbGFuZUNvb3JkIC8gcmVzb2x1dGlvbjtcblxuICAvL0NvbXB1dGUgY2xpcCBwb3NpdGlvblxuICB2ZWMzIGNsaXBQb3NpdGlvbiA9IHByb2plY3QoZGF0YVBvc2l0aW9uKTtcblxuICAvL0FwcGx5IHRleHQgb2Zmc2V0IGluIGNsaXAgY29vcmRpbmF0ZXNcbiAgY2xpcFBvc2l0aW9uICs9IHZlYzModmlld09mZnNldCwgMC4wKTtcblxuICAvL0RvbmVcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBQb3NpdGlvbiwgMS4wKTtcbn0iXSksbD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn0iXSk7ci50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBpKHQscyxsLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XSl9O3ZhciBjPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGVuYWJsZTtcbnVuaWZvcm0gdmVjMyBib3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcblxuICB2ZWMzIHNpZ25BeGlzID0gc2lnbihib3VuZHNbMV0gLSBib3VuZHNbMF0pO1xuXG4gIHZlYzMgcmVhbE5vcm1hbCA9IHNpZ25BeGlzICogbm9ybWFsO1xuXG4gIGlmKGRvdChyZWFsTm9ybWFsLCBlbmFibGUpID4gMC4wKSB7XG4gICAgdmVjMyBtaW5SYW5nZSA9IG1pbihib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBtYXhSYW5nZSA9IG1heChib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBuUG9zaXRpb24gPSBtaXgobWluUmFuZ2UsIG1heFJhbmdlLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5Qb3NpdGlvbiwgMS4wKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH1cblxuICBjb2xvckNoYW5uZWwgPSBhYnMocmVhbE5vcm1hbCk7XG59Il0pLHU9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3JDaGFubmVsLnggKiBjb2xvcnNbMF0gK1xuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueSAqIGNvbG9yc1sxXSArXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC56ICogY29sb3JzWzJdO1xufSJdKTtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYyx1LG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pfX0seyJnbC1zaGFkZXIiOjI5NyxnbHNsaWZ5OjQwMX1dLDIzNDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyxsKXt2YXIgdT1uKHQpLGY9aSh0LFt7YnVmZmVyOnUsc2l6ZTozfV0pLGg9byh0KTtoLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MDt2YXIgcD1uZXcgYyh0LGgsdSxmKTtyZXR1cm4gcC51cGRhdGUoZSxyLGEscyxsKSxwfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgidmVjdG9yaXplLXRleHQiKSxvPXQoIi4vc2hhZGVycyIpLnRleHQscz13aW5kb3d8fHIuZ2xvYmFsfHx7fSxsPXMuX19URVhUX0NBQ0hFfHx7fTtzLl9fVEVYVF9DQUNIRT17fTtmdW5jdGlvbiBjKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMuYnVmZmVyPXIsdGhpcy52YW89bix0aGlzLnRpY2tPZmZzZXQ9dGhpcy50aWNrQ291bnQ9dGhpcy5sYWJlbE9mZnNldD10aGlzLmxhYmVsQ291bnQ9bnVsbH12YXIgdT1jLnByb3RvdHlwZSxmPVswLDBdO3UuYmluZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnZhby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpO3ZhciBpPXRoaXMuc2hhZGVyLnVuaWZvcm1zO2kubW9kZWw9dCxpLnZpZXc9ZSxpLnByb2plY3Rpb249cixpLnBpeGVsU2NhbGU9bixmWzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnJlc29sdXRpb249Zn0sdS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnZhby51bmJpbmQoKX0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1bXTtmdW5jdGlvbiBzKHQsZSxyLG4saSxzKXt2YXIgYz1sW3JdO2N8fChjPWxbcl09e30pO3ZhciB1PWNbZV07dXx8KHU9Y1tlXT1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gYSh0LGUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLndhcm4oJ2Vycm9yIHZlY3Rvcml6aW5nIHRleHQ6IicrdCsnIiBlcnJvcjonLGUpLHtjZWxsczpbXSxwb3NpdGlvbnM6W119fX0oZSx7dHJpYW5nbGVzOiEwLGZvbnQ6cix0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVTcGFjaW5nOmksc3R5bGV0YWdzOnN9KSk7Zm9yKHZhciBmPShufHwxMikvMTIsaD11LnBvc2l0aW9ucyxwPXUuY2VsbHMsZD0wLGc9cC5sZW5ndGg7ZDxnOysrZClmb3IodmFyIHY9cFtkXSxtPTI7bT49MDstLW0pe3ZhciB5PWhbdlttXV07by5wdXNoKGYqeVswXSwtZip5WzFdLHQpfX1mb3IodmFyIGM9WzAsMCwwXSx1PVswLDAsMF0sZj1bMCwwLDBdLGg9WzAsMCwwXSxwPXticmVha2xpbmVzOiEwLGJvbGRzOiEwLGl0YWxpY3M6ITAsc3Vic2NyaXB0czohMCxzdXBlcnNjcmlwdHM6ITB9LGQ9MDtkPDM7KytkKXtmW2RdPW8ubGVuZ3RoLzN8MCxzKC41Kih0WzBdW2RdK3RbMV1bZF0pLGVbZF0scltkXSwxMiwxLjI1LHApLGhbZF09KG8ubGVuZ3RoLzN8MCktZltkXSxjW2RdPW8ubGVuZ3RoLzN8MDtmb3IodmFyIGc9MDtnPG5bZF0ubGVuZ3RoOysrZyluW2RdW2ddLnRleHQmJnMobltkXVtnXS54LG5bZF1bZ10udGV4dCxuW2RdW2ddLmZvbnR8fGksbltkXVtnXS5mb250U2l6ZXx8MTIsMS4yNSxwKTt1W2RdPShvLmxlbmd0aC8zfDApLWNbZF19dGhpcy5idWZmZXIudXBkYXRlKG8pLHRoaXMudGlja09mZnNldD1jLHRoaXMudGlja0NvdW50PXUsdGhpcy5sYWJlbE9mZnNldD1mLHRoaXMubGFiZWxDb3VudD1ofSx1LmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMudGlja0NvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduRGlyPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25PcHQ9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSkpfSx1LmRyYXdMYWJlbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMubGFiZWxDb3VudFt0XSYmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbkRpcj1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduT3B0PXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLmxhYmVsQ291bnRbdF0sdGhpcy5sYWJlbE9mZnNldFt0XSkpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX19KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHsiLi9zaGFkZXJzIjoyMzMsX3Byb2Nlc3M6NDc0LCJnbC1idWZmZXIiOjIzNywiZ2wtdmFvIjozMTksInZlY3Rvcml6ZS10ZXh0Ijo1MzR9XSwyMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQrIiIsbj1yLmluZGV4T2YoIi4iKSxpPTA7bj49MCYmKGk9ci5sZW5ndGgtbi0xKTt2YXIgYT1NYXRoLnBvdygxMCxpKSxvPU1hdGgucm91bmQodCplKmEpLHM9bysiIjtpZihzLmluZGV4T2YoImUiKT49MClyZXR1cm4gczt2YXIgbD1vL2EsYz1vJWE7bzwwPyhsPTB8LU1hdGguY2VpbChsKSxjPTB8LWMpOihsPTB8TWF0aC5mbG9vcihsKSxjfD0wKTt2YXIgdT0iIitsO2lmKG88MCYmKHU9Ii0iK3UpLGkpe2Zvcih2YXIgZj0iIitjO2YubGVuZ3RoPGk7KWY9IjAiK2Y7cmV0dXJuIHUrIi4iK2Z9cmV0dXJuIHV9ci5jcmVhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10saT0wO2k8MzsrK2kpe2Zvcih2YXIgYT1bXSxvPSh0WzBdW2ldLHRbMV1baV0sMCk7byplW2ldPD10WzFdW2ldOysrbylhLnB1c2goe3g6byplW2ldLHRleHQ6bihlW2ldLG8pfSk7Zm9yKHZhciBvPS0xO28qZVtpXT49dFswXVtpXTstLW8pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO3IucHVzaChhKX1yZXR1cm4gcn0sci5lcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDsrK24pe3ZhciBpPXRbcl1bbl0sYT1lW3JdW25dO2lmKGkueCE9PWEueHx8aS50ZXh0IT09YS50ZXh0fHxpLmZvbnQhPT1hLmZvbnR8fGkuZm9udENvbG9yIT09YS5mb250Q29sb3J8fGkuZm9udFNpemUhPT1hLmZvbnRTaXplfHxpLmR4IT09YS5keHx8aS5keSE9PWEuZHkpcmV0dXJuITF9fXJldHVybiEwfX0se31dLDIzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxmKXt2YXIgaD1lLm1vZGVsfHxjLHA9ZS52aWV3fHxjLG09ZS5wcm9qZWN0aW9ufHxjLHk9ZS5fb3J0aG98fCExLHg9dC5ib3VuZHMsYj0oZj1mfHxhKGgscCxtLHgseSkpLmF4aXM7byh1LHAsaCksbyh1LG0sdSk7Zm9yKHZhciBfPWcsdz0wO3c8MzsrK3cpX1t3XS5sbz0xLzAsX1t3XS5oaT0tMS8wLF9bd10ucGl4ZWxzUGVyRGF0YVVuaXQ9MS8wO3ZhciBrPW4ocyh1LHUpKTtzKHUsdSk7Zm9yKHZhciBUPTA7VDwzOysrVCl7dmFyIEE9KFQrMSklMyxNPShUKzIpJTMsUz12O3Q6Zm9yKHZhciB3PTA7dzwyOysrdyl7dmFyIEU9W107aWYoYltUXTwwIT0hIXcpe1NbVF09eFt3XVtUXTtmb3IodmFyIEM9MDtDPDI7KytDKXtTW0FdPXhbQ153XVtBXTtmb3IodmFyIEw9MDtMPDI7KytMKVNbTV09eFtMXkNed11bTV0sRS5wdXNoKFMuc2xpY2UoKSl9Zm9yKHZhciB6PXk/NTo0LEM9ejtDPT09ejsrK0Mpe2lmKDA9PT1FLmxlbmd0aCljb250aW51ZSB0O0U9aS5wb3NpdGl2ZShFLGtbQ10pfWZvcih2YXIgQz0wO0M8RS5sZW5ndGg7KytDKWZvcih2YXIgTT1FW0NdLE89ZCh2LHUsTSxyLGwpLEw9MDtMPDM7KytMKV9bTF0ubG89TWF0aC5taW4oX1tMXS5sbyxNW0xdKSxfW0xdLmhpPU1hdGgubWF4KF9bTF0uaGksTVtMXSksTCE9PVQmJihfW0xdLnBpeGVsc1BlckRhdGFVbml0PU1hdGgubWluKF9bTF0ucGl4ZWxzUGVyRGF0YVVuaXQsTWF0aC5hYnMoT1tMXSkpKX19fXJldHVybiBffTt2YXIgbj10KCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIiksaT10KCJzcGxpdC1wb2x5Z29uIiksYT10KCIuL2xpYi9jdWJlLmpzIiksbz10KCJnbC1tYXQ0L211bHRpcGx5Iikscz10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGw9dCgiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IiksYz1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtmdW5jdGlvbiBmKHQsZSxyKXt0aGlzLmxvPXQsdGhpcy5oaT1lLHRoaXMucGl4ZWxzUGVyRGF0YVVuaXQ9cn12YXIgaD1bMCwwLDAsMV0scD1bMCwwLDAsMV07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8MzsrK2Epe2Zvcih2YXIgbz1oLHM9cCxjPTA7YzwzOysrYylzW2NdPW9bY109cltjXTtzWzNdPW9bM109MSxzW2FdKz0xLGwocyxzLGUpLHNbM108MCYmKHRbYV09MS8wKSxvW2FdLT0xLGwobyxvLGUpLG9bM108MCYmKHRbYV09MS8wKTt2YXIgdT0ob1swXS9vWzNdLXNbMF0vc1szXSkqbixmPShvWzFdL29bM10tc1sxXS9zWzNdKSppO3RbYV09LjI1Kk1hdGguc3FydCh1KnUrZipmKX1yZXR1cm4gdH12YXIgZz1bbmV3IGYoMS8wLC0xLzAsMS8wKSxuZXcgZigxLzAsLTEvMCwxLzApLG5ldyBmKDEvMCwtMS8wLDEvMCldLHY9WzAsMCwwXX0seyIuL2xpYi9jdWJlLmpzIjoyMzEsImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXMiOjIyMCwiZ2wtbWF0NC9tdWx0aXBseSI6MjYzLCJnbC1tYXQ0L3RyYW5zcG9zZSI6MjcyLCJnbC12ZWM0L3RyYW5zZm9ybU1hdDQiOjM5MCwic3BsaXQtcG9seWdvbiI6NTExfV0sMjM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgibmRhcnJheS1vcHMiKSxhPXQoIm5kYXJyYXkiKSxvPVsidWludDgiLCJ1aW50OF9jbGFtcGVkIiwidWludDE2IiwidWludDMyIiwiaW50OCIsImludDE2IiwiaW50MzIiLCJmbG9hdDMyIl07ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMuZ2w9dCx0aGlzLnR5cGU9ZSx0aGlzLmhhbmRsZT1yLHRoaXMubGVuZ3RoPW4sdGhpcy51c2FnZT1pfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlLHIsbixpLGEpe3ZhciBvPWkubGVuZ3RoKmkuQllURVNfUEVSX0VMRU1FTlQ7aWYoYTwwKXJldHVybiB0LmJ1ZmZlckRhdGEoZSxpLG4pLG87aWYobythPnIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IElmIHJlc2l6aW5nIGJ1ZmZlciwgbXVzdCBub3Qgc3BlY2lmeSBvZmZzZXQiKTtyZXR1cm4gdC5idWZmZXJTdWJEYXRhKGUsYSxpKSxyfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bi5tYWxsb2ModC5sZW5ndGgsZSksaT10Lmxlbmd0aCxhPTA7YTxpOysrYSlyW2FdPXRbYV07cmV0dXJuIHJ9bC5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmhhbmRsZSl9LGwudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSxudWxsKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5oYW5kbGUpfSxsLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSYmKGU9LTEpLHRoaXMuYmluZCgpLCJvYmplY3QiPT10eXBlb2YgdCYmInVuZGVmaW5lZCIhPXR5cGVvZiB0LnNoYXBlKXt2YXIgcj10LmR0eXBlO2lmKG8uaW5kZXhPZihyKTwwJiYocj0iZmxvYXQzMiIpLHRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIpcj1nbC5nZXRFeHRlbnNpb24oIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSYmInVpbnQxNiIhPT1yPyJ1aW50MzIiOiJ1aW50MTYiO2lmKHI9PT10LmR0eXBlJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7aWYoZVtuXSE9PXIpcmV0dXJuITE7cio9dFtuXX1yZXR1cm4hMH0odC5zaGFwZSx0LnN0cmlkZSkpMD09PXQub2Zmc2V0JiZ0LmRhdGEubGVuZ3RoPT09dC5zaGFwZVswXT90aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLGUpOnRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEuc3ViYXJyYXkodC5vZmZzZXQsdC5zaGFwZVswXSksZSk7ZWxzZXt2YXIgcz1uLm1hbGxvYyh0LnNpemUsciksbD1hKHMsdC5zaGFwZSk7aS5hc3NpZ24obCx0KSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP3M6cy5zdWJhcnJheSgwLHQuc2l6ZSksZSksbi5mcmVlKHMpfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBmO2Y9dGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUj91KHQsInVpbnQxNiIpOnUodCwiZmxvYXQzMiIpLHRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSxlPDA/ZjpmLnN1YmFycmF5KDAsdC5sZW5ndGgpLGUpLG4uZnJlZShmKX1lbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdCxlKTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgdCYmdm9pZCAwIT09dCl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCBkYXRhIHR5cGUiKTtpZihlPj0wKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBDYW5ub3Qgc3BlY2lmeSBvZmZzZXQgd2hlbiByZXNpemluZyBidWZmZXIiKTsodHw9MCk8PTAmJih0PTEpLHRoaXMuZ2wuYnVmZmVyRGF0YSh0aGlzLnR5cGUsMHx0LHRoaXMudXNhZ2UpLHRoaXMubGVuZ3RoPXR9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYocj1yfHx0LkFSUkFZX0JVRkZFUixuPW58fHQuRFlOQU1JQ19EUkFXLHIhPT10LkFSUkFZX0JVRkZFUiYmciE9PXQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgdHlwZSBmb3Igd2ViZ2wgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5BUlJBWV9CVUZGRVIgb3IgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTtpZihuIT09dC5EWU5BTUlDX0RSQVcmJm4hPT10LlNUQVRJQ19EUkFXJiZuIT09dC5TVFJFQU1fRFJBVyl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCB1c2FnZSBmb3IgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5EWU5BTUlDX0RSQVcsIGdsLlNUQVRJQ19EUkFXIG9yIGdsLlNUUkVBTV9EUkFXIik7dmFyIGk9dC5jcmVhdGVCdWZmZXIoKSxhPW5ldyBzKHQscixpLDAsbik7cmV0dXJuIGEudXBkYXRlKGUpLGF9fSx7bmRhcnJheTo0NDIsIm5kYXJyYXktb3BzIjo0MzYsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sMjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXZlYzMiKSxpPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXT49ZSlyZXR1cm4gci0xO3JldHVybiByfSxhPW4uY3JlYXRlKCksbz1uLmNyZWF0ZSgpLHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxsPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPXRbMF0sdT10WzFdLGY9dFsyXSxoPXJbMF0ubGVuZ3RoLHA9clsxXS5sZW5ndGgsZD1yWzJdLmxlbmd0aCxnPWkoclswXSxjKSx2PWkoclsxXSx1KSxtPWkoclsyXSxmKSx5PWcrMSx4PXYrMSxiPW0rMTtpZihsJiYoZz1zKGcsMCxoLTEpLHk9cyh5LDAsaC0xKSx2PXModiwwLHAtMSkseD1zKHgsMCxwLTEpLG09cyhtLDAsZC0xKSxiPXMoYiwwLGQtMSkpLGc8MHx8djwwfHxtPDB8fHk+PWh8fHg+PXB8fGI+PWQpcmV0dXJuIG4uY3JlYXRlKCk7dmFyIF89KGMtclswXVtnXSkvKHJbMF1beV0tclswXVtnXSksdz0odS1yWzFdW3ZdKS8oclsxXVt4XS1yWzFdW3ZdKSxrPShmLXJbMl1bbV0pLyhyWzJdW2JdLXJbMl1bbV0pOyhfPDB8fF8+MXx8aXNOYU4oXykpJiYoXz0wKSwodzwwfHx3PjF8fGlzTmFOKHcpKSYmKHc9MCksKGs8MHx8az4xfHxpc05hTihrKSkmJihrPTApO3ZhciBUPW0qaCpwLEE9YipoKnAsTT12KmgsUz14KmgsRT1nLEM9eSxMPWVbTStUK0VdLHo9ZVtNK1QrQ10sTz1lW1MrVCtFXSxJPWVbUytUK0NdLEQ9ZVtNK0ErRV0sUD1lW00rQStDXSxSPWVbUytBK0VdLEY9ZVtTK0ErQ10sQj1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoQixMLHosXyksbi5sZXJwKGEsTyxJLF8pLG4ubGVycChCLEIsYSx3KSxuLmxlcnAoYSxELFAsXyksbi5sZXJwKG8sUixGLF8pLG4ubGVycChhLGEsbyx3KSxuLmxlcnAoQixCLGEsayksQn07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cj10LnBvc2l0aW9ucz90LnBvc2l0aW9uczpmdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKWkucHVzaChbblthXSxyW29dLGVbc11dKTtyZXR1cm4gaX0odC5tZXNoZ3JpZCk7dmFyIGk9dC5tZXNoZ3JpZCxhPXQudmVjdG9ycyxvPXtwb3NpdGlvbnM6W10sdmVydGV4SW50ZW5zaXR5OltdLHZlcnRleEludGVuc2l0eUJvdW5kczp0LnZlcnRleEludGVuc2l0eUJvdW5kcyx2ZXJ0ZXhOb3JtYWxzOltdLHZlY3RvcnM6W10sY2VsbHM6W10sY29uZU9mZnNldDp0LmNvbmVPZmZzZXQsY29sb3JtYXA6dC5jb2xvcm1hcH07aWYoMD09PXQucG9zaXRpb25zLmxlbmd0aClyZXR1cm4gZSYmKGVbMF09WzAsMCwwXSxlWzFdPVswLDAsMF0pLG87Zm9yKHZhciBzPTAsYz0xLzAsdT0tMS8wLGY9MS8wLGg9LTEvMCxwPTEvMCxkPS0xLzAsZz1udWxsLHY9bnVsbCxtPVtdLHk9MS8wLHg9MDt4PHIubGVuZ3RoO3grKyl7dmFyIGIsXz1yW3hdO2M9TWF0aC5taW4oX1swXSxjKSx1PU1hdGgubWF4KF9bMF0sdSksZj1NYXRoLm1pbihfWzFdLGYpLGg9TWF0aC5tYXgoX1sxXSxoKSxwPU1hdGgubWluKF9bMl0scCksZD1NYXRoLm1heChfWzJdLGQpLGI9aT9sKF8sYSxpLCEwKTphW3hdLG4ubGVuZ3RoKGIpPnMmJihzPW4ubGVuZ3RoKGIpKSx4JiYoeT1NYXRoLm1pbih5LDIqbi5kaXN0YW5jZShnLF8pLyhuLmxlbmd0aCh2KStuLmxlbmd0aChiKSkpKSxnPV8sdj1iLG0ucHVzaChiKX12YXIgdz1bYyxmLHBdLGs9W3UsaCxkXTtlJiYoZVswXT13LGVbMV09ayksMD09PXMmJihzPTEpO3ZhciBUPTEvcztpc0Zpbml0ZSh5KSYmIWlzTmFOKHkpfHwoeT0xKSxvLnZlY3RvclNjYWxlPXk7dmFyIEE9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PXQmJm4uc2V0KGksdCxlLHIpLGl9KDAsMSwwKSxNPXQuY29uZVNpemV8fC41O3QuYWJzb2x1dGVDb25lU2l6ZSYmKE09dC5hYnNvbHV0ZUNvbmVTaXplKlQpLG8uY29uZVNjYWxlPU07eD0wO2Zvcih2YXIgUz0wO3g8ci5sZW5ndGg7eCsrKWZvcih2YXIgRT0oXz1yW3hdKVswXSxDPV9bMV0sTD1fWzJdLHo9bVt4XSxPPW4ubGVuZ3RoKHopKlQsST0wO0k8ODtJKyspe28ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVydGV4SW50ZW5zaXR5LnB1c2goTyxPLE8pLG8udmVydGV4SW50ZW5zaXR5LnB1c2goTyxPLE8pLG8udmVydGV4Tm9ybWFscy5wdXNoKEEsQSxBKSxvLnZlcnRleE5vcm1hbHMucHVzaChBLEEsQSk7dmFyIEQ9by5wb3NpdGlvbnMubGVuZ3RoO28uY2VsbHMucHVzaChbRC02LEQtNSxELTRdLFtELTMsRC0yLEQtMV0pfXJldHVybiBvfSxlLmV4cG9ydHMuY3JlYXRlQ29uZU1lc2g9dCgiLi9saWIvY29uZW1lc2giKX0seyIuL2xpYi9jb25lbWVzaCI6MjM5LCJnbC12ZWMzIjozMzh9XSwyMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJub3JtYWxzIiksbD10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L2ludmVydCIpLHU9dCgibmRhcnJheSIpLGY9dCgiY29sb3JtYXAiKSxoPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIikscD10KCJ0eXBlZGFycmF5LXBvb2wiKSxkPXQoIi4vc2hhZGVycyIpLGc9ZC5tZXNoU2hhZGVyLHY9ZC5waWNrU2hhZGVyLG09WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHkodCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsZyx2LHkseCxiLF8sdyxrLFQpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLnBpY2tTaGFkZXI9bix0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWksdGhpcy50cmlhbmdsZVZlY3RvcnM9YSx0aGlzLnRyaWFuZ2xlQ29sb3JzPXMsdGhpcy50cmlhbmdsZU5vcm1hbHM9Yyx0aGlzLnRyaWFuZ2xlVVZzPWwsdGhpcy50cmlhbmdsZUlkcz1vLHRoaXMudHJpYW5nbGVWQU89dSx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuZWRnZVBvc2l0aW9ucz1mLHRoaXMuZWRnZUNvbG9ycz1wLHRoaXMuZWRnZVVWcz1kLHRoaXMuZWRnZUlkcz1oLHRoaXMuZWRnZVZBTz1nLHRoaXMuZWRnZUNvdW50PTAsdGhpcy5wb2ludFBvc2l0aW9ucz12LHRoaXMucG9pbnRDb2xvcnM9eCx0aGlzLnBvaW50VVZzPWIsdGhpcy5wb2ludFNpemVzPV8sdGhpcy5wb2ludElkcz15LHRoaXMucG9pbnRWQU89dyx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbnRvdXJMaW5lV2lkdGg9MSx0aGlzLmNvbnRvdXJQb3NpdGlvbnM9ayx0aGlzLmNvbnRvdXJWQU89VCx0aGlzLmNvbnRvdXJDb3VudD0wLHRoaXMuY29udG91ckNvbG9yPVswLDAsMF0sdGhpcy5jb250b3VyRW5hYmxlPSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuY29uZVNjYWxlPTIsdGhpcy52ZWN0b3JTY2FsZT0xLHRoaXMuY29uZU9mZnNldD0uMjUsdGhpcy5fbW9kZWw9bSx0aGlzLl92aWV3PW0sdGhpcy5fcHJvamVjdGlvbj1tLHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIHg9eS5wcm90b3R5cGU7ZnVuY3Rpb24gYih0KXt2YXIgZT1uKHQsdi52ZXJ0ZXgsdi5mcmFnbWVudCxudWxsLHYuYXR0cmlidXRlcyk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy52ZWN0b3IubG9jYXRpb249NSxlfXguaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSx4LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LHgucGlja1Nsb3RzPTEseC5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx4LmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZih0JiZ0aGlzLmNvbnRvdXJFbmFibGUpe2Zvcih2YXIgZT1oKHRoaXMuY2VsbHMsdGhpcy5pbnRlbnNpdHksdC5pbnRlbnNpdHkpLHI9ZS5jZWxscyxuPWUudmVydGV4SWRzLGk9ZS52ZXJ0ZXhXZWlnaHRzLGE9ci5sZW5ndGgsbz1wLm1hbGxvY0Zsb2F0MzIoNiphKSxzPTAsbD0wO2w8YTsrK2wpZm9yKHZhciBjPXJbbF0sdT0wO3U8MjsrK3Upe3ZhciBmPWNbMF07Mj09PWMubGVuZ3RoJiYoZj1jW3VdKTtmb3IodmFyIGQ9bltmXVswXSxnPW5bZl1bMV0sdj1pW2ZdLG09MS12LHk9dGhpcy5wb3NpdGlvbnNbZF0seD10aGlzLnBvc2l0aW9uc1tnXSxiPTA7YjwzOysrYilvW3MrK109dip5W2JdK20qeFtiXX10aGlzLmNvbnRvdXJDb3VudD1zLzN8MCx0aGlzLmNvbnRvdXJQb3NpdGlvbnMudXBkYXRlKG8uc3ViYXJyYXkoMCxzKSkscC5mcmVlKG8pfWVsc2UgdGhpcy5jb250b3VyQ291bnQ9MH0seC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsImNvbnRvdXJFbmFibGUiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPXQuY29udG91ckNvbG9yKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImxpZ2h0UG9zaXRpb24iaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHZvaWQgMCE9PXQudmVjdG9yU2NhbGUmJih0aGlzLnZlY3RvclNjYWxlPXQudmVjdG9yU2NhbGUpLHZvaWQgMCE9PXQuY29uZVNjYWxlJiYodGhpcy5jb25lU2NhbGU9dC5jb25lU2NhbGUpLHZvaWQgMCE9PXQuY29uZU9mZnNldCYmKHRoaXMuY29uZU9mZnNldD10LmNvbmVPZmZzZXQpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPWYoe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OiJyZ2JhIn0pLHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj0wO248MjU2Oysrbil7Zm9yKHZhciBpPWVbbl0sYT0wO2E8MzsrK2Epcls0Km4rYV09aVthXTtyWzQqbiszXT0yNTUqaVszXX1yZXR1cm4gdShyLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucyxpPXQudmVjdG9ycztpZihuJiZyJiZpKXt2YXIgYT1bXSxsPVtdLGM9W10saD1bXSxwPVtdLGQ9W10sZz1bXSx2PVtdLG09W10seT1bXSx4PVtdLGI9W10sXz1bXSx3PVtdLGs9W107dGhpcy5jZWxscz1yLHRoaXMucG9zaXRpb25zPW47dmFyIFQ9dC52ZXJ0ZXhOb3JtYWxzLEE9dC5jZWxsTm9ybWFscyxNPXZvaWQgMD09PXQudmVydGV4Tm9ybWFsc0Vwc2lsb24/MWUtNjp0LnZlcnRleE5vcm1hbHNFcHNpbG9uLFM9dm9pZCAwPT09dC5mYWNlTm9ybWFsc0Vwc2lsb24/MWUtNjp0LmZhY2VOb3JtYWxzRXBzaWxvbjt0LnVzZUZhY2V0Tm9ybWFscyYmIUEmJihBPXMuZmFjZU5vcm1hbHMocixuLFMpKSxBfHxUfHwoVD1zLnZlcnRleE5vcm1hbHMocixuLE0pKTt2YXIgRT10LnZlcnRleENvbG9ycyxDPXQuY2VsbENvbG9ycyxMPXQubWVzaENvbG9yfHxbMSwxLDEsMV0sej10LnZlcnRleFVWcyxPPXQudmVydGV4SW50ZW5zaXR5LEk9dC5jZWxsVVZzLEQ9dC5jZWxsSW50ZW5zaXR5LFA9MS8wLFI9LTEvMDtpZigheiYmIUkpaWYoTylpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcylQPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxSPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgRj0wO0Y8Ty5sZW5ndGg7KytGKXt2YXIgQj1PW0ZdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9ZWxzZSBpZihEKWZvcihGPTA7RjxELmxlbmd0aDsrK0Ype0I9RFtGXTtQPU1hdGgubWluKFAsQiksUj1NYXRoLm1heChSLEIpfWVsc2UgZm9yKEY9MDtGPG4ubGVuZ3RoOysrRil7Qj1uW0ZdWzJdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9dGhpcy5pbnRlbnNpdHk9T3x8KEQ/ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT0wO3ZhciBhPXQubGVuZ3RoO2ZvcihpPTA7aTxhOysraSlmb3IodmFyIG89dFtpXSxzPTA7czxvLmxlbmd0aDsrK3MpbltvW3NdXT1yW2ldO3JldHVybiBufShyLG4ubGVuZ3RoLEQpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pKTt2YXIgTj10LnBvaW50U2l6ZXMsaj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoRj0wO0Y8bi5sZW5ndGg7KytGKWZvcih2YXIgVj1uW0ZdLFU9MDtVPDM7KytVKSFpc05hTihWW1VdKSYmaXNGaW5pdGUoVltVXSkmJih0aGlzLmJvdW5kc1swXVtVXT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVtVXSxWW1VdKSx0aGlzLmJvdW5kc1sxXVtVXT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVtVXSxWW1VdKSk7dmFyIHE9MCxIPTAsRz0wO3Q6Zm9yKEY9MDtGPHIubGVuZ3RoOysrRil7dmFyIFk9cltGXTtzd2l0Y2goWS5sZW5ndGgpe2Nhc2UgMTpmb3IoVj1uW1g9WVswXV0sVT0wO1U8MzsrK1UpaWYoaXNOYU4oVltVXSl8fCFpc0Zpbml0ZShWW1VdKSljb250aW51ZSB0O3gucHVzaChWWzBdLFZbMV0sVlsyXSxWWzNdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOmIucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLF8ucHVzaCgkWzBdLCRbMV0pLE4/dy5wdXNoKE5bWF0pOncucHVzaChqKSxrLnB1c2goRiksRys9MTticmVhaztjYXNlIDI6Zm9yKFU9MDtVPDI7KytVKXtWPW5bWD1ZW1VdXTtmb3IodmFyIFc9MDtXPDM7KytXKWlmKGlzTmFOKFZbV10pfHwhaXNGaW5pdGUoVltXXSkpY29udGludWUgdH1mb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVlbVV1dO2cucHVzaChWWzBdLFZbMV0sVlsyXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP3YucHVzaChaWzBdLFpbMV0sWlsyXSwxKTp2LnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxtLnB1c2goJFswXSwkWzFdKSx5LnB1c2goRil9SCs9MTticmVhaztjYXNlIDM6Zm9yKFU9MDtVPDM7KytVKWZvcihWPW5bWD1ZW1VdXSxXPTA7VzwzOysrVylpZihpc05hTihWW1ddKXx8IWlzRmluaXRlKFZbV10pKWNvbnRpbnVlIHQ7Zm9yKFU9MDtVPDM7KytVKXt2YXIgWDtWPW5bWD1ZWzItVV1dO2EucHVzaChWWzBdLFZbMV0sVlsyXSxWWzNdKTt2YXIgWiwkLEosSz1pW1hdO2wucHVzaChLWzBdLEtbMV0sS1syXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP2MucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpjLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxwLnB1c2goJFswXSwkWzFdKSxKPVQ/VFtYXTpBW0ZdLGgucHVzaChKWzBdLEpbMV0sSlsyXSksZC5wdXNoKEYpfXErPTF9fXRoaXMucG9pbnRDb3VudD1HLHRoaXMuZWRnZUNvdW50PUgsdGhpcy50cmlhbmdsZUNvdW50PXEsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUoeCksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoYiksdGhpcy5wb2ludFVWcy51cGRhdGUoXyksdGhpcy5wb2ludFNpemVzLnVwZGF0ZSh3KSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUoZyksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZSh2KSx0aGlzLmVkZ2VVVnMudXBkYXRlKG0pLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KHkpKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShhKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy51cGRhdGUobCksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYyksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUocCksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGgpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShkKSl9fSx4LmRyYXdUcmFuc3BhcmVudD14LmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fG0sbj10LnZpZXd8fG0saT10LnByb2plY3Rpb258fG0sYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDptLnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3MuaW52ZXJzZU1vZGVsPWMocy5pbnZlcnNlTW9kZWwscy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgZj11WzE1XTtmb3Iobz0wO288MzsrK28pZis9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBoPXVbMTIrb10scD0wO3A8MzsrK3ApaCs9dVs0KnArb10qdGhpcy5saWdodFBvc2l0aW9uW3BdO3MubGlnaHRQb3NpdGlvbltvXT1oL2Z9aWYodGhpcy50cmlhbmdsZUNvdW50PjApe3ZhciBkPXRoaXMudHJpU2hhZGVyO2QuYmluZCgpLGQudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKX19LHguZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fG0sbj10LnZpZXd8fG0saT10LnByb2plY3Rpb258fG0sYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSx2ZWN0b3JTY2FsZTp0aGlzLnZlY3RvclNjYWxlLGNvbmVTY2FsZTp0aGlzLmNvbmVTY2FsZSxjb25lT2Zmc2V0OnRoaXMuY29uZU9mZnNldCxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fSxsPXRoaXMucGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSl9LHgucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyk7cmV0dXJue2luZGV4Ok1hdGguZmxvb3IoclsxXS80OCkscG9zaXRpb246bixkYXRhQ29vcmRpbmF0ZTpufX0seC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZU5vcm1hbHMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpLHRoaXMuZWRnZVZBTy5kaXNwb3NlKCksdGhpcy5lZGdlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmVkZ2VDb2xvcnMuZGlzcG9zZSgpLHRoaXMuZWRnZVVWcy5kaXNwb3NlKCksdGhpcy5lZGdlSWRzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VkFPLmRpc3Bvc2UoKSx0aGlzLnBvaW50UG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnBvaW50Q29sb3JzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VVZzLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2l6ZXMuZGlzcG9zZSgpLHRoaXMucG9pbnRJZHMuZGlzcG9zZSgpLHRoaXMuY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5jb250b3VyUG9zaXRpb25zLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKTt2YXIgcj1lLnRyaVNoYWRlcnx8ZnVuY3Rpb24odCl7dmFyIGU9bih0LGcudmVydGV4LGcuZnJhZ21lbnQsbnVsbCxnLmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX0odCkscz1iKHQpLGw9byh0LHUobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtsLmdlbmVyYXRlTWlwbWFwKCksbC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixsLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgYz1pKHQpLGY9aSh0KSxoPWkodCkscD1pKHQpLGQ9aSh0KSx2PWkodCksbT1hKHQsW3tidWZmZXI6Yyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnYsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6aCx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnAsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpkLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Zix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pLHg9aSh0KSxfPWkodCksdz1pKHQpLGs9aSh0KSxUPWEodCxbe2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6ayx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpfLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfV0pLEE9aSh0KSxNPWkodCksUz1pKHQpLEU9aSh0KSxDPWkodCksTD1hKHQsW3tidWZmZXI6QSx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkMsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6TSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOlMsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpFLHR5cGU6dC5GTE9BVCxzaXplOjF9XSksej1pKHQpLE89bmV3IHkodCxsLHIscyxjLGYsdixoLHAsZCxtLHgsayxfLHcsVCxBLEMsTSxTLEUsTCx6LGEodCxbe2J1ZmZlcjp6LHR5cGU6dC5GTE9BVCxzaXplOjN9XSkpO3JldHVybiBPLnVwZGF0ZShlKSxPfX0seyIuL3NoYWRlcnMiOjI0MCxjb2xvcm1hcDoxMTYsImdsLWJ1ZmZlciI6MjM3LCJnbC1tYXQ0L2ludmVydCI6MjYxLCJnbC1tYXQ0L211bHRpcGx5IjoyNjMsImdsLXNoYWRlciI6Mjk3LCJnbC10ZXh0dXJlMmQiOjMxNCwiZ2wtdmFvIjozMTksbmRhcnJheTo0NDIsbm9ybWFsczo0NDUsInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIjo1MDIsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sMjQwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBjb25lIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIGNvbmUgd2l0aCBpdHMgdG9wIGF0IG9yaWdpbiBhbmQgaGVpZ2h0IG9mIDEuMCxcbi8vIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhdHRyaWJ1dGUuXG4vL1xuLy8gRWFjaCBjb25lIGlzIG1hZGUgdXAgb2YgYSB0b3AgdmVydGV4LCBhIGNlbnRlciBiYXNlIHZlcnRleCBhbmQgYmFzZSBwZXJpbWV0ZXIgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIGNvbmUgYnkgdGhlIGZvbGxvd2luZzpcbi8vICAgc2VnbWVudCArIDAgdG9wIHZlcnRleFxuLy8gICBzZWdtZW50ICsgMSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gICBzZWdtZW50ICsgMiBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDMgY2VudGVyIGJhc2UgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyA0IHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgNSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gV2hlcmUgc2VnbWVudCBpcyB0aGUgbnVtYmVyIG9mIHRoZSByYWRpYWwgc2VnbWVudCAqIDYgYW5kIGEgaXMgdGhlIGFuZ2xlIGF0IHRoYXQgcmFkaWFsIHNlZ21lbnQuXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQsIGZsb29yKGluZGV4IC8gNilcbi8vIFRvIGdvIGZyb20gc2VnbWVudCB0byBhbmdsZSwgMipwaSAqIChzZWdtZW50L3NlZ21lbnRDb3VudClcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCBpbmRleCwgaW5kZXggLSAoc2VnbWVudCo2KVxuLy9cbnZlYzMgZ2V0Q29uZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgcmF3SW5kZXgsIGZsb2F0IGNvbmVPZmZzZXQsIG91dCB2ZWMzIG5vcm1hbCkge1xuXG4gIGNvbnN0IGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBpbmRleCA9IHJhd0luZGV4IC0gZmxvb3IocmF3SW5kZXggL1xuICAgIChzZWdtZW50Q291bnQgKiA2LjApKSAqXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCk7XG5cbiAgZmxvYXQgc2VnbWVudCA9IGZsb29yKDAuMDAxICsgaW5kZXgvNi4wKTtcbiAgZmxvYXQgc2VnbWVudEluZGV4ID0gaW5kZXggLSAoc2VnbWVudCo2LjApO1xuXG4gIG5vcm1hbCA9IC1ub3JtYWxpemUoZCk7XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA+IDIuOTkgJiYgc2VnbWVudEluZGV4IDwgMy4wMSkge1xuICAgIHJldHVybiBtaXgodmVjMygwLjApLCAtZCwgY29uZU9mZnNldCk7XG4gIH1cblxuICBmbG9hdCBuZXh0QW5nbGUgPSAoXG4gICAgKHNlZ21lbnRJbmRleCA+IDAuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDEuMDEpIHx8XG4gICAgKHNlZ21lbnRJbmRleCA+IDQuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDUuMDEpXG4gICkgPyAxLjAgOiAwLjA7XG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqICgoc2VnbWVudCArIG5leHRBbmdsZSkgLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdjEgPSBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgdmVjMyB2MiA9IHYxIC0gZDtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XG4gIHZlYzMgdjMgPSB2MiArIHggKyB5O1xuICBpZiAoc2VnbWVudEluZGV4IDwgMy4wKSB7XG4gICAgdmVjMyB0eCA9IHUgKiBzaW4oYW5nbGUpO1xuICAgIHZlYzMgdHkgPSB2ICogLWNvcyhhbmdsZSk7XG4gICAgdmVjMyB0YW5nZW50ID0gdHggKyB0eTtcbiAgICBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3ModjMgLSB2MSwgdGFuZ2VudCkpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAwLjApIHtcbiAgICByZXR1cm4gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIH1cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGU7XG51bmlmb3JtIGZsb2F0IGNvbmVTY2FsZTtcblxudW5pZm9ybSBmbG9hdCBjb25lT2Zmc2V0O1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvblxuICAgICAgICAgICAsIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YVxuICAgICAgICAgICAsIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIC8vIFNjYWxlIHRoZSB2ZWN0b3IgbWFnbml0dWRlIHRvIHN0YXkgY29uc3RhbnQgd2l0aFxuICAvLyBtb2RlbCAmIHZpZXcgY2hhbmdlcy5cbiAgdmVjMyBub3JtYWw7XG4gIHZlYzMgWFlaID0gZ2V0Q29uZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKCh2ZWN0b3JTY2FsZSAqIGNvbmVTY2FsZSkgKiB2ZWN0b3IpLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIGNvbmVQb3NpdGlvbjtcbiAgY2FtZXJhQ29vcmRpbmF0ZS54eXogLz0gY2FtZXJhQ29vcmRpbmF0ZS53O1xuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9ub3JtYWwgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChjb25lUG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdF9wb3NpdGlvbiAgPSB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gY29uZVBvc2l0aW9uLnh5ejtcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufVxuIl0pLGE9bihbIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MsXG4gIGZsb2F0IGZyZXNuZWwpIHtcblxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG5cbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcblxuICAvL0dlb21ldHJpYyB0ZXJtXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcbiAgXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xuXG4gIC8vRnJlc25lbCB0ZXJtXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xuXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzXG4gICAgICAgICAgICAsIGZyZXNuZWxcbiAgICAgICAgICAgICwga2FtYmllbnRcbiAgICAgICAgICAgICwga2RpZmZ1c2VcbiAgICAgICAgICAgICwga3NwZWN1bGFyXG4gICAgICAgICAgICAsIG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGFcbiAgICAgICAgICAgLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtaW4oMS4wLCBtYXgoMC4wLCBjb29rVG9ycmFuY2VTcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MsIGZyZXNuZWwpKSk7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgY29uZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSBjb25lIHdpdGggaXRzIHRvcCBhdCBvcmlnaW4gYW5kIGhlaWdodCBvZiAxLjAsXG4vLyBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSB2ZWN0b3IgYXR0cmlidXRlLlxuLy9cbi8vIEVhY2ggY29uZSBpcyBtYWRlIHVwIG9mIGEgdG9wIHZlcnRleCwgYSBjZW50ZXIgYmFzZSB2ZXJ0ZXggYW5kIGJhc2UgcGVyaW1ldGVyIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSBjb25lIGJ5IHRoZSBmb2xsb3dpbmc6XG4vLyAgIHNlZ21lbnQgKyAwIHRvcCB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDEgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vICAgc2VnbWVudCArIDIgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyAzIGNlbnRlciBiYXNlIHZlcnRleFxuLy8gICBzZWdtZW50ICsgNCBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDUgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vIFdoZXJlIHNlZ21lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmFkaWFsIHNlZ21lbnQgKiA2IGFuZCBhIGlzIHRoZSBhbmdsZSBhdCB0aGF0IHJhZGlhbCBzZWdtZW50LlxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50LCBmbG9vcihpbmRleCAvIDYpXG4vLyBUbyBnbyBmcm9tIHNlZ21lbnQgdG8gYW5nbGUsIDIqcGkgKiAoc2VnbWVudC9zZWdtZW50Q291bnQpXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQgaW5kZXgsIGluZGV4IC0gKHNlZ21lbnQqNilcbi8vXG52ZWMzIGdldENvbmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IHJhd0luZGV4LCBmbG9hdCBjb25lT2Zmc2V0LCBvdXQgdmVjMyBub3JtYWwpIHtcblxuICBjb25zdCBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgaW5kZXggPSByYXdJbmRleCAtIGZsb29yKHJhd0luZGV4IC9cbiAgICAoc2VnbWVudENvdW50ICogNi4wKSkgKlxuICAgIChzZWdtZW50Q291bnQgKiA2LjApO1xuXG4gIGZsb2F0IHNlZ21lbnQgPSBmbG9vcigwLjAwMSArIGluZGV4LzYuMCk7XG4gIGZsb2F0IHNlZ21lbnRJbmRleCA9IGluZGV4IC0gKHNlZ21lbnQqNi4wKTtcblxuICBub3JtYWwgPSAtbm9ybWFsaXplKGQpO1xuXG4gIGlmIChzZWdtZW50SW5kZXggPiAyLjk5ICYmIHNlZ21lbnRJbmRleCA8IDMuMDEpIHtcbiAgICByZXR1cm4gbWl4KHZlYzMoMC4wKSwgLWQsIGNvbmVPZmZzZXQpO1xuICB9XG5cbiAgZmxvYXQgbmV4dEFuZ2xlID0gKFxuICAgIChzZWdtZW50SW5kZXggPiAwLjk5ICYmICBzZWdtZW50SW5kZXggPCAxLjAxKSB8fFxuICAgIChzZWdtZW50SW5kZXggPiA0Ljk5ICYmICBzZWdtZW50SW5kZXggPCA1LjAxKVxuICApID8gMS4wIDogMC4wO1xuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoKHNlZ21lbnQgKyBuZXh0QW5nbGUpIC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHYxID0gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIHZlYzMgdjIgPSB2MSAtIGQ7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcbiAgaWYgKHNlZ21lbnRJbmRleCA8IDMuMCkge1xuICAgIHZlYzMgdHggPSB1ICogc2luKGFuZ2xlKTtcbiAgICB2ZWMzIHR5ID0gdiAqIC1jb3MoYW5nbGUpO1xuICAgIHZlYzMgdGFuZ2VudCA9IHR4ICsgdHk7XG4gICAgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKHYzIC0gdjEsIHRhbmdlbnQpKTtcbiAgfVxuXG4gIGlmIChzZWdtZW50SW5kZXggPT0gMC4wKSB7XG4gICAgcmV0dXJuIG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB9XG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzMgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlO1xudW5pZm9ybSBmbG9hdCBjb25lU2NhbGU7XG51bmlmb3JtIGZsb2F0IGNvbmVPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBub3JtYWw7XG4gIHZlYzMgWFlaID0gZ2V0Q29uZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKCh2ZWN0b3JTY2FsZSAqIGNvbmVTY2FsZSkgKiB2ZWN0b3IpLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIGNvbmVQb3NpdGlvbjtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InZlY3RvciIsdHlwZToidmVjMyJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6byxmcmFnbWVudDpzLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzMifV19fSx7Z2xzbGlmeTo0MDF9XSwyNDE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ezA6Ik5PTkUiLDE6Ik9ORSIsMjoiTElORV9MT09QIiwzOiJMSU5FX1NUUklQIiw0OiJUUklBTkdMRVMiLDU6IlRSSUFOR0xFX1NUUklQIiw2OiJUUklBTkdMRV9GQU4iLDI1NjoiREVQVEhfQlVGRkVSX0JJVCIsNTEyOiJORVZFUiIsNTEzOiJMRVNTIiw1MTQ6IkVRVUFMIiw1MTU6IkxFUVVBTCIsNTE2OiJHUkVBVEVSIiw1MTc6Ik5PVEVRVUFMIiw1MTg6IkdFUVVBTCIsNTE5OiJBTFdBWVMiLDc2ODoiU1JDX0NPTE9SIiw3Njk6Ik9ORV9NSU5VU19TUkNfQ09MT1IiLDc3MDoiU1JDX0FMUEhBIiw3NzE6Ik9ORV9NSU5VU19TUkNfQUxQSEEiLDc3MjoiRFNUX0FMUEhBIiw3NzM6Ik9ORV9NSU5VU19EU1RfQUxQSEEiLDc3NDoiRFNUX0NPTE9SIiw3NzU6Ik9ORV9NSU5VU19EU1RfQ09MT1IiLDc3NjoiU1JDX0FMUEhBX1NBVFVSQVRFIiwxMDI0OiJTVEVOQ0lMX0JVRkZFUl9CSVQiLDEwMjg6IkZST05UIiwxMDI5OiJCQUNLIiwxMDMyOiJGUk9OVF9BTkRfQkFDSyIsMTI4MDoiSU5WQUxJRF9FTlVNIiwxMjgxOiJJTlZBTElEX1ZBTFVFIiwxMjgyOiJJTlZBTElEX09QRVJBVElPTiIsMTI4NToiT1VUX09GX01FTU9SWSIsMTI4NjoiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iLDIzMDQ6IkNXIiwyMzA1OiJDQ1ciLDI4NDk6IkxJTkVfV0lEVEgiLDI4ODQ6IkNVTExfRkFDRSIsMjg4NToiQ1VMTF9GQUNFX01PREUiLDI4ODY6IkZST05UX0ZBQ0UiLDI5Mjg6IkRFUFRIX1JBTkdFIiwyOTI5OiJERVBUSF9URVNUIiwyOTMwOiJERVBUSF9XUklURU1BU0siLDI5MzE6IkRFUFRIX0NMRUFSX1ZBTFVFIiwyOTMyOiJERVBUSF9GVU5DIiwyOTYwOiJTVEVOQ0lMX1RFU1QiLDI5NjE6IlNURU5DSUxfQ0xFQVJfVkFMVUUiLDI5NjI6IlNURU5DSUxfRlVOQyIsMjk2MzoiU1RFTkNJTF9WQUxVRV9NQVNLIiwyOTY0OiJTVEVOQ0lMX0ZBSUwiLDI5NjU6IlNURU5DSUxfUEFTU19ERVBUSF9GQUlMIiwyOTY2OiJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyIsMjk2NzoiU1RFTkNJTF9SRUYiLDI5Njg6IlNURU5DSUxfV1JJVEVNQVNLIiwyOTc4OiJWSUVXUE9SVCIsMzAyNDoiRElUSEVSIiwzMDQyOiJCTEVORCIsMzA4ODoiU0NJU1NPUl9CT1giLDMwODk6IlNDSVNTT1JfVEVTVCIsMzEwNjoiQ09MT1JfQ0xFQVJfVkFMVUUiLDMxMDc6IkNPTE9SX1dSSVRFTUFTSyIsMzMxNzoiVU5QQUNLX0FMSUdOTUVOVCIsMzMzMzoiUEFDS19BTElHTk1FTlQiLDMzNzk6Ik1BWF9URVhUVVJFX1NJWkUiLDMzODY6Ik1BWF9WSUVXUE9SVF9ESU1TIiwzNDA4OiJTVUJQSVhFTF9CSVRTIiwzNDEwOiJSRURfQklUUyIsMzQxMToiR1JFRU5fQklUUyIsMzQxMjoiQkxVRV9CSVRTIiwzNDEzOiJBTFBIQV9CSVRTIiwzNDE0OiJERVBUSF9CSVRTIiwzNDE1OiJTVEVOQ0lMX0JJVFMiLDM1NTM6IlRFWFRVUkVfMkQiLDQzNTI6IkRPTlRfQ0FSRSIsNDM1MzoiRkFTVEVTVCIsNDM1NDoiTklDRVNUIiw1MTIwOiJCWVRFIiw1MTIxOiJVTlNJR05FRF9CWVRFIiw1MTIyOiJTSE9SVCIsNTEyMzoiVU5TSUdORURfU0hPUlQiLDUxMjQ6IklOVCIsNTEyNToiVU5TSUdORURfSU5UIiw1MTI2OiJGTE9BVCIsNTM4NjoiSU5WRVJUIiw1ODkwOiJURVhUVVJFIiw2NDAxOiJTVEVOQ0lMX0lOREVYIiw2NDAyOiJERVBUSF9DT01QT05FTlQiLDY0MDY6IkFMUEhBIiw2NDA3OiJSR0IiLDY0MDg6IlJHQkEiLDY0MDk6IkxVTUlOQU5DRSIsNjQxMDoiTFVNSU5BTkNFX0FMUEhBIiw3NjgwOiJLRUVQIiw3NjgxOiJSRVBMQUNFIiw3NjgyOiJJTkNSIiw3NjgzOiJERUNSIiw3OTM2OiJWRU5ET1IiLDc5Mzc6IlJFTkRFUkVSIiw3OTM4OiJWRVJTSU9OIiw5NzI4OiJORUFSRVNUIiw5NzI5OiJMSU5FQVIiLDk5ODQ6Ik5FQVJFU1RfTUlQTUFQX05FQVJFU1QiLDk5ODU6IkxJTkVBUl9NSVBNQVBfTkVBUkVTVCIsOTk4NjoiTkVBUkVTVF9NSVBNQVBfTElORUFSIiw5OTg3OiJMSU5FQVJfTUlQTUFQX0xJTkVBUiIsMTAyNDA6IlRFWFRVUkVfTUFHX0ZJTFRFUiIsMTAyNDE6IlRFWFRVUkVfTUlOX0ZJTFRFUiIsMTAyNDI6IlRFWFRVUkVfV1JBUF9TIiwxMDI0MzoiVEVYVFVSRV9XUkFQX1QiLDEwNDk3OiJSRVBFQVQiLDEwNzUyOiJQT0xZR09OX09GRlNFVF9VTklUUyIsMTYzODQ6IkNPTE9SX0JVRkZFUl9CSVQiLDMyNzY5OiJDT05TVEFOVF9DT0xPUiIsMzI3NzA6Ik9ORV9NSU5VU19DT05TVEFOVF9DT0xPUiIsMzI3NzE6IkNPTlNUQU5UX0FMUEhBIiwzMjc3MjoiT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIiwzMjc3MzoiQkxFTkRfQ09MT1IiLDMyNzc0OiJGVU5DX0FERCIsMzI3Nzc6IkJMRU5EX0VRVUFUSU9OX1JHQiIsMzI3Nzg6IkZVTkNfU1VCVFJBQ1QiLDMyNzc5OiJGVU5DX1JFVkVSU0VfU1VCVFJBQ1QiLDMyODE5OiJVTlNJR05FRF9TSE9SVF80XzRfNF80IiwzMjgyMDoiVU5TSUdORURfU0hPUlRfNV81XzVfMSIsMzI4MjM6IlBPTFlHT05fT0ZGU0VUX0ZJTEwiLDMyODI0OiJQT0xZR09OX09GRlNFVF9GQUNUT1IiLDMyODU0OiJSR0JBNCIsMzI4NTU6IlJHQjVfQTEiLDMyODczOiJURVhUVVJFX0JJTkRJTkdfMkQiLDMyOTI2OiJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLDMyOTI4OiJTQU1QTEVfQ09WRVJBR0UiLDMyOTM2OiJTQU1QTEVfQlVGRkVSUyIsMzI5Mzc6IlNBTVBMRVMiLDMyOTM4OiJTQU1QTEVfQ09WRVJBR0VfVkFMVUUiLDMyOTM5OiJTQU1QTEVfQ09WRVJBR0VfSU5WRVJUIiwzMjk2ODoiQkxFTkRfRFNUX1JHQiIsMzI5Njk6IkJMRU5EX1NSQ19SR0IiLDMyOTcwOiJCTEVORF9EU1RfQUxQSEEiLDMyOTcxOiJCTEVORF9TUkNfQUxQSEEiLDMzMDcxOiJDTEFNUF9UT19FREdFIiwzMzE3MDoiR0VORVJBVEVfTUlQTUFQX0hJTlQiLDMzMTg5OiJERVBUSF9DT01QT05FTlQxNiIsMzMzMDY6IkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCIsMzM2MzU6IlVOU0lHTkVEX1NIT1JUXzVfNl81IiwzMzY0ODoiTUlSUk9SRURfUkVQRUFUIiwzMzkwMToiQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFIiwzMzkwMjoiQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFIiwzMzk4NDoiVEVYVFVSRTAiLDMzOTg1OiJURVhUVVJFMSIsMzM5ODY6IlRFWFRVUkUyIiwzMzk4NzoiVEVYVFVSRTMiLDMzOTg4OiJURVhUVVJFNCIsMzM5ODk6IlRFWFRVUkU1IiwzMzk5MDoiVEVYVFVSRTYiLDMzOTkxOiJURVhUVVJFNyIsMzM5OTI6IlRFWFRVUkU4IiwzMzk5MzoiVEVYVFVSRTkiLDMzOTk0OiJURVhUVVJFMTAiLDMzOTk1OiJURVhUVVJFMTEiLDMzOTk2OiJURVhUVVJFMTIiLDMzOTk3OiJURVhUVVJFMTMiLDMzOTk4OiJURVhUVVJFMTQiLDMzOTk5OiJURVhUVVJFMTUiLDM0MDAwOiJURVhUVVJFMTYiLDM0MDAxOiJURVhUVVJFMTciLDM0MDAyOiJURVhUVVJFMTgiLDM0MDAzOiJURVhUVVJFMTkiLDM0MDA0OiJURVhUVVJFMjAiLDM0MDA1OiJURVhUVVJFMjEiLDM0MDA2OiJURVhUVVJFMjIiLDM0MDA3OiJURVhUVVJFMjMiLDM0MDA4OiJURVhUVVJFMjQiLDM0MDA5OiJURVhUVVJFMjUiLDM0MDEwOiJURVhUVVJFMjYiLDM0MDExOiJURVhUVVJFMjciLDM0MDEyOiJURVhUVVJFMjgiLDM0MDEzOiJURVhUVVJFMjkiLDM0MDE0OiJURVhUVVJFMzAiLDM0MDE1OiJURVhUVVJFMzEiLDM0MDE2OiJBQ1RJVkVfVEVYVFVSRSIsMzQwMjQ6Ik1BWF9SRU5ERVJCVUZGRVJfU0laRSIsMzQwNDE6IkRFUFRIX1NURU5DSUwiLDM0MDU1OiJJTkNSX1dSQVAiLDM0MDU2OiJERUNSX1dSQVAiLDM0MDY3OiJURVhUVVJFX0NVQkVfTUFQIiwzNDA2ODoiVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQIiwzNDA2OToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YIiwzNDA3MDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIiwzNDA3MToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIiwzNDA3MjoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZIiwzNDA3MzoiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIiwzNDA3NDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIiwzNDA3NjoiTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSIsMzQzMzg6IlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIsMzQzMzk6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSIsMzQzNDA6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFIiwzNDM0MToiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwzNDM0MjoiQ1VSUkVOVF9WRVJURVhfQVRUUklCIiwzNDM3MzoiVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSIiwzNDQ2NjoiTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIiwzNDQ2NzoiQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NjYwOiJCVUZGRVJfU0laRSIsMzQ2NjE6IkJVRkZFUl9VU0FHRSIsMzQ4MTY6IlNURU5DSUxfQkFDS19GVU5DIiwzNDgxNzoiU1RFTkNJTF9CQUNLX0ZBSUwiLDM0ODE4OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMIiwzNDgxOToiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyIsMzQ4Nzc6IkJMRU5EX0VRVUFUSU9OX0FMUEhBIiwzNDkyMToiTUFYX1ZFUlRFWF9BVFRSSUJTIiwzNDkyMjoiVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEIiwzNDkzMDoiTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM0OTYyOiJBUlJBWV9CVUZGRVIiLDM0OTYzOiJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsMzQ5NjQ6IkFSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk2NToiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIsMzQ5NzU6IlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM1MDQwOiJTVFJFQU1fRFJBVyIsMzUwNDQ6IlNUQVRJQ19EUkFXIiwzNTA0ODoiRFlOQU1JQ19EUkFXIiwzNTYzMjoiRlJBR01FTlRfU0hBREVSIiwzNTYzMzoiVkVSVEVYX1NIQURFUiIsMzU2NjA6Ik1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzU2NjE6Ik1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MzoiU0hBREVSX1RZUEUiLDM1NjY0OiJGTE9BVF9WRUMyIiwzNTY2NToiRkxPQVRfVkVDMyIsMzU2NjY6IkZMT0FUX1ZFQzQiLDM1NjY3OiJJTlRfVkVDMiIsMzU2Njg6IklOVF9WRUMzIiwzNTY2OToiSU5UX1ZFQzQiLDM1NjcwOiJCT09MIiwzNTY3MToiQk9PTF9WRUMyIiwzNTY3MjoiQk9PTF9WRUMzIiwzNTY3MzoiQk9PTF9WRUM0IiwzNTY3NDoiRkxPQVRfTUFUMiIsMzU2NzU6IkZMT0FUX01BVDMiLDM1Njc2OiJGTE9BVF9NQVQ0IiwzNTY3ODoiU0FNUExFUl8yRCIsMzU2ODA6IlNBTVBMRVJfQ1VCRSIsMzU3MTI6IkRFTEVURV9TVEFUVVMiLDM1NzEzOiJDT01QSUxFX1NUQVRVUyIsMzU3MTQ6IkxJTktfU1RBVFVTIiwzNTcxNToiVkFMSURBVEVfU1RBVFVTIiwzNTcxNjoiSU5GT19MT0dfTEVOR1RIIiwzNTcxNzoiQVRUQUNIRURfU0hBREVSUyIsMzU3MTg6IkFDVElWRV9VTklGT1JNUyIsMzU3MTk6IkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEgiLDM1NzIwOiJTSEFERVJfU09VUkNFX0xFTkdUSCIsMzU3MjE6IkFDVElWRV9BVFRSSUJVVEVTIiwzNTcyMjoiQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIiwzNTcyNDoiU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OIiwzNTcyNToiQ1VSUkVOVF9QUk9HUkFNIiwzNjAwMzoiU1RFTkNJTF9CQUNLX1JFRiIsMzYwMDQ6IlNURU5DSUxfQkFDS19WQUxVRV9NQVNLIiwzNjAwNToiU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyIsMzYwMDY6IkZSQU1FQlVGRkVSX0JJTkRJTkciLDM2MDA3OiJSRU5ERVJCVUZGRVJfQklORElORyIsMzYwNDg6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUiLDM2MDQ5OiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FIiwzNjA1MDoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMIiwzNjA1MToiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UiLDM2MDUzOiJGUkFNRUJVRkZFUl9DT01QTEVURSIsMzYwNTQ6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCIsMzYwNTU6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIiwzNjA1NzoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIiwzNjA2MToiRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQiLDM2MDY0OiJDT0xPUl9BVFRBQ0hNRU5UMCIsMzYwOTY6IkRFUFRIX0FUVEFDSE1FTlQiLDM2MTI4OiJTVEVOQ0lMX0FUVEFDSE1FTlQiLDM2MTYwOiJGUkFNRUJVRkZFUiIsMzYxNjE6IlJFTkRFUkJVRkZFUiIsMzYxNjI6IlJFTkRFUkJVRkZFUl9XSURUSCIsMzYxNjM6IlJFTkRFUkJVRkZFUl9IRUlHSFQiLDM2MTY0OiJSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUIiwzNjE2ODoiU1RFTkNJTF9JTkRFWDgiLDM2MTc2OiJSRU5ERVJCVUZGRVJfUkVEX1NJWkUiLDM2MTc3OiJSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSIsMzYxNzg6IlJFTkRFUkJVRkZFUl9CTFVFX1NJWkUiLDM2MTc5OiJSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSIsMzYxODA6IlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFIiwzNjE4MToiUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSIsMzYxOTQ6IlJHQjU2NSIsMzYzMzY6IkxPV19GTE9BVCIsMzYzMzc6Ik1FRElVTV9GTE9BVCIsMzYzMzg6IkhJR0hfRkxPQVQiLDM2MzM5OiJMT1dfSU5UIiwzNjM0MDoiTUVESVVNX0lOVCIsMzYzNDE6IkhJR0hfSU5UIiwzNjM0NjoiU0hBREVSX0NPTVBJTEVSIiwzNjM0NzoiTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMiLDM2MzQ4OiJNQVhfVkFSWUlOR19WRUNUT1JTIiwzNjM0OToiTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyIsMzc0NDA6IlVOUEFDS19GTElQX1lfV0VCR0wiLDM3NDQxOiJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiLDM3NDQyOiJDT05URVhUX0xPU1RfV0VCR0wiLDM3NDQzOiJVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwzNzQ0NDoiQlJPV1NFUl9ERUZBVUxUX1dFQkdMIn19LHt9XSwyNDI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLzEuMC9udW1iZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfX0seyIuLzEuMC9udW1iZXJzIjoyNDF9XSwyNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLG89aShlLFt7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTo0LG9mZnNldDoxMixzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDoyOCxzdHJpZGU6NDB9XSksbD1hKGUpO2wuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGwuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLGwuYXR0cmlidXRlcy5vZmZzZXQubG9jYXRpb249Mjt2YXIgYz1uZXcgcyhlLHIsbyxsKTtyZXR1cm4gYy51cGRhdGUodCksY307dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycy9pbmRleCIpLG89WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPW4sdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMuY2FwU2l6ZT1bMTAsMTAsMTBdLHRoaXMubGluZUNvdW50PVswLDAsMF0sdGhpcy5saW5lT2Zmc2V0PVswLDAsMF0sdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil0WzBdW3JdPU1hdGgubWluKHRbMF1bcl0sZVtyXSksdFsxXVtyXT1NYXRoLm1heCh0WzFdW3JdLGVbcl0pfWwuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LGwuZHJhd1RyYW5zcGFyZW50PWwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIudW5pZm9ybXM7dGhpcy5zaGFkZXIuYmluZCgpO3ZhciBuPXIudmlldz10LnZpZXd8fG8saT1yLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxvO3IubW9kZWw9dC5tb2RlbHx8byxyLmNsaXBCb3VuZHM9dGhpcy5jbGlwQm91bmRzLHIub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGE9blsxMl0scz1uWzEzXSxsPW5bMTRdLGM9blsxNV0sdT0odC5fb3J0aG98fCExPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmEraVs3XSpzK2lbMTFdKmwraVsxNV0qYykvZS5kcmF3aW5nQnVmZmVySGVpZ2h0O3RoaXMudmFvLmJpbmQoKTtmb3IodmFyIGY9MDtmPDM7KytmKWUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoW2ZdKnRoaXMucGl4ZWxSYXRpbyksci5jYXBTaXplPXRoaXMuY2FwU2l6ZVtmXSp1LHRoaXMubGluZUNvdW50W2ZdJiZlLmRyYXdBcnJheXMoZS5MSU5FUyx0aGlzLmxpbmVPZmZzZXRbZl0sdGhpcy5saW5lQ291bnRbZl0pO3RoaXMudmFvLnVuYmluZCgpfTt2YXIgdT1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoMyksZT0wO2U8MzsrK2Upe2Zvcih2YXIgcj1bXSxuPTE7bjw9MjsrK24pZm9yKHZhciBpPS0xO2k8PTE7aSs9Mil7dmFyIGE9WzAsMCwwXTthWyhuK2UpJTNdPWksci5wdXNoKGEpfXRbZV09cn1yZXR1cm4gdH0oKTtmdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaT11W25dLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXTt0LnB1c2goZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0sclszXSxvWzBdLG9bMV0sb1syXSl9cmV0dXJuIGkubGVuZ3RofWwudXBkYXRlPWZ1bmN0aW9uKHQpeyJsaW5lV2lkdGgiaW4odD10fHx7fSkmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCxBcnJheS5pc0FycmF5KHRoaXMubGluZVdpZHRoKXx8KHRoaXMubGluZVdpZHRoPVt0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aF0pKSwiY2FwU2l6ZSJpbiB0JiYodGhpcy5jYXBTaXplPXQuY2FwU2l6ZSxBcnJheS5pc0FycmF5KHRoaXMuY2FwU2l6ZSl8fCh0aGlzLmNhcFNpemU9W3RoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplXSkpLHRoaXMuaGFzQWxwaGE9ITEsIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpO3ZhciBlPXQuY29sb3J8fFtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0scj10LnBvc2l0aW9uLG49dC5lcnJvcjtpZihBcnJheS5pc0FycmF5KGVbMF0pfHwoZT1bZSxlLGVdKSxyJiZuKXt2YXIgaT1bXSxhPXIubGVuZ3RoLG89MDt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdO2Zvcih2YXIgcz0wO3M8MzsrK3Mpe3RoaXMubGluZU9mZnNldFtzXT1vO3Q6Zm9yKHZhciBsPTA7bDxhOysrbCl7Zm9yKHZhciB1PXJbbF0saD0wO2g8MzsrK2gpaWYoaXNOYU4odVtoXSl8fCFpc0Zpbml0ZSh1W2hdKSljb250aW51ZSB0O3ZhciBwPW5bbF0sZD1lW3NdO2lmKEFycmF5LmlzQXJyYXkoZFswXSkmJihkPWVbbF0pLDM9PT1kLmxlbmd0aD9kPVtkWzBdLGRbMV0sZFsyXSwxXTo0PT09ZC5sZW5ndGgmJihkPVtkWzBdLGRbMV0sZFsyXSxkWzNdXSwhdGhpcy5oYXNBbHBoYSYmZFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLCFpc05hTihwWzBdW3NdKSYmIWlzTmFOKHBbMV1bc10pKXt2YXIgZztpZihwWzBdW3NdPDApKGc9dS5zbGljZSgpKVtzXSs9cFswXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxnWzBdLGdbMV0sZ1syXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLGcpLG8rPTIrZihpLGcsZCxzKTtpZihwWzFdW3NdPjApKGc9dS5zbGljZSgpKVtzXSs9cFsxXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxnWzBdLGdbMV0sZ1syXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLGcpLG8rPTIrZihpLGcsZCxzKX19dGhpcy5saW5lQ291bnRbc109by10aGlzLmxpbmVPZmZzZXRbc119dGhpcy5idWZmZXIudXBkYXRlKGkpfX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycy9pbmRleCI6MjQ0LCJnbC1idWZmZXIiOjIzNywiZ2wtdmFvIjozMTl9XSwyNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG9mZnNldDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBjYXBTaXplO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgd29ybGRQb3NpdGlvbiAgICAgICA9ICh3b3JsZFBvc2l0aW9uIC8gd29ybGRQb3NpdGlvbi53KSArIHZlYzQoY2FwU2l6ZSAqIG9mZnNldCwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gICAgICAgICA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZnJhZ0NvbG9yICAgICAgICAgICA9IGNvbG9yO1xuICBmcmFnUG9zaXRpb24gICAgICAgID0gcG9zaXRpb247XG59Il0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZyYWdQb3NpdGlvbikgfHxcbiAgICBmcmFnQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cbiAgKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHkgKiBmcmFnQ29sb3I7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToib2Zmc2V0Iix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjoyOTcsZ2xzbGlmeTo0MDF9XSwyNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdGV4dHVyZTJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2l8fChpPXQuRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQsYT10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCxvPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TLHM9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCk7dmFyIGM9dC5nZXRFeHRlbnNpb24oIldFQkdMX2RyYXdfYnVmZmVycyIpOyFsJiZjJiZmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTtsPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2Zvcih2YXIgYT1uO2E8cjsrK2EpaVthXT10Lk5PTkU7bFtuXT1pfX0odCxjKTtBcnJheS5pc0FycmF5KGUpJiYobj1yLHI9MHxlWzFdLGU9MHxlWzBdKTtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE1pc3Npbmcgc2hhcGUgcGFyYW1ldGVyIik7dmFyIHU9dC5nZXRQYXJhbWV0ZXIodC5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT51fHxyPDB8fHI+dSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogUGFyYW1ldGVycyBhcmUgdG9vIGxhcmdlIGZvciBGQk8iKTt2YXIgZj0xO2lmKCJjb2xvciJpbihuPW58fHt9KSl7aWYoKGY9TWF0aC5tYXgoMHxuLmNvbG9yLDApKTwwKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNdXN0IHNwZWNpZnkgYSBub25uZWdhdGl2ZSBudW1iZXIgb2YgY29sb3JzIik7aWYoZj4xKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVsdGlwbGUgZHJhdyBidWZmZXIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQiKTtpZihmPnQuZ2V0UGFyYW1ldGVyKGMuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0ICIrZisiIGRyYXcgYnVmZmVycyIpfX12YXIgaD10LlVOU0lHTkVEX0JZVEUscD10LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKTtpZihuLmZsb2F0JiZmPjApe2lmKCFwKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMiKTtoPXQuRkxPQVR9ZWxzZSBuLnByZWZlckZsb2F0JiZmPjAmJnAmJihoPXQuRkxPQVQpO3ZhciBnPSEwOyJkZXB0aCJpbiBuJiYoZz0hIW4uZGVwdGgpO3ZhciB2PSExOyJzdGVuY2lsImluIG4mJih2PSEhbi5zdGVuY2lsKTtyZXR1cm4gbmV3IGQodCxlLHIsaCxmLGcsdixjKX07dmFyIGksYSxvLHMsbD1udWxsO2Z1bmN0aW9uIGModCl7cmV0dXJuW3QuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5SRU5ERVJCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5URVhUVVJFX0JJTkRJTkdfMkQpXX1mdW5jdGlvbiB1KHQsZSl7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlWzBdKSx0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsZVsxXSksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZVsyXSl9ZnVuY3Rpb24gZih0KXtzd2l0Y2godCl7Y2FzZSBpOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciB1bnN1cHBvcnRlZCIpO2Nhc2UgYTp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBhdHRhY2htZW50Iik7Y2FzZSBvOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGRpbWVuc2lvbnMiKTtjYXNlIHM6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgbWlzc2luZyBhdHRhY2htZW50Iik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgZmFpbGVkIGZvciB1bnNwZWNpZmllZCByZWFzb24iKX19ZnVuY3Rpb24gaCh0LGUscixpLGEsbyl7aWYoIWkpcmV0dXJuIG51bGw7dmFyIHM9bih0LGUscixhLGkpO3JldHVybiBzLm1hZ0ZpbHRlcj10Lk5FQVJFU1Qscy5taW5GaWx0ZXI9dC5ORUFSRVNULHMubWlwU2FtcGxlcz0xLHMuYmluZCgpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQodC5GUkFNRUJVRkZFUixvLHQuVEVYVFVSRV8yRCxzLmhhbmRsZSwwKSxzfWZ1bmN0aW9uIHAodCxlLHIsbixpKXt2YXIgYT10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsYSksdC5yZW5kZXJidWZmZXJTdG9yYWdlKHQuUkVOREVSQlVGRkVSLG4sZSxyKSx0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHQuRlJBTUVCVUZGRVIsaSx0LlJFTkRFUkJVRkZFUixhKSxhfWZ1bmN0aW9uIGQodCxlLHIsbixpLGEsbyxzKXt0aGlzLmdsPXQsdGhpcy5fc2hhcGU9WzB8ZSwwfHJdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9leHQ9cyx0aGlzLmNvbG9yPW5ldyBBcnJheShpKTtmb3IodmFyIGQ9MDtkPGk7KytkKXRoaXMuY29sb3JbZF09bnVsbDt0aGlzLl9jb2xvcl9yYj1udWxsLHRoaXMuZGVwdGg9bnVsbCx0aGlzLl9kZXB0aF9yYj1udWxsLHRoaXMuX2NvbG9yVHlwZT1uLHRoaXMuX3VzZURlcHRoPWEsdGhpcy5fdXNlU3RlbmNpbD1vO3ZhciBnPXRoaXMsdj1bMHxlLDB8cl07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModix7MDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcud2lkdGg9dH19LDE6e2dldDpmdW5jdGlvbigpe3JldHVybiBnLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBnLmhlaWdodD10fX19KSx0aGlzLl9zaGFwZVZlY3Rvcj12LGZ1bmN0aW9uKHQpe3ZhciBlPWModC5nbCkscj10LmdsLG49dC5oYW5kbGU9ci5jcmVhdGVGcmFtZWJ1ZmZlcigpLGk9dC5fc2hhcGVbMF0sYT10Ll9zaGFwZVsxXSxvPXQuY29sb3IubGVuZ3RoLHM9dC5fZXh0LGQ9dC5fdXNlU3RlbmNpbCxnPXQuX3VzZURlcHRoLHY9dC5fY29sb3JUeXBlO3IuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbik7Zm9yKHZhciBtPTA7bTxvOysrbSl0LmNvbG9yW21dPWgocixpLGEsdixyLlJHQkEsci5DT0xPUl9BVFRBQ0hNRU5UMCttKTswPT09bz8odC5fY29sb3JfcmI9cChyLGksYSxyLlJHQkE0LHIuQ09MT1JfQVRUQUNITUVOVDApLHMmJnMuZHJhd0J1ZmZlcnNXRUJHTChsWzBdKSk6bz4xJiZzLmRyYXdCdWZmZXJzV0VCR0wobFtvXSk7dmFyIHk9ci5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKTt5P2Q/dC5kZXB0aD1oKHIsaSxhLHkuVU5TSUdORURfSU5UXzI0XzhfV0VCR0wsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTpnJiYodC5kZXB0aD1oKHIsaSxhLHIuVU5TSUdORURfU0hPUlQsci5ERVBUSF9DT01QT05FTlQsci5ERVBUSF9BVFRBQ0hNRU5UKSk6ZyYmZD90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6Zz90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfQ09NUE9ORU5UMTYsci5ERVBUSF9BVFRBQ0hNRU5UKTpkJiYodC5fZGVwdGhfcmI9cChyLGksYSxyLlNURU5DSUxfSU5ERVgsci5TVEVOQ0lMX0FUVEFDSE1FTlQpKTt2YXIgeD1yLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoci5GUkFNRUJVRkZFUik7aWYoeCE9PXIuRlJBTUVCVUZGRVJfQ09NUExFVEUpe2Zvcih0Ll9kZXN0cm95ZWQ9ITAsci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmRlbGV0ZUZyYW1lYnVmZmVyKHQuaGFuZGxlKSx0LmhhbmRsZT1udWxsLHQuZGVwdGgmJih0LmRlcHRoLmRpc3Bvc2UoKSx0LmRlcHRoPW51bGwpLHQuX2RlcHRoX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fZGVwdGhfcmIpLHQuX2RlcHRoX3JiPW51bGwpLG09MDttPHQuY29sb3IubGVuZ3RoOysrbSl0LmNvbG9yW21dLmRpc3Bvc2UoKSx0LmNvbG9yW21dPW51bGw7dC5fY29sb3JfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9jb2xvcl9yYiksdC5fY29sb3JfcmI9bnVsbCksdShyLGUpLGYoeCl9dShyLGUpfSh0aGlzKX12YXIgZz1kLnByb3RvdHlwZTtmdW5jdGlvbiB2KHQsZSxyKXtpZih0Ll9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBkZXN0cm95ZWQgRkJPIik7aWYodC5fc2hhcGVbMF0hPT1lfHx0Ll9zaGFwZVsxXSE9PXIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDYW4ndCByZXNpemUgRkJPLCBpbnZhbGlkIGRpbWVuc2lvbnMiKTt0Ll9zaGFwZVswXT1lLHQuX3NoYXBlWzFdPXI7Zm9yKHZhciBhPWMobiksbz0wO288dC5jb2xvci5sZW5ndGg7KytvKXQuY29sb3Jbb10uc2hhcGU9dC5fc2hhcGU7dC5fY29sb3JfcmImJihuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsdC5fY29sb3JfcmIpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlJHQkE0LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksdC5kZXB0aCYmKHQuZGVwdGguc2hhcGU9dC5fc2hhcGUpLHQuX2RlcHRoX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2RlcHRoX3JiKSx0Ll91c2VEZXB0aCYmdC5fdXNlU3RlbmNpbD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9TVEVOQ0lMLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VEZXB0aD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9DT01QT05FTlQxNix0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlU3RlbmNpbCYmbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uU1RFTkNJTF9JTkRFWCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsdC5oYW5kbGUpO3ZhciBzPW4uY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhuLkZSQU1FQlVGRkVSKTtzIT09bi5GUkFNRUJVRkZFUl9DT01QTEVURSYmKHQuZGlzcG9zZSgpLHUobixhKSxmKHMpKSx1KG4sYSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGcse3NoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkP1swLDBdOnRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9WzB8dCwwfHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IFNoYXBlIHZlY3RvciBtdXN0IGJlIGxlbmd0aCAyIik7dmFyIGU9MHx0WzBdLHI9MHx0WzFdO3JldHVybiB2KHRoaXMsZSxyKSxbZSxyXX0sZW51bWVyYWJsZTohMX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB2KHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH0sZW51bWVyYWJsZTohMX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCx2KHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxnLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LGcuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHsiZ2wtdGV4dHVyZTJkIjozMTR9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJzcHJpbnRmLWpzIikuc3ByaW50ZixpPXQoImdsLWNvbnN0YW50cy9sb29rdXAiKSxhPXQoImdsc2wtc2hhZGVyLW5hbWUiKSxvPXQoImFkZC1saW5lLW51bWJlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgcz1hKGUpfHwib2YgdW5rbm93biBuYW1lIChzZWUgbnBtIGdsc2wtc2hhZGVyLW5hbWUpIixsPSJ1bmtub3duIHR5cGUiO3ZvaWQgMCE9PXImJihsPXI9PT1pLkZSQUdNRU5UX1NIQURFUj8iZnJhZ21lbnQiOiJ2ZXJ0ZXgiKTtmb3IodmFyIGM9bigiRXJyb3IgY29tcGlsaW5nICVzIHNoYWRlciAlczpcbiIsbCxzKSx1PW4oIiVzJXMiLGMsdCksZj10LnNwbGl0KCJcbiIpLGg9e30scD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgZD1mW3BdO2lmKCIiIT09ZCYmIlwwIiE9PWQpe3ZhciBnPXBhcnNlSW50KGQuc3BsaXQoIjoiKVsyXSk7aWYoaXNOYU4oZykpdGhyb3cgbmV3IEVycm9yKG4oIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXMiLGQpKTtoW2ddPWR9fWZvcih2YXIgdj1vKGUpLnNwbGl0KCJcbiIpLHA9MDtwPHYubGVuZ3RoO3ArKylpZihoW3ArM118fGhbcCsyXXx8aFtwKzFdKXt2YXIgbT12W3BdO2lmKGMrPW0rIlxuIixoW3ArMV0pe3ZhciB5PWhbcCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoIjoiLDMpLmpvaW4oIjoiKS5sZW5ndGgrMSkudHJpbSgpLGMrPW4oIl5eXiAlc1xuXG4iLHkpfX1yZXR1cm57bG9uZzpjLnRyaW0oKSxzaG9ydDp1LnRyaW0oKX19fSx7ImFkZC1saW5lLW51bWJlcnMiOjUxLCJnbC1jb25zdGFudHMvbG9va3VwIjoyNDIsImdsc2wtc2hhZGVyLW5hbWUiOjM5Mywic3ByaW50Zi1qcyI6NTEyfV0sMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsbj1vKHIsbC52ZXJ0ZXgsbC5mcmFnbWVudCksaT1vKHIsbC5waWNrVmVydGV4LGwucGlja0ZyYWdtZW50KSxhPXMociksdT1zKHIpLGY9cyhyKSxoPXMocikscD1uZXcgYyh0LG4saSxhLHUsZixoKTtyZXR1cm4gcC51cGRhdGUoZSksdC5hZGRPYmplY3QocCkscH07dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoImlvdGEtYXJyYXkiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpLG89dCgiZ2wtc2hhZGVyIikscz10KCJnbC1idWZmZXIiKSxsPXQoIi4vbGliL3NoYWRlcnMiKTtmdW5jdGlvbiBjKHQsZSxyLG4saSxhLG8pe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5wb3NpdGlvbkJ1ZmZlcj1uLHRoaXMud2VpZ2h0QnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuaWRCdWZmZXI9byx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy5zaGFwZT1bMCwwXSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMucGlja09mZnNldD0wfXZhciB1LGY9Yy5wcm90b3R5cGUsaD1bMCwwLDEsMCwwLDEsMSwwLDEsMSwwLDFdO2YuZHJhdz0odT1bMSwwLDAsMCwxLDAsMCwwLDFdLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zaGFkZXIscj10aGlzLmJvdW5kcyxuPXRoaXMubnVtVmVydGljZXM7aWYoIShuPD0wKSl7dmFyIGk9dC5nbCxhPXQuZGF0YUJveCxvPXJbMl0tclswXSxzPXJbM10tclsxXSxsPWFbMl0tYVswXSxjPWFbM10tYVsxXTt1WzBdPTIqby9sLHVbNF09MipzL2MsdVs2XT0yKihyWzBdLWFbMF0pL2wtMSx1WzddPTIqKHJbMV0tYVsxXSkvYy0xLGUuYmluZCgpO3ZhciBmPWUudW5pZm9ybXM7Zi52aWV3VHJhbnNmb3JtPXUsZi5zaGFwZT10aGlzLnNoYXBlO3ZhciBoPWUuYXR0cmlidXRlczt0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxoLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksaC53ZWlnaHQucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGguY29sb3IucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITApLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUywwLG4pfX0pLGYuZHJhd1BpY2s9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwLDAsMCwxLDAsMCwwLDFdLGU9WzAsMCwwLDBdO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10aGlzLnBsb3QsaT10aGlzLnBpY2tTaGFkZXIsYT10aGlzLmJvdW5kcyxvPXRoaXMubnVtVmVydGljZXM7aWYoIShvPD0wKSl7dmFyIHM9bi5nbCxsPW4uZGF0YUJveCxjPWFbMl0tYVswXSx1PWFbM10tYVsxXSxmPWxbMl0tbFswXSxoPWxbM10tbFsxXTt0WzBdPTIqYy9mLHRbNF09Mip1L2gsdFs2XT0yKihhWzBdLWxbMF0pL2YtMSx0WzddPTIqKGFbMV0tbFsxXSkvaC0xO2Zvcih2YXIgcD0wO3A8NDsrK3ApZVtwXT1yPj44KnAmMjU1O3RoaXMucGlja09mZnNldD1yLGkuYmluZCgpO3ZhciBkPWkudW5pZm9ybXM7ZC52aWV3VHJhbnNmb3JtPXQsZC5waWNrT2Zmc2V0PWUsZC5zaGFwZT10aGlzLnNoYXBlO3ZhciBnPWkuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5wb3NpdGlvbkJ1ZmZlci5iaW5kKCksZy5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLGcud2VpZ2h0LnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmlkQnVmZmVyLmJpbmQoKSxnLnBpY2tJZC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVTLDAsbykscit0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV19fX0oKSxmLnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXTtpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLnhEYXRhLHM9dGhpcy55RGF0YTtyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDphLGRhdGFDb29yZDpbb1thJXRoaXMuc2hhcGVbMF1dLHNbYS90aGlzLnNoYXBlWzBdfDBdXX19LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZXx8WzAsMF0scj10Lnh8fGkoZVswXSksbz10Lnl8fGkoZVsxXSkscz10Lnp8fG5ldyBGbG9hdDMyQXJyYXkoZVswXSplWzFdKTt0aGlzLnhEYXRhPXIsdGhpcy55RGF0YT1vO3ZhciBsPXQuY29sb3JMZXZlbHN8fFswXSxjPXQuY29sb3JWYWx1ZXN8fFswLDAsMCwxXSx1PWwubGVuZ3RoLGY9dGhpcy5ib3VuZHMscD1mWzBdPXJbMF0sZD1mWzFdPW9bMF0sZz0xLygoZlsyXT1yW3IubGVuZ3RoLTFdKS1wKSx2PTEvKChmWzNdPW9bby5sZW5ndGgtMV0pLWQpLG09ZVswXSx5PWVbMV07dGhpcy5zaGFwZT1bbSx5XTt2YXIgeD0obS0xKSooeS0xKSooaC5sZW5ndGg+Pj4xKTt0aGlzLm51bVZlcnRpY2VzPXg7Zm9yKHZhciBiPWEubWFsbG9jVWludDgoNCp4KSxfPWEubWFsbG9jRmxvYXQzMigyKngpLHc9YS5tYWxsb2NVaW50OCgyKngpLGs9YS5tYWxsb2NVaW50MzIoeCksVD0wLEE9MDtBPHktMTsrK0EpZm9yKHZhciBNPXYqKG9bQV0tZCksUz12KihvW0ErMV0tZCksRT0wO0U8bS0xOysrRSlmb3IodmFyIEM9ZyoocltFXS1wKSxMPWcqKHJbRSsxXS1wKSx6PTA7ejxoLmxlbmd0aDt6Kz0yKXt2YXIgTyxJLEQsUCxSPWhbel0sRj1oW3orMV0sQj1zWyhBK0YpKm0rKEUrUildLE49bi5sZShsLEIpO2lmKE48MClPPWNbMF0sST1jWzFdLEQ9Y1syXSxQPWNbM107ZWxzZSBpZihOPT09dS0xKU89Y1s0KnUtNF0sST1jWzQqdS0zXSxEPWNbNCp1LTJdLFA9Y1s0KnUtMV07ZWxzZXt2YXIgaj0oQi1sW05dKS8obFtOKzFdLWxbTl0pLFY9MS1qLFU9NCpOLHE9NCooTisxKTtPPVYqY1tVXStqKmNbcV0sST1WKmNbVSsxXStqKmNbcSsxXSxEPVYqY1tVKzJdK2oqY1txKzJdLFA9VipjW1UrM10raipjW3ErM119Yls0KlRdPTI1NSpPLGJbNCpUKzFdPTI1NSpJLGJbNCpUKzJdPTI1NSpELGJbNCpUKzNdPTI1NSpQLF9bMipUXT0uNSpDKy41KkwsX1syKlQrMV09LjUqTSsuNSpTLHdbMipUXT1SLHdbMipUKzFdPUYsa1tUXT1BKm0rRSxUKz0xfXRoaXMucG9zaXRpb25CdWZmZXIudXBkYXRlKF8pLHRoaXMud2VpZ2h0QnVmZmVyLnVwZGF0ZSh3KSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShiKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShrKSxhLmZyZWUoXyksYS5mcmVlKGIpLGEuZnJlZSh3KSxhLmZyZWUoayl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9zaXRpb25CdWZmZXIuZGlzcG9zZSgpLHRoaXMud2VpZ2h0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjoyNDgsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoyNDksImdsLWJ1ZmZlciI6MjM3LCJnbC1zaGFkZXIiOjI5NywiaW90YS1hcnJheSI6NDA4LCJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDI0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5Iik7ZS5leHBvcnRzPXtmcmFnbWVudDpuKFsicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiICogZnJhZ0NvbG9yLmEsIGZyYWdDb2xvci5hKTtcbn1cbiJdKSx2ZXJ0ZXg6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiJdKSxwaWNrRnJhZ21lbnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGQgPSBzdGVwKC41LCB2V2VpZ2h0KTtcbiAgdmVjNCBpZCA9IGZyYWdJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnggKz0gZC54ICsgZC55KnNoYXBlLng7XG5cbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gaWQvMjU1Ljtcbn1cbiJdKSxwaWNrVmVydGV4Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xuYXR0cmlidXRlIHZlYzIgd2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIG1hdDMgdmlld1RyYW5zZm9ybTtcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG52b2lkIG1haW4oKSB7XG4gIHZXZWlnaHQgPSB3ZWlnaHQ7XG5cbiAgZnJhZ0lkID0gcGlja0lkO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiJdKX19LHtnbHNsaWZ5OjQwMX1dLDI0OTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDF9XSwyNTA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbmV4dFBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IGFyY0xlbmd0aCwgbGluZVdpZHRoO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5cbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcblxudmVjNCBwcm9qZWN0KHZlYzMgcCkge1xuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHN0YXJ0UG9pbnQgPSBwcm9qZWN0KHBvc2l0aW9uKTtcbiAgdmVjNCBlbmRQb2ludCAgID0gcHJvamVjdChuZXh0UG9zaXRpb24pO1xuXG4gIHZlYzIgQSA9IHN0YXJ0UG9pbnQueHkgLyBzdGFydFBvaW50Lnc7XG4gIHZlYzIgQiA9ICAgZW5kUG9pbnQueHkgLyAgIGVuZFBvaW50Lnc7XG5cbiAgZmxvYXQgY2xpcEFuZ2xlID0gYXRhbihcbiAgICAoQi55IC0gQS55KSAqIHNjcmVlblNoYXBlLnksXG4gICAgKEIueCAtIEEueCkgKiBzY3JlZW5TaGFwZS54XG4gICk7XG5cbiAgdmVjMiBvZmZzZXQgPSAwLjUgKiBwaXhlbFJhdGlvICogbGluZVdpZHRoICogdmVjMihcbiAgICBzaW4oY2xpcEFuZ2xlKSxcbiAgICAtY29zKGNsaXBBbmdsZSlcbiAgKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzdGFydFBvaW50Lnh5ICsgc3RhcnRQb2ludC53ICogb2Zmc2V0LCBzdGFydFBvaW50Lnp3KTtcblxuICB3b3JsZFBvc2l0aW9uID0gcG9zaXRpb247XG4gIHBpeGVsQXJjTGVuZ3RoID0gYXJjTGVuZ3RoO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICAgICAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hUZXh0dXJlO1xudW5pZm9ybSBmbG9hdCAgICAgZGFzaFNjYWxlO1xudW5pZm9ybSBmbG9hdCAgICAgb3BhY2l0eTtcblxudmFyeWluZyB2ZWMzICAgIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0ICAgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgICAgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pIHx8XG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcblxuICBmbG9hdCBkYXNoV2VpZ2h0ID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKGRhc2hTY2FsZSAqIHBpeGVsQXJjTGVuZ3RoLCAwKSkucjtcbiAgaWYoZGFzaFdlaWdodCA8IDAuNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XG5cbmxvd3AgdmVjNCBlbmNvZGVfZmxvYXRfMTU0MDI1OTEzMChoaWdocCBmbG9hdCB2KSB7XG4gIGhpZ2hwIGZsb2F0IGF2ID0gYWJzKHYpO1xuXG4gIC8vSGFuZGxlIHNwZWNpYWwgY2FzZXNcbiAgaWYoYXYgPCBGTE9BVF9NSU4pIHtcbiAgICByZXR1cm4gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2UgaWYodiA+IEZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDEyNy4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH0gZWxzZSBpZih2IDwgLUZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDI1NS4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH1cblxuICBoaWdocCB2ZWM0IGMgPSB2ZWM0KDAsMCwwLDApO1xuXG4gIC8vQ29tcHV0ZSBleHBvbmVudCBhbmQgbWFudGlzc2FcbiAgaGlnaHAgZmxvYXQgZSA9IGZsb29yKGxvZzIoYXYpKTtcbiAgaGlnaHAgZmxvYXQgbSA9IGF2ICogcG93KDIuMCwgLWUpIC0gMS4wO1xuICBcbiAgLy9VbnBhY2sgbWFudGlzc2FcbiAgY1sxXSA9IGZsb29yKDEyOC4wICogbSk7XG4gIG0gLT0gY1sxXSAvIDEyOC4wO1xuICBjWzJdID0gZmxvb3IoMzI3NjguMCAqIG0pO1xuICBtIC09IGNbMl0gLyAzMjc2OC4wO1xuICBjWzNdID0gZmxvb3IoODM4ODYwOC4wICogbSk7XG4gIFxuICAvL1VucGFjayBleHBvbmVudFxuICBoaWdocCBmbG9hdCBlYmlhcyA9IGUgKyAxMjcuMDtcbiAgY1swXSA9IGZsb29yKGViaWFzIC8gMi4wKTtcbiAgZWJpYXMgLT0gY1swXSAqIDIuMDtcbiAgY1sxXSArPSBmbG9vcihlYmlhcykgKiAxMjguMDsgXG5cbiAgLy9VbnBhY2sgc2lnbiBiaXRcbiAgY1swXSArPSAxMjguMCAqIHN0ZXAoMC4wLCAtdik7XG5cbiAgLy9TY2FsZSBiYWNrIHRvIHJhbmdlXG4gIHJldHVybiBjIC8gMjU1LjA7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzMgd29ybGRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLzI1NS4wLCBlbmNvZGVfZmxvYXRfMTU0MDI1OTEzMChwaXhlbEFyY0xlbmd0aCkueHl6KTtcbn0iXSksbD1be25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5leHRQb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJhcmNMZW5ndGgiLHR5cGU6ImZsb2F0In0se25hbWU6ImxpbmVXaWR0aCIsdHlwZToiZmxvYXQifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifV07ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxsKX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxzLG51bGwsbCl9fSx7ImdsLXNoYWRlciI6Mjk3LGdsc2xpZnk6NDAxfV0sMjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsfHx0LnNjZW5lJiZ0LnNjZW5lLmdsLHI9dShlKTtyLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsci5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLHIuYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxyLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDt2YXIgbz1mKGUpO28uYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG8uYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxvLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsby5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLG8uYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O2Zvcih2YXIgcz1uKGUpLGM9aShlLFt7YnVmZmVyOnMsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZToxLG9mZnNldDoyNCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjEsb2Zmc2V0OjI4LHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6NCxvZmZzZXQ6MzIsc3RyaWRlOjQ4fV0pLGg9bChuZXcgQXJyYXkoMTAyNCksWzI1NiwxLDRdKSxwPTA7cDwxMDI0OysrcCloLmRhdGFbcF09MjU1O3ZhciBkPWEoZSxoKTtkLndyYXA9ZS5SRVBFQVQ7dmFyIGc9bmV3IHYoZSxyLG8scyxjLGQpO3JldHVybiBnLnVwZGF0ZSh0KSxnfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiZ2wtdGV4dHVyZTJkIiksbz10KCJnbHNsLXJlYWQtZmxvYXQiKSxzPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbD10KCJuZGFycmF5IiksYz10KCIuL2xpYi9zaGFkZXJzIiksdT1jLmNyZWF0ZVNoYWRlcixmPWMuY3JlYXRlUGlja1NoYWRlcixoPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPTAsbj0wO248MzsrK24pe3ZhciBpPXRbbl0tZVtuXTtyKz1pKml9cmV0dXJuIE1hdGguc3FydChyKX1mdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxyPTA7cjwzOysrcillWzBdW3JdPU1hdGgubWF4KHRbMF1bcl0sZVswXVtyXSksZVsxXVtyXT1NYXRoLm1pbih0WzFdW3JdLGVbMV1bcl0pO3JldHVybiBlfWZ1bmN0aW9uIGcodCxlLHIsbil7dGhpcy5hcmNMZW5ndGg9dCx0aGlzLnBvc2l0aW9uPWUsdGhpcy5pbmRleD1yLHRoaXMuZGF0YUNvb3JkaW5hdGU9bn1mdW5jdGlvbiB2KHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLmJ1ZmZlcj1uLHRoaXMudmFvPWksdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMucG9pbnRzPVtdLHRoaXMuYXJjTGVuZ3RoPVtdLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmJvdW5kcz1bWzAsMCwwXSxbMCwwLDBdXSx0aGlzLnBpY2tJZD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy50ZXh0dXJlPWEsdGhpcy5kYXNoU2NhbGU9MSx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExLHRoaXMuZGlydHk9ITAsdGhpcy5waXhlbFJhdGlvPTF9dmFyIG09di5wcm90b3R5cGU7bS5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LG0uaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbS5waWNrU2xvdHM9MSxtLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LG0uZHJhd1RyYW5zcGFyZW50PW0uZHJhdz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIsbj10aGlzLnZhbztyLmJpbmQoKSxyLnVuaWZvcm1zPXttb2RlbDp0Lm1vZGVsfHxoLHZpZXc6dC52aWV3fHxoLHByb2plY3Rpb246dC5wcm9qZWN0aW9ufHxoLGNsaXBCb3VuZHM6ZCh0aGlzLmNsaXBCb3VuZHMpLGRhc2hUZXh0dXJlOnRoaXMudGV4dHVyZS5iaW5kKCksZGFzaFNjYWxlOnRoaXMuZGFzaFNjYWxlL3RoaXMuYXJjTGVuZ3RoW3RoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xXSxvcGFjaXR5OnRoaXMub3BhY2l0eSxzY3JlZW5TaGFwZTpbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb30sbi5iaW5kKCksbi5kcmF3KGUuVFJJQU5HTEVfU1RSSVAsdGhpcy52ZXJ0ZXhDb3VudCksbi51bmJpbmQoKX19LG0uZHJhd1BpY2s9ZnVuY3Rpb24odCl7aWYodGhpcy52ZXJ0ZXhDb3VudCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMucGlja1NoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fGgsdmlldzp0LnZpZXd8fGgscHJvamVjdGlvbjp0LnByb2plY3Rpb258fGgscGlja0lkOnRoaXMucGlja0lkLGNsaXBCb3VuZHM6ZCh0aGlzLmNsaXBCb3VuZHMpLHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0sbS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmRpcnR5PSEwO3ZhciBuPSEhdC5jb25uZWN0R2FwczsiZGFzaFNjYWxlImluIHQmJih0aGlzLmRhc2hTY2FsZT10LmRhc2hTY2FsZSksdGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSk7dmFyIGk9W10sYT1bXSxvPVtdLGM9MCx1PTAsZj1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxoPXQucG9zaXRpb258fHQucG9zaXRpb25zO2lmKGgpe3ZhciBkPXQuY29sb3J8fHQuY29sb3JzfHxbMCwwLDAsMV0sZz10LmxpbmVXaWR0aHx8MSx2PSExO3Q6Zm9yKGU9MTtlPGgubGVuZ3RoOysrZSl7dmFyIG0seSx4LGI9aFtlLTFdLF89aFtlXTtmb3IoYS5wdXNoKGMpLG8ucHVzaChiLnNsaWNlKCkpLHI9MDtyPDM7KytyKXtpZihpc05hTihiW3JdKXx8aXNOYU4oX1tyXSl8fCFpc0Zpbml0ZShiW3JdKXx8IWlzRmluaXRlKF9bcl0pKXtpZighbiYmaS5sZW5ndGg+MCl7Zm9yKHZhciB3PTA7dzwyNDsrK3cpaS5wdXNoKGlbaS5sZW5ndGgtMTJdKTt1Kz0yLHY9ITB9Y29udGludWUgdH1mWzBdW3JdPU1hdGgubWluKGZbMF1bcl0sYltyXSxfW3JdKSxmWzFdW3JdPU1hdGgubWF4KGZbMV1bcl0sYltyXSxfW3JdKX1BcnJheS5pc0FycmF5KGRbMF0pPyhtPWQubGVuZ3RoPmUtMT9kW2UtMV06ZC5sZW5ndGg+MD9kW2QubGVuZ3RoLTFdOlswLDAsMCwxXSx5PWQubGVuZ3RoPmU/ZFtlXTpkLmxlbmd0aD4wP2RbZC5sZW5ndGgtMV06WzAsMCwwLDFdKTptPXk9ZCwzPT09bS5sZW5ndGgmJihtPVttWzBdLG1bMV0sbVsyXSwxXSksMz09PXkubGVuZ3RoJiYoeT1beVswXSx5WzFdLHlbMl0sMV0pLCF0aGlzLmhhc0FscGhhJiZtWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSx4PUFycmF5LmlzQXJyYXkoZyk/Zy5sZW5ndGg+ZS0xP2dbZS0xXTpnLmxlbmd0aD4wP2dbZy5sZW5ndGgtMV06WzAsMCwwLDFdOmc7dmFyIGs9YztpZihjKz1wKGIsXyksdil7Zm9yKHI9MDtyPDI7KytyKWkucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLHgsbVswXSxtWzFdLG1bMl0sbVszXSk7dSs9Mix2PSExfWkucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLHgsbVswXSxtWzFdLG1bMl0sbVszXSxiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLC14LG1bMF0sbVsxXSxtWzJdLG1bM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0sYywteCx5WzBdLHlbMV0seVsyXSx5WzNdLF9bMF0sX1sxXSxfWzJdLGJbMF0sYlsxXSxiWzJdLGMseCx5WzBdLHlbMV0seVsyXSx5WzNdKSx1Kz00fX1pZih0aGlzLmJ1ZmZlci51cGRhdGUoaSksYS5wdXNoKGMpLG8ucHVzaChoW2gubGVuZ3RoLTFdLnNsaWNlKCkpLHRoaXMuYm91bmRzPWYsdGhpcy52ZXJ0ZXhDb3VudD11LHRoaXMucG9pbnRzPW8sdGhpcy5hcmNMZW5ndGg9YSwiZGFzaGVzImluIHQpe3ZhciBUPXQuZGFzaGVzLnNsaWNlKCk7Zm9yKFQudW5zaGlmdCgwKSxlPTE7ZTxULmxlbmd0aDsrK2UpVFtlXT1UW2UtMV0rVFtlXTt2YXIgQT1sKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pO2ZvcihlPTA7ZTwyNTY7KytlKXtmb3Iocj0wO3I8NDsrK3IpQS5zZXQoZSwwLHIsMCk7MSZzLmxlKFQsVFtULmxlbmd0aC0xXSplLzI1NSk/QS5zZXQoZSwwLDAsMCk6QS5zZXQoZSwwLDAsMjU1KX10aGlzLnRleHR1cmUuc2V0UGl4ZWxzKEEpfX0sbS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9LG0ucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9byh0LnZhbHVlWzBdLHQudmFsdWVbMV0sdC52YWx1ZVsyXSwwKSxyPXMubGUodGhpcy5hcmNMZW5ndGgsZSk7aWYocjwwKXJldHVybiBudWxsO2lmKHI9PT10aGlzLmFyY0xlbmd0aC5sZW5ndGgtMSlyZXR1cm4gbmV3IGcodGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLHRoaXMucG9pbnRzW3RoaXMucG9pbnRzLmxlbmd0aC0xXS5zbGljZSgpLHIpO2Zvcih2YXIgbj10aGlzLnBvaW50c1tyXSxpPXRoaXMucG9pbnRzW01hdGgubWluKHIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSldLGE9KGUtdGhpcy5hcmNMZW5ndGhbcl0pLyh0aGlzLmFyY0xlbmd0aFtyKzFdLXRoaXMuYXJjTGVuZ3RoW3JdKSxsPTEtYSxjPVswLDAsMF0sdT0wO3U8MzsrK3UpY1t1XT1sKm5bdV0rYSppW3VdO3ZhciBmPU1hdGgubWluKGE8LjU/cjpyKzEsdGhpcy5wb2ludHMubGVuZ3RoLTEpO3JldHVybiBuZXcgZyhlLGMsZix0aGlzLnBvaW50c1tmXSl9fSx7Ii4vbGliL3NoYWRlcnMiOjI1MCwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjI1MiwiZ2wtYnVmZmVyIjoyMzcsImdsLXRleHR1cmUyZCI6MzE0LCJnbC12YW8iOjMxOSwiZ2xzbC1yZWFkLWZsb2F0IjozOTIsbmRhcnJheTo0NDJ9XSwyNTI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAxXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAxfV0sMjUzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqYS1pKm47cmV0dXJuIG8/KG89MS9vLHRbMF09YSpvLHRbMV09LW4qbyx0WzJdPS1pKm8sdFszXT1yKm8sdCk6bnVsbH19LHt9XSwyNTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0sZj11Km8tcypjLGg9LXUqYStzKmwscD1jKmEtbypsLGQ9cipmK24qaCtpKnA7cmV0dXJuIGQ/KGQ9MS9kLHRbMF09ZipkLHRbMV09KC11Km4raSpjKSpkLHRbMl09KHMqbi1pKm8pKmQsdFszXT1oKmQsdFs0XT0odSpyLWkqbCkqZCx0WzVdPSgtcypyK2kqYSkqZCx0WzZdPXAqZCx0WzddPSgtYypyK24qbCkqZCx0WzhdPShvKnItbiphKSpkLHQpOm51bGx9fSx7fV0sMjU1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX19LHt9XSwyNTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjU3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XSx1PXRbOV0sZj10WzEwXSxoPXRbMTFdLHA9dFsxMl0sZD10WzEzXSxnPXRbMTRdLHY9dFsxNV07cmV0dXJuKGUqby1yKmEpKihmKnYtaCpnKS0oZSpzLW4qYSkqKHUqdi1oKmQpKyhlKmwtaSphKSoodSpnLWYqZCkrKHIqcy1uKm8pKihjKnYtaCpwKS0ocipsLWkqbykqKGMqZy1mKnApKyhuKmwtaSpzKSooYypkLXUqcCl9fSx7fV0sMjU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIrcixzPW4rbixsPWkraSxjPXIqbyx1PW4qbyxmPW4qcyxoPWkqbyxwPWkqcyxkPWkqbCxnPWEqbyx2PWEqcyxtPWEqbDtyZXR1cm4gdFswXT0xLWYtZCx0WzFdPXUrbSx0WzJdPWgtdix0WzNdPTAsdFs0XT11LW0sdFs1XT0xLWMtZCx0WzZdPXArZyx0WzddPTAsdFs4XT1oK3YsdFs5XT1wLWcsdFsxMF09MS1jLWYsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjU5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9bituLGw9aStpLGM9YSthLHU9bipzLGY9bipsLGg9bipjLHA9aSpsLGQ9aSpjLGc9YSpjLHY9bypzLG09bypsLHk9bypjO3JldHVybiB0WzBdPTEtKHArZyksdFsxXT1mK3ksdFsyXT1oLW0sdFszXT0wLHRbNF09Zi15LHRbNV09MS0odStnKSx0WzZdPWQrdix0WzddPTAsdFs4XT1oK20sdFs5XT1kLXYsdFsxMF09MS0odStwKSx0WzExXT0wLHRbMTJdPXJbMF0sdFsxM109clsxXSx0WzE0XT1yWzJdLHRbMTVdPTEsdH19LHt9XSwyNjA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sYz1lWzddLHU9ZVs4XSxmPWVbOV0saD1lWzEwXSxwPWVbMTFdLGQ9ZVsxMl0sZz1lWzEzXSx2PWVbMTRdLG09ZVsxNV0seT1yKnMtbipvLHg9cipsLWkqbyxiPXIqYy1hKm8sXz1uKmwtaSpzLHc9bipjLWEqcyxrPWkqYy1hKmwsVD11KmctZipkLEE9dSp2LWgqZCxNPXUqbS1wKmQsUz1mKnYtaCpnLEU9ZiptLXAqZyxDPWgqbS1wKnYsTD15KkMteCpFK2IqUytfKk0tdypBK2sqVDtpZighTClyZXR1cm4gbnVsbDtyZXR1cm4gTD0xL0wsdFswXT0ocypDLWwqRStjKlMpKkwsdFsxXT0oaSpFLW4qQy1hKlMpKkwsdFsyXT0oZyprLXYqdyttKl8pKkwsdFszXT0oaCp3LWYqay1wKl8pKkwsdFs0XT0obCpNLW8qQy1jKkEpKkwsdFs1XT0ocipDLWkqTSthKkEpKkwsdFs2XT0odipiLWQqay1tKngpKkwsdFs3XT0odSprLWgqYitwKngpKkwsdFs4XT0obypFLXMqTStjKlQpKkwsdFs5XT0obipNLXIqRS1hKlQpKkwsdFsxMF09KGQqdy1nKmIrbSp5KSpMLHRbMTFdPShmKmItdSp3LXAqeSkqTCx0WzEyXT0ocypBLW8qUy1sKlQpKkwsdFsxM109KHIqUy1uKkEraSpUKSpMLHRbMTRdPShnKngtZCpfLXYqeSkqTCx0WzE1XT0odSpfLWYqeCtoKnkpKkwsdH19LHt9XSwyNjI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2lkZW50aXR5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsLGMsdSxmLGgscCxkLGc9ZVswXSx2PWVbMV0sbT1lWzJdLHk9aVswXSx4PWlbMV0sYj1pWzJdLF89clswXSx3PXJbMV0saz1yWzJdO2lmKE1hdGguYWJzKGctXyk8MWUtNiYmTWF0aC5hYnModi13KTwxZS02JiZNYXRoLmFicyhtLWspPDFlLTYpcmV0dXJuIG4odCk7Zj1nLV8saD12LXcscD1tLWssZD0xL01hdGguc3FydChmKmYraCpoK3AqcCksYT14KihwKj1kKS1iKihoKj1kKSxvPWIqKGYqPWQpLXkqcCxzPXkqaC14KmYsKGQ9TWF0aC5zcXJ0KGEqYStvKm8rcypzKSk/KGEqPWQ9MS9kLG8qPWQscyo9ZCk6KGE9MCxvPTAscz0wKTtsPWgqcy1wKm8sYz1wKmEtZipzLHU9ZipvLWgqYSwoZD1NYXRoLnNxcnQobCpsK2MqYyt1KnUpKT8obCo9ZD0xL2QsYyo9ZCx1Kj1kKToobD0wLGM9MCx1PTApO3JldHVybiB0WzBdPWEsdFsxXT1sLHRbMl09Zix0WzNdPTAsdFs0XT1vLHRbNV09Yyx0WzZdPWgsdFs3XT0wLHRbOF09cyx0WzldPXUsdFsxMF09cCx0WzExXT0wLHRbMTJdPS0oYSpnK28qditzKm0pLHRbMTNdPS0obCpnK2Mqdit1Km0pLHRbMTRdPS0oZipnK2gqditwKm0pLHRbMTVdPTEsdH19LHsiLi9pZGVudGl0eSI6MjYwfV0sMjYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSxnPWVbMTJdLHY9ZVsxM10sbT1lWzE0XSx5PWVbMTVdLHg9clswXSxiPXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT14Km4rYipzK18qZit3KmcsdFsxXT14KmkrYipsK18qaCt3KnYsdFsyXT14KmErYipjK18qcCt3Km0sdFszXT14Km8rYip1K18qZCt3KnkseD1yWzRdLGI9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09eCpuK2IqcytfKmYrdypnLHRbNV09eCppK2IqbCtfKmgrdyp2LHRbNl09eCphK2IqYytfKnArdyptLHRbN109eCpvK2IqdStfKmQrdyp5LHg9cls4XSxiPXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09eCpuK2IqcytfKmYrdypnLHRbOV09eCppK2IqbCtfKmgrdyp2LHRbMTBdPXgqYStiKmMrXypwK3cqbSx0WzExXT14Km8rYip1K18qZCt3KnkseD1yWzEyXSxiPXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT14Km4rYipzK18qZit3KmcsdFsxM109eCppK2IqbCtfKmgrdyp2LHRbMTRdPXgqYStiKmMrXypwK3cqbSx0WzE1XT14Km8rYip1K18qZCt3KnksdH19LHt9XSwyNjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oZS1yKSxsPTEvKG4taSksYz0xLyhhLW8pO3JldHVybiB0WzBdPS0yKnMsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09LTIqbCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MipjLHRbMTFdPTAsdFsxMl09KGUrcikqcyx0WzEzXT0oaStuKSpsLHRbMTRdPShvK2EpKmMsdFsxNV09MSx0fX0se31dLDI2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fX0se31dLDI2NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscCxkLGcsdixtLHkseCxiLF8sdyxrLFQsQSxNLFMsRT1uWzBdLEM9blsxXSxMPW5bMl0sej1NYXRoLnNxcnQoRSpFK0MqQytMKkwpO2lmKE1hdGguYWJzKHopPDFlLTYpcmV0dXJuIG51bGw7RSo9ej0xL3osQyo9eixMKj16LGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxvPTEtYSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PWVbM10sZj1lWzRdLGg9ZVs1XSxwPWVbNl0sZD1lWzddLGc9ZVs4XSx2PWVbOV0sbT1lWzEwXSx5PWVbMTFdLHg9RSpFKm8rYSxiPUMqRSpvK0wqaSxfPUwqRSpvLUMqaSx3PUUqQypvLUwqaSxrPUMqQypvK2EsVD1MKkMqbytFKmksQT1FKkwqbytDKmksTT1DKkwqby1FKmksUz1MKkwqbythLHRbMF09cyp4K2YqYitnKl8sdFsxXT1sKngraCpiK3YqXyx0WzJdPWMqeCtwKmIrbSpfLHRbM109dSp4K2QqYit5Kl8sdFs0XT1zKncrZiprK2cqVCx0WzVdPWwqdytoKmsrdipULHRbNl09Yyp3K3AqayttKlQsdFs3XT11KncrZCprK3kqVCx0WzhdPXMqQStmKk0rZypTLHRbOV09bCpBK2gqTSt2KlMsdFsxMF09YypBK3AqTSttKlMsdFsxMV09dSpBK2QqTSt5KlMsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHR9fSx7fV0sMjY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkrZipuLHRbN109bCppK2gqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWYqaS1zKm4sdFsxMV09aCppLWwqbix0fX0se31dLDI2ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07ZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaS1jKm4sdFsxXT1vKmktdSpuLHRbMl09cyppLWYqbix0WzNdPWwqaS1oKm4sdFs4XT1hKm4rYyppLHRbOV09bypuK3UqaSx0WzEwXT1zKm4rZippLHRbMTFdPWwqbitoKmksdH19LHt9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs0XSx1PWVbNV0sZj1lWzZdLGg9ZVs3XTtlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaStjKm4sdFsxXT1vKmkrdSpuLHRbMl09cyppK2Yqbix0WzNdPWwqaStoKm4sdFs0XT1jKmktYSpuLHRbNV09dSppLW8qbix0WzZdPWYqaS1zKm4sdFs3XT1oKmktbCpuLHR9fSx7fV0sMjcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDI3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGc9clswXSx2PXJbMV0sbT1yWzJdO2U9PT10Pyh0WzEyXT1lWzBdKmcrZVs0XSp2K2VbOF0qbStlWzEyXSx0WzEzXT1lWzFdKmcrZVs1XSp2K2VbOV0qbStlWzEzXSx0WzE0XT1lWzJdKmcrZVs2XSp2K2VbMTBdKm0rZVsxNF0sdFsxNV09ZVszXSpnK2VbN10qditlWzExXSptK2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09Zix0WzldPWgsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qZytzKnYrZiptK2VbMTJdLHRbMTNdPWkqZytsKnYraCptK2VbMTNdLHRbMTRdPWEqZytjKnYrcCptK2VbMTRdLHRbMTVdPW8qZyt1KnYrZCptK2VbMTVdKTtyZXR1cm4gdH19LHt9XSwyNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9fSx7fV0sMjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0WzBdPTEvZVswXTticmVhaztjYXNlIDQ6bih0LGUpO2JyZWFrO2Nhc2UgOTppKHQsZSk7YnJlYWs7Y2FzZSAxNjphKHQsZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImN1cnJlbnRseSBzdXBwb3J0cyBtYXRyaWNlcyB1cCB0byA0eDQiKX1yZXR1cm4gdH07dmFyIG49dCgiZ2wtbWF0Mi9pbnZlcnQiKSxpPXQoImdsLW1hdDMvaW52ZXJ0IiksYT10KCJnbC1tYXQ0L2ludmVydCIpfSx7ImdsLW1hdDIvaW52ZXJ0IjoyNTMsImdsLW1hdDMvaW52ZXJ0IjoyNTQsImdsLW1hdDQvaW52ZXJ0IjoyNjF9XSwyNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmFyeWNlbnRyaWMiKSxpPXQoInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanMiKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVswLDAsMCwwXSxuPTA7bjw0Oysrbilmb3IodmFyIGk9MDtpPDQ7KytpKXJbaV0rPXRbNCpuK2ldKmVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0LGUscixuLGkpe2Zvcih2YXIgbz1hKG4sYShyLGEoZSxbdFswXSx0WzFdLHRbMl0sMV0pKSkscz0wO3M8MzsrK3Mpb1tzXS89b1szXTtyZXR1cm5bLjUqaVswXSooMStvWzBdKSwuNSppWzFdKigxLW9bMV0pXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxzLGwpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm5bMCx0WzBdLnNsaWNlKCldO2Zvcih2YXIgYz1uZXcgQXJyYXkodC5sZW5ndGgpLHU9MDt1PHQubGVuZ3RoOysrdSljW3VdPW8odFt1XSxyLGEscyxsKTtmb3IodmFyIGY9MCxoPTEvMCx1PTA7dTxjLmxlbmd0aDsrK3Upe2Zvcih2YXIgcD0wLGQ9MDtkPDI7KytkKXArPU1hdGgucG93KGNbdV1bZF0tZVtkXSwyKTtwPGgmJihoPXAsZj11KX1mb3IodmFyIGc9ZnVuY3Rpb24odCxlKXtpZigyPT09dC5sZW5ndGgpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzwyOysrbylyKz1NYXRoLnBvdyhlW29dLXRbMF1bb10sMiksYSs9TWF0aC5wb3coZVtvXS10WzFdW29dLDIpO3JldHVybiByPU1hdGguc3FydChyKSxhPU1hdGguc3FydChhKSxyK2E8MWUtNj9bMSwwXTpbYS8ocithKSxyLyhhK3IpXX1pZigzPT09dC5sZW5ndGgpe3ZhciBzPVswLDBdO3JldHVybiBpKHRbMF0sdFsxXSx0WzJdLGUscyksbih0LHMpfXJldHVybltdfShjLGUpLHY9MCx1PTA7dTwzOysrdSl7aWYoZ1t1XTwtLjAwMXx8Z1t1XT4xLjAwMDEpcmV0dXJuIG51bGw7dis9Z1t1XX1pZihNYXRoLmFicyh2LTEpPi4wMDEpcmV0dXJuIG51bGw7cmV0dXJuW2YsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9WzAsMCwwXSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0sYT1lW25dLG89MDtvPDM7KytvKXJbb10rPWEqaVtvXTtyZXR1cm4gcn0odCxnKSxnXX19LHtiYXJ5Y2VudHJpYzo2MywicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyI6NDczfV0sMjc1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBub3JtYWw7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvblxuICAgICAgICAgICAsIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZlYzQgcHJvamVjdCh2ZWMzIHApIHtcbiAgcmV0dXJuIHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3QocG9zaXRpb24pO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogdmVjNChwb3NpdGlvbiAsIDEuMCk7XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfbm9ybWFsICA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gcG9zaXRpb247XG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcbn1cbiJdKSxhPW4oWyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcblxuICAvL0ZyZXNuZWwgdGVybVxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcblxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xufVxuXG4vLyNwcmFnbWEgZ2xzbGlmeTogYmVja21hbm4gPSByZXF1aXJlKGdsc2wtc3BlY3VsYXItYmVja21hbm4pIC8vIHVzZWQgaW4gZ2wtc3VyZmFjZTNkXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzXG4gICAgICAgICAgICAsIGZyZXNuZWxcbiAgICAgICAgICAgICwga2FtYmllbnRcbiAgICAgICAgICAgICwga2RpZmZ1c2VcbiAgICAgICAgICAgICwga3NwZWN1bGFyXG4gICAgICAgICAgICAsIG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGE7XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSkpIGRpc2NhcmQ7XG5cbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtaW4oMS4wLCBtYXgoMC4wLCBjb29rVG9ycmFuY2VTcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MsIGZyZXNuZWwpKSk7XG4gIC8vZmxvYXQgc3BlY3VsYXIgPSBtYXgoMC4wLCBiZWNrbWFubihMLCBWLCBOLCByb3VnaG5lc3MpKTsgLy8gdXNlZCBpbiBnbC1zdXJmYWNlM2RcblxuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl9kYXRhICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgID0gdXY7XG59Il0pLHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSkpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XG59Il0pLGw9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICB9XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgZl9jb2xvciA9IGNvbG9yO1xuICBmX3V2ID0gdXY7XG59Il0pLGM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb2ludFIgPSBnbF9Qb2ludENvb3JkLnh5IC0gdmVjMigwLjUsMC41KTtcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSJdKSx1PW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbjtcbn0iXSksZj1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pLGg9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyAgcG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuYXR0cmlidXRlIHZlYzQgIGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG4gIH1cbiAgZl9pZCAgICAgICAgID0gaWQ7XG4gIGZfcG9zaXRpb24gICA9IHBvc2l0aW9uO1xufSJdKSxwPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG59Il0pLGQ9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyBjb250b3VyQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb250b3VyQ29sb3IsMSk7XG59XG4iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifV19LHIud2lyZVNoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifV19LHIucG9pbnRTaGFkZXI9e3ZlcnRleDpsLGZyYWdtZW50OmMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifV19LHIucGlja1NoYWRlcj17dmVydGV4OnUsZnJhZ21lbnQ6ZixhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIucG9pbnRQaWNrU2hhZGVyPXt2ZXJ0ZXg6aCxmcmFnbWVudDpmLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJwb2ludFNpemUiLHR5cGU6ImZsb2F0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dfSxyLmNvbnRvdXJTaGFkZXI9e3ZlcnRleDpwLGZyYWdtZW50OmQsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn1dfX0se2dsc2xpZnk6NDAxfV0sMjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoImdsLXRleHR1cmUyZCIpLHM9dCgibm9ybWFscyIpLGw9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGM9dCgiZ2wtbWF0NC9pbnZlcnQiKSx1PXQoIm5kYXJyYXkiKSxmPXQoImNvbG9ybWFwIiksaD10KCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91ciIpLHA9dCgidHlwZWRhcnJheS1wb29sIiksZD10KCIuL2xpYi9zaGFkZXJzIiksZz10KCIuL2xpYi9jbG9zZXN0LXBvaW50Iiksdj1kLm1lc2hTaGFkZXIsbT1kLndpcmVTaGFkZXIseT1kLnBvaW50U2hhZGVyLHg9ZC5waWNrU2hhZGVyLGI9ZC5wb2ludFBpY2tTaGFkZXIsXz1kLmNvbnRvdXJTaGFkZXIsdz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gayh0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxnLHYsbSx5LHgsYixfLGssVCxBLE0sUyl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMubGluZVNoYWRlcj1uLHRoaXMucG9pbnRTaGFkZXI9aSx0aGlzLnBpY2tTaGFkZXI9YSx0aGlzLnBvaW50UGlja1NoYWRlcj1vLHRoaXMuY29udG91clNoYWRlcj1zLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9bCx0aGlzLnRyaWFuZ2xlQ29sb3JzPXUsdGhpcy50cmlhbmdsZU5vcm1hbHM9aCx0aGlzLnRyaWFuZ2xlVVZzPWYsdGhpcy50cmlhbmdsZUlkcz1jLHRoaXMudHJpYW5nbGVWQU89cCx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuZWRnZVBvc2l0aW9ucz1kLHRoaXMuZWRnZUNvbG9ycz12LHRoaXMuZWRnZVVWcz1tLHRoaXMuZWRnZUlkcz1nLHRoaXMuZWRnZVZBTz15LHRoaXMuZWRnZUNvdW50PTAsdGhpcy5wb2ludFBvc2l0aW9ucz14LHRoaXMucG9pbnRDb2xvcnM9Xyx0aGlzLnBvaW50VVZzPWssdGhpcy5wb2ludFNpemVzPVQsdGhpcy5wb2ludElkcz1iLHRoaXMucG9pbnRWQU89QSx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbnRvdXJMaW5lV2lkdGg9MSx0aGlzLmNvbnRvdXJQb3NpdGlvbnM9TSx0aGlzLmNvbnRvdXJWQU89Uyx0aGlzLmNvbnRvdXJDb3VudD0wLHRoaXMuY29udG91ckNvbG9yPVswLDAsMF0sdGhpcy5jb250b3VyRW5hYmxlPSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuX21vZGVsPXcsdGhpcy5fdmlldz13LHRoaXMuX3Byb2plY3Rpb249dyx0aGlzLl9yZXNvbHV0aW9uPVsxLDFdfXZhciBUPWsucHJvdG90eXBlO2Z1bmN0aW9uIEEodCl7dmFyIGU9bih0LHkudmVydGV4LHkuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBNKHQpe3ZhciBlPW4odCx4LnZlcnRleCx4LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZX1mdW5jdGlvbiBTKHQpe3ZhciBlPW4odCxiLnZlcnRleCxiLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gRSh0KXt2YXIgZT1uKHQsXy52ZXJ0ZXgsXy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGV9VC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LFQuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0sVC5waWNrU2xvdHM9MSxULnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LFQuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWgodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGY9Y1swXTsyPT09Yy5sZW5ndGgmJihmPWNbdV0pO2Zvcih2YXIgZD1uW2ZdWzBdLGc9bltmXVsxXSx2PWlbZl0sbT0xLXYseT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW2ddLGI9MDtiPDM7KytiKW9bcysrXT12KnlbYl0rbSp4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSxULnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCwiY29udG91ckVuYWJsZSJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwibGlnaHRQb3NpdGlvbiJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLCJhbWJpZW50ImluIHQmJih0aGlzLmFtYmllbnRMaWdodD10LmFtYmllbnQpLCJkaWZmdXNlImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLCJzcGVjdWxhciJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLCJyb3VnaG5lc3MiaW4gdCYmKHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzKSwiZnJlc25lbCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0KXtmb3IodmFyIGU9Zih7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIGk9ZVtuXSxhPTA7YTwzOysrYSlyWzQqbithXT1pW2FdO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiB1KHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXApKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zO2lmKG4mJnIpe3ZhciBpPVtdLGE9W10sbD1bXSxjPVtdLGg9W10scD1bXSxkPVtdLGc9W10sdj1bXSxtPVtdLHk9W10seD1bXSxiPVtdLF89W107dGhpcy5jZWxscz1yLHRoaXMucG9zaXRpb25zPW47dmFyIHc9dC52ZXJ0ZXhOb3JtYWxzLGs9dC5jZWxsTm9ybWFscyxUPXZvaWQgMD09PXQudmVydGV4Tm9ybWFsc0Vwc2lsb24/MWUtNjp0LnZlcnRleE5vcm1hbHNFcHNpbG9uLEE9dm9pZCAwPT09dC5mYWNlTm9ybWFsc0Vwc2lsb24/MWUtNjp0LmZhY2VOb3JtYWxzRXBzaWxvbjt0LnVzZUZhY2V0Tm9ybWFscyYmIWsmJihrPXMuZmFjZU5vcm1hbHMocixuLEEpKSxrfHx3fHwodz1zLnZlcnRleE5vcm1hbHMocixuLFQpKTt2YXIgTT10LnZlcnRleENvbG9ycyxTPXQuY2VsbENvbG9ycyxFPXQubWVzaENvbG9yfHxbMSwxLDEsMV0sQz10LnZlcnRleFVWcyxMPXQudmVydGV4SW50ZW5zaXR5LHo9dC5jZWxsVVZzLE89dC5jZWxsSW50ZW5zaXR5LEk9MS8wLEQ9LTEvMDtpZighQyYmIXopaWYoTClpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcylJPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxEPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgUD0wO1A8TC5sZW5ndGg7KytQKXt2YXIgUj1MW1BdO0k9TWF0aC5taW4oSSxSKSxEPU1hdGgubWF4KEQsUil9ZWxzZSBpZihPKWZvcihQPTA7UDxPLmxlbmd0aDsrK1Ape1I9T1tQXTtJPU1hdGgubWluKEksUiksRD1NYXRoLm1heChELFIpfWVsc2UgZm9yKFA9MDtQPG4ubGVuZ3RoOysrUCl7Uj1uW1BdWzJdO0k9TWF0aC5taW4oSSxSKSxEPU1hdGgubWF4KEQsUil9dGhpcy5pbnRlbnNpdHk9THx8KE8/ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT0wO3ZhciBhPXQubGVuZ3RoO2ZvcihpPTA7aTxhOysraSlmb3IodmFyIG89dFtpXSxzPTA7czxvLmxlbmd0aDsrK3MpbltvW3NdXT1yW2ldO3JldHVybiBufShyLG4ubGVuZ3RoLE8pOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pKTt2YXIgRj10LnBvaW50U2l6ZXMsQj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoUD0wO1A8bi5sZW5ndGg7KytQKWZvcih2YXIgTj1uW1BdLGo9MDtqPDM7KytqKSFpc05hTihOW2pdKSYmaXNGaW5pdGUoTltqXSkmJih0aGlzLmJvdW5kc1swXVtqXT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVtqXSxOW2pdKSx0aGlzLmJvdW5kc1sxXVtqXT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVtqXSxOW2pdKSk7dmFyIFY9MCxVPTAscT0wO3Q6Zm9yKFA9MDtQPHIubGVuZ3RoOysrUCl7dmFyIEg9cltQXTtzd2l0Y2goSC5sZW5ndGgpe2Nhc2UgMTpmb3IoTj1uW1k9SFswXV0saj0wO2o8MzsrK2opaWYoaXNOYU4oTltqXSl8fCFpc0Zpbml0ZShOW2pdKSljb250aW51ZSB0O20ucHVzaChOWzBdLE5bMV0sTlsyXSksMz09PShXPU0/TVtZXTpTP1NbUF06RSkubGVuZ3RoP3kucHVzaChXWzBdLFdbMV0sV1syXSwxKTp5LnB1c2goV1swXSxXWzFdLFdbMl0sV1szXSksWD1DP0NbWV06TD9bKExbWV0tSSkvKEQtSSksMF06ej96W1BdOk8/WyhPW1BdLUkpLyhELUkpLDBdOlsoTlsyXS1JKS8oRC1JKSwwXSx4LnB1c2goWFswXSxYWzFdKSxGP2IucHVzaChGW1ldKTpiLnB1c2goQiksXy5wdXNoKFApLHErPTE7YnJlYWs7Y2FzZSAyOmZvcihqPTA7ajwyOysrail7Tj1uW1k9SFtqXV07Zm9yKHZhciBHPTA7RzwzOysrRylpZihpc05hTihOW0ddKXx8IWlzRmluaXRlKE5bR10pKWNvbnRpbnVlIHR9Zm9yKGo9MDtqPDI7KytqKXtOPW5bWT1IW2pdXTtwLnB1c2goTlswXSxOWzFdLE5bMl0pLDM9PT0oVz1NP01bWV06Uz9TW1BdOkUpLmxlbmd0aD9kLnB1c2goV1swXSxXWzFdLFdbMl0sMSk6ZC5wdXNoKFdbMF0sV1sxXSxXWzJdLFdbM10pLFg9Qz9DW1ldOkw/WyhMW1ldLUkpLyhELUkpLDBdOno/eltQXTpPP1soT1tQXS1JKS8oRC1JKSwwXTpbKE5bMl0tSSkvKEQtSSksMF0sZy5wdXNoKFhbMF0sWFsxXSksdi5wdXNoKFApfVUrPTE7YnJlYWs7Y2FzZSAzOmZvcihqPTA7ajwzOysrailmb3IoTj1uW1k9SFtqXV0sRz0wO0c8MzsrK0cpaWYoaXNOYU4oTltHXSl8fCFpc0Zpbml0ZShOW0ddKSljb250aW51ZSB0O2ZvcihqPTA7ajwzOysrail7dmFyIFksVyxYLFo7Tj1uW1k9SFsyLWpdXTtpLnB1c2goTlswXSxOWzFdLE5bMl0pLDM9PT0oVz1NP01bWV06Uz9TW1BdOkUpLmxlbmd0aD9hLnB1c2goV1swXSxXWzFdLFdbMl0sMSk6YS5wdXNoKFdbMF0sV1sxXSxXWzJdLFdbM10pLFg9Qz9DW1ldOkw/WyhMW1ldLUkpLyhELUkpLDBdOno/eltQXTpPP1soT1tQXS1JKS8oRC1JKSwwXTpbKE5bMl0tSSkvKEQtSSksMF0sYy5wdXNoKFhbMF0sWFsxXSksWj13P3dbWV06a1tQXSxsLnB1c2goWlswXSxaWzFdLFpbMl0pLGgucHVzaChQKX1WKz0xfX10aGlzLnBvaW50Q291bnQ9cSx0aGlzLmVkZ2VDb3VudD1VLHRoaXMudHJpYW5nbGVDb3VudD1WLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKG0pLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKHkpLHRoaXMucG9pbnRVVnMudXBkYXRlKHgpLHRoaXMucG9pbnRTaXplcy51cGRhdGUoYiksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KF8pKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKHApLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUoZCksdGhpcy5lZGdlVVZzLnVwZGF0ZShnKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheSh2KSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoaSksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUoYyksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShoKSl9fSxULmRyYXdUcmFuc3BhcmVudD1ULmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsaT10LnByb2plY3Rpb258fHcsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDp3LnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3MuaW52ZXJzZU1vZGVsPWMocy5pbnZlcnNlTW9kZWwscy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgZixoPXVbMTVdO2ZvcihvPTA7bzwzOysrbyloKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIHA9dVsxMitvXSxkPTA7ZDwzOysrZClwKz11WzQqZCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bZF07cy5saWdodFBvc2l0aW9uW29dPXAvaH10aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKChmPXRoaXMudHJpU2hhZGVyKS5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKTt0aGlzLmVkZ2VDb3VudD4wJiZ0aGlzLmxpbmVXaWR0aD4wJiYoKGY9dGhpcy5saW5lU2hhZGVyKS5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSk7dGhpcy5wb2ludENvdW50PjAmJigoZj10aGlzLnBvaW50U2hhZGVyKS5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSk7dGhpcy5jb250b3VyRW5hYmxlJiZ0aGlzLmNvbnRvdXJDb3VudD4wJiZ0aGlzLmNvbnRvdXJMaW5lV2lkdGg+MCYmKChmPXRoaXMuY29udG91clNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLmNvbnRvdXJWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsdGhpcy5jb250b3VyQ291bnQpLHRoaXMuY29udG91clZBTy51bmJpbmQoKSl9LFQuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsaT10LnByb2plY3Rpb258fHcsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcyxsPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9Oygocz10aGlzLnBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSksdGhpcy5wb2ludENvdW50PjApJiYoKHM9dGhpcy5wb2ludFBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpKX0sVC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zLGk9bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpaVthXT1uW3JbYV1dO3ZhciBvPWcoaSxbdC5jb29yZFswXSx0aGlzLl9yZXNvbHV0aW9uWzFdLXQuY29vcmRbMV1dLHRoaXMuX21vZGVsLHRoaXMuX3ZpZXcsdGhpcy5fcHJvamVjdGlvbix0aGlzLl9yZXNvbHV0aW9uKTtpZighbylyZXR1cm4gbnVsbDt2YXIgcz1vWzJdLGw9MDtmb3IoYT0wO2E8ci5sZW5ndGg7KythKWwrPXNbYV0qdGhpcy5pbnRlbnNpdHlbclthXV07cmV0dXJue3Bvc2l0aW9uOm9bMV0saW5kZXg6cltvWzBdXSxjZWxsOnIsY2VsbElkOmUsaW50ZW5zaXR5OmwsZGF0YUNvb3JkaW5hdGU6dGhpcy5wb3NpdGlvbnNbcltvWzBdXV19fSxULmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmxpbmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5jb250b3VyU2hhZGVyLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKSwhKHQuZ2V0RXh0ZW5zaW9uKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkpdGhyb3cgbmV3IEVycm9yKCJkZXJpdmF0aXZlcyBub3Qgc3VwcG9ydGVkIik7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTQsZX0odCkscz1mdW5jdGlvbih0KXt2YXIgZT1uKHQsbS52ZXJ0ZXgsbS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGV9KHQpLGw9QSh0KSxjPU0odCksZj1TKHQpLGg9RSh0KSxwPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7cC5nZW5lcmF0ZU1pcG1hcCgpLHAubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIscC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGQ9aSh0KSxnPWkodCkseT1pKHQpLHg9aSh0KSxiPWkodCksXz1hKHQsW3tidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmIsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9XSksdz1pKHQpLFQ9aSh0KSxDPWkodCksTD1pKHQpLHo9YSh0LFt7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpMLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOlQsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpDLHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksTz1pKHQpLEk9aSh0KSxEPWkodCksUD1pKHQpLFI9aSh0KSxGPWEodCxbe2J1ZmZlcjpPLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Uix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpJLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6RCx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOlAsdHlwZTp0LkZMT0FULHNpemU6MX1dKSxCPWkodCksTj1uZXcgayh0LHAscixzLGwsYyxmLGgsZCxiLGcseSx4LF8sdyxMLFQsQyx6LE8sUixJLEQsUCxGLEIsYSh0LFt7YnVmZmVyOkIsdHlwZTp0LkZMT0FULHNpemU6M31dKSk7cmV0dXJuIE4udXBkYXRlKGUpLE59fSx7Ii4vbGliL2Nsb3Nlc3QtcG9pbnQiOjI3NCwiLi9saWIvc2hhZGVycyI6Mjc1LGNvbG9ybWFwOjExNiwiZ2wtYnVmZmVyIjoyMzcsImdsLW1hdDQvaW52ZXJ0IjoyNjEsImdsLW1hdDQvbXVsdGlwbHkiOjI2MywiZ2wtc2hhZGVyIjoyOTcsImdsLXRleHR1cmUyZCI6MzE0LCJnbC12YW8iOjMxOSxuZGFycmF5OjQ0Mixub3JtYWxzOjQ0NSwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXIiOjUwMiwidHlwZWRhcnJheS1wb29sIjo1Mjl9XSwyNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWzAsMCwwLDEsMSwwLDEsMV0pLHM9aShlLGEuYm94VmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3Qm94PShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLnBsb3Qsbz10aGlzLnNoYWRlcixjPWEuZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLG8udW5pZm9ybXMubG89cyxvLnVuaWZvcm1zLmhpPWwsby51bmlmb3Jtcy5jb2xvcj1pLGMuZHJhd0FycmF5cyhjLlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI4MCwiZ2wtYnVmZmVyIjoyMzcsImdsLXNoYWRlciI6Mjk3fV0sMjc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxvLmdyaWRWZXJ0LG8uZ3JpZEZyYWcpLGw9aShlLG8udGlja1ZlcnQsby5ncmlkRnJhZyk7cmV0dXJuIG5ldyBzKHQscixhLGwpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxvPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja1NoYWRlcj1uLHRoaXMudGlja3M9W1tdLFtdXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQtZX12YXIgYyx1LGYsaCxwLGQ9cy5wcm90b3R5cGU7ZC5kcmF3PShjPVswLDBdLHU9WzAsMF0sZj1bMCwwXSxmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBsb3QsZT10aGlzLnZibyxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrcyxpPXQuZ2wsYT10Ll90aWNrQm91bmRzLG89dC5kYXRhQm94LHM9dC52aWV3Qm94LGw9dC5ncmlkTGluZVdpZHRoLGg9dC5ncmlkTGluZUNvbG9yLHA9dC5ncmlkTGluZUVuYWJsZSxkPXQucGl4ZWxSYXRpbyxnPTA7ZzwyOysrZyl7dmFyIHY9YVtnXSxtPWFbZysyXS12LHk9LjUqKG9bZysyXStvW2ddKSx4PW9bZysyXS1vW2ddO3VbZ109MiptL3gsY1tnXT0yKih2LXkpL3h9ci5iaW5kKCksZS5iaW5kKCksci5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCksci51bmlmb3Jtcy5kYXRhU2hpZnQ9YyxyLnVuaWZvcm1zLmRhdGFTY2FsZT11O3ZhciBiPTA7Zm9yKGc9MDtnPDI7KytnKXtmWzBdPWZbMV09MCxmW2ddPTEsci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMubGluZVdpZHRoPWxbZ10vKHNbZysyXS1zW2ddKSpkLHIudW5pZm9ybXMuY29sb3I9aFtnXTt2YXIgXz02Km5bZ10ubGVuZ3RoO3BbZ10mJl8mJmkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUyxiLF8pLGIrPV99fSksZC5kcmF3VGlja01hcmtzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVsxLDBdLG49WzAsMV0saT1bMCwwXSxvPVswLDBdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcz10aGlzLnBsb3QsYz10aGlzLnZibyx1PXRoaXMudGlja1NoYWRlcixmPXRoaXMudGlja3MsaD1zLmdsLHA9cy5fdGlja0JvdW5kcyxkPXMuZGF0YUJveCxnPXMudmlld0JveCx2PXMucGl4ZWxSYXRpbyxtPXMuc2NyZWVuQm94LHk9bVsyXS1tWzBdLHg9bVszXS1tWzFdLGI9Z1syXS1nWzBdLF89Z1szXS1nWzFdLHc9MDt3PDI7Kyt3KXt2YXIgaz1wW3ddLFQ9cFt3KzJdLWssQT0uNSooZFt3KzJdK2Rbd10pLE09ZFt3KzJdLWRbd107ZVt3XT0yKlQvTSx0W3ddPTIqKGstQSkvTX1lWzBdKj1iL3ksdFswXSo9Yi95LGVbMV0qPV8veCx0WzFdKj1fL3gsdS5iaW5kKCksYy5iaW5kKCksdS5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCk7dmFyIFM9dS51bmlmb3JtcztTLmRhdGFTaGlmdD10LFMuZGF0YVNjYWxlPWU7dmFyIEU9cy50aWNrTWFya0xlbmd0aCxDPXMudGlja01hcmtXaWR0aCxMPXMudGlja01hcmtDb2xvcix6PTYqZlswXS5sZW5ndGgsTz1NYXRoLm1pbihhLmdlKGZbMF0sKGRbMF0tcFswXSkvKHBbMl0tcFswXSksbCksZlswXS5sZW5ndGgpLEk9TWF0aC5taW4oYS5ndChmWzBdLChkWzJdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGZbMF0ubGVuZ3RoKSxEPTArNipPLFA9NipNYXRoLm1heCgwLEktTyksUj1NYXRoLm1pbihhLmdlKGZbMV0sKGRbMV0tcFsxXSkvKHBbM10tcFsxXSksbCksZlsxXS5sZW5ndGgpLEY9TWF0aC5taW4oYS5ndChmWzFdLChkWzNdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGZbMV0ubGVuZ3RoKSxCPXorNipSLE49NipNYXRoLm1heCgwLEYtUik7aVswXT0yKihnWzBdLUVbMV0pL3ktMSxpWzFdPShnWzNdK2dbMV0pL3gtMSxvWzBdPUVbMV0qdi95LG9bMV09Q1sxXSp2L3gsTiYmKFMuY29sb3I9TFsxXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9bixTLnNjcmVlbk9mZnNldD1pLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyxCLE4pKSxpWzBdPShnWzJdK2dbMF0pL3ktMSxpWzFdPTIqKGdbMV0tRVswXSkveC0xLG9bMF09Q1swXSp2L3ksb1sxXT1FWzBdKnYveCxQJiYoUy5jb2xvcj1MWzBdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1yLFMuc2NyZWVuT2Zmc2V0PWksaC5kcmF3QXJyYXlzKGguVFJJQU5HTEVTLEQsUCkpLGlbMF09MiooZ1syXStFWzNdKS95LTEsaVsxXT0oZ1szXStnWzFdKS94LTEsb1swXT1FWzNdKnYveSxvWzFdPUNbM10qdi94LE4mJihTLmNvbG9yPUxbM10sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9aSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsQixOKSksaVswXT0oZ1syXStnWzBdKS95LTEsaVsxXT0yKihnWzNdK0VbMl0pL3gtMSxvWzBdPUNbMl0qdi95LG9bMV09RVsyXSp2L3gsUCYmKFMuY29sb3I9TFsyXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1pLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyxELFApKX19KCksZC51cGRhdGU9KGg9WzEsMSwtMSwtMSwxLC0xXSxwPVsxLC0xLDEsMSwtMSwtMV0sZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQudGlja3Mscj10LmJvdW5kcyxuPW5ldyBGbG9hdDMyQXJyYXkoMTgqKGVbMF0ubGVuZ3RoK2VbMV0ubGVuZ3RoKSksaT0odGhpcy5wbG90Lnplcm9MaW5lRW5hYmxlLDApLGE9W1tdLFtdXSxvPTA7bzwyOysrbylmb3IodmFyIHM9YVtvXSxsPWVbb10sYz1yW29dLHU9cltvKzJdLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIGQ9KGxbZl0ueC1jKS8odS1jKTtzLnB1c2goZCk7Zm9yKHZhciBnPTA7Zzw2OysrZyluW2krK109ZCxuW2krK109aFtnXSxuW2krK109cFtnXX10aGlzLnRpY2tzPWEsdGhpcy52Ym8udXBkYXRlKG4pfSksZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRpY2tTaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI4MCwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjI4MiwiZ2wtYnVmZmVyIjoyMzcsImdsLXNoYWRlciI6Mjk3fV0sMjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFstMSwtMSwtMSwxLDEsLTEsMSwxXSkscz1pKGUsYS5saW5lVmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3TGluZT0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLnBsb3QsYz10aGlzLnNoYWRlcix1PW8uZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLGMudW5pZm9ybXMuc3RhcnQ9cyxjLnVuaWZvcm1zLmVuZD1sLGMudW5pZm9ybXMud2lkdGg9aSpvLnBpeGVsUmF0aW8sYy51bmlmb3Jtcy5jb2xvcj1hLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI4MCwiZ2wtYnVmZmVyIjoyMzcsImdsLXNoYWRlciI6Mjk3fV0sMjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IueHl6ICogY29sb3IudywgY29sb3Iudyk7XG59XG4iXSk7ZS5leHBvcnRzPXtsaW5lVmVydDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcblxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcbnVuaWZvcm0gdmVjMiBzdGFydCwgZW5kO1xudW5pZm9ybSBmbG9hdCB3aWR0aDtcblxudmVjMiBwZXJwKHZlYzIgdikge1xuICByZXR1cm4gdmVjMih2LnksIC12LngpO1xufVxuXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgZGVsdGEgPSBub3JtYWxpemUocGVycChzdGFydCAtIGVuZCkpO1xuICB2ZWMyIG9mZnNldCA9IG1peChzdGFydCwgZW5kLCAwLjUgKiAoY29vcmQueSsxLjApKTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihvZmZzZXQgKyAwLjUgKiB3aWR0aCAqIGRlbHRhICogY29vcmQueCksIDAsIDEpO1xufVxuIl0pLGxpbmVGcmFnOmksdGV4dFZlcnQ6bihbIiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyB0ZXh0Q29vcmRpbmF0ZTtcblxudW5pZm9ybSB2ZWMyIGRhdGFTY2FsZSwgZGF0YVNoaWZ0LCBkYXRhQXhpcywgc2NyZWVuT2Zmc2V0LCB0ZXh0U2NhbGU7XG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRhdGFPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUuejtcbiAgdmVjMiBnbHlwaE9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS54eTtcbiAgbWF0MiBnbHlwaE1hdHJpeCA9IG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSwgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xuICB2ZWMyIHNjcmVlbkNvb3JkaW5hdGUgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhT2Zmc2V0ICsgZGF0YVNoaWZ0KSArXG4gICAgZ2x5cGhNYXRyaXggKiBnbHlwaE9mZnNldCAqIHRleHRTY2FsZSArIHNjcmVlbk9mZnNldDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbkNvb3JkaW5hdGUsIDAsIDEpO1xufVxuIl0pLHRleHRGcmFnOmksZ3JpZFZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb3MgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhQ29vcmQueCArIGRhdGFTaGlmdCk7XG4gIHBvcyArPSAxMC4wICogZGF0YUNvb3JkLnkgKiB2ZWMyKGRhdGFBeGlzLnksIC1kYXRhQXhpcy54KSArIGRhdGFDb29yZC56ICogbGluZVdpZHRoO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLCAwLCAxKTtcbn1cbiJdKSxncmlkRnJhZzppLGJveFZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XG5cbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XG51bmlmb3JtIHZlYzIgbG8sIGhpO1xuXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4obWl4KGxvLCBoaSwgY29vcmQpKSwgMCwgMSk7XG59XG4iXSksdGlja1ZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlLCBzY3JlZW5PZmZzZXQsIHRpY2tTY2FsZTtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyArIHRpY2tTY2FsZSpkYXRhQ29vcmQueXogKyBzY3JlZW5PZmZzZXQsIDAsIDEpO1xufVxuIl0pfX0se2dsc2xpZnk6NDAxfV0sMjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxzLnRleHRWZXJ0LHMudGV4dEZyYWcpO3JldHVybiBuZXcgbCh0LHIsYSl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtc2hhZGVyIiksYT10KCJ0ZXh0LWNhY2hlIiksbz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHM9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbCh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja09mZnNldD1bW10sW11dLHRoaXMudGlja1g9W1tdLFtdXSx0aGlzLmxhYmVsT2Zmc2V0PVswLDBdLHRoaXMubGFiZWxDb3VudD1bMCwwXX12YXIgYyx1LGYsaCxwLGQsZz1sLnByb3RvdHlwZTtnLmRyYXdUaWNrcz0oYz1bMCwwXSx1PVswLDBdLGY9WzAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wbG90LHI9dGhpcy5zaGFkZXIsbj10aGlzLnRpY2tYW3RdLGk9dGhpcy50aWNrT2Zmc2V0W3RdLGE9ZS5nbCxzPWUudmlld0JveCxsPWUuZGF0YUJveCxoPWUuc2NyZWVuQm94LHA9ZS5waXhlbFJhdGlvLGQ9ZS50aWNrRW5hYmxlLGc9ZS50aWNrUGFkLHY9ZS50aWNrQ29sb3IsbT1lLnRpY2tBbmdsZSx5PWUubGFiZWxFbmFibGUseD1lLmxhYmVsUGFkLGI9ZS5sYWJlbENvbG9yLF89ZS5sYWJlbEFuZ2xlLHc9dGhpcy5sYWJlbE9mZnNldFt0XSxrPXRoaXMubGFiZWxDb3VudFt0XSxUPW8ubHQobixsW3RdKSxBPW8ubGUobixsW3QrMl0pO2NbMF09Y1sxXT0wLGNbdF09MSx1W3RdPShzWzIrdF0rc1t0XSkvKGhbMit0XS1oW3RdKS0xO3ZhciBNPTIvaFsyKygxXnQpXS1oWzFedF07dVsxXnRdPU0qc1sxXnRdLTEsZFt0XSYmKHVbMV50XS09TSpwKmdbdF0sVDxBJiZpW0FdPmlbVF0mJihyLnVuaWZvcm1zLmRhdGFBeGlzPWMsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPXZbdF0sci51bmlmb3Jtcy5hbmdsZT1tW3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW1RdLGlbQV0taVtUXSkpKSx5W3RdJiZrJiYodVsxXnRdLT1NKnAqeFt0XSxyLnVuaWZvcm1zLmRhdGFBeGlzPWYsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdF0sci51bmlmb3Jtcy5hbmdsZT1fW3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyx3LGspKSx1WzFedF09TSpzWzIrKDFedCldLTEsZFt0KzJdJiYodVsxXnRdKz1NKnAqZ1t0KzJdLFQ8QSYmaVtBXT5pW1RdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj12W3QrMl0sci51bmlmb3Jtcy5hbmdsZT1tW3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLGlbVF0saVtBXS1pW1RdKSkpLHlbdCsyXSYmayYmKHVbMV50XSs9TSpwKnhbdCsyXSxyLnVuaWZvcm1zLmRhdGFBeGlzPWYsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdCsyXSxyLnVuaWZvcm1zLmFuZ2xlPV9bdCsyXSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxrKSl9KSxnLmRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5wbG90LG49dGhpcy5zaGFkZXIsaT1yLmdsLGE9ci5zY3JlZW5Cb3gsbz1yLnRpdGxlQ2VudGVyLHM9ci50aXRsZUFuZ2xlLGw9ci50aXRsZUNvbG9yLGM9ci5waXhlbFJhdGlvO2lmKHRoaXMudGl0bGVDb3VudCl7Zm9yKHZhciB1PTA7dTwyOysrdSllW3VdPTIqKG9bdV0qYy1hW3VdKS8oYVsyK3VdLWFbdV0pLTE7bi5iaW5kKCksbi51bmlmb3Jtcy5kYXRhQXhpcz10LG4udW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsbi51bmlmb3Jtcy5hbmdsZT1zLG4udW5pZm9ybXMuY29sb3I9bCxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsdGhpcy50aXRsZU9mZnNldCx0aGlzLnRpdGxlQ291bnQpfX19KCksZy5iaW5kPShoPVswLDBdLHA9WzAsMF0sZD1bMCwwXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2hhZGVyLHI9dC5fdGlja0JvdW5kcyxuPXQuZGF0YUJveCxpPXQuc2NyZWVuQm94LGE9dC52aWV3Qm94O2UuYmluZCgpO2Zvcih2YXIgbz0wO288MjsrK28pe3ZhciBzPXJbb10sbD1yW28rMl0tcyxjPS41KihuW28rMl0rbltvXSksdT1uW28rMl0tbltvXSxmPWFbb10sZz1hW28rMl0tZix2PWlbb10sbT1pW28rMl0tdjtwW29dPTIqbC91KmcvbSxoW29dPTIqKHMtYykvdSpnL219ZFsxXT0yKnQucGl4ZWxSYXRpby8oaVszXS1pWzFdKSxkWzBdPWRbMV0qKGlbM10taVsxXSkvKGlbMl0taVswXSksZS51bmlmb3Jtcy5kYXRhU2NhbGU9cCxlLnVuaWZvcm1zLmRhdGFTaGlmdD1oLGUudW5pZm9ybXMudGV4dFNjYWxlPWQsdGhpcy52Ym8uYmluZCgpLGUuYXR0cmlidXRlcy50ZXh0Q29vcmRpbmF0ZS5wb2ludGVyKCl9KSxnLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxvLHM9W10sbD10LnRpY2tzLGM9dC5ib3VuZHM7Zm9yKG89MDtvPDI7KytvKXt2YXIgdT1bTWF0aC5mbG9vcihzLmxlbmd0aC8zKV0sZj1bLTEvMF0saD1sW29dO2ZvcihlPTA7ZTxoLmxlbmd0aDsrK2Upe3ZhciBwPWhbZV0sZD1wLngsZz1wLnRleHQsdj1wLmZvbnR8fCJzYW5zLXNlcmlmIjtpPXAuZm9udFNpemV8fDEyO2Zvcih2YXIgbT0xLyhjW28rMl0tY1tvXSkseT1jW29dLHg9Zy5zcGxpdCgiXG4iKSxiPTA7Yjx4Lmxlbmd0aDtiKyspZm9yKG49YSh2LHhbYl0pLmRhdGEscj0wO3I8bi5sZW5ndGg7cis9MilzLnB1c2gobltyXSppLC1uW3IrMV0qaS1iKmkqMS4yLChkLXkpKm0pO3UucHVzaChNYXRoLmZsb29yKHMubGVuZ3RoLzMpKSxmLnB1c2goZCl9dGhpcy50aWNrT2Zmc2V0W29dPXUsdGhpcy50aWNrWFtvXT1mfWZvcihvPTA7bzwyOysrbyl7Zm9yKHRoaXMubGFiZWxPZmZzZXRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWEodC5sYWJlbEZvbnRbb10sdC5sYWJlbHNbb10se3RleHRBbGlnbjoiY2VudGVyIn0pLmRhdGEsaT10LmxhYmVsU2l6ZVtvXSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMubGFiZWxDb3VudFtvXT1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMubGFiZWxPZmZzZXRbb119Zm9yKHRoaXMudGl0bGVPZmZzZXQ9TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWEodC50aXRsZUZvbnQsdC50aXRsZSkuZGF0YSxpPXQudGl0bGVTaXplLGU9MDtlPG4ubGVuZ3RoO2UrPTIpcy5wdXNoKG5bZV0qaSwtbltlKzFdKmksMCk7dGhpcy50aXRsZUNvdW50PU1hdGguZmxvb3Iocy5sZW5ndGgvMyktdGhpcy50aXRsZU9mZnNldCx0aGlzLnZiby51cGRhdGUocyl9LGcuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjgwLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MjgyLCJnbC1idWZmZXIiOjIzNywiZ2wtc2hhZGVyIjoyOTcsInRleHQtY2FjaGUiOjUyMH1dLDI4MjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDF9XSwyODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsW2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0pLGM9bmV3IGwoZSxyKTtyZXR1cm4gYy5ncmlkPWkoYyksYy50ZXh0PWEoYyksYy5saW5lPW8oYyksYy5ib3g9cyhjKSxjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KCJnbC1zZWxlY3Qtc3RhdGljIiksaT10KCIuL2xpYi9ncmlkIiksYT10KCIuL2xpYi90ZXh0Iiksbz10KCIuL2xpYi9saW5lIikscz10KCIuL2xpYi9ib3giKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5nbD10LHRoaXMucGlja0J1ZmZlcj1lLHRoaXMuc2NyZWVuQm94PVswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx0aGlzLnZpZXdCb3g9WzAsMCwwLDBdLHRoaXMuZGF0YUJveD1bLTEwLC0xMCwxMCwxMF0sdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGVDZW50ZXI9WzAsMF0sdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVs0LDRdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzIsMiwyLDJdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZD1udWxsLHRoaXMudGV4dD1udWxsLHRoaXMubGluZT1udWxsLHRoaXMuYm94PW51bGwsdGhpcy5vYmplY3RzPVtdLHRoaXMub3ZlcmxheXM9W10sdGhpcy5fdGlja0JvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuc3RhdGljPSExLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH12YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC54LWUueH1jLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sYy5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxjLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7aWYodGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHRoaXMuYm9yZGVyQ29sb3Ipe3Quc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIGM9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKX10LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciB1PXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcih1WzBdKnVbM10sdVsxXSp1WzNdLHVbMl0qdVszXSx1WzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGY9dGhpcy56ZXJvTGluZUVuYWJsZSxoPXRoaXMuemVyb0xpbmVDb2xvcixwPXRoaXMuemVyb0xpbmVXaWR0aDtpZihmWzBdfHxmWzFdKXtvLmJpbmQoKTtmb3IodmFyIGQ9MDtkPDI7KytkKWlmKGZbZF0mJm5bZF08PTAmJm5bZCsyXT49MCl7dmFyIGc9ZVtkXS1uW2RdKihlW2QrMl0tZVtkXSkvKG5bZCsyXS1uW2RdKTswPT09ZD9vLmRyYXdMaW5lKGcsZVsxXSxnLGVbM10scFtkXSxoW2RdKTpvLmRyYXdMaW5lKGVbMF0sZyxlWzJdLGcscFtkXSxoW2RdKX19Zm9yKGQ9MDtkPGwubGVuZ3RoOysrZClsW2RdLmRyYXcoKTt0LnZpZXdwb3J0KGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHRoaXMuZ3JpZC5kcmF3VGlja01hcmtzKCksby5iaW5kKCk7dmFyIHY9dGhpcy5ib3JkZXJMaW5lRW5hYmxlLG09dGhpcy5ib3JkZXJMaW5lV2lkdGgseT10aGlzLmJvcmRlckxpbmVDb2xvcjtmb3IodlsxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqbVsxXSppLHJbMF0sclszXSsuNSptWzNdKmksbVsxXSx5WzFdKSx2WzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqbVswXSppLHJbMV0sclsyXSsuNSptWzJdKmksclsxXSxtWzBdLHlbMF0pLHZbM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41Km1bMV0qaSxyWzJdLHJbM10rLjUqbVszXSppLG1bM10seVszXSksdlsyXSYmby5kcmF3TGluZShyWzBdLS41Km1bMF0qaSxyWzNdLHJbMl0rLjUqbVsyXSppLHJbM10sbVsyXSx5WzJdKSxzLmJpbmQoKSxkPTA7ZDwyOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO3ZhciB4PXRoaXMub3ZlcmxheXM7Zm9yKGQ9MDtkPHgubGVuZ3RoOysrZCl4W2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fSxjLmRyYXdQaWNrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbDt0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8saT10aGlzLnZpZXdCb3gsYT0wfE1hdGgucm91bmQoKHQtaVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1pWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGEsbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgZj1jW3VdLnBpY2soYSxvLGwpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9fSxjLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sYy5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGMuc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsaT0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9pLDEwLDEwL2ldKSx0aGlzLmJvcmRlckNvbG9yPSExIT09dC5ib3JkZXJDb2xvciYmKHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9dSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPXUodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj11KHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0JiYhdC50aXRsZUVuYWJsZSksdGhpcy50aXRsZUFuZ2xlPXQudGl0bGVBbmdsZXx8MCx0aGlzLnRpdGxlQ29sb3I9KHQudGl0bGVDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMubGFiZWxQYWQ9KHQubGFiZWxQYWR8fFsxNSwxNSwxNSwxNV0pLnNsaWNlKCksdGhpcy5sYWJlbEFuZ2xlPSh0LmxhYmVsQW5nbGV8fFswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSkuc2xpY2UoKSx0aGlzLmxhYmVsRW5hYmxlPSh0LmxhYmVsRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMubGFiZWxDb2xvcj11KHQubGFiZWxDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja1BhZD0odC50aWNrUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMudGlja0FuZ2xlPSh0LnRpY2tBbmdsZXx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja0VuYWJsZT0odC50aWNrRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMudGlja0NvbG9yPXUodC50aWNrQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLmJvcmRlckxpbmVFbmFibGU9KHQuYm9yZGVyTGluZUVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVXaWR0aD0odC5ib3JkZXJMaW5lV2lkdGh8fFsyLDIsMiwyXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVDb2xvcj11KHQuYm9yZGVyTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSk7dmFyIGE9dC50aWNrc3x8W1tdLFtdXSxvPXRoaXMuX3RpY2tCb3VuZHM7b1swXT1vWzFdPTEvMCxvWzJdPW9bM109LTEvMDtmb3IodmFyIHM9MDtzPDI7KytzKXt2YXIgbD1hW3NdLnNsaWNlKDApOzAhPT1sLmxlbmd0aCYmKGwuc29ydChmKSxvW3NdPU1hdGgubWluKG9bc10sbFswXS54KSxvW3MrMl09TWF0aC5tYXgob1tzKzJdLGxbbC5sZW5ndGgtMV0ueCkpfXRoaXMuZ3JpZC51cGRhdGUoe2JvdW5kczpvLHRpY2tzOmF9KSx0aGlzLnRleHQudXBkYXRlKHtib3VuZHM6byx0aWNrczphLGxhYmVsczp0LmxhYmVsc3x8WyJ4IiwieSJdLGxhYmVsU2l6ZTp0LmxhYmVsU2l6ZXx8WzEyLDEyXSxsYWJlbEZvbnQ6dC5sYWJlbEZvbnR8fFsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aXRsZTp0LnRpdGxlfHwiIix0aXRsZVNpemU6dC50aXRsZVNpemV8fDE4LHRpdGxlRm9udDp0LnRpdGxlRm9udHx8InNhbnMtc2VyaWYifSksdGhpcy5zdGF0aWM9ISF0LnN0YXRpYyx0aGlzLnNldERpcnR5KCl9LGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuYm94LmRpc3Bvc2UoKSx0aGlzLmdyaWQuZGlzcG9zZSgpLHRoaXMudGV4dC5kaXNwb3NlKCksdGhpcy5saW5lLmRpc3Bvc2UoKTtmb3IodmFyIHQ9dGhpcy5vYmplY3RzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub2JqZWN0c1t0XS5kaXNwb3NlKCk7dGhpcy5vYmplY3RzLmxlbmd0aD0wO2Zvcih0PXRoaXMub3ZlcmxheXMubGVuZ3RoLTE7dD49MDstLXQpdGhpcy5vdmVybGF5c1t0XS5kaXNwb3NlKCk7dGhpcy5vdmVybGF5cy5sZW5ndGg9MCx0aGlzLmdsPW51bGx9LGMuYWRkT2JqZWN0PWZ1bmN0aW9uKHQpe3RoaXMub2JqZWN0cy5pbmRleE9mKHQpPDAmJih0aGlzLm9iamVjdHMucHVzaCh0KSx0aGlzLnNldERpcnR5KCkpfSxjLnJlbW92ZU9iamVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5vYmplY3RzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT09dCl7ZS5zcGxpY2UociwxKSx0aGlzLnNldERpcnR5KCk7YnJlYWt9fSxjLmFkZE92ZXJsYXk9ZnVuY3Rpb24odCl7dGhpcy5vdmVybGF5cy5pbmRleE9mKHQpPDAmJih0aGlzLm92ZXJsYXlzLnB1c2godCksdGhpcy5zZXRPdmVybGF5RGlydHkoKSl9LGMucmVtb3ZlT3ZlcmxheT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5vdmVybGF5cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXRPdmVybGF5RGlydHkoKTticmVha319fSx7Ii4vbGliL2JveCI6Mjc3LCIuL2xpYi9ncmlkIjoyNzgsIi4vbGliL2xpbmUiOjI3OSwiLi9saWIvdGV4dCI6MjgxLCJnbC1zZWxlY3Qtc3RhdGljIjoyOTZ9XSwyODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dD10fHxkb2N1bWVudC5ib2R5LGU9ZXx8e307dmFyIHI9Wy4wMSwxLzBdOyJkaXN0YW5jZUxpbWl0cyJpbiBlJiYoclswXT1lLmRpc3RhbmNlTGltaXRzWzBdLHJbMV09ZS5kaXN0YW5jZUxpbWl0c1sxXSk7Inpvb21NaW4iaW4gZSYmKHJbMF09ZS56b29tTWluKTsiem9vbU1heCJpbiBlJiYoclsxXT1lLnpvb21NYXgpO3ZhciBjPWkoe2NlbnRlcjplLmNlbnRlcnx8WzAsMCwwXSx1cDplLnVwfHxbMCwxLDBdLGV5ZTplLmV5ZXx8WzAsMCwxMF0sbW9kZTplLm1vZGV8fCJvcmJpdCIsZGlzdGFuY2VMaW1pdHM6cn0pLHU9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLGY9MCxoPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxkPXtrZXlCaW5kaW5nTW9kZToicm90YXRlIixlbmFibGVXaGVlbDohMCx2aWV3OmMsZWxlbWVudDp0LGRlbGF5OmUuZGVsYXl8fDE2LHJvdGF0ZVNwZWVkOmUucm90YXRlU3BlZWR8fDEsem9vbVNwZWVkOmUuem9vbVNwZWVkfHwxLHRyYW5zbGF0ZVNwZWVkOmUudHJhbnNsYXRlU3BlZWR8fDEsZmxpcFg6ISFlLmZsaXBYLGZsaXBZOiEhZS5mbGlwWSxtb2RlczpjLm1vZGVzLF9vcnRobzplLl9vcnRob3x8ZS5wcm9qZWN0aW9uJiYib3J0aG9ncmFwaGljIj09PWUucHJvamVjdGlvbi50eXBlfHwhMSx0aWNrOmZ1bmN0aW9uKCl7dmFyIGU9bigpLHI9dGhpcy5kZWxheSxpPWUtMipyO2MuaWRsZShlLXIpLGMucmVjYWxjTWF0cml4KGkpLGMuZmx1c2goZS0oMTAwKzIqcikpO2Zvcih2YXIgYT0hMCxvPWMuY29tcHV0ZWRNYXRyaXgscz0wO3M8MTY7KytzKWE9YSYmdVtzXT09PW9bc10sdVtzXT1vW3NdO3ZhciBsPXQuY2xpZW50V2lkdGg9PT1oJiZ0LmNsaWVudEhlaWdodD09PXA7cmV0dXJuIGg9dC5jbGllbnRXaWR0aCxwPXQuY2xpZW50SGVpZ2h0LGE/IWw6KGY9TWF0aC5leHAoYy5jb21wdXRlZFJhZGl1c1swXSksITApfSxsb29rQXQ6ZnVuY3Rpb24odCxlLHIpe2MubG9va0F0KGMubGFzdFQoKSx0LGUscil9LHJvdGF0ZTpmdW5jdGlvbih0LGUscil7Yy5yb3RhdGUoYy5sYXN0VCgpLHQsZSxyKX0scGFuOmZ1bmN0aW9uKHQsZSxyKXtjLnBhbihjLmxhc3RUKCksdCxlLHIpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlLHIpe2MudHJhbnNsYXRlKGMubGFzdFQoKSx0LGUscil9fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZCx7bWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZE1hdHJpeH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldE1hdHJpeChjLmxhc3RUKCksdCksYy5jb21wdXRlZE1hdHJpeH0sZW51bWVyYWJsZTohMH0sbW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0TW9kZSgpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9Yy5jb21wdXRlZFVwLnNsaWNlKCkscj1jLmNvbXB1dGVkRXllLnNsaWNlKCksaT1jLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCk7aWYoYy5zZXRNb2RlKHQpLCJ0dXJudGFibGUiPT09dCl7dmFyIGE9bigpO2MuX2FjdGl2ZS5sb29rQXQoYSxyLGksZSksYy5fYWN0aXZlLmxvb2tBdChhKzUwMCxyLGksWzAsMCwxXSksYy5fYWN0aXZlLmZsdXNoKGEpfXJldHVybiBjLmdldE1vZGUoKX0sZW51bWVyYWJsZTohMH0sY2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZENlbnRlcn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCx0KSxjLmNvbXB1dGVkQ2VudGVyfSxlbnVtZXJhYmxlOiEwfSxleWU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkRXllfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMubG9va0F0KGMubGFzdFQoKSx0KSxjLmNvbXB1dGVkRXllfSxlbnVtZXJhYmxlOiEwfSx1cDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRVcH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCxudWxsLHQpLGMuY29tcHV0ZWRVcH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBmfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0RGlzdGFuY2UoYy5sYXN0VCgpLHQpLHR9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlTGltaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXREaXN0YW5jZUxpbWl0cyhyKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlTGltaXRzKHQpLHR9LGVudW1lcmFibGU6ITB9fSksdC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMX0pLGQuX2xhc3RYPS0xLGQuX2xhc3RZPS0xLGQuX2xhc3RNb2RzPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsaSxhKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9InJvdGF0ZSI9PT1vLGw9InBhbiI9PT1vLHU9Inpvb20iPT09byxoPSEhYS5jb250cm9sLHA9ISFhLmFsdCxnPSEhYS5zaGlmdCx2PSEhKDEmZSksbT0hISgyJmUpLHk9ISEoNCZlKSx4PTEvdC5jbGllbnRIZWlnaHQsYj14KihyLWQuX2xhc3RYKSxfPXgqKGktZC5fbGFzdFkpLHc9ZC5mbGlwWD8xOi0xLGs9ZC5mbGlwWT8xOi0xLFQ9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLEE9bigpO2lmKC0xIT09ZC5fbGFzdFgmJi0xIT09ZC5fbGFzdFkmJigocyYmdiYmIWgmJiFwJiYhZ3x8diYmIWgmJiFwJiZnKSYmYy5yb3RhdGUoQSx3KlQqYiwtaypUKl8sMCksKGwmJnYmJiFoJiYhcCYmIWd8fG18fHYmJmgmJiFwJiYhZykmJmMucGFuKEEsLWQudHJhbnNsYXRlU3BlZWQqYipmLGQudHJhbnNsYXRlU3BlZWQqXypmLDApLHUmJnYmJiFoJiYhcCYmIWd8fHl8fHYmJiFoJiZwJiYhZykpe3ZhciBNPS1kLnpvb21TcGVlZCpfL3dpbmRvdy5pbm5lckhlaWdodCooQS1jLmxhc3RUKCkpKjEwMDtjLnBhbihBLDAsMCxmKihNYXRoLmV4cChNKS0xKSl9cmV0dXJuIGQuX2xhc3RYPXIsZC5fbGFzdFk9aSxkLl9sYXN0TW9kcz1hLCEwfX1kLm1vdXNlTGlzdGVuZXI9YSh0LGUpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24ocil7dmFyIG49cyhyLmNoYW5nZWRUb3VjaGVzWzBdLHQpO2UoMCxuWzBdLG5bMV0sZC5fbGFzdE1vZHMpLGUoMSxuWzBdLG5bMV0sZC5fbGFzdE1vZHMpLHIucHJldmVudERlZmF1bHQoKX0sISFsJiZ7cGFzc2l2ZTohMX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbihyKXt2YXIgbj1zKHIuY2hhbmdlZFRvdWNoZXNbMF0sdCk7ZSgxLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksci5wcmV2ZW50RGVmYXVsdCgpfSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsZnVuY3Rpb24odCl7ZSgwLGQuX2xhc3RYLGQuX2xhc3RZLGQuX2xhc3RNb2RzKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhbCYme3Bhc3NpdmU6ITF9KSxkLndoZWVsTGlzdGVuZXI9byh0LGZ1bmN0aW9uKHQsZSl7aWYoITEhPT1kLmtleUJpbmRpbmdNb2RlJiZkLmVuYWJsZVdoZWVsKXt2YXIgcj1kLmZsaXBYPzE6LTEsaT1kLmZsaXBZPzE6LTEsYT1uKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpYy5yb3RhdGUoYSwwLDAsLXQqcipNYXRoLlBJKmQucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2UgaWYoIWQuX29ydGhvKXt2YXIgbz0tZC56b29tU3BlZWQqaSplL3dpbmRvdy5pbm5lckhlaWdodCooYS1jLmxhc3RUKCkpLzIwO2MucGFuKGEsMCwwLGYqKE1hdGguZXhwKG8pLTEpKX19fSwhMCl9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxkfTt2YXIgbj10KCJyaWdodC1ub3ciKSxpPXQoIjNkLXZpZXciKSxhPXQoIm1vdXNlLWNoYW5nZSIpLG89dCgibW91c2Utd2hlZWwiKSxzPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGw9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIil9LHsiM2QtdmlldyI6NDcsImhhcy1wYXNzaXZlLWV2ZW50cyI6NDAzLCJtb3VzZS1jaGFuZ2UiOjQyNywibW91c2UtZXZlbnQtb2Zmc2V0Ijo0MjgsIm1vdXNlLXdoZWVsIjo0MzAsInJpZ2h0LW5vdyI6NDg4fV0sMjg1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdXY7XG52b2lkIG1haW4oKSB7XG4gIHV2ID0gcG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMCwgMSk7XG59Il0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjI5NyxnbHNsaWZ5OjQwMX1dLDI4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbWVyYS5qcyIpLGk9dCgiZ2wtYXhlczNkIiksYT10KCJnbC1heGVzM2QvcHJvcGVydGllcyIpLG89dCgiZ2wtc3Bpa2VzM2QiKSxzPXQoImdsLXNlbGVjdC1zdGF0aWMiKSxsPXQoImdsLWZibyIpLGM9dCgiYS1iaWctdHJpYW5nbGUiKSx1PXQoIm1vdXNlLWNoYW5nZSIpLGY9dCgibW91c2Utd2hlZWwiKSxoPXQoImdsLW1hdDQvcGVyc3BlY3RpdmUiKSxwPXQoImdsLW1hdDQvb3J0aG8iKSxkPXQoIi4vbGliL3NoYWRlciIpLGc9dCgiaXMtbW9iaWxlIikoe3RhYmxldDohMH0pO2Z1bmN0aW9uIHYoKXt0aGlzLm1vdXNlPVstMSwtMV0sdGhpcy5zY3JlZW49bnVsbCx0aGlzLmRpc3RhbmNlPTEvMCx0aGlzLmluZGV4PW51bGwsdGhpcy5kYXRhQ29vcmRpbmF0ZT1udWxsLHRoaXMuZGF0YVBvc2l0aW9uPW51bGwsdGhpcy5vYmplY3Q9bnVsbCx0aGlzLmRhdGE9bnVsbH1mdW5jdGlvbiBtKHQpe3ZhciBlPU1hdGgucm91bmQoTWF0aC5sb2coTWF0aC5hYnModCkpL01hdGgubG9nKDEwKSk7aWYoZTwwKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLC1lKSk7cmV0dXJuIE1hdGguY2VpbCh0KnIpL3J9aWYoZT4wKXtyPU1hdGgucm91bmQoTWF0aC5wb3coMTAsZSkpO3JldHVybiBNYXRoLmNlaWwodC9yKSpyfXJldHVybiBNYXRoLmNlaWwodCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4iYm9vbGVhbiIhPXR5cGVvZiB0fHx0fWUuZXhwb3J0cz17Y3JlYXRlU2NlbmU6ZnVuY3Rpb24odCl7KHQ9dHx8e30pLmNhbWVyYT10LmNhbWVyYXx8e307dmFyIGU9dC5jYW52YXM7aWYoIWUpaWYoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0LmNvbnRhaW5lcil7dmFyIHI9dC5jb250YWluZXI7ci5hcHBlbmRDaGlsZChlKX1lbHNlIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7dmFyIHg9dC5nbDt4fHwoeD1mdW5jdGlvbih0LGUpe3ZhciByPW51bGw7dHJ5eyhyPXQuZ2V0Q29udGV4dCgid2ViZ2wiLGUpKXx8KHI9dC5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLGUpKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH1yZXR1cm4gcn0oZSx0LmdsT3B0aW9uc3x8e3ByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITAscHJlc2VydmVEcmF3aW5nQnVmZmVyOmd9KSk7aWYoIXgpdGhyb3cgbmV3IEVycm9yKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkIik7dmFyIGI9dC5ib3VuZHN8fFtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLF89bmV3IHYsdz1sKHgsW3guZHJhd2luZ0J1ZmZlcldpZHRoLHguZHJhd2luZ0J1ZmZlckhlaWdodF0se3ByZWZlckZsb2F0OiFnfSksaz1kKHgpLFQ9dC5jYW1lcmFPYmplY3QmJiEwPT09dC5jYW1lcmFPYmplY3QuX29ydGhvfHx0LmNhbWVyYS5wcm9qZWN0aW9uJiYib3J0aG9ncmFwaGljIj09PXQuY2FtZXJhLnByb2plY3Rpb24udHlwZXx8ITEsQT17ZXllOnQuY2FtZXJhLmV5ZXx8WzIsMCwwXSxjZW50ZXI6dC5jYW1lcmEuY2VudGVyfHxbMCwwLDBdLHVwOnQuY2FtZXJhLnVwfHxbMCwxLDBdLHpvb21NaW46dC5jYW1lcmEuem9vbU1heHx8LjEsem9vbU1heDp0LmNhbWVyYS56b29tTWlufHwxMDAsbW9kZTp0LmNhbWVyYS5tb2RlfHwidHVybnRhYmxlIixfb3J0aG86VH0sTT10LmF4ZXN8fHt9LFM9aSh4LE0pO1MuZW5hYmxlPSFNLmRpc2FibGU7dmFyIEU9dC5zcGlrZXN8fHt9LEM9byh4LEUpLEw9W10sej1bXSxPPVtdLEk9W10sRD0hMCxQPSEwLFI9bmV3IEFycmF5KDE2KSxGPW5ldyBBcnJheSgxNiksQj17dmlldzpudWxsLHByb2plY3Rpb246Uixtb2RlbDpGLF9vcnRobzohMX0sUD0hMCxOPVt4LmRyYXdpbmdCdWZmZXJXaWR0aCx4LmRyYXdpbmdCdWZmZXJIZWlnaHRdLGo9dC5jYW1lcmFPYmplY3R8fG4oZSxBKSxWPXtnbDp4LGNvbnRleHRMb3N0OiExLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfHwxLGNhbnZhczplLHNlbGVjdGlvbjpfLGNhbWVyYTpqLGF4ZXM6UyxheGVzUGl4ZWxzOm51bGwsc3Bpa2VzOkMsYm91bmRzOmIsb2JqZWN0czpMLHNoYXBlOk4sYXNwZWN0OnQuYXNwZWN0UmF0aW98fFsxLDEsMV0scGlja1JhZGl1czp0LnBpY2tSYWRpdXN8fDEwLHpOZWFyOnQuek5lYXJ8fC4wMSx6RmFyOnQuekZhcnx8MWUzLGZvdnk6dC5mb3Z5fHxNYXRoLlBJLzQsY2xlYXJDb2xvcjp0LmNsZWFyQ29sb3J8fFswLDAsMCwwXSxhdXRvUmVzaXplOnkodC5hdXRvUmVzaXplKSxhdXRvQm91bmRzOnkodC5hdXRvQm91bmRzKSxhdXRvU2NhbGU6ISF0LmF1dG9TY2FsZSxhdXRvQ2VudGVyOnkodC5hdXRvQ2VudGVyKSxjbGlwVG9Cb3VuZHM6eSh0LmNsaXBUb0JvdW5kcyksc25hcFRvRGF0YTohIXQuc25hcFRvRGF0YSxvbnNlbGVjdDp0Lm9uc2VsZWN0fHxudWxsLG9ucmVuZGVyOnQub25yZW5kZXJ8fG51bGwsb25jbGljazp0Lm9uY2xpY2t8fG51bGwsY2FtZXJhUGFyYW1zOkIsb25jb250ZXh0bG9zczpudWxsLG1vdXNlTGlzdGVuZXI6bnVsbCxfc3RvcHBlZDohMX0sVT1beC5kcmF3aW5nQnVmZmVyV2lkdGgvVi5waXhlbFJhdGlvfDAseC5kcmF3aW5nQnVmZmVySGVpZ2h0L1YucGl4ZWxSYXRpb3wwXTtmdW5jdGlvbiBxKCl7aWYoIVYuX3N0b3BwZWQmJlYuYXV0b1Jlc2l6ZSl7dmFyIHQ9ZS5wYXJlbnROb2RlLHI9MSxuPTE7dCYmdCE9PWRvY3VtZW50LmJvZHk/KHI9dC5jbGllbnRXaWR0aCxuPXQuY2xpZW50SGVpZ2h0KToocj13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodCk7dmFyIGk9MHxNYXRoLmNlaWwocipWLnBpeGVsUmF0aW8pLGE9MHxNYXRoLmNlaWwobipWLnBpeGVsUmF0aW8pO2lmKGkhPT1lLndpZHRofHxhIT09ZS5oZWlnaHQpe2Uud2lkdGg9aSxlLmhlaWdodD1hO3ZhciBvPWUuc3R5bGU7by5wb3NpdGlvbj1vLnBvc2l0aW9ufHwiYWJzb2x1dGUiLG8ubGVmdD0iMHB4IixvLnRvcD0iMHB4IixvLndpZHRoPXIrInB4IixvLmhlaWdodD1uKyJweCIsRD0hMH19fVYuYXV0b1Jlc2l6ZSYmcSgpO2Z1bmN0aW9uIEgoKXtmb3IodmFyIHQ9TC5sZW5ndGgsZT1JLmxlbmd0aCxyPTA7cjxlOysrcilPW3JdPTA7dDpmb3IodmFyIHI9MDtyPHQ7KytyKXt2YXIgbj1MW3JdLGk9bi5waWNrU2xvdHM7aWYoaSl7Zm9yKHZhciBhPTA7YTxlOysrYSlpZihPW2FdK2k8MjU1KXt6W3JdPWEsbi5zZXRQaWNrQmFzZShPW2FdKzEpLE9bYV0rPWk7Y29udGludWUgdH12YXIgbz1zKHgsTik7eltyXT1lLEkucHVzaChvKSxPLnB1c2goaSksbi5zZXRQaWNrQmFzZSgxKSxlKz0xfWVsc2UgeltyXT0tMX1mb3IoO2U+MCYmMD09PU9bZS0xXTspTy5wb3AoKSxJLnBvcCgpLmRpc3Bvc2UoKX1mdW5jdGlvbiBHKCl7aWYoVi5jb250ZXh0TG9zdClyZXR1cm4hMDt4LmlzQ29udGV4dExvc3QoKSYmKFYuY29udGV4dExvc3Q9ITAsVi5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsVi5zZWxlY3Rpb24ub2JqZWN0PW51bGwsVi5vbmNvbnRleHRsb3NzJiZWLm9uY29udGV4dGxvc3MoKSl9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIscSksVi51cGRhdGU9ZnVuY3Rpb24odCl7Vi5fc3RvcHBlZHx8KHQ9dHx8e30sRD0hMCxQPSEwKX0sVi5hZGQ9ZnVuY3Rpb24odCl7Vi5fc3RvcHBlZHx8KHQuYXhlcz1TLEwucHVzaCh0KSx6LnB1c2goLTEpLEQ9ITAsUD0hMCxIKCkpfSxWLnJlbW92ZT1mdW5jdGlvbih0KXtpZighVi5fc3RvcHBlZCl7dmFyIGU9TC5pbmRleE9mKHQpO2U8MHx8KEwuc3BsaWNlKGUsMSksei5wb3AoKSxEPSEwLFA9ITAsSCgpKX19LFYuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCFWLl9zdG9wcGVkJiYoVi5fc3RvcHBlZD0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixxKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEcpLFYubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLCFWLmNvbnRleHRMb3N0KSl7Uy5kaXNwb3NlKCksQy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxMLmxlbmd0aDsrK3QpTFt0XS5kaXNwb3NlKCk7dy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxJLmxlbmd0aDsrK3QpSVt0XS5kaXNwb3NlKCk7ay5kaXNwb3NlKCkseD1udWxsLFM9bnVsbCxDPW51bGwsTD1bXX19LFYud2hlZWxMaXN0ZW5lcj1mKGUsZnVuY3Rpb24odCxlKXtpZighMSE9PWoua2V5QmluZGluZ01vZGUmJmouZW5hYmxlV2hlZWwmJmouX29ydGhvKXt2YXIgcj10PmU/MS4xOjEvMS4xO1YuYXNwZWN0WzBdKj1yLFYuYXNwZWN0WzFdKj1yLFYuYXNwZWN0WzJdKj1yLFYucmVkcmF3KCl9fSwhMCksVi5fbW91c2VSb3RhdGluZz0hMSxWLl9wcmV2QnV0dG9ucz0wLFYuZW5hYmxlTW91c2VMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtWLm1vdXNlTGlzdGVuZXI9dShlLGZ1bmN0aW9uKHQsZSxyKXtpZighVi5fc3RvcHBlZCl7dmFyIG49SS5sZW5ndGgsaT1MLmxlbmd0aCxhPV8ub2JqZWN0O18uZGlzdGFuY2U9MS8wLF8ubW91c2VbMF09ZSxfLm1vdXNlWzFdPXIsXy5vYmplY3Q9bnVsbCxfLnNjcmVlbj1udWxsLF8uZGF0YUNvb3JkaW5hdGU9Xy5kYXRhUG9zaXRpb249bnVsbDt2YXIgbz0hMTtpZih0JiZWLl9wcmV2QnV0dG9ucylWLl9tb3VzZVJvdGF0aW5nPSEwO2Vsc2V7Vi5fbW91c2VSb3RhdGluZyYmKFA9ITApLFYuX21vdXNlUm90YXRpbmc9ITE7Zm9yKHZhciBzPTA7czxuOysrcyl7dmFyIGw9SVtzXS5xdWVyeShlLFVbMV0tci0xLFYucGlja1JhZGl1cyk7aWYobCl7aWYobC5kaXN0YW5jZT5fLmRpc3RhbmNlKWNvbnRpbnVlO2Zvcih2YXIgYz0wO2M8aTsrK2Mpe3ZhciB1PUxbY107aWYoeltjXT09PXMpe3ZhciBmPXUucGljayhsKTtmJiYoXy5idXR0b25zPXQsXy5zY3JlZW49bC5jb29yZCxfLmRpc3RhbmNlPWwuZGlzdGFuY2UsXy5vYmplY3Q9dSxfLmluZGV4PWYuZGlzdGFuY2UsXy5kYXRhUG9zaXRpb249Zi5wb3NpdGlvbixfLmRhdGFDb29yZGluYXRlPWYuZGF0YUNvb3JkaW5hdGUsXy5kYXRhPWYsbz0hMCl9fX19fWEmJmEhPT1fLm9iamVjdCYmKGEuaGlnaGxpZ2h0JiZhLmhpZ2hsaWdodChudWxsKSxEPSEwKSxfLm9iamVjdCYmKF8ub2JqZWN0LmhpZ2hsaWdodCYmXy5vYmplY3QuaGlnaGxpZ2h0KF8uZGF0YSksRD0hMCksKG89b3x8Xy5vYmplY3QhPT1hKSYmVi5vbnNlbGVjdCYmVi5vbnNlbGVjdChfKSwxJnQmJiEoMSZWLl9wcmV2QnV0dG9ucykmJlYub25jbGljayYmVi5vbmNsaWNrKF8pLFYuX3ByZXZCdXR0b25zPXR9fSl9LGUuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsRyk7dmFyIFk9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sVz1bWVswXS5zbGljZSgpLFlbMV0uc2xpY2UoKV07ZnVuY3Rpb24gWCgpe2lmKCFHKCkpe3EoKTt2YXIgdD1WLmNhbWVyYS50aWNrKCk7Qi52aWV3PVYuY2FtZXJhLm1hdHJpeCxEPUR8fHQsUD1QfHx0LFMucGl4ZWxSYXRpbz1WLnBpeGVsUmF0aW8sQy5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbzt2YXIgZT1MLmxlbmd0aCxyPVlbMF0sbj1ZWzFdO3JbMF09clsxXT1yWzJdPTEvMCxuWzBdPW5bMV09blsyXT0tMS8wO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbyxvLmF4ZXM9Vi5heGVzLEQ9RHx8ISFvLmRpcnR5LFA9UHx8ISFvLmRpcnR5O3ZhciBzPW8uYm91bmRzO2lmKHMpZm9yKHZhciBsPXNbMF0sdT1zWzFdLGY9MDtmPDM7KytmKXJbZl09TWF0aC5taW4ocltmXSxsW2ZdKSxuW2ZdPU1hdGgubWF4KG5bZl0sdVtmXSl9dmFyIGQ9Vi5ib3VuZHM7aWYoVi5hdXRvQm91bmRzKWZvcih2YXIgZj0wO2Y8MzsrK2Ype2lmKG5bZl08cltmXSlyW2ZdPS0xLG5bZl09MTtlbHNle3JbZl09PT1uW2ZdJiYocltmXS09MSxuW2ZdKz0xKTt2YXIgZz0uMDUqKG5bZl0tcltmXSk7cltmXT1yW2ZdLWcsbltmXT1uW2ZdK2d9ZFswXVtmXT1yW2ZdLGRbMV1bZl09bltmXX1mb3IodmFyIHY9ITEsZj0wO2Y8MzsrK2Ypdj12fHxXWzBdW2ZdIT09ZFswXVtmXXx8V1sxXVtmXSE9PWRbMV1bZl0sV1swXVtmXT1kWzBdW2ZdLFdbMV1bZl09ZFsxXVtmXTtpZihQPVB8fHYsRD1EfHx2KXtpZih2KXtmb3IodmFyIHk9WzAsMCwwXSxpPTA7aTwzOysraSl5W2ldPW0oKGRbMV1baV0tZFswXVtpXSkvMTApO1MuYXV0b1RpY2tzP1MudXBkYXRlKHtib3VuZHM6ZCx0aWNrU3BhY2luZzp5fSk6Uy51cGRhdGUoe2JvdW5kczpkfSl9dmFyIGI9eC5kcmF3aW5nQnVmZmVyV2lkdGgsQT14LmRyYXdpbmdCdWZmZXJIZWlnaHQ7TlswXT1iLE5bMV09QSxVWzBdPTB8TWF0aC5tYXgoYi9WLnBpeGVsUmF0aW8sMSksVVsxXT0wfE1hdGgubWF4KEEvVi5waXhlbFJhdGlvLDEpLFQ/KHAoUiwtYi9BLGIvQSwtMSwxLFYuek5lYXIsVi56RmFyKSxCLl9vcnRobz0hMCk6KGgoUixWLmZvdnksYi9BLFYuek5lYXIsVi56RmFyKSxCLl9vcnRobz0hMSk7Zm9yKHZhciBpPTA7aTwxNjsrK2kpRltpXT0wO0ZbMTVdPTE7Zm9yKHZhciBNPTAsaT0wO2k8MzsrK2kpTT1NYXRoLm1heChNLGRbMV1baV0tZFswXVtpXSk7Zm9yKHZhciBpPTA7aTwzOysraSlWLmF1dG9TY2FsZT9GWzUqaV09Vi5hc3BlY3RbaV0vKGRbMV1baV0tZFswXVtpXSk6Rls1KmldPTEvTSxWLmF1dG9DZW50ZXImJihGWzEyK2ldPS41Ki1GWzUqaV0qKGRbMF1baV0rZFsxXVtpXSkpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5heGVzQm91bmRzPWQsVi5jbGlwVG9Cb3VuZHMmJihvLmNsaXBCb3VuZHM9ZCl9Xy5vYmplY3QmJihWLnNuYXBUb0RhdGE/Qy5wb3NpdGlvbj1fLmRhdGFDb29yZGluYXRlOkMucG9zaXRpb249Xy5kYXRhUG9zaXRpb24sQy5ib3VuZHM9ZCksUCYmKFA9ITEsZnVuY3Rpb24oKXtpZihHKCkpcmV0dXJuO3guY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx4LmRlcHRoTWFzayghMCkseC5kaXNhYmxlKHguQkxFTkQpLHguZW5hYmxlKHguREVQVEhfVEVTVCk7Zm9yKHZhciB0PUwubGVuZ3RoLGU9SS5sZW5ndGgscj0wO3I8ZTsrK3Ipe3ZhciBuPUlbcl07bi5zaGFwZT1VLG4uYmVnaW4oKTtmb3IodmFyIGk9MDtpPHQ7KytpKWlmKHpbaV09PT1yKXt2YXIgYT1MW2ldO2EuZHJhd1BpY2smJihhLnBpeGVsUmF0aW89MSxhLmRyYXdQaWNrKEIpKX1uLmVuZCgpfX0oKSksVi5heGVzUGl4ZWxzPWEoVi5heGVzLEIsYixBKSxWLm9ucmVuZGVyJiZWLm9ucmVuZGVyKCkseC5iaW5kRnJhbWVidWZmZXIoeC5GUkFNRUJVRkZFUixudWxsKSx4LnZpZXdwb3J0KDAsMCxiLEEpO3ZhciBFPVYuY2xlYXJDb2xvcjt4LmNsZWFyQ29sb3IoRVswXSxFWzFdLEVbMl0sRVszXSkseC5jbGVhcih4LkNPTE9SX0JVRkZFUl9CSVR8eC5ERVBUSF9CVUZGRVJfQklUKSx4LmRlcHRoTWFzayghMCkseC5jb2xvck1hc2soITAsITAsITAsITApLHguZW5hYmxlKHguREVQVEhfVEVTVCkseC5kZXB0aEZ1bmMoeC5MRVFVQUwpLHguZGlzYWJsZSh4LkJMRU5EKSx4LmRpc2FibGUoeC5DVUxMX0ZBQ0UpO3ZhciBPPSExO1MuZW5hYmxlJiYoTz1PfHxTLmlzVHJhbnNwYXJlbnQoKSxTLmRyYXcoQikpLEMuYXhlcz1TLF8ub2JqZWN0JiZDLmRyYXcoQikseC5kaXNhYmxlKHguQ1VMTF9GQUNFKTtmb3IodmFyIGk9MDtpPGU7KytpKXt2YXIgbz1MW2ldO28uYXhlcz1TLG8ucGl4ZWxSYXRpbz1WLnBpeGVsUmF0aW8sby5pc09wYXF1ZSYmby5pc09wYXF1ZSgpJiZvLmRyYXcoQiksby5pc1RyYW5zcGFyZW50JiZvLmlzVHJhbnNwYXJlbnQoKSYmKE89ITApfWlmKE8pe3cuc2hhcGU9Tix3LmJpbmQoKSx4LmNsZWFyKHguREVQVEhfQlVGRkVSX0JJVCkseC5jb2xvck1hc2soITEsITEsITEsITEpLHguZGVwdGhNYXNrKCEwKSx4LmRlcHRoRnVuYyh4LkxFU1MpLFMuZW5hYmxlJiZTLmlzVHJhbnNwYXJlbnQoKSYmUy5kcmF3VHJhbnNwYXJlbnQoQik7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89TFtpXTtvLmlzT3BhcXVlJiZvLmlzT3BhcXVlKCkmJm8uZHJhdyhCKX14LmVuYWJsZSh4LkJMRU5EKSx4LmJsZW5kRXF1YXRpb24oeC5GVU5DX0FERCkseC5ibGVuZEZ1bmMoeC5PTkUseC5PTkVfTUlOVVNfU1JDX0FMUEhBKSx4LmNvbG9yTWFzayghMCwhMCwhMCwhMCkseC5kZXB0aE1hc2soITEpLHguY2xlYXJDb2xvcigwLDAsMCwwKSx4LmNsZWFyKHguQ09MT1JfQlVGRkVSX0JJVCksUy5pc1RyYW5zcGFyZW50KCkmJlMuZHJhd1RyYW5zcGFyZW50KEIpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5pc1RyYW5zcGFyZW50JiZvLmlzVHJhbnNwYXJlbnQoKSYmby5kcmF3VHJhbnNwYXJlbnQoQil9eC5iaW5kRnJhbWVidWZmZXIoeC5GUkFNRUJVRkZFUixudWxsKSx4LmJsZW5kRnVuYyh4Lk9ORSx4Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHguZGlzYWJsZSh4LkRFUFRIX1RFU1QpLGsuYmluZCgpLHcuY29sb3JbMF0uYmluZCgwKSxrLnVuaWZvcm1zLmFjY3VtQnVmZmVyPTAsYyh4KSx4LmRpc2FibGUoeC5CTEVORCl9RD0hMTtmb3IodmFyIGk9MDtpPGU7KytpKUxbaV0uZGlydHk9ITF9fX1yZXR1cm4gVi5lbmFibGVNb3VzZUxpc3RlbmVycygpLGZ1bmN0aW9uIHQoKXtWLl9zdG9wcGVkfHxWLmNvbnRleHRMb3N0fHwoWCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KSl9KCksVi5yZWRyYXc9ZnVuY3Rpb24oKXtWLl9zdG9wcGVkfHwoRD0hMCxYKCkpfSxWfSxjcmVhdGVDYW1lcmE6bn19LHsiLi9jYW1lcmEuanMiOjI4NCwiLi9saWIvc2hhZGVyIjoyODUsImEtYmlnLXRyaWFuZ2xlIjo0OSwiZ2wtYXhlczNkIjoyMjksImdsLWF4ZXMzZC9wcm9wZXJ0aWVzIjoyMzYsImdsLWZibyI6MjQ1LCJnbC1tYXQ0L29ydGhvIjoyNjQsImdsLW1hdDQvcGVyc3BlY3RpdmUiOjI2NSwiZ2wtc2VsZWN0LXN0YXRpYyI6Mjk2LCJnbC1zcGlrZXMzZCI6MzA2LCJpcy1tb2JpbGUiOjQxMiwibW91c2UtY2hhbmdlIjo0MjcsIm1vdXNlLXdoZWVsIjo0MzB9XSwyODc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5Iik7ci5wb2ludFZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xuXG5oaWdocCBmbG9hdCByYW5kKHZlYzIgY28pIHtcbiAgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTg7XG4gIGhpZ2hwIGZsb2F0IGIgPSA3OC4yMzM7XG4gIGhpZ2hwIGZsb2F0IGMgPSA0Mzc1OC41NDUzO1xuICBoaWdocCBmbG9hdCBkID0gZG90KGNvLnh5LCB2ZWMyKGEsIGIpKTtcbiAgaGlnaHAgZmxvYXQgZSA9IG1vZChkLCAzLjE0KTtcbiAgcmV0dXJuIGZyYWN0KHNpbihlKSAqIGMpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XG4gICAgLy8gaWYgd2UgZG9uJ3Qgaml0dGVyIHRoZSBwb2ludCBzaXplIGEgYml0LCBvdmVyYWxsIHBvaW50IGNsb3VkXG4gICAgLy8gc2F0dXJhdGlvbiAnanVtcHMnIG9uIHpvb21pbmcsIHdoaWNoIGlzIGRpc3R1cmJpbmcgYW5kIGNvbmZ1c2luZ1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemUgKiAoKDE5LjUgKyByYW5kKHBvc2l0aW9uKSkgLyAyMC4wKTtcbiAgaWYocG9pbnRDbG91ZCAhPSAwLjApIHsgLy8gcG9pbnRDbG91ZCBpcyB0cnV0aHlcbiAgICAvLyBnZXQgdGhlIHNhbWUgc3F1YXJlIHN1cmZhY2UgYXMgY2lyY2xlIHdvdWxkIGJlXG4gICAgZ2xfUG9pbnRTaXplICo9IDAuODg2O1xuICB9XG59Il0pLHIucG9pbnRGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3IsIGJvcmRlckNvbG9yO1xudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXM7XG4gIHZlYzQgYmFzZUNvbG9yO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIGlmKGNlbnRlckZyYWN0aW9uID09IDEuMCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIGNlbnRlckZyYWN0aW9uKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICAgIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgICAgZGlzY2FyZDtcbiAgICB9XG4gICAgYmFzZUNvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgc3RlcChyYWRpdXMsIGNlbnRlckZyYWN0aW9uKSk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IucmdiICogYmFzZUNvbG9yLmEsIGJhc2VDb2xvci5hKTtcbiAgfVxufVxuIl0pLHIucGlja1ZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuXG4gIHZlYzQgaWQgPSBwaWNrSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC55ICs9IGZsb29yKGlkLnggLyAyNTYuMCk7XG4gIGlkLnggLT0gZmxvb3IoaWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLnogKz0gZmxvb3IoaWQueSAvIDI1Ni4wKTtcbiAgaWQueSAtPSBmbG9vcihpZC55IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQudyArPSBmbG9vcihpZC56IC8gMjU2LjApO1xuICBpZC56IC09IGZsb29yKGlkLnogLyAyNTYuMCkgKiAyNTYuMDtcblxuICBmcmFnSWQgPSBpZDtcbn1cbiJdKSxyLnBpY2tGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcbiAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBmcmFnSWQgLyAyNTUuMDtcbn1cbiJdKX0se2dsc2xpZnk6NDAxfV0sMjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJ0eXBlZGFycmF5LXBvb2wiKSxvPXQoIi4vbGliL3NoYWRlciIpO2Z1bmN0aW9uIHModCxlLHIsbixpKXt0aGlzLnBsb3Q9dCx0aGlzLm9mZnNldEJ1ZmZlcj1lLHRoaXMucGlja0J1ZmZlcj1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waWNrU2hhZGVyPWksdGhpcy5zaXplTWluPS41LHRoaXMuc2l6ZU1pbkNhcD0yLHRoaXMuc2l6ZU1heD0yMCx0aGlzLmFyZWFSYXRpbz0xLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29sb3I9WzEsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuYmxlbmQ9ITEsdGhpcy5waWNrT2Zmc2V0PTAsdGhpcy5wb2ludHM9bnVsbH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLGE9aShyKSxsPWkociksYz1uKHIsby5wb2ludFZlcnRleCxvLnBvaW50RnJhZ21lbnQpLHU9bihyLG8ucGlja1ZlcnRleCxvLnBpY2tGcmFnbWVudCksZj1uZXcgcyh0LGEsbCxjLHUpO3JldHVybiBmLnVwZGF0ZShlKSx0LmFkZE9iamVjdChmKSxmfTt2YXIgbCxjLHU9cy5wcm90b3R5cGU7dS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5vZmZzZXRCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGlja0J1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU7ZnVuY3Rpb24gcihlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfXQ9dHx8e30sdGhpcy5zaXplTWluPXIoInNpemVNaW4iLC41KSx0aGlzLnNpemVNYXg9cigic2l6ZU1heCIsMjApLHRoaXMuY29sb3I9cigiY29sb3IiLFsxLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmFyZWFSYXRpbz1yKCJhcmVhUmF0aW8iLDEpLHRoaXMuYm9yZGVyQ29sb3I9cigiYm9yZGVyQ29sb3IiLFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJsZW5kPXIoImJsZW5kIiwhMSk7dmFyIG49dC5wb3NpdGlvbnMubGVuZ3RoPj4+MSxpPXQucG9zaXRpb25zIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LG89dC5pZFRvSW5kZXggaW5zdGFuY2VvZiBJbnQzMkFycmF5JiZ0LmlkVG9JbmRleC5sZW5ndGg+PW4scz10LnBvc2l0aW9ucyxsPWk/czphLm1hbGxvY0Zsb2F0MzIocy5sZW5ndGgpLGM9bz90LmlkVG9JbmRleDphLm1hbGxvY0ludDMyKG4pO2lmKGl8fGwuc2V0KHMpLCFvKWZvcihsLnNldChzKSxlPTA7ZTxuO2UrKyljW2VdPWU7dGhpcy5wb2ludHM9cyx0aGlzLm9mZnNldEJ1ZmZlci51cGRhdGUobCksdGhpcy5waWNrQnVmZmVyLnVwZGF0ZShjKSxpfHxhLmZyZWUobCksb3x8YS5mcmVlKGMpLHRoaXMucG9pbnRDb3VudD1uLHRoaXMucGlja09mZnNldD0wfSx1LnVuaWZpZWREcmF3PShsPVsxLDAsMCwwLDEsMCwwLDAsMV0sYz1bMCwwLDAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwIT09dCxyPWU/dGhpcy5waWNrU2hhZGVyOnRoaXMuc2hhZGVyLG49dGhpcy5wbG90LmdsLGk9dGhpcy5wbG90LmRhdGFCb3g7aWYoMD09PXRoaXMucG9pbnRDb3VudClyZXR1cm4gdDt2YXIgYT1pWzJdLWlbMF0sbz1pWzNdLWlbMV0scz1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoPj4+MTtmb3Iocj0wO3I8aTtyKyspe3ZhciBhPXRbMipyXSxvPXRbMipyKzFdO2E+PWVbMF0mJmE8PWVbMl0mJm8+PWVbMV0mJm88PWVbM10mJm4rK31yZXR1cm4gbn0odGhpcy5wb2ludHMsaSksdT10aGlzLnBsb3QucGlja1BpeGVsUmF0aW8qTWF0aC5tYXgoTWF0aC5taW4odGhpcy5zaXplTWluQ2FwLHRoaXMuc2l6ZU1pbiksTWF0aC5taW4odGhpcy5zaXplTWF4LHRoaXMuc2l6ZU1heC9NYXRoLnBvdyhzLC4zMzMzMykpKTtsWzBdPTIvYSxsWzRdPTIvbyxsWzZdPS0yKmlbMF0vYS0xLGxbN109LTIqaVsxXS9vLTEsdGhpcy5vZmZzZXRCdWZmZXIuYmluZCgpLHIuYmluZCgpLHIuYXR0cmlidXRlcy5wb3NpdGlvbi5wb2ludGVyKCksci51bmlmb3Jtcy5tYXRyaXg9bCxyLnVuaWZvcm1zLmNvbG9yPXRoaXMuY29sb3Isci51bmlmb3Jtcy5ib3JkZXJDb2xvcj10aGlzLmJvcmRlckNvbG9yLHIudW5pZm9ybXMucG9pbnRDbG91ZD11PDUsci51bmlmb3Jtcy5wb2ludFNpemU9dSxyLnVuaWZvcm1zLmNlbnRlckZyYWN0aW9uPU1hdGgubWluKDEsTWF0aC5tYXgoMCxNYXRoLnNxcnQoMS10aGlzLmFyZWFSYXRpbykpKSxlJiYoY1swXT0yNTUmdCxjWzFdPXQ+PjgmMjU1LGNbMl09dD4+MTYmMjU1LGNbM109dD4+MjQmMjU1LHRoaXMucGlja0J1ZmZlci5iaW5kKCksci5hdHRyaWJ1dGVzLnBpY2tJZC5wb2ludGVyKG4uVU5TSUdORURfQllURSksci51bmlmb3Jtcy5waWNrT2Zmc2V0PWMsdGhpcy5waWNrT2Zmc2V0PXQpO3ZhciBmPW4uZ2V0UGFyYW1ldGVyKG4uQkxFTkQpLGg9bi5nZXRQYXJhbWV0ZXIobi5ESVRIRVIpO3JldHVybiBmJiYhdGhpcy5ibGVuZCYmbi5kaXNhYmxlKG4uQkxFTkQpLGgmJm4uZGlzYWJsZShuLkRJVEhFUiksbi5kcmF3QXJyYXlzKG4uUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSxmJiYhdGhpcy5ibGVuZCYmbi5lbmFibGUobi5CTEVORCksaCYmbi5lbmFibGUobi5ESVRIRVIpLHQrdGhpcy5wb2ludENvdW50fSksdS5kcmF3PXUudW5pZmllZERyYXcsdS5kcmF3UGljaz11LnVuaWZpZWREcmF3LHUucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5wb2ludENvdW50O2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMucG9pbnRzO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvWzIqYV0sb1syKmErMV1dfX19LHsiLi9saWIvc2hhZGVyIjoyODcsImdsLWJ1ZmZlciI6MjM3LCJnbC1zaGFkZXIiOjI5NywidHlwZWRhcnJheS1wb29sIjo1Mjl9XSwyODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPWVbMF0sdT1lWzFdLGY9ZVsyXSxoPWVbM10scD1yWzBdLGQ9clsxXSxnPXJbMl0sdj1yWzNdOyhhPWMqcCt1KmQrZipnK2gqdik8MCYmKGE9LWEscD0tcCxkPS1kLGc9LWcsdj0tdik7MS1hPjFlLTY/KGk9TWF0aC5hY29zKGEpLG89TWF0aC5zaW4oaSkscz1NYXRoLnNpbigoMS1uKSppKS9vLGw9TWF0aC5zaW4obippKS9vKToocz0xLW4sbD1uKTtyZXR1cm4gdFswXT1zKmMrbCpwLHRbMV09cyp1K2wqZCx0WzJdPXMqZitsKmcsdFszXT1zKmgrbCp2LHR9fSx7fV0sMjkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdHx8MD09PXQ/dC50b1N0cmluZygpOiIifX0se31dLDI5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ2ZWN0b3JpemUtdGV4dCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9aVtlXTthfHwoYT1pW2VdPXt9KTtpZih0IGluIGEpcmV0dXJuIGFbdF07dmFyIG89e3RleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZUhlaWdodDoxLGZvbnQ6ZSxsaW5lU3BhY2luZzoxLjI1LHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfSx0cmlhbmdsZXM6ITB9LHM9bih0LG8pO28udHJpYW5nbGVzPSExO3ZhciBsLGMsdT1uKHQsbyk7aWYociYmMSE9PXIpe2ZvcihsPTA7bDxzLnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7YzxzLnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXMucG9zaXRpb25zW2xdW2NdLz1yO2ZvcihsPTA7bDx1LnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7Yzx1LnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXUucG9zaXRpb25zW2xdW2NdLz1yfXZhciBmPVtbMS8wLDEvMF0sWy0xLzAsLTEvMF1dLGg9dS5wb3NpdGlvbnMubGVuZ3RoO2ZvcihsPTA7bDxoOysrbCl7dmFyIHA9dS5wb3NpdGlvbnNbbF07Zm9yKGM9MDtjPDI7KytjKWZbMF1bY109TWF0aC5taW4oZlswXVtjXSxwW2NdKSxmWzFdW2NdPU1hdGgubWF4KGZbMV1bY10scFtjXSl9cmV0dXJuIGFbdF09W3MsdSxmXX07dmFyIGk9e319LHsidmVjdG9yaXplLXRleHQiOjUzNH1dLDI5MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2xzbGlmeSIpLGE9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IHNjYWxlID0gMS4wO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcbiAgICAgIHNjYWxlID0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICAgIHZpZXdQb3NpdGlvbiA9IHZpZXdQb3NpdGlvbiAvIHZpZXdQb3NpdGlvbi53O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqICh2aWV3UG9zaXRpb24gKyBzY2FsZSAqIHZlYzQoZ2x5cGgueCwgLWdseXBoLnksIDAsIDApKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxvPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlLCBwaXhlbFJhdGlvO1xudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IHNjYWxlID0gcGl4ZWxSYXRpbztcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZC5iZ3IsIGlkLmJncikgPCAwLjAwMSkge1xuICAgICAgc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlld1Bvc2l0aW9uO1xuICAgIGNsaXBQb3NpdGlvbiAvPSBjbGlwUG9zaXRpb24udztcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uICsgdmVjNChzY3JlZW5TaXplICogc2NhbGUgKiB2ZWMyKGdseXBoLngsIC1nbHlwaC55KSwgMC4wLCAwLjApO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxzPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG51bmlmb3JtIHZlYzMgYXhlc1syXTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHNjYWxlLCBwaXhlbFJhdGlvO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IGxzY2FsZSA9IHBpeGVsUmF0aW8gKiBzY2FsZTtcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZCwgaWQpIDwgMC4wMDAxKSB7XG4gICAgICBsc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCBjbGlwQ2VudGVyICAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XG4gICAgdmVjMyBkYXRhUG9zaXRpb24gPSBwb3NpdGlvbiArIDAuNSpsc2NhbGUqKGF4ZXNbMF0gKiBnbHlwaC54ICsgYXhlc1sxXSAqIGdseXBoLnkpICogY2xpcENlbnRlci53ICogc2NyZWVuU2l6ZS55O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoZGF0YVBvc2l0aW9uLCAxKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBkYXRhUG9zaXRpb247XG4gIH1cbn1cbiJdKSxsPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGZyYWdDbGlwQm91bmRzWzBdLCBmcmFnQ2xpcEJvdW5kc1sxXSwgZGF0YUNvb3JkaW5hdGUpIHx8XG4gICAgaW50ZXJwQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cbiAgKSBkaXNjYXJkO1xuICBnbF9GcmFnQ29sb3IgPSBpbnRlcnBDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksYz1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0dyb3VwO1xuXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGZyYWdDbGlwQm91bmRzWzBdLCBmcmFnQ2xpcEJvdW5kc1sxXSwgZGF0YUNvb3JkaW5hdGUpKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0dyb3VwLCBwaWNrSWQuYmdyKTtcbn0iXSksdT1be25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6ImdseXBoIix0eXBlOiJ2ZWMyIn0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dLGY9e3ZlcnRleDphLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxoPXt2ZXJ0ZXg6byxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0scD17dmVydGV4OnMsZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LGQ9e3ZlcnRleDphLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fSxnPXt2ZXJ0ZXg6byxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX0sdj17dmVydGV4OnMsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9O2Z1bmN0aW9uIG0odCxlKXt2YXIgcj1uKHQsZSksaT1yLmF0dHJpYnV0ZXM7cmV0dXJuIGkucG9zaXRpb24ubG9jYXRpb249MCxpLmNvbG9yLmxvY2F0aW9uPTEsaS5nbHlwaC5sb2NhdGlvbj0yLGkuaWQubG9jYXRpb249MyxyfXIuY3JlYXRlUGVyc3BlY3RpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxmKX0sci5jcmVhdGVPcnRobz1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LGgpfSxyLmNyZWF0ZVByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxwKX0sci5jcmVhdGVQaWNrUGVyc3BlY3RpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxkKX0sci5jcmVhdGVQaWNrT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxnKX0sci5jcmVhdGVQaWNrUHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LHYpfX0seyJnbC1zaGFkZXIiOjI5NyxnbHNsaWZ5OjQwMX1dLDI5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpcy1zdHJpbmctYmxhbmsiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJ0eXBlZGFycmF5LXBvb2wiKSxzPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxsPXQoIi4vbGliL3NoYWRlcnMiKSxjPXQoIi4vbGliL2dseXBocyIpLHU9dCgiLi9saWIvZ2V0LXNpbXBsZS1zdHJpbmciKSxmPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBoKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXTtyZXR1cm4gdFswXT1lWzBdKnIrZVs0XSpuK2VbOF0qaStlWzEyXSphLHRbMV09ZVsxXSpyK2VbNV0qbitlWzldKmkrZVsxM10qYSx0WzJdPWVbMl0qcitlWzZdKm4rZVsxMF0qaStlWzE0XSphLHRbM109ZVszXSpyK2VbN10qbitlWzExXSppK2VbMTVdKmEsdH1mdW5jdGlvbiBwKHQsZSxyLG4pe3JldHVybiBoKG4sbiksaChuLG4pLGgobixuKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy5pbmRleD10LHRoaXMuZGF0YUNvb3JkaW5hdGU9dGhpcy5wb3NpdGlvbj1lfWZ1bmN0aW9uIGcodCl7cmV0dXJuITA9PT10PzE6dD4xPzE6dH1mdW5jdGlvbiB2KHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5zaGFkZXI9ZSx0aGlzLm9ydGhvU2hhZGVyPXIsdGhpcy5wcm9qZWN0U2hhZGVyPW4sdGhpcy5wb2ludEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9YSx0aGlzLmdseXBoQnVmZmVyPW8sdGhpcy5pZEJ1ZmZlcj1zLHRoaXMudmFvPWwsdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMubGluZVZlcnRleENvdW50PTAsdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMSx0aGlzLmxpbmVXaWR0aD0wLHRoaXMucHJvamVjdFNjYWxlPVsyLzMsMi8zLDIvM10sdGhpcy5wcm9qZWN0T3BhY2l0eT1bMSwxLDFdLHRoaXMucHJvamVjdEhhc0FscGhhPSExLHRoaXMucGlja0lkPTAsdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXI9Yyx0aGlzLnBpY2tPcnRob1NoYWRlcj11LHRoaXMucGlja1Byb2plY3RTaGFkZXI9Zix0aGlzLnBvaW50cz1bXSx0aGlzLl9zZWxlY3RSZXN1bHQ9bmV3IGQoMCxbMCwwLDBdKSx0aGlzLnVzZU9ydGhvPSEwLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuYXhlc1Byb2plY3Q9WyEwLCEwLCEwXSx0aGlzLmF4ZXNCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV0sdGhpcy5oaWdobGlnaHRTY2FsZT0yLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmRpcnR5PSEwfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bC5jcmVhdGVQZXJzcGVjdGl2ZShlKSxuPWwuY3JlYXRlT3J0aG8oZSksbz1sLmNyZWF0ZVByb2plY3QoZSkscz1sLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZShlKSxjPWwuY3JlYXRlUGlja09ydGhvKGUpLHU9bC5jcmVhdGVQaWNrUHJvamVjdChlKSxmPWkoZSksaD1pKGUpLHA9aShlKSxkPWkoZSksZz1hKGUsW3tidWZmZXI6ZixzaXplOjMsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmgsc2l6ZTo0LHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpwLHNpemU6Mix0eXBlOmUuRkxPQVR9LHtidWZmZXI6ZCxzaXplOjQsdHlwZTplLlVOU0lHTkVEX0JZVEUsbm9ybWFsaXplZDohMH1dKSxtPW5ldyB2KGUscixuLG8sZixoLHAsZCxnLHMsYyx1KTtyZXR1cm4gbS51cGRhdGUodCksbX07dmFyIG09di5wcm90b3R5cGU7bS5waWNrU2xvdHM9MSxtLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LG0uaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe2lmKHRoaXMuaGFzQWxwaGEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLmF4ZXNQcm9qZWN0W3RdJiZ0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX0sbS5pc09wYXF1ZT1mdW5jdGlvbigpe2lmKCF0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmIXRoaXMucHJvamVjdEhhc0FscGhhKXJldHVybiEwO3JldHVybiExfTt2YXIgeT1bMCwwXSx4PVswLDAsMF0sYj1bMCwwLDBdLF89WzAsMCwwLDFdLHc9WzAsMCwwLDFdLGs9Zi5zbGljZSgpLFQ9WzAsMCwwXSxBPVtbMCwwLDBdLFswLDAsMF1dO2Z1bmN0aW9uIE0odCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBTKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109MSx0fWZ1bmN0aW9uIEUodCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbcl09bix0fWZ1bmN0aW9uIEModCxlLHIsbil7dmFyIGksYT1lLmF4ZXNQcm9qZWN0LG89ZS5nbCxsPXQudW5pZm9ybXMsYz1yLm1vZGVsfHxmLHU9ci52aWV3fHxmLGg9ci5wcm9qZWN0aW9ufHxmLGQ9ZS5heGVzQm91bmRzLGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUEscj0wO3I8MjsrK3IpZm9yKHZhciBuPTA7bjwzOysrbillW3JdW25dPU1hdGgubWF4KE1hdGgubWluKHRbcl1bbl0sMWU4KSwtMWU4KTtyZXR1cm4gZX0oZS5jbGlwQm91bmRzKTtpPWUuYXhlcyYmZS5heGVzLmxhc3RDdWJlUHJvcHM/ZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpczpbMSwxLDFdLHlbMF09Mi9vLmRyYXdpbmdCdWZmZXJXaWR0aCx5WzFdPTIvby5kcmF3aW5nQnVmZmVySGVpZ2h0LHQuYmluZCgpLGwudmlldz11LGwucHJvamVjdGlvbj1oLGwuc2NyZWVuU2l6ZT15LGwuaGlnaGxpZ2h0SWQ9ZS5oaWdobGlnaHRJZCxsLmhpZ2hsaWdodFNjYWxlPWUuaGlnaGxpZ2h0U2NhbGUsbC5jbGlwQm91bmRzPWcsbC5waWNrR3JvdXA9ZS5waWNrSWQvMjU1LGwucGl4ZWxSYXRpbz1uO2Zvcih2YXIgdj0wO3Y8MzsrK3YpaWYoYVt2XSl7bC5zY2FsZT1lLnByb2plY3RTY2FsZVt2XSxsLm9wYWNpdHk9ZS5wcm9qZWN0T3BhY2l0eVt2XTtmb3IodmFyIG09ayxDPTA7QzwxNjsrK0MpbVtDXT0wO2ZvcihDPTA7Qzw0OysrQyltWzUqQ109MTttWzUqdl09MCxpW3ZdPDA/bVsxMit2XT1kWzBdW3ZdOm1bMTIrdl09ZFsxXVt2XSxzKG0sYyxtKSxsLm1vZGVsPW07dmFyIEw9KHYrMSklMyx6PSh2KzIpJTMsTz1NKHgpLEk9TShiKTtPW0xdPTEsSVt6XT0xO3ZhciBEPXAoMCwwLDAsUyhfLE8pKSxQPXAoMCwwLDAsUyh3LEkpKTtpZihNYXRoLmFicyhEWzFdKT5NYXRoLmFicyhQWzFdKSl7dmFyIFI9RDtEPVAsUD1SLFI9TyxPPUksST1SO3ZhciBGPUw7TD16LHo9Rn1EWzBdPDAmJihPW0xdPS0xKSxQWzFdPjAmJihJW3pdPS0xKTt2YXIgQj0wLE49MDtmb3IoQz0wO0M8NDsrK0MpQis9TWF0aC5wb3coY1s0KkwrQ10sMiksTis9TWF0aC5wb3coY1s0KnorQ10sMik7T1tMXS89TWF0aC5zcXJ0KEIpLElbel0vPU1hdGguc3FydChOKSxsLmF4ZXNbMF09TyxsLmF4ZXNbMV09SSxsLmZyYWdDbGlwQm91bmRzWzBdPUUoVCxnWzBdLHYsLTFlOCksbC5mcmFnQ2xpcEJvdW5kc1sxXT1FKFQsZ1sxXSx2LDFlOCksZS52YW8uYmluZCgpLGUudmFvLmRyYXcoby5UUklBTkdMRVMsZS52ZXJ0ZXhDb3VudCksZS5saW5lV2lkdGg+MCYmKG8ubGluZVdpZHRoKGUubGluZVdpZHRoKm4pLGUudmFvLmRyYXcoby5MSU5FUyxlLmxpbmVWZXJ0ZXhDb3VudCxlLnZlcnRleENvdW50KSksZS52YW8udW5iaW5kKCl9fXZhciBMPVtbLTFlOCwtMWU4LC0xZThdLFsxZTgsMWU4LDFlOF1dO2Z1bmN0aW9uIHoodCxlLHIsbixpLGEsbyl7dmFyIHM9ci5nbDtpZigoYT09PXIucHJvamVjdEhhc0FscGhhfHxvKSYmQyhlLHIsbixpKSxhPT09ci5oYXNBbHBoYXx8byl7dC5iaW5kKCk7dmFyIGw9dC51bmlmb3JtcztsLm1vZGVsPW4ubW9kZWx8fGYsbC52aWV3PW4udmlld3x8ZixsLnByb2plY3Rpb249bi5wcm9qZWN0aW9ufHxmLHlbMF09Mi9zLmRyYXdpbmdCdWZmZXJXaWR0aCx5WzFdPTIvcy5kcmF3aW5nQnVmZmVySGVpZ2h0LGwuc2NyZWVuU2l6ZT15LGwuaGlnaGxpZ2h0SWQ9ci5oaWdobGlnaHRJZCxsLmhpZ2hsaWdodFNjYWxlPXIuaGlnaGxpZ2h0U2NhbGUsbC5mcmFnQ2xpcEJvdW5kcz1MLGwuY2xpcEJvdW5kcz1yLmF4ZXMuYm91bmRzLGwub3BhY2l0eT1yLm9wYWNpdHksbC5waWNrR3JvdXA9ci5waWNrSWQvMjU1LGwucGl4ZWxSYXRpbz1pLHIudmFvLmJpbmQoKSxyLnZhby5kcmF3KHMuVFJJQU5HTEVTLHIudmVydGV4Q291bnQpLHIubGluZVdpZHRoPjAmJihzLmxpbmVXaWR0aChyLmxpbmVXaWR0aCppKSxyLnZhby5kcmF3KHMuTElORVMsci5saW5lVmVydGV4Q291bnQsci52ZXJ0ZXhDb3VudCkpLHIudmFvLnVuYmluZCgpfX1mdW5jdGlvbiBPKHQsZSxyLGkpe3ZhciBhO2E9QXJyYXkuaXNBcnJheSh0KT9lPHQubGVuZ3RoP3RbZV06dm9pZCAwOnQsYT11KGEpO3ZhciBvPSEwO24oYSkmJihhPSJcdTI1YmMiLG89ITEpO3ZhciBzPWMoYSxyLGkpO3JldHVybnttZXNoOnNbMF0sbGluZXM6c1sxXSxib3VuZHM6c1syXSx2aXNpYmxlOm99fW0uZHJhdz1mdW5jdGlvbih0KXt6KHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMSwhMSl9LG0uZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe3oodGhpcy51c2VPcnRobz90aGlzLm9ydGhvU2hhZGVyOnRoaXMuc2hhZGVyLHRoaXMucHJvamVjdFNoYWRlcix0aGlzLHQsdGhpcy5waXhlbFJhdGlvLCEwLCExKX0sbS5kcmF3UGljaz1mdW5jdGlvbih0KXt6KHRoaXMudXNlT3J0aG8/dGhpcy5waWNrT3J0aG9TaGFkZXI6dGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIsdGhpcy5waWNrUHJvamVjdFNoYWRlcix0aGlzLHQsMSwhMCwhMCl9LG0ucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVsyXSsodC52YWx1ZVsxXTw8OCkrKHQudmFsdWVbMF08PDE2KTtpZihlPj10aGlzLnBvaW50Q291bnR8fGU8MClyZXR1cm4gbnVsbDt2YXIgcj10aGlzLnBvaW50c1tlXSxuPXRoaXMuX3NlbGVjdFJlc3VsdDtuLmluZGV4PWU7Zm9yKHZhciBpPTA7aTwzOysraSluLnBvc2l0aW9uW2ldPW4uZGF0YUNvb3JkaW5hdGVbaV09cltpXTtyZXR1cm4gbn0sbS5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9dC5pbmRleCxyPTI1NSZlLG49ZT4+OCYyNTUsaT1lPj4xNiYyNTU7dGhpcy5oaWdobGlnaHRJZD1bci8yNTUsbi8yNTUsaS8yNTUsMF19ZWxzZSB0aGlzLmhpZ2hsaWdodElkPVsxLDEsMSwxXX0sbS51cGRhdGU9ZnVuY3Rpb24odCl7aWYoInBlcnNwZWN0aXZlImluKHQ9dHx8e30pJiYodGhpcy51c2VPcnRobz0hdC5wZXJzcGVjdGl2ZSksIm9ydGhvZ3JhcGhpYyJpbiB0JiYodGhpcy51c2VPcnRobz0hIXQub3J0aG9ncmFwaGljKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksInByb2plY3QiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdCkpdGhpcy5heGVzUHJvamVjdD10LnByb2plY3Q7ZWxzZXt2YXIgZT0hIXQucHJvamVjdDt0aGlzLmF4ZXNQcm9qZWN0PVtlLGUsZV19aWYoInByb2plY3RTY2FsZSJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0U2NhbGUpKXRoaXMucHJvamVjdFNjYWxlPXQucHJvamVjdFNjYWxlLnNsaWNlKCk7ZWxzZXt2YXIgcj0rdC5wcm9qZWN0U2NhbGU7dGhpcy5wcm9qZWN0U2NhbGU9W3IscixyXX1pZih0aGlzLnByb2plY3RIYXNBbHBoYT0hMSwicHJvamVjdE9wYWNpdHkiaW4gdCl7aWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RPcGFjaXR5KSl0aGlzLnByb2plY3RPcGFjaXR5PXQucHJvamVjdE9wYWNpdHkuc2xpY2UoKTtlbHNle3I9K3QucHJvamVjdE9wYWNpdHk7dGhpcy5wcm9qZWN0T3BhY2l0eT1bcixyLHJdfWZvcih2YXIgbj0wO248MzsrK24pdGhpcy5wcm9qZWN0T3BhY2l0eVtuXT1nKHRoaXMucHJvamVjdE9wYWNpdHlbbl0pLHRoaXMucHJvamVjdE9wYWNpdHlbbl08MSYmKHRoaXMucHJvamVjdEhhc0FscGhhPSEwKX10aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9Zyh0Lm9wYWNpdHkpLHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLHRoaXMuZGlydHk9ITA7dmFyIGksYSxzPXQucG9zaXRpb24sbD10LmZvbnR8fCJub3JtYWwiLGM9dC5hbGlnbm1lbnR8fFswLDBdO2lmKDI9PT1jLmxlbmd0aClpPWNbMF0sYT1jWzFdO2Vsc2V7aT1bXSxhPVtdO2ZvcihuPTA7bjxjLmxlbmd0aDsrK24paVtuXT1jW25dWzBdLGFbbl09Y1tuXVsxXX12YXIgdT1bMS8wLDEvMCwxLzBdLGY9Wy0xLzAsLTEvMCwtMS8wXSxoPXQuZ2x5cGgscD10LmNvbG9yLGQ9dC5zaXplLHY9dC5hbmdsZSxtPXQubGluZUNvbG9yLHk9LTEseD0wLGI9MCxfPTA7aWYocy5sZW5ndGgpe189cy5sZW5ndGg7dDpmb3Iobj0wO248XzsrK24pe2Zvcih2YXIgdz1zW25dLGs9MDtrPDM7KytrKWlmKGlzTmFOKHdba10pfHwhaXNGaW5pdGUod1trXSkpY29udGludWUgdDt2YXIgVD0oTj1PKGgsbixsLHRoaXMucGl4ZWxSYXRpbykpLm1lc2gsQT1OLmxpbmVzLE09Ti5ib3VuZHM7eCs9MypULmNlbGxzLmxlbmd0aCxiKz0yKkEuZWRnZXMubGVuZ3RofX12YXIgUz14K2IsRT1vLm1hbGxvY0Zsb2F0KDMqUyksQz1vLm1hbGxvY0Zsb2F0KDQqUyksTD1vLm1hbGxvY0Zsb2F0KDIqUyksej1vLm1hbGxvY1VpbnQzMihTKTtpZihTPjApe3ZhciBJPTAsRD14LFA9WzAsMCwwLDFdLFI9WzAsMCwwLDFdLEY9QXJyYXkuaXNBcnJheShwKSYmQXJyYXkuaXNBcnJheShwWzBdKSxCPUFycmF5LmlzQXJyYXkobSkmJkFycmF5LmlzQXJyYXkobVswXSk7dDpmb3Iobj0wO248XzsrK24pe3krPTE7Zm9yKHc9c1tuXSxrPTA7azwzOysrayl7aWYoaXNOYU4od1trXSl8fCFpc0Zpbml0ZSh3W2tdKSljb250aW51ZSB0O2Zba109TWF0aC5tYXgoZltrXSx3W2tdKSx1W2tdPU1hdGgubWluKHVba10sd1trXSl9VD0oTj1PKGgsbixsLHRoaXMucGl4ZWxSYXRpbykpLm1lc2gsQT1OLmxpbmVzLE09Ti5ib3VuZHM7dmFyIE4saj1OLnZpc2libGU7aWYoailpZihBcnJheS5pc0FycmF5KHApKXtpZigzPT09KFY9Rj9uPHAubGVuZ3RoP3Bbbl06WzAsMCwwLDBdOnApLmxlbmd0aCl7Zm9yKGs9MDtrPDM7KytrKVBba109VltrXTtQWzNdPTF9ZWxzZSBpZig0PT09Vi5sZW5ndGgpe2ZvcihrPTA7azw0OysraylQW2tdPVZba107IXRoaXMuaGFzQWxwaGEmJlZbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApfX1lbHNlIFBbMF09UFsxXT1QWzJdPTAsUFszXT0xO2Vsc2UgUD1bMSwxLDEsMF07aWYoailpZihBcnJheS5pc0FycmF5KG0pKXt2YXIgVjtpZigzPT09KFY9Qj9uPG0ubGVuZ3RoP21bbl06WzAsMCwwLDBdOm0pLmxlbmd0aCl7Zm9yKGs9MDtrPDM7KytrKVJba109VltrXTtSW2tdPTF9ZWxzZSBpZig0PT09Vi5sZW5ndGgpe2ZvcihrPTA7azw0OysraylSW2tdPVZba107IXRoaXMuaGFzQWxwaGEmJlZbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApfX1lbHNlIFJbMF09UlsxXT1SWzJdPTAsUlszXT0xO2Vsc2UgUj1bMSwxLDEsMF07dmFyIFU9LjU7aj9BcnJheS5pc0FycmF5KGQpP1U9bjxkLmxlbmd0aD8rZFtuXToxMjpkP1U9K2Q6dGhpcy51c2VPcnRobyYmKFU9MTIpOlU9MDt2YXIgcT0wO0FycmF5LmlzQXJyYXkodik/cT1uPHYubGVuZ3RoPyt2W25dOjA6diYmKHE9K3YpO3ZhciBIPU1hdGguY29zKHEpLEc9TWF0aC5zaW4ocSk7Zm9yKHc9c1tuXSxrPTA7azwzOysraylmW2tdPU1hdGgubWF4KGZba10sd1trXSksdVtrXT1NYXRoLm1pbih1W2tdLHdba10pO3ZhciBZPWksVz1hO1k9MDtBcnJheS5pc0FycmF5KGkpP1k9bjxpLmxlbmd0aD9pW25dOjA6aSYmKFk9aSk7Vz0wO0FycmF5LmlzQXJyYXkoYSk/Vz1uPGEubGVuZ3RoP2Fbbl06MDphJiYoVz1hKTt2YXIgWD1bWSo9WT4wPzEtTVswXVswXTpZPDA/MStNWzFdWzBdOjEsVyo9Vz4wPzEtTVswXVsxXTpXPDA/MStNWzFdWzFdOjFdLFo9VC5jZWxsc3x8W10sJD1ULnBvc2l0aW9uc3x8W107Zm9yKGs9MDtrPFoubGVuZ3RoOysraylmb3IodmFyIEo9WltrXSxLPTA7SzwzOysrSyl7Zm9yKHZhciBRPTA7UTwzOysrUSlFWzMqSStRXT13W1FdO2ZvcihRPTA7UTw0OysrUSlDWzQqSStRXT1QW1FdO3pbSV09eTt2YXIgdHQ9JFtKW0tdXTtMWzIqSV09VSooSCp0dFswXS1HKnR0WzFdK1hbMF0pLExbMipJKzFdPVUqKEcqdHRbMF0rSCp0dFsxXStYWzFdKSxJKz0xfWZvcihaPUEuZWRnZXMsJD1BLnBvc2l0aW9ucyxrPTA7azxaLmxlbmd0aDsrK2spZm9yKEo9WltrXSxLPTA7SzwyOysrSyl7Zm9yKFE9MDtRPDM7KytRKUVbMypEK1FdPXdbUV07Zm9yKFE9MDtRPDQ7KytRKUNbNCpEK1FdPVJbUV07eltEXT15O3R0PSRbSltLXV07TFsyKkRdPVUqKEgqdHRbMF0tRyp0dFsxXStYWzBdKSxMWzIqRCsxXT1VKihHKnR0WzBdK0gqdHRbMV0rWFsxXSksRCs9MX19fXRoaXMuYm91bmRzPVt1LGZdLHRoaXMucG9pbnRzPXMsdGhpcy5wb2ludENvdW50PXMubGVuZ3RoLHRoaXMudmVydGV4Q291bnQ9eCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD1iLHRoaXMucG9pbnRCdWZmZXIudXBkYXRlKEUpLHRoaXMuY29sb3JCdWZmZXIudXBkYXRlKEMpLHRoaXMuZ2x5cGhCdWZmZXIudXBkYXRlKEwpLHRoaXMuaWRCdWZmZXIudXBkYXRlKHopLG8uZnJlZShFKSxvLmZyZWUoQyksby5mcmVlKEwpLG8uZnJlZSh6KX0sbS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMub3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tPcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMucG9pbnRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuY29sb3JCdWZmZXIuZGlzcG9zZSgpLHRoaXMuZ2x5cGhCdWZmZXIuZGlzcG9zZSgpLHRoaXMuaWRCdWZmZXIuZGlzcG9zZSgpfX0seyIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZyI6MjkwLCIuL2xpYi9nbHlwaHMiOjI5MSwiLi9saWIvc2hhZGVycyI6MjkyLCJnbC1idWZmZXIiOjIzNywiZ2wtbWF0NC9tdWx0aXBseSI6MjYzLCJnbC12YW8iOjMxOSwiaXMtc3RyaW5nLWJsYW5rIjo0MTUsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sMjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKTtyLmJveFZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiB2ZXJ0ZXg7XG5cbnVuaWZvcm0gdmVjMiBjb3JuZXJBLCBjb3JuZXJCO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChtaXgoY29ybmVyQSwgY29ybmVyQiwgdmVydGV4KSwgMCwgMSk7XG59XG4iXSksci5ib3hGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59XG4iXSl9LHtnbHNsaWZ5OjQwMX1dLDI5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiLi9saWIvc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMuYm94QnVmZmVyPWUsdGhpcy5ib3hTaGFkZXI9cix0aGlzLmVuYWJsZWQ9ITAsdGhpcy5zZWxlY3RCb3g9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmlubmVyRmlsbD0hMSx0aGlzLmlubmVyQ29sb3I9WzAsMCwwLC4yNV0sdGhpcy5vdXRlckZpbGw9ITAsdGhpcy5vdXRlckNvbG9yPVswLDAsMCwuNV0sdGhpcy5ib3JkZXJXaWR0aD0xMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLHM9aShyLFswLDAsMCwxLDEsMCwxLDFdKSxsPW4ocixhLmJveFZlcnRleCxhLmJveEZyYWdtZW50KSxjPW5ldyBvKHQscyxsKTtyZXR1cm4gYy51cGRhdGUoZSksdC5hZGRPdmVybGF5KGMpLGN9O3ZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMuZW5hYmxlZCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zZWxlY3RCb3gscj10aGlzLmJvcmRlcldpZHRoLG49KHRoaXMuaW5uZXJGaWxsLHRoaXMuaW5uZXJDb2xvciksaT0odGhpcy5vdXRlckZpbGwsdGhpcy5vdXRlckNvbG9yKSxhPXRoaXMuYm9yZGVyQ29sb3Isbz10LmJveCxzPXQuc2NyZWVuQm94LGw9dC5kYXRhQm94LGM9dC52aWV3Qm94LHU9dC5waXhlbFJhdGlvLGY9KGVbMF0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxoPShlWzFdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV0scD0oZVsyXS1sWzBdKSooY1syXS1jWzBdKS8obFsyXS1sWzBdKStjWzBdLGQ9KGVbM10tbFsxXSkqKGNbM10tY1sxXSkvKGxbM10tbFsxXSkrY1sxXTtpZihmPU1hdGgubWF4KGYsY1swXSksaD1NYXRoLm1heChoLGNbMV0pLHA9TWF0aC5taW4ocCxjWzJdKSxkPU1hdGgubWluKGQsY1szXSksIShwPGZ8fGQ8aCkpe28uYmluZCgpO3ZhciBnPXNbMl0tc1swXSx2PXNbM10tc1sxXTtpZih0aGlzLm91dGVyRmlsbCYmKG8uZHJhd0JveCgwLDAsZyxoLGkpLG8uZHJhd0JveCgwLGgsZixkLGkpLG8uZHJhd0JveCgwLGQsZyx2LGkpLG8uZHJhd0JveChwLGgsZyxkLGkpKSx0aGlzLmlubmVyRmlsbCYmby5kcmF3Qm94KGYsaCxwLGQsbikscj4wKXt2YXIgbT1yKnU7by5kcmF3Qm94KGYtbSxoLW0scCttLGgrbSxhKSxvLmRyYXdCb3goZi1tLGQtbSxwK20sZCttLGEpLG8uZHJhd0JveChmLW0saC1tLGYrbSxkK20sYSksby5kcmF3Qm94KHAtbSxoLW0scCttLGQrbSxhKX19fX0scy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmlubmVyRmlsbD0hIXQuaW5uZXJGaWxsLHRoaXMub3V0ZXJGaWxsPSEhdC5vdXRlckZpbGwsdGhpcy5pbm5lckNvbG9yPSh0LmlubmVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5vdXRlckNvbG9yPSh0Lm91dGVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5ib3JkZXJDb2xvcj0odC5ib3JkZXJDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYm9yZGVyV2lkdGg9dC5ib3JkZXJXaWR0aHx8MCx0aGlzLnNlbGVjdEJveD0odC5zZWxlY3RCb3h8fHRoaXMuc2VsZWN0Qm94KS5zbGljZSgpfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5ib3hTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjoyOTQsImdsLWJ1ZmZlciI6MjM3LCJnbC1zaGFkZXIiOjI5N31dLDI5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZSksYT1pLm1hbGxvY1VpbnQ4KGVbMF0qZVsxXSo0KTtyZXR1cm4gbmV3IGModCxyLGEpfTt2YXIgbj10KCJnbC1mYm8iKSxpPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgibmRhcnJheSIpLG89dCgiYml0LXR3aWRkbGUiKS5uZXh0UG93MixzPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJhcnJheSIse29mZnNldDpbMCwwLDFdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwyXSxhcnJheTowfSx7b2Zmc2V0OlswLDAsM10sYXJyYXk6MH0sInNjYWxhciIsInNjYWxhciIsImluZGV4Il0scHJlOntib2R5OiJ7dGhpc19jbG9zZXN0RDI9MWU4LHRoaXNfY2xvc2VzdFg9LTEsdGhpc19jbG9zZXN0WT0tMX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV8xNl9hcmcwXzwyNTV8fF9pbmxpbmVfMTZfYXJnMV88MjU1fHxfaW5saW5lXzE2X2FyZzJfPDI1NXx8X2lubGluZV8xNl9hcmczXzwyNTUpe3ZhciBfaW5saW5lXzE2X2w9X2lubGluZV8xNl9hcmc0Xy1faW5saW5lXzE2X2FyZzZfWzBdLF9pbmxpbmVfMTZfYT1faW5saW5lXzE2X2FyZzVfLV9pbmxpbmVfMTZfYXJnNl9bMV0sX2lubGluZV8xNl9mPV9pbmxpbmVfMTZfbCpfaW5saW5lXzE2X2wrX2lubGluZV8xNl9hKl9pbmxpbmVfMTZfYTtfaW5saW5lXzE2X2Y8dGhpc19jbG9zZXN0RDImJih0aGlzX2Nsb3Nlc3REMj1faW5saW5lXzE2X2YsdGhpc19jbG9zZXN0WD1faW5saW5lXzE2X2FyZzZfWzBdLHRoaXNfY2xvc2VzdFk9X2lubGluZV8xNl9hcmc2X1sxXSl9fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMTZfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnNV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnNl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLHRoaXNWYXJzOlsidGhpc19jbG9zZXN0RDIiLCJ0aGlzX2Nsb3Nlc3RYIiwidGhpc19jbG9zZXN0WSJdLGxvY2FsVmFyczpbIl9pbmxpbmVfMTZfYSIsIl9pbmxpbmVfMTZfZiIsIl9pbmxpbmVfMTZfbCJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuW3RoaXNfY2xvc2VzdFgsdGhpc19jbG9zZXN0WSx0aGlzX2Nsb3Nlc3REMl19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19jbG9zZXN0RDIiLCJ0aGlzX2Nsb3Nlc3RYIiwidGhpc19jbG9zZXN0WSJdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6ImN3aXNlIixibG9ja1NpemU6NjR9KTtmdW5jdGlvbiBsKHQsZSxyLG4saSl7dGhpcy5jb29yZD1bdCxlXSx0aGlzLmlkPXIsdGhpcy52YWx1ZT1uLHRoaXMuZGlzdGFuY2U9aX1mdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5mYm89ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMuX3JlYWRUaW1lb3V0PW51bGw7dmFyIG49dGhpczt0aGlzLl9yZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtuLmdsJiYoZS5iaW5kKCksdC5yZWFkUGl4ZWxzKDAsMCxlLnNoYXBlWzBdLGUuc2hhcGVbMV0sdC5SR0JBLHQuVU5TSUdORURfQllURSxuLmJ1ZmZlciksbi5fcmVhZFRpbWVvdXQ9bnVsbCl9fXZhciB1PWMucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LCJzaGFwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdsP3RoaXMuZmJvLnNoYXBlLnNsaWNlKCk6WzAsMF19LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmdsKXt0aGlzLmZiby5zaGFwZT10O3ZhciBlPXRoaXMuZmJvLnNoYXBlWzBdLHI9dGhpcy5mYm8uc2hhcGVbMV07aWYociplKjQ+dGhpcy5idWZmZXIubGVuZ3RoKXtpLmZyZWUodGhpcy5idWZmZXIpO2Zvcih2YXIgbj10aGlzLmJ1ZmZlcj1pLm1hbGxvY1VpbnQ4KG8ociplKjQpKSxhPTA7YTxyKmUqNDsrK2EpblthXT0yNTV9cmV0dXJuIHR9fX0pLHUuYmVnaW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3RoaXMuc2hhcGU7dCYmKHRoaXMuZmJvLmJpbmQoKSx0LmNsZWFyQ29sb3IoMSwxLDEsMSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKSl9LHUuZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0JiYodC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0aGlzLl9yZWFkVGltZW91dHx8Y2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSx0aGlzLl9yZWFkVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX3JlYWRDYWxsYmFjaywxKSl9LHUucXVlcnk9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLmdsKXJldHVybiBudWxsO3ZhciBuPXRoaXMuZmJvLnNoYXBlLnNsaWNlKCk7dHw9MCxlfD0wLCJudW1iZXIiIT10eXBlb2YgciYmKHI9MSk7dmFyIGk9MHxNYXRoLm1pbihNYXRoLm1heCh0LXIsMCksblswXSksbz0wfE1hdGgubWluKE1hdGgubWF4KHQrciwwKSxuWzBdKSxjPTB8TWF0aC5taW4oTWF0aC5tYXgoZS1yLDApLG5bMV0pLHU9MHxNYXRoLm1pbihNYXRoLm1heChlK3IsMCksblsxXSk7aWYobzw9aXx8dTw9YylyZXR1cm4gbnVsbDt2YXIgZj1bby1pLHUtY10saD1hKHRoaXMuYnVmZmVyLFtmWzBdLGZbMV0sNF0sWzQsNCpuWzBdLDFdLDQqKGkrblswXSpjKSkscD1zKGguaGkoZlswXSxmWzFdLDEpLHIsciksZD1wWzBdLGc9cFsxXTtyZXR1cm4gZDwwfHxNYXRoLnBvdyh0aGlzLnJhZGl1cywyKTxwWzJdP251bGw6bmV3IGwoZCtpfDAsZytjfDAsaC5nZXQoZCxnLDApLFtoLmdldChkLGcsMSksaC5nZXQoZCxnLDIpLGguZ2V0KGQsZywzKV0sTWF0aC5zcXJ0KHBbMl0pKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbCYmKHRoaXMuZmJvLmRpc3Bvc2UoKSxpLmZyZWUodGhpcy5idWZmZXIpLHRoaXMuZ2w9bnVsbCx0aGlzLl9yZWFkVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSl9fSx7ImJpdC10d2lkZGxlIjo4MiwiY3dpc2UvbGliL3dyYXBwZXIiOjEzOSwiZ2wtZmJvIjoyNDUsbmRhcnJheTo0NDIsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sMjk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NyZWF0ZS11bmlmb3JtcyIpLGk9dCgiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiKSxhPXQoIi4vbGliL3JlZmxlY3QiKSxvPXQoIi4vbGliL3NoYWRlci1jYWNoZSIpLHM9dCgiLi9saWIvcnVudGltZS1yZWZsZWN0IiksbD10KCIuL2xpYi9HTEVycm9yIik7ZnVuY3Rpb24gYyh0KXt0aGlzLmdsPXQsdGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9MCx0aGlzLl92cmVmPXRoaXMuX2ZyZWY9dGhpcy5fcmVsaW5rPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuYXR0cmlidXRlcz10aGlzLnVuaWZvcm1zPXRoaXMudHlwZXM9bnVsbH12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQubmFtZTxlLm5hbWU/LTE6MX11LmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLnByb2dyYW18fHRoaXMuX3JlbGluaygpO3ZhciBlPXRoaXMuZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sdGhpcy5nbC5BQ1RJVkVfQVRUUklCVVRFUykscj10aGlzLmdsLmxhc3RBdHRyaWJDb3VudDtpZihlPnIpZm9yKHQ9cjt0PGU7dCsrKXRoaXMuZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodCk7ZWxzZSBpZihyPmUpZm9yKHQ9ZTt0PHI7dCsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PWUsdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdsLmxhc3RBdHRyaWJDb3VudCxlPTA7ZTx0O2UrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX2ZyZWYmJnRoaXMuX2ZyZWYuZGlzcG9zZSgpLHRoaXMuX3ZyZWYmJnRoaXMuX3ZyZWYuZGlzcG9zZSgpLHRoaXMuYXR0cmlidXRlcz10aGlzLnR5cGVzPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuX3JlbGluaz10aGlzLl9mcmVmPXRoaXMuX3ZyZWY9bnVsbH0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsYyl7aWYoIWV8fDE9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgdT10O3Q9dS52ZXJ0ZXgsZT11LmZyYWdtZW50LHI9dS51bmlmb3JtcyxjPXUuYXR0cmlidXRlc312YXIgaD10aGlzLHA9aC5nbCxkPWguX3ZyZWY7aC5fdnJlZj1vLnNoYWRlcihwLHAuVkVSVEVYX1NIQURFUix0KSxkJiZkLmRpc3Bvc2UoKSxoLnZlcnRTaGFkZXI9aC5fdnJlZi5zaGFkZXI7dmFyIGc9dGhpcy5fZnJlZjtpZihoLl9mcmVmPW8uc2hhZGVyKHAscC5GUkFHTUVOVF9TSEFERVIsZSksZyYmZy5kaXNwb3NlKCksaC5mcmFnU2hhZGVyPWguX2ZyZWYuc2hhZGVyLCFyfHwhYyl7dmFyIHY9cC5jcmVhdGVQcm9ncmFtKCk7aWYocC5hdHRhY2hTaGFkZXIodixoLmZyYWdTaGFkZXIpLHAuYXR0YWNoU2hhZGVyKHYsaC52ZXJ0U2hhZGVyKSxwLmxpbmtQcm9ncmFtKHYpLCFwLmdldFByb2dyYW1QYXJhbWV0ZXIodixwLkxJTktfU1RBVFVTKSl7dmFyIG09cC5nZXRQcm9ncmFtSW5mb0xvZyh2KTt0aHJvdyBuZXcgbChtLCJFcnJvciBsaW5raW5nIHByb2dyYW06IittKX1yPXJ8fHMudW5pZm9ybXMocCx2KSxjPWN8fHMuYXR0cmlidXRlcyhwLHYpLHAuZGVsZXRlUHJvZ3JhbSh2KX0oYz1jLnNsaWNlKCkpLnNvcnQoZik7dmFyIHkseD1bXSxiPVtdLF89W107Zm9yKHk9MDt5PGMubGVuZ3RoOysreSl7dmFyIHc9Y1t5XTtpZih3LnR5cGUuaW5kZXhPZigibWF0Iik+PTApe2Zvcih2YXIgaz0wfHcudHlwZS5jaGFyQXQody50eXBlLmxlbmd0aC0xKSxUPW5ldyBBcnJheShrKSxBPTA7QTxrOysrQSlUW0FdPV8ubGVuZ3RoLGIucHVzaCh3Lm5hbWUrIlsiK0ErIl0iKSwibnVtYmVyIj09dHlwZW9mIHcubG9jYXRpb24/Xy5wdXNoKHcubG9jYXRpb24rQSk6QXJyYXkuaXNBcnJheSh3LmxvY2F0aW9uKSYmdy5sb2NhdGlvbi5sZW5ndGg9PT1rJiYibnVtYmVyIj09dHlwZW9mIHcubG9jYXRpb25bQV0/Xy5wdXNoKDB8dy5sb2NhdGlvbltBXSk6Xy5wdXNoKC0xKTt4LnB1c2goe25hbWU6dy5uYW1lLHR5cGU6dy50eXBlLGxvY2F0aW9uczpUfSl9ZWxzZSB4LnB1c2goe25hbWU6dy5uYW1lLHR5cGU6dy50eXBlLGxvY2F0aW9uczpbXy5sZW5ndGhdfSksYi5wdXNoKHcubmFtZSksIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uP18ucHVzaCgwfHcubG9jYXRpb24pOl8ucHVzaCgtMSl9dmFyIE09MDtmb3IoeT0wO3k8Xy5sZW5ndGg7Kyt5KWlmKF9beV08MCl7Zm9yKDtfLmluZGV4T2YoTSk+PTA7KU0rPTE7X1t5XT1NfXZhciBTPW5ldyBBcnJheShyLmxlbmd0aCk7ZnVuY3Rpb24gRSgpe2gucHJvZ3JhbT1vLnByb2dyYW0ocCxoLl92cmVmLGguX2ZyZWYsYixfKTtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClTW3RdPXAuZ2V0VW5pZm9ybUxvY2F0aW9uKGgucHJvZ3JhbSxyW3RdLm5hbWUpfUUoKSxoLl9yZWxpbms9RSxoLnR5cGVzPXt1bmlmb3JtczphKHIpLGF0dHJpYnV0ZXM6YShjKX0saC5hdHRyaWJ1dGVzPWkocCxoLHgsXyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInVuaWZvcm1zIixuKHAsaCxyLFMpKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bmV3IGModCk7cmV0dXJuIGEudXBkYXRlKGUscixuLGkpLGF9fSx7Ii4vbGliL0dMRXJyb3IiOjI5OCwiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiOjI5OSwiLi9saWIvY3JlYXRlLXVuaWZvcm1zIjozMDAsIi4vbGliL3JlZmxlY3QiOjMwMSwiLi9saWIvcnVudGltZS1yZWZsZWN0IjozMDIsIi4vbGliL3NoYWRlci1jYWNoZSI6MzAzfV0sMjk4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zaG9ydE1lc3NhZ2U9ZXx8IiIsdGhpcy5sb25nTWVzc2FnZT1yfHwiIix0aGlzLnJhd0Vycm9yPXR8fCIiLHRoaXMubWVzc2FnZT0iZ2wtc2hhZGVyOiAiKyhlfHx0fHwiIikrKHI/IlxuIityOiIiKSx0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfW4ucHJvdG90eXBlPW5ldyBFcnJvcixuLnByb3RvdHlwZS5uYW1lPSJHTEVycm9yIixuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLGUuZXhwb3J0cz1ufSx7fV0sMjk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIGE9e30sbD0wLGM9ci5sZW5ndGg7bDxjOysrbCl7dmFyIHU9cltsXSxmPXUubmFtZSxoPXUudHlwZSxwPXUubG9jYXRpb25zO3N3aXRjaChoKXtjYXNlImJvb2wiOmNhc2UiaW50IjpjYXNlImZsb2F0IjpvKHQsZSxwWzBdLGksMSxhLGYpO2JyZWFrO2RlZmF1bHQ6aWYoaC5pbmRleE9mKCJ2ZWMiKT49MCl7dmFyIGQ9aC5jaGFyQ29kZUF0KGgubGVuZ3RoLTEpLTQ4O2lmKGQ8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO28odCxlLHBbMF0saSxkLGEsZil9ZWxzZXtpZighKGguaW5kZXhPZigibWF0Iik+PTApKXRocm93IG5ldyBuKCIiLCJVbmtub3duIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO3ZhciBkPWguY2hhckNvZGVBdChoLmxlbmd0aC0xKS00ODtpZihkPDJ8fGQ+NCl0aHJvdyBuZXcgbigiIiwiSW52YWxpZCBkYXRhIHR5cGUgZm9yIGF0dHJpYnV0ZSAiK2YrIjogIitoKTtzKHQsZSxwLGksZCxhLGYpfX19cmV0dXJuIGF9O3ZhciBuPXQoIi4vR0xFcnJvciIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEpe3RoaXMuX2dsPXQsdGhpcy5fd3JhcHBlcj1lLHRoaXMuX2luZGV4PXIsdGhpcy5fbG9jYXRpb25zPW4sdGhpcy5fZGltZW5zaW9uPWksdGhpcy5fY29uc3RGdW5jPWF9dmFyIGE9aS5wcm90b3R5cGU7ZnVuY3Rpb24gbyh0LGUscixuLGEsbyxzKXtmb3IodmFyIGw9WyJnbCIsInYiXSxjPVtdLHU9MDt1PGE7Kyt1KWwucHVzaCgieCIrdSksYy5wdXNoKCJ4Iit1KTtsLnB1c2goImlmKHgwLmxlbmd0aD09PXZvaWQgMCl7cmV0dXJuIGdsLnZlcnRleEF0dHJpYiIrYSsiZih2LCIrYy5qb2luKCkrIil9ZWxzZXtyZXR1cm4gZ2wudmVydGV4QXR0cmliIithKyJmdih2LHgwKX0iKTt2YXIgZj1GdW5jdGlvbi5hcHBseShudWxsLGwpLGg9bmV3IGkodCxlLHIsbixhLGYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHMse3NldDpmdW5jdGlvbihlKXtyZXR1cm4gdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobltyXSksZih0LG5bcl0sZSksZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGh9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhLHMpe2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1uZXcgQXJyYXkoaSksdT0wO3U8aTsrK3Upbyh0LGUsclt1XSxuLGksbCx1KSxjW3VdPWxbdV07T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxvY2F0aW9uIix7c2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXRbZV07ZWxzZSBmb3IoZT0wO2U8aTsrK2UpY1tlXS5sb2NhdGlvbj10K2U7cmV0dXJuIHR9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoaSksZT0wO2U8aTsrK2UpdFtlXT1uW3JbZV1dO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksbC5wb2ludGVyPWZ1bmN0aW9uKGUsYSxvLHMpe2U9ZXx8dC5GTE9BVCxhPSEhYSxvPW98fGkqaSxzPXN8fDA7Zm9yKHZhciBsPTA7bDxpOysrbCl7dmFyIGM9bltyW2xdXTt0LnZlcnRleEF0dHJpYlBvaW50ZXIoYyxpLGUsYSxvLHMrbCppKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpfX07dmFyIGY9bmV3IEFycmF5KGkpLGg9dFsidmVydGV4QXR0cmliIitpKyJmdiJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHMse3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGE9MDthPGk7KythKXt2YXIgbz1uW3JbYV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpaC5jYWxsKHQsbyxlW2FdKTtlbHNle2Zvcih2YXIgcz0wO3M8aTsrK3MpZltzXT1lW2kqYStzXTtoLmNhbGwodCxvLGYpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX1hLnBvaW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZ2wsYT10aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdO2kudmVydGV4QXR0cmliUG9pbnRlcihhLHRoaXMuX2RpbWVuc2lvbix0fHxpLkZMT0FULCEhZSxyfHwwLG58fDApLGkuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSl9LGEuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF0mJih0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdPTB8dCx0aGlzLl93cmFwcGVyLnByb2dyYW09bnVsbCksMHx0fX0pfSx7Ii4vR0xFcnJvciI6Mjk4fV0sMzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcmVmbGVjdCIpLGk9dCgiLi9HTEVycm9yIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJ5IiwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHl9IikodCl9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHQsZSxyKXtzd2l0Y2gocil7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOnJldHVybiJnbC51bmlmb3JtMWkobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2Nhc2UiZmxvYXQiOnJldHVybiJnbC51bmlmb3JtMWYobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2RlZmF1bHQ6dmFyIG49ci5pbmRleE9mKCJ2ZWMiKTtpZighKDA8PW4mJm48PTEmJnIubGVuZ3RoPT09NCtuKSl7aWYoMD09PXIuaW5kZXhPZigibWF0IikmJjQ9PT1yLmxlbmd0aCl7dmFyIGE9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpLTQ4O2lmKGE8Mnx8YT40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCAiK25hbWUrIjogIityKTtyZXR1cm4iZ2wudW5pZm9ybU1hdHJpeCIrYSsiZnYobG9jYXRpb25zWyIrZSsiXSxmYWxzZSxvYmoiK3QrIikifXRocm93IG5ldyBpKCIiLCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciAiK25hbWUrIjogIityKX12YXIgYT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSktNDg7aWYoYTwyfHxhPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgZGF0YSB0eXBlIik7c3dpdGNoKHIuY2hhckF0KDApKXtjYXNlImIiOmNhc2UiaSI6cmV0dXJuImdsLnVuaWZvcm0iK2ErIml2KGxvY2F0aW9uc1siK2UrIl0sb2JqIit0KyIpIjtjYXNlInYiOnJldHVybiJnbC51bmlmb3JtIithKyJmdihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7ZGVmYXVsdDp0aHJvdyBuZXcgaSgiIiwiVW5yZWNvZ25pemVkIGRhdGEgdHlwZSBmb3IgdmVjdG9yICIrbmFtZSsiOiAiK3IpfX19ZnVuY3Rpb24gYyhlKXtmb3IodmFyIG49WyJyZXR1cm4gZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqKXsiXSxpPWZ1bmN0aW9uIHQoZSxyKXtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuW1tlLHJdXTt2YXIgbj1bXTtmb3IodmFyIGkgaW4gcil7dmFyIGE9cltpXSxvPWU7cGFyc2VJbnQoaSkrIiI9PT1pP28rPSJbIitpKyJdIjpvKz0iLiIraSwib2JqZWN0Ij09dHlwZW9mIGE/bi5wdXNoLmFwcGx5KG4sdChvLGEpKTpuLnB1c2goW28sYV0pfXJldHVybiBufSgiIixlKSxhPTA7YTxpLmxlbmd0aDsrK2Epe3ZhciBvPWlbYV0sYz1vWzBdLHU9b1sxXTtzW3VdJiZuLnB1c2gobChjLHUsclt1XS50eXBlKSl9bi5wdXNoKCJyZXR1cm4gb2JqfSIpO3ZhciBmPW5ldyBGdW5jdGlvbigiZ2wiLCJsb2NhdGlvbnMiLG4uam9pbigiXG4iKSk7cmV0dXJuIGYodCxzKX1mdW5jdGlvbiB1KG4sbCx1KXtpZigib2JqZWN0Ij09dHlwZW9mIHUpe3ZhciBoPWYodSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sbCx7Z2V0OmEoaCksc2V0OmModSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KX1lbHNlIHNbdV0/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sbCx7Z2V0OihwPXUsbmV3IEZ1bmN0aW9uKCJnbCIsIndyYXBwZXIiLCJsb2NhdGlvbnMiLCJyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2wuZ2V0VW5pZm9ybSh3cmFwcGVyLnByb2dyYW0sbG9jYXRpb25zWyIrcCsiXSl9IikodCxlLHMpKSxzZXQ6Yyh1KSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pOm5bbF09ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiYm9vbCI6cmV0dXJuITE7Y2FzZSJpbnQiOmNhc2Uic2FtcGxlcjJEIjpjYXNlInNhbXBsZXJDdWJlIjpjYXNlImZsb2F0IjpyZXR1cm4gMDtkZWZhdWx0OnZhciBlPXQuaW5kZXhPZigidmVjIik7aWYoMDw9ZSYmZTw9MSYmdC5sZW5ndGg9PT00K2Upe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9vKHIsITEpOm8ociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDg7aWYocjwyfHxyPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3QpO3JldHVybiBvKHIqciwwKX10aHJvdyBuZXcgaSgiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrdCl9fShyW3VdLnR5cGUpO3ZhciBwfWZ1bmN0aW9uIGYodCl7dmFyIGU7aWYoQXJyYXkuaXNBcnJheSh0KSl7ZT1uZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXUoZSxyLHRbcl0pfWVsc2UgZm9yKHZhciBuIGluIGU9e30sdCl1KGUsbix0W25dKTtyZXR1cm4gZX12YXIgaD1uKHIsITApO3JldHVybntnZXQ6YShmKGgpKSxzZXQ6YyhoKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19fSx7Ii4vR0xFcnJvciI6Mjk4LCIuL3JlZmxlY3QiOjMwMX1dLDMwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLm5hbWUsYT1pLnNwbGl0KCIuIiksbz1yLHM9MDtzPGEubGVuZ3RoOysrcyl7dmFyIGw9YVtzXS5zcGxpdCgiWyIpO2lmKGwubGVuZ3RoPjEpe2xbMF1pbiBvfHwob1tsWzBdXT1bXSksbz1vW2xbMF1dO2Zvcih2YXIgYz0xO2M8bC5sZW5ndGg7KytjKXt2YXIgdT1wYXJzZUludChsW2NdKTtjPGwubGVuZ3RoLTF8fHM8YS5sZW5ndGgtMT8odSBpbiBvfHwoYzxsLmxlbmd0aC0xP29bdV09W106b1t1XT17fSksbz1vW3VdKTpvW3VdPWU/bjp0W25dLnR5cGV9fWVsc2UgczxhLmxlbmd0aC0xPyhsWzBdaW4gb3x8KG9bbFswXV09e30pLG89b1tsWzBdXSk6b1tsWzBdXT1lP246dFtuXS50eXBlfXJldHVybiByfX0se31dLDMwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHQuQUNUSVZFX1VOSUZPUk1TKSxuPVtdLGk9MDtpPHI7KytpKXt2YXIgbz10LmdldEFjdGl2ZVVuaWZvcm0oZSxpKTtpZihvKXt2YXIgcz1hKHQsby50eXBlKTtpZihvLnNpemU+MSlmb3IodmFyIGw9MDtsPG8uc2l6ZTsrK2wpbi5wdXNoKHtuYW1lOm8ubmFtZS5yZXBsYWNlKCJbMF0iLCJbIitsKyJdIiksdHlwZTpzfSk7ZWxzZSBuLnB1c2goe25hbWU6by5uYW1lLHR5cGU6c30pfX1yZXR1cm4gbn0sci5hdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHQuQUNUSVZFX0FUVFJJQlVURVMpLG49W10saT0wO2k8cjsrK2kpe3ZhciBvPXQuZ2V0QWN0aXZlQXR0cmliKGUsaSk7byYmbi5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOmEodCxvLnR5cGUpfSl9cmV0dXJuIG59O3ZhciBuPXtGTE9BVDoiZmxvYXQiLEZMT0FUX1ZFQzI6InZlYzIiLEZMT0FUX1ZFQzM6InZlYzMiLEZMT0FUX1ZFQzQ6InZlYzQiLElOVDoiaW50IixJTlRfVkVDMjoiaXZlYzIiLElOVF9WRUMzOiJpdmVjMyIsSU5UX1ZFQzQ6Iml2ZWM0IixCT09MOiJib29sIixCT09MX1ZFQzI6ImJ2ZWMyIixCT09MX1ZFQzM6ImJ2ZWMzIixCT09MX1ZFQzQ6ImJ2ZWM0IixGTE9BVF9NQVQyOiJtYXQyIixGTE9BVF9NQVQzOiJtYXQzIixGTE9BVF9NQVQ0OiJtYXQ0IixTQU1QTEVSXzJEOiJzYW1wbGVyMkQiLFNBTVBMRVJfQ1VCRToic2FtcGxlckN1YmUifSxpPW51bGw7ZnVuY3Rpb24gYSh0LGUpe2lmKCFpKXt2YXIgcj1PYmplY3Qua2V5cyhuKTtpPXt9O2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbz1yW2FdO2lbdFtvXV09bltvXX19cmV0dXJuIGlbZV19fSx7fV0sMzAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3Iuc2hhZGVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdSh0KS5nZXRTaGFkZXJSZWZlcmVuY2UoZSxyKX0sci5wcm9ncmFtPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHUodCkuZ2V0UHJvZ3JhbShlLHIsbixpKX07dmFyIG49dCgiLi9HTEVycm9yIiksaT10KCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiKSxhPW5ldygidW5kZWZpbmVkIj09dHlwZW9mIFdlYWtNYXA/dCgid2Vha21hcC1zaGltIik6V2Vha01hcCksbz0wO2Z1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dGhpcy5pZD10LHRoaXMuc3JjPWUsdGhpcy50eXBlPXIsdGhpcy5zaGFkZXI9bix0aGlzLmNvdW50PWEsdGhpcy5wcm9ncmFtcz1bXSx0aGlzLmNhY2hlPW99ZnVuY3Rpb24gbCh0KXt0aGlzLmdsPXQsdGhpcy5zaGFkZXJzPVt7fSx7fV0sdGhpcy5wcm9ncmFtcz17fX1zLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoMD09LS10aGlzLmNvdW50KXtmb3IodmFyIHQ9dGhpcy5jYWNoZSxlPXQuZ2wscj10aGlzLnByb2dyYW1zLG49MCxpPXIubGVuZ3RoO248aTsrK24pe3ZhciBhPXQucHJvZ3JhbXNbcltuXV07YSYmKGRlbGV0ZSB0LnByb2dyYW1zW25dLGUuZGVsZXRlUHJvZ3JhbShhKSl9ZS5kZWxldGVTaGFkZXIodGhpcy5zaGFkZXIpLGRlbGV0ZSB0LnNoYWRlcnNbdGhpcy50eXBlPT09ZS5GUkFHTUVOVF9TSEFERVJ8MF1bdGhpcy5zcmNdfX07dmFyIGM9bC5wcm90b3R5cGU7ZnVuY3Rpb24gdSh0KXt2YXIgZT1hLmdldCh0KTtyZXR1cm4gZXx8KGU9bmV3IGwodCksYS5zZXQodCxlKSksZX1jLmdldFNoYWRlclJlZmVyZW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2wsYT10aGlzLnNoYWRlcnNbdD09PXIuRlJBR01FTlRfU0hBREVSfDBdLGw9YVtlXTtpZihsJiZyLmlzU2hhZGVyKGwuc2hhZGVyKSlsLmNvdW50Kz0xO2Vsc2V7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuY3JlYXRlU2hhZGVyKGUpO2lmKHQuc2hhZGVyU291cmNlKGEsciksdC5jb21waWxlU2hhZGVyKGEpLCF0LmdldFNoYWRlclBhcmFtZXRlcihhLHQuQ09NUElMRV9TVEFUVVMpKXt2YXIgbz10LmdldFNoYWRlckluZm9Mb2coYSk7dHJ5e3ZhciBzPWkobyxyLGUpfWNhdGNoKHQpe3Rocm93IGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZvcm1hdCBjb21waWxlciBlcnJvcjogIit0KSxuZXcgbihvLCJFcnJvciBjb21waWxpbmcgc2hhZGVyOlxuIitvKX10aHJvdyBuZXcgbihvLHMuc2hvcnQscy5sb25nKX1yZXR1cm4gYX0ocix0LGUpO2w9YVtlXT1uZXcgcyhvKyssZSx0LGMsW10sMSx0aGlzKX1yZXR1cm4gbH0sYy5nZXRQcm9ncmFtPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPVt0LmlkLGUuaWQsci5qb2luKCI6IiksaS5qb2luKCI6IildLmpvaW4oIkAiKSxvPXRoaXMucHJvZ3JhbXNbYV07cmV0dXJuIG8mJnRoaXMuZ2wuaXNQcm9ncmFtKG8pfHwodGhpcy5wcm9ncmFtc1thXT1vPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89dC5jcmVhdGVQcm9ncmFtKCk7dC5hdHRhY2hTaGFkZXIobyxlKSx0LmF0dGFjaFNoYWRlcihvLHIpO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7KytzKXQuYmluZEF0dHJpYkxvY2F0aW9uKG8sYVtzXSxpW3NdKTtpZih0LmxpbmtQcm9ncmFtKG8pLCF0LmdldFByb2dyYW1QYXJhbWV0ZXIobyx0LkxJTktfU1RBVFVTKSl7dmFyIGw9dC5nZXRQcm9ncmFtSW5mb0xvZyhvKTt0aHJvdyBuZXcgbihsLCJFcnJvciBsaW5raW5nIHByb2dyYW06ICIrbCl9cmV0dXJuIG99KHRoaXMuZ2wsdC5zaGFkZXIsZS5zaGFkZXIscixpKSx0LnByb2dyYW1zLnB1c2goYSksZS5wcm9ncmFtcy5wdXNoKGEpKSxvfX0seyIuL0dMRXJyb3IiOjI5OCwiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIjoyNDYsIndlYWttYXAtc2hpbSI6NTM5fV0sMzA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5wbG90PXQsdGhpcy5lbmFibGU9WyEwLCEwLCExLCExXSx0aGlzLndpZHRoPVsxLDEsMSwxXSx0aGlzLmNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuY2VudGVyPVsxLzAsMS8wXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbih0KTtyZXR1cm4gci51cGRhdGUoZSksdC5hZGRPdmVybGF5KHIpLHJ9O3ZhciBpPW4ucHJvdG90eXBlO2kudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5lbmFibGU9KHQuZW5hYmxlfHxbITAsITAsITEsITFdKS5zbGljZSgpLHRoaXMud2lkdGg9KHQud2lkdGh8fFsxLDEsMSwxXSkuc2xpY2UoKSx0aGlzLmNvbG9yPSh0LmNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KSx0aGlzLmNlbnRlcj0odC5jZW50ZXJ8fFsxLzAsMS8wXSkuc2xpY2UoKSx0aGlzLnBsb3Quc2V0T3ZlcmxheURpcnR5KCl9LGkuZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZW5hYmxlLGU9dGhpcy53aWR0aCxyPXRoaXMuY29sb3Isbj10aGlzLmNlbnRlcixpPXRoaXMucGxvdCxhPWkubGluZSxvPWkuZGF0YUJveCxzPWkudmlld0JveDtpZihhLmJpbmQoKSxvWzBdPD1uWzBdJiZuWzBdPD1vWzJdJiZvWzFdPD1uWzFdJiZuWzFdPD1vWzNdKXt2YXIgbD1zWzBdKyhuWzBdLW9bMF0pLyhvWzJdLW9bMF0pKihzWzJdLXNbMF0pLGM9c1sxXSsoblsxXS1vWzFdKS8ob1szXS1vWzFdKSooc1szXS1zWzFdKTt0WzBdJiZhLmRyYXdMaW5lKGwsYyxzWzBdLGMsZVswXSxyWzBdKSx0WzFdJiZhLmRyYXdMaW5lKGwsYyxsLHNbMV0sZVsxXSxyWzFdKSx0WzJdJiZhLmRyYXdMaW5lKGwsYyxzWzJdLGMsZVsyXSxyWzJdKSx0WzNdJiZhLmRyYXdMaW5lKGwsYyxsLHNbM10sZVszXSxyWzNdKX19LGkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0se31dLDMwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjb29yZGluYXRlc1szXTtcbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIHZlcnRleFBvc2l0aW9uID0gbWl4KGNvb3JkaW5hdGVzWzBdLFxuICAgIG1peChjb29yZGluYXRlc1syXSwgY29vcmRpbmF0ZXNbMV0sIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpLCBhYnMocG9zaXRpb24pKTtcblxuICB2ZWM0IGNsaXBQb3MgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNCh2ZXJ0ZXhQb3NpdGlvbiwgMS4wKTtcbiAgdmVjMiBjbGlwT2Zmc2V0ID0gKHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGNvbG9yLCAwLjApKS54eTtcbiAgdmVjMiBkZWx0YSA9IHdlaWdodCAqIGNsaXBPZmZzZXQgKiBzY3JlZW5TaGFwZTtcbiAgdmVjMiBsaW5lT2Zmc2V0ID0gbm9ybWFsaXplKHZlYzIoZGVsdGEueSwgLWRlbHRhLngpKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uICAgPSB2ZWM0KGNsaXBQb3MueHkgKyBjbGlwUG9zLncgKiAwLjUgKiBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0LCBjbGlwUG9zLnosIGNsaXBQb3Mudyk7XG4gIGZyYWdDb2xvciAgICAgPSBjb2xvci54ICogY29sb3JzWzBdICsgY29sb3IueSAqIGNvbG9yc1sxXSArIGNvbG9yLnogKiBjb2xvcnNbMl07XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn0iXSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjMyJ9LHtuYW1lOiJ3ZWlnaHQiLHR5cGU6ImZsb2F0In1dKX19LHsiZ2wtc2hhZGVyIjoyOTcsZ2xzbGlmeTo0MDF9XSwzMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycy9pbmRleCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Z1bmN0aW9uIG8odCxlLG4saSxhLG8pe3ZhciBzPVt0LGUsbiwwLDAsMCwxXTtzW2krM109MSxzW2ldPWEsci5wdXNoLmFwcGx5KHIscyksc1s2XT0tMSxyLnB1c2guYXBwbHkocixzKSxzW2ldPW8sci5wdXNoLmFwcGx5KHIscyksci5wdXNoLmFwcGx5KHIscyksc1s2XT0xLHIucHVzaC5hcHBseShyLHMpLHNbaV09YSxyLnB1c2guYXBwbHkocixzKX1vKDAsMCwwLDAsMCwxKSxvKDAsMCwwLDEsMCwxKSxvKDAsMCwwLDIsMCwxKSxvKDEsMCwwLDEsLTEsMSksbygxLDAsMCwyLC0xLDEpLG8oMCwxLDAsMCwtMSwxKSxvKDAsMSwwLDIsLTEsMSksbygwLDAsMSwwLC0xLDEpLG8oMCwwLDEsMSwtMSwxKTt2YXIgbD1uKHQsciksYz1pKHQsW3t0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZToyOH1dKSx1PWEodCk7dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsdS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsdS5hdHRyaWJ1dGVzLndlaWdodC5sb2NhdGlvbj0yO3ZhciBmPW5ldyBzKHQsbCxjLHUpO3JldHVybiBmLnVwZGF0ZShlKSxmfTt2YXIgbz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMWUzLC0xZTMsLTFlM10sWzFlMywxZTMsMWUzXV0sdGhpcy5wb3NpdGlvbj1bMCwwLDBdLHRoaXMubGluZVdpZHRoPVsyLDIsMl0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMuYXhlcz1udWxsfXZhciBsPXMucHJvdG90eXBlLGM9WzAsMCwwXSx1PVswLDAsMF0sZj1bMCwwXTtsLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fSxsLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMudmFvLG49dGhpcy5zaGFkZXI7ci5iaW5kKCksbi5iaW5kKCk7dmFyIGksYT10Lm1vZGVsfHxvLHM9dC52aWV3fHxvLGw9dC5wcm9qZWN0aW9ufHxvO3RoaXMuYXhlcyYmKGk9dGhpcy5heGVzLmxhc3RDdWJlUHJvcHMuYXhpcyk7Zm9yKHZhciBoPWMscD11LGQ9MDtkPDM7KytkKWkmJmlbZF08MD8oaFtkXT10aGlzLmJvdW5kc1swXVtkXSxwW2RdPXRoaXMuYm91bmRzWzFdW2RdKTooaFtkXT10aGlzLmJvdW5kc1sxXVtkXSxwW2RdPXRoaXMuYm91bmRzWzBdW2RdKTtmWzBdPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09ZS5kcmF3aW5nQnVmZmVySGVpZ2h0LG4udW5pZm9ybXMubW9kZWw9YSxuLnVuaWZvcm1zLnZpZXc9cyxuLnVuaWZvcm1zLnByb2plY3Rpb249bCxuLnVuaWZvcm1zLmNvb3JkaW5hdGVzPVt0aGlzLnBvc2l0aW9uLGgscF0sbi51bmlmb3Jtcy5jb2xvcnM9dGhpcy5jb2xvcnMsbi51bmlmb3Jtcy5zY3JlZW5TaGFwZT1mO2ZvcihkPTA7ZDwzOysrZCluLnVuaWZvcm1zLmxpbmVXaWR0aD10aGlzLmxpbmVXaWR0aFtkXSp0aGlzLnBpeGVsUmF0aW8sdGhpcy5lbmFibGVkW2RdJiYoci5kcmF3KGUuVFJJQU5HTEVTLDYsNipkKSx0aGlzLmRyYXdTaWRlc1tkXSYmci5kcmF3KGUuVFJJQU5HTEVTLDEyLDE4KzEyKmQpKTtyLnVuYmluZCgpfSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0JiYoImJvdW5kcyJpbiB0JiYodGhpcy5ib3VuZHM9dC5ib3VuZHMpLCJwb3NpdGlvbiJpbiB0JiYodGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImNvbG9ycyJpbiB0JiYodGhpcy5jb2xvcnM9dC5jb2xvcnMpLCJlbmFibGVkImluIHQmJih0aGlzLmVuYWJsZWQ9dC5lbmFibGVkKSwiZHJhd1NpZGVzImluIHQmJih0aGlzLmRyYXdTaWRlcz10LmRyYXdTaWRlcykpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4IjozMDUsImdsLWJ1ZmZlciI6MjM3LCJnbC12YW8iOjMxOX1dLDMwNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgdHViZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSB0dWJlIHJpbmcgd2l0aCBpdHMgY2VudGVyIGF0IG9yaWdpbiwgcmFkaXVzIG9mIGxlbmd0aChkKSwgcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiBkLlxuLy9cbi8vIEVhY2ggdHViZSBzZWdtZW50IGlzIG1hZGUgdXAgb2YgYSByaW5nIG9mIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSB0dWJlIGJ5IGNvbm5lY3RpbmcgdGhlbSB0b2dldGhlciBpbiB0aGUgdmVydGV4IGFycmF5LlxuLy8gVGhlIGluZGV4ZXMgb2YgdHViZSBzZWdtZW50cyBydW4gZnJvbSAwIHRvIDguXG4vL1xudmVjMyBnZXRUdWJlUG9zaXRpb24odmVjMyBkLCBmbG9hdCBpbmRleCwgb3V0IHZlYzMgbm9ybWFsKSB7XG4gIGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoaW5kZXggLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHYzID0geCArIHk7XG5cbiAgbm9ybWFsID0gbm9ybWFsaXplKHYzKTtcblxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yLCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZTtcbnVuaWZvcm0gZmxvYXQgdHViZVNjYWxlO1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvblxuICAgICAgICAgICAsIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YVxuICAgICAgICAgICAsIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIC8vIFNjYWxlIHRoZSB2ZWN0b3IgbWFnbml0dWRlIHRvIHN0YXkgY29uc3RhbnQgd2l0aFxuICAvLyBtb2RlbCAmIHZpZXcgY2hhbmdlcy5cbiAgdmVjMyBub3JtYWw7XG4gIHZlYzMgWFlaID0gZ2V0VHViZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKHR1YmVTY2FsZSAqIHZlY3Rvci53ICogbm9ybWFsaXplKHZlY3Rvci54eXopKSwgcG9zaXRpb24udywgbm9ybWFsKTtcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB0dWJlUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xuXG4gIC8vIHZlYzQgbV9wb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQodHViZVBvc2l0aW9uLCAxLjApO1xuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3Rpb24gKiB0X3Bvc2l0aW9uO1xuXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9kYXRhICAgICAgICAgICA9IHR1YmVQb3NpdGlvbi54eXo7XG4gIGZfcG9zaXRpb24gICAgICAgPSBwb3NpdGlvbi54eXo7XG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcbn1cbiJdKSxhPW4oWyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcblxuICAvL0ZyZXNuZWwgdGVybVxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcblxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzc1xuICAgICAgICAgICAgLCBmcmVzbmVsXG4gICAgICAgICAgICAsIGthbWJpZW50XG4gICAgICAgICAgICAsIGtkaWZmdXNlXG4gICAgICAgICAgICAsIGtzcGVjdWxhclxuICAgICAgICAgICAgLCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXG4gICAgICAgICAgICwgZl9saWdodERpcmVjdGlvblxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9kYXRhXG4gICAgICAgICAgICwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHR1YmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cbi8vXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cbi8vIFRoZSBpbmRleGVzIG9mIHR1YmUgc2VnbWVudHMgcnVuIGZyb20gMCB0byA4LlxuLy9cbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xuICBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB2MyA9IHggKyB5O1xuXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XG5cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IHR1YmVTY2FsZTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uLnh5ejtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWM0In1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWM0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In0se25hbWU6InZlY3RvciIsdHlwZToidmVjNCJ9XX19LHtnbHNsaWZ5OjQwMX1dLDMwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJnbC10ZXh0dXJlMmQiKSxzPXQoIm5vcm1hbHMiKSxsPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxjPXQoImdsLW1hdDQvaW52ZXJ0IiksdT10KCJuZGFycmF5IiksZj10KCJjb2xvcm1hcCIpLGg9dCgic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXIiKSxwPXQoInR5cGVkYXJyYXktcG9vbCIpLGQ9dCgiLi9zaGFkZXJzIiksZz1kLm1lc2hTaGFkZXIsdj1kLnBpY2tTaGFkZXIsbT1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24geSh0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxnLHYseSx4LGIsXyx3LGssVCl7dGhpcy5nbD10LHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMucGlja1NoYWRlcj1uLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9aSx0aGlzLnRyaWFuZ2xlVmVjdG9ycz1hLHRoaXMudHJpYW5nbGVDb2xvcnM9cyx0aGlzLnRyaWFuZ2xlTm9ybWFscz1jLHRoaXMudHJpYW5nbGVVVnM9bCx0aGlzLnRyaWFuZ2xlSWRzPW8sdGhpcy50cmlhbmdsZVZBTz11LHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWYsdGhpcy5lZGdlQ29sb3JzPXAsdGhpcy5lZGdlVVZzPWQsdGhpcy5lZGdlSWRzPWgsdGhpcy5lZGdlVkFPPWcsdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXYsdGhpcy5wb2ludENvbG9ycz14LHRoaXMucG9pbnRVVnM9Yix0aGlzLnBvaW50U2l6ZXM9Xyx0aGlzLnBvaW50SWRzPXksdGhpcy5wb2ludFZBTz13LHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1rLHRoaXMuY29udG91clZBTz1ULHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITEsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy50dWJlU2NhbGU9MSx0aGlzLl9tb2RlbD1tLHRoaXMuX3ZpZXc9bSx0aGlzLl9wcm9qZWN0aW9uPW0sdGhpcy5fcmVzb2x1dGlvbj1bMSwxXSx0aGlzLnBpeGVsUmF0aW89MX12YXIgeD15LnByb3RvdHlwZTtmdW5jdGlvbiBiKHQpe3ZhciBlPW4odCx2LnZlcnRleCx2LmZyYWdtZW50LG51bGwsdi5hdHRyaWJ1dGVzKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj01LGV9eC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHguaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0seC5waWNrU2xvdHM9MSx4LnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHguaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWgodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGY9Y1swXTsyPT09Yy5sZW5ndGgmJihmPWNbdV0pO2Zvcih2YXIgZD1uW2ZdWzBdLGc9bltmXVsxXSx2PWlbZl0sbT0xLXYseT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW2ddLGI9MDtiPDM7KytiKW9bcysrXT12KnlbYl0rbSp4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSx4LnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCwiY29udG91ckVuYWJsZSJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwibGlnaHRQb3NpdGlvbiJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLCJhbWJpZW50ImluIHQmJih0aGlzLmFtYmllbnRMaWdodD10LmFtYmllbnQpLCJkaWZmdXNlImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLCJzcGVjdWxhciJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLCJyb3VnaG5lc3MiaW4gdCYmKHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzKSwiZnJlc25lbCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0KXtmb3IodmFyIGU9Zih7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIGk9ZVtuXSxhPTA7YTwzOysrYSlyWzQqbithXT1pW2FdO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiB1KHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXApKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzO2lmKG4mJnImJmkpe3ZvaWQgMCE9PXQudHViZVNjYWxlJiYodGhpcy50dWJlU2NhbGU9dC50dWJlU2NhbGUpO3ZhciBhPVtdLGw9W10sYz1bXSxoPVtdLHA9W10sZD1bXSxnPVtdLHY9W10sbT1bXSx5PVtdLHg9W10sYj1bXSxfPVtdLHc9W10saz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bix0aGlzLnZlY3RvcnM9aTt2YXIgVD10LnZlcnRleE5vcm1hbHMsQT10LmNlbGxOb3JtYWxzLE09dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sUz12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhQSYmKEE9cy5mYWNlTm9ybWFscyhyLG4sUykpLEF8fFR8fChUPXMudmVydGV4Tm9ybWFscyhyLG4sTSkpO3ZhciBFPXQudmVydGV4Q29sb3JzLEM9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSx6PXQudmVydGV4VVZzLE89dC52ZXJ0ZXhJbnRlbnNpdHksST10LmNlbGxVVnMsRD10LmNlbGxJbnRlbnNpdHksUD0xLzAsUj0tMS8wO2lmKCF6JiYhSSlpZihPKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKVA9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLFI9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBGPTA7RjxPLmxlbmd0aDsrK0Ype3ZhciBCPU9bRl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX1lbHNlIGlmKEQpZm9yKEY9MDtGPEQubGVuZ3RoOysrRil7Qj1EW0ZdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9ZWxzZSBmb3IoRj0wO0Y8bi5sZW5ndGg7KytGKXtCPW5bRl1bMl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX10aGlzLmludGVuc2l0eT1PfHwoRD9mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPTA7dmFyIGE9dC5sZW5ndGg7Zm9yKGk9MDtpPGE7KytpKWZvcih2YXIgbz10W2ldLHM9MDtzPG8ubGVuZ3RoOysrcyluW29bc11dPXJbaV07cmV0dXJuIG59KHIsbi5sZW5ndGgsRCk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obikpO3ZhciBOPXQucG9pbnRTaXplcyxqPXQucG9pbnRTaXplfHwxO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihGPTA7RjxuLmxlbmd0aDsrK0YpZm9yKHZhciBWPW5bRl0sVT0wO1U8MzsrK1UpIWlzTmFOKFZbVV0pJiZpc0Zpbml0ZShWW1VdKSYmKHRoaXMuYm91bmRzWzBdW1VdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW1VdLFZbVV0pLHRoaXMuYm91bmRzWzFdW1VdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW1VdLFZbVV0pKTt2YXIgcT0wLEg9MCxHPTA7dDpmb3IoRj0wO0Y8ci5sZW5ndGg7KytGKXt2YXIgWT1yW0ZdO3N3aXRjaChZLmxlbmd0aCl7Y2FzZSAxOmZvcihWPW5bWD1ZWzBdXSxVPTA7VTwzOysrVSlpZihpc05hTihWW1VdKXx8IWlzRmluaXRlKFZbVV0pKWNvbnRpbnVlIHQ7eC5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD9iLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0sXy5wdXNoKCRbMF0sJFsxXSksTj93LnB1c2goTltYXSk6dy5wdXNoKGopLGsucHVzaChGKSxHKz0xO2JyZWFrO2Nhc2UgMjpmb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVlbVV1dO2Zvcih2YXIgVz0wO1c8MzsrK1cpaWYoaXNOYU4oVltXXSl8fCFpc0Zpbml0ZShWW1ddKSljb250aW51ZSB0fWZvcihVPTA7VTwyOysrVSl7Vj1uW1g9WVtVXV07Zy5wdXNoKFZbMF0sVlsxXSxWWzJdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/di5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOnYucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLG0ucHVzaCgkWzBdLCRbMV0pLHkucHVzaChGKX1IKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVT0wO1U8MzsrK1UpZm9yKFY9bltYPVlbVV1dLFc9MDtXPDM7KytXKWlmKGlzTmFOKFZbV10pfHwhaXNGaW5pdGUoVltXXSkpY29udGludWUgdDtmb3IoVT0wO1U8MzsrK1Upe3ZhciBYO1Y9bltYPVlbMi1VXV07YS5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pO3ZhciBaLCQsSixLPWlbWF07bC5wdXNoKEtbMF0sS1sxXSxLWzJdLEtbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD9jLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yy5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0scC5wdXNoKCRbMF0sJFsxXSksSj1UP1RbWF06QVtGXSxoLnB1c2goSlswXSxKWzFdLEpbMl0pLGQucHVzaChGKX1xKz0xfX10aGlzLnBvaW50Q291bnQ9Ryx0aGlzLmVkZ2VDb3VudD1ILHRoaXMudHJpYW5nbGVDb3VudD1xLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKHgpLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKGIpLHRoaXMucG9pbnRVVnMudXBkYXRlKF8pLHRoaXMucG9pbnRTaXplcy51cGRhdGUodyksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGspKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKGcpLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUodiksdGhpcy5lZGdlVVZzLnVwZGF0ZShtKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheSh5KSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVZlY3RvcnMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKHApLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShoKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZCkpfX0seC5kcmF3VHJhbnNwYXJlbnQ9eC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxtLG49dC52aWV3fHxtLGk9dC5wcm9qZWN0aW9ufHxtLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6bS5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUsY29udG91ckNvbG9yOnRoaXMuY29udG91ckNvbG9yLHRleHR1cmU6MH07cy5pbnZlcnNlTW9kZWw9YyhzLmludmVyc2VNb2RlbCxzLm1vZGVsKSxlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpLHRoaXMudGV4dHVyZS5iaW5kKDApO3ZhciB1PW5ldyBBcnJheSgxNik7bCh1LHMudmlldyxzLm1vZGVsKSxsKHUscy5wcm9qZWN0aW9uLHUpLGModSx1KTtmb3Iobz0wO288MzsrK28pcy5leWVQb3NpdGlvbltvXT11WzEyK29dL3VbMTVdO3ZhciBmPXVbMTVdO2ZvcihvPTA7bzwzOysrbylmKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIGg9dVsxMitvXSxwPTA7cDwzOysrcCloKz11WzQqcCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bcF07cy5saWdodFBvc2l0aW9uW29dPWgvZn1pZih0aGlzLnRyaWFuZ2xlQ291bnQ+MCl7dmFyIGQ9dGhpcy50cmlTaGFkZXI7ZC5iaW5kKCksZC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpfX0seC5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bSxuPXQudmlld3x8bSxpPXQucHJvamVjdGlvbnx8bSxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHR1YmVTY2FsZTp0aGlzLnR1YmVTY2FsZSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fSxsPXRoaXMucGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSl9LHgucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyk7cmV0dXJue2luZGV4OmUscG9zaXRpb246bixpbnRlbnNpdHk6dGhpcy5pbnRlbnNpdHlbclsxXV0sdmVsb2NpdHk6dGhpcy52ZWN0b3JzW3JbMV1dLnNsaWNlKDAsMyksZGl2ZXJnZW5jZTp0aGlzLnZlY3RvcnNbclsxXV1bM10sZGF0YUNvb3JkaW5hdGU6bn19LHguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50cmlTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZBTy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZlY3RvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHI9ZS50cmlTaGFkZXJ8fGZ1bmN0aW9uKHQpe3ZhciBlPW4odCxnLnZlcnRleCxnLmZyYWdtZW50LG51bGwsZy5hdHRyaWJ1dGVzKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj01LGV9KHQpLHM9Yih0KSxsPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7bC5nZW5lcmF0ZU1pcG1hcCgpLGwubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIsbC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGM9aSh0KSxmPWkodCksaD1pKHQpLHA9aSh0KSxkPWkodCksdj1pKHQpLG09YSh0LFt7YnVmZmVyOmMsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp2LHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOmgsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpwLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmYsdHlwZTp0LkZMT0FULHNpemU6NH1dKSx4PWkodCksXz1pKHQpLHc9aSh0KSxrPWkodCksVD1hKHQsW3tidWZmZXI6eCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmssdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Xyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSxBPWkodCksTT1pKHQpLFM9aSh0KSxFPWkodCksQz1pKHQpLEw9YSh0LFt7YnVmZmVyOkEsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpDLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOk0sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpTLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6RSx0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLHo9aSh0KSxPPW5ldyB5KHQsbCxyLHMsYyxmLHYsaCxwLGQsbSx4LGssXyx3LFQsQSxDLE0sUyxFLEwseixhKHQsW3tidWZmZXI6eix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pKTtyZXR1cm4gTy51cGRhdGUoZSksT319LHsiLi9zaGFkZXJzIjozMDcsY29sb3JtYXA6MTE2LCJnbC1idWZmZXIiOjIzNywiZ2wtbWF0NC9pbnZlcnQiOjI2MSwiZ2wtbWF0NC9tdWx0aXBseSI6MjYzLCJnbC1zaGFkZXIiOjI5NywiZ2wtdGV4dHVyZTJkIjozMTQsImdsLXZhbyI6MzE5LG5kYXJyYXk6NDQyLG5vcm1hbHM6NDQ1LCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91ciI6NTAyLCJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDMwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC12ZWMzIiksaT10KCJnbC12ZWM0IiksYT1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10udmVsb2NpdGllcyxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PW4ubGVuZ3RoKGxbY10pO3U+byYmKG89dSl9dmFyIGY9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbCxjPXQucG9pbnRzLHU9dC52ZWxvY2l0aWVzLGY9dC5kaXZlcmdlbmNlcztuLnNldChuLmNyZWF0ZSgpLDAsMSwwKSxuLmNyZWF0ZSgpLG4uY3JlYXRlKCk7bi5jcmVhdGUoKTtmb3IodmFyIGg9W10scD1bXSxkPVtdLGc9W10sdj1bXSxtPVtdLHk9MCx4PTAsYj1pLmNyZWF0ZSgpLF89aS5jcmVhdGUoKSx3PTA7dzxjLmxlbmd0aDt3Kyspe289Y1t3XSxzPXVbd10sbD1mW3ddLDA9PT1lJiYobD0uMDUqcikseD1uLmxlbmd0aChzKS9hLGI9aS5jcmVhdGUoKSxuLmNvcHkoYixzKSxiWzNdPWw7Zm9yKHZhciBrPTA7azw4O2srKyl2W2tdPVtvWzBdLG9bMV0sb1syXSxrXTtpZihnLmxlbmd0aD4wKWZvcihrPTA7azw4O2srKyl7dmFyIFQ9KGsrMSklODtoLnB1c2goZ1trXSx2W2tdLHZbVF0sdltUXSxnW1RdLGdba10pLGQucHVzaChfLGIsYixiLF8sXyksbS5wdXNoKHkseCx4LHgseSx5KSxwLnB1c2goW2gubGVuZ3RoLTYsaC5sZW5ndGgtNSxoLmxlbmd0aC00XSxbaC5sZW5ndGgtMyxoLmxlbmd0aC0yLGgubGVuZ3RoLTFdKX12YXIgQT1nO2c9dix2PUEsQT1fLF89YixiPUEsQT15LHk9eCx4PUF9cmV0dXJue3Bvc2l0aW9uczpoLGNlbGxzOnAsdmVjdG9yczpkLHZlcnRleEludGVuc2l0eTptfX0odCxyLGEsbyl9KSxoPVtdLHA9W10sZD1bXSxnPVtdO2ZvcihzPTA7czxmLmxlbmd0aDtzKyspe3ZhciB2PWZbc10sbT1oLmxlbmd0aDtoPWguY29uY2F0KHYucG9zaXRpb25zKSxkPWQuY29uY2F0KHYudmVjdG9ycyksZz1nLmNvbmNhdCh2LnZlcnRleEludGVuc2l0eSk7Zm9yKGM9MDtjPHYuY2VsbHMubGVuZ3RoO2MrKyl7dmFyIHk9di5jZWxsc1tjXSx4PVtdO3AucHVzaCh4KTtmb3IodmFyIGI9MDtiPHkubGVuZ3RoO2IrKyl4LnB1c2goeVtiXSttKX19cmV0dXJue3Bvc2l0aW9uczpoLGNlbGxzOnAsdmVjdG9yczpkLHZlcnRleEludGVuc2l0eTpnLGNvbG9ybWFwOmV9fSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5jcmVhdGUoKSxpPTFlLTQ7bi5hZGQocix0LFtpLDAsMF0pO3ZhciBhPXRoaXMuZ2V0VmVsb2NpdHkocik7bi5zdWJ0cmFjdChhLGEsZSksbi5zY2FsZShhLGEsMWU0KSxuLmFkZChyLHQsWzAsaSwwXSk7dmFyIG89dGhpcy5nZXRWZWxvY2l0eShyKTtuLnN1YnRyYWN0KG8sbyxlKSxuLnNjYWxlKG8sbywxZTQpLG4uYWRkKHIsdCxbMCwwLGldKTt2YXIgcz10aGlzLmdldFZlbG9jaXR5KHIpO3JldHVybiBuLnN1YnRyYWN0KHMscyxlKSxuLnNjYWxlKHMscywxZTQpLG4uYWRkKHIsYSxvKSxuLmFkZChyLHIscykscn0scz1mdW5jdGlvbih0KXtyZXR1cm4gaCh0LHRoaXMudmVjdG9ycyx0aGlzLm1lc2hncmlkLHRoaXMuY2xhbXBCb3JkZXJzKX0sbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKG49PT1lKXJldHVybiByO2lmKG4+ZSlyZXR1cm4gci0xfXJldHVybiByfSxjPW4uY3JlYXRlKCksdT1uLmNyZWF0ZSgpLGY9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxoPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXRbMF0sbz10WzFdLHM9dFsyXSxoPXJbMF0ubGVuZ3RoLHA9clsxXS5sZW5ndGgsZD1yWzJdLmxlbmd0aCxnPWwoclswXSxhKSx2PWwoclsxXSxvKSxtPWwoclsyXSxzKSx5PWcrMSx4PXYrMSxiPW0rMTtpZihyWzBdW2ddPT09YSYmKHk9ZyksclsxXVt2XT09PW8mJih4PXYpLHJbMl1bbV09PT1zJiYoYj1tKSxpJiYoZz1mKGcsMCxoLTEpLHk9Zih5LDAsaC0xKSx2PWYodiwwLHAtMSkseD1mKHgsMCxwLTEpLG09ZihtLDAsZC0xKSxiPWYoYiwwLGQtMSkpLGc8MHx8djwwfHxtPDB8fHk+PWh8fHg+PXB8fGI+PWQpcmV0dXJuIG4uY3JlYXRlKCk7dmFyIF89KGEtclswXVtnXSkvKHJbMF1beV0tclswXVtnXSksdz0oby1yWzFdW3ZdKS8oclsxXVt4XS1yWzFdW3ZdKSxrPShzLXJbMl1bbV0pLyhyWzJdW2JdLXJbMl1bbV0pOyhfPDB8fF8+MXx8aXNOYU4oXykpJiYoXz0wKSwodzwwfHx3PjF8fGlzTmFOKHcpKSYmKHc9MCksKGs8MHx8az4xfHxpc05hTihrKSkmJihrPTApO3ZhciBUPW0qaCpwLEE9YipoKnAsTT12KmgsUz14KmgsRT1nLEM9eSxMPWVbTStUK0VdLHo9ZVtNK1QrQ10sTz1lW1MrVCtFXSxJPWVbUytUK0NdLEQ9ZVtNK0ErRV0sUD1lW00rQStDXSxSPWVbUytBK0VdLEY9ZVtTK0ErQ10sQj1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoQixMLHosXyksbi5sZXJwKGMsTyxJLF8pLG4ubGVycChCLEIsYyx3KSxuLmxlcnAoYyxELFAsXyksbi5sZXJwKHUsUixGLF8pLG4ubGVycChjLGMsdSx3KSxuLmxlcnAoQixCLGMsayksQn0scD1mdW5jdGlvbih0KXt2YXIgZT0xLzA7dC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1NYXRoLmFicyh0W3JdLXRbci0xXSk7bjxlJiYoZT1uKX1yZXR1cm4gZX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGluZ1Bvc2l0aW9ucyxpPXQubWF4TGVuZ3RofHwxZTMsbD10LnR1YmVTaXplfHwxLGM9dC5hYnNvbHV0ZVR1YmVTaXplO3QuZ2V0RGl2ZXJnZW5jZXx8KHQuZ2V0RGl2ZXJnZW5jZT1vKSx0LmdldFZlbG9jaXR5fHwodC5nZXRWZWxvY2l0eT1zKSx2b2lkIDA9PT10LmNsYW1wQm9yZGVycyYmKHQuY2xhbXBCb3JkZXJzPSEwKTt2YXIgdT1bXSxmPWVbMF1bMF0saD1lWzBdWzFdLGQ9ZVswXVsyXSxnPWVbMV1bMF0sdj1lWzFdWzFdLG09ZVsxXVsyXSx5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdO3JldHVybiByPj1mJiZyPD1nJiZuPj1oJiZuPD12JiZpPj1kJiZpPD1tfSx4PTEwKm4uZGlzdGFuY2UoZVswXSxlWzFdKS9pLGI9eCp4LF89MSx3PTA7bi5jcmVhdGUoKTtyLmxlbmd0aD49MiYmKF89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10sbj1bXSxpPXt9LGE9e30sbz17fSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc10sYz1sWzBdLHU9bFsxXSxmPWxbMl07aVtjXXx8KGUucHVzaChjKSxpW2NdPSEwKSxhW3VdfHwoci5wdXNoKHUpLGFbdV09ITApLG9bZl18fChuLnB1c2goZiksb1tmXT0hMCl9dmFyIGg9cChlKSxkPXAociksZz1wKG4pLHY9TWF0aC5taW4oaCxkLGcpO3JldHVybiBpc0Zpbml0ZSh2KT92OjF9KHIpKTtmb3IodmFyIGs9MDtrPHIubGVuZ3RoO2srKyl7dmFyIFQ9bi5jcmVhdGUoKTtuLmNvcHkoVCxyW2tdKTt2YXIgQT1bVF0sTT1bXSxTPXQuZ2V0VmVsb2NpdHkoVCksRT1UO00ucHVzaChTKTt2YXIgQz1bXSxMPXQuZ2V0RGl2ZXJnZW5jZShULFMpOyhEPW4ubGVuZ3RoKEwpKT53JiYhaXNOYU4oRCkmJmlzRmluaXRlKEQpJiYodz1EKSxDLnB1c2goRCksdS5wdXNoKHtwb2ludHM6QSx2ZWxvY2l0aWVzOk0sZGl2ZXJnZW5jZXM6Q30pO2Zvcih2YXIgej0wO3o8MTAwKmkmJkEubGVuZ3RoPGkmJnkoMCxUKTspe3orKzt2YXIgTz1uLmNsb25lKFMpLEk9bi5zcXVhcmVkTGVuZ3RoKE8pO2lmKDA9PT1JKWJyZWFrO2lmKEk+YiYmbi5zY2FsZShPLE8seC9NYXRoLnNxcnQoSSkpLG4uYWRkKE8sTyxUKSxTPXQuZ2V0VmVsb2NpdHkoTyksbi5zcXVhcmVkRGlzdGFuY2UoRSxPKS1iPi0xZS00KmIpe0EucHVzaChPKSxFPU8sTS5wdXNoKFMpO0w9dC5nZXREaXZlcmdlbmNlKE8sUyk7KEQ9bi5sZW5ndGgoTCkpPncmJiFpc05hTihEKSYmaXNGaW5pdGUoRCkmJih3PUQpLEMucHVzaChEKX1UPU99fWZvcihrPTA7azxDLmxlbmd0aDtrKyspe3ZhciBEPUNba107IWlzTmFOKEQpJiZpc0Zpbml0ZShEKXx8KENba109dyl9dmFyIFA9YSh1LHQuY29sb3JtYXAsdyxfKTtyZXR1cm4gYz9QLnR1YmVTY2FsZT1jOigwPT09dyYmKHc9MSksUC50dWJlU2NhbGU9LjUqbCpfL3cpLFB9LGUuZXhwb3J0cy5jcmVhdGVUdWJlTWVzaD10KCIuL2xpYi90dWJlbWVzaCIpfSx7Ii4vbGliL3R1YmVtZXNoIjozMDgsImdsLXZlYzMiOjMzOCwiZ2wtdmVjNCI6Mzc0fV0sMzEwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbHNsaWZ5IiksYT1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgdmVjMyBmO1xuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbiwgZXllUG9zaXRpb247XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbG9jYWxDb29yZGluYXRlID0gdmVjMyh1di56dywgZi54KTtcbiAgd29ybGRDb29yZGluYXRlID0gb2JqZWN0T2Zmc2V0ICsgbG9jYWxDb29yZGluYXRlO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIGtpbGwgPSBmLnk7XG4gIHZhbHVlID0gZi56O1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di54eTtcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBleWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIHN1cmZhY2VOb3JtYWwgID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwKSAqIGludmVyc2VNb2RlbCkueHl6KTtcbn1cbiJdKSxvPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGJlY2ttYW5uU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MpIHtcbiAgcmV0dXJuIGJlY2ttYW5uRGlzdHJpYnV0aW9uKGRvdChzdXJmYWNlTm9ybWFsLCBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKSksIHJvdWdobmVzcyk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZDtcbnVuaWZvcm0gZmxvYXQgY29udG91clRpbnQ7XG51bmlmb3JtIHZlYzQgY29udG91ckNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgdmVydGV4Q29sb3I7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmICgoa2lsbCA+IDAuMCkgfHxcbiAgICAgIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkQ29vcmRpbmF0ZSkpKSBkaXNjYXJkO1xuXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShzdXJmYWNlTm9ybWFsKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGV5ZURpcmVjdGlvbik7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbik7XG5cbiAgaWYoZ2xfRnJvbnRGYWNpbmcpIHtcbiAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IG1heChiZWNrbWFublNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcyksIDAuKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgLy9kZWNpZGUgaG93IHRvIGludGVycG9sYXRlIGNvbG9yIFx1MjAxNCBpbiB2ZXJ0ZXggb3IgaW4gZnJhZ21lbnRcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPVxuICAgIHN0ZXAodmVydGV4Q29sb3IsIC41KSAqIHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKSArXG4gICAgc3RlcCguNSwgdmVydGV4Q29sb3IpICogdkNvbG9yO1xuXG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBtaXgobGl0Q29sb3IsIGNvbnRvdXJDb2xvciwgY29udG91clRpbnQpICogb3BhY2l0eTtcbn1cbiJdKSxzPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCB1djtcbmF0dHJpYnV0ZSBmbG9hdCBmO1xuXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xudW5pZm9ybSBtYXQzIHBlcm11dGF0aW9uO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBoZWlnaHQsIHpPZmZzZXQ7XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgZGF0YUNvb3JkaW5hdGUgPSBwZXJtdXRhdGlvbiAqIHZlYzModXYueHksIGhlaWdodCk7XG4gIHdvcmxkQ29vcmRpbmF0ZSA9IG9iamVjdE9mZnNldCArIGRhdGFDb29yZGluYXRlO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuXG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjbGlwUG9zaXRpb24ueiArPSB6T2Zmc2V0O1xuXG4gIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICB2YWx1ZSA9IGYgKyBvYmplY3RPZmZzZXQuejtcbiAga2lsbCA9IC0xLjA7XG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnp3O1xuXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcblxuICAvL0Rvbid0IGRvIGxpZ2h0aW5nIGZvciBjb250b3Vyc1xuICBzdXJmYWNlTm9ybWFsICAgPSB2ZWMzKDEsMCwwKTtcbiAgZXllRGlyZWN0aW9uICAgID0gdmVjMygwLDEsMCk7XG4gIGxpZ2h0RGlyZWN0aW9uICA9IHZlYzMoMCwwLDEpO1xufVxuIl0pLGw9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgc3VyZmFjZU5vcm1hbDtcblxudmVjMiBzcGxpdEZsb2F0KGZsb2F0IHYpIHtcbiAgZmxvYXQgdmggPSAyNTUuMCAqIHY7XG4gIGZsb2F0IHVwcGVyID0gZmxvb3IodmgpO1xuICBmbG9hdCBsb3dlciA9IGZyYWN0KHZoKTtcbiAgcmV0dXJuIHZlYzIodXBwZXIgLyAyNTUuMCwgZmxvb3IobG93ZXIgKiAxNi4wKSAvIDE2LjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGlmICgoa2lsbCA+IDAuMCkgfHxcbiAgICAgIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkQ29vcmRpbmF0ZSkpKSBkaXNjYXJkO1xuXG4gIHZlYzIgdXggPSBzcGxpdEZsb2F0KHBsYW5lQ29vcmRpbmF0ZS54IC8gc2hhcGUueCk7XG4gIHZlYzIgdXkgPSBzcGxpdEZsb2F0KHBsYW5lQ29vcmRpbmF0ZS55IC8gc2hhcGUueSk7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCB1eC54LCB1eS54LCB1eC55ICsgKHV5LnkvMTYuMCkpO1xufVxuIl0pO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLG8sbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLGwsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLG8sbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6ImZsb2F0In1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfSxyLmNyZWF0ZVBpY2tDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLGwsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6ImZsb2F0In1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfX0seyJnbC1zaGFkZXIiOjI5NyxnbHNsaWZ5OjQwMX1dLDMxMTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDF9XSwzMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj15KGUpLG49YihlKSxzPXgoZSksbD1fKGUpLGM9aShlKSx1PWEoZSxbe2J1ZmZlcjpjLHNpemU6NCxzdHJpZGU6dyxvZmZzZXQ6MH0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6dyxvZmZzZXQ6MTZ9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOncsb2Zmc2V0OjI4fV0pLGY9aShlKSxoPWEoZSxbe2J1ZmZlcjpmLHNpemU6NCxzdHJpZGU6MjAsb2Zmc2V0OjB9LHtidWZmZXI6ZixzaXplOjEsc3RyaWRlOjIwLG9mZnNldDoxNn1dKSxwPWkoZSksZD1hKGUsW3tidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfV0pLGc9byhlLDEsUyxlLlJHQkEsZS5VTlNJR05FRF9CWVRFKTtnLm1pbkZpbHRlcj1lLkxJTkVBUixnLm1hZ0ZpbHRlcj1lLkxJTkVBUjt2YXIgdj1uZXcgRShlLFswLDBdLFtbMCwwLDBdLFswLDAsMF1dLHIsbixjLHUsZyxzLGwsZixoLHAsZCxbMCwwLDBdKSxtPXtsZXZlbHM6W1tdLFtdLFtdXX07Zm9yKHZhciBrIGluIHQpbVtrXT10W2tdO3JldHVybiBtLmNvbG9ybWFwPW0uY29sb3JtYXB8fCJqZXQiLHYudXBkYXRlKG0pLHZ9O3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJ0eXBlZGFycmF5LXBvb2wiKSxsPXQoImNvbG9ybWFwIiksYz10KCJuZGFycmF5LW9wcyIpLHU9dCgibmRhcnJheS1wYWNrIiksZj10KCJuZGFycmF5IiksaD10KCJzdXJmYWNlLW5ldHMiKSxwPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxkPXQoImdsLW1hdDQvaW52ZXJ0IiksZz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHY9dCgibmRhcnJheS1ncmFkaWVudCIpLG09dCgiLi9saWIvc2hhZGVycyIpLHk9bS5jcmVhdGVTaGFkZXIseD1tLmNyZWF0ZUNvbnRvdXJTaGFkZXIsYj1tLmNyZWF0ZVBpY2tTaGFkZXIsXz1tLmNyZWF0ZVBpY2tDb250b3VyU2hhZGVyLHc9NDAsaz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sVD1bWzAsMF0sWzAsMV0sWzEsMF0sWzEsMV0sWzEsMF0sWzAsMV1dLEE9W1swLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdXTtmdW5jdGlvbiBNKHQsZSxyLG4saSl7dGhpcy5wb3NpdGlvbj10LHRoaXMuaW5kZXg9ZSx0aGlzLnV2PXIsdGhpcy5sZXZlbD1uLHRoaXMuZGF0YUNvb3JkaW5hdGU9aX0hZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7Kyt0KXt2YXIgZT1BW3RdLHI9KHQrMiklMztlWyh0KzEpJTMrMF09MSxlW3IrM109MSxlW3QrNl09MX19KCk7dmFyIFM9MjU2O2Z1bmN0aW9uIEUodCxlLHIsbixpLGEsbyxsLGMsdSxoLHAsZCxnLHYpe3RoaXMuZ2w9dCx0aGlzLnNoYXBlPWUsdGhpcy5ib3VuZHM9cix0aGlzLm9iamVjdE9mZnNldD12LHRoaXMuaW50ZW5zaXR5Qm91bmRzPVtdLHRoaXMuX3NoYWRlcj1uLHRoaXMuX3BpY2tTaGFkZXI9aSx0aGlzLl9jb29yZGluYXRlQnVmZmVyPWEsdGhpcy5fdmFvPW8sdGhpcy5fY29sb3JNYXA9bCx0aGlzLl9jb250b3VyU2hhZGVyPWMsdGhpcy5fY29udG91clBpY2tTaGFkZXI9dSx0aGlzLl9jb250b3VyQnVmZmVyPWgsdGhpcy5fY29udG91clZBTz1wLHRoaXMuX2NvbnRvdXJPZmZzZXRzPVtbXSxbXSxbXV0sdGhpcy5fY29udG91ckNvdW50cz1bW10sW10sW11dLHRoaXMuX3ZlcnRleENvdW50PTAsdGhpcy5fcGlja1Jlc3VsdD1uZXcgTShbMCwwLDBdLFswLDBdLFswLDBdLFswLDAsMF0sWzAsMCwwXSksdGhpcy5fZHluYW1pY0J1ZmZlcj1kLHRoaXMuX2R5bmFtaWNWQU89Zyx0aGlzLl9keW5hbWljT2Zmc2V0cz1bMCwwLDBdLHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmNvbnRvdXJXaWR0aD1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bWzFdLFsxXSxbMV1dLHRoaXMuY29udG91clRpbnQ9WzAsMCwwXSx0aGlzLmNvbnRvdXJDb2xvcj1bWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV1dLHRoaXMuc2hvd0NvbnRvdXI9ITAsdGhpcy5zaG93U3VyZmFjZT0hMCx0aGlzLmVuYWJsZUhpZ2hsaWdodD1bITAsITAsITBdLHRoaXMuaGlnaGxpZ2h0Q29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmhpZ2hsaWdodFRpbnQ9WzEsMSwxXSx0aGlzLmhpZ2hsaWdodExldmVsPVstMSwtMSwtMV0sdGhpcy5lbmFibGVEeW5hbWljPVshMCwhMCwhMF0sdGhpcy5keW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx0aGlzLmR5bmFtaWNDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZHluYW1pY1RpbnQ9WzEsMSwxXSx0aGlzLmR5bmFtaWNXaWR0aD1bMSwxLDFdLHRoaXMuYXhlc0JvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLnN1cmZhY2VQcm9qZWN0PVshMSwhMSwhMV0sdGhpcy5jb250b3VyUHJvamVjdD1bWyExLCExLCExXSxbITEsITEsITFdLFshMSwhMSwhMV1dLHRoaXMuY29sb3JCb3VuZHM9WyExLCExXSx0aGlzLl9maWVsZD1bZihzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxmKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pLGYocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSldLHRoaXMucGlja0lkPTEsdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuc25hcFRvRGF0YT0hMSx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLm9wYWNpdHk9MSx0aGlzLmxpZ2h0UG9zaXRpb249WzEwLDFlNCwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMudmVydGV4Q29sb3I9MCx0aGlzLmRpcnR5PSEwfXZhciBDPUUucHJvdG90eXBlO0MuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0sQy5pc09wYXF1ZT1mdW5jdGlvbigpe2lmKHRoaXMub3BhY2l0eT49MSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PDM7Kyt0KWlmKHRoaXMuX2NvbnRvdXJDb3VudHNbdF0ubGVuZ3RoPjB8fHRoaXMuX2R5bmFtaWNDb3VudHNbdF0+MClyZXR1cm4hMDtyZXR1cm4hMX0sQy5waWNrU2xvdHM9MSxDLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9O3ZhciBMPVswLDAsMF0sej17c2hvd1N1cmZhY2U6ITEsc2hvd0NvbnRvdXI6ITEscHJvamVjdGlvbnM6W2suc2xpY2UoKSxrLnNsaWNlKCksay5zbGljZSgpXSxjbGlwQm91bmRzOltbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXV19O2Z1bmN0aW9uIE8odCxlKXt2YXIgcixuLGksYT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXN8fEwsbz1lLnNob3dTdXJmYWNlLHM9ZS5zaG93Q29udG91cjtmb3Iocj0wO3I8MzsrK3IpZm9yKG89b3x8ZS5zdXJmYWNlUHJvamVjdFtyXSxuPTA7bjwzOysrbilzPXN8fGUuY29udG91clByb2plY3Rbcl1bbl07Zm9yKHI9MDtyPDM7KytyKXt2YXIgbD16LnByb2plY3Rpb25zW3JdO2ZvcihuPTA7bjwxNjsrK24pbFtuXT0wO2ZvcihuPTA7bjw0OysrbilsWzUqbl09MTtsWzUqcl09MCxsWzEyK3JdPWUuYXhlc0JvdW5kc1srKGFbcl0+MCldW3JdLHAobCx0Lm1vZGVsLGwpO3ZhciBjPXouY2xpcEJvdW5kc1tyXTtmb3IoaT0wO2k8MjsrK2kpZm9yKG49MDtuPDM7KytuKWNbaV1bbl09dC5jbGlwQm91bmRzW2ldW25dO2NbMF1bcl09LTFlOCxjWzFdW3JdPTFlOH1yZXR1cm4gei5zaG93U3VyZmFjZT1vLHouc2hvd0NvbnRvdXI9cyx6fXZhciBJPXttb2RlbDprLHZpZXc6ayxwcm9qZWN0aW9uOmssaW52ZXJzZU1vZGVsOmsuc2xpY2UoKSxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLGNvbG9yTWFwOjAsY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxjb250b3VyVGludDowLGNvbnRvdXJDb2xvcjpbMCwwLDAsMV0scGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSx6T2Zmc2V0Oi0xZS00LG9iamVjdE9mZnNldDpbMCwwLDBdLGthbWJpZW50OjEsa2RpZmZ1c2U6MSxrc3BlY3VsYXI6MSxsaWdodFBvc2l0aW9uOlsxZTMsMWUzLDFlM10sZXllUG9zaXRpb246WzAsMCwwXSxyb3VnaG5lc3M6MSxmcmVzbmVsOjEsb3BhY2l0eToxLHZlcnRleENvbG9yOjB9LEQ9ay5zbGljZSgpLFA9WzEsMCwwLDAsMSwwLDAsMCwxXTtmdW5jdGlvbiBSKHQsZSl7dD10fHx7fTt2YXIgcj10aGlzLmdsO3IuZGlzYWJsZShyLkNVTExfRkFDRSksdGhpcy5fY29sb3JNYXAuYmluZCgwKTt2YXIgbj1JO24ubW9kZWw9dC5tb2RlbHx8ayxuLnZpZXc9dC52aWV3fHxrLG4ucHJvamVjdGlvbj10LnByb2plY3Rpb258fGssbi5sb3dlckJvdW5kPVt0aGlzLmJvdW5kc1swXVswXSx0aGlzLmJvdW5kc1swXVsxXSx0aGlzLmNvbG9yQm91bmRzWzBdfHx0aGlzLmJvdW5kc1swXVsyXV0sbi51cHBlckJvdW5kPVt0aGlzLmJvdW5kc1sxXVswXSx0aGlzLmJvdW5kc1sxXVsxXSx0aGlzLmNvbG9yQm91bmRzWzFdfHx0aGlzLmJvdW5kc1sxXVsyXV0sbi5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsbi5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbMF0sbi5pbnZlcnNlTW9kZWw9ZChuLmludmVyc2VNb2RlbCxuLm1vZGVsKTtmb3IodmFyIGk9MDtpPDI7KytpKWZvcih2YXIgYT1uLmNsaXBCb3VuZHNbaV0sbz0wO288MzsrK28pYVtvXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbaV1bb10sLTFlOCksMWU4KTtuLmthbWJpZW50PXRoaXMuYW1iaWVudExpZ2h0LG4ua2RpZmZ1c2U9dGhpcy5kaWZmdXNlTGlnaHQsbi5rc3BlY3VsYXI9dGhpcy5zcGVjdWxhckxpZ2h0LG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzLG4uZnJlc25lbD10aGlzLmZyZXNuZWwsbi5vcGFjaXR5PXRoaXMub3BhY2l0eSxuLmhlaWdodD0wLG4ucGVybXV0YXRpb249UCxuLnZlcnRleENvbG9yPXRoaXMudmVydGV4Q29sb3I7dmFyIHM9RDtmb3IocChzLG4udmlldyxuLm1vZGVsKSxwKHMsbi5wcm9qZWN0aW9uLHMpLGQocyxzKSxpPTA7aTwzOysraSluLmV5ZVBvc2l0aW9uW2ldPXNbMTIraV0vc1sxNV07dmFyIGw9c1sxNV07Zm9yKGk9MDtpPDM7KytpKWwrPXRoaXMubGlnaHRQb3NpdGlvbltpXSpzWzQqaSszXTtmb3IoaT0wO2k8MzsrK2kpe3ZhciBjPXNbMTIraV07Zm9yKG89MDtvPDM7KytvKWMrPXNbNCpvK2ldKnRoaXMubGlnaHRQb3NpdGlvbltvXTtuLmxpZ2h0UG9zaXRpb25baV09Yy9sfXZhciB1PU8obix0aGlzKTtpZih1LnNob3dTdXJmYWNlJiZlPT09dGhpcy5vcGFjaXR5PDEpe2Zvcih0aGlzLl9zaGFkZXIuYmluZCgpLHRoaXMuX3NoYWRlci51bmlmb3Jtcz1uLHRoaXMuX3Zhby5iaW5kKCksdGhpcy5zaG93U3VyZmFjZSYmdGhpcy5fdmVydGV4Q291bnQmJnRoaXMuX3Zhby5kcmF3KHIuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSxpPTA7aTwzOysraSl0aGlzLnN1cmZhY2VQcm9qZWN0W2ldJiZ0aGlzLnZlcnRleENvdW50JiYodGhpcy5fc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbaV0sdGhpcy5fc2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW2ldLHRoaXMuX3Zhby5kcmF3KHIuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKHUuc2hvd0NvbnRvdXImJiFlKXt2YXIgZj10aGlzLl9jb250b3VyU2hhZGVyO24ua2FtYmllbnQ9MSxuLmtkaWZmdXNlPTAsbi5rc3BlY3VsYXI9MCxuLm9wYWNpdHk9MSxmLmJpbmQoKSxmLnVuaWZvcm1zPW47dmFyIGg9dGhpcy5fY29udG91clZBTztmb3IoaC5iaW5kKCksaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMucGVybXV0YXRpb249QVtpXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtpXSp0aGlzLnBpeGVsUmF0aW8pLG89MDtvPHRoaXMuY29udG91ckxldmVsc1tpXS5sZW5ndGg7KytvKW89PT10aGlzLmhpZ2hsaWdodExldmVsW2ldPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W2ldKTowIT09byYmby0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtpXSksdGhpcy5fY29udG91ckNvdW50c1tpXVtvXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tpXVtvXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2ldW29dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2ldW29dKSk7Zm9yKGk9MDtpPDM7KytpKWZvcihmLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbaV0sZi51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSxvPTA7bzwzOysrbylpZih0aGlzLmNvbnRvdXJQcm9qZWN0W2ldW29dKXtmLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbb10sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbb10qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIGc9MDtnPHRoaXMuY29udG91ckxldmVsc1tvXS5sZW5ndGg7KytnKWc9PT10aGlzLmhpZ2hsaWdodExldmVsW29dPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W29dKTowIT09ZyYmZy0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtvXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtvXSksdGhpcy5fY29udG91ckNvdW50c1tvXVtnXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tvXVtnXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW29dW2ddLHRoaXMuX2NvbnRvdXJPZmZzZXRzW29dW2ddKSl9Zm9yKGgudW5iaW5kKCksKGg9dGhpcy5fZHluYW1pY1ZBTykuYmluZCgpLGk9MDtpPDM7KytpKWlmKDAhPT10aGlzLl9keW5hbWljQ291bnRzW2ldKWZvcihmLnVuaWZvcm1zLm1vZGVsPW4ubW9kZWwsZi51bmlmb3Jtcy5jbGlwQm91bmRzPW4uY2xpcEJvdW5kcyxmLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbaV0sci5saW5lV2lkdGgodGhpcy5keW5hbWljV2lkdGhbaV0qdGhpcy5waXhlbFJhdGlvKSxmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmR5bmFtaWNDb2xvcltpXSxmLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuZHluYW1pY1RpbnRbaV0sZi51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5keW5hbWljTGV2ZWxbaV0saC5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSksbz0wO288MzsrK28pdGhpcy5jb250b3VyUHJvamVjdFtvXVtpXSYmKGYudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tvXSxmLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW29dLGguZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbaV0sdGhpcy5fZHluYW1pY09mZnNldHNbaV0pKTtoLnVuYmluZCgpfX1DLmRyYXc9ZnVuY3Rpb24odCl7cmV0dXJuIFIuY2FsbCh0aGlzLHQsITEpfSxDLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gUi5jYWxsKHRoaXMsdCwhMCl9O3ZhciBGPXttb2RlbDprLHZpZXc6ayxwcm9qZWN0aW9uOmssaW52ZXJzZU1vZGVsOmssY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxzaGFwZTpbMCwwXSxwaWNrSWQ6MCxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLHpPZmZzZXQ6MCxvYmplY3RPZmZzZXQ6WzAsMCwwXSxwZXJtdXRhdGlvbjpbMSwwLDAsMCwxLDAsMCwwLDFdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxleWVQb3NpdGlvbjpbMCwwLDBdfTtmdW5jdGlvbiBCKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/W2UodFswXSksZSh0WzFdKSxlKHRbMl0pXTpbZSh0KSxlKHQpLGUodCldfWZ1bmN0aW9uIE4odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Mz09PXQubGVuZ3RoP1t0WzBdLHRbMV0sdFsyXSwxXTpbdFswXSx0WzFdLHRbMl0sdFszXV06WzAsMCwwLDFdfWZ1bmN0aW9uIGoodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm5bTih0WzBdKSxOKHRbMV0pLE4odFsyXSldO3ZhciBlPU4odCk7cmV0dXJuW2Uuc2xpY2UoKSxlLnNsaWNlKCksZS5zbGljZSgpXX19Qy5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKTt2YXIgcj1GO3IubW9kZWw9dC5tb2RlbHx8ayxyLnZpZXc9dC52aWV3fHxrLHIucHJvamVjdGlvbj10LnByb2plY3Rpb258fGssci5zaGFwZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyLnBpY2tJZD10aGlzLnBpY2tJZC8yNTUsci5sb3dlckJvdW5kPXRoaXMuYm91bmRzWzBdLHIudXBwZXJCb3VuZD10aGlzLmJvdW5kc1sxXSxyLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxyLnBlcm11dGF0aW9uPVA7Zm9yKHZhciBuPTA7bjwyOysrbilmb3IodmFyIGk9ci5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlbYV09TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW25dW2FdLC0xZTgpLDFlOCk7dmFyIG89TyhyLHRoaXMpO2lmKG8uc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9waWNrU2hhZGVyLmJpbmQoKSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zPXIsdGhpcy5fdmFvLmJpbmQoKSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksbj0wO248MzsrK24pdGhpcy5zdXJmYWNlUHJvamVjdFtuXSYmKHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKG8uc2hvd0NvbnRvdXIpe3ZhciBzPXRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyO3MuYmluZCgpLHMudW5pZm9ybXM9cjt2YXIgbD10aGlzLl9jb250b3VyVkFPO2ZvcihsLmJpbmQoKSxhPTA7YTwzOysrYSlmb3IoZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKSxzLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbYV0sbj0wO248dGhpcy5jb250b3VyTGV2ZWxzW2FdLmxlbmd0aDsrK24pdGhpcy5fY29udG91ckNvdW50c1thXVtuXSYmKHMudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1thXVtuXSxsLmRyYXcoZS5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2FdW25dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2FdW25dKSk7Zm9yKG49MDtuPDM7KytuKWZvcihzLnVuaWZvcm1zLm1vZGVsPW8ucHJvamVjdGlvbnNbbl0scy51bmlmb3Jtcy5jbGlwQm91bmRzPW8uY2xpcEJvdW5kc1tuXSxhPTA7YTwzOysrYSlpZih0aGlzLmNvbnRvdXJQcm9qZWN0W25dW2FdKXtzLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbYV0sZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIGM9MDtjPHRoaXMuY29udG91ckxldmVsc1thXS5sZW5ndGg7KytjKXRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10mJihzLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbYV1bY10sbC5kcmF3KGUuTElORVMsdGhpcy5fY29udG91ckNvdW50c1thXVtjXSx0aGlzLl9jb250b3VyT2Zmc2V0c1thXVtjXSkpfWwudW5iaW5kKCl9fSxDLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlLHI9dGhpcy5fcGlja1Jlc3VsdCxuPWVbMF0qKHQudmFsdWVbMF0rKHQudmFsdWVbMl0+PjQpLzE2KS8yNTUsaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89ZVsxXSoodC52YWx1ZVsxXSsoMTUmdC52YWx1ZVsyXSkvMTYpLzI1NSxzPU1hdGguZmxvb3IobyksbD1vLXM7aSs9MSxzKz0xO3ZhciBjPXIucG9zaXRpb247Y1swXT1jWzFdPWNbMl09MDtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgZj11P2E6MS1hLGg9MDtoPDI7KytoKWZvcih2YXIgcD1pK3UsZD1zK2gsdj1mKihoP2w6MS1sKSxtPTA7bTwzOysrbSljW21dKz10aGlzLl9maWVsZFttXS5nZXQocCxkKSp2O2Zvcih2YXIgeT10aGlzLl9waWNrUmVzdWx0LmxldmVsLHg9MDt4PDM7Kyt4KWlmKHlbeF09Zy5sZSh0aGlzLmNvbnRvdXJMZXZlbHNbeF0sY1t4XSkseVt4XTwwKXRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGg+MCYmKHlbeF09MCk7ZWxzZSBpZih5W3hdPHRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGgtMSl7dmFyIGI9dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF1dLF89dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF0rMV07TWF0aC5hYnMoYi1jW3hdKT5NYXRoLmFicyhfLWNbeF0pJiYoeVt4XSs9MSl9Zm9yKHIuaW5kZXhbMF09YTwuNT9pOmkrMSxyLmluZGV4WzFdPWw8LjU/czpzKzEsci51dlswXT1uL2VbMF0sci51dlsxXT1vL2VbMV0sbT0wO208MzsrK20pci5kYXRhQ29vcmRpbmF0ZVttXT10aGlzLl9maWVsZFttXS5nZXQoci5pbmRleFswXSxyLmluZGV4WzFdKTtyZXR1cm4gcn0sQy5wYWRGaWVsZD1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2hhcGUuc2xpY2UoKSxuPXQuc2hhcGUuc2xpY2UoKTtjLmFzc2lnbih0LmxvKDEsMSkuaGkoclswXSxyWzFdKSxlKSxjLmFzc2lnbih0LmxvKDEpLmhpKHJbMF0sMSksZS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDEsblsxXS0xKS5oaShyWzBdLDEpLGUubG8oMCxyWzFdLTEpLmhpKHJbMF0sMSkpLGMuYXNzaWduKHQubG8oMCwxKS5oaSgxLHJbMV0pLGUuaGkoMSkpLGMuYXNzaWduKHQubG8oblswXS0xLDEpLmhpKDEsclsxXSksZS5sbyhyWzBdLTEpKSx0LnNldCgwLDAsZS5nZXQoMCwwKSksdC5zZXQoMCxuWzFdLTEsZS5nZXQoMCxyWzFdLTEpKSx0LnNldChuWzBdLTEsMCxlLmdldChyWzBdLTEsMCkpLHQuc2V0KG5bMF0tMSxuWzFdLTEsZS5nZXQoclswXS0xLHJbMV0tMSkpfSxDLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMub2JqZWN0T2Zmc2V0PXQub2JqZWN0T2Zmc2V0fHx0aGlzLm9iamVjdE9mZnNldCx0aGlzLmRpcnR5PSEwLCJjb250b3VyV2lkdGgiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPUIodC5jb250b3VyV2lkdGgsTnVtYmVyKSksInNob3dDb250b3VyImluIHQmJih0aGlzLnNob3dDb250b3VyPUIodC5zaG93Q29udG91cixCb29sZWFuKSksInNob3dTdXJmYWNlImluIHQmJih0aGlzLnNob3dTdXJmYWNlPSEhdC5zaG93U3VyZmFjZSksImNvbnRvdXJUaW50ImluIHQmJih0aGlzLmNvbnRvdXJUaW50PUIodC5jb250b3VyVGludCxCb29sZWFuKSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9aih0LmNvbnRvdXJDb2xvcikpLCJjb250b3VyUHJvamVjdCJpbiB0JiYodGhpcy5jb250b3VyUHJvamVjdD1CKHQuY29udG91clByb2plY3QsZnVuY3Rpb24odCl7cmV0dXJuIEIodCxCb29sZWFuKX0pKSwic3VyZmFjZVByb2plY3QiaW4gdCYmKHRoaXMuc3VyZmFjZVByb2plY3Q9dC5zdXJmYWNlUHJvamVjdCksImR5bmFtaWNDb2xvciJpbiB0JiYodGhpcy5keW5hbWljQ29sb3I9aih0LmR5bmFtaWNDb2xvcikpLCJkeW5hbWljVGludCJpbiB0JiYodGhpcy5keW5hbWljVGludD1CKHQuZHluYW1pY1RpbnQsTnVtYmVyKSksImR5bmFtaWNXaWR0aCJpbiB0JiYodGhpcy5keW5hbWljV2lkdGg9Qih0LmR5bmFtaWNXaWR0aCxOdW1iZXIpKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksImNvbG9yQm91bmRzImluIHQmJih0aGlzLmNvbG9yQm91bmRzPXQuY29sb3JCb3VuZHMpLCJ2ZXJ0ZXhDb2xvciJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCk7dmFyIGU9dC5maWVsZHx8dC5jb29yZHMmJnQuY29vcmRzWzJdfHxudWxsLHI9ITE7aWYoZXx8KGU9dGhpcy5fZmllbGRbMl0uc2hhcGVbMF18fHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzJdP3RoaXMuX2ZpZWxkWzJdLmxvKDEsMSkuaGkodGhpcy5fZmllbGRbMl0uc2hhcGVbMF0tMix0aGlzLl9maWVsZFsyXS5zaGFwZVsxXS0yKTp0aGlzLl9maWVsZFsyXS5oaSgwLDApKSwiZmllbGQiaW4gdHx8ImNvb3JkcyJpbiB0KXt2YXIgaT0oZS5zaGFwZVswXSsyKSooZS5zaGFwZVsxXSsyKTtpPnRoaXMuX2ZpZWxkWzJdLmRhdGEubGVuZ3RoJiYocy5mcmVlRmxvYXQodGhpcy5fZmllbGRbMl0uZGF0YSksdGhpcy5fZmllbGRbMl0uZGF0YT1zLm1hbGxvY0Zsb2F0KG4ubmV4dFBvdzIoaSkpKSx0aGlzLl9maWVsZFsyXT1mKHRoaXMuX2ZpZWxkWzJdLmRhdGEsW2Uuc2hhcGVbMF0rMixlLnNoYXBlWzFdKzJdKSx0aGlzLnBhZEZpZWxkKHRoaXMuX2ZpZWxkWzJdLGUpLHRoaXMuc2hhcGU9ZS5zaGFwZS5zbGljZSgpO2Zvcih2YXIgYT10aGlzLnNoYXBlLG89MDtvPDI7KytvKXRoaXMuX2ZpZWxkWzJdLnNpemU+dGhpcy5fZmllbGRbb10uZGF0YS5sZW5ndGgmJihzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFtvXS5kYXRhKSx0aGlzLl9maWVsZFtvXS5kYXRhPXMubWFsbG9jRmxvYXQodGhpcy5fZmllbGRbMl0uc2l6ZSkpLHRoaXMuX2ZpZWxkW29dPWYodGhpcy5fZmllbGRbb10uZGF0YSxbYVswXSsyLGFbMV0rMl0pO2lmKHQuY29vcmRzKXt2YXIgcD10LmNvb3JkcztpZighQXJyYXkuaXNBcnJheShwKXx8MyE9PXAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCBjb29yZGluYXRlcyBmb3IgeC95Iik7Zm9yKG89MDtvPDI7KytvKXt2YXIgZD1wW29dO2ZvcihiPTA7YjwyOysrYilpZihkLnNoYXBlW2JdIT09YVtiXSl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGNvb3JkcyBoYXZlIGluY29ycmVjdCBzaGFwZSIpO3RoaXMucGFkRmllbGQodGhpcy5fZmllbGRbb10sZCl9fWVsc2UgaWYodC50aWNrcyl7dmFyIGc9dC50aWNrcztpZighQXJyYXkuaXNBcnJheShnKXx8MiE9PWcubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrcyIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIG09Z1tvXTtpZigoQXJyYXkuaXNBcnJheShtKXx8bS5sZW5ndGgpJiYobT1mKG0pKSxtLnNoYXBlWzBdIT09YVtvXSl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgdGljayBsZW5ndGgiKTt2YXIgeT1mKG0uZGF0YSxhKTt5LnN0cmlkZVtvXT1tLnN0cmlkZVswXSx5LnN0cmlkZVsxXm9dPTAsdGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSx5KX19ZWxzZXtmb3Iobz0wO288MjsrK28pe3ZhciB4PVswLDBdO3hbb109MSx0aGlzLl9maWVsZFtvXT1mKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdLHgsMCl9dGhpcy5fZmllbGRbMF0uc2V0KDAsMCwwKTtmb3IodmFyIGI9MDtiPGFbMF07KytiKXRoaXMuX2ZpZWxkWzBdLnNldChiKzEsMCxiKTtmb3IodGhpcy5fZmllbGRbMF0uc2V0KGFbMF0rMSwwLGFbMF0tMSksdGhpcy5fZmllbGRbMV0uc2V0KDAsMCwwKSxiPTA7YjxhWzFdOysrYil0aGlzLl9maWVsZFsxXS5zZXQoMCxiKzEsYik7dGhpcy5fZmllbGRbMV0uc2V0KDAsYVsxXSsxLGFbMV0tMSl9dmFyIF89dGhpcy5fZmllbGQsdz1mKHMubWFsbG9jRmxvYXQoMypfWzJdLnNpemUqMiksWzMsYVswXSsyLGFbMV0rMiwyXSk7Zm9yKG89MDtvPDM7KytvKXYody5waWNrKG8pLF9bb10sIm1pcnJvciIpO3ZhciBrPWYocy5tYWxsb2NGbG9hdCgzKl9bMl0uc2l6ZSksW2FbMF0rMixhWzFdKzIsM10pO2ZvcihvPTA7bzxhWzBdKzI7KytvKWZvcihiPTA7YjxhWzFdKzI7KytiKXt2YXIgQT13LmdldCgwLG8sYiwwKSxNPXcuZ2V0KDAsbyxiLDEpLEU9dy5nZXQoMSxvLGIsMCksQz13LmdldCgxLG8sYiwxKSxMPXcuZ2V0KDIsbyxiLDApLHo9dy5nZXQoMixvLGIsMSksTz1FKnotQypMLEk9TCpNLXoqQSxEPUEqQy1NKkUsUD1NYXRoLnNxcnQoTypPK0kqSStEKkQpO1A8MWUtOD8oUD1NYXRoLm1heChNYXRoLmFicyhPKSxNYXRoLmFicyhJKSxNYXRoLmFicyhEKSkpPDFlLTg/KEQ9MSxJPU89MCxQPTEpOlA9MS9QOlA9MS9NYXRoLnNxcnQoUCksay5zZXQobyxiLDAsTypQKSxrLnNldChvLGIsMSxJKlApLGsuc2V0KG8sYiwyLEQqUCl9cy5mcmVlKHcuZGF0YSk7dmFyIFI9WzEvMCwxLzAsMS8wXSxGPVstMS8wLC0xLzAsLTEvMF0sTj0xLzAsVj0tMS8wLFU9KGFbMF0tMSkqKGFbMV0tMSkqNixxPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MigxMCpVKSksSD0wLEc9MDtmb3Iobz0wO288YVswXS0xOysrbyl0OmZvcihiPTA7YjxhWzFdLTE7KytiKXtmb3IodmFyIFk9MDtZPDI7KytZKWZvcih2YXIgVz0wO1c8MjsrK1cpZm9yKHZhciBYPTA7WDwzOysrWCl7dmFyIFo9dGhpcy5fZmllbGRbWF0uZ2V0KDErbytZLDErYitXKTtpZihpc05hTihaKXx8IWlzRmluaXRlKFopKWNvbnRpbnVlIHR9Zm9yKFg9MDtYPDY7KytYKXt2YXIgJD1vK1RbWF1bMF0sSj1iK1RbWF1bMV0sSz10aGlzLl9maWVsZFswXS5nZXQoJCsxLEorMSksUT10aGlzLl9maWVsZFsxXS5nZXQoJCsxLEorMSk7Wj10aGlzLl9maWVsZFsyXS5nZXQoJCsxLEorMSksTz1rLmdldCgkKzEsSisxLDApLEk9ay5nZXQoJCsxLEorMSwxKSxEPWsuZ2V0KCQrMSxKKzEsMiksdC5pbnRlbnNpdHkmJih0dD10LmludGVuc2l0eS5nZXQoJCxKKSk7dmFyIHR0PXQuaW50ZW5zaXR5P3QuaW50ZW5zaXR5LmdldCgkLEopOlordGhpcy5vYmplY3RPZmZzZXRbMl07cVtIKytdPSQscVtIKytdPUoscVtIKytdPUsscVtIKytdPVEscVtIKytdPVoscVtIKytdPTAscVtIKytdPXR0LHFbSCsrXT1PLHFbSCsrXT1JLHFbSCsrXT1ELFJbMF09TWF0aC5taW4oUlswXSxLK3RoaXMub2JqZWN0T2Zmc2V0WzBdKSxSWzFdPU1hdGgubWluKFJbMV0sUSt0aGlzLm9iamVjdE9mZnNldFsxXSksUlsyXT1NYXRoLm1pbihSWzJdLFordGhpcy5vYmplY3RPZmZzZXRbMl0pLE49TWF0aC5taW4oTix0dCksRlswXT1NYXRoLm1heChGWzBdLEsrdGhpcy5vYmplY3RPZmZzZXRbMF0pLEZbMV09TWF0aC5tYXgoRlsxXSxRK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxGWzJdPU1hdGgubWF4KEZbMl0sWit0aGlzLm9iamVjdE9mZnNldFsyXSksVj1NYXRoLm1heChWLHR0KSxHKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJihOPSt0LmludGVuc2l0eUJvdW5kc1swXSxWPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288SDtvKz0xMClxW29dPShxW29dLU4pLyhWLU4pO3RoaXMuX3ZlcnRleENvdW50PUcsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUocS5zdWJhcnJheSgwLEgpKSxzLmZyZWVGbG9hdChxKSxzLmZyZWUoay5kYXRhKSx0aGlzLmJvdW5kcz1bUixGXSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT1OJiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PVZ8fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1bTixWXX1pZigibGV2ZWxzImluIHQpe3ZhciBldD10LmxldmVscztmb3IoZXQ9QXJyYXkuaXNBcnJheShldFswXSk/ZXQuc2xpY2UoKTpbW10sW10sZXRdLG89MDtvPDM7KytvKWV0W29dPWV0W29dLnNsaWNlKCksZXRbb10uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTtmb3Iobz0wO288MzsrK28pZm9yKGI9MDtiPGV0W29dLmxlbmd0aDsrK2IpZXRbb11bYl0tPXRoaXMub2JqZWN0T2Zmc2V0W29dO3Q6Zm9yKG89MDtvPDM7KytvKXtpZihldFtvXS5sZW5ndGghPT10aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoKXtyPSEwO2JyZWFrfWZvcihiPTA7YjxldFtvXS5sZW5ndGg7KytiKWlmKGV0W29dW2JdIT09dGhpcy5jb250b3VyTGV2ZWxzW29dW2JdKXtyPSEwO2JyZWFrIHR9fXRoaXMuY29udG91ckxldmVscz1ldH1pZihyKXtfPXRoaXMuX2ZpZWxkLGE9dGhpcy5zaGFwZTtmb3IodmFyIHJ0PVtdLG50PTA7bnQ8MzsrK250KXt2YXIgaXQ9dGhpcy5jb250b3VyTGV2ZWxzW250XSxhdD1bXSxvdD1bXSxzdD1bMCwwLDBdO2ZvcihvPTA7bzxpdC5sZW5ndGg7KytvKXt2YXIgbHQ9aCh0aGlzLl9maWVsZFtudF0saXRbb10pO2F0LnB1c2gocnQubGVuZ3RoLzV8MCksRz0wO3Q6Zm9yKGI9MDtiPGx0LmNlbGxzLmxlbmd0aDsrK2Ipe3ZhciBjdD1sdC5jZWxsc1tiXTtmb3IoWD0wO1g8MjsrK1gpe3ZhciB1dD1sdC5wb3NpdGlvbnNbY3RbWF1dLGZ0PXV0WzBdLGh0PTB8TWF0aC5mbG9vcihmdCkscHQ9ZnQtaHQsZHQ9dXRbMV0sZ3Q9MHxNYXRoLmZsb29yKGR0KSx2dD1kdC1ndCxtdD0hMTtlOmZvcih2YXIgeXQ9MDt5dDwzOysreXQpe3N0W3l0XT0wO3ZhciB4dD0obnQreXQrMSklMztmb3IoWT0wO1k8MjsrK1kpe3ZhciBidD1ZP3B0OjEtcHQ7Zm9yKCQ9MHxNYXRoLm1pbihNYXRoLm1heChodCtZLDApLGFbMF0pLFc9MDtXPDI7KytXKXt2YXIgX3Q9Vz92dDoxLXZ0O2lmKEo9MHxNYXRoLm1pbihNYXRoLm1heChndCtXLDApLGFbMV0pLFo9eXQ8Mj90aGlzLl9maWVsZFt4dF0uZ2V0KCQsSik6KHRoaXMuaW50ZW5zaXR5LmdldCgkLEopLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKS8odGhpcy5pbnRlbnNpdHlCb3VuZHNbMV0tdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF0pLCFpc0Zpbml0ZShaKXx8aXNOYU4oWikpe210PSEwO2JyZWFrIGV9dmFyIHd0PWJ0Kl90O3N0W3l0XSs9d3QqWn19fWlmKG10KXtpZihYPjApe2Zvcih2YXIga3Q9MDtrdDw1Oysra3QpcnQucG9wKCk7Ry09MX1jb250aW51ZSB0fXJ0LnB1c2goc3RbMF0sc3RbMV0sdXRbMF0sdXRbMV0sc3RbMl0pLEcrPTF9fW90LnB1c2goRyl9dGhpcy5fY29udG91ck9mZnNldHNbbnRdPWF0LHRoaXMuX2NvbnRvdXJDb3VudHNbbnRdPW90fXZhciBUdD1zLm1hbGxvY0Zsb2F0KHJ0Lmxlbmd0aCk7Zm9yKG89MDtvPHJ0Lmxlbmd0aDsrK28pVHRbb109cnRbb107dGhpcy5fY29udG91ckJ1ZmZlci51cGRhdGUoVHQpLHMuZnJlZUZsb2F0KFR0KX10LmNvbG9ybWFwJiZ0aGlzLl9jb2xvck1hcC5zZXRQaXhlbHMoZnVuY3Rpb24odCl7dmFyIGU9dShbbCh7Y29sb3JtYXA6dCxuc2hhZGVzOlMsZm9ybWF0OiJyZ2JhIn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0WzFdLHRbMl0sMjU1KnRbM11dfSldKTtyZXR1cm4gYy5kaXZzZXEoZSwyNTUpLGV9KHQuY29sb3JtYXApKX0sQy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl92YW8uZGlzcG9zZSgpLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2NvbG9yTWFwLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyUGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY0J1ZmZlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY1ZBTy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDwzOysrdClzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFt0XS5kYXRhKX0sQy5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7dmFyIGUscjtpZighdClyZXR1cm4gdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuZHlhbmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHZvaWQodGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdKTtmb3IoZT0wO2U8MzsrK2UpdGhpcy5lbmFibGVIaWdobGlnaHRbZV0/dGhpcy5oaWdobGlnaHRMZXZlbFtlXT10LmxldmVsW2VdOnRoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09LTE7Zm9yKHI9dGhpcy5zbmFwVG9EYXRhP3QuZGF0YUNvb3JkaW5hdGU6dC5wb3NpdGlvbixlPTA7ZTwzOysrZSlyW2VdLT10aGlzLm9iamVjdE9mZnNldFtlXTtpZih0aGlzLmVuYWJsZUR5bmFtaWNbMF0mJnJbMF0hPT10aGlzLmR5bmFtaWNMZXZlbFswXXx8dGhpcy5lbmFibGVEeW5hbWljWzFdJiZyWzFdIT09dGhpcy5keW5hbWljTGV2ZWxbMV18fHRoaXMuZW5hYmxlRHluYW1pY1syXSYmclsyXSE9PXRoaXMuZHluYW1pY0xldmVsWzJdKXtmb3IodmFyIG49MCxpPXRoaXMuc2hhcGUsYT1zLm1hbGxvY0Zsb2F0KDEyKmlbMF0qaVsxXSksbz0wO288MzsrK28paWYodGhpcy5lbmFibGVEeW5hbWljW29dKXt0aGlzLmR5bmFtaWNMZXZlbFtvXT1yW29dO3ZhciBsPShvKzEpJTMsYz0obysyKSUzLHU9dGhpcy5fZmllbGRbb10sZj10aGlzLl9maWVsZFtsXSxwPXRoaXMuX2ZpZWxkW2NdLGQ9aCh1LHJbb10pLGc9ZC5jZWxscyx2PWQucG9zaXRpb25zO2Zvcih0aGlzLl9keW5hbWljT2Zmc2V0c1tvXT1uLGU9MDtlPGcubGVuZ3RoOysrZSlmb3IodmFyIG09Z1tlXSx5PTA7eTwyOysreSl7dmFyIHg9dlttW3ldXSxiPSt4WzBdLF89MHxiLHc9MHxNYXRoLm1pbihfKzEsaVswXSksaz1iLV8sVD0xLWssQT0reFsxXSxNPTB8QSxTPTB8TWF0aC5taW4oTSsxLGlbMV0pLEU9QS1NLEM9MS1FLEw9VCpDLHo9VCpFLE89aypDLEk9aypFLEQ9TCpmLmdldChfLE0pK3oqZi5nZXQoXyxTKStPKmYuZ2V0KHcsTSkrSSpmLmdldCh3LFMpLFA9TCpwLmdldChfLE0pK3oqcC5nZXQoXyxTKStPKnAuZ2V0KHcsTSkrSSpwLmdldCh3LFMpO2lmKGlzTmFOKEQpfHxpc05hTihQKSl7eSYmKG4tPTEpO2JyZWFrfWFbMipuKzBdPUQsYVsyKm4rMV09UCxuKz0xfXRoaXMuX2R5bmFtaWNDb3VudHNbb109bi10aGlzLl9keW5hbWljT2Zmc2V0c1tvXX1lbHNlIHRoaXMuZHluYW1pY0xldmVsW29dPU5hTix0aGlzLl9keW5hbWljQ291bnRzW29dPTA7dGhpcy5fZHluYW1pY0J1ZmZlci51cGRhdGUoYS5zdWJhcnJheSgwLDIqbikpLHMuZnJlZUZsb2F0KGEpfX19LHsiLi9saWIvc2hhZGVycyI6MzEwLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzExLCJiaXQtdHdpZGRsZSI6ODIsY29sb3JtYXA6MTE2LCJnbC1idWZmZXIiOjIzNywiZ2wtbWF0NC9pbnZlcnQiOjI2MSwiZ2wtbWF0NC9tdWx0aXBseSI6MjYzLCJnbC10ZXh0dXJlMmQiOjMxNCwiZ2wtdmFvIjozMTksbmRhcnJheTo0NDIsIm5kYXJyYXktZ3JhZGllbnQiOjQzMywibmRhcnJheS1vcHMiOjQzNiwibmRhcnJheS1wYWNrIjo0MzcsInN1cmZhY2UtbmV0cyI6NTE1LCJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDMxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udCIpLGk9dCgicGljay1ieS1hbGlhcyIpLGE9dCgicmVnbCIpLG89dCgiZ2wtdXRpbC9jb250ZXh0Iikscz10KCJlczYtd2Vhay1tYXAiKSxsPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGM9dCgiZm9udC1hdGxhcyIpLHU9dCgidHlwZWRhcnJheS1wb29sIiksZj10KCJwYXJzZS1yZWN0IiksaD10KCJpcy1wbGFpbi1vYmoiKSxwPXQoInBhcnNlLXVuaXQiKSxkPXQoInRvLXB4IiksZz10KCJkZXRlY3Qta2VybmluZyIpLHY9dCgib2JqZWN0LWFzc2lnbiIpLG09dCgiZm9udC1tZWFzdXJlIikseT10KCJmbGF0dGVuLXZlcnRleC1kYXRhIikseD10KCJiaXQtdHdpZGRsZSIpLm5leHRQb3cyLGI9bmV3IHMsXz0hMTtpZihkb2N1bWVudC5ib2R5KXt2YXIgdz1kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTt3LnN0eWxlLmZvbnQ9Iml0YWxpYyBzbWFsbC1jYXBzIGJvbGQgY29uZGVuc2VkIDE2cHgvMiBjdXJzaXZlIixnZXRDb21wdXRlZFN0eWxlKHcpLmZvbnRTdHJldGNoJiYoXz0hMCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh3KX12YXIgaz1mdW5jdGlvbih0KXshZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2dsJiZ0LnByb3AmJnQudGV4dHVyZSYmdC5idWZmZXJ9KHQpP3RoaXMuZ2w9byh0KToodD17cmVnbDp0fSx0aGlzLmdsPXQucmVnbC5fZ2wpLHRoaXMuc2hhZGVyPWIuZ2V0KHRoaXMuZ2wpLHRoaXMuc2hhZGVyP3RoaXMucmVnbD10aGlzLnNoYWRlci5yZWdsOnRoaXMucmVnbD10LnJlZ2x8fGEoe2dsOnRoaXMuZ2x9KSx0aGlzLmNoYXJCdWZmZXI9dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdGhpcy5zaXplQnVmZmVyPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6ImZsb2F0Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2hhZGVyfHwodGhpcy5zaGFkZXI9dGhpcy5jcmVhdGVTaGFkZXIoKSxiLnNldCh0aGlzLmdsLHRoaXMuc2hhZGVyKSksdGhpcy5iYXRjaD1bXSx0aGlzLmZvbnRTaXplPVtdLHRoaXMuZm9udD1bXSx0aGlzLmZvbnRBdGxhcz1bXSx0aGlzLmRyYXc9dGhpcy5zaGFkZXIuZHJhdy5iaW5kKHRoaXMpLHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yZWdsLl9yZWZyZXNoKCksdGhpcy5kcmF3KHRoaXMuYmF0Y2gpfSx0aGlzLmNhbnZhcz10aGlzLmdsLmNhbnZhcyx0aGlzLnVwZGF0ZShoKHQpP3Q6e30pfTtrLnByb3RvdHlwZS5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlZ2wsZT10KHtibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwxXSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToib25lIG1pbnVzIGRzdCBhbHBoYSIsZHN0QWxwaGE6Im9uZSJ9fSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGNvdW50OnQucHJvcCgiY291bnQiKSxvZmZzZXQ6dC5wcm9wKCJvZmZzZXQiKSxhdHRyaWJ1dGVzOntjaGFyT2Zmc2V0OntvZmZzZXQ6NCxzdHJpZGU6OCxidWZmZXI6dC50aGlzKCJzaXplQnVmZmVyIil9LHdpZHRoOntvZmZzZXQ6MCxzdHJpZGU6OCxidWZmZXI6dC50aGlzKCJzaXplQnVmZmVyIil9LGNoYXI6dC50aGlzKCJjaGFyQnVmZmVyIikscG9zaXRpb246dC50aGlzKCJwb3NpdGlvbiIpfSx1bmlmb3Jtczp7YXRsYXNTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UuYXRsYXMud2lkdGgsZS5hdGxhcy5oZWlnaHRdfSxhdGxhc0RpbTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLmNvbHMsZS5hdGxhcy5yb3dzXX0sYXRsYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy50ZXh0dXJlfSxjaGFyU3RlcDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLnN0ZXB9LGVtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMuZW19LGNvbG9yOnQucHJvcCgiY29sb3IiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHZpZXdwb3J0OnQudGhpcygidmlld3BvcnRBcnJheSIpLHNjYWxlOnQudGhpcygic2NhbGUiKSxhbGlnbjp0LnByb3AoImFsaWduIiksYmFzZWxpbmU6dC5wcm9wKCJiYXNlbGluZSIpLHRyYW5zbGF0ZTp0LnRoaXMoInRyYW5zbGF0ZSIpLHBvc2l0aW9uT2Zmc2V0OnQucHJvcCgicG9zaXRpb25PZmZzZXQiKX0scHJpbWl0aXZlOiJwb2ludHMiLHZpZXdwb3J0OnQudGhpcygidmlld3BvcnQiKSx2ZXJ0OiJcblx0XHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblx0XHRcdGF0dHJpYnV0ZSBmbG9hdCB3aWR0aCwgY2hhck9mZnNldCwgY2hhcjtcblx0XHRcdGF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIGVtLCBhbGlnbiwgYmFzZWxpbmU7XG5cdFx0XHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzQgY29sb3I7XG5cdFx0XHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplLCBhdGxhc0RpbSwgc2NhbGUsIHRyYW5zbGF0ZSwgcG9zaXRpb25PZmZzZXQ7XG5cdFx0XHR2YXJ5aW5nIHZlYzIgY2hhckNvb3JkLCBjaGFySWQ7XG5cdFx0XHR2YXJ5aW5nIGZsb2F0IGNoYXJXaWR0aDtcblx0XHRcdHZhcnlpbmcgdmVjNCBmb250Q29sb3I7XG5cdFx0XHR2b2lkIG1haW4gKCkge1xuXHRcdFx0XHQiKyhrLm5vcm1hbFZpZXdwb3J0PyIiOiJ2ZWMyIHBvc2l0aW9uT2Zmc2V0ID0gdmVjMihwb3NpdGlvbk9mZnNldC54LC0gcG9zaXRpb25PZmZzZXQueSk7IikrIlxuXG5cdFx0XHRcdHZlYzIgb2Zmc2V0ID0gZmxvb3IoZW0gKiAodmVjMihhbGlnbiArIGNoYXJPZmZzZXQsIGJhc2VsaW5lKVxuXHRcdFx0XHRcdCsgcG9zaXRpb25PZmZzZXQpKVxuXHRcdFx0XHRcdC8gKHZpZXdwb3J0Lnp3ICogc2NhbGUueHkpO1xuXG5cdFx0XHRcdHZlYzIgcG9zaXRpb24gPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGU7XG5cdFx0XHRcdHBvc2l0aW9uICs9IG9mZnNldCAqIHNjYWxlO1xuXG5cdFx0XHRcdCIrKGsubm9ybWFsVmlld3BvcnQ/InBvc2l0aW9uLnkgPSAxLiAtIHBvc2l0aW9uLnk7IjoiIikrIlxuXG5cdFx0XHRcdGNoYXJDb29yZCA9IHBvc2l0aW9uICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcblxuXHRcdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLiAtIDEuLCAwLCAxKTtcblxuXHRcdFx0XHRnbF9Qb2ludFNpemUgPSBjaGFyU3RlcDtcblxuXHRcdFx0XHRjaGFySWQueCA9IG1vZChjaGFyLCBhdGxhc0RpbS54KTtcblx0XHRcdFx0Y2hhcklkLnkgPSBmbG9vcihjaGFyIC8gYXRsYXNEaW0ueCk7XG5cblx0XHRcdFx0Y2hhcldpZHRoID0gd2lkdGggKiBlbTtcblxuXHRcdFx0XHRmb250Q29sb3IgPSBjb2xvciAvIDI1NS47XG5cdFx0XHR9IixmcmFnOiJcblx0XHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGF0bGFzO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIG9wYWNpdHk7XG5cdFx0XHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplO1xuXHRcdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcblx0XHRcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcblx0XHRcdHZhcnlpbmcgZmxvYXQgY2hhcldpZHRoO1xuXG5cdFx0XHRmbG9hdCBsaWdodG5lc3ModmVjNCBjb2xvcikge1xuXHRcdFx0XHRyZXR1cm4gY29sb3IuciAqIDAuMjk5ICsgY29sb3IuZyAqIDAuNTg3ICsgY29sb3IuYiAqIDAuMTE0O1xuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4gKCkge1xuXHRcdFx0XHR2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC0gY2hhckNvb3JkICsgY2hhclN0ZXAgKiAuNTtcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJTdGVwID0gZmxvb3IoY2hhclN0ZXAgKiAuNSArIC41KTtcblxuXHRcdFx0XHQvLyBpbnZlcnQgeSBhbmQgc2hpZnQgYnkgMXB4IChGRiBleHBlY2lhbGx5IG5lZWRzIHRoYXQpXG5cdFx0XHRcdHV2LnkgPSBjaGFyU3RlcCAtIHV2Lnk7XG5cblx0XHRcdFx0Ly8gaWdub3JlIHBvaW50cyBvdXRzaWRlIG9mIGNoYXJhY3RlciBib3VuZGluZyBib3hcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJXaWR0aCA9IGNlaWwoY2hhcldpZHRoICogLjUpO1xuXHRcdFx0XHRpZiAoZmxvb3IodXYueCkgPiBoYWxmQ2hhclN0ZXAgKyBoYWxmQ2hhcldpZHRoIHx8XG5cdFx0XHRcdFx0Zmxvb3IodXYueCkgPCBoYWxmQ2hhclN0ZXAgLSBoYWxmQ2hhcldpZHRoKSByZXR1cm47XG5cblx0XHRcdFx0dXYgKz0gY2hhcklkICogY2hhclN0ZXA7XG5cdFx0XHRcdHV2ID0gdXYgLyBhdGxhc1NpemU7XG5cblx0XHRcdFx0dmVjNCBjb2xvciA9IGZvbnRDb2xvcjtcblx0XHRcdFx0dmVjNCBtYXNrID0gdGV4dHVyZTJEKGF0bGFzLCB1dik7XG5cblx0XHRcdFx0ZmxvYXQgbWFza1kgPSBsaWdodG5lc3MobWFzayk7XG5cdFx0XHRcdC8vIGZsb2F0IGNvbG9yWSA9IGxpZ2h0bmVzcyhjb2xvcik7XG5cdFx0XHRcdGNvbG9yLmEgKj0gbWFza1k7XG5cdFx0XHRcdGNvbG9yLmEgKj0gb3BhY2l0eTtcblxuXHRcdFx0XHQvLyBjb2xvci5hICs9IC4xO1xuXG5cdFx0XHRcdC8vIGFudGlhbGlhc2luZywgc2VlIHlpcSBjb2xvciBzcGFjZSB5LWNoYW5uZWwgZm9ybXVsYVxuXHRcdFx0XHQvLyBjb2xvci5yZ2IgKz0gKDEuIC0gY29sb3IucmdiKSAqICgxLiAtIG1hc2sucmdiKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcblx0XHRcdH0ifSk7cmV0dXJue3JlZ2w6dCxkcmF3OmUsYXRsYXM6e319fSxrLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigic3RyaW5nIj09dHlwZW9mIHQpdD17dGV4dDp0fTtlbHNlIGlmKCF0KXJldHVybjtudWxsIT0odD1pKHQse3Bvc2l0aW9uOiJwb3NpdGlvbiBwb3NpdGlvbnMgY29vcmQgY29vcmRzIGNvb3JkaW5hdGVzIixmb250OiJmb250IGZvbnRGYWNlIGZvbnRmYWNlIHR5cGVmYWNlIGNzc0ZvbnQgY3NzLWZvbnQgZmFtaWx5IGZvbnRGYW1pbHkiLGZvbnRTaXplOiJmb250U2l6ZSBmb250c2l6ZSBzaXplIGZvbnQtc2l6ZSIsdGV4dDoidGV4dCB0ZXh0cyBjaGFycyBjaGFyYWN0ZXJzIHZhbHVlIHZhbHVlcyBzeW1ib2xzIixhbGlnbjoiYWxpZ24gYWxpZ25tZW50IHRleHRBbGlnbiB0ZXh0YmFzZWxpbmUiLGJhc2VsaW5lOiJiYXNlbGluZSB0ZXh0QmFzZWxpbmUgdGV4dGJhc2VsaW5lIixkaXJlY3Rpb246ImRpciBkaXJlY3Rpb24gdGV4dERpcmVjdGlvbiIsY29sb3I6ImNvbG9yIGNvbG91ciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIHRleHRDb2xvciB0ZXh0Y29sb3IiLGtlcm5pbmc6Imtlcm5pbmcga2VybiIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2cCB2aWV3cG9ydCB2aWV3Qm94IHZpZXdib3ggdmlld1BvcnQiLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEgdHJhbnNwYXJlbmN5IHZpc2libGUgdmlzaWJpbGl0eSBvcGFxdWUiLG9mZnNldDoib2Zmc2V0IHBvc2l0aW9uT2Zmc2V0IHBhZGRpbmcgc2hpZnQgaW5kZW50IGluZGVudGF0aW9uIn0sITApKS5vcGFjaXR5JiYoQXJyYXkuaXNBcnJheSh0Lm9wYWNpdHkpP3RoaXMub3BhY2l0eT10Lm9wYWNpdHkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSk6dGhpcy5vcGFjaXR5PXBhcnNlRmxvYXQodC5vcGFjaXR5KSksbnVsbCE9dC52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9Zih0LnZpZXdwb3J0KSxrLm5vcm1hbFZpZXdwb3J0JiYodGhpcy52aWV3cG9ydC55PXRoaXMuY2FudmFzLmhlaWdodC10aGlzLnZpZXdwb3J0LnktdGhpcy52aWV3cG9ydC5oZWlnaHQpLHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbD09dGhpcy52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9e3g6MCx5OjAsd2lkdGg6dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodH0sdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsIT10Lmtlcm5pbmcmJih0aGlzLmtlcm5pbmc9dC5rZXJuaW5nKSxudWxsIT10Lm9mZnNldCYmKCJudW1iZXIiPT10eXBlb2YgdC5vZmZzZXQmJih0Lm9mZnNldD1bdC5vZmZzZXQsMF0pLHRoaXMucG9zaXRpb25PZmZzZXQ9eSh0Lm9mZnNldCkpLHQuZGlyZWN0aW9uJiYodGhpcy5kaXJlY3Rpb249dC5kaXJlY3Rpb24pLHQucmFuZ2UmJih0aGlzLnJhbmdlPXQucmFuZ2UsdGhpcy5zY2FsZT1bMS8odC5yYW5nZVsyXS10LnJhbmdlWzBdKSwxLyh0LnJhbmdlWzNdLXQucmFuZ2VbMV0pXSx0aGlzLnRyYW5zbGF0ZT1bLXQucmFuZ2VbMF0sLXQucmFuZ2VbMV1dKSx0LnNjYWxlJiYodGhpcy5zY2FsZT10LnNjYWxlKSx0LnRyYW5zbGF0ZSYmKHRoaXMudHJhbnNsYXRlPXQudHJhbnNsYXRlKSx0aGlzLnNjYWxlfHwodGhpcy5zY2FsZT1bMS90aGlzLnZpZXdwb3J0LndpZHRoLDEvdGhpcy52aWV3cG9ydC5oZWlnaHRdKSx0aGlzLnRyYW5zbGF0ZXx8KHRoaXMudHJhbnNsYXRlPVswLDBdKSx0aGlzLmZvbnQubGVuZ3RofHx0LmZvbnR8fCh0LmZvbnQ9ay5iYXNlRm9udFNpemUrInB4IHNhbnMtc2VyaWYiKTt2YXIgcixhPSExLG89ITE7aWYodC5mb250JiYoQXJyYXkuaXNBcnJheSh0LmZvbnQpP3QuZm9udDpbdC5mb250XSkuZm9yRWFjaChmdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0cnl7dD1uLnBhcnNlKHQpfWNhdGNoKGUpe3Q9bi5wYXJzZShrLmJhc2VGb250U2l6ZSsicHggIit0KX1lbHNlIHQ9bi5wYXJzZShuLnN0cmluZ2lmeSh0KSk7dmFyIGk9bi5zdHJpbmdpZnkoe3NpemU6ay5iYXNlRm9udFNpemUsZmFtaWx5OnQuZmFtaWx5LHN0cmV0Y2g6Xz90LnN0cmV0Y2g6dm9pZCAwLHZhcmlhbnQ6dC52YXJpYW50LHdlaWdodDp0LndlaWdodCxzdHlsZTp0LnN0eWxlfSkscz1wKHQuc2l6ZSksbD1NYXRoLnJvdW5kKHNbMF0qZChzWzFdKSk7aWYobCE9PWUuZm9udFNpemVbcl0mJihvPSEwLGUuZm9udFNpemVbcl09bCksIShlLmZvbnRbcl0mJmk9PWUuZm9udFtyXS5iYXNlU3RyaW5nfHwoYT0hMCxlLmZvbnRbcl09ay5mb250c1tpXSxlLmZvbnRbcl0pKSl7dmFyIGM9dC5mYW1pbHkuam9pbigiLCAiKSx1PVt0LnN0eWxlXTt0LnN0eWxlIT10LnZhcmlhbnQmJnUucHVzaCh0LnZhcmlhbnQpLHQudmFyaWFudCE9dC53ZWlnaHQmJnUucHVzaCh0LndlaWdodCksXyYmdC53ZWlnaHQhPXQuc3RyZXRjaCYmdS5wdXNoKHQuc3RyZXRjaCksZS5mb250W3JdPXtiYXNlU3RyaW5nOmksZmFtaWx5OmMsd2VpZ2h0OnQud2VpZ2h0LHN0cmV0Y2g6dC5zdHJldGNoLHN0eWxlOnQuc3R5bGUsdmFyaWFudDp0LnZhcmlhbnQsd2lkdGg6e30sa2VybmluZzp7fSxtZXRyaWNzOm0oYyx7b3JpZ2luOiJ0b3AiLGZvbnRTaXplOmsuYmFzZUZvbnRTaXplLGZvbnRTdHlsZTp1LmpvaW4oIiAiKX0pfSxrLmZvbnRzW2ldPWUuZm9udFtyXX19KSwoYXx8bykmJnRoaXMuZm9udC5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7dmFyIGE9bi5zdHJpbmdpZnkoe3NpemU6ZS5mb250U2l6ZVtpXSxmYW1pbHk6ci5mYW1pbHksc3RyZXRjaDpfP3Iuc3RyZXRjaDp2b2lkIDAsdmFyaWFudDpyLnZhcmlhbnQsd2VpZ2h0OnIud2VpZ2h0LHN0eWxlOnIuc3R5bGV9KTtpZihlLmZvbnRBdGxhc1tpXT1lLnNoYWRlci5hdGxhc1thXSwhZS5mb250QXRsYXNbaV0pe3ZhciBvPXIubWV0cmljcztlLnNoYWRlci5hdGxhc1thXT1lLmZvbnRBdGxhc1tpXT17Zm9udFN0cmluZzphLHN0ZXA6MipNYXRoLmNlaWwoZS5mb250U2l6ZVtpXSpvLmJvdHRvbSouNSksZW06ZS5mb250U2l6ZVtpXSxjb2xzOjAscm93czowLGhlaWdodDowLHdpZHRoOjAsY2hhcnM6W10saWRzOnt9LHRleHR1cmU6ZS5yZWdsLnRleHR1cmUoKX19bnVsbD09dC50ZXh0JiYodC50ZXh0PWUudGV4dCl9KSwic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmdC5wb3NpdGlvbiYmdC5wb3NpdGlvbi5sZW5ndGg+Mil7Zm9yKHZhciBzPUFycmF5KC41KnQucG9zaXRpb24ubGVuZ3RoKSxoPTA7aDxzLmxlbmd0aDtoKyspc1toXT10LnRleHQ7dC50ZXh0PXN9aWYobnVsbCE9dC50ZXh0fHxhKXtpZih0aGlzLnRleHRPZmZzZXRzPVswXSxBcnJheS5pc0FycmF5KHQudGV4dCkpe3RoaXMuY291bnQ9dC50ZXh0WzBdLmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07Zm9yKHZhciBiPTE7Yjx0LnRleHQubGVuZ3RoO2IrKyllLnRleHRPZmZzZXRzW2JdPWUudGV4dE9mZnNldHNbYi0xXSt0LnRleHRbYi0xXS5sZW5ndGgsZS5jb3VudCs9dC50ZXh0W2JdLmxlbmd0aCxlLmNvdW50cy5wdXNoKHQudGV4dFtiXS5sZW5ndGgpO3RoaXMudGV4dD10LnRleHQuam9pbigiIil9ZWxzZSB0aGlzLnRleHQ9dC50ZXh0LHRoaXMuY291bnQ9dGhpcy50ZXh0Lmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07cj1bXSx0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbih0LG4pe2suYXRsYXNDb250ZXh0LmZvbnQ9dC5iYXNlU3RyaW5nO2Zvcih2YXIgaT1lLmZvbnRBdGxhc1tuXSxhPTA7YTxlLnRleHQubGVuZ3RoO2ErKyl7dmFyIG89ZS50ZXh0LmNoYXJBdChhKTtpZihudWxsPT1pLmlkc1tvXSYmKGkuaWRzW29dPWkuY2hhcnMubGVuZ3RoLGkuY2hhcnMucHVzaChvKSxyLnB1c2gobykpLG51bGw9PXQud2lkdGhbb10mJih0LndpZHRoW29dPWsuYXRsYXNDb250ZXh0Lm1lYXN1cmVUZXh0KG8pLndpZHRoL2suYmFzZUZvbnRTaXplLGUua2VybmluZykpe3ZhciBzPVtdO2Zvcih2YXIgbCBpbiB0LndpZHRoKXMucHVzaChsK28sbytsKTt2KHQua2VybmluZyxnKHQuZmFtaWx5LHtwYWlyczpzfSkpfX19KX1pZih0LnBvc2l0aW9uKWlmKHQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgdz0hdC5wb3NpdGlvblswXS5sZW5ndGgsVD11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCksQT0wLE09MDtBPHRoaXMuY291bnRzLmxlbmd0aDtBKyspe3ZhciBTPWUuY291bnRzW0FdO2lmKHcpZm9yKHZhciBFPTA7RTxTO0UrKylUW00rK109dC5wb3NpdGlvblsyKkFdLFRbTSsrXT10LnBvc2l0aW9uWzIqQSsxXTtlbHNlIGZvcih2YXIgQz0wO0M8UztDKyspVFtNKytdPXQucG9zaXRpb25bQV1bMF0sVFtNKytdPXQucG9zaXRpb25bQV1bMV19dGhpcy5wb3NpdGlvbi5jYWxsP3RoaXMucG9zaXRpb24oe3R5cGU6ImZsb2F0IixkYXRhOlR9KTp0aGlzLnBvc2l0aW9uPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6ImZsb2F0IixkYXRhOlR9KSx1LmZyZWVGbG9hdChUKX1lbHNlIHRoaXMucG9zaXRpb24uZGVzdHJveSYmdGhpcy5wb3NpdGlvbi5kZXN0cm95KCksdGhpcy5wb3NpdGlvbj17Y29uc3RhbnQ6dC5wb3NpdGlvbn07aWYodC50ZXh0fHxhKXt2YXIgTD11Lm1hbGxvY1VpbnQ4KHRoaXMuY291bnQpLHo9dS5tYWxsb2NGbG9hdCgyKnRoaXMuY291bnQpO3RoaXMudGV4dFdpZHRoPVtdO2Zvcih2YXIgTz0wLEk9MDtPPHRoaXMuY291bnRzLmxlbmd0aDtPKyspe2Zvcih2YXIgRD1lLmNvdW50c1tPXSxQPWUuZm9udFtPXXx8ZS5mb250WzBdLFI9ZS5mb250QXRsYXNbT118fGUuZm9udEF0bGFzWzBdLEY9MDtGPEQ7RisrKXt2YXIgQj1lLnRleHQuY2hhckF0KEkpLE49ZS50ZXh0LmNoYXJBdChJLTEpO2lmKExbSV09Ui5pZHNbQl0selsyKkldPVAud2lkdGhbQl0sRil7dmFyIGo9elsyKkktMl0sVj16WzIqSV0sVT16WzIqSS0xXSsuNSpqKy41KlY7aWYoZS5rZXJuaW5nKXt2YXIgcT1QLmtlcm5pbmdbTitCXTtxJiYoVSs9LjAwMSpxKX16WzIqSSsxXT1VfWVsc2UgelsyKkkrMV09LjUqelsyKkldO0krK31lLnRleHRXaWR0aC5wdXNoKHoubGVuZ3RoPy41KnpbMipJLTJdK3pbMipJLTFdOjApfXQuYWxpZ258fCh0LmFsaWduPXRoaXMuYWxpZ24pLHRoaXMuY2hhckJ1ZmZlcih7ZGF0YTpMLHR5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2l6ZUJ1ZmZlcih7ZGF0YTp6LHR5cGU6ImZsb2F0Iix1c2FnZToic3RyZWFtIn0pLHUuZnJlZVVpbnQ4KEwpLHUuZnJlZUZsb2F0KHopLHIubGVuZ3RoJiZ0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZm9udEF0bGFzW3JdLGk9bi5zdGVwLGE9TWF0aC5mbG9vcihrLm1heEF0bGFzU2l6ZS9pKSxvPU1hdGgubWluKGEsbi5jaGFycy5sZW5ndGgpLHM9TWF0aC5jZWlsKG4uY2hhcnMubGVuZ3RoL28pLGw9eChvKmkpLHU9eChzKmkpO24ud2lkdGg9bCxuLmhlaWdodD11LG4ucm93cz1zLG4uY29scz1vLG4uZW0mJm4udGV4dHVyZSh7ZGF0YTpjKHtjYW52YXM6ay5hdGxhc0NhbnZhcyxmb250Om4uZm9udFN0cmluZyxjaGFyczpuLmNoYXJzLHNoYXBlOltsLHVdLHN0ZXA6W2ksaV19KX0pfSl9aWYodC5hbGlnbiYmKHRoaXMuYWxpZ249dC5hbGlnbix0aGlzLmFsaWduT2Zmc2V0PXRoaXMudGV4dFdpZHRoLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5hbGlnbik/ZS5hbGlnbi5sZW5ndGg+MT9lLmFsaWduW3JdOmUuYWxpZ25bMF06ZS5hbGlnbjtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG47c3dpdGNoKG4pe2Nhc2UicmlnaHQiOmNhc2UiZW5kIjpyZXR1cm4tdDtjYXNlImNlbnRlciI6Y2FzZSJjZW50cmUiOmNhc2UibWlkZGxlIjpyZXR1cm4uNSotdH1yZXR1cm4gMH0pKSxudWxsPT10aGlzLmJhc2VsaW5lJiZudWxsPT10LmJhc2VsaW5lJiYodC5iYXNlbGluZT0wKSxudWxsIT10LmJhc2VsaW5lJiYodGhpcy5iYXNlbGluZT10LmJhc2VsaW5lLEFycmF5LmlzQXJyYXkodGhpcy5iYXNlbGluZSl8fCh0aGlzLmJhc2VsaW5lPVt0aGlzLmJhc2VsaW5lXSksdGhpcy5iYXNlbGluZU9mZnNldD10aGlzLmJhc2VsaW5lLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPShlLmZvbnRbcl18fGUuZm9udFswXSkubWV0cmljcyxpPTA7cmV0dXJuIGkrPS41Km4uYm90dG9tLGkrPSJudW1iZXIiPT10eXBlb2YgdD90LW4uYmFzZWxpbmU6LW5bdF0say5ub3JtYWxWaWV3cG9ydHx8KGkqPS0xKSxpfSkpLG51bGwhPXQuY29sb3IpaWYodC5jb2xvcnx8KHQuY29sb3I9InRyYW5zcGFyZW50IiksInN0cmluZyIhPXR5cGVvZiB0LmNvbG9yJiZpc05hTih0LmNvbG9yKSl7dmFyIEg7aWYoIm51bWJlciI9PXR5cGVvZiB0LmNvbG9yWzBdJiZ0LmNvbG9yLmxlbmd0aD50aGlzLmNvdW50cy5sZW5ndGgpe3ZhciBHPXQuY29sb3IubGVuZ3RoO0g9dS5tYWxsb2NVaW50OChHKTtmb3IodmFyIFk9KHQuY29sb3Iuc3ViYXJyYXl8fHQuY29sb3Iuc2xpY2UpLmJpbmQodC5jb2xvciksVz0wO1c8RztXKz00KUguc2V0KGwoWShXLFcrNCksInVpbnQ4IiksVyl9ZWxzZXt2YXIgWD10LmNvbG9yLmxlbmd0aDtIPXUubWFsbG9jVWludDgoNCpYKTtmb3IodmFyIFo9MDtaPFg7WisrKUguc2V0KGwodC5jb2xvcltaXXx8MCwidWludDgiKSw0KlopfXRoaXMuY29sb3I9SH1lbHNlIHRoaXMuY29sb3I9bCh0LmNvbG9yLCJ1aW50OCIpO2lmKHQucG9zaXRpb258fHQudGV4dHx8dC5jb2xvcnx8dC5iYXNlbGluZXx8dC5hbGlnbnx8dC5mb250fHx0Lm9mZnNldHx8dC5vcGFjaXR5KWlmKHRoaXMuY29sb3IubGVuZ3RoPjR8fHRoaXMuYmFzZWxpbmVPZmZzZXQubGVuZ3RoPjF8fHRoaXMuYWxpZ24mJnRoaXMuYWxpZ24ubGVuZ3RoPjF8fHRoaXMuZm9udEF0bGFzLmxlbmd0aD4xfHx0aGlzLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yKXt2YXIgJD1NYXRoLm1heCguNSp0aGlzLnBvc2l0aW9uLmxlbmd0aHx8MCwuMjUqdGhpcy5jb2xvci5sZW5ndGh8fDAsdGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGh8fDAsdGhpcy5hbGlnbk9mZnNldC5sZW5ndGh8fDAsdGhpcy5mb250Lmxlbmd0aHx8MCx0aGlzLm9wYWNpdHkubGVuZ3RofHwwLC41KnRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RofHwwKTt0aGlzLmJhdGNoPUFycmF5KCQpO2Zvcih2YXIgSj0wO0o8dGhpcy5iYXRjaC5sZW5ndGg7SisrKWUuYmF0Y2hbSl09e2NvdW50OmUuY291bnRzLmxlbmd0aD4xP2UuY291bnRzW0pdOmUuY291bnRzWzBdLG9mZnNldDplLnRleHRPZmZzZXRzLmxlbmd0aD4xP2UudGV4dE9mZnNldHNbSl06ZS50ZXh0T2Zmc2V0c1swXSxjb2xvcjplLmNvbG9yP2UuY29sb3IubGVuZ3RoPD00P2UuY29sb3I6ZS5jb2xvci5zdWJhcnJheSg0KkosNCpKKzQpOlswLDAsMCwyNTVdLG9wYWNpdHk6QXJyYXkuaXNBcnJheShlLm9wYWNpdHkpP2Uub3BhY2l0eVtKXTplLm9wYWNpdHksYmFzZWxpbmU6bnVsbCE9ZS5iYXNlbGluZU9mZnNldFtKXT9lLmJhc2VsaW5lT2Zmc2V0W0pdOmUuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246ZS5hbGlnbj9udWxsIT1lLmFsaWduT2Zmc2V0W0pdP2UuYWxpZ25PZmZzZXRbSl06ZS5hbGlnbk9mZnNldFswXTowLGF0bGFzOmUuZm9udEF0bGFzW0pdfHxlLmZvbnRBdGxhc1swXSxwb3NpdGlvbk9mZnNldDplLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yP2UucG9zaXRpb25PZmZzZXQuc3ViYXJyYXkoMipKLDIqSisyKTplLnBvc2l0aW9uT2Zmc2V0fX1lbHNlIHRoaXMuY291bnQ/dGhpcy5iYXRjaD1be2NvdW50OnRoaXMuY291bnQsb2Zmc2V0OjAsY29sb3I6dGhpcy5jb2xvcnx8WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KHRoaXMub3BhY2l0eSk/dGhpcy5vcGFjaXR5WzBdOnRoaXMub3BhY2l0eSxiYXNlbGluZTp0aGlzLmJhc2VsaW5lT2Zmc2V0WzBdLGFsaWduOnRoaXMuYWxpZ25PZmZzZXQ/dGhpcy5hbGlnbk9mZnNldFswXTowLGF0bGFzOnRoaXMuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OnRoaXMucG9zaXRpb25PZmZzZXR9XTp0aGlzLmJhdGNoPVtdfSxrLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSxrLnByb3RvdHlwZS5rZXJuaW5nPSEwLGsucHJvdG90eXBlLnBvc2l0aW9uPXtjb25zdGFudDpuZXcgRmxvYXQzMkFycmF5KDIpfSxrLnByb3RvdHlwZS50cmFuc2xhdGU9bnVsbCxrLnByb3RvdHlwZS5zY2FsZT1udWxsLGsucHJvdG90eXBlLmZvbnQ9bnVsbCxrLnByb3RvdHlwZS50ZXh0PSIiLGsucHJvdG90eXBlLnBvc2l0aW9uT2Zmc2V0PVswLDBdLGsucHJvdG90eXBlLm9wYWNpdHk9MSxrLnByb3RvdHlwZS5jb2xvcj1uZXcgVWludDhBcnJheShbMCwwLDAsMjU1XSksay5wcm90b3R5cGUuYWxpZ25PZmZzZXQ9WzAsMF0say5ub3JtYWxWaWV3cG9ydD0hMSxrLm1heEF0bGFzU2l6ZT0xMDI0LGsuYXRsYXNDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksay5hdGxhc0NvbnRleHQ9ay5hdGxhc0NhbnZhcy5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSksay5iYXNlRm9udFNpemU9NjQsay5mb250cz17fSxlLmV4cG9ydHM9a30seyJiaXQtdHdpZGRsZSI6ODIsImNvbG9yLW5vcm1hbGl6ZSI6MTEwLCJjc3MtZm9udCI6MTI5LCJkZXRlY3Qta2VybmluZyI6MTU3LCJlczYtd2Vhay1tYXAiOjIxNiwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjIzLCJmb250LWF0bGFzIjoyMjQsImZvbnQtbWVhc3VyZSI6MjI1LCJnbC11dGlsL2NvbnRleHQiOjMxNSwiaXMtcGxhaW4tb2JqIjo0MTQsIm9iamVjdC1hc3NpZ24iOjQ0NiwicGFyc2UtcmVjdCI6NDUxLCJwYXJzZS11bml0Ijo0NTMsInBpY2stYnktYWxpYXMiOjQ1NyxyZWdsOjQ4NiwidG8tcHgiOjUyMywidHlwZWRhcnJheS1wb29sIjo1Mjl9XSwzMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgibmRhcnJheS1vcHMiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoPD0xKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBNaXNzaW5nIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIik7b3x8ZnVuY3Rpb24odCl7bz1bdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1RdLHM9W3QuTkVBUkVTVCx0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX05FQVJFU1QsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX0xJTkVBUl0sbD1bdC5SRVBFQVQsdC5DTEFNUF9UT19FREdFLHQuTUlSUk9SRURfUkVQRUFUXX0odCk7aWYoIm51bWJlciI9PXR5cGVvZiBhcmd1bWVudHNbMV0pcmV0dXJuIHYodCxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXXx8dC5SR0JBLGFyZ3VtZW50c1s0XXx8dC5VTlNJR05FRF9CWVRFKTtpZihBcnJheS5pc0FycmF5KGFyZ3VtZW50c1sxXSkpcmV0dXJuIHYodCwwfGFyZ3VtZW50c1sxXVswXSwwfGFyZ3VtZW50c1sxXVsxXSxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXSxyPWMoZSk/ZTplLnJhdztpZihyKXJldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGksaSxhLGUpLG5ldyBoKHQsbyxyLG4saSxhKX0odCxyLDB8ZS53aWR0aCwwfGUuaGVpZ2h0LGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZihlLnNoYXBlJiZlLmRhdGEmJmUuc3RyaWRlKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWUuZHR5cGUsbz1lLnNoYXBlLnNsaWNlKCkscz10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKG9bMF08MHx8b1swXT5zfHxvWzFdPDB8fG9bMV0+cyl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTt2YXIgbD1kKG8sZS5zdHJpZGUuc2xpY2UoKSksYz0wOyJmbG9hdDMyIj09PXI/Yz10LkZMT0FUOiJmbG9hdDY0Ij09PXI/KGM9dC5GTE9BVCxsPSExLHI9ImZsb2F0MzIiKToidWludDgiPT09cj9jPXQuVU5TSUdORURfQllURTooYz10LlVOU0lHTkVEX0JZVEUsbD0hMSxyPSJ1aW50OCIpO3ZhciBmLHAsdj0wO2lmKDI9PT1vLmxlbmd0aCl2PXQuTFVNSU5BTkNFLG89W29bMF0sb1sxXSwxXSxlPW4oZS5kYXRhLG8sW2Uuc3RyaWRlWzBdLGUuc3RyaWRlWzFdLDFdLGUub2Zmc2V0KTtlbHNle2lmKDMhPT1vLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgdGV4dHVyZSIpO2lmKDE9PT1vWzJdKXY9dC5BTFBIQTtlbHNlIGlmKDI9PT1vWzJdKXY9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09b1syXSl2PXQuUkdCO2Vsc2V7aWYoNCE9PW9bMl0pdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3JkcyIpO3Y9dC5SR0JBfX1jIT09dC5GTE9BVHx8dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0Iil8fChjPXQuVU5TSUdORURfQllURSxsPSExKTt2YXIgbT1lLnNpemU7aWYobClmPTA9PT1lLm9mZnNldCYmZS5kYXRhLmxlbmd0aD09PW0/ZS5kYXRhOmUuZGF0YS5zdWJhcnJheShlLm9mZnNldCxlLm9mZnNldCttKTtlbHNle3ZhciB5PVtvWzJdLG9bMl0qb1swXSwxXTtwPWEubWFsbG9jKG0scik7dmFyIHg9bihwLG8seSwwKTsiZmxvYXQzMiIhPT1yJiYiZmxvYXQ2NCIhPT1yfHxjIT09dC5VTlNJR05FRF9CWVRFP2kuYXNzaWduKHgsZSk6dSh4LGUpLGY9cC5zdWJhcnJheSgwLG0pfXZhciBiPWcodCk7dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLHYsb1swXSxvWzFdLDAsdixjLGYpLGx8fGEuZnJlZShwKTtyZXR1cm4gbmV3IGgodCxiLG9bMF0sb1sxXSx2LGMpfSh0LGUpfXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIil9O3ZhciBvPW51bGwscz1udWxsLGw9bnVsbDtmdW5jdGlvbiBjKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBJbWFnZURhdGEmJnQgaW5zdGFuY2VvZiBJbWFnZURhdGF9dmFyIHU9ZnVuY3Rpb24odCxlKXtpLm11bHModCxlLDI1NSl9O2Z1bmN0aW9uIGYodCxlLHIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTtyZXR1cm4gdC5fc2hhcGU9W2Uscl0sdC5iaW5kKCksbi50ZXhJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLHQuZm9ybWF0LGUsciwwLHQuZm9ybWF0LHQudHlwZSxudWxsKSx0Ll9taXBMZXZlbHM9WzBdLHR9ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dGhpcy5nbD10LHRoaXMuaGFuZGxlPWUsdGhpcy5mb3JtYXQ9aSx0aGlzLnR5cGU9YSx0aGlzLl9zaGFwZT1bcixuXSx0aGlzLl9taXBMZXZlbHM9WzBdLHRoaXMuX21hZ0ZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fbWluRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl93cmFwUz10LkNMQU1QX1RPX0VER0UsdGhpcy5fd3JhcFQ9dC5DTEFNUF9UT19FREdFLHRoaXMuX2FuaXNvU2FtcGxlcz0xO3ZhciBvPXRoaXMscz1bdGhpcy5fd3JhcFMsdGhpcy5fd3JhcFRdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHMsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwUz10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBUPXR9fV0pLHRoaXMuX3dyYXBWZWN0b3I9czt2YXIgbD1bdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV1dO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53aWR0aD10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLmhlaWdodD10fX1dKSx0aGlzLl9zaGFwZVZlY3Rvcj1sfXZhciBwPWgucHJvdG90eXBlO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4gMz09PXQubGVuZ3RoPzE9PT1lWzJdJiZlWzFdPT09dFswXSp0WzJdJiZlWzBdPT09dFsyXToxPT09ZVswXSYmZVsxXT09PXRbMF19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmNyZWF0ZVRleHR1cmUoKTtyZXR1cm4gdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUlOX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSxlfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgYT10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5hfHxyPDB8fHI+YSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlIik7aWYoaT09PXQuRkxPQVQmJiF0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogRmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLG4sZSxyLDAsbixpLG51bGwpLG5ldyBoKHQsbyxlLHIsbixpKX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhwLHttaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5GaWx0ZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJpbmQoKTt2YXIgZT10aGlzLmdsO2lmKHRoaXMudHlwZT09PWUuRkxPQVQmJm8uaW5kZXhPZih0KT49MCYmKGUuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gZmlsdGVyIG1vZGUgIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUix0KSx0aGlzLl9taW5GaWx0ZXI9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmby5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwodD1lLk5FQVJFU1QpKSxzLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSAiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLHQpLHRoaXMuX21hZ0ZpbHRlcj10fX0sbWlwU2FtcGxlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc30sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FuaXNvU2FtcGxlcztpZih0aGlzLl9hbmlzb1NhbXBsZXM9MHxNYXRoLm1heCh0LDEpLGUhPT10aGlzLl9hbmlzb1NhbXBsZXMpe3ZhciByPXRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtyJiZ0aGlzLmdsLnRleFBhcmFtZXRlcmYodGhpcy5nbC5URVhUVVJFXzJELHIuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsdGhpcy5fYW5pc29TYW1wbGVzKX1yZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfX0sd3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGwuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3JldHVybiB0aGlzLmdsLnRleFBhcmFtZXRlcmkodGhpcy5nbC5URVhUVVJFXzJELHRoaXMuZ2wuVEVYVFVSRV9XUkFQX1MsdCksdGhpcy5fd3JhcFM9dH19LHdyYXBUOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFR9LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmJpbmQoKSxsLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9ULHQpLHRoaXMuX3dyYXBUPXR9fSx3cmFwOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVt0LHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IE11c3Qgc3BlY2lmeSB3cmFwIG1vZGUgZm9yIHJvd3MgYW5kIGNvbHVtbnMiKTtmb3IodmFyIGU9MDtlPDI7KytlKWlmKGwuaW5kZXhPZih0W2VdKTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3RoaXMuX3dyYXBTPXRbMF0sdGhpcy5fd3JhcFQ9dFsxXTt2YXIgcj10aGlzLmdsO3JldHVybiB0aGlzLmJpbmQoKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1MsdGhpcy5fd3JhcFMpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfVCx0aGlzLl93cmFwVCksdH19LHNoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZSIpfWVsc2UgdD1bMHx0LDB8dF07cmV0dXJuIGYodGhpcywwfHRbMF0sMHx0WzFdKSxbMHx0WzBdLDB8dFsxXV19fSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGYodGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxmKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH19fSkscC5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2w7cmV0dXJuIHZvaWQgMCE9PXQmJmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwKygwfHQpKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLmhhbmRsZSksdm9pZCAwIT09dD8wfHQ6ZS5nZXRQYXJhbWV0ZXIoZS5BQ1RJVkVfVEVYVFVSRSktZS5URVhUVVJFMH0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVUZXh0dXJlKHRoaXMuaGFuZGxlKX0scC5nZW5lcmF0ZU1pcG1hcD1mdW5jdGlvbigpe3RoaXMuYmluZCgpLHRoaXMuZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5nbC5URVhUVVJFXzJEKTtmb3IodmFyIHQ9TWF0aC5taW4odGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pLGU9MDt0PjA7KytlLHQ+Pj49MSl0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihlKTwwJiZ0aGlzLl9taXBMZXZlbHMucHVzaChlKX0scC5zZXRQaXhlbHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9dGhpcy5nbDt0aGlzLmJpbmQoKSxBcnJheS5pc0FycmF5KGUpPyhvPXIscj0wfGVbMV0sZT0wfGVbMF0pOihlPWV8fDAscj1yfHwwKSxvPW98fDA7dmFyIGw9Yyh0KT90OnQucmF3O2lmKGwpe3RoaXMuX21pcExldmVscy5pbmRleE9mKG8pPDA/KHMudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsbCksdGhpcy5fbWlwTGV2ZWxzLnB1c2gobykpOnMudGV4U3ViSW1hZ2UyRChzLlRFWFRVUkVfMkQsbyxlLHIsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpfWVsc2V7aWYoISh0LnNoYXBlJiZ0LnN0cmlkZSYmdC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7aWYodC5zaGFwZS5sZW5ndGg8Mnx8ZSt0LnNoYXBlWzFdPnRoaXMuX3NoYXBlWzFdPj4+b3x8cit0LnNoYXBlWzBdPnRoaXMuX3NoYXBlWzBdPj4+b3x8ZTwwfHxyPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFRleHR1cmUgZGltZW5zaW9ucyBhcmUgb3V0IG9mIGJvdW5kcyIpOyFmdW5jdGlvbih0LGUscixvLHMsbCxjLGYpe3ZhciBoPWYuZHR5cGUscD1mLnNoYXBlLnNsaWNlKCk7aWYocC5sZW5ndGg8Mnx8cC5sZW5ndGg+Myl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBuZGFycmF5LCBtdXN0IGJlIDJkIG9yIDNkIik7dmFyIGc9MCx2PTAsbT1kKHAsZi5zdHJpZGUuc2xpY2UoKSk7ImZsb2F0MzIiPT09aD9nPXQuRkxPQVQ6ImZsb2F0NjQiPT09aD8oZz10LkZMT0FULG09ITEsaD0iZmxvYXQzMiIpOiJ1aW50OCI9PT1oP2c9dC5VTlNJR05FRF9CWVRFOihnPXQuVU5TSUdORURfQllURSxtPSExLGg9InVpbnQ4Iik7aWYoMj09PXAubGVuZ3RoKXY9dC5MVU1JTkFOQ0UscD1bcFswXSxwWzFdLDFdLGY9bihmLmRhdGEscCxbZi5zdHJpZGVbMF0sZi5zdHJpZGVbMV0sMV0sZi5vZmZzZXQpO2Vsc2V7aWYoMyE9PXAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PXBbMl0pdj10LkFMUEhBO2Vsc2UgaWYoMj09PXBbMl0pdj10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1wWzJdKXY9dC5SR0I7ZWxzZXtpZig0IT09cFsyXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7dj10LlJHQkF9cFsyXX12IT09dC5MVU1JTkFOQ0UmJnYhPT10LkFMUEhBfHxzIT09dC5MVU1JTkFOQ0UmJnMhPT10LkFMUEhBfHwodj1zKTtpZih2IT09cyl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW5jb21wYXRpYmxlIHRleHR1cmUgZm9ybWF0IGZvciBzZXRQaXhlbHMiKTt2YXIgeT1mLnNpemUseD1jLmluZGV4T2Yobyk8MDt4JiZjLnB1c2gobyk7aWYoZz09PWwmJm0pMD09PWYub2Zmc2V0JiZmLmRhdGEubGVuZ3RoPT09eT94P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCxmLmRhdGEpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCxmLmRhdGEpOng/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGYuZGF0YS5zdWJhcnJheShmLm9mZnNldCxmLm9mZnNldCt5KSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGYuZGF0YS5zdWJhcnJheShmLm9mZnNldCxmLm9mZnNldCt5KSk7ZWxzZXt2YXIgYjtiPWw9PT10LkZMT0FUP2EubWFsbG9jRmxvYXQzMih5KTphLm1hbGxvY1VpbnQ4KHkpO3ZhciBfPW4oYixwLFtwWzJdLHBbMl0qcFswXSwxXSk7Zz09PXQuRkxPQVQmJmw9PT10LlVOU0lHTkVEX0JZVEU/dShfLGYpOmkuYXNzaWduKF8sZikseD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsYi5zdWJhcnJheSgwLHkpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsYi5zdWJhcnJheSgwLHkpKSxsPT09dC5GTE9BVD9hLmZyZWVGbG9hdDMyKGIpOmEuZnJlZVVpbnQ4KGIpfX0ocyxlLHIsbyx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsdGhpcy5fbWlwTGV2ZWxzLHQpfX19LHtuZGFycmF5OjQ0MiwibmRhcnJheS1vcHMiOjQzNiwidHlwZWRhcnJheS1wb29sIjo1Mjl9XSwzMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGljay1ieS1hbGlhcyIpO2Z1bmN0aW9uIGkodCl7aWYodC5jb250YWluZXIpaWYodC5jb250YWluZXI9PWRvY3VtZW50LmJvZHkpZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aHx8KHQuY2FudmFzLndpZHRoPXQud2lkdGh8fHQucGl4ZWxSYXRpbyp3aW5kb3cuaW5uZXJXaWR0aCksZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHR8fCh0LmNhbnZhcy5oZWlnaHQ9dC5oZWlnaHR8fHQucGl4ZWxSYXRpbyp3aW5kb3cuaW5uZXJIZWlnaHQpO2Vsc2V7dmFyIGU9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jYW52YXMud2lkdGg9dC53aWR0aHx8ZS5yaWdodC1lLmxlZnQsdC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHxlLmJvdHRvbS1lLnRvcH19ZnVuY3Rpb24gYSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDb250ZXh0JiYid2lkdGgiaW4gdCYmImhlaWdodCJpbiB0fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtpZih0PyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9e2NvbnRhaW5lcjp0fSk6dD17fSxhKHQpP3Q9e2NvbnRhaW5lcjp0fTp0PSJzdHJpbmciPT10eXBlb2YoZT10KS5ub2RlTmFtZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuYXBwZW5kQ2hpbGQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD97Y29udGFpbmVyOnR9OmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdBcnJheXN8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdFbGVtZW50c30odCk/e2dsOnR9Om4odCx7Y29udGFpbmVyOiJjb250YWluZXIgdGFyZ2V0IGVsZW1lbnQgZWwgY2FudmFzIGhvbGRlciBwYXJlbnQgcGFyZW50Tm9kZSB3cmFwcGVyIHVzZSByZWYgcm9vdCBub2RlIixnbDoiZ2wgY29udGV4dCB3ZWJnbCBnbENvbnRleHQiLGF0dHJzOiJhdHRyaWJ1dGVzIGF0dHJzIGNvbnRleHRBdHRyaWJ1dGVzIixwaXhlbFJhdGlvOiJwaXhlbFJhdGlvIHB4UmF0aW8gcHggcmF0aW8gcHhyYXRpbyBwaXhlbHJhdGlvIn0sITApLHQucGl4ZWxSYXRpb3x8KHQucGl4ZWxSYXRpbz13aW5kb3cucGl4ZWxSYXRpb3x8MSksdC5nbClyZXR1cm4gdC5nbDtpZih0LmNhbnZhcyYmKHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpLHQuY29udGFpbmVyKXtpZigic3RyaW5nIj09dHlwZW9mIHQuY29udGFpbmVyKXt2YXIgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQuY29udGFpbmVyKTtpZighcil0aHJvdyBFcnJvcigiRWxlbWVudCAiK3QuY29udGFpbmVyKyIgaXMgbm90IGZvdW5kIik7dC5jb250YWluZXI9cn1hKHQuY29udGFpbmVyKT8odC5jYW52YXM9dC5jb250YWluZXIsdC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSk6dC5jYW52YXN8fCh0LmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksaSh0KSl9ZWxzZSB0LmNhbnZhc3x8KHQuY29udGFpbmVyPWRvY3VtZW50LmJvZHl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0LmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0LmNhbnZhcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuY2FudmFzLnN0eWxlLnRvcD0wLHQuY2FudmFzLnN0eWxlLmxlZnQ9MCx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksaSh0KSk7aWYoIXQuZ2wpdHJ5e3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wiLHQuYXR0cnMpfWNhdGNoKGUpe3RyeXt0LmdsPXQuY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsdC5hdHRycyl9Y2F0Y2goZSl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbC1leHBlcmltZW50YWwiLHQuYXR0cnMpfX1yZXR1cm4gdC5nbH19LHsicGljay1ieS1hbGlhcyI6NDU3fV0sMzE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT9lLmJpbmQoKTp0LmJpbmRCdWZmZXIodC5FTEVNRU5UX0FSUkFZX0JVRkZFUixudWxsKTt2YXIgbj0wfHQuZ2V0UGFyYW1ldGVyKHQuTUFYX1ZFUlRFWF9BVFRSSUJTKTtpZihyKXtpZihyLmxlbmd0aD5uKXRocm93IG5ldyBFcnJvcigiZ2wtdmFvOiBUb28gbWFueSB2ZXJ0ZXggYXR0cmlidXRlcyIpO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgYT1yW2ldO2lmKGEuYnVmZmVyKXt2YXIgbz1hLmJ1ZmZlcixzPWEuc2l6ZXx8NCxsPWEudHlwZXx8dC5GTE9BVCxjPSEhYS5ub3JtYWxpemVkLHU9YS5zdHJpZGV8fDAsZj1hLm9mZnNldHx8MDtvLmJpbmQoKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLHQudmVydGV4QXR0cmliUG9pbnRlcihpLHMsbCxjLHUsZil9ZWxzZXtpZigibnVtYmVyIj09dHlwZW9mIGEpdC52ZXJ0ZXhBdHRyaWIxZihpLGEpO2Vsc2UgaWYoMT09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliMWYoaSxhWzBdKTtlbHNlIGlmKDI9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjJmKGksYVswXSxhWzFdKTtlbHNlIGlmKDM9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjNmKGksYVswXSxhWzFdLGFbMl0pO2Vsc2V7aWYoNCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdmFvOiBJbnZhbGlkIHZlcnRleCBhdHRyaWJ1dGUiKTt0LnZlcnRleEF0dHJpYjRmKGksYVswXSxhWzFdLGFbMl0sYVszXSl9dC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fWZvcig7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX1lbHNlIGZvcih0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsbnVsbCksaT0wO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fSx7fV0sMzE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZG8tYmluZC5qcyIpO2Z1bmN0aW9uIGkodCl7dGhpcy5nbD10LHRoaXMuX2VsZW1lbnRzPW51bGwsdGhpcy5fYXR0cmlidXRlcz1udWxsLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXtuKHRoaXMuZ2wsdGhpcy5fZWxlbWVudHMsdGhpcy5fYXR0cmlidXRlcyl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5fZWxlbWVudHM9ZSx0aGlzLl9hdHRyaWJ1dGVzPXQsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGkucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe30saS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fZWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHQpfX0seyIuL2RvLWJpbmQuanMiOjMxNn1dLDMxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RvLWJpbmQuanMiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt0aGlzLmxvY2F0aW9uPXQsdGhpcy5kaW1lbnNpb249ZSx0aGlzLmE9cix0aGlzLmI9bix0aGlzLmM9aSx0aGlzLmQ9YX1mdW5jdGlvbiBhKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5fZXh0PWUsdGhpcy5oYW5kbGU9cix0aGlzLl9hdHRyaWJzPVtdLHRoaXMuX3VzZUVsZW1lbnRzPSExLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuZGltZW5zaW9uKXtjYXNlIDE6dC52ZXJ0ZXhBdHRyaWIxZih0aGlzLmxvY2F0aW9uLHRoaXMuYSk7YnJlYWs7Y2FzZSAyOnQudmVydGV4QXR0cmliMmYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iKTticmVhaztjYXNlIDM6dC52ZXJ0ZXhBdHRyaWIzZih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jKTticmVhaztjYXNlIDQ6dC52ZXJ0ZXhBdHRyaWI0Zih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRoaXMuZCl9fSxhLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSk7Zm9yKHZhciB0PTA7dDx0aGlzLl9hdHRyaWJzLmxlbmd0aDsrK3QpdGhpcy5fYXR0cmlic1t0XS5iaW5kKHRoaXMuZ2wpfSxhLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLl9leHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpfSxhLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMuaGFuZGxlKX0sYS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmJpbmQoKSxuKHRoaXMuZ2wsZSx0KSx0aGlzLnVuYmluZCgpLHRoaXMuX2F0dHJpYnMubGVuZ3RoPTAsdClmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG89dFthXTsibnVtYmVyIj09dHlwZW9mIG8/dGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsMSxvKSk6QXJyYXkuaXNBcnJheShvKSYmdGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsby5sZW5ndGgsb1swXSxvWzFdLG9bMl0sb1szXSkpfXRoaXMuX3VzZUVsZW1lbnRzPSEhZSx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fdXNlRWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGEodCxlLGUuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSl9fSx7Ii4vZG8tYmluZC5qcyI6MzE2fV0sMzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3Zhby1uYXRpdmUuanMiKSxpPXQoIi4vbGliL3Zhby1lbXVsYXRlZC5qcyIpO2Z1bmN0aW9uIGEodCl7dGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dC5iaW5kVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmNyZWF0ZVZlcnRleEFycmF5T0VTPXQuY3JlYXRlVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmRlbGV0ZVZlcnRleEFycmF5T0VTPXQuZGVsZXRlVmVydGV4QXJyYXkuYmluZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBhKHQpOnQuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpO3JldHVybihzPWw/bih0LGwpOmkodCkpLnVwZGF0ZShlLHIsbyksc319LHsiLi9saWIvdmFvLWVtdWxhdGVkLmpzIjozMTcsIi4vbGliL3Zhby1uYXRpdmUuanMiOjMxOH1dLDMyMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHR9fSx7fV0sMzIxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0WzBdLHRbMV0sdFsyXSksbz1uKGVbMF0sZVsxXSxlWzJdKTtpKHIsciksaShvLG8pO3ZhciBzPWEocixvKTtyZXR1cm4gcz4xPzA6TWF0aC5hY29zKHMpfTt2YXIgbj10KCIuL2Zyb21WYWx1ZXMiKSxpPXQoIi4vbm9ybWFsaXplIiksYT10KCIuL2RvdCIpfSx7Ii4vZG90IjozMzEsIi4vZnJvbVZhbHVlcyI6MzM3LCIuL25vcm1hbGl6ZSI6MzQ4fV0sMzIyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5jZWlsKGVbMF0pLHRbMV09TWF0aC5jZWlsKGVbMV0pLHRbMl09TWF0aC5jZWlsKGVbMl0pLHR9fSx7fV0sMzIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGV9fSx7fV0sMzI0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9fSx7fV0sMzI1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdH19LHt9XSwzMjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH19LHt9XSwzMjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXN0YW5jZSIpfSx7Ii4vZGlzdGFuY2UiOjMyOH1dLDMyODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppKX19LHt9XSwzMjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXZpZGUiKX0seyIuL2RpdmlkZSI6MzMwfV0sMzMwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdL3JbMF0sdFsxXT1lWzFdL3JbMV0sdFsyXT1lWzJdL3JbMl0sdH19LHt9XSwzMzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19fSx7fV0sMzMyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPTFlLTZ9LHt9XSwzMzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz1lWzBdLHM9ZVsxXSxsPWVbMl07cmV0dXJuIE1hdGguYWJzKHItbyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhvKSkmJk1hdGguYWJzKGktcyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGEtbCk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhsKSl9O3ZhciBuPXQoIi4vZXBzaWxvbiIpfSx7Ii4vZXBzaWxvbiI6MzMyfV0sMzM0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl19fSx7fV0sMzM1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdFsyXT1NYXRoLmZsb29yKGVbMl0pLHR9fSx7fV0sMzM2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxvKXt2YXIgcyxsO2V8fChlPTMpO3J8fChyPTApO2w9aT9NYXRoLm1pbihpKmUrcix0Lmxlbmd0aCk6dC5sZW5ndGg7Zm9yKHM9cjtzPGw7cys9ZSluWzBdPXRbc10sblsxXT10W3MrMV0sblsyXT10W3MrMl0sYShuLG4sbyksdFtzXT1uWzBdLHRbcysxXT1uWzFdLHRbcysyXT1uWzJdO3JldHVybiB0fTt2YXIgbj10KCIuL2NyZWF0ZSIpKCl9LHsiLi9jcmVhdGUiOjMyNX1dLDMzNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gblswXT10LG5bMV09ZSxuWzJdPXIsbn19LHt9XSwzMzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0VQU0lMT046dCgiLi9lcHNpbG9uIiksY3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGFuZ2xlOnQoIi4vYW5nbGUiKSxmcm9tVmFsdWVzOnQoIi4vZnJvbVZhbHVlcyIpLGNvcHk6dCgiLi9jb3B5Iiksc2V0OnQoIi4vc2V0IiksZXF1YWxzOnQoIi4vZXF1YWxzIiksZXhhY3RFcXVhbHM6dCgiLi9leGFjdEVxdWFscyIpLGFkZDp0KCIuL2FkZCIpLHN1YnRyYWN0OnQoIi4vc3VidHJhY3QiKSxzdWI6dCgiLi9zdWIiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksbXVsOnQoIi4vbXVsIiksZGl2aWRlOnQoIi4vZGl2aWRlIiksZGl2OnQoIi4vZGl2IiksbWluOnQoIi4vbWluIiksbWF4OnQoIi4vbWF4IiksZmxvb3I6dCgiLi9mbG9vciIpLGNlaWw6dCgiLi9jZWlsIikscm91bmQ6dCgiLi9yb3VuZCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLGRpc3Q6dCgiLi9kaXN0Iiksc3F1YXJlZERpc3RhbmNlOnQoIi4vc3F1YXJlZERpc3RhbmNlIiksc3FyRGlzdDp0KCIuL3NxckRpc3QiKSxsZW5ndGg6dCgiLi9sZW5ndGgiKSxsZW46dCgiLi9sZW4iKSxzcXVhcmVkTGVuZ3RoOnQoIi4vc3F1YXJlZExlbmd0aCIpLHNxckxlbjp0KCIuL3NxckxlbiIpLG5lZ2F0ZTp0KCIuL25lZ2F0ZSIpLGludmVyc2U6dCgiLi9pbnZlcnNlIiksbm9ybWFsaXplOnQoIi4vbm9ybWFsaXplIiksZG90OnQoIi4vZG90IiksY3Jvc3M6dCgiLi9jcm9zcyIpLGxlcnA6dCgiLi9sZXJwIikscmFuZG9tOnQoIi4vcmFuZG9tIiksdHJhbnNmb3JtTWF0NDp0KCIuL3RyYW5zZm9ybU1hdDQiKSx0cmFuc2Zvcm1NYXQzOnQoIi4vdHJhbnNmb3JtTWF0MyIpLHRyYW5zZm9ybVF1YXQ6dCgiLi90cmFuc2Zvcm1RdWF0Iikscm90YXRlWDp0KCIuL3JvdGF0ZVgiKSxyb3RhdGVZOnQoIi4vcm90YXRlWSIpLHJvdGF0ZVo6dCgiLi9yb3RhdGVaIiksZm9yRWFjaDp0KCIuL2ZvckVhY2giKX19LHsiLi9hZGQiOjMyMCwiLi9hbmdsZSI6MzIxLCIuL2NlaWwiOjMyMiwiLi9jbG9uZSI6MzIzLCIuL2NvcHkiOjMyNCwiLi9jcmVhdGUiOjMyNSwiLi9jcm9zcyI6MzI2LCIuL2Rpc3QiOjMyNywiLi9kaXN0YW5jZSI6MzI4LCIuL2RpdiI6MzI5LCIuL2RpdmlkZSI6MzMwLCIuL2RvdCI6MzMxLCIuL2Vwc2lsb24iOjMzMiwiLi9lcXVhbHMiOjMzMywiLi9leGFjdEVxdWFscyI6MzM0LCIuL2Zsb29yIjozMzUsIi4vZm9yRWFjaCI6MzM2LCIuL2Zyb21WYWx1ZXMiOjMzNywiLi9pbnZlcnNlIjozMzksIi4vbGVuIjozNDAsIi4vbGVuZ3RoIjozNDEsIi4vbGVycCI6MzQyLCIuL21heCI6MzQzLCIuL21pbiI6MzQ0LCIuL211bCI6MzQ1LCIuL211bHRpcGx5IjozNDYsIi4vbmVnYXRlIjozNDcsIi4vbm9ybWFsaXplIjozNDgsIi4vcmFuZG9tIjozNDksIi4vcm90YXRlWCI6MzUwLCIuL3JvdGF0ZVkiOjM1MSwiLi9yb3RhdGVaIjozNTIsIi4vcm91bmQiOjM1MywiLi9zY2FsZSI6MzU0LCIuL3NjYWxlQW5kQWRkIjozNTUsIi4vc2V0IjozNTYsIi4vc3FyRGlzdCI6MzU3LCIuL3NxckxlbiI6MzU4LCIuL3NxdWFyZWREaXN0YW5jZSI6MzU5LCIuL3NxdWFyZWRMZW5ndGgiOjM2MCwiLi9zdWIiOjM2MSwiLi9zdWJ0cmFjdCI6MzYyLCIuL3RyYW5zZm9ybU1hdDMiOjM2MywiLi90cmFuc2Zvcm1NYXQ0IjozNjQsIi4vdHJhbnNmb3JtUXVhdCI6MzY1fV0sMzM5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHR9fSx7fV0sMzQwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbGVuZ3RoIil9LHsiLi9sZW5ndGgiOjM0MX1dLDM0MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbil9fSx7fV0sMzQyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdFsyXT1vK24qKHJbMl0tbyksdH19LHt9XSwzNDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0fX0se31dLDM0NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHR9fSx7fV0sMzQ1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbXVsdGlwbHkiKX0seyIuL211bHRpcGx5IjozNDZ9XSwzNDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0fX0se31dLDM0NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0fX0se31dLDM0ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO2E+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpO3JldHVybiB0fX0se31dLDM0OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8MTt2YXIgcj0yKk1hdGgucmFuZG9tKCkqTWF0aC5QSSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9TWF0aC5zcXJ0KDEtbipuKSplO3JldHVybiB0WzBdPU1hdGguY29zKHIpKmksdFsxXT1NYXRoLnNpbihyKSppLHRbMl09biplLHR9fSx7fV0sMzUwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMV0sYT1yWzJdLG89ZVsxXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1lWzBdLHRbMV09aStvKmMtcypsLHRbMl09YStvKmwrcypjLHR9fSx7fV0sMzUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzJdLG89ZVswXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK3MqbCtvKmMsdFsxXT1lWzFdLHRbMl09YStzKmMtbypsLHR9fSx7fV0sMzUyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89ZVswXS1pLHM9ZVsxXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK28qYy1zKmwsdFsxXT1hK28qbCtzKmMsdFsyXT1lWzJdLHR9fSx7fV0sMzUzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdFsyXT1NYXRoLnJvdW5kKGVbMl0pLHR9fSx7fV0sMzU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH19LHt9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHR9fSx7fV0sMzU2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0fX0se31dLDM1NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3NxdWFyZWREaXN0YW5jZSIpfSx7Ii4vc3F1YXJlZERpc3RhbmNlIjozNTl9XSwzNTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9zcXVhcmVkTGVuZ3RoIil9LHsiLi9zcXVhcmVkTGVuZ3RoIjozNjB9XSwzNTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIHIqcituKm4raSppfX0se31dLDM2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIGUqZStyKnIrbipufX0se31dLDM2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3N1YnRyYWN0Iil9LHsiLi9zdWJ0cmFjdCI6MzYyfV0sMzYyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH19LHt9XSwzNjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHt9XSwzNjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKS9vLHRbMV09KHJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKS9vLHRbMl09KHJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSkvbyx0fX0se31dLDM2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGY9YyppK2wqbi1vKmEsaD1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytmKi1sLWgqLXMsdFsxXT1mKmMrcCotcytoKi1vLXUqLWwsdFsyXT1oKmMrcCotbCt1Ki1zLWYqLW8sdH19LHt9XSwzNjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0fX0se31dLDM2NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZX19LHt9XSwzNjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9fSx7fV0sMzY5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0wLHR9fSx7fV0sMzcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkrYSphKX19LHt9XSwzNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0WzNdPWVbM10vclszXSx0fX0se31dLDM3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119fSx7fV0sMzczOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGlbMF09dCxpWzFdPWUsaVsyXT1yLGlbM109bixpfX0se31dLDM3NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGZyb21WYWx1ZXM6dCgiLi9mcm9tVmFsdWVzIiksY29weTp0KCIuL2NvcHkiKSxzZXQ6dCgiLi9zZXQiKSxhZGQ6dCgiLi9hZGQiKSxzdWJ0cmFjdDp0KCIuL3N1YnRyYWN0IiksbXVsdGlwbHk6dCgiLi9tdWx0aXBseSIpLGRpdmlkZTp0KCIuL2RpdmlkZSIpLG1pbjp0KCIuL21pbiIpLG1heDp0KCIuL21heCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLHNxdWFyZWREaXN0YW5jZTp0KCIuL3NxdWFyZWREaXN0YW5jZSIpLGxlbmd0aDp0KCIuL2xlbmd0aCIpLHNxdWFyZWRMZW5ndGg6dCgiLi9zcXVhcmVkTGVuZ3RoIiksbmVnYXRlOnQoIi4vbmVnYXRlIiksaW52ZXJzZTp0KCIuL2ludmVyc2UiKSxub3JtYWxpemU6dCgiLi9ub3JtYWxpemUiKSxkb3Q6dCgiLi9kb3QiKSxsZXJwOnQoIi4vbGVycCIpLHJhbmRvbTp0KCIuL3JhbmRvbSIpLHRyYW5zZm9ybU1hdDQ6dCgiLi90cmFuc2Zvcm1NYXQ0IiksdHJhbnNmb3JtUXVhdDp0KCIuL3RyYW5zZm9ybVF1YXQiKX19LHsiLi9hZGQiOjM2NiwiLi9jbG9uZSI6MzY3LCIuL2NvcHkiOjM2OCwiLi9jcmVhdGUiOjM2OSwiLi9kaXN0YW5jZSI6MzcwLCIuL2RpdmlkZSI6MzcxLCIuL2RvdCI6MzcyLCIuL2Zyb21WYWx1ZXMiOjM3MywiLi9pbnZlcnNlIjozNzUsIi4vbGVuZ3RoIjozNzYsIi4vbGVycCI6Mzc3LCIuL21heCI6Mzc4LCIuL21pbiI6Mzc5LCIuL211bHRpcGx5IjozODAsIi4vbmVnYXRlIjozODEsIi4vbm9ybWFsaXplIjozODIsIi4vcmFuZG9tIjozODMsIi4vc2NhbGUiOjM4NCwiLi9zY2FsZUFuZEFkZCI6Mzg1LCIuL3NldCI6Mzg2LCIuL3NxdWFyZWREaXN0YW5jZSI6Mzg3LCIuL3NxdWFyZWRMZW5ndGgiOjM4OCwiLi9zdWJ0cmFjdCI6Mzg5LCIuL3RyYW5zZm9ybU1hdDQiOjM5MCwiLi90cmFuc2Zvcm1RdWF0IjozOTF9XSwzNzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdFsyXT0xL2VbMl0sdFszXT0xL2VbM10sdH19LHt9XSwzNzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuK2kqaSl9fSx7fV0sMzc3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXSxzPWVbM107cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHRbM109cytuKihyWzNdLXMpLHR9fSx7fV0sMzc4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdFszXT1NYXRoLm1heChlWzNdLHJbM10pLHR9fSx7fV0sMzc5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdFszXT1NYXRoLm1pbihlWzNdLHJbM10pLHR9fSx7fV0sMzgwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdFszXT1lWzNdKnJbM10sdH19LHt9XSwzODE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT0tZVszXSx0fX0se31dLDM4MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKnIrbipuK2kqaSthKmE7bz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPW4qbyx0WzJdPWkqbyx0WzNdPWEqbyk7cmV0dXJuIHR9fSx7fV0sMzgzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoIi4vc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwxLHRbMF09TWF0aC5yYW5kb20oKSx0WzFdPU1hdGgucmFuZG9tKCksdFsyXT1NYXRoLnJhbmRvbSgpLHRbM109TWF0aC5yYW5kb20oKSxuKHQsdCksaSh0LHQsZSksdH19LHsiLi9ub3JtYWxpemUiOjM4MiwiLi9zY2FsZSI6Mzg0fV0sMzg0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH19LHt9XSwzODU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH19LHt9XSwzODY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHR9fSx7fV0sMzg3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiByKnIrbipuK2kqaSthKmF9fSx7fV0sMzg4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIGUqZStyKnIrbipuK2kqaX19LHt9XSwzODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0fX0se31dLDM5MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LHt9XSwzOTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPXJbM10sdT1jKm4rcyphLWwqaSxmPWMqaStsKm4tbyphLGg9YyphK28qaS1zKm4scD0tbypuLXMqaS1sKmE7cmV0dXJuIHRbMF09dSpjK3AqLW8rZiotbC1oKi1zLHRbMV09ZipjK3AqLXMraCotby11Ki1sLHRbMl09aCpjK3AqLWwrdSotcy1mKi1vLHRbM109ZVszXSx0fX0se31dLDM5MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtyZXR1cm4gblswXT1hLG5bMV09cixuWzJdPWUsblszXT10LGlbMF19O3ZhciBuPW5ldyBVaW50OEFycmF5KDQpLGk9bmV3IEZsb2F0MzJBcnJheShuLmJ1ZmZlcil9LHt9XSwzOTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsLXRva2VuaXplciIpLGk9dCgiYXRvYi1saXRlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BcnJheS5pc0FycmF5KHQpP3Q6bih0KSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPWVbcl07aWYoInByZXByb2Nlc3NvciI9PT1hLnR5cGUpe3ZhciBvPWEuZGF0YS5tYXRjaCgvXCNkZWZpbmVccytTSEFERVJfTkFNRShfQjY0KT9ccysoLispJC8pO2lmKG8mJm9bMl0pe3ZhciBzPW9bMV0sbD1vWzJdO3JldHVybihzP2kobCk6bCkudHJpbSgpfX19fX0seyJhdG9iLWxpdGUiOjYyLCJnbHNsLXRva2VuaXplciI6NDAwfV0sMzk0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsayxUPTAsQT0wLE09bCxTPVtdLEU9W10sQz0xLEw9MCx6PTAsTz0hMSxJPSExLEQ9IiIsUD1hLFI9bjsiMzAwIGVzIj09PSh0PXR8fHt9KS52ZXJzaW9uJiYoUD1zLFI9byk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBFPVtdLG51bGwhPT10P2Z1bmN0aW9uKHQpe3ZhciByO1Q9MCxrPShEKz10KS5sZW5ndGg7Zm9yKDtlPURbVF0sVDxrOyl7c3dpdGNoKHI9VCxNKXtjYXNlIHU6VD1WKCk7YnJlYWs7Y2FzZSBmOmNhc2UgaDpUPWooKTticmVhaztjYXNlIHA6VD1VKCk7YnJlYWs7Y2FzZSBkOlQ9RygpO2JyZWFrO2Nhc2UgXzpUPUgoKTticmVhaztjYXNlIGc6VD1ZKCk7YnJlYWs7Y2FzZSBjOlQ9VygpO2JyZWFrO2Nhc2UgeDpUPU4oKTticmVhaztjYXNlIGw6VD1CKCl9aWYociE9PVQpc3dpdGNoKERbcl0pe2Nhc2UiXG4iOkw9MCwrK0M7YnJlYWs7ZGVmYXVsdDorK0x9fXJldHVybiBBKz1ULEQ9RC5zbGljZShUKSxFfSh0LnJlcGxhY2U/dC5yZXBsYWNlKC9cclxuL2csIlxuIik6dCk6ZnVuY3Rpb24odCl7Uy5sZW5ndGgmJkYoUy5qb2luKCIiKSk7cmV0dXJuIE09YixGKCIoZW9mKSIpLEV9KCl9O2Z1bmN0aW9uIEYodCl7dC5sZW5ndGgmJkUucHVzaCh7dHlwZTp3W01dLGRhdGE6dCxwb3NpdGlvbjp6LGxpbmU6Qyxjb2x1bW46TH0pfWZ1bmN0aW9uIEIoKXtyZXR1cm4gUz1TLmxlbmd0aD9bXTpTLCIvIj09PXImJiIqIj09PWU/KHo9QStULTEsTT11LHI9ZSxUKzEpOiIvIj09PXImJiIvIj09PWU/KHo9QStULTEsTT1mLHI9ZSxUKzEpOiIjIj09PWU/KE09aCx6PUErVCxUKTovXHMvLnRlc3QoZSk/KE09eCx6PUErVCxUKTooTz0vXGQvLnRlc3QoZSksST0vW15cd19dLy50ZXN0KGUpLHo9QStULE09Tz9kOkk/cDpjLFQpfWZ1bmN0aW9uIE4oKXtyZXR1cm4vW15cc10vZy50ZXN0KGUpPyhGKFMuam9pbigiIikpLE09bCxUKTooUy5wdXNoKGUpLHI9ZSxUKzEpfWZ1bmN0aW9uIGooKXtyZXR1cm4iXHIiIT09ZSYmIlxuIiE9PWV8fCJcXCI9PT1yPyhTLnB1c2goZSkscj1lLFQrMSk6KEYoUy5qb2luKCIiKSksTT1sLFQpfWZ1bmN0aW9uIFYoKXtyZXR1cm4iLyI9PT1lJiYiKiI9PT1yPyhTLnB1c2goZSksRihTLmpvaW4oIiIpKSxNPWwsVCsxKTooUy5wdXNoKGUpLHI9ZSxUKzEpfWZ1bmN0aW9uIFUoKXtpZigiLiI9PT1yJiYvXGQvLnRlc3QoZSkpcmV0dXJuIE09ZyxUO2lmKCIvIj09PXImJiIqIj09PWUpcmV0dXJuIE09dSxUO2lmKCIvIj09PXImJiIvIj09PWUpcmV0dXJuIE09ZixUO2lmKCIuIj09PWUmJlMubGVuZ3RoKXtmb3IoO3EoUyk7KTtyZXR1cm4gTT1nLFR9aWYoIjsiPT09ZXx8IikiPT09ZXx8IigiPT09ZSl7aWYoUy5sZW5ndGgpZm9yKDtxKFMpOyk7cmV0dXJuIEYoZSksTT1sLFQrMX12YXIgdD0yPT09Uy5sZW5ndGgmJiI9IiE9PWU7aWYoL1tcd19cZFxzXS8udGVzdChlKXx8dCl7Zm9yKDtxKFMpOyk7cmV0dXJuIE09bCxUfXJldHVybiBTLnB1c2goZSkscj1lLFQrMX1mdW5jdGlvbiBxKHQpe2Zvcih2YXIgZSxyLG49MDs7KXtpZihlPWkuaW5kZXhPZih0LnNsaWNlKDAsdC5sZW5ndGgrbikuam9pbigiIikpLHI9aVtlXSwtMT09PWUpe2lmKG4tLSt0Lmxlbmd0aD4wKWNvbnRpbnVlO3I9dC5zbGljZSgwLDEpLmpvaW4oIiIpfXJldHVybiBGKHIpLHorPXIubGVuZ3RoLChTPVMuc2xpY2Uoci5sZW5ndGgpKS5sZW5ndGh9fWZ1bmN0aW9uIEgoKXtyZXR1cm4vW15hLWZBLUYwLTldLy50ZXN0KGUpPyhGKFMuam9pbigiIikpLE09bCxUKTooUy5wdXNoKGUpLHI9ZSxUKzEpfWZ1bmN0aW9uIEcoKXtyZXR1cm4iLiI9PT1lPyhTLnB1c2goZSksTT1nLHI9ZSxUKzEpOi9bZUVdLy50ZXN0KGUpPyhTLnB1c2goZSksTT1nLHI9ZSxUKzEpOiJ4Ij09PWUmJjE9PT1TLmxlbmd0aCYmIjAiPT09U1swXT8oTT1fLFMucHVzaChlKSxyPWUsVCsxKTovW15cZF0vLnRlc3QoZSk/KEYoUy5qb2luKCIiKSksTT1sLFQpOihTLnB1c2goZSkscj1lLFQrMSl9ZnVuY3Rpb24gWSgpe3JldHVybiJmIj09PWUmJihTLnB1c2goZSkscj1lLFQrPTEpLC9bZUVdLy50ZXN0KGUpPyhTLnB1c2goZSkscj1lLFQrMSk6Ii0iPT09ZSYmL1tlRV0vLnRlc3Qocik/KFMucHVzaChlKSxyPWUsVCsxKTovW15cZF0vLnRlc3QoZSk/KEYoUy5qb2luKCIiKSksTT1sLFQpOihTLnB1c2goZSkscj1lLFQrMSl9ZnVuY3Rpb24gVygpe2lmKC9bXlxkXHdfXS8udGVzdChlKSl7dmFyIHQ9Uy5qb2luKCIiKTtyZXR1cm4gTT1SLmluZGV4T2YodCk+LTE/eTpQLmluZGV4T2YodCk+LTE/bTp2LEYoUy5qb2luKCIiKSksTT1sLFR9cmV0dXJuIFMucHVzaChlKSxyPWUsVCsxfX07dmFyIG49dCgiLi9saWIvbGl0ZXJhbHMiKSxpPXQoIi4vbGliL29wZXJhdG9ycyIpLGE9dCgiLi9saWIvYnVpbHRpbnMiKSxvPXQoIi4vbGliL2xpdGVyYWxzLTMwMGVzIikscz10KCIuL2xpYi9idWlsdGlucy0zMDBlcyIpLGw9OTk5LGM9OTk5OSx1PTAsZj0xLGg9MixwPTMsZD00LGc9NSx2PTYsbT03LHk9OCx4PTksYj0xMCxfPTExLHc9WyJibG9jay1jb21tZW50IiwibGluZS1jb21tZW50IiwicHJlcHJvY2Vzc29yIiwib3BlcmF0b3IiLCJpbnRlZ2VyIiwiZmxvYXQiLCJpZGVudCIsImJ1aWx0aW4iLCJrZXl3b3JkIiwid2hpdGVzcGFjZSIsImVvZiIsImludGVnZXIiXX0seyIuL2xpYi9idWlsdGlucyI6Mzk2LCIuL2xpYi9idWlsdGlucy0zMDBlcyI6Mzk1LCIuL2xpYi9saXRlcmFscyI6Mzk4LCIuL2xpYi9saXRlcmFscy0zMDBlcyI6Mzk3LCIuL2xpYi9vcGVyYXRvcnMiOjM5OX1dLDM5NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vYnVpbHRpbnMiKTtuPW4uc2xpY2UoKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIS9eKGdsXF98dGV4dHVyZSkvLnRlc3QodCl9KSxlLmV4cG9ydHM9bi5jb25jYXQoWyJnbF9WZXJ0ZXhJRCIsImdsX0luc3RhbmNlSUQiLCJnbF9Qb3NpdGlvbiIsImdsX1BvaW50U2l6ZSIsImdsX0ZyYWdDb29yZCIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfUG9pbnRDb29yZCIsImdsX01heFZlcnRleEF0dHJpYnMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyIsImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCJnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWluUHJvZ3JhbVRleGVsT2Zmc2V0IiwiZ2xfTWF4UHJvZ3JhbVRleGVsT2Zmc2V0IiwiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMiLCJnbF9EZXB0aFJhbmdlIiwidHJ1bmMiLCJyb3VuZCIsInJvdW5kRXZlbiIsImlzbmFuIiwiaXNpbmYiLCJmbG9hdEJpdHNUb0ludCIsImZsb2F0Qml0c1RvVWludCIsImludEJpdHNUb0Zsb2F0IiwidWludEJpdHNUb0Zsb2F0IiwicGFja1Nub3JtMngxNiIsInVucGFja1Nub3JtMngxNiIsInBhY2tVbm9ybTJ4MTYiLCJ1bnBhY2tVbm9ybTJ4MTYiLCJwYWNrSGFsZjJ4MTYiLCJ1bnBhY2tIYWxmMngxNiIsIm91dGVyUHJvZHVjdCIsInRyYW5zcG9zZSIsImRldGVybWluYW50IiwiaW52ZXJzZSIsInRleHR1cmUiLCJ0ZXh0dXJlU2l6ZSIsInRleHR1cmVQcm9qIiwidGV4dHVyZUxvZCIsInRleHR1cmVPZmZzZXQiLCJ0ZXhlbEZldGNoIiwidGV4ZWxGZXRjaE9mZnNldCIsInRleHR1cmVQcm9qT2Zmc2V0IiwidGV4dHVyZUxvZE9mZnNldCIsInRleHR1cmVQcm9qTG9kIiwidGV4dHVyZVByb2pMb2RPZmZzZXQiLCJ0ZXh0dXJlR3JhZCIsInRleHR1cmVHcmFkT2Zmc2V0IiwidGV4dHVyZVByb2pHcmFkIiwidGV4dHVyZVByb2pHcmFkT2Zmc2V0Il0pfSx7Ii4vYnVpbHRpbnMiOjM5Nn1dLDM5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImFicyIsImFjb3MiLCJhbGwiLCJhbnkiLCJhc2luIiwiYXRhbiIsImNlaWwiLCJjbGFtcCIsImNvcyIsImNyb3NzIiwiZEZkeCIsImRGZHkiLCJkZWdyZWVzIiwiZGlzdGFuY2UiLCJkb3QiLCJlcXVhbCIsImV4cCIsImV4cDIiLCJmYWNlZm9yd2FyZCIsImZsb29yIiwiZnJhY3QiLCJnbF9CYWNrQ29sb3IiLCJnbF9CYWNrTGlnaHRNb2RlbFByb2R1Y3QiLCJnbF9CYWNrTGlnaHRQcm9kdWN0IiwiZ2xfQmFja01hdGVyaWFsIiwiZ2xfQmFja1NlY29uZGFyeUNvbG9yIiwiZ2xfQ2xpcFBsYW5lIiwiZ2xfQ2xpcFZlcnRleCIsImdsX0NvbG9yIiwiZ2xfRGVwdGhSYW5nZSIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRXllUGxhbmVRIiwiZ2xfRXllUGxhbmVSIiwiZ2xfRXllUGxhbmVTIiwiZ2xfRXllUGxhbmVUIiwiZ2xfRm9nIiwiZ2xfRm9nQ29vcmQiLCJnbF9Gb2dGcmFnQ29vcmQiLCJnbF9Gb2dQYXJhbWV0ZXJzIiwiZ2xfRnJhZ0NvbG9yIiwiZ2xfRnJhZ0Nvb3JkIiwiZ2xfRnJhZ0RhdGEiLCJnbF9GcmFnRGVwdGgiLCJnbF9GcmFnRGVwdGhFWFQiLCJnbF9Gcm9udENvbG9yIiwiZ2xfRnJvbnRGYWNpbmciLCJnbF9Gcm9udExpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfRnJvbnRMaWdodFByb2R1Y3QiLCJnbF9Gcm9udE1hdGVyaWFsIiwiZ2xfRnJvbnRTZWNvbmRhcnlDb2xvciIsImdsX0xpZ2h0TW9kZWwiLCJnbF9MaWdodE1vZGVsUGFyYW1ldGVycyIsImdsX0xpZ2h0TW9kZWxQcm9kdWN0cyIsImdsX0xpZ2h0UHJvZHVjdHMiLCJnbF9MaWdodFNvdXJjZSIsImdsX0xpZ2h0U291cmNlUGFyYW1ldGVycyIsImdsX01hdGVyaWFsUGFyYW1ldGVycyIsImdsX01heENsaXBQbGFuZXMiLCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4RHJhd0J1ZmZlcnMiLCJnbF9NYXhGcmFnbWVudFVuaWZvcm1Db21wb25lbnRzIiwiZ2xfTWF4TGlnaHRzIiwiZ2xfTWF4VGV4dHVyZUNvb3JkcyIsImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4VGV4dHVyZVVuaXRzIiwiZ2xfTWF4VmFyeWluZ0Zsb2F0cyIsImdsX01heFZlcnRleEF0dHJpYnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFZlcnRleFVuaWZvcm1Db21wb25lbnRzIiwiZ2xfTW9kZWxWaWV3TWF0cml4IiwiZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZSIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4IiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9NdWx0aVRleENvb3JkMCIsImdsX011bHRpVGV4Q29vcmQxIiwiZ2xfTXVsdGlUZXhDb29yZDIiLCJnbF9NdWx0aVRleENvb3JkMyIsImdsX011bHRpVGV4Q29vcmQ0IiwiZ2xfTXVsdGlUZXhDb29yZDUiLCJnbF9NdWx0aVRleENvb3JkNiIsImdsX011bHRpVGV4Q29vcmQ3IiwiZ2xfTm9ybWFsIiwiZ2xfTm9ybWFsTWF0cml4IiwiZ2xfTm9ybWFsU2NhbGUiLCJnbF9PYmplY3RQbGFuZVEiLCJnbF9PYmplY3RQbGFuZVIiLCJnbF9PYmplY3RQbGFuZVMiLCJnbF9PYmplY3RQbGFuZVQiLCJnbF9Qb2ludCIsImdsX1BvaW50Q29vcmQiLCJnbF9Qb2ludFBhcmFtZXRlcnMiLCJnbF9Qb2ludFNpemUiLCJnbF9Qb3NpdGlvbiIsImdsX1Byb2plY3Rpb25NYXRyaXgiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZSIsImdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfUHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSIsImdsX1NlY29uZGFyeUNvbG9yIiwiZ2xfVGV4Q29vcmQiLCJnbF9UZXh0dXJlRW52Q29sb3IiLCJnbF9UZXh0dXJlTWF0cml4IiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2UiLCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1RleHR1cmVNYXRyaXhUcmFuc3Bvc2UiLCJnbF9WZXJ0ZXgiLCJncmVhdGVyVGhhbiIsImdyZWF0ZXJUaGFuRXF1YWwiLCJpbnZlcnNlc3FydCIsImxlbmd0aCIsImxlc3NUaGFuIiwibGVzc1RoYW5FcXVhbCIsImxvZyIsImxvZzIiLCJtYXRyaXhDb21wTXVsdCIsIm1heCIsIm1pbiIsIm1peCIsIm1vZCIsIm5vcm1hbGl6ZSIsIm5vdCIsIm5vdEVxdWFsIiwicG93IiwicmFkaWFucyIsInJlZmxlY3QiLCJyZWZyYWN0Iiwic2lnbiIsInNpbiIsInNtb290aHN0ZXAiLCJzcXJ0Iiwic3RlcCIsInRhbiIsInRleHR1cmUyRCIsInRleHR1cmUyRExvZCIsInRleHR1cmUyRFByb2oiLCJ0ZXh0dXJlMkRQcm9qTG9kIiwidGV4dHVyZUN1YmUiLCJ0ZXh0dXJlQ3ViZUxvZCIsInRleHR1cmUyRExvZEVYVCIsInRleHR1cmUyRFByb2pMb2RFWFQiLCJ0ZXh0dXJlQ3ViZUxvZEVYVCIsInRleHR1cmUyREdyYWRFWFQiLCJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsInRleHR1cmVDdWJlR3JhZEVYVCJdfSx7fV0sMzk3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9saXRlcmFscyIpO2UuZXhwb3J0cz1uLnNsaWNlKCkuY29uY2F0KFsibGF5b3V0IiwiY2VudHJvaWQiLCJzbW9vdGgiLCJjYXNlIiwibWF0MngyIiwibWF0MngzIiwibWF0Mng0IiwibWF0M3gyIiwibWF0M3gzIiwibWF0M3g0IiwibWF0NHgyIiwibWF0NHgzIiwibWF0NHg0IiwidWludCIsInV2ZWMyIiwidXZlYzMiLCJ1dmVjNCIsInNhbXBsZXJDdWJlU2hhZG93Iiwic2FtcGxlcjJEQXJyYXkiLCJzYW1wbGVyMkRBcnJheVNoYWRvdyIsImlzYW1wbGVyMkQiLCJpc2FtcGxlcjNEIiwiaXNhbXBsZXJDdWJlIiwiaXNhbXBsZXIyREFycmF5IiwidXNhbXBsZXIyRCIsInVzYW1wbGVyM0QiLCJ1c2FtcGxlckN1YmUiLCJ1c2FtcGxlcjJEQXJyYXkiLCJjb2hlcmVudCIsInJlc3RyaWN0IiwicmVhZG9ubHkiLCJ3cml0ZW9ubHkiLCJyZXNvdXJjZSIsImF0b21pY191aW50Iiwibm9wZXJzcGVjdGl2ZSIsInBhdGNoIiwic2FtcGxlIiwic3Vicm91dGluZSIsImNvbW1vbiIsInBhcnRpdGlvbiIsImFjdGl2ZSIsImZpbHRlciIsImltYWdlMUQiLCJpbWFnZTJEIiwiaW1hZ2UzRCIsImltYWdlQ3ViZSIsImlpbWFnZTFEIiwiaWltYWdlMkQiLCJpaW1hZ2UzRCIsImlpbWFnZUN1YmUiLCJ1aW1hZ2UxRCIsInVpbWFnZTJEIiwidWltYWdlM0QiLCJ1aW1hZ2VDdWJlIiwiaW1hZ2UxREFycmF5IiwiaW1hZ2UyREFycmF5IiwiaWltYWdlMURBcnJheSIsImlpbWFnZTJEQXJyYXkiLCJ1aW1hZ2UxREFycmF5IiwidWltYWdlMkRBcnJheSIsImltYWdlMURTaGFkb3ciLCJpbWFnZTJEU2hhZG93IiwiaW1hZ2UxREFycmF5U2hhZG93IiwiaW1hZ2UyREFycmF5U2hhZG93IiwiaW1hZ2VCdWZmZXIiLCJpaW1hZ2VCdWZmZXIiLCJ1aW1hZ2VCdWZmZXIiLCJzYW1wbGVyMURBcnJheSIsInNhbXBsZXIxREFycmF5U2hhZG93IiwiaXNhbXBsZXIxRCIsImlzYW1wbGVyMURBcnJheSIsInVzYW1wbGVyMUQiLCJ1c2FtcGxlcjFEQXJyYXkiLCJpc2FtcGxlcjJEUmVjdCIsInVzYW1wbGVyMkRSZWN0Iiwic2FtcGxlckJ1ZmZlciIsImlzYW1wbGVyQnVmZmVyIiwidXNhbXBsZXJCdWZmZXIiLCJzYW1wbGVyMkRNUyIsImlzYW1wbGVyMkRNUyIsInVzYW1wbGVyMkRNUyIsInNhbXBsZXIyRE1TQXJyYXkiLCJpc2FtcGxlcjJETVNBcnJheSIsInVzYW1wbGVyMkRNU0FycmF5Il0pfSx7Ii4vbGl0ZXJhbHMiOjM5OH1dLDM5ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInByZWNpc2lvbiIsImhpZ2hwIiwibWVkaXVtcCIsImxvd3AiLCJhdHRyaWJ1dGUiLCJjb25zdCIsInVuaWZvcm0iLCJ2YXJ5aW5nIiwiYnJlYWsiLCJjb250aW51ZSIsImRvIiwiZm9yIiwid2hpbGUiLCJpZiIsImVsc2UiLCJpbiIsIm91dCIsImlub3V0IiwiZmxvYXQiLCJpbnQiLCJ2b2lkIiwiYm9vbCIsInRydWUiLCJmYWxzZSIsImRpc2NhcmQiLCJyZXR1cm4iLCJtYXQyIiwibWF0MyIsIm1hdDQiLCJ2ZWMyIiwidmVjMyIsInZlYzQiLCJpdmVjMiIsIml2ZWMzIiwiaXZlYzQiLCJidmVjMiIsImJ2ZWMzIiwiYnZlYzQiLCJzYW1wbGVyMUQiLCJzYW1wbGVyMkQiLCJzYW1wbGVyM0QiLCJzYW1wbGVyQ3ViZSIsInNhbXBsZXIxRFNoYWRvdyIsInNhbXBsZXIyRFNoYWRvdyIsInN0cnVjdCIsImFzbSIsImNsYXNzIiwidW5pb24iLCJlbnVtIiwidHlwZWRlZiIsInRlbXBsYXRlIiwidGhpcyIsInBhY2tlZCIsImdvdG8iLCJzd2l0Y2giLCJkZWZhdWx0IiwiaW5saW5lIiwibm9pbmxpbmUiLCJ2b2xhdGlsZSIsInB1YmxpYyIsInN0YXRpYyIsImV4dGVybiIsImV4dGVybmFsIiwiaW50ZXJmYWNlIiwibG9uZyIsInNob3J0IiwiZG91YmxlIiwiaGFsZiIsImZpeGVkIiwidW5zaWduZWQiLCJpbnB1dCIsIm91dHB1dCIsImh2ZWMyIiwiaHZlYzMiLCJodmVjNCIsImR2ZWMyIiwiZHZlYzMiLCJkdmVjNCIsImZ2ZWMyIiwiZnZlYzMiLCJmdmVjNCIsInNhbXBsZXIyRFJlY3QiLCJzYW1wbGVyM0RSZWN0Iiwic2FtcGxlcjJEUmVjdFNoYWRvdyIsInNpemVvZiIsImNhc3QiLCJuYW1lc3BhY2UiLCJ1c2luZyJdfSx7fV0sMzk5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsiPDw9IiwiPj49IiwiKysiLCItLSIsIjw8IiwiPj4iLCI8PSIsIj49IiwiPT0iLCIhPSIsIiYmIiwifHwiLCIrPSIsIi09IiwiKj0iLCIvPSIsIiU9IiwiJj0iLCJeXiIsIl49IiwifD0iLCIoIiwiKSIsIlsiLCJdIiwiLiIsIiEiLCJ+IiwiKiIsIi8iLCIlIiwiKyIsIi0iLCI8IiwiPiIsIiYiLCJeIiwifCIsIj8iLCI6IiwiPSIsIiwiLCI7IiwieyIsIn0iXX0se31dLDQwMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaW5kZXgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpLGk9W107cmV0dXJuIGk9KGk9aS5jb25jYXQocih0KSkpLmNvbmNhdChyKG51bGwpKX19LHsiLi9pbmRleCI6Mzk0fV0sNDAxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W3RdKTtmb3IodmFyIGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscj1bXSxuPTA7bjx0Lmxlbmd0aC0xO24rKylyLnB1c2godFtuXSxlW25dfHwiIik7cmV0dXJuIHIucHVzaCh0W25dKSxyLmpvaW4oIiIpfX0se31dLDQwMjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJpcy1icm93c2VyIik7bj0iZnVuY3Rpb24iPT10eXBlb2Ygci5tYXRjaE1lZGlhPyFyLm1hdGNoTWVkaWEoIihob3Zlcjogbm9uZSkiKS5tYXRjaGVzOmksZS5leHBvcnRzPW59KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiaXMtYnJvd3NlciI6NDA5fV0sNDAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImlzLWJyb3dzZXIiKTtlLmV4cG9ydHM9biYmZnVuY3Rpb24oKXt2YXIgdD0hMTt0cnl7dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7dD0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKX1jYXRjaChlKXt0PSExfXJldHVybiB0fSgpfSx7ImlzLWJyb3dzZXIiOjQwOX1dLDQwNDpbZnVuY3Rpb24odCxlLHIpe3IucmVhZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2ktMTowLGg9cj8tMToxLHA9dFtlK2ZdO2ZvcihmKz1oLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2ZdLGYrPWgsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2ZdLGYrPWgsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0sci53cml0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGY9dT4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLGc9ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8rZj49MT9oL2w6aCpNYXRoLnBvdygyLDEtZikpKmw+PTImJihvKyssbC89MiksbytmPj11PyhzPTAsbz11KTpvK2Y+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWYpOihzPWUqTWF0aC5wb3coMixmLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Kmd9fSx7fV0sNDA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiTXVzdCBoYXZlIGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgaT10WzBdLmxlbmd0aDtpZihyPD1pKXRocm93IG5ldyBFcnJvcigiTXVzdCBpbnB1dCBhdCBsZWFzdCBkKzEgcG9pbnRzIik7dmFyIG89dC5zbGljZSgwLGkrMSkscz1uLmFwcGx5KHZvaWQgMCxvKTtpZigwPT09cyl0aHJvdyBuZXcgRXJyb3IoIklucHV0IG5vdCBpbiBnZW5lcmFsIHBvc2l0aW9uIik7Zm9yKHZhciBsPW5ldyBBcnJheShpKzEpLHU9MDt1PD1pOysrdSlsW3VdPXU7czwwJiYobFswXT0xLGxbMV09MCk7Zm9yKHZhciBmPW5ldyBhKGwsbmV3IEFycmF5KGkrMSksITEpLGg9Zi5hZGphY2VudCxwPW5ldyBBcnJheShpKzIpLHU9MDt1PD1pOysrdSl7Zm9yKHZhciBkPWwuc2xpY2UoKSxnPTA7Zzw9aTsrK2cpZz09PXUmJihkW2ddPS0xKTt2YXIgdj1kWzBdO2RbMF09ZFsxXSxkWzFdPXY7dmFyIG09bmV3IGEoZCxuZXcgQXJyYXkoaSsxKSwhMCk7aFt1XT1tLHBbdV09bX1wW2krMV09Zjtmb3IodmFyIHU9MDt1PD1pOysrdSlmb3IodmFyIGQ9aFt1XS52ZXJ0aWNlcyx5PWhbdV0uYWRqYWNlbnQsZz0wO2c8PWk7KytnKXt2YXIgeD1kW2ddO2lmKHg8MCl5W2ddPWY7ZWxzZSBmb3IodmFyIGI9MDtiPD1pOysrYiloW2JdLnZlcnRpY2VzLmluZGV4T2YoeCk8MCYmKHlbZ109aFtiXSl9Zm9yKHZhciBfPW5ldyBjKGksbyxwKSx3PSEhZSx1PWkrMTt1PHI7Kyt1KV8uaW5zZXJ0KHRbdV0sdyk7cmV0dXJuIF8uYm91bmRhcnkoKX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgiKS5jb21wYXJlQ2VsbHM7ZnVuY3Rpb24gYSh0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuYWRqYWNlbnQ9ZSx0aGlzLmJvdW5kYXJ5PXIsdGhpcy5sYXN0VmlzaXRlZD0tMX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5jZWxsPWUsdGhpcy5pbmRleD1yfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gaSh0LnZlcnRpY2VzLGUudmVydGljZXMpfWEucHJvdG90eXBlLmZsaXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZlcnRpY2VzWzBdO3RoaXMudmVydGljZXNbMF09dGhpcy52ZXJ0aWNlc1sxXSx0aGlzLnZlcnRpY2VzWzFdPXQ7dmFyIGU9dGhpcy5hZGphY2VudFswXTt0aGlzLmFkamFjZW50WzBdPXRoaXMuYWRqYWNlbnRbMV0sdGhpcy5hZGphY2VudFsxXT1lfTt2YXIgbD1bXTtmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10LHRoaXMudmVydGljZXM9ZSx0aGlzLnNpbXBsaWNlcz1yLHRoaXMuaW50ZXJpb3I9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuYm91bmRhcnl9KSx0aGlzLnR1cGxlPW5ldyBBcnJheSh0KzEpO2Zvcih2YXIgaT0wO2k8PXQ7KytpKXRoaXMudHVwbGVbaV09dGhpcy52ZXJ0aWNlc1tpXTt2YXIgYT1sW3RdO2F8fChhPWxbdF09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVsiZnVuY3Rpb24gb3JpZW50KCl7dmFyIHR1cGxlPXRoaXMudHVwbGU7cmV0dXJuIHRlc3QoIl0scj0wO3I8PXQ7KytyKXI+MCYmZS5wdXNoKCIsIiksZS5wdXNoKCJ0dXBsZVsiLHIsIl0iKTtlLnB1c2goIil9cmV0dXJuIG9yaWVudCIpO3ZhciBpPW5ldyBGdW5jdGlvbigidGVzdCIsZS5qb2luKCIiKSksYT1uW3QrMV07cmV0dXJuIGF8fChhPW4pLGkoYSl9KHQpKSx0aGlzLm9yaWVudD1hfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kaW1lbnNpb24sbj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLGk9dGhpcy50dXBsZSxhPXRoaXMudmVydGljZXMsbz1bdF07Zm9yKHQubGFzdFZpc2l0ZWQ9LW47by5sZW5ndGg+MDspeyh0PW8ucG9wKCkpLnZlcnRpY2VzO2Zvcih2YXIgcz10LmFkamFjZW50LGw9MDtsPD1yOysrbCl7dmFyIGM9c1tsXTtpZihjLmJvdW5kYXJ5JiYhKGMubGFzdFZpc2l0ZWQ8PS1uKSl7Zm9yKHZhciB1PWMudmVydGljZXMsZj0wO2Y8PXI7KytmKXt2YXIgaD11W2ZdO2lbZl09aDwwP2U6YVtoXX12YXIgcD10aGlzLm9yaWVudCgpO2lmKHA+MClyZXR1cm4gYztjLmxhc3RWaXNpdGVkPS1uLDA9PT1wJiZvLnB1c2goYyl9fX1yZXR1cm4gbnVsbH0sdS53YWxrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxuPXRoaXMuZGltZW5zaW9uLGk9dGhpcy52ZXJ0aWNlcyxhPXRoaXMudHVwbGUsbz1lP3RoaXMuaW50ZXJpb3IubGVuZ3RoKk1hdGgucmFuZG9tKCl8MDp0aGlzLmludGVyaW9yLmxlbmd0aC0xLHM9dGhpcy5pbnRlcmlvcltvXTt0OmZvcig7IXMuYm91bmRhcnk7KXtmb3IodmFyIGw9cy52ZXJ0aWNlcyxjPXMuYWRqYWNlbnQsdT0wO3U8PW47Kyt1KWFbdV09aVtsW3VdXTtzLmxhc3RWaXNpdGVkPXI7Zm9yKHU9MDt1PD1uOysrdSl7dmFyIGY9Y1t1XTtpZighKGYubGFzdFZpc2l0ZWQ+PXIpKXt2YXIgaD1hW3VdO2FbdV09dDt2YXIgcD10aGlzLm9yaWVudCgpO2lmKGFbdV09aCxwPDApe3M9Zjtjb250aW51ZSB0fWYuYm91bmRhcnk/Zi5sYXN0VmlzaXRlZD0tcjpmLmxhc3RWaXNpdGVkPXJ9fXJldHVybn1yZXR1cm4gc30sdS5hZGRQZWFrcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXMubGVuZ3RoLTEsbj10aGlzLmRpbWVuc2lvbixpPXRoaXMudmVydGljZXMsbD10aGlzLnR1cGxlLGM9dGhpcy5pbnRlcmlvcix1PXRoaXMuc2ltcGxpY2VzLGY9W2VdO2UubGFzdFZpc2l0ZWQ9cixlLnZlcnRpY2VzW2UudmVydGljZXMuaW5kZXhPZigtMSldPXIsZS5ib3VuZGFyeT0hMSxjLnB1c2goZSk7Zm9yKHZhciBoPVtdO2YubGVuZ3RoPjA7KXt2YXIgcD0oZT1mLnBvcCgpKS52ZXJ0aWNlcyxkPWUuYWRqYWNlbnQsZz1wLmluZGV4T2Yocik7aWYoIShnPDApKWZvcih2YXIgdj0wO3Y8PW47Kyt2KWlmKHYhPT1nKXt2YXIgbT1kW3ZdO2lmKG0uYm91bmRhcnkmJiEobS5sYXN0VmlzaXRlZD49cikpe3ZhciB5PW0udmVydGljZXM7aWYobS5sYXN0VmlzaXRlZCE9PS1yKXtmb3IodmFyIHg9MCxiPTA7Yjw9bjsrK2IpeVtiXTwwPyh4PWIsbFtiXT10KTpsW2JdPWlbeVtiXV07aWYodGhpcy5vcmllbnQoKT4wKXt5W3hdPXIsbS5ib3VuZGFyeT0hMSxjLnB1c2gobSksZi5wdXNoKG0pLG0ubGFzdFZpc2l0ZWQ9cjtjb250aW51ZX1tLmxhc3RWaXNpdGVkPS1yfXZhciBfPW0uYWRqYWNlbnQsdz1wLnNsaWNlKCksaz1kLnNsaWNlKCksVD1uZXcgYSh3LGssITApO3UucHVzaChUKTt2YXIgQT1fLmluZGV4T2YoZSk7aWYoIShBPDApKXtfW0FdPVQsa1tnXT1tLHdbdl09LTEsa1t2XT1lLGRbdl09VCxULmZsaXAoKTtmb3IoYj0wO2I8PW47KytiKXt2YXIgTT13W2JdO2lmKCEoTTwwfHxNPT09cikpe2Zvcih2YXIgUz1uZXcgQXJyYXkobi0xKSxFPTAsQz0wO0M8PW47KytDKXt2YXIgTD13W0NdO0w8MHx8Qz09PWJ8fChTW0UrK109TCl9aC5wdXNoKG5ldyBvKFMsVCxiKSl9fX19fX1oLnNvcnQocyk7Zm9yKHY9MDt2KzE8aC5sZW5ndGg7dis9Mil7dmFyIHo9aFt2XSxPPWhbdisxXSxJPXouaW5kZXgsRD1PLmluZGV4O0k8MHx8RDwwfHwoei5jZWxsLmFkamFjZW50W3ouaW5kZXhdPU8uY2VsbCxPLmNlbGwuYWRqYWNlbnRbTy5pbmRleF09ei5jZWxsKX19LHUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcztyLnB1c2godCk7dmFyIG49dGhpcy53YWxrKHQsZSk7aWYobil7Zm9yKHZhciBpPXRoaXMuZGltZW5zaW9uLGE9dGhpcy50dXBsZSxvPTA7bzw9aTsrK28pe3ZhciBzPW4udmVydGljZXNbb107YVtvXT1zPDA/dDpyW3NdfXZhciBsPXRoaXMub3JpZW50KGEpO2w8MHx8KDAhPT1sfHwobj10aGlzLmhhbmRsZUJvdW5kYXJ5RGVnZW5lcmFjeShuLHQpKSkmJnRoaXMuYWRkUGVha3ModCxuKX19LHUuYm91bmRhcnk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5kaW1lbnNpb24sZT1bXSxyPXRoaXMuc2ltcGxpY2VzLG49ci5sZW5ndGgsaT0wO2k8bjsrK2kpe3ZhciBhPXJbaV07aWYoYS5ib3VuZGFyeSl7Zm9yKHZhciBvPW5ldyBBcnJheSh0KSxzPWEudmVydGljZXMsbD0wLGM9MCx1PTA7dTw9dDsrK3Upc1t1XT49MD9vW2wrK109c1t1XTpjPTEmdTtpZihjPT09KDEmdCkpe3ZhciBmPW9bMF07b1swXT1vWzFdLG9bMV09Zn1lLnB1c2gobyl9fXJldHVybiBlfX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjQ5NCwic2ltcGxpY2lhbC1jb21wbGV4Ijo1MDR9XSw0MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPTAsYT0xO2Z1bmN0aW9uIG8odCxlLHIsbixpKXt0aGlzLm1pZD10LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9cix0aGlzLmxlZnRQb2ludHM9bix0aGlzLnJpZ2h0UG9pbnRzPWksdGhpcy5jb3VudD0oZT9lLmNvdW50OjApKyhyP3IuY291bnQ6MCkrbi5sZW5ndGh9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCF0fHwwPT09dC5sZW5ndGgpcmV0dXJuIG5ldyB4KG51bGwpO3JldHVybiBuZXcgeCh5KHQpKX07dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0LGUpe3QubWlkPWUubWlkLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQubGVmdFBvaW50cz1lLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1lLnJpZ2h0UG9pbnRzLHQuY291bnQ9ZS5jb3VudH1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9eShlKTt0Lm1pZD1yLm1pZCx0LmxlZnQ9ci5sZWZ0LHQucmlnaHQ9ci5yaWdodCx0LmxlZnRQb2ludHM9ci5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ci5yaWdodFBvaW50cyx0LmNvdW50PXIuY291bnR9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKTtyLnB1c2goZSksYyh0LHIpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj10LmludGVydmFscyhbXSksbj1yLmluZGV4T2YoZSk7cmV0dXJuIG48MD9pOihyLnNwbGljZShuLDEpLGModCxyKSxhKX1mdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZ0W25dWzBdPD1lOysrbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBwKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgtMTtuPj0wJiZ0W25dWzFdPj1lOy0tbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPWUodFtyXSk7aWYobilyZXR1cm4gbn19ZnVuY3Rpb24gZyh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gdih0LGUpe3ZhciByPXRbMF0tZVswXTtyZXR1cm4gcnx8dFsxXS1lWzFdfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10WzFdLWVbMV07cmV0dXJuIHJ8fHRbMF0tZVswXX1mdW5jdGlvbiB5KHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCh0W3JdWzBdLHRbcl1bMV0pO2Uuc29ydChnKTt2YXIgbj1lW2UubGVuZ3RoPj4xXSxpPVtdLGE9W10scz1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbD10W3JdO2xbMV08bj9pLnB1c2gobCk6bjxsWzBdP2EucHVzaChsKTpzLnB1c2gobCl9dmFyIGM9cyx1PXMuc2xpY2UoKTtyZXR1cm4gYy5zb3J0KHYpLHUuc29ydChtKSxuZXcgbyhuLHkoaSkseShhKSxjLHUpfWZ1bmN0aW9uIHgodCl7dGhpcy5yb290PXR9cy5pbnRlcnZhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucHVzaC5hcHBseSh0LHRoaXMubGVmdFBvaW50cyksdGhpcy5sZWZ0JiZ0aGlzLmxlZnQuaW50ZXJ2YWxzKHQpLHRoaXMucmlnaHQmJnRoaXMucmlnaHQuaW50ZXJ2YWxzKHQpLHR9LHMuaW5zZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aDtpZih0aGlzLmNvdW50Kz0xLHRbMV08dGhpcy5taWQpdGhpcy5sZWZ0PzQqKHRoaXMubGVmdC5jb3VudCsxKT4zKihlKzEpP3UodGhpcyx0KTp0aGlzLmxlZnQuaW5zZXJ0KHQpOnRoaXMubGVmdD15KFt0XSk7ZWxzZSBpZih0WzBdPnRoaXMubWlkKXRoaXMucmlnaHQ/NCoodGhpcy5yaWdodC5jb3VudCsxKT4zKihlKzEpP3UodGhpcyx0KTp0aGlzLnJpZ2h0Lmluc2VydCh0KTp0aGlzLnJpZ2h0PXkoW3RdKTtlbHNle3ZhciByPW4uZ2UodGhpcy5sZWZ0UG9pbnRzLHQsdiksaT1uLmdlKHRoaXMucmlnaHRQb2ludHMsdCxtKTt0aGlzLmxlZnRQb2ludHMuc3BsaWNlKHIsMCx0KSx0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShpLDAsdCl9fSxzLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cztpZih0WzFdPHRoaXMubWlkKXJldHVybiB0aGlzLmxlZnQ/NCoodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApPjMqKGUtMSk/Zih0aGlzLHQpOjI9PT0oYz10aGlzLmxlZnQucmVtb3ZlKHQpKT8odGhpcy5sZWZ0PW51bGwsdGhpcy5jb3VudC09MSxhKTooYz09PWEmJih0aGlzLmNvdW50LT0xKSxjKTppO2lmKHRbMF0+dGhpcy5taWQpcmV0dXJuIHRoaXMucmlnaHQ/NCoodGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKT4zKihlLTEpP2YodGhpcyx0KToyPT09KGM9dGhpcy5yaWdodC5yZW1vdmUodCkpPyh0aGlzLnJpZ2h0PW51bGwsdGhpcy5jb3VudC09MSxhKTooYz09PWEmJih0aGlzLmNvdW50LT0xKSxjKTppO2lmKDE9PT10aGlzLmNvdW50KXJldHVybiB0aGlzLmxlZnRQb2ludHNbMF09PT10PzI6aTtpZigxPT09dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzWzBdPT09dCl7aWYodGhpcy5sZWZ0JiZ0aGlzLnJpZ2h0KXtmb3IodmFyIHI9dGhpcyxvPXRoaXMubGVmdDtvLnJpZ2h0OylyPW8sbz1vLnJpZ2h0O2lmKHI9PT10aGlzKW8ucmlnaHQ9dGhpcy5yaWdodDtlbHNle3ZhciBzPXRoaXMubGVmdCxjPXRoaXMucmlnaHQ7ci5jb3VudC09by5jb3VudCxyLnJpZ2h0PW8ubGVmdCxvLmxlZnQ9cyxvLnJpZ2h0PWN9bCh0aGlzLG8pLHRoaXMuY291bnQ9KHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCkrKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKSt0aGlzLmxlZnRQb2ludHMubGVuZ3RofWVsc2UgdGhpcy5sZWZ0P2wodGhpcyx0aGlzLmxlZnQpOmwodGhpcyx0aGlzLnJpZ2h0KTtyZXR1cm4gYX1mb3Iocz1uLmdlKHRoaXMubGVmdFBvaW50cyx0LHYpO3M8dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzW3NdWzBdPT09dFswXTsrK3MpaWYodGhpcy5sZWZ0UG9pbnRzW3NdPT09dCl7dGhpcy5jb3VudC09MSx0aGlzLmxlZnRQb2ludHMuc3BsaWNlKHMsMSk7Zm9yKGM9bi5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsbSk7Yzx0aGlzLnJpZ2h0UG9pbnRzLmxlbmd0aCYmdGhpcy5yaWdodFBvaW50c1tjXVsxXT09PXRbMV07KytjKWlmKHRoaXMucmlnaHRQb2ludHNbY109PT10KXJldHVybiB0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShjLDEpLGF9cmV0dXJuIGl9LHMucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHQ8dGhpcy5taWQpe2lmKHRoaXMubGVmdClpZihyPXRoaXMubGVmdC5xdWVyeVBvaW50KHQsZSkpcmV0dXJuIHI7cmV0dXJuIGgodGhpcy5sZWZ0UG9pbnRzLHQsZSl9aWYodD50aGlzLm1pZCl7dmFyIHI7aWYodGhpcy5yaWdodClpZihyPXRoaXMucmlnaHQucXVlcnlQb2ludCh0LGUpKXJldHVybiByO3JldHVybiBwKHRoaXMucmlnaHRQb2ludHMsdCxlKX1yZXR1cm4gZCh0aGlzLmxlZnRQb2ludHMsZSl9LHMucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG47aWYodDx0aGlzLm1pZCYmdGhpcy5sZWZ0JiYobj10aGlzLmxlZnQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO2lmKGU+dGhpcy5taWQmJnRoaXMucmlnaHQmJihuPXRoaXMucmlnaHQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO3JldHVybiBlPHRoaXMubWlkP2godGhpcy5sZWZ0UG9pbnRzLGUscik6dD50aGlzLm1pZD9wKHRoaXMucmlnaHRQb2ludHMsdCxyKTpkKHRoaXMubGVmdFBvaW50cyxyKX07dmFyIGI9eC5wcm90b3R5cGU7Yi5pbnNlcnQ9ZnVuY3Rpb24odCl7dGhpcy5yb290P3RoaXMucm9vdC5pbnNlcnQodCk6dGhpcy5yb290PW5ldyBvKHRbMF0sbnVsbCxudWxsLFt0XSxbdF0pfSxiLnJlbW92ZT1mdW5jdGlvbih0KXtpZih0aGlzLnJvb3Qpe3ZhciBlPXRoaXMucm9vdC5yZW1vdmUodCk7cmV0dXJuIDI9PT1lJiYodGhpcy5yb290PW51bGwpLGUhPT1pfXJldHVybiExfSxiLnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeVBvaW50KHQsZSl9LGIucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7aWYodDw9ZSYmdGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlJbnRlcnZhbCh0LGUscil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJjb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290LmNvdW50OjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsImludGVydmFscyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290LmludGVydmFscyhbXSk6W119fSl9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgxfV0sNDA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcillW3Rbcl1dPXI7cmV0dXJuIGV9fSx7fV0sNDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09cjtyZXR1cm4gZX19LHt9XSw0MDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ITB9LHt9XSw0MTA6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiEhdC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29uc3RydWN0b3IuaXNCdWZmZXImJnQuY29uc3RydWN0b3IuaXNCdWZmZXIodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYobih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNsaWNlJiZuKHQuc2xpY2UoMCwwKSl9KHQpfHwhIXQuX2lzQnVmZmVyKX19LHt9XSw0MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pKX0se31dLDQxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9YSxlLmV4cG9ydHMuaXNNb2JpbGU9YTt2YXIgbj0vKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWluby9pLGk9LyhhbmRyb2lkfGJiXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm98YW5kcm9pZHxpcGFkfHBsYXlib29rfHNpbGsvaTtmdW5jdGlvbiBhKHQpe3R8fCh0PXt9KTt2YXIgZT10LnVhO3JldHVybiBlfHwidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8KGU9bmF2aWdhdG9yLnVzZXJBZ2VudCksZSYmZS5oZWFkZXJzJiYic3RyaW5nIj09dHlwZW9mIGUuaGVhZGVyc1sidXNlci1hZ2VudCJdJiYoZT1lLmhlYWRlcnNbInVzZXItYWdlbnQiXSksInN0cmluZyI9PXR5cGVvZiBlJiYodC50YWJsZXQ/aS50ZXN0KGUpOm4udGVzdChlKSl9fSx7fV0sNDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9PXQmJigib2JqZWN0Ij09PWV8fCJmdW5jdGlvbiI9PT1lKX19LHt9XSw0MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1uLmNhbGwodCkmJihudWxsPT09KGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKXx8ZT09PU9iamVjdC5nZXRQcm90b3R5cGVPZih7fSkpfX0se31dLDQxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYoKChlPXQuY2hhckNvZGVBdChuKSk8OXx8ZT4xMykmJjMyIT09ZSYmMTMzIT09ZSYmMTYwIT09ZSYmNTc2MCE9PWUmJjYxNTghPT1lJiYoZTw4MTkyfHxlPjgyMDUpJiY4MjMyIT09ZSYmODIzMyE9PWUmJjgyMzkhPT1lJiY4Mjg3IT09ZSYmODI4OCE9PWUmJjEyMjg4IT09ZSYmNjUyNzkhPT1lKXJldHVybiExO3JldHVybiEwfX0se31dLDQxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD10LnRyaW0oKSwhISgvXlttemxodmNzcXRhXVxzKlstKy4wLTldW15tbGh2emNzcXRhXSsvaS50ZXN0KHQpJiYvW1xkel0kL2kudGVzdCh0KSYmdC5sZW5ndGg+NCkpfX0se31dLDQxNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQqKDEtcikrZSpyfX0se31dLDQxODpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOnQubWFwYm94Z2w9bigpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlLHIsbjtmdW5jdGlvbiBpKHQsaSl7aWYoZSlpZihyKXt2YXIgYT0idmFyIHNoYXJlZENodW5rID0ge307ICgiK2UrIikoc2hhcmVkQ2h1bmspOyAoIityKyIpKHNoYXJlZENodW5rKTsiLG89e307ZShvKSwobj1pKG8pKS53b3JrZXJVcmw9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2FdLHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQifSkpfWVsc2Ugcj1pO2Vsc2UgZT1pfXJldHVybiBpKDAsZnVuY3Rpb24oZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgdD90OiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsImRlZmF1bHQiKT90LmRlZmF1bHQ6dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQoZT17ZXhwb3J0czp7fX0sZS5leHBvcnRzKSxlLmV4cG9ydHN9dmFyIGE9bztmdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuY3g9Myp0LHRoaXMuYng9Myooci10KS10aGlzLmN4LHRoaXMuYXg9MS10aGlzLmN4LXRoaXMuYngsdGhpcy5jeT0zKmUsdGhpcy5ieT0zKihuLWUpLXRoaXMuY3ksdGhpcy5heT0xLXRoaXMuY3ktdGhpcy5ieSx0aGlzLnAxeD10LHRoaXMucDF5PW4sdGhpcy5wMng9cix0aGlzLnAyeT1ufW8ucHJvdG90eXBlLnNhbXBsZUN1cnZlWD1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXgqdCt0aGlzLmJ4KSp0K3RoaXMuY3gpKnR9LG8ucHJvdG90eXBlLnNhbXBsZUN1cnZlWT1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXkqdCt0aGlzLmJ5KSp0K3RoaXMuY3kpKnR9LG8ucHJvdG90eXBlLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKDMqdGhpcy5heCp0KzIqdGhpcy5ieCkqdCt0aGlzLmN4fSxvLnByb3RvdHlwZS5zb2x2ZUN1cnZlWD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG87Zm9yKHZvaWQgMD09PWUmJihlPTFlLTYpLGk9dCxvPTA7bzw4O28rKyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKS10LE1hdGguYWJzKGEpPGUpcmV0dXJuIGk7dmFyIHM9dGhpcy5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYKGkpO2lmKE1hdGguYWJzKHMpPDFlLTYpYnJlYWs7aS09YS9zfWlmKChpPXQpPChyPTApKXJldHVybiByO2lmKGk+KG49MSkpcmV0dXJuIG47Zm9yKDtyPG47KXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLE1hdGguYWJzKGEtdCk8ZSlyZXR1cm4gaTt0PmE/cj1pOm49aSxpPS41KihuLXIpK3J9cmV0dXJuIGl9LG8ucHJvdG90eXBlLnNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2FtcGxlQ3VydmVZKHRoaXMuc29sdmVDdXJ2ZVgodCxlKSl9O3ZhciBzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmNvbHVtbj10LHRoaXMucm93PWUsdGhpcy56b29tPXJ9O3MucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKHRoaXMuY29sdW1uLHRoaXMucm93LHRoaXMuem9vbSl9LHMucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl96b29tVG8odCl9LHMucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LHMucHJvdG90eXBlLl96b29tVG89ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMix0LXRoaXMuem9vbSk7cmV0dXJuIHRoaXMuY29sdW1uKj1lLHRoaXMucm93Kj1lLHRoaXMuem9vbT10LHRoaXN9LHMucHJvdG90eXBlLl9zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC56b29tVG8odGhpcy56b29tKSx0aGlzLmNvbHVtbi09dC5jb2x1bW4sdGhpcy5yb3ctPXQucm93LHRoaXN9O3ZhciBsPWM7ZnVuY3Rpb24gYyh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9bmV3IGEodCxlLHIsbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLnNvbHZlKHQpfX1jLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGModGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQodCl9LHN1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LG11bHRCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRCeVBvaW50KHQpfSxkaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdkJ5UG9pbnQodCl9LG11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdCh0KX0sZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2Rpdih0KX0scm90YXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZSh0KX0scm90YXRlQXJvdW5kOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlQXJvdW5kKHQsZSl9LG1hdE11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdCh0KX0sdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3VuaXQoKX0scGVycDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxtYWc6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGRpc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIodCkpfSxkaXN0U3FyOmZ1bmN0aW9uKHQpe3ZhciBlPXQueC10aGlzLngscj10LnktdGhpcy55O3JldHVybiBlKmUrcipyfSxhbmdsZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS10LnksdGhpcy54LXQueCl9LGFuZ2xlV2l0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAodC54LHQueSl9LGFuZ2xlV2l0aFNlcDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCplLXRoaXMueSp0LHRoaXMueCp0K3RoaXMueSplKX0sX21hdE11bHQ6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0aGlzLngrdFsxXSp0aGlzLnkscj10WzJdKnRoaXMueCt0WzNdKnRoaXMueTtyZXR1cm4gdGhpcy54PWUsdGhpcy55PXIsdGhpc30sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sX3N1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sX211bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc30sX2RpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxfbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9LF9kaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfSxfdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXYodGhpcy5tYWcoKSksdGhpc30sX3BlcnA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnk7cmV0dXJuIHRoaXMueT10aGlzLngsdGhpcy54PS10LHRoaXN9LF9yb3RhdGU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KSxuPWUqdGhpcy54LXIqdGhpcy55LGk9cip0aGlzLngrZSp0aGlzLnk7cmV0dXJuIHRoaXMueD1uLHRoaXMueT1pLHRoaXN9LF9yb3RhdGVBcm91bmQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9ZS54K3IqKHRoaXMueC1lLngpLW4qKHRoaXMueS1lLnkpLGE9ZS55K24qKHRoaXMueC1lLngpK3IqKHRoaXMueS1lLnkpO3JldHVybiB0aGlzLng9aSx0aGlzLnk9YSx0aGlzfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9fSxjLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBjP3Q6QXJyYXkuaXNBcnJheSh0KT9uZXcgYyh0WzBdLHRbMV0pOnR9O3ZhciBmPXUoLjI1LC4xLC4yNSwxKTtmdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heChlLHQpKX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9dmFyIGQ9MTtmdW5jdGlvbiBnKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF0mJihlW3RdPWVbdF0uYmluZChlKSl9KX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuLTEhPT10LmluZGV4T2YoZSx0Lmxlbmd0aC1lLmxlbmd0aCl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpbltpXT1lLmNhbGwocnx8dGhpcyx0W2ldLGksdCk7cmV0dXJuIG59ZnVuY3Rpb24geSh0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpJiYobltpXT10W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiB4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKHgpOiJvYmplY3QiPT10eXBlb2YgdCYmdD9tKHQseCk6dH12YXIgYj17fTtmdW5jdGlvbiBfKHQpe2JbdF18fCgidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2Fybih0KSxiW3RdPSEwKX1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4oci55LXQueSkqKGUueC10LngpPihlLnktdC55KSooci54LXQueCl9ZnVuY3Rpb24gayh0KXtmb3IodmFyIGU9MCxyPTAsbj10Lmxlbmd0aCxpPW4tMSxhPXZvaWQgMCxvPXZvaWQgMDtyPG47aT1yKyspYT10W3JdLGUrPSgobz10W2ldKS54LWEueCkqKGEueStvLnkpO3JldHVybiBlfXZhciBUPXtVbmtub3duOiJVbmtub3duIixTdHlsZToiU3R5bGUiLFNvdXJjZToiU291cmNlIixUaWxlOiJUaWxlIixHbHlwaHM6IkdseXBocyIsU3ByaXRlSW1hZ2U6IlNwcml0ZUltYWdlIixTcHJpdGVKU09OOiJTcHJpdGVKU09OIixJbWFnZToiSW1hZ2UifTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LmZyZWV6ZShUKTt2YXIgQT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXt0LmNhbGwodGhpcyxlKSx0aGlzLnN0YXR1cz1yLHRoaXMudXJsPW4sdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlKyIgKCIrdGhpcy5zdGF0dXMrIik6ICIrdGhpcy51cmx9LGV9KEVycm9yKTtmdW5jdGlvbiBNKHQpe3ZhciBlPW5ldyBzZWxmLlhNTEh0dHBSZXF1ZXN0O2Zvcih2YXIgciBpbiBlLm9wZW4oIkdFVCIsdC51cmwsITApLHQuaGVhZGVycyllLnNldFJlcXVlc3RIZWFkZXIocix0LmhlYWRlcnNbcl0pO3JldHVybiBlLndpdGhDcmVkZW50aWFscz0iaW5jbHVkZSI9PT10LmNyZWRlbnRpYWxzLGV9dmFyIFM9ZnVuY3Rpb24odCxlKXt2YXIgcj1NKHQpO3JldHVybiByLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLHIub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IEVycm9yKHIuc3RhdHVzVGV4dCkpfSxyLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBuPXIucmVzcG9uc2U7aWYoMD09PW4uYnl0ZUxlbmd0aCYmMjAwPT09ci5zdGF0dXMpcmV0dXJuIGUobmV3IEVycm9yKCJodHRwIHN0YXR1cyAyMDAgcmV0dXJuZWQgd2l0aG91dCBjb250ZW50LiIpKTtyLnN0YXR1cz49MjAwJiZyLnN0YXR1czwzMDAmJnIucmVzcG9uc2U/ZShudWxsLHtkYXRhOm4sY2FjaGVDb250cm9sOnIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNhY2hlLUNvbnRyb2wiKSxleHBpcmVzOnIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV4cGlyZXMiKX0pOmUobmV3IEEoci5zdGF0dXNUZXh0LHIuc3RhdHVzLHQudXJsKSl9LHIuc2VuZCgpLHJ9O2Z1bmN0aW9uIEUodCxlLHIpe3JbdF09clt0XXx8W10sclt0XS5wdXNoKGUpfWZ1bmN0aW9uIEModCxlLHIpe2lmKHImJnJbdF0pe3ZhciBuPXJbdF0uaW5kZXhPZihlKTstMSE9PW4mJnJbdF0uc3BsaWNlKG4sMSl9fXZhciBMPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pLHAodGhpcyxlKSx0aGlzLnR5cGU9dH0sej1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dm9pZCAwPT09ciYmKHI9e30pLHQuY2FsbCh0aGlzLCJlcnJvciIscCh7ZXJyb3I6ZX0scikpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShMKSxPPWZ1bmN0aW9uKCl7fTtPLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzfHx7fSxFKHQsZSx0aGlzLl9saXN0ZW5lcnMpLHRoaXN9LE8ucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe3JldHVybiBDKHQsZSx0aGlzLl9saXN0ZW5lcnMpLEModCxlLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLHRoaXN9LE8ucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fb25lVGltZUxpc3RlbmVycz10aGlzLl9vbmVUaW1lTGlzdGVuZXJzfHx7fSxFKHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxPLnByb3RvdHlwZS5maXJlPWZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bmV3IEwodCxhcmd1bWVudHNbMV18fHt9KSk7dmFyIGU9dC50eXBlO2lmKHRoaXMubGlzdGVucyhlKSl7dC50YXJnZXQ9dGhpcztmb3IodmFyIHI9MCxuPXRoaXMuX2xpc3RlbmVycyYmdGhpcy5fbGlzdGVuZXJzW2VdP3RoaXMuX2xpc3RlbmVyc1tlXS5zbGljZSgpOltdO3I8bi5sZW5ndGg7cis9MSluW3JdLmNhbGwodGhpcyx0KTtmb3IodmFyIGk9MCxhPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnMmJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbZV0/dGhpcy5fb25lVGltZUxpc3RlbmVyc1tlXS5zbGljZSgpOltdO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtDKGUsbyx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSxvLmNhbGwodGhpcyx0KX12YXIgcz10aGlzLl9ldmVudGVkUGFyZW50O3MmJihwKHQsImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhP3RoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKCk6dGhpcy5fZXZlbnRlZFBhcmVudERhdGEpLHMuZmlyZSh0KSl9ZWxzZSB2KGUsImVycm9yIik/Y29uc29sZS5lcnJvcih0JiZ0LmVycm9yfHx0fHwiRW1wdHkgZXJyb3IgZXZlbnQiKTp2KGUsIndhcm5pbmciKSYmY29uc29sZS53YXJuKHQmJnQud2FybmluZ3x8dHx8IkVtcHR5IHdhcm5pbmcgZXZlbnQiKTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUubGlzdGVucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbdF0mJnRoaXMuX2xpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XSYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fZXZlbnRlZFBhcmVudCYmdGhpcy5fZXZlbnRlZFBhcmVudC5saXN0ZW5zKHQpfSxPLnByb3RvdHlwZS5zZXRFdmVudGVkUGFyZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50ZWRQYXJlbnQ9dCx0aGlzLl9ldmVudGVkUGFyZW50RGF0YT1lLHRoaXN9O3ZhciBJPXskdmVyc2lvbjo4LCRyb290Ont2ZXJzaW9uOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WzhdfSxuYW1lOnt0eXBlOiJzdHJpbmcifSxtZXRhZGF0YTp7dHlwZToiKiJ9LGNlbnRlcjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIifSx6b29tOnt0eXBlOiJudW1iZXIifSxiZWFyaW5nOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOiJkZWdyZWVzIn0scGl0Y2g6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHVuaXRzOiJkZWdyZWVzIn0sbGlnaHQ6e3R5cGU6ImxpZ2h0In0sc291cmNlczp7cmVxdWlyZWQ6ITAsdHlwZToic291cmNlcyJ9LHNwcml0ZTp7dHlwZToic3RyaW5nIn0sZ2x5cGhzOnt0eXBlOiJzdHJpbmcifSx0cmFuc2l0aW9uOnt0eXBlOiJ0cmFuc2l0aW9uIn0sbGF5ZXJzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsdmFsdWU6ImxheWVyIn19LHNvdXJjZXM6eyIqIjp7dHlwZToic291cmNlIn19LHNvdXJjZTpbInNvdXJjZV92ZWN0b3IiLCJzb3VyY2VfcmFzdGVyIiwic291cmNlX3Jhc3Rlcl9kZW0iLCJzb3VyY2VfZ2VvanNvbiIsInNvdXJjZV92aWRlbyIsInNvdXJjZV9pbWFnZSJdLHNvdXJjZV92ZWN0b3I6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7dmVjdG9yOnt9fX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxib3VuZHM6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExLDE4MCw4NS4wNTExXX0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfcmFzdGVyOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3Jhc3Rlcjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMSwxODAsODUuMDUxMV19LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LHRpbGVTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTEyLHVuaXRzOiJwaXhlbHMifSxzY2hlbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7eHl6Ont9LHRtczp7fX0sZGVmYXVsdDoieHl6In0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfcmFzdGVyX2RlbTp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOnsicmFzdGVyLWRlbSI6e319fSx1cmw6e3R5cGU6InN0cmluZyJ9LHRpbGVzOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGJvdW5kczp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEsMTgwLDg1LjA1MTFdfSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUxMix1bml0czoicGl4ZWxzIn0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LGVuY29kaW5nOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3RlcnJhcml1bTp7fSxtYXBib3g6e319LGRlZmF1bHQ6Im1hcGJveCJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfZ2VvanNvbjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOntnZW9qc29uOnt9fX0sZGF0YTp7dHlwZToiKiJ9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxOH0sYnVmZmVyOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTI4LG1heGltdW06NTEyLG1pbmltdW06MH0sdG9sZXJhbmNlOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjM3NX0sY2x1c3Rlcjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY2x1c3RlclJhZGl1czp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUwLG1pbmltdW06MH0sY2x1c3Rlck1heFpvb206e3R5cGU6Im51bWJlciJ9LGxpbmVNZXRyaWNzOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfX0sc291cmNlX3ZpZGVvOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3ZpZGVvOnt9fX0sdXJsczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sc291cmNlX2ltYWdlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e2ltYWdlOnt9fX0sdXJsOntyZXF1aXJlZDohMCx0eXBlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sbGF5ZXI6e2lkOnt0eXBlOiJzdHJpbmciLHJlcXVpcmVkOiEwfSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2ZpbGw6e30sbGluZTp7fSxzeW1ib2w6e30sY2lyY2xlOnt9LGhlYXRtYXA6e30sImZpbGwtZXh0cnVzaW9uIjp7fSxyYXN0ZXI6e30saGlsbHNoYWRlOnt9LGJhY2tncm91bmQ6e319LHJlcXVpcmVkOiEwfSxtZXRhZGF0YTp7dHlwZToiKiJ9LHNvdXJjZTp7dHlwZToic3RyaW5nIn0sInNvdXJjZS1sYXllciI6e3R5cGU6InN0cmluZyJ9LG1pbnpvb206e3R5cGU6Im51bWJlciIsbWluaW11bTowLG1heGltdW06MjR9LG1heHpvb206e3R5cGU6Im51bWJlciIsbWluaW11bTowLG1heGltdW06MjR9LGZpbHRlcjp7dHlwZToiZmlsdGVyIn0sbGF5b3V0Ont0eXBlOiJsYXlvdXQifSxwYWludDp7dHlwZToicGFpbnQifX0sbGF5b3V0OlsibGF5b3V0X2ZpbGwiLCJsYXlvdXRfbGluZSIsImxheW91dF9jaXJjbGUiLCJsYXlvdXRfaGVhdG1hcCIsImxheW91dF9maWxsLWV4dHJ1c2lvbiIsImxheW91dF9zeW1ib2wiLCJsYXlvdXRfcmFzdGVyIiwibGF5b3V0X2hpbGxzaGFkZSIsImxheW91dF9iYWNrZ3JvdW5kIl0sbGF5b3V0X2JhY2tncm91bmQ6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9maWxsOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSJ9fSxsYXlvdXRfY2lyY2xlOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSJ9fSxsYXlvdXRfaGVhdG1hcDp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUifX0sbGF5b3V0X2xpbmU6eyJsaW5lLWNhcCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e2J1dHQ6e30scm91bmQ6e30sc3F1YXJlOnt9fSxkZWZhdWx0OiJidXR0In0sImxpbmUtam9pbiI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczp7YmV2ZWw6e30scm91bmQ6e30sbWl0ZXI6e319LGRlZmF1bHQ6Im1pdGVyIn0sImxpbmUtbWl0ZXItbGltaXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6W3sibGluZS1qb2luIjoibWl0ZXIifV19LCJsaW5lLXJvdW5kLWxpbWl0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEuMDUsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6InJvdW5kIn1dfSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSJ9fSxsYXlvdXRfc3ltYm9sOnsic3ltYm9sLXBsYWNlbWVudCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e3BvaW50Ont9LGxpbmU6e319LGRlZmF1bHQ6InBvaW50In0sInN5bWJvbC1zcGFjaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjI1MCxtaW5pbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlt7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dfSwic3ltYm9sLWF2b2lkLWVkZ2VzIjp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITF9LCJpY29uLWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24taWdub3JlLXBsYWNlbWVudCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXX0sImljb24tcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1zaXplIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHVuaXRzOiJmYWN0b3Igb2YgdGhlIG9yaWdpbmFsIGljb24gc2l6ZSIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXRleHQtZml0Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bm9uZTp7fSx3aWR0aDp7fSxoZWlnaHQ6e30sYm90aDp7fX0sZGVmYXVsdDoibm9uZSIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwidGV4dC1maWVsZCJdfSwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6WzAsMCwwLDBdLHVuaXRzOiJwaXhlbHMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiLCJ0ZXh0LWZpZWxkIix7Imljb24tdGV4dC1maXQiOlsiYm90aCIsIndpZHRoIiwiaGVpZ2h0Il19XX0sImljb24taW1hZ2UiOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRva2VuczohMH0sImljb24tcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXBhZGRpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1rZWVwLXVwcmlnaHQiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiLHsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dfSwiaWNvbi1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwidGV4dC1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtZmllbGQiOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6IiIsdG9rZW5zOiEwfSwidGV4dC1mb250Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6WyJPcGVuIFNhbnMgUmVndWxhciIsIkFyaWFsIFVuaWNvZGUgTVMgUmVndWxhciJdLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1zaXplIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjE2LG1pbmltdW06MCx1bml0czoicGl4ZWxzIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtbWF4LXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEwLG1pbmltdW06MCx1bml0czoiZW1zIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtbGluZS1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4yLHVuaXRzOiJlbXMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtbGV0dGVyLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx1bml0czoiZW1zIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtanVzdGlmeSI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczp7bGVmdDp7fSxjZW50ZXI6e30scmlnaHQ6e319LGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczp7Y2VudGVyOnt9LGxlZnQ6e30scmlnaHQ6e30sdG9wOnt9LGJvdHRvbTp7fSwidG9wLWxlZnQiOnt9LCJ0b3AtcmlnaHQiOnt9LCJib3R0b20tbGVmdCI6e30sImJvdHRvbS1yaWdodCI6e319LGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LW1heC1hbmdsZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo0NSx1bml0czoiZGVncmVlcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInRleHQtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LXBhZGRpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1rZWVwLXVwcmlnaHQiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMCxyZXF1aXJlczpbInRleHQtZmllbGQiLHsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dfSwidGV4dC10cmFuc2Zvcm0iOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx2YWx1ZXM6e25vbmU6e30sdXBwZXJjYXNlOnt9LGxvd2VyY2FzZTp7fX0sZGVmYXVsdDoibm9uZSIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LW9mZnNldCI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIix1bml0czoiZW1zIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxsZW5ndGg6MixkZWZhdWx0OlswLDBdLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1hbGxvdy1vdmVybGFwIjp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtb3B0aW9uYWwiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbInRleHQtZmllbGQiLCJpY29uLWltYWdlIl19LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9yYXN0ZXI6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9oaWxsc2hhZGU6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGZpbHRlcjp7dHlwZToiYXJyYXkiLHZhbHVlOiIqIn0sZmlsdGVyX29wZXJhdG9yOnt0eXBlOiJlbnVtIix2YWx1ZXM6eyI9PSI6e30sIiE9Ijp7fSwiPiI6e30sIj49Ijp7fSwiPCI6e30sIjw9Ijp7fSxpbjp7fSwiIWluIjp7fSxhbGw6e30sYW55Ont9LG5vbmU6e30saGFzOnt9LCIhaGFzIjp7fX19LGdlb21ldHJ5X3R5cGU6e3R5cGU6ImVudW0iLHZhbHVlczp7UG9pbnQ6e30sTGluZVN0cmluZzp7fSxQb2x5Z29uOnt9fX0sZnVuY3Rpb25fc3RvcDp7dHlwZToiYXJyYXkiLG1pbmltdW06MCxtYXhpbXVtOjIyLHZhbHVlOlsibnVtYmVyIiwiY29sb3IiXSxsZW5ndGg6Mn0sZXhwcmVzc2lvbjp7dHlwZToiYXJyYXkiLHZhbHVlOiIqIixtaW5pbXVtOjF9LGV4cHJlc3Npb25fbmFtZTp7dHlwZToiZW51bSIsdmFsdWVzOntsZXQ6e2dyb3VwOiJWYXJpYWJsZSBiaW5kaW5nIn0sdmFyOntncm91cDoiVmFyaWFibGUgYmluZGluZyJ9LGxpdGVyYWw6e2dyb3VwOiJUeXBlcyJ9LGFycmF5Ontncm91cDoiVHlwZXMifSxhdDp7Z3JvdXA6Ikxvb2t1cCJ9LGNhc2U6e2dyb3VwOiJEZWNpc2lvbiJ9LG1hdGNoOntncm91cDoiRGVjaXNpb24ifSxjb2FsZXNjZTp7Z3JvdXA6IkRlY2lzaW9uIn0sc3RlcDp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LGludGVycG9sYXRlOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0sbG4yOntncm91cDoiTWF0aCJ9LHBpOntncm91cDoiTWF0aCJ9LGU6e2dyb3VwOiJNYXRoIn0sdHlwZW9mOntncm91cDoiVHlwZXMifSxzdHJpbmc6e2dyb3VwOiJUeXBlcyJ9LG51bWJlcjp7Z3JvdXA6IlR5cGVzIn0sYm9vbGVhbjp7Z3JvdXA6IlR5cGVzIn0sb2JqZWN0Ontncm91cDoiVHlwZXMifSxjb2xsYXRvcjp7Z3JvdXA6IlR5cGVzIn0sInRvLXN0cmluZyI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1udW1iZXIiOntncm91cDoiVHlwZXMifSwidG8tYm9vbGVhbiI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1yZ2JhIjp7Z3JvdXA6IkNvbG9yIn0sInRvLWNvbG9yIjp7Z3JvdXA6IlR5cGVzIn0scmdiOntncm91cDoiQ29sb3IifSxyZ2JhOntncm91cDoiQ29sb3IifSxnZXQ6e2dyb3VwOiJMb29rdXAifSxoYXM6e2dyb3VwOiJMb29rdXAifSxsZW5ndGg6e2dyb3VwOiJMb29rdXAifSxwcm9wZXJ0aWVzOntncm91cDoiRmVhdHVyZSBkYXRhIn0sImdlb21ldHJ5LXR5cGUiOntncm91cDoiRmVhdHVyZSBkYXRhIn0saWQ6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSx6b29tOntncm91cDoiWm9vbSJ9LCJoZWF0bWFwLWRlbnNpdHkiOntncm91cDoiSGVhdG1hcCJ9LCJsaW5lLXByb2dyZXNzIjp7Z3JvdXA6IkhlYXRtYXAifSwiKyI6e2dyb3VwOiJNYXRoIn0sIioiOntncm91cDoiTWF0aCJ9LCItIjp7Z3JvdXA6Ik1hdGgifSwiLyI6e2dyb3VwOiJNYXRoIn0sIiUiOntncm91cDoiTWF0aCJ9LCJeIjp7Z3JvdXA6Ik1hdGgifSxzcXJ0Ontncm91cDoiTWF0aCJ9LGxvZzEwOntncm91cDoiTWF0aCJ9LGxuOntncm91cDoiTWF0aCJ9LGxvZzI6e2dyb3VwOiJNYXRoIn0sc2luOntncm91cDoiTWF0aCJ9LGNvczp7Z3JvdXA6Ik1hdGgifSx0YW46e2dyb3VwOiJNYXRoIn0sYXNpbjp7Z3JvdXA6Ik1hdGgifSxhY29zOntncm91cDoiTWF0aCJ9LGF0YW46e2dyb3VwOiJNYXRoIn0sbWluOntncm91cDoiTWF0aCJ9LG1heDp7Z3JvdXA6Ik1hdGgifSxyb3VuZDp7Z3JvdXA6Ik1hdGgifSxhYnM6e2dyb3VwOiJNYXRoIn0sY2VpbDp7Z3JvdXA6Ik1hdGgifSxmbG9vcjp7Z3JvdXA6Ik1hdGgifSwiPT0iOntncm91cDoiRGVjaXNpb24ifSwiIT0iOntncm91cDoiRGVjaXNpb24ifSwiPiI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI8Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIj49Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIjw9Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sYWxsOntncm91cDoiRGVjaXNpb24ifSxhbnk6e2dyb3VwOiJEZWNpc2lvbiJ9LCIhIjp7Z3JvdXA6IkRlY2lzaW9uIn0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOntncm91cDoiU3RyaW5nIn0sdXBjYXNlOntncm91cDoiU3RyaW5nIn0sZG93bmNhc2U6e2dyb3VwOiJTdHJpbmcifSxjb25jYXQ6e2dyb3VwOiJTdHJpbmcifSwicmVzb2x2ZWQtbG9jYWxlIjp7Z3JvdXA6IlN0cmluZyJ9fX0sbGlnaHQ6e2FuY2hvcjp7dHlwZToiZW51bSIsZGVmYXVsdDoidmlld3BvcnQiLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSx0cmFuc2l0aW9uOiExLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiExLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQifSxwb3NpdGlvbjp7dHlwZToiYXJyYXkiLGRlZmF1bHQ6WzEuMTUsMjEwLDMwXSxsZW5ndGg6Myx2YWx1ZToibnVtYmVyIix0cmFuc2l0aW9uOiEwLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiExfSxjb2xvcjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiNmZmZmZmYiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiExLHRyYW5zaXRpb246ITB9LGludGVuc2l0eTp7dHlwZToibnVtYmVyIixkZWZhdWx0Oi41LG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITEsdHJhbnNpdGlvbjohMH19LHBhaW50OlsicGFpbnRfZmlsbCIsInBhaW50X2xpbmUiLCJwYWludF9jaXJjbGUiLCJwYWludF9oZWF0bWFwIiwicGFpbnRfZmlsbC1leHRydXNpb24iLCJwYWludF9zeW1ib2wiLCJwYWludF9yYXN0ZXIiLCJwYWludF9oaWxsc2hhZGUiLCJwYWludF9iYWNrZ3JvdW5kIl0scGFpbnRfZmlsbDp7ImZpbGwtYW50aWFsaWFzIjp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITB9LCJmaWxsLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJmaWxsLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9XX0sImZpbGwtb3V0bGluZS1jb2xvciI6e3R5cGU6ImNvbG9yIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLXBhdHRlcm4ifSx7ImZpbGwtYW50aWFsaWFzIjohMH1dfSwiZmlsbC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImZpbGwtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImZpbGwtdHJhbnNsYXRlIl19LCJmaWxsLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfX0scGFpbnRfbGluZTp7ImxpbmUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sImxpbmUtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoibGluZS1wYXR0ZXJuIn1dfSwibGluZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImxpbmUtdHJhbnNsYXRlIl19LCJsaW5lLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWdhcC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS1vZmZzZXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWRhc2hhcnJheSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6ImxpbmUgd2lkdGhzIixyZXF1aXJlczpbeyIhIjoibGluZS1wYXR0ZXJuIn1dfSwibGluZS1wYXR0ZXJuIjp7dHlwZToic3RyaW5nIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImxpbmUtZ3JhZGllbnQiOnt0eXBlOiJjb2xvciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiExLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITEsdHJhbnNpdGlvbjohMSxyZXF1aXJlczpbeyIhIjoibGluZS1kYXNoYXJyYXkifSx7IiEiOiJsaW5lLXBhdHRlcm4ifSx7c291cmNlOiJnZW9qc29uIixoYXM6e2xpbmVNZXRyaWNzOiEwfX1dfX0scGFpbnRfY2lyY2xlOnsiY2lyY2xlLXJhZGl1cyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1LG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiY2lyY2xlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJjaXJjbGUtYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJjaXJjbGUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImNpcmNsZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiY2lyY2xlLXRyYW5zbGF0ZSJdfSwiY2lyY2xlLXBpdGNoLXNjYWxlIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAifSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoidmlld3BvcnQifSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiY2lyY2xlLXN0cm9rZS1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfX0scGFpbnRfaGVhdG1hcDp7ImhlYXRtYXAtcmFkaXVzIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwLG1pbmltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiaGVhdG1hcC13ZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMX0sImhlYXRtYXAtaW50ZW5zaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiExLHRyYW5zaXRpb246ITB9LCJoZWF0bWFwLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6WyJpbnRlcnBvbGF0ZSIsWyJsaW5lYXIiXSxbImhlYXRtYXAtZGVuc2l0eSJdLDAsInJnYmEoMCwgMCwgMjU1LCAwKSIsLjEsInJveWFsYmx1ZSIsLjMsImN5YW4iLC41LCJsaW1lIiwuNywieWVsbG93IiwxLCJyZWQiXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITEsInByb3BlcnR5LWZ1bmN0aW9uIjohMSx0cmFuc2l0aW9uOiExfSwiaGVhdG1hcC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMSx0cmFuc2l0aW9uOiEwfX0scGFpbnRfc3ltYm9sOnsiaWNvbi1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1oYWxvLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6InJnYmEoMCwgMCwgMCwgMCkiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLWhhbG8td2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24taGFsby1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsImljb24tdHJhbnNsYXRlIl19LCJ0ZXh0LW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWhhbG8tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoicmdiYSgwLCAwLCAwLCAwKSIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtaGFsby13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1oYWxvLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwidGV4dC10cmFuc2xhdGUiXX19LHBhaW50X3Jhc3Rlcjp7InJhc3Rlci1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sInJhc3Rlci1odWUtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoiZGVncmVlcyJ9LCJyYXN0ZXItYnJpZ2h0bmVzcy1taW4iOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OjAsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLWJyaWdodG5lc3MtbWF4Ijp7dHlwZToibnVtYmVyIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sInJhc3Rlci1zYXR1cmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTotMSxtYXhpbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJyYXN0ZXItY29udHJhc3QiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sInJhc3Rlci1mYWRlLWR1cmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwMCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITEsdW5pdHM6Im1pbGxpc2Vjb25kcyJ9fSxwYWludF9oaWxsc2hhZGU6eyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDozMzUsbWluaW11bTowLG1heGltdW06MzU5LGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiExfSwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6InZpZXdwb3J0In0sImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiNGRkZGRkYiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiaGlsbHNoYWRlLWFjY2VudC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2JhY2tncm91bmQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJiYWNrZ3JvdW5kLXBhdHRlcm4ifV19LCJiYWNrZ3JvdW5kLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiYmFja2dyb3VuZC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn0sZGVsYXk6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn19LCJsYXlvdXRfZmlsbC1leHRydXNpb24iOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSJ9fSxmdW5jdGlvbjp7ZXhwcmVzc2lvbjp7dHlwZToiZXhwcmVzc2lvbiJ9LHN0b3BzOnt0eXBlOiJhcnJheSIsdmFsdWU6ImZ1bmN0aW9uX3N0b3AifSxiYXNlOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjB9LHByb3BlcnR5Ont0eXBlOiJzdHJpbmciLGRlZmF1bHQ6IiR6b29tIn0sdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntpZGVudGl0eTp7fSxleHBvbmVudGlhbDp7fSxpbnRlcnZhbDp7fSxjYXRlZ29yaWNhbDp7fX0sZGVmYXVsdDoiZXhwb25lbnRpYWwifSxjb2xvclNwYWNlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3JnYjp7fSxsYWI6e30saGNsOnt9fSxkZWZhdWx0OiJyZ2IifSxkZWZhdWx0Ont0eXBlOiIqIixyZXF1aXJlZDohMX19LCJwYWludF9maWxsLWV4dHJ1c2lvbiI6eyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMSxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSwiZmlsbC1leHRydXNpb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiZmlsbC1leHRydXNpb24tcGF0dGVybiJ9XX0sImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSJdfSwiZmlsbC1leHRydXNpb24tcGF0dGVybiI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6Im1ldGVycyIsdHJhbnNpdGlvbjohMH0sImZpbGwtZXh0cnVzaW9uLWJhc2UiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6Im1ldGVycyIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImZpbGwtZXh0cnVzaW9uLWhlaWdodCJdfX19LEQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5tZXNzYWdlPSh0P3QrIjogIjoiIikrcixuJiYodGhpcy5pZGVudGlmaWVyPW4pLG51bGwhPWUmJmUuX19saW5lX18mJih0aGlzLmxpbmU9ZS5fX2xpbmVfXyl9O2Z1bmN0aW9uIFAodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlO3JldHVybiByP1tuZXcgRChlLHIsImNvbnN0YW50cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2OCIpXTpbXX1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIEJvb2xlYW4/dC52YWx1ZU9mKCk6dH1mdW5jdGlvbiBCKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKEIpOkYodCl9dmFyIE49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLHIpLHRoaXMubWVzc2FnZT1yLHRoaXMua2V5PWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEVycm9yKSxqPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pLHRoaXMucGFyZW50PXQsdGhpcy5iaW5kaW5ncz17fTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aVswXSxvPWlbMV07dGhpcy5iaW5kaW5nc1thXT1vfX07ai5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaih0aGlzLHQpfSxqLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kaW5nc1t0XSlyZXR1cm4gdGhpcy5iaW5kaW5nc1t0XTtpZih0aGlzLnBhcmVudClyZXR1cm4gdGhpcy5wYXJlbnQuZ2V0KHQpO3Rocm93IG5ldyBFcnJvcih0KyIgbm90IGZvdW5kIGluIHNjb3BlLiIpfSxqLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmJpbmRpbmdzW3RdfHwhIXRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5oYXModCl9O3ZhciBWPXtraW5kOiJudWxsIn0sVT17a2luZDoibnVtYmVyIn0scT17a2luZDoic3RyaW5nIn0sSD17a2luZDoiYm9vbGVhbiJ9LEc9e2tpbmQ6ImNvbG9yIn0sWT17a2luZDoib2JqZWN0In0sVz17a2luZDoidmFsdWUifSxYPXtraW5kOiJjb2xsYXRvciJ9O2Z1bmN0aW9uIFoodCxlKXtyZXR1cm57a2luZDoiYXJyYXkiLGl0ZW1UeXBlOnQsTjplfX1mdW5jdGlvbiAkKHQpe2lmKCJhcnJheSI9PT10LmtpbmQpe3ZhciBlPSQodC5pdGVtVHlwZSk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0Lk4/ImFycmF5PCIrZSsiLCAiK3QuTisiPiI6InZhbHVlIj09PXQuaXRlbVR5cGUua2luZD8iYXJyYXkiOiJhcnJheTwiK2UrIj4ifXJldHVybiB0LmtpbmR9dmFyIEo9W1YsVSxxLEgsRyxZLFooVyldO2Z1bmN0aW9uIEsodCxlKXtpZigiZXJyb3IiPT09ZS5raW5kKXJldHVybiBudWxsO2lmKCJhcnJheSI9PT10LmtpbmQpe2lmKCJhcnJheSI9PT1lLmtpbmQmJiFLKHQuaXRlbVR5cGUsZS5pdGVtVHlwZSkmJigibnVtYmVyIiE9dHlwZW9mIHQuTnx8dC5OPT09ZS5OKSlyZXR1cm4gbnVsbH1lbHNle2lmKHQua2luZD09PWUua2luZClyZXR1cm4gbnVsbDtpZigidmFsdWUiPT09dC5raW5kKWZvcih2YXIgcj0wLG49SjtyPG4ubGVuZ3RoO3IrPTEpaWYoIUsobltyXSxlKSlyZXR1cm4gbnVsbH1yZXR1cm4iRXhwZWN0ZWQgIiskKHQpKyIgYnV0IGZvdW5kICIrJChlKSsiIGluc3RlYWQuIn12YXIgUT1pKGZ1bmN0aW9uKHQsZSl7dmFyIHI9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1LDFdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTUsMV0sYXF1YTpbMCwyNTUsMjU1LDFdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyLDFdLGF6dXJlOlsyNDAsMjU1LDI1NSwxXSxiZWlnZTpbMjQ1LDI0NSwyMjAsMV0sYmlzcXVlOlsyNTUsMjI4LDE5NiwxXSxibGFjazpbMCwwLDAsMV0sYmxhbmNoZWRhbG1vbmQ6WzI1NSwyMzUsMjA1LDFdLGJsdWU6WzAsMCwyNTUsMV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNiwxXSxicm93bjpbMTY1LDQyLDQyLDFdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzUsMV0sY2FkZXRibHVlOls5NSwxNTgsMTYwLDFdLGNoYXJ0cmV1c2U6WzEyNywyNTUsMCwxXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzAsMV0sY29yYWw6WzI1NSwxMjcsODAsMV0sY29ybmZsb3dlcmJsdWU6WzEwMCwxNDksMjM3LDFdLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMCwxXSxjcmltc29uOlsyMjAsMjAsNjAsMV0sY3lhbjpbMCwyNTUsMjU1LDFdLGRhcmtibHVlOlswLDAsMTM5LDFdLGRhcmtjeWFuOlswLDEzOSwxMzksMV0sZGFya2dvbGRlbnJvZDpbMTg0LDEzNCwxMSwxXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjksMV0sZGFya2dyZWVuOlswLDEwMCwwLDFdLGRhcmtncmV5OlsxNjksMTY5LDE2OSwxXSxkYXJra2hha2k6WzE4OSwxODMsMTA3LDFdLGRhcmttYWdlbnRhOlsxMzksMCwxMzksMV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0NywxXSxkYXJrb3JhbmdlOlsyNTUsMTQwLDAsMV0sZGFya29yY2hpZDpbMTUzLDUwLDIwNCwxXSxkYXJrcmVkOlsxMzksMCwwLDFdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyLDFdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDMsMV0sZGFya3NsYXRlYmx1ZTpbNzIsNjEsMTM5LDFdLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5LDFdLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5LDFdLGRhcmt0dXJxdW9pc2U6WzAsMjA2LDIwOSwxXSxkYXJrdmlvbGV0OlsxNDgsMCwyMTEsMV0sZGVlcHBpbms6WzI1NSwyMCwxNDcsMV0sZGVlcHNreWJsdWU6WzAsMTkxLDI1NSwxXSxkaW1ncmF5OlsxMDUsMTA1LDEwNSwxXSxkaW1ncmV5OlsxMDUsMTA1LDEwNSwxXSxkb2RnZXJibHVlOlszMCwxNDQsMjU1LDFdLGZpcmVicmljazpbMTc4LDM0LDM0LDFdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MCwxXSxmb3Jlc3RncmVlbjpbMzQsMTM5LDM0LDFdLGZ1Y2hzaWE6WzI1NSwwLDI1NSwxXSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwLDFdLGdob3N0d2hpdGU6WzI0OCwyNDgsMjU1LDFdLGdvbGQ6WzI1NSwyMTUsMCwxXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzIsMV0sZ3JheTpbMTI4LDEyOCwxMjgsMV0sZ3JlZW46WzAsMTI4LDAsMV0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDcsMV0sZ3JleTpbMTI4LDEyOCwxMjgsMV0saG9uZXlkZXc6WzI0MCwyNTUsMjQwLDFdLGhvdHBpbms6WzI1NSwxMDUsMTgwLDFdLGluZGlhbnJlZDpbMjA1LDkyLDkyLDFdLGluZGlnbzpbNzUsMCwxMzAsMV0saXZvcnk6WzI1NSwyNTUsMjQwLDFdLGtoYWtpOlsyNDAsMjMwLDE0MCwxXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTAsMV0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDUsMV0sbGF3bmdyZWVuOlsxMjQsMjUyLDAsMV0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNSwxXSxsaWdodGJsdWU6WzE3MywyMTYsMjMwLDFdLGxpZ2h0Y29yYWw6WzI0MCwxMjgsMTI4LDFdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTUsMV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwLDFdLGxpZ2h0Z3JheTpbMjExLDIxMSwyMTEsMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDQsMV0sbGlnaHRncmV5OlsyMTEsMjExLDIxMSwxXSxsaWdodHBpbms6WzI1NSwxODIsMTkzLDFdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMiwxXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwLDFdLGxpZ2h0c2t5Ymx1ZTpbMTM1LDIwNiwyNTAsMV0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1MywxXSxsaWdodHN0ZWVsYmx1ZTpbMTc2LDE5NiwyMjIsMV0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0LDFdLGxpbWU6WzAsMjU1LDAsMV0sbGltZWdyZWVuOls1MCwyMDUsNTAsMV0sbGluZW46WzI1MCwyNDAsMjMwLDFdLG1hZ2VudGE6WzI1NSwwLDI1NSwxXSxtYXJvb246WzEyOCwwLDAsMV0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzAsMV0sbWVkaXVtYmx1ZTpbMCwwLDIwNSwxXSxtZWRpdW1vcmNoaWQ6WzE4Niw4NSwyMTEsMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOSwxXSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExMywxXSxtZWRpdW1zbGF0ZWJsdWU6WzEyMywxMDQsMjM4LDFdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTQsMV0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0LDFdLG1lZGl1bXZpb2xldHJlZDpbMTk5LDIxLDEzMywxXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMiwxXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwLDFdLG1pc3R5cm9zZTpbMjU1LDIyOCwyMjUsMV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxLDFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3MywxXSxuYXZ5OlswLDAsMTI4LDFdLG9sZGxhY2U6WzI1MywyNDUsMjMwLDFdLG9saXZlOlsxMjgsMTI4LDAsMV0sb2xpdmVkcmFiOlsxMDcsMTQyLDM1LDFdLG9yYW5nZTpbMjU1LDE2NSwwLDFdLG9yYW5nZXJlZDpbMjU1LDY5LDAsMV0sb3JjaGlkOlsyMTgsMTEyLDIxNCwxXSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MCwxXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyLDFdLHBhbGV0dXJxdW9pc2U6WzE3NSwyMzgsMjM4LDFdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3LDFdLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzLDFdLHBlYWNocHVmZjpbMjU1LDIxOCwxODUsMV0scGVydTpbMjA1LDEzMyw2MywxXSxwaW5rOlsyNTUsMTkyLDIwMywxXSxwbHVtOlsyMjEsMTYwLDIyMSwxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMCwxXSxwdXJwbGU6WzEyOCwwLDEyOCwxXSxyZWJlY2NhcHVycGxlOlsxMDIsNTEsMTUzLDFdLHJlZDpbMjU1LDAsMCwxXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzLDFdLHJveWFsYmx1ZTpbNjUsMTA1LDIyNSwxXSxzYWRkbGVicm93bjpbMTM5LDY5LDE5LDFdLHNhbG1vbjpbMjUwLDEyOCwxMTQsMV0sc2FuZHlicm93bjpbMjQ0LDE2NCw5NiwxXSxzZWFncmVlbjpbNDYsMTM5LDg3LDFdLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOCwxXSxzaWVubmE6WzE2MCw4Miw0NSwxXSxzaWx2ZXI6WzE5MiwxOTIsMTkyLDFdLHNreWJsdWU6WzEzNSwyMDYsMjM1LDFdLHNsYXRlYmx1ZTpbMTA2LDkwLDIwNSwxXSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0LDFdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDQsMV0sc25vdzpbMjU1LDI1MCwyNTAsMV0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyNywxXSxzdGVlbGJsdWU6WzcwLDEzMCwxODAsMV0sdGFuOlsyMTAsMTgwLDE0MCwxXSx0ZWFsOlswLDEyOCwxMjgsMV0sdGhpc3RsZTpbMjE2LDE5MSwyMTYsMV0sdG9tYXRvOlsyNTUsOTksNzEsMV0sdHVycXVvaXNlOls2NCwyMjQsMjA4LDFdLHZpb2xldDpbMjM4LDEzMCwyMzgsMV0sd2hlYXQ6WzI0NSwyMjIsMTc5LDFdLHdoaXRlOlsyNTUsMjU1LDI1NSwxXSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NSwxXSx5ZWxsb3c6WzI1NSwyNTUsMCwxXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MCwxXX07ZnVuY3Rpb24gbih0KXtyZXR1cm4odD1NYXRoLnJvdW5kKHQpKTwwPzA6dD4yNTU/MjU1OnR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdDwwPzA6dD4xPzE6dH1mdW5jdGlvbiBhKHQpe3JldHVybiIlIj09PXRbdC5sZW5ndGgtMV0/bihwYXJzZUZsb2F0KHQpLzEwMCoyNTUpOm4ocGFyc2VJbnQodCkpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIiUiPT09dFt0Lmxlbmd0aC0xXT9pKHBhcnNlRmxvYXQodCkvMTAwKTppKHBhcnNlRmxvYXQodCkpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiByPDA/cis9MTpyPjEmJihyLT0xKSw2KnI8MT90KyhlLXQpKnIqNjoyKnI8MT9lOjMqcjwyP3QrKGUtdCkqKDIvMy1yKSo2OnR9dHJ5e2UucGFyc2VDU1NDb2xvcj1mdW5jdGlvbih0KXt2YXIgZSxpPXQucmVwbGFjZSgvIC9nLCIiKS50b0xvd2VyQ2FzZSgpO2lmKGkgaW4gcilyZXR1cm4gcltpXS5zbGljZSgpO2lmKCIjIj09PWlbMF0pcmV0dXJuIDQ9PT1pLmxlbmd0aD8oZT1wYXJzZUludChpLnN1YnN0cigxKSwxNikpPj0wJiZlPD00MDk1P1soMzg0MCZlKT4+NHwoMzg0MCZlKT4+OCwyNDAmZXwoMjQwJmUpPj40LDE1JmV8KDE1JmUpPDw0LDFdOm51bGw6Nz09PWkubGVuZ3RoJiYoZT1wYXJzZUludChpLnN1YnN0cigxKSwxNikpPj0wJiZlPD0xNjc3NzIxNT9bKDE2NzExNjgwJmUpPj4xNiwoNjUyODAmZSk+PjgsMjU1JmUsMV06bnVsbDt2YXIgbD1pLmluZGV4T2YoIigiKSxjPWkuaW5kZXhPZigiKSIpO2lmKC0xIT09bCYmYysxPT09aS5sZW5ndGgpe3ZhciB1PWkuc3Vic3RyKDAsbCksZj1pLnN1YnN0cihsKzEsYy0obCsxKSkuc3BsaXQoIiwiKSxoPTE7c3dpdGNoKHUpe2Nhc2UicmdiYSI6aWYoNCE9PWYubGVuZ3RoKXJldHVybiBudWxsO2g9byhmLnBvcCgpKTtjYXNlInJnYiI6cmV0dXJuIDMhPT1mLmxlbmd0aD9udWxsOlthKGZbMF0pLGEoZlsxXSksYShmWzJdKSxoXTtjYXNlImhzbGEiOmlmKDQhPT1mLmxlbmd0aClyZXR1cm4gbnVsbDtoPW8oZi5wb3AoKSk7Y2FzZSJoc2wiOmlmKDMhPT1mLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgcD0ocGFyc2VGbG9hdChmWzBdKSUzNjArMzYwKSUzNjAvMzYwLGQ9byhmWzFdKSxnPW8oZlsyXSksdj1nPD0uNT9nKihkKzEpOmcrZC1nKmQsbT0yKmctdjtyZXR1cm5bbigyNTUqcyhtLHYscCsxLzMpKSxuKDI1NSpzKG0sdixwKSksbigyNTUqcyhtLHYscC0xLzMpKSxoXTtkZWZhdWx0OnJldHVybiBudWxsfX1yZXR1cm4gbnVsbH19Y2F0Y2godCl7fX0pLnBhcnNlQ1NTQ29sb3IsdHQ9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49MSksdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPXIsdGhpcy5hPW59O3R0LnBhcnNlPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiB0dClyZXR1cm4gdDtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPVEodCk7aWYoZSlyZXR1cm4gbmV3IHR0KGVbMF0vMjU1KmVbM10sZVsxXS8yNTUqZVszXSxlWzJdLzI1NSplWzNdLGVbM10pfX19LHR0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudG9BcnJheSgpLGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4icmdiYSgiK01hdGgucm91bmQoZSkrIiwiK01hdGgucm91bmQocikrIiwiK01hdGgucm91bmQobikrIiwiK2krIikifSx0dC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXMucixlPXRoaXMuZyxyPXRoaXMuYixuPXRoaXMuYTtyZXR1cm4gMD09PW4/WzAsMCwwLDBdOlsyNTUqdC9uLDI1NSplL24sMjU1KnIvbixuXX0sdHQuYmxhY2s9bmV3IHR0KDAsMCwwLDEpLHR0LndoaXRlPW5ldyB0dCgxLDEsMSwxKSx0dC50cmFuc3BhcmVudD1uZXcgdHQoMCwwLDAsMCk7dmFyIGV0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNlbnNpdGl2aXR5PXQ/ZT8idmFyaWFudCI6ImNhc2UiOmU/ImFjY2VudCI6ImJhc2UiLHRoaXMubG9jYWxlPXIsdGhpcy5jb2xsYXRvcj1uZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSx7c2Vuc2l0aXZpdHk6dGhpcy5zZW5zaXRpdml0eSx1c2FnZToic2VhcmNoIn0pfTtldC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbGxhdG9yLmNvbXBhcmUodCxlKX0sZXQucHJvdG90eXBlLnJlc29sdmVkTG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlP3RoaXMubG9jYWxlOltdKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGV9O3ZhciBydD1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPVgsdGhpcy5sb2NhbGU9cix0aGlzLmNhc2VTZW5zaXRpdmU9dCx0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZT1lfTtmdW5jdGlvbiBudCh0LGUscixuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJnQ8PTI1NSYmIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiZlPD0yNTUmJiJudW1iZXIiPT10eXBlb2YgciYmcj49MCYmcjw9MjU1P3ZvaWQgMD09PW58fCJudW1iZXIiPT10eXBlb2YgbiYmbj49MCYmbjw9MT9udWxsOiJJbnZhbGlkIHJnYmEgdmFsdWUgWyIrW3QsZSxyLG5dLmpvaW4oIiwgIikrIl06ICdhJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iOiJJbnZhbGlkIHJnYmEgdmFsdWUgWyIrKCJudW1iZXIiPT10eXBlb2Ygbj9bdCxlLHIsbl06W3QsZSxyXSkuam9pbigiLCAiKSsiXTogJ3InLCAnZycsIGFuZCAnYicgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NS4ifWZ1bmN0aW9uIGl0KHQpe2lmKG51bGw9PT10KXJldHVybiBWO2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcTtpZigiYm9vbGVhbiI9PXR5cGVvZiB0KXJldHVybiBIO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gVTtpZih0IGluc3RhbmNlb2YgdHQpcmV0dXJuIEc7aWYodCBpbnN0YW5jZW9mIGV0KXJldHVybiBYO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pdChpW25dKTtpZihlKXtpZihlPT09YSljb250aW51ZTtlPVc7YnJlYWt9ZT1hfXJldHVybiBaKGV8fFcscil9cmV0dXJuIFl9cnQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIG9uZSBhcmd1bWVudC4iKTt2YXIgcj10WzFdO2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm4gZS5lcnJvcigiQ29sbGF0b3Igb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4iKTt2YXIgbj1lLnBhcnNlKHZvaWQgMCE9PXJbImNhc2Utc2Vuc2l0aXZlIl0mJnJbImNhc2Utc2Vuc2l0aXZlIl0sMSxIKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1lLnBhcnNlKHZvaWQgMCE9PXJbImRpYWNyaXRpYy1zZW5zaXRpdmUiXSYmclsiZGlhY3JpdGljLXNlbnNpdGl2ZSJdLDEsSCk7aWYoIWkpcmV0dXJuIG51bGw7dmFyIGE9bnVsbDtyZXR1cm4gci5sb2NhbGUmJiEoYT1lLnBhcnNlKHIubG9jYWxlLDEscSkpP251bGw6bmV3IHJ0KG4saSxhKX0scnQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZXQodGhpcy5jYXNlU2Vuc2l0aXZlLmV2YWx1YXRlKHQpLHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlLmV2YWx1YXRlKHQpLHRoaXMubG9jYWxlP3RoaXMubG9jYWxlLmV2YWx1YXRlKHQpOm51bGwpfSxydC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5jYXNlU2Vuc2l0aXZlKSx0KHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlKSx0aGlzLmxvY2FsZSYmdCh0aGlzLmxvY2FsZSl9LHJ0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0scnQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0WyJjYXNlLXNlbnNpdGl2ZSJdPXRoaXMuY2FzZVNlbnNpdGl2ZS5zZXJpYWxpemUoKSx0WyJkaWFjcml0aWMtc2Vuc2l0aXZlIl09dGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuc2VyaWFsaXplKCksdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksWyJjb2xsYXRvciIsdF19O3ZhciBhdD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMudmFsdWU9ZX07YXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIidsaXRlcmFsJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2lmKCFmdW5jdGlvbiB0KGUpe2lmKG51bGw9PT1lKXJldHVybiEwO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4hMDtpZigiYm9vbGVhbiI9PXR5cGVvZiBlKXJldHVybiEwO2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4hMDtpZihlIGluc3RhbmNlb2YgdHQpcmV0dXJuITA7aWYoZSBpbnN0YW5jZW9mIGV0KXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIXQobltyXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IodmFyIGkgaW4gZSlpZighdChlW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0odFsxXSkpcmV0dXJuIGUuZXJyb3IoImludmFsaWQgdmFsdWUiKTt2YXIgcj10WzFdLG49aXQociksaT1lLmV4cGVjdGVkVHlwZTtyZXR1cm4iYXJyYXkiIT09bi5raW5kfHwwIT09bi5OfHwhaXx8ImFycmF5IiE9PWkua2luZHx8Im51bWJlciI9PXR5cGVvZiBpLk4mJjAhPT1pLk58fChuPWkpLG5ldyBhdChuLHIpfSxhdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sYXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sYXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt0aGlzLnZhbHVlXX0sYXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiJhcnJheSI9PT10aGlzLnR5cGUua2luZHx8Im9iamVjdCI9PT10aGlzLnR5cGUua2luZD9bImxpdGVyYWwiLHRoaXMudmFsdWVdOnRoaXMudmFsdWUgaW5zdGFuY2VvZiB0dD9bInJnYmEiXS5jb25jYXQodGhpcy52YWx1ZS50b0FycmF5KCkpOnRoaXMudmFsdWV9O3ZhciBvdD1mdW5jdGlvbih0KXt0aGlzLm5hbWU9IkV4cHJlc3Npb25FdmFsdWF0aW9uRXJyb3IiLHRoaXMubWVzc2FnZT10fTtvdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZX07dmFyIHN0PXtzdHJpbmc6cSxudW1iZXI6VSxib29sZWFuOkgsb2JqZWN0Oll9LGx0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2x0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO2Zvcih2YXIgcj10WzBdLG49c3Rbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLFcpO2lmKCFvKXJldHVybiBudWxsO2kucHVzaChvKX1yZXR1cm4gbmV3IGx0KG4saSl9LGx0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJncy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLmFyZ3NbZV0uZXZhbHVhdGUodCk7aWYoIUsodGhpcy50eXBlLGl0KHIpKSlyZXR1cm4gcjtpZihlPT09dGhpcy5hcmdzLmxlbmd0aC0xKXRocm93IG5ldyBvdCgiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSAiKyQodGhpcy50eXBlKSsiLCBidXQgZm91bmQgIiskKGl0KHIpKSsiIGluc3RlYWQuIil9cmV0dXJuIG51bGx9LGx0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGx0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sbHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblt0aGlzLnR5cGUua2luZF0uY29uY2F0KHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSl9O3ZhciBjdD17c3RyaW5nOnEsbnVtYmVyOlUsYm9vbGVhbjpIfSx1dD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuaW5wdXQ9ZX07dXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyfHx0Lmxlbmd0aD40KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAxLCAyLCBvciAzIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcixuO2lmKHQubGVuZ3RoPjIpe3ZhciBpPXRbMV07aWYoInN0cmluZyIhPXR5cGVvZiBpfHwhKGkgaW4gY3QpKXJldHVybiBlLmVycm9yKCdUaGUgaXRlbSB0eXBlIGFyZ3VtZW50IG9mICJhcnJheSIgbXVzdCBiZSBvbmUgb2Ygc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4nLDEpO3I9Y3RbaV19ZWxzZSByPVc7aWYodC5sZW5ndGg+Myl7aWYoIm51bWJlciIhPXR5cGVvZiB0WzJdfHx0WzJdPDB8fHRbMl0hPT1NYXRoLmZsb29yKHRbMl0pKXJldHVybiBlLmVycm9yKCdUaGUgbGVuZ3RoIGFyZ3VtZW50IHRvICJhcnJheSIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCcsMik7bj10WzJdfXZhciBhPVoocixuKSxvPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLFcpO3JldHVybiBvP25ldyB1dChhLG8pOm51bGx9LHV0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKEsodGhpcy50eXBlLGl0KGUpKSl0aHJvdyBuZXcgb3QoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgIiskKHRoaXMudHlwZSkrIiwgYnV0IGZvdW5kICIrJChpdChlKSkrIiBpbnN0ZWFkLiIpO3JldHVybiBlfSx1dC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LHV0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dC5wb3NzaWJsZU91dHB1dHMoKX0sdXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiYXJyYXkiXSxlPXRoaXMudHlwZS5pdGVtVHlwZTtpZigic3RyaW5nIj09PWUua2luZHx8Im51bWJlciI9PT1lLmtpbmR8fCJib29sZWFuIj09PWUua2luZCl7dC5wdXNoKGUua2luZCk7dmFyIHI9dGhpcy50eXBlLk47Im51bWJlciI9PXR5cGVvZiByJiZ0LnB1c2gocil9cmV0dXJuIHQucHVzaCh0aGlzLmlucHV0LnNlcmlhbGl6ZSgpKSx0fTt2YXIgZnQ9eyJ0by1udW1iZXIiOlUsInRvLWNvbG9yIjpHfSxodD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtodC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTtmb3IodmFyIHI9dFswXSxuPWZ0W3JdLGk9W10sYT0xO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1lLnBhcnNlKHRbYV0sYSxXKTtpZighbylyZXR1cm4gbnVsbDtpLnB1c2gobyl9cmV0dXJuIG5ldyBodChuLGkpfSxodC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7aWYoImNvbG9yIj09PXRoaXMudHlwZS5raW5kKXtmb3IodmFyIGUscixuPTAsaT10aGlzLmFyZ3M7bjxpLmxlbmd0aDtuKz0xKWlmKHI9bnVsbCwic3RyaW5nIj09dHlwZW9mKGU9aVtuXS5ldmFsdWF0ZSh0KSkpe3ZhciBhPXQucGFyc2VDb2xvcihlKTtpZihhKXJldHVybiBhfWVsc2UgaWYoQXJyYXkuaXNBcnJheShlKSYmIShyPWUubGVuZ3RoPDN8fGUubGVuZ3RoPjQ/IkludmFsaWQgcmJnYSB2YWx1ZSAiK0pTT04uc3RyaW5naWZ5KGUpKyI6IGV4cGVjdGVkIGFuIGFycmF5IGNvbnRhaW5pbmcgZWl0aGVyIHRocmVlIG9yIGZvdXIgbnVtZXJpYyB2YWx1ZXMuIjpudChlWzBdLGVbMV0sZVsyXSxlWzNdKSkpcmV0dXJuIG5ldyB0dChlWzBdLzI1NSxlWzFdLzI1NSxlWzJdLzI1NSxlWzNdKTt0aHJvdyBuZXcgb3Qocnx8IkNvdWxkIG5vdCBwYXJzZSBjb2xvciBmcm9tIHZhbHVlICciKygic3RyaW5nIj09dHlwZW9mIGU/ZTpKU09OLnN0cmluZ2lmeShlKSkrIiciKX1mb3IodmFyIG89bnVsbCxzPTAsbD10aGlzLmFyZ3M7czxsLmxlbmd0aDtzKz0xKWlmKG51bGwhPT0obz1sW3NdLmV2YWx1YXRlKHQpKSl7dmFyIGM9TnVtYmVyKG8pO2lmKCFpc05hTihjKSlyZXR1cm4gY310aHJvdyBuZXcgb3QoIkNvdWxkIG5vdCBjb252ZXJ0ICIrSlNPTi5zdHJpbmdpZnkobykrIiB0byBudW1iZXIuIil9LGh0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGh0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0saHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsidG8tIit0aGlzLnR5cGUua2luZF07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pLHR9O3ZhciBwdD1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl0sZHQ9ZnVuY3Rpb24oKXt0aGlzLl9wYXJzZUNvbG9yQ2FjaGU9e319O2R0LnByb3RvdHlwZS5pZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmUmJiJpZCJpbiB0aGlzLmZlYXR1cmU/dGhpcy5mZWF0dXJlLmlkOm51bGx9LGR0LnByb3RvdHlwZS5nZW9tZXRyeVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlPyJudW1iZXIiPT10eXBlb2YgdGhpcy5mZWF0dXJlLnR5cGU/cHRbdGhpcy5mZWF0dXJlLnR5cGVdOnRoaXMuZmVhdHVyZS50eXBlOm51bGx9LGR0LnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLnByb3BlcnRpZXN8fHt9fSxkdC5wcm90b3R5cGUucGFyc2VDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF07cmV0dXJuIGV8fChlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XT10dC5wYXJzZSh0KSksZX07dmFyIGd0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuX2V2YWx1YXRlPXIsdGhpcy5hcmdzPW59O2Z1bmN0aW9uIHZ0KHQpe2lmKHQgaW5zdGFuY2VvZiBndCl7aWYoImdldCI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKCJoYXMiPT09dC5uYW1lJiYxPT09dC5hcmdzLmxlbmd0aClyZXR1cm4hMTtpZigicHJvcGVydGllcyI9PT10Lm5hbWV8fCJnZW9tZXRyeS10eXBlIj09PXQubmFtZXx8ImlkIj09PXQubmFtZSlyZXR1cm4hMTtpZigvXmZpbHRlci0vLnRlc3QodC5uYW1lKSlyZXR1cm4hMX12YXIgZT0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoZnVuY3Rpb24odCl7ZSYmIXZ0KHQpJiYoZT0hMSl9KSxlfWZ1bmN0aW9uIG10KHQsZSl7aWYodCBpbnN0YW5jZW9mIGd0JiZlLmluZGV4T2YodC5uYW1lKT49MClyZXR1cm4hMTt2YXIgcj0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoZnVuY3Rpb24odCl7ciYmIW10KHQsZSkmJihyPSExKX0pLHJ9Z3QucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ldmFsdWF0ZSh0LHRoaXMuYXJncyl9LGd0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGd0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0sZ3QucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblt0aGlzLm5hbWVdLmNvbmNhdCh0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpfSxndC5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj1ndC5kZWZpbml0aW9uc1tyXTtpZighbilyZXR1cm4gZS5lcnJvcignVW5rbm93biBleHByZXNzaW9uICInK3IrJyIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCk7Zm9yKHZhciBpPUFycmF5LmlzQXJyYXkobik/blswXTpuLnR5cGUsYT1BcnJheS5pc0FycmF5KG4pP1tbblsxXSxuWzJdXV06bi5vdmVybG9hZHMsbz1hLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3JldHVybiFBcnJheS5pc0FycmF5KHIpfHxyLmxlbmd0aD09PXQubGVuZ3RoLTF9KSxzPVtdLGw9MTtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dFtsXSx1PXZvaWQgMDtpZigxPT09by5sZW5ndGgpe3ZhciBmPW9bMF1bMF07dT1BcnJheS5pc0FycmF5KGYpP2ZbbC0xXTpmLnR5cGV9dmFyIGg9ZS5wYXJzZShjLDErcy5sZW5ndGgsdSk7aWYoIWgpcmV0dXJuIG51bGw7cy5wdXNoKGgpfWZvcih2YXIgcD1udWxsLGQ9MCxnPW87ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdLG09dlswXSx5PXZbMV07aWYocD1uZXcgeHQoZS5yZWdpc3RyeSxlLnBhdGgsbnVsbCxlLnNjb3BlKSxBcnJheS5pc0FycmF5KG0pJiZtLmxlbmd0aCE9PXMubGVuZ3RoKXAuZXJyb3IoIkV4cGVjdGVkICIrbS5sZW5ndGgrIiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiK3MubGVuZ3RoKyIgaW5zdGVhZC4iKTtlbHNle2Zvcih2YXIgeD0wO3g8cy5sZW5ndGg7eCsrKXt2YXIgYj1BcnJheS5pc0FycmF5KG0pP21beF06bS50eXBlLF89c1t4XTtwLmNvbmNhdCh4KzEpLmNoZWNrU3VidHlwZShiLF8udHlwZSl9aWYoMD09PXAuZXJyb3JzLmxlbmd0aClyZXR1cm4gbmV3IGd0KHIsaSx5LHMpfX1pZigxPT09by5sZW5ndGgpZS5lcnJvcnMucHVzaC5hcHBseShlLmVycm9ycyxwLmVycm9ycyk7ZWxzZXt2YXIgdz0oby5sZW5ndGg/bzphKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIGU9dFswXSxBcnJheS5pc0FycmF5KGUpPyIoIitlLm1hcCgkKS5qb2luKCIsICIpKyIpIjoiKCIrJChlLnR5cGUpKyIuLi4pIn0pLmpvaW4oIiB8ICIpLGs9cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICQodC50eXBlKX0pLmpvaW4oIiwgIik7ZS5lcnJvcigiRXhwZWN0ZWQgYXJndW1lbnRzIG9mIHR5cGUgIit3KyIsIGJ1dCBmb3VuZCAoIitrKyIpIGluc3RlYWQuIil9cmV0dXJuIG51bGx9LGd0LnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGd0LmRlZmluaXRpb25zPWUsZSl0W3JdPWd0fTt2YXIgeXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9ZS50eXBlLHRoaXMubmFtZT10LHRoaXMuYm91bmRFeHByZXNzaW9uPWV9O3l0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RofHwic3RyaW5nIiE9dHlwZW9mIHRbMV0pcmV0dXJuIGUuZXJyb3IoIid2YXInIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgc3RyaW5nIGxpdGVyYWwgYXJndW1lbnQuIik7dmFyIHI9dFsxXTtyZXR1cm4gZS5zY29wZS5oYXMocik/bmV3IHl0KHIsZS5zY29wZS5nZXQocikpOmUuZXJyb3IoJ1Vua25vd24gdmFyaWFibGUgIicrcisnIi4gTWFrZSBzdXJlICInK3IrJyIgaGFzIGJlZW4gYm91bmQgaW4gYW4gZW5jbG9zaW5nICJsZXQiIGV4cHJlc3Npb24gYmVmb3JlIHVzaW5nIGl0LicsMSl9LHl0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ib3VuZEV4cHJlc3Npb24uZXZhbHVhdGUodCl9LHl0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24oKXt9LHl0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0seXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsidmFyIix0aGlzLm5hbWVdfTt2YXIgeHQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2b2lkIDA9PT1lJiYoZT1bXSksdm9pZCAwPT09biYmKG49bmV3IGopLHZvaWQgMD09PWkmJihpPVtdKSx0aGlzLnJlZ2lzdHJ5PXQsdGhpcy5wYXRoPWUsdGhpcy5rZXk9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QrIl0ifSkuam9pbigiIiksdGhpcy5zY29wZT1uLHRoaXMuZXJyb3JzPWksdGhpcy5leHBlY3RlZFR5cGU9cn07ZnVuY3Rpb24gYnQodCxlKXtmb3IodmFyIHIsbixpPTAsYT10Lmxlbmd0aC0xLG89MDtpPD1hOyl7aWYocj10W289TWF0aC5mbG9vcigoaSthKS8yKV0sbj10W28rMV0sZT09PXJ8fGU+ciYmZTxuKXJldHVybiBvO2lmKHI8ZSlpPW8rMTtlbHNle2lmKCEocj5lKSl0aHJvdyBuZXcgb3QoIklucHV0IGlzIG5vdCBhIG51bWJlci4iKTthPW8tMX19cmV0dXJuIE1hdGgubWF4KG8tMSwwKX14dC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLGU/dGhpcy5jb25jYXQoZSxyLG4pLl9wYXJzZSh0LGkpOnRoaXMuX3BhcnNlKHQsaSl9LHh0LnByb3RvdHlwZS5fcGFyc2U9ZnVuY3Rpb24odCxlKXtpZihudWxsIT09dCYmInN0cmluZyIhPXR5cGVvZiB0JiYiYm9vbGVhbiIhPXR5cGVvZiB0JiYibnVtYmVyIiE9dHlwZW9mIHR8fCh0PVsibGl0ZXJhbCIsdF0pLEFycmF5LmlzQXJyYXkodCkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcignRXhwZWN0ZWQgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbXV0uJyk7dmFyIHI9dFswXTtpZigic3RyaW5nIiE9dHlwZW9mIHIpcmV0dXJuIHRoaXMuZXJyb3IoIkV4cHJlc3Npb24gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBidXQgZm91bmQgIit0eXBlb2YgcisnIGluc3RlYWQuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCksbnVsbDt2YXIgbj10aGlzLnJlZ2lzdHJ5W3JdO2lmKG4pe3ZhciBpPW4ucGFyc2UodCx0aGlzKTtpZighaSlyZXR1cm4gbnVsbDtpZih0aGlzLmV4cGVjdGVkVHlwZSl7dmFyIGE9dGhpcy5leHBlY3RlZFR5cGUsbz1pLnR5cGU7aWYoInN0cmluZyIhPT1hLmtpbmQmJiJudW1iZXIiIT09YS5raW5kJiYiYm9vbGVhbiIhPT1hLmtpbmQmJiJvYmplY3QiIT09YS5raW5kfHwidmFsdWUiIT09by5raW5kKWlmKCJhcnJheSI9PT1hLmtpbmQmJiJ2YWx1ZSI9PT1vLmtpbmQpZS5vbWl0VHlwZUFubm90YXRpb25zfHwoaT1uZXcgdXQoYSxpKSk7ZWxzZSBpZigiY29sb3IiIT09YS5raW5kfHwidmFsdWUiIT09by5raW5kJiYic3RyaW5nIiE9PW8ua2luZCl7aWYodGhpcy5jaGVja1N1YnR5cGUodGhpcy5leHBlY3RlZFR5cGUsaS50eXBlKSlyZXR1cm4gbnVsbH1lbHNlIGUub21pdFR5cGVBbm5vdGF0aW9uc3x8KGk9bmV3IGh0KGEsW2ldKSk7ZWxzZSBlLm9taXRUeXBlQW5ub3RhdGlvbnN8fChpPW5ldyBsdChhLFtpXSkpfWlmKCEoaSBpbnN0YW5jZW9mIGF0KSYmZnVuY3Rpb24gdChlKXtpZihlIGluc3RhbmNlb2YgeXQpcmV0dXJuIHQoZS5ib3VuZEV4cHJlc3Npb24pO2lmKGUgaW5zdGFuY2VvZiBndCYmImVycm9yIj09PWUubmFtZSlyZXR1cm4hMTtpZihlIGluc3RhbmNlb2YgcnQpcmV0dXJuITE7dmFyIHI9ZSBpbnN0YW5jZW9mIGh0fHxlIGluc3RhbmNlb2YgbHR8fGUgaW5zdGFuY2VvZiB1dCxuPSEwO3JldHVybiBlLmVhY2hDaGlsZChmdW5jdGlvbihlKXtuPXI/biYmdChlKTpuJiZlIGluc3RhbmNlb2YgYXR9KSwhIW4mJih2dChlKSYmbXQoZSxbInpvb20iLCJoZWF0bWFwLWRlbnNpdHkiLCJsaW5lLXByb2dyZXNzIiwiaXMtc3VwcG9ydGVkLXNjcmlwdCJdKSl9KGkpKXt2YXIgcz1uZXcgZHQ7dHJ5e2k9bmV3IGF0KGkudHlwZSxpLmV2YWx1YXRlKHMpKX1jYXRjaCh0KXtyZXR1cm4gdGhpcy5lcnJvcih0Lm1lc3NhZ2UpLG51bGx9fXJldHVybiBpfXJldHVybiB0aGlzLmVycm9yKCdVbmtub3duIGV4cHJlc3Npb24gIicrcisnIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbLi4uXV0uJywwKX1yZXR1cm4gdm9pZCAwPT09dD90aGlzLmVycm9yKCIndW5kZWZpbmVkJyB2YWx1ZSBpbnZhbGlkLiBVc2UgbnVsbCBpbnN0ZWFkLiIpOiJvYmplY3QiPT10eXBlb2YgdD90aGlzLmVycm9yKCdCYXJlIG9iamVjdHMgaW52YWxpZC4gVXNlIFsibGl0ZXJhbCIsIHsuLi59XSBpbnN0ZWFkLicpOnRoaXMuZXJyb3IoIkV4cGVjdGVkIGFuIGFycmF5LCBidXQgZm91bmQgIit0eXBlb2YgdCsiIGluc3RlYWQuIil9LHh0LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSJudW1iZXIiPT10eXBlb2YgdD90aGlzLnBhdGguY29uY2F0KHQpOnRoaXMucGF0aCxpPXI/dGhpcy5zY29wZS5jb25jYXQocik6dGhpcy5zY29wZTtyZXR1cm4gbmV3IHh0KHRoaXMucmVnaXN0cnksbixlfHxudWxsLGksdGhpcy5lcnJvcnMpfSx4dC5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTt2YXIgbj0iIit0aGlzLmtleStlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdCsiXSJ9KS5qb2luKCIiKTt0aGlzLmVycm9ycy5wdXNoKG5ldyBOKG4sdCkpfSx4dC5wcm90b3R5cGUuY2hlY2tTdWJ0eXBlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Syh0LGUpO3JldHVybiByJiZ0aGlzLmVycm9yKHIpLHJ9O3ZhciBfdD1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5pbnB1dD1lLHRoaXMubGFiZWxzPVtdLHRoaXMub3V0cHV0cz1bXTtmb3IodmFyIG49MCxpPXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YVswXSxzPWFbMV07dGhpcy5sYWJlbHMucHVzaChvKSx0aGlzLm91dHB1dHMucHVzaChzKX19O2Z1bmN0aW9uIHd0KHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9X3QucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzFdLG49dC5zbGljZSgyKTtpZih0Lmxlbmd0aC0xPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuIik7aWYoIShyPWUucGFyc2UociwxLFUpKSlyZXR1cm4gbnVsbDt2YXIgaT1bXSxhPW51bGw7ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYoYT1lLmV4cGVjdGVkVHlwZSksbi51bnNoaWZ0KC0xLzApO2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bys9Mil7dmFyIHM9bltvXSxsPW5bbysxXSxjPW8rMSx1PW8rMjtpZigibnVtYmVyIiE9dHlwZW9mIHMpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsYyk7aWYoaS5sZW5ndGgmJmlbaS5sZW5ndGgtMV1bMF0+PXMpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsYyk7dmFyIGY9ZS5wYXJzZShsLHUsYSk7aWYoIWYpcmV0dXJuIG51bGw7YT1hfHxmLnR5cGUsaS5wdXNoKFtzLGZdKX1yZXR1cm4gbmV3IF90KGEscixpKX0sX3QucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFiZWxzLHI9dGhpcy5vdXRwdXRzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgbj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKG48PWVbMF0pcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIGk9ZS5sZW5ndGg7cmV0dXJuIG4+PWVbaS0xXT9yW2ktMV0uZXZhbHVhdGUodCk6cltidChlLG4pXS5ldmFsdWF0ZSh0KX0sX3QucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV0pfSxfdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMub3V0cHV0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LF90LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJzdGVwIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxlPTA7ZTx0aGlzLmxhYmVscy5sZW5ndGg7ZSsrKWU+MCYmdC5wdXNoKHRoaXMubGFiZWxzW2VdKSx0LnB1c2godGhpcy5vdXRwdXRzW2VdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gdH07dmFyIGt0PU9iamVjdC5mcmVlemUoe251bWJlcjp3dCxjb2xvcjpmdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyB0dCh3dCh0LnIsZS5yLHIpLHd0KHQuZyxlLmcsciksd3QodC5iLGUuYixyKSx3dCh0LmEsZS5hLHIpKX0sYXJyYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiB3dCh0LGVbbl0scil9KX19KSxUdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnR5cGU9dCx0aGlzLmludGVycG9sYXRpb249ZSx0aGlzLmlucHV0PXIsdGhpcy5sYWJlbHM9W10sdGhpcy5vdXRwdXRzPVtdO2Zvcih2YXIgaT0wLGE9bjtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vWzBdLGw9b1sxXTt0aGlzLmxhYmVscy5wdXNoKHMpLHRoaXMub3V0cHV0cy5wdXNoKGwpfX07ZnVuY3Rpb24gQXQodCxlLHIsbil7dmFyIGk9bi1yLGE9dC1yO3JldHVybiAwPT09aT8wOjE9PT1lP2EvaTooTWF0aC5wb3coZSxhKS0xKS8oTWF0aC5wb3coZSxpKS0xKX1UdC5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTA7aWYoImV4cG9uZW50aWFsIj09PXQubmFtZSlpPUF0KGUsdC5iYXNlLHIsbik7ZWxzZSBpZigibGluZWFyIj09PXQubmFtZSlpPUF0KGUsMSxyLG4pO2Vsc2UgaWYoImN1YmljLWJlemllciI9PT10Lm5hbWUpe3ZhciBvPXQuY29udHJvbFBvaW50cztpPW5ldyBhKG9bMF0sb1sxXSxvWzJdLG9bM10pLnNvbHZlKEF0KGUsMSxyLG4pKX1yZXR1cm4gaX0sVHQucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzFdLG49dFsyXSxpPXQuc2xpY2UoMyk7aWYoIUFycmF5LmlzQXJyYXkocil8fDA9PT1yLmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gaW50ZXJwb2xhdGlvbiB0eXBlIGV4cHJlc3Npb24uIiwxKTtpZigibGluZWFyIj09PXJbMF0pcj17bmFtZToibGluZWFyIn07ZWxzZSBpZigiZXhwb25lbnRpYWwiPT09clswXSl7dmFyIGE9clsxXTtpZigibnVtYmVyIiE9dHlwZW9mIGEpcmV0dXJuIGUuZXJyb3IoIkV4cG9uZW50aWFsIGludGVycG9sYXRpb24gcmVxdWlyZXMgYSBudW1lcmljIGJhc2UuIiwxLDEpO3I9e25hbWU6ImV4cG9uZW50aWFsIixiYXNlOmF9fWVsc2V7aWYoImN1YmljLWJlemllciIhPT1yWzBdKXJldHVybiBlLmVycm9yKCJVbmtub3duIGludGVycG9sYXRpb24gdHlwZSAiK1N0cmluZyhyWzBdKSwxLDApO3ZhciBvPXIuc2xpY2UoMSk7aWYoNCE9PW8ubGVuZ3RofHxvLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQ+MX0pKXJldHVybiBlLmVycm9yKCJDdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBmb3VyIG51bWVyaWMgYXJndW1lbnRzIHdpdGggdmFsdWVzIGJldHdlZW4gMCBhbmQgMS4iLDEpO3I9e25hbWU6ImN1YmljLWJlemllciIsY29udHJvbFBvaW50czpvfX1pZih0Lmxlbmd0aC0xPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuIik7aWYoIShuPWUucGFyc2UobiwyLFUpKSlyZXR1cm4gbnVsbDt2YXIgcz1bXSxsPW51bGw7ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYobD1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBjPTA7YzxpLmxlbmd0aDtjKz0yKXt2YXIgdT1pW2NdLGY9aVtjKzFdLGg9YyszLHA9Yys0O2lmKCJudW1iZXIiIT10eXBlb2YgdSlyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsaCk7aWYocy5sZW5ndGgmJnNbcy5sZW5ndGgtMV1bMF0+PXUpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgImludGVycG9sYXRlIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLGgpO3ZhciBkPWUucGFyc2UoZixwLGwpO2lmKCFkKXJldHVybiBudWxsO2w9bHx8ZC50eXBlLHMucHVzaChbdSxkXSl9cmV0dXJuIm51bWJlciI9PT1sLmtpbmR8fCJjb2xvciI9PT1sLmtpbmR8fCJhcnJheSI9PT1sLmtpbmQmJiJudW1iZXIiPT09bC5pdGVtVHlwZS5raW5kJiYibnVtYmVyIj09dHlwZW9mIGwuTj9uZXcgVHQobCxyLG4scyk6ZS5lcnJvcigiVHlwZSAiKyQobCkrIiBpcyBub3QgaW50ZXJwb2xhdGFibGUuIil9LFR0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhYmVscyxyPXRoaXMub3V0cHV0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIG49dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihuPD1lWzBdKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBpPWUubGVuZ3RoO2lmKG4+PWVbaS0xXSlyZXR1cm4gcltpLTFdLmV2YWx1YXRlKHQpO3ZhciBhPWJ0KGUsbiksbz1lW2FdLHM9ZVthKzFdLGw9VHQuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb24sbixvLHMpLGM9clthXS5ldmFsdWF0ZSh0KSx1PXJbYSsxXS5ldmFsdWF0ZSh0KTtyZXR1cm4ga3RbdGhpcy50eXBlLmtpbmQudG9Mb3dlckNhc2UoKV0oYyx1LGwpfSxUdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCk7Zm9yKHZhciBlPTAscj10aGlzLm91dHB1dHM7ZTxyLmxlbmd0aDtlKz0xKXQocltlXSl9LFR0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5vdXRwdXRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sVHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bImludGVycG9sYXRlIiwibGluZWFyIj09PXRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lP1sibGluZWFyIl06ImV4cG9uZW50aWFsIj09PXRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lPzE9PT10aGlzLmludGVycG9sYXRpb24uYmFzZT9bImxpbmVhciJdOlsiZXhwb25lbnRpYWwiLHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlXTpbImN1YmljLWJlemllciJdLmNvbmNhdCh0aGlzLmludGVycG9sYXRpb24uY29udHJvbFBvaW50cyksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0sZT0wO2U8dGhpcy5sYWJlbHMubGVuZ3RoO2UrKyl0LnB1c2godGhpcy5sYWJlbHNbZV0sdGhpcy5vdXRwdXRzW2VdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gdH07dmFyIE10PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O010LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByPW51bGwsbj1lLmV4cGVjdGVkVHlwZTtuJiYidmFsdWUiIT09bi5raW5kJiYocj1uKTtmb3IodmFyIGk9W10sYT0wLG89dC5zbGljZSgxKTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1lLnBhcnNlKHMsMStpLmxlbmd0aCxyLHZvaWQgMCx7b21pdFR5cGVBbm5vdGF0aW9uczohMH0pO2lmKCFsKXJldHVybiBudWxsO3I9cnx8bC50eXBlLGkucHVzaChsKX12YXIgYz1uJiZpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIEsobix0LnR5cGUpfSk7cmV0dXJuIG5ldyBNdChjP1c6cixpKX0sTXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLHI9MCxuPXRoaXMuYXJncztyPG4ubGVuZ3RoJiZudWxsPT09KGU9bltyXS5ldmFsdWF0ZSh0KSk7cis9MSk7cmV0dXJuIGV9LE10LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LE10LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sTXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiY29hbGVzY2UiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSksdH07dmFyIFN0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWUudHlwZSx0aGlzLmJpbmRpbmdzPVtdLmNvbmNhdCh0KSx0aGlzLnJlc3VsdD1lfTtTdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzdWx0LmV2YWx1YXRlKHQpfSxTdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpdChyW2VdWzFdKTt0KHRoaXMucmVzdWx0KX0sU3QucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw0KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTtmb3IodmFyIHI9W10sbj0xO248dC5sZW5ndGgtMTtuKz0yKXt2YXIgaT10W25dO2lmKCJzdHJpbmciIT10eXBlb2YgaSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgc3RyaW5nLCBidXQgZm91bmQgIit0eXBlb2YgaSsiIGluc3RlYWQuIixuKTtpZigvW15hLXpBLVowLTlfXS8udGVzdChpKSlyZXR1cm4gZS5lcnJvcigiVmFyaWFibGUgbmFtZXMgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgJ18nLiIsbik7dmFyIGE9ZS5wYXJzZSh0W24rMV0sbisxKTtpZighYSlyZXR1cm4gbnVsbDtyLnB1c2goW2ksYV0pfXZhciBvPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLHZvaWQgMCxyKTtyZXR1cm4gbz9uZXcgU3QocixvKTpudWxsfSxTdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVzdWx0LnBvc3NpYmxlT3V0cHV0cygpfSxTdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsibGV0Il0sZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTt0LnB1c2goaSxhLnNlcmlhbGl6ZSgpKX1yZXR1cm4gdC5wdXNoKHRoaXMucmVzdWx0LnNlcmlhbGl6ZSgpKSx0fTt2YXIgRXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuaW5kZXg9ZSx0aGlzLmlucHV0PXJ9O0V0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxVKSxuPWUucGFyc2UodFsyXSwyLFooZS5leHBlY3RlZFR5cGV8fFcpKTtpZighcnx8IW4pcmV0dXJuIG51bGw7dmFyIGk9bi50eXBlO3JldHVybiBuZXcgRXQoaS5pdGVtVHlwZSxyLG4pfSxFdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmRleC5ldmFsdWF0ZSh0KSxyPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoZTwwKXRocm93IG5ldyBvdCgiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgPCAwLiIpO2lmKGU+PXIubGVuZ3RoKXRocm93IG5ldyBvdCgiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgPiAiKyhyLmxlbmd0aC0xKSsiLiIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBvdCgiQXJyYXkgaW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyLCBidXQgZm91bmQgIitlKyIgaW5zdGVhZC4iKTtyZXR1cm4gcltlXX0sRXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5kZXgpLHQodGhpcy5pbnB1dCl9LEV0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0sRXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiYXQiLHRoaXMuaW5kZXguc2VyaWFsaXplKCksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV19O3ZhciBDdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5pbnB1dFR5cGU9dCx0aGlzLnR5cGU9ZSx0aGlzLmlucHV0PXIsdGhpcy5jYXNlcz1uLHRoaXMub3V0cHV0cz1pLHRoaXMub3RoZXJ3aXNlPWF9O0N0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYodC5sZW5ndGglMiE9MSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByLG47ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYobj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBpPXt9LGE9W10sbz0yO288dC5sZW5ndGgtMTtvKz0yKXt2YXIgcz10W29dLGw9dFtvKzFdO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7dmFyIGM9ZS5jb25jYXQobyk7aWYoMD09PXMubGVuZ3RoKXJldHVybiBjLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLiIpO2Zvcih2YXIgdT0wLGY9czt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07aWYoIm51bWJlciIhPXR5cGVvZiBoJiYic3RyaW5nIiE9dHlwZW9mIGgpcmV0dXJuIGMuZXJyb3IoIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBudW1iZXJzIG9yIHN0cmluZ3MuIik7aWYoIm51bWJlciI9PXR5cGVvZiBoJiZNYXRoLmFicyhoKT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUilyZXR1cm4gYy5lcnJvcigiQnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXJzIG5vIGxhcmdlciB0aGFuICIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIrIi4iKTtpZigibnVtYmVyIj09dHlwZW9mIGgmJk1hdGguZmxvb3IoaCkhPT1oKXJldHVybiBjLmVycm9yKCJOdW1lcmljIGJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VyIHZhbHVlcy4iKTtpZihyKXtpZihjLmNoZWNrU3VidHlwZShyLGl0KGgpKSlyZXR1cm4gbnVsbH1lbHNlIHI9aXQoaCk7aWYodm9pZCAwIT09aVtTdHJpbmcoaCldKXJldHVybiBjLmVycm9yKCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgdW5pcXVlLiIpO2lbU3RyaW5nKGgpXT1hLmxlbmd0aH12YXIgcD1lLnBhcnNlKGwsbyxuKTtpZighcClyZXR1cm4gbnVsbDtuPW58fHAudHlwZSxhLnB1c2gocCl9dmFyIGQ9ZS5wYXJzZSh0WzFdLDEscik7aWYoIWQpcmV0dXJuIG51bGw7dmFyIGc9ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsbik7cmV0dXJuIGc/bmV3IEN0KHIsbixkLGksYSxnKTpudWxsfSxDdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtyZXR1cm4odGhpcy5vdXRwdXRzW3RoaXMuY2FzZXNbZV1dfHx0aGlzLm90aGVyd2lzZSkuZXZhbHVhdGUodCl9LEN0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KSx0aGlzLm91dHB1dHMuZm9yRWFjaCh0KSx0KHRoaXMub3RoZXJ3aXNlKX0sQ3QucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLm91dHB1dHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpLmNvbmNhdCh0aGlzLm90aGVyd2lzZS5wb3NzaWJsZU91dHB1dHMoKSk7dmFyIHR9LEN0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVsibWF0Y2giLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLHI9W10sbj17fSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLmNhc2VzKS5zb3J0KCk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9blt0LmNhc2VzW29dXTt2b2lkIDA9PT1zPyhuW3QuY2FzZXNbb11dPXIubGVuZ3RoLHIucHVzaChbdC5jYXNlc1tvXSxbb11dKSk6cltzXVsxXS5wdXNoKG8pfWZvcih2YXIgbD1mdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09PXQuaW5wdXQudHlwZS5raW5kP051bWJlcihlKTplfSxjPTAsdT1yO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPWZbMF0scD1mWzFdOzE9PT1wLmxlbmd0aD9lLnB1c2gobChwWzBdKSk6ZS5wdXNoKHAubWFwKGwpKSxlLnB1c2godC5vdXRwdXRzW2hdLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZS5wdXNoKHRoaXMub3RoZXJ3aXNlLnNlcmlhbGl6ZSgpKSxlfTt2YXIgTHQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuYnJhbmNoZXM9ZSx0aGlzLm90aGVyd2lzZT1yfTtmdW5jdGlvbiB6dCh0KXtyZXR1cm4ic3RyaW5nIj09PXQua2luZHx8Im51bWJlciI9PT10LmtpbmR8fCJib29sZWFuIj09PXQua2luZHx8Im51bGwiPT09dC5raW5kfWZ1bmN0aW9uIE90KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LGUscil7dGhpcy50eXBlPUgsdGhpcy5saHM9dCx0aGlzLnJocz1lLHRoaXMuY29sbGF0b3I9cn1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aCYmNCE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCB0d28gb3IgdGhyZWUgYXJndW1lbnRzLiIpO3ZhciBuPWUucGFyc2UodFsxXSwxLFcpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPWUucGFyc2UodFsyXSwyLFcpO2lmKCFpKXJldHVybiBudWxsO2lmKCF6dChuLnR5cGUpJiYhenQoaS50eXBlKSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IHRvIGJlIGEgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG9yIG51bGwsIGJ1dCBmb3VuZCAoIiskKG4udHlwZSkrIiwgIiskKGkudHlwZSkrIikgaW5zdGVhZC4iKTtpZihuLnR5cGUua2luZCE9PWkudHlwZS5raW5kJiYidmFsdWUiIT09bi50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1pLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcigiQ2Fubm90IGNvbXBhcmUgIiskKG4udHlwZSkrIiBhbmQgIiskKGkudHlwZSkrIi4iKTt2YXIgYT1udWxsO2lmKDQ9PT10Lmxlbmd0aCl7aWYoInN0cmluZyIhPT1uLnR5cGUua2luZCYmInN0cmluZyIhPT1pLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcigiQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuIik7aWYoIShhPWUucGFyc2UodFszXSwzLFgpKSlyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IHIobixpLGEpfSxyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLmNvbGxhdG9yPzA9PT10aGlzLmNvbGxhdG9yLmV2YWx1YXRlKHQpLmNvbXBhcmUodGhpcy5saHMuZXZhbHVhdGUodCksdGhpcy5yaHMuZXZhbHVhdGUodCkpOnRoaXMubGhzLmV2YWx1YXRlKHQpPT09dGhpcy5yaHMuZXZhbHVhdGUodCk7cmV0dXJuIGU/IXI6cn0sci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5saHMpLHQodGhpcy5yaHMpLHRoaXMuY29sbGF0b3ImJnQodGhpcy5jb2xsYXRvcil9LHIucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblshMCwhMV19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciBlPVt0XTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24odCl7ZS5wdXNoKHQuc2VyaWFsaXplKCkpfSksZX0scn0oKX1MdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKHQubGVuZ3RoJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKHI9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgbj1bXSxpPTE7aTx0Lmxlbmd0aC0xO2krPTIpe3ZhciBhPWUucGFyc2UodFtpXSxpLEgpO2lmKCFhKXJldHVybiBudWxsO3ZhciBvPWUucGFyc2UodFtpKzFdLGkrMSxyKTtpZighbylyZXR1cm4gbnVsbDtuLnB1c2goW2Esb10pLHI9cnx8by50eXBlfXZhciBzPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLHIpO3JldHVybiBzP25ldyBMdChyLG4scyk6bnVsbH0sTHQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5icmFuY2hlcztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTtpZihpLmV2YWx1YXRlKHQpKXJldHVybiBhLmV2YWx1YXRlKHQpfXJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZSh0KX0sTHQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07dChpKSx0KGEpfXQodGhpcy5vdGhlcndpc2UpfSxMdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYnJhbmNoZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLHRbMV0ucG9zc2libGVPdXRwdXRzKCl9KSkuY29uY2F0KHRoaXMub3RoZXJ3aXNlLnBvc3NpYmxlT3V0cHV0cygpKTt2YXIgdH0sTHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiY2FzZSJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgSXQ9T3QoIj09IiwhMSksRHQ9T3QoIiE9IiwhMCksUHQ9ZnVuY3Rpb24odCl7dGhpcy50eXBlPVUsdGhpcy5pbnB1dD10fTtQdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMSBhcmd1bWVudCwgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSk7cmV0dXJuIHI/ImFycmF5IiE9PXIudHlwZS5raW5kJiYic3RyaW5nIiE9PXIudHlwZS5raW5kJiYidmFsdWUiIT09ci50eXBlLmtpbmQ/ZS5lcnJvcigiRXhwZWN0ZWQgYXJndW1lbnQgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAiKyQoci50eXBlKSsiIGluc3RlYWQuIik6bmV3IFB0KHIpOm51bGx9LFB0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZS5sZW5ndGg7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5sZW5ndGg7dGhyb3cgbmV3IG90KCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICIrJChpdChlKSkrIiBpbnN0ZWFkLiIpfSxQdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LFB0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0sUHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsibGVuZ3RoIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pLHR9O3ZhciBSdD17Ij09IjpJdCwiIT0iOkR0LGFycmF5OnV0LGF0OkV0LGJvb2xlYW46bHQsY2FzZTpMdCxjb2FsZXNjZTpNdCxjb2xsYXRvcjpydCxpbnRlcnBvbGF0ZTpUdCxsZW5ndGg6UHQsbGV0OlN0LGxpdGVyYWw6YXQsbWF0Y2g6Q3QsbnVtYmVyOmx0LG9iamVjdDpsdCxzdGVwOl90LHN0cmluZzpsdCwidG8tY29sb3IiOmh0LCJ0by1udW1iZXIiOmh0LHZhcjp5dH07ZnVuY3Rpb24gRnQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdO3I9ci5ldmFsdWF0ZSh0KSxuPW4uZXZhbHVhdGUodCksaT1pLmV2YWx1YXRlKHQpO3ZhciBvPWE/YS5ldmFsdWF0ZSh0KToxLHM9bnQocixuLGksbyk7aWYocyl0aHJvdyBuZXcgb3Qocyk7cmV0dXJuIG5ldyB0dChyLzI1NSpvLG4vMjU1Km8saS8yNTUqbyxvKX1mdW5jdGlvbiBCdCh0LGUpe3JldHVybiB0IGluIGV9ZnVuY3Rpb24gTnQodCxlKXt2YXIgcj1lW3RdO3JldHVybiB2b2lkIDA9PT1yP251bGw6cn1mdW5jdGlvbiBqdCh0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpPG4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gVnQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KT5uLmV2YWx1YXRlKHQpfWZ1bmN0aW9uIFV0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCk8PW4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gcXQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KT49bi5ldmFsdWF0ZSh0KX1mdW5jdGlvbiBIdCh0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBHdCh0KXtyZXR1cm57cmVzdWx0OiJzdWNjZXNzIix2YWx1ZTp0fX1mdW5jdGlvbiBZdCh0KXtyZXR1cm57cmVzdWx0OiJlcnJvciIsdmFsdWU6dH19Z3QucmVnaXN0ZXIoUnQse2Vycm9yOlt7a2luZDoiZXJyb3IifSxbcV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3Rocm93IG5ldyBvdChyLmV2YWx1YXRlKHQpKX1dLHR5cGVvZjpbcSxbV10sZnVuY3Rpb24odCxlKXtyZXR1cm4gJChpdChlWzBdLmV2YWx1YXRlKHQpKSl9XSwidG8tc3RyaW5nIjpbcSxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dHlwZW9mKHI9ci5ldmFsdWF0ZSh0KSk7cmV0dXJuIG51bGw9PT1yPyIiOiJzdHJpbmciPT09bnx8Im51bWJlciI9PT1ufHwiYm9vbGVhbiI9PT1uP1N0cmluZyhyKTpyIGluc3RhbmNlb2YgdHQ/ci50b1N0cmluZygpOkpTT04uc3RyaW5naWZ5KHIpfV0sInRvLWJvb2xlYW4iOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIEJvb2xlYW4oci5ldmFsdWF0ZSh0KSl9XSwidG8tcmdiYSI6W1ooVSw0KSxbR10sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0FycmF5KCl9XSxyZ2I6W0csW1UsVSxVXSxGdF0scmdiYTpbRyxbVSxVLFUsVV0sRnRdLGhhczp7dHlwZTpILG92ZXJsb2FkczpbW1txXSxmdW5jdGlvbih0LGUpe3JldHVybiBCdChlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbcSxZXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBCdChyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSxnZXQ6e3R5cGU6VyxvdmVybG9hZHM6W1tbcV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTnQoZVswXS5ldmFsdWF0ZSh0KSx0LnByb3BlcnRpZXMoKSl9XSxbW3EsWV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gTnQoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dXX0scHJvcGVydGllczpbWSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wcm9wZXJ0aWVzKCl9XSwiZ2VvbWV0cnktdHlwZSI6W3EsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2VvbWV0cnlUeXBlKCl9XSxpZDpbVyxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5pZCgpfV0sem9vbTpbVSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLnpvb219XSwiaGVhdG1hcC1kZW5zaXR5IjpbVSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLmhlYXRtYXBEZW5zaXR5fHwwfV0sImxpbmUtcHJvZ3Jlc3MiOltVLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMubGluZVByb2dyZXNzfHwwfV0sIisiOltVLEh0KFUpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpcis9aVtuXS5ldmFsdWF0ZSh0KTtyZXR1cm4gcn1dLCIqIjpbVSxIdChVKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXIqPWlbbl0uZXZhbHVhdGUodCk7cmV0dXJuIHJ9XSwiLSI6e3R5cGU6VSxvdmVybG9hZHM6W1tbVSxVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpLW4uZXZhbHVhdGUodCl9XSxbW1VdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuLWVbMF0uZXZhbHVhdGUodCl9XV19LCIvIjpbVSxbVSxVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpL24uZXZhbHVhdGUodCl9XSwiJSI6W1UsW1UsVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSVuLmV2YWx1YXRlKHQpfV0sbG4yOltVLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguTE4yfV0scGk6W1UsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5QSX1dLGU6W1UsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5FfV0sIl4iOltVLFtVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIE1hdGgucG93KHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XSxzcXJ0OltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguc3FydChyLmV2YWx1YXRlKHQpKX1dLGxvZzEwOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nMTAoci5ldmFsdWF0ZSh0KSl9XSxsbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZyhyLmV2YWx1YXRlKHQpKX1dLGxvZzI6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5sb2cyKHIuZXZhbHVhdGUodCkpfV0sc2luOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguc2luKHIuZXZhbHVhdGUodCkpfV0sY29zOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY29zKHIuZXZhbHVhdGUodCkpfV0sdGFuOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgudGFuKHIuZXZhbHVhdGUodCkpfV0sYXNpbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFzaW4oci5ldmFsdWF0ZSh0KSl9XSxhY29zOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYWNvcyhyLmV2YWx1YXRlKHQpKX1dLGF0YW46W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hdGFuKHIuZXZhbHVhdGUodCkpfV0sbWluOltVLEh0KFUpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KSl9XSxtYXg6W1UsSHQoVSksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKX1dLGFiczpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFicyhyLmV2YWx1YXRlKHQpKX1dLHJvdW5kOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0uZXZhbHVhdGUodCk7cmV0dXJuIHI8MD8tTWF0aC5yb3VuZCgtcik6TWF0aC5yb3VuZChyKX1dLGZsb29yOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguZmxvb3Ioci5ldmFsdWF0ZSh0KSl9XSxjZWlsOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY2VpbChyLmV2YWx1YXRlKHQpKX1dLCJmaWx0ZXItPT0iOltILFtxLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHQucHJvcGVydGllcygpW3IudmFsdWVdPT09bi52YWx1ZX1dLCJmaWx0ZXItaWQtPT0iOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuaWQoKT09PXIudmFsdWV9XSwiZmlsdGVyLXR5cGUtPT0iOltILFtxXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuZ2VvbWV0cnlUeXBlKCk9PT1yLnZhbHVlfV0sImZpbHRlci08IjpbSCxbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk8YX1dLCJmaWx0ZXItaWQtPCI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjxpfV0sImZpbHRlci0+IjpbSCxbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+YX1dLCJmaWx0ZXItaWQtPiI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbj5pfV0sImZpbHRlci08PSI6W0gsW3EsV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPD1hfV0sImZpbHRlci1pZC08PSI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjw9aX1dLCJmaWx0ZXItPj0iOltILFtxLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaT49YX1dLCJmaWx0ZXItaWQtPj0iOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm4+PWl9XSwiZmlsdGVyLWhhcyI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUgaW4gdC5wcm9wZXJ0aWVzKCl9XSwiZmlsdGVyLWhhcy1pZCI6W0gsW10sZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10LmlkKCl9XSwiZmlsdGVyLXR5cGUtaW4iOltILFtaKHEpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5nZW9tZXRyeVR5cGUoKSk+PTB9XSwiZmlsdGVyLWlkLWluIjpbSCxbWihXKV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZS5pbmRleE9mKHQuaWQoKSk+PTB9XSwiZmlsdGVyLWluLXNtYWxsIjpbSCxbcSxaKFcpXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIGVbMV0udmFsdWUuaW5kZXhPZih0LnByb3BlcnRpZXMoKVtyLnZhbHVlXSk+PTB9XSwiZmlsdGVyLWluLWxhcmdlIjpbSCxbcSxaKFcpXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IoO3I8PW47KXt2YXIgaT1yK24+PjE7aWYoZVtpXT09PXQpcmV0dXJuITA7ZVtpXT50P249aS0xOnI9aSsxfXJldHVybiExfSh0LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxuLnZhbHVlLDAsbi52YWx1ZS5sZW5ndGgtMSl9XSwiPiI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxWdF0sW1txLHFdLFZ0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKT4wfV1dfSwiPCI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxqdF0sW1txLHFdLGp0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKTwwfV1dfSwiPj0iOnt0eXBlOkgsb3ZlcmxvYWRzOltbW1UsVV0scXRdLFtbcSxxXSxxdF0sW1txLHEsWF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZVsyXS5ldmFsdWF0ZSh0KS5jb21wYXJlKHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSk+PTB9XV19LCI8PSI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxVdF0sW1txLHFdLFV0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKTw9MH1dXX0sYWxsOnt0eXBlOkgsb3ZlcmxvYWRzOltbW0gsSF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSYmbi5ldmFsdWF0ZSh0KX1dLFtIdChIKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIW5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITE7cmV0dXJuITB9XV19LGFueTp7dHlwZTpILG92ZXJsb2FkczpbW1tILEhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCl8fG4uZXZhbHVhdGUodCl9XSxbSHQoSCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKWlmKG5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITA7cmV0dXJuITF9XV19LCIhIjpbSCxbSF0sZnVuY3Rpb24odCxlKXtyZXR1cm4hZVswXS5ldmFsdWF0ZSh0KX1dLCJpcy1zdXBwb3J0ZWQtc2NyaXB0IjpbSCxbcV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5nbG9iYWxzJiZ0Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7cmV0dXJuIW58fG4oci5ldmFsdWF0ZSh0KSl9XSx1cGNhc2U6W3EsW3FdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkudG9VcHBlckNhc2UoKX1dLGRvd25jYXNlOltxLFtxXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvTG93ZXJDYXNlKCl9XSxjb25jYXQ6W3EsSHQocSksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KS5qb2luKCIiKX1dLCJyZXNvbHZlZC1sb2NhbGUiOltxLFtYXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnJlc29sdmVkTG9jYWxlKCl9XX0pO3ZhciBXdD0uOTUwNDcsWHQ9MSxadD0xLjA4ODgzLCR0PTQvMjksSnQ9Ni8yOSxLdD0zKkp0Kkp0LFF0PUp0Kkp0Kkp0LHRlPU1hdGguUEkvMTgwLGVlPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIHJlKHQpe3JldHVybiB0PlF0P01hdGgucG93KHQsMS8zKTp0L0t0KyR0fWZ1bmN0aW9uIG5lKHQpe3JldHVybiB0Pkp0P3QqdCp0Okt0Kih0LSR0KX1mdW5jdGlvbiBpZSh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGFlKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIG9lKHQpe3ZhciBlPWFlKHQucikscj1hZSh0LmcpLG49YWUodC5iKSxpPXJlKCguNDEyNDU2NCplKy4zNTc1NzYxKnIrLjE4MDQzNzUqbikvV3QpLGE9cmUoKC4yMTI2NzI5KmUrLjcxNTE1MjIqcisuMDcyMTc1Km4pL1h0KTtyZXR1cm57bDoxMTYqYS0xNixhOjUwMCooaS1hKSxiOjIwMCooYS1yZSgoLjAxOTMzMzkqZSsuMTE5MTkyKnIrLjk1MDMwNDEqbikvWnQpKSxhbHBoYTp0LmF9fWZ1bmN0aW9uIHNlKHQpe3ZhciBlPSh0LmwrMTYpLzExNixyPWlzTmFOKHQuYSk/ZTplK3QuYS81MDAsbj1pc05hTih0LmIpP2U6ZS10LmIvMjAwO3JldHVybiBlPVh0Km5lKGUpLHI9V3QqbmUociksbj1adCpuZShuKSxuZXcgdHQoaWUoMy4yNDA0NTQyKnItMS41MzcxMzg1KmUtLjQ5ODUzMTQqbiksaWUoLS45NjkyNjYqcisxLjg3NjAxMDgqZSsuMDQxNTU2Km4pLGllKC4wNTU2NDM0KnItLjIwNDAyNTkqZSsxLjA1NzIyNTIqbiksdC5hbHBoYSl9dmFyIGxlPXtmb3J3YXJkOm9lLHJldmVyc2U6c2UsaW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybntsOnd0KHQubCxlLmwsciksYTp3dCh0LmEsZS5hLHIpLGI6d3QodC5iLGUuYixyKSxhbHBoYTp3dCh0LmFscGhhLGUuYWxwaGEscil9fX0sY2U9e2ZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIGU9b2UodCkscj1lLmwsbj1lLmEsaT1lLmIsYT1NYXRoLmF0YW4yKGksbikqZWU7cmV0dXJue2g6YTwwP2ErMzYwOmEsYzpNYXRoLnNxcnQobipuK2kqaSksbDpyLGFscGhhOnQuYX19LHJldmVyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5oKnRlLHI9dC5jO3JldHVybiBzZSh7bDp0LmwsYTpNYXRoLmNvcyhlKSpyLGI6TWF0aC5zaW4oZSkqcixhbHBoYTp0LmFscGhhfSl9LGludGVycG9sYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57aDpmdW5jdGlvbih0LGUscil7dmFyIG49ZS10O3JldHVybiB0K3IqKG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bil9KHQuaCxlLmgsciksYzp3dCh0LmMsZS5jLHIpLGw6d3QodC5sLGUubCxyKSxhbHBoYTp3dCh0LmFscGhhLGUuYWxwaGEscil9fX0sdWU9T2JqZWN0LmZyZWV6ZSh7bGFiOmxlLGhjbDpjZX0pO2Z1bmN0aW9uIGZlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyPyJudW1iZXIiOnQgaW5zdGFuY2VvZiBTdHJpbmc/InN0cmluZyI6dCBpbnN0YW5jZW9mIEJvb2xlYW4/ImJvb2xlYW4iOkFycmF5LmlzQXJyYXkodCk/ImFycmF5IjpudWxsPT09dD8ibnVsbCI6dHlwZW9mIHR9ZnVuY3Rpb24gaGUodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmIUFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuIHR9ZnVuY3Rpb24gZGUodCxlLHIpe3JldHVybiB2b2lkIDAhPT10P3Q6dm9pZCAwIT09ZT9lOnZvaWQgMCE9PXI/cjp2b2lkIDB9ZnVuY3Rpb24gZ2UodCxlLHIsbixpKXtyZXR1cm4gZGUodHlwZW9mIHI9PT1pP25bcl06dm9pZCAwLHQuZGVmYXVsdCxlLmRlZmF1bHQpfWZ1bmN0aW9uIHZlKHQsZSxyKXtpZigibnVtYmVyIiE9PWZlKHIpKXJldHVybiBkZSh0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgbj10LnN0b3BzLmxlbmd0aDtpZigxPT09bilyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbbi0xXVswXSlyZXR1cm4gdC5zdG9wc1tuLTFdWzFdO3ZhciBpPXhlKHQuc3RvcHMscik7cmV0dXJuIHQuc3RvcHNbaV1bMV19ZnVuY3Rpb24gbWUodCxlLHIpe3ZhciBuPXZvaWQgMCE9PXQuYmFzZT90LmJhc2U6MTtpZigibnVtYmVyIiE9PWZlKHIpKXJldHVybiBkZSh0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgaT10LnN0b3BzLmxlbmd0aDtpZigxPT09aSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbaS0xXVswXSlyZXR1cm4gdC5zdG9wc1tpLTFdWzFdO3ZhciBhPXhlKHQuc3RvcHMsciksbz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfShyLG4sdC5zdG9wc1thXVswXSx0LnN0b3BzW2ErMV1bMF0pLHM9dC5zdG9wc1thXVsxXSxsPXQuc3RvcHNbYSsxXVsxXSxjPWt0W2UudHlwZV18fHBlO2lmKHQuY29sb3JTcGFjZSYmInJnYiIhPT10LmNvbG9yU3BhY2Upe3ZhciB1PXVlW3QuY29sb3JTcGFjZV07Yz1mdW5jdGlvbih0LGUpe3JldHVybiB1LnJldmVyc2UodS5pbnRlcnBvbGF0ZSh1LmZvcndhcmQodCksdS5mb3J3YXJkKGUpLG8pKX19cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHMuZXZhbHVhdGU/e2V2YWx1YXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9YXJndW1lbnRzLmxlbmd0aDtlLS07KXRbZV09YXJndW1lbnRzW2VdO3ZhciByPXMuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpLG49bC5ldmFsdWF0ZS5hcHBseSh2b2lkIDAsdCk7aWYodm9pZCAwIT09ciYmdm9pZCAwIT09bilyZXR1cm4gYyhyLG4sbyl9fTpjKHMsbCxvKX1mdW5jdGlvbiB5ZSh0LGUscil7cmV0dXJuImNvbG9yIj09PWUudHlwZT9yPXR0LnBhcnNlKHIpOmZlKHIpPT09ZS50eXBlfHwiZW51bSI9PT1lLnR5cGUmJmUudmFsdWVzW3JdfHwocj12b2lkIDApLGRlKHIsdC5kZWZhdWx0LGUuZGVmYXVsdCl9ZnVuY3Rpb24geGUodCxlKXtmb3IodmFyIHIsbixpPTAsYT10Lmxlbmd0aC0xLG89MDtpPD1hOyl7aWYocj10W289TWF0aC5mbG9vcigoaSthKS8yKV1bMF0sbj10W28rMV1bMF0sZT09PXJ8fGU+ciYmZTxuKXJldHVybiBvO3I8ZT9pPW8rMTpyPmUmJihhPW8tMSl9cmV0dXJuIE1hdGgubWF4KG8tMSwwKX12YXIgYmU9ZnVuY3Rpb24odCxlKXt2YXIgcjt0aGlzLmV4cHJlc3Npb249dCx0aGlzLl93YXJuaW5nSGlzdG9yeT17fSx0aGlzLl9kZWZhdWx0VmFsdWU9ImNvbG9yIj09PShyPWUpLnR5cGUmJmhlKHIuZGVmYXVsdCk/bmV3IHR0KDAsMCwwLDApOiJjb2xvciI9PT1yLnR5cGU/dHQucGFyc2Uoci5kZWZhdWx0KXx8bnVsbDp2b2lkIDA9PT1yLmRlZmF1bHQ/bnVsbDpyLmRlZmF1bHQsImVudW0iPT09ZS50eXBlJiYodGhpcy5fZW51bVZhbHVlcz1lLnZhbHVlcyl9O2Z1bmN0aW9uIF9lKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJnRbMF1pbiBSdH1mdW5jdGlvbiB3ZSh0LGUpe3ZhciByPW5ldyB4dChSdCxbXSxmdW5jdGlvbih0KXt2YXIgZT17Y29sb3I6RyxzdHJpbmc6cSxudW1iZXI6VSxlbnVtOnEsYm9vbGVhbjpIfTtyZXR1cm4iYXJyYXkiPT09dC50eXBlP1ooZVt0LnZhbHVlXXx8Vyx0Lmxlbmd0aCk6ZVt0LnR5cGVdfHxudWxsfShlKSksbj1yLnBhcnNlKHQpO3JldHVybiBuP0d0KG5ldyBiZShuLGUpKTpZdChyLmVycm9ycyl9YmUucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZXZhbHVhdG9yfHwodGhpcy5fZXZhbHVhdG9yPW5ldyBkdCksdGhpcy5fZXZhbHVhdG9yLmdsb2JhbHM9dCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZT1lLHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpfSxiZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLl9ldmFsdWF0b3J8fCh0aGlzLl9ldmFsdWF0b3I9bmV3IGR0KSx0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWU7dHJ5e3ZhciByPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO2lmKG51bGw9PXIpcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtpZih0aGlzLl9lbnVtVmFsdWVzJiYhKHIgaW4gdGhpcy5fZW51bVZhbHVlcykpdGhyb3cgbmV3IG90KCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvbmUgb2YgIitPYmplY3Qua2V5cyh0aGlzLl9lbnVtVmFsdWVzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfSkuam9pbigiLCAiKSsiLCBidXQgZm91bmQgIitKU09OLnN0cmluZ2lmeShyKSsiIGluc3RlYWQuIik7cmV0dXJuIHJ9Y2F0Y2godCl7cmV0dXJuIHRoaXMuX3dhcm5pbmdIaXN0b3J5W3QubWVzc2FnZV18fCh0aGlzLl93YXJuaW5nSGlzdG9yeVt0Lm1lc3NhZ2VdPSEwLCJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQubWVzc2FnZSkpLHRoaXMuX2RlZmF1bHRWYWx1ZX19O3ZhciBrZT1mdW5jdGlvbih0LGUpe3RoaXMua2luZD10LHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lfTtrZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUpfSxrZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSl9O3ZhciBUZT1mdW5jdGlvbih0LGUscil7dGhpcy5raW5kPXQsdGhpcy56b29tU3RvcHM9ci5sYWJlbHMsdGhpcy5fc3R5bGVFeHByZXNzaW9uPWUsciBpbnN0YW5jZW9mIFR0JiYodGhpcy5faW50ZXJwb2xhdGlvblR5cGU9ci5pbnRlcnBvbGF0aW9uKX07ZnVuY3Rpb24gQWUodCxlKXtpZigiZXJyb3IiPT09KHQ9d2UodCxlKSkucmVzdWx0KXJldHVybiB0O3ZhciByPXQudmFsdWUuZXhwcmVzc2lvbixuPXZ0KHIpO2lmKCFuJiYhZVsicHJvcGVydHktZnVuY3Rpb24iXSlyZXR1cm4gWXQoW25ldyBOKCIiLCJwcm9wZXJ0eSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkIildKTt2YXIgaT1tdChyLFsiem9vbSJdKTtpZighaSYmITE9PT1lWyJ6b29tLWZ1bmN0aW9uIl0pcmV0dXJuIFl0KFtuZXcgTigiIiwiem9vbSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkIildKTt2YXIgYT1mdW5jdGlvbiB0KGUpe3ZhciByPW51bGw7aWYoZSBpbnN0YW5jZW9mIFN0KXI9dChlLnJlc3VsdCk7ZWxzZSBpZihlIGluc3RhbmNlb2YgTXQpZm9yKHZhciBuPTAsaT1lLmFyZ3M7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2lmKHI9dChhKSlicmVha31lbHNlKGUgaW5zdGFuY2VvZiBfdHx8ZSBpbnN0YW5jZW9mIFR0KSYmZS5pbnB1dCBpbnN0YW5jZW9mIGd0JiYiem9vbSI9PT1lLmlucHV0Lm5hbWUmJihyPWUpO3JldHVybiByIGluc3RhbmNlb2YgTj9yOihlLmVhY2hDaGlsZChmdW5jdGlvbihlKXt2YXIgbj10KGUpO24gaW5zdGFuY2VvZiBOP3I9bjohciYmbj9yPW5ldyBOKCIiLCciem9vbSIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb24uJyk6ciYmbiYmciE9PW4mJihyPW5ldyBOKCIiLCdPbmx5IG9uZSB6b29tLWJhc2VkICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIHN1YmV4cHJlc3Npb24gbWF5IGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbi4nKSl9KSxyKX0ocik7cmV0dXJuIGF8fGk/YSBpbnN0YW5jZW9mIE4/WXQoW2FdKTphIGluc3RhbmNlb2YgVHQmJiJwaWVjZXdpc2UtY29uc3RhbnQiPT09ZS5mdW5jdGlvbj9ZdChbbmV3IE4oIiIsJyJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTpHdChhP25ldyBUZShuPyJjYW1lcmEiOiJjb21wb3NpdGUiLHQudmFsdWUsYSk6bmV3IGtlKG4/ImNvbnN0YW50Ijoic291cmNlIix0LnZhbHVlKSk6WXQoW25ldyBOKCIiLCciem9vbSIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb24uJyldKX1UZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUpfSxUZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSl9LFRlLnByb3RvdHlwZS5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5faW50ZXJwb2xhdGlvblR5cGU/VHQuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLl9pbnRlcnBvbGF0aW9uVHlwZSx0LGUscik6MH07dmFyIE1lPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFyYW1ldGVycz10LHRoaXMuX3NwZWNpZmljYXRpb249ZSxSKHRoaXMsZnVuY3Rpb24gdChlLHIpe3ZhciBuLGksYSxvPSJjb2xvciI9PT1yLnR5cGUscz1lLnN0b3BzJiYib2JqZWN0Ij09dHlwZW9mIGUuc3RvcHNbMF1bMF0sbD1zfHx2b2lkIDAhPT1lLnByb3BlcnR5LGM9c3x8IWwsdT1lLnR5cGV8fCgiaW50ZXJwb2xhdGVkIj09PXIuZnVuY3Rpb24/ImV4cG9uZW50aWFsIjoiaW50ZXJ2YWwiKTtpZihvJiYoKGU9Uih7fSxlKSkuc3RvcHMmJihlLnN0b3BzPWUuc3RvcHMubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdLHR0LnBhcnNlKHRbMV0pXX0pKSxlLmRlZmF1bHQ/ZS5kZWZhdWx0PXR0LnBhcnNlKGUuZGVmYXVsdCk6ZS5kZWZhdWx0PXR0LnBhcnNlKHIuZGVmYXVsdCkpLGUuY29sb3JTcGFjZSYmInJnYiIhPT1lLmNvbG9yU3BhY2UmJiF1ZVtlLmNvbG9yU3BhY2VdKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2xvciBzcGFjZTogIitlLmNvbG9yU3BhY2UpO2lmKCJleHBvbmVudGlhbCI9PT11KW49bWU7ZWxzZSBpZigiaW50ZXJ2YWwiPT09dSluPXZlO2Vsc2UgaWYoImNhdGVnb3JpY2FsIj09PXUpe249Z2UsaT1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgZj0wLGg9ZS5zdG9wcztmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl07aVtwWzBdXT1wWzFdfWE9dHlwZW9mIGUuc3RvcHNbMF1bMF19ZWxzZXtpZigiaWRlbnRpdHkiIT09dSl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZnVuY3Rpb24gdHlwZSAiJyt1KyciJyk7bj15ZX1pZihzKXtmb3IodmFyIGQ9e30sZz1bXSx2PTA7djxlLnN0b3BzLmxlbmd0aDt2Kyspe3ZhciBtPWUuc3RvcHNbdl0seT1tWzBdLnpvb207dm9pZCAwPT09ZFt5XSYmKGRbeV09e3pvb206eSx0eXBlOmUudHlwZSxwcm9wZXJ0eTplLnByb3BlcnR5LGRlZmF1bHQ6ZS5kZWZhdWx0LHN0b3BzOltdfSxnLnB1c2goeSkpLGRbeV0uc3RvcHMucHVzaChbbVswXS52YWx1ZSxtWzFdXSl9Zm9yKHZhciB4PVtdLGI9MCxfPWc7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdO3gucHVzaChbZFt3XS56b29tLHQoZFt3XSxyKV0pfXJldHVybntraW5kOiJjb21wb3NpdGUiLGludGVycG9sYXRpb25GYWN0b3I6VHQuaW50ZXJwb2xhdGlvbkZhY3Rvci5iaW5kKHZvaWQgMCx7bmFtZToibGluZWFyIn0pLHpvb21TdG9wczp4Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGV2YWx1YXRlOmZ1bmN0aW9uKHQsbil7dmFyIGk9dC56b29tO3JldHVybiBtZSh7c3RvcHM6eCxiYXNlOmUuYmFzZX0scixpKS5ldmFsdWF0ZShpLG4pfX19cmV0dXJuIGM/e2tpbmQ6ImNhbWVyYSIsaW50ZXJwb2xhdGlvbkZhY3RvcjoiZXhwb25lbnRpYWwiPT09dT9UdC5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLHtuYW1lOiJleHBvbmVudGlhbCIsYmFzZTp2b2lkIDAhPT1lLmJhc2U/ZS5iYXNlOjF9KTpmdW5jdGlvbigpe3JldHVybiAwfSx6b29tU3RvcHM6ZS5zdG9wcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxldmFsdWF0ZTpmdW5jdGlvbih0KXt2YXIgbz10Lnpvb207cmV0dXJuIG4oZSxyLG8saSxhKX19OntraW5kOiJzb3VyY2UiLGV2YWx1YXRlOmZ1bmN0aW9uKHQsbyl7dmFyIHM9byYmby5wcm9wZXJ0aWVzP28ucHJvcGVydGllc1tlLnByb3BlcnR5XTp2b2lkIDA7cmV0dXJuIHZvaWQgMD09PXM/ZGUoZS5kZWZhdWx0LHIuZGVmYXVsdCk6bihlLHIscyxpLGEpfX19KHRoaXMuX3BhcmFtZXRlcnMsdGhpcy5fc3BlY2lmaWNhdGlvbikpfTtmdW5jdGlvbiBTZSh0LGUpe2lmKGhlKHQpKXJldHVybiBuZXcgTWUodCxlKTtpZihfZSh0KSl7dmFyIHI9QWUodCxlKTtpZigiZXJyb3IiPT09ci5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKHIudmFsdWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleSsiOiAiK3QubWVzc2FnZX0pLmpvaW4oIiwgIikpO3JldHVybiByLnZhbHVlfXZhciBuPXQ7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiY29sb3IiPT09ZS50eXBlJiYobj10dC5wYXJzZSh0KSkse2tpbmQ6ImNvbnN0YW50IixldmFsdWF0ZTpmdW5jdGlvbigpe3JldHVybiBufX19ZnVuY3Rpb24gRWUodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWN8fHt9LGk9dC5vYmplY3RFbGVtZW50VmFsaWRhdG9yc3x8e30sYT10LnN0eWxlLG89dC5zdHlsZVNwZWMscz1bXSxsPWZlKHIpO2lmKCJvYmplY3QiIT09bClyZXR1cm5bbmV3IEQoZSxyLCJvYmplY3QgZXhwZWN0ZWQsICIrbCsiIGZvdW5kIildO2Zvcih2YXIgYyBpbiByKXt2YXIgdT1jLnNwbGl0KCIuIilbMF0sZj1uW3VdfHxuWyIqIl0saD12b2lkIDA7aWYoaVt1XSloPWlbdV07ZWxzZSBpZihuW3VdKWg9S2U7ZWxzZSBpZihpWyIqIl0paD1pWyIqIl07ZWxzZXtpZighblsiKiJdKXtzLnB1c2gobmV3IEQoZSxyW2NdLCd1bmtub3duIHByb3BlcnR5ICInK2MrJyInKSk7Y29udGludWV9aD1LZX1zPXMuY29uY2F0KGgoe2tleTooZT9lKyIuIjplKStjLHZhbHVlOnJbY10sdmFsdWVTcGVjOmYsc3R5bGU6YSxzdHlsZVNwZWM6byxvYmplY3Q6cixvYmplY3RLZXk6Y30scikpfWZvcih2YXIgcCBpbiBuKWlbcF18fG5bcF0ucmVxdWlyZWQmJnZvaWQgMD09PW5bcF0uZGVmYXVsdCYmdm9pZCAwPT09cltwXSYmcy5wdXNoKG5ldyBEKGUsciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiJytwKyciJykpO3JldHVybiBzfWZ1bmN0aW9uIENlKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGUsaT10LnN0eWxlU3BlYyxhPXQua2V5LG89dC5hcnJheUVsZW1lbnRWYWxpZGF0b3J8fEtlO2lmKCJhcnJheSIhPT1mZShlKSlyZXR1cm5bbmV3IEQoYSxlLCJhcnJheSBleHBlY3RlZCwgIitmZShlKSsiIGZvdW5kIildO2lmKHIubGVuZ3RoJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybltuZXcgRChhLGUsImFycmF5IGxlbmd0aCAiK3IubGVuZ3RoKyIgZXhwZWN0ZWQsIGxlbmd0aCAiK2UubGVuZ3RoKyIgZm91bmQiKV07aWYoclsibWluLWxlbmd0aCJdJiZlLmxlbmd0aDxyWyJtaW4tbGVuZ3RoIl0pcmV0dXJuW25ldyBEKGEsZSwiYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICIrclsibWluLWxlbmd0aCJdKyIgZXhwZWN0ZWQsIGxlbmd0aCAiK2UubGVuZ3RoKyIgZm91bmQiKV07dmFyIHM9e3R5cGU6ci52YWx1ZX07aS4kdmVyc2lvbjw3JiYocy5mdW5jdGlvbj1yLmZ1bmN0aW9uKSwib2JqZWN0Ij09PWZlKHIudmFsdWUpJiYocz1yLnZhbHVlKTtmb3IodmFyIGw9W10sYz0wO2M8ZS5sZW5ndGg7YysrKWw9bC5jb25jYXQobyh7YXJyYXk6ZSxhcnJheUluZGV4OmMsdmFsdWU6ZVtjXSx2YWx1ZVNwZWM6cyxzdHlsZTpuLHN0eWxlU3BlYzppLGtleTphKyJbIitjKyJdIn0pKTtyZXR1cm4gbH1mdW5jdGlvbiBMZSh0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj10LnZhbHVlU3BlYyxpPWZlKHIpO3JldHVybiJudW1iZXIiIT09aT9bbmV3IEQoZSxyLCJudW1iZXIgZXhwZWN0ZWQsICIraSsiIGZvdW5kIildOiJtaW5pbXVtImluIG4mJnI8bi5taW5pbXVtP1tuZXcgRChlLHIscisiIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAiK24ubWluaW11bSldOiJtYXhpbXVtImluIG4mJnI+bi5tYXhpbXVtP1tuZXcgRChlLHIscisiIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSAiK24ubWF4aW11bSldOltdfWZ1bmN0aW9uIHplKHQpe3ZhciBlLHIsbixpPXQudmFsdWVTcGVjLGE9Rih0LnZhbHVlLnR5cGUpLG89e30scz0iY2F0ZWdvcmljYWwiIT09YSYmdm9pZCAwPT09dC52YWx1ZS5wcm9wZXJ0eSxsPSFzLGM9ImFycmF5Ij09PWZlKHQudmFsdWUuc3RvcHMpJiYiYXJyYXkiPT09ZmUodC52YWx1ZS5zdG9wc1swXSkmJiJvYmplY3QiPT09ZmUodC52YWx1ZS5zdG9wc1swXVswXSksdT1FZSh7a2V5OnQua2V5LHZhbHVlOnQudmFsdWUsdmFsdWVTcGVjOnQuc3R5bGVTcGVjLmZ1bmN0aW9uLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntzdG9wczpmdW5jdGlvbih0KXtpZigiaWRlbnRpdHkiPT09YSlyZXR1cm5bbmV3IEQodC5rZXksdC52YWx1ZSwnaWRlbnRpdHkgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGEgInN0b3BzIiBwcm9wZXJ0eScpXTt2YXIgZT1bXSxyPXQudmFsdWU7cmV0dXJuIGU9ZS5jb25jYXQoQ2Uoe2tleTp0LmtleSx2YWx1ZTpyLHZhbHVlU3BlYzp0LnZhbHVlU3BlYyxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxhcnJheUVsZW1lbnRWYWxpZGF0b3I6Zn0pKSwiYXJyYXkiPT09ZmUocikmJjA9PT1yLmxlbmd0aCYmZS5wdXNoKG5ldyBEKHQua2V5LHIsImFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3RvcCIpKSxlfSxkZWZhdWx0OmZ1bmN0aW9uKHQpe3JldHVybiBLZSh7a2V5OnQua2V5LHZhbHVlOnQudmFsdWUsdmFsdWVTcGVjOmksc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KX19fSk7cmV0dXJuImlkZW50aXR5Ij09PWEmJnMmJnUucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJwcm9wZXJ0eSInKSksImlkZW50aXR5Ij09PWF8fHQudmFsdWUuc3RvcHN8fHUucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzdG9wcyInKSksImV4cG9uZW50aWFsIj09PWEmJiJwaWVjZXdpc2UtY29uc3RhbnQiPT09dC52YWx1ZVNwZWMuZnVuY3Rpb24mJnUucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLCJleHBvbmVudGlhbCBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCIpKSx0LnN0eWxlU3BlYy4kdmVyc2lvbj49OCYmKGwmJiF0LnZhbHVlU3BlY1sicHJvcGVydHktZnVuY3Rpb24iXT91LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSk6cyYmIXQudmFsdWVTcGVjWyJ6b29tLWZ1bmN0aW9uIl0mJiJoZWF0bWFwLWNvbG9yIiE9PXQub2JqZWN0S2V5JiYibGluZS1ncmFkaWVudCIhPT10Lm9iamVjdEtleSYmdS5wdXNoKG5ldyBEKHQua2V5LHQudmFsdWUsInpvb20gZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSkpLCJjYXRlZ29yaWNhbCIhPT1hJiYhY3x8dm9pZCAwIT09dC52YWx1ZS5wcm9wZXJ0eXx8dS5wdXNoKG5ldyBEKHQua2V5LHQudmFsdWUsJyJwcm9wZXJ0eSIgcHJvcGVydHkgaXMgcmVxdWlyZWQnKSksdTtmdW5jdGlvbiBmKHQpe3ZhciBlPVtdLGE9dC52YWx1ZSxzPXQua2V5O2lmKCJhcnJheSIhPT1mZShhKSlyZXR1cm5bbmV3IEQocyxhLCJhcnJheSBleHBlY3RlZCwgIitmZShhKSsiIGZvdW5kIildO2lmKDIhPT1hLmxlbmd0aClyZXR1cm5bbmV3IEQocyxhLCJhcnJheSBsZW5ndGggMiBleHBlY3RlZCwgbGVuZ3RoICIrYS5sZW5ndGgrIiBmb3VuZCIpXTtpZihjKXtpZigib2JqZWN0IiE9PWZlKGFbMF0pKXJldHVybltuZXcgRChzLGEsIm9iamVjdCBleHBlY3RlZCwgIitmZShhWzBdKSsiIGZvdW5kIildO2lmKHZvaWQgMD09PWFbMF0uem9vbSlyZXR1cm5bbmV3IEQocyxhLCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHpvb20iKV07aWYodm9pZCAwPT09YVswXS52YWx1ZSlyZXR1cm5bbmV3IEQocyxhLCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHZhbHVlIildO2lmKG4mJm4+RihhWzBdLnpvb20pKXJldHVybltuZXcgRChzLGFbMF0uem9vbSwic3RvcCB6b29tIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIiKV07RihhWzBdLnpvb20pIT09biYmKG49RihhWzBdLnpvb20pLHI9dm9pZCAwLG89e30pLGU9ZS5jb25jYXQoRWUoe2tleTpzKyJbMF0iLHZhbHVlOmFbMF0sdmFsdWVTcGVjOnt6b29tOnt9fSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7em9vbTpMZSx2YWx1ZTpofX0pKX1lbHNlIGU9ZS5jb25jYXQoaCh7a2V5OnMrIlswXSIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e30sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9LGEpKTtyZXR1cm4gZS5jb25jYXQoS2Uoe2tleTpzKyJbMV0iLHZhbHVlOmFbMV0sdmFsdWVTcGVjOmksc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KSl9ZnVuY3Rpb24gaCh0LG4pe3ZhciBzPWZlKHQudmFsdWUpLGw9Rih0LnZhbHVlKSxjPW51bGwhPT10LnZhbHVlP3QudmFsdWU6bjtpZihlKXtpZihzIT09ZSlyZXR1cm5bbmV3IEQodC5rZXksYyxzKyIgc3RvcCBkb21haW4gdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3AgZG9tYWluIHR5cGUgIitlKV19ZWxzZSBlPXM7aWYoIm51bWJlciIhPT1zJiYic3RyaW5nIiE9PXMmJiJib29sZWFuIiE9PXMpcmV0dXJuW25ldyBEKHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpXTtpZigibnVtYmVyIiE9PXMmJiJjYXRlZ29yaWNhbCIhPT1hKXt2YXIgdT0ibnVtYmVyIGV4cGVjdGVkLCAiK3MrIiBmb3VuZCI7cmV0dXJuIGlbInByb3BlcnR5LWZ1bmN0aW9uIl0mJnZvaWQgMD09PWEmJih1Kz0nXG5JZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGEgY2F0ZWdvcmljYWwgZnVuY3Rpb24sIHNwZWNpZnkgYCJ0eXBlIjogImNhdGVnb3JpY2FsImAuJyksW25ldyBEKHQua2V5LGMsdSldfXJldHVybiJjYXRlZ29yaWNhbCIhPT1hfHwibnVtYmVyIiE9PXN8fGlzRmluaXRlKGwpJiZNYXRoLmZsb29yKGwpPT09bD8iY2F0ZWdvcmljYWwiIT09YSYmIm51bWJlciI9PT1zJiZ2b2lkIDAhPT1yJiZsPHI/W25ldyBEKHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIiKV06KHI9bCwiY2F0ZWdvcmljYWwiPT09YSYmbCBpbiBvP1tuZXcgRCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUiKV06KG9bbF09ITAsW10pKTpbbmV3IEQodC5rZXksYywiaW50ZWdlciBleHBlY3RlZCwgZm91bmQgIitsKV19fWZ1bmN0aW9uIE9lKHQpe3ZhciBlPSgicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dD9BZTp3ZSkoQih0LnZhbHVlKSx0LnZhbHVlU3BlYyk7cmV0dXJuImVycm9yIj09PWUucmVzdWx0P2UudmFsdWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRCgiIit0LmtleStlLmtleSx0LnZhbHVlLGUubWVzc2FnZSl9KToicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dCYmInRleHQtZm9udCI9PT10LnByb3BlcnR5S2V5JiYtMSE9PWUudmFsdWUuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uLnBvc3NpYmxlT3V0cHV0cygpLmluZGV4T2Yodm9pZCAwKT9bbmV3IEQodC5rZXksdC52YWx1ZSwnSW52YWxpZCBkYXRhIGV4cHJlc3Npb24gZm9yICJ0ZXh0LWZvbnQiLiBPdXRwdXQgdmFsdWVzIG11c3QgYmUgY29udGFpbmVkIGFzIGxpdGVyYWxzIHdpdGhpbiB0aGUgZXhwcmVzc2lvbi4nKV06W119ZnVuY3Rpb24gSWUodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT1bXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuLnZhbHVlcyk/LTE9PT1uLnZhbHVlcy5pbmRleE9mKEYocikpJiZpLnB1c2gobmV3IEQoZSxyLCJleHBlY3RlZCBvbmUgb2YgWyIrbi52YWx1ZXMuam9pbigiLCAiKSsiXSwgIitKU09OLnN0cmluZ2lmeShyKSsiIGZvdW5kIikpOi0xPT09T2JqZWN0LmtleXMobi52YWx1ZXMpLmluZGV4T2YoRihyKSkmJmkucHVzaChuZXcgRChlLHIsImV4cGVjdGVkIG9uZSBvZiBbIitPYmplY3Qua2V5cyhuLnZhbHVlcykuam9pbigiLCAiKSsiXSwgIitKU09OLnN0cmluZ2lmeShyKSsiIGZvdW5kIikpLGl9ZnVuY3Rpb24gRGUodCl7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4hMTtzd2l0Y2godFswXSl7Y2FzZSJoYXMiOnJldHVybiB0Lmxlbmd0aD49MiYmIiRpZCIhPT10WzFdJiYiJHR5cGUiIT09dFsxXTtjYXNlImluIjpjYXNlIiFpbiI6Y2FzZSIhaGFzIjpjYXNlIm5vbmUiOnJldHVybiExO2Nhc2UiPT0iOmNhc2UiIT0iOmNhc2UiPiI6Y2FzZSI+PSI6Y2FzZSI8IjpjYXNlIjw9IjpyZXR1cm4gMz09PXQubGVuZ3RoJiYoQXJyYXkuaXNBcnJheSh0WzFdKXx8QXJyYXkuaXNBcnJheSh0WzJdKSk7Y2FzZSJhbnkiOmNhc2UiYWxsIjpmb3IodmFyIGU9MCxyPXQuc2xpY2UoMSk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKCFEZShuKSYmImJvb2xlYW4iIT10eXBlb2YgbilyZXR1cm4hMX1yZXR1cm4hMDtkZWZhdWx0OnJldHVybiEwfX1NZS5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE1lKHQuX3BhcmFtZXRlcnMsdC5fc3BlY2lmaWNhdGlvbil9LE1lLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm57X3BhcmFtZXRlcnM6dC5fcGFyYW1ldGVycyxfc3BlY2lmaWNhdGlvbjp0Ll9zcGVjaWZpY2F0aW9ufX07dmFyIFBlPXt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLGZ1bmN0aW9uOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsInpvb20tZnVuY3Rpb24iOiEwfTtmdW5jdGlvbiBSZSh0KXtpZighdClyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH07RGUodCl8fCh0PUJlKHQpKTt2YXIgZT13ZSh0LFBlKTtpZigiZXJyb3IiPT09ZS5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKGUudmFsdWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleSsiOiAiK3QubWVzc2FnZX0pLmpvaW4oIiwgIikpO3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlLnZhbHVlLmV2YWx1YXRlKHQscil9fWZ1bmN0aW9uIEZlKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIEJlKHQpe2lmKCF0KXJldHVybiEwO3ZhciBlLHI9dFswXTtyZXR1cm4gdC5sZW5ndGg8PTE/ImFueSIhPT1yOiI9PSI9PT1yP05lKHRbMV0sdFsyXSwiPT0iKToiIT0iPT09cj9VZShOZSh0WzFdLHRbMl0sIj09IikpOiI8Ij09PXJ8fCI+Ij09PXJ8fCI8PSI9PT1yfHwiPj0iPT09cj9OZSh0WzFdLHRbMl0scik6ImFueSI9PT1yPyhlPXQuc2xpY2UoMSksWyJhbnkiXS5jb25jYXQoZS5tYXAoQmUpKSk6ImFsbCI9PT1yP1siYWxsIl0uY29uY2F0KHQuc2xpY2UoMSkubWFwKEJlKSk6Im5vbmUiPT09cj9bImFsbCJdLmNvbmNhdCh0LnNsaWNlKDEpLm1hcChCZSkubWFwKFVlKSk6ImluIj09PXI/amUodFsxXSx0LnNsaWNlKDIpKToiIWluIj09PXI/VWUoamUodFsxXSx0LnNsaWNlKDIpKSk6ImhhcyI9PT1yP1ZlKHRbMV0pOiIhaGFzIiE9PXJ8fFVlKFZlKHRbMV0pKX1mdW5jdGlvbiBOZSh0LGUscil7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVyblsiZmlsdGVyLXR5cGUtIityLGVdO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1pZC0iK3IsZV07ZGVmYXVsdDpyZXR1cm5bImZpbHRlci0iK3IsdCxlXX19ZnVuY3Rpb24gamUodCxlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuITE7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVyblsiZmlsdGVyLXR5cGUtaW4iLFsibGl0ZXJhbCIsZV1dO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1pZC1pbiIsWyJsaXRlcmFsIixlXV07ZGVmYXVsdDpyZXR1cm4gZS5sZW5ndGg+MjAwJiYhZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdCE9dHlwZW9mIGVbMF19KT9bImZpbHRlci1pbi1sYXJnZSIsdCxbImxpdGVyYWwiLGUuc29ydChGZSldXTpbImZpbHRlci1pbi1zbWFsbCIsdCxbImxpdGVyYWwiLGVdXX19ZnVuY3Rpb24gVmUodCl7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVybiEwO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1oYXMtaWQiXTtkZWZhdWx0OnJldHVyblsiZmlsdGVyLWhhcyIsdF19fWZ1bmN0aW9uIFVlKHQpe3JldHVyblsiISIsdF19ZnVuY3Rpb24gcWUodCl7cmV0dXJuIERlKEIodC52YWx1ZSkpP09lKFIoe30sdCx7ZXhwcmVzc2lvbkNvbnRleHQ6ImZpbHRlciIsdmFsdWVTcGVjOnt2YWx1ZToiYm9vbGVhbiJ9fSkpOmZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS52YWx1ZSxuPWUua2V5O2lmKCJhcnJheSIhPT1mZShyKSlyZXR1cm5bbmV3IEQobixyLCJhcnJheSBleHBlY3RlZCwgIitmZShyKSsiIGZvdW5kIildO3ZhciBpLGE9ZS5zdHlsZVNwZWMsbz1bXTtpZihyLmxlbmd0aDwxKXJldHVybltuZXcgRChuLHIsImZpbHRlciBhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50IildO3N3aXRjaChvPW8uY29uY2F0KEllKHtrZXk6bisiWzBdIix2YWx1ZTpyWzBdLHZhbHVlU3BlYzphLmZpbHRlcl9vcGVyYXRvcixzdHlsZTplLnN0eWxlLHN0eWxlU3BlYzplLnN0eWxlU3BlY30pKSxGKHJbMF0pKXtjYXNlIjwiOmNhc2UiPD0iOmNhc2UiPiI6Y2FzZSI+PSI6ci5sZW5ndGg+PTImJiIkdHlwZSI9PT1GKHJbMV0pJiZvLnB1c2gobmV3IEQobixyLCciJHR5cGUiIGNhbm5vdCBiZSB1c2Ugd2l0aCBvcGVyYXRvciAiJytyWzBdKyciJykpO2Nhc2UiPT0iOmNhc2UiIT0iOjMhPT1yLmxlbmd0aCYmby5wdXNoKG5ldyBEKG4sciwnZmlsdGVyIGFycmF5IGZvciBvcGVyYXRvciAiJytyWzBdKyciIG11c3QgaGF2ZSAzIGVsZW1lbnRzJykpO2Nhc2UiaW4iOmNhc2UiIWluIjpyLmxlbmd0aD49MiYmInN0cmluZyIhPT0oaT1mZShyWzFdKSkmJm8ucHVzaChuZXcgRChuKyJbMV0iLHJbMV0sInN0cmluZyBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7Zm9yKHZhciBzPTI7czxyLmxlbmd0aDtzKyspaT1mZShyW3NdKSwiJHR5cGUiPT09RihyWzFdKT9vPW8uY29uY2F0KEllKHtrZXk6bisiWyIrcysiXSIsdmFsdWU6cltzXSx2YWx1ZVNwZWM6YS5nZW9tZXRyeV90eXBlLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpOiJzdHJpbmciIT09aSYmIm51bWJlciIhPT1pJiYiYm9vbGVhbiIhPT1pJiZvLnB1c2gobmV3IEQobisiWyIrcysiXSIscltzXSwic3RyaW5nLCBudW1iZXIsIG9yIGJvb2xlYW4gZXhwZWN0ZWQsICIraSsiIGZvdW5kIikpO2JyZWFrO2Nhc2UiYW55IjpjYXNlImFsbCI6Y2FzZSJub25lIjpmb3IodmFyIGw9MTtsPHIubGVuZ3RoO2wrKylvPW8uY29uY2F0KHQoe2tleTpuKyJbIitsKyJdIix2YWx1ZTpyW2xdLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpO2JyZWFrO2Nhc2UiaGFzIjpjYXNlIiFoYXMiOmk9ZmUoclsxXSksMiE9PXIubGVuZ3RoP28ucHVzaChuZXcgRChuLHIsJ2ZpbHRlciBhcnJheSBmb3IgIicrclswXSsnIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50cycpKToic3RyaW5nIiE9PWkmJm8ucHVzaChuZXcgRChuKyJbMV0iLHJbMV0sInN0cmluZyBleHBlY3RlZCwgIitpKyIgZm91bmQiKSl9cmV0dXJuIG99KHQpfWZ1bmN0aW9uIEhlKHQsZSl7dmFyIHI9dC5rZXksbj10LnN0eWxlLGk9dC5zdHlsZVNwZWMsYT10LnZhbHVlLG89dC5vYmplY3RLZXkscz1pW2UrIl8iK3QubGF5ZXJUeXBlXTtpZighcylyZXR1cm5bXTt2YXIgbD1vLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2lmKCJwYWludCI9PT1lJiZsJiZzW2xbMV1dJiZzW2xbMV1dLnRyYW5zaXRpb24pcmV0dXJuIEtlKHtrZXk6cix2YWx1ZTphLHZhbHVlU3BlYzppLnRyYW5zaXRpb24sc3R5bGU6bixzdHlsZVNwZWM6aX0pO3ZhciBjLHU9dC52YWx1ZVNwZWN8fHNbb107aWYoIXUpcmV0dXJuW25ldyBEKHIsYSwndW5rbm93biBwcm9wZXJ0eSAiJytvKyciJyldO2lmKCJzdHJpbmciPT09ZmUoYSkmJnVbInByb3BlcnR5LWZ1bmN0aW9uIl0mJiF1LnRva2VucyYmKGM9L157KFtefV0rKX0kLy5leGVjKGEpKSlyZXR1cm5bbmV3IEQocixhLCciJytvKyciIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJwb2xhdGlvbiBzeW50YXhcblVzZSBhbiBpZGVudGl0eSBwcm9wZXJ0eSBmdW5jdGlvbiBpbnN0ZWFkOiBgeyAidHlwZSI6ICJpZGVudGl0eSIsICJwcm9wZXJ0eSI6ICcrSlNPTi5zdHJpbmdpZnkoY1sxXSkrIiB9YC4iKV07dmFyIGY9W107cmV0dXJuInN5bWJvbCI9PT10LmxheWVyVHlwZSYmKCJ0ZXh0LWZpZWxkIj09PW8mJm4mJiFuLmdseXBocyYmZi5wdXNoKG5ldyBEKHIsYSwndXNlIG9mICJ0ZXh0LWZpZWxkIiByZXF1aXJlcyBhIHN0eWxlICJnbHlwaHMiIHByb3BlcnR5JykpLCJ0ZXh0LWZvbnQiPT09byYmaGUoQihhKSkmJiJpZGVudGl0eSI9PT1GKGEudHlwZSkmJmYucHVzaChuZXcgRChyLGEsJyJ0ZXh0LWZvbnQiIGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpdHkgZnVuY3Rpb25zJykpKSxmLmNvbmNhdChLZSh7a2V5OnQua2V5LHZhbHVlOmEsdmFsdWVTcGVjOnUsc3R5bGU6bixzdHlsZVNwZWM6aSxleHByZXNzaW9uQ29udGV4dDoicHJvcGVydHkiLHByb3BlcnR5S2V5Om99KSl9ZnVuY3Rpb24gR2UodCl7cmV0dXJuIEhlKHQsInBhaW50Iil9ZnVuY3Rpb24gWWUodCl7cmV0dXJuIEhlKHQsImxheW91dCIpfWZ1bmN0aW9uIFdlKHQpe3ZhciBlPVtdLHI9dC52YWx1ZSxuPXQua2V5LGk9dC5zdHlsZSxhPXQuc3R5bGVTcGVjO3IudHlwZXx8ci5yZWZ8fGUucHVzaChuZXcgRChuLHIsJ2VpdGhlciAidHlwZSIgb3IgInJlZiIgaXMgcmVxdWlyZWQnKSk7dmFyIG8scz1GKHIudHlwZSksbD1GKHIucmVmKTtpZihyLmlkKWZvcih2YXIgYz1GKHIuaWQpLHU9MDt1PHQuYXJyYXlJbmRleDt1Kyspe3ZhciBmPWkubGF5ZXJzW3VdO0YoZi5pZCk9PT1jJiZlLnB1c2gobmV3IEQobixyLmlkLCdkdXBsaWNhdGUgbGF5ZXIgaWQgIicrci5pZCsnIiwgcHJldmlvdXNseSB1c2VkIGF0IGxpbmUgJytmLmlkLl9fbGluZV9fKSl9aWYoInJlZiJpbiByKVsidHlwZSIsInNvdXJjZSIsInNvdXJjZS1sYXllciIsImZpbHRlciIsImxheW91dCJdLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiByJiZlLnB1c2gobmV3IEQobixyW3RdLCciJyt0KyciIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnMnKSl9KSxpLmxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe0YodC5pZCk9PT1sJiYobz10KX0pLG8/by5yZWY/ZS5wdXNoKG5ldyBEKG4sci5yZWYsInJlZiBjYW5ub3QgcmVmZXJlbmNlIGFub3RoZXIgcmVmIGxheWVyIikpOnM9RihvLnR5cGUpOmUucHVzaChuZXcgRChuLHIucmVmLCdyZWYgbGF5ZXIgIicrbCsnIiBub3QgZm91bmQnKSk7ZWxzZSBpZigiYmFja2dyb3VuZCIhPT1zKWlmKHIuc291cmNlKXt2YXIgaD1pLnNvdXJjZXMmJmkuc291cmNlc1tyLnNvdXJjZV0scD1oJiZGKGgudHlwZSk7aD8idmVjdG9yIj09PXAmJiJyYXN0ZXIiPT09cz9lLnB1c2gobmV3IEQobixyLnNvdXJjZSwnbGF5ZXIgIicrci5pZCsnIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2UnKSk6InJhc3RlciI9PT1wJiYicmFzdGVyIiE9PXM/ZS5wdXNoKG5ldyBEKG4sci5zb3VyY2UsJ2xheWVyICInK3IuaWQrJyIgcmVxdWlyZXMgYSB2ZWN0b3Igc291cmNlJykpOiJ2ZWN0b3IiIT09cHx8clsic291cmNlLWxheWVyIl0/InJhc3Rlci1kZW0iPT09cCYmImhpbGxzaGFkZSIhPT1zP2UucHVzaChuZXcgRChuLHIuc291cmNlLCJyYXN0ZXItZGVtIHNvdXJjZSBjYW4gb25seSBiZSB1c2VkIHdpdGggbGF5ZXIgdHlwZSAnaGlsbHNoYWRlJy4iKSk6ImxpbmUiIT09c3x8IXIucGFpbnR8fCFyLnBhaW50WyJsaW5lLWdyYWRpZW50Il18fCJnZW9qc29uIj09PXAmJmgubGluZU1ldHJpY3N8fGUucHVzaChuZXcgRChuLHIsJ2xheWVyICInK3IuaWQrJyIgc3BlY2lmaWVzIGEgbGluZS1ncmFkaWVudCwgd2hpY2ggcmVxdWlyZXMgYSBHZW9KU09OIHNvdXJjZSB3aXRoIGBsaW5lTWV0cmljc2AgZW5hYmxlZC4nKSk6ZS5wdXNoKG5ldyBEKG4sciwnbGF5ZXIgIicrci5pZCsnIiBtdXN0IHNwZWNpZnkgYSAic291cmNlLWxheWVyIicpKTplLnB1c2gobmV3IEQobixyLnNvdXJjZSwnc291cmNlICInK3Iuc291cmNlKyciIG5vdCBmb3VuZCcpKX1lbHNlIGUucHVzaChuZXcgRChuLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInNvdXJjZSInKSk7cmV0dXJuIGU9ZS5jb25jYXQoRWUoe2tleTpuLHZhbHVlOnIsdmFsdWVTcGVjOmEubGF5ZXIsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbigpe3JldHVybltdfSx0eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIEtlKHtrZXk6bisiLnR5cGUiLHZhbHVlOnIudHlwZSx2YWx1ZVNwZWM6YS5sYXllci50eXBlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdDpyLG9iamVjdEtleToidHlwZSJ9KX0sZmlsdGVyOnFlLGxheW91dDpmdW5jdGlvbih0KXtyZXR1cm4gRWUoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbih0KXtyZXR1cm4gWWUoUih7bGF5ZXJUeXBlOnN9LHQpKX19fSl9LHBhaW50OmZ1bmN0aW9uKHQpe3JldHVybiBFZSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKHQpe3JldHVybiBHZShSKHtsYXllclR5cGU6c30sdCkpfX19KX19fSkpfWZ1bmN0aW9uIFhlKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPXQuc3R5bGVTcGVjLGk9dC5zdHlsZTtpZighZS50eXBlKXJldHVybltuZXcgRChyLGUsJyJ0eXBlIiBpcyByZXF1aXJlZCcpXTt2YXIgYT1GKGUudHlwZSksbz1bXTtzd2l0Y2goYSl7Y2FzZSJ2ZWN0b3IiOmNhc2UicmFzdGVyIjpjYXNlInJhc3Rlci1kZW0iOmlmKG89by5jb25jYXQoRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm5bInNvdXJjZV8iK2EucmVwbGFjZSgiLSIsIl8iKV0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6bn0pKSwidXJsImluIGUpZm9yKHZhciBzIGluIGUpWyJ0eXBlIiwidXJsIiwidGlsZVNpemUiXS5pbmRleE9mKHMpPDAmJm8ucHVzaChuZXcgRChyKyIuIitzLGVbc10sJ2Egc291cmNlIHdpdGggYSAidXJsIiBwcm9wZXJ0eSBtYXkgbm90IGluY2x1ZGUgYSAiJytzKyciIHByb3BlcnR5JykpO3JldHVybiBvO2Nhc2UiZ2VvanNvbiI6cmV0dXJuIEVlKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV9nZW9qc29uLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlInZpZGVvIjpyZXR1cm4gRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX3ZpZGVvLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlImltYWdlIjpyZXR1cm4gRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX2ltYWdlLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlImNhbnZhcyI6cmV0dXJuIG8ucHVzaChuZXcgRChyLG51bGwsIlBsZWFzZSB1c2UgcnVudGltZSBBUElzIHRvIGFkZCBjYW52YXMgc291cmNlcywgcmF0aGVyIHRoYW4gaW5jbHVkaW5nIHRoZW0gaW4gc3R5bGVzaGVldHMuIiwic291cmNlLmNhbnZhcyIpKSxvO2RlZmF1bHQ6cmV0dXJuIEllKHtrZXk6cisiLnR5cGUiLHZhbHVlOmUudHlwZSx2YWx1ZVNwZWM6e3ZhbHVlczpbInZlY3RvciIsInJhc3RlciIsInJhc3Rlci1kZW0iLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdfSxzdHlsZTppLHN0eWxlU3BlYzpufSl9fWZ1bmN0aW9uIFplKHQpe3ZhciBlPXQudmFsdWUscj10LnN0eWxlU3BlYyxuPXIubGlnaHQsaT10LnN0eWxlLGE9W10sbz1mZShlKTtpZih2b2lkIDA9PT1lKXJldHVybiBhO2lmKCJvYmplY3QiIT09bylyZXR1cm4gYS5jb25jYXQoW25ldyBEKCJsaWdodCIsZSwib2JqZWN0IGV4cGVjdGVkLCAiK28rIiBmb3VuZCIpXSk7Zm9yKHZhciBzIGluIGUpe3ZhciBsPXMubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7YT1sJiZuW2xbMV1dJiZuW2xbMV1dLnRyYW5zaXRpb24/YS5jb25jYXQoS2Uoe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOnIudHJhbnNpdGlvbixzdHlsZTppLHN0eWxlU3BlYzpyfSkpOm5bc10/YS5jb25jYXQoS2Uoe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOm5bc10sc3R5bGU6aSxzdHlsZVNwZWM6cn0pKTphLmNvbmNhdChbbmV3IEQocyxlW3NdLCd1bmtub3duIHByb3BlcnR5ICInK3MrJyInKV0pfXJldHVybiBhfWZ1bmN0aW9uICRlKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPWZlKGUpO3JldHVybiJzdHJpbmciIT09bj9bbmV3IEQocixlLCJzdHJpbmcgZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOltdfXZhciBKZT17IioiOmZ1bmN0aW9uKCl7cmV0dXJuW119LGFycmF5OkNlLGJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49ZmUoZSk7cmV0dXJuImJvb2xlYW4iIT09bj9bbmV3IEQocixlLCJib29sZWFuIGV4cGVjdGVkLCAiK24rIiBmb3VuZCIpXTpbXX0sbnVtYmVyOkxlLGNvbG9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPWZlKHIpO3JldHVybiJzdHJpbmciIT09bj9bbmV3IEQoZSxyLCJjb2xvciBleHBlY3RlZCwgIituKyIgZm91bmQiKV06bnVsbD09PVEocik/W25ldyBEKGUsciwnY29sb3IgZXhwZWN0ZWQsICInK3IrJyIgZm91bmQnKV06W119LGNvbnN0YW50czpQLGVudW06SWUsZmlsdGVyOnFlLGZ1bmN0aW9uOnplLGxheWVyOldlLG9iamVjdDpFZSxzb3VyY2U6WGUsbGlnaHQ6WmUsc3RyaW5nOiRlfTtmdW5jdGlvbiBLZSh0KXt2YXIgZT10LnZhbHVlLHI9dC52YWx1ZVNwZWMsbj10LnN0eWxlU3BlYztyZXR1cm4gci5mdW5jdGlvbiYmaGUoRihlKSk/emUodCk6ci5mdW5jdGlvbiYmX2UoQihlKSk/T2UodCk6ci50eXBlJiZKZVtyLnR5cGVdP0plW3IudHlwZV0odCk6RWUoUih7fSx0LHt2YWx1ZVNwZWM6ci50eXBlP25bci50eXBlXTpyfSkpfWZ1bmN0aW9uIFFlKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPSRlKHQpO3JldHVybiBuLmxlbmd0aD9uOigtMT09PWUuaW5kZXhPZigie2ZvbnRzdGFja30iKSYmbi5wdXNoKG5ldyBEKHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7Zm9udHN0YWNrfSIgdG9rZW4nKSksLTE9PT1lLmluZGV4T2YoIntyYW5nZX0iKSYmbi5wdXNoKG5ldyBEKHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7cmFuZ2V9IiB0b2tlbicpKSxuKX1mdW5jdGlvbiB0cih0LGUpe2U9ZXx8STt2YXIgcj1bXTtyZXR1cm4gcj1yLmNvbmNhdChLZSh7a2V5OiIiLHZhbHVlOnQsdmFsdWVTcGVjOmUuJHJvb3Qsc3R5bGVTcGVjOmUsc3R5bGU6dCxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7Z2x5cGhzOlFlLCIqIjpmdW5jdGlvbigpe3JldHVybltdfX19KSksdC5jb25zdGFudHMmJihyPXIuY29uY2F0KFAoe2tleToiY29uc3RhbnRzIix2YWx1ZTp0LmNvbnN0YW50cyxzdHlsZTp0LHN0eWxlU3BlYzplfSkpKSxlcihyKX1mdW5jdGlvbiBlcih0KXtyZXR1cm5bXS5jb25jYXQodCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmxpbmUtZS5saW5lfSl9ZnVuY3Rpb24gcnIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGVyKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dHIuc291cmNlPXJyKFhlKSx0ci5saWdodD1ycihaZSksdHIubGF5ZXI9cnIoV2UpLHRyLmZpbHRlcj1ycihxZSksdHIucGFpbnRQcm9wZXJ0eT1ycihHZSksdHIubGF5b3V0UHJvcGVydHk9cnIoWWUpO3ZhciBucj10cixpcj10ci5saWdodCxhcj10ci5wYWludFByb3BlcnR5LG9yPXRyLmxheW91dFByb3BlcnR5O2Z1bmN0aW9uIHNyKHQsZSl7dmFyIHI9ITE7aWYoZSYmZS5sZW5ndGgpZm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0LmZpcmUobmV3IHoobmV3IEVycm9yKGEubWVzc2FnZSkpKSxyPSEwfXJldHVybiByfXZhciBscj11cixjcj0zO2Z1bmN0aW9uIHVyKHQsZSxyKXt2YXIgbj10aGlzLmNlbGxzPVtdO2lmKHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7dGhpcy5hcnJheUJ1ZmZlcj10O3ZhciBpPW5ldyBJbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO3Q9aVswXSxlPWlbMV0scj1pWzJdLHRoaXMuZD1lKzIqcjtmb3IodmFyIGE9MDthPHRoaXMuZCp0aGlzLmQ7YSsrKXt2YXIgbz1pW2NyK2FdLHM9aVtjcithKzFdO24ucHVzaChvPT09cz9udWxsOmkuc3ViYXJyYXkobyxzKSl9dmFyIGw9aVtjcituLmxlbmd0aF0sYz1pW2NyK24ubGVuZ3RoKzFdO3RoaXMua2V5cz1pLnN1YmFycmF5KGwsYyksdGhpcy5iYm94ZXM9aS5zdWJhcnJheShjKSx0aGlzLmluc2VydD10aGlzLl9pbnNlcnRSZWFkb25seX1lbHNle3RoaXMuZD1lKzIqcjtmb3IodmFyIHU9MDt1PHRoaXMuZCp0aGlzLmQ7dSsrKW4ucHVzaChbXSk7dGhpcy5rZXlzPVtdLHRoaXMuYmJveGVzPVtdfXRoaXMubj1lLHRoaXMuZXh0ZW50PXQsdGhpcy5wYWRkaW5nPXIsdGhpcy5zY2FsZT1lL3QsdGhpcy51aWQ9MDt2YXIgZj1yL2UqdDt0aGlzLm1pbj0tZix0aGlzLm1heD10K2Z9dXIucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuX2ZvckVhY2hDZWxsKGUscixuLGksdGhpcy5faW5zZXJ0Q2VsbCx0aGlzLnVpZCsrKSx0aGlzLmtleXMucHVzaCh0KSx0aGlzLmJib3hlcy5wdXNoKGUpLHRoaXMuYmJveGVzLnB1c2gociksdGhpcy5iYm94ZXMucHVzaChuKSx0aGlzLmJib3hlcy5wdXNoKGkpfSx1ci5wcm90b3R5cGUuX2luc2VydFJlYWRvbmx5PWZ1bmN0aW9uKCl7dGhyb3ciQ2Fubm90IGluc2VydCBpbnRvIGEgR3JpZEluZGV4IGNyZWF0ZWQgZnJvbSBhbiBBcnJheUJ1ZmZlci4ifSx1ci5wcm90b3R5cGUuX2luc2VydENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2VsbHNbaV0ucHVzaChhKX0sdXIucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubWluLGE9dGhpcy5tYXg7aWYodDw9aSYmZTw9aSYmYTw9ciYmYTw9bilyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5rZXlzKTt2YXIgbz1bXTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsbyx7fSksb30sdXIucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dGhpcy5jZWxsc1tpXTtpZihudWxsIT09cylmb3IodmFyIGw9dGhpcy5rZXlzLGM9dGhpcy5iYm94ZXMsdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgZj1zW3VdO2lmKHZvaWQgMD09PW9bZl0pe3ZhciBoPTQqZjt0PD1jW2grMl0mJmU8PWNbaCszXSYmcj49Y1toKzBdJiZuPj1jW2grMV0/KG9bZl09ITAsYS5wdXNoKGxbZl0pKTpvW2ZdPSExfX19LHVyLnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh0KSxsPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChlKSxjPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChyKSx1PXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChuKSxmPXM7Zjw9YztmKyspZm9yKHZhciBoPWw7aDw9dTtoKyspe3ZhciBwPXRoaXMuZCpoK2Y7aWYoaS5jYWxsKHRoaXMsdCxlLHIsbixwLGEsbykpcmV0dXJufX0sdXIucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5kLTEsTWF0aC5mbG9vcih0KnRoaXMuc2NhbGUpK3RoaXMucGFkZGluZykpfSx1ci5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKHRoaXMuYXJyYXlCdWZmZXIpcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXI7Zm9yKHZhciB0PXRoaXMuY2VsbHMsZT1jcit0aGlzLmNlbGxzLmxlbmd0aCsxKzEscj0wLG49MDtuPHRoaXMuY2VsbHMubGVuZ3RoO24rKylyKz10aGlzLmNlbGxzW25dLmxlbmd0aDt2YXIgaT1uZXcgSW50MzJBcnJheShlK3IrdGhpcy5rZXlzLmxlbmd0aCt0aGlzLmJib3hlcy5sZW5ndGgpO2lbMF09dGhpcy5leHRlbnQsaVsxXT10aGlzLm4saVsyXT10aGlzLnBhZGRpbmc7Zm9yKHZhciBhPWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lbY3Irb109YSxpLnNldChzLGEpLGErPXMubGVuZ3RofXJldHVybiBpW2NyK3QubGVuZ3RoXT1hLGkuc2V0KHRoaXMua2V5cyxhKSxhKz10aGlzLmtleXMubGVuZ3RoLGlbY3IrdC5sZW5ndGgrMV09YSxpLnNldCh0aGlzLmJib3hlcyxhKSxhKz10aGlzLmJib3hlcy5sZW5ndGgsaS5idWZmZXJ9O3ZhciBmcj1zZWxmLkltYWdlRGF0YSxocj17fTtmdW5jdGlvbiBwcih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfY2xhc3NSZWdpc3RyeUtleSIse3ZhbHVlOnQsd3JpdGVhYmxlOiExfSksaHJbdF09e2tsYXNzOmUsb21pdDpyLm9taXR8fFtdLHNoYWxsb3c6ci5zaGFsbG93fHxbXX19Zm9yKHZhciBkciBpbiBwcigiT2JqZWN0IixPYmplY3QpLGxyLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPXQudG9BcnJheUJ1ZmZlcigpO3JldHVybiBlJiZlLnB1c2gocikscn0sbHIuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBscih0KX0scHIoIkdyaWQiLGxyKSxwcigiQ29sb3IiLHR0KSxwcigiRXJyb3IiLEVycm9yKSxwcigiU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uIixNZSkscHIoIlN0eWxlRXhwcmVzc2lvbiIsYmUse29taXQ6WyJfZXZhbHVhdG9yIl19KSxwcigiWm9vbURlcGVuZGVudEV4cHJlc3Npb24iLFRlKSxwcigiWm9vbUNvbnN0YW50RXhwcmVzc2lvbiIsa2UpLHByKCJDb21wb3VuZEV4cHJlc3Npb24iLGd0LHtvbWl0OlsiX2V2YWx1YXRlIl19KSxSdClSdFtkcl0uX2NsYXNzUmVnaXN0cnlLZXl8fHByKCJFeHByZXNzaW9uXyIrZHIsUnRbZHJdKTtmdW5jdGlvbiBncih0LGUpe2lmKG51bGw9PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdHx8InN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBlJiZlLnB1c2godCksdDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpe3ZhciByPXQ7cmV0dXJuIGUmJmUucHVzaChyLmJ1ZmZlcikscn1pZih0IGluc3RhbmNlb2YgZnIpcmV0dXJuIGUmJmUucHVzaCh0LmRhdGEuYnVmZmVyKSx0O2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj1bXSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuLnB1c2goZ3IobyxlKSl9cmV0dXJuIG59aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgcz10LmNvbnN0cnVjdG9yLGw9cy5fY2xhc3NSZWdpc3RyeUtleTtpZighbCl0aHJvdyBuZXcgRXJyb3IoImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdW5yZWdpc3RlcmVkIGNsYXNzIik7dmFyIGM9e307aWYocy5zZXJpYWxpemUpYy5fc2VyaWFsaXplZD1zLnNlcmlhbGl6ZSh0LGUpO2Vsc2V7Zm9yKHZhciB1IGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eSh1KSYmIShocltsXS5vbWl0LmluZGV4T2YodSk+PTApKXt2YXIgZj10W3VdO2NbdV09aHJbbF0uc2hhbGxvdy5pbmRleE9mKHUpPj0wP2Y6Z3IoZixlKX10IGluc3RhbmNlb2YgRXJyb3ImJihjLm1lc3NhZ2U9dC5tZXNzYWdlKX1yZXR1cm57bmFtZTpsLHByb3BlcnRpZXM6Y319dGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gdnIodCl7aWYobnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHwic3RyaW5nIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cHx8dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fHQgaW5zdGFuY2VvZiBmcilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdnIodCl9KTtpZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlPXQscj1lLm5hbWUsbj1lLnByb3BlcnRpZXM7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBkZXNlcmlhbGl6ZSBvYmplY3Qgb2YgYW5vbnltb3VzIGNsYXNzIik7dmFyIGk9aHJbcl0ua2xhc3M7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBkZXNlcmlhbGl6ZSB1bnJlZ2lzdGVyZWQgY2xhc3MgIityKTtpZihpLmRlc2VyaWFsaXplKXJldHVybiBpLmRlc2VyaWFsaXplKG4uX3NlcmlhbGl6ZWQpO2Zvcih2YXIgYT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxvPTAscz1PYmplY3Qua2V5cyhuKTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107YVtsXT1ocltyXS5zaGFsbG93LmluZGV4T2YobCk+PTA/bltsXTp2cihuW2xdKX1yZXR1cm4gYX10aHJvdyBuZXcgRXJyb3IoImNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICIrdHlwZW9mIHQpfXZhciBtcj1mdW5jdGlvbigpe3RoaXMuZmlyc3Q9ITB9O21yLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmZsb29yKHQpO3JldHVybiB0aGlzLmZpcnN0Pyh0aGlzLmZpcnN0PSExLHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPTAsdGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKToodGhpcy5sYXN0Rmxvb3Jab29tPnI/KHRoaXMubGFzdEludGVnZXJab29tPXIrMSx0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9ZSk6dGhpcy5sYXN0Rmxvb3Jab29tPHImJih0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKSx0IT09dGhpcy5sYXN0Wm9vbSYmKHRoaXMubGFzdFpvb209dCx0aGlzLmxhc3RGbG9vclpvb209ciwhMCkpfTt2YXIgeXI9eyJMYXRpbi0xIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgmJnQ8PTI1NX0sQXJhYmljOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xNTM2JiZ0PD0xNzkxfSwiQXJhYmljIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xODcyJiZ0PD0xOTE5fSwiQXJhYmljIEV4dGVuZGVkLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMjA4JiZ0PD0yMzAzfSwiSGFuZ3VsIEphbW8iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzUyJiZ0PD00NjA3fSwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTUxMjAmJnQ8PTU3NTl9LEtobWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02MDE2JiZ0PD02MTQzfSwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYzMjAmJnQ8PTYzOTl9LCJHZW5lcmFsIFB1bmN0dWF0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODE5MiYmdDw9ODMwM30sIkxldHRlcmxpa2UgU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg0NDgmJnQ8PTg1Mjd9LCJOdW1iZXIgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04NTI4JiZ0PD04NTkxfSwiTWlzY2VsbGFuZW91cyBUZWNobmljYWwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04OTYwJiZ0PD05MjE1fSwiQ29udHJvbCBQaWN0dXJlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyMTYmJnQ8PTkyNzl9LCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyODAmJnQ8PTkzMTF9LCJFbmNsb3NlZCBBbHBoYW51bWVyaWNzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTMxMiYmdDw9OTQ3MX0sIkdlb21ldHJpYyBTaGFwZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NjMyJiZ0PD05NzI3fSwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTcyOCYmdDw9OTk4M30sIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTEwMDgmJnQ8PTExMjYzfSwiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTkwNCYmdDw9MTIwMzF9LCJLYW5neGkgUmFkaWNhbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjAzMiYmdDw9MTIyNTV9LCJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyNzImJnQ8PTEyMjg3fSwiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyODgmJnQ8PTEyMzUxfSxIaXJhZ2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIzNTImJnQ8PTEyNDQ3fSxLYXRha2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI0NDgmJnQ8PTEyNTQzfSxCb3BvbW9mbzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1NDQmJnQ8PTEyNTkxfSwiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNTkyJiZ0PD0xMjY4N30sS2FuYnVuOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjY4OCYmdDw9MTI3MDN9LCJCb3BvbW9mbyBFeHRlbmRlZCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzA0JiZ0PD0xMjczNX0sIkNKSyBTdHJva2VzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MzYmJnQ8PTEyNzgzfSwiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzg0JiZ0PD0xMjc5OX0sIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgwMCYmdDw9MTMwNTV9LCJDSksgQ29tcGF0aWJpbGl0eSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMDU2JiZ0PD0xMzMxMX0sIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMzMxMiYmdDw9MTk5MDN9LCJZaWppbmcgSGV4YWdyYW0gU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTA0JiZ0PD0xOTk2N30sIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xOTk2OCYmdDw9NDA5NTl9LCJZaSBTeWxsYWJsZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MDk2MCYmdDw9NDIxMjd9LCJZaSBSYWRpY2FscyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQyMTI4JiZ0PD00MjE5MX0sIkhhbmd1bCBKYW1vIEV4dGVuZGVkLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzM2MCYmdDw9NDMzOTF9LCJIYW5ndWwgU3lsbGFibGVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDQwMzImJnQ8PTU1MjE1fSwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU1MjE2JiZ0PD01NTI5NX0sIlByaXZhdGUgVXNlIEFyZWEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01NzM0NCYmdDw9NjM3NDN9LCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjM3NDQmJnQ8PTY0MjU1fSwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjQzMzYmJnQ8PTY1MDIzfSwiVmVydGljYWwgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTA0MCYmdDw9NjUwNTV9LCJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDcyJiZ0PD02NTEwM30sIlNtYWxsIEZvcm0gVmFyaWFudHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEwNCYmdDw9NjUxMzV9LCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEzNiYmdDw9NjUyNzl9LCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MjgwJiZ0PD02NTUxOX19O2Z1bmN0aW9uIHhyKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpaWYoX3IocltlXS5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBicih0KXtyZXR1cm4hKHlyLkFyYWJpYyh0KXx8eXJbIkFyYWJpYyBTdXBwbGVtZW50Il0odCl8fHlyWyJBcmFiaWMgRXh0ZW5kZWQtQSJdKHQpfHx5clsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIl0odCl8fHlyWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiXSh0KSl9ZnVuY3Rpb24gX3IodCl7cmV0dXJuISEoNzQ2PT09dHx8NzQ3PT09dHx8ISh0PDQzNTIpJiYoeXJbIkJvcG9tb2ZvIEV4dGVuZGVkIl0odCl8fHlyLkJvcG9tb2ZvKHQpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KSYmISh0Pj02NTA5NyYmdDw9NjUxMDMpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyJdKHQpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkiXSh0KXx8eXJbIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50Il0odCl8fHlyWyJDSksgU3Ryb2tlcyJdKHQpfHwhKCF5clsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fHQ+PTEyMjk2JiZ0PD0xMjMwNXx8dD49MTIzMDgmJnQ8PTEyMzE5fHwxMjMzNj09PXQpfHx5clsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSJdKHQpfHx5clsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKHQpfHx5clsiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyJdKHQpfHx5clsiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyJdKHQpfHx5clsiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSJdKHQpfHx5clsiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiJdKHQpfHx5clsiSGFuZ3VsIEphbW8iXSh0KXx8eXJbIkhhbmd1bCBTeWxsYWJsZXMiXSh0KXx8eXIuSGlyYWdhbmEodCl8fHlyWyJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIl0odCl8fHlyLkthbmJ1bih0KXx8eXJbIkthbmd4aSBSYWRpY2FscyJdKHQpfHx5clsiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyJdKHQpfHx5ci5LYXRha2FuYSh0KSYmMTI1NDAhPT10fHwhKCF5clsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXSh0KXx8NjUyODg9PT10fHw2NTI4OT09PXR8fDY1MjkzPT09dHx8dD49NjUzMDYmJnQ8PTY1MzEwfHw2NTMzOT09PXR8fDY1MzQxPT09dHx8NjUzNDM9PT10fHx0Pj02NTM3MSYmdDw9NjU1MDN8fDY1NTA3PT09dHx8dD49NjU1MTImJnQ8PTY1NTE5KXx8ISgheXJbIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8dD49NjUxMTImJnQ8PTY1MTE4fHx0Pj02NTEyMyYmdDw9NjUxMjYpfHx5clsiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyJdKHQpfHx5clsiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCJdKHQpfHx5clsiVmVydGljYWwgRm9ybXMiXSh0KXx8eXJbIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzIl0odCl8fHlyWyJZaSBTeWxsYWJsZXMiXSh0KXx8eXJbIllpIFJhZGljYWxzIl0odCkpKX1mdW5jdGlvbiB3cih0KXtyZXR1cm4hKF9yKHQpfHxmdW5jdGlvbih0KXtyZXR1cm4hISh5clsiTGF0aW4tMSBTdXBwbGVtZW50Il0odCkmJigxNjc9PT10fHwxNjk9PT10fHwxNzQ9PT10fHwxNzc9PT10fHwxODg9PT10fHwxODk9PT10fHwxOTA9PT10fHwyMTU9PT10fHwyNDc9PT10KXx8eXJbIkdlbmVyYWwgUHVuY3R1YXRpb24iXSh0KSYmKDgyMTQ9PT10fHw4MjI0PT09dHx8ODIyNT09PXR8fDgyNDA9PT10fHw4MjQxPT09dHx8ODI1MT09PXR8fDgyNTI9PT10fHw4MjU4PT09dHx8ODI2Mz09PXR8fDgyNjQ9PT10fHw4MjY1PT09dHx8ODI3Mz09PXQpfHx5clsiTGV0dGVybGlrZSBTeW1ib2xzIl0odCl8fHlyWyJOdW1iZXIgRm9ybXMiXSh0KXx8eXJbIk1pc2NlbGxhbmVvdXMgVGVjaG5pY2FsIl0odCkmJih0Pj04OTYwJiZ0PD04OTY3fHx0Pj04OTcyJiZ0PD04OTkxfHx0Pj04OTk2JiZ0PD05ZTN8fDkwMDM9PT10fHx0Pj05MDg1JiZ0PD05MTE0fHx0Pj05MTUwJiZ0PD05MTY1fHw5MTY3PT09dHx8dD49OTE2OSYmdDw9OTE3OXx8dD49OTE4NiYmdDw9OTIxNSl8fHlyWyJDb250cm9sIFBpY3R1cmVzIl0odCkmJjkyNTEhPT10fHx5clsiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24iXSh0KXx8eXJbIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiXSh0KXx8eXJbIkdlb21ldHJpYyBTaGFwZXMiXSh0KXx8eXJbIk1pc2NlbGxhbmVvdXMgU3ltYm9scyJdKHQpJiYhKHQ+PTk3NTQmJnQ8PTk3NTkpfHx5clsiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MiXSh0KSYmKHQ+PTExMDI2JiZ0PD0xMTA1NXx8dD49MTEwODgmJnQ8PTExMDk3fHx0Pj0xMTE5MiYmdDw9MTEyNDMpfHx5clsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fHlyLkthdGFrYW5hKHQpfHx5clsiUHJpdmF0ZSBVc2UgQXJlYSJdKHQpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KXx8eXJbIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8eXJbIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIl0odCl8fDg3MzQ9PT10fHw4NzU2PT09dHx8ODc1Nz09PXR8fHQ+PTk5ODQmJnQ8PTEwMDg3fHx0Pj0xMDEwMiYmdDw9MTAxMzF8fDY1NTMyPT09dHx8NjU1MzM9PT10KX0odCkpfWZ1bmN0aW9uIGtyKHQsZSl7cmV0dXJuISghZSYmKHQ+PTE0MjQmJnQ8PTIzMDN8fHlyWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiXSh0KXx8eXJbIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiJdKHQpKXx8dD49MjMwNCYmdDw9MzU4M3x8dD49Mzg0MCYmdDw9NDI1NXx8eXIuS2htZXIodCkpfXZhciBUcixBcj0hMSxNcj1udWxsLFNyPSExLEVyPW5ldyBPLENyPXthcHBseUFyYWJpY1NoYXBpbmc6bnVsbCxwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ6bnVsbCxpc0xvYWRlZDpmdW5jdGlvbigpe3JldHVybiBTcnx8bnVsbCE9Q3IuYXBwbHlBcmFiaWNTaGFwaW5nfX0sTHI9ZnVuY3Rpb24odCxlKXt0aGlzLnpvb209dCxlPyh0aGlzLm5vdz1lLm5vdyx0aGlzLmZhZGVEdXJhdGlvbj1lLmZhZGVEdXJhdGlvbix0aGlzLnpvb21IaXN0b3J5PWUuem9vbUhpc3RvcnksdGhpcy50cmFuc2l0aW9uPWUudHJhbnNpdGlvbik6KHRoaXMubm93PTAsdGhpcy5mYWRlRHVyYXRpb249MCx0aGlzLnpvb21IaXN0b3J5PW5ldyBtcix0aGlzLnRyYW5zaXRpb249e30pfTtMci5wcm90b3R5cGUuaXNTdXBwb3J0ZWRTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSlpZigha3IobltyXS5jaGFyQ29kZUF0KDApLGUpKXJldHVybiExO3JldHVybiEwfSh0LENyLmlzTG9hZGVkKCkpfSxMci5wcm90b3R5cGUuY3Jvc3NGYWRpbmdGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZmFkZUR1cmF0aW9uPzE6TWF0aC5taW4oKHRoaXMubm93LXRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tVGltZSkvdGhpcy5mYWRlRHVyYXRpb24sMSl9O3ZhciB6cj1mdW5jdGlvbih0LGUpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5leHByZXNzaW9uPVNlKHZvaWQgMD09PWU/dC5zcGVjaWZpY2F0aW9uLmRlZmF1bHQ6ZSx0LnNwZWNpZmljYXRpb24pfTt6ci5wcm90b3R5cGUuaXNEYXRhRHJpdmVuPWZ1bmN0aW9uKCl7cmV0dXJuInNvdXJjZSI9PT10aGlzLmV4cHJlc3Npb24ua2luZHx8ImNvbXBvc2l0ZSI9PT10aGlzLmV4cHJlc3Npb24ua2luZH0senIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvcGVydHkucG9zc2libHlFdmFsdWF0ZSh0aGlzLHQpfTt2YXIgT3I9ZnVuY3Rpb24odCl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9bmV3IHpyKHQsdm9pZCAwKX07T3IucHJvdG90eXBlLnRyYW5zaXRpb25lZD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgRHIodGhpcy5wcm9wZXJ0eSx0aGlzLnZhbHVlLGUscCh7fSx0LnRyYW5zaXRpb24sdGhpcy50cmFuc2l0aW9uKSx0Lm5vdyl9LE9yLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe3JldHVybiBuZXcgRHIodGhpcy5wcm9wZXJ0eSx0aGlzLnZhbHVlLG51bGwse30sMCl9O3ZhciBJcj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyl9O0lyLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udmFsdWUudmFsdWUpfSxJci5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLl92YWx1ZXNbdF09bmV3IE9yKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSkpLHRoaXMuX3ZhbHVlc1t0XS52YWx1ZT1uZXcgenIodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDp4KGUpKX0sSXIucHJvdG90eXBlLmdldFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHgodGhpcy5fdmFsdWVzW3RdLnRyYW5zaXRpb24pfSxJci5wcm90b3R5cGUuc2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgT3IodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnRyYW5zaXRpb249eChlKXx8dm9pZCAwfSxJci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9LGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9dGhpcy5nZXRWYWx1ZShuKTt2b2lkIDAhPT1pJiYodFtuXT1pKTt2YXIgYT10aGlzLmdldFRyYW5zaXRpb24obik7dm9pZCAwIT09YSYmKHRbbisiLXRyYW5zaXRpb24iXT1hKX1yZXR1cm4gdH0sSXIucHJvdG90eXBlLnRyYW5zaXRpb25lZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgUHIodGhpcy5fcHJvcGVydGllcyksbj0wLGk9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07ci5fdmFsdWVzW2FdPXRoaXMuX3ZhbHVlc1thXS50cmFuc2l0aW9uZWQodCxlLl92YWx1ZXNbYV0pfXJldHVybiByfSxJci5wcm90b3R5cGUudW50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IFByKHRoaXMuX3Byb3BlcnRpZXMpLGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO3QuX3ZhbHVlc1tuXT10aGlzLl92YWx1ZXNbbl0udW50cmFuc2l0aW9uZWQoKX1yZXR1cm4gdH07dmFyIERyPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmJlZ2luPWkrbi5kZWxheXx8MCx0aGlzLmVuZD10aGlzLmJlZ2luK24uZHVyYXRpb258fDAsdC5zcGVjaWZpY2F0aW9uLnRyYW5zaXRpb24mJihuLmRlbGF5fHxuLmR1cmF0aW9uKSYmKHRoaXMucHJpb3I9cil9O0RyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubm93fHwwLHI9dGhpcy52YWx1ZS5wb3NzaWJseUV2YWx1YXRlKHQpLG49dGhpcy5wcmlvcjtpZihuKXtpZihlPnRoaXMuZW5kKXJldHVybiB0aGlzLnByaW9yPW51bGwscjtpZih0aGlzLnZhbHVlLmlzRGF0YURyaXZlbigpKXJldHVybiB0aGlzLnByaW9yPW51bGwscjtpZihlPHRoaXMuYmVnaW4pcmV0dXJuIG4ucG9zc2libHlFdmFsdWF0ZSh0KTt2YXIgaT0oZS10aGlzLmJlZ2luKS8odGhpcy5lbmQtdGhpcy5iZWdpbik7cmV0dXJuIHRoaXMucHJvcGVydHkuaW50ZXJwb2xhdGUobi5wb3NzaWJseUV2YWx1YXRlKHQpLHIsZnVuY3Rpb24odCl7aWYoaTw9MClyZXR1cm4gMDtpZihpPj0xKXJldHVybiAxO3ZhciBlPWkqaSxyPWUqaTtyZXR1cm4gNCooaTwuNT9yOjMqKGktZSkrci0uNzUpfSgpKX1yZXR1cm4gcn07dmFyIFByPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXMpfTtQci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEJyKHRoaXMuX3Byb3BlcnRpZXMpLHI9MCxuPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2UuX3ZhbHVlc1tpXT10aGlzLl92YWx1ZXNbaV0ucG9zc2libHlFdmFsdWF0ZSh0KX1yZXR1cm4gZX0sUHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2lmKHRoaXMuX3ZhbHVlc1tyXS5wcmlvcilyZXR1cm4hMH1yZXR1cm4hMX07dmFyIFJyPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQcm9wZXJ0eVZhbHVlcyl9O1JyLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udmFsdWUpfSxSci5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXNbdF09bmV3IHpyKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSxudWxsPT09ZT92b2lkIDA6eChlKSl9LFJyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpfXJldHVybiB0fSxSci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEJyKHRoaXMuX3Byb3BlcnRpZXMpLHI9MCxuPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2UuX3ZhbHVlc1tpXT10aGlzLl92YWx1ZXNbaV0ucG9zc2libHlFdmFsdWF0ZSh0KX1yZXR1cm4gZX07dmFyIEZyPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuZ2xvYmFscz1yfTtGci5wcm90b3R5cGUuaXNDb25zdGFudD1mdW5jdGlvbigpe3JldHVybiJjb25zdGFudCI9PT10aGlzLnZhbHVlLmtpbmR9LEZyLnByb3RvdHlwZS5jb25zdGFudE9yPWZ1bmN0aW9uKHQpe3JldHVybiJjb25zdGFudCI9PT10aGlzLnZhbHVlLmtpbmQ/dGhpcy52YWx1ZS52YWx1ZTp0fSxGci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvcGVydHkuZXZhbHVhdGUodGhpcy52YWx1ZSx0aGlzLmdsb2JhbHMsdCl9O3ZhciBCcj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXMpfTtCci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWx1ZXNbdF19O3ZhciBOcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07TnIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSxOci5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWt0W3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uKHQsZSxyKTp0fTt2YXIganI9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O2pyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuImNvbnN0YW50Ij09PXQuZXhwcmVzc2lvbi5raW5kfHwiY2FtZXJhIj09PXQuZXhwcmVzc2lvbi5raW5kP25ldyBGcih0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSxlKTpuZXcgRnIodGhpcyx0LmV4cHJlc3Npb24sZSl9LGpyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7aWYoImNvbnN0YW50IiE9PXQudmFsdWUua2luZHx8ImNvbnN0YW50IiE9PWUudmFsdWUua2luZClyZXR1cm4gdDtpZih2b2lkIDA9PT10LnZhbHVlLnZhbHVlfHx2b2lkIDA9PT1lLnZhbHVlLnZhbHVlKXJldHVybiBuZXcgRnIodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOnZvaWQgMH0sdC5nbG9iYWxzKTt2YXIgbj1rdFt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07cmV0dXJuIG4/bmV3IEZyKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTpuKHQudmFsdWUudmFsdWUsZS52YWx1ZS52YWx1ZSxyKX0sdC5nbG9iYWxzKTp0fSxqci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiJjb25zdGFudCI9PT10LmtpbmQ/dC52YWx1ZTp0LmV2YWx1YXRlKGUscil9O3ZhciBWcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07VnIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT10LnZhbHVlKXtpZigiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciByPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKHIscixyLGUpfXJldHVybiB0aGlzLl9jYWxjdWxhdGUodC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbS0xKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbSksZSkpLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIoTWF0aC5mbG9vcihlLnpvb20rMSksZSkpLGUpfX0sVnIucHJvdG90eXBlLl9jYWxjdWxhdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi56b29tLGE9aS1NYXRoLmZsb29yKGkpLG89bi5jcm9zc0ZhZGluZ0ZhY3RvcigpO3JldHVybiBpPm4uem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tOnQsdG86ZSxmcm9tU2NhbGU6Mix0b1NjYWxlOjEsdDphKygxLWEpKm99Ontmcm9tOnIsdG86ZSxmcm9tU2NhbGU6LjUsdG9TY2FsZToxLHQ6MS0oMS1vKSphfX0sVnIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0fTt2YXIgVXI9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O1VyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LFVyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbigpe3JldHVybiExfTt2YXIgcXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvcGVydGllcz10LHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzPXt9LHQpe3ZhciByPXRbZV0sbj10aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgenIocix2b2lkIDApLGk9dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgT3Iocik7dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzW2VdPWkudW50cmFuc2l0aW9uZWQoKSx0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlc1tlXT1uLnBvc3NpYmx5RXZhbHVhdGUoe30pfX07cHIoIkRhdGFEcml2ZW5Qcm9wZXJ0eSIsanIpLHByKCJEYXRhQ29uc3RhbnRQcm9wZXJ0eSIsTnIpLHByKCJDcm9zc0ZhZGVkUHJvcGVydHkiLFZyKSxwcigiQ29sb3JSYW1wUHJvcGVydHkiLFVyKTt2YXIgSHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe2Zvcih2YXIgbiBpbiB0LmNhbGwodGhpcyksdGhpcy5pZD1lLmlkLHRoaXMubWV0YWRhdGE9ZS5tZXRhZGF0YSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMubWluem9vbT1lLm1pbnpvb20sdGhpcy5tYXh6b29tPWUubWF4em9vbSx0aGlzLnZpc2liaWxpdHk9InZpc2libGUiLCJiYWNrZ3JvdW5kIiE9PWUudHlwZSYmKHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMuc291cmNlTGF5ZXI9ZVsic291cmNlLWxheWVyIl0sdGhpcy5maWx0ZXI9ZS5maWx0ZXIpLHRoaXMuX2ZlYXR1cmVGaWx0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sci5sYXlvdXQmJih0aGlzLl91bmV2YWx1YXRlZExheW91dD1uZXcgUnIoci5sYXlvdXQpKSx0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50PW5ldyBJcihyLnBhaW50KSxlLnBhaW50KXRoaXMuc2V0UGFpbnRQcm9wZXJ0eShuLGUucGFpbnRbbl0se3ZhbGlkYXRlOiExfSk7Zm9yKHZhciBpIGluIGUubGF5b3V0KXRoaXMuc2V0TGF5b3V0UHJvcGVydHkoaSxlLmxheW91dFtpXSx7dmFsaWRhdGU6ITF9KTt0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC51bnRyYW5zaXRpb25lZCgpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4idmlzaWJpbGl0eSI9PT10P3RoaXMudmlzaWJpbGl0eTp0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGwhPWUpe3ZhciBuPSJsYXllcnMuIit0aGlzLmlkKyIubGF5b3V0LiIrdDtpZih0aGlzLl92YWxpZGF0ZShvcixuLHQsZSxyKSlyZXR1cm59InZpc2liaWxpdHkiIT09dD90aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZSh0LGUpOnRoaXMudmlzaWJpbGl0eT0ibm9uZSI9PT1lP2U6InZpc2libGUifSxlLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsIi10cmFuc2l0aW9uIik/dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRUcmFuc2l0aW9uKHQuc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpKTp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFZhbHVlKHQpfSxlLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsIT1lKXt2YXIgbj0ibGF5ZXJzLiIrdGhpcy5pZCsiLnBhaW50LiIrdDtpZih0aGlzLl92YWxpZGF0ZShhcixuLHQsZSxyKSlyZXR1cm59dih0LCItdHJhbnNpdGlvbiIpP3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSxlfHx2b2lkIDApOnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VmFsdWUodCxlKX0sZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24odCl7cmV0dXJuISEodGhpcy5taW56b29tJiZ0PHRoaXMubWluem9vbSl8fCEhKHRoaXMubWF4em9vbSYmdD49dGhpcy5tYXh6b29tKXx8Im5vbmUiPT09dGhpcy52aXNpYmlsaXR5fSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQpfSxlLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5oYXNUcmFuc2l0aW9uKCl9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3VuZXZhbHVhdGVkTGF5b3V0JiYodGhpcy5sYXlvdXQ9dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQucG9zc2libHlFdmFsdWF0ZSh0KSksdGhpcy5wYWludD10aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZSh0KX0sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e2lkOnRoaXMuaWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuc291cmNlLCJzb3VyY2UtbGF5ZXIiOnRoaXMuc291cmNlTGF5ZXIsbWV0YWRhdGE6dGhpcy5tZXRhZGF0YSxtaW56b29tOnRoaXMubWluem9vbSxtYXh6b29tOnRoaXMubWF4em9vbSxmaWx0ZXI6dGhpcy5maWx0ZXIsbGF5b3V0OnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0JiZ0aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXJpYWxpemUoKSxwYWludDp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50JiZ0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNlcmlhbGl6ZSgpfTtyZXR1cm4ibm9uZSI9PT10aGlzLnZpc2liaWxpdHkmJih0LmxheW91dD10LmxheW91dHx8e30sdC5sYXlvdXQudmlzaWJpbGl0eT0ibm9uZSIpLHkodCxmdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwPT09dHx8ImxheW91dCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RofHwicGFpbnQiPT09ZSYmIU9iamVjdC5rZXlzKHQpLmxlbmd0aCl9KX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuKCFpfHwhMSE9PWkudmFsaWRhdGUpJiZzcih0aGlzLHQuY2FsbChucix7a2V5OmUsbGF5ZXJUeXBlOnRoaXMudHlwZSxvYmplY3RLZXk6cix2YWx1ZTpuLHN0eWxlU3BlYzpJLHN0eWxlOntnbHlwaHM6ITAsc3ByaXRlOiEwfX0pKX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt9LGV9KE8pLEdyPXtJbnQ4OkludDhBcnJheSxVaW50ODpVaW50OEFycmF5LEludDE2OkludDE2QXJyYXksVWludDE2OlVpbnQxNkFycmF5LEludDMyOkludDMyQXJyYXksVWludDMyOlVpbnQzMkFycmF5LEZsb2F0MzI6RmxvYXQzMkFycmF5fSxZcj1mdW5jdGlvbih0LGUpe3RoaXMuX3N0cnVjdEFycmF5PXQsdGhpcy5fcG9zMT1lKnRoaXMuc2l6ZSx0aGlzLl9wb3MyPXRoaXMuX3BvczEvMix0aGlzLl9wb3M0PXRoaXMuX3BvczEvNCx0aGlzLl9wb3M4PXRoaXMuX3BvczEvOH0sV3I9ZnVuY3Rpb24oKXt0aGlzLmlzVHJhbnNmZXJyZWQ9ITEsdGhpcy5jYXBhY2l0eT0tMSx0aGlzLnJlc2l6ZSgwKX07ZnVuY3Rpb24gWHIodCxlKXt2b2lkIDA9PT1lJiYoZT0xKTt2YXIgcj0wLG49MDtyZXR1cm57bWVtYmVyczp0Lm1hcChmdW5jdGlvbih0KXt2YXIgaSxhPShpPXQudHlwZSxHcltpXS5CWVRFU19QRVJfRUxFTUVOVCksbz1yPVpyKHIsTWF0aC5tYXgoZSxhKSkscz10LmNvbXBvbmVudHN8fDE7cmV0dXJuIG49TWF0aC5tYXgobixhKSxyKz1hKnMse25hbWU6dC5uYW1lLHR5cGU6dC50eXBlLGNvbXBvbmVudHM6cyxvZmZzZXQ6b319KSxzaXplOlpyKHIsTWF0aC5tYXgobixlKSksYWxpZ25tZW50OmV9fWZ1bmN0aW9uIFpyKHQsZSl7cmV0dXJuIE1hdGguY2VpbCh0L2UpKmV9V3Iuc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyaW0oKSxlJiYodC5pc1RyYW5zZmVycmVkPSEwLGUucHVzaCh0LmFycmF5QnVmZmVyKSkse2xlbmd0aDp0Lmxlbmd0aCxhcnJheUJ1ZmZlcjp0LmFycmF5QnVmZmVyfX0sV3IuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZSh0aGlzLnByb3RvdHlwZSk7cmV0dXJuIGUuYXJyYXlCdWZmZXI9dC5hcnJheUJ1ZmZlcixlLmxlbmd0aD10Lmxlbmd0aCxlLmNhcGFjaXR5PXQuYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aC9lLmJ5dGVzUGVyRWxlbWVudCxlLl9yZWZyZXNoVmlld3MoKSxlfSxXci5wcm90b3R5cGUuX3RyaW09ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aCE9PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PXRoaXMubGVuZ3RoLHRoaXMuYXJyYXlCdWZmZXI9dGhpcy5hcnJheUJ1ZmZlci5zbGljZSgwLHRoaXMubGVuZ3RoKnRoaXMuYnl0ZXNQZXJFbGVtZW50KSx0aGlzLl9yZWZyZXNoVmlld3MoKSl9LFdyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubGVuZ3RoPTB9LFdyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7dGhpcy5yZXNlcnZlKHQpLHRoaXMubGVuZ3RoPXR9LFdyLnByb3RvdHlwZS5yZXNlcnZlPWZ1bmN0aW9uKHQpe2lmKHQ+dGhpcy5jYXBhY2l0eSl7dGhpcy5jYXBhY2l0eT1NYXRoLm1heCh0LE1hdGguZmxvb3IoNSp0aGlzLmNhcGFjaXR5KSwxMjgpLHRoaXMuYXJyYXlCdWZmZXI9bmV3IEFycmF5QnVmZmVyKHRoaXMuY2FwYWNpdHkqdGhpcy5ieXRlc1BlckVsZW1lbnQpO3ZhciBlPXRoaXMudWludDg7dGhpcy5fcmVmcmVzaFZpZXdzKCksZSYmdGhpcy51aW50OC5zZXQoZSl9fSxXci5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3JlZnJlc2hWaWV3cygpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBjb25jcmV0ZSBTdHJ1Y3RBcnJheSBsYXlvdXQiKX07dmFyICRyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy5pbnQxNltuKzBdPXQsdGhpcy5pbnQxNltuKzFdPWUscn0sZX0oV3IpOyRyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcigiU3RydWN0QXJyYXlMYXlvdXQyaTQiLCRyKTt2YXIgSnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShpKzEpO3ZhciBhPTQqaTtyZXR1cm4gdGhpcy5pbnQxNlthKzBdPXQsdGhpcy5pbnQxNlthKzFdPWUsdGhpcy5pbnQxNlthKzJdPXIsdGhpcy5pbnQxNlthKzNdPW4saX0sZX0oV3IpO0pyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcigiU3RydWN0QXJyYXlMYXlvdXQ0aTgiLEpyKTt2YXIgS3I9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobysxKTt2YXIgcz02Km87cmV0dXJuIHRoaXMuaW50MTZbcyswXT10LHRoaXMuaW50MTZbcysxXT1lLHRoaXMuaW50MTZbcysyXT1yLHRoaXMuaW50MTZbcyszXT1uLHRoaXMuaW50MTZbcys0XT1pLHRoaXMuaW50MTZbcys1XT1hLG99LGV9KFdyKTtLci5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKCJTdHJ1Y3RBcnJheUxheW91dDJpNGkxMiIsS3IpO3ZhciBRcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobCsxKTt2YXIgYz02KmwsdT0xMipsO3JldHVybiB0aGlzLmludDE2W2MrMF09dCx0aGlzLmludDE2W2MrMV09ZSx0aGlzLmludDE2W2MrMl09cix0aGlzLmludDE2W2MrM109bix0aGlzLnVpbnQ4W3UrOF09aSx0aGlzLnVpbnQ4W3UrOV09YSx0aGlzLnVpbnQ4W3UrMTBdPW8sdGhpcy51aW50OFt1KzExXT1zLGx9LGV9KFdyKTtRci5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKCJTdHJ1Y3RBcnJheUxheW91dDRpNHViMTIiLFFyKTt2YXIgdG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShsKzEpO3ZhciBjPTgqbDtyZXR1cm4gdGhpcy5pbnQxNltjKzBdPXQsdGhpcy5pbnQxNltjKzFdPWUsdGhpcy5pbnQxNltjKzJdPXIsdGhpcy5pbnQxNltjKzNdPW4sdGhpcy51aW50MTZbYys0XT1pLHRoaXMudWludDE2W2MrNV09YSx0aGlzLnVpbnQxNltjKzZdPW8sdGhpcy51aW50MTZbYys3XT1zLGx9LGV9KFdyKTt0bi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE2LHByKCJTdHJ1Y3RBcnJheUxheW91dDRpNHVpMTYiLHRuKTt2YXIgZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MypuO3JldHVybiB0aGlzLmZsb2F0MzJbaSswXT10LHRoaXMuZmxvYXQzMltpKzFdPWUsdGhpcy5mbG9hdDMyW2krMl09cixufSxlfShXcik7ZW4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixwcigiU3RydWN0QXJyYXlMYXlvdXQzZjEyIixlbik7dmFyIHJuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShlKzEpO3ZhciByPTEqZTtyZXR1cm4gdGhpcy51aW50MzJbciswXT10LGV9LGV9KFdyKTtybi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQscHIoIlN0cnVjdEFycmF5TGF5b3V0MXVsNCIscm4pO3ZhciBubj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShmKzEpO3ZhciBoPTEyKmYscD02KmY7cmV0dXJuIHRoaXMuaW50MTZbaCswXT10LHRoaXMuaW50MTZbaCsxXT1lLHRoaXMuaW50MTZbaCsyXT1yLHRoaXMuaW50MTZbaCszXT1uLHRoaXMuaW50MTZbaCs0XT1pLHRoaXMuaW50MTZbaCs1XT1hLHRoaXMudWludDMyW3ArM109byx0aGlzLnVpbnQxNltoKzhdPXMsdGhpcy51aW50MTZbaCs5XT1sLHRoaXMuaW50MTZbaCsxMF09Yyx0aGlzLmludDE2W2grMTFdPXUsZn0sZX0oV3IpO25uLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MjQscHIoIlN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0Iixubik7dmFyIGFuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG8rMSk7dmFyIHM9NipvO3JldHVybiB0aGlzLmludDE2W3MrMF09dCx0aGlzLmludDE2W3MrMV09ZSx0aGlzLmludDE2W3MrMl09cix0aGlzLmludDE2W3MrM109bix0aGlzLmludDE2W3MrNF09aSx0aGlzLmludDE2W3MrNV09YSxvfSxlfShXcik7YW4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixwcigiU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMiIsYW4pO3ZhciBvbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKHIrMSk7dmFyIG49NCpyO3JldHVybiB0aGlzLnVpbnQ4W24rMF09dCx0aGlzLnVpbnQ4W24rMV09ZSxyfSxlfShXcik7b24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKCJTdHJ1Y3RBcnJheUxheW91dDJ1YjQiLG9uKTt2YXIgc249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCl7dmFyIGQ9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoZCsxKTt2YXIgZz0yMCpkLHY9MTAqZCxtPTQwKmQ7cmV0dXJuIHRoaXMuaW50MTZbZyswXT10LHRoaXMuaW50MTZbZysxXT1lLHRoaXMudWludDE2W2crMl09cix0aGlzLnVpbnQxNltnKzNdPW4sdGhpcy51aW50MzJbdisyXT1pLHRoaXMudWludDMyW3YrM109YSx0aGlzLnVpbnQzMlt2KzRdPW8sdGhpcy51aW50MTZbZysxMF09cyx0aGlzLnVpbnQxNltnKzExXT1sLHRoaXMudWludDE2W2crMTJdPWMsdGhpcy5mbG9hdDMyW3YrN109dSx0aGlzLmZsb2F0MzJbdis4XT1mLHRoaXMudWludDhbbSszNl09aCx0aGlzLnVpbnQ4W20rMzddPXAsZH0sZX0oV3IpO3NuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NDAscHIoIlN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjJ1YjQwIixzbik7dmFyIGxuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGUrMSk7dmFyIHI9MSplO3JldHVybiB0aGlzLmZsb2F0MzJbciswXT10LGV9LGV9KFdyKTtsbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQscHIoIlN0cnVjdEFycmF5TGF5b3V0MWY0Iixsbik7dmFyIGNuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MypuO3JldHVybiB0aGlzLmludDE2W2krMF09dCx0aGlzLmludDE2W2krMV09ZSx0aGlzLmludDE2W2krMl09cixufSxlfShXcik7Y24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD02LHByKCJTdHJ1Y3RBcnJheUxheW91dDNpNiIsY24pO3ZhciB1bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTIqbixhPTQqbjtyZXR1cm4gdGhpcy51aW50MzJbaSswXT10LHRoaXMudWludDE2W2ErMl09ZSx0aGlzLnVpbnQxNlthKzNdPXIsbn0sZX0oV3IpO3VuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcigiU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4Iix1bik7dmFyIGZuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobisxKTt2YXIgaT0zKm47cmV0dXJuIHRoaXMudWludDE2W2krMF09dCx0aGlzLnVpbnQxNltpKzFdPWUsdGhpcy51aW50MTZbaSsyXT1yLG59LGV9KFdyKTtmbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTYscHIoIlN0cnVjdEFycmF5TGF5b3V0M3VpNiIsZm4pO3ZhciBobj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy51aW50MTZbbiswXT10LHRoaXMudWludDE2W24rMV09ZSxyfSxlfShXcik7aG4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKCJTdHJ1Y3RBcnJheUxheW91dDJ1aTQiLGhuKTt2YXIgcG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy5mbG9hdDMyW24rMF09dCx0aGlzLmZsb2F0MzJbbisxXT1lLHJ9LGV9KFdyKTtwbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgscHIoIlN0cnVjdEFycmF5TGF5b3V0MmY4Iixwbik7dmFyIGRuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGkrMSk7dmFyIGE9NCppO3JldHVybiB0aGlzLmZsb2F0MzJbYSswXT10LHRoaXMuZmxvYXQzMlthKzFdPWUsdGhpcy5mbG9hdDMyW2ErMl09cix0aGlzLmZsb2F0MzJbYSszXT1uLGl9LGV9KFdyKTtkbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE2LHByKCJTdHJ1Y3RBcnJheUxheW91dDRmMTYiLGRuKTt2YXIgZ249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXthbmNob3JQb2ludFg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnRZOntjb25maWd1cmFibGU6ITB9LHgxOntjb25maWd1cmFibGU6ITB9LHkxOntjb25maWd1cmFibGU6ITB9LHgyOntjb25maWd1cmFibGU6ITB9LHkyOntjb25maWd1cmFibGU6ITB9LGZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9LHJhZGl1czp7Y29uZmlndXJhYmxlOiEwfSxzaWduZWREaXN0YW5jZUZyb21BbmNob3I6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclBvaW50WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXX0sci5hbmNob3JQb2ludFguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci5hbmNob3JQb2ludFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIuYW5jaG9yUG9pbnRZLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdPXR9LHIueDEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIueDEuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl09dH0sci55MS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXX0sci55MS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXT10fSxyLngyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdfSxyLngyLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdPXR9LHIueTIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV19LHIueTIuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV09dH0sci5mZWF0dXJlSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmZlYXR1cmVJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM109dH0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XX0sci5zb3VyY2VMYXllckluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XT10fSxyLmJ1Y2tldEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis5XX0sci5idWNrZXRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOV09dH0sci5yYWRpdXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTBdfSxyLnJhZGl1cy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMF09dH0sci5zaWduZWREaXN0YW5jZUZyb21BbmNob3IuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTFdfSxyLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMV09dH0sci5hbmNob3JQb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGwodGhpcy5hbmNob3JQb2ludFgsdGhpcy5hbmNob3JQb2ludFkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7Z24ucHJvdG90eXBlLnNpemU9MjQ7dmFyIHZuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ24odGhpcyx0KX0sZX0obm4pO3ByKCJDb2xsaXNpb25Cb3hBcnJheSIsdm4pO3ZhciBtbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yWTp7Y29uZmlndXJhYmxlOiEwfSxnbHlwaFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbnVtR2x5cGhzOntjb25maWd1cmFibGU6ITB9LHZlcnRleFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZVN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZUxlbmd0aDp7Y29uZmlndXJhYmxlOiEwfSxzZWdtZW50Ontjb25maWd1cmFibGU6ITB9LGxvd2VyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSx1cHBlclNpemU6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFk6e2NvbmZpZ3VyYWJsZTohMH0sd3JpdGluZ01vZGU6e2NvbmZpZ3VyYWJsZTohMH0saGlkZGVuOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci5hbmNob3JZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLmFuY2hvclkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci5nbHlwaFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzJdfSxyLmdseXBoU3RhcnRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl09dH0sci5udW1HbHlwaHMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdfSxyLm51bUdseXBocy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM109dH0sci52ZXJ0ZXhTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsyXX0sci52ZXJ0ZXhTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsyXT10fSxyLmxpbmVTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXX0sci5saW5lU3RhcnRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM109dH0sci5saW5lTGVuZ3RoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs0XX0sci5saW5lTGVuZ3RoLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs0XT10fSxyLnNlZ21lbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXX0sci5zZWdtZW50LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMF09dH0sci5sb3dlclNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci5sb3dlclNpemUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXT10fSxyLnVwcGVyU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdfSxyLnVwcGVyU2l6ZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdPXR9LHIubGluZU9mZnNldFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs3XX0sci5saW5lT2Zmc2V0WC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddPXR9LHIubGluZU9mZnNldFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs4XX0sci5saW5lT2Zmc2V0WS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzhdPXR9LHIud3JpdGluZ01vZGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdfSxyLndyaXRpbmdNb2RlLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM2XT10fSxyLmhpZGRlbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszN119LHIuaGlkZGVuLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7bW4ucHJvdG90eXBlLnNpemU9NDA7dmFyIHluPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbW4odGhpcyx0KX0sZX0oc24pO3ByKCJQbGFjZWRTeW1ib2xBcnJheSIseW4pO3ZhciB4bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e29mZnNldFg6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLm9mZnNldFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCswXX0sci5vZmZzZXRYLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMF09dH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oWXIpO3huLnByb3RvdHlwZS5zaXplPTQ7dmFyIGJuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0b2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mbG9hdDMyWzEqdCswXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeG4odGhpcyx0KX0sZX0obG4pO3ByKCJHbHlwaE9mZnNldEFycmF5Iixibik7dmFyIF9uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17eDp7Y29uZmlndXJhYmxlOiEwfSx5Ontjb25maWd1cmFibGU6ITB9LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci54LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLnguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci55LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLnkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXX0sci50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7X24ucHJvdG90eXBlLnNpemU9Njt2YXIgd249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXR4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCswXX0sZS5wcm90b3R5cGUuZ2V0eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMV19LGUucHJvdG90eXBlLmdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCsyXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX24odGhpcyx0KX0sZX0oY24pO3ByKCJTeW1ib2xMaW5lVmVydGV4QXJyYXkiLHduKTt2YXIga249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCswXX0sci5mZWF0dXJlSW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzBdPXR9LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuc291cmNlTGF5ZXJJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl09dH0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIuYnVja2V0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFlyKTtrbi5wcm90b3R5cGUuc2l6ZT04O3ZhciBUbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGtuKHRoaXMsdCl9LGV9KHVuKTtwcigiRmVhdHVyZUluZGV4QXJyYXkiLFRuKTt2YXIgQW49WHIoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpLm1lbWJlcnMsTW49ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2VnbWVudHM9dH07TW4ucHJvdG90eXBlLnByZXBhcmVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnNlZ21lbnRzW3RoaXMuc2VnbWVudHMubGVuZ3RoLTFdO3JldHVybiB0Pk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiZfKCJNYXggdmVydGljZXMgcGVyIHNlZ21lbnQgaXMgIitNbi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCsiOiBidWNrZXQgcmVxdWVzdGVkICIrdCksKCFufHxuLnZlcnRleExlbmd0aCt0Pk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKSYmKG49e3ZlcnRleE9mZnNldDplLmxlbmd0aCxwcmltaXRpdmVPZmZzZXQ6ci5sZW5ndGgsdmVydGV4TGVuZ3RoOjAscHJpbWl0aXZlTGVuZ3RoOjB9LHRoaXMuc2VnbWVudHMucHVzaChuKSksbn0sTW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlZ21lbnRzfSxNbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5zZWdtZW50czt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07Zm9yKHZhciBuIGluIHIudmFvcylyLnZhb3Nbbl0uZGVzdHJveSgpfX0sTW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg9TWF0aC5wb3coMiwxNiktMSxwcigiU2VnbWVudFZlY3RvciIsTW4pO3ZhciBTbj1mdW5jdGlvbih0LGUpe3JldHVybiAyNTYqKHQ9aChNYXRoLmZsb29yKHQpLDAsMjU1KSkraChNYXRoLmZsb29yKGUpLDAsMjU1KX07ZnVuY3Rpb24gRW4odCl7cmV0dXJuW1NuKDI1NSp0LnIsMjU1KnQuZyksU24oMjU1KnQuYiwyNTUqdC5hKV19dmFyIENuPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnZhbHVlPXQsdGhpcy5uYW1lPWUsdGhpcy50eXBlPXIsdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH19O0NuLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuWyIjZGVmaW5lIEhBU19VTklGT1JNX3VfIit0aGlzLm5hbWVdfSxDbi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKCl7fSxDbi5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKCl7fSxDbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sQ24ucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uY29uc3RhbnRPcih0aGlzLnZhbHVlKSxhPXQuZ2w7ImNvbG9yIj09PXRoaXMudHlwZT9hLnVuaWZvcm00ZihlLnVuaWZvcm1zWyJ1XyIrdGhpcy5uYW1lXSxpLnIsaS5nLGkuYixpLmEpOmEudW5pZm9ybTFmKGUudW5pZm9ybXNbInVfIit0aGlzLm5hbWVdLGkpfTt2YXIgTG49ZnVuY3Rpb24odCxlLHIpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMubmFtZT1lLHRoaXMudHlwZT1yLHRoaXMuc3RhdGlzdGljcz17bWF4Oi0xLzB9O3ZhciBuPSJjb2xvciI9PT1yP3BuOmxuO3RoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzPVt7bmFtZToiYV8iK2UsdHlwZToiRmxvYXQzMiIsY29tcG9uZW50czoiY29sb3IiPT09cj8yOjEsb2Zmc2V0OjB9XSx0aGlzLnBhaW50VmVydGV4QXJyYXk9bmV3IG59O0xuLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LExuLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBhaW50VmVydGV4QXJyYXksbj1yLmxlbmd0aDtyLnJlc2VydmUodCk7dmFyIGk9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcigwKSxlKTtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgYT1FbihpKSxvPW47bzx0O28rKylyLmVtcGxhY2VCYWNrKGFbMF0sYVsxXSk7ZWxzZXtmb3IodmFyIHM9bjtzPHQ7cysrKXIuZW1wbGFjZUJhY2soaSk7dGhpcy5zdGF0aXN0aWNzLm1heD1NYXRoLm1heCh0aGlzLnN0YXRpc3RpY3MubWF4LGkpfX0sTG4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJih0aGlzLnBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcykpfSxMbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpfSxMbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt0LmdsLnVuaWZvcm0xZihlLnVuaWZvcm1zWyJhXyIrdGhpcy5uYW1lKyJfdCJdLDApfTt2YXIgem49ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLm5hbWU9ZSx0aGlzLnR5cGU9cix0aGlzLnVzZUludGVnZXJab29tPW4sdGhpcy56b29tPWksdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH07dmFyIGE9ImNvbG9yIj09PXI/ZG46cG47dGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9W3tuYW1lOiJhXyIrZSx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzQ6MixvZmZzZXQ6MH1dLHRoaXMucGFpbnRWZXJ0ZXhBcnJheT1uZXcgYX07em4ucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sem4ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFpbnRWZXJ0ZXhBcnJheSxuPXIubGVuZ3RoO3IucmVzZXJ2ZSh0KTt2YXIgaT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKHRoaXMuem9vbSksZSksYT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKHRoaXMuem9vbSsxKSxlKTtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgbz1FbihpKSxzPUVuKGEpLGw9bjtsPHQ7bCsrKXIuZW1wbGFjZUJhY2sob1swXSxvWzFdLHNbMF0sc1sxXSk7ZWxzZXtmb3IodmFyIGM9bjtjPHQ7YysrKXIuZW1wbGFjZUJhY2soaSxhKTt0aGlzLnN0YXRpc3RpY3MubWF4PU1hdGgubWF4KHRoaXMuc3RhdGlzdGljcy5tYXgsaSxhKX19LHpuLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5wYWludFZlcnRleEFycmF5JiYodGhpcy5wYWludFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnBhaW50VmVydGV4QXJyYXksdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMpKX0sem4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKX0sem4ucHJvdG90eXBlLmludGVycG9sYXRpb25GYWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXNlSW50ZWdlclpvb20/dGhpcy5leHByZXNzaW9uLmludGVycG9sYXRpb25GYWN0b3IoTWF0aC5mbG9vcih0KSx0aGlzLnpvb20sdGhpcy56b29tKzEpOnRoaXMuZXhwcmVzc2lvbi5pbnRlcnBvbGF0aW9uRmFjdG9yKHQsdGhpcy56b29tLHRoaXMuem9vbSsxKX0sem4ucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyKXt0LmdsLnVuaWZvcm0xZihlLnVuaWZvcm1zWyJhXyIrdGhpcy5uYW1lKyJfdCJdLHRoaXMuaW50ZXJwb2xhdGlvbkZhY3RvcihyLnpvb20pKX07dmFyIE9uPWZ1bmN0aW9uKCl7dGhpcy5iaW5kZXJzPXt9LHRoaXMuY2FjaGVLZXk9IiIsdGhpcy5fYnVmZmVycz1bXX07T24uY3JlYXRlRHluYW1pYz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IE9uLGk9W107Zm9yKHZhciBhIGluIHQucGFpbnQuX3ZhbHVlcylpZihyKGEpKXt2YXIgbz10LnBhaW50LmdldChhKTtpZihvIGluc3RhbmNlb2YgRnImJm8ucHJvcGVydHkuc3BlY2lmaWNhdGlvblsicHJvcGVydHktZnVuY3Rpb24iXSl7dmFyIHM9RG4oYSx0LnR5cGUpLGw9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUsYz1vLnByb3BlcnR5LnVzZUludGVnZXJab29tOyJjb25zdGFudCI9PT1vLnZhbHVlLmtpbmQ/KG4uYmluZGVyc1thXT1uZXcgQ24oby52YWx1ZSxzLGwpLGkucHVzaCgiL3VfIitzKSk6InNvdXJjZSI9PT1vLnZhbHVlLmtpbmQ/KG4uYmluZGVyc1thXT1uZXcgTG4oby52YWx1ZSxzLGwpLGkucHVzaCgiL2FfIitzKSk6KG4uYmluZGVyc1thXT1uZXcgem4oby52YWx1ZSxzLGwsYyxlKSxpLnB1c2goIi96XyIrcykpfX1yZXR1cm4gbi5jYWNoZUtleT1pLnNvcnQoKS5qb2luKCIiKSxufSxPbi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0aGlzLmJpbmRlcnMpdGhpcy5iaW5kZXJzW3JdLnBvcHVsYXRlUGFpbnRBcnJheSh0LGUpfSxPbi5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLmJpbmRlcnMpdC5wdXNoLmFwcGx5KHQsdGhpcy5iaW5kZXJzW2VdLmRlZmluZXMoKSk7cmV0dXJuIHR9LE9uLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGkgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tpXS5zZXRVbmlmb3Jtcyh0LGUsbixyLmdldChpKSl9LE9uLnByb3RvdHlwZS5nZXRQYWludFZlcnRleEJ1ZmZlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyc30sT24ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tlXS51cGxvYWQodCk7dmFyIHI9W107Zm9yKHZhciBuIGluIHRoaXMuYmluZGVycyl7dmFyIGk9dGhpcy5iaW5kZXJzW25dOyhpIGluc3RhbmNlb2YgTG58fGkgaW5zdGFuY2VvZiB6bikmJmkucGFpbnRWZXJ0ZXhCdWZmZXImJnIucHVzaChpLnBhaW50VmVydGV4QnVmZmVyKX10aGlzLl9idWZmZXJzPXJ9LE9uLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbdF0uZGVzdHJveSgpfTt2YXIgSW49ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXt9O2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF09T24uY3JlYXRlRHluYW1pYyhvLHIsbiksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF0ubGF5b3V0QXR0cmlidXRlcz10fX07ZnVuY3Rpb24gRG4odCxlKXtyZXR1cm57InRleHQtb3BhY2l0eSI6Im9wYWNpdHkiLCJpY29uLW9wYWNpdHkiOiJvcGFjaXR5IiwidGV4dC1jb2xvciI6ImZpbGxfY29sb3IiLCJpY29uLWNvbG9yIjoiZmlsbF9jb2xvciIsInRleHQtaGFsby1jb2xvciI6ImhhbG9fY29sb3IiLCJpY29uLWhhbG8tY29sb3IiOiJoYWxvX2NvbG9yIiwidGV4dC1oYWxvLWJsdXIiOiJoYWxvX2JsdXIiLCJpY29uLWhhbG8tYmx1ciI6ImhhbG9fYmx1ciIsInRleHQtaGFsby13aWR0aCI6ImhhbG9fd2lkdGgiLCJpY29uLWhhbG8td2lkdGgiOiJoYWxvX3dpZHRoIiwibGluZS1nYXAtd2lkdGgiOiJnYXB3aWR0aCJ9W3RdfHx0LnJlcGxhY2UoZSsiLSIsIiIpLnJlcGxhY2UoLy0vZywiXyIpfUluLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW3JdLnBvcHVsYXRlUGFpbnRBcnJheXModCxlKX0sSW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF19LEluLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2VdLnVwbG9hZCh0KX0sSW4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF0uZGVzdHJveSgpfSxwcigiQ29uc3RhbnRCaW5kZXIiLENuKSxwcigiU291cmNlRXhwcmVzc2lvbkJpbmRlciIsTG4pLHByKCJDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIix6bikscHIoIlByb2dyYW1Db25maWd1cmF0aW9uIixPbix7b21pdDpbIl9idWZmZXJzIl19KSxwcigiUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQiLEluKTt2YXIgUG49ODE5MixSbj0oMTYse21pbjotMSpNYXRoLnBvdygyLDE1KSxtYXg6TWF0aC5wb3coMiwxNSktMX0pO2Z1bmN0aW9uIEZuKHQpe2Zvcih2YXIgZT1Qbi90LmV4dGVudCxyPXQubG9hZEdlb21ldHJ5KCksbj0wO248ci5sZW5ndGg7bisrKWZvcih2YXIgaT1yW25dLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtvLng9TWF0aC5yb3VuZChvLngqZSksby55PU1hdGgucm91bmQoby55KmUpLChvLng8Um4ubWlufHxvLng+Um4ubWF4fHxvLnk8Um4ubWlufHxvLnk+Um4ubWF4KSYmXygiR2VvbWV0cnkgZXhjZWVkcyBhbGxvd2VkIGV4dGVudCwgcmVkdWNlIHlvdXIgdmVjdG9yIHRpbGUgYnVmZmVyIHNpemUiKX1yZXR1cm4gcn1mdW5jdGlvbiBCbih0LGUscixuLGkpe3QuZW1wbGFjZUJhY2soMiplKyhuKzEpLzIsMipyKyhpKzEpLzIpfXZhciBObj1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyAkcix0aGlzLmluZGV4QXJyYXk9bmV3IGZuLHRoaXMuc2VnbWVudHM9bmV3IE1uLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBJbihBbix0LmxheWVycyx0Lnpvb20pfTtmdW5jdGlvbiBqbih0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aWYoWm4oaSxlKSlyZXR1cm4hMDtpZihZbihlLGkscikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gVm4odCxlKXtpZigxPT09dC5sZW5ndGgmJjE9PT10WzBdLmxlbmd0aClyZXR1cm4gWG4oZSx0WzBdWzBdKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylmb3IodmFyIG49ZVtyXSxpPTA7aTxuLmxlbmd0aDtpKyspaWYoWG4odCxuW2ldKSlyZXR1cm4hMDtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7Zm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKWlmKFhuKGUsb1tzXSkpcmV0dXJuITA7Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDtsKyspaWYoSG4obyxlW2xdKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBVbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPWVbbl0sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2lmKG8ubGVuZ3RoPj0zKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWlmKFpuKG8saVtzXSkpcmV0dXJuITA7aWYocW4obyxpLHIpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHFuKHQsZSxyKXtpZih0Lmxlbmd0aD4xKXtpZihIbih0LGUpKXJldHVybiEwO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKFluKGVbbl0sdCxyKSlyZXR1cm4hMH1mb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZihZbih0W2ldLGUscikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSG4odCxlKXtpZigwPT09dC5sZW5ndGh8fDA9PT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoLTE7cisrKWZvcih2YXIgbj10W3JdLGk9dFtyKzFdLGE9MDthPGUubGVuZ3RoLTE7YSsrKWlmKEduKG4saSxlW2FdLGVbYSsxXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gR24odCxlLHIsbil7cmV0dXJuIHcodCxyLG4pIT09dyhlLHIsbikmJncodCxlLHIpIT09dyh0LGUsbil9ZnVuY3Rpb24gWW4odCxlLHIpe3ZhciBuPXIqcjtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHQuZGlzdFNxcihlWzBdKTxuO2Zvcih2YXIgaT0xO2k8ZS5sZW5ndGg7aSsrKWlmKFduKHQsZVtpLTFdLGVbaV0pPG4pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gV24odCxlLHIpe3ZhciBuPWUuZGlzdFNxcihyKTtpZigwPT09bilyZXR1cm4gdC5kaXN0U3FyKGUpO3ZhciBpPSgodC54LWUueCkqKHIueC1lLngpKyh0LnktZS55KSooci55LWUueSkpL247cmV0dXJuIGk8MD90LmRpc3RTcXIoZSk6aT4xP3QuZGlzdFNxcihyKTp0LmRpc3RTcXIoci5zdWIoZSkuX211bHQoaSkuX2FkZChlKSl9ZnVuY3Rpb24gWG4odCxlKXtmb3IodmFyIHIsbixpLGE9ITEsbz0wO288dC5sZW5ndGg7bysrKWZvcih2YXIgcz0wLGw9KHI9dFtvXSkubGVuZ3RoLTE7czxyLmxlbmd0aDtsPXMrKyluPXJbc10saT1yW2xdLG4ueT5lLnkhPWkueT5lLnkmJmUueDwoaS54LW4ueCkqKGUueS1uLnkpLyhpLnktbi55KStuLngmJihhPSFhKTtyZXR1cm4gYX1mdW5jdGlvbiBabih0LGUpe2Zvcih2YXIgcj0hMSxuPTAsaT10Lmxlbmd0aC0xO248dC5sZW5ndGg7aT1uKyspe3ZhciBhPXRbbl0sbz10W2ldO2EueT5lLnkhPW8ueT5lLnkmJmUueDwoby54LWEueCkqKGUueS1hLnkpLyhvLnktYS55KSthLngmJihyPSFyKX1yZXR1cm4gcn1mdW5jdGlvbiAkbih0LGUscil7dmFyIG49ZS5wYWludC5nZXQodCkudmFsdWU7cmV0dXJuImNvbnN0YW50Ij09PW4ua2luZD9uLnZhbHVlOnIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChlLmlkKS5iaW5kZXJzW3RdLnN0YXRpc3RpY3MubWF4fWZ1bmN0aW9uIEpuKHQpe3JldHVybiBNYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSl9ZnVuY3Rpb24gS24odCxlLHIsbixpKXtpZighZVswXSYmIWVbMV0pcmV0dXJuIHQ7dmFyIGE9bC5jb252ZXJ0KGUpOyJ2aWV3cG9ydCI9PT1yJiZhLl9yb3RhdGUoLW4pO2Zvcih2YXIgbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe2Zvcih2YXIgYz10W3NdLHU9W10sZj0wO2Y8Yy5sZW5ndGg7ZisrKXUucHVzaChjW2ZdLnN1YihhLl9tdWx0KGkpKSk7by5wdXNoKHUpfXJldHVybiBvfU5uLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1GbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSxObi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LE5uLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxBbiksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSxObi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LE5uLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlmb3IodmFyIGk9MCxhPW5bcl07aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9by54LGw9by55O2lmKCEoczwwfHxzPj1Qbnx8bDwwfHxsPj1Qbikpe3ZhciBjPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksdT1jLnZlcnRleExlbmd0aDtCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwtMSwtMSksQm4odGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxzLGwsMSwtMSksQm4odGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxzLGwsMSwxKSxCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwtMSwxKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodSx1KzEsdSsyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodSx1KzMsdSsyKSxjLnZlcnRleExlbmd0aCs9NCxjLnByaW1pdGl2ZUxlbmd0aCs9Mn19dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0KX0scHIoIkNpcmNsZUJ1Y2tldCIsTm4se29taXQ6WyJsYXllcnMiXX0pO3ZhciBRbj17cGFpbnQ6bmV3IHFyKHsiY2lyY2xlLXJhZGl1cyI6bmV3IGpyKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtcmFkaXVzIl0pLCJjaXJjbGUtY29sb3IiOm5ldyBqcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLWNvbG9yIl0pLCJjaXJjbGUtYmx1ciI6bmV3IGpyKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtYmx1ciJdKSwiY2lyY2xlLW9wYWNpdHkiOm5ldyBqcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLW9wYWNpdHkiXSksImNpcmNsZS10cmFuc2xhdGUiOm5ldyBOcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLXRyYW5zbGF0ZSJdKSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyBOcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiXSksImNpcmNsZS1waXRjaC1zY2FsZSI6bmV3IE5yKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtcGl0Y2gtc2NhbGUiXSksImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiOm5ldyBOcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLXBpdGNoLWFsaWdubWVudCJdKSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6bmV3IGpyKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLXdpZHRoIl0pLCJjaXJjbGUtc3Ryb2tlLWNvbG9yIjpuZXcganIoSS5wYWludF9jaXJjbGVbImNpcmNsZS1zdHJva2UtY29sb3IiXSksImNpcmNsZS1zdHJva2Utb3BhY2l0eSI6bmV3IGpyKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiXSl9KX0sdGk9aShmdW5jdGlvbih0LGUpe3ZhciByO3QuZXhwb3J0cz0oKHI9bmV3IEZsb2F0MzJBcnJheSgzKSlbMF09MCxyWzFdPTAsclsyXT0wLGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTt0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTB9KCkse3ZlYzM6e3RyYW5zZm9ybU1hdDM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHZlYzQ6e3RyYW5zZm9ybU1hdDQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9fSxtYXQyOntjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdH0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwrYSpzLHRbMV09aSpsK28qcyx0WzJdPW4qLXMrYSpsLHRbM109aSotcytvKmwsdH0sc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1yWzBdLGw9clsxXTtyZXR1cm4gdFswXT1uKnMsdFsxXT1pKnMsdFsyXT1hKmwsdFszXT1vKmwsdH19LG1hdDM6e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoOSk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGZyb21Sb3RhdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0wLHRbM109LXIsdFs0XT1uLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fX0sbWF0NDp7Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxpZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxmLGgscCxkLGc9clswXSx2PXJbMV0sbT1yWzJdO3JldHVybiBlPT09dD8odFsxMl09ZVswXSpnK2VbNF0qditlWzhdKm0rZVsxMl0sdFsxM109ZVsxXSpnK2VbNV0qditlWzldKm0rZVsxM10sdFsxNF09ZVsyXSpnK2VbNl0qditlWzEwXSptK2VbMTRdLHRbMTVdPWVbM10qZytlWzddKnYrZVsxMV0qbStlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10sZj1lWzhdLGg9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWYsdFs5XT1oLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKmcrcyp2K2YqbStlWzEyXSx0WzEzXT1pKmcrbCp2K2gqbStlWzEzXSx0WzE0XT1hKmcrYyp2K3AqbStlWzE0XSx0WzE1XT1vKmcrdSp2K2QqbStlWzE1XSksdH0sc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LG11bHRpcGx5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSxnPWVbMTJdLHY9ZVsxM10sbT1lWzE0XSx5PWVbMTVdLHg9clswXSxiPXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT14Km4rYipzK18qZit3KmcsdFsxXT14KmkrYipsK18qaCt3KnYsdFsyXT14KmErYipjK18qcCt3Km0sdFszXT14Km8rYip1K18qZCt3KnkseD1yWzRdLGI9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09eCpuK2IqcytfKmYrdypnLHRbNV09eCppK2IqbCtfKmgrdyp2LHRbNl09eCphK2IqYytfKnArdyptLHRbN109eCpvK2IqdStfKmQrdyp5LHg9cls4XSxiPXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09eCpuK2IqcytfKmYrdypnLHRbOV09eCppK2IqbCtfKmgrdyp2LHRbMTBdPXgqYStiKmMrXypwK3cqbSx0WzExXT14Km8rYip1K18qZCt3KnkseD1yWzEyXSxiPXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT14Km4rYipzK18qZit3KmcsdFsxM109eCppK2IqbCtfKmgrdyp2LHRbMTRdPXgqYStiKmMrXypwK3cqbSx0WzE1XT14Km8rYip1K18qZCt3KnksdH0scGVyc3BlY3RpdmU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH0scm90YXRlWDpmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbNF0sbz1lWzVdLHM9ZVs2XSxsPWVbN10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07cmV0dXJuIGUhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzRdPWEqaStjKm4sdFs1XT1vKmkrdSpuLHRbNl09cyppK2Yqbix0WzddPWwqaStoKm4sdFs4XT1jKmktYSpuLHRbOV09dSppLW8qbix0WzEwXT1mKmktcypuLHRbMTFdPWgqaS1sKm4sdH0scm90YXRlWjpmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxmPWVbNl0saD1lWzddO3JldHVybiBlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkrZipuLHRbM109bCppK2gqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09ZippLXMqbix0WzddPWgqaS1sKm4sdH0saW52ZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLHY9ZVsxNF0sbT1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLGs9aSpjLWEqbCxUPXUqZy1mKmQsQT11KnYtaCpkLE09dSptLXAqZCxTPWYqdi1oKmcsRT1mKm0tcCpnLEM9aCptLXAqdixMPXkqQy14KkUrYipTK18qTS13KkEraypUO3JldHVybiBMPyhMPTEvTCx0WzBdPShzKkMtbCpFK2MqUykqTCx0WzFdPShpKkUtbipDLWEqUykqTCx0WzJdPShnKmstdip3K20qXykqTCx0WzNdPShoKnctZiprLXAqXykqTCx0WzRdPShsKk0tbypDLWMqQSkqTCx0WzVdPShyKkMtaSpNK2EqQSkqTCx0WzZdPSh2KmItZCprLW0qeCkqTCx0WzddPSh1KmstaCpiK3AqeCkqTCx0WzhdPShvKkUtcypNK2MqVCkqTCx0WzldPShuKk0tcipFLWEqVCkqTCx0WzEwXT0oZCp3LWcqYittKnkpKkwsdFsxMV09KGYqYi11KnctcCp5KSpMLHRbMTJdPShzKkEtbypTLWwqVCkqTCx0WzEzXT0ocipTLW4qQStpKlQpKkwsdFsxNF09KGcqeC1kKl8tdip5KSpMLHRbMTVdPSh1Kl8tZip4K2gqeSkqTCx0KTpudWxsfSxvcnRobzpmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0xLyhlLXIpLGw9MS8obi1pKSxjPTEvKGEtbyk7cmV0dXJuIHRbMF09LTIqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0tMipsLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0yKmMsdFsxMV09MCx0WzEyXT0oZStyKSpzLHRbMTNdPShpK24pKmwsdFsxNF09KG8rYSkqYyx0WzE1XT0xLHR9fX0pfSksZWk9KHRpLnZlYzMsdGkudmVjNCkscmk9KHRpLm1hdDIsdGkubWF0Myx0aS5tYXQ0KSxuaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsUW4pfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBObih0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gJG4oImNpcmNsZS1yYWRpdXMiLHRoaXMsZSkrJG4oImNpcmNsZS1zdHJva2Utd2lkdGgiLHRoaXMsZSkrSm4odGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPUtuKHQsdGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiKSxpLmFuZ2xlLGEpLGw9dGhpcy5wYWludC5nZXQoImNpcmNsZS1yYWRpdXMiKS5ldmFsdWF0ZShlKSt0aGlzLnBhaW50LmdldCgiY2lyY2xlLXN0cm9rZS13aWR0aCIpLmV2YWx1YXRlKGUpLGM9Im1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpLHU9Yz9zOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpaSh0LGUscil9KX0pfSgwLG8saSksZj1jP2wqYTpsLGg9MCxwPXI7aDxwLmxlbmd0aDtoKz0xKWZvcih2YXIgZD0wLGc9cFtoXTtkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF0sbT1jP3Y6aWkodixvLGkpLHk9Zix4PWVpLnRyYW5zZm9ybU1hdDQoW10sW3YueCx2LnksMCwxXSxvKTtpZigidmlld3BvcnQiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1zY2FsZSIpJiYibWFwIj09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Iik/eSo9eFszXS9pLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6Im1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIikmJiJ2aWV3cG9ydCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpJiYoeSo9aS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL3hbM10pLGpuKHUsbSx5KSlyZXR1cm4hMH1yZXR1cm4hMX0sZX0oSHIpO2Z1bmN0aW9uIGlpKHQsZSxyKXt2YXIgbj1laS50cmFuc2Zvcm1NYXQ0KFtdLFt0LngsdC55LDAsMV0sZSk7cmV0dXJuIG5ldyBsKChuWzBdL25bM10rMSkqci53aWR0aCouNSwoblsxXS9uWzNdKzEpKnIuaGVpZ2h0Ki41KX12YXIgYWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShObik7ZnVuY3Rpb24gb2kodCxlLHIsbil7dmFyIGk9ZS53aWR0aCxhPWUuaGVpZ2h0O2lmKG4pe2lmKG4ubGVuZ3RoIT09aSphKnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pc21hdGNoZWQgaW1hZ2Ugc2l6ZSIpfWVsc2Ugbj1uZXcgVWludDhBcnJheShpKmEqcik7cmV0dXJuIHQud2lkdGg9aSx0LmhlaWdodD1hLHQuZGF0YT1uLHR9ZnVuY3Rpb24gc2kodCxlLHIpe3ZhciBuPWUud2lkdGgsaT1lLmhlaWdodDtpZihuIT09dC53aWR0aHx8aSE9PXQuaGVpZ2h0KXt2YXIgYT1vaSh7fSx7d2lkdGg6bixoZWlnaHQ6aX0scik7bGkodCxhLHt4OjAseTowfSx7eDowLHk6MH0se3dpZHRoOk1hdGgubWluKHQud2lkdGgsbiksaGVpZ2h0Ok1hdGgubWluKHQuaGVpZ2h0LGkpfSxyKSx0LndpZHRoPW4sdC5oZWlnaHQ9aSx0LmRhdGE9YS5kYXRhfX1mdW5jdGlvbiBsaSh0LGUscixuLGksYSl7aWYoMD09PWkud2lkdGh8fDA9PT1pLmhlaWdodClyZXR1cm4gZTtpZihpLndpZHRoPnQud2lkdGh8fGkuaGVpZ2h0PnQuaGVpZ2h0fHxyLng+dC53aWR0aC1pLndpZHRofHxyLnk+dC5oZWlnaHQtaS5oZWlnaHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIGltYWdlIGNvcHkiKTtpZihpLndpZHRoPmUud2lkdGh8fGkuaGVpZ2h0PmUuaGVpZ2h0fHxuLng+ZS53aWR0aC1pLndpZHRofHxuLnk+ZS5oZWlnaHQtaS5oZWlnaHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weSIpO2Zvcih2YXIgbz10LmRhdGEscz1lLmRhdGEsbD0wO2w8aS5oZWlnaHQ7bCsrKWZvcih2YXIgYz0oKHIueStsKSp0LndpZHRoK3IueCkqYSx1PSgobi55K2wpKmUud2lkdGgrbi54KSphLGY9MDtmPGkud2lkdGgqYTtmKyspc1t1K2ZdPW9bYytmXTtyZXR1cm4gZX1wcigiSGVhdG1hcEJ1Y2tldCIsYWkse29taXQ6WyJsYXllcnMiXX0pO3ZhciBjaT1mdW5jdGlvbih0LGUpe29pKHRoaXMsdCwxLGUpfTtjaS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3NpKHRoaXMsdCwxKX0sY2kucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjaSh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpfSxjaS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4saSl7bGkodCxlLHIsbixpLDEpfTt2YXIgdWk9ZnVuY3Rpb24odCxlKXtvaSh0aGlzLHQsNCxlKX07dWkucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtzaSh0aGlzLHQsNCl9LHVpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdWkoe3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKX0sdWkuY29weT1mdW5jdGlvbih0LGUscixuLGkpe2xpKHQsZSxyLG4saSw0KX0scHIoIkFscGhhSW1hZ2UiLGNpKSxwcigiUkdCQUltYWdlIix1aSk7dmFyIGZpPXtwYWludDpuZXcgcXIoeyJoZWF0bWFwLXJhZGl1cyI6bmV3IGpyKEkucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1yYWRpdXMiXSksImhlYXRtYXAtd2VpZ2h0IjpuZXcganIoSS5wYWludF9oZWF0bWFwWyJoZWF0bWFwLXdlaWdodCJdKSwiaGVhdG1hcC1pbnRlbnNpdHkiOm5ldyBOcihJLnBhaW50X2hlYXRtYXBbImhlYXRtYXAtaW50ZW5zaXR5Il0pLCJoZWF0bWFwLWNvbG9yIjpuZXcgVXIoSS5wYWludF9oZWF0bWFwWyJoZWF0bWFwLWNvbG9yIl0pLCJoZWF0bWFwLW9wYWNpdHkiOm5ldyBOcihJLnBhaW50X2hlYXRtYXBbImhlYXRtYXAtb3BhY2l0eSJdKX0pfTtmdW5jdGlvbiBoaSh0LGUpe2Zvcih2YXIgcj1uZXcgVWludDhBcnJheSgxMDI0KSxuPXt9LGk9MCxhPTA7aTwyNTY7aSsrLGErPTQpe25bZV09aS8yNTU7dmFyIG89dC5ldmFsdWF0ZShuKTtyW2ErMF09TWF0aC5mbG9vcigyNTUqby5yL28uYSksclthKzFdPU1hdGguZmxvb3IoMjU1Km8uZy9vLmEpLHJbYSsyXT1NYXRoLmZsb29yKDI1NSpvLmIvby5hKSxyW2ErM109TWF0aC5mbG9vcigyNTUqby5hKX1yZXR1cm4gbmV3IHVpKHt3aWR0aDoyNTYsaGVpZ2h0OjF9LHIpfXZhciBwaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsZmkpLHRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhaSh0KX0sZS5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7dC5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eS5jYWxsKHRoaXMsZSxyLG4pLCJoZWF0bWFwLWNvbG9yIj09PWUmJnRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlQ29sb3JSYW1wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWyJoZWF0bWFwLWNvbG9yIl0udmFsdWUuZXhwcmVzc2lvbjt0aGlzLmNvbG9yUmFtcD1oaSh0LCJoZWF0bWFwRGVuc2l0eSIpLHRoaXMuY29sb3JSYW1wVGV4dHVyZT1udWxsfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLmhlYXRtYXBGYm8mJih0aGlzLmhlYXRtYXBGYm8uZGVzdHJveSgpLHRoaXMuaGVhdG1hcEZibz1udWxsKX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldCgiaGVhdG1hcC1vcGFjaXR5IikmJiJub25lIiE9PXRoaXMudmlzaWJpbGl0eX0sZX0oSHIpLGRpPXtwYWludDpuZXcgcXIoeyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiI6bmV3IE5yKEkucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiJdKSwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiXSksImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiJdKSwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciI6bmV3IE5yKEkucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtc2hhZG93LWNvbG9yIl0pLCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiXSksImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWFjY2VudC1jb2xvciJdKX0pfSxnaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsZGkpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldCgiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiIpJiYibm9uZSIhPT10aGlzLnZpc2liaWxpdHl9LGV9KEhyKSx2aT1Ycihbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxtaT14aSx5aT14aTtmdW5jdGlvbiB4aSh0LGUscil7cj1yfHwyO3ZhciBuLGksYSxvLHMsbCxjLHU9ZSYmZS5sZW5ndGgsZj11P2VbMF0qcjp0Lmxlbmd0aCxoPWJpKHQsMCxmLHIsITApLHA9W107aWYoIWgpcmV0dXJuIHA7aWYodSYmKGg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHM9W107Zm9yKGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspKG89YmkodCxlW2ldKm4saTxhLTE/ZVtpKzFdKm46dC5sZW5ndGgsbiwhMSkpPT09by5uZXh0JiYoby5zdGVpbmVyPSEwKSxzLnB1c2goTGkobykpO2ZvcihzLnNvcnQoU2kpLGk9MDtpPHMubGVuZ3RoO2krKylFaShzW2ldLHIpLHI9X2kocixyLm5leHQpO3JldHVybiByfSh0LGUsaCxyKSksdC5sZW5ndGg+ODAqcil7bj1hPXRbMF0saT1vPXRbMV07Zm9yKHZhciBkPXI7ZDxmO2QrPXIpKHM9dFtkXSk8biYmKG49cyksKGw9dFtkKzFdKTxpJiYoaT1sKSxzPmEmJihhPXMpLGw+byYmKG89bCk7Yz0wIT09KGM9TWF0aC5tYXgoYS1uLG8taSkpPzEvYzowfXJldHVybiB3aShoLHAscixuLGksYykscH1mdW5jdGlvbiBiaSh0LGUscixuLGkpe3ZhciBhLG87aWYoaT09PVZpKHQsZSxyLG4pPjApZm9yKGE9ZTthPHI7YSs9bilvPUJpKGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89QmkoYSx0W2FdLHRbYSsxXSxvKTtyZXR1cm4gbyYmRGkobyxvLm5leHQpJiYoTmkobyksbz1vLm5leHQpLG99ZnVuY3Rpb24gX2kodCxlKXtpZighdClyZXR1cm4gdDtlfHwoZT10KTt2YXIgcixuPXQ7ZG97aWYocj0hMSxuLnN0ZWluZXJ8fCFEaShuLG4ubmV4dCkmJjAhPT1JaShuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYoTmkobiksKG49ZT1uLnByZXYpPT09bi5uZXh0KWJyZWFrO3I9ITB9fXdoaWxlKHJ8fG4hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiB3aSh0LGUscixuLGksYSxvKXtpZih0KXshbyYmYSYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PUNpKGkueCxpLnksZSxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8YyYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspMCE9PXMmJigwPT09bHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksYT9hLm5leHRaPWk6dD1pLGkucHJldlo9YSxhPWk7cj1ufWEubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSl9KGkpfSh0LG4saSxhKTtmb3IodmFyIHMsbCxjPXQ7dC5wcmV2IT09dC5uZXh0OylpZihzPXQucHJldixsPXQubmV4dCxhP1RpKHQsbixpLGEpOmtpKHQpKWUucHVzaChzLmkvciksZS5wdXNoKHQuaS9yKSxlLnB1c2gobC5pL3IpLE5pKHQpLHQ9bC5uZXh0LGM9bC5uZXh0O2Vsc2UgaWYoKHQ9bCk9PT1jKXtvPzE9PT1vP3dpKHQ9QWkodCxlLHIpLGUscixuLGksYSwyKToyPT09byYmTWkodCxlLHIsbixpLGEpOndpKF9pKHQpLGUscixuLGksYSwxKTticmVha319fWZ1bmN0aW9uIGtpKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYoSWkoZSxyLG4pPj0wKXJldHVybiExO2Zvcih2YXIgaT10Lm5leHQubmV4dDtpIT09dC5wcmV2Oyl7aWYoemkoZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJklpKGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gVGkodCxlLHIsbil7dmFyIGk9dC5wcmV2LGE9dCxvPXQubmV4dDtpZihJaShpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxsPWkueTxhLnk/aS55PG8ueT9pLnk6by55OmEueTxvLnk/YS55Om8ueSxjPWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCx1PWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxmPUNpKHMsbCxlLHIsbiksaD1DaShjLHUsZSxyLG4pLHA9dC5wcmV2WixkPXQubmV4dFo7cCYmcC56Pj1mJiZkJiZkLno8PWg7KXtpZihwIT09dC5wcmV2JiZwIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmSWkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtpZihwPXAucHJldlosZCE9PXQucHJldiYmZCE9PXQubmV4dCYmemkoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJklpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafWZvcig7cCYmcC56Pj1mOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmemkoaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJklpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLnByZXZafWZvcig7ZCYmZC56PD1oOyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmemkoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJklpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIEFpKHQsZSxyKXt2YXIgbj10O2Rve3ZhciBpPW4ucHJldixhPW4ubmV4dC5uZXh0OyFEaShpLGEpJiZQaShpLG4sbi5uZXh0LGEpJiZSaShpLGEpJiZSaShhLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChhLmkvciksTmkobiksTmkobi5uZXh0KSxuPXQ9YSksbj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiBufWZ1bmN0aW9uIE1pKHQsZSxyLG4saSxhKXt2YXIgbz10O2Rve2Zvcih2YXIgcz1vLm5leHQubmV4dDtzIT09by5wcmV2Oyl7aWYoby5pIT09cy5pJiZPaShvLHMpKXt2YXIgbD1GaShvLHMpO3JldHVybiBvPV9pKG8sby5uZXh0KSxsPV9pKGwsbC5uZXh0KSx3aShvLGUscixuLGksYSksdm9pZCB3aShsLGUscixuLGksYSl9cz1zLm5leHR9bz1vLm5leHR9d2hpbGUobyE9PXQpfWZ1bmN0aW9uIFNpKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gRWkodCxlKXtpZihlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9dC54LGE9dC55LG89LTEvMDtkb3tpZihhPD1uLnkmJmE+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7dmFyIHM9bi54KyhhLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9aSYmcz5vKXtpZihvPXMscz09PWkpe2lmKGE9PT1uLnkpcmV0dXJuIG47aWYoYT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gci5wcmV2O3ZhciBsLGM9cix1PXIueCxmPXIueSxoPTEvMDtmb3Iobj1yLm5leHQ7biE9PWM7KWk+PW4ueCYmbi54Pj11JiZpIT09bi54JiZ6aShhPGY/aTpvLGEsdSxmLGE8Zj9vOmksYSxuLngsbi55KSYmKChsPU1hdGguYWJzKGEtbi55KS8oaS1uLngpKTxofHxsPT09aCYmbi54PnIueCkmJlJpKG4sdCkmJihyPW4saD1sKSxuPW4ubmV4dDtyZXR1cm4gcn0odCxlKSl7dmFyIHI9RmkoZSx0KTtfaShyLHIubmV4dCl9fWZ1bmN0aW9uIENpKHQsZSxyLG4saSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1yKSppKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZT0zMjc2NyooZS1uKSppKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9ZnVuY3Rpb24gTGkodCl7dmFyIGU9dCxyPXQ7ZG97ZS54PHIueCYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIHppKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuKGktbykqKGUtcyktKHQtbykqKGEtcyk+PTAmJih0LW8pKihuLXMpLShyLW8pKihlLXMpPj0wJiYoci1vKSooYS1zKS0oaS1vKSoobi1zKT49MH1mdW5jdGlvbiBPaSh0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiFmdW5jdGlvbih0LGUpe3ZhciByPXQ7ZG97aWYoci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmUGkocixyLm5leHQsdCxlKSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuITF9KHQsZSkmJlJpKHQsZSkmJlJpKGUsdCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPSExLGk9KHQueCtlLngpLzIsYT0odC55K2UueSkvMjtkb3tyLnk+YSE9ci5uZXh0Lnk+YSYmci5uZXh0LnkhPT1yLnkmJmk8KHIubmV4dC54LXIueCkqKGEtci55KS8oci5uZXh0Lnktci55KStyLngmJihuPSFuKSxyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuIG59KHQsZSl9ZnVuY3Rpb24gSWkodCxlLHIpe3JldHVybihlLnktdC55KSooci54LWUueCktKGUueC10LngpKihyLnktZS55KX1mdW5jdGlvbiBEaSh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiBQaSh0LGUscixuKXtyZXR1cm4hIShEaSh0LGUpJiZEaShyLG4pfHxEaSh0LG4pJiZEaShyLGUpKXx8SWkodCxlLHIpPjAhPUlpKHQsZSxuKT4wJiZJaShyLG4sdCk+MCE9SWkocixuLGUpPjB9ZnVuY3Rpb24gUmkodCxlKXtyZXR1cm4gSWkodC5wcmV2LHQsdC5uZXh0KTwwP0lpKHQsZSx0Lm5leHQpPj0wJiZJaSh0LHQucHJldixlKT49MDpJaSh0LGUsdC5wcmV2KTwwfHxJaSh0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIEZpKHQsZSl7dmFyIHI9bmV3IGppKHQuaSx0LngsdC55KSxuPW5ldyBqaShlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGEubmV4dD1uLG4ucHJldj1hLG59ZnVuY3Rpb24gQmkodCxlLHIsbil7dmFyIGk9bmV3IGppKHQsZSxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gTmkodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBqaSh0LGUscil7dGhpcy5pPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gVmkodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1lLG89ci1uO2E8cjthKz1uKWkrPSh0W29dLXRbYV0pKih0W2ErMV0rdFtvKzFdKSxvPWE7cmV0dXJuIGl9eGkuZGV2aWF0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUmJmUubGVuZ3RoLGE9aT9lWzBdKnI6dC5sZW5ndGgsbz1NYXRoLmFicyhWaSh0LDAsYSxyKSk7aWYoaSlmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDtzKyspe3ZhciBjPWVbc10qcix1PXM8bC0xP2VbcysxXSpyOnQubGVuZ3RoO28tPU1hdGguYWJzKFZpKHQsYyx1LHIpKX12YXIgZj0wO2ZvcihzPTA7czxuLmxlbmd0aDtzKz0zKXt2YXIgaD1uW3NdKnIscD1uW3MrMV0qcixkPW5bcysyXSpyO2YrPU1hdGguYWJzKCh0W2hdLXRbZF0pKih0W3ArMV0tdFtoKzFdKS0odFtoXS10W3BdKSoodFtkKzFdLXRbaCsxXSkpfXJldHVybiAwPT09byYmMD09PWY/MDpNYXRoLmFicygoZi1vKS9vKX0seGkuZmxhdHRlbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXVswXS5sZW5ndGgscj17dmVydGljZXM6W10saG9sZXM6W10sZGltZW5zaW9uczplfSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9MDthPHRbaV0ubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPGU7bysrKXIudmVydGljZXMucHVzaCh0W2ldW2FdW29dKTtpPjAmJihuKz10W2ktMV0ubGVuZ3RoLHIuaG9sZXMucHVzaChuKSl9cmV0dXJuIHJ9LG1pLmRlZmF1bHQ9eWk7dmFyIFVpPUhpLHFpPUhpO2Z1bmN0aW9uIEhpKHQsZSxyLG4saSl7IWZ1bmN0aW9uIHQoZSxyLG4saSxhKXtmb3IoO2k+bjspe2lmKGktbj42MDApe3ZhciBvPWktbisxLHM9ci1uKzEsbD1NYXRoLmxvZyhvKSxjPS41Kk1hdGguZXhwKDIqbC8zKSx1PS41Kk1hdGguc3FydChsKmMqKG8tYykvbykqKHMtby8yPDA/LTE6MSk7dChlLHIsTWF0aC5tYXgobixNYXRoLmZsb29yKHItcypjL28rdSkpLE1hdGgubWluKGksTWF0aC5mbG9vcihyKyhvLXMpKmMvbyt1KSksYSl9dmFyIGY9ZVtyXSxoPW4scD1pO2ZvcihHaShlLG4sciksYShlW2ldLGYpPjAmJkdpKGUsbixpKTtoPHA7KXtmb3IoR2koZSxoLHApLGgrKyxwLS07YShlW2hdLGYpPDA7KWgrKztmb3IoO2EoZVtwXSxmKT4wOylwLS19MD09PWEoZVtuXSxmKT9HaShlLG4scCk6R2koZSwrK3AsaSkscDw9ciYmKG49cCsxKSxyPD1wJiYoaT1wLTEpfX0odCxlLHJ8fDAsbnx8dC5sZW5ndGgtMSxpfHxZaSl9ZnVuY3Rpb24gR2kodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBZaSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBXaSh0LGUpe3ZhciByPXQubGVuZ3RoO2lmKHI8PTEpcmV0dXJuW3RdO2Zvcih2YXIgbixpLGE9W10sbz0wO288cjtvKyspe3ZhciBzPWsodFtvXSk7MCE9PXMmJih0W29dLmFyZWE9TWF0aC5hYnMocyksdm9pZCAwPT09aSYmKGk9czwwKSxpPT09czwwPyhuJiZhLnB1c2gobiksbj1bdFtvXV0pOm4ucHVzaCh0W29dKSl9aWYobiYmYS5wdXNoKG4pLGU+MSlmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylhW2xdLmxlbmd0aDw9ZXx8KFVpKGFbbF0sZSwxLGFbbF0ubGVuZ3RoLTEsWGkpLGFbbF09YVtsXS5zbGljZSgwLGUpKTtyZXR1cm4gYX1mdW5jdGlvbiBYaSh0LGUpe3JldHVybiBlLmFyZWEtdC5hcmVhfVVpLmRlZmF1bHQ9cWk7dmFyIFppPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3ICRyLHRoaXMuaW5kZXhBcnJheT1uZXcgZm4sdGhpcy5pbmRleEFycmF5Mj1uZXcgaG4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IEluKHZpLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgTW4sdGhpcy5zZWdtZW50czI9bmV3IE1ufTtaaS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aS5mZWF0dXJlLG89aS5pbmRleCxzPWkuc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgTHIodGhpcy56b29tKSxhKSl7dmFyIGw9Rm4oYSk7dGhpcy5hZGRGZWF0dXJlKGEsbCksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGEsbCxvLHMsdGhpcy5pbmRleCl9fX0sWmkucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxaaS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdmkpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMuaW5kZXhCdWZmZXIyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5MiksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSxaaS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5zZWdtZW50czIuZGVzdHJveSgpKX0sWmkucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPVdpKGUsNTAwKTtyPG4ubGVuZ3RoO3IrPTEpe2Zvcih2YXIgaT1uW3JdLGE9MCxvPTAscz1pO288cy5sZW5ndGg7bys9MSlhKz1zW29dLmxlbmd0aDtmb3IodmFyIGw9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChhLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxjPWwudmVydGV4TGVuZ3RoLHU9W10sZj1bXSxoPTAscD1pO2g8cC5sZW5ndGg7aCs9MSl7dmFyIGQ9cFtoXTtpZigwIT09ZC5sZW5ndGgpe2QhPT1pWzBdJiZmLnB1c2godS5sZW5ndGgvMik7dmFyIGc9dGhpcy5zZWdtZW50czIucHJlcGFyZVNlZ21lbnQoZC5sZW5ndGgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkyKSx2PWcudmVydGV4TGVuZ3RoO3RoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soZFswXS54LGRbMF0ueSksdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayh2K2QubGVuZ3RoLTEsdiksdS5wdXNoKGRbMF0ueCksdS5wdXNoKGRbMF0ueSk7Zm9yKHZhciBtPTE7bTxkLmxlbmd0aDttKyspdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhkW21dLngsZFttXS55KSx0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKHYrbS0xLHYrbSksdS5wdXNoKGRbbV0ueCksdS5wdXNoKGRbbV0ueSk7Zy52ZXJ0ZXhMZW5ndGgrPWQubGVuZ3RoLGcucHJpbWl0aXZlTGVuZ3RoKz1kLmxlbmd0aH19Zm9yKHZhciB5PW1pKHUsZikseD0wO3g8eS5sZW5ndGg7eCs9Myl0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soYyt5W3hdLGMreVt4KzFdLGMreVt4KzJdKTtsLnZlcnRleExlbmd0aCs9YSxsLnByaW1pdGl2ZUxlbmd0aCs9eS5sZW5ndGgvM310aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQpfSxwcigiRmlsbEJ1Y2tldCIsWmkse29taXQ6WyJsYXllcnMiXX0pO3ZhciAkaT17cGFpbnQ6bmV3IHFyKHsiZmlsbC1hbnRpYWxpYXMiOm5ldyBOcihJLnBhaW50X2ZpbGxbImZpbGwtYW50aWFsaWFzIl0pLCJmaWxsLW9wYWNpdHkiOm5ldyBqcihJLnBhaW50X2ZpbGxbImZpbGwtb3BhY2l0eSJdKSwiZmlsbC1jb2xvciI6bmV3IGpyKEkucGFpbnRfZmlsbFsiZmlsbC1jb2xvciJdKSwiZmlsbC1vdXRsaW5lLWNvbG9yIjpuZXcganIoSS5wYWludF9maWxsWyJmaWxsLW91dGxpbmUtY29sb3IiXSksImZpbGwtdHJhbnNsYXRlIjpuZXcgTnIoSS5wYWludF9maWxsWyJmaWxsLXRyYW5zbGF0ZSJdKSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjpuZXcgTnIoSS5wYWludF9maWxsWyJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiXSksImZpbGwtcGF0dGVybiI6bmV3IFZyKEkucGFpbnRfZmlsbFsiZmlsbC1wYXR0ZXJuIl0pfSl9LEppPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSwkaSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50LnBvc3NpYmx5RXZhbHVhdGUodCk7dmFyIGU9dGhpcy5wYWludC5fdmFsdWVzWyJmaWxsLW91dGxpbmUtY29sb3IiXTsiY29uc3RhbnQiPT09ZS52YWx1ZS5raW5kJiZ2b2lkIDA9PT1lLnZhbHVlLnZhbHVlJiYodGhpcy5wYWludC5fdmFsdWVzWyJmaWxsLW91dGxpbmUtY29sb3IiXT10aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtY29sb3IiXSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFppKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBKbih0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBWbihLbih0LHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiKSxpLmFuZ2xlLGEpLHIpfSxlfShIciksS2k9WHIoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfbm9ybWFsX2VkIixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxRaT1NYXRoLnBvdygyLDEzKTtmdW5jdGlvbiB0YSh0LGUscixuLGksYSxvLHMpe3QuZW1wbGFjZUJhY2soZSxyLDIqTWF0aC5mbG9vcihuKlFpKStvLGkqUWkqMixhKlFpKjIsTWF0aC5yb3VuZChzKSl9dmFyIGVhPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IEtyLHRoaXMuaW5kZXhBcnJheT1uZXcgZm4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IEluKEtpLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgTW59O2Z1bmN0aW9uIHJhKHQsZSl7cmV0dXJuIHQueD09PWUueCYmKHQueDwwfHx0Lng+UG4pfHx0Lnk9PT1lLnkmJih0Lnk8MHx8dC55PlBuKX1mdW5jdGlvbiBuYSh0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC54PDB9KXx8dC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC54PlBufSl8fHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueTwwfSl8fHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueT5Qbn0pfWVhLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1GbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSxlYS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LGVhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxLaSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSxlYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LGVhLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1XaShlLDUwMCk7cjxuLmxlbmd0aDtyKz0xKXtmb3IodmFyIGk9bltyXSxhPTAsbz0wLHM9aTtvPHMubGVuZ3RoO28rPTEpYSs9c1tvXS5sZW5ndGg7Zm9yKHZhciBsPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksYz0wLHU9aTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107aWYoMCE9PWYubGVuZ3RoJiYhbmEoZikpZm9yKHZhciBoPTAscD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgZD1mW3BdO2lmKHA+PTEpe3ZhciBnPWZbcC0xXTtpZighcmEoZCxnKSl7bC52ZXJ0ZXhMZW5ndGgrND5Nbi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGw9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSk7dmFyIHY9ZC5zdWIoZykuX3BlcnAoKS5fdW5pdCgpLG09Zy5kaXN0KGQpO2grbT4zMjc2OCYmKGg9MCksdGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxkLngsZC55LHYueCx2LnksMCwwLGgpLHRhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksZC54LGQueSx2Lngsdi55LDAsMSxoKSxoKz1tLHRhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksZy54LGcueSx2Lngsdi55LDAsMCxoKSx0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LGcueCxnLnksdi54LHYueSwwLDEsaCk7dmFyIHk9bC52ZXJ0ZXhMZW5ndGg7dGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHkseSsxLHkrMiksdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHkrMSx5KzIseSszKSxsLnZlcnRleExlbmd0aCs9NCxsLnByaW1pdGl2ZUxlbmd0aCs9Mn19fX1sLnZlcnRleExlbmd0aCthPk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiYobD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KGEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpKTtmb3IodmFyIHg9W10sYj1bXSxfPWwudmVydGV4TGVuZ3RoLHc9MCxrPWk7dzxrLmxlbmd0aDt3Kz0xKXt2YXIgVD1rW3ddO2lmKDAhPT1ULmxlbmd0aCl7VCE9PWlbMF0mJmIucHVzaCh4Lmxlbmd0aC8yKTtmb3IodmFyIEE9MDtBPFQubGVuZ3RoO0ErKyl7dmFyIE09VFtBXTt0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LE0ueCxNLnksMCwwLDEsMSwwKSx4LnB1c2goTS54KSx4LnB1c2goTS55KX19fWZvcih2YXIgUz1taSh4LGIpLEU9MDtFPFMubGVuZ3RoO0UrPTMpdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKF8rU1tFXSxfK1NbRSsxXSxfK1NbRSsyXSk7bC5wcmltaXRpdmVMZW5ndGgrPVMubGVuZ3RoLzMsbC52ZXJ0ZXhMZW5ndGgrPWF9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0KX0scHIoIkZpbGxFeHRydXNpb25CdWNrZXQiLGVhLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgaWE9e3BhaW50Om5ldyBxcih7ImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiOm5ldyBOcihJWyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Il0pLCJmaWxsLWV4dHJ1c2lvbi1jb2xvciI6bmV3IGpyKElbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWNvbG9yIl0pLCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiOm5ldyBOcihJWyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiXSksImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyBOcihJWyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIl0pLCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjpuZXcgVnIoSVsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tcGF0dGVybiJdKSwiZmlsbC1leHRydXNpb24taGVpZ2h0IjpuZXcganIoSVsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24taGVpZ2h0Il0pLCJmaWxsLWV4dHJ1c2lvbi1iYXNlIjpuZXcganIoSVsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tYmFzZSJdKX0pfSxhYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsaWEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlYSh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gSm4odGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIFZuKEtuKHQsdGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIiksaS5hbmdsZSxhKSxyKX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiKSYmIm5vbmUiIT09dGhpcy52aXNpYmlsaXR5fSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLnZpZXdwb3J0RnJhbWUmJih0aGlzLnZpZXdwb3J0RnJhbWUuZGVzdHJveSgpLHRoaXMudmlld3BvcnRGcmFtZT1udWxsKX0sZX0oSHIpLG9hPVhyKFt7bmFtZToiYV9wb3Nfbm9ybWFsIixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDgifV0sNCkubWVtYmVycyxzYT1sYTtmdW5jdGlvbiBsYSh0LGUscixuLGkpe3RoaXMucHJvcGVydGllcz17fSx0aGlzLmV4dGVudD1yLHRoaXMudHlwZT0wLHRoaXMuX3BiZj10LHRoaXMuX2dlb21ldHJ5PS0xLHRoaXMuX2tleXM9bix0aGlzLl92YWx1ZXM9aSx0LnJlYWRGaWVsZHMoY2EsdGhpcyxlKX1mdW5jdGlvbiBjYSh0LGUscil7MT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PXQ/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPWUuX2tleXNbdC5yZWFkVmFyaW50KCldLGk9ZS5fdmFsdWVzW3QucmVhZFZhcmludCgpXTtlLnByb3BlcnRpZXNbbl09aX19KHIsZSk6Mz09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09dCYmKGUuX2dlb21ldHJ5PXIucG9zKX1mdW5jdGlvbiB1YSh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxuKz0oKHI9dFtvXSkueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn1sYS50eXBlcz1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl0sbGEucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGUscj10LnJlYWRWYXJpbnQoKSt0LnBvcyxuPTEsaT0wLGE9MCxvPTAscz1bXTt0LnBvczxyOyl7aWYoaTw9MCl7dmFyIGM9dC5yZWFkVmFyaW50KCk7bj03JmMsaT1jPj4zfWlmKGktLSwxPT09bnx8Mj09PW4pYSs9dC5yZWFkU1ZhcmludCgpLG8rPXQucmVhZFNWYXJpbnQoKSwxPT09biYmKGUmJnMucHVzaChlKSxlPVtdKSxlLnB1c2gobmV3IGwoYSxvKSk7ZWxzZXtpZig3IT09bil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY29tbWFuZCAiK24pO2UmJmUucHVzaChlWzBdLmNsb25lKCkpfX1yZXR1cm4gZSYmcy5wdXNoKGUpLHN9LGxhLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGk9MCxhPTAsbz0xLzAscz0tMS8wLGw9MS8wLGM9LTEvMDt0LnBvczxlOyl7aWYobjw9MCl7dmFyIHU9dC5yZWFkVmFyaW50KCk7cj03JnUsbj11Pj4zfWlmKG4tLSwxPT09cnx8Mj09PXIpKGkrPXQucmVhZFNWYXJpbnQoKSk8byYmKG89aSksaT5zJiYocz1pKSwoYSs9dC5yZWFkU1ZhcmludCgpKTxsJiYobD1hKSxhPmMmJihjPWEpO2Vsc2UgaWYoNyE9PXIpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIityKX1yZXR1cm5bbyxsLHMsY119LGxhLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT10aGlzLmV4dGVudCpNYXRoLnBvdygyLHIpLG89dGhpcy5leHRlbnQqdCxzPXRoaXMuZXh0ZW50KmUsbD10aGlzLmxvYWRHZW9tZXRyeSgpLGM9bGEudHlwZXNbdGhpcy50eXBlXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdLG49MTgwLTM2MCooci55K3MpL2E7dFtlXT1bMzYwKihyLngrbykvYS0xODAsMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKG4qTWF0aC5QSS8xODApKS05MF19fXN3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgMTp2YXIgZj1bXTtmb3Iobj0wO248bC5sZW5ndGg7bisrKWZbbl09bFtuXVswXTt1KGw9Zik7YnJlYWs7Y2FzZSAyOmZvcihuPTA7bjxsLmxlbmd0aDtuKyspdShsW25dKTticmVhaztjYXNlIDM6Zm9yKGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9MSlyZXR1cm5bdF07Zm9yKHZhciByLG4saT1bXSxhPTA7YTxlO2ErKyl7dmFyIG89dWEodFthXSk7MCE9PW8mJih2b2lkIDA9PT1uJiYobj1vPDApLG49PT1vPDA/KHImJmkucHVzaChyKSxyPVt0W2FdXSk6ci5wdXNoKHRbYV0pKX1yZXR1cm4gciYmaS5wdXNoKHIpLGl9KGwpLG49MDtuPGwubGVuZ3RoO24rKylmb3IoaT0wO2k8bFtuXS5sZW5ndGg7aSsrKXUobFtuXVtpXSl9MT09PWwubGVuZ3RoP2w9bFswXTpjPSJNdWx0aSIrYzt2YXIgaD17dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6Yyxjb29yZGluYXRlczpsfSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuImlkImluIHRoaXMmJihoLmlkPXRoaXMuaWQpLGh9O3ZhciBmYT1oYTtmdW5jdGlvbiBoYSh0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT1udWxsLHRoaXMuZXh0ZW50PTQwOTYsdGhpcy5sZW5ndGg9MCx0aGlzLl9wYmY9dCx0aGlzLl9rZXlzPVtdLHRoaXMuX3ZhbHVlcz1bXSx0aGlzLl9mZWF0dXJlcz1bXSx0LnJlYWRGaWVsZHMocGEsdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZnVuY3Rpb24gcGEodCxlLHIpezE1PT09dD9lLnZlcnNpb249ci5yZWFkVmFyaW50KCk6MT09PXQ/ZS5uYW1lPXIucmVhZFN0cmluZygpOjU9PT10P2UuZXh0ZW50PXIucmVhZFZhcmludCgpOjI9PT10P2UuX2ZlYXR1cmVzLnB1c2goci5wb3MpOjM9PT10P2UuX2tleXMucHVzaChyLnJlYWRTdHJpbmcoKSk6ND09PXQmJmUuX3ZhbHVlcy5wdXNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPXQucmVhZFZhcmludCgpPj4zO2U9MT09PW4/dC5yZWFkU3RyaW5nKCk6Mj09PW4/dC5yZWFkRmxvYXQoKTozPT09bj90LnJlYWREb3VibGUoKTo0PT09bj90LnJlYWRWYXJpbnQ2NCgpOjU9PT1uP3QucmVhZFZhcmludCgpOjY9PT1uP3QucmVhZFNWYXJpbnQoKTo3PT09bj90LnJlYWRCb29sZWFuKCk6bnVsbH1yZXR1cm4gZX0ocikpfWZ1bmN0aW9uIGRhKHQsZSxyKXtpZigzPT09dCl7dmFyIG49bmV3IGZhKHIsci5yZWFkVmFyaW50KCkrci5wb3MpO24ubGVuZ3RoJiYoZVtuLm5hbWVdPW4pfX1oYS5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtpZih0PDB8fHQ+PXRoaXMuX2ZlYXR1cmVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcyIpO3RoaXMuX3BiZi5wb3M9dGhpcy5fZmVhdHVyZXNbdF07dmFyIGU9dGhpcy5fcGJmLnJlYWRWYXJpbnQoKSt0aGlzLl9wYmYucG9zO3JldHVybiBuZXcgc2EodGhpcy5fcGJmLGUsdGhpcy5leHRlbnQsdGhpcy5fa2V5cyx0aGlzLl92YWx1ZXMpfTt2YXIgZ2E9e1ZlY3RvclRpbGU6ZnVuY3Rpb24odCxlKXt0aGlzLmxheWVycz10LnJlYWRGaWVsZHMoZGEse30sZSl9LFZlY3RvclRpbGVGZWF0dXJlOnNhLFZlY3RvclRpbGVMYXllcjpmYX0sdmE9Z2EuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXMsbWE9NjMseWE9TWF0aC5jb3MoTWF0aC5QSS8xODAqMzcuNSkseGE9LjUsYmE9TWF0aC5wb3coMiwxNCkveGE7ZnVuY3Rpb24gX2EodCxlLHIsbixpLGEsbyl7dC5lbXBsYWNlQmFjayhlLngsZS55LG4/MTowLGk/MTotMSxNYXRoLnJvdW5kKG1hKnIueCkrMTI4LE1hdGgucm91bmQobWEqci55KSsxMjgsMSsoMD09PWE/MDphPDA/LTE6MSl8KG8qeGEmNjMpPDwyLG8qeGE+PjYpfXZhciB3YT1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyBRcix0aGlzLmluZGV4QXJyYXk9bmV3IGZuLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBJbihvYSx0LmxheWVycyx0Lnpvb20pLHRoaXMuc2VnbWVudHM9bmV3IE1ufTtmdW5jdGlvbiBrYSh0LGUpe3JldHVybih0L2UudGlsZVRvdGFsKihlLmVuZC1lLnN0YXJ0KStlLnN0YXJ0KSooYmEtMSl9d2EucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkuZmVhdHVyZSxvPWkuaW5kZXgscz1pLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IExyKHRoaXMuem9vbSksYSkpe3ZhciBsPUZuKGEpO3RoaXMuYWRkRmVhdHVyZShhLGwpLGUuZmVhdHVyZUluZGV4Lmluc2VydChhLGwsbyxzLHRoaXMuaW5kZXgpfX19LHdhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sd2EucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LG9hKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LHdhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sd2EucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5sYXllcnNbMF0ubGF5b3V0LG49ci5nZXQoImxpbmUtam9pbiIpLmV2YWx1YXRlKHQpLGk9ci5nZXQoImxpbmUtY2FwIiksYT1yLmdldCgibGluZS1taXRlci1saW1pdCIpLG89ci5nZXQoImxpbmUtcm91bmQtbGltaXQiKSxzPTAsbD1lO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTt0aGlzLmFkZExpbmUoYyx0LG4saSxhLG8pfX0sd2EucHJvdG90eXBlLmFkZExpbmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW51bGw7ZS5wcm9wZXJ0aWVzJiZlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoIm1hcGJveF9jbGlwX3N0YXJ0IikmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgibWFwYm94X2NsaXBfZW5kIikmJihvPXtzdGFydDplLnByb3BlcnRpZXMubWFwYm94X2NsaXBfc3RhcnQsZW5kOmUucHJvcGVydGllcy5tYXBib3hfY2xpcF9lbmQsdGlsZVRvdGFsOnZvaWQgMH0pO2Zvcih2YXIgcz0iUG9seWdvbiI9PT12YVtlLnR5cGVdLGw9dC5sZW5ndGg7bD49MiYmdFtsLTFdLmVxdWFscyh0W2wtMl0pOylsLS07Zm9yKHZhciBjPTA7YzxsLTEmJnRbY10uZXF1YWxzKHRbYysxXSk7KWMrKztpZighKGw8KHM/MzoyKSkpe28mJihvLnRpbGVUb3RhbD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0wLG89YztvPHItMTtvKyspbj10W29dLGk9dFtvKzFdLGErPW4uZGlzdChpKTtyZXR1cm4gYX0odCwwLGwpKSwiYmV2ZWwiPT09ciYmKGk9MS4wNSk7dmFyIHU9UG4vKDUxMip0aGlzLm92ZXJzY2FsaW5nKSoxNSxmPXRbY10saD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDEwKmwsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpO3RoaXMuZGlzdGFuY2U9MDt2YXIgcCxkLGcsdj1uLG09cz8iYnV0dCI6bix5PSEwLHg9dm9pZCAwLGI9dm9pZCAwLF89dm9pZCAwLHc9dm9pZCAwO3RoaXMuZTE9dGhpcy5lMj10aGlzLmUzPS0xLHMmJihwPXRbbC0yXSx3PWYuc3ViKHApLl91bml0KCkuX3BlcnAoKSk7Zm9yKHZhciBrPWM7azxsO2srKylpZighKGI9cyYmaz09PWwtMT90W2MrMV06dFtrKzFdKXx8IXRba10uZXF1YWxzKGIpKXt3JiYoXz13KSxwJiYoeD1wKSxwPXRba10sdz1iP2Iuc3ViKHApLl91bml0KCkuX3BlcnAoKTpfO3ZhciBUPShfPV98fHcpLmFkZCh3KTswPT09VC54JiYwPT09VC55fHxULl91bml0KCk7dmFyIEE9VC54KncueCtULnkqdy55LE09MCE9PUE/MS9BOjEvMCxTPUE8eWEmJngmJmI7aWYoUyYmaz5jKXt2YXIgRT1wLmRpc3QoeCk7aWYoRT4yKnUpe3ZhciBDPXAuc3ViKHAuc3ViKHgpLl9tdWx0KHUvRSkuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPUMuZGlzdCh4KSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoQyx0aGlzLmRpc3RhbmNlLF8ubXVsdCgxKSwwLDAsITEsaCxvKSx4PUN9fXZhciBMPXgmJmIsej1MP3I6Yj92Om07aWYoTCYmInJvdW5kIj09PXomJihNPGE/ej0ibWl0ZXIiOk08PTImJih6PSJmYWtlcm91bmQiKSksIm1pdGVyIj09PXomJk0+aSYmKHo9ImJldmVsIiksImJldmVsIj09PXomJihNPjImJih6PSJmbGlwYmV2ZWwiKSxNPGkmJih6PSJtaXRlciIpKSx4JiYodGhpcy5kaXN0YW5jZSs9cC5kaXN0KHgpKSwibWl0ZXIiPT09eilULl9tdWx0KE0pLHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsVCwwLDAsITEsaCxvKTtlbHNlIGlmKCJmbGlwYmV2ZWwiPT09eil7aWYoTT4xMDApVD13LmNsb25lKCkubXVsdCgtMSk7ZWxzZXt2YXIgTz1fLngqdy55LV8ueSp3Lng+MD8tMToxLEk9TSpfLmFkZCh3KS5tYWcoKS9fLnN1Yih3KS5tYWcoKTtULl9wZXJwKCkuX211bHQoSSpPKX10aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLFQsMCwwLCExLGgsbyksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxULm11bHQoLTEpLDAsMCwhMSxoLG8pfWVsc2UgaWYoImJldmVsIj09PXp8fCJmYWtlcm91bmQiPT09eil7dmFyIEQ9Xy54KncueS1fLnkqdy54PjAsUD0tTWF0aC5zcXJ0KE0qTS0xKTtpZihEPyhnPTAsZD1QKTooZD0wLGc9UCkseXx8dGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLGQsZywhMSxoLG8pLCJmYWtlcm91bmQiPT09eil7Zm9yKHZhciBSPU1hdGguZmxvb3IoOCooLjUtKEEtLjUpKSksRj12b2lkIDAsQj0wO0I8UjtCKyspRj13Lm11bHQoKEIrMSkvKFIrMSkpLl9hZGQoXykuX3VuaXQoKSx0aGlzLmFkZFBpZVNsaWNlVmVydGV4KHAsdGhpcy5kaXN0YW5jZSxGLEQsaCxvKTt0aGlzLmFkZFBpZVNsaWNlVmVydGV4KHAsdGhpcy5kaXN0YW5jZSxULEQsaCxvKTtmb3IodmFyIE49Ui0xO04+PTA7Ti0tKUY9Xy5tdWx0KChOKzEpLyhSKzEpKS5fYWRkKHcpLl91bml0KCksdGhpcy5hZGRQaWVTbGljZVZlcnRleChwLHRoaXMuZGlzdGFuY2UsRixELGgsbyl9YiYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSx3LC1kLC1nLCExLGgsbyl9ZWxzZSJidXR0Ij09PXo/KHl8fHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXywwLDAsITEsaCxvKSxiJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsMCwwLCExLGgsbykpOiJzcXVhcmUiPT09ej8oeXx8KHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXywxLDEsITEsaCxvKSx0aGlzLmUxPXRoaXMuZTI9LTEpLGImJnRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywtMSwtMSwhMSxoLG8pKToicm91bmQiPT09eiYmKHl8fCh0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLF8sMCwwLCExLGgsbyksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDEsMSwhMCxoLG8pLHRoaXMuZTE9dGhpcy5lMj0tMSksYiYmKHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywtMSwtMSwhMCxoLG8pLHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywwLDAsITEsaCxvKSkpO2lmKFMmJms8bC0xKXt2YXIgaj1wLmRpc3QoYik7aWYoaj4yKnUpe3ZhciBWPXAuYWRkKGIuc3ViKHApLl9tdWx0KHUvaikuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPVYuZGlzdChwKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoVix0aGlzLmRpc3RhbmNlLHcubXVsdCgxKSwwLDAsITEsaCxvKSxwPVZ9fXk9ITF9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxlKX19LHdhLnByb3RvdHlwZS5hZGRDdXJyZW50VmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsYz10aGlzLmxheW91dFZlcnRleEFycmF5LHU9dGhpcy5pbmRleEFycmF5O3MmJihlPWthKGUscykpLGw9ci5jbG9uZSgpLG4mJmwuX3N1YihyLnBlcnAoKS5fbXVsdChuKSksX2EoYyx0LGwsYSwhMSxuLGUpLHRoaXMuZTM9by52ZXJ0ZXhMZW5ndGgrKyx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiYodS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksby5wcmltaXRpdmVMZW5ndGgrKyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxsPXIubXVsdCgtMSksaSYmbC5fc3ViKHIucGVycCgpLl9tdWx0KGkpKSxfYShjLHQsbCxhLCEwLC1pLGUpLHRoaXMuZTM9by52ZXJ0ZXhMZW5ndGgrKyx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiYodS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksby5wcmltaXRpdmVMZW5ndGgrKyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxlPmJhLzImJiFzJiYodGhpcy5kaXN0YW5jZT0wLHRoaXMuYWRkQ3VycmVudFZlcnRleCh0LHRoaXMuZGlzdGFuY2UscixuLGksYSxvKSl9LHdhLnByb3RvdHlwZS5hZGRQaWVTbGljZVZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7cj1yLm11bHQobj8tMToxKTt2YXIgbz10aGlzLmxheW91dFZlcnRleEFycmF5LHM9dGhpcy5pbmRleEFycmF5O2EmJihlPWthKGUsYSkpLF9hKG8sdCxyLCExLG4sMCxlKSx0aGlzLmUzPWkudmVydGV4TGVuZ3RoKyssdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHMuZW1wbGFjZUJhY2sodGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMpLGkucHJpbWl0aXZlTGVuZ3RoKyspLG4/dGhpcy5lMj10aGlzLmUzOnRoaXMuZTE9dGhpcy5lM30scHIoIkxpbmVCdWNrZXQiLHdhLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgVGE9bmV3IHFyKHsibGluZS1jYXAiOm5ldyBOcihJLmxheW91dF9saW5lWyJsaW5lLWNhcCJdKSwibGluZS1qb2luIjpuZXcganIoSS5sYXlvdXRfbGluZVsibGluZS1qb2luIl0pLCJsaW5lLW1pdGVyLWxpbWl0IjpuZXcgTnIoSS5sYXlvdXRfbGluZVsibGluZS1taXRlci1saW1pdCJdKSwibGluZS1yb3VuZC1saW1pdCI6bmV3IE5yKEkubGF5b3V0X2xpbmVbImxpbmUtcm91bmQtbGltaXQiXSl9KSxBYT17cGFpbnQ6bmV3IHFyKHsibGluZS1vcGFjaXR5IjpuZXcganIoSS5wYWludF9saW5lWyJsaW5lLW9wYWNpdHkiXSksImxpbmUtY29sb3IiOm5ldyBqcihJLnBhaW50X2xpbmVbImxpbmUtY29sb3IiXSksImxpbmUtdHJhbnNsYXRlIjpuZXcgTnIoSS5wYWludF9saW5lWyJsaW5lLXRyYW5zbGF0ZSJdKSwibGluZS10cmFuc2xhdGUtYW5jaG9yIjpuZXcgTnIoSS5wYWludF9saW5lWyJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiXSksImxpbmUtd2lkdGgiOm5ldyBqcihJLnBhaW50X2xpbmVbImxpbmUtd2lkdGgiXSksImxpbmUtZ2FwLXdpZHRoIjpuZXcganIoSS5wYWludF9saW5lWyJsaW5lLWdhcC13aWR0aCJdKSwibGluZS1vZmZzZXQiOm5ldyBqcihJLnBhaW50X2xpbmVbImxpbmUtb2Zmc2V0Il0pLCJsaW5lLWJsdXIiOm5ldyBqcihJLnBhaW50X2xpbmVbImxpbmUtYmx1ciJdKSwibGluZS1kYXNoYXJyYXkiOm5ldyBWcihJLnBhaW50X2xpbmVbImxpbmUtZGFzaGFycmF5Il0pLCJsaW5lLXBhdHRlcm4iOm5ldyBWcihJLnBhaW50X2xpbmVbImxpbmUtcGF0dGVybiJdKSwibGluZS1ncmFkaWVudCI6bmV3IFVyKEkucGFpbnRfbGluZVsibGluZS1ncmFkaWVudCJdKX0pLGxheW91dDpUYX0sTWE9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiByPW5ldyBMcihNYXRoLmZsb29yKHIuem9vbSkse25vdzpyLm5vdyxmYWRlRHVyYXRpb246ci5mYWRlRHVyYXRpb24sem9vbUhpc3Rvcnk6ci56b29tSGlzdG9yeSx0cmFuc2l0aW9uOnIudHJhbnNpdGlvbn0pLHQucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGUuY2FsbCh0aGlzLGUscil9LGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gcj1wKHt9LHIse3pvb206TWF0aC5mbG9vcihyLnpvb20pfSksdC5wcm90b3R5cGUuZXZhbHVhdGUuY2FsbCh0aGlzLGUscixuKX0sZX0oanIpKShBYS5wYWludC5wcm9wZXJ0aWVzWyJsaW5lLXdpZHRoIl0uc3BlY2lmaWNhdGlvbik7TWEudXNlSW50ZWdlclpvb209ITA7dmFyIFNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxBYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4pe3QucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHkuY2FsbCh0aGlzLGUscixuKSwibGluZS1ncmFkaWVudCI9PT1lJiZ0aGlzLl91cGRhdGVHcmFkaWVudCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlR3JhZGllbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbImxpbmUtZ3JhZGllbnQiXS52YWx1ZS5leHByZXNzaW9uO3RoaXMuZ3JhZGllbnQ9aGkodCwibGluZVByb2dyZXNzIiksdGhpcy5ncmFkaWVudFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUpLHRoaXMucGFpbnQuX3ZhbHVlc1sibGluZS1mbG9vcndpZHRoIl09TWEucG9zc2libHlFdmFsdWF0ZSh0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuX3ZhbHVlc1sibGluZS13aWR0aCJdLnZhbHVlLGUpfSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3YSh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPUVhKCRuKCJsaW5lLXdpZHRoIix0aGlzLGUpLCRuKCJsaW5lLWdhcC13aWR0aCIsdGhpcyxlKSksbj0kbigibGluZS1vZmZzZXQiLHRoaXMsZSk7cmV0dXJuIHIvMitNYXRoLmFicyhuKStKbih0aGlzLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPUtuKHQsdGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlLWFuY2hvciIpLGkuYW5nbGUsYSkscz1hLzIqRWEodGhpcy5wYWludC5nZXQoImxpbmUtd2lkdGgiKS5ldmFsdWF0ZShlKSx0aGlzLnBhaW50LmdldCgibGluZS1nYXAtd2lkdGgiKS5ldmFsdWF0ZShlKSksYz10aGlzLnBhaW50LmdldCgibGluZS1vZmZzZXQiKS5ldmFsdWF0ZShlKTtyZXR1cm4gYyYmKHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1uZXcgbCgwLDApLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPXRbaV0sbz1bXSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBjPWFbcy0xXSx1PWFbc10sZj1hW3MrMV0saD0wPT09cz9uOnUuc3ViKGMpLl91bml0KCkuX3BlcnAoKSxwPXM9PT1hLmxlbmd0aC0xP246Zi5zdWIodSkuX3VuaXQoKS5fcGVycCgpLGQ9aC5fYWRkKHApLl91bml0KCksZz1kLngqcC54K2QueSpwLnk7ZC5fbXVsdCgxL2cpLG8ucHVzaChkLl9tdWx0KGUpLl9hZGQodSkpfXIucHVzaChvKX1yZXR1cm4gcn0ocixjKmEpKSxVbihvLHIscyl9LGV9KEhyKTtmdW5jdGlvbiBFYSh0LGUpe3JldHVybiBlPjA/ZSsyKnQ6dH12YXIgQ2E9WHIoW3tuYW1lOiJhX3Bvc19vZmZzZXQiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50MTYifV0pLExhPVhyKFt7bmFtZToiYV9wcm9qZWN0ZWRfcG9zIixjb21wb25lbnRzOjMsdHlwZToiRmxvYXQzMiJ9XSw0KSx6YT0oWHIoW3tuYW1lOiJhX2ZhZGVfb3BhY2l0eSIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQzMiJ9XSw0KSxYcihbe25hbWU6ImFfcGxhY2VkIixjb21wb25lbnRzOjIsdHlwZToiVWludDgifV0sNCkpLE9hPShYcihbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieDEifSx7dHlwZToiSW50MTYiLG5hbWU6InkxIn0se3R5cGU6IkludDE2IixuYW1lOiJ4MiJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieTIifSx7dHlwZToiVWludDMyIixuYW1lOiJmZWF0dXJlSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJzb3VyY2VMYXllckluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiYnVja2V0SW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6InJhZGl1cyJ9LHt0eXBlOiJJbnQxNiIsbmFtZToic2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yIn1dKSxYcihbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9hbmNob3JfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9leHRydWRlIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkpLElhPVhyKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2FuY2hvcl9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2V4dHJ1ZGUiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KTtmdW5jdGlvbiBEYSh0LGUscil7dmFyIG49ZS5sYXlvdXQuZ2V0KCJ0ZXh0LXRyYW5zZm9ybSIpLmV2YWx1YXRlKHIpO3JldHVybiJ1cHBlcmNhc2UiPT09bj90PXQudG9Mb2NhbGVVcHBlckNhc2UoKToibG93ZXJjYXNlIj09PW4mJih0PXQudG9Mb2NhbGVMb3dlckNhc2UoKSksQ3IuYXBwbHlBcmFiaWNTaGFwaW5nJiYodD1Dci5hcHBseUFyYWJpY1NoYXBpbmcodCkpLHR9WHIoW3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWSJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImdseXBoU3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Im51bUdseXBocyJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6InZlcnRleFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDMyIixuYW1lOiJsaW5lU3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImxpbmVMZW5ndGgifSx7dHlwZToiVWludDE2IixuYW1lOiJzZWdtZW50In0se3R5cGU6IlVpbnQxNiIsbmFtZToibG93ZXJTaXplIn0se3R5cGU6IlVpbnQxNiIsbmFtZToidXBwZXJTaXplIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImxpbmVPZmZzZXRYIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImxpbmVPZmZzZXRZIn0se3R5cGU6IlVpbnQ4IixuYW1lOiJ3cml0aW5nTW9kZSJ9LHt0eXBlOiJVaW50OCIsbmFtZToiaGlkZGVuIn1dKSxYcihbe3R5cGU6IkZsb2F0MzIiLG5hbWU6Im9mZnNldFgifV0pLFhyKFt7dHlwZToiSW50MTYiLG5hbWU6IngifSx7dHlwZToiSW50MTYiLG5hbWU6InkifSx7dHlwZToiSW50MTYiLG5hbWU6InRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yIn1dKTt2YXIgUGE9eyIhIjoiXHVmZTE1IiwiIyI6Ilx1ZmYwMyIsJDoiXHVmZjA0IiwiJSI6Ilx1ZmYwNSIsIiYiOiJcdWZmMDYiLCIoIjoiXHVmZTM1IiwiKSI6Ilx1ZmUzNiIsIioiOiJcdWZmMGEiLCIrIjoiXHVmZjBiIiwiLCI6Ilx1ZmUxMCIsIi0iOiJcdWZlMzIiLCIuIjoiXHUzMGZiIiwiLyI6Ilx1ZmYwZiIsIjoiOiJcdWZlMTMiLCI7IjoiXHVmZTE0IiwiPCI6Ilx1ZmUzZiIsIj0iOiJcdWZmMWQiLCI+IjoiXHVmZTQwIiwiPyI6Ilx1ZmUxNiIsIkAiOiJcdWZmMjAiLCJbIjoiXHVmZTQ3IiwiXFwiOiJcdWZmM2MiLCJdIjoiXHVmZTQ4IiwiXiI6Ilx1ZmYzZSIsXzoiXHVmZTMzIiwiYCI6Ilx1ZmY0MCIsInsiOiJcdWZlMzciLCJ8IjoiXHUyMDE1IiwifSI6Ilx1ZmUzOCIsIn4iOiJcdWZmNWUiLCJceGEyIjoiXHVmZmUwIiwiXHhhMyI6Ilx1ZmZlMSIsIlx4YTUiOiJcdWZmZTUiLCJceGE2IjoiXHVmZmU0IiwiXHhhYyI6Ilx1ZmZlMiIsIlx4YWYiOiJcdWZmZTMiLCJcdTIwMTMiOiJcdWZlMzIiLCJcdTIwMTQiOiJcdWZlMzEiLCJcdTIwMTgiOiJcdWZlNDMiLCJcdTIwMTkiOiJcdWZlNDQiLCJcdTIwMWMiOiJcdWZlNDEiLCJcdTIwMWQiOiJcdWZlNDIiLCJcdTIwMjYiOiJcdWZlMTkiLCJcdTIwMjciOiJcdTMwZmIiLCJcdTIwYTkiOiJcdWZmZTYiLCJcdTMwMDEiOiJcdWZlMTEiLCJcdTMwMDIiOiJcdWZlMTIiLCJcdTMwMDgiOiJcdWZlM2YiLCJcdTMwMDkiOiJcdWZlNDAiLCJcdTMwMGEiOiJcdWZlM2QiLCJcdTMwMGIiOiJcdWZlM2UiLCJcdTMwMGMiOiJcdWZlNDEiLCJcdTMwMGQiOiJcdWZlNDIiLCJcdTMwMGUiOiJcdWZlNDMiLCJcdTMwMGYiOiJcdWZlNDQiLCJcdTMwMTAiOiJcdWZlM2IiLCJcdTMwMTEiOiJcdWZlM2MiLCJcdTMwMTQiOiJcdWZlMzkiLCJcdTMwMTUiOiJcdWZlM2EiLCJcdTMwMTYiOiJcdWZlMTciLCJcdTMwMTciOiJcdWZlMTgiLCJcdWZmMDEiOiJcdWZlMTUiLCJcdWZmMDgiOiJcdWZlMzUiLCJcdWZmMDkiOiJcdWZlMzYiLCJcdWZmMGMiOiJcdWZlMTAiLCJcdWZmMGQiOiJcdWZlMzIiLCJcdWZmMGUiOiJcdTMwZmIiLCJcdWZmMWEiOiJcdWZlMTMiLCJcdWZmMWIiOiJcdWZlMTQiLCJcdWZmMWMiOiJcdWZlM2YiLCJcdWZmMWUiOiJcdWZlNDAiLCJcdWZmMWYiOiJcdWZlMTYiLCJcdWZmM2IiOiJcdWZlNDciLCJcdWZmM2QiOiJcdWZlNDgiLCJcdWZmM2YiOiJcdWZlMzMiLCJcdWZmNWIiOiJcdWZlMzciLCJcdWZmNWMiOiJcdTIwMTUiLCJcdWZmNWQiOiJcdWZlMzgiLCJcdWZmNWYiOiJcdWZlMzUiLCJcdWZmNjAiOiJcdWZlMzYiLCJcdWZmNjEiOiJcdWZlMTIiLCJcdWZmNjIiOiJcdWZlNDEiLCJcdWZmNjMiOiJcdWZlNDIifSxSYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuLGkpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5hbmdsZT1uLHZvaWQgMCE9PWkmJih0aGlzLnNlZ21lbnQ9aSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMueCx0aGlzLnksdGhpcy5hbmdsZSx0aGlzLnNlZ21lbnQpfSxlfShsKTtmdW5jdGlvbiBGYSh0LGUpe3ZhciByPWUuZXhwcmVzc2lvbjtpZigiY29uc3RhbnQiPT09ci5raW5kKXJldHVybntmdW5jdGlvblR5cGU6ImNvbnN0YW50IixsYXlvdXRTaXplOnIuZXZhbHVhdGUobmV3IExyKHQrMSkpfTtpZigic291cmNlIj09PXIua2luZClyZXR1cm57ZnVuY3Rpb25UeXBlOiJzb3VyY2UifTtmb3IodmFyIG49ci56b29tU3RvcHMsaT0wO2k8bi5sZW5ndGgmJm5baV08PXQ7KWkrKztmb3IodmFyIGE9aT1NYXRoLm1heCgwLGktMSk7YTxuLmxlbmd0aCYmblthXTx0KzE7KWErKzthPU1hdGgubWluKG4ubGVuZ3RoLTEsYSk7dmFyIG89e21pbjpuW2ldLG1heDpuW2FdfTtyZXR1cm4iY29tcG9zaXRlIj09PXIua2luZD97ZnVuY3Rpb25UeXBlOiJjb21wb3NpdGUiLHpvb21SYW5nZTpvLHByb3BlcnR5VmFsdWU6ZS52YWx1ZX06e2Z1bmN0aW9uVHlwZToiY2FtZXJhIixsYXlvdXRTaXplOnIuZXZhbHVhdGUobmV3IExyKHQrMSkpLHpvb21SYW5nZTpvLHNpemVSYW5nZTp7bWluOnIuZXZhbHVhdGUobmV3IExyKG8ubWluKSksbWF4OnIuZXZhbHVhdGUobmV3IExyKG8ubWF4KSl9LHByb3BlcnR5VmFsdWU6ZS52YWx1ZX19cHIoIkFuY2hvciIsUmEpO3ZhciBCYT1nYS5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyxOYT1be25hbWU6ImFfZmFkZV9vcGFjaXR5Iixjb21wb25lbnRzOjEsdHlwZToiVWludDgiLG9mZnNldDowfV07ZnVuY3Rpb24gamEodCxlLHIsbixpLGEsbyxzKXt0LmVtcGxhY2VCYWNrKGUscixNYXRoLnJvdW5kKDMyKm4pLE1hdGgucm91bmQoMzIqaSksYSxvLHM/c1swXTowLHM/c1sxXTowKX1mdW5jdGlvbiBWYSh0LGUscil7dC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpfXZhciBVYT1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyB0bix0aGlzLmluZGV4QXJyYXk9bmV3IGZuLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXQsdGhpcy5zZWdtZW50cz1uZXcgTW4sdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk9bmV3IGVuLHRoaXMub3BhY2l0eVZlcnRleEFycmF5PW5ldyBybix0aGlzLnBsYWNlZFN5bWJvbEFycmF5PW5ldyB5bn07VWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0LGUpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksQ2EubWVtYmVycyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSxlKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LExhLm1lbWJlcnMsITApLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSxOYSwhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLml0ZW1TaXplPTF9LFVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLmRlc3Ryb3koKSl9LHByKCJTeW1ib2xCdWZmZXJzIixVYSk7dmFyIHFhPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyB0LHRoaXMubGF5b3V0QXR0cmlidXRlcz1lLHRoaXMuaW5kZXhBcnJheT1uZXcgcix0aGlzLnNlZ21lbnRzPW5ldyBNbix0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5PW5ldyBvbn07cWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMubGF5b3V0QXR0cmlidXRlcyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheSx6YS5tZW1iZXJzLCEwKX0scWEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlci5kZXN0cm95KCkpfSxwcigiQ29sbGlzaW9uQnVmZmVycyIscWEpO3ZhciBIYT1mdW5jdGlvbih0KXt0aGlzLmNvbGxpc2lvbkJveEFycmF5PXQuY29sbGlzaW9uQm94QXJyYXksdGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyx0aGlzLnNvdXJjZUxheWVySW5kZXg9dC5zb3VyY2VMYXllckluZGV4O3ZhciBlPXRoaXMubGF5ZXJzWzBdLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzO3RoaXMudGV4dFNpemVEYXRhPUZhKHRoaXMuem9vbSxlWyJ0ZXh0LXNpemUiXSksdGhpcy5pY29uU2l6ZURhdGE9RmEodGhpcy56b29tLGVbImljb24tc2l6ZSJdKTt2YXIgcj10aGlzLmxheWVyc1swXS5sYXlvdXQ7dGhpcy5zb3J0RmVhdHVyZXNCeVk9ci5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpfHxyLmdldCgiaWNvbi1hbGxvdy1vdmVybGFwIil8fHIuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKXx8ci5nZXQoImljb24taWdub3JlLXBsYWNlbWVudCIpfTtIYS5wcm90b3R5cGUuY3JlYXRlQXJyYXlzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PW5ldyBVYShuZXcgSW4oQ2EubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sZnVuY3Rpb24odCl7cmV0dXJuL150ZXh0Ly50ZXN0KHQpfSkpLHRoaXMuaWNvbj1uZXcgVWEobmV3IEluKENhLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLGZ1bmN0aW9uKHQpe3JldHVybi9eaWNvbi8udGVzdCh0KX0pKSx0aGlzLmNvbGxpc2lvbkJveD1uZXcgcWEoYW4sT2EubWVtYmVycyxobiksdGhpcy5jb2xsaXNpb25DaXJjbGU9bmV3IHFhKGFuLElhLm1lbWJlcnMsZm4pLHRoaXMuZ2x5cGhPZmZzZXRBcnJheT1uZXcgYm4sdGhpcy5saW5lVmVydGV4QXJyYXk9bmV3IHdufSxIYS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVyc1swXSxuPXIubGF5b3V0LGk9bi5nZXQoInRleHQtZm9udCIpLGE9bi5nZXQoInRleHQtZmllbGQiKSxvPW4uZ2V0KCJpY29uLWltYWdlIikscz0oImNvbnN0YW50IiE9PWEudmFsdWUua2luZHx8YS52YWx1ZS52YWx1ZS5sZW5ndGg+MCkmJigiY29uc3RhbnQiIT09aS52YWx1ZS5raW5kfHxpLnZhbHVlLnZhbHVlLmxlbmd0aD4wKSxsPSJjb25zdGFudCIhPT1vLnZhbHVlLmtpbmR8fG8udmFsdWUudmFsdWUmJm8udmFsdWUudmFsdWUubGVuZ3RoPjA7aWYodGhpcy5mZWF0dXJlcz1bXSxzfHxsKXtmb3IodmFyIGM9ZS5pY29uRGVwZW5kZW5jaWVzLHU9ZS5nbHlwaERlcGVuZGVuY2llcyxmPW5ldyBMcih0aGlzLnpvb20pLGg9MCxwPXQ7aDxwLmxlbmd0aDtoKz0xKXt2YXIgZD1wW2hdLGc9ZC5mZWF0dXJlLHY9ZC5pbmRleCxtPWQuc291cmNlTGF5ZXJJbmRleDtpZihyLl9mZWF0dXJlRmlsdGVyKGYsZykpe3ZhciB5PXZvaWQgMDtzJiYoeT1EYSh5PXIuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKCJ0ZXh0LWZpZWxkIixnKSxyLGcpKTt2YXIgeD12b2lkIDA7aWYobCYmKHg9ci5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoImljb24taW1hZ2UiLGcpKSx5fHx4KXt2YXIgYj17dGV4dDp5LGljb246eCxpbmRleDp2LHNvdXJjZUxheWVySW5kZXg6bSxnZW9tZXRyeTpGbihnKSxwcm9wZXJ0aWVzOmcucHJvcGVydGllcyx0eXBlOkJhW2cudHlwZV19O2lmKHZvaWQgMCE9PWcuaWQmJihiLmlkPWcuaWQpLHRoaXMuZmVhdHVyZXMucHVzaChiKSx4JiYoY1t4XT0hMCkseSlmb3IodmFyIF89aS5ldmFsdWF0ZShnKS5qb2luKCIsIiksdz11W19dPXVbX118fHt9LGs9Im1hcCI9PT1uLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmImxpbmUiPT09bi5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxUPXhyKHkpLEE9MDtBPHkubGVuZ3RoO0ErKylpZih3W3kuY2hhckNvZGVBdChBKV09ITAsayYmVCl7dmFyIE09UGFbeS5jaGFyQXQoQSldO00mJih3W00uY2hhckNvZGVBdCgwKV09ITApfX19fSJsaW5lIj09PW4uZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikmJih0aGlzLmZlYXR1cmVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9e30sbj1bXSxpPTA7ZnVuY3Rpb24gYShlKXtuLnB1c2godFtlXSksaSsrfWZ1bmN0aW9uIG8odCxlLGkpe3ZhciBhPXJbdF07cmV0dXJuIGRlbGV0ZSByW3RdLHJbZV09YSxuW2FdLmdlb21ldHJ5WzBdLnBvcCgpLG5bYV0uZ2VvbWV0cnlbMF09blthXS5nZW9tZXRyeVswXS5jb25jYXQoaVswXSksYX1mdW5jdGlvbiBzKHQscixpKXt2YXIgYT1lW3JdO3JldHVybiBkZWxldGUgZVtyXSxlW3RdPWEsblthXS5nZW9tZXRyeVswXS5zaGlmdCgpLG5bYV0uZ2VvbWV0cnlbMF09aVswXS5jb25jYXQoblthXS5nZW9tZXRyeVswXSksYX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1yP2VbMF1bZVswXS5sZW5ndGgtMV06ZVswXVswXTtyZXR1cm4gdCsiOiIrbi54KyI6IituLnl9Zm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXRbY10sZj11Lmdlb21ldHJ5LGg9dS50ZXh0O2lmKGgpe3ZhciBwPWwoaCxmKSxkPWwoaCxmLCEwKTtpZihwIGluIHImJmQgaW4gZSYmcltwXSE9PWVbZF0pe3ZhciBnPXMocCxkLGYpLHY9byhwLGQsbltnXS5nZW9tZXRyeSk7ZGVsZXRlIGVbcF0sZGVsZXRlIHJbZF0scltsKGgsblt2XS5nZW9tZXRyeSwhMCldPXYsbltnXS5nZW9tZXRyeT1udWxsfWVsc2UgcCBpbiByP28ocCxkLGYpOmQgaW4gZT9zKHAsZCxmKTooYShjKSxlW3BdPWktMSxyW2RdPWktMSl9ZWxzZSBhKGMpfXJldHVybiBuLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5nZW9tZXRyeX0pfSh0aGlzLmZlYXR1cmVzKSl9fSxIYS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RofSxIYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudGV4dC51cGxvYWQodCx0aGlzLnNvcnRGZWF0dXJlc0J5WSksdGhpcy5pY29uLnVwbG9hZCh0LHRoaXMuc29ydEZlYXR1cmVzQnlZKSx0aGlzLmNvbGxpc2lvbkJveC51cGxvYWQodCksdGhpcy5jb2xsaXNpb25DaXJjbGUudXBsb2FkKHQpfSxIYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudGV4dC5kZXN0cm95KCksdGhpcy5pY29uLmRlc3Ryb3koKSx0aGlzLmNvbGxpc2lvbkJveC5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25DaXJjbGUuZGVzdHJveSgpfSxIYS5wcm90b3R5cGUuYWRkVG9MaW5lVmVydGV4QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGg7aWYodm9pZCAwIT09dC5zZWdtZW50KXtmb3IodmFyIG49dC5kaXN0KGVbdC5zZWdtZW50KzFdKSxpPXQuZGlzdChlW3Quc2VnbWVudF0pLGE9e30sbz10LnNlZ21lbnQrMTtvPGUubGVuZ3RoO28rKylhW29dPXt4OmVbb10ueCx5OmVbb10ueSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjpufSxvPGUubGVuZ3RoLTEmJihuKz1lW28rMV0uZGlzdChlW29dKSk7Zm9yKHZhciBzPXQuc2VnbWVudHx8MDtzPj0wO3MtLSlhW3NdPXt4OmVbc10ueCx5OmVbc10ueSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjppfSxzPjAmJihpKz1lW3MtMV0uZGlzdChlW3NdKSk7Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBjPWFbbF07dGhpcy5saW5lVmVydGV4QXJyYXkuZW1wbGFjZUJhY2soYy54LGMueSxjLnRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKX19cmV0dXJue2xpbmVTdGFydEluZGV4OnIsbGluZUxlbmd0aDp0aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGgtcn19LEhhLnByb3RvdHlwZS5hZGRTeW1ib2xzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe2Zvcih2YXIgdT10LmluZGV4QXJyYXksZj10LmxheW91dFZlcnRleEFycmF5LGg9dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkscD10LnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQqZS5sZW5ndGgsdC5sYXlvdXRWZXJ0ZXhBcnJheSx0LmluZGV4QXJyYXkpLGQ9dGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aCxnPXAudmVydGV4TGVuZ3RoLHY9MCxtPWU7djxtLmxlbmd0aDt2Kz0xKXt2YXIgeT1tW3ZdLHg9eS50bCxiPXkudHIsXz15LmJsLHc9eS5icixrPXkudGV4LFQ9cC52ZXJ0ZXhMZW5ndGgsQT15LmdseXBoT2Zmc2V0WzFdO2phKGYscy54LHMueSx4LngsQSt4Lnksay54LGsueSxyKSxqYShmLHMueCxzLnksYi54LEErYi55LGsueCtrLncsay55LHIpLGphKGYscy54LHMueSxfLngsQStfLnksay54LGsueStrLmgsciksamEoZixzLngscy55LHcueCxBK3cueSxrLngray53LGsueStrLmgsciksVmEoaCxzLDApLHUuZW1wbGFjZUJhY2soVCxUKzEsVCsyKSx1LmVtcGxhY2VCYWNrKFQrMSxUKzIsVCszKSxwLnZlcnRleExlbmd0aCs9NCxwLnByaW1pdGl2ZUxlbmd0aCs9Mix0aGlzLmdseXBoT2Zmc2V0QXJyYXkuZW1wbGFjZUJhY2soeS5nbHlwaE9mZnNldFswXSl9dC5wbGFjZWRTeW1ib2xBcnJheS5lbXBsYWNlQmFjayhzLngscy55LGQsdGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aC1kLGcsbCxjLHMuc2VnbWVudCxyP3JbMF06MCxyP3JbMV06MCxuWzBdLG5bMV0sbywhMSksdC5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0LmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxhKX0sSGEucHJvdG90eXBlLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleD1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBlLmVtcGxhY2VCYWNrKDAsMCksdC5lbXBsYWNlQmFjayhyLngsci55LG4ueCxuLnksTWF0aC5yb3VuZChpLngpLE1hdGgucm91bmQoaS55KSl9LEhhLnByb3RvdHlwZS5hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRpY2VzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGM9aS5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LGkubGF5b3V0VmVydGV4QXJyYXksaS5pbmRleEFycmF5KSx1PWMudmVydGV4TGVuZ3RoLGY9aS5sYXlvdXRWZXJ0ZXhBcnJheSxoPWkuY29sbGlzaW9uVmVydGV4QXJyYXk7aWYodGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgoZixoLGEsby5hbmNob3IsbmV3IGwodCxlKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgoZixoLGEsby5hbmNob3IsbmV3IGwocixlKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgoZixoLGEsby5hbmNob3IsbmV3IGwocixuKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgoZixoLGEsby5hbmNob3IsbmV3IGwodCxuKSksYy52ZXJ0ZXhMZW5ndGgrPTQscyl7dmFyIHA9aS5pbmRleEFycmF5O3AuZW1wbGFjZUJhY2sodSx1KzEsdSsyKSxwLmVtcGxhY2VCYWNrKHUsdSsyLHUrMyksYy5wcmltaXRpdmVMZW5ndGgrPTJ9ZWxzZXt2YXIgZD1pLmluZGV4QXJyYXk7ZC5lbXBsYWNlQmFjayh1LHUrMSksZC5lbXBsYWNlQmFjayh1KzEsdSsyKSxkLmVtcGxhY2VCYWNrKHUrMix1KzMpLGQuZW1wbGFjZUJhY2sodSszLHUpLGMucHJpbWl0aXZlTGVuZ3RoKz00fX0sSGEucHJvdG90eXBlLmdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLnN5bWJvbEluc3RhbmNlczt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07ci50ZXh0Q29sbGlzaW9uRmVhdHVyZT17Ym94U3RhcnRJbmRleDpyLnRleHRCb3hTdGFydEluZGV4LGJveEVuZEluZGV4OnIudGV4dEJveEVuZEluZGV4fSxyLmljb25Db2xsaXNpb25GZWF0dXJlPXtib3hTdGFydEluZGV4OnIuaWNvbkJveFN0YXJ0SW5kZXgsYm94RW5kSW5kZXg6ci5pY29uQm94RW5kSW5kZXh9O2Zvcih2YXIgbj0wO248MjtuKyspe3ZhciBpPXJbMD09PW4/InRleHRDb2xsaXNpb25GZWF0dXJlIjoiaWNvbkNvbGxpc2lvbkZlYXR1cmUiXTtpZihpKWZvcih2YXIgYT1pLmJveFN0YXJ0SW5kZXg7YTxpLmJveEVuZEluZGV4O2ErKyl7dmFyIG89dGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQoYSkscz1vLngxLGw9by55MSxjPW8ueDIsdT1vLnkyLGY9by5yYWRpdXM+MDt0aGlzLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMocyxsLGMsdSxmP3RoaXMuY29sbGlzaW9uQ2lyY2xlOnRoaXMuY29sbGlzaW9uQm94LG8uYW5jaG9yUG9pbnQscixmKX19fX0sSGEucHJvdG90eXBlLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9e30sbz1lO288cjtvKyspe3ZhciBzPXQuZ2V0KG8pO2lmKDA9PT1zLnJhZGl1cyl7YS50ZXh0Qm94PXt4MTpzLngxLHkxOnMueTEseDI6cy54Mix5MjpzLnkyLGFuY2hvclBvaW50WDpzLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6cy5hbmNob3JQb2ludFl9LGEudGV4dEZlYXR1cmVJbmRleD1zLmZlYXR1cmVJbmRleDticmVha31hLnRleHRDaXJjbGVzfHwoYS50ZXh0Q2lyY2xlcz1bXSxhLnRleHRGZWF0dXJlSW5kZXg9cy5mZWF0dXJlSW5kZXgpLGEudGV4dENpcmNsZXMucHVzaChzLmFuY2hvclBvaW50WCxzLmFuY2hvclBvaW50WSxzLnJhZGl1cyxzLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciwxKX1mb3IodmFyIGw9bjtsPGk7bCsrKXt2YXIgYz10LmdldChsKTtpZigwPT09Yy5yYWRpdXMpe2EuaWNvbkJveD17eDE6Yy54MSx5MTpjLnkxLHgyOmMueDIseTI6Yy55MixhbmNob3JQb2ludFg6Yy5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOmMuYW5jaG9yUG9pbnRZfSxhLmljb25GZWF0dXJlSW5kZXg9Yy5mZWF0dXJlSW5kZXg7YnJlYWt9fXJldHVybiBhfSxIYS5wcm90b3R5cGUuaGFzVGV4dERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzSWNvbkRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzQ29sbGlzaW9uQm94RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sSGEucHJvdG90eXBlLmhhc0NvbGxpc2lvbkNpcmNsZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xsaXNpb25DaXJjbGUuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LEhhLnByb3RvdHlwZS5zb3J0RmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLnNvcnRGZWF0dXJlc0J5WSYmdGhpcy5zb3J0ZWRBbmdsZSE9PXQmJih0aGlzLnNvcnRlZEFuZ2xlPXQsISh0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjF8fHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MSkpKXtmb3IodmFyIHI9W10sbj0wO248dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO24rKylyLnB1c2gobik7dmFyIGk9TWF0aC5zaW4odCksYT1NYXRoLmNvcyh0KTtyLnNvcnQoZnVuY3Rpb24odCxyKXt2YXIgbj1lLnN5bWJvbEluc3RhbmNlc1t0XSxvPWUuc3ltYm9sSW5zdGFuY2VzW3JdO3JldHVybihpKm4uYW5jaG9yLngrYSpuLmFuY2hvci55fDApLShpKm8uYW5jaG9yLngrYSpvLmFuY2hvci55fDApfHxvLmZlYXR1cmVJbmRleC1uLmZlYXR1cmVJbmRleH0pLHRoaXMudGV4dC5pbmRleEFycmF5LmNsZWFyKCksdGhpcy5pY29uLmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmZlYXR1cmVTb3J0T3JkZXI9W107Zm9yKHZhciBvPTAscz1yO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWUuc3ltYm9sSW5zdGFuY2VzW2xdO2UuZmVhdHVyZVNvcnRPcmRlci5wdXNoKGMuZmVhdHVyZUluZGV4KTtmb3IodmFyIHU9MCxmPWMucGxhY2VkVGV4dFN5bWJvbEluZGljZXM7dTxmLmxlbmd0aDt1Kz0xKWZvcih2YXIgaD1mW3VdLHA9ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChoKSxkPXAudmVydGV4U3RhcnRJbmRleCs0KnAubnVtR2x5cGhzLGc9cC52ZXJ0ZXhTdGFydEluZGV4O2c8ZDtnKz00KWUudGV4dC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGcsZysxLGcrMiksZS50ZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soZysxLGcrMixnKzMpO3ZhciB2PWUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQobCk7aWYodi5udW1HbHlwaHMpe3ZhciBtPXYudmVydGV4U3RhcnRJbmRleDtlLmljb24uaW5kZXhBcnJheS5lbXBsYWNlQmFjayhtLG0rMSxtKzIpLGUuaWNvbi5pbmRleEFycmF5LmVtcGxhY2VCYWNrKG0rMSxtKzIsbSszKX19dGhpcy50ZXh0LmluZGV4QnVmZmVyJiZ0aGlzLnRleHQuaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnRleHQuaW5kZXhBcnJheSksdGhpcy5pY29uLmluZGV4QnVmZmVyJiZ0aGlzLmljb24uaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLmljb24uaW5kZXhBcnJheSl9fSxwcigiU3ltYm9sQnVja2V0IixIYSx7b21pdDpbImxheWVycyIsImNvbGxpc2lvbkJveEFycmF5IiwiZmVhdHVyZXMiLCJjb21wYXJlVGV4dCJdLHNoYWxsb3c6WyJzeW1ib2xJbnN0YW5jZXMiXX0pLEhhLk1BWF9HTFlQSFM9NjU1MzUsSGEuYWRkRHluYW1pY0F0dHJpYnV0ZXM9VmE7dmFyIEdhPW5ldyBxcih7InN5bWJvbC1wbGFjZW1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInN5bWJvbC1wbGFjZW1lbnQiXSksInN5bWJvbC1zcGFjaW5nIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtc3BhY2luZyJdKSwic3ltYm9sLWF2b2lkLWVkZ2VzIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtYXZvaWQtZWRnZXMiXSksImljb24tYWxsb3ctb3ZlcmxhcCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1hbGxvdy1vdmVybGFwIl0pLCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbImljb24taWdub3JlLXBsYWNlbWVudCJdKSwiaWNvbi1vcHRpb25hbCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1vcHRpb25hbCJdKSwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbImljb24tcm90YXRpb24tYWxpZ25tZW50Il0pLCJpY29uLXNpemUiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbImljb24tc2l6ZSJdKSwiaWNvbi10ZXh0LWZpdCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsiaWNvbi10ZXh0LWZpdCJdKSwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0LXBhZGRpbmciXSksImljb24taW1hZ2UiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbImljb24taW1hZ2UiXSksImljb24tcm90YXRlIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLXJvdGF0ZSJdKSwiaWNvbi1wYWRkaW5nIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLXBhZGRpbmciXSksImljb24ta2VlcC11cHJpZ2h0IjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLWtlZXAtdXByaWdodCJdKSwiaWNvbi1vZmZzZXQiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbImljb24tb2Zmc2V0Il0pLCJpY29uLWFuY2hvciI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1hbmNob3IiXSksImljb24tcGl0Y2gtYWxpZ25tZW50IjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLXBpdGNoLWFsaWdubWVudCJdKSwidGV4dC1waXRjaC1hbGlnbm1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInRleHQtcGl0Y2gtYWxpZ25tZW50Il0pLCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXSksInRleHQtZmllbGQiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtZmllbGQiXSksInRleHQtZm9udCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsidGV4dC1mb250Il0pLCJ0ZXh0LXNpemUiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtc2l6ZSJdKSwidGV4dC1tYXgtd2lkdGgiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtbWF4LXdpZHRoIl0pLCJ0ZXh0LWxpbmUtaGVpZ2h0IjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWxpbmUtaGVpZ2h0Il0pLCJ0ZXh0LWxldHRlci1zcGFjaW5nIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWxldHRlci1zcGFjaW5nIl0pLCJ0ZXh0LWp1c3RpZnkiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtanVzdGlmeSJdKSwidGV4dC1hbmNob3IiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtYW5jaG9yIl0pLCJ0ZXh0LW1heC1hbmdsZSI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsidGV4dC1tYXgtYW5nbGUiXSksInRleHQtcm90YXRlIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXJvdGF0ZSJdKSwidGV4dC1wYWRkaW5nIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXBhZGRpbmciXSksInRleHQta2VlcC11cHJpZ2h0IjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWtlZXAtdXByaWdodCJdKSwidGV4dC10cmFuc2Zvcm0iOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtdHJhbnNmb3JtIl0pLCJ0ZXh0LW9mZnNldCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsidGV4dC1vZmZzZXQiXSksInRleHQtYWxsb3ctb3ZlcmxhcCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsidGV4dC1hbGxvdy1vdmVybGFwIl0pLCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInRleHQtaWdub3JlLXBsYWNlbWVudCJdKSwidGV4dC1vcHRpb25hbCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsidGV4dC1vcHRpb25hbCJdKX0pLFlhPXtwYWludDpuZXcgcXIoeyJpY29uLW9wYWNpdHkiOm5ldyBqcihJLnBhaW50X3N5bWJvbFsiaWNvbi1vcGFjaXR5Il0pLCJpY29uLWNvbG9yIjpuZXcganIoSS5wYWludF9zeW1ib2xbImljb24tY29sb3IiXSksImljb24taGFsby1jb2xvciI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJpY29uLWhhbG8tY29sb3IiXSksImljb24taGFsby13aWR0aCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJpY29uLWhhbG8td2lkdGgiXSksImljb24taGFsby1ibHVyIjpuZXcganIoSS5wYWludF9zeW1ib2xbImljb24taGFsby1ibHVyIl0pLCJpY29uLXRyYW5zbGF0ZSI6bmV3IE5yKEkucGFpbnRfc3ltYm9sWyJpY29uLXRyYW5zbGF0ZSJdKSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjpuZXcgTnIoSS5wYWludF9zeW1ib2xbImljb24tdHJhbnNsYXRlLWFuY2hvciJdKSwidGV4dC1vcGFjaXR5IjpuZXcganIoSS5wYWludF9zeW1ib2xbInRleHQtb3BhY2l0eSJdKSwidGV4dC1jb2xvciI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJ0ZXh0LWNvbG9yIl0pLCJ0ZXh0LWhhbG8tY29sb3IiOm5ldyBqcihJLnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLWNvbG9yIl0pLCJ0ZXh0LWhhbG8td2lkdGgiOm5ldyBqcihJLnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLXdpZHRoIl0pLCJ0ZXh0LWhhbG8tYmx1ciI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJ0ZXh0LWhhbG8tYmx1ciJdKSwidGV4dC10cmFuc2xhdGUiOm5ldyBOcihJLnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUiXSksInRleHQtdHJhbnNsYXRlLWFuY2hvciI6bmV3IE5yKEkucGFpbnRfc3ltYm9sWyJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiXSl9KSxsYXlvdXQ6R2F9LFdhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxZYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50IikmJigibGluZSI9PT10aGlzLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKT90aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdPSJtYXAiOnRoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcm90YXRpb24tYWxpZ25tZW50Il09InZpZXdwb3J0IiksImF1dG8iPT09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYoImxpbmUiPT09dGhpcy5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iik/dGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXT0ibWFwIjp0aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdPSJ2aWV3cG9ydCIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcGl0Y2gtYWxpZ25tZW50Il09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50IikmJih0aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXBpdGNoLWFsaWdubWVudCJdPXRoaXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSl9LGUucHJvdG90eXBlLmdldFZhbHVlQW5kUmVzb2x2ZVRva2Vucz1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5sYXlvdXQuZ2V0KHQpLmV2YWx1YXRlKGUpLGk9dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlc1t0XTtyZXR1cm4gaS5pc0RhdGFEcml2ZW4oKXx8X2UoaS52YWx1ZSk/bjoocj1lLnByb3BlcnRpZXMsbi5yZXBsYWNlKC97KFtee31dKyl9L2csZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbiByP1N0cmluZyhyW2VdKToiIn0pKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSGEodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZX0oSHIpLFhhPXtwYWludDpuZXcgcXIoeyJiYWNrZ3JvdW5kLWNvbG9yIjpuZXcgTnIoSS5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLWNvbG9yIl0pLCJiYWNrZ3JvdW5kLXBhdHRlcm4iOm5ldyBWcihJLnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtcGF0dGVybiJdKSwiYmFja2dyb3VuZC1vcGFjaXR5IjpuZXcgTnIoSS5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLW9wYWNpdHkiXSl9KX0sWmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLFhhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oSHIpLCRhPXtwYWludDpuZXcgcXIoeyJyYXN0ZXItb3BhY2l0eSI6bmV3IE5yKEkucGFpbnRfcmFzdGVyWyJyYXN0ZXItb3BhY2l0eSJdKSwicmFzdGVyLWh1ZS1yb3RhdGUiOm5ldyBOcihJLnBhaW50X3Jhc3RlclsicmFzdGVyLWh1ZS1yb3RhdGUiXSksInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6bmV3IE5yKEkucGFpbnRfcmFzdGVyWyJyYXN0ZXItYnJpZ2h0bmVzcy1taW4iXSksInJhc3Rlci1icmlnaHRuZXNzLW1heCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyWyJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiXSksInJhc3Rlci1zYXR1cmF0aW9uIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbInJhc3Rlci1zYXR1cmF0aW9uIl0pLCJyYXN0ZXItY29udHJhc3QiOm5ldyBOcihJLnBhaW50X3Jhc3RlclsicmFzdGVyLWNvbnRyYXN0Il0pLCJyYXN0ZXItZmFkZS1kdXJhdGlvbiI6bmV3IE5yKEkucGFpbnRfcmFzdGVyWyJyYXN0ZXItZmFkZS1kdXJhdGlvbiJdKX0pfSxKYT17Y2lyY2xlOm5pLGhlYXRtYXA6cGksaGlsbHNoYWRlOmdpLGZpbGw6SmksImZpbGwtZXh0cnVzaW9uIjphYSxsaW5lOlNhLHN5bWJvbDpXYSxiYWNrZ3JvdW5kOlphLHJhc3RlcjpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsJGEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShIcil9LEthPWkoZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyKXtyPXJ8fHt9LHRoaXMudz10fHw2NCx0aGlzLmg9ZXx8NjQsdGhpcy5hdXRvUmVzaXplPSEhci5hdXRvUmVzaXplLHRoaXMuc2hlbHZlcz1bXSx0aGlzLmZyZWViaW5zPVtdLHRoaXMuc3RhdHM9e30sdGhpcy5iaW5zPXt9LHRoaXMubWF4SWQ9MH1mdW5jdGlvbiBlKHQsZSxyKXt0aGlzLng9MCx0aGlzLnk9dCx0aGlzLnc9dGhpcy5mcmVlPWUsdGhpcy5oPXJ9cmV0dXJuIHQucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24odCxlKXt0PVtdLmNvbmNhdCh0KSxlPWV8fHt9O2Zvcih2YXIgcixuLGksYSxvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKylpZihyPXRbc10ud3x8dFtzXS53aWR0aCxuPXRbc10uaHx8dFtzXS5oZWlnaHQsaT10W3NdLmlkLHImJm4pe2lmKCEoYT10aGlzLnBhY2tPbmUocixuLGkpKSljb250aW51ZTtlLmluUGxhY2UmJih0W3NdLng9YS54LHRbc10ueT1hLnksdFtzXS5pZD1hLmlkKSxvLnB1c2goYSl9cmV0dXJuIHRoaXMuc2hyaW5rKCksb30sdC5wcm90b3R5cGUucGFja09uZT1mdW5jdGlvbih0LHIsbil7dmFyIGksYSxvLHMsbCxjLHUsZixoPXtmcmVlYmluOi0xLHNoZWxmOi0xLHdhc3RlOjEvMH0scD0wO2lmKCJzdHJpbmciPT10eXBlb2Ygbnx8Im51bWJlciI9PXR5cGVvZiBuKXtpZihpPXRoaXMuZ2V0QmluKG4pKXJldHVybiB0aGlzLnJlZihpKSxpOyJudW1iZXIiPT10eXBlb2YgbiYmKHRoaXMubWF4SWQ9TWF0aC5tYXgobix0aGlzLm1heElkKSl9ZWxzZSBuPSsrdGhpcy5tYXhJZDtmb3Iocz0wO3M8dGhpcy5mcmVlYmlucy5sZW5ndGg7cysrKXtpZihyPT09KGk9dGhpcy5mcmVlYmluc1tzXSkubWF4aCYmdD09PWkubWF4dylyZXR1cm4gdGhpcy5hbGxvY0ZyZWViaW4ocyx0LHIsbik7cj5pLm1heGh8fHQ+aS5tYXh3fHxyPD1pLm1heGgmJnQ8PWkubWF4dyYmKG89aS5tYXh3KmkubWF4aC10KnIpPGgud2FzdGUmJihoLndhc3RlPW8saC5mcmVlYmluPXMpfWZvcihzPTA7czx0aGlzLnNoZWx2ZXMubGVuZ3RoO3MrKylpZihwKz0oYT10aGlzLnNoZWx2ZXNbc10pLmgsISh0PmEuZnJlZSkpe2lmKHI9PT1hLmgpcmV0dXJuIHRoaXMuYWxsb2NTaGVsZihzLHQscixuKTtyPmEuaHx8cjxhLmgmJihvPShhLmgtcikqdCk8aC53YXN0ZSYmKGguZnJlZWJpbj0tMSxoLndhc3RlPW8saC5zaGVsZj1zKX1yZXR1cm4tMSE9PWguZnJlZWJpbj90aGlzLmFsbG9jRnJlZWJpbihoLmZyZWViaW4sdCxyLG4pOi0xIT09aC5zaGVsZj90aGlzLmFsbG9jU2hlbGYoaC5zaGVsZix0LHIsbik6cjw9dGhpcy5oLXAmJnQ8PXRoaXMudz8oYT1uZXcgZShwLHRoaXMudyxyKSx0aGlzLmFsbG9jU2hlbGYodGhpcy5zaGVsdmVzLnB1c2goYSktMSx0LHIsbikpOnRoaXMuYXV0b1Jlc2l6ZT8obD1jPXRoaXMuaCwoKHU9Zj10aGlzLncpPD1sfHx0PnUpJiYoZj0yKk1hdGgubWF4KHQsdSkpLChsPHV8fHI+bCkmJihjPTIqTWF0aC5tYXgocixsKSksdGhpcy5yZXNpemUoZixjKSx0aGlzLnBhY2tPbmUodCxyLG4pKTpudWxsfSx0LnByb3RvdHlwZS5hbGxvY0ZyZWViaW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5mcmVlYmlucy5zcGxpY2UodCwxKVswXTtyZXR1cm4gaS5pZD1uLGkudz1lLGkuaD1yLGkucmVmY291bnQ9MCx0aGlzLmJpbnNbbl09aSx0aGlzLnJlZihpKSxpfSx0LnByb3RvdHlwZS5hbGxvY1NoZWxmPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuc2hlbHZlc1t0XS5hbGxvYyhlLHIsbik7cmV0dXJuIHRoaXMuYmluc1tuXT1pLHRoaXMucmVmKGkpLGl9LHQucHJvdG90eXBlLnNocmluaz1mdW5jdGlvbigpe2lmKHRoaXMuc2hlbHZlcy5sZW5ndGg+MCl7Zm9yKHZhciB0PTAsZT0wLHI9MDtyPHRoaXMuc2hlbHZlcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzLnNoZWx2ZXNbcl07ZSs9bi5oLHQ9TWF0aC5tYXgobi53LW4uZnJlZSx0KX10aGlzLnJlc2l6ZSh0LGUpfX0sdC5wcm90b3R5cGUuZ2V0QmluPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJpbnNbdF19LHQucHJvdG90eXBlLnJlZj1mdW5jdGlvbih0KXtpZigxPT0rK3QucmVmY291bnQpe3ZhciBlPXQuaDt0aGlzLnN0YXRzW2VdPTErKDB8dGhpcy5zdGF0c1tlXSl9cmV0dXJuIHQucmVmY291bnR9LHQucHJvdG90eXBlLnVucmVmPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5yZWZjb3VudD8wOigwPT0tLXQucmVmY291bnQmJih0aGlzLnN0YXRzW3QuaF0tLSxkZWxldGUgdGhpcy5iaW5zW3QuaWRdLHRoaXMuZnJlZWJpbnMucHVzaCh0KSksdC5yZWZjb3VudCl9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaGVsdmVzPVtdLHRoaXMuZnJlZWJpbnM9W10sdGhpcy5zdGF0cz17fSx0aGlzLmJpbnM9e30sdGhpcy5tYXhJZD0wfSx0LnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt0aGlzLnc9dCx0aGlzLmg9ZTtmb3IodmFyIHI9MDtyPHRoaXMuc2hlbHZlcy5sZW5ndGg7cisrKXRoaXMuc2hlbHZlc1tyXS5yZXNpemUodCk7cmV0dXJuITB9LGUucHJvdG90eXBlLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtpZih0PnRoaXMuZnJlZXx8ZT50aGlzLmgpcmV0dXJuIG51bGw7dmFyIG49dGhpcy54O3JldHVybiB0aGlzLngrPXQsdGhpcy5mcmVlLT10LG5ldyBmdW5jdGlvbih0LGUscixuLGksYSxvKXt0aGlzLmlkPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy53PW4sdGhpcy5oPWksdGhpcy5tYXh3PWF8fG4sdGhpcy5tYXhoPW98fGksdGhpcy5yZWZjb3VudD0wfShyLG4sdGhpcy55LHQsZSx0LHRoaXMuaCl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcmVlKz10LXRoaXMudyx0aGlzLnc9dCwhMH0sdH0oKX0pLFFhPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5waXhlbFJhdGlvO3RoaXMucGFkZGVkUmVjdD10LHRoaXMucGl4ZWxSYXRpbz1yfSx0bz17dGw6e2NvbmZpZ3VyYWJsZTohMH0sYnI6e2NvbmZpZ3VyYWJsZTohMH0sZGlzcGxheVNpemU6e2NvbmZpZ3VyYWJsZTohMH19O3RvLnRsLmdldD1mdW5jdGlvbigpe3JldHVyblt0aGlzLnBhZGRlZFJlY3QueCsxLHRoaXMucGFkZGVkUmVjdC55KzFdfSx0by5ici5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrdGhpcy5wYWRkZWRSZWN0LnctMSx0aGlzLnBhZGRlZFJlY3QueSt0aGlzLnBhZGRlZFJlY3QuaC0xXX0sdG8uZGlzcGxheVNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuWyh0aGlzLnBhZGRlZFJlY3Qudy0yKS90aGlzLnBpeGVsUmF0aW8sKHRoaXMucGFkZGVkUmVjdC5oLTIpL3RoaXMucGl4ZWxSYXRpb119LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFFhLnByb3RvdHlwZSx0byk7dmFyIGVvPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB1aSh7d2lkdGg6MCxoZWlnaHQ6MH0pLHI9e30sbj1uZXcgS2EoMCwwLHthdXRvUmVzaXplOiEwfSk7Zm9yKHZhciBpIGluIHQpe3ZhciBhPXRbaV0sbz1uLnBhY2tPbmUoYS5kYXRhLndpZHRoKzIsYS5kYXRhLmhlaWdodCsyKTtlLnJlc2l6ZSh7d2lkdGg6bi53LGhlaWdodDpuLmh9KSx1aS5jb3B5KGEuZGF0YSxlLHt4OjAseTowfSx7eDpvLngrMSx5Om8ueSsxfSxhLmRhdGEpLHJbaV09bmV3IFFhKG8sYSl9bi5zaHJpbmsoKSxlLnJlc2l6ZSh7d2lkdGg6bi53LGhlaWdodDpuLmh9KSx0aGlzLmltYWdlPWUsdGhpcy5wb3NpdGlvbnM9cn07cHIoIkltYWdlUG9zaXRpb24iLFFhKSxwcigiSW1hZ2VBdGxhcyIsZW8pO3ZhciBybz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2ktMTowLGg9cj8tMToxLHA9dFtlK2ZdO2ZvcihmKz1oLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2ZdLGYrPWgsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2ZdLGYrPWgsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0sbm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPTgqYS1pLTEsdT0oMTw8YyktMSxmPXU+PjEsaD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmEtMSxkPW4/MTotMSxnPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsbz11KToobz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLW8pKTwxJiYoby0tLGwqPTIpLChlKz1vK2Y+PTE/aC9sOmgqTWF0aC5wb3coMiwxLWYpKSpsPj0yJiYobysrLGwvPTIpLG8rZj49dT8ocz0wLG89dSk6bytmPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxvKz1mKToocz1lKk1hdGgucG93KDIsZi0xKSpNYXRoLnBvdygyLGkpLG89MCkpO2k+PTg7dFtyK3BdPTI1NSZzLHArPWQscy89MjU2LGktPTgpO2ZvcihvPW88PGl8cyxjKz1pO2M+MDt0W3IrcF09MjU1Jm8scCs9ZCxvLz0yNTYsYy09OCk7dFtyK3AtZF18PTEyOCpnfSxpbz1hbztmdW5jdGlvbiBhbyh0KXt0aGlzLmJ1Zj1BcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KT90Om5ldyBVaW50OEFycmF5KHR8fDApLHRoaXMucG9zPTAsdGhpcy50eXBlPTAsdGhpcy5sZW5ndGg9dGhpcy5idWYubGVuZ3RofWZ1bmN0aW9uIG9vKHQpe3JldHVybiB0LnR5cGU9PT1hby5CeXRlcz90LnJlYWRWYXJpbnQoKSt0LnBvczp0LnBvcysxfWZ1bmN0aW9uIHNvKHQsZSxyKXtyZXR1cm4gcj80Mjk0OTY3Mjk2KmUrKHQ+Pj4wKTo0Mjk0OTY3Mjk2KihlPj4+MCkrKHQ+Pj4wKX1mdW5jdGlvbiBsbyh0LGUscil7dmFyIG49ZTw9MTYzODM/MTplPD0yMDk3MTUxPzI6ZTw9MjY4NDM1NDU1PzM6TWF0aC5jZWlsKE1hdGgubG9nKGUpLyg3Kk1hdGguTE4yKSk7ci5yZWFsbG9jKG4pO2Zvcih2YXIgaT1yLnBvcy0xO2k+PXQ7aS0tKXIuYnVmW2krbl09ci5idWZbaV19ZnVuY3Rpb24gY28odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlVmFyaW50KHRbcl0pfWZ1bmN0aW9uIHVvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNWYXJpbnQodFtyXSl9ZnVuY3Rpb24gZm8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRmxvYXQodFtyXSl9ZnVuY3Rpb24gaG8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRG91YmxlKHRbcl0pfWZ1bmN0aW9uIHBvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUJvb2xlYW4odFtyXSl9ZnVuY3Rpb24gZ28odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRml4ZWQzMih0W3JdKX1mdW5jdGlvbiB2byh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQzMih0W3JdKX1mdW5jdGlvbiBtbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIHlvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIHhvKHQsZSl7cmV0dXJuKHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTYpKzE2Nzc3MjE2KnRbZSszXX1mdW5jdGlvbiBibyh0LGUscil7dFtyXT1lLHRbcisxXT1lPj4+OCx0W3IrMl09ZT4+PjE2LHRbciszXT1lPj4+MjR9ZnVuY3Rpb24gX28odCxlKXtyZXR1cm4odFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNikrKHRbZSszXTw8MjQpfWFvLlZhcmludD0wLGFvLkZpeGVkNjQ9MSxhby5CeXRlcz0yLGFvLkZpeGVkMzI9NSxhby5wcm90b3R5cGU9e2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmJ1Zj1udWxsfSxyZWFkRmllbGRzOmZ1bmN0aW9uKHQsZSxyKXtmb3Iocj1yfHx0aGlzLmxlbmd0aDt0aGlzLnBvczxyOyl7dmFyIG49dGhpcy5yZWFkVmFyaW50KCksaT1uPj4zLGE9dGhpcy5wb3M7dGhpcy50eXBlPTcmbix0KGksZSx0aGlzKSx0aGlzLnBvcz09PWEmJnRoaXMuc2tpcChuKX1yZXR1cm4gZX0scmVhZE1lc3NhZ2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZWFkRmllbGRzKHQsZSx0aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyl9LHJlYWRGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9eG8odGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkU0ZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD1fbyh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9eG8odGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqeG8odGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRTRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PXhvKHRoaXMuYnVmLHRoaXMucG9zKSs0Mjk0OTY3Mjk2Kl9vKHRoaXMuYnVmLHRoaXMucG9zKzQpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkRmxvYXQ6ZnVuY3Rpb24oKXt2YXIgdD1ybyh0aGlzLmJ1Zix0aGlzLnBvcywhMCwyMyw0KTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZERvdWJsZTpmdW5jdGlvbigpe3ZhciB0PXJvKHRoaXMuYnVmLHRoaXMucG9zLCEwLDUyLDgpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkVmFyaW50OmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLmJ1ZjtyZXR1cm4gZT0xMjcmKHI9blt0aGlzLnBvcysrXSkscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDcscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDE0LHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDwyMSxyPDEyOD9lOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ci5idWY7aWYobj0oMTEyJihpPWFbci5wb3MrK10pKT4+NCxpPDEyOClyZXR1cm4gc28odCxuLGUpO2lmKG58PSgxMjcmKGk9YVtyLnBvcysrXSkpPDwzLGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDEwLGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDE3LGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDI0LGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEmKGk9YVtyLnBvcysrXSkpPDwzMSxpPDEyOClyZXR1cm4gc28odCxuLGUpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXMiKX0oZXw9KDE1JihyPW5bdGhpcy5wb3NdKSk8PDI4LHQsdGhpcykpKSl9LHJlYWRWYXJpbnQ2NDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfSxyZWFkU1ZhcmludDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpO3JldHVybiB0JTI9PTE/KHQrMSkvLTI6dC8yfSxyZWFkQm9vbGVhbjpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKX0scmVhZFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0iIixpPWU7aTxyOyl7dmFyIGEsbyxzLGw9dFtpXSxjPW51bGwsdT1sPjIzOT80Omw+MjIzPzM6bD4xOTE/MjoxO2lmKGkrdT5yKWJyZWFrOzE9PT11P2w8MTI4JiYoYz1sKToyPT09dT8xMjg9PSgxOTImKGE9dFtpKzFdKSkmJihjPSgzMSZsKTw8Nnw2MyZhKTw9MTI3JiYoYz1udWxsKTozPT09dT8oYT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJigoYz0oMTUmbCk8PDEyfCg2MyZhKTw8Nnw2MyZvKTw9MjA0N3x8Yz49NTUyOTYmJmM8PTU3MzQzKSYmKGM9bnVsbCkpOjQ9PT11JiYoYT10W2krMV0sbz10W2krMl0scz10W2krM10sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKChjPSgxNSZsKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk8PTY1NTM1fHxjPj0xMTE0MTEyKSYmKGM9bnVsbCkpLG51bGw9PT1jPyhjPTY1NTMzLHU9MSk6Yz42NTUzNSYmKGMtPTY1NTM2LG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYz4+PjEwJjEwMjN8NTUyOTYpLGM9NTYzMjB8MTAyMyZjKSxuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpLGkrPXV9cmV0dXJuIG59KHRoaXMuYnVmLHRoaXMucG9zLHQpO3JldHVybiB0aGlzLnBvcz10LGV9LHJlYWRCeXRlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX0scmVhZFBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe3ZhciByPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fSxyZWFkUGFja2VkU1ZhcmludDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGbG9hdDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWREb3VibGU6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZpeGVkMzI6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiB0fSxyZWFkUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3JldHVybiB0fSxza2lwOmZ1bmN0aW9uKHQpe3ZhciBlPTcmdDtpZihlPT09YW8uVmFyaW50KWZvcig7dGhpcy5idWZbdGhpcy5wb3MrK10+MTI3Oyk7ZWxzZSBpZihlPT09YW8uQnl0ZXMpdGhpcy5wb3M9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3M7ZWxzZSBpZihlPT09YW8uRml4ZWQzMil0aGlzLnBvcys9NDtlbHNle2lmKGUhPT1hby5GaXhlZDY0KXRocm93IG5ldyBFcnJvcigiVW5pbXBsZW1lbnRlZCB0eXBlOiAiK2UpO3RoaXMucG9zKz04fX0sd3JpdGVUYWc6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50KHQ8PDN8ZSl9LHJlYWxsb2M6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMubGVuZ3RofHwxNjtlPHRoaXMucG9zK3Q7KWUqPTI7aWYoZSE9PXRoaXMubGVuZ3RoKXt2YXIgcj1uZXcgVWludDhBcnJheShlKTtyLnNldCh0aGlzLmJ1ZiksdGhpcy5idWY9cix0aGlzLmxlbmd0aD1lfX0sZmluaXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoPXRoaXMucG9zLHRoaXMucG9zPTAsdGhpcy5idWYuc3ViYXJyYXkoMCx0aGlzLmxlbmd0aCl9LHdyaXRlRml4ZWQzMjpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksYm8odGhpcy5idWYsdCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlU0ZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLGJvKHRoaXMuYnVmLHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZUZpeGVkNjQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDgpLGJvKHRoaXMuYnVmLC0xJnQsdGhpcy5wb3MpLGJvKHRoaXMuYnVmLE1hdGguZmxvb3IodCooMS80Mjk0OTY3Mjk2KSksdGhpcy5wb3MrNCksdGhpcy5wb3MrPTh9LHdyaXRlU0ZpeGVkNjQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDgpLGJvKHRoaXMuYnVmLC0xJnQsdGhpcy5wb3MpLGJvKHRoaXMuYnVmLE1hdGguZmxvb3IodCooMS80Mjk0OTY3Mjk2KSksdGhpcy5wb3MrNCksdGhpcy5wb3MrPTh9LHdyaXRlVmFyaW50OmZ1bmN0aW9uKHQpeyh0PSt0fHwwKT4yNjg0MzU0NTV8fHQ8MD9mdW5jdGlvbih0LGUpe3ZhciByLG47aWYodD49MD8ocj10JTQyOTQ5NjcyOTZ8MCxuPXQvNDI5NDk2NzI5NnwwKToobj1+KC10LzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTVeKHI9figtdCU0Mjk0OTY3Mjk2KSk/cj1yKzF8MDoocj0wLG49bisxfDApKSx0Pj0weDEwMDAwMDAwMDAwMDAwMDAwfHx0PC0weDEwMDAwMDAwMDAwMDAwMDAwKXRocm93IG5ldyBFcnJvcigiR2l2ZW4gdmFyaW50IGRvZXNuJ3QgZml0IGludG8gMTAgYnl0ZXMiKTtlLnJlYWxsb2MoMTApLGZ1bmN0aW9uKHQsZSxyKXtyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zXT0xMjcmdH0ociwwLGUpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9KDcmdCk8PDQ7ZS5idWZbZS5wb3MrK118PXJ8KCh0Pj4+PTMpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnQpKSkpKX0obixlKX0odCx0aGlzKToodGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyZ0fCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109MTI3Jih0Pj4+PTcpfCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109MTI3Jih0Pj4+PTcpfCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109dD4+PjcmMTI3KSkpKX0sd3JpdGVTVmFyaW50OmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQodDwwPzIqLXQtMToyKnQpfSx3cml0ZUJvb2xlYW46ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludChCb29sZWFuKHQpKX0sd3JpdGVTdHJpbmc6ZnVuY3Rpb24odCl7dD1TdHJpbmcodCksdGhpcy5yZWFsbG9jKDQqdC5sZW5ndGgpLHRoaXMucG9zKys7dmFyIGU9dGhpcy5wb3M7dGhpcy5wb3M9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9MDthPGUubGVuZ3RoO2ErKyl7aWYoKG49ZS5jaGFyQ29kZUF0KGEpKT41NTI5NSYmbjw1NzM0NCl7aWYoIWkpe24+NTYzMTl8fGErMT09PWUubGVuZ3RoPyh0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSk6aT1uO2NvbnRpbnVlfWlmKG48NTYzMjApe3RbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5LGk9bjtjb250aW51ZX1uPWktNTUyOTY8PDEwfG4tNTYzMjB8NjU1MzYsaT1udWxsfWVsc2UgaSYmKHRbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5LGk9bnVsbCk7bjwxMjg/dFtyKytdPW46KG48MjA0OD90W3IrK109bj4+NnwxOTI6KG48NjU1MzY/dFtyKytdPW4+PjEyfDIyNDoodFtyKytdPW4+PjE4fDI0MCx0W3IrK109bj4+MTImNjN8MTI4KSx0W3IrK109bj4+NiY2M3wxMjgpLHRbcisrXT02MyZufDEyOCl9cmV0dXJuIHJ9KHRoaXMuYnVmLHQsdGhpcy5wb3MpO3ZhciByPXRoaXMucG9zLWU7cj49MTI4JiZsbyhlLHIsdGhpcyksdGhpcy5wb3M9ZS0xLHRoaXMud3JpdGVWYXJpbnQociksdGhpcy5wb3MrPXJ9LHdyaXRlRmxvYXQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLG5vKHRoaXMuYnVmLHQsdGhpcy5wb3MsITAsMjMsNCksdGhpcy5wb3MrPTR9LHdyaXRlRG91YmxlOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxubyh0aGlzLmJ1Zix0LHRoaXMucG9zLCEwLDUyLDgpLHRoaXMucG9zKz04fSx3cml0ZUJ5dGVzOmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3RoaXMud3JpdGVWYXJpbnQoZSksdGhpcy5yZWFsbG9jKGUpO2Zvcih2YXIgcj0wO3I8ZTtyKyspdGhpcy5idWZbdGhpcy5wb3MrK109dFtyXX0sd3JpdGVSYXdNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5wb3MrKzt2YXIgcj10aGlzLnBvczt0KGUsdGhpcyk7dmFyIG49dGhpcy5wb3MtcjtuPj0xMjgmJmxvKHIsbix0aGlzKSx0aGlzLnBvcz1yLTEsdGhpcy53cml0ZVZhcmludChuKSx0aGlzLnBvcys9bn0sd3JpdGVNZXNzYWdlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLndyaXRlVGFnKHQsYW8uQnl0ZXMpLHRoaXMud3JpdGVSYXdNZXNzYWdlKGUscil9LHdyaXRlUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxjbyxlKX0sd3JpdGVQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCx1byxlKX0sd3JpdGVQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxwbyxlKX0sd3JpdGVQYWNrZWRGbG9hdDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsZm8sZSl9LHdyaXRlUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxobyxlKX0sd3JpdGVQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxnbyxlKX0sd3JpdGVQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsdm8sZSl9LHdyaXRlUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsbW8sZSl9LHdyaXRlUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHlvLGUpfSx3cml0ZUJ5dGVzRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uQnl0ZXMpLHRoaXMud3JpdGVCeXRlcyhlKX0sd3JpdGVGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQzMiksdGhpcy53cml0ZUZpeGVkMzIoZSl9LHdyaXRlU0ZpeGVkMzJGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDMyKSx0aGlzLndyaXRlU0ZpeGVkMzIoZSl9LHdyaXRlRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkNjQpLHRoaXMud3JpdGVGaXhlZDY0KGUpfSx3cml0ZVNGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQ2NCksdGhpcy53cml0ZVNGaXhlZDY0KGUpfSx3cml0ZVZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLlZhcmludCksdGhpcy53cml0ZVZhcmludChlKX0sd3JpdGVTVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uVmFyaW50KSx0aGlzLndyaXRlU1ZhcmludChlKX0sd3JpdGVTdHJpbmdGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5CeXRlcyksdGhpcy53cml0ZVN0cmluZyhlKX0sd3JpdGVGbG9hdEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkMzIpLHRoaXMud3JpdGVGbG9hdChlKX0sd3JpdGVEb3VibGVGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDY0KSx0aGlzLndyaXRlRG91YmxlKGUpfSx3cml0ZUJvb2xlYW5GaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnRGaWVsZCh0LEJvb2xlYW4oZSkpfX07dmFyIHdvPTM7ZnVuY3Rpb24ga28odCxlLHIpezE9PT10JiZyLnJlYWRNZXNzYWdlKFRvLGUpfWZ1bmN0aW9uIFRvKHQsZSxyKXtpZigzPT09dCl7dmFyIG49ci5yZWFkTWVzc2FnZShBbyx7fSksaT1uLmlkLGE9bi5iaXRtYXAsbz1uLndpZHRoLHM9bi5oZWlnaHQsbD1uLmxlZnQsYz1uLnRvcCx1PW4uYWR2YW5jZTtlLnB1c2goe2lkOmksYml0bWFwOm5ldyBjaSh7d2lkdGg6bysyKndvLGhlaWdodDpzKzIqd299LGEpLG1ldHJpY3M6e3dpZHRoOm8saGVpZ2h0OnMsbGVmdDpsLHRvcDpjLGFkdmFuY2U6dX19KX19ZnVuY3Rpb24gQW8odCxlLHIpezE9PT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5iaXRtYXA9ci5yZWFkQnl0ZXMoKTozPT09dD9lLndpZHRoPXIucmVhZFZhcmludCgpOjQ9PT10P2UuaGVpZ2h0PXIucmVhZFZhcmludCgpOjU9PT10P2UubGVmdD1yLnJlYWRTVmFyaW50KCk6Nj09PXQ/ZS50b3A9ci5yZWFkU1ZhcmludCgpOjc9PT10JiYoZS5hZHZhbmNlPXIucmVhZFZhcmludCgpKX12YXIgTW89d28sU289ZnVuY3Rpb24odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy5wYXJlbnQ9ZSx0aGlzLm1hcElkPXIsdGhpcy5jYWxsYmFja3M9e30sdGhpcy5jYWxsYmFja0lEPTAsZyhbInJlY2VpdmUiXSx0aGlzKSx0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLnJlY2VpdmUsITEpfTtTby5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yP3RoaXMubWFwSWQrIjoiK3RoaXMuY2FsbGJhY2tJRCsrOm51bGw7ciYmKHRoaXMuY2FsbGJhY2tzW2ldPXIpO3ZhciBhPVtdO3RoaXMudGFyZ2V0LnBvc3RNZXNzYWdlKHt0YXJnZXRNYXBJZDpuLHNvdXJjZU1hcElkOnRoaXMubWFwSWQsdHlwZTp0LGlkOlN0cmluZyhpKSxkYXRhOmdyKGUsYSl9LGEpfSxTby5wcm90b3R5cGUucmVjZWl2ZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMsbj10LmRhdGEsaT1uLmlkO2lmKCFuLnRhcmdldE1hcElkfHx0aGlzLm1hcElkPT09bi50YXJnZXRNYXBJZCl7dmFyIGE9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXTtyLnRhcmdldC5wb3N0TWVzc2FnZSh7c291cmNlTWFwSWQ6ci5tYXBJZCx0eXBlOiI8cmVzcG9uc2U+IixpZDpTdHJpbmcoaSksZXJyb3I6dD9ncih0KTpudWxsLGRhdGE6Z3IoZSxuKX0sbil9O2lmKCI8cmVzcG9uc2U+Ij09PW4udHlwZSllPXRoaXMuY2FsbGJhY2tzW24uaWRdLGRlbGV0ZSB0aGlzLmNhbGxiYWNrc1tuLmlkXSxlJiZuLmVycm9yP2UodnIobi5lcnJvcikpOmUmJmUobnVsbCx2cihuLmRhdGEpKTtlbHNlIGlmKHZvaWQgMCE9PW4uaWQmJnRoaXMucGFyZW50W24udHlwZV0pdGhpcy5wYXJlbnRbbi50eXBlXShuLnNvdXJjZU1hcElkLHZyKG4uZGF0YSksYSk7ZWxzZSBpZih2b2lkIDAhPT1uLmlkJiZ0aGlzLnBhcmVudC5nZXRXb3JrZXJTb3VyY2Upe3ZhciBvPW4udHlwZS5zcGxpdCgiLiIpO3RoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZShuLnNvdXJjZU1hcElkLG9bMF0sb1sxXSlbb1syXV0odnIobi5kYXRhKSxhKX1lbHNlIHRoaXMucGFyZW50W24udHlwZV0odnIobi5kYXRhKSl9fSxTby5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5yZWNlaXZlLCExKX07dmFyIEVvPW4oaShmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxuKXt2YXIgaT1yKDI1Nip0LDI1NiooZT1NYXRoLnBvdygyLG4pLWUtMSksbiksYT1yKDI1NioodCsxKSwyNTYqKGUrMSksbik7cmV0dXJuIGlbMF0rIiwiK2lbMV0rIiwiK2FbMF0rIiwiK2FbMV19ZnVuY3Rpb24gcih0LGUscil7dmFyIG49MipNYXRoLlBJKjYzNzgxMzcvMjU2L01hdGgucG93KDIscik7cmV0dXJuW3Qqbi0yKk1hdGguUEkqNjM3ODEzNy8yLGUqbi0yKk1hdGguUEkqNjM3ODEzNy8yXX10LmdldFVSTD1mdW5jdGlvbih0LHIsbixpLGEsbyl7cmV0dXJuIG89b3x8e30sdCsiPyIrWyJiYm94PSIrZShuLGksYSksImZvcm1hdD0iKyhvLmZvcm1hdHx8ImltYWdlL3BuZyIpLCJzZXJ2aWNlPSIrKG8uc2VydmljZXx8IldNUyIpLCJ2ZXJzaW9uPSIrKG8udmVyc2lvbnx8IjEuMS4xIiksInJlcXVlc3Q9Iisoby5yZXF1ZXN0fHwiR2V0TWFwIiksInNycz0iKyhvLnNyc3x8IkVQU0c6Mzg1NyIpLCJ3aWR0aD0iKyhvLndpZHRofHwyNTYpLCJoZWlnaHQ9Iisoby5oZWlnaHR8fDI1NiksImxheWVycz0iK3JdLmpvaW4oIiYiKX0sdC5nZXRUaWxlQkJveD1lLHQuZ2V0TWVyY0Nvb3Jkcz1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oZSl9KSksQ289ZnVuY3Rpb24odCxlLHIpe3RoaXMuej10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMua2V5PU9vKDAsdCxlLHIpfTtDby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLno9PT10LnomJnRoaXMueD09PXQueCYmdGhpcy55PT09dC55fSxDby5wcm90b3R5cGUudXJsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9RW8uZ2V0VGlsZUJCb3godGhpcy54LHRoaXMueSx0aGlzLnopLG49ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPSIiLGE9dDthPjA7YS0tKWkrPShlJihuPTE8PGEtMSk/MTowKSsociZuPzI6MCk7cmV0dXJuIGl9KHRoaXMueix0aGlzLngsdGhpcy55KTtyZXR1cm4gdFsodGhpcy54K3RoaXMueSkldC5sZW5ndGhdLnJlcGxhY2UoIntwcmVmaXh9IiwodGhpcy54JTE2KS50b1N0cmluZygxNikrKHRoaXMueSUxNikudG9TdHJpbmcoMTYpKS5yZXBsYWNlKCJ7en0iLFN0cmluZyh0aGlzLnopKS5yZXBsYWNlKCJ7eH0iLFN0cmluZyh0aGlzLngpKS5yZXBsYWNlKCJ7eX0iLFN0cmluZygidG1zIj09PWU/TWF0aC5wb3coMix0aGlzLnopLXRoaXMueS0xOnRoaXMueSkpLnJlcGxhY2UoIntxdWFka2V5fSIsbikucmVwbGFjZSgie2Jib3gtZXBzZy0zODU3fSIscil9O3ZhciBMbz1mdW5jdGlvbih0LGUpe3RoaXMud3JhcD10LHRoaXMuY2Fub25pY2FsPWUsdGhpcy5rZXk9T28odCxlLnosZS54LGUueSl9LHpvPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5vdmVyc2NhbGVkWj10LHRoaXMud3JhcD1lLHRoaXMuY2Fub25pY2FsPW5ldyBDbyhyLCtuLCtpKSx0aGlzLmtleT1PbyhlLHQsbixpKX07ZnVuY3Rpb24gT28odCxlLHIsbil7KHQqPTIpPDAmJih0PS0xKnQtMSk7dmFyIGk9MTw8ZTtyZXR1cm4gMzIqKGkqaSp0K2kqbityKStlfXpvLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3ZlcnNjYWxlZFo9PT10Lm92ZXJzY2FsZWRaJiZ0aGlzLndyYXA9PT10LndyYXAmJnRoaXMuY2Fub25pY2FsLmVxdWFscyh0LmNhbm9uaWNhbCl9LHpvLnByb3RvdHlwZS5zY2FsZWRUbz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNhbm9uaWNhbC56LXQ7cmV0dXJuIHQ+dGhpcy5jYW5vbmljYWwuej9uZXcgem8odCx0aGlzLndyYXAsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpOm5ldyB6byh0LHRoaXMud3JhcCx0LHRoaXMuY2Fub25pY2FsLng+PmUsdGhpcy5jYW5vbmljYWwueT4+ZSl9LHpvLnByb3RvdHlwZS5pc0NoaWxkT2Y9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10LmNhbm9uaWNhbC56O3JldHVybiAwPT09dC5vdmVyc2NhbGVkWnx8dC5vdmVyc2NhbGVkWjx0aGlzLm92ZXJzY2FsZWRaJiZ0LmNhbm9uaWNhbC54PT09dGhpcy5jYW5vbmljYWwueD4+ZSYmdC5jYW5vbmljYWwueT09PXRoaXMuY2Fub25pY2FsLnk+PmV9LHpvLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZih0aGlzLm92ZXJzY2FsZWRaPj10KXJldHVybltuZXcgem8odGhpcy5vdmVyc2NhbGVkWisxLHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSldO3ZhciBlPXRoaXMuY2Fub25pY2FsLnorMSxyPTIqdGhpcy5jYW5vbmljYWwueCxuPTIqdGhpcy5jYW5vbmljYWwueTtyZXR1cm5bbmV3IHpvKGUsdGhpcy53cmFwLGUscixuKSxuZXcgem8oZSx0aGlzLndyYXAsZSxyKzEsbiksbmV3IHpvKGUsdGhpcy53cmFwLGUscixuKzEpLG5ldyB6byhlLHRoaXMud3JhcCxlLHIrMSxuKzEpXX0sem8ucHJvdG90eXBlLmlzTGVzc1RoYW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud3JhcDx0LndyYXB8fCEodGhpcy53cmFwPnQud3JhcCkmJih0aGlzLm92ZXJzY2FsZWRaPHQub3ZlcnNjYWxlZFp8fCEodGhpcy5vdmVyc2NhbGVkWj50Lm92ZXJzY2FsZWRaKSYmKHRoaXMuY2Fub25pY2FsLng8dC5jYW5vbmljYWwueHx8ISh0aGlzLmNhbm9uaWNhbC54PnQuY2Fub25pY2FsLngpJiZ0aGlzLmNhbm9uaWNhbC55PHQuY2Fub25pY2FsLnkpKX0sem8ucHJvdG90eXBlLndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHpvKHRoaXMub3ZlcnNjYWxlZFosMCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LHpvLnByb3RvdHlwZS51bndyYXBUbz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHpvKHRoaXMub3ZlcnNjYWxlZFosdCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LHpvLnByb3RvdHlwZS5vdmVyc2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5wb3coMix0aGlzLm92ZXJzY2FsZWRaLXRoaXMuY2Fub25pY2FsLnopfSx6by5wcm90b3R5cGUudG9VbndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExvKHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbCl9LHpvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaKyIvIit0aGlzLmNhbm9uaWNhbC54KyIvIit0aGlzLmNhbm9uaWNhbC55fSx6by5wcm90b3R5cGUudG9Db29yZGluYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKHRoaXMuY2Fub25pY2FsLngrTWF0aC5wb3coMix0aGlzLndyYXApLHRoaXMuY2Fub25pY2FsLnksdGhpcy5jYW5vbmljYWwueil9LHByKCJDYW5vbmljYWxUaWxlSUQiLENvKSxwcigiT3ZlcnNjYWxlZFRpbGVJRCIsem8se29taXQ6WyJwb3NNYXRyaXgiXX0pO3ZhciBJbz1mdW5jdGlvbih0LGUscil7aWYodDw9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTGV2ZWwgbXVzdCBoYXZlIHBvc2l0aXZlIGRpbWVuc2lvbiIpO3RoaXMuZGltPXQsdGhpcy5ib3JkZXI9ZSx0aGlzLnN0cmlkZT10aGlzLmRpbSsyKnRoaXMuYm9yZGVyLHRoaXMuZGF0YT1yfHxuZXcgSW50MzJBcnJheSgodGhpcy5kaW0rMip0aGlzLmJvcmRlcikqKHRoaXMuZGltKzIqdGhpcy5ib3JkZXIpKX07SW8ucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUscil7dGhpcy5kYXRhW3RoaXMuX2lkeCh0LGUpXT1yKzY1NTM2fSxJby5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGF0YVt0aGlzLl9pZHgodCxlKV0tNjU1MzZ9LElvLnByb3RvdHlwZS5faWR4PWZ1bmN0aW9uKHQsZSl7aWYodDwtdGhpcy5ib3JkZXJ8fHQ+PXRoaXMuZGltK3RoaXMuYm9yZGVyfHxlPC10aGlzLmJvcmRlcnx8ZT49dGhpcy5kaW0rdGhpcy5ib3JkZXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIERFTSBkYXRhIik7cmV0dXJuKGUrdGhpcy5ib3JkZXIpKnRoaXMuc3RyaWRlKyh0K3RoaXMuYm9yZGVyKX0scHIoIkxldmVsIixJbyk7dmFyIERvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnVpZD10LHRoaXMuc2NhbGU9ZXx8MSx0aGlzLmxldmVsPXJ8fG5ldyBJbygyNTYsNTEyKSx0aGlzLmxvYWRlZD0hIXJ9O0RvLnByb3RvdHlwZS5sb2FkRnJvbUltYWdlPWZ1bmN0aW9uKHQsZSl7aWYodC5oZWlnaHQhPT10LndpZHRoKXRocm93IG5ldyBSYW5nZUVycm9yKCJERU0gdGlsZXMgbXVzdCBiZSBzcXVhcmUiKTtpZihlJiYibWFwYm94IiE9PWUmJiJ0ZXJyYXJpdW0iIT09ZSlyZXR1cm4gXygnIicrZSsnIiBpcyBub3QgYSB2YWxpZCBlbmNvZGluZyB0eXBlLiBWYWxpZCB0eXBlcyBpbmNsdWRlICJtYXBib3giIGFuZCAidGVycmFyaXVtIi4nKTt2YXIgcj10aGlzLmxldmVsPW5ldyBJbyh0LndpZHRoLHQud2lkdGgvMiksbj10LmRhdGE7dGhpcy5fdW5wYWNrRGF0YShyLG4sZXx8Im1hcGJveCIpO2Zvcih2YXIgaT0wO2k8ci5kaW07aSsrKXIuc2V0KC0xLGksci5nZXQoMCxpKSksci5zZXQoci5kaW0saSxyLmdldChyLmRpbS0xLGkpKSxyLnNldChpLC0xLHIuZ2V0KGksMCkpLHIuc2V0KGksci5kaW0sci5nZXQoaSxyLmRpbS0xKSk7ci5zZXQoLTEsLTEsci5nZXQoMCwwKSksci5zZXQoci5kaW0sLTEsci5nZXQoci5kaW0tMSwwKSksci5zZXQoLTEsci5kaW0sci5nZXQoMCxyLmRpbS0xKSksci5zZXQoci5kaW0sci5kaW0sci5nZXQoci5kaW0tMSxyLmRpbS0xKSksdGhpcy5sb2FkZWQ9ITB9LERvLnByb3RvdHlwZS5fdW5wYWNrTWFwYm94PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4oMjU2KnQqMjU2KzI1NiplK3IpLzEwLTFlNH0sRG8ucHJvdG90eXBlLl91bnBhY2tUZXJyYXJpdW09ZnVuY3Rpb24odCxlLHIpe3JldHVybiAyNTYqdCtlK3IvMjU2LTMyNzY4fSxEby5wcm90b3R5cGUuX3VucGFja0RhdGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj17bWFwYm94OnRoaXMuX3VucGFja01hcGJveCx0ZXJyYXJpdW06dGhpcy5fdW5wYWNrVGVycmFyaXVtfVtyXSxpPTA7aTx0LmRpbTtpKyspZm9yKHZhciBhPTA7YTx0LmRpbTthKyspe3ZhciBvPTQqKGkqdC5kaW0rYSk7dC5zZXQoYSxpLHRoaXMuc2NhbGUqbihlW29dLGVbbysxXSxlW28rMl0pKX19LERvLnByb3RvdHlwZS5nZXRQaXhlbHM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVpKHt3aWR0aDp0aGlzLmxldmVsLmRpbSsyKnRoaXMubGV2ZWwuYm9yZGVyLGhlaWdodDp0aGlzLmxldmVsLmRpbSsyKnRoaXMubGV2ZWwuYm9yZGVyfSxuZXcgVWludDhBcnJheSh0aGlzLmxldmVsLmRhdGEuYnVmZmVyKSl9LERvLnByb3RvdHlwZS5iYWNrZmlsbEJvcmRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZXZlbCxpPXQubGV2ZWw7aWYobi5kaW0hPT1pLmRpbSl0aHJvdyBuZXcgRXJyb3IoImxldmVsIG1pc21hdGNoIChkZW0gZGltZW5zaW9uKSIpO3ZhciBhPWUqbi5kaW0sbz1lKm4uZGltK24uZGltLHM9cipuLmRpbSxsPXIqbi5kaW0rbi5kaW07c3dpdGNoKGUpe2Nhc2UtMTphPW8tMTticmVhaztjYXNlIDE6bz1hKzF9c3dpdGNoKHIpe2Nhc2UtMTpzPWwtMTticmVhaztjYXNlIDE6bD1zKzF9Zm9yKHZhciBjPWgoYSwtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLHU9aChvLC1uLmJvcmRlcixuLmRpbStuLmJvcmRlciksZj1oKHMsLW4uYm9yZGVyLG4uZGltK24uYm9yZGVyKSxwPWgobCwtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLGQ9LWUqbi5kaW0sZz0tcipuLmRpbSx2PWY7djxwO3YrKylmb3IodmFyIG09YzttPHU7bSsrKW4uc2V0KG0sdixpLmdldChtK2QsditnKSl9LHByKCJERU1EYXRhIixEbyk7dmFyIFBvPWZ1bmN0aW9uKHQpe3RoaXMuX3N0cmluZ1RvTnVtYmVyPXt9LHRoaXMuX251bWJlclRvU3RyaW5nPVtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RoaXMuX3N0cmluZ1RvTnVtYmVyW3JdPWUsdGhpcy5fbnVtYmVyVG9TdHJpbmdbZV09cn19O1BvLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3RdfSxQby5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1t0XX07dmFyIFJvPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT0iRmVhdHVyZSIsdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU9dCx0Ll96PWUsdC5feD1yLHQuX3k9bix0aGlzLnByb3BlcnRpZXM9dC5wcm9wZXJ0aWVzLG51bGwhPXQuaWQmJih0aGlzLmlkPXQuaWQpfSxGbz17Z2VvbWV0cnk6e2NvbmZpZ3VyYWJsZTohMH19O0ZvLmdlb21ldHJ5LmdldD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLl9nZW9tZXRyeSYmKHRoaXMuX2dlb21ldHJ5PXRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTih0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feCx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feSx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feikuZ2VvbWV0cnkpLHRoaXMuX2dlb21ldHJ5fSxGby5nZW9tZXRyeS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fZ2VvbWV0cnk9dH0sUm8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciB0PXtnZW9tZXRyeTp0aGlzLmdlb21ldHJ5fTtmb3IodmFyIGUgaW4gdGhpcykiX2dlb21ldHJ5IiE9PWUmJiJfdmVjdG9yVGlsZUZlYXR1cmUiIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJvLnByb3RvdHlwZSxGbyk7dmFyIEJvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMueD10LmNhbm9uaWNhbC54LHRoaXMueT10LmNhbm9uaWNhbC55LHRoaXMuej10LmNhbm9uaWNhbC56LHRoaXMuZ3JpZD1lfHxuZXcgbHIoUG4sMTYsMCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1yfHxuZXcgVG59O2Z1bmN0aW9uIE5vKHQsZSl7cmV0dXJuIGUtdH1Cby5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5sZW5ndGg7dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5lbXBsYWNlQmFjayhyLG4saSk7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspe2Zvcih2YXIgcz1lW29dLGw9WzEvMCwxLzAsLTEvMCwtMS8wXSxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciB1PXNbY107bFswXT1NYXRoLm1pbihsWzBdLHUueCksbFsxXT1NYXRoLm1pbihsWzFdLHUueSksbFsyXT1NYXRoLm1heChsWzJdLHUueCksbFszXT1NYXRoLm1heChsWzNdLHUueSl9bFswXTxQbiYmbFsxXTxQbiYmbFsyXT49MCYmbFszXT49MCYmdGhpcy5ncmlkLmluc2VydChhLGxbMF0sbFsxXSxsWzJdLGxbM10pfX0sQm8ucHJvdG90eXBlLmxvYWRWVExheWVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZ0TGF5ZXJzfHwodGhpcy52dExheWVycz1uZXcgZ2EuVmVjdG9yVGlsZShuZXcgaW8odGhpcy5yYXdUaWxlRGF0YSkpLmxheWVycyx0aGlzLnNvdXJjZUxheWVyQ29kZXI9bmV3IFBvKHRoaXMudnRMYXllcnM/T2JqZWN0LmtleXModGhpcy52dExheWVycykuc29ydCgpOlsiX2dlb2pzb25UaWxlTGF5ZXIiXSkpLHRoaXMudnRMYXllcnN9LEJvLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dGhpcy5sb2FkVlRMYXllcnMoKTtmb3IodmFyIG49dC5wYXJhbXN8fHt9LGk9UG4vdC50aWxlU2l6ZS90LnNjYWxlLGE9UmUobi5maWx0ZXIpLG89dC5xdWVyeUdlb21ldHJ5LHM9dC5xdWVyeVBhZGRpbmcqaSxsPTEvMCxjPTEvMCx1PS0xLzAsZj0tMS8wLGg9MDtoPG8ubGVuZ3RoO2grKylmb3IodmFyIHA9b1toXSxkPTA7ZDxwLmxlbmd0aDtkKyspe3ZhciBnPXBbZF07bD1NYXRoLm1pbihsLGcueCksYz1NYXRoLm1pbihjLGcueSksdT1NYXRoLm1heCh1LGcueCksZj1NYXRoLm1heChmLGcueSl9dmFyIHY9dGhpcy5ncmlkLnF1ZXJ5KGwtcyxjLXMsdStzLGYrcyk7di5zb3J0KE5vKTtmb3IodmFyIG0seT17fSx4PWZ1bmN0aW9uKHMpe3ZhciBsPXZbc107aWYobCE9PW0pe209bDt2YXIgYz1yLmZlYXR1cmVJbmRleEFycmF5LmdldChsKSx1PW51bGw7ci5sb2FkTWF0Y2hpbmdGZWF0dXJlKHksYy5idWNrZXRJbmRleCxjLnNvdXJjZUxheWVySW5kZXgsYy5mZWF0dXJlSW5kZXgsYSxuLmxheWVycyxlLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHV8fCh1PUZuKGUpKSxuLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUobyxlLHUsci56LHQudHJhbnNmb3JtLGksdC5wb3NNYXRyaXgpfSl9fSxiPTA7Yjx2Lmxlbmd0aDtiKyspeChiKTtyZXR1cm4geX0sQm8ucHJvdG90eXBlLmxvYWRNYXRjaGluZ0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD10aGlzLmJ1Y2tldExheWVySURzW2VdO2lmKCFhfHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGUuaW5kZXhPZih0W3JdKT49MClyZXR1cm4hMDtyZXR1cm4hMX0oYSxsKSl7dmFyIGM9dGhpcy5zb3VyY2VMYXllckNvZGVyLmRlY29kZShyKSx1PXRoaXMudnRMYXllcnNbY10uZmVhdHVyZShuKTtpZihpKG5ldyBMcih0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWiksdSkpZm9yKHZhciBmPTA7ZjxsLmxlbmd0aDtmKyspe3ZhciBoPWxbZl07aWYoIShhJiZhLmluZGV4T2YoaCk8MCkpe3ZhciBwPW9baF07aWYocCYmKCFzfHxzKHUscCkpKXt2YXIgZD1uZXcgUm8odSx0aGlzLnosdGhpcy54LHRoaXMueSk7ZC5sYXllcj1wLnNlcmlhbGl6ZSgpO3ZhciBnPXRbaF07dm9pZCAwPT09ZyYmKGc9dFtoXT1bXSksZy5wdXNoKHtmZWF0dXJlSW5kZXg6bixmZWF0dXJlOmR9KX19fX19LEJvLnByb3RvdHlwZS5sb29rdXBTeW1ib2xGZWF0dXJlcz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89e307dGhpcy5sb2FkVlRMYXllcnMoKTtmb3IodmFyIHM9UmUobiksbD0wLGM9dDtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF07dGhpcy5sb2FkTWF0Y2hpbmdGZWF0dXJlKG8sZSxyLHUscyxpLGEpfXJldHVybiBvfSxCby5wcm90b3R5cGUuaGFzTGF5ZXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJ1Y2tldExheWVySURzO2U8ci5sZW5ndGg7ZSs9MSlmb3IodmFyIG49MCxpPXJbZV07bjxpLmxlbmd0aDtuKz0xKWlmKHQ9PT1pW25dKXJldHVybiEwO3JldHVybiExfSxwcigiRmVhdHVyZUluZGV4IixCbyx7b21pdDpbInJhd1RpbGVEYXRhIiwic291cmNlTGF5ZXJDb2RlciJdfSk7dmFyIGpvPXtob3Jpem9udGFsOjEsdmVydGljYWw6Mixob3Jpem9udGFsT25seTozfSxWbz17OTohMCwxMDohMCwxMTohMCwxMjohMCwxMzohMCwzMjohMH0sVW89e307ZnVuY3Rpb24gcW8odCxlLHIsbil7dmFyIGk9TWF0aC5wb3codC1lLDIpO3JldHVybiBuP3Q8ZT9pLzI6MippOmkrTWF0aC5hYnMocikqcn1mdW5jdGlvbiBIbyh0LGUpe3ZhciByPTA7cmV0dXJuIDEwPT09dCYmKHItPTFlNCksNDAhPT10JiY2NTI4OCE9PXR8fChyKz01MCksNDEhPT1lJiY2NTI4OSE9PWV8fChyKz01MCkscn1mdW5jdGlvbiBHbyh0LGUscixuLGksYSl7Zm9yKHZhciBvPW51bGwscz1xbyhlLHIsaSxhKSxsPTAsYz1uO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPXFvKGUtdS54LHIsaSxhKSt1LmJhZG5lc3M7Zjw9cyYmKG89dSxzPWYpfXJldHVybntpbmRleDp0LHg6ZSxwcmlvckJyZWFrOm8sYmFkbmVzczpzfX1mdW5jdGlvbiBZbyh0LGUscixuKXtpZighcilyZXR1cm5bXTtpZighdClyZXR1cm5bXTtmb3IodmFyIGksYT1bXSxvPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89blt0LmNoYXJDb2RlQXQoYSldO28mJihpKz1vLm1ldHJpY3MuYWR2YW5jZStlKX1yZXR1cm4gaS9NYXRoLm1heCgxLE1hdGguY2VpbChpL3IpKX0odCxlLHIsbikscz0wLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dC5jaGFyQ29kZUF0KGwpLHU9bltjXTt1JiYhVm9bY10mJihzKz11Lm1ldHJpY3MuYWR2YW5jZStlKSxsPHQubGVuZ3RoLTEmJihVb1tjXXx8ISgoaT1jKTwxMTkwNCkmJih5clsiQm9wb21vZm8gRXh0ZW5kZWQiXShpKXx8eXIuQm9wb21vZm8oaSl8fHlyWyJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyJdKGkpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyJdKGkpfHx5clsiQ0pLIENvbXBhdGliaWxpdHkiXShpKXx8eXJbIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50Il0oaSl8fHlyWyJDSksgU3Ryb2tlcyJdKGkpfHx5clsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0oaSl8fHlyWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBIl0oaSl8fHlyWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0oaSl8fHlyWyJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIl0oaSl8fHlyWyJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyJdKGkpfHx5ci5IaXJhZ2FuYShpKXx8eXJbIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiXShpKXx8eXJbIkthbmd4aSBSYWRpY2FscyJdKGkpfHx5clsiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyJdKGkpfHx5ci5LYXRha2FuYShpKXx8eXJbIlZlcnRpY2FsIEZvcm1zIl0oaSl8fHlyWyJZaSBSYWRpY2FscyJdKGkpfHx5clsiWWkgU3lsbGFibGVzIl0oaSkpKSYmYS5wdXNoKEdvKGwrMSxzLG8sYSxIbyhjLHQuY2hhckNvZGVBdChsKzEpKSwhMSkpfXJldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlP3QoZS5wcmlvckJyZWFrKS5jb25jYXQoZS5pbmRleCk6W119KEdvKHQubGVuZ3RoLHMsbyxhLDAsITApKX1mdW5jdGlvbiBXbyh0KXt2YXIgZT0uNSxyPS41O3N3aXRjaCh0KXtjYXNlInJpZ2h0IjpjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOmU9MTticmVhaztjYXNlImxlZnQiOmNhc2UidG9wLWxlZnQiOmNhc2UiYm90dG9tLWxlZnQiOmU9MH1zd2l0Y2godCl7Y2FzZSJib3R0b20iOmNhc2UiYm90dG9tLXJpZ2h0IjpjYXNlImJvdHRvbS1sZWZ0IjpyPTE7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UidG9wLXJpZ2h0IjpjYXNlInRvcC1sZWZ0IjpyPTB9cmV0dXJue2hvcml6b250YWxBbGlnbjplLHZlcnRpY2FsQWxpZ246cn19ZnVuY3Rpb24gWG8odCxlLHIsbixpKXtpZihpKXt2YXIgYT1lW3Rbbl0uZ2x5cGhdO2lmKGEpZm9yKHZhciBvPWEubWV0cmljcy5hZHZhbmNlLHM9KHRbbl0ueCtvKSppLGw9cjtsPD1uO2wrKyl0W2xdLngtPXN9fVVvWzEwXT0hMCxVb1szMl09ITAsVW9bMzhdPSEwLFVvWzQwXT0hMCxVb1s0MV09ITAsVW9bNDNdPSEwLFVvWzQ1XT0hMCxVb1s0N109ITAsVW9bMTczXT0hMCxVb1sxODNdPSEwLFVvWzgyMDNdPSEwLFVvWzgyMDhdPSEwLFVvWzgyMTFdPSEwLFVvWzgyMzFdPSEwLGUuY29tbW9uanNHbG9iYWw9cixlLnVud3JhcEV4cG9ydHM9bixlLmNyZWF0ZUNvbW1vbmpzTW9kdWxlPWksZS5kZWZhdWx0PXNlbGYsZS5kZWZhdWx0JDE9bCxlLmdldEpTT049ZnVuY3Rpb24odCxlKXt2YXIgcj1NKHQpO3JldHVybiByLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24iKSxyLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5vbmxvYWQ9ZnVuY3Rpb24oKXtpZihyLnN0YXR1cz49MjAwJiZyLnN0YXR1czwzMDAmJnIucmVzcG9uc2Upe3ZhciBuO3RyeXtuPUpTT04ucGFyc2Uoci5yZXNwb25zZSl9Y2F0Y2godCl7cmV0dXJuIGUodCl9ZShudWxsLG4pfWVsc2UgNDAxPT09ci5zdGF0dXMmJnQudXJsLm1hdGNoKC9tYXBib3guY29tLyk/ZShuZXcgQShyLnN0YXR1c1RleHQrIjogeW91IG1heSBoYXZlIHByb3ZpZGVkIGFuIGludmFsaWQgTWFwYm94IGFjY2VzcyB0b2tlbi4gU2VlIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vI2FjY2Vzcy10b2tlbnMiLHIuc3RhdHVzLHQudXJsKSk6ZShuZXcgQShyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKCkscn0sZS5nZXRJbWFnZT1mdW5jdGlvbih0LGUpe3JldHVybiBTKHQsZnVuY3Rpb24odCxyKXtpZih0KWUodCk7ZWxzZSBpZihyKXt2YXIgbj1uZXcgc2VsZi5JbWFnZSxpPXNlbGYuVVJMfHxzZWxmLndlYmtpdFVSTDtuLm9ubG9hZD1mdW5jdGlvbigpe2UobnVsbCxuKSxpLnJldm9rZU9iamVjdFVSTChuLnNyYyl9O3ZhciBhPW5ldyBzZWxmLkJsb2IoW25ldyBVaW50OEFycmF5KHIuZGF0YSldLHt0eXBlOiJpbWFnZS9wbmcifSk7bi5jYWNoZUNvbnRyb2w9ci5jYWNoZUNvbnRyb2wsbi5leHBpcmVzPXIuZXhwaXJlcyxuLnNyYz1yLmRhdGEuYnl0ZUxlbmd0aD9pLmNyZWF0ZU9iamVjdFVSTChhKToiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQUMwbEVRVlFZVjJOZ0FBSUFBQVVBQWFyVnlGRUFBQUFBU1VWT1JLNUNZSUk9In19KX0sZS5SZXNvdXJjZVR5cGU9VCxlLlJHQkFJbWFnZT11aSxlLmRlZmF1bHQkMj1LYSxlLkltYWdlUG9zaXRpb249UWEsZS5nZXRBcnJheUJ1ZmZlcj1TLGUuZGVmYXVsdCQzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaW8odCkucmVhZEZpZWxkcyhrbyxbXSl9LGUuZGVmYXVsdCQ0PXlyLGUuYXN5bmNBbGw9ZnVuY3Rpb24odCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm4gcihudWxsLFtdKTt2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheSh0Lmxlbmd0aCksYT1udWxsO3QuZm9yRWFjaChmdW5jdGlvbih0LG8pe2UodCxmdW5jdGlvbih0LGUpe3QmJihhPXQpLGlbb109ZSwwPT0tLW4mJnIoYSxpKX0pfSl9LGUuQWxwaGFJbWFnZT1jaSxlLmRlZmF1bHQkNT1JLGUuZW5kc1dpdGg9dixlLmV4dGVuZD1wLGUuc3BoZXJpY2FsVG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiByKz05MCxyKj1NYXRoLlBJLzE4MCxuKj1NYXRoLlBJLzE4MCx7eDplKk1hdGguY29zKHIpKk1hdGguc2luKG4pLHk6ZSpNYXRoLnNpbihyKSpNYXRoLnNpbihuKSx6OmUqTWF0aC5jb3Mobil9fSxlLkV2ZW50ZWQ9TyxlLnZhbGlkYXRlU3R5bGU9bnIsZS52YWxpZGF0ZUxpZ2h0PWlyLGUuZW1pdFZhbGlkYXRpb25FcnJvcnM9c3IsZS5kZWZhdWx0JDY9dHQsZS5udW1iZXI9d3QsZS5Qcm9wZXJ0aWVzPXFyLGUuVHJhbnNpdGlvbmFibGU9SXIsZS5UcmFuc2l0aW9uaW5nPVByLGUuUG9zc2libHlFdmFsdWF0ZWQ9QnIsZS5EYXRhQ29uc3RhbnRQcm9wZXJ0eT1OcixlLndhcm5PbmNlPV8sZS51bmlxdWVJZD1mdW5jdGlvbigpe3JldHVybiBkKyt9LGUuZGVmYXVsdCQ3PVNvLGUucGljaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aSBpbiB0JiYocltpXT10W2ldKX1yZXR1cm4gcn0sZS53cmFwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLWUsaT0oKHQtZSklbituKSVuK2U7cmV0dXJuIGk9PT1lP3I6aX0sZS5jbGFtcD1oLGUuRXZlbnQ9TCxlLkVycm9yRXZlbnQ9eixlLk92ZXJzY2FsZWRUaWxlSUQ9em8sZS5kZWZhdWx0JDg9UG4sZS5jcmVhdGVMYXlvdXQ9WHIsZS5nZXRDb29yZGluYXRlc0NlbnRlcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxpPS0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKWU9TWF0aC5taW4oZSx0W2FdLmNvbHVtbikscj1NYXRoLm1pbihyLHRbYV0ucm93KSxuPU1hdGgubWF4KG4sdFthXS5jb2x1bW4pLGk9TWF0aC5tYXgoaSx0W2FdLnJvdyk7dmFyIG89bi1lLGw9aS1yLGM9TWF0aC5tYXgobyxsKSx1PU1hdGgubWF4KDAsTWF0aC5mbG9vcigtTWF0aC5sb2coYykvTWF0aC5MTjIpKTtyZXR1cm4gbmV3IHMoKGUrbikvMiwocitpKS8yLDApLnpvb21Ubyh1KX0sZS5DYW5vbmljYWxUaWxlSUQ9Q28sZS5SYXN0ZXJCb3VuZHNBcnJheT1KcixlLmdldFZpZGVvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKTtpLm9ubG9hZHN0YXJ0PWZ1bmN0aW9uKCl7ZShudWxsLGkpfTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzb3VyY2UiKTtyPXRbYV0sbj12b2lkIDAsKG49c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLmhyZWY9ciwobi5wcm90b2NvbCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x8fG4uaG9zdCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24uaG9zdCkmJihpLmNyb3NzT3JpZ2luPSJBbm9ueW1vdXMiKSxvLnNyYz10W2FdLGkuYXBwZW5kQ2hpbGQobyl9cmV0dXJuIGl9LGUuZGVmYXVsdCQ5PUQsZS5iaW5kQWxsPWcsZS5kZWZhdWx0JDEwPWZ1bmN0aW9uIHQoZSxyKXtpZihBcnJheS5pc0FycmF5KGUpKXtpZighQXJyYXkuaXNBcnJheShyKXx8ZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZighdChlW25dLHJbbl0pKXJldHVybiExO3JldHVybiEwfWlmKCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJm51bGwhPT1yKXtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuITE7aWYoT2JqZWN0LmtleXMoZSkubGVuZ3RoIT09T2JqZWN0LmtleXMocikubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaSBpbiBlKWlmKCF0KGVbaV0scltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIGU9PT1yfSxlLnBhcnNlQ2FjaGVDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2lmKHQucmVwbGFjZSgvKD86XnwoPzpccypcLFxzKikpKFteXHgwMC1ceDIwXChcKTw+QFwsO1w6XFwiXC9cW1xdXD9cPVx7XH1ceDdGXSspKD86XD0oPzooW15ceDAwLVx4MjBcKFwpPD5AXCw7XDpcXCJcL1xbXF1cP1w9XHtcfVx4N0ZdKyl8KD86XCIoKD86W14iXFxdfFxcLikqKVwiKSkpPy9nLGZ1bmN0aW9uKHQscixuLGkpe3ZhciBhPW58fGk7cmV0dXJuIGVbcl09IWF8fGEudG9Mb3dlckNhc2UoKSwiIn0pLGVbIm1heC1hZ2UiXSl7dmFyIHI9cGFyc2VJbnQoZVsibWF4LWFnZSJdLDEwKTtpc05hTihyKT9kZWxldGUgZVsibWF4LWFnZSJdOmVbIm1heC1hZ2UiXT1yfXJldHVybiBlfSxlLmRlZmF1bHQkMTE9Qm8sZS5kZWZhdWx0JDEyPVJvLGUuZGVmYXVsdCQxMz1SZSxlLmRlZmF1bHQkMTQ9SGEsZS5Db2xsaXNpb25Cb3hBcnJheT12bixlLmRlZmF1bHQkMTU9TW4sZS5UcmlhbmdsZUluZGV4QXJyYXk9Zm4sZS5kZWZhdWx0JDE2PUxyLGUuZGVmYXVsdCQxNz1zLGUua2V5c0RpZmZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdCluIGluIGV8fHIucHVzaChuKTtyZXR1cm4gcn0sZS5kZWZhdWx0JDE4PVsidHlwZSIsInNvdXJjZSIsInNvdXJjZS1sYXllciIsIm1pbnpvb20iLCJtYXh6b29tIiwiZmlsdGVyIiwibGF5b3V0Il0sZS5tYXQ0PXJpLGUudmVjND1laSxlLmdldFNpemVEYXRhPUZhLGUuZXZhbHVhdGVTaXplRm9yRmVhdHVyZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZTtyZXR1cm4ic291cmNlIj09PXQuZnVuY3Rpb25UeXBlP3IubG93ZXJTaXplLzEwOiJjb21wb3NpdGUiPT09dC5mdW5jdGlvblR5cGU/d3Qoci5sb3dlclNpemUvMTAsci51cHBlclNpemUvMTAsbi51U2l6ZVQpOm4udVNpemV9LGUuZXZhbHVhdGVTaXplRm9yWm9vbT1mdW5jdGlvbih0LGUscil7aWYoImNvbnN0YW50Ij09PXQuZnVuY3Rpb25UeXBlKXJldHVybnt1U2l6ZVQ6MCx1U2l6ZTp0LmxheW91dFNpemV9O2lmKCJzb3VyY2UiPT09dC5mdW5jdGlvblR5cGUpcmV0dXJue3VTaXplVDowLHVTaXplOjB9O2lmKCJjYW1lcmEiPT09dC5mdW5jdGlvblR5cGUpe3ZhciBuPXQucHJvcGVydHlWYWx1ZSxpPXQuem9vbVJhbmdlLGE9dC5zaXplUmFuZ2Usbz1oKFNlKG4sci5zcGVjaWZpY2F0aW9uKS5pbnRlcnBvbGF0aW9uRmFjdG9yKGUsaS5taW4saS5tYXgpLDAsMSk7cmV0dXJue3VTaXplVDowLHVTaXplOmEubWluK28qKGEubWF4LWEubWluKX19dmFyIHM9dC5wcm9wZXJ0eVZhbHVlLGw9dC56b29tUmFuZ2U7cmV0dXJue3VTaXplVDpoKFNlKHMsci5zcGVjaWZpY2F0aW9uKS5pbnRlcnBvbGF0aW9uRmFjdG9yKGUsbC5taW4sbC5tYXgpLDAsMSksdVNpemU6MH19LGUuYWRkRHluYW1pY0F0dHJpYnV0ZXM9VmEsZS5kZWZhdWx0JDE5PVlhLGUuV3JpdGluZ01vZGU9am8sZS5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRQb2ludD1qbixlLm11bHRpUG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb249Vm4sZS5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmU9VW4sZS5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihabihlLHRbcl0pKXJldHVybiEwO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKFpuKHQsZVtuXSkpcmV0dXJuITA7cmV0dXJuISFIbih0LGUpfSxlLmRpc3RUb1NlZ21lbnRTcXVhcmVkPVduLGUuZGVmYXVsdCQyMD10aSxlLmRlZmF1bHQkMjE9SHIsZS5kZWZhdWx0JDIyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSmFbdC50eXBlXSh0KX0sZS5jbG9uZT14LGUuZmlsdGVyT2JqZWN0PXksZS5tYXBPYmplY3Q9bSxlLnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5PWZ1bmN0aW9uKHQpe3JldHVybiBNcj90KHtwbHVnaW5VUkw6TXIsY29tcGxldGlvbkNhbGxiYWNrOlRyfSk6RXIub25jZSgicGx1Z2luQXZhaWxhYmxlIix0KSx0fSxlLmV2ZW50ZWQ9RXIsZS5kZWZhdWx0JDIzPW1yLGUuZGVmYXVsdCQyND1PbixlLlBvc0FycmF5PSRyLGUuVW53cmFwcGVkVGlsZUlEPUxvLGUuZWFzZT1mLGUuYmV6aWVyPXUsZS5zZXRSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKHQsZSl7aWYoQXIpdGhyb3cgbmV3IEVycm9yKCJzZXRSVExUZXh0UGx1Z2luIGNhbm5vdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIik7QXI9ITAsTXI9dCxUcj1mdW5jdGlvbih0KXt0PyhBcj0hMSxNcj1udWxsLGUmJmUodCkpOlNyPSEwfSxFci5maXJlKG5ldyBMKCJwbHVnaW5BdmFpbGFibGUiLHtwbHVnaW5VUkw6TXIsY29tcGxldGlvbkNhbGxiYWNrOlRyfSkpfSxlLnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LGUuZGVmYXVsdCQyNT1SYSxlLnJlZ2lzdGVyPXByLGUuR0xZUEhfUEJGX0JPUkRFUj1NbyxlLnNoYXBlVGV4dD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT10LnRyaW0oKTtjPT09am8udmVydGljYWwmJih1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0iIixyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXQuY2hhckNvZGVBdChyKzEpfHxudWxsLGk9dC5jaGFyQ29kZUF0KHItMSl8fG51bGw7biYmd3IobikmJiFQYVt0W3IrMV1dfHxpJiZ3cihpKSYmIVBhW3Rbci0xXV18fCFQYVt0W3JdXT9lKz10W3JdOmUrPVBhW3Rbcl1dfXJldHVybiBlfSh1KSk7dmFyIGY9W10saD17cG9zaXRpb25lZEdseXBoczpmLHRleHQ6dSx0b3A6c1sxXSxib3R0b206c1sxXSxsZWZ0OnNbMF0scmlnaHQ6c1swXSx3cml0aW5nTW9kZTpjfSxwPUNyLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe2Zvcih2YXIgYz0wLHU9LTE3LGY9MCxoPXQucG9zaXRpb25lZEdseXBocyxwPSJyaWdodCI9PT1hPzE6ImxlZnQiPT09YT8wOi41LGQ9MCxnPXI7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdO2lmKCh2PXYudHJpbSgpKS5sZW5ndGgpe2Zvcih2YXIgbT1oLmxlbmd0aCx5PTA7eTx2Lmxlbmd0aDt5Kyspe3ZhciB4PXYuY2hhckNvZGVBdCh5KSxiPWVbeF07YiYmKF9yKHgpJiZvIT09am8uaG9yaXpvbnRhbD8oaC5wdXNoKHtnbHlwaDp4LHg6Yyx5OjAsdmVydGljYWw6ITB9KSxjKz1sK3MpOihoLnB1c2goe2dseXBoOngseDpjLHk6dSx2ZXJ0aWNhbDohMX0pLGMrPWIubWV0cmljcy5hZHZhbmNlK3MpKX1pZihoLmxlbmd0aCE9PW0pe3ZhciBfPWMtcztmPU1hdGgubWF4KF8sZiksWG8oaCxlLG0saC5sZW5ndGgtMSxwKX1jPTAsdSs9bn1lbHNlIHUrPW59dmFyIHc9V28oaSksaz13Lmhvcml6b250YWxBbGlnbixUPXcudmVydGljYWxBbGlnbjshZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPShlLXIpKmksbD0oLW4qbysuNSkqYSxjPTA7Yzx0Lmxlbmd0aDtjKyspdFtjXS54Kz1zLHRbY10ueSs9bH0oaCxwLGssVCxmLG4sci5sZW5ndGgpO3ZhciBBPXIubGVuZ3RoKm47dC50b3ArPS1UKkEsdC5ib3R0b209dC50b3ArQSx0LmxlZnQrPS1rKmYsdC5yaWdodD10LmxlZnQrZn0oaCxlLHA/cCh1LFlvKHUsbyxyLGUpKTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTAsaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07ci5wdXNoKHQuc3Vic3RyaW5nKG4sbykpLG49b31yZXR1cm4gbjx0Lmxlbmd0aCYmci5wdXNoKHQuc3Vic3RyaW5nKG4sdC5sZW5ndGgpKSxyfSh1LFlvKHUsbyxyLGUpKSxuLGksYSxjLG8sbCksISFmLmxlbmd0aCYmaH0sZS5zaGFwZUljb249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVdvKHIpLGk9bi5ob3Jpem9udGFsQWxpZ24sYT1uLnZlcnRpY2FsQWxpZ24sbz1lWzBdLHM9ZVsxXSxsPW8tdC5kaXNwbGF5U2l6ZVswXSppLGM9bCt0LmRpc3BsYXlTaXplWzBdLHU9cy10LmRpc3BsYXlTaXplWzFdKmE7cmV0dXJue2ltYWdlOnQsdG9wOnUsYm90dG9tOnUrdC5kaXNwbGF5U2l6ZVsxXSxsZWZ0OmwscmlnaHQ6Y319LGUuYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZT14cixlLmFsbG93c0xldHRlclNwYWNpbmc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZighYnIocltlXS5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMTtyZXR1cm4hMH0sZS5kZWZhdWx0JDI2PVdpLGUuZGVmYXVsdCQyNz1QbyxlLmRlZmF1bHQkMjg9ZW8sZS5kZWZhdWx0JDI5PWdhLGUuZGVmYXVsdCQzMD1pbyxlLmRlZmF1bHQkMzE9RG8sZS5fX21vZHVsZUV4cG9ydHM9Z2EsZS5kZWZhdWx0JDMyPWwsZS5fX21vZHVsZUV4cG9ydHMkMT1pbyxlLnBsdWdpbj1Dcn0pLGkoMCxmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciByPXR5cGVvZiB0O2lmKCJudW1iZXIiPT09cnx8ImJvb2xlYW4iPT09cnx8InN0cmluZyI9PT1yfHxudWxsPT10KXJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIG49IlsiLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKW4rPWUoYVtpXSkrIiwiO3JldHVybiBuKyJdIn1mb3IodmFyIG89T2JqZWN0LmtleXModCkuc29ydCgpLHM9InsiLGw9MDtsPG8ubGVuZ3RoO2wrKylzKz1KU09OLnN0cmluZ2lmeShvW2xdKSsiOiIrZSh0W29bbF1dKSsiLCI7cmV0dXJuIHMrIn0ifWZ1bmN0aW9uIHIocil7Zm9yKHZhciBuPSIiLGk9MCxhPXQuZGVmYXVsdCQxODtpPGEubGVuZ3RoO2krPTEpbis9Ii8iK2UoclthW2ldXSk7cmV0dXJuIG59dmFyIG49ZnVuY3Rpb24odCl7dCYmdGhpcy5yZXBsYWNlKHQpfTtmdW5jdGlvbiBpKHQsZSxyLG4saSl7aWYodm9pZCAwPT09ZS5zZWdtZW50KXJldHVybiEwO2Zvcih2YXIgYT1lLG89ZS5zZWdtZW50KzEscz0wO3M+LXIvMjspe2lmKC0tbzwwKXJldHVybiExO3MtPXRbb10uZGlzdChhKSxhPXRbb119cys9dFtvXS5kaXN0KHRbbysxXSksbysrO2Zvcih2YXIgbD1bXSxjPTA7czxyLzI7KXt2YXIgdT10W28tMV0sZj10W29dLGg9dFtvKzFdO2lmKCFoKXJldHVybiExO3ZhciBwPXUuYW5nbGVUbyhmKS1mLmFuZ2xlVG8oaCk7Zm9yKHA9TWF0aC5hYnMoKHArMypNYXRoLlBJKSUoMipNYXRoLlBJKS1NYXRoLlBJKSxsLnB1c2goe2Rpc3RhbmNlOnMsYW5nbGVEZWx0YTpwfSksYys9cDtzLWxbMF0uZGlzdGFuY2U+bjspYy09bC5zaGlmdCgpLmFuZ2xlRGVsdGE7aWYoYz5pKXJldHVybiExO28rKyxzKz1mLmRpc3QoaCl9cmV0dXJuITB9ZnVuY3Rpb24gYShlLHIsbixhLG8scyxsLGMsdSl7dmFyIGY9YT8uNipzKmw6MCxoPU1hdGgubWF4KGE/YS5yaWdodC1hLmxlZnQ6MCxvP28ucmlnaHQtby5sZWZ0OjApLHA9MD09PWVbMF0ueHx8ZVswXS54PT09dXx8MD09PWVbMF0ueXx8ZVswXS55PT09dTtyZXR1cm4gci1oKmw8ci80JiYocj1oKmwrci80KSxmdW5jdGlvbiBlKHIsbixhLG8scyxsLGMsdSxmKXtmb3IodmFyIGg9bC8yLHA9MCxkPTA7ZDxyLmxlbmd0aC0xO2QrKylwKz1yW2RdLmRpc3QocltkKzFdKTtmb3IodmFyIGc9MCx2PW4tYSxtPVtdLHk9MDt5PHIubGVuZ3RoLTE7eSsrKXtmb3IodmFyIHg9clt5XSxiPXJbeSsxXSxfPXguZGlzdChiKSx3PWIuYW5nbGVUbyh4KTt2K2E8ZytfOyl7dmFyIGs9KCh2Kz1hKS1nKS9fLFQ9dC5udW1iZXIoeC54LGIueCxrKSxBPXQubnVtYmVyKHgueSxiLnksayk7aWYoVD49MCYmVDxmJiZBPj0wJiZBPGYmJnYtaD49MCYmditoPD1wKXt2YXIgTT1uZXcgdC5kZWZhdWx0JDI1KFQsQSx3LHkpO00uX3JvdW5kKCksbyYmIWkocixNLGwsbyxzKXx8bS5wdXNoKE0pfX1nKz1ffXJldHVybiB1fHxtLmxlbmd0aHx8Y3x8KG09ZShyLGcvMixhLG8scyxsLGMsITAsZikpLG19KGUscD9yLzIqYyVyOihoLzIrMipzKSpsKmMlcixyLGYsbixoKmwscCwhMSx1KX1uLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheWVyQ29uZmlncz17fSx0aGlzLl9sYXllcnM9e30sdGhpcy51cGRhdGUodCxbXSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT10aGlzLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO2kuX2xheWVyQ29uZmlnc1tzLmlkXT1zO3ZhciBsPWkuX2xheWVyc1tzLmlkXT10LmRlZmF1bHQkMjIocyk7bC5fZmVhdHVyZUZpbHRlcj10LmRlZmF1bHQkMTMobC5maWx0ZXIpfWZvcih2YXIgYz0wLHU9bjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107ZGVsZXRlIGkuX2xheWVyQ29uZmlnc1tmXSxkZWxldGUgaS5fbGF5ZXJzW2ZdfXRoaXMuZmFtaWxpZXNCeVNvdXJjZT17fTtmb3IodmFyIGg9MCxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXIodFtuXSksYT1lW2ldO2F8fChhPWVbaV09W10pLGEucHVzaCh0W25dKX12YXIgbz1bXTtmb3IodmFyIHMgaW4gZSlvLnB1c2goZVtzXSk7cmV0dXJuIG99KHQudmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncykpO2g8cC5sZW5ndGg7aCs9MSl7dmFyIGQ9cFtoXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xheWVyc1t0LmlkXX0pLGc9ZFswXTtpZigibm9uZSIhPT1nLnZpc2liaWxpdHkpe3ZhciB2PWcuc291cmNlfHwiIixtPWkuZmFtaWxpZXNCeVNvdXJjZVt2XTttfHwobT1pLmZhbWlsaWVzQnlTb3VyY2Vbdl09e30pO3ZhciB5PWcuc291cmNlTGF5ZXJ8fCJfZ2VvanNvblRpbGVMYXllciIseD1tW3ldO3h8fCh4PW1beV09W10pLHgucHVzaChkKX19fTt2YXIgbz1mdW5jdGlvbigpe3RoaXMub3BhY2l0eT0wLHRoaXMudGFyZ2V0T3BhY2l0eT0wLHRoaXMudGltZT0wfTtvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBvO3JldHVybiB0Lm9wYWNpdHk9dGhpcy5vcGFjaXR5LHQudGFyZ2V0T3BhY2l0eT10aGlzLnRhcmdldE9wYWNpdHksdC50aW1lPXRoaXMudGltZSx0fSx0LnJlZ2lzdGVyKCJPcGFjaXR5U3RhdGUiLG8pO3ZhciBzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGY9by50b3Aqcy1sLGg9by5ib3R0b20qcytsLHA9by5sZWZ0KnMtbCxkPW8ucmlnaHQqcytsO2lmKHRoaXMuYm94U3RhcnRJbmRleD10Lmxlbmd0aCxjKXt2YXIgZz1oLWYsdj1kLXA7Zz4wJiYoZz1NYXRoLm1heCgxMCpzLGcpLHRoaXMuX2FkZExpbmVDb2xsaXNpb25DaXJjbGVzKHQsZSxyLHIuc2VnbWVudCx2LGcsbixpLGEsdSkpfWVsc2UgdC5lbXBsYWNlQmFjayhyLngsci55LHAsZixkLGgsbixpLGEsMCwwKTt0aGlzLmJveEVuZEluZGV4PXQubGVuZ3RofTtzLnByb3RvdHlwZS5fYWRkTGluZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9YS8yLGY9TWF0aC5mbG9vcihpL3UpLGg9MSsuNCpNYXRoLmxvZyhjKS9NYXRoLkxOMixwPU1hdGguZmxvb3IoZipoLzIpLGQ9LWEvMixnPXIsdj1uKzEsbT1kLHk9LWkvMix4PXktaS80O2Rve2lmKC0tdjwwKXtpZihtPnkpcmV0dXJuO3Y9MDticmVha31tLT1lW3ZdLmRpc3QoZyksZz1lW3ZdfXdoaWxlKG0+eCk7Zm9yKHZhciBiPWVbdl0uZGlzdChlW3YrMV0pLF89LXA7XzxmK3A7XysrKXt2YXIgdz1fKnUsaz15K3c7aWYodzwwJiYoays9dyksdz5pJiYoays9dy1pKSwhKGs8bSkpe2Zvcig7bStiPGs7KXtpZihtKz1iLCsrdisxPj1lLmxlbmd0aClyZXR1cm47Yj1lW3ZdLmRpc3QoZVt2KzFdKX12YXIgVD1rLW0sQT1lW3ZdLE09ZVt2KzFdLnN1YihBKS5fdW5pdCgpLl9tdWx0KFQpLl9hZGQoQSkuX3JvdW5kKCksUz1NYXRoLmFicyhrLWQpPHU/MDouOCooay1kKTt0LmVtcGxhY2VCYWNrKE0ueCxNLnksLWEvMiwtYS8yLGEvMixhLzIsbyxzLGwsYS8yLFMpfX19O3ZhciBsPXUsYz11O2Z1bmN0aW9uIHUodCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUodCxlKTtpZih0aGlzLmRhdGE9dHx8W10sdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmNvbXBhcmU9ZXx8Zix0aGlzLmxlbmd0aD4wKWZvcih2YXIgcj0odGhpcy5sZW5ndGg+PjEpLTE7cj49MDtyLS0pdGhpcy5fZG93bihyKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIGgoZSxyLG4pe3ZvaWQgMD09PXImJihyPTEpLHZvaWQgMD09PW4mJihuPSExKTtmb3IodmFyIGk9MS8wLGE9MS8wLG89LTEvMCxzPS0xLzAsYz1lWzBdLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XTsoIXV8fGYueDxpKSYmKGk9Zi54KSwoIXV8fGYueTxhKSYmKGE9Zi55KSwoIXV8fGYueD5vKSYmKG89Zi54KSwoIXV8fGYueT5zKSYmKHM9Zi55KX12YXIgaD1vLWksZz1zLWEsdj1NYXRoLm1pbihoLGcpLG09di8yLHk9bmV3IGwobnVsbCxwKTtpZigwPT09dilyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKGksYSk7Zm9yKHZhciB4PWk7eDxvO3grPXYpZm9yKHZhciBiPWE7YjxzO2IrPXYpeS5wdXNoKG5ldyBkKHgrbSxiK20sbSxlKSk7Zm9yKHZhciBfPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10WzBdLGE9MCxvPWkubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9aVthXSxjPWlbc10sdT1sLngqYy55LWMueCpsLnk7cis9KGwueCtjLngpKnUsbis9KGwueStjLnkpKnUsZSs9Myp1fXJldHVybiBuZXcgZChyL2Usbi9lLDAsdCl9KGUpLHc9eS5sZW5ndGg7eS5sZW5ndGg7KXt2YXIgaz15LnBvcCgpOyhrLmQ+Xy5kfHwhXy5kKSYmKF89ayxuJiZjb25zb2xlLmxvZygiZm91bmQgYmVzdCAlZCBhZnRlciAlZCBwcm9iZXMiLE1hdGgucm91bmQoMWU0KmsuZCkvMWU0LHcpKSxrLm1heC1fLmQ8PXJ8fChtPWsuaC8yLHkucHVzaChuZXcgZChrLnAueC1tLGsucC55LW0sbSxlKSkseS5wdXNoKG5ldyBkKGsucC54K20say5wLnktbSxtLGUpKSx5LnB1c2gobmV3IGQoay5wLngtbSxrLnAueSttLG0sZSkpLHkucHVzaChuZXcgZChrLnAueCttLGsucC55K20sbSxlKSksdys9NCl9cmV0dXJuIG4mJihjb25zb2xlLmxvZygibnVtIHByb2JlczogIit3KSxjb25zb2xlLmxvZygiYmVzdCBkaXN0YW5jZTogIitfLmQpKSxfLnB9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiBlLm1heC10Lm1heH1mdW5jdGlvbiBkKGUscixuLGkpe3RoaXMucD1uZXcgdC5kZWZhdWx0JDEoZSxyKSx0aGlzLmg9bix0aGlzLmQ9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ITEsaT0xLzAsYT0wO2E8ci5sZW5ndGg7YSsrKWZvcih2YXIgbz1yW2FdLHM9MCxsPW8ubGVuZ3RoLGM9bC0xO3M8bDtjPXMrKyl7dmFyIHU9b1tzXSxmPW9bY107dS55PmUueSE9Zi55PmUueSYmZS54PChmLngtdS54KSooZS55LXUueSkvKGYueS11LnkpK3UueCYmKG49IW4pLGk9TWF0aC5taW4oaSx0LmRpc3RUb1NlZ21lbnRTcXVhcmVkKGUsdSxmKSl9cmV0dXJuKG4/MTotMSkqTWF0aC5zcXJ0KGkpfSh0aGlzLnAsaSksdGhpcy5tYXg9dGhpcy5kK3RoaXMuaCpNYXRoLlNRUlQyfWZ1bmN0aW9uIGcoZSxyLG4saSxhLG8pe2UuY3JlYXRlQXJyYXlzKCksZS5zeW1ib2xJbnN0YW5jZXM9W107dmFyIHM9NTEyKmUub3ZlcnNjYWxpbmc7ZS50aWxlUGl4ZWxSYXRpbz10LmRlZmF1bHQkOC9zLGUuY29tcGFyZVRleHQ9e30sZS5pY29uc05lZWRMaW5lYXI9ITE7dmFyIGw9ZS5sYXllcnNbMF0ubGF5b3V0LGM9ZS5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXMsdT17fTtpZigiY29tcG9zaXRlIj09PWUudGV4dFNpemVEYXRhLmZ1bmN0aW9uVHlwZSl7dmFyIGY9ZS50ZXh0U2l6ZURhdGEuem9vbVJhbmdlLGg9Zi5taW4scD1mLm1heDt1LmNvbXBvc2l0ZVRleHRTaXplcz1bY1sidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGgpKSxjWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYocCkpXX1pZigiY29tcG9zaXRlIj09PWUuaWNvblNpemVEYXRhLmZ1bmN0aW9uVHlwZSl7dmFyIGQ9ZS5pY29uU2l6ZURhdGEuem9vbVJhbmdlLGc9ZC5taW4sbT1kLm1heDt1LmNvbXBvc2l0ZUljb25TaXplcz1bY1siaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGcpKSxjWyJpY29uLXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYobSkpXX11LmxheW91dFRleHRTaXplPWNbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihlLnpvb20rMSkpLHUubGF5b3V0SWNvblNpemU9Y1siaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGUuem9vbSsxKSksdS50ZXh0TWF4U2l6ZT1jWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYoMTgpKTtmb3IodmFyIHk9MjQqbC5nZXQoInRleHQtbGluZS1oZWlnaHQiKSx4PSJtYXAiPT09bC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJsaW5lIj09PWwuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksYj1sLmdldCgidGV4dC1rZWVwLXVwcmlnaHQiKSxfPTAsdz1lLmZlYXR1cmVzO188dy5sZW5ndGg7Xys9MSl7dmFyIGs9d1tfXSxUPWwuZ2V0KCJ0ZXh0LWZvbnQiKS5ldmFsdWF0ZShrKS5qb2luKCIsIiksQT1yW1RdfHx7fSxNPW5bVF18fHt9LFM9e30sRT1rLnRleHQ7aWYoRSl7dmFyIEM9bC5nZXQoInRleHQtb2Zmc2V0IikuZXZhbHVhdGUoaykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSksTD0yNCpsLmdldCgidGV4dC1sZXR0ZXItc3BhY2luZyIpLmV2YWx1YXRlKGspLHo9dC5hbGxvd3NMZXR0ZXJTcGFjaW5nKEUpP0w6MCxPPWwuZ2V0KCJ0ZXh0LWFuY2hvciIpLmV2YWx1YXRlKGspLEk9bC5nZXQoInRleHQtanVzdGlmeSIpLmV2YWx1YXRlKGspLEQ9ImxpbmUiIT09bC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKT8yNCpsLmdldCgidGV4dC1tYXgtd2lkdGgiKS5ldmFsdWF0ZShrKTowO1MuaG9yaXpvbnRhbD10LnNoYXBlVGV4dChFLEEsRCx5LE8sSSx6LEMsMjQsdC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsKSx0LmFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUoRSkmJngmJmImJihTLnZlcnRpY2FsPXQuc2hhcGVUZXh0KEUsQSxELHksTyxJLHosQywyNCx0LldyaXRpbmdNb2RlLnZlcnRpY2FsKSl9dmFyIFA9dm9pZCAwO2lmKGsuaWNvbil7dmFyIFI9aVtrLmljb25dO1ImJihQPXQuc2hhcGVJY29uKGFbay5pY29uXSxsLmdldCgiaWNvbi1vZmZzZXQiKS5ldmFsdWF0ZShrKSxsLmdldCgiaWNvbi1hbmNob3IiKS5ldmFsdWF0ZShrKSksdm9pZCAwPT09ZS5zZGZJY29ucz9lLnNkZkljb25zPVIuc2RmOmUuc2RmSWNvbnMhPT1SLnNkZiYmdC53YXJuT25jZSgiU3R5bGUgc2hlZXQgd2FybmluZzogQ2Fubm90IG1peCBTREYgYW5kIG5vbi1TREYgaWNvbnMgaW4gb25lIGJ1ZmZlciIpLFIucGl4ZWxSYXRpbyE9PWUucGl4ZWxSYXRpbz9lLmljb25zTmVlZExpbmVhcj0hMDowIT09bC5nZXQoImljb24tcm90YXRlIikuY29uc3RhbnRPcigxKSYmKGUuaWNvbnNOZWVkTGluZWFyPSEwKSl9KFMuaG9yaXpvbnRhbHx8UCkmJnYoZSxrLFMsUCxNLHUpfW8mJmUuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnMoKX1mdW5jdGlvbiB2KGUscixuLGksbCxjKXt2YXIgdT1jLmxheW91dFRleHRTaXplLmV2YWx1YXRlKHIpLGY9Yy5sYXlvdXRJY29uU2l6ZS5ldmFsdWF0ZShyKSxwPWMudGV4dE1heFNpemUuZXZhbHVhdGUocik7dm9pZCAwPT09cCYmKHA9dSk7dmFyIGQ9ZS5sYXllcnNbMF0ubGF5b3V0LGc9ZC5nZXQoInRleHQtb2Zmc2V0IikuZXZhbHVhdGUociksdj1kLmdldCgiaWNvbi1vZmZzZXQiKS5ldmFsdWF0ZShyKSx4PXUvMjQsYj1lLnRpbGVQaXhlbFJhdGlvKngsXz1lLnRpbGVQaXhlbFJhdGlvKnAvMjQsdz1lLnRpbGVQaXhlbFJhdGlvKmYsaz1lLnRpbGVQaXhlbFJhdGlvKmQuZ2V0KCJzeW1ib2wtc3BhY2luZyIpLFQ9ZC5nZXQoInRleHQtcGFkZGluZyIpKmUudGlsZVBpeGVsUmF0aW8sQT1kLmdldCgiaWNvbi1wYWRkaW5nIikqZS50aWxlUGl4ZWxSYXRpbyxNPWQuZ2V0KCJ0ZXh0LW1heC1hbmdsZSIpLzE4MCpNYXRoLlBJLFM9Im1hcCI9PT1kLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmImxpbmUiPT09ZC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxFPSJtYXAiPT09ZC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50IikmJiJsaW5lIj09PWQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksQz1rLzIsTD1mdW5jdGlvbihhLHUpe3UueDwwfHx1Lng+PXQuZGVmYXVsdCQ4fHx1Lnk8MHx8dS55Pj10LmRlZmF1bHQkOHx8ZS5zeW1ib2xJbnN0YW5jZXMucHVzaChmdW5jdGlvbihlLHIsbixpLGEsbCxjLHUsZixoLHAsZCxnLHYseSx4LGIsXyx3LGssVCl7dmFyIEEsTSxTPWUuYWRkVG9MaW5lVmVydGV4QXJyYXkocixuKSxFPTAsQz0wLEw9MCx6PWkuaG9yaXpvbnRhbD9pLmhvcml6b250YWwudGV4dDoiIixPPVtdO2kuaG9yaXpvbnRhbCYmKEE9bmV3IHMoYyxuLHIsdSxmLGgsaS5ob3Jpem9udGFsLHAsZCxnLGUub3ZlcnNjYWxpbmcpLEMrPW0oZSxyLGkuaG9yaXpvbnRhbCxsLGcsdyx2LFMsaS52ZXJ0aWNhbD90LldyaXRpbmdNb2RlLmhvcml6b250YWw6dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsT25seSxPLGssVCksaS52ZXJ0aWNhbCYmKEwrPW0oZSxyLGkudmVydGljYWwsbCxnLHcsdixTLHQuV3JpdGluZ01vZGUudmVydGljYWwsTyxrLFQpKSk7dmFyIEk9QT9BLmJveFN0YXJ0SW5kZXg6ZS5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsRD1BP0EuYm94RW5kSW5kZXg6ZS5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7aWYoYSl7dmFyIFA9ZnVuY3Rpb24oZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGY9ci5pbWFnZSxoPW4ubGF5b3V0LHA9ci50b3AtMS9mLnBpeGVsUmF0aW8sZD1yLmxlZnQtMS9mLnBpeGVsUmF0aW8sZz1yLmJvdHRvbSsxL2YucGl4ZWxSYXRpbyx2PXIucmlnaHQrMS9mLnBpeGVsUmF0aW87aWYoIm5vbmUiIT09aC5nZXQoImljb24tdGV4dC1maXQiKSYmYSl7dmFyIG09di1kLHk9Zy1wLHg9aC5nZXQoInRleHQtc2l6ZSIpLmV2YWx1YXRlKG8pLzI0LGI9YS5sZWZ0KngsXz1hLnJpZ2h0Kngsdz1hLnRvcCp4LGs9Xy1iLFQ9YS5ib3R0b20qeC13LEE9aC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpWzBdLE09aC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpWzFdLFM9aC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpWzJdLEU9aC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpWzNdLEM9IndpZHRoIj09PWguZ2V0KCJpY29uLXRleHQtZml0Iik/LjUqKFQteSk6MCxMPSJoZWlnaHQiPT09aC5nZXQoImljb24tdGV4dC1maXQiKT8uNSooay1tKTowLHo9IndpZHRoIj09PWguZ2V0KCJpY29uLXRleHQtZml0Iil8fCJib3RoIj09PWguZ2V0KCJpY29uLXRleHQtZml0Iik/azptLE89ImhlaWdodCI9PT1oLmdldCgiaWNvbi10ZXh0LWZpdCIpfHwiYm90aCI9PT1oLmdldCgiaWNvbi10ZXh0LWZpdCIpP1Q6eTtzPW5ldyB0LmRlZmF1bHQkMShiK0wtRSx3K0MtQSksbD1uZXcgdC5kZWZhdWx0JDEoYitMK00reix3K0MtQSksYz1uZXcgdC5kZWZhdWx0JDEoYitMK00reix3K0MrUytPKSx1PW5ldyB0LmRlZmF1bHQkMShiK0wtRSx3K0MrUytPKX1lbHNlIHM9bmV3IHQuZGVmYXVsdCQxKGQscCksbD1uZXcgdC5kZWZhdWx0JDEodixwKSxjPW5ldyB0LmRlZmF1bHQkMSh2LGcpLHU9bmV3IHQuZGVmYXVsdCQxKGQsZyk7dmFyIEk9bi5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0ZSIpLmV2YWx1YXRlKG8pKk1hdGguUEkvMTgwO2lmKEkpe3ZhciBEPU1hdGguc2luKEkpLFA9TWF0aC5jb3MoSSksUj1bUCwtRCxELFBdO3MuX21hdE11bHQoUiksbC5fbWF0TXVsdChSKSx1Ll9tYXRNdWx0KFIpLGMuX21hdE11bHQoUil9cmV0dXJuW3t0bDpzLHRyOmwsYmw6dSxicjpjLHRleDpmLnBhZGRlZFJlY3Qsd3JpdGluZ01vZGU6dm9pZCAwLGdseXBoT2Zmc2V0OlswLDBdfV19KDAsYSxsLDAsaS5ob3Jpem9udGFsLHcpO009bmV3IHMoYyxuLHIsdSxmLGgsYSx5LHgsITEsZS5vdmVyc2NhbGluZyksRT00KlAubGVuZ3RoO3ZhciBSPWUuaWNvblNpemVEYXRhLEY9bnVsbDsic291cmNlIj09PVIuZnVuY3Rpb25UeXBlP0Y9WzEwKmwubGF5b3V0LmdldCgiaWNvbi1zaXplIikuZXZhbHVhdGUodyldOiJjb21wb3NpdGUiPT09Ui5mdW5jdGlvblR5cGUmJihGPVsxMCpULmNvbXBvc2l0ZUljb25TaXplc1swXS5ldmFsdWF0ZSh3KSwxMCpULmNvbXBvc2l0ZUljb25TaXplc1sxXS5ldmFsdWF0ZSh3KV0pLGUuYWRkU3ltYm9scyhlLmljb24sUCxGLF8sYix3LCExLHIsUy5saW5lU3RhcnRJbmRleCxTLmxpbmVMZW5ndGgpfXZhciBCPU0/TS5ib3hTdGFydEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLE49TT9NLmJveEVuZEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO3JldHVybiBlLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoPj10LmRlZmF1bHQkMTQuTUFYX0dMWVBIUyYmdC53YXJuT25jZSgiVG9vIG1hbnkgZ2x5cGhzIGJlaW5nIHJlbmRlcmVkIGluIGEgdGlsZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yOTA3Iikse2tleTp6LHRleHRCb3hTdGFydEluZGV4OkksdGV4dEJveEVuZEluZGV4OkQsaWNvbkJveFN0YXJ0SW5kZXg6QixpY29uQm94RW5kSW5kZXg6Tix0ZXh0T2Zmc2V0OnYsaWNvbk9mZnNldDpfLGFuY2hvcjpyLGxpbmU6bixmZWF0dXJlSW5kZXg6dSxmZWF0dXJlOncsbnVtR2x5cGhWZXJ0aWNlczpDLG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlczpMLG51bUljb25WZXJ0aWNlczpFLHRleHRPcGFjaXR5U3RhdGU6bmV3IG8saWNvbk9wYWNpdHlTdGF0ZTpuZXcgbyxpc0R1cGxpY2F0ZTohMSxwbGFjZWRUZXh0U3ltYm9sSW5kaWNlczpPLGNyb3NzVGlsZUlEOjB9fShlLHUsYSxuLGksZS5sYXllcnNbMF0sZS5jb2xsaXNpb25Cb3hBcnJheSxyLmluZGV4LHIuc291cmNlTGF5ZXJJbmRleCxlLmluZGV4LGIsVCxTLGcsdyxBLEUsdixyLGwsYykpfTtpZigibGluZSI9PT1kLmdldCgic3ltYm9sLXBsYWNlbWVudCIpKWZvcih2YXIgej0wLE89ZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9dm9pZCAwLHU9MDt1PGwubGVuZ3RoLTE7dSsrKXt2YXIgZj1sW3VdLGg9bFt1KzFdO2YueDwwJiZoLng8MHx8KGYueDwwP2Y9bmV3IHQuZGVmYXVsdCQxKDAsZi55KyhoLnktZi55KSooKDAtZi54KS8oaC54LWYueCkpKS5fcm91bmQoKTpoLng8MCYmKGg9bmV3IHQuZGVmYXVsdCQxKDAsZi55KyhoLnktZi55KSooKDAtZi54KS8oaC54LWYueCkpKS5fcm91bmQoKSksZi55PDAmJmgueTwwfHwoZi55PDA/Zj1uZXcgdC5kZWZhdWx0JDEoZi54KyhoLngtZi54KSooKDAtZi55KS8oaC55LWYueSkpLDApLl9yb3VuZCgpOmgueTwwJiYoaD1uZXcgdC5kZWZhdWx0JDEoZi54KyhoLngtZi54KSooKDAtZi55KS8oaC55LWYueSkpLDApLl9yb3VuZCgpKSxmLng+PWkmJmgueD49aXx8KGYueD49aT9mPW5ldyB0LmRlZmF1bHQkMShpLGYueSsoaC55LWYueSkqKChpLWYueCkvKGgueC1mLngpKSkuX3JvdW5kKCk6aC54Pj1pJiYoaD1uZXcgdC5kZWZhdWx0JDEoaSxmLnkrKGgueS1mLnkpKigoaS1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpKSxmLnk+PWEmJmgueT49YXx8KGYueT49YT9mPW5ldyB0LmRlZmF1bHQkMShmLngrKGgueC1mLngpKigoYS1mLnkpLyhoLnktZi55KSksYSkuX3JvdW5kKCk6aC55Pj1hJiYoaD1uZXcgdC5kZWZhdWx0JDEoZi54KyhoLngtZi54KSooKGEtZi55KS8oaC55LWYueSkpLGEpLl9yb3VuZCgpKSxjJiZmLmVxdWFscyhjW2MubGVuZ3RoLTFdKXx8KGM9W2ZdLG8ucHVzaChjKSksYy5wdXNoKGgpKSkpKX1yZXR1cm4gb30oci5nZW9tZXRyeSwwLDAsdC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpO3o8Ty5sZW5ndGg7eis9MSlmb3IodmFyIEk9T1t6XSxEPTAsUD1hKEksayxNLG4udmVydGljYWx8fG4uaG9yaXpvbnRhbCxpLDI0LF8sZS5vdmVyc2NhbGluZyx0LmRlZmF1bHQkOCk7RDxQLmxlbmd0aDtEKz0xKXt2YXIgUj1QW0RdLEY9bi5ob3Jpem9udGFsO0YmJnkoZSxGLnRleHQsQyxSKXx8TChJLFIpfWVsc2UgaWYoIlBvbHlnb24iPT09ci50eXBlKWZvcih2YXIgQj0wLE49dC5kZWZhdWx0JDI2KHIuZ2VvbWV0cnksMCk7QjxOLmxlbmd0aDtCKz0xKXt2YXIgaj1OW0JdLFY9aChqLDE2KTtMKGpbMF0sbmV3IHQuZGVmYXVsdCQyNShWLngsVi55LDApKX1lbHNlIGlmKCJMaW5lU3RyaW5nIj09PXIudHlwZSlmb3IodmFyIFU9MCxxPXIuZ2VvbWV0cnk7VTxxLmxlbmd0aDtVKz0xKXt2YXIgSD1xW1VdO0woSCxuZXcgdC5kZWZhdWx0JDI1KEhbMF0ueCxIWzBdLnksMCkpfWVsc2UgaWYoIlBvaW50Ij09PXIudHlwZSlmb3IodmFyIEc9MCxZPXIuZ2VvbWV0cnk7RzxZLmxlbmd0aDtHKz0xKWZvcih2YXIgVz0wLFg9WVtHXTtXPFgubGVuZ3RoO1crPTEpe3ZhciBaPVhbV107TChbWl0sbmV3IHQuZGVmYXVsdCQyNShaLngsWi55LDApKX19ZnVuY3Rpb24gbShlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7dmFyIHA9ZnVuY3Rpb24oZSxyLG4saSxhLG8pe2Zvcih2YXIgcz1uLmxheW91dC5nZXQoInRleHQtcm90YXRlIikuZXZhbHVhdGUoYSkqTWF0aC5QSS8xODAsbD1uLmxheW91dC5nZXQoInRleHQtb2Zmc2V0IikuZXZhbHVhdGUoYSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSksYz1yLnBvc2l0aW9uZWRHbHlwaHMsdT1bXSxmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBoPWNbZl0scD1vW2guZ2x5cGhdO2lmKHApe3ZhciBkPXAucmVjdDtpZihkKXt2YXIgZz10LkdMWVBIX1BCRl9CT1JERVIrMSx2PXAubWV0cmljcy5hZHZhbmNlLzIsbT1pP1toLngrdixoLnldOlswLDBdLHk9aT9bMCwwXTpbaC54K3YrbFswXSxoLnkrbFsxXV0seD1wLm1ldHJpY3MubGVmdC1nLXYreVswXSxiPS1wLm1ldHJpY3MudG9wLWcreVsxXSxfPXgrZC53LHc9YitkLmgsaz1uZXcgdC5kZWZhdWx0JDEoeCxiKSxUPW5ldyB0LmRlZmF1bHQkMShfLGIpLEE9bmV3IHQuZGVmYXVsdCQxKHgsdyksTT1uZXcgdC5kZWZhdWx0JDEoXyx3KTtpZihpJiZoLnZlcnRpY2FsKXt2YXIgUz1uZXcgdC5kZWZhdWx0JDEoLXYsdiksRT0tTWF0aC5QSS8yLEM9bmV3IHQuZGVmYXVsdCQxKDUsMCk7ay5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKSxULl9yb3RhdGVBcm91bmQoRSxTKS5fYWRkKEMpLEEuX3JvdGF0ZUFyb3VuZChFLFMpLl9hZGQoQyksTS5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKX1pZihzKXt2YXIgTD1NYXRoLnNpbihzKSx6PU1hdGguY29zKHMpLE89W3osLUwsTCx6XTtrLl9tYXRNdWx0KE8pLFQuX21hdE11bHQoTyksQS5fbWF0TXVsdChPKSxNLl9tYXRNdWx0KE8pfXUucHVzaCh7dGw6ayx0cjpULGJsOkEsYnI6TSx0ZXg6ZCx3cml0aW5nTW9kZTpyLndyaXRpbmdNb2RlLGdseXBoT2Zmc2V0Om19KX19fXJldHVybiB1fSgwLG4saSxhLG8sZiksZD1lLnRleHRTaXplRGF0YSxnPW51bGw7cmV0dXJuInNvdXJjZSI9PT1kLmZ1bmN0aW9uVHlwZT9nPVsxMCppLmxheW91dC5nZXQoInRleHQtc2l6ZSIpLmV2YWx1YXRlKG8pXToiY29tcG9zaXRlIj09PWQuZnVuY3Rpb25UeXBlJiYoZz1bMTAqaC5jb21wb3NpdGVUZXh0U2l6ZXNbMF0uZXZhbHVhdGUobyksMTAqaC5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUobyldKSxlLmFkZFN5bWJvbHMoZS50ZXh0LHAsZyxzLGEsbyxjLHIsbC5saW5lU3RhcnRJbmRleCxsLmxpbmVMZW5ndGgpLHUucHVzaChlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoLTEpLDQqcC5sZW5ndGh9ZnVuY3Rpb24geSh0LGUscixuKXt2YXIgaT10LmNvbXBhcmVUZXh0O2lmKGUgaW4gaSl7Zm9yKHZhciBhPWlbZV0sbz1hLmxlbmd0aC0xO28+PTA7by0tKWlmKG4uZGlzdChhW29dKTxyKXJldHVybiEwfWVsc2UgaVtlXT1bXTtyZXR1cm4gaVtlXS5wdXNoKG4pLCExfXUucHJvdG90eXBlPXtwdXNoOmZ1bmN0aW9uKHQpe3RoaXMuZGF0YS5wdXNoKHQpLHRoaXMubGVuZ3RoKyssdGhpcy5fdXAodGhpcy5sZW5ndGgtMSl9LHBvcDpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHQ9dGhpcy5kYXRhWzBdO3JldHVybiB0aGlzLmxlbmd0aC0tLHRoaXMubGVuZ3RoPjAmJih0aGlzLmRhdGFbMF09dGhpcy5kYXRhW3RoaXMubGVuZ3RoXSx0aGlzLl9kb3duKDApKSx0aGlzLmRhdGEucG9wKCksdH19LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhWzBdfSxfdXA6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YSxyPXRoaXMuY29tcGFyZSxuPWVbdF07dD4wOyl7dmFyIGk9dC0xPj4xLGE9ZVtpXTtpZihyKG4sYSk+PTApYnJlYWs7ZVt0XT1hLHQ9aX1lW3RdPW59LF9kb3duOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGEscj10aGlzLmNvbXBhcmUsbj10aGlzLmxlbmd0aD4+MSxpPWVbdF07dDxuOyl7dmFyIGE9MSsodDw8MSksbz1hKzEscz1lW2FdO2lmKG88dGhpcy5sZW5ndGgmJnIoZVtvXSxzKTwwJiYoYT1vLHM9ZVtvXSkscihzLGkpPj0wKWJyZWFrO2VbdF09cyx0PWF9ZVt0XT1pfX0sbC5kZWZhdWx0PWM7dmFyIHg9ZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6MCxoZWlnaHQ6MH0pLG49e30saT1uZXcgdC5kZWZhdWx0JDIoMCwwLHthdXRvUmVzaXplOiEwfSk7Zm9yKHZhciBhIGluIGUpe3ZhciBvPWVbYV0scz1uW2FdPXt9O2Zvcih2YXIgbCBpbiBvKXt2YXIgYz1vWytsXTtpZihjJiYwIT09Yy5iaXRtYXAud2lkdGgmJjAhPT1jLmJpdG1hcC5oZWlnaHQpe3ZhciB1PWkucGFja09uZShjLmJpdG1hcC53aWR0aCsyLGMuYml0bWFwLmhlaWdodCsyKTtyLnJlc2l6ZSh7d2lkdGg6aS53LGhlaWdodDppLmh9KSx0LkFscGhhSW1hZ2UuY29weShjLmJpdG1hcCxyLHt4OjAseTowfSx7eDp1LngrMSx5OnUueSsxfSxjLmJpdG1hcCksc1tsXT17cmVjdDp1LG1ldHJpY3M6Yy5tZXRyaWNzfX19fWkuc2hyaW5rKCksci5yZXNpemUoe3dpZHRoOmkudyxoZWlnaHQ6aS5ofSksdGhpcy5pbWFnZT1yLHRoaXMucG9zaXRpb25zPW59O3QucmVnaXN0ZXIoIkdseXBoQXRsYXMiLHgpO3ZhciBiPWZ1bmN0aW9uKGUpe3RoaXMudGlsZUlEPW5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS50aWxlSUQub3ZlcnNjYWxlZFosZS50aWxlSUQud3JhcCxlLnRpbGVJRC5jYW5vbmljYWwueixlLnRpbGVJRC5jYW5vbmljYWwueCxlLnRpbGVJRC5jYW5vbmljYWwueSksdGhpcy51aWQ9ZS51aWQsdGhpcy56b29tPWUuem9vbSx0aGlzLnBpeGVsUmF0aW89ZS5waXhlbFJhdGlvLHRoaXMudGlsZVNpemU9ZS50aWxlU2l6ZSx0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLm92ZXJzY2FsaW5nPXRoaXMudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzPWUuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuY29sbGVjdFJlc291cmNlVGltaW5nPSEhZS5jb2xsZWN0UmVzb3VyY2VUaW1pbmd9O2Z1bmN0aW9uIF8oZSxyKXtmb3IodmFyIG49bmV3IHQuZGVmYXVsdCQxNihyKSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSlhW2ldLnJlY2FsY3VsYXRlKG4pfWIucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXRoaXM7dGhpcy5zdGF0dXM9InBhcnNpbmciLHRoaXMuZGF0YT1lLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IHQuQ29sbGlzaW9uQm94QXJyYXk7dmFyIG89bmV3IHQuZGVmYXVsdCQyNyhPYmplY3Qua2V5cyhlLmxheWVycykuc29ydCgpKSxzPW5ldyB0LmRlZmF1bHQkMTEodGhpcy50aWxlSUQpO3MuYnVja2V0TGF5ZXJJRHM9W107dmFyIGwsYyx1LGY9e30saD17ZmVhdHVyZUluZGV4OnMsaWNvbkRlcGVuZGVuY2llczp7fSxnbHlwaERlcGVuZGVuY2llczp7fX0scD1yLmZhbWlsaWVzQnlTb3VyY2VbdGhpcy5zb3VyY2VdO2Zvcih2YXIgZCBpbiBwKXt2YXIgdj1lLmxheWVyc1tkXTtpZih2KXsxPT09di52ZXJzaW9uJiZ0Lndhcm5PbmNlKCdWZWN0b3IgdGlsZSBzb3VyY2UgIicrYS5zb3VyY2UrJyIgbGF5ZXIgIicrZCsnIiBkb2VzIG5vdCB1c2UgdmVjdG9yIHRpbGUgc3BlYyB2MiBhbmQgdGhlcmVmb3JlIG1heSBoYXZlIHNvbWUgcmVuZGVyaW5nIGVycm9ycy4nKTtmb3IodmFyIG09by5lbmNvZGUoZCkseT1bXSxiPTA7Yjx2Lmxlbmd0aDtiKyspe3ZhciB3PXYuZmVhdHVyZShiKTt5LnB1c2goe2ZlYXR1cmU6dyxpbmRleDpiLHNvdXJjZUxheWVySW5kZXg6bX0pfWZvcih2YXIgaz0wLFQ9cFtkXTtrPFQubGVuZ3RoO2srPTEpe3ZhciBBPVRba10sTT1BWzBdO00ubWluem9vbSYmYS56b29tPE1hdGguZmxvb3IoTS5taW56b29tKXx8TS5tYXh6b29tJiZhLnpvb20+PU0ubWF4em9vbXx8Im5vbmUiIT09TS52aXNpYmlsaXR5JiYoXyhBLGEuem9vbSksKGZbTS5pZF09TS5jcmVhdGVCdWNrZXQoe2luZGV4OnMuYnVja2V0TGF5ZXJJRHMubGVuZ3RoLGxheWVyczpBLHpvb206YS56b29tLHBpeGVsUmF0aW86YS5waXhlbFJhdGlvLG92ZXJzY2FsaW5nOmEub3ZlcnNjYWxpbmcsY29sbGlzaW9uQm94QXJyYXk6YS5jb2xsaXNpb25Cb3hBcnJheSxzb3VyY2VMYXllckluZGV4Om19KSkucG9wdWxhdGUoeSxoKSxzLmJ1Y2tldExheWVySURzLnB1c2goQS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkpfX19dmFyIFM9dC5tYXBPYmplY3QoaC5nbHlwaERlcGVuZGVuY2llcyxmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKE51bWJlcil9KTtPYmplY3Qua2V5cyhTKS5sZW5ndGg/bi5zZW5kKCJnZXRHbHlwaHMiLHt1aWQ6dGhpcy51aWQsc3RhY2tzOlN9LGZ1bmN0aW9uKHQsZSl7bHx8KGw9dCxjPWUsQy5jYWxsKGEpKX0pOmM9e307dmFyIEU9T2JqZWN0LmtleXMoaC5pY29uRGVwZW5kZW5jaWVzKTtmdW5jdGlvbiBDKCl7aWYobClyZXR1cm4gaShsKTtpZihjJiZ1KXt2YXIgZT1uZXcgeChjKSxyPW5ldyB0LmRlZmF1bHQkMjgodSk7Zm9yKHZhciBuIGluIGYpe3ZhciBhPWZbbl07YSBpbnN0YW5jZW9mIHQuZGVmYXVsdCQxNCYmKF8oYS5sYXllcnMsdGhpcy56b29tKSxnKGEsYyxlLnBvc2l0aW9ucyx1LHIucG9zaXRpb25zLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzKSl9dGhpcy5zdGF0dXM9ImRvbmUiLGkobnVsbCx7YnVja2V0czp0LnZhbHVlcyhmKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuaXNFbXB0eSgpfSksZmVhdHVyZUluZGV4OnMsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxnbHlwaEF0bGFzSW1hZ2U6ZS5pbWFnZSxpY29uQXRsYXNJbWFnZTpyLmltYWdlfSl9fUUubGVuZ3RoP24uc2VuZCgiZ2V0SW1hZ2VzIix7aWNvbnM6RX0sZnVuY3Rpb24odCxlKXtsfHwobD10LHU9ZSxDLmNhbGwoYSkpfSk6dT17fSxDLmNhbGwodGhpcyl9O3ZhciB3PWZ1bmN0aW9uKHQpe3JldHVybiEoIXBlcmZvcm1hbmNlfHwhcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSkmJnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUodCl9O2Z1bmN0aW9uIGsoZSxyKXt2YXIgbj10LmdldEFycmF5QnVmZmVyKGUucmVxdWVzdCxmdW5jdGlvbihlLG4pe2U/cihlKTpuJiZyKG51bGwse3ZlY3RvclRpbGU6bmV3IHQuZGVmYXVsdCQyOS5WZWN0b3JUaWxlKG5ldyB0LmRlZmF1bHQkMzAobi5kYXRhKSkscmF3RGF0YTpuLmRhdGEsY2FjaGVDb250cm9sOm4uY2FjaGVDb250cm9sLGV4cGlyZXM6bi5leHBpcmVzfSl9KTtyZXR1cm4gZnVuY3Rpb24oKXtuLmFib3J0KCkscigpfX12YXIgVD1mdW5jdGlvbih0LGUscil7dGhpcy5hY3Rvcj10LHRoaXMubGF5ZXJJbmRleD1lLHRoaXMubG9hZFZlY3RvckRhdGE9cnx8ayx0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319O1QucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPWUudWlkO3RoaXMubG9hZGluZ3x8KHRoaXMubG9hZGluZz17fSk7dmFyIGE9dGhpcy5sb2FkaW5nW2ldPW5ldyBiKGUpO2EuYWJvcnQ9dGhpcy5sb2FkVmVjdG9yRGF0YShlLGZ1bmN0aW9uKG8scyl7aWYoZGVsZXRlIG4ubG9hZGluZ1tpXSxvfHwhcylyZXR1cm4gcihvKTt2YXIgbD1zLnJhd0RhdGEsYz17fTtzLmV4cGlyZXMmJihjLmV4cGlyZXM9cy5leHBpcmVzKSxzLmNhY2hlQ29udHJvbCYmKGMuY2FjaGVDb250cm9sPXMuY2FjaGVDb250cm9sKTt2YXIgdT17fTtpZihlLnJlcXVlc3QmJmUucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpe3ZhciBmPXcoZS5yZXF1ZXN0LnVybCk7ZiYmKHUucmVzb3VyY2VUaW1pbmc9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmKSkpfWEudmVjdG9yVGlsZT1zLnZlY3RvclRpbGUsYS5wYXJzZShzLnZlY3RvclRpbGUsbi5sYXllckluZGV4LG4uYWN0b3IsZnVuY3Rpb24oZSxuKXtpZihlfHwhbilyZXR1cm4gcihlKTtyKG51bGwsdC5leHRlbmQoe3Jhd1RpbGVEYXRhOmwuc2xpY2UoMCl9LG4sYyx1KSl9KSxuLmxvYWRlZD1uLmxvYWRlZHx8e30sbi5sb2FkZWRbaV09YX0pfSxULnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2FkZWQsbj10LnVpZCxpPXRoaXM7aWYociYmcltuXSl7dmFyIGE9cltuXTthLnNob3dDb2xsaXNpb25Cb3hlcz10LnNob3dDb2xsaXNpb25Cb3hlczt2YXIgbz1mdW5jdGlvbih0LHIpe3ZhciBuPWEucmVsb2FkQ2FsbGJhY2s7biYmKGRlbGV0ZSBhLnJlbG9hZENhbGxiYWNrLGEucGFyc2UoYS52ZWN0b3JUaWxlLGkubGF5ZXJJbmRleCxpLmFjdG9yLG4pKSxlKHQscil9OyJwYXJzaW5nIj09PWEuc3RhdHVzP2EucmVsb2FkQ2FsbGJhY2s9bzoiZG9uZSI9PT1hLnN0YXR1cyYmYS5wYXJzZShhLnZlY3RvclRpbGUsdGhpcy5sYXllckluZGV4LHRoaXMuYWN0b3Isbyl9fSxULnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRpbmcsbj10LnVpZDtyJiZyW25dJiZyW25dLmFib3J0JiYocltuXS5hYm9ydCgpLGRlbGV0ZSByW25dKSxlKCl9LFQucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRlZCxuPXQudWlkO3ImJnJbbl0mJmRlbGV0ZSByW25dLGUoKX07dmFyIEE9ZnVuY3Rpb24oKXt0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319O0EucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ZS51aWQsaT1lLmVuY29kaW5nLGE9bmV3IHQuZGVmYXVsdCQzMShuKTt0aGlzLmxvYWRpbmdbbl09YSxhLmxvYWRGcm9tSW1hZ2UoZS5yYXdJbWFnZURhdGEsaSksZGVsZXRlIHRoaXMubG9hZGluZ1tuXSx0aGlzLmxvYWRlZD10aGlzLmxvYWRlZHx8e30sdGhpcy5sb2FkZWRbbl09YSxyKG51bGwsYSl9LEEucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2FkZWQscj10LnVpZDtlJiZlW3JdJiZkZWxldGUgZVtyXX07dmFyIE09e1JBRElVUzo2Mzc4MTM3LEZMQVRURU5JTkc6MS8yOTguMjU3MjIzNTYzLFBPTEFSX1JBRElVUzo2MzU2NzUyLjMxNDJ9O2Z1bmN0aW9uIFModCl7dmFyIGU9MDtpZih0JiZ0Lmxlbmd0aD4wKXtlKz1NYXRoLmFicyhFKHRbMF0pKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKyllLT1NYXRoLmFicyhFKHRbcl0pKX1yZXR1cm4gZX1mdW5jdGlvbiBFKHQpe3ZhciBlLHIsbixpLGEsbyxzPTAsbD10Lmxlbmd0aDtpZihsPjIpe2ZvcihvPTA7bzxsO28rKylvPT09bC0yPyhuPWwtMixpPWwtMSxhPTApOm89PT1sLTE/KG49bC0xLGk9MCxhPTEpOihuPW8saT1vKzEsYT1vKzIpLGU9dFtuXSxyPXRbaV0scys9KEModFthXVswXSktQyhlWzBdKSkqTWF0aC5zaW4oQyhyWzFdKSk7cz1zKk0uUkFESVVTKk0uUkFESVVTLzJ9cmV0dXJuIHN9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdCpNYXRoLlBJLzE4MH12YXIgTD17Z2VvbWV0cnk6ZnVuY3Rpb24gdChlKXt2YXIgcixuPTA7c3dpdGNoKGUudHlwZSl7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gUyhlLmNvb3JkaW5hdGVzKTtjYXNlIk11bHRpUG9seWdvbiI6Zm9yKHI9MDtyPGUuY29vcmRpbmF0ZXMubGVuZ3RoO3IrKyluKz1TKGUuY29vcmRpbmF0ZXNbcl0pO3JldHVybiBuO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIDA7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihyPTA7cjxlLmdlb21ldHJpZXMubGVuZ3RoO3IrKyluKz10KGUuZ2VvbWV0cmllc1tyXSk7cmV0dXJuIG59fSxyaW5nOkV9O2Z1bmN0aW9uIHoodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQocixlKX19ZnVuY3Rpb24gTyh0LGUpe2U9ISFlLHRbMF09SSh0WzBdLGUpO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKXRbcl09SSh0W3JdLCFlKTtyZXR1cm4gdH1mdW5jdGlvbiBJKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBMLnJpbmcodCk+PTB9KHQpPT09ZT90OnQucmV2ZXJzZSgpfXZhciBEPXQuZGVmYXVsdCQyOS5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUudG9HZW9KU09OLFA9ZnVuY3Rpb24oZSl7dGhpcy5fZmVhdHVyZT1lLHRoaXMuZXh0ZW50PXQuZGVmYXVsdCQ4LHRoaXMudHlwZT1lLnR5cGUsdGhpcy5wcm9wZXJ0aWVzPWUudGFncywiaWQiaW4gZSYmIWlzTmFOKGUuaWQpJiYodGhpcy5pZD1wYXJzZUludChlLmlkLDEwKSl9O1AucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe2lmKDE9PT10aGlzLl9mZWF0dXJlLnR5cGUpe2Zvcih2YXIgZT1bXSxyPTAsbj10aGlzLl9mZWF0dXJlLmdlb21ldHJ5O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtlLnB1c2goW25ldyB0LmRlZmF1bHQkMShpWzBdLGlbMV0pXSl9cmV0dXJuIGV9Zm9yKHZhciBhPVtdLG89MCxzPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7bzxzLmxlbmd0aDtvKz0xKXtmb3IodmFyIGw9W10sYz0wLHU9c1tvXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107bC5wdXNoKG5ldyB0LmRlZmF1bHQkMShmWzBdLGZbMV0pKX1hLnB1c2gobCl9cmV0dXJuIGF9LFAucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7cmV0dXJuIEQuY2FsbCh0aGlzLHQsZSxyKX07dmFyIFI9ZnVuY3Rpb24oZSl7dGhpcy5sYXllcnM9e19nZW9qc29uVGlsZUxheWVyOnRoaXN9LHRoaXMubmFtZT0iX2dlb2pzb25UaWxlTGF5ZXIiLHRoaXMuZXh0ZW50PXQuZGVmYXVsdCQ4LHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuX2ZlYXR1cmVzPWV9O1IucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQKHRoaXMuX2ZlYXR1cmVzW3RdKX07dmFyIEY9dC5fX21vZHVsZUV4cG9ydHMuVmVjdG9yVGlsZUZlYXR1cmUsQj1OO2Z1bmN0aW9uIE4odCxlKXt0aGlzLm9wdGlvbnM9ZXx8e30sdGhpcy5mZWF0dXJlcz10LHRoaXMubGVuZ3RoPXQubGVuZ3RofWZ1bmN0aW9uIGoodCxlKXt0aGlzLmlkPSJudW1iZXIiPT10eXBlb2YgdC5pZD90LmlkOnZvaWQgMCx0aGlzLnR5cGU9dC50eXBlLHRoaXMucmF3R2VvbWV0cnk9MT09PXQudHlwZT9bdC5nZW9tZXRyeV06dC5nZW9tZXRyeSx0aGlzLnByb3BlcnRpZXM9dC50YWdzLHRoaXMuZXh0ZW50PWV8fDQwOTZ9Ti5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGoodGhpcy5mZWF0dXJlc1t0XSx0aGlzLm9wdGlvbnMuZXh0ZW50KX0sai5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yYXdHZW9tZXRyeTt0aGlzLmdlb21ldHJ5PVtdO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXtmb3IodmFyIG49ZVtyXSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKylpLnB1c2gobmV3IHQuZGVmYXVsdCQzMihuW2FdWzBdLG5bYV1bMV0pKTt0aGlzLmdlb21ldHJ5LnB1c2goaSl9cmV0dXJuIHRoaXMuZ2VvbWV0cnl9LGoucHJvdG90eXBlLmJib3g9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5fHx0aGlzLmxvYWRHZW9tZXRyeSgpO2Zvcih2YXIgdD10aGlzLmdlb21ldHJ5LGU9MS8wLHI9LTEvMCxuPTEvMCxpPS0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKWZvcih2YXIgbz10W2FdLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtlPU1hdGgubWluKGUsbC54KSxyPU1hdGgubWF4KHIsbC54KSxuPU1hdGgubWluKG4sbC55KSxpPU1hdGgubWF4KGksbC55KX1yZXR1cm5bZSxuLHIsaV19LGoucHJvdG90eXBlLnRvR2VvSlNPTj1GLnByb3RvdHlwZS50b0dlb0pTT047dmFyIFY9SCxVPUgscT1CO2Z1bmN0aW9uIEgoZSl7dmFyIHI9bmV3IHQuX19tb2R1bGVFeHBvcnRzJDE7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQubGF5ZXJzKWUud3JpdGVNZXNzYWdlKDMsRyx0LmxheWVyc1tyXSl9KGUsciksci5maW5pc2goKX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI7ZS53cml0ZVZhcmludEZpZWxkKDE1LHQudmVyc2lvbnx8MSksZS53cml0ZVN0cmluZ0ZpZWxkKDEsdC5uYW1lfHwiIiksZS53cml0ZVZhcmludEZpZWxkKDUsdC5leHRlbnR8fDQwOTYpO3ZhciBuPXtrZXlzOltdLHZhbHVlczpbXSxrZXljYWNoZTp7fSx2YWx1ZWNhY2hlOnt9fTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKW4uZmVhdHVyZT10LmZlYXR1cmUociksZS53cml0ZU1lc3NhZ2UoMixZLG4pO3ZhciBpPW4ua2V5cztmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWUud3JpdGVTdHJpbmdGaWVsZCgzLGlbcl0pO3ZhciBhPW4udmFsdWVzO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspZS53cml0ZU1lc3NhZ2UoNCxKLGFbcl0pfWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10LmZlYXR1cmU7dm9pZCAwIT09ci5pZCYmZS53cml0ZVZhcmludEZpZWxkKDEsci5pZCksZS53cml0ZU1lc3NhZ2UoMixXLHQpLGUud3JpdGVWYXJpbnRGaWVsZCgzLHIudHlwZSksZS53cml0ZU1lc3NhZ2UoNCwkLHIpfWZ1bmN0aW9uIFcodCxlKXt2YXIgcj10LmZlYXR1cmUsbj10LmtleXMsaT10LnZhbHVlcyxhPXQua2V5Y2FjaGUsbz10LnZhbHVlY2FjaGU7Zm9yKHZhciBzIGluIHIucHJvcGVydGllcyl7dmFyIGw9YVtzXTt2b2lkIDA9PT1sJiYobi5wdXNoKHMpLGw9bi5sZW5ndGgtMSxhW3NdPWwpLGUud3JpdGVWYXJpbnQobCk7dmFyIGM9ci5wcm9wZXJ0aWVzW3NdLHU9dHlwZW9mIGM7InN0cmluZyIhPT11JiYiYm9vbGVhbiIhPT11JiYibnVtYmVyIiE9PXUmJihjPUpTT04uc3RyaW5naWZ5KGMpKTt2YXIgZj11KyI6IitjLGg9b1tmXTt2b2lkIDA9PT1oJiYoaS5wdXNoKGMpLGg9aS5sZW5ndGgtMSxvW2ZdPWgpLGUud3JpdGVWYXJpbnQoaCl9fWZ1bmN0aW9uIFgodCxlKXtyZXR1cm4oZTw8MykrKDcmdCl9ZnVuY3Rpb24gWih0KXtyZXR1cm4gdDw8MV50Pj4zMX1mdW5jdGlvbiAkKHQsZSl7Zm9yKHZhciByPXQubG9hZEdlb21ldHJ5KCksbj10LnR5cGUsaT0wLGE9MCxvPXIubGVuZ3RoLHM9MDtzPG87cysrKXt2YXIgbD1yW3NdLGM9MTsxPT09biYmKGM9bC5sZW5ndGgpLGUud3JpdGVWYXJpbnQoWCgxLGMpKTtmb3IodmFyIHU9Mz09PW4/bC5sZW5ndGgtMTpsLmxlbmd0aCxmPTA7Zjx1O2YrKyl7MT09PWYmJjEhPT1uJiZlLndyaXRlVmFyaW50KFgoMix1LTEpKTt2YXIgaD1sW2ZdLngtaSxwPWxbZl0ueS1hO2Uud3JpdGVWYXJpbnQoWihoKSksZS53cml0ZVZhcmludChaKHApKSxpKz1oLGErPXB9Mz09PW4mJmUud3JpdGVWYXJpbnQoWCg3LDApKX19ZnVuY3Rpb24gSih0LGUpe3ZhciByPXR5cGVvZiB0OyJzdHJpbmciPT09cj9lLndyaXRlU3RyaW5nRmllbGQoMSx0KToiYm9vbGVhbiI9PT1yP2Uud3JpdGVCb29sZWFuRmllbGQoNyx0KToibnVtYmVyIj09PXImJih0JTEhPTA/ZS53cml0ZURvdWJsZUZpZWxkKDMsdCk6dDwwP2Uud3JpdGVTVmFyaW50RmllbGQoNix0KTplLndyaXRlVmFyaW50RmllbGQoNSx0KSl9Vi5mcm9tVmVjdG9yVGlsZUpzPVUsVi5mcm9tR2VvanNvblZ0PWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj17fTtmb3IodmFyIG4gaW4gdClyW25dPW5ldyBCKHRbbl0uZmVhdHVyZXMsZSkscltuXS5uYW1lPW4scltuXS52ZXJzaW9uPWUudmVyc2lvbixyW25dLmV4dGVudD1lLmV4dGVudDtyZXR1cm4gSCh7bGF5ZXJzOnJ9KX0sVi5HZW9KU09OV3JhcHBlcj1xO3ZhciBLPWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8pe2lmKCEoYS1pPD1uKSl7dmFyIHM9TWF0aC5mbG9vcigoaSthKS8yKTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7Zm9yKDthPmk7KXtpZihhLWk+NjAwKXt2YXIgcz1hLWkrMSxsPW4taSsxLGM9TWF0aC5sb2cocyksdT0uNSpNYXRoLmV4cCgyKmMvMyksZj0uNSpNYXRoLnNxcnQoYyp1KihzLXUpL3MpKihsLXMvMjwwPy0xOjEpO3QoZSxyLG4sTWF0aC5tYXgoaSxNYXRoLmZsb29yKG4tbCp1L3MrZikpLE1hdGgubWluKGEsTWF0aC5mbG9vcihuKyhzLWwpKnUvcytmKSksbyl9dmFyIGg9clsyKm4rb10scD1pLGQ9YTtmb3IoUShlLHIsaSxuKSxyWzIqYStvXT5oJiZRKGUscixpLGEpO3A8ZDspe2ZvcihRKGUscixwLGQpLHArKyxkLS07clsyKnArb108aDspcCsrO2Zvcig7clsyKmQrb10+aDspZC0tfXJbMippK29dPT09aD9RKGUscixpLGQpOlEoZSxyLCsrZCxhKSxkPD1uJiYoaT1kKzEpLG48PWQmJihhPWQtMSl9fShlLHIscyxpLGEsbyUyKSx0KGUscixuLGkscy0xLG8rMSksdChlLHIsbixzKzEsYSxvKzEpfX07ZnVuY3Rpb24gUSh0LGUscixuKXt0dCh0LHIsbiksdHQoZSwyKnIsMipuKSx0dChlLDIqcisxLDIqbisxKX1mdW5jdGlvbiB0dCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIGV0KHQsZSxyLG4pe3ZhciBpPXQtcixhPWUtbjtyZXR1cm4gaSppK2EqYX12YXIgcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbmV3IG50KHQsZSxyLG4saSl9O2Z1bmN0aW9uIG50KHQsZSxyLG4saSl7ZT1lfHxpdCxyPXJ8fGF0LGk9aXx8QXJyYXksdGhpcy5ub2RlU2l6ZT1ufHw2NCx0aGlzLnBvaW50cz10LHRoaXMuaWRzPW5ldyBpKHQubGVuZ3RoKSx0aGlzLmNvb3Jkcz1uZXcgaSgyKnQubGVuZ3RoKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl0aGlzLmlkc1thXT1hLHRoaXMuY29vcmRzWzIqYV09ZSh0W2FdKSx0aGlzLmNvb3Jkc1syKmErMV09cih0W2FdKTtLKHRoaXMuaWRzLHRoaXMuY29vcmRzLHRoaXMubm9kZVNpemUsMCx0aGlzLmlkcy5sZW5ndGgtMSwwKX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gdFsxXX1udC5wcm90b3R5cGU9e3JhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPVswLHQubGVuZ3RoLTEsMF0sdT1bXTtjLmxlbmd0aDspe3ZhciBmPWMucG9wKCksaD1jLnBvcCgpLHA9Yy5wb3AoKTtpZihoLXA8PW8pZm9yKHZhciBkPXA7ZDw9aDtkKyspcz1lWzIqZF0sbD1lWzIqZCsxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtkXSk7ZWxzZXt2YXIgZz1NYXRoLmZsb29yKChwK2gpLzIpO3M9ZVsyKmddLGw9ZVsyKmcrMV0scz49ciYmczw9aSYmbD49biYmbDw9YSYmdS5wdXNoKHRbZ10pO3ZhciB2PShmKzEpJTI7KDA9PT1mP3I8PXM6bjw9bCkmJihjLnB1c2gocCksYy5wdXNoKGctMSksYy5wdXNoKHYpKSwoMD09PWY/aT49czphPj1sKSYmKGMucHVzaChnKzEpLGMucHVzaChoKSxjLnB1c2godikpfX1yZXR1cm4gdX0odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsbix0aGlzLm5vZGVTaXplKX0sd2l0aGluOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bMCx0Lmxlbmd0aC0xLDBdLHM9W10sbD1pKmk7by5sZW5ndGg7KXt2YXIgYz1vLnBvcCgpLHU9by5wb3AoKSxmPW8ucG9wKCk7aWYodS1mPD1hKWZvcih2YXIgaD1mO2g8PXU7aCsrKWV0KGVbMipoXSxlWzIqaCsxXSxyLG4pPD1sJiZzLnB1c2godFtoXSk7ZWxzZXt2YXIgcD1NYXRoLmZsb29yKChmK3UpLzIpLGQ9ZVsyKnBdLGc9ZVsyKnArMV07ZXQoZCxnLHIsbik8PWwmJnMucHVzaCh0W3BdKTt2YXIgdj0oYysxKSUyOygwPT09Yz9yLWk8PWQ6bi1pPD1nKSYmKG8ucHVzaChmKSxvLnB1c2gocC0xKSxvLnB1c2godikpLCgwPT09Yz9yK2k+PWQ6bitpPj1nKSYmKG8ucHVzaChwKzEpLG8ucHVzaCh1KSxvLnB1c2godikpfX1yZXR1cm4gc30odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsdGhpcy5ub2RlU2l6ZSl9fTtmdW5jdGlvbiBvdCh0KXt0aGlzLm9wdGlvbnM9cHQoT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLHQpLHRoaXMudHJlZXM9bmV3IEFycmF5KHRoaXMub3B0aW9ucy5tYXhab29tKzEpfWZ1bmN0aW9uIHN0KHQsZSxyLG4saSl7cmV0dXJue3g6dCx5OmUsem9vbToxLzAsaWQ6bixwcm9wZXJ0aWVzOmkscGFyZW50SWQ6LTEsbnVtUG9pbnRzOnJ9fWZ1bmN0aW9uIGx0KHQsZSl7dmFyIHI9dC5nZW9tZXRyeS5jb29yZGluYXRlcztyZXR1cm57eDpmdChyWzBdKSx5Omh0KHJbMV0pLHpvb206MS8wLGlkOmUscGFyZW50SWQ6LTF9fWZ1bmN0aW9uIGN0KHQpe3JldHVybnt0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnV0KHQpLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6WyhuPXQueCwzNjAqKG4tLjUpKSwoZT10Lnkscj0oMTgwLTM2MCplKSpNYXRoLlBJLzE4MCwzNjAqTWF0aC5hdGFuKE1hdGguZXhwKHIpKS9NYXRoLlBJLTkwKV19fTt2YXIgZSxyLG59ZnVuY3Rpb24gdXQodCl7dmFyIGU9dC5udW1Qb2ludHMscj1lPj0xZTQ/TWF0aC5yb3VuZChlLzFlMykrImsiOmU+PTFlMz9NYXRoLnJvdW5kKGUvMTAwKS8xMCsiayI6ZTtyZXR1cm4gcHQocHQoe30sdC5wcm9wZXJ0aWVzKSx7Y2x1c3RlcjohMCxjbHVzdGVyX2lkOnQuaWQscG9pbnRfY291bnQ6ZSxwb2ludF9jb3VudF9hYmJyZXZpYXRlZDpyfSl9ZnVuY3Rpb24gZnQodCl7cmV0dXJuIHQvMzYwKy41fWZ1bmN0aW9uIGh0KHQpe3ZhciBlPU1hdGguc2luKHQqTWF0aC5QSS8xODApLHI9LjUtLjI1Kk1hdGgubG9nKCgxK2UpLygxLWUpKS9NYXRoLlBJO3JldHVybiByPDA/MDpyPjE/MTpyfWZ1bmN0aW9uIHB0KHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fWZ1bmN0aW9uIGR0KHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIHQueX1mdW5jdGlvbiB2dCh0LGUscixuLGksYSl7dmFyIG89aS1yLHM9YS1uO2lmKDAhPT1vfHwwIT09cyl7dmFyIGw9KCh0LXIpKm8rKGUtbikqcykvKG8qbytzKnMpO2w+MT8ocj1pLG49YSk6bD4wJiYocis9bypsLG4rPXMqbCl9cmV0dXJuKG89dC1yKSpvKyhzPWUtbikqc31mdW5jdGlvbiBtdCh0LGUscixuKXt2YXIgaT17aWQ6dHx8bnVsbCx0eXBlOmUsZ2VvbWV0cnk6cix0YWdzOm4sbWluWDoxLzAsbWluWToxLzAsbWF4WDotMS8wLG1heFk6LTEvMH07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2VvbWV0cnkscj10LnR5cGU7aWYoIlBvaW50Ij09PXJ8fCJNdWx0aVBvaW50Ij09PXJ8fCJMaW5lU3RyaW5nIj09PXIpeXQodCxlKTtlbHNlIGlmKCJQb2x5Z29uIj09PXJ8fCJNdWx0aUxpbmVTdHJpbmciPT09cilmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl5dCh0LGVbbl0pO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1yKWZvcihuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPTA7aTxlW25dLmxlbmd0aDtpKyspeXQodCxlW25dW2ldKX0oaSksaX1mdW5jdGlvbiB5dCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cis9Myl0Lm1pblg9TWF0aC5taW4odC5taW5YLGVbcl0pLHQubWluWT1NYXRoLm1pbih0Lm1pblksZVtyKzFdKSx0Lm1heFg9TWF0aC5tYXgodC5tYXhYLGVbcl0pLHQubWF4WT1NYXRoLm1heCh0Lm1heFksZVtyKzFdKX1mdW5jdGlvbiB4dCh0LGUscil7aWYoZS5nZW9tZXRyeSl7dmFyIG49ZS5nZW9tZXRyeS5jb29yZGluYXRlcyxpPWUuZ2VvbWV0cnkudHlwZSxhPU1hdGgucG93KHIudG9sZXJhbmNlLygoMTw8ci5tYXhab29tKSpyLmV4dGVudCksMiksbz1bXTtpZigiUG9pbnQiPT09aSlidChuLG8pO2Vsc2UgaWYoIk11bHRpUG9pbnQiPT09aSlmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKylidChuW3NdLG8pO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09aSlfdChuLG8sYSwhMSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWkpaWYoci5saW5lTWV0cmljcylmb3Iocz0wO3M8bi5sZW5ndGg7cysrKXJldHVybiBvPVtdLF90KG5bc10sbyxhLCExKSx2b2lkIHQucHVzaChtdChlLmlkLCJMaW5lU3RyaW5nIixvLGUucHJvcGVydGllcykpO2Vsc2Ugd3QobixvLGEsITEpO2Vsc2UgaWYoIlBvbHlnb24iPT09aSl3dChuLG8sYSwhMCk7ZWxzZXtpZigiTXVsdGlQb2x5Z29uIiE9PWkpe2lmKCJHZW9tZXRyeUNvbGxlY3Rpb24iPT09aSl7Zm9yKHM9MDtzPGUuZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7cysrKXh0KHQse2lkOmUuaWQsZ2VvbWV0cnk6ZS5nZW9tZXRyeS5nZW9tZXRyaWVzW3NdLHByb3BlcnRpZXM6ZS5wcm9wZXJ0aWVzfSxyKTtyZXR1cm59dGhyb3cgbmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpfWZvcihzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBsPVtdO3d0KG5bc10sbCxhLCEwKSxvLnB1c2gobCl9fXQucHVzaChtdChlLmlkLGksbyxlLnByb3BlcnRpZXMpKX19ZnVuY3Rpb24gYnQodCxlKXtlLnB1c2goa3QodFswXSkpLGUucHVzaChUdCh0WzFdKSksZS5wdXNoKDApfWZ1bmN0aW9uIF90KHQsZSxyLG4pe2Zvcih2YXIgaSxhLG89MCxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPWt0KHRbc11bMF0pLGM9VHQodFtzXVsxXSk7ZS5wdXNoKGwpLGUucHVzaChjKSxlLnB1c2goMCkscz4wJiYobys9bj8oaSpjLWwqYSkvMjpNYXRoLnNxcnQoTWF0aC5wb3cobC1pLDIpK01hdGgucG93KGMtYSwyKSkpLGk9bCxhPWN9dmFyIHU9ZS5sZW5ndGgtMztlWzJdPTEsZnVuY3Rpb24gdChlLHIsbixpKXtmb3IodmFyIGEsbz1pLHM9ZVtyXSxsPWVbcisxXSxjPWVbbl0sdT1lW24rMV0sZj1yKzM7ZjxuO2YrPTMpe3ZhciBoPXZ0KGVbZl0sZVtmKzFdLHMsbCxjLHUpO2g+byYmKGE9ZixvPWgpfW8+aSYmKGEtcj4zJiZ0KGUscixhLGkpLGVbYSsyXT1vLG4tYT4zJiZ0KGUsYSxuLGkpKX0oZSwwLHUsciksZVt1KzJdPTEsZS5zaXplPU1hdGguYWJzKG8pLGUuc3RhcnQ9MCxlLmVuZD1lLnNpemV9ZnVuY3Rpb24gd3QodCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPVtdO190KHRbaV0sYSxyLG4pLGUucHVzaChhKX19ZnVuY3Rpb24ga3QodCl7cmV0dXJuIHQvMzYwKy41fWZ1bmN0aW9uIFR0KHQpe3ZhciBlPU1hdGguc2luKHQqTWF0aC5QSS8xODApLHI9LjUtLjI1Kk1hdGgubG9nKCgxK2UpLygxLWUpKS9NYXRoLlBJO3JldHVybiByPDA/MDpyPjE/MTpyfWZ1bmN0aW9uIEF0KHQsZSxyLG4saSxhLG8scyl7aWYobi89ZSxhPj0oci89ZSkmJm88PW4pcmV0dXJuIHQ7aWYoYT5ufHxvPHIpcmV0dXJuIG51bGw7Zm9yKHZhciBsPVtdLGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIHU9dFtjXSxmPXUuZ2VvbWV0cnksaD11LnR5cGUscD0wPT09aT91Lm1pblg6dS5taW5ZLGQ9MD09PWk/dS5tYXhYOnUubWF4WTtpZihwPj1yJiZkPD1uKWwucHVzaCh1KTtlbHNlIGlmKCEocD5ufHxkPHIpKXt2YXIgZz1bXTtpZigiUG9pbnQiPT09aHx8Ik11bHRpUG9pbnQiPT09aClNdChmLGcscixuLGkpO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09aClTdChmLGcscixuLGksITEscy5saW5lTWV0cmljcyk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWgpQ3QoZixnLHIsbixpLCExKTtlbHNlIGlmKCJQb2x5Z29uIj09PWgpQ3QoZixnLHIsbixpLCEwKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09aClmb3IodmFyIHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIG09W107Q3QoZlt2XSxtLHIsbixpLCEwKSxtLmxlbmd0aCYmZy5wdXNoKG0pfWlmKGcubGVuZ3RoKXtpZihzLmxpbmVNZXRyaWNzJiYiTGluZVN0cmluZyI9PT1oKXtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKWwucHVzaChtdCh1LmlkLGgsZ1t2XSx1LnRhZ3MpKTtjb250aW51ZX0iTGluZVN0cmluZyIhPT1oJiYiTXVsdGlMaW5lU3RyaW5nIiE9PWh8fCgxPT09Zy5sZW5ndGg/KGg9IkxpbmVTdHJpbmciLGc9Z1swXSk6aD0iTXVsdGlMaW5lU3RyaW5nIiksIlBvaW50IiE9PWgmJiJNdWx0aVBvaW50IiE9PWh8fChoPTM9PT1nLmxlbmd0aD8iUG9pbnQiOiJNdWx0aVBvaW50IiksbC5wdXNoKG10KHUuaWQsaCxnLHUudGFncykpfX19cmV0dXJuIGwubGVuZ3RoP2w6bnVsbH1mdW5jdGlvbiBNdCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSs9Myl7dmFyIG89dFthK2ldO28+PXImJm88PW4mJihlLnB1c2godFthXSksZS5wdXNoKHRbYSsxXSksZS5wdXNoKHRbYSsyXSkpfX1mdW5jdGlvbiBTdCh0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPUV0KHQpLHU9MD09PWk/enQ6T3QsZj10LnN0YXJ0LGg9MDtoPHQubGVuZ3RoLTM7aCs9Myl7dmFyIHA9dFtoXSxkPXRbaCsxXSxnPXRbaCsyXSx2PXRbaCszXSxtPXRbaCs0XSx5PTA9PT1pP3A6ZCx4PTA9PT1pP3Y6bSxiPSExO28mJihzPU1hdGguc3FydChNYXRoLnBvdyhwLXYsMikrTWF0aC5wb3coZC1tLDIpKSkseTxyP3g+PXImJihsPXUoYyxwLGQsdixtLHIpLG8mJihjLnN0YXJ0PWYrcypsKSk6eT5uP3g8PW4mJihsPXUoYyxwLGQsdixtLG4pLG8mJihjLnN0YXJ0PWYrcypsKSk6THQoYyxwLGQsZykseDxyJiZ5Pj1yJiYobD11KGMscCxkLHYsbSxyKSxiPSEwKSx4Pm4mJnk8PW4mJihsPXUoYyxwLGQsdixtLG4pLGI9ITApLCFhJiZiJiYobyYmKGMuZW5kPWYrcypsKSxlLnB1c2goYyksYz1FdCh0KSksbyYmKGYrPXMpfXZhciBfPXQubGVuZ3RoLTM7cD10W19dLGQ9dFtfKzFdLGc9dFtfKzJdLCh5PTA9PT1pP3A6ZCk+PXImJnk8PW4mJkx0KGMscCxkLGcpLF89Yy5sZW5ndGgtMyxhJiZfPj0zJiYoY1tfXSE9PWNbMF18fGNbXysxXSE9PWNbMV0pJiZMdChjLGNbMF0sY1sxXSxjWzJdKSxjLmxlbmd0aCYmZS5wdXNoKGMpfWZ1bmN0aW9uIEV0KHQpe3ZhciBlPVtdO3JldHVybiBlLnNpemU9dC5zaXplLGUuc3RhcnQ9dC5zdGFydCxlLmVuZD10LmVuZCxlfWZ1bmN0aW9uIEN0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKylTdCh0W29dLGUscixuLGksYSwhMSl9ZnVuY3Rpb24gTHQodCxlLHIsbil7dC5wdXNoKGUpLHQucHVzaChyKSx0LnB1c2gobil9ZnVuY3Rpb24genQodCxlLHIsbixpLGEpe3ZhciBvPShhLWUpLyhuLWUpO3JldHVybiB0LnB1c2goYSksdC5wdXNoKHIrKGktcikqbyksdC5wdXNoKDEpLG99ZnVuY3Rpb24gT3QodCxlLHIsbixpLGEpe3ZhciBvPShhLXIpLyhpLXIpO3JldHVybiB0LnB1c2goZSsobi1lKSpvKSx0LnB1c2goYSksdC5wdXNoKDEpLG99ZnVuY3Rpb24gSXQodCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaSxhPXRbbl0sbz1hLnR5cGU7aWYoIlBvaW50Ij09PW98fCJNdWx0aVBvaW50Ij09PW98fCJMaW5lU3RyaW5nIj09PW8paT1EdChhLmdlb21ldHJ5LGUpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1vfHwiUG9seWdvbiI9PT1vKXtpPVtdO2Zvcih2YXIgcz0wO3M8YS5nZW9tZXRyeS5sZW5ndGg7cysrKWkucHVzaChEdChhLmdlb21ldHJ5W3NdLGUpKX1lbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09bylmb3IoaT1bXSxzPTA7czxhLmdlb21ldHJ5Lmxlbmd0aDtzKyspe2Zvcih2YXIgbD1bXSxjPTA7YzxhLmdlb21ldHJ5W3NdLmxlbmd0aDtjKyspbC5wdXNoKER0KGEuZ2VvbWV0cnlbc11bY10sZSkpO2kucHVzaChsKX1yLnB1c2gobXQoYS5pZCxvLGksYS50YWdzKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gRHQodCxlKXt2YXIgcj1bXTtyLnNpemU9dC5zaXplLHZvaWQgMCE9PXQuc3RhcnQmJihyLnN0YXJ0PXQuc3RhcnQsci5lbmQ9dC5lbmQpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MylyLnB1c2godFtuXStlLHRbbisxXSx0W24rMl0pO3JldHVybiByfWZ1bmN0aW9uIFB0KHQsZSl7aWYodC50cmFuc2Zvcm1lZClyZXR1cm4gdDt2YXIgcixuLGksYT0xPDx0Lnosbz10Lngscz10Lnk7Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoO3IrKyl7dmFyIGw9dC5mZWF0dXJlc1tyXSxjPWwuZ2VvbWV0cnksdT1sLnR5cGU7aWYobC5nZW9tZXRyeT1bXSwxPT09dSlmb3Iobj0wO248Yy5sZW5ndGg7bis9MilsLmdlb21ldHJ5LnB1c2goUnQoY1tuXSxjW24rMV0sZSxhLG8scykpO2Vsc2UgZm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIGY9W107Zm9yKGk9MDtpPGNbbl0ubGVuZ3RoO2krPTIpZi5wdXNoKFJ0KGNbbl1baV0sY1tuXVtpKzFdLGUsYSxvLHMpKTtsLmdlb21ldHJ5LnB1c2goZil9fXJldHVybiB0LnRyYW5zZm9ybWVkPSEwLHR9ZnVuY3Rpb24gUnQodCxlLHIsbixpLGEpe3JldHVybltNYXRoLnJvdW5kKHIqKHQqbi1pKSksTWF0aC5yb3VuZChyKihlKm4tYSkpXX1mdW5jdGlvbiBGdCh0LGUscixuLGkpe2Zvcih2YXIgYT1lPT09aS5tYXhab29tPzA6aS50b2xlcmFuY2UvKCgxPDxlKSppLmV4dGVudCksbz17ZmVhdHVyZXM6W10sbnVtUG9pbnRzOjAsbnVtU2ltcGxpZmllZDowLG51bUZlYXR1cmVzOjAsc291cmNlOm51bGwseDpyLHk6bix6OmUsdHJhbnNmb3JtZWQ6ITEsbWluWDoyLG1pblk6MSxtYXhYOi0xLG1heFk6MH0scz0wO3M8dC5sZW5ndGg7cysrKXtvLm51bUZlYXR1cmVzKyssQnQobyx0W3NdLGEsaSk7dmFyIGw9dFtzXS5taW5YLGM9dFtzXS5taW5ZLHU9dFtzXS5tYXhYLGY9dFtzXS5tYXhZO2w8by5taW5YJiYoby5taW5YPWwpLGM8by5taW5ZJiYoby5taW5ZPWMpLHU+by5tYXhYJiYoby5tYXhYPXUpLGY+by5tYXhZJiYoby5tYXhZPWYpfXJldHVybiBvfWZ1bmN0aW9uIEJ0KHQsZSxyLG4pe3ZhciBpPWUuZ2VvbWV0cnksYT1lLnR5cGUsbz1bXTtpZigiUG9pbnQiPT09YXx8Ik11bHRpUG9pbnQiPT09YSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrPTMpby5wdXNoKGlbc10pLG8ucHVzaChpW3MrMV0pLHQubnVtUG9pbnRzKyssdC5udW1TaW1wbGlmaWVkKys7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1hKU50KG8saSx0LHIsITEsITEpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1hfHwiUG9seWdvbiI9PT1hKWZvcihzPTA7czxpLmxlbmd0aDtzKyspTnQobyxpW3NdLHQsciwiUG9seWdvbiI9PT1hLDA9PT1zKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09YSlmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtmb3Iocz0wO3M8Yy5sZW5ndGg7cysrKU50KG8sY1tzXSx0LHIsITAsMD09PXMpfWlmKG8ubGVuZ3RoKXt2YXIgdT1lLnRhZ3N8fG51bGw7aWYoIkxpbmVTdHJpbmciPT09YSYmbi5saW5lTWV0cmljcyl7Zm9yKHZhciBmIGluIHU9e30sZS50YWdzKXVbZl09ZS50YWdzW2ZdO3UubWFwYm94X2NsaXBfc3RhcnQ9aS5zdGFydC9pLnNpemUsdS5tYXBib3hfY2xpcF9lbmQ9aS5lbmQvaS5zaXplfXZhciBoPXtnZW9tZXRyeTpvLHR5cGU6IlBvbHlnb24iPT09YXx8Ik11bHRpUG9seWdvbiI9PT1hPzM6IkxpbmVTdHJpbmciPT09YXx8Ik11bHRpTGluZVN0cmluZyI9PT1hPzI6MSx0YWdzOnV9O251bGwhPT1lLmlkJiYoaC5pZD1lLmlkKSx0LmZlYXR1cmVzLnB1c2goaCl9fWZ1bmN0aW9uIE50KHQsZSxyLG4saSxhKXt2YXIgbz1uKm47aWYobj4wJiZlLnNpemU8KGk/bzpuKSlyLm51bVBvaW50cys9ZS5sZW5ndGgvMztlbHNle2Zvcih2YXIgcz1bXSxsPTA7bDxlLmxlbmd0aDtsKz0zKSgwPT09bnx8ZVtsKzJdPm8pJiYoci5udW1TaW1wbGlmaWVkKysscy5wdXNoKGVbbF0pLHMucHVzaChlW2wrMV0pKSxyLm51bVBvaW50cysrO2kmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGgsYT1pLTI7bjxpO2E9bixuKz0yKXIrPSh0W25dLXRbYV0pKih0W24rMV0rdFthKzFdKTtpZihyPjA9PT1lKWZvcihuPTAsaT10Lmxlbmd0aDtuPGkvMjtuKz0yKXt2YXIgbz10W25dLHM9dFtuKzFdO3Rbbl09dFtpLTItbl0sdFtuKzFdPXRbaS0xLW5dLHRbaS0yLW5dPW8sdFtpLTEtbl09c319KHMsYSksdC5wdXNoKHMpfX1mdW5jdGlvbiBqdCh0LGUpe3ZhciByPShlPXRoaXMub3B0aW9ucz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXTtyZXR1cm4gdH0oT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLGUpKS5kZWJ1ZztpZihyJiZjb25zb2xlLnRpbWUoInByZXByb2Nlc3MgZGF0YSIpLGUubWF4Wm9vbTwwfHxlLm1heFpvb20+MjQpdGhyb3cgbmV3IEVycm9yKCJtYXhab29tIHNob3VsZCBiZSBpbiB0aGUgMC0yNCByYW5nZSIpO3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107aWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PXQudHlwZSlmb3IodmFyIG49MDtuPHQuZmVhdHVyZXMubGVuZ3RoO24rKyl4dChyLHQuZmVhdHVyZXNbbl0sZSk7ZWxzZSJGZWF0dXJlIj09PXQudHlwZT94dChyLHQsZSk6eHQocix7Z2VvbWV0cnk6dH0sZSk7cmV0dXJuIHJ9KHQsZSk7dGhpcy50aWxlcz17fSx0aGlzLnRpbGVDb29yZHM9W10sciYmKGNvbnNvbGUudGltZUVuZCgicHJlcHJvY2VzcyBkYXRhIiksY29uc29sZS5sb2coImluZGV4OiBtYXhab29tOiAlZCwgbWF4UG9pbnRzOiAlZCIsZS5pbmRleE1heFpvb20sZS5pbmRleE1heFBvaW50cyksY29uc29sZS50aW1lKCJnZW5lcmF0ZSB0aWxlcyIpLHRoaXMuc3RhdHM9e30sdGhpcy50b3RhbD0wKSwobj1mdW5jdGlvbih0LGUpe3ZhciByPWUuYnVmZmVyL2UuZXh0ZW50LG49dCxpPUF0KHQsMSwtMS1yLHIsMCwtMSwyLGUpLGE9QXQodCwxLDEtciwyK3IsMCwtMSwyLGUpO3JldHVybihpfHxhKSYmKG49QXQodCwxLC1yLDErciwwLC0xLDIsZSl8fFtdLGkmJihuPUl0KGksMSkuY29uY2F0KG4pKSxhJiYobj1uLmNvbmNhdChJdChhLC0xKSkpKSxufShuLGUpKS5sZW5ndGgmJnRoaXMuc3BsaXRUaWxlKG4sMCwwLDApLHImJihuLmxlbmd0aCYmY29uc29sZS5sb2coImZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCIsdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcyx0aGlzLnRpbGVzWzBdLm51bVBvaW50cyksY29uc29sZS50aW1lRW5kKCJnZW5lcmF0ZSB0aWxlcyIpLGNvbnNvbGUubG9nKCJ0aWxlcyBnZW5lcmF0ZWQ6Iix0aGlzLnRvdGFsLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdHMpKSl9ZnVuY3Rpb24gVnQodCxlLHIpe3JldHVybiAzMiooKDE8PHQpKnIrZSkrdH1mdW5jdGlvbiBVdCh0LGUpe3ZhciByPXQudGlsZUlELmNhbm9uaWNhbDtpZighdGhpcy5fZ2VvSlNPTkluZGV4KXJldHVybiBlKG51bGwsbnVsbCk7dmFyIG49dGhpcy5fZ2VvSlNPTkluZGV4LmdldFRpbGUoci56LHIueCxyLnkpO2lmKCFuKXJldHVybiBlKG51bGwsbnVsbCk7dmFyIGk9bmV3IFIobi5mZWF0dXJlcyksYT1WKGkpOzA9PT1hLmJ5dGVPZmZzZXQmJmEuYnl0ZUxlbmd0aD09PWEuYnVmZmVyLmJ5dGVMZW5ndGh8fChhPW5ldyBVaW50OEFycmF5KGEpKSxlKG51bGwse3ZlY3RvclRpbGU6aSxyYXdEYXRhOmEuYnVmZmVyfSl9b3QucHJvdG90eXBlPXtvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxNixyYWRpdXM6NDAsZXh0ZW50OjUxMixub2RlU2l6ZTo2NCxsb2c6ITEscmVkdWNlOm51bGwsaW5pdGlhbDpmdW5jdGlvbigpe3JldHVybnt9fSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxsb2FkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucy5sb2c7ZSYmY29uc29sZS50aW1lKCJ0b3RhbCB0aW1lIik7dmFyIHI9InByZXBhcmUgIit0Lmxlbmd0aCsiIHBvaW50cyI7ZSYmY29uc29sZS50aW1lKHIpLHRoaXMucG9pbnRzPXQ7dmFyIG49dC5tYXAobHQpO2UmJmNvbnNvbGUudGltZUVuZChyKTtmb3IodmFyIGk9dGhpcy5vcHRpb25zLm1heFpvb207aT49dGhpcy5vcHRpb25zLm1pblpvb207aS0tKXt2YXIgYT0rRGF0ZS5ub3coKTt0aGlzLnRyZWVzW2krMV09cnQobixkdCxndCx0aGlzLm9wdGlvbnMubm9kZVNpemUsRmxvYXQzMkFycmF5KSxuPXRoaXMuX2NsdXN0ZXIobixpKSxlJiZjb25zb2xlLmxvZygieiVkOiAlZCBjbHVzdGVycyBpbiAlZG1zIixpLG4ubGVuZ3RoLCtEYXRlLm5vdygpLWEpfXJldHVybiB0aGlzLnRyZWVzW3RoaXMub3B0aW9ucy5taW5ab29tXT1ydChuLGR0LGd0LHRoaXMub3B0aW9ucy5ub2RlU2l6ZSxGbG9hdDMyQXJyYXkpLGUmJmNvbnNvbGUudGltZUVuZCgidG90YWwgdGltZSIpLHRoaXN9LGdldENsdXN0ZXJzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKGUpXSxuPXIucmFuZ2UoZnQodFswXSksaHQodFszXSksZnQodFsyXSksaHQodFsxXSkpLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1yLnBvaW50c1tuW2FdXTtpLnB1c2goby5udW1Qb2ludHM/Y3Qobyk6dGhpcy5wb2ludHNbby5pZF0pfXJldHVybiBpfSxnZXRDaGlsZHJlbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnRyZWVzW2UrMV0ucG9pbnRzW3RdLG49dGhpcy5vcHRpb25zLnJhZGl1cy8odGhpcy5vcHRpb25zLmV4dGVudCpNYXRoLnBvdygyLGUpKSxpPXRoaXMudHJlZXNbZSsxXS53aXRoaW4oci54LHIueSxuKSxhPVtdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9dGhpcy50cmVlc1tlKzFdLnBvaW50c1tpW29dXTtzLnBhcmVudElkPT09dCYmYS5wdXNoKHMubnVtUG9pbnRzP2N0KHMpOnRoaXMucG9pbnRzW3MuaWRdKX1yZXR1cm4gYX0sZ2V0TGVhdmVzOmZ1bmN0aW9uKHQsZSxyLG4pe3I9cnx8MTAsbj1ufHwwO3ZhciBpPVtdO3JldHVybiB0aGlzLl9hcHBlbmRMZWF2ZXMoaSx0LGUscixuLDApLGl9LGdldFRpbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKHQpXSxpPU1hdGgucG93KDIsdCksYT10aGlzLm9wdGlvbnMuZXh0ZW50LG89dGhpcy5vcHRpb25zLnJhZGl1cy9hLHM9KHItbykvaSxsPShyKzErbykvaSxjPXtmZWF0dXJlczpbXX07cmV0dXJuIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKChlLW8pL2kscywoZSsxK28pL2ksbCksbi5wb2ludHMsZSxyLGksYyksMD09PWUmJnRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKDEtby9pLHMsMSxsKSxuLnBvaW50cyxpLHIsaSxjKSxlPT09aS0xJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgwLHMsby9pLGwpLG4ucG9pbnRzLC0xLHIsaSxjKSxjLmZlYXR1cmVzLmxlbmd0aD9jOm51bGx9LGdldENsdXN0ZXJFeHBhbnNpb25ab29tOmZ1bmN0aW9uKHQsZSl7Zm9yKDtlPHRoaXMub3B0aW9ucy5tYXhab29tOyl7dmFyIHI9dGhpcy5nZXRDaGlsZHJlbih0LGUpO2lmKGUrKywxIT09ci5sZW5ndGgpYnJlYWs7dD1yWzBdLnByb3BlcnRpZXMuY2x1c3Rlcl9pZH1yZXR1cm4gZX0sX2FwcGVuZExlYXZlczpmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPXRoaXMuZ2V0Q2hpbGRyZW4oZSxyKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc10ucHJvcGVydGllcztpZihsLmNsdXN0ZXI/YStsLnBvaW50X2NvdW50PD1pP2ErPWwucG9pbnRfY291bnQ6YT10aGlzLl9hcHBlbmRMZWF2ZXModCxsLmNsdXN0ZXJfaWQscisxLG4saSxhKTphPGk/YSsrOnQucHVzaChvW3NdKSx0Lmxlbmd0aD09PW4pYnJlYWt9cmV0dXJuIGF9LF9hZGRUaWxlRmVhdHVyZXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz1lW3Rbb11dO2EuZmVhdHVyZXMucHVzaCh7dHlwZToxLGdlb21ldHJ5OltbTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihzLngqaS1yKSksTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihzLnkqaS1uKSldXSx0YWdzOnMubnVtUG9pbnRzP3V0KHMpOnRoaXMucG9pbnRzW3MuaWRdLnByb3BlcnRpZXN9KX19LF9saW1pdFpvb206ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy5taW5ab29tLE1hdGgubWluKHQsdGhpcy5vcHRpb25zLm1heFpvb20rMSkpfSxfY2x1c3RlcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMub3B0aW9ucy5yYWRpdXMvKHRoaXMub3B0aW9ucy5leHRlbnQqTWF0aC5wb3coMixlKSksaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO2lmKCEoYS56b29tPD1lKSl7YS56b29tPWU7dmFyIG89dGhpcy50cmVlc1tlKzFdLHM9by53aXRoaW4oYS54LGEueSxuKSxsPWEubnVtUG9pbnRzfHwxLGM9YS54KmwsdT1hLnkqbCxmPW51bGw7dGhpcy5vcHRpb25zLnJlZHVjZSYmKGY9dGhpcy5vcHRpb25zLmluaXRpYWwoKSx0aGlzLl9hY2N1bXVsYXRlKGYsYSkpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXt2YXIgcD1vLnBvaW50c1tzW2hdXTtpZihlPHAuem9vbSl7dmFyIGQ9cC5udW1Qb2ludHN8fDE7cC56b29tPWUsYys9cC54KmQsdSs9cC55KmQsbCs9ZCxwLnBhcmVudElkPWksdGhpcy5vcHRpb25zLnJlZHVjZSYmdGhpcy5fYWNjdW11bGF0ZShmLHApfX0xPT09bD9yLnB1c2goYSk6KGEucGFyZW50SWQ9aSxyLnB1c2goc3QoYy9sLHUvbCxsLGksZikpKX19cmV0dXJuIHJ9LF9hY2N1bXVsYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5udW1Qb2ludHM/ZS5wcm9wZXJ0aWVzOnRoaXMub3B0aW9ucy5tYXAodGhpcy5wb2ludHNbZS5pZF0ucHJvcGVydGllcyk7dGhpcy5vcHRpb25zLnJlZHVjZSh0LHIpfX0sanQucHJvdG90eXBlLm9wdGlvbnM9e21heFpvb206MTQsaW5kZXhNYXhab29tOjUsaW5kZXhNYXhQb2ludHM6MWU1LHRvbGVyYW5jZTozLGV4dGVudDo0MDk2LGJ1ZmZlcjo2NCxsaW5lTWV0cmljczohMSxkZWJ1ZzowfSxqdC5wcm90b3R5cGUuc3BsaXRUaWxlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz1bdCxlLHIsbl0sbD10aGlzLm9wdGlvbnMsYz1sLmRlYnVnO3MubGVuZ3RoOyl7bj1zLnBvcCgpLHI9cy5wb3AoKSxlPXMucG9wKCksdD1zLnBvcCgpO3ZhciB1PTE8PGUsZj1WdChlLHIsbiksaD10aGlzLnRpbGVzW2ZdO2lmKCFoJiYoYz4xJiZjb25zb2xlLnRpbWUoImNyZWF0aW9uIiksaD10aGlzLnRpbGVzW2ZdPUZ0KHQsZSxyLG4sbCksdGhpcy50aWxlQ29vcmRzLnB1c2goe3o6ZSx4OnIseTpufSksYykpe2M+MSYmKGNvbnNvbGUubG9nKCJ0aWxlIHolZC0lZC0lZCAoZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkLCBzaW1wbGlmaWVkOiAlZCkiLGUscixuLGgubnVtRmVhdHVyZXMsaC5udW1Qb2ludHMsaC5udW1TaW1wbGlmaWVkKSxjb25zb2xlLnRpbWVFbmQoImNyZWF0aW9uIikpO3ZhciBwPSJ6IitlO3RoaXMuc3RhdHNbcF09KHRoaXMuc3RhdHNbcF18fDApKzEsdGhpcy50b3RhbCsrfWlmKGguc291cmNlPXQsaSl7aWYoZT09PWwubWF4Wm9vbXx8ZT09PWkpY29udGludWU7dmFyIGQ9MTw8aS1lO2lmKHIhPT1NYXRoLmZsb29yKGEvZCl8fG4hPT1NYXRoLmZsb29yKG8vZCkpY29udGludWV9ZWxzZSBpZihlPT09bC5pbmRleE1heFpvb218fGgubnVtUG9pbnRzPD1sLmluZGV4TWF4UG9pbnRzKWNvbnRpbnVlO2lmKGguc291cmNlPW51bGwsMCE9PXQubGVuZ3RoKXtjPjEmJmNvbnNvbGUudGltZSgiY2xpcHBpbmciKTt2YXIgZyx2LG0seSx4LGIsXz0uNSpsLmJ1ZmZlci9sLmV4dGVudCx3PS41LV8saz0uNStfLFQ9MStfO2c9dj1tPXk9bnVsbCx4PUF0KHQsdSxyLV8scitrLDAsaC5taW5YLGgubWF4WCxsKSxiPUF0KHQsdSxyK3cscitULDAsaC5taW5YLGgubWF4WCxsKSx0PW51bGwseCYmKGc9QXQoeCx1LG4tXyxuK2ssMSxoLm1pblksaC5tYXhZLGwpLHY9QXQoeCx1LG4rdyxuK1QsMSxoLm1pblksaC5tYXhZLGwpLHg9bnVsbCksYiYmKG09QXQoYix1LG4tXyxuK2ssMSxoLm1pblksaC5tYXhZLGwpLHk9QXQoYix1LG4rdyxuK1QsMSxoLm1pblksaC5tYXhZLGwpLGI9bnVsbCksYz4xJiZjb25zb2xlLnRpbWVFbmQoImNsaXBwaW5nIikscy5wdXNoKGd8fFtdLGUrMSwyKnIsMipuKSxzLnB1c2godnx8W10sZSsxLDIqciwyKm4rMSkscy5wdXNoKG18fFtdLGUrMSwyKnIrMSwyKm4pLHMucHVzaCh5fHxbXSxlKzEsMipyKzEsMipuKzEpfX19LGp0LnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm9wdGlvbnMsaT1uLmV4dGVudCxhPW4uZGVidWc7aWYodDwwfHx0PjI0KXJldHVybiBudWxsO3ZhciBvPTE8PHQscz1WdCh0LGU9KGUlbytvKSVvLHIpO2lmKHRoaXMudGlsZXNbc10pcmV0dXJuIFB0KHRoaXMudGlsZXNbc10saSk7YT4xJiZjb25zb2xlLmxvZygiZHJpbGxpbmcgZG93biB0byB6JWQtJWQtJWQiLHQsZSxyKTtmb3IodmFyIGwsYz10LHU9ZSxmPXI7IWwmJmM+MDspYy0tLHU9TWF0aC5mbG9vcih1LzIpLGY9TWF0aC5mbG9vcihmLzIpLGw9dGhpcy50aWxlc1tWdChjLHUsZildO3JldHVybiBsJiZsLnNvdXJjZT8oYT4xJiZjb25zb2xlLmxvZygiZm91bmQgcGFyZW50IHRpbGUgeiVkLSVkLSVkIixjLHUsZiksYT4xJiZjb25zb2xlLnRpbWUoImRyaWxsaW5nIGRvd24iKSx0aGlzLnNwbGl0VGlsZShsLnNvdXJjZSxjLHUsZix0LGUsciksYT4xJiZjb25zb2xlLnRpbWVFbmQoImRyaWxsaW5nIGRvd24iKSx0aGlzLnRpbGVzW3NdP1B0KHRoaXMudGlsZXNbc10saSk6bnVsbCk6bnVsbH07dmFyIHF0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4pe2UuY2FsbCh0aGlzLHQscixVdCksbiYmKHRoaXMubG9hZEdlb0pTT049bil9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWREYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksdGhpcy5fcGVuZGluZ0NhbGxiYWNrPWUsdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zPXQsdGhpcy5fc3RhdGUmJiJJZGxlIiE9PXRoaXMuX3N0YXRlP3RoaXMuX3N0YXRlPSJOZWVkc0xvYWREYXRhIjoodGhpcy5fc3RhdGU9IkNvYWxlc2NpbmciLHRoaXMuX2xvYWREYXRhKCkpfSxyLnByb3RvdHlwZS5fbG9hZERhdGE9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zKXt2YXIgZT10aGlzLl9wZW5kaW5nQ2FsbGJhY2sscj10aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7ZGVsZXRlIHRoaXMuX3BlbmRpbmdDYWxsYmFjayxkZWxldGUgdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zLHRoaXMubG9hZEdlb0pTT04ocixmdW5jdGlvbihuLGkpe2lmKG58fCFpKXJldHVybiBlKG4pO2lmKCJvYmplY3QiIT10eXBlb2YgaSlyZXR1cm4gZShuZXcgRXJyb3IoIklucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpOyFmdW5jdGlvbiB0KGUscil7c3dpdGNoKGUmJmUudHlwZXx8bnVsbCl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6cmV0dXJuIGUuZmVhdHVyZXM9ZS5mZWF0dXJlcy5tYXAoeih0LHIpKSxlO2Nhc2UiRmVhdHVyZSI6cmV0dXJuIGUuZ2VvbWV0cnk9dChlLmdlb21ldHJ5LHIpLGU7Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIlBvbHlnb24iPT09dC50eXBlP3QuY29vcmRpbmF0ZXM9Tyh0LmNvb3JkaW5hdGVzLGUpOiJNdWx0aVBvbHlnb24iPT09dC50eXBlJiYodC5jb29yZGluYXRlcz10LmNvb3JkaW5hdGVzLm1hcCh6KE8sZSkpKSx0fShlLHIpO2RlZmF1bHQ6cmV0dXJuIGV9fShpLCEwKTt0cnl7dC5fZ2VvSlNPTkluZGV4PXIuY2x1c3Rlcj9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG90KHQpfShyLnN1cGVyY2x1c3Rlck9wdGlvbnMpLmxvYWQoaS5mZWF0dXJlcyk6bmV3IGp0KGksci5nZW9qc29uVnRPcHRpb25zKX1jYXRjaChuKXtyZXR1cm4gZShuKX10LmxvYWRlZD17fTt2YXIgYT17fTtpZihyLnJlcXVlc3QmJnIucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpe3ZhciBvPXcoci5yZXF1ZXN0LnVybCk7byYmKGEucmVzb3VyY2VUaW1pbmc9e30sYS5yZXNvdXJjZVRpbWluZ1tyLnNvdXJjZV09SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvKSkpfWUobnVsbCxhKX0pfX0sci5wcm90b3R5cGUuY29hbGVzY2U9ZnVuY3Rpb24oKXsiQ29hbGVzY2luZyI9PT10aGlzLl9zdGF0ZT90aGlzLl9zdGF0ZT0iSWRsZSI6Ik5lZWRzTG9hZERhdGEiPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT0iQ29hbGVzY2luZyIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmxvYWRlZCxpPXQudWlkO3JldHVybiBuJiZuW2ldP2UucHJvdG90eXBlLnJlbG9hZFRpbGUuY2FsbCh0aGlzLHQscik6dGhpcy5sb2FkVGlsZSh0LHIpfSxyLnByb3RvdHlwZS5sb2FkR2VvSlNPTj1mdW5jdGlvbihlLHIpe2lmKGUucmVxdWVzdCl0LmdldEpTT04oZS5yZXF1ZXN0LHIpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlLmRhdGEpcmV0dXJuIHIobmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKTt0cnl7cmV0dXJuIHIobnVsbCxKU09OLnBhcnNlKGUuZGF0YSkpfWNhdGNoKHQpe3JldHVybiByKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSl9fX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksZSgpfSxyfShUKSxIdD1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuc2VsZj1lLHRoaXMuYWN0b3I9bmV3IHQuZGVmYXVsdCQ3KGUsdGhpcyksdGhpcy5sYXllckluZGV4ZXM9e30sdGhpcy53b3JrZXJTb3VyY2VUeXBlcz17dmVjdG9yOlQsZ2VvanNvbjpxdH0sdGhpcy53b3JrZXJTb3VyY2VzPXt9LHRoaXMuZGVtV29ya2VyU291cmNlcz17fSx0aGlzLnNlbGYucmVnaXN0ZXJXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlKXtpZihyLndvcmtlclNvdXJjZVR5cGVzW3RdKXRocm93IG5ldyBFcnJvcignV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgIicrdCsnIiBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7ci53b3JrZXJTb3VyY2VUeXBlc1t0XT1lfSx0aGlzLnNlbGYucmVnaXN0ZXJSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKGUpe2lmKHQucGx1Z2luLmlzTG9hZGVkKCkpdGhyb3cgbmV3IEVycm9yKCJSVEwgdGV4dCBwbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkLiIpO3QucGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZz1lLmFwcGx5QXJhYmljU2hhcGluZyx0LnBsdWdpbi5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ9ZS5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHR9fTtyZXR1cm4gSHQucHJvdG90eXBlLnNldExheWVycz1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRMYXllckluZGV4KHQpLnJlcGxhY2UoZSkscigpfSxIdC5wcm90b3R5cGUudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkudXBkYXRlKGUubGF5ZXJzLGUucmVtb3ZlZElkcykscigpfSxIdC5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5sb2FkVGlsZShlLHIpfSxIdC5wcm90b3R5cGUubG9hZERFTVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LEh0LnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVsb2FkVGlsZShlLHIpfSxIdC5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkuYWJvcnRUaWxlKGUscil9LEh0LnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVtb3ZlVGlsZShlLHIpfSxIdC5wcm90b3R5cGUucmVtb3ZlREVNVGlsZT1mdW5jdGlvbih0LGUpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLnJlbW92ZVRpbGUoZSl9LEh0LnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMud29ya2VyU291cmNlc1t0XSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV0mJnRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSl7dmFyIG49dGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdO2RlbGV0ZSB0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV0sdm9pZCAwIT09bi5yZW1vdmVTb3VyY2U/bi5yZW1vdmVTb3VyY2UoZSxyKTpyKCl9fSxIdC5wcm90b3R5cGUubG9hZFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dHJ5e3RoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKGUudXJsKSxyKCl9Y2F0Y2godCl7cih0LnRvU3RyaW5nKCkpfX0sSHQucHJvdG90eXBlLmxvYWRSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKGUscixuKXt0cnl7dC5wbHVnaW4uaXNMb2FkZWQoKXx8KHRoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHIpLG4odC5wbHVnaW4uaXNMb2FkZWQoKT9udWxsOm5ldyBFcnJvcigiUlRMIFRleHQgUGx1Z2luIGZhaWxlZCB0byBpbXBvcnQgc2NyaXB0cyBmcm9tICIrcikpKX1jYXRjaCh0KXtuKHQudG9TdHJpbmcoKSl9fSxIdC5wcm90b3R5cGUuZ2V0TGF5ZXJJbmRleD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheWVySW5kZXhlc1t0XTtyZXR1cm4gZXx8KGU9dGhpcy5sYXllckluZGV4ZXNbdF09bmV3IG4pLGV9LEh0LnByb3RvdHlwZS5nZXRXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXM7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdfHwodGhpcy53b3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLndvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLndvcmtlclNvdXJjZXNbdF1bZV09e30pLCF0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl0pe3ZhciBpPXtzZW5kOmZ1bmN0aW9uKGUscixpKXtuLmFjdG9yLnNlbmQoZSxyLGksdCl9fTt0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl09bmV3IHRoaXMud29ya2VyU291cmNlVHlwZXNbZV0oaSx0aGlzLmdldExheWVySW5kZXgodCkpfXJldHVybiB0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl19LEh0LnByb3RvdHlwZS5nZXRERU1Xb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdfHwodGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV09bmV3IEEpLHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXX0sInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJm5ldyBIdChzZWxmKSxIdH0pLGkoMCxmdW5jdGlvbih0KXt2YXIgZT10LmNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7cmV0dXJuISEoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJkFycmF5LnByb3RvdHlwZSYmQXJyYXkucHJvdG90eXBlLmV2ZXJ5JiZBcnJheS5wcm90b3R5cGUuZmlsdGVyJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaCYmQXJyYXkucHJvdG90eXBlLmluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLm1hcCYmQXJyYXkucHJvdG90eXBlLnNvbWUmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2UmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCYmQXJyYXkuaXNBcnJheSYmRnVuY3Rpb24ucHJvdG90eXBlJiZGdW5jdGlvbi5wcm90b3R5cGUuYmluZCYmT2JqZWN0LmtleXMmJk9iamVjdC5jcmVhdGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZiYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJk9iamVjdC5pc1NlYWxlZCYmT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNFeHRlbnNpYmxlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJiZPYmplY3Quc2VhbCYmT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zJiYiSlNPTiJpbiB3aW5kb3cmJiJwYXJzZSJpbiBKU09OJiYic3RyaW5naWZ5ImluIEpTT04mJmZ1bmN0aW9uKCl7aWYoISgiV29ya2VyImluIHdpbmRvdyYmIkJsb2IiaW4gd2luZG93JiYiVVJMImluIHdpbmRvdykpcmV0dXJuITE7dmFyIHQsZSxyPW5ldyBCbG9iKFsiIl0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSxuPVVSTC5jcmVhdGVPYmplY3RVUkwocik7dHJ5e2U9bmV3IFdvcmtlcihuKSx0PSEwfWNhdGNoKGUpe3Q9ITF9cmV0dXJuIGUmJmUudGVybWluYXRlKCksVVJMLnJldm9rZU9iamVjdFVSTChuKSx0fSgpJiYiVWludDhDbGFtcGVkQXJyYXkiaW4gd2luZG93JiZmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09clt0XSYmKHJbdF09ZnVuY3Rpb24odCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbj1PYmplY3QuY3JlYXRlKGUud2ViR0xDb250ZXh0QXR0cmlidXRlcyk7cmV0dXJuIG4uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD10LHIucHJvYmFibHlTdXBwb3J0c0NvbnRleHQ/ci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCgid2ViZ2wiLG4pfHxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pOnIuc3VwcG9ydHNDb250ZXh0P3Iuc3VwcG9ydHNDb250ZXh0KCJ3ZWJnbCIsbil8fHIuc3VwcG9ydHNDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pOnIuZ2V0Q29udGV4dCgid2ViZ2wiLG4pfHxyLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsbil9KHQpKSxyW3RdfSh0JiZ0LmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpKX10LmV4cG9ydHM/dC5leHBvcnRzPWU6d2luZG93JiYod2luZG93Lm1hcGJveGdsPXdpbmRvdy5tYXBib3hnbHx8e30sd2luZG93Lm1hcGJveGdsLnN1cHBvcnRlZD1lKTt2YXIgcj17fTtlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXM9e2FudGlhbGlhczohMSxhbHBoYTohMCxzdGVuY2lsOiEwLGRlcHRoOiEwfX0pLHI9dC5kZWZhdWx0LnBlcmZvcm1hbmNlJiZ0LmRlZmF1bHQucGVyZm9ybWFuY2Uubm93P3QuZGVmYXVsdC5wZXJmb3JtYW5jZS5ub3cuYmluZCh0LmRlZmF1bHQucGVyZm9ybWFuY2UpOkRhdGUubm93LmJpbmQoRGF0ZSksbj10LmRlZmF1bHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsaT10LmRlZmF1bHQuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tb3pDYW5jZWxBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQubXNDYW5jZWxBbmltYXRpb25GcmFtZSxhPXtub3c6cixmcmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0sY2FuY2VsRnJhbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCl9LGdldEltYWdlRGF0YTpmdW5jdGlvbihlKXt2YXIgcj10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbj1yLmdldENvbnRleHQoIjJkIik7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJmYWlsZWQgdG8gY3JlYXRlIGNhbnZhcyAyZCBjb250ZXh0Iik7cmV0dXJuIHIud2lkdGg9ZS53aWR0aCxyLmhlaWdodD1lLmhlaWdodCxuLmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSxuLmdldEltYWdlRGF0YSgwLDAsZS53aWR0aCxlLmhlaWdodCl9LGhhcmR3YXJlQ29uY3VycmVuY3k6dC5kZWZhdWx0Lm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5fHw0LGdldCBkZXZpY2VQaXhlbFJhdGlvKCl7cmV0dXJuIHQuZGVmYXVsdC5kZXZpY2VQaXhlbFJhdGlvfSxzdXBwb3J0c1dlYnA6ITF9O2lmKHQuZGVmYXVsdC5kb2N1bWVudCl7dmFyIG89dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO28ub25sb2FkPWZ1bmN0aW9uKCl7YS5zdXBwb3J0c1dlYnA9ITB9LG8uc3JjPSJkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdSaDRBQUFCWFJVSlFWbEE0VEJFQUFBQXZBUUFBQUFmUS8vNzN2LytCaU9oL0FBQT0ifXZhciBzPXtjcmVhdGU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiByJiYoaS5jbGFzc05hbWU9ciksbiYmbi5hcHBlbmRDaGlsZChpKSxpfSxjcmVhdGVOUzpmdW5jdGlvbihlLHIpe3JldHVybiB0LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUscil9fSxsPXQuZGVmYXVsdC5kb2N1bWVudD90LmRlZmF1bHQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlOm51bGw7ZnVuY3Rpb24gYyh0KXtpZighbClyZXR1cm4gbnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdaW4gbClyZXR1cm4gdFtlXTtyZXR1cm4gdFswXX12YXIgdSxmPWMoWyJ1c2VyU2VsZWN0IiwiTW96VXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJtc1VzZXJTZWxlY3QiXSk7cy5kaXNhYmxlRHJhZz1mdW5jdGlvbigpe2wmJmYmJih1PWxbZl0sbFtmXT0ibm9uZSIpfSxzLmVuYWJsZURyYWc9ZnVuY3Rpb24oKXtsJiZmJiYobFtmXT11KX07dmFyIGg9YyhbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSJdKTtzLnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbaF09ZX07dmFyIHA9ITE7dHJ5e3ZhciBkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3A9ITB9fSk7dC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGQsZCksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLGQsZCl9Y2F0Y2godCl7cD0hMX1zLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49e30pLCJwYXNzaXZlImluIG4mJnA/dC5hZGRFdmVudExpc3RlbmVyKGUscixuKTp0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLG4uY2FwdHVyZSl9LHMucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksInBhc3NpdmUiaW4gbiYmcD90LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLG4pOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsbi5jYXB0dXJlKX07dmFyIGc9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixnLCEwKX07cy5zdXBwcmVzc0NsaWNrPWZ1bmN0aW9uKCl7dC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixnLCEwKSx0LmRlZmF1bHQuc2V0VGltZW91dChmdW5jdGlvbigpe3QuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsZywhMCl9LDApfSxzLm1vdXNlUG9zPWZ1bmN0aW9uKGUscil7dmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gcj1yLnRvdWNoZXM/ci50b3VjaGVzWzBdOnIsbmV3IHQuZGVmYXVsdCQxKHIuY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCl9LHMudG91Y2hQb3M9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPVtdLGE9InRvdWNoZW5kIj09PXIudHlwZT9yLmNoYW5nZWRUb3VjaGVzOnIudG91Y2hlcyxvPTA7bzxhLmxlbmd0aDtvKyspaS5wdXNoKG5ldyB0LmRlZmF1bHQkMShhW29dLmNsaWVudFgtbi5sZWZ0LWUuY2xpZW50TGVmdCxhW29dLmNsaWVudFktbi50b3AtZS5jbGllbnRUb3ApKTtyZXR1cm4gaX0scy5tb3VzZUJ1dHRvbj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dC5kZWZhdWx0Lkluc3RhbGxUcmlnZ2VyJiYyPT09ZS5idXR0b24mJmUuY3RybEtleSYmdC5kZWZhdWx0Lm5hdmlnYXRvci5wbGF0Zm9ybS50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIk1BQyIpPj0wPzA6ZS5idXR0b259LHMucmVtb3ZlPWZ1bmN0aW9uKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfTt2YXIgdj17QVBJX1VSTDoiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIsUkVRVUlSRV9BQ0NFU1NfVE9LRU46ITAsQUNDRVNTX1RPS0VOOm51bGx9LG09IlNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zIjtmdW5jdGlvbiB5KHQsZSl7dmFyIHI9QSh2LkFQSV9VUkwpO2lmKHQucHJvdG9jb2w9ci5wcm90b2NvbCx0LmF1dGhvcml0eT1yLmF1dGhvcml0eSwiLyIhPT1yLnBhdGgmJih0LnBhdGg9IiIrci5wYXRoK3QucGF0aCksIXYuUkVRVUlSRV9BQ0NFU1NfVE9LRU4pcmV0dXJuIE0odCk7aWYoIShlPWV8fHYuQUNDRVNTX1RPS0VOKSl0aHJvdyBuZXcgRXJyb3IoIkFuIEFQSSBhY2Nlc3MgdG9rZW4gaXMgcmVxdWlyZWQgdG8gdXNlIE1hcGJveCBHTC4gIittKTtpZigicyI9PT1lWzBdKXRocm93IG5ldyBFcnJvcigiVXNlIGEgcHVibGljIGFjY2VzcyB0b2tlbiAocGsuKikgd2l0aCBNYXBib3ggR0wsIG5vdCBhIHNlY3JldCBhY2Nlc3MgdG9rZW4gKHNrLiopLiAiK20pO3JldHVybiB0LnBhcmFtcy5wdXNoKCJhY2Nlc3NfdG9rZW49IitlKSxNKHQpfWZ1bmN0aW9uIHgodCl7cmV0dXJuIDA9PT10LmluZGV4T2YoIm1hcGJveDoiKX12YXIgYj1mdW5jdGlvbih0LGUpe2lmKCF4KHQpKXJldHVybiB0O3ZhciByPUEodCk7cmV0dXJuIHIucGF0aD0iL3Y0LyIrci5hdXRob3JpdHkrIi5qc29uIixyLnBhcmFtcy5wdXNoKCJzZWN1cmUiKSx5KHIsZSl9LF89ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9QSh0KTtyZXR1cm4geCh0KT8oaS5wYXRoPSIvc3R5bGVzL3YxIitpLnBhdGgrIi9zcHJpdGUiK2Urcix5KGksbikpOihpLnBhdGgrPSIiK2UrcixNKGkpKX0sdz0vKFwuKHBuZ3xqcGcpXGQqKSg/PSQpLyxrPWZ1bmN0aW9uKHQsZSxyKXtpZighZXx8IXgoZSkpcmV0dXJuIHQ7dmFyIG49QSh0KSxpPWEuZGV2aWNlUGl4ZWxSYXRpbz49Mnx8NTEyPT09cj8iQDJ4IjoiIixvPWEuc3VwcG9ydHNXZWJwPyIud2VicCI6IiQxIjtyZXR1cm4gbi5wYXRoPW4ucGF0aC5yZXBsYWNlKHcsIiIraStvKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKykwPT09dFtlXS5pbmRleE9mKCJhY2Nlc3NfdG9rZW49dGsuIikmJih0W2VdPSJhY2Nlc3NfdG9rZW49Iisodi5BQ0NFU1NfVE9LRU58fCIiKSl9KG4ucGFyYW1zKSxNKG4pfSxUPS9eKFx3Kyk6XC9cLyhbXlwvP10qKShcL1teP10rKT9cPz8oLispPy87ZnVuY3Rpb24gQSh0KXt2YXIgZT10Lm1hdGNoKFQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHBhcnNlIFVSTCBvYmplY3QiKTtyZXR1cm57cHJvdG9jb2w6ZVsxXSxhdXRob3JpdHk6ZVsyXSxwYXRoOmVbM118fCIvIixwYXJhbXM6ZVs0XT9lWzRdLnNwbGl0KCImIik6W119fWZ1bmN0aW9uIE0odCl7dmFyIGU9dC5wYXJhbXMubGVuZ3RoPyI/Iit0LnBhcmFtcy5qb2luKCImIik6IiI7cmV0dXJuIHQucHJvdG9jb2wrIjovLyIrdC5hdXRob3JpdHkrdC5wYXRoK2V9dmFyIFM9dC5kZWZhdWx0LkhUTUxJbWFnZUVsZW1lbnQsRT10LmRlZmF1bHQuSFRNTENhbnZhc0VsZW1lbnQsQz10LmRlZmF1bHQuSFRNTFZpZGVvRWxlbWVudCxMPXQuZGVmYXVsdC5JbWFnZURhdGEsej1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNvbnRleHQ9dCx0aGlzLmZvcm1hdD1yLHRoaXMudGV4dHVyZT10LmdsLmNyZWF0ZVRleHR1cmUoKSx0aGlzLnVwZGF0ZShlLG4pfTt6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT0hdGhpcy5zaXplfHx0aGlzLnNpemVbMF0hPT1yfHx0aGlzLnNpemVbMV0hPT1uLGE9dGhpcy5jb250ZXh0LG89YS5nbDt0aGlzLnVzZU1pcG1hcD1Cb29sZWFuKGUmJmUudXNlTWlwbWFwKSxvLmJpbmRUZXh0dXJlKG8uVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGk/KHRoaXMuc2l6ZT1bcixuXSxhLnBpeGVsU3RvcmVVbnBhY2suc2V0KDEpLHRoaXMuZm9ybWF0IT09by5SR0JBfHxlJiYhMT09PWUucHJlbXVsdGlwbHl8fGEucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KCEwKSx0IGluc3RhbmNlb2YgU3x8dCBpbnN0YW5jZW9mIEV8fHQgaW5zdGFuY2VvZiBDfHx0IGluc3RhbmNlb2YgTD9vLnRleEltYWdlMkQoby5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsby5VTlNJR05FRF9CWVRFLHQpOm8udGV4SW1hZ2UyRChvLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCxyLG4sMCx0aGlzLmZvcm1hdCxvLlVOU0lHTkVEX0JZVEUsdC5kYXRhKSk6dCBpbnN0YW5jZW9mIFN8fHQgaW5zdGFuY2VvZiBFfHx0IGluc3RhbmNlb2YgQ3x8dCBpbnN0YW5jZW9mIEw/by50ZXhTdWJJbWFnZTJEKG8uVEVYVFVSRV8yRCwwLDAsMCxvLlJHQkEsby5VTlNJR05FRF9CWVRFLHQpOm8udGV4U3ViSW1hZ2UyRChvLlRFWFRVUkVfMkQsMCwwLDAscixuLG8uUkdCQSxvLlVOU0lHTkVEX0JZVEUsdC5kYXRhKSx0aGlzLnVzZU1pcG1hcCYmdGhpcy5pc1NpemVQb3dlck9mVHdvKCkmJm8uZ2VuZXJhdGVNaXBtYXAoby5URVhUVVJFXzJEKX0sei5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5jb250ZXh0LmdsO24uYmluZFRleHR1cmUobi5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksciE9PW4uTElORUFSX01JUE1BUF9ORUFSRVNUfHx0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKXx8KHI9bi5MSU5FQVIpLHQhPT10aGlzLmZpbHRlciYmKG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsdCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixyfHx0KSx0aGlzLmZpbHRlcj10KSxlIT09dGhpcy53cmFwJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLGUpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxlKSx0aGlzLndyYXA9ZSl9LHoucHJvdG90eXBlLmlzU2l6ZVBvd2VyT2ZUd289ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplWzBdPT09dGhpcy5zaXplWzFdJiZNYXRoLmxvZyh0aGlzLnNpemVbMF0pL01hdGguTE4yJTE9PTB9LHoucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpLHRoaXMudGV4dHVyZT1udWxsfTt2YXIgTz1mdW5jdGlvbigpe3RoaXMuaW1hZ2VzPXt9LHRoaXMubG9hZGVkPSExLHRoaXMucmVxdWVzdG9ycz1bXSx0aGlzLnNoZWxmUGFjaz1uZXcgdC5kZWZhdWx0JDIoNjQsNjQse2F1dG9SZXNpemU6ITB9KSx0aGlzLnBhdHRlcm5zPXt9LHRoaXMuYXRsYXNJbWFnZT1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOjY0LGhlaWdodDo2NH0pLHRoaXMuZGlydHk9ITB9O08ucHJvdG90eXBlLmlzTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGVkfSxPLnByb3RvdHlwZS5zZXRMb2FkZWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5sb2FkZWQhPT10JiYodGhpcy5sb2FkZWQ9dCx0KSl7Zm9yKHZhciBlPTAscj10aGlzLnJlcXVlc3RvcnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9bi5pZHMsYT1uLmNhbGxiYWNrO3RoaXMuX25vdGlmeShpLGEpfXRoaXMucmVxdWVzdG9ycz1bXX19LE8ucHJvdG90eXBlLmdldEltYWdlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltYWdlc1t0XX0sTy5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLmltYWdlc1t0XT1lfSxPLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5pbWFnZXNbdF07dmFyIGU9dGhpcy5wYXR0ZXJuc1t0XTtlJiYodGhpcy5zaGVsZlBhY2sudW5yZWYoZS5iaW4pLGRlbGV0ZSB0aGlzLnBhdHRlcm5zW3RdKX0sTy5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ITA7aWYoIXRoaXMuaXNMb2FkZWQoKSlmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuaW1hZ2VzW2FdfHwocj0hMSl9dGhpcy5pc0xvYWRlZCgpfHxyP3RoaXMuX25vdGlmeSh0LGUpOnRoaXMucmVxdWVzdG9ycy5wdXNoKHtpZHM6dCxjYWxsYmFjazplfSl9LE8ucHJvdG90eXBlLl9ub3RpZnk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz10aGlzLmltYWdlc1thXTtvJiYoclthXT17ZGF0YTpvLmRhdGEuY2xvbmUoKSxwaXhlbFJhdGlvOm8ucGl4ZWxSYXRpbyxzZGY6by5zZGZ9KX1lKG51bGwscil9LE8ucHJvdG90eXBlLmdldFBpeGVsU2l6ZT1mdW5jdGlvbigpe3JldHVybnt3aWR0aDp0aGlzLnNoZWxmUGFjay53LGhlaWdodDp0aGlzLnNoZWxmUGFjay5ofX0sTy5wcm90b3R5cGUuZ2V0UGF0dGVybj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBhdHRlcm5zW2VdO2lmKHIpcmV0dXJuIHIucG9zaXRpb247dmFyIG49dGhpcy5nZXRJbWFnZShlKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1uLmRhdGEud2lkdGgrMixhPW4uZGF0YS5oZWlnaHQrMixvPXRoaXMuc2hlbGZQYWNrLnBhY2tPbmUoaSxhKTtpZighbylyZXR1cm4gbnVsbDt0aGlzLmF0bGFzSW1hZ2UucmVzaXplKHRoaXMuZ2V0UGl4ZWxTaXplKCkpO3ZhciBzPW4uZGF0YSxsPXRoaXMuYXRsYXNJbWFnZSxjPW8ueCsxLHU9by55KzEsZj1zLndpZHRoLGg9cy5oZWlnaHQ7dC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OjB9LHt4OmMseTp1fSx7d2lkdGg6ZixoZWlnaHQ6aH0pLHQuUkdCQUltYWdlLmNvcHkocyxsLHt4OjAseTpoLTF9LHt4OmMseTp1LTF9LHt3aWR0aDpmLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OjB9LHt4OmMseTp1K2h9LHt3aWR0aDpmLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6Zi0xLHk6MH0se3g6Yy0xLHk6dX0se3dpZHRoOjEsaGVpZ2h0Omh9KSx0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDowLHk6MH0se3g6YytmLHk6dX0se3dpZHRoOjEsaGVpZ2h0Omh9KSx0aGlzLmRpcnR5PSEwO3ZhciBwPW5ldyB0LkltYWdlUG9zaXRpb24obyxuKTtyZXR1cm4gdGhpcy5wYXR0ZXJuc1tlXT17YmluOm8scG9zaXRpb246cH0scH0sTy5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmdsO3RoaXMuYXRsYXNUZXh0dXJlP3RoaXMuZGlydHkmJih0aGlzLmF0bGFzVGV4dHVyZS51cGRhdGUodGhpcy5hdGxhc0ltYWdlKSx0aGlzLmRpcnR5PSExKTp0aGlzLmF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuYXRsYXNJbWFnZSxlLlJHQkEpLHRoaXMuYXRsYXNUZXh0dXJlLmJpbmQoZS5MSU5FQVIsZS5DTEFNUF9UT19FREdFKX07dmFyIEk9UCxEPTFlMjA7ZnVuY3Rpb24gUCh0LGUscixuLGksYSl7dGhpcy5mb250U2l6ZT10fHwyNCx0aGlzLmJ1ZmZlcj12b2lkIDA9PT1lPzM6ZSx0aGlzLmN1dG9mZj1ufHwuMjUsdGhpcy5mb250RmFtaWx5PWl8fCJzYW5zLXNlcmlmIix0aGlzLmZvbnRXZWlnaHQ9YXx8Im5vcm1hbCIsdGhpcy5yYWRpdXM9cnx8ODt2YXIgbz10aGlzLnNpemU9dGhpcy5mb250U2l6ZSsyKnRoaXMuYnVmZmVyO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD1vLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5jdHguZm9udD10aGlzLmZvbnRXZWlnaHQrIiAiK3RoaXMuZm9udFNpemUrInB4ICIrdGhpcy5mb250RmFtaWx5LHRoaXMuY3R4LnRleHRCYXNlbGluZT0ibWlkZGxlIix0aGlzLmN0eC5maWxsU3R5bGU9ImJsYWNrIix0aGlzLmdyaWRPdXRlcj1uZXcgRmxvYXQ2NEFycmF5KG8qbyksdGhpcy5ncmlkSW5uZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZj1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuZD1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuej1uZXcgRmxvYXQ2NEFycmF5KG8rMSksdGhpcy52PW5ldyBJbnQxNkFycmF5KG8pLHRoaXMubWlkZGxlPU1hdGgucm91bmQoby8yKihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkdlY2tvLyIpPj0wPzEuMjoxKSl9ZnVuY3Rpb24gUih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MDtzPGU7cysrKXtmb3IodmFyIGw9MDtsPHI7bCsrKW5bbF09dFtsKmUrc107Zm9yKEYobixpLGEsbyxyKSxsPTA7bDxyO2wrKyl0W2wqZStzXT1pW2xdfWZvcihsPTA7bDxyO2wrKyl7Zm9yKHM9MDtzPGU7cysrKW5bc109dFtsKmUrc107Zm9yKEYobixpLGEsbyxlKSxzPTA7czxlO3MrKyl0W2wqZStzXT1NYXRoLnNxcnQoaVtzXSl9fWZ1bmN0aW9uIEYodCxlLHIsbixpKXtyWzBdPTAsblswXT0tRCxuWzFdPStEO2Zvcih2YXIgYT0xLG89MDthPGk7YSsrKXtmb3IodmFyIHM9KHRbYV0rYSphLSh0W3Jbb11dK3Jbb10qcltvXSkpLygyKmEtMipyW29dKTtzPD1uW29dOylvLS0scz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3JbKytvXT1hLG5bb109cyxuW28rMV09K0R9Zm9yKGE9MCxvPTA7YTxpO2ErKyl7Zm9yKDtuW28rMV08YTspbysrO2VbYV09KGEtcltvXSkqKGEtcltvXSkrdFtyW29dXX19UC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRoaXMuc2l6ZSp0aGlzLnNpemUpLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgaT1lLmRhdGFbNCpuKzNdLzI1NTt0aGlzLmdyaWRPdXRlcltuXT0xPT09aT8wOjA9PT1pP0Q6TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1pKSwyKSx0aGlzLmdyaWRJbm5lcltuXT0xPT09aT9EOjA9PT1pPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxpLS41KSwyKX1mb3IoUih0aGlzLmdyaWRPdXRlcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksUih0aGlzLmdyaWRJbm5lcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspe3ZhciBhPXRoaXMuZ3JpZE91dGVyW25dLXRoaXMuZ3JpZElubmVyW25dO3Jbbl09TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNTUtMjU1KihhL3RoaXMucmFkaXVzK3RoaXMuY3V0b2ZmKSkpKX1yZXR1cm4gcn07dmFyIEI9ZnVuY3Rpb24odCxlKXt0aGlzLnJlcXVlc3RUcmFuc2Zvcm09dCx0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLHRoaXMuZW50cmllcz17fX07Qi5wcm90b3R5cGUuc2V0VVJMPWZ1bmN0aW9uKHQpe3RoaXMudXJsPXR9LEIucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1bXTtmb3IodmFyIGEgaW4gZSlmb3IodmFyIG89MCxzPWVbYV07bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO2kucHVzaCh7c3RhY2s6YSxpZDpsfSl9dC5hc3luY0FsbChpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFjayxpPXQuaWQsYT1uLmVudHJpZXNbcl07YXx8KGE9bi5lbnRyaWVzW3JdPXtnbHlwaHM6e30scmVxdWVzdHM6e319KTt2YXIgbz1hLmdseXBoc1tpXTtpZih2b2lkIDA9PT1vKWlmKG89bi5fdGlueVNERihhLHIsaSkpZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pO2Vsc2V7dmFyIHM9TWF0aC5mbG9vcihpLzI1Nik7aWYoMjU2KnM+NjU1MzUpZShuZXcgRXJyb3IoImdseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWQiKSk7ZWxzZXt2YXIgbD1hLnJlcXVlc3RzW3NdO2x8fChsPWEucmVxdWVzdHNbc109W10sQi5sb2FkR2x5cGhSYW5nZShyLHMsbi51cmwsbi5yZXF1ZXN0VHJhbnNmb3JtLGZ1bmN0aW9uKHQsZSl7aWYoZSlmb3IodmFyIHIgaW4gZSlhLmdseXBoc1srcl09ZVsrcl07Zm9yKHZhciBuPTAsaT1sO248aS5sZW5ndGg7bis9MSkoMCxpW25dKSh0LGUpO2RlbGV0ZSBhLnJlcXVlc3RzW3NdfSkpLGwucHVzaChmdW5jdGlvbih0LG4pe3Q/ZSh0KTpuJiZlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpuW2ldfHxudWxsfSl9KX19ZWxzZSBlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSl9LGZ1bmN0aW9uKHQsZSl7aWYodClyKHQpO2Vsc2UgaWYoZSl7Zm9yKHZhciBuPXt9LGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9by5zdGFjayxsPW8uaWQsYz1vLmdseXBoOyhuW3NdfHwobltzXT17fSkpW2xdPWMmJntpZDpjLmlkLGJpdG1hcDpjLmJpdG1hcC5jbG9uZSgpLG1ldHJpY3M6Yy5tZXRyaWNzfX1yKG51bGwsbil9fSl9LEIucHJvdG90eXBlLl90aW55U0RGPWZ1bmN0aW9uKGUscixuKXt2YXIgaT10aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtpZihpJiYodC5kZWZhdWx0JDRbIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiXShuKXx8dC5kZWZhdWx0JDRbIkhhbmd1bCBTeWxsYWJsZXMiXShuKSkpe3ZhciBhPWUudGlueVNERjtpZighYSl7dmFyIG89IjQwMCI7L2JvbGQvaS50ZXN0KHIpP289IjkwMCI6L21lZGl1bS9pLnRlc3Qocik/bz0iNTAwIjovbGlnaHQvaS50ZXN0KHIpJiYobz0iMjAwIiksYT1lLnRpbnlTREY9bmV3IEIuVGlueVNERigyNCwzLDgsLjI1LGksbyl9cmV0dXJue2lkOm4sYml0bWFwOm5ldyB0LkFscGhhSW1hZ2Uoe3dpZHRoOjMwLGhlaWdodDozMH0sYS5kcmF3KFN0cmluZy5mcm9tQ2hhckNvZGUobikpKSxtZXRyaWNzOnt3aWR0aDoyNCxoZWlnaHQ6MjQsbGVmdDowLHRvcDotOCxhZHZhbmNlOjI0fX19fSxCLmxvYWRHbHlwaFJhbmdlPWZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG89MjU2KnIscz1vKzI1NSxsPWkoZnVuY3Rpb24odCxlKXtpZigheCh0KSlyZXR1cm4gdDt2YXIgcj1BKHQpO3JldHVybiByLnBhdGg9Ii9mb250cy92MSIrci5wYXRoLHkocixlKX0obikucmVwbGFjZSgie2ZvbnRzdGFja30iLGUpLnJlcGxhY2UoIntyYW5nZX0iLG8rIi0iK3MpLHQuUmVzb3VyY2VUeXBlLkdseXBocyk7dC5nZXRBcnJheUJ1ZmZlcihsLGZ1bmN0aW9uKGUscil7aWYoZSlhKGUpO2Vsc2UgaWYocil7Zm9yKHZhciBuPXt9LGk9MCxvPXQuZGVmYXVsdCQzKHIuZGF0YSk7aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldO25bcy5pZF09c31hKG51bGwsbil9fSl9LEIuVGlueVNERj1JO3ZhciBOPWZ1bmN0aW9uKCl7dGhpcy5zcGVjaWZpY2F0aW9uPXQuZGVmYXVsdCQ1LmxpZ2h0LnBvc2l0aW9ufTtOLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc3BoZXJpY2FsVG9DYXJ0ZXNpYW4oZS5leHByZXNzaW9uLmV2YWx1YXRlKHIpKX0sTi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybnt4OnQubnVtYmVyKGUueCxyLngsbikseTp0Lm51bWJlcihlLnksci55LG4pLHo6dC5udW1iZXIoZS56LHIueixuKX19O3ZhciBqPW5ldyB0LlByb3BlcnRpZXMoe2FuY2hvcjpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LmRlZmF1bHQkNS5saWdodC5hbmNob3IpLHBvc2l0aW9uOm5ldyBOLGNvbG9yOm5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuZGVmYXVsdCQ1LmxpZ2h0LmNvbG9yKSxpbnRlbnNpdHk6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5kZWZhdWx0JDUubGlnaHQuaW50ZW5zaXR5KX0pLFY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5fdHJhbnNpdGlvbmFibGU9bmV3IHQuVHJhbnNpdGlvbmFibGUoaiksdGhpcy5zZXRMaWdodChyKSx0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNlcmlhbGl6ZSgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlKXtpZighdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZUxpZ2h0LGUpKWZvcih2YXIgciBpbiBlKXt2YXIgbj1lW3JdO3QuZW5kc1dpdGgociwiLXRyYW5zaXRpb24iKT90aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRUcmFuc2l0aW9uKHIuc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpLG4pOnRoaXMuX3RyYW5zaXRpb25hYmxlLnNldFZhbHVlKHIsbil9fSxyLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmcpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmcuaGFzVHJhbnNpdGlvbigpfSxyLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnRpZXM9dGhpcy5fdHJhbnNpdGlvbmluZy5wb3NzaWJseUV2YWx1YXRlKHQpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5lbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe3ZhbHVlOnIsc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9LHN0eWxlU3BlYzp0LmRlZmF1bHQkNX0pKSl9LHJ9KHQuRXZlbnRlZCksVT1mdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMubmV4dFJvdz0wLHRoaXMuYnl0ZXM9NCx0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy53aWR0aCp0aGlzLmhlaWdodCp0aGlzLmJ5dGVzKSx0aGlzLnBvc2l0aW9ucz17fX07VS5wcm90b3R5cGUuZ2V0RGFzaD1mdW5jdGlvbih0LGUpe3ZhciByPXQuam9pbigiLCIpK1N0cmluZyhlKTtyZXR1cm4gdGhpcy5wb3NpdGlvbnNbcl18fCh0aGlzLnBvc2l0aW9uc1tyXT10aGlzLmFkZERhc2godCxlKSksdGhpcy5wb3NpdGlvbnNbcl19LFUucHJvdG90eXBlLmFkZERhc2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yPzc6MCxpPTIqbisxO2lmKHRoaXMubmV4dFJvdytpPnRoaXMuaGVpZ2h0KXJldHVybiB0Lndhcm5PbmNlKCJMaW5lQXRsYXMgb3V0IG9mIHNwYWNlIiksbnVsbDtmb3IodmFyIGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspYSs9ZVtvXTtmb3IodmFyIHM9dGhpcy53aWR0aC9hLGw9cy8yLGM9ZS5sZW5ndGglMj09MSx1PS1uO3U8PW47dSsrKWZvcih2YXIgZj10aGlzLm5leHRSb3crbit1LGg9dGhpcy53aWR0aCpmLHA9Yz8tZVtlLmxlbmd0aC0xXTowLGQ9ZVswXSxnPTEsdj0wO3Y8dGhpcy53aWR0aDt2Kyspe2Zvcig7ZDx2L3M7KXA9ZCxkKz1lW2ddLGMmJmc9PT1lLmxlbmd0aC0xJiYoZCs9ZVswXSksZysrO3ZhciBtPU1hdGguYWJzKHYtcCpzKSx5PU1hdGguYWJzKHYtZCpzKSx4PU1hdGgubWluKG0seSksYj1nJTI9PTEsXz12b2lkIDA7aWYocil7dmFyIHc9bj91L24qKGwrMSk6MDtpZihiKXt2YXIgaz1sLU1hdGguYWJzKHcpO189TWF0aC5zcXJ0KHgqeCtrKmspfWVsc2UgXz1sLU1hdGguc3FydCh4Kngrdyp3KX1lbHNlIF89KGI/MTotMSkqeDt0aGlzLmRhdGFbMys0KihoK3YpXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxfKzEyOCkpfXZhciBUPXt5Oih0aGlzLm5leHRSb3crbisuNSkvdGhpcy5oZWlnaHQsaGVpZ2h0OjIqbi90aGlzLmhlaWdodCx3aWR0aDphfTtyZXR1cm4gdGhpcy5uZXh0Um93Kz1pLHRoaXMuZGlydHk9ITAsVH0sVS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmdsO3RoaXMudGV4dHVyZT8oZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSxlLnRleFN1YkltYWdlMkQoZS5URVhUVVJFXzJELDAsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKSk6KHRoaXMudGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfUyxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9ULGUuUkVQRUFUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTElORUFSKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTElORUFSKSxlLnRleEltYWdlMkQoZS5URVhUVVJFXzJELDAsZS5SR0JBLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpfTt2YXIgcT1mdW5jdGlvbiBlKHIsbil7dGhpcy53b3JrZXJQb29sPXIsdGhpcy5hY3RvcnM9W10sdGhpcy5jdXJyZW50QWN0b3I9MCx0aGlzLmlkPXQudW5pcXVlSWQoKTtmb3IodmFyIGk9dGhpcy53b3JrZXJQb29sLmFjcXVpcmUodGhpcy5pZCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bmV3IGUuQWN0b3IobyxuLHRoaXMuaWQpO3MubmFtZT0iV29ya2VyICIrYSx0aGlzLmFjdG9ycy5wdXNoKHMpfX07ZnVuY3Rpb24gSChlLHIsbil7dmFyIGk9ZnVuY3Rpb24oZSxyKXtpZihlKXJldHVybiBuKGUpO2lmKHIpe3ZhciBpPXQucGljayhyLFsidGlsZXMiLCJtaW56b29tIiwibWF4em9vbSIsImF0dHJpYnV0aW9uIiwibWFwYm94X2xvZ28iLCJib3VuZHMiXSk7ci52ZWN0b3JfbGF5ZXJzJiYoaS52ZWN0b3JMYXllcnM9ci52ZWN0b3JfbGF5ZXJzLGkudmVjdG9yTGF5ZXJJZHM9aS52ZWN0b3JMYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLG4obnVsbCxpKX19O2UudXJsP3QuZ2V0SlNPTihyKGIoZS51cmwpLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSksaSk6YS5mcmFtZShmdW5jdGlvbigpe3JldHVybiBpKG51bGwsZSl9KX1xLnByb3RvdHlwZS5icm9hZGNhc3Q9ZnVuY3Rpb24oZSxyLG4pe249bnx8ZnVuY3Rpb24oKXt9LHQuYXN5bmNBbGwodGhpcy5hY3RvcnMsZnVuY3Rpb24odCxuKXt0LnNlbmQoZSxyLG4pfSxuKX0scS5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4oIm51bWJlciIhPXR5cGVvZiBufHxpc05hTihuKSkmJihuPXRoaXMuY3VycmVudEFjdG9yPSh0aGlzLmN1cnJlbnRBY3RvcisxKSV0aGlzLmFjdG9ycy5sZW5ndGgpLHRoaXMuYWN0b3JzW25dLnNlbmQodCxlLHIpLG59LHEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuYWN0b3JzLmZvckVhY2goZnVuY3Rpb24odCl7dC5yZW1vdmUoKX0pLHRoaXMuYWN0b3JzPVtdLHRoaXMud29ya2VyUG9vbC5yZWxlYXNlKHRoaXMuaWQpfSxxLkFjdG9yPXQuZGVmYXVsdCQ3O3ZhciBHPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgb2JqZWN0OiAoIit0KyIsICIrZSsiKSIpO2lmKHRoaXMubG5nPSt0LHRoaXMubGF0PStlLHRoaXMubGF0PjkwfHx0aGlzLmxhdDwtOTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExuZ0xhdCBsYXRpdHVkZSB2YWx1ZTogbXVzdCBiZSBiZXR3ZWVuIC05MCBhbmQgOTAiKX07Ry5wcm90b3R5cGUud3JhcD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0LndyYXAodGhpcy5sbmcsLTE4MCwxODApLHRoaXMubGF0KX0sRy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLmxuZyx0aGlzLmxhdF19LEcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxuZ0xhdCgiK3RoaXMubG5nKyIsICIrdGhpcy5sYXQrIikifSxHLnByb3RvdHlwZS50b0JvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT0zNjAqdC80MDA3NTAxNyxyPWUvTWF0aC5jb3MoTWF0aC5QSS8xODAqdGhpcy5sYXQpO3JldHVybiBuZXcgWShuZXcgRyh0aGlzLmxuZy1yLHRoaXMubGF0LWUpLG5ldyBHKHRoaXMubG5nK3IsdGhpcy5sYXQrZSkpfSxHLmNvbnZlcnQ9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEcpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT10Lmxlbmd0aHx8Mz09PXQubGVuZ3RoKSlyZXR1cm4gbmV3IEcoTnVtYmVyKHRbMF0pLE51bWJlcih0WzFdKSk7aWYoIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQpcmV0dXJuIG5ldyBHKE51bWJlcih0LmxuZyksTnVtYmVyKHQubGF0KSk7dGhyb3cgbmV3IEVycm9yKCJgTG5nTGF0TGlrZWAgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBMbmdMYXQgaW5zdGFuY2UsIGFuIG9iamVjdCB7bG5nOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIG9yIGFuIGFycmF5IG9mIFs8bG5nPiwgPGxhdD5dIil9O3ZhciBZPWZ1bmN0aW9uKHQsZSl7dCYmKGU/dGhpcy5zZXRTb3V0aFdlc3QodCkuc2V0Tm9ydGhFYXN0KGUpOjQ9PT10Lmxlbmd0aD90aGlzLnNldFNvdXRoV2VzdChbdFswXSx0WzFdXSkuc2V0Tm9ydGhFYXN0KFt0WzJdLHRbM11dKTp0aGlzLnNldFNvdXRoV2VzdCh0WzBdKS5zZXROb3J0aEVhc3QodFsxXSkpfTtZLnByb3RvdHlwZS5zZXROb3J0aEVhc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25lPXQgaW5zdGFuY2VvZiBHP25ldyBHKHQubG5nLHQubGF0KTpHLmNvbnZlcnQodCksdGhpc30sWS5wcm90b3R5cGUuc2V0U291dGhXZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdz10IGluc3RhbmNlb2YgRz9uZXcgRyh0LmxuZyx0LmxhdCk6Ry5jb252ZXJ0KHQpLHRoaXN9LFkucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy5fc3csaT10aGlzLl9uZTtpZih0IGluc3RhbmNlb2YgRyllPXQscj10O2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgWSkpcmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5ldmVyeShBcnJheS5pc0FycmF5KT90aGlzLmV4dGVuZChZLmNvbnZlcnQodCkpOnRoaXMuZXh0ZW5kKEcuY29udmVydCh0KSk6dGhpcztpZihlPXQuX3N3LHI9dC5fbmUsIWV8fCFyKXJldHVybiB0aGlzfXJldHVybiBufHxpPyhuLmxuZz1NYXRoLm1pbihlLmxuZyxuLmxuZyksbi5sYXQ9TWF0aC5taW4oZS5sYXQsbi5sYXQpLGkubG5nPU1hdGgubWF4KHIubG5nLGkubG5nKSxpLmxhdD1NYXRoLm1heChyLmxhdCxpLmxhdCkpOih0aGlzLl9zdz1uZXcgRyhlLmxuZyxlLmxhdCksdGhpcy5fbmU9bmV3IEcoci5sbmcsci5sYXQpKSx0aGlzfSxZLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcoKHRoaXMuX3N3LmxuZyt0aGlzLl9uZS5sbmcpLzIsKHRoaXMuX3N3LmxhdCt0aGlzLl9uZS5sYXQpLzIpfSxZLnByb3RvdHlwZS5nZXRTb3V0aFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3d9LFkucHJvdG90eXBlLmdldE5vcnRoRWFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZX0sWS5wcm90b3R5cGUuZ2V0Tm9ydGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBHKHRoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0Tm9ydGgoKSl9LFkucHJvdG90eXBlLmdldFNvdXRoRWFzdD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmdldEVhc3QoKSx0aGlzLmdldFNvdXRoKCkpfSxZLnByb3RvdHlwZS5nZXRXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxuZ30sWS5wcm90b3R5cGUuZ2V0U291dGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3cubGF0fSxZLnByb3RvdHlwZS5nZXRFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxuZ30sWS5wcm90b3R5cGUuZ2V0Tm9ydGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubGF0fSxZLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuX3N3LnRvQXJyYXkoKSx0aGlzLl9uZS50b0FycmF5KCldfSxZLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJMbmdMYXRCb3VuZHMoIit0aGlzLl9zdy50b1N0cmluZygpKyIsICIrdGhpcy5fbmUudG9TdHJpbmcoKSsiKSJ9LFkucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuX3N3JiZ0aGlzLl9uZSl9LFkuY29udmVydD1mdW5jdGlvbih0KXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIFk/dDpuZXcgWSh0KX07dmFyIFc9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYm91bmRzPVkuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKHQpKSx0aGlzLm1pbnpvb209ZXx8MCx0aGlzLm1heHpvb209cnx8MjR9O1cucHJvdG90eXBlLnZhbGlkYXRlQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiY0PT09dC5sZW5ndGg/W01hdGgubWF4KC0xODAsdFswXSksTWF0aC5tYXgoLTkwLHRbMV0pLE1hdGgubWluKDE4MCx0WzJdKSxNYXRoLm1pbig5MCx0WzNdKV06Wy0xODAsLTkwLDE4MCw5MF19LFcucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodGhpcy5sbmdYKHRoaXMuYm91bmRzLmdldFdlc3QoKSx0LnopKSxyPU1hdGguZmxvb3IodGhpcy5sYXRZKHRoaXMuYm91bmRzLmdldE5vcnRoKCksdC56KSksbj1NYXRoLmNlaWwodGhpcy5sbmdYKHRoaXMuYm91bmRzLmdldEVhc3QoKSx0LnopKSxpPU1hdGguY2VpbCh0aGlzLmxhdFkodGhpcy5ib3VuZHMuZ2V0U291dGgoKSx0LnopKTtyZXR1cm4gdC54Pj1lJiZ0Lng8biYmdC55Pj1yJiZ0Lnk8aX0sVy5wcm90b3R5cGUubG5nWD1mdW5jdGlvbih0LGUpe3JldHVybih0KzE4MCkqKE1hdGgucG93KDIsZSkvMzYwKX0sVy5wcm90b3R5cGUubGF0WT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuY2xhbXAoTWF0aC5zaW4oTWF0aC5QSS8xODAqZSksLS45OTk5LC45OTk5KSxpPU1hdGgucG93KDIscikvKDIqTWF0aC5QSSk7cmV0dXJuIE1hdGgucG93KDIsci0xKSsuNSpNYXRoLmxvZygoMStuKS8oMS1uKSkqLWl9O3ZhciBYPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7aWYoZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnR5cGU9InZlY3RvciIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMuc2NoZW1lPSJ4eXoiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHQuZXh0ZW5kKHRoaXMsdC5waWNrKG4sWyJ1cmwiLCJzY2hlbWUiLCJ0aWxlU2l6ZSJdKSksdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7dHlwZToidmVjdG9yIn0sbiksdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPW4uY29sbGVjdFJlc291cmNlVGltaW5nLDUxMiE9PXRoaXMudGlsZVNpemUpdGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3IgdGlsZSBzb3VyY2VzIG11c3QgaGF2ZSBhIHRpbGVTaXplIG9mIDUxMiIpO3RoaXMuc2V0RXZlbnRlZFBhcmVudChhKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLEgodGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBXKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KX0sci5wcm90b3R5cGUuaGFzVGlsZT1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy50aWxlQm91bmRzfHx0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModC5jYW5vbmljYWwpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsKSxpPXtyZXF1ZXN0OnRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksdWlkOmUudWlkLHRpbGVJRDplLnRpbGVJRCx6b29tOmUudGlsZUlELm92ZXJzY2FsZWRaLHRpbGVTaXplOnRoaXMudGlsZVNpemUqZS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzphLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlc307ZnVuY3Rpb24gbyh0LG4pe3JldHVybiBlLmFib3J0ZWQ/cihudWxsKTp0P3IodCk6KG4mJm4ucmVzb3VyY2VUaW1pbmcmJihlLnJlc291cmNlVGltaW5nPW4ucmVzb3VyY2VUaW1pbmcpLHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEobiksZS5sb2FkVmVjdG9yRGF0YShuLHRoaXMubWFwLnBhaW50ZXIpLHIobnVsbCksdm9pZChlLnJlbG9hZENhbGxiYWNrJiYodGhpcy5sb2FkVGlsZShlLGUucmVsb2FkQ2FsbGJhY2spLGUucmVsb2FkQ2FsbGJhY2s9bnVsbCkpKX1pLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nPXRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyx2b2lkIDA9PT1lLndvcmtlcklEfHwiZXhwaXJlZCI9PT1lLnN0YXRlP2Uud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQoImxvYWRUaWxlIixpLG8uYmluZCh0aGlzKSk6ImxvYWRpbmciPT09ZS5zdGF0ZT9lLnJlbG9hZENhbGxiYWNrPXI6dGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbG9hZFRpbGUiLGksby5iaW5kKHRoaXMpLGUud29ya2VySUQpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dGhpcy5kaXNwYXRjaGVyLnNlbmQoImFib3J0VGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sdm9pZCAwLHQud29ya2VySUQpfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSgpLHRoaXMuZGlzcGF0Y2hlci5zZW5kKCJyZW1vdmVUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDAsdC53b3JrZXJJRCl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxaPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy50eXBlPSJyYXN0ZXIiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnJvdW5kWm9vbT0hMCx0aGlzLnNjaGVtZT0ieHl6Iix0aGlzLnRpbGVTaXplPTUxMix0aGlzLl9sb2FkZWQ9ITEsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksSCh0aGlzLl9vcHRpb25zLHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0LGZ1bmN0aW9uKHIsbil7cj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKHQuZXh0ZW5kKGUsbiksbi5ib3VuZHMmJihlLnRpbGVCb3VuZHM9bmV3IFcobi5ib3VuZHMsZS5taW56b29tLGUubWF4em9vbSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSJ9KSksZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6ImNvbnRlbnQifSkpKX0pfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO2UucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KGksdC5SZXNvdXJjZVR5cGUuVGlsZSksZnVuY3Rpb24odCxpKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPSJ1bmxvYWRlZCIscihudWxsKTtlbHNlIGlmKHQpZS5zdGF0ZT0iZXJyb3JlZCIscih0KTtlbHNlIGlmKGkpe24ubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEoaSksZGVsZXRlIGkuY2FjaGVDb250cm9sLGRlbGV0ZSBpLmV4cGlyZXM7dmFyIGE9bi5tYXAucGFpbnRlci5jb250ZXh0LG89YS5nbDtlLnRleHR1cmU9bi5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShpLndpZHRoKSxlLnRleHR1cmU/ZS50ZXh0dXJlLnVwZGF0ZShpLHt1c2VNaXBtYXA6ITB9KTooZS50ZXh0dXJlPW5ldyB6KGEsaSxvLlJHQkEse3VzZU1pcG1hcDohMH0pLGUudGV4dHVyZS5iaW5kKG8uTElORUFSLG8uQ0xBTVBfVE9fRURHRSxvLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJm8udGV4UGFyYW1ldGVyZihvLlRFWFRVUkVfMkQsYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpKSxlLnN0YXRlPSJsb2FkZWQiLHIobnVsbCl9fSl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5hYm9ydCgpLGRlbGV0ZSB0LnJlcXVlc3QpLGUoKX0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3QudGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodC50ZXh0dXJlKSxlKCl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSwkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMscixuLGksYSksdGhpcy50eXBlPSJyYXN0ZXItZGVtIix0aGlzLm1heHpvb209MjIsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0aGlzLmVuY29kaW5nPW4uZW5jb2Rpbmd8fCJtYXBib3gifXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToicmFzdGVyLWRlbSIsdXJsOnRoaXMudXJsLHRpbGVTaXplOnRoaXMudGlsZVNpemUsdGlsZXM6dGhpcy50aWxlcyxib3VuZHM6dGhpcy5ib3VuZHMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ319LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO2UucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksZnVuY3Rpb24odCxuKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPSJ1bmxvYWRlZCIscihudWxsKTtlbHNlIGlmKHQpZS5zdGF0ZT0iZXJyb3JlZCIscih0KTtlbHNlIGlmKG4pe3RoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEobiksZGVsZXRlIG4uY2FjaGVDb250cm9sLGRlbGV0ZSBuLmV4cGlyZXM7dmFyIGk9YS5nZXRJbWFnZURhdGEobiksbz17dWlkOmUudWlkLGNvb3JkOmUudGlsZUlELHNvdXJjZTp0aGlzLmlkLHJhd0ltYWdlRGF0YTppLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9O2Uud29ya2VySUQmJiJleHBpcmVkIiE9PWUuc3RhdGV8fChlLndvcmtlcklEPXRoaXMuZGlzcGF0Y2hlci5zZW5kKCJsb2FkREVNVGlsZSIsbyxmdW5jdGlvbih0LG4pe3QmJihlLnN0YXRlPSJlcnJvcmVkIixyKHQpKSxuJiYoZS5kZW09bixlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMCxlLnN0YXRlPSJsb2FkZWQiLHIobnVsbCkpfS5iaW5kKHRoaXMpKSl9fS5iaW5kKHRoaXMpKSxlLm5laWdoYm9yaW5nVGlsZXM9dGhpcy5fZ2V0TmVpZ2hib3JpbmdUaWxlcyhlLnRpbGVJRCl9LHIucHJvdG90eXBlLl9nZXROZWlnaGJvcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPWUuY2Fub25pY2FsLG49TWF0aC5wb3coMixyLnopLGk9KHIueC0xK24pJW4sYT0wPT09ci54P2Uud3JhcC0xOmUud3JhcCxvPShyLngrMStuKSVuLHM9ci54KzE9PT1uP2Uud3JhcCsxOmUud3JhcCxsPXt9O3JldHVybiBsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnkpLmtleV09e2JhY2tmaWxsZWQ6ITF9LHIueT4wJiYobFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosZS53cmFwLHIueixyLngsci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9KSxyLnkrMTxuJiYobFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosZS53cmFwLHIueixyLngsci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9KSxsfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QuZGVtVGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodC5kZW1UZXh0dXJlKSx0LmZibyYmKHQuZmJvLmRlc3Ryb3koKSxkZWxldGUgdC5mYm8pLHQuZGVtJiZkZWxldGUgdC5kZW0sZGVsZXRlIHQubmVpZ2hib3JpbmdUaWxlcyx0LnN0YXRlPSJ1bmxvYWRlZCIsdGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbW92ZURFTVRpbGUiLHt1aWQ6dC51aWQsc291cmNlOnRoaXMuaWR9LHZvaWQgMCx0LndvcmtlcklEKX0scn0oWiksSj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy50eXBlPSJnZW9qc29uIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MTgsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5fcmVtb3ZlZD0hMSx0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy5fZGF0YT1uLmRhdGEsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9bi5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5fcmVzb3VyY2VUaW1pbmc9W10sdm9pZCAwIT09bi5tYXh6b29tJiYodGhpcy5tYXh6b29tPW4ubWF4em9vbSksbi50eXBlJiYodGhpcy50eXBlPW4udHlwZSk7dmFyIG89dC5kZWZhdWx0JDgvdGhpcy50aWxlU2l6ZTt0aGlzLndvcmtlck9wdGlvbnM9dC5leHRlbmQoe3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXI6bi5jbHVzdGVyfHwhMSxnZW9qc29uVnRPcHRpb25zOntidWZmZXI6KHZvaWQgMCE9PW4uYnVmZmVyP24uYnVmZmVyOjEyOCkqbyx0b2xlcmFuY2U6KHZvaWQgMCE9PW4udG9sZXJhbmNlP24udG9sZXJhbmNlOi4zNzUpKm8sZXh0ZW50OnQuZGVmYXVsdCQ4LG1heFpvb206dGhpcy5tYXh6b29tLGxpbmVNZXRyaWNzOm4ubGluZU1ldHJpY3N8fCExfSxzdXBlcmNsdXN0ZXJPcHRpb25zOnttYXhab29tOnZvaWQgMCE9PW4uY2x1c3Rlck1heFpvb20/TWF0aC5taW4obi5jbHVzdGVyTWF4Wm9vbSx0aGlzLm1heHpvb20tMSk6dGhpcy5tYXh6b29tLTEsZXh0ZW50OnQuZGVmYXVsdCQ4LHJhZGl1czoobi5jbHVzdGVyUmFkaXVzfHw1MCkqbyxsb2c6ITF9fSxuLndvcmtlck9wdGlvbnMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdXBkYXRlV29ya2VyRGF0YShmdW5jdGlvbihyKXtpZihyKWUuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTtlbHNle3ZhciBuPXtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifTtlLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJmUuX3Jlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZy5sZW5ndGg+MCYmKG4ucmVzb3VyY2VUaW1pbmc9ZS5fcmVzb3VyY2VUaW1pbmcsZS5fcmVzb3VyY2VUaW1pbmc9W10pLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIsbikpfX0pfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7cmV0dXJuIHRoaXMuX2RhdGE9ZSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdXBkYXRlV29ya2VyRGF0YShmdW5jdGlvbihlKXtpZihlKXJldHVybiByLmZpcmUobmV3IHQuRXJyb3JFdmVudChlKSk7dmFyIG49e2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In07ci5fY29sbGVjdFJlc291cmNlVGltaW5nJiZyLl9yZXNvdXJjZVRpbWluZyYmci5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPXIuX3Jlc291cmNlVGltaW5nLHIuX3Jlc291cmNlVGltaW5nPVtdKSxyLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLG4pKX0pLHRoaXN9LHIucHJvdG90eXBlLl91cGRhdGVXb3JrZXJEYXRhPWZ1bmN0aW9uKGUpe3ZhciByLG4saT10aGlzLGE9dC5leHRlbmQoe30sdGhpcy53b3JrZXJPcHRpb25zKSxvPXRoaXMuX2RhdGE7InN0cmluZyI9PXR5cGVvZiBvPyhhLnJlcXVlc3Q9dGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QoKHI9bywobj10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKS5ocmVmPXIsbi5ocmVmKSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLGEucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9dGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nKTphLmRhdGE9SlNPTi5zdHJpbmdpZnkobyksdGhpcy53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZCh0aGlzLnR5cGUrIi4iK2Euc291cmNlKyIubG9hZERhdGEiLGEsZnVuY3Rpb24odCxyKXtpLl9yZW1vdmVkfHxyJiZyLmFiYW5kb25lZHx8KGkuX2xvYWRlZD0hMCxyJiZyLnJlc291cmNlVGltaW5nJiZyLnJlc291cmNlVGltaW5nW2kuaWRdJiYoaS5fcmVzb3VyY2VUaW1pbmc9ci5yZXNvdXJjZVRpbWluZ1tpLmlkXS5zbGljZSgwKSksaS5kaXNwYXRjaGVyLnNlbmQoaS50eXBlKyIuIithLnNvdXJjZSsiLmNvYWxlc2NlIixudWxsLG51bGwsaS53b3JrZXJJRCksZSh0KSl9LHRoaXMud29ya2VySUQpfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj12b2lkIDA9PT10LndvcmtlcklEPyJsb2FkVGlsZSI6InJlbG9hZFRpbGUiLGk9e3R5cGU6dGhpcy50eXBlLHVpZDp0LnVpZCx0aWxlSUQ6dC50aWxlSUQsem9vbTp0LnRpbGVJRC5vdmVyc2NhbGVkWixtYXhab29tOnRoaXMubWF4em9vbSx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86YS5kZXZpY2VQaXhlbFJhdGlvLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXN9O3Qud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQobixpLGZ1bmN0aW9uKGksYSl7cmV0dXJuIHQudW5sb2FkVmVjdG9yRGF0YSgpLHQuYWJvcnRlZD9lKG51bGwpOmk/ZShpKToodC5sb2FkVmVjdG9yRGF0YShhLHIubWFwLnBhaW50ZXIsInJlbG9hZFRpbGUiPT09biksZShudWxsKSl9LHRoaXMud29ya2VySUQpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dC5hYm9ydGVkPSEwfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSgpLHRoaXMuZGlzcGF0Y2hlci5zZW5kKCJyZW1vdmVUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSxudWxsLHQud29ya2VySUQpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3JlbW92ZWQ9ITAsdGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbW92ZVNvdXJjZSIse3R5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSxudWxsLHRoaXMud29ya2VySUQpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyx7dHlwZTp0aGlzLnR5cGUsZGF0YTp0aGlzLl9kYXRhfSl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxLPXQuY3JlYXRlTGF5b3V0KFt7bmFtZToiYV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9LHtuYW1lOiJhX3RleHR1cmVfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfV0pLFE9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kUHJvZ3JhbT1udWxsLHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXI9bnVsbCx0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzPVtdLHRoaXMuYm91bmRJbmRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQ9bnVsbCx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcj1udWxsLHRoaXMudmFvPW51bGx9O1EucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLmNvbnRleHQ9dDtmb3IodmFyIGw9dGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycy5sZW5ndGghPT1uLmxlbmd0aCxjPTA7IWwmJmM8bi5sZW5ndGg7YysrKXRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnNbY10hPT1uW2NdJiYobD0hMCk7dmFyIHU9IXRoaXMudmFvfHx0aGlzLmJvdW5kUHJvZ3JhbSE9PWV8fHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIhPT1yfHxsfHx0aGlzLmJvdW5kSW5kZXhCdWZmZXIhPT1pfHx0aGlzLmJvdW5kVmVydGV4T2Zmc2V0IT09YXx8dGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIhPT1vfHx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjIhPT1zOyF0LmV4dFZlcnRleEFycmF5T2JqZWN0fHx1P3RoaXMuZnJlc2hCaW5kKGUscixuLGksYSxvLHMpOih0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pLG8mJm8uYmluZCgpLGkmJmkuZHluYW1pY0RyYXcmJmkuYmluZCgpLHMmJnMuYmluZCgpKX0sUS5wcm90b3R5cGUuZnJlc2hCaW5kPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9dC5udW1BdHRyaWJ1dGVzLGM9dGhpcy5jb250ZXh0LHU9Yy5nbDtpZihjLmV4dFZlcnRleEFycmF5T2JqZWN0KXRoaXMudmFvJiZ0aGlzLmRlc3Ryb3koKSx0aGlzLnZhbz1jLmV4dFZlcnRleEFycmF5T2JqZWN0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCksYy5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KHRoaXMudmFvKSxzPTAsdGhpcy5ib3VuZFByb2dyYW09dCx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyPWUsdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycz1yLHRoaXMuYm91bmRJbmRleEJ1ZmZlcj1uLHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQ9aSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcj1hLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMj1vO2Vsc2V7cz1jLmN1cnJlbnROdW1BdHRyaWJ1dGVzfHwwO2Zvcih2YXIgZj1sO2Y8cztmKyspdS5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZil9ZS5lbmFibGVBdHRyaWJ1dGVzKHUsdCk7Zm9yKHZhciBoPTAscD1yO2g8cC5sZW5ndGg7aCs9MSlwW2hdLmVuYWJsZUF0dHJpYnV0ZXModSx0KTthJiZhLmVuYWJsZUF0dHJpYnV0ZXModSx0KSxvJiZvLmVuYWJsZUF0dHJpYnV0ZXModSx0KSxlLmJpbmQoKSxlLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKTtmb3IodmFyIGQ9MCxnPXI7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdO3YuYmluZCgpLHYuc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpfWEmJihhLmJpbmQoKSxhLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKSksbiYmbi5iaW5kKCksbyYmKG8uYmluZCgpLG8uc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpKSxjLmN1cnJlbnROdW1BdHRyaWJ1dGVzPWx9LFEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnZhbyYmKHRoaXMuY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyksdGhpcy52YW89bnVsbCl9O3ZhciB0dD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPW4sdGhpcy5jb29yZGluYXRlcz1yLmNvb3JkaW5hdGVzLHRoaXMudHlwZT0iaW1hZ2UiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnRpbGVzPXt9LHRoaXMuc2V0RXZlbnRlZFBhcmVudChpKSx0aGlzLm9wdGlvbnM9cn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMudXJsPXRoaXMub3B0aW9ucy51cmwsdC5nZXRJbWFnZSh0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCh0aGlzLnVybCx0LlJlc291cmNlVHlwZS5JbWFnZSksZnVuY3Rpb24ocixuKXtyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYoZS5pbWFnZT1hLmdldEltYWdlRGF0YShuKSxlLl9maW5pc2hMb2FkaW5nKCkpfSl9LHIucHJvdG90eXBlLl9maW5pc2hMb2FkaW5nPWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSJ9KSkpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXRDb29yZGluYXRlcz1mdW5jdGlvbihlKXt0aGlzLmNvb3JkaW5hdGVzPWU7dmFyIHI9dGhpcy5tYXAsbj1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gci50cmFuc2Zvcm0ubG9jYXRpb25Db29yZGluYXRlKEcuY29udmVydCh0KSkuem9vbVRvKDApfSksaT10aGlzLmNlbnRlckNvb3JkPXQuZ2V0Q29vcmRpbmF0ZXNDZW50ZXIobik7aS5jb2x1bW49TWF0aC5mbG9vcihpLmNvbHVtbiksaS5yb3c9TWF0aC5mbG9vcihpLnJvdyksdGhpcy50aWxlSUQ9bmV3IHQuQ2Fub25pY2FsVGlsZUlEKGkuem9vbSxpLmNvbHVtbixpLnJvdyksdGhpcy5taW56b29tPXRoaXMubWF4em9vbT1pLnpvb207dmFyIGE9bi5tYXAoZnVuY3Rpb24oZSl7dmFyIHI9ZS56b29tVG8oaS56b29tKTtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKE1hdGgucm91bmQoKHIuY29sdW1uLWkuY29sdW1uKSp0LmRlZmF1bHQkOCksTWF0aC5yb3VuZCgoci5yb3ctaS5yb3cpKnQuZGVmYXVsdCQ4KSl9KTtyZXR1cm4gdGhpcy5fYm91bmRzQXJyYXk9bmV3IHQuUmFzdGVyQm91bmRzQXJyYXksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYVswXS54LGFbMF0ueSwwLDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbMV0ueCxhWzFdLnksdC5kZWZhdWx0JDgsMCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYVszXS54LGFbM10ueSwwLHQuZGVmYXVsdCQ4KSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhhWzJdLngsYVsyXS55LHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4KSx0aGlzLmJvdW5kc0J1ZmZlciYmKHRoaXMuYm91bmRzQnVmZmVyLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ib3VuZHNCdWZmZXIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSx0aGlzfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7aWYoMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCYmdGhpcy5pbWFnZSl7dmFyIHQ9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LGU9dC5nbDtmb3IodmFyIHIgaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxLLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1ZBT3x8KHRoaXMuYm91bmRzVkFPPW5ldyBRKSx0aGlzLnRleHR1cmV8fCh0aGlzLnRleHR1cmU9bmV3IHoodCx0aGlzLmltYWdlLGUuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoZS5MSU5FQVIsZS5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIG49dGhpcy50aWxlc1tyXTsibG9hZGVkIiE9PW4uc3RhdGUmJihuLnN0YXRlPSJsb2FkZWQiLG4udGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy50aWxlSUQmJnRoaXMudGlsZUlELmVxdWFscyh0LnRpbGVJRC5jYW5vbmljYWwpPyh0aGlzLnRpbGVzW1N0cmluZyh0LnRpbGVJRC53cmFwKV09dCx0LmJ1Y2tldHM9e30sZShudWxsKSk6KHQuc3RhdGU9ImVycm9yZWQiLGUobnVsbCkpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiaW1hZ2UiLHVybDp0aGlzLm9wdGlvbnMudXJsLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksZXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyx0LHIsbixpKSx0aGlzLnJvdW5kWm9vbT0hMCx0aGlzLnR5cGU9InZpZGVvIix0aGlzLm9wdGlvbnM9cn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj10aGlzLm9wdGlvbnM7dGhpcy51cmxzPVtdO2Zvcih2YXIgbj0wLGk9ci51cmxzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtlLnVybHMucHVzaChlLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChhLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSkudXJsKX10LmdldFZpZGVvKHRoaXMudXJscyxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJihlLnZpZGVvPW4sZS52aWRlby5sb29wPSEwLGUudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigicGxheWluZyIsZnVuY3Rpb24oKXtlLm1hcC5fcmVyZW5kZXIoKX0pLGUubWFwJiZlLnZpZGVvLnBsYXkoKSxlLl9maW5pc2hMb2FkaW5nKCkpfSl9LHIucHJvdG90eXBlLmdldFZpZGVvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW99LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwfHwodGhpcy5tYXA9dCx0aGlzLmxvYWQoKSx0aGlzLnZpZGVvJiYodGhpcy52aWRlby5wbGF5KCksdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKSkpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7aWYoISgwPT09T2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RofHx0aGlzLnZpZGVvLnJlYWR5U3RhdGU8Mikpe3ZhciB0PXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxlPXQuZ2w7Zm9yKHZhciByIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksSy5tZW1iZXJzKSksdGhpcy5ib3VuZHNWQU98fCh0aGlzLmJvdW5kc1ZBTz1uZXcgUSksdGhpcy50ZXh0dXJlP3RoaXMudmlkZW8ucGF1c2VkfHwodGhpcy50ZXh0dXJlLmJpbmQoZS5MSU5FQVIsZS5DTEFNUF9UT19FREdFKSxlLnRleFN1YkltYWdlMkQoZS5URVhUVVJFXzJELDAsMCwwLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy52aWRlbykpOih0aGlzLnRleHR1cmU9bmV3IHoodCx0aGlzLnZpZGVvLGUuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoZS5MSU5FQVIsZS5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIG49dGhpcy50aWxlc1tyXTsibG9hZGVkIiE9PW4uc3RhdGUmJihuLnN0YXRlPSJsb2FkZWQiLG4udGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJ2aWRlbyIsdXJsczp0aGlzLnVybHMsY29vcmRpbmF0ZXM6dGhpcy5jb29yZGluYXRlc319LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlbyYmIXRoaXMudmlkZW8ucGF1c2VkfSxyfSh0dCkscnQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyxyLG4saSxhKSxuLmNvb3JkaW5hdGVzP0FycmF5LmlzQXJyYXkobi5jb29yZGluYXRlcykmJjQ9PT1uLmNvb3JkaW5hdGVzLmxlbmd0aCYmIW4uY29vcmRpbmF0ZXMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4hQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fSl9KXx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KCJzb3VyY2VzLiIrcixudWxsLCciY29vcmRpbmF0ZXMiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgNCBsb25naXR1ZGUvbGF0aXR1ZGUgYXJyYXkgcGFpcnMnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOSgic291cmNlcy4iK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiY29vcmRpbmF0ZXMiJykpKSxuLmFuaW1hdGUmJiJib29sZWFuIiE9dHlwZW9mIG4uYW5pbWF0ZSYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KCJzb3VyY2VzLiIrcixudWxsLCdvcHRpb25hbCAiYW5pbWF0ZSIgcHJvcGVydHkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnKSkpLG4uY2FudmFzPyJzdHJpbmciPT10eXBlb2Ygbi5jYW52YXN8fG4uY2FudmFzIGluc3RhbmNlb2YgdC5kZWZhdWx0LkhUTUxDYW52YXNFbGVtZW50fHx0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5kZWZhdWx0JDkoInNvdXJjZXMuIityLG51bGwsJyJjYW52YXMiIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhlIGNhbnZhcyBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmVhZCwgb3IgYW4gSFRNTENhbnZhc0VsZW1lbnQgaW5zdGFuY2UnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOSgic291cmNlcy4iK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiY2FudmFzIicpKSksdGhpcy5vcHRpb25zPW4sdGhpcy5hbmltYXRlPXZvaWQgMD09PW4uYW5pbWF0ZXx8bi5hbmltYXRlfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dGhpcy5jYW52YXN8fCh0aGlzLmNhbnZhcz10aGlzLm9wdGlvbnMuY2FudmFzIGluc3RhbmNlb2YgdC5kZWZhdWx0LkhUTUxDYW52YXNFbGVtZW50P3RoaXMub3B0aW9ucy5jYW52YXM6dC5kZWZhdWx0LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5jYW52YXMpKSx0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiQ2FudmFzIGRpbWVuc2lvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLiIpKSk6KHRoaXMucGxheT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmc9ITAsdGhpcy5tYXAuX3JlcmVuZGVyKCl9LHRoaXMucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5aW5nPSExfSx0aGlzLl9maW5pc2hMb2FkaW5nKCkpfSxyLnByb3RvdHlwZS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW52YXN9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy5jYW52YXMmJnRoaXMuYW5pbWF0ZSYmdGhpcy5wbGF5KCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7dmFyIHQ9ITE7aWYodGhpcy5jYW52YXMud2lkdGghPT10aGlzLndpZHRoJiYodGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCx0PSEwKSx0aGlzLmNhbnZhcy5oZWlnaHQhPT10aGlzLmhlaWdodCYmKHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0PSEwKSwhdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSYmMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCl7dmFyIGU9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LHI9ZS5nbDtmb3IodmFyIG4gaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxLLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1ZBT3x8KHRoaXMuYm91bmRzVkFPPW5ldyBRKSx0aGlzLnRleHR1cmU/dD90aGlzLnRleHR1cmUudXBkYXRlKHRoaXMuY2FudmFzKTp0aGlzLl9wbGF5aW5nJiYodGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSxyLnRleFN1YkltYWdlMkQoci5URVhUVVJFXzJELDAsMCwwLHIuUkdCQSxyLlVOU0lHTkVEX0JZVEUsdGhpcy5jYW52YXMpKToodGhpcy50ZXh0dXJlPW5ldyB6KGUsdGhpcy5jYW52YXMsci5SR0JBKSx0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpKSx0aGlzLnRpbGVzKXt2YXIgaT10aGlzLnRpbGVzW25dOyJsb2FkZWQiIT09aS5zdGF0ZSYmKGkuc3RhdGU9ImxvYWRlZCIsaS50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImNhbnZhcyIsY29vcmRpbmF0ZXM6dGhpcy5jb29yZGluYXRlc319LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGxheWluZ30sci5wcm90b3R5cGUuX2hhc0ludmFsaWREaW1lbnNpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1bdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0XTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYoaXNOYU4ocil8fHI8PTApcmV0dXJuITB9cmV0dXJuITF9LHJ9KHR0KSxudD17dmVjdG9yOlgscmFzdGVyOlosInJhc3Rlci1kZW0iOiQsZ2VvanNvbjpKLHZpZGVvOmV0LGltYWdlOnR0LGNhbnZhczpydH0saXQ9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bmV3IG50W3IudHlwZV0oZSxyLG4saSk7aWYoYS5pZCE9PWUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBTb3VyY2UgaWQgdG8gYmUgIitlKyIgaW5zdGVhZCBvZiAiK2EuaWQpO3JldHVybiB0LmJpbmRBbGwoWyJsb2FkIiwiYWJvcnQiLCJ1bmxvYWQiLCJzZXJpYWxpemUiLCJwcmVwYXJlIl0sYSksYX07ZnVuY3Rpb24gYXQodCxlLHIsbixpKXt2YXIgYT1pLm1heFBpdGNoU2NhbGVGYWN0b3IoKSxvPXQudGlsZXNJbihyLGEpO28uc29ydChvdCk7Zm9yKHZhciBzPVtdLGw9MCxjPW87bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO3MucHVzaCh7d3JhcHBlZFRpbGVJRDp1LnRpbGVJRC53cmFwcGVkKCkua2V5LHF1ZXJ5UmVzdWx0czp1LnRpbGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUsdS5xdWVyeUdlb21ldHJ5LHUuc2NhbGUsbixpLGEsdC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHUudGlsZUlELnRvVW53cmFwcGVkKCkpKX0pfXJldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj17fSxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEucXVlcnlSZXN1bHRzLHM9YS53cmFwcGVkVGlsZUlELGw9cltzXT1yW3NdfHx7fTtmb3IodmFyIGMgaW4gbylmb3IodmFyIHU9b1tjXSxmPWxbY109bFtjXXx8e30saD1lW2NdPWVbY118fFtdLHA9MCxkPXU7cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdO2ZbZy5mZWF0dXJlSW5kZXhdfHwoZltnLmZlYXR1cmVJbmRleF09ITAsaC5wdXNoKGcuZmVhdHVyZSkpfX1yZXR1cm4gZX0ocyl9ZnVuY3Rpb24gb3QodCxlKXt2YXIgcj10LnRpbGVJRCxuPWUudGlsZUlEO3JldHVybiByLm92ZXJzY2FsZWRaLW4ub3ZlcnNjYWxlZFp8fHIuY2Fub25pY2FsLnktbi5jYW5vbmljYWwueXx8ci53cmFwLW4ud3JhcHx8ci5jYW5vbmljYWwueC1uLmNhbm9uaWNhbC54fXZhciBzdD1mdW5jdGlvbihlLHIpe3RoaXMudGlsZUlEPWUsdGhpcy51aWQ9dC51bmlxdWVJZCgpLHRoaXMudXNlcz0wLHRoaXMudGlsZVNpemU9cix0aGlzLmJ1Y2tldHM9e30sdGhpcy5leHBpcmF0aW9uVGltZT1udWxsLHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTAsdGhpcy5zdGF0ZT0ibG9hZGluZyJ9O3N0LnByb3RvdHlwZS5yZWdpc3RlckZhZGVEdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10K3RoaXMudGltZUFkZGVkO2U8YS5ub3coKXx8dGhpcy5mYWRlRW5kVGltZSYmZTx0aGlzLmZhZGVFbmRUaW1lfHwodGhpcy5mYWRlRW5kVGltZT1lKX0sc3QucHJvdG90eXBlLndhc1JlcXVlc3RlZD1mdW5jdGlvbigpe3JldHVybiJlcnJvcmVkIj09PXRoaXMuc3RhdGV8fCJsb2FkZWQiPT09dGhpcy5zdGF0ZXx8InJlbG9hZGluZyI9PT10aGlzLnN0YXRlfSxzdC5wcm90b3R5cGUubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24oZSxyLG4pe2lmKHRoaXMuaGFzRGF0YSgpJiZ0aGlzLnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLnN0YXRlPSJsb2FkZWQiLGUpe2lmKGUuZmVhdHVyZUluZGV4JiYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXg9ZS5mZWF0dXJlSW5kZXgsZS5yYXdUaWxlRGF0YT8odGhpcy5sYXRlc3RSYXdUaWxlRGF0YT1lLnJhd1RpbGVEYXRhLHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhPWUucmF3VGlsZURhdGEpOnRoaXMubGF0ZXN0UmF3VGlsZURhdGEmJih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT10aGlzLmxhdGVzdFJhd1RpbGVEYXRhKSksdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1lLmNvbGxpc2lvbkJveEFycmF5LHRoaXMuYnVja2V0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O2lmKCFlKXJldHVybiByO2Zvcih2YXIgbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLmxheWVySWRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5nZXRMYXllcih0KX0pLmZpbHRlcihCb29sZWFuKTtpZigwIT09by5sZW5ndGgpe2EubGF5ZXJzPW87Zm9yKHZhciBzPTAsbD1vO3M8bC5sZW5ndGg7cys9MSlyW2xbc10uaWRdPWF9fXJldHVybiByfShlLmJ1Y2tldHMsci5zdHlsZSksbilmb3IodmFyIGkgaW4gdGhpcy5idWNrZXRzKXt2YXIgYT10aGlzLmJ1Y2tldHNbaV07YSBpbnN0YW5jZW9mIHQuZGVmYXVsdCQxNCYmKGEuanVzdFJlbG9hZGVkPSEwKX1mb3IodmFyIG8gaW4gdGhpcy5xdWVyeVBhZGRpbmc9MCx0aGlzLmJ1Y2tldHMpe3ZhciBzPXRoaXMuYnVja2V0c1tvXTt0aGlzLnF1ZXJ5UGFkZGluZz1NYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZyxyLnN0eWxlLmdldExheWVyKHMubGF5ZXJJZHNbMF0pLnF1ZXJ5UmFkaXVzKHMpKX1lLmljb25BdGxhc0ltYWdlJiYodGhpcy5pY29uQXRsYXNJbWFnZT1lLmljb25BdGxhc0ltYWdlKSxlLmdseXBoQXRsYXNJbWFnZSYmKHRoaXMuZ2x5cGhBdGxhc0ltYWdlPWUuZ2x5cGhBdGxhc0ltYWdlKX1lbHNlIHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IHQuQ29sbGlzaW9uQm94QXJyYXl9LHN0LnByb3RvdHlwZS51bmxvYWRWZWN0b3JEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYnVja2V0cyl0aGlzLmJ1Y2tldHNbdF0uZGVzdHJveSgpO3RoaXMuYnVja2V0cz17fSx0aGlzLmljb25BdGxhc1RleHR1cmUmJnRoaXMuaWNvbkF0bGFzVGV4dHVyZS5kZXN0cm95KCksdGhpcy5nbHlwaEF0bGFzVGV4dHVyZSYmdGhpcy5nbHlwaEF0bGFzVGV4dHVyZS5kZXN0cm95KCksdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXg9bnVsbCx0aGlzLnN0YXRlPSJ1bmxvYWRlZCJ9LHN0LnByb3RvdHlwZS51bmxvYWRERU1EYXRhPWZ1bmN0aW9uKCl7dGhpcy5kZW09bnVsbCx0aGlzLm5laWdoYm9yaW5nVGlsZXM9bnVsbCx0aGlzLnN0YXRlPSJ1bmxvYWRlZCJ9LHN0LnByb3RvdHlwZS5nZXRCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnVja2V0c1t0LmlkXX0sc3QucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5idWNrZXRzKXt2YXIgcj10aGlzLmJ1Y2tldHNbZV07ci51cGxvYWRlZHx8KHIudXBsb2FkKHQpLHIudXBsb2FkZWQ9ITApfXZhciBuPXQuZ2w7dGhpcy5pY29uQXRsYXNJbWFnZSYmKHRoaXMuaWNvbkF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuaWNvbkF0bGFzSW1hZ2Usbi5SR0JBKSx0aGlzLmljb25BdGxhc0ltYWdlPW51bGwpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlJiYodGhpcy5nbHlwaEF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuZ2x5cGhBdGxhc0ltYWdlLG4uQUxQSEEpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlPW51bGwpfSxzdC5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3JldHVybiB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE/dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe3F1ZXJ5R2VvbWV0cnk6ZSxzY2FsZTpyLHRpbGVTaXplOnRoaXMudGlsZVNpemUscG9zTWF0cml4Om8sdHJhbnNmb3JtOmkscGFyYW1zOm4scXVlcnlQYWRkaW5nOnRoaXMucXVlcnlQYWRkaW5nKmF9LHQpOnt9fSxzdC5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe2lmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSl7dmFyIG49dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgubG9hZFZUTGF5ZXJzKCksaT1yP3Iuc291cmNlTGF5ZXI6IiIsYT1uLl9nZW9qc29uVGlsZUxheWVyfHxuW2ldO2lmKGEpZm9yKHZhciBvPXQuZGVmYXVsdCQxMyhyJiZyLmZpbHRlcikscz17ejp0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWix4OnRoaXMudGlsZUlELmNhbm9uaWNhbC54LHk6dGhpcy50aWxlSUQuY2Fub25pY2FsLnl9LGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIGM9YS5mZWF0dXJlKGwpO2lmKG8obmV3IHQuZGVmYXVsdCQxNih0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWiksYykpe3ZhciB1PW5ldyB0LmRlZmF1bHQkMTIoYyxzLnoscy54LHMueSk7dS50aWxlPXMsZS5wdXNoKHUpfX19fSxzdC5wcm90b3R5cGUuY2xlYXJNYXNrPWZ1bmN0aW9uKCl7dGhpcy5zZWdtZW50cyYmKHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLnNlZ21lbnRzKSx0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlciYmKHRoaXMubWFza2VkQm91bmRzQnVmZmVyLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5tYXNrZWRCb3VuZHNCdWZmZXIpLHRoaXMubWFza2VkSW5kZXhCdWZmZXImJih0aGlzLm1hc2tlZEluZGV4QnVmZmVyLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5tYXNrZWRJbmRleEJ1ZmZlcil9LHN0LnByb3RvdHlwZS5zZXRNYXNrPWZ1bmN0aW9uKGUscil7aWYoIXQuZGVmYXVsdCQxMCh0aGlzLm1hc2ssZSkmJih0aGlzLm1hc2s9ZSx0aGlzLmNsZWFyTWFzaygpLCF0LmRlZmF1bHQkMTAoZSx7MDohMH0pKSl7dmFyIG49bmV3IHQuUmFzdGVyQm91bmRzQXJyYXksaT1uZXcgdC5UcmlhbmdsZUluZGV4QXJyYXk7dGhpcy5zZWdtZW50cz1uZXcgdC5kZWZhdWx0JDE1LHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoMCxuLGkpO2Zvcih2YXIgYT1PYmplY3Qua2V5cyhlKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWVbYVtvXV0sbD10LmRlZmF1bHQkOD4+cy56LGM9bmV3IHQuZGVmYXVsdCQxKHMueCpsLHMueSpsKSx1PW5ldyB0LmRlZmF1bHQkMShjLngrbCxjLnkrbCksZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsbixpKTtuLmVtcGxhY2VCYWNrKGMueCxjLnksYy54LGMueSksbi5lbXBsYWNlQmFjayh1LngsYy55LHUueCxjLnkpLG4uZW1wbGFjZUJhY2soYy54LHUueSxjLngsdS55KSxuLmVtcGxhY2VCYWNrKHUueCx1LnksdS54LHUueSk7dmFyIGg9Zi52ZXJ0ZXhMZW5ndGg7aS5lbXBsYWNlQmFjayhoLGgrMSxoKzIpLGkuZW1wbGFjZUJhY2soaCsxLGgrMixoKzMpLGYudmVydGV4TGVuZ3RoKz00LGYucHJpbWl0aXZlTGVuZ3RoKz0yfXRoaXMubWFza2VkQm91bmRzQnVmZmVyPXIuY3JlYXRlVmVydGV4QnVmZmVyKG4sSy5tZW1iZXJzKSx0aGlzLm1hc2tlZEluZGV4QnVmZmVyPXIuY3JlYXRlSW5kZXhCdWZmZXIoaSl9fSxzdC5wcm90b3R5cGUuaGFzRGF0YT1mdW5jdGlvbigpe3JldHVybiJsb2FkZWQiPT09dGhpcy5zdGF0ZXx8InJlbG9hZGluZyI9PT10aGlzLnN0YXRlfHwiZXhwaXJlZCI9PT10aGlzLnN0YXRlfSxzdC5wcm90b3R5cGUuc2V0RXhwaXJ5RGF0YT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmV4cGlyYXRpb25UaW1lO2lmKGUuY2FjaGVDb250cm9sKXt2YXIgbj10LnBhcnNlQ2FjaGVDb250cm9sKGUuY2FjaGVDb250cm9sKTtuWyJtYXgtYWdlIl0mJih0aGlzLmV4cGlyYXRpb25UaW1lPURhdGUubm93KCkrMWUzKm5bIm1heC1hZ2UiXSl9ZWxzZSBlLmV4cGlyZXMmJih0aGlzLmV4cGlyYXRpb25UaW1lPW5ldyBEYXRlKGUuZXhwaXJlcykuZ2V0VGltZSgpKTtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXt2YXIgaT1EYXRlLm5vdygpLGE9ITE7aWYodGhpcy5leHBpcmF0aW9uVGltZT5pKWE9ITE7ZWxzZSBpZihyKWlmKHRoaXMuZXhwaXJhdGlvblRpbWU8cilhPSEwO2Vsc2V7dmFyIG89dGhpcy5leHBpcmF0aW9uVGltZS1yO28/dGhpcy5leHBpcmF0aW9uVGltZT1pK01hdGgubWF4KG8sM2U0KTphPSEwfWVsc2UgYT0hMDthPyh0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQrKyx0aGlzLnN0YXRlPSJleHBpcmVkIik6dGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTB9fSxzdC5wcm90b3R5cGUuZ2V0RXhwaXJ5VGltZW91dD1mdW5jdGlvbigpe2lmKHRoaXMuZXhwaXJhdGlvblRpbWUpcmV0dXJuIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD8xZTMqKDE8PE1hdGgubWluKHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudC0xLDMxKSk6TWF0aC5taW4odGhpcy5leHBpcmF0aW9uVGltZS0obmV3IERhdGUpLmdldFRpbWUoKSxNYXRoLnBvdygyLDMxKS0xKX07dmFyIGx0PWZ1bmN0aW9uKHQsZSl7dGhpcy5tYXg9dCx0aGlzLm9uUmVtb3ZlPWUsdGhpcy5yZXNldCgpfTtsdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5kYXRhKWZvcih2YXIgZT0wLHI9dGhpcy5kYXRhW3RdO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtuLnRpbWVvdXQmJmNsZWFyVGltZW91dChuLnRpbWVvdXQpLHRoaXMub25SZW1vdmUobi52YWx1ZSl9cmV0dXJuIHRoaXMuZGF0YT17fSx0aGlzLm9yZGVyPVtdLHRoaXN9LGx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT10LndyYXBwZWQoKS5rZXk7dm9pZCAwPT09dGhpcy5kYXRhW2ldJiYodGhpcy5kYXRhW2ldPVtdKTt2YXIgYT17dmFsdWU6ZSx0aW1lb3V0OnZvaWQgMH07aWYodm9pZCAwIT09ciYmKGEudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5yZW1vdmUodCxhKX0scikpLHRoaXMuZGF0YVtpXS5wdXNoKGEpLHRoaXMub3JkZXIucHVzaChpKSx0aGlzLm9yZGVyLmxlbmd0aD50aGlzLm1heCl7dmFyIG89dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7byYmdGhpcy5vblJlbW92ZShvKX1yZXR1cm4gdGhpc30sbHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdC53cmFwcGVkKCkua2V5IGluIHRoaXMuZGF0YX0sbHQucHJvdG90eXBlLmdldEFuZFJlbW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXModCk/dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodC53cmFwcGVkKCkua2V5KTpudWxsfSxsdC5wcm90b3R5cGUuX2dldEFuZFJlbW92ZUJ5S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YVt0XS5zaGlmdCgpO3JldHVybiBlLnRpbWVvdXQmJmNsZWFyVGltZW91dChlLnRpbWVvdXQpLDA9PT10aGlzLmRhdGFbdF0ubGVuZ3RoJiZkZWxldGUgdGhpcy5kYXRhW3RdLHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZih0KSwxKSxlLnZhbHVlfSxsdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLmRhdGFbdC53cmFwcGVkKCkua2V5XVswXS52YWx1ZTpudWxsfSxsdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuaGFzKHQpKXJldHVybiB0aGlzO3ZhciByPXQud3JhcHBlZCgpLmtleSxuPXZvaWQgMD09PWU/MDp0aGlzLmRhdGFbcl0uaW5kZXhPZihlKSxpPXRoaXMuZGF0YVtyXVtuXTtyZXR1cm4gdGhpcy5kYXRhW3JdLnNwbGljZShuLDEpLGkudGltZW91dCYmY2xlYXJUaW1lb3V0KGkudGltZW91dCksMD09PXRoaXMuZGF0YVtyXS5sZW5ndGgmJmRlbGV0ZSB0aGlzLmRhdGFbcl0sdGhpcy5vblJlbW92ZShpLnZhbHVlKSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YociksMSksdGhpc30sbHQucHJvdG90eXBlLnNldE1heFNpemU9ZnVuY3Rpb24odCl7Zm9yKHRoaXMubWF4PXQ7dGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXg7KXt2YXIgZT10aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0aGlzLm9yZGVyWzBdKTtlJiZ0aGlzLm9uUmVtb3ZlKGUpfXJldHVybiB0aGlzfTt2YXIgY3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29udGV4dD10O3ZhciBuPXQuZ2w7dGhpcy5idWZmZXI9bi5jcmVhdGVCdWZmZXIoKSx0aGlzLmR5bmFtaWNEcmF3PUJvb2xlYW4ociksdGhpcy51bmJpbmRWQU8oKSx0LmJpbmRFbGVtZW50QnVmZmVyLnNldCh0aGlzLmJ1ZmZlciksbi5idWZmZXJEYXRhKG4uRUxFTUVOVF9BUlJBWV9CVUZGRVIsZS5hcnJheUJ1ZmZlcix0aGlzLmR5bmFtaWNEcmF3P24uRFlOQU1JQ19EUkFXOm4uU1RBVElDX0RSQVcpLHRoaXMuZHluYW1pY0RyYXd8fGRlbGV0ZSBlLmFycmF5QnVmZmVyfTtjdC5wcm90b3R5cGUudW5iaW5kVkFPPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0JiZ0aGlzLmNvbnRleHQuYmluZFZlcnRleEFycmF5T0VTLnNldChudWxsKX0sY3QucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0sY3QucHJvdG90eXBlLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3RoaXMudW5iaW5kVkFPKCksdGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuRUxFTUVOVF9BUlJBWV9CVUZGRVIsMCx0LmFycmF5QnVmZmVyKX0sY3QucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5idWZmZXImJih0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlciksZGVsZXRlIHRoaXMuYnVmZmVyKX07dmFyIHV0PXtJbnQ4OiJCWVRFIixVaW50ODoiVU5TSUdORURfQllURSIsSW50MTY6IlNIT1JUIixVaW50MTY6IlVOU0lHTkVEX1NIT1JUIixJbnQzMjoiSU5UIixVaW50MzI6IlVOU0lHTkVEX0lOVCIsRmxvYXQzMjoiRkxPQVQifSxmdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLmF0dHJpYnV0ZXM9cix0aGlzLml0ZW1TaXplPWUuYnl0ZXNQZXJFbGVtZW50LHRoaXMuZHluYW1pY0RyYXc9bix0aGlzLmNvbnRleHQ9dDt2YXIgaT10LmdsO3RoaXMuYnVmZmVyPWkuY3JlYXRlQnVmZmVyKCksdC5iaW5kVmVydGV4QnVmZmVyLnNldCh0aGlzLmJ1ZmZlciksaS5idWZmZXJEYXRhKGkuQVJSQVlfQlVGRkVSLGUuYXJyYXlCdWZmZXIsdGhpcy5keW5hbWljRHJhdz9pLkRZTkFNSUNfRFJBVzppLlNUQVRJQ19EUkFXKSx0aGlzLmR5bmFtaWNEcmF3fHxkZWxldGUgZS5hcnJheUJ1ZmZlcn07ZnQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpfSxmdC5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGZ0LnByb3RvdHlwZS5lbmFibGVBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO3IrKyl7dmFyIG49dGhpcy5hdHRyaWJ1dGVzW3JdLGk9ZS5hdHRyaWJ1dGVzW24ubmFtZV07dm9pZCAwIT09aSYmdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19LGZ0LnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5hdHRyaWJ1dGVzW25dLGE9ZS5hdHRyaWJ1dGVzW2kubmFtZV07dm9pZCAwIT09YSYmdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsaS5jb21wb25lbnRzLHRbdXRbaS50eXBlXV0sITEsdGhpcy5pdGVtU2l6ZSxpLm9mZnNldCt0aGlzLml0ZW1TaXplKihyfHwwKSl9fSxmdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbDt0aGlzLmJ1ZmZlciYmKHQuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKSxkZWxldGUgdGhpcy5idWZmZXIpfTt2YXIgaHQ9ZnVuY3Rpb24oZSl7dGhpcy5jb250ZXh0PWUsdGhpcy5jdXJyZW50PXQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fTtodC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0saHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dC5yPT09ZS5yJiZ0Lmc9PT1lLmcmJnQuYj09PWUuYiYmdC5hPT09ZS5hfHwodGhpcy5jb250ZXh0LmdsLmNsZWFyQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBwdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MX07cHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHB0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5jbGVhckRlcHRoKHQpLHRoaXMuY3VycmVudD10KX07dmFyIGR0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0wfTtkdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sZHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLmNsZWFyU3RlbmNpbCh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBndD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9WyEwLCEwLCEwLCEwXX07Z3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGd0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfHwodGhpcy5jb250ZXh0LmdsLmNvbG9yTWFzayh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciB2dD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITB9O3Z0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx2dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuZGVwdGhNYXNrKHQpLHRoaXMuY3VycmVudD10KX07dmFyIG10PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0yNTV9O210LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxtdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuc3RlbmNpbE1hc2sodCksdGhpcy5jdXJyZW50PXQpfTt2YXIgeXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PXtmdW5jOnQuZ2wuQUxXQVlTLHJlZjowLG1hc2s6MjU1fX07eXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3QuZnVuYz09PWUuZnVuYyYmdC5yZWY9PT1lLnJlZiYmdC5tYXNrPT09ZS5tYXNrfHwodGhpcy5jb250ZXh0LmdsLnN0ZW5jaWxGdW5jKHQuZnVuYyx0LnJlZix0Lm1hc2spLHRoaXMuY3VycmVudD10KX07dmFyIHh0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9W2UuS0VFUCxlLktFRVAsZS5LRUVQXX07eHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHh0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl18fCh0aGlzLmNvbnRleHQuZ2wuc3RlbmNpbE9wKHRbMF0sdFsxXSx0WzJdKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBidD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITF9O2J0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxidC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0P2UuZW5hYmxlKGUuU1RFTkNJTF9URVNUKTplLmRpc2FibGUoZS5TVEVOQ0lMX1RFU1QpLHRoaXMuY3VycmVudD10fX07dmFyIF90PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1bMCwxXX07X3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LF90LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXXx8KHRoaXMuY29udGV4dC5nbC5kZXB0aFJhbmdlKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgd3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTt3dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sd3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dD9lLmVuYWJsZShlLkRFUFRIX1RFU1QpOmUuZGlzYWJsZShlLkRFUFRIX1RFU1QpLHRoaXMuY3VycmVudD10fX07dmFyIGt0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD10LmdsLkxFU1N9O2t0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxrdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuZGVwdGhGdW5jKHQpLHRoaXMuY3VycmVudD10KX07dmFyIFR0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0hMX07VHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFR0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3Q/ZS5lbmFibGUoZS5CTEVORCk6ZS5kaXNhYmxlKGUuQkxFTkQpLHRoaXMuY3VycmVudD10fX07dmFyIEF0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9W2UuT05FLGUuWkVST119O0F0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxBdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV18fCh0aGlzLmNvbnRleHQuZ2wuYmxlbmRGdW5jKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgTXQ9ZnVuY3Rpb24oZSl7dGhpcy5jb250ZXh0PWUsdGhpcy5jdXJyZW50PXQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fTtNdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sTXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dC5yPT09ZS5yJiZ0Lmc9PT1lLmcmJnQuYj09PWUuYiYmdC5hPT09ZS5hfHwodGhpcy5jb250ZXh0LmdsLmJsZW5kQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBTdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07U3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC51c2VQcm9ncmFtKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEV0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0xfTtFdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRXQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmNvbnRleHQubGluZVdpZHRoUmFuZ2Usbj10LmNsYW1wKGUsclswXSxyWzFdKTt0aGlzLmN1cnJlbnQhPT1uJiYodGhpcy5jb250ZXh0LmdsLmxpbmVXaWR0aChuKSx0aGlzLmN1cnJlbnQ9ZSl9O3ZhciBDdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9dC5nbC5URVhUVVJFMH07Q3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5hY3RpdmVUZXh0dXJlKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEx0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9WzAsMCxlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdfTtMdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sTHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXSYmdFszXT09PWVbM118fCh0aGlzLmNvbnRleHQuZ2wudmlld3BvcnQodFswXSx0WzFdLHRbMl0sdFszXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgenQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O3p0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx6dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIE90PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtPdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sT3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kUmVuZGVyYnVmZmVyKGUuUkVOREVSQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIEl0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtJdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sSXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgRHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O0R0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxEdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgUHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O1B0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxQdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRCdWZmZXIoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH07dmFyIFJ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtSdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sUnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiZ0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QmJih0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuYmluZFZlcnRleEFycmF5T0VTKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEZ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD00fTtGdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19BTElHTk1FTlQsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgQnQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTtCdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sQnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCx0KSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBOdD1mdW5jdGlvbih0LGUpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsLHRoaXMucGFyZW50PWV9O050LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fTt2YXIganQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5kaXJ0eT0hMX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGlydHl8fHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCksZS5mcmFtZWJ1ZmZlclRleHR1cmUyRChlLkZSQU1FQlVGRkVSLGUuQ09MT1JfQVRUQUNITUVOVDAsZS5URVhUVVJFXzJELHQsMCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGUucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sZX0oTnQpLFZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCksZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihlLkZSQU1FQlVGRkVSLGUuREVQVEhfQVRUQUNITUVOVCxlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH19LGV9KE50KSxVdD1mdW5jdGlvbih0LGUscil7dGhpcy5jb250ZXh0PXQsdGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXI7dmFyIG49dC5nbCxpPXRoaXMuZnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpO3RoaXMuY29sb3JBdHRhY2htZW50PW5ldyBqdCh0LGkpLHRoaXMuZGVwdGhBdHRhY2htZW50PW5ldyBWdCh0LGkpfTtVdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbCxlPXRoaXMuY29sb3JBdHRhY2htZW50LmdldCgpO2UmJnQuZGVsZXRlVGV4dHVyZShlKTt2YXIgcj10aGlzLmRlcHRoQXR0YWNobWVudC5nZXQoKTtyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKSx0LmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpfTt2YXIgcXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZnVuYz10LHRoaXMubWFzaz1lLHRoaXMucmFuZ2U9cn07cXQuUmVhZE9ubHk9ITEscXQuUmVhZFdyaXRlPSEwLHF0LmRpc2FibGVkPW5ldyBxdCg1MTkscXQuUmVhZE9ubHksWzAsMV0pO3ZhciBIdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy50ZXN0PXQsdGhpcy5yZWY9ZSx0aGlzLm1hc2s9cix0aGlzLmZhaWw9bix0aGlzLmRlcHRoRmFpbD1pLHRoaXMucGFzcz1hfTtIdC5kaXNhYmxlZD1uZXcgSHQoe2Z1bmM6NTE5LG1hc2s6MH0sMCwwLDc2ODAsNzY4MCw3NjgwKTt2YXIgR3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYmxlbmRGdW5jdGlvbj10LHRoaXMuYmxlbmRDb2xvcj1lLHRoaXMubWFzaz1yfTtHdC5kaXNhYmxlZD1uZXcgR3QoR3QuUmVwbGFjZT1bMSwwXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITEsITEsITEsITFdKSxHdC51bmJsZW5kZWQ9bmV3IEd0KEd0LlJlcGxhY2UsdC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSksR3QuYWxwaGFCbGVuZGVkPW5ldyBHdChbMSw3NzFdLHQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pO3ZhciBZdD1mdW5jdGlvbih0KXt0aGlzLmdsPXQsdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdD10aGlzLmdsLmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSx0aGlzLmxpbmVXaWR0aFJhbmdlPXQuZ2V0UGFyYW1ldGVyKHQuQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFKSx0aGlzLmNsZWFyQ29sb3I9bmV3IGh0KHRoaXMpLHRoaXMuY2xlYXJEZXB0aD1uZXcgcHQodGhpcyksdGhpcy5jbGVhclN0ZW5jaWw9bmV3IGR0KHRoaXMpLHRoaXMuY29sb3JNYXNrPW5ldyBndCh0aGlzKSx0aGlzLmRlcHRoTWFzaz1uZXcgdnQodGhpcyksdGhpcy5zdGVuY2lsTWFzaz1uZXcgbXQodGhpcyksdGhpcy5zdGVuY2lsRnVuYz1uZXcgeXQodGhpcyksdGhpcy5zdGVuY2lsT3A9bmV3IHh0KHRoaXMpLHRoaXMuc3RlbmNpbFRlc3Q9bmV3IGJ0KHRoaXMpLHRoaXMuZGVwdGhSYW5nZT1uZXcgX3QodGhpcyksdGhpcy5kZXB0aFRlc3Q9bmV3IHd0KHRoaXMpLHRoaXMuZGVwdGhGdW5jPW5ldyBrdCh0aGlzKSx0aGlzLmJsZW5kPW5ldyBUdCh0aGlzKSx0aGlzLmJsZW5kRnVuYz1uZXcgQXQodGhpcyksdGhpcy5ibGVuZENvbG9yPW5ldyBNdCh0aGlzKSx0aGlzLnByb2dyYW09bmV3IFN0KHRoaXMpLHRoaXMubGluZVdpZHRoPW5ldyBFdCh0aGlzKSx0aGlzLmFjdGl2ZVRleHR1cmU9bmV3IEN0KHRoaXMpLHRoaXMudmlld3BvcnQ9bmV3IEx0KHRoaXMpLHRoaXMuYmluZEZyYW1lYnVmZmVyPW5ldyB6dCh0aGlzKSx0aGlzLmJpbmRSZW5kZXJidWZmZXI9bmV3IE90KHRoaXMpLHRoaXMuYmluZFRleHR1cmU9bmV3IEl0KHRoaXMpLHRoaXMuYmluZFZlcnRleEJ1ZmZlcj1uZXcgRHQodGhpcyksdGhpcy5iaW5kRWxlbWVudEJ1ZmZlcj1uZXcgUHQodGhpcyksdGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCYmbmV3IFJ0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFjaz1uZXcgRnQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYT1uZXcgQnQodGhpcyksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM9dC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpLHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiYodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXg9dC5nZXRQYXJhbWV0ZXIodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKSksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0PXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0JiZ0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKX07WXQucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBjdCh0aGlzLHQsZSl9LFl0LnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXhCdWZmZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgZnQodGhpcyx0LGUscil9LFl0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2wsaT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KGkpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUix0LGUsciksdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKSxpfSxZdC5wcm90b3R5cGUuY3JlYXRlRnJhbWVidWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFV0KHRoaXMsdCxlKX0sWXQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sb3Iscj10LmRlcHRoLG49dGhpcy5nbCxpPTA7ZSYmKGl8PW4uQ09MT1JfQlVGRkVSX0JJVCx0aGlzLmNsZWFyQ29sb3Iuc2V0KGUpLHRoaXMuY29sb3JNYXNrLnNldChbITAsITAsITAsITBdKSksdm9pZCAwIT09ciYmKGl8PW4uREVQVEhfQlVGRkVSX0JJVCx0aGlzLmNsZWFyRGVwdGguc2V0KHIpLHRoaXMuZGVwdGhNYXNrLnNldCghMCkpLG4uY2xlYXIoaSl9LFl0LnByb3RvdHlwZS5zZXREZXB0aE1vZGU9ZnVuY3Rpb24odCl7dC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5kZXB0aFRlc3Quc2V0KCEwKSx0aGlzLmRlcHRoRnVuYy5zZXQodC5mdW5jKSx0aGlzLmRlcHRoTWFzay5zZXQodC5tYXNrKSx0aGlzLmRlcHRoUmFuZ2Uuc2V0KHQucmFuZ2UpKTp0aGlzLmRlcHRoVGVzdC5zZXQoITEpfSxZdC5wcm90b3R5cGUuc2V0U3RlbmNpbE1vZGU9ZnVuY3Rpb24odCl7dC50ZXN0LmZ1bmMhPT10aGlzLmdsLkFMV0FZU3x8dC5tYXNrPyh0aGlzLnN0ZW5jaWxUZXN0LnNldCghMCksdGhpcy5zdGVuY2lsTWFzay5zZXQodC5tYXNrKSx0aGlzLnN0ZW5jaWxPcC5zZXQoW3QuZmFpbCx0LmRlcHRoRmFpbCx0LnBhc3NdKSx0aGlzLnN0ZW5jaWxGdW5jLnNldCh7ZnVuYzp0LnRlc3QuZnVuYyxyZWY6dC5yZWYsbWFzazp0LnRlc3QubWFza30pKTp0aGlzLnN0ZW5jaWxUZXN0LnNldCghMSl9LFl0LnByb3RvdHlwZS5zZXRDb2xvck1vZGU9ZnVuY3Rpb24oZSl7dC5kZWZhdWx0JDEwKGUuYmxlbmRGdW5jdGlvbixHdC5SZXBsYWNlKT90aGlzLmJsZW5kLnNldCghMSk6KHRoaXMuYmxlbmQuc2V0KCEwKSx0aGlzLmJsZW5kRnVuYy5zZXQoZS5ibGVuZEZ1bmN0aW9uKSx0aGlzLmJsZW5kQ29sb3Iuc2V0KGUuYmxlbmRDb2xvcikpLHRoaXMuY29sb3JNYXNrLnNldChlLm1hc2spfTt2YXIgV3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbil7dmFyIGk9dGhpcztlLmNhbGwodGhpcyksdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1uLHRoaXMub24oImRhdGEiLGZ1bmN0aW9uKHQpeyJzb3VyY2UiPT09dC5kYXRhVHlwZSYmIm1ldGFkYXRhIj09PXQuc291cmNlRGF0YVR5cGUmJihpLl9zb3VyY2VMb2FkZWQ9ITApLGkuX3NvdXJjZUxvYWRlZCYmIWkuX3BhdXNlZCYmInNvdXJjZSI9PT10LmRhdGFUeXBlJiYiY29udGVudCI9PT10LnNvdXJjZURhdGFUeXBlJiYoaS5yZWxvYWQoKSxpLnRyYW5zZm9ybSYmaS51cGRhdGUoaS50cmFuc2Zvcm0pKX0pLHRoaXMub24oImVycm9yIixmdW5jdGlvbigpe2kuX3NvdXJjZUVycm9yZWQ9ITB9KSx0aGlzLl9zb3VyY2U9aXQodCxyLG4sdGhpcyksdGhpcy5fdGlsZXM9e30sdGhpcy5fY2FjaGU9bmV3IGx0KDAsdGhpcy5fdW5sb2FkVGlsZS5iaW5kKHRoaXMpKSx0aGlzLl90aW1lcnM9e30sdGhpcy5fY2FjaGVUaW1lcnM9e30sdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1udWxsLHRoaXMuX2lzSWRSZW5kZXJhYmxlPXRoaXMuX2lzSWRSZW5kZXJhYmxlLmJpbmQodGhpcyksdGhpcy5fY292ZXJlZFRpbGVzPXt9fXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMuX21heFRpbGVDYWNoZVNpemU9dD90Ll9tYXhUaWxlQ2FjaGVTaXplOm51bGwsdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25BZGQmJnRoaXMuX3NvdXJjZS5vbkFkZCh0KX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUmJnRoaXMuX3NvdXJjZS5vblJlbW92ZSh0KX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fc291cmNlRXJyb3JlZClyZXR1cm4hMDtpZighdGhpcy5fc291cmNlTG9hZGVkKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYoImxvYWRlZCIhPT1lLnN0YXRlJiYiZXJyb3JlZCIhPT1lLnN0YXRlKXJldHVybiExfXJldHVybiEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BhdXNlZD0hMH0sci5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7aWYodGhpcy5fcGF1c2VkKXt2YXIgdD10aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTt0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdCYmdGhpcy5yZWxvYWQoKSx0aGlzLnRyYW5zZm9ybSYmdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pfX0sci5wcm90b3R5cGUuX2xvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0LGUpfSxyLnByb3RvdHlwZS5fdW5sb2FkVGlsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodCxmdW5jdGlvbigpe30pfSxyLnByb3RvdHlwZS5fYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUpcmV0dXJuIHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUodCxmdW5jdGlvbigpe30pfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlLnNlcmlhbGl6ZSgpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl9zb3VyY2UucHJlcGFyZSYmdGhpcy5fc291cmNlLnByZXBhcmUoKSx0aGlzLl90aWxlcyl0aGlzLl90aWxlc1tlXS51cGxvYWQodCl9LHIucHJvdG90eXBlLmdldElkcz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3RpbGVzKS5tYXAoTnVtYmVyKS5zb3J0KGZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5fdGlsZXNbcl0udGlsZUlELGE9ZS5fdGlsZXNbbl0udGlsZUlELG89bmV3IHQuZGVmYXVsdCQxKGkuY2Fub25pY2FsLngsaS5jYW5vbmljYWwueSkucm90YXRlKGUudHJhbnNmb3JtLmFuZ2xlKSxzPW5ldyB0LmRlZmF1bHQkMShhLmNhbm9uaWNhbC54LGEuY2Fub25pY2FsLnkpLnJvdGF0ZShlLnRyYW5zZm9ybS5hbmdsZSk7cmV0dXJuIGkub3ZlcnNjYWxlZFotYS5vdmVyc2NhbGVkWnx8cy55LW8ueXx8cy54LW8ueH0pfSxyLnByb3RvdHlwZS5nZXRSZW5kZXJhYmxlSWRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0SWRzKCkuZmlsdGVyKHRoaXMuX2lzSWRSZW5kZXJhYmxlKX0sci5wcm90b3R5cGUuaGFzUmVuZGVyYWJsZVBhcmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmRMb2FkZWRQYXJlbnQodCwwLHt9KTtyZXR1cm4hIWUmJnRoaXMuX2lzSWRSZW5kZXJhYmxlKGUudGlsZUlELmtleSl9LHIucHJvdG90eXBlLl9pc0lkUmVuZGVyYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZXNbdF0mJnRoaXMuX3RpbGVzW3RdLmhhc0RhdGEoKSYmIXRoaXMuX2NvdmVyZWRUaWxlc1t0XX0sci5wcm90b3R5cGUucmVsb2FkPWZ1bmN0aW9uKCl7aWYodGhpcy5fcGF1c2VkKXRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lPSEwO2Vsc2UgZm9yKHZhciB0IGluIHRoaXMuX2NhY2hlLnJlc2V0KCksdGhpcy5fdGlsZXMpdGhpcy5fcmVsb2FkVGlsZSh0LCJyZWxvYWRpbmciKX0sci5wcm90b3R5cGUuX3JlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl90aWxlc1t0XTtyJiYoImxvYWRpbmciIT09ci5zdGF0ZSYmKHIuc3RhdGU9ZSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLHQsZSkpKX0sci5wcm90b3R5cGUuX3RpbGVMb2FkZWQ9ZnVuY3Rpb24oZSxyLG4saSl7aWYoaSlyZXR1cm4gZS5zdGF0ZT0iZXJyb3JlZCIsdm9pZCg0MDQhPT1pLnN0YXR1cz90aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KGkse3RpbGU6ZX0pKTp0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSkpO2UudGltZUFkZGVkPWEubm93KCksImV4cGlyZWQiPT09biYmKGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb249ITApLHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihyLGUpLCJyYXN0ZXItZGVtIj09PXRoaXMuZ2V0U291cmNlKCkudHlwZSYmZS5kZW0mJnRoaXMuX2JhY2tmaWxsREVNKGUpLHRoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsdGlsZTplLGNvb3JkOmUudGlsZUlEfSkpLHRoaXMubWFwJiYodGhpcy5tYXAucGFpbnRlci50aWxlRXh0ZW50VkFPLnZhbz1udWxsKX0sci5wcm90b3R5cGUuX2JhY2tmaWxsREVNPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmdldFJlbmRlcmFibGVJZHMoKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodC5uZWlnaGJvcmluZ1RpbGVzJiZ0Lm5laWdoYm9yaW5nVGlsZXNbbl0pe3ZhciBpPXRoaXMuZ2V0VGlsZUJ5SUQobik7YSh0LGkpLGEoaSx0KX19ZnVuY3Rpb24gYSh0LGUpe3QubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwO3ZhciByPWUudGlsZUlELmNhbm9uaWNhbC54LXQudGlsZUlELmNhbm9uaWNhbC54LG49ZS50aWxlSUQuY2Fub25pY2FsLnktdC50aWxlSUQuY2Fub25pY2FsLnksaT1NYXRoLnBvdygyLHQudGlsZUlELmNhbm9uaWNhbC56KSxhPWUudGlsZUlELmtleTswPT09ciYmMD09PW58fE1hdGguYWJzKG4pPjF8fChNYXRoLmFicyhyKT4xJiYoMT09PU1hdGguYWJzKHIraSk/cis9aToxPT09TWF0aC5hYnMoci1pKSYmKHItPWkpKSxlLmRlbSYmdC5kZW0mJih0LmRlbS5iYWNrZmlsbEJvcmRlcihlLmRlbSxyLG4pLHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW2FdJiYodC5uZWlnaGJvcmluZ1RpbGVzW2FdLmJhY2tmaWxsZWQ9ITApKSl9fSxyLnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQua2V5KX0sci5wcm90b3R5cGUuZ2V0VGlsZUJ5SUQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdfSxyLnByb3RvdHlwZS5nZXRab29tPWZ1bmN0aW9uKHQpe3JldHVybiB0Lnpvb20rdC5zY2FsZVpvb20odC50aWxlU2l6ZS90aGlzLl9zb3VyY2UudGlsZVNpemUpfSxyLnByb3RvdHlwZS5fZmluZExvYWRlZENoaWxkcmVuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0hMTtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpe3ZhciBhPXRoaXMuX3RpbGVzW2ldO2lmKCEocltpXXx8IWEuaGFzRGF0YSgpfHxhLnRpbGVJRC5vdmVyc2NhbGVkWjw9dC5vdmVyc2NhbGVkWnx8YS50aWxlSUQub3ZlcnNjYWxlZFo+ZSkpe3ZhciBvPU1hdGgucG93KDIsYS50aWxlSUQuY2Fub25pY2FsLnotdC5jYW5vbmljYWwueik7aWYoTWF0aC5mbG9vcihhLnRpbGVJRC5jYW5vbmljYWwueC9vKT09PXQuY2Fub25pY2FsLngmJk1hdGguZmxvb3IoYS50aWxlSUQuY2Fub25pY2FsLnkvbyk9PT10LmNhbm9uaWNhbC55KWZvcihyW2ldPWEudGlsZUlELG49ITA7YSYmYS50aWxlSUQub3ZlcnNjYWxlZFotMT50Lm92ZXJzY2FsZWRaOyl7dmFyIHM9YS50aWxlSUQuc2NhbGVkVG8oYS50aWxlSUQub3ZlcnNjYWxlZFotMSk7aWYoIXMpYnJlYWs7KGE9dGhpcy5fdGlsZXNbcy5rZXldKSYmYS5oYXNEYXRhKCkmJihkZWxldGUgcltpXSxyW3Mua2V5XT1zKX19fXJldHVybiBufSxyLnByb3RvdHlwZS5maW5kTG9hZGVkUGFyZW50PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5vdmVyc2NhbGVkWi0xO24+PWU7bi0tKXt2YXIgaT10LnNjYWxlZFRvKG4pO2lmKCFpKXJldHVybjt2YXIgYT1TdHJpbmcoaS5rZXkpLG89dGhpcy5fdGlsZXNbYV07aWYobyYmby5oYXNEYXRhKCkpcmV0dXJuIHJbYV09aSxvO2lmKHRoaXMuX2NhY2hlLmhhcyhpKSlyZXR1cm4gclthXT1pLHRoaXMuX2NhY2hlLmdldChpKX19LHIucHJvdG90eXBlLnVwZGF0ZUNhY2hlU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT0oTWF0aC5jZWlsKHQud2lkdGgvdGhpcy5fc291cmNlLnRpbGVTaXplKSsxKSooTWF0aC5jZWlsKHQuaGVpZ2h0L3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSkscj1NYXRoLmZsb29yKDUqZSksbj0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX21heFRpbGVDYWNoZVNpemU/TWF0aC5taW4odGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSxyKTpyO3RoaXMuX2NhY2hlLnNldE1heFNpemUobil9LHIucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPSh0LSh2b2lkIDA9PT10aGlzLl9wcmV2TG5nP3Q6dGhpcy5fcHJldkxuZykpLzM2MCxyPU1hdGgucm91bmQoZSk7aWYodGhpcy5fcHJldkxuZz10LHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl7dmFyIGE9dGhpcy5fdGlsZXNbaV07YS50aWxlSUQ9YS50aWxlSUQudW53cmFwVG8oYS50aWxlSUQud3JhcCtyKSxuW2EudGlsZUlELmtleV09YX1mb3IodmFyIG8gaW4gdGhpcy5fdGlsZXM9bix0aGlzLl90aW1lcnMpY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tvXSksZGVsZXRlIHRoaXMuX3RpbWVyc1tvXTtmb3IodmFyIHMgaW4gdGhpcy5fdGlsZXMpe3ZhciBsPXRoaXMuX3RpbGVzW3NdO3RoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihzLGwpfX19LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2lmKHRoaXMudHJhbnNmb3JtPWUsdGhpcy5fc291cmNlTG9hZGVkJiYhdGhpcy5fcGF1c2VkKXt2YXIgaTt0aGlzLnVwZGF0ZUNhY2hlU2l6ZShlKSx0aGlzLmhhbmRsZVdyYXBKdW1wKHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcpLHRoaXMuX2NvdmVyZWRUaWxlcz17fSx0aGlzLnVzZWQ/dGhpcy5fc291cmNlLnRpbGVJRD9pPWUuZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzKHRoaXMuX3NvdXJjZS50aWxlSUQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLmNhbm9uaWNhbC56LGUud3JhcCxlLmNhbm9uaWNhbC56LGUuY2Fub25pY2FsLngsZS5jYW5vbmljYWwueSl9KTooaT1lLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOnRoaXMuX3NvdXJjZS50aWxlU2l6ZSxtaW56b29tOnRoaXMuX3NvdXJjZS5taW56b29tLG1heHpvb206dGhpcy5fc291cmNlLm1heHpvb20scm91bmRab29tOnRoaXMuX3NvdXJjZS5yb3VuZFpvb20scmVwYXJzZU92ZXJzY2FsZWQ6dGhpcy5fc291cmNlLnJlcGFyc2VPdmVyc2NhbGVkfSksdGhpcy5fc291cmNlLmhhc1RpbGUmJihpPWkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9zb3VyY2UuaGFzVGlsZSh0KX0pKSk6aT1bXTt2YXIgbyxzPSh0aGlzLl9zb3VyY2Uucm91bmRab29tP01hdGgucm91bmQ6TWF0aC5mbG9vcikodGhpcy5nZXRab29tKGUpKSxsPU1hdGgubWF4KHMtci5tYXhPdmVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksYz1NYXRoLm1heChzK3IubWF4VW5kZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSx1PXRoaXMuX3VwZGF0ZVJldGFpbmVkVGlsZXMoaSxzKSxmPXt9O2lmKFp0KHRoaXMuX3NvdXJjZS50eXBlKSlmb3IodmFyIGg9T2JqZWN0LmtleXModSkscD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgZD1oW3BdLGc9dVtkXSx2PW4uX3RpbGVzW2RdO2lmKHYmJih2b2lkIDA9PT12LmZhZGVFbmRUaW1lfHx2LmZhZGVFbmRUaW1lPj1hLm5vdygpKSl7bi5fZmluZExvYWRlZENoaWxkcmVuKGcsYyx1KSYmKHVbZF09Zyk7dmFyIG09bi5maW5kTG9hZGVkUGFyZW50KGcsbCxmKTttJiZuLl9hZGRUaWxlKG0udGlsZUlEKX19Zm9yKG8gaW4gZil1W29dfHwobi5fY292ZXJlZFRpbGVzW29dPSEwKTtmb3IobyBpbiBmKXVbb109ZltvXTtmb3IodmFyIHk9dC5rZXlzRGlmZmVyZW5jZSh0aGlzLl90aWxlcyx1KSx4PTA7eDx5Lmxlbmd0aDt4Kyspbi5fcmVtb3ZlVGlsZSh5W3hdKX19LHIucHJvdG90eXBlLl91cGRhdGVSZXRhaW5lZFRpbGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGk9e30sYT1NYXRoLm1heChlLXIubWF4T3Zlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLG89TWF0aC5tYXgoZStyLm1heFVuZGVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSkscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdLGM9dGhpcy5fYWRkVGlsZShsKSx1PSExO2lmKGMuaGFzRGF0YSgpKW5bbC5rZXldPWw7ZWxzZXt1PWMud2FzUmVxdWVzdGVkKCksbltsLmtleV09bDt2YXIgZj0hMDtpZihlKzE+dGhpcy5fc291cmNlLm1heHpvb20pe3ZhciBoPWwuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pWzBdLHA9dGhpcy5nZXRUaWxlKGgpO3AmJnAuaGFzRGF0YSgpP25baC5rZXldPWg6Zj0hMX1lbHNle3RoaXMuX2ZpbmRMb2FkZWRDaGlsZHJlbihsLG8sbik7Zm9yKHZhciBkPWwuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pLGc9MDtnPGQubGVuZ3RoO2crKylpZighbltkW2ddLmtleV0pe2Y9ITE7YnJlYWt9fWlmKCFmKWZvcih2YXIgdj1sLm92ZXJzY2FsZWRaLTE7dj49YTstLXYpe3ZhciBtPWwuc2NhbGVkVG8odik7aWYoaVttLmtleV0pYnJlYWs7aWYoaVttLmtleV09ITAsIShjPXRoaXMuZ2V0VGlsZShtKSkmJnUmJihjPXRoaXMuX2FkZFRpbGUobSkpLGMmJihuW20ua2V5XT1tLHU9Yy53YXNSZXF1ZXN0ZWQoKSxjLmhhc0RhdGEoKSkpYnJlYWt9fX1yZXR1cm4gbn0sci5wcm90b3R5cGUuX2FkZFRpbGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fdGlsZXNbZS5rZXldO2lmKHIpcmV0dXJuIHI7KHI9dGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKGUpKSYmKHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihlLmtleSxyKSxyLnRpbGVJRD1lKTt2YXIgbj1Cb29sZWFuKHIpO3JldHVybiBufHwocj1uZXcgc3QoZSx0aGlzLl9zb3VyY2UudGlsZVNpemUqZS5vdmVyc2NhbGVGYWN0b3IoKSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLGUua2V5LHIuc3RhdGUpKSkscj8oci51c2VzKyssdGhpcy5fdGlsZXNbZS5rZXldPXIsbnx8dGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7dGlsZTpyLGNvb3JkOnIudGlsZUlELGRhdGFUeXBlOiJzb3VyY2UifSkpLHIpOm51bGx9LHIucHJvdG90eXBlLl9zZXRUaWxlUmVsb2FkVGltZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3QgaW4gdGhpcy5fdGltZXJzJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1t0XSksZGVsZXRlIHRoaXMuX3RpbWVyc1t0XSk7dmFyIG49ZS5nZXRFeHBpcnlUaW1lb3V0KCk7biYmKHRoaXMuX3RpbWVyc1t0XT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5fcmVsb2FkVGlsZSh0LCJleHBpcmVkIiksZGVsZXRlIHIuX3RpbWVyc1t0XX0sbikpfSxyLnByb3RvdHlwZS5fcmVtb3ZlVGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlc1t0XTtlJiYoZS51c2VzLS0sZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuX3RpbWVyc1t0XSYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbdF0pLGRlbGV0ZSB0aGlzLl90aW1lcnNbdF0pLGUudXNlcz4wfHwoZS5oYXNEYXRhKCk/dGhpcy5fY2FjaGUuYWRkKGUudGlsZUlELGUsZS5nZXRFeHBpcnlUaW1lb3V0KCkpOihlLmFib3J0ZWQ9ITAsdGhpcy5fYWJvcnRUaWxlKGUpLHRoaXMuX3VubG9hZFRpbGUoZSkpKSl9LHIucHJvdG90eXBlLmNsZWFyVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCk7dGhpcy5fY2FjaGUucmVzZXQoKX0sci5wcm90b3R5cGUudGlsZXNJbj1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPXRoaXMuZ2V0SWRzKCksYT0xLzAsbz0xLzAscz0tMS8wLGw9LTEvMCxjPWVbMF0uem9vbSx1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBmPWVbdV07YT1NYXRoLm1pbihhLGYuY29sdW1uKSxvPU1hdGgubWluKG8sZi5yb3cpLHM9TWF0aC5tYXgocyxmLmNvbHVtbiksbD1NYXRoLm1heChsLGYucm93KX1mb3IodmFyIGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIHA9dGhpcy5fdGlsZXNbaVtoXV0sZD1wLnRpbGVJRCxnPU1hdGgucG93KDIsdGhpcy50cmFuc2Zvcm0uem9vbS1wLnRpbGVJRC5vdmVyc2NhbGVkWiksdj1yKnAucXVlcnlQYWRkaW5nKnQuZGVmYXVsdCQ4L3AudGlsZVNpemUvZyxtPVtYdChkLG5ldyB0LmRlZmF1bHQkMTcoYSxvLGMpKSxYdChkLG5ldyB0LmRlZmF1bHQkMTcocyxsLGMpKV07aWYobVswXS54LXY8dC5kZWZhdWx0JDgmJm1bMF0ueS12PHQuZGVmYXVsdCQ4JiZtWzFdLngrdj49MCYmbVsxXS55K3Y+PTApe2Zvcih2YXIgeT1bXSx4PTA7eDxlLmxlbmd0aDt4KyspeS5wdXNoKFh0KGQsZVt4XSkpO24ucHVzaCh7dGlsZTpwLHRpbGVJRDpkLHF1ZXJ5R2VvbWV0cnk6W3ldLHNjYWxlOmd9KX19cmV0dXJuIG59LHIucHJvdG90eXBlLmdldFZpc2libGVDb29yZGluYXRlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhpcy5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll90aWxlc1tlXS50aWxlSUR9KSxyPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtpLnBvc01hdHJpeD10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoaS50b1Vud3JhcHBlZCgpKX1yZXR1cm4gZX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7aWYoWnQodGhpcy5fc291cmNlLnR5cGUpKWZvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYodm9pZCAwIT09ZS5mYWRlRW5kVGltZSYmZS5mYWRlRW5kVGltZT49YS5ub3coKSlyZXR1cm4hMH1yZXR1cm4hMX0scn0odC5FdmVudGVkKTtmdW5jdGlvbiBYdChlLHIpe3ZhciBuPXIuem9vbVRvKGUuY2Fub25pY2FsLnopO3JldHVybiBuZXcgdC5kZWZhdWx0JDEoKG4uY29sdW1uLShlLmNhbm9uaWNhbC54K2Uud3JhcCpNYXRoLnBvdygyLGUuY2Fub25pY2FsLnopKSkqdC5kZWZhdWx0JDgsKG4ucm93LWUuY2Fub25pY2FsLnkpKnQuZGVmYXVsdCQ4KX1mdW5jdGlvbiBadCh0KXtyZXR1cm4icmFzdGVyIj09PXR8fCJpbWFnZSI9PT10fHwidmlkZW8iPT09dH1mdW5jdGlvbiAkdCgpe3JldHVybiBuZXcgdC5kZWZhdWx0LldvcmtlcihFbi53b3JrZXJVcmwpfVd0Lm1heE92ZXJ6b29taW5nPTEwLFd0Lm1heFVuZGVyem9vbWluZz0zO3ZhciBKdCxLdD1mdW5jdGlvbigpe3RoaXMuYWN0aXZlPXt9fTtmdW5jdGlvbiBRdChlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiBlKSJyZWYiIT09aSYmKG5baV09ZVtpXSk7cmV0dXJuIHQuZGVmYXVsdCQxOC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QgaW4gciYmKG5bdF09clt0XSl9KSxufWZ1bmN0aW9uIHRlKHQpe3Q9dC5zbGljZSgpO2Zvcih2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl0uaWRdPXRbcl07Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspInJlZiJpbiB0W25dJiYodFtuXT1RdCh0W25dLGVbdFtuXS5yZWZdKSk7cmV0dXJuIHR9S3QucHJvdG90eXBlLmFjcXVpcmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMud29ya2Vycyl7dmFyIGU9RW4ud29ya2VyQ291bnQ7Zm9yKHRoaXMud29ya2Vycz1bXTt0aGlzLndvcmtlcnMubGVuZ3RoPGU7KXRoaXMud29ya2Vycy5wdXNoKG5ldyAkdCl9cmV0dXJuIHRoaXMuYWN0aXZlW3RdPSEwLHRoaXMud29ya2Vycy5zbGljZSgpfSxLdC5wcm90b3R5cGUucmVsZWFzZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5hY3RpdmVbdF0sMD09PU9iamVjdC5rZXlzKHRoaXMuYWN0aXZlKS5sZW5ndGgmJih0aGlzLndvcmtlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnRlcm1pbmF0ZSgpfSksdGhpcy53b3JrZXJzPW51bGwpfTt2YXIgZWU9e3NldFN0eWxlOiJzZXRTdHlsZSIsYWRkTGF5ZXI6ImFkZExheWVyIixyZW1vdmVMYXllcjoicmVtb3ZlTGF5ZXIiLHNldFBhaW50UHJvcGVydHk6InNldFBhaW50UHJvcGVydHkiLHNldExheW91dFByb3BlcnR5OiJzZXRMYXlvdXRQcm9wZXJ0eSIsc2V0RmlsdGVyOiJzZXRGaWx0ZXIiLGFkZFNvdXJjZToiYWRkU291cmNlIixyZW1vdmVTb3VyY2U6InJlbW92ZVNvdXJjZSIsc2V0R2VvSlNPTlNvdXJjZURhdGE6InNldEdlb0pTT05Tb3VyY2VEYXRhIixzZXRMYXllclpvb21SYW5nZToic2V0TGF5ZXJab29tUmFuZ2UiLHNldExheWVyUHJvcGVydHk6InNldExheWVyUHJvcGVydHkiLHNldENlbnRlcjoic2V0Q2VudGVyIixzZXRab29tOiJzZXRab29tIixzZXRCZWFyaW5nOiJzZXRCZWFyaW5nIixzZXRQaXRjaDoic2V0UGl0Y2giLHNldFNwcml0ZToic2V0U3ByaXRlIixzZXRHbHlwaHM6InNldEdseXBocyIsc2V0VHJhbnNpdGlvbjoic2V0VHJhbnNpdGlvbiIsc2V0TGlnaHQ6InNldExpZ2h0In07ZnVuY3Rpb24gcmUodCxlLHIpe3IucHVzaCh7Y29tbWFuZDplZS5hZGRTb3VyY2UsYXJnczpbdCxlW3RdXX0pfWZ1bmN0aW9uIG5lKHQsZSxyKXtlLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlU291cmNlLGFyZ3M6W3RdfSksclt0XT0hMH1mdW5jdGlvbiBpZSh0LGUscixuKXtuZSh0LHIsbikscmUodCxlLHIpfWZ1bmN0aW9uIGFlKGUscixuKXt2YXIgaTtmb3IoaSBpbiBlW25dKWlmKGVbbl0uaGFzT3duUHJvcGVydHkoaSkmJiJkYXRhIiE9PWkmJiF0LmRlZmF1bHQkMTAoZVtuXVtpXSxyW25dW2ldKSlyZXR1cm4hMTtmb3IoaSBpbiByW25dKWlmKHJbbl0uaGFzT3duUHJvcGVydHkoaSkmJiJkYXRhIiE9PWkmJiF0LmRlZmF1bHQkMTAoZVtuXVtpXSxyW25dW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBvZShlLHIsbixpLGEsbyl7dmFyIHM7Zm9yKHMgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZmF1bHQkMTAoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSk7Zm9yKHMgaW4gcilyLmhhc093blByb3BlcnR5KHMpJiYhZS5oYXNPd25Qcm9wZXJ0eShzKSYmKHQuZGVmYXVsdCQxMChlW3NdLHJbc10pfHxuLnB1c2goe2NvbW1hbmQ6byxhcmdzOltpLHMscltzXSxhXX0pKX1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiB0W2UuaWRdPWUsdH12YXIgY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuYm94Q2VsbHM9W10saT10aGlzLmNpcmNsZUNlbGxzPVtdO3RoaXMueENlbGxDb3VudD1NYXRoLmNlaWwodC9yKSx0aGlzLnlDZWxsQ291bnQ9TWF0aC5jZWlsKGUvcik7Zm9yKHZhciBhPTA7YTx0aGlzLnhDZWxsQ291bnQqdGhpcy55Q2VsbENvdW50O2ErKyluLnB1c2goW10pLGkucHVzaChbXSk7dGhpcy5jaXJjbGVLZXlzPVtdLHRoaXMuYm94S2V5cz1bXSx0aGlzLmJib3hlcz1bXSx0aGlzLmNpcmNsZXM9W10sdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy54U2NhbGU9dGhpcy54Q2VsbENvdW50L3QsdGhpcy55U2NhbGU9dGhpcy55Q2VsbENvdW50L2UsdGhpcy5ib3hVaWQ9MCx0aGlzLmNpcmNsZVVpZD0wfTtjZS5wcm90b3R5cGUua2V5c0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJveEtleXMubGVuZ3RoK3RoaXMuY2lyY2xlS2V5cy5sZW5ndGh9LGNlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydEJveENlbGwsdGhpcy5ib3hVaWQrKyksdGhpcy5ib3hLZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sY2UucHJvdG90eXBlLmluc2VydENpcmNsZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLl9mb3JFYWNoQ2VsbChlLW4sci1uLGUrbixyK24sdGhpcy5faW5zZXJ0Q2lyY2xlQ2VsbCx0aGlzLmNpcmNsZVVpZCsrKSx0aGlzLmNpcmNsZUtleXMucHVzaCh0KSx0aGlzLmNpcmNsZXMucHVzaChlKSx0aGlzLmNpcmNsZXMucHVzaChyKSx0aGlzLmNpcmNsZXMucHVzaChuKX0sY2UucHJvdG90eXBlLl9pbnNlcnRCb3hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmJveENlbGxzW2ldLnB1c2goYSl9LGNlLnByb3RvdHlwZS5faW5zZXJ0Q2lyY2xlQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jaXJjbGVDZWxsc1tpXS5wdXNoKGEpfSxjZS5wcm90b3R5cGUuX3F1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYocjwwfHx0PnRoaXMud2lkdGh8fG48MHx8ZT50aGlzLmhlaWdodClyZXR1cm4haSYmW107dmFyIGE9W107aWYodDw9MCYmZTw9MCYmdGhpcy53aWR0aDw9ciYmdGhpcy5oZWlnaHQ8PW4pe2lmKGkpcmV0dXJuITA7Zm9yKHZhciBvPTA7bzx0aGlzLmJveEtleXMubGVuZ3RoO28rKylhLnB1c2goe2tleTp0aGlzLmJveEtleXNbb10seDE6dGhpcy5iYm94ZXNbNCpvXSx5MTp0aGlzLmJib3hlc1s0Km8rMV0seDI6dGhpcy5iYm94ZXNbNCpvKzJdLHkyOnRoaXMuYmJveGVzWzQqbyszXX0pO2Zvcih2YXIgcz0wO3M8dGhpcy5jaXJjbGVLZXlzLmxlbmd0aDtzKyspe3ZhciBsPXRoaXMuY2lyY2xlc1szKnNdLGM9dGhpcy5jaXJjbGVzWzMqcysxXSx1PXRoaXMuY2lyY2xlc1szKnMrMl07YS5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW3NdLHgxOmwtdSx5MTpjLXUseDI6bCt1LHkyOmMrdX0pfX1lbHNle3ZhciBmPXtoaXRUZXN0Omksc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTt0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxhLGYpfXJldHVybiBpP2EubGVuZ3RoPjA6YX0sY2UucHJvdG90eXBlLl9xdWVyeUNpcmNsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LXIsYT10K3Isbz1lLXIscz1lK3I7aWYoYTwwfHxpPnRoaXMud2lkdGh8fHM8MHx8bz50aGlzLmhlaWdodClyZXR1cm4hbiYmW107dmFyIGw9W10sYz17aGl0VGVzdDpuLGNpcmNsZTp7eDp0LHk6ZSxyYWRpdXM6cn0sc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwoaSxvLGEscyx0aGlzLl9xdWVyeUNlbGxDaXJjbGUsbCxjKSxuP2wubGVuZ3RoPjA6bH0sY2UucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9xdWVyeSh0LGUscixuLCExKX0sY2UucHJvdG90eXBlLmhpdFRlc3Q9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX3F1ZXJ5KHQsZSxyLG4sITApfSxjZS5wcm90b3R5cGUuaGl0VGVzdENpcmNsZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3F1ZXJ5Q2lyY2xlKHQsZSxyLCEwKX0sY2UucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9by5zZWVuVWlkcyxsPXRoaXMuYm94Q2VsbHNbaV07aWYobnVsbCE9PWwpZm9yKHZhciBjPXRoaXMuYmJveGVzLHU9MCxmPWw7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO2lmKCFzLmJveFtoXSl7cy5ib3hbaF09ITA7dmFyIHA9NCpoO2lmKHQ8PWNbcCsyXSYmZTw9Y1twKzNdJiZyPj1jW3ArMF0mJm4+PWNbcCsxXSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO2EucHVzaCh7a2V5OnRoaXMuYm94S2V5c1toXSx4MTpjW3BdLHkxOmNbcCsxXSx4MjpjW3ArMl0seTI6Y1twKzNdfSl9fX12YXIgZD10aGlzLmNpcmNsZUNlbGxzW2ldO2lmKG51bGwhPT1kKWZvcih2YXIgZz10aGlzLmNpcmNsZXMsdj0wLG09ZDt2PG0ubGVuZ3RoO3YrPTEpe3ZhciB5PW1bdl07aWYoIXMuY2lyY2xlW3ldKXtzLmNpcmNsZVt5XT0hMDt2YXIgeD0zKnk7aWYodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUoZ1t4XSxnW3grMV0sZ1t4KzJdLHQsZSxyLG4pKXtpZihvLmhpdFRlc3QpcmV0dXJuIGEucHVzaCghMCksITA7dmFyIGI9Z1t4XSxfPWdbeCsxXSx3PWdbeCsyXTthLnB1c2goe2tleTp0aGlzLmNpcmNsZUtleXNbeV0seDE6Yi13LHkxOl8tdyx4MjpiK3cseTI6Xyt3fSl9fX19LGNlLnByb3RvdHlwZS5fcXVlcnlDZWxsQ2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPW8uY2lyY2xlLGw9by5zZWVuVWlkcyxjPXRoaXMuYm94Q2VsbHNbaV07aWYobnVsbCE9PWMpZm9yKHZhciB1PXRoaXMuYmJveGVzLGY9MCxoPWM7ZjxoLmxlbmd0aDtmKz0xKXt2YXIgcD1oW2ZdO2lmKCFsLmJveFtwXSl7bC5ib3hbcF09ITA7dmFyIGQ9NCpwO2lmKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKHMueCxzLnkscy5yYWRpdXMsdVtkKzBdLHVbZCsxXSx1W2QrMl0sdVtkKzNdKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19dmFyIGc9dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09Zylmb3IodmFyIHY9dGhpcy5jaXJjbGVzLG09MCx5PWc7bTx5Lmxlbmd0aDttKz0xKXt2YXIgeD15W21dO2lmKCFsLmNpcmNsZVt4XSl7bC5jaXJjbGVbeF09ITA7dmFyIGI9Myp4O2lmKHRoaXMuX2NpcmNsZXNDb2xsaWRlKHZbYl0sdltiKzFdLHZbYisyXSxzLngscy55LHMucmFkaXVzKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19fSxjZS5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHQpLGw9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChlKSxjPXRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQociksdT10aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKG4pLGY9cztmPD1jO2YrKylmb3IodmFyIGg9bDtoPD11O2grKyl7dmFyIHA9dGhpcy54Q2VsbENvdW50KmgrZjtpZihpLmNhbGwodGhpcyx0LGUscixuLHAsYSxvKSlyZXR1cm59fSxjZS5wcm90b3R5cGUuX2NvbnZlcnRUb1hDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy54Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueFNjYWxlKSkpfSxjZS5wcm90b3R5cGUuX2NvbnZlcnRUb1lDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy55Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueVNjYWxlKSkpfSxjZS5wcm90b3R5cGUuX2NpcmNsZXNDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1uLXQscz1pLWUsbD1yK2E7cmV0dXJuIGwqbD5vKm8rcypzfSxjZS5wcm90b3R5cGUuX2NpcmNsZUFuZFJlY3RDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPShhLW4pLzIsbD1NYXRoLmFicyh0LShuK3MpKTtpZihsPnMrcilyZXR1cm4hMTt2YXIgYz0oby1pKS8yLHU9TWF0aC5hYnMoZS0oaStjKSk7aWYodT5jK3IpcmV0dXJuITE7aWYobDw9c3x8dTw9YylyZXR1cm4hMDt2YXIgZj1sLXMsaD11LWM7cmV0dXJuIGYqZitoKmg8PXIqcn07dmFyIHVlPXQuZGVmYXVsdCQxOS5sYXlvdXQ7ZnVuY3Rpb24gZmUoZSxyLG4saSxhKXt2YXIgbz10Lm1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO3JldHVybiByPyh0Lm1hdDQuaWRlbnRpdHkobyksdC5tYXQ0LnNjYWxlKG8sbyxbMS9hLDEvYSwxXSksbnx8dC5tYXQ0LnJvdGF0ZVoobyxvLGkuYW5nbGUpKToodC5tYXQ0LnNjYWxlKG8sbyxbaS53aWR0aC8yLC1pLmhlaWdodC8yLDFdKSx0Lm1hdDQudHJhbnNsYXRlKG8sbyxbMSwtMSwwXSksdC5tYXQ0Lm11bHRpcGx5KG8sbyxlKSksb31mdW5jdGlvbiBoZShlLHIsbixpLGEpe3ZhciBvPXQubWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSk7cmV0dXJuIHI/KHQubWF0NC5tdWx0aXBseShvLG8sZSksdC5tYXQ0LnNjYWxlKG8sbyxbYSxhLDFdKSxufHx0Lm1hdDQucm90YXRlWihvLG8sLWkuYW5nbGUpKToodC5tYXQ0LnNjYWxlKG8sbyxbMSwtMSwxXSksdC5tYXQ0LnRyYW5zbGF0ZShvLG8sWy0xLC0xLDBdKSx0Lm1hdDQuc2NhbGUobyxvLFsyL2kud2lkdGgsMi9pLmhlaWdodCwxXSkpLG99ZnVuY3Rpb24gcGUoZSxyKXt2YXIgbj1bZS54LGUueSwwLDFdO2tlKG4sbixyKTt2YXIgaT1uWzNdO3JldHVybntwb2ludDpuZXcgdC5kZWZhdWx0JDEoblswXS9pLG5bMV0vaSksc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhOml9fWZ1bmN0aW9uIGRlKHQsZSl7dmFyIHI9dFswXS90WzNdLG49dFsxXS90WzNdO3JldHVybiByPj0tZVswXSYmcjw9ZVswXSYmbj49LWVbMV0mJm48PWVbMV19ZnVuY3Rpb24gZ2UoZSxyLG4saSxhLG8scyxsKXt2YXIgYz1pP2UudGV4dFNpemVEYXRhOmUuaWNvblNpemVEYXRhLHU9dC5ldmFsdWF0ZVNpemVGb3Jab29tKGMsbi50cmFuc2Zvcm0uem9vbSx1ZS5wcm9wZXJ0aWVzW2k/InRleHQtc2l6ZSI6Imljb24tc2l6ZSJdKSxmPVsyNTYvbi53aWR0aCoyKzEsMjU2L24uaGVpZ2h0KjIrMV0saD1pP2UudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk6ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtoLmNsZWFyKCk7Zm9yKHZhciBwPWUubGluZVZlcnRleEFycmF5LGQ9aT9lLnRleHQucGxhY2VkU3ltYm9sQXJyYXk6ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LGc9bi50cmFuc2Zvcm0ud2lkdGgvbi50cmFuc2Zvcm0uaGVpZ2h0LHY9ITEsbT0wO208ZC5sZW5ndGg7bSsrKXt2YXIgeT1kLmdldChtKTtpZih5LmhpZGRlbnx8eS53cml0aW5nTW9kZT09PXQuV3JpdGluZ01vZGUudmVydGljYWwmJiF2KXdlKHkubnVtR2x5cGhzLGgpO2Vsc2V7dj0hMTt2YXIgeD1beS5hbmNob3JYLHkuYW5jaG9yWSwwLDFdO2lmKHQudmVjNC50cmFuc2Zvcm1NYXQ0KHgseCxyKSxkZSh4LGYpKXt2YXIgYj0uNSt4WzNdL24udHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UqLjUsXz10LmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoYyx1LHkpLHc9cz9fKmI6Xy9iLGs9bmV3IHQuZGVmYXVsdCQxKHkuYW5jaG9yWCx5LmFuY2hvclkpLFQ9cGUoayxhKS5wb2ludCxBPXt9LE09eWUoeSx3LCExLGwscixhLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsaCxULGssQSxnKTt2PU0udXNlVmVydGljYWwsKE0ubm90RW5vdWdoUm9vbXx8dnx8TS5uZWVkc0ZsaXBwaW5nJiZ5ZSh5LHcsITAsbCxyLGEsbyxlLmdseXBoT2Zmc2V0QXJyYXkscCxoLFQsayxBLGcpLm5vdEVub3VnaFJvb20pJiZ3ZSh5Lm51bUdseXBocyxoKX1lbHNlIHdlKHkubnVtR2x5cGhzLGgpfX1pP2UudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoaCk6ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShoKX1mdW5jdGlvbiB2ZSh0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dmFyIGg9cy5nbHlwaFN0YXJ0SW5kZXgrcy5udW1HbHlwaHMscD1zLmxpbmVTdGFydEluZGV4LGQ9cy5saW5lU3RhcnRJbmRleCtzLmxpbmVMZW5ndGgsZz1lLmdldG9mZnNldFgocy5nbHlwaFN0YXJ0SW5kZXgpLHY9ZS5nZXRvZmZzZXRYKGgtMSksbT1iZSh0KmcscixuLGksYSxvLHMuc2VnbWVudCxwLGQsbCxjLHUsZik7aWYoIW0pcmV0dXJuIG51bGw7dmFyIHk9YmUodCp2LHIsbixpLGEsbyxzLnNlZ21lbnQscCxkLGwsYyx1LGYpO3JldHVybiB5P3tmaXJzdDptLGxhc3Q6eX06bnVsbH1mdW5jdGlvbiBtZShlLHIsbixpKXtyZXR1cm4gZT09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbCYmTWF0aC5hYnMobi55LXIueSk+TWF0aC5hYnMobi54LXIueCkqaT97dXNlVmVydGljYWw6ITB9OihlPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9yLnk8bi55OnIueD5uLngpP3tuZWVkc0ZsaXBwaW5nOiEwfTpudWxsfWZ1bmN0aW9uIHllKGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCl7dmFyIGcsdj1yLzI0LG09ZS5saW5lT2Zmc2V0WCpyLHk9ZS5saW5lT2Zmc2V0WSpyO2lmKGUubnVtR2x5cGhzPjEpe3ZhciB4PWUuZ2x5cGhTdGFydEluZGV4K2UubnVtR2x5cGhzLGI9ZS5saW5lU3RhcnRJbmRleCxfPWUubGluZVN0YXJ0SW5kZXgrZS5saW5lTGVuZ3RoLHc9dmUodixsLG0seSxuLGYsaCxlLGMsbyxwLCExKTtpZighdylyZXR1cm57bm90RW5vdWdoUm9vbTohMH07dmFyIGs9cGUody5maXJzdC5wb2ludCxzKS5wb2ludCxUPXBlKHcubGFzdC5wb2ludCxzKS5wb2ludDtpZihpJiYhbil7dmFyIEE9bWUoZS53cml0aW5nTW9kZSxrLFQsZCk7aWYoQSlyZXR1cm4gQX1nPVt3LmZpcnN0XTtmb3IodmFyIE09ZS5nbHlwaFN0YXJ0SW5kZXgrMTtNPHgtMTtNKyspZy5wdXNoKGJlKHYqbC5nZXRvZmZzZXRYKE0pLG0seSxuLGYsaCxlLnNlZ21lbnQsYixfLGMsbyxwLCExKSk7Zy5wdXNoKHcubGFzdCl9ZWxzZXtpZihpJiYhbil7dmFyIFM9cGUoaCxhKS5wb2ludCxFPWUubGluZVN0YXJ0SW5kZXgrZS5zZWdtZW50KzEsQz1uZXcgdC5kZWZhdWx0JDEoYy5nZXR4KEUpLGMuZ2V0eShFKSksTD1wZShDLGEpLHo9TC5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE+MD9MLnBvaW50OnhlKGgsQyxTLDEsYSksTz1tZShlLndyaXRpbmdNb2RlLFMseixkKTtpZihPKXJldHVybiBPfXZhciBJPWJlKHYqbC5nZXRvZmZzZXRYKGUuZ2x5cGhTdGFydEluZGV4KSxtLHksbixmLGgsZS5zZWdtZW50LGUubGluZVN0YXJ0SW5kZXgsZS5saW5lU3RhcnRJbmRleCtlLmxpbmVMZW5ndGgsYyxvLHAsITEpO2lmKCFJKXJldHVybntub3RFbm91Z2hSb29tOiEwfTtnPVtJXX1mb3IodmFyIEQ9MCxQPWc7RDxQLmxlbmd0aDtEKz0xKXt2YXIgUj1QW0RdO3QuYWRkRHluYW1pY0F0dHJpYnV0ZXModSxSLnBvaW50LFIuYW5nbGUpfXJldHVybnt9fWZ1bmN0aW9uIHhlKHQsZSxyLG4saSl7dmFyIGE9cGUodC5hZGQodC5zdWIoZSkuX3VuaXQoKSksaSkucG9pbnQsbz1yLnN1YihhKTtyZXR1cm4gci5hZGQoby5fbXVsdChuL28ubWFnKCkpKX1mdW5jdGlvbiBiZShlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwKXt2YXIgZD1pP2UtcjplK3IsZz1kPjA/MTotMSx2PTA7aSYmKGcqPS0xLHY9TWF0aC5QSSksZzwwJiYodis9TWF0aC5QSSk7Zm9yKHZhciBtPWc+MD9sK3M6bCtzKzEseT1tLHg9YSxiPWEsXz0wLHc9MCxrPU1hdGguYWJzKGQpO18rdzw9azspe2lmKChtKz1nKTxsfHxtPj1jKXJldHVybiBudWxsO2lmKGI9eCx2b2lkIDA9PT0oeD1oW21dKSl7dmFyIFQ9bmV3IHQuZGVmYXVsdCQxKHUuZ2V0eChtKSx1LmdldHkobSkpLEE9cGUoVCxmKTtpZihBLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYT4wKXg9aFttXT1BLnBvaW50O2Vsc2V7dmFyIE09bS1nO3g9eGUoMD09PV8/bzpuZXcgdC5kZWZhdWx0JDEodS5nZXR4KE0pLHUuZ2V0eShNKSksVCxiLGstXysxLGYpfX1fKz13LHc9Yi5kaXN0KHgpfXZhciBTPShrLV8pL3csRT14LnN1YihiKSxDPUUubXVsdChTKS5fYWRkKGIpO3JldHVybiBDLl9hZGQoRS5fdW5pdCgpLl9wZXJwKCkuX211bHQobipnKSkse3BvaW50OkMsYW5nbGU6ditNYXRoLmF0YW4yKHgueS1iLnkseC54LWIueCksdGlsZURpc3RhbmNlOnA/e3ByZXZUaWxlRGlzdGFuY2U6bS1nPT09eT8wOnUuZ2V0dGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IobS1nKSxsYXN0U2VnbWVudFZpZXdwb3J0RGlzdGFuY2U6ay1ffTpudWxsfX12YXIgX2U9bmV3IEZsb2F0MzJBcnJheShbLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDBdKTtmdW5jdGlvbiB3ZSh0LGUpe2Zvcih2YXIgcj0wO3I8dDtyKyspe3ZhciBuPWUubGVuZ3RoO2UucmVzaXplKG4rNCksZS5mbG9hdDMyLnNldChfZSwzKm4pfX1mdW5jdGlvbiBrZSh0LGUscil7dmFyIG49ZVswXSxpPWVbMV07cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzEyXSx0WzFdPXJbMV0qbityWzVdKmkrclsxM10sdFszXT1yWzNdKm4rcls3XSppK3JbMTVdLHR9dC5kZWZhdWx0JDIwLm1hdDQ7dmFyIFRlPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1lJiYoZT1uZXcgY2UodC53aWR0aCsyMDAsdC5oZWlnaHQrMjAwLDI1KSksdm9pZCAwPT09ciYmKHI9bmV3IGNlKHQud2lkdGgrMjAwLHQuaGVpZ2h0KzIwMCwyNSkpLHRoaXMudHJhbnNmb3JtPXQsdGhpcy5ncmlkPWUsdGhpcy5pZ25vcmVkR3JpZD1yLHRoaXMucGl0Y2hmYWN0b3I9TWF0aC5jb3ModC5fcGl0Y2gpKnQuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnk9dC53aWR0aCsxMDAsdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeT10LmhlaWdodCsxMDB9O2Z1bmN0aW9uIEFlKHQsZSxyKXt0W2UrNF09cj8xOjB9ZnVuY3Rpb24gTWUoZSxyLG4pe3JldHVybiByKih0LmRlZmF1bHQkOC8oZS50aWxlU2l6ZSpNYXRoLnBvdygyLG4tZS50aWxlSUQub3ZlcnNjYWxlZFopKSl9VGUucHJvdG90eXBlLnBsYWNlQ29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8obix0LmFuY2hvclBvaW50WCx0LmFuY2hvclBvaW50WSksYT1yKmkucGVyc3BlY3RpdmVSYXRpbyxvPXQueDEqYStpLnBvaW50Lngscz10LnkxKmEraS5wb2ludC55LGw9dC54MiphK2kucG9pbnQueCxjPXQueTIqYStpLnBvaW50Lnk7cmV0dXJuIWUmJnRoaXMuZ3JpZC5oaXRUZXN0KG8scyxsLGMpP3tib3g6W10sb2Zmc2NyZWVuOiExfTp7Ym94OltvLHMsbCxjXSxvZmZzY3JlZW46dGhpcy5pc09mZnNjcmVlbihvLHMsbCxjKX19LFRlLnByb3RvdHlwZS5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWk/MTpuL3RoaXMucGl0Y2hmYWN0b3Isbz10Lmxhc3RTZWdtZW50Vmlld3BvcnREaXN0YW5jZSpyO3JldHVybiB0LnByZXZUaWxlRGlzdGFuY2UrbysoYS0xKSpvKk1hdGguYWJzKE1hdGguc2luKGUpKX0sVGUucHJvdG90eXBlLnBsYWNlQ29sbGlzaW9uQ2lyY2xlcz1mdW5jdGlvbihlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwKXt2YXIgZD1bXSxnPXRoaXMucHJvamVjdEFuY2hvcih1LG8uYW5jaG9yWCxvLmFuY2hvclkpLHY9Yy8yNCxtPW8ubGluZU9mZnNldFgqYyx5PW8ubGluZU9mZnNldFkqYyx4PW5ldyB0LmRlZmF1bHQkMShvLmFuY2hvclgsby5hbmNob3JZKSxiPXZlKHYsbCxtLHksITEscGUoeCxmKS5wb2ludCx4LG8scyxmLHt9LCEwKSxfPSExLHc9ITAsaz1nLnBlcnNwZWN0aXZlUmF0aW8qaSxUPTEvKGkqbiksQT0wLE09MDtiJiYoQT10aGlzLmFwcHJveGltYXRlVGlsZURpc3RhbmNlKGIuZmlyc3QudGlsZURpc3RhbmNlLGIuZmlyc3QuYW5nbGUsVCxnLmNhbWVyYURpc3RhbmNlLHApLE09dGhpcy5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZShiLmxhc3QudGlsZURpc3RhbmNlLGIubGFzdC5hbmdsZSxULGcuY2FtZXJhRGlzdGFuY2UscCkpO2Zvcih2YXIgUz0wO1M8ZS5sZW5ndGg7Uys9NSl7dmFyIEU9ZVtTXSxDPWVbUysxXSxMPWVbUysyXSx6PWVbUyszXTtpZighYnx8ejwtQXx8ej5NKUFlKGUsUywhMSk7ZWxzZXt2YXIgTz10aGlzLnByb2plY3RQb2ludCh1LEUsQyksST1MKms7aWYoZC5sZW5ndGg+MCl7dmFyIEQ9Ty54LWRbZC5sZW5ndGgtNF0sUD1PLnktZFtkLmxlbmd0aC0zXTtpZihJKkkqMj5EKkQrUCpQJiZTKzg8ZS5sZW5ndGgpe3ZhciBSPWVbUys4XTtpZihSPi1BJiZSPE0pe0FlKGUsUywhMSk7Y29udGludWV9fX12YXIgRj1TLzU7aWYoZC5wdXNoKE8ueCxPLnksSSxGKSxBZShlLFMsITApLHc9dyYmdGhpcy5pc09mZnNjcmVlbihPLngtSSxPLnktSSxPLngrSSxPLnkrSSksIXImJnRoaXMuZ3JpZC5oaXRUZXN0Q2lyY2xlKE8ueCxPLnksSSkpe2lmKCFoKXJldHVybntjaXJjbGVzOltdLG9mZnNjcmVlbjohMX07Xz0hMH19fXJldHVybntjaXJjbGVzOl8/W106ZCxvZmZzY3JlZW46d319LFRlLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkU3ltYm9scz1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmdyaWQua2V5c0xlbmd0aCgpJiYwPT09dGhpcy5pZ25vcmVkR3JpZC5rZXlzTGVuZ3RoKCkpcmV0dXJue307Zm9yKHZhciByPVtdLG49MS8wLGk9MS8wLGE9LTEvMCxvPS0xLzAscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT1uZXcgdC5kZWZhdWx0JDEoYy54KzEwMCxjLnkrMTAwKTtuPU1hdGgubWluKG4sdS54KSxpPU1hdGgubWluKGksdS55KSxhPU1hdGgubWF4KGEsdS54KSxvPU1hdGgubWF4KG8sdS55KSxyLnB1c2godSl9Zm9yKHZhciBmPXt9LGg9e30scD0wLGQ9dGhpcy5ncmlkLnF1ZXJ5KG4saSxhLG8pLmNvbmNhdCh0aGlzLmlnbm9yZWRHcmlkLnF1ZXJ5KG4saSxhLG8pKTtwPGQubGVuZ3RoO3ArPTEpe3ZhciBnPWRbcF0sdj1nLmtleTtpZih2b2lkIDA9PT1mW3YuYnVja2V0SW5zdGFuY2VJZF0mJihmW3YuYnVja2V0SW5zdGFuY2VJZF09e30pLCFmW3YuYnVja2V0SW5zdGFuY2VJZF1bdi5mZWF0dXJlSW5kZXhdKXt2YXIgbT1bbmV3IHQuZGVmYXVsdCQxKGcueDEsZy55MSksbmV3IHQuZGVmYXVsdCQxKGcueDIsZy55MSksbmV3IHQuZGVmYXVsdCQxKGcueDIsZy55MiksbmV3IHQuZGVmYXVsdCQxKGcueDEsZy55MildO3QucG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHIsbSkmJihmW3YuYnVja2V0SW5zdGFuY2VJZF1bdi5mZWF0dXJlSW5kZXhdPSEwLHZvaWQgMD09PWhbdi5idWNrZXRJbnN0YW5jZUlkXSYmKGhbdi5idWNrZXRJbnN0YW5jZUlkXT1bXSksaFt2LmJ1Y2tldEluc3RhbmNlSWRdLnB1c2godi5mZWF0dXJlSW5kZXgpKX19cmV0dXJuIGh9LFRlLnByb3RvdHlwZS5pbnNlcnRDb2xsaXNpb25Cb3g9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9e2J1Y2tldEluc3RhbmNlSWQ6cixmZWF0dXJlSW5kZXg6bn07KGU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQpLmluc2VydChpLHRbMF0sdFsxXSx0WzJdLHRbM10pfSxUZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9ZT90aGlzLmlnbm9yZWRHcmlkOnRoaXMuZ3JpZCxhPXtidWNrZXRJbnN0YW5jZUlkOnIsZmVhdHVyZUluZGV4Om59LG89MDtvPHQubGVuZ3RoO28rPTQpaS5pbnNlcnRDaXJjbGUoYSx0W29dLHRbbysxXSx0W28rMl0pfSxUZS5wcm90b3R5cGUucHJvamVjdEFuY2hvcj1mdW5jdGlvbih0LGUscil7dmFyIG49W2UsciwwLDFdO3JldHVybiBrZShuLG4sdCkse3BlcnNwZWN0aXZlUmF0aW86LjUrdGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9uWzNdKi41LGNhbWVyYURpc3RhbmNlOm5bM119fSxUZS5wcm90b3R5cGUucHJvamVjdFBvaW50PWZ1bmN0aW9uKGUscixuKXt2YXIgaT1bcixuLDAsMV07cmV0dXJuIGtlKGksaSxlKSxuZXcgdC5kZWZhdWx0JDEoKGlbMF0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLndpZHRoKzEwMCwoLWlbMV0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLmhlaWdodCsxMDApfSxUZS5wcm90b3R5cGUucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW89ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVtyLG4sMCwxXTtyZXR1cm4ga2UoaSxpLGUpLHtwb2ludDpuZXcgdC5kZWZhdWx0JDEoKGlbMF0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLndpZHRoKzEwMCwoLWlbMV0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLmhlaWdodCsxMDApLHBlcnNwZWN0aXZlUmF0aW86LjUrdGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9pWzNdKi41fX0sVGUucHJvdG90eXBlLmlzT2Zmc2NyZWVuPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiByPDEwMHx8dD49dGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5fHxuPDEwMHx8ZT50aGlzLnNjcmVlbkJvdHRvbUJvdW5kYXJ5fTt2YXIgU2U9dC5kZWZhdWx0JDE5LmxheW91dCxFZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLm9wYWNpdHk9dD9NYXRoLm1heCgwLE1hdGgubWluKDEsdC5vcGFjaXR5Kyh0LnBsYWNlZD9lOi1lKSkpOm4mJnI/MTowLHRoaXMucGxhY2VkPXJ9O0VlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5vcGFjaXR5JiYhdGhpcy5wbGFjZWR9O3ZhciBDZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMudGV4dD1uZXcgRWUodD90LnRleHQ6bnVsbCxlLHIsaSksdGhpcy5pY29uPW5ldyBFZSh0P3QuaWNvbjpudWxsLGUsbixpKX07Q2UucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dC5pc0hpZGRlbigpJiZ0aGlzLmljb24uaXNIaWRkZW4oKX07dmFyIExlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCx0aGlzLmljb249ZSx0aGlzLnNraXBGYWRlPXJ9LHplPWZ1bmN0aW9uKHQsZSl7dGhpcy50cmFuc2Zvcm09dC5jbG9uZSgpLHRoaXMuY29sbGlzaW9uSW5kZXg9bmV3IFRlKHRoaXMudHJhbnNmb3JtKSx0aGlzLnBsYWNlbWVudHM9e30sdGhpcy5vcGFjaXRpZXM9e30sdGhpcy5zdGFsZT0hMSx0aGlzLmZhZGVEdXJhdGlvbj1lLHRoaXMucmV0YWluZWRRdWVyeURhdGE9e319O2Z1bmN0aW9uIE9lKHQsZSxyKXt0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowKX16ZS5wcm90b3R5cGUucGxhY2VMYXllclRpbGU9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9ci5nZXRCdWNrZXQoZSksbz1yLmxhdGVzdEZlYXR1cmVJbmRleDtpZihhJiZvJiZlLmlkPT09YS5sYXllcklkc1swXSl7dmFyIHM9ci5jb2xsaXNpb25Cb3hBcnJheSxsPWEubGF5ZXJzWzBdLmxheW91dCxjPU1hdGgucG93KDIsdGhpcy50cmFuc2Zvcm0uem9vbS1yLnRpbGVJRC5vdmVyc2NhbGVkWiksdT1yLnRpbGVTaXplL3QuZGVmYXVsdCQ4LGY9dGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHIudGlsZUlELnRvVW53cmFwcGVkKCkpLGg9ZmUoZiwibWFwIj09PWwuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLCJtYXAiPT09bC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IiksdGhpcy50cmFuc2Zvcm0sTWUociwxLHRoaXMudHJhbnNmb3JtLnpvb20pKSxwPWZlKGYsIm1hcCI9PT1sLmdldCgiaWNvbi1waXRjaC1hbGlnbm1lbnQiKSwibWFwIj09PWwuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpLHRoaXMudHJhbnNmb3JtLE1lKHIsMSx0aGlzLnRyYW5zZm9ybS56b29tKSk7dGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVthLmJ1Y2tldEluc3RhbmNlSWRdPW5ldyBmdW5jdGlvbih0LGUscixuLGkpe3RoaXMuYnVja2V0SW5zdGFuY2VJZD10LHRoaXMuZmVhdHVyZUluZGV4PWUsdGhpcy5zb3VyY2VMYXllckluZGV4PXIsdGhpcy5idWNrZXRJbmRleD1uLHRoaXMudGlsZUlEPWl9KGEuYnVja2V0SW5zdGFuY2VJZCxvLGEuc291cmNlTGF5ZXJJbmRleCxhLmluZGV4LHIudGlsZUlEKSx0aGlzLnBsYWNlTGF5ZXJCdWNrZXQoYSxmLGgscCxjLHUsbixpLHMpfX0semUucHJvdG90eXBlLnBsYWNlTGF5ZXJCdWNrZXQ9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMpe2Zvcih2YXIgdT1lLmxheWVyc1swXS5sYXlvdXQsZj10LmV2YWx1YXRlU2l6ZUZvclpvb20oZS50ZXh0U2l6ZURhdGEsdGhpcy50cmFuc2Zvcm0uem9vbSxTZS5wcm9wZXJ0aWVzWyJ0ZXh0LXNpemUiXSksaD0hZS5oYXNUZXh0RGF0YSgpfHx1LmdldCgidGV4dC1vcHRpb25hbCIpLHA9IWUuaGFzSWNvbkRhdGEoKXx8dS5nZXQoImljb24tb3B0aW9uYWwiKSxkPTAsZz1lLnN5bWJvbEluc3RhbmNlcztkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF07aWYoIWxbdi5jcm9zc1RpbGVJRF0pe3ZhciBtPXZvaWQgMCE9PXYuZmVhdHVyZS50ZXh0LHk9dm9pZCAwIT09di5mZWF0dXJlLmljb24seD0hMCxiPW51bGwsXz1udWxsLHc9bnVsbCxrPTAsVD0wO3YuY29sbGlzaW9uQXJyYXlzfHwodi5jb2xsaXNpb25BcnJheXM9ZS5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKGMsdi50ZXh0Qm94U3RhcnRJbmRleCx2LnRleHRCb3hFbmRJbmRleCx2Lmljb25Cb3hTdGFydEluZGV4LHYuaWNvbkJveEVuZEluZGV4KSksdi5jb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCYmKGs9di5jb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCksdi5jb2xsaXNpb25BcnJheXMudGV4dEJveCYmKG09KGI9dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveCh2LmNvbGxpc2lvbkFycmF5cy50ZXh0Qm94LHUuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKSxvLHIpKS5ib3gubGVuZ3RoPjAseD14JiZiLm9mZnNjcmVlbik7dmFyIEE9di5jb2xsaXNpb25BcnJheXMudGV4dENpcmNsZXM7aWYoQSl7dmFyIE09ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldCh2LnBsYWNlZFRleHRTeW1ib2xJbmRpY2VzWzBdKSxTPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShlLnRleHRTaXplRGF0YSxmLE0pO189dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkNpcmNsZXMoQSx1LmdldCgidGV4dC1hbGxvdy1vdmVybGFwIiksYSxvLHYua2V5LE0sZS5saW5lVmVydGV4QXJyYXksZS5nbHlwaE9mZnNldEFycmF5LFMscixuLHMsIm1hcCI9PT11LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSksbT11LmdldCgidGV4dC1hbGxvdy1vdmVybGFwIil8fF8uY2lyY2xlcy5sZW5ndGg+MCx4PXgmJl8ub2Zmc2NyZWVufXYuY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXgmJihUPXYuY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXgpLHYuY29sbGlzaW9uQXJyYXlzLmljb25Cb3gmJih5PSh3PXRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3godi5jb2xsaXNpb25BcnJheXMuaWNvbkJveCx1LmdldCgiaWNvbi1hbGxvdy1vdmVybGFwIiksbyxyKSkuYm94Lmxlbmd0aD4wLHg9eCYmdy5vZmZzY3JlZW4pLGh8fHA/cD9ofHwoeT15JiZtKTptPXkmJm06eT1tPXkmJm0sbSYmYiYmdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3goYi5ib3gsdS5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLGUuYnVja2V0SW5zdGFuY2VJZCxrKSx5JiZ3JiZ0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveCh3LmJveCx1LmdldCgiaWNvbi1pZ25vcmUtcGxhY2VtZW50IiksZS5idWNrZXRJbnN0YW5jZUlkLFQpLG0mJl8mJnRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhfLmNpcmNsZXMsdS5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLGUuYnVja2V0SW5zdGFuY2VJZCxrKSx0aGlzLnBsYWNlbWVudHNbdi5jcm9zc1RpbGVJRF09bmV3IExlKG0seSx4fHxlLmp1c3RSZWxvYWRlZCksbFt2LmNyb3NzVGlsZUlEXT0hMH19ZS5qdXN0UmVsb2FkZWQ9ITF9LHplLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbW1pdFRpbWU9ZTt2YXIgcj0hMSxuPXQmJjAhPT10aGlzLmZhZGVEdXJhdGlvbj8odGhpcy5jb21taXRUaW1lLXQuY29tbWl0VGltZSkvdGhpcy5mYWRlRHVyYXRpb246MSxpPXQ/dC5vcGFjaXRpZXM6e307Zm9yKHZhciBhIGluIHRoaXMucGxhY2VtZW50cyl7dmFyIG89dGhpcy5wbGFjZW1lbnRzW2FdLHM9aVthXTtzPyh0aGlzLm9wYWNpdGllc1thXT1uZXcgQ2UocyxuLG8udGV4dCxvLmljb24pLHI9cnx8by50ZXh0IT09cy50ZXh0LnBsYWNlZHx8by5pY29uIT09cy5pY29uLnBsYWNlZCk6KHRoaXMub3BhY2l0aWVzW2FdPW5ldyBDZShudWxsLG4sby50ZXh0LG8uaWNvbixvLnNraXBGYWRlKSxyPXJ8fG8udGV4dHx8by5pY29uKX1mb3IodmFyIGwgaW4gaSl7dmFyIGM9aVtsXTtpZighdGhpcy5vcGFjaXRpZXNbbF0pe3ZhciB1PW5ldyBDZShjLG4sITEsITEpO3UuaXNIaWRkZW4oKXx8KHRoaXMub3BhY2l0aWVzW2xdPXUscj1yfHxjLnRleHQucGxhY2VkfHxjLmljb24ucGxhY2VkKX19cj90aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPWU6Im51bWJlciIhPXR5cGVvZiB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lJiYodGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZT10P3QubGFzdFBsYWNlbWVudENoYW5nZVRpbWU6ZSl9LHplLnByb3RvdHlwZS51cGRhdGVMYXllck9wYWNpdGllcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEuZ2V0QnVja2V0KHQpO28mJmEubGF0ZXN0RmVhdHVyZUluZGV4JiZ0LmlkPT09by5sYXllcklkc1swXSYmdGhpcy51cGRhdGVCdWNrZXRPcGFjaXRpZXMobyxyLGEuY29sbGlzaW9uQm94QXJyYXkpfX0semUucHJvdG90eXBlLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcz1mdW5jdGlvbih0LGUscil7dC5oYXNUZXh0RGF0YSgpJiZ0LnRleHQub3BhY2l0eVZlcnRleEFycmF5LmNsZWFyKCksdC5oYXNJY29uRGF0YSgpJiZ0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5LmNsZWFyKCksdC5oYXNDb2xsaXNpb25Cb3hEYXRhKCkmJnQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCksdC5oYXNDb2xsaXNpb25DaXJjbGVEYXRhKCkmJnQuY29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCk7Zm9yKHZhciBuPXQubGF5ZXJzWzBdLmxheW91dCxpPW5ldyBDZShudWxsLDAsITEsITEsITApLGE9bmV3IENlKG51bGwsMCxuLmdldCgidGV4dC1hbGxvdy1vdmVybGFwIiksbi5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpLCEwKSxvPTA7bzx0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7bysrKXt2YXIgcz10LnN5bWJvbEluc3RhbmNlc1tvXSxsPWVbcy5jcm9zc1RpbGVJRF0sYz10aGlzLm9wYWNpdGllc1tzLmNyb3NzVGlsZUlEXTtsP2M9aTpjfHwoYz1hLHRoaXMub3BhY2l0aWVzW3MuY3Jvc3NUaWxlSURdPWMpLGVbcy5jcm9zc1RpbGVJRF09ITA7dmFyIHU9cy5udW1HbHlwaFZlcnRpY2VzPjB8fHMubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzPjAsZj1zLm51bUljb25WZXJ0aWNlcz4wO2lmKHUpe2Zvcih2YXIgaD1qZShjLnRleHQpLHA9KHMubnVtR2x5cGhWZXJ0aWNlcytzLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcykvNCxkPTA7ZDxwO2QrKyl0LnRleHQub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGgpO2Zvcih2YXIgZz0wLHY9cy5wbGFjZWRUZXh0U3ltYm9sSW5kaWNlcztnPHYubGVuZ3RoO2crPTEpe3ZhciBtPXZbZ107dC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChtKS5oaWRkZW49Yy50ZXh0LmlzSGlkZGVuKCl9fWlmKGYpe2Zvcih2YXIgeT1qZShjLmljb24pLHg9MDt4PHMubnVtSWNvblZlcnRpY2VzLzQ7eCsrKXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soeSk7dC5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChvKS5oaWRkZW49Yy5pY29uLmlzSGlkZGVuKCl9cy5jb2xsaXNpb25BcnJheXN8fChzLmNvbGxpc2lvbkFycmF5cz10LmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMocixzLnRleHRCb3hTdGFydEluZGV4LHMudGV4dEJveEVuZEluZGV4LHMuaWNvbkJveFN0YXJ0SW5kZXgscy5pY29uQm94RW5kSW5kZXgpKTt2YXIgYj1zLmNvbGxpc2lvbkFycmF5cztpZihiKXtiLnRleHRCb3gmJnQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZPZSh0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLnRleHQucGxhY2VkLCExKSxiLmljb25Cb3gmJnQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZPZSh0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLmljb24ucGxhY2VkLCExKTt2YXIgXz1iLnRleHRDaXJjbGVzO2lmKF8mJnQuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpKWZvcih2YXIgdz0wO3c8Xy5sZW5ndGg7dys9NSl7dmFyIGs9bHx8MD09PV9bdys0XTtPZSh0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLnRleHQucGxhY2VkLGspfX19dC5zb3J0RmVhdHVyZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpLHRoaXMucmV0YWluZWRRdWVyeURhdGFbdC5idWNrZXRJbnN0YW5jZUlkXSYmKHRoaXMucmV0YWluZWRRdWVyeURhdGFbdC5idWNrZXRJbnN0YW5jZUlkXS5mZWF0dXJlU29ydE9yZGVyPXQuZmVhdHVyZVNvcnRPcmRlciksdC5oYXNUZXh0RGF0YSgpJiZ0LnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlciYmdC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0LnRleHQub3BhY2l0eVZlcnRleEFycmF5KSx0Lmhhc0ljb25EYXRhKCkmJnQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyJiZ0Lmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkpLHQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZ0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJnQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KSx0Lmhhc0NvbGxpc2lvbkNpcmNsZURhdGEoKSYmdC5jb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyJiZ0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSl9LHplLnByb3RvdHlwZS5zeW1ib2xGYWRlQ2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MToodC10aGlzLmNvbW1pdFRpbWUpL3RoaXMuZmFkZUR1cmF0aW9ufSx6ZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhbGV8fHQtdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTx0aGlzLmZhZGVEdXJhdGlvbn0semUucHJvdG90eXBlLnN0aWxsUmVjZW50PWZ1bmN0aW9uKHQpe3JldHVybiJ1bmRlZmluZWQiIT09dGhpcy5jb21taXRUaW1lJiZ0aGlzLmNvbW1pdFRpbWUrdGhpcy5mYWRlRHVyYXRpb24+dH0semUucHJvdG90eXBlLnNldFN0YWxlPWZ1bmN0aW9uKCl7dGhpcy5zdGFsZT0hMH07dmFyIEllPU1hdGgucG93KDIsMjUpLERlPU1hdGgucG93KDIsMjQpLFBlPU1hdGgucG93KDIsMTcpLFJlPU1hdGgucG93KDIsMTYpLEZlPU1hdGgucG93KDIsOSksQmU9TWF0aC5wb3coMiw4KSxOZT1NYXRoLnBvdygyLDEpO2Z1bmN0aW9uIGplKHQpe2lmKDA9PT10Lm9wYWNpdHkmJiF0LnBsYWNlZClyZXR1cm4gMDtpZigxPT09dC5vcGFjaXR5JiZ0LnBsYWNlZClyZXR1cm4gNDI5NDk2NzI5NTt2YXIgZT10LnBsYWNlZD8xOjAscj1NYXRoLmZsb29yKDEyNyp0Lm9wYWNpdHkpO3JldHVybiByKkllK2UqRGUrcipQZStlKlJlK3IqRmUrZSpCZStyKk5lK2V9dmFyIFZlPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudFRpbGVJbmRleD0wLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHM9e319O1ZlLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcig7dGhpcy5fY3VycmVudFRpbGVJbmRleDx0Lmxlbmd0aDspe3ZhciBhPXRbdGhpcy5fY3VycmVudFRpbGVJbmRleF07aWYoZS5wbGFjZUxheWVyVGlsZShuLGEscix0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzKSx0aGlzLl9jdXJyZW50VGlsZUluZGV4KyssaSgpKXJldHVybiEwfX07dmFyIFVlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5wbGFjZW1lbnQ9bmV3IHplKHQsaSksdGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4PWUubGVuZ3RoLTEsdGhpcy5fZm9yY2VGdWxsUGxhY2VtZW50PXIsdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzPW4sdGhpcy5fZG9uZT0hMX07VWUucHJvdG90eXBlLmlzRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb25lfSxVZS5wcm90b3R5cGUuY29udGludWVQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10aGlzLGk9YS5ub3coKSxvPWZ1bmN0aW9uKCl7dmFyIHQ9YS5ub3coKS1pO3JldHVybiFuLl9mb3JjZUZ1bGxQbGFjZW1lbnQmJnQ+Mn07dGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4Pj0wOyl7dmFyIHM9ZVt0W24uX2N1cnJlbnRQbGFjZW1lbnRJbmRleF1dLGw9bi5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgudHJhbnNmb3JtLnpvb207aWYoInN5bWJvbCI9PT1zLnR5cGUmJighcy5taW56b29tfHxzLm1pbnpvb208PWwpJiYoIXMubWF4em9vbXx8cy5tYXh6b29tPmwpKXtpZihuLl9pblByb2dyZXNzTGF5ZXJ8fChuLl9pblByb2dyZXNzTGF5ZXI9bmV3IFZlKSxuLl9pblByb2dyZXNzTGF5ZXIuY29udGludWVQbGFjZW1lbnQocltzLnNvdXJjZV0sbi5wbGFjZW1lbnQsbi5fc2hvd0NvbGxpc2lvbkJveGVzLHMsbykpcmV0dXJuO2RlbGV0ZSBuLl9pblByb2dyZXNzTGF5ZXJ9bi5fY3VycmVudFBsYWNlbWVudEluZGV4LS19dGhpcy5fZG9uZT0hMH0sVWUucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnBsYWNlbWVudC5jb21taXQodCxlKSx0aGlzLnBsYWNlbWVudH07dmFyIHFlPTUxMi90LmRlZmF1bHQkOC8yLEhlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlcz17fSx0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9cjtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5rZXk7dGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dfHwodGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dPVtdKSx0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbb10ucHVzaCh7Y3Jvc3NUaWxlSUQ6YS5jcm9zc1RpbGVJRCxjb29yZDp0aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKGEsdCl9KX19O0hlLnByb3RvdHlwZS5nZXRTY2FsZWRDb29yZGluYXRlcz1mdW5jdGlvbihlLHIpe3ZhciBuPXIuY2Fub25pY2FsLnotdGhpcy50aWxlSUQuY2Fub25pY2FsLnosaT1xZS9NYXRoLnBvdygyLG4pLGE9ZS5hbmNob3I7cmV0dXJue3g6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueCp0LmRlZmF1bHQkOCthLngpKmkpLHk6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueSp0LmRlZmF1bHQkOCthLnkpKmkpfX0sSGUucHJvdG90eXBlLmZpbmRNYXRjaGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy50aWxlSUQuY2Fub25pY2FsLno8ZS5jYW5vbmljYWwuej8xOk1hdGgucG93KDIsdGhpcy50aWxlSUQuY2Fub25pY2FsLnotZS5jYW5vbmljYWwueiksaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07aWYoIW8uY3Jvc3NUaWxlSUQpe3ZhciBzPXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tvLmtleV07aWYocylmb3IodmFyIGw9dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhvLGUpLGM9MCx1PXM7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdO2lmKE1hdGguYWJzKGYuY29vcmQueC1sLngpPD1uJiZNYXRoLmFicyhmLmNvb3JkLnktbC55KTw9biYmIXJbZi5jcm9zc1RpbGVJRF0pe3JbZi5jcm9zc1RpbGVJRF09ITAsby5jcm9zc1RpbGVJRD1mLmNyb3NzVGlsZUlEO2JyZWFrfX19fX07dmFyIEdlPWZ1bmN0aW9uKCl7dGhpcy5tYXhDcm9zc1RpbGVJRD0wfTtHZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMubWF4Q3Jvc3NUaWxlSUR9O3ZhciBZZT1mdW5jdGlvbigpe3RoaXMuaW5kZXhlcz17fSx0aGlzLnVzZWRDcm9zc1RpbGVJRHM9e30sdGhpcy5sbmc9MH07WWUucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQoKHQtdGhpcy5sbmcpLzM2MCk7aWYoMCE9PWUpZm9yKHZhciByIGluIHRoaXMuaW5kZXhlcyl7dmFyIG49dGhpcy5pbmRleGVzW3JdLGk9e307Zm9yKHZhciBhIGluIG4pe3ZhciBvPW5bYV07by50aWxlSUQ9by50aWxlSUQudW53cmFwVG8oby50aWxlSUQud3JhcCtlKSxpW28udGlsZUlELmtleV09b310aGlzLmluZGV4ZXNbcl09aX10aGlzLmxuZz10fSxZZS5wcm90b3R5cGUuYWRkQnVja2V0PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJnRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pe2lmKHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0uYnVja2V0SW5zdGFuY2VJZD09PWUuYnVja2V0SW5zdGFuY2VJZClyZXR1cm4hMTt0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh0Lm92ZXJzY2FsZWRaLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pfWZvcih2YXIgbj0wLGk9ZS5zeW1ib2xJbnN0YW5jZXM7bjxpLmxlbmd0aDtuKz0xKWlbbl0uY3Jvc3NUaWxlSUQ9MDt0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl18fCh0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl09e30pO3ZhciBhPXRoaXMudXNlZENyb3NzVGlsZUlEc1t0Lm92ZXJzY2FsZWRaXTtmb3IodmFyIG8gaW4gdGhpcy5pbmRleGVzKXt2YXIgcz10aGlzLmluZGV4ZXNbb107aWYoTnVtYmVyKG8pPnQub3ZlcnNjYWxlZFopZm9yKHZhciBsIGluIHMpe3ZhciBjPXNbbF07Yy50aWxlSUQuaXNDaGlsZE9mKHQpJiZjLmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsYSl9ZWxzZXt2YXIgdT1zW3Quc2NhbGVkVG8oTnVtYmVyKG8pKS5rZXldO3UmJnUuZmluZE1hdGNoZXMoZS5zeW1ib2xJbnN0YW5jZXMsdCxhKX19Zm9yKHZhciBmPTAsaD1lLnN5bWJvbEluc3RhbmNlcztmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl07cC5jcm9zc1RpbGVJRHx8KHAuY3Jvc3NUaWxlSUQ9ci5nZW5lcmF0ZSgpLGFbcC5jcm9zc1RpbGVJRF09ITApfXJldHVybiB2b2lkIDA9PT10aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl09e30pLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV09bmV3IEhlKHQsZS5zeW1ib2xJbnN0YW5jZXMsZS5idWNrZXRJbnN0YW5jZUlkKSwhMH0sWWUucHJvdG90eXBlLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXMpZm9yKHZhciBuPTAsaT1lLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbcl07bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2RlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdF1bYS5jcm9zc1RpbGVJRF19fSxZZS5wcm90b3R5cGUucmVtb3ZlU3RhbGVCdWNrZXRzPWZ1bmN0aW9uKHQpe3ZhciBlPSExO2Zvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXTtmb3IodmFyIGkgaW4gbil0W25baV0uYnVja2V0SW5zdGFuY2VJZF18fCh0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyhyLG5baV0pLGRlbGV0ZSBuW2ldLGU9ITApfXJldHVybiBlfTt2YXIgV2U9ZnVuY3Rpb24oKXt0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLmNyb3NzVGlsZUlEcz1uZXcgR2UsdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkPTAsdGhpcy5idWNrZXRzSW5DdXJyZW50UGxhY2VtZW50PXt9fTtXZS5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdO3ZvaWQgMD09PW4mJihuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdPW5ldyBZZSk7dmFyIGk9ITEsYT17fTtuLmhhbmRsZVdyYXBKdW1wKHIpO2Zvcih2YXIgbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLmdldEJ1Y2tldCh0KTtjJiZ0LmlkPT09Yy5sYXllcklkc1swXSYmKGMuYnVja2V0SW5zdGFuY2VJZHx8KGMuYnVja2V0SW5zdGFuY2VJZD0rK3RoaXMubWF4QnVja2V0SW5zdGFuY2VJZCksbi5hZGRCdWNrZXQobC50aWxlSUQsYyx0aGlzLmNyb3NzVGlsZUlEcykmJihpPSEwKSxhW2MuYnVja2V0SW5zdGFuY2VJZF09ITApfXJldHVybiBuLnJlbW92ZVN0YWxlQnVja2V0cyhhKSYmKGk9ITApLGl9LFdlLnByb3RvdHlwZS5wcnVuZVVudXNlZExheWVycz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ITB9KSx0aGlzLmxheWVySW5kZXhlcyllW3JdfHxkZWxldGUgdGhpcy5sYXllckluZGV4ZXNbcl19O3ZhciBYZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmVtaXRWYWxpZGF0aW9uRXJyb3JzKGUsciYmci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuInNvdXJjZS5jYW52YXMiIT09dC5pZGVudGlmaWVyfSkpfSxaZT10LnBpY2soZWUsWyJhZGRMYXllciIsInJlbW92ZUxheWVyIiwic2V0UGFpbnRQcm9wZXJ0eSIsInNldExheW91dFByb3BlcnR5Iiwic2V0RmlsdGVyIiwiYWRkU291cmNlIiwicmVtb3ZlU291cmNlIiwic2V0TGF5ZXJab29tUmFuZ2UiLCJzZXRMaWdodCIsInNldFRyYW5zaXRpb24iLCJzZXRHZW9KU09OU291cmNlRGF0YSJdKSwkZT10LnBpY2soZWUsWyJzZXRDZW50ZXIiLCJzZXRab29tIiwic2V0QmVhcmluZyIsInNldFBpdGNoIl0pLEplPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobixpKXt2YXIgYT10aGlzO3ZvaWQgMD09PWkmJihpPXt9KSxlLmNhbGwodGhpcyksdGhpcy5tYXA9bix0aGlzLmRpc3BhdGNoZXI9bmV3IHEoKEp0fHwoSnQ9bmV3IEt0KSxKdCksdGhpcyksdGhpcy5pbWFnZU1hbmFnZXI9bmV3IE8sdGhpcy5nbHlwaE1hbmFnZXI9bmV3IEIobi5fdHJhbnNmb3JtUmVxdWVzdCxpLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSksdGhpcy5saW5lQXRsYXM9bmV3IFUoMjU2LDUxMiksdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgV2UsdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX29yZGVyPVtdLHRoaXMuc291cmNlQ2FjaGVzPXt9LHRoaXMuem9vbUhpc3Rvcnk9bmV3IHQuZGVmYXVsdCQyMyx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5fcmVzZXRVcGRhdGVzKCk7dmFyIG89dGhpczt0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2s9ci5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eShmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gby5kaXNwYXRjaGVyLmJyb2FkY2FzdCgibG9hZFJUTFRleHRQbHVnaW4iLHQucGx1Z2luVVJMLHQuY29tcGxldGlvbkNhbGxiYWNrKSxvLnNvdXJjZUNhY2hlcylvLnNvdXJjZUNhY2hlc1tlXS5yZWxvYWQoKX0pLHRoaXMub24oImRhdGEiLGZ1bmN0aW9uKHQpe2lmKCJzb3VyY2UiPT09dC5kYXRhVHlwZSYmIm1ldGFkYXRhIj09PXQuc291cmNlRGF0YVR5cGUpe3ZhciBlPWEuc291cmNlQ2FjaGVzW3Quc291cmNlSWRdO2lmKGUpe3ZhciByPWUuZ2V0U291cmNlKCk7aWYociYmci52ZWN0b3JMYXllcklkcylmb3IodmFyIG4gaW4gYS5fbGF5ZXJzKXt2YXIgaT1hLl9sYXllcnNbbl07aS5zb3VyY2U9PT1yLmlkJiZhLl92YWxpZGF0ZUxheWVyKGkpfX19fSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWRVUkw9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InN0eWxlIn0pKTt2YXIgaT0iYm9vbGVhbiI9PXR5cGVvZiByLnZhbGlkYXRlP3IudmFsaWRhdGU6IXgoZSk7ZT1mdW5jdGlvbih0LGUpe2lmKCF4KHQpKXJldHVybiB0O3ZhciByPUEodCk7cmV0dXJuIHIucGF0aD0iL3N0eWxlcy92MSIrci5wYXRoLHkocixlKX0oZSxyLmFjY2Vzc1Rva2VuKTt2YXIgYT10aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChlLHQuUmVzb3VyY2VUeXBlLlN0eWxlKTt0LmdldEpTT04oYSxmdW5jdGlvbihlLHIpe2U/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpOnImJm4uX2xvYWQocixpKX0pfSxyLnByb3RvdHlwZS5sb2FkSlNPTj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic3R5bGUifSkpLGEuZnJhbWUoZnVuY3Rpb24oKXtuLl9sb2FkKGUsITEhPT1yLnZhbGlkYXRlKX0pfSxyLnByb3RvdHlwZS5fbG9hZD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7aWYoIXJ8fCFYZSh0aGlzLHQudmFsaWRhdGVTdHlsZShlKSkpe2Zvcih2YXIgaSBpbiB0aGlzLl9sb2FkZWQ9ITAsdGhpcy5zdHlsZXNoZWV0PWUsZS5zb3VyY2VzKW4uYWRkU291cmNlKGksZS5zb3VyY2VzW2ldLHt2YWxpZGF0ZTohMX0pO2Uuc3ByaXRlP2Z1bmN0aW9uKGUscixuKXt2YXIgaSxvLHMsbD1hLmRldmljZVBpeGVsUmF0aW8+MT8iQDJ4IjoiIjtmdW5jdGlvbiBjKCl7aWYocyluKHMpO2Vsc2UgaWYoaSYmbyl7dmFyIGU9YS5nZXRJbWFnZURhdGEobykscj17fTtmb3IodmFyIGwgaW4gaSl7dmFyIGM9aVtsXSx1PWMud2lkdGgsZj1jLmhlaWdodCxoPWMueCxwPWMueSxkPWMuc2RmLGc9Yy5waXhlbFJhdGlvLHY9bmV3IHQuUkdCQUltYWdlKHt3aWR0aDp1LGhlaWdodDpmfSk7dC5SR0JBSW1hZ2UuY29weShlLHYse3g6aCx5OnB9LHt4OjAseTowfSx7d2lkdGg6dSxoZWlnaHQ6Zn0pLHJbbF09e2RhdGE6dixwaXhlbFJhdGlvOmcsc2RmOmR9fW4obnVsbCxyKX19dC5nZXRKU09OKHIoXyhlLGwsIi5qc29uIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSlNPTiksZnVuY3Rpb24odCxlKXtzfHwocz10LGk9ZSxjKCkpfSksdC5nZXRJbWFnZShyKF8oZSxsLCIucG5nIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLGZ1bmN0aW9uKHQsZSl7c3x8KHM9dCxvPWUsYygpKX0pfShlLnNwcml0ZSx0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCxmdW5jdGlvbihlLHIpe2lmKGUpbi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpO2Vsc2UgaWYocilmb3IodmFyIGkgaW4gciluLmltYWdlTWFuYWdlci5hZGRJbWFnZShpLHJbaV0pO24uaW1hZ2VNYW5hZ2VyLnNldExvYWRlZCghMCksbi5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX0pOnRoaXMuaW1hZ2VNYW5hZ2VyLnNldExvYWRlZCghMCksdGhpcy5nbHlwaE1hbmFnZXIuc2V0VVJMKGUuZ2x5cGhzKTt2YXIgbz10ZSh0aGlzLnN0eWxlc2hlZXQubGF5ZXJzKTt0aGlzLl9vcmRlcj1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuX2xheWVycz17fTtmb3IodmFyIHM9MCxsPW87czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdOyhjPXQuZGVmYXVsdCQyMihjKSkuc2V0RXZlbnRlZFBhcmVudChuLHtsYXllcjp7aWQ6Yy5pZH19KSxuLl9sYXllcnNbYy5pZF09Y310aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJzZXRMYXllcnMiLHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcikpLHRoaXMubGlnaHQ9bmV3IFYodGhpcy5zdHlsZXNoZWV0LmxpZ2h0KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgic3R5bGUubG9hZCIpKX19LHIucHJvdG90eXBlLl92YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc291cmNlQ2FjaGVzW2Uuc291cmNlXTtpZihyKXt2YXIgbj1lLnNvdXJjZUxheWVyO2lmKG4pe3ZhciBpPXIuZ2V0U291cmNlKCk7KCJnZW9qc29uIj09PWkudHlwZXx8aS52ZWN0b3JMYXllcklkcyYmLTE9PT1pLnZlY3RvckxheWVySWRzLmluZGV4T2YobikpJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSBsYXllciAiJytuKyciIGRvZXMgbm90IGV4aXN0IG9uIHNvdXJjZSAiJytpLmlkKyciIGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciAiJytlLmlkKyciJykpKX19fSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXJldHVybiExO2lmKE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRTb3VyY2VzKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKWlmKCF0aGlzLnNvdXJjZUNhY2hlc1t0XS5sb2FkZWQoKSlyZXR1cm4hMTtyZXR1cm4hIXRoaXMuaW1hZ2VNYW5hZ2VyLmlzTG9hZGVkKCl9LHIucHJvdG90eXBlLl9zZXJpYWxpemVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xheWVyc1t0XS5zZXJpYWxpemUoKX0pfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMubGlnaHQmJnRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZih0aGlzLnNvdXJjZUNhY2hlc1t0XS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycylpZih0aGlzLl9sYXllcnNbZV0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO3JldHVybiExfSxyLnByb3RvdHlwZS5fY2hlY2tMb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcigiU3R5bGUgaXMgbm90IGRvbmUgbG9hZGluZyIpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbG9hZGVkKXtpZih0aGlzLl9jaGFuZ2VkKXt2YXIgcj1PYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkTGF5ZXJzKSxuPU9iamVjdC5rZXlzKHRoaXMuX3JlbW92ZWRMYXllcnMpO2Zvcih2YXIgaSBpbihyLmxlbmd0aHx8bi5sZW5ndGgpJiZ0aGlzLl91cGRhdGVXb3JrZXJMYXllcnMocixuKSx0aGlzLl91cGRhdGVkU291cmNlcyl7dmFyIGE9dGhpcy5fdXBkYXRlZFNvdXJjZXNbaV07InJlbG9hZCI9PT1hP3RoaXMuX3JlbG9hZFNvdXJjZShpKToiY2xlYXIiPT09YSYmdGhpcy5fY2xlYXJTb3VyY2UoaSl9Zm9yKHZhciBvIGluIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzKXRoaXMuX2xheWVyc1tvXS51cGRhdGVUcmFuc2l0aW9ucyhlKTt0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKGUpLHRoaXMuX3Jlc2V0VXBkYXRlcygpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9Zm9yKHZhciBzIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW3NdLnVzZWQ9ITE7Zm9yKHZhciBsPTAsYz10aGlzLl9vcmRlcjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0sZj10aGlzLl9sYXllcnNbdV07Zi5yZWNhbGN1bGF0ZShlKSwhZi5pc0hpZGRlbihlLnpvb20pJiZmLnNvdXJjZSYmKHRoaXMuc291cmNlQ2FjaGVzW2Yuc291cmNlXS51c2VkPSEwKX10aGlzLmxpZ2h0LnJlY2FsY3VsYXRlKGUpLHRoaXMuej1lLnpvb219fSxyLnByb3RvdHlwZS5fdXBkYXRlV29ya2VyTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgidXBkYXRlTGF5ZXJzIix7bGF5ZXJzOnRoaXMuX3NlcmlhbGl6ZUxheWVycyh0KSxyZW1vdmVkSWRzOmV9KX0sci5wcm90b3R5cGUuX3Jlc2V0VXBkYXRlcz1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZWQ9ITEsdGhpcy5fdXBkYXRlZExheWVycz17fSx0aGlzLl9yZW1vdmVkTGF5ZXJzPXt9LHRoaXMuX3VwZGF0ZWRTb3VyY2VzPXt9LHRoaXMuX3VwZGF0ZWRQYWludFByb3BzPXt9fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksWGUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXJldHVybiExOyhlPXQuY2xvbmUoZSkpLmxheWVycz10ZShlLmxheWVycyk7dmFyIG49ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm5be2NvbW1hbmQ6ZWUuc2V0U3R5bGUsYXJnczpbcl19XTt2YXIgbj1bXTt0cnl7aWYoIXQuZGVmYXVsdCQxMChlLnZlcnNpb24sci52ZXJzaW9uKSlyZXR1cm5be2NvbW1hbmQ6ZWUuc2V0U3R5bGUsYXJnczpbcl19XTt0LmRlZmF1bHQkMTAoZS5jZW50ZXIsci5jZW50ZXIpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0Q2VudGVyLGFyZ3M6W3IuY2VudGVyXX0pLHQuZGVmYXVsdCQxMChlLnpvb20sci56b29tKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldFpvb20sYXJnczpbci56b29tXX0pLHQuZGVmYXVsdCQxMChlLmJlYXJpbmcsci5iZWFyaW5nKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldEJlYXJpbmcsYXJnczpbci5iZWFyaW5nXX0pLHQuZGVmYXVsdCQxMChlLnBpdGNoLHIucGl0Y2gpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0UGl0Y2gsYXJnczpbci5waXRjaF19KSx0LmRlZmF1bHQkMTAoZS5zcHJpdGUsci5zcHJpdGUpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0U3ByaXRlLGFyZ3M6W3Iuc3ByaXRlXX0pLHQuZGVmYXVsdCQxMChlLmdseXBocyxyLmdseXBocyl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRHbHlwaHMsYXJnczpbci5nbHlwaHNdfSksdC5kZWZhdWx0JDEwKGUudHJhbnNpdGlvbixyLnRyYW5zaXRpb24pfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0VHJhbnNpdGlvbixhcmdzOltyLnRyYW5zaXRpb25dfSksdC5kZWZhdWx0JDEwKGUubGlnaHQsci5saWdodCl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMaWdodCxhcmdzOltyLmxpZ2h0XX0pO3ZhciBpPXt9LGE9W107IWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhO2ZvcihhIGluIHI9cnx8e30sZT1lfHx7fSllLmhhc093blByb3BlcnR5KGEpJiYoci5oYXNPd25Qcm9wZXJ0eShhKXx8bmUoYSxuLGkpKTtmb3IoYSBpbiByKXIuaGFzT3duUHJvcGVydHkoYSkmJihlLmhhc093blByb3BlcnR5KGEpP3QuZGVmYXVsdCQxMChlW2FdLHJbYV0pfHwoImdlb2pzb24iPT09ZVthXS50eXBlJiYiZ2VvanNvbiI9PT1yW2FdLnR5cGUmJmFlKGUscixhKT9uLnB1c2goe2NvbW1hbmQ6ZWUuc2V0R2VvSlNPTlNvdXJjZURhdGEsYXJnczpbYSxyW2FdLmRhdGFdfSk6aWUoYSxyLG4saSkpOnJlKGEscixuKSl9KGUuc291cmNlcyxyLnNvdXJjZXMsYSxpKTt2YXIgbz1bXTtlLmxheWVycyYmZS5sYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtpW3Quc291cmNlXT9uLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlTGF5ZXIsYXJnczpbdC5pZF19KTpvLnB1c2godCl9KSxuPW4uY29uY2F0KGEpLGZ1bmN0aW9uKGUscixuKXtyPXJ8fFtdO3ZhciBpLGEsbyxzLGwsYyx1LGY9KGU9ZXx8W10pLm1hcChzZSksaD1yLm1hcChzZSkscD1lLnJlZHVjZShsZSx7fSksZD1yLnJlZHVjZShsZSx7fSksZz1mLnNsaWNlKCksdj1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihpPTAsYT0wO2k8Zi5sZW5ndGg7aSsrKW89ZltpXSxkLmhhc093blByb3BlcnR5KG8pP2ErKzoobi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W29dfSksZy5zcGxpY2UoZy5pbmRleE9mKG8sYSksMSkpO2ZvcihpPTAsYT0wO2k8aC5sZW5ndGg7aSsrKW89aFtoLmxlbmd0aC0xLWldLGdbZy5sZW5ndGgtMS1pXSE9PW8mJihwLmhhc093blByb3BlcnR5KG8pPyhuLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlTGF5ZXIsYXJnczpbb119KSxnLnNwbGljZShnLmxhc3RJbmRleE9mKG8sZy5sZW5ndGgtYSksMSkpOmErKyxjPWdbZy5sZW5ndGgtaV0sbi5wdXNoKHtjb21tYW5kOmVlLmFkZExheWVyLGFyZ3M6W2Rbb10sY119KSxnLnNwbGljZShnLmxlbmd0aC1pLDAsbyksdltvXT0hMCk7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylpZihzPXBbbz1oW2ldXSxsPWRbb10sIXZbb10mJiF0LmRlZmF1bHQkMTAocyxsKSlpZih0LmRlZmF1bHQkMTAocy5zb3VyY2UsbC5zb3VyY2UpJiZ0LmRlZmF1bHQkMTAoc1sic291cmNlLWxheWVyIl0sbFsic291cmNlLWxheWVyIl0pJiZ0LmRlZmF1bHQkMTAocy50eXBlLGwudHlwZSkpe2Zvcih1IGluIG9lKHMubGF5b3V0LGwubGF5b3V0LG4sbyxudWxsLGVlLnNldExheW91dFByb3BlcnR5KSxvZShzLnBhaW50LGwucGFpbnQsbixvLG51bGwsZWUuc2V0UGFpbnRQcm9wZXJ0eSksdC5kZWZhdWx0JDEwKHMuZmlsdGVyLGwuZmlsdGVyKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldEZpbHRlcixhcmdzOltvLGwuZmlsdGVyXX0pLHQuZGVmYXVsdCQxMChzLm1pbnpvb20sbC5taW56b29tKSYmdC5kZWZhdWx0JDEwKHMubWF4em9vbSxsLm1heHpvb20pfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0TGF5ZXJab29tUmFuZ2UsYXJnczpbbyxsLm1pbnpvb20sbC5tYXh6b29tXX0pLHMpcy5oYXNPd25Qcm9wZXJ0eSh1KSYmImxheW91dCIhPT11JiYicGFpbnQiIT09dSYmImZpbHRlciIhPT11JiYibWV0YWRhdGEiIT09dSYmIm1pbnpvb20iIT09dSYmIm1heHpvb20iIT09dSYmKDA9PT11LmluZGV4T2YoInBhaW50LiIpP29lKHNbdV0sbFt1XSxuLG8sdS5zbGljZSg2KSxlZS5zZXRQYWludFByb3BlcnR5KTp0LmRlZmF1bHQkMTAoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpO2Zvcih1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmIXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9vZShzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksZWUuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWZhdWx0JDEwKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKX1lbHNlIG4ucHVzaCh7Y29tbWFuZDplZS5yZW1vdmVMYXllcixhcmdzOltvXX0pLGM9Z1tnLmxhc3RJbmRleE9mKG8pKzFdLG4ucHVzaCh7Y29tbWFuZDplZS5hZGRMYXllcixhcmdzOltsLGNdfSl9KG8sci5sYXllcnMsbil9Y2F0Y2godCl7Y29uc29sZS53YXJuKCJVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOiIsdCksbj1be2NvbW1hbmQ6ZWUuc2V0U3R5bGUsYXJnczpbcl19XX1yZXR1cm4gbn0odGhpcy5zZXJpYWxpemUoKSxlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gJGUpfSk7aWYoMD09PW4ubGVuZ3RoKXJldHVybiExO3ZhciBpPW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jb21tYW5kIGluIFplKX0pO2lmKGkubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJVbmltcGxlbWVudGVkOiAiK2kubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbW1hbmR9KS5qb2luKCIsICIpKyIuIik7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXsic2V0VHJhbnNpdGlvbiIhPT10LmNvbW1hbmQmJnJbdC5jb21tYW5kXS5hcHBseShyLHQuYXJncyl9KSx0aGlzLnN0eWxlc2hlZXQ9ZSwhMH0sci5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkFuIGltYWdlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiIpKSk7dGhpcy5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoZSxyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpfSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UodCl9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk5vIGltYWdlIHdpdGggdGhpcyBuYW1lIGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGUpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9LHIucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcztpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMCE9PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgYWxyZWFkeSBhIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTtpZighci50eXBlKXRocm93IG5ldyBFcnJvcigiVGhlIHR5cGUgcHJvcGVydHkgbXVzdCBiZSBkZWZpbmVkLCBidXQgdGhlIG9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdlcmUgZ2l2ZW46ICIrT2JqZWN0LmtleXMocikuam9pbigiLCAiKSsiLiIpO2lmKCEoWyJ2ZWN0b3IiLCJyYXN0ZXIiLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdLmluZGV4T2Yoci50eXBlKT49MCYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLnNvdXJjZSwic291cmNlcy4iK2UscixudWxsLG4pKSl7dGhpcy5tYXAmJnRoaXMubWFwLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJihyLmNvbGxlY3RSZXNvdXJjZVRpbWluZz0hMCk7dmFyIGE9dGhpcy5zb3VyY2VDYWNoZXNbZV09bmV3IFd0KGUscix0aGlzLmRpc3BhdGNoZXIpO2Euc3R5bGU9dGhpcyxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcyxmdW5jdGlvbigpe3JldHVybntpc1NvdXJjZUxvYWRlZDppLmxvYWRlZCgpLHNvdXJjZTphLnNlcmlhbGl6ZSgpLHNvdXJjZUlkOmV9fSksYS5vbkFkZCh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbihlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMD09PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCIpO2Zvcih2YXIgciBpbiB0aGlzLl9sYXllcnMpaWYodGhpcy5fbGF5ZXJzW3JdLnNvdXJjZT09PWUpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignU291cmNlICInK2UrJyIgY2Fubm90IGJlIHJlbW92ZWQgd2hpbGUgbGF5ZXIgIicrcisnIiBpcyB1c2luZyBpdC4nKSkpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO2RlbGV0ZSB0aGlzLnNvdXJjZUNhY2hlc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFNvdXJjZXNbZV0sbi5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7c291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIixkYXRhVHlwZToic291cmNlIixzb3VyY2VJZDplfSkpLG4uc2V0RXZlbnRlZFBhcmVudChudWxsKSxuLmNsZWFyVGlsZXMoKSxuLm9uUmVtb3ZlJiZuLm9uUmVtb3ZlKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5zZXRHZW9KU09OU291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCkuc2V0RGF0YShlKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlQ2FjaGVzW3RdJiZ0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKX0sci5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9ZS5pZDtpZih0aGlzLmdldExheWVyKGkpKXRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCAiJytpKyciIGFscmVhZHkgZXhpc3RzIG9uIHRoaXMgbWFwJykpKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZS5zb3VyY2UmJih0aGlzLmFkZFNvdXJjZShpLGUuc291cmNlKSxlPXQuY2xvbmUoZSksZT10LmV4dGVuZChlLHtzb3VyY2U6aX0pKSwhdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmxheWVyLCJsYXllcnMuIitpLGUse2FycmF5SW5kZXg6LTF9LG4pKXt2YXIgYT10LmRlZmF1bHQkMjIoZSk7dGhpcy5fdmFsaWRhdGVMYXllcihhKSxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7bGF5ZXI6e2lkOml9fSk7dmFyIG89cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtpZihyJiYtMT09PW8pdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkICInK3IrJyIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuJykpKTtlbHNle2lmKHRoaXMuX29yZGVyLnNwbGljZShvLDAsaSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fbGF5ZXJzW2ldPWEsdGhpcy5fcmVtb3ZlZExheWVyc1tpXSYmYS5zb3VyY2Upe3ZhciBzPXRoaXMuX3JlbW92ZWRMYXllcnNbaV07ZGVsZXRlIHRoaXMuX3JlbW92ZWRMYXllcnNbaV0scy50eXBlIT09YS50eXBlP3RoaXMuX3VwZGF0ZWRTb3VyY2VzW2Euc291cmNlXT0iY2xlYXIiOih0aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09InJlbG9hZCIsdGhpcy5zb3VyY2VDYWNoZXNbYS5zb3VyY2VdLnBhdXNlKCkpfXRoaXMuX3VwZGF0ZUxheWVyKGEpfX19LHIucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbihlLHIpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9sYXllcnNbZV0pe2lmKGUhPT1yKXt2YXIgbj10aGlzLl9vcmRlci5pbmRleE9mKGUpO3RoaXMuX29yZGVyLnNwbGljZShuLDEpO3ZhciBpPXI/dGhpcy5fb3JkZXIuaW5kZXhPZihyKTp0aGlzLl9vcmRlci5sZW5ndGg7ciYmLTE9PT1pP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCAiJytyKyciIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLicpKSk6KHRoaXMuX29yZGVyLnNwbGljZShpLDAsZSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITApfX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgbW92ZWQuIikpKX0sci5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj10aGlzLl9sYXllcnNbZV07aWYocil7ci5zZXRFdmVudGVkUGFyZW50KG51bGwpO3ZhciBuPXRoaXMuX29yZGVyLmluZGV4T2YoZSk7dGhpcy5fb3JkZXIuc3BsaWNlKG4sMSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9yZW1vdmVkTGF5ZXJzW2VdPXIsZGVsZXRlIHRoaXMuX2xheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZExheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbZV19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHJlbW92ZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sci5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpP2kubWluem9vbT09PXImJmkubWF4em9vbT09PW58fChudWxsIT1yJiYoaS5taW56b29tPXIpLG51bGwhPW4mJihpLm1heHpvb209biksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC4iKSkpfSxyLnByb3RvdHlwZS5zZXRGaWx0ZXI9ZnVuY3Rpb24oZSxyKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPXRoaXMuZ2V0TGF5ZXIoZSk7aWYobil7aWYoIXQuZGVmYXVsdCQxMChuLmZpbHRlcixyKSlyZXR1cm4gbnVsbD09cj8obi5maWx0ZXI9dm9pZCAwLHZvaWQgdGhpcy5fdXBkYXRlTGF5ZXIobikpOnZvaWQodGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlciwibGF5ZXJzLiIrbi5pZCsiLmZpbHRlciIscil8fChuLmZpbHRlcj10LmNsb25lKHIpLHRoaXMuX3VwZGF0ZUxheWVyKG4pKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIGZpbHRlcmVkLiIpKSl9LHIucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdC5jbG9uZSh0aGlzLmdldExheWVyKGUpLmZpbHRlcil9LHIucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aT90LmRlZmF1bHQkMTAoaS5nZXRMYXlvdXRQcm9wZXJ0eShyKSxuKXx8KGkuc2V0TGF5b3V0UHJvcGVydHkocixuKSx0aGlzLl91cGRhdGVMYXllcihpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRMYXllcih0KS5nZXRMYXlvdXRQcm9wZXJ0eShlKX0sci5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKGUpO2lmKGkpe2lmKCF0LmRlZmF1bHQkMTAoaS5nZXRQYWludFByb3BlcnR5KHIpLG4pKXt2YXIgYT1pLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbcl0udmFsdWUuaXNEYXRhRHJpdmVuKCk7aS5zZXRQYWludFByb3BlcnR5KHIsbiksKGkuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1tyXS52YWx1ZS5pc0RhdGFEcml2ZW4oKXx8YSkmJnRoaXMuX3VwZGF0ZUxheWVyKGkpLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbZV09ITB9fWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldExheWVyKHQpLmdldFBhaW50UHJvcGVydHkoZSl9LHIucHJvdG90eXBlLmdldFRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe2R1cmF0aW9uOjMwMCxkZWxheTowfSx0aGlzLnN0eWxlc2hlZXQmJnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdC5maWx0ZXJPYmplY3Qoe3ZlcnNpb246dGhpcy5zdHlsZXNoZWV0LnZlcnNpb24sbmFtZTp0aGlzLnN0eWxlc2hlZXQubmFtZSxtZXRhZGF0YTp0aGlzLnN0eWxlc2hlZXQubWV0YWRhdGEsbGlnaHQ6dGhpcy5zdHlsZXNoZWV0LmxpZ2h0LGNlbnRlcjp0aGlzLnN0eWxlc2hlZXQuY2VudGVyLHpvb206dGhpcy5zdHlsZXNoZWV0Lnpvb20sYmVhcmluZzp0aGlzLnN0eWxlc2hlZXQuYmVhcmluZyxwaXRjaDp0aGlzLnN0eWxlc2hlZXQucGl0Y2gsc3ByaXRlOnRoaXMuc3R5bGVzaGVldC5zcHJpdGUsZ2x5cGhzOnRoaXMuc3R5bGVzaGVldC5nbHlwaHMsdHJhbnNpdGlvbjp0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbixzb3VyY2VzOnQubWFwT2JqZWN0KHRoaXMuc291cmNlQ2FjaGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSksbGF5ZXJzOnRoaXMuX29yZGVyLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGF5ZXJzW3RdLnNlcmlhbGl6ZSgpfSl9LGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10fSl9LHIucHJvdG90eXBlLl91cGRhdGVMYXllcj1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGVkTGF5ZXJzW3QuaWRdPSEwLHQuc291cmNlJiYhdGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdJiYodGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdPSJyZWxvYWQiLHRoaXMuc291cmNlQ2FjaGVzW3Quc291cmNlXS5wYXVzZSgpKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5fZmxhdHRlblJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dGhpcy5fb3JkZXIubGVuZ3RoLTE7cj49MDtyLS0pZm9yKHZhciBuPXRoaXMuX29yZGVyW3JdLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldW25dO2lmKG8pZm9yKHZhciBzPTAsbD1vO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTtlLnB1c2goYyl9fXJldHVybiBlfSxyLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyLG4pe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJxdWVyeVJlbmRlcmVkRmVhdHVyZXMuZmlsdGVyIixyLmZpbHRlcik7dmFyIGk9e307aWYociYmci5sYXllcnMpe2lmKCFBcnJheS5pc0FycmF5KHIubGF5ZXJzKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJwYXJhbWV0ZXJzLmxheWVycyBtdXN0IGJlIGFuIEFycmF5LiIpKSksW107Zm9yKHZhciBhPTAsbz1yLmxheWVyczthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD10aGlzLl9sYXllcnNbc107aWYoIWwpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK3MrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcXVlcmllZCBmb3IgZmVhdHVyZXMuIikpKSxbXTtpW2wuc291cmNlXT0hMH19dmFyIGM9W107Zm9yKHZhciB1IGluIHRoaXMuc291cmNlQ2FjaGVzKXIubGF5ZXJzJiYhaVt1XXx8Yy5wdXNoKGF0KHRoaXMuc291cmNlQ2FjaGVzW3VdLHRoaXMuX2xheWVycyxlLndvcmxkQ29vcmRpbmF0ZSxyLG4pKTtyZXR1cm4gdGhpcy5wbGFjZW1lbnQmJmMucHVzaChmdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT17fSxvPW4ucXVlcnlSZW5kZXJlZFN5bWJvbHMoZSkscz1bXSxsPTAsYz1PYmplY3Qua2V5cyhvKS5tYXAoTnVtYmVyKTtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF07cy5wdXNoKGlbdV0pfXMuc29ydChvdCk7Zm9yKHZhciBmPWZ1bmN0aW9uKCl7dmFyIGU9cFtoXSxuPWUuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKG9bZS5idWNrZXRJbnN0YW5jZUlkXSxlLmJ1Y2tldEluZGV4LGUuc291cmNlTGF5ZXJJbmRleCxyLmZpbHRlcixyLmxheWVycyx0KTtmb3IodmFyIGkgaW4gbil7dmFyIHM9YVtpXT1hW2ldfHxbXSxsPW5baV07bC5zb3J0KGZ1bmN0aW9uKHQscil7dmFyIG49ZS5mZWF0dXJlU29ydE9yZGVyO2lmKG4pe3ZhciBpPW4uaW5kZXhPZih0LmZlYXR1cmVJbmRleCk7cmV0dXJuIG4uaW5kZXhPZihyLmZlYXR1cmVJbmRleCktaX1yZXR1cm4gci5mZWF0dXJlSW5kZXgtdC5mZWF0dXJlSW5kZXh9KTtmb3IodmFyIGM9MCx1PWw7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdO3MucHVzaChmLmZlYXR1cmUpfX19LGg9MCxwPXM7aDxwLmxlbmd0aDtoKz0xKWYoKTtyZXR1cm4gYX0odGhpcy5fbGF5ZXJzLGUudmlld3BvcnQscix0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCx0aGlzLnBsYWNlbWVudC5yZXRhaW5lZFF1ZXJ5RGF0YSkpLHRoaXMuX2ZsYXR0ZW5SZW5kZXJlZEZlYXR1cmVzKGMpfSxyLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKGUscil7ciYmci5maWx0ZXImJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsInF1ZXJ5U291cmNlRmVhdHVyZXMuZmlsdGVyIixyLmZpbHRlcik7dmFyIG49dGhpcy5zb3VyY2VDYWNoZXNbZV07cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldFRpbGVCeUlEKGUpfSksbj1bXSxpPXt9LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPW8udGlsZUlELmNhbm9uaWNhbC5rZXk7aVtzXXx8KGlbc109ITAsby5xdWVyeVNvdXJjZUZlYXR1cmVzKG4sZSkpfXJldHVybiBufShuLHIpOltdfSxyLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5nZXRTb3VyY2VUeXBlKHQpP24obmV3IEVycm9yKCdBIHNvdXJjZSB0eXBlIGNhbGxlZCAiJyt0KyciIGFscmVhZHkgZXhpc3RzLicpKTooci5zZXRTb3VyY2VUeXBlKHQsZSksZS53b3JrZXJTb3VyY2VVUkw/dm9pZCB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJsb2FkV29ya2VyU291cmNlIix7bmFtZTp0LHVybDplLndvcmtlclNvdXJjZVVSTH0sbik6bihudWxsLG51bGwpKX0sci5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saWdodC5nZXRMaWdodCgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciByPXRoaXMubGlnaHQuZ2V0TGlnaHQoKSxuPSExO2Zvcih2YXIgaSBpbiBlKWlmKCF0LmRlZmF1bHQkMTAoZVtpXSxyW2ldKSl7bj0hMDticmVha31pZihuKXt2YXIgbz17bm93OmEubm93KCksdHJhbnNpdGlvbjp0LmV4dGVuZCh7ZHVyYXRpb246MzAwLGRlbGF5OjB9LHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX07dGhpcy5saWdodC5zZXRMaWdodChlKSx0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKG8pfX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuKCFhfHwhMSE9PWEudmFsaWRhdGUpJiZYZSh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe2tleTpyLHN0eWxlOnRoaXMuc2VyaWFsaXplKCksdmFsdWU6bixzdHlsZVNwZWM6dC5kZWZhdWx0JDV9LGkpKSl9LHIucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdC5ldmVudGVkLm9mZigicGx1Z2luQXZhaWxhYmxlIix0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2spLHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2VdLmNsZWFyVGlsZXMoKTt0aGlzLmRpc3BhdGNoZXIucmVtb3ZlKCl9LHIucHJvdG90eXBlLl9jbGVhclNvdXJjZT1mdW5jdGlvbih0KXt0aGlzLnNvdXJjZUNhY2hlc1t0XS5jbGVhclRpbGVzKCl9LHIucHJvdG90eXBlLl9yZWxvYWRTb3VyY2U9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVzdW1lKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVsb2FkKCl9LHIucHJvdG90eXBlLl91cGRhdGVTb3VyY2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tlXS51cGRhdGUodCl9LHIucHJvdG90eXBlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuX3JlbG9hZFNvdXJjZSh0KX0sci5wcm90b3R5cGUuX3VwZGF0ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPSExLGk9ITEsbz17fSxzPTAsbD10aGlzLl9vcmRlcjtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT10aGlzLl9sYXllcnNbY107aWYoInN5bWJvbCI9PT11LnR5cGUpe2lmKCFvW3Uuc291cmNlXSl7dmFyIGY9dGhpcy5zb3VyY2VDYWNoZXNbdS5zb3VyY2VdO29bdS5zb3VyY2VdPWYuZ2V0UmVuZGVyYWJsZUlkcygpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZi5nZXRUaWxlQnlJRCh0KX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50aWxlSUQub3ZlcnNjYWxlZFotdC50aWxlSUQub3ZlcnNjYWxlZFp8fCh0LnRpbGVJRC5pc0xlc3NUaGFuKGUudGlsZUlEKT8tMToxKX0pfXZhciBoPXRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXguYWRkTGF5ZXIodSxvW3Uuc291cmNlXSx0LmNlbnRlci5sbmcpO249bnx8aH19dGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5wcnVuZVVudXNlZExheWVycyh0aGlzLl9vcmRlcik7dmFyIHA9dGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ7aWYoKHB8fCF0aGlzLnBhdXNlYWJsZVBsYWNlbWVudHx8dGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkmJiF0aGlzLnBsYWNlbWVudC5zdGlsbFJlY2VudChhLm5vdygpKSkmJih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudD1uZXcgVWUodCx0aGlzLl9vcmRlcixwLGUsciksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITEpLHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpP3RoaXMucGxhY2VtZW50LnNldFN0YWxlKCk6KHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmNvbnRpbnVlUGxhY2VtZW50KHRoaXMuX29yZGVyLHRoaXMuX2xheWVycyxvKSx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSYmKHRoaXMucGxhY2VtZW50PXRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmNvbW1pdCh0aGlzLnBsYWNlbWVudCxhLm5vdygpKSxpPSEwKSxuJiZ0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5wbGFjZW1lbnQuc2V0U3RhbGUoKSksaXx8bilmb3IodmFyIGQ9MCxnPXRoaXMuX29yZGVyO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXSxtPXRoaXMuX2xheWVyc1t2XTsic3ltYm9sIj09PW0udHlwZSYmdGhpcy5wbGFjZW1lbnQudXBkYXRlTGF5ZXJPcGFjaXRpZXMobSxvW20uc291cmNlXSl9cmV0dXJuIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpfHx0aGlzLnBsYWNlbWVudC5oYXNUcmFuc2l0aW9ucyhhLm5vdygpKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZXMoZS5pY29ucyxyKX0sci5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdseXBoTWFuYWdlci5nZXRHbHlwaHMoZS5zdGFja3Mscil9LHJ9KHQuRXZlbnRlZCk7SmUuZ2V0U291cmNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gbnRbdF19LEplLnNldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlKXtudFt0XT1lfSxKZS5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eT10LnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5O3ZhciBLZT10LmNyZWF0ZUxheW91dChbe25hbWU6ImFfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfV0pLFFlPXtwcmVsdWRlOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG5cbiNpZiAhZGVmaW5lZChsb3dwKVxuI2RlZmluZSBsb3dwXG4jZW5kaWZcblxuI2lmICFkZWZpbmVkKG1lZGl1bXApXG4jZGVmaW5lIG1lZGl1bXBcbiNlbmRpZlxuXG4jaWYgIWRlZmluZWQoaGlnaHApXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuI2VuZGlmXG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuXG4jaWYgIWRlZmluZWQobG93cClcbiNkZWZpbmUgbG93cFxuI2VuZGlmXG5cbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxuI2RlZmluZSBtZWRpdW1wXG4jZW5kaWZcblxuI2lmICFkZWZpbmVkKGhpZ2hwKVxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbiNlbmRpZlxuXG4vLyBVbnBhY2sgYSBwYWlyIG9mIHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBwYWNrZWQgaW50byBhIHNpbmdsZSBmbG9hdC5cbi8vIFRoZSBwYWNrZWQgdmFsdWVzIGFyZSBhc3N1bWVkIHRvIGJlIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLCBhbmQgYXJlXG4vLyBwYWNrZWQgbGlrZSBzbzpcbi8vIHBhY2tlZFZhbHVlID0gZmxvb3IoaW5wdXRbMF0pICogMjU2ICsgaW5wdXRbMV0sXG52ZWMyIHVucGFja19mbG9hdChjb25zdCBmbG9hdCBwYWNrZWRWYWx1ZSkge1xuICAgIGludCBwYWNrZWRJbnRWYWx1ZSA9IGludChwYWNrZWRWYWx1ZSk7XG4gICAgaW50IHYwID0gcGFja2VkSW50VmFsdWUgLyAyNTY7XG4gICAgcmV0dXJuIHZlYzIodjAsIHBhY2tlZEludFZhbHVlIC0gdjAgKiAyNTYpO1xufVxuXG52ZWMyIHVucGFja19vcGFjaXR5KGNvbnN0IGZsb2F0IHBhY2tlZE9wYWNpdHkpIHtcbiAgICBpbnQgaW50T3BhY2l0eSA9IGludChwYWNrZWRPcGFjaXR5KSAvIDI7XG4gICAgcmV0dXJuIHZlYzIoZmxvYXQoaW50T3BhY2l0eSkgLyAxMjcuMCwgbW9kKHBhY2tlZE9wYWNpdHksIDIuMCkpO1xufVxuXG4vLyBUbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgbmVlZGVkLCB3ZSBlbmNvZGUgYSA0LWNvbXBvbmVudFxuLy8gY29sb3IgaW50byBhIHBhaXIgb2YgZmxvYXRzIChpLmUuIGEgdmVjMikgYXMgZm9sbG93czpcbi8vIFsgZmxvb3IoY29sb3IuciAqIDI1NSkgKiAyNTYgKyBjb2xvci5nICogMjU1LFxuLy8gICBmbG9vcihjb2xvci5iICogMjU1KSAqIDI1NiArIGNvbG9yLmcgKiAyNTUgXVxudmVjNCBkZWNvZGVfY29sb3IoY29uc3QgdmVjMiBlbmNvZGVkQ29sb3IpIHtcbiAgICByZXR1cm4gdmVjNChcbiAgICAgICAgdW5wYWNrX2Zsb2F0KGVuY29kZWRDb2xvclswXSkgLyAyNTUuMCxcbiAgICAgICAgdW5wYWNrX2Zsb2F0KGVuY29kZWRDb2xvclsxXSkgLyAyNTUuMFxuICAgICk7XG59XG5cbi8vIFVucGFjayBhIHBhaXIgb2YgcGFpbnQgdmFsdWVzIGFuZCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZW0uXG5mbG9hdCB1bnBhY2tfbWl4X3ZlYzIoY29uc3QgdmVjMiBwYWNrZWRWYWx1ZSwgY29uc3QgZmxvYXQgdCkge1xuICAgIHJldHVybiBtaXgocGFja2VkVmFsdWVbMF0sIHBhY2tlZFZhbHVlWzFdLCB0KTtcbn1cblxuLy8gVW5wYWNrIGEgcGFpciBvZiBwYWludCB2YWx1ZXMgYW5kIGludGVycG9sYXRlIGJldHdlZW4gdGhlbS5cbnZlYzQgdW5wYWNrX21peF92ZWM0KGNvbnN0IHZlYzQgcGFja2VkQ29sb3JzLCBjb25zdCBmbG9hdCB0KSB7XG4gICAgdmVjNCBtaW5Db2xvciA9IGRlY29kZV9jb2xvcih2ZWMyKHBhY2tlZENvbG9yc1swXSwgcGFja2VkQ29sb3JzWzFdKSk7XG4gICAgdmVjNCBtYXhDb2xvciA9IGRlY29kZV9jb2xvcih2ZWMyKHBhY2tlZENvbG9yc1syXSwgcGFja2VkQ29sb3JzWzNdKSk7XG4gICAgcmV0dXJuIG1peChtaW5Db2xvciwgbWF4Q29sb3IsIHQpO1xufVxuXG4vLyBUaGUgb2Zmc2V0IGRlcGVuZHMgb24gaG93IG1hbnkgcGl4ZWxzIGFyZSBiZXR3ZWVuIHRoZSB3b3JsZCBvcmlnaW4gYW5kIHRoZSBlZGdlIG9mIHRoZSB0aWxlOlxuLy8gdmVjMiBvZmZzZXQgPSBtb2QocGl4ZWxfY29vcmQsIHNpemUpXG4vL1xuLy8gQXQgaGlnaCB6b29tIGxldmVscyB0aGVyZSBhcmUgYSB0b24gb2YgcGl4ZWxzIGJldHdlZW4gdGhlIHdvcmxkIG9yaWdpbiBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHRpbGUuXG4vLyBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mIHByZWNpc2lvbiBmb3IgaGlnaHAgZmxvYXRzLiBXZSBuZWVkIG1vcmUgdGhhbiB0aGF0LlxuLy9cbi8vIFRoZSBwaXhlbF9jb29yZCBpcyBwYXNzZWQgaW4gYXMgdHdvIDE2IGJpdCB2YWx1ZXM6XG4vLyBwaXhlbF9jb29yZF91cHBlciA9IGZsb29yKHBpeGVsX2Nvb3JkIC8gMl4xNilcbi8vIHBpeGVsX2Nvb3JkX2xvd2VyID0gbW9kKHBpeGVsX2Nvb3JkLCAyXjE2KVxuLy9cbi8vIFRoZSBvZmZzZXQgaXMgY2FsY3VsYXRlZCBpbiBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHNob3VsZCBwcmVzZXJ2ZSB0aGlzIHByZWNpc2lvbjpcbnZlYzIgZ2V0X3BhdHRlcm5fcG9zKGNvbnN0IHZlYzIgcGl4ZWxfY29vcmRfdXBwZXIsIGNvbnN0IHZlYzIgcGl4ZWxfY29vcmRfbG93ZXIsXG4gICAgY29uc3QgdmVjMiBwYXR0ZXJuX3NpemUsIGNvbnN0IGZsb2F0IHRpbGVfdW5pdHNfdG9fcGl4ZWxzLCBjb25zdCB2ZWMyIHBvcykge1xuXG4gICAgdmVjMiBvZmZzZXQgPSBtb2QobW9kKG1vZChwaXhlbF9jb29yZF91cHBlciwgcGF0dGVybl9zaXplKSAqIDI1Ni4wLCBwYXR0ZXJuX3NpemUpICogMjU2LjAgKyBwaXhlbF9jb29yZF9sb3dlciwgcGF0dGVybl9zaXplKTtcbiAgICByZXR1cm4gKHRpbGVfdW5pdHNfdG9fcGl4ZWxzICogcG9zICsgb2Zmc2V0KSAvIHBhdHRlcm5fc2l6ZTtcbn1cbiJ9LGJhY2tncm91bmQ6e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIHZlYzQgdV9jb2xvcjtcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvciAqIHVfb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG59XG4ifSxiYWNrZ3JvdW5kUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XG5cbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIGltYWdlY29vcmRfYik7XG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KSAqIHVfb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjtcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG5cbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcbn1cbiJ9LGNpcmNsZTp7ZnJhZ21lbnRTb3VyY2U6IiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcblxudmFyeWluZyB2ZWMzIHZfZGF0YTtcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG5cbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2X2RhdGEueHk7XG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGggPSBsZW5ndGgoZXh0cnVkZSk7XG5cbiAgICBsb3dwIGZsb2F0IGFudGlhbGlhc2JsdXIgPSB2X2RhdGEuejtcbiAgICBmbG9hdCBhbnRpYWxpYXNlZF9ibHVyID0gLW1heChibHVyLCBhbnRpYWxpYXNibHVyKTtcblxuICAgIGZsb2F0IG9wYWNpdHlfdCA9IHNtb290aHN0ZXAoMC4wLCBhbnRpYWxpYXNlZF9ibHVyLCBleHRydWRlX2xlbmd0aCAtIDEuMCk7XG5cbiAgICBmbG9hdCBjb2xvcl90ID0gc3Ryb2tlX3dpZHRoIDwgMC4wMSA/IDAuMCA6IHNtb290aHN0ZXAoXG4gICAgICAgIGFudGlhbGlhc2VkX2JsdXIsXG4gICAgICAgIDAuMCxcbiAgICAgICAgZXh0cnVkZV9sZW5ndGggLSByYWRpdXMgLyAocmFkaXVzICsgc3Ryb2tlX3dpZHRoKVxuICAgICk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5X3QgKiBtaXgoY29sb3IgKiBvcGFjaXR5LCBzdHJva2VfY29sb3IgKiBzdHJva2Vfb3BhY2l0eSwgY29sb3JfdCk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIGJvb2wgdV9zY2FsZV93aXRoX21hcDtcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxuXG52YXJ5aW5nIHZlYzMgdl9kYXRhO1xuXG52b2lkIG1haW4odm9pZCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG5cbiAgICAvLyB1bmVuY29kZSB0aGUgZXh0cnVzaW9uIHZlY3RvciB0aGF0IHdlIHNudWNrIGludG8gdGhlIGFfcG9zIHZlY3RvclxuICAgIHZlYzIgZXh0cnVkZSA9IHZlYzIobW9kKGFfcG9zLCAyLjApICogMi4wIC0gMS4wKTtcblxuICAgIC8vIG11bHRpcGx5IGFfcG9zIGJ5IDAuNSwgc2luY2Ugd2UgaGFkIGl0ICogMiBpbiBvcmRlciB0byBzbmVha1xuICAgIC8vIGluIGV4dHJ1c2lvbiBkYXRhXG4gICAgdmVjMiBjaXJjbGVfY2VudGVyID0gZmxvb3IoYV9wb3MgKiAwLjUpO1xuICAgIGlmICh1X3BpdGNoX3dpdGhfbWFwKSB7XG4gICAgICAgIHZlYzIgY29ybmVyX3Bvc2l0aW9uID0gY2lyY2xlX2NlbnRlcjtcbiAgICAgICAgaWYgKHVfc2NhbGVfd2l0aF9tYXApIHtcbiAgICAgICAgICAgIGNvcm5lcl9wb3NpdGlvbiArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBQaXRjaGluZyB0aGUgY2lyY2xlIHdpdGggdGhlIG1hcCBlZmZlY3RpdmVseSBzY2FsZXMgaXQgd2l0aCB0aGUgbWFwXG4gICAgICAgICAgICAvLyBUbyBjb3VudGVyYWN0IHRoZSBlZmZlY3QgZm9yIHBpdGNoLXNjYWxlOiB2aWV3cG9ydCwgd2UgcmVzY2FsZSB0aGVcbiAgICAgICAgICAgIC8vIHdob2xlIGNpcmNsZSBiYXNlZCBvbiB0aGUgcGl0Y2ggc2NhbGluZyBlZmZlY3QgYXQgaXRzIGNlbnRyYWwgcG9pbnRcbiAgICAgICAgICAgIHZlYzQgcHJvamVjdGVkX2NlbnRlciA9IHVfbWF0cml4ICogdmVjNChjaXJjbGVfY2VudGVyLCAwLCAxKTtcbiAgICAgICAgICAgIGNvcm5lcl9wb3NpdGlvbiArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGUgKiAocHJvamVjdGVkX2NlbnRlci53IC8gdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGNvcm5lcl9wb3NpdGlvbiwgMCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoY2lyY2xlX2NlbnRlciwgMCwgMSk7XG5cbiAgICAgICAgaWYgKHVfc2NhbGVfd2l0aF9tYXApIHtcbiAgICAgICAgICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGV4dHJ1ZGUgKiAocmFkaXVzICsgc3Ryb2tlX3dpZHRoKSAqIHVfZXh0cnVkZV9zY2FsZSAqIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGV4dHJ1ZGUgKiAocmFkaXVzICsgc3Ryb2tlX3dpZHRoKSAqIHVfZXh0cnVkZV9zY2FsZSAqIGdsX1Bvc2l0aW9uLnc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGEgbWluaW11bSBibHVyIGRpc3RhbmNlIHRoYXQgc2VydmVzIGFzIGEgZmF1eC1hbnRpYWxpYXNpbmcgZm9yXG4gICAgLy8gdGhlIGNpcmNsZS4gc2luY2UgYmx1ciBpcyBhIHJhdGlvIG9mIHRoZSBjaXJjbGUncyBzaXplIGFuZCB0aGUgaW50ZW50IGlzXG4gICAgLy8gdG8ga2VlcCB0aGUgYmx1ciBhdCByb3VnaGx5IDFweCwgdGhlIHR3byBhcmUgaW52ZXJzZWx5IHJlbGF0ZWQuXG4gICAgbG93cCBmbG9hdCBhbnRpYWxpYXNibHVyID0gMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gKHJhZGl1cyArIHN0cm9rZV93aWR0aCk7XG5cbiAgICB2X2RhdGEgPSB2ZWMzKGV4dHJ1ZGUueCwgZXh0cnVkZS55LCBhbnRpYWxpYXNibHVyKTtcbn1cbiJ9LGNsaXBwaW5nTWFzazp7ZnJhZ21lbnRTb3VyY2U6InZvaWQgbWFpbigpIHtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG59XG4iLHZlcnRleFNvdXJjZToiYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbn1cbiJ9LGhlYXRtYXA6e2ZyYWdtZW50U291cmNlOiIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IHdlaWdodFxuXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfaW50ZW5zaXR5O1xudmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcblxuLy8gR2F1c3NpYW4ga2VybmVsIGNvZWZmaWNpZW50OiAxIC8gc3FydCgyICogUEkpXG4jZGVmaW5lIEdBVVNTX0NPRUYgMC4zOTg5NDIyODA0MDE0MzI3XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCB3ZWlnaHRcblxuICAgIC8vIEtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gd2l0aCBhIEdhdXNzaWFuIGtlcm5lbCBvZiBzaXplIDV4NVxuICAgIGZsb2F0IGQgPSAtMC41ICogMy4wICogMy4wICogZG90KHZfZXh0cnVkZSwgdl9leHRydWRlKTtcbiAgICBmbG9hdCB2YWwgPSB3ZWlnaHQgKiB1X2ludGVuc2l0eSAqIEdBVVNTX0NPRUYgKiBleHAoZCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZhbCwgMS4wLCAxLjAsIDEuMCk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IHdlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIGZsb2F0IHVfZXh0cnVkZV9zY2FsZTtcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xudW5pZm9ybSBmbG9hdCB1X2ludGVuc2l0eTtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XG5cbi8vIEVmZmVjdGl2ZSBcIjBcIiBpbiB0aGUga2VybmVsIGRlbnNpdHkgdGV4dHVyZSB0byBhZGp1c3QgdGhlIGtlcm5lbCBzaXplIHRvO1xuLy8gdGhpcyBlbXBpcmljYWxseSBjaG9zZW4gbnVtYmVyIG1pbmltaXplcyBhcnRpZmFjdHMgb24gb3ZlcmxhcHBpbmcga2VybmVsc1xuLy8gZm9yIHR5cGljYWwgaGVhdG1hcCBjYXNlcyAoYXNzdW1pbmcgY2x1c3RlcmVkIHNvdXJjZSlcbmNvbnN0IGhpZ2hwIGZsb2F0IFpFUk8gPSAxLjAgLyAyNTUuMCAvIDE2LjA7XG5cbi8vIEdhdXNzaWFuIGtlcm5lbCBjb2VmZmljaWVudDogMSAvIHNxcnQoMiAqIFBJKVxuI2RlZmluZSBHQVVTU19DT0VGIDAuMzk4OTQyMjgwNDAxNDMyN1xuXG52b2lkIG1haW4odm9pZCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IHdlaWdodFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG5cbiAgICAvLyB1bmVuY29kZSB0aGUgZXh0cnVzaW9uIHZlY3RvciB0aGF0IHdlIHNudWNrIGludG8gdGhlIGFfcG9zIHZlY3RvclxuICAgIHZlYzIgdW5zY2FsZWRfZXh0cnVkZSA9IHZlYzIobW9kKGFfcG9zLCAyLjApICogMi4wIC0gMS4wKTtcblxuICAgIC8vIFRoaXMgJ2V4dHJ1ZGUnIGNvbWVzIGluIHJhbmdpbmcgZnJvbSBbLTEsIC0xXSwgdG8gWzEsIDFdLiAgV2UnbGwgdXNlXG4gICAgLy8gaXQgdG8gcHJvZHVjZSB0aGUgdmVydGljZXMgb2YgYSBzcXVhcmUgbWVzaCBmcmFtaW5nIHRoZSBwb2ludCBmZWF0dXJlXG4gICAgLy8gd2UncmUgYWRkaW5nIHRvIHRoZSBrZXJuZWwgZGVuc2l0eSB0ZXh0dXJlLiAgV2UnbGwgYWxzbyBwYXNzIGl0IGFzXG4gICAgLy8gYSB2YXJ5aW5nLCBzbyB0aGF0IHRoZSBmcmFnbWVudCBzaGFkZXIgY2FuIGRldGVybWluZSB0aGUgZGlzdGFuY2Ugb2ZcbiAgICAvLyBlYWNoIGZyYWdtZW50IGZyb20gdGhlIHBvaW50IGZlYXR1cmUuXG4gICAgLy8gQmVmb3JlIHdlIGRvIHNvLCB3ZSBuZWVkIHRvIHNjYWxlIGl0IHVwIHN1ZmZpY2llbnRseSBzbyB0aGF0IHRoZVxuICAgIC8vIGtlcm5lbCBmYWxscyBlZmZlY3RpdmVseSB0byB6ZXJvIGF0IHRoZSBlZGdlIG9mIHRoZSBtZXNoLlxuICAgIC8vIFRoYXQgaXMsIHdlIHdhbnQgdG8ga25vdyBTIHN1Y2ggdGhhdFxuICAgIC8vIHdlaWdodCAqIHVfaW50ZW5zaXR5ICogR0FVU1NfQ09FRiAqIGV4cCgtMC41ICogMy4wXjIgKiBTXjIpID09IFpFUk9cbiAgICAvLyBXaGljaCBzb2x2ZXMgdG86XG4gICAgLy8gUyA9IHNxcnQoLTIuMCAqIGxvZyhaRVJPIC8gKHdlaWdodCAqIHVfaW50ZW5zaXR5ICogR0FVU1NfQ09FRikpKSAvIDMuMFxuICAgIGZsb2F0IFMgPSBzcXJ0KC0yLjAgKiBsb2coWkVSTyAvIHdlaWdodCAvIHVfaW50ZW5zaXR5IC8gR0FVU1NfQ09FRikpIC8gMy4wO1xuXG4gICAgLy8gUGFzcyB0aGUgdmFyeWluZyBpbiB1bml0cyBvZiByYWRpdXNcbiAgICB2X2V4dHJ1ZGUgPSBTICogdW5zY2FsZWRfZXh0cnVkZTtcblxuICAgIC8vIFNjYWxlIGJ5IHJhZGl1cyBhbmQgdGhlIHpvb20tYmFzZWQgc2NhbGUgZmFjdG9yIHRvIHByb2R1Y2UgYWN0dWFsXG4gICAgLy8gbWVzaCBwb3NpdGlvblxuICAgIHZlYzIgZXh0cnVkZSA9IHZfZXh0cnVkZSAqIHJhZGl1cyAqIHVfZXh0cnVkZV9zY2FsZTtcblxuICAgIC8vIG11bHRpcGx5IGFfcG9zIGJ5IDAuNSwgc2luY2Ugd2UgaGFkIGl0ICogMiBpbiBvcmRlciB0byBzbmVha1xuICAgIC8vIGluIGV4dHJ1c2lvbiBkYXRhXG4gICAgdmVjNCBwb3MgPSB2ZWM0KGZsb29yKGFfcG9zICogMC41KSArIGV4dHJ1ZGUsIDAsIDEpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHBvcztcbn1cbiJ9LGhlYXRtYXBUZXh0dXJlOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfY29sb3JfcmFtcDtcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZmxvYXQgdCA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3BvcykucjtcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVfY29sb3JfcmFtcCwgdmVjMih0LCAwLjUpKTtcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIHVfb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X3dvcmxkO1xuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcyAqIHVfd29ybGQsIDAsIDEpO1xuXG4gICAgdl9wb3MueCA9IGFfcG9zLng7XG4gICAgdl9wb3MueSA9IDEuMCAtIGFfcG9zLnk7XG59XG4ifSxjb2xsaXNpb25Cb3g6e2ZyYWdtZW50U291cmNlOiJcbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcblxudm9pZCBtYWluKCkge1xuXG4gICAgZmxvYXQgYWxwaGEgPSAwLjU7XG5cbiAgICAvLyBSZWQgPSBjb2xsaXNpb24sIGhpZGUgbGFiZWxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCkgKiBhbHBoYTtcblxuICAgIC8vIEJsdWUgPSBubyBjb2xsaXNpb24sIGxhYmVsIGlzIHNob3dpbmdcbiAgICBpZiAodl9wbGFjZWQgPiAwLjUpIHtcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMS4wLCAwLjUpICogYWxwaGE7XG4gICAgfVxuXG4gICAgaWYgKHZfbm90VXNlZCA+IDAuNSkge1xuICAgICAgICAvLyBUaGlzIGJveCBub3QgdXNlZCwgZmFkZSBpdCBvdXRcbiAgICAgICAgZ2xfRnJhZ0NvbG9yICo9IC4xO1xuICAgIH1cbn0iLHZlcnRleFNvdXJjZToiYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX2FuY2hvcl9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX2V4dHJ1ZGU7XG5hdHRyaWJ1dGUgdmVjMiBhX3BsYWNlZDtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcbnVuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xuXG52YXJ5aW5nIGZsb2F0IHZfcGxhY2VkO1xudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfYW5jaG9yX3BvcywgMCwgMSk7XG4gICAgaGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSA9IHByb2plY3RlZFBvaW50Lnc7XG4gICAgaGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXG4gICAgICAgIDAuNSArIDAuNSAqICh1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSxcbiAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBib3hlcyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcbiAgICAgICAgNC4wKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLjAsIDEuMCk7XG4gICAgZ2xfUG9zaXRpb24ueHkgKz0gYV9leHRydWRlICogdV9leHRydWRlX3NjYWxlICogZ2xfUG9zaXRpb24udyAqIGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbztcblxuICAgIHZfcGxhY2VkID0gYV9wbGFjZWQueDtcbiAgICB2X25vdFVzZWQgPSBhX3BsYWNlZC55O1xufVxuIn0sY29sbGlzaW9uQ2lyY2xlOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSBmbG9hdCB1X292ZXJzY2FsZV9mYWN0b3I7XG5cbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcbnZhcnlpbmcgZmxvYXQgdl9yYWRpdXM7XG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xudmFyeWluZyB2ZWMyIHZfZXh0cnVkZV9zY2FsZTtcblxudm9pZCBtYWluKCkge1xuICAgIGZsb2F0IGFscGhhID0gMC41O1xuXG4gICAgLy8gUmVkID0gY29sbGlzaW9uLCBoaWRlIGxhYmVsXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMS4wLCAwLjAsIDAuMCwgMS4wKSAqIGFscGhhO1xuXG4gICAgLy8gQmx1ZSA9IG5vIGNvbGxpc2lvbiwgbGFiZWwgaXMgc2hvd2luZ1xuICAgIGlmICh2X3BsYWNlZCA+IDAuNSkge1xuICAgICAgICBjb2xvciA9IHZlYzQoMC4wLCAwLjAsIDEuMCwgMC41KSAqIGFscGhhO1xuICAgIH1cblxuICAgIGlmICh2X25vdFVzZWQgPiAwLjUpIHtcbiAgICAgICAgLy8gVGhpcyBib3ggbm90IHVzZWQsIGZhZGUgaXQgb3V0XG4gICAgICAgIGNvbG9yICo9IC4yO1xuICAgIH1cblxuICAgIGZsb2F0IGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoID0gbGVuZ3RoKHZfZXh0cnVkZV9zY2FsZSk7XG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGggPSBsZW5ndGgodl9leHRydWRlKSAqIGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoO1xuICAgIGZsb2F0IHN0cm9rZV93aWR0aCA9IDE1LjAgKiBleHRydWRlX3NjYWxlX2xlbmd0aCAvIHVfb3ZlcnNjYWxlX2ZhY3RvcjtcbiAgICBmbG9hdCByYWRpdXMgPSB2X3JhZGl1cyAqIGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoO1xuXG4gICAgZmxvYXQgZGlzdGFuY2VfdG9fZWRnZSA9IGFicyhleHRydWRlX2xlbmd0aCAtIHJhZGl1cyk7XG4gICAgZmxvYXQgb3BhY2l0eV90ID0gc21vb3Roc3RlcCgtc3Ryb2tlX3dpZHRoLCAwLjAsIC1kaXN0YW5jZV90b19lZGdlKTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHlfdCAqIGNvbG9yO1xufVxuIix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzIgYV9hbmNob3JfcG9zO1xuYXR0cmlidXRlIHZlYzIgYV9leHRydWRlO1xuYXR0cmlidXRlIHZlYzIgYV9wbGFjZWQ7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7XG51bmlmb3JtIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcblxudmFyeWluZyBmbG9hdCB2X3BsYWNlZDtcbnZhcnlpbmcgZmxvYXQgdl9ub3RVc2VkO1xudmFyeWluZyBmbG9hdCB2X3JhZGl1cztcblxudmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGVfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfYW5jaG9yX3BvcywgMCwgMSk7XG4gICAgaGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSA9IHByb2plY3RlZFBvaW50Lnc7XG4gICAgaGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXG4gICAgICAgIDAuNSArIDAuNSAqICh1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSxcbiAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBjaXJjbGVzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xuICAgICAgICA0LjApO1xuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAuMCwgMS4wKTtcblxuICAgIGhpZ2hwIGZsb2F0IHBhZGRpbmdfZmFjdG9yID0gMS4yOyAvLyBQYWQgdGhlIHZlcnRpY2VzIHNsaWdodGx5IHRvIG1ha2Ugcm9vbSBmb3IgYW50aS1hbGlhcyBibHVyXG4gICAgZ2xfUG9zaXRpb24ueHkgKz0gYV9leHRydWRlICogdV9leHRydWRlX3NjYWxlICogcGFkZGluZ19mYWN0b3IgKiBnbF9Qb3NpdGlvbi53ICogY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO1xuXG4gICAgdl9wbGFjZWQgPSBhX3BsYWNlZC54O1xuICAgIHZfbm90VXNlZCA9IGFfcGxhY2VkLnk7XG4gICAgdl9yYWRpdXMgPSBhYnMoYV9leHRydWRlLnkpOyAvLyBXZSBkb24ndCBwaXRjaCB0aGUgY2lyY2xlcywgc28gYm90aCB1bml0cyBvZiB0aGUgZXh0cnVzaW9uIHZlY3RvciBhcmUgZXF1YWwgaW4gbWFnbml0dWRlIHRvIHRoZSByYWRpdXNcblxuICAgIHZfZXh0cnVkZSA9IGFfZXh0cnVkZSAqIHBhZGRpbmdfZmFjdG9yO1xuICAgIHZfZXh0cnVkZV9zY2FsZSA9IHVfZXh0cnVkZV9zY2FsZSAqIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAqIGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbztcbn1cbiJ9LGRlYnVnOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSBoaWdocCB2ZWM0IHVfY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yO1xufVxuIix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG59XG4ifSxmaWxsOntmcmFnbWVudFNvdXJjZToiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiBvcGFjaXR5O1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xufVxuIn0sZmlsbE91dGxpbmU6e2ZyYWdtZW50U291cmNlOiIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfcG9zIC0gZ2xfRnJhZ0Nvb3JkLnh5KTtcbiAgICBmbG9hdCBhbHBoYSA9IDEuMCAtIHNtb290aHN0ZXAoMC4wLCAxLjAsIGRpc3QpO1xuICAgIGdsX0ZyYWdDb2xvciA9IG91dGxpbmVfY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV93b3JsZDtcblxudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgIHZfcG9zID0gKGdsX1Bvc2l0aW9uLnh5IC8gZ2xfUG9zaXRpb24udyArIDEuMCkgLyAyLjAgKiB1X3dvcmxkO1xufVxuIn0sZmlsbE91dGxpbmVQYXR0ZXJuOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO1xudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcbnVuaWZvcm0gZmxvYXQgdV9taXg7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIHZlYzIgaW1hZ2Vjb29yZCA9IG1vZCh2X3Bvc19hLCAxLjApO1xuICAgIHZlYzIgcG9zID0gbWl4KHVfcGF0dGVybl90bF9hIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYSAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZCk7XG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zKTtcblxuICAgIHZlYzIgaW1hZ2Vjb29yZF9iID0gbW9kKHZfcG9zX2IsIDEuMCk7XG4gICAgdmVjMiBwb3MyID0gbWl4KHVfcGF0dGVybl90bF9iIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYiAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZF9iKTtcbiAgICB2ZWM0IGNvbG9yMiA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MyKTtcblxuICAgIC8vIGZpbmQgZGlzdGFuY2UgdG8gb3V0bGluZSBmb3IgYWxwaGEgaW50ZXJwb2xhdGlvblxuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X3BvcyAtIGdsX0ZyYWdDb29yZC54eSk7XG4gICAgZmxvYXQgYWxwaGEgPSAxLjAgLSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBkaXN0KTtcblxuXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCkgKiBhbHBoYSAqIG9wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV93b3JsZDtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjtcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcblxuICAgIHZfcG9zX2EgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9hICogdV9wYXR0ZXJuX3NpemVfYSwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xuICAgIHZfcG9zX2IgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9iICogdV9wYXR0ZXJuX3NpemVfYiwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xuXG4gICAgdl9wb3MgPSAoZ2xfUG9zaXRpb24ueHkgLyBnbF9Qb3NpdGlvbi53ICsgMS4wKSAvIDIuMCAqIHVfd29ybGQ7XG59XG4ifSxmaWxsUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XG5cbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIGltYWdlY29vcmRfYik7XG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KSAqIG9wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG5cbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcbn1cbiJ9LGZpbGxFeHRydXNpb246e2ZyYWdtZW50U291cmNlOiJ2YXJ5aW5nIHZlYzQgdl9jb2xvcjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3Jcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdl9jb2xvcjtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMyB1X2xpZ2h0Y29sb3I7XG51bmlmb3JtIGxvd3AgdmVjMyB1X2xpZ2h0cG9zO1xudW5pZm9ybSBsb3dwIGZsb2F0IHVfbGlnaHRpbnRlbnNpdHk7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzQgYV9ub3JtYWxfZWQ7XG5cbnZhcnlpbmcgdmVjNCB2X2NvbG9yO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3Jcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuXG4gICAgdmVjMyBub3JtYWwgPSBhX25vcm1hbF9lZC54eXo7XG5cbiAgICBiYXNlID0gbWF4KDAuMCwgYmFzZSk7XG4gICAgaGVpZ2h0ID0gbWF4KDAuMCwgaGVpZ2h0KTtcblxuICAgIGZsb2F0IHQgPSBtb2Qobm9ybWFsLngsIDIuMCk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgdCA+IDAuMCA/IGhlaWdodCA6IGJhc2UsIDEpO1xuXG4gICAgLy8gUmVsYXRpdmUgbHVtaW5hbmNlIChob3cgZGFyay9icmlnaHQgaXMgdGhlIHN1cmZhY2UgY29sb3I/KVxuICAgIGZsb2F0IGNvbG9ydmFsdWUgPSBjb2xvci5yICogMC4yMTI2ICsgY29sb3IuZyAqIDAuNzE1MiArIGNvbG9yLmIgKiAwLjA3MjI7XG5cbiAgICB2X2NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xuXG4gICAgLy8gQWRkIHNsaWdodCBhbWJpZW50IGxpZ2h0aW5nIHNvIG5vIGV4dHJ1c2lvbnMgYXJlIHRvdGFsbHkgYmxhY2tcbiAgICB2ZWM0IGFtYmllbnRsaWdodCA9IHZlYzQoMC4wMywgMC4wMywgMC4wMywgMS4wKTtcbiAgICBjb2xvciArPSBhbWJpZW50bGlnaHQ7XG5cbiAgICAvLyBDYWxjdWxhdGUgY29zKHRoZXRhKSwgd2hlcmUgdGhldGEgaXMgdGhlIGFuZ2xlIGJldHdlZW4gc3VyZmFjZSBub3JtYWwgYW5kIGRpZmZ1c2UgbGlnaHQgcmF5XG4gICAgZmxvYXQgZGlyZWN0aW9uYWwgPSBjbGFtcChkb3Qobm9ybWFsIC8gMTYzODQuMCwgdV9saWdodHBvcyksIDAuMCwgMS4wKTtcblxuICAgIC8vIEFkanVzdCBkaXJlY3Rpb25hbCBzbyB0aGF0XG4gICAgLy8gdGhlIHJhbmdlIG9mIHZhbHVlcyBmb3IgaGlnaGxpZ2h0L3NoYWRpbmcgaXMgbmFycm93ZXJcbiAgICAvLyB3aXRoIGxvd2VyIGxpZ2h0IGludGVuc2l0eVxuICAgIC8vIGFuZCB3aXRoIGxpZ2h0ZXIvYnJpZ2h0ZXIgc3VyZmFjZSBjb2xvcnNcbiAgICBkaXJlY3Rpb25hbCA9IG1peCgoMS4wIC0gdV9saWdodGludGVuc2l0eSksIG1heCgoMS4wIC0gY29sb3J2YWx1ZSArIHVfbGlnaHRpbnRlbnNpdHkpLCAxLjApLCBkaXJlY3Rpb25hbCk7XG5cbiAgICAvLyBBZGQgZ3JhZGllbnQgYWxvbmcgeiBheGlzIG9mIHNpZGUgc3VyZmFjZXNcbiAgICBpZiAobm9ybWFsLnkgIT0gMC4wKSB7XG4gICAgICAgIGRpcmVjdGlvbmFsICo9IGNsYW1wKCh0ICsgYmFzZSkgKiBwb3coaGVpZ2h0IC8gMTUwLjAsIDAuNSksIG1peCgwLjcsIDAuOTgsIDEuMCAtIHVfbGlnaHRpbnRlbnNpdHkpLCAxLjApO1xuICAgIH1cblxuICAgIC8vIEFzc2lnbiBmaW5hbCBjb2xvciBiYXNlZCBvbiBzdXJmYWNlICsgYW1iaWVudCBsaWdodCBjb2xvciwgZGlmZnVzZSBsaWdodCBkaXJlY3Rpb25hbCwgYW5kIGxpZ2h0IGNvbG9yXG4gICAgLy8gd2l0aCBsb3dlciBib3VuZHMgYWRqdXN0ZWQgdG8gaHVlIG9mIGxpZ2h0XG4gICAgLy8gc28gdGhhdCBzaGFkaW5nIGlzIHRpbnRlZCB3aXRoIHRoZSBjb21wbGVtZW50YXJ5IChvcHBvc2l0ZSkgY29sb3IgdG8gdGhlIGxpZ2h0IGNvbG9yXG4gICAgdl9jb2xvci5yICs9IGNsYW1wKGNvbG9yLnIgKiBkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvci5yLCBtaXgoMC4wLCAwLjMsIDEuMCAtIHVfbGlnaHRjb2xvci5yKSwgMS4wKTtcbiAgICB2X2NvbG9yLmcgKz0gY2xhbXAoY29sb3IuZyAqIGRpcmVjdGlvbmFsICogdV9saWdodGNvbG9yLmcsIG1peCgwLjAsIDAuMywgMS4wIC0gdV9saWdodGNvbG9yLmcpLCAxLjApO1xuICAgIHZfY29sb3IuYiArPSBjbGFtcChjb2xvci5iICogZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IuYiwgbWl4KDAuMCwgMC4zLCAxLjAgLSB1X2xpZ2h0Y29sb3IuYiksIDEuMCk7XG59XG4ifSxmaWxsRXh0cnVzaW9uUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xudmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxuXG4gICAgdmVjMiBpbWFnZWNvb3JkID0gbW9kKHZfcG9zX2EsIDEuMCk7XG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkKTtcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xuXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkX2IpO1xuICAgIHZlYzQgY29sb3IyID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvczIpO1xuXG4gICAgdmVjNCBtaXhlZENvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBtaXhlZENvbG9yICogdl9saWdodGluZztcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjtcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcbnVuaWZvcm0gZmxvYXQgdV9oZWlnaHRfZmFjdG9yO1xuXG51bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO1xudW5pZm9ybSBsb3dwIHZlYzMgdV9saWdodHBvcztcbnVuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xudmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XG52YXJ5aW5nIGZsb2F0IHZfZGlyZWN0aW9uYWw7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxuXG4gICAgdmVjMyBub3JtYWwgPSBhX25vcm1hbF9lZC54eXo7XG4gICAgZmxvYXQgZWRnZWRpc3RhbmNlID0gYV9ub3JtYWxfZWQudztcblxuICAgIGJhc2UgPSBtYXgoMC4wLCBiYXNlKTtcbiAgICBoZWlnaHQgPSBtYXgoMC4wLCBoZWlnaHQpO1xuXG4gICAgZmxvYXQgdCA9IG1vZChub3JtYWwueCwgMi4wKTtcbiAgICBmbG9hdCB6ID0gdCA+IDAuMCA/IGhlaWdodCA6IGJhc2U7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgeiwgMSk7XG5cbiAgICB2ZWMyIHBvcyA9IG5vcm1hbC54ID09IDEuMCAmJiBub3JtYWwueSA9PSAwLjAgJiYgbm9ybWFsLnogPT0gMTYzODQuMFxuICAgICAgICA/IGFfcG9zIC8vIGV4dHJ1c2lvbiB0b3BcbiAgICAgICAgOiB2ZWMyKGVkZ2VkaXN0YW5jZSwgeiAqIHVfaGVpZ2h0X2ZhY3Rvcik7IC8vIGV4dHJ1c2lvbiBzaWRlXG5cbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIHBvcyk7XG4gICAgdl9wb3NfYiA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBwb3MpO1xuXG4gICAgdl9saWdodGluZyA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcbiAgICBmbG9hdCBkaXJlY3Rpb25hbCA9IGNsYW1wKGRvdChub3JtYWwgLyAxNjM4My4wLCB1X2xpZ2h0cG9zKSwgMC4wLCAxLjApO1xuICAgIGRpcmVjdGlvbmFsID0gbWl4KCgxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgbWF4KCgwLjUgKyB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKSwgZGlyZWN0aW9uYWwpO1xuXG4gICAgaWYgKG5vcm1hbC55ICE9IDAuMCkge1xuICAgICAgICBkaXJlY3Rpb25hbCAqPSBjbGFtcCgodCArIGJhc2UpICogcG93KGhlaWdodCAvIDE1MC4wLCAwLjUpLCBtaXgoMC43LCAwLjk4LCAxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKTtcbiAgICB9XG5cbiAgICB2X2xpZ2h0aW5nLnJnYiArPSBjbGFtcChkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvciwgbWl4KHZlYzMoMC4wKSwgdmVjMygwLjMpLCAxLjAgLSB1X2xpZ2h0Y29sb3IpLCB2ZWMzKDEuMCkpO1xufVxuIn0sZXh0cnVzaW9uVGV4dHVyZTp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcbnZhcnlpbmcgdmVjMiB2X3Bvcztcblxudm9pZCBtYWluKCkge1xuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3BvcykgKiB1X29wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV93b3JsZDtcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKiB1X3dvcmxkLCAwLCAxKTtcblxuICAgIHZfcG9zLnggPSBhX3Bvcy54O1xuICAgIHZfcG9zLnkgPSAxLjAgLSBhX3Bvcy55O1xufVxuIn0saGlsbHNoYWRlUHJlcGFyZTp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2VuZGlmXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG51bmlmb3JtIHZlYzIgdV9kaW1lbnNpb247XG51bmlmb3JtIGZsb2F0IHVfem9vbTtcbnVuaWZvcm0gZmxvYXQgdV9tYXh6b29tO1xuXG5mbG9hdCBnZXRFbGV2YXRpb24odmVjMiBjb29yZCwgZmxvYXQgYmlhcykge1xuICAgIC8vIENvbnZlcnQgZW5jb2RlZCBlbGV2YXRpb24gdmFsdWUgdG8gbWV0ZXJzXG4gICAgdmVjNCBkYXRhID0gdGV4dHVyZTJEKHVfaW1hZ2UsIGNvb3JkKSAqIDI1NS4wO1xuICAgIHJldHVybiAoZGF0YS5yICsgZGF0YS5nICogMjU2LjAgKyBkYXRhLmIgKiAyNTYuMCAqIDI1Ni4wKSAvIDQuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgZXBzaWxvbiA9IDEuMCAvIHVfZGltZW5zaW9uO1xuXG4gICAgLy8gcXVlcmllZCBwaXhlbHM6XG4gICAgLy8gKy0tLS0tLS0tLS0tK1xuICAgIC8vIHwgICB8ICAgfCAgIHxcbiAgICAvLyB8IGEgfCBiIHwgYyB8XG4gICAgLy8gfCAgIHwgICB8ICAgfFxuICAgIC8vICstLS0tLS0tLS0tLStcbiAgICAvLyB8ICAgfCAgIHwgICB8XG4gICAgLy8gfCBkIHwgZSB8IGYgfFxuICAgIC8vIHwgICB8ICAgfCAgIHxcbiAgICAvLyArLS0tLS0tLS0tLS0rXG4gICAgLy8gfCAgIHwgICB8ICAgfFxuICAgIC8vIHwgZyB8IGggfCBpIHxcbiAgICAvLyB8ICAgfCAgIHwgICB8XG4gICAgLy8gKy0tLS0tLS0tLS0tK1xuXG4gICAgZmxvYXQgYSA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoLWVwc2lsb24ueCwgLWVwc2lsb24ueSksIDAuMCk7XG4gICAgZmxvYXQgYiA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoMCwgLWVwc2lsb24ueSksIDAuMCk7XG4gICAgZmxvYXQgYyA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoZXBzaWxvbi54LCAtZXBzaWxvbi55KSwgMC4wKTtcbiAgICBmbG9hdCBkID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigtZXBzaWxvbi54LCAwKSwgMC4wKTtcbiAgICBmbG9hdCBlID0gZ2V0RWxldmF0aW9uKHZfcG9zLCAwLjApO1xuICAgIGZsb2F0IGYgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgMCksIDAuMCk7XG4gICAgZmxvYXQgZyA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoLWVwc2lsb24ueCwgZXBzaWxvbi55KSwgMC4wKTtcbiAgICBmbG9hdCBoID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigwLCBlcHNpbG9uLnkpLCAwLjApO1xuICAgIGZsb2F0IGkgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgZXBzaWxvbi55KSwgMC4wKTtcblxuICAgIC8vIGhlcmUgd2UgZGl2aWRlIHRoZSB4IGFuZCB5IHNsb3BlcyBieSA4ICogcGl4ZWwgc2l6ZVxuICAgIC8vIHdoZXJlIHBpeGVsIHNpemUgKGFrYSBtZXRlcnMvcGl4ZWwpIGlzOlxuICAgIC8vIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIHdvcmxkIC8gKHBpeGVscyBwZXIgdGlsZSAqIG51bWJlciBvZiB0aWxlcylcbiAgICAvLyB3aGljaCBpcyBlcXVpdmFsZW50IHRvOiA4ICogNDAwNzUwMTYuNjg1NTc4NSAvICg1MTIgKiBwb3coMiwgdV96b29tKSlcbiAgICAvLyB3aGljaCBjYW4gYmUgcmVkdWNlZCB0bzogcG93KDIsIDE5LjI1NjE5OTc4NTI3IC0gdV96b29tKVxuICAgIC8vIHdlIHdhbnQgdG8gdmVydGljYWxseSBleGFnZ2VyYXRlIHRoZSBoaWxsc2hhZGluZyB0aG91Z2gsIGJlY2F1c2Ugb3RoZXJ3aXNlXG4gICAgLy8gaXQgaXMgYmFyZWx5IG5vdGljZWFibGUgYXQgbG93IHpvb21zLiB0byBkbyB0aGlzLCB3ZSBtdWx0aXBseSB0aGlzIGJ5IHNvbWVcbiAgICAvLyBzY2FsZSBmYWN0b3IgcG93KDIsICh1X3pvb20gLSB1X21heHpvb20pICogYSkgd2hlcmUgYSBpcyBhbiBhcmJpdHJhcnkgdmFsdWVcbiAgICAvLyBIZXJlIHdlIHVzZSBhPTAuMyB3aGljaCB3b3JrcyBvdXQgdG8gdGhlIGV4cHJlc3Npb24gYmVsb3cuIHNlZSBcbiAgICAvLyBuaWNraWRsdWdhc2gncyBhd2Vzb21lIGJyZWFrZG93biBmb3IgbW9yZSBpbmZvXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC81Mjg2I2Rpc2N1c3Npb25fcjE0ODQxOTU1NlxuICAgIGZsb2F0IGV4YWdnZXJhdGlvbiA9IHVfem9vbSA8IDIuMCA/IDAuNCA6IHVfem9vbSA8IDQuNSA/IDAuMzUgOiAwLjM7XG5cbiAgICB2ZWMyIGRlcml2ID0gdmVjMihcbiAgICAgICAgKGMgKyBmICsgZiArIGkpIC0gKGEgKyBkICsgZCArIGcpLFxuICAgICAgICAoZyArIGggKyBoICsgaSkgLSAoYSArIGIgKyBiICsgYylcbiAgICApIC8gIHBvdygyLjAsICh1X3pvb20gLSB1X21heHpvb20pICogZXhhZ2dlcmF0aW9uICsgMTkuMjU2MiAtIHVfem9vbSk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjbGFtcCh2ZWM0KFxuICAgICAgICBkZXJpdi54IC8gMi4wICsgMC41LFxuICAgICAgICBkZXJpdi55IC8gMi4wICsgMC41LFxuICAgICAgICAxLjAsXG4gICAgICAgIDEuMCksIDAuMCwgMS4wKTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG4gICAgdl9wb3MgPSAoYV90ZXh0dXJlX3BvcyAvIDgxOTIuMCkgLyAyLjAgKyAwLjI1O1xufVxuIn0saGlsbHNoYWRlOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcbnZhcnlpbmcgdmVjMiB2X3BvcztcblxudW5pZm9ybSB2ZWMyIHVfbGF0cmFuZ2U7XG51bmlmb3JtIHZlYzIgdV9saWdodDtcbnVuaWZvcm0gdmVjNCB1X3NoYWRvdztcbnVuaWZvcm0gdmVjNCB1X2hpZ2hsaWdodDtcbnVuaWZvcm0gdmVjNCB1X2FjY2VudDtcblxuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBwaXhlbCA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3Bvcyk7XG5cbiAgICB2ZWMyIGRlcml2ID0gKChwaXhlbC5yZyAqIDIuMCkgLSAxLjApO1xuXG4gICAgLy8gV2UgZGl2aWRlIHRoZSBzbG9wZSBieSBhIHNjYWxlIGZhY3RvciBiYXNlZCBvbiB0aGUgY29zaW4gb2YgdGhlIHBpeGVsJ3MgYXBwcm94aW1hdGUgbGF0aXR1ZGVcbiAgICAvLyB0byBhY2NvdW50IGZvciBtZXJjYXRvciBwcm9qZWN0aW9uIGRpc3RvcnRpb24uIHNlZSAjNDgwNyBmb3IgZGV0YWlsc1xuICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gY29zKHJhZGlhbnMoKHVfbGF0cmFuZ2VbMF0gLSB1X2xhdHJhbmdlWzFdKSAqICgxLjAgLSB2X3Bvcy55KSArIHVfbGF0cmFuZ2VbMV0pKTtcbiAgICAvLyBXZSBhbHNvIG11bHRpcGx5IHRoZSBzbG9wZSBieSBhbiBhcmJpdHJhcnkgei1mYWN0b3Igb2YgMS4yNVxuICAgIGZsb2F0IHNsb3BlID0gYXRhbigxLjI1ICogbGVuZ3RoKGRlcml2KSAvIHNjYWxlRmFjdG9yKTtcbiAgICBmbG9hdCBhc3BlY3QgPSBkZXJpdi54ICE9IDAuMCA/IGF0YW4oZGVyaXYueSwgLWRlcml2LngpIDogUEkgLyAyLjAgKiAoZGVyaXYueSA+IDAuMCA/IDEuMCA6IC0xLjApO1xuXG4gICAgZmxvYXQgaW50ZW5zaXR5ID0gdV9saWdodC54O1xuICAgIC8vIFdlIGFkZCBQSSB0byBtYWtlIHRoaXMgcHJvcGVydHkgbWF0Y2ggdGhlIGdsb2JhbCBsaWdodCBvYmplY3QsIHdoaWNoIGFkZHMgUEkvMiB0byB0aGUgbGlnaHQncyBhemltdXRoYWxcbiAgICAvLyBwb3NpdGlvbiBwcm9wZXJ0eSB0byBhY2NvdW50IGZvciAwZGVnIGNvcnJlc3BvbmRpbmcgdG8gbm9ydGgvdGhlIHRvcCBvZiB0aGUgdmlld3BvcnQgaW4gdGhlIHN0eWxlIHNwZWNcbiAgICAvLyBhbmQgdGhlIG9yaWdpbmFsIHNoYWRlciB3YXMgd3JpdHRlbiB0byBhY2NlcHQgKC1pbGx1bWluYXRpb25EaXJlY3Rpb24gLSA5MCkgYXMgdGhlIGF6aW11dGhhbC5cbiAgICBmbG9hdCBhemltdXRoID0gdV9saWdodC55ICsgUEk7XG5cbiAgICAvLyBXZSBzY2FsZSB0aGUgc2xvcGUgZXhwb25lbnRpYWxseSBiYXNlZCBvbiBpbnRlbnNpdHksIHVzaW5nIGEgY2FsY3VsYXRpb24gc2ltaWxhciB0b1xuICAgIC8vIHRoZSBleHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIGluIHRoZSBzdHlsZSBzcGVjOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2Jsb2IvbWFzdGVyL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUuanMjTDIxNy1MMjI4XG4gICAgLy8gc28gdGhhdCBoaWdoZXIgaW50ZW5zaXR5IHZhbHVlcyBjcmVhdGUgbW9yZSBvcGFxdWUgaGlsbHNoYWRpbmcuXG4gICAgZmxvYXQgYmFzZSA9IDEuODc1IC0gaW50ZW5zaXR5ICogMS43NTtcbiAgICBmbG9hdCBtYXhWYWx1ZSA9IDAuNSAqIFBJO1xuICAgIGZsb2F0IHNjYWxlZFNsb3BlID0gaW50ZW5zaXR5ICE9IDAuNSA/ICgocG93KGJhc2UsIHNsb3BlKSAtIDEuMCkgLyAocG93KGJhc2UsIG1heFZhbHVlKSAtIDEuMCkpICogbWF4VmFsdWUgOiBzbG9wZTtcblxuICAgIC8vIFRoZSBhY2NlbnQgY29sb3IgaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBjb3NpbmUgb2YgdGhlIHNsb3BlIHdoaWxlIHRoZSBzaGFkZSBjb2xvciBpcyBjYWxjdWxhdGVkIHdpdGggdGhlIHNpbmVcbiAgICAvLyBzbyB0aGF0IHRoZSBhY2NlbnQgY29sb3IncyByYXRlIG9mIGNoYW5nZSBlYXNlcyBpbiB3aGlsZSB0aGUgc2hhZGUgY29sb3IncyBlYXNlcyBvdXQuXG4gICAgZmxvYXQgYWNjZW50ID0gY29zKHNjYWxlZFNsb3BlKTtcbiAgICAvLyBXZSBtdWx0aXBseSBib3RoIHRoZSBhY2NlbnQgYW5kIHNoYWRlIGNvbG9yIGJ5IGEgY2xhbXBlZCBpbnRlbnNpdHkgdmFsdWVcbiAgICAvLyBzbyB0aGF0IGludGVuc2l0aWVzID49IDAuNSBkbyBub3QgYWRkaXRpb25hbGx5IGFmZmVjdCB0aGUgY29sb3IgdmFsdWVzXG4gICAgLy8gd2hpbGUgaW50ZW5zaXR5IHZhbHVlcyA8IDAuNSBtYWtlIHRoZSBvdmVyYWxsIGNvbG9yIG1vcmUgdHJhbnNwYXJlbnQuXG4gICAgdmVjNCBhY2NlbnRfY29sb3IgPSAoMS4wIC0gYWNjZW50KSAqIHVfYWNjZW50ICogY2xhbXAoaW50ZW5zaXR5ICogMi4wLCAwLjAsIDEuMCk7XG4gICAgZmxvYXQgc2hhZGUgPSBhYnMobW9kKChhc3BlY3QgKyBhemltdXRoKSAvIFBJICsgMC41LCAyLjApIC0gMS4wKTtcbiAgICB2ZWM0IHNoYWRlX2NvbG9yID0gbWl4KHVfc2hhZG93LCB1X2hpZ2hsaWdodCwgc2hhZGUpICogc2luKHNjYWxlZFNsb3BlKSAqIGNsYW1wKGludGVuc2l0eSAqIDIuMCwgMC4wLCAxLjApO1xuICAgIGdsX0ZyYWdDb2xvciA9IGFjY2VudF9jb2xvciAqICgxLjAgLSBzaGFkZV9jb2xvci5hKSArIHNoYWRlX2NvbG9yO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvcztcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICB2X3BvcyA9IGFfdGV4dHVyZV9wb3MgLyA4MTkyLjA7XG59XG4ifSxsaW5lOntmcmFnbWVudFNvdXJjZToiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XG4gICAgLy8gKHZfd2lkdGgyLnMpXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJcblxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cbiNkZWZpbmUgQU5USUFMSUFTSU5HIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTyAvIDIuMFxuXG4vLyBmbG9vcigxMjcgLyAyKSA9PSA2My4wXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxuLy8gdGhlcmUgYXJlIGFsc28gXCJzcGVjaWFsXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cbi8vIHRoaXMgY2FzZSkuXG4vLyAjZGVmaW5lIHNjYWxlIDYzLjBcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcblxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcbnVuaWZvcm0gdmVjMiB1X2dsX3VuaXRzX3RvX3BpeGVscztcblxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xudmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVzb2ZhcjtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuXG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcblxuICAgIHZfbGluZXNvZmFyID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiAyLjA7XG5cbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcblxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IGFfcG9zX25vcm1hbC56dztcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcblxuICAgIC8vIHRoZXNlIHRyYW5zZm9ybWF0aW9ucyB1c2VkIHRvIGJlIGFwcGxpZWQgaW4gdGhlIEpTIGFuZCBuYXRpdmUgY29kZSBiYXNlcy5cbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xuICAgIGZsb2F0IGhhbGZ3aWR0aCA9IHdpZHRoIC8gMi4wO1xuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XG5cbiAgICBmbG9hdCBpbnNldCA9IGdhcHdpZHRoICsgKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XG5cbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQyID0gb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xuXG4gICAgdmVjNCBwcm9qZWN0ZWRfZXh0cnVkZSA9IHVfbWF0cml4ICogdmVjNChkaXN0IC8gdV9yYXRpbywgMC4wLCAwLjApO1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KHBvcyArIG9mZnNldDIgLyB1X3JhdGlvLCAwLjAsIDEuMCkgKyBwcm9qZWN0ZWRfZXh0cnVkZTtcblxuICAgIC8vIGNhbGN1bGF0ZSBob3cgbXVjaCB0aGUgcGVyc3BlY3RpdmUgdmlldyBzcXVpc2hlcyBvciBzdHJldGNoZXMgdGhlIGV4dHJ1ZGVcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlID0gbGVuZ3RoKGRpc3QpO1xuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xuICAgIHZfZ2FtbWFfc2NhbGUgPSBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlIC8gZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTtcblxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcbn1cbiJ9LGxpbmVHcmFkaWVudDp7ZnJhZ21lbnRTb3VyY2U6IlxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG5cbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbnZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2Ugb2YgdGhlIHBpeGVsIGZyb20gdGhlIGxpbmUgaW4gcGl4ZWxzLlxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgYW50aWFsaWFzaW5nIGZhZGUgZmFjdG9yLiBUaGlzIGlzIGVpdGhlciB3aGVuIGZhZGluZyBpblxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxuICAgIC8vICh2X3dpZHRoMi5zKVxuICAgIGZsb2F0IGJsdXIyID0gKGJsdXIgKyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8pICogdl9nYW1tYV9zY2FsZTtcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XG5cbiAgICAvLyBGb3IgZ3JhZGllbnQgbGluZXMsIHZfbGluZXByb2dyZXNzIGlzIHRoZSByYXRpbyBhbG9uZyB0aGUgZW50aXJlIGxpbmUsXG4gICAgLy8gc2NhbGVkIHRvIFswLCAyXjE1KSwgYW5kIHRoZSBncmFkaWVudCByYW1wIGlzIHN0b3JlZCBpbiBhIHRleHR1cmUuXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2ZWMyKHZfbGluZXByb2dyZXNzLCAwLjUpKTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJcbi8vIHRoZSBhdHRyaWJ1dGUgY29udmV5aW5nIHByb2dyZXNzIGFsb25nIGEgbGluZSBpcyBzY2FsZWQgdG8gWzAsIDJeMTUpXG4jZGVmaW5lIE1BWF9MSU5FX0RJU1RBTkNFIDMyNzY3LjBcblxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cbiNkZWZpbmUgQU5USUFMSUFTSU5HIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTyAvIDIuMFxuXG4vLyBmbG9vcigxMjcgLyAyKSA9PSA2My4wXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxuLy8gdGhlcmUgYXJlIGFsc28gXCJzcGVjaWFsXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cbi8vIHRoaXMgY2FzZSkuXG4vLyAjZGVmaW5lIHNjYWxlIDYzLjBcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcblxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcbnVuaWZvcm0gdmVjMiB1X2dsX3VuaXRzX3RvX3BpeGVscztcblxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xudmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVwcm9ncmVzcztcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuXG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcblxuICAgIHZfbGluZXByb2dyZXNzID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiAyLjAgLyBNQVhfTElORV9ESVNUQU5DRTtcblxuICAgIHZlYzIgcG9zID0gYV9wb3Nfbm9ybWFsLnh5O1xuXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXG4gICAgLy8geSBpcyAxIGlmIHRoZSBub3JtYWwgcG9pbnRzIHVwLCBhbmQgLTEgaWYgaXQgcG9pbnRzIGRvd25cbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gYV9wb3Nfbm9ybWFsLnp3O1xuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xuXG4gICAgLy8gdGhlc2UgdHJhbnNmb3JtYXRpb25zIHVzZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgSlMgYW5kIG5hdGl2ZSBjb2RlIGJhc2VzLlxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxuICAgIGdhcHdpZHRoID0gZ2Fwd2lkdGggLyAyLjA7XG4gICAgZmxvYXQgaGFsZndpZHRoID0gd2lkdGggLyAyLjA7XG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcblxuICAgIGZsb2F0IGluc2V0ID0gZ2Fwd2lkdGggKyAoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO1xuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcblxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cbiAgICBtZWRpdW1wIHZlYzIgZGlzdCA9IG91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XG5cbiAgICB2ZWM0IHByb2plY3RlZF9leHRydWRlID0gdV9tYXRyaXggKiB2ZWM0KGRpc3QgLyB1X3JhdGlvLCAwLjAsIDAuMCk7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xuXG4gICAgLy8gY2FsY3VsYXRlIGhvdyBtdWNoIHRoZSBwZXJzcGVjdGl2ZSB2aWV3IHNxdWlzaGVzIG9yIHN0cmV0Y2hlcyB0aGUgZXh0cnVkZVxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eSAvIGdsX1Bvc2l0aW9uLncgKiB1X2dsX3VuaXRzX3RvX3BpeGVscyk7XG4gICAgdl9nYW1tYV9zY2FsZSA9IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgLyBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO1xuXG4gICAgdl93aWR0aDIgPSB2ZWMyKG91dHNldCwgaW5zZXQpO1xufVxuIn0sbGluZVBhdHRlcm46e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO1xudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcbnVuaWZvcm0gZmxvYXQgdV9mYWRlO1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XG52YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XG4gICAgLy8gKHZfd2lkdGgyLnMpXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcblxuICAgIGZsb2F0IHhfYSA9IG1vZCh2X2xpbmVzb2ZhciAvIHVfcGF0dGVybl9zaXplX2EueCwgMS4wKTtcbiAgICBmbG9hdCB4X2IgPSBtb2Qodl9saW5lc29mYXIgLyB1X3BhdHRlcm5fc2l6ZV9iLngsIDEuMCk7XG5cbiAgICAvLyB2X25vcm1hbC55IGlzIDAgYXQgdGhlIG1pZHBvaW50IG9mIHRoZSBsaW5lLCAtMSBhdCB0aGUgbG93ZXIgZWRnZSwgMSBhdCB0aGUgdXBwZXIgZWRnZVxuICAgIC8vIHdlIGNsYW1wIHRoZSBsaW5lIHdpZHRoIG91dHNldCB0byBiZSBiZXR3ZWVuIDAgYW5kIGhhbGYgdGhlIHBhdHRlcm4gaGVpZ2h0IHBsdXMgcGFkZGluZyAoMi4wKVxuICAgIC8vIHRvIGVuc3VyZSB3ZSBkb24ndCBzYW1wbGUgb3V0c2lkZSB0aGUgZGVzaWduYXRlZCBzeW1ib2wgb24gdGhlIHNwcml0ZSBzaGVldC5cbiAgICAvLyAwLjUgaXMgYWRkZWQgdG8gc2hpZnQgdGhlIGNvbXBvbmVudCB0byBiZSBib3VuZGVkIGJldHdlZW4gMCBhbmQgMSBmb3IgaW50ZXJwb2xhdGlvbiBvZlxuICAgIC8vIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVcbiAgICBmbG9hdCB5X2EgPSAwLjUgKyAodl9ub3JtYWwueSAqIGNsYW1wKHZfd2lkdGgyLnMsIDAuMCwgKHVfcGF0dGVybl9zaXplX2EueSArIDIuMCkgLyAyLjApIC8gdV9wYXR0ZXJuX3NpemVfYS55KTtcbiAgICBmbG9hdCB5X2IgPSAwLjUgKyAodl9ub3JtYWwueSAqIGNsYW1wKHZfd2lkdGgyLnMsIDAuMCwgKHVfcGF0dGVybl9zaXplX2IueSArIDIuMCkgLyAyLjApIC8gdV9wYXR0ZXJuX3NpemVfYi55KTtcbiAgICB2ZWMyIHBvc19hID0gbWl4KHVfcGF0dGVybl90bF9hIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYSAvIHVfdGV4c2l6ZSwgdmVjMih4X2EsIHlfYSkpO1xuICAgIHZlYzIgcG9zX2IgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCB2ZWMyKHhfYiwgeV9iKSk7XG5cbiAgICB2ZWM0IGNvbG9yID0gbWl4KHRleHR1cmUyRCh1X2ltYWdlLCBwb3NfYSksIHRleHR1cmUyRCh1X2ltYWdlLCBwb3NfYiksIHVfZmFkZSk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIGFscGhhICogb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6Ii8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xuLy8gc3RvcmVkIGluIGEgYnl0ZSAoLTEyOC4uMTI3KS4gd2Ugc2NhbGUgcmVndWxhciBub3JtYWxzIHVwIHRvIGxlbmd0aCA2MywgYnV0XG4vLyB0aGVyZSBhcmUgYWxzbyBcInNwZWNpYWxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxuLy8gdGhpcyBjYXNlKS5cbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuXG4vLyBXZSBzY2FsZSB0aGUgZGlzdGFuY2UgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgYnVmZmVycyBzbyB0aGF0IHdlIGNhbiBzdG9yZVxuLy8gbG9uZyBkaXN0YW5jZXMgZm9yIGxvbmcgc2VnbWVudHMuIFVzZSB0aGlzIHZhbHVlIHRvIHVuc2NhbGUgdGhlIGRpc3RhbmNlLlxuI2RlZmluZSBMSU5FX0RJU1RBTkNFX1NDQUxFIDIuMFxuXG4vLyB0aGUgZGlzdGFuY2Ugb3ZlciB3aGljaCB0aGUgbGluZSBlZGdlIGZhZGVzIG91dC5cbi8vIFJldGluYSBkZXZpY2VzIG5lZWQgYSBzbWFsbGVyIGRpc3RhbmNlIHRvIGF2b2lkIGFsaWFzaW5nLlxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXG5cbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX25vcm1hbDtcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XG51bmlmb3JtIHZlYzIgdV9nbF91bml0c190b19waXhlbHM7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcbnZhcnlpbmcgZmxvYXQgdl9saW5lc29mYXI7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcblxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XG4gICAgZmxvYXQgYV9saW5lc29mYXIgPSAoZmxvb3IoYV9kYXRhLnogLyA0LjApICsgYV9kYXRhLncgKiA2NC4wKSAqIExJTkVfRElTVEFOQ0VfU0NBTEU7XG5cbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcblxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IGFfcG9zX25vcm1hbC56dztcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcblxuICAgIC8vIHRoZXNlIHRyYW5zZm9ybWF0aW9ucyB1c2VkIHRvIGJlIGFwcGxpZWQgaW4gdGhlIEpTIGFuZCBuYXRpdmUgY29kZSBiYXNlcy5cbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xuICAgIGZsb2F0IGhhbGZ3aWR0aCA9IHdpZHRoIC8gMi4wO1xuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XG5cbiAgICBmbG9hdCBpbnNldCA9IGdhcHdpZHRoICsgKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XG5cbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQyID0gb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xuXG4gICAgdmVjNCBwcm9qZWN0ZWRfZXh0cnVkZSA9IHVfbWF0cml4ICogdmVjNChkaXN0IC8gdV9yYXRpbywgMC4wLCAwLjApO1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KHBvcyArIG9mZnNldDIgLyB1X3JhdGlvLCAwLjAsIDEuMCkgKyBwcm9qZWN0ZWRfZXh0cnVkZTtcblxuICAgIC8vIGNhbGN1bGF0ZSBob3cgbXVjaCB0aGUgcGVyc3BlY3RpdmUgdmlldyBzcXVpc2hlcyBvciBzdHJldGNoZXMgdGhlIGV4dHJ1ZGVcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlID0gbGVuZ3RoKGRpc3QpO1xuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xuICAgIHZfZ2FtbWFfc2NhbGUgPSBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlIC8gZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTtcblxuICAgIHZfbGluZXNvZmFyID0gYV9saW5lc29mYXI7XG4gICAgdl93aWR0aDIgPSB2ZWMyKG91dHNldCwgaW5zZXQpO1xufVxuIn0sbGluZVNERjp7ZnJhZ21lbnRTb3VyY2U6IlxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcbnVuaWZvcm0gZmxvYXQgdV9zZGZnYW1tYTtcbnVuaWZvcm0gZmxvYXQgdV9taXg7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcbnZhcnlpbmcgdmVjMiB2X3RleF9hO1xudmFyeWluZyB2ZWMyIHZfdGV4X2I7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XG4gICAgLy8gKHZfd2lkdGgyLnMpXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcblxuICAgIGZsb2F0IHNkZmRpc3RfYSA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleF9hKS5hO1xuICAgIGZsb2F0IHNkZmRpc3RfYiA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleF9iKS5hO1xuICAgIGZsb2F0IHNkZmRpc3QgPSBtaXgoc2RmZGlzdF9hLCBzZGZkaXN0X2IsIHVfbWl4KTtcbiAgICBhbHBoYSAqPSBzbW9vdGhzdGVwKDAuNSAtIHVfc2RmZ2FtbWEgLyBmbG9vcndpZHRoLCAwLjUgKyB1X3NkZmdhbW1hIC8gZmxvb3J3aWR0aCwgc2RmZGlzdCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIChhbHBoYSAqIG9wYWNpdHkpO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxuLy8gdGhlIG1heGltdW0gYWxsb3dlZCBtaXRlciBsaW1pdCBpcyAyLjAgYXQgdGhlIG1vbWVudC4gdGhlIGV4dHJ1ZGUgbm9ybWFsIGlzXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcbi8vIHRoZXJlIGFyZSBhbHNvIFwic3BlY2lhbFwiIG5vcm1hbHMgdGhhdCBoYXZlIGEgYmlnZ2VyIGxlbmd0aCAob2YgdXAgdG8gMTI2IGluXG4vLyB0aGlzIGNhc2UpLlxuLy8gI2RlZmluZSBzY2FsZSA2My4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5cbi8vIFdlIHNjYWxlIHRoZSBkaXN0YW5jZSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBidWZmZXJzIHNvIHRoYXQgd2UgY2FuIHN0b3JlXG4vLyBsb25nIGRpc3RhbmNlcyBmb3IgbG9uZyBzZWdtZW50cy4gVXNlIHRoaXMgdmFsdWUgdG8gdW5zY2FsZSB0aGUgZGlzdGFuY2UuXG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5cbi8vIHRoZSBkaXN0YW5jZSBvdmVyIHdoaWNoIHRoZSBsaW5lIGVkZ2UgZmFkZXMgb3V0LlxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXG4jZGVmaW5lIEFOVElBTElBU0lORyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAyLjBcblxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5zY2FsZV9hO1xudW5pZm9ybSBmbG9hdCB1X3RleF95X2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYjtcbnVuaWZvcm0gZmxvYXQgdV90ZXhfeV9iO1xudW5pZm9ybSB2ZWMyIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzO1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XG52YXJ5aW5nIHZlYzIgdl90ZXhfYTtcbnZhcnlpbmcgdmVjMiB2X3RleF9iO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuXG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcbiAgICBmbG9hdCBhX2xpbmVzb2ZhciA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogTElORV9ESVNUQU5DRV9TQ0FMRTtcblxuICAgIHZlYzIgcG9zID0gYV9wb3Nfbm9ybWFsLnh5O1xuXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXG4gICAgLy8geSBpcyAxIGlmIHRoZSBub3JtYWwgcG9pbnRzIHVwLCBhbmQgLTEgaWYgaXQgcG9pbnRzIGRvd25cbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gYV9wb3Nfbm9ybWFsLnp3O1xuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xuXG4gICAgLy8gdGhlc2UgdHJhbnNmb3JtYXRpb25zIHVzZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgSlMgYW5kIG5hdGl2ZSBjb2RlIGJhc2VzLlxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxuICAgIGdhcHdpZHRoID0gZ2Fwd2lkdGggLyAyLjA7XG4gICAgZmxvYXQgaGFsZndpZHRoID0gd2lkdGggLyAyLjA7XG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcblxuICAgIGZsb2F0IGluc2V0ID0gZ2Fwd2lkdGggKyAoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO1xuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcblxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cbiAgICBtZWRpdW1wIHZlYzIgZGlzdCA9b3V0c2V0ICogYV9leHRydWRlICogc2NhbGU7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB3aGVuIGRyYXdpbmcgYSBsaW5lIHRoYXQgaXMgdG8gdGhlIHNpZGUgb2YgdGhlIGFjdHVhbCBsaW5lLlxuICAgIC8vIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSB2ZWN0b3IgdGhhdCBwb2ludHMgdG93YXJkcyB0aGUgZXh0cnVkZSwgYnV0IHJvdGF0ZVxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXG4gICAgLy8gZXh0cnVkZSB2ZWN0b3IgcG9pbnRzIGluIGFub3RoZXIgZGlyZWN0aW9uLlxuICAgIG1lZGl1bXAgZmxvYXQgdSA9IDAuNSAqIGFfZGlyZWN0aW9uO1xuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcbiAgICBtZWRpdW1wIHZlYzIgb2Zmc2V0MiA9IG9mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcblxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChwb3MgKyBvZmZzZXQyIC8gdV9yYXRpbywgMC4wLCAxLjApICsgcHJvamVjdGVkX2V4dHJ1ZGU7XG5cbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChkaXN0KTtcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlID0gbGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5IC8gZ2xfUG9zaXRpb24udyAqIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzKTtcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XG5cbiAgICB2X3RleF9hID0gdmVjMihhX2xpbmVzb2ZhciAqIHVfcGF0dGVybnNjYWxlX2EueCAvIGZsb29yd2lkdGgsIG5vcm1hbC55ICogdV9wYXR0ZXJuc2NhbGVfYS55ICsgdV90ZXhfeV9hKTtcbiAgICB2X3RleF9iID0gdmVjMihhX2xpbmVzb2ZhciAqIHVfcGF0dGVybnNjYWxlX2IueCAvIGZsb29yd2lkdGgsIG5vcm1hbC55ICogdV9wYXR0ZXJuc2NhbGVfYi55ICsgdV90ZXhfeV9iKTtcblxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcbn1cbiJ9LHJhc3Rlcjp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gZmxvYXQgdV9mYWRlX3Q7XG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2UwO1xudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTE7XG52YXJ5aW5nIHZlYzIgdl9wb3MwO1xudmFyeWluZyB2ZWMyIHZfcG9zMTtcblxudW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfbG93O1xudW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfaGlnaDtcblxudW5pZm9ybSBmbG9hdCB1X3NhdHVyYXRpb25fZmFjdG9yO1xudW5pZm9ybSBmbG9hdCB1X2NvbnRyYXN0X2ZhY3RvcjtcbnVuaWZvcm0gdmVjMyB1X3NwaW5fd2VpZ2h0cztcblxudm9pZCBtYWluKCkge1xuXG4gICAgLy8gcmVhZCBhbmQgY3Jvc3MtZmFkZSBjb2xvcnMgZnJvbSB0aGUgbWFpbiBhbmQgcGFyZW50IHRpbGVzXG4gICAgdmVjNCBjb2xvcjAgPSB0ZXh0dXJlMkQodV9pbWFnZTAsIHZfcG9zMCk7XG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZTEsIHZfcG9zMSk7XG4gICAgaWYgKGNvbG9yMC5hID4gMC4wKSB7XG4gICAgICAgIGNvbG9yMC5yZ2IgPSBjb2xvcjAucmdiIC8gY29sb3IwLmE7XG4gICAgfVxuICAgIGlmIChjb2xvcjEuYSA+IDAuMCkge1xuICAgICAgICBjb2xvcjEucmdiID0gY29sb3IxLnJnYiAvIGNvbG9yMS5hO1xuICAgIH1cbiAgICB2ZWM0IGNvbG9yID0gbWl4KGNvbG9yMCwgY29sb3IxLCB1X2ZhZGVfdCk7XG4gICAgY29sb3IuYSAqPSB1X29wYWNpdHk7XG4gICAgdmVjMyByZ2IgPSBjb2xvci5yZ2I7XG5cbiAgICAvLyBzcGluXG4gICAgcmdiID0gdmVjMyhcbiAgICAgICAgZG90KHJnYiwgdV9zcGluX3dlaWdodHMueHl6KSxcbiAgICAgICAgZG90KHJnYiwgdV9zcGluX3dlaWdodHMuenh5KSxcbiAgICAgICAgZG90KHJnYiwgdV9zcGluX3dlaWdodHMueXp4KSk7XG5cbiAgICAvLyBzYXR1cmF0aW9uXG4gICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xuICAgIHJnYiArPSAoYXZlcmFnZSAtIHJnYikgKiB1X3NhdHVyYXRpb25fZmFjdG9yO1xuXG4gICAgLy8gY29udHJhc3RcbiAgICByZ2IgPSAocmdiIC0gMC41KSAqIHVfY29udHJhc3RfZmFjdG9yICsgMC41O1xuXG4gICAgLy8gYnJpZ2h0bmVzc1xuICAgIHZlYzMgdV9oaWdoX3ZlYyA9IHZlYzModV9icmlnaHRuZXNzX2xvdywgdV9icmlnaHRuZXNzX2xvdywgdV9icmlnaHRuZXNzX2xvdyk7XG4gICAgdmVjMyB1X2xvd192ZWMgPSB2ZWMzKHVfYnJpZ2h0bmVzc19oaWdoLCB1X2JyaWdodG5lc3NfaGlnaCwgdV9icmlnaHRuZXNzX2hpZ2gpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChtaXgodV9oaWdoX3ZlYywgdV9sb3dfdmVjLCByZ2IpICogY29sb3IuYSwgY29sb3IuYSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV90bF9wYXJlbnQ7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfcGFyZW50O1xudW5pZm9ybSBmbG9hdCB1X2J1ZmZlcl9zY2FsZTtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3MwO1xudmFyeWluZyB2ZWMyIHZfcG9zMTtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICAvLyBXZSBhcmUgdXNpbmcgSW50MTYgZm9yIHRleHR1cmUgcG9zaXRpb24gY29vcmRpbmF0ZXMgdG8gZ2l2ZSB1cyBlbm91Z2ggcHJlY2lzaW9uIGZvclxuICAgIC8vIGZyYWN0aW9uYWwgY29vcmRpbmF0ZXMuIFdlIHVzZSA4MTkyIHRvIHNjYWxlIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGluIHRoZSBidWZmZXJcbiAgICAvLyBhcyBhbiBhcmJpdHJhcmlseSBoaWdoIG51bWJlciB0byBwcmVzZXJ2ZSBhZGVxdWF0ZSBwcmVjaXNpb24gd2hlbiByZW5kZXJpbmcuXG4gICAgLy8gVGhpcyBpcyBhbHNvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBFWFRFTlQgd2UgYXJlIHVzaW5nIGZvciBvdXIgdGlsZSBidWZmZXIgcG9zIGNvb3JkaW5hdGVzLFxuICAgIC8vIHNvIG1hdGggZm9yIG1vZGlmeWluZyBlaXRoZXIgaXMgY29uc2lzdGVudC5cbiAgICB2X3BvczAgPSAoKChhX3RleHR1cmVfcG9zIC8gODE5Mi4wKSAtIDAuNSkgLyB1X2J1ZmZlcl9zY2FsZSApICsgMC41O1xuICAgIHZfcG9zMSA9ICh2X3BvczAgKiB1X3NjYWxlX3BhcmVudCkgKyB1X3RsX3BhcmVudDtcbn1cbiJ9LHN5bWJvbEljb246e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZhcnlpbmcgdmVjMiB2X3RleDtcbnZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIGxvd3AgZmxvYXQgYWxwaGEgPSBvcGFjaXR5ICogdl9mYWRlX29wYWNpdHk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdl90ZXgpICogYWxwaGE7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJjb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzO1xuXG5hdHRyaWJ1dGUgdmVjNCBhX3Bvc19vZmZzZXQ7XG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XG5hdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7XG5hdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7XG5cbnVuaWZvcm0gYm9vbCB1X2lzX3NpemVfem9vbV9jb25zdGFudDtcbnVuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDtcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7IC8vIHVzZWQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiB6b29tIHN0b3BzIHdoZW4gc2l6ZSBpcyBhIGNvbXBvc2l0ZSBmdW5jdGlvblxudW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7IC8vIHVzZWQgd2hlbiBzaXplIGlzIGJvdGggem9vbSBhbmQgZmVhdHVyZSBjb25zdGFudFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7XG51bmlmb3JtIGJvb2wgdV9yb3RhdGVfc3ltYm9sO1xudW5pZm9ybSBoaWdocCBmbG9hdCB1X2FzcGVjdF9yYXRpbztcbnVuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBtYXQ0IHVfbGFiZWxfcGxhbmVfbWF0cml4O1xudW5pZm9ybSBtYXQ0IHVfZ2xfY29vcmRfbWF0cml4O1xuXG51bmlmb3JtIGJvb2wgdV9pc190ZXh0O1xudW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7XG5cbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG5cbnZhcnlpbmcgdmVjMiB2X3RleDtcbnZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIHZlYzIgYV9wb3MgPSBhX3Bvc19vZmZzZXQueHk7XG4gICAgdmVjMiBhX29mZnNldCA9IGFfcG9zX29mZnNldC56dztcblxuICAgIHZlYzIgYV90ZXggPSBhX2RhdGEueHk7XG4gICAgdmVjMiBhX3NpemUgPSBhX2RhdGEuenc7XG5cbiAgICBoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlID0gLWFfcHJvamVjdGVkX3Bvc1syXTtcblxuICAgIGZsb2F0IHNpemU7XG4gICAgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcbiAgICAgICAgc2l6ZSA9IG1peChhX3NpemVbMF0sIGFfc2l6ZVsxXSwgdV9zaXplX3QpIC8gMTAuMDtcbiAgICB9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xuICAgICAgICBzaXplID0gYV9zaXplWzBdIC8gMTAuMDtcbiAgICB9IGVsc2UgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xuICAgICAgICBzaXplID0gdV9zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSB1X3NpemU7XG4gICAgfVxuXG4gICAgdmVjNCBwcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG4gICAgaGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSA9IHByb2plY3RlZFBvaW50Lnc7XG4gICAgLy8gU2VlIGNvbW1lbnRzIGluIHN5bWJvbF9zZGYudmVydGV4XG4gICAgaGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW8gPSB1X3BpdGNoX3dpdGhfbWFwID9cbiAgICAgICAgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSAvIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG4gICAgICAgIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAvIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7XG4gICAgaGlnaHAgZmxvYXQgcGVyc3BlY3RpdmVfcmF0aW8gPSBjbGFtcChcbiAgICAgICAgICAgIDAuNSArIDAuNSAqIGRpc3RhbmNlX3JhdGlvLFxuICAgICAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBzeW1ib2xzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xuICAgICAgICAgICAgNC4wKTtcblxuICAgIHNpemUgKj0gcGVyc3BlY3RpdmVfcmF0aW87XG5cbiAgICBmbG9hdCBmb250U2NhbGUgPSB1X2lzX3RleHQgPyBzaXplIC8gMjQuMCA6IHNpemU7XG5cbiAgICBoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb24gPSAwLjA7XG4gICAgaWYgKHVfcm90YXRlX3N5bWJvbCkge1xuICAgICAgICAvLyBTZWUgY29tbWVudHMgaW4gc3ltYm9sX3NkZi52ZXJ0ZXhcbiAgICAgICAgdmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX3BvcyArIHZlYzIoMSwgMCksIDAsIDEpO1xuXG4gICAgICAgIHZlYzIgYSA9IHByb2plY3RlZFBvaW50Lnh5IC8gcHJvamVjdGVkUG9pbnQudztcbiAgICAgICAgdmVjMiBiID0gb2Zmc2V0UHJvamVjdGVkUG9pbnQueHkgLyBvZmZzZXRQcm9qZWN0ZWRQb2ludC53O1xuXG4gICAgICAgIHN5bWJvbF9yb3RhdGlvbiA9IGF0YW4oKGIueSAtIGEueSkgLyB1X2FzcGVjdF9yYXRpbywgYi54IC0gYS54KTtcbiAgICB9XG5cbiAgICBoaWdocCBmbG9hdCBhbmdsZV9zaW4gPSBzaW4oc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XG4gICAgaGlnaHAgZmxvYXQgYW5nbGVfY29zID0gY29zKHNlZ21lbnRfYW5nbGUgKyBzeW1ib2xfcm90YXRpb24pO1xuICAgIG1hdDIgcm90YXRpb25fbWF0cml4ID0gbWF0MihhbmdsZV9jb3MsIC0xLjAgKiBhbmdsZV9zaW4sIGFuZ2xlX3NpbiwgYW5nbGVfY29zKTtcblxuICAgIHZlYzQgcHJvamVjdGVkX3BvcyA9IHVfbGFiZWxfcGxhbmVfbWF0cml4ICogdmVjNChhX3Byb2plY3RlZF9wb3MueHksIDAuMCwgMS4wKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfZ2xfY29vcmRfbWF0cml4ICogdmVjNChwcm9qZWN0ZWRfcG9zLnh5IC8gcHJvamVjdGVkX3Bvcy53ICsgcm90YXRpb25fbWF0cml4ICogKGFfb2Zmc2V0IC8gMzIuMCAqIGZvbnRTY2FsZSksIDAuMCwgMS4wKTtcblxuICAgIHZfdGV4ID0gYV90ZXggLyB1X3RleHNpemU7XG4gICAgdmVjMiBmYWRlX29wYWNpdHkgPSB1bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7XG4gICAgZmxvYXQgZmFkZV9jaGFuZ2UgPSBmYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDogLXVfZmFkZV9jaGFuZ2U7XG4gICAgdl9mYWRlX29wYWNpdHkgPSBtYXgoMC4wLCBtaW4oMS4wLCBmYWRlX29wYWNpdHlbMF0gKyBmYWRlX2NoYW5nZSkpO1xufVxuIn0sc3ltYm9sU0RGOntmcmFnbWVudFNvdXJjZToiI2RlZmluZSBTREZfUFggOC4wXG4jZGVmaW5lIEVER0VfR0FNTUEgMC4xMDUvREVWSUNFX1BJWEVMX1JBVElPXG5cbnVuaWZvcm0gYm9vbCB1X2lzX2hhbG87XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfZ2FtbWFfc2NhbGU7XG51bmlmb3JtIGJvb2wgdV9pc190ZXh0O1xuXG52YXJ5aW5nIHZlYzIgdl9kYXRhMDtcbnZhcnlpbmcgdmVjMyB2X2RhdGExO1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcblxuICAgIHZlYzIgdGV4ID0gdl9kYXRhMC54eTtcbiAgICBmbG9hdCBnYW1tYV9zY2FsZSA9IHZfZGF0YTEueDtcbiAgICBmbG9hdCBzaXplID0gdl9kYXRhMS55O1xuICAgIGZsb2F0IGZhZGVfb3BhY2l0eSA9IHZfZGF0YTFbMl07XG5cbiAgICBmbG9hdCBmb250U2NhbGUgPSB1X2lzX3RleHQgPyBzaXplIC8gMjQuMCA6IHNpemU7XG5cbiAgICBsb3dwIHZlYzQgY29sb3IgPSBmaWxsX2NvbG9yO1xuICAgIGhpZ2hwIGZsb2F0IGdhbW1hID0gRURHRV9HQU1NQSAvIChmb250U2NhbGUgKiB1X2dhbW1hX3NjYWxlKTtcbiAgICBsb3dwIGZsb2F0IGJ1ZmYgPSAoMjU2LjAgLSA2NC4wKSAvIDI1Ni4wO1xuICAgIGlmICh1X2lzX2hhbG8pIHtcbiAgICAgICAgY29sb3IgPSBoYWxvX2NvbG9yO1xuICAgICAgICBnYW1tYSA9IChoYWxvX2JsdXIgKiAxLjE5IC8gU0RGX1BYICsgRURHRV9HQU1NQSkgLyAoZm9udFNjYWxlICogdV9nYW1tYV9zY2FsZSk7XG4gICAgICAgIGJ1ZmYgPSAoNi4wIC0gaGFsb193aWR0aCAvIGZvbnRTY2FsZSkgLyBTREZfUFg7XG4gICAgfVxuXG4gICAgbG93cCBmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdGV4KS5hO1xuICAgIGhpZ2hwIGZsb2F0IGdhbW1hX3NjYWxlZCA9IGdhbW1hICogZ2FtbWFfc2NhbGU7XG4gICAgaGlnaHAgZmxvYXQgYWxwaGEgPSBzbW9vdGhzdGVwKGJ1ZmYgLSBnYW1tYV9zY2FsZWQsIGJ1ZmYgKyBnYW1tYV9zY2FsZWQsIGRpc3QpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5ICogZmFkZV9vcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6ImNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI2NTM1ODk3OTM7XG5cbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDtcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcbmF0dHJpYnV0ZSB2ZWMzIGFfcHJvamVjdGVkX3BvcztcbmF0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTtcblxuLy8gY29udGVudHMgb2YgYV9zaXplIHZhcnkgYmFzZWQgb24gdGhlIHR5cGUgb2YgcHJvcGVydHkgdmFsdWVcbi8vIHVzZWQgZm9yIHt0ZXh0LGljb259LXNpemUuXG4vLyBGb3IgY29uc3RhbnRzLCBhX3NpemUgaXMgZGlzYWJsZWQuXG4vLyBGb3Igc291cmNlIGZ1bmN0aW9ucywgd2UgYmluZCBvbmx5IG9uZSB2YWx1ZSBwZXIgdmVydGV4OiB0aGUgdmFsdWUgb2Yge3RleHQsaWNvbn0tc2l6ZSBldmFsdWF0ZWQgZm9yIHRoZSBjdXJyZW50IGZlYXR1cmUuXG4vLyBGb3IgY29tcG9zaXRlIGZ1bmN0aW9uczpcbi8vIFsgdGV4dC1zaXplKGxvd2VyWm9vbVN0b3AsIGZlYXR1cmUpLFxuLy8gICB0ZXh0LXNpemUodXBwZXJab29tU3RvcCwgZmVhdHVyZSkgXVxudW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O1xudW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O1xudW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemVfdDsgLy8gdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHpvb20gc3RvcHMgd2hlbiBzaXplIGlzIGEgY29tcG9zaXRlIGZ1bmN0aW9uXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZTsgLy8gdXNlZCB3aGVuIHNpemUgaXMgYm90aCB6b29tIGFuZCBmZWF0dXJlIGNvbnN0YW50XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDtcbnVuaWZvcm0gbWF0NCB1X2dsX2Nvb3JkX21hdHJpeDtcblxudW5pZm9ybSBib29sIHVfaXNfdGV4dDtcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xudW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO1xudW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDtcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87XG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTtcblxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcblxudmFyeWluZyB2ZWMyIHZfZGF0YTA7XG52YXJ5aW5nIHZlYzMgdl9kYXRhMTtcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG5cbiAgICB2ZWMyIGFfcG9zID0gYV9wb3Nfb2Zmc2V0Lnh5O1xuICAgIHZlYzIgYV9vZmZzZXQgPSBhX3Bvc19vZmZzZXQuenc7XG5cbiAgICB2ZWMyIGFfdGV4ID0gYV9kYXRhLnh5O1xuICAgIHZlYzIgYV9zaXplID0gYV9kYXRhLnp3O1xuXG4gICAgaGlnaHAgZmxvYXQgc2VnbWVudF9hbmdsZSA9IC1hX3Byb2plY3RlZF9wb3NbMl07XG4gICAgZmxvYXQgc2l6ZTtcblxuICAgIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XG4gICAgICAgIHNpemUgPSBtaXgoYV9zaXplWzBdLCBhX3NpemVbMV0sIHVfc2l6ZV90KSAvIDEwLjA7XG4gICAgfSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcbiAgICAgICAgc2l6ZSA9IGFfc2l6ZVswXSAvIDEwLjA7XG4gICAgfSBlbHNlIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcbiAgICAgICAgc2l6ZSA9IHVfc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzaXplID0gdV9zaXplO1xuICAgIH1cblxuICAgIHZlYzQgcHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xuICAgIC8vIElmIHRoZSBsYWJlbCBpcyBwaXRjaGVkIHdpdGggdGhlIG1hcCwgbGF5b3V0IGlzIGRvbmUgaW4gcGl0Y2hlZCBzcGFjZSxcbiAgICAvLyB3aGljaCBtYWtlcyBsYWJlbHMgaW4gdGhlIGRpc3RhbmNlIHNtYWxsZXIgcmVsYXRpdmUgdG8gdmlld3BvcnQgc3BhY2UuXG4gICAgLy8gV2UgY291bnRlcmFjdCBwYXJ0IG9mIHRoYXQgZWZmZWN0IGJ5IG11bHRpcGx5aW5nIGJ5IHRoZSBwZXJzcGVjdGl2ZSByYXRpby5cbiAgICAvLyBJZiB0aGUgbGFiZWwgaXNuJ3QgcGl0Y2hlZCB3aXRoIHRoZSBtYXAsIHdlIGRvIGxheW91dCBpbiB2aWV3cG9ydCBzcGFjZSxcbiAgICAvLyB3aGljaCBtYWtlcyBsYWJlbHMgaW4gdGhlIGRpc3RhbmNlIGxhcmdlciByZWxhdGl2ZSB0byB0aGUgZmVhdHVyZXMgYXJvdW5kXG4gICAgLy8gdGhlbS4gV2UgY291bnRlcmFjdCBwYXJ0IG9mIHRoYXQgZWZmZWN0IGJ5IGRpdmlkaW5nIGJ5IHRoZSBwZXJzcGVjdGl2ZSByYXRpby5cbiAgICBoaWdocCBmbG9hdCBkaXN0YW5jZV9yYXRpbyA9IHVfcGl0Y2hfd2l0aF9tYXAgP1xuICAgICAgICBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlIC8gdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcbiAgICAgICAgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIC8gY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtcbiAgICBoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbyA9IGNsYW1wKFxuICAgICAgICAwLjUgKyAwLjUgKiBkaXN0YW5jZV9yYXRpbyxcbiAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBzeW1ib2xzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xuICAgICAgICA0LjApO1xuXG4gICAgc2l6ZSAqPSBwZXJzcGVjdGl2ZV9yYXRpbztcblxuICAgIGZsb2F0IGZvbnRTY2FsZSA9IHVfaXNfdGV4dCA/IHNpemUgLyAyNC4wIDogc2l6ZTtcblxuICAgIGhpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbiA9IDAuMDtcbiAgICBpZiAodV9yb3RhdGVfc3ltYm9sKSB7XG4gICAgICAgIC8vIFBvaW50IGxhYmVscyB3aXRoICdyb3RhdGlvbi1hbGlnbm1lbnQ6IG1hcCcgYXJlIGhvcml6b250YWwgd2l0aCByZXNwZWN0IHRvIHRpbGUgdW5pdHNcbiAgICAgICAgLy8gVG8gZmlndXJlIG91dCB0aGF0IGFuZ2xlIGluIHByb2plY3RlZCBzcGFjZSwgd2UgZHJhdyBhIHNob3J0IGhvcml6b250YWwgbGluZSBpbiB0aWxlXG4gICAgICAgIC8vIHNwYWNlLCBwcm9qZWN0IGl0LCBhbmQgbWVhc3VyZSBpdHMgYW5nbGUgaW4gcHJvamVjdGVkIHNwYWNlLlxuICAgICAgICB2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zICsgdmVjMigxLCAwKSwgMCwgMSk7XG5cbiAgICAgICAgdmVjMiBhID0gcHJvamVjdGVkUG9pbnQueHkgLyBwcm9qZWN0ZWRQb2ludC53O1xuICAgICAgICB2ZWMyIGIgPSBvZmZzZXRQcm9qZWN0ZWRQb2ludC54eSAvIG9mZnNldFByb2plY3RlZFBvaW50Lnc7XG5cbiAgICAgICAgc3ltYm9sX3JvdGF0aW9uID0gYXRhbigoYi55IC0gYS55KSAvIHVfYXNwZWN0X3JhdGlvLCBiLnggLSBhLngpO1xuICAgIH1cblxuICAgIGhpZ2hwIGZsb2F0IGFuZ2xlX3NpbiA9IHNpbihzZWdtZW50X2FuZ2xlICsgc3ltYm9sX3JvdGF0aW9uKTtcbiAgICBoaWdocCBmbG9hdCBhbmdsZV9jb3MgPSBjb3Moc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XG4gICAgbWF0MiByb3RhdGlvbl9tYXRyaXggPSBtYXQyKGFuZ2xlX2NvcywgLTEuMCAqIGFuZ2xlX3NpbiwgYW5nbGVfc2luLCBhbmdsZV9jb3MpO1xuXG4gICAgdmVjNCBwcm9qZWN0ZWRfcG9zID0gdV9sYWJlbF9wbGFuZV9tYXRyaXggKiB2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwgMC4wLCAxLjApO1xuICAgIGdsX1Bvc2l0aW9uID0gdV9nbF9jb29yZF9tYXRyaXggKiB2ZWM0KHByb2plY3RlZF9wb3MueHkgLyBwcm9qZWN0ZWRfcG9zLncgKyByb3RhdGlvbl9tYXRyaXggKiAoYV9vZmZzZXQgLyAzMi4wICogZm9udFNjYWxlKSwgMC4wLCAxLjApO1xuICAgIGZsb2F0IGdhbW1hX3NjYWxlID0gZ2xfUG9zaXRpb24udztcblxuICAgIHZlYzIgdGV4ID0gYV90ZXggLyB1X3RleHNpemU7XG4gICAgdmVjMiBmYWRlX29wYWNpdHkgPSB1bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7XG4gICAgZmxvYXQgZmFkZV9jaGFuZ2UgPSBmYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDogLXVfZmFkZV9jaGFuZ2U7XG4gICAgZmxvYXQgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eSA9IG1heCgwLjAsIG1pbigxLjAsIGZhZGVfb3BhY2l0eVswXSArIGZhZGVfY2hhbmdlKSk7XG5cbiAgICB2X2RhdGEwID0gdmVjMih0ZXgueCwgdGV4LnkpO1xuICAgIHZfZGF0YTEgPSB2ZWMzKGdhbW1hX3NjYWxlLCBzaXplLCBpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5KTtcbn1cbiJ9fSx0cj0vI3ByYWdtYSBtYXBib3g6IChbXHddKykgKFtcd10rKSAoW1x3XSspIChbXHddKykvZyxlcj1mdW5jdGlvbih0KXt2YXIgZT1RZVt0XSxyPXt9O2UuZnJhZ21lbnRTb3VyY2U9ZS5mcmFnbWVudFNvdXJjZS5yZXBsYWNlKHRyLGZ1bmN0aW9uKHQsZSxuLGksYSl7cmV0dXJuIHJbYV09ITAsImRlZmluZSI9PT1lPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxudmFyeWluZyAiK24rIiAiK2krIiAiK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrbisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6IlxuI2lmZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK24rIiAiK2krIiAiK2ErIiA9IHVfIithKyI7XG4jZW5kaWZcbiJ9KSxlLnZlcnRleFNvdXJjZT1lLnZlcnRleFNvdXJjZS5yZXBsYWNlKHRyLGZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89ImZsb2F0Ij09PWk/InZlYzIiOiJ2ZWM0IjtyZXR1cm4gclthXT8iZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG51bmlmb3JtIGxvd3AgZmxvYXQgYV8iK2ErIl90O1xuYXR0cmlidXRlICIrbisiICIrbysiIGFfIithKyI7XG52YXJ5aW5nICIrbisiICIraSsiICIrYSsiO1xuI2Vsc2VcbnVuaWZvcm0gIituKyIgIitpKyIgdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK2ErIiA9IHVucGFja19taXhfIitvKyIoYV8iK2ErIiwgYV8iK2ErIl90KTtcbiNlbHNlXG4gICAgIituKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4iOiJkZWZpbmUiPT09ZT8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbnVuaWZvcm0gbG93cCBmbG9hdCBhXyIrYSsiX3Q7XG5hdHRyaWJ1dGUgIituKyIgIitvKyIgYV8iK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrbisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG4gICAgIituKyIgIitpKyIgIithKyIgPSB1bnBhY2tfbWl4XyIrbysiKGFfIithKyIsIGFfIithKyJfdCk7XG4jZWxzZVxuICAgICIrbisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIn0pfTtmb3IodmFyIHJyIGluIFFlKWVyKHJyKTt2YXIgbnI9UWUsaXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5nbDt0aGlzLnByb2dyYW09aS5jcmVhdGVQcm9ncmFtKCk7dmFyIG89ci5kZWZpbmVzKCkuY29uY2F0KCIjZGVmaW5lIERFVklDRV9QSVhFTF9SQVRJTyAiK2EuZGV2aWNlUGl4ZWxSYXRpby50b0ZpeGVkKDEpKTtuJiZvLnB1c2goIiNkZWZpbmUgT1ZFUkRSQVdfSU5TUEVDVE9SOyIpO3ZhciBzPW8uY29uY2F0KG5yLnByZWx1ZGUuZnJhZ21lbnRTb3VyY2UsZS5mcmFnbWVudFNvdXJjZSkuam9pbigiXG4iKSxsPW8uY29uY2F0KG5yLnByZWx1ZGUudmVydGV4U291cmNlLGUudmVydGV4U291cmNlKS5qb2luKCJcbiIpLGM9aS5jcmVhdGVTaGFkZXIoaS5GUkFHTUVOVF9TSEFERVIpO2kuc2hhZGVyU291cmNlKGMscyksaS5jb21waWxlU2hhZGVyKGMpLGkuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSxjKTt2YXIgdT1pLmNyZWF0ZVNoYWRlcihpLlZFUlRFWF9TSEFERVIpO2kuc2hhZGVyU291cmNlKHUsbCksaS5jb21waWxlU2hhZGVyKHUpLGkuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSx1KTtmb3IodmFyIGY9ci5sYXlvdXRBdHRyaWJ1dGVzfHxbXSxoPTA7aDxmLmxlbmd0aDtoKyspaS5iaW5kQXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLGgsZltoXS5uYW1lKTtpLmxpbmtQcm9ncmFtKHRoaXMucHJvZ3JhbSksdGhpcy5udW1BdHRyaWJ1dGVzPWkuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0saS5BQ1RJVkVfQVRUUklCVVRFUyksdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMudW5pZm9ybXM9e307Zm9yKHZhciBwPTA7cDx0aGlzLm51bUF0dHJpYnV0ZXM7cCsrKXt2YXIgZD1pLmdldEFjdGl2ZUF0dHJpYih0aGlzLnByb2dyYW0scCk7ZCYmKHRoaXMuYXR0cmlidXRlc1tkLm5hbWVdPWkuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLGQubmFtZSkpfWZvcih2YXIgZz1pLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLGkuQUNUSVZFX1VOSUZPUk1TKSx2PTA7djxnO3YrKyl7dmFyIG09aS5nZXRBY3RpdmVVbmlmb3JtKHRoaXMucHJvZ3JhbSx2KTttJiYodGhpcy51bmlmb3Jtc1ttLm5hbWVdPWkuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSxtLm5hbWUpKX19O2Z1bmN0aW9uIGFyKGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPW5bb107aWYoaS5pc0xlc3NUaGFuKHMudGlsZUlEKSlicmVhaztpZihyLmtleT09PXMudGlsZUlELmtleSlyZXR1cm47aWYocy50aWxlSUQuaXNDaGlsZE9mKHIpKXtmb3IodmFyIGw9ci5jaGlsZHJlbigxLzApLGM9MDtjPGwubGVuZ3RoO2MrKylhcihlLGxbY10sbi5zbGljZShvKSxpLGEpO3JldHVybn19dmFyIHU9ci5vdmVyc2NhbGVkWi1lLm92ZXJzY2FsZWRaLGY9bmV3IHQuQ2Fub25pY2FsVGlsZUlEKHUsci5jYW5vbmljYWwueC0oZS5jYW5vbmljYWwueDw8dSksci5jYW5vbmljYWwueS0oZS5jYW5vbmljYWwueTw8dSkpO2FbZi5rZXldPWFbZi5rZXldfHxmfWZ1bmN0aW9uIG9yKHQsZSxyLG4saSl7dmFyIGE9dC5jb250ZXh0LG89YS5nbCxzPWk/dC51c2VQcm9ncmFtKCJjb2xsaXNpb25DaXJjbGUiKTp0LnVzZVByb2dyYW0oImNvbGxpc2lvbkJveCIpO2Euc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxhLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxhLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciBjPW5bbF0sdT1lLmdldFRpbGUoYyksZj11LmdldEJ1Y2tldChyKTtpZihmKXt2YXIgaD1pP2YuY29sbGlzaW9uQ2lyY2xlOmYuY29sbGlzaW9uQm94O2lmKGgpe28udW5pZm9ybU1hdHJpeDRmdihzLnVuaWZvcm1zLnVfbWF0cml4LCExLGMucG9zTWF0cml4KSxpfHxhLmxpbmVXaWR0aC5zZXQoMSksby51bmlmb3JtMWYocy51bmlmb3Jtcy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UsdC50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSk7dmFyIHA9TWUodSwxLHQudHJhbnNmb3JtLnpvb20pLGQ9TWF0aC5wb3coMix0LnRyYW5zZm9ybS56b29tLXUudGlsZUlELm92ZXJzY2FsZWRaKTtvLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfcGl4ZWxzX3RvX3RpbGVfdW5pdHMscCksby51bmlmb3JtMmYocy51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLyhwKmQpLHQudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1sxXS8ocCpkKSksby51bmlmb3JtMWYocy51bmlmb3Jtcy51X292ZXJzY2FsZV9mYWN0b3IsdS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCkpLHMuZHJhdyhhLGk/by5UUklBTkdMRVM6by5MSU5FUyxyLmlkLGgubGF5b3V0VmVydGV4QnVmZmVyLGguaW5kZXhCdWZmZXIsaC5zZWdtZW50cyxudWxsLGguY29sbGlzaW9uVmVydGV4QnVmZmVyLG51bGwpfX19fWlyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsKXtmb3IodmFyIGMsdT10LmdsLGY9KGM9e30sY1t1LkxJTkVTXT0yLGNbdS5UUklBTkdMRVNdPTMsYylbZV0saD0wLHA9YS5nZXQoKTtoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF0sZz1kLnZhb3N8fChkLnZhb3M9e30pOyhnW3JdfHwoZ1tyXT1uZXcgUSkpLmJpbmQodCx0aGlzLG4sbz9vLmdldFBhaW50VmVydGV4QnVmZmVycygpOltdLGksZC52ZXJ0ZXhPZmZzZXQscyxsKSx1LmRyYXdFbGVtZW50cyhlLGQucHJpbWl0aXZlTGVuZ3RoKmYsdS5VTlNJR05FRF9TSE9SVCxkLnByaW1pdGl2ZU9mZnNldCpmKjIpfX07dmFyIHNyPXQubWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSksbHI9dC5kZWZhdWx0JDE5LmxheW91dDtmdW5jdGlvbiBjcih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdSxmPXQuY29udGV4dCxoPWYuZ2wscD10LnRyYW5zZm9ybSxkPSJtYXAiPT09cyxnPSJtYXAiPT09bCx2PWQmJiJsaW5lIj09PXIubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpLG09ZCYmIWcmJiF2LHk9ZztmLnNldERlcHRoTW9kZSh5P3QuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSk6cXQuZGlzYWJsZWQpO2Zvcih2YXIgeD0wLGI9bjt4PGIubGVuZ3RoO3grPTEpe3ZhciBfPWJbeF0sdz1lLmdldFRpbGUoXyksaz13LmdldEJ1Y2tldChyKTtpZihrKXt2YXIgVD1pP2sudGV4dDprLmljb247aWYoVCYmVC5zZWdtZW50cy5nZXQoKS5sZW5ndGgpe3ZhciBBPVQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSxNPWl8fGsuc2RmSWNvbnMsUz1pP2sudGV4dFNpemVEYXRhOmsuaWNvblNpemVEYXRhO2lmKHV8fCh1PXQudXNlUHJvZ3JhbShNPyJzeW1ib2xTREYiOiJzeW1ib2xJY29uIixBKSxBLnNldFVuaWZvcm1zKHQuY29udGV4dCx1LHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLHVyKHUsdCxyLGksbSxnLFMpKSxmLmFjdGl2ZVRleHR1cmUuc2V0KGguVEVYVFVSRTApLGgudW5pZm9ybTFpKHUudW5pZm9ybXMudV90ZXh0dXJlLDApLGkpdy5nbHlwaEF0bGFzVGV4dHVyZS5iaW5kKGguTElORUFSLGguQ0xBTVBfVE9fRURHRSksaC51bmlmb3JtMmZ2KHUudW5pZm9ybXMudV90ZXhzaXplLHcuZ2x5cGhBdGxhc1RleHR1cmUuc2l6ZSk7ZWxzZXt2YXIgRT0xIT09ci5sYXlvdXQuZ2V0KCJpY29uLXNpemUiKS5jb25zdGFudE9yKDApfHxrLmljb25zTmVlZExpbmVhcixDPWd8fDAhPT1wLnBpdGNoO3cuaWNvbkF0bGFzVGV4dHVyZS5iaW5kKE18fHQub3B0aW9ucy5yb3RhdGluZ3x8dC5vcHRpb25zLnpvb21pbmd8fEV8fEM/aC5MSU5FQVI6aC5ORUFSRVNULGguQ0xBTVBfVE9fRURHRSksaC51bmlmb3JtMmZ2KHUudW5pZm9ybXMudV90ZXhzaXplLHcuaWNvbkF0bGFzVGV4dHVyZS5zaXplKX1oLnVuaWZvcm1NYXRyaXg0ZnYodS51bmlmb3Jtcy51X21hdHJpeCwhMSx0LnRyYW5zbGF0ZVBvc01hdHJpeChfLnBvc01hdHJpeCx3LGEsbykpO3ZhciBMPU1lKHcsMSx0LnRyYW5zZm9ybS56b29tKSx6PWZlKF8ucG9zTWF0cml4LGcsZCx0LnRyYW5zZm9ybSxMKSxPPWhlKF8ucG9zTWF0cml4LGcsZCx0LnRyYW5zZm9ybSxMKTtoLnVuaWZvcm1NYXRyaXg0ZnYodS51bmlmb3Jtcy51X2dsX2Nvb3JkX21hdHJpeCwhMSx0LnRyYW5zbGF0ZVBvc01hdHJpeChPLHcsYSxvLCEwKSksdj8oaC51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9sYWJlbF9wbGFuZV9tYXRyaXgsITEsc3IpLGdlKGssXy5wb3NNYXRyaXgsdCxpLHosTyxnLGMpKTpoLnVuaWZvcm1NYXRyaXg0ZnYodS51bmlmb3Jtcy51X2xhYmVsX3BsYW5lX21hdHJpeCwhMSx6KSxoLnVuaWZvcm0xZih1LnVuaWZvcm1zLnVfZmFkZV9jaGFuZ2UsdC5vcHRpb25zLmZhZGVEdXJhdGlvbj90LnN5bWJvbEZhZGVDaGFuZ2U6MSksZnIodSxBLHQscix3LFQsaSxNLGcpfX19fWZ1bmN0aW9uIHVyKGUscixuLGksYSxvLHMpe3ZhciBsPXIuY29udGV4dC5nbCxjPXIudHJhbnNmb3JtO2wudW5pZm9ybTFpKGUudW5pZm9ybXMudV9waXRjaF93aXRoX21hcCxvPzE6MCksbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X2lzX3RleHQsaT8xOjApLGwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9waXRjaCxjLnBpdGNoLzM2MCoyKk1hdGguUEkpO3ZhciB1PSJjb25zdGFudCI9PT1zLmZ1bmN0aW9uVHlwZXx8InNvdXJjZSI9PT1zLmZ1bmN0aW9uVHlwZSxmPSJjb25zdGFudCI9PT1zLmZ1bmN0aW9uVHlwZXx8ImNhbWVyYSI9PT1zLmZ1bmN0aW9uVHlwZTtsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50LHU/MTowKSxsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50LGY/MTowKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSxjLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpO3ZhciBoPXQuZXZhbHVhdGVTaXplRm9yWm9vbShzLGMuem9vbSxsci5wcm9wZXJ0aWVzW2k/InRleHQtc2l6ZSI6Imljb24tc2l6ZSJdKTt2b2lkIDAhPT1oLnVTaXplVCYmbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X3NpemVfdCxoLnVTaXplVCksdm9pZCAwIT09aC51U2l6ZSYmbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X3NpemUsaC51U2l6ZSksbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X2FzcGVjdF9yYXRpbyxjLndpZHRoL2MuaGVpZ2h0KSxsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfcm90YXRlX3N5bWJvbCxhPzE6MCl9ZnVuY3Rpb24gZnIodCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPXIuY29udGV4dCx1PWMuZ2wsZj1yLnRyYW5zZm9ybTtpZihzKXt2YXIgaD0wIT09bi5wYWludC5nZXQobz8idGV4dC1oYWxvLXdpZHRoIjoiaWNvbi1oYWxvLXdpZHRoIikuY29uc3RhbnRPcigxKSxwPWw/TWF0aC5jb3MoZi5fcGl0Y2gpKmYuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZToxO3UudW5pZm9ybTFmKHQudW5pZm9ybXMudV9nYW1tYV9zY2FsZSxwKSxoJiYodS51bmlmb3JtMWYodC51bmlmb3Jtcy51X2lzX2hhbG8sMSksaHIoYSxuLGMsdCkpLHUudW5pZm9ybTFmKHQudW5pZm9ybXMudV9pc19oYWxvLDApfWhyKGEsbixjLHQpfWZ1bmN0aW9uIGhyKHQsZSxyLG4pe24uZHJhdyhyLHIuZ2wuVFJJQU5HTEVTLGUuaWQsdC5sYXlvdXRWZXJ0ZXhCdWZmZXIsdC5pbmRleEJ1ZmZlcix0LnNlZ21lbnRzLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChlLmlkKSx0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsdC5vcGFjaXR5VmVydGV4QnVmZmVyKX1mdW5jdGlvbiBwcih0LGUscixuLGksbyxzLGwsYyl7dmFyIHUsZixoLHAsZD1lLmNvbnRleHQsZz1kLmdsLHY9aS5wYWludC5nZXQoImxpbmUtZGFzaGFycmF5IiksbT1pLnBhaW50LmdldCgibGluZS1wYXR0ZXJuIik7aWYobHx8Yyl7dmFyIHk9MS9NZShyLDEsZS50cmFuc2Zvcm0udGlsZVpvb20pO2lmKHYpe3U9ZS5saW5lQXRsYXMuZ2V0RGFzaCh2LmZyb20sInJvdW5kIj09PWkubGF5b3V0LmdldCgibGluZS1jYXAiKSksZj1lLmxpbmVBdGxhcy5nZXREYXNoKHYudG8sInJvdW5kIj09PWkubGF5b3V0LmdldCgibGluZS1jYXAiKSk7dmFyIHg9dS53aWR0aCp2LmZyb21TY2FsZSxiPWYud2lkdGgqdi50b1NjYWxlO2cudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuc2NhbGVfYSx5L3gsLXUuaGVpZ2h0LzIpLGcudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuc2NhbGVfYix5L2IsLWYuaGVpZ2h0LzIpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV9zZGZnYW1tYSxlLmxpbmVBdGxhcy53aWR0aC8oMjU2Kk1hdGgubWluKHgsYikqYS5kZXZpY2VQaXhlbFJhdGlvKS8yKX1lbHNlIGlmKG0pe2lmKGg9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihtLmZyb20pLHA9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihtLnRvKSwhaHx8IXApcmV0dXJuO2cudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuX3NpemVfYSxoLmRpc3BsYXlTaXplWzBdKm0uZnJvbVNjYWxlL3ksaC5kaXNwbGF5U2l6ZVsxXSksZy51bmlmb3JtMmYodC51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9iLHAuZGlzcGxheVNpemVbMF0qbS50b1NjYWxlL3kscC5kaXNwbGF5U2l6ZVsxXSk7dmFyIF89ZS5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCksdz1fLndpZHRoLGs9Xy5oZWlnaHQ7Zy51bmlmb3JtMmZ2KHQudW5pZm9ybXMudV90ZXhzaXplLFt3LGtdKX1nLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfZ2xfdW5pdHNfdG9fcGl4ZWxzLDEvZS50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLDEvZS50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdKX1sJiYodj8oZy51bmlmb3JtMWkodC51bmlmb3Jtcy51X2ltYWdlLDApLGQuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCksZS5saW5lQXRsYXMuYmluZChkKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfdGV4X3lfYSx1LnkpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV90ZXhfeV9iLGYueSksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X21peCx2LnQpKTptJiYoZy51bmlmb3JtMWkodC51bmlmb3Jtcy51X2ltYWdlLDApLGQuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCksZS5pbWFnZU1hbmFnZXIuYmluZChkKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYSxoLnRsKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYSxoLmJyKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYixwLnRsKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYixwLmJyKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfZmFkZSxtLnQpKSksZC5zZXRTdGVuY2lsTW9kZShlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcobykpO3ZhciBUPWUudHJhbnNsYXRlUG9zTWF0cml4KG8ucG9zTWF0cml4LHIsaS5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIiksaS5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlLWFuY2hvciIpKTtpZihnLnVuaWZvcm1NYXRyaXg0ZnYodC51bmlmb3Jtcy51X21hdHJpeCwhMSxUKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfcmF0aW8sMS9NZShyLDEsZS50cmFuc2Zvcm0uem9vbSkpLGkucGFpbnQuZ2V0KCJsaW5lLWdyYWRpZW50Iikpe2QuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCk7dmFyIEE9aS5ncmFkaWVudFRleHR1cmU7aWYoIWkuZ3JhZGllbnQpcmV0dXJuO0F8fChBPWkuZ3JhZGllbnRUZXh0dXJlPW5ldyB6KGQsaS5ncmFkaWVudCxnLlJHQkEpKSxBLmJpbmQoZy5MSU5FQVIsZy5DTEFNUF9UT19FREdFKSxnLnVuaWZvcm0xaSh0LnVuaWZvcm1zLnVfaW1hZ2UsMCl9dC5kcmF3KGQsZy5UUklBTkdMRVMsaS5pZCxuLmxheW91dFZlcnRleEJ1ZmZlcixuLmluZGV4QnVmZmVyLG4uc2VnbWVudHMscyl9dmFyIGRyPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuITE7dmFyIHI9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20pLG49ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvKTtyZXR1cm4hcnx8IW59LGdyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmNvbnRleHQsaT1uLmdsLGE9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20pLG89ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvKTtpLnVuaWZvcm0xaShyLnVuaWZvcm1zLnVfaW1hZ2UsMCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3RsX2EsYS50bCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX2JyX2EsYS5iciksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3RsX2Isby50bCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX2JyX2Isby5icik7dmFyIHM9ZS5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCksbD1zLndpZHRoLGM9cy5oZWlnaHQ7aS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV90ZXhzaXplLFtsLGNdKSxpLnVuaWZvcm0xZihyLnVuaWZvcm1zLnVfbWl4LHQudCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3NpemVfYSxhLmRpc3BsYXlTaXplKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9iLG8uZGlzcGxheVNpemUpLGkudW5pZm9ybTFmKHIudW5pZm9ybXMudV9zY2FsZV9hLHQuZnJvbVNjYWxlKSxpLnVuaWZvcm0xZihyLnVuaWZvcm1zLnVfc2NhbGVfYix0LnRvU2NhbGUpLG4uYWN0aXZlVGV4dHVyZS5zZXQoaS5URVhUVVJFMCksZS5pbWFnZU1hbmFnZXIuYmluZChlLmNvbnRleHQpfSx2cj1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5jb250ZXh0LmdsO24udW5pZm9ybTFmKHIudW5pZm9ybXMudV90aWxlX3VuaXRzX3RvX3BpeGVscywxL01lKHQsMSxlLnRyYW5zZm9ybS50aWxlWm9vbSkpO3ZhciBpPU1hdGgucG93KDIsdC50aWxlSUQub3ZlcnNjYWxlZFopLGE9dC50aWxlU2l6ZSpNYXRoLnBvdygyLGUudHJhbnNmb3JtLnRpbGVab29tKS9pLG89YSoodC50aWxlSUQuY2Fub25pY2FsLngrdC50aWxlSUQud3JhcCppKSxzPWEqdC50aWxlSUQuY2Fub25pY2FsLnk7bi51bmlmb3JtMmYoci51bmlmb3Jtcy51X3BpeGVsX2Nvb3JkX3VwcGVyLG8+PjE2LHM+PjE2KSxuLnVuaWZvcm0yZihyLnVuaWZvcm1zLnVfcGl4ZWxfY29vcmRfbG93ZXIsNjU1MzUmbyw2NTUzNSZzKX07ZnVuY3Rpb24gbXIodCxlLHIsbixpKXtpZighZHIoci5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLHQpKWZvcih2YXIgYT0hMCxvPTAscz1uO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWUuZ2V0VGlsZShsKSx1PWMuZ2V0QnVja2V0KHIpO3UmJih0LmNvbnRleHQuc2V0U3RlbmNpbE1vZGUodC5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKGwpKSxpKHQsZSxyLGMsbCx1LGEpLGE9ITEpfX1mdW5jdGlvbiB5cih0LGUscixuLGksYSxvKXt2YXIgcz10LmNvbnRleHQuZ2wsbD1hLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCk7YnIoImZpbGwiLHIucGFpbnQuZ2V0KCJmaWxsLXBhdHRlcm4iKSx0LGwscixuLGksbykuZHJhdyh0LmNvbnRleHQscy5UUklBTkdMRVMsci5pZCxhLmxheW91dFZlcnRleEJ1ZmZlcixhLmluZGV4QnVmZmVyLGEuc2VnbWVudHMsbCl9ZnVuY3Rpb24geHIodCxlLHIsbixpLGEsbyl7dmFyIHM9dC5jb250ZXh0LmdsLGw9YS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLGM9YnIoImZpbGxPdXRsaW5lIixyLmdldFBhaW50UHJvcGVydHkoImZpbGwtb3V0bGluZS1jb2xvciIpP251bGw6ci5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLHQsbCxyLG4saSxvKTtzLnVuaWZvcm0yZihjLnVuaWZvcm1zLnVfd29ybGQscy5kcmF3aW5nQnVmZmVyV2lkdGgscy5kcmF3aW5nQnVmZmVySGVpZ2h0KSxjLmRyYXcodC5jb250ZXh0LHMuTElORVMsci5pZCxhLmxheW91dFZlcnRleEJ1ZmZlcixhLmluZGV4QnVmZmVyMixhLnNlZ21lbnRzMixsKX1mdW5jdGlvbiBicih0LGUscixuLGksYSxvLHMpe3ZhciBsLGM9ci5jb250ZXh0LnByb2dyYW0uZ2V0KCk7cmV0dXJuIGU/KGw9ci51c2VQcm9ncmFtKHQrIlBhdHRlcm4iLG4pLChzfHxsLnByb2dyYW0hPT1jKSYmKG4uc2V0VW5pZm9ybXMoci5jb250ZXh0LGwsaS5wYWludCx7em9vbTpyLnRyYW5zZm9ybS56b29tfSksZ3IoZSxyLGwpKSx2cihhLHIsbCkpOihsPXIudXNlUHJvZ3JhbSh0LG4pLChzfHxsLnByb2dyYW0hPT1jKSYmbi5zZXRVbmlmb3JtcyhyLmNvbnRleHQsbCxpLnBhaW50LHt6b29tOnIudHJhbnNmb3JtLnpvb219KSksci5jb250ZXh0LmdsLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxyLnRyYW5zbGF0ZVBvc01hdHJpeChvLnBvc01hdHJpeCxhLGkucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpLGkucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiKSkpLGx9dmFyIF9yPXQuZGVmYXVsdCQyMC5tYXQzLHdyPXQuZGVmYXVsdCQyMC5tYXQ0LGtyPXQuZGVmYXVsdCQyMC52ZWMzO2Z1bmN0aW9uIFRyKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQuY29udGV4dCxsPXMuZ2wsYz1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tcGF0dGVybiIpLHU9dC5jb250ZXh0LnByb2dyYW0uZ2V0KCksZj1hLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksaD10LnVzZVByb2dyYW0oYz8iZmlsbEV4dHJ1c2lvblBhdHRlcm4iOiJmaWxsRXh0cnVzaW9uIixmKTtpZigob3x8aC5wcm9ncmFtIT09dSkmJmYuc2V0VW5pZm9ybXMocyxoLHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLGMpe2lmKGRyKGMsdCkpcmV0dXJuO2dyKGMsdCxoKSx2cihuLHQsaCksbC51bmlmb3JtMWYoaC51bmlmb3Jtcy51X2hlaWdodF9mYWN0b3IsLU1hdGgucG93KDIsaS5vdmVyc2NhbGVkWikvbi50aWxlU2l6ZS84KX10LmNvbnRleHQuZ2wudW5pZm9ybU1hdHJpeDRmdihoLnVuaWZvcm1zLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KGkucG9zTWF0cml4LG4sci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSIpLHIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIikpKSxmdW5jdGlvbih0LGUpe3ZhciByPWUuY29udGV4dC5nbCxuPWUuc3R5bGUubGlnaHQsaT1uLnByb3BlcnRpZXMuZ2V0KCJwb3NpdGlvbiIpLGE9W2kueCxpLnksaS56XSxvPV9yLmNyZWF0ZSgpOyJ2aWV3cG9ydCI9PT1uLnByb3BlcnRpZXMuZ2V0KCJhbmNob3IiKSYmX3IuZnJvbVJvdGF0aW9uKG8sLWUudHJhbnNmb3JtLmFuZ2xlKSxrci50cmFuc2Zvcm1NYXQzKGEsYSxvKTt2YXIgcz1uLnByb3BlcnRpZXMuZ2V0KCJjb2xvciIpO3IudW5pZm9ybTNmdih0LnVuaWZvcm1zLnVfbGlnaHRwb3MsYSksci51bmlmb3JtMWYodC51bmlmb3Jtcy51X2xpZ2h0aW50ZW5zaXR5LG4ucHJvcGVydGllcy5nZXQoImludGVuc2l0eSIpKSxyLnVuaWZvcm0zZih0LnVuaWZvcm1zLnVfbGlnaHRjb2xvcixzLnIscy5nLHMuYil9KGgsdCksaC5kcmF3KHMsbC5UUklBTkdMRVMsci5pZCxhLmxheW91dFZlcnRleEJ1ZmZlcixhLmluZGV4QnVmZmVyLGEuc2VnbWVudHMsZil9ZnVuY3Rpb24gQXIoZSxyLG4pe3ZhciBpPWUuY29udGV4dCxhPWkuZ2wsbz1yLmZibztpZihvKXt2YXIgcz1lLnVzZVByb2dyYW0oImhpbGxzaGFkZSIpLGw9ZS50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHIudGlsZUlELnRvVW53cmFwcGVkKCksITApOyFmdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIikqKE1hdGguUEkvMTgwKTsidmlld3BvcnQiPT09ci5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIikmJihuLT1lLnRyYW5zZm9ybS5hbmdsZSksZS5jb250ZXh0LmdsLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfbGlnaHQsci5wYWludC5nZXQoImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iKSxuKX0ocyxlLG4pO3ZhciBjPWZ1bmN0aW9uKGUscil7dmFyIG49ci50b0Nvb3JkaW5hdGUoKSxpPW5ldyB0LmRlZmF1bHQkMTcobi5jb2x1bW4sbi5yb3crMSxuLnpvb20pO3JldHVybltlLnRyYW5zZm9ybS5jb29yZGluYXRlTG9jYXRpb24obikubGF0LGUudHJhbnNmb3JtLmNvb3JkaW5hdGVMb2NhdGlvbihpKS5sYXRdfShlLHIudGlsZUlEKTtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLGEuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG8uY29sb3JBdHRhY2htZW50LmdldCgpKSxhLnVuaWZvcm1NYXRyaXg0ZnYocy51bmlmb3Jtcy51X21hdHJpeCwhMSxsKSxhLnVuaWZvcm0yZnYocy51bmlmb3Jtcy51X2xhdHJhbmdlLGMpLGEudW5pZm9ybTFpKHMudW5pZm9ybXMudV9pbWFnZSwwKTt2YXIgdT1uLnBhaW50LmdldCgiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciIpO2EudW5pZm9ybTRmKHMudW5pZm9ybXMudV9zaGFkb3csdS5yLHUuZyx1LmIsdS5hKTt2YXIgZj1uLnBhaW50LmdldCgiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvciIpO2EudW5pZm9ybTRmKHMudW5pZm9ybXMudV9oaWdobGlnaHQsZi5yLGYuZyxmLmIsZi5hKTt2YXIgaD1uLnBhaW50LmdldCgiaGlsbHNoYWRlLWFjY2VudC1jb2xvciIpO2lmKGEudW5pZm9ybTRmKHMudW5pZm9ybXMudV9hY2NlbnQsaC5yLGguZyxoLmIsaC5hKSxyLm1hc2tlZEJvdW5kc0J1ZmZlciYmci5tYXNrZWRJbmRleEJ1ZmZlciYmci5zZWdtZW50cylzLmRyYXcoaSxhLlRSSUFOR0xFUyxuLmlkLHIubWFza2VkQm91bmRzQnVmZmVyLHIubWFza2VkSW5kZXhCdWZmZXIsci5zZWdtZW50cyk7ZWxzZXt2YXIgcD1lLnJhc3RlckJvdW5kc0J1ZmZlcjtlLnJhc3RlckJvdW5kc1ZBTy5iaW5kKGkscyxwLFtdKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRV9TVFJJUCwwLHAubGVuZ3RoKX19fWZ1bmN0aW9uIE1yKGUscixuKXt2YXIgaT1lLmNvbnRleHQsYT1pLmdsO2lmKHIuZGVtJiZyLmRlbS5sZXZlbCl7dmFyIG89ci5kZW0ubGV2ZWwuZGltLHM9ci5kZW0uZ2V0UGl4ZWxzKCk7aWYoaS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUxKSxpLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCghMSksci5kZW1UZXh0dXJlPXIuZGVtVGV4dHVyZXx8ZS5nZXRUaWxlVGV4dHVyZShyLnRpbGVTaXplKSxyLmRlbVRleHR1cmUpe3ZhciBsPXIuZGVtVGV4dHVyZTtsLnVwZGF0ZShzLHtwcmVtdWx0aXBseTohMX0pLGwuYmluZChhLk5FQVJFU1QsYS5DTEFNUF9UT19FREdFKX1lbHNlIHIuZGVtVGV4dHVyZT1uZXcgeihpLHMsYS5SR0JBLHtwcmVtdWx0aXBseTohMX0pLHIuZGVtVGV4dHVyZS5iaW5kKGEuTkVBUkVTVCxhLkNMQU1QX1RPX0VER0UpO2kuYWN0aXZlVGV4dHVyZS5zZXQoYS5URVhUVVJFMCk7dmFyIGM9ci5mYm87aWYoIWMpe3ZhciB1PW5ldyB6KGkse3dpZHRoOm8saGVpZ2h0Om8sZGF0YTpudWxsfSxhLlJHQkEpO3UuYmluZChhLkxJTkVBUixhLkNMQU1QX1RPX0VER0UpLChjPXIuZmJvPWkuY3JlYXRlRnJhbWVidWZmZXIobyxvKSkuY29sb3JBdHRhY2htZW50LnNldCh1LnRleHR1cmUpfWkuYmluZEZyYW1lYnVmZmVyLnNldChjLmZyYW1lYnVmZmVyKSxpLnZpZXdwb3J0LnNldChbMCwwLG8sb10pO3ZhciBmPXQubWF0NC5jcmVhdGUoKTt0Lm1hdDQub3J0aG8oZiwwLHQuZGVmYXVsdCQ4LC10LmRlZmF1bHQkOCwwLDAsMSksdC5tYXQ0LnRyYW5zbGF0ZShmLGYsWzAsLXQuZGVmYXVsdCQ4LDBdKTt2YXIgaD1lLnVzZVByb2dyYW0oImhpbGxzaGFkZVByZXBhcmUiKTthLnVuaWZvcm1NYXRyaXg0ZnYoaC51bmlmb3Jtcy51X21hdHJpeCwhMSxmKSxhLnVuaWZvcm0xZihoLnVuaWZvcm1zLnVfem9vbSxyLnRpbGVJRC5vdmVyc2NhbGVkWiksYS51bmlmb3JtMmZ2KGgudW5pZm9ybXMudV9kaW1lbnNpb24sWzIqbywyKm9dKSxhLnVuaWZvcm0xaShoLnVuaWZvcm1zLnVfaW1hZ2UsMSksYS51bmlmb3JtMWYoaC51bmlmb3Jtcy51X21heHpvb20sbik7dmFyIHA9ZS5yYXN0ZXJCb3VuZHNCdWZmZXI7ZS5yYXN0ZXJCb3VuZHNWQU8uYmluZChpLGgscCxbXSksYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVfU1RSSVAsMCxwLmxlbmd0aCksci5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITF9fWZ1bmN0aW9uIFNyKGUscixuLGksbyl7dmFyIHM9aS5wYWludC5nZXQoInJhc3Rlci1mYWRlLWR1cmF0aW9uIik7aWYocz4wKXt2YXIgbD1hLm5vdygpLGM9KGwtZS50aW1lQWRkZWQpL3MsdT1yPyhsLXIudGltZUFkZGVkKS9zOi0xLGY9bi5nZXRTb3VyY2UoKSxoPW8uY292ZXJpbmdab29tTGV2ZWwoe3RpbGVTaXplOmYudGlsZVNpemUscm91bmRab29tOmYucm91bmRab29tfSkscD0hcnx8TWF0aC5hYnMoci50aWxlSUQub3ZlcnNjYWxlZFotaCk+TWF0aC5hYnMoZS50aWxlSUQub3ZlcnNjYWxlZFotaCksZD1wJiZlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPzE6dC5jbGFtcChwP2M6MS11LDAsMSk7cmV0dXJuIGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24mJmM+PTEmJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSExKSxyP3tvcGFjaXR5OjEsbWl4OjEtZH06e29wYWNpdHk6ZCxtaXg6MH19cmV0dXJue29wYWNpdHk6MSxtaXg6MH19ZnVuY3Rpb24gRXIoZSxyLG4pe3ZhciBpPWUuY29udGV4dCxvPWkuZ2w7aS5saW5lV2lkdGguc2V0KDEqYS5kZXZpY2VQaXhlbFJhdGlvKTt2YXIgcz1uLnBvc01hdHJpeCxsPWUudXNlUHJvZ3JhbSgiZGVidWciKTtpLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCksaS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksaS5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLG8udW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHMpLG8udW5pZm9ybTRmKGwudW5pZm9ybXMudV9jb2xvciwxLDAsMCwxKSxlLmRlYnVnVkFPLmJpbmQoaSxsLGUuZGVidWdCdWZmZXIsW10pLG8uZHJhd0FycmF5cyhvLkxJTkVfU1RSSVAsMCxlLmRlYnVnQnVmZmVyLmxlbmd0aCk7Zm9yKHZhciBjPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8MTt2YXIgaSxhLG8scyxsLGMsdSxmLGg9W107Zm9yKGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspaWYobD1Dclt0W2ldXSl7Zm9yKGY9bnVsbCxvPTAscz1sWzFdLmxlbmd0aDtvPHM7bys9MiktMT09PWxbMV1bb10mJi0xPT09bFsxXVtvKzFdP2Y9bnVsbDooYz1lK2xbMV1bb10qbix1PTIwMC1sWzFdW28rMV0qbixmJiZoLnB1c2goZi54LGYueSxjLHUpLGY9e3g6Yyx5OnV9KTtlKz1sWzBdKm59cmV0dXJuIGh9KG4udG9TdHJpbmcoKSw1MCwwLDUpLHU9bmV3IHQuUG9zQXJyYXksZj0wO2Y8Yy5sZW5ndGg7Zis9Mil1LmVtcGxhY2VCYWNrKGNbZl0sY1tmKzFdKTt2YXIgaD1pLmNyZWF0ZVZlcnRleEJ1ZmZlcih1LEtlLm1lbWJlcnMpOyhuZXcgUSkuYmluZChpLGwsaCxbXSksby51bmlmb3JtNGYobC51bmlmb3Jtcy51X2NvbG9yLDEsMSwxLDEpO2Zvcih2YXIgcD1yLmdldFRpbGUobikudGlsZVNpemUsZD10LmRlZmF1bHQkOC8oTWF0aC5wb3coMixlLnRyYW5zZm9ybS56b29tLW4ub3ZlcnNjYWxlZFopKnApLGc9W1stMSwtMV0sWy0xLDFdLFsxLC0xXSxbMSwxXV0sdj0wO3Y8Zy5sZW5ndGg7disrKXt2YXIgbT1nW3ZdO28udW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHQubWF0NC50cmFuc2xhdGUoW10scyxbZCptWzBdLGQqbVsxXSwwXSkpLG8uZHJhd0FycmF5cyhvLkxJTkVTLDAsaC5sZW5ndGgpfW8udW5pZm9ybTRmKGwudW5pZm9ybXMudV9jb2xvciwwLDAsMCwxKSxvLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxzKSxvLmRyYXdBcnJheXMoby5MSU5FUywwLGgubGVuZ3RoKX12YXIgQ3I9eyIgIjpbMTYsW11dLCIhIjpbMTAsWzUsMjEsNSw3LC0xLC0xLDUsMiw0LDEsNSwwLDYsMSw1LDJdXSwnIic6WzE2LFs0LDIxLDQsMTQsLTEsLTEsMTIsMjEsMTIsMTRdXSwiIyI6WzIxLFsxMSwyNSw0LC03LC0xLC0xLDE3LDI1LDEwLC03LC0xLC0xLDQsMTIsMTgsMTIsLTEsLTEsMyw2LDE3LDZdXSwkOlsyMCxbOCwyNSw4LC00LC0xLC0xLDEyLDI1LDEyLC00LC0xLC0xLDE3LDE4LDE1LDIwLDEyLDIxLDgsMjEsNSwyMCwzLDE4LDMsMTYsNCwxNCw1LDEzLDcsMTIsMTMsMTAsMTUsOSwxNiw4LDE3LDYsMTcsMywxNSwxLDEyLDAsOCwwLDUsMSwzLDNdXSwiJSI6WzI0LFsyMSwyMSwzLDAsLTEsLTEsOCwyMSwxMCwxOSwxMCwxNyw5LDE1LDcsMTQsNSwxNCwzLDE2LDMsMTgsNCwyMCw2LDIxLDgsMjEsMTAsMjAsMTMsMTksMTYsMTksMTksMjAsMjEsMjEsLTEsLTEsMTcsNywxNSw2LDE0LDQsMTQsMiwxNiwwLDE4LDAsMjAsMSwyMSwzLDIxLDUsMTksNywxNyw3XV0sIiYiOlsyNixbMjMsMTIsMjMsMTMsMjIsMTQsMjEsMTQsMjAsMTMsMTksMTEsMTcsNiwxNSwzLDEzLDEsMTEsMCw3LDAsNSwxLDQsMiwzLDQsMyw2LDQsOCw1LDksMTIsMTMsMTMsMTQsMTQsMTYsMTQsMTgsMTMsMjAsMTEsMjEsOSwyMCw4LDE4LDgsMTYsOSwxMywxMSwxMCwxNiwzLDE4LDEsMjAsMCwyMiwwLDIzLDEsMjMsMl1dLCInIjpbMTAsWzUsMTksNCwyMCw1LDIxLDYsMjAsNiwxOCw1LDE2LDQsMTVdXSwiKCI6WzE0LFsxMSwyNSw5LDIzLDcsMjAsNSwxNiw0LDExLDQsNyw1LDIsNywtMiw5LC01LDExLC03XV0sIikiOlsxNCxbMywyNSw1LDIzLDcsMjAsOSwxNiwxMCwxMSwxMCw3LDksMiw3LC0yLDUsLTUsMywtN11dLCIqIjpbMTYsWzgsMjEsOCw5LC0xLC0xLDMsMTgsMTMsMTIsLTEsLTEsMTMsMTgsMywxMl1dLCIrIjpbMjYsWzEzLDE4LDEzLDAsLTEsLTEsNCw5LDIyLDldXSwiLCI6WzEwLFs2LDEsNSwwLDQsMSw1LDIsNiwxLDYsLTEsNSwtMyw0LC00XV0sIi0iOlsyNixbNCw5LDIyLDldXSwiLiI6WzEwLFs1LDIsNCwxLDUsMCw2LDEsNSwyXV0sIi8iOlsyMixbMjAsMjUsMiwtN11dLDA6WzIwLFs5LDIxLDYsMjAsNCwxNywzLDEyLDMsOSw0LDQsNiwxLDksMCwxMSwwLDE0LDEsMTYsNCwxNyw5LDE3LDEyLDE2LDE3LDE0LDIwLDExLDIxLDksMjFdXSwxOlsyMCxbNiwxNyw4LDE4LDExLDIxLDExLDBdXSwyOlsyMCxbNCwxNiw0LDE3LDUsMTksNiwyMCw4LDIxLDEyLDIxLDE0LDIwLDE1LDE5LDE2LDE3LDE2LDE1LDE1LDEzLDEzLDEwLDMsMCwxNywwXV0sMzpbMjAsWzUsMjEsMTYsMjEsMTAsMTMsMTMsMTMsMTUsMTIsMTYsMTEsMTcsOCwxNyw2LDE2LDMsMTQsMSwxMSwwLDgsMCw1LDEsNCwyLDMsNF1dLDQ6WzIwLFsxMywyMSwzLDcsMTgsNywtMSwtMSwxMywyMSwxMywwXV0sNTpbMjAsWzE1LDIxLDUsMjEsNCwxMiw1LDEzLDgsMTQsMTEsMTQsMTQsMTMsMTYsMTEsMTcsOCwxNyw2LDE2LDMsMTQsMSwxMSwwLDgsMCw1LDEsNCwyLDMsNF1dLDY6WzIwLFsxNiwxOCwxNSwyMCwxMiwyMSwxMCwyMSw3LDIwLDUsMTcsNCwxMiw0LDcsNSwzLDcsMSwxMCwwLDExLDAsMTQsMSwxNiwzLDE3LDYsMTcsNywxNiwxMCwxNCwxMiwxMSwxMywxMCwxMyw3LDEyLDUsMTAsNCw3XV0sNzpbMjAsWzE3LDIxLDcsMCwtMSwtMSwzLDIxLDE3LDIxXV0sODpbMjAsWzgsMjEsNSwyMCw0LDE4LDQsMTYsNSwxNCw3LDEzLDExLDEyLDE0LDExLDE2LDksMTcsNywxNyw0LDE2LDIsMTUsMSwxMiwwLDgsMCw1LDEsNCwyLDMsNCwzLDcsNCw5LDYsMTEsOSwxMiwxMywxMywxNSwxNCwxNiwxNiwxNiwxOCwxNSwyMCwxMiwyMSw4LDIxXV0sOTpbMjAsWzE2LDE0LDE1LDExLDEzLDksMTAsOCw5LDgsNiw5LDQsMTEsMywxNCwzLDE1LDQsMTgsNiwyMCw5LDIxLDEwLDIxLDEzLDIwLDE1LDE4LDE2LDE0LDE2LDksMTUsNCwxMywxLDEwLDAsOCwwLDUsMSw0LDNdXSwiOiI6WzEwLFs1LDE0LDQsMTMsNSwxMiw2LDEzLDUsMTQsLTEsLTEsNSwyLDQsMSw1LDAsNiwxLDUsMl1dLCI7IjpbMTAsWzUsMTQsNCwxMyw1LDEyLDYsMTMsNSwxNCwtMSwtMSw2LDEsNSwwLDQsMSw1LDIsNiwxLDYsLTEsNSwtMyw0LC00XV0sIjwiOlsyNCxbMjAsMTgsNCw5LDIwLDBdXSwiPSI6WzI2LFs0LDEyLDIyLDEyLC0xLC0xLDQsNiwyMiw2XV0sIj4iOlsyNCxbNCwxOCwyMCw5LDQsMF1dLCI/IjpbMTgsWzMsMTYsMywxNyw0LDE5LDUsMjAsNywyMSwxMSwyMSwxMywyMCwxNCwxOSwxNSwxNywxNSwxNSwxNCwxMywxMywxMiw5LDEwLDksNywtMSwtMSw5LDIsOCwxLDksMCwxMCwxLDksMl1dLCJAIjpbMjcsWzE4LDEzLDE3LDE1LDE1LDE2LDEyLDE2LDEwLDE1LDksMTQsOCwxMSw4LDgsOSw2LDExLDUsMTQsNSwxNiw2LDE3LDgsLTEsLTEsMTIsMTYsMTAsMTQsOSwxMSw5LDgsMTAsNiwxMSw1LC0xLC0xLDE4LDE2LDE3LDgsMTcsNiwxOSw1LDIxLDUsMjMsNywyNCwxMCwyNCwxMiwyMywxNSwyMiwxNywyMCwxOSwxOCwyMCwxNSwyMSwxMiwyMSw5LDIwLDcsMTksNSwxNyw0LDE1LDMsMTIsMyw5LDQsNiw1LDQsNywyLDksMSwxMiwwLDE1LDAsMTgsMSwyMCwyLDIxLDMsLTEsLTEsMTksMTYsMTgsOCwxOCw2LDE5LDVdXSxBOlsxOCxbOSwyMSwxLDAsLTEsLTEsOSwyMSwxNywwLC0xLC0xLDQsNywxNCw3XV0sQjpbMjEsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTMsMjEsMTYsMjAsMTcsMTksMTgsMTcsMTgsMTUsMTcsMTMsMTYsMTIsMTMsMTEsLTEsLTEsNCwxMSwxMywxMSwxNiwxMCwxNyw5LDE4LDcsMTgsNCwxNywyLDE2LDEsMTMsMCw0LDBdXSxDOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNV1dLEQ6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDExLDIxLDE0LDIwLDE2LDE4LDE3LDE2LDE4LDEzLDE4LDgsMTcsNSwxNiwzLDE0LDEsMTEsMCw0LDBdXSxFOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxNywyMSwtMSwtMSw0LDExLDEyLDExLC0xLC0xLDQsMCwxNywwXV0sRjpbMTgsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMV1dLEc6WzIxLFsxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE4LDgsLTEsLTEsMTMsOCwxOCw4XV0sSDpbMjIsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDE4LDAsLTEsLTEsNCwxMSwxOCwxMV1dLEk6WzgsWzQsMjEsNCwwXV0sSjpbMTYsWzEyLDIxLDEyLDUsMTEsMiwxMCwxLDgsMCw2LDAsNCwxLDMsMiwyLDUsMiw3XV0sSzpbMjEsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDQsNywtMSwtMSw5LDEyLDE4LDBdXSxMOlsxNyxbNCwyMSw0LDAsLTEsLTEsNCwwLDE2LDBdXSxNOlsyNCxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMiwwLC0xLC0xLDIwLDIxLDEyLDAsLTEsLTEsMjAsMjEsMjAsMF1dLE46WzIyLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE4LDAsLTEsLTEsMTgsMjEsMTgsMF1dLE86WzIyLFs5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE5LDgsMTksMTMsMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMV1dLFA6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE0LDE3LDEyLDE2LDExLDEzLDEwLDQsMTBdXSxROlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsLTEsLTEsMTIsNCwxOCwtMl1dLFI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLDQsMTEsLTEsLTEsMTEsMTEsMTgsMF1dLFM6WzIwLFsxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sVDpbMTYsWzgsMjEsOCwwLC0xLC0xLDEsMjEsMTUsMjFdXSxVOlsyMixbNCwyMSw0LDYsNSwzLDcsMSwxMCwwLDEyLDAsMTUsMSwxNywzLDE4LDYsMTgsMjFdXSxWOlsxOCxbMSwyMSw5LDAsLTEsLTEsMTcsMjEsOSwwXV0sVzpbMjQsWzIsMjEsNywwLC0xLC0xLDEyLDIxLDcsMCwtMSwtMSwxMiwyMSwxNywwLC0xLC0xLDIyLDIxLDE3LDBdXSxYOlsyMCxbMywyMSwxNywwLC0xLC0xLDE3LDIxLDMsMF1dLFk6WzE4LFsxLDIxLDksMTEsOSwwLC0xLC0xLDE3LDIxLDksMTFdXSxaOlsyMCxbMTcsMjEsMywwLC0xLC0xLDMsMjEsMTcsMjEsLTEsLTEsMywwLDE3LDBdXSwiWyI6WzE0LFs0LDI1LDQsLTcsLTEsLTEsNSwyNSw1LC03LC0xLC0xLDQsMjUsMTEsMjUsLTEsLTEsNCwtNywxMSwtN11dLCJcXCI6WzE0LFswLDIxLDE0LC0zXV0sIl0iOlsxNCxbOSwyNSw5LC03LC0xLC0xLDEwLDI1LDEwLC03LC0xLC0xLDMsMjUsMTAsMjUsLTEsLTEsMywtNywxMCwtN11dLCJeIjpbMTYsWzYsMTUsOCwxOCwxMCwxNSwtMSwtMSwzLDEyLDgsMTcsMTMsMTIsLTEsLTEsOCwxNyw4LDBdXSxfOlsxNixbMCwtMiwxNiwtMl1dLCJgIjpbMTAsWzYsMjEsNSwyMCw0LDE4LDQsMTYsNSwxNSw2LDE2LDUsMTddXSxhOlsxOSxbMTUsMTQsMTUsMCwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sYjpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLGM6WzE4LFsxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZDpbMTksWzE1LDIxLDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGU6WzE4LFszLDgsMTUsOCwxNSwxMCwxNCwxMiwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZjpbMTIsWzEwLDIxLDgsMjEsNiwyMCw1LDE3LDUsMCwtMSwtMSwyLDE0LDksMTRdXSxnOlsxOSxbMTUsMTQsMTUsLTIsMTQsLTUsMTMsLTYsMTEsLTcsOCwtNyw2LC02LC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxoOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLGk6WzgsWzMsMjEsNCwyMCw1LDIxLDQsMjIsMywyMSwtMSwtMSw0LDE0LDQsMF1dLGo6WzEwLFs1LDIxLDYsMjAsNywyMSw2LDIyLDUsMjEsLTEsLTEsNiwxNCw2LC0zLDUsLTYsMywtNywxLC03XV0sazpbMTcsWzQsMjEsNCwwLC0xLC0xLDE0LDE0LDQsNCwtMSwtMSw4LDgsMTUsMF1dLGw6WzgsWzQsMjEsNCwwXV0sbTpbMzAsWzQsMTQsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDAsLTEsLTEsMTUsMTAsMTgsMTMsMjAsMTQsMjMsMTQsMjUsMTMsMjYsMTAsMjYsMF1dLG46WzE5LFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwXV0sbzpbMTksWzgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDMsMTYsNiwxNiw4LDE1LDExLDEzLDEzLDExLDE0LDgsMTRdXSxwOlsxOSxbNCwxNCw0LC03LC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLHE6WzE5LFsxNSwxNCwxNSwtNywtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0scjpbMTMsWzQsMTQsNCwwLC0xLC0xLDQsOCw1LDExLDcsMTMsOSwxNCwxMiwxNF1dLHM6WzE3LFsxNCwxMSwxMywxMywxMCwxNCw3LDE0LDQsMTMsMywxMSw0LDksNiw4LDExLDcsMTMsNiwxNCw0LDE0LDMsMTMsMSwxMCwwLDcsMCw0LDEsMywzXV0sdDpbMTIsWzUsMjEsNSw0LDYsMSw4LDAsMTAsMCwtMSwtMSwyLDE0LDksMTRdXSx1OlsxOSxbNCwxNCw0LDQsNSwxLDcsMCwxMCwwLDEyLDEsMTUsNCwtMSwtMSwxNSwxNCwxNSwwXV0sdjpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMF1dLHc6WzIyLFszLDE0LDcsMCwtMSwtMSwxMSwxNCw3LDAsLTEsLTEsMTEsMTQsMTUsMCwtMSwtMSwxOSwxNCwxNSwwXV0seDpbMTcsWzMsMTQsMTQsMCwtMSwtMSwxNCwxNCwzLDBdXSx5OlsxNixbMiwxNCw4LDAsLTEsLTEsMTQsMTQsOCwwLDYsLTQsNCwtNiwyLC03LDEsLTddXSx6OlsxNyxbMTQsMTQsMywwLC0xLC0xLDMsMTQsMTQsMTQsLTEsLTEsMywwLDE0LDBdXSwieyI6WzE0LFs5LDI1LDcsMjQsNiwyMyw1LDIxLDUsMTksNiwxNyw3LDE2LDgsMTQsOCwxMiw2LDEwLC0xLC0xLDcsMjQsNiwyMiw2LDIwLDcsMTgsOCwxNyw5LDE1LDksMTMsOCwxMSw0LDksOCw3LDksNSw5LDMsOCwxLDcsMCw2LC0yLDYsLTQsNywtNiwtMSwtMSw2LDgsOCw2LDgsNCw3LDIsNiwxLDUsLTEsNSwtMyw2LC01LDcsLTYsOSwtN11dLCJ8IjpbOCxbNCwyNSw0LC03XV0sIn0iOlsxNCxbNSwyNSw3LDI0LDgsMjMsOSwyMSw5LDE5LDgsMTcsNywxNiw2LDE0LDYsMTIsOCwxMCwtMSwtMSw3LDI0LDgsMjIsOCwyMCw3LDE4LDYsMTcsNSwxNSw1LDEzLDYsMTEsMTAsOSw2LDcsNSw1LDUsMyw2LDEsNywwLDgsLTIsOCwtNCw3LC02LC0xLC0xLDgsOCw2LDYsNiw0LDcsMiw4LDEsOSwtMSw5LC0zLDgsLTUsNywtNiw1LC03XV0sIn4iOlsyNCxbMyw2LDMsOCw0LDExLDYsMTIsOCwxMiwxMCwxMSwxNCw4LDE2LDcsMTgsNywyMCw4LDIxLDEwLC0xLC0xLDMsOCw0LDEwLDYsMTEsOCwxMSwxMCwxMCwxNCw3LDE2LDYsMTgsNiwyMCw3LDIxLDEwLDIxLDEyXV19LExyPXtzeW1ib2w6ZnVuY3Rpb24odCxlLHIsbil7aWYoInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7dmFyIGk9dC5jb250ZXh0O2kuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGkuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSwwIT09ci5wYWludC5nZXQoImljb24tb3BhY2l0eSIpLmNvbnN0YW50T3IoMSkmJmNyKHQsZSxyLG4sITEsci5wYWludC5nZXQoImljb24tdHJhbnNsYXRlIiksci5wYWludC5nZXQoImljb24tdHJhbnNsYXRlLWFuY2hvciIpLHIubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSxyLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50Iiksci5sYXlvdXQuZ2V0KCJpY29uLWtlZXAtdXByaWdodCIpKSwwIT09ci5wYWludC5nZXQoInRleHQtb3BhY2l0eSIpLmNvbnN0YW50T3IoMSkmJmNyKHQsZSxyLG4sITAsci5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlIiksci5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlLWFuY2hvciIpLHIubGF5b3V0LmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSxyLmxheW91dC5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50Iiksci5sYXlvdXQuZ2V0KCJ0ZXh0LWtlZXAtdXByaWdodCIpKSxlLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMmJmZ1bmN0aW9uKHQsZSxyLG4pe29yKHQsZSxyLG4sITEpLG9yKHQsZSxyLG4sITApfSh0LGUscixuKX19LGNpcmNsZTpmdW5jdGlvbih0LGUscixuKXtpZigidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzKXt2YXIgaT1yLnBhaW50LmdldCgiY2lyY2xlLW9wYWNpdHkiKSxhPXIucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLXdpZHRoIiksbz1yLnBhaW50LmdldCgiY2lyY2xlLXN0cm9rZS1vcGFjaXR5Iik7aWYoMCE9PWkuY29uc3RhbnRPcigxKXx8MCE9PWEuY29uc3RhbnRPcigxKSYmMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9dC5jb250ZXh0LGw9cy5nbDtzLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxzLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxzLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBjPSEwLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGY9blt1XSxoPWUuZ2V0VGlsZShmKSxwPWguZ2V0QnVja2V0KHIpO2lmKHApe3ZhciBkPXQuY29udGV4dC5wcm9ncmFtLmdldCgpLGc9cC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLHY9dC51c2VQcm9ncmFtKCJjaXJjbGUiLGcpO2lmKChjfHx2LnByb2dyYW0hPT1kKSYmKGcuc2V0VW5pZm9ybXMocyx2LHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLGM9ITEpLGwudW5pZm9ybTFmKHYudW5pZm9ybXMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlLHQudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpLGwudW5pZm9ybTFpKHYudW5pZm9ybXMudV9zY2FsZV93aXRoX21hcCwibWFwIj09PXIucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtc2NhbGUiKT8xOjApLCJtYXAiPT09ci5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKSl7bC51bmlmb3JtMWkodi51bmlmb3Jtcy51X3BpdGNoX3dpdGhfbWFwLDEpO3ZhciBtPU1lKGgsMSx0LnRyYW5zZm9ybS56b29tKTtsLnVuaWZvcm0yZih2LnVuaWZvcm1zLnVfZXh0cnVkZV9zY2FsZSxtLG0pfWVsc2UgbC51bmlmb3JtMWkodi51bmlmb3Jtcy51X3BpdGNoX3dpdGhfbWFwLDApLGwudW5pZm9ybTJmdih2LnVuaWZvcm1zLnVfZXh0cnVkZV9zY2FsZSx0LnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHMpO2wudW5pZm9ybU1hdHJpeDRmdih2LnVuaWZvcm1zLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KGYucG9zTWF0cml4LGgsci5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiKSkpLHYuZHJhdyhzLGwuVFJJQU5HTEVTLHIuaWQscC5sYXlvdXRWZXJ0ZXhCdWZmZXIscC5pbmRleEJ1ZmZlcixwLnNlZ21lbnRzLGcpfX19fX0saGVhdG1hcDpmdW5jdGlvbihlLHIsbixpKXtpZigwIT09bi5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpKWlmKCJvZmZzY3JlZW4iPT09ZS5yZW5kZXJQYXNzKXt2YXIgYT1lLmNvbnRleHQsbz1hLmdsO2Euc2V0RGVwdGhNb2RlKGUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSkpLGEuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmdsO3QuYWN0aXZlVGV4dHVyZS5zZXQobi5URVhUVVJFMSksdC52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLzQsZS5oZWlnaHQvNF0pO3ZhciBpPXIuaGVhdG1hcEZibztpZihpKW4uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGkuY29sb3JBdHRhY2htZW50LmdldCgpKSx0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoaS5mcmFtZWJ1ZmZlcik7ZWxzZXt2YXIgYT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxhKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTElORUFSKSxpPXIuaGVhdG1hcEZibz10LmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgvNCxlLmhlaWdodC80KSxmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuZ2w7YS50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwwLGEuUkdCQSxyLndpZHRoLzQsci5oZWlnaHQvNCwwLGEuUkdCQSxlLmV4dFRleHR1cmVIYWxmRmxvYXQ/ZS5leHRUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTOmEuVU5TSUdORURfQllURSxudWxsKSxpLmNvbG9yQXR0YWNobWVudC5zZXQobiksZS5leHRUZXh0dXJlSGFsZkZsb2F0JiZhLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoYS5GUkFNRUJVRkZFUikhPT1hLkZSQU1FQlVGRkVSX0NPTVBMRVRFJiYoZS5leHRUZXh0dXJlSGFsZkZsb2F0PW51bGwsaS5jb2xvckF0dGFjaG1lbnQuc2V0RGlydHkoKSx0KGUscixuLGkpKX0odCxlLGEsaSl9fShhLGUsbiksYS5jbGVhcih7Y29sb3I6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnR9KSxhLnNldENvbG9yTW9kZShuZXcgR3QoW28uT05FLG8uT05FXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITAsITAsITAsITBdKSk7Zm9yKHZhciBzPSEwLGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtpZighci5oYXNSZW5kZXJhYmxlUGFyZW50KGMpKXt2YXIgdT1yLmdldFRpbGUoYyksZj11LmdldEJ1Y2tldChuKTtpZihmKXt2YXIgaD1lLmNvbnRleHQucHJvZ3JhbS5nZXQoKSxwPWYucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxkPWUudXNlUHJvZ3JhbSgiaGVhdG1hcCIscCksZz1lLnRyYW5zZm9ybS56b29tOyhzfHxkLnByb2dyYW0hPT1oKSYmKHAuc2V0VW5pZm9ybXMoZS5jb250ZXh0LGQsbi5wYWludCx7em9vbTpnfSkscz0hMSksby51bmlmb3JtMWYoZC51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsTWUodSwxLGcpKSxvLnVuaWZvcm0xZihkLnVuaWZvcm1zLnVfaW50ZW5zaXR5LG4ucGFpbnQuZ2V0KCJoZWF0bWFwLWludGVuc2l0eSIpKSxvLnVuaWZvcm1NYXRyaXg0ZnYoZC51bmlmb3Jtcy51X21hdHJpeCwhMSxjLnBvc01hdHJpeCksZC5kcmF3KGEsby5UUklBTkdMRVMsbi5pZCxmLmxheW91dFZlcnRleEJ1ZmZlcixmLmluZGV4QnVmZmVyLGYuc2VnbWVudHMscCl9fX1hLnZpZXdwb3J0LnNldChbMCwwLGUud2lkdGgsZS5oZWlnaHRdKX1lbHNlInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyYmKGUuY29udGV4dC5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jb250ZXh0LGk9bi5nbCxhPXIuaGVhdG1hcEZibztpZihhKXtuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTApLGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELGEuY29sb3JBdHRhY2htZW50LmdldCgpKSxuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTEpO3ZhciBvPXIuY29sb3JSYW1wVGV4dHVyZTtvfHwobz1yLmNvbG9yUmFtcFRleHR1cmU9bmV3IHoobixyLmNvbG9yUmFtcCxpLlJHQkEpKSxvLmJpbmQoaS5MSU5FQVIsaS5DTEFNUF9UT19FREdFKSxuLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCk7dmFyIHM9ZS51c2VQcm9ncmFtKCJoZWF0bWFwVGV4dHVyZSIpLGw9ci5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpO2kudW5pZm9ybTFmKHMudW5pZm9ybXMudV9vcGFjaXR5LGwpLGkudW5pZm9ybTFpKHMudW5pZm9ybXMudV9pbWFnZSwwKSxpLnVuaWZvcm0xaShzLnVuaWZvcm1zLnVfY29sb3JfcmFtcCwxKTt2YXIgYz10Lm1hdDQuY3JlYXRlKCk7dC5tYXQ0Lm9ydGhvKGMsMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCwxKSxpLnVuaWZvcm1NYXRyaXg0ZnYocy51bmlmb3Jtcy51X21hdHJpeCwhMSxjKSxpLnVuaWZvcm0yZihzLnVuaWZvcm1zLnVfd29ybGQsaS5kcmF3aW5nQnVmZmVyV2lkdGgsaS5kcmF3aW5nQnVmZmVySGVpZ2h0KSxlLnZpZXdwb3J0VkFPLmJpbmQoZS5jb250ZXh0LHMsZS52aWV3cG9ydEJ1ZmZlcixbXSksaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVfU1RSSVAsMCw0KX19KGUsbikpfSxsaW5lOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3MmJjAhPT1yLnBhaW50LmdldCgibGluZS1vcGFjaXR5IikuY29uc3RhbnRPcigxKSl7dmFyIGk9dC5jb250ZXh0O2kuc2V0RGVwdGhNb2RlKHQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSkpLGkuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtmb3IodmFyIGEsbz1yLnBhaW50LmdldCgibGluZS1kYXNoYXJyYXkiKT8ibGluZVNERiI6ci5wYWludC5nZXQoImxpbmUtcGF0dGVybiIpPyJsaW5lUGF0dGVybiI6ci5wYWludC5nZXQoImxpbmUtZ3JhZGllbnQiKT8ibGluZUdyYWRpZW50IjoibGluZSIscz0hMCxsPTAsYz1uO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPWUuZ2V0VGlsZSh1KSxoPWYuZ2V0QnVja2V0KHIpO2lmKGgpe3ZhciBwPWgucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSxkPXQuY29udGV4dC5wcm9ncmFtLmdldCgpLGc9dC51c2VQcm9ncmFtKG8scCksdj1zfHxnLnByb2dyYW0hPT1kLG09YSE9PWYudGlsZUlELm92ZXJzY2FsZWRaO3YmJnAuc2V0VW5pZm9ybXModC5jb250ZXh0LGcsci5wYWludCx7em9vbTp0LnRyYW5zZm9ybS56b29tfSkscHIoZyx0LGYsaCxyLHUscCx2LG0pLGE9Zi50aWxlSUQub3ZlcnNjYWxlZFoscz0hMX19fX0sZmlsbDpmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uLnBhaW50LmdldCgiZmlsbC1jb2xvciIpLG89bi5wYWludC5nZXQoImZpbGwtb3BhY2l0eSIpO2lmKDAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPWUuY29udGV4dDtzLnNldENvbG9yTW9kZShlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7dmFyIGw9bi5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpfHwxIT09YS5jb25zdGFudE9yKHQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50KS5hfHwxIT09by5jb25zdGFudE9yKDApPyJ0cmFuc2x1Y2VudCI6Im9wYXF1ZSI7ZS5yZW5kZXJQYXNzPT09bCYmKHMuc2V0RGVwdGhNb2RlKGUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMSwib3BhcXVlIj09PWUucmVuZGVyUGFzcz9xdC5SZWFkV3JpdGU6cXQuUmVhZE9ubHkpKSxtcihlLHIsbixpLHlyKSksInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyYmbi5wYWludC5nZXQoImZpbGwtYW50aWFsaWFzIikmJihzLmxpbmVXaWR0aC5zZXQoMikscy5zZXREZXB0aE1vZGUoZS5kZXB0aE1vZGVGb3JTdWJsYXllcihuLmdldFBhaW50UHJvcGVydHkoImZpbGwtb3V0bGluZS1jb2xvciIpPzI6MCxxdC5SZWFkT25seSkpLG1yKGUscixuLGkseHIpKX19LCJmaWxsLWV4dHJ1c2lvbiI6ZnVuY3Rpb24oZSxyLG4saSl7aWYoMCE9PW4ucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5IikpaWYoIm9mZnNjcmVlbiI9PT1lLnJlbmRlclBhc3MpeyFmdW5jdGlvbihlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1yLnZpZXdwb3J0RnJhbWU7aWYoZS5kZXB0aFJib05lZWRzQ2xlYXImJmUuc2V0dXBPZmZzY3JlZW5EZXB0aFJlbmRlcmJ1ZmZlcigpLCFhKXt2YXIgbz1uZXcgeihuLHt3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodCxkYXRhOm51bGx9LGkuUkdCQSk7by5iaW5kKGkuTElORUFSLGkuQ0xBTVBfVE9fRURHRSksKGE9ci52aWV3cG9ydEZyYW1lPW4uY3JlYXRlRnJhbWVidWZmZXIoZS53aWR0aCxlLmhlaWdodCkpLmNvbG9yQXR0YWNobWVudC5zZXQoby50ZXh0dXJlKX1uLmJpbmRGcmFtZWJ1ZmZlci5zZXQoYS5mcmFtZWJ1ZmZlciksYS5kZXB0aEF0dGFjaG1lbnQuc2V0KGUuZGVwdGhSYm8pLGUuZGVwdGhSYm9OZWVkc0NsZWFyJiYobi5jbGVhcih7ZGVwdGg6MX0pLGUuZGVwdGhSYm9OZWVkc0NsZWFyPSExKSxuLmNsZWFyKHtjb2xvcjp0LmRlZmF1bHQkNi50cmFuc3BhcmVudH0pLG4uc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLG4uc2V0RGVwdGhNb2RlKG5ldyBxdChpLkxFUVVBTCxxdC5SZWFkV3JpdGUsWzAsMV0pKSxuLnNldENvbG9yTW9kZShlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSl9KGUsbik7Zm9yKHZhciBhPSEwLG89MCxzPWk7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9ci5nZXRUaWxlKGwpLHU9Yy5nZXRCdWNrZXQobik7dSYmKFRyKGUsMCxuLGMsbCx1LGEpLGE9ITEpfX1lbHNlInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyYmZnVuY3Rpb24odCxlKXt2YXIgcj1lLnZpZXdwb3J0RnJhbWU7aWYocil7dmFyIG49dC5jb250ZXh0LGk9bi5nbCxhPXQudXNlUHJvZ3JhbSgiZXh0cnVzaW9uVGV4dHVyZSIpO24uc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLG4uc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxuLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxyLmNvbG9yQXR0YWNobWVudC5nZXQoKSksaS51bmlmb3JtMWYoYS51bmlmb3Jtcy51X29wYWNpdHksZS5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiKSksaS51bmlmb3JtMWkoYS51bmlmb3Jtcy51X2ltYWdlLDApO3ZhciBvPXdyLmNyZWF0ZSgpO3dyLm9ydGhvKG8sMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCwxKSxpLnVuaWZvcm1NYXRyaXg0ZnYoYS51bmlmb3Jtcy51X21hdHJpeCwhMSxvKSxpLnVuaWZvcm0yZihhLnVuaWZvcm1zLnVfd29ybGQsaS5kcmF3aW5nQnVmZmVyV2lkdGgsaS5kcmF3aW5nQnVmZmVySGVpZ2h0KSx0LnZpZXdwb3J0VkFPLmJpbmQobixhLHQudmlld3BvcnRCdWZmZXIsW10pLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFX1NUUklQLDAsNCl9fShlLG4pfSxoaWxsc2hhZGU6ZnVuY3Rpb24odCxlLHIsbil7aWYoIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3N8fCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3Mpe3ZhciBpPXQuY29udGV4dCxhPWUuZ2V0U291cmNlKCkubWF4em9vbTtpLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxpLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxpLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBvPTAscz1uO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWUuZ2V0VGlsZShsKTtjLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSYmIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3M/TXIodCxjLGEpOiJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3MmJkFyKHQsYyxyKX1pLnZpZXdwb3J0LnNldChbMCwwLHQud2lkdGgsdC5oZWlnaHRdKX19LHJhc3RlcjpmdW5jdGlvbih0LGUscixuKXtpZigidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzJiYwIT09ci5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5Iikpe3ZhciBpLGEsbz10LmNvbnRleHQscz1vLmdsLGw9ZS5nZXRTb3VyY2UoKSxjPXQudXNlUHJvZ3JhbSgicmFzdGVyIik7by5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksby5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9icmlnaHRuZXNzX2xvdyxyLnBhaW50LmdldCgicmFzdGVyLWJyaWdodG5lc3MtbWluIikpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9icmlnaHRuZXNzX2hpZ2gsci5wYWludC5nZXQoInJhc3Rlci1icmlnaHRuZXNzLW1heCIpKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfc2F0dXJhdGlvbl9mYWN0b3IsKGk9ci5wYWludC5nZXQoInJhc3Rlci1zYXR1cmF0aW9uIikpPjA/MS0xLygxLjAwMS1pKTotaSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X2NvbnRyYXN0X2ZhY3RvciwoYT1yLnBhaW50LmdldCgicmFzdGVyLWNvbnRyYXN0IikpPjA/MS8oMS1hKToxK2EpLHMudW5pZm9ybTNmdihjLnVuaWZvcm1zLnVfc3Bpbl93ZWlnaHRzLGZ1bmN0aW9uKHQpe3QqPU1hdGguUEkvMTgwO3ZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCk7cmV0dXJuWygyKnIrMSkvMywoLU1hdGguc3FydCgzKSplLXIrMSkvMywoTWF0aC5zcXJ0KDMpKmUtcisxKS8zXX0oci5wYWludC5nZXQoInJhc3Rlci1odWUtcm90YXRlIikpKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfYnVmZmVyX3NjYWxlLDEpLHMudW5pZm9ybTFpKGMudW5pZm9ybXMudV9pbWFnZTAsMCkscy51bmlmb3JtMWkoYy51bmlmb3Jtcy51X2ltYWdlMSwxKTtmb3IodmFyIHU9bi5sZW5ndGgmJm5bMF0ub3ZlcnNjYWxlZFosZj0wLGg9bjtmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl07by5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcihwLm92ZXJzY2FsZWRaLXUsMT09PXIucGFpbnQuZ2V0KCJyYXN0ZXItb3BhY2l0eSIpP3F0LlJlYWRXcml0ZTpxdC5SZWFkT25seSxzLkxFU1MpKTt2YXIgZD1lLmdldFRpbGUocCksZz10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgocC50b1Vud3JhcHBlZCgpLCEwKTtkLnJlZ2lzdGVyRmFkZUR1cmF0aW9uKHIucGFpbnQuZ2V0KCJyYXN0ZXItZmFkZS1kdXJhdGlvbiIpKSxzLnVuaWZvcm1NYXRyaXg0ZnYoYy51bmlmb3Jtcy51X21hdHJpeCwhMSxnKTt2YXIgdj1lLmZpbmRMb2FkZWRQYXJlbnQocCwwLHt9KSxtPVNyKGQsdixlLHIsdC50cmFuc2Zvcm0pLHk9dm9pZCAwLHg9dm9pZCAwO2lmKG8uYWN0aXZlVGV4dHVyZS5zZXQocy5URVhUVVJFMCksZC50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxvLmFjdGl2ZVRleHR1cmUuc2V0KHMuVEVYVFVSRTEpLHY/KHYudGV4dHVyZS5iaW5kKHMuTElORUFSLHMuQ0xBTVBfVE9fRURHRSxzLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCkseT1NYXRoLnBvdygyLHYudGlsZUlELm92ZXJzY2FsZWRaLWQudGlsZUlELm92ZXJzY2FsZWRaKSx4PVtkLnRpbGVJRC5jYW5vbmljYWwueCp5JTEsZC50aWxlSUQuY2Fub25pY2FsLnkqeSUxXSk6ZC50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxzLnVuaWZvcm0yZnYoYy51bmlmb3Jtcy51X3RsX3BhcmVudCx4fHxbMCwwXSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X3NjYWxlX3BhcmVudCx5fHwxKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfZmFkZV90LG0ubWl4KSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfb3BhY2l0eSxtLm9wYWNpdHkqci5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5IikpLGwgaW5zdGFuY2VvZiB0dCl7dmFyIGI9bC5ib3VuZHNCdWZmZXI7bC5ib3VuZHNWQU8uYmluZChvLGMsYixbXSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVfU1RSSVAsMCxiLmxlbmd0aCl9ZWxzZSBpZihkLm1hc2tlZEJvdW5kc0J1ZmZlciYmZC5tYXNrZWRJbmRleEJ1ZmZlciYmZC5zZWdtZW50cyljLmRyYXcobyxzLlRSSUFOR0xFUyxyLmlkLGQubWFza2VkQm91bmRzQnVmZmVyLGQubWFza2VkSW5kZXhCdWZmZXIsZC5zZWdtZW50cyk7ZWxzZXt2YXIgXz10LnJhc3RlckJvdW5kc0J1ZmZlcjt0LnJhc3RlckJvdW5kc1ZBTy5iaW5kKG8sYyxfLFtdKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRV9TVFJJUCwwLF8ubGVuZ3RoKX19fX0sYmFja2dyb3VuZDpmdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoImJhY2tncm91bmQtY29sb3IiKSxpPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLW9wYWNpdHkiKTtpZigwIT09aSl7dmFyIGE9dC5jb250ZXh0LG89YS5nbCxzPXQudHJhbnNmb3JtLGw9cy50aWxlU2l6ZSxjPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLXBhdHRlcm4iKSx1PWN8fDEhPT1uLmF8fDEhPT1pPyJ0cmFuc2x1Y2VudCI6Im9wYXF1ZSI7aWYodC5yZW5kZXJQYXNzPT09dSl7dmFyIGY7aWYoYS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksYS5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCJvcGFxdWUiPT09dT9xdC5SZWFkV3JpdGU6cXQuUmVhZE9ubHkpKSxhLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksYyl7aWYoZHIoYyx0KSlyZXR1cm47Zj10LnVzZVByb2dyYW0oImJhY2tncm91bmRQYXR0ZXJuIiksZ3IoYyx0LGYpLHQudGlsZUV4dGVudFBhdHRlcm5WQU8uYmluZChhLGYsdC50aWxlRXh0ZW50QnVmZmVyLFtdKX1lbHNlIGY9dC51c2VQcm9ncmFtKCJiYWNrZ3JvdW5kIiksby51bmlmb3JtNGZ2KGYudW5pZm9ybXMudV9jb2xvcixbbi5yLG4uZyxuLmIsbi5hXSksdC50aWxlRXh0ZW50VkFPLmJpbmQoYSxmLHQudGlsZUV4dGVudEJ1ZmZlcixbXSk7by51bmlmb3JtMWYoZi51bmlmb3Jtcy51X29wYWNpdHksaSk7Zm9yKHZhciBoPTAscD1zLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOmx9KTtoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF07YyYmdnIoe3RpbGVJRDpkLHRpbGVTaXplOmx9LHQsZiksby51bmlmb3JtTWF0cml4NGZ2KGYudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGQudG9VbndyYXBwZWQoKSkpLG8uZHJhd0FycmF5cyhvLlRSSUFOR0xFX1NUUklQLDAsdC50aWxlRXh0ZW50QnVmZmVyLmxlbmd0aCl9fX19LGRlYnVnOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylFcih0LGUscltuXSl9fSx6cj1mdW5jdGlvbihlLHIpe3RoaXMuY29udGV4dD1uZXcgWXQoZSksdGhpcy50cmFuc2Zvcm09cix0aGlzLl90aWxlVGV4dHVyZXM9e30sdGhpcy5zZXR1cCgpLHRoaXMubnVtU3VibGF5ZXJzPVd0Lm1heFVuZGVyem9vbWluZytXdC5tYXhPdmVyem9vbWluZysxLHRoaXMuZGVwdGhFcHNpbG9uPTEvTWF0aC5wb3coMiwxNiksdGhpcy5kZXB0aFJib05lZWRzQ2xlYXI9ITAsdGhpcy5lbXB0eVByb2dyYW1Db25maWd1cmF0aW9uPW5ldyB0LmRlZmF1bHQkMjQsdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgV2V9O2Z1bmN0aW9uIE9yKHQsZSl7aWYodC5yb3c+ZS5yb3cpe3ZhciByPXQ7dD1lLGU9cn1yZXR1cm57eDA6dC5jb2x1bW4seTA6dC5yb3cseDE6ZS5jb2x1bW4seTE6ZS5yb3csZHg6ZS5jb2x1bW4tdC5jb2x1bW4sZHk6ZS5yb3ctdC5yb3d9fWZ1bmN0aW9uIElyKHQsZSxyLG4saSl7dmFyIGE9TWF0aC5tYXgocixNYXRoLmZsb29yKGUueTApKSxvPU1hdGgubWluKG4sTWF0aC5jZWlsKGUueTEpKTtpZih0LngwPT09ZS54MCYmdC55MD09PWUueTA/dC54MCtlLmR5L3QuZHkqdC5keDxlLngxOnQueDEtZS5keS90LmR5KnQuZHg8ZS54MCl7dmFyIHM9dDt0PWUsZT1zfWZvcih2YXIgbD10LmR4L3QuZHksYz1lLmR4L2UuZHksdT10LmR4PjAsZj1lLmR4PDAsaD1hO2g8bztoKyspe3ZhciBwPWwqTWF0aC5tYXgoMCxNYXRoLm1pbih0LmR5LGgrdS10LnkwKSkrdC54MCxkPWMqTWF0aC5tYXgoMCxNYXRoLm1pbihlLmR5LGgrZi1lLnkwKSkrZS54MDtpKE1hdGguZmxvb3IoZCksTWF0aC5jZWlsKHApLGgpfX1mdW5jdGlvbiBEcih0LGUscixuLGksYSl7dmFyIG8scz1Pcih0LGUpLGw9T3IoZSxyKSxjPU9yKHIsdCk7cy5keT5sLmR5JiYobz1zLHM9bCxsPW8pLHMuZHk+Yy5keSYmKG89cyxzPWMsYz1vKSxsLmR5PmMuZHkmJihvPWwsbD1jLGM9bykscy5keSYmSXIoYyxzLG4saSxhKSxsLmR5JiZJcihjLGwsbixpLGEpfXpyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbnRleHQuZ2w7aWYodGhpcy53aWR0aD10KmEuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmhlaWdodD1lKmEuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF0pLHRoaXMuc3R5bGUpZm9yKHZhciBuPTAsaT10aGlzLnN0eWxlLl9vcmRlcjtuPGkubGVuZ3RoO24rPTEpe3ZhciBvPWlbbl07dGhpcy5zdHlsZS5fbGF5ZXJzW29dLnJlc2l6ZSgpfXRoaXMuZGVwdGhSYm8mJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLmRlcHRoUmJvKSx0aGlzLmRlcHRoUmJvPW51bGwpfSx6ci5wcm90b3R5cGUuc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQscj1uZXcgdC5Qb3NBcnJheTtyLmVtcGxhY2VCYWNrKDAsMCksci5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCwwKSxyLmVtcGxhY2VCYWNrKDAsdC5kZWZhdWx0JDgpLHIuZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLHRoaXMudGlsZUV4dGVudEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihyLEtlLm1lbWJlcnMpLHRoaXMudGlsZUV4dGVudFZBTz1uZXcgUSx0aGlzLnRpbGVFeHRlbnRQYXR0ZXJuVkFPPW5ldyBRO3ZhciBuPW5ldyB0LlBvc0FycmF5O24uZW1wbGFjZUJhY2soMCwwKSxuLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LDApLG4uZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLG4uZW1wbGFjZUJhY2soMCx0LmRlZmF1bHQkOCksbi5lbXBsYWNlQmFjaygwLDApLHRoaXMuZGVidWdCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIobixLZS5tZW1iZXJzKSx0aGlzLmRlYnVnVkFPPW5ldyBRO3ZhciBpPW5ldyB0LlJhc3RlckJvdW5kc0FycmF5O2kuZW1wbGFjZUJhY2soMCwwLDAsMCksaS5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCwwLHQuZGVmYXVsdCQ4LDApLGkuZW1wbGFjZUJhY2soMCx0LmRlZmF1bHQkOCwwLHQuZGVmYXVsdCQ4KSxpLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4KSx0aGlzLnJhc3RlckJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihpLEsubWVtYmVycyksdGhpcy5yYXN0ZXJCb3VuZHNWQU89bmV3IFE7dmFyIGE9bmV3IHQuUG9zQXJyYXk7YS5lbXBsYWNlQmFjaygwLDApLGEuZW1wbGFjZUJhY2soMSwwKSxhLmVtcGxhY2VCYWNrKDAsMSksYS5lbXBsYWNlQmFjaygxLDEpLHRoaXMudmlld3BvcnRCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoYSxLZS5tZW1iZXJzKSx0aGlzLnZpZXdwb3J0VkFPPW5ldyBRfSx6ci5wcm90b3R5cGUuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9ZS5nbDtlLnNldENvbG9yTW9kZShHdC5kaXNhYmxlZCksZS5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpLGUuc2V0U3RlbmNpbE1vZGUobmV3IEh0KHtmdW5jOnIuQUxXQVlTLG1hc2s6MH0sMCwyNTUsci5aRVJPLHIuWkVSTyxyLlpFUk8pKTt2YXIgbj10Lm1hdDQuY3JlYXRlKCk7dC5tYXQ0Lm9ydGhvKG4sMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsMCwxKSx0Lm1hdDQuc2NhbGUobixuLFtyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsMF0pO3ZhciBpPXRoaXMudXNlUHJvZ3JhbSgiY2xpcHBpbmdNYXNrIik7ci51bmlmb3JtTWF0cml4NGZ2KGkudW5pZm9ybXMudV9tYXRyaXgsITEsbiksdGhpcy52aWV3cG9ydFZBTy5iaW5kKGUsaSx0aGlzLnZpZXdwb3J0QnVmZmVyLFtdKSxyLmRyYXdBcnJheXMoci5UUklBTkdMRV9TVFJJUCwwLDQpfSx6ci5wcm90b3R5cGUuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dCxyPWUuZ2w7ZS5zZXRDb2xvck1vZGUoR3QuZGlzYWJsZWQpLGUuc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKTt2YXIgbj0xO3RoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHM9e307Zm9yKHZhciBpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPXRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbby5rZXldPW4rKztlLnNldFN0ZW5jaWxNb2RlKG5ldyBIdCh7ZnVuYzpyLkFMV0FZUyxtYXNrOjB9LHMsMjU1LHIuS0VFUCxyLktFRVAsci5SRVBMQUNFKSk7dmFyIGw9dGhpcy51c2VQcm9ncmFtKCJjbGlwcGluZ01hc2siKTtyLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxvLnBvc01hdHJpeCksdGhpcy50aWxlRXh0ZW50VkFPLmJpbmQodGhpcy5jb250ZXh0LGwsdGhpcy50aWxlRXh0ZW50QnVmZmVyLFtdKSxyLmRyYXdBcnJheXMoci5UUklBTkdMRV9TVFJJUCwwLHRoaXMudGlsZUV4dGVudEJ1ZmZlci5sZW5ndGgpfX0senIucHJvdG90eXBlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiBuZXcgSHQoe2Z1bmM6ZS5FUVVBTCxtYXNrOjI1NX0sdGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1t0LmtleV0sMCxlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSl9LHpyLnByb3RvdHlwZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I/bmV3IEd0KFtlLkNPTlNUQU5UX0NPTE9SLGUuT05FXSxuZXcgdC5kZWZhdWx0JDYoMS84LDEvOCwxLzgsMCksWyEwLCEwLCEwLCEwXSk6Im9wYXF1ZSI9PT10aGlzLnJlbmRlclBhc3M/R3QudW5ibGVuZGVkOkd0LmFscGhhQmxlbmRlZH0senIucHJvdG90eXBlLmRlcHRoTW9kZUZvclN1YmxheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0xLSgoMSt0aGlzLmN1cnJlbnRMYXllcikqdGhpcy5udW1TdWJsYXllcnMrdCkqdGhpcy5kZXB0aEVwc2lsb24saT1uLTErdGhpcy5kZXB0aFJhbmdlO3JldHVybiBuZXcgcXQocnx8dGhpcy5jb250ZXh0LmdsLkxFUVVBTCxlLFtpLG5dKX0senIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7Zm9yKHZhciBpIGluIHRoaXMuc3R5bGU9ZSx0aGlzLm9wdGlvbnM9cix0aGlzLmxpbmVBdGxhcz1lLmxpbmVBdGxhcyx0aGlzLmltYWdlTWFuYWdlcj1lLmltYWdlTWFuYWdlcix0aGlzLmdseXBoTWFuYWdlcj1lLmdseXBoTWFuYWdlcix0aGlzLnN5bWJvbEZhZGVDaGFuZ2U9ZS5wbGFjZW1lbnQuc3ltYm9sRmFkZUNoYW5nZShhLm5vdygpKSxlLnNvdXJjZUNhY2hlcyl7dmFyIG89bi5zdHlsZS5zb3VyY2VDYWNoZXNbaV07by51c2VkJiZvLnByZXBhcmUobi5jb250ZXh0KX12YXIgcz10aGlzLnN0eWxlLl9vcmRlcixsPXQuZmlsdGVyT2JqZWN0KHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzLGZ1bmN0aW9uKHQpe3JldHVybiJyYXN0ZXIiPT09dC5nZXRTb3VyY2UoKS50eXBlfHwicmFzdGVyLWRlbSI9PT10LmdldFNvdXJjZSgpLnR5cGV9KSxjPWZ1bmN0aW9uKGUpe3ZhciByPWxbZV07IWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWUuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnRpbGVJRC5pc0xlc3NUaGFuKGUudGlsZUlEKT8tMTplLnRpbGVJRC5pc0xlc3NUaGFuKHQudGlsZUlEKT8xOjB9KSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPXt9LG89bltpXSxzPW4uc2xpY2UoaSsxKTthcihvLnRpbGVJRC53cmFwcGVkKCksby50aWxlSUQscyxuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKDAsby50aWxlSUQud3JhcCsxLDAsMCwwKSxhKSxvLnNldE1hc2soYSxyKX19KHIuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByLmdldFRpbGUodCl9KSxuLmNvbnRleHQpfTtmb3IodmFyIHUgaW4gbCljKHUpO3RoaXMucmVuZGVyUGFzcz0ib2Zmc2NyZWVuIjt2YXIgZixoPVtdO3RoaXMuZGVwdGhSYm9OZWVkc0NsZWFyPSEwO2Zvcih2YXIgcD0wO3A8cy5sZW5ndGg7cCsrKXt2YXIgZD1uLnN0eWxlLl9sYXllcnNbc1twXV07ZC5oYXNPZmZzY3JlZW5QYXNzKCkmJiFkLmlzSGlkZGVuKG4udHJhbnNmb3JtLnpvb20pJiYoZC5zb3VyY2UhPT0oZiYmZi5pZCkmJihoPVtdLChmPW4uc3R5bGUuc291cmNlQ2FjaGVzW2Quc291cmNlXSkmJihoPWYuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpLnJldmVyc2UoKSksaC5sZW5ndGgmJm4ucmVuZGVyTGF5ZXIobixmLGQsaCkpfXRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpLHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6ci5zaG93T3ZlcmRyYXdJbnNwZWN0b3I/dC5kZWZhdWx0JDYuYmxhY2s6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsZGVwdGg6MX0pLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj1yLnNob3dPdmVyZHJhd0luc3BlY3Rvcix0aGlzLmRlcHRoUmFuZ2U9KGUuX29yZGVyLmxlbmd0aCsyKSp0aGlzLm51bVN1YmxheWVycyp0aGlzLmRlcHRoRXBzaWxvbix0aGlzLnJlbmRlclBhc3M9Im9wYXF1ZSI7dmFyIGcsdj1bXTtmb3IodGhpcy5jdXJyZW50TGF5ZXI9cy5sZW5ndGgtMSx0aGlzLmN1cnJlbnRMYXllcjt0aGlzLmN1cnJlbnRMYXllcj49MDt0aGlzLmN1cnJlbnRMYXllci0tKXt2YXIgbT1uLnN0eWxlLl9sYXllcnNbc1tuLmN1cnJlbnRMYXllcl1dO20uc291cmNlIT09KGcmJmcuaWQpJiYodj1bXSwoZz1uLnN0eWxlLnNvdXJjZUNhY2hlc1ttLnNvdXJjZV0pJiYobi5jbGVhclN0ZW5jaWwoKSx2PWcuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCksZy5nZXRTb3VyY2UoKS5pc1RpbGVDbGlwcGVkJiZuLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyh2KSkpLG4ucmVuZGVyTGF5ZXIobixnLG0sdil9dGhpcy5yZW5kZXJQYXNzPSJ0cmFuc2x1Y2VudCI7dmFyIHkseD1bXTtmb3IodGhpcy5jdXJyZW50TGF5ZXI9MCx0aGlzLmN1cnJlbnRMYXllcjt0aGlzLmN1cnJlbnRMYXllcjxzLmxlbmd0aDt0aGlzLmN1cnJlbnRMYXllcisrKXt2YXIgYj1uLnN0eWxlLl9sYXllcnNbc1tuLmN1cnJlbnRMYXllcl1dO2Iuc291cmNlIT09KHkmJnkuaWQpJiYoeD1bXSwoeT1uLnN0eWxlLnNvdXJjZUNhY2hlc1tiLnNvdXJjZV0pJiYobi5jbGVhclN0ZW5jaWwoKSx4PXkuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkseS5nZXRTb3VyY2UoKS5pc1RpbGVDbGlwcGVkJiZuLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyh4KSkseC5yZXZlcnNlKCkpLG4ucmVuZGVyTGF5ZXIobix5LGIseCl9aWYodGhpcy5vcHRpb25zLnNob3dUaWxlQm91bmRhcmllcyl7dmFyIF89dGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbT2JqZWN0LmtleXModGhpcy5zdHlsZS5zb3VyY2VDYWNoZXMpWzBdXTtfJiZMci5kZWJ1Zyh0aGlzLF8sXy5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSl9fSx6ci5wcm90b3R5cGUuc2V0dXBPZmZzY3JlZW5EZXB0aFJlbmRlcmJ1ZmZlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dDt0aGlzLmRlcHRoUmJvfHwodGhpcy5kZXB0aFJibz10LmNyZWF0ZVJlbmRlcmJ1ZmZlcih0LmdsLkRFUFRIX0NPTVBPTkVOVDE2LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKX0senIucHJvdG90eXBlLnJlbmRlckxheWVyPWZ1bmN0aW9uKHQsZSxyLG4pe3IuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSl8fCgiYmFja2dyb3VuZCI9PT1yLnR5cGV8fG4ubGVuZ3RoKSYmKHRoaXMuaWQ9ci5pZCxMcltyLnR5cGVdKHQsZSxyLG4pKX0senIucHJvdG90eXBlLnRyYW5zbGF0ZVBvc01hdHJpeD1mdW5jdGlvbihlLHIsbixpLGEpe2lmKCFuWzBdJiYhblsxXSlyZXR1cm4gZTt2YXIgbz1hPyJtYXAiPT09aT90aGlzLnRyYW5zZm9ybS5hbmdsZTowOiJ2aWV3cG9ydCI9PT1pPy10aGlzLnRyYW5zZm9ybS5hbmdsZTowO2lmKG8pe3ZhciBzPU1hdGguc2luKG8pLGw9TWF0aC5jb3Mobyk7bj1bblswXSpsLW5bMV0qcyxuWzBdKnMrblsxXSpsXX12YXIgYz1bYT9uWzBdOk1lKHIsblswXSx0aGlzLnRyYW5zZm9ybS56b29tKSxhP25bMV06TWUocixuWzFdLHRoaXMudHJhbnNmb3JtLnpvb20pLDBdLHU9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHQubWF0NC50cmFuc2xhdGUodSxlLGMpLHV9LHpyLnByb3RvdHlwZS5zYXZlVGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV07ZT9lLnB1c2godCk6dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV09W3RdfSx6ci5wcm90b3R5cGUuZ2V0VGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3RdO3JldHVybiBlJiZlLmxlbmd0aD4wP2UucG9wKCk6bnVsbH0senIucHJvdG90eXBlLl9jcmVhdGVQcm9ncmFtQ2FjaGVkPWZ1bmN0aW9uKHQsZSl7dGhpcy5jYWNoZT10aGlzLmNhY2hlfHx7fTt2YXIgcj0iIit0KyhlLmNhY2hlS2V5fHwiIikrKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj8iL292ZXJkcmF3IjoiIik7cmV0dXJuIHRoaXMuY2FjaGVbcl18fCh0aGlzLmNhY2hlW3JdPW5ldyBpcih0aGlzLmNvbnRleHQsbnJbdF0sZSx0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IpKSx0aGlzLmNhY2hlW3JdfSx6ci5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2NyZWF0ZVByb2dyYW1DYWNoZWQodCxlfHx0aGlzLmVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb24pO3JldHVybiB0aGlzLmNvbnRleHQucHJvZ3JhbS5zZXQoci5wcm9ncmFtKSxyfTt2YXIgUHI9dC5kZWZhdWx0JDIwLnZlYzQsUnI9dC5kZWZhdWx0JDIwLm1hdDQsRnI9dC5kZWZhdWx0JDIwLm1hdDIsQnI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZVNpemU9NTEyLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXZvaWQgMD09PXJ8fHIsdGhpcy5fbWluWm9vbT10fHwwLHRoaXMuX21heFpvb209ZXx8MjIsdGhpcy5sYXRSYW5nZT1bLTg1LjA1MTEzLDg1LjA1MTEzXSx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLl9jZW50ZXI9bmV3IEcoMCwwKSx0aGlzLnpvb209MCx0aGlzLmFuZ2xlPTAsdGhpcy5fZm92PS42NDM1MDExMDg3OTMyODQ0LHRoaXMuX3BpdGNoPTAsdGhpcy5fdW5tb2RpZmllZD0hMCx0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319LE5yPXttaW5ab29tOntjb25maWd1cmFibGU6ITB9LG1heFpvb206e2NvbmZpZ3VyYWJsZTohMH0scmVuZGVyV29ybGRDb3BpZXM6e2NvbmZpZ3VyYWJsZTohMH0sd29ybGRTaXplOntjb25maWd1cmFibGU6ITB9LGNlbnRlclBvaW50Ontjb25maWd1cmFibGU6ITB9LHNpemU6e2NvbmZpZ3VyYWJsZTohMH0sYmVhcmluZzp7Y29uZmlndXJhYmxlOiEwfSxwaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxmb3Y6e2NvbmZpZ3VyYWJsZTohMH0sem9vbTp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXI6e2NvbmZpZ3VyYWJsZTohMH0sdW5tb2RpZmllZDp7Y29uZmlndXJhYmxlOiEwfSx4Ontjb25maWd1cmFibGU6ITB9LHk6e2NvbmZpZ3VyYWJsZTohMH0scG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O0JyLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBCcih0aGlzLl9taW5ab29tLHRoaXMuX21heFpvb20sdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpO3JldHVybiB0LnRpbGVTaXplPXRoaXMudGlsZVNpemUsdC5sYXRSYW5nZT10aGlzLmxhdFJhbmdlLHQud2lkdGg9dGhpcy53aWR0aCx0LmhlaWdodD10aGlzLmhlaWdodCx0Ll9jZW50ZXI9dGhpcy5fY2VudGVyLHQuem9vbT10aGlzLnpvb20sdC5hbmdsZT10aGlzLmFuZ2xlLHQuX2Zvdj10aGlzLl9mb3YsdC5fcGl0Y2g9dGhpcy5fcGl0Y2gsdC5fdW5tb2RpZmllZD10aGlzLl91bm1vZGlmaWVkLHQuX2NhbGNNYXRyaWNlcygpLHR9LE5yLm1pblpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pblpvb219LE5yLm1pblpvb20uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21pblpvb20hPT10JiYodGhpcy5fbWluWm9vbT10LHRoaXMuem9vbT1NYXRoLm1heCh0aGlzLnpvb20sdCkpfSxOci5tYXhab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhab29tfSxOci5tYXhab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9tYXhab29tIT09dCYmKHRoaXMuX21heFpvb209dCx0aGlzLnpvb209TWF0aC5taW4odGhpcy56b29tLHQpKX0sTnIucmVuZGVyV29ybGRDb3BpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzfSxOci5yZW5kZXJXb3JsZENvcGllcy5zZXQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dD90PSEwOm51bGw9PT10JiYodD0hMSksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXM9dH0sTnIud29ybGRTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpbGVTaXplKnRoaXMuc2NhbGV9LE5yLmNlbnRlclBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUuX2RpdigyKX0sTnIuc2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxOci5iZWFyaW5nLmdldD1mdW5jdGlvbigpe3JldHVybi10aGlzLmFuZ2xlL01hdGguUEkqMTgwfSxOci5iZWFyaW5nLnNldD1mdW5jdGlvbihlKXt2YXIgcj0tdC53cmFwKGUsLTE4MCwxODApKk1hdGguUEkvMTgwO3RoaXMuYW5nbGUhPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLmFuZ2xlPXIsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5yb3RhdGlvbk1hdHJpeD1Gci5jcmVhdGUoKSxGci5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMuYW5nbGUpKX0sTnIucGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoL01hdGguUEkqMTgwfSxOci5waXRjaC5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jbGFtcChlLDAsNjApLzE4MCpNYXRoLlBJO3RoaXMuX3BpdGNoIT09ciYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fcGl0Y2g9cix0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE5yLmZvdi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm92L01hdGguUEkqMTgwfSxOci5mb3Yuc2V0PWZ1bmN0aW9uKHQpe3Q9TWF0aC5tYXgoLjAxLE1hdGgubWluKDYwLHQpKSx0aGlzLl9mb3YhPT10JiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9mb3Y9dC8xODAqTWF0aC5QSSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE5yLnpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LE5yLnpvb20uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWluKE1hdGgubWF4KHQsdGhpcy5taW5ab29tKSx0aGlzLm1heFpvb20pO3RoaXMuX3pvb20hPT1lJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl96b29tPWUsdGhpcy5zY2FsZT10aGlzLnpvb21TY2FsZShlKSx0aGlzLnRpbGVab29tPU1hdGguZmxvb3IoZSksdGhpcy56b29tRnJhY3Rpb249ZS10aGlzLnRpbGVab29tLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTnIuY2VudGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZW50ZXJ9LE5yLmNlbnRlci5zZXQ9ZnVuY3Rpb24odCl7dC5sYXQ9PT10aGlzLl9jZW50ZXIubGF0JiZ0LmxuZz09PXRoaXMuX2NlbnRlci5sbmd8fCh0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2NlbnRlcj10LHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sQnIucHJvdG90eXBlLmNvdmVyaW5nWm9vbUxldmVsPWZ1bmN0aW9uKHQpe3JldHVybih0LnJvdW5kWm9vbT9NYXRoLnJvdW5kOk1hdGguZmxvb3IpKHRoaXMuem9vbSt0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplL3QudGlsZVNpemUpKX0sQnIucHJvdG90eXBlLmdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCwwKSwwKSxuPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLDApLDApLGk9TWF0aC5mbG9vcihyLmNvbHVtbiksYT1NYXRoLmZsb29yKG4uY29sdW1uKSxvPVtuZXcgdC5VbndyYXBwZWRUaWxlSUQoMCxlKV07aWYodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpZm9yKHZhciBzPWk7czw9YTtzKyspMCE9PXMmJm8ucHVzaChuZXcgdC5VbndyYXBwZWRUaWxlSUQocyxlKSk7cmV0dXJuIG99LEJyLnByb3RvdHlwZS5jb3ZlcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY292ZXJpbmdab29tTGV2ZWwoZSksbj1yO2lmKHZvaWQgMCE9PWUubWluem9vbSYmcjxlLm1pbnpvb20pcmV0dXJuW107dm9pZCAwIT09ZS5tYXh6b29tJiZyPmUubWF4em9vbSYmKHI9ZS5tYXh6b29tKTt2YXIgaT10aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50LHIpLGE9bmV3IHQuZGVmYXVsdCQxKGkuY29sdW1uLS41LGkucm93LS41KTtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7dm9pZCAwPT09aSYmKGk9ITApO3ZhciBhPTE8PGUsbz17fTtmdW5jdGlvbiBzKHIscyxsKXt2YXIgYyx1LGYsaDtpZihsPj0wJiZsPD1hKWZvcihjPXI7YzxzO2MrKyl1PU1hdGguZmxvb3IoYy9hKSxmPShjJWErYSklYSwwIT09dSYmITAhPT1pfHwoaD1uZXcgdC5PdmVyc2NhbGVkVGlsZUlEKG4sdSxlLGYsbCksb1toLmtleV09aCl9cmV0dXJuIERyKHJbMF0sclsxXSxyWzJdLDAsYSxzKSxEcihyWzJdLHJbM10sclswXSwwLGEscyksT2JqZWN0LmtleXMobykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfSl9KHIsW3RoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSgwLDApLHIpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLDApLHIpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSxyKSx0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLmhlaWdodCkscildLGUucmVwYXJzZU92ZXJzY2FsZWQ/bjpyLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZGlzdCh0LmNhbm9uaWNhbCktYS5kaXN0KGUuY2Fub25pY2FsKX0pfSxCci5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5waXhlbHNUb0dMVW5pdHM9WzIvdCwtMi9lXSx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKX0sTnIudW5tb2RpZmllZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdW5tb2RpZmllZH0sQnIucHJvdG90eXBlLnpvb21TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sQnIucHJvdG90eXBlLnNjYWxlWm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9LEJyLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5kZWZhdWx0JDEodGhpcy5sbmdYKGUubG5nKSx0aGlzLmxhdFkoZS5sYXQpKX0sQnIucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEcodGhpcy54TG5nKHQueCksdGhpcy55TGF0KHQueSkpfSxOci54LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxuZ1godGhpcy5jZW50ZXIubG5nKX0sTnIueS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXRZKHRoaXMuY2VudGVyLmxhdCl9LE5yLnBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5kZWZhdWx0JDEodGhpcy54LHRoaXMueSl9LEJyLnByb3RvdHlwZS5sbmdYPWZ1bmN0aW9uKHQpe3JldHVybigxODArdCkqdGhpcy53b3JsZFNpemUvMzYwfSxCci5wcm90b3R5cGUubGF0WT1mdW5jdGlvbih0KXtyZXR1cm4oMTgwLTE4MC9NYXRoLlBJKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0Kk1hdGguUEkvMzYwKSkpKnRoaXMud29ybGRTaXplLzM2MH0sQnIucHJvdG90eXBlLnhMbmc9ZnVuY3Rpb24odCl7cmV0dXJuIDM2MCp0L3RoaXMud29ybGRTaXplLTE4MH0sQnIucHJvdG90eXBlLnlMYXQ9ZnVuY3Rpb24odCl7dmFyIGU9MTgwLTM2MCp0L3RoaXMud29ybGRTaXplO3JldHVybiAzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoZSpNYXRoLlBJLzE4MCkpLTkwfSxCci5wcm90b3R5cGUuc2V0TG9jYXRpb25BdFBvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb2ludENvb3JkaW5hdGUoZSkuX3N1Yih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50KSk7dGhpcy5jZW50ZXI9dGhpcy5jb29yZGluYXRlTG9jYXRpb24odGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkuX3N1YihyKSksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLmNlbnRlcj10aGlzLmNlbnRlci53cmFwKCkpfSxCci5wcm90b3R5cGUubG9jYXRpb25Qb2ludD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlUG9pbnQodGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkpfSxCci5wcm90b3R5cGUucG9pbnRMb2NhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlTG9jYXRpb24odGhpcy5wb2ludENvb3JkaW5hdGUodCkpfSxCci5wcm90b3R5cGUubG9jYXRpb25Db29yZGluYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5kZWZhdWx0JDE3KHRoaXMubG5nWChlLmxuZykvdGhpcy50aWxlU2l6ZSx0aGlzLmxhdFkoZS5sYXQpL3RoaXMudGlsZVNpemUsdGhpcy56b29tKS56b29tVG8odGhpcy50aWxlWm9vbSl9LEJyLnByb3RvdHlwZS5jb29yZGluYXRlTG9jYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dC56b29tVG8odGhpcy56b29tKTtyZXR1cm4gbmV3IEcodGhpcy54TG5nKGUuY29sdW1uKnRoaXMudGlsZVNpemUpLHRoaXMueUxhdChlLnJvdyp0aGlzLnRpbGVTaXplKSl9LEJyLnByb3RvdHlwZS5wb2ludENvb3JkaW5hdGU9ZnVuY3Rpb24oZSxyKXt2b2lkIDA9PT1yJiYocj10aGlzLnRpbGVab29tKTt2YXIgbj1bZS54LGUueSwwLDFdLGk9W2UueCxlLnksMSwxXTtQci50cmFuc2Zvcm1NYXQ0KG4sbix0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSksUHIudHJhbnNmb3JtTWF0NChpLGksdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO3ZhciBhPW5bM10sbz1pWzNdLHM9blswXS9hLGw9aVswXS9vLGM9blsxXS9hLHU9aVsxXS9vLGY9blsyXS9hLGg9aVsyXS9vLHA9Zj09PWg/MDooMC1mKS8oaC1mKTtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxNyh0Lm51bWJlcihzLGwscCkvdGhpcy50aWxlU2l6ZSx0Lm51bWJlcihjLHUscCkvdGhpcy50aWxlU2l6ZSx0aGlzLnpvb20pLl96b29tVG8ocil9LEJyLnByb3RvdHlwZS5jb29yZGluYXRlUG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHI9ZS56b29tVG8odGhpcy56b29tKSxuPVtyLmNvbHVtbip0aGlzLnRpbGVTaXplLHIucm93KnRoaXMudGlsZVNpemUsMCwxXTtyZXR1cm4gUHIudHJhbnNmb3JtTWF0NChuLG4sdGhpcy5waXhlbE1hdHJpeCksbmV3IHQuZGVmYXVsdCQxKG5bMF0vblszXSxuWzFdL25bM10pfSxCci5wcm90b3R5cGUuY2FsY3VsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscil7dm9pZCAwPT09ciYmKHI9ITEpO3ZhciBuPWUua2V5LGk9cj90aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU6dGhpcy5fcG9zTWF0cml4Q2FjaGU7aWYoaVtuXSlyZXR1cm4gaVtuXTt2YXIgYT1lLmNhbm9uaWNhbCxvPXRoaXMud29ybGRTaXplL3RoaXMuem9vbVNjYWxlKGEueikscz1hLngrTWF0aC5wb3coMixhLnopKmUud3JhcCxsPVJyLmlkZW50aXR5KG5ldyBGbG9hdDY0QXJyYXkoMTYpKTtyZXR1cm4gUnIudHJhbnNsYXRlKGwsbCxbcypvLGEueSpvLDBdKSxSci5zY2FsZShsLGwsW28vdC5kZWZhdWx0JDgsby90LmRlZmF1bHQkOCwxXSksUnIubXVsdGlwbHkobCxyP3RoaXMuYWxpZ25lZFByb2pNYXRyaXg6dGhpcy5wcm9qTWF0cml4LGwpLGlbbl09bmV3IEZsb2F0MzJBcnJheShsKSxpW25dfSxCci5wcm90b3R5cGUuX2NvbnN0cmFpbj1mdW5jdGlvbigpe2lmKHRoaXMuY2VudGVyJiZ0aGlzLndpZHRoJiZ0aGlzLmhlaWdodCYmIXRoaXMuX2NvbnN0cmFpbmluZyl7dGhpcy5fY29uc3RyYWluaW5nPSEwO3ZhciBlLHIsbixpLGE9LTkwLG89OTAscz0tMTgwLGw9MTgwLGM9dGhpcy5zaXplLHU9dGhpcy5fdW5tb2RpZmllZDtpZih0aGlzLmxhdFJhbmdlKXt2YXIgZj10aGlzLmxhdFJhbmdlO2E9dGhpcy5sYXRZKGZbMV0pLGU9KG89dGhpcy5sYXRZKGZbMF0pKS1hPGMueT9jLnkvKG8tYSk6MH1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgaD10aGlzLmxuZ1JhbmdlO3M9dGhpcy5sbmdYKGhbMF0pLHI9KGw9dGhpcy5sbmdYKGhbMV0pKS1zPGMueD9jLngvKGwtcyk6MH12YXIgcD1NYXRoLm1heChyfHwwLGV8fDApO2lmKHApcmV0dXJuIHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LmRlZmF1bHQkMShyPyhsK3MpLzI6dGhpcy54LGU/KG8rYSkvMjp0aGlzLnkpKSx0aGlzLnpvb20rPXRoaXMuc2NhbGVab29tKHApLHRoaXMuX3VubW9kaWZpZWQ9dSx2b2lkKHRoaXMuX2NvbnN0cmFpbmluZz0hMSk7aWYodGhpcy5sYXRSYW5nZSl7dmFyIGQ9dGhpcy55LGc9Yy55LzI7ZC1nPGEmJihpPWErZyksZCtnPm8mJihpPW8tZyl9aWYodGhpcy5sbmdSYW5nZSl7dmFyIHY9dGhpcy54LG09Yy54LzI7di1tPHMmJihuPXMrbSksdittPmwmJihuPWwtbSl9dm9pZCAwPT09biYmdm9pZCAwPT09aXx8KHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LmRlZmF1bHQkMSh2b2lkIDAhPT1uP246dGhpcy54LHZvaWQgMCE9PWk/aTp0aGlzLnkpKSksdGhpcy5fdW5tb2RpZmllZD11LHRoaXMuX2NvbnN0cmFpbmluZz0hMX19LEJyLnByb3RvdHlwZS5fY2FsY01hdHJpY2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5oZWlnaHQpe3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZT0uNS9NYXRoLnRhbih0aGlzLl9mb3YvMikqdGhpcy5oZWlnaHQ7dmFyIHQ9dGhpcy5fZm92LzIsZT1NYXRoLlBJLzIrdGhpcy5fcGl0Y2gscj1NYXRoLnNpbih0KSp0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvTWF0aC5zaW4oTWF0aC5QSS1lLXQpLG49dGhpcy54LGk9dGhpcy55LGE9MS4wMSooTWF0aC5jb3MoTWF0aC5QSS8yLXRoaXMuX3BpdGNoKSpyK3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSksbz1uZXcgRmxvYXQ2NEFycmF5KDE2KTtSci5wZXJzcGVjdGl2ZShvLHRoaXMuX2Zvdix0aGlzLndpZHRoL3RoaXMuaGVpZ2h0LDEsYSksUnIuc2NhbGUobyxvLFsxLC0xLDFdKSxSci50cmFuc2xhdGUobyxvLFswLDAsLXRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZV0pLFJyLnJvdGF0ZVgobyxvLHRoaXMuX3BpdGNoKSxSci5yb3RhdGVaKG8sbyx0aGlzLmFuZ2xlKSxSci50cmFuc2xhdGUobyxvLFstbiwtaSwwXSk7dmFyIHM9dGhpcy53b3JsZFNpemUvKDIqTWF0aC5QSSo2Mzc4MTM3Kk1hdGguYWJzKE1hdGguY29zKHRoaXMuY2VudGVyLmxhdCooTWF0aC5QSS8xODApKSkpO1JyLnNjYWxlKG8sbyxbMSwxLHMsMV0pLHRoaXMucHJvak1hdHJpeD1vO3ZhciBsPXRoaXMud2lkdGglMi8yLGM9dGhpcy5oZWlnaHQlMi8yLHU9TWF0aC5jb3ModGhpcy5hbmdsZSksZj1NYXRoLnNpbih0aGlzLmFuZ2xlKSxoPW4tTWF0aC5yb3VuZChuKSt1KmwrZipjLHA9aS1NYXRoLnJvdW5kKGkpK3UqYytmKmwsZD1uZXcgRmxvYXQ2NEFycmF5KG8pO2lmKFJyLnRyYW5zbGF0ZShkLGQsW2g+LjU/aC0xOmgscD4uNT9wLTE6cCwwXSksdGhpcy5hbGlnbmVkUHJvak1hdHJpeD1kLG89UnIuY3JlYXRlKCksUnIuc2NhbGUobyxvLFt0aGlzLndpZHRoLzIsLXRoaXMuaGVpZ2h0LzIsMV0pLFJyLnRyYW5zbGF0ZShvLG8sWzEsLTEsMF0pLHRoaXMucGl4ZWxNYXRyaXg9UnIubXVsdGlwbHkobmV3IEZsb2F0NjRBcnJheSgxNiksbyx0aGlzLnByb2pNYXRyaXgpLCEobz1Sci5pbnZlcnQobmV3IEZsb2F0NjRBcnJheSgxNiksdGhpcy5waXhlbE1hdHJpeCkpKXRocm93IG5ldyBFcnJvcigiZmFpbGVkIHRvIGludmVydCBtYXRyaXgiKTt0aGlzLnBpeGVsTWF0cml4SW52ZXJzZT1vLHRoaXMuX3Bvc01hdHJpeENhY2hlPXt9LHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZT17fX19LEJyLnByb3RvdHlwZS5tYXhQaXRjaFNjYWxlRmFjdG9yPWZ1bmN0aW9uKCl7aWYoIXRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKXJldHVybiAxO3ZhciBlPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSgwLDApKS56b29tVG8odGhpcy56b29tKSxyPVtlLmNvbHVtbip0aGlzLnRpbGVTaXplLGUucm93KnRoaXMudGlsZVNpemUsMCwxXTtyZXR1cm4gUHIudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeClbM10vdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhCci5wcm90b3R5cGUsTnIpO3ZhciBqcj1mdW5jdGlvbigpe3ZhciBlLHIsbixpO3QuYmluZEFsbChbIl9vbkhhc2hDaGFuZ2UiLCJfdXBkYXRlSGFzaCJdLHRoaXMpLHRoaXMuX3VwZGF0ZUhhc2g9KGU9dGhpcy5fdXBkYXRlSGFzaFVudGhyb3R0bGVkLmJpbmQodGhpcyksMzAwLHI9ITEsbj0wLGk9ZnVuY3Rpb24oKXtuPTAsciYmKGUoKSxuPXNldFRpbWVvdXQoaSwzMDApLHI9ITEpfSxmdW5jdGlvbigpe3JldHVybiByPSEwLG58fGkoKSxufSl9O2pyLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHRoaXMuX29uSGFzaENoYW5nZSwhMSksdGhpcy5fbWFwLm9uKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVIYXNoKSx0aGlzfSxqci5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUhhc2gpLGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVIYXNoKCkpLGRlbGV0ZSB0aGlzLl9tYXAsdGhpc30sanIucHJvdG90eXBlLmdldEhhc2hTdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldENlbnRlcigpLHI9TWF0aC5yb3VuZCgxMDAqdGhpcy5fbWFwLmdldFpvb20oKSkvMTAwLG49TWF0aC5jZWlsKChyKk1hdGguTE4yK01hdGgubG9nKDUxMi8zNjAvLjUpKS9NYXRoLkxOMTApLGk9TWF0aC5wb3coMTAsbiksYT1NYXRoLnJvdW5kKGUubG5nKmkpL2ksbz1NYXRoLnJvdW5kKGUubGF0KmkpL2kscz10aGlzLl9tYXAuZ2V0QmVhcmluZygpLGw9dGhpcy5fbWFwLmdldFBpdGNoKCksYz0iIjtyZXR1cm4gYys9dD8iIy8iK2ErIi8iK28rIi8iK3I6IiMiK3IrIi8iK28rIi8iK2EsKHN8fGwpJiYoYys9Ii8iK01hdGgucm91bmQoMTAqcykvMTApLGwmJihjKz0iLyIrTWF0aC5yb3VuZChsKSksY30sanIucHJvdG90eXBlLl9vbkhhc2hDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT10LmRlZmF1bHQubG9jYXRpb24uaGFzaC5yZXBsYWNlKCIjIiwiIikuc3BsaXQoIi8iKTtyZXR1cm4gZS5sZW5ndGg+PTMmJih0aGlzLl9tYXAuanVtcFRvKHtjZW50ZXI6WytlWzJdLCtlWzFdXSx6b29tOitlWzBdLGJlYXJpbmc6KyhlWzNdfHwwKSxwaXRjaDorKGVbNF18fDApfSksITApfSxqci5wcm90b3R5cGUuX3VwZGF0ZUhhc2hVbnRocm90dGxlZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0SGFzaFN0cmluZygpO3QuZGVmYXVsdC5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh0LmRlZmF1bHQuaGlzdG9yeS5zdGF0ZSwiIixlKX07dmFyIFZyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7dm9pZCAwPT09YSYmKGE9e30pO3ZhciBvPXMubW91c2VQb3Mobi5nZXRDYW52YXNDb250YWluZXIoKSxpKSxsPW4udW5wcm9qZWN0KG8pO2UuY2FsbCh0aGlzLHIsdC5leHRlbmQoe3BvaW50Om8sbG5nTGF0Omwsb3JpZ2luYWxFdmVudDppfSxhKSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLnRhcmdldD1ufWUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yO3ZhciBuPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxuLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIucHJvdG90eXBlLG4pLHJ9KHQuRXZlbnQpLFVyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGkpe3ZhciBhPXMudG91Y2hQb3Mobi5nZXRDYW52YXNDb250YWluZXIoKSxpKSxvPWEubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnVucHJvamVjdCh0KX0pLGw9YS5yZWR1Y2UoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuYWRkKGUuZGl2KG4ubGVuZ3RoKSl9LG5ldyB0LmRlZmF1bHQkMSgwLDApKSxjPW4udW5wcm9qZWN0KGwpO2UuY2FsbCh0aGlzLHIse3BvaW50czphLHBvaW50OmwsbG5nTGF0czpvLGxuZ0xhdDpjLG9yaWdpbmFsRXZlbnQ6aX0pLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITF9ZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXI7dmFyIG49e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LG4uZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoci5wcm90b3R5cGUsbikscn0odC5FdmVudCkscXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7dC5jYWxsKHRoaXMsZSx7b3JpZ2luYWxFdmVudDpufSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIGUucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0sci5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfSh0LkV2ZW50KSxIcj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2RlbHRhPTAsdC5iaW5kQWxsKFsiX29uV2hlZWwiLCJfb25UaW1lb3V0IiwiX29uU2Nyb2xsRnJhbWUiLCJfb25TY3JvbGxGaW5pc2hlZCJdLHRoaXMpfTtIci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxIci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sSHIucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9hcm91bmRDZW50ZXI9dCYmImNlbnRlciI9PT10LmFyb3VuZCl9LEhyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxIci5wcm90b3R5cGUub25XaGVlbD1mdW5jdGlvbihlKXtpZih0aGlzLmlzRW5hYmxlZCgpKXt2YXIgcj1lLmRlbHRhTW9kZT09PXQuZGVmYXVsdC5XaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FPzQwKmUuZGVsdGFZOmUuZGVsdGFZLG49YS5ub3coKSxpPW4tKHRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZXx8MCk7dGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lPW4sMCE9PXImJnIlNC4wMDAyNDQxNDA2MjU9PTA/dGhpcy5fdHlwZT0id2hlZWwiOjAhPT1yJiZNYXRoLmFicyhyKTw0P3RoaXMuX3R5cGU9InRyYWNrcGFkIjppPjQwMD8odGhpcy5fdHlwZT1udWxsLHRoaXMuX2xhc3RWYWx1ZT1yLHRoaXMuX3RpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9vblRpbWVvdXQsNDAsZSkpOnRoaXMuX3R5cGV8fCh0aGlzLl90eXBlPU1hdGguYWJzKGkqcik8MjAwPyJ0cmFja3BhZCI6IndoZWVsIix0aGlzLl90aW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMuX3RpbWVvdXQ9bnVsbCxyKz10aGlzLl9sYXN0VmFsdWUpKSxlLnNoaWZ0S2V5JiZyJiYoci89NCksdGhpcy5fdHlwZSYmKHRoaXMuX2xhc3RXaGVlbEV2ZW50PWUsdGhpcy5fZGVsdGEtPXIsdGhpcy5pc0FjdGl2ZSgpfHx0aGlzLl9zdGFydChlKSksZS5wcmV2ZW50RGVmYXVsdCgpfX0sSHIucHJvdG90eXBlLl9vblRpbWVvdXQ9ZnVuY3Rpb24odCl7dGhpcy5fdHlwZT0id2hlZWwiLHRoaXMuX2RlbHRhLT10aGlzLl9sYXN0VmFsdWUsdGhpcy5pc0FjdGl2ZSgpfHx0aGlzLl9zdGFydCh0KX0sSHIucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbihlKXtpZih0aGlzLl9kZWx0YSl7dGhpcy5fZnJhbWVJZCYmKHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSx0aGlzLl9hY3RpdmU9ITAsdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgiem9vbXN0YXJ0Iix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX2ZpbmlzaFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9maW5pc2hUaW1lb3V0KTt2YXIgcj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpO3RoaXMuX2Fyb3VuZD1HLmNvbnZlcnQodGhpcy5fYXJvdW5kQ2VudGVyP3RoaXMuX21hcC5nZXRDZW50ZXIoKTp0aGlzLl9tYXAudW5wcm9qZWN0KHIpKSx0aGlzLl9hcm91bmRQb2ludD10aGlzLl9tYXAudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodGhpcy5fYXJvdW5kKSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblNjcm9sbEZyYW1lKSl9fSxIci5wcm90b3R5cGUuX29uU2Nyb2xsRnJhbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmlzQWN0aXZlKCkpe3ZhciByPXRoaXMuX21hcC50cmFuc2Zvcm07aWYoMCE9PXRoaXMuX2RlbHRhKXt2YXIgbj0id2hlZWwiPT09dGhpcy5fdHlwZSYmTWF0aC5hYnModGhpcy5fZGVsdGEpPjQuMDAwMjQ0MTQwNjI1PzEvNDUwOi4wMSxpPTIvKDErTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhKm4pKSk7dGhpcy5fZGVsdGE8MCYmMCE9PWkmJihpPTEvaSk7dmFyIG89Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3Iuem9vbVNjYWxlKHRoaXMuX3RhcmdldFpvb20pOnIuc2NhbGU7dGhpcy5fdGFyZ2V0Wm9vbT1NYXRoLm1pbihyLm1heFpvb20sTWF0aC5tYXgoci5taW5ab29tLHIuc2NhbGVab29tKG8qaSkpKSwid2hlZWwiPT09dGhpcy5fdHlwZSYmKHRoaXMuX3N0YXJ0Wm9vbT1yLnpvb20sdGhpcy5fZWFzaW5nPXRoaXMuX3Ntb290aE91dEVhc2luZygyMDApKSx0aGlzLl9kZWx0YT0wfXZhciBzPSExO2lmKCJ3aGVlbCI9PT10aGlzLl90eXBlKXt2YXIgbD1NYXRoLm1pbigoYS5ub3coKS10aGlzLl9sYXN0V2hlZWxFdmVudFRpbWUpLzIwMCwxKSxjPXRoaXMuX2Vhc2luZyhsKTtyLnpvb209dC5udW1iZXIodGhpcy5fc3RhcnRab29tLHRoaXMuX3RhcmdldFpvb20sYyksbDwxP3RoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uU2Nyb2xsRnJhbWUpKTpzPSEwfWVsc2Ugci56b29tPXRoaXMuX3RhcmdldFpvb20scz0hMDtyLnNldExvY2F0aW9uQXRQb2ludCh0aGlzLl9hcm91bmQsdGhpcy5fYXJvdW5kUG9pbnQpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIix7b3JpZ2luYWxFdmVudDp0aGlzLl9sYXN0V2hlZWxFdmVudH0pKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgiem9vbSIse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9KSkscyYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maW5pc2hUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9tYXAuZmlyZShuZXcgdC5FdmVudCgiem9vbWVuZCIse29yaWdpbmFsRXZlbnQ6ZS5fbGFzdFdoZWVsRXZlbnR9KSksZS5fbWFwLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLHtvcmlnaW5hbEV2ZW50OmUuX2xhc3RXaGVlbEV2ZW50fSkpLGRlbGV0ZSBlLl90YXJnZXRab29tfSwyMDApKX19LEhyLnByb3RvdHlwZS5fc21vb3RoT3V0RWFzaW5nPWZ1bmN0aW9uKGUpe3ZhciByPXQuZWFzZTtpZih0aGlzLl9wcmV2RWFzZSl7dmFyIG49dGhpcy5fcHJldkVhc2UsaT0oYS5ub3coKS1uLnN0YXJ0KS9uLmR1cmF0aW9uLG89bi5lYXNpbmcoaSsuMDEpLW4uZWFzaW5nKGkpLHM9LjI3L01hdGguc3FydChvKm8rMWUtNCkqLjAxLGw9TWF0aC5zcXJ0KC4wNzI5LXMqcyk7cj10LmJlemllcihzLGwsLjI1LDEpfXJldHVybiB0aGlzLl9wcmV2RWFzZT17c3RhcnQ6YS5ub3coKSxkdXJhdGlvbjplLGVhc2luZzpyfSxyfTt2YXIgR3I9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9jb250YWluZXI9ZS5nZXRDb250YWluZXIoKSx0LmJpbmRBbGwoWyJfb25Nb3VzZU1vdmUiLCJfb25Nb3VzZVVwIiwiX29uS2V5RG93biJdLHRoaXMpfTtHci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxHci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sR3IucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwKX0sR3IucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LEdyLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXt0aGlzLmlzRW5hYmxlZCgpJiZlLnNoaWZ0S2V5JiYwPT09ZS5idXR0b24mJih0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSwhMSksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCwhMSkscy5kaXNhYmxlRHJhZygpLHRoaXMuX3N0YXJ0UG9zPXMubW91c2VQb3ModGhpcy5fZWwsZSksdGhpcy5fYWN0aXZlPSEwKX0sR3IucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGFydFBvcyxyPXMubW91c2VQb3ModGhpcy5fZWwsdCk7dGhpcy5fYm94fHwodGhpcy5fYm94PXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1ib3h6b29tIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21zdGFydCIsdCkpO3ZhciBuPU1hdGgubWluKGUueCxyLngpLGk9TWF0aC5tYXgoZS54LHIueCksYT1NYXRoLm1pbihlLnksci55KSxvPU1hdGgubWF4KGUueSxyLnkpO3Muc2V0VHJhbnNmb3JtKHRoaXMuX2JveCwidHJhbnNsYXRlKCIrbisicHgsIithKyJweCkiKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9aS1uKyJweCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1vLWErInB4In0sR3IucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24oZSl7aWYoMD09PWUuYnV0dG9uKXt2YXIgcj10aGlzLl9zdGFydFBvcyxuPXMubW91c2VQb3ModGhpcy5fZWwsZSksaT0obmV3IFkpLmV4dGVuZCh0aGlzLl9tYXAudW5wcm9qZWN0KHIpKS5leHRlbmQodGhpcy5fbWFwLnVucHJvamVjdChuKSk7dGhpcy5fZmluaXNoKCkscy5zdXBwcmVzc0NsaWNrKCksci54PT09bi54JiZyLnk9PT1uLnk/dGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIixlKTp0aGlzLl9tYXAuZml0Qm91bmRzKGkse2xpbmVhcjohMH0pLmZpcmUobmV3IHQuRXZlbnQoImJveHpvb21lbmQiLHtvcmlnaW5hbEV2ZW50OmUsYm94Wm9vbUJvdW5kczppfSkpfX0sR3IucHJvdG90eXBlLl9vbktleURvd249ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJih0aGlzLl9maW5pc2goKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21jYW5jZWwiLHQpKX0sR3IucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24sITEpLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXAsITEpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9ib3gmJihzLnJlbW92ZSh0aGlzLl9ib3gpLHRoaXMuX2JveD1udWxsKSxzLmVuYWJsZURyYWcoKX0sR3IucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSx7b3JpZ2luYWxFdmVudDpyfSkpfTt2YXIgWXI9dC5iZXppZXIoMCwwLC4yNSwxKSxXcj1mdW5jdGlvbihlLHIpe3RoaXMuX21hcD1lLHRoaXMuX2VsPXIuZWxlbWVudHx8ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9zdGF0ZT0iZGlzYWJsZWQiLHRoaXMuX2J1dHRvbj1yLmJ1dHRvbnx8InJpZ2h0Iix0aGlzLl9iZWFyaW5nU25hcD1yLmJlYXJpbmdTbmFwfHwwLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZT0hMSE9PXIucGl0Y2hXaXRoUm90YXRlLHQuYmluZEFsbChbIl9vbk1vdXNlTW92ZSIsIl9vbk1vdXNlVXAiLCJfb25CbHVyIiwiX29uRHJhZ0ZyYW1lIl0sdGhpcyl9O1dyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4iZGlzYWJsZWQiIT09dGhpcy5fc3RhdGV9LFdyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiJhY3RpdmUiPT09dGhpcy5fc3RhdGV9LFdyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fc3RhdGU9ImVuYWJsZWQiKX0sV3IucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZSJhY3RpdmUiOnRoaXMuX3N0YXRlPSJkaXNhYmxlZCIsdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlZW5kIiksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9maXJlRXZlbnQoInBpdGNoZW5kIiksdGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIik7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZGlzYWJsZWQiLHRoaXMuX3VuYmluZCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc3RhdGU9ImRpc2FibGVkIn19LFdyLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXtpZigiZW5hYmxlZCI9PT10aGlzLl9zdGF0ZSl7aWYoInJpZ2h0Ij09PXRoaXMuX2J1dHRvbil7aWYodGhpcy5fZXZlbnRCdXR0b249cy5tb3VzZUJ1dHRvbihlKSx0aGlzLl9ldmVudEJ1dHRvbiE9PShlLmN0cmxLZXk/MDoyKSlyZXR1cm59ZWxzZXtpZihlLmN0cmxLZXl8fDAhPT1zLm1vdXNlQnV0dG9uKGUpKXJldHVybjt0aGlzLl9ldmVudEJ1dHRvbj0wfXMuZGlzYWJsZURyYWcoKSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSx7Y2FwdHVyZTohMH0pLHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXIpLHRoaXMuX3N0YXRlPSJwZW5kaW5nIix0aGlzLl9pbmVydGlhPVtbYS5ub3coKSx0aGlzLl9tYXAuZ2V0QmVhcmluZygpXV0sdGhpcy5fcHJldmlvdXNQb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCxlKSx0aGlzLl9jZW50ZXI9dGhpcy5fbWFwLnRyYW5zZm9ybS5jZW50ZXJQb2ludCxlLnByZXZlbnREZWZhdWx0KCl9fSxXci5wcm90b3R5cGUuX29uTW91c2VNb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX2xhc3RNb3ZlRXZlbnQ9dCx0aGlzLl9wb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCx0KSwicGVuZGluZyI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPSJhY3RpdmUiLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlc3RhcnQiLHQpLHRoaXMuX2ZpcmVFdmVudCgibW92ZXN0YXJ0Iix0KSx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJnRoaXMuX2ZpcmVFdmVudCgicGl0Y2hzdGFydCIsdCkpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uRHJhZ0ZyYW1lKSl9LFdyLnByb3RvdHlwZS5fb25EcmFnRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkPW51bGw7dmFyIHQ9dGhpcy5fbGFzdE1vdmVFdmVudDtpZih0KXt2YXIgZT10aGlzLl9tYXAudHJhbnNmb3JtLHI9dGhpcy5fcHJldmlvdXNQb3Msbj10aGlzLl9wb3MsaT0uOCooci54LW4ueCksbz0tLjUqKHIueS1uLnkpLHM9ZS5iZWFyaW5nLWksbD1lLnBpdGNoLW8sYz10aGlzLl9pbmVydGlhLHU9Y1tjLmxlbmd0aC0xXTt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSxjLnB1c2goW2Eubm93KCksdGhpcy5fbWFwLl9ub3JtYWxpemVCZWFyaW5nKHMsdVsxXSldKSxlLmJlYXJpbmc9cyx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJih0aGlzLl9maXJlRXZlbnQoInBpdGNoIix0KSxlLnBpdGNoPWwpLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmUiLHQpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LHRoaXMuX3ByZXZpb3VzUG9zPXRoaXMuX3Bvc319LFdyLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe2lmKHMubW91c2VCdXR0b24odCk9PT10aGlzLl9ldmVudEJ1dHRvbilzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2UiYWN0aXZlIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIscy5zdXBwcmVzc0NsaWNrKCksdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2luZXJ0aWFsUm90YXRlKHQpO2JyZWFrO2Nhc2UicGVuZGluZyI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpfX0sV3IucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoInJvdGF0ZWVuZCIsdCksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9maXJlRXZlbnQoInBpdGNoZW5kIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmVlbmQiLHQpO2JyZWFrO2Nhc2UicGVuZGluZyI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpfX0sV3IucHJvdG90eXBlLl91bmJpbmQ9ZnVuY3Rpb24oKXt0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSx7Y2FwdHVyZTohMH0pLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXIpLHMuZW5hYmxlRHJhZygpfSxXci5wcm90b3R5cGUuX2RlYWN0aXZhdGU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LGRlbGV0ZSB0aGlzLl9wcmV2aW91c1Bvc30sV3IucHJvdG90eXBlLl9pbmVydGlhbFJvdGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2ZpcmVFdmVudCgicm90YXRlZW5kIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgcj10aGlzLl9tYXAsbj1yLmdldEJlYXJpbmcoKSxpPXRoaXMuX2luZXJ0aWEsYT1mdW5jdGlvbigpe01hdGguYWJzKG4pPGUuX2JlYXJpbmdTbmFwP3IucmVzZXROb3J0aCh7bm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OnR9KTplLl9maXJlRXZlbnQoIm1vdmVlbmQiLHQpLGUuX3BpdGNoV2l0aFJvdGF0ZSYmZS5fZmlyZUV2ZW50KCJwaXRjaGVuZCIsdCl9O2lmKGkubGVuZ3RoPDIpYSgpO2Vsc2V7dmFyIG89aVswXSxzPWlbaS5sZW5ndGgtMV0sbD1pW2kubGVuZ3RoLTJdLGM9ci5fbm9ybWFsaXplQmVhcmluZyhuLGxbMV0pLHU9c1sxXS1vWzFdLGY9dTwwPy0xOjEsaD0oc1swXS1vWzBdKS8xZTM7aWYoMCE9PXUmJjAhPT1oKXt2YXIgcD1NYXRoLmFicyh1KiguMjUvaCkpO3A+MTgwJiYocD0xODApO3ZhciBkPXAvMTgwO2MrPWYqcCooZC8yKSxNYXRoLmFicyhyLl9ub3JtYWxpemVCZWFyaW5nKGMsMCkpPHRoaXMuX2JlYXJpbmdTbmFwJiYoYz1yLl9ub3JtYWxpemVCZWFyaW5nKDAsYykpLHIucm90YXRlVG8oYyx7ZHVyYXRpb246MWUzKmQsZWFzaW5nOllyLG5vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSl9ZWxzZSBhKCl9fSxXci5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHI/e29yaWdpbmFsRXZlbnQ6cn06e30pKX0sV3IucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MCYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgWHI9dC5iZXppZXIoMCwwLC4zLDEpLFpyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fc3RhdGU9ImRpc2FibGVkIix0LmJpbmRBbGwoWyJfb25Nb3ZlIiwiX29uTW91c2VVcCIsIl9vblRvdWNoRW5kIiwiX29uQmx1ciIsIl9vbkRyYWdGcmFtZSJdLHRoaXMpfTtaci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuImRpc2FibGVkIiE9PXRoaXMuX3N0YXRlfSxaci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4iYWN0aXZlIj09PXRoaXMuX3N0YXRlfSxaci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXRvdWNoLWRyYWctcGFuIiksdGhpcy5fc3RhdGU9ImVuYWJsZWQiKX0sWnIucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXN3aXRjaCh0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10b3VjaC1kcmFnLXBhbiIpLHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImRpc2FibGVkIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KCJkcmFnZW5kIiksdGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIik7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZGlzYWJsZWQiLHRoaXMuX3VuYmluZCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc3RhdGU9ImRpc2FibGVkIn19LFpyLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXsiZW5hYmxlZCI9PT10aGlzLl9zdGF0ZSYmKGUuY3RybEtleXx8MCE9PXMubW91c2VCdXR0b24oZSl8fChzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSx7Y2FwdHVyZTohMH0pLHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCksdGhpcy5fc3RhcnQoZSkpKX0sWnIucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbihlKXsiZW5hYmxlZCI9PT10aGlzLl9zdGF0ZSYmKGUudG91Y2hlcy5sZW5ndGg+MXx8KHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCksdGhpcy5fc3RhcnQoZSkpKX0sWnIucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbihlKXt0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fb25CbHVyKSx0aGlzLl9zdGF0ZT0icGVuZGluZyIsdGhpcy5fcHJldmlvdXNQb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCxlKSx0aGlzLl9pbmVydGlhPVtbYS5ub3coKSx0aGlzLl9wcmV2aW91c1Bvc11dfSxaci5wcm90b3R5cGUuX29uTW92ZT1mdW5jdGlvbih0KXt0aGlzLl9sYXN0TW92ZUV2ZW50PXQsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3Bvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLHQpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbYS5ub3coKSx0aGlzLl9wb3NdKSwicGVuZGluZyI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPSJhY3RpdmUiLHRoaXMuX2ZpcmVFdmVudCgiZHJhZ3N0YXJ0Iix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmVzdGFydCIsdCkpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uRHJhZ0ZyYW1lKSl9LFpyLnByb3RvdHlwZS5fb25EcmFnRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkPW51bGw7dmFyIHQ9dGhpcy5fbGFzdE1vdmVFdmVudDtpZih0KXt2YXIgZT10aGlzLl9tYXAudHJhbnNmb3JtO2Uuc2V0TG9jYXRpb25BdFBvaW50KGUucG9pbnRMb2NhdGlvbih0aGlzLl9wcmV2aW91c1BvcyksdGhpcy5fcG9zKSx0aGlzLl9maXJlRXZlbnQoImRyYWciLHQpLHRoaXMuX2ZpcmVFdmVudCgibW92ZSIsdCksdGhpcy5fcHJldmlvdXNQb3M9dGhpcy5fcG9zLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50fX0sWnIucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24odCl7aWYoMD09PXMubW91c2VCdXR0b24odCkpc3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHMuc3VwcHJlc3NDbGljaygpLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFBhbih0KTticmVhaztjYXNlInBlbmRpbmciOnRoaXMuX3N0YXRlPSJlbmFibGVkIix0aGlzLl91bmJpbmQoKX19LFpyLnByb3RvdHlwZS5fb25Ub3VjaEVuZD1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2UiYWN0aXZlIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIsdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2luZXJ0aWFsUGFuKHQpO2JyZWFrO2Nhc2UicGVuZGluZyI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpfX0sWnIucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoImRyYWdlbmQiLHQpLHRoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIsdCk7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIsdGhpcy5fdW5iaW5kKCl9fSxaci5wcm90b3R5cGUuX3VuYmluZD1mdW5jdGlvbigpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCwibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITB9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQsImJsdXIiLHRoaXMuX29uQmx1cil9LFpyLnByb3RvdHlwZS5fZGVhY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuX2ZyYW1lSWQmJih0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQsZGVsZXRlIHRoaXMuX3ByZXZpb3VzUG9zLGRlbGV0ZSB0aGlzLl9wb3N9LFpyLnByb3RvdHlwZS5faW5lcnRpYWxQYW49ZnVuY3Rpb24odCl7dGhpcy5fZmlyZUV2ZW50KCJkcmFnZW5kIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgZT10aGlzLl9pbmVydGlhO2lmKGUubGVuZ3RoPDIpdGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIix0KTtlbHNle3ZhciByPWVbZS5sZW5ndGgtMV0sbj1lWzBdLGk9clsxXS5zdWIoblsxXSksYT0oclswXS1uWzBdKS8xZTM7aWYoMD09PWF8fHJbMV0uZXF1YWxzKG5bMV0pKXRoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIsdCk7ZWxzZXt2YXIgbz1pLm11bHQoLjMvYSkscz1vLm1hZygpO3M+MTQwMCYmKHM9MTQwMCxvLl91bml0KCkuX211bHQocykpO3ZhciBsPXMvNzUwLGM9by5tdWx0KC1sLzIpO3RoaXMuX21hcC5wYW5CeShjLHtkdXJhdGlvbjoxZTMqbCxlYXNpbmc6WHIsbm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OnR9KX19fSxaci5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHI/e29yaWdpbmFsRXZlbnQ6cn06e30pKX0sWnIucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MCYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgJHI9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0LmJpbmRBbGwoWyJfb25LZXlEb3duIl0sdGhpcyl9O2Z1bmN0aW9uIEpyKHQpe3JldHVybiB0KigyLXQpfSRyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LCRyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLCExKSx0aGlzLl9lbmFibGVkPSEwKX0sJHIucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKSx0aGlzLl9lbmFibGVkPSExKX0sJHIucHJvdG90eXBlLl9vbktleURvd249ZnVuY3Rpb24odCl7aWYoISh0LmFsdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXkpKXt2YXIgZT0wLHI9MCxuPTAsaT0wLGE9MDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDYxOmNhc2UgMTA3OmNhc2UgMTcxOmNhc2UgMTg3OmU9MTticmVhaztjYXNlIDE4OTpjYXNlIDEwOTpjYXNlIDE3MzplPS0xO2JyZWFrO2Nhc2UgMzc6dC5zaGlmdEtleT9yPS0xOih0LnByZXZlbnREZWZhdWx0KCksaT0tMSk7YnJlYWs7Y2FzZSAzOTp0LnNoaWZ0S2V5P3I9MToodC5wcmV2ZW50RGVmYXVsdCgpLGk9MSk7YnJlYWs7Y2FzZSAzODp0LnNoaWZ0S2V5P249MToodC5wcmV2ZW50RGVmYXVsdCgpLGE9LTEpO2JyZWFrO2Nhc2UgNDA6dC5zaGlmdEtleT9uPS0xOihhPTEsdC5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0OnJldHVybn12YXIgbz10aGlzLl9tYXAscz1vLmdldFpvb20oKSxsPXtkdXJhdGlvbjozMDAsZGVsYXlFbmRFdmVudHM6NTAwLGVhc2luZzpKcix6b29tOmU/TWF0aC5yb3VuZChzKStlKih0LnNoaWZ0S2V5PzI6MSk6cyxiZWFyaW5nOm8uZ2V0QmVhcmluZygpKzE1KnIscGl0Y2g6by5nZXRQaXRjaCgpKzEwKm4sb2Zmc2V0OlsxMDAqLWksMTAwKi1hXSxjZW50ZXI6by5nZXRDZW50ZXIoKX07by5lYXNlVG8obCx7b3JpZ2luYWxFdmVudDp0fSl9fTt2YXIgS3I9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdC5iaW5kQWxsKFsiX29uRGJsQ2xpY2siLCJfb25ab29tRW5kIl0sdGhpcyl9O0tyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LEtyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfSxLci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VuYWJsZWQ9ITApfSxLci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbmFibGVkPSExKX0sS3IucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuaXNFbmFibGVkKCkmJih0LnBvaW50cy5sZW5ndGg+MXx8KHRoaXMuX3RhcHBlZD8oY2xlYXJUaW1lb3V0KHRoaXMuX3RhcHBlZCksdGhpcy5fdGFwcGVkPW51bGwsdGhpcy5fem9vbSh0KSk6dGhpcy5fdGFwcGVkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl90YXBwZWQ9bnVsbH0sMzAwKSkpfSxLci5wcm90b3R5cGUub25EYmxDbGljaz1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpJiYodC5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCksdGhpcy5fem9vbSh0KSl9LEtyLnByb3RvdHlwZS5fem9vbT1mdW5jdGlvbih0KXt0aGlzLl9hY3RpdmU9ITAsdGhpcy5fbWFwLm9uKCJ6b29tZW5kIix0aGlzLl9vblpvb21FbmQpLHRoaXMuX21hcC56b29tVG8odGhpcy5fbWFwLmdldFpvb20oKSsodC5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5Py0xOjEpLHthcm91bmQ6dC5sbmdMYXR9LHQpfSxLci5wcm90b3R5cGUuX29uWm9vbUVuZD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9tYXAub2ZmKCJ6b29tZW5kIix0aGlzLl9vblpvb21FbmQpfTt2YXIgUXI9dC5iZXppZXIoMCwwLC4xNSwxKSx0bj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHQuYmluZEFsbChbIl9vbk1vdmUiLCJfb25FbmQiLCJfb25Ub3VjaEZyYW1lIl0sdGhpcyl9O3RuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LHRuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlIiksdGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9hcm91bmRDZW50ZXI9ISF0JiYiY2VudGVyIj09PXQuYXJvdW5kKX0sdG4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdG91Y2gtem9vbS1yb3RhdGUiKSx0aGlzLl9lbmFibGVkPSExKX0sdG4ucHJvdG90eXBlLmRpc2FibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITB9LHRuLnByb3RvdHlwZS5lbmFibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITF9LHRuLnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNFbmFibGVkKCkmJjI9PT1lLnRvdWNoZXMubGVuZ3RoKXt2YXIgcj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUudG91Y2hlc1swXSksbj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUudG91Y2hlc1sxXSk7dGhpcy5fc3RhcnRWZWM9ci5zdWIobiksdGhpcy5fZ2VzdHVyZUludGVudD12b2lkIDAsdGhpcy5faW5lcnRpYT1bXSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSx7cGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsInRvdWNoZW5kIix0aGlzLl9vbkVuZCl9fSx0bi5wcm90b3R5cGUuX2dldFRvdWNoRXZlbnREYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXMubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzBdKSxyPXMubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzFdKSxuPWUuc3ViKHIpO3JldHVybnt2ZWM6bixjZW50ZXI6ZS5hZGQocikuZGl2KDIpLHNjYWxlOm4ubWFnKCkvdGhpcy5fc3RhcnRWZWMubWFnKCksYmVhcmluZzp0aGlzLl9yb3RhdGlvbkRpc2FibGVkPzA6MTgwKm4uYW5nbGVXaXRoKHRoaXMuX3N0YXJ0VmVjKS9NYXRoLlBJfX0sdG4ucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oZSl7aWYoMj09PWUudG91Y2hlcy5sZW5ndGgpe3ZhciByPXRoaXMuX2dldFRvdWNoRXZlbnREYXRhKGUpLG49ci52ZWMsaT1yLnNjYWxlLGE9ci5iZWFyaW5nO2lmKCF0aGlzLl9nZXN0dXJlSW50ZW50KXt2YXIgbz1NYXRoLmFicygxLWkpPi4xNTtNYXRoLmFicyhhKT4xMD90aGlzLl9nZXN0dXJlSW50ZW50PSJyb3RhdGUiOm8mJih0aGlzLl9nZXN0dXJlSW50ZW50PSJ6b29tIiksdGhpcy5fZ2VzdHVyZUludGVudCYmKHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KHRoaXMuX2dlc3R1cmVJbnRlbnQrInN0YXJ0Iix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLHtvcmlnaW5hbEV2ZW50OmV9KSksdGhpcy5fc3RhcnRWZWM9bil9dGhpcy5fbGFzdFRvdWNoRXZlbnQ9ZSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblRvdWNoRnJhbWUpKSxlLnByZXZlbnREZWZhdWx0KCl9fSx0bi5wcm90b3R5cGUuX29uVG91Y2hGcmFtZT1mdW5jdGlvbigpe3RoaXMuX2ZyYW1lSWQ9bnVsbDt2YXIgZT10aGlzLl9nZXN0dXJlSW50ZW50O2lmKGUpe3ZhciByPXRoaXMuX21hcC50cmFuc2Zvcm07dGhpcy5fc3RhcnRTY2FsZXx8KHRoaXMuX3N0YXJ0U2NhbGU9ci5zY2FsZSx0aGlzLl9zdGFydEJlYXJpbmc9ci5iZWFyaW5nKTt2YXIgbj10aGlzLl9nZXRUb3VjaEV2ZW50RGF0YSh0aGlzLl9sYXN0VG91Y2hFdmVudCksaT1uLmNlbnRlcixvPW4uYmVhcmluZyxzPW4uc2NhbGUsbD1yLnBvaW50TG9jYXRpb24oaSksYz1yLmxvY2F0aW9uUG9pbnQobCk7InJvdGF0ZSI9PT1lJiYoci5iZWFyaW5nPXRoaXMuX3N0YXJ0QmVhcmluZytvKSxyLnpvb209ci5zY2FsZVpvb20odGhpcy5fc3RhcnRTY2FsZSpzKSxyLnNldExvY2F0aW9uQXRQb2ludChsLGMpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFRvdWNoRXZlbnR9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RUb3VjaEV2ZW50fSkpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbYS5ub3coKSxzLGldKX19LHRuLnByb3RvdHlwZS5fb25FbmQ9ZnVuY3Rpb24oZSl7cy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCwidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUse3Bhc3NpdmU6ITF9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25FbmQpO3ZhciByPXRoaXMuX2dlc3R1cmVJbnRlbnQsbj10aGlzLl9zdGFydFNjYWxlO2lmKHRoaXMuX2ZyYW1lSWQmJih0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksZGVsZXRlIHRoaXMuX2dlc3R1cmVJbnRlbnQsZGVsZXRlIHRoaXMuX3N0YXJ0U2NhbGUsZGVsZXRlIHRoaXMuX3N0YXJ0QmVhcmluZyxkZWxldGUgdGhpcy5fbGFzdFRvdWNoRXZlbnQscil7dGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQocisiZW5kIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBpPXRoaXMuX2luZXJ0aWEsYT10aGlzLl9tYXA7aWYoaS5sZW5ndGg8MilhLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OmV9KTtlbHNle3ZhciBvPWlbaS5sZW5ndGgtMV0sbD1pWzBdLGM9YS50cmFuc2Zvcm0uc2NhbGVab29tKG4qb1sxXSksdT1hLnRyYW5zZm9ybS5zY2FsZVpvb20obipsWzFdKSxmPWMtdSxoPShvWzBdLWxbMF0pLzFlMyxwPW9bMl07aWYoMCE9PWgmJmMhPT11KXt2YXIgZD0uMTUqZi9oO01hdGguYWJzKGQpPjIuNSYmKGQ9ZD4wPzIuNTotMi41KTt2YXIgZz0xZTMqTWF0aC5hYnMoZC8oMTIqLjE1KSksdj1jK2QqZy8yZTM7djwwJiYodj0wKSxhLmVhc2VUbyh7em9vbTp2LGR1cmF0aW9uOmcsZWFzaW5nOlFyLGFyb3VuZDp0aGlzLl9hcm91bmRDZW50ZXI/YS5nZXRDZW50ZXIoKTphLnVucHJvamVjdChwKSxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6ZX0pfWVsc2UgYS5zbmFwVG9Ob3J0aCh7fSx7b3JpZ2luYWxFdmVudDplfSl9fX0sdG4ucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MiYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgZW49e3Njcm9sbFpvb206SHIsYm94Wm9vbTpHcixkcmFnUm90YXRlOldyLGRyYWdQYW46WnIsa2V5Ym9hcmQ6JHIsZG91YmxlQ2xpY2tab29tOktyLHRvdWNoWm9vbVJvdGF0ZTp0bn0scm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4pe2UuY2FsbCh0aGlzKSx0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLnRyYW5zZm9ybT1yLHRoaXMuX2JlYXJpbmdTbmFwPW4uYmVhcmluZ1NuYXAsdC5iaW5kQWxsKFsiX3JlbmRlckZyYW1lQ2FsbGJhY2siXSx0aGlzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmNlbnRlcn0sci5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtjZW50ZXI6dH0sZSl9LHIucHJvdG90eXBlLnBhbkJ5PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT10LmRlZmF1bHQkMS5jb252ZXJ0KGUpLm11bHQoLTEpLHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLHQuZXh0ZW5kKHtvZmZzZXQ6ZX0sciksbil9LHIucHJvdG90eXBlLnBhblRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2NlbnRlcjplfSxyKSxuKX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS56b29tfSxyLnByb3RvdHlwZS5zZXRab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHt6b29tOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHt6b29tOmV9LHIpLG4pfSxyLnByb3RvdHlwZS56b29tSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkrMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21PdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCktMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldEJlYXJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZ30sci5wcm90b3R5cGUuc2V0QmVhcmluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7YmVhcmluZzp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5yb3RhdGVUbz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtiZWFyaW5nOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5yZXNldE5vcnRoPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMucm90YXRlVG8oMCx0LmV4dGVuZCh7ZHVyYXRpb246MWUzfSxlKSxyKSx0aGlzfSxyLnByb3RvdHlwZS5zbmFwVG9Ob3J0aD1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0aGlzLmdldEJlYXJpbmcoKSk8dGhpcy5fYmVhcmluZ1NuYXA/dGhpcy5yZXNldE5vcnRoKHQsZSk6dGhpc30sci5wcm90b3R5cGUuZ2V0UGl0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGl0Y2h9LHIucHJvdG90eXBlLnNldFBpdGNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtwaXRjaDp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5maXRCb3VuZHM9ZnVuY3Rpb24oZSxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2Yocj10LmV4dGVuZCh7cGFkZGluZzp7dG9wOjAsYm90dG9tOjAscmlnaHQ6MCxsZWZ0OjB9LG9mZnNldDpbMCwwXSxtYXhab29tOnRoaXMudHJhbnNmb3JtLm1heFpvb219LHIpKS5wYWRkaW5nKXt2YXIgaT1yLnBhZGRpbmc7ci5wYWRkaW5nPXt0b3A6aSxib3R0b206aSxyaWdodDppLGxlZnQ6aX19aWYoIXQuZGVmYXVsdCQxMChPYmplY3Qua2V5cyhyLnBhZGRpbmcpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9KSxbImJvdHRvbSIsImxlZnQiLCJyaWdodCIsInRvcCJdKSlyZXR1cm4gdC53YXJuT25jZSgib3B0aW9ucy5wYWRkaW5nIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIsIG9yIGFuIE9iamVjdCB3aXRoIGtleXMgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0JywgJ3RvcCciKSx0aGlzO2U9WS5jb252ZXJ0KGUpO3ZhciBhPVsoci5wYWRkaW5nLmxlZnQtci5wYWRkaW5nLnJpZ2h0KS8yLChyLnBhZGRpbmcudG9wLXIucGFkZGluZy5ib3R0b20pLzJdLG89TWF0aC5taW4oci5wYWRkaW5nLnJpZ2h0LHIucGFkZGluZy5sZWZ0KSxzPU1hdGgubWluKHIucGFkZGluZy50b3Asci5wYWRkaW5nLmJvdHRvbSk7ci5vZmZzZXQ9W3Iub2Zmc2V0WzBdK2FbMF0sci5vZmZzZXRbMV0rYVsxXV07dmFyIGw9dC5kZWZhdWx0JDEuY29udmVydChyLm9mZnNldCksYz10aGlzLnRyYW5zZm9ybSx1PWMucHJvamVjdChlLmdldE5vcnRoV2VzdCgpKSxmPWMucHJvamVjdChlLmdldFNvdXRoRWFzdCgpKSxoPWYuc3ViKHUpLHA9KGMud2lkdGgtMipvLTIqTWF0aC5hYnMobC54KSkvaC54LGQ9KGMuaGVpZ2h0LTIqcy0yKk1hdGguYWJzKGwueSkpL2gueTtyZXR1cm4gZDwwfHxwPDA/KHQud2Fybk9uY2UoIk1hcCBjYW5ub3QgZml0IHdpdGhpbiBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLCBwYWRkaW5nLCBhbmQvb3Igb2Zmc2V0LiIpLHRoaXMpOihyLmNlbnRlcj1jLnVucHJvamVjdCh1LmFkZChmKS5kaXYoMikpLHIuem9vbT1NYXRoLm1pbihjLnNjYWxlWm9vbShjLnNjYWxlKk1hdGgubWluKHAsZCkpLHIubWF4Wm9vbSksci5iZWFyaW5nPTAsci5saW5lYXI/dGhpcy5lYXNlVG8ocixuKTp0aGlzLmZseVRvKHIsbikpfSxyLnByb3RvdHlwZS5qdW1wVG89ZnVuY3Rpb24oZSxyKXt0aGlzLnN0b3AoKTt2YXIgbj10aGlzLnRyYW5zZm9ybSxpPSExLGE9ITEsbz0hMTtyZXR1cm4iem9vbSJpbiBlJiZuLnpvb20hPT0rZS56b29tJiYoaT0hMCxuLnpvb209K2Uuem9vbSksdm9pZCAwIT09ZS5jZW50ZXImJihuLmNlbnRlcj1HLmNvbnZlcnQoZS5jZW50ZXIpKSwiYmVhcmluZyJpbiBlJiZuLmJlYXJpbmchPT0rZS5iZWFyaW5nJiYoYT0hMCxuLmJlYXJpbmc9K2UuYmVhcmluZyksInBpdGNoImluIGUmJm4ucGl0Y2ghPT0rZS5waXRjaCYmKG89ITAsbi5waXRjaD0rZS5waXRjaCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIixyKSksaSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJ6b29tIixyKSkuZmlyZShuZXcgdC5FdmVudCgiem9vbWVuZCIscikpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGUiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVlbmQiLHIpKSxvJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaCIscikpLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoZW5kIixyKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIixyKSl9LHIucHJvdG90eXBlLmVhc2VUbz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5zdG9wKCksITE9PT0oZT10LmV4dGVuZCh7b2Zmc2V0OlswLDBdLGR1cmF0aW9uOjUwMCxlYXNpbmc6dC5lYXNlfSxlKSkuYW5pbWF0ZSYmKGUuZHVyYXRpb249MCk7dmFyIGk9dGhpcy50cmFuc2Zvcm0sYT10aGlzLmdldFpvb20oKSxvPXRoaXMuZ2V0QmVhcmluZygpLHM9dGhpcy5nZXRQaXRjaCgpLGw9Inpvb20iaW4gZT8rZS56b29tOmEsYz0iYmVhcmluZyJpbiBlP3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcoZS5iZWFyaW5nLG8pOm8sdT0icGl0Y2giaW4gZT8rZS5waXRjaDpzLGY9aS5jZW50ZXJQb2ludC5hZGQodC5kZWZhdWx0JDEuY29udmVydChlLm9mZnNldCkpLGg9aS5wb2ludExvY2F0aW9uKGYpLHA9Ry5jb252ZXJ0KGUuY2VudGVyfHxoKTt0aGlzLl9ub3JtYWxpemVDZW50ZXIocCk7dmFyIGQsZyx2PWkucHJvamVjdChoKSxtPWkucHJvamVjdChwKS5zdWIodikseT1pLnpvb21TY2FsZShsLWEpO3JldHVybiBlLmFyb3VuZCYmKGQ9Ry5jb252ZXJ0KGUuYXJvdW5kKSxnPWkubG9jYXRpb25Qb2ludChkKSksdGhpcy5fem9vbWluZz1sIT09YSx0aGlzLl9yb3RhdGluZz1vIT09Yyx0aGlzLl9waXRjaGluZz11IT09cyx0aGlzLl9wcmVwYXJlRWFzZShyLGUubm9Nb3ZlU3RhcnQpLGNsZWFyVGltZW91dCh0aGlzLl9lYXNlRW5kVGltZW91dElEKSx0aGlzLl9lYXNlKGZ1bmN0aW9uKGUpe2lmKG4uX3pvb21pbmcmJihpLnpvb209dC5udW1iZXIoYSxsLGUpKSxuLl9yb3RhdGluZyYmKGkuYmVhcmluZz10Lm51bWJlcihvLGMsZSkpLG4uX3BpdGNoaW5nJiYoaS5waXRjaD10Lm51bWJlcihzLHUsZSkpLGQpaS5zZXRMb2NhdGlvbkF0UG9pbnQoZCxnKTtlbHNle3ZhciBoPWkuem9vbVNjYWxlKGkuem9vbS1hKSxwPWw+YT9NYXRoLm1pbigyLHkpOk1hdGgubWF4KC41LHkpLHg9TWF0aC5wb3cocCwxLWUpLGI9aS51bnByb2plY3Qodi5hZGQobS5tdWx0KGUqeCkpLm11bHQoaCkpO2kuc2V0TG9jYXRpb25BdFBvaW50KGkucmVuZGVyV29ybGRDb3BpZXM/Yi53cmFwKCk6YixmKX1uLl9maXJlTW92ZUV2ZW50cyhyKX0sZnVuY3Rpb24oKXtlLmRlbGF5RW5kRXZlbnRzP24uX2Vhc2VFbmRUaW1lb3V0SUQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9hZnRlckVhc2Uocil9LGUuZGVsYXlFbmRFdmVudHMpOm4uX2FmdGVyRWFzZShyKX0sZSksdGhpc30sci5wcm90b3R5cGUuX3ByZXBhcmVFYXNlPWZ1bmN0aW9uKGUscil7dGhpcy5fbW92aW5nPSEwLHJ8fHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixlKSksdGhpcy5fem9vbWluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tc3RhcnQiLGUpKSx0aGlzLl9yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVzdGFydCIsZSkpLHRoaXMuX3BpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoc3RhcnQiLGUpKX0sci5wcm90b3R5cGUuX2ZpcmVNb3ZlRXZlbnRzPWZ1bmN0aW9uKGUpe3RoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpLHRoaXMuX3pvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbSIsZSkpLHRoaXMuX3JvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZSIsZSkpLHRoaXMuX3BpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoIixlKSl9LHIucHJvdG90eXBlLl9hZnRlckVhc2U9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fem9vbWluZyxuPXRoaXMuX3JvdGF0aW5nLGk9dGhpcy5fcGl0Y2hpbmc7dGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy5fcm90YXRpbmc9ITEsdGhpcy5fcGl0Y2hpbmc9ITEsciYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tZW5kIixlKSksbiYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVlbmQiLGUpKSxpJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoZW5kIixlKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIixlKSl9LHIucHJvdG90eXBlLmZseVRvPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt0aGlzLnN0b3AoKSxlPXQuZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sc3BlZWQ6MS4yLGN1cnZlOjEuNDIsZWFzaW5nOnQuZWFzZX0sZSk7dmFyIGk9dGhpcy50cmFuc2Zvcm0sYT10aGlzLmdldFpvb20oKSxvPXRoaXMuZ2V0QmVhcmluZygpLHM9dGhpcy5nZXRQaXRjaCgpLGw9Inpvb20iaW4gZT90LmNsYW1wKCtlLnpvb20saS5taW5ab29tLGkubWF4Wm9vbSk6YSxjPSJiZWFyaW5nImluIGU/dGhpcy5fbm9ybWFsaXplQmVhcmluZyhlLmJlYXJpbmcsbyk6byx1PSJwaXRjaCJpbiBlPytlLnBpdGNoOnMsZj1pLnpvb21TY2FsZShsLWEpLGg9aS5jZW50ZXJQb2ludC5hZGQodC5kZWZhdWx0JDEuY29udmVydChlLm9mZnNldCkpLHA9aS5wb2ludExvY2F0aW9uKGgpLGQ9Ry5jb252ZXJ0KGUuY2VudGVyfHxwKTt0aGlzLl9ub3JtYWxpemVDZW50ZXIoZCk7dmFyIGc9aS5wcm9qZWN0KHApLHY9aS5wcm9qZWN0KGQpLnN1YihnKSxtPWUuY3VydmUseT1NYXRoLm1heChpLndpZHRoLGkuaGVpZ2h0KSx4PXkvZixiPXYubWFnKCk7aWYoIm1pblpvb20iaW4gZSl7dmFyIF89dC5jbGFtcChNYXRoLm1pbihlLm1pblpvb20sYSxsKSxpLm1pblpvb20saS5tYXhab29tKSx3PXkvaS56b29tU2NhbGUoXy1hKTttPU1hdGguc3FydCh3L2IqMil9dmFyIGs9bSptO2Z1bmN0aW9uIFQodCl7dmFyIGU9KHgqeC15KnkrKHQ/LTE6MSkqayprKmIqYikvKDIqKHQ/eDp5KSprKmIpO3JldHVybiBNYXRoLmxvZyhNYXRoLnNxcnQoZSplKzEpLWUpfWZ1bmN0aW9uIEEodCl7cmV0dXJuKE1hdGguZXhwKHQpLU1hdGguZXhwKC10KSkvMn1mdW5jdGlvbiBNKHQpe3JldHVybihNYXRoLmV4cCh0KStNYXRoLmV4cCgtdCkpLzJ9dmFyIFM9VCgwKSxFPWZ1bmN0aW9uKHQpe3JldHVybiBNKFMpL00oUyttKnQpfSxDPWZ1bmN0aW9uKHQpe3JldHVybiB5KigoTShTKSooQShlPVMrbSp0KS9NKGUpKS1BKFMpKS9rKS9iO3ZhciBlfSxMPShUKDEpLVMpL207aWYoTWF0aC5hYnMoYik8MWUtNnx8IWlzRmluaXRlKEwpKXtpZihNYXRoLmFicyh5LXgpPDFlLTYpcmV0dXJuIHRoaXMuZWFzZVRvKGUscik7dmFyIHo9eDx5Py0xOjE7TD1NYXRoLmFicyhNYXRoLmxvZyh4L3kpKS9tLEM9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sRT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5leHAoeiptKnQpfX1pZigiZHVyYXRpb24iaW4gZSllLmR1cmF0aW9uPStlLmR1cmF0aW9uO2Vsc2V7dmFyIE89InNjcmVlblNwZWVkImluIGU/K2Uuc2NyZWVuU3BlZWQvbTorZS5zcGVlZDtlLmR1cmF0aW9uPTFlMypML099cmV0dXJuIGUubWF4RHVyYXRpb24mJmUuZHVyYXRpb24+ZS5tYXhEdXJhdGlvbiYmKGUuZHVyYXRpb249MCksdGhpcy5fem9vbWluZz0hMCx0aGlzLl9yb3RhdGluZz1vIT09Yyx0aGlzLl9waXRjaGluZz11IT09cyx0aGlzLl9wcmVwYXJlRWFzZShyLCExKSx0aGlzLl9lYXNlKGZ1bmN0aW9uKGUpe3ZhciBsPWUqTCxmPTEvRShsKTtpLnpvb209YStpLnNjYWxlWm9vbShmKSxuLl9yb3RhdGluZyYmKGkuYmVhcmluZz10Lm51bWJlcihvLGMsZSkpLG4uX3BpdGNoaW5nJiYoaS5waXRjaD10Lm51bWJlcihzLHUsZSkpO3ZhciBwPWkudW5wcm9qZWN0KGcuYWRkKHYubXVsdChDKGwpKSkubXVsdChmKSk7aS5zZXRMb2NhdGlvbkF0UG9pbnQoaS5yZW5kZXJXb3JsZENvcGllcz9wLndyYXAoKTpwLGgpLG4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSxmdW5jdGlvbigpe3JldHVybiBuLl9hZnRlckVhc2Uocil9LGUpLHRoaXN9LHIucHJvdG90eXBlLmlzRWFzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lYXNlRnJhbWVJZH0sci5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe2lmKHRoaXMuX2Vhc2VGcmFtZUlkJiYodGhpcy5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZWFzZUZyYW1lSWQpLGRlbGV0ZSB0aGlzLl9lYXNlRnJhbWVJZCxkZWxldGUgdGhpcy5fb25FYXNlRnJhbWUpLHRoaXMuX29uRWFzZUVuZCl7dmFyIHQ9dGhpcy5fb25FYXNlRW5kO2RlbGV0ZSB0aGlzLl9vbkVhc2VFbmQsdC5jYWxsKHRoaXMpfXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS5fZWFzZT1mdW5jdGlvbih0LGUscil7ITE9PT1yLmFuaW1hdGV8fDA9PT1yLmR1cmF0aW9uPyh0KDEpLGUoKSk6KHRoaXMuX2Vhc2VTdGFydD1hLm5vdygpLHRoaXMuX2Vhc2VPcHRpb25zPXIsdGhpcy5fb25FYXNlRnJhbWU9dCx0aGlzLl9vbkVhc2VFbmQ9ZSx0aGlzLl9lYXNlRnJhbWVJZD10aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjaykpfSxyLnByb3RvdHlwZS5fcmVuZGVyRnJhbWVDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciB0PU1hdGgubWluKChhLm5vdygpLXRoaXMuX2Vhc2VTdGFydCkvdGhpcy5fZWFzZU9wdGlvbnMuZHVyYXRpb24sMSk7dGhpcy5fb25FYXNlRnJhbWUodGhpcy5fZWFzZU9wdGlvbnMuZWFzaW5nKHQpKSx0PDE/dGhpcy5fZWFzZUZyYW1lSWQ9dGhpcy5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2FsbGJhY2spOnRoaXMuc3RvcCgpfSxyLnByb3RvdHlwZS5fbm9ybWFsaXplQmVhcmluZz1mdW5jdGlvbihlLHIpe2U9dC53cmFwKGUsLTE4MCwxODApO3ZhciBuPU1hdGguYWJzKGUtcik7cmV0dXJuIE1hdGguYWJzKGUtMzYwLXIpPG4mJihlLT0zNjApLE1hdGguYWJzKGUrMzYwLXIpPG4mJihlKz0zNjApLGV9LHIucHJvdG90eXBlLl9ub3JtYWxpemVDZW50ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50cmFuc2Zvcm07aWYoZS5yZW5kZXJXb3JsZENvcGllcyYmIWUubG5nUmFuZ2Upe3ZhciByPXQubG5nLWUuY2VudGVyLmxuZzt0LmxuZys9cj4xODA/LTM2MDpyPC0xODA/MzYwOjB9fSxyfSh0LkV2ZW50ZWQpLG5uPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLm9wdGlvbnM9ZSx0LmJpbmRBbGwoWyJfdXBkYXRlRWRpdExpbmsiLCJfdXBkYXRlRGF0YSIsIl91cGRhdGVDb21wYWN0Il0sdGhpcyl9O25uLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4iYm90dG9tLXJpZ2h0In0sbm4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmNvbXBhY3Q7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWF0dHJpYiIpLGUmJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jb21wYWN0IiksdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCksdGhpcy5fdXBkYXRlRWRpdExpbmsoKSx0aGlzLl9tYXAub24oInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmspLHZvaWQgMD09PWUmJih0aGlzLl9tYXAub24oInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fdXBkYXRlQ29tcGFjdCgpKSx0aGlzLl9jb250YWluZXJ9LG5uLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9mZigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmspLHRoaXMuX21hcC5vZmYoInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fbWFwPXZvaWQgMH0sbm4ucHJvdG90eXBlLl91cGRhdGVFZGl0TGluaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VkaXRMaW5rO3R8fCh0PXRoaXMuX2VkaXRMaW5rPXRoaXMuX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubWFwYm94LWltcHJvdmUtbWFwIikpO3ZhciBlPVt7a2V5OiJvd25lciIsdmFsdWU6dGhpcy5zdHlsZU93bmVyfSx7a2V5OiJpZCIsdmFsdWU6dGhpcy5zdHlsZUlkfSx7a2V5OiJhY2Nlc3NfdG9rZW4iLHZhbHVlOnYuQUNDRVNTX1RPS0VOfV07aWYodCl7dmFyIHI9ZS5yZWR1Y2UoZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnZhbHVlJiYodCs9ci5rZXkrIj0iK3IudmFsdWUrKG48ZS5sZW5ndGgtMT8iJiI6IiIpKSx0fSwiPyIpO3QuaHJlZj0iaHR0cHM6Ly93d3cubWFwYm94LmNvbS9mZWVkYmFjay8iK3IrKHRoaXMuX21hcC5faGFzaD90aGlzLl9tYXAuX2hhc2guZ2V0SGFzaFN0cmluZyghMCk6IiIpfX0sbm4ucHJvdG90eXBlLl91cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3QmJiJtZXRhZGF0YSI9PT10LnNvdXJjZURhdGFUeXBlJiYodGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCksdGhpcy5fdXBkYXRlRWRpdExpbmsoKSl9LG5uLnByb3RvdHlwZS5fdXBkYXRlQXR0cmlidXRpb25zPWZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLnN0eWxlKXt2YXIgdD1bXTtpZih0aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldCl7dmFyIGU9dGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQ7dGhpcy5zdHlsZU93bmVyPWUub3duZXIsdGhpcy5zdHlsZUlkPWUuaWR9dmFyIHI9dGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIG4gaW4gcil7dmFyIGk9cltuXS5nZXRTb3VyY2UoKTtpLmF0dHJpYnV0aW9uJiZ0LmluZGV4T2YoaS5hdHRyaWJ1dGlvbik8MCYmdC5wdXNoKGkuYXR0cmlidXRpb24pfXQuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aC1lLmxlbmd0aH0pLCh0PXQuZmlsdGVyKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXIrMTtuPHQubGVuZ3RoO24rKylpZih0W25dLmluZGV4T2YoZSk+PTApcmV0dXJuITE7cmV0dXJuITB9KSkubGVuZ3RoPyh0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MPXQuam9pbigiIHwgIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWF0dHJpYi1lbXB0eSIpKTp0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtYXR0cmliLWVtcHR5IiksdGhpcy5fZWRpdExpbms9bnVsbH19LG5uLnByb3RvdHlwZS5fdXBkYXRlQ29tcGFjdD1mdW5jdGlvbigpe3RoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKS5vZmZzZXRXaWR0aDw9NjQwP3RoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jb21wYWN0Iik6dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWNvbXBhY3QiKX07dmFyIGFuPWZ1bmN0aW9uKCl7dC5iaW5kQWxsKFsiX3VwZGF0ZUxvZ28iXSx0aGlzKX07YW4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCIpO3ZhciBlPXMuY3JlYXRlKCJhIiwibWFwYm94Z2wtY3RybC1sb2dvIik7cmV0dXJuIGUudGFyZ2V0PSJfYmxhbmsiLGUuaHJlZj0iaHR0cHM6Ly93d3cubWFwYm94LmNvbS8iLGUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiTWFwYm94IGxvZ28iKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoZSksdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuX21hcC5vbigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlTG9nbyksdGhpcy5fdXBkYXRlTG9nbygpLHRoaXMuX2NvbnRhaW5lcn0sYW4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVMb2dvKX0sYW4ucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LGFuLnByb3RvdHlwZS5fdXBkYXRlTG9nbz1mdW5jdGlvbih0KXt0JiYibWV0YWRhdGEiIT09dC5zb3VyY2VEYXRhVHlwZXx8KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PXRoaXMuX2xvZ29SZXF1aXJlZCgpPyJibG9jayI6Im5vbmUiKX0sYW4ucHJvdG90eXBlLl9sb2dvUmVxdWlyZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBlIGluIHQpaWYodFtlXS5nZXRTb3VyY2UoKS5tYXBib3hfbG9nbylyZXR1cm4hMDtyZXR1cm4hMX19O3ZhciBvbj1mdW5jdGlvbigpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX2lkPTAsdGhpcy5fY2xlYXJlZD0hMSx0aGlzLl9jdXJyZW50bHlSdW5uaW5nPSExfTtvbi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlPSsrdGhpcy5faWQ7cmV0dXJuIHRoaXMuX3F1ZXVlLnB1c2goe2NhbGxiYWNrOnQsaWQ6ZSxjYW5jZWxsZWQ6ITF9KSxlfSxvbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jdXJyZW50bHlSdW5uaW5nLHI9MCxuPWU/dGhpcy5fcXVldWUuY29uY2F0KGUpOnRoaXMuX3F1ZXVlO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtpZihpLmlkPT09dClyZXR1cm4gdm9pZChpLmNhbmNlbGxlZD0hMCl9fSxvbi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY3VycmVudGx5UnVubmluZz10aGlzLl9xdWV1ZTt0aGlzLl9xdWV1ZT1bXTtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKCFuLmNhbmNlbGxlZCYmKG4uY2FsbGJhY2soKSx0aGlzLl9jbGVhcmVkKSlicmVha310aGlzLl9jbGVhcmVkPSExLHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9ITF9LG9uLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRseVJ1bm5pbmcmJih0aGlzLl9jbGVhcmVkPSEwKSx0aGlzLl9xdWV1ZT1bXX07dmFyIHNuPXQuZGVmYXVsdC5IVE1MSW1hZ2VFbGVtZW50LGxuPXQuZGVmYXVsdC5IVE1MRWxlbWVudCxjbj17Y2VudGVyOlswLDBdLHpvb206MCxiZWFyaW5nOjAscGl0Y2g6MCxtaW5ab29tOjAsbWF4Wm9vbToyMixpbnRlcmFjdGl2ZTohMCxzY3JvbGxab29tOiEwLGJveFpvb206ITAsZHJhZ1JvdGF0ZTohMCxkcmFnUGFuOiEwLGtleWJvYXJkOiEwLGRvdWJsZUNsaWNrWm9vbTohMCx0b3VjaFpvb21Sb3RhdGU6ITAsYmVhcmluZ1NuYXA6NyxoYXNoOiExLGF0dHJpYnV0aW9uQ29udHJvbDohMCxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSx0cmFja1Jlc2l6ZTohMCxyZW5kZXJXb3JsZENvcGllczohMCxyZWZyZXNoRXhwaXJlZFRpbGVzOiEwLG1heFRpbGVDYWNoZVNpemU6bnVsbCx0cmFuc2Zvcm1SZXF1ZXN0Om51bGwsZmFkZUR1cmF0aW9uOjMwMH0sdW49ZnVuY3Rpb24ocil7ZnVuY3Rpb24gbihlKXtpZihudWxsIT0oZT10LmV4dGVuZCh7fSxjbixlKSkubWluWm9vbSYmbnVsbCE9ZS5tYXhab29tJiZlLm1pblpvb20+ZS5tYXhab29tKXRocm93IG5ldyBFcnJvcigibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5ab29tIik7dmFyIG49bmV3IEJyKGUubWluWm9vbSxlLm1heFpvb20sZS5yZW5kZXJXb3JsZENvcGllcyk7ci5jYWxsKHRoaXMsbixlKSx0aGlzLl9pbnRlcmFjdGl2ZT1lLmludGVyYWN0aXZlLHRoaXMuX21heFRpbGVDYWNoZVNpemU9ZS5tYXhUaWxlQ2FjaGVTaXplLHRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcj1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLl90cmFja1Jlc2l6ZT1lLnRyYWNrUmVzaXplLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsdGhpcy5fcmVmcmVzaEV4cGlyZWRUaWxlcz1lLnJlZnJlc2hFeHBpcmVkVGlsZXMsdGhpcy5fZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPTEsdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPWUuY29sbGVjdFJlc291cmNlVGltaW5nLHRoaXMuX3JlbmRlclRhc2tRdWV1ZT1uZXcgb247dmFyIGk9ZS50cmFuc2Zvcm1SZXF1ZXN0O2lmKHRoaXMuX3RyYW5zZm9ybVJlcXVlc3Q9aT9mdW5jdGlvbih0LGUpe3JldHVybiBpKHQsZSl8fHt1cmw6dH19OmZ1bmN0aW9uKHQpe3JldHVybnt1cmw6dH19LCJzdHJpbmciPT10eXBlb2YgZS5jb250YWluZXIpe3ZhciBhPXQuZGVmYXVsdC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLmNvbnRhaW5lcik7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgJyIrZS5jb250YWluZXIrIicgbm90IGZvdW5kLiIpO3RoaXMuX2NvbnRhaW5lcj1hfWVsc2V7aWYoIShlLmNvbnRhaW5lciBpbnN0YW5jZW9mIGxuKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHlwZTogJ2NvbnRhaW5lcicgbXVzdCBiZSBhIFN0cmluZyBvciBIVE1MRWxlbWVudC4iKTt0aGlzLl9jb250YWluZXI9ZS5jb250YWluZXJ9ZS5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKGUubWF4Qm91bmRzKSx0LmJpbmRBbGwoWyJfb25XaW5kb3dPbmxpbmUiLCJfb25XaW5kb3dSZXNpemUiLCJfY29udGV4dExvc3QiLCJfY29udGV4dFJlc3RvcmVkIiwiX3VwZGF0ZSIsIl9yZW5kZXIiLCJfb25EYXRhIiwiX29uRGF0YUxvYWRpbmciXSx0aGlzKSx0aGlzLl9zZXR1cENvbnRhaW5lcigpLHRoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMub24oIm1vdmUiLHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMsITEpKSx0aGlzLm9uKCJ6b29tIix0aGlzLl91cGRhdGUuYmluZCh0aGlzLCEwKSksdm9pZCAwIT09dC5kZWZhdWx0JiYodC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpLHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKSksZnVuY3Rpb24odCxlKXt2YXIgcj10LmdldENhbnZhc0NvbnRhaW5lcigpLG49bnVsbCxpPSExO2Zvcih2YXIgYSBpbiBlbil0W2FdPW5ldyBlblthXSh0LGUpLGUuaW50ZXJhY3RpdmUmJmVbYV0mJnRbYV0uZW5hYmxlKGVbYV0pO3MuYWRkRXZlbnRMaXN0ZW5lcihyLCJtb3VzZW91dCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBWcigibW91c2VvdXQiLHQsZSkpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsIm1vdXNlZG93biIsZnVuY3Rpb24ocil7aT0hMDt2YXIgbj1uZXcgVnIoIm1vdXNlZG93biIsdCxyKTt0LmZpcmUobiksbi5kZWZhdWx0UHJldmVudGVkfHwoZS5pbnRlcmFjdGl2ZSYmIXQuZG91YmxlQ2xpY2tab29tLmlzQWN0aXZlKCkmJnQuc3RvcCgpLHQuYm94Wm9vbS5vbk1vdXNlRG93bihyKSx0LmJveFpvb20uaXNBY3RpdmUoKXx8dC5kcmFnUGFuLmlzQWN0aXZlKCl8fHQuZHJhZ1JvdGF0ZS5vbk1vdXNlRG93bihyKSx0LmJveFpvb20uaXNBY3RpdmUoKXx8dC5kcmFnUm90YXRlLmlzQWN0aXZlKCl8fHQuZHJhZ1Bhbi5vbk1vdXNlRG93bihyKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIociwibW91c2V1cCIsZnVuY3Rpb24oZSl7dmFyIHI9dC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7biYmIXImJnQuZmlyZShuZXcgVnIoImNvbnRleHRtZW51Iix0LG4pKSxuPW51bGwsaT0hMSx0LmZpcmUobmV3IFZyKCJtb3VzZXVwIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGUpe2lmKCF0LmRyYWdQYW4uaXNBY3RpdmUoKSYmIXQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKXtmb3IodmFyIG49ZS50b0VsZW1lbnR8fGUudGFyZ2V0O24mJm4hPT1yOyluPW4ucGFyZW50Tm9kZTtuPT09ciYmdC5maXJlKG5ldyBWcigibW91c2Vtb3ZlIix0LGUpKX19KSxzLmFkZEV2ZW50TGlzdGVuZXIociwibW91c2VvdmVyIixmdW5jdGlvbihlKXtmb3IodmFyIG49ZS50b0VsZW1lbnR8fGUudGFyZ2V0O24mJm4hPT1yOyluPW4ucGFyZW50Tm9kZTtuPT09ciYmdC5maXJlKG5ldyBWcigibW91c2VvdmVyIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihyKXt2YXIgbj1uZXcgVXIoInRvdWNoc3RhcnQiLHQscik7dC5maXJlKG4pLG4uZGVmYXVsdFByZXZlbnRlZHx8KGUuaW50ZXJhY3RpdmUmJnQuc3RvcCgpLHQuYm94Wm9vbS5pc0FjdGl2ZSgpfHx0LmRyYWdSb3RhdGUuaXNBY3RpdmUoKXx8dC5kcmFnUGFuLm9uVG91Y2hTdGFydChyKSx0LnRvdWNoWm9vbVJvdGF0ZS5vblN0YXJ0KHIpLHQuZG91YmxlQ2xpY2tab29tLm9uVG91Y2hTdGFydChuKSl9LHtwYXNzaXZlOiExfSkscy5hZGRFdmVudExpc3RlbmVyKHIsInRvdWNobW92ZSIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBVcigidG91Y2htb3ZlIix0LGUpKX0se3Bhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIociwidG91Y2hlbmQiLGZ1bmN0aW9uKGUpe3QuZmlyZShuZXcgVXIoInRvdWNoZW5kIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJ0b3VjaGNhbmNlbCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBVcigidG91Y2hjYW5jZWwiLHQsZSkpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsImNsaWNrIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFZyKCJjbGljayIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIociwiZGJsY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciByPW5ldyBWcigiZGJsY2xpY2siLHQsZSk7dC5maXJlKHIpLHIuZGVmYXVsdFByZXZlbnRlZHx8dC5kb3VibGVDbGlja1pvb20ub25EYmxDbGljayhyKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7dmFyIHI9dC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7aXx8cj9pJiYobj1lKTp0LmZpcmUobmV3IFZyKCJjb250ZXh0bWVudSIsdCxlKSksZS5wcmV2ZW50RGVmYXVsdCgpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsIndoZWVsIixmdW5jdGlvbihlKXt2YXIgcj1uZXcgcXIoIndoZWVsIix0LGUpO3QuZmlyZShyKSxyLmRlZmF1bHRQcmV2ZW50ZWR8fHQuc2Nyb2xsWm9vbS5vbldoZWVsKGUpfSx7cGFzc2l2ZTohMX0pfSh0aGlzLGUpLHRoaXMuX2hhc2g9ZS5oYXNoJiYobmV3IGpyKS5hZGRUbyh0aGlzKSx0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKXx8dGhpcy5qdW1wVG8oe2NlbnRlcjplLmNlbnRlcix6b29tOmUuem9vbSxiZWFyaW5nOmUuYmVhcmluZyxwaXRjaDplLnBpdGNofSksdGhpcy5yZXNpemUoKSxlLnN0eWxlJiZ0aGlzLnNldFN0eWxlKGUuc3R5bGUse2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTplLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0pLGUuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmFkZENvbnRyb2wobmV3IG5uKSx0aGlzLmFkZENvbnRyb2wobmV3IGFuLGUubG9nb1Bvc2l0aW9uKSx0aGlzLm9uKCJzdHlsZS5sb2FkIixmdW5jdGlvbigpe3RoaXMudHJhbnNmb3JtLnVubW9kaWZpZWQmJnRoaXMuanVtcFRvKHRoaXMuc3R5bGUuc3R5bGVzaGVldCl9KSx0aGlzLm9uKCJkYXRhIix0aGlzLl9vbkRhdGEpLHRoaXMub24oImRhdGFsb2FkaW5nIix0aGlzLl9vbkRhdGFMb2FkaW5nKX1yJiYobi5fX3Byb3RvX189ciksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyJiZyLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bjt2YXIgaT17c2hvd1RpbGVCb3VuZGFyaWVzOntjb25maWd1cmFibGU6ITB9LHNob3dDb2xsaXNpb25Cb3hlczp7Y29uZmlndXJhYmxlOiEwfSxzaG93T3ZlcmRyYXdJbnNwZWN0b3I6e2NvbmZpZ3VyYWJsZTohMH0scmVwYWludDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIG4ucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiZ0LmdldERlZmF1bHRQb3NpdGlvbiYmKGU9dC5nZXREZWZhdWx0UG9zaXRpb24oKSksdm9pZCAwPT09ZSYmKGU9InRvcC1yaWdodCIpO3ZhciByPXQub25BZGQodGhpcyksbj10aGlzLl9jb250cm9sUG9zaXRpb25zW2VdO3JldHVybi0xIT09ZS5pbmRleE9mKCJib3R0b20iKT9uLmluc2VydEJlZm9yZShyLG4uZmlyc3RDaGlsZCk6bi5hcHBlbmRDaGlsZChyKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm9uUmVtb3ZlKHRoaXMpLHRoaXN9LG4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCksbj1yWzBdLGk9clsxXTtyZXR1cm4gdGhpcy5fcmVzaXplQ2FudmFzKG4saSksdGhpcy50cmFuc2Zvcm0ucmVzaXplKG4saSksdGhpcy5wYWludGVyLnJlc2l6ZShuLGkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixlKSkuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpLmZpcmUobmV3IHQuRXZlbnQoInJlc2l6ZSIsZSkpLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLGUpKX0sbi5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFkodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLnRyYW5zZm9ybS5oZWlnaHQpKSx0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyB0LmRlZmF1bHQkMSh0aGlzLnRyYW5zZm9ybS53aWR0aCwwKSkpO3JldHVybih0aGlzLnRyYW5zZm9ybS5hbmdsZXx8dGhpcy50cmFuc2Zvcm0ucGl0Y2gpJiYoZS5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEodGhpcy50cmFuc2Zvcm0uc2l6ZS54LDApKSksZS5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLnRyYW5zZm9ybS5zaXplLnkpKSkpLGV9LG4ucHJvdG90eXBlLmdldE1heEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5sYXRSYW5nZSYmMj09PXRoaXMudHJhbnNmb3JtLmxhdFJhbmdlLmxlbmd0aCYmdGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2UmJjI9PT10aGlzLnRyYW5zZm9ybS5sbmdSYW5nZS5sZW5ndGg/bmV3IFkoW3RoaXMudHJhbnNmb3JtLmxuZ1JhbmdlWzBdLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlWzBdXSxbdGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2VbMV0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2VbMV1dKTpudWxsfSxuLnByb3RvdHlwZS5zZXRNYXhCb3VuZHM9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9WS5jb252ZXJ0KHQpO3RoaXMudHJhbnNmb3JtLmxuZ1JhbmdlPVtlLmdldFdlc3QoKSxlLmdldEVhc3QoKV0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2U9W2UuZ2V0U291dGgoKSxlLmdldE5vcnRoKCldLHRoaXMudHJhbnNmb3JtLl9jb25zdHJhaW4oKSx0aGlzLl91cGRhdGUoKX1lbHNlIG51bGw9PXQmJih0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZT1udWxsLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlPW51bGwsdGhpcy5fdXBkYXRlKCkpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5zZXRNaW5ab29tPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/MDp0KT49MCYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPHQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWluWm9vbSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgdGhlIGN1cnJlbnQgbWF4Wm9vbSwgaW5jbHVzaXZlIil9LG4ucHJvdG90eXBlLmdldE1pblpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbX0sbi5wcm90b3R5cGUuc2V0TWF4Wm9vbT1mdW5jdGlvbih0KXtpZigodD1udWxsPT10PzIyOnQpPj10aGlzLnRyYW5zZm9ybS5taW5ab29tKXJldHVybiB0aGlzLnRyYW5zZm9ybS5tYXhab29tPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRab29tKCk+dCYmdGhpcy5zZXRab29tKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblpvb20iKX0sbi5wcm90b3R5cGUuZ2V0UmVuZGVyV29ybGRDb3BpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXN9LG4ucHJvdG90eXBlLnNldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcz10LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldE1heFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0sbi5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChHLmNvbnZlcnQodCkpfSxuLnByb3RvdHlwZS51bnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odC5kZWZhdWx0JDEuY29udmVydChlKSl9LG4ucHJvdG90eXBlLmlzTW92aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmluZ3x8dGhpcy5kcmFnUGFuLmlzQWN0aXZlKCl8fHRoaXMuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpfHx0aGlzLnNjcm9sbFpvb20uaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUuaXNab29taW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb21pbmd8fHRoaXMuc2Nyb2xsWm9vbS5pc0FjdGl2ZSgpfSxuLnByb3RvdHlwZS5pc1JvdGF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW5nfHx0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9dGhpcztpZih2b2lkIDA9PT1uKXJldHVybiByLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTt2YXIgbz1mdW5jdGlvbigpe2lmKCJtb3VzZWVudGVyIj09PXR8fCJtb3VzZW92ZXIiPT09dCl7dmFyIHI9ITE7cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6bixkZWxlZ2F0ZXM6e21vdXNlbW92ZTpmdW5jdGlvbihpKXt2YXIgbz1hLmdldExheWVyKGUpP2EucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGkucG9pbnQse2xheWVyczpbZV19KTpbXTtvLmxlbmd0aD9yfHwocj0hMCxuLmNhbGwoYSxuZXcgVnIodCxhLGkub3JpZ2luYWxFdmVudCx7ZmVhdHVyZXM6b30pKSk6cj0hMX0sbW91c2VvdXQ6ZnVuY3Rpb24oKXtyPSExfX19fWlmKCJtb3VzZWxlYXZlIj09PXR8fCJtb3VzZW91dCI9PT10KXt2YXIgbz0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpuLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKHIpeyhhLmdldExheWVyKGUpP2EucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHIucG9pbnQse2xheWVyczpbZV19KTpbXSkubGVuZ3RoP289ITA6byYmKG89ITEsbi5jYWxsKGEsbmV3IFZyKHQsYSxyLm9yaWdpbmFsRXZlbnQpKSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe28mJihvPSExLG4uY2FsbChhLG5ldyBWcih0LGEsZS5vcmlnaW5hbEV2ZW50KSkpfX19fXJldHVybntsYXllcjplLGxpc3RlbmVyOm4sZGVsZWdhdGVzOihpPXt9LGlbdF09ZnVuY3Rpb24odCl7dmFyIHI9YS5nZXRMYXllcihlKT9hLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0LnBvaW50LHtsYXllcnM6W2VdfSk6W107ci5sZW5ndGgmJih0LmZlYXR1cmVzPXIsbi5jYWxsKGEsdCksZGVsZXRlIHQuZmVhdHVyZXMpfSxpKX19KCk7Zm9yKHZhciBzIGluIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycz10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnN8fHt9LHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF18fFtdLHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XS5wdXNoKG8pLG8uZGVsZWdhdGVzKWEub24ocyxvLmRlbGVnYXRlc1tzXSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09bilyZXR1cm4gci5wcm90b3R5cGUub2ZmLmNhbGwodGhpcyx0LGUpO2lmKHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyYmdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdKWZvcih2YXIgaT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF0sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKG8ubGF5ZXI9PT1lJiZvLmxpc3RlbmVyPT09bil7Zm9yKHZhciBzIGluIG8uZGVsZWdhdGVzKXRoaXMub2ZmKHMsby5kZWxlZ2F0ZXNbc10pO3JldHVybiBpLnNwbGljZShhLDEpLHRoaXN9fXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbjtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGg/KGU9YXJndW1lbnRzWzBdLHI9YXJndW1lbnRzWzFdKToxPT09YXJndW1lbnRzLmxlbmd0aCYmKChuPWFyZ3VtZW50c1swXSlpbnN0YW5jZW9mIHQuZGVmYXVsdCQxfHxBcnJheS5pc0FycmF5KG4pKT8oZT1hcmd1bWVudHNbMF0scj17fSk6MT09PWFyZ3VtZW50cy5sZW5ndGg/KGU9dm9pZCAwLHI9YXJndW1lbnRzWzBdKTooZT12b2lkIDAscj17fSksdGhpcy5zdHlsZT90aGlzLnN0eWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0aGlzLl9tYWtlUXVlcnlHZW9tZXRyeShlKSxyLHRoaXMudHJhbnNmb3JtKTpbXX0sbi5wcm90b3R5cGUuX21ha2VRdWVyeUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT1bdC5kZWZhdWx0JDEuY29udmVydChbMCwwXSksdC5kZWZhdWx0JDEuY29udmVydChbdGhpcy50cmFuc2Zvcm0ud2lkdGgsdGhpcy50cmFuc2Zvcm0uaGVpZ2h0XSldKSxlIGluc3RhbmNlb2YgdC5kZWZhdWx0JDF8fCJudW1iZXIiPT10eXBlb2YgZVswXSlyPVt0LmRlZmF1bHQkMS5jb252ZXJ0KGUpXTtlbHNle3ZhciBpPVt0LmRlZmF1bHQkMS5jb252ZXJ0KGVbMF0pLHQuZGVmYXVsdCQxLmNvbnZlcnQoZVsxXSldO3I9W2lbMF0sbmV3IHQuZGVmYXVsdCQxKGlbMV0ueCxpWzBdLnkpLGlbMV0sbmV3IHQuZGVmYXVsdCQxKGlbMF0ueCxpWzFdLnkpLGlbMF1dfXJldHVybnt2aWV3cG9ydDpyLHdvcmxkQ29vcmRpbmF0ZTpyLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi50cmFuc2Zvcm0ucG9pbnRDb29yZGluYXRlKHQpfSl9fSxuLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUucXVlcnlTb3VyY2VGZWF0dXJlcyh0LGUpfSxuLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbihlLHIpe2lmKCghcnx8ITEhPT1yLmRpZmYmJiFyLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSkmJnRoaXMuc3R5bGUmJmUmJiJvYmplY3QiPT10eXBlb2YgZSl0cnl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0U3RhdGUoZSkmJnRoaXMuX3VwZGF0ZSghMCksdGhpc31jYXRjaChlKXt0Lndhcm5PbmNlKCJVbmFibGUgdG8gcGVyZm9ybSBzdHlsZSBkaWZmOiAiKyhlLm1lc3NhZ2V8fGUuZXJyb3J8fGUpKyIuICBSZWJ1aWxkaW5nIHRoZSBzdHlsZSBmcm9tIHNjcmF0Y2guIil9cmV0dXJuIHRoaXMuc3R5bGUmJih0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksdGhpcy5zdHlsZS5fcmVtb3ZlKCkpLGU/KHRoaXMuc3R5bGU9bmV3IEplKHRoaXMscnx8e30pLHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtzdHlsZTp0aGlzLnN0eWxlfSksInN0cmluZyI9PXR5cGVvZiBlP3RoaXMuc3R5bGUubG9hZFVSTChlKTp0aGlzLnN0eWxlLmxvYWRKU09OKGUpLHRoaXMpOihkZWxldGUgdGhpcy5zdHlsZSx0aGlzKX0sbi5wcm90b3R5cGUuZ2V0U3R5bGU9ZnVuY3Rpb24oKXtpZih0aGlzLnN0eWxlKXJldHVybiB0aGlzLnN0eWxlLnNlcmlhbGl6ZSgpfSxuLnByb3RvdHlwZS5pc1N0eWxlTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGU/dGhpcy5zdHlsZS5sb2FkZWQoKTp0Lndhcm5PbmNlKCJUaGVyZSBpcyBubyBzdHlsZSBhZGRlZCB0byB0aGUgbWFwLiIpfSxuLnByb3RvdHlwZS5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5hZGRTb3VyY2UodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmlzU291cmNlTG9hZGVkPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIubG9hZGVkKCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCBJRCAnIitlKyInIikpKX0sbi5wcm90b3R5cGUuYXJlVGlsZXNMb2FkZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdCl7dmFyIHI9dFtlXS5fdGlsZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl07aWYoImxvYWRlZCIhPT1pLnN0YXRlJiYiZXJyb3JlZCIhPT1pLnN0YXRlKXJldHVybiExfX1yZXR1cm4hMH0sbi5wcm90b3R5cGUuYWRkU291cmNlVHlwZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZSh0LGUscil9LG4ucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0U291cmNlKHQpfSxuLnByb3RvdHlwZS5hZGRJbWFnZT1mdW5jdGlvbihlLHIsbil7dm9pZCAwPT09biYmKG49e30pO3ZhciBpPW4ucGl4ZWxSYXRpbzt2b2lkIDA9PT1pJiYoaT0xKTt2YXIgbz1uLnNkZjtpZih2b2lkIDA9PT1vJiYobz0hMSksciBpbnN0YW5jZW9mIHNuKXt2YXIgcz1hLmdldEltYWdlRGF0YShyKSxsPXMud2lkdGgsYz1zLmhlaWdodCx1PXMuZGF0YTt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpsLGhlaWdodDpjfSx1KSxwaXhlbFJhdGlvOmksc2RmOm99KX1lbHNle2lmKHZvaWQgMD09PXIud2lkdGh8fHZvaWQgMD09PXIuaGVpZ2h0KXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIG1hcC5hZGRJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCIpKSk7dmFyIGY9ci53aWR0aCxoPXIuaGVpZ2h0LHA9ci5kYXRhO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOmYsaGVpZ2h0Omh9LHAuc2xpY2UoMCkpLHBpeGVsUmF0aW86aSxzZGY6b30pfX0sbi5wcm90b3R5cGUuaGFzSW1hZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ISF0aGlzLnN0eWxlLmdldEltYWdlKGUpOih0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgaW1hZ2UgaWQiKSkpLCExKX0sbi5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5yZW1vdmVJbWFnZSh0KX0sbi5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGUscil7dC5nZXRJbWFnZSh0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLHIpfSxuLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZExheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5tb3ZlTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5tb3ZlTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZUxheWVyKHQpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5ZXIodCl9LG4ucHJvdG90eXBlLnNldEZpbHRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnNldEZpbHRlcih0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheWVyWm9vbVJhbmdlKHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRGaWx0ZXIodCl9LG4ucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmdldFBhaW50UHJvcGVydHkodCxlKX0sbi5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheW91dFByb3BlcnR5KHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5b3V0UHJvcGVydHkodCxlKX0sbi5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGlnaHQodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLmdldExpZ2h0KCl9LG4ucHJvdG90eXBlLmdldENvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LG4ucHJvdG90eXBlLmdldENhbnZhc0NvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXNDb250YWluZXJ9LG4ucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXN9LG4ucHJvdG90eXBlLl9jb250YWluZXJEaW1lbnNpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPTA7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQ9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRofHw0MDAsZT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0fHwzMDApLFt0LGVdfSxuLnByb3RvdHlwZS5fc2V0dXBDb250YWluZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI7dC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1tYXAiKSwodGhpcy5fbWlzc2luZ0NTU0NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtbWlzc2luZy1jc3MiLHQpKS5pbm5lckhUTUw9Ik1pc3NpbmcgTWFwYm94IEdMIEpTIENTUyI7dmFyIGU9dGhpcy5fY2FudmFzQ29udGFpbmVyPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jYW52YXMtY29udGFpbmVyIix0KTt0aGlzLl9pbnRlcmFjdGl2ZSYmZS5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1pbnRlcmFjdGl2ZSIpLHRoaXMuX2NhbnZhcz1zLmNyZWF0ZSgiY2FudmFzIiwibWFwYm94Z2wtY2FudmFzIixlKSx0aGlzLl9jYW52YXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsdGhpcy5fY29udGV4dExvc3QsITEpLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdGhpcy5fY29udGV4dFJlc3RvcmVkLCExKSx0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSx0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiTWFwIik7dmFyIHI9dGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpO3RoaXMuX3Jlc2l6ZUNhbnZhcyhyWzBdLHJbMV0pO3ZhciBuPXRoaXMuX2NvbnRyb2xDb250YWluZXI9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWNvbnRyb2wtY29udGFpbmVyIix0KSxpPXRoaXMuX2NvbnRyb2xQb3NpdGlvbnM9e307WyJ0b3AtbGVmdCIsInRvcC1yaWdodCIsImJvdHRvbS1sZWZ0IiwiYm90dG9tLXJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbih0KXtpW3RdPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsLSIrdCxuKX0pfSxuLnByb3RvdHlwZS5fcmVzaXplQ2FudmFzPWZ1bmN0aW9uKGUscil7dmFyIG49dC5kZWZhdWx0LmRldmljZVBpeGVsUmF0aW98fDE7dGhpcy5fY2FudmFzLndpZHRoPW4qZSx0aGlzLl9jYW52YXMuaGVpZ2h0PW4qcix0aGlzLl9jYW52YXMuc3R5bGUud2lkdGg9ZSsicHgiLHRoaXMuX2NhbnZhcy5zdHlsZS5oZWlnaHQ9cisicHgifSxuLnByb3RvdHlwZS5fc2V0dXBQYWludGVyPWZ1bmN0aW9uKCl7dmFyIHI9dC5leHRlbmQoe2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyfSxlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMpLG49dGhpcy5fY2FudmFzLmdldENvbnRleHQoIndlYmdsIixyKXx8dGhpcy5fY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik7bj90aGlzLnBhaW50ZXI9bmV3IHpyKG4sdGhpcy50cmFuc2Zvcm0pOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0wiKSkpfSxuLnByb3RvdHlwZS5fY29udGV4dExvc3Q9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZyYW1lSWQmJihhLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ3ZWJnbGNvbnRleHRsb3N0Iix7b3JpZ2luYWxFdmVudDplfSkpfSxuLnByb3RvdHlwZS5fY29udGV4dFJlc3RvcmVkPWZ1bmN0aW9uKGUpe3RoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMucmVzaXplKCksdGhpcy5fdXBkYXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIse29yaWdpbmFsRXZlbnQ6ZX0pKX0sbi5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3N0eWxlRGlydHkmJiF0aGlzLl9zb3VyY2VzRGlydHkmJiEoIXRoaXMuc3R5bGV8fCF0aGlzLnN0eWxlLmxvYWRlZCgpKX0sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLnN0eWxlJiYodGhpcy5fc3R5bGVEaXJ0eT10aGlzLl9zdHlsZURpcnR5fHx0LHRoaXMuX3NvdXJjZXNEaXJ0eT0hMCx0aGlzLl9yZXJlbmRlcigpKX0sbi5wcm90b3R5cGUuX3JlcXVlc3RSZW5kZXJGcmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXBkYXRlKCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmFkZCh0KX0sbi5wcm90b3R5cGUuX2NhbmNlbFJlbmRlckZyYW1lPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlclRhc2tRdWV1ZS5yZW1vdmUodCl9LG4ucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJUYXNrUXVldWUucnVuKCk7dmFyIGU9ITE7aWYodGhpcy5zdHlsZSYmdGhpcy5fc3R5bGVEaXJ0eSl7dGhpcy5fc3R5bGVEaXJ0eT0hMTt2YXIgcj10aGlzLnRyYW5zZm9ybS56b29tLG49YS5ub3coKTt0aGlzLnN0eWxlLnpvb21IaXN0b3J5LnVwZGF0ZShyLG4pO3ZhciBpPW5ldyB0LmRlZmF1bHQkMTYocix7bm93Om4sZmFkZUR1cmF0aW9uOnRoaXMuX2ZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTp0aGlzLnN0eWxlLnpvb21IaXN0b3J5LHRyYW5zaXRpb246dGhpcy5zdHlsZS5nZXRUcmFuc2l0aW9uKCl9KSxvPWkuY3Jvc3NGYWRpbmdGYWN0b3IoKTsxPT09byYmbz09PXRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yfHwoZT0hMCx0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj1vKSx0aGlzLnN0eWxlLnVwZGF0ZShpKX1yZXR1cm4gdGhpcy5zdHlsZSYmdGhpcy5fc291cmNlc0RpcnR5JiYodGhpcy5fc291cmNlc0RpcnR5PSExLHRoaXMuc3R5bGUuX3VwZGF0ZVNvdXJjZXModGhpcy50cmFuc2Zvcm0pKSx0aGlzLl9wbGFjZW1lbnREaXJ0eT10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLl91cGRhdGVQbGFjZW1lbnQodGhpcy5wYWludGVyLnRyYW5zZm9ybSx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyx0aGlzLl9mYWRlRHVyYXRpb24pLHRoaXMucGFpbnRlci5yZW5kZXIodGhpcy5zdHlsZSx7c2hvd1RpbGVCb3VuZGFyaWVzOnRoaXMuc2hvd1RpbGVCb3VuZGFyaWVzLHNob3dPdmVyZHJhd0luc3BlY3Rvcjp0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3Iscm90YXRpbmc6dGhpcy5pc1JvdGF0aW5nKCksem9vbWluZzp0aGlzLmlzWm9vbWluZygpLGZhZGVEdXJhdGlvbjp0aGlzLl9mYWRlRHVyYXRpb259KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJlbmRlciIpKSx0aGlzLmxvYWRlZCgpJiYhdGhpcy5fbG9hZGVkJiYodGhpcy5fbG9hZGVkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibG9hZCIpKSksdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuaGFzVHJhbnNpdGlvbnMoKXx8ZSkmJih0aGlzLl9zdHlsZURpcnR5PSEwKSwodGhpcy5fc291cmNlc0RpcnR5fHx0aGlzLl9yZXBhaW50fHx0aGlzLl9zdHlsZURpcnR5fHx0aGlzLl9wbGFjZW1lbnREaXJ0eSkmJnRoaXMuX3JlcmVuZGVyKCksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5faGFzaCYmdGhpcy5faGFzaC5yZW1vdmUoKSxhLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5jbGVhcigpLHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLnNldFN0eWxlKG51bGwpLHZvaWQgMCE9PXQuZGVmYXVsdCYmKHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigib25saW5lIix0aGlzLl9vbldpbmRvd09ubGluZSwhMSkpO3ZhciBlPXRoaXMucGFpbnRlci5jb250ZXh0LmdsLmdldEV4dGVuc2lvbigiV0VCR0xfbG9zZV9jb250ZXh0Iik7ZSYmZS5sb3NlQ29udGV4dCgpLGZuKHRoaXMuX2NhbnZhc0NvbnRhaW5lciksZm4odGhpcy5fY29udHJvbENvbnRhaW5lciksZm4odGhpcy5fbWlzc2luZ0NTU0NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLW1hcCIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgicmVtb3ZlIikpfSxuLnByb3RvdHlwZS5fcmVyZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuc3R5bGUmJiF0aGlzLl9mcmFtZUlkJiYodGhpcy5fZnJhbWVJZD1hLmZyYW1lKGZ1bmN0aW9uKCl7dC5fZnJhbWVJZD1udWxsLHQuX3JlbmRlcigpfSkpfSxuLnByb3RvdHlwZS5fb25XaW5kb3dPbmxpbmU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0sbi5wcm90b3R5cGUuX29uV2luZG93UmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5fdHJhY2tSZXNpemUmJnRoaXMuc3RvcCgpLnJlc2l6ZSgpLl91cGRhdGUoKX0saS5zaG93VGlsZUJvdW5kYXJpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXN9LGkuc2hvd1RpbGVCb3VuZGFyaWVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXMhPT10JiYodGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzPXQsdGhpcy5fdXBkYXRlKCkpfSxpLnNob3dDb2xsaXNpb25Cb3hlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlc30saS5zaG93Q29sbGlzaW9uQm94ZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyE9PXQmJih0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9dCx0P3RoaXMuc3R5bGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKTp0aGlzLl91cGRhdGUoKSl9LGkuc2hvd092ZXJkcmF3SW5zcGVjdG9yLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yfSxpLnNob3dPdmVyZHJhd0luc3BlY3Rvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yIT09dCYmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj10LHRoaXMuX3VwZGF0ZSgpKX0saS5yZXBhaW50LmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fcmVwYWludH0saS5yZXBhaW50LnNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXBhaW50PXQsdGhpcy5fdXBkYXRlKCl9LGkudmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl92ZXJ0aWNlc30saS52ZXJ0aWNlcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fdmVydGljZXM9dCx0aGlzLl91cGRhdGUoKX0sbi5wcm90b3R5cGUuX29uRGF0YT1mdW5jdGlvbihlKXt0aGlzLl91cGRhdGUoInN0eWxlIj09PWUuZGF0YVR5cGUpLHRoaXMuZmlyZShuZXcgdC5FdmVudChlLmRhdGFUeXBlKyJkYXRhIixlKSl9LG4ucHJvdG90eXBlLl9vbkRhdGFMb2FkaW5nPWZ1bmN0aW9uKGUpe3RoaXMuZmlyZShuZXcgdC5FdmVudChlLmRhdGFUeXBlKyJkYXRhbG9hZGluZyIsZSkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSxpKSxufShybik7ZnVuY3Rpb24gZm4odCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9dmFyIGhuPXtzaG93Q29tcGFzczohMCxzaG93Wm9vbTohMH0scG49ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30saG4sZSksdGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSx0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJih0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC16b29tLWluIiwiWm9vbSBJbiIsZnVuY3Rpb24oKXtyZXR1cm4gci5fbWFwLnpvb21JbigpfSksdGhpcy5fem9vbU91dEJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLXpvb20tb3V0IiwiWm9vbSBPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX21hcC56b29tT3V0KCl9KSksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodC5iaW5kQWxsKFsiX3JvdGF0ZUNvbXBhc3NBcnJvdyJdLHRoaXMpLHRoaXMuX2NvbXBhc3M9dGhpcy5fY3JlYXRlQnV0dG9uKCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1jb21wYXNzIiwiUmVzZXQgTm9ydGgiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX21hcC5yZXNldE5vcnRoKCl9KSx0aGlzLl9jb21wYXNzQXJyb3c9cy5jcmVhdGUoInNwYW4iLCJtYXBib3hnbC1jdHJsLWNvbXBhc3MtYXJyb3ciLHRoaXMuX2NvbXBhc3MpKX07ZnVuY3Rpb24gZG4odCxlLHIpe2lmKHQ9bmV3IEcodC5sbmcsdC5sYXQpLGUpe3ZhciBuPW5ldyBHKHQubG5nLTM2MCx0LmxhdCksaT1uZXcgRyh0LmxuZyszNjAsdC5sYXQpLGE9ci5sb2NhdGlvblBvaW50KHQpLmRpc3RTcXIoZSk7ci5sb2NhdGlvblBvaW50KG4pLmRpc3RTcXIoZSk8YT90PW46ci5sb2NhdGlvblBvaW50KGkpLmRpc3RTcXIoZSk8YSYmKHQ9aSl9Zm9yKDtNYXRoLmFicyh0LmxuZy1yLmNlbnRlci5sbmcpPjE4MDspe3ZhciBvPXIubG9jYXRpb25Qb2ludCh0KTtpZihvLng+PTAmJm8ueT49MCYmby54PD1yLndpZHRoJiZvLnk8PXIuaGVpZ2h0KWJyZWFrO3QubG5nPnIuY2VudGVyLmxuZz90LmxuZy09MzYwOnQubG5nKz0zNjB9cmV0dXJuIHR9cG4ucHJvdG90eXBlLl9yb3RhdGVDb21wYXNzQXJyb3c9ZnVuY3Rpb24oKXt2YXIgdD0icm90YXRlKCIrdGhpcy5fbWFwLnRyYW5zZm9ybS5hbmdsZSooMTgwL01hdGguUEkpKyJkZWcpIjt0aGlzLl9jb21wYXNzQXJyb3cuc3R5bGUudHJhbnNmb3JtPXR9LHBuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodGhpcy5fbWFwLm9uKCJyb3RhdGUiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCksdGhpcy5faGFuZGxlcj1uZXcgV3IodCx7YnV0dG9uOiJsZWZ0IixlbGVtZW50OnRoaXMuX2NvbXBhc3N9KSx0aGlzLl9oYW5kbGVyLmVuYWJsZSgpKSx0aGlzLl9jb250YWluZXJ9LHBuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodGhpcy5fbWFwLm9mZigicm90YXRlIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX2hhbmRsZXIuZGlzYWJsZSgpLGRlbGV0ZSB0aGlzLl9oYW5kbGVyKSxkZWxldGUgdGhpcy5fbWFwfSxwbi5wcm90b3R5cGUuX2NyZWF0ZUJ1dHRvbj1mdW5jdGlvbih0LGUscil7dmFyIG49cy5jcmVhdGUoImJ1dHRvbiIsdCx0aGlzLl9jb250YWluZXIpO3JldHVybiBuLnR5cGU9ImJ1dHRvbiIsbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpLG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHIpLG59O3ZhciBnbj17Y2VudGVyOiJ0cmFuc2xhdGUoLTUwJSwtNTAlKSIsdG9wOiJ0cmFuc2xhdGUoLTUwJSwwKSIsInRvcC1sZWZ0IjoidHJhbnNsYXRlKDAsMCkiLCJ0b3AtcmlnaHQiOiJ0cmFuc2xhdGUoLTEwMCUsMCkiLGJvdHRvbToidHJhbnNsYXRlKC01MCUsLTEwMCUpIiwiYm90dG9tLWxlZnQiOiJ0cmFuc2xhdGUoMCwtMTAwJSkiLCJib3R0b20tcmlnaHQiOiJ0cmFuc2xhdGUoLTEwMCUsLTEwMCUpIixsZWZ0OiJ0cmFuc2xhdGUoMCwtNTAlKSIscmlnaHQ6InRyYW5zbGF0ZSgtMTAwJSwtNTAlKSJ9O2Z1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj10LmNsYXNzTGlzdDtmb3IodmFyIGkgaW4gZ24pbi5yZW1vdmUoIm1hcGJveGdsLSIrcisiLWFuY2hvci0iK2kpO24uYWRkKCJtYXBib3hnbC0iK3IrIi1hbmNob3ItIitlKX12YXIgbW49ZnVuY3Rpb24oZSl7aWYoKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgdC5kZWZhdWx0LkhUTUxFbGVtZW50fHwyPT09YXJndW1lbnRzLmxlbmd0aCkmJihlPXQuZXh0ZW5kKHtlbGVtZW50OmV9LGFyZ3VtZW50c1sxXSkpLHQuYmluZEFsbChbIl91cGRhdGUiLCJfb25NYXBDbGljayJdLHRoaXMpLHRoaXMuX2FuY2hvcj1lJiZlLmFuY2hvcnx8ImNlbnRlciIsdGhpcy5fY29sb3I9ZSYmZS5jb2xvcnx8IiMzRkIxQ0UiLGUmJmUuZWxlbWVudCl0aGlzLl9lbGVtZW50PWUuZWxlbWVudCx0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlJiZlLm9mZnNldHx8WzAsMF0pO2Vsc2V7dGhpcy5fZGVmYXVsdE1hcmtlcj0hMCx0aGlzLl9lbGVtZW50PXMuY3JlYXRlKCJkaXYiKTt2YXIgcj1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO3Iuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IiwiNDFweCIpLHIuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLCIyN3B4Iiksci5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ2aWV3Qm94IiwiMCAwIDI3IDQxIik7dmFyIG49cy5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UiLCJub25lIiksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utd2lkdGgiLCIxIiksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLG4uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1ydWxlIiwiZXZlbm9kZCIpO3ZhciBpPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2kuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1ydWxlIiwibm9uemVybyIpO3ZhciBhPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2Euc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDMuMCwgMjkuMCkiKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIik7Zm9yKHZhciBvPTAsbD1be3J4OiIxMC41IixyeToiNS4yNTAwMjI3MyJ9LHtyeDoiMTAuNSIscnk6IjUuMjUwMDIyNzMifSx7cng6IjkuNSIscnk6IjQuNzcyNzUwMDcifSx7cng6IjguNSIscnk6IjQuMjk1NDk5MzYifSx7cng6IjcuNSIscnk6IjMuODE4MjIzMDgifSx7cng6IjYuNSIscnk6IjMuMzQwOTQ2NzkifSx7cng6IjUuNSIscnk6IjIuODYzNjcwNTEifSx7cng6IjQuNSIscnk6IjIuMzg2MzY4NjQifV07bzxsLmxlbmd0aDtvKz0xKXt2YXIgYz1sW29dLHU9cy5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJlbGxpcHNlIik7dS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvcGFjaXR5IiwiMC4wNCIpLHUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLCIxMC41IiksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuODAwMjkwMDgiKSx1LnNldEF0dHJpYnV0ZU5TKG51bGwsInJ4IixjLnJ4KSx1LnNldEF0dHJpYnV0ZU5TKG51bGwsInJ5IixjLnJ5KSxhLmFwcGVuZENoaWxkKHUpfXZhciBmPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2Yuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5fY29sb3IpO3ZhciBoPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2guc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsIk0yNywxMy41IEMyNywxOS4wNzQ2NDQgMjAuMjUwMDAxLDI3LjAwMDAwMiAxNC43NSwzNC41MDAwMDIgQzE0LjAxNjY2NSwzNS41MDAwMDQgMTIuOTgzMzM1LDM1LjUwMDAwNCAxMi4yNSwzNC41MDAwMDIgQzYuNzQ5OTk5MywyNy4wMDAwMDIgMCwxOS4yMjI1NjIgMCwxMy41IEMwLDYuMDQ0MTU1OSA2LjA0NDE1NTksMCAxMy41LDAgQzIwLjk1NTg0NCwwIDI3LDYuMDQ0MTU1OSAyNywxMy41IFoiKSxmLmFwcGVuZENoaWxkKGgpO3ZhciBwPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO3Auc2V0QXR0cmlidXRlTlMobnVsbCwib3BhY2l0eSIsIjAuMjUiKSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIik7dmFyIGQ9cy5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7ZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiwiTTEzLjUsMCBDNi4wNDQxNTU5LDAgMCw2LjA0NDE1NTkgMCwxMy41IEMwLDE5LjIyMjU2MiA2Ljc0OTk5OTMsMjcgMTIuMjUsMzQuNSBDMTMsMzUuNTIyNzI3IDE0LjAxNjY2NCwzNS41MDAwMDQgMTQuNzUsMzQuNSBDMjAuMjUwMDAxLDI3IDI3LDE5LjA3NDY0NCAyNywxMy41IEMyNyw2LjA0NDE1NTkgMjAuOTU1ODQ0LDAgMTMuNSwwIFogTTEzLjUsMSBDMjAuNDE1NDA0LDEgMjYsNi41ODQ1OTYgMjYsMTMuNSBDMjYsMTUuODk4NjU3IDI0LjQ5NTU4NCwxOS4xODE0MzEgMjIuMjIwNzAzLDIyLjczODI4MSBDMTkuOTQ1ODIzLDI2LjI5NTEzMiAxNi43MDUxMTksMzAuMTQyMTY3IDEzLjk0MzM1OSwzMy45MDgyMDMgQzEzLjc0MzQ0NSwzNC4xODA4MTQgMTMuNjEyNzE1LDM0LjMyMjczOCAxMy41LDM0LjQ0MTQwNiBDMTMuMzg3Mjg1LDM0LjMyMjczOCAxMy4yNTY1NTUsMzQuMTgwODE0IDEzLjA1NjY0MSwzMy45MDgyMDMgQzEwLjI4NDQ4MSwzMC4xMjc5ODUgNy40MTQ4Njg0LDI2LjMxNDE1OSA1LjAxNTYyNSwyMi43NzM0MzggQzIuNjE2MzgxNiwxOS4yMzI3MTUgMSwxNS45NTM1MzggMSwxMy41IEMxLDYuNTg0NTk2IDYuNTg0NTk2LDEgMTMuNSwxIFoiKSxwLmFwcGVuZENoaWxkKGQpO3ZhciBnPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2cuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDYuMCwgNy4wKSIpLGcuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiNGRkZGRkYiKTt2YXIgdj1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg4LjAsIDguMCkiKTt2YXIgbT1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO20uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiMwMDAwMDAiKSxtLnNldEF0dHJpYnV0ZU5TKG51bGwsIm9wYWNpdHkiLCIwLjI1IiksbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeCIsIjUuNSIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLCI1LjUiKSxtLnNldEF0dHJpYnV0ZU5TKG51bGwsInIiLCI1LjQ5OTk5NjIiKTt2YXIgeT1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO3kuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiNGRkZGRkYiKSx5LnNldEF0dHJpYnV0ZU5TKG51bGwsImN4IiwiNS41IikseS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuNSIpLHkuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsIjUuNDk5OTk2MiIpLHYuYXBwZW5kQ2hpbGQobSksdi5hcHBlbmRDaGlsZCh5KSxpLmFwcGVuZENoaWxkKGEpLGkuYXBwZW5kQ2hpbGQoZiksaS5hcHBlbmRDaGlsZChwKSxpLmFwcGVuZENoaWxkKGcpLGkuYXBwZW5kQ2hpbGQodiksci5hcHBlbmRDaGlsZChpKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKHIpLHRoaXMuX29mZnNldD10LmRlZmF1bHQkMS5jb252ZXJ0KGUmJmUub2Zmc2V0fHxbMCwtMTRdKX10aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcmtlciIpLHRoaXMuX3BvcHVwPW51bGx9O21uLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dCx0LmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHQub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLl9vbk1hcENsaWNrKSx0aGlzfSxtbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoImNsaWNrIix0aGlzLl9vbk1hcENsaWNrKSx0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZSksZGVsZXRlIHRoaXMuX21hcCkscy5yZW1vdmUodGhpcy5fZWxlbWVudCksdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLnJlbW92ZSgpLHRoaXN9LG1uLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxtbi5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sbmdMYXQ9Ry5jb252ZXJ0KHQpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxtbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxtbi5wcm90b3R5cGUuc2V0UG9wdXA9ZnVuY3Rpb24odCl7aWYodGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cC5yZW1vdmUoKSx0aGlzLl9wb3B1cD1udWxsKSx0KXtpZighKCJvZmZzZXQiaW4gdC5vcHRpb25zKSl7dmFyIGU9TWF0aC5zcXJ0KE1hdGgucG93KDEzLjUsMikvMik7dC5vcHRpb25zLm9mZnNldD10aGlzLl9kZWZhdWx0TWFya2VyP3t0b3A6WzAsMF0sInRvcC1sZWZ0IjpbMCwwXSwidG9wLXJpZ2h0IjpbMCwwXSxib3R0b206WzAsLTM4LjFdLCJib3R0b20tbGVmdCI6W2UsLTEqKDI0LjYrZSldLCJib3R0b20tcmlnaHQiOlstZSwtMSooMjQuNitlKV0sbGVmdDpbMTMuNSwtMjQuNl0scmlnaHQ6Wy0xMy41LC0yNC42XX06dGhpcy5fb2Zmc2V0fXRoaXMuX3BvcHVwPXQsdGhpcy5fbG5nTGF0JiZ0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KX1yZXR1cm4gdGhpc30sbW4ucHJvdG90eXBlLl9vbk1hcENsaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXQub3JpZ2luYWxFdmVudC50YXJnZXQscj10aGlzLl9lbGVtZW50O3RoaXMuX3BvcHVwJiYoZT09PXJ8fHIuY29udGFpbnMoZSkpJiZ0aGlzLnRvZ2dsZVBvcHVwKCl9LG1uLnByb3RvdHlwZS5nZXRQb3B1cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sbW4ucHJvdG90eXBlLnRvZ2dsZVBvcHVwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcG9wdXA7cmV0dXJuIHQ/KHQuaXNPcGVuKCk/dC5yZW1vdmUoKTp0LmFkZFRvKHRoaXMuX21hcCksdGhpcyk6dGhpc30sbW4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiYodGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuX2xuZ0xhdD1kbih0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKSx0aGlzLl9wb3M9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KS5fYWRkKHRoaXMuX29mZnNldCksdCYmIm1vdmVlbmQiIT09dC50eXBlfHwodGhpcy5fcG9zPXRoaXMuX3Bvcy5yb3VuZCgpKSxzLnNldFRyYW5zZm9ybSh0aGlzLl9lbGVtZW50LGduW3RoaXMuX2FuY2hvcl0rIiB0cmFuc2xhdGUoIit0aGlzLl9wb3MueCsicHgsICIrdGhpcy5fcG9zLnkrInB4KSIpLHZuKHRoaXMuX2VsZW1lbnQsdGhpcy5fYW5jaG9yLCJtYXJrZXIiKSl9LG1uLnByb3RvdHlwZS5nZXRPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fSxtbi5wcm90b3R5cGUuc2V0T2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlKSx0aGlzLl91cGRhdGUoKSx0aGlzfTt2YXIgeW4seG49e3Bvc2l0aW9uT3B0aW9uczp7ZW5hYmxlSGlnaEFjY3VyYWN5OiExLG1heGltdW1BZ2U6MCx0aW1lb3V0OjZlM30sZml0Qm91bmRzT3B0aW9uczp7bWF4Wm9vbToxNX0sdHJhY2tVc2VyTG9jYXRpb246ITEsc2hvd1VzZXJMb2NhdGlvbjohMH0sYm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LHhuLHIpLHQuYmluZEFsbChbIl9vblN1Y2Nlc3MiLCJfb25FcnJvciIsIl9maW5pc2giLCJfc2V0dXBVSSIsIl91cGRhdGVDYW1lcmEiLCJfdXBkYXRlTWFya2VyIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3ZhciByO3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCIpLHI9dGhpcy5fc2V0dXBVSSx2b2lkIDAhPT15bj9yKHluKTp2b2lkIDAhPT10LmRlZmF1bHQubmF2aWdhdG9yLnBlcm1pc3Npb25zP3QuZGVmYXVsdC5uYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6Imdlb2xvY2F0aW9uIn0pLnRoZW4oZnVuY3Rpb24odCl7eW49ImRlbmllZCIhPT10LnN0YXRlLHIoeW4pfSk6KHluPSEhdC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbixyKHluKSksdGhpcy5fY29udGFpbmVyfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmKHQuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDApLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIucmVtb3ZlKCkscy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXA9dm9pZCAwfSxyLnByb3RvdHlwZS5fb25TdWNjZXNzPWZ1bmN0aW9uKGUpe2lmKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbilzd2l0Y2godGhpcy5fbGFzdEtub3duUG9zaXRpb249ZSx0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjpjYXNlIkFDVElWRV9MT0NLIjpjYXNlIkFDVElWRV9FUlJPUiI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0xPQ0siLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOmNhc2UiQkFDS0dST1VORF9FUlJPUiI6dGhpcy5fd2F0Y2hTdGF0ZT0iQkFDS0dST1VORCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIil9dGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJiJPRkYiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5fdXBkYXRlTWFya2VyKGUpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmIkFDVElWRV9MT0NLIiE9PXRoaXMuX3dhdGNoU3RhdGV8fHRoaXMuX3VwZGF0ZUNhbWVyYShlKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fZG90RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdC1zdGFsZSIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZ2VvbG9jYXRlIixlKSksdGhpcy5fZmluaXNoKCl9LHIucHJvdG90eXBlLl91cGRhdGVDYW1lcmE9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEcodC5jb29yZHMubG9uZ2l0dWRlLHQuY29vcmRzLmxhdGl0dWRlKSxyPXQuY29vcmRzLmFjY3VyYWN5O3RoaXMuX21hcC5maXRCb3VuZHMoZS50b0JvdW5kcyhyKSx0aGlzLm9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucyx7Z2VvbG9jYXRlU291cmNlOiEwfSl9LHIucHJvdG90eXBlLl91cGRhdGVNYXJrZXI9ZnVuY3Rpb24odCl7dD90aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIuc2V0TG5nTGF0KFt0LmNvb3Jkcy5sb25naXR1ZGUsdC5jb29yZHMubGF0aXR1ZGVdKS5hZGRUbyh0aGlzLl9tYXApOnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKX0sci5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKWlmKDE9PT1lLmNvZGUpdGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmdGhpcy5fY2xlYXJXYXRjaCgpO2Vsc2Ugc3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9FUlJPUiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOnRoaXMuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkRfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpfSJPRkYiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImVycm9yIixlKSksdGhpcy5fZmluaXNoKCl9LHIucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl90aW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJZD12b2lkIDB9LHIucHJvdG90eXBlLl9zZXR1cFVJPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7ITEhPT1lJiYodGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uPXMuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIkdlb2xvY2F0ZSIpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIiksdGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIiksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJih0aGlzLl9kb3RFbGVtZW50PXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdCIpLHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlcj1uZXcgbW4odGhpcy5fZG90RWxlbWVudCksdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiYodGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIikpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy50cmlnZ2VyLmJpbmQodGhpcykpLHRoaXMuX3NldHVwPSEwLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmdGhpcy5fbWFwLm9uKCJtb3Zlc3RhcnQiLGZ1bmN0aW9uKGUpe2UuZ2VvbG9jYXRlU291cmNlfHwiQUNUSVZFX0xPQ0siIT09ci5fd2F0Y2hTdGF0ZXx8KHIuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkQiLHIuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksci5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHIuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25lbmQiKSkpfSkpfSxyLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3NldHVwKXJldHVybiB0Lndhcm5PbmNlKCJHZW9sb2NhdGUgY29udHJvbCB0cmlnZ2VyZWQgYmVmb3JlIGFkZGVkIHRvIGEgbWFwIiksITE7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKXtzd2l0Y2godGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZSJPRkYiOnRoaXMuX3dhdGNoU3RhdGU9IldBSVRJTkdfQUNUSVZFIix0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uc3RhcnQiKSk7YnJlYWs7Y2FzZSJXQUlUSU5HX0FDVElWRSI6Y2FzZSJBQ1RJVkVfTE9DSyI6Y2FzZSJBQ1RJVkVfRVJST1IiOmNhc2UiQkFDS0dST1VORF9FUlJPUiI6dGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25lbmQiKSk7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfTE9DSyIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiYmdGhpcy5fdXBkYXRlQ2FtZXJhKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uc3RhcnQiKSl9c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpO2JyZWFrO2Nhc2UiQUNUSVZFX0xPQ0siOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkFDVElWRV9FUlJPUiI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORF9FUlJPUiI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpfSJPRkYiPT09dGhpcy5fd2F0Y2hTdGF0ZSYmdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEP3RoaXMuX2NsZWFyV2F0Y2goKTp2b2lkIDA9PT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsInRydWUiKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMpKX1lbHNlIHQuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMpLHRoaXMuX3RpbWVvdXRJZD1zZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaCwxZTQpO3JldHVybiEwfSxyLnByb3RvdHlwZS5fY2xlYXJXYXRjaD1mdW5jdGlvbigpe3QuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDAsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91cGRhdGVNYXJrZXIobnVsbCl9LHJ9KHQuRXZlbnRlZCksX249e21heFdpZHRoOjEwMCx1bml0OiJtZXRyaWMifSx3bj1mdW5jdGlvbihlKXt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sX24sZSksdC5iaW5kQWxsKFsiX29uTW92ZSIsInNldFVuaXQiXSx0aGlzKX07ZnVuY3Rpb24ga24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjPXImJnIubWF4V2lkdGh8fDEwMCx1PXQuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQvMixmPShuPXQudW5wcm9qZWN0KFswLHVdKSxpPXQudW5wcm9qZWN0KFtjLHVdKSxhPU1hdGguUEkvMTgwLG89bi5sYXQqYSxzPWkubGF0KmEsbD1NYXRoLnNpbihvKSpNYXRoLnNpbihzKStNYXRoLmNvcyhvKSpNYXRoLmNvcyhzKSpNYXRoLmNvcygoaS5sbmctbi5sbmcpKmEpLDYzNzFlMypNYXRoLmFjb3MoTWF0aC5taW4obCwxKSkpO2lmKHImJiJpbXBlcmlhbCI9PT1yLnVuaXQpe3ZhciBoPTMuMjgwOCpmO2g+NTI4MD9UbihlLGMsaC81MjgwLCJtaSIpOlRuKGUsYyxoLCJmdCIpfWVsc2UgciYmIm5hdXRpY2FsIj09PXIudW5pdD9UbihlLGMsZi8xODUyLCJubSIpOlRuKGUsYyxmLCJtIil9ZnVuY3Rpb24gVG4odCxlLHIsbil7dmFyIGksYSxvLHM9KGk9ciwoYT1NYXRoLnBvdygxMCwoIiIrTWF0aC5mbG9vcihpKSkubGVuZ3RoLTEpKSoobz0obz1pL2EpPj0xMD8xMDpvPj01PzU6bz49Mz8zOm8+PTI/MjoxKSksbD1zL3I7Im0iPT09biYmcz49MWUzJiYocy89MWUzLG49ImttIiksdC5zdHlsZS53aWR0aD1lKmwrInB4Iix0LmlubmVySFRNTD1zK259d24ucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LHduLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKCl7a24odGhpcy5fbWFwLHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMpfSx3bi5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLXNjYWxlIix0LmdldENvbnRhaW5lcigpKSx0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fb25Nb3ZlKCksdGhpcy5fY29udGFpbmVyfSx3bi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwPXZvaWQgMH0sd24ucHJvdG90eXBlLnNldFVuaXQ9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLnVuaXQ9dCxrbih0aGlzLl9tYXAsdGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucyl9O3ZhciBBbj1mdW5jdGlvbigpe3RoaXMuX2Z1bGxzY3JlZW49ITEsdC5iaW5kQWxsKFsiX29uQ2xpY2tGdWxsc2NyZWVuIiwiX2NoYW5nZUljb24iXSx0aGlzKSwib25mdWxsc2NyZWVuY2hhbmdlImluIHQuZGVmYXVsdC5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJmdWxsc2NyZWVuY2hhbmdlIjoib25tb3pmdWxsc2NyZWVuY2hhbmdlImluIHQuZGVmYXVsdC5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJtb3pmdWxsc2NyZWVuY2hhbmdlIjoib253ZWJraXRmdWxsc2NyZWVuY2hhbmdlImluIHQuZGVmYXVsdC5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIjoib25tc2Z1bGxzY3JlZW5jaGFuZ2UiaW4gdC5kZWZhdWx0LmRvY3VtZW50JiYodGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0iTVNGdWxsc2NyZWVuQ2hhbmdlIiksdGhpcy5fY2xhc3NOYW1lPSJtYXBib3hnbC1jdHJsIn07QW4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9tYXBDb250YWluZXI9dGhpcy5fbWFwLmdldENvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2Iix0aGlzLl9jbGFzc05hbWUrIiBtYXBib3hnbC1jdHJsLWdyb3VwIiksdGhpcy5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydCgpP3RoaXMuX3NldHVwVUkoKToodGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQud2Fybk9uY2UoIlRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVlbiBtb2RlLiIpKSx0aGlzLl9jb250YWluZXJ9LEFuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwPW51bGwsdC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSx0aGlzLl9jaGFuZ2VJY29uKX0sQW4ucHJvdG90eXBlLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuISEodC5kZWZhdWx0LmRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHx0LmRlZmF1bHQuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWR8fHQuZGVmYXVsdC5kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbmFibGVkfHx0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWQpfSxBbi5wcm90b3R5cGUuX3NldHVwVUk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mdWxsc2NyZWVuQnV0dG9uPXMuY3JlYXRlKCJidXR0b24iLHRoaXMuX2NsYXNzTmFtZSsiLWljb24gIit0aGlzLl9jbGFzc05hbWUrIi1mdWxsc2NyZWVuIix0aGlzLl9jb250YWluZXIpO2Uuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiVG9nZ2xlIGZ1bGxzY3JlZW4iKSxlLnR5cGU9ImJ1dHRvbiIsdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbGlja0Z1bGxzY3JlZW4pLHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsdGhpcy5fY2hhbmdlSWNvbil9LEFuLnByb3RvdHlwZS5faXNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Z1bGxzY3JlZW59LEFuLnByb3RvdHlwZS5fY2hhbmdlSWNvbj1mdW5jdGlvbigpeyh0LmRlZmF1bHQuZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fHQuZGVmYXVsdC5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8dC5kZWZhdWx0LmRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHx0LmRlZmF1bHQuZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudCk9PT10aGlzLl9tYXBDb250YWluZXIhPT10aGlzLl9mdWxsc2NyZWVuJiYodGhpcy5fZnVsbHNjcmVlbj0hdGhpcy5fZnVsbHNjcmVlbix0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC50b2dnbGUodGhpcy5fY2xhc3NOYW1lKyItc2hyaW5rIiksdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuX2NsYXNzTmFtZSsiLWZ1bGxzY3JlZW4iKSl9LEFuLnByb3RvdHlwZS5fb25DbGlja0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXt0aGlzLl9pc0Z1bGxzY3JlZW4oKT90LmRlZmF1bHQuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/dC5kZWZhdWx0LmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk6dC5kZWZhdWx0LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/dC5kZWZhdWx0LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTp0LmRlZmF1bHQuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbj90LmRlZmF1bHQuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpOnQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuJiZ0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpOnRoaXMuX21hcENvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbj90aGlzLl9tYXBDb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4/dGhpcy5fbWFwQ29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuKCk6dGhpcy5fbWFwQ29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4/dGhpcy5fbWFwQ29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4mJnRoaXMuX21hcENvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpfTt2YXIgTW49e2Nsb3NlQnV0dG9uOiEwLGNsb3NlT25DbGljazohMH0sU249ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKE9iamVjdC5jcmVhdGUoTW4pLHIpLHQuYmluZEFsbChbIl91cGRhdGUiLCJfb25DbGlja0Nsb3NlIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayYmdGhpcy5fbWFwLm9uKCJjbGljayIsdGhpcy5fb25DbGlja0Nsb3NlKSx0aGlzLl91cGRhdGUoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm9wZW4iKSksdGhpc30sci5wcm90b3R5cGUuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tYXB9LHIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50JiZzLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250YWluZXImJihzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSksZGVsZXRlIHRoaXMuX21hcCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJjbG9zZSIpKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxyLnByb3RvdHlwZS5zZXRMbmdMYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xuZ0xhdD1HLmNvbnZlcnQodCksdGhpcy5fcG9zPW51bGwsdGhpcy5fdXBkYXRlKCksdGhpc30sci5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9LHIucHJvdG90eXBlLnNldEhUTUw9ZnVuY3Rpb24oZSl7dmFyIHIsbj10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKTtmb3IoaS5pbm5lckhUTUw9ZTtyPWkuZmlyc3RDaGlsZDspbi5hcHBlbmRDaGlsZChyKTtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KG4pfSxyLnByb3RvdHlwZS5zZXRET01Db250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVDb250ZW50KCksdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxyLnByb3RvdHlwZS5fY3JlYXRlQ29udGVudD1mdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnMucmVtb3ZlKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRlbnQ9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLWNvbnRlbnQiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodGhpcy5fY2xvc2VCdXR0b249cy5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbiIsdGhpcy5fY29udGVudCksdGhpcy5fY2xvc2VCdXR0b24udHlwZT0iYnV0dG9uIix0aGlzLl9jbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJDbG9zZSBwb3B1cCIpLHRoaXMuX2Nsb3NlQnV0dG9uLmlubmVySFRNTD0iJiMyMTU7Iix0aGlzLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbGlja0Nsb3NlKSl9LHIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAmJnRoaXMuX2xuZ0xhdCYmdGhpcy5fY29udGVudCl7dGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cCIsdGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl90aXA9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLXRpcCIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY29udGVudCkpLHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLl9sbmdMYXQ9ZG4odGhpcy5fbG5nTGF0LHRoaXMuX3Bvcyx0aGlzLl9tYXAudHJhbnNmb3JtKSk7dmFyIGU9dGhpcy5fcG9zPXRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCkscj10aGlzLm9wdGlvbnMuYW5jaG9yLG49ZnVuY3Rpb24gZShyKXtpZihyKXtpZigibnVtYmVyIj09dHlwZW9mIHIpe3ZhciBuPU1hdGgucm91bmQoTWF0aC5zcXJ0KC41Kk1hdGgucG93KHIsMikpKTtyZXR1cm57Y2VudGVyOm5ldyB0LmRlZmF1bHQkMSgwLDApLHRvcDpuZXcgdC5kZWZhdWx0JDEoMCxyKSwidG9wLWxlZnQiOm5ldyB0LmRlZmF1bHQkMShuLG4pLCJ0b3AtcmlnaHQiOm5ldyB0LmRlZmF1bHQkMSgtbixuKSxib3R0b206bmV3IHQuZGVmYXVsdCQxKDAsLXIpLCJib3R0b20tbGVmdCI6bmV3IHQuZGVmYXVsdCQxKG4sLW4pLCJib3R0b20tcmlnaHQiOm5ldyB0LmRlZmF1bHQkMSgtbiwtbiksbGVmdDpuZXcgdC5kZWZhdWx0JDEociwwKSxyaWdodDpuZXcgdC5kZWZhdWx0JDEoLXIsMCl9fWlmKHIgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMXx8QXJyYXkuaXNBcnJheShyKSl7dmFyIGk9dC5kZWZhdWx0JDEuY29udmVydChyKTtyZXR1cm57Y2VudGVyOmksdG9wOmksInRvcC1sZWZ0IjppLCJ0b3AtcmlnaHQiOmksYm90dG9tOmksImJvdHRvbS1sZWZ0IjppLCJib3R0b20tcmlnaHQiOmksbGVmdDppLHJpZ2h0Oml9fXJldHVybntjZW50ZXI6dC5kZWZhdWx0JDEuY29udmVydChyLmNlbnRlcnx8WzAsMF0pLHRvcDp0LmRlZmF1bHQkMS5jb252ZXJ0KHIudG9wfHxbMCwwXSksInRvcC1sZWZ0Ijp0LmRlZmF1bHQkMS5jb252ZXJ0KHJbInRvcC1sZWZ0Il18fFswLDBdKSwidG9wLXJpZ2h0Ijp0LmRlZmF1bHQkMS5jb252ZXJ0KHJbInRvcC1yaWdodCJdfHxbMCwwXSksYm90dG9tOnQuZGVmYXVsdCQxLmNvbnZlcnQoci5ib3R0b218fFswLDBdKSwiYm90dG9tLWxlZnQiOnQuZGVmYXVsdCQxLmNvbnZlcnQoclsiYm90dG9tLWxlZnQiXXx8WzAsMF0pLCJib3R0b20tcmlnaHQiOnQuZGVmYXVsdCQxLmNvbnZlcnQoclsiYm90dG9tLXJpZ2h0Il18fFswLDBdKSxsZWZ0OnQuZGVmYXVsdCQxLmNvbnZlcnQoci5sZWZ0fHxbMCwwXSkscmlnaHQ6dC5kZWZhdWx0JDEuY29udmVydChyLnJpZ2h0fHxbMCwwXSl9fXJldHVybiBlKG5ldyB0LmRlZmF1bHQkMSgwLDApKX0odGhpcy5vcHRpb25zLm9mZnNldCk7aWYoIXIpe3ZhciBpLGE9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoLG89dGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodDtpPWUueStuLmJvdHRvbS55PG8/WyJ0b3AiXTplLnk+dGhpcy5fbWFwLnRyYW5zZm9ybS5oZWlnaHQtbz9bImJvdHRvbSJdOltdLGUueDxhLzI/aS5wdXNoKCJsZWZ0Iik6ZS54PnRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGgtYS8yJiZpLnB1c2goInJpZ2h0Iikscj0wPT09aS5sZW5ndGg/ImJvdHRvbSI6aS5qb2luKCItIil9dmFyIGw9ZS5hZGQobltyXSkucm91bmQoKTtzLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsZ25bcl0rIiB0cmFuc2xhdGUoIitsLngrInB4LCIrbC55KyJweCkiKSx2bih0aGlzLl9jb250YWluZXIsciwicG9wdXAiKX19LHIucHJvdG90eXBlLl9vbkNsaWNrQ2xvc2U9ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZSgpfSxyfSh0LkV2ZW50ZWQpLEVuPXt2ZXJzaW9uOiIwLjQ1LjAiLHN1cHBvcnRlZDplLHdvcmtlckNvdW50Ok1hdGgubWF4KE1hdGguZmxvb3IoYS5oYXJkd2FyZUNvbmN1cnJlbmN5LzIpLDEpLHNldFJUTFRleHRQbHVnaW46dC5zZXRSVExUZXh0UGx1Z2luLE1hcDp1bixOYXZpZ2F0aW9uQ29udHJvbDpwbixHZW9sb2NhdGVDb250cm9sOmJuLEF0dHJpYnV0aW9uQ29udHJvbDpubixTY2FsZUNvbnRyb2w6d24sRnVsbHNjcmVlbkNvbnRyb2w6QW4sUG9wdXA6U24sTWFya2VyOm1uLFN0eWxlOkplLExuZ0xhdDpHLExuZ0xhdEJvdW5kczpZLFBvaW50OnQuZGVmYXVsdCQxLEV2ZW50ZWQ6dC5FdmVudGVkLGNvbmZpZzp2LGdldCBhY2Nlc3NUb2tlbigpe3JldHVybiB2LkFDQ0VTU19UT0tFTn0sc2V0IGFjY2Vzc1Rva2VuKHQpe3YuQUNDRVNTX1RPS0VOPXR9LHdvcmtlclVybDoiIn07cmV0dXJuIEVufSksbn0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNDE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MTw8dCsxLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09YSh0LG4pO3JldHVybiByfTt2YXIgbj10KCJjb252ZXgtaHVsbCIpO2Z1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCksaT0wO2k8dDsrK2kpbltpXT0wLGk9PT1lJiYobltpXSs9LjUpLGk9PT1yJiYobltpXSs9LjUpO3JldHVybiBufWZ1bmN0aW9uIGEodCxlKXtpZigwPT09ZXx8ZT09PSgxPDx0KzEpLTEpcmV0dXJuW107Zm9yKHZhciByPVtdLGE9W10sbz0wO288PXQ7KytvKWlmKGUmMTw8byl7ci5wdXNoKGkodCxvLTEsby0xKSksYS5wdXNoKG51bGwpO2Zvcih2YXIgcz0wO3M8PXQ7KytzKX5lJjE8PHMmJihyLnB1c2goaSh0LG8tMSxzLTEpKSxhLnB1c2goW28sc10pKX12YXIgbD1uKHIpLGM9W107dDpmb3Iobz0wO288bC5sZW5ndGg7KytvKXt2YXIgdT1sW29dLGY9W107Zm9yKHM9MDtzPHUubGVuZ3RoOysrcyl7aWYoIWFbdVtzXV0pY29udGludWUgdDtmLnB1c2goYVt1W3NdXS5zbGljZSgpKX1jLnB1c2goZil9cmV0dXJuIGN9fSx7ImNvbnZleC1odWxsIjoxMjB9XSw0MjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL25vcm1hbGl6ZSIpLGk9dCgiZ2wtbWF0NC9jcmVhdGUiKSxhPXQoImdsLW1hdDQvY2xvbmUiKSxvPXQoImdsLW1hdDQvZGV0ZXJtaW5hbnQiKSxzPXQoImdsLW1hdDQvaW52ZXJ0IiksbD10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGM9e2xlbmd0aDp0KCJnbC12ZWMzL2xlbmd0aCIpLG5vcm1hbGl6ZTp0KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGRvdDp0KCJnbC12ZWMzL2RvdCIpLGNyb3NzOnQoImdsLXZlYzMvY3Jvc3MiKX0sdT1pKCksZj1pKCksaD1bMCwwLDAsMF0scD1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLGQ9WzAsMCwwXTtmdW5jdGlvbiBnKHQsZSxyLG4saSl7dFswXT1lWzBdKm4rclswXSppLHRbMV09ZVsxXSpuK3JbMV0qaSx0WzJdPWVbMl0qbityWzJdKml9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksdixtKXtpZihlfHwoZT1bMCwwLDBdKSxyfHwocj1bMCwwLDBdKSxpfHwoaT1bMCwwLDBdKSx2fHwodj1bMCwwLDAsMV0pLG18fChtPVswLDAsMCwxXSksIW4odSx0KSlyZXR1cm4hMTtpZihhKGYsdSksZlszXT0wLGZbN109MCxmWzExXT0wLGZbMTVdPTEsTWF0aC5hYnMobyhmKTwxZS04KSlyZXR1cm4hMTt2YXIgeSx4LGIsXyx3LGssVCxBPXVbM10sTT11WzddLFM9dVsxMV0sRT11WzEyXSxDPXVbMTNdLEw9dVsxNF0sej11WzE1XTtpZigwIT09QXx8MCE9PU18fDAhPT1TKXtpZihoWzBdPUEsaFsxXT1NLGhbMl09UyxoWzNdPXosIXMoZixmKSlyZXR1cm4hMTtsKGYsZikseT12LGI9ZixfPSh4PWgpWzBdLHc9eFsxXSxrPXhbMl0sVD14WzNdLHlbMF09YlswXSpfK2JbNF0qdytiWzhdKmsrYlsxMl0qVCx5WzFdPWJbMV0qXytiWzVdKncrYls5XSprK2JbMTNdKlQseVsyXT1iWzJdKl8rYls2XSp3K2JbMTBdKmsrYlsxNF0qVCx5WzNdPWJbM10qXytiWzddKncrYlsxMV0qaytiWzE1XSpUfWVsc2UgdlswXT12WzFdPXZbMl09MCx2WzNdPTE7aWYoZVswXT1FLGVbMV09QyxlWzJdPUwsZnVuY3Rpb24odCxlKXt0WzBdWzBdPWVbMF0sdFswXVsxXT1lWzFdLHRbMF1bMl09ZVsyXSx0WzFdWzBdPWVbNF0sdFsxXVsxXT1lWzVdLHRbMV1bMl09ZVs2XSx0WzJdWzBdPWVbOF0sdFsyXVsxXT1lWzldLHRbMl1bMl09ZVsxMF19KHAsdSksclswXT1jLmxlbmd0aChwWzBdKSxjLm5vcm1hbGl6ZShwWzBdLHBbMF0pLGlbMF09Yy5kb3QocFswXSxwWzFdKSxnKHBbMV0scFsxXSxwWzBdLDEsLWlbMF0pLHJbMV09Yy5sZW5ndGgocFsxXSksYy5ub3JtYWxpemUocFsxXSxwWzFdKSxpWzBdLz1yWzFdLGlbMV09Yy5kb3QocFswXSxwWzJdKSxnKHBbMl0scFsyXSxwWzBdLDEsLWlbMV0pLGlbMl09Yy5kb3QocFsxXSxwWzJdKSxnKHBbMl0scFsyXSxwWzFdLDEsLWlbMl0pLHJbMl09Yy5sZW5ndGgocFsyXSksYy5ub3JtYWxpemUocFsyXSxwWzJdKSxpWzFdLz1yWzJdLGlbMl0vPXJbMl0sYy5jcm9zcyhkLHBbMV0scFsyXSksYy5kb3QocFswXSxkKTwwKWZvcih2YXIgTz0wO088MztPKyspcltPXSo9LTEscFtPXVswXSo9LTEscFtPXVsxXSo9LTEscFtPXVsyXSo9LTE7cmV0dXJuIG1bMF09LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDErcFswXVswXS1wWzFdWzFdLXBbMl1bMl0sMCkpLG1bMV09LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDEtcFswXVswXStwWzFdWzFdLXBbMl1bMl0sMCkpLG1bMl09LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDEtcFswXVswXS1wWzFdWzFdK3BbMl1bMl0sMCkpLG1bM109LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDErcFswXVswXStwWzFdWzFdK3BbMl1bMl0sMCkpLHBbMl1bMV0+cFsxXVsyXSYmKG1bMF09LW1bMF0pLHBbMF1bMl0+cFsyXVswXSYmKG1bMV09LW1bMV0pLHBbMV1bMF0+cFswXVsxXSYmKG1bMl09LW1bMl0pLCEwfX0seyIuL25vcm1hbGl6ZSI6NDIxLCJnbC1tYXQ0L2Nsb25lIjoyNTUsImdsLW1hdDQvY3JlYXRlIjoyNTYsImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjI1NywiZ2wtbWF0NC9pbnZlcnQiOjI2MSwiZ2wtbWF0NC90cmFuc3Bvc2UiOjI3MiwiZ2wtdmVjMy9jcm9zcyI6MzI2LCJnbC12ZWMzL2RvdCI6MzMxLCJnbC12ZWMzL2xlbmd0aCI6MzQxLCJnbC12ZWMzL25vcm1hbGl6ZSI6MzQ4fV0sNDIxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVsxNV07aWYoMD09PXIpcmV0dXJuITE7Zm9yKHZhciBuPTEvcixpPTA7aTwxNjtpKyspdFtpXT1lW2ldKm47cmV0dXJuITB9fSx7fV0sNDIyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtdmVjMy9sZXJwIiksaT10KCJtYXQ0LXJlY29tcG9zZSIpLGE9dCgibWF0NC1kZWNvbXBvc2UiKSxvPXQoImdsLW1hdDQvZGV0ZXJtaW5hbnQiKSxzPXQoInF1YXQtc2xlcnAiKSxsPWYoKSxjPWYoKSx1PWYoKTtmdW5jdGlvbiBmKCl7cmV0dXJue3RyYW5zbGF0ZTpoKCksc2NhbGU6aCgxKSxza2V3OmgoKSxwZXJzcGVjdGl2ZTpbMCwwLDAsMV0scXVhdGVybmlvbjpbMCwwLDAsMV19fWZ1bmN0aW9uIGgodCl7cmV0dXJuW3R8fDAsdHx8MCx0fHwwXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7aWYoMD09PW8oZSl8fDA9PT1vKHIpKXJldHVybiExO3ZhciBoPWEoZSxsLnRyYW5zbGF0ZSxsLnNjYWxlLGwuc2tldyxsLnBlcnNwZWN0aXZlLGwucXVhdGVybmlvbikscD1hKHIsYy50cmFuc2xhdGUsYy5zY2FsZSxjLnNrZXcsYy5wZXJzcGVjdGl2ZSxjLnF1YXRlcm5pb24pO3JldHVybiEoIWh8fCFwfHwobih1LnRyYW5zbGF0ZSxsLnRyYW5zbGF0ZSxjLnRyYW5zbGF0ZSxmKSxuKHUuc2tldyxsLnNrZXcsYy5za2V3LGYpLG4odS5zY2FsZSxsLnNjYWxlLGMuc2NhbGUsZiksbih1LnBlcnNwZWN0aXZlLGwucGVyc3BlY3RpdmUsYy5wZXJzcGVjdGl2ZSxmKSxzKHUucXVhdGVybmlvbixsLnF1YXRlcm5pb24sYy5xdWF0ZXJuaW9uLGYpLGkodCx1LnRyYW5zbGF0ZSx1LnNjYWxlLHUuc2tldyx1LnBlcnNwZWN0aXZlLHUucXVhdGVybmlvbiksMCkpfX0seyJnbC1tYXQ0L2RldGVybWluYW50IjoyNTcsImdsLXZlYzMvbGVycCI6MzQyLCJtYXQ0LWRlY29tcG9zZSI6NDIwLCJtYXQ0LXJlY29tcG9zZSI6NDIzLCJxdWF0LXNsZXJwIjo0NzV9XSw0MjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17aWRlbnRpdHk6dCgiZ2wtbWF0NC9pZGVudGl0eSIpLHRyYW5zbGF0ZTp0KCJnbC1tYXQ0L3RyYW5zbGF0ZSIpLG11bHRpcGx5OnQoImdsLW1hdDQvbXVsdGlwbHkiKSxjcmVhdGU6dCgiZ2wtbWF0NC9jcmVhdGUiKSxzY2FsZTp0KCJnbC1tYXQ0L3NjYWxlIiksZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246dCgiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiIpfSxpPShuLmNyZWF0ZSgpLG4uY3JlYXRlKCkpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7cmV0dXJuIG4uaWRlbnRpdHkodCksbi5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0LHMsZSksdFszXT1vWzBdLHRbN109b1sxXSx0WzExXT1vWzJdLHRbMTVdPW9bM10sbi5pZGVudGl0eShpKSwwIT09YVsyXSYmKGlbOV09YVsyXSxuLm11bHRpcGx5KHQsdCxpKSksMCE9PWFbMV0mJihpWzldPTAsaVs4XT1hWzFdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVswXSYmKGlbOF09MCxpWzRdPWFbMF0sbi5tdWx0aXBseSh0LHQsaSkpLG4uc2NhbGUodCx0LHIpLHR9fSx7ImdsLW1hdDQvY3JlYXRlIjoyNTYsImdsLW1hdDQvZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iOjI1OSwiZ2wtbWF0NC9pZGVudGl0eSI6MjYwLCJnbC1tYXQ0L211bHRpcGx5IjoyNjMsImdsLW1hdDQvc2NhbGUiOjI3MCwiZ2wtbWF0NC90cmFuc2xhdGUiOjI3MX1dLDQyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9TWF0aC5sb2cyfHxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkqTWF0aC5MT0cyRX19LHt9XSw0MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoIm1hdDQtaW50ZXJwb2xhdGUiKSxhPXQoImdsLW1hdDQvaW52ZXJ0Iiksbz10KCJnbC1tYXQ0L3JvdGF0ZVgiKSxzPXQoImdsLW1hdDQvcm90YXRlWSIpLGw9dCgiZ2wtbWF0NC9yb3RhdGVaIiksYz10KCJnbC1tYXQ0L2xvb2tBdCIpLHU9dCgiZ2wtbWF0NC90cmFuc2xhdGUiKSxmPSh0KCJnbC1tYXQ0L3NjYWxlIiksdCgiZ2wtdmVjMy9ub3JtYWxpemUiKSksaD1bMCwwLDBdO2Z1bmN0aW9uIHAodCl7dGhpcy5fY29tcG9uZW50cz10LnNsaWNlKCksdGhpcy5fdGltZT1bMF0sdGhpcy5wcmV2TWF0cml4PXQuc2xpY2UoKSx0aGlzLm5leHRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRJbnZlcnNlPXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZFVwPVswLDAsMF0sdGhpcy5jb21wdXRlZENlbnRlcj1bMCwwLDBdLHRoaXMuY29tcHV0ZWRSYWRpdXM9WzBdLHRoaXMuX2xpbWl0cz1bLTEvMCwxLzBdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHAoKHQ9dHx8e30pLm1hdHJpeHx8WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKX07dmFyIGQ9cC5wcm90b3R5cGU7ZC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPW4ubGUoZSx0KSxvPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoIShyPDApKXt2YXIgcz10aGlzLl9jb21wb25lbnRzO2lmKHI9PT1lLmxlbmd0aC0xKWZvcih2YXIgbD0xNipyLGM9MDtjPDE2OysrYylvW2NdPXNbbCsrXTtlbHNle3ZhciB1PWVbcisxXS1lW3JdLGg9KGw9MTYqcix0aGlzLnByZXZNYXRyaXgpLHA9ITA7Zm9yKGM9MDtjPDE2OysrYyloW2NdPXNbbCsrXTt2YXIgZD10aGlzLm5leHRNYXRyaXg7Zm9yKGM9MDtjPDE2OysrYylkW2NdPXNbbCsrXSxwPXAmJmhbY109PT1kW2NdO2lmKHU8MWUtNnx8cClmb3IoYz0wO2M8MTY7KytjKW9bY109aFtjXTtlbHNlIGkobyxoLGQsKHQtZVtyXSkvdSl9dmFyIGc9dGhpcy5jb21wdXRlZFVwO2dbMF09b1sxXSxnWzFdPW9bNV0sZ1syXT1vWzldLGYoZyxnKTt2YXIgdj10aGlzLmNvbXB1dGVkSW52ZXJzZTthKHYsbyk7dmFyIG09dGhpcy5jb21wdXRlZEV5ZSx5PXZbMTVdO21bMF09dlsxMl0veSxtWzFdPXZbMTNdL3ksbVsyXT12WzE0XS95O3ZhciB4PXRoaXMuY29tcHV0ZWRDZW50ZXIsYj1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtmb3IoYz0wO2M8MzsrK2MpeFtjXT1tW2NdLW9bMis0KmNdKmJ9fSxkLmlkbGU9ZnVuY3Rpb24odCl7aWYoISh0PHRoaXMubGFzdFQoKSkpe2Zvcih2YXIgZT10aGlzLl9jb21wb25lbnRzLHI9ZS5sZW5ndGgtMTYsbj0wO248MTY7KytuKWUucHVzaChlW3IrK10pO3RoaXMuX3RpbWUucHVzaCh0KX19LGQuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9bi5ndCh0aGlzLl90aW1lLHQpLTI7ZTwwfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9jb21wb25lbnRzLnNwbGljZSgwLDE2KmUpKX0sZC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lW3RoaXMuX3RpbWUubGVuZ3RoLTFdfSxkLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHxoLG49bnx8dGhpcy5jb21wdXRlZFVwLHRoaXMuc2V0TWF0cml4KHQsYyh0aGlzLmNvbXB1dGVkTWF0cml4LGUscixuKSk7Zm9yKHZhciBpPTAsYT0wO2E8MzsrK2EpaSs9TWF0aC5wb3coclthXS1lW2FdLDIpO2k9TWF0aC5sb2coTWF0aC5zcXJ0KGkpKSx0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWl9LGQucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2UmJnMoaSxpLGUpLHImJm8oaSxpLHIpLG4mJmwoaSxpLG4pLHRoaXMuc2V0TWF0cml4KHQsYSh0aGlzLmNvbXB1dGVkTWF0cml4LGkpKX07dmFyIGc9WzAsMCwwXTtkLnBhbj1mdW5jdGlvbih0LGUscixuKXtnWzBdPS0oZXx8MCksZ1sxXT0tKHJ8fDApLGdbMl09LShufHwwKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkSW52ZXJzZTt1KGksaSxnKSx0aGlzLnNldE1hdHJpeCh0LGEoaSxpKSl9LGQudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2dbMF09ZXx8MCxnWzFdPXJ8fDAsZ1syXT1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7dShpLGksZyksdGhpcy5zZXRNYXRyaXgodCxpKX0sZC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgcj0wO3I8MTY7KytyKXRoaXMuX2NvbXBvbmVudHMucHVzaChlW3JdKX19LGQuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWV9LGQuc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9saW1pdHM7clswXT10LHJbMV09ZX0sZC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9saW1pdHM7cmV0dXJuIHQ/KHRbMF09ZVswXSx0WzFdPWVbMV0sdCk6ZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgxLCJnbC1tYXQ0L2ludmVydCI6MjYxLCJnbC1tYXQ0L2xvb2tBdCI6MjYyLCJnbC1tYXQ0L3JvdGF0ZVgiOjI2NywiZ2wtbWF0NC9yb3RhdGVZIjoyNjgsImdsLW1hdDQvcm90YXRlWiI6MjY5LCJnbC1tYXQ0L3NjYWxlIjoyNzAsImdsLW1hdDQvdHJhbnNsYXRlIjoyNzEsImdsLXZlYzMvbm9ybWFsaXplIjozNDgsIm1hdDQtaW50ZXJwb2xhdGUiOjQyMn1dLDQyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwzKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKXJbaV09aTtyZXR1cm4gMj09PWUmJnRbMF1bMF09PT10WzFdWzBdJiZ0WzBdWzFdPT09dFsxXVsxXT9bMF06cn1mb3IodmFyIGE9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWFbaV09aTthLnNvcnQoZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdWzBdLXRbcl1bMF07cmV0dXJuIG58fHRbZV1bMV0tdFtyXVsxXX0pO2Zvcih2YXIgbz1bYVswXSxhWzFdXSxzPVthWzBdLGFbMV1dLGk9MjtpPGU7KytpKXtmb3IodmFyIGw9YVtpXSxjPXRbbF0sdT1vLmxlbmd0aDt1PjEmJm4odFtvW3UtMl1dLHRbb1t1LTFdXSxjKTw9MDspdS09MSxvLnBvcCgpO2ZvcihvLnB1c2gobCksdT1zLmxlbmd0aDt1PjEmJm4odFtzW3UtMl1dLHRbc1t1LTFdXSxjKT49MDspdS09MSxzLnBvcCgpO3MucHVzaChsKX1mb3IodmFyIHI9bmV3IEFycmF5KHMubGVuZ3RoK28ubGVuZ3RoLTIpLGY9MCxpPTAsaD1vLmxlbmd0aDtpPGg7KytpKXJbZisrXT1vW2ldO2Zvcih2YXIgcD1zLmxlbmd0aC0yO3A+MDstLXApcltmKytdPXNbcF07cmV0dXJuIHJ9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NDk0fV0sNDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXQsdD13aW5kb3cpO3ZhciByPTAsaT0wLGE9MCxvPXtzaGlmdDohMSxhbHQ6ITEsY29udHJvbDohMSxtZXRhOiExfSxzPSExO2Z1bmN0aW9uIGwodCl7dmFyIGU9ITE7cmV0dXJuImFsdEtleSJpbiB0JiYoZT1lfHx0LmFsdEtleSE9PW8uYWx0LG8uYWx0PSEhdC5hbHRLZXkpLCJzaGlmdEtleSJpbiB0JiYoZT1lfHx0LnNoaWZ0S2V5IT09by5zaGlmdCxvLnNoaWZ0PSEhdC5zaGlmdEtleSksImN0cmxLZXkiaW4gdCYmKGU9ZXx8dC5jdHJsS2V5IT09by5jb250cm9sLG8uY29udHJvbD0hIXQuY3RybEtleSksIm1ldGFLZXkiaW4gdCYmKGU9ZXx8dC5tZXRhS2V5IT09by5tZXRhLG8ubWV0YT0hIXQubWV0YUtleSksZX1mdW5jdGlvbiBjKHQscyl7dmFyIGM9bi54KHMpLHU9bi55KHMpOyJidXR0b25zImluIHMmJih0PTB8cy5idXR0b25zKSwodCE9PXJ8fGMhPT1pfHx1IT09YXx8bChzKSkmJihyPTB8dCxpPWN8fDAsYT11fHwwLGUmJmUocixpLGEsbykpfWZ1bmN0aW9uIHUodCl7YygwLHQpfWZ1bmN0aW9uIGYoKXsocnx8aXx8YXx8by5zaGlmdHx8by5hbHR8fG8ubWV0YXx8by5jb250cm9sKSYmKGk9YT0wLHI9MCxvLnNoaWZ0PW8uYWx0PW8uY29udHJvbD1vLm1ldGE9ITEsZSYmZSgwLDAsMCxvKSl9ZnVuY3Rpb24gaCh0KXtsKHQpJiZlJiZlKHIsaSxhLG8pfWZ1bmN0aW9uIHAodCl7MD09PW4uYnV0dG9ucyh0KT9jKDAsdCk6YyhyLHQpfWZ1bmN0aW9uIGQodCl7YyhyfG4uYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiBnKHQpe2MociZ+bi5idXR0b25zKHQpLHQpfWZ1bmN0aW9uIHYoKXtzfHwocz0hMCx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscCksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZyksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksdC5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCksdCE9PXdpbmRvdyYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpKSl9digpO3ZhciBtPXtlbGVtZW50OnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhtLHtlbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc30sc2V0OmZ1bmN0aW9uKGUpe2U/digpOnMmJihzPSExLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsZCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixnKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSx0IT09d2luZG93JiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCkpKX0sZW51bWVyYWJsZTohMH0sYnV0dG9uczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGVudW1lcmFibGU6ITB9LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiBpfSxlbnVtZXJhYmxlOiEwfSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZW51bWVyYWJsZTohMH0sbW9kczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGVudW1lcmFibGU6ITB9fSksbX07dmFyIG49dCgibW91c2UtZXZlbnQiKX0seyJtb3VzZS1ldmVudCI6NDI5fV0sNDI4OltmdW5jdGlvbih0LGUscil7dmFyIG49e2xlZnQ6MCx0b3A6MH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgaT10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz0ocz1lLHM9PT13aW5kb3d8fHM9PT1kb2N1bWVudHx8cz09PWRvY3VtZW50LmJvZHk/bjpzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTt2YXIgcztyZXR1cm4gclswXT1pLW8ubGVmdCxyWzFdPWEtby50b3Ascn19LHt9XSw0Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudHx8d2luZG93fXIuYnV0dG9ucz1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJidXR0b25zImluIHQpcmV0dXJuIHQuYnV0dG9ucztpZigid2hpY2giaW4gdCl7aWYoMj09PShlPXQud2hpY2gpKXJldHVybiA0O2lmKDM9PT1lKXJldHVybiAyO2lmKGU+MClyZXR1cm4gMTw8ZS0xfWVsc2UgaWYoImJ1dHRvbiJpbiB0KXt2YXIgZTtpZigxPT09KGU9dC5idXR0b24pKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfSxyLmVsZW1lbnQ9bixyLng9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WCJpbiB0KXJldHVybiB0Lm9mZnNldFg7dmFyIGU9bih0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdC5jbGllbnRYLWUubGVmdH1yZXR1cm4gMH0sci55PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFkiaW4gdClyZXR1cm4gdC5vZmZzZXRZO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1lLnRvcH1yZXR1cm4gMH19LHt9XSw0MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidG8tcHgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYocj0hIWUsZT10LHQ9d2luZG93KTt2YXIgaT1uKCJleCIsdCksYT1mdW5jdGlvbih0KXtyJiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dC5kZWx0YVh8fDAsYT10LmRlbHRhWXx8MCxvPXQuZGVsdGFafHwwLHM9dC5kZWx0YU1vZGUsbD0xO3N3aXRjaChzKXtjYXNlIDE6bD1pO2JyZWFrO2Nhc2UgMjpsPXdpbmRvdy5pbm5lckhlaWdodH1pZihhKj1sLG8qPWwsKG4qPWwpfHxhfHxvKXJldHVybiBlKG4sYSxvLHQpfTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsYSksYX19LHsidG8tcHgiOjUyM31dLDQzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKTtmdW5jdGlvbiBpKHQpe3JldHVybiJhIit0fWZ1bmN0aW9uIGEodCl7cmV0dXJuImQiK3R9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiJjIit0KyJfIitlfWZ1bmN0aW9uIHModCl7cmV0dXJuInMiK3R9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiJ0Iit0KyJfIitlfWZ1bmN0aW9uIGModCl7cmV0dXJuIm8iK3R9ZnVuY3Rpb24gdSh0KXtyZXR1cm4ieCIrdH1mdW5jdGlvbiBmKHQpe3JldHVybiJwIit0fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4iZCIrdCsiXyIrZX1mdW5jdGlvbiBwKHQpe3JldHVybiJpIit0fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4idSIrdCsiXyIrZX1mdW5jdGlvbiBnKHQpe3JldHVybiJiIit0fWZ1bmN0aW9uIHYodCl7cmV0dXJuInkiK3R9ZnVuY3Rpb24gbSh0KXtyZXR1cm4iZSIrdH1mdW5jdGlvbiB5KHQpe3JldHVybiJ2Iit0fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3Rocm93IG5ldyBFcnJvcigibmRhcnJheS1leHRyYWN0LWNvbnRvdXI6ICIrdCl9Im9iamVjdCIhPXR5cGVvZiB0JiZlKCJNdXN0IHNwZWNpZnkgYXJndW1lbnRzIik7dmFyIHI9dC5vcmRlcjtBcnJheS5pc0FycmF5KHIpfHxlKCJNdXN0IHNwZWNpZnkgb3JkZXIiKTt2YXIgTT10LmFycmF5QXJndW1lbnRzfHwxO008MSYmZSgiTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBhcnJheSBhcmd1bWVudCIpO3ZhciBTPXQuc2NhbGFyQXJndW1lbnRzfHwwO1M8MCYmZSgiU2NhbGFyIGFyZyBjb3VudCBtdXN0IGJlID4gMCIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LnZlcnRleCYmZSgiTXVzdCBzcGVjaWZ5IHZlcnRleCBjcmVhdGlvbiBmdW5jdGlvbiIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LmNlbGwmJmUoIk11c3Qgc3BlY2lmeSBjZWxsIGNyZWF0aW9uIGZ1bmN0aW9uIik7ImZ1bmN0aW9uIiE9dHlwZW9mIHQucGhhc2UmJmUoIk11c3Qgc3BlY2lmeSBwaGFzZSBmdW5jdGlvbiIpO2Zvcih2YXIgRT10LmdldHRlcnN8fFtdLEM9bmV3IEFycmF5KE0pLEw9MDtMPE07KytMKUUuaW5kZXhPZihMKT49MD9DW0xdPSEwOkNbTF09ITE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLE0sUyxFKXt2YXIgQz1FLmxlbmd0aCxMPVMubGVuZ3RoO2lmKEw8Mil0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiBEaW1lbnNpb24gbXVzdCBiZSBhdCBsZWFzdCAyIik7Zm9yKHZhciB6PSJleHRyYWN0Q29udG91ciIrUy5qb2luKCJfIiksTz1bXSxJPVtdLEQ9W10sUD0wO1A8QzsrK1ApRC5wdXNoKGkoUCkpO2Zvcih2YXIgUD0wO1A8TTsrK1ApRC5wdXNoKHUoUCkpO2Zvcih2YXIgUD0wO1A8TDsrK1ApSS5wdXNoKHMoUCkrIj0iK2koMCkrIi5zaGFwZVsiK1ArIl18MCIpO2Zvcih2YXIgUD0wO1A8QzsrK1Ape0kucHVzaChhKFApKyI9IitpKFApKyIuZGF0YSIsYyhQKSsiPSIraShQKSsiLm9mZnNldHwwIik7Zm9yKHZhciBSPTA7UjxMOysrUilJLnB1c2gobChQLFIpKyI9IitpKFApKyIuc3RyaWRlWyIrUisiXXwwIil9Zm9yKHZhciBQPTA7UDxDOysrUCl7SS5wdXNoKGYoUCkrIj0iK2MoUCkpLEkucHVzaChvKFAsMCkpO2Zvcih2YXIgUj0xO1I8MTw8TDsrK1Ipe2Zvcih2YXIgRj1bXSxCPTA7QjxMOysrQilSJjE8PEImJkYucHVzaCgiLSIrbChQLEIpKTtJLnB1c2goaChQLFIpKyI9KCIrRi5qb2luKCIiKSsiKXwwIiksSS5wdXNoKG8oUCxSKSsiPTAiKX19Zm9yKHZhciBQPTA7UDxDOysrUClmb3IodmFyIFI9MDtSPEw7KytSKXt2YXIgTj1bbChQLFNbUl0pXTtSPjAmJk4ucHVzaChsKFAsU1tSLTFdKSsiKiIrcyhTW1ItMV0pKSxJLnB1c2goZChQLFNbUl0pKyI9KCIrTi5qb2luKCItIikrIil8MCIpfWZvcih2YXIgUD0wO1A8TDsrK1ApSS5wdXNoKHAoUCkrIj0wIik7SS5wdXNoKF8rIj0wIik7Zm9yKHZhciBqPVsiMiJdLFA9TC0yO1A+PTA7LS1QKWoucHVzaChzKFNbUF0pKTtJLnB1c2godysiPSgiK2ouam9pbigiKiIpKyIpfDAiLGIrIj1tYWxsb2NVaW50MzIoIit3KyIpIix4KyI9bWFsbG9jVWludDMyKCIrdysiKSIsaysiPTAiKSxJLnB1c2goZygwKSsiPTAiKTtmb3IodmFyIFI9MTtSPDE8PEw7KytSKXtmb3IodmFyIFY9W10sVT1bXSxCPTA7QjxMOysrQilSJjE8PEImJigwPT09VS5sZW5ndGg/Vi5wdXNoKCIxIik6Vi51bnNoaWZ0KFUuam9pbigiKiIpKSksVS5wdXNoKHMoU1tCXSkpO3ZhciBxPSIiO1ZbMF0uaW5kZXhPZihzKFNbTC0yXSkpPDAmJihxPSItIik7dmFyIEg9QShMLFIsUyk7SS5wdXNoKG0oSCkrIj0oLSIrVi5qb2luKCItIikrIil8MCIsdihIKSsiPSgiK3ErVi5qb2luKCItIikrIil8MCIsZyhIKSsiPTAiKX1mdW5jdGlvbiBHKHQsZSl7Ty5wdXNoKCJmb3IoIixwKFNbdF0pLCI9IixlLCI7IixwKFNbdF0pLCI8IixzKFNbdF0pLCI7IiwiKysiLHAoU1t0XSksIil7Iil9ZnVuY3Rpb24gWSh0KXtmb3IodmFyIGU9MDtlPEM7KytlKU8ucHVzaChmKGUpLCIrPSIsZChlLFNbdF0pLCI7Iik7Ty5wdXNoKCJ9Iil9ZnVuY3Rpb24gVygpe2Zvcih2YXIgdD0xO3Q8MTw8TDsrK3QpTy5wdXNoKFQsIj0iLG0odCksIjsiLG0odCksIj0iLHYodCksIjsiLHYodCksIj0iLFQsIjsiKX1JLnB1c2goeSgwKSsiPTAiLFQrIj0wIiksZnVuY3Rpb24gdChlLHIpe2lmKGU8MClyZXR1cm4gdm9pZCBmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPEM7KytlKUVbZV0/Ty5wdXNoKG8oZSwwKSwiPSIsYShlKSwiLmdldCgiLGYoZSksIik7Iik6Ty5wdXNoKG8oZSwwKSwiPSIsYShlKSwiWyIsZihlKSwiXTsiKTtmb3IodmFyIHI9W10sZT0wO2U8QzsrK2Upci5wdXNoKG8oZSwwKSk7Zm9yKHZhciBlPTA7ZTxNOysrZSlyLnB1c2godShlKSk7Ty5wdXNoKGcoMCksIj0iLGIsIlsiLGssIl09cGhhc2UoIixyLmpvaW4oKSwiKTsiKTtmb3IodmFyIG49MTtuPDE8PEw7KytuKU8ucHVzaChnKG4pLCI9IixiLCJbIixrLCIrIixtKG4pLCJdOyIpO2Zvcih2YXIgaT1bXSxuPTE7bjwxPDxMOysrbilpLnB1c2goIigiK2coMCkrIiE9PSIrZyhuKSsiKSIpO08ucHVzaCgiaWYoIixpLmpvaW4oInx8IiksIil7Iik7Zm9yKHZhciBzPVtdLGU9MDtlPEw7KytlKXMucHVzaChwKGUpKTtmb3IodmFyIGU9MDtlPEM7KytlKXtzLnB1c2gobyhlLDApKTtmb3IodmFyIG49MTtuPDE8PEw7KytuKUVbZV0/Ty5wdXNoKG8oZSxuKSwiPSIsYShlKSwiLmdldCgiLGYoZSksIisiLGgoZSxuKSwiKTsiKTpPLnB1c2gobyhlLG4pLCI9IixhKGUpLCJbIixmKGUpLCIrIixoKGUsbiksIl07Iikscy5wdXNoKG8oZSxuKSl9Zm9yKHZhciBlPTA7ZTwxPDxMOysrZSlzLnB1c2goZyhlKSk7Zm9yKHZhciBlPTA7ZTxNOysrZSlzLnB1c2godShlKSk7Ty5wdXNoKCJ2ZXJ0ZXgoIixzLmpvaW4oKSwiKTsiLHkoMCksIj0iLHgsIlsiLGssIl09IixfLCIrKzsiKTtmb3IodmFyIGw9KDE8PEwpLTEsYz1nKGwpLG49MDtuPEw7KytuKWlmKDA9PSh0Jn4oMTw8bikpKXtmb3IodmFyIGQ9bF4xPDxuLHY9ZyhkKSx3PVtdLFQ9ZDtUPjA7VD1ULTEmZCl3LnB1c2goeCsiWyIraysiKyIrbShUKSsiXSIpO3cucHVzaCh5KDApKTtmb3IodmFyIFQ9MDtUPEM7KytUKTEmbj93LnB1c2gobyhULGwpLG8oVCxkKSk6dy5wdXNoKG8oVCxkKSxvKFQsbCkpOzEmbj93LnB1c2goYyx2KTp3LnB1c2godixjKTtmb3IodmFyIFQ9MDtUPE07KytUKXcucHVzaCh1KFQpKTtPLnB1c2goImlmKCIsYywiIT09Iix2LCIpeyIsImZhY2UoIix3LmpvaW4oKSwiKX0iKX1PLnB1c2goIn0iLGssIis9MTsiKX0ocik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LTE7ZT49MDstLWUpRyhlLDApO2Zvcih2YXIgcj1bXSxlPTA7ZTxDOysrZSlFW2VdP3IucHVzaChhKGUpKyIuZ2V0KCIrZihlKSsiKSIpOnIucHVzaChhKGUpKyJbIitmKGUpKyJdIik7Zm9yKHZhciBlPTA7ZTxNOysrZSlyLnB1c2godShlKSk7Ty5wdXNoKGIsIlsiLGssIisrXT1waGFzZSgiLHIuam9pbigpLCIpOyIpO2Zvcih2YXIgZT0wO2U8dDsrK2UpWShlKTtmb3IodmFyIG49MDtuPEM7KytuKU8ucHVzaChmKG4pLCIrPSIsZChuLFNbdF0pLCI7Iil9KGUpO08ucHVzaCgiaWYoIixzKFNbZV0pLCI+MCl7IixwKFNbZV0pLCI9MTsiKTt0KGUtMSxyfDE8PFNbZV0pO2Zvcih2YXIgbj0wO248QzsrK24pTy5wdXNoKGYobiksIis9IixkKG4sU1tlXSksIjsiKTtlPT09TC0xJiYoTy5wdXNoKGssIj0wOyIpLFcoKSk7RyhlLDIpO3QoZS0xLHIpO2U9PT1MLTEmJihPLnB1c2goImlmKCIscChTW0wtMV0pLCImMSl7IixrLCI9MDt9IiksVygpKTtZKGUpO08ucHVzaCgifSIpfShMLTEsMCksTy5wdXNoKCJmcmVlVWludDMyKCIseCwiKTtmcmVlVWludDMyKCIsYiwiKTsiKTt2YXIgWD1bIid1c2Ugc3RyaWN0JzsiLCJmdW5jdGlvbiAiLHosIigiLEQuam9pbigpLCIpeyIsInZhciAiLEkuam9pbigpLCI7IixPLmpvaW4oIiIpLCJ9IiwicmV0dXJuICIsel0uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbigidmVydGV4IiwiZmFjZSIsInBoYXNlIiwibWFsbG9jVWludDMyIiwiZnJlZVVpbnQzMiIsWCkodCxlLHIsbi5tYWxsb2NVaW50MzIsbi5mcmVlVWludDMyKX0odC52ZXJ0ZXgsdC5jZWxsLHQucGhhc2UsUyxyLEMpfTt2YXIgeD0iViIsYj0iUCIsXz0iTiIsdz0iUSIsaz0iWCIsVD0iVCI7ZnVuY3Rpb24gQSh0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpZSYxPDxpJiYobnw9MTw8cltpXSk7cmV0dXJuIG59fSx7InR5cGVkYXJyYXktcG9vbCI6NTI5fV0sNDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2NhbGFyIl0scHJlOntib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzFfYXJnMV89X2lubGluZV8xX2FyZzJfLmFwcGx5KHZvaWQgMCxfaW5saW5lXzFfYXJnMF8pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToiY3dpc2UiLGJsb2NrU2l6ZTo2NH0pO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQsZSksdH19LHsiY3dpc2UvbGliL3dyYXBwZXIiOjEzOX1dLDQzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKEFycmF5LmlzQXJyYXkocikpe2lmKHIubGVuZ3RoIT09ZS5kaW1lbnNpb24pdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBpbnZhbGlkIGJvdW5kYXJ5IGNvbmRpdGlvbnMiKX1lbHNlIHI9bihlLmRpbWVuc2lvbiwic3RyaW5nIj09dHlwZW9mIHI/cjoiY2xhbXAiKTtpZih0LmRpbWVuc2lvbiE9PWUuZGltZW5zaW9uKzEpdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBvdXRwdXQgZGltZW5zaW9uIG11c3QgYmUgKzEgaW5wdXQgZGltZW5zaW9uIik7aWYodC5zaGFwZVtlLmRpbWVuc2lvbl0hPT1lLmRpbWVuc2lvbil0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IG91dHB1dCBzaGFwZSBtdXN0IG1hdGNoIGlucHV0IHNoYXBlIik7Zm9yKHZhciBpPTA7aTxlLmRpbWVuc2lvbjsrK2kpaWYodC5zaGFwZVtpXSE9PWUuc2hhcGVbaV0pdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBzaGFwZSBtaXNtYXRjaCIpO2lmKDA9PT1lLnNpemUpcmV0dXJuIHQ7aWYoZS5kaW1lbnNpb248PTApcmV0dXJuIHQuc2V0KDApLHQ7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQuam9pbigpO2lmKG09b1tlXSlyZXR1cm4gbTt2YXIgcj10Lmxlbmd0aCxuPVsiZnVuY3Rpb24gZ3JhZGllbnQoZHN0LHNyYyl7dmFyIHM9c3JjLnNoYXBlLnNsaWNlKCk7Il07ZnVuY3Rpb24gaShlKXtmb3IodmFyIGk9ci1lLmxlbmd0aCxhPVtdLG89W10scz1bXSxsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MD9zLnB1c2goIjAiKTplLmluZGV4T2YoLShsKzEpKT49MD9zLnB1c2goInNbIitsKyJdLTEiKToocy5wdXNoKCItMSIpLGEucHVzaCgiMSIpLG8ucHVzaCgic1siK2wrIl0tMiIpKTt2YXIgYz0iLmxvKCIrYS5qb2luKCkrIikuaGkoIitvLmpvaW4oKSsiKSI7aWYoMD09PWEubGVuZ3RoJiYoYz0iIiksaT4wKXtuLnB1c2goImlmKDEiKTtmb3IodmFyIGw9MDtsPHI7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8bi5wdXNoKCImJnNbIixsLCJdPjIiKTtuLnB1c2goIil7Z3JhZCIsaSwiKHNyYy5waWNrKCIscy5qb2luKCksIikiLGMpO2Zvcih2YXIgbD0wO2w8cjsrK2wpZS5pbmRleE9mKGwrMSk+PTB8fGUuaW5kZXhPZigtKGwrMSkpPj0wfHxuLnB1c2goIixkc3QucGljaygiLHMuam9pbigpLCIsIixsLCIpIixjKTtuLnB1c2goIik7Iil9Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciB1PU1hdGguYWJzKGVbbF0pLTEsZj0iZHN0LnBpY2soIitzLmpvaW4oKSsiLCIrdSsiKSIrYztzd2l0Y2godFt1XSl7Y2FzZSJjbGFtcCI6dmFyIGg9cy5zbGljZSgpLHA9cy5zbGljZSgpO2VbbF08MD9oW3VdPSJzWyIrdSsiXS0yIjpwW3VdPSIxIiwwPT09aT9uLnB1c2goImlmKHNbIix1LCJdPjEpe2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDAuNSooc3JjLmdldCgiLGguam9pbigpLCIpLXNyYy5nZXQoIixwLmpvaW4oKSwiKSkpfWVsc2V7ZHN0LnNldCgiLHMuam9pbigpLCIsIix1LCIsMCl9OyIpOm4ucHVzaCgiaWYoc1siLHUsIl0+MSl7ZGlmZigiLGYsIixzcmMucGljaygiLGguam9pbigpLCIpIixjLCIsc3JjLnBpY2soIixwLmpvaW4oKSwiKSIsYywiKTt9ZWxzZXt6ZXJvKCIsZiwiKTt9OyIpO2JyZWFrO2Nhc2UibWlycm9yIjowPT09aT9uLnB1c2goImRzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDApOyIpOm4ucHVzaCgiemVybygiLGYsIik7Iik7YnJlYWs7Y2FzZSJ3cmFwIjp2YXIgZD1zLnNsaWNlKCksZz1zLnNsaWNlKCk7ZVtsXTwwPyhkW3VdPSJzWyIrdSsiXS0yIixnW3VdPSIwIik6KGRbdV09InNbIit1KyJdLTEiLGdbdV09IjEiKSwwPT09aT9uLnB1c2goImlmKHNbIix1LCJdPjIpe2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDAuNSooc3JjLmdldCgiLGQuam9pbigpLCIpLXNyYy5nZXQoIixnLmpvaW4oKSwiKSkpfWVsc2V7ZHN0LnNldCgiLHMuam9pbigpLCIsIix1LCIsMCl9OyIpOm4ucHVzaCgiaWYoc1siLHUsIl0+Mil7ZGlmZigiLGYsIixzcmMucGljaygiLGQuam9pbigpLCIpIixjLCIsc3JjLnBpY2soIixnLmpvaW4oKSwiKSIsYywiKTt9ZWxzZXt6ZXJvKCIsZiwiKTt9OyIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBJbnZhbGlkIGJvdW5kYXJ5IGNvbmRpdGlvbiIpfX1pPjAmJm4ucHVzaCgifTsiKX1mb3IodmFyIHM9MDtzPDE8PHI7KytzKXtmb3IodmFyIGY9W10saD0wO2g8cjsrK2gpcyYxPDxoJiZmLnB1c2goaCsxKTtmb3IodmFyIHA9MDtwPDE8PGYubGVuZ3RoOysrcCl7Zm9yKHZhciBkPWYuc2xpY2UoKSxoPTA7aDxmLmxlbmd0aDsrK2gpcCYxPDxoJiYoZFtoXT0tZFtoXSk7aShkKX19bi5wdXNoKCJyZXR1cm4gZHN0O307cmV0dXJuIGdyYWRpZW50Iik7Zm9yKHZhciBnPVsiZGlmZiIsInplcm8iXSx2PVtsLGNdLHM9MTtzPD1yOysrcylnLnB1c2goImdyYWQiK3MpLHYucHVzaCh1KHMpKTtnLnB1c2gobi5qb2luKCIiKSk7dmFyIG09RnVuY3Rpb24uYXBwbHkodm9pZCAwLGcpLmFwcGx5KHZvaWQgMCx2KTtyZXR1cm4gYVtlXT1tLG19KHIpKHQsZSl9O3ZhciBuPXQoImR1cCIpLGk9dCgiY3dpc2UtY29tcGlsZXIiKSxhPXt9LG89e30scz17Ym9keToiIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sbD1pKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnMscG9zdDpzLGJvZHk6e2FyZ3M6W3tuYW1lOiJvdXQiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6ImxlZnQiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6InJpZ2h0IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJvdXQ9MC41KihsZWZ0LXJpZ2h0KSIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiY2RpZmYifSksYz1pKHthcmdzOlsiYXJyYXkiXSxwcmU6cyxwb3N0OnMsYm9keTp7YXJnczpbe25hbWU6Im91dCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfV0sYm9keToib3V0PTAiLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6Inplcm8ifSk7ZnVuY3Rpb24gdSh0KXtpZih0IGluIGEpcmV0dXJuIGFbdF07Zm9yKHZhciBlPVtdLHI9MDtyPHQ7KytyKWUucHVzaCgib3V0IixyLCJzPTAuNSooaW5wIixyLCJsLWlucCIsciwicik7Iik7dmFyIG89WyJhcnJheSJdLGw9WyJqdW5rIl07Zm9yKHI9MDtyPHQ7KytyKXtvLnB1c2goImFycmF5IiksbC5wdXNoKCJvdXQiK3IrInMiKTt2YXIgYz1uKHQpO2Nbcl09LTEsby5wdXNoKHthcnJheTowLG9mZnNldDpjLnNsaWNlKCl9KSxjW3JdPTEsby5wdXNoKHthcnJheTowLG9mZnNldDpjLnNsaWNlKCl9KSxsLnB1c2goImlucCIrcisibCIsImlucCIrcisiciIpfXJldHVybiBhW3RdPWkoe2FyZ3M6byxwcmU6cyxwb3N0OnMsYm9keTp7Ym9keTplLmpvaW4oIiIpLGFyZ3M6bC5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dCxsdmFsdWU6MD09PXQuaW5kZXhPZigib3V0IikscnZhbHVlOjA9PT10LmluZGV4T2YoImlucCIpLGNvdW50OiJqdW5rIiE9PXR8MH19KSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJmZFRlbXBsYXRlIit0fSl9fSx7ImN3aXNlLWNvbXBpbGVyIjoxMzYsZHVwOjE2MX1dLDQzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJuZGFycmF5LXdhcnAiKSxpPXQoImdsLW1hdHJpeC1pbnZlcnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWUuZGltZW5zaW9uLG89aShbXSxyKTtyZXR1cm4gbih0LGUsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGE7KytyKXt0W3JdPW9bKGErMSkqYStyXTtmb3IodmFyIG49MDtuPGE7KytuKXRbcl0rPW9bKGErMSkqbityXSplW25dfXZhciBpPW9bKGErMSkqKGErMSktMV07Zm9yKG49MDtuPGE7KytuKWkrPW9bKGErMSkqbithXSplW25dO3ZhciBzPTEvaTtmb3Iocj0wO3I8YTsrK3IpdFtyXSo9cztyZXR1cm4gdH0pLHR9fSx7ImdsLW1hdHJpeC1pbnZlcnQiOjI3MywibmRhcnJheS13YXJwIjo0NDF9XSw0MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPU1hdGguZmxvb3IoZSksbj1lLXIsaT0wPD1yJiZyPHQuc2hhcGVbMF0sYT0wPD1yKzEmJnIrMTx0LnNoYXBlWzBdO3JldHVybigxLW4pKihpPyt0LmdldChyKTowKStuKihhPyt0LmdldChyKzEpOjApfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPU1hdGguZmxvb3IoZSksaT1lLW4sYT0wPD1uJiZuPHQuc2hhcGVbMF0sbz0wPD1uKzEmJm4rMTx0LnNoYXBlWzBdLHM9TWF0aC5mbG9vcihyKSxsPXItcyxjPTA8PXMmJnM8dC5zaGFwZVsxXSx1PTA8PXMrMSYmcysxPHQuc2hhcGVbMV0sZj1hJiZjP3QuZ2V0KG4scyk6MCxoPWEmJnU/dC5nZXQobixzKzEpOjA7cmV0dXJuKDEtbCkqKCgxLWkpKmYraSoobyYmYz90LmdldChuKzEscyk6MCkpK2wqKCgxLWkpKmgraSoobyYmdT90LmdldChuKzEscysxKTowKSl9ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaT1NYXRoLmZsb29yKGUpLGE9ZS1pLG89MDw9aSYmaTx0LnNoYXBlWzBdLHM9MDw9aSsxJiZpKzE8dC5zaGFwZVswXSxsPU1hdGguZmxvb3IociksYz1yLWwsdT0wPD1sJiZsPHQuc2hhcGVbMV0sZj0wPD1sKzEmJmwrMTx0LnNoYXBlWzFdLGg9TWF0aC5mbG9vcihuKSxwPW4taCxkPTA8PWgmJmg8dC5zaGFwZVsyXSxnPTA8PWgrMSYmaCsxPHQuc2hhcGVbMl0sdj1vJiZ1JiZkP3QuZ2V0KGksbCxoKTowLG09byYmZiYmZD90LmdldChpLGwrMSxoKTowLHk9cyYmdSYmZD90LmdldChpKzEsbCxoKTowLHg9cyYmZiYmZD90LmdldChpKzEsbCsxLGgpOjAsYj1vJiZ1JiZnP3QuZ2V0KGksbCxoKzEpOjAsXz1vJiZmJiZnP3QuZ2V0KGksbCsxLGgrMSk6MDtyZXR1cm4oMS1wKSooKDEtYykqKCgxLWEpKnYrYSp5KStjKigoMS1hKSptK2EqeCkpK3AqKCgxLWMpKigoMS1hKSpiK2EqKHMmJnUmJmc/dC5nZXQoaSsxLGwsaCsxKTowKSkrYyooKDEtYSkqXythKihzJiZmJiZnP3QuZ2V0KGkrMSxsKzEsaCsxKTowKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtzd2l0Y2godC5zaGFwZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIG4odCxlKTtjYXNlIDI6cmV0dXJuIGkodCxlLHIpO2Nhc2UgMzpyZXR1cm4gYSh0LGUscixvKTtkZWZhdWx0OnJldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyLG49MHx0LnNoYXBlLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2Upcj0rYXJndW1lbnRzW2UrMV0saVtlXT1NYXRoLmZsb29yKHIpLGFbZV09ci1pW2VdLG9bZV09MDw9aVtlXSYmaVtlXTx0LnNoYXBlW2VdLHNbZV09MDw9aVtlXSsxJiZpW2VdKzE8dC5zaGFwZVtlXTt2YXIgbCxjLHUsZj0wO3Q6Zm9yKGU9MDtlPDE8PG47KytlKXtmb3IoYz0xLHU9dC5vZmZzZXQsbD0wO2w8bjsrK2wpaWYoZSYxPDxsKXtpZighc1tsXSljb250aW51ZSB0O2MqPWFbbF0sdSs9dC5zdHJpZGVbbF0qKGlbbF0rMSl9ZWxzZXtpZighb1tsXSljb250aW51ZSB0O2MqPTEtYVtsXSx1Kz10LnN0cmlkZVtsXSppW2xdfWYrPWMqdC5kYXRhW3VdfXJldHVybiBmfS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19LGUuZXhwb3J0cy5kMT1uLGUuZXhwb3J0cy5kMj1pLGUuZXhwb3J0cy5kMz1hfSx7fV0sNDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImN3aXNlLWNvbXBpbGVyIiksaT17Ym9keToiIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX07ZnVuY3Rpb24gYSh0KXtpZighdClyZXR1cm4gaTtmb3IodmFyIGU9MDtlPHQuYXJncy5sZW5ndGg7KytlKXt2YXIgcj10LmFyZ3NbZV07dC5hcmdzW2VdPTA9PT1lP3tuYW1lOnIsbHZhbHVlOiEwLHJ2YWx1ZTohIXQucnZhbHVlLGNvdW50OnQuY291bnR8fDF9OntuYW1lOnIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfX1yZXR1cm4gdC50aGlzVmFyc3x8KHQudGhpc1ZhcnM9W10pLHQubG9jYWxWYXJzfHwodC5sb2NhbFZhcnM9W10pLHR9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5hcmdzLmxlbmd0aDsrK3IpZS5wdXNoKCJhIityKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJQIixbInJldHVybiBmdW5jdGlvbiAiLHQuZnVuY05hbWUsIl9uZGFycmF5b3BzKCIsZS5qb2luKCIsIiksIikge1AoIixlLmpvaW4oIiwiKSwiKTtyZXR1cm4gYTB9Il0uam9pbigiIikpKGZ1bmN0aW9uKHQpe3JldHVybiBuKHthcmdzOnQuYXJncyxwcmU6YSh0LnByZSksYm9keTphKHQuYm9keSkscG9zdDphKHQucHJvYyksZnVuY05hbWU6dC5mdW5jTmFtZX0pfSh0KSl9dmFyIHM9e2FkZDoiKyIsc3ViOiItIixtdWw6IioiLGRpdjoiLyIsbW9kOiIlIixiYW5kOiImIixib3I6InwiLGJ4b3I6Il4iLGxzaGlmdDoiPDwiLHJzaGlmdDoiPj4iLHJyc2hpZnQ6Ij4+PiJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzKXt2YXIgZT1zW3RdO3JbdF09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPWIiK2UrImMifSxmdW5jTmFtZTp0fSksclt0KyJlcSJdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYSIrZSsiPWIifSxydmFsdWU6ITAsZnVuY05hbWU6dCsiZXEifSksclt0KyJzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsImIiLCJzIl0sYm9keToiYT1iIitlKyJzIn0sZnVuY05hbWU6dCsicyJ9KSxyW3QrInNlcSJdPW8oe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwicyJdLGJvZHk6ImEiK2UrIj1zIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrInNlcSJ9KX19KCk7dmFyIGw9e25vdDoiISIsYm5vdDoifiIsbmVnOiItIixyZWNpcDoiMS4wLyJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBsKXt2YXIgZT1sW3RdO3JbdF09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPSIrZSsiYiJ9LGZ1bmNOYW1lOnR9KSxyW3QrImVxIl09byh7YXJnczpbImFycmF5Il0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPSIrZSsiYSJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pfX0oKTt2YXIgYz17YW5kOiImJiIsb3I6Inx8IixlcToiPT09IixuZXE6IiE9PSIsbHQ6IjwiLGd0OiI+IixsZXE6Ijw9IixnZXE6Ij49In07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIGMpe3ZhciBlPWNbdF07clt0XT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9YiIrZSsiYyJ9LGZ1bmNOYW1lOnR9KSxyW3QrInMiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsInMiXSxib2R5OiJhPWIiK2UrInMifSxmdW5jTmFtZTp0KyJzIn0pLHJbdCsiZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9YSIrZSsiYiJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pLHJbdCsic2VxIl09byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJzIl0sYm9keToiYT1hIitlKyJzIn0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6dCsic2VxIn0pfX0oKTt2YXIgdT1bImFicyIsImFjb3MiLCJhc2luIiwiYXRhbiIsImNlaWwiLCJjb3MiLCJleHAiLCJmbG9vciIsImxvZyIsInJvdW5kIiwic2luIiwic3FydCIsInRhbiJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dS5sZW5ndGg7Kyt0KXt2YXIgZT11W3RdO3JbZV09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJlcSJdPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZihhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSl9fSgpO3ZhciBmPVsibWF4IiwibWluIiwiYXRhbjIiLCJwb3ciXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdCl7dmFyIGU9Zlt0XTtyW2VdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplKyJzIn0pLHJbZSsiZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYSxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSkscltlKyJzZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGEsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrInNlcSJ9KX19KCk7dmFyIGg9WyJhdGFuMiIsInBvdyJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8aC5sZW5ndGg7Kyt0KXt2YXIgZT1oW3RdO3JbZSsib3AiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYyxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZSsib3AifSkscltlKyJvcHMiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9dGhpc19mKGMsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOmUrIm9wcyJ9KSxyW2UrIm9wZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYixhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsib3BlcSJ9KSxyW2UrIm9wc2VxIl09byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihiLGEpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJvcHNlcSJ9KX19KCksci5hbnk9bih7YXJnczpbImFycmF5Il0scHJlOmksYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6ImlmKGEpe3JldHVybiB0cnVlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gZmFsc2UifSxmdW5jTmFtZToiYW55In0pLHIuYWxsPW4oe2FyZ3M6WyJhcnJheSJdLHByZTppLGJvZHk6e2FyZ3M6W3tuYW1lOiJ4IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJpZigheCl7cmV0dXJuIGZhbHNlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gdHJ1ZSJ9LGZ1bmNOYW1lOiJhbGwifSksci5zdW09bih7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6InRoaXNfcys9YSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJzdW0ifSksci5wcm9kPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MSJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJ0aGlzX3MqPWEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToicHJvZCJ9KSxyLm5vcm0yc3F1YXJlZD1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keToidGhpc19zKz1hKmEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybTJzcXVhcmVkIn0pLHIubm9ybTI9bih7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLGJvZHk6InRoaXNfcys9YSphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gTWF0aC5zcXJ0KHRoaXNfcykifSxmdW5jTmFtZToibm9ybTIifSksci5ub3JtaW5mPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjR9XSxib2R5OiJpZigtYT50aGlzX3Mpe3RoaXNfcz0tYX1lbHNlIGlmKGE+dGhpc19zKXt0aGlzX3M9YX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybWluZiJ9KSxyLm5vcm0xPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjN9XSxib2R5OiJ0aGlzX3MrPWE8MD8tYTphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6Im5vcm0xIn0pLHIuc3VwPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7Ym9keToidGhpc19oPS1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPnRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmluZj1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2JvZHk6InRoaXNfaD1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPHRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21pbj1uKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9IixhcmdzOlt7bmFtZToiX2lubGluZV8wX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMF9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzFfYXJnMV88dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaSIsInRoaXNfdiJdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9rIl19LHBvc3Q6e2JvZHk6IntyZXR1cm4gdGhpc19pfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaSJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21heD1uKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PS1JbmZpbml0eTt0aGlzX2k9X2lubGluZV8wX2FyZzJfLnNsaWNlKDApfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV8xX2FyZzFfPnRoaXNfdil7dGhpc192PV9pbmxpbmVfMV9hcmcxXztmb3IodmFyIF9pbmxpbmVfMV9rPTA7X2lubGluZV8xX2s8X2lubGluZV8xX2FyZzBfLmxlbmd0aDsrK19pbmxpbmVfMV9rKXt0aGlzX2lbX2lubGluZV8xX2tdPV9pbmxpbmVfMV9hcmcwX1tfaW5saW5lXzFfa119fX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfayJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuIHRoaXNfaX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2kiXSxsb2NhbFZhcnM6W119fSksci5yYW5kb209byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLnJhbmRvbSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZigpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZToicmFuZG9tIn0pLHIuYXNzaWduPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbiJ9KSxyLmFzc2lnbnM9byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbnMifSksci5lcXVhbHM9bih7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6aSxib2R5OnthcmdzOlt7bmFtZToieCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToieSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToiaWYoeCE9PXkpe3JldHVybiBmYWxzZX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keToicmV0dXJuIHRydWUifSxmdW5jTmFtZToiZXF1YWxzIn0pfSx7ImN3aXNlLWNvbXBpbGVyIjoxMzZ9XSw0Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgiLi9kb0NvbnZlcnQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10LG89MTtBcnJheS5pc0FycmF5KGEpOylyLnB1c2goYS5sZW5ndGgpLG8qPWEubGVuZ3RoLGE9YVswXTtyZXR1cm4gMD09PXIubGVuZ3RoP24oKTooZXx8KGU9bihuZXcgRmxvYXQ2NEFycmF5KG8pLHIpKSxpKGUsdCksZSl9fSx7Ii4vZG9Db252ZXJ0LmpzIjo0MzgsbmRhcnJheTo0NDJ9XSw0Mzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiY3dpc2UtY29tcGlsZXIiKSh7YXJnczpbImFycmF5Iiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie1xudmFyIF9pbmxpbmVfMV92PV9pbmxpbmVfMV9hcmcxXyxfaW5saW5lXzFfaVxuZm9yKF9pbmxpbmVfMV9pPTA7X2lubGluZV8xX2k8X2lubGluZV8xX2FyZzJfLmxlbmd0aC0xOysrX2lubGluZV8xX2kpIHtcbl9pbmxpbmVfMV92PV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfaV1dXG59XG5faW5saW5lXzFfYXJnMF89X2lubGluZV8xX3ZbX2lubGluZV8xX2FyZzJfW19pbmxpbmVfMV9hcmcyXy5sZW5ndGgtMV1dXG59IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOlsiX2lubGluZV8xX2kiLCJfaW5saW5lXzFfdiJdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjb252ZXJ0IixibG9ja1NpemU6NjR9KX0seyJjd2lzZS1jb21waWxlciI6MTM2fV0sNDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9MzI7ZnVuY3Rpb24gYSh0KXtzd2l0Y2godCl7Y2FzZSJ1aW50OCI6cmV0dXJuW24ubWFsbG9jVWludDgsbi5mcmVlVWludDhdO2Nhc2UidWludDE2IjpyZXR1cm5bbi5tYWxsb2NVaW50MTYsbi5mcmVlVWludDE2XTtjYXNlInVpbnQzMiI6cmV0dXJuW24ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMl07Y2FzZSJpbnQ4IjpyZXR1cm5bbi5tYWxsb2NJbnQ4LG4uZnJlZUludDhdO2Nhc2UiaW50MTYiOnJldHVybltuLm1hbGxvY0ludDE2LG4uZnJlZUludDE2XTtjYXNlImludDMyIjpyZXR1cm5bbi5tYWxsb2NJbnQzMixuLmZyZWVJbnQzMl07Y2FzZSJmbG9hdDMyIjpyZXR1cm5bbi5tYWxsb2NGbG9hdCxuLmZyZWVGbG9hdF07Y2FzZSJmbG9hdDY0IjpyZXR1cm5bbi5tYWxsb2NEb3VibGUsbi5mcmVlRG91YmxlXTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goInMiK3IpO2ZvcihyPTA7cjx0OysrcillLnB1c2goIm4iK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImQiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImUiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImYiK3IpO3JldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVsiJ3VzZSBzdHJpY3QnIl0sbj1bIm5kYXJyYXlTb3J0V3JhcHBlciIsdC5qb2luKCJkIiksZV0uam9pbigiIik7ci5wdXNoKFsiZnVuY3Rpb24gIixuLCIoIixbImFycmF5Il0uam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIHM9WyJkYXRhPWFycmF5LmRhdGEsb2Zmc2V0PWFycmF5Lm9mZnNldHwwLHNoYXBlPWFycmF5LnNoYXBlLHN0cmlkZT1hcnJheS5zdHJpZGUiXSxsPTA7bDx0Lmxlbmd0aDsrK2wpcy5wdXNoKFsicyIsbCwiPXN0cmlkZVsiLGwsIl18MCxuIixsLCI9c2hhcGVbIixsLCJdfDAiXS5qb2luKCIiKSk7dmFyIGM9bmV3IEFycmF5KHQubGVuZ3RoKSx1PVtdO2ZvcihsPTA7bDx0Lmxlbmd0aDsrK2wpMCE9PShwPXRbbF0pJiYoMD09PXUubGVuZ3RoP2NbcF09IjEiOmNbcF09dS5qb2luKCIqIiksdS5wdXNoKCJuIitwKSk7dmFyIGY9LTEsaD0tMTtmb3IobD0wO2w8dC5sZW5ndGg7KytsKXt2YXIgcCxkPXRbbF07MCE9PWQmJihmPjA/cy5wdXNoKFsiZCIsZCwiPXMiLGQsIi1kIixmLCIqbiIsZl0uam9pbigiIikpOnMucHVzaChbImQiLGQsIj1zIixkXS5qb2luKCIiKSksZj1kKSwwIT0ocD10Lmxlbmd0aC0xLWwpJiYoaD4wP3MucHVzaChbImUiLHAsIj1zIixwLCItZSIsaCwiKm4iLGgsIixmIixwLCI9IixjW3BdLCItZiIsaCwiKm4iLGhdLmpvaW4oIiIpKTpzLnB1c2goWyJlIixwLCI9cyIscCwiLGYiLHAsIj0iLGNbcF1dLmpvaW4oIiIpKSxoPXApfXIucHVzaCgidmFyICIrcy5qb2luKCIsIikpO3ZhciBnPVsiMCIsIm4wLTEiLCJkYXRhIiwib2Zmc2V0Il0uY29uY2F0KG8odC5sZW5ndGgpKTtyLnB1c2goWyJpZihuMDw9IixpLCIpeyIsImluc2VydGlvblNvcnQoIixnLmpvaW4oIiwiKSwiKX1lbHNleyIsInF1aWNrU29ydCgiLGcuam9pbigiLCIpLCIpfSJdLmpvaW4oIiIpKSxyLnB1c2goIn1yZXR1cm4gIituKTt2YXIgdj1uZXcgRnVuY3Rpb24oImluc2VydGlvblNvcnQiLCJxdWlja1NvcnQiLHIuam9pbigiXG4iKSksbT1mdW5jdGlvbih0LGUpe3ZhciByPVsiJ3VzZSBzdHJpY3QnIl0sbj1bIm5kYXJyYXlJbnNlcnRpb25Tb3J0Iix0LmpvaW4oImQiKSxlXS5qb2luKCIiKSxpPVsibGVmdCIsInJpZ2h0IiwiZGF0YSIsIm9mZnNldCJdLmNvbmNhdChvKHQubGVuZ3RoKSkscz1hKGUpLGw9WyJpLGosY3B0cixwdHI9bGVmdCpzMCtvZmZzZXQiXTtpZih0Lmxlbmd0aD4xKXtmb3IodmFyIGM9W10sdT0xO3U8dC5sZW5ndGg7Kyt1KWwucHVzaCgiaSIrdSksYy5wdXNoKCJuIit1KTtzP2wucHVzaCgic2NyYXRjaD1tYWxsb2MoIitjLmpvaW4oIioiKSsiKSIpOmwucHVzaCgic2NyYXRjaD1uZXcgQXJyYXkoIitjLmpvaW4oIioiKSsiKSIpLGwucHVzaCgiZHB0ciIsInNwdHIiLCJhIiwiYiIpfWVsc2UgbC5wdXNoKCJzY3JhdGNoIik7ZnVuY3Rpb24gZih0KXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5nZXQoIix0LCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXSJdLmpvaW4oIiIpfWZ1bmN0aW9uIGgodCxyKXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5zZXQoIix0LCIsIixyLCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXT0iLHJdLmpvaW4oIiIpfWlmKHIucHVzaChbImZ1bmN0aW9uICIsbiwiKCIsaS5qb2luKCIsIiksIil7dmFyICIsbC5qb2luKCIsIildLmpvaW4oIiIpLCJmb3IoaT1sZWZ0KzE7aTw9cmlnaHQ7KytpKXsiLCJqPWk7cHRyKz1zMCIsImNwdHI9cHRyIiksdC5sZW5ndGg+MSl7Zm9yKHIucHVzaCgiZHB0cj0wO3NwdHI9cHRyIiksdT10Lmxlbmd0aC0xO3U+PTA7LS11KTAhPT0ocD10W3VdKSYmci5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKTtmb3Ioci5wdXNoKCJzY3JhdGNoW2RwdHIrK109IixmKCJzcHRyIikpLHU9MDt1PHQubGVuZ3RoOysrdSkwIT09KHA9dFt1XSkmJnIucHVzaCgic3B0cis9ZCIrcCwifSIpO2ZvcihyLnB1c2goIl9fZzp3aGlsZShqLS1ceDNlbGVmdCl7IiwiZHB0cj0wIiwic3B0cj1jcHRyLXMwIiksdT0xO3U8dC5sZW5ndGg7Kyt1KTE9PT11JiZyLnB1c2goIl9fbDoiKSxyLnB1c2goWyJmb3IoaSIsdSwiPTA7aSIsdSwiPG4iLHUsIjsrK2kiLHUsIil7Il0uam9pbigiIikpO2ZvcihyLnB1c2goWyJhPSIsZigic3B0ciIpLCJcbmI9c2NyYXRjaFtkcHRyXVxuaWYoYTxiKXticmVhayBfX2d9XG5pZihhPmIpe2JyZWFrIF9fbH0iXS5qb2luKCIiKSksdT10Lmxlbmd0aC0xO3U+PTE7LS11KXIucHVzaCgic3B0cis9ZSIrdSwiZHB0cis9ZiIrdSwifSIpO2ZvcihyLnB1c2goImRwdHI9Y3B0cjtzcHRyPWNwdHItczAiKSx1PXQubGVuZ3RoLTE7dT49MDstLXUpMCE9PShwPXRbdV0pJiZyLnB1c2goWyJmb3IoaSIscCwiPTA7aSIscCwiPG4iLHAsIjsrK2kiLHAsIil7Il0uam9pbigiIikpO2ZvcihyLnB1c2goaCgiZHB0ciIsZigic3B0ciIpKSksdT0wO3U8dC5sZW5ndGg7Kyt1KTAhPT0ocD10W3VdKSYmci5wdXNoKFsiZHB0cis9ZCIscCwiO3NwdHIrPWQiLHBdLmpvaW4oIiIpLCJ9Iik7Zm9yKHIucHVzaCgiY3B0ci09czBcbn0iKSxyLnB1c2goImRwdHI9Y3B0cjtzcHRyPTAiKSx1PXQubGVuZ3RoLTE7dT49MDstLXUpMCE9PShwPXRbdV0pJiZyLnB1c2goWyJmb3IoaSIscCwiPTA7aSIscCwiPG4iLHAsIjsrK2kiLHAsIil7Il0uam9pbigiIikpO2ZvcihyLnB1c2goaCgiZHB0ciIsInNjcmF0Y2hbc3B0cisrXSIpKSx1PTA7dTx0Lmxlbmd0aDsrK3Upe3ZhciBwOzAhPT0ocD10W3VdKSYmci5wdXNoKCJkcHRyKz1kIitwLCJ9Iil9fWVsc2Ugci5wdXNoKCJzY3JhdGNoPSIrZigicHRyIiksIndoaWxlKChqLS1ceDNlbGVmdCkmJigiK2YoImNwdHItczAiKSsiPnNjcmF0Y2gpKXsiLGgoImNwdHIiLGYoImNwdHItczAiKSksImNwdHItPXMwIiwifSIsaCgiY3B0ciIsInNjcmF0Y2giKSk7cmV0dXJuIHIucHVzaCgifSIpLHQubGVuZ3RoPjEmJnMmJnIucHVzaCgiZnJlZShzY3JhdGNoKSIpLHIucHVzaCgifSByZXR1cm4gIituKSxzP25ldyBGdW5jdGlvbigibWFsbG9jIiwiZnJlZSIsci5qb2luKCJcbiIpKShzWzBdLHNbMV0pOm5ldyBGdW5jdGlvbihyLmpvaW4oIlxuIikpKCl9KHQsZSkseT1mdW5jdGlvbih0LGUscil7dmFyIG49WyIndXNlIHN0cmljdCciXSxzPVsibmRhcnJheVF1aWNrU29ydCIsdC5qb2luKCJkIiksZV0uam9pbigiIiksbD1bImxlZnQiLCJyaWdodCIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQobyh0Lmxlbmd0aCkpLGM9YShlKSx1PTA7bi5wdXNoKFsiZnVuY3Rpb24gIixzLCIoIixsLmpvaW4oIiwiKSwiKXsiXS5qb2luKCIiKSk7dmFyIGY9WyJzaXh0aD0oKHJpZ2h0LWxlZnQrMSkvNil8MCIsImluZGV4MT1sZWZ0K3NpeHRoIiwiaW5kZXg1PXJpZ2h0LXNpeHRoIiwiaW5kZXgzPShsZWZ0K3JpZ2h0KT4+MSIsImluZGV4Mj1pbmRleDMtc2l4dGgiLCJpbmRleDQ9aW5kZXgzK3NpeHRoIiwiZWwxPWluZGV4MSIsImVsMj1pbmRleDIiLCJlbDM9aW5kZXgzIiwiZWw0PWluZGV4NCIsImVsNT1pbmRleDUiLCJsZXNzPWxlZnQrMSIsImdyZWF0PXJpZ2h0LTEiLCJwaXZvdHNfYXJlX2VxdWFsPXRydWUiLCJ0bXAiLCJ0bXAwIiwieCIsInkiLCJ6IiwiayIsInB0cjAiLCJwdHIxIiwicHRyMiIsImNvbXBfcGl2b3QxPTAiLCJjb21wX3Bpdm90Mj0wIiwiY29tcD0wIl07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBoPVtdLHA9MTtwPHQubGVuZ3RoOysrcCloLnB1c2goIm4iK3ApLGYucHVzaCgiaSIrcCk7Zm9yKHA9MDtwPDg7KytwKWYucHVzaCgiYl9wdHIiK3ApO2YucHVzaCgicHRyMyIsInB0cjQiLCJwdHI1IiwicHRyNiIsInB0cjciLCJwaXZvdF9wdHIiLCJwdHJfc2hpZnQiLCJlbGVtZW50U2l6ZT0iK2guam9pbigiKiIpKSxjP2YucHVzaCgicGl2b3QxPW1hbGxvYyhlbGVtZW50U2l6ZSkiLCJwaXZvdDI9bWFsbG9jKGVsZW1lbnRTaXplKSIpOmYucHVzaCgicGl2b3QxPW5ldyBBcnJheShlbGVtZW50U2l6ZSkscGl2b3QyPW5ldyBBcnJheShlbGVtZW50U2l6ZSkiKX1lbHNlIGYucHVzaCgicGl2b3QxIiwicGl2b3QyIik7ZnVuY3Rpb24gZCh0KXtyZXR1cm5bIihvZmZzZXQrIix0LCIqczApIl0uam9pbigiIil9ZnVuY3Rpb24gZyh0KXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5nZXQoIix0LCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXSJdLmpvaW4oIiIpfWZ1bmN0aW9uIHYodCxyKXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5zZXQoIix0LCIsIixyLCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXT0iLHJdLmpvaW4oIiIpfWZ1bmN0aW9uIG0oZSxyLGkpe2lmKDE9PT1lLmxlbmd0aCluLnB1c2goInB0cjA9IitkKGVbMF0pKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKW4ucHVzaChbImJfcHRyIixhLCI9czAqIixlW2FdXS5qb2luKCIiKSk7Zm9yKHImJm4ucHVzaCgicGl2b3RfcHRyPTAiKSxuLnB1c2goInB0cl9zaGlmdD1vZmZzZXQiKSxhPXQubGVuZ3RoLTE7YT49MDstLWEpMCE9PShvPXRbYV0pJiZuLnB1c2goWyJmb3IoaSIsbywiPTA7aSIsbywiPG4iLG8sIjsrK2kiLG8sIil7Il0uam9pbigiIikpO2lmKGUubGVuZ3RoPjEpZm9yKGE9MDthPGUubGVuZ3RoOysrYSluLnB1c2goWyJwdHIiLGEsIj1iX3B0ciIsYSwiK3B0cl9zaGlmdCJdLmpvaW4oIiIpKTtmb3Iobi5wdXNoKGkpLHImJm4ucHVzaCgiKytwaXZvdF9wdHIiKSxhPTA7YTx0Lmxlbmd0aDsrK2Epe3ZhciBvOzAhPT0obz10W2FdKSYmKGUubGVuZ3RoPjE/bi5wdXNoKCJwdHJfc2hpZnQrPWQiK28pOm4ucHVzaCgicHRyMCs9ZCIrbyksbi5wdXNoKCJ9IikpfX1mdW5jdGlvbiB5KGUscixpLGEpe2lmKDE9PT1yLmxlbmd0aCluLnB1c2goInB0cjA9IitkKHJbMF0pKTtlbHNle2Zvcih2YXIgbz0wO288ci5sZW5ndGg7KytvKW4ucHVzaChbImJfcHRyIixvLCI9czAqIixyW29dXS5qb2luKCIiKSk7bi5wdXNoKCJwdHJfc2hpZnQ9b2Zmc2V0Iil9Zm9yKGkmJm4ucHVzaCgicGl2b3RfcHRyPTAiKSxlJiZuLnB1c2goZSsiOiIpLG89MTtvPHQubGVuZ3RoOysrbyluLnB1c2goWyJmb3IoaSIsbywiPTA7aSIsbywiPG4iLG8sIjsrK2kiLG8sIil7Il0uam9pbigiIikpO2lmKHIubGVuZ3RoPjEpZm9yKG89MDtvPHIubGVuZ3RoOysrbyluLnB1c2goWyJwdHIiLG8sIj1iX3B0ciIsbywiK3B0cl9zaGlmdCJdLmpvaW4oIiIpKTtmb3Iobi5wdXNoKGEpLG89dC5sZW5ndGgtMTtvPj0xOy0tbylpJiZuLnB1c2goInBpdm90X3B0cis9ZiIrbyksci5sZW5ndGg+MT9uLnB1c2goInB0cl9zaGlmdCs9ZSIrbyk6bi5wdXNoKCJwdHIwKz1lIitvKSxuLnB1c2goIn0iKX1mdW5jdGlvbiB4KCl7dC5sZW5ndGg+MSYmYyYmbi5wdXNoKCJmcmVlKHBpdm90MSkiLCJmcmVlKHBpdm90MikiKX1mdW5jdGlvbiBiKGUscil7dmFyIGk9ImVsIitlLGE9ImVsIityO2lmKHQubGVuZ3RoPjEpe3ZhciBvPSJfX2wiKyArK3U7eShvLFtpLGFdLCExLFsiY29tcD0iLGcoInB0cjAiKSwiLSIsZygicHRyMSIpLCJcbiIsImlmKGNvbXA+MCl7dG1wMD0iLGksIjsiLGksIj0iLGEsIjsiLGEsIj10bXAwO2JyZWFrICIsbywifVxuIiwiaWYoY29tcDwwKXticmVhayAiLG8sIn0iXS5qb2luKCIiKSl9ZWxzZSBuLnB1c2goWyJpZigiLGcoZChpKSksIj4iLGcoZChhKSksIil7dG1wMD0iLGksIjsiLGksIj0iLGEsIjsiLGEsIj10bXAwfSJdLmpvaW4oIiIpKX1mdW5jdGlvbiBfKGUscil7dC5sZW5ndGg+MT9tKFtlLHJdLCExLHYoInB0cjAiLGcoInB0cjEiKSkpOm4ucHVzaCh2KGQoZSksZyhkKHIpKSkpfWZ1bmN0aW9uIHcoZSxyLGkpe2lmKHQubGVuZ3RoPjEpe3ZhciBhPSJfX2wiKyArK3U7eShhLFtyXSwhMCxbZSwiPSIsZygicHRyMCIpLCItcGl2b3QiLGksIltwaXZvdF9wdHJdXG4iLCJpZigiLGUsIiE9PTApe2JyZWFrICIsYSwifSJdLmpvaW4oIiIpKX1lbHNlIG4ucHVzaChbZSwiPSIsZyhkKHIpKSwiLXBpdm90IixpXS5qb2luKCIiKSl9ZnVuY3Rpb24gayhlLHIpe3QubGVuZ3RoPjE/bShbZSxyXSwhMSxbInRtcD0iLGcoInB0cjAiKSwiXG4iLHYoInB0cjAiLGcoInB0cjEiKSksIlxuIix2KCJwdHIxIiwidG1wIildLmpvaW4oIiIpKTpuLnB1c2goWyJwdHIwPSIsZChlKSwiXG4iLCJwdHIxPSIsZChyKSwiXG4iLCJ0bXA9IixnKCJwdHIwIiksIlxuIix2KCJwdHIwIixnKCJwdHIxIikpLCJcbiIsdigicHRyMSIsInRtcCIpXS5qb2luKCIiKSl9ZnVuY3Rpb24gVChlLHIsaSl7dC5sZW5ndGg+MT8obShbZSxyLGldLCExLFsidG1wPSIsZygicHRyMCIpLCJcbiIsdigicHRyMCIsZygicHRyMSIpKSwiXG4iLHYoInB0cjEiLGcoInB0cjIiKSksIlxuIix2KCJwdHIyIiwidG1wIildLmpvaW4oIiIpKSxuLnB1c2goIisrIityLCItLSIraSkpOm4ucHVzaChbInB0cjA9IixkKGUpLCJcbiIsInB0cjE9IixkKHIpLCJcbiIsInB0cjI9IixkKGkpLCJcbiIsIisrIixyLCJcbiIsIi0tIixpLCJcbiIsInRtcD0iLGcoInB0cjAiKSwiXG4iLHYoInB0cjAiLGcoInB0cjEiKSksIlxuIix2KCJwdHIxIixnKCJwdHIyIikpLCJcbiIsdigicHRyMiIsInRtcCIpXS5qb2luKCIiKSl9ZnVuY3Rpb24gQSh0LGUpe2sodCxlKSxuLnB1c2goIi0tIitlKX1mdW5jdGlvbiBNKGUscixpKXt0Lmxlbmd0aD4xP20oW2Uscl0sITAsW3YoInB0cjAiLGcoInB0cjEiKSksIlxuIix2KCJwdHIxIixbInBpdm90IixpLCJbcGl2b3RfcHRyXSJdLmpvaW4oIiIpKV0uam9pbigiIikpOm4ucHVzaCh2KGQoZSksZyhkKHIpKSksdihkKHIpLCJwaXZvdCIraSkpfWZ1bmN0aW9uIFMoZSxyKXtuLnB1c2goWyJpZigoIixyLCItIixlLCIpPD0iLGksIil7XG4iLCJpbnNlcnRpb25Tb3J0KCIsZSwiLCIsciwiLGRhdGEsb2Zmc2V0LCIsbyh0Lmxlbmd0aCkuam9pbigiLCIpLCIpXG4iLCJ9ZWxzZXtcbiIscywiKCIsZSwiLCIsciwiLGRhdGEsb2Zmc2V0LCIsbyh0Lmxlbmd0aCkuam9pbigiLCIpLCIpXG4iLCJ9Il0uam9pbigiIikpfWZ1bmN0aW9uIEUoZSxyLGkpe3QubGVuZ3RoPjE/KG4ucHVzaChbIl9fbCIsKyt1LCI6d2hpbGUodHJ1ZSl7Il0uam9pbigiIikpLG0oW2VdLCEwLFsiaWYoIixnKCJwdHIwIiksIiE9PXBpdm90IixyLCJbcGl2b3RfcHRyXSl7YnJlYWsgX19sIix1LCJ9Il0uam9pbigiIikpLG4ucHVzaChpLCJ9IikpOm4ucHVzaChbIndoaWxlKCIsZyhkKGUpKSwiPT09cGl2b3QiLHIsIil7IixpLCJ9Il0uam9pbigiIikpfXJldHVybiBuLnB1c2goInZhciAiK2Yuam9pbigiLCIpKSxiKDEsMiksYig0LDUpLGIoMSwzKSxiKDIsMyksYigxLDQpLGIoMyw0KSxiKDIsNSksYigyLDMpLGIoNCw1KSx0Lmxlbmd0aD4xP20oWyJlbDEiLCJlbDIiLCJlbDMiLCJlbDQiLCJlbDUiLCJpbmRleDEiLCJpbmRleDMiLCJpbmRleDUiXSwhMCxbInBpdm90MVtwaXZvdF9wdHJdPSIsZygicHRyMSIpLCJcbiIsInBpdm90MltwaXZvdF9wdHJdPSIsZygicHRyMyIpLCJcbiIsInBpdm90c19hcmVfZXF1YWw9cGl2b3RzX2FyZV9lcXVhbCYmKHBpdm90MVtwaXZvdF9wdHJdPT09cGl2b3QyW3Bpdm90X3B0cl0pXG4iLCJ4PSIsZygicHRyMCIpLCJcbiIsInk9IixnKCJwdHIyIiksIlxuIiwiej0iLGcoInB0cjQiKSwiXG4iLHYoInB0cjUiLCJ4IiksIlxuIix2KCJwdHI2IiwieSIpLCJcbiIsdigicHRyNyIsInoiKV0uam9pbigiIikpOm4ucHVzaChbInBpdm90MT0iLGcoZCgiZWwyIikpLCJcbiIsInBpdm90Mj0iLGcoZCgiZWw0IikpLCJcbiIsInBpdm90c19hcmVfZXF1YWw9cGl2b3QxPT09cGl2b3QyXG4iLCJ4PSIsZyhkKCJlbDEiKSksIlxuIiwieT0iLGcoZCgiZWwzIikpLCJcbiIsIno9IixnKGQoImVsNSIpKSwiXG4iLHYoZCgiaW5kZXgxIiksIngiKSwiXG4iLHYoZCgiaW5kZXgzIiksInkiKSwiXG4iLHYoZCgiaW5kZXg1IiksInoiKV0uam9pbigiIikpLF8oImluZGV4MiIsImxlZnQiKSxfKCJpbmRleDQiLCJyaWdodCIpLG4ucHVzaCgiaWYocGl2b3RzX2FyZV9lcXVhbCl7Iiksbi5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IiksdygiY29tcCIsImsiLDEpLG4ucHVzaCgiaWYoY29tcD09PTApe2NvbnRpbnVlfSIpLG4ucHVzaCgiaWYoY29tcDwwKXsiKSxuLnB1c2goImlmKGshPT1sZXNzKXsiKSxrKCJrIiwibGVzcyIpLG4ucHVzaCgifSIpLG4ucHVzaCgiKytsZXNzIiksbi5wdXNoKCJ9ZWxzZXsiKSxuLnB1c2goIndoaWxlKHRydWUpeyIpLHcoImNvbXAiLCJncmVhdCIsMSksbi5wdXNoKCJpZihjb21wPjApeyIpLG4ucHVzaCgiZ3JlYXQtLSIpLG4ucHVzaCgifWVsc2UgaWYoY29tcDwwKXsiKSxUKCJrIiwibGVzcyIsImdyZWF0Iiksbi5wdXNoKCJicmVhayIpLG4ucHVzaCgifWVsc2V7IiksQSgiayIsImdyZWF0Iiksbi5wdXNoKCJicmVhayIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifWVsc2V7Iiksbi5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IiksdygiY29tcF9waXZvdDEiLCJrIiwxKSxuLnB1c2goImlmKGNvbXBfcGl2b3QxPDApeyIpLG4ucHVzaCgiaWYoayE9PWxlc3MpeyIpLGsoImsiLCJsZXNzIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCIrK2xlc3MiKSxuLnB1c2goIn1lbHNleyIpLHcoImNvbXBfcGl2b3QyIiwiayIsMiksbi5wdXNoKCJpZihjb21wX3Bpdm90Mj4wKXsiKSxuLnB1c2goIndoaWxlKHRydWUpeyIpLHcoImNvbXAiLCJncmVhdCIsMiksbi5wdXNoKCJpZihjb21wPjApeyIpLG4ucHVzaCgiaWYoLS1ncmVhdDxrKXticmVha30iKSxuLnB1c2goImNvbnRpbnVlIiksbi5wdXNoKCJ9ZWxzZXsiKSx3KCJjb21wIiwiZ3JlYXQiLDEpLG4ucHVzaCgiaWYoY29tcDwwKXsiKSxUKCJrIiwibGVzcyIsImdyZWF0Iiksbi5wdXNoKCJ9ZWxzZXsiKSxBKCJrIiwiZ3JlYXQiKSxuLnB1c2goIn0iKSxuLnB1c2goImJyZWFrIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9IiksTSgibGVmdCIsIihsZXNzLTEpIiwxKSxNKCJyaWdodCIsIihncmVhdCsxKSIsMiksUygibGVmdCIsIihsZXNzLTIpIiksUygiKGdyZWF0KzIpIiwicmlnaHQiKSxuLnB1c2goImlmKHBpdm90c19hcmVfZXF1YWwpeyIpLHgoKSxuLnB1c2goInJldHVybiIpLG4ucHVzaCgifSIpLG4ucHVzaCgiaWYobGVzczxpbmRleDEmJmdyZWF0PmluZGV4NSl7IiksRSgibGVzcyIsMSwiKytsZXNzIiksRSgiZ3JlYXQiLDIsIi0tZ3JlYXQiKSxuLnB1c2goImZvcihrPWxlc3M7azw9Z3JlYXQ7KytrKXsiKSx3KCJjb21wX3Bpdm90MSIsImsiLDEpLG4ucHVzaCgiaWYoY29tcF9waXZvdDE9PT0wKXsiKSxuLnB1c2goImlmKGshPT1sZXNzKXsiKSxrKCJrIiwibGVzcyIpLG4ucHVzaCgifSIpLG4ucHVzaCgiKytsZXNzIiksbi5wdXNoKCJ9ZWxzZXsiKSx3KCJjb21wX3Bpdm90MiIsImsiLDIpLG4ucHVzaCgiaWYoY29tcF9waXZvdDI9PT0wKXsiKSxuLnB1c2goIndoaWxlKHRydWUpeyIpLHcoImNvbXAiLCJncmVhdCIsMiksbi5wdXNoKCJpZihjb21wPT09MCl7Iiksbi5wdXNoKCJpZigtLWdyZWF0PGspe2JyZWFrfSIpLG4ucHVzaCgiY29udGludWUiKSxuLnB1c2goIn1lbHNleyIpLHcoImNvbXAiLCJncmVhdCIsMSksbi5wdXNoKCJpZihjb21wPDApeyIpLFQoImsiLCJsZXNzIiwiZ3JlYXQiKSxuLnB1c2goIn1lbHNleyIpLEEoImsiLCJncmVhdCIpLG4ucHVzaCgifSIpLG4ucHVzaCgiYnJlYWsiKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSx4KCksUygibGVzcyIsImdyZWF0Iiksbi5wdXNoKCJ9cmV0dXJuICIrcyksdC5sZW5ndGg+MSYmYz9uZXcgRnVuY3Rpb24oImluc2VydGlvblNvcnQiLCJtYWxsb2MiLCJmcmVlIixuLmpvaW4oIlxuIikpKHIsY1swXSxjWzFdKTpuZXcgRnVuY3Rpb24oImluc2VydGlvblNvcnQiLG4uam9pbigiXG4iKSkocil9KHQsZSxtKTtyZXR1cm4gdihtLHkpfX0seyJ0eXBlZGFycmF5LXBvb2wiOjUyOX1dLDQ0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9jb21waWxlX3NvcnQuanMiKSxpPXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yZGVyLHI9dC5kdHlwZSxhPVtlLHJdLmpvaW4oIjoiKSxvPWlbYV07cmV0dXJuIG98fChpW2FdPW89bihlLHIpKSxvKHQpLHR9fSx7Ii4vbGliL2NvbXBpbGVfc29ydC5qcyI6NDM5fV0sNDQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIiksaT10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciIsInNjYWxhciIsInNjYWxhciJdLHByZTp7Ym9keToie3RoaXNfd2FycGVkPW5ldyBBcnJheShfaW5saW5lXzNfYXJnNF8pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfM19hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8zX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzNfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfM19hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8zX2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV80X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfNF9hcmcwXyksX2lubGluZV80X2FyZzFfPV9pbmxpbmVfNF9hcmczXy5hcHBseSh2b2lkIDAsdGhpc193YXJwZWQpfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfNF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80X2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzRfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNF9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80X2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwTkQiLGJsb2NrU2l6ZTo2NH0pLGE9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1bMF19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzdfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV83X2FyZzBfKSxfaW5saW5lXzdfYXJnMV89X2lubGluZV83X2FyZzNfKF9pbmxpbmVfN19hcmc0Xyx0aGlzX3dhcnBlZFswXSl9IixhcmdzOlt7bmFtZToiX2lubGluZV83X2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzdfYXJnMV8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfN19hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV83X2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzdfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6IndhcnAxRCIsYmxvY2tTaXplOjY0fSksbz10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciIsInNjYWxhciIsInNjYWxhciJdLHByZTp7Ym9keToie3RoaXNfd2FycGVkPVswLDBdfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV8xMF9hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzEwX2FyZzBfKSxfaW5saW5lXzEwX2FyZzFfPV9pbmxpbmVfMTBfYXJnM18oX2lubGluZV8xMF9hcmc0Xyx0aGlzX3dhcnBlZFswXSx0aGlzX3dhcnBlZFsxXSl9IixhcmdzOlt7bmFtZToiX2lubGluZV8xMF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xMF9hcmcxXyIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xMF9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xMF9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xMF9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToid2FycDJEIixibG9ja1NpemU6NjR9KSxzPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2NhbGFyIiwic2NhbGFyIiwic2NhbGFyIl0scHJlOntib2R5OiJ7dGhpc193YXJwZWQ9WzAsMCwwXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie19pbmxpbmVfMTNfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV8xM19hcmcwXyksX2lubGluZV8xM19hcmcxXz1faW5saW5lXzEzX2FyZzNfKF9pbmxpbmVfMTNfYXJnNF8sdGhpc193YXJwZWRbMF0sdGhpc193YXJwZWRbMV0sdGhpc193YXJwZWRbMl0pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMTNfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTNfYXJnMV8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTNfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTNfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTNfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6IndhcnAzRCIsYmxvY2tTaXplOjY0fSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goZS5zaGFwZS5sZW5ndGgpe2Nhc2UgMTphKHQscixuLmQxLGUpO2JyZWFrO2Nhc2UgMjpvKHQscixuLmQyLGUpO2JyZWFrO2Nhc2UgMzpzKHQscixuLmQzLGUpO2JyZWFrO2RlZmF1bHQ6aSh0LHIsbi5iaW5kKHZvaWQgMCxlKSxlLnNoYXBlLmxlbmd0aCl9cmV0dXJuIHR9fSx7ImN3aXNlL2xpYi93cmFwcGVyIjoxMzksIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIjo0MzV9XSw0NDI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJpb3RhLWFycmF5IiksaT10KCJpcy1idWZmZXIiKSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIHMoKXt2YXIgdCxlPXRoaXMuc3RyaWRlLHI9bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IodD0wO3Q8ci5sZW5ndGg7Kyt0KXJbdF09W01hdGguYWJzKGVbdF0pLHRdO3Iuc29ydChvKTt2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpO2Zvcih0PTA7dDxuLmxlbmd0aDsrK3Qpblt0XT1yW3RdWzFdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1bIlZpZXciLGUsImQiLHRdLmpvaW4oIiIpO2U8MCYmKHI9IlZpZXdfTmlsIit0KTt2YXIgaT0iZ2VuZXJpYyI9PT10O2lmKC0xPT09ZSl7dmFyIGE9ImZ1bmN0aW9uICIrcisiKGEpe3RoaXMuZGF0YT1hO307dmFyIHByb3RvPSIrcisiLnByb3RvdHlwZTtwcm90by5kdHlwZT0nIit0KyInO3Byb3RvLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIC0xfTtwcm90by5zaXplPTA7cHJvdG8uZGltZW5zaW9uPS0xO3Byb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtwcm90by5sbz1wcm90by5oaT1wcm90by50cmFuc3Bvc2U9cHJvdG8uc3RlcD1mdW5jdGlvbigpe3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhKTt9O3Byb3RvLmdldD1wcm90by5zZXQ9ZnVuY3Rpb24oKXt9O3Byb3RvLnBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihhKXtyZXR1cm4gbmV3ICIrcisiKGEpO30iO3JldHVybiBuZXcgRnVuY3Rpb24oYSkoKX1pZigwPT09ZSl7YT0iZnVuY3Rpb24gIityKyIoYSxkKSB7dGhpcy5kYXRhID0gYTt0aGlzLm9mZnNldCA9IGR9O3ZhciBwcm90bz0iK3IrIi5wcm90b3R5cGU7cHJvdG8uZHR5cGU9JyIrdCsiJztwcm90by5pbmRleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldH07cHJvdG8uZGltZW5zaW9uPTA7cHJvdG8uc2l6ZT0xO3Byb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtwcm90by5sbz1wcm90by5oaT1wcm90by50cmFuc3Bvc2U9cHJvdG8uc3RlcD1mdW5jdGlvbiAiK3IrIl9jb3B5KCkge3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhLHRoaXMub2Zmc2V0KX07cHJvdG8ucGljaz1mdW5jdGlvbiAiK3IrIl9waWNrKCl7cmV0dXJuIFRyaXZpYWxBcnJheSh0aGlzLmRhdGEpO307cHJvdG8udmFsdWVPZj1wcm90by5nZXQ9ZnVuY3Rpb24gIityKyJfZ2V0KCl7cmV0dXJuICIrKGk/InRoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQpIjoidGhpcy5kYXRhW3RoaXMub2Zmc2V0XSIpKyJ9O3Byb3RvLnNldD1mdW5jdGlvbiAiK3IrIl9zZXQodil7cmV0dXJuICIrKGk/InRoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQsdikiOiJ0aGlzLmRhdGFbdGhpcy5vZmZzZXRdPXYiKSsifTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIrcisiKGEsYixjLGQpe3JldHVybiBuZXcgIityKyIoYSxkKX0iO3JldHVybiBuZXcgRnVuY3Rpb24oIlRyaXZpYWxBcnJheSIsYSkoY1t0XVswXSl9YT1bIid1c2Ugc3RyaWN0JyJdO3ZhciBvPW4oZSksbD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iaSIrdH0pLHU9InRoaXMub2Zmc2V0KyIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInRoaXMuc3RyaWRlWyIrdCsiXSppIit0fSkuam9pbigiKyIpLGY9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImIiK3R9KS5qb2luKCIsIiksaD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYyIrdH0pLmpvaW4oIiwiKTthLnB1c2goImZ1bmN0aW9uICIrcisiKGEsIitmKyIsIitoKyIsZCl7dGhpcy5kYXRhPWEiLCJ0aGlzLnNoYXBlPVsiK2YrIl0iLCJ0aGlzLnN0cmlkZT1bIitoKyJdIiwidGhpcy5vZmZzZXQ9ZHwwfSIsInZhciBwcm90bz0iK3IrIi5wcm90b3R5cGUiLCJwcm90by5kdHlwZT0nIit0KyInIiwicHJvdG8uZGltZW5zaW9uPSIrZSksYS5wdXNoKCJPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sJ3NpemUnLHtnZXQ6ZnVuY3Rpb24gIityKyJfc2l6ZSgpe3JldHVybiAiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ0aGlzLnNoYXBlWyIrdCsiXSJ9KS5qb2luKCIqIiksIn19KSIpLDE9PT1lP2EucHVzaCgicHJvdG8ub3JkZXI9WzBdIik6KGEucHVzaCgiT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCdvcmRlcicse2dldDoiKSxlPDQ/KGEucHVzaCgiZnVuY3Rpb24gIityKyJfb3JkZXIoKXsiKSwyPT09ZT9hLnB1c2goInJldHVybiAoTWF0aC5hYnModGhpcy5zdHJpZGVbMF0pPk1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSk/WzEsMF06WzAsMV19fSkiKTozPT09ZSYmYS5wdXNoKCJ2YXIgczA9TWF0aC5hYnModGhpcy5zdHJpZGVbMF0pLHMxPU1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSxzMj1NYXRoLmFicyh0aGlzLnN0cmlkZVsyXSk7aWYoczA+czEpe2lmKHMxPnMyKXtyZXR1cm4gWzIsMSwwXTt9ZWxzZSBpZihzMD5zMil7cmV0dXJuIFsxLDIsMF07fWVsc2V7cmV0dXJuIFsxLDAsMl07fX1lbHNlIGlmKHMwPnMyKXtyZXR1cm4gWzIsMCwxXTt9ZWxzZSBpZihzMj5zMSl7cmV0dXJuIFswLDEsMl07fWVsc2V7cmV0dXJuIFswLDIsMV07fX19KSIpKTphLnB1c2goIk9SREVSfSkiKSksYS5wdXNoKCJwcm90by5zZXQ9ZnVuY3Rpb24gIityKyJfc2V0KCIrbC5qb2luKCIsIikrIix2KXsiKSxpP2EucHVzaCgicmV0dXJuIHRoaXMuZGF0YS5zZXQoIit1KyIsdil9Iik6YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhWyIrdSsiXT12fSIpLGEucHVzaCgicHJvdG8uZ2V0PWZ1bmN0aW9uICIrcisiX2dldCgiK2wuam9pbigiLCIpKyIpeyIpLGk/YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhLmdldCgiK3UrIil9Iik6YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhWyIrdSsiXX0iKSxhLnB1c2goInByb3RvLmluZGV4PWZ1bmN0aW9uICIrcisiX2luZGV4KCIsbC5qb2luKCksIil7cmV0dXJuICIrdSsifSIpLGEucHVzaCgicHJvdG8uaGk9ZnVuY3Rpb24gIityKyJfaGkoIitsLmpvaW4oIiwiKSsiKXtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblsiKHR5cGVvZiBpIix0LCIhPT0nbnVtYmVyJ3x8aSIsdCwiPDApP3RoaXMuc2hhcGVbIix0LCJdOmkiLHQsInwwIl0uam9pbigiIil9KS5qb2luKCIsIikrIiwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ0aGlzLnN0cmlkZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsdGhpcy5vZmZzZXQpfSIpO3ZhciBwPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0KyI9dGhpcy5zaGFwZVsiK3QrIl0ifSksZD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYyIrdCsiPXRoaXMuc3RyaWRlWyIrdCsiXSJ9KTthLnB1c2goInByb3RvLmxvPWZ1bmN0aW9uICIrcisiX2xvKCIrbC5qb2luKCIsIikrIil7dmFyIGI9dGhpcy5vZmZzZXQsZD0wLCIrcC5qb2luKCIsIikrIiwiK2Quam9pbigiLCIpKTtmb3IodmFyIGc9MDtnPGU7KytnKWEucHVzaCgiaWYodHlwZW9mIGkiK2crIj09PSdudW1iZXInJiZpIitnKyI+PTApe2Q9aSIrZysifDA7Yis9YyIrZysiKmQ7YSIrZysiLT1kfSIpO2EucHVzaCgicmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdH0pLmpvaW4oIiwiKSsiLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImMiK3R9KS5qb2luKCIsIikrIixiKX0iKSxhLnB1c2goInByb3RvLnN0ZXA9ZnVuY3Rpb24gIityKyJfc3RlcCgiK2wuam9pbigiLCIpKyIpe3ZhciAiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0KyI9dGhpcy5zaGFwZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdCsiPXRoaXMuc3RyaWRlWyIrdCsiXSJ9KS5qb2luKCIsIikrIixjPXRoaXMub2Zmc2V0LGQ9MCxjZWlsPU1hdGguY2VpbCIpO2ZvcihnPTA7ZzxlOysrZylhLnB1c2goImlmKHR5cGVvZiBpIitnKyI9PT0nbnVtYmVyJyl7ZD1pIitnKyJ8MDtpZihkPDApe2MrPWIiK2crIiooYSIrZysiLTEpO2EiK2crIj1jZWlsKC1hIitnKyIvZCl9ZWxzZXthIitnKyI9Y2VpbChhIitnKyIvZCl9YiIrZysiKj1kfSIpO2EucHVzaCgicmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdH0pLmpvaW4oIiwiKSsiLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImIiK3R9KS5qb2luKCIsIikrIixjKX0iKTt2YXIgdj1uZXcgQXJyYXkoZSksbT1uZXcgQXJyYXkoZSk7Zm9yKGc9MDtnPGU7KytnKXZbZ109ImFbaSIrZysiXSIsbVtnXT0iYltpIitnKyJdIjthLnB1c2goInByb3RvLnRyYW5zcG9zZT1mdW5jdGlvbiAiK3IrIl90cmFuc3Bvc2UoIitsKyIpeyIrbC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiPSgiK3QrIj09PXVuZGVmaW5lZD8iK2UrIjoiK3QrInwwKSJ9KS5qb2luKCI7IiksInZhciBhPXRoaXMuc2hhcGUsYj10aGlzLnN0cmlkZTtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSwiK3Yuam9pbigiLCIpKyIsIittLmpvaW4oIiwiKSsiLHRoaXMub2Zmc2V0KX0iKSxhLnB1c2goInByb3RvLnBpY2s9ZnVuY3Rpb24gIityKyJfcGljaygiK2wrIil7dmFyIGE9W10sYj1bXSxjPXRoaXMub2Zmc2V0Iik7Zm9yKGc9MDtnPGU7KytnKWEucHVzaCgiaWYodHlwZW9mIGkiK2crIj09PSdudW1iZXInJiZpIitnKyI+PTApe2M9KGMrdGhpcy5zdHJpZGVbIitnKyJdKmkiK2crIil8MH1lbHNle2EucHVzaCh0aGlzLnNoYXBlWyIrZysiXSk7Yi5wdXNoKHRoaXMuc3RyaWRlWyIrZysiXSl9Iik7cmV0dXJuIGEucHVzaCgidmFyIGN0b3I9Q1RPUl9MSVNUW2EubGVuZ3RoKzFdO3JldHVybiBjdG9yKHRoaXMuZGF0YSxhLGIsYyl9IiksYS5wdXNoKCJyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIrcisiKGRhdGEsc2hhcGUsc3RyaWRlLG9mZnNldCl7cmV0dXJuIG5ldyAiK3IrIihkYXRhLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInNoYXBlWyIrdCsiXSJ9KS5qb2luKCIsIikrIiwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpZGVbIit0KyJdIn0pLmpvaW4oIiwiKSsiLG9mZnNldCl9IiksbmV3IEZ1bmN0aW9uKCJDVE9SX0xJU1QiLCJPUkRFUiIsYS5qb2luKCJcbiIpKShjW3RdLHMpfXZhciBjPXtmbG9hdDMyOltdLGZsb2F0NjQ6W10saW50ODpbXSxpbnQxNjpbXSxpbnQzMjpbXSx1aW50ODpbXSx1aW50MTY6W10sdWludDMyOltdLGFycmF5OltdLHVpbnQ4X2NsYW1wZWQ6W10sYnVmZmVyOltdLGdlbmVyaWM6W119O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT10KXJldHVybigwLGMuYXJyYXlbMF0pKFtdKTsibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSksdm9pZCAwPT09ZSYmKGU9W3QubGVuZ3RoXSk7dmFyIG89ZS5sZW5ndGg7aWYodm9pZCAwPT09cil7cj1uZXcgQXJyYXkobyk7Zm9yKHZhciBzPW8tMSx1PTE7cz49MDstLXMpcltzXT11LHUqPWVbc119aWYodm9pZCAwPT09bilmb3Iobj0wLHM9MDtzPG87KytzKXJbc108MCYmKG4tPShlW3NdLTEpKnJbc10pO2Zvcih2YXIgZj1mdW5jdGlvbih0KXtpZihpKHQpKXJldHVybiJidWZmZXIiO2lmKGEpc3dpdGNoKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSl7Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOnJldHVybiJmbG9hdDY0IjtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6cmV0dXJuImZsb2F0MzIiO2Nhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpyZXR1cm4iaW50OCI7Y2FzZSJbb2JqZWN0IEludDE2QXJyYXldIjpyZXR1cm4iaW50MTYiO2Nhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6cmV0dXJuImludDMyIjtjYXNlIltvYmplY3QgVWludDhBcnJheV0iOnJldHVybiJ1aW50OCI7Y2FzZSJbb2JqZWN0IFVpbnQxNkFycmF5XSI6cmV0dXJuInVpbnQxNiI7Y2FzZSJbb2JqZWN0IFVpbnQzMkFycmF5XSI6cmV0dXJuInVpbnQzMiI7Y2FzZSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6cmV0dXJuInVpbnQ4X2NsYW1wZWQifXJldHVybiBBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6ImdlbmVyaWMifSh0KSxoPWNbZl07aC5sZW5ndGg8PW8rMTspaC5wdXNoKGwoZixoLmxlbmd0aC0xKSk7cmV0dXJuKDAsaFtvKzFdKSh0LGUscixuKX19LHsiaW90YS1hcnJheSI6NDA4LCJpcy1idWZmZXIiOjQxMH1dLDQ0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGk9TWF0aC5wb3coMiwtMTA3NCksYT0tMT4+PjA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47aWYodD09PWUpcmV0dXJuIHQ7aWYoMD09PXQpcmV0dXJuIGU8MD8taTppO3ZhciByPW4uaGkodCksbz1uLmxvKHQpO2U+dD09dD4wP289PT1hPyhyKz0xLG89MCk6bys9MTowPT09bz8obz1hLHItPTEpOm8tPTE7cmV0dXJuIG4ucGFjayhvLHIpfX0seyJkb3VibGUtYml0cyI6MTU4fV0sNDQ0OltmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5QSSxpPWMoMTIwKTtmdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVyblsiQyIsdCxlLHIsbixyLG5dfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3JldHVyblsiQyIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19ZnVuY3Rpb24gcyh0LGUscixhLG8sYyx1LGYsaCxwKXtpZihwKWs9cFswXSxUPXBbMV0sXz1wWzJdLHc9cFszXTtlbHNle3ZhciBkPWwodCxlLC1vKTt0PWQueCxlPWQueTt2YXIgZz0odC0oZj0oZD1sKGYsaCwtbykpLngpKS8yLHY9KGUtKGg9ZC55KSkvMixtPWcqZy8ocipyKSt2KnYvKGEqYSk7bT4xJiYocio9bT1NYXRoLnNxcnQobSksYSo9bSk7dmFyIHk9cipyLHg9YSphLGI9KGM9PXU/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKCh5KngteSp2KnYteCpnKmcpLyh5KnYqdit4KmcqZykpKTtiPT0xLzAmJihiPTEpO3ZhciBfPWIqcip2L2ErKHQrZikvMix3PWIqLWEqZy9yKyhlK2gpLzIsaz1NYXRoLmFzaW4oKChlLXcpL2EpLnRvRml4ZWQoOSkpLFQ9TWF0aC5hc2luKCgoaC13KS9hKS50b0ZpeGVkKDkpKTsoaz10PF8/bi1rOmspPDAmJihrPTIqbitrKSwoVD1mPF8/bi1UOlQpPDAmJihUPTIqbitUKSx1JiZrPlQmJihrLT0yKm4pLCF1JiZUPmsmJihULT0yKm4pfWlmKE1hdGguYWJzKFQtayk+aSl7dmFyIEE9VCxNPWYsUz1oO1Q9aytpKih1JiZUPms/MTotMSk7dmFyIEU9cyhmPV8rcipNYXRoLmNvcyhUKSxoPXcrYSpNYXRoLnNpbihUKSxyLGEsbywwLHUsTSxTLFtULEEsXyx3XSl9dmFyIEM9TWF0aC50YW4oKFQtaykvNCksTD00LzMqcipDLHo9NC8zKmEqQyxPPVsyKnQtKHQrTCpNYXRoLnNpbihrKSksMiplLShlLXoqTWF0aC5jb3MoaykpLGYrTCpNYXRoLnNpbihUKSxoLXoqTWF0aC5jb3MoVCksZixoXTtpZihwKXJldHVybiBPO0UmJihPPU8uY29uY2F0KEUpKTtmb3IodmFyIEk9MDtJPE8ubGVuZ3RoOyl7dmFyIEQ9bChPW0ldLE9bSSsxXSxvKTtPW0krK109RC54LE9bSSsrXT1ELnl9cmV0dXJuIE99ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJue3g6dCpNYXRoLmNvcyhyKS1lKk1hdGguc2luKHIpLHk6dCpNYXRoLnNpbihyKStlKk1hdGguY29zKHIpfX1mdW5jdGlvbiBjKHQpe3JldHVybiB0KihuLzE4MCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG49MCxpPTAsbD0wLHU9MCxmPW51bGwsaD1udWxsLHA9MCxkPTAsZz0wLHY9dC5sZW5ndGg7Zzx2O2crKyl7dmFyIG09dFtnXSx5PW1bMF07c3dpdGNoKHkpe2Nhc2UiTSI6bD1tWzFdLHU9bVsyXTticmVhaztjYXNlIkEiOihtPXMocCxkLG1bMV0sbVsyXSxjKG1bM10pLG1bNF0sbVs1XSxtWzZdLG1bN10pKS51bnNoaWZ0KCJDIiksbS5sZW5ndGg+NyYmKHIucHVzaChtLnNwbGljZSgwLDcpKSxtLnVuc2hpZnQoIkMiKSk7YnJlYWs7Y2FzZSJTIjp2YXIgeD1wLGI9ZDsiQyIhPWUmJiJTIiE9ZXx8KHgrPXgtbixiKz1iLWkpLG09WyJDIix4LGIsbVsxXSxtWzJdLG1bM10sbVs0XV07YnJlYWs7Y2FzZSJUIjoiUSI9PWV8fCJUIj09ZT8oZj0yKnAtZixoPTIqZC1oKTooZj1wLGg9ZCksbT1vKHAsZCxmLGgsbVsxXSxtWzJdKTticmVhaztjYXNlIlEiOmY9bVsxXSxoPW1bMl0sbT1vKHAsZCxtWzFdLG1bMl0sbVszXSxtWzRdKTticmVhaztjYXNlIkwiOm09YShwLGQsbVsxXSxtWzJdKTticmVhaztjYXNlIkgiOm09YShwLGQsbVsxXSxkKTticmVhaztjYXNlIlYiOm09YShwLGQscCxtWzFdKTticmVhaztjYXNlIloiOm09YShwLGQsbCx1KX1lPXkscD1tW20ubGVuZ3RoLTJdLGQ9bVttLmxlbmd0aC0xXSxtLmxlbmd0aD40PyhuPW1bbS5sZW5ndGgtNF0saT1tW20ubGVuZ3RoLTNdKToobj1wLGk9ZCksci5wdXNoKG0pfXJldHVybiByfX0se31dLDQ0NTpbZnVuY3Rpb24odCxlLHIpe3IudmVydGV4Tm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28paVtvXT1bMCwwLDBdO2ZvcihvPTA7bzx0Lmxlbmd0aDsrK28pZm9yKHZhciBzPXRbb10sbD0wLGM9c1tzLmxlbmd0aC0xXSx1PXNbMF0sZj0wO2Y8cy5sZW5ndGg7KytmKXtsPWMsYz11LHU9c1soZisxKSVzLmxlbmd0aF07Zm9yKHZhciBoPWVbbF0scD1lW2NdLGQ9ZVt1XSxnPW5ldyBBcnJheSgzKSx2PTAsbT1uZXcgQXJyYXkoMykseT0wLHg9MDt4PDM7Kyt4KWdbeF09aFt4XS1wW3hdLHYrPWdbeF0qZ1t4XSxtW3hdPWRbeF0tcFt4XSx5Kz1tW3hdKm1beF07aWYodip5PmEpe3ZhciBiPWlbY10sXz0xL01hdGguc3FydCh2KnkpO2Zvcih4PTA7eDwzOysreCl7dmFyIHc9KHgrMSklMyxrPSh4KzIpJTM7Ylt4XSs9XyoobVt3XSpnW2tdLW1ba10qZ1t3XSl9fX1mb3Iobz0wO288bjsrK28pe2I9aVtvXTt2YXIgVD0wO2Zvcih4PTA7eDwzOysreClUKz1iW3hdKmJbeF07aWYoVD5hKWZvcihfPTEvTWF0aC5zcXJ0KFQpLHg9MDt4PDM7Kyt4KWJbeF0qPV87ZWxzZSBmb3IoeD0wO3g8MzsrK3gpYlt4XT0wfXJldHVybiBpfSxyLmZhY2VOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yPzFlLTY6cixvPTA7bzxuOysrbyl7Zm9yKHZhciBzPXRbb10sbD1uZXcgQXJyYXkoMyksYz0wO2M8MzsrK2MpbFtjXT1lW3NbY11dO3ZhciB1PW5ldyBBcnJheSgzKSxmPW5ldyBBcnJheSgzKTtmb3IoYz0wO2M8MzsrK2MpdVtjXT1sWzFdW2NdLWxbMF1bY10sZltjXT1sWzJdW2NdLWxbMF1bY107dmFyIGg9bmV3IEFycmF5KDMpLHA9MDtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBkPShjKzEpJTMsZz0oYysyKSUzO2hbY109dVtkXSpmW2ddLXVbZ10qZltkXSxwKz1oW2NdKmhbY119cD1wPmE/MS9NYXRoLnNxcnQocCk6MDtmb3IoYz0wO2M8MzsrK2MpaFtjXSo9cDtpW29dPWh9cmV0dXJuIGl9fSx7fV0sNDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIHQ9bmV3IFN0cmluZygiYWJjIik7aWYodFs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpWzBdKXJldHVybiExO2Zvcih2YXIgZT17fSxyPTA7cjwxMDtyKyspZVsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZShyKV09cjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09dH0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LG4pKS5qb2luKCIiKX1jYXRjaCh0KXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixvLHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QodCl9KHQpLGw9MTtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXtmb3IodmFyIGMgaW4gcj1PYmplY3QoYXJndW1lbnRzW2xdKSlpLmNhbGwocixjKSYmKHNbY109cltjXSk7aWYobil7bz1uKHIpO2Zvcih2YXIgdT0wO3U8by5sZW5ndGg7dSsrKWEuY2FsbChyLG9bdV0pJiYoc1tvW3VdXT1yW29bdV1dKX19cmV0dXJuIHN9fSx7fV0sNDQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1lK2ErYztpZihmPjApe3ZhciBmPU1hdGguc3FydCh1KzEpO3RbMF09LjUqKG8tbCkvZix0WzFdPS41KihzLW4pL2YsdFsyXT0uNSooci1hKS9mLHRbM109LjUqZn1lbHNle3ZhciBoPU1hdGgubWF4KGUsYSxjKSxmPU1hdGguc3FydCgyKmgtdSsxKTtlPj1oPyh0WzBdPS41KmYsdFsxXT0uNSooaStyKS9mLHRbMl09LjUqKHMrbikvZix0WzNdPS41KihvLWwpL2YpOmE+PWg/KHRbMF09LjUqKHIraSkvZix0WzFdPS41KmYsdFsyXT0uNSoobCtvKS9mLHRbM109LjUqKHMtbikvZik6KHRbMF09LjUqKG4rcykvZix0WzFdPS41KihvK2wpL2YsdFsyXT0uNSpmLHRbM109LjUqKHItaSkvZil9cmV0dXJuIHR9fSx7fV0sNDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSx1KHI9W10uc2xpY2UuY2FsbChyLDAsNCkscik7dmFyIGk9bmV3IGYocixlLE1hdGgubG9nKG4pKTtpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLCgiZXllImluIHR8fCJ1cCJpbiB0KSYmaS5sb29rQXQoMCx0LmV5ZSx0LmNlbnRlcix0LnVwKTtyZXR1cm4gaX07dmFyIG49dCgiZmlsdGVyZWQtdmVjdG9yIiksaT10KCJnbC1tYXQ0L2xvb2tBdCIpLGE9dCgiZ2wtbWF0NC9mcm9tUXVhdCIpLG89dCgiZ2wtbWF0NC9pbnZlcnQiKSxzPXQoIi4vbGliL3F1YXRGcm9tRnJhbWUiKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1jKHIsbixpLGEpO28+MWUtNj8odFswXT1yL28sdFsxXT1uL28sdFsyXT1pL28sdFszXT1hL28pOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gZih0LGUscil7dGhpcy5yYWRpdXM9bihbcl0pLHRoaXMuY2VudGVyPW4oZSksdGhpcy5yb3RhdGlvbj1uKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIGg9Zi5wcm90b3R5cGU7aC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy5yb3RhdGlvbi5sYXN0VCgpKX0saC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy5yb3RhdGlvbi5jdXJ2ZSh0KTt2YXIgZT10aGlzLmNvbXB1dGVkUm90YXRpb247dShlLGUpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7YShyLGUpO3ZhciBuPXRoaXMuY29tcHV0ZWRDZW50ZXIsaT10aGlzLmNvbXB1dGVkRXllLG89dGhpcy5jb21wdXRlZFVwLHM9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7aVswXT1uWzBdK3MqclsyXSxpWzFdPW5bMV0rcypyWzZdLGlbMl09blsyXStzKnJbMTBdLG9bMF09clsxXSxvWzFdPXJbNV0sb1syXT1yWzldO2Zvcih2YXIgbD0wO2w8MzsrK2wpe2Zvcih2YXIgYz0wLGY9MDtmPDM7KytmKWMrPXJbbCs0KmZdKmlbZl07clsxMitsXT0tY319LGguZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9LGguaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5yb3RhdGlvbi5pZGxlKHQpfSxoLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMucm90YXRpb24uZmx1c2godCl9LGgucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZXx8MCxyPXJ8fDAsbj1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzFdLG89aVs1XSxzPWlbOV0sYz1sKGEsbyxzKTthLz1jLG8vPWMscy89Yzt2YXIgdT1pWzBdLGY9aVs0XSxoPWlbOF0scD11KmErZipvK2gqcyxkPWwodS09YSpwLGYtPW8qcCxoLT1zKnApO3UvPWQsZi89ZCxoLz1kO3ZhciBnPWlbMl0sdj1pWzZdLG09aVsxMF0seT1nKmErdipvK20qcyx4PWcqdSt2KmYrbSpoLGI9bChnLT15KmEreCp1LHYtPXkqbyt4KmYsbS09eSpzK3gqaCk7Zy89Yix2Lz1iLG0vPWI7dmFyIF89dSplK2Eqcix3PWYqZStvKnIsaz1oKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxfLHcsayk7dmFyIFQ9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7VD1NYXRoLm1heCgxZS00LFQrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coVCkpfSxoLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fDAscj1yfHwwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzBdLG89aVs0XSxzPWlbOF0sdT1pWzFdLGY9aVs1XSxoPWlbOV0scD1pWzJdLGQ9aVs2XSxnPWlbMTBdLHY9ZSphK3IqdSxtPWUqbytyKmYseT1lKnMrcipoLHg9LShkKnktZyptKSxiPS0oZyp2LXAqeSksXz0tKHAqbS1kKnYpLHc9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KGIsMiktTWF0aC5wb3coXywyKSkpLGs9Yyh4LGIsXyx3KTtrPjFlLTY/KHgvPWssYi89ayxfLz1rLHcvPWspOih4PWI9Xz0wLHc9MSk7dmFyIFQ9dGhpcy5jb21wdXRlZFJvdGF0aW9uLEE9VFswXSxNPVRbMV0sUz1UWzJdLEU9VFszXSxDPUEqdytFKngrTSpfLVMqYixMPU0qdytFKmIrUyp4LUEqXyx6PVMqdytFKl8rQSpiLU0qeCxPPUUqdy1BKngtTSpiLVMqXztpZihuKXt4PXAsYj1kLF89Zzt2YXIgST1NYXRoLnNpbihuKS9sKHgsYixfKTt4Kj1JLGIqPUksXyo9SSxPPU8qKHc9TWF0aC5jb3MoZSkpLShDPUMqdytPKngrTCpfLXoqYikqeC0oTD1MKncrTypiK3oqeC1DKl8pKmItKHo9eip3K08qXytDKmItTCp4KSpffXZhciBEPWMoQyxMLHosTyk7RD4xZS02PyhDLz1ELEwvPUQsei89RCxPLz1EKTooQz1MPXo9MCxPPTEpLHRoaXMucm90YXRpb24uc2V0KHQsQyxMLHosTyl9LGgubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixlPWV8fHRoaXMuY29tcHV0ZWRFeWUsbj1ufHx0aGlzLmNvbXB1dGVkVXA7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeDtpKGEsZSxyLG4pO3ZhciBvPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKG8sYVswXSxhWzFdLGFbMl0sYVs0XSxhWzVdLGFbNl0sYVs4XSxhWzldLGFbMTBdKSx1KG8sbyksdGhpcy5yb3RhdGlvbi5zZXQodCxvWzBdLG9bMV0sb1syXSxvWzNdKTtmb3IodmFyIGw9MCxjPTA7YzwzOysrYylsKz1NYXRoLnBvdyhyW2NdLWVbY10sMik7dGhpcy5yYWRpdXMuc2V0KHQsLjUqTWF0aC5sb2coTWF0aC5tYXgobCwxZS02KSkpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKX0saC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0saC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbXB1dGVkUm90YXRpb247cyhyLGVbMF0sZVsxXSxlWzJdLGVbNF0sZVs1XSxlWzZdLGVbOF0sZVs5XSxlWzEwXSksdShyLHIpLHRoaXMucm90YXRpb24uc2V0KHQsclswXSxyWzFdLHJbMl0sclszXSk7dmFyIG49dGhpcy5jb21wdXRlZE1hdHJpeDtvKG4sZSk7dmFyIGk9blsxNV07aWYoTWF0aC5hYnMoaSk+MWUtNil7dmFyIGE9blsxMl0vaSxsPW5bMTNdL2ksYz1uWzE0XS9pO3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBmPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLnNldCh0LGEtblsyXSpmLGwtbls2XSpmLGMtblsxMF0qZiksdGhpcy5yYWRpdXMuaWRsZSh0KX1lbHNlIHRoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KX0saC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxoLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LTEvMCxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxoLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kcztyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LGgudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjYWxjTWF0cml4KHRoaXMubGFzdFQoKSkse2NlbnRlcjp0aGlzLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCkscm90YXRpb246dGhpcy5jb21wdXRlZFJvdGF0aW9uLnNsaWNlKCksZGlzdGFuY2U6TWF0aC5sb2codGhpcy5jb21wdXRlZFJhZGl1c1swXSksem9vbU1pbjp0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF0sem9vbU1heDp0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF19fSxoLmZyb21KU09OPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXQuY2VudGVyO3ImJnRoaXMuY2VudGVyLnNldChlLHJbMF0sclsxXSxyWzJdKTt2YXIgbj10LnJvdGF0aW9uO24mJnRoaXMucm90YXRpb24uc2V0KGUsblswXSxuWzFdLG5bMl0sblszXSk7dmFyIGk9dC5kaXN0YW5jZTtpJiZpPjAmJnRoaXMucmFkaXVzLnNldChlLE1hdGgubG9nKGkpKSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpfX0seyIuL2xpYi9xdWF0RnJvbUZyYW1lIjo0NDcsImZpbHRlcmVkLXZlY3RvciI6MjIyLCJnbC1tYXQ0L2Zyb21RdWF0IjoyNTgsImdsLW1hdDQvaW52ZXJ0IjoyNjEsImdsLW1hdDQvbG9va0F0IjoyNjJ9XSw0NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVwZWF0LXN0cmluZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4ocj0idW5kZWZpbmVkIiE9dHlwZW9mIHI/cisiIjoiICIsZSkrdH19LHsicmVwZWF0LXN0cmluZyI6NDg3fV0sNDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuW3RdO3ZhciByPVt0XTsic3RyaW5nIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSk/ZT17YnJhY2tldHM6ZX06ZXx8KGU9e30pO3ZhciBuPWUuYnJhY2tldHM/QXJyYXkuaXNBcnJheShlLmJyYWNrZXRzKT9lLmJyYWNrZXRzOltlLmJyYWNrZXRzXTpbInt9IiwiW10iLCIoKSJdLGk9ZS5lc2NhcGV8fCJfX18iLGE9ISFlLmZsYXQ7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoWyJcXCIsdFswXSwiW15cXCIsdFswXSwiXFwiLHRbMV0sIl0qXFwiLHRbMV1dLmpvaW4oIiIpKSxuPVtdO2Z1bmN0aW9uIGEoZSxhLG8pe3ZhciBzPXIucHVzaChlLnNsaWNlKHRbMF0ubGVuZ3RoLC10WzFdLmxlbmd0aCkpLTE7cmV0dXJuIG4ucHVzaChzKSxpK3N9ci5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7Zm9yKHZhciBpLG89MDt0IT1pOylpZihpPXQsdD10LnJlcGxhY2UoZSxhKSxvKys+MWU0KXRocm93IEVycm9yKCJSZWZlcmVuY2VzIGhhdmUgY2lyY3VsYXIgZGVwZW5kZW5jeS4gUGxlYXNlLCBjaGVjayB0aGVtLiIpO3Jbbl09dH0pLG49bi5yZXZlcnNlKCkscj1yLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHIpe2U9ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIihcXCIraStyKyIoPyFbMC05XSkpIiwiZyIpLHRbMF0rIiQxIit0WzFdKX0pLGV9KX0pO3ZhciBvPW5ldyBSZWdFeHAoIlxcIitpKyIoWzAtOV0rKSIpO3JldHVybiBhP3I6ZnVuY3Rpb24gdChlLHIsbil7Zm9yKHZhciBpLGE9W10scz0wO2k9by5leGVjKGUpOyl7aWYocysrPjFlNCl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBwYXJlbnRoZXNpcyIpO2EucHVzaChlLnNsaWNlKDAsaS5pbmRleCkpLGEucHVzaCh0KHJbaVsxXV0scikpLGU9ZS5zbGljZShpLmluZGV4K2lbMF0ubGVuZ3RoKX1yZXR1cm4gYS5wdXNoKGUpLGF9KHJbMF0scil9ZnVuY3Rpb24gaSh0LGUpe2lmKGUmJmUuZmxhdCl7dmFyIHIsbj1lJiZlLmVzY2FwZXx8Il9fXyIsaT10WzBdO2lmKCFpKXJldHVybiIiO2Zvcih2YXIgYT1uZXcgUmVnRXhwKCJcXCIrbisiKFswLTldKykiKSxvPTA7aSE9cjspe2lmKG8rKz4xZTQpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gIit0KTtyPWksaT1pLnJlcGxhY2UoYSxzKX1yZXR1cm4gaX1yZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24gdChlLHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpJiYocj1yLnJlZHVjZSh0LCIiKSksZStyfSwiIik7ZnVuY3Rpb24gcyhlLHIpe2lmKG51bGw9PXRbcl0pdGhyb3cgRXJyb3IoIlJlZmVyZW5jZSAiK3IrImlzIHVuZGVmaW5lZCIpO3JldHVybiB0W3JdfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/aSh0LGUpOm4odCxlKX1hLnBhcnNlPW4sYS5zdHJpbmdpZnk9aSxlLmV4cG9ydHM9YX0se31dLDQ1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwaWNrLWJ5LWFsaWFzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2FyZ3VtZW50cy5sZW5ndGg+MSYmKHQ9YXJndW1lbnRzKTsic3RyaW5nIj09dHlwZW9mIHQ/dD10LnNwbGl0KC9ccy8pLm1hcChwYXJzZUZsb2F0KToibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSk7dC5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdFswXT9lPTE9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFswXSx4OjAseTowfToyPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMV0seDowLHk6MH06e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdfHwwLGhlaWdodDp0WzNdLXRbMV18fDB9OnQmJih0PW4odCx7bGVmdDoieCBsIGxlZnQgTGVmdCIsdG9wOiJ5IHQgdG9wIFRvcCIsd2lkdGg6Incgd2lkdGggVyBXaWR0aCIsaGVpZ2h0OiJoIGhlaWdodCBXIFdpZHRoIixib3R0b206ImIgYm90dG9tIEJvdHRvbSIscmlnaHQ6InIgcmlnaHQgUmlnaHQifSksZT17eDp0LmxlZnR8fDAseTp0LnRvcHx8MH0sbnVsbD09dC53aWR0aD90LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD0wOmUud2lkdGg9dC53aWR0aCxudWxsPT10LmhlaWdodD90LmJvdHRvbT9lLmhlaWdodD10LmJvdHRvbS1lLnk6ZS5oZWlnaHQ9MDplLmhlaWdodD10LmhlaWdodCk7cmV0dXJuIGV9fSx7InBpY2stYnktYWxpYXMiOjQ1N31dLDQ1MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gdC5yZXBsYWNlKGksZnVuY3Rpb24odCxyLGkpe3ZhciBvPXIudG9Mb3dlckNhc2UoKTtmb3IoaT1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKGEpO3JldHVybiBlP2UubWFwKE51bWJlcik6W119KGkpLCJtIj09byYmaS5sZW5ndGg+MiYmKGUucHVzaChbcl0uY29uY2F0KGkuc3BsaWNlKDAsMikpKSxvPSJsIixyPSJtIj09cj8ibCI6IkwiKTs7KXtpZihpLmxlbmd0aD09bltvXSlyZXR1cm4gaS51bnNoaWZ0KHIpLGUucHVzaChpKTtpZihpLmxlbmd0aDxuW29dKXRocm93IG5ldyBFcnJvcigibWFsZm9ybWVkIHBhdGggZGF0YSIpO2UucHVzaChbcl0uY29uY2F0KGkuc3BsaWNlKDAsbltvXSkpKX19KSxlfTt2YXIgbj17YTo3LGM6NixoOjEsbDoyLG06MixxOjQsczo0LHQ6Mix2OjEsejowfSxpPS8oW2FzdHZ6cW1obGNdKShbXmFzdHZ6cW1obGNdKikvZ2k7dmFyIGE9Ly0/WzAtOV0qXC4/WzAtOV0rKD86ZVstK10/XGQrKT8vZ2l9LHt9XSw0NTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT1bMCwiIl0pLHQ9U3RyaW5nKHQpO3ZhciByPXBhcnNlRmxvYXQodCwxMCk7cmV0dXJuIGVbMF09cixlWzFdPXQubWF0Y2goL1tcZC5cLVwrXSpccyooLiopLylbMV18fCIiLGV9fSx7fV0sNDU0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciByLG4saSxhLG8sczsidW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZudWxsIT09cGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9lLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OiJ1bmRlZmluZWQiIT10eXBlb2YgdCYmbnVsbCE9PXQmJnQuaHJ0aW1lPyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4ocigpLW8pLzFlNn0sbj10LmhydGltZSxhPShyPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIDFlOSoodD1uKCkpWzBdK3RbMV19KSgpLHM9MWU5KnQudXB0aW1lKCksbz1hLXMpOkRhdGUubm93PyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKS1pfSxpPURhdGUubm93KCkpOihlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKS1pfSxpPShuZXcgRGF0ZSkuZ2V0VGltZSgpKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0NzR9XSw0NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8bil7Zm9yKHZhciByPTEsYT0wO2E8ZTsrK2EpZm9yKHZhciBvPTA7bzxhOysrbylpZih0W2FdPHRbb10pcj0tcjtlbHNlIGlmKHRbYV09PT10W29dKXJldHVybiAwO3JldHVybiByfWZvcih2YXIgcz1pLm1hbGxvY1VpbnQ4KGUpLGE9MDthPGU7KythKXNbYV09MDtmb3IodmFyIHI9MSxhPTA7YTxlOysrYSlpZighc1thXSl7dmFyIGw9MTtzW2FdPTE7Zm9yKHZhciBvPXRbYV07byE9PWE7bz10W29dKXtpZihzW29dKXJldHVybiBpLmZyZWVVaW50OChzKSwwO2wrPTEsc1tvXT0xfTEmbHx8KHI9LXIpfXJldHVybiBpLmZyZWVVaW50OChzKSxyfTt2YXIgbj0zMixpPXQoInR5cGVkYXJyYXktcG9vbCIpfSx7InR5cGVkYXJyYXktcG9vbCI6NTI5fV0sNDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiaW52ZXJ0LXBlcm11dGF0aW9uIik7ci5yYW5rPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3N3aXRjaChlKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gdFsxXX12YXIgcixhLG8scz1uLm1hbGxvY1VpbnQzMihlKSxsPW4ubWFsbG9jVWludDMyKGUpLGM9MDtmb3IoaSh0LGwpLG89MDtvPGU7KytvKXNbb109dFtvXTtmb3Iobz1lLTE7bz4wOy0tbylhPWxbb10scj1zW29dLHNbb109c1thXSxzW2FdPXIsbFtvXT1sW3JdLGxbcl09YSxjPShjK3IpKm87cmV0dXJuIG4uZnJlZVVpbnQzMihsKSxuLmZyZWVVaW50MzIocyksY30sci51bnJhbms9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHJ8fFtdO2Nhc2UgMTpyZXR1cm4gcj8oclswXT0wLHIpOlswXTtjYXNlIDI6cmV0dXJuIHI/KGU/KHJbMF09MCxyWzFdPTEpOihyWzBdPTEsclsxXT0wKSxyKTplP1swLDFdOlsxLDBdfXZhciBuLGksYSxvPTE7Zm9yKChyPXJ8fG5ldyBBcnJheSh0KSlbMF09MCxhPTE7YTx0OysrYSlyW2FdPWEsbz1vKmF8MDtmb3IoYT10LTE7YT4wOy0tYSllPWUtKG49ZS9vfDApKm98MCxvPW8vYXwwLGk9MHxyW2FdLHJbYV09MHxyW25dLHJbbl09MHxpO3JldHVybiByfX0seyJpbnZlcnQtcGVybXV0YXRpb24iOjQwNywidHlwZWRhcnJheS1wb29sIjo1Mjl9XSw0NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLG89e307aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1pKGUpKSxBcnJheS5pc0FycmF5KGUpKXt2YXIgcz17fTtmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKXNbZVthXV09ITA7ZT1zfWZvcihuIGluIGUpZVtuXT1pKGVbbl0pO3ZhciBsPXt9O2ZvcihuIGluIGUpe3ZhciBjPWVbbl07aWYoQXJyYXkuaXNBcnJheShjKSlmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdO2lmKHImJihsW3VdPSEwKSx1IGluIHQpe2lmKG9bbl09dFt1XSxyKWZvcih2YXIgZj1hO2Y8Yy5sZW5ndGg7ZisrKWxbY1tmXV09ITA7YnJlYWt9fWVsc2UgbiBpbiB0JiYoZVtuXSYmKG9bbl09dFtuXSksciYmKGxbbl09ITApKX1pZihyKWZvcihuIGluIHQpbFtuXXx8KG9bbl09dFtuXSk7cmV0dXJuIG99O3ZhciBuPXt9O2Z1bmN0aW9uIGkodCl7cmV0dXJuIG5bdF0/blt0XTooInN0cmluZyI9PXR5cGVvZiB0JiYodD1uW3RdPXQuc3BsaXQoL1xzKixccyp8XHMrLykpLHQpfX0se31dLDQ1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MHxlLmxlbmd0aCxpPXQubGVuZ3RoLGE9W25ldyBBcnJheShyKSxuZXcgQXJyYXkocildLG89MDtvPHI7KytvKWFbMF1bb109W10sYVsxXVtvXT1bXTtmb3IodmFyIG89MDtvPGk7KytvKXt2YXIgcz10W29dO2FbMF1bc1swXV0ucHVzaChzKSxhWzFdW3NbMV1dLnB1c2gocyl9Zm9yKHZhciBsPVtdLG89MDtvPHI7KytvKWFbMF1bb10ubGVuZ3RoK2FbMV1bb10ubGVuZ3RoPT09MCYmbC5wdXNoKFtvXSk7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWFbZV1bdFtlXV07ci5zcGxpY2Uoci5pbmRleE9mKHQpLDEpfWZ1bmN0aW9uIHUodCxyLGkpe2Zvcih2YXIgbyxzLGwsdT0wO3U8MjsrK3UpaWYoYVt1XVtyXS5sZW5ndGg+MCl7bz1hW3VdW3JdWzBdLGw9dTticmVha31zPW9bMV5sXTtmb3IodmFyIGY9MDtmPDI7KytmKWZvcih2YXIgaD1hW2ZdW3JdLHA9MDtwPGgubGVuZ3RoOysrcCl7dmFyIGQ9aFtwXSxnPWRbMV5mXSx2PW4oZVt0XSxlW3JdLGVbc10sZVtnXSk7dj4wJiYobz1kLHM9ZyxsPWYpfXJldHVybiBpP3M6KG8mJmMobyxsKSxzKX1mdW5jdGlvbiBmKHQscil7dmFyIGk9YVtyXVt0XVswXSxvPVt0XTtjKGkscik7Zm9yKHZhciBzPWlbMV5yXTs7KXtmb3IoO3MhPT10OylvLnB1c2gocykscz11KG9bby5sZW5ndGgtMl0scywhMSk7aWYoYVswXVt0XS5sZW5ndGgrYVsxXVt0XS5sZW5ndGg9PT0wKWJyZWFrO3ZhciBsPW9bby5sZW5ndGgtMV0sZj10LGg9b1sxXSxwPXUobCxmLCEwKTtpZihuKGVbbF0sZVtmXSxlW2hdLGVbcF0pPDApYnJlYWs7by5wdXNoKHQpLHM9dShsLGYpfXJldHVybiBvfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZVsxXT09PWVbZS5sZW5ndGgtMV19Zm9yKHZhciBvPTA7bzxyOysrbylmb3IodmFyIHA9MDtwPDI7KytwKXtmb3IodmFyIGQ9W107YVtwXVtvXS5sZW5ndGg+MDspe2FbMF1bb10ubGVuZ3RoO3ZhciBnPWYobyxwKTtoKGQsZyk/ZC5wdXNoLmFwcGx5KGQsZyk6KGQubGVuZ3RoPjAmJmwucHVzaChkKSxkPWcpfWQubGVuZ3RoPjAmJmwucHVzaChkKX1yZXR1cm4gbH07dmFyIG49dCgiY29tcGFyZS1hbmdsZSIpfSx7ImNvbXBhcmUtYW5nbGUiOjExN31dLDQ1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0LGUubGVuZ3RoKSxpPW5ldyBBcnJheShlLmxlbmd0aCksYT1uZXcgQXJyYXkoZS5sZW5ndGgpLG89W10scz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgbD1yW3NdLmxlbmd0aDthW3NdPWwsaVtzXT0hMCxsPD0xJiZvLnB1c2gocyl9Zm9yKDtvLmxlbmd0aD4wOyl7dmFyIGM9by5wb3AoKTtpW2NdPSExO2Zvcih2YXIgdT1yW2NdLHM9MDtzPHUubGVuZ3RoOysrcyl7dmFyIGY9dVtzXTswPT0tLWFbZl0mJm8ucHVzaChmKX19Zm9yKHZhciBoPW5ldyBBcnJheShlLmxlbmd0aCkscD1bXSxzPTA7czxlLmxlbmd0aDsrK3MpaWYoaVtzXSl7dmFyIGM9cC5sZW5ndGg7aFtzXT1jLHAucHVzaChlW3NdKX1lbHNlIGhbc109LTE7Zm9yKHZhciBkPVtdLHM9MDtzPHQubGVuZ3RoOysrcyl7dmFyIGc9dFtzXTtpW2dbMF1dJiZpW2dbMV1dJiZkLnB1c2goW2hbZ1swXV0saFtnWzFdXV0pfXJldHVybltkLHBdfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpfSx7ImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxNjN9XSw0NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Yyh0LGUpO3Q9clswXTtmb3IodmFyIGY9KGU9clsxXSkubGVuZ3RoLGg9KHQubGVuZ3RoLG4odCxlLmxlbmd0aCkpLHA9MDtwPGY7KytwKWlmKGhbcF0ubGVuZ3RoJTI9PTEpdGhyb3cgbmV3IEVycm9yKCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmU6IGdyYXBoIG11c3QgYmUgbWFuaWZvbGQiKTt2YXIgZD1pKHQsZSk7Zm9yKHZhciBnPShkPWQuZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPVswXSxpPTA7aTxyOysraSl7dmFyIGE9ZVt0W2ldXSxsPWVbdFsoaSsxKSVyXV0sYz1vKC1hWzBdLGFbMV0pLHU9bygtYVswXSxsWzFdKSxmPW8obFswXSxhWzFdKSxoPW8obFswXSxsWzFdKTtuPXMobixzKHMoYyx1KSxzKGYsaCkpKX1yZXR1cm4gbltuLmxlbmd0aC0xXT4wfSkpLmxlbmd0aCx2PW5ldyBBcnJheShnKSxtPW5ldyBBcnJheShnKSxwPTA7cDxnOysrcCl7dltwXT1wO3ZhciB5PW5ldyBBcnJheShnKSx4PWRbcF0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSksYj1hKFt4XSksXz0wO3Q6Zm9yKHZhciB3PTA7dzxnOysrdylpZih5W3ddPTAscCE9PXcpe2Zvcih2YXIgaz1kW3ddLFQ9ay5sZW5ndGgsQT0wO0E8VDsrK0Epe3ZhciBNPWIoZVtrW0FdXSk7aWYoMCE9PU0pe008MCYmKHlbd109MSxfKz0xKTtjb250aW51ZSB0fX15W3ddPTEsXys9MX1tW3BdPVtfLHAseV19bS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0pO2Zvcih2YXIgcD0wO3A8ZzsrK3ApZm9yKHZhciB5PW1bcF0sUz15WzFdLEU9eVsyXSx3PTA7dzxnOysrdylFW3ddJiYodlt3XT1TKTtmb3IodmFyIEM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPVtdO3JldHVybiBlfShnKSxwPTA7cDxnOysrcClDW3BdLnB1c2godltwXSksQ1t2W3BdXS5wdXNoKHApO2Zvcih2YXIgTD17fSx6PXUoZiwhMSkscD0wO3A8ZzsrK3ApZm9yKHZhciBrPWRbcF0sVD1rLmxlbmd0aCx3PTA7dzxUOysrdyl7dmFyIE89a1t3XSxJPWtbKHcrMSklVF0sRD1NYXRoLm1pbihPLEkpKyI6IitNYXRoLm1heChPLEkpO2lmKEQgaW4gTCl7dmFyIFA9TFtEXTtDW1BdLnB1c2gocCksQ1twXS5wdXNoKFApLHpbT109eltJXT0hMH1lbHNlIExbRF09cH1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTA7cjxlOysrcilpZighelt0W3JdXSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IodmFyIEY9W10sQj11KGcsLTEpLHA9MDtwPGc7KytwKXZbcF0hPT1wfHxSKGRbcF0pP0JbcF09LTE6KEYucHVzaChwKSxCW3BdPTApO3ZhciByPVtdO2Zvcig7Ri5sZW5ndGg+MDspe3ZhciBOPUYucG9wKCksaj1DW05dO2woaixmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTt2YXIgVixVPWoubGVuZ3RoLHE9QltOXTtpZigwPT09cSl7dmFyIGs9ZFtOXTtWPVtrXX1mb3IodmFyIHA9MDtwPFU7KytwKXt2YXIgSD1qW3BdO2lmKCEoQltIXT49MCkmJihCW0hdPTFecSxGLnB1c2goSCksMD09PXEpKXt2YXIgaz1kW0hdO1Ioayl8fChrLnJldmVyc2UoKSxWLnB1c2goaykpfX0wPT09cSYmci5wdXNoKFYpfXJldHVybiByfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpLGk9dCgicGxhbmFyLWR1YWwiKSxhPXQoInBvaW50LWluLWJpZy1wb2x5Z29uIiksbz10KCJ0d28tcHJvZHVjdCIpLHM9dCgicm9idXN0LXN1bSIpLGw9dCgidW5pcSIpLGM9dCgiLi9saWIvdHJpbS1sZWF2ZXMiKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9fSx7Ii4vbGliL3RyaW0tbGVhdmVzIjo0NTksImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxNjMsInBsYW5hci1kdWFsIjo0NTgsInBvaW50LWluLWJpZy1wb2x5Z29uIjo0NjQsInJvYnVzdC1zdW0iOjQ5OSwidHdvLXByb2R1Y3QiOjUyNyx1bmlxOjUzMX1dLDQ2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9xdWFkIil9LHsiLi9xdWFkIjo0NjN9XSw0NjI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAxXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAxfV0sNDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJjbGFtcCIpLGE9dCgicGFyc2UtcmVjdCIpLG89dCgiYXJyYXktYm91bmRzIikscz10KCJwaWNrLWJ5LWFsaWFzIiksbD10KCJkZWZpbmVkIiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksdT10KCJpcy1vYmoiKSxmPXQoImR0eXBlIiksaD10KCJtYXRoLWxvZzIiKTtmdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGE9MS8oZVsyXS1yKSxvPTEvKGVbM10tbikscz1uZXcgQXJyYXkodC5sZW5ndGgpLGw9MCxjPXQubGVuZ3RoLzI7bDxjO2wrKylzWzIqbF09aSgodFsyKmxdLXIpKmEsMCwxKSxzWzIqbCsxXT1pKCh0WzIqbCsxXS1uKSpvLDAsMSk7cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pLHQ9Yyh0LCJmbG9hdDY0IiksZT1zKGUse2JvdW5kczoicmFuZ2UgYm91bmRzIGRhdGFCb3ggZGF0YWJveCIsbWF4RGVwdGg6ImRlcHRoIG1heERlcHRoIG1heGRlcHRoIGxldmVsIG1heExldmVsIG1heGxldmVsIGxldmVscyIsZHR5cGU6InR5cGUgZHR5cGUgZm9ybWF0IG91dCBkc3Qgb3V0cHV0IGRlc3RpbmF0aW9uIn0pO3ZhciByPWwoZS5tYXhEZXB0aCwyNTUpLGk9bChlLmJvdW5kcyxvKHQsMikpO2lbMF09PT1pWzJdJiZpWzJdKyssaVsxXT09PWlbM10mJmlbM10rKzt2YXIgZCxnPXAodCxpKSx2PXQubGVuZ3RoPj4+MTtlLmR0eXBlfHwoZS5kdHlwZT0iYXJyYXkiKSwic3RyaW5nIj09dHlwZW9mIGUuZHR5cGU/ZD1uZXcoZihlLmR0eXBlKSkodik6ZS5kdHlwZSYmKGQ9ZS5kdHlwZSxBcnJheS5pc0FycmF5KGQpJiYoZC5sZW5ndGg9dikpO2Zvcih2YXIgbT0wO208djsrK20pZFttXT1tO3ZhciB5PVtdLHg9W10sYj1bXSxfPVtdOyFmdW5jdGlvbiB0KGUsbixpLGEsbyxzKXtpZighYS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGw9eVtvXXx8KHlbb109W10pO3ZhciBjPWJbb118fChiW29dPVtdKTt2YXIgdT14W29dfHwoeFtvXT1bXSk7dmFyIGY9bC5sZW5ndGg7bysrO2lmKG8+cil7Zm9yKHZhciBoPTA7aDxhLmxlbmd0aDtoKyspbC5wdXNoKGFbaF0pLGMucHVzaChzKSx1LnB1c2gobnVsbCxudWxsLG51bGwsbnVsbCk7cmV0dXJuIGZ9bC5wdXNoKGFbMF0pO2MucHVzaChzKTtpZihhLmxlbmd0aDw9MSlyZXR1cm4gdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpLGY7dmFyIHA9LjUqaTt2YXIgZD1lK3Asdj1uK3A7dmFyIG09W10sXz1bXSx3PVtdLGs9W107Zm9yKHZhciBUPTEsQT1hLmxlbmd0aDtUPEE7VCsrKXt2YXIgTT1hW1RdLFM9Z1syKk1dLEU9Z1syKk0rMV07UzxkP0U8dj9tLnB1c2goTSk6Xy5wdXNoKE0pOkU8dj93LnB1c2goTSk6ay5wdXNoKE0pfXM8PD0yO3UucHVzaCh0KGUsbixwLG0sbyxzKSx0KGUsdixwLF8sbyxzKzEpLHQoZCxuLHAsdyxvLHMrMiksdChkLHYscCxrLG8scyszKSk7cmV0dXJuIGZ9KDAsMCwxLGQsMCwxKTtmb3IodmFyIHc9MCxrPTA7azx5Lmxlbmd0aDtrKyspe3ZhciBUPXlba107aWYoZC5zZXQpZC5zZXQoVCx3KTtlbHNlIGZvcih2YXIgQT0wLE09VC5sZW5ndGg7QTxNO0ErKylkW0Erd109VFtBXTt2YXIgUz13K3lba10ubGVuZ3RoO19ba109W3csU10sdz1TfXJldHVybiBkLnJhbmdlPWZ1bmN0aW9uKCl7dmFyIGUscj1bXSxvPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKDtvLS07KXJbb109YXJndW1lbnRzW29dO2lmKHUocltyLmxlbmd0aC0xXSkpe3ZhciBjPXIucG9wKCk7ci5sZW5ndGh8fG51bGw9PWMueCYmbnVsbD09Yy5sJiZudWxsPT1jLmxlZnR8fChyPVtjXSxlPXt9KSxlPXMoYyx7bGV2ZWw6ImxldmVsIG1heExldmVsIixkOiJkIGRpYW0gZGlhbWV0ZXIgciByYWRpdXMgcHggcHhTaXplIHBpeGVsIHBpeGVsU2l6ZSBtYXhEIHNpemUgbWluU2l6ZSIsbG9kOiJsb2QgZGV0YWlscyByYW5nZXMgb2Zmc2V0cyJ9KX1lbHNlIGU9e307ci5sZW5ndGh8fChyPWkpO3ZhciBmPWEuYXBwbHkodm9pZCAwLHIpLGQ9W01hdGgubWluKGYueCxmLngrZi53aWR0aCksTWF0aC5taW4oZi55LGYueStmLmhlaWdodCksTWF0aC5tYXgoZi54LGYueCtmLndpZHRoKSxNYXRoLm1heChmLnksZi55K2YuaGVpZ2h0KV0sZz1kWzBdLHY9ZFsxXSxtPWRbMl0sdz1kWzNdLGs9cChbZyx2LG0sd10saSksVD1rWzBdLEE9a1sxXSxNPWtbMl0sUz1rWzNdLEM9bChlLmxldmVsLHkubGVuZ3RoKTtpZihudWxsIT1lLmQpe3ZhciBMOyJudW1iZXIiPT10eXBlb2YgZS5kP0w9W2UuZCxlLmRdOmUuZC5sZW5ndGgmJihMPWUuZCksQz1NYXRoLm1pbihNYXRoLm1heChNYXRoLmNlaWwoLWgoTWF0aC5hYnMoTFswXSkvKGlbMl0taVswXSkpKSxNYXRoLmNlaWwoLWgoTWF0aC5hYnMoTFsxXSkvKGlbM10taVsxXSkpKSksQyl9aWYoQz1NYXRoLm1pbihDLHkubGVuZ3RoKSxlLmxvZClyZXR1cm4gZnVuY3Rpb24odCxlLHIsaSxhKXtmb3IodmFyIG89W10scz0wO3M8YTtzKyspe3ZhciBsPWJbc10sYz1fW3NdWzBdLHU9RSh0LGUscyksZj1FKHIsaSxzKSxoPW4uZ2UobCx1KSxwPW4uZ3QobCxmLGgsbC5sZW5ndGgtMSk7b1tzXT1baCtjLHArY119cmV0dXJuIG99KFQsQSxNLFMsQyk7dmFyIHo9W107cmV0dXJuIGZ1bmN0aW9uIGUocixuLGksYSxvLHMpe2lmKG51bGwhPT1vJiZudWxsIT09cyl7dmFyIGw9citpLGM9bitpO2lmKCEoVD5sfHxBPmN8fE08cnx8UzxufHxhPj1DfHxvPT09cykpe3ZhciB1PXlbYV07dm9pZCAwPT09cyYmKHM9dS5sZW5ndGgpO2Zvcih2YXIgZj1vO2Y8cztmKyspe3ZhciBoPXVbZl0scD10WzIqaF0sZD10WzIqaCsxXTtwPj1nJiZwPD1tJiZkPj12JiZkPD13JiZ6LnB1c2goaCl9dmFyIGI9eFthXSxfPWJbNCpvKzBdLGs9Yls0Km8rMV0sRT1iWzQqbysyXSxMPWJbNCpvKzNdLE89ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bnVsbCxuPTA7bnVsbD09PXI7KWlmKHI9dFs0KmUrbl0sKytuPnQubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiByfShiLG8rMSksST0uNSppLEQ9YSsxO2UocixuLEksRCxfLGt8fEV8fEx8fE8pLGUocixuK0ksSSxELGssRXx8THx8TyksZShyK0ksbixJLEQsRSxMfHxPKSxlKHIrSSxuK0ksSSxELEwsTyl9fX0oMCwwLDEsMCwwLDEpLHp9LGQ7ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuPTEsaT0uNSxhPS41LG89LjUscz0wO3M8cjtzKyspbjw8PTIsbis9dDxpP2U8YT8wOjE6ZTxhPzI6MyxvKj0uNSxpKz10PGk/LW86byxhKz1lPGE/LW86bztyZXR1cm4gbn19fSx7ImFycmF5LWJvdW5kcyI6NTUsImJpbmFyeS1zZWFyY2gtYm91bmRzIjo0NjIsY2xhbXA6MTA1LGRlZmluZWQ6MTU1LGR0eXBlOjE2MCwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjIzLCJpcy1vYmoiOjQxMywibWF0aC1sb2cyIjo0MjQsInBhcnNlLXJlY3QiOjQ1MSwicGljay1ieS1hbGlhcyI6NDU3fV0sNDY0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLGE9W10scz0wO3M8ZTsrK3MpZm9yKHZhciB1PXRbc10sZj11Lmxlbmd0aCxoPWYtMSxwPTA7cDxmO2g9cCsrKXt2YXIgZD11W2hdLGc9dVtwXTtkWzBdPT09Z1swXT9hLnB1c2goW2QsZ10pOnIucHVzaChbZCxnXSl9aWYoMD09PXIubGVuZ3RoKXJldHVybiAwPT09YS5sZW5ndGg/Yzoodj1sKGEpLGZ1bmN0aW9uKHQpe3JldHVybiB2KHRbMF0sdFsxXSk/MDoxfSk7dmFyIHY7dmFyIG09aShyKSx5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPW8ubGUoZSxyWzBdKTtpZihpPDApcmV0dXJuIDE7dmFyIGE9dFtpXTtpZighYSl7aWYoIShpPjAmJmVbaV09PT1yWzBdKSlyZXR1cm4gMTthPXRbaS0xXX1mb3IodmFyIHM9MTthOyl7dmFyIGw9YS5rZXksYz1uKHIsbFswXSxsWzFdKTtpZihsWzBdWzBdPGxbMV1bMF0paWYoYzwwKWE9YS5sZWZ0O2Vsc2V7aWYoIShjPjApKXJldHVybiAwO3M9LTEsYT1hLnJpZ2h0fWVsc2UgaWYoYz4wKWE9YS5sZWZ0O2Vsc2V7aWYoIShjPDApKXJldHVybiAwO3M9MSxhPWEucmlnaHR9fXJldHVybiBzfX0obS5zbGFicyxtLmNvb3JkaW5hdGVzKTtyZXR1cm4gMD09PWEubGVuZ3RoP3k6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoclswXSxyWzFdKT8wOmUocil9fShsKGEpLHkpfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXSxpPXQoInNsYWItZGVjb21wb3NpdGlvbiIpLGE9dCgiaW50ZXJ2YWwtdHJlZS0xZCIpLG89dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBzKCl7cmV0dXJuITB9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdLGk9blswXVswXSxvPW5bMF1bMV0sbD1uWzFdWzFdLGM9W01hdGgubWluKG8sbCksTWF0aC5tYXgobyxsKV07aSBpbiBlP2VbaV0ucHVzaChjKTplW2ldPVtjXX12YXIgdT17fSxmPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxmLmxlbmd0aDsrK3Ipe3ZhciBoPWVbZltyXV07dVtmW3JdXT1hKGgpfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdO3JldHVybiEhbiYmISFuLnF1ZXJ5UG9pbnQocixzKX19KHUpfWZ1bmN0aW9uIGModCl7cmV0dXJuIDF9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo4MSwiaW50ZXJ2YWwtdHJlZS0xZCI6NDA2LCJyb2J1c3Qtb3JpZW50YXRpb24iOjQ5NCwic2xhYi1kZWNvbXBvc2l0aW9uIjo1MTB9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXQoIi4vbGliL2J1aWxkLWxvZyIpLGE9dCgiLi9saWIvZXBzaWxvbiIpLG89dCgiLi9saWIvaW50ZXJzZWN0ZXIiKSxzPXQoIi4vbGliL3NlZ21lbnQtY2hhaW5lciIpLGw9dCgiLi9saWIvc2VnbWVudC1zZWxlY3RvciIpLGM9dCgiLi9saWIvZ2VvanNvbiIpLHU9ITEsZj1hKCk7ZnVuY3Rpb24gaCh0LGUscil7dmFyIGk9bi5zZWdtZW50cyh0KSxhPW4uc2VnbWVudHMoZSksbz1yKG4uY29tYmluZShpLGEpKTtyZXR1cm4gbi5wb2x5Z29uKG8pfW49e2J1aWxkTG9nOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD91PWkoKTohMT09PXQmJih1PSExKSwhMSE9PXUmJnUubGlzdH0sZXBzaWxvbjpmdW5jdGlvbih0KXtyZXR1cm4gZi5lcHNpbG9uKHQpfSxzZWdtZW50czpmdW5jdGlvbih0KXt2YXIgZT1vKCEwLGYsdSk7cmV0dXJuIHQucmVnaW9ucy5mb3JFYWNoKGUuYWRkUmVnaW9uKSx7c2VnbWVudHM6ZS5jYWxjdWxhdGUodC5pbnZlcnRlZCksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LGNvbWJpbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm57Y29tYmluZWQ6byghMSxmLHUpLmNhbGN1bGF0ZSh0LnNlZ21lbnRzLHQuaW52ZXJ0ZWQsZS5zZWdtZW50cyxlLmludmVydGVkKSxpbnZlcnRlZDE6dC5pbnZlcnRlZCxpbnZlcnRlZDI6ZS5pbnZlcnRlZH19LHNlbGVjdFVuaW9uOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnVuaW9uKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDF8fHQuaW52ZXJ0ZWQyfX0sc2VsZWN0SW50ZXJzZWN0OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmludGVyc2VjdCh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiZ0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2U6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZSh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiYhdC5pbnZlcnRlZDJ9fSxzZWxlY3REaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmRpZmZlcmVuY2VSZXYodC5jb21iaW5lZCx1KSxpbnZlcnRlZDohdC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0WG9yOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnhvcih0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxIT09dC5pbnZlcnRlZDJ9fSxwb2x5Z29uOmZ1bmN0aW9uKHQpe3JldHVybntyZWdpb25zOnModC5zZWdtZW50cyxmLHUpLGludmVydGVkOnQuaW52ZXJ0ZWR9fSxwb2x5Z29uRnJvbUdlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMudG9Qb2x5Z29uKG4sdCl9LHBvbHlnb25Ub0dlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMuZnJvbVBvbHlnb24obixmLHQpfSx1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdFVuaW9uKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0SW50ZXJzZWN0KX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdERpZmZlcmVuY2UpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0RGlmZmVyZW5jZVJldil9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdFhvcil9fSwib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5Qb2x5Qm9vbD1uKSxlLmV4cG9ydHM9bn0seyIuL2xpYi9idWlsZC1sb2ciOjQ2NiwiLi9saWIvZXBzaWxvbiI6NDY3LCIuL2xpYi9nZW9qc29uIjo0NjgsIi4vbGliL2ludGVyc2VjdGVyIjo0NjksIi4vbGliL3NlZ21lbnQtY2hhaW5lciI6NDcxLCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIjo0NzJ9XSw0NjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPTAscj0hMTtmdW5jdGlvbiBuKGUscil7cmV0dXJuIHQubGlzdC5wdXNoKHt0eXBlOmUsZGF0YTpyP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocikpOnZvaWQgMH0pLHR9cmV0dXJuIHQ9e2xpc3Q6W10sc2VnbWVudElkOmZ1bmN0aW9uKCl7cmV0dXJuIGUrK30sY2hlY2tJbnRlcnNlY3Rpb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hlY2siLHtzZWcxOnQsc2VnMjplfSl9LHNlZ21lbnRDaG9wOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImRpdl9zZWciLHtzZWc6dCxwdDplfSksbigiY2hvcCIse3NlZzp0LHB0OmV9KX0sc3RhdHVzUmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJwb3Bfc2VnIix7c2VnOnR9KX0sc2VnbWVudFVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VnX3VwZGF0ZSIse3NlZzp0fSl9LHNlZ21lbnROZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigibmV3X3NlZyIse3NlZzp0LHByaW1hcnk6ZX0pfSxzZWdtZW50UmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJyZW1fc2VnIix7c2VnOnR9KX0sdGVtcFN0YXR1czpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4oInRlbXBfc3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHJld2luZDpmdW5jdGlvbih0KXtyZXR1cm4gbigicmV3aW5kIix7c2VnOnR9KX0sc3RhdHVzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigic3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1yP3Q6KHI9ZSxuKCJ2ZXJ0Iix7eDplfSkpfSxsb2c6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYodD1KU09OLnN0cmluZ2lmeSh0LCExLCIgICIpKSxuKCJsb2ciLHt0eHQ6dH0pfSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBuKCJyZXNldCIpfSxzZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VsZWN0ZWQiLHtzZWdzOnR9KX0sY2hhaW5TdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbigiY2hhaW5fc3RhcnQiLHtzZWc6dH0pfSxjaGFpblJlbW92ZUhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fcmVtX2hlYWQiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5SZW1vdmVUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX3JlbV90YWlsIix7aW5kZXg6dCxwdDplfSl9LGNoYWluTmV3OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX25ldyIse3B0MTp0LHB0MjplfSl9LGNoYWluTWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX21hdGNoIix7aW5kZXg6dH0pfSxjaGFpbkNsb3NlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9jbG9zZSIse2luZGV4OnR9KX0sY2hhaW5BZGRIZWFkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2FkZF9oZWFkIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQWRkVGFpbDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9hZGRfdGFpbCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpbkNvbm5lY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fY29uIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sY2hhaW5SZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9yZXYiLHtpbmRleDp0fSl9LGNoYWluSm9pbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9qb2luIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sZG9uZTpmdW5jdGlvbigpe3JldHVybiBuKCJkb25lIil9fX19LHt9XSw0Njc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Im51bWJlciIhPXR5cGVvZiB0JiYodD0xZS0xMCk7dmFyIGU9e2Vwc2lsb246ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiYodD1lKSx0fSxwb2ludEFib3ZlT3JPbkxpbmU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89blswXSxzPW5bMV0sbD1lWzBdO3JldHVybihvLWkpKihlWzFdLWEpLShzLWEpKihsLWkpPj0tdH0scG9pbnRCZXR3ZWVuOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1lWzFdLXJbMV0sYT1uWzBdLXJbMF0sbz1lWzBdLXJbMF0scz1uWzFdLXJbMV0sbD1vKmEraSpzO3JldHVybiEobDx0fHxsLShhKmErcypzKT4tdCl9LHBvaW50c1NhbWVYOmZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguYWJzKGVbMF0tclswXSk8dH0scG9pbnRzU2FtZVk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVsxXS1yWzFdKTx0fSxwb2ludHNTYW1lOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKSYmZS5wb2ludHNTYW1lWSh0LHIpfSxwb2ludHNDb21wYXJlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKT9lLnBvaW50c1NhbWVZKHQscik/MDp0WzFdPHJbMV0/LTE6MTp0WzBdPHJbMF0/LTE6MX0scG9pbnRzQ29sbGluZWFyOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1lWzBdLXJbMF0sYT1lWzFdLXJbMV0sbz1yWzBdLW5bMF0scz1yWzFdLW5bMV07cmV0dXJuIE1hdGguYWJzKGkqcy1vKmEpPHR9LGxpbmVzSW50ZXJzZWN0OmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXJbMF0tZVswXSxvPXJbMV0tZVsxXSxzPWlbMF0tblswXSxsPWlbMV0tblsxXSxjPWEqbC1vKnM7aWYoTWF0aC5hYnMoYyk8dClyZXR1cm4hMTt2YXIgdT1lWzBdLW5bMF0sZj1lWzFdLW5bMV0saD0ocypmLWwqdSkvYyxwPShhKmYtbyp1KS9jLGQ9e2Fsb25nQTowLGFsb25nQjowLHB0OltlWzBdK2gqYSxlWzFdK2gqb119O3JldHVybiBkLmFsb25nQT1oPD0tdD8tMjpoPHQ/LTE6aC0xPD0tdD8wOmgtMTx0PzE6MixkLmFsb25nQj1wPD0tdD8tMjpwPHQ/LTE6cC0xPD0tdD8wOnAtMTx0PzE6MixkfSxwb2ludEluc2lkZVJlZ2lvbjpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lWzBdLGk9ZVsxXSxhPXJbci5sZW5ndGgtMV1bMF0sbz1yW3IubGVuZ3RoLTFdWzFdLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdWzBdLHU9cltsXVsxXTt1LWk+dCE9by1pPnQmJihhLWMpKihpLXUpLyhvLXUpK2Mtbj50JiYocz0hcyksYT1jLG89dX1yZXR1cm4gc319O3JldHVybiBlfX0se31dLDQ2ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt0b1BvbHlnb246ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe2lmKGUubGVuZ3RoPD0wKXJldHVybiB0LnNlZ21lbnRzKHtpbnZlcnRlZDohMSxyZWdpb25zOltdfSk7ZnVuY3Rpb24gcihlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W3JdfSl9Zm9yKHZhciBuPXIoZVswXSksaT0xO2k8ZS5sZW5ndGg7aSsrKW49dC5zZWxlY3REaWZmZXJlbmNlKHQuY29tYmluZShuLHIoZVtpXSkpKTtyZXR1cm4gbn1pZigiUG9seWdvbiI9PT1lLnR5cGUpcmV0dXJuIHQucG9seWdvbihyKGUuY29vcmRpbmF0ZXMpKTtpZigiTXVsdGlQb2x5Z29uIj09PWUudHlwZSl7Zm9yKHZhciBuPXQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KSxpPTA7aTxlLmNvb3JkaW5hdGVzLmxlbmd0aDtpKyspbj10LnNlbGVjdFVuaW9uKHQuY29tYmluZShuLHIoZS5jb29yZGluYXRlc1tpXSkpKTtyZXR1cm4gdC5wb2x5Z29uKG4pfXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IENhbm5vdCBjb252ZXJ0IEdlb0pTT04gb2JqZWN0IHRvIFBvbHlCb29sIHBvbHlnb24iKX0sZnJvbVBvbHlnb246ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxyKXtyZXR1cm4gZS5wb2ludEluc2lkZVJlZ2lvbihbLjUqKHRbMF1bMF0rdFsxXVswXSksLjUqKHRbMF1bMV0rdFsxXVsxXSldLHIpfWZ1bmN0aW9uIGkodCl7cmV0dXJue3JlZ2lvbjp0LGNoaWxkcmVuOltdfX1yPXQucG9seWdvbih0LnNlZ21lbnRzKHIpKTt2YXIgYT1pKG51bGwpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7aWYobihlLChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbikpcmV0dXJuIHZvaWQgbyhzLGUpfXZhciBhPWkoZSk7Zm9yKHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7dmFyIHM7bigocz10LmNoaWxkcmVuW3JdKS5yZWdpb24sZSkmJihhLmNoaWxkcmVuLnB1c2gocyksdC5jaGlsZHJlbi5zcGxpY2UociwxKSxyLS0pfXQuY2hpbGRyZW4ucHVzaChhKX1mb3IodmFyIHM9MDtzPHIucmVnaW9ucy5sZW5ndGg7cysrKXt2YXIgbD1yLnJlZ2lvbnNbc107bC5sZW5ndGg8M3x8byhhLGwpfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXRbdC5sZW5ndGgtMV1bMF0saT10W3QubGVuZ3RoLTFdWzFdLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dWzBdLGw9dFtvXVsxXTthLnB1c2goW3MsbF0pLHIrPWwqbi1zKmksbj1zLGk9bH1yZXR1cm4gcjwwIT09ZSYmYS5yZXZlcnNlKCksYS5wdXNoKFthWzBdWzBdLGFbMF1bMV1dKSxhfXZhciB1PVtdO2Z1bmN0aW9uIGYodCl7dmFyIGU9W2ModC5yZWdpb24sITEpXTt1LnB1c2goZSk7Zm9yKHZhciByPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDtyKyspZS5wdXNoKGgodC5jaGlsZHJlbltyXSkpfWZ1bmN0aW9uIGgodCl7Zm9yKHZhciBlPTA7ZTx0LmNoaWxkcmVuLmxlbmd0aDtlKyspZih0LmNoaWxkcmVuW2VdKTtyZXR1cm4gYyh0LnJlZ2lvbiwhMCl9Zm9yKHM9MDtzPGEuY2hpbGRyZW4ubGVuZ3RoO3MrKylmKGEuY2hpbGRyZW5bc10pO3JldHVybiB1Lmxlbmd0aDw9MD97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W119OjE9PXUubGVuZ3RoP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp1WzBdfTp7dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp1fX19O2UuZXhwb3J0cz1ufSx7fV0sNDY5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9saW5rZWQtbGlzdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJue2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LGVuZDplLG15RmlsbDp7YWJvdmU6bi5teUZpbGwuYWJvdmUsYmVsb3c6bi5teUZpbGwuYmVsb3d9LG90aGVyRmlsbDpudWxsfX12YXIgYT1uLmNyZWF0ZSgpO2Z1bmN0aW9uIG8odCxyKXthLmluc2VydEJlZm9yZSh0LGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LHIsbixpLGEsbyl7dmFyIHM9ZS5wb2ludHNDb21wYXJlKHIsYSk7cmV0dXJuIDAhPT1zP3M6ZS5wb2ludHNTYW1lKG4sbyk/MDp0IT09aT90PzE6LTE6ZS5wb2ludEFib3ZlT3JPbkxpbmUobixpP2E6byxpP286YSk/MTotMX0odC5pc1N0YXJ0LHQucHQscixuLmlzU3RhcnQsbi5wdCxuLm90aGVyLnB0KTwwfSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5ub2RlKHtpc1N0YXJ0OiEwLHB0OnQuc3RhcnQsc2VnOnQscHJpbWFyeTplLG90aGVyOm51bGwsc3RhdHVzOm51bGx9KTtyZXR1cm4gbyhyLHQuZW5kKSxyfSh0LGUpO3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIGk9bi5ub2RlKHtpc1N0YXJ0OiExLHB0OmUuZW5kLHNlZzplLHByaW1hcnk6cixvdGhlcjp0LHN0YXR1czpudWxsfSk7dC5vdGhlcj1pLG8oaSx0LnB0KX0ocix0LGUpLHJ9ZnVuY3Rpb24gbCh0LGUpe3ZhciBuPWkoZSx0LnNlZy5lbmQsdC5zZWcpO3JldHVybiBmdW5jdGlvbih0LGUpe3ImJnIuc2VnbWVudENob3AodC5zZWcsZSksdC5vdGhlci5yZW1vdmUoKSx0LnNlZy5lbmQ9ZSx0Lm90aGVyLnB0PWUsbyh0Lm90aGVyLHQucHQpfSh0LGUpLHMobix0LnByaW1hcnkpfWZ1bmN0aW9uIGMoaSxvKXt2YXIgcz1uLmNyZWF0ZSgpO2Z1bmN0aW9uIGModCl7cmV0dXJuIHMuZmluZFRyYW5zaXRpb24oZnVuY3Rpb24ocil7dmFyIG4saSxhLG8scyxsO3JldHVybiBuPXQsaT1yLmV2LGE9bi5zZWcuc3RhcnQsbz1uLnNlZy5lbmQscz1pLnNlZy5zdGFydCxsPWkuc2VnLmVuZCwoZS5wb2ludHNDb2xsaW5lYXIoYSxzLGwpP2UucG9pbnRzQ29sbGluZWFyKG8scyxsKT8xOmUucG9pbnRBYm92ZU9yT25MaW5lKG8scyxsKT8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKGEscyxsKT8xOi0xKT4wfSl9ZnVuY3Rpb24gdSh0LG4pe3ZhciBpPXQuc2VnLGE9bi5zZWcsbz1pLnN0YXJ0LHM9aS5lbmQsYz1hLnN0YXJ0LHU9YS5lbmQ7ciYmci5jaGVja0ludGVyc2VjdGlvbihpLGEpO3ZhciBmPWUubGluZXNJbnRlcnNlY3QobyxzLGMsdSk7aWYoITE9PT1mKXtpZighZS5wb2ludHNDb2xsaW5lYXIobyxzLGMpKXJldHVybiExO2lmKGUucG9pbnRzU2FtZShvLHUpfHxlLnBvaW50c1NhbWUocyxjKSlyZXR1cm4hMTt2YXIgaD1lLnBvaW50c1NhbWUobyxjKSxwPWUucG9pbnRzU2FtZShzLHUpO2lmKGgmJnApcmV0dXJuIG47dmFyIGQ9IWgmJmUucG9pbnRCZXR3ZWVuKG8sYyx1KSxnPSFwJiZlLnBvaW50QmV0d2VlbihzLGMsdSk7aWYoaClyZXR1cm4gZz9sKG4scyk6bCh0LHUpLG47ZCYmKHB8fChnP2wobixzKTpsKHQsdSkpLGwobixvKSl9ZWxzZSAwPT09Zi5hbG9uZ0EmJigtMT09PWYuYWxvbmdCP2wodCxjKTowPT09Zi5hbG9uZ0I/bCh0LGYucHQpOjE9PT1mLmFsb25nQiYmbCh0LHUpKSwwPT09Zi5hbG9uZ0ImJigtMT09PWYuYWxvbmdBP2wobixvKTowPT09Zi5hbG9uZ0E/bChuLGYucHQpOjE9PT1mLmFsb25nQSYmbChuLHMpKTtyZXR1cm4hMX1mb3IodmFyIGY9W107IWEuaXNFbXB0eSgpOyl7dmFyIGg9YS5nZXRIZWFkKCk7aWYociYmci52ZXJ0KGgucHRbMF0pLGguaXNTdGFydCl7ciYmci5zZWdtZW50TmV3KGguc2VnLGgucHJpbWFyeSk7dmFyIHA9YyhoKSxkPXAuYmVmb3JlP3AuYmVmb3JlLmV2Om51bGwsZz1wLmFmdGVyP3AuYWZ0ZXIuZXY6bnVsbDtmdW5jdGlvbiB2KCl7aWYoZCl7dmFyIHQ9dShoLGQpO2lmKHQpcmV0dXJuIHR9cmV0dXJuISFnJiZ1KGgsZyl9ciYmci50ZW1wU3RhdHVzKGguc2VnLCEhZCYmZC5zZWcsISFnJiZnLnNlZyk7dmFyIG0seSx4PXYoKTtpZih4KXQ/KHk9bnVsbD09PWguc2VnLm15RmlsbC5iZWxvd3x8aC5zZWcubXlGaWxsLmFib3ZlIT09aC5zZWcubXlGaWxsLmJlbG93KSYmKHguc2VnLm15RmlsbC5hYm92ZT0heC5zZWcubXlGaWxsLmFib3ZlKTp4LnNlZy5vdGhlckZpbGw9aC5zZWcubXlGaWxsLHImJnIuc2VnbWVudFVwZGF0ZSh4LnNlZyksaC5vdGhlci5yZW1vdmUoKSxoLnJlbW92ZSgpO2lmKGEuZ2V0SGVhZCgpIT09aCl7ciYmci5yZXdpbmQoaC5zZWcpO2NvbnRpbnVlfXQ/KHk9bnVsbD09PWguc2VnLm15RmlsbC5iZWxvd3x8aC5zZWcubXlGaWxsLmFib3ZlIT09aC5zZWcubXlGaWxsLmJlbG93LGguc2VnLm15RmlsbC5iZWxvdz1nP2cuc2VnLm15RmlsbC5hYm92ZTppLGguc2VnLm15RmlsbC5hYm92ZT15PyFoLnNlZy5teUZpbGwuYmVsb3c6aC5zZWcubXlGaWxsLmJlbG93KTpudWxsPT09aC5zZWcub3RoZXJGaWxsJiYobT1nP2gucHJpbWFyeT09PWcucHJpbWFyeT9nLnNlZy5vdGhlckZpbGwuYWJvdmU6Zy5zZWcubXlGaWxsLmFib3ZlOmgucHJpbWFyeT9vOmksaC5zZWcub3RoZXJGaWxsPXthYm92ZTptLGJlbG93Om19KSxyJiZyLnN0YXR1cyhoLnNlZywhIWQmJmQuc2VnLCEhZyYmZy5zZWcpLGgub3RoZXIuc3RhdHVzPXAuaW5zZXJ0KG4ubm9kZSh7ZXY6aH0pKX1lbHNle3ZhciBiPWguc3RhdHVzO2lmKG51bGw9PT1iKXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7aWYocy5leGlzdHMoYi5wcmV2KSYmcy5leGlzdHMoYi5uZXh0KSYmdShiLnByZXYuZXYsYi5uZXh0LmV2KSxyJiZyLnN0YXR1c1JlbW92ZShiLmV2LnNlZyksYi5yZW1vdmUoKSwhaC5wcmltYXJ5KXt2YXIgXz1oLnNlZy5teUZpbGw7aC5zZWcubXlGaWxsPWguc2VnLm90aGVyRmlsbCxoLnNlZy5vdGhlckZpbGw9X31mLnB1c2goaC5zZWcpfWEuZ2V0SGVhZCgpLnJlbW92ZSgpfXJldHVybiByJiZyLmRvbmUoKSxmfXJldHVybiB0P3thZGRSZWdpb246ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGksYSxvPXRbdC5sZW5ndGgtMV0sbD0wO2w8dC5sZW5ndGg7bCsrKXtuPW8sbz10W2xdO3ZhciBjPWUucG9pbnRzQ29tcGFyZShuLG8pOzAhPT1jJiZzKChpPWM8MD9uOm8sYT1jPDA/bzpuLHtpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6aSxlbmQ6YSxteUZpbGw6e2Fib3ZlOm51bGwsYmVsb3c6bnVsbH0sb3RoZXJGaWxsOm51bGx9KSwhMCl9fSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwhMSl9fTp7Y2FsY3VsYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITApfSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3MoaSh0LnN0YXJ0LHQuZW5kLHQpLCExKX0pLGMoZSxuKX19fX0seyIuL2xpbmtlZC1saXN0Ijo0NzB9XSw0NzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXtyb290Ontyb290OiEwLG5leHQ6bnVsbH0sZXhpc3RzOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmZSE9PXQucm9vdH0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dC5yb290Lm5leHR9LGdldEhlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5yb290Lm5leHR9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj10LnJvb3QsaT10LnJvb3QubmV4dDtudWxsIT09aTspe2lmKHIoaSkpcmV0dXJuIGUucHJldj1pLnByZXYsZS5uZXh0PWksaS5wcmV2Lm5leHQ9ZSx2b2lkKGkucHJldj1lKTtuPWksaT1pLm5leHR9bi5uZXh0PWUsZS5wcmV2PW4sZS5uZXh0PW51bGx9LGZpbmRUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10LnJvb3Qsbj10LnJvb3QubmV4dDtudWxsIT09biYmIWUobik7KXI9bixuPW4ubmV4dDtyZXR1cm57YmVmb3JlOnI9PT10LnJvb3Q/bnVsbDpyLGFmdGVyOm4saW5zZXJ0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXY9cix0Lm5leHQ9bixyLm5leHQ9dCxudWxsIT09biYmKG4ucHJldj10KSx0fX19fTtyZXR1cm4gdH0sbm9kZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PW51bGwsdC5uZXh0PW51bGwsdC5yZW1vdmU9ZnVuY3Rpb24oKXt0LnByZXYubmV4dD10Lm5leHQsdC5uZXh0JiYodC5uZXh0LnByZXY9dC5wcmV2KSx0LnByZXY9bnVsbCx0Lm5leHQ9bnVsbH0sdH19fSx7fV0sNDcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bXSxpPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGE9dC5zdGFydCxvPXQuZW5kO2lmKGUucG9pbnRzU2FtZShhLG8pKWNvbnNvbGUud2FybigiUG9seUJvb2w6IFdhcm5pbmc6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7ZWxzZXtyJiZyLmNoYWluU3RhcnQodCk7Zm9yKHZhciBzPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0sbD17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGM9cyx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBmPSh2PW5bdV0pWzBdLGg9KHZbMV0sdlt2Lmxlbmd0aC0xXSk7aWYodlt2Lmxlbmd0aC0yXSxlLnBvaW50c1NhbWUoZixhKSl7aWYoVCh1LCEwLCEwKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShmLG8pKXtpZihUKHUsITAsITEpKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGgsYSkpe2lmKFQodSwhMSwhMCkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoaCxvKSYmVCh1LCExLCExKSlicmVha31pZihjPT09cylyZXR1cm4gbi5wdXNoKFthLG9dKSx2b2lkKHImJnIuY2hhaW5OZXcoYSxvKSk7aWYoYz09PWwpe3ImJnIuY2hhaW5NYXRjaChzLmluZGV4KTt2YXIgcD1zLmluZGV4LGQ9cy5tYXRjaGVzX3B0MT9vOmEsZz1zLm1hdGNoZXNfaGVhZCx2PW5bcF0sbT1nP3ZbMF06dlt2Lmxlbmd0aC0xXSx5PWc/dlsxXTp2W3YubGVuZ3RoLTJdLHg9Zz92W3YubGVuZ3RoLTFdOnZbMF0sYj1nP3Zbdi5sZW5ndGgtMl06dlsxXTtyZXR1cm4gZS5wb2ludHNDb2xsaW5lYXIoeSxtLGQpJiYoZz8ociYmci5jaGFpblJlbW92ZUhlYWQocy5pbmRleCxkKSx2LnNoaWZ0KCkpOihyJiZyLmNoYWluUmVtb3ZlVGFpbChzLmluZGV4LGQpLHYucG9wKCkpLG09eSksZS5wb2ludHNTYW1lKHgsZCk/KG4uc3BsaWNlKHAsMSksZS5wb2ludHNDb2xsaW5lYXIoYix4LG0pJiYoZz8ociYmci5jaGFpblJlbW92ZVRhaWwocy5pbmRleCxtKSx2LnBvcCgpKToociYmci5jaGFpblJlbW92ZUhlYWQocy5pbmRleCxtKSx2LnNoaWZ0KCkpKSxyJiZyLmNoYWluQ2xvc2Uocy5pbmRleCksdm9pZCBpLnB1c2godikpOnZvaWQoZz8ociYmci5jaGFpbkFkZEhlYWQocy5pbmRleCxkKSx2LnVuc2hpZnQoZCkpOihyJiZyLmNoYWluQWRkVGFpbChzLmluZGV4LGQpLHYucHVzaChkKSkpfXZhciBfPXMuaW5kZXgsdz1sLmluZGV4O3ImJnIuY2hhaW5Db25uZWN0KF8sdyk7dmFyIGs9bltfXS5sZW5ndGg8blt3XS5sZW5ndGg7cy5tYXRjaGVzX2hlYWQ/bC5tYXRjaGVzX2hlYWQ/az8oQShfKSxNKF8sdykpOihBKHcpLE0odyxfKSk6TSh3LF8pOmwubWF0Y2hlc19oZWFkP00oXyx3KTprPyhBKF8pLE0odyxfKSk6KEEodyksTShfLHcpKX1mdW5jdGlvbiBUKHQsZSxyKXtyZXR1cm4gYy5pbmRleD10LGMubWF0Y2hlc19oZWFkPWUsYy5tYXRjaGVzX3B0MT1yLGM9PT1zPyhjPWwsITEpOihjPW51bGwsITApfWZ1bmN0aW9uIEEodCl7ciYmci5jaGFpblJldmVyc2UodCksblt0XS5yZXZlcnNlKCl9ZnVuY3Rpb24gTSh0LGkpe3ZhciBhPW5bdF0sbz1uW2ldLHM9YVthLmxlbmd0aC0xXSxsPWFbYS5sZW5ndGgtMl0sYz1vWzBdLHU9b1sxXTtlLnBvaW50c0NvbGxpbmVhcihsLHMsYykmJihyJiZyLmNoYWluUmVtb3ZlVGFpbCh0LHMpLGEucG9wKCkscz1sKSxlLnBvaW50c0NvbGxpbmVhcihzLGMsdSkmJihyJiZyLmNoYWluUmVtb3ZlSGVhZChpLGMpLG8uc2hpZnQoKSksciYmci5jaGFpbkpvaW4odCxpKSxuW3RdPWEuY29uY2F0KG8pLG4uc3BsaWNlKGksMSl9fSksaX19LHt9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPSh0Lm15RmlsbC5hYm92ZT84OjApKyh0Lm15RmlsbC5iZWxvdz80OjApKyh0Lm90aGVyRmlsbCYmdC5vdGhlckZpbGwuYWJvdmU/MjowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmJlbG93PzE6MCk7MCE9PWVbaV0mJm4ucHVzaCh7aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kLG15RmlsbDp7YWJvdmU6MT09PWVbaV0sYmVsb3c6Mj09PWVbaV19LG90aGVyRmlsbDpudWxsfSl9KSxyJiZyLnNlbGVjdGVkKG4pLG59dmFyIGk9e3VuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwyLDIsMCwwLDEsMCwxLDAsMCwwLDAsMF0sZSl9LGludGVyc2VjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMCwwLDAsMCwyLDAsMiwwLDAsMSwxLDAsMiwxLDBdLGUpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwwLDAsMCwyLDAsMiwwLDEsMSwwLDAsMCwxLDIsMF0sZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDAsMCwxLDEsMCwyLDAsMiwwLDAsMCwwXSxlKX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwyLDAsMCwxLDEsMCwwLDIsMCwxLDIsMF0sZSl9fTtlLmV4cG9ydHM9aX0se31dLDQ3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1uZXcgRmxvYXQ2NEFycmF5KDQpLGk9bmV3IEZsb2F0NjRBcnJheSg0KSxhPW5ldyBGbG9hdDY0QXJyYXkoNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyl7bi5sZW5ndGg8by5sZW5ndGgmJihuPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpLGk9bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksYT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSk7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDsrK2wpbltsXT10W2xdLW9bbF0saVtsXT1lW2xdLXRbbF0sYVtsXT1yW2xdLXRbbF07dmFyIGM9MCx1PTAsZj0wLGg9MCxwPTAsZD0wO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpe3ZhciBnPWlbbF0sdj1hW2xdLG09bltsXTtjKz1nKmcsdSs9Zyp2LGYrPXYqdixoKz1tKmcscCs9bSp2LGQrPW0qbX12YXIgeSx4LGIsXyx3LGs9TWF0aC5hYnMoYypmLXUqdSksVD11KnAtZipoLEE9dSpoLWMqcDtpZihUK0E8PWspaWYoVDwwKUE8MCYmaDwwPyhBPTAsLWg+PWM/KFQ9MSx5PWMrMipoK2QpOnk9aCooVD0taC9jKStkKTooVD0wLHA+PTA/KEE9MCx5PWQpOi1wPj1mPyhBPTEseT1mKzIqcCtkKTp5PXAqKEE9LXAvZikrZCk7ZWxzZSBpZihBPDApQT0wLGg+PTA/KFQ9MCx5PWQpOi1oPj1jPyhUPTEseT1jKzIqaCtkKTp5PWgqKFQ9LWgvYykrZDtlbHNle3ZhciBNPTEvazt5PShUKj1NKSooYypUK3UqKEEqPU0pKzIqaCkrQSoodSpUK2YqQSsyKnApK2R9ZWxzZSBUPDA/KGI9ZitwKT4oeD11K2gpPyhfPWIteCk+PSh3PWMtMip1K2YpPyhUPTEsQT0wLHk9YysyKmgrZCk6eT0oVD1fL3cpKihjKlQrdSooQT0xLVQpKzIqaCkrQSoodSpUK2YqQSsyKnApK2Q6KFQ9MCxiPD0wPyhBPTEseT1mKzIqcCtkKTpwPj0wPyhBPTAseT1kKTp5PXAqKEE9LXAvZikrZCk6QTwwPyhiPWMraCk+KHg9dStwKT8oXz1iLXgpPj0odz1jLTIqdStmKT8oQT0xLFQ9MCx5PWYrMipwK2QpOnk9KFQ9MS0oQT1fL3cpKSooYypUK3UqQSsyKmgpK0EqKHUqVCtmKkErMipwKStkOihBPTAsYjw9MD8oVD0xLHk9YysyKmgrZCk6aD49MD8oVD0wLHk9ZCk6eT1oKihUPS1oL2MpK2QpOihfPWYrcC11LWgpPD0wPyhUPTAsQT0xLHk9ZisyKnArZCk6Xz49KHc9Yy0yKnUrZik/KFQ9MSxBPTAseT1jKzIqaCtkKTp5PShUPV8vdykqKGMqVCt1KihBPTEtVCkrMipoKStBKih1KlQrZipBKzIqcCkrZDt2YXIgUz0xLVQtQTtmb3IobD0wO2w8by5sZW5ndGg7KytsKXNbbF09Uyp0W2xdK1QqZVtsXStBKnJbbF07cmV0dXJuIHk8MD8wOnl9fSx7fV0sNDc0OltmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbCh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09b3x8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6b31jYXRjaCh0KXtuPW99dHJ5e2k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6c31jYXRjaCh0KXtpPXN9fSgpO3ZhciBjLHU9W10sZj0hMSxoPS0xO2Z1bmN0aW9uIHAoKXtmJiZjJiYoZj0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmg9LTEsdS5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFmKXt2YXIgdD1sKHApO2Y9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3IoYz11LHU9W107KytoPGU7KWMmJmNbaF0ucnVuKCk7aD0tMSxlPXUubGVuZ3RofWM9bnVsbCxmPSExLGZ1bmN0aW9uKHQpe2lmKGk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoaT09PXN8fCFpKSYmY2xlYXJUaW1lb3V0KXJldHVybiBpPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e2kodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBpLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gaS5jYWxsKHRoaXMsdCl9fX0odCl9fWZ1bmN0aW9uIGcodCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiB2KCl7fWEubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTt1LnB1c2gobmV3IGcodCxlKSksMSE9PXUubGVuZ3RofHxmfHxsKGQpfSxnLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxhLnRpdGxlPSJicm93c2VyIixhLmJyb3dzZXI9ITAsYS5lbnY9e30sYS5hcmd2PVtdLGEudmVyc2lvbj0iIixhLnZlcnNpb25zPXt9LGEub249dixhLmFkZExpc3RlbmVyPXYsYS5vbmNlPXYsYS5vZmY9dixhLnJlbW92ZUxpc3RlbmVyPXYsYS5yZW1vdmVBbGxMaXN0ZW5lcnM9dixhLmVtaXQ9dixhLnByZXBlbmRMaXN0ZW5lcj12LGEucHJlcGVuZE9uY2VMaXN0ZW5lcj12LGEubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxhLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxhLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sYS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxhLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sNDc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImdsLXF1YXQvc2xlcnAiKX0seyJnbC1xdWF0L3NsZXJwIjoyODl9XSw0NzY6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQoInBlcmZvcm1hbmNlLW5vdyIpLGk9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/cjp3aW5kb3csYT1bIm1veiIsIndlYmtpdCJdLG89IkFuaW1hdGlvbkZyYW1lIixzPWlbInJlcXVlc3QiK29dLGw9aVsiY2FuY2VsIitvXXx8aVsiY2FuY2VsUmVxdWVzdCIrb10sYz0wOyFzJiZjPGEubGVuZ3RoO2MrKylzPWlbYVtjXSsiUmVxdWVzdCIrb10sbD1pW2FbY10rIkNhbmNlbCIrb118fGlbYVtjXSsiQ2FuY2VsUmVxdWVzdCIrb107aWYoIXN8fCFsKXt2YXIgdT0wLGY9MCxoPVtdO3M9ZnVuY3Rpb24odCl7aWYoMD09PWgubGVuZ3RoKXt2YXIgZT1uKCkscj1NYXRoLm1heCgwLDFlMy82MC0oZS11KSk7dT1yK2Usc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PWguc2xpY2UoMCk7aC5sZW5ndGg9MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZighdFtlXS5jYW5jZWxsZWQpdHJ5e3RbZV0uY2FsbGJhY2sodSl9Y2F0Y2godCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHR9LDApfX0sTWF0aC5yb3VuZChyKSl9cmV0dXJuIGgucHVzaCh7aGFuZGxlOisrZixjYWxsYmFjazp0LGNhbmNlbGxlZDohMX0pLGZ9LGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxoLmxlbmd0aDtlKyspaFtlXS5oYW5kbGU9PT10JiYoaFtlXS5jYW5jZWxsZWQ9ITApfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FsbChpLHQpfSxlLmV4cG9ydHMuY2FuY2VsPWZ1bmN0aW9uKCl7bC5hcHBseShpLGFyZ3VtZW50cyl9LGUuZXhwb3J0cy5wb2x5ZmlsbD1mdW5jdGlvbih0KXt0fHwodD1pKSx0LnJlcXVlc3RBbmltYXRpb25GcmFtZT1zLHQuY2FuY2VsQW5pbWF0aW9uRnJhbWU9bH19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsicGVyZm9ybWFuY2Utbm93Ijo0NTR9XSw0Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmlnLXJhdC9hZGQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1uKHRbYV0sZVthXSk7cmV0dXJuIGl9fSx7ImJpZy1yYXQvYWRkIjo2NX1dLDQ3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKWVbcl09bih0W3JdKTtyZXR1cm4gZX07dmFyIG49dCgiYmlnLXJhdCIpfSx7ImJpZy1yYXQiOjY4fV0sNDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpZy1yYXQiKSxpPXQoImJpZy1yYXQvbXVsIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4oZSksYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPTA7czxhOysrcylvW3NdPWkodFtzXSxyKTtyZXR1cm4gb319LHsiYmlnLXJhdCI6NjgsImJpZy1yYXQvbXVsIjo3N31dLDQ4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaWctcmF0L3N1YiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHsiYmlnLXJhdC9zdWIiOjc5fV0sNDgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbXBhcmUtY2VsbCIpLGk9dCgiY29tcGFyZS1vcmllbnRlZC1jZWxsIiksYT10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3Quc29ydChpKTtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG89MDtvPGU7KytvKXt2YXIgcz10W29dLGw9YShzKTtpZigwIT09bCl7aWYocj4wKXt2YXIgYz10W3ItMV07aWYoMD09PW4ocyxjKSYmYShjKSE9PWwpe3ItPTE7Y29udGludWV9fXRbcisrXT1zfX1yZXR1cm4gdC5sZW5ndGg9cix0fX0seyJjZWxsLW9yaWVudGF0aW9uIjoxMDIsImNvbXBhcmUtY2VsbCI6MTE4LCJjb21wYXJlLW9yaWVudGVkLWNlbGwiOjExOX1dLDQ4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJhcnJheS1ib3VuZHMiKSxpPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGE9dCgidXBkYXRlLWRpZmYiKSxvPXQoInBpY2stYnktYWxpYXMiKSxzPXQoIm9iamVjdC1hc3NpZ24iKSxsPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxjPXQoInRvLWZsb2F0MzIiKSx1PWMuZmxvYXQzMixmPWMuZnJhY3QzMjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQ7ZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTtpZighKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSl0aHJvdyBFcnJvcigicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkIik7dmFyIHIsYyxwLGQsZyx2LG09dC5fZ2wseT17Y29sb3I6ImJsYWNrIixjYXBTaXplOjUsbGluZVdpZHRoOjEsb3BhY2l0eToxLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxvZmZzZXQ6MCxjb3VudDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxlcnJvcnM6W119LHg9W107cmV0dXJuIGQ9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGM9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHA9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGc9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHY9dC5idWZmZXIoe3VzYWdlOiJzdGF0aWMiLHR5cGU6ImZsb2F0IixkYXRhOmh9KSxrKGUpLHI9dCh7dmVydDoiXG5cdFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5cdFx0YXR0cmlidXRlIHZlYzIgcG9zaXRpb24sIHBvc2l0aW9uRnJhY3Q7XG5cdFx0YXR0cmlidXRlIHZlYzQgZXJyb3I7XG5cdFx0YXR0cmlidXRlIHZlYzQgY29sb3I7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMiBkaXJlY3Rpb24sIGxpbmVPZmZzZXQsIGNhcE9mZnNldDtcblxuXHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHR1bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCwgY2FwU2l6ZTtcblx0XHR1bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG5cblx0XHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5cdFx0dm9pZCBtYWluKCkge1xuXHRcdFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xuXG5cdFx0XHR2ZWMyIHBpeGVsT2Zmc2V0ID0gbGluZVdpZHRoICogbGluZU9mZnNldCArIChjYXBTaXplICsgbGluZVdpZHRoKSAqIGNhcE9mZnNldDtcblxuXHRcdFx0dmVjMiBkeHkgPSAtc3RlcCguNSwgZGlyZWN0aW9uLnh5KSAqIGVycm9yLnh6ICsgc3RlcChkaXJlY3Rpb24ueHksIHZlYzIoLS41KSkgKiBlcnJvci55dztcblxuXHRcdFx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICsgZHh5O1xuXG5cdFx0XHR2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuXHRcdFx0XHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcblx0XHRcdFx0KyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuXHRcdFx0XHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuXHRcdFx0cG9zICs9IHBpeGVsT2Zmc2V0IC8gdmlld3BvcnQuenc7XG5cblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLCAxKTtcblx0XHR9XG5cdFx0IixmcmFnOiJcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxuXHRcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblx0XHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cdFx0XHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdFx0XHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xuXHRcdH1cblx0XHQiLHVuaWZvcm1zOntyYW5nZTp0LnByb3AoInJhbmdlIiksbGluZVdpZHRoOnQucHJvcCgibGluZVdpZHRoIiksY2FwU2l6ZTp0LnByb3AoImNhcFNpemUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHNjYWxlOnQucHJvcCgic2NhbGUiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX19LGF0dHJpYnV0ZXM6e2NvbG9yOntidWZmZXI6ZCxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gNCplLm9mZnNldH0sZGl2aXNvcjoxfSxwb3NpdGlvbjp7YnVmZmVyOmMsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnAsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZXJyb3I6e2J1ZmZlcjpnLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiAxNiplLm9mZnNldH0sZGl2aXNvcjoxfSxkaXJlY3Rpb246e2J1ZmZlcjp2LHN0cmlkZToyNCxvZmZzZXQ6MH0sbGluZU9mZnNldDp7YnVmZmVyOnYsc3RyaWRlOjI0LG9mZnNldDo4fSxjYXBPZmZzZXQ6e2J1ZmZlcjp2LHN0cmlkZToyNCxvZmZzZXQ6MTZ9fSxwcmltaXRpdmU6InRyaWFuZ2xlcyIsYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKSxzdGVuY2lsOiExLGluc3RhbmNlczp0LnByb3AoImNvdW50IiksY291bnQ6aC5sZW5ndGh9KSxzKGIse3VwZGF0ZTprLGRyYXc6XyxkZXN0cm95OlQscmVnbDp0LGdsOm0sY2FudmFzOm0uY2FudmFzLGdyb3Vwczp4fSksYjtmdW5jdGlvbiBiKHQpe3Q/ayh0KTpudWxsPT09dCYmVCgpLF8oKX1mdW5jdGlvbiBfKGUpe2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gdyhlKTtlJiYhQXJyYXkuaXNBcnJheShlKSYmKGU9W2VdKSx0Ll9yZWZyZXNoKCkseC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dCYmKGUmJihlW3JdP3QuZHJhdz0hMDp0LmRyYXc9ITEpLHQuZHJhdz93KHIpOnQuZHJhdz0hMCl9KX1mdW5jdGlvbiB3KHQpeyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9eFt0XSksbnVsbCE9dCYmdCYmdC5jb3VudCYmdC5jb2xvciYmdC5vcGFjaXR5JiZ0LnBvc2l0aW9ucyYmdC5wb3NpdGlvbnMubGVuZ3RoPjEmJih0LnNjYWxlUmF0aW89W3Quc2NhbGVbMF0qdC52aWV3cG9ydC53aWR0aCx0LnNjYWxlWzFdKnQudmlld3BvcnQuaGVpZ2h0XSxyKHQpLHQuYWZ0ZXImJnQuYWZ0ZXIodCkpfWZ1bmN0aW9uIGsodCl7aWYodCl7bnVsbCE9dC5sZW5ndGg/Im51bWJlciI9PXR5cGVvZiB0WzBdJiYodD1be3Bvc2l0aW9uczp0fV0pOkFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIGU9MCxyPTA7aWYoYi5ncm91cHM9eD10Lm1hcChmdW5jdGlvbih0LGMpe3ZhciB1PXhbY107cmV0dXJuIHQ/KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q9e2FmdGVyOnR9OiJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1vKHQse2NvbG9yOiJjb2xvciBjb2xvcnMgZmlsbCIsY2FwU2l6ZToiY2FwU2l6ZSBjYXAgY2Fwc2l6ZSBjYXAtc2l6ZSIsbGluZVdpZHRoOiJsaW5lV2lkdGggbGluZS13aWR0aCB3aWR0aCBsaW5lIHRoaWNrbmVzcyIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3Qm94IixlcnJvcnM6ImVycm9ycyBlcnJvciIscG9zaXRpb25zOiJwb3NpdGlvbnMgcG9zaXRpb24gZGF0YSBwb2ludHMifSksdXx8KHhbY109dT17aWQ6YyxzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGRyYXc6ITB9LHQ9cyh7fSx5LHQpKSxhKHUsdCxbe2xpbmVXaWR0aDpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sY2FwU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sb3BhY2l0eTpwYXJzZUZsb2F0LGVycm9yczpmdW5jdGlvbih0KXtyZXR1cm4gdD1sKHQpLHIrPXQubGVuZ3RoLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LHIpe3JldHVybiB0PWwodCwiZmxvYXQ2NCIpLHIuY291bnQ9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKSxyLmJvdW5kcz1uKHQsMiksci5vZmZzZXQ9ZSxlKz1yLmNvdW50LHR9fSx7Y29sb3I6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNvdW50O2lmKHR8fCh0PSJ0cmFuc3BhcmVudCIpLCFBcnJheS5pc0FycmF5KHQpfHwibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBuPXQ7dD1BcnJheShyKTtmb3IodmFyIGE9MDthPHI7YSsrKXRbYV09bn1pZih0Lmxlbmd0aDxyKXRocm93IEVycm9yKCJOb3QgZW5vdWdoIGNvbG9ycyIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheSg0KnIpLHM9MDtzPHI7cysrKXt2YXIgbD1pKHRbc10sInVpbnQ4Iik7by5zZXQobCw0KnMpfXJldHVybiBvfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7cmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9ZihlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWYoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U9e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19OnQ/KGU9e3g6dC54fHx0LmxlZnR8fDAseTp0Lnl8fHQudG9wfHwwfSx0LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD10Lnd8fHQud2lkdGh8fDAsdC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PXQuaHx8dC5oZWlnaHR8fDApOmU9e3g6MCx5OjAsd2lkdGg6bS5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0Om0uZHJhd2luZ0J1ZmZlckhlaWdodH0sZX19XSksdSk6dX0pLGV8fHIpe3ZhciBoPXgucmVkdWNlKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCsoZT9lLmNvdW50OjApfSwwKSx2PW5ldyBGbG9hdDY0QXJyYXkoMipoKSxfPW5ldyBVaW50OEFycmF5KDQqaCksdz1uZXcgRmxvYXQzMkFycmF5KDQqaCk7eC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7aWYodCl7dmFyIHI9dC5wb3NpdGlvbnMsbj10LmNvdW50LGk9dC5vZmZzZXQsYT10LmNvbG9yLG89dC5lcnJvcnM7biYmKF8uc2V0KGEsNCppKSx3LnNldChvLDQqaSksdi5zZXQociwyKmkpKX19KSxjKHUodikpLHAoZih2KSksZChfKSxnKHcpfX19ZnVuY3Rpb24gVCgpe2MuZGVzdHJveSgpLHAuZGVzdHJveSgpLGQuZGVzdHJveSgpLGcuZGVzdHJveSgpLHYuZGVzdHJveSgpfX07dmFyIGg9W1sxLDAsMCwxLDAsMF0sWzEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLDEsMCwwXSxbMSwwLDAsMSwwLDBdLFsxLDAsLTEsMCwwLDFdLFsxLDAsLTEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLDFdLFsxLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFswLDEsMSwwLDAsMF0sWzAsMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwxLDEsMCwwLDBdLFswLC0xLDEsMCwwLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwtMSwtMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwxLDAsMSwxLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwxLC0xLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLC0xLC0xLDBdLFswLC0xLDAsMSwtMSwwXSxbMCwtMSwwLDEsMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwxLC0xLDBdXX0seyJhcnJheS1ib3VuZHMiOjU1LCJjb2xvci1ub3JtYWxpemUiOjExMCwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjIzLCJvYmplY3QtYXNzaWduIjo0NDYsInBpY2stYnktYWxpYXMiOjQ1NywidG8tZmxvYXQzMiI6NTIyLCJ1cGRhdGUtZGlmZiI6NTMzfV0sNDgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGk9dCgiYXJyYXktYm91bmRzIiksYT10KCJvYmplY3QtYXNzaWduIiksbz10KCJnbHNsaWZ5Iikscz10KCJwaWNrLWJ5LWFsaWFzIiksbD10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksYz10KCJlYXJjdXQiKSx1PXQoImFycmF5LW5vcm1hbGl6ZSIpLGY9dCgidG8tZmxvYXQzMiIpLGg9Zi5mbG9hdDMyLHA9Zi5mcmFjdDMyLGQ9dCgiZXM2LXdlYWstbWFwIiksZz10KCJwYXJzZS1yZWN0Iik7ZnVuY3Rpb24gdih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHYpKXJldHVybiBuZXcgdih0LGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOmU9dCxlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpLCEodD1lLnJlZ2wpLmhhc0V4dGVuc2lvbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXRocm93IEVycm9yKCJyZWdsLWVycm9yMmQ6IGBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzYCBleHRlbnNpb24gc2hvdWxkIGJlIGVuYWJsZWQiKTt0aGlzLmdsPXQuX2dsLHRoaXMucmVnbD10LHRoaXMucGFzc2VzPVtdLHRoaXMuc2hhZGVycz12LnNoYWRlcnMuaGFzKHQpP3Yuc2hhZGVycy5nZXQodCk6di5zaGFkZXJzLnNldCh0LHYuY3JlYXRlU2hhZGVycyh0KSkuZ2V0KHQpLHRoaXMudXBkYXRlKGUpfWUuZXhwb3J0cz12LHYuZGFzaE11bHQ9Mix2Lm1heFBhdHRlcm5MZW5ndGg9MjU2LHYucHJlY2lzaW9uVGhyZXNob2xkPTNlNix2Lm1heFBvaW50cz0xZTQsdi5tYXhMaW5lcz0yMDQ4LHYuc2hhZGVycz1uZXcgZCx2LmNyZWF0ZVNoYWRlcnM9ZnVuY3Rpb24odCl7dmFyIGUscj10LmJ1ZmZlcih7dXNhZ2U6InN0YXRpYyIsdHlwZToiZmxvYXQiLGRhdGE6WzAsMSwwLDAsMSwxLDEsMF19KSxuPXtwcmltaXRpdmU6InRyaWFuZ2xlIHN0cmlwIixpbnN0YW5jZXM6dC5wcm9wKCJjb3VudCIpLGNvdW50OjQsb2Zmc2V0OjAsdW5pZm9ybXM6e21pdGVyTW9kZTpmdW5jdGlvbih0LGUpe3JldHVybiJyb3VuZCI9PT1lLmpvaW4/MjoxfSxtaXRlckxpbWl0OnQucHJvcCgibWl0ZXJMaW1pdCIpLHNjYWxlOnQucHJvcCgic2NhbGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSx0aGlja25lc3M6dC5wcm9wKCJ0aGlja25lc3MiKSxkYXNoUGF0dGVybjp0LnByb3AoImRhc2hUZXh0dXJlIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSxwaXhlbFJhdGlvOnQuY29udGV4dCgicGl4ZWxSYXRpbyIpLGlkOnQucHJvcCgiaWQiKSxkYXNoU2l6ZTp0LnByb3AoImRhc2hMZW5ndGgiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX0sZGVwdGg6dC5wcm9wKCJkZXB0aCIpfSxibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwwXSxlcXVhdGlvbjp7cmdiOiJhZGQiLGFscGhhOiJhZGQifSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToib25lIG1pbnVzIGRzdCBhbHBoYSIsZHN0QWxwaGE6Im9uZSJ9fSxkZXB0aDp7ZW5hYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIWUub3ZlcmxheX19LHN0ZW5jaWw6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKX0saT10KGEoe3ZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGFDb29yZCwgYkNvb3JkLCBhQ29vcmRGcmFjdCwgYkNvb3JkRnJhY3Q7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRW5kLCBsaW5lVG9wO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzcywgcGl4ZWxSYXRpbywgaWQsIGRlcHRoO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG5cbnZlYzIgcHJvamVjdCh2ZWMyIHBvc2l0aW9uLCB2ZWMyIHBvc2l0aW9uRnJhY3QsIHZlYzIgc2NhbGUsIHZlYzIgc2NhbGVGcmFjdCwgdmVjMiB0cmFuc2xhdGUsIHZlYzIgdHJhbnNsYXRlRnJhY3QpIHtcblx0Ly8gdGhlIG9yZGVyIGlzIGltcG9ydGFudFxuXHRyZXR1cm4gcG9zaXRpb24gKiBzY2FsZSArIHRyYW5zbGF0ZVxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlICsgdHJhbnNsYXRlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uICogc2NhbGVGcmFjdFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlRnJhY3Q7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgbGluZVN0YXJ0ID0gMS4gLSBsaW5lRW5kO1xuXHRmbG9hdCBsaW5lT2Zmc2V0ID0gbGluZVRvcCAqIDIuIC0gMS47XG5cblx0dmVjMiBkaWZmID0gKGJDb29yZCArIGJDb29yZEZyYWN0IC0gYUNvb3JkIC0gYUNvb3JkRnJhY3QpO1xuXHR0YW5nZW50ID0gbm9ybWFsaXplKGRpZmYgKiBzY2FsZSAqIHZpZXdwb3J0Lnp3KTtcblx0dmVjMiBub3JtYWwgPSB2ZWMyKC10YW5nZW50LnksIHRhbmdlbnQueCk7XG5cblx0dmVjMiBwb3NpdGlvbiA9IHByb2plY3QoYUNvb3JkLCBhQ29vcmRGcmFjdCwgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QpICogbGluZVN0YXJ0XG5cdFx0KyBwcm9qZWN0KGJDb29yZCwgYkNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVFbmRcblxuXHRcdCsgdGhpY2tuZXNzICogbm9ybWFsICogLjUgKiBsaW5lT2Zmc2V0IC8gdmlld3BvcnQuenc7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XG5cblx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xufVxuIl0pLGZyYWc6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hQYXR0ZXJuO1xuXG51bmlmb3JtIGZsb2F0IGRhc2hTaXplLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgYWxwaGEgPSAxLjtcblxuXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoU2l6ZSkgKiAuNSArIC4yNTtcblx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoUGF0dGVybiwgdmVjMih0LCAuNSkpLnI7XG5cblx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHkgKiBkYXNoO1xufVxuIl0pLGF0dHJpYnV0ZXM6e2xpbmVFbmQ6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6MH0sbGluZVRvcDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDo0fSxhQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sYUNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZEZyYWN0OntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkZyYWN0QnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sY29sb3I6e2J1ZmZlcjp0LnByb3AoImNvbG9yQnVmZmVyIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfX19LG4pKTt0cnl7ZT10KGEoe2N1bGw6e2VuYWJsZTohMCxmYWNlOiJiYWNrIn0sdmVydDpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIG5leHRDb29yZCwgcHJldkNvb3JkO1xuYXR0cmlidXRlIHZlYzQgYUNvbG9yLCBiQ29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCB0cmFuc2xhdGU7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzcywgcGl4ZWxSYXRpbywgaWQsIGRlcHRoO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBtaXRlckxpbWl0LCBtaXRlck1vZGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzQgc3RhcnRDdXRvZmYsIGVuZEN1dG9mZjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcblxuY29uc3QgZmxvYXQgUkVWRVJTRV9USFJFU0hPTEQgPSAtLjg3NTtcbmNvbnN0IGZsb2F0IE1JTl9ESUZGID0gMWUtNjtcblxuLy8gVE9ETzogcG9zc2libGUgb3B0aW1pemF0aW9uczogYXZvaWQgb3ZlcmNhbGN1bGF0aW5nIGFsbCBmb3IgdmVydGljZXMgYW5kIGNhbGMganVzdCBvbmUgaW5zdGVhZFxuLy8gVE9ETzogcHJlY2FsY3VsYXRlIGRvdCBwcm9kdWN0cywgbm9ybWFsaXplIHRoaW5ncyBiZWZvcmVoZWFkIGV0Yy5cbi8vIFRPRE86IHJlZmFjdG9yIHRvIHJlY3Rhbmd1bGFyIGFsZ29yaXRobVxuXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcblx0dmVjMiBkaWZmID0gYiAtIGE7XG5cdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xuXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcbn1cblxuYm9vbCBpc05hTiggZmxvYXQgdmFsICl7XG4gIHJldHVybiAoIHZhbCA8IDAuMCB8fCAwLjAgPCB2YWwgfHwgdmFsID09IDAuMCApID8gZmFsc2UgOiB0cnVlO1xufVxuXG52b2lkIG1haW4oKSB7XG5cdHZlYzIgYUNvb3JkID0gYUNvb3JkLCBiQ29vcmQgPSBiQ29vcmQsIHByZXZDb29yZCA9IHByZXZDb29yZCwgbmV4dENvb3JkID0gbmV4dENvb3JkO1xuXG4gIHZlYzIgYWRqdXN0ZWRTY2FsZTtcbiAgYWRqdXN0ZWRTY2FsZS54ID0gKGFicyhzY2FsZS54KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueDtcbiAgYWRqdXN0ZWRTY2FsZS55ID0gKGFicyhzY2FsZS55KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueTtcblxuICB2ZWMyIHNjYWxlUmF0aW8gPSBhZGp1c3RlZFNjYWxlICogdmlld3BvcnQuenc7XG5cdHZlYzIgbm9ybWFsV2lkdGggPSB0aGlja25lc3MgLyBzY2FsZVJhdGlvO1xuXG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZUJvdCA9IDEuIC0gbGluZVRvcDtcblxuXHRmcmFnQ29sb3IgPSAobGluZVN0YXJ0ICogYUNvbG9yICsgbGluZUVuZCAqIGJDb2xvcikgLyAyNTUuO1xuXG5cdGlmIChpc05hTihhQ29vcmQueCkgfHwgaXNOYU4oYUNvb3JkLnkpIHx8IGlzTmFOKGJDb29yZC54KSB8fCBpc05hTihiQ29vcmQueSkpIHJldHVybjtcblxuXHRpZiAoYUNvb3JkID09IHByZXZDb29yZCkgcHJldkNvb3JkID0gYUNvb3JkICsgbm9ybWFsaXplKGJDb29yZCAtIGFDb29yZCk7XG5cdGlmIChiQ29vcmQgPT0gbmV4dENvb3JkKSBuZXh0Q29vcmQgPSBiQ29vcmQgLSBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcblxuXHR2ZWMyIHByZXZEaWZmID0gYUNvb3JkIC0gcHJldkNvb3JkO1xuXHR2ZWMyIGN1cnJEaWZmID0gYkNvb3JkIC0gYUNvb3JkO1xuXHR2ZWMyIG5leHREaWZmID0gbmV4dENvb3JkIC0gYkNvb3JkO1xuXG5cdHZlYzIgcHJldlRhbmdlbnQgPSBub3JtYWxpemUocHJldkRpZmYgKiBzY2FsZVJhdGlvKTtcblx0dmVjMiBjdXJyVGFuZ2VudCA9IG5vcm1hbGl6ZShjdXJyRGlmZiAqIHNjYWxlUmF0aW8pO1xuXHR2ZWMyIG5leHRUYW5nZW50ID0gbm9ybWFsaXplKG5leHREaWZmICogc2NhbGVSYXRpbyk7XG5cblx0dmVjMiBwcmV2Tm9ybWFsID0gdmVjMigtcHJldlRhbmdlbnQueSwgcHJldlRhbmdlbnQueCk7XG5cdHZlYzIgY3Vyck5vcm1hbCA9IHZlYzIoLWN1cnJUYW5nZW50LnksIGN1cnJUYW5nZW50LngpO1xuXHR2ZWMyIG5leHROb3JtYWwgPSB2ZWMyKC1uZXh0VGFuZ2VudC55LCBuZXh0VGFuZ2VudC54KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IG5vcm1hbGl6ZShwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0dmVjMiBlbmRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKGN1cnJUYW5nZW50IC0gbmV4dFRhbmdlbnQpO1xuXG5cdC8vIGNvbGxhcHNlZC91bmlkaXJlY3Rpb25hbCBzZWdtZW50IGNhc2VzXG5cdC8vIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgbW9yZSBlbGVnYW50IHNvbHV0aW9uXG5cdHZlYzIgcHJldlRhbkRpZmYgPSBhYnMocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdHZlYzIgbmV4dFRhbkRpZmYgPSBhYnMobmV4dFRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdGlmIChtYXgocHJldlRhbkRpZmYueCwgcHJldlRhbkRpZmYueSkgPCBNSU5fRElGRikge1xuXHRcdHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKG1heChuZXh0VGFuRGlmZi54LCBuZXh0VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XG5cdFx0ZW5kSm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKGFDb29yZCA9PSBiQ29vcmQpIHtcblx0XHRlbmRKb2luRGlyZWN0aW9uID0gc3RhcnRKb2luRGlyZWN0aW9uO1xuXHRcdGN1cnJOb3JtYWwgPSBwcmV2Tm9ybWFsO1xuXHRcdGN1cnJUYW5nZW50ID0gcHJldlRhbmdlbnQ7XG5cdH1cblxuXHR0YW5nZW50ID0gY3VyclRhbmdlbnQ7XG5cblx0Ly9jYWxjdWxhdGUgam9pbiBzaGlmdHMgcmVsYXRpdmUgdG8gbm9ybWFsc1xuXHRmbG9hdCBzdGFydEpvaW5TaGlmdCA9IGRvdChjdXJyTm9ybWFsLCBzdGFydEpvaW5EaXJlY3Rpb24pO1xuXHRmbG9hdCBlbmRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgZW5kSm9pbkRpcmVjdGlvbik7XG5cblx0ZmxvYXQgc3RhcnRNaXRlclJhdGlvID0gYWJzKDEuIC8gc3RhcnRKb2luU2hpZnQpO1xuXHRmbG9hdCBlbmRNaXRlclJhdGlvID0gYWJzKDEuIC8gZW5kSm9pblNoaWZ0KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIHN0YXJ0TWl0ZXJSYXRpbztcblx0dmVjMiBlbmRKb2luID0gZW5kSm9pbkRpcmVjdGlvbiAqIGVuZE1pdGVyUmF0aW87XG5cblx0dmVjMiBzdGFydFRvcEpvaW4sIHN0YXJ0Qm90Sm9pbiwgZW5kVG9wSm9pbiwgZW5kQm90Sm9pbjtcblx0c3RhcnRUb3BKb2luID0gc2lnbihzdGFydEpvaW5TaGlmdCkgKiBzdGFydEpvaW4gKiAuNTtcblx0c3RhcnRCb3RKb2luID0gLXN0YXJ0VG9wSm9pbjtcblxuXHRlbmRUb3BKb2luID0gc2lnbihlbmRKb2luU2hpZnQpICogZW5kSm9pbiAqIC41O1xuXHRlbmRCb3RKb2luID0gLWVuZFRvcEpvaW47XG5cblx0dmVjMiBhVG9wQ29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0VG9wSm9pbjtcblx0dmVjMiBiVG9wQ29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XG5cdHZlYzIgYUJvdENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XG5cdHZlYzIgYkJvdENvb3JkID0gYkNvb3JkICsgbm9ybWFsV2lkdGggKiBlbmRCb3RKb2luO1xuXG5cdC8vbWl0ZXIgYW50aS1jbGlwcGluZ1xuXHRmbG9hdCBiYUNsaXBwaW5nID0gZGlzdFRvTGluZShiQ29vcmQsIGFDb29yZCwgYUJvdENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSwgbm9ybWFsaXplKG5vcm1hbFdpZHRoLnl4ICogdmVjMigtc3RhcnRCb3RKb2luLnksIHN0YXJ0Qm90Sm9pbi54KSkpO1xuXHRmbG9hdCBhYkNsaXBwaW5nID0gZGlzdFRvTGluZShhQ29vcmQsIGJDb29yZCwgYlRvcENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1lbmRCb3RKb2luLnksIGVuZEJvdEpvaW4ueCkpKTtcblxuXHQvL3ByZXZlbnQgY2xvc2UgdG8gcmV2ZXJzZSBkaXJlY3Rpb24gc3dpdGNoXG5cdGJvb2wgcHJldlJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIHByZXZUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBwcmV2Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKHByZXZEaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cdGJvb2wgbmV4dFJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBuZXh0Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKG5leHREaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cblx0aWYgKHByZXZSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gc3RhcnRNaXRlclJhdGlvLCAxLik7XG5cdFx0YUJvdENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHRcdGFUb3BDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0fVxuXHRlbHNlIGlmICghbmV4dFJldmVyc2UgJiYgYmFDbGlwcGluZyA+IDAuICYmIGJhQ2xpcHBpbmcgPCBsZW5ndGgobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSkge1xuXHRcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXG5cdFx0YlRvcENvb3JkIC09IG5vcm1hbFdpZHRoICogZW5kVG9wSm9pbjtcblx0XHRiVG9wQ29vcmQgKz0gbm9ybWFsaXplKGVuZFRvcEpvaW4gKiBub3JtYWxXaWR0aCkgKiBiYUNsaXBwaW5nO1xuXHR9XG5cblx0aWYgKG5leHRSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIGVuZEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIGVuZE1pdGVyUmF0aW8sIDEuKTtcblx0XHRiQm90Q29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdFx0YlRvcENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHR9XG5cdGVsc2UgaWYgKCFwcmV2UmV2ZXJzZSAmJiBhYkNsaXBwaW5nID4gMC4gJiYgYWJDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbikpIHtcblx0XHQvL2hhbmRsZSBtaXRlciBjbGlwcGluZ1xuXHRcdGFCb3RDb29yZCAtPSBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcblx0XHRhQm90Q29vcmQgKz0gbm9ybWFsaXplKHN0YXJ0Qm90Sm9pbiAqIG5vcm1hbFdpZHRoKSAqIGFiQ2xpcHBpbmc7XG5cdH1cblxuXHR2ZWMyIGFUb3BQb3NpdGlvbiA9IChhVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblx0dmVjMiBhQm90UG9zaXRpb24gPSAoYUJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cblx0dmVjMiBiVG9wUG9zaXRpb24gPSAoYlRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cdHZlYzIgYkJvdFBvc2l0aW9uID0gKGJCb3RDb29yZCkgKiBhZGp1c3RlZFNjYWxlICsgdHJhbnNsYXRlO1xuXG5cdC8vcG9zaXRpb24gaXMgbm9ybWFsaXplZCAwLi4xIGNvb3JkIG9uIHRoZSBzY3JlZW5cblx0dmVjMiBwb3NpdGlvbiA9IChhVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYUJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lU3RhcnQgKyAoYlRvcFBvc2l0aW9uICogbGluZVRvcCArIGJCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZUVuZDtcblxuXHRzdGFydENvb3JkID0gYUNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cdGVuZENvb3JkID0gYkNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGVuYWJsZVN0YXJ0TWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpLCAuNSk7XG5cdGVuYWJsZUVuZE1pdGVyID0gc3RlcChkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSwgLjUpO1xuXG5cdC8vYmV2ZWwgbWl0ZXIgY3V0b2Zmc1xuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0XHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcblx0XHRcdGVuZEN1dG9mZi56dyArPSB2ZWMyKC1lbmRKb2luRGlyZWN0aW9uLnksIGVuZEpvaW5EaXJlY3Rpb24ueCkgIC8gc2NhbGVSYXRpbztcblx0XHRcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IGVuZE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cdH1cblxuXHQvL3JvdW5kIG1pdGVyIGN1dG9mZnNcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChzdGFydEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBhYnMoZG90KGVuZEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XG5cdFx0XHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XG5cdFx0XHRlbmRDdXRvZmYgPSBlbmRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XG5cdFx0XHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XG5cdFx0fVxuXHR9XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFBhdHRlcm47XG51bmlmb3JtIGZsb2F0IGRhc2hTaXplLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkLCBtaXRlck1vZGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcbnZhcnlpbmcgdmVjNCBzdGFydEN1dG9mZiwgZW5kQ3V0b2ZmO1xudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcblxuZmxvYXQgZGlzdFRvTGluZSh2ZWMyIHAsIHZlYzIgYSwgdmVjMiBiKSB7XG5cdHZlYzIgZGlmZiA9IGIgLSBhO1xuXHR2ZWMyIHBlcnAgPSBub3JtYWxpemUodmVjMigtZGlmZi55LCBkaWZmLngpKTtcblx0cmV0dXJuIGRvdChwIC0gYSwgcGVycCk7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgYWxwaGEgPSAxLiwgZGlzdFRvU3RhcnQsIGRpc3RUb0VuZDtcblx0ZmxvYXQgY3V0b2ZmID0gdGhpY2tuZXNzICogLjU7XG5cblx0Ly9iZXZlbCBtaXRlclxuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb1N0YXJ0ID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIHN0YXJ0Q3V0b2ZmLnh5LCBzdGFydEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvU3RhcnQgPCAtMS4pIHtcblx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9TdGFydCArIDEuLCAwLiksIDEuKTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb0VuZCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBlbmRDdXRvZmYueHksIGVuZEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvRW5kIDwgLTEuKSB7XG5cdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGFscGhhICo9IG1pbihtYXgoZGlzdFRvRW5kICsgMS4sIDAuKSwgMS4pO1xuXHRcdH1cblx0fVxuXG5cdC8vIHJvdW5kIG1pdGVyXG5cdGVsc2UgaWYgKG1pdGVyTW9kZSA9PSAyLikge1xuXHRcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XG5cdFx0XHRkaXN0VG9TdGFydCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBzdGFydEN1dG9mZi54eSwgc3RhcnRDdXRvZmYuencpO1xuXHRcdFx0aWYgKGRpc3RUb1N0YXJ0IDwgMC4pIHtcblx0XHRcdFx0ZmxvYXQgcmFkaXVzID0gbGVuZ3RoKGdsX0ZyYWdDb29yZC54eSAtIHN0YXJ0Q29vcmQpO1xuXG5cdFx0XHRcdGlmKHJhZGl1cyA+IGN1dG9mZiArIC41KSB7XG5cdFx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb0VuZCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBlbmRDdXRvZmYueHksIGVuZEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvRW5kIDwgMC4pIHtcblx0XHRcdFx0ZmxvYXQgcmFkaXVzID0gbGVuZ3RoKGdsX0ZyYWdDb29yZC54eSAtIGVuZENvb3JkKTtcblxuXHRcdFx0XHRpZihyYWRpdXMgPiBjdXRvZmYgKyAuNSkge1xuXHRcdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWxwaGEgLT0gc21vb3Roc3RlcChjdXRvZmYgLSAuNSwgY3V0b2ZmICsgLjUsIHJhZGl1cyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaFNpemUpICogLjUgKyAuMjU7XG5cdGZsb2F0IGRhc2ggPSB0ZXh0dXJlMkQoZGFzaFBhdHRlcm4sIHZlYzIodCwgLjUpKS5yO1xuXG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcbn1cbiJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDowLGRpdmlzb3I6MX0sYkNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDo0LGRpdmlzb3I6MX0scHJldkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDowLGRpdmlzb3I6MX0sYUNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LG5leHRDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MjQsZGl2aXNvcjoxfX19LG4pKX1jYXRjaCh0KXtlPWl9cmV0dXJue2ZpbGw6dCh7cHJpbWl0aXZlOiJ0cmlhbmdsZSIsZWxlbWVudHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50cmlhbmdsZXN9LG9mZnNldDowLHZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uLCBwb3NpdGlvbkZyYWN0O1xuXG51bmlmb3JtIHZlYzQgY29sb3I7XG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW8sIGlkO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5jb25zdCBmbG9hdCBNQVhfTElORVMgPSAyNTYuO1xuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGRlcHRoID0gKE1BWF9MSU5FUyAtIDQuIC0gaWQpIC8gKE1BWF9MSU5FUyk7XG5cblx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1Ljtcblx0ZnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJdKSx1bmlmb3Jtczp7c2NhbGU6dC5wcm9wKCJzY2FsZSIpLGNvbG9yOnQucHJvcCgiZmlsbCIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IikscGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxpZDp0LnByb3AoImlkIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntwb3NpdGlvbjp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OH0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25GcmFjdEJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4fX0sYmxlbmQ6bi5ibGVuZCxkZXB0aDp7ZW5hYmxlOiExfSxzY2lzc29yOm4uc2Npc3NvcixzdGVuY2lsOm4uc3RlbmNpbCx2aWV3cG9ydDpuLnZpZXdwb3J0fSkscmVjdDppLG1pdGVyOmV9fSx2LmRlZmF1bHRzPXtkYXNoZXM6bnVsbCxqb2luOiJtaXRlciIsbWl0ZXJMaW1pdDoxLHRoaWNrbmVzczoxMCxjYXA6InNxdWFyZSIsY29sb3I6ImJsYWNrIixvcGFjaXR5OjEsb3ZlcmxheTohMSx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwsY2xvc2U6ITEsZmlsbDpudWxsfSx2LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtlLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsZSksdGhpcy5kcmF3KCl9LHYucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybihlLmxlbmd0aD9lOnRoaXMucGFzc2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dmFyIG47aWYoZSYmQXJyYXkuaXNBcnJheShlKSlyZXR1cm4obj10KS5kcmF3LmFwcGx5KG4sZSk7Im51bWJlciI9PXR5cGVvZiBlJiYoZT10LnBhc3Nlc1tlXSksZSYmZS5jb3VudD4xJiZlLm9wYWNpdHkmJih0LnJlZ2wuX3JlZnJlc2goKSxlLmZpbGwmJmUudHJpYW5nbGVzJiZlLnRyaWFuZ2xlcy5sZW5ndGg+MiYmdC5zaGFkZXJzLmZpbGwoZSksZS50aGlja25lc3MmJihlLnNjYWxlWzBdKmUudmlld3BvcnQud2lkdGg+di5wcmVjaXNpb25UaHJlc2hvbGR8fGUuc2NhbGVbMV0qZS52aWV3cG9ydC5oZWlnaHQ+di5wcmVjaXNpb25UaHJlc2hvbGQ/dC5zaGFkZXJzLnJlY3QoZSk6InJlY3QiPT09ZS5qb2lufHwhZS5qb2luJiYoZS50aGlja25lc3M8PTJ8fGUuY291bnQ+PXYubWF4UG9pbnRzKT90LnNoYWRlcnMucmVjdChlKTp0LnNoYWRlcnMubWl0ZXIoZSkpKX0pLHRoaXN9LHYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQpe251bGwhPXQubGVuZ3RoPyJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9W3twb3NpdGlvbnM6dH1dKTpBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciByPXRoaXMucmVnbCxvPXRoaXMuZ2w7aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQsZil7dmFyIGQ9ZS5wYXNzZXNbZl07aWYodm9pZCAwIT09dClpZihudWxsIT09dCl7aWYoIm51bWJlciI9PXR5cGVvZiB0WzBdJiYodD17cG9zaXRpb25zOnR9KSx0PXModCx7cG9zaXRpb25zOiJwb3NpdGlvbnMgcG9pbnRzIGRhdGEgY29vcmRzIix0aGlja25lc3M6InRoaWNrbmVzcyBsaW5lV2lkdGggbGluZVdpZHRocyBsaW5lLXdpZHRoIGxpbmV3aWR0aCB3aWR0aCBzdHJva2Utd2lkdGggc3Ryb2tld2lkdGggc3Ryb2tlV2lkdGgiLGpvaW46ImxpbmVKb2luIGxpbmVqb2luIGpvaW4gdHlwZSBtb2RlIixtaXRlckxpbWl0OiJtaXRlcmxpbWl0IG1pdGVyTGltaXQiLGRhc2hlczoiZGFzaCBkYXNoZXMgZGFzaGFycmF5IGRhc2gtYXJyYXkgZGFzaEFycmF5Iixjb2xvcjoiY29sb3IgY29sb3VyIHN0cm9rZSBjb2xvcnMgY29sb3VycyBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLGZpbGw6ImZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IiLG9wYWNpdHk6ImFscGhhIG9wYWNpdHkiLG92ZXJsYXk6Im92ZXJsYXkgY3JlYXNlIG92ZXJsYXAgaW50ZXJzZWN0IixjbG9zZToiY2xvc2VkIGNsb3NlIGNsb3NlZC1wYXRoIGNsb3NlUGF0aCIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3Qm94Iixob2xlOiJob2xlcyBob2xlIGhvbGxvdyJ9KSxkfHwoZS5wYXNzZXNbZl09ZD17aWQ6ZixzY2FsZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGU6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGNvdW50OjAsaG9sZTpbXSxkZXB0aDowLGRhc2hMZW5ndGg6MSxkYXNoVGV4dHVyZTpyLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpuZXcgVWludDhBcnJheShbMjU1XSksd2lkdGg6MSxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSksY29sb3JCdWZmZXI6ci5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheX0pLHBvc2l0aW9uQnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KX0sdD1hKHt9LHYuZGVmYXVsdHMsdCkpLG51bGwhPXQudGhpY2tuZXNzJiYoZC50aGlja25lc3M9cGFyc2VGbG9hdCh0LnRoaWNrbmVzcykpLG51bGwhPXQub3BhY2l0eSYmKGQub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQubWl0ZXJMaW1pdCYmKGQubWl0ZXJMaW1pdD1wYXJzZUZsb2F0KHQubWl0ZXJMaW1pdCkpLG51bGwhPXQub3ZlcmxheSYmKGQub3ZlcmxheT0hIXQub3ZlcmxheSxmPHYubWF4TGluZXMmJihkLmRlcHRoPTIqKHYubWF4TGluZXMtMS1mJXYubWF4TGluZXMpL3YubWF4TGluZXMtMSkpLG51bGwhPXQuam9pbiYmKGQuam9pbj10LmpvaW4pLG51bGwhPXQuaG9sZSYmKGQuaG9sZT10LmhvbGUpLG51bGwhPXQuZmlsbCYmKGQuZmlsbD10LmZpbGw/bih0LmZpbGwsInVpbnQ4Iik6bnVsbCksbnVsbCE9dC52aWV3cG9ydCYmKGQudmlld3BvcnQ9Zyh0LnZpZXdwb3J0KSksZC52aWV3cG9ydHx8KGQudmlld3BvcnQ9Zyhbby5kcmF3aW5nQnVmZmVyV2lkdGgsby5kcmF3aW5nQnVmZmVySGVpZ2h0XSkpLG51bGwhPXQuY2xvc2UmJihkLmNsb3NlPXQuY2xvc2UpLG51bGw9PT10LnBvc2l0aW9ucyYmKHQucG9zaXRpb25zPVtdKSx0LnBvc2l0aW9ucyl7dmFyIG0seTtpZih0LnBvc2l0aW9ucy54JiZ0LnBvc2l0aW9ucy55KXt2YXIgeD10LnBvc2l0aW9ucy54LGI9dC5wb3NpdGlvbnMueTt5PWQuY291bnQ9TWF0aC5tYXgoeC5sZW5ndGgsYi5sZW5ndGgpLG09bmV3IEZsb2F0NjRBcnJheSgyKnkpO2Zvcih2YXIgXz0wO188eTtfKyspbVsyKl9dPXhbX10sbVsyKl8rMV09YltfXX1lbHNlIG09bCh0LnBvc2l0aW9ucywiZmxvYXQ2NCIpLHk9ZC5jb3VudD1NYXRoLmZsb29yKG0ubGVuZ3RoLzIpO3ZhciB3PWQuYm91bmRzPWkobSwyKTtpZihkLmZpbGwpe2Zvcih2YXIgaz1bXSxUPXt9LEE9MCxNPTAsUz0wLEU9ZC5jb3VudDtNPEU7TSsrKXt2YXIgQz1tWzIqTV0sTD1tWzIqTSsxXTtpc05hTihDKXx8aXNOYU4oTCl8fG51bGw9PUN8fG51bGw9PUw/KEM9bVsyKkFdLEw9bVsyKkErMV0sVFtNXT1BKTpBPU0sa1tTKytdPUMsa1tTKytdPUx9Zm9yKHZhciB6PWMoayxkLmhvbGV8fFtdKSxPPTAsST16Lmxlbmd0aDtPPEk7TysrKW51bGwhPVRbeltPXV0mJih6W09dPVRbeltPXV0pO2QudHJpYW5nbGVzPXp9dmFyIEQ9bmV3IEZsb2F0NjRBcnJheShtKTt1KEQsMix3KTt2YXIgUD1uZXcgRmxvYXQ2NEFycmF5KDIqeSs2KTtkLmNsb3NlP21bMF09PT1tWzIqeS0yXSYmbVsxXT09PW1bMip5LTFdPyhQWzBdPURbMip5LTRdLFBbMV09RFsyKnktM10pOihQWzBdPURbMip5LTJdLFBbMV09RFsyKnktMV0pOihQWzBdPURbMF0sUFsxXT1EWzFdKSxQLnNldChELDIpLGQuY2xvc2U/bVswXT09PW1bMip5LTJdJiZtWzFdPT09bVsyKnktMV0/KFBbMip5KzJdPURbMl0sUFsyKnkrM109RFszXSxkLmNvdW50LT0xKTooUFsyKnkrMl09RFswXSxQWzIqeSszXT1EWzFdLFBbMip5KzRdPURbMl0sUFsyKnkrNV09RFszXSk6KFBbMip5KzJdPURbMip5LTJdLFBbMip5KzNdPURbMip5LTFdLFBbMip5KzRdPURbMip5LTJdLFBbMip5KzVdPURbMip5LTFdKSxkLnBvc2l0aW9uQnVmZmVyKGgoUCkpLGQucG9zaXRpb25GcmFjdEJ1ZmZlcihwKFApKX1pZih0LnJhbmdlP2QucmFuZ2U9dC5yYW5nZTpkLnJhbmdlfHwoZC5yYW5nZT1kLmJvdW5kcyksKHQucmFuZ2V8fHQucG9zaXRpb25zKSYmZC5jb3VudCl7dmFyIFI9ZC5ib3VuZHMsRj1SWzJdLVJbMF0sQj1SWzNdLVJbMV0sTj1kLnJhbmdlWzJdLWQucmFuZ2VbMF0saj1kLnJhbmdlWzNdLWQucmFuZ2VbMV07ZC5zY2FsZT1bRi9OLEIval0sZC50cmFuc2xhdGU9Wy1kLnJhbmdlWzBdL04rUlswXS9OfHwwLC1kLnJhbmdlWzFdL2orUlsxXS9qfHwwXSxkLnNjYWxlRnJhY3Q9cChkLnNjYWxlKSxkLnRyYW5zbGF0ZUZyYWN0PXAoZC50cmFuc2xhdGUpfWlmKHQuZGFzaGVzKXt2YXIgVixVPTA7aWYoIXQuZGFzaGVzfHx0LmRhc2hlcy5sZW5ndGg8MilVPTEsVj1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0pO2Vsc2V7VT0wO2Zvcih2YXIgcT0wO3E8dC5kYXNoZXMubGVuZ3RoOysrcSlVKz10LmRhc2hlc1txXTtWPW5ldyBVaW50OEFycmF5KFUqdi5kYXNoTXVsdCk7Zm9yKHZhciBIPTAsRz0yNTUsWT0wO1k8MjtZKyspZm9yKHZhciBXPTA7Vzx0LmRhc2hlcy5sZW5ndGg7KytXKXtmb3IodmFyIFg9MCxaPXQuZGFzaGVzW1ddKnYuZGFzaE11bHQqLjU7WDxaOysrWClWW0grK109RztHXj0yNTV9fWQuZGFzaExlbmd0aD1VLGQuZGFzaFRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpWLHdpZHRoOlYubGVuZ3RoLGhlaWdodDoxLG1hZzoibGluZWFyIixtaW46ImxpbmVhciJ9LDAsMCl9aWYodC5jb2xvcil7dmFyICQ9ZC5jb3VudCxKPXQuY29sb3I7Snx8KEo9InRyYW5zcGFyZW50Iik7dmFyIEs9bmV3IFVpbnQ4QXJyYXkoNCokKzQpO2lmKEFycmF5LmlzQXJyYXkoSikmJiJudW1iZXIiIT10eXBlb2YgSlswXSl7Zm9yKHZhciBRPTA7UTwkO1ErKyl7dmFyIHR0PW4oSltRXSwidWludDgiKTtLLnNldCh0dCw0KlEpfUsuc2V0KG4oSlswXSwidWludDgiKSw0KiQpfWVsc2UgZm9yKHZhciBldD1uKEosInVpbnQ4IikscnQ9MDtydDwkKzE7cnQrKylLLnNldChldCw0KnJ0KTtkLmNvbG9yQnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgiLGRhdGE6S30pfX1lbHNlIGUucGFzc2VzW2ZdPW51bGx9KSx0Lmxlbmd0aDx0aGlzLnBhc3Nlcy5sZW5ndGgpe2Zvcih2YXIgZj10Lmxlbmd0aDtmPHRoaXMucGFzc2VzLmxlbmd0aDtmKyspe3ZhciBkPWUucGFzc2VzW2ZdO2QmJihkLmNvbG9yQnVmZmVyLmRlc3Ryb3koKSxkLnBvc2l0aW9uQnVmZmVyLmRlc3Ryb3koKSxkLmRhc2hUZXh0dXJlLmRlc3Ryb3koKSl9dGhpcy5wYXNzZXMubGVuZ3RoPXQubGVuZ3RofWZvcih2YXIgbT1bXSx5PTA7eTx0aGlzLnBhc3Nlcy5sZW5ndGg7eSsrKW51bGwhPT1lLnBhc3Nlc1t5XSYmbS5wdXNoKGUucGFzc2VzW3ldKTtyZXR1cm4gdGhpcy5wYXNzZXM9bSx0aGlzfX0sdi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY29sb3JCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQuZGFzaFRleHR1cmUuZGVzdHJveSgpfSksdGhpcy5wYXNzZXMubGVuZ3RoPTAsdGhpc319LHsiYXJyYXktYm91bmRzIjo1NSwiYXJyYXktbm9ybWFsaXplIjo1NiwiY29sb3Itbm9ybWFsaXplIjoxMTAsZWFyY3V0OjE2MiwiZXM2LXdlYWstbWFwIjoyMTYsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjIyMyxnbHNsaWZ5OjQwMSwib2JqZWN0LWFzc2lnbiI6NDQ2LCJwYXJzZS1yZWN0Ijo0NTEsInBpY2stYnktYWxpYXMiOjQ1NywidG8tZmxvYXQzMiI6NTIyfV0sNDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj0hMCxpPSExLGE9dm9pZCAwO3RyeXtmb3IodmFyIG8scz10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCFlfHxyLmxlbmd0aCE9PWUpO249ITApO31jYXRjaCh0KXtpPSEwLGE9dH1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgYX19cmV0dXJuIHJ9KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKylyW2VdPXRbZV07cmV0dXJuIHJ9fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIGE9dCgiY29sb3Itbm9ybWFsaXplIiksbz10KCJhcnJheS1ib3VuZHMiKSxzPXQoImNvbG9yLWlkIiksbD10KCJwb2ludC1jbHVzdGVyIiksYz10KCJvYmplY3QtYXNzaWduIiksdT10KCJnbHNsaWZ5IiksZj10KCJwaWNrLWJ5LWFsaWFzIiksaD10KCJ1cGRhdGUtZGlmZiIpLHA9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLGQ9dCgiaXMtaWV4cGxvcmVyIiksZz10KCJ0by1mbG9hdDMyIiksdj10KCJwYXJzZS1yZWN0IiksbT15O2Z1bmN0aW9uIHkodCxlKXt2YXIgcj10aGlzO2lmKCEodGhpcyBpbnN0YW5jZW9mIHkpKXJldHVybiBuZXcgeSh0LGUpOyJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOihlPXQsdD1udWxsKSxlJiZlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpO3ZhciBuLGk9KHQ9ZS5yZWdsKS5fZ2wsYT1bXTt0aGlzLnRvb01hbnlDb2xvcnM9ZCxuPXQudGV4dHVyZSh7ZGF0YTpuZXcgVWludDhBcnJheSgxMDIwKSx3aWR0aDoyNTUsaGVpZ2h0OjEsdHlwZToidWludDgiLGZvcm1hdDoicmdiYSIsd3JhcFM6ImNsYW1wIix3cmFwVDoiY2xhbXAiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0In0pLGModGhpcyx7cmVnbDp0LGdsOmksZ3JvdXBzOltdLG1hcmtlckNhY2hlOltudWxsXSxtYXJrZXJUZXh0dXJlczpbbnVsbF0scGFsZXR0ZTphLHBhbGV0dGVJZHM6e30scGFsZXR0ZVRleHR1cmU6bixtYXhDb2xvcnM6MjU1LG1heFNpemU6MTAwLGNhbnZhczppLmNhbnZhc30pLHRoaXMudXBkYXRlKGUpO3ZhciBvPXt1bmlmb3Jtczp7cGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxwYWxldHRlOm4scGFsZXR0ZVNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm5bci50b29NYW55Q29sb3JzPzA6MjU1LG4uaGVpZ2h0XX0sc2NhbGU6dC5wcm9wKCJzY2FsZSIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IiksbWFya2VyOnQucHJvcCgibWFya2VyVGV4dHVyZSIpfSxhdHRyaWJ1dGVzOnt4OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHJ8fHtidWZmZXI6ZS5wb3NpdGlvbkJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS55QXR0cnx8e2J1ZmZlcjplLnBvc2l0aW9uQnVmZmVyLHN0cmlkZTo4LG9mZnNldDo0fX0seEZyYWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHI/e2NvbnN0YW50OlswLDBdfTp7YnVmZmVyOmUucG9zaXRpb25GcmFjdEJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHlGcmFjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnlBdHRyP3tjb25zdGFudDpbMCwwXX06e2J1ZmZlcjplLnBvc2l0aW9uRnJhY3RCdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjR9fSxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc2l6ZS5sZW5ndGg/e2J1ZmZlcjplLnNpemVCdWZmZXIsc3RyaWRlOjIsb2Zmc2V0OjB9Ontjb25zdGFudDpbTWF0aC5yb3VuZCgyNTUqZS5zaXplL3IubWF4U2l6ZSldfX0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmJvcmRlclNpemUubGVuZ3RoP3tidWZmZXI6ZS5zaXplQnVmZmVyLHN0cmlkZToyLG9mZnNldDoxfTp7Y29uc3RhbnQ6W01hdGgucm91bmQoMjU1KmUuYm9yZGVyU2l6ZS9yLm1heFNpemUpXX19LGNvbG9ySWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5jb2xvci5sZW5ndGg/e2J1ZmZlcjplLmNvbG9yQnVmZmVyLHN0cmlkZTpyLnRvb01hbnlDb2xvcnM/ODo0LG9mZnNldDowfTp7Y29uc3RhbnQ6ci50b29NYW55Q29sb3JzP2Euc2xpY2UoNCplLmNvbG9yLDQqZS5jb2xvcis0KTpbZS5jb2xvcl19fSxib3JkZXJDb2xvcklkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYm9yZGVyQ29sb3IubGVuZ3RoP3tidWZmZXI6ZS5jb2xvckJ1ZmZlcixzdHJpZGU6ci50b29NYW55Q29sb3JzPzg6NCxvZmZzZXQ6ci50b29NYW55Q29sb3JzPzQ6Mn06e2NvbnN0YW50OnIudG9vTWFueUNvbG9ycz9hLnNsaWNlKDQqZS5ib3JkZXJDb2xvciw0KmUuYm9yZGVyQ29sb3IrNCk6W2UuYm9yZGVyQ29sb3JdfX0saXNBY3RpdmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4hMD09PWUuYWN0aXZhdGlvbj97Y29uc3RhbnQ6WzFdfTplLmFjdGl2YXRpb24/ZS5hY3RpdmF0aW9uOntjb25zdGFudDpbMF19fX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGVsZW1lbnRzOnQucHJvcCgiZWxlbWVudHMiKSxjb3VudDp0LnByb3AoImNvdW50Iiksb2Zmc2V0OnQucHJvcCgib2Zmc2V0IikscHJpbWl0aXZlOiJwb2ludHMifSxzPWMoe30sbyk7cy5mcmFnPXUoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xuXG51bmlmb3JtIHNhbXBsZXIyRCBtYXJrZXI7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW8sIG9wYWNpdHk7XG5cbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgeCwgZmxvYXQgeSkge1xuICByZXR1cm4gMS4wIC8gKDEuMCArIGV4cCg1MC4wKih4IC0geSkpKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKG1hcmtlciwgZ2xfUG9pbnRDb29yZCkuciwgZGVsdGEgPSBmcmFnV2lkdGg7XG5cbiAgLy8gbWF4LWRpc3RhbmNlIGFscGhhXG4gIGlmIChkaXN0IDwgMC4wMDMpIGRpc2NhcmQ7XG5cbiAgLy8gbnVsbC1ib3JkZXIgY2FzZVxuICBpZiAoZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPT0gZnJhZ0NvbG9yTGV2ZWwgfHwgZnJhZ0JvcmRlckNvbG9yLmEgPT0gMC4pIHtcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoLjUgLSBkZWx0YSwgLjUgKyBkZWx0YSwgZGlzdCk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiLCBjb2xvckFtdCAqIGZyYWdDb2xvci5hICogb3BhY2l0eSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmxvYXQgYm9yZGVyQ29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdCb3JkZXJDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdCb3JkZXJDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xuICAgIGZsb2F0IGNvbG9yQW10ID0gc21vb3Roc3RlcChmcmFnQ29sb3JMZXZlbCAtIGRlbHRhLCBmcmFnQ29sb3JMZXZlbCArIGRlbHRhLCBkaXN0KTtcblxuICAgIHZlYzQgY29sb3IgPSBmcmFnQm9yZGVyQ29sb3I7XG4gICAgY29sb3IuYSAqPSBib3JkZXJDb2xvckFtdDtcbiAgICBjb2xvciA9IG1peChjb2xvciwgZnJhZ0NvbG9yLCBjb2xvckFtdCk7XG4gICAgY29sb3IuYSAqPSBvcGFjaXR5O1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gIH1cblxufVxuIl0pLHMudmVydD11KFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QsIHBhbGV0dGVTaXplO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcblxuY29uc3QgZmxvYXQgbWF4U2l6ZSA9IDEwMC47XG5jb25zdCBmbG9hdCBib3JkZXJMZXZlbCA9IC41O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdQb2ludFNpemUsIGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xuXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XG5cbnZlYzQgZ2V0Q29sb3IodmVjNCBpZCkge1xuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZSxcbiAgICB2ZWMyKFxuICAgICAgKGlkLnggKyAuNSkgLyBwYWxldHRlU2l6ZS54LFxuICAgICAgKGlkLnkgKyAuNSkgLyBwYWxldHRlU2l6ZS55XG4gICAgKVxuICApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xuXG4gIHZlYzIgcG9zaXRpb24gPSB2ZWMyKHgsIHkpO1xuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcblxuICB2ZWM0IGNvbG9yID0gZ2V0Q29sb3IoY29sb3JJZCk7XG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcblxuICBmbG9hdCBzaXplID0gc2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuXG4gIGdsX1BvaW50U2l6ZSA9IDIuICogc2l6ZSAqIHBpeGVsUmF0aW87XG4gIGZyYWdQb2ludFNpemUgPSBzaXplICogcGl4ZWxSYXRpbztcblxuICB2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XG5cbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yO1xuICBmcmFnV2lkdGggPSAxLiAvIGdsX1BvaW50U2l6ZTtcblxuICBmcmFnQm9yZGVyQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsIC0gYm9yZGVyTGV2ZWwgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcbiAgZnJhZ0NvbG9yTGV2ZWwgPSBjbGFtcChib3JkZXJMZXZlbCArICgxLiAtIGJvcmRlckxldmVsKSAqIGJvcmRlclNpemUgLyBzaXplLCAwLiwgMS4pO1xufSJdKSx0aGlzLmRyYXdNYXJrZXI9dChzKTt2YXIgbD1jKHt9LG8pO2wuZnJhZz11KFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xuXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIGZsb2F0IGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aDtcblxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0IHgpIHtcblx0ZmxvYXQgdDtcblx0dCA9IGNsYW1wKCh4IC0gZWRnZTApIC8gKGVkZ2UxIC0gZWRnZTApLCAwLjAsIDEuMCk7XG5cdHJldHVybiB0ICogdCAqICgzLjAgLSAyLjAgKiB0KTtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCByYWRpdXMsIGFscGhhID0gMS4wLCBkZWx0YSA9IGZyYWdXaWR0aDtcblxuXHRyYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG5cblx0aWYgKHJhZGl1cyA+IDEuMCArIGRlbHRhKSB7XG5cdFx0ZGlzY2FyZDtcblx0fVxuXG5cdGFscGhhIC09IHNtb290aHN0ZXAoMS4wIC0gZGVsdGEsIDEuMCArIGRlbHRhLCByYWRpdXMpO1xuXG5cdGZsb2F0IGJvcmRlclJhZGl1cyA9IGZyYWdCb3JkZXJSYWRpdXM7XG5cdGZsb2F0IHJhdGlvID0gc21vb3Roc3RlcChib3JkZXJSYWRpdXMgLSBkZWx0YSwgYm9yZGVyUmFkaXVzICsgZGVsdGEsIHJhZGl1cyk7XG5cdHZlYzQgY29sb3IgPSBtaXgoZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3IsIHJhdGlvKTtcblx0Y29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHk7XG5cdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pLGwudmVydD11KFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xudW5pZm9ybSB2ZWMyIHBhbGV0dGVTaXplO1xuXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XG5cbmJvb2wgaXNEaXJlY3QgPSAocGFsZXR0ZVNpemUueCA8IDEuKTtcblxudmVjNCBnZXRDb2xvcih2ZWM0IGlkKSB7XG4gIHJldHVybiBpc0RpcmVjdCA/IGlkIC8gMjU1LiA6IHRleHR1cmUyRChwYWxldHRlLFxuICAgIHZlYzIoXG4gICAgICAoaWQueCArIC41KSAvIHBhbGV0dGVTaXplLngsXG4gICAgICAoaWQueSArIC41KSAvIHBhbGV0dGVTaXplLnlcbiAgICApXG4gICk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gaWdub3JlIGluYWN0aXZlIHBvaW50c1xuICBpZiAoaXNBY3RpdmUgPT0gMC4pIHJldHVybjtcblxuICB2ZWMyIHBvc2l0aW9uID0gdmVjMih4LCB5KTtcbiAgdmVjMiBwb3NpdGlvbkZyYWN0ID0gdmVjMih4RnJhY3QsIHlGcmFjdCk7XG5cbiAgdmVjNCBjb2xvciA9IGdldENvbG9yKGNvbG9ySWQpO1xuICB2ZWM0IGJvcmRlckNvbG9yID0gZ2V0Q29sb3IoYm9yZGVyQ29sb3JJZCk7XG5cbiAgZmxvYXQgc2l6ZSA9IHNpemUgKiBtYXhTaXplIC8gMjU1LjtcbiAgZmxvYXQgYm9yZGVyU2l6ZSA9IGJvcmRlclNpemUgKiBtYXhTaXplIC8gMjU1LjtcblxuICBnbF9Qb2ludFNpemUgPSAoc2l6ZSArIGJvcmRlclNpemUpICogcGl4ZWxSYXRpbztcblxuICB2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XG5cbiAgZnJhZ0JvcmRlclJhZGl1cyA9IDEuIC0gMi4gKiBib3JkZXJTaXplIC8gKHNpemUgKyBib3JkZXJTaXplKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yLmEgPT0gMC4gfHwgYm9yZGVyU2l6ZSA9PSAwLiA/IHZlYzQoY29sb3IucmdiLCAwLikgOiBib3JkZXJDb2xvcjtcbiAgZnJhZ1dpZHRoID0gMS4gLyBnbF9Qb2ludFNpemU7XG59XG4iXSksZCYmKGwuZnJhZz1sLmZyYWcucmVwbGFjZSgic21vb3Roc3RlcCIsInNtb290aFN0ZXAiKSxzLmZyYWc9cy5mcmFnLnJlcGxhY2UoInNtb290aHN0ZXAiLCJzbW9vdGhTdGVwIikpLHRoaXMuZHJhd0NpcmNsZT10KGwpfXkuZGVmYXVsdHM9e2NvbG9yOiJibGFjayIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjAsc2l6ZToxMixvcGFjaXR5OjEsbWFya2VyOnZvaWQgMCx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwscGl4ZWxTaXplOm51bGwsY291bnQ6MCxvZmZzZXQ6MCxib3VuZHM6bnVsbCxwb3NpdGlvbnM6W10sc25hcDoxZTR9LHkucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZ0aGlzLnVwZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5kcmF3KCksdGhpc30seS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPWFyZ3VtZW50c1tuXTt2YXIgaT10aGlzLmdyb3VwcztpZigxPT09ci5sZW5ndGgmJkFycmF5LmlzQXJyYXkoclswXSkmJihudWxsPT09clswXVswXXx8QXJyYXkuaXNBcnJheShyWzBdWzBdKSkmJihyPXJbMF0pLHRoaXMucmVnbC5fcmVmcmVzaCgpLHIubGVuZ3RoKWZvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXRoaXMuZHJhd0l0ZW0oYSxyW2FdKTtlbHNlIGkuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QuZHJhd0l0ZW0ocil9KTtyZXR1cm4gdGhpc30seS5wcm90b3R5cGUuZHJhd0l0ZW09ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdyb3VwcyxuPXJbdF07aWYoIm51bWJlciI9PXR5cGVvZiBlJiYodD1lLG49cltlXSxlPW51bGwpLG4mJm4uY291bnQmJm4ub3BhY2l0eSl7bi5hY3RpdmF0aW9uWzBdJiZ0aGlzLmRyYXdDaXJjbGUodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucygwLG4sZSkpO2Zvcih2YXIgYT1bXSxvPTE7bzxuLmFjdGl2YXRpb24ubGVuZ3RoO28rKyluLmFjdGl2YXRpb25bb10mJighMD09PW4uYWN0aXZhdGlvbltvXXx8bi5hY3RpdmF0aW9uW29dLmRhdGEubGVuZ3RoKSYmYS5wdXNoLmFwcGx5KGEsaSh0aGlzLmdldE1hcmtlckRyYXdPcHRpb25zKG8sbixlKSkpO2EubGVuZ3RoJiZ0aGlzLmRyYXdNYXJrZXIoYSl9fSx5LnByb3RvdHlwZS5nZXRNYXJrZXJEcmF3T3B0aW9ucz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5yYW5nZSxhPWUudHJlZSxvPWUudmlld3BvcnQscz1lLmFjdGl2YXRpb24sbD1lLnNlbGVjdGlvbkJ1ZmZlcix1PWUuY291bnQ7dGhpcy5yZWdsO2lmKCFhKXJldHVybiByP1tjKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnNbdF0sY291bnQ6ci5sZW5ndGgsZWxlbWVudHM6cixvZmZzZXQ6MH0pXTpbYyh7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLG9mZnNldDowfSldO3ZhciBmPVtdLGg9YS5yYW5nZShpLHtsb2Q6ITAscHg6WyhpWzJdLWlbMF0pL28ud2lkdGgsKGlbM10taVsxXSkvby5oZWlnaHRdfSk7aWYocil7Zm9yKHZhciBwPXNbdF0uZGF0YSxkPW5ldyBVaW50OEFycmF5KHUpLGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXTtkW3ZdPXA/cFt2XToxfWwuc3ViZGF0YShkKX1mb3IodmFyIG09aC5sZW5ndGg7bS0tOyl7dmFyIHk9bihoW21dLDIpLHg9eVswXSxiPXlbMV07Zi5wdXNoKGMoe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246cj9sOnNbdF0sb2Zmc2V0OngsY291bnQ6Yi14fSkpfXJldHVybiBmfSx5LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07aWYoci5sZW5ndGgpezE9PT1yLmxlbmd0aCYmQXJyYXkuaXNBcnJheShyWzBdKSYmKHI9clswXSk7dmFyIGk9dGhpcy5ncm91cHMsYT10aGlzLmdsLHM9dGhpcy5yZWdsLHU9dGhpcy5tYXhTaXplLGQ9dGhpcy5tYXhDb2xvcnMsbT10aGlzLnBhbGV0dGU7dGhpcy5ncm91cHM9aT1yLm1hcChmdW5jdGlvbihlLHIpe3ZhciBuPWlbcl07aWYodm9pZCAwPT09ZSlyZXR1cm4gbjtudWxsPT09ZT9lPXtwb3NpdGlvbnM6bnVsbH06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZT17b25kcmF3OmV9OiJudW1iZXIiPT10eXBlb2YgZVswXSYmKGU9e3Bvc2l0aW9uczplfSksbnVsbD09PShlPWYoZSx7cG9zaXRpb25zOiJwb3NpdGlvbnMgZGF0YSBwb2ludHMiLHNuYXA6InNuYXAgY2x1c3RlciBsb2QgdHJlZSIsc2l6ZToic2l6ZXMgc2l6ZSByYWRpdXMiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixjb2xvcjoiY29sb3JzIGNvbG9yIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IiLGJvcmRlckNvbG9yOiJib3JkZXJDb2xvcnMgYm9yZGVyQ29sb3Igc3Ryb2tlIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvciIsbWFya2VyOiJtYXJrZXJzIG1hcmtlciBzaGFwZSIscmFuZ2U6InJhbmdlIGRhdGFCb3ggZGF0YWJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdQb3J0IHZpZXdCb3ggdmlld2JveCIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kiLGJvdW5kczoiYm91bmQgYm91bmRzIGJvdW5kYXJpZXMgbGltaXRzIix0b29NYW55Q29sb3JzOiJ0b29NYW55Q29sb3JzIHBhbGV0dGUgcGFsZXR0ZU1vZGUgb3B0aW1pemVQYWxldHRlIGVuYWJsZVBhbGV0dGUifSkpLnBvc2l0aW9ucyYmKGUucG9zaXRpb25zPVtdKSxudWxsIT1lLnRvb01hbnlDb2xvcnMmJih0LnRvb01hbnlDb2xvcnM9ZS50b29NYW55Q29sb3JzKSxufHwoaVtyXT1uPXtpZDpyLHNjYWxlOm51bGwsdHJhbnNsYXRlOm51bGwsc2NhbGVGcmFjdDpudWxsLHRyYW5zbGF0ZUZyYWN0Om51bGwsYWN0aXZhdGlvbjpbXSxzZWxlY3Rpb25CdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6InN0cmVhbSIsdHlwZToidWludDgifSksc2l6ZUJ1ZmZlcjpzLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgifSksY29sb3JCdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4In0pLHBvc2l0aW9uQnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCJ9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCJ9KX0sZT1jKHt9LHkuZGVmYXVsdHMsZSkpLCFlLnBvc2l0aW9uc3x8Im1hcmtlciJpbiBlfHwoZS5tYXJrZXI9bi5tYXJrZXIsZGVsZXRlIG4ubWFya2VyKSwhZS5tYXJrZXJ8fCJwb3NpdGlvbnMiaW4gZXx8KGUucG9zaXRpb25zPW4ucG9zaXRpb25zLGRlbGV0ZSBuLnBvc2l0aW9ucyk7dmFyIHg9MCxiPTA7aWYoaChuLGUsW3tzbmFwOiEwLHNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9eS5kZWZhdWx0cy5zaXplKSx4Kz10JiZ0Lmxlbmd0aD8xOjAsdH0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10JiYodD15LmRlZmF1bHRzLmJvcmRlclNpemUpLHgrPXQmJnQubGVuZ3RoPzE6MCx0fSxvcGFjaXR5OnBhcnNlRmxvYXQsY29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9eS5kZWZhdWx0cy5jb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLGIrKyxlfSxib3JkZXJDb2xvcjpmdW5jdGlvbihlLHIpe3JldHVybiBudWxsPT1lJiYoZT15LmRlZmF1bHRzLmJvcmRlckNvbG9yKSxlPXQudXBkYXRlQ29sb3IoZSksYisrLGV9LGJvdW5kczpmdW5jdGlvbih0LGUscil7cmV0dXJuInJhbmdlImluIHJ8fChyLnJhbmdlPW51bGwpLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5zbmFwLGk9ZS5wb3NpdGlvbkJ1ZmZlcixhPWUucG9zaXRpb25GcmFjdEJ1ZmZlcixjPWUuc2VsZWN0aW9uQnVmZmVyO2lmKHQueHx8dC55KXJldHVybiB0LngubGVuZ3RoP2UueEF0dHI9e2J1ZmZlcjpzLmJ1ZmZlcih0LngpLG9mZnNldDowLHN0cmlkZTo0LGNvdW50OnQueC5sZW5ndGh9OmUueEF0dHI9e2J1ZmZlcjp0LnguYnVmZmVyLG9mZnNldDo0KnQueC5vZmZzZXR8fDAsc3RyaWRlOjQqKHQueC5zdHJpZGV8fDEpLGNvdW50OnQueC5jb3VudH0sdC55Lmxlbmd0aD9lLnlBdHRyPXtidWZmZXI6cy5idWZmZXIodC55KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LnkubGVuZ3RofTplLnlBdHRyPXtidWZmZXI6dC55LmJ1ZmZlcixvZmZzZXQ6NCp0Lnkub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnkuc3RyaWRlfHwxKSxjb3VudDp0LnkuY291bnR9LGUuY291bnQ9TWF0aC5tYXgoZS54QXR0ci5jb3VudCxlLnlBdHRyLmNvdW50KSx0O3Q9cCh0LCJmbG9hdDY0Iik7dmFyIHU9ZS5jb3VudD1NYXRoLmZsb29yKHQubGVuZ3RoLzIpLGY9ZS5ib3VuZHM9dT9vKHQsMik6bnVsbDtpZihyLnJhbmdlfHxlLnJhbmdlfHwoZGVsZXRlIGUucmFuZ2Usci5yYW5nZT1mKSxyLm1hcmtlcnx8ZS5tYXJrZXJ8fChkZWxldGUgZS5tYXJrZXIsci5tYXJrZXI9bnVsbCksbiYmKCEwPT09bnx8dT5uKT9lLnRyZWU9bCh0LHtib3VuZHM6Zn0pOm4mJm4ubGVuZ3RoJiYoZS50cmVlPW4pLGUudHJlZSl7dmFyIGg9e3ByaW1pdGl2ZToicG9pbnRzIix1c2FnZToic3RhdGljIixkYXRhOmUudHJlZSx0eXBlOiJ1aW50MzIifTtlLmVsZW1lbnRzP2UuZWxlbWVudHMoaCk6ZS5lbGVtZW50cz1zLmVsZW1lbnRzKGgpfXJldHVybiBpKHtkYXRhOmcuZmxvYXQodCksdXNhZ2U6ImR5bmFtaWMifSksYSh7ZGF0YTpnLmZyYWN0KHQpLHVzYWdlOiJkeW5hbWljIn0pLGMoe2RhdGE6bmV3IFVpbnQ4QXJyYXkodSksdHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdH19LHttYXJrZXI6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIuYWN0aXZhdGlvbjtpZihpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSxpLmxlbmd0aD0wLGUmJiJudW1iZXIiIT10eXBlb2YgZVswXSl7Zm9yKHZhciBhPVtdLG89MCxsPU1hdGgubWluKGUubGVuZ3RoLHIuY291bnQpO288bDtvKyspe3ZhciBjPXQuYWRkTWFya2VyKGVbb10pO2FbY118fChhW2NdPW5ldyBVaW50OEFycmF5KHIuY291bnQpKSxhW2NdW29dPTF9Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1KyspaWYoYVt1XSl7dmFyIGY9e2RhdGE6YVt1XSx0eXBlOiJ1aW50OCIsdXNhZ2U6InN0YXRpYyJ9O2lbdV0/aVt1XShmKTppW3VdPXMuYnVmZmVyKGYpLGlbdV0uZGF0YT1hW3VdfX1lbHNle2lbdC5hZGRNYXJrZXIoZSldPSEwfXJldHVybiBlfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7aWYobilyZXR1cm4gdHx8KHQ9biksZS5zY2FsZT1bMS8odFsyXS10WzBdKSwxLyh0WzNdLXRbMV0pXSxlLnRyYW5zbGF0ZT1bLXRbMF0sLXRbMV1dLGUuc2NhbGVGcmFjdD1nLmZyYWN0KGUuc2NhbGUpLGUudHJhbnNsYXRlRnJhY3Q9Zy5mcmFjdChlLnRyYW5zbGF0ZSksdH0sdmlld3BvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHYodHx8W2EuZHJhd2luZ0J1ZmZlcldpZHRoLGEuZHJhd2luZ0J1ZmZlckhlaWdodF0pfX1dKSx4KXt2YXIgXz1uLHc9Xy5jb3VudCxrPV8uc2l6ZSxUPV8uYm9yZGVyU2l6ZSxBPV8uc2l6ZUJ1ZmZlcixNPW5ldyBVaW50OEFycmF5KDIqdyk7aWYoay5sZW5ndGh8fFQubGVuZ3RoKWZvcih2YXIgUz0wO1M8dztTKyspTVsyKlNdPU1hdGgucm91bmQoMjU1KihudWxsPT1rW1NdP2s6a1tTXSkvdSksTVsyKlMrMV09TWF0aC5yb3VuZCgyNTUqKG51bGw9PVRbU10/VDpUW1NdKS91KTtBKHtkYXRhOk0sdXNhZ2U6ImR5bmFtaWMifSl9aWYoYil7dmFyIEUsQz1uLEw9Qy5jb3VudCx6PUMuY29sb3IsTz1DLmJvcmRlckNvbG9yLEk9Qy5jb2xvckJ1ZmZlcjtpZih0LnRvb01hbnlDb2xvcnMpe2lmKHoubGVuZ3RofHxPLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg4KkwpO2Zvcih2YXIgRD0wO0Q8TDtEKyspe3ZhciBQPXpbRF07RVs4KkRdPW1bNCpQXSxFWzgqRCsxXT1tWzQqUCsxXSxFWzgqRCsyXT1tWzQqUCsyXSxFWzgqRCszXT1tWzQqUCszXTt2YXIgUj1PW0RdO0VbOCpEKzRdPW1bNCpSXSxFWzgqRCs1XT1tWzQqUisxXSxFWzgqRCs2XT1tWzQqUisyXSxFWzgqRCs3XT1tWzQqUiszXX19fWVsc2UgaWYoei5sZW5ndGh8fE8ubGVuZ3RoKXtFPW5ldyBVaW50OEFycmF5KDQqTCsyKTtmb3IodmFyIEY9MDtGPEw7RisrKW51bGwhPXpbRl0mJihFWzQqRl09eltGXSVkLEVbNCpGKzFdPU1hdGguZmxvb3IoeltGXS9kKSksbnVsbCE9T1tGXSYmKEVbNCpGKzJdPU9bRl0lZCxFWzQqRiszXT1NYXRoLmZsb29yKE9bRl0vZCkpfUkoe2RhdGE6RXx8bmV3IFVpbnQ4QXJyYXkoMCksdHlwZToidWludDgiLHVzYWdlOiJkeW5hbWljIn0pfXJldHVybiBufSl9fSx5LnByb3RvdHlwZS5hZGRNYXJrZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLm1hcmtlclRleHR1cmVzLG49dGhpcy5yZWdsLGk9dGhpcy5tYXJrZXJDYWNoZSxhPW51bGw9PXQ/MDppLmluZGV4T2YodCk7aWYoYT49MClyZXR1cm4gYTtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KWU9dDtlbHNle2U9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgbz0wLHM9dC5sZW5ndGg7bzxzO28rKyllW29dPTI1NSp0W29dfXZhciBsPU1hdGguZmxvb3IoTWF0aC5zcXJ0KGUubGVuZ3RoKSk7cmV0dXJuIGE9ci5sZW5ndGgsaS5wdXNoKHQpLHIucHVzaChuLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTplLHJhZGl1czpsLG1hZzoibGluZWFyIixtaW46ImxpbmVhciJ9KSksYX0seS5wcm90b3R5cGUudXBkYXRlQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYWxldHRlSWRzLHI9dGhpcy5wYWxldHRlLG49dGhpcy5tYXhDb2xvcnM7QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgaT1bXTtpZigibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBvPVtdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKz00KW8ucHVzaCh0LnNsaWNlKGwsbCs0KSk7ZWxzZSBmb3IodmFyIGM9MDtjPHQubGVuZ3RoO2MrPTQpby5wdXNoKHQuc3ViYXJyYXkoYyxjKzQpKTt0PW99Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBmPXRbdV07Zj1hKGYsInVpbnQ4Iik7dmFyIGg9cyhmLCExKTtpZihudWxsPT1lW2hdKXt2YXIgcD1yLmxlbmd0aDtlW2hdPU1hdGguZmxvb3IocC80KSxyW3BdPWZbMF0scltwKzFdPWZbMV0scltwKzJdPWZbMl0scltwKzNdPWZbM119aVt1XT1lW2hdfXJldHVybiF0aGlzLnRvb01hbnlDb2xvcnMmJnIubGVuZ3RoPjQqbiYmKHRoaXMudG9vTWFueUNvbG9ycz0hMCksdGhpcy51cGRhdGVQYWxldHRlKHIpLDE9PT1pLmxlbmd0aD9pWzBdOml9LHkucHJvdG90eXBlLnVwZGF0ZVBhbGV0dGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMudG9vTWFueUNvbG9ycyl7dmFyIGU9dGhpcy5tYXhDb2xvcnMscj10aGlzLnBhbGV0dGVUZXh0dXJlLG49TWF0aC5jZWlsKC4yNSp0Lmxlbmd0aC9lKTtpZihuPjEpZm9yKHZhciBpPS4yNSoodD10LnNsaWNlKCkpLmxlbmd0aCVlO2k8biplO2krKyl0LnB1c2goMCwwLDAsMCk7ci5oZWlnaHQ8biYmci5yZXNpemUoZSxuKSxyLnN1YmltYWdlKHt3aWR0aDpNYXRoLm1pbiguMjUqdC5sZW5ndGgsZSksaGVpZ2h0Om4sZGF0YTp0fSwwLDApfX0seS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2l6ZUJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkZyYWN0QnVmZmVyLmRlc3Ryb3koKSx0LmNvbG9yQnVmZmVyLmRlc3Ryb3koKSx0LmFjdGl2YXRpb24uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLHQuc2VsZWN0aW9uQnVmZmVyLmRlc3Ryb3koKSx0LmVsZW1lbnRzJiZ0LmVsZW1lbnRzLmRlc3Ryb3koKX0pLHRoaXMuZ3JvdXBzLmxlbmd0aD0wLHRoaXMucGFsZXR0ZVRleHR1cmUuZGVzdHJveSgpLHRoaXMubWFya2VyVGV4dHVyZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLHRoaXN9O3ZhciB4PXQoIm9iamVjdC1hc3NpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbSh0LGUpLG49ci5yZW5kZXIuYmluZChyKTtyZXR1cm4geChuLHtyZW5kZXI6bix1cGRhdGU6ci51cGRhdGUuYmluZChyKSxkcmF3OnIuZHJhdy5iaW5kKHIpLGRlc3Ryb3k6ci5kZXN0cm95LmJpbmQocikscmVnbDpyLnJlZ2wsZ2w6ci5nbCxjYW52YXM6ci5nbC5jYW52YXMsZ3JvdXBzOnIuZ3JvdXBzLG1hcmtlcnM6ci5tYXJrZXJDYWNoZSxwYWxldHRlOnIucGFsZXR0ZX0pLG59fSx7ImFycmF5LWJvdW5kcyI6NTUsImNvbG9yLWlkIjoxMDgsImNvbG9yLW5vcm1hbGl6ZSI6MTEwLCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyMjMsZ2xzbGlmeTo0MDEsImlzLWlleHBsb3JlciI6NDExLCJvYmplY3QtYXNzaWduIjo0NDYsInBhcnNlLXJlY3QiOjQ1MSwicGljay1ieS1hbGlhcyI6NDU3LCJwb2ludC1jbHVzdGVyIjo0NjEsInRvLWZsb2F0MzIiOjUyMiwidXBkYXRlLWRpZmYiOjUzM31dLDQ4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLXNjYXR0ZXIyZCIpLGk9dCgicGljay1ieS1hbGlhcyIpLGE9dCgiYXJyYXktYm91bmRzIiksbz10KCJyYWYiKSxzPXQoImFycmF5LXJhbmdlIiksbD10KCJwYXJzZS1yZWN0IiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIik7ZnVuY3Rpb24gdSh0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0LGUpO3RoaXMudHJhY2VzPVtdLHRoaXMucGFzc2VzPXt9LHRoaXMucmVnbD10LHRoaXMuc2NhdHRlcj1uKHQpLHRoaXMuY2FudmFzPXRoaXMuc2NhdHRlci5jYW52YXN9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuKG51bGwhPXQuaWQ/dC5pZDp0KTw8MTZ8KDI1NSZlKTw8OHwyNTUmcn1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbixpLGEsbyxzPXRbZV0sbD10W3JdO3JldHVybiBzLmxlbmd0aD4yPyhzWzBdLHNbMl0sbj1zWzFdLGk9c1szXSk6cy5sZW5ndGg/KG49c1swXSxpPXNbMV0pOihzLngsbj1zLnkscy54K3Mud2lkdGgsaT1zLnkrcy5oZWlnaHQpLGwubGVuZ3RoPjI/KGE9bFswXSxvPWxbMl0sbFsxXSxsWzNdKTpsLmxlbmd0aD8oYT1sWzBdLG89bFsxXSk6KGE9bC54LGwueSxvPWwueCtsLndpZHRoLGwueStsLmhlaWdodCksW2EsbixvLGldfWZ1bmN0aW9uIHAodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVyblt0LHQsdCx0XTtpZigyPT09dC5sZW5ndGgpcmV0dXJuW3RbMF0sdFsxXSx0WzBdLHRbMV1dO3ZhciBlPWwodCk7cmV0dXJuW2UueCxlLnksZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0XX1lLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO24tLTspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxyKSx0aGlzLnJlZ2wuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/dGhpcy5kcmF3KCk6KHRoaXMuZGlydHk/bnVsbD09dGhpcy5wbGFubmVkJiYodGhpcy5wbGFubmVkPW8oZnVuY3Rpb24oKXtlLmRyYXcoKSxlLmRpcnR5PSEwLGUucGxhbm5lZD1udWxsfSkpOih0aGlzLmRyYXcoKSx0aGlzLmRpcnR5PSEwLG8oZnVuY3Rpb24oKXtlLmRpcnR5PSExfSkpLHRoaXMpfSx1LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy51cGRhdGVJdGVtKG4sZVtuXSk7dGhpcy50cmFjZXM9dGhpcy50cmFjZXMuZmlsdGVyKEJvb2xlYW4pO2Zvcih2YXIgaT1bXSxhPTAsbz0wO288dGhpcy50cmFjZXMubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRoaXMudHJhY2VzW29dLGw9dGhpcy50cmFjZXNbb10ucGFzc2VzLGM9MDtjPGwubGVuZ3RoO2MrKylpLnB1c2godGhpcy5wYXNzZXNbbFtjXV0pO3MucGFzc09mZnNldD1hLGErPXMucGFzc2VzLmxlbmd0aH1yZXR1cm4odD10aGlzLnNjYXR0ZXIpLnVwZGF0ZS5hcHBseSh0LGkpLHRoaXN9fSx1LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5yZWdsO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLnRyYWNlc1t0XT1udWxsLHRoaXM7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIG4sbz1pKGUse2RhdGE6ImRhdGEgaXRlbXMgY29sdW1ucyByb3dzIHZhbHVlcyBkaW1lbnNpb25zIHNhbXBsZXMgeCIsc25hcDoic25hcCBjbHVzdGVyIixzaXplOiJzaXplcyBzaXplIHJhZGl1cyIsY29sb3I6ImNvbG9ycyBjb2xvciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSBvcGFxdWUiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixib3JkZXJDb2xvcjoiYm9yZGVyQ29sb3JzIGJvcmRlckNvbG9yIGJvcmRlcmNvbG9yIHN0cm9rZSBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLG1hcmtlcjoibWFya2VycyBtYXJrZXIgc2hhcGUiLHJhbmdlOiJyYW5nZSByYW5nZXMgZGF0YWJveCBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCB2aWV3Ym94Iixkb21haW46ImRvbWFpbiBkb21haW5zIGFyZWEgYXJlYXMiLHBhZGRpbmc6InBhZCBwYWRkaW5nIHBhZGRpbmdzIHBhZHMgbWFyZ2luIG1hcmdpbnMiLHRyYW5zcG9zZToidHJhbnNwb3NlIHRyYW5zcG9zZWQiLGRpYWdvbmFsOiJkaWFnb25hbCBkaWFnIHNob3dEaWFnb25hbCIsdXBwZXI6InVwcGVyIHVwIHRvcCB1cHBlcmhhbGYgdXBwZXJIYWxmIHNob3d1cHBlcmhhbGYgc2hvd1VwcGVyIHNob3dVcHBlckhhbGYiLGxvd2VyOiJsb3dlciBsb3cgYm90dG9tIGxvd2VyaGFsZiBsb3dlckhhbGYgc2hvd2xvd2VyaGFsZiBzaG93TG93ZXJIYWxmIHNob3dMb3dlciJ9KSxzPXRoaXMudHJhY2VzW3RdfHwodGhpcy50cmFjZXNbdF09e2lkOnQsYnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxjb2xvcjoiYmxhY2siLG1hcmtlcjpudWxsLHNpemU6MTIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjEsdmlld3BvcnQ6bChbci5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHIuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxwYWRkaW5nOlswLDAsMCwwXSxvcGFjaXR5OjEsZGlhZ29uYWw6ITAsdXBwZXI6ITAsbG93ZXI6ITB9KTtpZihudWxsIT1vLmNvbG9yJiYocy5jb2xvcj1vLmNvbG9yKSxudWxsIT1vLnNpemUmJihzLnNpemU9by5zaXplKSxudWxsIT1vLm1hcmtlciYmKHMubWFya2VyPW8ubWFya2VyKSxudWxsIT1vLmJvcmRlckNvbG9yJiYocy5ib3JkZXJDb2xvcj1vLmJvcmRlckNvbG9yKSxudWxsIT1vLmJvcmRlclNpemUmJihzLmJvcmRlclNpemU9by5ib3JkZXJTaXplKSxudWxsIT1vLm9wYWNpdHkmJihzLm9wYWNpdHk9by5vcGFjaXR5KSxvLnZpZXdwb3J0JiYocy52aWV3cG9ydD1sKG8udmlld3BvcnQpKSxudWxsIT1vLmRpYWdvbmFsJiYocy5kaWFnb25hbD1vLmRpYWdvbmFsKSxudWxsIT1vLnVwcGVyJiYocy51cHBlcj1vLnVwcGVyKSxudWxsIT1vLmxvd2VyJiYocy5sb3dlcj1vLmxvd2VyKSxvLmRhdGEpe3MuYnVmZmVyKGMoby5kYXRhKSkscy5jb2x1bW5zPW8uZGF0YS5sZW5ndGgscy5jb3VudD1vLmRhdGFbMF0ubGVuZ3RoLHMuYm91bmRzPVtdO2Zvcih2YXIgdT0wO3U8cy5jb2x1bW5zO3UrKylzLmJvdW5kc1t1XT1hKG8uZGF0YVt1XSwxKX1vLnJhbmdlJiYocy5yYW5nZT1vLnJhbmdlLG49cy5yYW5nZSYmIm51bWJlciIhPXR5cGVvZiBzLnJhbmdlWzBdKSxvLmRvbWFpbiYmKHMuZG9tYWluPW8uZG9tYWluKTt2YXIgZD0hMTtudWxsIT1vLnBhZGRpbmcmJihBcnJheS5pc0FycmF5KG8ucGFkZGluZykmJm8ucGFkZGluZy5sZW5ndGg9PT1zLmNvbHVtbnMmJiJudW1iZXIiPT10eXBlb2Ygby5wYWRkaW5nW28ucGFkZGluZy5sZW5ndGgtMV0/KHMucGFkZGluZz1vLnBhZGRpbmcubWFwKHApLGQ9ITApOnMucGFkZGluZz1wKG8ucGFkZGluZykpO3ZhciBnPXMuY29sdW1ucyx2PXMuY291bnQsbT1zLnZpZXdwb3J0LndpZHRoLHk9cy52aWV3cG9ydC5oZWlnaHQseD1zLnZpZXdwb3J0LngsYj1zLnZpZXdwb3J0LnksXz1tL2csdz15L2c7cy5wYXNzZXM9W107Zm9yKHZhciBrPTA7azxnO2srKylmb3IodmFyIFQ9MDtUPGc7VCsrKWlmKChzLmRpYWdvbmFsfHxUIT09aykmJihzLnVwcGVyfHwhKGs+VCkpJiYocy5sb3dlcnx8IShrPFQpKSl7dmFyIEE9ZihzLmlkLGssVCksTT10aGlzLnBhc3Nlc1tBXXx8KHRoaXMucGFzc2VzW0FdPXt9KTtpZihvLmRhdGEmJihvLnRyYW5zcG9zZT9NLnBvc2l0aW9ucz17eDp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDpULGNvdW50OnYsc3RyaWRlOmd9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayxjb3VudDp2LHN0cmlkZTpnfX06TS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6VCp2LGNvdW50OnZ9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayp2LGNvdW50OnZ9fSxNLmJvdW5kcz1oKHMuYm91bmRzLGssVCkpLG8uZG9tYWlufHxvLnZpZXdwb3J0fHxvLmRhdGEpe3ZhciBTPWQ/aChzLnBhZGRpbmcsayxUKTpzLnBhZGRpbmc7aWYocy5kb21haW4pe3ZhciBFPWgocy5kb21haW4sayxUKSxDPUVbMF0sTD1FWzFdLHo9RVsyXSxPPUVbM107TS52aWV3cG9ydD1beCtDKm0rU1swXSxiK0wqeStTWzFdLHgreiptLVNbMl0sYitPKnktU1szXV19ZWxzZSBNLnZpZXdwb3J0PVt4K1QqXytfKlNbMF0sYitrKncrdypTWzFdLHgrKFQrMSkqXy1fKlNbMl0sYisoaysxKSp3LXcqU1szXV19by5jb2xvciYmKE0uY29sb3I9cy5jb2xvciksby5zaXplJiYoTS5zaXplPXMuc2l6ZSksby5tYXJrZXImJihNLm1hcmtlcj1zLm1hcmtlciksby5ib3JkZXJTaXplJiYoTS5ib3JkZXJTaXplPXMuYm9yZGVyU2l6ZSksby5ib3JkZXJDb2xvciYmKE0uYm9yZGVyQ29sb3I9cy5ib3JkZXJDb2xvciksby5vcGFjaXR5JiYoTS5vcGFjaXR5PXMub3BhY2l0eSksby5yYW5nZSYmKE0ucmFuZ2U9bj9oKHMucmFuZ2UsayxUKTpzLnJhbmdlfHxNLmJvdW5kcykscy5wYXNzZXMucHVzaChBKX1yZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2lmKGUubGVuZ3RoKXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKCJudW1iZXIiPT10eXBlb2YgZVtpXSl7dmFyIGE9dGhpcy50cmFjZXNbZVtpXV0sbz1hLnBhc3NlcyxsPWEucGFzc09mZnNldDtuLnB1c2guYXBwbHkobixzKGwsbCtvLmxlbmd0aCkpfWVsc2UgaWYoZVtpXS5sZW5ndGgpe3ZhciBjPWVbaV0sdT10aGlzLnRyYWNlc1tpXSxmPXUucGFzc2VzLGg9dS5wYXNzT2Zmc2V0O2Y9Zi5tYXAoZnVuY3Rpb24odCxlKXtuW2grZV09Y30pfSh0PXRoaXMuc2NhdHRlcikuZHJhdy5hcHBseSh0LG4pfWVsc2UgdGhpcy5zY2F0dGVyLmRyYXcoKTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuYnVmZmVyJiZ0LmJ1ZmZlci5kZXN0cm95JiZ0LmJ1ZmZlci5kZXN0cm95KCl9KSx0aGlzLnRyYWNlcz1udWxsLHRoaXMucGFzc2VzPW51bGwsdGhpcy5zY2F0dGVyLmRlc3Ryb3koKSx0aGlzfX0seyJhcnJheS1ib3VuZHMiOjU1LCJhcnJheS1yYW5nZSI6NTcsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjIyMywicGFyc2UtcmVjdCI6NDUxLCJwaWNrLWJ5LWFsaWFzIjo0NTcscmFmOjQ3NiwicmVnbC1zY2F0dGVyMmQiOjQ4NH1dLDQ4NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5pZD1WKyssdGhpcy50eXBlPXQsdGhpcy5kYXRhPWV9ZnVuY3Rpb24gZSh0KXtyZXR1cm4iWyIrZnVuY3Rpb24gdChlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107dmFyIHI9ZS5jaGFyQXQoMCksbj1lLmNoYXJBdChlLmxlbmd0aC0xKTtpZigxPGUubGVuZ3RoJiZyPT09biYmKCciJz09PXJ8fCInIj09PXIpKXJldHVyblsnIicrZS5zdWJzdHIoMSxlLmxlbmd0aC0yKS5yZXBsYWNlKC9cXC9nLCJcXFxcIikucmVwbGFjZSgvIi9nLCdcXCInKSsnIiddO2lmKHI9L1xbKGZhbHNlfHRydWV8bnVsbHxcZCt8J1teJ10qJ3wiW14iXSoiKVxdLy5leGVjKGUpKXJldHVybiB0KGUuc3Vic3RyKDAsci5pbmRleCkpLmNvbmNhdCh0KHJbMV0pKS5jb25jYXQodChlLnN1YnN0cihyLmluZGV4K3JbMF0ubGVuZ3RoKSkpO2lmKDE9PT0ocj1lLnNwbGl0KCIuIikpLmxlbmd0aClyZXR1cm5bJyInK2UucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJykrJyInXTtmb3IoZT1bXSxuPTA7bjxyLmxlbmd0aDsrK24pZT1lLmNvbmNhdCh0KHJbbl0pKTtyZXR1cm4gZX0odCkuam9pbigiXVsiKSsiXSJ9ZnVuY3Rpb24gcih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgpOnR9ZnVuY3Rpb24gbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0fWZ1bmN0aW9uIGkodCl7dmFyIGUsaSxhLG8scz10fHx7fTt0PXt9O3ZhciBsPVtdLGM9W10sdT0idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz8xOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGY9ITEsaD1mdW5jdGlvbih0KXt9LHA9ZnVuY3Rpb24oKXt9O2lmKCJzdHJpbmciPT10eXBlb2Ygcz9lPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iocyk6Im9iamVjdCI9PXR5cGVvZiBzJiYoInN0cmluZyI9PXR5cGVvZiBzLm5vZGVOYW1lJiYiZnVuY3Rpb24iPT10eXBlb2Ygcy5hcHBlbmRDaGlsZCYmImZ1bmN0aW9uIj09dHlwZW9mIHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P2U9czoiZnVuY3Rpb24iPT10eXBlb2Ygcy5kcmF3QXJyYXlzfHwiZnVuY3Rpb24iPT10eXBlb2Ygcy5kcmF3RWxlbWVudHM/YT0obz1zKS5jYW52YXM6KCJnbCJpbiBzP289cy5nbDoiY2FudmFzImluIHM/YT1uKHMuY2FudmFzKToiY29udGFpbmVyImluIHMmJihpPW4ocy5jb250YWluZXIpKSwiYXR0cmlidXRlcyJpbiBzJiYodD1zLmF0dHJpYnV0ZXMpLCJleHRlbnNpb25zImluIHMmJihsPXIocy5leHRlbnNpb25zKSksIm9wdGlvbmFsRXh0ZW5zaW9ucyJpbiBzJiYoYz1yKHMub3B0aW9uYWxFeHRlbnNpb25zKSksIm9uRG9uZSJpbiBzJiYoaD1zLm9uRG9uZSksInByb2ZpbGUiaW4gcyYmKGY9ISFzLnByb2ZpbGUpLCJwaXhlbFJhdGlvImluIHMmJih1PStzLnBpeGVsUmF0aW8pKSksZSYmKCJjYW52YXMiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2E9ZTppPWUpLCFvKXtpZighYSl7aWYoIShlPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQ7dCE9PWRvY3VtZW50LmJvZHkmJihlPShuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLnJpZ2h0LW4ubGVmdCxuPW4uYm90dG9tLW4udG9wKSxpLndpZHRoPXIqZSxpLmhlaWdodD1yKm4saihpLnN0eWxlLHt3aWR0aDplKyJweCIsaGVpZ2h0Om4rInB4In0pfXZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBqKGkuc3R5bGUse2JvcmRlcjowLG1hcmdpbjowLHBhZGRpbmc6MCx0b3A6MCxsZWZ0OjB9KSx0LmFwcGVuZENoaWxkKGkpLHQ9PT1kb2N1bWVudC5ib2R5JiYoaS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGoodC5zdHlsZSx7bWFyZ2luOjAscGFkZGluZzowfSkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLG4sITEpLG4oKSx7Y2FudmFzOmksb25EZXN0cm95OmZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbiksdC5yZW1vdmVDaGlsZChpKX19fShpfHxkb2N1bWVudC5ib2R5LDAsdSkpKXJldHVybiBudWxsO2E9ZS5jYW52YXMscD1lLm9uRGVzdHJveX1vPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyKXt0cnl7cmV0dXJuIHQuZ2V0Q29udGV4dChyLGUpfWNhdGNoKHQpe3JldHVybiBudWxsfX1yZXR1cm4gcigid2ViZ2wiKXx8cigiZXhwZXJpbWVudGFsLXdlYmdsIil8fHIoIndlYmdsLWV4cGVyaW1lbnRhbCIpfShhLHQpfXJldHVybiBvP3tnbDpvLGNhbnZhczphLGNvbnRhaW5lcjppLGV4dGVuc2lvbnM6bCxvcHRpb25hbEV4dGVuc2lvbnM6YyxwaXhlbFJhdGlvOnUscHJvZmlsZTpmLG9uRG9uZTpoLG9uRGVzdHJveTpwfToocCgpLGgoIndlYmdsIG5vdCBzdXBwb3J0ZWQsIHRyeSB1cGdyYWRpbmcgeW91ciBicm93c2VyIG9yIGdyYXBoaWNzIGRyaXZlcnMgaHR0cDovL2dldC53ZWJnbC5vcmciKSxudWxsKX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPUFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlLHI7cmV0dXJuIGU9KDY1NTM1PHQpPDw0LGV8PXI9KDI1NTwodD4+Pj1lKSk8PDMsKGV8PXI9KDE1PCh0Pj4+PXIpKTw8Mil8KHI9KDM8KHQ+Pj49cikpPDwxKXx0Pj4+cj4+MX1mdW5jdGlvbiBzKCl7ZnVuY3Rpb24gdCh0KXt0Ontmb3IodmFyIGU9MTY7MjY4NDM1NDU2Pj1lO2UqPTE2KWlmKHQ8PWUpe3Q9ZTticmVhayB0fXQ9MH1yZXR1cm4gMDwoZT1yW28odCk+PjJdKS5sZW5ndGg/ZS5wb3AoKTpuZXcgQXJyYXlCdWZmZXIodCl9ZnVuY3Rpb24gZSh0KXtyW28odC5ieXRlTGVuZ3RoKT4+Ml0ucHVzaCh0KX12YXIgcj1hKDgsZnVuY3Rpb24oKXtyZXR1cm5bXX0pO3JldHVybnthbGxvYzp0LGZyZWU6ZSxhbGxvY1R5cGU6ZnVuY3Rpb24oZSxyKXt2YXIgbj1udWxsO3N3aXRjaChlKXtjYXNlIDUxMjA6bj1uZXcgSW50OEFycmF5KHQociksMCxyKTticmVhaztjYXNlIDUxMjE6bj1uZXcgVWludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIyOm49bmV3IEludDE2QXJyYXkodCgyKnIpLDAscik7YnJlYWs7Y2FzZSA1MTIzOm49bmV3IFVpbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNDpuPW5ldyBJbnQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNTpuPW5ldyBVaW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjY6bj1uZXcgRmxvYXQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIG4ubGVuZ3RoIT09cj9uLnN1YmFycmF5KDAscik6bn0sZnJlZVR5cGU6ZnVuY3Rpb24odCl7ZSh0LmJ1ZmZlcil9fX1mdW5jdGlvbiBsKHQpe3JldHVybiEhdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQuc2hhcGUpJiZBcnJheS5pc0FycmF5KHQuc3RyaWRlKSYmIm51bWJlciI9PXR5cGVvZiB0Lm9mZnNldCYmdC5zaGFwZS5sZW5ndGg9PT10LnN0cmlkZS5sZW5ndGgmJihBcnJheS5pc0FycmF5KHQuZGF0YSl8fFcodC5kYXRhKSl9ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxlOysrbylmb3IodmFyIHM9dFtvXSxsPTA7bDxyOysrbClmb3IodmFyIGM9c1tsXSx1PTA7dTxuOysrdSlpW2ErK109Y1t1XX1mdW5jdGlvbiB1KHQpe3JldHVybiAwfCRbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT1lW3JdfWZ1bmN0aW9uIGgodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTAsbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7YzxuOysrYyl0W3MrK109ZVtpKmwrYSpjK29dfWZ1bmN0aW9uIHAodCxlLHIsbil7ZnVuY3Rpb24gaShlKXt0aGlzLmlkPWMrKyx0aGlzLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHRoaXMudHlwZT1lLHRoaXMudXNhZ2U9MzUwNDQsdGhpcy5ieXRlTGVuZ3RoPTAsdGhpcy5kaW1lbnNpb249MSx0aGlzLmR0eXBlPTUxMjEsdGhpcy5wZXJzaXN0ZW50RGF0YT1udWxsLHIucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIGEoZSxyLG4pe2UuYnl0ZUxlbmd0aD1yLmJ5dGVMZW5ndGgsdC5idWZmZXJEYXRhKGUudHlwZSxyLG4pfWZ1bmN0aW9uIG8odCxlLHIsbixpLG8pe2lmKHQudXNhZ2U9cixBcnJheS5pc0FycmF5KGUpKXtpZih0LmR0eXBlPW58fDUxMjYsMDxlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKXtpPXR0KGUpO2Zvcih2YXIgcz1uPTE7czxpLmxlbmd0aDsrK3Mpbio9aVtzXTt0LmRpbWVuc2lvbj1uLGEodCxlPVEoZSxpLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOkcuZnJlZVR5cGUoZSl9ZWxzZSJudW1iZXIiPT10eXBlb2YgZVswXT8odC5kaW1lbnNpb249aSxmKGk9Ry5hbGxvY1R5cGUodC5kdHlwZSxlLmxlbmd0aCksZSksYSh0LGksciksbz90LnBlcnNpc3RlbnREYXRhPWk6Ry5mcmVlVHlwZShpKSk6VyhlWzBdKSYmKHQuZGltZW5zaW9uPWVbMF0ubGVuZ3RoLHQuZHR5cGU9bnx8dShlWzBdKXx8NTEyNixhKHQsZT1RKGUsW2UubGVuZ3RoLGVbMF0ubGVuZ3RoXSx0LmR0eXBlKSxyKSxvP3QucGVyc2lzdGVudERhdGE9ZTpHLmZyZWVUeXBlKGUpKX1lbHNlIGlmKFcoZSkpdC5kdHlwZT1ufHx1KGUpLHQuZGltZW5zaW9uPWksYSh0LGUsciksbyYmKHQucGVyc2lzdGVudERhdGE9bmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKSk7ZWxzZSBpZihsKGUpKXtpPWUuc2hhcGU7dmFyIGM9ZS5zdHJpZGUscD0ocz1lLm9mZnNldCwwKSxkPTAsZz0wLHY9MDsxPT09aS5sZW5ndGg/KHA9aVswXSxkPTEsZz1jWzBdLHY9MCk6Mj09PWkubGVuZ3RoJiYocD1pWzBdLGQ9aVsxXSxnPWNbMF0sdj1jWzFdKSx0LmR0eXBlPW58fHUoZS5kYXRhKXx8NTEyNix0LmRpbWVuc2lvbj1kLGgoaT1HLmFsbG9jVHlwZSh0LmR0eXBlLHAqZCksZS5kYXRhLHAsZCxnLHYscyksYSh0LGksciksbz90LnBlcnNpc3RlbnREYXRhPWk6Ry5mcmVlVHlwZShpKX19ZnVuY3Rpb24gcyhyKXtlLmJ1ZmZlckNvdW50LS07Zm9yKHZhciBpPTA7aTxuLnN0YXRlLmxlbmd0aDsrK2kpe3ZhciBhPW4uc3RhdGVbaV07YS5idWZmZXI9PT1yJiYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSksYS5idWZmZXI9bnVsbCl9dC5kZWxldGVCdWZmZXIoci5idWZmZXIpLHIuYnVmZmVyPW51bGwsZGVsZXRlIHBbci5pZF19dmFyIGM9MCxwPXt9O2kucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0LmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuYnVmZmVyKX0saS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ModGhpcyl9O3ZhciBkPVtdO3JldHVybiByLnByb2ZpbGUmJihlLmdldFRvdGFsQnVmZmVyU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKHApLmZvckVhY2goZnVuY3Rpb24oZSl7dCs9cFtlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGU6ZnVuY3Rpb24obixhLGMsZCl7ZnVuY3Rpb24gZyhlKXt2YXIgbj0zNTA0NCxpPW51bGwsYT0wLHM9MCxjPTE7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fFcoZSl8fGwoZSk/aT1lOiJudW1iZXIiPT10eXBlb2YgZT9hPTB8ZTplJiYoImRhdGEiaW4gZSYmKGk9ZS5kYXRhKSwidXNhZ2UiaW4gZSYmKG49S1tlLnVzYWdlXSksInR5cGUiaW4gZSYmKHM9SltlLnR5cGVdKSwiZGltZW5zaW9uImluIGUmJihjPTB8ZS5kaW1lbnNpb24pLCJsZW5ndGgiaW4gZSYmKGE9MHxlLmxlbmd0aCkpLHYuYmluZCgpLGk/byh2LGksbixzLGMsZCk6KGEmJnQuYnVmZmVyRGF0YSh2LnR5cGUsYSxuKSx2LmR0eXBlPXN8fDUxMjEsdi51c2FnZT1uLHYuZGltZW5zaW9uPWMsdi5ieXRlTGVuZ3RoPWEpLHIucHJvZmlsZSYmKHYuc3RhdHMuc2l6ZT12LmJ5dGVMZW5ndGgqZXRbdi5kdHlwZV0pLGd9ZS5idWZmZXJDb3VudCsrO3ZhciB2PW5ldyBpKGEpO3JldHVybiBwW3YuaWRdPXYsY3x8ZyhuKSxnLl9yZWdsVHlwZT0iYnVmZmVyIixnLl9idWZmZXI9dixnLnN1YmRhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpPTB8KHJ8fDApO2lmKHYuYmluZCgpLFcoZSkpdC5idWZmZXJTdWJEYXRhKHYudHlwZSxpLGUpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7aWYoMDxlLmxlbmd0aClpZigibnVtYmVyIj09dHlwZW9mIGVbMF0pe3ZhciBhPUcuYWxsb2NUeXBlKHYuZHR5cGUsZS5sZW5ndGgpO2YoYSxlKSx0LmJ1ZmZlclN1YkRhdGEodi50eXBlLGksYSksRy5mcmVlVHlwZShhKX1lbHNlKEFycmF5LmlzQXJyYXkoZVswXSl8fFcoZVswXSkpJiYobj10dChlKSxhPVEoZSxuLHYuZHR5cGUpLHQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxhKSxHLmZyZWVUeXBlKGEpKX1lbHNlIGlmKGwoZSkpe249ZS5zaGFwZTt2YXIgbz1lLnN0cmlkZSxzPWE9MCxjPTAscD0wOzE9PT1uLmxlbmd0aD8oYT1uWzBdLHM9MSxjPW9bMF0scD0wKToyPT09bi5sZW5ndGgmJihhPW5bMF0scz1uWzFdLGM9b1swXSxwPW9bMV0pLG49QXJyYXkuaXNBcnJheShlLmRhdGEpP3YuZHR5cGU6dShlLmRhdGEpLGgobj1HLmFsbG9jVHlwZShuLGEqcyksZS5kYXRhLGEscyxjLHAsZS5vZmZzZXQpLHQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxuKSxHLmZyZWVUeXBlKG4pfXJldHVybiBnfSxyLnByb2ZpbGUmJihnLnN0YXRzPXYuc3RhdHMpLGcuZGVzdHJveT1mdW5jdGlvbigpe3Modil9LGd9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0LGUpe3ZhciByPWQucG9wKCk7cmV0dXJuIHJ8fChyPW5ldyBpKHQpKSxyLmJpbmQoKSxvKHIsZSwzNTA0MCwwLDEsITEpLHJ9LGRlc3Ryb3lTdHJlYW06ZnVuY3Rpb24odCl7ZC5wdXNoKHQpfSxjbGVhcjpmdW5jdGlvbigpe1gocCkuZm9yRWFjaChzKSxkLmZvckVhY2gocyl9LGdldEJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fYnVmZmVyIGluc3RhbmNlb2YgaT90Ll9idWZmZXI6bnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe1gocCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHQuYmluZEJ1ZmZlcihlLnR5cGUsZS5idWZmZXIpLHQuYnVmZmVyRGF0YShlLnR5cGUsZS5wZXJzaXN0ZW50RGF0YXx8ZS5ieXRlTGVuZ3RoLGUudXNhZ2UpfSl9LF9pbml0QnVmZmVyOm99fWZ1bmN0aW9uIGQodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt0aGlzLmlkPWMrKyxzW3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXI9dCx0aGlzLnByaW1UeXBlPTQsdGhpcy50eXBlPXRoaXMudmVydENvdW50PTB9ZnVuY3Rpb24gYShuLGksYSxvLHMsYyx1KXtpZihuLmJ1ZmZlci5iaW5kKCksaSl7dmFyIGY9dTt1fHxXKGkpJiYoIWwoaSl8fFcoaS5kYXRhKSl8fChmPWUub2VzX2VsZW1lbnRfaW5kZXhfdWludD81MTI1OjUxMjMpLHIuX2luaXRCdWZmZXIobi5idWZmZXIsaSxhLGYsMyl9ZWxzZSB0LmJ1ZmZlckRhdGEoMzQ5NjMsYyxhKSxuLmJ1ZmZlci5kdHlwZT1mfHw1MTIxLG4uYnVmZmVyLnVzYWdlPWEsbi5idWZmZXIuZGltZW5zaW9uPTMsbi5idWZmZXIuYnl0ZUxlbmd0aD1jO2lmKGY9dSwhdSl7c3dpdGNoKG4uYnVmZmVyLmR0eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIwOmY9NTEyMTticmVhaztjYXNlIDUxMjM6Y2FzZSA1MTIyOmY9NTEyMzticmVhaztjYXNlIDUxMjU6Y2FzZSA1MTI0OmY9NTEyNX1uLmJ1ZmZlci5kdHlwZT1mfW4udHlwZT1mLDA+KGk9cykmJihpPW4uYnVmZmVyLmJ5dGVMZW5ndGgsNTEyMz09PWY/aT4+PTE6NTEyNT09PWYmJihpPj49MikpLG4udmVydENvdW50PWksaT1vLDA+byYmKGk9NCwxPT09KG89bi5idWZmZXIuZGltZW5zaW9uKSYmKGk9MCksMj09PW8mJihpPTEpLDM9PT1vJiYoaT00KSksbi5wcmltVHlwZT1pfWZ1bmN0aW9uIG8odCl7bi5lbGVtZW50c0NvdW50LS0sZGVsZXRlIHNbdC5pZF0sdC5idWZmZXIuZGVzdHJveSgpLHQuYnVmZmVyPW51bGx9dmFyIHM9e30sYz0wLHU9e3VpbnQ4OjUxMjEsdWludDE2OjUxMjN9O2Uub2VzX2VsZW1lbnRfaW5kZXhfdWludCYmKHUudWludDMyPTUxMjUpLGkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlci5iaW5kKCl9O3ZhciBmPVtdO3JldHVybntjcmVhdGU6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBzKHQpe2lmKHQpaWYoIm51bWJlciI9PXR5cGVvZiB0KWModCksZi5wcmltVHlwZT00LGYudmVydENvdW50PTB8dCxmLnR5cGU9NTEyMTtlbHNle3ZhciBlPW51bGwscj0zNTA0NCxuPS0xLGk9LTEsbz0wLGg9MDtBcnJheS5pc0FycmF5KHQpfHxXKHQpfHxsKHQpP2U9dDooImRhdGEiaW4gdCYmKGU9dC5kYXRhKSwidXNhZ2UiaW4gdCYmKHI9S1t0LnVzYWdlXSksInByaW1pdGl2ZSJpbiB0JiYobj1ydFt0LnByaW1pdGl2ZV0pLCJjb3VudCJpbiB0JiYoaT0wfHQuY291bnQpLCJ0eXBlImluIHQmJihoPXVbdC50eXBlXSksImxlbmd0aCJpbiB0P289MHx0Lmxlbmd0aDoobz1pLDUxMjM9PT1ofHw1MTIyPT09aD9vKj0yOjUxMjUhPT1oJiY1MTI0IT09aHx8KG8qPTQpKSksYShmLGUscixuLGksbyxoKX1lbHNlIGMoKSxmLnByaW1UeXBlPTQsZi52ZXJ0Q291bnQ9MCxmLnR5cGU9NTEyMTtyZXR1cm4gc312YXIgYz1yLmNyZWF0ZShudWxsLDM0OTYzLCEwKSxmPW5ldyBpKGMuX2J1ZmZlcik7cmV0dXJuIG4uZWxlbWVudHNDb3VudCsrLHModCkscy5fcmVnbFR5cGU9ImVsZW1lbnRzIixzLl9lbGVtZW50cz1mLHMuc3ViZGF0YT1mdW5jdGlvbih0LGUpe3JldHVybiBjLnN1YmRhdGEodCxlKSxzfSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvKGYpfSxzfSxjcmVhdGVTdHJlYW06ZnVuY3Rpb24odCl7dmFyIGU9Zi5wb3AoKTtyZXR1cm4gZXx8KGU9bmV3IGkoci5jcmVhdGUobnVsbCwzNDk2MywhMCwhMSkuX2J1ZmZlcikpLGEoZSx0LDM1MDQwLC0xLC0xLDAsMCksZX0sZGVzdHJveVN0cmVhbTpmdW5jdGlvbih0KXtmLnB1c2godCl9LGdldEVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll9lbGVtZW50cyBpbnN0YW5jZW9mIGk/dC5fZWxlbWVudHM6bnVsbH0sY2xlYXI6ZnVuY3Rpb24oKXtYKHMpLmZvckVhY2gobyl9fX1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1HLmFsbG9jVHlwZSg1MTIzLHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpaWYoaXNOYU4odFtyXSkpZVtyXT02NTUzNTtlbHNlIGlmKDEvMD09PXRbcl0pZVtyXT0zMTc0NDtlbHNlIGlmKC0xLzA9PT10W3JdKWVbcl09NjQ1MTI7ZWxzZXtudFswXT10W3JdO3ZhciBuPShhPWl0WzBdKT4+PjMxPDwxNSxpPShhPDwxPj4+MjQpLTEyNyxhPWE+PjEzJjEwMjM7ZVtyXT0tMjQ+aT9uOi0xND5pP24rKGErMTAyND4+LTE0LWkpOjE1PGk/biszMTc0NDpuKyhpKzE1PDwxMCkrYX1yZXR1cm4gZX1mdW5jdGlvbiB2KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxXKHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIltvYmplY3QgIit0KyJdIn1mdW5jdGlvbiB5KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYoMD09PXQubGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIHRbMF0pfWZ1bmN0aW9uIHgodCl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RofHwhdih0WzBdKSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF8odCl7aWYoIXQpcmV0dXJuITE7dmFyIGU9Yih0KTtyZXR1cm4gMDw9cHQuaW5kZXhPZihlKXx8KHkodCl8fHgodCl8fGwodCkpfWZ1bmN0aW9uIHcodCxlKXszNjE5Mz09PXQudHlwZT8odC5kYXRhPWcoZSksRy5mcmVlVHlwZShlKSk6dC5kYXRhPWV9ZnVuY3Rpb24gayh0LGUscixuLGksYSl7aWYodD0idW5kZWZpbmVkIiE9dHlwZW9mIGd0W3RdP2d0W3RdOnN0W3RdKmR0W2VdLGEmJih0Kj02KSxpKXtmb3Iobj0wOzE8PXI7KW4rPXQqcipyLHIvPTI7cmV0dXJuIG59cmV0dXJuIHQqcipufWZ1bmN0aW9uIFQodCxlLHIsbixpLGEsbyl7ZnVuY3Rpb24gcygpe3RoaXMuZm9ybWF0PXRoaXMuaW50ZXJuYWxmb3JtYXQ9NjQwOCx0aGlzLnR5cGU9NTEyMSx0aGlzLmZsaXBZPXRoaXMucHJlbXVsdGlwbHlBbHBoYT10aGlzLmNvbXByZXNzZWQ9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MSx0aGlzLmNvbG9yU3BhY2U9Mzc0NDQsdGhpcy5jaGFubmVscz10aGlzLmhlaWdodD10aGlzLndpZHRoPTB9ZnVuY3Rpb24gYyh0LGUpe3QuaW50ZXJuYWxmb3JtYXQ9ZS5pbnRlcm5hbGZvcm1hdCx0LmZvcm1hdD1lLmZvcm1hdCx0LnR5cGU9ZS50eXBlLHQuY29tcHJlc3NlZD1lLmNvbXByZXNzZWQsdC5wcmVtdWx0aXBseUFscGhhPWUucHJlbXVsdGlwbHlBbHBoYSx0LmZsaXBZPWUuZmxpcFksdC51bnBhY2tBbGlnbm1lbnQ9ZS51bnBhY2tBbGlnbm1lbnQsdC5jb2xvclNwYWNlPWUuY29sb3JTcGFjZSx0LndpZHRoPWUud2lkdGgsdC5oZWlnaHQ9ZS5oZWlnaHQsdC5jaGFubmVscz1lLmNoYW5uZWxzfWZ1bmN0aW9uIHUodCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmUpeyJwcmVtdWx0aXBseUFscGhhImluIGUmJih0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhKSwiZmxpcFkiaW4gZSYmKHQuZmxpcFk9ZS5mbGlwWSksImFsaWdubWVudCJpbiBlJiYodC51bnBhY2tBbGlnbm1lbnQ9ZS5hbGlnbm1lbnQpLCJjb2xvclNwYWNlImluIGUmJih0LmNvbG9yU3BhY2U9cVtlLmNvbG9yU3BhY2VdKSwidHlwZSJpbiBlJiYodC50eXBlPUhbZS50eXBlXSk7dmFyIHI9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5jaGFubmVscyxhPSExOyJzaGFwZSJpbiBlPyhyPWUuc2hhcGVbMF0sbj1lLnNoYXBlWzFdLDM9PT1lLnNoYXBlLmxlbmd0aCYmKGk9ZS5zaGFwZVsyXSxhPSEwKSk6KCJyYWRpdXMiaW4gZSYmKHI9bj1lLnJhZGl1cyksIndpZHRoImluIGUmJihyPWUud2lkdGgpLCJoZWlnaHQiaW4gZSYmKG49ZS5oZWlnaHQpLCJjaGFubmVscyJpbiBlJiYoaT1lLmNoYW5uZWxzLGE9ITApKSx0LndpZHRoPTB8cix0LmhlaWdodD0wfG4sdC5jaGFubmVscz0wfGkscj0hMSwiZm9ybWF0ImluIGUmJihyPWUuZm9ybWF0LG49dC5pbnRlcm5hbGZvcm1hdD1ZW3JdLHQuZm9ybWF0PXB0W25dLHIgaW4gSCYmISgidHlwZSJpbiBlKSYmKHQudHlwZT1IW3JdKSxyIGluIEomJih0LmNvbXByZXNzZWQ9ITApLHI9ITApLCFhJiZyP3QuY2hhbm5lbHM9c3RbdC5mb3JtYXRdOmEmJiFyJiZ0LmNoYW5uZWxzIT09b3RbdC5mb3JtYXRdJiYodC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFt0LmNoYW5uZWxzXSl9fWZ1bmN0aW9uIGYoZSl7dC5waXhlbFN0b3JlaSgzNzQ0MCxlLmZsaXBZKSx0LnBpeGVsU3RvcmVpKDM3NDQxLGUucHJlbXVsdGlwbHlBbHBoYSksdC5waXhlbFN0b3JlaSgzNzQ0MyxlLmNvbG9yU3BhY2UpLHQucGl4ZWxTdG9yZWkoMzMxNyxlLnVucGFja0FsaWdubWVudCl9ZnVuY3Rpb24gaCgpe3MuY2FsbCh0aGlzKSx0aGlzLnlPZmZzZXQ9dGhpcy54T2Zmc2V0PTAsdGhpcy5kYXRhPW51bGwsdGhpcy5uZWVkc0ZyZWU9ITEsdGhpcy5lbGVtZW50PW51bGwsdGhpcy5uZWVkc0NvcHk9ITF9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPW51bGw7aWYoXyhlKT9yPWU6ZSYmKHUodCxlKSwieCJpbiBlJiYodC54T2Zmc2V0PTB8ZS54KSwieSJpbiBlJiYodC55T2Zmc2V0PTB8ZS55KSxfKGUuZGF0YSkmJihyPWUuZGF0YSkpLGUuY29weSl7dmFyIG49aS52aWV3cG9ydFdpZHRoLGE9aS52aWV3cG9ydEhlaWdodDt0LndpZHRoPXQud2lkdGh8fG4tdC54T2Zmc2V0LHQuaGVpZ2h0PXQuaGVpZ2h0fHxhLXQueU9mZnNldCx0Lm5lZWRzQ29weT0hMH1lbHNlIGlmKHIpe2lmKFcocikpdC5jaGFubmVscz10LmNoYW5uZWxzfHw0LHQuZGF0YT1yLCJ0eXBlImluIGV8fDUxMjEhPT10LnR5cGV8fCh0LnR5cGU9MHwkW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKV0pO2Vsc2UgaWYoeShyKSl7c3dpdGNoKHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCxhPShuPXIpLmxlbmd0aCx0LnR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjM6Y2FzZSA1MTI1OmNhc2UgNTEyNjooYT1HLmFsbG9jVHlwZSh0LnR5cGUsYSkpLnNldChuKSx0LmRhdGE9YTticmVhaztjYXNlIDM2MTkzOnQuZGF0YT1nKG4pfXQuYWxpZ25tZW50PTEsdC5uZWVkc0ZyZWU9ITB9ZWxzZSBpZihsKHIpKXtuPXIuZGF0YSxBcnJheS5pc0FycmF5KG4pfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8JFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobildKTthPXIuc2hhcGU7dmFyIG8scyxjLGYsaD1yLnN0cmlkZTszPT09YS5sZW5ndGg/KGM9YVsyXSxmPWhbMl0pOmY9Yz0xLG89YVswXSxzPWFbMV0sYT1oWzBdLGg9aFsxXSx0LmFsaWdubWVudD0xLHQud2lkdGg9byx0LmhlaWdodD1zLHQuY2hhbm5lbHM9Yyx0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W2NdLHQubmVlZHNGcmVlPSEwLG89ZixyPXIub2Zmc2V0LGM9dC53aWR0aCxmPXQuaGVpZ2h0LHM9dC5jaGFubmVscztmb3IodmFyIHA9Ry5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYypmKnMpLGQ9MCxtPTA7bTxmOysrbSlmb3IodmFyIGs9MDtrPGM7KytrKWZvcih2YXIgVD0wO1Q8czsrK1QpcFtkKytdPW5bYSprK2gqbStvKlQrcl07dyh0LHApfWVsc2UgaWYoYihyKT09PWx0fHxiKHIpPT09Y3QpYihyKT09PWx0P3QuZWxlbWVudD1yOnQuZWxlbWVudD1yLmNhbnZhcyx0LndpZHRoPXQuZWxlbWVudC53aWR0aCx0LmhlaWdodD10LmVsZW1lbnQuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT11dCl0LmVsZW1lbnQ9cix0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PWZ0KXQuZWxlbWVudD1yLHQud2lkdGg9ci5uYXR1cmFsV2lkdGgsdC5oZWlnaHQ9ci5uYXR1cmFsSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1odCl0LmVsZW1lbnQ9cix0LndpZHRoPXIudmlkZW9XaWR0aCx0LmhlaWdodD1yLnZpZGVvSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKHgocikpe2ZvcihuPXQud2lkdGh8fHJbMF0ubGVuZ3RoLGE9dC5oZWlnaHR8fHIubGVuZ3RoLGg9dC5jaGFubmVscyxoPXYoclswXVswXSk/aHx8clswXVswXS5sZW5ndGg6aHx8MSxvPVouc2hhcGUociksYz0xLGY9MDtmPG8ubGVuZ3RoOysrZiljKj1vW2ZdO2M9Ry5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYyksWi5mbGF0dGVuKHIsbywiIixjKSx3KHQsYyksdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW4sdC5oZWlnaHQ9YSx0LmNoYW5uZWxzPWgsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFtoXSx0Lm5lZWRzRnJlZT0hMH19ZWxzZSB0LndpZHRoPXQud2lkdGh8fDEsdC5oZWlnaHQ9dC5oZWlnaHR8fDEsdC5jaGFubmVscz10LmNoYW5uZWxzfHw0fWZ1bmN0aW9uIGQoZSxyLGksYSxvKXt2YXIgcz1lLmVsZW1lbnQsbD1lLmRhdGEsYz1lLmludGVybmFsZm9ybWF0LHU9ZS5mb3JtYXQsaD1lLnR5cGUscD1lLndpZHRoLGQ9ZS5oZWlnaHQ7ZihlKSxzP3QudGV4U3ViSW1hZ2UyRChyLG8saSxhLHUsaCxzKTplLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChyLG8saSxhLGMscCxkLGwpOmUubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4U3ViSW1hZ2UyRChyLG8saSxhLGUueE9mZnNldCxlLnlPZmZzZXQscCxkKSk6dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEscCxkLHUsaCxsKX1mdW5jdGlvbiBtKCl7cmV0dXJuIGR0LnBvcCgpfHxuZXcgaH1mdW5jdGlvbiBUKHQpe3QubmVlZHNGcmVlJiZHLmZyZWVUeXBlKHQuZGF0YSksaC5jYWxsKHQpLGR0LnB1c2godCl9ZnVuY3Rpb24gQSgpe3MuY2FsbCh0aGlzKSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTIsdGhpcy5taXBtYXNrPTAsdGhpcy5pbWFnZXM9QXJyYXkoMTYpfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPXQuaW1hZ2VzWzBdPW0oKTt0Lm1pcG1hc2s9MSxuLndpZHRoPXQud2lkdGg9ZSxuLmhlaWdodD10LmhlaWdodD1yLG4uY2hhbm5lbHM9dC5jaGFubmVscz00fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1udWxsO2lmKF8oZSkpYyhyPXQuaW1hZ2VzWzBdPW0oKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7ZWxzZSBpZih1KHQsZSksQXJyYXkuaXNBcnJheShlLm1pcG1hcCkpZm9yKHZhciBuPWUubWlwbWFwLGk9MDtpPG4ubGVuZ3RoOysraSljKHI9dC5pbWFnZXNbaV09bSgpLHQpLHIud2lkdGg+Pj1pLHIuaGVpZ2h0Pj49aSxwKHIsbltpXSksdC5taXBtYXNrfD0xPDxpO2Vsc2UgYyhyPXQuaW1hZ2VzWzBdPW0oKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7Yyh0LHQuaW1hZ2VzWzBdKX1mdW5jdGlvbiBFKGUscil7Zm9yKHZhciBpPWUuaW1hZ2VzLGE9MDthPGkubGVuZ3RoJiZpW2FdOysrYSl7dmFyIG89aVthXSxzPXIsbD1hLGM9by5lbGVtZW50LHU9by5kYXRhLGg9by5pbnRlcm5hbGZvcm1hdCxwPW8uZm9ybWF0LGQ9by50eXBlLGc9by53aWR0aCx2PW8uaGVpZ2h0LG09by5jaGFubmVscztmKG8pLGM/dC50ZXhJbWFnZTJEKHMsbCxwLHAsZCxjKTpvLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4SW1hZ2UyRChzLGwsaCxnLHYsMCx1KTpvLm5lZWRzQ29weT8obigpLHQuY29weVRleEltYWdlMkQocyxsLHAsby54T2Zmc2V0LG8ueU9mZnNldCxnLHYsMCkpOigobz0hdSkmJih1PUcuemVyby5hbGxvY1R5cGUoZCxnKnYqbSkpLHQudGV4SW1hZ2UyRChzLGwscCxnLHYsMCxwLGQsdSksbyYmdSYmRy56ZXJvLmZyZWVUeXBlKHUpKX19ZnVuY3Rpb24gQygpe3ZhciB0PWd0LnBvcCgpfHxuZXcgQTtzLmNhbGwodCk7Zm9yKHZhciBlPXQubWlwbWFzaz0wOzE2PmU7KytlKXQuaW1hZ2VzW2VdPW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gTCh0KXtmb3IodmFyIGU9dC5pbWFnZXMscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0mJlQoZVtyXSksZVtyXT1udWxsO2d0LnB1c2godCl9ZnVuY3Rpb24geigpe3RoaXMubWFnRmlsdGVyPXRoaXMubWluRmlsdGVyPTk3MjgsdGhpcy53cmFwVD10aGlzLndyYXBTPTMzMDcxLHRoaXMuYW5pc290cm9waWM9MSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTJ9ZnVuY3Rpb24gTyh0LGUpeyJtaW4iaW4gZSYmKHQubWluRmlsdGVyPVVbZS5taW5dLDA8PWF0LmluZGV4T2YodC5taW5GaWx0ZXIpJiYhKCJmYWNlcyJpbiBlKSYmKHQuZ2VuTWlwbWFwcz0hMCkpLCJtYWciaW4gZSYmKHQubWFnRmlsdGVyPVZbZS5tYWddKTt2YXIgcj10LndyYXBTLG49dC53cmFwVDtpZigid3JhcCJpbiBlKXt2YXIgaT1lLndyYXA7InN0cmluZyI9PXR5cGVvZiBpP3I9bj1OW2ldOkFycmF5LmlzQXJyYXkoaSkmJihyPU5baVswXV0sbj1OW2lbMV1dKX1lbHNlIndyYXBTImluIGUmJihyPU5bZS53cmFwU10pLCJ3cmFwVCJpbiBlJiYobj1OW2Uud3JhcFRdKTtpZih0LndyYXBTPXIsdC53cmFwVD1uLCJhbmlzb3Ryb3BpYyJpbiBlJiYodC5hbmlzb3Ryb3BpYz1lLmFuaXNvdHJvcGljKSwibWlwbWFwImluIGUpe3N3aXRjaChyPSExLHR5cGVvZiBlLm1pcG1hcCl7Y2FzZSJzdHJpbmciOnQubWlwbWFwSGludD1CW2UubWlwbWFwXSxyPXQuZ2VuTWlwbWFwcz0hMDticmVhaztjYXNlImJvb2xlYW4iOnI9dC5nZW5NaXBtYXBzPWUubWlwbWFwO2JyZWFrO2Nhc2Uib2JqZWN0Ijp0Lmdlbk1pcG1hcHM9ITEscj0hMH0hcnx8Im1pbiJpbiBlfHwodC5taW5GaWx0ZXI9OTk4NCl9fWZ1bmN0aW9uIEkocixuKXt0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxyLm1pbkZpbHRlciksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDAsci5tYWdGaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQyLHIud3JhcFMpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQzLHIud3JhcFQpLGUuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiZ0LnRleFBhcmFtZXRlcmkobiwzNDA0NixyLmFuaXNvdHJvcGljKSxyLmdlbk1pcG1hcHMmJih0LmhpbnQoMzMxNzAsci5taXBtYXBIaW50KSx0LmdlbmVyYXRlTWlwbWFwKG4pKX1mdW5jdGlvbiBEKGUpe3MuY2FsbCh0aGlzKSx0aGlzLm1pcG1hc2s9MCx0aGlzLmludGVybmFsZm9ybWF0PTY0MDgsdGhpcy5pZD12dCsrLHRoaXMucmVmQ291bnQ9MSx0aGlzLnRhcmdldD1lLHRoaXMudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0aGlzLnVuaXQ9LTEsdGhpcy5iaW5kQ291bnQ9MCx0aGlzLnRleEluZm89bmV3IHosby5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gUChlKXt0LmFjdGl2ZVRleHR1cmUoMzM5ODQpLHQuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKX1mdW5jdGlvbiBSKCl7dmFyIGU9eHRbMF07ZT90LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSk6dC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpfWZ1bmN0aW9uIEYoZSl7dmFyIHI9ZS50ZXh0dXJlLG49ZS51bml0LGk9ZS50YXJnZXQ7MDw9biYmKHQuYWN0aXZlVGV4dHVyZSgzMzk4NCtuKSx0LmJpbmRUZXh0dXJlKGksbnVsbCkseHRbbl09bnVsbCksdC5kZWxldGVUZXh0dXJlKHIpLGUudGV4dHVyZT1udWxsLGUucGFyYW1zPW51bGwsZS5waXhlbHM9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIG10W2UuaWRdLGEudGV4dHVyZUNvdW50LS19dmFyIEI9eyJkb24ndCBjYXJlIjo0MzUyLCJkb250IGNhcmUiOjQzNTIsbmljZTo0MzU0LGZhc3Q6NDM1M30sTj17cmVwZWF0OjEwNDk3LGNsYW1wOjMzMDcxLG1pcnJvcjozMzY0OH0sVj17bmVhcmVzdDo5NzI4LGxpbmVhcjo5NzI5fSxVPWooe21pcG1hcDo5OTg3LCJuZWFyZXN0IG1pcG1hcCBuZWFyZXN0Ijo5OTg0LCJsaW5lYXIgbWlwbWFwIG5lYXJlc3QiOjk5ODUsIm5lYXJlc3QgbWlwbWFwIGxpbmVhciI6OTk4NiwibGluZWFyIG1pcG1hcCBsaW5lYXIiOjk5ODd9LFYpLHE9e25vbmU6MCxicm93c2VyOjM3NDQ0fSxIPXt1aW50ODo1MTIxLHJnYmE0OjMyODE5LHJnYjU2NTozMzYzNSwicmdiNSBhMSI6MzI4MjB9LFk9e2FscGhhOjY0MDYsbHVtaW5hbmNlOjY0MDksImx1bWluYW5jZSBhbHBoYSI6NjQxMCxyZ2I6NjQwNyxyZ2JhOjY0MDgscmdiYTQ6MzI4NTQsInJnYjUgYTEiOjMyODU1LHJnYjU2NTozNjE5NH0sSj17fTtlLmV4dF9zcmdiJiYoWS5zcmdiPTM1OTA0LFkuc3JnYmE9MzU5MDYpLGUub2VzX3RleHR1cmVfZmxvYXQmJihILmZsb2F0MzI9SC5mbG9hdD01MTI2KSxlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJihILmZsb2F0MTY9SFsiaGFsZiBmbG9hdCJdPTM2MTkzKSxlLndlYmdsX2RlcHRoX3RleHR1cmUmJihqKFkse2RlcHRoOjY0MDIsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfSksaihILHt1aW50MTY6NTEyMyx1aW50MzI6NTEyNSwiZGVwdGggc3RlbmNpbCI6MzQwNDJ9KSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyYmaihKLHsicmdiIHMzdGMgZHh0MSI6MzM3NzYsInJnYmEgczN0YyBkeHQxIjozMzc3NywicmdiYSBzM3RjIGR4dDMiOjMzNzc4LCJyZ2JhIHMzdGMgZHh0NSI6MzM3Nzl9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMmJmooSix7InJnYiBhdGMiOjM1OTg2LCJyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYSI6MzU5ODcsInJnYmEgYXRjIGludGVycG9sYXRlZCBhbHBoYSI6MzQ3OTh9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyYmaihKLHsicmdiIHB2cnRjIDRicHB2MSI6MzU4NDAsInJnYiBwdnJ0YyAyYnBwdjEiOjM1ODQxLCJyZ2JhIHB2cnRjIDRicHB2MSI6MzU4NDIsInJnYmEgcHZydGMgMmJwcHYxIjozNTg0M30pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEmJihKWyJyZ2IgZXRjMSJdPTM2MTk2KTt2YXIgSz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmdldFBhcmFtZXRlcigzNDQ2NykpO09iamVjdC5rZXlzKEopLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Slt0XTswPD1LLmluZGV4T2YoZSkmJihZW3RdPWUpfSk7dmFyIFE9T2JqZWN0LmtleXMoWSk7ci50ZXh0dXJlRm9ybWF0cz1RO3ZhciB0dD1bXTtPYmplY3Qua2V5cyhZKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3R0W1lbdF1dPXR9KTt2YXIgZXQ9W107T2JqZWN0LmtleXMoSCkuZm9yRWFjaChmdW5jdGlvbih0KXtldFtIW3RdXT10fSk7dmFyIHJ0PVtdO09iamVjdC5rZXlzKFYpLmZvckVhY2goZnVuY3Rpb24odCl7cnRbVlt0XV09dH0pO3ZhciBudD1bXTtPYmplY3Qua2V5cyhVKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe250W1VbdF1dPXR9KTt2YXIgaXQ9W107T2JqZWN0LmtleXMoTikuZm9yRWFjaChmdW5jdGlvbih0KXtpdFtOW3RdXT10fSk7dmFyIHB0PVEucmVkdWNlKGZ1bmN0aW9uKHQsZSl7dmFyIHI9WVtlXTtyZXR1cm4gNjQwOT09PXJ8fDY0MDY9PT1yfHw2NDA5PT09cnx8NjQxMD09PXJ8fDY0MDI9PT1yfHwzNDA0MT09PXI/dFtyXT1yOjMyODU1PT09cnx8MDw9ZS5pbmRleE9mKCJyZ2JhIik/dFtyXT02NDA4OnRbcl09NjQwNyx0fSx7fSksZHQ9W10sZ3Q9W10sdnQ9MCxtdD17fSx5dD1yLm1heFRleHR1cmVVbml0cyx4dD1BcnJheSh5dCkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KTtyZXR1cm4gaihELnByb3RvdHlwZSx7YmluZDpmdW5jdGlvbigpe3RoaXMuYmluZENvdW50Kz0xO3ZhciBlPXRoaXMudW5pdDtpZigwPmUpe2Zvcih2YXIgcj0wO3I8eXQ7KytyKXt2YXIgbj14dFtyXTtpZihuKXtpZigwPG4uYmluZENvdW50KWNvbnRpbnVlO24udW5pdD0tMX14dFtyXT10aGlzLGU9cjticmVha31vLnByb2ZpbGUmJmEubWF4VGV4dHVyZVVuaXRzPGUrMSYmKGEubWF4VGV4dHVyZVVuaXRzPWUrMSksdGhpcy51bml0PWUsdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUodGhpcy50YXJnZXQsdGhpcy50ZXh0dXJlKX1yZXR1cm4gZX0sdW5iaW5kOmZ1bmN0aW9uKCl7LS10aGlzLmJpbmRDb3VudH0sZGVjUmVmOmZ1bmN0aW9uKCl7MD49LS10aGlzLnJlZkNvdW50JiZGKHRoaXMpfX0pLG8ucHJvZmlsZSYmKGEuZ2V0VG90YWxUZXh0dXJlU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKG10KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPW10W2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTJEOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWkudGV4SW5mbzt6LmNhbGwocik7dmFyIGE9QygpO3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9NKGEsMHx0LCJudW1iZXIiPT10eXBlb2YgZT8wfGU6MHx0KTp0PyhPKHIsdCksUyhhLHQpKTpNKGEsMSwxKSxyLmdlbk1pcG1hcHMmJihhLm1pcG1hc2s9KGEud2lkdGg8PDEpLTEpLGkubWlwbWFzaz1hLm1pcG1hc2ssYyhpLGEpLGkuaW50ZXJuYWxmb3JtYXQ9YS5pbnRlcm5hbGZvcm1hdCxuLndpZHRoPWEud2lkdGgsbi5oZWlnaHQ9YS5oZWlnaHQsUChpKSxFKGEsMzU1MyksSShyLDM1NTMpLFIoKSxMKGEpLG8ucHJvZmlsZSYmKGkuc3RhdHMuc2l6ZT1rKGkuaW50ZXJuYWxmb3JtYXQsaS50eXBlLGEud2lkdGgsYS5oZWlnaHQsci5nZW5NaXBtYXBzLCExKSksbi5mb3JtYXQ9dHRbaS5pbnRlcm5hbGZvcm1hdF0sbi50eXBlPWV0W2kudHlwZV0sbi5tYWc9cnRbci5tYWdGaWx0ZXJdLG4ubWluPW50W3IubWluRmlsdGVyXSxuLndyYXBTPWl0W3Iud3JhcFNdLG4ud3JhcFQ9aXRbci53cmFwVF0sbn12YXIgaT1uZXcgRCgzNTUzKTtyZXR1cm4gbXRbaS5pZF09aSxhLnRleHR1cmVDb3VudCsrLG4oZSxyKSxuLnN1YmltYWdlPWZ1bmN0aW9uKHQsZSxyLGEpe2V8PTAscnw9MCxhfD0wO3ZhciBvPW0oKTtyZXR1cm4gYyhvLGkpLG8ud2lkdGg9MCxvLmhlaWdodD0wLHAobyx0KSxvLndpZHRoPW8ud2lkdGh8fChpLndpZHRoPj5hKS1lLG8uaGVpZ2h0PW8uaGVpZ2h0fHwoaS5oZWlnaHQ+PmEpLXIsUChpKSxkKG8sMzU1MyxlLHIsYSksUigpLFQobyksbn0sbi5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgYT0wfGUscz0wfHJ8fGE7aWYoYT09PWkud2lkdGgmJnM9PT1pLmhlaWdodClyZXR1cm4gbjtuLndpZHRoPWkud2lkdGg9YSxuLmhlaWdodD1pLmhlaWdodD1zLFAoaSk7Zm9yKHZhciBsLGM9aS5jaGFubmVscyx1PWkudHlwZSxmPTA7aS5taXBtYXNrPj5mOysrZil7dmFyIGg9YT4+ZixwPXM+PmY7aWYoIWh8fCFwKWJyZWFrO2w9Ry56ZXJvLmFsbG9jVHlwZSh1LGgqcCpjKSx0LnRleEltYWdlMkQoMzU1MyxmLGkuZm9ybWF0LGgscCwwLGkuZm9ybWF0LGkudHlwZSxsKSxsJiZHLnplcm8uZnJlZVR5cGUobCl9cmV0dXJuIFIoKSxvLnByb2ZpbGUmJihpLnN0YXRzLnNpemU9ayhpLmludGVybmFsZm9ybWF0LGkudHlwZSxhLHMsITEsITEpKSxufSxuLl9yZWdsVHlwZT0idGV4dHVyZTJkIixuLl90ZXh0dXJlPWksby5wcm9maWxlJiYobi5zdGF0cz1pLnN0YXRzKSxuLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLmRlY1JlZigpfSxufSxjcmVhdGVDdWJlOmZ1bmN0aW9uKGUscixuLGkscyxsKXtmdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgcyxsPWgudGV4SW5mbztmb3Ioei5jYWxsKGwpLHM9MDs2PnM7KytzKWdbc109QygpO2lmKCJudW1iZXIiIT10eXBlb2YgdCYmdCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KWlmKGUpUyhnWzBdLHQpLFMoZ1sxXSxlKSxTKGdbMl0sciksUyhnWzNdLG4pLFMoZ1s0XSxpKSxTKGdbNV0sYSk7ZWxzZSBpZihPKGwsdCksdShoLHQpLCJmYWNlcyJpbiB0KWZvcih0PXQuZmFjZXMscz0wOzY+czsrK3MpYyhnW3NdLGgpLFMoZ1tzXSx0W3NdKTtlbHNlIGZvcihzPTA7Nj5zOysrcylTKGdbc10sdCl9ZWxzZSBmb3IodD0wfHR8fDEscz0wOzY+czsrK3MpTShnW3NdLHQsdCk7Zm9yKGMoaCxnWzBdKSxoLm1pcG1hc2s9bC5nZW5NaXBtYXBzPyhnWzBdLndpZHRoPDwxKS0xOmdbMF0ubWlwbWFzayxoLmludGVybmFsZm9ybWF0PWdbMF0uaW50ZXJuYWxmb3JtYXQsZi53aWR0aD1nWzBdLndpZHRoLGYuaGVpZ2h0PWdbMF0uaGVpZ2h0LFAoaCkscz0wOzY+czsrK3MpRShnW3NdLDM0MDY5K3MpO2ZvcihJKGwsMzQwNjcpLFIoKSxvLnByb2ZpbGUmJihoLnN0YXRzLnNpemU9ayhoLmludGVybmFsZm9ybWF0LGgudHlwZSxmLndpZHRoLGYuaGVpZ2h0LGwuZ2VuTWlwbWFwcywhMCkpLGYuZm9ybWF0PXR0W2guaW50ZXJuYWxmb3JtYXRdLGYudHlwZT1ldFtoLnR5cGVdLGYubWFnPXJ0W2wubWFnRmlsdGVyXSxmLm1pbj1udFtsLm1pbkZpbHRlcl0sZi53cmFwUz1pdFtsLndyYXBTXSxmLndyYXBUPWl0W2wud3JhcFRdLHM9MDs2PnM7KytzKUwoZ1tzXSk7cmV0dXJuIGZ9dmFyIGg9bmV3IEQoMzQwNjcpO210W2guaWRdPWgsYS5jdWJlQ291bnQrKzt2YXIgZz1BcnJheSg2KTtyZXR1cm4gZihlLHIsbixpLHMsbCksZi5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixuLGkpe3J8PTAsbnw9MCxpfD0wO3ZhciBhPW0oKTtyZXR1cm4gYyhhLGgpLGEud2lkdGg9MCxhLmhlaWdodD0wLHAoYSxlKSxhLndpZHRoPWEud2lkdGh8fChoLndpZHRoPj5pKS1yLGEuaGVpZ2h0PWEuaGVpZ2h0fHwoaC5oZWlnaHQ+PmkpLW4sUChoKSxkKGEsMzQwNjkrdCxyLG4saSksUigpLFQoYSksZn0sZi5yZXNpemU9ZnVuY3Rpb24oZSl7aWYoKGV8PTApIT09aC53aWR0aCl7Zi53aWR0aD1oLndpZHRoPWUsZi5oZWlnaHQ9aC5oZWlnaHQ9ZSxQKGgpO2Zvcih2YXIgcj0wOzY+cjsrK3IpZm9yKHZhciBuPTA7aC5taXBtYXNrPj5uOysrbil0LnRleEltYWdlMkQoMzQwNjkrcixuLGguZm9ybWF0LGU+Pm4sZT4+biwwLGguZm9ybWF0LGgudHlwZSxudWxsKTtyZXR1cm4gUigpLG8ucHJvZmlsZSYmKGguc3RhdHMuc2l6ZT1rKGguaW50ZXJuYWxmb3JtYXQsaC50eXBlLGYud2lkdGgsZi5oZWlnaHQsITEsITApKSxmfX0sZi5fcmVnbFR5cGU9InRleHR1cmVDdWJlIixmLl90ZXh0dXJlPWgsby5wcm9maWxlJiYoZi5zdGF0cz1oLnN0YXRzKSxmLmRlc3Ryb3k9ZnVuY3Rpb24oKXtoLmRlY1JlZigpfSxmfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eXQ7KytlKXQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCkseHRbZV09bnVsbDtYKG10KS5mb3JFYWNoKEYpLGEuY3ViZUNvdW50PTAsYS50ZXh0dXJlQ291bnQ9MH0sZ2V0VGV4dHVyZTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eXQ7KytlKXt2YXIgcj14dFtlXTtyJiYoci5iaW5kQ291bnQ9MCxyLnVuaXQ9LTEseHRbZV09bnVsbCl9WChtdCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpO2Zvcih2YXIgcj0wOzMyPnI7KytyKWlmKDAhPShlLm1pcG1hc2smMTw8cikpaWYoMzU1Mz09PWUudGFyZ2V0KXQudGV4SW1hZ2UyRCgzNTUzLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7ZWxzZSBmb3IodmFyIG49MDs2Pm47KytuKXQudGV4SW1hZ2UyRCgzNDA2OStuLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7SShlLnRleEluZm8sZS50YXJnZXQpfSl9fX1mdW5jdGlvbiBBKHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMudGV4dHVyZT1lLHRoaXMucmVuZGVyYnVmZmVyPXI7dmFyIG49dD0wO2U/KHQ9ZS53aWR0aCxuPWUuaGVpZ2h0KTpyJiYodD1yLndpZHRoLG49ci5oZWlnaHQpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1ufWZ1bmN0aW9uIHModCl7dCYmKHQudGV4dHVyZSYmdC50ZXh0dXJlLl90ZXh0dXJlLmRlY1JlZigpLHQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpKX1mdW5jdGlvbiBsKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5fdGV4dHVyZS5yZWZDb3VudCs9MTp0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLnJlZkNvdW50Kz0xKX1mdW5jdGlvbiBjKGUscil7ciYmKHIudGV4dHVyZT90LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLGUsci50YXJnZXQsci50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsMCk6dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCxlLDM2MTYxLHIucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVuZGVyYnVmZmVyKSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT0zNTUzLHI9bnVsbCxuPW51bGwsaT10O3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmKGk9dC5kYXRhLCJ0YXJnZXQiaW4gdCYmKGU9MHx0LnRhcmdldCkpLCJ0ZXh0dXJlMmQiPT09KHQ9aS5fcmVnbFR5cGUpP3I9aToidGV4dHVyZUN1YmUiPT09dD9yPWk6InJlbmRlcmJ1ZmZlciI9PT10JiYobj1pLGU9MzYxNjEpLG5ldyBvKGUscixuKX1mdW5jdGlvbiBmKHQsZSxyLGEscyl7cmV0dXJuIHI/KCh0PW4uY3JlYXRlMkQoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmEsdHlwZTpzfSkpLl90ZXh0dXJlLnJlZkNvdW50PTAsbmV3IG8oMzU1Myx0LG51bGwpKTooKHQ9aS5jcmVhdGUoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmF9KSkuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudD0wLG5ldyBvKDM2MTYxLG51bGwsdCkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQmJih0LnRleHR1cmV8fHQucmVuZGVyYnVmZmVyKX1mdW5jdGlvbiBwKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5yZXNpemUoZSxyKTp0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIucmVzaXplKGUsciksdC53aWR0aD1lLHQuaGVpZ2h0PXIpfWZ1bmN0aW9uIGQoKXt0aGlzLmlkPWsrKyxUW3RoaXMuaWRdPXRoaXMsdGhpcy5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLHRoaXMuY29sb3JBdHRhY2htZW50cz1bXSx0aGlzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5zdGVuY2lsQXR0YWNobWVudD10aGlzLmRlcHRoQXR0YWNobWVudD1udWxsfWZ1bmN0aW9uIGcodCl7dC5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2gocykscyh0LmRlcHRoQXR0YWNobWVudCkscyh0LnN0ZW5jaWxBdHRhY2htZW50KSxzKHQuZGVwdGhTdGVuY2lsQXR0YWNobWVudCl9ZnVuY3Rpb24gdihlKXt0LmRlbGV0ZUZyYW1lYnVmZmVyKGUuZnJhbWVidWZmZXIpLGUuZnJhbWVidWZmZXI9bnVsbCxhLmZyYW1lYnVmZmVyQ291bnQtLSxkZWxldGUgVFtlLmlkXX1mdW5jdGlvbiBtKGUpe3ZhciBuO3QuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUuZnJhbWVidWZmZXIpO3ZhciBpPWUuY29sb3JBdHRhY2htZW50cztmb3Iobj0wO248aS5sZW5ndGg7KytuKWMoMzYwNjQrbixpW25dKTtmb3Iobj1pLmxlbmd0aDtuPHIubWF4Q29sb3JBdHRhY2htZW50czsrK24pdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCtuLDM1NTMsbnVsbCwwKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MTI4LDM1NTMsbnVsbCwwKSxjKDM2MDk2LGUuZGVwdGhBdHRhY2htZW50KSxjKDM2MTI4LGUuc3RlbmNpbEF0dGFjaG1lbnQpLGMoMzMzMDYsZS5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApLHQuaXNDb250ZXh0TG9zdCgpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHgubmV4dD94Lm5leHQuZnJhbWVidWZmZXI6bnVsbCkseC5jdXI9eC5uZXh0LHQuZ2V0RXJyb3IoKX1mdW5jdGlvbiB5KHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciBpLGE9MCxvPTAscz0hMCxjPSEwO2k9bnVsbDt2YXIgcD0hMCxkPSJyZ2JhIix2PSJ1aW50OCIseT0xLHg9bnVsbCx3PW51bGwsaz1udWxsLFQ9ITE7Im51bWJlciI9PXR5cGVvZiB0PyhhPTB8dCxvPTB8ZXx8YSk6dD8oInNoYXBlImluIHQ/KGE9KG89dC5zaGFwZSlbMF0sbz1vWzFdKTooInJhZGl1cyJpbiB0JiYoYT1vPXQucmFkaXVzKSwid2lkdGgiaW4gdCYmKGE9dC53aWR0aCksImhlaWdodCJpbiB0JiYobz10LmhlaWdodCkpLCgiY29sb3IiaW4gdHx8ImNvbG9ycyJpbiB0KSYmKGk9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShpKSksaXx8KCJjb2xvckNvdW50ImluIHQmJih5PTB8dC5jb2xvckNvdW50KSwiY29sb3JUZXh0dXJlImluIHQmJihwPSEhdC5jb2xvclRleHR1cmUsZD0icmdiYTQiKSwiY29sb3JUeXBlImluIHQmJih2PXQuY29sb3JUeXBlLCFwKSYmKCJoYWxmIGZsb2F0Ij09PXZ8fCJmbG9hdDE2Ij09PXY/ZD0icmdiYTE2ZiI6ImZsb2F0IiE9PXYmJiJmbG9hdDMyIiE9PXZ8fChkPSJyZ2JhMzJmIikpLCJjb2xvckZvcm1hdCJpbiB0JiYoZD10LmNvbG9yRm9ybWF0LDA8PWIuaW5kZXhPZihkKT9wPSEwOjA8PV8uaW5kZXhPZihkKSYmKHA9ITEpKSksKCJkZXB0aFRleHR1cmUiaW4gdHx8ImRlcHRoU3RlbmNpbFRleHR1cmUiaW4gdCkmJihUPSEoIXQuZGVwdGhUZXh0dXJlJiYhdC5kZXB0aFN0ZW5jaWxUZXh0dXJlKSksImRlcHRoImluIHQmJigiYm9vbGVhbiI9PXR5cGVvZiB0LmRlcHRoP3M9dC5kZXB0aDooeD10LmRlcHRoLGM9ITEpKSwic3RlbmNpbCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5zdGVuY2lsP2M9dC5zdGVuY2lsOih3PXQuc3RlbmNpbCxzPSExKSksImRlcHRoU3RlbmNpbCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5kZXB0aFN0ZW5jaWw/cz1jPXQuZGVwdGhTdGVuY2lsOihrPXQuZGVwdGhTdGVuY2lsLGM9cz0hMSkpKTphPW89MTt2YXIgQT1udWxsLE09bnVsbCxTPW51bGwsRT1udWxsO2lmKEFycmF5LmlzQXJyYXkoaSkpQT1pLm1hcCh1KTtlbHNlIGlmKGkpQT1bdShpKV07ZWxzZSBmb3IoQT1BcnJheSh5KSxpPTA7aTx5OysraSlBW2ldPWYoYSxvLHAsZCx2KTtmb3IoYT1hfHxBWzBdLndpZHRoLG89b3x8QVswXS5oZWlnaHQseD9NPXUoeCk6cyYmIWMmJihNPWYoYSxvLFQsImRlcHRoIiwidWludDMyIikpLHc/Uz11KHcpOmMmJiFzJiYoUz1mKGEsbywhMSwic3RlbmNpbCIsInVpbnQ4IikpLGs/RT11KGspOiF4JiYhdyYmYyYmcyYmKEU9ZihhLG8sVCwiZGVwdGggc3RlbmNpbCIsImRlcHRoIHN0ZW5jaWwiKSkscz1udWxsLGk9MDtpPEEubGVuZ3RoOysraSlsKEFbaV0pLEFbaV0mJkFbaV0udGV4dHVyZSYmKGM9eXRbQVtpXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0qeHRbQVtpXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVdLG51bGw9PT1zJiYocz1jKSk7cmV0dXJuIGwoTSksbChTKSxsKEUpLGcobiksbi53aWR0aD1hLG4uaGVpZ2h0PW8sbi5jb2xvckF0dGFjaG1lbnRzPUEsbi5kZXB0aEF0dGFjaG1lbnQ9TSxuLnN0ZW5jaWxBdHRhY2htZW50PVMsbi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PUUsci5jb2xvcj1BLm1hcChoKSxyLmRlcHRoPWgoTSksci5zdGVuY2lsPWgoUyksci5kZXB0aFN0ZW5jaWw9aChFKSxyLndpZHRoPW4ud2lkdGgsci5oZWlnaHQ9bi5oZWlnaHQsbShuKSxyfXZhciBuPW5ldyBkO3JldHVybiBhLmZyYW1lYnVmZmVyQ291bnQrKyxyKHQsZSksaihyLHtyZXNpemU6ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLm1heCgwfHQsMSksYT1NYXRoLm1heCgwfGV8fGksMSk7aWYoaT09PW4ud2lkdGgmJmE9PT1uLmhlaWdodClyZXR1cm4gcjtmb3IodmFyIG89bi5jb2xvckF0dGFjaG1lbnRzLHM9MDtzPG8ubGVuZ3RoOysrcylwKG9bc10saSxhKTtyZXR1cm4gcChuLmRlcHRoQXR0YWNobWVudCxpLGEpLHAobi5zdGVuY2lsQXR0YWNobWVudCxpLGEpLHAobi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LGksYSksbi53aWR0aD1yLndpZHRoPWksbi5oZWlnaHQ9ci5oZWlnaHQ9YSxtKG4pLHJ9LF9yZWdsVHlwZToiZnJhbWVidWZmZXIiLF9mcmFtZWJ1ZmZlcjpuLGRlc3Ryb3k6ZnVuY3Rpb24oKXt2KG4pLGcobil9LHVzZTpmdW5jdGlvbih0KXt4LnNldEZCTyh7ZnJhbWVidWZmZXI6cn0sdCl9fSl9dmFyIHg9e2N1cjpudWxsLG5leHQ6bnVsbCxkaXJ0eTohMSxzZXRGQk86bnVsbH0sYj1bInJnYmEiXSxfPVsicmdiYTQiLCJyZ2I1NjUiLCJyZ2I1IGExIl07ZS5leHRfc3JnYiYmXy5wdXNoKCJzcmdiYSIpLGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JiZfLnB1c2goInJnYmExNmYiLCJyZ2IxNmYiKSxlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCYmXy5wdXNoKCJyZ2JhMzJmIik7dmFyIHc9WyJ1aW50OCJdO2Uub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmdy5wdXNoKCJoYWxmIGZsb2F0IiwiZmxvYXQxNiIpLGUub2VzX3RleHR1cmVfZmxvYXQmJncucHVzaCgiZmxvYXQiLCJmbG9hdDMyIik7dmFyIGs9MCxUPXt9O3JldHVybiBqKHgse2dldEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYiZnJhbWVidWZmZXIiPT09dC5fcmVnbFR5cGUmJih0PXQuX2ZyYW1lYnVmZmVyKWluc3RhbmNlb2YgZD90Om51bGx9LGNyZWF0ZTp5LGNyZWF0ZUN1YmU6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgaSxhPXtjb2xvcjpudWxsfSxvPTAscz1udWxsO2k9InJnYmEiO3ZhciBsPSJ1aW50OCIsYz0xO2lmKCJudW1iZXIiPT10eXBlb2YgdD9vPTB8dDp0Pygic2hhcGUiaW4gdD9vPXQuc2hhcGVbMF06KCJyYWRpdXMiaW4gdCYmKG89MHx0LnJhZGl1cyksIndpZHRoImluIHQ/bz0wfHQud2lkdGg6ImhlaWdodCJpbiB0JiYobz0wfHQuaGVpZ2h0KSksKCJjb2xvciJpbiB0fHwiY29sb3JzImluIHQpJiYocz10LmNvbG9yfHx0LmNvbG9ycyxBcnJheS5pc0FycmF5KHMpKSxzfHwoImNvbG9yQ291bnQiaW4gdCYmKGM9MHx0LmNvbG9yQ291bnQpLCJjb2xvclR5cGUiaW4gdCYmKGw9dC5jb2xvclR5cGUpLCJjb2xvckZvcm1hdCJpbiB0JiYoaT10LmNvbG9yRm9ybWF0KSksImRlcHRoImluIHQmJihhLmRlcHRoPXQuZGVwdGgpLCJzdGVuY2lsImluIHQmJihhLnN0ZW5jaWw9dC5zdGVuY2lsKSwiZGVwdGhTdGVuY2lsImluIHQmJihhLmRlcHRoU3RlbmNpbD10LmRlcHRoU3RlbmNpbCkpOm89MSxzKWlmKEFycmF5LmlzQXJyYXkocykpZm9yKHQ9W10saT0wO2k8cy5sZW5ndGg7KytpKXRbaV09c1tpXTtlbHNlIHQ9W3NdO2Vsc2UgZm9yKHQ9QXJyYXkoYykscz17cmFkaXVzOm8sZm9ybWF0OmksdHlwZTpsfSxpPTA7aTxjOysraSl0W2ldPW4uY3JlYXRlQ3ViZShzKTtmb3IoYS5jb2xvcj1BcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7KytpKWM9dFtpXSxvPW98fGMud2lkdGgsYS5jb2xvcltpXT17dGFyZ2V0OjM0MDY5LGRhdGE6dFtpXX07Zm9yKGk9MDs2Pmk7KytpKXtmb3IoYz0wO2M8dC5sZW5ndGg7KytjKWEuY29sb3JbY10udGFyZ2V0PTM0MDY5K2k7MDxpJiYoYS5kZXB0aD1yWzBdLmRlcHRoLGEuc3RlbmNpbD1yWzBdLnN0ZW5jaWwsYS5kZXB0aFN0ZW5jaWw9clswXS5kZXB0aFN0ZW5jaWwpLHJbaV0/cltpXShhKTpyW2ldPXkoYSl9cmV0dXJuIGooZSx7d2lkdGg6byxoZWlnaHQ6byxjb2xvcjp0fSl9dmFyIHI9QXJyYXkoNik7cmV0dXJuIGUodCksaihlLHtmYWNlczpyLHJlc2l6ZTpmdW5jdGlvbih0KXt2YXIgbj0wfHQ7aWYobj09PWUud2lkdGgpcmV0dXJuIGU7dmFyIGk9ZS5jb2xvcjtmb3IodD0wO3Q8aS5sZW5ndGg7Kyt0KWlbdF0ucmVzaXplKG4pO2Zvcih0PTA7Nj50OysrdClyW3RdLnJlc2l6ZShuKTtyZXR1cm4gZS53aWR0aD1lLmhlaWdodD1uLGV9LF9yZWdsVHlwZToiZnJhbWVidWZmZXJDdWJlIixkZXN0cm95OmZ1bmN0aW9uKCl7ci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9fSl9LGNsZWFyOmZ1bmN0aW9uKCl7WChUKS5mb3JFYWNoKHYpfSxyZXN0b3JlOmZ1bmN0aW9uKCl7eC5jdXI9bnVsbCx4Lm5leHQ9bnVsbCx4LmRpcnR5PSEwLFgoVCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmZyYW1lYnVmZmVyPXQuY3JlYXRlRnJhbWVidWZmZXIoKSxtKGUpfSl9fSl9ZnVuY3Rpb24gTSgpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD10aGlzLnN0YXRlPTAsdGhpcy5idWZmZXI9bnVsbCx0aGlzLnNpemU9MCx0aGlzLm5vcm1hbGl6ZWQ9ITEsdGhpcy50eXBlPTUxMjYsdGhpcy5kaXZpc29yPXRoaXMuc3RyaWRlPXRoaXMub2Zmc2V0PTB9ZnVuY3Rpb24gUyh0LGUscixuKXtmdW5jdGlvbiBpKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMuaWQ9ZSx0aGlzLmxvY2F0aW9uPXIsdGhpcy5pbmZvPW59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKHRbcl0uaWQ9PT1lLmlkKXJldHVybiB2b2lkKHRbcl0ubG9jYXRpb249ZS5sb2NhdGlvbik7dC5wdXNoKGUpfWZ1bmN0aW9uIG8ocixuLGkpe2lmKCEobz0oaT0zNTYzMj09PXI/Yzp1KVtuXSkpe3ZhciBhPWUuc3RyKG4pLG89dC5jcmVhdGVTaGFkZXIocik7dC5zaGFkZXJTb3VyY2UobyxhKSx0LmNvbXBpbGVTaGFkZXIobyksaVtuXT1vfXJldHVybiBvfWZ1bmN0aW9uIHModCxlKXt0aGlzLmlkPXArKyx0aGlzLmZyYWdJZD10LHRoaXMudmVydElkPWUsdGhpcy5wcm9ncmFtPW51bGwsdGhpcy51bmlmb3Jtcz1bXSx0aGlzLmF0dHJpYnV0ZXM9W10sbi5wcm9maWxlJiYodGhpcy5zdGF0cz17dW5pZm9ybXNDb3VudDowLGF0dHJpYnV0ZXNDb3VudDowfSl9ZnVuY3Rpb24gbChyLHMpe3ZhciBsLGM7bD1vKDM1NjMyLHIuZnJhZ0lkKSxjPW8oMzU2MzMsci52ZXJ0SWQpO3ZhciB1PXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcih1LGwpLHQuYXR0YWNoU2hhZGVyKHUsYyksdC5saW5rUHJvZ3JhbSh1KTt2YXIgZj10LmdldFByb2dyYW1QYXJhbWV0ZXIodSwzNTcxOCk7bi5wcm9maWxlJiYoci5zdGF0cy51bmlmb3Jtc0NvdW50PWYpO3ZhciBoPXIudW5pZm9ybXM7Zm9yKGw9MDtsPGY7KytsKWlmKGM9dC5nZXRBY3RpdmVVbmlmb3JtKHUsbCkpaWYoMTxjLnNpemUpZm9yKHZhciBwPTA7cDxjLnNpemU7KytwKXt2YXIgZD1jLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIrcCsiXSIpO2EoaCxuZXcgaShkLGUuaWQoZCksdC5nZXRVbmlmb3JtTG9jYXRpb24odSxkKSxjKSl9ZWxzZSBhKGgsbmV3IGkoYy5uYW1lLGUuaWQoYy5uYW1lKSx0LmdldFVuaWZvcm1Mb2NhdGlvbih1LGMubmFtZSksYykpO2ZvcihmPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcih1LDM1NzIxKSxuLnByb2ZpbGUmJihyLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD1mKSxoPXIuYXR0cmlidXRlcyxsPTA7bDxmOysrbCkoYz10LmdldEFjdGl2ZUF0dHJpYih1LGwpKSYmYShoLG5ldyBpKGMubmFtZSxlLmlkKGMubmFtZSksdC5nZXRBdHRyaWJMb2NhdGlvbih1LGMubmFtZSksYykpfXZhciBjPXt9LHU9e30sZj17fSxoPVtdLHA9MDtyZXR1cm4gbi5wcm9maWxlJiYoci5nZXRNYXhVbmlmb3Jtc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gaC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc3RhdHMudW5pZm9ybXNDb3VudD50JiYodD1lLnN0YXRzLnVuaWZvcm1zQ291bnQpfSksdH0sci5nZXRNYXhBdHRyaWJ1dGVzQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBoLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zdGF0cy5hdHRyaWJ1dGVzQ291bnQ+dCYmKHQ9ZS5zdGF0cy5hdHRyaWJ1dGVzQ291bnQpfSksdH0pLHtjbGVhcjpmdW5jdGlvbigpe3ZhciBlPXQuZGVsZXRlU2hhZGVyLmJpbmQodCk7WChjKS5mb3JFYWNoKGUpLGM9e30sWCh1KS5mb3JFYWNoKGUpLHU9e30saC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuZGVsZXRlUHJvZ3JhbShlLnByb2dyYW0pfSksaC5sZW5ndGg9MCxmPXt9LHIuc2hhZGVyQ291bnQ9MH0scHJvZ3JhbTpmdW5jdGlvbih0LGUsbil7dmFyIGk9ZltlXTtpfHwoaT1mW2VdPXt9KTt2YXIgYT1pW3RdO3JldHVybiBhfHwoYT1uZXcgcyhlLHQpLHIuc2hhZGVyQ291bnQrKyxsKGEpLGlbdF09YSxoLnB1c2goYSkpLGF9LHJlc3RvcmU6ZnVuY3Rpb24oKXtjPXt9LHU9e307Zm9yKHZhciB0PTA7dDxoLmxlbmd0aDsrK3QpbChoW3RdKX0sc2hhZGVyOm8sZnJhZzotMSx2ZXJ0Oi0xfX1mdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoaSl7dmFyIGE7YT1udWxsPT09ZS5uZXh0PzUxMjE6ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZS5fdGV4dHVyZS50eXBlO3ZhciBvPTAscz0wLGw9bi5mcmFtZWJ1ZmZlcldpZHRoLGM9bi5mcmFtZWJ1ZmZlckhlaWdodCx1PW51bGw7cmV0dXJuIFcoaSk/dT1pOmkmJihvPTB8aS54LHM9MHxpLnksbD0wfChpLndpZHRofHxuLmZyYW1lYnVmZmVyV2lkdGgtbyksYz0wfChpLmhlaWdodHx8bi5mcmFtZWJ1ZmZlckhlaWdodC1zKSx1PWkuZGF0YXx8bnVsbCkscigpLGk9bCpjKjQsdXx8KDUxMjE9PT1hP3U9bmV3IFVpbnQ4QXJyYXkoaSk6NTEyNj09PWEmJih1PXV8fG5ldyBGbG9hdDMyQXJyYXkoaSkpKSx0LnBpeGVsU3RvcmVpKDMzMzMsNCksdC5yZWFkUGl4ZWxzKG8scyxsLGMsNjQwOCxhLHUpLHV9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnJhbWVidWZmZXIiaW4gdD9mdW5jdGlvbih0KXt2YXIgcjtyZXR1cm4gZS5zZXRGQk8oe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXJ9LGZ1bmN0aW9uKCl7cj1zKHQpfSkscn0odCk6cyh0KX19ZnVuY3Rpb24gQyh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gQyh0KS5qb2luKCIiKX1mdW5jdGlvbiB6KCl7ZnVuY3Rpb24gdCgpe3ZhciB0PVtdLGU9W107cmV0dXJuIGooZnVuY3Rpb24oKXt0LnB1c2guYXBwbHkodCxDKGFyZ3VtZW50cykpfSx7ZGVmOmZ1bmN0aW9uKCl7dmFyIG49InYiK3IrKztyZXR1cm4gZS5wdXNoKG4pLDA8YXJndW1lbnRzLmxlbmd0aCYmKHQucHVzaChuLCI9IiksdC5wdXNoLmFwcGx5KHQsQyhhcmd1bWVudHMpKSx0LnB1c2goIjsiKSksbn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gTChbMDxlLmxlbmd0aD8idmFyICIrZSsiOyI6IiIsTCh0KV0pfX0pfWZ1bmN0aW9uIGUoKXtmdW5jdGlvbiBlKHQsZSl7bih0LGUsIj0iLHIuZGVmKHQsZSksIjsiKX12YXIgcj10KCksbj10KCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gaihmdW5jdGlvbigpe3IuYXBwbHkocixDKGFyZ3VtZW50cykpfSx7ZGVmOnIuZGVmLGVudHJ5OnIsZXhpdDpuLHNhdmU6ZSxzZXQ6ZnVuY3Rpb24odCxuLGkpe2UodCxuKSxyKHQsbiwiPSIsaSwiOyIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBpKCkrYSgpfX0pfXZhciByPTAsbj1bXSxpPVtdLGE9dCgpLG89e307cmV0dXJue2dsb2JhbDphLGxpbms6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxpLmxlbmd0aDsrK2UpaWYoaVtlXT09PXQpcmV0dXJuIG5bZV07cmV0dXJuIGU9ImciK3IrKyxuLnB1c2goZSksaS5wdXNoKHQpLGV9LGJsb2NrOnQscHJvYzpmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD0iYSIraS5sZW5ndGg7cmV0dXJuIGkucHVzaCh0KSx0fXZhciBpPVtdO3I9cnx8MDtmb3IodmFyIGE9MDthPHI7KythKW4oKTt2YXIgcz0oYT1lKCkpLnRvU3RyaW5nO3JldHVybiBvW3RdPWooYSx7YXJnOm4sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gTChbImZ1bmN0aW9uKCIsaS5qb2luKCksIil7IixzKCksIn0iXSl9fSl9LHNjb3BlOmUsY29uZDpmdW5jdGlvbigpe3ZhciB0PUwoYXJndW1lbnRzKSxyPWUoKSxuPWUoKSxpPXIudG9TdHJpbmcsYT1uLnRvU3RyaW5nO3JldHVybiBqKHIse3RoZW46ZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseShyLEMoYXJndW1lbnRzKSksdGhpc30sZWxzZTpmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KG4sQyhhcmd1bWVudHMpKSx0aGlzfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPWEoKTtyZXR1cm4gZSYmKGU9ImVsc2V7IitlKyJ9IiksTChbImlmKCIsdCwiKXsiLGkoKSwifSIsZV0pfX0pfSxjb21waWxlOmZ1bmN0aW9uKCl7dmFyIHQ9WycidXNlIHN0cmljdCI7JyxhLCJyZXR1cm4geyJdO09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKCciJyxlLCciOicsb1tlXS50b1N0cmluZygpLCIsIil9KSx0LnB1c2goIn0iKTt2YXIgZT1MKHQpLnJlcGxhY2UoLzsvZywiO1xuIikucmVwbGFjZSgvfS9nLCJ9XG4iKS5yZXBsYWNlKC97L2csIntcbiIpO3JldHVybiBGdW5jdGlvbi5hcHBseShudWxsLG4uY29uY2F0KGUpKS5hcHBseShudWxsLGkpfX19ZnVuY3Rpb24gTyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8Vyh0KXx8bCh0KX1mdW5jdGlvbiBJKHQpe3JldHVybiB0LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4idmlld3BvcnQiPT09dD8tMToidmlld3BvcnQiPT09ZT8xOnQ8ZT8tMToxfSl9ZnVuY3Rpb24gRCh0LGUscixuKXt0aGlzLnRoaXNEZXA9dCx0aGlzLmNvbnRleHREZXA9ZSx0aGlzLnByb3BEZXA9cix0aGlzLmFwcGVuZD1ufWZ1bmN0aW9uIFAodCl7cmV0dXJuIHQmJiEodC50aGlzRGVwfHx0LmNvbnRleHREZXB8fHQucHJvcERlcCl9ZnVuY3Rpb24gUih0KXtyZXR1cm4gbmV3IEQoITEsITEsITEsdCl9ZnVuY3Rpb24gRih0LGUpe3ZhciByPXQudHlwZTtyZXR1cm4gMD09PXI/bmV3IEQoITAsMTw9KHI9dC5kYXRhLmxlbmd0aCksMjw9cixlKTo0PT09cj9uZXcgRCgocj10LmRhdGEpLnRoaXNEZXAsci5jb250ZXh0RGVwLHIucHJvcERlcCxlKTpuZXcgRCgzPT09ciwyPT09ciwxPT09cixlKX1mdW5jdGlvbiBCKHQsZSxyLG4saSxvLHMsbCxjLHUsZixoLHAsZCxnKXtmdW5jdGlvbiBtKHQpe3JldHVybiB0LnJlcGxhY2UoIi4iLCJfIil9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49bSh0KTtudC5wdXNoKHQpLGV0W25dPXR0W25dPSEhcixpdFtuXT1lfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPW0odCk7bnQucHVzaCh0KSxBcnJheS5pc0FycmF5KHIpPyh0dFtuXT1yLnNsaWNlKCksZXRbbl09ci5zbGljZSgpKTp0dFtuXT1ldFtuXT1yLGF0W25dPWV9ZnVuY3Rpb24gYigpe3ZhciB0PXooKSxyPXQubGluayxuPXQuZ2xvYmFsO3QuaWQ9bHQrKyx0LmJhdGNoSWQ9IjAiO3ZhciBpPXIob3QpLGE9dC5zaGFyZWQ9e3Byb3BzOiJhMCJ9O09iamVjdC5rZXlzKG90KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09bi5kZWYoaSwiLiIsdCl9KTt2YXIgbz10Lm5leHQ9e30scz10LmN1cnJlbnQ9e307T2JqZWN0LmtleXMoYXQpLmZvckVhY2goZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0dFt0XSkmJihvW3RdPW4uZGVmKGEubmV4dCwiLiIsdCksc1t0XT1uLmRlZihhLmN1cnJlbnQsIi4iLHQpKX0pO3ZhciBsPXQuY29uc3RhbnRzPXt9O09iamVjdC5rZXlzKHN0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09bi5kZWYoSlNPTi5zdHJpbmdpZnkoc3RbdF0pKX0pLHQuaW52b2tlPWZ1bmN0aW9uKGUsbil7c3dpdGNoKG4udHlwZSl7Y2FzZSAwOnZhciBpPVsidGhpcyIsYS5jb250ZXh0LGEucHJvcHMsdC5iYXRjaElkXTtyZXR1cm4gZS5kZWYocihuLmRhdGEpLCIuY2FsbCgiLGkuc2xpY2UoMCxNYXRoLm1heChuLmRhdGEubGVuZ3RoKzEsNCkpLCIpIik7Y2FzZSAxOnJldHVybiBlLmRlZihhLnByb3BzLG4uZGF0YSk7Y2FzZSAyOnJldHVybiBlLmRlZihhLmNvbnRleHQsbi5kYXRhKTtjYXNlIDM6cmV0dXJuIGUuZGVmKCJ0aGlzIixuLmRhdGEpO2Nhc2UgNDpyZXR1cm4gbi5kYXRhLmFwcGVuZCh0LGUpLG4uZGF0YS5yZWZ9fSx0LmF0dHJpYkNhY2hlPXt9O3ZhciBjPXt9O3JldHVybiB0LnNjb3BlQXR0cmliPWZ1bmN0aW9uKHQpe2lmKCh0PWUuaWQodCkpaW4gYylyZXR1cm4gY1t0XTt2YXIgbj11LnNjb3BlW3RdO3JldHVybiBufHwobj11LnNjb3BlW3RdPW5ldyBaKSxjW3RdPXIobil9LHR9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljO2lmKCJmcmFtZWJ1ZmZlciJpbiByKXt2YXIgaT1yLmZyYW1lYnVmZmVyO3JldHVybiBpPyhpPWwuZ2V0RnJhbWVidWZmZXIoaSksUihmdW5jdGlvbih0LGUpe3ZhciByPXQubGluayhpKSxuPXQuc2hhcmVkO3JldHVybiBlLnNldChuLmZyYW1lYnVmZmVyLCIubmV4dCIsciksbj1uLmNvbnRleHQsZS5zZXQobiwiLmZyYW1lYnVmZmVyV2lkdGgiLHIrIi53aWR0aCIpLGUuc2V0KG4sIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiLmhlaWdodCIpLHJ9KSk6UihmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkO3JldHVybiBlLnNldChyLmZyYW1lYnVmZmVyLCIubmV4dCIsIm51bGwiKSxyPXIuY29udGV4dCxlLnNldChyLCIuZnJhbWVidWZmZXJXaWR0aCIscisiLmRyYXdpbmdCdWZmZXJXaWR0aCIpLGUuc2V0KHIsIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiLmRyYXdpbmdCdWZmZXJIZWlnaHQiKSwibnVsbCJ9KX1pZigiZnJhbWVidWZmZXIiaW4gbil7dmFyIGE9bi5mcmFtZWJ1ZmZlcjtyZXR1cm4gRihhLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxhKSxuPXQuc2hhcmVkLGk9bi5mcmFtZWJ1ZmZlcjtyPWUuZGVmKGksIi5nZXRGcmFtZWJ1ZmZlcigiLHIsIikiKTtyZXR1cm4gZS5zZXQoaSwiLm5leHQiLHIpLG49bi5jb250ZXh0LGUuc2V0KG4sIi5mcmFtZWJ1ZmZlcldpZHRoIixyKyI/IityKyIud2lkdGg6IituKyIuZHJhd2luZ0J1ZmZlcldpZHRoIiksZS5zZXQobiwiLmZyYW1lYnVmZmVySGVpZ2h0IixyKyI/IityKyIuaGVpZ2h0OiIrbisiLmRyYXdpbmdCdWZmZXJIZWlnaHQiKSxyfSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdyh0KXtmdW5jdGlvbiByKHQpe2lmKHQgaW4gbil7dmFyIHI9ZS5pZChuW3RdKTtyZXR1cm4odD1SKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSkuaWQ9cix0fWlmKHQgaW4gaSl7dmFyIGE9aVt0XTtyZXR1cm4gRihhLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxhKTtyZXR1cm4gZS5kZWYodC5zaGFyZWQuc3RyaW5ncywiLmlkKCIsciwiKSIpfSl9cmV0dXJuIG51bGx9dmFyIG49dC5zdGF0aWMsaT10LmR5bmFtaWMsYT1yKCJmcmFnIiksbz1yKCJ2ZXJ0Iikscz1udWxsO3JldHVybiBQKGEpJiZQKG8pPyhzPWYucHJvZ3JhbShvLmlkLGEuaWQpLHQ9UihmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxpbmsocyl9KSk6dD1uZXcgRChhJiZhLnRoaXNEZXB8fG8mJm8udGhpc0RlcCxhJiZhLmNvbnRleHREZXB8fG8mJm8uY29udGV4dERlcCxhJiZhLnByb3BEZXB8fG8mJm8ucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByLG4saT10LnNoYXJlZC5zaGFkZXI7cmV0dXJuIHI9YT9hLmFwcGVuZCh0LGUpOmUuZGVmKGksIi4iLCJmcmFnIiksbj1vP28uYXBwZW5kKHQsZSk6ZS5kZWYoaSwiLiIsInZlcnQiKSxlLmRlZihpKyIucHJvZ3JhbSgiK24rIiwiK3IrIikiKX0pLHtmcmFnOmEsdmVydDpvLHByb2dWYXI6dCxwcm9ncmFtOnN9fWZ1bmN0aW9uIGsodCxlKXtmdW5jdGlvbiByKHQsZSl7aWYodCBpbiBuKXt2YXIgcj0wfG5bdF07cmV0dXJuIFIoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSYmKHQuT0ZGU0VUPXIpLHJ9KX1pZih0IGluIGkpe3ZhciBvPWlbdF07cmV0dXJuIEYobyxmdW5jdGlvbih0LHIpe3ZhciBuPXQuaW52b2tlKHIsbyk7cmV0dXJuIGUmJih0Lk9GRlNFVD1uKSxufSl9cmV0dXJuIGUmJmE/UihmdW5jdGlvbih0LGUpe3JldHVybiB0Lk9GRlNFVD0iMCIsMH0pOm51bGx9dmFyIG49dC5zdGF0aWMsaT10LmR5bmFtaWMsYT1mdW5jdGlvbigpe2lmKCJlbGVtZW50cyJpbiBuKXt2YXIgdD1uLmVsZW1lbnRzO08odCk/dD1vLmdldEVsZW1lbnRzKG8uY3JlYXRlKHQsITApKTp0JiYodD1vLmdldEVsZW1lbnRzKHQpKTt2YXIgZT1SKGZ1bmN0aW9uKGUscil7aWYodCl7dmFyIG49ZS5saW5rKHQpO3JldHVybiBlLkVMRU1FTlRTPW59cmV0dXJuIGUuRUxFTUVOVFM9bnVsbH0pO3JldHVybiBlLnZhbHVlPXQsZX1pZigiZWxlbWVudHMiaW4gaSl7dmFyIHI9aS5lbGVtZW50cztyZXR1cm4gRihyLGZ1bmN0aW9uKHQsZSl7dmFyIG49KGk9dC5zaGFyZWQpLmlzQnVmZmVyQXJncyxpPWkuZWxlbWVudHMsYT10Lmludm9rZShlLHIpLG89ZS5kZWYoIm51bGwiKTtuPWUuZGVmKG4sIigiLGEsIikiKSxhPXQuY29uZChuKS50aGVuKG8sIj0iLGksIi5jcmVhdGVTdHJlYW0oIixhLCIpOyIpLmVsc2UobywiPSIsaSwiLmdldEVsZW1lbnRzKCIsYSwiKTsiKTtyZXR1cm4gZS5lbnRyeShhKSxlLmV4aXQodC5jb25kKG4pLnRoZW4oaSwiLmRlc3Ryb3lTdHJlYW0oIixvLCIpOyIpKSx0LkVMRU1FTlRTPW99KX1yZXR1cm4gbnVsbH0oKSxzPXIoIm9mZnNldCIsITApO3JldHVybntlbGVtZW50czphLHByaW1pdGl2ZTpmdW5jdGlvbigpe2lmKCJwcmltaXRpdmUiaW4gbil7dmFyIHQ9bi5wcmltaXRpdmU7cmV0dXJuIFIoZnVuY3Rpb24oZSxyKXtyZXR1cm4gcnRbdF19KX1pZigicHJpbWl0aXZlImluIGkpe3ZhciBlPWkucHJpbWl0aXZlO3JldHVybiBGKGUsZnVuY3Rpb24odCxyKXt2YXIgbj10LmNvbnN0YW50cy5wcmltVHlwZXMsaT10Lmludm9rZShyLGUpO3JldHVybiByLmRlZihuLCJbIixpLCJdIil9KX1yZXR1cm4gYT9QKGEpP2EudmFsdWU/UihmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIucHJpbVR5cGUiKX0pOlIoZnVuY3Rpb24oKXtyZXR1cm4gNH0pOm5ldyBEKGEudGhpc0RlcCxhLmNvbnRleHREZXAsYS5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gZS5kZWYociwiPyIsciwiLnByaW1UeXBlOiIsNCl9KTpudWxsfSgpLGNvdW50OmZ1bmN0aW9uKCl7aWYoImNvdW50ImluIG4pe3ZhciB0PTB8bi5jb3VudDtyZXR1cm4gUihmdW5jdGlvbigpe3JldHVybiB0fSl9aWYoImNvdW50ImluIGkpe3ZhciBlPWkuY291bnQ7cmV0dXJuIEYoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9cmV0dXJuIGE/UChhKT9hP3M/bmV3IEQocy50aGlzRGVwLHMuY29udGV4dERlcCxzLnByb3BEZXAsZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnZlcnRDb3VudC0iLHQuT0ZGU0VUKX0pOlIoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnZlcnRDb3VudCIpfSk6UihmdW5jdGlvbigpe3JldHVybi0xfSk6bmV3IEQoYS50aGlzRGVwfHxzLnRoaXNEZXAsYS5jb250ZXh0RGVwfHxzLmNvbnRleHREZXAsYS5wcm9wRGVwfHxzLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LkVMRU1FTlRTO3JldHVybiB0Lk9GRlNFVD9lLmRlZihyLCI/IixyLCIudmVydENvdW50LSIsdC5PRkZTRVQsIjotMSIpOmUuZGVmKHIsIj8iLHIsIi52ZXJ0Q291bnQ6LTEiKX0pOm51bGx9KCksaW5zdGFuY2VzOnIoImluc3RhbmNlcyIsITEpLG9mZnNldDpzfX1mdW5jdGlvbiBUKHQscil7dmFyIG49dC5zdGF0aWMsYT10LmR5bmFtaWMsbz17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGE9ZS5pZCh0KSxzPW5ldyBaO2lmKE8ocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWkuZ2V0QnVmZmVyKGkuY3JlYXRlKHIsMzQ5NjIsITEsITApKSxzLnR5cGU9MDtlbHNlIGlmKGM9aS5nZXRCdWZmZXIocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWMscy50eXBlPTA7ZWxzZSBpZigiY29uc3RhbnQiaW4gcil7dmFyIGw9ci5jb25zdGFudDtzLmJ1ZmZlcj0ibnVsbCIscy5zdGF0ZT0yLCJudW1iZXIiPT10eXBlb2YgbD9zLng9bDpidC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ZTxsLmxlbmd0aCYmKHNbdF09bFtlXSl9KX1lbHNle3ZhciBjPU8oci5idWZmZXIpP2kuZ2V0QnVmZmVyKGkuY3JlYXRlKHIuYnVmZmVyLDM0OTYyLCExLCEwKSk6aS5nZXRCdWZmZXIoci5idWZmZXIpLHU9MHxyLm9mZnNldCxmPTB8ci5zdHJpZGUsaD0wfHIuc2l6ZSxwPSEhci5ub3JtYWxpemVkLGQ9MDsidHlwZSJpbiByJiYoZD1KW3IudHlwZV0pLHI9MHxyLmRpdmlzb3Iscy5idWZmZXI9YyxzLnN0YXRlPTEscy5zaXplPWgscy5ub3JtYWxpemVkPXAscy50eXBlPWR8fGMuZHR5cGUscy5vZmZzZXQ9dSxzLnN0cmlkZT1mLHMuZGl2aXNvcj1yfW9bdF09UihmdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cmliQ2FjaGU7aWYoYSBpbiByKXJldHVybiByW2FdO3ZhciBuPXtpc1N0cmVhbTohMX07cmV0dXJuIE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1zW3RdfSkscy5idWZmZXImJihuLmJ1ZmZlcj10Lmxpbmsocy5idWZmZXIpLG4udHlwZT1uLnR5cGV8fG4uYnVmZmVyKyIuZHR5cGUiKSxyW2FdPW59KX0pLE9iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9YVt0XTtvW3RdPUYoZSxmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4odCl7cihsW3RdLCI9IixpLCIuIix0LCJ8MDsiKX12YXIgaT10Lmludm9rZShyLGUpLGE9dC5zaGFyZWQsbz1hLmlzQnVmZmVyQXJncyxzPWEuYnVmZmVyLGw9e2lzU3RyZWFtOnIuZGVmKCExKX0sYz1uZXcgWjtjLnN0YXRlPTEsT2JqZWN0LmtleXMoYykuZm9yRWFjaChmdW5jdGlvbih0KXtsW3RdPXIuZGVmKCIiK2NbdF0pfSk7dmFyIHU9bC5idWZmZXIsZj1sLnR5cGU7cmV0dXJuIHIoImlmKCIsbywiKCIsaSwiKSl7IixsLmlzU3RyZWFtLCI9dHJ1ZTsiLHUsIj0iLHMsIi5jcmVhdGVTdHJlYW0oIiwzNDk2MiwiLCIsaSwiKTsiLGYsIj0iLHUsIi5kdHlwZTsiLCJ9ZWxzZXsiLHUsIj0iLHMsIi5nZXRCdWZmZXIoIixpLCIpOyIsImlmKCIsdSwiKXsiLGYsIj0iLHUsIi5kdHlwZTsiLCd9ZWxzZSBpZigiY29uc3RhbnQiIGluICcsaSwiKXsiLGwuc3RhdGUsIj0iLDIsIjsiLCJpZih0eXBlb2YgIitpKycuY29uc3RhbnQgPT09ICJudW1iZXIiKXsnLGxbYnRbMF1dLCI9IixpLCIuY29uc3RhbnQ7IixidC5zbGljZSgxKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGxbdF19KS5qb2luKCI9IiksIj0wOyIsIn1lbHNleyIsYnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxbdF0rIj0iK2krIi5jb25zdGFudC5sZW5ndGg+IitlKyI/IitpKyIuY29uc3RhbnRbIitlKyJdOjA7In0pLmpvaW4oIiIpLCJ9fWVsc2V7IiwiaWYoIixvLCIoIixpLCIuYnVmZmVyKSl7Iix1LCI9IixzLCIuY3JlYXRlU3RyZWFtKCIsMzQ5NjIsIiwiLGksIi5idWZmZXIpOyIsIn1lbHNleyIsdSwiPSIscywiLmdldEJ1ZmZlcigiLGksIi5idWZmZXIpOyIsIn0iLGYsJz0idHlwZSIgaW4gJyxpLCI/IixhLmdsVHlwZXMsIlsiLGksIi50eXBlXToiLHUsIi5kdHlwZTsiLGwubm9ybWFsaXplZCwiPSEhIixpLCIubm9ybWFsaXplZDsiKSxuKCJzaXplIiksbigib2Zmc2V0Iiksbigic3RyaWRlIiksbigiZGl2aXNvciIpLHIoIn19Iiksci5leGl0KCJpZigiLGwuaXNTdHJlYW0sIil7IixzLCIuZGVzdHJveVN0cmVhbSgiLHUsIik7IiwifSIpLGx9KX0pLG99ZnVuY3Rpb24gQSh0LGUscixuLGkpe3ZhciBvPV8odCkscz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtpZih0IGluIGkpe3ZhciByPWlbdF07dD0hMDt2YXIgbixvLHM9MHxyLngsbD0wfHIueTtyZXR1cm4id2lkdGgiaW4gcj9uPTB8ci53aWR0aDp0PSExLCJoZWlnaHQiaW4gcj9vPTB8ci5oZWlnaHQ6dD0hMSxuZXcgRCghdCYmZSYmZS50aGlzRGVwLCF0JiZlJiZlLmNvbnRleHREZXAsIXQmJmUmJmUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciBpPXQuc2hhcmVkLmNvbnRleHQsYT1uOyJ3aWR0aCJpbiByfHwoYT1lLmRlZihpLCIuIiwiZnJhbWVidWZmZXJXaWR0aCIsIi0iLHMpKTt2YXIgYz1vO3JldHVybiJoZWlnaHQiaW4gcnx8KGM9ZS5kZWYoaSwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IiwiLSIsbCkpLFtzLGwsYSxjXX0pfWlmKHQgaW4gYSl7dmFyIGM9YVt0XTtyZXR1cm4gdD1GKGMsZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGMpLG49dC5zaGFyZWQuY29udGV4dCxpPWUuZGVmKHIsIi54fDAiKSxhPWUuZGVmKHIsIi55fDAiKTtyZXR1cm5baSxhLGUuZGVmKCcid2lkdGgiIGluICcsciwiPyIsciwiLndpZHRofDA6IiwiKCIsbiwiLiIsImZyYW1lYnVmZmVyV2lkdGgiLCItIixpLCIpIikscj1lLmRlZignImhlaWdodCIgaW4gJyxyLCI/IixyLCIuaGVpZ2h0fDA6IiwiKCIsbiwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IiwiLSIsYSwiKSIpXX0pLGUmJih0LnRoaXNEZXA9dC50aGlzRGVwfHxlLnRoaXNEZXAsdC5jb250ZXh0RGVwPXQuY29udGV4dERlcHx8ZS5jb250ZXh0RGVwLHQucHJvcERlcD10LnByb3BEZXB8fGUucHJvcERlcCksdH1yZXR1cm4gZT9uZXcgRChlLnRoaXNEZXAsZS5jb250ZXh0RGVwLGUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuWzAsMCxlLmRlZihyLCIuIiwiZnJhbWVidWZmZXJXaWR0aCIpLGUuZGVmKHIsIi4iLCJmcmFtZWJ1ZmZlckhlaWdodCIpXX0pOm51bGx9dmFyIGk9dC5zdGF0aWMsYT10LmR5bmFtaWM7aWYodD1uKCJ2aWV3cG9ydCIpKXt2YXIgbz10O3Q9bmV3IEQodC50aGlzRGVwLHQuY29udGV4dERlcCx0LnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj1vLmFwcGVuZCh0LGUpLG49dC5zaGFyZWQuY29udGV4dDtyZXR1cm4gZS5zZXQobiwiLnZpZXdwb3J0V2lkdGgiLHJbMl0pLGUuc2V0KG4sIi52aWV3cG9ydEhlaWdodCIsclszXSkscn0pfXJldHVybnt2aWV3cG9ydDp0LHNjaXNzb3JfYm94Om4oInNjaXNzb3IuYm94Iil9fSh0LG8pLGw9ayh0KSxjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWMsaT17fTtyZXR1cm4gbnQuZm9yRWFjaChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsYSl7aWYodCBpbiByKXt2YXIgcz1lKHJbdF0pO2lbb109UihmdW5jdGlvbigpe3JldHVybiBzfSl9ZWxzZSBpZih0IGluIG4pe3ZhciBsPW5bdF07aVtvXT1GKGwsZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0LGUsdC5pbnZva2UoZSxsKSl9KX19dmFyIG89bSh0KTtzd2l0Y2godCl7Y2FzZSJjdWxsLmVuYWJsZSI6Y2FzZSJibGVuZC5lbmFibGUiOmNhc2UiZGl0aGVyIjpjYXNlInN0ZW5jaWwuZW5hYmxlIjpjYXNlImRlcHRoLmVuYWJsZSI6Y2FzZSJzY2lzc29yLmVuYWJsZSI6Y2FzZSJwb2x5Z29uT2Zmc2V0LmVuYWJsZSI6Y2FzZSJzYW1wbGUuYWxwaGEiOmNhc2Uic2FtcGxlLmVuYWJsZSI6Y2FzZSJkZXB0aC5tYXNrIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSk7Y2FzZSJkZXB0aC5mdW5jIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4ga3RbdF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYodC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLCJbIixyLCJdIil9KTtjYXNlImRlcHRoLnJhbmdlIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZigiKyIsciwiWzBdIiksZT1lLmRlZigiKyIsciwiWzFdIildfSk7Y2FzZSJibGVuZC5mdW5jIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5bd3RbInNyY1JHQiJpbiB0P3Quc3JjUkdCOnQuc3JjXSx3dFsiZHN0UkdCImluIHQ/dC5kc3RSR0I6dC5kc3RdLHd0WyJzcmNBbHBoYSJpbiB0P3Quc3JjQWxwaGE6dC5zcmNdLHd0WyJkc3RBbHBoYSJpbiB0P3QuZHN0QWxwaGE6dC5kc3RdXX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gZS5kZWYoJyInLHQsbiwnIiBpbiAnLHIsIj8iLHIsIi4iLHQsbiwiOiIsciwiLiIsdCl9dD10LmNvbnN0YW50cy5ibGVuZEZ1bmNzO3ZhciBpPW4oInNyYyIsIlJHQiIpLGE9bigiZHN0IiwiUkdCIiksbz0oaT1lLmRlZih0LCJbIixpLCJdIiksZS5kZWYodCwiWyIsbigic3JjIiwiQWxwaGEiKSwiXSIpKTtyZXR1cm5baSxhPWUuZGVmKHQsIlsiLGEsIl0iKSxvLHQ9ZS5kZWYodCwiWyIsbigiZHN0IiwiQWxwaGEiKSwiXSIpXX0pO2Nhc2UiYmxlbmQuZXF1YXRpb24iOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9bJFt0XSwkW3RdXToib2JqZWN0Ij09dHlwZW9mIHQ/WyRbdC5yZ2JdLCRbdC5hbHBoYV1dOnZvaWQgMH0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29uc3RhbnRzLmJsZW5kRXF1YXRpb25zLGk9ZS5kZWYoKSxhPWUuZGVmKCk7cmV0dXJuKHQ9dC5jb25kKCJ0eXBlb2YgIixyLCc9PT0ic3RyaW5nIicpKS50aGVuKGksIj0iLGEsIj0iLG4sIlsiLHIsIl07IiksdC5lbHNlKGksIj0iLG4sIlsiLHIsIi5yZ2JdOyIsYSwiPSIsbiwiWyIsciwiLmFscGhhXTsiKSxlKHQpLFtpLGFdfSk7Y2FzZSJibGVuZC5jb2xvciI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIGEoNCxmdW5jdGlvbihlKXtyZXR1cm4rdFtlXX0pfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGEoNCxmdW5jdGlvbih0KXtyZXR1cm4gZS5kZWYoIisiLHIsIlsiLHQsIl0iKX0pfSk7Y2FzZSJzdGVuY2lsLm1hc2siOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiAwfHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYociwifDAiKX0pO2Nhc2Uic3RlbmNpbC5mdW5jIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5ba3RbdC5jbXB8fCJrZWVwIl0sdC5yZWZ8fDAsIm1hc2siaW4gdD90Lm1hc2s6LTFdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuW3Q9ZS5kZWYoJyJjbXAiIGluICcsciwiPyIsdC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLCJbIixyLCIuY21wXSIsIjoiLDc2ODApLGUuZGVmKHIsIi5yZWZ8MCIpLGU9ZS5kZWYoJyJtYXNrIiBpbiAnLHIsIj8iLHIsIi5tYXNrfDA6LTEiKV19KTtjYXNlInN0ZW5jaWwub3BGcm9udCI6Y2FzZSJzdGVuY2lsLm9wQmFjayI6cmV0dXJuIGUoZnVuY3Rpb24oZSl7cmV0dXJuWyJzdGVuY2lsLm9wQmFjayI9PT10PzEwMjk6MTAyOCxUdFtlLmZhaWx8fCJrZWVwIl0sVHRbZS56ZmFpbHx8ImtlZXAiXSxUdFtlLnpwYXNzfHwia2VlcCJdXX0sZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIuZGVmKCciJyx0LCciIGluICcsbiwiPyIsYSwiWyIsbiwiLiIsdCwiXToiLDc2ODApfXZhciBhPWUuY29uc3RhbnRzLnN0ZW5jaWxPcHM7cmV0dXJuWyJzdGVuY2lsLm9wQmFjayI9PT10PzEwMjk6MTAyOCxpKCJmYWlsIiksaSgiemZhaWwiKSxpKCJ6cGFzcyIpXX0pO2Nhc2UicG9seWdvbk9mZnNldC5vZmZzZXQiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVyblswfHQuZmFjdG9yLDB8dC51bml0c119LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYociwiLmZhY3RvcnwwIiksZT1lLmRlZihyLCIudW5pdHN8MCIpXX0pO2Nhc2UiY3VsbC5mYWNlIjpyZXR1cm4gZShmdW5jdGlvbih0KXt2YXIgZT0wO3JldHVybiJmcm9udCI9PT10P2U9MTAyODoiYmFjayI9PT10JiYoZT0xMDI5KSxlfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsJz09PSJmcm9udCI/JywxMDI4LCI6IiwxMDI5KX0pO2Nhc2UibGluZVdpZHRoIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSk7Y2FzZSJmcm9udEZhY2UiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiBBdFt0XX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZihyKyc9PT0iY3ciPzIzMDQ6MjMwNScpfSk7Y2FzZSJjb2xvck1hc2siOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4hIXR9KX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsZnVuY3Rpb24odCl7cmV0dXJuIiEhIityKyJbIit0KyJdIn0pfSk7Y2FzZSJzYW1wbGUuY292ZXJhZ2UiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVyblsidmFsdWUiaW4gdD90LnZhbHVlOjEsISF0LmludmVydF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYoJyJ2YWx1ZSIgaW4gJyxyLCI/KyIsciwiLnZhbHVlOjEiKSxlPWUuZGVmKCIhISIsciwiLmludmVydCIpXX0pfX0pLGl9KHQpLHU9dyh0KSxmPXMudmlld3BvcnQ7cmV0dXJuIGYmJihjLnZpZXdwb3J0PWYpLChzPXNbZj1tKCJzY2lzc29yLmJveCIpXSkmJihjW2ZdPXMpLChvPXtmcmFtZWJ1ZmZlcjpvLGRyYXc6bCxzaGFkZXI6dSxzdGF0ZTpjLGRpcnR5OnM9MDxPYmplY3Qua2V5cyhjKS5sZW5ndGh9KS5wcm9maWxlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zdGF0aWM7aWYodD10LmR5bmFtaWMsInByb2ZpbGUiaW4gcil7dmFyIG49ISFyLnByb2ZpbGU7KGU9UihmdW5jdGlvbih0LGUpe3JldHVybiBufSkpLmVuYWJsZT1ufWVsc2UgaWYoInByb2ZpbGUiaW4gdCl7dmFyIGk9dC5wcm9maWxlO2U9RihpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW52b2tlKGUsaSl9KX1yZXR1cm4gZX0odCksby51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGk9e307cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUsbj1yW3RdO2lmKCJudW1iZXIiPT10eXBlb2Ygbnx8ImJvb2xlYW4iPT10eXBlb2YgbillPVIoZnVuY3Rpb24oKXtyZXR1cm4gbn0pO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pe3ZhciBvPW4uX3JlZ2xUeXBlOyJ0ZXh0dXJlMmQiPT09b3x8InRleHR1cmVDdWJlIj09PW8/ZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobil9KToiZnJhbWVidWZmZXIiIT09byYmImZyYW1lYnVmZmVyQ3ViZSIhPT1vfHwoZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobi5jb2xvclswXSl9KSl9ZWxzZSB2KG4pJiYoZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbC5kZWYoIlsiLGEobi5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KSwiXSIpfSkpO2UudmFsdWU9bixpW3RdPWV9KSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07aVt0XT1GKGUsZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pfSksaX0ociksby5hdHRyaWJ1dGVzPVQoZSksby5jb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhdGljLHI9dC5keW5hbWljLG49e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZVt0XTtuW3RdPVIoZnVuY3Rpb24odCxlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHJ8fCJib29sZWFuIj09dHlwZW9mIHI/IiIrcjp0Lmxpbmsocil9KX0pLE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9clt0XTtuW3RdPUYoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9KSxufShuKSxvfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPXQuc2hhcmVkLmNvbnRleHQsaT10LnNjb3BlKCk7T2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihhKXtlLnNhdmUobiwiLiIrYSksaShuLCIuIixhLCI9IixyW2FdLmFwcGVuZCh0LGUpLCI7Iil9KSxlKGkpfWZ1bmN0aW9uIFModCxlLHIsbil7dmFyIGksYT0ocz10LnNoYXJlZCkuZ2wsbz1zLmZyYW1lYnVmZmVyO1EmJihpPWUuZGVmKHMuZXh0ZW5zaW9ucywiLndlYmdsX2RyYXdfYnVmZmVycyIpKTt2YXIgcz0obD10LmNvbnN0YW50cykuZHJhd0J1ZmZlcixsPWwuYmFja0J1ZmZlcjt0PXI/ci5hcHBlbmQodCxlKTplLmRlZihvLCIubmV4dCIpLG58fGUoImlmKCIsdCwiIT09IixvLCIuY3VyKXsiKSxlKCJpZigiLHQsIil7IixhLCIuYmluZEZyYW1lYnVmZmVyKCIsMzYxNjAsIiwiLHQsIi5mcmFtZWJ1ZmZlcik7IiksUSYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLHMsIlsiLHQsIi5jb2xvckF0dGFjaG1lbnRzLmxlbmd0aF0pOyIpLGUoIn1lbHNleyIsYSwiLmJpbmRGcmFtZWJ1ZmZlcigiLDM2MTYwLCIsbnVsbCk7IiksUSYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLGwsIik7IiksZSgifSIsbywiLmN1cj0iLHQsIjsiKSxufHxlKCJ9Iil9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49dC5zaGFyZWQsaT1uLmdsLG89dC5jdXJyZW50LHM9dC5uZXh0LGw9bi5jdXJyZW50LGM9bi5uZXh0LHU9dC5jb25kKGwsIi5kaXJ0eSIpO250LmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG4sZjtpZighKChlPW0oZSkpaW4gci5zdGF0ZSkpaWYoZSBpbiBzKXtuPXNbZV0sZj1vW2VdO3ZhciBoPWEodHRbZV0ubGVuZ3RoLGZ1bmN0aW9uKHQpe3JldHVybiB1LmRlZihuLCJbIix0LCJdIil9KTt1KHQuY29uZChoLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0KyIhPT0iK2YrIlsiK2UrIl0ifSkuam9pbigifHwiKSkudGhlbihpLCIuIixhdFtlXSwiKCIsaCwiKTsiLGgubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYrIlsiK2UrIl09Iit0fSkuam9pbigiOyIpLCI7IikpfWVsc2Ugbj11LmRlZihjLCIuIixlKSxoPXQuY29uZChuLCIhPT0iLGwsIi4iLGUpLHUoaCksZSBpbiBpdD9oKHQuY29uZChuKS50aGVuKGksIi5lbmFibGUoIixpdFtlXSwiKTsiKS5lbHNlKGksIi5kaXNhYmxlKCIsaXRbZV0sIik7IiksbCwiLiIsZSwiPSIsbiwiOyIpOmgoaSwiLiIsYXRbZV0sIigiLG4sIik7IixsLCIuIixlLCI9IixuLCI7Iil9KSwwPT09T2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoJiZ1KGwsIi5kaXJ0eT1mYWxzZTsiKSxlKHUpfWZ1bmN0aW9uIEModCxlLHIsbil7dmFyIGk9dC5zaGFyZWQsYT10LmN1cnJlbnQsbz1pLmN1cnJlbnQscz1pLmdsO0koT2JqZWN0LmtleXMocikpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGw9cltpXTtpZighbnx8bihsKSl7dmFyIGM9bC5hcHBlbmQodCxlKTtpZihpdFtpXSl7dmFyIHU9aXRbaV07UChsKT9lKHMsYz8iLmVuYWJsZSgiOiIuZGlzYWJsZSgiLHUsIik7Iik6ZSh0LmNvbmQoYykudGhlbihzLCIuZW5hYmxlKCIsdSwiKTsiKS5lbHNlKHMsIi5kaXNhYmxlKCIsdSwiKTsiKSksZShvLCIuIixpLCI9IixjLCI7Iil9ZWxzZSBpZih2KGMpKXt2YXIgZj1hW2ldO2UocywiLiIsYXRbaV0sIigiLGMsIik7IixjLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBmKyJbIitlKyJdPSIrdH0pLmpvaW4oIjsiKSwiOyIpfWVsc2UgZShzLCIuIixhdFtpXSwiKCIsYywiKTsiLG8sIi4iLGksIj0iLGMsIjsiKX19KX1mdW5jdGlvbiBMKHQsZSl7SyYmKHQuaW5zdGFuY2luZz1lLmRlZih0LnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKX1mdW5jdGlvbiBCKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgcGVyZm9ybWFuY2U/IkRhdGUubm93KCkiOiJwZXJmb3JtYW5jZS5ub3coKSJ9ZnVuY3Rpb24gbyh0KXt0KGM9ZS5kZWYoKSwiPSIsYSgpLCI7IiksInN0cmluZyI9PXR5cGVvZiBpP3QoaCwiLmNvdW50Kz0iLGksIjsiKTp0KGgsIi5jb3VudCsrOyIpLGQmJihuP3QodT1lLmRlZigpLCI9IixnLCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKTsiKTp0KGcsIi5iZWdpblF1ZXJ5KCIsaCwiKTsiKSl9ZnVuY3Rpb24gcyh0KXt0KGgsIi5jcHVUaW1lKz0iLGEoKSwiLSIsYywiOyIpLGQmJihuP3QoZywiLnB1c2hTY29wZVN0YXRzKCIsdSwiLCIsZywiLmdldE51bVBlbmRpbmdRdWVyaWVzKCksIixoLCIpOyIpOnQoZywiLmVuZFF1ZXJ5KCk7IikpfWZ1bmN0aW9uIGwodCl7dmFyIHI9ZS5kZWYocCwiLnByb2ZpbGUiKTtlKHAsIi5wcm9maWxlPSIsdCwiOyIpLGUuZXhpdChwLCIucHJvZmlsZT0iLHIsIjsiKX12YXIgYyx1LGY9dC5zaGFyZWQsaD10LnN0YXRzLHA9Zi5jdXJyZW50LGc9Zi50aW1lcjtpZihyPXIucHJvZmlsZSl7aWYoUChyKSlyZXR1cm4gdm9pZChyLmVuYWJsZT8obyhlKSxzKGUuZXhpdCksbCgidHJ1ZSIpKTpsKCJmYWxzZSIpKTtsKHI9ci5hcHBlbmQodCxlKSl9ZWxzZSByPWUuZGVmKHAsIi5wcm9maWxlIik7byhmPXQuYmxvY2soKSksZSgiaWYoIixyLCIpeyIsZiwifSIpLHModD10LmJsb2NrKCkpLGUuZXhpdCgiaWYoIixyLCIpeyIsdCwifSIpfWZ1bmN0aW9uIE4odCxlLHIsbixpKXtmdW5jdGlvbiBhKHIsbixpKXtmdW5jdGlvbiBhKCl7ZSgiaWYoISIsdSwiLmJ1ZmZlcil7IixsLCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIixjLCIpO30iKTt2YXIgcixhPWkudHlwZTtyPWkuc2l6ZT9lLmRlZihpLnNpemUsInx8IixuKTpuLGUoImlmKCIsdSwiLnR5cGUhPT0iLGEsInx8Iix1LCIuc2l6ZSE9PSIsciwifHwiLHAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1KyIuIit0KyIhPT0iK2lbdF19KS5qb2luKCJ8fCIpLCIpeyIsbCwiLmJpbmRCdWZmZXIoIiwzNDk2MiwiLCIsZiwiLmJ1ZmZlcik7IixsLCIudmVydGV4QXR0cmliUG9pbnRlcigiLFtjLHIsYSxpLm5vcm1hbGl6ZWQsaS5zdHJpZGUsaS5vZmZzZXRdLCIpOyIsdSwiLnR5cGU9IixhLCI7Iix1LCIuc2l6ZT0iLHIsIjsiLHAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1KyIuIit0KyI9IitpW3RdKyI7In0pLmpvaW4oIiIpLCJ9IiksSyYmKGE9aS5kaXZpc29yLGUoImlmKCIsdSwiLmRpdmlzb3IhPT0iLGEsIil7Iix0Lmluc3RhbmNpbmcsIi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoIixbYyxhXSwiKTsiLHUsIi5kaXZpc29yPSIsYSwiO30iKSl9ZnVuY3Rpb24gcygpe2UoImlmKCIsdSwiLmJ1ZmZlcil7IixsLCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsYywiKTsiLCJ9aWYoIixidC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdSsiLiIrdCsiIT09IitoW2VdfSkuam9pbigifHwiKSwiKXsiLGwsIi52ZXJ0ZXhBdHRyaWI0ZigiLGMsIiwiLGgsIik7IixidC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdSsiLiIrdCsiPSIraFtlXSsiOyJ9KS5qb2luKCIiKSwifSIpfXZhciBsPW8uZ2wsYz1lLmRlZihyLCIubG9jYXRpb24iKSx1PWUuZGVmKG8uYXR0cmlidXRlcywiWyIsYywiXSIpO3I9aS5zdGF0ZTt2YXIgZj1pLmJ1ZmZlcixoPVtpLngsaS55LGkueixpLnddLHA9WyJidWZmZXIiLCJub3JtYWxpemVkIiwib2Zmc2V0Iiwic3RyaWRlIl07MT09PXI/YSgpOjI9PT1yP3MoKTooZSgiaWYoIixyLCI9PT0iLDEsIil7IiksYSgpLGUoIn1lbHNleyIpLHMoKSxlKCJ9IikpfXZhciBvPXQuc2hhcmVkO24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbyxzPW4ubmFtZSxsPXIuYXR0cmlidXRlc1tzXTtpZihsKXtpZighaShsKSlyZXR1cm47bz1sLmFwcGVuZCh0LGUpfWVsc2V7aWYoIWkoTXQpKXJldHVybjt2YXIgYz10LnNjb3BlQXR0cmliKHMpO289e30sT2JqZWN0LmtleXMobmV3IFopLmZvckVhY2goZnVuY3Rpb24odCl7b1t0XT1lLmRlZihjLCIuIix0KX0pfWEodC5saW5rKG4pLGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDM1NjY0OmNhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gMjtjYXNlIDM1NjY1OmNhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gMztjYXNlIDM1NjY2OmNhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiAxfX0obi5pbmZvLnR5cGUpLG8pfSl9ZnVuY3Rpb24gaih0LHIsbixpLG8pe2Zvcih2YXIgcyxsPXQuc2hhcmVkLGM9bC5nbCx1PTA7dTxpLmxlbmd0aDsrK3Upe3ZhciBmLGg9KGc9aVt1XSkubmFtZSxwPWcuaW5mby50eXBlLGQ9bi51bmlmb3Jtc1toXSxnPXQubGluayhnKSsiLmxvY2F0aW9uIjtpZihkKXtpZighbyhkKSljb250aW51ZTtpZihQKGQpKXtpZihoPWQudmFsdWUsMzU2Nzg9PT1wfHwzNTY4MD09PXApcihjLCIudW5pZm9ybTFpKCIsZywiLCIsKHA9dC5saW5rKGguX3RleHR1cmV8fGguY29sb3JbMF0uX3RleHR1cmUpKSsiLmJpbmQoKSk7Iiksci5leGl0KHAsIi51bmJpbmQoKTsiKTtlbHNlIGlmKDM1Njc0PT09cHx8MzU2NzU9PT1wfHwzNTY3Nj09PXApZD0yLDM1Njc1PT09cD9kPTM6MzU2NzY9PT1wJiYoZD00KSxyKGMsIi51bmlmb3JtTWF0cml4IixkLCJmdigiLGcsIixmYWxzZSwiLGg9dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KFsiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGgpKyJdKSIpLCIpOyIpO2Vsc2V7c3dpdGNoKHApe2Nhc2UgNTEyNjpzPSIxZiI7YnJlYWs7Y2FzZSAzNTY2NDpzPSIyZiI7YnJlYWs7Y2FzZSAzNTY2NTpzPSIzZiI7YnJlYWs7Y2FzZSAzNTY2NjpzPSI0ZiI7YnJlYWs7Y2FzZSAzNTY3MDpjYXNlIDUxMjQ6cz0iMWkiO2JyZWFrO2Nhc2UgMzU2NzE6Y2FzZSAzNTY2NzpzPSIyaSI7YnJlYWs7Y2FzZSAzNTY3MjpjYXNlIDM1NjY4OnM9IjNpIjticmVhaztjYXNlIDM1NjczOnM9IjRpIjticmVhaztjYXNlIDM1NjY5OnM9IjRpIn1yKGMsIi51bmlmb3JtIixzLCIoIixnLCIsIix2KGgpP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGgpOmgsIik7Iil9Y29udGludWV9Zj1kLmFwcGVuZCh0LHIpfWVsc2V7aWYoIW8oTXQpKWNvbnRpbnVlO2Y9ci5kZWYobC51bmlmb3JtcywiWyIsZS5pZChoKSwiXSIpfXN3aXRjaCgzNTY3OD09PXA/cigiaWYoIixmLCImJiIsZiwnLl9yZWdsVHlwZT09PSJmcmFtZWJ1ZmZlciIpeycsZiwiPSIsZiwiLmNvbG9yWzBdOyIsIn0iKTozNTY4MD09PXAmJnIoImlmKCIsZiwiJiYiLGYsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXJDdWJlIil7JyxmLCI9IixmLCIuY29sb3JbMF07IiwifSIpLGg9MSxwKXtjYXNlIDM1Njc4OmNhc2UgMzU2ODA6cD1yLmRlZihmLCIuX3RleHR1cmUiKSxyKGMsIi51bmlmb3JtMWkoIixnLCIsIixwLCIuYmluZCgpKTsiKSxyLmV4aXQocCwiLnVuYmluZCgpOyIpO2NvbnRpbnVlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnM9IjFpIjticmVhaztjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cz0iMmkiLGg9MjticmVhaztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cz0iM2kiLGg9MzticmVhaztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cz0iNGkiLGg9NDticmVhaztjYXNlIDUxMjY6cz0iMWYiO2JyZWFrO2Nhc2UgMzU2NjQ6cz0iMmYiLGg9MjticmVhaztjYXNlIDM1NjY1OnM9IjNmIixoPTM7YnJlYWs7Y2FzZSAzNTY2NjpzPSI0ZiIsaD00O2JyZWFrO2Nhc2UgMzU2NzQ6cz0iTWF0cml4MmZ2IjticmVhaztjYXNlIDM1Njc1OnM9Ik1hdHJpeDNmdiI7YnJlYWs7Y2FzZSAzNTY3NjpzPSJNYXRyaXg0ZnYifWlmKHIoYywiLnVuaWZvcm0iLHMsIigiLGcsIiwiKSwiTSI9PT1zLmNoYXJBdCgwKSl7Zz1NYXRoLnBvdyhwLTM1Njc0KzIsMik7dmFyIG09dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KCIsZywiKSIpO3IoImZhbHNlLChBcnJheS5pc0FycmF5KCIsZiwiKXx8IixmLCIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpPyIsZiwiOigiLGEoZyxmdW5jdGlvbih0KXtyZXR1cm4gbSsiWyIrdCsiXT0iK2YrIlsiK3QrIl0ifSksIiwiLG0sIikiKX1lbHNlIHIoMTxoP2EoaCxmdW5jdGlvbih0KXtyZXR1cm4gZisiWyIrdCsiXSJ9KTpmKTtyKCIpOyIpfX1mdW5jdGlvbiBWKHQsZSxyLG4pe2Z1bmN0aW9uIGkoaSl7dmFyIGE9aFtpXTtyZXR1cm4gYT9hLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGEucHJvcERlcD9hLmFwcGVuZCh0LHIpOmEuYXBwZW5kKHQsZSk6ZS5kZWYoZiwiLiIsaSl9ZnVuY3Rpb24gYSgpe2Z1bmN0aW9uIHQoKXtyKGwsIi5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSgiLFtkLHYsbSxnKyI8PCgoIittKyItNTEyMSk+PjEpIixzXSwiKTsiKX1mdW5jdGlvbiBlKCl7cihsLCIuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKCIsW2QsZyx2LHNdLCIpOyIpfXA/eT90KCk6KHIoImlmKCIscCwiKXsiKSx0KCkscigifWVsc2V7IiksZSgpLHIoIn0iKSk6ZSgpfWZ1bmN0aW9uIG8oKXtmdW5jdGlvbiB0KCl7cih1KyIuZHJhd0VsZW1lbnRzKCIrW2QsdixtLGcrIjw8KCgiK20rIi01MTIxKT4+MSkiXSsiKTsiKX1mdW5jdGlvbiBlKCl7cih1KyIuZHJhd0FycmF5cygiK1tkLGcsdl0rIik7Iil9cD95P3QoKToocigiaWYoIixwLCIpeyIpLHQoKSxyKCJ9ZWxzZXsiKSxlKCkscigifSIpKTplKCl9dmFyIHMsbCxjPXQuc2hhcmVkLHU9Yy5nbCxmPWMuZHJhdyxoPW4uZHJhdyxwPWZ1bmN0aW9uKCl7dmFyIGk9aC5lbGVtZW50cyxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSk6aT1hLmRlZihmLCIuIiwiZWxlbWVudHMiKSxpJiZhKCJpZigiK2krIikiK3UrIi5iaW5kQnVmZmVyKDM0OTYzLCIraSsiLmJ1ZmZlci5idWZmZXIpOyIpLGl9KCksZD1pKCJwcmltaXRpdmUiKSxnPWkoIm9mZnNldCIpLHY9ZnVuY3Rpb24oKXt2YXIgaT1oLmNvdW50LGE9ZTtyZXR1cm4gaT8oKGkuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8aS5wcm9wRGVwKSYmKGE9ciksaT1pLmFwcGVuZCh0LGEpKTppPWEuZGVmKGYsIi4iLCJjb3VudCIpLGl9KCk7aWYoIm51bWJlciI9PXR5cGVvZiB2KXtpZigwPT09dilyZXR1cm59ZWxzZSByKCJpZigiLHYsIil7Iiksci5leGl0KCJ9Iik7SyYmKHM9aSgiaW5zdGFuY2VzIiksbD10Lmluc3RhbmNpbmcpO3ZhciBtPXArIi50eXBlIix5PWguZWxlbWVudHMmJlAoaC5lbGVtZW50cyk7SyYmKCJudW1iZXIiIT10eXBlb2Ygc3x8MDw9cyk/InN0cmluZyI9PXR5cGVvZiBzPyhyKCJpZigiLHMsIj4wKXsiKSxhKCkscigifWVsc2UgaWYoIixzLCI8MCl7IiksbygpLHIoIn0iKSk6YSgpOm8oKX1mdW5jdGlvbiBxKHQsZSxyLG4saSl7cmV0dXJuIGk9KGU9YigpKS5wcm9jKCJib2R5IixpKSxLJiYoZS5pbnN0YW5jaW5nPWkuZGVmKGUuc2hhcmVkLmV4dGVuc2lvbnMsIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzIikpLHQoZSxpLHIsbiksZS5jb21waWxlKCkuYm9keX1mdW5jdGlvbiBIKHQsZSxyLG4pe0wodCxlKSxOKHQsZSxyLG4uYXR0cmlidXRlcyxmdW5jdGlvbigpe3JldHVybiEwfSksaih0LGUscixuLnVuaWZvcm1zLGZ1bmN0aW9uKCl7cmV0dXJuITB9KSxWKHQsZSxlLHIpfWZ1bmN0aW9uIEcodCxlLHIsbil7ZnVuY3Rpb24gaSgpe3JldHVybiEwfXQuYmF0Y2hJZD0iYTEiLEwodCxlKSxOKHQsZSxyLG4uYXR0cmlidXRlcyxpKSxqKHQsZSxyLG4udW5pZm9ybXMsaSksVih0LGUsZSxyKX1mdW5jdGlvbiBZKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQuY29udGV4dERlcCYmb3x8dC5wcm9wRGVwfWZ1bmN0aW9uIGEodCl7cmV0dXJuIWkodCl9TCh0LGUpO3ZhciBvPXIuY29udGV4dERlcCxzPWUuZGVmKCksbD1lLmRlZigpO3Quc2hhcmVkLnByb3BzPWwsdC5iYXRjaElkPXM7dmFyIGM9dC5zY29wZSgpLHU9dC5zY29wZSgpO2UoYy5lbnRyeSwiZm9yKCIscywiPTA7IixzLCI8IiwiYTEiLCI7KysiLHMsIil7IixsLCI9IiwiYTAiLCJbIixzLCJdOyIsdSwifSIsYy5leGl0KSxyLm5lZWRzQ29udGV4dCYmTSh0LHUsci5jb250ZXh0KSxyLm5lZWRzRnJhbWVidWZmZXImJlModCx1LHIuZnJhbWVidWZmZXIpLEModCx1LHIuc3RhdGUsaSksci5wcm9maWxlJiZpKHIucHJvZmlsZSkmJkIodCx1LHIsITEsITApLG4/KE4odCxjLHIsbi5hdHRyaWJ1dGVzLGEpLE4odCx1LHIsbi5hdHRyaWJ1dGVzLGkpLGoodCxjLHIsbi51bmlmb3JtcyxhKSxqKHQsdSxyLG4udW5pZm9ybXMsaSksVih0LGMsdSxyKSk6KGU9dC5nbG9iYWwuZGVmKCJ7fSIpLG49ci5zaGFkZXIucHJvZ1Zhci5hcHBlbmQodCx1KSxsPXUuZGVmKG4sIi5pZCIpLGM9dS5kZWYoZSwiWyIsbCwiXSIpLHUodC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsbiwiLnByb2dyYW0pOyIsImlmKCEiLGMsIil7IixjLCI9IixlLCJbIixsLCJdPSIsdC5saW5rKGZ1bmN0aW9uKGUpe3JldHVybiBxKEcsdCxyLGUsMil9KSwiKCIsbiwiKTt9IixjLCIuY2FsbCh0aGlzLGEwWyIscywiXSwiLHMsIik7IikpfWZ1bmN0aW9uIFcodCxyKXtmdW5jdGlvbiBuKGUpe3ZhciBuPXIuc2hhZGVyW2VdO24mJmkuc2V0KGEuc2hhZGVyLCIuIitlLG4uYXBwZW5kKHQsaSkpfXZhciBpPXQucHJvYygic2NvcGUiLDMpO3QuYmF0Y2hJZD0iYTIiO3ZhciBhPXQuc2hhcmVkLG89YS5jdXJyZW50O00odCxpLHIuY29udGV4dCksci5mcmFtZWJ1ZmZlciYmci5mcmFtZWJ1ZmZlci5hcHBlbmQodCxpKSxJKE9iamVjdC5rZXlzKHIuc3RhdGUpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuc3RhdGVbZV0uYXBwZW5kKHQsaSk7dihuKT9uLmZvckVhY2goZnVuY3Rpb24ocixuKXtpLnNldCh0Lm5leHRbZV0sIlsiK24rIl0iLHIpfSk6aS5zZXQoYS5uZXh0LCIuIitlLG4pfSksQih0LGksciwhMCwhMCksWyJlbGVtZW50cyIsIm9mZnNldCIsImNvdW50IiwiaW5zdGFuY2VzIiwicHJpbWl0aXZlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1yLmRyYXdbZV07biYmaS5zZXQoYS5kcmF3LCIuIitlLCIiK24uYXBwZW5kKHQsaSkpfSksT2JqZWN0LmtleXMoci51bmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbihuKXtpLnNldChhLnVuaWZvcm1zLCJbIitlLmlkKG4pKyJdIixyLnVuaWZvcm1zW25dLmFwcGVuZCh0LGkpKX0pLE9iamVjdC5rZXlzKHIuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1yLmF0dHJpYnV0ZXNbZV0uYXBwZW5kKHQsaSksYT10LnNjb3BlQXR0cmliKGUpO09iamVjdC5rZXlzKG5ldyBaKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kuc2V0KGEsIi4iK3Qsblt0XSl9KX0pLG4oInZlcnQiKSxuKCJmcmFnIiksMDxPYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJihpKG8sIi5kaXJ0eT10cnVlOyIpLGkuZXhpdChvLCIuZGlydHk9dHJ1ZTsiKSksaSgiYTEoIix0LnNoYXJlZC5jb250ZXh0LCIsYTAsIix0LmJhdGNoSWQsIik7Iil9ZnVuY3Rpb24gWCh0LGUscil7dmFyIG49ZS5zdGF0aWNbcl07aWYobiYmZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhdih0KSl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLHI9MDtyPGUubGVuZ3RoOysrcilpZihVLmlzRHluYW1pYyh0W2Vbcl1dKSlyZXR1cm4hMDtyZXR1cm4hMX19KG4pKXt2YXIgaT10Lmdsb2JhbCxhPU9iamVjdC5rZXlzKG4pLG89ITEscz0hMSxsPSExLGM9dC5nbG9iYWwuZGVmKCJ7fSIpO2EuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1uW2VdO2lmKFUuaXNEeW5hbWljKHIpKSJmdW5jdGlvbiI9PXR5cGVvZiByJiYocj1uW2VdPVUudW5ib3gocikpLGU9RihyLG51bGwpLG89b3x8ZS50aGlzRGVwLGw9bHx8ZS5wcm9wRGVwLHM9c3x8ZS5jb250ZXh0RGVwO2Vsc2V7c3dpdGNoKGkoYywiLiIsZSwiPSIpLHR5cGVvZiByKXtjYXNlIm51bWJlciI6aShyKTticmVhaztjYXNlInN0cmluZyI6aSgnIicsciwnIicpO2JyZWFrO2Nhc2Uib2JqZWN0IjpBcnJheS5pc0FycmF5KHIpJiZpKCJbIixyLmpvaW4oKSwiXSIpO2JyZWFrO2RlZmF1bHQ6aSh0LmxpbmsocikpfWkoIjsiKX19KSxlLmR5bmFtaWNbcl09bmV3IFUuRHluYW1pY1ZhcmlhYmxlKDQse3RoaXNEZXA6byxjb250ZXh0RGVwOnMscHJvcERlcDpsLHJlZjpjLGFwcGVuZDpmdW5jdGlvbih0LGUpe2EuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgaT1uW3JdO1UuaXNEeW5hbWljKGkpJiYoaT10Lmludm9rZShlLGkpLGUoYywiLiIsciwiPSIsaSwiOyIpKX0pfX0pLGRlbGV0ZSBlLnN0YXRpY1tyXX19dmFyIFo9dS5SZWNvcmQsJD17YWRkOjMyNzc0LHN1YnRyYWN0OjMyNzc4LCJyZXZlcnNlIHN1YnRyYWN0IjozMjc3OX07ci5leHRfYmxlbmRfbWlubWF4JiYoJC5taW49MzI3NzUsJC5tYXg9MzI3NzYpO3ZhciBLPXIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyxRPXIud2ViZ2xfZHJhd19idWZmZXJzLHR0PXtkaXJ0eTohMCxwcm9maWxlOmcucHJvZmlsZX0sZXQ9e30sbnQ9W10saXQ9e30sYXQ9e307eSgiZGl0aGVyIiwzMDI0KSx5KCJibGVuZC5lbmFibGUiLDMwNDIpLHgoImJsZW5kLmNvbG9yIiwiYmxlbmRDb2xvciIsWzAsMCwwLDBdKSx4KCJibGVuZC5lcXVhdGlvbiIsImJsZW5kRXF1YXRpb25TZXBhcmF0ZSIsWzMyNzc0LDMyNzc0XSkseCgiYmxlbmQuZnVuYyIsImJsZW5kRnVuY1NlcGFyYXRlIixbMSwwLDEsMF0pLHkoImRlcHRoLmVuYWJsZSIsMjkyOSwhMCkseCgiZGVwdGguZnVuYyIsImRlcHRoRnVuYyIsNTEzKSx4KCJkZXB0aC5yYW5nZSIsImRlcHRoUmFuZ2UiLFswLDFdKSx4KCJkZXB0aC5tYXNrIiwiZGVwdGhNYXNrIiwhMCkseCgiY29sb3JNYXNrIiwiY29sb3JNYXNrIixbITAsITAsITAsITBdKSx5KCJjdWxsLmVuYWJsZSIsMjg4NCkseCgiY3VsbC5mYWNlIiwiY3VsbEZhY2UiLDEwMjkpLHgoImZyb250RmFjZSIsImZyb250RmFjZSIsMjMwNSkseCgibGluZVdpZHRoIiwibGluZVdpZHRoIiwxKSx5KCJwb2x5Z29uT2Zmc2V0LmVuYWJsZSIsMzI4MjMpLHgoInBvbHlnb25PZmZzZXQub2Zmc2V0IiwicG9seWdvbk9mZnNldCIsWzAsMF0pLHkoInNhbXBsZS5hbHBoYSIsMzI5MjYpLHkoInNhbXBsZS5lbmFibGUiLDMyOTI4KSx4KCJzYW1wbGUuY292ZXJhZ2UiLCJzYW1wbGVDb3ZlcmFnZSIsWzEsITFdKSx5KCJzdGVuY2lsLmVuYWJsZSIsMjk2MCkseCgic3RlbmNpbC5tYXNrIiwic3RlbmNpbE1hc2siLC0xKSx4KCJzdGVuY2lsLmZ1bmMiLCJzdGVuY2lsRnVuYyIsWzUxOSwwLC0xXSkseCgic3RlbmNpbC5vcEZyb250Iiwic3RlbmNpbE9wU2VwYXJhdGUiLFsxMDI4LDc2ODAsNzY4MCw3NjgwXSkseCgic3RlbmNpbC5vcEJhY2siLCJzdGVuY2lsT3BTZXBhcmF0ZSIsWzEwMjksNzY4MCw3NjgwLDc2ODBdKSx5KCJzY2lzc29yLmVuYWJsZSIsMzA4OSkseCgic2Npc3Nvci5ib3giLCJzY2lzc29yIixbMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0pLHgoInZpZXdwb3J0Iiwidmlld3BvcnQiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSk7dmFyIG90PXtnbDp0LGNvbnRleHQ6cCxzdHJpbmdzOmUsbmV4dDpldCxjdXJyZW50OnR0LGRyYXc6aCxlbGVtZW50czpvLGJ1ZmZlcjppLHNoYWRlcjpmLGF0dHJpYnV0ZXM6dS5zdGF0ZSx1bmlmb3JtczpjLGZyYW1lYnVmZmVyOmwsZXh0ZW5zaW9uczpyLHRpbWVyOmQsaXNCdWZmZXJBcmdzOk99LHN0PXtwcmltVHlwZXM6cnQsY29tcGFyZUZ1bmNzOmt0LGJsZW5kRnVuY3M6d3QsYmxlbmRFcXVhdGlvbnM6JCxzdGVuY2lsT3BzOlR0LGdsVHlwZXM6SixvcmllbnRhdGlvblR5cGU6QXR9O1EmJihzdC5iYWNrQnVmZmVyPVsxMDI5XSxzdC5kcmF3QnVmZmVyPWEobi5tYXhEcmF3YnVmZmVycyxmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQ/WzBdOmEodCxmdW5jdGlvbih0KXtyZXR1cm4gMzYwNjQrdH0pfSkpO3ZhciBsdD0wO3JldHVybntuZXh0OmV0LGN1cnJlbnQ6dHQscHJvY3M6ZnVuY3Rpb24oKXt2YXIgdD1iKCksZT10LnByb2MoInBvbGwiKSxyPXQucHJvYygicmVmcmVzaCIpLGk9dC5ibG9jaygpO2UoaSkscihpKTt2YXIgbyxzPXQuc2hhcmVkLGw9cy5nbCxjPXMubmV4dCx1PXMuY3VycmVudDtpKHUsIi5kaXJ0eT1mYWxzZTsiKSxTKHQsZSksUyh0LHIsbnVsbCwhMCksSyYmKG89dC5saW5rKEspKTtmb3IodmFyIGY9MDtmPG4ubWF4QXR0cmlidXRlczsrK2Ype3ZhciBoPXIuZGVmKHMuYXR0cmlidXRlcywiWyIsZiwiXSIpLHA9dC5jb25kKGgsIi5idWZmZXIiKTtwLnRoZW4obCwiLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsZiwiKTsiLGwsIi5iaW5kQnVmZmVyKCIsMzQ5NjIsIiwiLGgsIi5idWZmZXIuYnVmZmVyKTsiLGwsIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKCIsZiwiLCIsaCwiLnNpemUsIixoLCIudHlwZSwiLGgsIi5ub3JtYWxpemVkLCIsaCwiLnN0cmlkZSwiLGgsIi5vZmZzZXQpOyIpLmVsc2UobCwiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGYsIik7IixsLCIudmVydGV4QXR0cmliNGYoIixmLCIsIixoLCIueCwiLGgsIi55LCIsaCwiLnosIixoLCIudyk7IixoLCIuYnVmZmVyPW51bGw7IikscihwKSxLJiZyKG8sIi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoIixmLCIsIixoLCIuZGl2aXNvcik7Iil9cmV0dXJuIE9iamVjdC5rZXlzKGl0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBhPWl0W25dLG89aS5kZWYoYywiLiIsbikscz10LmJsb2NrKCk7cygiaWYoIixvLCIpeyIsbCwiLmVuYWJsZSgiLGEsIil9ZWxzZXsiLGwsIi5kaXNhYmxlKCIsYSwiKX0iLHUsIi4iLG4sIj0iLG8sIjsiKSxyKHMpLGUoImlmKCIsbywiIT09Iix1LCIuIixuLCIpeyIscywifSIpfSksT2JqZWN0LmtleXMoYXQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG8scyxmPWF0W25dLGg9dHRbbl0scD10LmJsb2NrKCk7cChsLCIuIixmLCIoIiksdihoKT8oZj1oLmxlbmd0aCxvPXQuZ2xvYmFsLmRlZihjLCIuIixuKSxzPXQuZ2xvYmFsLmRlZih1LCIuIixuKSxwKGEoZixmdW5jdGlvbih0KXtyZXR1cm4gbysiWyIrdCsiXSJ9KSwiKTsiLGEoZixmdW5jdGlvbih0KXtyZXR1cm4gcysiWyIrdCsiXT0iK28rIlsiK3QrIl07In0pLmpvaW4oIiIpKSxlKCJpZigiLGEoZixmdW5jdGlvbih0KXtyZXR1cm4gbysiWyIrdCsiXSE9PSIrcysiWyIrdCsiXSJ9KS5qb2luKCJ8fCIpLCIpeyIscCwifSIpKToobz1pLmRlZihjLCIuIixuKSxzPWkuZGVmKHUsIi4iLG4pLHAobywiKTsiLHUsIi4iLG4sIj0iLG8sIjsiKSxlKCJpZigiLG8sIiE9PSIscywiKXsiLHAsIn0iKSkscihwKX0pLHQuY29tcGlsZSgpfSgpLGNvbXBpbGU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1iKCk7cmV0dXJuIGEuc3RhdHM9YS5saW5rKGkpLE9iamVjdC5rZXlzKGUuc3RhdGljKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1goYSxlLHQpfSksX3QuZm9yRWFjaChmdW5jdGlvbihlKXtYKGEsdCxlKX0pLHI9QSh0LGUscixuKSxmdW5jdGlvbih0LGUpe3ZhciByPXQucHJvYygiZHJhdyIsMSk7TCh0LHIpLE0odCxyLGUuY29udGV4dCksUyh0LHIsZS5mcmFtZWJ1ZmZlciksRSh0LHIsZSksQyh0LHIsZS5zdGF0ZSksQih0LHIsZSwhMSwhMCk7dmFyIG49ZS5zaGFkZXIucHJvZ1Zhci5hcHBlbmQodCxyKTtpZihyKHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLG4sIi5wcm9ncmFtKTsiKSxlLnNoYWRlci5wcm9ncmFtKUgodCxyLGUsZS5zaGFkZXIucHJvZ3JhbSk7ZWxzZXt2YXIgaT10Lmdsb2JhbC5kZWYoInt9IiksYT1yLmRlZihuLCIuaWQiKSxvPXIuZGVmKGksIlsiLGEsIl0iKTtyKHQuY29uZChvKS50aGVuKG8sIi5jYWxsKHRoaXMsYTApOyIpLmVsc2UobywiPSIsaSwiWyIsYSwiXT0iLHQubGluayhmdW5jdGlvbihyKXtyZXR1cm4gcShILHQsZSxyLDEpfSksIigiLG4sIik7IixvLCIuY2FsbCh0aGlzLGEwKTsiKSl9MDxPYmplY3Qua2V5cyhlLnN0YXRlKS5sZW5ndGgmJnIodC5zaGFyZWQuY3VycmVudCwiLmRpcnR5PXRydWU7Iil9KGEsciksVyhhLHIpLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKCJiYXRjaCIsMik7dC5iYXRjaElkPSIwIixMKHQsbik7dmFyIGk9ITEsYT0hMDtPYmplY3Qua2V5cyhlLmNvbnRleHQpLmZvckVhY2goZnVuY3Rpb24odCl7aT1pfHxlLmNvbnRleHRbdF0ucHJvcERlcH0pLGl8fChNKHQsbixlLmNvbnRleHQpLGE9ITEpO3ZhciBvPSExO2lmKChzPWUuZnJhbWVidWZmZXIpPyhzLnByb3BEZXA/aT1vPSEwOnMuY29udGV4dERlcCYmaSYmKG89ITApLG98fFModCxuLHMpKTpTKHQsbixudWxsKSxlLnN0YXRlLnZpZXdwb3J0JiZlLnN0YXRlLnZpZXdwb3J0LnByb3BEZXAmJihpPSEwKSxFKHQsbixlKSxDKHQsbixlLnN0YXRlLGZ1bmN0aW9uKHQpe3JldHVybiFyKHQpfSksZS5wcm9maWxlJiZyKGUucHJvZmlsZSl8fEIodCxuLGUsITEsImExIiksZS5jb250ZXh0RGVwPWksZS5uZWVkc0NvbnRleHQ9YSxlLm5lZWRzRnJhbWVidWZmZXI9bywoYT1lLnNoYWRlci5wcm9nVmFyKS5jb250ZXh0RGVwJiZpfHxhLnByb3BEZXApWSh0LG4sZSxudWxsKTtlbHNlIGlmKGE9YS5hcHBlbmQodCxuKSxuKHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLGEsIi5wcm9ncmFtKTsiKSxlLnNoYWRlci5wcm9ncmFtKVkodCxuLGUsZS5zaGFkZXIucHJvZ3JhbSk7ZWxzZXt2YXIgcz10Lmdsb2JhbC5kZWYoInt9IiksbD0obz1uLmRlZihhLCIuaWQiKSxuLmRlZihzLCJbIixvLCJdIikpO24odC5jb25kKGwpLnRoZW4obCwiLmNhbGwodGhpcyxhMCxhMSk7IikuZWxzZShsLCI9IixzLCJbIixvLCJdPSIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBxKFksdCxlLHIsMil9KSwiKCIsYSwiKTsiLGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmbih0LnNoYXJlZC5jdXJyZW50LCIuZGlydHk9dHJ1ZTsiKX0oYSxyKSxhLmNvbXBpbGUoKX19fWZ1bmN0aW9uIE4odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX12YXIgaj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPTA7bjxyLmxlbmd0aDsrK24pdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fSxWPTAsVT17RHluYW1pY1ZhcmlhYmxlOnQsZGVmaW5lOmZ1bmN0aW9uKHIsbil7cmV0dXJuIG5ldyB0KHIsZShuKyIiKSl9LGlzRHluYW1pYzpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIWUuX3JlZ2xUeXBlfHxlIGluc3RhbmNlb2YgdH0sdW5ib3g6ZnVuY3Rpb24oZSxyKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9uZXcgdCgwLGUpOmV9LGFjY2Vzc29yOmV9LHE9e25leHQ6ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4gc2V0VGltZW91dCh0LDE2KX0sY2FuY2VsOiJmdW5jdGlvbiI9PXR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gY2FuY2VsQW5pbWF0aW9uRnJhbWUodCl9OmNsZWFyVGltZW91dH0sSD0idW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxHPXMoKTtHLnplcm89cygpO3ZhciBZPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MTtlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmKHI9dC5nZXRQYXJhbWV0ZXIoMzQwNDcpKTt2YXIgbj0xLGk9MTtlLndlYmdsX2RyYXdfYnVmZmVycyYmKG49dC5nZXRQYXJhbWV0ZXIoMzQ4NTIpLGk9dC5nZXRQYXJhbWV0ZXIoMzYwNjMpKTt2YXIgYT0hIWUub2VzX3RleHR1cmVfZmxvYXQ7aWYoYSl7YT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKDM1NTMsYSksdC50ZXhJbWFnZTJEKDM1NTMsMCw2NDA4LDEsMSwwLDY0MDgsNTEyNixudWxsKTt2YXIgbz10LmNyZWF0ZUZyYW1lYnVmZmVyKCk7aWYodC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbyksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNTUzLGEsMCksdC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpLDM2MDUzIT09dC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKSlhPSExO2Vsc2V7dC52aWV3cG9ydCgwLDAsMSwxKSx0LmNsZWFyQ29sb3IoMSwwLDAsMSksdC5jbGVhcigxNjM4NCk7dmFyIHM9Ry5hbGxvY1R5cGUoNTEyNiw0KTt0LnJlYWRQaXhlbHMoMCwwLDEsMSw2NDA4LDUxMjYscyksdC5nZXRFcnJvcigpP2E9ITE6KHQuZGVsZXRlRnJhbWVidWZmZXIobyksdC5kZWxldGVUZXh0dXJlKGEpLGE9MT09PXNbMF0pLEcuZnJlZVR5cGUocyl9fXJldHVybiBzPSEwLCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pfHwvRWRnZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl8fChzPXQuY3JlYXRlVGV4dHVyZSgpLG89Ry5hbGxvY1R5cGUoNTEyMSwzNiksdC5hY3RpdmVUZXh0dXJlKDMzOTg0KSx0LmJpbmRUZXh0dXJlKDM0MDY3LHMpLHQudGV4SW1hZ2UyRCgzNDA2OSwwLDY0MDgsMywzLDAsNjQwOCw1MTIxLG8pLEcuZnJlZVR5cGUobyksdC5iaW5kVGV4dHVyZSgzNDA2NyxudWxsKSx0LmRlbGV0ZVRleHR1cmUocykscz0hdC5nZXRFcnJvcigpKSx7Y29sb3JCaXRzOlt0LmdldFBhcmFtZXRlcigzNDEwKSx0LmdldFBhcmFtZXRlcigzNDExKSx0LmdldFBhcmFtZXRlcigzNDEyKSx0LmdldFBhcmFtZXRlcigzNDEzKV0sZGVwdGhCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTQpLHN0ZW5jaWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTUpLHN1YnBpeGVsQml0czp0LmdldFBhcmFtZXRlcigzNDA4KSxleHRlbnNpb25zOk9iamVjdC5rZXlzKGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hIWVbdF19KSxtYXhBbmlzb3Ryb3BpYzpyLG1heERyYXdidWZmZXJzOm4sbWF4Q29sb3JBdHRhY2htZW50czppLHBvaW50U2l6ZURpbXM6dC5nZXRQYXJhbWV0ZXIoMzM5MDEpLGxpbmVXaWR0aERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM5MDIpLG1heFZpZXdwb3J0RGltczp0LmdldFBhcmFtZXRlcigzMzg2KSxtYXhDb21iaW5lZFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNTY2MSksbWF4Q3ViZU1hcFNpemU6dC5nZXRQYXJhbWV0ZXIoMzQwNzYpLG1heFJlbmRlcmJ1ZmZlclNpemU6dC5nZXRQYXJhbWV0ZXIoMzQwMjQpLG1heFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNDkzMCksbWF4VGV4dHVyZVNpemU6dC5nZXRQYXJhbWV0ZXIoMzM3OSksbWF4QXR0cmlidXRlczp0LmdldFBhcmFtZXRlcigzNDkyMSksbWF4VmVydGV4VW5pZm9ybXM6dC5nZXRQYXJhbWV0ZXIoMzYzNDcpLG1heFZlcnRleFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNTY2MCksbWF4VmFyeWluZ1ZlY3RvcnM6dC5nZXRQYXJhbWV0ZXIoMzYzNDgpLG1heEZyYWdtZW50VW5pZm9ybXM6dC5nZXRQYXJhbWV0ZXIoMzYzNDkpLGdsc2w6dC5nZXRQYXJhbWV0ZXIoMzU3MjQpLHJlbmRlcmVyOnQuZ2V0UGFyYW1ldGVyKDc5MzcpLHZlbmRvcjp0LmdldFBhcmFtZXRlcig3OTM2KSx2ZXJzaW9uOnQuZ2V0UGFyYW1ldGVyKDc5MzgpLHJlYWRGbG9hdDphLG5wb3RUZXh0dXJlQ3ViZTpzfX0sVz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHx0IGluc3RhbmNlb2YgSW50OEFycmF5fHx0IGluc3RhbmNlb2YgSW50MTZBcnJheXx8dCBpbnN0YW5jZW9mIEludDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheX0sWD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LFo9e3NoYXBlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0Lmxlbmd0aDt0PXRbMF0pZS5wdXNoKHQubGVuZ3RoKTtyZXR1cm4gZX0sZmxhdHRlbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xO2lmKGUubGVuZ3RoKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKWkqPWVbYV07ZWxzZSBpPTA7c3dpdGNoKHI9bnx8Ry5hbGxvY1R5cGUocixpKSxlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpmb3Iobj1lWzBdLGU9MDtlPG47KytlKXJbZV09dFtlXTticmVhaztjYXNlIDI6Zm9yKG49ZVswXSxlPWVbMV0sYT1pPTA7YTxuOysrYSlmb3IodmFyIG89dFthXSxzPTA7czxlOysrcylyW2krK109b1tzXTticmVhaztjYXNlIDM6Yyh0LGVbMF0sZVsxXSxlWzJdLHIsMCk7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gdChlLHIsbixpLGEpe2Zvcih2YXIgbz0xLHM9bisxO3M8ci5sZW5ndGg7KytzKW8qPXJbc107dmFyIGw9cltuXTtpZig0PT1yLmxlbmd0aC1uKXt2YXIgdT1yW24rMV0sZj1yW24rMl07Zm9yKHI9cltuKzNdLHM9MDtzPGw7KytzKWMoZVtzXSx1LGYscixpLGEpLGErPW99ZWxzZSBmb3Iocz0wO3M8bDsrK3MpdChlW3NdLHIsbisxLGksYSksYSs9b30odCxlLDAsciwwKX1yZXR1cm4gcn19LCQ9eyJbb2JqZWN0IEludDhBcnJheV0iOjUxMjAsIltvYmplY3QgSW50MTZBcnJheV0iOjUxMjIsIltvYmplY3QgSW50MzJBcnJheV0iOjUxMjQsIltvYmplY3QgVWludDhBcnJheV0iOjUxMjEsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQxNkFycmF5XSI6NTEyMywiW29iamVjdCBVaW50MzJBcnJheV0iOjUxMjUsIltvYmplY3QgRmxvYXQzMkFycmF5XSI6NTEyNiwiW29iamVjdCBGbG9hdDY0QXJyYXldIjo1MTIxLCJbb2JqZWN0IEFycmF5QnVmZmVyXSI6NTEyMX0sSj17aW50ODo1MTIwLGludDE2OjUxMjIsaW50MzI6NTEyNCx1aW50ODo1MTIxLHVpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LGZsb2F0OjUxMjYsZmxvYXQzMjo1MTI2fSxLPXtkeW5hbWljOjM1MDQ4LHN0cmVhbTozNTA0MCxzdGF0aWM6MzUwNDR9LFE9Wi5mbGF0dGVuLHR0PVouc2hhcGUsZXQ9W107ZXRbNTEyMF09MSxldFs1MTIyXT0yLGV0WzUxMjRdPTQsZXRbNTEyMV09MSxldFs1MTIzXT0yLGV0WzUxMjVdPTQsZXRbNTEyNl09NDt2YXIgcnQ9e3BvaW50czowLHBvaW50OjAsbGluZXM6MSxsaW5lOjEsdHJpYW5nbGVzOjQsdHJpYW5nbGU6NCwibGluZSBsb29wIjoyLCJsaW5lIHN0cmlwIjozLCJ0cmlhbmdsZSBzdHJpcCI6NSwidHJpYW5nbGUgZmFuIjo2fSxudD1uZXcgRmxvYXQzMkFycmF5KDEpLGl0PW5ldyBVaW50MzJBcnJheShudC5idWZmZXIpLGF0PVs5OTg0LDk5ODYsOTk4NSw5OTg3XSxvdD1bMCw2NDA5LDY0MTAsNjQwNyw2NDA4XSxzdD17fTtzdFs2NDA5XT1zdFs2NDA2XT1zdFs2NDAyXT0xLHN0WzM0MDQxXT1zdFs2NDEwXT0yLHN0WzY0MDddPXN0WzM1OTA0XT0zLHN0WzY0MDhdPXN0WzM1OTA2XT00O3ZhciBsdD1tKCJIVE1MQ2FudmFzRWxlbWVudCIpLGN0PW0oIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIpLHV0PW0oIkltYWdlQml0bWFwIiksZnQ9bSgiSFRNTEltYWdlRWxlbWVudCIpLGh0PW0oIkhUTUxWaWRlb0VsZW1lbnQiKSxwdD1PYmplY3Qua2V5cygkKS5jb25jYXQoW2x0LGN0LHV0LGZ0LGh0XSksZHQ9W107ZHRbNTEyMV09MSxkdFs1MTI2XT00LGR0WzM2MTkzXT0yLGR0WzUxMjNdPTIsZHRbNTEyNV09NDt2YXIgZ3Q9W107Z3RbMzI4NTRdPTIsZ3RbMzI4NTVdPTIsZ3RbMzYxOTRdPTIsZ3RbMzQwNDFdPTQsZ3RbMzM3NzZdPS41LGd0WzMzNzc3XT0uNSxndFszMzc3OF09MSxndFszMzc3OV09MSxndFszNTk4Nl09LjUsZ3RbMzU5ODddPTEsZ3RbMzQ3OThdPTEsZ3RbMzU4NDBdPS41LGd0WzM1ODQxXT0uMjUsZ3RbMzU4NDJdPS41LGd0WzM1ODQzXT0uMjUsZ3RbMzYxOTZdPS41O3ZhciB2dD1bXTt2dFszMjg1NF09Mix2dFszMjg1NV09Mix2dFszNjE5NF09Mix2dFszMzE4OV09Mix2dFszNjE2OF09MSx2dFszNDA0MV09NCx2dFszNTkwN109NCx2dFszNDgzNl09MTYsdnRbMzQ4NDJdPTgsdnRbMzQ4NDNdPTY7dmFyIG10PWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt0aGlzLmlkPWMrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy5yZW5kZXJidWZmZXI9dCx0aGlzLmZvcm1hdD0zMjg1NCx0aGlzLmhlaWdodD10aGlzLndpZHRoPTAsaS5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLnJlbmRlcmJ1ZmZlcjt0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksdC5kZWxldGVSZW5kZXJidWZmZXIociksZS5yZW5kZXJidWZmZXI9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIHVbZS5pZF0sbi5yZW5kZXJidWZmZXJDb3VudC0tfXZhciBzPXtyZ2JhNDozMjg1NCxyZ2I1NjU6MzYxOTQsInJnYjUgYTEiOjMyODU1LGRlcHRoOjMzMTg5LHN0ZW5jaWw6MzYxNjgsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfTtlLmV4dF9zcmdiJiYocy5zcmdiYT0zNTkwNyksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJihzLnJnYmExNmY9MzQ4NDIscy5yZ2IxNmY9MzQ4NDMpLGUud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0JiYocy5yZ2JhMzJmPTM0ODM2KTt2YXIgbD1bXTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbc1t0XV09dH0pO3ZhciBjPTAsdT17fTtyZXR1cm4gYS5wcm90b3R5cGUuZGVjUmVmPWZ1bmN0aW9uKCl7MD49LS10aGlzLnJlZkNvdW50JiZvKHRoaXMpfSxpLnByb2ZpbGUmJihuLmdldFRvdGFsUmVuZGVyYnVmZmVyU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24oZSl7dCs9dVtlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUscil7dmFyIG49MCxhPTAsdT0zMjg1NDtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmU/KCJzaGFwZSJpbiBlPyhuPTB8KGE9ZS5zaGFwZSlbMF0sYT0wfGFbMV0pOigicmFkaXVzImluIGUmJihuPWE9MHxlLnJhZGl1cyksIndpZHRoImluIGUmJihuPTB8ZS53aWR0aCksImhlaWdodCJpbiBlJiYoYT0wfGUuaGVpZ2h0KSksImZvcm1hdCJpbiBlJiYodT1zW2UuZm9ybWF0XSkpOiJudW1iZXIiPT10eXBlb2YgZT8obj0wfGUsYT0ibnVtYmVyIj09dHlwZW9mIHI/MHxyOm4pOmV8fChuPWE9MSksbiE9PWMud2lkdGh8fGEhPT1jLmhlaWdodHx8dSE9PWMuZm9ybWF0KXJldHVybiBvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLGMuZm9ybWF0PXUsdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGMucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsdSxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksby5mb3JtYXQ9bFtjLmZvcm1hdF0sb312YXIgYz1uZXcgYSh0LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtyZXR1cm4gdVtjLmlkXT1jLG4ucmVuZGVyYnVmZmVyQ291bnQrKyxvKGUsciksby5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wfGUsYT0wfHJ8fG47cmV0dXJuIG49PT1jLndpZHRoJiZhPT09Yy5oZWlnaHQ/bzooby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxjLmZvcm1hdCxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksbyl9LG8uX3JlZ2xUeXBlPSJyZW5kZXJidWZmZXIiLG8uX3JlbmRlcmJ1ZmZlcj1jLGkucHJvZmlsZSYmKG8uc3RhdHM9Yy5zdGF0cyksby5kZXN0cm95PWZ1bmN0aW9uKCl7Yy5kZWNSZWYoKX0sb30sY2xlYXI6ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2gobyl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsZS5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxlLmZvcm1hdCxlLndpZHRoLGUuaGVpZ2h0KX0pLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX19fSx5dD1bXTt5dFs2NDA4XT00LHl0WzY0MDddPTM7dmFyIHh0PVtdO3h0WzUxMjFdPTEseHRbNTEyNl09NCx4dFszNjE5M109Mjt2YXIgYnQ9WyJ4IiwieSIsInoiLCJ3Il0sX3Q9ImJsZW5kLmZ1bmMgYmxlbmQuZXF1YXRpb24gc3RlbmNpbC5mdW5jIHN0ZW5jaWwub3BGcm9udCBzdGVuY2lsLm9wQmFjayBzYW1wbGUuY292ZXJhZ2Ugdmlld3BvcnQgc2Npc3Nvci5ib3ggcG9seWdvbk9mZnNldC5vZmZzZXQiLnNwbGl0KCIgIiksd3Q9ezA6MCwxOjEsemVybzowLG9uZToxLCJzcmMgY29sb3IiOjc2OCwib25lIG1pbnVzIHNyYyBjb2xvciI6NzY5LCJzcmMgYWxwaGEiOjc3MCwib25lIG1pbnVzIHNyYyBhbHBoYSI6NzcxLCJkc3QgY29sb3IiOjc3NCwib25lIG1pbnVzIGRzdCBjb2xvciI6Nzc1LCJkc3QgYWxwaGEiOjc3Miwib25lIG1pbnVzIGRzdCBhbHBoYSI6NzczLCJjb25zdGFudCBjb2xvciI6MzI3NjksIm9uZSBtaW51cyBjb25zdGFudCBjb2xvciI6MzI3NzAsImNvbnN0YW50IGFscGhhIjozMjc3MSwib25lIG1pbnVzIGNvbnN0YW50IGFscGhhIjozMjc3Miwic3JjIGFscGhhIHNhdHVyYXRlIjo3NzZ9LGt0PXtuZXZlcjo1MTIsbGVzczo1MTMsIjwiOjUxMyxlcXVhbDo1MTQsIj0iOjUxNCwiPT0iOjUxNCwiPT09Ijo1MTQsbGVxdWFsOjUxNSwiPD0iOjUxNSxncmVhdGVyOjUxNiwiPiI6NTE2LG5vdGVxdWFsOjUxNywiIT0iOjUxNywiIT09Ijo1MTcsZ2VxdWFsOjUxOCwiPj0iOjUxOCxhbHdheXM6NTE5fSxUdD17MDowLHplcm86MCxrZWVwOjc2ODAscmVwbGFjZTo3NjgxLGluY3JlbWVudDo3NjgyLGRlY3JlbWVudDo3NjgzLCJpbmNyZW1lbnQgd3JhcCI6MzQwNTUsImRlY3JlbWVudCB3cmFwIjozNDA1NixpbnZlcnQ6NTM4Nn0sQXQ9e2N3OjIzMDQsY2N3OjIzMDV9LE10PW5ldyBEKCExLCExLCExLGZ1bmN0aW9uKCl7fSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtpZigwPT09Wi5sZW5ndGgpdyYmdy51cGRhdGUoKSxRPW51bGw7ZWxzZXtRPXEubmV4dChlKSxmKCk7Zm9yKHZhciB0PVoubGVuZ3RoLTE7MDw9dDstLXQpe3ZhciByPVpbdF07ciYmcih6LG51bGwsMCl9di5mbHVzaCgpLHcmJncudXBkYXRlKCl9fWZ1bmN0aW9uIHIoKXshUSYmMDxaLmxlbmd0aCYmKFE9cS5uZXh0KGUpKX1mdW5jdGlvbiBuKCl7USYmKHEuY2FuY2VsKGUpLFE9bnVsbCl9ZnVuY3Rpb24gYSh0KXt0LnByZXZlbnREZWZhdWx0KCksbigpLCQuZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX1mdW5jdGlvbiBvKHQpe3YuZ2V0RXJyb3IoKSx5LnJlc3RvcmUoKSxQLnJlc3RvcmUoKSxJLnJlc3RvcmUoKSxSLnJlc3RvcmUoKSxGLnJlc3RvcmUoKSxWLnJlc3RvcmUoKSx3JiZ3LnJlc3RvcmUoKSxHLnByb2NzLnJlZnJlc2goKSxyKCksSi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfWZ1bmN0aW9uIHModCl7ZnVuY3Rpb24gZSh0KXt2YXIgZT17fSxyPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl07VS5pc0R5bmFtaWMoaSk/cltuXT1VLnVuYm94KGksbik6ZVtuXT1pfSkse2R5bmFtaWM6cixzdGF0aWM6ZX19dmFyIHI9ZSh0LmNvbnRleHR8fHt9KSxuPWUodC51bmlmb3Jtc3x8e30pLGk9ZSh0LmF0dHJpYnV0ZXN8fHt9KSxhPWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtpZih0IGluIHIpe3ZhciBlPXJbdF07ZGVsZXRlIHJbdF0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXtyW3QrIi4iK25dPWVbbl19KX19dmFyIHI9aih7fSx0KTtyZXR1cm4gZGVsZXRlIHIudW5pZm9ybXMsZGVsZXRlIHIuYXR0cmlidXRlcyxkZWxldGUgci5jb250ZXh0LCJzdGVuY2lsImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoImJsZW5kIiksZSgiZGVwdGgiKSxlKCJjdWxsIiksZSgic3RlbmNpbCIpLGUoInBvbHlnb25PZmZzZXQiKSxlKCJzY2lzc29yIiksZSgic2FtcGxlIikscn0odCkpO3Q9e2dwdVRpbWU6MCxjcHVUaW1lOjAsY291bnQ6MH07dmFyIG89KHI9Ry5jb21waWxlKGEsaSxuLHIsdCkpLmRyYXcscz1yLmJhdGNoLGw9ci5zY29wZSxjPVtdO3JldHVybiBqKGZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIGwuY2FsbCh0aGlzLG51bGwsdCwwKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSlpZigibnVtYmVyIj09dHlwZW9mIHQpZm9yKHI9MDtyPHQ7KytyKWwuY2FsbCh0aGlzLG51bGwsZSxyKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBsLmNhbGwodGhpcyx0LGUsMCk7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcilsLmNhbGwodGhpcyx0W3JdLGUscil9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKDA8dClyZXR1cm4gcy5jYWxsKHRoaXMsZnVuY3Rpb24odCl7Zm9yKDtjLmxlbmd0aDx0OyljLnB1c2gobnVsbCk7cmV0dXJuIGN9KDB8dCksMHx0KX1lbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBvLmNhbGwodGhpcyx0KTtpZih0Lmxlbmd0aClyZXR1cm4gcy5jYWxsKHRoaXMsdCx0Lmxlbmd0aCl9fSx7c3RhdHM6dH0pfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj0wO0cucHJvY3MucG9sbCgpO3ZhciBuPWUuY29sb3I7biYmKHYuY2xlYXJDb2xvcigrblswXXx8MCwrblsxXXx8MCwrblsyXXx8MCwrblszXXx8MCkscnw9MTYzODQpLCJkZXB0aCJpbiBlJiYodi5jbGVhckRlcHRoKCtlLmRlcHRoKSxyfD0yNTYpLCJzdGVuY2lsImluIGUmJih2LmNsZWFyU3RlbmNpbCgwfGUuc3RlbmNpbCkscnw9MTAyNCksdi5jbGVhcihyKX1mdW5jdGlvbiBjKHQpe3JldHVybiBaLnB1c2godCkscigpLHtjYW5jZWw6ZnVuY3Rpb24oKXt2YXIgZT1OKFosdCk7WltlXT1mdW5jdGlvbiB0KCl7dmFyIGU9TihaLHQpO1pbZV09WltaLmxlbmd0aC0xXSwtLVoubGVuZ3RoLDA+PVoubGVuZ3RoJiZuKCl9fX19ZnVuY3Rpb24gdSgpe3ZhciB0PVcudmlld3BvcnQsZT1XLnNjaXNzb3JfYm94O3RbMF09dFsxXT1lWzBdPWVbMV09MCx6LnZpZXdwb3J0V2lkdGg9ei5mcmFtZWJ1ZmZlcldpZHRoPXouZHJhd2luZ0J1ZmZlcldpZHRoPXRbMl09ZVsyXT12LmRyYXdpbmdCdWZmZXJXaWR0aCx6LnZpZXdwb3J0SGVpZ2h0PXouZnJhbWVidWZmZXJIZWlnaHQ9ei5kcmF3aW5nQnVmZmVySGVpZ2h0PXRbM109ZVszXT12LmRyYXdpbmdCdWZmZXJIZWlnaHR9ZnVuY3Rpb24gZigpe3oudGljays9MSx6LnRpbWU9ZygpLHUoKSxHLnByb2NzLnBvbGwoKX1mdW5jdGlvbiBoKCl7dSgpLEcucHJvY3MucmVmcmVzaCgpLHcmJncudXBkYXRlKCl9ZnVuY3Rpb24gZygpe3JldHVybihIKCktaykvMWUzfWlmKCEodD1pKHQpKSlyZXR1cm4gbnVsbDt2YXIgdj10LmdsLG09di5nZXRDb250ZXh0QXR0cmlidXRlcygpO3YuaXNDb250ZXh0TG9zdCgpO3ZhciB5PWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlKXt2YXIgcjtlPWUudG9Mb3dlckNhc2UoKTt0cnl7cj1uW2VdPXQuZ2V0RXh0ZW5zaW9uKGUpfWNhdGNoKHQpe31yZXR1cm4hIXJ9Zm9yKHZhciBuPXt9LGk9MDtpPGUuZXh0ZW5zaW9ucy5sZW5ndGg7KytpKXt2YXIgYT1lLmV4dGVuc2lvbnNbaV07aWYoIXIoYSkpcmV0dXJuIGUub25EZXN0cm95KCksZS5vbkRvbmUoJyInK2ErJyIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgV2ViR0wgY29udGV4dCwgdHJ5IHVwZ3JhZGluZyB5b3VyIHN5c3RlbSBvciBhIGRpZmZlcmVudCBicm93c2VyJyksbnVsbH1yZXR1cm4gZS5vcHRpb25hbEV4dGVuc2lvbnMuZm9yRWFjaChyKSx7ZXh0ZW5zaW9uczpuLHJlc3RvcmU6ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG5bdF0mJiFyKHQpKXRocm93IEVycm9yKCIocmVnbCk6IGVycm9yIHJlc3RvcmluZyBleHRlbnNpb24gIit0KX0pfX19KHYsdCk7aWYoIXkpcmV0dXJuIG51bGw7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgdD17IiI6MH0sZT1bIiJdO3JldHVybntpZDpmdW5jdGlvbihyKXt2YXIgbj10W3JdO3JldHVybiBufHwobj10W3JdPWUubGVuZ3RoLGUucHVzaChyKSxuKX0sc3RyOmZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfX19KCksYj17YnVmZmVyQ291bnQ6MCxlbGVtZW50c0NvdW50OjAsZnJhbWVidWZmZXJDb3VudDowLHNoYWRlckNvdW50OjAsdGV4dHVyZUNvdW50OjAsY3ViZUNvdW50OjAscmVuZGVyYnVmZmVyQ291bnQ6MCxtYXhUZXh0dXJlVW5pdHM6MH0sXz15LmV4dGVuc2lvbnMsdz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLmVuZFF1ZXJ5SW5kZXg9dGhpcy5zdGFydFF1ZXJ5SW5kZXg9LTEsdGhpcy5zdW09MCx0aGlzLnN0YXRzPW51bGx9ZnVuY3Rpb24gbih0LGUsbil7dmFyIGk9by5wb3AoKXx8bmV3IHI7aS5zdGFydFF1ZXJ5SW5kZXg9dCxpLmVuZFF1ZXJ5SW5kZXg9ZSxpLnN1bT0wLGkuc3RhdHM9bixzLnB1c2goaSl9aWYoIWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5KXJldHVybiBudWxsO3ZhciBpPVtdLGE9W10sbz1bXSxzPVtdLGw9W10sYz1bXTtyZXR1cm57YmVnaW5RdWVyeTpmdW5jdGlvbih0KXt2YXIgcj1pLnBvcCgpfHxlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5jcmVhdGVRdWVyeUVYVCgpO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmJlZ2luUXVlcnlFWFQoMzUwMDcsciksYS5wdXNoKHIpLG4oYS5sZW5ndGgtMSxhLmxlbmd0aCx0KX0sZW5kUXVlcnk6ZnVuY3Rpb24oKXtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5lbmRRdWVyeUVYVCgzNTAwNyl9LHB1c2hTY29wZVN0YXRzOm4sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQscjtpZigwIT09KHQ9YS5sZW5ndGgpKXtjLmxlbmd0aD1NYXRoLm1heChjLmxlbmd0aCx0KzEpLGwubGVuZ3RoPU1hdGgubWF4KGwubGVuZ3RoLHQrMSksbFswXT0wO3ZhciBuPWNbMF09MDtmb3Iocj10PTA7cjxhLmxlbmd0aDsrK3Ipe3ZhciB1PWFbcl07ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQodSwzNDkxOSk/KG4rPWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTgpLGkucHVzaCh1KSk6YVt0KytdPXUsbFtyKzFdPW4sY1tyKzFdPXR9Zm9yKGEubGVuZ3RoPXQscj10PTA7cjxzLmxlbmd0aDsrK3Ipe3ZhciBmPShuPXNbcl0pLnN0YXJ0UXVlcnlJbmRleDt1PW4uZW5kUXVlcnlJbmRleCxuLnN1bSs9bFt1XS1sW2ZdLGY9Y1tmXSwodT1jW3VdKT09PWY/KG4uc3RhdHMuZ3B1VGltZSs9bi5zdW0vMWU2LG8ucHVzaChuKSk6KG4uc3RhcnRRdWVyeUluZGV4PWYsbi5lbmRRdWVyeUluZGV4PXUsc1t0KytdPW4pfXMubGVuZ3RoPXR9fSxnZXROdW1QZW5kaW5nUXVlcmllczpmdW5jdGlvbigpe3JldHVybiBhLmxlbmd0aH0sY2xlYXI6ZnVuY3Rpb24oKXtpLnB1c2guYXBwbHkoaSxhKTtmb3IodmFyIHQ9MDt0PGkubGVuZ3RoO3QrKyllLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5kZWxldGVRdWVyeUVYVChpW3RdKTthLmxlbmd0aD0wLGkubGVuZ3RoPTB9LHJlc3RvcmU6ZnVuY3Rpb24oKXthLmxlbmd0aD0wLGkubGVuZ3RoPTB9fX0oMCxfKSxrPUgoKSxDPXYuZHJhd2luZ0J1ZmZlcldpZHRoLEw9di5kcmF3aW5nQnVmZmVySGVpZ2h0LHo9e3RpY2s6MCx0aW1lOjAsdmlld3BvcnRXaWR0aDpDLHZpZXdwb3J0SGVpZ2h0OkwsZnJhbWVidWZmZXJXaWR0aDpDLGZyYW1lYnVmZmVySGVpZ2h0OkwsZHJhd2luZ0J1ZmZlcldpZHRoOkMsZHJhd2luZ0J1ZmZlckhlaWdodDpMLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfSxPPVkodixfKSxJPShDPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih0PXIubWF4QXR0cmlidXRlcyxlPUFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09bmV3IE07cmV0dXJue1JlY29yZDpNLHNjb3BlOnt9LHN0YXRlOmV9fSh2LF8sTykscCh2LGIsdCxDKSksRD1kKHYsXyxJLGIpLFA9Uyh2LHgsYix0KSxSPVQodixfLE8sZnVuY3Rpb24oKXtHLnByb2NzLnBvbGwoKX0seixiLHQpLEY9bXQodixfLDAsYix0KSxWPUEodixfLE8sUixGLGIpLEc9Qih2LHgsXyxPLEksRCwwLFYse30sQyxQLHtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0seix3LHQpLFc9KHg9RSh2LFYsRy5wcm9jcy5wb2xsLHopLEcubmV4dCksWD12LmNhbnZhcyxaPVtdLCQ9W10sSj1bXSxLPVt0Lm9uRGVzdHJveV0sUT1udWxsO1gmJihYLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGEsITEpLFguYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLG8sITEpKTt2YXIgdHQ9Vi5zZXRGQk89cyh7ZnJhbWVidWZmZXI6VS5kZWZpbmUuY2FsbChudWxsLDEsImZyYW1lYnVmZmVyIil9KTtyZXR1cm4gaCgpLG09aihzLHtjbGVhcjpmdW5jdGlvbih0KXtpZigiZnJhbWVidWZmZXIiaW4gdClpZih0LmZyYW1lYnVmZmVyJiYiZnJhbWVidWZmZXJDdWJlIj09PXQuZnJhbWVidWZmZXJfcmVnbFR5cGUpZm9yKHZhciBlPTA7Nj5lOysrZSl0dChqKHtmcmFtZWJ1ZmZlcjp0LmZyYW1lYnVmZmVyLmZhY2VzW2VdfSx0KSxsKTtlbHNlIHR0KHQsbCk7ZWxzZSBsKDAsdCl9LHByb3A6VS5kZWZpbmUuYmluZChudWxsLDEpLGNvbnRleHQ6VS5kZWZpbmUuYmluZChudWxsLDIpLHRoaXM6VS5kZWZpbmUuYmluZChudWxsLDMpLGRyYXc6cyh7fSksYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiBJLmNyZWF0ZSh0LDM0OTYyLCExLCExKX0sZWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuIEQuY3JlYXRlKHQsITEpfSx0ZXh0dXJlOlIuY3JlYXRlMkQsY3ViZTpSLmNyZWF0ZUN1YmUscmVuZGVyYnVmZmVyOkYuY3JlYXRlLGZyYW1lYnVmZmVyOlYuY3JlYXRlLGZyYW1lYnVmZmVyQ3ViZTpWLmNyZWF0ZUN1YmUsYXR0cmlidXRlczptLGZyYW1lOmMsb246ZnVuY3Rpb24odCxlKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSJmcmFtZSI6cmV0dXJuIGMoZSk7Y2FzZSJsb3N0IjpyPSQ7YnJlYWs7Y2FzZSJyZXN0b3JlIjpyPUo7YnJlYWs7Y2FzZSJkZXN0cm95IjpyPUt9cmV0dXJuIHIucHVzaChlKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpaWYoclt0XT09PWUpe3JbdF09cltyLmxlbmd0aC0xXSxyLnBvcCgpO2JyZWFrfX19fSxsaW1pdHM6TyxoYXNFeHRlbnNpb246ZnVuY3Rpb24odCl7cmV0dXJuIDA8PU8uZXh0ZW5zaW9ucy5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSl9LHJlYWQ6eCxkZXN0cm95OmZ1bmN0aW9uKCl7Wi5sZW5ndGg9MCxuKCksWCYmKFgucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsYSksWC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsbykpLFAuY2xlYXIoKSxWLmNsZWFyKCksRi5jbGVhcigpLFIuY2xlYXIoKSxELmNsZWFyKCksSS5jbGVhcigpLHcmJncuY2xlYXIoKSxLLmZvckVhY2goZnVuY3Rpb24odCl7dCgpfSl9LF9nbDp2LF9yZWZyZXNoOmgscG9sbDpmdW5jdGlvbigpe2YoKSx3JiZ3LnVwZGF0ZSgpfSxub3c6ZyxzdGF0czpifSksdC5vbkRvbmUobnVsbCxtKSxtfX0sIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/ZS5leHBvcnRzPWkoKTpuLmNyZWF0ZVJFR0w9aSgpfSx7fV0sNDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9IiI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGEgc3RyaW5nIik7aWYoMT09PWUpcmV0dXJuIHQ7aWYoMj09PWUpcmV0dXJuIHQrdDt2YXIgcj10Lmxlbmd0aCplO2lmKG4hPT10fHwidW5kZWZpbmVkIj09dHlwZW9mIG4pbj10LGk9IiI7ZWxzZSBpZihpLmxlbmd0aD49cilyZXR1cm4gaS5zdWJzdHIoMCxyKTtmb3IoO3I+aS5sZW5ndGgmJmU+MTspMSZlJiYoaSs9dCksZT4+PTEsdCs9dDtyZXR1cm4gaT0oaSs9dCkuc3Vic3RyKDAscil9fSx7fV0sNDg4OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2UuZXhwb3J0cz10LnBlcmZvcm1hbmNlJiZ0LnBlcmZvcm1hbmNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDQ4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9dFt0Lmxlbmd0aC0xXSxuPWUsaT1lLTI7aT49MDstLWkpe3ZhciBhPXIsbz10W2ldLHM9KHI9YStvKS1hLGw9by1zO2wmJih0Wy0tbl09cixyPWwpfWZvcih2YXIgYz0wLGk9bjtpPGU7KytpKXt2YXIgYT10W2ldLG89cixzPShyPWErbyktYSxsPW8tcztsJiYodFtjKytdPWwpfXJldHVybiB0W2MrK109cix0Lmxlbmd0aD1jLHR9fSx7fV0sNDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKSxvPXQoInJvYnVzdC1jb21wcmVzcyIpLHM9NjtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIik7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goWyJzY2FsZSgiLGMobCh0LHIpKSwiLCIsKG49ciwxJm4/Ii0iOiIiKSx0WzBdW3JdLCIpIl0uam9pbigiIikpO3JldHVybiBmdW5jdGlvbiB0KGUpe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gZVswXTtpZigyPT09ZS5sZW5ndGgpcmV0dXJuWyJzdW0oIixlWzBdLCIsIixlWzFdLCIpIl0uam9pbigiIik7dmFyIHI9ZS5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIix0KGUuc2xpY2UoMCxyKSksIiwiLHQoZS5zbGljZShyKSksIikiXS5qb2luKCIiKX0oZSk7dmFyIG59ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzdW0iLCJzY2FsZSIsInByb2QiLCJjb21wcmVzcyIsWyJmdW5jdGlvbiByb2J1c3REZXRlcm1pbmFudCIsdCwiKG0pe3JldHVybiBjb21wcmVzcygiLGMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibVsiLHIsIl1bIixuLCJdIl0uam9pbigiIil9cmV0dXJuIGV9KHQpKSwiKX07cmV0dXJuIHJvYnVzdERldGVybWluYW50Iix0XS5qb2luKCIiKSkoaSxhLG4sbyl9dmFyIGY9W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0KXtyZXR1cm5bdFswXVswXV19XTshZnVuY3Rpb24oKXtmb3IoO2YubGVuZ3RoPHM7KWYucHVzaCh1KGYubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJmdW5jdGlvbiByb2J1c3REZXRlcm1pbmFudChtKXtzd2l0Y2gobS5sZW5ndGgpeyJdLG49MDtuPHM7KytuKXQucHVzaCgiZGV0IituKSxyLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIGRldCIsbiwiKG0pOyIpO3IucHVzaCgifXZhciBkZXQ9Q0FDSEVbbS5sZW5ndGhdO2lmKCFkZXQpZGV0PUNBQ0hFW20ubGVuZ3RoXT1nZW4obS5sZW5ndGgpO3JldHVybiBkZXQobSk7fXJldHVybiByb2J1c3REZXRlcm1pbmFudCIpLHQucHVzaCgiQ0FDSEUiLCJnZW4iLHIuam9pbigiIikpO3ZhciBpPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtmb3IoZS5leHBvcnRzPWkuYXBwbHkodm9pZCAwLGYuY29uY2F0KFtmLHVdKSksbj0wO248Zi5sZW5ndGg7KytuKWUuZXhwb3J0c1tuXT1mW25dfSgpfSx7InJvYnVzdC1jb21wcmVzcyI6NDg5LCJyb2J1c3Qtc2NhbGUiOjQ5Niwicm9idXN0LXN1bSI6NDk5LCJ0d28tcHJvZHVjdCI6NTI3fV0sNDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4odFswXSxlWzBdKSxhPTE7YTx0Lmxlbmd0aDsrK2Epcj1pKHIsbih0W2FdLGVbYV0pKTtyZXR1cm4gcn19LHsicm9idXN0LXN1bSI6NDk5LCJ0d28tcHJvZHVjdCI6NTI3fV0sNDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc3VidHJhY3QiKSxvPXQoInJvYnVzdC1zY2FsZSIpLHM9NjtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdFswXTtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0oIix0WzBdLCIsIix0WzFdLCIpIl0uam9pbigiIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIixjKHQuc2xpY2UoMCxlKSksIiwiLGModC5zbGljZShlKSksIikiXS5qb2luKCIiKX1mdW5jdGlvbiB1KHQsZSl7aWYoIm0iPT09dC5jaGFyQXQoMCkpe2lmKCJ3Ij09PWUuY2hhckF0KDApKXt2YXIgcj10LnNwbGl0KCJbIik7cmV0dXJuWyJ3IixlLnN1YnN0cigxKSwibSIsclswXS5zdWJzdHIoMSldLmpvaW4oIiIpfXJldHVyblsicHJvZCgiLHQsIiwiLGUsIikiXS5qb2luKCIiKX1yZXR1cm4gdShlLHQpfWZ1bmN0aW9uIGYodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbImRpZmYoIix1KHRbMF1bMF0sdFsxXVsxXSksIiwiLHUodFsxXVswXSx0WzBdWzFdKSwiKSJdLmpvaW4oIiIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbInNjYWxlKCIsYyhmKGwodCxyKSkpLCIsIiwobj1yLCEwJm4/Ii0iOiIiKSx0WzBdW3JdLCIpIl0uam9pbigiIikpO3JldHVybiBlO3ZhciBufWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9W10sbj0wO248ZS0yOysrbilyLnB1c2goWyJwcm9kKG0iLHQsIlsiLG4sIl0sbSIsdCwiWyIsbiwiXSkiXS5qb2luKCIiKSk7cmV0dXJuIGMocil9ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9W10scj1bXSxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bIm0iLG4sIlsiLHQtci0yLCJdIl0uam9pbigiIil9cmV0dXJuIGV9KHQpLHU9MDt1PHQ7Kyt1KXNbMF1bdV09IjEiLHNbdC0xXVt1XT0idyIrdTtmb3IodT0wO3U8dDsrK3UpMD09KDEmdSk/ZS5wdXNoLmFwcGx5KGUsZihsKHMsdSkpKTpyLnB1c2guYXBwbHkocixmKGwocyx1KSkpO3ZhciBwPWMoZSksZD1jKHIpLGc9ImV4YWN0SW5TcGhlcmUiK3Qsdj1bXTtmb3IodT0wO3U8dDsrK3Updi5wdXNoKCJtIit1KTt2YXIgbT1bImZ1bmN0aW9uICIsZywiKCIsdi5qb2luKCksIil7Il07Zm9yKHU9MDt1PHQ7Kyt1KXttLnB1c2goInZhciB3Iix1LCI9IixoKHUsdCksIjsiKTtmb3IodmFyIHk9MDt5PHQ7Kyt5KXkhPT11JiZtLnB1c2goInZhciB3Iix1LCJtIix5LCI9c2NhbGUodyIsdSwiLG0iLHksIlswXSk7Iil9cmV0dXJuIG0ucHVzaCgidmFyIHA9IixwLCIsbj0iLGQsIixkPWRpZmYocCxuKTtyZXR1cm4gZFtkLmxlbmd0aC0xXTt9cmV0dXJuICIsZyksbmV3IEZ1bmN0aW9uKCJzdW0iLCJkaWZmIiwicHJvZCIsInNjYWxlIixtLmpvaW4oIiIpKShpLGEsbixvKX12YXIgZD1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH1dOyFmdW5jdGlvbigpe2Zvcig7ZC5sZW5ndGg8PXM7KWQucHVzaChwKGQubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJzbG93Il0sbj0wO248PXM7KytuKXQucHVzaCgiYSIrbiksci5wdXNoKCJvIituKTt2YXIgaT1bImZ1bmN0aW9uIHRlc3RJblNwaGVyZSgiLHQuam9pbigpLCIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwOyJdO2ZvcihuPTI7bjw9czsrK24paS5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBvIixuLCIoIix0LnNsaWNlKDAsbikuam9pbigpLCIpOyIpO2kucHVzaCgifXZhciBzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXtzW2ldPWFyZ3VtZW50c1tpXX07cmV0dXJuIHNsb3cocyk7fXJldHVybiB0ZXN0SW5TcGhlcmUiKSxyLnB1c2goaS5qb2luKCIiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2ZvcihlLmV4cG9ydHM9YS5hcHBseSh2b2lkIDAsW2Z1bmN0aW9uKHQpe3ZhciBlPWRbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1kW3QubGVuZ3RoXT1wKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9XS5jb25jYXQoZCkpLG49MDtuPD1zOysrbillLmV4cG9ydHNbbl09ZFtuXX0oKX0seyJyb2J1c3Qtc2NhbGUiOjQ5Niwicm9idXN0LXN1YnRyYWN0Ijo0OTgsInJvYnVzdC1zdW0iOjQ5OSwidHdvLXByb2R1Y3QiOjUyN31dLDQ5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtZGV0ZXJtaW5hbnQiKSxpPTY7ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9InJvYnVzdExpbmVhclNvbHZlIit0KyJkIixyPVsiZnVuY3Rpb24gIixlLCIoQSxiKXtyZXR1cm4gWyJdLGk9MDtpPHQ7KytpKXtyLnB1c2goImRldChbIik7Zm9yKHZhciBhPTA7YTx0OysrYSl7YT4wJiZyLnB1c2goIiwiKSxyLnB1c2goIlsiKTtmb3IodmFyIG89MDtvPHQ7KytvKW8+MCYmci5wdXNoKCIsIiksbz09PWk/ci5wdXNoKCIrYlsiLGEsIl0iKTpyLnB1c2goIitBWyIsYSwiXVsiLG8sIl0iKTtyLnB1c2goIl0iKX1yLnB1c2goIl0pLCIpfXIucHVzaCgiZGV0KEEpXX1yZXR1cm4gIixlKTt2YXIgcz1uZXcgRnVuY3Rpb24oImRldCIsci5qb2luKCIiKSk7cmV0dXJuIHModDw2P25bdF06bil9dmFyIG89W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0LGUpe3JldHVybltbZVswXV0sW3RbMF1bMF1dXX1dOyFmdW5jdGlvbigpe2Zvcig7by5sZW5ndGg8aTspby5wdXNoKGEoby5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bImZ1bmN0aW9uIGRpc3BhdGNoTGluZWFyU29sdmUoQSxiKXtzd2l0Y2goQS5sZW5ndGgpeyJdLG49MDtuPGk7KytuKXQucHVzaCgicyIrbiksci5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBzIixuLCIoQSxiKTsiKTtyLnB1c2goIn12YXIgcz1DQUNIRVtBLmxlbmd0aF07aWYoIXMpcz1DQUNIRVtBLmxlbmd0aF09ZyhBLmxlbmd0aCk7cmV0dXJuIHMoQSxiKX1yZXR1cm4gZGlzcGF0Y2hMaW5lYXJTb2x2ZSIpLHQucHVzaCgiQ0FDSEUiLCJnIixyLmpvaW4oIiIpKTt2YXIgcz1GdW5jdGlvbi5hcHBseSh2b2lkIDAsdCk7Zm9yKGUuZXhwb3J0cz1zLmFwcGx5KHZvaWQgMCxvLmNvbmNhdChbbyxhXSkpLG49MDtuPGk7KytuKWUuZXhwb3J0c1tuXT1vW25dfSgpfSx7InJvYnVzdC1kZXRlcm1pbmFudCI6NDkwfV0sNDk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKSxvPXQoInJvYnVzdC1zdWJ0cmFjdCIpLHM9NTtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdFswXTtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0oIix0WzBdLCIsIix0WzFdLCIpIl0uam9pbigiIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIixjKHQuc2xpY2UoMCxlKSksIiwiLGModC5zbGljZShlKSksIikiXS5qb2luKCIiKX1mdW5jdGlvbiB1KHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bWyJzdW0ocHJvZCgiLHRbMF1bMF0sIiwiLHRbMV1bMV0sIikscHJvZCgtIix0WzBdWzFdLCIsIix0WzFdWzBdLCIpKSJdLmpvaW4oIiIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbInNjYWxlKCIsYyh1KGwodCxyKSkpLCIsIiwobj1yLDEmbj8iLSI6IiIpLHRbMF1bcl0sIikiXS5qb2luKCIiKSk7cmV0dXJuIGU7dmFyIG59ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9W10scj1bXSxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bIm0iLG4sIlsiLHQtci0xLCJdIl0uam9pbigiIil9cmV0dXJuIGV9KHQpLGY9W10saD0wO2g8dDsrK2gpMD09KDEmaCk/ZS5wdXNoLmFwcGx5KGUsdShsKHMsaCkpKTpyLnB1c2guYXBwbHkocix1KGwocyxoKSkpLGYucHVzaCgibSIraCk7dmFyIHA9YyhlKSxkPWMociksZz0ib3JpZW50YXRpb24iK3QrIkV4YWN0Iix2PVsiZnVuY3Rpb24gIixnLCIoIixmLmpvaW4oKSwiKXt2YXIgcD0iLHAsIixuPSIsZCwiLGQ9c3ViKHAsbik7cmV0dXJuIGRbZC5sZW5ndGgtMV07fTtyZXR1cm4gIixnXS5qb2luKCIiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzdW0iLCJwcm9kIiwic2NhbGUiLCJzdWIiLHYpKGksbixhLG8pfXZhciBoPWYoMykscD1mKDQpLGQ9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9KHRbMV0tclsxXSkqKGVbMF0tclswXSksYT0odFswXS1yWzBdKSooZVsxXS1yWzFdKSxvPWktYTtpZihpPjApe2lmKGE8PTApcmV0dXJuIG87bj1pK2F9ZWxzZXtpZighKGk8MCkpcmV0dXJuIG87aWYoYT49MClyZXR1cm4gbztuPS0oaSthKX12YXIgcz0zLjMzMDY2OTA3Mzg3NTQ3MTZlLTE2Km47cmV0dXJuIG8+PXN8fG88PS1zP286aCh0LGUscil9LGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tblswXSxhPWVbMF0tblswXSxvPXJbMF0tblswXSxzPXRbMV0tblsxXSxsPWVbMV0tblsxXSxjPXJbMV0tblsxXSx1PXRbMl0tblsyXSxmPWVbMl0tblsyXSxoPXJbMl0tblsyXSxkPWEqYyxnPW8qbCx2PW8qcyxtPWkqYyx5PWkqbCx4PWEqcyxiPXUqKGQtZykrZioodi1tKStoKih5LXgpLF89Ny43NzE1NjExNzIzNzYxMDNlLTE2KigoTWF0aC5hYnMoZCkrTWF0aC5hYnMoZykpKk1hdGguYWJzKHUpKyhNYXRoLmFicyh2KStNYXRoLmFicyhtKSkqTWF0aC5hYnMoZikrKE1hdGguYWJzKHkpK01hdGguYWJzKHgpKSpNYXRoLmFicyhoKSk7cmV0dXJuIGI+X3x8LWI+Xz9iOnAodCxlLHIsbil9XTshZnVuY3Rpb24oKXtmb3IoO2QubGVuZ3RoPD1zOylkLnB1c2goZihkLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsic2xvdyJdLG49MDtuPD1zOysrbil0LnB1c2goImEiK24pLHIucHVzaCgibyIrbik7dmFyIGk9WyJmdW5jdGlvbiBnZXRPcmllbnRhdGlvbigiLHQuam9pbigpLCIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwOyJdO2ZvcihuPTI7bjw9czsrK24paS5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBvIixuLCIoIix0LnNsaWNlKDAsbikuam9pbigpLCIpOyIpO2kucHVzaCgifXZhciBzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXtzW2ldPWFyZ3VtZW50c1tpXX07cmV0dXJuIHNsb3cocyk7fXJldHVybiBnZXRPcmllbnRhdGlvbiIpLHIucHVzaChpLmpvaW4oIiIpKTt2YXIgYT1GdW5jdGlvbi5hcHBseSh2b2lkIDAscik7Zm9yKGUuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbZnVuY3Rpb24odCl7dmFyIGU9ZFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPWRbdC5sZW5ndGhdPWYodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1dLmNvbmNhdChkKSksbj0wO248PXM7KytuKWUuZXhwb3J0c1tuXT1kW25dfSgpfSx7InJvYnVzdC1zY2FsZSI6NDk2LCJyb2J1c3Qtc3VidHJhY3QiOjQ5OCwicm9idXN0LXN1bSI6NDk5LCJ0d28tcHJvZHVjdCI6NTI3fV0sNDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1zdW0iKSxpPXQoInJvYnVzdC1zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gaShlLHRbMF0pO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gaSh0LGVbMF0pO2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVyblswXTt2YXIgcj1bMF07aWYodC5sZW5ndGg8ZS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epcj1uKHIsaShlLHRbYV0pKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKXI9bihyLGkodCxlW2FdKSk7cmV0dXJuIHJ9fSx7InJvYnVzdC1zY2FsZSI6NDk2LCJyb2J1c3Qtc3VtIjo0OTl9XSw0OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInR3by1zdW0iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigxPT09cil7dmFyIGE9bih0WzBdLGUpO3JldHVybiBhWzBdP2E6W2FbMV1dfXZhciBvPW5ldyBBcnJheSgyKnIpLHM9Wy4xLC4xXSxsPVsuMSwuMV0sYz0wO24odFswXSxlLHMpLHNbMF0mJihvW2MrK109c1swXSk7Zm9yKHZhciB1PTE7dTxyOysrdSl7bih0W3VdLGUsbCk7dmFyIGY9c1sxXTtpKGYsbFswXSxzKSxzWzBdJiYob1tjKytdPXNbMF0pO3ZhciBoPWxbMV0scD1zWzFdLGQ9aCtwLGc9ZC1oLHY9cC1nO3NbMV09ZCx2JiYob1tjKytdPXYpfXNbMV0mJihvW2MrK109c1sxXSk7MD09PWMmJihvW2MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPWMsb319LHsidHdvLXByb2R1Y3QiOjUyNywidHdvLXN1bSI6NTI4fV0sNDk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1uKHQscixpKSxvPW4oZSxyLGkpO2lmKGE+MCYmbz4wfHxhPDAmJm88MClyZXR1cm4hMTt2YXIgcz1uKHIsdCxlKSxsPW4oaSx0LGUpO2lmKHM+MCYmbD4wfHxzPDAmJmw8MClyZXR1cm4hMTtpZigwPT09YSYmMD09PW8mJjA9PT1zJiYwPT09bClyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTwyOysraSl7dmFyIGE9dFtpXSxvPWVbaV0scz1NYXRoLm1pbihhLG8pLGw9TWF0aC5tYXgoYSxvKSxjPXJbaV0sdT1uW2ldLGY9TWF0aC5taW4oYyx1KSxoPU1hdGgubWF4KGMsdSk7aWYoaDxzfHxsPGYpcmV0dXJuITF9cmV0dXJuITB9KHQsZSxyLGkpO3JldHVybiEwfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjQ5NH1dLDQ5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0wfHQubGVuZ3RoLG49MHxlLmxlbmd0aDtpZigxPT09ciYmMT09PW4pcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9dCtlLG49ci10LGk9dC0oci1uKSsoZS1uKTtpZihpKXJldHVybltpLHJdO3JldHVybltyXX0odFswXSwtZVswXSk7dmFyIGksYSxvPW5ldyBBcnJheShyK24pLHM9MCxsPTAsYz0wLHU9TWF0aC5hYnMsZj10W2xdLGg9dShmKSxwPS1lW2NdLGQ9dShwKTtoPGQ/KGE9ZiwobCs9MSk8ciYmKGY9dFtsXSxoPXUoZikpKTooYT1wLChjKz0xKTxuJiYocD0tZVtjXSxkPXUocCkpKTtsPHImJmg8ZHx8Yz49bj8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpO3ZhciBnLHYsbT1pK2EseT1tLWkseD1hLXksYj14LF89bTtmb3IoO2w8ciYmYzxuOyloPGQ/KGk9ZiwobCs9MSk8ciYmKGY9dFtsXSxoPXUoZikpKTooaT1wLChjKz0xKTxuJiYocD0tZVtjXSxkPXUocCkpKSwoeD0oYT1iKS0oeT0obT1pK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nO2Zvcig7bDxyOykoeD0oYT1iKS0oeT0obT0oaT1mKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89ZywobCs9MSk8ciYmKGY9dFtsXSk7Zm9yKDtjPG47KSh4PShhPWIpLSh5PShtPShpPXApK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChjKz0xKTxuJiYocD0tZVtjXSk7YiYmKG9bcysrXT1iKTtfJiYob1tzKytdPV8pO3N8fChvW3MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPXMsb319LHt9XSw0OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxuPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1uKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPXQrZSxuPXItdCxpPXQtKHItbikrKGUtbik7aWYoaSlyZXR1cm5baSxyXTtyZXR1cm5bcl19KHRbMF0sZVswXSk7dmFyIGksYSxvPW5ldyBBcnJheShyK24pLHM9MCxsPTAsYz0wLHU9TWF0aC5hYnMsZj10W2xdLGg9dShmKSxwPWVbY10sZD11KHApO2g8ZD8oYT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihhPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSk7bDxyJiZoPGR8fGM+PW4/KGk9ZiwobCs9MSk8ciYmKGY9dFtsXSxoPXUoZikpKTooaT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpO3ZhciBnLHYsbT1pK2EseT1tLWkseD1hLXksYj14LF89bTtmb3IoO2w8ciYmYzxuOyloPGQ/KGk9ZiwobCs9MSk8ciYmKGY9dFtsXSxoPXUoZikpKTooaT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PShtPWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWc7Zm9yKDtsPHI7KSh4PShhPWIpLSh5PShtPShpPWYpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChsKz0xKTxyJiYoZj10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KG09KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWcsKGMrPTEpPG4mJihwPWVbY10pO2ImJihvW3MrK109Yik7XyYmKG9bcysrXT1fKTtzfHwob1tzKytdPTApO3JldHVybiBvLmxlbmd0aD1zLG99fSx7fV0sNTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdDwwPy0xOnQ+MD8xOjB9fSx7fV0sNTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaShuKHQpKX07dmFyIG49dCgiYm91bmRhcnktY2VsbHMiKSxpPXQoInJlZHVjZS1zaW1wbGljaWFsLWNvbXBsZXgiKX0seyJib3VuZGFyeS1jZWxscyI6ODUsInJlZHVjZS1zaW1wbGljaWFsLWNvbXBsZXgiOjQ4MX1dLDUwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7cj1yfHwwLCJ1bmRlZmluZWQiPT10eXBlb2YgcyYmKHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MCxuPTA7bjxlOysrbilyPTB8TWF0aC5tYXgocix0W25dLmxlbmd0aCk7cmV0dXJuIHItMX0odCkpO2lmKDA9PT10Lmxlbmd0aHx8czwxKXJldHVybntjZWxsczpbXSx2ZXJ0ZXhJZHM6W10sdmVydGV4V2VpZ2h0czpbXX07dmFyIGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1pLm1hbGxvY1VpbnQ4KHIpLGE9MDthPHI7KythKW5bYV09dFthXTxlfDA7cmV0dXJuIG59KGUsK3IpLGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbz1lKihlKzEpLzIqcnwwLHM9aS5tYWxsb2NVaW50MzIoMipvKSxsPTAsYz0wO2M8cjsrK2MpZm9yKHZhciB1PXRbY10sZT11Lmxlbmd0aCxmPTA7ZjxlOysrZilmb3IodmFyIGg9MDtoPGY7KytoKXt2YXIgcD11W2hdLGQ9dVtmXTtzW2wrK109MHxNYXRoLm1pbihwLGQpLHNbbCsrXT0wfE1hdGgubWF4KHAsZCl9YShuKHMsW2wvMnwwLDJdKSk7Zm9yKHZhciBnPTIsYz0yO2M8bDtjKz0yKXNbYy0yXT09PXNbY10mJnNbYy0xXT09PXNbYysxXXx8KHNbZysrXT1zW2NdLHNbZysrXT1zW2MrMV0pO3JldHVybiBuKHMsW2cvMnwwLDJdKX0odCxzKSx1PWZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgbz10LmRhdGEscz10LnNoYXBlWzBdLGw9aS5tYWxsb2NEb3VibGUocyksYz0wLHU9MDt1PHM7Kyt1KXt2YXIgZj1vWzIqdV0saD1vWzIqdSsxXTtpZihyW2ZdIT09cltoXSl7dmFyIHA9ZVtmXSxkPWVbaF07b1syKmNdPWYsb1syKmMrMV09aCxsW2MrK109KGQtYSkvKGQtcCl9fXJldHVybiB0LnNoYXBlWzBdPWMsbihsLFtjXSl9KGMsZSxsLCtyKSxmPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aS5tYWxsb2NJbnQzMigyKmUpLG49dC5zaGFwZVswXSxhPXQuZGF0YTtyWzBdPTA7Zm9yKHZhciBvPTAscz0wO3M8bjsrK3Mpe3ZhciBsPWFbMipzXTtpZihsIT09byl7Zm9yKHJbMipvKzFdPXM7KytvPGw7KXJbMipvXT1zLHJbMipvKzFdPXM7clsyKm9dPXN9fXJbMipvKzFdPW47Zm9yKDsrK288ZTspclsyKm9dPXJbMipvKzFdPW47cmV0dXJuIHJ9KGMsMHxlLmxlbmd0aCksaD1vKHMpKHQsYy5kYXRhLGYsbCkscD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MHx0LnNoYXBlWzBdLHI9dC5kYXRhLG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09W3JbMippXSxyWzIqaSsxXV07cmV0dXJuIG59KGMpLGQ9W10uc2xpY2UuY2FsbCh1LmRhdGEsMCx1LnNoYXBlWzBdKTtyZXR1cm4gaS5mcmVlKGwpLGkuZnJlZShjLmRhdGEpLGkuZnJlZSh1LmRhdGEpLGkuZnJlZShmKSx7Y2VsbHM6aCx2ZXJ0ZXhJZHM6cCx2ZXJ0ZXhXZWlnaHRzOmR9fTt2YXIgbj10KCJuZGFycmF5IiksaT10KCJ0eXBlZGFycmF5LXBvb2wiKSxhPXQoIm5kYXJyYXktc29ydCIpLG89dCgiLi9saWIvY29kZWdlbiIpfSx7Ii4vbGliL2NvZGVnZW4iOjUwMyxuZGFycmF5OjQ0MiwibmRhcnJheS1zb3J0Ijo0NDAsInR5cGVkYXJyYXktcG9vbCI6NTI5fV0sNTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hW3RdO2V8fChlPWFbdF09ZnVuY3Rpb24odCl7dmFyIGU9MCxyPW5ldyBBcnJheSh0KzEpO3JbMF09W1tdXTtmb3IodmFyIGE9MTthPD10OysrYSlmb3IodmFyIG89clthXT1pKGEpLHM9MDtzPG8ubGVuZ3RoOysrcyllPU1hdGgubWF4KGUsb1thXS5sZW5ndGgpO3ZhciBsPVsiZnVuY3Rpb24gQihDLEUsaSxqKXsiLCJ2YXIgYT1NYXRoLm1pbihpLGopfDAsYj1NYXRoLm1heChpLGopfDAsbD1DWzIqYV0saD1DWzIqYSsxXTsiLCJ3aGlsZShsPGgpeyIsInZhciBtPShsK2gpPj4xLHY9RVsyKm0rMV07IiwiaWYodj09PWIpe3JldHVybiBtfSIsImlmKGI8dil7aD1tfWVsc2V7bD1tKzF9IiwifSIsInJldHVybiBsOyIsIn07IiwiZnVuY3Rpb24gZ2V0Q29udG91ciIsdCwiZChGLEUsQyxTKXsiLCJ2YXIgbj1GLmxlbmd0aCxSPVtdOyIsImZvcih2YXIgaT0wO2k8bjsrK2kpe3ZhciBjPUZbaV0sbD1jLmxlbmd0aDsiXTtmdW5jdGlvbiBjKHQpe2lmKCEodC5sZW5ndGg8PTApKXtsLnB1c2goIlIucHVzaCgiKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl7dmFyIHI9dFtlXTtlPjAmJmwucHVzaCgiLCIpLGwucHVzaCgiWyIpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO24+MCYmbC5wdXNoKCIsIiksbC5wdXNoKCJCKEMsRSxjWyIsaVswXSwiXSxjWyIsaVsxXSwiXSkiKX1sLnB1c2goIl0iKX1sLnB1c2goIik7Iil9fWZvcih2YXIgYT10KzE7YT4xOy0tYSl7YTx0KzEmJmwucHVzaCgiZWxzZSAiKSxsLnB1c2goImlmKGw9PT0iLGEsIil7Iik7Zm9yKHZhciB1PVtdLHM9MDtzPGE7KytzKXUucHVzaCgiKFNbY1siK3MrIl1dPDwiK3MrIikiKTtsLnB1c2goInZhciBNPSIsdS5qb2luKCIrIiksIjtpZihNPT09MHx8TT09PSIsKDE8PGEpLTEsIil7Y29udGludWV9c3dpdGNoKE0peyIpO2Zvcih2YXIgbz1yW2EtMV0scz0wO3M8by5sZW5ndGg7KytzKWwucHVzaCgiY2FzZSAiLHMsIjoiKSxjKG9bc10pLGwucHVzaCgiYnJlYWs7Iik7bC5wdXNoKCJ9fSIpfXJldHVybiBsLnB1c2goIn1yZXR1cm4gUjt9O3JldHVybiBnZXRDb250b3VyIix0LCJkIiksbmV3IEZ1bmN0aW9uKCJwb29sIixsLmpvaW4oIiIpKShuKX0odCkpO3JldHVybiBlfTt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoIm1hcmNoaW5nLXNpbXBsZXgtdGFibGUiKSxhPXt9fSx7Im1hcmNoaW5nLXNpbXBsZXgtdGFibGUiOjQxOSwidHlwZWRhcnJheS1wb29sIjo1Mjl9XSw1MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoInVuaW9uLWZpbmQiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj10Lmxlbmd0aC1lLmxlbmd0aCxpPU1hdGgubWluO2lmKG4pcmV0dXJuIG47c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuKHM9dFswXSt0WzFdLWVbMF0tZVsxXSl8fGkodFswXSx0WzFdKS1pKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBhPXRbMF0rdFsxXSxvPWVbMF0rZVsxXTtpZihzPWErdFsyXS0obytlWzJdKSlyZXR1cm4gczt2YXIgcyxsPWkodFswXSx0WzFdKSxjPWkoZVswXSxlWzFdKTtyZXR1cm4ocz1pKGwsdFsyXSktaShjLGVbMl0pKXx8aShsK3RbMl0sYSktaShjK2VbMl0sbyk7ZGVmYXVsdDp2YXIgdT10LnNsaWNlKDApO3Uuc29ydCgpO3ZhciBmPWUuc2xpY2UoMCk7Zi5zb3J0KCk7Zm9yKHZhciBoPTA7aDxyOysraClpZihuPXVbaF0tZltoXSlyZXR1cm4gbjtyZXR1cm4gMH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBhKHRbMF0sZVswXSl9ZnVuY3Rpb24gcyh0LGUpe2lmKGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSluW2ldPVt0W2ldLGVbaV1dO24uc29ydChvKTtmb3IoaT0wO2k8cjsrK2kpdFtpXT1uW2ldWzBdLGVbaV09bltpXVsxXTtyZXR1cm4gdH1yZXR1cm4gdC5zb3J0KGEpLHR9ZnVuY3Rpb24gbCh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPTE7bjxyOysrbil7dmFyIGk9dFtuXTtpZihhKGksdFtuLTFdKSl7aWYobj09PWUpe2UrKztjb250aW51ZX10W2UrK109aX19cmV0dXJuIHQubGVuZ3RoPWUsdH1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9LTE7cjw9bjspe3ZhciBvPXIrbj4+MSxzPWEodFtvXSxlKTtzPD0wPygwPT09cyYmKGk9bykscj1vKzEpOnM+MCYmKG49by0xKX1yZXR1cm4gaX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldPVtdO2Zvcih2YXIgcz1bXSxsPShpPTAsZS5sZW5ndGgpO2k8bDsrK2kpZm9yKHZhciB1PWVbaV0sZj11Lmxlbmd0aCxoPTEscD0xPDxmO2g8cDsrK2gpe3MubGVuZ3RoPW4ucG9wQ291bnQoaCk7Zm9yKHZhciBkPTAsZz0wO2c8ZjsrK2cpaCYxPDxnJiYoc1tkKytdPXVbZ10pO3ZhciB2PWModCxzKTtpZighKHY8MCkpZm9yKDtyW3YrK10ucHVzaChpKSwhKHY+PXQubGVuZ3RofHwwIT09YSh0W3ZdLHMpKTspO31yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7aWYoZTwwKXJldHVybltdO2Zvcih2YXIgcj1bXSxpPSgxPDxlKzEpLTEsYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgbz10W2FdLGw9aTtsPDE8PG8ubGVuZ3RoO2w9bi5uZXh0Q29tYmluYXRpb24obCkpe2Zvcih2YXIgYz1uZXcgQXJyYXkoZSsxKSx1PTAsZj0wO2Y8by5sZW5ndGg7KytmKWwmMTw8ZiYmKGNbdSsrXT1vW2ZdKTtyLnB1c2goYyl9cmV0dXJuIHMocil9ci5kaW1lbnNpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWU9cihlLHRbbl0ubGVuZ3RoKTtyZXR1cm4gZS0xfSxyLmNvdW50VmVydGljZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKWU9cihlLGFbb10pO3JldHVybiBlKzF9LHIuY2xvbmVDZWxscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWVbcl09dFtyXS5zbGljZSgwKTtyZXR1cm4gZX0sci5jb21wYXJlQ2VsbHM9YSxyLm5vcm1hbGl6ZT1zLHIudW5pcXVlPWwsci5maW5kQ2VsbD1jLHIuaW5jaWRlbmNlPXUsci5kdWFsPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHUobChmKHQsMCkpLHQpO2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT1bXTtuPTA7Zm9yKHZhciBpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbylyW2Fbb11dLnB1c2gobik7cmV0dXJuIHJ9LHIuZXhwbG9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTB8aS5sZW5ndGgsbz0xLGw9MTw8YTtvPGw7KytvKXtmb3IodmFyIGM9W10sdT0wO3U8YTsrK3Upbz4+PnUmMSYmYy5wdXNoKGlbdV0pO2UucHVzaChjKX1yZXR1cm4gcyhlKX0sci5za2VsZXRvbj1mLHIuYm91bmRhcnk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSl7Zm9yKHZhciBsPW5ldyBBcnJheShpLmxlbmd0aC0xKSxjPTAsdT0wO2M8bzsrK2MpYyE9PWEmJihsW3UrK109aVtjXSk7ZS5wdXNoKGwpfXJldHVybiBzKGUpfSxyLmNvbm5lY3RlZENvbXBvbmVudHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgaShlKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgcz1vKzE7czxhLmxlbmd0aDsrK3Mpci5saW5rKGFbb10sYVtzXSk7dmFyIGw9W10sYz1yLnJhbmtzO2ZvcihuPTA7bjxjLmxlbmd0aDsrK24pY1tuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgdT1yLmZpbmQodFtuXVswXSk7Y1t1XTwwPyhjW3VdPWwubGVuZ3RoLGwucHVzaChbdFtuXS5zbGljZSgwKV0pKTpsW2NbdV1dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIGx9KHQsZSk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWwocyhmKHQsMCkpKSxyPW5ldyBpKGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgdT1jKGUsW2Fbb11dKSxoPW8rMTtoPGEubGVuZ3RoOysraClyLmxpbmsodSxjKGUsW2FbaF1dKSk7dmFyIHA9W10sZD1yLnJhbmtzO2ZvcihuPTA7bjxkLmxlbmd0aDsrK24pZFtuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgZz1yLmZpbmQoYyhlLFt0W25dWzBdXSkpO2RbZ108MD8oZFtnXT1wLmxlbmd0aCxwLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6cFtkW2ddXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBwfSh0KX19LHsiYml0LXR3aWRkbGUiOjgyLCJ1bmlvbi1maW5kIjo1MzB9XSw1MDU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bODJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDo4Mn1dLDUwNjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs1MDRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyJiaXQtdHdpZGRsZSI6NTA1LGR1cDo1MDQsInVuaW9uLWZpbmQiOjUwN31dLDUwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bixuLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9LG4ucHJvdG90eXBlLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnJvb3RzO2VbdF0hPT10Oyl7dmFyIHI9ZVt0XTtlW3RdPWVbcl0sdD1yfXJldHVybiB0fSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDUwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGY9MDtmPGE7KytmKXNbZl09bFtmXT0tMSxjW2ZdPTEvMCx1W2ZdPSExO2Zvcih2YXIgZj0wO2Y8bzsrK2Ype3ZhciBoPXRbZl07aWYoMiE9PWgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbXVzdCBiZSBhIGdyYXBoIik7dmFyIHA9aFsxXSxkPWhbMF07LTEhPT1sW2RdP2xbZF09LTI6bFtkXT1wLC0xIT09c1twXT9zW3BdPS0yOnNbcF09ZH1mdW5jdGlvbiBnKHQpe2lmKHVbdF0pcmV0dXJuIDEvMDt2YXIgcixpLGEsbyxjLGY9c1t0XSxoPWxbdF07cmV0dXJuIGY8MHx8aDwwPzEvMDoocj1lW3RdLGk9ZVtmXSxhPWVbaF0sbz1NYXRoLmFicyhuKHIsaSxhKSksYz1NYXRoLnNxcnQoTWF0aC5wb3coaVswXS1hWzBdLDIpK01hdGgucG93KGlbMV0tYVsxXSwyKSksby9jKX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9VFt0XSxuPVRbZV07VFt0XT1uLFRbZV09cixBW3JdPWUsQVtuXT10fWZ1bmN0aW9uIG0odCl7cmV0dXJuIGNbVFt0XV19ZnVuY3Rpb24geSh0KXtyZXR1cm4gMSZ0P3QtMT4+MToodD4+MSktMX1mdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT1tKHQpOzspe3ZhciByPWUsbj0yKnQrMSxpPTIqKHQrMSksYT10O2lmKG48Uyl7dmFyIG89bShuKTtvPHImJihhPW4scj1vKX1pZihpPFMpe3ZhciBzPW0oaSk7czxyJiYoYT1pKX1pZihhPT09dClyZXR1cm4gdDt2KHQsYSksdD1hfX1mdW5jdGlvbiBiKHQpe2Zvcih2YXIgZT1tKHQpO3Q+MDspe3ZhciByPXkodCk7aWYocj49MCl7dmFyIG49bShyKTtpZihlPG4pe3YodCxyKSx0PXI7Y29udGludWV9fXJldHVybiB0fX1mdW5jdGlvbiBfKCl7aWYoUz4wKXt2YXIgdD1UWzBdO3JldHVybiB2KDAsUy0xKSxTLT0xLHgoMCksdH1yZXR1cm4tMX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9VFt0XTtyZXR1cm4gY1tyXT09PWU/dDooY1tyXT0tMS8wLGIodCksXygpLGNbcl09ZSxiKChTKz0xKS0xKSl9ZnVuY3Rpb24gayh0KXtpZighdVt0XSl7dVt0XT0hMDt2YXIgZT1zW3RdLHI9bFt0XTtzW3JdPj0wJiYoc1tyXT1lKSxsW2VdPj0wJiYobFtlXT1yKSxBW2VdPj0wJiZ3KEFbZV0sZyhlKSksQVtyXT49MCYmdyhBW3JdLGcocikpfX1mb3IodmFyIFQ9W10sQT1uZXcgQXJyYXkoYSksZj0wO2Y8YTsrK2Ype3ZhciBNPWNbZl09ZyhmKTtNPDEvMD8oQVtmXT1ULmxlbmd0aCxULnB1c2goZikpOkFbZl09LTF9Zm9yKHZhciBTPVQubGVuZ3RoLGY9Uz4+MTtmPj0wOy0tZil4KGYpO2Zvcig7Oyl7dmFyIEU9XygpO2lmKEU8MHx8Y1tFXT5yKWJyZWFrO2soRSl9Zm9yKHZhciBDPVtdLGY9MDtmPGE7KytmKXVbZl18fChBW2ZdPUMubGVuZ3RoLEMucHVzaChlW2ZdLnNsaWNlKCkpKTtDLmxlbmd0aDtmdW5jdGlvbiBMKHQsZSl7aWYodFtlXTwwKXJldHVybiBlO3ZhciByPWUsbj1lO2Rve3ZhciBpPXRbbl07aWYoIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7aWYoaT10W249aV0sIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7bj1pLHI9dFtyXX13aGlsZShyIT09bik7Zm9yKHZhciBhPWU7YSE9PW47YT10W2FdKXRbYV09bjtyZXR1cm4gbn12YXIgej1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUwocyx0WzBdKSxyPUwobCx0WzFdKTtpZihlPj0wJiZyPj0wJiZlIT09cil7dmFyIG49QVtlXSxpPUFbcl07biE9PWkmJnoucHVzaChbbixpXSl9fSksaS51bmlxdWUoaS5ub3JtYWxpemUoeikpLHtwb3NpdGlvbnM6QyxlZGdlczp6fX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgiKX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjQ5NCwic2ltcGxpY2lhbC1jb21wbGV4Ijo1MDZ9XSw1MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM7aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxhPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpcmV0dXJuIGkoZSx0KTtyPWVbMV0sYT1lWzBdfWlmKHRbMF1bMF08dFsxXVswXSlvPXRbMF0scz10WzFdO2Vsc2V7aWYoISh0WzBdWzBdPnRbMV1bMF0pKXJldHVybi1pKHQsZSk7bz10WzFdLHM9dFswXX12YXIgbD1uKHIsYSxzKSxjPW4ocixhLG8pO2lmKGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7aWYobD1uKHMsbyxhKSxjPW4ocyxvLHIpLGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7cmV0dXJuIGFbMF0tc1swXX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByLGksYSxvO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0saT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXt2YXIgcz1NYXRoLm1pbih0WzBdWzFdLHRbMV1bMV0pLGw9TWF0aC5tYXgodFswXVsxXSx0WzFdWzFdKSxjPU1hdGgubWluKGVbMF1bMV0sZVsxXVsxXSksdT1NYXRoLm1heChlWzBdWzFdLGVbMV1bMV0pO3JldHVybiBsPGM/bC1jOnM+dT9zLXU6bC11fXI9ZVsxXSxpPWVbMF19dFswXVsxXTx0WzFdWzFdPyhhPXRbMF0sbz10WzFdKTooYT10WzFdLG89dFswXSk7dmFyIGY9bihpLHIsYSk7cmV0dXJuIGZ8fCgoZj1uKGkscixvKSl8fG8taSl9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NDk0fV0sNTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0yKmUsbj1uZXcgQXJyYXkociksYT0wO2E8ZTsrK2Epe3ZhciBsPXRbYV0sYz1sWzBdWzBdPGxbMV1bMF07blsyKmFdPW5ldyBmKGxbMF1bMF0sbCxjLGEpLG5bMiphKzFdPW5ldyBmKGxbMV1bMF0sbCwhYyxhKX1uLnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgcj10LngtZS54O3JldHVybiByfHwoKHI9dC5jcmVhdGUtZS5jcmVhdGUpfHxNYXRoLm1pbih0LnNlZ21lbnRbMF1bMV0sdC5zZWdtZW50WzFdWzFdKS1NYXRoLm1pbihlLnNlZ21lbnRbMF1bMV0sZS5zZWdtZW50WzFdWzFdKSl9KTtmb3IodmFyIGg9aShvKSxwPVtdLGQ9W10sZz1bXSxhPTA7YTxyOyl7Zm9yKHZhciB2PW5bYV0ueCxtPVtdO2E8cjspe3ZhciB5PW5bYV07aWYoeS54IT09dilicmVhazthKz0xLHkuc2VnbWVudFswXVswXT09PXkueCYmeS5zZWdtZW50WzFdWzBdPT09eS54P3kuY3JlYXRlJiYoeS5zZWdtZW50WzBdWzFdPHkuc2VnbWVudFsxXVsxXT8obS5wdXNoKG5ldyB1KHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCEwLCEwKSksbS5wdXNoKG5ldyB1KHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCExLCExKSkpOihtLnB1c2gobmV3IHUoeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITAsITEpKSxtLnB1c2gobmV3IHUoeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITEsITApKSkpOmg9eS5jcmVhdGU/aC5pbnNlcnQoeS5zZWdtZW50LHkuaW5kZXgpOmgucmVtb3ZlKHkuc2VnbWVudCl9cC5wdXNoKGgucm9vdCksZC5wdXNoKHYpLGcucHVzaChtKX1yZXR1cm4gbmV3IHMocCxkLGcpfTt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZSIpLGE9dCgicm9idXN0LW9yaWVudGF0aW9uIiksbz10KCIuL2xpYi9vcmRlci1zZWdtZW50cyIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuc2xhYnM9dCx0aGlzLmNvb3JkaW5hdGVzPWUsdGhpcy5ob3Jpem9udGFsPXJ9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LnktZX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPW51bGw7dDspe3ZhciBuLGksbz10LmtleTtvWzBdWzBdPG9bMV1bMF0/KG49b1swXSxpPW9bMV0pOihuPW9bMV0saT1vWzBdKTt2YXIgcz1hKG4saSxlKTtpZihzPDApdD10LmxlZnQ7ZWxzZSBpZihzPjApaWYoZVswXSE9PW9bMV1bMF0pcj10LHQ9dC5yaWdodDtlbHNle2lmKGw9Yyh0LnJpZ2h0LGUpKXJldHVybiBsO3Q9dC5sZWZ0fWVsc2V7aWYoZVswXSE9PW9bMV1bMF0pcmV0dXJuIHQ7dmFyIGw7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9fXJldHVybiByfWZ1bmN0aW9uIHUodCxlLHIsbil7dGhpcy55PXQsdGhpcy5pbmRleD1lLHRoaXMuc3RhcnQ9cix0aGlzLmNsb3NlZD1ufWZ1bmN0aW9uIGYodCxlLHIsbil7dGhpcy54PXQsdGhpcy5zZWdtZW50PWUsdGhpcy5jcmVhdGU9cix0aGlzLmluZGV4PW59cy5wcm90b3R5cGUuY2FzdFVwPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGUodGhpcy5jb29yZGluYXRlcyx0WzBdKTtpZihlPDApcmV0dXJuLTE7dGhpcy5zbGFic1tlXTt2YXIgcj1jKHRoaXMuc2xhYnNbZV0sdCksaT0tMTtpZihyJiYoaT1yLnZhbHVlKSx0aGlzLmNvb3JkaW5hdGVzW2VdPT09dFswXSl7dmFyIHM9bnVsbDtpZihyJiYocz1yLmtleSksZT4wKXt2YXIgdT1jKHRoaXMuc2xhYnNbZS0xXSx0KTt1JiYocz9vKHUua2V5LHMpPjAmJihzPXUua2V5LGk9dS52YWx1ZSk6KGk9dS52YWx1ZSxzPXUua2V5KSl9dmFyIGY9dGhpcy5ob3Jpem9udGFsW2VdO2lmKGYubGVuZ3RoPjApe3ZhciBoPW4uZ2UoZix0WzFdLGwpO2lmKGg8Zi5sZW5ndGgpe3ZhciBwPWZbaF07aWYodFsxXT09PXAueSl7aWYocC5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7Zm9yKDtoPGYubGVuZ3RoLTEmJmZbaCsxXS55PT09dFsxXTspaWYoKHA9ZltoKz0xXSkuY2xvc2VkKXJldHVybiBwLmluZGV4O2lmKHAueT09PXRbMV0mJiFwLnN0YXJ0KXtpZigoaCs9MSk+PWYubGVuZ3RoKXJldHVybiBpO3A9ZltoXX19aWYocC5zdGFydClpZihzKXt2YXIgZD1hKHNbMF0sc1sxXSxbdFswXSxwLnldKTtzWzBdWzBdPnNbMV1bMF0mJihkPS1kKSxkPjAmJihpPXAuaW5kZXgpfWVsc2UgaT1wLmluZGV4O2Vsc2UgcC55IT09dFsxXSYmKGk9cC5pbmRleCl9fX1yZXR1cm4gaX19LHsiLi9saWIvb3JkZXItc2VnbWVudHMiOjUwOSwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgxLCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIjoyMjYsInJvYnVzdC1vcmllbnRhdGlvbiI6NDk0fV0sNTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1kb3QtcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1pKG4odCxlKSxbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9LWUvKG4tZSk7aTwwP2k9MDppPjEmJihpPTEpO2Zvcih2YXIgYT0xLWksbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPTA7bDxvOysrbClzW2xdPWkqdFtsXSthKnJbbF07cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT1hKHRbdC5sZW5ndGgtMV0sZSkscz10W3QubGVuZ3RoLTFdLGw9dFswXSxjPTA7Yzx0Lmxlbmd0aDsrK2Mscz1sKXt2YXIgdT1hKGw9dFtjXSxlKTtpZihpPDAmJnU+MHx8aT4wJiZ1PDApe3ZhciBmPW8ocyx1LGwsaSk7ci5wdXNoKGYpLG4ucHVzaChmLnNsaWNlKCkpfXU8MD9uLnB1c2gobC5zbGljZSgpKTp1PjA/ci5wdXNoKGwuc2xpY2UoKSk6KHIucHVzaChsLnNsaWNlKCkpLG4ucHVzaChsLnNsaWNlKCkpKSxpPXV9cmV0dXJue3Bvc2l0aXZlOnIsbmVnYXRpdmU6bn19LGUuZXhwb3J0cy5wb3NpdGl2ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPWEodFt0Lmxlbmd0aC0xXSxlKSxpPXRbdC5sZW5ndGgtMV0scz10WzBdLGw9MDtsPHQubGVuZ3RoOysrbCxpPXMpe3ZhciBjPWEocz10W2xdLGUpOyhuPDAmJmM+MHx8bj4wJiZjPDApJiZyLnB1c2gobyhpLGMscyxuKSksYz49MCYmci5wdXNoKHMuc2xpY2UoKSksbj1jfXJldHVybiByfSxlLmV4cG9ydHMubmVnYXRpdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1hKHRbdC5sZW5ndGgtMV0sZSksaT10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsaT1zKXt2YXIgYz1hKHM9dFtsXSxlKTsobjwwJiZjPjB8fG4+MCYmYzwwKSYmci5wdXNoKG8oaSxjLHMsbikpLGM8PTAmJnIucHVzaChzLnNsaWNlKCkpLG49Y31yZXR1cm4gcn19LHsicm9idXN0LWRvdC1wcm9kdWN0Ijo0OTEsInJvYnVzdC1zdW0iOjQ5OX1dLDUxMjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17bm90X3N0cmluZzovW15zXS8sbm90X2Jvb2w6L1tedF0vLG5vdF90eXBlOi9bXlRdLyxub3RfcHJpbWl0aXZlOi9bXnZdLyxudW1iZXI6L1tkaWVmZ10vLG51bWVyaWNfYXJnOi9bYmNkaWVmZ3V4WF0vLGpzb246L1tqXS8sbm90X2pzb246L1teal0vLHRleHQ6L15bXlx4MjVdKy8sbW9kdWxvOi9eXHgyNXsyfS8scGxhY2Vob2xkZXI6L15ceDI1KD86KFsxLTldXGQqKVwkfFwoKFteKV0rKVwpKT8oXCspPygwfCdbXiRdKT8oLSk/KFxkKyk/KD86XC4oXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLGtleTovXihbYS16X11bYS16X1xkXSopL2ksa2V5X2FjY2VzczovXlwuKFthLXpfXVthLXpfXGRdKikvaSxpbmRleF9hY2Nlc3M6L15cWyhcZCspXF0vLHNpZ246L15bKy1dL307ZnVuY3Rpb24gZShyKXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD0xLGQ9ci5sZW5ndGgsZz0iIjtmb3IoYT0wO2E8ZDthKyspaWYoInN0cmluZyI9PXR5cGVvZiByW2FdKWcrPXJbYV07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHJbYV0pe2lmKChzPXJbYV0pLmtleXMpZm9yKGk9bltwXSxvPTA7bzxzLmtleXMubGVuZ3RoO28rKyl7aWYobnVsbD09aSl0aHJvdyBuZXcgRXJyb3IoZSgnW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgIiVzIiBvZiB1bmRlZmluZWQgdmFsdWUgIiVzIicscy5rZXlzW29dLHMua2V5c1tvLTFdKSk7aT1pW3Mua2V5c1tvXV19ZWxzZSBpPXMucGFyYW1fbm8/bltzLnBhcmFtX25vXTpuW3ArK107aWYodC5ub3RfdHlwZS50ZXN0KHMudHlwZSkmJnQubm90X3ByaW1pdGl2ZS50ZXN0KHMudHlwZSkmJmkgaW5zdGFuY2VvZiBGdW5jdGlvbiYmKGk9aSgpKSx0Lm51bWVyaWNfYXJnLnRlc3Qocy50eXBlKSYmIm51bWJlciIhPXR5cGVvZiBpJiZpc05hTihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGUoIltzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlVCIsaSkpO3N3aXRjaCh0Lm51bWJlci50ZXN0KHMudHlwZSkmJihmPWk+PTApLHMudHlwZSl7Y2FzZSJiIjppPXBhcnNlSW50KGksMTApLnRvU3RyaW5nKDIpO2JyZWFrO2Nhc2UiYyI6aT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGksMTApKTticmVhaztjYXNlImQiOmNhc2UiaSI6aT1wYXJzZUludChpLDEwKTticmVhaztjYXNlImoiOmk9SlNPTi5zdHJpbmdpZnkoaSxudWxsLHMud2lkdGg/cGFyc2VJbnQocy53aWR0aCk6MCk7YnJlYWs7Y2FzZSJlIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9FeHBvbmVudGlhbChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKCk7YnJlYWs7Y2FzZSJmIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9GaXhlZChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKTticmVhaztjYXNlImciOmk9cy5wcmVjaXNpb24/U3RyaW5nKE51bWJlcihpLnRvUHJlY2lzaW9uKHMucHJlY2lzaW9uKSkpOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZSJvIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2UicyI6aT1TdHJpbmcoaSksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2UidCI6aT1TdHJpbmcoISFpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJUIjppPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlInUiOmk9cGFyc2VJbnQoaSwxMCk+Pj4wO2JyZWFrO2Nhc2UidiI6aT1pLnZhbHVlT2YoKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJ4IjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9dC5qc29uLnRlc3Qocy50eXBlKT9nKz1pOighdC5udW1iZXIudGVzdChzLnR5cGUpfHxmJiYhcy5zaWduP2g9IiI6KGg9Zj8iKyI6Ii0iLGk9aS50b1N0cmluZygpLnJlcGxhY2UodC5zaWduLCIiKSksYz1zLnBhZF9jaGFyPyIwIj09PXMucGFkX2NoYXI/IjAiOnMucGFkX2NoYXIuY2hhckF0KDEpOiIgIix1PXMud2lkdGgtKGgraSkubGVuZ3RoLGw9cy53aWR0aCYmdT4wP2MucmVwZWF0KHUpOiIiLGcrPXMuYWxpZ24/aCtpK2w6IjAiPT09Yz9oK2wraTpsK2graSl9cmV0dXJuIGd9KGZ1bmN0aW9uKGUpe2lmKGlbZV0pcmV0dXJuIGlbZV07dmFyIHIsbj1lLGE9W10sbz0wO2Zvcig7bjspe2lmKG51bGwhPT0ocj10LnRleHQuZXhlYyhuKSkpYS5wdXNoKHJbMF0pO2Vsc2UgaWYobnVsbCE9PShyPXQubW9kdWxvLmV4ZWMobikpKWEucHVzaCgiJSIpO2Vsc2V7aWYobnVsbD09PShyPXQucGxhY2Vob2xkZXIuZXhlYyhuKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gdW5leHBlY3RlZCBwbGFjZWhvbGRlciIpO2lmKHJbMl0pe298PTE7dmFyIHM9W10sbD1yWzJdLGM9W107aWYobnVsbD09PShjPXQua2V5LmV4ZWMobCkpKXRocm93IG5ldyBTeW50YXhFcnJvcigiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXkiKTtmb3Iocy5wdXNoKGNbMV0pOyIiIT09KGw9bC5zdWJzdHJpbmcoY1swXS5sZW5ndGgpKTspaWYobnVsbCE9PShjPXQua2V5X2FjY2Vzcy5leGVjKGwpKSlzLnB1c2goY1sxXSk7ZWxzZXtpZihudWxsPT09KGM9dC5pbmRleF9hY2Nlc3MuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO3MucHVzaChjWzFdKX1yWzJdPXN9ZWxzZSBvfD0yO2lmKDM9PT1vKXRocm93IG5ldyBFcnJvcigiW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZCIpO2EucHVzaCh7cGxhY2Vob2xkZXI6clswXSxwYXJhbV9ubzpyWzFdLGtleXM6clsyXSxzaWduOnJbM10scGFkX2NoYXI6cls0XSxhbGlnbjpyWzVdLHdpZHRoOnJbNl0scHJlY2lzaW9uOnJbN10sdHlwZTpyWzhdfSl9bj1uLnN1YnN0cmluZyhyWzBdLmxlbmd0aCl9cmV0dXJuIGlbZV09YX0ociksYXJndW1lbnRzKX1mdW5jdGlvbiBuKHQscil7cmV0dXJuIGUuYXBwbHkobnVsbCxbdF0uY29uY2F0KHJ8fFtdKSl9dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTsidW5kZWZpbmVkIiE9dHlwZW9mIHImJihyLnNwcmludGY9ZSxyLnZzcHJpbnRmPW4pLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93LnNwcmludGY9ZSx3aW5kb3cudnNwcmludGY9bil9KCl9LHt9XSw1MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyZW50aGVzaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyIpO2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoIlNlcGFyYXRvciBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYSBSZWdFeHAiKTtyPygic3RyaW5nIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpJiYocj17aWdub3JlOnJ9KTpyPXt9LG51bGw9PXIuZXNjYXBlJiYoci5lc2NhcGU9ITApLG51bGw9PXIuaWdub3JlP3IuaWdub3JlPVsiW10iLCIoKSIsInt9IiwiPD4iLCciIicsIicnIiwiYGAiLCJcdTIwMWNcdTIwMWQiLCJceGFiXHhiYiJdOigic3RyaW5nIj09dHlwZW9mIHIuaWdub3JlJiYoci5pZ25vcmU9W3IuaWdub3JlXSksci5pZ25vcmU9ci5pZ25vcmUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0Kz10KSx0fSkpO3ZhciBpPW4ucGFyc2UodCx7ZmxhdDohMCxicmFja2V0czpyLmlnbm9yZX0pLGE9aVswXS5zcGxpdChlKTtpZihyLmVzY2FwZSl7Zm9yKHZhciBvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSxjPWFbcysxXTsiXFwiPT09bFtsLmxlbmd0aC0xXSYmIlxcIiE9PWxbbC5sZW5ndGgtMl0/KG8ucHVzaChsK2UrYykscysrKTpvLnB1c2gobCl9YT1vfWZvcihzPTA7czxhLmxlbmd0aDtzKyspaVswXT1hW3NdLGFbc109bi5zdHJpbmdpZnkoaSx7ZmxhdDohMH0pO3JldHVybiBhfX0se3BhcmVudGhlc2lzOjQ1MH1dLDUxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpLGE9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLHM9bmV3IEFycmF5KGUpLGw9MDtsPGU7KytsKXJbbF09LTEsbltsXT0wLGlbbF09ITEsYVtsXT0wLG9bbF09LTEsc1tsXT1bXTt2YXIgYyx1PTAsZj1bXSxoPVtdO2Z1bmN0aW9uIHAoZSl7dmFyIGw9W2VdLGM9W2VdO2ZvcihyW2VdPW5bZV09dSxpW2VdPSEwLHUrPTE7Yy5sZW5ndGg+MDspe2U9Y1tjLmxlbmd0aC0xXTt2YXIgcD10W2VdO2lmKGFbZV08cC5sZW5ndGgpe2Zvcih2YXIgZD1hW2VdO2Q8cC5sZW5ndGg7KytkKXt2YXIgZz1wW2RdO2lmKHJbZ108MCl7cltnXT1uW2ddPXUsaVtnXT0hMCx1Kz0xLGwucHVzaChnKSxjLnB1c2goZyk7YnJlYWt9aVtnXSYmKG5bZV09MHxNYXRoLm1pbihuW2VdLG5bZ10pKSxvW2ddPj0wJiZzW2VdLnB1c2gob1tnXSl9YVtlXT1kfWVsc2V7aWYobltlXT09PXJbZV0pe2Zvcih2YXIgdj1bXSxtPVtdLHk9MCxkPWwubGVuZ3RoLTE7ZD49MDstLWQpe3ZhciB4PWxbZF07aWYoaVt4XT0hMSx2LnB1c2goeCksbS5wdXNoKHNbeF0pLHkrPXNbeF0ubGVuZ3RoLG9beF09Zi5sZW5ndGgseD09PWUpe2wubGVuZ3RoPWQ7YnJlYWt9fWYucHVzaCh2KTtmb3IodmFyIGI9bmV3IEFycmF5KHkpLGQ9MDtkPG0ubGVuZ3RoO2QrKylmb3IodmFyIF89MDtfPG1bZF0ubGVuZ3RoO18rKyliWy0teV09bVtkXVtfXTtoLnB1c2goYil9Yy5wb3AoKX19fWZvcih2YXIgbD0wO2w8ZTsrK2wpcltsXTwwJiZwKGwpO2Zvcih2YXIgbD0wO2w8aC5sZW5ndGg7bCsrKXt2YXIgZD1oW2xdO2lmKDAhPT1kLmxlbmd0aCl7ZC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGM9W2RbMF1dO2Zvcih2YXIgZz0xO2c8ZC5sZW5ndGg7ZysrKWRbZ10hPT1kW2ctMV0mJmMucHVzaChkW2ddKTtoW2xdPWN9fXJldHVybntjb21wb25lbnRzOmYsYWRqYWNlbmN5TGlzdDpofX19LHt9XSw1MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5kaW1lbnNpb248PTApcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07aWYoMT09PXQuZGltZW5zaW9uKXJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1hKHQsZSksbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylpW3NdPVtyW3NdXSxvW3NdPVtzXTtyZXR1cm57cG9zaXRpb25zOmksY2VsbHM6b319KHQsZSk7dmFyIHI9dC5vcmRlci5qb2luKCkrIi0iK3QuZHR5cGUscz1vW3JdLGU9K2V8fDA7c3x8KHM9b1tyXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLGE9WyIndXNlIHN0cmljdCc7Il0sbz0ic3VyZmFjZU5ldHMiK3Quam9pbigiXyIpKyJkIitlO2EucHVzaCgidmFyIGNvbnRvdXI9Z2VuQ29udG91cih7Iiwib3JkZXI6WyIsdC5qb2luKCksIl0sIiwic2NhbGFyQXJndW1lbnRzOiAzLCIsInBoYXNlOmZ1bmN0aW9uIHBoYXNlRnVuYyhwLGEsYixjKSB7IHJldHVybiAocCA+IGMpfDAgfSwiKSwiZ2VuZXJpYyI9PT1lJiZhLnB1c2goImdldHRlcnM6WzBdLCIpO2Zvcih2YXIgcz1bXSxsPVtdLGM9MDtjPHI7KytjKXMucHVzaCgiZCIrYyksbC5wdXNoKCJkIitjKTtmb3IodmFyIGM9MDtjPDE8PHI7KytjKXMucHVzaCgidiIrYyksbC5wdXNoKCJ2IitjKTtmb3IodmFyIGM9MDtjPDE8PHI7KytjKXMucHVzaCgicCIrYyksbC5wdXNoKCJwIitjKTtzLnB1c2goImEiLCJiIiwiYyIpLGwucHVzaCgiYSIsImMiKSxhLnB1c2goInZlcnRleDpmdW5jdGlvbiB2ZXJ0ZXhGdW5jKCIscy5qb2luKCksIil7Iik7Zm9yKHZhciB1PVtdLGM9MDtjPDE8PHI7KytjKXUucHVzaCgiKHAiK2MrIjw8IitjKyIpIik7YS5wdXNoKCJ2YXIgbT0oIix1LmpvaW4oIisiKSwiKXwwO2lmKG09PT0wfHxtPT09IiwoMTw8KDE8PHIpKS0xLCIpe3JldHVybn0iKTt2YXIgZj1bXSxoPVtdOzE8PCgxPDxyKTw9MTI4PyhhLnB1c2goInN3aXRjaChtKXsiKSxoPWEpOmEucHVzaCgic3dpdGNoKG0+Pj43KXsiKTtmb3IodmFyIGM9MDtjPDE8PCgxPDxyKTsrK2Mpe2lmKDE8PCgxPDxyKT4xMjgmJmMlMTI4PT0wKXtmLmxlbmd0aD4wJiZoLnB1c2goIn19Iik7dmFyIHA9InZFeHRyYSIrZi5sZW5ndGg7YS5wdXNoKCJjYXNlICIsYz4+PjcsIjoiLHAsIihtJjB4N2YsIixsLmpvaW4oKSwiKTticmVhazsiKSxoPVsiZnVuY3Rpb24gIixwLCIobSwiLGwuam9pbigpLCIpe3N3aXRjaChtKXsiXSxmLnB1c2goaCl9aC5wdXNoKCJjYXNlICIsMTI3JmMsIjoiKTtmb3IodmFyIGQ9bmV3IEFycmF5KHIpLGc9bmV3IEFycmF5KHIpLHY9bmV3IEFycmF5KHIpLG09bmV3IEFycmF5KHIpLHk9MCx4PTA7eDxyOysreClkW3hdPVtdLGdbeF09W10sdlt4XT0wLG1beF09MDtmb3IodmFyIHg9MDt4PDE8PHI7Kyt4KWZvcih2YXIgYj0wO2I8cjsrK2Ipe3ZhciBfPXheMTw8YjtpZighKF8+eCkmJiEoYyYxPDxfKSE9IShjJjE8PHgpKXt2YXIgdz0xO2MmMTw8Xz9nW2JdLnB1c2goInYiK18rIi12Iit4KTooZ1tiXS5wdXNoKCJ2Iit4KyItdiIrXyksdz0tdyksdzwwPyhkW2JdLnB1c2goIi12Iit4KyItdiIrXyksdltiXSs9Mik6KGRbYl0ucHVzaCgidiIreCsiK3YiK18pLHZbYl0tPTIpLHkrPTE7Zm9yKHZhciBrPTA7azxyOysraylrIT09YiYmKF8mMTw8az9tW2tdKz0xOm1ba10tPTEpfX1mb3IodmFyIFQ9W10sYj0wO2I8cjsrK2IpaWYoMD09PWRbYl0ubGVuZ3RoKVQucHVzaCgiZCIrYisiLTAuNSIpO2Vsc2V7dmFyIEE9IiI7dltiXTwwP0E9dltiXSsiKmMiOnZbYl0+MCYmKEE9IisiK3ZbYl0rIipjIik7dmFyIE09ZFtiXS5sZW5ndGgveSouNSxTPS41K21bYl0veSouNTtULnB1c2goImQiK2IrIi0iK1MrIi0iK00rIiooIitkW2JdLmpvaW4oIisiKStBKyIpLygiK2dbYl0uam9pbigiKyIpKyIpIil9aC5wdXNoKCJhLnB1c2goWyIsVC5qb2luKCksIl0pOyIsImJyZWFrOyIpfWEucHVzaCgifX0sIiksZi5sZW5ndGg+MCYmaC5wdXNoKCJ9fSIpO2Zvcih2YXIgRT1bXSxjPTA7YzwxPDxyLTE7KytjKUUucHVzaCgidiIrYyk7RS5wdXNoKCJjMCIsImMxIiwicDAiLCJwMSIsImEiLCJiIiwiYyIpLGEucHVzaCgiY2VsbDpmdW5jdGlvbiBjZWxsRnVuYygiLEUuam9pbigpLCIpeyIpO3ZhciBDPWkoci0xKTthLnB1c2goImlmKHAwKXtiLnB1c2goIixDLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInYiK3R9KSsiXSJ9KS5qb2luKCksIil9ZWxzZXtiLnB1c2goIixDLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCk7cmV0dXJuIGUucmV2ZXJzZSgpLCJbIitlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idiIrdH0pKyJdIn0pLmpvaW4oKSwiKX19fSk7ZnVuY3Rpb24gIixvLCIoYXJyYXksbGV2ZWwpe3ZhciB2ZXJ0cz1bXSxjZWxscz1bXTtjb250b3VyKGFycmF5LHZlcnRzLGNlbGxzLGxldmVsKTtyZXR1cm4ge3Bvc2l0aW9uczp2ZXJ0cyxjZWxsczpjZWxsc307fSByZXR1cm4gIixvLCI7Iik7Zm9yKHZhciBjPTA7YzxmLmxlbmd0aDsrK2MpYS5wdXNoKGZbY10uam9pbigiIikpO3JldHVybiBuZXcgRnVuY3Rpb24oImdlbkNvbnRvdXIiLGEuam9pbigiIikpKG4pfSh0Lm9yZGVyLHQuZHR5cGUpKTtyZXR1cm4gcyh0LGUpfTt2YXIgbj10KCJuZGFycmF5LWV4dHJhY3QtY29udG91ciIpLGk9dCgidHJpYW5ndWxhdGUtaHlwZXJjdWJlIiksYT10KCJ6ZXJvLWNyb3NzaW5ncyIpO3ZhciBvPXt9fSx7Im5kYXJyYXktZXh0cmFjdC1jb250b3VyIjo0MzEsInRyaWFuZ3VsYXRlLWh5cGVyY3ViZSI6NTI1LCJ6ZXJvLWNyb3NzaW5ncyI6NTU4fV0sNTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1bXSxuPSEwLGk9ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIWV8fHIubGVuZ3RoIT09ZSk7bj0hMCk7fWNhdGNoKHQpe2k9ITAsYT10fWZpbmFsbHl7dHJ5eyFuJiZzLnJldHVybiYmcy5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgYX19cmV0dXJuIHJ9KHQsZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKSxpPTIqTWF0aC5QSSxhPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQueCxsPXQueTtyZXR1cm57eDpuKihzKj1lKS1pKihsKj1yKSthLHk6aSpzK24qbCtvfX0sbz1mdW5jdGlvbih0LGUpe3ZhciByPS41NTE5MTUwMjQ0OTQsbj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLGE9TWF0aC5jb3ModCtlKSxvPU1hdGguc2luKHQrZSk7cmV0dXJuW3t4Om4taSpyLHk6aStuKnJ9LHt4OmErbypyLHk6by1hKnJ9LHt4OmEseTpvfV19LHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dCpuLWUqcjwwPy0xOjEsYT0odCpyK2UqbikvKE1hdGguc3FydCh0KnQrZSplKSpNYXRoLnNxcnQodCp0K2UqZSkpO3JldHVybiBhPjEmJihhPTEpLGE8LTEmJihhPS0xKSxpKk1hdGguYWNvcyhhKX07ci5kZWZhdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucHgscj10LnB5LGw9dC5jeCxjPXQuY3ksdT10LnJ4LGY9dC5yeSxoPXQueEF4aXNSb3RhdGlvbixwPXZvaWQgMD09PWg/MDpoLGQ9dC5sYXJnZUFyY0ZsYWcsZz12b2lkIDA9PT1kPzA6ZCx2PXQuc3dlZXBGbGFnLG09dm9pZCAwPT09dj8wOnYseT1bXTtpZigwPT09dXx8MD09PWYpcmV0dXJuW107dmFyIHg9TWF0aC5zaW4ocCppLzM2MCksYj1NYXRoLmNvcyhwKmkvMzYwKSxfPWIqKGUtbCkvMit4KihyLWMpLzIsdz0teCooZS1sKS8yK2IqKHItYykvMjtpZigwPT09XyYmMD09PXcpcmV0dXJuW107dT1NYXRoLmFicyh1KSxmPU1hdGguYWJzKGYpO3ZhciBrPU1hdGgucG93KF8sMikvTWF0aC5wb3codSwyKStNYXRoLnBvdyh3LDIpL01hdGgucG93KGYsMik7az4xJiYodSo9TWF0aC5zcXJ0KGspLGYqPU1hdGguc3FydChrKSk7dmFyIFQ9ZnVuY3Rpb24odCxlLHIsbixhLG8sbCxjLHUsZixoLHApe3ZhciBkPU1hdGgucG93KGEsMiksZz1NYXRoLnBvdyhvLDIpLHY9TWF0aC5wb3coaCwyKSxtPU1hdGgucG93KHAsMikseT1kKmctZCptLWcqdjt5PDAmJih5PTApLHkvPWQqbStnKnY7dmFyIHg9KHk9TWF0aC5zcXJ0KHkpKihsPT09Yz8tMToxKSkqYS9vKnAsYj15Ki1vL2EqaCxfPWYqeC11KmIrKHQrcikvMix3PXUqeCtmKmIrKGUrbikvMixrPShoLXgpL2EsVD0ocC1iKS9vLEE9KC1oLXgpL2EsTT0oLXAtYikvbyxTPXMoMSwwLGssVCksRT1zKGssVCxBLE0pO3JldHVybiAwPT09YyYmRT4wJiYoRS09aSksMT09PWMmJkU8MCYmKEUrPWkpLFtfLHcsUyxFXX0oZSxyLGwsYyx1LGYsZyxtLHgsYixfLHcpLEE9bihULDQpLE09QVswXSxTPUFbMV0sRT1BWzJdLEM9QVszXSxMPU1hdGguYWJzKEMpLyhpLzQpO01hdGguYWJzKDEtTCk8MWUtNyYmKEw9MSk7dmFyIHo9TWF0aC5tYXgoTWF0aC5jZWlsKEwpLDEpO0MvPXo7Zm9yKHZhciBPPTA7Tzx6O08rKyl5LnB1c2gobyhFLEMpKSxFKz1DO3JldHVybiB5Lm1hcChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMF0sdSxmLGIseCxNLFMpLHI9ZS54LG49ZS55LGk9YSh0WzFdLHUsZixiLHgsTSxTKSxvPWkueCxzPWkueSxsPWEodFsyXSx1LGYsYix4LE0sUyk7cmV0dXJue3gxOnIseTE6bix4MjpvLHkyOnMseDpsLngseTpsLnl9fSl9LGUuZXhwb3J0cz1yLmRlZmF1bHR9LHt9XSw1MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyc2Utc3ZnLXBhdGgiKSxpPXQoImFicy1zdmctcGF0aCIpLGE9dCgibm9ybWFsaXplLXN2Zy1wYXRoIiksbz10KCJpcy1zdmctcGF0aCIpLHM9dCgiYXNzZXJ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodCkmJjE9PT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdJiYodD10WzBdKTsic3RyaW5nIj09dHlwZW9mIHQmJihzKG8odCksIlN0cmluZyBpcyBub3QgYW4gU1ZHIHBhdGguIiksdD1uKHQpKTtpZihzKEFycmF5LmlzQXJyYXkodCksIkFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLiIpLHQ9aSh0KSwhKHQ9YSh0KSkubGVuZ3RoKXJldHVyblswLDAsMCwwXTtmb3IodmFyIGU9WzEvMCwxLzAsLTEvMCwtMS8wXSxyPTAsbD10Lmxlbmd0aDtyPGw7cisrKWZvcih2YXIgYz10W3JdLnNsaWNlKDEpLHU9MDt1PGMubGVuZ3RoO3UrPTIpY1t1KzBdPGVbMF0mJihlWzBdPWNbdSswXSksY1t1KzFdPGVbMV0mJihlWzFdPWNbdSsxXSksY1t1KzBdPmVbMl0mJihlWzJdPWNbdSswXSksY1t1KzFdPmVbM10mJihlWzNdPWNbdSsxXSk7cmV0dXJuIGV9fSx7ImFicy1zdmctcGF0aCI6NTAsYXNzZXJ0OjU4LCJpcy1zdmctcGF0aCI6NDE2LCJub3JtYWxpemUtc3ZnLXBhdGgiOjUxOCwicGFyc2Utc3ZnLXBhdGgiOjQ1Mn1dLDUxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbz0wLHM9MCxsPTAsYz0wLHU9bnVsbCxmPW51bGwsaD0wLHA9MCxkPTAsZz10Lmxlbmd0aDtkPGc7ZCsrKXt2YXIgdj10W2RdLG09dlswXTtzd2l0Y2gobSl7Y2FzZSJNIjpsPXZbMV0sYz12WzJdO2JyZWFrO2Nhc2UiQSI6dmFyIHk9bih7cHg6aCxweTpwLGN4OnZbNl0sY3k6dls3XSxyeDp2WzFdLHJ5OnZbMl0seEF4aXNSb3RhdGlvbjp2WzNdLGxhcmdlQXJjRmxhZzp2WzRdLHN3ZWVwRmxhZzp2WzVdfSk7aWYoIXkubGVuZ3RoKWNvbnRpbnVlO2Zvcih2YXIgeCxiPTA7Yjx5Lmxlbmd0aDtiKyspeD15W2JdLHY9WyJDIix4LngxLHgueTEseC54Mix4LnkyLHgueCx4LnldLGI8eS5sZW5ndGgtMSYmci5wdXNoKHYpO2JyZWFrO2Nhc2UiUyI6dmFyIF89aCx3PXA7IkMiIT1lJiYiUyIhPWV8fChfKz1fLW8sdys9dy1zKSx2PVsiQyIsXyx3LHZbMV0sdlsyXSx2WzNdLHZbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KHU9MipoLXUsZj0yKnAtZik6KHU9aCxmPXApLHY9YShoLHAsdSxmLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJRIjp1PXZbMV0sZj12WzJdLHY9YShoLHAsdlsxXSx2WzJdLHZbM10sdls0XSk7YnJlYWs7Y2FzZSJMIjp2PWkoaCxwLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJIIjp2PWkoaCxwLHZbMV0scCk7YnJlYWs7Y2FzZSJWIjp2PWkoaCxwLGgsdlsxXSk7YnJlYWs7Y2FzZSJaIjp2PWkoaCxwLGwsYyl9ZT1tLGg9dlt2Lmxlbmd0aC0yXSxwPXZbdi5sZW5ndGgtMV0sdi5sZW5ndGg+ND8obz12W3YubGVuZ3RoLTRdLHM9dlt2Lmxlbmd0aC0zXSk6KG89aCxzPXApLHIucHVzaCh2KX1yZXR1cm4gcn07dmFyIG49dCgic3ZnLWFyYy10by1jdWJpYy1iZXppZXIiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVyblsiQyIsdCxlLHIsbixyLG5dfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe3JldHVyblsiQyIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19fSx7InN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyIjo1MTZ9XSw1MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJzdmctcGF0aC1ib3VuZHMiKSxhPXQoInBhcnNlLXN2Zy1wYXRoIiksbz10KCJkcmF3LXN2Zy1wYXRoIikscz10KCJpcy1zdmctcGF0aCIpLGw9dCgiYml0bWFwLXNkZiIpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdT1jLmdldENvbnRleHQoIjJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXModCkpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSB2YWxpZCBzdmcgcGF0aCBzdHJpbmciKTtlfHwoZT17fSk7dmFyIHIsZjtlLnNoYXBlPyhyPWUuc2hhcGVbMF0sZj1lLnNoYXBlWzFdKToocj1jLndpZHRoPWUud3x8ZS53aWR0aHx8MjAwLGY9Yy5oZWlnaHQ9ZS5ofHxlLmhlaWdodHx8MjAwKTt2YXIgaD1NYXRoLm1pbihyLGYpLHA9ZS5zdHJva2V8fDAsZD1lLnZpZXdib3h8fGUudmlld0JveHx8aSh0KSxnPVtyLyhkWzJdLWRbMF0pLGYvKGRbM10tZFsxXSldLHY9TWF0aC5taW4oZ1swXXx8MCxnWzFdfHwwKS8yO3UuZmlsbFN0eWxlPSJibGFjayIsdS5maWxsUmVjdCgwLDAscixmKSx1LmZpbGxTdHlsZT0id2hpdGUiLHAmJigibnVtYmVyIiE9dHlwZW9mIHAmJihwPTEpLHUuc3Ryb2tlU3R5bGU9cD4wPyJ3aGl0ZSI6ImJsYWNrIix1LmxpbmVXaWR0aD1NYXRoLmFicyhwKSk7aWYodS50cmFuc2xhdGUoLjUqciwuNSpmKSx1LnNjYWxlKHYsdiksZnVuY3Rpb24oKXtpZihudWxsIT1uKXJldHVybiBuO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7aWYodC5jYW52YXMud2lkdGg9dC5jYW52YXMuaGVpZ2h0PTEsIXdpbmRvdy5QYXRoMkQpcmV0dXJuIG49ITE7dmFyIGU9bmV3IFBhdGgyRCgiTTAsMGgxdjFoLTF2LTFaIik7dC5maWxsU3R5bGU9ImJsYWNrIix0LmZpbGwoZSk7dmFyIHI9dC5nZXRJbWFnZURhdGEoMCwwLDEsMSk7cmV0dXJuIG49ciYmci5kYXRhJiYyNTU9PT1yLmRhdGFbM119KCkpe3ZhciBtPW5ldyBQYXRoMkQodCk7dS5maWxsKG0pLHAmJnUuc3Ryb2tlKG0pfWVsc2V7dmFyIHk9YSh0KTtvKHUseSksdS5maWxsKCkscCYmdS5zdHJva2UoKX1yZXR1cm4gdS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGwodSx7Y3V0b2ZmOm51bGwhPWUuY3V0b2ZmP2UuY3V0b2ZmOi41LHJhZGl1czpudWxsIT1lLnJhZGl1cz9lLnJhZGl1czouNSpofSl9fSx7ImJpdG1hcC1zZGYiOjgzLCJkcmF3LXN2Zy1wYXRoIjoxNTksImlzLXN2Zy1wYXRoIjo0MTYsInBhcnNlLXN2Zy1wYXRoIjo0NTIsInN2Zy1wYXRoLWJvdW5kcyI6NTE3fV0sNTIwOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsaSl7dmFyIGk9aXx8e307dmFyIG89YVtlXTtvfHwobz1hW2VdPXsiICI6e2RhdGE6bmV3IEZsb2F0MzJBcnJheSgwKSxzaGFwZTouMn19KTt2YXIgcz1vW3JdO2lmKCFzKWlmKHIubGVuZ3RoPD0xfHwhL1xkLy50ZXN0KHIpKXM9b1tyXT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIGM9cltzW2xdXTtuW2krK109Y1swXSxuW2krK109Y1sxXSsxLjQsYT1NYXRoLm1heChjWzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19KG4ocix7dHJpYW5nbGVzOiEwLGZvbnQ6ZSx0ZXh0QWxpZ246aS50ZXh0QWxpZ258fCJsZWZ0Iix0ZXh0QmFzZWxpbmU6ImFscGhhYmV0aWMiLHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfX0pKTtlbHNle2Zvcih2YXIgbD1yLnNwbGl0KC8oXGR8XHMpLyksYz1uZXcgQXJyYXkobC5sZW5ndGgpLHU9MCxmPTAsaD0wO2g8bC5sZW5ndGg7KytoKWNbaF09dChlLGxbaF0pLHUrPWNbaF0uZGF0YS5sZW5ndGgsZis9Y1toXS5zaGFwZSxoPjAmJihmKz0uMDIpO2Zvcih2YXIgcD1uZXcgRmxvYXQzMkFycmF5KHUpLGQ9MCxnPS0uNSpmLGg9MDtoPGMubGVuZ3RoOysraCl7Zm9yKHZhciB2PWNbaF0uZGF0YSxtPTA7bTx2Lmxlbmd0aDttKz0yKXBbZCsrXT12W21dK2cscFtkKytdPXZbbSsxXTtnKz1jW2hdLnNoYXBlKy4wMn1zPW9bcl09e2RhdGE6cCxzaGFwZTpmfX1yZXR1cm4gc307dmFyIG49dCgidmVjdG9yaXplLXRleHQiKSxpPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGE9aS5fX1RFWFRfQ0FDSEV8fHt9O2kuX19URVhUX0NBQ0hFPXt9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6NDc0LCJ2ZWN0b3JpemUtdGV4dCI6NTM0fV0sNTIxOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQpe3ZhciByPS9eXHMrLyxuPS9ccyskLyxpPTAsYT10LnJvdW5kLG89dC5taW4scz10Lm1heCxsPXQucmFuZG9tO2Z1bmN0aW9uIGMoZSxsKXtpZihsPWx8fHt9LChlPWV8fCIiKWluc3RhbmNlb2YgYylyZXR1cm4gZTtpZighKHRoaXMgaW5zdGFuY2VvZiBjKSlyZXR1cm4gbmV3IGMoZSxsKTt2YXIgdT1mdW5jdGlvbihlKXt2YXIgaT17cjowLGc6MCxiOjB9LGE9MSxsPW51bGwsYz1udWxsLHU9bnVsbCxmPSExLGg9ITE7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1mdW5jdGlvbih0KXt0PXQucmVwbGFjZShyLCIiKS5yZXBsYWNlKG4sIiIpLnRvTG93ZXJDYXNlKCk7dmFyIGUsaT0hMTtpZihTW3RdKXQ9U1t0XSxpPSEwO2Vsc2UgaWYoInRyYW5zcGFyZW50Ij09dClyZXR1cm57cjowLGc6MCxiOjAsYTowLGZvcm1hdDoibmFtZSJ9O2lmKGU9ai5yZ2IuZXhlYyh0KSlyZXR1cm57cjplWzFdLGc6ZVsyXSxiOmVbM119O2lmKGU9ai5yZ2JhLmV4ZWModCkpcmV0dXJue3I6ZVsxXSxnOmVbMl0sYjplWzNdLGE6ZVs0XX07aWYoZT1qLmhzbC5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLGw6ZVszXX07aWYoZT1qLmhzbGEuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSxsOmVbM10sYTplWzRdfTtpZihlPWouaHN2LmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sdjplWzNdfTtpZihlPWouaHN2YS5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLHY6ZVszXSxhOmVbNF19O2lmKGU9ai5oZXg4LmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKSxnOk8oZVsyXSksYjpPKGVbM10pLGE6UihlWzRdKSxmb3JtYXQ6aT8ibmFtZSI6ImhleDgifTtpZihlPWouaGV4Ni5leGVjKHQpKXJldHVybntyOk8oZVsxXSksZzpPKGVbMl0pLGI6TyhlWzNdKSxmb3JtYXQ6aT8ibmFtZSI6ImhleCJ9O2lmKGU9ai5oZXg0LmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKyIiK2VbMV0pLGc6TyhlWzJdKyIiK2VbMl0pLGI6TyhlWzNdKyIiK2VbM10pLGE6UihlWzRdKyIiK2VbNF0pLGZvcm1hdDppPyJuYW1lIjoiaGV4OCJ9O2lmKGU9ai5oZXgzLmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKyIiK2VbMV0pLGc6TyhlWzJdKyIiK2VbMl0pLGI6TyhlWzNdKyIiK2VbM10pLGZvcm1hdDppPyJuYW1lIjoiaGV4In07cmV0dXJuITF9KGUpKTsib2JqZWN0Ij09dHlwZW9mIGUmJihWKGUucikmJlYoZS5nKSYmVihlLmIpPyhwPWUucixkPWUuZyxnPWUuYixpPXtyOjI1NSpMKHAsMjU1KSxnOjI1NSpMKGQsMjU1KSxiOjI1NSpMKGcsMjU1KX0sZj0hMCxoPSIlIj09PVN0cmluZyhlLnIpLnN1YnN0cigtMSk/InByZ2IiOiJyZ2IiKTpWKGUuaCkmJlYoZS5zKSYmVihlLnYpPyhsPUQoZS5zKSxjPUQoZS52KSxpPWZ1bmN0aW9uKGUscixuKXtlPTYqTChlLDM2MCkscj1MKHIsMTAwKSxuPUwobiwxMDApO3ZhciBpPXQuZmxvb3IoZSksYT1lLWksbz1uKigxLXIpLHM9biooMS1hKnIpLGw9biooMS0oMS1hKSpyKSxjPWklNjtyZXR1cm57cjoyNTUqW24scyxvLG8sbCxuXVtjXSxnOjI1NSpbbCxuLG4scyxvLG9dW2NdLGI6MjU1KltvLG8sbCxuLG4sc11bY119fShlLmgsbCxjKSxmPSEwLGg9ImhzdiIpOlYoZS5oKSYmVihlLnMpJiZWKGUubCkmJihsPUQoZS5zKSx1PUQoZS5sKSxpPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE7ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8MS82P3QrNiooZS10KSpyOnI8LjU/ZTpyPDIvMz90KyhlLXQpKigyLzMtcikqNjp0fWlmKHQ9TCh0LDM2MCksZT1MKGUsMTAwKSxyPUwociwxMDApLDA9PT1lKW49aT1hPXI7ZWxzZXt2YXIgcz1yPC41P3IqKDErZSk6citlLXIqZSxsPTIqci1zO249byhsLHMsdCsxLzMpLGk9byhsLHMsdCksYT1vKGwscyx0LTEvMyl9cmV0dXJue3I6MjU1Km4sZzoyNTUqaSxiOjI1NSphfX0oZS5oLGwsdSksZj0hMCxoPSJoc2wiKSxlLmhhc093blByb3BlcnR5KCJhIikmJihhPWUuYSkpO3ZhciBwLGQsZztyZXR1cm4gYT1DKGEpLHtvazpmLGZvcm1hdDplLmZvcm1hdHx8aCxyOm8oMjU1LHMoaS5yLDApKSxnOm8oMjU1LHMoaS5nLDApKSxiOm8oMjU1LHMoaS5iLDApKSxhOmF9fShlKTt0aGlzLl9vcmlnaW5hbElucHV0PWUsdGhpcy5fcj11LnIsdGhpcy5fZz11LmcsdGhpcy5fYj11LmIsdGhpcy5fYT11LmEsdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzLl9mb3JtYXQ9bC5mb3JtYXR8fHUuZm9ybWF0LHRoaXMuX2dyYWRpZW50VHlwZT1sLmdyYWRpZW50VHlwZSx0aGlzLl9yPDEmJih0aGlzLl9yPWEodGhpcy5fcikpLHRoaXMuX2c8MSYmKHRoaXMuX2c9YSh0aGlzLl9nKSksdGhpcy5fYjwxJiYodGhpcy5fYj1hKHRoaXMuX2IpKSx0aGlzLl9vaz11Lm9rLHRoaXMuX3RjX2lkPWkrK31mdW5jdGlvbiB1KHQsZSxyKXt0PUwodCwyNTUpLGU9TChlLDI1NSkscj1MKHIsMjU1KTt2YXIgbixpLGE9cyh0LGUsciksbD1vKHQsZSxyKSxjPShhK2wpLzI7aWYoYT09bCluPWk9MDtlbHNle3ZhciB1PWEtbDtzd2l0Y2goaT1jPi41P3UvKDItYS1sKTp1LyhhK2wpLGEpe2Nhc2UgdDpuPShlLXIpL3UrKGU8cj82OjApO2JyZWFrO2Nhc2UgZTpuPShyLXQpL3UrMjticmVhaztjYXNlIHI6bj0odC1lKS91KzR9bi89Nn1yZXR1cm57aDpuLHM6aSxsOmN9fWZ1bmN0aW9uIGYodCxlLHIpe3Q9TCh0LDI1NSksZT1MKGUsMjU1KSxyPUwociwyNTUpO3ZhciBuLGksYT1zKHQsZSxyKSxsPW8odCxlLHIpLGM9YSx1PWEtbDtpZihpPTA9PT1hPzA6dS9hLGE9PWwpbj0wO2Vsc2V7c3dpdGNoKGEpe2Nhc2UgdDpuPShlLXIpL3UrKGU8cj82OjApO2JyZWFrO2Nhc2UgZTpuPShyLXQpL3UrMjticmVhaztjYXNlIHI6bj0odC1lKS91KzR9bi89Nn1yZXR1cm57aDpuLHM6aSx2OmN9fWZ1bmN0aW9uIGgodCxlLHIsbil7dmFyIGk9W0koYSh0KS50b1N0cmluZygxNikpLEkoYShlKS50b1N0cmluZygxNikpLEkoYShyKS50b1N0cmluZygxNikpXTtyZXR1cm4gbiYmaVswXS5jaGFyQXQoMCk9PWlbMF0uY2hhckF0KDEpJiZpWzFdLmNoYXJBdCgwKT09aVsxXS5jaGFyQXQoMSkmJmlbMl0uY2hhckF0KDApPT1pWzJdLmNoYXJBdCgxKT9pWzBdLmNoYXJBdCgwKStpWzFdLmNoYXJBdCgwKStpWzJdLmNoYXJBdCgwKTppLmpvaW4oIiIpfWZ1bmN0aW9uIHAodCxlLHIsbil7cmV0dXJuW0koUChuKSksSShhKHQpLnRvU3RyaW5nKDE2KSksSShhKGUpLnRvU3RyaW5nKDE2KSksSShhKHIpLnRvU3RyaW5nKDE2KSldLmpvaW4oIiIpfWZ1bmN0aW9uIGQodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLnMtPWUvMTAwLHIucz16KHIucyksYyhyKX1mdW5jdGlvbiBnKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5zKz1lLzEwMCxyLnM9eihyLnMpLGMocil9ZnVuY3Rpb24gdih0KXtyZXR1cm4gYyh0KS5kZXNhdHVyYXRlKDEwMCl9ZnVuY3Rpb24gbSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIubCs9ZS8xMDAsci5sPXooci5sKSxjKHIpfWZ1bmN0aW9uIHkodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b1JnYigpO3JldHVybiByLnI9cygwLG8oMjU1LHIuci1hKC1lLzEwMCoyNTUpKSksci5nPXMoMCxvKDI1NSxyLmctYSgtZS8xMDAqMjU1KSkpLHIuYj1zKDAsbygyNTUsci5iLWEoLWUvMTAwKjI1NSkpKSxjKHIpfWZ1bmN0aW9uIHgodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLmwtPWUvMTAwLHIubD16KHIubCksYyhyKX1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9Yyh0KS50b0hzbCgpLG49KHIuaCtlKSUzNjA7cmV0dXJuIHIuaD1uPDA/MzYwK246bixjKHIpfWZ1bmN0aW9uIF8odCl7dmFyIGU9Yyh0KS50b0hzbCgpO3JldHVybiBlLmg9KGUuaCsxODApJTM2MCxjKGUpfWZ1bmN0aW9uIHcodCl7dmFyIGU9Yyh0KS50b0hzbCgpLHI9ZS5oO3JldHVybltjKHQpLGMoe2g6KHIrMTIwKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzI0MCklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIGsodCl7dmFyIGU9Yyh0KS50b0hzbCgpLHI9ZS5oO3JldHVybltjKHQpLGMoe2g6KHIrOTApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMTgwKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzI3MCklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIFQodCl7dmFyIGU9Yyh0KS50b0hzbCgpLHI9ZS5oO3JldHVybltjKHQpLGMoe2g6KHIrNzIpJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjE2KSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gQSh0LGUscil7ZT1lfHw2LHI9cnx8MzA7dmFyIG49Yyh0KS50b0hzbCgpLGk9MzYwL3IsYT1bYyh0KV07Zm9yKG4uaD0obi5oLShpKmU+PjEpKzcyMCklMzYwOy0tZTspbi5oPShuLmgraSklMzYwLGEucHVzaChjKG4pKTtyZXR1cm4gYX1mdW5jdGlvbiBNKHQsZSl7ZT1lfHw2O2Zvcih2YXIgcj1jKHQpLnRvSHN2KCksbj1yLmgsaT1yLnMsYT1yLnYsbz1bXSxzPTEvZTtlLS07KW8ucHVzaChjKHtoOm4sczppLHY6YX0pKSxhPShhK3MpJTE7cmV0dXJuIG99Yy5wcm90b3R5cGU9e2lzRGFyazpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJyaWdodG5lc3MoKTwxMjh9LGlzTGlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0RhcmsoKX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9va30sZ2V0T3JpZ2luYWxJbnB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW5hbElucHV0fSxnZXRGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9ybWF0fSxnZXRBbHBoYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hfSxnZXRCcmlnaHRuZXNzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b1JnYigpO3JldHVybigyOTkqdC5yKzU4Nyp0LmcrMTE0KnQuYikvMWUzfSxnZXRMdW1pbmFuY2U6ZnVuY3Rpb24oKXt2YXIgZSxyLG4saT10aGlzLnRvUmdiKCk7cmV0dXJuIGU9aS5yLzI1NSxyPWkuZy8yNTUsbj1pLmIvMjU1LC4yMTI2KihlPD0uMDM5Mjg/ZS8xMi45Mjp0LnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpKSsuNzE1Mioocjw9LjAzOTI4P3IvMTIuOTI6dC5wb3coKHIrLjA1NSkvMS4wNTUsMi40KSkrLjA3MjIqKG48PS4wMzkyOD9uLzEyLjkyOnQucG93KChuKy4wNTUpLzEuMDU1LDIuNCkpfSxzZXRBbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYT1DKHQpLHRoaXMuX3JvdW5kQT1hKDEwMCp0aGlzLl9hKS8xMDAsdGhpc30sdG9Ic3Y6ZnVuY3Rpb24oKXt2YXIgdD1mKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqdC5oLHM6dC5zLHY6dC52LGE6dGhpcy5fYX19LHRvSHN2U3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9Zih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksZT1hKDM2MCp0LmgpLHI9YSgxMDAqdC5zKSxuPWEoMTAwKnQudik7cmV0dXJuIDE9PXRoaXMuX2E/ImhzdigiK2UrIiwgIityKyIlLCAiK24rIiUpIjoiaHN2YSgiK2UrIiwgIityKyIlLCAiK24rIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9Ic2w6ZnVuY3Rpb24oKXt2YXIgdD11KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqdC5oLHM6dC5zLGw6dC5sLGE6dGhpcy5fYX19LHRvSHNsU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksZT1hKDM2MCp0LmgpLHI9YSgxMDAqdC5zKSxuPWEoMTAwKnQubCk7cmV0dXJuIDE9PXRoaXMuX2E/ImhzbCgiK2UrIiwgIityKyIlLCAiK24rIiUpIjoiaHNsYSgiK2UrIiwgIityKyIlLCAiK24rIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9IZXg6ZnVuY3Rpb24odCl7cmV0dXJuIGgodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdCl9LHRvSGV4U3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiIjIit0aGlzLnRvSGV4KHQpfSx0b0hleDg6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89W0koYSh0KS50b1N0cmluZygxNikpLEkoYShlKS50b1N0cmluZygxNikpLEkoYShyKS50b1N0cmluZygxNikpLEkoUChuKSldO2lmKGkmJm9bMF0uY2hhckF0KDApPT1vWzBdLmNoYXJBdCgxKSYmb1sxXS5jaGFyQXQoMCk9PW9bMV0uY2hhckF0KDEpJiZvWzJdLmNoYXJBdCgwKT09b1syXS5jaGFyQXQoMSkmJm9bM10uY2hhckF0KDApPT1vWzNdLmNoYXJBdCgxKSlyZXR1cm4gb1swXS5jaGFyQXQoMCkrb1sxXS5jaGFyQXQoMCkrb1syXS5jaGFyQXQoMCkrb1szXS5jaGFyQXQoMCk7cmV0dXJuIG8uam9pbigiIil9KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EsdCl9LHRvSGV4OFN0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4iIyIrdGhpcy50b0hleDgodCl9LHRvUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6YSh0aGlzLl9yKSxnOmEodGhpcy5fZyksYjphKHRoaXMuX2IpLGE6dGhpcy5fYX19LHRvUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/InJnYigiK2EodGhpcy5fcikrIiwgIithKHRoaXMuX2cpKyIsICIrYSh0aGlzLl9iKSsiKSI6InJnYmEoIithKHRoaXMuX3IpKyIsICIrYSh0aGlzLl9nKSsiLCAiK2EodGhpcy5fYikrIiwgIit0aGlzLl9yb3VuZEErIikifSx0b1BlcmNlbnRhZ2VSZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjphKDEwMCpMKHRoaXMuX3IsMjU1KSkrIiUiLGc6YSgxMDAqTCh0aGlzLl9nLDI1NSkpKyIlIixiOmEoMTAwKkwodGhpcy5fYiwyNTUpKSsiJSIsYTp0aGlzLl9hfX0sdG9QZXJjZW50YWdlUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/InJnYigiK2EoMTAwKkwodGhpcy5fciwyNTUpKSsiJSwgIithKDEwMCpMKHRoaXMuX2csMjU1KSkrIiUsICIrYSgxMDAqTCh0aGlzLl9iLDI1NSkpKyIlKSI6InJnYmEoIithKDEwMCpMKHRoaXMuX3IsMjU1KSkrIiUsICIrYSgxMDAqTCh0aGlzLl9nLDI1NSkpKyIlLCAiK2EoMTAwKkwodGhpcy5fYiwyNTUpKSsiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX2E/InRyYW5zcGFyZW50IjohKHRoaXMuX2E8MSkmJihFW2godGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsITApXXx8ITEpfSx0b0ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT0iIyIrcCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hKSxyPWUsbj10aGlzLl9ncmFkaWVudFR5cGU/IkdyYWRpZW50VHlwZSA9IDEsICI6IiI7aWYodCl7dmFyIGk9Yyh0KTtyPSIjIitwKGkuX3IsaS5fZyxpLl9iLGkuX2EpfXJldHVybiJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoIituKyJzdGFydENvbG9yc3RyPSIrZSsiLGVuZENvbG9yc3RyPSIrcisiKSJ9LHRvU3RyaW5nOmZ1bmN0aW9uKHQpe3ZhciBlPSEhdDt0PXR8fHRoaXMuX2Zvcm1hdDt2YXIgcj0hMSxuPXRoaXMuX2E8MSYmdGhpcy5fYT49MDtyZXR1cm4gZXx8IW58fCJoZXgiIT09dCYmImhleDYiIT09dCYmImhleDMiIT09dCYmImhleDQiIT09dCYmImhleDgiIT09dCYmIm5hbWUiIT09dD8oInJnYiI9PT10JiYocj10aGlzLnRvUmdiU3RyaW5nKCkpLCJwcmdiIj09PXQmJihyPXRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCkpLCJoZXgiIT09dCYmImhleDYiIT09dHx8KHI9dGhpcy50b0hleFN0cmluZygpKSwiaGV4MyI9PT10JiYocj10aGlzLnRvSGV4U3RyaW5nKCEwKSksImhleDQiPT09dCYmKHI9dGhpcy50b0hleDhTdHJpbmcoITApKSwiaGV4OCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZygpKSwibmFtZSI9PT10JiYocj10aGlzLnRvTmFtZSgpKSwiaHNsIj09PXQmJihyPXRoaXMudG9Ic2xTdHJpbmcoKSksImhzdiI9PT10JiYocj10aGlzLnRvSHN2U3RyaW5nKCkpLHJ8fHRoaXMudG9IZXhTdHJpbmcoKSk6Im5hbWUiPT09dCYmMD09PXRoaXMuX2E/dGhpcy50b05hbWUoKTp0aGlzLnRvUmdiU3RyaW5nKCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcy50b1N0cmluZygpKX0sX2FwcGx5TW9kaWZpY2F0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChlKSkpO3JldHVybiB0aGlzLl9yPXIuX3IsdGhpcy5fZz1yLl9nLHRoaXMuX2I9ci5fYix0aGlzLnNldEFscGhhKHIuX2EpLHRoaXN9LGxpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obSxhcmd1bWVudHMpfSxicmlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih5LGFyZ3VtZW50cyl9LGRhcmtlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih4LGFyZ3VtZW50cyl9LGRlc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZCxhcmd1bWVudHMpfSxzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihnLGFyZ3VtZW50cyl9LGdyZXlzY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LHNwaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oYixhcmd1bWVudHMpfSxfYXBwbHlDb21iaW5hdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiB0LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSl9LGFuYWxvZ291czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKEEsYXJndW1lbnRzKX0sY29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKF8sYXJndW1lbnRzKX0sbW9ub2Nocm9tYXRpYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKE0sYXJndW1lbnRzKX0sc3BsaXRjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oVCxhcmd1bWVudHMpfSx0cmlhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHcsYXJndW1lbnRzKX0sdGV0cmFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oayxhcmd1bWVudHMpfX0sYy5mcm9tUmF0aW89ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihyW25dPSJhIj09PW4/dFtuXTpEKHRbbl0pKTt0PXJ9cmV0dXJuIGModCxlKX0sYy5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCF0fHwhZSkmJmModCkudG9SZ2JTdHJpbmcoKT09YyhlKS50b1JnYlN0cmluZygpfSxjLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiBjLmZyb21SYXRpbyh7cjpsKCksZzpsKCksYjpsKCl9KX0sYy5taXg9ZnVuY3Rpb24odCxlLHIpe3I9MD09PXI/MDpyfHw1MDt2YXIgbj1jKHQpLnRvUmdiKCksaT1jKGUpLnRvUmdiKCksYT1yLzEwMDtyZXR1cm4gYyh7cjooaS5yLW4ucikqYStuLnIsZzooaS5nLW4uZykqYStuLmcsYjooaS5iLW4uYikqYStuLmIsYTooaS5hLW4uYSkqYStuLmF9KX0sYy5yZWFkYWJpbGl0eT1mdW5jdGlvbihlLHIpe3ZhciBuPWMoZSksaT1jKHIpO3JldHVybih0Lm1heChuLmdldEx1bWluYW5jZSgpLGkuZ2V0THVtaW5hbmNlKCkpKy4wNSkvKHQubWluKG4uZ2V0THVtaW5hbmNlKCksaS5nZXRMdW1pbmFuY2UoKSkrLjA1KX0sYy5pc1JlYWRhYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9Yy5yZWFkYWJpbGl0eSh0LGUpO3N3aXRjaChpPSExLChuPWZ1bmN0aW9uKHQpe3ZhciBlLHI7ZT0oKHQ9dHx8e2xldmVsOiJBQSIsc2l6ZToic21hbGwifSkubGV2ZWx8fCJBQSIpLnRvVXBwZXJDYXNlKCkscj0odC5zaXplfHwic21hbGwiKS50b0xvd2VyQ2FzZSgpLCJBQSIhPT1lJiYiQUFBIiE9PWUmJihlPSJBQSIpOyJzbWFsbCIhPT1yJiYibGFyZ2UiIT09ciYmKHI9InNtYWxsIik7cmV0dXJue2xldmVsOmUsc2l6ZTpyfX0ocikpLmxldmVsK24uc2l6ZSl7Y2FzZSJBQXNtYWxsIjpjYXNlIkFBQWxhcmdlIjppPWE+PTQuNTticmVhaztjYXNlIkFBbGFyZ2UiOmk9YT49MzticmVhaztjYXNlIkFBQXNtYWxsIjppPWE+PTd9cmV0dXJuIGl9LGMubW9zdFJlYWRhYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzPW51bGwsbD0wO2k9KHI9cnx8e30pLmluY2x1ZGVGYWxsYmFja0NvbG9ycyxhPXIubGV2ZWwsbz1yLnNpemU7Zm9yKHZhciB1PTA7dTxlLmxlbmd0aDt1KyspKG49Yy5yZWFkYWJpbGl0eSh0LGVbdV0pKT5sJiYobD1uLHM9YyhlW3VdKSk7cmV0dXJuIGMuaXNSZWFkYWJsZSh0LHMse2xldmVsOmEsc2l6ZTpvfSl8fCFpP3M6KHIuaW5jbHVkZUZhbGxiYWNrQ29sb3JzPSExLGMubW9zdFJlYWRhYmxlKHQsWyIjZmZmIiwiIzAwMCJdLHIpKX07dmFyIFM9Yy5uYW1lcz17YWxpY2VibHVlOiJmMGY4ZmYiLGFudGlxdWV3aGl0ZToiZmFlYmQ3IixhcXVhOiIwZmYiLGFxdWFtYXJpbmU6IjdmZmZkNCIsYXp1cmU6ImYwZmZmZiIsYmVpZ2U6ImY1ZjVkYyIsYmlzcXVlOiJmZmU0YzQiLGJsYWNrOiIwMDAiLGJsYW5jaGVkYWxtb25kOiJmZmViY2QiLGJsdWU6IjAwZiIsYmx1ZXZpb2xldDoiOGEyYmUyIixicm93bjoiYTUyYTJhIixidXJseXdvb2Q6ImRlYjg4NyIsYnVybnRzaWVubmE6ImVhN2U1ZCIsY2FkZXRibHVlOiI1ZjllYTAiLGNoYXJ0cmV1c2U6IjdmZmYwMCIsY2hvY29sYXRlOiJkMjY5MWUiLGNvcmFsOiJmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiI2NDk1ZWQiLGNvcm5zaWxrOiJmZmY4ZGMiLGNyaW1zb246ImRjMTQzYyIsY3lhbjoiMGZmIixkYXJrYmx1ZToiMDAwMDhiIixkYXJrY3lhbjoiMDA4YjhiIixkYXJrZ29sZGVucm9kOiJiODg2MGIiLGRhcmtncmF5OiJhOWE5YTkiLGRhcmtncmVlbjoiMDA2NDAwIixkYXJrZ3JleToiYTlhOWE5IixkYXJra2hha2k6ImJkYjc2YiIsZGFya21hZ2VudGE6IjhiMDA4YiIsZGFya29saXZlZ3JlZW46IjU1NmIyZiIsZGFya29yYW5nZToiZmY4YzAwIixkYXJrb3JjaGlkOiI5OTMyY2MiLGRhcmtyZWQ6IjhiMDAwMCIsZGFya3NhbG1vbjoiZTk5NjdhIixkYXJrc2VhZ3JlZW46IjhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiNDgzZDhiIixkYXJrc2xhdGVncmF5OiIyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IjJmNGY0ZiIsZGFya3R1cnF1b2lzZToiMDBjZWQxIixkYXJrdmlvbGV0OiI5NDAwZDMiLGRlZXBwaW5rOiJmZjE0OTMiLGRlZXBza3libHVlOiIwMGJmZmYiLGRpbWdyYXk6IjY5Njk2OSIsZGltZ3JleToiNjk2OTY5Iixkb2RnZXJibHVlOiIxZTkwZmYiLGZpcmVicmljazoiYjIyMjIyIixmbG9yYWx3aGl0ZToiZmZmYWYwIixmb3Jlc3RncmVlbjoiMjI4YjIyIixmdWNoc2lhOiJmMGYiLGdhaW5zYm9ybzoiZGNkY2RjIixnaG9zdHdoaXRlOiJmOGY4ZmYiLGdvbGQ6ImZmZDcwMCIsZ29sZGVucm9kOiJkYWE1MjAiLGdyYXk6IjgwODA4MCIsZ3JlZW46IjAwODAwMCIsZ3JlZW55ZWxsb3c6ImFkZmYyZiIsZ3JleToiODA4MDgwIixob25leWRldzoiZjBmZmYwIixob3RwaW5rOiJmZjY5YjQiLGluZGlhbnJlZDoiY2Q1YzVjIixpbmRpZ286IjRiMDA4MiIsaXZvcnk6ImZmZmZmMCIsa2hha2k6ImYwZTY4YyIsbGF2ZW5kZXI6ImU2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiZmZmMGY1IixsYXduZ3JlZW46IjdjZmMwMCIsbGVtb25jaGlmZm9uOiJmZmZhY2QiLGxpZ2h0Ymx1ZToiYWRkOGU2IixsaWdodGNvcmFsOiJmMDgwODAiLGxpZ2h0Y3lhbjoiZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiZmFmYWQyIixsaWdodGdyYXk6ImQzZDNkMyIsbGlnaHRncmVlbjoiOTBlZTkwIixsaWdodGdyZXk6ImQzZDNkMyIsbGlnaHRwaW5rOiJmZmI2YzEiLGxpZ2h0c2FsbW9uOiJmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IjIwYjJhYSIsbGlnaHRza3libHVlOiI4N2NlZmEiLGxpZ2h0c2xhdGVncmF5OiI3ODkiLGxpZ2h0c2xhdGVncmV5OiI3ODkiLGxpZ2h0c3RlZWxibHVlOiJiMGM0ZGUiLGxpZ2h0eWVsbG93OiJmZmZmZTAiLGxpbWU6IjBmMCIsbGltZWdyZWVuOiIzMmNkMzIiLGxpbmVuOiJmYWYwZTYiLG1hZ2VudGE6ImYwZiIsbWFyb29uOiI4MDAwMDAiLG1lZGl1bWFxdWFtYXJpbmU6IjY2Y2RhYSIsbWVkaXVtYmx1ZToiMDAwMGNkIixtZWRpdW1vcmNoaWQ6ImJhNTVkMyIsbWVkaXVtcHVycGxlOiI5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IjQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiJjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiMTkxOTcwIixtaW50Y3JlYW06ImY1ZmZmYSIsbWlzdHlyb3NlOiJmZmU0ZTEiLG1vY2Nhc2luOiJmZmU0YjUiLG5hdmFqb3doaXRlOiJmZmRlYWQiLG5hdnk6IjAwMDA4MCIsb2xkbGFjZToiZmRmNWU2IixvbGl2ZToiODA4MDAwIixvbGl2ZWRyYWI6IjZiOGUyMyIsb3JhbmdlOiJmZmE1MDAiLG9yYW5nZXJlZDoiZmY0NTAwIixvcmNoaWQ6ImRhNzBkNiIscGFsZWdvbGRlbnJvZDoiZWVlOGFhIixwYWxlZ3JlZW46Ijk4ZmI5OCIscGFsZXR1cnF1b2lzZToiYWZlZWVlIixwYWxldmlvbGV0cmVkOiJkYjcwOTMiLHBhcGF5YXdoaXA6ImZmZWZkNSIscGVhY2hwdWZmOiJmZmRhYjkiLHBlcnU6ImNkODUzZiIscGluazoiZmZjMGNiIixwbHVtOiJkZGEwZGQiLHBvd2RlcmJsdWU6ImIwZTBlNiIscHVycGxlOiI4MDAwODAiLHJlYmVjY2FwdXJwbGU6IjY2MzM5OSIscmVkOiJmMDAiLHJvc3licm93bjoiYmM4ZjhmIixyb3lhbGJsdWU6IjQxNjllMSIsc2FkZGxlYnJvd246IjhiNDUxMyIsc2FsbW9uOiJmYTgwNzIiLHNhbmR5YnJvd246ImY0YTQ2MCIsc2VhZ3JlZW46IjJlOGI1NyIsc2Vhc2hlbGw6ImZmZjVlZSIsc2llbm5hOiJhMDUyMmQiLHNpbHZlcjoiYzBjMGMwIixza3libHVlOiI4N2NlZWIiLHNsYXRlYmx1ZToiNmE1YWNkIixzbGF0ZWdyYXk6IjcwODA5MCIsc2xhdGVncmV5OiI3MDgwOTAiLHNub3c6ImZmZmFmYSIsc3ByaW5nZ3JlZW46IjAwZmY3ZiIsc3RlZWxibHVlOiI0NjgyYjQiLHRhbjoiZDJiNDhjIix0ZWFsOiIwMDgwODAiLHRoaXN0bGU6ImQ4YmZkOCIsdG9tYXRvOiJmZjYzNDciLHR1cnF1b2lzZToiNDBlMGQwIix2aW9sZXQ6ImVlODJlZSIsd2hlYXQ6ImY1ZGViMyIsd2hpdGU6ImZmZiIsd2hpdGVzbW9rZToiZjVmNWY1Iix5ZWxsb3c6ImZmMCIseWVsbG93Z3JlZW46IjlhY2QzMiJ9LEU9Yy5oZXhOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVt0W3JdXT1yKTtyZXR1cm4gZX0oUyk7ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdD1wYXJzZUZsb2F0KHQpLChpc05hTih0KXx8dDwwfHx0PjEpJiYodD0xKSx0fWZ1bmN0aW9uIEwoZSxyKXsoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYtMSE9dC5pbmRleE9mKCIuIikmJjE9PT1wYXJzZUZsb2F0KHQpfSkoZSkmJihlPSIxMDAlIik7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYtMSE9dC5pbmRleE9mKCIlIil9KGUpO3JldHVybiBlPW8ocixzKDAscGFyc2VGbG9hdChlKSkpLG4mJihlPXBhcnNlSW50KGUqciwxMCkvMTAwKSx0LmFicyhlLXIpPDFlLTY/MTplJXIvcGFyc2VGbG9hdChyKX1mdW5jdGlvbiB6KHQpe3JldHVybiBvKDEscygwLHQpKX1mdW5jdGlvbiBPKHQpe3JldHVybiBwYXJzZUludCh0LDE2KX1mdW5jdGlvbiBJKHQpe3JldHVybiAxPT10Lmxlbmd0aD8iMCIrdDoiIit0fWZ1bmN0aW9uIEQodCl7cmV0dXJuIHQ8PTEmJih0PTEwMCp0KyIlIiksdH1mdW5jdGlvbiBQKGUpe3JldHVybiB0LnJvdW5kKDI1NSpwYXJzZUZsb2F0KGUpKS50b1N0cmluZygxNil9ZnVuY3Rpb24gUih0KXtyZXR1cm4gTyh0KS8yNTV9dmFyIEYsQixOLGo9KEI9IltcXHN8XFwoXSsoIisoRj0iKD86Wy1cXCtdP1xcZCpcXC5cXGQrJT8pfCg/OlstXFwrXT9cXGQrJT8pIikrIilbLHxcXHNdKygiK0YrIilbLHxcXHNdKygiK0YrIilcXHMqXFwpPyIsTj0iW1xcc3xcXChdKygiK0YrIilbLHxcXHNdKygiK0YrIilbLHxcXHNdKygiK0YrIilbLHxcXHNdKygiK0YrIilcXHMqXFwpPyIse0NTU19VTklUOm5ldyBSZWdFeHAoRikscmdiOm5ldyBSZWdFeHAoInJnYiIrQikscmdiYTpuZXcgUmVnRXhwKCJyZ2JhIitOKSxoc2w6bmV3IFJlZ0V4cCgiaHNsIitCKSxoc2xhOm5ldyBSZWdFeHAoImhzbGEiK04pLGhzdjpuZXcgUmVnRXhwKCJoc3YiK0IpLGhzdmE6bmV3IFJlZ0V4cCgiaHN2YSIrTiksaGV4MzovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4NjovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC8saGV4NDovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDg6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL30pO2Z1bmN0aW9uIFYodCl7cmV0dXJuISFqLkNTU19VTklULmV4ZWModCl9InVuZGVmaW5lZCIhPXR5cGVvZiBlJiZlLmV4cG9ydHM/ZS5leHBvcnRzPWM6d2luZG93LnRpbnljb2xvcj1jfShNYXRoKX0se31dLDUyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9aSxlLmV4cG9ydHMuZmxvYXQzMj1lLmV4cG9ydHMuZmxvYXQ9aSxlLmV4cG9ydHMuZnJhY3QzMj1lLmV4cG9ydHMuZnJhY3Q9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGgpe2Zvcih2YXIgZT1pKHQpLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspZVtyXT10W3JdLWVbcl07cmV0dXJuIGV9cmV0dXJuIGkodC1pKHQpKX07dmFyIG49bmV3IEZsb2F0MzJBcnJheSgxKTtmdW5jdGlvbiBpKHQpe2lmKHQubGVuZ3RoKXtpZih0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiB0O3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkodCk7cmV0dXJuIGUuc2V0KHQpLGV9cmV0dXJuIG5bMF09dCxuWzBdfX0se31dLDUyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwYXJzZS11bml0Iik7ZS5leHBvcnRzPW87dmFyIGk9OTY7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPW4oZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTtyZXR1cm4gclswXSpvKHJbMV0sdCl9ZnVuY3Rpb24gbyh0LGUpe3N3aXRjaChlPWV8fGRvY3VtZW50LmJvZHksdD0odHx8InB4IikudHJpbSgpLnRvTG93ZXJDYXNlKCksZSE9PXdpbmRvdyYmZSE9PWRvY3VtZW50fHwoZT1kb2N1bWVudC5ib2R5KSx0KXtjYXNlIiUiOnJldHVybiBlLmNsaWVudEhlaWdodC8xMDA7Y2FzZSJjaCI6Y2FzZSJleCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5zdHlsZVsiZm9udC1zaXplIl09IjEyOCIrdCxlLmFwcGVuZENoaWxkKHIpO3ZhciBuPWEociwiZm9udC1zaXplIikvMTI4O3JldHVybiBlLnJlbW92ZUNoaWxkKHIpLG59KHQsZSk7Y2FzZSJlbSI6cmV0dXJuIGEoZSwiZm9udC1zaXplIik7Y2FzZSJyZW0iOnJldHVybiBhKGRvY3VtZW50LmJvZHksImZvbnQtc2l6ZSIpO2Nhc2UidnciOnJldHVybiB3aW5kb3cuaW5uZXJXaWR0aC8xMDA7Y2FzZSJ2aCI6cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodC8xMDA7Y2FzZSJ2bWluIjpyZXR1cm4gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJ2bWF4IjpyZXR1cm4gTWF0aC5tYXgod2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJpbiI6cmV0dXJuIGk7Y2FzZSJjbSI6cmV0dXJuIGkvMi41NDtjYXNlIm1tIjpyZXR1cm4gaS8yNS40O2Nhc2UicHQiOnJldHVybiBpLzcyO2Nhc2UicGMiOnJldHVybiBpLzZ9cmV0dXJuIDF9fSx7InBhcnNlLXVuaXQiOjQ1M31dLDUyNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHI9ZnVuY3Rpb24odCl7aWYobnVsbD09KHI9dC50cmFuc2Zvcm0pKXJldHVybiBlO3ZhciByLG4saSxhPXIuc2NhbGVbMF0sbz1yLnNjYWxlWzFdLHM9ci50cmFuc2xhdGVbMF0sbD1yLnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KG49aT0wKSx0WzBdPShuKz10WzBdKSphK3MsdFsxXT0oaSs9dFsxXSkqbytsLHR9fSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYmJveDtmdW5jdGlvbiBuKHQpe2xbMF09dFswXSxsWzFdPXRbMV0scyhsKSxsWzBdPGMmJihjPWxbMF0pLGxbMF0+ZiYmKGY9bFswXSksbFsxXTx1JiYodT1sWzFdKSxsWzFdPmgmJihoPWxbMV0pfWZ1bmN0aW9uIGkodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKGkpO2JyZWFrO2Nhc2UiUG9pbnQiOm4odC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2gobil9fWlmKCFlKXt2YXIgYSxvLHM9cih0KSxsPW5ldyBBcnJheSgyKSxjPTEvMCx1PWMsZj0tYyxoPS1jO2ZvcihvIGluIHQuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPXQubGVuZ3RoOysrZTxyOylhPXRbZV0sbFswXT1hWzBdLGxbMV09YVsxXSxzKGwsZSksbFswXTxjJiYoYz1sWzBdKSxsWzBdPmYmJihmPWxbMF0pLGxbMV08dSYmKHU9bFsxXSksbFsxXT5oJiYoaD1sWzFdKX0pLHQub2JqZWN0cylpKHQub2JqZWN0c1tvXSk7ZT10LmJib3g9W2MsdSxmLGhdfXJldHVybiBlfSxpPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1uLWU7aTwtLW47KXI9dFtpXSx0W2krK109dFtuXSx0W25dPXJ9O2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmlkLG49ZS5iYm94LGk9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxhPW8odCxlKTtyZXR1cm4gbnVsbD09ciYmbnVsbD09bj97dHlwZToiRmVhdHVyZSIscHJvcGVydGllczppLGdlb21ldHJ5OmF9Om51bGw9PW4/e3R5cGU6IkZlYXR1cmUiLGlkOnIscHJvcGVydGllczppLGdlb21ldHJ5OmF9Ont0eXBlOiJGZWF0dXJlIixpZDpyLGJib3g6bixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6YX19ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXIodCksYT10LmFyY3M7ZnVuY3Rpb24gbyh0LGUpe2UubGVuZ3RoJiZlLnBvcCgpO2Zvcih2YXIgcj1hW3Q8MD9+dDp0XSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWUucHVzaChuKHJbb10uc2xpY2UoKSxvKSk7dDwwJiZpKGUscyl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0LnNsaWNlKCkpfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipbyh0W3JdLGUpO3JldHVybiBlLmxlbmd0aDwyJiZlLnB1c2goZVswXS5zbGljZSgpKSxlfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPWwodCk7ZS5sZW5ndGg8NDspZS5wdXNoKGVbMF0uc2xpY2UoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5tYXAoYyl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLnR5cGU7c3dpdGNoKG4pe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm57dHlwZTpuLGdlb21ldHJpZXM6ZS5nZW9tZXRyaWVzLm1hcCh0KX07Y2FzZSJQb2ludCI6cj1zKGUuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6cj1lLmNvb3JkaW5hdGVzLm1hcChzKTticmVhaztjYXNlIkxpbmVTdHJpbmciOnI9bChlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyPWUuYXJjcy5tYXAobCk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpyPXUoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1lLmFyY3MubWFwKHUpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJue3R5cGU6bixjb29yZGluYXRlczpyfX0oZSl9dmFyIHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxuPXt9LGk9e30sYT1bXSxvPS0xO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIG4gaW4gdCl7dmFyIGk9dFtuXTtkZWxldGUgZVtpLnN0YXJ0XSxkZWxldGUgaS5zdGFydCxkZWxldGUgaS5lbmQsaS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdPTF9KSxhLnB1c2goaSl9fXJldHVybiBlLmZvckVhY2goZnVuY3Rpb24ocixuKXt2YXIgaSxhPXQuYXJjc1tyPDA/fnI6cl07YS5sZW5ndGg8MyYmIWFbMV1bMF0mJiFhWzFdWzFdJiYoaT1lWysrb10sZVtvXT1yLGVbbl09aSl9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHIsYSxvPWZ1bmN0aW9uKGUpe3ZhciByLG49dC5hcmNzW2U8MD9+ZTplXSxpPW5bMF07dC50cmFuc2Zvcm0/KHI9WzAsMF0sbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbMF0rPXRbMF0sclsxXSs9dFsxXX0pKTpyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU8MD9bcixpXTpbaSxyXX0oZSkscz1vWzBdLGw9b1sxXTtpZihyPWlbc10paWYoZGVsZXRlIGlbci5lbmRdLHIucHVzaChlKSxyLmVuZD1sLGE9bltsXSl7ZGVsZXRlIG5bYS5zdGFydF07dmFyIGM9YT09PXI/cjpyLmNvbmNhdChhKTtuW2Muc3RhcnQ9ci5zdGFydF09aVtjLmVuZD1hLmVuZF09Y31lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIGlmKHI9bltsXSlpZihkZWxldGUgbltyLnN0YXJ0XSxyLnVuc2hpZnQoZSksci5zdGFydD1zLGE9aVtzXSl7ZGVsZXRlIGlbYS5lbmRdO3ZhciB1PWE9PT1yP3I6YS5jb25jYXQocik7blt1LnN0YXJ0PWEuc3RhcnRdPWlbdS5lbmQ9ci5lbmRdPXV9ZWxzZSBuW3Iuc3RhcnRdPWlbci5lbmRdPXI7ZWxzZSBuWyhyPVtlXSkuc3RhcnQ9c109aVtyLmVuZD1sXT1yfSkscyhpLG4pLHMobixpKSxlLmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF18fGEucHVzaChbdF0pfSksYX07ZnVuY3Rpb24gbCh0LGUscil7dmFyIG4saSxhO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSluPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPVtdLGE9W107ZnVuY3Rpb24gbyh0KXt2YXIgZT10PDA/fnQ6dDsoYVtlXXx8KGFbZV09W10pKS5wdXNoKHtpOnQsZzpufSl9ZnVuY3Rpb24gcyh0KXt0LmZvckVhY2gobyl9ZnVuY3Rpb24gbCh0KXt0LmZvckVhY2gocyl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7c3dpdGNoKG49ZSxlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIkxpbmVTdHJpbmciOnMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpsKGUuYXJjcyk7YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOmUuYXJjcy5mb3JFYWNoKGwpfX0oZSksYS5mb3JFYWNoKG51bGw9PXI/ZnVuY3Rpb24odCl7aS5wdXNoKHRbMF0uaSl9OmZ1bmN0aW9uKHQpe3IodFswXS5nLHRbdC5sZW5ndGgtMV0uZykmJmkucHVzaCh0WzBdLmkpfSksaX0oMCxlLHIpO2Vsc2UgZm9yKGk9MCxuPW5ldyBBcnJheShhPXQuYXJjcy5sZW5ndGgpO2k8YTsrK2kpbltpXT1pO3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGFyY3M6cyh0LG4pfX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9e30sbj1bXSxpPVtdO2Z1bmN0aW9uIGEodCl7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXsocltlPWU8MD9+ZTplXXx8KHJbZV09W10pKS5wdXNoKHQpfSl9KSxuLnB1c2godCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsbj10Lmxlbmd0aCxpPXRbbi0xXSxhPTA7KytyPG47KWU9aSxpPXRbcl0sYSs9ZVswXSppWzFdLWVbMV0qaVswXTtyZXR1cm4gTWF0aC5hYnMoYSl9KG8odCx7dHlwZToiUG9seWdvbiIsYXJjczpbZV19KS5jb29yZGluYXRlc1swXSl9cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbiB0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIlBvbHlnb24iOmEoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZS5hcmNzLmZvckVhY2goYSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0Ll8pe3ZhciBlPVtdLG49W3RdO2Zvcih0Ll89MSxpLnB1c2goZSk7dD1uLnBvcCgpOyllLnB1c2godCksdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuX3x8KHQuXz0xLG4ucHVzaCh0KSl9KX0pfSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0Ll99KSx7dHlwZToiTXVsdGlQb2x5Z29uIixhcmNzOmkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuLGk9W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0ubGVuZ3RoPDImJmkucHVzaCh0KX0pfSl9KSwobj0oaT1zKHQsaSkpLmxlbmd0aCk+MSlmb3IodmFyIGEsbyxjPTEsdT1sKGlbMF0pO2M8bjsrK2MpKGE9bChpW2NdKSk+dSYmKG89aVswXSxpWzBdPWlbY10saVtjXT1vLHU9YSk7cmV0dXJuIGl9KX19dmFyIHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXIrbj4+PjE7dFtpXTxlP3I9aSsxOm49aX1yZXR1cm4gcn07dC5iYm94PW4sdC5mZWF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczplLmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhKHQsZSl9KX06YSh0LGUpfSx0Lm1lc2g9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVzaEFyY3M9bCx0Lm1lcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQsYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lcmdlQXJjcz1jLHQubmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG4odCxyKXt0LmZvckVhY2goZnVuY3Rpb24odCl7dDwwJiYodD1+dCk7dmFyIG49ZVt0XTtuP24ucHVzaChyKTplW3RdPVtyXX0pfWZ1bmN0aW9uIGkodCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7bih0LGUpfSl9dmFyIGE9e0xpbmVTdHJpbmc6bixNdWx0aUxpbmVTdHJpbmc6aSxQb2x5Z29uOmksTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kodCxlKX0pfX07Zm9yKHZhciBvIGluIHQuZm9yRWFjaChmdW5jdGlvbiB0KGUscil7Ikdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/ZS5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7dChlLHIpfSk6ZS50eXBlIGluIGEmJmFbZS50eXBlXShlLmFyY3Mscil9KSxlKWZvcih2YXIgcz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpZm9yKHZhciBmPWMrMTtmPGw7KytmKXt2YXIgaCxwPXNbY10sZD1zW2ZdOyhoPXJbcF0pW289dShoLGQpXSE9PWQmJmguc3BsaWNlKG8sMCxkKSwoaD1yW2RdKVtvPXUoaCxwKV0hPT1wJiZoLnNwbGljZShvLDAscCl9cmV0dXJuIHJ9LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtpZighKChlPU1hdGguZmxvb3IoZSkpPj0yKSl0aHJvdyBuZXcgRXJyb3IoIm4gbXVzdCBiZSBcdTIyNjUyIik7aWYodC50cmFuc2Zvcm0pdGhyb3cgbmV3IEVycm9yKCJhbHJlYWR5IHF1YW50aXplZCIpO3ZhciByLGk9bih0KSxhPWlbMF0sbz0oaVsyXS1hKS8oZS0xKXx8MSxzPWlbMV0sbD0oaVszXS1zKS8oZS0xKXx8MTtmdW5jdGlvbiBjKHQpe3RbMF09TWF0aC5yb3VuZCgodFswXS1hKS9vKSx0WzFdPU1hdGgucm91bmQoKHRbMV0tcykvbCl9ZnVuY3Rpb24gdSh0KXtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6dC5nZW9tZXRyaWVzLmZvckVhY2godSk7YnJlYWs7Y2FzZSJQb2ludCI6Yyh0LmNvb3JkaW5hdGVzKTticmVhaztjYXNlIk11bHRpUG9pbnQiOnQuY29vcmRpbmF0ZXMuZm9yRWFjaChjKX19Zm9yKHIgaW4gdC5hcmNzLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPTEsYz0xLHU9dC5sZW5ndGgsZj10WzBdLGg9ZlswXT1NYXRoLnJvdW5kKChmWzBdLWEpL28pLHA9ZlsxXT1NYXRoLnJvdW5kKChmWzFdLXMpL2wpO2k8dTsrK2kpZj10W2ldLHI9TWF0aC5yb3VuZCgoZlswXS1hKS9vKSxuPU1hdGgucm91bmQoKGZbMV0tcykvbCkscj09PWgmJm49PT1wfHwoKGU9dFtjKytdKVswXT1yLWgsaD1yLGVbMV09bi1wLHA9bik7YzwyJiYoKGU9dFtjKytdKVswXT0wLGVbMV09MCksdC5sZW5ndGg9Y30pLHQub2JqZWN0cyl1KHQub2JqZWN0c1tyXSk7cmV0dXJuIHQudHJhbnNmb3JtPXtzY2FsZTpbbyxsXSx0cmFuc2xhdGU6W2Esc119LHR9LHQudHJhbnNmb3JtPXIsdC51bnRyYW5zZm9ybT1mdW5jdGlvbih0KXtpZihudWxsPT0ocj10LnRyYW5zZm9ybSkpcmV0dXJuIGU7dmFyIHIsbixpLGE9ci5zY2FsZVswXSxvPXIuc2NhbGVbMV0scz1yLnRyYW5zbGF0ZVswXSxsPXIudHJhbnNsYXRlWzFdO3JldHVybiBmdW5jdGlvbih0LGUpe2V8fChuPWk9MCk7dmFyIHI9TWF0aC5yb3VuZCgodFswXS1zKS9hKSxjPU1hdGgucm91bmQoKHRbMV0tbCkvbyk7cmV0dXJuIHRbMF09ci1uLG49cix0WzFdPWMtaSxpPWMsdH19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLnRvcG9qc29uPW4udG9wb2pzb258fHt9KX0se31dLDUyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybltdO2lmKDA9PT10KXJldHVybltbMF1dO2Zvcih2YXIgZT0wfE1hdGgucm91bmQoYSh0KzEpKSxyPVtdLG89MDtvPGU7KytvKXtmb3IodmFyIHM9bi51bnJhbmsodCxvKSxsPVswXSxjPTAsdT0wO3U8cy5sZW5ndGg7Kyt1KWMrPTE8PHNbdV0sbC5wdXNoKGMpO2kocyk8MSYmKGxbMF09YyxsW3RdPTApLHIucHVzaChsKX1yZXR1cm4gcn07dmFyIG49dCgicGVybXV0YXRpb24tcmFuayIpLGk9dCgicGVybXV0YXRpb24tcGFyaXR5IiksYT10KCJnYW1tYSIpfSx7Z2FtbWE6MjI3LCJwZXJtdXRhdGlvbi1wYXJpdHkiOjQ1NSwicGVybXV0YXRpb24tcmFuayI6NDU2fV0sNTI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxuPXQucmlnaHR8fGYociksaT10LnJhZGl1c3x8MSxhPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMykscyhyLHIpLG49W10uc2xpY2UuY2FsbChuLDAsMykscyhuLG4pLCJleWUiaW4gdCl7dmFyIHA9dC5leWUsZD1bcFswXS1lWzBdLHBbMV0tZVsxXSxwWzJdLWVbMl1dO28obixkLHIpLGMoblswXSxuWzFdLG5bMl0pPDFlLTY/bj1mKHIpOnMobixuKSxpPWMoZFswXSxkWzFdLGRbMl0pO3ZhciBnPWwocixkKS9pLHY9bChuLGQpL2k7dT1NYXRoLmFjb3MoZyksYT1NYXRoLmFjb3Modil9cmV0dXJuIGk9TWF0aC5sb2coaSksbmV3IGgodC56b29tTWluLHQuem9vbU1heCxlLHIsbixpLGEsdSl9O3ZhciBuPXQoImZpbHRlcmVkLXZlY3RvciIpLGk9dCgiZ2wtbWF0NC9pbnZlcnQiKSxhPXQoImdsLW1hdDQvcm90YXRlIiksbz10KCJnbC12ZWMzL2Nyb3NzIikscz10KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGw9dCgiZ2wtdmVjMy9kb3QiKTtmdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KC0xLHQpKX1mdW5jdGlvbiBmKHQpe3ZhciBlPU1hdGguYWJzKHRbMF0pLHI9TWF0aC5hYnModFsxXSksbj1NYXRoLmFicyh0WzJdKSxpPVswLDAsMF07ZT5NYXRoLm1heChyLG4pP2lbMl09MTpyPk1hdGgubWF4KGUsbik/aVswXT0xOmlbMV09MTtmb3IodmFyIGE9MCxvPTAsbD0wO2w8MzsrK2wpYSs9dFtsXSp0W2xdLG8rPWlbbF0qdFtsXTtmb3IobD0wO2w8MzsrK2wpaVtsXS09by9hKnRbbF07cmV0dXJuIHMoaSxpKSxpfWZ1bmN0aW9uIGgodCxlLHIsaSxhLG8scyxsKXt0aGlzLmNlbnRlcj1uKHIpLHRoaXMudXA9bihpKSx0aGlzLnJpZ2h0PW4oYSksdGhpcy5yYWRpdXM9bihbb10pLHRoaXMuYW5nbGU9bihbcyxsXSksdGhpcy5hbmdsZS5ib3VuZHM9W1stMS8wLC1NYXRoLlBJLzJdLFsxLzAsTWF0aC5QSS8yXV0sdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0LGUpLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPXRoaXMudXAuY3VydmUoMCksdGhpcy5jb21wdXRlZFJpZ2h0PXRoaXMucmlnaHQuY3VydmUoMCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQW5nbGU9dGhpcy5hbmdsZS5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVG93YXJkPVswLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9bmV3IEFycmF5KDE2KTtmb3IodmFyIGM9MDtjPDE2OysrYyl0aGlzLmNvbXB1dGVkTWF0cml4W2NdPS41O3RoaXMucmVjYWxjTWF0cml4KDApfXZhciBwPWgucHJvdG90eXBlO3Auc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotMS8wLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LHAuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzWzBdO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0scC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy51cC5jdXJ2ZSh0KSx0aGlzLnJpZ2h0LmN1cnZlKHQpLHRoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuYW5nbGUuY3VydmUodCk7Zm9yKHZhciBlPXRoaXMuY29tcHV0ZWRVcCxyPXRoaXMuY29tcHV0ZWRSaWdodCxuPTAsaT0wLGE9MDthPDM7KythKWkrPWVbYV0qclthXSxuKz1lW2FdKmVbYV07dmFyIGw9TWF0aC5zcXJ0KG4pLHU9MDtmb3IoYT0wO2E8MzsrK2EpclthXS09ZVthXSppL24sdSs9clthXSpyW2FdLGVbYV0vPWw7dmFyIGY9TWF0aC5zcXJ0KHUpO2ZvcihhPTA7YTwzOysrYSlyW2FdLz1mO3ZhciBoPXRoaXMuY29tcHV0ZWRUb3dhcmQ7byhoLGUscikscyhoLGgpO3ZhciBwPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGQ9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLGc9dGhpcy5jb21wdXRlZEFuZ2xlWzFdLHY9TWF0aC5jb3MoZCksbT1NYXRoLnNpbihkKSx5PU1hdGguY29zKGcpLHg9TWF0aC5zaW4oZyksYj10aGlzLmNvbXB1dGVkQ2VudGVyLF89dip5LHc9bSp5LGs9eCxUPS12KngsQT0tbSp4LE09eSxTPXRoaXMuY29tcHV0ZWRFeWUsRT10aGlzLmNvbXB1dGVkTWF0cml4O2ZvcihhPTA7YTwzOysrYSl7dmFyIEM9XypyW2FdK3cqaFthXStrKmVbYV07RVs0KmErMV09VCpyW2FdK0EqaFthXStNKmVbYV0sRVs0KmErMl09QyxFWzQqYSszXT0wfXZhciBMPUVbMV0sej1FWzVdLE89RVs5XSxJPUVbMl0sRD1FWzZdLFA9RVsxMF0sUj16KlAtTypELEY9TypJLUwqUCxCPUwqRC16KkksTj1jKFIsRixCKTtSLz1OLEYvPU4sQi89TixFWzBdPVIsRVs0XT1GLEVbOF09Qjtmb3IoYT0wO2E8MzsrK2EpU1thXT1iW2FdK0VbMis0KmFdKnA7Zm9yKGE9MDthPDM7KythKXt1PTA7Zm9yKHZhciBqPTA7ajwzOysrail1Kz1FW2ErNCpqXSpTW2pdO0VbMTIrYV09LXV9RVsxNV09MX0scC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn07dmFyIGQ9WzAsMCwwXTtwLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLmFuZ2xlLm1vdmUodCxlLHIpLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZFswXT1pWzJdLGRbMV09aVs2XSxkWzJdPWlbMTBdO2Zvcih2YXIgbz10aGlzLmNvbXB1dGVkVXAscz10aGlzLmNvbXB1dGVkUmlnaHQsbD10aGlzLmNvbXB1dGVkVG93YXJkLGM9MDtjPDM7KytjKWlbNCpjXT1vW2NdLGlbNCpjKzFdPXNbY10saVs0KmMrMl09bFtjXTthKGksaSxuLGQpO2ZvcihjPTA7YzwzOysrYylvW2NdPWlbNCpjXSxzW2NdPWlbNCpjKzFdO3RoaXMudXAuc2V0KHQsb1swXSxvWzFdLG9bMl0pLHRoaXMucmlnaHQuc2V0KHQsc1swXSxzWzFdLHNbMl0pfX0scC5wYW49ZnVuY3Rpb24odCxlLHIsbil7ZT1lfHwwLHI9cnx8MCxuPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPShNYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSxpWzFdKSxvPWlbNV0scz1pWzldLGw9YyhhLG8scyk7YS89bCxvLz1sLHMvPWw7dmFyIHU9aVswXSxmPWlbNF0saD1pWzhdLHA9dSphK2YqbytoKnMsZD1jKHUtPWEqcCxmLT1vKnAsaC09cypwKSxnPSh1Lz1kKSplK2Eqcix2PShmLz1kKSplK28qcixtPShoLz1kKSplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsZyx2LG0pO3ZhciB5PU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3k9TWF0aC5tYXgoMWUtNCx5K24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHkpKX0scC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0scC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9MTsibnVtYmVyIj09dHlwZW9mIHImJihhPTB8ciksKGE8MHx8YT4zKSYmKGE9MSk7dmFyIG89KGErMiklMztlfHwodGhpcy5yZWNhbGNNYXRyaXgodCksZT10aGlzLmNvbXB1dGVkTWF0cml4KTt2YXIgcz1lW2FdLGw9ZVthKzRdLGY9ZVthKzhdO2lmKG4pe3ZhciBoPU1hdGguYWJzKHMpLHA9TWF0aC5hYnMobCksZD1NYXRoLmFicyhmKSxnPU1hdGgubWF4KGgscCxkKTtoPT09Zz8ocz1zPDA/LTE6MSxsPWY9MCk6ZD09PWc/KGY9ZjwwPy0xOjEscz1sPTApOihsPWw8MD8tMToxLHM9Zj0wKX1lbHNle3ZhciB2PWMocyxsLGYpO3MvPXYsbC89dixmLz12fXZhciBtLHkseD1lW29dLGI9ZVtvKzRdLF89ZVtvKzhdLHc9eCpzK2IqbCtfKmYsaz1jKHgtPXMqdyxiLT1sKncsXy09Zip3KSxUPWwqKF8vPWspLWYqKGIvPWspLEE9ZiooeC89ayktcypfLE09cypiLWwqeCxTPWMoVCxBLE0pO2lmKFQvPVMsQS89UyxNLz1TLHRoaXMuY2VudGVyLmp1bXAodCxILEcsWSksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnVwLmp1bXAodCxzLGwsZiksdGhpcy5yaWdodC5qdW1wKHQseCxiLF8pLDI9PT1hKXt2YXIgRT1lWzFdLEM9ZVs1XSxMPWVbOV0sej1FKngrQypiK0wqXyxPPUUqVCtDKkErTCpNO209UjwwPy1NYXRoLlBJLzI6TWF0aC5QSS8yLHk9TWF0aC5hdGFuMihPLHopfWVsc2V7dmFyIEk9ZVsyXSxEPWVbNl0sUD1lWzEwXSxSPUkqcytEKmwrUCpmLEY9SSp4K0QqYitQKl8sQj1JKlQrRCpBK1AqTTttPU1hdGguYXNpbih1KFIpKSx5PU1hdGguYXRhbjIoQixGKX10aGlzLmFuZ2xlLmp1bXAodCx5LG0pLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBOPWVbMl0saj1lWzZdLFY9ZVsxMF0sVT10aGlzLmNvbXB1dGVkTWF0cml4O2koVSxlKTt2YXIgcT1VWzE1XSxIPVVbMTJdL3EsRz1VWzEzXS9xLFk9VVsxNF0vcSxXPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLmp1bXAodCxILU4qVyxHLWoqVyxZLVYqVyl9LHAubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnVwLmxhc3RUKCksdGhpcy5yaWdodC5sYXN0VCgpLHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5hbmdsZS5sYXN0VCgpKX0scC5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy51cC5pZGxlKHQpLHRoaXMucmlnaHQuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMuYW5nbGUuaWRsZSh0KX0scC5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnVwLmZsdXNoKHQpLHRoaXMucmlnaHQuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5hbmdsZS5mbHVzaCh0KX0scC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxwLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHx0aGlzLmNvbXB1dGVkQ2VudGVyO3ZhciBpPShuPW58fHRoaXMuY29tcHV0ZWRVcClbMF0sYT1uWzFdLG89blsyXSxzPWMoaSxhLG8pO2lmKCEoczwxZS02KSl7aS89cyxhLz1zLG8vPXM7dmFyIGw9ZVswXS1yWzBdLGY9ZVsxXS1yWzFdLGg9ZVsyXS1yWzJdLHA9YyhsLGYsaCk7aWYoIShwPDFlLTYpKXtsLz1wLGYvPXAsaC89cDt2YXIgZD10aGlzLmNvbXB1dGVkUmlnaHQsZz1kWzBdLHY9ZFsxXSxtPWRbMl0seT1pKmcrYSp2K28qbSx4PWMoZy09eSppLHYtPXkqYSxtLT15Km8pO2lmKCEoeDwuMDEmJih4PWMoZz1hKmgtbypmLHY9bypsLWkqaCxtPWkqZi1hKmwpKTwxZS02KSl7Zy89eCx2Lz14LG0vPXgsdGhpcy51cC5zZXQodCxpLGEsbyksdGhpcy5yaWdodC5zZXQodCxnLHYsbSksdGhpcy5jZW50ZXIuc2V0KHQsclswXSxyWzFdLHJbMl0pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHApKTt2YXIgYj1hKm0tbyp2LF89bypnLWkqbSx3PWkqdi1hKmcsaz1jKGIsXyx3KSxUPWkqbCthKmYrbypoLEE9ZypsK3YqZittKmgsTT0oYi89aykqbCsoXy89aykqZisody89aykqaCxTPU1hdGguYXNpbih1KFQpKSxFPU1hdGguYXRhbjIoTSxBKSxDPXRoaXMuYW5nbGUuX3N0YXRlLEw9Q1tDLmxlbmd0aC0xXSx6PUNbQy5sZW5ndGgtMl07TCU9MipNYXRoLlBJO3ZhciBPPU1hdGguYWJzKEwrMipNYXRoLlBJLUUpLEk9TWF0aC5hYnMoTC1FKSxEPU1hdGguYWJzKEwtMipNYXRoLlBJLUUpO088SSYmKEwrPTIqTWF0aC5QSSksRDxJJiYoTC09MipNYXRoLlBJKSx0aGlzLmFuZ2xlLmp1bXAodGhpcy5hbmdsZS5sYXN0VCgpLEwseiksdGhpcy5hbmdsZS5zZXQodCxFLFMpfX19fX0seyJmaWx0ZXJlZC12ZWN0b3IiOjIyMiwiZ2wtbWF0NC9pbnZlcnQiOjI2MSwiZ2wtbWF0NC9yb3RhdGUiOjI2NiwiZ2wtdmVjMy9jcm9zcyI6MzI2LCJnbC12ZWMzL2RvdCI6MzMxLCJnbC12ZWMzL25vcm1hbGl6ZSI6MzQ4fV0sNTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dCplLGE9bip0LG89YS0oYS10KSxzPXQtbyxsPW4qZSxjPWwtKGwtZSksdT1lLWMsZj1zKnUtKGktbypjLXMqYy1vKnUpO2lmKHIpcmV0dXJuIHJbMF09ZixyWzFdPWkscjtyZXR1cm5bZixpXX07dmFyIG49KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDUyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQrZSxpPW4tdCxhPWUtaSxvPXQtKG4taSk7aWYocilyZXR1cm4gclswXT1vK2EsclsxXT1uLHI7cmV0dXJuW28rYSxuXX19LHt9XSw1Mjk6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoImR1cCIpO2UuX19UWVBFREFSUkFZX1BPT0x8fChlLl9fVFlQRURBUlJBWV9QT09MPXtVSU5UODphKFszMiwwXSksVUlOVDE2OmEoWzMyLDBdKSxVSU5UMzI6YShbMzIsMF0pLElOVDg6YShbMzIsMF0pLElOVDE2OmEoWzMyLDBdKSxJTlQzMjphKFszMiwwXSksRkxPQVQ6YShbMzIsMF0pLERPVUJMRTphKFszMiwwXSksREFUQTphKFszMiwwXSksVUlOVDhDOmEoWzMyLDBdKSxCVUZGRVI6YShbMzIsMF0pfSk7dmFyIG89InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSxzPWUuX19UWVBFREFSUkFZX1BPT0w7cy5VSU5UOEN8fChzLlVJTlQ4Qz1hKFszMiwwXSkpLHMuQlVGRkVSfHwocy5CVUZGRVI9YShbMzIsMF0pKTt2YXIgbD1zLkRBVEEsYz1zLkJVRkZFUjtmdW5jdGlvbiB1KHQpe2lmKHQpe3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj1pLmxvZzIoZSk7bFtyXS5wdXNoKHQpfX1mdW5jdGlvbiBmKHQpe3Q9aS5uZXh0UG93Mih0KTt2YXIgZT1pLmxvZzIodCkscj1sW2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGYodCksMCx0KX1mdW5jdGlvbiBwKHQpe3JldHVybiBuZXcgVWludDE2QXJyYXkoZigyKnQpLDAsdCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KGYoNCp0KSwwLHQpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG5ldyBJbnQ4QXJyYXkoZih0KSwwLHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG5ldyBJbnQxNkFycmF5KGYoMip0KSwwLHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KGYoNCp0KSwwLHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoZig0KnQpLDAsdCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gbmV3IEZsb2F0NjRBcnJheShmKDgqdCksMCx0KX1mdW5jdGlvbiBiKHQpe3JldHVybiBvP25ldyBVaW50OENsYW1wZWRBcnJheShmKHQpLDAsdCk6aCh0KX1mdW5jdGlvbiBfKHQpe3JldHVybiBuZXcgRGF0YVZpZXcoZih0KSwwLHQpfWZ1bmN0aW9uIHcodCl7dD1pLm5leHRQb3cyKHQpO3ZhciBlPWkubG9nMih0KSxyPWNbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgbih0KX1yLmZyZWU9ZnVuY3Rpb24odCl7aWYobi5pc0J1ZmZlcih0KSljW2kubG9nMih0Lmxlbmd0aCldLnB1c2godCk7ZWxzZXtpZigiW29iamVjdCBBcnJheUJ1ZmZlcl0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfGkubG9nMihlKTtsW3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9ZnVuY3Rpb24odCl7dSh0LmJ1ZmZlcil9LHIuZnJlZUFycmF5QnVmZmVyPXUsci5mcmVlQnVmZmVyPWZ1bmN0aW9uKHQpe2NbaS5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KX0sci5tYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lfHwiYXJyYXlidWZmZXIiPT09ZSlyZXR1cm4gZih0KTtzd2l0Y2goZSl7Y2FzZSJ1aW50OCI6cmV0dXJuIGgodCk7Y2FzZSJ1aW50MTYiOnJldHVybiBwKHQpO2Nhc2UidWludDMyIjpyZXR1cm4gZCh0KTtjYXNlImludDgiOnJldHVybiBnKHQpO2Nhc2UiaW50MTYiOnJldHVybiB2KHQpO2Nhc2UiaW50MzIiOnJldHVybiBtKHQpO2Nhc2UiZmxvYXQiOmNhc2UiZmxvYXQzMiI6cmV0dXJuIHkodCk7Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQ2NCI6cmV0dXJuIHgodCk7Y2FzZSJ1aW50OF9jbGFtcGVkIjpyZXR1cm4gYih0KTtjYXNlImJ1ZmZlciI6cmV0dXJuIHcodCk7Y2FzZSJkYXRhIjpjYXNlImRhdGF2aWV3IjpyZXR1cm4gXyh0KTtkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBudWxsfSxyLm1hbGxvY0FycmF5QnVmZmVyPWYsci5tYWxsb2NVaW50OD1oLHIubWFsbG9jVWludDE2PXAsci5tYWxsb2NVaW50MzI9ZCxyLm1hbGxvY0ludDg9ZyxyLm1hbGxvY0ludDE2PXYsci5tYWxsb2NJbnQzMj1tLHIubWFsbG9jRmxvYXQzMj1yLm1hbGxvY0Zsb2F0PXksci5tYWxsb2NGbG9hdDY0PXIubWFsbG9jRG91YmxlPXgsci5tYWxsb2NVaW50OENsYW1wZWQ9YixyLm1hbGxvY0RhdGFWaWV3PV8sci5tYWxsb2NCdWZmZXI9dyxyLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDMyOysrdClzLlVJTlQ4W3RdLmxlbmd0aD0wLHMuVUlOVDE2W3RdLmxlbmd0aD0wLHMuVUlOVDMyW3RdLmxlbmd0aD0wLHMuSU5UOFt0XS5sZW5ndGg9MCxzLklOVDE2W3RdLmxlbmd0aD0wLHMuSU5UMzJbdF0ubGVuZ3RoPTAscy5GTE9BVFt0XS5sZW5ndGg9MCxzLkRPVUJMRVt0XS5sZW5ndGg9MCxzLlVJTlQ4Q1t0XS5sZW5ndGg9MCxsW3RdLmxlbmd0aD0wLGNbdF0ubGVuZ3RoPTB9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sdCgiYnVmZmVyIikuQnVmZmVyKX0seyJiaXQtdHdpZGRsZSI6ODIsYnVmZmVyOjk1LGR1cDoxNjF9XSw1MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW47dmFyIGk9bi5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RzLmxlbmd0aH19KSxpLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxpLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQscj10aGlzLnJvb3RzO3JbdF0hPT10Oyl0PXJbdF07Zm9yKDtyW2VdIT09dDspe3ZhciBuPXJbZV07cltlXT10LGU9bn1yZXR1cm4gdH0saS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDUzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiAwPT09dC5sZW5ndGg/dDplPyhyfHx0LnNvcnQoZSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPXQubGVuZ3RoLGk9dFswXSxhPXRbMF0sbz0xO288bjsrK28paWYoYT1pLGUoaT10W29dLGEpKXtpZihvPT09cil7cisrO2NvbnRpbnVlfXRbcisrXT1pfXJldHVybiB0Lmxlbmd0aD1yLHR9KHQsZSkpOihyfHx0LnNvcnQoKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MSxyPXQubGVuZ3RoLG49dFswXSxpPXRbMF0sYT0xO2E8cjsrK2EsaT1uKWlmKGk9biwobj10W2FdKSE9PWkpe2lmKGE9PT1lKXtlKys7Y29udGludWV9dFtlKytdPW59cmV0dXJuIHQubGVuZ3RoPWUsdH0odCkpfX0se31dLDUzMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPS9bXCdcIl0vO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD8obi50ZXN0KHQuY2hhckF0KDApKSYmKHQ9dC5zdWJzdHIoMSkpLG4udGVzdCh0LmNoYXJBdCh0Lmxlbmd0aC0xKSkmJih0PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSkpLHQpOiIifX0se31dLDUzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtmb3IodmFyIG49MCxpPXIubGVuZ3RoO248aTtuKyspe3ZhciBhPXJbbl07Zm9yKHZhciBvIGluIGEpaWYoKHZvaWQgMD09PWVbb118fEFycmF5LmlzQXJyYXkoZVtvXSl8fHRbb10hPT1lW29dKSYmbyBpbiBlKXt2YXIgcztpZighMD09PWFbb10pcz1lW29dO2Vsc2V7aWYoITE9PT1hW29dKWNvbnRpbnVlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhW29dJiZ2b2lkIDA9PT0ocz1hW29dKGVbb10sdCxlKSkpY29udGludWV9dFtvXT1zfX1yZXR1cm4gdH19LHt9XSw1MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8KGU9e30pO3JldHVybiBuKHQsZS5jYW52YXN8fGksZS5jb250ZXh0fHxhLGUpfTt2YXIgbj10KCIuL2xpYi92dGV4dCIpLGk9bnVsbCxhPW51bGw7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS53aWR0aD04MTkyLGkuaGVpZ2h0PTEwMjQsYT1pLmdldENvbnRleHQoIjJkIikpfSx7Ii4vbGliL3Z0ZXh0Ijo1MzV9XSw1MzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9NjQsbz0xLjI1LHM9e2JyZWFrbGluZXM6ITEsYm9sZHM6ITEsaXRhbGljczohMSxzdWJzY3JpcHRzOiExLHN1cGVyc2NyaXB0czohMX07biYmKG4uc2l6ZSYmbi5zaXplPjAmJihhPW4uc2l6ZSksbi5saW5lU3BhY2luZyYmbi5saW5lU3BhY2luZz4wJiYobz1uLmxpbmVTcGFjaW5nKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYnJlYWtsaW5lcyYmKHMuYnJlYWtsaW5lcz0hIW4uc3R5bGV0YWdzLmJyZWFrbGluZXMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5ib2xkcyYmKHMuYm9sZHM9ISFuLnN0eWxldGFncy5ib2xkcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLml0YWxpY3MmJihzLml0YWxpY3M9ISFuLnN0eWxldGFncy5pdGFsaWNzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3Vic2NyaXB0cyYmKHMuc3Vic2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1YnNjcmlwdHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMmJihzLnN1cGVyc2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1cGVyc2NyaXB0cykpO3JldHVybiByLmZvbnQ9W24uZm9udFN0eWxlLG4uZm9udFZhcmlhbnQsbi5mb250V2VpZ2h0LGErInB4IixuLmZvbnRdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLmpvaW4oIiAiKSxyLnRleHRBbGlnbj0ic3RhcnQiLHIudGV4dEJhc2VsaW5lPSJhbHBoYWJldGljIixyLmRpcmVjdGlvbj0ibHRyIix3KGZ1bmN0aW9uKHQsZSxyLG4sYSxvKXtyPXIucmVwbGFjZSgvXG4vZywiIikscj0hMD09PW8uYnJlYWtsaW5lcz9yLnJlcGxhY2UoL1w8YnJcPi9nLCJcbiIpOnIucmVwbGFjZSgvXDxiclw+L2csIiAiKTt2YXIgcz0iIixsPVtdO2ZvcihrPTA7azxyLmxlbmd0aDsrK2spbFtrXT1zOyEwPT09by5ib2xkcyYmKGw9eChjLHUscixsKSksITA9PT1vLml0YWxpY3MmJihsPXgoZixoLHIsbCkpLCEwPT09by5zdXBlcnNjcmlwdHMmJihsPXgocCxnLHIsbCkpLCEwPT09by5zdWJzY3JpcHRzJiYobD14KHYseSxyLGwpKTt2YXIgYj1bXSxfPSIiO2ZvcihrPTA7azxyLmxlbmd0aDsrK2spbnVsbCE9PWxba10mJihfKz1yW2tdLGIucHVzaChsW2tdKSk7dmFyIHcsayxULEEsTSxTPV8uc3BsaXQoIlxuIiksRT1TLmxlbmd0aCxDPU1hdGgucm91bmQoYSpuKSxMPW4sej0yKm4sTz0wLEk9RSpDK3o7dC5oZWlnaHQ8SSYmKHQuaGVpZ2h0PUkpLGUuZmlsbFN0eWxlPSIjMDAwIixlLmZpbGxSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlLmZpbGxTdHlsZT0iI2ZmZiI7dmFyIEQ9MCxQPSIiO2Z1bmN0aW9uIFIoKXtpZigiIiE9PVApe3ZhciB0PWUubWVhc3VyZVRleHQoUCkud2lkdGg7ZS5maWxsVGV4dChQLEwrVCx6K0EpLFQrPXR9fWZ1bmN0aW9uIEYoKXtyZXR1cm4gTWF0aC5yb3VuZChNKSsicHggIn1mdW5jdGlvbiBCKHQscil7dmFyIG49IiIrZS5mb250O2lmKCEwPT09by5zdWJzY3JpcHRzKXt2YXIgaT10LmluZGV4T2YobSksYT1yLmluZGV4T2YobSkscz1pPi0xP3BhcnNlSW50KHRbMStpXSk6MCxsPWE+LTE/cGFyc2VJbnQoclsxK2FdKTowO3MhPT1sJiYobj1uLnJlcGxhY2UoRigpLCI/cHggIiksTSo9TWF0aC5wb3coLjc1LGwtcyksbj1uLnJlcGxhY2UoIj9weCAiLEYoKSkpLEErPS4yNSpDKihsLXMpfWlmKCEwPT09by5zdXBlcnNjcmlwdHMpe3ZhciBjPXQuaW5kZXhPZihkKSxmPXIuaW5kZXhPZihkKSxwPWM+LTE/cGFyc2VJbnQodFsxK2NdKTowLGc9Zj4tMT9wYXJzZUludChyWzErZl0pOjA7cCE9PWcmJihuPW4ucmVwbGFjZShGKCksIj9weCAiKSxNKj1NYXRoLnBvdyguNzUsZy1wKSxuPW4ucmVwbGFjZSgiP3B4ICIsRigpKSksQS09LjI1KkMqKGctcCl9aWYoITA9PT1vLmJvbGRzKXt2YXIgdj10LmluZGV4T2YodSk+LTEseT1yLmluZGV4T2YodSk+LTE7IXYmJnkmJihuPXg/bi5yZXBsYWNlKCJpdGFsaWMgIiwiaXRhbGljIGJvbGQgIik6ImJvbGQgIituKSx2JiYheSYmKG49bi5yZXBsYWNlKCJib2xkICIsIiIpKX1pZighMD09PW8uaXRhbGljcyl7dmFyIHg9dC5pbmRleE9mKGgpPi0xLGI9ci5pbmRleE9mKGgpPi0xOyF4JiZiJiYobj0iaXRhbGljICIrbikseCYmIWImJihuPW4ucmVwbGFjZSgiaXRhbGljICIsIiIpKX1lLmZvbnQ9bn1mb3Iodz0wO3c8RTsrK3cpe3ZhciBOPVNbd10rIlxuIjtmb3IoVD0wLEE9dypDLE09bixQPSIiLGs9MDtrPE4ubGVuZ3RoOysrayl7dmFyIGo9aytEPGIubGVuZ3RoP2JbaytEXTpiW2IubGVuZ3RoLTFdO3M9PT1qP1ArPU5ba106KFIoKSxQPU5ba10sdm9pZCAwIT09aiYmKEIocyxqKSxzPWopKX1SKCksRCs9Ti5sZW5ndGg7dmFyIFY9MHxNYXRoLnJvdW5kKFQrMipMKTtPPFYmJihPPVYpfXZhciBVPU8scT16K0MqRTtyZXR1cm4gaShlLmdldEltYWdlRGF0YSgwLDAsVSxxKS5kYXRhLFtxLFUsNF0pLnBpY2soLTEsLTEsMCkudHJhbnNwb3NlKDEsMCl9KGUscix0LGEsbyxzKSxuLGEpfSxlLmV4cG9ydHMucHJvY2Vzc1BpeGVscz13O3ZhciBuPXQoInN1cmZhY2UtbmV0cyIpLGk9dCgibmRhcnJheSIpLGE9dCgic2ltcGxpZnktcGxhbmFyLWdyYXBoIiksbz10KCJjbGVhbi1wc2xnIikscz10KCJjZHQyZCIpLGw9dCgicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lIiksYz0iYiIsdT0iYnwiLGY9ImkiLGg9Iml8IixwPSJzdXAiLGQ9IisiLGc9IisxIix2PSJzdWIiLG09Ii0iLHk9Ii0xIjtmdW5jdGlvbiB4KHQsZSxyLG4pe2Zvcih2YXIgaT0iPCIrdCsiPiIsYT0iPC8iK3QrIj4iLG89aS5sZW5ndGgscz1hLmxlbmd0aCxsPWVbMF09PT1kfHxlWzBdPT09bSxjPTAsdT0tcztjPi0xJiYtMSE9PShjPXIuaW5kZXhPZihpLGMpKSYmLTEhPT0odT1yLmluZGV4T2YoYSxjK28pKSYmISh1PD1jKTspe2Zvcih2YXIgZj1jO2Y8dStzOysrZilpZihmPGMrb3x8Zj49dSluW2ZdPW51bGwscj1yLnN1YnN0cigwLGYpKyIgIityLnN1YnN0cihmKzEpO2Vsc2UgaWYobnVsbCE9PW5bZl0pe3ZhciBoPW5bZl0uaW5kZXhPZihlWzBdKTstMT09PWg/bltmXSs9ZTpsJiYobltmXT1uW2ZdLnN1YnN0cigwLGgrMSkrKDErcGFyc2VJbnQobltmXVtoKzFdKSkrbltmXS5zdWJzdHIoaCsyKSl9dmFyIHA9YytvLGc9ci5zdWJzdHIocCx1LXApLmluZGV4T2YoaSk7Yz0tMSE9PWc/Zzp1K3N9cmV0dXJuIG59ZnVuY3Rpb24gYih0LGUpe3ZhciByPW4odCwxMjgpO3JldHVybiBlP2Eoci5jZWxscyxyLnBvc2l0aW9ucywuMjUpOntlZGdlczpyLmNlbGxzLHBvc2l0aW9uczpyLnBvc2l0aW9uc319ZnVuY3Rpb24gXyh0LGUscixuKXt2YXIgaT1iKHQsbiksYT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUudGV4dEFsaWdufHwic3RhcnQiLGk9ZS50ZXh0QmFzZWxpbmV8fCJhbHBoYWJldGljIixhPVsxPDwzMCwxPDwzMF0sbz1bMCwwXSxzPXQubGVuZ3RoLGw9MDtsPHM7KytsKWZvcih2YXIgYz10W2xdLHU9MDt1PDI7Kyt1KWFbdV09MHxNYXRoLm1pbihhW3VdLGNbdV0pLG9bdV09MHxNYXRoLm1heChvW3VdLGNbdV0pO3ZhciBmPTA7c3dpdGNoKG4pe2Nhc2UiY2VudGVyIjpmPS0uNSooYVswXStvWzBdKTticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6Zj0tb1swXTticmVhaztjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmY9LWFbMF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29nbml6ZWQgdGV4dEFsaWduOiAnIituKyInIil9dmFyIGg9MDtzd2l0Y2goaSl7Y2FzZSJoYW5naW5nIjpjYXNlInRvcCI6aD0tYVsxXTticmVhaztjYXNlIm1pZGRsZSI6aD0tLjUqKGFbMV0rb1sxXSk7YnJlYWs7Y2FzZSJhbHBoYWJldGljIjpjYXNlImlkZW9ncmFwaGljIjpoPS0zKnI7YnJlYWs7Y2FzZSJib3R0b20iOmg9LW9bMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29naW5pemVkIHRleHRCYXNlbGluZTogJyIraSsiJyIpfXZhciBwPTEvcjtyZXR1cm4ibGluZUhlaWdodCJpbiBlP3AqPStlLmxpbmVIZWlnaHQ6IndpZHRoImluIGU/cD1lLndpZHRoLyhvWzBdLWFbMF0pOiJoZWlnaHQiaW4gZSYmKHA9ZS5oZWlnaHQvKG9bMV0tYVsxXSkpLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltwKih0WzBdK2YpLHAqKHRbMV0raCldfSl9KGkucG9zaXRpb25zLGUsciksYz1pLmVkZ2VzLHU9ImNjdyI9PT1lLm9yaWVudGF0aW9uO2lmKG8oYSxjKSxlLnBvbHlnb25zfHxlLnBvbHlnb258fGUucG9seWxpbmUpe2Zvcih2YXIgZj1sKGMsYSksaD1uZXcgQXJyYXkoZi5sZW5ndGgpLHA9MDtwPGYubGVuZ3RoOysrcCl7Zm9yKHZhciBkPWZbcF0sZz1uZXcgQXJyYXkoZC5sZW5ndGgpLHY9MDt2PGQubGVuZ3RoOysrdil7Zm9yKHZhciBtPWRbdl0seT1uZXcgQXJyYXkobS5sZW5ndGgpLHg9MDt4PG0ubGVuZ3RoOysreCl5W3hdPWFbbVt4XV0uc2xpY2UoKTt1JiZ5LnJldmVyc2UoKSxnW3ZdPXl9aFtwXT1nfXJldHVybiBofXJldHVybiBlLnRyaWFuZ2xlc3x8ZS50cmlhbmd1bGF0ZXx8ZS50cmlhbmdsZT97Y2VsbHM6cyhhLGMse2RlbGF1bmF5OiExLGV4dGVyaW9yOiExLGludGVyaW9yOiEwfSkscG9zaXRpb25zOmF9OntlZGdlczpjLHBvc2l0aW9uczphfX1mdW5jdGlvbiB3KHQsZSxyKXt0cnl7cmV0dXJuIF8odCxlLHIsITApfWNhdGNoKHQpe310cnl7cmV0dXJuIF8odCxlLHIsITEpfWNhdGNoKHQpe31yZXR1cm4gZS5wb2x5Z29uc3x8ZS5wb2x5bGluZXx8ZS5wb2x5Z29uP1tdOmUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpbXSxwb3NpdGlvbnM6W119OntlZGdlczpbXSxwb3NpdGlvbnM6W119fX0se2NkdDJkOjk2LCJjbGVhbi1wc2xnIjoxMDYsbmRhcnJheTo0NDIsInBsYW5hci1ncmFwaC10by1wb2x5bGluZSI6NDYwLCJzaW1wbGlmeS1wbGFuYXItZ3JhcGgiOjUwOCwic3VyZmFjZS1uZXRzIjo1MTV9XSw1MzY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBzZXN8fCFzZXMub2t8fHNlcy5vaygpKXsidW5kZWZpbmVkIiE9dHlwZW9mIHNlcyYmKHNlcy53ZWFrTWFwUGVybWl0SG9zdE9iamVjdHM9dik7dmFyIHQ9ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXApe3ZhciByPVdlYWtNYXA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9GaXJlZm94Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKTtlbHNle3ZhciBuPW5ldyByLGk9T2JqZWN0LmZyZWV6ZSh7fSk7aWYobi5zZXQoaSwxKSwxPT09bi5nZXQoaSkpcmV0dXJuIHZvaWQoZS5leHBvcnRzPVdlYWtNYXApO3Q9ITB9fU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsbz1PYmplY3QuZGVmaW5lUHJvcGVydHkscz1PYmplY3QuaXNFeHRlbnNpYmxlLGw9IndlYWttYXA6IixjPWwrImlkZW50OiIrTWF0aC5yYW5kb20oKSsiX19fIjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkpe3ZhciB1PW5ldyBBcnJheUJ1ZmZlcigyNSksZj1uZXcgVWludDhBcnJheSh1KTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGYpLGM9bCsicmFuZDoiK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChmLGZ1bmN0aW9uKHQpe3JldHVybih0JTM2KS50b1N0cmluZygzNil9KS5qb2luKCIiKSsiX19fIn1pZihvKE9iamVjdCwiZ2V0T3duUHJvcGVydHlOYW1lcyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQpLmZpbHRlcihtKX19KSwiZ2V0UHJvcGVydHlOYW1lcyJpbiBPYmplY3Qpe3ZhciBoPU9iamVjdC5nZXRQcm9wZXJ0eU5hbWVzO28oT2JqZWN0LCJnZXRQcm9wZXJ0eU5hbWVzIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGgodCkuZmlsdGVyKG0pfX0pfSFmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5mcmVlemU7byhPYmplY3QsImZyZWV6ZSIse3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB5KGUpLHQoZSl9fSk7dmFyIGU9T2JqZWN0LnNlYWw7byhPYmplY3QsInNlYWwiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4geSh0KSxlKHQpfX0pO3ZhciByPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztvKE9iamVjdCwicHJldmVudEV4dGVuc2lvbnMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4geSh0KSxyKHQpfX0pfSgpO3ZhciBwPSExLGQ9MCxnPWZ1bmN0aW9uKCl7dGhpcyBpbnN0YW5jZW9mIGd8fGIoKTt2YXIgdD1bXSxlPVtdLHI9ZCsrO3JldHVybiBPYmplY3QuY3JlYXRlKGcucHJvdG90eXBlLHtnZXRfX186e3ZhbHVlOngoZnVuY3Rpb24obixpKXt2YXIgYSxvPXkobik7cmV0dXJuIG8/ciBpbiBvP29bcl06aTooYT10LmluZGV4T2YobikpPj0wP2VbYV06aX0pfSxoYXNfX186e3ZhbHVlOngoZnVuY3Rpb24oZSl7dmFyIG49eShlKTtyZXR1cm4gbj9yIGluIG46dC5pbmRleE9mKGUpPj0wfSl9LHNldF9fXzp7dmFsdWU6eChmdW5jdGlvbihuLGkpe3ZhciBhLG89eShuKTtyZXR1cm4gbz9vW3JdPWk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdPWk6KGE9dC5sZW5ndGgsZVthXT1pLHRbYV09biksdGhpc30pfSxkZWxldGVfX186e3ZhbHVlOngoZnVuY3Rpb24obil7dmFyIGksYSxvPXkobik7cmV0dXJuIG8/ciBpbiBvJiZkZWxldGUgb1tyXTohKChpPXQuaW5kZXhPZihuKSk8MHx8KGE9dC5sZW5ndGgtMSx0W2ldPXZvaWQgMCxlW2ldPWVbYV0sdFtpXT10W2FdLHQubGVuZ3RoPWEsZS5sZW5ndGg9YSwwKSl9KX19KX07Zy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtnZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGRlbGV0ZTp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZXRlX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksImZ1bmN0aW9uIj09dHlwZW9mIHI/ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcyBpbnN0YW5jZW9mIGd8fGIoKTt2YXIgZSxuPW5ldyByLGk9dm9pZCAwLGE9ITE7cmV0dXJuIGU9dD9mdW5jdGlvbih0LGUpe3JldHVybiBuLnNldCh0LGUpLG4uaGFzKHQpfHwoaXx8KGk9bmV3IGcpLGkuc2V0KHQsZSkpLHRoaXN9OmZ1bmN0aW9uKHQsZSl7aWYoYSl0cnl7bi5zZXQodCxlKX1jYXRjaChyKXtpfHwoaT1uZXcgZyksaS5zZXRfX18odCxlKX1lbHNlIG4uc2V0KHQsZSk7cmV0dXJuIHRoaXN9LE9iamVjdC5jcmVhdGUoZy5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6eChmdW5jdGlvbih0LGUpe3JldHVybiBpP24uaGFzKHQpP24uZ2V0KHQpOmkuZ2V0X19fKHQsZSk6bi5nZXQodCxlKX0pfSxoYXNfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7cmV0dXJuIG4uaGFzKHQpfHwhIWkmJmkuaGFzX19fKHQpfSl9LHNldF9fXzp7dmFsdWU6eChlKX0sZGVsZXRlX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQpe3ZhciBlPSEhbi5kZWxldGUodCk7cmV0dXJuIGkmJmkuZGVsZXRlX19fKHQpfHxlfSl9LHBlcm1pdEhvc3RPYmplY3RzX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQpe2lmKHQhPT12KXRocm93IG5ldyBFcnJvcigiYm9ndXMgY2FsbCB0byBwZXJtaXRIb3N0T2JqZWN0c19fXyIpO2E9ITB9KX19KX10JiYidW5kZWZpbmVkIiE9dHlwZW9mIFByb3h5JiYoUHJveHk9dm9pZCAwKSxuLnByb3RvdHlwZT1nLnByb3RvdHlwZSxlLmV4cG9ydHM9bixPYmplY3QuZGVmaW5lUHJvcGVydHkoV2Vha01hcC5wcm90b3R5cGUsImNvbnN0cnVjdG9yIix7dmFsdWU6V2Vha01hcCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfSgpOigidW5kZWZpbmVkIiE9dHlwZW9mIFByb3h5JiYoUHJveHk9dm9pZCAwKSxlLmV4cG9ydHM9Zyl9ZnVuY3Rpb24gdih0KXt0LnBlcm1pdEhvc3RPYmplY3RzX19fJiZ0LnBlcm1pdEhvc3RPYmplY3RzX19fKHYpfWZ1bmN0aW9uIG0odCl7cmV0dXJuISh0LnN1YnN0cigwLGwubGVuZ3RoKT09bCYmIl9fXyI9PT10LnN1YnN0cih0Lmxlbmd0aC0zKSl9ZnVuY3Rpb24geSh0KXtpZih0IT09T2JqZWN0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIk5vdCBhbiBvYmplY3Q6ICIrdCk7dmFyIGU9dFtjXTtpZihlJiZlLmtleT09PXQpcmV0dXJuIGU7aWYocyh0KSl7ZT17a2V5OnR9O3RyeXtyZXR1cm4gbyh0LGMse3ZhbHVlOmUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITF9KSxlfWNhdGNoKHQpe3JldHVybn19fWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQucHJvdG90eXBlPW51bGwsT2JqZWN0LmZyZWV6ZSh0KX1mdW5jdGlvbiBiKCl7cHx8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlfHwocD0hMCxjb25zb2xlLndhcm4oIldlYWtNYXAgc2hvdWxkIGJlIGludm9rZWQgYXMgbmV3IFdlYWtNYXAoKSwgbm90IFdlYWtNYXAoKS4gVGhpcyB3aWxsIGJlIGFuIGVycm9yIGluIHRoZSBmdXR1cmUuIikpfX0oKX0se31dLDUzNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaGlkZGVuLXN0b3JlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCgib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJXZWFrbWFwLXNoaW06IEtleSBtdXN0IGJlIG9iamVjdCIpO3ZhciByPWUudmFsdWVPZih0KTtyZXR1cm4gciYmci5pZGVudGl0eT09PXQ/cjpuKGUsdCl9fX0seyIuL2hpZGRlbi1zdG9yZS5qcyI6NTM4fV0sNTM4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2lkZW50aXR5OmV9LG49dC52YWx1ZU9mO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmFsdWVPZiIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyfSx3cml0YWJsZTohMH0pLHJ9fSx7fV0sNTM5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jcmVhdGUtc3RvcmUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKCk7cmV0dXJue2dldDpmdW5jdGlvbihlLHIpe3ZhciBuPXQoZSk7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoInZhbHVlIik/bi52YWx1ZTpyfSxzZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChlKS52YWx1ZT1yLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4idmFsdWUiaW4gdChlKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgdChlKS52YWx1ZX19fX0seyIuL2NyZWF0ZS1zdG9yZS5qcyI6NTM3fV0sNTQwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2V0LWNhbnZhcy1jb250ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJ3ZWJnbCIsdCl9fSx7ImdldC1jYW52YXMtY29udGV4dCI6MjI4fV0sNTQxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1vLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShvLnByb3RvdHlwZSx7bmFtZToiQ2hpbmVzZSIsamRFcG9jaDoxNzIxNDI1LjUsaGFzWWVhclplcm86ITEsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiQ2hpbmVzZSIsZXBvY2hzOlsiQkVDIiwiRUMiXSxtb250aE51bWJlcnM6ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciByPXQubWF0Y2gobCk7cmV0dXJuIHI/clswXToiIn12YXIgbj10aGlzLl92YWxpZGF0ZVllYXIodCksaT10Lm1vbnRoKCksYT0iIit0aGlzLnRvQ2hpbmVzZU1vbnRoKG4saSk7cmV0dXJuIGUmJmEubGVuZ3RoPDImJihhPSIwIithKSx0aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpJiYoYSs9ImkiKSxhfSxtb250aE5hbWVzOmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9dC5tYXRjaChjKTtyZXR1cm4gZT9lWzBdOiIifXZhciByPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxuPXQubW9udGgoKSxpPVsiXHU0ZTAwXHU2NzA4IiwiXHU0ZThjXHU2NzA4IiwiXHU0ZTA5XHU2NzA4IiwiXHU1NmRiXHU2NzA4IiwiXHU0ZTk0XHU2NzA4IiwiXHU1MTZkXHU2NzA4IiwiXHU0ZTAzXHU2NzA4IiwiXHU1MTZiXHU2NzA4IiwiXHU0ZTVkXHU2NzA4IiwiXHU1MzQxXHU2NzA4IiwiXHU1MzQxXHU0ZTAwXHU2NzA4IiwiXHU1MzQxXHU0ZThjXHU2NzA4Il1bdGhpcy50b0NoaW5lc2VNb250aChyLG4pLTFdO3JldHVybiB0aGlzLmlzSW50ZXJjYWxhcnlNb250aChyLG4pJiYoaT0iXHU5NWYwIitpKSxpfSxtb250aE5hbWVzU2hvcnQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKHUpO3JldHVybiBlP2VbMF06IiJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGk9WyJcdTRlMDAiLCJcdTRlOGMiLCJcdTRlMDkiLCJcdTU2ZGIiLCJcdTRlOTQiLCJcdTUxNmQiLCJcdTRlMDMiLCJcdTUxNmIiLCJcdTRlNWQiLCJcdTUzNDEiLCJcdTUzNDFcdTRlMDAiLCJcdTUzNDFcdTRlOGMiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihpPSJcdTk1ZjAiK2kpLGl9LHBhcnNlTW9udGg6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcixuPXBhcnNlSW50KGUpO2lmKGlzTmFOKG4pKSJcdTk1ZjAiPT09ZVswXSYmKHI9ITAsZT1lLnN1YnN0cmluZygxKSksIlx1NjcwOCI9PT1lW2UubGVuZ3RoLTFdJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKSxuPTErWyJcdTRlMDAiLCJcdTRlOGMiLCJcdTRlMDkiLCJcdTU2ZGIiLCJcdTRlOTQiLCJcdTUxNmQiLCJcdTRlMDMiLCJcdTUxNmIiLCJcdTRlNWQiLCJcdTUzNDEiLCJcdTUzNDFcdTRlMDAiLCJcdTUzNDFcdTRlOGMiXS5pbmRleE9mKGUpO2Vsc2V7dmFyIGk9ZVtlLmxlbmd0aC0xXTtyPSJpIj09PWl8fCJJIj09PWl9cmV0dXJuIHRoaXMudG9Nb250aEluZGV4KHQsbixyKX0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6MSxpc1JUTDohMX19LF92YWxpZGF0ZVllYXI6ZnVuY3Rpb24odCxlKXtpZih0LnllYXImJih0PXQueWVhcigpKSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MTg4OHx8dD4yMTExKXRocm93IGUucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHR9LHRvTW9udGhJbmRleDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKHImJmUhPT1pfHxlPDF8fGU+MTIpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGk/IXImJmU8PWk/ZS0xOmU6ZS0xfSx0b0NoaW5lc2VNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9KHQ9dC55ZWFyKCkpLm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtpZihlPDB8fGU+KHI/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByP2U8cj9lKzE6ZTplKzF9LGludGVyY2FsYXJ5TW9udGg6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLGZbdC1mWzBdXT4+MTN9LGlzSW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9KHQ9dC55ZWFyKCkpLm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtyZXR1cm4hIXImJnI9PT1lfSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIGksbz10aGlzLl92YWxpZGF0ZVllYXIodCxuLmxvY2FsLmludmFsaWR5ZWFyKSxzPWhbby1oWzBdXSxsPXM+PjkmNDA5NSxjPXM+PjUmMTUsdT0zMSZzOyhpPWEubmV3RGF0ZShsLGMsdSkpLmFkZCg0LShpLmRheU9mV2VlaygpfHw3KSwiZCIpO3ZhciBmPXRoaXMudG9KRCh0LGUsciktaS50b0pEKCk7cmV0dXJuIDErTWF0aC5mbG9vcihmLzcpfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MTM6MTJ9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdD10aGlzLl92YWxpZGF0ZVllYXIodCk7dmFyIHI9Zlt0LWZbMF1dO2lmKGU+KHI+PjEzPzEyOjExKSl0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gciYxPDwxMi1lPzMwOjI5fSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHMscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3ZhbGlkYXRlWWVhcihpLnllYXIoKSksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBvPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHQsZSkscz10aGlzLnRvQ2hpbmVzZU1vbnRoKHQsZSksbD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scztpZigib2JqZWN0Ij09dHlwZW9mIHQpbz10LGE9ZXx8e307ZWxzZXt2YXIgbD0ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTE4ODgmJnQ8PTIxMTE7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJMdW5hciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExIik7dmFyIGM9Im51bWJlciI9PXR5cGVvZiBlJiZlPj0xJiZlPD0xMjtpZighYyl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyIik7dmFyIHUscD0ibnVtYmVyIj09dHlwZW9mIHImJnI+PTEmJnI8PTMwO2lmKCFwKXRocm93IG5ldyBFcnJvcigiTHVuYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMwIik7Im9iamVjdCI9PXR5cGVvZiBuPyh1PSExLGE9bik6KHU9ISFuLGE9aXx8e30pLG89e3llYXI6dCxtb250aDplLGRheTpyLGlzSW50ZXJjYWxhcnk6dX19cz1vLmRheS0xO3ZhciBkLGc9ZltvLnllYXItZlswXV0sdj1nPj4xMztkPXY/by5tb250aD52P28ubW9udGg6by5pc0ludGVyY2FsYXJ5P28ubW9udGg6by5tb250aC0xOm8ubW9udGgtMTtmb3IodmFyIG09MDttPGQ7bSsrKXt2YXIgeT1nJjE8PDEyLW0/MzA6Mjk7cys9eX12YXIgeD1oW28ueWVhci1oWzBdXSxiPW5ldyBEYXRlKHg+PjkmNDA5NSwoeD4+NSYxNSktMSwoMzEmeCkrcyk7cmV0dXJuIGEueWVhcj1iLmdldEZ1bGxZZWFyKCksYS5tb250aD0xK2IuZ2V0TW9udGgoKSxhLmRheT1iLmdldERhdGUoKSxhfSh0LHMscixvKTtyZXR1cm4gYS50b0pEKGwueWVhcixsLm1vbnRoLGwuZGF5KX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPWEuZnJvbUpEKHQpLHI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtpZigib2JqZWN0Ij09dHlwZW9mIHQpaT10LGE9ZXx8e307ZWxzZXt2YXIgbz0ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTE4ODgmJnQ8PTIxMTE7aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJTb2xhciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExIik7dmFyIHM9Im51bWJlciI9PXR5cGVvZiBlJiZlPj0xJiZlPD0xMjtpZighcyl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyIik7dmFyIGw9Im51bWJlciI9PXR5cGVvZiByJiZyPj0xJiZyPD0zMTtpZighbCl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIGRheSBvdXRzaWRlIHJhbmdlIDEgLSAzMSIpO2k9e3llYXI6dCxtb250aDplLGRheTpyfSxhPW58fHt9fXZhciBjPWhbaS55ZWFyLWhbMF1dLHU9aS55ZWFyPDw5fGkubW9udGg8PDV8aS5kYXk7YS55ZWFyPXU+PWM/aS55ZWFyOmkueWVhci0xLGM9aFthLnllYXItaFswXV07dmFyIHAsZD1uZXcgRGF0ZShjPj45JjQwOTUsKGM+PjUmMTUpLTEsMzEmYyksZz1uZXcgRGF0ZShpLnllYXIsaS5tb250aC0xLGkuZGF5KTtwPU1hdGgucm91bmQoKGctZCkvODY0ZTUpO3ZhciB2LG09ZlthLnllYXItZlswXV07Zm9yKHY9MDt2PDEzO3YrKyl7dmFyIHk9bSYxPDwxMi12PzMwOjI5O2lmKHA8eSlicmVhaztwLT15fXZhciB4PW0+PjEzOyF4fHx2PHg/KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPTErdik6dj09PXg/KGEuaXNJbnRlcmNhbGFyeT0hMCxhLm1vbnRoPXYpOihhLmlzSW50ZXJjYWxhcnk9ITEsYS5tb250aD12KTtyZXR1cm4gYS5kYXk9MStwLGF9KGUueWVhcigpLGUubW9udGgoKSxlLmRheSgpKSxuPXRoaXMudG9Nb250aEluZGV4KHIueWVhcixyLm1vbnRoLHIuaXNJbnRlcmNhbGFyeSk7cmV0dXJuIHRoaXMubmV3RGF0ZShyLnllYXIsbixyLmRheSl9LGZyb21TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChzKSxyPXRoaXMuX3ZhbGlkYXRlWWVhcigrZVsxXSksbj0rZVsyXSxpPSEhZVszXSxhPXRoaXMudG9Nb250aEluZGV4KHIsbixpKSxvPStlWzRdO3JldHVybiB0aGlzLm5ld0RhdGUocixhLG8pfSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQueWVhcigpLGk9dC5tb250aCgpLGE9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSxzPXRoaXMudG9DaGluZXNlTW9udGgobixpKSxsPU9iamVjdC5nZXRQcm90b3R5cGVPZihvLnByb3RvdHlwZSkuYWRkLmNhbGwodGhpcyx0LGUscik7aWYoInkiPT09cil7dmFyIGM9bC55ZWFyKCksdT1sLm1vbnRoKCksZj10aGlzLmlzSW50ZXJjYWxhcnlNb250aChjLHMpLGg9YSYmZj90aGlzLnRvTW9udGhJbmRleChjLHMsITApOnRoaXMudG9Nb250aEluZGV4KGMscywhMSk7aCE9PXUmJmwubW9udGgoaCl9cmV0dXJuIGx9fSk7dmFyIHM9L15ccyooLT9cZFxkXGRcZHxcZFxkKVstXC9dKFxkP1xkKShbaUldPylbLVwvXShcZD9cZCkvbSxsPS9eXGQ/XGRbaUldPy9tLGM9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdP1x1NjcwOC9tLHU9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdPy9tO24uY2FsZW5kYXJzLmNoaW5lc2U9bzt2YXIgZj1bMTg4Nyw1NzgwLDU4MDIsMTkxNTcsMjc0Miw1MDM1OSwxMTk4LDI2NDYsNDYzNzgsNzQ2NiwzNDEyLDMwMTIyLDU0ODIsNjc5NDksMjM5Niw1Mjk0LDQzNTk3LDY3MzIsNjk1NCwzNjE4MSwyNzcyLDQ5NTQsMTg3ODEsMjM5Niw1NDQyNyw1Mjc0LDY3MzAsNDc3ODEsNTgwMCw2ODY4LDIxMjEwLDQ3OTAsNTk3MDMsMjM1MCw1MjcwLDQ2NjY3LDM0MDIsMzQ5NiwzODMyNSwxMzg4LDQ3ODIsMTg3MzUsMjM1MCw1MjM3NCw2ODA0LDc0OTgsNDQ0NTcsMjkwNiwxMzg4LDI5Mjk0LDQ3MDAsNjM3ODksNjQ0Miw2ODA0LDU2MTM4LDU4MDIsMjc3MiwzODIzNSwxMjEwLDQ2OTgsMjI4MjcsNTQxOCw2MzEyNSwzNDc2LDU4MDIsNDM3MDEsMjQ4NCw1MzAyLDI3MjIzLDI2NDYsNzA5NTQsNzQ2NiwzNDEyLDU0Njk4LDU0ODIsMjQxMiwzODA2Miw1Mjk0LDI2MzYsMzIwMzgsNjk1NCw2MDI0NSwyNzcyLDQ4MjYsNDMzNTcsMjM5NCw1Mjc0LDM5NTAxLDY3MzAsNzIzNTcsNTgwMCw1ODQ0LDUzOTc4LDQ3OTAsMjM1OCwzODAzOSw1MjcwLDg3NjI3LDM0MDIsMzQ5Niw1NDcwOCw1NDg0LDQ3ODIsNDMzMTEsMjM1MCwzMjIyLDI3OTc4LDc0OTgsNjg5NjUsMjkwNCw1NDg0LDQ1Njc3LDQ3MDAsNjQ0NCwzOTU3Myw2ODA0LDY5ODYsMTkyODUsMjc3Miw2MjgxMSwxMjEwLDQ2OTgsNDc0MDMsNTQxOCw1NzgwLDM4NTcwLDU1NDYsNzY0NjksMjQyMCw1MzAyLDUxNzk5LDI2NDYsNTQxNCwzNjUwMSwzNDEyLDU1NDYsMTg4NjksMjQxMiw1NDQ0Niw1Mjc2LDY3MzIsNDg0MjIsNjgyMiwyOTAwLDI4MDEwLDQ4MjYsOTI1MDksMjM5NCw1Mjc0LDU1ODgzLDY3MzAsNjgyMCw0Nzk1Niw1ODEyLDI3NzgsMTg3NzksMjM1OCw2MjYxNSw1MjcwLDU0NTAsNDY3NTcsMzQ5Miw1NTU2LDI3MzE4LDQ3MTgsNjc4ODcsMjM1MCwzMjIyLDUyNTU0LDc0OTgsMzQyOCwzODI1Miw1NDY4LDQ3MDAsMzEwMjIsNjQ0NCw2NDE0OSw2ODA0LDY5ODYsNDM4NjEsMjc3Miw1MzM4LDM1NDIxLDI2NTAsNzA5NTUsNTQxOCw1NzgwLDU0OTU0LDU1NDYsMjc0MCwzODA3NCw1MzAyLDI2NDYsMjk5OTEsMzM2Niw2MTAxMSwzNDEyLDU1NDYsNDM0NDUsMjQxMiw1Mjk0LDM1NDA2LDY3MzIsNzI5OTgsNjgyMCw2OTk2LDUyNTg2LDI3NzgsMjM5NiwzODA0NSw1Mjc0LDY2OTgsMjMzMzMsNjgyMCw2NDMzOCw1ODEyLDI3NDYsNDMzNTUsMjM1OCw1MjcwLDM5NDk5LDU0NTAsNzk1MjUsMzQ5Miw1NTQ4XSxoPVsxODg3LDk2NjczMiw5NjcyMzEsOTY3NzMzLDk2ODI2NSw5Njg3NjYsOTY5Mjk3LDk2OTc5OCw5NzAyOTgsOTcwODI5LDk3MTMzMCw5NzE4MzAsOTcyMzYyLDk3Mjg2Myw5NzMzOTUsOTczODk2LDk3NDM5Nyw5NzQ5MjgsOTc1NDI4LDk3NTkyOSw5NzY0NjEsOTc2OTYyLDk3NzQ2Miw5Nzc5OTQsOTc4NDk0LDk3OTAyNiw5Nzk1MjYsOTgwMDI2LDk4MDU1OCw5ODEwNTksOTgxNTU5LDk4MjA5MSw5ODI1OTMsOTgzMTI0LDk4MzYyNCw5ODQxMjQsOTg0NjU2LDk4NTE1Nyw5ODU2NTYsOTg2MTg5LDk4NjY5MCw5ODcxOTEsOTg3NzIyLDk4ODIyMiw5ODg3NTMsOTg5MjU0LDk4OTc1NCw5OTAyODYsOTkwNzg4LDk5MTI4OCw5OTE4MTksOTkyMzE5LDk5Mjg1MSw5OTMzNTIsOTkzODUxLDk5NDM4Myw5OTQ4ODUsOTk1Mzg1LDk5NTkxNyw5OTY0MTgsOTk2OTE4LDk5NzQ1MCw5OTc5NDksOTk4NDgxLDk5ODk4Miw5OTk0ODMsMTAwMDAxNCwxMDAwNTE1LDEwMDEwMTYsMTAwMTU0OCwxMDAyMDQ3LDEwMDI1NzgsMTAwMzA4MCwxMDAzNTgwLDEwMDQxMTEsMTAwNDYxMywxMDA1MTEzLDEwMDU2NDUsMTAwNjE0NiwxMDA2NjQ1LDEwMDcxNzcsMTAwNzY3OCwxMDA4MjA5LDEwMDg3MTAsMTAwOTIxMSwxMDA5NzQzLDEwMTAyNDMsMTAxMDc0MywxMDExMjc1LDEwMTE3NzUsMTAxMjMwNiwxMDEyODA3LDEwMTMzMDgsMTAxMzg0MCwxMDE0MzQxLDEwMTQ4NDEsMTAxNTM3MywxMDE1ODc0LDEwMTY0MDQsMTAxNjkwNSwxMDE3NDA1LDEwMTc5MzcsMTAxODQzOCwxMDE4OTM5LDEwMTk0NzEsMTAxOTk3MiwxMDIwNDcxLDEwMjEwMDIsMTAyMTUwMywxMDIyMDM1LDEwMjI1MzUsMTAyMzAzNiwxMDIzNTY4LDEwMjQwNjksMTAyNDU2OCwxMDI1MTAwLDEwMjU2MDEsMTAyNjEwMiwxMDI2NjMzLDEwMjcxMzMsMTAyNzY2NiwxMDI4MTY3LDEwMjg2NjYsMTAyOTE5OCwxMDI5Njk5LDEwMzAxOTksMTAzMDczMCwxMDMxMjMxLDEwMzE3NjMsMTAzMjI2NCwxMDMyNzY0LDEwMzMyOTYsMTAzMzc5NywxMDM0Mjk3LDEwMzQ4MjgsMTAzNTMyOSwxMDM1ODMwLDEwMzYzNjIsMTAzNjg2MSwxMDM3MzkzLDEwMzc4OTQsMTAzODM5NCwxMDM4OTI1LDEwMzk0MjcsMTAzOTkyNywxMDQwNDU5LDEwNDA5NTksMTA0MTQ5MSwxMDQxOTkyLDEwNDI0OTIsMTA0MzAyMywxMDQzNTI0LDEwNDQwMjQsMTA0NDU1NiwxMDQ1MDU3LDEwNDU1NTgsMTA0NjA5MCwxMDQ2NTkwLDEwNDcxMjEsMTA0NzYyMiwxMDQ4MTIyLDEwNDg2NTQsMTA0OTE1NCwxMDQ5NjU1LDEwNTAxODcsMTA1MDY4OSwxMDUxMjE5LDEwNTE3MjAsMTA1MjIyMCwxMDUyNzUxLDEwNTMyNTIsMTA1Mzc1MiwxMDU0Mjg0LDEwNTQ3ODYsMTA1NTI4NSwxMDU1ODE3LDEwNTYzMTcsMTA1Njg0OSwxMDU3MzQ5LDEwNTc4NTAsMTA1ODM4MiwxMDU4ODgzLDEwNTkzODMsMTA1OTkxNSwxMDYwNDE1LDEwNjA5NDcsMTA2MTQ0NywxMDYxOTQ3LDEwNjI0NzksMTA2Mjk4MSwxMDYzNDgwLDEwNjQwMTIsMTA2NDUxNCwxMDY1MDE0LDEwNjU1NDUsMTA2NjA0NSwxMDY2NTc3LDEwNjcwNzgsMTA2NzU3OCwxMDY4MTEwLDEwNjg2MTEsMTA2OTExMiwxMDY5NjQyLDEwNzAxNDIsMTA3MDY3NCwxMDcxMTc1LDEwNzE2NzUsMTA3MjIwNywxMDcyNzA5LDEwNzMyMDksMTA3Mzc0MCwxMDc0MjQxLDEwNzQ3NDEsMTA3NTI3MywxMDc1NzczLDEwNzYzMDUsMTA3NjgwNywxMDc3MzA4LDEwNzc4MzksMTA3ODM0MCwxMDc4ODQwLDEwNzkzNzIsMTA3OTg3MSwxMDgwNDAzLDEwODA5MDRdfSx7Ii4uL21haW4iOjU1NSwib2JqZWN0LWFzc2lnbiI6NDQ2fV0sNTQyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiQ29wdGljIixqZEVwb2NoOjE4MjUwMjkuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNvcHRpYyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiVGhvdXQiLCJQYW9waSIsIkhhdGhvciIsIktvaWFrIiwiVG9iaSIsIk1lc2hpciIsIlBhcmVtaGF0IiwiUGFyZW1vdWRlIiwiUGFzaG9ucyIsIlBhb25pIiwiRXBpcCIsIk1lc29yaSIsIlBpIEtvZ2kgRW5hdm90Il0sbW9udGhOYW1lc1Nob3J0OlsiVGhvIiwiUGFvIiwiSGF0aCIsIktvaSIsIlRvYiIsIk1lc2giLCJQYXQiLCJQYWQiLCJQYXNoIiwiUGFvIiwiRXBpIiwiTWVzbyIsIlBpSyJdLGRheU5hbWVzOlsiVGt5cmlha2EiLCJQZXNuYXUiLCJQc2hvbWVudCIsIlBlZnRvb3UiLCJQdGlvdSIsIlBzb291IiwiUHNhYmJhdG9uIl0sZGF5TmFtZXNTaG9ydDpbIlRreSIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0aSIsIlBzbyIsIlBzYSJdLGRheU5hbWVzTWluOlsiVGsiLCJQZXMiLCJQc2giLCJQZWYiLCJQdCIsIlBzbyIsIlBzYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5jb3B0aWM9YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU0MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkRpc2N3b3JsZCIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlsxNiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiRGlzY3dvcmxkIixlcG9jaHM6WyJCVUMiLCJVQyJdLG1vbnRoTmFtZXM6WyJJY2siLCJPZmZsZSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJHcnVuZSIsIkF1Z3VzdCIsIlNwdW5lIiwiU2VrdG9iZXIiLCJFbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSWNrIiwiT2ZmIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiR3J1IiwiQXVnIiwiU3B1IiwiU2VrIiwiRW1iIiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJPY3RlZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiT2N0IiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk9jIiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Mixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDEzfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksNDAwfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvOCkrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV19LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gOH0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCkrMSklOH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5kYXlPZldlZWsodCxlLHIpO3JldHVybiBuPj0yJiZuPD02fSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybntjZW50dXJ5Om9bTWF0aC5mbG9vcigoaS55ZWFyKCktMSkvMTAwKSsxXXx8IiJ9fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSsoaS55ZWFyKCk8MD8xOjApLGU9aS5tb250aCgpLChyPWkuZGF5KCkpKyhlPjE/MTY6MCkrKGU+Mj8zMiooZS0yKTowKSs0MDAqKHQtMSkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSktTWF0aC5mbG9vcih0aGlzLmpkRXBvY2gpLTE7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCkrMTt0LT00MDAqKGUtMSksdCs9dD4xNT8xNjowO3ZhciByPU1hdGguZmxvb3IodC8zMikrMSxuPXQtMzIqKHItMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGU8PTA/ZS0xOmUscixuKX19KTt2YXIgbz17MjA6IkZydWl0YmF0IiwyMToiQW5jaG92eSJ9O24uY2FsZW5kYXJzLmRpc2N3b3JsZD1hfSx7Ii4uL21haW4iOjU1NSwib2JqZWN0LWFzc2lnbiI6NDQ2fV0sNTQ0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiRXRoaW9waWFuIixqZEVwb2NoOjE3MjQyMjAuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkV0aGlvcGlhbiIsZXBvY2hzOlsiQkVFIiwiRUUiXSxtb250aE5hbWVzOlsiTWVza2VyZW0iLCJUaWtlbWV0IiwiSGlkYXIiLCJUYWhlc2FzIiwiVGlyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc2UiLCJQYWd1bWUiXSxtb250aE5hbWVzU2hvcnQ6WyJNZXMiLCJUaWsiLCJIaWQiLCJUYWgiLCJUaXIiLCJZZWsiLCJNZWciLCJNaWEiLCJHZW4iLCJTZW4iLCJIYW0iLCJOZWgiLCJQYWciXSxkYXlOYW1lczpbIkVodWQiLCJTZWdubyIsIk1ha3NlZ25vIiwiSXJvYiIsIkhhbXVzIiwiQXJiIiwiS2lkYW1lIl0sZGF5TmFtZXNTaG9ydDpbIkVodSIsIlNlZyIsIk1hayIsIklybyIsIkhhbSIsIkFyYiIsIktpZCJdLGRheU5hbWVzTWluOlsiRWgiLCJTZSIsIk1hIiwiSXIiLCJIYSIsIkFyIiwiS2kiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTM9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybih0PWkueWVhcigpKTwwJiZ0KyssaS5kYXkoKSszMCooaS5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksbi5jYWxlbmRhcnMuZXRoaW9waWFuPWF9LHsiLi4vbWFpbiI6NTU1LCJvYmplY3QtYXNzaWduIjo0NDZ9XSw1NDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbyg3Kih0PXQ8MD90KzE6dCkrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCgtMT09PXQ/MTp0KzEsNywxKS10aGlzLnRvSkQodCw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09ZSYmdGhpcy5sZWFwWWVhcih0KT8zMDo4PT09ZSYmNT09PW8odGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8zMDo5PT09ZSYmMz09PW8odGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8yOTp0aGlzLmRheXNQZXJNb250aFtlLTFdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57eWVhclR5cGU6KHRoaXMubGVhcFllYXIoaSk/ImVtYm9saXNtaWMiOiJjb21tb24iKSsiICIrWyJkZWZpY2llbnQiLCJyZWd1bGFyIiwiY29tcGxldGUiXVt0aGlzLmRheXNJblllYXIoaSklMTAtM119fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKTt2YXIgYT10PD0wP3QrMTp0LG89dGhpcy5qZEVwb2NoK3RoaXMuX2RlbGF5MShhKSt0aGlzLl9kZWxheTIoYSkrcisxO2lmKGU8Nyl7Zm9yKHZhciBzPTc7czw9dGhpcy5tb250aHNJblllYXIodCk7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtmb3Iocz0xO3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpfWVsc2UgZm9yKHM9NztzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtyZXR1cm4gb30sX2RlbGF5MTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKCgyMzUqdC0yMzQpLzE5KSxyPTEyMDg0KzEzNzUzKmUsbj0yOSplK01hdGguZmxvb3Ioci8yNTkyMCk7cmV0dXJuIG8oMyoobisxKSw3KTwzJiZuKyssbn0sX2RlbGF5MjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kZWxheTEodC0xKSxyPXRoaXMuX2RlbGF5MSh0KTtyZXR1cm4gdGhpcy5fZGVsYXkxKHQrMSktcj09MzU2PzI6ci1lPT0zODI/MTowfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O2Zvcih2YXIgZT1NYXRoLmZsb29yKDk4NDk2Kih0LXRoaXMuamRFcG9jaCkvMzU5NzUzNTEpLTE7dD49dGhpcy50b0pEKC0xPT09ZT8xOmUrMSw3LDEpOyllKys7Zm9yKHZhciByPXQ8dGhpcy50b0pEKGUsMSwxKT83OjE7dD50aGlzLnRvSkQoZSxyLHRoaXMuZGF5c0luTW9udGgoZSxyKSk7KXIrKzt2YXIgbj10LXRoaXMudG9KRChlLHIsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5oZWJyZXc9YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU0NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IklzbGFtaWMiLGpkRXBvY2g6MTk0ODQzOS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IklzbGFtaWMiLGVwb2NoczpbIkJIIiwiQUgiXSxtb250aE5hbWVzOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmknIGFsLWF3d2FsIiwiUmFiaScgYWwtdGhhbmkiLCJKdW1hZGEgYWwtYXd3YWwiLCJKdW1hZGEgYWwtdGhhbmkiLCJSYWphYiIsIlNoYSdhYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHUgYWwtUWknZGFoIiwiRGh1IGFsLUhpamphaCJdLG1vbnRoTmFtZXNTaG9ydDpbIk11aCIsIlNhZiIsIlJhYjEiLCJSYWIyIiwiSnVtMSIsIkp1bTIiLCJSYWoiLCJTaGEnIiwiUmFtIiwiU2hhdyIsIkRodVEiLCJEaHVIIl0sZGF5TmFtZXM6WyJZYXdtIGFsLWFoYWQiLCJZYXdtIGFsLWl0aG5heW4iLCJZYXdtIGF0aC10aHVsYWF0aGFhJyIsIllhd20gYWwtYXJiaSdhYSciLCJZYXdtIGFsLWtoYW1cdTAxMmJzIiwiWWF3bSBhbC1qdW0nYSIsIllhd20gYXMtc2FidCJdLGRheU5hbWVzU2hvcnQ6WyJBaGEiLCJJdGgiLCJUaHUiLCJBcmIiLCJLaGEiLCJKdW0iLCJTYWIiXSxkYXlOYW1lc01pbjpbIkFoIiwiSXQiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybigxMSp0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpKzE0KSUzMDwxMX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MzU1OjM1NH0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9aS55ZWFyKCksZT1pLm1vbnRoKCksdD10PD0wP3QrMTp0LChyPWkuZGF5KCkpK01hdGguY2VpbCgyOS41KihlLTEpKSszNTQqKHQtMSkrTWF0aC5mbG9vcigoMysxMSp0KS8zMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7dmFyIGU9TWF0aC5mbG9vcigoMzAqKHQtdGhpcy5qZEVwb2NoKSsxMDY0NikvMTA2MzEpO2U9ZTw9MD9lLTE6ZTt2YXIgcj1NYXRoLm1pbigxMixNYXRoLmNlaWwoKHQtMjktdGhpcy50b0pEKGUsMSwxKSkvMjkuNSkrMSksbj10LXRoaXMudG9KRChlLHIsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5pc2xhbWljPWF9LHsiLi4vbWFpbiI6NTU1LCJvYmplY3QtYXNzaWduIjo0NDZ9XSw1NDc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJKdWxpYW4iLGpkRXBvY2g6MTcyMTQyMy41LGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ikp1bGlhbiIsZXBvY2hzOlsiQkMiLCJBRCJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCk8MD9lLnllYXIoKSsxOmUueWVhcigpKSU0PT0wfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKSx0PDAmJnQrKyxlPD0yJiYodC0tLGUrPTEyKSxNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkrMTUyNCxyPU1hdGguZmxvb3IoKGUtMTIyLjEpLzM2NS4yNSksbj1NYXRoLmZsb29yKDM2NS4yNSpyKSxpPU1hdGguZmxvb3IoKGUtbikvMzAuNjAwMSksYT1pLU1hdGguZmxvb3IoaTwxND8xOjEzKSxvPXItTWF0aC5mbG9vcihhPjI/NDcxNjo0NzE1KSxzPWUtbi1NYXRoLmZsb29yKDMwLjYwMDEqaSk7cmV0dXJuIG88PTAmJm8tLSx0aGlzLm5ld0RhdGUobyxhLHMpfX0pLG4uY2FsZW5kYXJzLmp1bGlhbj1hfSx7Ii4uL21haW4iOjU1NSwib2JqZWN0LWFzc2lnbiI6NDQ2fV0sNTQ4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBvKHQtMSxlKSsxfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJNYXlhbiIsamRFcG9jaDo1ODQyODIuNSxoYXNZZWFyWmVybzohMCxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MCxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJNYXlhbiIsZXBvY2hzOlsiIiwiIl0sbW9udGhOYW1lczpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sbW9udGhOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciXSxkYXlOYW1lczpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRheU5hbWVzU2hvcnQ6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc01pbjpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6IllZWVkubS5kIixmaXJzdERheTowLGlzUlRMOiExLGhhYWJNb250aHM6WyJQb3AiLCJVbyIsIlppcCIsIlpvdHoiLCJUemVjIiwiWHVsIiwiWWF4a2luIiwiTW9sIiwiQ2hlbiIsIllheCIsIlphYyIsIkNlaCIsIk1hYyIsIkthbmtpbiIsIk11YW4iLCJQYXgiLCJLYXlhYiIsIkN1bWt1IiwiVWF5ZWIiXSx0em9sa2luTW9udGhzOlsiSW1peCIsIklrIiwiQWtiYWwiLCJLYW4iLCJDaGljY2hhbiIsIkNpbWkiLCJNYW5payIsIkxhbWF0IiwiTXVsdWMiLCJPYyIsIkNodWVuIiwiRWIiLCJCZW4iLCJJeCIsIk1lbiIsIkNpYiIsIkNhYmFuIiwiRXR6bmFiIiwiQ2F1YWMiLCJBaGF1Il19fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKTt2YXIgZT1NYXRoLmZsb29yKHQvNDAwKTtyZXR1cm4gdCU9NDAwLHQrPXQ8MD80MDA6MCxlKyIuIitNYXRoLmZsb29yKHQvMjApKyIuIit0JTIwfSxmb3JZZWFyOmZ1bmN0aW9uKHQpe2lmKCh0PXQuc3BsaXQoIi4iKSkubGVuZ3RoPDMpdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXBhcnNlSW50KHRbcl0sMTApO2lmKE1hdGguYWJzKG4pPjE5fHxyPjAmJm48MCl0aHJvdyJJbnZhbGlkIE1heWFuIHllYXIiO2U9MjAqZStufXJldHVybiBlfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwxOH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLDB9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwzNjB9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksMjB9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNX0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSwhMH0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS50b0pEKCksYT10aGlzLl90b0hhYWIoaSksbz10aGlzLl90b1R6b2xraW4oaSk7cmV0dXJue2hhYWJNb250aE5hbWU6dGhpcy5sb2NhbC5oYWFiTW9udGhzW2FbMF0tMV0saGFhYk1vbnRoOmFbMF0saGFhYkRheTphWzFdLHR6b2xraW5EYXlOYW1lOnRoaXMubG9jYWwudHpvbGtpbk1vbnRoc1tvWzBdLTFdLHR6b2xraW5EYXk6b1swXSx0em9sa2luVHJlY2VuYTpvWzFdfX0sX3RvSGFhYjpmdW5jdGlvbih0KXt2YXIgZT1vKCh0LT10aGlzLmpkRXBvY2gpKzgrMzQwLDM2NSk7cmV0dXJuW01hdGguZmxvb3IoZS8yMCkrMSxvKGUsMjApXX0sX3RvVHpvbGtpbjpmdW5jdGlvbih0KXtyZXR1cm5bcygodC09dGhpcy5qZEVwb2NoKSsyMCwyMCkscyh0KzQsMTMpXX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIGkuZGF5KCkrMjAqaS5tb250aCgpKzM2MCppLnllYXIoKSt0aGlzLmpkRXBvY2h9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoO3ZhciBlPU1hdGguZmxvb3IodC8zNjApO3QlPTM2MCx0Kz10PDA/MzYwOjA7dmFyIHI9TWF0aC5mbG9vcih0LzIwKSxuPXQlMjA7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMubWF5YW49YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU0OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyO3ZhciBvPW4uaW5zdGFuY2UoImdyZWdvcmlhbiIpO2koYS5wcm90b3R5cGUse25hbWU6Ik5hbmFrc2hhaGkiLGpkRXBvY2g6MjI1NzY3My41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5hbmFrc2hhaGkiLGVwb2NoczpbIkJOIiwiQU4iXSxtb250aE5hbWVzOlsiQ2hldCIsIlZhaXNha2giLCJKZXRoIiwiSGFyaCIsIlNhd2FuIiwiQmhhZG9uIiwiQXNzdSIsIkthdGFrIiwiTWFnaGFyIiwiUG9oIiwiTWFnaCIsIlBoYWd1biJdLG1vbnRoTmFtZXNTaG9ydDpbIkNoZSIsIlZhaSIsIkpldCIsIkhhciIsIlNhdyIsIkJoYSIsIkFzcyIsIkthdCIsIk1nciIsIlBvaCIsIk1naCIsIlBoYSJdLGRheU5hbWVzOlsiU29tdmFhciIsIk1hbmdhbHZhciIsIkJ1ZGh2YWFyIiwiVmVlcnZhYXIiLCJTaHVrYXJ2YWFyIiwiU2FuaWNoYXJ2YWFyIiwiRXR2YWFyIl0sZGF5TmFtZXNTaG9ydDpbIlNvbSIsIk1hbmdhbCIsIkJ1ZGgiLCJWZWVyIiwiU2h1a2FyIiwiU2FuaWNoYXIiLCJFdCJdLGRheU5hbWVzTWluOlsiU28iLCJNYSIsIkJ1IiwiVmUiLCJTaCIsIlNhIiwiRXQiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC1tbS15eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIG8ubGVhcFllYXIoZS55ZWFyKCkrKGUueWVhcigpPDE/MTowKSsxNDY5KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoMS0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkTW9udGgpOyh0PWkueWVhcigpKTwwJiZ0Kys7Zm9yKHZhciBhPWkuZGF5KCkscz0xO3M8aS5tb250aCgpO3MrKylhKz10aGlzLmRheXNQZXJNb250aFtzLTFdO3JldHVybiBhK28udG9KRCh0KzE0NjgsMywxMyl9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSk7Zm9yKHZhciBlPU1hdGguZmxvb3IoKHQtKHRoaXMuamRFcG9jaC0xKSkvMzY2KTt0Pj10aGlzLnRvSkQoZSsxLDEsMSk7KWUrKztmb3IodmFyIHI9dC1NYXRoLmZsb29yKHRoaXMudG9KRChlLDEsMSkrLjUpKzEsbj0xO3I+dGhpcy5kYXlzSW5Nb250aChlLG4pOylyLT10aGlzLmRheXNJbk1vbnRoKGUsbiksbisrO3JldHVybiB0aGlzLm5ld0RhdGUoZSxuLHIpfX0pLG4uY2FsZW5kYXJzLm5hbmFrc2hhaGk9YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU1MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6Ik5lcGFsaSIsamRFcG9jaDoxNzAwNzA5LjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEsZGF5c1BlclllYXI6MzY1LHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5lcGFsaSIsZXBvY2hzOlsiQkJTIiwiQUJTIl0sbW9udGhOYW1lczpbIkJhaXNha2giLCJKZXN0aGEiLCJBc2hhZGgiLCJTaHJhd2FuIiwiQmhhZHJhIiwiQXNod2luIiwiS2FydGlrIiwiTWFuZ3NpciIsIlBhdXNoIiwiTWFuZ2giLCJGYWxndW4iLCJDaGFpdHJhIl0sbW9udGhOYW1lc1Nob3J0OlsiQmFpIiwiSmUiLCJBcyIsIlNocmEiLCJCaGEiLCJBc2giLCJLYXIiLCJNYW5nIiwiUGF1IiwiTWEiLCJGYWwiLCJDaGFpIl0sZGF5TmFtZXM6WyJBYWl0YWJhYXIiLCJTb21iYWFyIiwiTWFuZ2xiYWFyIiwiQnVkaGFiYWFyIiwiQmloaWJhYXIiLCJTaHVrcmFiYWFyIiwiU2hhbmliYWFyIl0sZGF5TmFtZXNTaG9ydDpbIkFhaXRhIiwiU29tIiwiTWFuZ2wiLCJCdWRoYSIsIkJpaGkiLCJTaHVrcmEiLCJTaGFuaSJdLGRheU5hbWVzTWluOlsiQWFpIiwiU28iLCJNYW4iLCJCdSIsIkJpIiwiU2h1IiwiU2hhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRheXNJblllYXIodCkhPT10aGlzLmRheXNQZXJZZWFyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtpZih0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdKXJldHVybiB0aGlzLmRheXNQZXJZZWFyO2Zvcih2YXIgZT0wLHI9dGhpcy5taW5Nb250aDtyPD0xMjtyKyspZSs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtyXTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF0/dGhpcy5kYXlzUGVyTW9udGhbZS0xXTp0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdW2VdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9bi5pbnN0YW5jZSgpLG89MCxzPWUsbD10O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEodCk7dmFyIGM9dC0ocz45fHw5PT09cyYmcj49dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXT81Njo1Nyk7Zm9yKDkhPT1lJiYobz1yLHMtLSk7OSE9PXM7KXM8PTAmJihzPTEyLGwtLSksbys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVtzXSxzLS07cmV0dXJuIDk9PT1lPyhvKz1yLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0pPDAmJihvKz1hLmRheXNJblllYXIoYykpOm8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bOV0tdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSxhLm5ld0RhdGUoYywxLDEpLmFkZChvLCJkIikudG9KRCgpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9bi5pbnN0YW5jZSgpLmZyb21KRCh0KSxyPWUueWVhcigpLGk9ZS5kYXlPZlllYXIoKSxhPXIrNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShhKTtmb3IodmFyIG89OSxzPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bMF0sbD10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dLXMrMTtpPmw7KSsrbz4xMiYmKG89MSxhKyspLGwrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb107dmFyIGM9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS0obC1pKTtyZXR1cm4gdGhpcy5uZXdEYXRlKGEsbyxjKX0sX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXlzUGVyTW9udGguc2xpY2UoMCk7ZS51bnNoaWZ0KDE3KTtmb3IodmFyIHI9dC0xO3I8dCsyO3IrKykidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl0mJih0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdPWUpfSxORVBBTElfQ0FMRU5EQVJfREFUQTp7MTk3MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzE6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk3MzpbMTksMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5NzQ6WzE5LDMxLDMxLDMyLDMwLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc1OlsxOCwzMSwzMSwzMiwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5Nzc6WzE4LDMxLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwxOTc4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3OTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTgxOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4MjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4NTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODY6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4ODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODk6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5OTI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTkzOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTk2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5NzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwMDpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxuLmNhbGVuZGFycy5uZXBhbGk9YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU1MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJQZXJzaWFuIixqZEVwb2NoOjE5NDgzMjAuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJQZXJzaWFuIixlcG9jaHM6WyJCUCIsIkFQIl0sbW9udGhOYW1lczpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRheSIsIkJhaG1hbiIsIkVzZmFuZCJdLG1vbnRoTmFtZXNTaG9ydDpbIkZhciIsIk9yZCIsIktobyIsIlRpciIsIk1vciIsIlNoYSIsIk1laCIsIkFiYSIsIkF6YSIsIkRheSIsIkJhaCIsIkVzZiJdLGRheU5hbWVzOlsiWWVrc2hhbWJlIiwiRG9zaGFtYmUiLCJTZXNoYW1iZSIsIkNoXHhlNmhhcnNoYW1iZSIsIlBhbmpzaGFtYmUiLCJKb20nZSIsIlNoYW1iZSJdLGRheU5hbWVzU2hvcnQ6WyJZZWsiLCJEbyIsIlNlIiwiQ2hceGU2IiwiUGFuaiIsIkpvbSIsIlNoYSJdLGRheU5hbWVzTWluOlsiWWUiLCJEbyIsIlNlIiwiQ2giLCJQYSIsIkpvIiwiU2giXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiA2ODIqKChlLnllYXIoKS0oZS55ZWFyKCk+MD80NzQ6NDczKSklMjgyMCs0NzQrMzgpJTI4MTY8NjgyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtKG4uZGF5T2ZXZWVrKCkrMSklNywiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dC0odD49MD80NzQ6NDczKSxzPTQ3NCtvKGEsMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKGEvMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT0odD1NYXRoLmZsb29yKHQpKy41KS10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1vKGUsMTAyOTk4MyksaT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgYT1NYXRoLmZsb29yKG4vMzY2KSxzPW8obiwzNjYpO2k9TWF0aC5mbG9vcigoMjEzNCphKzI4MTYqcysyODE1KS8xMDI4NTIyKSthKzF9dmFyIGw9aSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgYz10LXRoaXMudG9KRChsLDEsMSkrMSx1PWM8PTE4Nj9NYXRoLmNlaWwoYy8zMSk6TWF0aC5jZWlsKChjLTYpLzMwKSxmPXQtdGhpcy50b0pEKGwsdSwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCx1LGYpfX0pLG4uY2FsZW5kYXJzLnBlcnNpYW49YSxuLmNhbGVuZGFycy5qYWxhbGk9YX0seyIuLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6IlRhaXdhbiIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUYWl3YW4iLGVwb2NoczpbIkJST0MiLCJST0MiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksbi5jYWxlbmRhcnMudGFpd2FuPW99LHsiLi4vbWFpbiI6NTU1LCJvYmplY3QtYXNzaWduIjo0NDZ9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJUaGFpIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGhhaSIsZXBvY2hzOlsiQkJFIiwiQkUiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksbi5jYWxlbmRhcnMudGhhaT1vfSx7Ii4uL21haW4iOjU1NSwib2JqZWN0LWFzc2lnbiI6NDQ2fV0sNTU0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiVW1tQWxRdXJhIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJVbW0gYWwtUXVyYSIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJBbC1NdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBBbC1UaGFuaSIsIkp1bWFkYSBBbC1Bd3dhbCIsIkp1bWFkYSBBbC1UaGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtQWhhZCIsIllhd20gYWwtSXRobmFpbiIsIllhd20gYWwtVGhhbFx1MDEwMXRoXHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1BcmJhXHUyMDE4XHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1LaGFtXHUwMTJicyIsIllhd20gYWwtSnVtXHUyMDE4YSIsIllhd20gYWwtU2FidCJdLGRheU5hbWVzTWluOlsiQWgiLCJJdGgiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCkudG9KRCgpLTI0ZTUrLjUsaT0wLGE9MDthPG8ubGVuZ3RoO2ErKyl7aWYob1thXT5yKXJldHVybiBvW2ldLW9baS0xXTtpKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksYT0xMiooaS55ZWFyKCktMSkraS5tb250aCgpLTE1MjkyO3JldHVybiBpLmRheSgpK29bYS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPmUpO24rKylyKys7dmFyIGk9cisxNTI5MixhPU1hdGguZmxvb3IoKGktMSkvMTIpLHM9YSsxLGw9aS0xMiphLGM9ZS1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHMsbCxjKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpJiYoaT0odD1udWxsIT10LnllYXI/dC55ZWFyOnQpPj0xMjc2JiZ0PD0xNTAwKSxpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoYS55ZWFyPDEyNzZ8fGEueWVhcj4xNTAwKXRocm93IGkucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGF9fSksbi5jYWxlbmRhcnMudW1tYWxxdXJhPWE7dmFyIG89WzIwLDUwLDc5LDEwOSwxMzgsMTY4LDE5NywyMjcsMjU2LDI4NiwzMTUsMzQ1LDM3NCw0MDQsNDMzLDQ2Myw0OTIsNTIyLDU1MSw1ODEsNjExLDY0MSw2NzAsNzAwLDcyOSw3NTksNzg4LDgxOCw4NDcsODc3LDkwNiw5MzYsOTY1LDk5NSwxMDI0LDEwNTQsMTA4MywxMTEzLDExNDIsMTE3MiwxMjAxLDEyMzEsMTI2MCwxMjkwLDEzMjAsMTM1MCwxMzc5LDE0MDksMTQzOCwxNDY4LDE0OTcsMTUyNywxNTU2LDE1ODYsMTYxNSwxNjQ1LDE2NzQsMTcwNCwxNzMzLDE3NjMsMTc5MiwxODIyLDE4NTEsMTg4MSwxOTEwLDE5NDAsMTk2OSwxOTk5LDIwMjgsMjA1OCwyMDg3LDIxMTcsMjE0NiwyMTc2LDIyMDUsMjIzNSwyMjY0LDIyOTQsMjMyMywyMzUzLDIzODMsMjQxMywyNDQyLDI0NzIsMjUwMSwyNTMxLDI1NjAsMjU5MCwyNjE5LDI2NDksMjY3OCwyNzA4LDI3MzcsMjc2NywyNzk2LDI4MjYsMjg1NSwyODg1LDI5MTQsMjk0NCwyOTczLDMwMDMsMzAzMiwzMDYyLDMwOTEsMzEyMSwzMTUwLDMxODAsMzIwOSwzMjM5LDMyNjgsMzI5OCwzMzI3LDMzNTcsMzM4NiwzNDE2LDM0NDYsMzQ3NiwzNTA1LDM1MzUsMzU2NCwzNTk0LDM2MjMsMzY1MywzNjgyLDM3MTIsMzc0MSwzNzcxLDM4MDAsMzgzMCwzODU5LDM4ODksMzkxOCwzOTQ4LDM5NzcsNDAwNyw0MDM2LDQwNjYsNDA5NSw0MTI1LDQxNTUsNDE4NSw0MjE0LDQyNDQsNDI3Myw0MzAzLDQzMzIsNDM2Miw0MzkxLDQ0MjEsNDQ1MCw0NDgwLDQ1MDksNDUzOSw0NTY4LDQ1OTgsNDYyNyw0NjU3LDQ2ODYsNDcxNiw0NzQ1LDQ3NzUsNDgwNCw0ODM0LDQ4NjMsNDg5Myw0OTIyLDQ5NTIsNDk4MSw1MDExLDUwNDAsNTA3MCw1MDk5LDUxMjksNTE1OCw1MTg4LDUyMTgsNTI0OCw1Mjc3LDUzMDcsNTMzNiw1MzY2LDUzOTUsNTQyNSw1NDU0LDU0ODQsNTUxMyw1NTQzLDU1NzIsNTYwMiw1NjMxLDU2NjEsNTY5MCw1NzIwLDU3NDksNTc3OSw1ODA4LDU4MzgsNTg2Nyw1ODk3LDU5MjYsNTk1Niw1OTg1LDYwMTUsNjA0NCw2MDc0LDYxMDMsNjEzMyw2MTYyLDYxOTIsNjIyMSw2MjUxLDYyODEsNjMxMSw2MzQwLDYzNzAsNjM5OSw2NDI5LDY0NTgsNjQ4OCw2NTE3LDY1NDcsNjU3Niw2NjA2LDY2MzUsNjY2NSw2Njk0LDY3MjQsNjc1Myw2NzgzLDY4MTIsNjg0Miw2ODcxLDY5MDEsNjkzMCw2OTYwLDY5ODksNzAxOSw3MDQ4LDcwNzgsNzEwNyw3MTM3LDcxNjYsNzE5Niw3MjI1LDcyNTUsNzI4NCw3MzE0LDczNDQsNzM3NCw3NDAzLDc0MzMsNzQ2Miw3NDkyLDc1MjEsNzU1MSw3NTgwLDc2MTAsNzYzOSw3NjY5LDc2OTgsNzcyOCw3NzU3LDc3ODcsNzgxNiw3ODQ2LDc4NzUsNzkwNSw3OTM0LDc5NjQsNzk5Myw4MDIzLDgwNTMsODA4Myw4MTEyLDgxNDIsODE3MSw4MjAxLDgyMzAsODI2MCw4Mjg5LDgzMTksODM0OCw4Mzc4LDg0MDcsODQzNyw4NDY2LDg0OTYsODUyNSw4NTU1LDg1ODQsODYxNCw4NjQzLDg2NzMsODcwMiw4NzMyLDg3NjEsODc5MSw4ODIxLDg4NTAsODg4MCw4OTA5LDg5MzgsODk2OCw4OTk3LDkwMjcsOTA1Niw5MDg2LDkxMTUsOTE0NSw5MTc1LDkyMDUsOTIzNCw5MjY0LDkyOTMsOTMyMiw5MzUyLDkzODEsOTQxMCw5NDQwLDk0NzAsOTQ5OSw5NTI5LDk1NTksOTU4OSw5NjE4LDk2NDgsOTY3Nyw5NzA2LDk3MzYsOTc2NSw5Nzk0LDk4MjQsOTg1Myw5ODgzLDk5MTMsOTk0Myw5OTcyLDEwMDAyLDEwMDMyLDEwMDYxLDEwMDkwLDEwMTIwLDEwMTQ5LDEwMTc4LDEwMjA4LDEwMjM3LDEwMjY3LDEwMjk3LDEwMzI2LDEwMzU2LDEwMzg2LDEwNDE1LDEwNDQ1LDEwNDc0LDEwNTA0LDEwNTMzLDEwNTYyLDEwNTkyLDEwNjIxLDEwNjUxLDEwNjgwLDEwNzEwLDEwNzQwLDEwNzcwLDEwNzk5LDEwODI5LDEwODU4LDEwODg4LDEwOTE3LDEwOTQ3LDEwOTc2LDExMDA1LDExMDM1LDExMDY0LDExMDk0LDExMTI0LDExMTUzLDExMTgzLDExMjEzLDExMjQyLDExMjcyLDExMzAxLDExMzMxLDExMzYwLDExMzg5LDExNDE5LDExNDQ4LDExNDc4LDExNTA3LDExNTM3LDExNTY3LDExNTk2LDExNjI2LDExNjU1LDExNjg1LDExNzE1LDExNzQ0LDExNzc0LDExODAzLDExODMyLDExODYyLDExODkxLDExOTIxLDExOTUwLDExOTgwLDEyMDEwLDEyMDM5LDEyMDY5LDEyMDk5LDEyMTI4LDEyMTU4LDEyMTg3LDEyMjE2LDEyMjQ2LDEyMjc1LDEyMzA0LDEyMzM0LDEyMzY0LDEyMzkzLDEyNDIzLDEyNDUzLDEyNDgzLDEyNTEyLDEyNTQyLDEyNTcxLDEyNjAwLDEyNjMwLDEyNjU5LDEyNjg4LDEyNzE4LDEyNzQ3LDEyNzc3LDEyODA3LDEyODM3LDEyODY2LDEyODk2LDEyOTI2LDEyOTU1LDEyOTg0LDEzMDE0LDEzMDQzLDEzMDcyLDEzMTAyLDEzMTMxLDEzMTYxLDEzMTkxLDEzMjIwLDEzMjUwLDEzMjgwLDEzMzEwLDEzMzM5LDEzMzY4LDEzMzk4LDEzNDI3LDEzNDU2LDEzNDg2LDEzNTE1LDEzNTQ1LDEzNTc0LDEzNjA0LDEzNjM0LDEzNjY0LDEzNjkzLDEzNzIzLDEzNzUyLDEzNzgyLDEzODExLDEzODQwLDEzODcwLDEzODk5LDEzOTI5LDEzOTU4LDEzOTg4LDE0MDE4LDE0MDQ3LDE0MDc3LDE0MTA3LDE0MTM2LDE0MTY2LDE0MTk1LDE0MjI0LDE0MjU0LDE0MjgzLDE0MzEzLDE0MzQyLDE0MzcyLDE0NDAxLDE0NDMxLDE0NDYxLDE0NDkwLDE0NTIwLDE0NTUwLDE0NTc5LDE0NjA5LDE0NjM4LDE0NjY3LDE0Njk3LDE0NzI2LDE0NzU2LDE0Nzg1LDE0ODE1LDE0ODQ0LDE0ODc0LDE0OTA0LDE0OTMzLDE0OTYzLDE0OTkzLDE1MDIxLDE1MDUxLDE1MDgxLDE1MTEwLDE1MTQwLDE1MTY5LDE1MTk5LDE1MjI4LDE1MjU4LDE1Mjg3LDE1MzE3LDE1MzQ3LDE1Mzc3LDE1NDA2LDE1NDM2LDE1NDY1LDE1NDk0LDE1NTI0LDE1NTUzLDE1NTgyLDE1NjEyLDE1NjQxLDE1NjcxLDE1NzAxLDE1NzMxLDE1NzYwLDE1NzkwLDE1ODIwLDE1ODQ5LDE1ODc4LDE1OTA4LDE1OTM3LDE1OTY2LDE1OTk2LDE2MDI1LDE2MDU1LDE2MDg1LDE2MTE0LDE2MTQ0LDE2MTc0LDE2MjA0LDE2MjMzLDE2MjYyLDE2MjkyLDE2MzIxLDE2MzUwLDE2MzgwLDE2NDA5LDE2NDM5LDE2NDY4LDE2NDk4LDE2NTI4LDE2NTU4LDE2NTg3LDE2NjE3LDE2NjQ2LDE2Njc2LDE2NzA1LDE2NzM0LDE2NzY0LDE2NzkzLDE2ODIzLDE2ODUyLDE2ODgyLDE2OTEyLDE2OTQxLDE2OTcxLDE3MDAxLDE3MDMwLDE3MDYwLDE3MDg5LDE3MTE4LDE3MTQ4LDE3MTc3LDE3MjA3LDE3MjM2LDE3MjY2LDE3Mjk1LDE3MzI1LDE3MzU1LDE3Mzg0LDE3NDE0LDE3NDQ0LDE3NDczLDE3NTAyLDE3NTMyLDE3NTYxLDE3NTkxLDE3NjIwLDE3NjUwLDE3Njc5LDE3NzA5LDE3NzM4LDE3NzY4LDE3Nzk4LDE3ODI3LDE3ODU3LDE3ODg2LDE3OTE2LDE3OTQ1LDE3OTc1LDE4MDA0LDE4MDM0LDE4MDYzLDE4MDkzLDE4MTIyLDE4MTUyLDE4MTgxLDE4MjExLDE4MjQxLDE4MjcwLDE4MzAwLDE4MzMwLDE4MzU5LDE4Mzg4LDE4NDE4LDE4NDQ3LDE4NDc2LDE4NTA2LDE4NTM1LDE4NTY1LDE4NTk1LDE4NjI1LDE4NjU0LDE4Njg0LDE4NzE0LDE4NzQzLDE4NzcyLDE4ODAyLDE4ODMxLDE4ODYwLDE4ODkwLDE4OTE5LDE4OTQ5LDE4OTc5LDE5MDA4LDE5MDM4LDE5MDY4LDE5MDk4LDE5MTI3LDE5MTU2LDE5MTg2LDE5MjE1LDE5MjQ0LDE5Mjc0LDE5MzAzLDE5MzMzLDE5MzYyLDE5MzkyLDE5NDIyLDE5NDUyLDE5NDgxLDE5NTExLDE5NTQwLDE5NTcwLDE5NTk5LDE5NjI4LDE5NjU4LDE5Njg3LDE5NzE3LDE5NzQ2LDE5Nzc2LDE5ODA2LDE5ODM2LDE5ODY1LDE5ODk1LDE5OTI0LDE5OTU0LDE5OTgzLDIwMDEyLDIwMDQyLDIwMDcxLDIwMTAxLDIwMTMwLDIwMTYwLDIwMTkwLDIwMjE5LDIwMjQ5LDIwMjc5LDIwMzA4LDIwMzM4LDIwMzY3LDIwMzk2LDIwNDI2LDIwNDU1LDIwNDg1LDIwNTE0LDIwNTQ0LDIwNTczLDIwNjAzLDIwNjMzLDIwNjYyLDIwNjkyLDIwNzIxLDIwNzUxLDIwNzgwLDIwODEwLDIwODM5LDIwODY5LDIwODk4LDIwOTI4LDIwOTU3LDIwOTg3LDIxMDE2LDIxMDQ2LDIxMDc2LDIxMTA1LDIxMTM1LDIxMTY0LDIxMTk0LDIxMjIzLDIxMjUzLDIxMjgyLDIxMzEyLDIxMzQxLDIxMzcxLDIxNDAwLDIxNDMwLDIxNDU5LDIxNDg5LDIxNTE5LDIxNTQ4LDIxNTc4LDIxNjA3LDIxNjM3LDIxNjY2LDIxNjk2LDIxNzI1LDIxNzU0LDIxNzg0LDIxODEzLDIxODQzLDIxODczLDIxOTAyLDIxOTMyLDIxOTYyLDIxOTkxLDIyMDIxLDIyMDUwLDIyMDgwLDIyMTA5LDIyMTM4LDIyMTY4LDIyMTk3LDIyMjI3LDIyMjU2LDIyMjg2LDIyMzE2LDIyMzQ2LDIyMzc1LDIyNDA1LDIyNDM0LDIyNDY0LDIyNDkzLDIyNTIyLDIyNTUyLDIyNTgxLDIyNjExLDIyNjQwLDIyNjcwLDIyNzAwLDIyNzMwLDIyNzU5LDIyNzg5LDIyODE4LDIyODQ4LDIyODc3LDIyOTA2LDIyOTM2LDIyOTY1LDIyOTk0LDIzMDI0LDIzMDU0LDIzMDgzLDIzMTEzLDIzMTQzLDIzMTczLDIzMjAyLDIzMjMyLDIzMjYxLDIzMjkwLDIzMzIwLDIzMzQ5LDIzMzc5LDIzNDA4LDIzNDM4LDIzNDY3LDIzNDk3LDIzNTI3LDIzNTU2LDIzNTg2LDIzNjE2LDIzNjQ1LDIzNjc0LDIzNzA0LDIzNzMzLDIzNzYzLDIzNzkyLDIzODIyLDIzODUxLDIzODgxLDIzOTEwLDIzOTQwLDIzOTcwLDIzOTk5LDI0MDI5LDI0MDU4LDI0MDg4LDI0MTE3LDI0MTQ3LDI0MTc2LDI0MjA2LDI0MjM1LDI0MjY1LDI0Mjk0LDI0MzI0LDI0MzUzLDI0MzgzLDI0NDEzLDI0NDQyLDI0NDcyLDI0NTAxLDI0NTMxLDI0NTYwLDI0NTkwLDI0NjE5LDI0NjQ4LDI0Njc4LDI0NzA3LDI0NzM3LDI0NzY3LDI0Nzk2LDI0ODI2LDI0ODU2LDI0ODg1LDI0OTE1LDI0OTQ0LDI0OTc0LDI1MDAzLDI1MDMyLDI1MDYyLDI1MDkxLDI1MTIxLDI1MTUwLDI1MTgwLDI1MjEwLDI1MjQwLDI1MjY5LDI1Mjk5LDI1MzI4LDI1MzU4LDI1Mzg3LDI1NDE2LDI1NDQ2LDI1NDc1LDI1NTA1LDI1NTM0LDI1NTY0LDI1NTk0LDI1NjI0LDI1NjUzLDI1NjgzLDI1NzEyLDI1NzQyLDI1NzcxLDI1ODAwLDI1ODMwLDI1ODU5LDI1ODg4LDI1OTE4LDI1OTQ4LDI1OTc3LDI2MDA3LDI2MDM3LDI2MDY3LDI2MDk2LDI2MTI2LDI2MTU1LDI2MTg0LDI2MjE0LDI2MjQzLDI2MjcyLDI2MzAyLDI2MzMyLDI2MzYxLDI2MzkxLDI2NDIxLDI2NDUxLDI2NDgwLDI2NTEwLDI2NTM5LDI2NTY4LDI2NTk4LDI2NjI3LDI2NjU2LDI2Njg2LDI2NzE1LDI2NzQ1LDI2Nzc1LDI2ODA1LDI2ODM0LDI2ODY0LDI2ODkzLDI2OTIzLDI2OTUyLDI2OTgyLDI3MDExLDI3MDQxLDI3MDcwLDI3MDk5LDI3MTI5LDI3MTU5LDI3MTg4LDI3MjE4LDI3MjQ4LDI3Mjc3LDI3MzA3LDI3MzM2LDI3MzY2LDI3Mzk1LDI3NDI1LDI3NDU0LDI3NDg0LDI3NTEzLDI3NTQyLDI3NTcyLDI3NjAyLDI3NjMxLDI3NjYxLDI3NjkxLDI3NzIwLDI3NzUwLDI3Nzc5LDI3ODA5LDI3ODM4LDI3ODY4LDI3ODk3LDI3OTI2LDI3OTU2LDI3OTg1LDI4MDE1LDI4MDQ1LDI4MDc0LDI4MTA0LDI4MTM0LDI4MTYzLDI4MTkzLDI4MjIyLDI4MjUyLDI4MjgxLDI4MzEwLDI4MzQwLDI4MzY5LDI4Mzk5LDI4NDI4LDI4NDU4LDI4NDg4LDI4NTE3LDI4NTQ3LDI4NTc3LDI4NjA3LDI4NjM2LDI4NjY1LDI4Njk1LDI4NzI0LDI4NzU0LDI4NzgzLDI4ODEzLDI4ODQzLDI4ODcyLDI4OTAxLDI4OTMxLDI4OTYwLDI4OTkwLDI5MDE5LDI5MDQ5LDI5MDc4LDI5MTA4LDI5MTM3LDI5MTY3LDI5MTk2LDI5MjI2LDI5MjU1LDI5Mjg1LDI5MzE1LDI5MzQ1LDI5Mzc1LDI5NDA0LDI5NDM0LDI5NDYzLDI5NDkyLDI5NTIyLDI5NTUxLDI5NTgwLDI5NjEwLDI5NjQwLDI5NjY5LDI5Njk5LDI5NzI5LDI5NzU5LDI5Nzg4LDI5ODE4LDI5ODQ3LDI5ODc2LDI5OTA2LDI5OTM1LDI5OTY0LDI5OTk0LDMwMDIzLDMwMDUzLDMwMDgyLDMwMTEyLDMwMTQxLDMwMTcxLDMwMjAwLDMwMjMwLDMwMjU5LDMwMjg5LDMwMzE4LDMwMzQ4LDMwMzc4LDMwNDA4LDMwNDM3LDMwNDY3LDMwNDk2LDMwNTI2LDMwNTU1LDMwNTg1LDMwNjE0LDMwNjQ0LDMwNjczLDMwNzAzLDMwNzMyLDMwNzYyLDMwNzkxLDMwODIxLDMwODUwLDMwODgwLDMwOTA5LDMwOTM5LDMwOTY4LDMwOTk4LDMxMDI3LDMxMDU3LDMxMDg2LDMxMTE2LDMxMTQ1LDMxMTc1LDMxMjA0LDMxMjM0LDMxMjYzLDMxMjkzLDMxMzIyLDMxMzUyLDMxMzgxLDMxNDExLDMxNDQxLDMxNDcxLDMxNTAwLDMxNTMwLDMxNTU5LDMxNTg5LDMxNjE4LDMxNjQ4LDMxNjc2LDMxNzA2LDMxNzM2LDMxNzY2LDMxNzk1LDMxODI1LDMxODU0LDMxODg0LDMxOTEzLDMxOTQzLDMxOTcyLDMyMDAyLDMyMDMxLDMyMDYxLDMyMDkwLDMyMTIwLDMyMTUwLDMyMTgwLDMyMjA5LDMyMjM5LDMyMjY4LDMyMjk4LDMyMzI3LDMyMzU3LDMyMzg2LDMyNDE2LDMyNDQ1LDMyNDc1LDMyNTA0LDMyNTM0LDMyNTYzLDMyNTkzLDMyNjIyLDMyNjUyLDMyNjgxLDMyNzExLDMyNzQwLDMyNzcwLDMyNzk5LDMyODI5LDMyODU4LDMyODg4LDMyOTE3LDMyOTQ3LDMyOTc2LDMzMDA2LDMzMDM1LDMzMDY1LDMzMDk0LDMzMTI0LDMzMTUzLDMzMTgzLDMzMjEzLDMzMjQzLDMzMjcyLDMzMzAyLDMzMzMxLDMzMzYxLDMzMzkwLDMzNDIwLDMzNDUwLDMzNDc5LDMzNTA5LDMzNTM5LDMzNTY4LDMzNTk4LDMzNjI3LDMzNjU3LDMzNjg2LDMzNzE2LDMzNzQ1LDMzNzc1LDMzODA0LDMzODM0LDMzODYzLDMzODkzLDMzOTIyLDMzOTUyLDMzOTgxLDM0MDExLDM0MDQwLDM0MDY5LDM0MDk5LDM0MTI4LDM0MTU4LDM0MTg3LDM0MjE3LDM0MjQ3LDM0Mjc3LDM0MzA2LDM0MzM2LDM0MzY1LDM0Mzk1LDM0NDI0LDM0NDU0LDM0NDgzLDM0NTEyLDM0NTQyLDM0NTcxLDM0NjAxLDM0NjMxLDM0NjYwLDM0NjkwLDM0NzE5LDM0NzQ5LDM0Nzc4LDM0ODA4LDM0ODM3LDM0ODY3LDM0ODk2LDM0OTI2LDM0OTU1LDM0OTg1LDM1MDE1LDM1MDQ0LDM1MDc0LDM1MTAzLDM1MTMzLDM1MTYyLDM1MTkyLDM1MjIyLDM1MjUxLDM1MjgwLDM1MzEwLDM1MzQwLDM1MzcwLDM1Mzk5LDM1NDI5LDM1NDU4LDM1NDg4LDM1NTE3LDM1NTQ3LDM1NTc2LDM1NjA1LDM1NjM1LDM1NjY1LDM1Njk0LDM1NzIzLDM1NzUzLDM1NzgyLDM1ODExLDM1ODQxLDM1ODcxLDM1OTAxLDM1OTMwLDM1OTYwLDM1OTg5LDM2MDE5LDM2MDQ4LDM2MDc4LDM2MTA3LDM2MTM2LDM2MTY2LDM2MTk1LDM2MjI1LDM2MjU0LDM2Mjg0LDM2MzE0LDM2MzQzLDM2MzczLDM2NDAzLDM2NDMzLDM2NDYyLDM2NDkyLDM2NTIxLDM2NTUxLDM2NTgwLDM2NjEwLDM2NjM5LDM2NjY5LDM2Njk4LDM2NzI4LDM2NzU3LDM2Nzg2LDM2ODE2LDM2ODQ1LDM2ODc1LDM2OTA0LDM2OTM0LDM2OTYzLDM2OTkzLDM3MDIyLDM3MDUyLDM3MDgxLDM3MTExLDM3MTQxLDM3MTcwLDM3MjAwLDM3MjI5LDM3MjU5LDM3Mjg4LDM3MzE4LDM3MzQ3LDM3Mzc3LDM3NDA2LDM3NDM2LDM3NDY1LDM3NDk1LDM3NTI0LDM3NTU0LDM3NTg0LDM3NjEzLDM3NjQzLDM3NjcyLDM3NzAxLDM3NzMxLDM3NzYwLDM3NzkwLDM3ODE5LDM3ODQ5LDM3ODc4LDM3OTA4LDM3OTM4LDM3OTY3LDM3OTk3LDM4MDI3LDM4MDU2LDM4MDg1LDM4MTE1LDM4MTQ0LDM4MTc0LDM4MjAzLDM4MjMzLDM4MjYyLDM4MjkyLDM4MzIyLDM4MzUxLDM4MzgxLDM4NDEwLDM4NDQwLDM4NDY5LDM4NDk5LDM4NTI4LDM4NTU4LDM4NTg3LDM4NjE3LDM4NjQ2LDM4Njc2LDM4NzA1LDM4NzM1LDM4NzY0LDM4Nzk0LDM4ODIzLDM4ODUzLDM4ODgyLDM4OTEyLDM4OTQxLDM4OTcxLDM5MDAxLDM5MDMwLDM5MDU5LDM5MDg5LDM5MTE4LDM5MTQ4LDM5MTc4LDM5MjA4LDM5MjM3LDM5MjY3LDM5Mjk3LDM5MzI2LDM5MzU1LDM5Mzg1LDM5NDE0LDM5NDQ0LDM5NDczLDM5NTAzLDM5NTMyLDM5NTYyLDM5NTkyLDM5NjIxLDM5NjUwLDM5NjgwLDM5NzA5LDM5NzM5LDM5NzY4LDM5Nzk4LDM5ODI3LDM5ODU3LDM5ODg2LDM5OTE2LDM5OTQ2LDM5OTc1LDQwMDA1LDQwMDM1LDQwMDY0LDQwMDk0LDQwMTIzLDQwMTUzLDQwMTgyLDQwMjEyLDQwMjQxLDQwMjcxLDQwMzAwLDQwMzMwLDQwMzU5LDQwMzg5LDQwNDE4LDQwNDQ4LDQwNDc3LDQwNTA3LDQwNTM2LDQwNTY2LDQwNTk1LDQwNjI1LDQwNjU1LDQwNjg1LDQwNzE0LDQwNzQ0LDQwNzczLDQwODAzLDQwODMyLDQwODYyLDQwODkyLDQwOTIxLDQwOTUxLDQwOTgwLDQxMDA5LDQxMDM5LDQxMDY4LDQxMDk4LDQxMTI3LDQxMTU3LDQxMTg2LDQxMjE2LDQxMjQ1LDQxMjc1LDQxMzA0LDQxMzM0LDQxMzY0LDQxMzkzLDQxNDIyLDQxNDUyLDQxNDgxLDQxNTExLDQxNTQwLDQxNTcwLDQxNTk5LDQxNjI5LDQxNjU4LDQxNjg4LDQxNzE4LDQxNzQ4LDQxNzc3LDQxODA3LDQxODM2LDQxODY1LDQxODk0LDQxOTI0LDQxOTUzLDQxOTgzLDQyMDEyLDQyMDQyLDQyMDcyLDQyMTAyLDQyMTMxLDQyMTYxLDQyMTkwLDQyMjIwLDQyMjQ5LDQyMjc5LDQyMzA4LDQyMzM3LDQyMzY3LDQyMzk3LDQyNDI2LDQyNDU2LDQyNDg1LDQyNTE1LDQyNTQ1LDQyNTc0LDQyNjA0LDQyNjMzLDQyNjYyLDQyNjkyLDQyNzIxLDQyNzUxLDQyNzgwLDQyODEwLDQyODM5LDQyODY5LDQyODk5LDQyOTI5LDQyOTU4LDQyOTg4LDQzMDE3LDQzMDQ2LDQzMDc2LDQzMTA1LDQzMTM1LDQzMTY0LDQzMTk0LDQzMjIzLDQzMjUzLDQzMjgzLDQzMzEyLDQzMzQyLDQzMzcxLDQzNDAxLDQzNDMwLDQzNDYwLDQzNDg5LDQzNTE5LDQzNTQ4LDQzNTc4LDQzNjA3LDQzNjM3LDQzNjY2LDQzNjk2LDQzNzI2LDQzNzU1LDQzNzg1LDQzODE0LDQzODQ0LDQzODczLDQzOTAzLDQzOTMyLDQzOTYyLDQzOTkxLDQ0MDIxLDQ0MDUwLDQ0MDgwLDQ0MTA5LDQ0MTM5LDQ0MTY5LDQ0MTk4LDQ0MjI4LDQ0MjU4LDQ0Mjg3LDQ0MzE3LDQ0MzQ2LDQ0Mzc1LDQ0NDA1LDQ0NDM0LDQ0NDY0LDQ0NDkzLDQ0NTIzLDQ0NTUzLDQ0NTgyLDQ0NjEyLDQ0NjQxLDQ0NjcxLDQ0NzAwLDQ0NzMwLDQ0NzU5LDQ0Nzg4LDQ0ODE4LDQ0ODQ3LDQ0ODc3LDQ0OTA2LDQ0OTM2LDQ0OTY2LDQ0OTk2LDQ1MDI1LDQ1MDU1LDQ1MDg0LDQ1MTE0LDQ1MTQzLDQ1MTcyLDQ1MjAyLDQ1MjMxLDQ1MjYxLDQ1MjkwLDQ1MzIwLDQ1MzUwLDQ1MzgwLDQ1NDA5LDQ1NDM5LDQ1NDY4LDQ1NDk4LDQ1NTI3LDQ1NTU2LDQ1NTg2LDQ1NjE1LDQ1NjQ0LDQ1Njc0LDQ1NzA0LDQ1NzMzLDQ1NzYzLDQ1NzkzLDQ1ODIzLDQ1ODUyLDQ1ODgyLDQ1OTExLDQ1OTQwLDQ1OTcwLDQ1OTk5LDQ2MDI4LDQ2MDU4LDQ2MDg4LDQ2MTE3LDQ2MTQ3LDQ2MTc3LDQ2MjA2LDQ2MjM2LDQ2MjY1LDQ2Mjk1LDQ2MzI0LDQ2MzU0LDQ2MzgzLDQ2NDEzLDQ2NDQyLDQ2NDcyLDQ2NTAxLDQ2NTMxLDQ2NTYwLDQ2NTkwLDQ2NjIwLDQ2NjQ5LDQ2Njc5LDQ2NzA4LDQ2NzM4LDQ2NzY3LDQ2Nzk3LDQ2ODI2LDQ2ODU2LDQ2ODg1LDQ2OTE1LDQ2OTQ0LDQ2OTc0LDQ3MDAzLDQ3MDMzLDQ3MDYzLDQ3MDkyLDQ3MTIyLDQ3MTUxLDQ3MTgxLDQ3MjEwLDQ3MjQwLDQ3MjY5LDQ3Mjk4LDQ3MzI4LDQ3MzU3LDQ3Mzg3LDQ3NDE3LDQ3NDQ2LDQ3NDc2LDQ3NTA2LDQ3NTM1LDQ3NTY1LDQ3NTk0LDQ3NjI0LDQ3NjUzLDQ3NjgyLDQ3NzEyLDQ3NzQxLDQ3NzcxLDQ3ODAwLDQ3ODMwLDQ3ODYwLDQ3ODkwLDQ3OTE5LDQ3OTQ5LDQ3OTc4LDQ4MDA4LDQ4MDM3LDQ4MDY2LDQ4MDk2LDQ4MTI1LDQ4MTU1LDQ4MTg0LDQ4MjE0LDQ4MjQ0LDQ4MjczLDQ4MzAzLDQ4MzMzLDQ4MzYyLDQ4MzkyLDQ4NDIxLDQ4NDUwLDQ4NDgwLDQ4NTA5LDQ4NTM4LDQ4NTY4LDQ4NTk4LDQ4NjI3LDQ4NjU3LDQ4Njg3LDQ4NzE3LDQ4NzQ2LDQ4Nzc2LDQ4ODA1LDQ4ODM0LDQ4ODY0LDQ4ODkzLDQ4OTIyLDQ4OTUyLDQ4OTgyLDQ5MDExLDQ5MDQxLDQ5MDcxLDQ5MTAwLDQ5MTMwLDQ5MTYwLDQ5MTg5LDQ5MjE4LDQ5MjQ4LDQ5Mjc3LDQ5MzA2LDQ5MzM2LDQ5MzY1LDQ5Mzk1LDQ5NDI1LDQ5NDU1LDQ5NDg0LDQ5NTE0LDQ5NTQzLDQ5NTczLDQ5NjAyLDQ5NjMyLDQ5NjYxLDQ5NjkwLDQ5NzIwLDQ5NzQ5LDQ5Nzc5LDQ5ODA5LDQ5ODM4LDQ5ODY4LDQ5ODk4LDQ5OTI3LDQ5OTU3LDQ5OTg2LDUwMDE2LDUwMDQ1LDUwMDc1LDUwMTA0LDUwMTMzLDUwMTYzLDUwMTkyLDUwMjIyLDUwMjUyLDUwMjgxLDUwMzExLDUwMzQwLDUwMzcwLDUwNDAwLDUwNDI5LDUwNDU5LDUwNDg4LDUwNTE4LDUwNTQ3LDUwNTc2LDUwNjA2LDUwNjM1LDUwNjY1LDUwNjk0LDUwNzI0LDUwNzU0LDUwNzg0LDUwODEzLDUwODQzLDUwODcyLDUwOTAyLDUwOTMxLDUwOTYwLDUwOTkwLDUxMDE5LDUxMDQ5LDUxMDc4LDUxMTA4LDUxMTM4LDUxMTY3LDUxMTk3LDUxMjI3LDUxMjU2LDUxMjg2LDUxMzE1LDUxMzQ1LDUxMzc0LDUxNDAzLDUxNDMzLDUxNDYyLDUxNDkyLDUxNTIyLDUxNTUyLDUxNTgyLDUxNjExLDUxNjQxLDUxNjcwLDUxNjk5LDUxNzI5LDUxNzU4LDUxNzg3LDUxODE2LDUxODQ2LDUxODc2LDUxOTA2LDUxOTM2LDUxOTY1LDUxOTk1LDUyMDI1LDUyMDU0LDUyMDgzLDUyMTEzLDUyMTQyLDUyMTcxLDUyMjAwLDUyMjMwLDUyMjYwLDUyMjkwLDUyMzE5LDUyMzQ5LDUyMzc5LDUyNDA4LDUyNDM4LDUyNDY3LDUyNDk3LDUyNTI2LDUyNTU1LDUyNTg1LDUyNjE0LDUyNjQ0LDUyNjczLDUyNzAzLDUyNzMzLDUyNzYyLDUyNzkyLDUyODIyLDUyODUxLDUyODgxLDUyOTEwLDUyOTM5LDUyOTY5LDUyOTk4LDUzMDI4LDUzMDU3LDUzMDg3LDUzMTE2LDUzMTQ2LDUzMTc2LDUzMjA1LDUzMjM1LDUzMjY0LDUzMjk0LDUzMzI0LDUzMzUzLDUzMzgzLDUzNDEyLDUzNDQxLDUzNDcxLDUzNTAwLDUzNTMwLDUzNTU5LDUzNTg5LDUzNjE5LDUzNjQ4LDUzNjc4LDUzNzA4LDUzNzM3LDUzNzY3LDUzNzk2LDUzODI1LDUzODU1LDUzODg0LDUzOTEzLDUzOTQzLDUzOTczLDU0MDAzLDU0MDMyLDU0MDYyLDU0MDkyLDU0MTIxLDU0MTUxLDU0MTgwLDU0MjA5LDU0MjM5LDU0MjY4LDU0Mjk3LDU0MzI3LDU0MzU3LDU0Mzg3LDU0NDE2LDU0NDQ2LDU0NDc2LDU0NTA1LDU0NTM1LDU0NTY0LDU0NTkzLDU0NjIzLDU0NjUyLDU0NjgxLDU0NzExLDU0NzQxLDU0NzcwLDU0ODAwLDU0ODMwLDU0ODU5LDU0ODg5LDU0OTE5LDU0OTQ4LDU0OTc3LDU1MDA3LDU1MDM2LDU1MDY2LDU1MDk1LDU1MTI1LDU1MTU0LDU1MTg0LDU1MjEzLDU1MjQzLDU1MjczLDU1MzAyLDU1MzMyLDU1MzYxLDU1MzkxLDU1NDIwLDU1NDUwLDU1NDc5LDU1NTA4LDU1NTM4LDU1NTY3LDU1NTk3LDU1NjI3LDU1NjU3LDU1Njg2LDU1NzE2LDU1NzQ1LDU1Nzc1LDU1ODA0LDU1ODM0LDU1ODYzLDU1ODkyLDU1OTIyLDU1OTUxLDU1OTgxLDU2MDExLDU2MDQwLDU2MDcwLDU2MTAwLDU2MTI5LDU2MTU5LDU2MTg4LDU2MjE4LDU2MjQ3LDU2Mjc2LDU2MzA2LDU2MzM1LDU2MzY1LDU2Mzk0LDU2NDI0LDU2NDU0LDU2NDgzLDU2NTEzLDU2NTQzLDU2NTcyLDU2NjAxLDU2NjMxLDU2NjYwLDU2NjkwLDU2NzE5LDU2NzQ5LDU2Nzc4LDU2ODA4LDU2ODM3LDU2ODY3LDU2ODk3LDU2OTI2LDU2OTU2LDU2OTg1LDU3MDE1LDU3MDQ0LDU3MDc0LDU3MTAzLDU3MTMzLDU3MTYyLDU3MTkyLDU3MjIxLDU3MjUxLDU3MjgwLDU3MzEwLDU3MzQwLDU3MzY5LDU3Mzk5LDU3NDI5LDU3NDU4LDU3NDg3LDU3NTE3LDU3NTQ2LDU3NTc2LDU3NjA1LDU3NjM0LDU3NjY0LDU3Njk0LDU3NzIzLDU3NzUzLDU3NzgzLDU3ODEzLDU3ODQyLDU3ODcxLDU3OTAxLDU3OTMwLDU3OTU5LDU3OTg5LDU4MDE4LDU4MDQ4LDU4MDc3LDU4MTA3LDU4MTM3LDU4MTY3LDU4MTk2LDU4MjI2LDU4MjU1LDU4Mjg1LDU4MzE0LDU4MzQzLDU4MzczLDU4NDAyLDU4NDMyLDU4NDYxLDU4NDkxLDU4NTIxLDU4NTUxLDU4NTgwLDU4NjEwLDU4NjM5LDU4NjY5LDU4Njk4LDU4NzI3LDU4NzU3LDU4Nzg2LDU4ODE2LDU4ODQ1LDU4ODc1LDU4OTA1LDU4OTM0LDU4OTY0LDU4OTk0LDU5MDIzLDU5MDUzLDU5MDgyLDU5MTExLDU5MTQxLDU5MTcwLDU5MjAwLDU5MjI5LDU5MjU5LDU5Mjg4LDU5MzE4LDU5MzQ4LDU5Mzc3LDU5NDA3LDU5NDM2LDU5NDY2LDU5NDk1LDU5NTI1LDU5NTU0LDU5NTg0LDU5NjEzLDU5NjQzLDU5NjcyLDU5NzAyLDU5NzMxLDU5NzYxLDU5NzkxLDU5ODIwLDU5ODUwLDU5ODc5LDU5OTA5LDU5OTM5LDU5OTY4LDU5OTk3LDYwMDI3LDYwMDU2LDYwMDg2LDYwMTE1LDYwMTQ1LDYwMTc0LDYwMjA0LDYwMjM0LDYwMjY0LDYwMjkzLDYwMzIzLDYwMzUyLDYwMzgxLDYwNDExLDYwNDQwLDYwNDY5LDYwNDk5LDYwNTI4LDYwNTU4LDYwNTg4LDYwNjE4LDYwNjQ4LDYwNjc3LDYwNzA3LDYwNzM2LDYwNzY1LDYwNzk1LDYwODI0LDYwODUzLDYwODgzLDYwOTEyLDYwOTQyLDYwOTcyLDYxMDAyLDYxMDMxLDYxMDYxLDYxMDkwLDYxMTIwLDYxMTQ5LDYxMTc5LDYxMjA4LDYxMjM3LDYxMjY3LDYxMjk2LDYxMzI2LDYxMzU2LDYxMzg1LDYxNDE1LDYxNDQ1LDYxNDc0LDYxNTA0LDYxNTMzLDYxNTYzLDYxNTkyLDYxNjIxLDYxNjUxLDYxNjgwLDYxNzEwLDYxNzM5LDYxNzY5LDYxNzk5LDYxODI4LDYxODU4LDYxODg4LDYxOTE3LDYxOTQ3LDYxOTc2LDYyMDA2LDYyMDM1LDYyMDY0LDYyMDk0LDYyMTIzLDYyMTUzLDYyMTgyLDYyMjEyLDYyMjQyLDYyMjcxLDYyMzAxLDYyMzMxLDYyMzYwLDYyMzkwLDYyNDE5LDYyNDQ4LDYyNDc4LDYyNTA3LDYyNTM3LDYyNTY2LDYyNTk2LDYyNjI1LDYyNjU1LDYyNjg1LDYyNzE1LDYyNzQ0LDYyNzc0LDYyODAzLDYyODMyLDYyODYyLDYyODkxLDYyOTIxLDYyOTUwLDYyOTgwLDYzMDA5LDYzMDM5LDYzMDY5LDYzMDk5LDYzMTI4LDYzMTU3LDYzMTg3LDYzMjE2LDYzMjQ2LDYzMjc1LDYzMzA1LDYzMzM0LDYzMzYzLDYzMzkzLDYzNDIzLDYzNDUzLDYzNDgyLDYzNTEyLDYzNTQxLDYzNTcxLDYzNjAwLDYzNjMwLDYzNjU5LDYzNjg5LDYzNzE4LDYzNzQ3LDYzNzc3LDYzODA3LDYzODM2LDYzODY2LDYzODk1LDYzOTI1LDYzOTU1LDYzOTg0LDY0MDE0LDY0MDQzLDY0MDczLDY0MTAyLDY0MTMxLDY0MTYxLDY0MTkwLDY0MjIwLDY0MjQ5LDY0Mjc5LDY0MzA5LDY0MzM5LDY0MzY4LDY0Mzk4LDY0NDI3LDY0NDU3LDY0NDg2LDY0NTE1LDY0NTQ1LDY0NTc0LDY0NjAzLDY0NjMzLDY0NjYzLDY0NjkyLDY0NzIyLDY0NzUyLDY0NzgyLDY0ODExLDY0ODQxLDY0ODcwLDY0ODk5LDY0OTI5LDY0OTU4LDY0OTg3LDY1MDE3LDY1MDQ3LDY1MDc2LDY1MTA2LDY1MTM2LDY1MTY2LDY1MTk1LDY1MjI1LDY1MjU0LDY1MjgzLDY1MzEzLDY1MzQyLDY1MzcxLDY1NDAxLDY1NDMxLDY1NDYwLDY1NDkwLDY1NTIwLDY1NTQ5LDY1NTc5LDY1NjA4LDY1NjM4LDY1NjY3LDY1Njk3LDY1NzI2LDY1NzU1LDY1Nzg1LDY1ODE1LDY1ODQ0LDY1ODc0LDY1OTAzLDY1OTMzLDY1OTYzLDY1OTkyLDY2MDIyLDY2MDUxLDY2MDgxLDY2MTEwLDY2MTQwLDY2MTY5LDY2MTk5LDY2MjI4LDY2MjU4LDY2Mjg3LDY2MzE3LDY2MzQ2LDY2Mzc2LDY2NDA1LDY2NDM1LDY2NDY1LDY2NDk0LDY2NTI0LDY2NTUzLDY2NTgzLDY2NjEyLDY2NjQxLDY2NjcxLDY2NzAwLDY2NzMwLDY2NzYwLDY2Nzg5LDY2ODE5LDY2ODQ5LDY2ODc4LDY2OTA4LDY2OTM3LDY2OTY3LDY2OTk2LDY3MDI1LDY3MDU1LDY3MDg0LDY3MTE0LDY3MTQzLDY3MTczLDY3MjAzLDY3MjMzLDY3MjYyLDY3MjkyLDY3MzIxLDY3MzUxLDY3MzgwLDY3NDA5LDY3NDM5LDY3NDY4LDY3NDk3LDY3NTI3LDY3NTU3LDY3NTg3LDY3NjE3LDY3NjQ2LDY3Njc2LDY3NzA1LDY3NzM1LDY3NzY0LDY3NzkzLDY3ODIzLDY3ODUyLDY3ODgyLDY3OTExLDY3OTQxLDY3OTcxLDY4ZTMsNjgwMzAsNjgwNjAsNjgwODksNjgxMTksNjgxNDgsNjgxNzcsNjgyMDcsNjgyMzYsNjgyNjYsNjgyOTUsNjgzMjUsNjgzNTQsNjgzODQsNjg0MTQsNjg0NDMsNjg0NzMsNjg1MDIsNjg1MzIsNjg1NjEsNjg1OTEsNjg2MjAsNjg2NTAsNjg2NzksNjg3MDgsNjg3MzgsNjg3NjgsNjg3OTcsNjg4MjcsNjg4NTcsNjg4ODYsNjg5MTYsNjg5NDYsNjg5NzUsNjkwMDQsNjkwMzQsNjkwNjMsNjkwOTIsNjkxMjIsNjkxNTIsNjkxODEsNjkyMTEsNjkyNDAsNjkyNzAsNjkzMDAsNjkzMzAsNjkzNTksNjkzODgsNjk0MTgsNjk0NDcsNjk0NzYsNjk1MDYsNjk1MzUsNjk1NjUsNjk1OTUsNjk2MjQsNjk2NTQsNjk2ODQsNjk3MTMsNjk3NDMsNjk3NzIsNjk4MDIsNjk4MzEsNjk4NjEsNjk4OTAsNjk5MTksNjk5NDksNjk5NzgsNzAwMDgsNzAwMzgsNzAwNjcsNzAwOTcsNzAxMjYsNzAxNTYsNzAxODYsNzAyMTUsNzAyNDUsNzAyNzQsNzAzMDMsNzAzMzMsNzAzNjIsNzAzOTIsNzA0MjEsNzA0NTEsNzA0ODEsNzA1MTAsNzA1NDAsNzA1NzAsNzA1OTksNzA2MjksNzA2NTgsNzA2ODcsNzA3MTcsNzA3NDYsNzA3NzYsNzA4MDUsNzA4MzUsNzA4NjQsNzA4OTQsNzA5MjQsNzA5NTQsNzA5ODMsNzEwMTMsNzEwNDIsNzEwNzEsNzExMDEsNzExMzAsNzExNTksNzExODksNzEyMTgsNzEyNDgsNzEyNzgsNzEzMDgsNzEzMzcsNzEzNjcsNzEzOTcsNzE0MjYsNzE0NTUsNzE0ODUsNzE1MTQsNzE1NDMsNzE1NzMsNzE2MDIsNzE2MzIsNzE2NjIsNzE2OTEsNzE3MjEsNzE3NTEsNzE3ODEsNzE4MTAsNzE4MzksNzE4NjksNzE4OTgsNzE5MjcsNzE5NTcsNzE5ODYsNzIwMTYsNzIwNDYsNzIwNzUsNzIxMDUsNzIxMzUsNzIxNjQsNzIxOTQsNzIyMjMsNzIyNTMsNzIyODIsNzIzMTEsNzIzNDEsNzIzNzAsNzI0MDAsNzI0MjksNzI0NTksNzI0ODksNzI1MTgsNzI1NDgsNzI1NzcsNzI2MDcsNzI2MzcsNzI2NjYsNzI2OTUsNzI3MjUsNzI3NTQsNzI3ODQsNzI4MTMsNzI4NDMsNzI4NzIsNzI5MDIsNzI5MzEsNzI5NjEsNzI5OTEsNzMwMjAsNzMwNTAsNzMwODAsNzMxMDksNzMxMzksNzMxNjgsNzMxOTcsNzMyMjcsNzMyNTYsNzMyODYsNzMzMTUsNzMzNDUsNzMzNzUsNzM0MDQsNzM0MzQsNzM0NjQsNzM0OTMsNzM1MjMsNzM1NTIsNzM1ODEsNzM2MTEsNzM2NDAsNzM2NjksNzM2OTksNzM3MjksNzM3NTgsNzM3ODgsNzM4MTgsNzM4NDgsNzM4NzcsNzM5MDcsNzM5MzYsNzM5NjUsNzM5OTUsNzQwMjQsNzQwNTMsNzQwODMsNzQxMTMsNzQxNDIsNzQxNzIsNzQyMDIsNzQyMzEsNzQyNjEsNzQyOTEsNzQzMjAsNzQzNDksNzQzNzksNzQ0MDgsNzQ0MzcsNzQ0NjcsNzQ0OTcsNzQ1MjYsNzQ1NTYsNzQ1ODYsNzQ2MTUsNzQ2NDUsNzQ2NzUsNzQ3MDQsNzQ3MzMsNzQ3NjMsNzQ3OTIsNzQ4MjIsNzQ4NTEsNzQ4ODEsNzQ5MTAsNzQ5NDAsNzQ5NjksNzQ5OTksNzUwMjksNzUwNTgsNzUwODgsNzUxMTcsNzUxNDcsNzUxNzYsNzUyMDYsNzUyMzUsNzUyNjQsNzUyOTQsNzUzMjMsNzUzNTMsNzUzODMsNzU0MTIsNzU0NDIsNzU0NzIsNzU1MDEsNzU1MzEsNzU1NjAsNzU1OTAsNzU2MTksNzU2NDgsNzU2NzgsNzU3MDcsNzU3MzcsNzU3NjYsNzU3OTYsNzU4MjYsNzU4NTYsNzU4ODUsNzU5MTUsNzU5NDQsNzU5NzQsNzYwMDMsNzYwMzIsNzYwNjIsNzYwOTEsNzYxMjEsNzYxNTAsNzYxODAsNzYyMTAsNzYyMzksNzYyNjksNzYyOTksNzYzMjgsNzYzNTgsNzYzODcsNzY0MTYsNzY0NDYsNzY0NzUsNzY1MDUsNzY1MzQsNzY1NjQsNzY1OTMsNzY2MjMsNzY2NTMsNzY2ODIsNzY3MTIsNzY3NDEsNzY3NzEsNzY4MDEsNzY4MzAsNzY4NTksNzY4ODksNzY5MTgsNzY5NDgsNzY5NzcsNzcwMDcsNzcwMzYsNzcwNjYsNzcwOTYsNzcxMjUsNzcxNTUsNzcxODUsNzcyMTQsNzcyNDMsNzcyNzMsNzczMDIsNzczMzIsNzczNjEsNzczOTAsNzc0MjAsNzc0NTAsNzc0NzksNzc1MDksNzc1MzksNzc1NjksNzc1OTgsNzc2MjcsNzc2NTcsNzc2ODYsNzc3MTUsNzc3NDUsNzc3NzQsNzc4MDQsNzc4MzMsNzc4NjMsNzc4OTMsNzc5MjMsNzc5NTIsNzc5ODIsNzgwMTEsNzgwNDEsNzgwNzAsNzgwOTksNzgxMjksNzgxNTgsNzgxODgsNzgyMTcsNzgyNDcsNzgyNzcsNzgzMDcsNzgzMzYsNzgzNjYsNzgzOTUsNzg0MjUsNzg0NTQsNzg0ODMsNzg1MTMsNzg1NDIsNzg1NzIsNzg2MDEsNzg2MzEsNzg2NjEsNzg2OTAsNzg3MjAsNzg3NTAsNzg3NzksNzg4MDgsNzg4MzgsNzg4NjcsNzg4OTcsNzg5MjYsNzg5NTYsNzg5ODUsNzkwMTUsNzkwNDQsNzkwNzQsNzkxMDQsNzkxMzMsNzkxNjMsNzkxOTIsNzkyMjIsNzkyNTEsNzkyODEsNzkzMTAsNzkzNDAsNzkzNjksNzkzOTksNzk0MjgsNzk0NTgsNzk0ODcsNzk1MTcsNzk1NDYsNzk1NzYsNzk2MDYsNzk2MzUsNzk2NjUsNzk2OTUsNzk3MjQsNzk3NTMsNzk3ODMsNzk4MTIsNzk4NDEsNzk4NzEsNzk5MDAsNzk5MzAsNzk5NjAsNzk5OTBdfSx7Ii4uL21haW4iOjU1NSwib2JqZWN0LWFzc2lnbiI6NDQ2fV0sNTU1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkoKXt0aGlzLnJlZ2lvbmFsT3B0aW9ucz1bXSx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl09e2ludmFsaWRDYWxlbmRhcjoiQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCIsaW52YWxpZERhdGU6IkludmFsaWQgezB9IGRhdGUiLGludmFsaWRNb250aDoiSW52YWxpZCB7MH0gbW9udGgiLGludmFsaWRZZWFyOiJJbnZhbGlkIHswfSB5ZWFyIixkaWZmZXJlbnRDYWxlbmRhcnM6IkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMifSx0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zWyIiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gYSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4iMDAwMDAwIi5zdWJzdHJpbmcoMCxlLSh0PSIiK3QpLmxlbmd0aCkrdH1mdW5jdGlvbiBzKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9IisxMCJ9ZnVuY3Rpb24gbCh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3RdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19bihpLnByb3RvdHlwZSx7aW5zdGFuY2U6ZnVuY3Rpb24odCxlKXt0PSh0fHwiZ3JlZ29yaWFuIikudG9Mb3dlckNhc2UoKSxlPWV8fCIiO3ZhciByPXRoaXMuX2xvY2FsQ2Fsc1t0KyItIitlXTtpZighciYmdGhpcy5jYWxlbmRhcnNbdF0mJihyPW5ldyB0aGlzLmNhbGVuZGFyc1t0XShlKSx0aGlzLl9sb2NhbENhbHNbdCsiLSIrZV09ciksIXIpdGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQ2FsZW5kYXIpLnJlcGxhY2UoL1x7MFx9Lyx0KTtyZXR1cm4gcn0sbmV3RGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybihuPShudWxsIT10JiZ0LnllYXI/dC5jYWxlbmRhcigpOiJzdHJpbmciPT10eXBlb2Ygbj90aGlzLmluc3RhbmNlKG4saSk6bil8fHRoaXMuaW5zdGFuY2UoKSkubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9fSxzdWJzdGl0dXRlQ2hpbmVzZURpZ2l0czpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49IiIsaT0wO3I+MDspe3ZhciBhPXIlMTA7bj0oMD09PWE/IiI6dFthXStlW2ldKStuLGkrKyxyPU1hdGguZmxvb3Ioci8xMCl9cmV0dXJuIDA9PT1uLmluZGV4T2YodFsxXStlWzFdKSYmKG49bi5zdWJzdHIoMSkpLG58fHRbMF19fX0pLG4oYS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKG51bGw9PXQ/dGhpczp0LGUscil9LHllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3llYXI6dGhpcy5zZXQodCwieSIpfSxtb250aDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fbW9udGg6dGhpcy5zZXQodCwibSIpfSxkYXk6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RheTp0aGlzLnNldCh0LCJkIil9LGRhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHQsZSxyKSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtyZXR1cm4gdGhpcy5feWVhcj10LHRoaXMuX21vbnRoPWUsdGhpcy5fZGF5PXIsdGhpc30sbGVhcFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubGVhcFllYXIodGhpcyl9LGVwb2NoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVwb2NoKHRoaXMpfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFllYXIodGhpcyl9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcyl9LGRheXNJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luTW9udGgodGhpcyl9LGRheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcyl9LHdlZWtEYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla0RheSh0aGlzKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLHQsZSl9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcyx0LGUpfSxjb21wYXJlVG86ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsZW5kYXIubmFtZSE9PXQuX2NhbGVuZGFyLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5fY2FsZW5kYXIubG9jYWwubmFtZSk7dmFyIGU9dGhpcy5feWVhciE9PXQuX3llYXI/dGhpcy5feWVhci10Ll95ZWFyOnRoaXMuX21vbnRoIT09dC5fbW9udGg/dGhpcy5tb250aE9mWWVhcigpLXQubW9udGhPZlllYXIoKTp0aGlzLl9kYXktdC5fZGF5O3JldHVybiAwPT09ZT8wOmU8MD8tMToxfSxjYWxlbmRhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhcn0sdG9KRDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pEKHRoaXMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KRCh0KX0sdG9KU0RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KU0RhdGUodGhpcyl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KU0RhdGUodCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKHRoaXMueWVhcigpKSw0KSsiLSIrbyh0aGlzLm1vbnRoKCksMikrIi0iK28odGhpcy5kYXkoKSwyKX19KSxuKHMucHJvdG90eXBlLHtfdmFsaWRhdGVMZXZlbDowLG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBudWxsPT10P3RoaXMudG9kYXkoKToodC55ZWFyJiYodGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxyPXQuZGF5KCksZT10Lm1vbnRoKCksdD10LnllYXIoKSksbmV3IGEodGhpcyx0LGUscikpfSx0b2RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZyb21KU0RhdGUobmV3IERhdGUpfSxlcG9jaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcikueWVhcigpPDA/dGhpcy5sb2NhbC5lcG9jaHNbMF06dGhpcy5sb2NhbC5lcG9jaHNbMV19LGZvcm1hdFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuKGUueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKGUueWVhcigpKSw0KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxMn0sbW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpO3JldHVybihyLm1vbnRoKCkrdGhpcy5tb250aHNJblllYXIociktdGhpcy5maXJzdE1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcihyKSt0aGlzLm1pbk1vbnRofSxmcm9tTW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj0oZSt0aGlzLmZpcnN0TW9udGgtMip0aGlzLm1pbk1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcih0KSt0aGlzLm1pbk1vbnRoO3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHIsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpLHJ9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMubGVhcFllYXIoZSk/MzY2OjM2NX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBuLnRvSkQoKS10aGlzLm5ld0RhdGUobi55ZWFyKCksdGhpcy5mcm9tTW9udGhPZlllYXIobi55ZWFyKCksdGhpcy5taW5Nb250aCksdGhpcy5taW5EYXkpLnRvSkQoKSsxfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDd9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4oTWF0aC5mbG9vcih0aGlzLnRvSkQobikpKzIpJXRoaXMuZGF5c0luV2VlaygpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHt9fSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSx0aGlzLl9jb3JyZWN0QWRkKHQsdGhpcy5fYWRkKHQsZSxyKSxlLHIpfSxfYWRkOmZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssImQiPT09cnx8InciPT09cil7dmFyIG49dC50b0pEKCkrZSooInciPT09cj90aGlzLmRheXNJbldlZWsoKToxKSxpPXQuY2FsZW5kYXIoKS5mcm9tSkQobik7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxbaS55ZWFyKCksaS5tb250aCgpLGkuZGF5KCldfXRyeXt2YXIgYT10LnllYXIoKSsoInkiPT09cj9lOjApLG89dC5tb250aE9mWWVhcigpKygibSI9PT1yP2U6MCk7aT10LmRheSgpOyJ5Ij09PXI/KHQubW9udGgoKSE9PXRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykmJihvPXRoaXMubmV3RGF0ZShhLHQubW9udGgoKSx0aGlzLm1pbkRheSkubW9udGhPZlllYXIoKSksbz1NYXRoLm1pbihvLHRoaXMubW9udGhzSW5ZZWFyKGEpKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk6Im0iPT09ciYmKCFmdW5jdGlvbih0KXtmb3IoO288dC5taW5Nb250aDspYS0tLG8rPXQubW9udGhzSW5ZZWFyKGEpO2Zvcih2YXIgZT10Lm1vbnRoc0luWWVhcihhKTtvPmUtMSt0Lm1pbk1vbnRoOylhKyssby09ZSxlPXQubW9udGhzSW5ZZWFyKGEpfSh0aGlzKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk7dmFyIHM9W2EsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSxpXTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHN9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fSxfY29ycmVjdEFkZDpmdW5jdGlvbih0LGUscixuKXtpZighKHRoaXMuaGFzWWVhclplcm98fCJ5IiE9PW4mJiJtIiE9PW58fDAhPT1lWzBdJiZ0LnllYXIoKT4wPT1lWzBdPjApKXt2YXIgaT17eTpbMSwxLCJ5Il0sbTpbMSx0aGlzLm1vbnRoc0luWWVhcigtMSksIm0iXSx3Olt0aGlzLmRheXNJbldlZWsoKSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl0sZDpbMSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl19W25dLGE9cjwwPy0xOjE7ZT10aGlzLl9hZGQodCxyKmlbMF0rYSppWzFdLGlbMl0pfXJldHVybiB0LmRhdGUoZVswXSxlWzFdLGVbMl0pfSxzZXQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3ZhciBuPSJ5Ij09PXI/ZTp0LnllYXIoKSxpPSJtIj09PXI/ZTp0Lm1vbnRoKCksYT0iZCI9PT1yP2U6dC5kYXkoKTtyZXR1cm4ieSIhPT1yJiYibSIhPT1yfHwoYT1NYXRoLm1pbihhLHRoaXMuZGF5c0luTW9udGgobixpKSkpLHQuZGF0ZShuLGksYSl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlTGV2ZWwrKzt2YXIgbj10aGlzLmhhc1llYXJaZXJvfHwwIT09dDtpZihuKXt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHRoaXMubWluRGF5KTtuPWU+PXRoaXMubWluTW9udGgmJmUtdGhpcy5taW5Nb250aDx0aGlzLm1vbnRoc0luWWVhcihpKSYmcj49dGhpcy5taW5EYXkmJnItdGhpcy5taW5EYXk8dGhpcy5kYXlzSW5Nb250aChpKX1yZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLG59LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBjLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChuKSkudG9KU0RhdGUoKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tSkQoYy5pbnN0YW5jZSgpLmZyb21KU0RhdGUodCkudG9KRCgpKX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQueWVhcil7aWYoMD09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJnRoaXMubmFtZSE9PXQuY2FsZW5kYXIoKS5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uZGlmZmVyZW50Q2FsZW5kYXJzKS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5jYWxlbmRhcigpLmxvY2FsLm5hbWUpO3JldHVybiB0fXRyeXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssMT09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLmlzVmFsaWQodCxlLHIpKXRocm93IG4ucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLGl9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fX0pLGwucHJvdG90eXBlPW5ldyBzLG4obC5wcm90b3R5cGUse25hbWU6IkdyZWdvcmlhbiIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiR3JlZ29yaWFuIixlcG9jaHM6WyJCQ0UiLCJDRSJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0wJiYodCUxMDAhPTB8fHQlNDAwPT0wKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpLHQ8MCYmdCsrLGU8MyYmKGUrPTEyLHQtLSk7dmFyIGk9TWF0aC5mbG9vcih0LzEwMCksYT0yLWkrTWF0aC5mbG9vcihpLzQpO3JldHVybiBNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyK2EtMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSxyPU1hdGguZmxvb3IoKGUtMTg2NzIxNi4yNSkvMzY1MjQuMjUpLG49KHI9ZSsxK3ItTWF0aC5mbG9vcihyLzQpKSsxNTI0LGk9TWF0aC5mbG9vcigobi0xMjIuMSkvMzY1LjI1KSxhPU1hdGguZmxvb3IoMzY1LjI1KmkpLG89TWF0aC5mbG9vcigobi1hKS8zMC42MDAxKSxzPW4tYS1NYXRoLmZsb29yKDMwLjYwMDEqbyksbD1vLShvPjEzLjU/MTM6MSksYz1pLShsPjIuNT80NzE2OjQ3MTUpO3JldHVybiBjPD0wJiZjLS0sdGhpcy5uZXdEYXRlKGMsbCxzKX0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSksaT1uZXcgRGF0ZShuLnllYXIoKSxuLm1vbnRoKCktMSxuLmRheSgpKTtyZXR1cm4gaS5zZXRIb3VycygwKSxpLnNldE1pbnV0ZXMoMCksaS5zZXRTZWNvbmRzKDApLGkuc2V0TWlsbGlzZWNvbmRzKDApLGkuc2V0SG91cnMoaS5nZXRIb3VycygpPjEyP2kuZ2V0SG91cnMoKSsyOjApLGl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmV3RGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpKzEsdC5nZXREYXRlKCkpfX0pO3ZhciBjPWUuZXhwb3J0cz1uZXcgaTtjLmNkYXRlPWEsYy5iYXNlQ2FsZW5kYXI9cyxjLmNhbGVuZGFycy5ncmVnb3JpYW49bH0seyJvYmplY3QtYXNzaWduIjo0NDZ9XSw1NTY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJvYmplY3QtYXNzaWduIiksaT10KCIuL21haW4iKTtuKGkucmVnaW9uYWxPcHRpb25zWyIiXSx7aW52YWxpZEFyZ3VtZW50czoiSW52YWxpZCBhcmd1bWVudHMiLGludmFsaWRGb3JtYXQ6IkNhbm5vdCBmb3JtYXQgYSBkYXRlIGZyb20gYW5vdGhlciBjYWxlbmRhciIsbWlzc2luZ051bWJlckF0OiJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiB7MH0iLHVua25vd25OYW1lQXQ6IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRMaXRlcmFsQXQ6IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRUZXh0OiJBZGRpdGlvbmFsIHRleHQgZm91bmQgYXQgZW5kIn0pLGkubG9jYWw9aS5yZWdpb25hbE9wdGlvbnNbIiJdLG4oaS5jZGF0ZS5wcm90b3R5cGUse2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihlPXQsdD0iIiksdGhpcy5fY2FsZW5kYXIuZm9ybWF0RGF0ZSh0fHwiIix0aGlzLGUpfX0pLG4oaS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLHtVTklYX0VQT0NIOmkuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsMSwxKS50b0pEKCksU0VDU19QRVJfREFZOjg2NDAwLFRJQ0tTX0VQT0NIOmkuaW5zdGFuY2UoKS5qZEVwb2NoLFRJQ0tTX1BFUl9EQVk6ODY0ZTksQVRPTToieXl5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5eXkiLEZVTEw6IkRELCBNTSBkLCB5eXl5IixJU09fODYwMToieXl5eS1tbS1kZCIsSlVMSUFOOiJKIixSRkNfODIyOiJELCBkIE0geXkiLFJGQ184NTA6IkRELCBkZC1NLXl5IixSRkNfMTAzNjoiRCwgZCBNIHl5IixSRkNfMTEyMzoiRCwgZCBNIHl5eXkiLFJGQ18yODIyOiJELCBkIE0geXl5eSIsUlNTOiJELCBkIE0geXkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXl5eS1tbS1kZCIsZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUscil7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYocj1lLGU9dCx0PSIiKSwhZSlyZXR1cm4iIjtpZihlLmNhbGVuZGFyKCkhPT10aGlzKXRocm93IGkubG9jYWwuaW52YWxpZEZvcm1hdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRGb3JtYXQ7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7Zm9yKHZhciBuLGEsbyxzLGw9KHI9cnx8e30pLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxjPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMsdT1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsZj1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsaD1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxwPShyLmNhbGN1bGF0ZVdlZWt8fHRoaXMubG9jYWwuY2FsY3VsYXRlV2VlayxmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO3crbjx0Lmxlbmd0aCYmdC5jaGFyQXQodytuKT09PWU7KW4rKztyZXR1cm4gdys9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9KSxkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPSIiK2U7aWYocCh0LG4pKWZvcig7aS5sZW5ndGg8cjspaT0iMCIraTtyZXR1cm4gaX0sZz10aGlzLHY9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5jYWxsKGcsdCxwKCJtIikpOngoZCgibSIsdC5tb250aCgpLDIpKX0sbT1mdW5jdGlvbih0LGUpe3JldHVybiBlPyJmdW5jdGlvbiI9PXR5cGVvZiBoP2guY2FsbChnLHQpOmhbdC5tb250aCgpLWcubWluTW9udGhdOiJmdW5jdGlvbiI9PXR5cGVvZiBmP2YuY2FsbChnLHQpOmZbdC5tb250aCgpLWcubWluTW9udGhdfSx5PXRoaXMubG9jYWwuZGlnaXRzLHg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubG9jYWxOdW1iZXJzJiZ5P3kodCk6dH0sYj0iIixfPSExLHc9MDt3PHQubGVuZ3RoO3crKylpZihfKSInIiE9PXQuY2hhckF0KHcpfHxwKCInIik/Yis9dC5jaGFyQXQodyk6Xz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdCh3KSl7Y2FzZSJkIjpiKz14KGQoImQiLGUuZGF5KCksMikpO2JyZWFrO2Nhc2UiRCI6Yis9KG49IkQiLGE9ZS5kYXlPZldlZWsoKSxvPWwscz1jLHAobik/c1thXTpvW2FdKTticmVhaztjYXNlIm8iOmIrPWQoIm8iLGUuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZSJ3IjpiKz1kKCJ3IixlLndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlIm0iOmIrPXYoZSk7YnJlYWs7Y2FzZSJNIjpiKz1tKGUscCgiTSIpKTticmVhaztjYXNlInkiOmIrPXAoInkiLDIpP2UueWVhcigpOihlLnllYXIoKSUxMDA8MTA/IjAiOiIiKStlLnllYXIoKSUxMDA7YnJlYWs7Y2FzZSJZIjpwKCJZIiwyKSxiKz1lLmZvcm1hdFllYXIoKTticmVhaztjYXNlIkoiOmIrPWUudG9KRCgpO2JyZWFrO2Nhc2UiQCI6Yis9KGUudG9KRCgpLXRoaXMuVU5JWF9FUE9DSCkqdGhpcy5TRUNTX1BFUl9EQVk7YnJlYWs7Y2FzZSIhIjpiKz0oZS50b0pEKCktdGhpcy5USUNLU19FUE9DSCkqdGhpcy5USUNLU19QRVJfREFZO2JyZWFrO2Nhc2UiJyI6cCgiJyIpP2IrPSInIjpfPSEwO2JyZWFrO2RlZmF1bHQ6Yis9dC5jaGFyQXQodyl9cmV0dXJuIGJ9LHBhcnNlRGF0ZTpmdW5jdGlvbih0LGUscil7aWYobnVsbD09ZSl0aHJvdyBpLmxvY2FsLmludmFsaWRBcmd1bWVudHN8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQXJndW1lbnRzO2lmKCIiPT09KGU9Im9iamVjdCI9PXR5cGVvZiBlP2UudG9TdHJpbmcoKTplKyIiKSlyZXR1cm4gbnVsbDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDt2YXIgbj0ocj1yfHx7fSkuc2hvcnRZZWFyQ3V0b2ZmfHx0aGlzLnNob3J0WWVhckN1dG9mZjtuPSJzdHJpbmciIT10eXBlb2Ygbj9uOnRoaXMudG9kYXkoKS55ZWFyKCklMTAwK3BhcnNlSW50KG4sMTApO2Zvcih2YXIgYT1yLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxvPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMscz1yLnBhcnNlTW9udGh8fHRoaXMubG9jYWwucGFyc2VNb250aCxsPXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxjPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCx1PXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLGY9LTEsaD0tMSxwPS0xLGQ9LTEsZz0tMSx2PSExLG09ITEseT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO00rbjx0Lmxlbmd0aCYmdC5jaGFyQXQoTStuKT09PWU7KW4rKztyZXR1cm4gTSs9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9LHg9ZnVuY3Rpb24odCxyKXt2YXIgbj15KHQsciksYT1bMiwzLG4/NDoyLG4/NDoyLDEwLDExLDIwXVsib3lZSkAhIi5pbmRleE9mKHQpKzFdLG89bmV3IFJlZ0V4cCgiXi0/XFxkezEsIithKyJ9Iikscz1lLnN1YnN0cmluZyhBKS5tYXRjaChvKTtpZighcyl0aHJvdyhpLmxvY2FsLm1pc3NpbmdOdW1iZXJBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLm1pc3NpbmdOdW1iZXJBdCkucmVwbGFjZSgvXHswXH0vLEEpO3JldHVybiBBKz1zWzBdLmxlbmd0aCxwYXJzZUludChzWzBdLDEwKX0sYj10aGlzLF89ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl7eSgibSIpO3ZhciB0PWwuY2FsbChiLGUuc3Vic3RyaW5nKEEpKTtyZXR1cm4gQSs9dC5sZW5ndGgsdH1yZXR1cm4geCgibSIpfSx3PWZ1bmN0aW9uKHQscixuLGEpe2Zvcih2YXIgbz15KHQsYSk/bjpyLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihlLnN1YnN0cihBLG9bc10ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09b1tzXS50b0xvd2VyQ2FzZSgpKXJldHVybiBBKz1vW3NdLmxlbmd0aCxzK2IubWluTW9udGg7dGhyb3coaS5sb2NhbC51bmtub3duTmFtZUF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5rbm93bk5hbWVBdCkucmVwbGFjZSgvXHswXH0vLEEpfSxrPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHUpe3ZhciB0PXkoIk0iKT91LmNhbGwoYixlLnN1YnN0cmluZyhBKSk6Yy5jYWxsKGIsZS5zdWJzdHJpbmcoQSkpO3JldHVybiBBKz10Lmxlbmd0aCx0fXJldHVybiB3KCJNIixjLHUpfSxUPWZ1bmN0aW9uKCl7aWYoZS5jaGFyQXQoQSkhPT10LmNoYXJBdChNKSl0aHJvdyhpLmxvY2FsLnVuZXhwZWN0ZWRMaXRlcmFsQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkTGl0ZXJhbEF0KS5yZXBsYWNlKC9cezBcfS8sQSk7QSsrfSxBPTAsTT0wO008dC5sZW5ndGg7TSsrKWlmKG0pIiciIT09dC5jaGFyQXQoTSl8fHkoIiciKT9UKCk6bT0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChNKSl7Y2FzZSJkIjpkPXgoImQiKTticmVhaztjYXNlIkQiOncoIkQiLGEsbyk7YnJlYWs7Y2FzZSJvIjpnPXgoIm8iKTticmVhaztjYXNlInciOngoInciKTticmVhaztjYXNlIm0iOnA9XygpO2JyZWFrO2Nhc2UiTSI6cD1rKCk7YnJlYWs7Y2FzZSJ5Ijp2YXIgUz1NO3Y9IXkoInkiLDIpLE09UyxoPXgoInkiLDIpO2JyZWFrO2Nhc2UiWSI6aD14KCJZIiwyKTticmVhaztjYXNlIkoiOmY9eCgiSiIpKy41LCIuIj09PWUuY2hhckF0KEEpJiYoQSsrLHgoIkoiKSk7YnJlYWs7Y2FzZSJAIjpmPXgoIkAiKS90aGlzLlNFQ1NfUEVSX0RBWSt0aGlzLlVOSVhfRVBPQ0g7YnJlYWs7Y2FzZSIhIjpmPXgoIiEiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlIioiOkE9ZS5sZW5ndGg7YnJlYWs7Y2FzZSInIjp5KCInIik/VCgpOm09ITA7YnJlYWs7ZGVmYXVsdDpUKCl9aWYoQTxlLmxlbmd0aCl0aHJvdyBpLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZFRleHQ7aWYoLTE9PT1oP2g9dGhpcy50b2RheSgpLnllYXIoKTpoPDEwMCYmdiYmKGgrPS0xPT09bj8xOTAwOnRoaXMudG9kYXkoKS55ZWFyKCktdGhpcy50b2RheSgpLnllYXIoKSUxMDAtKGg8PW4/MDoxMDApKSwic3RyaW5nIj09dHlwZW9mIHAmJihwPXMuY2FsbCh0aGlzLGgscCkpLGc+LTEpe3A9MSxkPWc7Zm9yKHZhciBFPXRoaXMuZGF5c0luTW9udGgoaCxwKTtkPkU7RT10aGlzLmRheXNJbk1vbnRoKGgscCkpcCsrLGQtPUV9cmV0dXJuIGY+LTE/dGhpcy5mcm9tSkQoZik6dGhpcy5uZXdEYXRlKGgscCxkKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3ImJiJvYmplY3QiIT10eXBlb2YgciYmKGk9bixuPXIscj1udWxsKSwic3RyaW5nIiE9dHlwZW9mIG4mJihpPW4sbj0iIik7dmFyIGE9dGhpcztyZXR1cm4gZT1lP2UubmV3RGF0ZSgpOm51bGwsdD1udWxsPT10P2U6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYS5wYXJzZURhdGUobix0LGkpfWNhdGNoKHQpe31mb3IodmFyIGU9KCh0PXQudG9Mb3dlckNhc2UoKSkubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGEudG9kYXkoKSxvPS8oWystXT9bMC05XSspXHMqKGR8d3xtfHkpPy9nLHM9by5leGVjKHQpO3M7KWUuYWRkKHBhcnNlSW50KHNbMV0sMTApLHNbMl18fCJkIikscz1vLmV4ZWModCk7cmV0dXJuIGV9KHQpOiJudW1iZXIiPT10eXBlb2YgdD9pc05hTih0KXx8dD09PTEvMHx8dD09PS0xLzA/ZTphLnRvZGF5KCkuYWRkKHQsImQiKTphLm5ld0RhdGUodCl9fSl9LHsiLi9tYWluIjo1NTUsIm9iamVjdC1hc3NpZ24iOjQ0Nn1dLDU1NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJjd2lzZS1jb21waWxlciIpKHthcmdzOlsiYXJyYXkiLHtvZmZzZXQ6WzFdLGFycmF5OjB9LCJzY2FsYXIiLCJzY2FsYXIiLCJpbmRleCJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntcbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYSA9IF9pbmxpbmVfMV9hcmcwXyAtIF9pbmxpbmVfMV9hcmczX1xuICAgICAgICB2YXIgX2lubGluZV8xX2RiID0gX2lubGluZV8xX2FyZzFfIC0gX2lubGluZV8xX2FyZzNfXG4gICAgICAgIGlmKChfaW5saW5lXzFfZGEgPj0gMCkgIT09IChfaW5saW5lXzFfZGIgPj0gMCkpIHtcbiAgICAgICAgICBfaW5saW5lXzFfYXJnMl8ucHVzaChfaW5saW5lXzFfYXJnNF9bMF0gKyAwLjUgKyAwLjUgKiAoX2lubGluZV8xX2RhICsgX2lubGluZV8xX2RiKSAvIChfaW5saW5lXzFfZGEgLSBfaW5saW5lXzFfZGIpKVxuICAgICAgICB9XG4gICAgICB9IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOiJfaW5saW5lXzFfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9kYSIsIl9pbmxpbmVfMV9kYiJdfSxmdW5jTmFtZToiemVyb0Nyb3NzaW5ncyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTM2fV0sNTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBlPStlfHwwLG4odC5oaSh0LnNoYXBlWzBdLTEpLHIsZSkscn07dmFyIG49dCgiLi9saWIvemMtY29yZSIpfSx7Ii4vbGliL3pjLWNvcmUiOjU1N31dLDU1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9W3twYXRoOiIiLGJhY2tvZmY6MH0se3BhdGg6Ik0tMi40LC0zVjNMMC42LDBaIixiYWNrb2ZmOi42fSx7cGF0aDoiTS0zLjcsLTIuNVYyLjVMMS4zLDBaIixiYWNrb2ZmOjEuM30se3BhdGg6Ik0tNC40NSwtM0wtMS42NSwtMC4yVjAuMkwtNC40NSwzTDEuNTUsMFoiLGJhY2tvZmY6MS41NX0se3BhdGg6Ik0tMi4yLC0yLjJMLTAuMiwtMC4yVjAuMkwtMi4yLDIuMkwtMS40LDNMMS42LDBMLTEuNCwtM1oiLGJhY2tvZmY6MS42fSx7cGF0aDoiTS00LjQsLTIuMUwtMC42LC0wLjJWMC4yTC00LjQsMi4xTC00LDNMMiwwTC00LC0zWiIsYmFja29mZjoyfSx7cGF0aDoiTTIsMEEyLDIgMCAxLDEgMCwtMkEyLDIgMCAwLDEgMiwwWiIsYmFja29mZjowLG5vUm90YXRlOiEwfSx7cGF0aDoiTTIsMlYtMkgtMlYyWiIsYmFja29mZjowLG5vUm90YXRlOiEwfV19LHt9XSw1NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJvd19wYXRocyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPW8oImFubm90YXRpb24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sdGV4dGFuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGZvbnQ6aSh7ZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3Iixjb2xvckVkaXRUeXBlOiJhcnJheWRyYXcifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJjZW50ZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVycGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc2hvd2Fycm93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGFycm93Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3doZWFkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzdGFydGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3dzaWRlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJlbmQiLCJzdGFydCJdLGV4dHJhczpbIm5vbmUiXSxkZmx0OiJlbmQiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhcnJvd3NpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFydGFycm93c2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGFycm93d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFydHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoicGl4ZWwiLHZhbHVlczpbInBpeGVsIixhLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LGF5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJwaXhlbCIsdmFsdWVzOlsicGl4ZWwiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seHNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsYS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx5Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5c2hpZnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGNsaWNrdG9zaG93Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJvbm9mZiIsIm9ub3V0Il0sZGZsdDohMSxlZGl0VHlwZToiYXJyYXlkcmF3In0seGNsaWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5Y2xpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiYXJyYXlkcmF3In0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxmb250Omkoe2VkaXRUeXBlOiJhcnJheWRyYXcifSksZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGNhcHR1cmVldmVudHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e3JlZjp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9fX0pfSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzU0LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NCwiLi9hcnJvd19wYXRocyI6NTU5fV0sNTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vZHJhdyIpLmRyYXc7ZnVuY3Rpb24gbyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O24uZmlsdGVyVmlzaWJsZShlLmFubm90YXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWkuZ2V0RnJvbUlkKHQsZS54cmVmKSxuPWkuZ2V0RnJvbUlkKHQsZS55cmVmKTtlLl9leHRyZW1lcz17fSxyJiZzKGUsciksbiYmcyhlLG4pfSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG49ZS5faWQsYT1uLmNoYXJBdCgwKSxvPXRbYV0scz10WyJhIithXSxsPXRbYSsicmVmIl0sYz10WyJhIithKyJyZWYiXSx1PXRbIl8iK2ErInBhZHBsdXMiXSxmPXRbIl8iK2ErInBhZG1pbnVzIl0saD17eDoxLHk6LTF9W2FdKnRbYSsic2hpZnQiXSxwPTMqdC5hcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLGQ9cCtoLGc9cC1oLHY9Myp0LnN0YXJ0YXJyb3dzaXplKnQuYXJyb3d3aWR0aHx8MCxtPXYraCx5PXYtaDtpZihjPT09bCl7dmFyIHg9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpkLHBwYWRtaW51czpnfSksYj1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhzKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsbSkscHBhZG1pbnVzOk1hdGgubWF4KGYseSl9KTtyPXttaW46W3gubWluWzBdLGIubWluWzBdXSxtYXg6W3gubWF4WzBdLGIubWF4WzBdXX19ZWxzZSBtPXM/bStzOm0seT1zP3ktczp5LHI9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpNYXRoLm1heCh1LGQsbSkscHBhZG1pbnVzOk1hdGgubWF4KGYsZyx5KX0pO3QuX2V4dHJlbWVzW25dPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYobi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKXJldHVybiBuLnN5bmNPckFzeW5jKFthLG9dLHQpfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi9kcmF3Ijo1NjZ9XSw1NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yO2Z1bmN0aW9uIG8odCxlKXt2YXIgcixuLGksYSxvLGwsYyx1PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsZj1bXSxoPVtdLHA9W10sZD0oZXx8W10pLmxlbmd0aDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWlmKGE9KGk9dVtyXSkuY2xpY2t0b3Nob3cpe2ZvcihuPTA7bjxkO24rKylpZihsPShvPWVbbl0pLnhheGlzLGM9by55YXhpcyxsLl9pZD09PWkueHJlZiYmYy5faWQ9PT1pLnlyZWYmJmwuZDJyKG8ueCk9PT1zKGkuX3hjbGljayxsKSYmYy5kMnIoby55KT09PXMoaS5feWNsaWNrLGMpKXsoaS52aXNpYmxlPyJvbm91dCI9PT1hP2g6cDpmKS5wdXNoKHIpO2JyZWFrfW49PT1kJiZpLnZpc2libGUmJiJvbm91dCI9PT1hJiZoLnB1c2gocil9cmV0dXJue29uOmYsb2ZmOmgsZXhwbGljaXRPZmY6cH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiJsb2ciPT09ZS50eXBlP2UubDJyKHQpOmUuZDJyKHQpfWUuZXhwb3J0cz17aGFzQ2xpY2tUb1Nob3c6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHQsZSk7cmV0dXJuIHIub24ubGVuZ3RoPjB8fHIuZXhwbGljaXRPZmYubGVuZ3RoPjB9LG9uQ2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcixzLGw9byh0LGUpLGM9bC5vbix1PWwub2ZmLmNvbmNhdChsLmV4cGxpY2l0T2ZmKSxmPXt9LGg9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucztpZighYy5sZW5ndGgmJiF1Lmxlbmd0aClyZXR1cm47Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKykocz1hKHQubGF5b3V0LCJhbm5vdGF0aW9ucyIsaFtjW3JdXSkpLm1vZGlmeUl0ZW0oInZpc2libGUiLCEwKSxuLmV4dGVuZEZsYXQoZixzLmdldFVwZGF0ZU9iaigpKTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKShzPWEodC5sYXlvdXQsImFubm90YXRpb25zIixoW3Vbcl1dKSkubW9kaWZ5SXRlbSgidmlzaWJsZSIsITEpLG4uZXh0ZW5kRmxhdChmLHMuZ2V0VXBkYXRlT2JqKCkpO3JldHVybiBpLmNhbGwoInVwZGF0ZSIsdCx7fSxmKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4uLy4uL3JlZ2lzdHJ5Ijo4Mjl9XSw1NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXthKCJvcGFjaXR5Iik7dmFyIG89YSgiYmdjb2xvciIpLHM9YSgiYm9yZGVyY29sb3IiKSxsPWkub3BhY2l0eShzKTthKCJib3JkZXJwYWQiKTt2YXIgYz1hKCJib3JkZXJ3aWR0aCIpLHU9YSgic2hvd2Fycm93Iik7aWYoYSgidGV4dCIsdT8iICI6ci5fZGZsdFRpdGxlLmFubm90YXRpb24pLGEoInRleHRhbmdsZSIpLG4uY29lcmNlRm9udChhLCJmb250IixyLmZvbnQpLGEoIndpZHRoIiksYSgiYWxpZ24iKSxhKCJoZWlnaHQiKSYmYSgidmFsaWduIiksdSl7dmFyIGYsaCxwPWEoImFycm93c2lkZSIpOy0xIT09cC5pbmRleE9mKCJlbmQiKSYmKGY9YSgiYXJyb3doZWFkIiksaD1hKCJhcnJvd3NpemUiKSksLTEhPT1wLmluZGV4T2YoInN0YXJ0IikmJihhKCJzdGFydGFycm93aGVhZCIsZiksYSgic3RhcnRhcnJvd3NpemUiLGgpKSxhKCJhcnJvd2NvbG9yIixsP2UuYm9yZGVyY29sb3I6aS5kZWZhdWx0TGluZSksYSgiYXJyb3d3aWR0aCIsMioobCYmY3x8MSkpLGEoInN0YW5kb2ZmIiksYSgic3RhcnRzdGFuZG9mZiIpfXZhciBkPWEoImhvdmVydGV4dCIpLGc9ci5ob3ZlcmxhYmVsfHx7fTtpZihkKXt2YXIgdj1hKCJob3ZlcmxhYmVsLmJnY29sb3IiLGcuYmdjb2xvcnx8KGkub3BhY2l0eShvKT9pLnJnYihvKTppLmRlZmF1bHRMaW5lKSksbT1hKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixnLmJvcmRlcmNvbG9yfHxpLmNvbnRyYXN0KHYpKTtuLmNvZXJjZUZvbnQoYSwiaG92ZXJsYWJlbC5mb250Iix7ZmFtaWx5OmcuZm9udC5mYW1pbHksc2l6ZTpnLmZvbnQuc2l6ZSxjb2xvcjpnLmZvbnQuY29sb3J8fG19KX1hKCJjYXB0dXJlZXZlbnRzIiwhIWQpfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vY29sb3IiOjU3N31dLDU2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT1lLnR5cGUscz0ibGluZWFyIj09PXImJiJsb2ciPT09ZS50eXBlO2lmKG98fHMpZm9yKHZhciBsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGY9ZS5faWQuY2hhckF0KDApLGg9MDtoPHUubGVuZ3RoO2grKylsPXVbaF0sYz0iYW5ub3RhdGlvbnNbIitoKyJdLiIsbFtmKyJyZWYiXT09PWUuX2lkJiZwKGYpLGxbImEiK2YrInJlZiJdPT09ZS5faWQmJnAoImEiK2YpO2Z1bmN0aW9uIHAodCl7dmFyIHI9bFt0XSxzPW51bGw7cz1vP2kocixlLnJhbmdlKTpNYXRoLnBvdygxMCxyKSxuKHMpfHwocz1udWxsKSxhKGMrdCxzKX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjcyNiwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDU2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vY29tbW9uX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9dmFyIGw9YSgidmlzaWJsZSIpLGM9YSgiY2xpY2t0b3Nob3ciKTtpZihsfHxjKXtvKHQsZSxyLGEpO2Zvcih2YXIgdT1lLnNob3dhcnJvdyxmPVsieCIsInkiXSxoPVstMTAsLTMwXSxwPXtfZnVsbExheW91dDpyfSxkPTA7ZDwyO2QrKyl7dmFyIGc9ZltkXSx2PWkuY29lcmNlUmVmKHQsZSxwLGcsIiIsInBhcGVyIik7aWYoInBhcGVyIiE9PXYpaS5nZXRGcm9tSWQocCx2KS5fYW5uSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpZihpLmNvZXJjZVBvc2l0aW9uKGUscCxhLHYsZywuNSksdSl7dmFyIG09ImEiK2cseT1pLmNvZXJjZVJlZih0LGUscCxtLCJwaXhlbCIpOyJwaXhlbCIhPT15JiZ5IT09diYmKHk9ZVttXT0icGl4ZWwiKTt2YXIgeD0icGl4ZWwiPT09eT9oW2RdOi40O2kuY29lcmNlUG9zaXRpb24oZSxwLGEseSxtLHgpfWEoZysiYW5jaG9yIiksYShnKyJzaGlmdCIpfWlmKG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLHUmJm4ubm9uZU9yQWxsKHQsZSxbImF4IiwiYXkiXSksYyl7dmFyIGI9YSgieGNsaWNrIiksXz1hKCJ5Y2xpY2siKTtlLl94Y2xpY2s9dm9pZCAwPT09Yj9lLng6aS5jbGVhblBvc2l0aW9uKGIscCxlLnhyZWYpLGUuX3ljbGljaz12b2lkIDA9PT1fP2UueTppLmNsZWFuUG9zaXRpb24oXyxwLGUueXJlZil9fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc0NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi9hdHRyaWJ1dGVzIjo1NjAsIi4vY29tbW9uX2RlZmF1bHRzIjo1NjN9XSw1NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vY29sb3IiKSxjPXQoIi4uL2RyYXdpbmciKSx1PXQoIi4uL2Z4IiksZj10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxwPXQoIi4uL2RyYWdlbGVtZW50IiksZD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsZz10KCIuL2RyYXdfYXJyb3dfaGVhZCIpO2Z1bmN0aW9uIHYodCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW2VdfHx7fSxuPXMuZ2V0RnJvbUlkKHQsci54cmVmKSxpPXMuZ2V0RnJvbUlkKHQsci55cmVmKTtuJiZuLnNldFNjYWxlKCksaSYmaS5zZXRTY2FsZSgpLG0odCxyLGUsITEsbixpKX1mdW5jdGlvbiBtKHQsZSxyLGEscyx2KXt2YXIgbSx5LHg9dC5fZnVsbExheW91dCxiPXQuX2Z1bGxMYXlvdXQuX3NpemUsXz10Ll9jb250ZXh0LmVkaXRzO2E/KG09ImFubm90YXRpb24tIithLHk9YSsiLmFubm90YXRpb25zIik6KG09ImFubm90YXRpb24iLHk9ImFubm90YXRpb25zIik7dmFyIHc9ZCh0LmxheW91dCx5LGUpLGs9dy5tb2RpZnlCYXNlLFQ9dy5tb2RpZnlJdGVtLEE9dy5nZXRVcGRhdGVPYmo7eC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrbSsnW2RhdGEtaW5kZXg9IicrcisnIl0nKS5yZW1vdmUoKTt2YXIgTT0iY2xpcCIreC5fdWlkKyJfYW5uIityO2lmKGUuX2lucHV0JiYhMSE9PWUudmlzaWJsZSl7dmFyIFM9e3g6e30seTp7fX0sRT0rZS50ZXh0YW5nbGV8fDAsQz14Ll9pbmZvbGF5ZXIuYXBwZW5kKCJnIikuY2xhc3NlZChtLCEwKS5hdHRyKCJkYXRhLWluZGV4IixTdHJpbmcocikpLnN0eWxlKCJvcGFjaXR5IixlLm9wYWNpdHkpLEw9Qy5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQtZyIsITApLHo9X1tlLnNob3dhcnJvdz8iYW5ub3RhdGlvblRhaWwiOiJhbm5vdGF0aW9uUG9zaXRpb24iXSxPPWUuY2FwdHVyZWV2ZW50c3x8Xy5hbm5vdGF0aW9uVGV4dHx8eixJPUwuYXBwZW5kKCJnIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixPPyJhbGwiOm51bGwpLmNhbGwoaCwicG9pbnRlciIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXt0Ll9kcmFnZ2luZz0hMTt2YXIgaT17aW5kZXg6cixhbm5vdGF0aW9uOmUuX2lucHV0LGZ1bGxBbm5vdGF0aW9uOmUsZXZlbnQ6bi5ldmVudH07YSYmKGkuc3VicGxvdElkPWEpLHQuZW1pdCgicGxvdGx5X2NsaWNrYW5ub3RhdGlvbiIsaSl9KTtlLmhvdmVydGV4dCYmSS5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe3ZhciByPWUuaG92ZXJsYWJlbCxuPXIuZm9udCxpPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3UubG9uZUhvdmVyKHt4MDppLmxlZnQtYS5sZWZ0LHgxOmkucmlnaHQtYS5sZWZ0LHk6KGkudG9wK2kuYm90dG9tKS8yLWEudG9wLHRleHQ6ZS5ob3ZlcnRleHQsY29sb3I6ci5iZ2NvbG9yLGJvcmRlckNvbG9yOnIuYm9yZGVyY29sb3IsZm9udEZhbWlseTpuLmZhbWlseSxmb250U2l6ZTpuLnNpemUsZm9udENvbG9yOm4uY29sb3J9LHtjb250YWluZXI6eC5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6eC5fcGFwZXIubm9kZSgpLGdkOnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt1LmxvbmVVbmhvdmVyKHguX2hvdmVybGF5ZXIubm9kZSgpKX0pO3ZhciBEPWUuYm9yZGVyd2lkdGgsUD1lLmJvcmRlcnBhZCxSPUQrUCxGPUkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiZyIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLEQrInB4IikuY2FsbChsLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKGwuZmlsbCxlLmJnY29sb3IpLEI9ZS53aWR0aHx8ZS5oZWlnaHQsTj14Ll90b3BjbGlwcy5zZWxlY3RBbGwoIiMiK00pLmRhdGEoQj9bMF06W10pO04uZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiYW5uY2xpcCIsITApLmF0dHIoImlkIixNKS5hcHBlbmQoInJlY3QiKSxOLmV4aXQoKS5yZW1vdmUoKTt2YXIgaj1lLmZvbnQsVj14Lm1ldGE/by50ZW1wbGF0ZVN0cmluZyhlLnRleHQse21ldGE6eC5tZXRhfSk6ZS50ZXh0LFU9SS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQiLCEwKS50ZXh0KFYpO18uYW5ub3RhdGlvblRleHQ/VS5jYWxsKGYubWFrZUVkaXRhYmxlLHtkZWxlZ2F0ZTpJLGdkOnR9KS5jYWxsKHEpLm9uKCJlZGl0IixmdW5jdGlvbihyKXtlLnRleHQ9cix0aGlzLmNhbGwocSksVCgidGV4dCIscikscyYmcy5hdXRvcmFuZ2UmJmsocy5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHYmJnYuYXV0b3JhbmdlJiZrKHYuX25hbWUrIi5hdXRvcmFuZ2UiLCEwKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxBKCkpfSk6VS5jYWxsKHEpfWVsc2Ugbi5zZWxlY3RBbGwoIiMiK00pLnJlbW92ZSgpO2Z1bmN0aW9uIHEocil7cmV0dXJuIHIuY2FsbChjLmZvbnQsaikuYXR0cih7InRleHQtYW5jaG9yIjp7bGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifVtlLmFsaWduXXx8Im1pZGRsZSJ9KSxmLmNvbnZlcnRUb1RzcGFucyhyLHQsSCkscn1mdW5jdGlvbiBIKCl7dmFyIHI9VS5zZWxlY3RBbGwoImEiKTsxPT09ci5zaXplKCkmJnIudGV4dCgpPT09VS50ZXh0KCkmJkkuaW5zZXJ0KCJhIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7InhsaW5rOnhsaW5rOmhyZWYiOnIuYXR0cigieGxpbms6aHJlZiIpLCJ4bGluazp4bGluazpzaG93IjpyLmF0dHIoInhsaW5rOnNob3ciKX0pLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIifSkubm9kZSgpLmFwcGVuZENoaWxkKEYubm9kZSgpKTt2YXIgbj1JLnNlbGVjdCgiLmFubm90YXRpb24tdGV4dC1tYXRoLWdyb3VwIiksdT0hbi5lbXB0eSgpLGQ9Yy5iQm94KCh1P246VSkubm9kZSgpKSxtPWQud2lkdGgseT1kLmhlaWdodCx3PWUud2lkdGh8fG0sTz1lLmhlaWdodHx8eSxQPU1hdGgucm91bmQodysyKlIpLGo9TWF0aC5yb3VuZChPKzIqUik7ZnVuY3Rpb24gVih0LGUpe3JldHVybiJhdXRvIj09PWUmJihlPXQ8MS8zPyJsZWZ0Ijp0PjIvMz8icmlnaHQiOiJjZW50ZXIiKSx7Y2VudGVyOjAsbWlkZGxlOjAsbGVmdDouNSxib3R0b206LS41LHJpZ2h0Oi0uNSx0b3A6LjV9W2VdfWZvcih2YXIgcT0hMSxIPVsieCIsInkiXSxHPTA7RzxILmxlbmd0aDtHKyspe3ZhciBZLFcsWCxaLCQsSj1IW0ddLEs9ZVtKKyJyZWYiXXx8SixRPWVbImEiK0orInJlZiJdLHR0PXt4OnMseTp2fVtKXSxldD0oRSsoIngiPT09Sj8wOi05MCkpKk1hdGguUEkvMTgwLHJ0PVAqTWF0aC5jb3MoZXQpLG50PWoqTWF0aC5zaW4oZXQpLGl0PU1hdGguYWJzKHJ0KStNYXRoLmFicyhudCksYXQ9ZVtKKyJhbmNob3IiXSxvdD1lW0orInNoaWZ0Il0qKCJ4Ij09PUo/MTotMSksc3Q9U1tKXTtpZih0dCl7dmFyIGx0PXR0LnIyZnJhY3Rpb24oZVtKXSk7KGx0PDB8fGx0PjEpJiYoUT09PUs/KChsdD10dC5yMmZyYWN0aW9uKGVbImEiK0pdKSk8MHx8bHQ+MSkmJihxPSEwKTpxPSEwKSxZPXR0Ll9vZmZzZXQrdHQucjJwKGVbSl0pLFo9LjV9ZWxzZSJ4Ij09PUo/KFg9ZVtKXSxZPWIubCtiLncqWCk6KFg9MS1lW0pdLFk9Yi50K2IuaCpYKSxaPWUuc2hvd2Fycm93Py41Olg7aWYoZS5zaG93YXJyb3cpe3N0LmhlYWQ9WTt2YXIgY3Q9ZVsiYSIrSl07JD1ydCpWKC41LGUueGFuY2hvciktbnQqViguNSxlLnlhbmNob3IpLFE9PT1LPyhzdC50YWlsPXR0Ll9vZmZzZXQrdHQucjJwKGN0KSxXPSQpOihzdC50YWlsPVkrY3QsVz0kK2N0KSxzdC50ZXh0PXN0LnRhaWwrJDt2YXIgdXQ9eFsieCI9PT1KPyJ3aWR0aCI6ImhlaWdodCJdO2lmKCJwYXBlciI9PT1LJiYoc3QuaGVhZD1vLmNvbnN0cmFpbihzdC5oZWFkLDEsdXQtMSkpLCJwaXhlbCI9PT1RKXt2YXIgZnQ9LU1hdGgubWF4KHN0LnRhaWwtMyxzdC50ZXh0KSxodD1NYXRoLm1pbihzdC50YWlsKzMsc3QudGV4dCktdXQ7ZnQ+MD8oc3QudGFpbCs9ZnQsc3QudGV4dCs9ZnQpOmh0PjAmJihzdC50YWlsLT1odCxzdC50ZXh0LT1odCl9c3QudGFpbCs9b3Qsc3QuaGVhZCs9b3R9ZWxzZSBXPSQ9aXQqVihaLGF0KSxzdC50ZXh0PVkrJDtzdC50ZXh0Kz1vdCwkKz1vdCxXKz1vdCxlWyJfIitKKyJwYWRwbHVzIl09aXQvMitXLGVbIl8iK0orInBhZG1pbnVzIl09aXQvMi1XLGVbIl8iK0orInNpemUiXT1pdCxlWyJfIitKKyJzaGlmdCJdPSR9aWYodC5fZHJhZ2dpbmd8fCFxKXt2YXIgcHQ9MCxkdD0wO2lmKCJsZWZ0IiE9PWUuYWxpZ24mJihwdD0ody1tKSooImNlbnRlciI9PT1lLmFsaWduPy41OjEpKSwidG9wIiE9PWUudmFsaWduJiYoZHQ9KE8teSkqKCJtaWRkbGUiPT09ZS52YWxpZ24/LjU6MSkpLHUpbi5zZWxlY3QoInN2ZyIpLmF0dHIoe3g6UitwdC0xLHk6UitkdH0pLmNhbGwoYy5zZXRDbGlwVXJsLEI/TTpudWxsLHQpO2Vsc2V7dmFyIGd0PVIrZHQtZC50b3AsdnQ9UitwdC1kLmxlZnQ7VS5jYWxsKGYucG9zaXRpb25UZXh0LHZ0LGd0KS5jYWxsKGMuc2V0Q2xpcFVybCxCP006bnVsbCx0KX1OLnNlbGVjdCgicmVjdCIpLmNhbGwoYy5zZXRSZWN0LFIsUix3LE8pLEYuY2FsbChjLnNldFJlY3QsRC8yLEQvMixQLUQsai1EKSxJLmNhbGwoYy5zZXRUcmFuc2xhdGUsTWF0aC5yb3VuZChTLngudGV4dC1QLzIpLE1hdGgucm91bmQoUy55LnRleHQtai8yKSksTC5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK0UrIiwiK1MueC50ZXh0KyIsIitTLnkudGV4dCsiKSJ9KTt2YXIgbXQseXQ9ZnVuY3Rpb24ocixuKXtDLnNlbGVjdEFsbCgiLmFubm90YXRpb24tYXJyb3ctZyIpLnJlbW92ZSgpO3ZhciB1PVMueC5oZWFkLGY9Uy55LmhlYWQsaD1TLngudGFpbCtyLGQ9Uy55LnRhaWwrbixtPVMueC50ZXh0K3IseT1TLnkudGV4dCtuLHg9by5yb3RhdGlvblhZTWF0cml4KEUsbSx5KSx3PW8uYXBwbHkyRFRyYW5zZm9ybSh4KSxNPW8uYXBwbHkyRFRyYW5zZm9ybTIoeCksej0rRi5hdHRyKCJ3aWR0aCIpLE89K0YuYXR0cigiaGVpZ2h0IiksRD1tLS41KnosUD1EK3osUj15LS41Kk8sQj1SK08sTj1bW0QsUixELEJdLFtELEIsUCxCXSxbUCxCLFAsUl0sW1AsUixELFJdXS5tYXAoTSk7aWYoIU4ucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReISFvLnNlZ21lbnRzSW50ZXJzZWN0KHUsZix1KzFlNixmKzFlNixlWzBdLGVbMV0sZVsyXSxlWzNdKX0sITEpKXtOLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9by5zZWdtZW50c0ludGVyc2VjdChoLGQsdSxmLHRbMF0sdFsxXSx0WzJdLHRbM10pO2UmJihoPWUueCxkPWUueSl9KTt2YXIgaj1lLmFycm93d2lkdGgsVj1lLmFycm93Y29sb3IsVT1lLmFycm93c2lkZSxxPUMuYXBwZW5kKCJnIikuc3R5bGUoe29wYWNpdHk6bC5vcGFjaXR5KFYpfSkuY2xhc3NlZCgiYW5ub3RhdGlvbi1hcnJvdy1nIiwhMCksSD1xLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIitoKyIsIitkKyJMIit1KyIsIitmKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixqKyJweCIpLmNhbGwobC5zdHJva2UsbC5yZ2IoVikpO2lmKGcoSCxVLGUpLF8uYW5ub3RhdGlvblBvc2l0aW9uJiZILm5vZGUoKS5wYXJlbnROb2RlJiYhYSl7dmFyIEc9dSxZPWY7aWYoZS5zdGFuZG9mZil7dmFyIFc9TWF0aC5zcXJ0KE1hdGgucG93KHUtaCwyKStNYXRoLnBvdyhmLWQsMikpO0crPWUuc3RhbmRvZmYqKGgtdSkvVyxZKz1lLnN0YW5kb2ZmKihkLWYpL1d9dmFyIFgsWiwkPXEuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1hcnJvdyIsITApLmNsYXNzZWQoImFubmRyYWciLCEwKS5jbGFzc2VkKCJjdXJzb3ItbW92ZSIsITApLmF0dHIoe2Q6Ik0zLDNILTNWLTNIM1pNMCwwTCIrKGgtRykrIiwiKyhkLVkpLHRyYW5zZm9ybToidHJhbnNsYXRlKCIrRysiLCIrWSsiKSJ9KS5zdHlsZSgic3Ryb2tlLXdpZHRoIixqKzYrInB4IikuY2FsbChsLnN0cm9rZSwicmdiYSgwLDAsMCwwKSIpLmNhbGwobC5maWxsLCJyZ2JhKDAsMCwwLDApIik7cC5pbml0KHtlbGVtZW50OiQubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoSSk7WD10LngsWj10LnkscyYmcy5hdXRvcmFuZ2UmJmsocy5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHYmJnYuYXV0b3JhbmdlJiZrKHYuX25hbWUrIi5hdXRvcmFuZ2UiLCEwKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49dyhYLFopLGk9blswXSt0LGE9blsxXStyO0kuY2FsbChjLnNldFRyYW5zbGF0ZSxpLGEpLFQoIngiLHM/cy5wMnIocy5yMnAoZS54KSt0KTplLngrdC9iLncpLFQoInkiLHY/di5wMnIodi5yMnAoZS55KStyKTplLnktci9iLmgpLGUuYXhyZWY9PT1lLnhyZWYmJlQoImF4IixzLnAycihzLnIycChlLmF4KSt0KSksZS5heXJlZj09PWUueXJlZiYmVCgiYXkiLHYucDJyKHYucjJwKGUuYXkpK3IpKSxxLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QrIiwiK3IrIikiKSxMLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrRSsiLCIraSsiLCIrYSsiKSJ9KX0sZG9uZUZuOmZ1bmN0aW9uKCl7aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsQSgpKTt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9fX07aWYoZS5zaG93YXJyb3cmJnl0KDAsMCkseilwLmluaXQoe2VsZW1lbnQ6SS5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXttdD1MLmF0dHIoInRyYW5zZm9ybSIpfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj0icG9pbnRlciI7aWYoZS5zaG93YXJyb3cpZS5heHJlZj09PWUueHJlZj9UKCJheCIscy5wMnIocy5yMnAoZS5heCkrdCkpOlQoImF4IixlLmF4K3QpLGUuYXlyZWY9PT1lLnlyZWY/VCgiYXkiLHYucDJyKHYucjJwKGUuYXkpK3IpKTpUKCJheSIsZS5heStyKSx5dCh0LHIpO2Vsc2V7aWYoYSlyZXR1cm47dmFyIGksbztpZihzKWk9cy5wMnIocy5yMnAoZS54KSt0KTtlbHNle3ZhciBsPWUuX3hzaXplL2IudyxjPWUueCsoZS5feHNoaWZ0LWUueHNoaWZ0KS9iLnctbC8yO2k9cC5hbGlnbihjK3QvYi53LGwsMCwxLGUueGFuY2hvcil9aWYodilvPXYucDJyKHYucjJwKGUueSkrcik7ZWxzZXt2YXIgdT1lLl95c2l6ZS9iLmgsZj1lLnktKGUuX3lzaGlmdCtlLnlzaGlmdCkvYi5oLXUvMjtvPXAuYWxpZ24oZi1yL2IuaCx1LDAsMSxlLnlhbmNob3IpfVQoIngiLGkpLFQoInkiLG8pLHMmJnZ8fChuPXAuZ2V0Q3Vyc29yKHM/LjU6aSx2Py41Om8sZS54YW5jaG9yLGUueWFuY2hvcikpfUwuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIit0KyIsIityKyIpIittdH0pLGgoSSxuKX0sZG9uZUZuOmZ1bmN0aW9uKCl7aChJKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxBKCkpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTtlJiZlLnJlZHJhdyhlLnNlbGVjdGVkT2JqKX19KX1lbHNlIEkucmVtb3ZlKCl9fWUuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZS5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZ2KHQscik7cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sZHJhd09uZTp2LGRyYXdSYXc6bX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY29sb3IiOjU3NywiLi4vZHJhZ2VsZW1lbnQiOjU5NSwiLi4vZHJhd2luZyI6NTk4LCIuLi9meCI6NjE2LCIuL2RyYXdfYXJyb3dfaGVhZCI6NTY3LGQzOjE1NH1dLDU2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4vYXJyb3dfcGF0aHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbCxjLHU9dC5ub2RlKCksZj1hW3IuYXJyb3doZWFkfHwwXSxoPWFbci5zdGFydGFycm93aGVhZHx8MF0scD0oci5hcnJvd3dpZHRofHwxKSooci5hcnJvd3NpemV8fDEpLGQ9KHIuYXJyb3d3aWR0aHx8MSkqKHIuc3RhcnRhcnJvd3NpemV8fDEpLGc9ZS5pbmRleE9mKCJzdGFydCIpPj0wLHY9ZS5pbmRleE9mKCJlbmQiKT49MCxtPWYuYmFja29mZipwK3Iuc3RhbmRvZmYseT1oLmJhY2tvZmYqZCtyLnN0YXJ0c3RhbmRvZmY7aWYoImxpbmUiPT09dS5ub2RlTmFtZSl7bz17eDordC5hdHRyKCJ4MSIpLHk6K3QuYXR0cigieTEiKX0scz17eDordC5hdHRyKCJ4MiIpLHk6K3QuYXR0cigieTIiKX07dmFyIHg9by54LXMueCxiPW8ueS1zLnk7aWYoYz0obD1NYXRoLmF0YW4yKGIseCkpK01hdGguUEksbSYmeSYmbSt5Pk1hdGguc3FydCh4KngrYipiKSlyZXR1cm4gdm9pZCB6KCk7aWYobSl7aWYobSptPngqeCtiKmIpcmV0dXJuIHZvaWQgeigpO3ZhciBfPW0qTWF0aC5jb3MobCksdz1tKk1hdGguc2luKGwpO3MueCs9XyxzLnkrPXcsdC5hdHRyKHt4MjpzLngseTI6cy55fSl9aWYoeSl7aWYoeSp5PngqeCtiKmIpcmV0dXJuIHZvaWQgeigpO3ZhciBrPXkqTWF0aC5jb3MobCksVD15Kk1hdGguc2luKGwpO28ueC09ayxvLnktPVQsdC5hdHRyKHt4MTpvLngseTE6by55fSl9fWVsc2UgaWYoInBhdGgiPT09dS5ub2RlTmFtZSl7dmFyIEE9dS5nZXRUb3RhbExlbmd0aCgpLE09IiI7aWYoQTxtK3kpcmV0dXJuIHZvaWQgeigpO3ZhciBTPXUuZ2V0UG9pbnRBdExlbmd0aCgwKSxFPXUuZ2V0UG9pbnRBdExlbmd0aCguMSk7bD1NYXRoLmF0YW4yKFMueS1FLnksUy54LUUueCksbz11LmdldFBvaW50QXRMZW5ndGgoTWF0aC5taW4oeSxBKSksTT0iMHB4LCIreSsicHgsIjt2YXIgQz11LmdldFBvaW50QXRMZW5ndGgoQSksTD11LmdldFBvaW50QXRMZW5ndGgoQS0uMSk7Yz1NYXRoLmF0YW4yKEMueS1MLnksQy54LUwueCkscz11LmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCxBLW0pKSxNKz1BLShNP3krbTptKSsicHgsIitBKyJweCIsdC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsTSl9ZnVuY3Rpb24geigpe3Quc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwcHgsMTAwcHgiKX1mdW5jdGlvbiBPKGUsYSxvLHMpe2UucGF0aCYmKGUubm9Sb3RhdGUmJihvPTApLG4uc2VsZWN0KHUucGFyZW50Tm9kZSkuYXBwZW5kKCJwYXRoIikuYXR0cih7Y2xhc3M6dC5hdHRyKCJjbGFzcyIpLGQ6ZS5wYXRoLHRyYW5zZm9ybToidHJhbnNsYXRlKCIrYS54KyIsIithLnkrIikiKyhvPyJyb3RhdGUoIisxODAqby9NYXRoLlBJKyIpIjoiIikrInNjYWxlKCIrcysiKSJ9KS5zdHlsZSh7ZmlsbDppLnJnYihyLmFycm93Y29sb3IpLCJzdHJva2Utd2lkdGgiOjB9KSl9ZyYmTyhoLG8sbCxkKSx2JiZPKGYscyxjLHApfX0seyIuLi9jb2xvciI6NTc3LCIuL2Fycm93X3BhdGhzIjo1NTksZDM6MTU0fV0sNTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpLGk9dCgiLi9jbGljayIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9ucyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgiYW5ub3RhdGlvbnMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZSxkcmF3UmF3Om4uZHJhd1JhdyxoYXNDbGlja1RvU2hvdzppLmhhc0NsaWNrVG9TaG93LG9uQ2xpY2s6aS5vbkNsaWNrLGNvbnZlcnRDb29yZHM6dCgiLi9jb252ZXJ0X2Nvb3JkcyIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjo3NTgsIi4vYXR0cmlidXRlcyI6NTYwLCIuL2NhbGNfYXV0b3JhbmdlIjo1NjEsIi4vY2xpY2siOjU2MiwiLi9jb252ZXJ0X2Nvb3JkcyI6NTY0LCIuL2RlZmF1bHRzIjo1NjUsIi4vZHJhdyI6NTY2fV0sNTY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aShhKCJhbm5vdGF0aW9uIix7dmlzaWJsZTpuLnZpc2libGUseDp7dmFsVHlwZToiYW55In0seTp7dmFsVHlwZToiYW55In0sejp7dmFsVHlwZToiYW55In0sYXg6e3ZhbFR5cGU6Im51bWJlciJ9LGF5Ont2YWxUeXBlOiJudW1iZXIifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsc3RhcnRhcnJvd2hlYWQ6bi5zdGFydGFycm93aGVhZCxhcnJvd3NpZGU6bi5hcnJvd3NpZGUsYXJyb3dzaXplOm4uYXJyb3dzaXplLHN0YXJ0YXJyb3dzaXplOm4uc3RhcnRhcnJvd3NpemUsYXJyb3d3aWR0aDpuLmFycm93d2lkdGgsc3RhbmRvZmY6bi5zdGFuZG9mZixzdGFydHN0YW5kb2ZmOm4uc3RhcnRzdGFuZG9mZixob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsY2FwdHVyZWV2ZW50czpuLmNhcHR1cmVldmVudHN9KSwiY2FsYyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1NjB9XSw1NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmZ1bGxTY2VuZUxheW91dC5kb21haW4sYT1lLmZ1bGxMYXlvdXQuX3NpemUsbz17cGRhdGE6bnVsbCx0eXBlOiJsaW5lYXIiLGF1dG9yYW5nZTohMSxyYW5nZTpbLTEvMCwxLzBdfTt0Ll94YT17fSxuLmV4dGVuZEZsYXQodC5feGEsbyksaS5zZXRDb252ZXJ0KHQuX3hhKSx0Ll94YS5fb2Zmc2V0PWEubCtyLnhbMF0qYS53LHQuX3hhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxK3QuX3BkYXRhWzBdL3QuX3BkYXRhWzNdKSphLncqKHIueFsxXS1yLnhbMF0pfSx0Ll95YT17fSxuLmV4dGVuZEZsYXQodC5feWEsbyksaS5zZXRDb252ZXJ0KHQuX3lhKSx0Ll95YS5fb2Zmc2V0PWEudCsoMS1yLnlbMV0pKmEuaCx0Ll95YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMS10Ll9wZGF0YVsxXS90Ll9wZGF0YVszXSkqYS5oKihyLnlbMV0tci55WzBdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspYShlW3JdLHQpO3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tIit0LmlkKS5yZW1vdmUoKX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDh9XSw1NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGwodCxlLHIsYSl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWZ1bmN0aW9uIGModCl7dmFyIG49dCsiYXhpcyIsYT17X2Z1bGxMYXlvdXQ6e319O3JldHVybiBhLl9mdWxsTGF5b3V0W25dPXJbbl0saS5jb2VyY2VQb3NpdGlvbihlLGEsbCx0LHQsLjUpfWwoInZpc2libGUiKSYmKG8odCxlLGEuZnVsbExheW91dCxsKSxjKCJ4IiksYygieSIpLGMoInoiKSxuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSIsInoiXSksZS54cmVmPSJ4IixlLnlyZWY9InkiLGUuenJlZj0ieiIsbCgieGFuY2hvciIpLGwoInlhbmNob3IiKSxsKCJ4c2hpZnQiKSxsKCJ5c2hpZnQiKSxlLnNob3dhcnJvdyYmKGUuYXhyZWY9InBpeGVsIixlLmF5cmVmPSJwaXhlbCIsbCgiYXgiLC0xMCksbCgiYXkiLC0zMCksbi5ub25lT3JBbGwodCxlLFsiYXgiLCJheSJdKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUse25hbWU6ImFubm90YXRpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6bCxmdWxsTGF5b3V0OnIuZnVsbExheW91dH0pfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0cyI6NTYzLCIuL2F0dHJpYnV0ZXMiOjU2OX1dLDU3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9kcmF3IikuZHJhd1JhdyxpPXQoIi4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCIpLGE9WyJ4IiwieSIsInoiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LHI9dC5kYXRhU2NhbGUsbz1lLmFubm90YXRpb25zLHM9MDtzPG8ubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPW9bc10sYz0hMSx1PTA7dTwzO3UrKyl7dmFyIGY9YVt1XSxoPWxbZl0scD1lW2YrImF4aXMiXS5yMmZyYWN0aW9uKGgpO2lmKHA8MHx8cD4xKXtjPSEwO2JyZWFrfX1jP3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdCgiLmFubm90YXRpb24tIit0LmlkKydbZGF0YS1pbmRleD0iJytzKyciXScpLnJlbW92ZSgpOihsLl9wZGF0YT1pKHQuZ2xwbG90LmNhbWVyYVBhcmFtcyxbZS54YXhpcy5yMmwobC54KSpyWzBdLGUueWF4aXMucjJsKGwueSkqclsxXSxlLnpheGlzLnIybChsLnopKnJbMl1dKSxuKHQuZ3JhcGhEaXYsbCxzLHQuaWQsbC5feGEsbC5feWEpKX19fSx7Ii4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCI6Nzk4LCIuLi9hbm5vdGF0aW9ucy9kcmF3Ijo1NjZ9XSw1NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9uczNkIixzY2hlbWE6e3N1YnBsb3RzOntzY2VuZTp7YW5ub3RhdGlvbnM6dCgiLi9hdHRyaWJ1dGVzIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5zdWJwbG90c1JlZ2lzdHJ5LmdsM2Q7aWYoIXIpcmV0dXJuO2Zvcih2YXIgYT1yLmF0dHJSZWdleCxvPU9iamVjdC5rZXlzKHQpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTthLnRlc3QobCkmJih0W2xdLmFubm90YXRpb25zfHxbXSkubGVuZ3RoJiYoaS5wdXNoVW5pcXVlKGUuX2Jhc2VQbG90TW9kdWxlcyxyKSxpLnB1c2hVbmlxdWUoZS5fc3VicGxvdHMuZ2wzZCxsKSl9fSxjb252ZXJ0OnQoIi4vY29udmVydCIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2F0dHJpYnV0ZXMiOjU2OSwiLi9jb252ZXJ0Ijo1NzAsIi4vZGVmYXVsdHMiOjU3MSwiLi9kcmF3Ijo1NzJ9XSw1NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3IiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIil9LHsid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiOjU0MSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpYyI6NTQyLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkIjo1NDMsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iOjU0NCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJldyI6NTQ1LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pYyI6NTQ2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIjo1NDcsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhbiI6NTQ4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaSI6NTQ5LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIjo1NTAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuIjo1NTEsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW4iOjU1Miwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiOjU1Mywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYSI6NTU0LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluIjo1NTUsIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiOjU1Nn1dLDU3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbGVuZGFycyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLkVQT0NISkQscz1hLk9ORURBWSxsPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMobi5jYWxlbmRhcnMpLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJncmVnb3JpYW4ifSxjPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXt9O3JldHVybiBhW3JdPWwsaS5jb2VyY2UodCxlLGEscixuKX0sdT0iIyMiLGY9e2Q6ezA6ImRkIiwiLSI6ImQifSxlOnswOiJkIiwiLSI6ImQifSxhOnswOiJEIiwiLSI6IkQifSxBOnswOiJERCIsIi0iOiJERCJ9LGo6ezA6Im9vIiwiLSI6Im8ifSxXOnswOiJ3dyIsIi0iOiJ3In0sbTp7MDoibW0iLCItIjoibSJ9LGI6ezA6Ik0iLCItIjoiTSJ9LEI6ezA6Ik1NIiwiLSI6Ik1NIn0seTp7MDoieXkiLCItIjoieXkifSxZOnswOiJ5eXl5IiwiLSI6Inl5eXkifSxVOnUsdzp1LGM6ezA6IkQgTSBkICVYIHl5eXkiLCItIjoiRCBNIGQgJVggeXl5eSJ9LHg6ezA6Im1tL2RkL3l5eXkiLCItIjoibW0vZGQveXl5eSJ9fTt2YXIgaD17fTtmdW5jdGlvbiBwKHQpe3ZhciBlPWhbdF07cmV0dXJuIGV8fChlPWhbdF09bi5pbnN0YW5jZSh0KSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGwse2Rlc2NyaXB0aW9uOnR9KX1mdW5jdGlvbiBnKHQpe3JldHVybiJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIHdpdGggYCIrdCsiYCBkYXRlIGRhdGEuIn12YXIgdj17eGNhbGVuZGFyOmQoZygieCIpKX0sbT1pLmV4dGVuZEZsYXQoe30sdix7eWNhbGVuZGFyOmQoZygieSIpKX0pLHk9aS5leHRlbmRGbGF0KHt9LG0se3pjYWxlbmRhcjpkKGcoInoiKSl9KSx4PWQoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgcmFuZ2VgIGFuZCBgdGljazBgIiwiaWYgdGhpcyBpcyBhIGRhdGUgYXhpcy4gVGhpcyBkb2VzIG5vdCBzZXQgdGhlIGNhbGVuZGFyIGZvciIsImludGVycHJldGluZyBkYXRhIG9uIHRoaXMgYXhpcywgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgdHJhY2UiLCJvciB2aWEgdGhlIGdsb2JhbCBgbGF5b3V0LmNhbGVuZGFyYCJdLmpvaW4oIiAiKSk7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNhbGVuZGFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6bSxiYXI6bSxib3g6bSxoZWF0bWFwOm0sY29udG91cjptLGhpc3RvZ3JhbTptLGhpc3RvZ3JhbTJkOm0saGlzdG9ncmFtMmRjb250b3VyOm0sc2NhdHRlcjNkOnksc3VyZmFjZTp5LG1lc2gzZDp5LHNjYXR0ZXJnbDptLG9obGM6dixjYW5kbGVzdGljazp2fSxsYXlvdXQ6e2NhbGVuZGFyOmQoWyJTZXRzIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGludGVycHJldGluZyBhbmQiLCJkaXNwbGF5aW5nIGRhdGVzIHRocm91Z2hvdXQgdGhlIHBsb3QuIl0uam9pbigiICIpKX0sc3VicGxvdHM6e3hheGlzOntjYWxlbmRhcjp4fSx5YXhpczp7Y2FsZW5kYXI6eH0sc2NlbmU6e3hheGlzOntjYWxlbmRhcjp4fSx5YXhpczp7Y2FsZW5kYXI6eH0semF4aXM6e2NhbGVuZGFyOnh9fSxwb2xhcjp7cmFkaWFsYXhpczp7Y2FsZW5kYXI6eH19fSx0cmFuc2Zvcm1zOntmaWx0ZXI6e3ZhbHVlY2FsZW5kYXI6ZChbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB2YWx1ZWAsIGlmIGl0IGlzIGEgZGF0ZS4iXS5qb2luKCIgIikpLHRhcmdldGNhbGVuZGFyOmQoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdGFyZ2V0YCwgaWYgaXQgaXMgYW4iLCJhcnJheSBvZiBkYXRlcy4gSWYgYHRhcmdldGAgaXMgYSBzdHJpbmcgKGVnICp4Kikgd2UgdXNlIHRoZSIsImNvcnJlc3BvbmRpbmcgdHJhY2UgYXR0cmlidXRlIChlZyBgeGNhbGVuZGFyYCkgaWYgaXQgZXhpc3RzLCIsImV2ZW4gaWYgYHRhcmdldGNhbGVuZGFyYCBpcyBwcm92aWRlZC4iXS5qb2luKCIgIikpfX19LGxheW91dEF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czpjLGhhbmRsZVRyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspYyh0LGUscltpXSsiY2FsZW5kYXIiLG4uY2FsZW5kYXIpfSxDQU5PTklDQUxfU1VOREFZOntjaGluZXNlOiIyMDAwLTAxLTAyIixjb3B0aWM6IjIwMDAtMDEtMDMiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMyIsZXRoaW9waWFuOiIyMDAwLTAxLTA1IixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDIiLGp1bGlhbjoiMjAwMC0wMS0wMyIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDUiLG5lcGFsaToiMjAwMC0wMS0wNSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDQiLHRoYWk6IjIwMDAtMDEtMDQiLHVtbWFscXVyYToiMTQwMC0wMS0wNiJ9LENBTk9OSUNBTF9USUNLOntjaGluZXNlOiIyMDAwLTAxLTAxIixjb3B0aWM6IjIwMDAtMDEtMDEiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMSIsZXRoaW9waWFuOiIyMDAwLTAxLTAxIixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDEiLGp1bGlhbjoiMjAwMC0wMS0wMSIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDEiLG5lcGFsaToiMjAwMC0wMS0wMSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDEiLHRoYWk6IjIwMDAtMDEtMDEiLHVtbWFscXVyYToiMTQwMC0wMS0wMSJ9LERGTFRSQU5HRTp7Y2hpbmVzZTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sY29wdGljOlsiMTcwMC0wMS0wMSIsIjE3MDEtMDEtMDEiXSxkaXNjd29ybGQ6WyIxODAwLTAxLTAxIiwiMTgwMS0wMS0wMSJdLGV0aGlvcGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0saGVicmV3OlsiNTcwMC0wMS0wMSIsIjU3MDEtMDEtMDEiXSxpc2xhbWljOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSxqdWxpYW46WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLG1heWFuOlsiNTIwMC0wMS0wMSIsIjUyMDEtMDEtMDEiXSxuYW5ha3NoYWhpOlsiMDUwMC0wMS0wMSIsIjA1MDEtMDEtMDEiXSxuZXBhbGk6WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLHBlcnNpYW46WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGphbGFsaTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0sdGFpd2FuOlsiMDEwMC0wMS0wMSIsIjAxMDEtMDEtMDEiXSx0aGFpOlsiMjUwMC0wMS0wMSIsIjI1MDEtMDEtMDEiXSx1bW1hbHF1cmE6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdfSxnZXRDYWw6cCx3b3JsZENhbEZtdDpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYSxsLGMsaD1NYXRoLmZsb29yKChlKy4wNSkvcykrbyxkPXAocikuZnJvbUpEKGgpLGc9MDstMSE9PShnPXQuaW5kZXhPZigiJSIsZykpOykiMCI9PT0obj10LmNoYXJBdChnKzEpKXx8Ii0iPT09bnx8Il8iPT09bj8oYT0zLGk9dC5jaGFyQXQoZysyKSwiXyI9PT1uJiYobj0iLSIpKTooaT1uLG49IjAiLGE9MiksKGw9ZltpXSk/KGM9bD09PXU/dTpkLmZvcm1hdERhdGUobFtuXSksdD10LnN1YnN0cigwLGcpK2MrdC5zdWJzdHIoZythKSxnKz1jLmxlbmd0aCk6Zys9YTtyZXR1cm4gdH19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4vY2FsZW5kYXJzIjo1NzR9XSw1NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWZhdWx0cz1bIiMxZjc3YjQiLCIjZmY3ZjBlIiwiIzJjYTAyYyIsIiNkNjI3MjgiLCIjOTQ2N2JkIiwiIzhjNTY0YiIsIiNlMzc3YzIiLCIjN2Y3ZjdmIiwiI2JjYmQyMiIsIiMxN2JlY2YiXSxyLmRlZmF1bHRMaW5lPSIjNDQ0IixyLmxpZ2h0TGluZT0iI2VlZSIsci5iYWNrZ3JvdW5kPSIjZmZmIixyLmJvcmRlckxpbmU9IiNCRUM4RDkiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPWUuZXhwb3J0cz17fSxvPXQoIi4vYXR0cmlidXRlcyIpO2EuZGVmYXVsdHM9by5kZWZhdWx0czt2YXIgcz1hLmRlZmF1bHRMaW5lPW8uZGVmYXVsdExpbmU7YS5saWdodExpbmU9by5saWdodExpbmU7dmFyIGw9YS5iYWNrZ3JvdW5kPW8uYmFja2dyb3VuZDtmdW5jdGlvbiBjKHQpe2lmKGkodCl8fCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10LnRyaW0oKTtpZigicmdiIiE9PWUuc3Vic3RyKDAsMykpcmV0dXJuIHQ7dmFyIHI9ZS5tYXRjaCgvXnJnYmE/XHMqXCgoW14oKV0qKVwpJC8pO2lmKCFyKXJldHVybiB0O3ZhciBuPXJbMV0udHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pLGE9ImEiPT09ZS5jaGFyQXQoMykmJjQ9PT1uLmxlbmd0aDtpZighYSYmMyE9PW4ubGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXtpZighbltvXS5sZW5ndGgpcmV0dXJuIHQ7aWYobltvXT1OdW1iZXIobltvXSksIShuW29dPj0wKSlyZXR1cm4gdDtpZigzPT09byluW29dPjEmJihuW29dPTEpO2Vsc2UgaWYobltvXT49MSlyZXR1cm4gdH12YXIgcz1NYXRoLnJvdW5kKDI1NSpuWzBdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMV0pKyIsICIrTWF0aC5yb3VuZCgyNTUqblsyXSk7cmV0dXJuIGE/InJnYmEoIitzKyIsICIrblszXSsiKSI6InJnYigiK3MrIikifWEudGlueVJHQj1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmdiKCk7cmV0dXJuInJnYigiK01hdGgucm91bmQoZS5yKSsiLCAiK01hdGgucm91bmQoZS5nKSsiLCAiK01hdGgucm91bmQoZS5iKSsiKSJ9LGEucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBhLnRpbnlSR0Iobih0KSl9LGEub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpLmdldEFscGhhKCk6MH0sYS5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChyLnIpKyIsICIrTWF0aC5yb3VuZChyLmcpKyIsICIrTWF0aC5yb3VuZChyLmIpKyIsICIrZSsiKSJ9LGEuY29tYmluZT1mdW5jdGlvbih0LGUpe3ZhciByPW4odCkudG9SZ2IoKTtpZigxPT09ci5hKXJldHVybiBuKHQpLnRvUmdiU3RyaW5nKCk7dmFyIGk9bihlfHxsKS50b1JnYigpLGE9MT09PWkuYT9pOntyOjI1NSooMS1pLmEpK2kucippLmEsZzoyNTUqKDEtaS5hKStpLmcqaS5hLGI6MjU1KigxLWkuYSkraS5iKmkuYX0sbz17cjphLnIqKDEtci5hKStyLnIqci5hLGc6YS5nKigxLXIuYSkrci5nKnIuYSxiOmEuYiooMS1yLmEpK3IuYipyLmF9O3JldHVybiBuKG8pLnRvUmdiU3RyaW5nKCl9LGEuY29udHJhc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4odCk7cmV0dXJuIDEhPT1pLmdldEFscGhhKCkmJihpPW4oYS5jb21iaW5lKHQsbCkpKSwoaS5pc0RhcmsoKT9lP2kubGlnaHRlbihlKTpsOnI/aS5kYXJrZW4ocik6cykudG9TdHJpbmcoKX0sYS5zdHJva2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpO3Quc3R5bGUoe3N0cm9rZTphLnRpbnlSR0IociksInN0cm9rZS1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sYS5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtmaWxsOmEudGlueVJHQihyKSwiZmlsbC1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sYS5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlLHIsbixpLG89T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKylpZihpPXRbbj1vW2VdXSwiY29sb3IiPT09bi5zdWJzdHIobi5sZW5ndGgtNSkpaWYoQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl09YyhpW3JdKTtlbHNlIHRbbl09YyhpKTtlbHNlIGlmKCJjb2xvcnNjYWxlIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTEwKSYmQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKUFycmF5LmlzQXJyYXkoaVtyXSkmJihpW3JdWzFdPWMoaVtyXVsxXSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIHM9aVswXTtpZighQXJyYXkuaXNBcnJheShzKSYmcyYmIm9iamVjdCI9PXR5cGVvZiBzKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspYS5jbGVhbihpW3JdKX1lbHNlIGkmJiJvYmplY3QiPT10eXBlb2YgaSYmYS5jbGVhbihpKX19fSx7Ii4vYXR0cmlidXRlcyI6NTc2LCJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sNTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHhwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIn0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyx0aWNrZm9udDppKHt9KSx0aWNrYW5nbGU6bi50aWNrYW5nbGUsdGlja2Zvcm1hdDpuLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOm4udGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6bi50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Om4uc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpuLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6bi5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpuLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0Om4uZXhwb25lbnRmb3JtYXQsc2hvd2V4cG9uZW50Om4uc2hvd2V4cG9uZW50LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmcifSxmb250Omkoe30pLHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJpZ2h0IiwidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIn19LF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIn0sdGl0bGVmb250Omkoe30pLHRpdGxlc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmlnaHQiLCJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AifX19LCJjb2xvcmJhcnMiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NjAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0fV0sNTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpLGk9dCgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZmxpcFNjYWxlO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIHIodCxlKTt2YXIgYT1lWzBdLnRyYWNlLG89ImNiIithLnVpZDtyPUFycmF5LmlzQXJyYXkocik/cjpbcl07Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsPXJbc10uY29udGFpbmVyLGM9bD9hW2xdOmE7aWYodC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrbykucmVtb3ZlKCksYyYmYy5zaG93c2NhbGUpe3ZhciB1PWVbMF0udC5jYj1uKHQsbyksZj1jLnJldmVyc2VzY2FsZT9pKGMuY29sb3JzY2FsZSk6Yy5jb2xvcnNjYWxlO3JldHVybiB2b2lkIHUuZmlsbGdyYWRpZW50KGYpLnpyYW5nZShbY1tyW3NdLm1pbl0sY1tyW3NdLm1heF1dKS5vcHRpb25zKGMuY29sb3JiYXIpKCl9fX19LHsiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjo1ODgsIi4vZHJhdyI6NTgyfV0sNTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y246e2NvbG9yYmFyOiJjb2xvcmJhciIsY2JiZzoiY2JiZyIsY2JmaWxsOiJjYmZpbGwiLGNiZmlsbHM6ImNiZmlsbHMiLGNibGluZToiY2JsaW5lIixjYmxpbmVzOiJjYmxpbmVzIixjYmF4aXM6ImNiYXhpcyIsY2J0aXRsZXVuc2hpZnQ6ImNidGl0bGV1bnNoaWZ0IixjYnRpdGxlOiJjYnRpdGxlIixjYm91dGxpbmU6ImNib3V0bGluZSIsY3Jpc3A6ImNyaXNwIixqc1BsYWNlaG9sZGVyOiJqcy1wbGFjZWhvbGRlciJ9fX0se31dLDU4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYz1pLm5ld0NvbnRhaW5lcihlLCJjb2xvcmJhciIpLHU9dC5jb2xvcmJhcnx8e307ZnVuY3Rpb24gZih0LGUpe3JldHVybiBuLmNvZXJjZSh1LGMsbCx0LGUpfXZhciBoPWYoInRoaWNrbmVzc21vZGUiKTtmKCJ0aGlja25lc3MiLCJmcmFjdGlvbiI9PT1oPzMwLyhyLndpZHRoLXIubWFyZ2luLmwtci5tYXJnaW4ucik6MzApO3ZhciBwPWYoImxlbm1vZGUiKTtmKCJsZW4iLCJmcmFjdGlvbiI9PT1wPzE6ci5oZWlnaHQtci5tYXJnaW4udC1yLm1hcmdpbi5iKSxmKCJ4IiksZigieGFuY2hvciIpLGYoInhwYWQiKSxmKCJ5IiksZigieWFuY2hvciIpLGYoInlwYWQiKSxuLm5vbmVPckFsbCh1LGMsWyJ4IiwieSJdKSxmKCJvdXRsaW5lY29sb3IiKSxmKCJvdXRsaW5ld2lkdGgiKSxmKCJib3JkZXJjb2xvciIpLGYoImJvcmRlcndpZHRoIiksZigiYmdjb2xvciIpLGEodSxjLGYsImxpbmVhciIpO3ZhciBkPXtvdXRlclRpY2tzOiExLGZvbnQ6ci5mb250fTtzKHUsYyxmLCJsaW5lYXIiLGQpLG8odSxjLGYsImxpbmVhciIsZCksZigidGl0bGUudGV4dCIsci5fZGZsdFRpdGxlLmNvbG9yYmFyKSxuLmNvZXJjZUZvbnQoZiwidGl0bGUuZm9udCIsci5mb250KSxmKCJ0aXRsZS5zaWRlIil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo3NjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjc2OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjc2OSwiLi9hdHRyaWJ1dGVzIjo1Nzh9XSw1ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uL2RyYWdlbGVtZW50IiksYz10KCIuLi8uLi9saWIiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGY9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGg9dCgiLi4vZHJhd2luZyIpLHA9dCgiLi4vY29sb3IiKSxkPXQoIi4uL3RpdGxlcyIpLGc9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IiksbT12LkxJTkVfU1BBQ0lORyx5PXYuRlJPTV9UTCx4PXYuRlJPTV9CUixiPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksXz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSx3PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGs9dCgiLi9hdHRyaWJ1dGVzIiksVD10KCIuL2NvbnN0YW50cyIpLmNuO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O2Zvcih2YXIgdiBpbiBrKXJbdl09bnVsbDtmdW5jdGlvbiBBKCl7dmFyIHY9dC5fZnVsbExheW91dCxrPXYuX3NpemU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIuZmlsbGNvbG9yfHwiZnVuY3Rpb24iPT10eXBlb2Ygci5saW5lLmNvbG9yfHxyLmZpbGxncmFkaWVudCl7dmFyIEUsQyxMPXIuenJhbmdlfHxuLmV4dGVudCgoImZ1bmN0aW9uIj09dHlwZW9mIHIuZmlsbGNvbG9yP3IuZmlsbGNvbG9yOnIubGluZS5jb2xvcikuZG9tYWluKCkpLHo9W10sTz1bXSxJPSJmdW5jdGlvbiI9PXR5cGVvZiByLmxpbmUuY29sb3I/ci5saW5lLmNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHIubGluZS5jb2xvcn0sRD0iZnVuY3Rpb24iPT10eXBlb2Ygci5maWxsY29sb3I/ci5maWxsY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gci5maWxsY29sb3J9LFA9ci5sZXZlbHMuZW5kK3IubGV2ZWxzLnNpemUvMTAwLFI9ci5sZXZlbHMuc2l6ZSxGPTEuMDAxKkxbMF0tLjAwMSpMWzFdLEI9MS4wMDEqTFsxXS0uMDAxKkxbMF07Zm9yKEM9MDtDPDFlNSYmKEU9ci5sZXZlbHMuc3RhcnQrQypSLCEoUj4wP0U+PVA6RTw9UCkpO0MrKylFPkYmJkU8QiYmei5wdXNoKEUpO2lmKHIuZmlsbGdyYWRpZW50KU89WzBdO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHIuZmlsbGNvbG9yKWlmKHIuZmlsbGxldmVscylmb3IoUD1yLmZpbGxsZXZlbHMuZW5kK3IuZmlsbGxldmVscy5zaXplLzEwMCxSPXIuZmlsbGxldmVscy5zaXplLEM9MDtDPDFlNSYmKEU9ci5maWxsbGV2ZWxzLnN0YXJ0K0MqUiwhKFI+MD9FPj1QOkU8PVApKTtDKyspRT5MWzBdJiZFPExbMV0mJk8ucHVzaChFKTtlbHNlKE89ei5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQtci5sZXZlbHMuc2l6ZS8yfSkpLnB1c2goT1tPLmxlbmd0aC0xXStyLmxldmVscy5zaXplKTtlbHNlIHIuZmlsbGNvbG9yJiYic3RyaW5nIj09dHlwZW9mIHIuZmlsbGNvbG9yJiYoTz1bMF0pO3IubGV2ZWxzLnNpemU8MCYmKHoucmV2ZXJzZSgpLE8ucmV2ZXJzZSgpKTt2YXIgTixqPWsuaCxWPWsudyxVPU1hdGgucm91bmQoci50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1yLnRoaWNrbmVzc21vZGU/VjoxKSkscT1VL2sudyxIPU1hdGgucm91bmQoci5sZW4qKCJmcmFjdGlvbiI9PT1yLmxlbm1vZGU/ajoxKSksRz1IL2suaCxZPXIueHBhZC9rLncsVz0oci5ib3JkZXJ3aWR0aCtyLm91dGxpbmV3aWR0aCkvMixYPXIueXBhZC9rLmgsWj1NYXRoLnJvdW5kKHIueCprLncrci54cGFkKSwkPXIueC1xKih7bWlkZGxlOi41LHJpZ2h0OjF9W3IueGFuY2hvcl18fDApLEo9ci55K0cqKCh7dG9wOi0uNSxib3R0b206LjV9W3IueWFuY2hvcl18fDApLS41KSxLPU1hdGgucm91bmQoay5oKigxLUopKSxRPUstSCx0dD17dHlwZToibGluZWFyIixyYW5nZTpMLHRpY2ttb2RlOnIudGlja21vZGUsbnRpY2tzOnIubnRpY2tzLHRpY2swOnIudGljazAsZHRpY2s6ci5kdGljayx0aWNrdmFsczpyLnRpY2t2YWxzLHRpY2t0ZXh0OnIudGlja3RleHQsdGlja3M6ci50aWNrcyx0aWNrbGVuOnIudGlja2xlbix0aWNrd2lkdGg6ci50aWNrd2lkdGgsdGlja2NvbG9yOnIudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOnIuc2hvd3RpY2tsYWJlbHMsdGlja2ZvbnQ6ci50aWNrZm9udCx0aWNrYW5nbGU6ci50aWNrYW5nbGUsdGlja2Zvcm1hdDpyLnRpY2tmb3JtYXQsZXhwb25lbnRmb3JtYXQ6ci5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczpyLnNlcGFyYXRldGhvdXNhbmRzLHNob3dleHBvbmVudDpyLnNob3dleHBvbmVudCxzaG93dGlja3ByZWZpeDpyLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6ci50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4OnIuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDpyLnRpY2tzdWZmaXgsdGl0bGU6ci50aXRsZSxzaG93bGluZTohMCxhbmNob3I6ImZyZWUiLHNpZGU6InJpZ2h0Iixwb3NpdGlvbjoxfSxldD17dHlwZToibGluZWFyIixfaWQ6InkiK2V9LHJ0PXtsZXR0ZXI6InkiLGZvbnQ6di5mb250LG5vSG92ZXI6ITAsbm9UaWNrc29uOiEwLGNhbGVuZGFyOnYuY2FsZW5kYXJ9O2lmKGIodHQsZXQseXQscnQsdiksXyh0dCxldCx5dCxydCksZXQucG9zaXRpb249ci54K1krcSxBLmF4aXM9ZXQsLTEhPT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2Yoci50aXRsZS5zaWRlKSYmKGV0LnRpdGxlLnNpZGU9ci50aXRsZS5zaWRlLGV0LnRpdGxleD1yLngrWSxldC50aXRsZXk9SisoInRvcCI9PT1yLnRpdGxlLnNpZGU/Ry1YOlgpKSxyLmxpbmUuY29sb3ImJiJhdXRvIj09PXIudGlja21vZGUpe2V0LnRpY2ttb2RlPSJsaW5lYXIiLGV0LnRpY2swPXIubGV2ZWxzLnN0YXJ0O3ZhciBudD1yLmxldmVscy5zaXplLGl0PWMuY29uc3RyYWluKChLLVEpLzUwLDQsMTUpKzEsYXQ9KExbMV0tTFswXSkvKChyLm50aWNrc3x8aXQpKm50KTtpZihhdD4xKXt2YXIgb3Q9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhhdCkvTWF0aC5MTjEwKSk7bnQqPW90KmMucm91bmRVcChhdC9vdCxbMiw1LDEwXSksKE1hdGguYWJzKHIubGV2ZWxzLnN0YXJ0KS9yLmxldmVscy5zaXplKzFlLTYpJTE8MmUtNiYmKGV0LnRpY2swPTApfWV0LmR0aWNrPW50fWV0LmRvbWFpbj1bSitYLEorRy1YXSxldC5zZXRTY2FsZSgpO3ZhciBzdD1jLmVuc3VyZVNpbmdsZSh2Ll9pbmZvbGF5ZXIsImciLGUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKFQuY29sb3JiYXIsITApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoVC5jYmJnLCEwKSx0LmFwcGVuZCgiZyIpLmNsYXNzZWQoVC5jYmZpbGxzLCEwKSx0LmFwcGVuZCgiZyIpLmNsYXNzZWQoVC5jYmxpbmVzLCEwKSx0LmFwcGVuZCgiZyIpLmNsYXNzZWQoVC5jYmF4aXMsITApLmNsYXNzZWQoVC5jcmlzcCwhMCksdC5hcHBlbmQoImciKS5jbGFzc2VkKFQuY2J0aXRsZXVuc2hpZnQsITApLmFwcGVuZCgiZyIpLmNsYXNzZWQoVC5jYnRpdGxlLCEwKSx0LmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoVC5jYm91dGxpbmUsITApLHQuc2VsZWN0KCIuY2J0aXRsZSIpLmRhdHVtKDApfSl9KTtzdC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitNYXRoLnJvdW5kKGsubCkrIiwiK01hdGgucm91bmQoay50KSsiKSIpO3ZhciBsdD1zdC5zZWxlY3QoIi5jYnRpdGxldW5zaGlmdCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtIitNYXRoLnJvdW5kKGsubCkrIiwtIitNYXRoLnJvdW5kKGsudCkrIikiKSxjdD1zdC5zZWxlY3QoIi5jYmF4aXMiKSx1dD0wO2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKHIudGl0bGUuc2lkZSkpe3ZhciBmdCxodD1rLmwrKHIueCtZKSprLncscHQ9ZXQudGl0bGUuZm9udC5zaXplO2Z0PSJ0b3AiPT09ci50aXRsZS5zaWRlPygxLShKK0ctWCkpKmsuaCtrLnQrMysuNzUqcHQ6KDEtKEorWCkpKmsuaCtrLnQtMy0uMjUqcHQseHQoZXQuX2lkKyJ0aXRsZSIse2F0dHJpYnV0ZXM6e3g6aHQseTpmdCwidGV4dC1hbmNob3IiOiJzdGFydCJ9fSl9dmFyIGR0LGd0LHZ0LG10PWMuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKHIudGl0bGUuc2lkZSkpe3ZhciBhPXN0LnNlbGVjdCgiLmNidGl0bGUiKSxvPWEuc2VsZWN0KCJ0ZXh0IiksbD1bLXIub3V0bGluZXdpZHRoLzIsci5vdXRsaW5ld2lkdGgvMl0sdT1hLnNlbGVjdCgiLmgiK2V0Ll9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSxmPTE1LjY7aWYoby5ub2RlKCkmJihmPXBhcnNlSW50KG8ubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSptKSx1Pyh1dD1oLmJCb3godSkuaGVpZ2h0KT5mJiYobFsxXS09KHV0LWYpLzIpOm8ubm9kZSgpJiYhby5jbGFzc2VkKFQuanNQbGFjZWhvbGRlcikmJih1dD1oLmJCb3goby5ub2RlKCkpLmhlaWdodCksdXQpe2lmKHV0Kz01LCJ0b3AiPT09ci50aXRsZS5zaWRlKWV0LmRvbWFpblsxXS09dXQvay5oLGxbMV0qPS0xO2Vsc2V7ZXQuZG9tYWluWzBdKz11dC9rLmg7dmFyIHA9Zy5saW5lQ291bnQobyk7bFsxXSs9KDEtcCkqZn1hLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2wrIikiKSxldC5zZXRTY2FsZSgpfX1zdC5zZWxlY3RBbGwoIi5jYmZpbGxzLC5jYmxpbmVzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitNYXRoLnJvdW5kKGsuaCooMS1ldC5kb21haW5bMV0pKSsiKSIpLGN0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrTWF0aC5yb3VuZCgtay50KSsiKSIpO3ZhciBkPXN0LnNlbGVjdCgiLmNiZmlsbHMiKS5zZWxlY3RBbGwoInJlY3QuY2JmaWxsIikuZGF0YShPKTtkLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChULmNiZmlsbCwhMCkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKSxkLmV4aXQoKS5yZW1vdmUoKTt2YXIgeT1MLm1hcChldC5jMnApLm1hcChNYXRoLnJvdW5kKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO2QuZWFjaChmdW5jdGlvbihhLG8pe3ZhciBzPVswPT09bz9MWzBdOihPW29dK09bby0xXSkvMixvPT09Ty5sZW5ndGgtMT9MWzFdOihPW29dK09bbysxXSkvMl0ubWFwKGV0LmMycCkubWFwKE1hdGgucm91bmQpO3NbMV09Yy5jb25zdHJhaW4oc1sxXSsoc1sxXT5zWzBdKT8xOi0xLHlbMF0seVsxXSk7dmFyIGw9bi5zZWxlY3QodGhpcykuYXR0cih7eDpaLHdpZHRoOk1hdGgubWF4KFUsMikseTpuLm1pbihzKSxoZWlnaHQ6TWF0aC5tYXgobi5tYXgocyktbi5taW4ocyksMil9KTtpZihyLmZpbGxncmFkaWVudCloLmdyYWRpZW50KGwsdCxlLCJ2ZXJ0aWNhbCIsci5maWxsZ3JhZGllbnQsImZpbGwiKTtlbHNle3ZhciB1PUQoYSkucmVwbGFjZSgiZS0iLCIiKTtsLmF0dHIoImZpbGwiLGkodSkudG9IZXhTdHJpbmcoKSl9fSk7dmFyIHg9c3Quc2VsZWN0KCIuY2JsaW5lcyIpLnNlbGVjdEFsbCgicGF0aC5jYmxpbmUiKS5kYXRhKHIubGluZS5jb2xvciYmci5saW5lLndpZHRoP3o6W10pO3JldHVybiB4LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChULmNibGluZSwhMCkseC5leGl0KCkucmVtb3ZlKCkseC5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitaKyIsIisoTWF0aC5yb3VuZChldC5jMnAodCkpK3IubGluZS53aWR0aC8yJTEpKyJoIitVKS5jYWxsKGgubGluZUdyb3VwU3R5bGUsci5saW5lLndpZHRoLEkodCksci5saW5lLmRhc2gpfSksY3Quc2VsZWN0QWxsKCJnLiIrZXQuX2lkKyJ0aWNrLHBhdGgiKS5yZW1vdmUoKSxjLnN5bmNPckFzeW5jKFtmdW5jdGlvbigpe3ZhciBlPVorVSsoci5vdXRsaW5ld2lkdGh8fDApLzItKCJvdXRzaWRlIj09PXIudGlja3M/MTowKSxuPXMuY2FsY1RpY2tzKGV0KSxpPXMubWFrZVRyYW5zRm4oZXQpLGE9cy5nZXRUaWNrU2lnbnMoZXQpWzJdO3JldHVybiBzLmRyYXdUaWNrcyh0LGV0LHt2YWxzOiJpbnNpZGUiPT09ZXQudGlja3M/cy5jbGlwRW5kcyhldCxuKTpuLGxheWVyOmN0LHBhdGg6cy5tYWtlVGlja1BhdGgoZXQsZSxhKSx0cmFuc0ZuOml9KSxzLmRyYXdMYWJlbHModCxldCx7dmFsczpuLGxheWVyOmN0LHRyYW5zRm46aSxsYWJlbEZuczpzLm1ha2VMYWJlbEZucyhldCxlKX0pfSxmdW5jdGlvbigpe2lmKC0xPT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKHIudGl0bGUuc2lkZSkpe3ZhciBlPWV0LnRpdGxlLmZvbnQuc2l6ZSxpPWV0Ll9vZmZzZXQrZXQuX2xlbmd0aC8yLGE9ay5sKyhldC5wb3NpdGlvbnx8MCkqay53KygicmlnaHQiPT09ZXQuc2lkZT8xMCtlKihldC5zaG93dGlja2xhYmVscz8xOi41KTotMTAtZSooZXQuc2hvd3RpY2tsYWJlbHM/LjU6MCkpO3h0KCJoIitldC5faWQrInRpdGxlIix7YXZvaWQ6e3NlbGVjdGlvbjpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuIitldC5faWQrInRpY2siKSxzaWRlOnIudGl0bGUuc2lkZSxvZmZzZXRMZWZ0OmsubCxvZmZzZXRUb3A6MCxtYXhTaGlmdDp2LndpZHRofSxhdHRyaWJ1dGVzOnt4OmEseTppLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOiItOTAiLG9mZnNldDowfX0pfX1dKX0sYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIG49VStyLm91dGxpbmV3aWR0aC8yK2guYkJveChjdC5ub2RlKCkpLndpZHRoO2lmKChOPWx0LnNlbGVjdCgidGV4dCIpKS5ub2RlKCkmJiFOLmNsYXNzZWQoVC5qc1BsYWNlaG9sZGVyKSl7dmFyIGksbz1sdC5zZWxlY3QoIi5oIitldC5faWQrInRpdGxlLW1hdGgtZ3JvdXAiKS5ub2RlKCk7aT1vJiYtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihyLnRpdGxlLnNpZGUpP2guYkJveChvKS53aWR0aDpoLmJCb3gobHQubm9kZSgpKS5yaWdodC1aLWsubCxuPU1hdGgubWF4KG4saSl9dmFyIHM9MipyLnhwYWQrbityLmJvcmRlcndpZHRoK3Iub3V0bGluZXdpZHRoLzIsbD1LLVE7c3Quc2VsZWN0KCIuY2JiZyIpLmF0dHIoe3g6Wi1yLnhwYWQtKHIuYm9yZGVyd2lkdGgrci5vdXRsaW5ld2lkdGgpLzIseTpRLVcsd2lkdGg6TWF0aC5tYXgocywyKSxoZWlnaHQ6TWF0aC5tYXgobCsyKlcsMil9KS5jYWxsKHAuZmlsbCxyLmJnY29sb3IpLmNhbGwocC5zdHJva2Usci5ib3JkZXJjb2xvcikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOnIuYm9yZGVyd2lkdGh9KSxzdC5zZWxlY3RBbGwoIi5jYm91dGxpbmUiKS5hdHRyKHt4OloseTpRK3IueXBhZCsoInRvcCI9PT1yLnRpdGxlLnNpZGU/dXQ6MCksd2lkdGg6TWF0aC5tYXgoVSwyKSxoZWlnaHQ6TWF0aC5tYXgobC0yKnIueXBhZC11dCwyKX0pLmNhbGwocC5zdHJva2Usci5vdXRsaW5lY29sb3IpLnN0eWxlKHtmaWxsOiJOb25lIiwic3Ryb2tlLXdpZHRoIjpyLm91dGxpbmV3aWR0aH0pO3ZhciBjPSh7Y2VudGVyOi41LHJpZ2h0OjF9W3IueGFuY2hvcl18fDApKnM7c3QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGsubC1jKSsiLCIray50KyIpIik7dmFyIHU9e30sZj15W3IueWFuY2hvcl0sZD14W3IueWFuY2hvcl07InBpeGVscyI9PT1yLmxlbm1vZGU/KHUueT1yLnksdS50PWwqZix1LmI9bCpkKToodS50PXUuYj0wLHUueXQ9ci55K3IubGVuKmYsdS55Yj1yLnktci5sZW4qZCk7dmFyIGc9eVtyLnhhbmNob3JdLHY9eFtyLnhhbmNob3JdO2lmKCJwaXhlbHMiPT09ci50aGlja25lc3Ntb2RlKXUueD1yLngsdS5sPXMqZyx1LnI9cyp2O2Vsc2V7dmFyIG09cy1VO3UubD1tKmcsdS5yPW0qdix1LnhsPXIueC1yLnRoaWNrbmVzcypnLHUueHI9ci54K3IudGhpY2tuZXNzKnZ9YS5hdXRvTWFyZ2luKHQsZSx1KX1dLHQpO2lmKG10JiZtdC50aGVuJiYodC5fcHJvbWlzZXN8fFtdKS5wdXNoKG10KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24pbC5pbml0KHtlbGVtZW50OnN0Lm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe2R0PXN0LmF0dHIoInRyYW5zZm9ybSIpLGYoc3QpfSxtb3ZlRm46ZnVuY3Rpb24odCxlKXtzdC5hdHRyKCJ0cmFuc2Zvcm0iLGR0KyIgdHJhbnNsYXRlKCIrdCsiLCIrZSsiKSIpLGd0PWwuYWxpZ24oJCt0L2sudyxxLDAsMSxyLnhhbmNob3IpLHZ0PWwuYWxpZ24oSi1lL2suaCxHLDAsMSxyLnlhbmNob3IpO3ZhciBuPWwuZ2V0Q3Vyc29yKGd0LHZ0LHIueGFuY2hvcixyLnlhbmNob3IpO2Yoc3Qsbil9LGRvbmVGbjpmdW5jdGlvbigpe2lmKGYoc3QpLHZvaWQgMCE9PWd0JiZ2b2lkIDAhPT12dCl7dmFyIGU9e307ZVtTKCJ4IildPWd0LGVbUygieSIpXT12dCxvLmNhbGwoIl9ndWlSZXN0eWxlIix0LGUsTSgpLmluZGV4KX19fSk7cmV0dXJuIG10fWZ1bmN0aW9uIHl0KHQsZSl7cmV0dXJuIGMuY29lcmNlKHR0LGV0LHcsdCxlKX1mdW5jdGlvbiB4dChlLHIpe3ZhciBuPXtwcm9wQ29udGFpbmVyOmV0LHByb3BOYW1lOlMoInRpdGxlIiksdHJhY2VJbmRleDpNKCkuaW5kZXgscGxhY2Vob2xkZXI6di5fZGZsdFRpdGxlLmNvbG9yYmFyLGNvbnRhaW5lckdyb3VwOnN0LnNlbGVjdCgiLmNidGl0bGUiKX0saT0iaCI9PT1lLmNoYXJBdCgwKT9lLnN1YnN0cigxKToiaCIrZTtzdC5zZWxlY3RBbGwoIi4iK2krIiwuIitpKyItbWF0aC1ncm91cCIpLnJlbW92ZSgpLGQuZHJhdyh0LGUsdShuLHJ8fHt9KSl9di5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2UpLnJlbW92ZSgpfWZ1bmN0aW9uIE0oKXtmb3IodmFyIHI9ZS5zdWJzdHIoMiksbj0wO248dC5fZnVsbERhdGEubGVuZ3RoO24rKyl7dmFyIGk9dC5fZnVsbERhdGFbbl07aWYoaS51aWQ9PT1yKXJldHVybiBpfX1mdW5jdGlvbiBTKHQpe3ZhciBlPSJjb2xvcmJhci4iLHI9TSgpLl9tb2R1bGUuY29sb3JiYXIuY29udGFpbmVyO3JldHVybiByJiYoZT1yKyIuIitlKSxlK3R9cmV0dXJuIHIuZmlsbGNvbG9yPW51bGwsci5saW5lPXtjb2xvcjpudWxsLHdpZHRoOm51bGwsZGFzaDpudWxsfSxyLmxldmVscz17c3RhcnQ6bnVsbCxlbmQ6bnVsbCxzaXplOm51bGx9LHIuZmlsbGxldmVscz1udWxsLHIuZmlsbGdyYWRpZW50PW51bGwsci56cmFuZ2U9bnVsbCxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0FbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHJbdF09Yy5pc1BsYWluT2JqZWN0KHJbdF0pP2MuZXh0ZW5kRmxhdChyW3RdLGUpOmUsQSk6clt0XX19KSxBLm9wdGlvbnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpImZ1bmN0aW9uIj09dHlwZW9mIEFbZV0mJkFbZV0odFtlXSk7cmV0dXJuIEF9LEEuX29wdHM9cixBfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NzIsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzYwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiOjc2MywiLi4vLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY29sb3IiOjU3NywiLi4vZHJhZ2VsZW1lbnQiOjU5NSwiLi4vZHJhd2luZyI6NTk4LCIuLi90aXRsZXMiOjY2NSwiLi9hdHRyaWJ1dGVzIjo1NzgsIi4vY29uc3RhbnRzIjo1ODAsZDM6MTU0LHRpbnljb2xvcjI6NTIxfV0sNTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQuY29sb3JiYXIpfX0seyIuLi8uLi9saWIiOjcwMH1dLDU4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjYWxlcy5qcyIpLnNjYWxlcztPYmplY3Qua2V5cyhuKTtmdW5jdGlvbiBpKHQpe3JldHVybiJgIit0KyJgIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0PXR8fCIiO3ZhciByLGE9KGU9ZXx8e30pLmNMZXR0ZXJ8fCJjIixvPSgib25seUlmTnVtZXJpY2FsImluIGU/ZS5vbmx5SWZOdW1lcmljYWw6Qm9vbGVhbih0KSwibm9TY2FsZSJpbiBlP2Uubm9TY2FsZToibWFya2VyLmxpbmUiPT09dCkscz0ic2hvd1NjYWxlRGZsdCJpbiBlP2Uuc2hvd1NjYWxlRGZsdDoieiI9PT1hLGw9InN0cmluZyI9PXR5cGVvZiBlLmNvbG9yc2NhbGVEZmx0P25bZS5jb2xvcnNjYWxlRGZsdF06bnVsbCxjPWUuZWRpdFR5cGVPdmVycmlkZXx8IiIsdT10P3QrIi4iOiIiOyJjb2xvckF0dHIiaW4gZT8ocj1lLmNvbG9yQXR0cixlLmNvbG9yQXR0cik6aSh1KyhyPXt6OiJ6IixjOiJjb2xvciJ9W2FdKSk7dmFyIGY9YSsiYXV0byIsaD1hKyJtaW4iLHA9YSsibWF4IixkPWErIm1pZCIsZz0oaSh1K2YpLGkodStoKSxpKHUrcCkse30pO2dbaF09Z1twXT12b2lkIDA7dmFyIHY9e307dltmXT0hMTt2YXIgbT17fTtyZXR1cm4iY29sb3IiPT09ciYmKG0uY29sb3I9e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOmN8fCJzdHlsZSJ9LGUuYW5pbSYmKG0uY29sb3IuYW5pbT0hMCkpLG1bZl09e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czpnfSxtW2hdPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZTpjfHwicGxvdCIsaW1wbGllZEVkaXRzOnZ9LG1bcF09e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOmN8fCJwbG90IixpbXBsaWVkRWRpdHM6dn0sbVtkXT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czpnfSxtLmNvbG9yc2NhbGU9e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGVkaXRUeXBlOiJjYWxjIixkZmx0OmwsaW1wbGllZEVkaXRzOnthdXRvY29sb3JzY2FsZTohMX19LG0uYXV0b2NvbG9yc2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEhPT1lLmF1dG9Db2xvckRmbHQsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7Y29sb3JzY2FsZTp2b2lkIDB9fSxtLnJldmVyc2VzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LG98fChtLnNob3dzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpzLGVkaXRUeXBlOiJjYWxjIn0pLG19fSx7Ii4vc2NhbGVzLmpzIjo1OTJ9XSw1ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Ll9mdWxsTGF5b3V0LGE9ci52YWxzLG89ci5jb250YWluZXJTdHIscz1yLmNMZXR0ZXIsbD1vP24ubmVzdGVkUHJvcGVydHkoZSxvKS5nZXQoKTplLGM9cysibWluIix1PXMrIm1heCIsZj1zKyJtaWQiLGg9bFtzKyJhdXRvIl0scD1sW2NdLGQ9bFt1XSxnPWxbZl0sdj1sLmNvbG9yc2NhbGU7ITE9PT1oJiZ2b2lkIDAhPT1wfHwocD1uLmFnZ051bXMoTWF0aC5taW4sbnVsbCxhKSksITE9PT1oJiZ2b2lkIDAhPT1kfHwoZD1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxhKSksITEhPT1oJiZ2b2lkIDAhPT1nJiYoZC1nPmctcD9wPWctKGQtZyk6ZC1nPGctcCYmKGQ9ZysoZy1wKSkpLHA9PT1kJiYocC09LjUsZCs9LjUpLGxbIl8iK2NdPWxbY109cCxsWyJfIit1XT1sW3VdPWQsbC5hdXRvY29sb3JzY2FsZSYmKHY9cCpkPDA/aS5jb2xvcnNjYWxlLmRpdmVyZ2luZzpwPj0wP2kuY29sb3JzY2FsZS5zZXF1ZW50aWFsOmkuY29sb3JzY2FsZS5zZXF1ZW50aWFsbWludXMsbC5fY29sb3JzY2FsZT1sLmNvbG9yc2NhbGU9dil9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sNTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3ZhciByPXRbIl8iK2VdO3ZvaWQgMCE9PXImJih0W2VdPXIpfWZ1bmN0aW9uIHIodCxyKXt2YXIgaT1yLmNvbnRhaW5lcj9uLm5lc3RlZFByb3BlcnR5KHQsci5jb250YWluZXIpLmdldCgpOnQ7aWYoaSl7dmFyIGE9aS56YXV0b3x8aS5jYXV0byxvPXIubWluLHM9ci5tYXg7KGF8fHZvaWQgMD09PWlbb10pJiZlKGksbyksKGF8fHZvaWQgMD09PWlbc10pJiZlKGkscyksaS5hdXRvY29sb3JzY2FsZSYmZShpLCJjb2xvcnNjYWxlIil9fWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdLHM9by5fbW9kdWxlLmNvbG9yYmFyO2lmKHMpaWYoQXJyYXkuaXNBcnJheShzKSlmb3IodmFyIGw9MDtsPHMubGVuZ3RoO2wrKylyKG8sc1tsXSk7ZWxzZSByKG8scyk7aShvLCJtYXJrZXIubGluZSIpJiZyKG8se2NvbnRhaW5lcjoibWFya2VyLmxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0pLGkobywibGluZSIpJiZyKG8se2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSl9fX0seyIuLi8uLi9saWIiOjcwMCwiLi9oZWxwZXJzIjo1ODh9XSw1ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIiksbz10KCIuLi9jb2xvcmJhci9kZWZhdWx0cyIpLHM9dCgiLi9zY2FsZXMiKS5pc1ZhbGlkO2Z1bmN0aW9uIGwodCxlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIGU/aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpfHx7fTp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGMpe3ZhciB1PWMucHJlZml4LGY9Yy5jTGV0dGVyLGg9bCh0LHUpLHA9bChlLHUpLGQ9bChlLl90ZW1wbGF0ZXx8e30sdSl8fHt9LGc9aFtmKyJtaW4iXSx2PWhbZisibWF4Il07aSh1K2YrImF1dG8iLCEobihnKSYmbih2KSYmZzx2KSk/aSh1K2YrIm1pZCIpOihpKHUrZisibWluIiksaSh1K2YrIm1heCIpKTt2YXIgbSx5LHg9aC5jb2xvcnNjYWxlLGI9ZC5jb2xvcnNjYWxlOyh2b2lkIDAhPT14JiYobT0hcyh4KSksdm9pZCAwIT09YiYmKG09IXMoYikpLGkodSsiYXV0b2NvbG9yc2NhbGUiLG0pLGkodSsiY29sb3JzY2FsZSIpLGkodSsicmV2ZXJzZXNjYWxlIiksYy5ub1NjYWxlfHwibWFya2VyLmxpbmUuIj09PXUpfHwodSYmKHk9YShoKSksaSh1KyJzaG93c2NhbGUiLHkpJiZvKGgscCxyKSl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9jb2xvcmJhci9kZWZhdWx0cyI6NTgxLCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXIiOjU4MywiLi9zY2FsZXMiOjU5MiwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDU4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4vc2NhbGVzIikuaXNWYWxpZDtmdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPWUtMSxpPTA7bj49MDtuLS0saSsrKXt2YXIgYT10W25dO3JbaV09WzEtYVswXSxhWzFdXX1yZXR1cm4gcn1mdW5jdGlvbiB1KHQpe3ZhciBlPXtyOnRbMF0sZzp0WzFdLGI6dFsyXSxhOnRbM119O3JldHVybiBpKGUpLnRvUmdiU3RyaW5nKCl9ZS5leHBvcnRzPXtoYXNDb2xvcnNjYWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9vLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCl8fHt9OnQsbj1yLmNvbG9yLGk9ITE7aWYoby5pc0FycmF5T3JUeXBlZEFycmF5KG4pKWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKWlmKGEobltzXSkpe2k9ITA7YnJlYWt9cmV0dXJuIG8uaXNQbGFpbk9iamVjdChyKSYmKGl8fCEwPT09ci5zaG93c2NhbGV8fGEoci5jbWluKSYmYShyLmNtYXgpfHxsKHIuY29sb3JzY2FsZSl8fG8uaXNQbGFpbk9iamVjdChyLmNvbG9yYmFyKSl9LGV4dHJhY3RTY2FsZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmNMZXR0ZXIsbj10LnJldmVyc2VzY2FsZT9jKHQuY29sb3JzY2FsZSk6dC5jb2xvcnNjYWxlLGk9dFtyKyJtaW4iXSxhPXRbcisibWF4Il0sbz1uLmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSx1PTA7dTxvO3UrKyl7dmFyIGY9blt1XTtzW3VdPWkrZlswXSooYS1pKSxsW3VdPWZbMV19cmV0dXJue2RvbWFpbjpzLHJhbmdlOmx9fSxmbGlwU2NhbGU6YyxtYWtlQ29sb3JTY2FsZUZ1bmM6ZnVuY3Rpb24odCxlKXtlPWV8fHt9O2Zvcih2YXIgcj10LmRvbWFpbixvPXQucmFuZ2UsbD1vLmxlbmd0aCxjPW5ldyBBcnJheShsKSxmPTA7ZjxsO2YrKyl7dmFyIGg9aShvW2ZdKS50b1JnYigpO2NbZl09W2gucixoLmcsaC5iLGguYV19dmFyIHAsZD1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihyKS5yYW5nZShjKS5jbGFtcCghMCksZz1lLm5vTnVtZXJpY0NoZWNrLHY9ZS5yZXR1cm5BcnJheTtyZXR1cm4ocD1nJiZ2P2Q6Zz9mdW5jdGlvbih0KXtyZXR1cm4gdShkKHQpKX06dj9mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9kKHQpOmkodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX06ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/dShkKHQpKTppKHQpLmlzVmFsaWQoKT90OnMuZGVmYXVsdExpbmV9KS5kb21haW49ZC5kb21haW4scC5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBvfSxwfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL2NvbG9yIjo1NzcsIi4vc2NhbGVzIjo1OTIsZDM6MTU0LCJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sNTg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzIiksaT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY29sb3JzY2FsZSIsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksc2NhbGVzOm4uc2NhbGVzLGRlZmF1bHRTY2FsZTpuLmRlZmF1bHRTY2FsZSxnZXRTY2FsZTpuLmdldCxpc1ZhbGlkU2NhbGU6bi5pc1ZhbGlkLGhhc0NvbG9yc2NhbGU6aS5oYXNDb2xvcnNjYWxlLGZsaXBTY2FsZTppLmZsaXBTY2FsZSxleHRyYWN0U2NhbGU6aS5leHRyYWN0U2NhbGUsbWFrZUNvbG9yU2NhbGVGdW5jOmkubWFrZUNvbG9yU2NhbGVGdW5jfX0seyIuL2F0dHJpYnV0ZXMiOjU4NCwiLi9jYWxjIjo1ODUsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjU4NiwiLi9kZWZhdWx0cyI6NTg3LCIuL2hlbHBlcnMiOjU4OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NTkwLCIuL2xheW91dF9kZWZhdWx0cyI6NTkxLCIuL3NjYWxlcyI6NTkyfV0sNTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzIikuc2NhbGVzO2UuZXhwb3J0cz17ZWRpdFR5cGU6ImNhbGMiLHNlcXVlbnRpYWw6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6bi5SZWRzLGVkaXRUeXBlOiJjYWxjIn0sc2VxdWVudGlhbG1pbnVzOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0Om4uQmx1ZXMsZWRpdFR5cGU6ImNhbGMifSxkaXZlcmdpbmc6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6bi5SZEJ1LGVkaXRUeXBlOiJjYWxjIn19fSx7Ii4vc2NhbGVzIjo1OTJ9XSw1OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jb2xvcnNjYWxlLG89YS5uZXdDb250YWluZXIoZSwiY29sb3JzY2FsZSIpO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gbi5jb2VyY2UocixvLGksdCxlKX1zKCJzZXF1ZW50aWFsIikscygic2VxdWVudGlhbG1pbnVzIikscygiZGl2ZXJnaW5nIil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU5MH1dLDU5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIiksaT17R3JleXM6W1swLCJyZ2IoMCwwLDApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sWWxHbkJ1OltbMCwicmdiKDgsMjksODgpIl0sWy4xMjUsInJnYigzNyw1MiwxNDgpIl0sWy4yNSwicmdiKDM0LDk0LDE2OCkiXSxbLjM3NSwicmdiKDI5LDE0NSwxOTIpIl0sWy41LCJyZ2IoNjUsMTgyLDE5NikiXSxbLjYyNSwicmdiKDEyNywyMDUsMTg3KSJdLFsuNzUsInJnYigxOTksMjMzLDE4MCkiXSxbLjg3NSwicmdiKDIzNywyNDgsMjE3KSJdLFsxLCJyZ2IoMjU1LDI1NSwyMTcpIl1dLEdyZWVuczpbWzAsInJnYigwLDY4LDI3KSJdLFsuMTI1LCJyZ2IoMCwxMDksNDQpIl0sWy4yNSwicmdiKDM1LDEzOSw2OSkiXSxbLjM3NSwicmdiKDY1LDE3MSw5MykiXSxbLjUsInJnYigxMTYsMTk2LDExOCkiXSxbLjYyNSwicmdiKDE2MSwyMTcsMTU1KSJdLFsuNzUsInJnYigxOTksMjMzLDE5MikiXSxbLjg3NSwicmdiKDIyOSwyNDUsMjI0KSJdLFsxLCJyZ2IoMjQ3LDI1MiwyNDUpIl1dLFlsT3JSZDpbWzAsInJnYigxMjgsMCwzOCkiXSxbLjEyNSwicmdiKDE4OSwwLDM4KSJdLFsuMjUsInJnYigyMjcsMjYsMjgpIl0sWy4zNzUsInJnYigyNTIsNzgsNDIpIl0sWy41LCJyZ2IoMjUzLDE0MSw2MCkiXSxbLjYyNSwicmdiKDI1NCwxNzgsNzYpIl0sWy43NSwicmdiKDI1NCwyMTcsMTE4KSJdLFsuODc1LCJyZ2IoMjU1LDIzNywxNjApIl0sWzEsInJnYigyNTUsMjU1LDIwNCkiXV0sQmx1ZXJlZDpbWzAsInJnYigwLDAsMjU1KSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUmRCdTpbWzAsInJnYig1LDEwLDE3MikiXSxbLjM1LCJyZ2IoMTA2LDEzNywyNDcpIl0sWy41LCJyZ2IoMTkwLDE5MCwxOTApIl0sWy42LCJyZ2IoMjIwLDE3MCwxMzIpIl0sWy43LCJyZ2IoMjMwLDE0NSw5MCkiXSxbMSwicmdiKDE3OCwxMCwyOCkiXV0sUmVkczpbWzAsInJnYigyMjAsMjIwLDIyMCkiXSxbLjIsInJnYigyNDUsMTk1LDE1NykiXSxbLjQsInJnYigyNDUsMTYwLDEwNSkiXSxbMSwicmdiKDE3OCwxMCwyOCkiXV0sQmx1ZXM6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDQwLDYwLDE5MCkiXSxbLjUsInJnYig3MCwxMDAsMjQ1KSJdLFsuNiwicmdiKDkwLDEyMCwyNDUpIl0sWy43LCJyZ2IoMTA2LDEzNywyNDcpIl0sWzEsInJnYigyMjAsMjIwLDIyMCkiXV0sUGljbmljOltbMCwicmdiKDAsMCwyNTUpIl0sWy4xLCJyZ2IoNTEsMTUzLDI1NSkiXSxbLjIsInJnYigxMDIsMjA0LDI1NSkiXSxbLjMsInJnYigxNTMsMjA0LDI1NSkiXSxbLjQsInJnYigyMDQsMjA0LDI1NSkiXSxbLjUsInJnYigyNTUsMjU1LDI1NSkiXSxbLjYsInJnYigyNTUsMjA0LDI1NSkiXSxbLjcsInJnYigyNTUsMTUzLDI1NSkiXSxbLjgsInJnYigyNTUsMTAyLDIwNCkiXSxbLjksInJnYigyNTUsMTAyLDEwMikiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJhaW5ib3c6W1swLCJyZ2IoMTUwLDAsOTApIl0sWy4xMjUsInJnYigwLDAsMjAwKSJdLFsuMjUsInJnYigwLDI1LDI1NSkiXSxbLjM3NSwicmdiKDAsMTUyLDI1NSkiXSxbLjUsInJnYig0NCwyNTUsMTUwKSJdLFsuNjI1LCJyZ2IoMTUxLDI1NSwwKSJdLFsuNzUsInJnYigyNTUsMjM0LDApIl0sWy44NzUsInJnYigyNTUsMTExLDApIl0sWzEsInJnYigyNTUsMCwwKSJdXSxQb3J0bGFuZDpbWzAsInJnYigxMiw1MSwxMzEpIl0sWy4yNSwicmdiKDEwLDEzNiwxODYpIl0sWy41LCJyZ2IoMjQyLDIxMSw1NikiXSxbLjc1LCJyZ2IoMjQyLDE0Myw1NikiXSxbMSwicmdiKDIxNywzMCwzMCkiXV0sSmV0OltbMCwicmdiKDAsMCwxMzEpIl0sWy4xMjUsInJnYigwLDYwLDE3MCkiXSxbLjM3NSwicmdiKDUsMjU1LDI1NSkiXSxbLjYyNSwicmdiKDI1NSwyNTUsMCkiXSxbLjg3NSwicmdiKDI1MCwwLDApIl0sWzEsInJnYigxMjgsMCwwKSJdXSxIb3Q6W1swLCJyZ2IoMCwwLDApIl0sWy4zLCJyZ2IoMjMwLDAsMCkiXSxbLjYsInJnYigyNTUsMjEwLDApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sQmxhY2tib2R5OltbMCwicmdiKDAsMCwwKSJdLFsuMiwicmdiKDIzMCwwLDApIl0sWy40LCJyZ2IoMjMwLDIxMCwwKSJdLFsuNywicmdiKDI1NSwyNTUsMjU1KSJdLFsxLCJyZ2IoMTYwLDIwMCwyNTUpIl1dLEVhcnRoOltbMCwicmdiKDAsMCwxMzApIl0sWy4xLCJyZ2IoMCwxODAsMTgwKSJdLFsuMiwicmdiKDQwLDIxMCw0MCkiXSxbLjQsInJnYigyMzAsMjMwLDUwKSJdLFsuNiwicmdiKDEyMCw3MCwyMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxFbGVjdHJpYzpbWzAsInJnYigwLDAsMCkiXSxbLjE1LCJyZ2IoMzAsMCwxMDApIl0sWy40LCJyZ2IoMTIwLDAsMTAwKSJdLFsuNiwicmdiKDE2MCw5MCwwKSJdLFsuOCwicmdiKDIzMCwyMDAsMCkiXSxbMSwicmdiKDI1NSwyNTAsMjIwKSJdXSxWaXJpZGlzOltbMCwiIzQ0MDE1NCJdLFsuMDYyNzQ1MDk4MDM5MjE1NjksIiM0ODE4NmEiXSxbLjEyNTQ5MDE5NjA3ODQzMTM3LCIjNDcyZDdiIl0sWy4xODgyMzUyOTQxMTc2NDcwNiwiIzQyNDA4NiJdLFsuMjUwOTgwMzkyMTU2ODYyNzQsIiMzYjUyOGIiXSxbLjMxMzcyNTQ5MDE5NjA3ODQsIiMzMzYzOGQiXSxbLjM3NjQ3MDU4ODIzNTI5NDEsIiMyYzcyOGUiXSxbLjQzOTIxNTY4NjI3NDUwOTgsIiMyNjgyOGUiXSxbLjUwMTk2MDc4NDMxMzcyNTUsIiMyMTkxOGMiXSxbLjU2NDcwNTg4MjM1Mjk0MTIsIiMxZmEwODgiXSxbLjYyNzQ1MDk4MDM5MjE1NjksIiMyOGFlODAiXSxbLjY5MDE5NjA3ODQzMTM3MjUsIiMzZmJjNzMiXSxbLjc1Mjk0MTE3NjQ3MDU4ODIsIiM1ZWM5NjIiXSxbLjgxNTY4NjI3NDUwOTgwMzksIiM4NGQ0NGIiXSxbLjg3ODQzMTM3MjU0OTAxOTYsIiNhZGRjMzAiXSxbLjk0MTE3NjQ3MDU4ODIzNTMsIiNkOGUyMTkiXSxbMSwiI2ZkZTcyNSJdXSxDaXZpZGlzOltbMCwicmdiKDAsMzIsNzYpIl0sWy4wNTg4MjQsInJnYigwLDQyLDEwMikiXSxbLjExNzY0NywicmdiKDAsNTIsMTEwKSJdLFsuMTc2NDcxLCJyZ2IoMzksNjMsMTA4KSJdLFsuMjM1Mjk0LCJyZ2IoNjAsNzQsMTA3KSJdLFsuMjk0MTE4LCJyZ2IoNzYsODUsMTA3KSJdLFsuMzUyOTQxLCJyZ2IoOTEsOTUsMTA5KSJdLFsuNDExNzY1LCJyZ2IoMTA0LDEwNiwxMTIpIl0sWy40NzA1ODgsInJnYigxMTcsMTE3LDExNykiXSxbLjUyOTQxMiwicmdiKDEzMSwxMjksMTIwKSJdLFsuNTg4MjM1LCJyZ2IoMTQ2LDE0MCwxMjApIl0sWy42NDcwNTksInJnYigxNjEsMTUyLDExOCkiXSxbLjcwNTg4MiwicmdiKDE3NiwxNjUsMTE0KSJdLFsuNzY0NzA2LCJyZ2IoMTkyLDE3NywxMDkpIl0sWy44MjM1MjksInJnYigyMDksMTkxLDEwMikiXSxbLjg4MjM1MywicmdiKDIyNSwyMDQsOTIpIl0sWy45NDExNzYsInJnYigyNDMsMjE5LDc5KSJdLFsxLCJyZ2IoMjU1LDIzMyw2OSkiXV19LGE9aS5SZEJ1O2Z1bmN0aW9uIG8odCl7dmFyIGU9MDtpZighQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8MilyZXR1cm4hMTtpZighdFswXXx8IXRbdC5sZW5ndGgtMV0pcmV0dXJuITE7aWYoMCE9K3RbMF1bMF18fDEhPSt0W3QubGVuZ3RoLTFdWzBdKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2lmKDIhPT1pLmxlbmd0aHx8K2lbMF08ZXx8IW4oaVsxXSkuaXNWYWxpZCgpKXJldHVybiExO2U9K2lbMF19cmV0dXJuITB9ZS5leHBvcnRzPXtzY2FsZXM6aSxkZWZhdWx0U2NhbGU6YSxnZXQ6ZnVuY3Rpb24odCxlKXtpZihlfHwoZT1hKSwhdClyZXR1cm4gZTtmdW5jdGlvbiByKCl7dHJ5e3Q9aVt0XXx8SlNPTi5wYXJzZSh0KX1jYXRjaChyKXt0PWV9fXJldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHIoKSwic3RyaW5nIj09dHlwZW9mIHQmJnIoKSksbyh0KT90OmV9LGlzVmFsaWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PWlbdF18fG8odCl9fX0se3Rpbnljb2xvcjI6NTIxfV0sNTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSh0LXIpLyhuLXIpLG89YStlLyhuLXIpLHM9KGErbykvMjtyZXR1cm4ibGVmdCI9PT1pfHwiYm90dG9tIj09PWk/YToiY2VudGVyIj09PWl8fCJtaWRkbGUiPT09aT9zOiJyaWdodCI9PT1pfHwidG9wIj09PWk/bzphPDIvMy1zP2E6bz40LzMtcz9vOnN9fSx7fV0sNTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9W1sic3ctcmVzaXplIiwicy1yZXNpemUiLCJzZS1yZXNpemUiXSxbInctcmVzaXplIiwibW92ZSIsImUtcmVzaXplIl0sWyJudy1yZXNpemUiLCJuLXJlc2l6ZSIsIm5lLXJlc2l6ZSJdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIHQ9ImxlZnQiPT09cj8wOiJjZW50ZXIiPT09cj8xOiJyaWdodCI9PT1yPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKnQpLDAsMiksZT0iYm90dG9tIj09PWE/MDoibWlkZGxlIj09PWE/MToidG9wIj09PWE/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqZSksMCwyKSxpW2VdW3RdfX0seyIuLi8uLi9saWIiOjcwMH1dLDU5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtb3VzZS1ldmVudC1vZmZzZXQiKSxpPXQoImhhcy1ob3ZlciIpLGE9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksYz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIiksdT1lLmV4cG9ydHM9e307dS5hbGlnbj10KCIuL2FsaWduIiksdS5nZXRDdXJzb3I9dCgiLi9jdXJzb3IiKTt2YXIgZj10KCIuL3VuaG92ZXIiKTtmdW5jdGlvbiBoKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImRyYWdjb3ZlciI7dmFyIGU9dC5zdHlsZTtyZXR1cm4gZS5wb3NpdGlvbj0iZml4ZWQiLGUubGVmdD0wLGUucmlnaHQ9MCxlLnRvcD0wLGUuYm90dG9tPTAsZS56SW5kZXg9OTk5OTk5OTk5LGUuYmFja2dyb3VuZD0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fWZ1bmN0aW9uIHAodCl7cmV0dXJuIG4odC5jaGFuZ2VkVG91Y2hlcz90LmNoYW5nZWRUb3VjaGVzWzBdOnQsZG9jdW1lbnQuYm9keSl9dS51bmhvdmVyPWYud3JhcHBlZCx1LnVuaG92ZXJSYXc9Zi5yYXcsdS5pbml0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixmLGQsZyx2LG0seT10LmdkLHg9MSxiPWMuREJMQ0xJQ0tERUxBWSxfPXQuZWxlbWVudDt5Ll9tb3VzZURvd25UaW1lfHwoeS5fbW91c2VEb3duVGltZT0wKSxfLnN0eWxlLnBvaW50ZXJFdmVudHM9ImFsbCIsXy5vbm1vdXNlZG93bj1rLGE/KF8uX29udG91Y2hzdGFydCYmXy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixfLl9vbnRvdWNoc3RhcnQpLF8uX29udG91Y2hzdGFydD1rLF8uYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsayx7cGFzc2l2ZTohMX0pKTpfLm9udG91Y2hzdGFydD1rO3ZhciB3PXQuY2xhbXBGbnx8ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmFicyh0KTxyJiYodD0wKSxNYXRoLmFicyhlKTxyJiYoZT0wKSxbdCxlXX07ZnVuY3Rpb24gayhhKXt5Ll9kcmFnZ2VkPSExLHkuX2RyYWdnaW5nPSEwO3ZhciBvPXAoYSk7ZT1vWzBdLHI9b1sxXSx2PWEudGFyZ2V0LGc9YSxtPTI9PT1hLmJ1dHRvbnN8fGEuY3RybEtleSwidW5kZWZpbmVkIj09dHlwZW9mIGEuY2xpZW50WCYmInVuZGVmaW5lZCI9PXR5cGVvZiBhLmNsaWVudFkmJihhLmNsaWVudFg9ZSxhLmNsaWVudFk9ciksKG49KG5ldyBEYXRlKS5nZXRUaW1lKCkpLXkuX21vdXNlRG93blRpbWU8Yj94Kz0xOih4PTEseS5fbW91c2VEb3duVGltZT1uKSx0LnByZXBGbiYmdC5wcmVwRm4oYSxlLHIpLGkmJiFtPyhkPWgoKSkuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKF8pLmN1cnNvcjppfHwoZD1kb2N1bWVudCxmPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY3Vyc29yLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoXykuY3Vyc29yKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixBKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsQSksITEhPT10LmRyYWdtb2RlJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsVCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixUKSl9ZnVuY3Rpb24gVChuKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIGk9cChuKSxhPXQubWluRHJhZ3x8bC5NSU5EUkFHLG89dyhpWzBdLWUsaVsxXS1yLGEpLHM9b1swXSxjPW9bMV07KHN8fGMpJiYoeS5fZHJhZ2dlZD0hMCx1LnVuaG92ZXIoeSkpLHkuX2RyYWdnZWQmJnQubW92ZUZuJiYhbSYmdC5tb3ZlRm4ocyxjKX1mdW5jdGlvbiBBKGUpe2lmKCExIT09dC5kcmFnbW9kZSYmKGUucHJldmVudERlZmF1bHQoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLFQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsVCkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLEEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixBKSxpP3MucmVtb3ZlRWxlbWVudChkKTpmJiYoZC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPWYsZj1udWxsKSx5Ll9kcmFnZ2luZyl7aWYoeS5fZHJhZ2dpbmc9ITEsKG5ldyBEYXRlKS5nZXRUaW1lKCkteS5fbW91c2VEb3duVGltZT5iJiYoeD1NYXRoLm1heCh4LTEsMSkpLHkuX2RyYWdnZWQpdC5kb25lRm4mJnQuZG9uZUZuKCk7ZWxzZSBpZih0LmNsaWNrRm4mJnQuY2xpY2tGbih4LGcpLCFtKXt2YXIgcjt0cnl7cj1uZXcgTW91c2VFdmVudCgiY2xpY2siLGUpfWNhdGNoKHQpe3ZhciBuPXAoZSk7KHI9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIikpLmluaXRNb3VzZUV2ZW50KCJjbGljayIsZS5idWJibGVzLGUuY2FuY2VsYWJsZSxlLnZpZXcsZS5kZXRhaWwsZS5zY3JlZW5YLGUuc2NyZWVuWSxuWzBdLG5bMV0sZS5jdHJsS2V5LGUuYWx0S2V5LGUuc2hpZnRLZXksZS5tZXRhS2V5LGUuYnV0dG9uLGUucmVsYXRlZFRhcmdldCl9di5kaXNwYXRjaEV2ZW50KHIpfSFmdW5jdGlvbih0KXt0Ll9kcmFnZ2luZz0hMSx0Ll9yZXBsb3RQZW5kaW5nJiZvLmNhbGwoInBsb3QiLHQpfSh5KSx5Ll9kcmFnZ2VkPSExfWVsc2UgeS5fZHJhZ2dlZD0hMX19LHUuY292ZXJTbGlwPWh9LHsiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6Njc2LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzU0LCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2FsaWduIjo1OTMsIi4vY3Vyc29yIjo1OTQsIi4vdW5ob3ZlciI6NTk2LCJoYXMtaG92ZXIiOjQwMiwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MDMsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDI4fV0sNTk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ldmVudHMiKSxpPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLGE9dCgiLi4vLi4vbGliL2dldF9ncmFwaF9kaXYiKSxvPXQoIi4uL2Z4L2NvbnN0YW50cyIpLHM9ZS5leHBvcnRzPXt9O3Mud3JhcHBlZD1mdW5jdGlvbih0LGUscil7KHQ9YSh0KSkuX2Z1bGxMYXlvdXQmJmkuY2xlYXIodC5fZnVsbExheW91dC5fdWlkK28uSE9WRVJJRCkscy5yYXcodCxlLHIpfSxzLnJhdz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT10Ll9ob3ZlcmRhdGE7ZXx8KGU9e30pLGUudGFyZ2V0JiYhMT09PW4udHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2JlZm9yZWhvdmVyIixlKXx8KHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoImxpbmUiKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgiY2lyY2xlIikucmVtb3ZlKCksdC5faG92ZXJkYXRhPXZvaWQgMCxlLnRhcmdldCYmaSYmdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse2V2ZW50OmUscG9pbnRzOml9KSl9fSx7Ii4uLy4uL2xpYi9ldmVudHMiOjY4OSwiLi4vLi4vbGliL2dldF9ncmFwaF9kaXYiOjY5NiwiLi4vLi4vbGliL3Rocm90dGxlIjo3MjUsIi4uL2Z4L2NvbnN0YW50cyI6NjEwfV0sNTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZGFzaD17dmFsVHlwZToic3RyaW5nIix2YWx1ZXM6WyJzb2xpZCIsImRvdCIsImRhc2giLCJsb25nZGFzaCIsImRhc2hkb3QiLCJsb25nZGFzaGRvdCJdLGRmbHQ6InNvbGlkIixlZGl0VHlwZToic3R5bGUifX0se31dLDU5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi9jb2xvciIpLGw9dCgiLi4vY29sb3JzY2FsZSIpLGM9dCgiLi4vLi4vbGliIiksdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksaD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLHA9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGQ9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSxnPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHY9ZS5leHBvcnRzPXt9O3YuZm9udD1mdW5jdGlvbih0LGUscixuKXtjLmlzUGxhaW5PYmplY3QoZSkmJihuPWUuY29sb3Iscj1lLnNpemUsZT1lLmZhbWlseSksZSYmdC5zdHlsZSgiZm9udC1mYW1pbHkiLGUpLHIrMSYmdC5zdHlsZSgiZm9udC1zaXplIixyKyJweCIpLG4mJnQuY2FsbChzLmZpbGwsbil9LHYuc2V0UG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigieCIsZSkuYXR0cigieSIscil9LHYuc2V0U2l6ZT1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJ3aWR0aCIsZSkuYXR0cigiaGVpZ2h0IixyKX0sdi5zZXRSZWN0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dC5jYWxsKHYuc2V0UG9zaXRpb24sZSxyKS5jYWxsKHYuc2V0U2l6ZSxuLGkpfSx2LnRyYW5zbGF0ZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXIuYzJwKHQueCksbz1uLmMycCh0LnkpO3JldHVybiEhKGkoYSkmJmkobykmJmUubm9kZSgpKSYmKCJ0ZXh0Ij09PWUubm9kZSgpLm5vZGVOYW1lP2UuYXR0cigieCIsYSkuYXR0cigieSIsbyk6ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithKyIsIitvKyIpIiksITApfSx2LnRyYW5zbGF0ZVBvaW50cz1mdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpO3YudHJhbnNsYXRlUG9pbnQodCxpLGUscil9KX0sdi5oaWRlT3V0c2lkZVJhbmdlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2UuYXR0cigiZGlzcGxheSIsci5pc1B0V2l0aGluUmFuZ2UodCxpKSYmbi5pc1B0V2l0aGluUmFuZ2UodCxhKT9udWxsOiJub25lIil9LHYuaGlkZU91dHNpZGVSYW5nZVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKGUuX2hhc0NsaXBPbkF4aXNGYWxzZSl7dmFyIHI9ZS54YXhpcyxpPWUueWF4aXM7dC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPWVbMF0udHJhY2Usbz1hLnhjYWxlbmRhcixzPWEueWNhbGVuZGFyLGw9ImJhciI9PT1hLnR5cGU/Ii5iYXJ0ZXh0Ijoid2F0ZXJmYWxsIj09PWEudHlwZT8iLmJhcnRleHQsLmxpbmUiOiIucG9pbnQsLnRleHRwb2ludCI7dC5zZWxlY3RBbGwobCkuZWFjaChmdW5jdGlvbih0KXt2LmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LG4uc2VsZWN0KHRoaXMpLHIsaSxvLHMpfSl9KX19LHYuY3Jpc3BSb3VuZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJmkoZSk/dC5fY29udGV4dC5zdGF0aWNQbG90P2U6ZTwxPzE6TWF0aC5yb3VuZChlKTpyfHwwfSx2LnNpbmdsZUxpbmVTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe2Uuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIGE9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPXJ8fGEud2lkdGh8fDAsbD1pfHxhLmRhc2h8fCIiO3Muc3Ryb2tlKGUsbnx8YS5jb2xvciksdi5kYXNoTGluZShlLGwsbyl9LHYubGluZUdyb3VwU3R5bGU9ZnVuY3Rpb24odCxlLHIsaSl7dC5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPSgoKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz1lfHxhLndpZHRofHwwLGw9aXx8YS5kYXNofHwiIjtuLnNlbGVjdCh0aGlzKS5jYWxsKHMuc3Ryb2tlLHJ8fGEuY29sb3IpLmNhbGwodi5kYXNoTGluZSxsLG8pfSl9LHYuZGFzaExpbmU9ZnVuY3Rpb24odCxlLHIpe3I9K3J8fDAsZT12LmRhc2hTdHlsZShlLHIpLHQuc3R5bGUoeyJzdHJva2UtZGFzaGFycmF5IjplLCJzdHJva2Utd2lkdGgiOnIrInB4In0pfSx2LmRhc2hTdHlsZT1mdW5jdGlvbih0LGUpe2U9K2V8fDE7dmFyIHI9TWF0aC5tYXgoZSwzKTtyZXR1cm4ic29saWQiPT09dD90PSIiOiJkb3QiPT09dD90PXIrInB4LCIrcisicHgiOiJkYXNoIj09PXQ/dD0zKnIrInB4LCIrMypyKyJweCI6ImxvbmdkYXNoIj09PXQ/dD01KnIrInB4LCIrNSpyKyJweCI6ImRhc2hkb3QiPT09dD90PTMqcisicHgsIityKyJweCwiK3IrInB4LCIrcisicHgiOiJsb25nZGFzaGRvdCI9PT10JiYodD01KnIrInB4LCIrMipyKyJweCwiK3IrInB4LCIrMipyKyJweCIpLHR9LHYuc2luZ2xlRmlsbFN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSgoKG4uc2VsZWN0KHQubm9kZSgpKS5kYXRhKClbMF18fFtdKVswXXx8e30pLnRyYWNlfHx7fSkuZmlsbGNvbG9yO2UmJnQuY2FsbChzLmZpbGwsZSl9LHYuZmlsbEdyb3VwU3R5bGU9ZnVuY3Rpb24odCl7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3RbMF0udHJhY2UmJmUuY2FsbChzLmZpbGwsdFswXS50cmFjZS5maWxsY29sb3IpfSl9O3ZhciBtPXQoIi4vc3ltYm9sX2RlZnMiKTt2LnN5bWJvbE5hbWVzPVtdLHYuc3ltYm9sRnVuY3M9W10sdi5zeW1ib2xOZWVkTGluZXM9e30sdi5zeW1ib2xOb0RvdD17fSx2LnN5bWJvbE5vRmlsbD17fSx2LnN5bWJvbExpc3Q9W10sT2JqZWN0LmtleXMobSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1tW3RdO3Yuc3ltYm9sTGlzdD12LnN5bWJvbExpc3QuY29uY2F0KFtlLm4sdCxlLm4rMTAwLHQrIi1vcGVuIl0pLHYuc3ltYm9sTmFtZXNbZS5uXT10LHYuc3ltYm9sRnVuY3NbZS5uXT1lLmYsZS5uZWVkTGluZSYmKHYuc3ltYm9sTmVlZExpbmVzW2Uubl09ITApLGUubm9Eb3Q/di5zeW1ib2xOb0RvdFtlLm5dPSEwOnYuc3ltYm9sTGlzdD12LnN5bWJvbExpc3QuY29uY2F0KFtlLm4rMjAwLHQrIi1kb3QiLGUubiszMDAsdCsiLW9wZW4tZG90Il0pLGUubm9GaWxsJiYodi5zeW1ib2xOb0ZpbGxbZS5uXT0hMCl9KTt2YXIgeT12LnN5bWJvbE5hbWVzLmxlbmd0aCx4PSJNMCwwLjVMMC41LDBMMCwtMC41TC0wLjUsMFoiO2Z1bmN0aW9uIGIodCxlKXt2YXIgcj10JTEwMDtyZXR1cm4gdi5zeW1ib2xGdW5jc1tyXShlKSsodD49MjAwP3g6IiIpfXYuc3ltYm9sTnVtYmVyPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9MDt0LmluZGV4T2YoIi1vcGVuIik+MCYmKGU9MTAwLHQ9dC5yZXBsYWNlKCItb3BlbiIsIiIpKSx0LmluZGV4T2YoIi1kb3QiKT4wJiYoZSs9MjAwLHQ9dC5yZXBsYWNlKCItZG90IiwiIikpLCh0PXYuc3ltYm9sTmFtZXMuaW5kZXhPZih0KSk+PTAmJih0Kz1lKX1yZXR1cm4gdCUxMDA+PXl8fHQ+PTQwMD8wOk1hdGguZmxvb3IoTWF0aC5tYXgodCwwKSl9O3ZhciBfPXt4MToxLHgyOjAseTE6MCx5MjowfSx3PXt4MTowLHgyOjAseTE6MSx5MjowfSxrPW4uZm9ybWF0KCJ+LjFmIiksVD17cmFkaWFsOntub2RlOiJyYWRpYWxHcmFkaWVudCJ9LHJhZGlhbHJldmVyc2VkOntub2RlOiJyYWRpYWxHcmFkaWVudCIscmV2ZXJzZWQ6ITB9LGhvcml6b250YWw6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczpffSxob3Jpem9udGFscmV2ZXJzZWQ6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczpfLHJldmVyc2VkOiEwfSx2ZXJ0aWNhbDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOnd9LHZlcnRpY2FscmV2ZXJzZWQ6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczp3LHJldmVyc2VkOiEwfX07di5ncmFkaWVudD1mdW5jdGlvbih0LGUscixpLG8sbCl7Zm9yKHZhciB1PW8ubGVuZ3RoLGY9VFtpXSxoPW5ldyBBcnJheSh1KSxwPTA7cDx1O3ArKylmLnJldmVyc2VkP2hbdS0xLXBdPVtrKDEwMCooMS1vW3BdWzBdKSksb1twXVsxXV06aFtwXT1baygxMDAqb1twXVswXSksb1twXVsxXV07dmFyIGQ9ImciK2UuX2Z1bGxMYXlvdXQuX3VpZCsiLSIrcixnPWUuX2Z1bGxMYXlvdXQuX2RlZnMuc2VsZWN0KCIuZ3JhZGllbnRzIikuc2VsZWN0QWxsKCIjIitkKS5kYXRhKFtpK2guam9pbigiOyIpXSxjLmlkZW50aXR5KTtnLmV4aXQoKS5yZW1vdmUoKSxnLmVudGVyKCkuYXBwZW5kKGYubm9kZSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2YuYXR0cnMmJnQuYXR0cihmLmF0dHJzKSx0LmF0dHIoImlkIixkKTt2YXIgZT10LnNlbGVjdEFsbCgic3RvcCIpLmRhdGEoaCk7ZS5leGl0KCkucmVtb3ZlKCksZS5lbnRlcigpLmFwcGVuZCgic3RvcCIpLGUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMV0pO24uc2VsZWN0KHRoaXMpLmF0dHIoe29mZnNldDp0WzBdKyIlIiwic3RvcC1jb2xvciI6cy50aW55UkdCKGUpLCJzdG9wLW9wYWNpdHkiOmUuZ2V0QWxwaGEoKX0pfSl9KSx0LnN0eWxlKGwsInVybCgjIitkKyIpIikuc3R5bGUobCsiLW9wYWNpdHkiLG51bGwpfSx2LmluaXRHcmFkaWVudHM9ZnVuY3Rpb24odCl7Yy5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5fZGVmcywiZyIsImdyYWRpZW50cyIpLnNlbGVjdEFsbCgibGluZWFyR3JhZGllbnQscmFkaWFsR3JhZGllbnQiKS5yZW1vdmUoKX0sdi5wb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGk9di5tYWtlUG9pbnRTdHlsZUZucyhlKTt0LmVhY2goZnVuY3Rpb24odCl7di5zaW5nbGVQb2ludFN0eWxlKHQsbi5zZWxlY3QodGhpcyksZSxpLHIpfSl9fSx2LnNpbmdsZVBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1yLm1hcmtlcixvPWEubGluZTtpZihlLnN0eWxlKCJvcGFjaXR5IixuLnNlbGVjdGVkT3BhY2l0eUZuP24uc2VsZWN0ZWRPcGFjaXR5Rm4odCk6dm9pZCAwPT09dC5tbz9hLm9wYWNpdHk6dC5tbyksbi5tczJtcmMpe3ZhciBsO2w9InZhcmlvdXMiPT09dC5tc3x8InZhcmlvdXMiPT09YS5zaXplPzM6bi5tczJtcmModC5tcyksdC5tcmM9bCxuLnNlbGVjdGVkU2l6ZUZuJiYobD10Lm1yYz1uLnNlbGVjdGVkU2l6ZUZuKHQpKTt2YXIgdT12LnN5bWJvbE51bWJlcih0Lm14fHxhLnN5bWJvbCl8fDA7dC5vbT11JTIwMD49MTAwLGUuYXR0cigiZCIsYih1LGwpKX12YXIgZixoLHAsZD0hMTtpZih0LnNvKXA9by5vdXRsaWVyd2lkdGgsaD1vLm91dGxpZXJjb2xvcixmPWEub3V0bGllcmNvbG9yO2Vsc2V7dmFyIGc9KG98fHt9KS53aWR0aDtwPSh0Lm1sdysxfHxnKzF8fCh0LnRyYWNlPyh0LnRyYWNlLm1hcmtlci5saW5lfHx7fSkud2lkdGg6MCkrMSktMXx8MCxoPSJtbGMiaW4gdD90Lm1sY2M9bi5saW5lU2NhbGUodC5tbGMpOmMuaXNBcnJheU9yVHlwZWRBcnJheShvLmNvbG9yKT9zLmRlZmF1bHRMaW5lOm8uY29sb3IsYy5pc0FycmF5T3JUeXBlZEFycmF5KGEuY29sb3IpJiYoZj1zLmRlZmF1bHRMaW5lLGQ9ITApLGY9Im1jImluIHQ/dC5tY2M9bi5tYXJrZXJTY2FsZSh0Lm1jKTphLmNvbG9yfHwicmdiYSgwLDAsMCwwKSIsbi5zZWxlY3RlZENvbG9yRm4mJihmPW4uc2VsZWN0ZWRDb2xvckZuKHQpKX1pZih0Lm9tKWUuY2FsbChzLnN0cm9rZSxmKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6KHB8fDEpKyJweCIsZmlsbDoibm9uZSJ9KTtlbHNle2Uuc3R5bGUoInN0cm9rZS13aWR0aCIscCsicHgiKTt2YXIgbT1hLmdyYWRpZW50LHk9dC5tZ3Q7aWYoeT9kPSEwOnk9bSYmbS50eXBlLEFycmF5LmlzQXJyYXkoeSkmJih5PXlbMF0sVFt5XXx8KHk9MCkpLHkmJiJub25lIiE9PXkpe3ZhciB4PXQubWdjO3g/ZD0hMDp4PW0uY29sb3I7dmFyIF89ci51aWQ7ZCYmKF8rPSItIit0LmkpLHYuZ3JhZGllbnQoZSxpLF8seSxbWzAseF0sWzEsZl1dLCJmaWxsIil9ZWxzZSBzLmZpbGwoZSxmKTtwJiZzLnN0cm9rZShlLGgpfX0sdi5tYWtlUG9pbnRTdHlsZUZucz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQubWFya2VyO3JldHVybiBlLm1hcmtlclNjYWxlPXYudHJ5Q29sb3JzY2FsZShyLCIiKSxlLmxpbmVTY2FsZT12LnRyeUNvbG9yc2NhbGUociwibGluZSIpLG8udHJhY2VJcyh0LCJzeW1ib2xzIikmJihlLm1zMm1yYz1kLmlzQnViYmxlKHQpP2codCk6ZnVuY3Rpb24oKXtyZXR1cm4oci5zaXplfHw2KS8yfSksdC5zZWxlY3RlZHBvaW50cyYmYy5leHRlbmRGbGF0KGUsdi5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHQpKSxlfSx2Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10Lm1hcmtlcnx8e30sYT1yLm1hcmtlcnx8e30scz1uLm1hcmtlcnx8e30sbD1pLm9wYWNpdHksdT1hLm9wYWNpdHksZj1zLm9wYWNpdHksaD12b2lkIDAhPT11LGQ9dm9pZCAwIT09ZjsoYy5pc0FycmF5T3JUeXBlZEFycmF5KGwpfHxofHxkKSYmKGUuc2VsZWN0ZWRPcGFjaXR5Rm49ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwPT09dC5tbz9pLm9wYWNpdHk6dC5tbztyZXR1cm4gdC5zZWxlY3RlZD9oP3U6ZTpkP2Y6cCplfSk7dmFyIGc9aS5jb2xvcix2PWEuY29sb3IsbT1zLmNvbG9yOyh2fHxtKSYmKGUuc2VsZWN0ZWRDb2xvckZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWNjfHxnO3JldHVybiB0LnNlbGVjdGVkP3Z8fGU6bXx8ZX0pO3ZhciB5PWkuc2l6ZSx4PWEuc2l6ZSxiPXMuc2l6ZSxfPXZvaWQgMCE9PXgsdz12b2lkIDAhPT1iO3JldHVybiBvLnRyYWNlSXModCwic3ltYm9scyIpJiYoX3x8dykmJihlLnNlbGVjdGVkU2l6ZUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubXJjfHx5LzI7cmV0dXJuIHQuc2VsZWN0ZWQ/Xz94LzI6ZTp3P2IvMjplfSksZX0sdi5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10LnRleHRmb250fHx7fSxhPXIudGV4dGZvbnR8fHt9LG89bi50ZXh0Zm9udHx8e30sbD1pLmNvbG9yLGM9YS5jb2xvcix1PW8uY29sb3I7cmV0dXJuIGUuc2VsZWN0ZWRUZXh0Q29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10LnRjfHxsO3JldHVybiB0LnNlbGVjdGVkP2N8fGU6dXx8KGM/ZTpzLmFkZE9wYWNpdHkoZSxwKSl9LGV9LHYuc2VsZWN0ZWRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXYubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyhlKSxpPWUubWFya2VyfHx7fSxhPVtdO3Iuc2VsZWN0ZWRPcGFjaXR5Rm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3Quc3R5bGUoIm9wYWNpdHkiLHIuc2VsZWN0ZWRPcGFjaXR5Rm4oZSkpfSksci5zZWxlY3RlZENvbG9yRm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3MuZmlsbCh0LHIuc2VsZWN0ZWRDb2xvckZuKGUpKX0pLHIuc2VsZWN0ZWRTaXplRm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3ZhciBuPWUubXh8fGkuc3ltYm9sfHwwLGE9ci5zZWxlY3RlZFNpemVGbihlKTt0LmF0dHIoImQiLGIodi5zeW1ib2xOdW1iZXIobiksYSkpLGUubXJjMj1hfSksYS5sZW5ndGgmJnQuZWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGU9bi5zZWxlY3QodGhpcykscj0wO3I8YS5sZW5ndGg7cisrKWFbcl0oZSx0KX0pfX0sdi50cnlDb2xvcnNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9jLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk6dDtpZihyKXt2YXIgbj1yLmNvbG9yc2NhbGUsaT1yLmNvbG9yO2lmKG4mJmMuaXNBcnJheU9yVHlwZWRBcnJheShpKSlyZXR1cm4gbC5tYWtlQ29sb3JTY2FsZUZ1bmMobC5leHRyYWN0U2NhbGUocix7Y0xldHRlcjoiYyJ9KSl9cmV0dXJuIGMuaWRlbnRpdHl9O3ZhciBBPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIE0odCxlLHIsaSl7dmFyIGE9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSksbz0tMSE9PWUuaW5kZXhPZigidG9wIik/InRvcCI6LTEhPT1lLmluZGV4T2YoImJvdHRvbSIpPyJib3R0b20iOiJtaWRkbGUiLHM9LTEhPT1lLmluZGV4T2YoImxlZnQiKT8iZW5kIjotMSE9PWUuaW5kZXhPZigicmlnaHQiKT8ic3RhcnQiOiJtaWRkbGUiLGw9aT9pLy44KzE6MCxjPSh1LmxpbmVDb3VudCh0KS0xKSpoKzEsZj1BW3NdKmwscD0uNzUqcitBW29dKmwrKEFbb10tMSkqYypyLzI7dC5hdHRyKCJ0ZXh0LWFuY2hvciIscyksYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitmKyIsIitwKyIpIil9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQudHN8fGUudGV4dGZvbnQuc2l6ZTtyZXR1cm4gaShyKSYmcj4wP3I6MH12LnRleHRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGk7aWYoZS5zZWxlY3RlZHBvaW50cyl7dmFyIGE9di5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7aT1hLnNlbGVjdGVkVGV4dENvbG9yRm59dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLG89Yy5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7aWYob3x8MD09PW8pe3ZhciBzPXQudHB8fGUudGV4dHBvc2l0aW9uLGw9Uyh0LGUpLGY9aT9pKHQpOnQudGN8fGUudGV4dGZvbnQuY29sb3I7YS5jYWxsKHYuZm9udCx0LnRmfHxlLnRleHRmb250LmZhbWlseSxsLGYpLnRleHQobykuY2FsbCh1LmNvbnZlcnRUb1RzcGFucyxyKS5jYWxsKE0scyxsLHQubXJjKX1lbHNlIGEucmVtb3ZlKCl9KX19LHYuc2VsZWN0ZWRUZXh0U3R5bGU9ZnVuY3Rpb24odCxlKXtpZih0LnNpemUoKSYmZS5zZWxlY3RlZHBvaW50cyl7dmFyIHI9di5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9ci5zZWxlY3RlZFRleHRDb2xvckZuKHQpLG89dC50cHx8ZS50ZXh0cG9zaXRpb24sbD1TKHQsZSk7cy5maWxsKGksYSksTShpLG8sbCx0Lm1yYzJ8fHQubXJjKX0pfX07dmFyIEU9LjU7ZnVuY3Rpb24gQyh0LGUscixpKXt2YXIgYT10WzBdLWVbMF0sbz10WzFdLWVbMV0scz1yWzBdLWVbMF0sbD1yWzFdLWVbMV0sYz1NYXRoLnBvdyhhKmErbypvLEUvMiksdT1NYXRoLnBvdyhzKnMrbCpsLEUvMiksZj0odSp1KmEtYypjKnMpKmksaD0odSp1Km8tYypjKmwpKmkscD0zKnUqKGMrdSksZD0zKmMqKGMrdSk7cmV0dXJuW1tuLnJvdW5kKGVbMF0rKHAmJmYvcCksMiksbi5yb3VuZChlWzFdKyhwJiZoL3ApLDIpXSxbbi5yb3VuZChlWzBdLShkJiZmL2QpLDIpLG4ucm91bmQoZVsxXS0oZCYmaC9kKSwyKV1dfXYuc21vb3Rob3Blbj1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIk0iK3Quam9pbigiTCIpO3ZhciByLG49Ik0iK3RbMF0saT1bXTtmb3Iocj0xO3I8dC5sZW5ndGgtMTtyKyspaS5wdXNoKEModFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3Iobis9IlEiK2lbMF1bMF0rIiAiK3RbMV0scj0yO3I8dC5sZW5ndGgtMTtyKyspbis9IkMiK2lbci0yXVsxXSsiICIraVtyLTFdWzBdKyIgIit0W3JdO3JldHVybiBuKz0iUSIraVt0Lmxlbmd0aC0zXVsxXSsiICIrdFt0Lmxlbmd0aC0xXX0sdi5zbW9vdGhjbG9zZWQ9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVybiJNIit0LmpvaW4oIkwiKSsiWiI7dmFyIHIsbj0iTSIrdFswXSxpPXQubGVuZ3RoLTEsYT1bQyh0W2ldLHRbMF0sdFsxXSxlKV07Zm9yKHI9MTtyPGk7cisrKWEucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKGEucHVzaChDKHRbaS0xXSx0W2ldLHRbMF0sZSkpLHI9MTtyPD1pO3IrKyluKz0iQyIrYVtyLTFdWzFdKyIgIithW3JdWzBdKyIgIit0W3JdO3JldHVybiBuKz0iQyIrYVtpXVsxXSsiICIrYVswXVswXSsiICIrdFswXSsiWiJ9O3ZhciBMPXtodjpmdW5jdGlvbih0LGUpe3JldHVybiJIIituLnJvdW5kKGVbMF0sMikrIlYiK24ucm91bmQoZVsxXSwyKX0sdmg6ZnVuY3Rpb24odCxlKXtyZXR1cm4iViIrbi5yb3VuZChlWzFdLDIpKyJIIituLnJvdW5kKGVbMF0sMil9LGh2aDpmdW5jdGlvbih0LGUpe3JldHVybiJIIituLnJvdW5kKCh0WzBdK2VbMF0pLzIsMikrIlYiK24ucm91bmQoZVsxXSwyKSsiSCIrbi5yb3VuZChlWzBdLDIpfSx2aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm4iViIrbi5yb3VuZCgodFsxXStlWzFdKS8yLDIpKyJIIituLnJvdW5kKGVbMF0sMikrIlYiK24ucm91bmQoZVsxXSwyKX19LHo9ZnVuY3Rpb24odCxlKXtyZXR1cm4iTCIrbi5yb3VuZChlWzBdLDIpKyIsIituLnJvdW5kKGVbMV0sMil9O3Yuc3RlcHM9ZnVuY3Rpb24odCl7dmFyIGU9TFt0XXx8ejtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciByPSJNIituLnJvdW5kKHRbMF1bMF0sMikrIiwiK24ucm91bmQodFswXVsxXSwyKSxpPTE7aTx0Lmxlbmd0aDtpKyspcis9ZSh0W2ktMV0sdFtpXSk7cmV0dXJuIHJ9fSx2Lm1ha2VUZXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1jLmVuc3VyZVNpbmdsZUJ5SWQobi5zZWxlY3QoImJvZHkiKSwic3ZnIiwianMtcGxvdGx5LXRlc3RlciIsZnVuY3Rpb24odCl7dC5hdHRyKGYuc3ZnQXR0cnMpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwMHB4Iix0b3A6Ii0xMDAwMHB4Iix3aWR0aDoiOTAwMHB4IixoZWlnaHQ6IjkwMDBweCIsInotaW5kZXgiOiIxIn0pfSksZT1jLmVuc3VyZVNpbmdsZSh0LCJwYXRoIiwianMtcmVmZXJlbmNlLXBvaW50IixmdW5jdGlvbih0KXt0LmF0dHIoImQiLCJNMCwwSDFWMUgwWiIpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjowLGZpbGw6ImJsYWNrIn0pfSk7di50ZXN0ZXI9dCx2LnRlc3RyZWY9ZX0sdi5zYXZlZEJCb3hlcz17fTt2YXIgTz0wO2Z1bmN0aW9uIEkodCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtdW5mb3JtYXR0ZWQiKTtpZihudWxsIT09ZSlyZXR1cm4gZSt0LmdldEF0dHJpYnV0ZSgiZGF0YS1tYXRoIikrdC5nZXRBdHRyaWJ1dGUoInRleHQtYW5jaG9yIikrdC5nZXRBdHRyaWJ1dGUoInN0eWxlIil9di5iQm94PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG87aWYocnx8KHI9SSh0KSkscil7aWYoaT12LnNhdmVkQkJveGVzW3JdKXJldHVybiBjLmV4dGVuZEZsYXQoe30saSl9ZWxzZSBpZigxPT09dC5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIHM9dC5jaGlsZE5vZGVzWzBdO2lmKHI9SShzKSl7dmFyIGw9K3MuZ2V0QXR0cmlidXRlKCJ4Iil8fDAsZj0rcy5nZXRBdHRyaWJ1dGUoInkiKXx8MCxoPXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKTtpZighaCl7dmFyIHA9di5iQm94KHMsITEscik7cmV0dXJuIGwmJihwLmxlZnQrPWwscC5yaWdodCs9bCksZiYmKHAudG9wKz1mLHAuYm90dG9tKz1mKSxwfWlmKHIrPSJ+IitsKyJ+IitmKyJ+IitoLGk9di5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gYy5leHRlbmRGbGF0KHt9LGkpfX1lP2E9dDoobz12LnRlc3Rlci5ub2RlKCksYT10LmNsb25lTm9kZSghMCksby5hcHBlbmRDaGlsZChhKSksbi5zZWxlY3QoYSkuYXR0cigidHJhbnNmb3JtIixudWxsKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsMCk7dmFyIGQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPXYudGVzdHJlZi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZXx8by5yZW1vdmVDaGlsZChhKTt2YXIgbT17aGVpZ2h0OmQuaGVpZ2h0LHdpZHRoOmQud2lkdGgsbGVmdDpkLmxlZnQtZy5sZWZ0LHRvcDpkLnRvcC1nLnRvcCxyaWdodDpkLnJpZ2h0LWcubGVmdCxib3R0b206ZC5ib3R0b20tZy50b3B9O3JldHVybiBPPj0xZTQmJih2LnNhdmVkQkJveGVzPXt9LE89MCksciYmKHYuc2F2ZWRCQm94ZXNbcl09bSksTysrLGMuZXh0ZW5kRmxhdCh7fSxtKX0sdi5zZXRDbGlwVXJsPWZ1bmN0aW9uKHQsZSxyKXtpZihlKXt2YXIgbj1yLl9jb250ZXh0LGk9bi5fZXhwb3J0ZWRQbG90PyIiOm4uX2Jhc2VVcmx8fCIiO3QuYXR0cigiY2xpcC1wYXRoIiwidXJsKCIraSsiIyIrZSsiKSIpfWVsc2UgdC5hdHRyKCJjbGlwLXBhdGgiLG51bGwpfSx2LmdldFRyYW5zbGF0ZT1mdW5jdGlvbih0KXt2YXIgZT0odFt0LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiXSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKC8uKlxidHJhbnNsYXRlXCgoLT9cZCpcLj9cZCopW14tXGRdKigtP1xkKlwuP1xkKilbXlxkXS4qLyxmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkuc3BsaXQoIiAiKTtyZXR1cm57eDorZVswXXx8MCx5OitlWzFdfHwwfX0sdi5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSIsaT10LmF0dHI/ImF0dHIiOiJzZXRBdHRyaWJ1dGUiLGE9dFtuXSgidHJhbnNmb3JtIil8fCIiO3JldHVybiBlPWV8fDAscj1yfHwwLGE9YS5yZXBsYWNlKC8oXGJ0cmFuc2xhdGVcKC4qP1wpOz8pLywiIikudHJpbSgpLGE9KGErPSIgdHJhbnNsYXRlKCIrZSsiLCAiK3IrIikiKS50cmltKCksdFtpXSgidHJhbnNmb3JtIixhKSxhfSx2LmdldFNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSJdKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoLy4qXGJzY2FsZVwoKFxkKlwuP1xkKilbXlxkXSooXGQqXC4/XGQqKVteXGRdLiovLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKCIgIil9KS5zcGxpdCgiICIpO3JldHVybnt4OitlWzBdfHwxLHk6K2VbMV18fDF9fSx2LnNldFNjYWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGk9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixhPXRbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwxLHI9cnx8MSxhPWEucmVwbGFjZSgvKFxic2NhbGVcKC4qP1wpOz8pLywiIikudHJpbSgpLGE9KGErPSIgc2NhbGUoIitlKyIsICIrcisiKSIpLnRyaW0oKSx0W2ldKCJ0cmFuc2Zvcm0iLGEpLGF9O3ZhciBEPS9ccypzYy4qLzt2LnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7aWYoZT1lfHwxLHI9cnx8MSx0KXt2YXIgbj0xPT09ZSYmMT09PXI/IiI6IiBzY2FsZSgiK2UrIiwiK3IrIikiO3QuZWFjaChmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKEQsIiIpO3Q9KHQrPW4pLnRyaW0oKSx0aGlzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KX0pfX07dmFyIFA9L3RyYW5zbGF0ZVwoW14pXSpcKVxzKiQvO3Yuc2V0VGV4dFBvaW50c1NjYWxlPWZ1bmN0aW9uKHQsZSxyKXt0JiZ0LmVhY2goZnVuY3Rpb24oKXt2YXIgdCxpPW4uc2VsZWN0KHRoaXMpLGE9aS5zZWxlY3QoInRleHQiKTtpZihhLm5vZGUoKSl7dmFyIG89cGFyc2VGbG9hdChhLmF0dHIoIngiKXx8MCkscz1wYXJzZUZsb2F0KGEuYXR0cigieSIpfHwwKSxsPShpLmF0dHIoInRyYW5zZm9ybSIpfHwiIikubWF0Y2goUCk7dD0xPT09ZSYmMT09PXI/W106WyJ0cmFuc2xhdGUoIitvKyIsIitzKyIpIiwic2NhbGUoIitlKyIsIityKyIpIiwidHJhbnNsYXRlKCIrLW8rIiwiKy1zKyIpIl0sbCYmdC5wdXNoKGwpLGkuYXR0cigidHJhbnNmb3JtIix0LmpvaW4oIiAiKSl9fSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY3MiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6Njc2LCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6Njc4LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTA2OCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL2NvbG9yIjo1NzcsIi4uL2NvbG9yc2NhbGUiOjU4OSwiLi9zeW1ib2xfZGVmcyI6NTk5LGQzOjE1NCwiZmFzdC1pc251bWVyaWMiOjIyMSx0aW55Y29sb3IyOjUyMX1dLDU5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpO2UuZXhwb3J0cz17Y2lyY2xlOntuOjAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn19LHNxdWFyZTp7bjoxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifX0sZGlhbW9uZDp7bjoyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIloifX0sY3Jvc3M6e246MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjQqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK3IrIiwiK2UrIkgiK2UrIlYiK3IrIkgtIitlKyJWIitlKyJILSIrcisiVi0iK2UrIkgtIitlKyJWLSIrcisiSCIrZSsiVi0iK2UrIkgiK3IrIloifX0seDp7bjo0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOCp0L01hdGguc3FydCgyKSwyKSxyPSJsIitlKyIsIitlLGk9ImwiK2UrIiwtIitlLGE9ImwtIitlKyIsLSIrZSxvPSJsLSIrZSsiLCIrZTtyZXR1cm4iTTAsIitlK3IraSthK2krYStvK2ErbytyK28rcisiWiJ9fSwidHJpYW5nbGUtdXAiOntuOjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIitlKyIsIituLnJvdW5kKHQvMiwyKSsiSCIrZSsiTDAsLSIrbi5yb3VuZCh0LDIpKyJaIn19LCJ0cmlhbmdsZS1kb3duIjp7bjo2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrZSsiLC0iK24ucm91bmQodC8yLDIpKyJIIitlKyJMMCwiK24ucm91bmQodCwyKSsiWiJ9fSwidHJpYW5nbGUtbGVmdCI6e246NyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTSIrbi5yb3VuZCh0LzIsMikrIiwtIitlKyJWIitlKyJMLSIrbi5yb3VuZCh0LDIpKyIsMFoifX0sInRyaWFuZ2xlLXJpZ2h0Ijp7bjo4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrbi5yb3VuZCh0LzIsMikrIiwtIitlKyJWIitlKyJMIituLnJvdW5kKHQsMikrIiwwWiJ9fSwidHJpYW5nbGUtbmUiOntuOjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNLSIrcisiLC0iK2UrIkgiK2UrIlYiK3IrIloifX0sInRyaWFuZ2xlLXNlIjp7bjoxMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK2UrIiwtIityKyJWIitlKyJILSIrcisiWiJ9fSwidHJpYW5nbGUtc3ciOntuOjExLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrcisiLCIrZSsiSC0iK2UrIlYtIityKyJaIn19LCJ0cmlhbmdsZS1udyI6e246MTIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNLSIrZSsiLCIrcisiVi0iK2UrIkgiK3IrIloifX0scGVudGFnb246e246MTMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45NTEqdCwyKSxyPW4ucm91bmQoLjU4OCp0LDIpLGk9bi5yb3VuZCgtdCwyKSxhPW4ucm91bmQoLS4zMDkqdCwyKTtyZXR1cm4iTSIrZSsiLCIrYSsiTCIrcisiLCIrbi5yb3VuZCguODA5KnQsMikrIkgtIityKyJMLSIrZSsiLCIrYSsiTDAsIitpKyJaIn19LGhleGFnb246e246MTQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTSIraSsiLC0iK3IrIlYiK3IrIkwwLCIrZSsiTC0iK2krIiwiK3IrIlYtIityKyJMMCwtIitlKyJaIn19LGhleGFnb24yOntuOjE1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0tIityKyIsIitpKyJIIityKyJMIitlKyIsMEwiK3IrIiwtIitpKyJILSIrcisiTC0iK2UrIiwwWiJ9fSxvY3RhZ29uOntuOjE2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTI0KnQsMikscj1uLnJvdW5kKC4zODMqdCwyKTtyZXR1cm4iTS0iK3IrIiwtIitlKyJIIityKyJMIitlKyIsLSIrcisiViIrcisiTCIrcisiLCIrZSsiSC0iK3IrIkwtIitlKyIsIityKyJWLSIrcisiWiJ9fSxzdGFyOntuOjE3LGY6ZnVuY3Rpb24odCl7dmFyIGU9MS40KnQscj1uLnJvdW5kKC4yMjUqZSwyKSxpPW4ucm91bmQoLjk1MSplLDIpLGE9bi5yb3VuZCguMzYzKmUsMiksbz1uLnJvdW5kKC41ODgqZSwyKSxzPW4ucm91bmQoLWUsMiksbD1uLnJvdW5kKC0uMzA5KmUsMiksYz1uLnJvdW5kKC4xMTgqZSwyKSx1PW4ucm91bmQoLjgwOSplLDIpO3JldHVybiJNIityKyIsIitsKyJIIitpKyJMIithKyIsIitjKyJMIitvKyIsIit1KyJMMCwiK24ucm91bmQoLjM4MiplLDIpKyJMLSIrbysiLCIrdSsiTC0iK2ErIiwiK2MrIkwtIitpKyIsIitsKyJILSIrcisiTDAsIitzKyJaIn19LGhleGFncmFtOntuOjE4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNjYqdCwyKSxyPW4ucm91bmQoLjM4KnQsMiksaT1uLnJvdW5kKC43Nip0LDIpO3JldHVybiJNLSIraSsiLDBsLSIrcisiLC0iK2UrImgiK2krImwiK3IrIiwtIitlKyJsIityKyIsIitlKyJoIitpKyJsLSIrcisiLCIrZSsibCIrcisiLCIrZSsiaC0iK2krImwtIityKyIsIitlKyJsLSIrcisiLC0iK2UrImgtIitpKyJaIn19LCJzdGFyLXRyaWFuZ2xlLXVwIjp7bjoxOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz0iQSAiK2ErIiwiK2ErIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLCIrcitvK2UrIiwiK3IrbysiMCwtIitpK28rIi0iK2UrIiwiK3IrIloifX0sInN0YXItdHJpYW5nbGUtZG93biI6e246MjAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGk9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoNCp0LDIpLG89IkEgIithKyIsIithKyIgMCAwIDEgIjtyZXR1cm4iTSIrZSsiLC0iK3IrbysiLSIrZSsiLC0iK3IrbysiMCwiK2krbytlKyIsLSIrcisiWiJ9fSwic3Rhci1zcXVhcmUiOntuOjIxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjEqdCwyKSxyPW4ucm91bmQoMip0LDIpLGk9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwtIitlK2krIi0iK2UrIiwiK2UraStlKyIsIitlK2krZSsiLC0iK2UraSsiLSIrZSsiLC0iK2UrIloifX0sInN0YXItZGlhbW9uZCI6e246MjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCgxLjkqdCwyKSxpPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsMCIraSsiMCwiK2UraStlKyIsMCIraSsiMCwtIitlK2krIi0iK2UrIiwwWiJ9fSwiZGlhbW9uZC10YWxsIjp7bjoyMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjcqdCwyKSxyPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrcisiTCIrZSsiLDBMMCwtIityKyJMLSIrZSsiLDBaIn19LCJkaWFtb25kLXdpZGUiOntuOjI0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoLjcqdCwyKTtyZXR1cm4iTTAsIityKyJMIitlKyIsMEwwLC0iK3IrIkwtIitlKyIsMFoifX0saG91cmdsYXNzOntuOjI1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJILSIrZSsiTCIrZSsiLC0iK2UrIkgtIitlKyJaIn0sbm9Eb3Q6ITB9LGJvd3RpZTp7bjoyNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiVi0iK2UrIkwtIitlKyIsIitlKyJWLSIrZSsiWiJ9LG5vRG90OiEwfSwiY2lyY2xlLWNyb3NzIjp7bjoyNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sImNpcmNsZS14Ijp7bjoyOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC9NYXRoLnNxcnQoMiksMik7cmV0dXJuIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityKyJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLWNyb3NzIjp7bjoyOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUteCI6e246MzAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZSsiTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlKyJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQtY3Jvc3MiOntuOjMxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIlpNMCwtIitlKyJWIitlKyJNLSIrZSsiLDBIIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQteCI6e246MzIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpLHI9bi5yb3VuZCguNjUqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIlpNLSIrcisiLC0iK3IrIkwiK3IrIiwiK3IrIk0tIityKyIsIityKyJMIityKyIsLSIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjcm9zcy10aGluIjp7bjozMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sIngtdGhpbiI6e246MzQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZSsiTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGFzdGVyaXNrOntuOjM1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoLjg1KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGhhc2g6e246MzYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQvMiwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrcisiVi0iK3IrIm0tIityKyIsMFYiK3IrIk0iK3IrIiwiK2UrIkgtIityKyJtMCwtIityKyJIIityfSxuZWVkTGluZTohMCxub0ZpbGw6ITB9LCJ5LXVwIjp7bjozNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrZSsiLCIraSsiTDAsME0iK2UrIiwiK2krIkwwLDBNMCwtIityKyJMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieS1kb3duIjp7bjozOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrZSsiLC0iK2krIkwwLDBNIitlKyIsLSIraSsiTDAsME0wLCIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktbGVmdCI6e246MzksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTSIraSsiLCIrZSsiTDAsME0iK2krIiwtIitlKyJMMCwwTS0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktcmlnaHQiOntuOjQwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0tIitpKyIsIitlKyJMMCwwTS0iK2krIiwtIitlKyJMMCwwTSIrcisiLDBMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1ldyI6e246NDEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNIitlKyIsMEgtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW5zIjp7bjo0MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbmUiOntuOjQzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbnciOntuOjQ0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH19fSx7ZDM6MTU0fV0sNjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJjZW50IiwiY29uc3RhbnQiLCJzcXJ0IiwiZGF0YSJdLGVkaXRUeXBlOiJjYWxjIn0sc3ltbWV0cmljOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LGFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGFycmF5bWludXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlbWludXM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHRyYWNlcmVmOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0sdHJhY2VyZWZtaW51czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvcHlfenN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIn19fX0se31dLDYwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4vY29tcHV0ZV9lcnJvciIpO2Z1bmN0aW9uIGwodCxlLHIsaSl7dmFyIGw9ZVsiZXJyb3JfIitpXXx8e30sYz1bXTtpZihsLnZpc2libGUmJi0xIT09WyJsaW5lYXIiLCJsb2ciXS5pbmRleE9mKHIudHlwZSkpe2Zvcih2YXIgdT1zKGwpLGY9MDtmPHQubGVuZ3RoO2YrKyl7dmFyIGg9dFtmXSxwPWguaTtpZih2b2lkIDA9PT1wKXA9ZjtlbHNlIGlmKG51bGw9PT1wKWNvbnRpbnVlO3ZhciBkPWhbaV07aWYobihyLmMybChkKSkpe3ZhciBnPXUoZCxwKTtpZihuKGdbMF0pJiZuKGdbMV0pKXt2YXIgdj1oW2krInMiXT1kLWdbMF0sbT1oW2krImgiXT1kK2dbMV07Yy5wdXNoKHYsbSl9fX12YXIgeT1yLl9pZCx4PWUuX2V4dHJlbWVzW3ldLGI9YS5maW5kRXh0cmVtZXMocixjLG8uZXh0ZW5kRmxhdCh7dG96ZXJvOngub3B0cy50b3plcm99LHtwYWRkZWQ6ITB9KSk7eC5taW49eC5taW4uY29uY2F0KGIubWluKSx4Lm1heD14Lm1heC5jb25jYXQoYi5tYXgpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2FsY2RhdGEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLG89blswXS50cmFjZTtpZighMD09PW8udmlzaWJsZSYmaS50cmFjZUlzKG8sImVycm9yQmFyc09LIikpe3ZhciBzPWEuZ2V0RnJvbUlkKHQsby54YXhpcyksYz1hLmdldEZyb21JZCh0LG8ueWF4aXMpO2wobixvLHMsIngiKSxsKG4sbyxjLCJ5Iil9fX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vY29tcHV0ZV9lcnJvciI6NjAyLCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4icGVyY2VudCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0KmUvMTAwKX06ImNvbnN0YW50Ij09PXQ/ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnMoZSl9OiJzcXJ0Ij09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLmFicyh0KSl9OnZvaWQgMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlLHI9dC5zeW1tZXRyaWM7aWYoImRhdGEiPT09ZSl7dmFyIGk9dC5hcnJheXx8W107aWYocilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXTtyZXR1cm5bcixyXX07dmFyIGE9dC5hcnJheW1pbnVzfHxbXTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXSxuPSthW2VdO3JldHVybiBpc05hTihyKSYmaXNOYU4obik/W05hTixOYU5dOltufHwwLHJ8fDBdfX12YXIgbz1uKGUsdC52YWx1ZSkscz1uKGUsdC52YWx1ZW1pbnVzKTtyZXR1cm4gcnx8dm9pZCAwPT09dC52YWx1ZW1pbnVzP2Z1bmN0aW9uKHQpe3ZhciBlPW8odCk7cmV0dXJuW2UsZV19OmZ1bmN0aW9uKHQpe3JldHVybltzKHQpLG8odCldfX19LHt9XSw2MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz0iZXJyb3JfIitsLmF4aXMsdT1vLm5ld0NvbnRhaW5lcihlLGMpLGY9dFtjXXx8e307ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBhLmNvZXJjZShmLHUscyx0LGUpfWlmKCExIT09aCgidmlzaWJsZSIsdm9pZCAwIT09Zi5hcnJheXx8dm9pZCAwIT09Zi52YWx1ZXx8InNxcnQiPT09Zi50eXBlKSl7dmFyIHA9aCgidHlwZSIsImFycmF5ImluIGY/ImRhdGEiOiJwZXJjZW50IiksZD0hMDsic3FydCIhPT1wJiYoZD1oKCJzeW1tZXRyaWMiLCEoKCJkYXRhIj09PXA/ImFycmF5bWludXMiOiJ2YWx1ZW1pbnVzIilpbiBmKSkpLCJkYXRhIj09PXA/KGgoImFycmF5IiksaCgidHJhY2VyZWYiKSxkfHwoaCgiYXJyYXltaW51cyIpLGgoInRyYWNlcmVmbWludXMiKSkpOiJwZXJjZW50IiE9PXAmJiJjb25zdGFudCIhPT1wfHwoaCgidmFsdWUiKSxkfHxoKCJ2YWx1ZW1pbnVzIikpO3ZhciBnPSJjb3B5XyIrbC5pbmhlcml0KyJzdHlsZSI7aWYobC5pbmhlcml0KShlWyJlcnJvcl8iK2wuaW5oZXJpdF18fHt9KS52aXNpYmxlJiZoKGcsIShmLmNvbG9yfHxuKGYudGhpY2tuZXNzKXx8bihmLndpZHRoKSkpO2wuaW5oZXJpdCYmdVtnXXx8KGgoImNvbG9yIixyKSxoKCJ0aGlja25lc3MiKSxoKCJ3aWR0aCIsaS50cmFjZUlzKGUsImdsM2QiKT8wOjQpKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vYXR0cmlidXRlcyI6NjAwLCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30sYSl9O2RlbGV0ZSBvLmVycm9yX3guY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3pzdHlsZSxkZWxldGUgby5lcnJvcl95LmNvcHlfeXN0eWxlO3ZhciBzPXtlcnJvcl94Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl95Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl96Om4uZXh0ZW5kRmxhdCh7fSxhKX07ZGVsZXRlIHMuZXJyb3JfeC5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl95LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3ouY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3Jfei5jb3B5X3pzdHlsZSxlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZXJyb3JiYXJzIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjpvLGJhcjpvLGhpc3RvZ3JhbTpvLHNjYXR0ZXIzZDppKHMsImNhbGMiLCJuZXN0ZWQiKSxzY2F0dGVyZ2w6aShvLCJjYWxjIiwibmVzdGVkIil9fSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxtYWtlQ29tcHV0ZUVycm9yOnQoIi4vY29tcHV0ZV9lcnJvciIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVySW5mbzpmdW5jdGlvbih0LGUscil7KGUuZXJyb3JfeXx8e30pLnZpc2libGUmJihyLnllcnI9dC55aC10LnksZS5lcnJvcl95LnN5bW1ldHJpY3x8KHIueWVycm5lZz10LnktdC55cykpOyhlLmVycm9yX3h8fHt9KS52aXNpYmxlJiYoci54ZXJyPXQueGgtdC54LGUuZXJyb3JfeC5zeW1tZXRyaWN8fChyLnhlcnJuZWc9dC54LXQueHMpKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4vYXR0cmlidXRlcyI6NjAwLCIuL2NhbGMiOjYwMSwiLi9jb21wdXRlX2Vycm9yIjo2MDIsIi4vZGVmYXVsdHMiOjYwMywiLi9wbG90Ijo2MDUsIi4vc3R5bGUiOjYwNn1dLDYwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL2RyYXdpbmciKSxvPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3ZhciBsPXIueGF4aXMsYz1yLnlheGlzLHU9cyYmcy5kdXJhdGlvbj4wO2UuZWFjaChmdW5jdGlvbihlKXt2YXIgZixoPWVbMF0udHJhY2UscD1oLmVycm9yX3h8fHt9LGQ9aC5lcnJvcl95fHx7fTtoLmlkcyYmKGY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KTt2YXIgZz1vLmhhc01hcmtlcnMoaCkmJmgubWFya2VyLm1heGRpc3BsYXllZD4wO2QudmlzaWJsZXx8cC52aXNpYmxlfHwoZT1bXSk7dmFyIHY9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLmVycm9yYmFyIikuZGF0YShlLGYpO2lmKHYuZXhpdCgpLnJlbW92ZSgpLGUubGVuZ3RoKXtwLnZpc2libGV8fHYuc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnJlbW92ZSgpLGQudmlzaWJsZXx8di5zZWxlY3RBbGwoInBhdGgueWVycm9yIikucmVtb3ZlKCksdi5zdHlsZSgib3BhY2l0eSIsMSk7dmFyIG09di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVycm9yYmFyIiwhMCk7dSYmbS5zdHlsZSgib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwxKSxhLnNldENsaXBVcmwodixyLmxheWVyQ2xpcElkLHQpLHYuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17eDplLmMycCh0LngpLHk6ci5jMnAodC55KX07dm9pZCAwIT09dC55aCYmKG4ueWg9ci5jMnAodC55aCksbi55cz1yLmMycCh0LnlzKSxpKG4ueXMpfHwobi5ub1lTPSEwLG4ueXM9ci5jMnAodC55cywhMCkpKTt2b2lkIDAhPT10LnhoJiYobi54aD1lLmMycCh0LnhoKSxuLnhzPWUuYzJwKHQueHMpLGkobi54cyl8fChuLm5vWFM9ITAsbi54cz1lLmMycCh0LnhzLCEwKSkpO3JldHVybiBufSh0LGwsYyk7aWYoIWd8fHQudmlzKXt2YXIgYSxvPWUuc2VsZWN0KCJwYXRoLnllcnJvciIpO2lmKGQudmlzaWJsZSYmaShyLngpJiZpKHIueWgpJiZpKHIueXMpKXt2YXIgZj1kLndpZHRoO2E9Ik0iKyhyLngtZikrIiwiK3IueWgrImgiKzIqZisibS0iK2YrIiwwViIrci55cyxyLm5vWVN8fChhKz0ibS0iK2YrIiwwaCIrMipmKSwhby5zaXplKCk/bz1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2xhc3NlZCgieWVycm9yIiwhMCk6dSYmKG89by50cmFuc2l0aW9uKCkuZHVyYXRpb24ocy5kdXJhdGlvbikuZWFzZShzLmVhc2luZykpLG8uYXR0cigiZCIsYSl9ZWxzZSBvLnJlbW92ZSgpO3ZhciBoPWUuc2VsZWN0KCJwYXRoLnhlcnJvciIpO2lmKHAudmlzaWJsZSYmaShyLnkpJiZpKHIueGgpJiZpKHIueHMpKXt2YXIgdj0ocC5jb3B5X3lzdHlsZT9kOnApLndpZHRoO2E9Ik0iK3IueGgrIiwiKyhyLnktdikrInYiKzIqdisibTAsLSIrdisiSCIrci54cyxyLm5vWFN8fChhKz0ibTAsLSIrdisidiIrMip2KSwhaC5zaXplKCk/aD1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2xhc3NlZCgieGVycm9yIiwhMCk6dSYmKGg9aC50cmFuc2l0aW9uKCkuZHVyYXRpb24ocy5kdXJhdGlvbikuZWFzZShzLmVhc2luZykpLGguYXR0cigiZCIsYSl9ZWxzZSBoLnJlbW92ZSgpfX0pfX0pfX0seyIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiLi4vZHJhd2luZyI6NTk4LGQzOjE1NCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDYwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLmVycm9yX3l8fHt9LGE9ZS5lcnJvcl94fHx7fSxvPW4uc2VsZWN0KHRoaXMpO28uc2VsZWN0QWxsKCJwYXRoLnllcnJvciIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIudGhpY2tuZXNzKyJweCIpLmNhbGwoaS5zdHJva2Usci5jb2xvciksYS5jb3B5X3lzdHlsZSYmKGE9ciksby5zZWxlY3RBbGwoInBhdGgueGVycm9yIikuc3R5bGUoInN0cm9rZS13aWR0aCIsYS50aGlja25lc3MrInB4IikuY2FsbChpLnN0cm9rZSxhLmNvbG9yKX0pfX0seyIuLi9jb2xvciI6NTc3LGQzOjE1NH1dLDYwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0sZm9udDpuKHthcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0pLG5hbWVsZW5ndGg6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxhcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NzR9XSw2MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIGEodCxlLHIsaSl7aT1pfHxuLmlkZW50aXR5LEFycmF5LmlzQXJyYXkodCkmJihlWzBdW3JdPWkodCkpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbi5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzplfSx7X21vZHVsZTp0Ll9tb2R1bGV9LHIpfX1mb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXSxjPWxbMF0udHJhY2U7aWYoIWkudHJhY2VJcyhjLCJwaWUiKSl7dmFyIHU9aS50cmFjZUlzKGMsIjJkTWFwIik/YTpuLmZpbGxBcnJheTt1KGMuaG92ZXJpbmZvLGwsImhpIixvKGMpKSxjLmhvdmVydGVtcGxhdGUmJnUoYy5ob3ZlcnRlbXBsYXRlLGwsImh0IiksYy5ob3ZlcmxhYmVsJiYodShjLmhvdmVybGFiZWwuYmdjb2xvcixsLCJoYmciKSx1KGMuaG92ZXJsYWJlbC5ib3JkZXJjb2xvcixsLCJoYmMiKSx1KGMuaG92ZXJsYWJlbC5mb250LnNpemUsbCwiaHRzIiksdShjLmhvdmVybGFiZWwuZm9udC5jb2xvcixsLCJodGMiKSx1KGMuaG92ZXJsYWJlbC5mb250LmZhbWlseSxsLCJodGYiKSx1KGMuaG92ZXJsYWJlbC5uYW1lbGVuZ3RoLGwsImhubCIpKX19fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOX1dLDYwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9ob3ZlciIpLmhvdmVyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9bi5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwib25DbGljayIpKHQsdC5faG92ZXJkYXRhKTtmdW5jdGlvbiBvKCl7dC5lbWl0KCJwbG90bHlfY2xpY2siLHtwb2ludHM6dC5faG92ZXJkYXRhLGV2ZW50OmV9KX12b2lkIDAhPT1yJiZpKHQsZSxyLCEwKSx0Ll9ob3ZlcmRhdGEmJmUmJmUudGFyZ2V0JiYoYSYmYS50aGVuP2EudGhlbihvKTpvKCksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX0seyIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2hvdmVyIjo2MTN9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtZQU5HTEU6NjAsSE9WRVJBUlJPV1NJWkU6NixIT1ZFUlRFWFRQQUQ6MyxIT1ZFUkZPTlRTSVpFOjEzLEhPVkVSRk9OVDoiQXJpYWwsIHNhbnMtc2VyaWYiLEhPVkVSTUlOVElNRTo1MCxIT1ZFUklEOiItaG92ZXIifX0se31dLDYxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2EodCxlLGZ1bmN0aW9uKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9LG8uaG92ZXJsYWJlbCl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2F0dHJpYnV0ZXMiOjYwNywiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2MTR9XSw2MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5nZXRTdWJwbG90PWZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnBsb3R8fHQueGF4aXMrdC55YXhpc3x8dC5nZW99LHIuaXNUcmFjZUluU3VicGxvdHM9ZnVuY3Rpb24odCxlKXtpZigic3Bsb20iPT09dC50eXBlKXtmb3IodmFyIG49dC54YXhlc3x8W10saT10LnlheGVzfHxbXSxhPTA7YTxuLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYoLTEhPT1lLmluZGV4T2YoblthXStpW29dKSlyZXR1cm4hMDtyZXR1cm4hMX1yZXR1cm4tMSE9PWUuaW5kZXhPZihyLmdldFN1YnBsb3QodCkpfSxyLmZsYXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT1lO3JldHVybiByfSxyLnAyYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyW25dPXRbbl0ucDJjKGUpO3JldHVybiByfSxyLmdldERpc3RhbmNlRnVuY3Rpb249ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuImNsb3Nlc3QiPT09dD9pfHxyLnF1YWRyYXR1cmUoZSxuKToieCI9PT10P2U6bn0sci5nZXRDbG9zZXN0PWZ1bmN0aW9uKHQsZSxyKXtpZighMSE9PXIuaW5kZXgpci5pbmRleD49MCYmci5pbmRleDx0Lmxlbmd0aD9yLmRpc3RhbmNlPTA6ci5pbmRleD0hMTtlbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT1lKHRbbl0pO2k8PXIuZGlzdGFuY2UmJihyLmluZGV4PW4sci5kaXN0YW5jZT1pKX1yZXR1cm4gcn0sci5pbmJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQqZTwwfHwwPT09dD9yOjEvMH0sci5xdWFkcmF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXQociksaT1lKHIpO3JldHVybiBNYXRoLnNxcnQobipuK2kqaSl9fSxyLm1ha2VFdmVudERhdGE9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPSJpbmRleCJpbiB0P3QuaW5kZXg6dC5wb2ludE51bWJlcixhPXtkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmUsY3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcjppfTtpZihlLl9pbmRleFRvUG9pbnRzKXt2YXIgbz1lLl9pbmRleFRvUG9pbnRzW2ldOzE9PT1vLmxlbmd0aD9hLnBvaW50SW5kZXg9b1swXTphLnBvaW50SW5kaWNlcz1vfWVsc2UgYS5wb2ludEluZGV4PWk7cmV0dXJuIGUuX21vZHVsZS5ldmVudERhdGE/YT1lLl9tb2R1bGUuZXZlbnREYXRhKGEsdCxlLG4saSk6KCJ4VmFsImluIHQ/YS54PXQueFZhbDoieCJpbiB0JiYoYS54PXQueCksInlWYWwiaW4gdD9hLnk9dC55VmFsOiJ5ImluIHQmJihhLnk9dC55KSx0LnhhJiYoYS54YXhpcz10LnhhKSx0LnlhJiYoYS55YXhpcz10LnlhKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmKGEuej10LnpMYWJlbFZhbCkpLHIuYXBwZW5kQXJyYXlQb2ludFZhbHVlKGEsZSxpKSxhfSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZT1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYXJyYXlBdHRycztpZihpKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9YShsKTtpZih2b2lkIDA9PT10W2NdKXt2YXIgdT1vKG4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxyKTt2b2lkIDAhPT11JiYodFtjXT11KX19fSxyLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYXJyYXlBdHRycztpZihpKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9YShsKTtpZih2b2lkIDA9PT10W2NdKXtmb3IodmFyIHU9bi5uZXN0ZWRQcm9wZXJ0eShlLGwpLmdldCgpLGY9bmV3IEFycmF5KHIubGVuZ3RoKSxoPTA7aDxyLmxlbmd0aDtoKyspZltoXT1vKHUscltoXSk7dFtjXT1mfX19O3ZhciBpPXtpZHM6ImlkIixsb2NhdGlvbnM6ImxvY2F0aW9uIixsYWJlbHM6ImxhYmVsIix2YWx1ZXM6InZhbHVlIiwibWFya2VyLmNvbG9ycyI6ImNvbG9yIixwYXJlbnRzOiJwYXJlbnQifTtmdW5jdGlvbiBhKHQpe3JldHVybiBpW3RdfHx0fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9BcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbZVswXV0pP3RbZVswXV1bZVsxXV06dm9pZCAwOnRbZV19fSx7Ii4uLy4uL2xpYiI6NzAwfV0sNjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9saWIvZXZlbnRzIiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3IiKSx1PXQoIi4uL2RyYXdpbmciKSxmPXQoIi4uL2NvbG9yIiksaD10KCIuLi9kcmFnZWxlbWVudCIpLHA9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxkPXQoIi4uLy4uL3JlZ2lzdHJ5IiksZz10KCIuL2hlbHBlcnMiKSx2PXQoIi4vY29uc3RhbnRzIiksbT12LllBTkdMRSx5PU1hdGguUEkqbS8xODAseD0xL01hdGguc2luKHkpLGI9TWF0aC5jb3MoeSksXz1NYXRoLnNpbih5KSx3PXYuSE9WRVJBUlJPV1NJWkUsaz12LkhPVkVSVEVYVFBBRDtyLmhvdmVyPWZ1bmN0aW9uKHQsZSxyLGEpe3Q9by5nZXRHcmFwaERpdih0KSxvLnRocm90dGxlKHQuX2Z1bGxMYXlvdXQuX3VpZCt2LkhPVkVSSUQsdi5IT1ZFUk1JTlRJTUUsZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlLHIsYSl7cnx8KHI9Inh5Iik7dmFyIGw9QXJyYXkuaXNBcnJheShyKT9yOltyXSx1PXQuX2Z1bGxMYXlvdXQsdj11Ll9wbG90c3x8W10sbT12W3JdLHk9dS5faGFzKCJjYXJ0ZXNpYW4iKTtpZihtKXt2YXIgYj1tLm92ZXJsYXlzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pO2w9bC5jb25jYXQoYil9Zm9yKHZhciBfPWwubGVuZ3RoLHc9bmV3IEFycmF5KF8pLGs9bmV3IEFycmF5KF8pLFQ9ITEsTD0wO0w8XztMKyspe3ZhciB6PWxbTF0sTz12W3pdO2lmKE8pVD0hMCx3W0xdPXAuZ2V0RnJvbUlkKHQsTy54YXhpcy5faWQpLGtbTF09cC5nZXRGcm9tSWQodCxPLnlheGlzLl9pZCk7ZWxzZXt2YXIgST11W3pdLl9zdWJwbG90O3dbTF09SS54YXhpcyxrW0xdPUkueWF4aXN9fXZhciBEPWUuaG92ZXJtb2RlfHx1LmhvdmVybW9kZTtEJiYhVCYmKEQ9ImNsb3Nlc3QiKTtpZigtMT09PVsieCIsInkiLCJjbG9zZXN0Il0uaW5kZXhPZihEKXx8IXQuY2FsY2RhdGF8fHQucXVlcnlTZWxlY3RvcigiLnpvb21ib3giKXx8dC5fZHJhZ2dpbmcpcmV0dXJuIGgudW5ob3ZlclJhdyh0LGUpO3ZhciBQLFIsRixCLE4saixWLFUscSxILEcsWSxXLFg9LTE9PT11LmhvdmVyZGlzdGFuY2U/MS8wOnUuaG92ZXJkaXN0YW5jZSxaPS0xPT09dS5zcGlrZWRpc3RhbmNlPzEvMDp1LnNwaWtlZGlzdGFuY2UsJD1bXSxKPVtdLEs9e2hMaW5lUG9pbnQ6bnVsbCx2TGluZVBvaW50Om51bGx9LFE9ITE7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoRD0iYXJyYXkiLEY9MDtGPGUubGVuZ3RoO0YrKykoTj10LmNhbGNkYXRhW2VbRl0uY3VydmVOdW1iZXJ8fDBdKSYmKGo9TlswXS50cmFjZSwic2tpcCIhPT1OWzBdLnRyYWNlLmhvdmVyaW5mbyYmKEoucHVzaChOKSwiaCI9PT1qLm9yaWVudGF0aW9uJiYoUT0hMCkpKTtlbHNle2ZvcihCPTA7Qjx0LmNhbGNkYXRhLmxlbmd0aDtCKyspTj10LmNhbGNkYXRhW0JdLCJza2lwIiE9PShqPU5bMF0udHJhY2UpLmhvdmVyaW5mbyYmZy5pc1RyYWNlSW5TdWJwbG90cyhqLGwpJiYoSi5wdXNoKE4pLCJoIj09PWoub3JpZW50YXRpb24mJihRPSEwKSk7dmFyIHR0LGV0LHJ0PSFlLnRhcmdldDtpZihydCl0dD0ieHB4ImluIGU/ZS54cHg6d1swXS5fbGVuZ3RoLzIsZXQ9InlweCJpbiBlP2UueXB4OmtbMF0uX2xlbmd0aC8yO2Vsc2V7aWYoITE9PT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVob3ZlciIsZSkpcmV0dXJuO3ZhciBudD1lLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0dD1lLmNsaWVudFgtbnQubGVmdCxldD1lLmNsaWVudFktbnQudG9wLHR0PDB8fHR0PndbMF0uX2xlbmd0aHx8ZXQ8MHx8ZXQ+a1swXS5fbGVuZ3RoKXJldHVybiBoLnVuaG92ZXJSYXcodCxlKX1pZihlLnBvaW50ZXJYPXR0K3dbMF0uX29mZnNldCxlLnBvaW50ZXJZPWV0K2tbMF0uX29mZnNldCxQPSJ4dmFsImluIGU/Zy5mbGF0KGwsZS54dmFsKTpnLnAyYyh3LHR0KSxSPSJ5dmFsImluIGU/Zy5mbGF0KGwsZS55dmFsKTpnLnAyYyhrLGV0KSwhaShQWzBdKXx8IWkoUlswXSkpcmV0dXJuIG8ud2FybigiRnguaG92ZXIgZmFpbGVkIixlLHQpLGgudW5ob3ZlclJhdyh0LGUpfXZhciBpdD0xLzA7Zm9yKEI9MDtCPEoubGVuZ3RoO0IrKylpZigoTj1KW0JdKSYmTlswXSYmTlswXS50cmFjZSYmITA9PT1OWzBdLnRyYWNlLnZpc2libGUmJihqPU5bMF0udHJhY2UsLTE9PT1bImNhcnBldCIsImNvbnRvdXJjYXJwZXQiXS5pbmRleE9mKGouX21vZHVsZS5uYW1lKSkpe2lmKCJzcGxvbSI9PT1qLnR5cGU/Vj1sW1U9MF06KFY9Zy5nZXRTdWJwbG90KGopLFU9bC5pbmRleE9mKFYpKSxxPUQsWT17Y2Q6Tix0cmFjZTpqLHhhOndbVV0seWE6a1tVXSxtYXhIb3ZlckRpc3RhbmNlOlgsbWF4U3Bpa2VEaXN0YW5jZTpaLGluZGV4OiExLGRpc3RhbmNlOk1hdGgubWluKGl0LFgpLHNwaWtlRGlzdGFuY2U6MS8wLHhTcGlrZTp2b2lkIDAseVNwaWtlOnZvaWQgMCxjb2xvcjpmLmRlZmF1bHRMaW5lLG5hbWU6ai5uYW1lLHgwOnZvaWQgMCx4MTp2b2lkIDAseTA6dm9pZCAwLHkxOnZvaWQgMCx4TGFiZWxWYWw6dm9pZCAwLHlMYWJlbFZhbDp2b2lkIDAsekxhYmVsVmFsOnZvaWQgMCx0ZXh0OnZvaWQgMH0sdVtWXSYmKFkuc3VicGxvdD11W1ZdLl9zdWJwbG90KSx1Ll9zcGxvbVNjZW5lcyYmdS5fc3Bsb21TY2VuZXNbai51aWRdJiYoWS5zY2VuZT11Ll9zcGxvbVNjZW5lc1tqLnVpZF0pLFc9JC5sZW5ndGgsImFycmF5Ij09PXEpe3ZhciBhdD1lW0JdOyJwb2ludE51bWJlciJpbiBhdD8oWS5pbmRleD1hdC5wb2ludE51bWJlcixxPSJjbG9zZXN0Iik6KHE9IiIsInh2YWwiaW4gYXQmJihIPWF0Lnh2YWwscT0ieCIpLCJ5dmFsImluIGF0JiYoRz1hdC55dmFsLHE9cT8iY2xvc2VzdCI6InkiKSl9ZWxzZSBIPVBbVV0sRz1SW1VdO2lmKDAhPT1YKWlmKGouX21vZHVsZSYmai5fbW9kdWxlLmhvdmVyUG9pbnRzKXt2YXIgb3Q9ai5fbW9kdWxlLmhvdmVyUG9pbnRzKFksSCxHLHEsdS5faG92ZXJsYXllcik7aWYob3QpZm9yKHZhciBzdCxsdD0wO2x0PG90Lmxlbmd0aDtsdCsrKXN0PW90W2x0XSxpKHN0LngwKSYmaShzdC55MCkmJiQucHVzaChTKHN0LEQpKX1lbHNlIG8ubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSBpbiBob3ZlcjoiLGopO2lmKCJjbG9zZXN0Ij09PUQmJiQubGVuZ3RoPlcmJigkLnNwbGljZSgwLFcpLGl0PSRbMF0uZGlzdGFuY2UpLHkmJjAhPT1aJiYwPT09JC5sZW5ndGgpe1kuZGlzdGFuY2U9WixZLmluZGV4PSExO3ZhciBjdD1qLl9tb2R1bGUuaG92ZXJQb2ludHMoWSxILEcsImNsb3Nlc3QiLHUuX2hvdmVybGF5ZXIpO2lmKGN0JiYoY3Q9Y3QuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwaWtlRGlzdGFuY2U8PVp9KSksY3QmJmN0Lmxlbmd0aCl7dmFyIHV0LGZ0PWN0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC54YS5zaG93c3Bpa2VzfSk7aWYoZnQubGVuZ3RoKXt2YXIgaHQ9ZnRbMF07aShodC54MCkmJmkoaHQueTApJiYodXQ9dnQoaHQpLCghSy52TGluZVBvaW50fHxLLnZMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT51dC5zcGlrZURpc3RhbmNlKSYmKEsudkxpbmVQb2ludD11dCkpfXZhciBwdD1jdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlc30pO2lmKHB0Lmxlbmd0aCl7dmFyIGR0PXB0WzBdO2koZHQueDApJiZpKGR0LnkwKSYmKHV0PXZ0KGR0KSwoIUsuaExpbmVQb2ludHx8Sy5oTGluZVBvaW50LnNwaWtlRGlzdGFuY2U+dXQuc3Bpa2VEaXN0YW5jZSkmJihLLmhMaW5lUG9pbnQ9dXQpKX19fX1mdW5jdGlvbiBndCh0LGUpe2Zvcih2YXIgcixuPW51bGwsaT0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKShyPXRbYV0uc3Bpa2VEaXN0YW5jZSk8aSYmcjw9ZSYmKG49dFthXSxpPXIpO3JldHVybiBufWZ1bmN0aW9uIHZ0KHQpe3JldHVybiB0P3t4YTp0LnhhLHlhOnQueWEseDp2b2lkIDAhPT10LnhTcGlrZT90LnhTcGlrZToodC54MCt0LngxKS8yLHk6dm9pZCAwIT09dC55U3Bpa2U/dC55U3Bpa2U6KHQueTArdC55MSkvMixkaXN0YW5jZTp0LmRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6dC5zcGlrZURpc3RhbmNlLGN1cnZlTnVtYmVyOnQudHJhY2UuaW5kZXgsY29sb3I6dC5jb2xvcixwb2ludE51bWJlcjp0LmluZGV4fTpudWxsfXZhciBtdD17ZnVsbExheW91dDp1LGNvbnRhaW5lcjp1Ll9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOnUuX3BhcGVyZGl2LGV2ZW50OmV9LHl0PXQuX3NwaWtlcG9pbnRzLHh0PXt2TGluZVBvaW50OksudkxpbmVQb2ludCxoTGluZVBvaW50OksuaExpbmVQb2ludH07aWYodC5fc3Bpa2Vwb2ludHM9eHQseSYmMCE9PVomJjAhPT0kLmxlbmd0aCl7dmFyIGJ0PSQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnlhLnNob3dzcGlrZXN9KSxfdD1ndChidCxaKTtLLmhMaW5lUG9pbnQ9dnQoX3QpO3ZhciB3dD0kLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC54YS5zaG93c3Bpa2VzfSksa3Q9Z3Qod3QsWik7Sy52TGluZVBvaW50PXZ0KGt0KX1pZigwPT09JC5sZW5ndGgpe3ZhciBUdD1oLnVuaG92ZXJSYXcodCxlKTtyZXR1cm4heXx8bnVsbD09PUsuaExpbmVQb2ludCYmbnVsbD09PUsudkxpbmVQb2ludHx8Qyh5dCkmJkUoSyxtdCksVHR9eSYmQyh5dCkmJkUoSyxtdCk7JC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2UtZS5kaXN0YW5jZX0pO3ZhciBBdD10Ll9ob3ZlcmRhdGEsTXQ9W107Zm9yKEY9MDtGPCQubGVuZ3RoO0YrKyl7dmFyIFN0PSRbRl0sRXQ9Zy5tYWtlRXZlbnREYXRhKFN0LFN0LnRyYWNlLFN0LmNkKTtpZighMSE9PVN0LmhvdmVydGVtcGxhdGUpe3ZhciBDdD0hMTtTdC5jZFtTdC5pbmRleF0mJlN0LmNkW1N0LmluZGV4XS5odCYmKEN0PVN0LmNkW1N0LmluZGV4XS5odCksU3QuaG92ZXJ0ZW1wbGF0ZT1DdHx8U3QudHJhY2UuaG92ZXJ0ZW1wbGF0ZXx8ITF9U3QuZXZlbnREYXRhPVtFdF0sTXQucHVzaChFdCl9dC5faG92ZXJkYXRhPU10O3ZhciBMdD0ieSI9PT1EJiYoSi5sZW5ndGg+MXx8JC5sZW5ndGg+MSl8fCJjbG9zZXN0Ij09PUQmJlEmJiQubGVuZ3RoPjEsenQ9Zi5jb21iaW5lKHUucGxvdF9iZ2NvbG9yfHxmLmJhY2tncm91bmQsdS5wYXBlcl9iZ2NvbG9yKSxPdD17aG92ZXJtb2RlOkQscm90YXRlTGFiZWxzOkx0LGJnQ29sb3I6enQsY29udGFpbmVyOnUuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6dS5fcGFwZXJkaXYsY29tbW9uTGFiZWxPcHRzOnUuaG92ZXJsYWJlbCxob3ZlcmRpc3RhbmNlOnUuaG92ZXJkaXN0YW5jZX0sSXQ9QSgkLE90LHQpO2lmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1PTAsZj0xLGg9dC5zaXplKCkscD1uZXcgQXJyYXkoaCk7ZnVuY3Rpb24gZCh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtpZihpPWUucG1pbi1lLnBvcy1lLmRwK2Uuc2l6ZSxhPXIucG9zK3IuZHArci5zaXplLWUucG1heCxpPi4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwKz1pO249ITF9aWYoIShhPC4wMSkpe2lmKGk8LS4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO249ITF9aWYobil7dmFyIGM9MDtmb3Iobz0wO288dC5sZW5ndGg7bysrKShsPXRbb10pLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJmMrKztmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKShsPXRbb10pLnBvcz5lLnBtYXgtMSYmKGwuZGVsPSEwLGMtLSk7Zm9yKG89MDtvPHQubGVuZ3RoJiYhKGM8PTApO28rKylpZigobD10W29dKS5wb3M8ZS5wbWluKzEpZm9yKGwuZGVsPSEwLGMtLSxhPTIqbC5zaXplLHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmKGwuZGVsPSEwLGMtLSl9fX1mb3IodC5lYWNoKGZ1bmN0aW9uKHQsbil7dmFyIGk9dFtlXSxhPSJ4Ij09PWkuX2lkLmNoYXJBdCgwKSxvPWkucmFuZ2U7IW4mJm8mJm9bMF0+b1sxXSE9PWEmJihmPS0xKSxwW25dPVt7ZGF0dW06dCxpOm4sdHJhY2VJbmRleDp0LnRyYWNlLmluZGV4LGRwOjAscG9zOnQucG9zLHBvc3JlZjp0LnBvc3JlZixzaXplOnQuYnkqKGE/eDoxKS8yLHBtaW46MCxwbWF4OmE/ci53aWR0aDpyLmhlaWdodH1dfSkscC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ucG9zcmVmLWVbMF0ucG9zcmVmfHxmKihlWzBdLnRyYWNlSW5kZXgtdFswXS50cmFjZUluZGV4KX0pOyFuJiZ1PD1oOyl7Zm9yKHUrKyxuPSEwLG89MDtvPHAubGVuZ3RoLTE7KXt2YXIgZz1wW29dLHY9cFtvKzFdLG09Z1tnLmxlbmd0aC0xXSx5PXZbMF07aWYoKGk9bS5wb3MrbS5kcCttLnNpemUteS5wb3MteS5kcCt5LnNpemUpPi4wMSYmbS5wbWluPT09eS5wbWluJiZtLnBtYXg9PT15LnBtYXgpe2ZvcihzPXYubGVuZ3RoLTE7cz49MDtzLS0pdltzXS5kcCs9aTtmb3IoZy5wdXNoLmFwcGx5KGcsdikscC5zcGxpY2UobysxLDEpLGM9MCxzPWcubGVuZ3RoLTE7cz49MDtzLS0pYys9Z1tzXS5kcDtmb3IoYT1jL2cubGVuZ3RoLHM9Zy5sZW5ndGgtMTtzPj0wO3MtLSlnW3NdLmRwLT1hO249ITF9ZWxzZSBvKyt9cC5mb3JFYWNoKGQpfWZvcihvPXAubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBiPXBbb107Zm9yKHM9Yi5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIF89YltzXSx3PV8uZGF0dW07dy5vZmZzZXQ9Xy5kcCx3LmRlbD1fLmRlbH19fShJdCxMdD8ieGEiOiJ5YSIsdSksTShJdCxMdCksZS50YXJnZXQmJmUudGFyZ2V0LnRhZ05hbWUpe3ZhciBEdD1kLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJoYXNDbGlja1RvU2hvdyIpKHQsTXQpO2Mobi5zZWxlY3QoZS50YXJnZXQpLER0PyJwb2ludGVyIjoiIil9aWYoIWUudGFyZ2V0fHxhfHwhZnVuY3Rpb24odCxlLHIpe2lmKCFyfHxyLmxlbmd0aCE9PXQuX2hvdmVyZGF0YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPXIubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXJbbl0sYT10Ll9ob3ZlcmRhdGFbbl07aWYoaS5jdXJ2ZU51bWJlciE9PWEuY3VydmVOdW1iZXJ8fFN0cmluZyhpLnBvaW50TnVtYmVyKSE9PVN0cmluZyhhLnBvaW50TnVtYmVyKXx8U3RyaW5nKGkucG9pbnROdW1iZXJzKSE9PVN0cmluZyhhLnBvaW50TnVtYmVycykpcmV0dXJuITB9cmV0dXJuITF9KHQsMCxBdCkpcmV0dXJuO0F0JiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6QXR9KTt0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczp3LHlheGVzOmsseHZhbHM6UCx5dmFsczpSfSl9KHQsZSxyLGEpfSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2NvbG9yOnQuY29sb3J8fGYuZGVmYXVsdExpbmUseDA6dC54MHx8dC54fHwwLHgxOnQueDF8fHQueHx8MCx5MDp0LnkwfHx0Lnl8fDAseTE6dC55MXx8dC55fHwwLHhMYWJlbDp0LnhMYWJlbCx5TGFiZWw6dC55TGFiZWwsekxhYmVsOnQuekxhYmVsLHRleHQ6dC50ZXh0LG5hbWU6dC5uYW1lLGlkZWFsQWxpZ246dC5pZGVhbEFsaWduLGJvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsZm9udEZhbWlseTp0LmZvbnRGYW1pbHksZm9udFNpemU6dC5mb250U2l6ZSxmb250Q29sb3I6dC5mb250Q29sb3IsdHJhY2U6dC50cmFjZXx8e2luZGV4OjAsaG92ZXJpbmZvOiIifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowLGhvdmVydGVtcGxhdGU6dC5ob3ZlcnRlbXBsYXRlfHwhMSxldmVudERhdGE6dC5ldmVudERhdGF8fCExLGhvdmVydGVtcGxhdGVMYWJlbHM6dC5ob3ZlcnRlbXBsYXRlTGFiZWxzfHwhMX0saT1uLnNlbGVjdChlLmNvbnRhaW5lciksYT1lLm91dGVyQ29udGFpbmVyP24uc2VsZWN0KGUub3V0ZXJDb250YWluZXIpOmksbz17aG92ZXJtb2RlOiJjbG9zZXN0Iixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjplLmJnQ29sb3J8fGYuYmFja2dyb3VuZCxjb250YWluZXI6aSxvdXRlckNvbnRhaW5lcjphfSxzPUEoW3JdLG8sZS5nZCk7cmV0dXJuIE0ocyxvLnJvdGF0ZUxhYmVscykscy5ub2RlKCl9LHIubXVsdGlIb3ZlcnM9ZnVuY3Rpb24odCxlKXtBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciByPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybntjb2xvcjp0LmNvbG9yfHxmLmRlZmF1bHRMaW5lLHgwOnQueDB8fHQueHx8MCx4MTp0LngxfHx0Lnh8fDAseTA6dC55MHx8dC55fHwwLHkxOnQueTF8fHQueXx8MCx4TGFiZWw6dC54TGFiZWwseUxhYmVsOnQueUxhYmVsLHpMYWJlbDp0LnpMYWJlbCx0ZXh0OnQudGV4dCxuYW1lOnQubmFtZSxpZGVhbEFsaWduOnQuaWRlYWxBbGlnbixib3JkZXJDb2xvcjp0LmJvcmRlckNvbG9yLGZvbnRGYW1pbHk6dC5mb250RmFtaWx5LGZvbnRTaXplOnQuZm9udFNpemUsZm9udENvbG9yOnQuZm9udENvbG9yLHRyYWNlOnQudHJhY2V8fHtpbmRleDowLGhvdmVyaW5mbzoiIn0seGE6e19vZmZzZXQ6MH0seWE6e19vZmZzZXQ6MH0saW5kZXg6MCxob3ZlcnRlbXBsYXRlOnQuaG92ZXJ0ZW1wbGF0ZXx8ITEsZXZlbnREYXRhOnQuZXZlbnREYXRhfHwhMSxob3ZlcnRlbXBsYXRlTGFiZWxzOnQuaG92ZXJ0ZW1wbGF0ZUxhYmVsc3x8ITF9fSksaT1uLnNlbGVjdChlLmNvbnRhaW5lciksYT1lLm91dGVyQ29udGFpbmVyP24uc2VsZWN0KGUub3V0ZXJDb250YWluZXIpOmksbz17aG92ZXJtb2RlOiJjbG9zZXN0Iixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjplLmJnQ29sb3J8fGYuYmFja2dyb3VuZCxjb250YWluZXI6aSxvdXRlckNvbnRhaW5lcjphfSxzPUEocixvLGUuZ2QpLGw9MDtyZXR1cm4gcy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueTAtZS55MH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC55MC10LmJ5LzI7dC5vZmZzZXQ9ZS01PGw/bC1lKzU6MCxsPWUrdC5ieSt0Lm9mZnNldH0pLE0ocyxvLnJvdGF0ZUxhYmVscykscy5ub2RlKCl9O3ZhciBUPS88ZXh0cmE+KFtcc1xTXSopPFwvZXh0cmE+LztmdW5jdGlvbiBBKHQsZSxyKXt2YXIgaT1yLl9mdWxsTGF5b3V0LGE9ZS5ob3Zlcm1vZGUscz1lLnJvdGF0ZUxhYmVscyxjPWUuYmdDb2xvcixoPWUuY29udGFpbmVyLHA9ZS5vdXRlckNvbnRhaW5lcixkPWUuY29tbW9uTGFiZWxPcHRzfHx7fSxnPWUuZm9udEZhbWlseXx8di5IT1ZFUkZPTlQseT1lLmZvbnRTaXplfHx2LkhPVkVSRk9OVFNJWkUseD10WzBdLGI9eC54YSxfPXgueWEsQT0ieSI9PT1hPyJ5TGFiZWwiOiJ4TGFiZWwiLE09eFtBXSxTPShTdHJpbmcoTSl8fCIiKS5zcGxpdCgiICIpWzBdLEU9cC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksQz1FLnRvcCxMPUUud2lkdGgsej1FLmhlaWdodCxPPXZvaWQgMCE9PU0mJnguZGlzdGFuY2U8PWUuaG92ZXJkaXN0YW5jZSYmKCJ4Ij09PWF8fCJ5Ij09PWEpO2lmKE8pe3ZhciBJLEQsUD0hMDtmb3IoST0wO0k8dC5sZW5ndGg7SSsrKWlmKFAmJnZvaWQgMD09PXRbSV0uekxhYmVsJiYoUD0hMSksRD10W0ldLmhvdmVyaW5mb3x8dFtJXS50cmFjZS5ob3ZlcmluZm8pe3ZhciBSPUFycmF5LmlzQXJyYXkoRCk/RDpELnNwbGl0KCIrIik7aWYoLTE9PT1SLmluZGV4T2YoImFsbCIpJiYtMT09PVIuaW5kZXhPZihhKSl7Tz0hMTticmVha319UCYmKE89ITEpfXZhciBGPWguc2VsZWN0QWxsKCJnLmF4aXN0ZXh0IikuZGF0YShPP1swXTpbXSk7Ri5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXN0ZXh0IiwhMCksRi5leGl0KCkucmVtb3ZlKCksRi5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyksaT1vLmVuc3VyZVNpbmdsZShlLCJwYXRoIiwiIixmdW5jdGlvbih0KXt0LnN0eWxlKHsic3Ryb2tlLXdpZHRoIjoiMXB4In0pfSkscz1vLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSksYz1kLmJnY29sb3J8fGYuZGVmYXVsdExpbmUsaD1kLmJvcmRlcmNvbG9yfHxmLmNvbnRyYXN0KGMpLHA9Zi5jb250cmFzdChjKTtpLnN0eWxlKHtmaWxsOmMsc3Ryb2tlOmh9KSxzLnRleHQoTSkuY2FsbCh1LmZvbnQsZC5mb250LmZhbWlseXx8ZyxkLmZvbnQuc2l6ZXx8eSxkLmZvbnQuY29sb3J8fHApLmNhbGwobC5wb3NpdGlvblRleHQsMCwwKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIpLGUuYXR0cigidHJhbnNmb3JtIiwiIik7dmFyIHY9cy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIngiPT09YSl7cy5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwobC5wb3NpdGlvblRleHQsMCwidG9wIj09PWIuc2lkZT9DLXYuYm90dG9tLXctazpDLXYudG9wK3crayk7dmFyIG09InRvcCI9PT1iLnNpZGU/Ii0iOiIiO2kuYXR0cigiZCIsIk0wLDBMIit3KyIsIittK3crIkgiKyhrK3Yud2lkdGgvMikrInYiK20rKDIqayt2LmhlaWdodCkrIkgtIisoayt2LndpZHRoLzIpKyJWIittK3crIkgtIit3KyJaIiksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYi5fb2Zmc2V0Kyh4LngwK3gueDEpLzIpKyIsIisoXy5fb2Zmc2V0KygidG9wIj09PWIuc2lkZT8wOl8uX2xlbmd0aCkpKyIpIil9ZWxzZXtzLmF0dHIoInRleHQtYW5jaG9yIiwicmlnaHQiPT09Xy5zaWRlPyJzdGFydCI6ImVuZCIpLmNhbGwobC5wb3NpdGlvblRleHQsKCJyaWdodCI9PT1fLnNpZGU/MTotMSkqKGsrdyksQy12LnRvcC12LmhlaWdodC8yKTt2YXIgVD0icmlnaHQiPT09Xy5zaWRlPyIiOiItIjtpLmF0dHIoImQiLCJNMCwwTCIrVCt3KyIsIit3KyJWIisoayt2LmhlaWdodC8yKSsiaCIrVCsoMiprK3Yud2lkdGgpKyJWLSIrKGsrdi5oZWlnaHQvMikrIkgiK1QrdysiVi0iK3crIloiKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhiLl9vZmZzZXQrKCJyaWdodCI9PT1fLnNpZGU/Yi5fbGVuZ3RoOjApKSsiLCIrKF8uX29mZnNldCsoeC55MCt4LnkxKS8yKSsiKSIpfXQ9dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQuekxhYmVsVmFsfHwodFtBXXx8IiIpLnNwbGl0KCIgIilbMF09PT1TfSl9KTt2YXIgQj1oLnNlbGVjdEFsbCgiZy5ob3ZlcnRleHQiKS5kYXRhKHQsZnVuY3Rpb24odCl7cmV0dXJuW3QudHJhY2UuaW5kZXgsdC5pbmRleCx0LngwLHQueTAsdC5uYW1lLHQuYXR0cix0LnhhLHQueWF8fCIiXS5qb2luKCIsIil9KTtyZXR1cm4gQi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImhvdmVydGV4dCIsITApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZCgicmVjdCIpLmNhbGwoZi5maWxsLGYuYWRkT3BhY2l0eShjLC44KSksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJuYW1lIiwhMCksdC5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwiMXB4IiksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJudW1zIiwhMCkuY2FsbCh1LmZvbnQsZyx5KX0pLEIuZXhpdCgpLnJlbW92ZSgpLEIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKSxoPSIiLHA9IiIsZD10LmJnY29sb3J8fHQuY29sb3Isdj1mLmNvbWJpbmUoZi5vcGFjaXR5KGQpP2Q6Zi5kZWZhdWx0TGluZSxjKSx4PWYuY29tYmluZShmLm9wYWNpdHkodC5jb2xvcik/dC5jb2xvcjpmLmRlZmF1bHRMaW5lLGMpLGI9dC5ib3JkZXJDb2xvcnx8Zi5jb250cmFzdCh2KTt2b2lkIDAhPT10Lm5hbWVPdmVycmlkZSYmKHQubmFtZT10Lm5hbWVPdmVycmlkZSksdC5uYW1lJiYoaS5tZXRhJiYodC5uYW1lPW8udGVtcGxhdGVTdHJpbmcodC5uYW1lLHttZXRhOmkubWV0YX0pKSxoPWwucGxhaW5UZXh0KHQubmFtZXx8IiIse2xlbjp0Lm5hbWVMZW5ndGgsYWxsb3dlZFRhZ3M6WyJiciIsInN1YiIsInN1cCIsImIiLCJpIiwiZW0iXX0pKSx2b2lkIDAhPT10LnpMYWJlbD8odm9pZCAwIT09dC54TGFiZWwmJihwKz0ieDogIit0LnhMYWJlbCsiPGJyPiIpLHZvaWQgMCE9PXQueUxhYmVsJiYocCs9Ink6ICIrdC55TGFiZWwrIjxicj4iKSxwKz0ocD8iejogIjoiIikrdC56TGFiZWwpOk8mJnRbYSsiTGFiZWwiXT09PU0/cD10WygieCI9PT1hPyJ5IjoieCIpKyJMYWJlbCJdfHwiIjp2b2lkIDA9PT10LnhMYWJlbD92b2lkIDAhPT10LnlMYWJlbCYmInNjYXR0ZXJjYXJwZXQiIT09dC50cmFjZS50eXBlJiYocD10LnlMYWJlbCk6cD12b2lkIDA9PT10LnlMYWJlbD90LnhMYWJlbDoiKCIrdC54TGFiZWwrIiwgIit0LnlMYWJlbCsiKSIsIXQudGV4dCYmMCE9PXQudGV4dHx8QXJyYXkuaXNBcnJheSh0LnRleHQpfHwocCs9KHA/Ijxicj4iOiIiKSt0LnRleHQpLHZvaWQgMCE9PXQuZXh0cmFUZXh0JiYocCs9KHA/Ijxicj4iOiIiKSt0LmV4dHJhVGV4dCksIiIhPT1wfHx0LmhvdmVydGVtcGxhdGV8fCgiIj09PWgmJmUucmVtb3ZlKCkscD1oKTt2YXIgXz1yLl9mdWxsTGF5b3V0Ll9kM2xvY2FsZSxBPXQuaG92ZXJ0ZW1wbGF0ZXx8ITEsUz10LmhvdmVydGVtcGxhdGVMYWJlbHN8fHQsRT10LmV2ZW50RGF0YVswXXx8e307QSYmKHA9KHA9by5ob3ZlcnRlbXBsYXRlU3RyaW5nKEEsUyxfLEUse21ldGE6aS5tZXRhfSkpLnJlcGxhY2UoVCxmdW5jdGlvbih0LGUpe3JldHVybiBoPWUsIiJ9KSk7dmFyIEk9ZS5zZWxlY3QoInRleHQubnVtcyIpLmNhbGwodS5mb250LHQuZm9udEZhbWlseXx8Zyx0LmZvbnRTaXplfHx5LHQuZm9udENvbG9yfHxiKS50ZXh0KHApLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwobC5wb3NpdGlvblRleHQsMCwwKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIpLEQ9ZS5zZWxlY3QoInRleHQubmFtZSIpLFA9MCxSPTA7aWYoaCYmaCE9PXApe0QuY2FsbCh1LmZvbnQsdC5mb250RmFtaWx5fHxnLHQuZm9udFNpemV8fHkseCkudGV4dChoKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsMCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyKTt2YXIgRj1ELm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtQPUYud2lkdGgrMiprLFI9Ri5oZWlnaHQrMiprfWVsc2UgRC5yZW1vdmUoKSxlLnNlbGVjdCgicmVjdCIpLnJlbW92ZSgpO2Uuc2VsZWN0KCJwYXRoIikuc3R5bGUoe2ZpbGw6dixzdHJva2U6Yn0pO3ZhciBCLE4saj1JLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxWPXQueGEuX29mZnNldCsodC54MCt0LngxKS8yLFU9dC55YS5fb2Zmc2V0Kyh0LnkwK3QueTEpLzIscT1NYXRoLmFicyh0LngxLXQueDApLEg9TWF0aC5hYnModC55MS10LnkwKSxHPWoud2lkdGgrdytrK1A7aWYodC50eTA9Qy1qLnRvcCx0LmJ4PWoud2lkdGgrMiprLHQuYnk9TWF0aC5tYXgoai5oZWlnaHQrMiprLFIpLHQuYW5jaG9yPSJzdGFydCIsdC50eHdpZHRoPWoud2lkdGgsdC50eDJ3aWR0aD1QLHQub2Zmc2V0PTAscyl0LnBvcz1WLEI9VStILzIrRzw9eixOPVUtSC8yLUc+PTAsInRvcCIhPT10LmlkZWFsQWxpZ24mJkJ8fCFOP0I/KFUrPUgvMix0LmFuY2hvcj0ic3RhcnQiKTp0LmFuY2hvcj0ibWlkZGxlIjooVS09SC8yLHQuYW5jaG9yPSJlbmQiKTtlbHNlIGlmKHQucG9zPVUsQj1WK3EvMitHPD1MLE49Vi1xLzItRz49MCwibGVmdCIhPT10LmlkZWFsQWxpZ24mJkJ8fCFOKWlmKEIpVis9cS8yLHQuYW5jaG9yPSJzdGFydCI7ZWxzZXt0LmFuY2hvcj0ibWlkZGxlIjt2YXIgWT1HLzIsVz1WK1ktTCxYPVYtWTtXPjAmJihWLT1XKSxYPDAmJihWKz0tWCl9ZWxzZSBWLT1xLzIsdC5hbmNob3I9ImVuZCI7SS5hdHRyKCJ0ZXh0LWFuY2hvciIsdC5hbmNob3IpLFAmJkQuYXR0cigidGV4dC1hbmNob3IiLHQuYW5jaG9yKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK1UrIikiKyhzPyJyb3RhdGUoIittKyIpIjoiIikpfSksQn1mdW5jdGlvbiBNKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQuZGVsKXIucmVtb3ZlKCk7ZWxzZXt2YXIgaT0iZW5kIj09PXQuYW5jaG9yPy0xOjEsYT1yLnNlbGVjdCgidGV4dC5udW1zIiksbz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W3QuYW5jaG9yXSxzPW8qKHcrayksYz1zK28qKHQudHh3aWR0aCtrKSxmPTAsaD10Lm9mZnNldDsibWlkZGxlIj09PXQuYW5jaG9yJiYocy09dC50eDJ3aWR0aC8yLGMrPXQudHh3aWR0aC8yK2spLGUmJihoKj0tXyxmPXQub2Zmc2V0KmIpLHIuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsIm1pZGRsZSI9PT10LmFuY2hvcj8iTS0iKyh0LmJ4LzIrdC50eDJ3aWR0aC8yKSsiLCIrKGgtdC5ieS8yKSsiaCIrdC5ieCsidiIrdC5ieSsiaC0iK3QuYngrIloiOiJNMCwwTCIrKGkqdytmKSsiLCIrKHcraCkrInYiKyh0LmJ5LzItdykrImgiK2kqdC5ieCsidi0iK3QuYnkrIkgiKyhpKncrZikrIlYiKyhoLXcpKyJaIiksYS5jYWxsKGwucG9zaXRpb25UZXh0LHMrZixoK3QudHkwLXQuYnkvMitrKSx0LnR4MndpZHRoJiYoci5zZWxlY3QoInRleHQubmFtZSIpLmNhbGwobC5wb3NpdGlvblRleHQsYytvKmsrZixoK3QudHkwLXQuYnkvMitrKSxyLnNlbGVjdCgicmVjdCIpLmNhbGwodS5zZXRSZWN0LGMrKG8tMSkqdC50eDJ3aWR0aC8yK2YsaC10LmJ5LzItMSx0LnR4MndpZHRoLHQuYnkrMikpfX0pfWZ1bmN0aW9uIFModCxlKXt2YXIgcj10LmluZGV4LG49dC50cmFjZXx8e30saT10LmNkWzBdLGE9dC5jZFtyXXx8e30scz1BcnJheS5pc0FycmF5KHIpP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG8uY2FzdE9wdGlvbihpLHIsdCl8fG8uZXh0cmFjdE9wdGlvbih7fSxuLCIiLGUpfTpmdW5jdGlvbih0LGUpe3JldHVybiBvLmV4dHJhY3RPcHRpb24oYSxuLHQsZSl9O2Z1bmN0aW9uIGwoZSxyLG4pe3ZhciBpPXMocixuKTtpJiYodFtlXT1pKX1pZihsKCJob3ZlcmluZm8iLCJoaSIsImhvdmVyaW5mbyIpLGwoImJnY29sb3IiLCJoYmciLCJob3ZlcmxhYmVsLmJnY29sb3IiKSxsKCJib3JkZXJDb2xvciIsImhiYyIsImhvdmVybGFiZWwuYm9yZGVyY29sb3IiKSxsKCJmb250RmFtaWx5IiwiaHRmIiwiaG92ZXJsYWJlbC5mb250LmZhbWlseSIpLGwoImZvbnRTaXplIiwiaHRzIiwiaG92ZXJsYWJlbC5mb250LnNpemUiKSxsKCJmb250Q29sb3IiLCJodGMiLCJob3ZlcmxhYmVsLmZvbnQuY29sb3IiKSxsKCJuYW1lTGVuZ3RoIiwiaG5sIiwiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoIiksdC5wb3NyZWY9InkiPT09ZXx8ImNsb3Nlc3QiPT09ZSYmImgiPT09bi5vcmllbnRhdGlvbj90LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMjp0LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMix0LngwPW8uY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9by5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1vLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPW8uY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpLHZvaWQgMCE9PXQueExhYmVsVmFsJiYodC54TGFiZWw9InhMYWJlbCJpbiB0P3QueExhYmVsOnAuaG92ZXJMYWJlbFRleHQodC54YSx0LnhMYWJlbFZhbCksdC54VmFsPXQueGEuYzJkKHQueExhYmVsVmFsKSksdm9pZCAwIT09dC55TGFiZWxWYWwmJih0LnlMYWJlbD0ieUxhYmVsImluIHQ/dC55TGFiZWw6cC5ob3ZlckxhYmVsVGV4dCh0LnlhLHQueUxhYmVsVmFsKSx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmdm9pZCAwPT09dC56TGFiZWwmJih0LnpMYWJlbD1TdHJpbmcodC56TGFiZWxWYWwpKSwhKGlzTmFOKHQueGVycil8fCJsb2ciPT09dC54YS50eXBlJiZ0LnhlcnI8PTApKXt2YXIgYz1wLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueGVycm5lZz90LnhMYWJlbCs9IiArIitjKyIgLyAtIitwLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueExhYmVsKz0iIFx4YjEgIitjLCJ4Ij09PWUmJih0LmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKHQueWVycil8fCJsb2ciPT09dC55YS50eXBlJiZ0LnllcnI8PTApKXt2YXIgdT1wLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueWVycm5lZz90LnlMYWJlbCs9IiArIit1KyIgLyAtIitwLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueUxhYmVsKz0iIFx4YjEgIit1LCJ5Ij09PWUmJih0LmRpc3RhbmNlKz0xKX12YXIgZj10LmhvdmVyaW5mb3x8dC50cmFjZS5ob3ZlcmluZm87cmV0dXJuIGYmJiJhbGwiIT09ZiYmKC0xPT09KGY9QXJyYXkuaXNBcnJheShmKT9mOmYuc3BsaXQoIisiKSkuaW5kZXhPZigieCIpJiYodC54TGFiZWw9dm9pZCAwKSwtMT09PWYuaW5kZXhPZigieSIpJiYodC55TGFiZWw9dm9pZCAwKSwtMT09PWYuaW5kZXhPZigieiIpJiYodC56TGFiZWw9dm9pZCAwKSwtMT09PWYuaW5kZXhPZigidGV4dCIpJiYodC50ZXh0PXZvaWQgMCksLTE9PT1mLmluZGV4T2YoIm5hbWUiKSYmKHQubmFtZT12b2lkIDApKSx0fWZ1bmN0aW9uIEUodCxlKXt2YXIgcixuLGk9ZS5jb250YWluZXIsbz1lLmZ1bGxMYXlvdXQscz1lLmV2ZW50LGw9ISF0LmhMaW5lUG9pbnQsYz0hIXQudkxpbmVQb2ludDtpZihpLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLGN8fGwpe3ZhciBoPWYuY29tYmluZShvLnBsb3RfYmdjb2xvcixvLnBhcGVyX2JnY29sb3IpO2lmKGwpe3ZhciBwLGQsZz10LmhMaW5lUG9pbnQ7cj1nJiZnLnhhLCJjdXJzb3IiPT09KG49ZyYmZy55YSkuc3Bpa2VzbmFwPyhwPXMucG9pbnRlclgsZD1zLnBvaW50ZXJZKToocD1yLl9vZmZzZXQrZy54LGQ9bi5fb2Zmc2V0K2cueSk7dmFyIHYsbSx5PWEucmVhZGFiaWxpdHkoZy5jb2xvcixoKTwxLjU/Zi5jb250cmFzdChoKTpnLmNvbG9yLHg9bi5zcGlrZW1vZGUsYj1uLnNwaWtldGhpY2tuZXNzLF89bi5zcGlrZWNvbG9yfHx5LHc9bi5fYm91bmRpbmdCb3gsaz0ody5sZWZ0K3cucmlnaHQpLzI8cD93LnJpZ2h0OncubGVmdDstMT09PXguaW5kZXhPZigidG9heGlzIikmJi0xPT09eC5pbmRleE9mKCJhY3Jvc3MiKXx8KC0xIT09eC5pbmRleE9mKCJ0b2F4aXMiKSYmKHY9ayxtPXApLC0xIT09eC5pbmRleE9mKCJhY3Jvc3MiKSYmKHY9bi5fY291bnRlclNwYW5bMF0sbT1uLl9jb3VudGVyU3BhblsxXSksaS5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTp2LHgyOm0seTE6ZCx5MjpkLCJzdHJva2Utd2lkdGgiOmIsc3Ryb2tlOl8sInN0cm9rZS1kYXNoYXJyYXkiOnUuZGFzaFN0eWxlKG4uc3Bpa2VkYXNoLGIpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxpLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOnYseDI6bSx5MTpkLHkyOmQsInN0cm9rZS13aWR0aCI6YisyLHN0cm9rZTpofSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSksLTEhPT14LmluZGV4T2YoIm1hcmtlciIpJiZpLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7Y3g6aysoInJpZ2h0IiE9PW4uc2lkZT9iOi1iKSxjeTpkLHI6YixmaWxsOl99KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX1pZihjKXt2YXIgVCxBLE09dC52TGluZVBvaW50O3I9TSYmTS54YSxuPU0mJk0ueWEsImN1cnNvciI9PT1yLnNwaWtlc25hcD8oVD1zLnBvaW50ZXJYLEE9cy5wb2ludGVyWSk6KFQ9ci5fb2Zmc2V0K00ueCxBPW4uX29mZnNldCtNLnkpO3ZhciBTLEUsQz1hLnJlYWRhYmlsaXR5KE0uY29sb3IsaCk8MS41P2YuY29udHJhc3QoaCk6TS5jb2xvcixMPXIuc3Bpa2Vtb2RlLHo9ci5zcGlrZXRoaWNrbmVzcyxPPXIuc3Bpa2Vjb2xvcnx8QyxJPXIuX2JvdW5kaW5nQm94LEQ9KEkudG9wK0kuYm90dG9tKS8yPEE/SS5ib3R0b206SS50b3A7LTE9PT1MLmluZGV4T2YoInRvYXhpcyIpJiYtMT09PUwuaW5kZXhPZigiYWNyb3NzIil8fCgtMSE9PUwuaW5kZXhPZigidG9heGlzIikmJihTPUQsRT1BKSwtMSE9PUwuaW5kZXhPZigiYWNyb3NzIikmJihTPXIuX2NvdW50ZXJTcGFuWzBdLEU9ci5fY291bnRlclNwYW5bMV0pLGkuaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6VCx4MjpULHkxOlMseTI6RSwic3Ryb2tlLXdpZHRoIjp6LHN0cm9rZTpPLCJzdHJva2UtZGFzaGFycmF5Ijp1LmRhc2hTdHlsZShyLnNwaWtlZGFzaCx6KX0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksaS5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpULHgyOlQseTE6Uyx5MjpFLCJzdHJva2Utd2lkdGgiOnorMixzdHJva2U6aH0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCkpLC0xIT09TC5pbmRleE9mKCJtYXJrZXIiKSYmaS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4OlQsY3k6RC0oInRvcCIhPT1yLnNpZGU/ejoteikscjp6LGZpbGw6T30pLmNsYXNzZWQoInNwaWtlbGluZSIsITApfX19ZnVuY3Rpb24gQyh0LGUpe3JldHVybiFlfHwoZS52TGluZVBvaW50IT09dC5fc3Bpa2Vwb2ludHMudkxpbmVQb2ludHx8ZS5oTGluZVBvaW50IT09dC5fc3Bpa2Vwb2ludHMuaExpbmVQb2ludCl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvZXZlbnRzIjo2ODksIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3IiOjcxMSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL2NvbG9yIjo1NzcsIi4uL2RyYWdlbGVtZW50Ijo1OTUsIi4uL2RyYXdpbmciOjU5OCwiLi9jb25zdGFudHMiOjYxMCwiLi9oZWxwZXJzIjo2MTIsZDM6MTU0LCJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sNjE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtyKCJob3ZlcmxhYmVsLmJnY29sb3IiLChpPWl8fHt9KS5iZ2NvbG9yKSxyKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixpLmJvcmRlcmNvbG9yKSxyKCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiLGkubmFtZWxlbmd0aCksbi5jb2VyY2VGb250KHIsImhvdmVybGFiZWwuZm9udCIsaS5mb250KX19LHsiLi4vLi4vbGliIjo3MDB9XSw2MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dD10fHx7fTsoZT1lfHx7fSkuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb247dmFyIHI9ZS5rZXlzfHxbXTtpZihyLmxlbmd0aD4wKXtmb3IodmFyIG49W10saT0wO2k8ci5sZW5ndGg7aSsrKW5baV09ImAiK3JbaV0rImAiOyJGaW5hbGx5LCB0aGUgdGVtcGxhdGUgc3RyaW5nIGhhcyBhY2Nlc3MgdG8gIiwxPT09ci5sZW5ndGg/InZhcmlhYmxlICIrblswXToidmFyaWFibGVzICIrbi5zbGljZSgwLC0xKS5qb2luKCIsICIpKyIgYW5kICIrbi5zbGljZSgtMSkrIi4ifXZhciBhPXt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6dC5lZGl0VHlwZXx8Im5vbmUifTtyZXR1cm4hMSE9PXQuYXJyYXlPayYmKGEuYXJyYXlPaz0hMCksYX19LHt9XSw2MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vZHJhZ2VsZW1lbnQiKSxvPXQoIi4vaGVscGVycyIpLHM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGw9dCgiLi9ob3ZlciIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJmeCIsY29uc3RhbnRzOnQoIi4vY29uc3RhbnRzIiksc2NoZW1hOntsYXlvdXQ6c30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnMsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6dCgiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOm8uZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0Om8uZ2V0Q2xvc2VzdCxpbmJveDpvLmluYm94LHF1YWRyYXR1cmU6by5xdWFkcmF0dXJlLGFwcGVuZEFycmF5UG9pbnRWYWx1ZTpvLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpLmNhc3RPcHRpb24odCxlLCJob3ZlcmxhYmVsLiIrcil9LGNhc3RIb3ZlcmluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpLmNhc3RPcHRpb24odCxyLCJob3ZlcmluZm8iLGZ1bmN0aW9uKHIpe3JldHVybiBpLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOnJ9LHtfbW9kdWxlOnQuX21vZHVsZX0sZSl9KX0saG92ZXI6bC5ob3Zlcix1bmhvdmVyOmEudW5ob3Zlcixsb25lSG92ZXI6bC5sb25lSG92ZXIsbXVsdGlIb3ZlcnM6bC5tdWx0aUhvdmVycyxsb25lVW5ob3ZlcjpmdW5jdGlvbih0KXt2YXIgZT1pLmlzRDNTZWxlY3Rpb24odCk/dDpuLnNlbGVjdCh0KTtlLnNlbGVjdEFsbCgiZy5ob3ZlcnRleHQiKS5yZW1vdmUoKSxlLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpfSxjbGljazp0KCIuL2NsaWNrIil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9kcmFnZWxlbWVudCI6NTk1LCIuL2F0dHJpYnV0ZXMiOjYwNywiLi9jYWxjIjo2MDgsIi4vY2xpY2siOjYwOSwiLi9jb25zdGFudHMiOjYxMCwiLi9kZWZhdWx0cyI6NjExLCIuL2hlbHBlcnMiOjYxMiwiLi9ob3ZlciI6NjEzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MTcsIi4vbGF5b3V0X2RlZmF1bHRzIjo2MTgsIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0cyI6NjE5LGQzOjE1NH1dLDYxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikoe2VkaXRUeXBlOiJub25lIn0pO2kuZmFtaWx5LmRmbHQ9bi5IT1ZFUkZPTlQsaS5zaXplLmRmbHQ9bi5IT1ZFUkZPTlRTSVpFLGUuZXhwb3J0cz17Y2xpY2ttb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJldmVudCIsInNlbGVjdCJdLGRmbHQ6ImV2ZW50IixlZGl0VHlwZToicGxvdCIsZXh0cmFzOlsibm9uZSJdfSxkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiem9vbSIsInBhbiIsInNlbGVjdCIsImxhc3NvIiwib3JiaXQiLCJ0dXJudGFibGUiLCExXSxkZmx0OiJ6b29tIixlZGl0VHlwZToibW9kZWJhciJ9LGhvdmVybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJjbG9zZXN0IiwhMV0sZWRpdFR5cGU6Im1vZGViYXIifSxob3ZlcmRpc3RhbmNlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGlzdGFuY2U6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOiJub25lIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LGZvbnQ6aSxuYW1lbGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoxNSxlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn0sc2VsZWN0ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJoIiwidiIsImQiLCJhbnkiXSxkZmx0OiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuL2NvbnN0YW50cyI6NjEwfV0sNjE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBvLHM9YSgiY2xpY2ttb2RlIik7InNlbGVjdCI9PT1hKCJkcmFnbW9kZSIpJiZhKCJzZWxlY3RkaXJlY3Rpb24iKSxlLl9oYXMoImNhcnRlc2lhbiIpP3MuaW5kZXhPZigic2VsZWN0Iik+LTE/bz0iY2xvc2VzdCI6KGUuX2lzSG9yaXo9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5fc2NhdHRlclN0YWNrT3B0c3x8e30sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9aS54YXhpcytpLnlheGlzLG89clthXXx8e30scz1vW2kuc3RhY2tncm91cF18fHt9O2lmKCJoIiE9PWkub3JpZW50YXRpb24mJiJoIiE9PXMub3JpZW50YXRpb24pcmV0dXJuITF9cmV0dXJuITB9KHIsZSksbz1lLl9pc0hvcml6PyJ5IjoieCIpOm89ImNsb3Nlc3QiLGEoImhvdmVybW9kZSIsbykmJihhKCJob3ZlcmRpc3RhbmNlIiksYSgic3Bpa2VkaXN0YW5jZSIpKTt2YXIgbD1lLl9oYXMoIm1hcGJveCIpLGM9ZS5faGFzKCJnZW8iKSx1PWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7Inpvb20iPT09ZS5kcmFnbW9kZSYmKChsfHxjKSYmMT09PXV8fGwmJmMmJjI9PT11KSYmKGUuZHJhZ21vZGU9InBhbiIpfX0seyIuLi8uLi9saWIiOjcwMCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjE3fV0sNjE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUsZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX0pfX0seyIuLi8uLi9saWIiOjcwMCwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2MTQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYxN31dLDYyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2xpYi9yZWdleCIpLmNvdW50ZXIsYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLmlkUmVnZXgscz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbD17cm93czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZWRpdFR5cGU6InBsb3QifSxyb3dvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIHRvIGJvdHRvbSIsImJvdHRvbSB0byB0b3AiXSxkZmx0OiJ0b3AgdG8gYm90dG9tIixlZGl0VHlwZToicGxvdCJ9LGNvbHVtbnM6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGVkaXRUeXBlOiJwbG90In0sc3VicGxvdHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZGltZW5zaW9uczoyLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W2koInh5IikudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHhheGVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W28ueC50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0seWF4ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbby55LnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxwYXR0ZXJuOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmRlcGVuZGVudCIsImNvdXBsZWQiXSxkZmx0OiJjb3VwbGVkIixlZGl0VHlwZToicGxvdCJ9LHhnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx5Z2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmEoe25hbWU6ImdyaWQiLGVkaXRUeXBlOiJwbG90Iixub0dyaWRDZWxsOiEwfSx7fSkseHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJvdHRvbSIsImJvdHRvbSBwbG90IiwidG9wIHBsb3QiLCJ0b3AiXSxkZmx0OiJib3R0b20gcGxvdCIsZWRpdFR5cGU6InBsb3QifSx5c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImxlZnQgcGxvdCIsInJpZ2h0IHBsb3QiLCJyaWdodCJdLGRmbHQ6ImxlZnQgcGxvdCIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9O2Z1bmN0aW9uIGModCxlLHIpe3ZhciBuPWVbcisiYXhlcyJdLGk9T2JqZWN0LmtleXMoKHQuX3NwbG9tQXhlc3x8e30pW3JdfHx7fSk7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bjppLmxlbmd0aD9pOnZvaWQgMH1mdW5jdGlvbiB1KHQsZSxyLG4saSxhKXt2YXIgbz1lKHQrImdhcCIscikscz1lKCJkb21haW4uIit0KTtlKHQrInNpZGUiLG4pO2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1zWzBdLHU9KHNbMV0tYykvKGktbyksZj11KigxLW8pLGg9MDtoPGk7aCsrKXt2YXIgcD1jK3UqaDtsW2E/aS0xLWg6aF09W3AscCtmXX1yZXR1cm4gbH1mdW5jdGlvbiBmKHQsZSxyLG4saSl7dmFyIGEsbz1uZXcgQXJyYXkocik7ZnVuY3Rpb24gcyh0LHIpey0xIT09ZS5pbmRleE9mKHIpJiZ2b2lkIDA9PT1uW3JdPyhvW3RdPXIsbltyXT10KTpvW3RdPSIifWlmKEFycmF5LmlzQXJyYXkodCkpZm9yKGE9MDthPHI7YSsrKXMoYSx0W2FdKTtlbHNlIGZvcihzKDAsaSksYT0xO2E8cjthKyspcyhhLGkrKGErMSkpO3JldHVybiBvfWUuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJncmlkIixzY2hlbWE6e2xheW91dDp7Z3JpZDpsfX0sbGF5b3V0QXR0cmlidXRlczpsLHNpemVEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPXQuZ3JpZHx8e30saT1jKGUsciwieCIpLGE9YyhlLHIsInkiKTtpZih0LmdyaWR8fGl8fGEpe3ZhciBvLGYsaD1BcnJheS5pc0FycmF5KHIuc3VicGxvdHMpJiZBcnJheS5pc0FycmF5KHIuc3VicGxvdHNbMF0pLHA9QXJyYXkuaXNBcnJheShpKSxkPUFycmF5LmlzQXJyYXkoYSksZz1wJiZpIT09ci54YXhlcyYmZCYmYSE9PXIueWF4ZXM7aD8obz1yLnN1YnBsb3RzLmxlbmd0aCxmPXIuc3VicGxvdHNbMF0ubGVuZ3RoKTooZCYmKG89YS5sZW5ndGgpLHAmJihmPWkubGVuZ3RoKSk7dmFyIHY9cy5uZXdDb250YWluZXIoZSwiZ3JpZCIpLG09VCgicm93cyIsbykseT1UKCJjb2x1bW5zIixmKTtpZihtKnk+MSl7aHx8cHx8ZHx8ImluZGVwZW5kZW50Ij09PVQoInBhdHRlcm4iKSYmKGg9ITApLHYuX2hhc1N1YnBsb3RHcmlkPWg7dmFyIHgsYixfPSJ0b3AgdG8gYm90dG9tIj09PVQoInJvd29yZGVyIiksdz1oPy4yOi4xLGs9aD8uMzouMTtnJiZlLl9zcGxvbUdyaWREZmx0JiYoeD1lLl9zcGxvbUdyaWREZmx0LnhzaWRlLGI9ZS5fc3Bsb21HcmlkRGZsdC55c2lkZSksdi5fZG9tYWlucz17eDp1KCJ4IixULHcseCx5KSx5OnUoInkiLFQsayxiLG0sXyl9fWVsc2UgZGVsZXRlIGUuZ3JpZH1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuIG4uY29lcmNlKHIsdixsLHQsZSl9fSxjb250ZW50RGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmdyaWQ7aWYociYmci5fZG9tYWlucyl7dmFyIG4saSxhLG8scyxsLHUsaD10LmdyaWR8fHt9LHA9ZS5fc3VicGxvdHMsZD1yLl9oYXNTdWJwbG90R3JpZCxnPXIucm93cyx2PXIuY29sdW1ucyxtPSJpbmRlcGVuZGVudCI9PT1yLnBhdHRlcm4seT1yLl9heGlzTWFwPXt9O2lmKGQpe3ZhciB4PWguc3VicGxvdHN8fFtdO2w9ci5zdWJwbG90cz1uZXcgQXJyYXkoZyk7dmFyIGI9MTtmb3Iobj0wO248ZztuKyspe3ZhciBfPWxbbl09bmV3IEFycmF5KHYpLHc9eFtuXXx8W107Zm9yKGk9MDtpPHY7aSsrKWlmKG0/KHM9MT09PWI/Inh5IjoieCIrYisieSIrYixiKyspOnM9d1tpXSxfW2ldPSIiLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihzKSl7aWYodT1zLmluZGV4T2YoInkiKSxhPXMuc2xpY2UoMCx1KSxvPXMuc2xpY2UodSksdm9pZCAwIT09eVthXSYmeVthXSE9PWl8fHZvaWQgMCE9PXlbb10mJnlbb10hPT1uKWNvbnRpbnVlO19baV09cyx5W2FdPWkseVtvXT1ufX19ZWxzZXt2YXIgaz1jKGUsaCwieCIpLFQ9YyhlLGgsInkiKTtyLnhheGVzPWYoayxwLnhheGlzLHYseSwieCIpLHIueWF4ZXM9ZihULHAueWF4aXMsZyx5LCJ5Iil9dmFyIEE9ci5fYW5jaG9ycz17fSxNPSJ0b3AgdG8gYm90dG9tIj09PXIucm93b3JkZXI7Zm9yKHZhciBTIGluIHkpe3ZhciBFLEMsTCx6PVMuY2hhckF0KDApLE89clt6KyJzaWRlIl07aWYoTy5sZW5ndGg8OClBW1NdPSJmcmVlIjtlbHNlIGlmKCJ4Ij09PXope2lmKCJ0Ij09PU8uY2hhckF0KDApPT09TT8oRT0wLEM9MSxMPWcpOihFPWctMSxDPS0xLEw9LTEpLGQpe3ZhciBJPXlbU107Zm9yKG49RTtuIT09TDtuKz1DKWlmKChzPWxbbl1bSV0pJiYodT1zLmluZGV4T2YoInkiKSxzLnNsaWNlKDAsdSk9PT1TKSl7QVtTXT1zLnNsaWNlKHUpO2JyZWFrfX1lbHNlIGZvcihuPUU7biE9PUw7bis9QylpZihvPXIueWF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKFMrbykpe0FbU109bzticmVha319ZWxzZSBpZigibCI9PT1PLmNoYXJBdCgwKT8oRT0wLEM9MSxMPXYpOihFPXYtMSxDPS0xLEw9LTEpLGQpe3ZhciBEPXlbU107Zm9yKG49RTtuIT09TDtuKz1DKWlmKChzPWxbRF1bbl0pJiYodT1zLmluZGV4T2YoInkiKSxzLnNsaWNlKHUpPT09Uykpe0FbU109cy5zbGljZSgwLHUpO2JyZWFrfX1lbHNlIGZvcihuPUU7biE9PUw7bis9QylpZihhPXIueGF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKGErUykpe0FbU109YTticmVha319fX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvcmVnZXgiOjcxNiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NTQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczfV0sNjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aSgiaW1hZ2UiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzb3VyY2U6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXpleDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemV5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiY29udGFpbiIsInN0cmV0Y2giXSxkZmx0OiJjb250YWluIixlZGl0VHlwZToiYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHg6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueC50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueS50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifSl9LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NTR9XSw2MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5pbWFnZXMsZj1lLl9pZC5jaGFyQXQoMCksaD0wO2g8dS5sZW5ndGg7aCsrKWlmKGM9ImltYWdlc1siK2grIl0uIiwobD11W2hdKVtmKyJyZWYiXT09PWUuX2lkKXt2YXIgcD1sW2ZdLGQ9bFsic2l6ZSIrZl0sZz1udWxsLHY9bnVsbDtpZihvKXtnPWkocCxlLnJhbmdlKTt2YXIgbT1kL01hdGgucG93KDEwLGcpLzI7dj0yKk1hdGgubG9nKG0rTWF0aC5zcXJ0KDErbSptKSkvTWF0aC5MTjEwfWVsc2Ugdj0oZz1NYXRoLnBvdygxMCxwKSkqKE1hdGgucG93KDEwLGQvMiktTWF0aC5wb3coMTAsLWQvMikpO24oZyk/bih2KXx8KHY9bnVsbCk6KGc9bnVsbCx2PW51bGwpLGEoYytmLGcpLGEoYysic2l6ZSIrZix2KX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjcyNiwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDYyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgcz1hKCJzb3VyY2UiKTtpZighYSgidmlzaWJsZSIsISFzKSlyZXR1cm4gZTthKCJsYXllciIpLGEoInhhbmNob3IiKSxhKCJ5YW5jaG9yIiksYSgic2l6ZXgiKSxhKCJzaXpleSIpLGEoInNpemluZyIpLGEoIm9wYWNpdHkiKTtmb3IodmFyIGw9e19mdWxsTGF5b3V0OnJ9LGM9WyJ4IiwieSJdLHU9MDt1PDI7dSsrKXt2YXIgZj1jW3VdLGg9aS5jb2VyY2VSZWYodCxlLGwsZiwicGFwZXIiKTtpZigicGFwZXIiIT09aClpLmdldEZyb21JZChsLGgpLl9pbWdJbmRpY2VzLnB1c2goZS5faW5kZXgpO2kuY29lcmNlUG9zaXRpb24oZSxsLGEsaCxmLDApfXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOiJpbWFnZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czpzfSl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc0NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi9hdHRyaWJ1dGVzIjo2MjF9XSw2MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2RyYXdpbmciKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLHM9dC5fZnVsbExheW91dCxsPVtdLGM9e30sdT1bXTtmb3Iocj0wO3I8cy5pbWFnZXMubGVuZ3RoO3IrKyl7dmFyIGY9cy5pbWFnZXNbcl07aWYoZi52aXNpYmxlKWlmKCJiZWxvdyI9PT1mLmxheWVyJiYicGFwZXIiIT09Zi54cmVmJiYicGFwZXIiIT09Zi55cmVmKXtlPWYueHJlZitmLnlyZWY7dmFyIGg9cy5fcGxvdHNbZV07aWYoIWgpe3UucHVzaChmKTtjb250aW51ZX1oLm1haW5wbG90JiYoZT1oLm1haW5wbG90LmlkKSxjW2VdfHwoY1tlXT1bXSksY1tlXS5wdXNoKGYpfWVsc2UiYWJvdmUiPT09Zi5sYXllcj9sLnB1c2goZik6dS5wdXNoKGYpfXZhciBwPXt4OntsZWZ0OntzaXppbmc6InhNaW4iLG9mZnNldDowfSxjZW50ZXI6e3NpemluZzoieE1pZCIsb2Zmc2V0Oi0uNX0scmlnaHQ6e3NpemluZzoieE1heCIsb2Zmc2V0Oi0xfX0seTp7dG9wOntzaXppbmc6IllNaW4iLG9mZnNldDowfSxtaWRkbGU6e3NpemluZzoiWU1pZCIsb2Zmc2V0Oi0uNX0sYm90dG9tOntzaXppbmc6IllNYXgiLG9mZnNldDotMX19fTtmdW5jdGlvbiBkKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKCF0aGlzLmltZ3x8dGhpcy5pbWcuc3JjIT09ZS5zb3VyY2Upe3IuYXR0cigieG1sbnMiLG8uc3ZnKTt2YXIgaT1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXt2YXIgbj1uZXcgSW1hZ2U7ZnVuY3Rpb24gaSgpe3IucmVtb3ZlKCksdCgpfXRoaXMuaW1nPW4sbi5zZXRBdHRyaWJ1dGUoImNyb3NzT3JpZ2luIiwiYW5vbnltb3VzIiksbi5vbmVycm9yPWksbi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLndpZHRoPXRoaXMud2lkdGgsZS5oZWlnaHQ9dGhpcy5oZWlnaHQsZS5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh0aGlzLDAsMCk7dmFyIG49ZS50b0RhdGFVUkwoImltYWdlL3BuZyIpO3IuYXR0cigieGxpbms6aHJlZiIsbiksdCgpfSxyLm9uKCJlcnJvciIsaSksbi5zcmM9ZS5zb3VyY2V9LmJpbmQodGhpcykpO3QuX3Byb21pc2VzLnB1c2goaSl9fWZ1bmN0aW9uIGcoZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1hLmdldEZyb21JZCh0LGUueHJlZiksbD1hLmdldEZyb21JZCh0LGUueXJlZiksYz1zLl9zaXplLHU9bz9NYXRoLmFicyhvLmwycChlLnNpemV4KS1vLmwycCgwKSk6ZS5zaXpleCpjLncsZj1sP01hdGguYWJzKGwubDJwKGUuc2l6ZXkpLWwubDJwKDApKTplLnNpemV5KmMuaCxoPXUqcC54W2UueGFuY2hvcl0ub2Zmc2V0LGQ9ZipwLnlbZS55YW5jaG9yXS5vZmZzZXQsZz1wLnhbZS54YW5jaG9yXS5zaXppbmcrcC55W2UueWFuY2hvcl0uc2l6aW5nLHY9KG8/by5yMnAoZS54KStvLl9vZmZzZXQ6ZS54KmMudytjLmwpK2gsbT0obD9sLnIycChlLnkpK2wuX29mZnNldDpjLmgtZS55KmMuaCtjLnQpK2Q7c3dpdGNoKGUuc2l6aW5nKXtjYXNlImZpbGwiOmcrPSIgc2xpY2UiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6Zz0ibm9uZSJ9ci5hdHRyKHt4OnYseTptLHdpZHRoOnUsaGVpZ2h0OmYscHJlc2VydmVBc3BlY3RSYXRpbzpnLG9wYWNpdHk6ZS5vcGFjaXR5fSk7dmFyIHk9KG8/by5faWQ6IiIpKyhsP2wuX2lkOiIiKTtpLnNldENsaXBVcmwocix5PyJjbGlwIitzLl91aWQreTpudWxsLHQpfXZhciB2PXMuX2ltYWdlTG93ZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YSh1KSxtPXMuX2ltYWdlVXBwZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShsKTt2LmVudGVyKCkuYXBwZW5kKCJpbWFnZSIpLG0uZW50ZXIoKS5hcHBlbmQoImltYWdlIiksdi5leGl0KCkucmVtb3ZlKCksbS5leGl0KCkucmVtb3ZlKCksdi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KSxtLmVhY2goZnVuY3Rpb24odCl7ZC5iaW5kKHRoaXMpKHQpLGcuYmluZCh0aGlzKSh0KX0pO3ZhciB5PU9iamVjdC5rZXlzKHMuX3Bsb3RzKTtmb3Iocj0wO3I8eS5sZW5ndGg7cisrKXtlPXlbcl07dmFyIHg9cy5fcGxvdHNbZV07aWYoeC5pbWFnZWxheWVyKXt2YXIgYj14LmltYWdlbGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoY1tlXXx8W10pO2IuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KX19fX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6Njc4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9kcmF3aW5nIjo1OTgsZDM6MTU0fV0sNjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJpbWFnZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImltYWdlcyIpLGRyYXc6dCgiLi9kcmF3IiksY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjc1OCwiLi9hdHRyaWJ1dGVzIjo2MjEsIi4vY29udmVydF9jb29yZHMiOjYyMiwiLi9kZWZhdWx0cyI6NjIzLCIuL2RyYXciOjYyNH1dLDYyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxlZ2VuZCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToibGVnZW5kIn0sZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6InYiLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZW9yZGVyOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJyZXZlcnNlZCIsImdyb3VwZWQiXSxleHRyYXM6WyJub3JtYWwiXSxlZGl0VHlwZToibGVnZW5kIn0sdHJhY2Vncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJsZWdlbmQifSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjEuMDIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToibGVnZW5kIn0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDoxLGVkaXRUeXBlOiJsZWdlbmQifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGVkaXRUeXBlOiJsZWdlbmQifX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NCwiLi4vY29sb3IvYXR0cmlidXRlcyI6NTc2fV0sNjI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2Nyb2xsQmFyV2lkdGg6NixzY3JvbGxCYXJNaW5IZWlnaHQ6MjAsc2Nyb2xsQmFyQ29sb3I6IiM4MDhCQTQiLHNjcm9sbEJhck1hcmdpbjo0LHRleHRPZmZzZXRYOjQwfX0se31dLDYyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYyx1LGYsaCxwPXQubGVnZW5kfHx7fSxkPTAsZz0hMSx2PSJub3JtYWwiLG09MDttPHIubGVuZ3RoO20rKyl7dmFyIHk9clttXTt5LnZpc2libGUmJigoeS5zaG93bGVnZW5kfHx5Ll9kZmx0U2hvd0xlZ2VuZCkmJihkKysseS5zaG93bGVnZW5kJiYoZz0hMCwobi50cmFjZUlzKHksInBpZSIpfHwhMD09PXkuX2lucHV0LnNob3dsZWdlbmQpJiZkKyspKSwobi50cmFjZUlzKHksImJhciIpJiYic3RhY2siPT09ZS5iYXJtb2RlfHwtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiXS5pbmRleE9mKHkuZmlsbCkpJiYodj1sLmlzR3JvdXBlZCh7dHJhY2VvcmRlcjp2fSk/Imdyb3VwZWQrcmV2ZXJzZWQiOiJyZXZlcnNlZCIpLHZvaWQgMCE9PXkubGVnZW5kZ3JvdXAmJiIiIT09eS5sZWdlbmRncm91cCYmKHY9bC5pc1JldmVyc2VkKHt0cmFjZW9yZGVyOnZ9KT8icmV2ZXJzZWQrZ3JvdXBlZCI6Imdyb3VwZWQiKSl9dmFyIHg9aS5jb2VyY2UodCxlLHMsInNob3dsZWdlbmQiLGcmJmQ+MSk7aWYoITEhPT14fHxwLnVpcmV2aXNpb24pe3ZhciBiPWEubmV3Q29udGFpbmVyKGUsImxlZ2VuZCIpO2lmKHcoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksITEhPT14KXtpZih3KCJiZ2NvbG9yIixlLnBhcGVyX2JnY29sb3IpLHcoImJvcmRlcmNvbG9yIiksdygiYm9yZGVyd2lkdGgiKSxpLmNvZXJjZUZvbnQodywiZm9udCIsZS5mb250KSx3KCJvcmllbnRhdGlvbiIpLCJoIj09PWIub3JpZW50YXRpb24pe3ZhciBfPXQueGF4aXM7bi5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoXyk/KGM9MCxmPSJsZWZ0Iix1PTEuMSxoPSJib3R0b20iKTooYz0wLGY9ImxlZnQiLHU9LS4xLGg9InRvcCIpfXcoInRyYWNlb3JkZXIiLHYpLGwuaXNHcm91cGVkKGUubGVnZW5kKSYmdygidHJhY2Vncm91cGdhcCIpLHcoIngiLGMpLHcoInhhbmNob3IiLGYpLHcoInkiLHUpLHcoInlhbmNob3IiLGgpLHcoInZhbGlnbiIpLGkubm9uZU9yQWxsKHAsYixbIngiLCJ5Il0pfX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGkuY29lcmNlKHAsYixvLHQsZSl9fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6ODAxLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2F0dHJpYnV0ZXMiOjYyNiwiLi9oZWxwZXJzIjo2MzJ9XSw2Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIvZXZlbnRzIiksbD10KCIuLi9kcmFnZWxlbWVudCIpLGM9dCgiLi4vZHJhd2luZyIpLHU9dCgiLi4vY29sb3IiKSxmPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGg9dCgiLi9oYW5kbGVfY2xpY2siKSxwPXQoIi4vY29uc3RhbnRzIiksZD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIiksZz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iiksdj1nLkxJTkVfU1BBQ0lORyxtPWcuRlJPTV9UTCx5PWcuRlJPTV9CUix4PXQoIi4vZ2V0X2xlZ2VuZF9kYXRhIiksYj10KCIuL3N0eWxlIiksXz10KCIuL2hlbHBlcnMiKSx3PWQuREJMQ0xJQ0tERUxBWTtmdW5jdGlvbiBrKHQsZSxyLG4saSl7dmFyIGE9ci5kYXRhKClbMF1bMF0udHJhY2Usbz17ZXZlbnQ6aSxub2RlOnIubm9kZSgpLGN1cnZlTnVtYmVyOmEuaW5kZXgsZXhwYW5kZWRJbmRleDphLl9leHBhbmRlZEluZGV4LGRhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dCxmcmFtZXM6dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxjb25maWc6dC5fY29udGV4dCxmdWxsRGF0YTp0Ll9mdWxsRGF0YSxmdWxsTGF5b3V0OnQuX2Z1bGxMYXlvdXR9O2lmKGEuX2dyb3VwJiYoby5ncm91cD1hLl9ncm91cCksInBpZSI9PT1hLnR5cGUmJihvLmxhYmVsPXIuZGF0dW0oKVswXS5sYWJlbCksITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9sZWdlbmRjbGljayIsbykpaWYoMT09PW4pZS5fY2xpY2tUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoKHIsdCxuKX0sdyk7ZWxzZSBpZigyPT09bil7ZS5fY2xpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQoZS5fY2xpY2tUaW1lb3V0KSx0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTAsITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9sZWdlbmRkb3VibGVjbGljayIsbykmJmgocix0LG4pfX1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgbj10LmRhdGEoKVswXVswXSxhPWUuX2Z1bGxMYXlvdXQscz1uLnRyYWNlLGw9by50cmFjZUlzKHMsInBpZSIpLHU9cy5pbmRleCxoPWUuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dCYmIWwsZD1sP24ubGFiZWw6cy5uYW1lO2EubWV0YSYmKGQ9aS50ZW1wbGF0ZVN0cmluZyhkLHttZXRhOmEubWV0YX0pKTt2YXIgZz1pLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IiwibGVnZW5kdGV4dCIpO2Z1bmN0aW9uIG0ocil7Zi5jb252ZXJ0VG9Uc3BhbnMocixlLGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5kYXRhKClbMF1bMF07aWYoIXIudHJhY2Uuc2hvd2xlZ2VuZClyZXR1cm4gdm9pZCB0LnJlbW92ZSgpO3ZhciBuLGksYT10LnNlbGVjdCgiZ1tjbGFzcyo9bWF0aC1ncm91cF0iKSxvPWEubm9kZSgpLHM9ZS5fZnVsbExheW91dC5sZWdlbmQuZm9udC5zaXplKnY7aWYobyl7dmFyIGw9Yy5iQm94KG8pO249bC5oZWlnaHQsaT1sLndpZHRoLGMuc2V0VHJhbnNsYXRlKGEsMCxuLzQpfWVsc2V7dmFyIHU9dC5zZWxlY3QoIi5sZWdlbmR0ZXh0IiksaD1mLmxpbmVDb3VudCh1KSxkPXUubm9kZSgpO249cypoLGk9ZD9jLmJCb3goZCkud2lkdGg6MDt2YXIgZz1zKiguMysoMS1oKS8yKTtmLnBvc2l0aW9uVGV4dCh1LHAudGV4dE9mZnNldFgsZyl9ci5saW5lSGVpZ2h0PXMsci5oZWlnaHQ9TWF0aC5tYXgobiwxNikrMyxyLndpZHRoPWl9KHQsZSl9KX1nLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuY2FsbChjLmZvbnQsYS5sZWdlbmQuZm9udCkudGV4dChoP0EoZCxyKTpkKSxmLnBvc2l0aW9uVGV4dChnLHAudGV4dE9mZnNldFgsMCksaD9nLmNhbGwoZi5tYWtlRWRpdGFibGUse2dkOmUsdGV4dDpkfSkuY2FsbChtKS5vbigiZWRpdCIsZnVuY3Rpb24odCl7dGhpcy50ZXh0KEEodCxyKSkuY2FsbChtKTt2YXIgYT1uLnRyYWNlLl9mdWxsSW5wdXR8fHt9LHM9e307aWYoby5oYXNUcmFuc2Zvcm0oYSwiZ3JvdXBieSIpKXt2YXIgbD1vLmdldFRyYW5zZm9ybUluZGljZXMoYSwiZ3JvdXBieSIpLGM9bFtsLmxlbmd0aC0xXSxmPWkua2V5ZWRDb250YWluZXIoYSwidHJhbnNmb3Jtc1siK2MrIl0uc3R5bGVzIiwidGFyZ2V0IiwidmFsdWUubmFtZSIpO2Yuc2V0KG4udHJhY2UuX2dyb3VwLHQpLHM9Zi5jb25zdHJ1Y3RVcGRhdGUoKX1lbHNlIHMubmFtZT10O3JldHVybiBvLmNhbGwoIl9ndWlSZXN0eWxlIixlLHMsdSl9KTptKGcpfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj1NYXRoLm1heCg0LGUpO2lmKHQmJnQudHJpbSgpLmxlbmd0aD49ci8yKXJldHVybiB0O2Zvcih2YXIgbj1yLSh0PXR8fCIiKS5sZW5ndGg7bj4wO24tLSl0Kz0iICI7cmV0dXJuIHR9ZnVuY3Rpb24gTSh0LGUpe3ZhciByLGE9MSxvPWkuZW5zdXJlU2luZ2xlKHQsInJlY3QiLCJsZWdlbmR0b2dnbGUiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmNhbGwodS5maWxsLCJyZ2JhKDAsMCwwLDApIil9KTtvLm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7KHI9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU8dz9hKz0xOihhPTEsZS5fbGVnZW5kTW91c2VEb3duVGltZT1yKX0pLG8ub24oIm1vdXNldXAiLGZ1bmN0aW9uKCl7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcj1lLl9mdWxsTGF5b3V0LmxlZ2VuZDsobmV3IERhdGUpLmdldFRpbWUoKS1lLl9sZWdlbmRNb3VzZURvd25UaW1lPncmJihhPU1hdGgubWF4KGEtMSwxKSksayhlLHIsdCxhLG4uZXZlbnQpfX0pfWZ1bmN0aW9uIFModCxlLHIpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1hLmxlZ2VuZCxzPW8uYm9yZGVyd2lkdGgsbD1fLmlzR3JvdXBlZChvKSx1PTA7aWYoby5fd2lkdGg9MCxvLl9oZWlnaHQ9MCxfLmlzVmVydGljYWwobykpbCYmZS5lYWNoKGZ1bmN0aW9uKHQsZSl7Yy5zZXRUcmFuc2xhdGUodGhpcywwLGUqby50cmFjZWdyb3VwZ2FwKX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9ZS5oZWlnaHQsbj1lLndpZHRoO2Muc2V0VHJhbnNsYXRlKHRoaXMscyw1K3Mrby5faGVpZ2h0K3IvMiksby5faGVpZ2h0Kz1yLG8uX3dpZHRoPU1hdGgubWF4KG8uX3dpZHRoLG4pfSksby5fd2lkdGgrPTQ1KzIqcyxvLl9oZWlnaHQrPTEwKzIqcyxsJiYoby5faGVpZ2h0Kz0oby5fbGdyb3Vwc0xlbmd0aC0xKSpvLnRyYWNlZ3JvdXBnYXApLHU9NDA7ZWxzZSBpZihsKXt2YXIgZixoPTAscD0wLGQ9ZS5kYXRhKCksZz0wO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciB2PWRbZl0sbT12Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS53aWR0aH0pLHk9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsbSkseD12LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2VbMF0uaGVpZ2h0fSwwKTtwPU1hdGgubWF4KHAseSksaD1NYXRoLm1heChoLHgpLGc9TWF0aC5tYXgoZyx2Lmxlbmd0aCl9cCs9NSxwKz00MDt2YXIgYj1bby5fd2lkdGhdLHc9W10saz0wO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspe2EuX3NpemUudzxzK28uX3dpZHRoKzUrcD8oYltiLmxlbmd0aC0xXT1iWzBdLG8uX3dpZHRoPXAsaysrKTpvLl93aWR0aCs9cCtzO3ZhciBUPWsqaDtUKz1rPjA/by50cmFjZWdyb3VwZ2FwOjAsdy5wdXNoKFQpLGIucHVzaChvLl93aWR0aCl9ZS5lYWNoKGZ1bmN0aW9uKHQsZSl7Yy5zZXRUcmFuc2xhdGUodGhpcyxiW2VdLHdbZV0pfSksZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRyYWNlcyIpLGU9MDt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHI9dFswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcywwLDUrcytlK3IvMiksZSs9cn0pfSk7dmFyIEE9d1t3Lmxlbmd0aC0xXStoO28uX2hlaWdodD0xMCsyKnMrQTt2YXIgTT1NYXRoLm1heC5hcHBseShudWxsLGIpO28uX3dpZHRoPU0rcCs0MCxvLl93aWR0aCs9MipzfWVsc2V7dmFyIFM9MCxFPTAsQz0wLEw9MCx6PTA7ci5lYWNoKGZ1bmN0aW9uKHQpe0M9TWF0aC5tYXgoNDArdFswXS53aWR0aCxDKSx6Kz00MCt0WzBdLndpZHRoKzV9KTt2YXIgTz1hLl9zaXplLnc+cyt6LTU7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1PPzQwK3RbMF0ud2lkdGg6QztzK0wrNStyPmEuX3NpemUudyYmKEw9MCxTKz1FLG8uX2hlaWdodCs9RSxFPTApLGMuc2V0VHJhbnNsYXRlKHRoaXMscytMLDUrcytlLmhlaWdodC8yK1MpLG8uX3dpZHRoKz01K3IsTCs9NStyLEU9TWF0aC5tYXgoZS5oZWlnaHQsRSl9KSxPP28uX2hlaWdodD1FOm8uX2hlaWdodCs9RSxvLl93aWR0aCs9MipzLG8uX2hlaWdodCs9MTArMipzfW8uX3dpZHRoPU1hdGguY2VpbChvLl93aWR0aCksby5faGVpZ2h0PU1hdGguY2VpbChvLl9oZWlnaHQpO3ZhciBJPXQuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dHx8dC5fY29udGV4dC5lZGl0cy5sZWdlbmRQb3NpdGlvbjtyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZHRvZ2dsZSIpO2Muc2V0UmVjdChyLDAsLWUuaGVpZ2h0LzIsKEk/MDpvLl93aWR0aCkrdSxlLmhlaWdodCl9KX1mdW5jdGlvbiBFKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQubGVnZW5kLHI9ImxlZnQiO2kuaXNSaWdodEFuY2hvcihlKT9yPSJyaWdodCI6aS5pc0NlbnRlckFuY2hvcihlKSYmKHI9ImNlbnRlciIpO3ZhciBuPSJ0b3AiO2kuaXNCb3R0b21BbmNob3IoZSk/bj0iYm90dG9tIjppLmlzTWlkZGxlQW5jaG9yKGUpJiYobj0ibWlkZGxlIiksYS5hdXRvTWFyZ2luKHQsImxlZ2VuZCIse3g6ZS54LHk6ZS55LGw6ZS5fd2lkdGgqbVtyXSxyOmUuX3dpZHRoKnlbcl0sYjplLl9oZWlnaHQqeVtuXSx0OmUuX2hlaWdodCptW25dfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj0ibGVnZW5kIitlLl91aWQ7aWYoZS5faW5mb2xheWVyJiZ0LmNhbGNkYXRhKXt0Ll9sZWdlbmRNb3VzZURvd25UaW1lfHwodC5fbGVnZW5kTW91c2VEb3duVGltZT0wKTt2YXIgcz1lLmxlZ2VuZCxmPWUuc2hvd2xlZ2VuZCYmeCh0LmNhbGNkYXRhLHMpLGg9ZS5oaWRkZW5sYWJlbHN8fFtdO2lmKCFlLnNob3dsZWdlbmR8fCFmLmxlbmd0aClyZXR1cm4gZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLnJlbW92ZSgpLGUuX3RvcGRlZnMuc2VsZWN0KCIjIityKS5yZW1vdmUoKSx2b2lkIGEuYXV0b01hcmdpbih0LCJsZWdlbmQiKTtmb3IodmFyIGQ9MCxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciB2PTA7djxmW2ddLmxlbmd0aDt2Kyspe3ZhciBfPWZbZ11bdl1bMF0sdz1fLnRyYWNlLEE9by50cmFjZUlzKHcsInBpZSIpP18ubGFiZWw6dy5uYW1lO2Q9TWF0aC5tYXgoZCxBJiZBLmxlbmd0aHx8MCl9dmFyIEM9ITEsTD1pLmVuc3VyZVNpbmdsZShlLl9pbmZvbGF5ZXIsImciLCJsZWdlbmQiLGZ1bmN0aW9uKHQpe3QuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxDPSEwfSksej1pLmVuc3VyZVNpbmdsZUJ5SWQoZS5fdG9wZGVmcywiY2xpcFBhdGgiLHIsZnVuY3Rpb24odCl7dC5hcHBlbmQoInJlY3QiKX0pLE89aS5lbnN1cmVTaW5nbGUoTCwicmVjdCIsImJnIixmdW5jdGlvbih0KXt0LmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pO08uY2FsbCh1LnN0cm9rZSxzLmJvcmRlcmNvbG9yKS5jYWxsKHUuZmlsbCxzLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHMuYm9yZGVyd2lkdGgrInB4Iik7dmFyIEk9aS5lbnN1cmVTaW5nbGUoTCwiZyIsInNjcm9sbGJveCIpLEQ9aS5lbnN1cmVTaW5nbGUoTCwicmVjdCIsInNjcm9sbGJhciIsZnVuY3Rpb24odCl7dC5hdHRyKHtyeDoyMCxyeTozLHdpZHRoOjAsaGVpZ2h0OjB9KS5jYWxsKHUuZmlsbCwiIzgwOEJBNCIpfSksUD1JLnNlbGVjdEFsbCgiZy5ncm91cHMiKS5kYXRhKGYpO1AuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyb3VwcyIpLFAuZXhpdCgpLnJlbW92ZSgpO3ZhciBSPVAuc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmRhdGEoaS5pZGVudGl0eSk7Ui5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2VzIiksUi5leGl0KCkucmVtb3ZlKCksUi5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtyZXR1cm4gby50cmFjZUlzKGUsInBpZSIpPy0xIT09aC5pbmRleE9mKHRbMF0ubGFiZWwpPy41OjE6ImxlZ2VuZG9ubHkiPT09ZS52aXNpYmxlPy41OjF9KS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuY2FsbChULHQsZCl9KS5jYWxsKGIsdCkuZWFjaChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLmNhbGwoTSx0KX0pLGkuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe0MmJihTKHQsUCxSKSxFKHQpKTt2YXIgdT1lLndpZHRoLGY9ZS5oZWlnaHQ7Uyh0LFAsUikscy5faGVpZ2h0PmY/ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5sZWdlbmQscj0ibGVmdCI7aS5pc1JpZ2h0QW5jaG9yKGUpP3I9InJpZ2h0IjppLmlzQ2VudGVyQW5jaG9yKGUpJiYocj0iY2VudGVyIik7YS5hdXRvTWFyZ2luKHQsImxlZ2VuZCIse3g6ZS54LHk6LjUsbDplLl93aWR0aCptW3JdLHI6ZS5fd2lkdGgqeVtyXSxiOjAsdDowfSl9KHQpOkUodCk7dmFyIGg9ZS5fc2l6ZSxkPWgubCtoLncqcy54LGc9aC50K2guaCooMS1zLnkpO2kuaXNSaWdodEFuY2hvcihzKT9kLT1zLl93aWR0aDppLmlzQ2VudGVyQW5jaG9yKHMpJiYoZC09cy5fd2lkdGgvMiksaS5pc0JvdHRvbUFuY2hvcihzKT9nLT1zLl9oZWlnaHQ6aS5pc01pZGRsZUFuY2hvcihzKSYmKGctPXMuX2hlaWdodC8yKTt2YXIgdj1zLl93aWR0aCx4PWgudzt2Png/KGQ9aC5sLHY9eCk6KGQrdj51JiYoZD11LXYpLGQ8MCYmKGQ9MCksdj1NYXRoLm1pbih1LWQscy5fd2lkdGgpKTt2YXIgYixfLHcsVCxBPXMuX2hlaWdodCxNPWguaDtpZihBPk0/KGc9aC50LEE9TSk6KGcrQT5mJiYoZz1mLUEpLGc8MCYmKGc9MCksQT1NYXRoLm1pbihmLWcscy5faGVpZ2h0KSksYy5zZXRUcmFuc2xhdGUoTCxkLGcpLEQub24oIi5kcmFnIixudWxsKSxMLm9uKCJ3aGVlbCIsbnVsbCkscy5faGVpZ2h0PD1BfHx0Ll9jb250ZXh0LnN0YXRpY1Bsb3QpTy5hdHRyKHt3aWR0aDp2LXMuYm9yZGVyd2lkdGgsaGVpZ2h0OkEtcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgvMix5OnMuYm9yZGVyd2lkdGgvMn0pLGMuc2V0VHJhbnNsYXRlKEksMCwwKSx6LnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOnYtMipzLmJvcmRlcndpZHRoLGhlaWdodDpBLTIqcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgseTpzLmJvcmRlcndpZHRofSksYy5zZXRDbGlwVXJsKEkscix0KSxjLnNldFJlY3QoRCwwLDAsMCwwKSxkZWxldGUgcy5fc2Nyb2xsWTtlbHNle3ZhciBGLEIsTj1NYXRoLm1heChwLnNjcm9sbEJhck1pbkhlaWdodCxBKkEvcy5faGVpZ2h0KSxqPUEtTi0yKnAuc2Nyb2xsQmFyTWFyZ2luLFY9cy5faGVpZ2h0LUEsVT1qL1YscT1NYXRoLm1pbihzLl9zY3JvbGxZfHwwLFYpO08uYXR0cih7d2lkdGg6di0yKnMuYm9yZGVyd2lkdGgrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6QS1zLmJvcmRlcndpZHRoLHg6cy5ib3JkZXJ3aWR0aC8yLHk6cy5ib3JkZXJ3aWR0aC8yfSksei5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDp2LTIqcy5ib3JkZXJ3aWR0aCtwLnNjcm9sbEJhcldpZHRoK3Auc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDpBLTIqcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgseTpzLmJvcmRlcndpZHRoK3F9KSxjLnNldENsaXBVcmwoSSxyLHQpLEcocSxOLFUpLEwub24oIndoZWVsIixmdW5jdGlvbigpe0cocT1pLmNvbnN0cmFpbihzLl9zY3JvbGxZK24uZXZlbnQuZGVsdGFZL2oqViwwLFYpLE4sVSksMCE9PXEmJnEhPT1WJiZuLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9KTt2YXIgSD1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe0Y9bi5ldmVudC5zb3VyY2VFdmVudC5jbGllbnRZLEI9cX0pLm9uKCJkcmFnIixmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7Mj09PXQuYnV0dG9uc3x8dC5jdHJsS2V5fHxHKHE9aS5jb25zdHJhaW4oKHQuY2xpZW50WS1GKS9VK0IsMCxWKSxOLFUpfSk7RC5jYWxsKEgpfWZ1bmN0aW9uIEcoZSxyLG4pe3MuX3Njcm9sbFk9dC5fZnVsbExheW91dC5sZWdlbmQuX3Njcm9sbFk9ZSxjLnNldFRyYW5zbGF0ZShJLDAsLWUpLGMuc2V0UmVjdChELHYscC5zY3JvbGxCYXJNYXJnaW4rZSpuLHAuc2Nyb2xsQmFyV2lkdGgsciksei5zZWxlY3QoInJlY3QiKS5hdHRyKHt5OnMuYm9yZGVyd2lkdGgrZX0pfXQuX2NvbnRleHQuZWRpdHMubGVnZW5kUG9zaXRpb24mJihMLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCksbC5pbml0KHtlbGVtZW50Okwubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoTCk7dz10LngsVD10Lnl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe3ZhciByPXcrdCxuPVQrZTtjLnNldFRyYW5zbGF0ZShMLHIsbiksYj1sLmFsaWduKHIsMCxoLmwsaC5sK2gudyxzLnhhbmNob3IpLF89bC5hbGlnbihuLDAsaC50K2guaCxoLnQscy55YW5jaG9yKX0sZG9uZUZuOmZ1bmN0aW9uKCl7dm9pZCAwIT09YiYmdm9pZCAwIT09XyYmby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQseyJsZWdlbmQueCI6YiwibGVnZW5kLnkiOl99KX0sY2xpY2tGbjpmdW5jdGlvbihyLG4pe3ZhciBpPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcudHJhY2VzIikuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbi5jbGllbnRYPj10LmxlZnQmJm4uY2xpZW50WDw9dC5yaWdodCYmbi5jbGllbnRZPj10LnRvcCYmbi5jbGllbnRZPD10LmJvdHRvbX0pO2kuc2l6ZSgpPjAmJmsodCxMLGkscixuKX19KSl9XSx0KX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY3MiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6Njc2LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2V2ZW50cyI6Njg5LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcyNCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY29sb3IiOjU3NywiLi4vZHJhZ2VsZW1lbnQiOjU5NSwiLi4vZHJhd2luZyI6NTk4LCIuL2NvbnN0YW50cyI6NjI3LCIuL2dldF9sZWdlbmRfZGF0YSI6NjMwLCIuL2hhbmRsZV9jbGljayI6NjMxLCIuL2hlbHBlcnMiOjYzMiwiLi9zdHlsZSI6NjM0LGQzOjE1NH1dLDYzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPXt9LHM9W10sbD0hMSxjPXt9LHU9MDtmdW5jdGlvbiBmKHQscil7aWYoIiIhPT10JiZpLmlzR3JvdXBlZChlKSktMT09PXMuaW5kZXhPZih0KT8ocy5wdXNoKHQpLGw9ITAsb1t0XT1bW3JdXSk6b1t0XS5wdXNoKFtyXSk7ZWxzZXt2YXIgbj0ifn5pIit1O3MucHVzaChuKSxvW25dPVtbcl1dLHUrK319Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGg9dFtyXSxwPWhbMF0sZD1wLnRyYWNlLGc9ZC5sZWdlbmRncm91cDtpZihkLnZpc2libGUmJmQuc2hvd2xlZ2VuZClpZihuLnRyYWNlSXMoZCwicGllIikpZm9yKGNbZ118fChjW2ddPXt9KSxhPTA7YTxoLmxlbmd0aDthKyspe3ZhciB2PWhbYV0ubGFiZWw7Y1tnXVt2XXx8KGYoZyx7bGFiZWw6dixjb2xvcjpoW2FdLmNvbG9yLGk6aFthXS5pLHRyYWNlOmQscHRzOmhbYV0ucHRzfSksY1tnXVt2XT0hMCl9ZWxzZSBmKGcscCl9aWYoIXMubGVuZ3RoKXJldHVybltdO3ZhciBtLHkseD1zLmxlbmd0aDtpZihsJiZpLmlzR3JvdXBlZChlKSlmb3IoeT1uZXcgQXJyYXkoeCkscj0wO3I8eDtyKyspbT1vW3Nbcl1dLHlbcl09aS5pc1JldmVyc2VkKGUpP20ucmV2ZXJzZSgpOm07ZWxzZXtmb3IoeT1bbmV3IEFycmF5KHgpXSxyPTA7cjx4O3IrKyltPW9bc1tyXV1bMF0seVswXVtpLmlzUmV2ZXJzZWQoZSk/eC1yLTE6cl09bTt4PTF9cmV0dXJuIGUuX2xncm91cHNMZW5ndGg9eCx5fX0seyIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2hlbHBlcnMiOjYzMn1dLDYzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT0hMDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCFlLl9kcmFnZ2VkJiYhZS5fZWRpdGluZyl7dmFyIG8scyxsLGMsdSxmPWUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzP2UuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLnNsaWNlKCk6W10saD10LmRhdGEoKVswXVswXSxwPWUuX2Z1bGxEYXRhLGQ9aC50cmFjZSxnPWQubGVnZW5kZ3JvdXAsdj17fSxtPVtdLHk9W10seD1bXTtpZigxPT09ciYmYSYmZS5kYXRhJiZlLl9jb250ZXh0LnNob3dUaXBzPyhuLm5vdGlmaWVyKG4uXyhlLCJEb3VibGUtY2xpY2sgb24gbGVnZW5kIHRvIGlzb2xhdGUgb25lIHRyYWNlIiksImxvbmciKSxhPSExKTphPSExLGkudHJhY2VJcyhkLCJwaWUiKSl7dmFyIGI9aC5sYWJlbCxfPWYuaW5kZXhPZihiKTsxPT09cj8tMT09PV8/Zi5wdXNoKGIpOmYuc3BsaWNlKF8sMSk6Mj09PXImJihmPVtdLGUuY2FsY2RhdGFbMF0uZm9yRWFjaChmdW5jdGlvbih0KXtiIT09dC5sYWJlbCYmZi5wdXNoKHQubGFiZWwpfSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWYubGVuZ3RoJiYtMT09PV8mJihmPVtdKSksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsImhpZGRlbmxhYmVscyIsZil9ZWxzZXt2YXIgdyxrPWcmJmcubGVuZ3RoLFQ9W107aWYoaylmb3Iobz0wO288cC5sZW5ndGg7bysrKSh3PXBbb10pLnZpc2libGUmJncubGVnZW5kZ3JvdXA9PT1nJiZULnB1c2gobyk7aWYoMT09PXIpe3ZhciBBO3N3aXRjaChkLnZpc2libGUpe2Nhc2UhMDpBPSJsZWdlbmRvbmx5IjticmVhaztjYXNlITE6QT0hMTticmVhaztjYXNlImxlZ2VuZG9ubHkiOkE9ITB9aWYoaylmb3Iobz0wO288cC5sZW5ndGg7bysrKSExIT09cFtvXS52aXNpYmxlJiZwW29dLmxlZ2VuZGdyb3VwPT09ZyYmTyhwW29dLEEpO2Vsc2UgTyhkLEEpfWVsc2UgaWYoMj09PXIpe3ZhciBNLFMsRT0hMDtmb3Iobz0wO288cC5sZW5ndGg7bysrKWlmKCEocFtvXT09PWQpJiYhKE09ayYmcFtvXS5sZWdlbmRncm91cD09PWcpJiYhMD09PXBbb10udmlzaWJsZSYmIWkudHJhY2VJcyhwW29dLCJub3RMZWdlbmRJc29sYXRhYmxlIikpe0U9ITE7YnJlYWt9Zm9yKG89MDtvPHAubGVuZ3RoO28rKylpZighMSE9PXBbb10udmlzaWJsZSYmIWkudHJhY2VJcyhwW29dLCJub3RMZWdlbmRJc29sYXRhYmxlIikpc3dpdGNoKGQudmlzaWJsZSl7Y2FzZSJsZWdlbmRvbmx5IjpPKHBbb10sITApO2JyZWFrO2Nhc2UhMDpTPSEhRXx8ImxlZ2VuZG9ubHkiLE09cFtvXT09PWR8fGsmJnBbb10ubGVnZW5kZ3JvdXA9PT1nLE8ocFtvXSwhIU18fFMpfX1mb3Iobz0wO288eS5sZW5ndGg7bysrKWlmKGw9eVtvXSl7dmFyIEM9bC5jb25zdHJ1Y3RVcGRhdGUoKSxMPU9iamVjdC5rZXlzKEMpO2ZvcihzPTA7czxMLmxlbmd0aDtzKyspYz1MW3NdLCh2W2NdPXZbY118fFtdKVt4W29dXT1DW2NdfWZvcih1PU9iamVjdC5rZXlzKHYpLG89MDtvPHUubGVuZ3RoO28rKylmb3IoYz11W29dLHM9MDtzPG0ubGVuZ3RoO3MrKyl2W2NdLmhhc093blByb3BlcnR5KHMpfHwodltjXVtzXT12b2lkIDApO2kuY2FsbCgiX2d1aVJlc3R5bGUiLGUsdixtKX19ZnVuY3Rpb24geih0LGUscil7dmFyIG49bS5pbmRleE9mKHQpLGk9dltlXTtyZXR1cm4gaXx8KGk9dltlXT1bXSksLTE9PT1tLmluZGV4T2YodCkmJihtLnB1c2godCksbj1tLmxlbmd0aC0xKSxpW25dPXIsbn1mdW5jdGlvbiBPKHQsZSl7dmFyIHI9dC5fZnVsbElucHV0O2lmKGkuaGFzVHJhbnNmb3JtKHIsImdyb3VwYnkiKSl7dmFyIGE9eVtyLmluZGV4XTtpZighYSl7dmFyIG89aS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsImdyb3VwYnkiKSxzPW9bby5sZW5ndGgtMV07YT1uLmtleWVkQ29udGFpbmVyKHIsInRyYW5zZm9ybXNbIitzKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLnZpc2libGUiKSx5W3IuaW5kZXhdPWF9dmFyIGw9YS5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWwmJihsPSEwKSwhMSE9PWwmJmEuc2V0KHQuX2dyb3VwLGUpLHhbci5pbmRleF09eihyLmluZGV4LCJ2aXNpYmxlIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmZTt6KHIuaW5kZXgsInZpc2libGUiLGMpfX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5fV0sNjMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuaXNHcm91cGVkPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09KHQudHJhY2VvcmRlcnx8IiIpLmluZGV4T2YoImdyb3VwZWQiKX0sci5pc1ZlcnRpY2FsPWZ1bmN0aW9uKHQpe3JldHVybiJoIiE9PXQub3JpZW50YXRpb259LHIuaXNSZXZlcnNlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fCIiKS5pbmRleE9mKCJyZXZlcnNlZCIpfX0se31dLDYzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToibGVnZW5kIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpLHN0eWxlOnQoIi4vc3R5bGUiKX19LHsiLi9hdHRyaWJ1dGVzIjo2MjYsIi4vZGVmYXVsdHMiOjYyOCwiLi9kcmF3Ijo2MjksIi4vc3R5bGUiOjYzNH1dLDYzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksYz10KCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWEuZW5zdXJlU2luZ2xlKHIsImciLCJsYXllcnMiKTtpLnN0eWxlKCJvcGFjaXR5Iix0WzBdLnRyYWNlLm9wYWNpdHkpO3ZhciBvPWUuX2Z1bGxMYXlvdXQubGVnZW5kLnZhbGlnbixzPXRbMF0ubGluZUhlaWdodCxsPXRbMF0uaGVpZ2h0O2lmKCJtaWRkbGUiIT09byYmcyYmbCl7dmFyIGM9e3RvcDoxLGJvdHRvbTotMX1bb10qKC41KihzLWwrMykpO2kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitjKyIpIil9ZWxzZSBpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7aS5zZWxlY3RBbGwoImcubGVnZW5kZmlsbCIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGZpbGwiLCEwKSxpLnNlbGVjdEFsbCgiZy5sZWdlbmRsaW5lcyIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGxpbmVzIiwhMCk7dmFyIHU9aS5zZWxlY3RBbGwoImcubGVnZW5kc3ltYm9scyIpLmRhdGEoW3RdKTt1LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kc3ltYm9scyIsITApLHUuc2VsZWN0QWxsKCJnLmxlZ2VuZHBvaW50cyIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZHBvaW50cyIsITApfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9W107IndhdGVyZmFsbCI9PT1lLnR5cGUmJmUudmlzaWJsZSYmKHI9dFswXS5oYXNUb3RhbHM/W1siaW5jcmVhc2luZyIsIk0tNiwtNlY2SDBaIl0sWyJ0b3RhbHMiLCJNNiw2SDBMLTYsLTZILTBaIl0sWyJkZWNyZWFzaW5nIiwiTTYsNlYtNkgwWiJdXTpbWyJpbmNyZWFzaW5nIiwiTS02LC02VjZINloiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SC02WiJdXSk7dmFyIGk9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmR3YXRlcmZhbGwiKS5kYXRhKHIpO2kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmR3YXRlcmZhbGwiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLGkuZXhpdCgpLnJlbW92ZSgpLGkuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbdFswXV0ubWFya2VyO3IuYXR0cigiZCIsdFsxXSkuc3R5bGUoInN0cm9rZS13aWR0aCIsaS5saW5lLndpZHRoKyJweCIpLmNhbGwocy5maWxsLGkuY29sb3IpLGkubGluZS53aWR0aCYmci5jYWxsKHMuc3Ryb2tlLGkubGluZS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPWUubWFya2VyfHx7fSxhPXIubGluZXx8e30sbz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZGJhciIpLmRhdGEoaS50cmFjZUlzKGUsImJhciIpP1t0XTpbXSk7by5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZGJhciIsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9dFswXSxvPShpLm1sdysxfHxhLndpZHRoKzEpLTE7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvKyJweCIpLmNhbGwocy5maWxsLGkubWN8fHIuY29sb3IpLG8mJmUuY2FsbChzLnN0cm9rZSxpLm1sY3x8YS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kYm94IikuZGF0YShpLnRyYWNlSXMoZSwiYm94LXZpb2xpbiIpJiZlLnZpc2libGU/W3RdOltdKTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kYm94IiwhMCkuYXR0cigiZCIsIk02LDZILTZWLTZINloiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lLmxpbmUud2lkdGgscj1uLnNlbGVjdCh0aGlzKTtyLnN0eWxlKCJzdHJva2Utd2lkdGgiLHQrInB4IikuY2FsbChzLmZpbGwsZS5maWxsY29sb3IpLHQmJnMuc3Ryb2tlKHIsZS5saW5lLmNvbG9yKX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRwaWUiKS5kYXRhKGkudHJhY2VJcyhlLCJwaWUiKSYmZS52aXNpYmxlP1t0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZHBpZSIsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksci5leGl0KCkucmVtb3ZlKCksci5zaXplKCkmJnIuY2FsbChjLHRbMF0sZSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbMF0udHJhY2UsaT1yLnZpc2libGUmJnIuZmlsbCYmIm5vbmUiIT09ci5maWxsLGE9bC5oYXNMaW5lcyhyKSxzPXIuY29udG91cnMsYz0hMSx1PSExO2lmKHMpe3ZhciBmPXMuY29sb3Jpbmc7ImxpbmVzIj09PWY/Yz0hMDphPSJub25lIj09PWZ8fCJoZWF0bWFwIj09PWZ8fHMuc2hvd2xpbmVzLCJjb25zdHJhaW50Ij09PXMudHlwZT9pPSI9IiE9PXMuX29wZXJhdGlvbjoiZmlsbCIhPT1mJiYiaGVhdG1hcCIhPT1mfHwodT0hMCl9dmFyIGg9bC5oYXNNYXJrZXJzKHIpfHxsLmhhc1RleHQocikscD1pfHx1LGQ9YXx8YyxnPWh8fCFwPyJNNSwwIjpkPyJNNSwtMiI6Ik01LC0zIix2PW4uc2VsZWN0KHRoaXMpLG09di5zZWxlY3QoIi5sZWdlbmRmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShpfHx1P1t0XTpbXSk7bS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWZpbGwiLCEwKSxtLmV4aXQoKS5yZW1vdmUoKSxtLmF0dHIoImQiLGcrImgzMHY2aC0zMHoiKS5jYWxsKGk/by5maWxsR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIG49ImxlZ2VuZGZpbGwtIityLnVpZDtvLmdyYWRpZW50KHQsZSxuLCJob3Jpem9udGFscmV2ZXJzZWQiLHIuY29sb3JzY2FsZSwiZmlsbCIpfX0pO3ZhciB5PXYuc2VsZWN0KCIubGVnZW5kbGluZXMiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKGF8fGM/W3RdOltdKTt5LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLHkuZXhpdCgpLnJlbW92ZSgpLHkuYXR0cigiZCIsZysoYz8ibDMwLDAuMDAwMSI6ImgzMCIpKS5jYWxsKGE/by5saW5lR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIG49ImxlZ2VuZGxpbmUtIityLnVpZDtvLmxpbmVHcm91cFN0eWxlKHQpLG8uZ3JhZGllbnQodCxlLG4sImhvcml6b250YWxyZXZlcnNlZCIsci5jb2xvcnNjYWxlLCJzdHJva2UiKX19KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIHIsaSxzPXRbMF0sYz1zLnRyYWNlLHU9bC5oYXNNYXJrZXJzKGMpLGY9bC5oYXNUZXh0KGMpLGg9bC5oYXNMaW5lcyhjKTtmdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj1hLm5lc3RlZFByb3BlcnR5KGMsdCkuZ2V0KCksaT1hLmlzQXJyYXlPclR5cGVkQXJyYXkobikmJmU/ZShuKTpuO2lmKHIpe2lmKGk8clswXSlyZXR1cm4gclswXTtpZihpPnJbMV0pcmV0dXJuIHJbMV19cmV0dXJuIGl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdFswXX1pZih1fHxmfHxoKXt2YXIgZz17fSx2PXt9O2lmKHUpe2cubWM9cCgibWFya2VyLmNvbG9yIixkKSxnLm14PXAoIm1hcmtlci5zeW1ib2wiLGQpLGcubW89cCgibWFya2VyLm9wYWNpdHkiLGEubWVhbixbLjIsMV0pLGcubWxjPXAoIm1hcmtlci5saW5lLmNvbG9yIixkKSxnLm1sdz1wKCJtYXJrZXIubGluZS53aWR0aCIsYS5tZWFuLFswLDVdKSx2Lm1hcmtlcj17c2l6ZXJlZjoxLHNpemVtaW46MSxzaXplbW9kZToiZGlhbWV0ZXIifTt2YXIgbT1wKCJtYXJrZXIuc2l6ZSIsYS5tZWFuLFsyLDE2XSk7Zy5tcz1tLHYubWFya2VyLnNpemU9bX1oJiYodi5saW5lPXt3aWR0aDpwKCJsaW5lLndpZHRoIixkLFswLDEwXSl9KSxmJiYoZy50eD0iQWEiLGcudHA9cCgidGV4dHBvc2l0aW9uIixkKSxnLnRzPTEwLGcudGM9cCgidGV4dGZvbnQuY29sb3IiLGQpLGcudGY9cCgidGV4dGZvbnQuZmFtaWx5IixkKSkscj1bYS5taW5FeHRlbmQocyxnKV0sKGk9YS5taW5FeHRlbmQoYyx2KSkuc2VsZWN0ZWRwb2ludHM9bnVsbH12YXIgeT1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikseD15LnNlbGVjdEFsbCgicGF0aC5zY2F0dGVycHRzIikuZGF0YSh1P3I6W10pO3guZW50ZXIoKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJzY2F0dGVycHRzIiwhMCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIikseC5leGl0KCkucmVtb3ZlKCkseC5jYWxsKG8ucG9pbnRTdHlsZSxpLGUpLHUmJihyWzBdLm1yYz0zKTt2YXIgYj15LnNlbGVjdEFsbCgiZy5wb2ludHRleHQiKS5kYXRhKGY/cjpbXSk7Yi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50dGV4dCIsITApLmFwcGVuZCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLGIuZXhpdCgpLnJlbW92ZSgpLGIuc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChvLnRleHRQb2ludFN0eWxlLGksZSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZGNhbmRsZSIpLmRhdGEoImNhbmRsZXN0aWNrIj09PWUudHlwZSYmZS52aXNpYmxlP1t0LHRdOltdKTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kY2FuZGxlIiwhMCkuYXR0cigiZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSC04TS04LDZWLTZIOFoiOiJNMTUsMEg4TTgsLTZWNkgtOFoifSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goZnVuY3Rpb24odCxyKXt2YXIgaT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sYT1pLmxpbmUud2lkdGgsbz1uLnNlbGVjdCh0aGlzKTtvLnN0eWxlKCJzdHJva2Utd2lkdGgiLGErInB4IikuY2FsbChzLmZpbGwsaS5maWxsY29sb3IpLGEmJnMuc3Ryb2tlKG8saS5saW5lLmNvbG9yKX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRvaGxjIikuZGF0YSgib2hsYyI9PT1lLnR5cGUmJmUudmlzaWJsZT9bdCx0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZG9obGMiLCEwKS5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiBlPyJNLTE1LDBIME0tOCwtNlYwIjoiTTE1LDBIME04LDZWMCJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaChmdW5jdGlvbih0LHIpe3ZhciBpPWVbcj8iaW5jcmVhc2luZyI6ImRlY3JlYXNpbmciXSxhPWkubGluZS53aWR0aCxsPW4uc2VsZWN0KHRoaXMpO2wuc3R5bGUoImZpbGwiLCJub25lIikuY2FsbChvLmRhc2hMaW5lLGkubGluZS5kYXNoLGEpLGEmJnMuc3Ryb2tlKGwsaS5saW5lLmNvbG9yKX0pfSl9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZSI6MTAzNywiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL2NvbG9yIjo1NzcsIi4uL2RyYXdpbmciOjU5OCxkMzoxNTR9XSw2MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vLi4vYnVpbGQvcGxvdGljb24iKSxsPW8uXyxjPWUuZXhwb3J0cz17fTtmdW5jdGlvbiB1KHQsZSl7dmFyIHIsaSxvPWUuY3VycmVudFRhcmdldCxzPW8uZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxsPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxjPXQuX2Z1bGxMYXlvdXQsdT17fSxmPWEubGlzdCh0LG51bGwsITApLGg9Im9uIjtpZigiem9vbSI9PT1zKXt2YXIgcCxkPSJpbiI9PT1sPy41OjIsZz0oMStkKS8yLHY9KDEtZCkvMjtmb3IoaT0wO2k8Zi5sZW5ndGg7aSsrKWlmKCEocj1mW2ldKS5maXhlZHJhbmdlKWlmKHA9ci5fbmFtZSwiYXV0byI9PT1sKXVbcCsiLmF1dG9yYW5nZSJdPSEwO2Vsc2UgaWYoInJlc2V0Ij09PWwpe2lmKHZvaWQgMD09PXIuX3JhbmdlSW5pdGlhbCl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNle3ZhciBtPXIuX3JhbmdlSW5pdGlhbC5zbGljZSgpO3VbcCsiLnJhbmdlWzBdIl09bVswXSx1W3ArIi5yYW5nZVsxXSJdPW1bMV19dm9pZCAwIT09ci5fc2hvd1NwaWtlSW5pdGlhbCYmKHVbcCsiLnNob3dzcGlrZXMiXT1yLl9zaG93U3Bpa2VJbml0aWFsLCJvbiIhPT1ofHxyLl9zaG93U3Bpa2VJbml0aWFsfHwoaD0ib2ZmIikpfWVsc2V7dmFyIHk9W3IucjJsKHIucmFuZ2VbMF0pLHIucjJsKHIucmFuZ2VbMV0pXSx4PVtnKnlbMF0rdip5WzFdLGcqeVsxXSt2KnlbMF1dO3VbcCsiLnJhbmdlWzBdIl09ci5sMnIoeFswXSksdVtwKyIucmFuZ2VbMV0iXT1yLmwycih4WzFdKX1jLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWh9ZWxzZXtpZigiaG92ZXJtb2RlIiE9PXN8fCJ4IiE9PWwmJiJ5IiE9PWwpe2lmKCJob3Zlcm1vZGUiPT09cyYmImNsb3Nlc3QiPT09bCl7Zm9yKGk9MDtpPGYubGVuZ3RoO2krKylyPWZbaV0sIm9uIiE9PWh8fHIuc2hvd3NwaWtlc3x8KGg9Im9mZiIpO2MuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aH19ZWxzZSBsPWMuX2lzSG9yaXo/InkiOiJ4IixvLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLGwpO3Vbc109bH1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCx1KX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldCxpPXIuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxhPXIuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxvPXQuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLmdsM2Qscz17fSxsPWkuc3BsaXQoIi4iKSxjPTA7YzxvLmxlbmd0aDtjKyspc1tvW2NdKyIuIitsWzFdXT1hO3ZhciB1PSJwYW4iPT09YT9hOiJ6b29tIjtzLmRyYWdtb2RlPXUsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQscyl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5nbDNkLG89e30scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9bCsiLmNhbWVyYSIsdT1pW2xdLl9zY2VuZTsicmVzZXRMYXN0U2F2ZSI9PT1yPyhvW2MrIi51cCJdPXUudmlld0luaXRpYWwudXAsb1tjKyIuZXllIl09dS52aWV3SW5pdGlhbC5leWUsb1tjKyIuY2VudGVyIl09dS52aWV3SW5pdGlhbC5jZW50ZXIpOiJyZXNldERlZmF1bHQiPT09ciYmKG9bYysiLnVwIl09bnVsbCxvW2MrIi5leWUiXT1udWxsLG9bYysiLmNlbnRlciJdPW51bGwpfW4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LG8pfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQsbj1yLl9wcmV2aW91c1ZhbCxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5nbDNkLG89WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxzPXt9LGw9e307aWYobilsPW4sci5fcHJldmlvdXNWYWw9bnVsbDtlbHNle2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGY9aVt1XSxoPXUrIi5ob3Zlcm1vZGUiO3NbaF09Zi5ob3Zlcm1vZGUsbFtoXT0hMTtmb3IodmFyIHA9MDtwPDM7cCsrKXt2YXIgZD1vW3BdLGc9dSsiLiIrZCsiLnNob3dzcGlrZXMiO2xbZ109ITEsc1tnXT1mW2RdLnNob3dzcGlrZXN9fXIuX3ByZXZpb3VzVmFsPXN9cmV0dXJuIGx9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0LHM9by5fc3VicGxvdHMuZ2VvLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXSx1PW9bY107aWYoInpvb20iPT09aSl7dmFyIGY9dS5wcm9qZWN0aW9uLnNjYWxlLGg9ImluIj09PWE/MipmOi41KmY7bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsYysiLnByb2plY3Rpb24uc2NhbGUiLGgpfWVsc2UicmVzZXQiPT09aSYmbSh0LCJnZW8iKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3JldHVybiFlLmhvdmVybW9kZSYmKGUuX2hhcygiY2FydGVzaWFuIik/ZS5faXNIb3Jpej8ieSI6IngiOiJjbG9zZXN0Iil9ZnVuY3Rpb24gdih0KXt2YXIgZT1nKHQpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LCJob3Zlcm1vZGUiLGUpfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxpPXIuX3N1YnBsb3RzW2VdLGE9e30sbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz1pW29dLGw9cltzXS5fc3VicGxvdC52aWV3SW5pdGlhbCxjPU9iamVjdC5rZXlzKGwpLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XTthW3MrIi4iK2ZdPWxbZl19bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsYSl9Yy50b0ltYWdlPXtuYW1lOiJ0b0ltYWdlIix0aXRsZTpmdW5jdGlvbih0KXt2YXIgZT0odC5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9uc3x8e30pLmZvcm1hdHx8InBuZyI7cmV0dXJuIGwodCwicG5nIj09PWU/IkRvd25sb2FkIHBsb3QgYXMgYSBwbmciOiJEb3dubG9hZCBwbG90Iil9LGljb246cy5jYW1lcmEsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9ucyxyPXtmb3JtYXQ6ZS5mb3JtYXR8fCJwbmcifTtvLm5vdGlmaWVyKGwodCwiVGFraW5nIHNuYXBzaG90IC0gdGhpcyBtYXkgdGFrZSBhIGZldyBzZWNvbmRzIiksImxvbmciKSwic3ZnIiE9PXIuZm9ybWF0JiZvLmlzSUUoKSYmKG8ubm90aWZpZXIobCh0LCJJRSBvbmx5IHN1cHBvcnRzIHN2Zy4gIENoYW5naW5nIGZvcm1hdCB0byBzdmcuIiksImxvbmciKSxyLmZvcm1hdD0ic3ZnIiksWyJmaWxlbmFtZSIsIndpZHRoIiwiaGVpZ2h0Iiwic2NhbGUiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF0mJihyW3RdPWVbdF0pfSksbi5jYWxsKCJkb3dubG9hZEltYWdlIix0LHIpLnRoZW4oZnVuY3Rpb24oZSl7by5ub3RpZmllcihsKHQsIlNuYXBzaG90IHN1Y2NlZWRlZCIpKyIgLSAiK2UsImxvbmciKX0pLmNhdGNoKGZ1bmN0aW9uKCl7by5ub3RpZmllcihsKHQsIlNvcnJ5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIGRvd25sb2FkaW5nIHlvdXIgc25hcHNob3QhIiksImxvbmciKX0pfX0sYy5zZW5kRGF0YVRvQ2xvdWQ9e25hbWU6InNlbmREYXRhVG9DbG91ZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiRWRpdCBpbiBDaGFydCBTdHVkaW8iKX0saWNvbjpzLmRpc2ssY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSxjLnpvb20yZD17bmFtZToiem9vbTJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJab29tIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Inpvb20iLGljb246cy56b29tYm94LGNsaWNrOnV9LGMucGFuMmQ9e25hbWU6InBhbjJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJQYW4iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOnMucGFuLGNsaWNrOnV9LGMuc2VsZWN0MmQ9e25hbWU6InNlbGVjdDJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJCb3ggU2VsZWN0Iil9LGF0dHI6ImRyYWdtb2RlIix2YWw6InNlbGVjdCIsaWNvbjpzLnNlbGVjdGJveCxjbGljazp1fSxjLmxhc3NvMmQ9e25hbWU6Imxhc3NvMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIkxhc3NvIFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJsYXNzbyIsaWNvbjpzLmxhc3NvLGNsaWNrOnV9LGMuem9vbUluMmQ9e25hbWU6Inpvb21JbjJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246cy56b29tX3BsdXMsY2xpY2s6dX0sYy56b29tT3V0MmQ9e25hbWU6Inpvb21PdXQyZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246cy56b29tX21pbnVzLGNsaWNrOnV9LGMuYXV0b1NjYWxlMmQ9e25hbWU6ImF1dG9TY2FsZTJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJBdXRvc2NhbGUiKX0sYXR0cjoiem9vbSIsdmFsOiJhdXRvIixpY29uOnMuYXV0b3NjYWxlLGNsaWNrOnV9LGMucmVzZXRTY2FsZTJkPXtuYW1lOiJyZXNldFNjYWxlMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IGF4ZXMiKX0sYXR0cjoiem9vbSIsdmFsOiJyZXNldCIsaWNvbjpzLmhvbWUsY2xpY2s6dX0sYy5ob3ZlckNsb3Nlc3RDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiU2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp1fSxjLmhvdmVyQ29tcGFyZUNhcnRlc2lhbj17bmFtZToiaG92ZXJDb21wYXJlQ2FydGVzaWFuIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJDb21wYXJlIGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2lzSG9yaXo/InkiOiJ4In0saWNvbjpzLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OiJuZSIsY2xpY2s6dX0sYy56b29tM2Q9e25hbWU6Inpvb20zZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ6b29tIixpY29uOnMuem9vbWJveCxjbGljazpmfSxjLnBhbjNkPXtuYW1lOiJwYW4zZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiUGFuIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6InBhbiIsaWNvbjpzLnBhbixjbGljazpmfSxjLm9yYml0Um90YXRpb249e25hbWU6Im9yYml0Um90YXRpb24iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIk9yYml0YWwgcm90YXRpb24iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoib3JiaXQiLGljb246c1siM2Rfcm90YXRlIl0sY2xpY2s6Zn0sYy50YWJsZVJvdGF0aW9uPXtuYW1lOiJ0YWJsZVJvdGF0aW9uIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUdXJudGFibGUgcm90YXRpb24iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoidHVybnRhYmxlIixpY29uOnNbInotYXhpcyJdLGNsaWNrOmZ9LGMucmVzZXRDYW1lcmFEZWZhdWx0M2Q9e25hbWU6InJlc2V0Q2FtZXJhRGVmYXVsdDNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJSZXNldCBjYW1lcmEgdG8gZGVmYXVsdCIpfSxhdHRyOiJyZXNldERlZmF1bHQiLGljb246cy5ob21lLGNsaWNrOmh9LGMucmVzZXRDYW1lcmFMYXN0U2F2ZTNkPXtuYW1lOiJyZXNldENhbWVyYUxhc3RTYXZlM2QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IGNhbWVyYSB0byBsYXN0IHNhdmUiKX0sYXR0cjoicmVzZXRMYXN0U2F2ZSIsaWNvbjpzLm1vdmllLGNsaWNrOmh9LGMuaG92ZXJDbG9zZXN0M2Q9e25hbWU6ImhvdmVyQ2xvc2VzdDNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9cCh0LGUpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIpfX0sYy56b29tSW5HZW89e25hbWU6Inpvb21JbkdlbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSBpbiIpfSxhdHRyOiJ6b29tIix2YWw6ImluIixpY29uOnMuem9vbV9wbHVzLGNsaWNrOmR9LGMuem9vbU91dEdlbz17bmFtZToiem9vbU91dEdlbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246cy56b29tX21pbnVzLGNsaWNrOmR9LGMucmVzZXRHZW89e25hbWU6InJlc2V0R2VvIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJSZXNldCIpfSxhdHRyOiJyZXNldCIsdmFsOm51bGwsaWNvbjpzLmF1dG9zY2FsZSxjbGljazpkfSxjLmhvdmVyQ2xvc2VzdEdlbz17bmFtZToiaG92ZXJDbG9zZXN0R2VvIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOnZ9LGMuaG92ZXJDbG9zZXN0R2wyZD17bmFtZToiaG92ZXJDbG9zZXN0R2wyZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp2fSxjLmhvdmVyQ2xvc2VzdFBpZT17bmFtZToiaG92ZXJDbG9zZXN0UGllIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp2fSxjLnRvZ2dsZUhvdmVyPXtuYW1lOiJ0b2dnbGVIb3ZlciIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPXAodCxlKTtyLmhvdmVybW9kZT1nKHQpLG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIpfX0sYy5yZXNldFZpZXdzPXtuYW1lOiJyZXNldFZpZXdzIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJSZXNldCB2aWV3cyIpfSxpY29uOnMuaG9tZSxjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldDtyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwiem9vbSIpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsInJlc2V0IiksdSh0LGUpLHIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLCJyZXNldExhc3RTYXZlIiksaCh0LGUpLG0odCwiZ2VvIiksbSh0LCJtYXBib3giKX19LGMudG9nZ2xlU3Bpa2VsaW5lcz17bmFtZToidG9nZ2xlU3Bpa2VsaW5lcyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIFNwaWtlIExpbmVzIil9LGljb246cy5zcGlrZWxpbmUsYXR0cjoiX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQiLHZhbDoib24iLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD0ib24iPT09ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD8ib2ZmIjoib24iO3ZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49dC5fZnVsbExheW91dCxpPWEubGlzdCh0LG51bGwsITApLG89e30scz0wO3M8aS5sZW5ndGg7cysrKWU9aVtzXSxyPWUuX25hbWUsb1tyKyIuc2hvd3NwaWtlcyJdPSJvbiI9PT1uLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkfHxlLl9zaG93U3Bpa2VJbml0aWFsO3JldHVybiBvfSh0KTtuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxyKX19LGMucmVzZXRWaWV3TWFwYm94PXtuYW1lOiJyZXNldFZpZXdNYXBib3giLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IHZpZXciKX0sYXR0cjoicmVzZXQiLGljb246cy5ob21lLGNsaWNrOmZ1bmN0aW9uKHQpe20odCwibWFwYm94Iil9fX0seyIuLi8uLi8uLi9idWlsZC9wbG90aWNvbiI6MiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi8uLi9wbG90cy9wbG90cyI6ODEwLCIuLi8uLi9yZWdpc3RyeSI6ODI5fV0sNjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IubWFuYWdlPXQoIi4vbWFuYWdlIil9LHsiLi9tYW5hZ2UiOjYzN31dLDYzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxpPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi9tb2RlYmFyIikscz10KCIuL2J1dHRvbnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuX2NvbnRleHQsbD1lLl9tb2RlQmFyO2lmKHIuZGlzcGxheU1vZGVCYXJ8fHIud2F0ZXJtYXJrKXtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUpKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJtdXN0IGJlIGFuIGFycmF5LiJdLmpvaW4oIiAiKSk7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvQWRkKSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnNUb0FkZCogY29uZmlndXJhdGlvbiBvcHRpb25zIiwibXVzdCBiZSBhbiBhcnJheS4iXS5qb2luKCIgIikpO3ZhciBjLHU9ci5tb2RlQmFyQnV0dG9ucztjPUFycmF5LmlzQXJyYXkodSkmJnUubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWZvcih2YXIgcj10W2VdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZigic3RyaW5nIj09dHlwZW9mIGkpe2lmKHZvaWQgMD09PXNbaV0pdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJpbnZhbGlkIGJ1dHRvbiBuYW1lIl0uam9pbigiICIpKTt0W2VdW25dPXNbaV19fXJldHVybiB0fSh1KTohci5kaXNwbGF5TW9kZUJhciYmci53YXRlcm1hcms/W106ZnVuY3Rpb24odCxlLHIsbyl7dmFyIGw9dC5fZnVsbExheW91dCxjPXQuX2Z1bGxEYXRhLHU9bC5faGFzKCJjYXJ0ZXNpYW4iKSxmPWwuX2hhcygiZ2wzZCIpLGg9bC5faGFzKCJnZW8iKSxwPWwuX2hhcygicGllIiksZD1sLl9oYXMoImdsMmQiKSxnPWwuX2hhcygidGVybmFyeSIpLHY9bC5faGFzKCJtYXBib3giKSxtPWwuX2hhcygicG9sYXIiKSx5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLmxpc3Qoe19mdWxsTGF5b3V0OnR9LG51bGwsITApLHI9MDtyPGUubGVuZ3RoO3IrKylpZighZVtyXS5maXhlZHJhbmdlKXJldHVybiExO3JldHVybiEwfShsKSx4PVtdO2Z1bmN0aW9uIGIodCl7aWYodC5sZW5ndGgpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07LTE9PT1lLmluZGV4T2YoaSkmJnIucHVzaChzW2ldKX14LnB1c2gocil9fXZhciBfPVsidG9JbWFnZSJdO28mJl8ucHVzaCgic2VuZERhdGFUb0Nsb3VkIik7YihfKTt2YXIgdz1bXSxrPVtdLFQ9W10sQT1bXTsodXx8ZHx8cHx8ZykraCtmK3YrbT4xPyhrPVsidG9nZ2xlSG92ZXIiXSxUPVsicmVzZXRWaWV3cyJdKTpoPyh3PVsiem9vbUluR2VvIiwiem9vbU91dEdlbyJdLGs9WyJob3ZlckNsb3Nlc3RHZW8iXSxUPVsicmVzZXRHZW8iXSk6Zj8oaz1bImhvdmVyQ2xvc2VzdDNkIl0sVD1bInJlc2V0Q2FtZXJhRGVmYXVsdDNkIiwicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIl0pOnY/KGs9WyJ0b2dnbGVIb3ZlciJdLFQ9WyJyZXNldFZpZXdNYXBib3giXSk6az1kP1siaG92ZXJDbG9zZXN0R2wyZCJdOnA/WyJob3ZlckNsb3Nlc3RQaWUiXTpbInRvZ2dsZUhvdmVyIl07dSYmKGs9WyJ0b2dnbGVTcGlrZWxpbmVzIiwiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiwiaG92ZXJDb21wYXJlQ2FydGVzaWFuIl0pOyF1JiYhZHx8eXx8KHc9WyJ6b29tSW4yZCIsInpvb21PdXQyZCIsImF1dG9TY2FsZTJkIl0sInJlc2V0Vmlld3MiIT09VFswXSYmKFQ9WyJyZXNldFNjYWxlMmQiXSkpO2Y/QT1bInpvb20zZCIsInBhbjNkIiwib3JiaXRSb3RhdGlvbiIsInRhYmxlUm90YXRpb24iXToodXx8ZCkmJiF5fHxnP0E9WyJ6b29tMmQiLCJwYW4yZCJdOnZ8fGg/QT1bInBhbjJkIl06bSYmKEE9WyJ6b29tMmQiXSk7KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0hMSxyPTA7cjx0Lmxlbmd0aCYmIWU7cisrKXt2YXIgbj10W3JdO24uX21vZHVsZSYmbi5fbW9kdWxlLnNlbGVjdFBvaW50cyYmKGEudHJhY2VJcyhuLCJzY2F0dGVyLWxpa2UiKT8oaS5oYXNNYXJrZXJzKG4pfHxpLmhhc1RleHQobikpJiYoZT0hMCk6YS50cmFjZUlzKG4sImJveC12aW9saW4iKSYmImFsbCIhPT1uLmJveHBvaW50cyYmImFsbCIhPT1uLnBvaW50c3x8KGU9ITApKX1yZXR1cm4gZX0pKGMpJiZBLnB1c2goInNlbGVjdDJkIiwibGFzc28yZCIpO3JldHVybiBiKEEpLGIody5jb25jYXQoVCkpLGIoayksZnVuY3Rpb24odCxlKXtpZihlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXQucHVzaChlW3JdKTtlbHNlIHQucHVzaChlKTtyZXR1cm4gdH0oeCxyKX0odCxyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUsci5tb2RlQmFyQnV0dG9uc1RvQWRkLHIuc2hvd1NlbmRUb0Nsb3VkKSxsP2wudXBkYXRlKHQsYyk6ZS5fbW9kZUJhcj1vKHQsYyl9ZWxzZSBsJiYobC5kZXN0cm95KCksZGVsZXRlIGUuX21vZGVCYXIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4vYnV0dG9ucyI6NjM1LCIuL21vZGViYXIiOjYzOH1dLDYzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vLi4vYnVpbGQvcGxvdGljb24iKSxzPW5ldyBET01QYXJzZXI7ZnVuY3Rpb24gbCh0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfXZhciBjPWwucHJvdG90eXBlO2MudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5ncmFwaEluZm89dDt2YXIgcj10aGlzLmdyYXBoSW5mby5fY29udGV4dCxuPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LGk9Im1vZGViYXItIituLl91aWQ7dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLGkpLHRoaXMuX3VpZD1pLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIiLCJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiBtb2RlYmFyLS1ob3ZlciBlYXNlLWJnIiksInYiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiB2ZXJ0aWNhbCIsZT1lLnJldmVyc2UoKSk7dmFyIG89bi5tb2RlYmFyLHM9ImhvdmVyIj09PXIuZGlzcGxheU1vZGVCYXI/Ii5qcy1wbG90bHktcGxvdCAucGxvdGx5OmhvdmVyICI6IiI7YS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKGkpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLHMrIiMiK2krIiAubW9kZWJhci1ncm91cCIsImJhY2tncm91bmQtY29sb3I6ICIrby5iZ2NvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0biAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmNvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0bjpob3ZlciAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmFjdGl2ZWNvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0bi5hY3RpdmUgLmljb24gcGF0aCIsImZpbGw6ICIrby5hY3RpdmVjb2xvcik7dmFyIGw9IXRoaXMuaGFzQnV0dG9ucyhlKSxjPXRoaXMuaGFzTG9nbyE9PXIuZGlzcGxheWxvZ28sdT10aGlzLmxvY2FsZSE9PXIubG9jYWxlO2lmKHRoaXMubG9jYWxlPXIubG9jYWxlLChsfHxjfHx1KSYmKHRoaXMucmVtb3ZlQWxsQnV0dG9ucygpLHRoaXMudXBkYXRlQnV0dG9ucyhlKSxyLndhdGVybWFya3x8ci5kaXNwbGF5bG9nbykpe3ZhciBmPXRoaXMuZ2V0TG9nbygpO3Iud2F0ZXJtYXJrJiYoZi5jbGFzc05hbWU9Zi5jbGFzc05hbWUrIiB3YXRlcm1hcmsiKSwidiI9PT1uLm1vZGViYXIub3JpZW50YXRpb24/dGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShmLHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzWzBdKTp0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZiksdGhpcy5oYXNMb2dvPSEwfXRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGMudXBkYXRlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYnV0dG9ucz10LHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZS5jcmVhdGVHcm91cCgpO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10Lm5hbWU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICduYW1lJyBpbiBidXR0b24gY29uZmlnIik7aWYoLTEhPT1lLmJ1dHRvbnNOYW1lcy5pbmRleE9mKG4pKXRocm93IG5ldyBFcnJvcigiYnV0dG9uIG5hbWUgJyIrbisiJyBpcyB0YWtlbiIpO2UuYnV0dG9uc05hbWVzLnB1c2gobik7dmFyIGk9ZS5jcmVhdGVCdXR0b24odCk7ZS5idXR0b25FbGVtZW50cy5wdXNoKGkpLHIuYXBwZW5kQ2hpbGQoaSl9KSxlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KX0sYy5jcmVhdGVHcm91cD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmNsYXNzTmFtZT0ibW9kZWJhci1ncm91cCIsdH0sYy5jcmVhdGVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgicmVsIiwidG9vbHRpcCIpLHIuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biI7dmFyIGk9dC50aXRsZTt2b2lkIDA9PT1pP2k9dC5uYW1lOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHRoaXMuZ3JhcGhJbmZvKSksKGl8fDA9PT1pKSYmci5zZXRBdHRyaWJ1dGUoImRhdGEtdGl0bGUiLGkpLHZvaWQgMCE9PXQuYXR0ciYmci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsdC5hdHRyKTt2YXIgYT10LnZhbDtpZih2b2lkIDAhPT1hJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJihhPWEodGhpcy5ncmFwaEluZm8pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLGEpKSwiZnVuY3Rpb24iIT10eXBlb2YgdC5jbGljayl0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBidXR0b24gJ2NsaWNrJyBmdW5jdGlvbiBpbiBidXR0b24gY29uZmlnIik7ci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24ocil7dC5jbGljayhlLmdyYXBoSW5mbyxyKSxlLnVwZGF0ZUFjdGl2ZUJ1dHRvbihyLmN1cnJlbnRUYXJnZXQpfSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZuLnNlbGVjdChyKS5jbGFzc2VkKCJhY3RpdmUiLCEwKTt2YXIgcz10Lmljb247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHM/ci5hcHBlbmRDaGlsZChzKCkpOnIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKHN8fG8ucXVlc3Rpb24pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1ncmF2aXR5Iix0LmdyYXZpdHl8fCJuIikscn0sYy5jcmVhdGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlLHI9aSh0LmhlaWdodCk/TnVtYmVyKHQuaGVpZ2h0KTp0LmFzY2VudC10LmRlc2NlbnQsbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2lmKHQucGF0aCl7KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sInN2ZyIpKS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFswLDAsdC53aWR0aCxyXS5qb2luKCIgIikpLGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsImljb24iKTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwicGF0aCIpO2Euc2V0QXR0cmlidXRlKCJkIix0LnBhdGgpLHQudHJhbnNmb3JtP2Euc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQudHJhbnNmb3JtKTp2b2lkIDAhPT10LmFzY2VudCYmYS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsIm1hdHJpeCgxIDAgMCAtMSAwICIrdC5hc2NlbnQrIikiKSxlLmFwcGVuZENoaWxkKGEpfXQuc3ZnJiYoZT1zLnBhcnNlRnJvbVN0cmluZyh0LnN2ZywiYXBwbGljYXRpb24veG1sIikuY2hpbGROb2Rlc1swXSk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxZW0iKSxlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxZW0iKSxlfSxjLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PXQ/dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpOm51bGw7dGhpcy5idXR0b25FbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxzPSJ0cnVlIj09PXQuZ2V0QXR0cmlidXRlKCJkYXRhLXRvZ2dsZSIpLGw9bi5zZWxlY3QodCk7aWYocylvPT09ciYmbC5jbGFzc2VkKCJhY3RpdmUiLCFsLmNsYXNzZWQoImFjdGl2ZSIpKTtlbHNle3ZhciBjPW51bGw9PT1vP286YS5uZXN0ZWRQcm9wZXJ0eShlLG8pLmdldCgpO2wuY2xhc3NlZCgiYWN0aXZlIixjPT09aSl9fSl9LGMuaGFzQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1dHRvbnM7aWYoIWUpcmV0dXJuITE7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoO24rKylpZih0W3JdW25dLm5hbWUhPT1lW3JdW25dLm5hbWUpcmV0dXJuITF9cmV0dXJuITB9LGMuZ2V0TG9nbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3JlYXRlR3JvdXAoKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPSJodHRwczovL3Bsb3QubHkvIixlLnRhcmdldD0iX2JsYW5rIixlLnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsYS5fKHRoaXMuZ3JhcGhJbmZvLCJQcm9kdWNlZCB3aXRoIFBsb3RseSIpKSxlLmNsYXNzTmFtZT0ibW9kZWJhci1idG4gcGxvdGx5anNpY29uIG1vZGViYXItYnRuLS1sb2dvIixlLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihvLm5ld3Bsb3RseWxvZ28pKSx0LmFwcGVuZENoaWxkKGUpLHR9LGMucmVtb3ZlQWxsQnV0dG9ucz1mdW5jdGlvbigpe2Zvcig7dGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7KXRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7dGhpcy5oYXNMb2dvPSExfSxjLmRlc3Ryb3k9ZnVuY3Rpb24oKXthLnJlbW92ZUVsZW1lbnQodGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLm1vZGViYXIiKSksYS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKHRoaXMuX3VpZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1uZXcgbCh7Z3JhcGhJbmZvOnQsY29udGFpbmVyOnIuX21vZGViYXJkaXYubm9kZSgpLGJ1dHRvbnM6ZX0pO3JldHVybiByLl9wcml2YXRlcGxvdCYmbi5zZWxlY3QoaS5lbGVtZW50KS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJiYWRnZS1wcml2YXRlIGZsb2F0LS1sZWZ0IiwhMCkudGV4dCgiUFJJVkFURSIpLGl9fSx7Ii4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uIjoyLCIuLi8uLi9saWIiOjcwMCxkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw2Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT0oMCx0KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXkpKCJidXR0b24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc3RlcDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibW9udGgiLCJ5ZWFyIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsImFsbCJdLGRmbHQ6Im1vbnRoIixlZGl0VHlwZToicGxvdCJ9LHN0ZXBtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiYWNrd2FyZCIsInRvZGF0ZSJdLGRmbHQ6ImJhY2t3YXJkIixlZGl0VHlwZToicGxvdCJ9LGNvdW50Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSk7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGJ1dHRvbnM6YSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxlZGl0VHlwZToicGxvdCJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToicGxvdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJwbG90In0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6ImJvdHRvbSIsZWRpdFR5cGU6InBsb3QifSxmb250Om4oe2VkaXRUeXBlOiJwbG90In0pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYWN0aXZlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifX0seyIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo1NzZ9XSw2NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt5UGFkOi4wMixtaW5CdXR0b25XaWR0aDozMCxyeDozLHJ5OjMsbGlnaHRBbW91bnQ6MjUsZGFya0Ftb3VudDoxMH19LHt9XSw2NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKSxsPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgYT1pLmNhbGVuZGFyO2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMuYnV0dG9ucyxyLGkpfWlmKG8oInZpc2libGUiKSl7dmFyIGw9bygic3RlcCIpOyJhbGwiIT09bCYmKCFhfHwiZ3JlZ29yaWFuIj09PWF8fCJtb250aCIhPT1sJiYieWVhciIhPT1sP28oInN0ZXBtb2RlIik6ZS5zdGVwbW9kZT0iYmFja3dhcmQiLG8oImNvdW50IikpLG8oImxhYmVsIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1LGYpe3ZhciBoPXQucmFuZ2VzZWxlY3Rvcnx8e30scD1hLm5ld0NvbnRhaW5lcihlLCJyYW5nZXNlbGVjdG9yIik7ZnVuY3Rpb24gZCh0LGUpe3JldHVybiBuLmNvZXJjZShoLHAscyx0LGUpfWlmKGQoInZpc2libGUiLG8oaCxwLHtuYW1lOiJidXR0b25zIixoYW5kbGVJdGVtRGVmYXVsdHM6YyxjYWxlbmRhcjpmfSkubGVuZ3RoPjApKXt2YXIgZz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdLmFuY2hvcj09PXQuX2lkfSksaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ZVtuW2FdXS5kb21haW47byYmKGk9TWF0aC5tYXgob1sxXSxpKSl9cmV0dXJuW3QuZG9tYWluWzBdLGkrbC55UGFkXX0oZSxyLHUpO2QoIngiLGdbMF0pLGQoInkiLGdbMV0pLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLGQoInhhbmNob3IiKSxkKCJ5YW5jaG9yIiksbi5jb2VyY2VGb250KGQsImZvbnQiLHIuZm9udCk7dmFyIHY9ZCgiYmdjb2xvciIpO2QoImFjdGl2ZWNvbG9yIixpLmNvbnRyYXN0KHYsbC5saWdodEFtb3VudCxsLmRhcmtBbW91bnQpKSxkKCJib3JkZXJjb2xvciIpLGQoImJvcmRlcndpZHRoIil9fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc0NCwiLi4vY29sb3IiOjU3NywiLi9hdHRyaWJ1dGVzIjo2MzksIi4vY29uc3RhbnRzIjo2NDB9XSw2NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vY29sb3IiKSxzPXQoIi4uL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxoPWYuTElORV9TUEFDSU5HLHA9Zi5GUk9NX1RMLGQ9Zi5GUk9NX0JSLGc9dCgiLi9jb25zdGFudHMiKSx2PXQoIi4vZ2V0X3VwZGF0ZV9vYmplY3QiKTtmdW5jdGlvbiBtKHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1sLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iiwic2VsZWN0b3ItcmVjdCIsZnVuY3Rpb24odCl7dC5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KTtuLmF0dHIoe3J4Omcucngscnk6Zy5yeX0pLG4uY2FsbChvLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKG8uZmlsbCxmdW5jdGlvbih0LGUpe3JldHVybiBlLl9pc0FjdGl2ZXx8ZS5faXNIb3ZlcmVkP3QuYWN0aXZlY29sb3I6dC5iZ2NvbG9yfShlLHIpKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIHgodCxlLHIsbil7bC5lbnN1cmVTaW5nbGUodCwidGV4dCIsInNlbGVjdG9yLXRleHQiLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIil9KS5jYWxsKHMuZm9udCxlLmZvbnQpLnRleHQoZnVuY3Rpb24odCxlKXtpZih0LmxhYmVsKXJldHVybiBlP2wudGVtcGxhdGVTdHJpbmcodC5sYWJlbCx7bWV0YTplfSk6dC5sYWJlbDtyZXR1cm4iYWxsIj09PXQuc3RlcD8iYWxsIjp0LmNvdW50K3Quc3RlcC5jaGFyQXQoMCl9KHIsbi5fZnVsbExheW91dC5tZXRhKSkuY2FsbChmdW5jdGlvbih0KXtjLmNvbnZlcnRUb1RzcGFucyh0LG4pfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi5yYW5nZXNlbGVjdG9yIikuZGF0YShmdW5jdGlvbih0KXtmb3IodmFyIGU9dS5saXN0KHQsIngiLCEwKSxyPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLnJhbmdlc2VsZWN0b3ImJmkucmFuZ2VzZWxlY3Rvci52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9KHQpLG0pO2UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJyYW5nZXNlbGVjdG9yIiwhMCksZS5leGl0KCkucmVtb3ZlKCksZS5zdHlsZSh7Y3Vyc29yOiJwb2ludGVyIiwicG9pbnRlci1ldmVudHMiOiJhbGwifSksZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89ZSx1PW8ucmFuZ2VzZWxlY3RvcixmPXIuc2VsZWN0QWxsKCJnLmJ1dHRvbiIpLmRhdGEobC5maWx0ZXJWaXNpYmxlKHUuYnV0dG9ucykpO2YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidXR0b24iLCEwKSxmLmV4aXQoKS5yZW1vdmUoKSxmLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT12KG8sZSk7ZS5faXNBY3RpdmU9ZnVuY3Rpb24odCxlLHIpe2lmKCJhbGwiPT09ZS5zdGVwKXJldHVybiEwPT09dC5hdXRvcmFuZ2U7dmFyIG49T2JqZWN0LmtleXMocik7cmV0dXJuIHQucmFuZ2VbMF09PT1yW25bMF1dJiZ0LnJhbmdlWzFdPT09cltuWzFdXX0obyxlLGEpLHIuY2FsbCh5LHUsZSksci5jYWxsKHgsdSxlLHQpLHIub24oImNsaWNrIixmdW5jdGlvbigpe3QuX2RyYWdnZWR8fGkuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGEpfSksci5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe2UuX2lzSG92ZXJlZD0hMCxyLmNhbGwoeSx1LGUpfSksci5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZS5faXNIb3ZlcmVkPSExLHIuY2FsbCh5LHUsZSl9KX0pLGZ1bmN0aW9uKHQsZSxyLGksbyl7dmFyIHU9MCxmPTAsdj1yLmJvcmRlcndpZHRoO2UuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoIi5zZWxlY3Rvci10ZXh0IiksaT1yLmZvbnQuc2l6ZSpoLGE9TWF0aC5tYXgoaSpjLmxpbmVDb3VudChlKSwxNikrMztmPU1hdGgubWF4KGYsYSl9KSxlLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXQuc2VsZWN0KCIuc2VsZWN0b3ItcmVjdCIpLGk9dC5zZWxlY3QoIi5zZWxlY3Rvci10ZXh0IiksYT1pLm5vZGUoKSYmcy5iQm94KGkubm9kZSgpKS53aWR0aCxvPXIuZm9udC5zaXplKmgsbD1jLmxpbmVDb3VudChpKSxwPU1hdGgubWF4KGErMTAsZy5taW5CdXR0b25XaWR0aCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodit1KSsiLCIrdisiKSIpLGUuYXR0cih7eDowLHk6MCx3aWR0aDpwLGhlaWdodDpmfSksYy5wb3NpdGlvblRleHQoaSxwLzIsZi8yLShsLTEpKm8vMiszKSx1Kz1wKzV9KTt2YXIgbT10Ll9mdWxsTGF5b3V0Ll9zaXplLHk9bS5sK20udypyLngseD1tLnQrbS5oKigxLXIueSksYj0ibGVmdCI7bC5pc1JpZ2h0QW5jaG9yKHIpJiYoeS09dSxiPSJyaWdodCIpO2wuaXNDZW50ZXJBbmNob3IocikmJih5LT11LzIsYj0iY2VudGVyIik7dmFyIF89InRvcCI7bC5pc0JvdHRvbUFuY2hvcihyKSYmKHgtPWYsXz0iYm90dG9tIik7bC5pc01pZGRsZUFuY2hvcihyKSYmKHgtPWYvMixfPSJtaWRkbGUiKTt1PU1hdGguY2VpbCh1KSxmPU1hdGguY2VpbChmKSx5PU1hdGgucm91bmQoeSkseD1NYXRoLnJvdW5kKHgpLGEuYXV0b01hcmdpbih0LGkrIi1yYW5nZS1zZWxlY3RvciIse3g6ci54LHk6ci55LGw6dSpwW2JdLHI6dSpkW2JdLGI6ZipkW19dLHQ6ZipwW19dfSksby5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit5KyIsIit4KyIpIil9KHQsZix1LG8uX25hbWUscil9KX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi8uLi9wbG90cy9wbG90cyI6ODEwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9jb2xvciI6NTc3LCIuLi9kcmF3aW5nIjo1OTgsIi4vY29uc3RhbnRzIjo2NDAsIi4vZ2V0X3VwZGF0ZV9vYmplY3QiOjY0MyxkMzoxNTR9XSw2NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGk9e307aWYoImFsbCI9PT1lLnN0ZXApaVtyKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgYT1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5yYW5nZSxhPW5ldyBEYXRlKHQucjJsKGlbMV0pKSxvPWUuc3RlcCxzPWUuY291bnQ7c3dpdGNoKGUuc3RlcG1vZGUpe2Nhc2UiYmFja3dhcmQiOnI9dC5sMnIoK24udGltZVtvXS51dGMub2Zmc2V0KGEsLXMpKTticmVhaztjYXNlInRvZGF0ZSI6dmFyIGw9bi50aW1lW29dLnV0Yy5vZmZzZXQoYSwtcyk7cj10Lmwycigrbi50aW1lW29dLnV0Yy5jZWlsKGwpKX12YXIgYz1pWzFdO3JldHVybltyLGNdfSh0LGUpO2lbcisiLnJhbmdlWzBdIl09YVswXSxpW3IrIi5yYW5nZVsxXSJdPWFbMV19cmV0dXJuIGl9fSx7ZDM6MTU0fV0sNjQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNlbGVjdG9yIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3Rvcjp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjYzOSwiLi9kZWZhdWx0cyI6NjQxLCIuL2RyYXciOjY0Mn1dLDY0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmQsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMTUsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi9jb2xvci9hdHRyaWJ1dGVzIjo1NzZ9XSw2NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikubGlzdCxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UsYT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0LCJ4IiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdLHM9b1thLm5hbWVdO3MmJnMudmlzaWJsZSYmcy5hdXRvcmFuZ2UmJihzLl9pbnB1dC5hdXRvcmFuZ2U9ITAscy5faW5wdXQucmFuZ2U9cy5yYW5nZT1pKHQsbykpfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NzQ3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi9jb25zdGFudHMiOjY0N31dLDY0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InJhbmdlc2xpZGVyIixjb250YWluZXJDbGFzc05hbWU6InJhbmdlc2xpZGVyLWNvbnRhaW5lciIsYmdDbGFzc05hbWU6InJhbmdlc2xpZGVyLWJnIixyYW5nZVBsb3RDbGFzc05hbWU6InJhbmdlc2xpZGVyLXJhbmdlcGxvdCIsbWFza01pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4iLG1hc2tNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4IixzbGlkZUJveENsYXNzTmFtZToicmFuZ2VzbGlkZXItc2xpZGVib3giLGdyYWJiZXJNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWluIixncmFiQXJlYU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWluIixoYW5kbGVNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1taW4iLGdyYWJiZXJNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWF4IixncmFiQXJlYU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWF4IixoYW5kbGVNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1tYXgiLG1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbi1vcHAtYXhpcyIsbWFza01heE9wcEF4aXNDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4LW9wcC1heGlzIixtYXNrQ29sb3I6InJnYmEoMCwwLDAsMC40KSIsbWFza09wcEF4aXNDb2xvcjoicmdiYSgwLDAsMCwwLjIpIixzbGlkZUJveEZpbGw6InRyYW5zcGFyZW50IixzbGlkZUJveEN1cnNvcjoiZXctcmVzaXplIixncmFiQXJlYUZpbGw6InRyYW5zcGFyZW50IixncmFiQXJlYUN1cnNvcjoiY29sLXJlc2l6ZSIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sNjQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10W3JdLGM9ZVtyXTtpZihsLnJhbmdlc2xpZGVyfHxlLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbYy5faWRdKXtuLmlzUGxhaW5PYmplY3QobC5yYW5nZXNsaWRlcil8fChsLnJhbmdlc2xpZGVyPXt9KTt2YXIgdSxmLGg9bC5yYW5nZXNsaWRlcixwPWkubmV3Q29udGFpbmVyKGMsInJhbmdlc2xpZGVyIik7aWYoXygidmlzaWJsZSIpKXtfKCJiZ2NvbG9yIixlLnBsb3RfYmdjb2xvciksXygiYm9yZGVyY29sb3IiKSxfKCJib3JkZXJ3aWR0aCIpLF8oInRoaWNrbmVzcyIpLF8oImF1dG9yYW5nZSIsIWMuaXNWYWxpZFJhbmdlKGgucmFuZ2UpKSxfKCJyYW5nZSIpO3ZhciBkPWUuX3N1YnBsb3RzO2lmKGQpZm9yKHZhciBnPWQuY2FydGVzaWFuLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHIoMCx0LmluZGV4T2YoInkiKSk9PT1hLm5hbWUyaWQocil9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKHQuaW5kZXhPZigieSIpLHQubGVuZ3RoKX0pLHY9bi5zaW1wbGVNYXAoZyxhLmlkMm5hbWUpLG09MDttPHYubGVuZ3RoO20rKyl7dmFyIHk9dlttXTt1PWhbeV18fHt9LGY9aS5uZXdDb250YWluZXIocCx5LCJ5YXhpcyIpO3ZhciB4LGI9ZVt5XTt1LnJhbmdlJiZiLmlzVmFsaWRSYW5nZSh1LnJhbmdlKSYmKHg9ImZpeGVkIiksIm1hdGNoIiE9PXcoInJhbmdlbW9kZSIseCkmJncoInJhbmdlIixiLnJhbmdlLnNsaWNlKCkpfXAuX2lucHV0PWh9fWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoaCxwLG8sdCxlKX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIG4uY29lcmNlKHUsZixzLHQsZSl9fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi9hdHRyaWJ1dGVzIjo2NDUsIi4vb3BwYXhpc19hdHRyaWJ1dGVzIjo2NTJ9XSw2NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi9kcmF3aW5nIiksbD10KCIuLi9jb2xvciIpLGM9dCgiLi4vdGl0bGVzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGg9dCgiLi4vZHJhZ2VsZW1lbnQiKSxwPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxkPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1vLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixkLmJnQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eDowLHk6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLGE9bi5ib3JkZXJ3aWR0aCUyPT0wP24uYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aC0xLGw9LW4uX29mZnNldFNoaWZ0LGM9cy5jcmlzcFJvdW5kKGUsbi5ib3JkZXJ3aWR0aCk7aS5hdHRyKHt3aWR0aDpuLl93aWR0aCthLGhlaWdodDpuLl9oZWlnaHQrYSx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK2wrIiwiK2wrIikiLGZpbGw6bi5iZ2NvbG9yLHN0cm9rZTpuLmJvcmRlcmNvbG9yLCJzdHJva2Utd2lkdGgiOmN9KX1mdW5jdGlvbiB2KHQsZSxyLG4pe3ZhciBpPWUuX2Z1bGxMYXlvdXQ7by5lbnN1cmVTaW5nbGVCeUlkKGkuX3RvcGRlZnMsImNsaXBQYXRoIixuLl9jbGlwSWQsZnVuY3Rpb24odCl7dC5hcHBlbmQoInJlY3QiKS5hdHRyKHt4OjAseTowfSl9KS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpuLl93aWR0aCxoZWlnaHQ6bi5faGVpZ2h0fSl9ZnVuY3Rpb24gbSh0LGUscixpKXt2YXIgbCxjPWUuY2FsY2RhdGEsaD10LnNlbGVjdEFsbCgiZy4iK2QucmFuZ2VQbG90Q2xhc3NOYW1lKS5kYXRhKHIuX3N1YnBsb3RzV2l0aCxvLmlkZW50aXR5KTtoLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiBkLnJhbmdlUGxvdENsYXNzTmFtZSsiICIrdH0pLmNhbGwocy5zZXRDbGlwVXJsLGkuX2NsaXBJZCxlKSxoLm9yZGVyKCksaC5leGl0KCkucmVtb3ZlKCksaC5lYWNoKGZ1bmN0aW9uKHQsbyl7dmFyIHM9bi5zZWxlY3QodGhpcyksaD0wPT09byxwPWYuZ2V0RnJvbUlkKGUsdCwieSIpLGQ9cC5fbmFtZSxnPWlbZF0sdj17ZGF0YTpbXSxsYXlvdXQ6e3hheGlzOnt0eXBlOnIudHlwZSxkb21haW46WzAsMV0scmFuZ2U6aS5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHdpZHRoOmkuX3dpZHRoLGhlaWdodDppLl9oZWlnaHQsbWFyZ2luOnt0OjAsYjowLGw6MCxyOjB9fSxfY29udGV4dDplLl9jb250ZXh0fTt2LmxheW91dFtkXT17dHlwZTpwLnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOiJtYXRjaCIhPT1nLnJhbmdlbW9kZT9nLnJhbmdlLnNsaWNlKCk6cC5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnAuY2FsZW5kYXJ9LGEuc3VwcGx5RGVmYXVsdHModik7dmFyIG09di5fZnVsbExheW91dC54YXhpcyx5PXYuX2Z1bGxMYXlvdXRbZF07bS5jbGVhckNhbGMoKSxtLnNldFNjYWxlKCkseS5jbGVhckNhbGMoKSx5LnNldFNjYWxlKCk7dmFyIHg9e2lkOnQscGxvdGdyb3VwOnMseGF4aXM6bSx5YXhpczp5LGlzUmFuZ2VQbG90OiEwfTtoP2w9eDooeC5tYWlucGxvdD0ieHkiLHgubWFpbnBsb3RpbmZvPWwpLHUucmFuZ2VQbG90KGUseCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EueGF4aXMrYS55YXhpcz09PWUmJnIucHVzaChpKX1yZXR1cm4gcn0oYyx0KSl9KX1mdW5jdGlvbiB5KHQsZSxyLG4saSl7KG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQubWFza01pbkNsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCkuY2FsbChsLmZpbGwsZC5tYXNrQ29sb3IpLG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQubWFza01heENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKGwuZmlsbCxkLm1hc2tDb2xvciksIm1hdGNoIiE9PWkucmFuZ2Vtb2RlKSYmKG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQubWFza01pbk9wcEF4aXNDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5hdHRyKCJ3aWR0aCIsbi5fd2lkdGgpLmNhbGwobC5maWxsLGQubWFza09wcEF4aXNDb2xvciksby5lbnN1cmVTaW5nbGUodCwicmVjdCIsZC5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLmF0dHIoIndpZHRoIixuLl93aWR0aCkuc3R5bGUoImJvcmRlci10b3AiLGQubWFza09wcEJvcmRlcikuY2FsbChsLmZpbGwsZC5tYXNrT3BwQXhpc0NvbG9yKSl9ZnVuY3Rpb24geCh0LGUscixuKXtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQuc2xpZGVCb3hDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsY3Vyc29yOmQuc2xpZGVCb3hDdXJzb3IsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5hdHRyKHtoZWlnaHQ6bi5faGVpZ2h0LGZpbGw6ZC5zbGlkZUJveEZpbGx9KX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsImciLGQuZ3JhYmJlck1pbkNsYXNzTmFtZSksYT1vLmVuc3VyZVNpbmdsZSh0LCJnIixkLmdyYWJiZXJNYXhDbGFzc05hbWUpLHM9e3g6MCx3aWR0aDpkLmhhbmRsZVdpZHRoLHJ4OmQuaGFuZGxlUmFkaXVzLGZpbGw6bC5iYWNrZ3JvdW5kLHN0cm9rZTpsLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOmQuaGFuZGxlU3Ryb2tlV2lkdGgsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSxjPXt5Ok1hdGgucm91bmQobi5faGVpZ2h0LzQpLGhlaWdodDpNYXRoLnJvdW5kKG4uX2hlaWdodC8yKX07aWYoby5lbnN1cmVTaW5nbGUoaSwicmVjdCIsZC5oYW5kbGVNaW5DbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHMpfSkuYXR0cihjKSxvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixkLmhhbmRsZU1heENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIocyl9KS5hdHRyKGMpLCFlLl9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciB1PXt3aWR0aDpkLmdyYWJBcmVhV2lkdGgseDowLHk6MCxmaWxsOmQuZ3JhYkFyZWFGaWxsLGN1cnNvcjpkLmdyYWJBcmVhQ3Vyc29yfTtvLmVuc3VyZVNpbmdsZShpLCJyZWN0IixkLmdyYWJBcmVhTWluQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KSxvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixkLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fcmFuZ2VTbGlkZXJEYXRhLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXVtkLm5hbWVdO3MuX2NsaXBJZD1zLl9pZCsiLSIrZS5fdWlkfXZhciBsPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitkLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9uYW1lfSk7bC5leGl0KCkuZWFjaChmdW5jdGlvbih0KXt2YXIgcj10W2QubmFtZV07ZS5fdG9wZGVmcy5zZWxlY3QoIiMiK3IuX2NsaXBJZCkucmVtb3ZlKCl9KS5yZW1vdmUoKSwwIT09ci5sZW5ndGgmJihsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChkLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxsLmVhY2goZnVuY3Rpb24ocil7dmFyIGE9bi5zZWxlY3QodGhpcykscz1yW2QubmFtZV0sbD1lW2YuaWQybmFtZShyLmFuY2hvcildLHU9c1tmLmlkMm5hbWUoci5hbmNob3IpXTtpZihzLnJhbmdlKXt2YXIgXyx3PW8uc2ltcGxlTWFwKHMucmFuZ2Usci5yMmwpLGs9by5zaW1wbGVNYXAoci5yYW5nZSxyLnIybCk7Xz1rWzBdPGtbMV0/W01hdGgubWluKHdbMF0sa1swXSksTWF0aC5tYXgod1sxXSxrWzFdKV06W01hdGgubWF4KHdbMF0sa1swXSksTWF0aC5taW4od1sxXSxrWzFdKV0scy5yYW5nZT1zLl9pbnB1dC5yYW5nZT1vLnNpbXBsZU1hcChfLHIubDJyKX1yLmNsZWFuUmFuZ2UoInJhbmdlc2xpZGVyLnJhbmdlIik7dmFyIFQ9ZS5tYXJnaW4sQT1lLl9zaXplLE09ci5kb21haW4sUz1zLl90aWNrSGVpZ2h0LEU9cy5fb3BwQm90dG9tO3MuX3dpZHRoPUEudyooTVsxXS1NWzBdKTt2YXIgQz1NYXRoLnJvdW5kKFQubCtBLncqTVswXSksTD1NYXRoLnJvdW5kKEEudCtBLmgqKDEtRSkrUytzLl9vZmZzZXRTaGlmdCtkLmV4dHJhUGFkKTthLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MrIiwiK0wrIikiKTt2YXIgej1yLnIybChzLnJhbmdlWzBdKSxPPXIucjJsKHMucmFuZ2VbMV0pLEk9Ty16O2lmKHMucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB0L3MuX3dpZHRoKkkren0scy5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuKHQteikvSSpzLl93aWR0aH0scy5fcmw9W3osT10sIm1hdGNoIiE9PXUucmFuZ2Vtb2RlKXt2YXIgRD1sLnIybCh1LnJhbmdlWzBdKSxQPWwucjJsKHUucmFuZ2VbMV0pLUQ7cy5kMnBPcHBBeGlzPWZ1bmN0aW9uKHQpe3JldHVybih0LUQpL1Aqcy5faGVpZ2h0fX1hLmNhbGwoZyx0LHIscykuY2FsbCh2LHQscixzKS5jYWxsKG0sdCxyLHMpLmNhbGwoeSx0LHIscyx1KS5jYWxsKHgsdCxyLHMpLmNhbGwoYix0LHIscyksZnVuY3Rpb24odCxlLHIsYSl7dmFyIHM9dC5zZWxlY3QoInJlY3QuIitkLnNsaWRlQm94Q2xhc3NOYW1lKS5ub2RlKCksbD10LnNlbGVjdCgicmVjdC4iK2QuZ3JhYkFyZWFNaW5DbGFzc05hbWUpLm5vZGUoKSxjPXQuc2VsZWN0KCJyZWN0LiIrZC5ncmFiQXJlYU1heENsYXNzTmFtZSkubm9kZSgpO3Qub24oIm1vdXNlZG93biIsZnVuY3Rpb24oKXt2YXIgdT1uLmV2ZW50LGY9dS50YXJnZXQsZD11LmNsaWVudFgsZz1kLXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsdj1hLmQycChyLl9ybFswXSksbT1hLmQycChyLl9ybFsxXSkseT1oLmNvdmVyU2xpcCgpO2Z1bmN0aW9uIHgodCl7dmFyIHUsaCx4LGI9K3QuY2xpZW50WC1kO3N3aXRjaChmKXtjYXNlIHM6eD0iZXctcmVzaXplIix1PXYrYixoPW0rYjticmVhaztjYXNlIGw6eD0iY29sLXJlc2l6ZSIsdT12K2IsaD1tO2JyZWFrO2Nhc2UgYzp4PSJjb2wtcmVzaXplIix1PXYsaD1tK2I7YnJlYWs7ZGVmYXVsdDp4PSJldy1yZXNpemUiLHU9ZyxoPWcrYn1pZihoPHUpe3ZhciBfPWg7aD11LHU9X31hLl9waXhlbE1pbj11LGEuX3BpeGVsTWF4PWgscChuLnNlbGVjdCh5KSx4KSxmdW5jdGlvbih0LGUscixuKXtmdW5jdGlvbiBhKHQpe3JldHVybiByLmwycihvLmNvbnN0cmFpbih0LG4uX3JsWzBdLG4uX3JsWzFdKSl9dmFyIHM9YShuLnAyZChuLl9waXhlbE1pbikpLGw9YShuLnAyZChuLl9waXhlbE1heCkpO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtpLmNhbGwoIl9ndWlSZWxheW91dCIsZSxyLl9uYW1lKyIucmFuZ2UiLFtzLGxdKX0pfSgwLGUscixhKX15LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIseCkseS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixmdW5jdGlvbiB0KCl7eS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHgpO3kucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdCk7by5yZW1vdmVFbGVtZW50KHkpfSl9KX0oYSx0LHIscyksZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPWQuaGFuZGxlV2lkdGgvMjtmdW5jdGlvbiBsKHQpe3JldHVybiBvLmNvbnN0cmFpbih0LDAsbi5fd2lkdGgpfWZ1bmN0aW9uIGModCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl9oZWlnaHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsLXMsbi5fd2lkdGgrcyl9dmFyIGY9bChuLmQycChyLl9ybFswXSkpLGg9bChuLmQycChyLl9ybFsxXSkpO2lmKHQuc2VsZWN0KCJyZWN0LiIrZC5zbGlkZUJveENsYXNzTmFtZSkuYXR0cigieCIsZikuYXR0cigid2lkdGgiLGgtZiksdC5zZWxlY3QoInJlY3QuIitkLm1hc2tNaW5DbGFzc05hbWUpLmF0dHIoIndpZHRoIixmKSx0LnNlbGVjdCgicmVjdC4iK2QubWFza01heENsYXNzTmFtZSkuYXR0cigieCIsaCkuYXR0cigid2lkdGgiLG4uX3dpZHRoLWgpLCJtYXRjaCIhPT1hLnJhbmdlbW9kZSl7dmFyIHA9bi5faGVpZ2h0LWMobi5kMnBPcHBBeGlzKGkuX3JsWzFdKSksZz1uLl9oZWlnaHQtYyhuLmQycE9wcEF4aXMoaS5fcmxbMF0pKTt0LnNlbGVjdCgicmVjdC4iK2QubWFza01pbk9wcEF4aXNDbGFzc05hbWUpLmF0dHIoIngiLGYpLmF0dHIoImhlaWdodCIscCkuYXR0cigid2lkdGgiLGgtZiksdC5zZWxlY3QoInJlY3QuIitkLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKCJ4IixmKS5hdHRyKCJ5IixnKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodC1nKS5hdHRyKCJ3aWR0aCIsaC1mKSx0LnNlbGVjdCgicmVjdC4iK2Quc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoInkiLHApLmF0dHIoImhlaWdodCIsZy1wKX12YXIgdj1NYXRoLnJvdW5kKHUoZi1zKSktLjUsbT1NYXRoLnJvdW5kKHUoaC1zKSkrLjU7dC5zZWxlY3QoImcuIitkLmdyYWJiZXJNaW5DbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwwLjUpIiksdC5zZWxlY3QoImcuIitkLmdyYWJiZXJNYXhDbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK20rIiwwLjUpIil9KGEsMCxyLHMsbCx1KSwiYm90dG9tIj09PXIuc2lkZSYmYy5kcmF3KHQsci5faWQrInRpdGxlIix7cHJvcENvbnRhaW5lcjpyLHByb3BOYW1lOnIuX25hbWUrIi50aXRsZSIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLngsYXR0cmlidXRlczp7eDpyLl9vZmZzZXQrci5fbGVuZ3RoLzIseTpMK3MuX2hlaWdodCtzLl9vZmZzZXRTaGlmdCsxMCsxLjUqci50aXRsZS5mb250LnNpemUsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX0pKX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi8uLi9wbG90cy9wbG90cyI6ODEwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9jb2xvciI6NTc3LCIuLi9kcmFnZWxlbWVudCI6NTk1LCIuLi9kcmF3aW5nIjo1OTgsIi4uL3RpdGxlcyI6NjY1LCIuL2NvbnN0YW50cyI6NjQ3LGQzOjE1NH1dLDY1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxpPXQoIi4vY29uc3RhbnRzIiksYT1pLm5hbWU7ZnVuY3Rpb24gbyh0KXt2YXIgZT10JiZ0W2FdO3JldHVybiBlJiZlLnZpc2libGV9ci5pc1Zpc2libGU9byxyLm1ha2VEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sIngiLCEwKSxyPXQubWFyZ2luLGk9W107aWYoIXQuX2hhcygiZ2wyZCIpKWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdO2lmKG8obCkpe2kucHVzaChsKTt2YXIgYz1sW2FdO2MuX2lkPWErbC5faWQsYy5faGVpZ2h0PSh0LmhlaWdodC1yLmItci50KSpjLnRoaWNrbmVzcyxjLl9vZmZzZXRTaGlmdD1NYXRoLmZsb29yKGMuYm9yZGVyd2lkdGgvMil9fXQuX3JhbmdlU2xpZGVyRGF0YT1pfSxyLmF1dG9NYXJnaW5PcHRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbYV0sbz0xLzAscz1lLl9jb3VudGVyQXhlcyxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF0sdT1uLmdldEZyb21JZCh0LGMpO289TWF0aC5taW4obyx1LmRvbWFpblswXSl9ci5fb3BwQm90dG9tPW87dmFyIGY9ImJvdHRvbSI9PT1lLnNpZGUmJmUuX2JvdW5kaW5nQm94LmhlaWdodHx8MDtyZXR1cm4gci5fdGlja0hlaWdodD1mLHt4OjAseTpvLGw6MCxyOjAsdDowLGI6ci5faGVpZ2h0K3QuX2Z1bGxMYXlvdXQubWFyZ2luLmIrZixwYWQ6aS5leHRyYVBhZCsyKnIuX29mZnNldFNoaWZ0fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NTEsIi4vY29uc3RhbnRzIjo2NDd9XSw2NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIiksbz10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToicmFuZ2VzbGlkZXIiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNsaWRlcjpuLmV4dGVuZEZsYXQoe30saSx7eWF4aXM6YX0pfX19LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6dCgiLi9kcmF3IiksaXNWaXNpYmxlOm8uaXNWaXNpYmxlLG1ha2VEYXRhOm8ubWFrZURhdGEsYXV0b01hcmdpbk9wdHM6by5hdXRvTWFyZ2luT3B0c319LHsiLi4vLi4vbGliIjo3MDAsIi4vYXR0cmlidXRlcyI6NjQ1LCIuL2NhbGNfYXV0b3JhbmdlIjo2NDYsIi4vZGVmYXVsdHMiOjY0OCwiLi9kcmF3Ijo2NDksIi4vaGVscGVycyI6NjUwLCIuL29wcGF4aXNfYXR0cmlidXRlcyI6NjUyfV0sNjUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzU3VicGxvdE9iajohMCxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJmaXhlZCIsIm1hdGNoIl0sZGZsdDoibWF0Y2giLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In1dLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifX0se31dLDY1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxhPXQoIi4uL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9cygic2hhcGUiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmNsZSIsInJlY3QiLCJwYXRoIiwibGluZSJdLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4cmVmOm8oe30sbi54cmVmLHt9KSx4c2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNjYWxlZCIsInBpeGVsIl0sZGZsdDoic2NhbGVkIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHgxOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlyZWY6byh7fSxuLnlyZWYse30pLHlzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwicGl4ZWwiXSxkZmx0OiJzY2FsZWQiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seTA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seTE6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0scGF0aDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sbGluZTp7Y29sb3I6byh7fSxpLmNvbG9yLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOm8oe30saS53aWR0aCx7ZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0pLGRhc2g6byh7fSxhLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiYXJyYXlkcmF3In0pfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxLCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1NjAsIi4uL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3fV0sNjU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vY29uc3RhbnRzIiksbz10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBzKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnhzaXplbW9kZSx0LngwLHQueDEsdC5wYXRoLCExKX1mdW5jdGlvbiBsKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnlzaXplbW9kZSx0LnkwLHQueTEsdC5wYXRoLCEwKX1mdW5jdGlvbiBjKHQsZSxyLGkscyxsKXt2YXIgYz10LzIsdT1sO2lmKCJwaXhlbCI9PT1lKXt2YXIgZj1zP28uZXh0cmFjdFBhdGhDb29yZHMocyxsP2EucGFyYW1Jc1k6YS5wYXJhbUlzWCk6W3IsaV0saD1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxmKSxwPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGYpLGQ9cDwwP01hdGguYWJzKHApK2M6YyxnPWg+MD9oK2M6YztyZXR1cm57cHBhZDpjLHBwYWRwbHVzOnU/ZDpnLHBwYWRtaW51czp1P2c6ZH19cmV0dXJue3BwYWQ6Y319ZnVuY3Rpb24gdSh0LGUscixuLGkpe3ZhciBzPSJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT90LnIyYzp0LmQyYztpZih2b2lkIDAhPT1lKXJldHVybltzKGUpLHMocildO2lmKG4pe3ZhciBsLGMsdSxmLGg9MS8wLHA9LTEvMCxkPW4ubWF0Y2goYS5zZWdtZW50UkUpO2ZvcigiZGF0ZSI9PT10LnR5cGUmJihzPW8uZGVjb2RlRGF0ZShzKSksbD0wO2w8ZC5sZW5ndGg7bCsrKXZvaWQgMCE9PShjPWlbZFtsXS5jaGFyQXQoMCldLmRyYXduKSYmKCEodT1kW2xdLnN1YnN0cigxKS5tYXRjaChhLnBhcmFtUkUpKXx8dS5sZW5ndGg8Y3x8KChmPXModVtjXSkpPGgmJihoPWYpLGY+cCYmKHA9ZikpKTtyZXR1cm4gcD49aD9baCxwXTp2b2lkIDB9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9bi5maWx0ZXJWaXNpYmxlKGUuc2hhcGVzKTtpZihyLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYyxmLGg9cltvXTtpZihoLl9leHRyZW1lcz17fSwicGFwZXIiIT09aC54cmVmKXt2YXIgcD0icGl4ZWwiPT09aC54c2l6ZW1vZGU/aC54YW5jaG9yOmgueDAsZD0icGl4ZWwiPT09aC54c2l6ZW1vZGU/aC54YW5jaG9yOmgueDE7KGY9dShjPWkuZ2V0RnJvbUlkKHQsaC54cmVmKSxwLGQsaC5wYXRoLGEucGFyYW1Jc1gpKSYmKGguX2V4dHJlbWVzW2MuX2lkXT1pLmZpbmRFeHRyZW1lcyhjLGYscyhoKSkpfWlmKCJwYXBlciIhPT1oLnlyZWYpe3ZhciBnPSJwaXhlbCI9PT1oLnlzaXplbW9kZT9oLnlhbmNob3I6aC55MCx2PSJwaXhlbCI9PT1oLnlzaXplbW9kZT9oLnlhbmNob3I6aC55MTsoZj11KGM9aS5nZXRGcm9tSWQodCxoLnlyZWYpLGcsdixoLnBhdGgsYS5wYXJhbUlzWSkpJiYoaC5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsZixsKGgpKSl9fX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4vY29uc3RhbnRzIjo2NTUsIi4vaGVscGVycyI6NjU4fV0sNjU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2VnbWVudFJFOi9bTUxIVlFDVFNaXVteTUxIVlFDVFNaXSovZyxwYXJhbVJFOi9bXlxzLF0rL2cscGFyYW1Jc1g6e006ezA6ITAsZHJhd246MH0sTDp7MDohMCxkcmF3bjowfSxIOnswOiEwLGRyYXduOjB9LFY6e30sUTp7MDohMCwyOiEwLGRyYXduOjJ9LEM6ezA6ITAsMjohMCw0OiEwLGRyYXduOjR9LFQ6ezA6ITAsZHJhd246MH0sUzp7MDohMCwyOiEwLGRyYXduOjJ9LFo6e319LHBhcmFtSXNZOntNOnsxOiEwLGRyYXduOjF9LEw6ezE6ITAsZHJhd246MX0sSDp7fSxWOnswOiEwLGRyYXduOjB9LFE6ezE6ITAsMzohMCxkcmF3bjozfSxDOnsxOiEwLDM6ITAsNTohMCxkcmF3bjo1fSxUOnsxOiEwLGRyYXduOjF9LFM6ezE6ITAsMzohMCxkcmF3bjo1fSxaOnt9fSxudW1QYXJhbXM6e006MixMOjIsSDoxLFY6MSxROjQsQzo2LFQ6MixTOjQsWjowfX19LHt9XSw2NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1pZihhKCJ2aXNpYmxlIikpe2EoImxheWVyIiksYSgib3BhY2l0eSIpLGEoImZpbGxjb2xvciIpLGEoImxpbmUuY29sb3IiKSxhKCJsaW5lLndpZHRoIiksYSgibGluZS5kYXNoIik7Zm9yKHZhciBsPWEoInR5cGUiLHQucGF0aD8icGF0aCI6InJlY3QiKSxjPWEoInhzaXplbW9kZSIpLHU9YSgieXNpemVtb2RlIiksZj1bIngiLCJ5Il0saD0wO2g8MjtoKyspe3ZhciBwLGQsZyx2PWZbaF0sbT12KyJhbmNob3IiLHk9IngiPT09dj9jOnUseD17X2Z1bGxMYXlvdXQ6cn0sYj1pLmNvZXJjZVJlZih0LGUseCx2LCIiLCJwYXBlciIpO2lmKCJwYXBlciIhPT1iPygocD1pLmdldEZyb21JZCh4LGIpKS5fc2hhcGVJbmRpY2VzLnB1c2goZS5faW5kZXgpLGc9cy5yYW5nZVRvU2hhcGVQb3NpdGlvbihwKSxkPXMuc2hhcGVQb3NpdGlvblRvUmFuZ2UocCkpOmQ9Zz1uLmlkZW50aXR5LCJwYXRoIiE9PWwpe3ZhciBfPXYrIjAiLHc9disiMSIsaz10W19dLFQ9dFt3XTt0W19dPWQodFtfXSwhMCksdFt3XT1kKHRbd10sITApLCJwaXhlbCI9PT15PyhhKF8sMCksYSh3LDEwKSk6KGkuY29lcmNlUG9zaXRpb24oZSx4LGEsYixfLC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLHgsYSxiLHcsLjc1KSksZVtfXT1nKGVbX10pLGVbd109ZyhlW3ddKSx0W19dPWssdFt3XT1UfWlmKCJwaXhlbCI9PT15KXt2YXIgQT10W21dO3RbbV09ZCh0W21dLCEwKSxpLmNvZXJjZVBvc2l0aW9uKGUseCxhLGIsbSwuMjUpLGVbbV09ZyhlW21dKSx0W21dPUF9fSJwYXRoIj09PWw/YSgicGF0aCIpOm4ubm9uZU9yQWxsKHQsZSxbIngwIiwieDEiLCJ5MCIsInkxIl0pfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToic2hhcGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4vYXR0cmlidXRlcyI6NjUzLCIuL2hlbHBlcnMiOjY1OH1dLDY1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vY29sb3IiKSxzPXQoIi4uL2RyYXdpbmciKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixjPXQoIi4uL2RyYWdlbGVtZW50IiksdT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZj10KCIuL2NvbnN0YW50cyIpLGg9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gcCh0LGUpe3QuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2LnNlbGVjdEFsbCgnLnNoYXBlbGF5ZXIgW2RhdGEtaW5kZXg9IicrZSsnIl0nKS5yZW1vdmUoKTt2YXIgcj10Ll9mdWxsTGF5b3V0LnNoYXBlc1tlXXx8e307aWYoci5faW5wdXQmJiExIT09ci52aXNpYmxlKWlmKCJiZWxvdyIhPT1yLmxheWVyKW0odC5fZnVsbExheW91dC5fc2hhcGVVcHBlckxheWVyKTtlbHNlIGlmKCJwYXBlciI9PT1yLnhyZWZ8fCJwYXBlciI9PT1yLnlyZWYpbSh0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpO2Vsc2V7dmFyIHA9dC5fZnVsbExheW91dC5fcGxvdHNbci54cmVmK3IueXJlZl07aWYocCltKChwLm1haW5wbG90aW5mb3x8cCkuc2hhcGVsYXllcik7ZWxzZSBtKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcil9ZnVuY3Rpb24gbShwKXt2YXIgbT17ImRhdGEtaW5kZXgiOmUsImZpbGwtcnVsZSI6ImV2ZW5vZGQiLGQ6Zyh0LHIpfSx5PXIubGluZS53aWR0aD9yLmxpbmUuY29sb3I6InJnYmEoMCwwLDAsMCkiLHg9cC5hcHBlbmQoInBhdGgiKS5hdHRyKG0pLnN0eWxlKCJvcGFjaXR5IixyLm9wYWNpdHkpLmNhbGwoby5zdHJva2UseSkuY2FsbChvLmZpbGwsci5maWxsY29sb3IpLmNhbGwocy5kYXNoTGluZSxyLmxpbmUuZGFzaCxyLmxpbmUud2lkdGgpO2QoeCx0LHIpLHQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbiYmZnVuY3Rpb24odCxlLHIsbyxwKXt2YXIgbSx5LHgsYixfLHcsayxULEEsTSxTLEUsQyxMLHosTyxJPTEwLEQ9MTAsUD0icGl4ZWwiPT09ci54c2l6ZW1vZGUsUj0icGl4ZWwiPT09ci55c2l6ZW1vZGUsRj0ibGluZSI9PT1yLnR5cGUsQj0icGF0aCI9PT1yLnR5cGUsTj1sKHQubGF5b3V0LCJzaGFwZXMiLHIpLGo9Ti5tb2RpZnlJdGVtLFY9YS5nZXRGcm9tSWQodCxyLnhyZWYpLFU9YS5nZXRGcm9tSWQodCxyLnlyZWYpLHE9aC5nZXREYXRhVG9QaXhlbCh0LFYpLEg9aC5nZXREYXRhVG9QaXhlbCh0LFUsITApLEc9aC5nZXRQaXhlbFRvRGF0YSh0LFYpLFk9aC5nZXRQaXhlbFRvRGF0YSh0LFUsITApLFc9Rj9mdW5jdGlvbigpe3ZhciB0PU1hdGgubWF4KHIubGluZS53aWR0aCwxMCksbj1wLmFwcGVuZCgiZyIpLmF0dHIoImRhdGEtaW5kZXgiLG8pO24uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsZS5hdHRyKCJkIikpLnN0eWxlKHtjdXJzb3I6Im1vdmUiLCJzdHJva2Utd2lkdGgiOnQsInN0cm9rZS1vcGFjaXR5IjoiMCJ9KTt2YXIgaT17ImZpbGwtb3BhY2l0eSI6IjAifSxhPXQvMj4xMD90LzI6MTA7cmV0dXJuIG4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHsiZGF0YS1saW5lLXBvaW50Ijoic3RhcnQtcG9pbnQiLGN4OlA/cShyLnhhbmNob3IpK3IueDA6cShyLngwKSxjeTpSP0goci55YW5jaG9yKS1yLnkwOkgoci55MCkscjphfSkuc3R5bGUoaSkuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKSxuLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7ImRhdGEtbGluZS1wb2ludCI6ImVuZC1wb2ludCIsY3g6UD9xKHIueGFuY2hvcikrci54MTpxKHIueDEpLGN5OlI/SChyLnlhbmNob3IpLXIueTE6SChyLnkxKSxyOmF9KS5zdHlsZShpKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLG59KCk6ZSxYPXtlbGVtZW50Olcubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKG4pe1AmJihfPXEoci54YW5jaG9yKSk7UiYmKHc9SChyLnlhbmNob3IpKTsicGF0aCI9PT1yLnR5cGU/ej1yLnBhdGg6KG09UD9yLngwOnEoci54MCkseT1SP3IueTA6SChyLnkwKSx4PVA/ci54MTpxKHIueDEpLGI9Uj9yLnkxOkgoci55MSkpO208eD8oQT1tLEM9IngwIixNPXgsTD0ieDEiKTooQT14LEM9IngxIixNPW0sTD0ieDAiKTshUiYmeTxifHxSJiZ5PmI/KGs9eSxTPSJ5MCIsVD1iLEU9InkxIik6KGs9YixTPSJ5MSIsVD15LEU9InkwIik7WihuKSxLKHAsciksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUueHJlZixpPWUueXJlZixvPWEuZ2V0RnJvbUlkKHIsbiksbD1hLmdldEZyb21JZChyLGkpLGM9IiI7InBhcGVyIj09PW58fG8uYXV0b3JhbmdlfHwoYys9bik7InBhcGVyIj09PWl8fGwuYXV0b3JhbmdlfHwoYys9aSk7cy5zZXRDbGlwVXJsKHQsYz8iY2xpcCIrci5fZnVsbExheW91dC5fdWlkK2M6bnVsbCxyKX0oZSxyLHQpLFgubW92ZUZuPSJtb3ZlIj09PU8/JDpKfSxkb25lRm46ZnVuY3Rpb24oKXt1KGUpLFEocCksZChlLHQsciksbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsTi5nZXRVcGRhdGVPYmooKSl9LGNsaWNrRm46ZnVuY3Rpb24oKXtRKHApfX07ZnVuY3Rpb24gWih0KXtpZihGKU89InBhdGgiPT09dC50YXJnZXQudGFnTmFtZT8ibW92ZSI6InN0YXJ0LXBvaW50Ij09PXQudGFyZ2V0LmF0dHJpYnV0ZXNbImRhdGEtbGluZS1wb2ludCJdLnZhbHVlPyJyZXNpemUtb3Zlci1zdGFydC1wb2ludCI6InJlc2l6ZS1vdmVyLWVuZC1wb2ludCI7ZWxzZXt2YXIgcj1YLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLnJpZ2h0LXIubGVmdCxpPXIuYm90dG9tLXIudG9wLGE9dC5jbGllbnRYLXIubGVmdCxvPXQuY2xpZW50WS1yLnRvcCxzPSFCJiZuPkkmJmk+RCYmIXQuc2hpZnRLZXk/Yy5nZXRDdXJzb3IoYS9uLDEtby9pKToibW92ZSI7dShlLHMpLE89cy5zcGxpdCgiLSIpWzBdfX1mdW5jdGlvbiAkKG4saSl7aWYoInBhdGgiPT09ci50eXBlKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbz1hLHM9YTtQP2ooInhhbmNob3IiLHIueGFuY2hvcj1HKF8rbikpOihvPWZ1bmN0aW9uKHQpe3JldHVybiBHKHEodCkrbil9LFYmJiJkYXRlIj09PVYudHlwZSYmKG89aC5lbmNvZGVEYXRlKG8pKSksUj9qKCJ5YW5jaG9yIixyLnlhbmNob3I9WSh3K2kpKToocz1mdW5jdGlvbih0KXtyZXR1cm4gWShIKHQpK2kpfSxVJiYiZGF0ZSI9PT1VLnR5cGUmJihzPWguZW5jb2RlRGF0ZShzKSkpLGooInBhdGgiLHIucGF0aD12KHosbyxzKSl9ZWxzZSBQP2ooInhhbmNob3IiLHIueGFuY2hvcj1HKF8rbikpOihqKCJ4MCIsci54MD1HKG0rbikpLGooIngxIixyLngxPUcoeCtuKSkpLFI/aigieWFuY2hvciIsci55YW5jaG9yPVkodytpKSk6KGooInkwIixyLnkwPVkoeStpKSksaigieTEiLHIueTE9WShiK2kpKSk7ZS5hdHRyKCJkIixnKHQscikpLEsocCxyKX1mdW5jdGlvbiBKKG4saSl7aWYoQil7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG89YSxzPWE7UD9qKCJ4YW5jaG9yIixyLnhhbmNob3I9RyhfK24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhxKHQpK24pfSxWJiYiZGF0ZSI9PT1WLnR5cGUmJihvPWguZW5jb2RlRGF0ZShvKSkpLFI/aigieWFuY2hvciIsci55YW5jaG9yPVkodytpKSk6KHM9ZnVuY3Rpb24odCl7cmV0dXJuIFkoSCh0KStpKX0sVSYmImRhdGUiPT09VS50eXBlJiYocz1oLmVuY29kZURhdGUocykpKSxqKCJwYXRoIixyLnBhdGg9dih6LG8scykpfWVsc2UgaWYoRil7aWYoInJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50Ij09PU8pe3ZhciBsPW0rbixjPVI/eS1pOnkraTtqKCJ4MCIsci54MD1QP2w6RyhsKSksaigieTAiLHIueTA9Uj9jOlkoYykpfWVsc2UgaWYoInJlc2l6ZS1vdmVyLWVuZC1wb2ludCI9PT1PKXt2YXIgdT14K24sZj1SP2ItaTpiK2k7aigieDEiLHIueDE9UD91OkcodSkpLGooInkxIixyLnkxPVI/ZjpZKGYpKX19ZWxzZXt2YXIgZD1+Ty5pbmRleE9mKCJuIik/aytpOmssTj1+Ty5pbmRleE9mKCJzIik/VCtpOlQsVz1+Ty5pbmRleE9mKCJ3Iik/QStuOkEsWD1+Ty5pbmRleE9mKCJlIik/TStuOk07fk8uaW5kZXhPZigibiIpJiZSJiYoZD1rLWkpLH5PLmluZGV4T2YoInMiKSYmUiYmKE49VC1pKSwoIVImJk4tZD5EfHxSJiZkLU4+RCkmJihqKFMscltTXT1SP2Q6WShkKSksaihFLHJbRV09Uj9OOlkoTikpKSxYLVc+SSYmKGooQyxyW0NdPVA/VzpHKFcpKSxqKEwscltMXT1QP1g6RyhYKSkpfWUuYXR0cigiZCIsZyh0LHIpKSxLKHAscil9ZnVuY3Rpb24gSyh0LGUpeyhQfHxSKSYmZnVuY3Rpb24oKXt2YXIgcj0icGF0aCIhPT1lLnR5cGUsbj10LnNlbGVjdEFsbCgiLnZpc3VhbC1jdWUiKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2ZpbGw6IiNmZmYiLCJmaWxsLXJ1bGUiOiJldmVub2RkIixzdHJva2U6IiMwMDAiLCJzdHJva2Utd2lkdGgiOjF9KS5jbGFzc2VkKCJ2aXN1YWwtY3VlIiwhMCk7dmFyIGE9cShQP2UueGFuY2hvcjppLm1pZFJhbmdlKHI/W2UueDAsZS54MV06aC5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsZi5wYXJhbUlzWCkpKSxvPUgoUj9lLnlhbmNob3I6aS5taWRSYW5nZShyP1tlLnkwLGUueTFdOmguZXh0cmFjdFBhdGhDb29yZHMoZS5wYXRoLGYucGFyYW1Jc1kpKSk7aWYoYT1oLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhhLDEpLG89aC5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmcobywxKSxQJiZSKXt2YXIgcz0iTSIrKGEtMS0xKSsiLCIrKG8tMS0xKSsiaC04djJoOCB2OGgydi04IGg4di0yaC04IHYtOGgtMiBaIjtuLmF0dHIoImQiLHMpfWVsc2UgaWYoUCl7dmFyIGw9Ik0iKyhhLTEtMSkrIiwiKyhvLTktMSkrInYxOCBoMiB2LTE4IFoiO24uYXR0cigiZCIsbCl9ZWxzZXt2YXIgYz0iTSIrKGEtOS0xKSsiLCIrKG8tMS0xKSsiaDE4IHYyIGgtMTggWiI7bi5hdHRyKCJkIixjKX19KCl9ZnVuY3Rpb24gUSh0KXt0LnNlbGVjdEFsbCgiLnZpc3VhbC1jdWUiKS5yZW1vdmUoKX1jLmluaXQoWCksVy5ub2RlKCkub25tb3VzZW1vdmU9Wn0odCx4LHIsZSxwKX19ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49KHIueHJlZityLnlyZWYpLnJlcGxhY2UoL3BhcGVyL2csIiIpO3Muc2V0Q2xpcFVybCh0LG4/ImNsaXAiK2UuX2Z1bGxMYXlvdXQuX3VpZCtuOm51bGwsZSl9ZnVuY3Rpb24gZyh0LGUpe3ZhciByLG4sbyxzLGwsYyx1LHAsZD1lLnR5cGUsZz1hLmdldEZyb21JZCh0LGUueHJlZiksdj1hLmdldEZyb21JZCh0LGUueXJlZiksbT10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGc/KHI9aC5zaGFwZVBvc2l0aW9uVG9SYW5nZShnKSxuPWZ1bmN0aW9uKHQpe3JldHVybiBnLl9vZmZzZXQrZy5yMnAocih0LCEwKSl9KTpuPWZ1bmN0aW9uKHQpe3JldHVybiBtLmwrbS53KnR9LHY/KG89aC5zaGFwZVBvc2l0aW9uVG9SYW5nZSh2KSxzPWZ1bmN0aW9uKHQpe3JldHVybiB2Ll9vZmZzZXQrdi5yMnAobyh0LCEwKSl9KTpzPWZ1bmN0aW9uKHQpe3JldHVybiBtLnQrbS5oKigxLXQpfSwicGF0aCI9PT1kKXJldHVybiBnJiYiZGF0ZSI9PT1nLnR5cGUmJihuPWguZGVjb2RlRGF0ZShuKSksdiYmImRhdGUiPT09di50eXBlJiYocz1oLmRlY29kZURhdGUocykpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LnBhdGgsYT10LnhzaXplbW9kZSxvPXQueXNpemVtb2RlLHM9dC54YW5jaG9yLGw9dC55YW5jaG9yO3JldHVybiBuLnJlcGxhY2UoZi5zZWdtZW50UkUsZnVuY3Rpb24odCl7dmFyIG49MCxjPXQuY2hhckF0KDApLHU9Zi5wYXJhbUlzWFtjXSxoPWYucGFyYW1Jc1lbY10scD1mLm51bVBhcmFtc1tjXSxkPXQuc3Vic3RyKDEpLnJlcGxhY2UoZi5wYXJhbVJFLGZ1bmN0aW9uKHQpe3JldHVybiB1W25dP3Q9InBpeGVsIj09PWE/ZShzKStOdW1iZXIodCk6ZSh0KTpoW25dJiYodD0icGl4ZWwiPT09bz9yKGwpLU51bWJlcih0KTpyKHQpKSwrK24+cCYmKHQ9IlgiKSx0fSk7cmV0dXJuIG4+cCYmKGQ9ZC5yZXBsYWNlKC9bXHMsXSpYLiovLCIiKSxpLmxvZygiSWdub3JpbmcgZXh0cmEgcGFyYW1zIGluIHNlZ21lbnQgIit0KSksYytkfSl9KGUsbixzKTtpZigicGl4ZWwiPT09ZS54c2l6ZW1vZGUpe3ZhciB5PW4oZS54YW5jaG9yKTtsPXkrZS54MCxjPXkrZS54MX1lbHNlIGw9bihlLngwKSxjPW4oZS54MSk7aWYoInBpeGVsIj09PWUueXNpemVtb2RlKXt2YXIgeD1zKGUueWFuY2hvcik7dT14LWUueTAscD14LWUueTF9ZWxzZSB1PXMoZS55MCkscD1zKGUueTEpO2lmKCJsaW5lIj09PWQpcmV0dXJuIk0iK2wrIiwiK3UrIkwiK2MrIiwiK3A7aWYoInJlY3QiPT09ZClyZXR1cm4iTSIrbCsiLCIrdSsiSCIrYysiViIrcCsiSCIrbCsiWiI7dmFyIGI9KGwrYykvMixfPSh1K3ApLzIsdz1NYXRoLmFicyhiLWwpLGs9TWF0aC5hYnMoXy11KSxUPSJBIit3KyIsIitrLEE9Yit3KyIsIitfO3JldHVybiJNIitBK1QrIiAwIDEsMSAiKyhiKyIsIisoXy1rKSkrVCsiIDAgMCwxICIrQSsiWiJ9ZnVuY3Rpb24gdih0LGUscil7cmV0dXJuIHQucmVwbGFjZShmLnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGk9dC5jaGFyQXQoMCksYT1mLnBhcmFtSXNYW2ldLG89Zi5wYXJhbUlzWVtpXSxzPWYubnVtUGFyYW1zW2ldO3JldHVybiBpK3Quc3Vic3RyKDEpLnJlcGxhY2UoZi5wYXJhbVJFLGZ1bmN0aW9uKHQpe3JldHVybiBuPj1zP3Q6KGFbbl0/dD1lKHQpOm9bbl0mJih0PXIodCkpLG4rKyx0KX0pfSl9ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7Zm9yKHZhciByIGluIGUuX3NoYXBlVXBwZXJMYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxlLl9zaGFwZUxvd2VyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS5fcGxvdHMpe3ZhciBuPWUuX3Bsb3RzW3JdLnNoYXBlbGF5ZXI7biYmbi5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKX1mb3IodmFyIGk9MDtpPGUuc2hhcGVzLmxlbmd0aDtpKyspZS5zaGFwZXNbaV0udmlzaWJsZSYmcCh0LGkpfSxkcmF3T25lOnB9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MjAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY29sb3IiOjU3NywiLi4vZHJhZ2VsZW1lbnQiOjU5NSwiLi4vZHJhd2luZyI6NTk4LCIuL2NvbnN0YW50cyI6NjU1LCIuL2hlbHBlcnMiOjY1OH1dLDY1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vbGliIik7ci5yYW5nZVRvU2hhcGVQb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4ibG9nIj09PXQudHlwZT90LnIyZDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuc2hhcGVQb3NpdGlvblRvUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuImxvZyI9PT10LnR5cGU/dC5kMnI6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxyLmRlY29kZURhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UmJihlPWUucmVwbGFjZSgiXyIsIiAiKSksdChlKX19LHIuZW5jb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkucmVwbGFjZSgiICIsIl8iKX19LHIuZXh0cmFjdFBhdGhDb29yZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtyZXR1cm4gdC5tYXRjaChuLnNlZ21lbnRSRSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgYT1lW3QuY2hhckF0KDApXS5kcmF3bjtpZih2b2lkIDAhPT1hKXt2YXIgbz10LnN1YnN0cigxKS5tYXRjaChuLnBhcmFtUkUpOyFvfHxvLmxlbmd0aDxhfHxyLnB1c2goaS5jbGVhbk51bWJlcihvW2FdKSl9fSkscn0sci5nZXREYXRhVG9QaXhlbD1mdW5jdGlvbih0LGUsbil7dmFyIGksYT10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpe3ZhciBvPXIuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZSk7aT1mdW5jdGlvbih0KXtyZXR1cm4gZS5fb2Zmc2V0K2UucjJwKG8odCwhMCkpfSwiZGF0ZSI9PT1lLnR5cGUmJihpPXIuZGVjb2RlRGF0ZShpKSl9ZWxzZSBpPW4/ZnVuY3Rpb24odCl7cmV0dXJuIGEudCthLmgqKDEtdCl9OmZ1bmN0aW9uKHQpe3JldHVybiBhLmwrYS53KnR9O3JldHVybiBpfSxyLmdldFBpeGVsVG9EYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5yYW5nZVRvU2hhcGVQb3NpdGlvbihlKTtpPWZ1bmN0aW9uKHQpe3JldHVybiBvKGUucDJyKHQtZS5fb2Zmc2V0KSl9fWVsc2UgaT1uP2Z1bmN0aW9uKHQpe3JldHVybiAxLSh0LWEudCkvYS5ofTpmdW5jdGlvbih0KXtyZXR1cm4odC1hLmwpL2Eud307cmV0dXJuIGl9LHIucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MT09PU1hdGgucm91bmQoZSUyKSxuPU1hdGgucm91bmQodCk7cmV0dXJuIHI/bisuNTpufX0seyIuLi8uLi9saWIiOjcwMCwiLi9jb25zdGFudHMiOjY1NX1dLDY1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RyYXciKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToic2hhcGVzIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyIpKCJzaGFwZXMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyI6NzU4LCIuL2F0dHJpYnV0ZXMiOjY1MywiLi9jYWxjX2F1dG9yYW5nZSI6NjU0LCIuL2RlZmF1bHRzIjo2NTYsIi4vZHJhdyI6NjU3fV0sNjYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmREZWVwQWxsLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPXQoIi4vY29uc3RhbnRzIiksdT1sKCJzdGVwIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXN0eWxlIiwicmVsYXlvdXQiLCJhbmltYXRlIiwidXBkYXRlIiwic2tpcCJdLGRmbHQ6InJlc3R5bGUifSxhcmdzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmcifSx2YWx1ZTp7dmFsVHlwZToic3RyaW5nIn0sZXhlY3V0ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19KTtlLmV4cG9ydHM9byhsKCJzbGlkZXIiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxhY3RpdmU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowfSxzdGVwczp1LGxlbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyYWN0aW9uIiwicGl4ZWxzIl0sZGZsdDoiZnJhY3Rpb24ifSxsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjB9LHBhZDphKGkoe2VkaXRUeXBlOiJhcnJheWRyYXcifSkse30se3Q6e2RmbHQ6MjB9fSkseGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjB9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AifSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjE1MH0sZWFzaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cy50cmFuc2l0aW9uLmVhc2luZy52YWx1ZXMsZGZsdDoiY3ViaWMtaW4tb3V0In19LGN1cnJlbnR2YWx1ZTp7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIn0sZm9udDpuKHt9KX0sZm9udDpuKHt9KSxhY3RpdmViZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLmdyaXBCZ0FjdGl2ZUNvbG9yfSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnJhaWxCZ0NvbG9yfSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy5yYWlsQm9yZGVyQ29sb3J9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy5yYWlsQm9yZGVyV2lkdGh9LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLnRpY2tMZW5ndGh9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy50aWNrQ29sb3J9LHRpY2t3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LG1pbm9ydGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMubWlub3JUaWNrTGVuZ3RofX0pLCJhcnJheWRyYXciLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyI6NzQzLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NCwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiOjgwOSwiLi9jb25zdGFudHMiOjY2MX1dLDY2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InNsaWRlcnMiLGNvbnRhaW5lckNsYXNzTmFtZToic2xpZGVyLWNvbnRhaW5lciIsZ3JvdXBDbGFzc05hbWU6InNsaWRlci1ncm91cCIsaW5wdXRBcmVhQ2xhc3M6InNsaWRlci1pbnB1dC1hcmVhIixyYWlsUmVjdENsYXNzOiJzbGlkZXItcmFpbC1yZWN0IixyYWlsVG91Y2hSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXRvdWNoLXJlY3QiLGdyaXBSZWN0Q2xhc3M6InNsaWRlci1ncmlwLXJlY3QiLHRpY2tSZWN0Q2xhc3M6InNsaWRlci10aWNrLXJlY3QiLGlucHV0UHJveHlDbGFzczoic2xpZGVyLWlucHV0LXByb3h5IixsYWJlbHNDbGFzczoic2xpZGVyLWxhYmVscyIsbGFiZWxHcm91cENsYXNzOiJzbGlkZXItbGFiZWwtZ3JvdXAiLGxhYmVsQ2xhc3M6InNsaWRlci1sYWJlbCIsY3VycmVudFZhbHVlQ2xhc3M6InNsaWRlci1jdXJyZW50LXZhbHVlIixyYWlsSGVpZ2h0OjUsbWVudUluZGV4QXR0ck5hbWU6InNsaWRlci1hY3RpdmUtaW5kZXgiLGF1dG9NYXJnaW5JZFJvb3Q6InNsaWRlci0iLG1pbldpZHRoOjMwLG1pbkhlaWdodDozMCx0ZXh0UGFkWDo0MCxhcnJvd09mZnNldFg6NCxyYWlsUmFkaXVzOjIscmFpbFdpZHRoOjUscmFpbEJvcmRlcjo0LHJhaWxCb3JkZXJXaWR0aDoxLHJhaWxCb3JkZXJDb2xvcjoiI2JlYzhkOSIscmFpbEJnQ29sb3I6IiNmOGZhZmMiLHJhaWxJbnNldDo4LHN0ZXBJbnNldDoxMCxncmlwUmFkaXVzOjEwLGdyaXBXaWR0aDoyMCxncmlwSGVpZ2h0OjIwLGdyaXBCb3JkZXI6MjAsZ3JpcEJvcmRlcldpZHRoOjEsZ3JpcEJvcmRlckNvbG9yOiIjYmVjOGQ5IixncmlwQmdDb2xvcjoiI2Y2ZjhmYSIsZ3JpcEJnQWN0aXZlQ29sb3I6IiNkYmRkZTAiLGxhYmVsUGFkZGluZzo4LGxhYmVsT2Zmc2V0OjAsdGlja1dpZHRoOjEsdGlja0NvbG9yOiIjMzMzIix0aWNrT2Zmc2V0OjI1LHRpY2tMZW5ndGg6NyxtaW5vclRpY2tPZmZzZXQ6MjUsbWlub3JUaWNrQ29sb3I6IiMzMzMiLG1pbm9yVGlja0xlbmd0aDo0LGN1cnJlbnRWYWx1ZVBhZGRpbmc6OCxjdXJyZW50VmFsdWVJbnNldDowfX0se31dLDY2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLm5hbWUscz1hLnN0ZXBzO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1mb3IodmFyIHM9aSh0LGUse25hbWU6InN0ZXBzIixoYW5kbGVJdGVtRGVmYXVsdHM6Y30pLGw9MCx1PTA7dTxzLmxlbmd0aDt1Kyspc1t1XS52aXNpYmxlJiZsKys7aWYobDwyP2UudmlzaWJsZT0hMTpvKCJ2aXNpYmxlIikpe2UuX3N0ZXBDb3VudD1sO3ZhciBmPWUuX3Zpc2libGVTdGVwcz1uLmZpbHRlclZpc2libGUocyk7KHNbbygiYWN0aXZlIildfHx7fSkudmlzaWJsZXx8KGUuYWN0aXZlPWZbMF0uX2luZGV4KSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygibGVuIiksbygibGVubW9kZSIpLG8oInBhZC50IiksbygicGFkLnIiKSxvKCJwYWQuYiIpLG8oInBhZC5sIiksbi5jb2VyY2VGb250KG8sImZvbnQiLHIuZm9udCksbygiY3VycmVudHZhbHVlLnZpc2libGUiKSYmKG8oImN1cnJlbnR2YWx1ZS54YW5jaG9yIiksbygiY3VycmVudHZhbHVlLnByZWZpeCIpLG8oImN1cnJlbnR2YWx1ZS5zdWZmaXgiKSxvKCJjdXJyZW50dmFsdWUub2Zmc2V0Iiksbi5jb2VyY2VGb250KG8sImN1cnJlbnR2YWx1ZS5mb250IixlLmZvbnQpKSxvKCJ0cmFuc2l0aW9uLmR1cmF0aW9uIiksbygidHJhbnNpdGlvbi5lYXNpbmciKSxvKCJiZ2NvbG9yIiksbygiYWN0aXZlYmdjb2xvciIpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSxvKCJ0aWNrbGVuIiksbygidGlja3dpZHRoIiksbygidGlja2NvbG9yIiksbygibWlub3J0aWNrbGVuIil9fWZ1bmN0aW9uIGModCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aWYoInNraXAiPT09dC5tZXRob2R8fEFycmF5LmlzQXJyYXkodC5hcmdzKT9yKCJ2aXNpYmxlIik6ZS52aXNpYmxlPSExKXtyKCJtZXRob2QiKSxyKCJhcmdzIik7dmFyIGk9cigibGFiZWwiLCJzdGVwLSIrZS5faW5kZXgpO3IoInZhbHVlIixpKSxyKCJleGVjdXRlIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLHtuYW1lOm8saGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzQ0LCIuL2F0dHJpYnV0ZXMiOjY2MCwiLi9jb25zdGFudHMiOjY2MX1dLDY2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uL2NvbG9yIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLHU9dCgiLi9jb25zdGFudHMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxoPWYuTElORV9TUEFDSU5HLHA9Zi5GUk9NX1RMLGQ9Zi5GUk9NX0JSO2Z1bmN0aW9uIGcodCl7cmV0dXJuIHUuYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrdS5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh1LmxhYmVsR3JvdXBDbGFzcywhMCk7dmFyIGE9MCxjPTA7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWIobi5zZWxlY3QodGhpcykse3N0ZXA6dH0sZSkubm9kZSgpO2lmKHIpe3ZhciBpPW8uYkJveChyKTtjPU1hdGgubWF4KGMsaS5oZWlnaHQpLGE9TWF0aC5tYXgoYSxpLndpZHRoKX19KSxyLnJlbW92ZSgpO3ZhciBmPWUuX2RpbXM9e307Zi5pbnB1dEFyZWFXaWR0aD1NYXRoLm1heCh1LnJhaWxXaWR0aCx1LmdyaXBIZWlnaHQpO3ZhciBoPXQuX2Z1bGxMYXlvdXQuX3NpemU7Zi5seD1oLmwraC53KmUueCxmLmx5PWgudCtoLmgqKDEtZS55KSwiZnJhY3Rpb24iPT09ZS5sZW5tb2RlP2Yub3V0ZXJMZW5ndGg9TWF0aC5yb3VuZChoLncqZS5sZW4pOmYub3V0ZXJMZW5ndGg9ZS5sZW4sZi5pbnB1dEFyZWFTdGFydD0wLGYuaW5wdXRBcmVhTGVuZ3RoPU1hdGgucm91bmQoZi5vdXRlckxlbmd0aC1lLnBhZC5sLWUucGFkLnIpO3ZhciB2PShmLmlucHV0QXJlYUxlbmd0aC0yKnUuc3RlcEluc2V0KS8oZS5fc3RlcENvdW50LTEpLG09YSt1LmxhYmVsUGFkZGluZztpZihmLmxhYmVsU3RyaWRlPU1hdGgubWF4KDEsTWF0aC5jZWlsKG0vdikpLGYubGFiZWxIZWlnaHQ9YyxmLmN1cnJlbnRWYWx1ZU1heFdpZHRoPTAsZi5jdXJyZW50VmFsdWVIZWlnaHQ9MCxmLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PTAsZi5jdXJyZW50VmFsdWVNYXhMaW5lcz0xLGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciB4PW8udGVzdGVyLmFwcGVuZCgiZyIpO3IuZWFjaChmdW5jdGlvbih0KXt2YXIgcj15KHgsZSx0LmxhYmVsKSxuPXIubm9kZSgpJiZvLmJCb3goci5ub2RlKCkpfHx7d2lkdGg6MCxoZWlnaHQ6MH0saT1sLmxpbmVDb3VudChyKTtmLmN1cnJlbnRWYWx1ZU1heFdpZHRoPU1hdGgubWF4KGYuY3VycmVudFZhbHVlTWF4V2lkdGgsTWF0aC5jZWlsKG4ud2lkdGgpKSxmLmN1cnJlbnRWYWx1ZUhlaWdodD1NYXRoLm1heChmLmN1cnJlbnRWYWx1ZUhlaWdodCxNYXRoLmNlaWwobi5oZWlnaHQpKSxmLmN1cnJlbnRWYWx1ZU1heExpbmVzPU1hdGgubWF4KGYuY3VycmVudFZhbHVlTWF4TGluZXMsaSl9KSxmLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PWYuY3VycmVudFZhbHVlSGVpZ2h0K2UuY3VycmVudHZhbHVlLm9mZnNldCx4LnJlbW92ZSgpfWYuaGVpZ2h0PWYuY3VycmVudFZhbHVlVG90YWxIZWlnaHQrdS50aWNrT2Zmc2V0K2UudGlja2xlbit1LmxhYmVsT2Zmc2V0K2YubGFiZWxIZWlnaHQrZS5wYWQudCtlLnBhZC5iO3ZhciBfPSJsZWZ0IjtzLmlzUmlnaHRBbmNob3IoZSkmJihmLmx4LT1mLm91dGVyTGVuZ3RoLF89InJpZ2h0Iikscy5pc0NlbnRlckFuY2hvcihlKSYmKGYubHgtPWYub3V0ZXJMZW5ndGgvMixfPSJjZW50ZXIiKTt2YXIgdz0idG9wIjtzLmlzQm90dG9tQW5jaG9yKGUpJiYoZi5seS09Zi5oZWlnaHQsdz0iYm90dG9tIikscy5pc01pZGRsZUFuY2hvcihlKSYmKGYubHktPWYuaGVpZ2h0LzIsdz0ibWlkZGxlIiksZi5vdXRlckxlbmd0aD1NYXRoLmNlaWwoZi5vdXRlckxlbmd0aCksZi5oZWlnaHQ9TWF0aC5jZWlsKGYuaGVpZ2h0KSxmLmx4PU1hdGgucm91bmQoZi5seCksZi5seT1NYXRoLnJvdW5kKGYubHkpO3ZhciBrPXt5OmUueSxiOmYuaGVpZ2h0KmRbd10sdDpmLmhlaWdodCpwW3ddfTsiZnJhY3Rpb24iPT09ZS5sZW5tb2RlPyhrLmw9MCxrLnhsPWUueC1lLmxlbipwW19dLGsucj0wLGsueHI9ZS54K2UubGVuKmRbX10pOihrLng9ZS54LGsubD1mLm91dGVyTGVuZ3RoKnBbX10say5yPWYub3V0ZXJMZW5ndGgqZFtfXSksaS5hdXRvTWFyZ2luKHQsZyhlKSxrKX1mdW5jdGlvbiB5KHQsZSxyKXtpZihlLmN1cnJlbnR2YWx1ZS52aXNpYmxlKXt2YXIgbixpLGE9ZS5fZGltcztzd2l0Y2goZS5jdXJyZW50dmFsdWUueGFuY2hvcil7Y2FzZSJyaWdodCI6bj1hLmlucHV0QXJlYUxlbmd0aC11LmN1cnJlbnRWYWx1ZUluc2V0LWEuY3VycmVudFZhbHVlTWF4V2lkdGgsaT0ibGVmdCI7YnJlYWs7Y2FzZSJjZW50ZXIiOm49LjUqYS5pbnB1dEFyZWFMZW5ndGgsaT0ibWlkZGxlIjticmVhaztkZWZhdWx0Om49dS5jdXJyZW50VmFsdWVJbnNldCxpPSJsZWZ0In12YXIgYz1zLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0Iix1LmxhYmVsQ2xhc3MsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cih7InRleHQtYW5jaG9yIjppLCJkYXRhLW5vdGV4IjoxfSl9KSxmPWUuY3VycmVudHZhbHVlLnByZWZpeD9lLmN1cnJlbnR2YWx1ZS5wcmVmaXg6IiI7aWYoInN0cmluZyI9PXR5cGVvZiByKWYrPXI7ZWxzZXt2YXIgcD1lLnN0ZXBzW2UuYWN0aXZlXS5sYWJlbCxkPWUuX2dkLl9mdWxsTGF5b3V0Lm1ldGE7ZCYmKHA9cy50ZW1wbGF0ZVN0cmluZyhwLHttZXRhOmR9KSksZis9cH1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgmJihmKz1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgpLGMuY2FsbChvLmZvbnQsZS5jdXJyZW50dmFsdWUuZm9udCkudGV4dChmKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLGUuX2dkKTt2YXIgZz1sLmxpbmVDb3VudChjKSx2PShhLmN1cnJlbnRWYWx1ZU1heExpbmVzKzEtZykqZS5jdXJyZW50dmFsdWUuZm9udC5zaXplKmg7cmV0dXJuIGwucG9zaXRpb25UZXh0KGMsbix2KSxjfX1mdW5jdGlvbiB4KHQsZSxyKXtzLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iix1LmdyaXBSZWN0Q2xhc3MsZnVuY3Rpb24obil7bi5jYWxsKFQsZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkuYXR0cih7d2lkdGg6dS5ncmlwV2lkdGgsaGVpZ2h0OnUuZ3JpcEhlaWdodCxyeDp1LmdyaXBSYWRpdXMscnk6dS5ncmlwUmFkaXVzfSkuY2FsbChhLnN0cm9rZSxyLmJvcmRlcmNvbG9yKS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gYih0LGUscil7dmFyIG49cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsdS5sYWJlbENsYXNzLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsImRhdGEtbm90ZXgiOjF9KX0pLGk9ZS5zdGVwLmxhYmVsLGE9ci5fZ2QuX2Z1bGxMYXlvdXQubWV0YTtyZXR1cm4gYSYmKGk9cy50ZW1wbGF0ZVN0cmluZyhpLHttZXRhOmF9KSksbi5jYWxsKG8uZm9udCxyLmZvbnQpLnRleHQoaSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyLl9nZCksbn1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9cy5lbnN1cmVTaW5nbGUodCwiZyIsdS5sYWJlbHNDbGFzcyksaT1lLl9kaW1zLGE9ci5zZWxlY3RBbGwoImcuIit1LmxhYmVsR3JvdXBDbGFzcykuZGF0YShpLmxhYmVsU3RlcHMpO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHUubGFiZWxHcm91cENsYXNzLCEwKSxhLmV4aXQoKS5yZW1vdmUoKSxhLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ci5jYWxsKGIsdCxlKSxvLnNldFRyYW5zbGF0ZShyLFMoZSx0LmZyYWN0aW9uKSx1LnRpY2tPZmZzZXQrZS50aWNrbGVuK2UuZm9udC5zaXplKmgrdS5sYWJlbE9mZnNldCtpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pfWZ1bmN0aW9uIHcodCxlLHIsbixpKXt2YXIgYT1NYXRoLnJvdW5kKG4qKHIuX3N0ZXBDb3VudC0xKSksbz1yLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4O28hPT1yLmFjdGl2ZSYmayh0LGUscixvLCEwLGkpfWZ1bmN0aW9uIGsodCxlLHIsbixhLG8pe3ZhciBzPXIuYWN0aXZlO3IuYWN0aXZlPW4sYyh0LmxheW91dCx1Lm5hbWUscikuYXBwbHlVcGRhdGUoImFjdGl2ZSIsbik7dmFyIGw9ci5zdGVwc1tyLmFjdGl2ZV07ZS5jYWxsKE0scixvKSxlLmNhbGwoeSxyKSx0LmVtaXQoInBsb3RseV9zbGlkZXJjaGFuZ2UiLHtzbGlkZXI6cixzdGVwOnIuc3RlcHNbci5hY3RpdmVdLGludGVyYWN0aW9uOmEscHJldmlvdXNBY3RpdmU6c30pLGwmJmwubWV0aG9kJiZhJiYoZS5fbmV4dE1ldGhvZD8oZS5fbmV4dE1ldGhvZC5zdGVwPWwsZS5fbmV4dE1ldGhvZC5kb0NhbGxiYWNrPWEsZS5fbmV4dE1ldGhvZC5kb1RyYW5zaXRpb249byk6KGUuX25leHRNZXRob2Q9e3N0ZXA6bCxkb0NhbGxiYWNrOmEsZG9UcmFuc2l0aW9uOm99LGUuX25leHRNZXRob2RSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3ZhciByPWUuX25leHRNZXRob2Quc3RlcDtyLm1ldGhvZCYmKHIuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHIubWV0aG9kLHIuYXJncyksZS5fbmV4dE1ldGhvZD1udWxsLGUuX25leHRNZXRob2RSYWY9bnVsbCl9KSkpfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBpPXIubm9kZSgpLG89bi5zZWxlY3QoZSk7ZnVuY3Rpb24gcygpe3JldHVybiByLmRhdGEoKVswXX10Lm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7dmFyIHQ9cygpO2UuZW1pdCgicGxvdGx5X3NsaWRlcnN0YXJ0Iix7c2xpZGVyOnR9KTt2YXIgbD1yLnNlbGVjdCgiLiIrdS5ncmlwUmVjdENsYXNzKTtuLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLG4uZXZlbnQucHJldmVudERlZmF1bHQoKSxsLmNhbGwoYS5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIGM9RSh0LG4ubW91c2UoaSlbMF0pO3coZSxyLHQsYywhMCksdC5fZHJhZ2dpbmc9ITAsby5vbigibW91c2Vtb3ZlIixmdW5jdGlvbigpe3ZhciB0PXMoKSxhPUUodCxuLm1vdXNlKGkpWzBdKTt3KGUscix0LGEsITEpfSksby5vbigibW91c2V1cCIsZnVuY3Rpb24oKXt2YXIgdD1zKCk7dC5fZHJhZ2dpbmc9ITEsbC5jYWxsKGEuZmlsbCx0LmJnY29sb3IpLG8ub24oIm1vdXNldXAiLG51bGwpLG8ub24oIm1vdXNlbW92ZSIsbnVsbCksZS5lbWl0KCJwbG90bHlfc2xpZGVyZW5kIix7c2xpZGVyOnQsc3RlcDp0LnN0ZXBzW3QuYWN0aXZlXX0pfSl9KX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInJlY3QuIit1LnRpY2tSZWN0Q2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKSxpPWUuX2RpbXM7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQodS50aWNrUmVjdENsYXNzLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmF0dHIoe3dpZHRoOmUudGlja3dpZHRoKyJweCIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIHM9ciVpLmxhYmVsU3RyaWRlPT0wLGw9bi5zZWxlY3QodGhpcyk7bC5hdHRyKHtoZWlnaHQ6cz9lLnRpY2tsZW46ZS5taW5vcnRpY2tsZW59KS5jYWxsKGEuZmlsbCxlLnRpY2tjb2xvciksby5zZXRUcmFuc2xhdGUobCxTKGUsci8oZS5fc3RlcENvdW50LTEpKS0uNSplLnRpY2t3aWR0aCwocz91LnRpY2tPZmZzZXQ6dS5taW5vclRpY2tPZmZzZXQpK2kuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfSl9ZnVuY3Rpb24gTSh0LGUscil7Zm9yKHZhciBuPXQuc2VsZWN0KCJyZWN0LiIrdS5ncmlwUmVjdENsYXNzKSxpPTAsYT0wO2E8ZS5fc3RlcENvdW50O2ErKylpZihlLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4PT09ZS5hY3RpdmUpe2k9YTticmVha312YXIgbz1TKGUsaS8oZS5fc3RlcENvdW50LTEpKTtpZighZS5faW52b2tpbmdDb21tYW5kKXt2YXIgcz1uO3ImJmUudHJhbnNpdGlvbi5kdXJhdGlvbj4wJiYocz1zLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlLnRyYW5zaXRpb24uZHVyYXRpb24pLmVhc2UoZS50cmFuc2l0aW9uLmVhc2luZykpLHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG8tLjUqdS5ncmlwV2lkdGgpKyIsIitlLl9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KyIpIil9fWZ1bmN0aW9uIFModCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K3Uuc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKnUuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKGUtdS5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqdS5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuPXIuX2RpbXMsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iix1LnJhaWxUb3VjaFJlY3RDbGFzcyxmdW5jdGlvbihuKXtuLmNhbGwoVCxlLHQscikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KTtpLmF0dHIoe3dpZHRoOm4uaW5wdXRBcmVhTGVuZ3RoLGhlaWdodDpNYXRoLm1heChuLmlucHV0QXJlYVdpZHRoLHUudGlja09mZnNldCtyLnRpY2tsZW4rbi5sYWJlbEhlaWdodCl9KS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLmF0dHIoIm9wYWNpdHkiLDApLG8uc2V0VHJhbnNsYXRlKGksMCxuLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9ZS5fZGltcyxuPXIuaW5wdXRBcmVhTGVuZ3RoLTIqdS5yYWlsSW5zZXQsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iix1LnJhaWxSZWN0Q2xhc3MpO2kuYXR0cih7d2lkdGg6bixoZWlnaHQ6dS5yYWlsV2lkdGgscng6dS5yYWlsUmFkaXVzLHJ5OnUucmFpbFJhZGl1cywic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KS5jYWxsKGEuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKSxvLnNldFRyYW5zbGF0ZShpLHUucmFpbEluc2V0LC41KihyLmlucHV0QXJlYVdpZHRoLXUucmFpbFdpZHRoKStyLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRbdS5uYW1lXSxuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTthLnZpc2libGUmJihhLl9nZD1lLG4ucHVzaChhKSl9cmV0dXJuIG59KGUsdCksYT1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrdS5jb250YWluZXJDbGFzc05hbWUpLmRhdGEoci5sZW5ndGg+MD9bMF06W10pO2Z1bmN0aW9uIHMoZSl7ZS5fY29tbWFuZE9ic2VydmVyJiYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGRlbGV0ZSBlLl9jb21tYW5kT2JzZXJ2ZXIpLGkuYXV0b01hcmdpbih0LGcoZSkpfWlmKGEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHUuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZSgiY3Vyc29yIiwiZXctcmVzaXplIiksYS5leGl0KCkuZWFjaChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK3UuZ3JvdXBDbGFzc05hbWUpLmVhY2gocyl9KS5yZW1vdmUoKSwwIT09ci5sZW5ndGgpe3ZhciBsPWEuc2VsZWN0QWxsKCJnLiIrdS5ncm91cENsYXNzTmFtZSkuZGF0YShyLHYpO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHUuZ3JvdXBDbGFzc05hbWUsITApLGwuZXhpdCgpLmVhY2gocykucmVtb3ZlKCk7Zm9yKHZhciBjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciBmPXJbY107bSh0LGYpfWwuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTshZnVuY3Rpb24odCl7dmFyIGU9dC5fZGltcztlLmxhYmVsU3RlcHM9W107Zm9yKHZhciByPXQuX3N0ZXBDb3VudCxuPTA7bjxyO24rPWUubGFiZWxTdHJpZGUpZS5sYWJlbFN0ZXBzLnB1c2goe2ZyYWN0aW9uOm4vKHItMSksc3RlcDp0Ll92aXNpYmxlU3RlcHNbbl19KX0oZSksaS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIodCxlLGUuX3Zpc2libGVTdGVwcyxmdW5jdGlvbihlKXt2YXIgbj1yLmRhdGEoKVswXTtuLmFjdGl2ZSE9PWUuaW5kZXgmJihuLl9kcmFnZ2luZ3x8ayh0LHIsbixlLmluZGV4LCExLCEwKSl9KSxmdW5jdGlvbih0LGUscil7KHIuc3RlcHNbci5hY3RpdmVdfHx7fSkudmlzaWJsZXx8KHIuYWN0aXZlPXIuX3Zpc2libGVTdGVwc1swXS5faW5kZXgpO2UuY2FsbCh5LHIpLmNhbGwoTCxyKS5jYWxsKF8scikuY2FsbChBLHIpLmNhbGwoQyx0LHIpLmNhbGwoeCx0LHIpO3ZhciBuPXIuX2RpbXM7by5zZXRUcmFuc2xhdGUoZSxuLmx4K3IucGFkLmwsbi5seStyLnBhZC50KSxlLmNhbGwoTSxyLCExKSxlLmNhbGwoeSxyKX0odCxuLnNlbGVjdCh0aGlzKSxlKX0pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vY29sb3IiOjU3NywiLi4vZHJhd2luZyI6NTk4LCIuL2NvbnN0YW50cyI6NjYxLGQzOjE1NH1dLDY2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOm4ubmFtZSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjY2MCwiLi9jb25zdGFudHMiOjY2MSwiLi9kZWZhdWx0cyI6NjYyLCIuL2RyYXciOjY2M31dLDY2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi9kcmF3aW5nIiksYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIik7ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQsZSxyKXt2YXIgcCxkPXIucHJvcENvbnRhaW5lcixnPXIucHJvcE5hbWUsdj1yLnBsYWNlaG9sZGVyLG09ci50cmFjZUluZGV4LHk9ci5hdm9pZHx8e30seD1yLmF0dHJpYnV0ZXMsYj1yLnRyYW5zZm9ybSxfPXIuY29udGFpbmVyR3JvdXAsdz10Ll9mdWxsTGF5b3V0LGs9MSxUPSExLEE9ZC50aXRsZSxNPShBJiZBLnRleHQ/QS50ZXh0OiIiKS50cmltKCksUz1BJiZBLmZvbnQ/QS5mb250Ont9LEU9Uy5mYW1pbHksQz1TLnNpemUsTD1TLmNvbG9yOyJ0aXRsZS50ZXh0Ij09PWc/cD0idGl0bGVUZXh0IjotMSE9PWcuaW5kZXhPZigiYXhpcyIpP3A9ImF4aXNUaXRsZVRleHQiOmcuaW5kZXhPZighMCkmJihwPSJjb2xvcmJhclRpdGxlVGV4dCIpO3ZhciB6PXQuX2NvbnRleHQuZWRpdHNbcF07IiI9PT1NP2s9MDpNLnJlcGxhY2UoaCwiICUgIik9PT12LnJlcGxhY2UoaCwiICUgIikmJihrPS4yLFQ9ITAsenx8KE09IiIpKTt3Lm1ldGEmJihNPXMudGVtcGxhdGVTdHJpbmcoTSx7bWV0YTp3Lm1ldGF9KSk7dmFyIE89TXx8ejtffHwoXz1zLmVuc3VyZVNpbmdsZSh3Ll9pbmZvbGF5ZXIsImciLCJnLSIrZSkpO3ZhciBJPV8uc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShPP1swXTpbXSk7aWYoSS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLEkudGV4dChNKS5hdHRyKCJjbGFzcyIsZSksSS5leGl0KCkucmVtb3ZlKCksIU8pcmV0dXJuIF87ZnVuY3Rpb24gRCh0KXtzLnN5bmNPckFzeW5jKFtQLFJdLHQpfWZ1bmN0aW9uIFAoZSl7dmFyIHI7cmV0dXJuIGI/KHI9IiIsYi5yb3RhdGUmJihyKz0icm90YXRlKCIrW2Iucm90YXRlLHgueCx4LnldKyIpIiksYi5vZmZzZXQmJihyKz0idHJhbnNsYXRlKDAsICIrYi5vZmZzZXQrIikiKSk6cj1udWxsLGUuYXR0cigidHJhbnNmb3JtIixyKSxlLnN0eWxlKHsiZm9udC1mYW1pbHkiOkUsImZvbnQtc2l6ZSI6bi5yb3VuZChDLDIpKyJweCIsZmlsbDpjLnJnYihMKSxvcGFjaXR5OmsqYy5vcGFjaXR5KEwpLCJmb250LXdlaWdodCI6YS5mb250V2VpZ2h0fSkuYXR0cih4KS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBSKHQpe3ZhciBlPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKHkmJnkuc2VsZWN0aW9uJiZ5LnNpZGUmJk0pe2UuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgcj0wLGE9e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn1beS5zaWRlXSxvPS0xIT09WyJsZWZ0IiwidG9wIl0uaW5kZXhPZih5LnNpZGUpPy0xOjEsYz1pKHkucGFkKT95LnBhZDoyLHU9bC5iQm94KGUubm9kZSgpKSxmPXtsZWZ0OjAsdG9wOjAscmlnaHQ6dy53aWR0aCxib3R0b206dy5oZWlnaHR9LGg9eS5tYXhTaGlmdHx8KGZbeS5zaWRlXS11W3kuc2lkZV0pKigibGVmdCI9PT15LnNpZGV8fCJ0b3AiPT09eS5zaWRlPy0xOjEpO2lmKGg8MClyPWg7ZWxzZXt2YXIgcD15Lm9mZnNldExlZnR8fDAsZD15Lm9mZnNldFRvcHx8MDt1LmxlZnQtPXAsdS5yaWdodC09cCx1LnRvcC09ZCx1LmJvdHRvbS09ZCx5LnNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bC5iQm94KHRoaXMpO3MuYkJveEludGVyc2VjdCh1LHQsYykmJihyPU1hdGgubWF4KHIsbyoodFt5LnNpZGVdLXVbYV0pK2MpKX0pLHI9TWF0aC5taW4oaCxyKX1pZihyPjB8fGg8MCl7dmFyIGc9e2xlZnQ6Wy1yLDBdLHJpZ2h0OltyLDBdLHRvcDpbMCwtcl0sYm90dG9tOlswLHJdfVt5LnNpZGVdO2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZysiKSIpfX19SS5jYWxsKEQpLHomJihNP0kub24oIi5vcGFjaXR5IixudWxsKTooaz0wLFQ9ITAsSS50ZXh0KHYpLm9uKCJtb3VzZW92ZXIub3BhY2l0eSIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZi5TSE9XX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQub3BhY2l0eSIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZi5ISURFX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMCl9KSksSS5jYWxsKHUubWFrZUVkaXRhYmxlLHtnZDp0fSkub24oImVkaXQiLGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PW0/by5jYWxsKCJfZ3VpUmVzdHlsZSIsdCxnLGUsbSk6by5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsZyxlKX0pLm9uKCJjYW5jZWwiLGZ1bmN0aW9uKCl7dGhpcy50ZXh0KHRoaXMuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpKS5jYWxsKEQpfSkub24oImlucHV0IixmdW5jdGlvbih0KXt0aGlzLnRleHQodHx8IiAiKS5jYWxsKHUucG9zaXRpb25UZXh0LHgueCx4LnkpfSkpO3JldHVybiBJLmNsYXNzZWQoImpzLXBsYWNlaG9sZGVyIixUKSxffX07dmFyIGg9LyBbWFldWzAtOV0qIC99LHsiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6Njc2LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL2NvbG9yIjo1NzcsIi4uL2RyYXdpbmciOjU5OCxkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw2NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksYz1sKCJidXR0b24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXN0eWxlIiwicmVsYXlvdXQiLCJhbmltYXRlIiwidXBkYXRlIiwic2tpcCJdLGRmbHQ6InJlc3R5bGUifSxhcmdzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGV4ZWN1dGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSk7ZS5leHBvcnRzPW8obCgidXBkYXRlbWVudSIse19hcnJheUF0dHJSZWdleHBzOlsvXnVwZGF0ZW1lbnVzXFsoMHxbMS05XVswLTldKylcXVwuYnV0dG9ucy9dLHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkcm9wZG93biIsImJ1dHRvbnMiXSxkZmx0OiJkcm9wZG93biJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsInJpZ2h0IiwidXAiLCJkb3duIl0sZGZsdDoiZG93biJ9LGFjdGl2ZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MH0sc2hvd2FjdGl2ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYnV0dG9uczpjLHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6LS4wNX0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6InJpZ2h0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDoxfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0scGFkOmEocyh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSksZm9udDpuKHt9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJvcmRlckxpbmV9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In19KSwiYXJyYXlkcmF3IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NzQsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjo4MDksIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjU3Nn1dLDY2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InVwZGF0ZW1lbnVzIixjb250YWluZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtY29udGFpbmVyIixoZWFkZXJHcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItZ3JvdXAiLGhlYWRlckNsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXIiLGhlYWRlckFycm93Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1hcnJvdyIsZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXAiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbiIsYnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWJ1dHRvbiIsaXRlbVJlY3RDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS1yZWN0IixpdGVtVGV4dENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXRleHQiLG1lbnVJbmRleEF0dHJOYW1lOiJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoidXBkYXRlbWVudS0iLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6IiAgIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjoiI0Y0RkFGRiIsaG92ZXJDb2xvcjoiI0Y0RkFGRiIsYXJyb3dTeW1ib2w6e2xlZnQ6Ilx1MjVjNCIscmlnaHQ6Ilx1MjViYSIsdXA6Ilx1MjViMiIsZG93bjoiXHUyNWJjIn19fSx7fV0sNjY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWEuYnV0dG9ucztmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9bygidmlzaWJsZSIsaSh0LGUse25hbWU6ImJ1dHRvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSkubGVuZ3RoPjApJiYobygiYWN0aXZlIiksbygiZGlyZWN0aW9uIiksbygidHlwZSIpLG8oInNob3dhY3RpdmUiKSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJiZ2NvbG9yIixyLnBhcGVyX2JnY29sb3IpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSl9ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1yKCJ2aXNpYmxlIiwic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpKSYmKHIoIm1ldGhvZCIpLHIoImFyZ3MiKSxyKCJsYWJlbCIpLHIoImV4ZWN1dGUiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4vYXR0cmlidXRlcyI6NjY2LCIuL2NvbnN0YW50cyI6NjY3fV0sNjY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90cy9wbG90cyIpLGE9dCgiLi4vY29sb3IiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsdT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLGY9dCgiLi9jb25zdGFudHMiKSxoPXQoIi4vc2Nyb2xsYm94Iik7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24gZCh0LGUpe3JldHVybit0LmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSk9PT1lLl9pbmRleH1mdW5jdGlvbiBnKHQsZSxyLG4saSxhLG8scyl7ZS5hY3RpdmU9byxjKHQubGF5b3V0LGYubmFtZSxlKS5hcHBseVVwZGF0ZSgiYWN0aXZlIixvKSwiYnV0dG9ucyI9PT1lLnR5cGU/bSh0LG4sbnVsbCxudWxsLGUpOiJkcm9wZG93biI9PT1lLnR5cGUmJihpLmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSwiLTEiKSx2KHQsbixpLGEsZSksc3x8bSh0LG4saSxhLGUpKX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIGE9cy5lbnN1cmVTaW5nbGUoZSwiZyIsZi5oZWFkZXJDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pLGw9aS5fZGltcyxjPWkuYWN0aXZlLHU9aS5idXR0b25zW2NdfHxmLmJsYW5rSGVhZGVyT3B0cyxoPXt5OmkucGFkLnQseVBhZDowLHg6aS5wYWQubCx4UGFkOjAsaW5kZXg6MH0scD17d2lkdGg6bC5oZWFkZXJXaWR0aCxoZWlnaHQ6bC5oZWFkZXJIZWlnaHR9O2EuY2FsbCh5LGksdSx0KS5jYWxsKE0saSxoLHApLHMuZW5zdXJlU2luZ2xlKGUsInRleHQiLGYuaGVhZGVyQXJyb3dDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS5jYWxsKG8uZm9udCxpLmZvbnQpLnRleHQoZi5hcnJvd1N5bWJvbFtpLmRpcmVjdGlvbl0pfSkuYXR0cih7eDpsLmhlYWRlcldpZHRoLWYuYXJyb3dPZmZzZXRYK2kucGFkLmwseTpsLmhlYWRlckhlaWdodC8yK2YudGV4dE9mZnNldFkraS5wYWQudH0pLGEub24oImNsaWNrIixmdW5jdGlvbigpe3IuY2FsbChTLFN0cmluZyhkKHIsaSk/LTE6aS5faW5kZXgpKSxtKHQsZSxyLG4saSl9KSxhLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7YS5jYWxsKHcpfSksYS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7YS5jYWxsKGssaSl9KSxvLnNldFRyYW5zbGF0ZShlLGwubHgsbC5seSl9ZnVuY3Rpb24gbSh0LGUscixhLG8pe3J8fChyPWUpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIik7dmFyIGw9ZnVuY3Rpb24odCl7cmV0dXJuLTE9PSt0LmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSl9KHIpJiYiYnV0dG9ucyIhPT1vLnR5cGU/W106by5idXR0b25zLGM9ImRyb3Bkb3duIj09PW8udHlwZT9mLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOmYuYnV0dG9uQ2xhc3NOYW1lLHU9ci5zZWxlY3RBbGwoImcuIitjKS5kYXRhKHMuZmlsdGVyVmlzaWJsZShsKSksaD11LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChjLCEwKSxwPXUuZXhpdCgpOyJkcm9wZG93biI9PT1vLnR5cGU/KGguYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKSxwLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLnJlbW92ZSgpKTpwLnJlbW92ZSgpO3ZhciBkPTAsdj0wLG09by5fZGltcyx4PS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKG8uZGlyZWN0aW9uKTsiZHJvcGRvd24iPT09by50eXBlJiYoeD92PW0uaGVhZGVySGVpZ2h0K2YuZ2FwQnV0dG9uSGVhZGVyOmQ9bS5oZWFkZXJXaWR0aCtmLmdhcEJ1dHRvbkhlYWRlciksImRyb3Bkb3duIj09PW8udHlwZSYmInVwIj09PW8uZGlyZWN0aW9uJiYodj0tZi5nYXBCdXR0b25IZWFkZXIrZi5nYXBCdXR0b24tbS5vcGVuSGVpZ2h0KSwiZHJvcGRvd24iPT09by50eXBlJiYibGVmdCI9PT1vLmRpcmVjdGlvbiYmKGQ9LWYuZ2FwQnV0dG9uSGVhZGVyK2YuZ2FwQnV0dG9uLW0ub3BlbldpZHRoKTt2YXIgYj17eDptLmx4K2Qrby5wYWQubCx5Om0ubHkrditvLnBhZC50LHlQYWQ6Zi5nYXBCdXR0b24seFBhZDpmLmdhcEJ1dHRvbixpbmRleDowfSxUPXtsOmIueCtvLmJvcmRlcndpZHRoLHQ6Yi55K28uYm9yZGVyd2lkdGh9O3UuZWFjaChmdW5jdGlvbihzLGwpe3ZhciBjPW4uc2VsZWN0KHRoaXMpO2MuY2FsbCh5LG8scyx0KS5jYWxsKE0sbyxiKSxjLm9uKCJjbGljayIsZnVuY3Rpb24oKXtuLmV2ZW50LmRlZmF1bHRQcmV2ZW50ZWR8fChnKHQsbywwLGUscixhLGwpLHMuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHMubWV0aG9kLHMuYXJncyksdC5lbWl0KCJwbG90bHlfYnV0dG9uY2xpY2tlZCIse21lbnU6byxidXR0b246cyxhY3RpdmU6by5hY3RpdmV9KSl9KSxjLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Yy5jYWxsKHcpfSksYy5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7Yy5jYWxsKGssbyksdS5jYWxsKF8sbyl9KX0pLHUuY2FsbChfLG8pLHg/KFQudz1NYXRoLm1heChtLm9wZW5XaWR0aCxtLmhlYWRlcldpZHRoKSxULmg9Yi55LVQudCk6KFQudz1iLngtVC5sLFQuaD1NYXRoLm1heChtLm9wZW5IZWlnaHQsbS5oZWFkZXJIZWlnaHQpKSxULmRpcmVjdGlvbj1vLmRpcmVjdGlvbixhJiYodS5zaXplKCk/ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPWkuZGlyZWN0aW9uLHU9InVwIj09PWN8fCJkb3duIj09PWMsaD1pLl9kaW1zLHA9aS5hY3RpdmU7aWYodSlmb3Iocz0wLGw9MDtsPHA7bCsrKXMrPWguaGVpZ2h0c1tsXStmLmdhcEJ1dHRvbjtlbHNlIGZvcihvPTAsbD0wO2w8cDtsKyspbys9aC53aWR0aHNbbF0rZi5nYXBCdXR0b247bi5lbmFibGUoYSxvLHMpLG4uaGJhciYmbi5oYmFyLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIik7bi52YmFyJiZuLnZiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKX0oMCwwLDAsYSxvLFQpOmZ1bmN0aW9uKHQpe3ZhciBlPSEhdC5oYmFyLHI9ISF0LnZiYXI7ZSYmdC5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSk7ciYmdC52YmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtyPSExLGV8fHQuZGlzYWJsZSgpfSl9KGEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3QuY2FsbCh4LGUpLmNhbGwoYixlLHIsbil9ZnVuY3Rpb24geCh0LGUpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYuaXRlbVJlY3RDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHtyeDpmLnJ4LHJ5OmYucnksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5jYWxsKGEuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLGYuaXRlbVRleHRDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cih7InRleHQtYW5jaG9yIjoic3RhcnQiLCJkYXRhLW5vdGV4IjoxfSl9KSxhPXIubGFiZWwsYz1uLl9mdWxsTGF5b3V0Lm1ldGE7YyYmKGE9cy50ZW1wbGF0ZVN0cmluZyhhLHttZXRhOmN9KSksaS5jYWxsKG8uZm9udCxlLmZvbnQpLnRleHQoYSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxuKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZS5hY3RpdmU7dC5lYWNoKGZ1bmN0aW9uKHQsaSl7dmFyIG89bi5zZWxlY3QodGhpcyk7aT09PXImJmUuc2hvd2FjdGl2ZSYmby5zZWxlY3QoInJlY3QuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxmLmFjdGl2ZUNvbG9yKX0pfWZ1bmN0aW9uIHcodCl7dC5zZWxlY3QoInJlY3QuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxmLmhvdmVyQ29sb3IpfWZ1bmN0aW9uIGsodCxlKXt0LnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGUuYmdjb2xvcil9ZnVuY3Rpb24gVCh0LGUpe3ZhciByPWUuX2RpbXM9e3dpZHRoMTowLGhlaWdodDE6MCxoZWlnaHRzOltdLHdpZHRoczpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCxvcGVuV2lkdGg6MCxvcGVuSGVpZ2h0OjAsbHg6MCxseTowfSxhPW8udGVzdGVyLnNlbGVjdEFsbCgiZy4iK2YuZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGUuYnV0dG9ucykpO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuZHJvcGRvd25CdXR0b25DbGFzc05hbWUsITApO3ZhciBjPS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKGUuZGlyZWN0aW9uKTthLmVhY2goZnVuY3Rpb24oaSxhKXt2YXIgcz1uLnNlbGVjdCh0aGlzKTtzLmNhbGwoeSxlLGksdCk7dmFyIGg9cy5zZWxlY3QoIi4iK2YuaXRlbVRleHRDbGFzc05hbWUpLHA9aC5ub2RlKCkmJm8uYkJveChoLm5vZGUoKSkud2lkdGgsZD1NYXRoLm1heChwK2YudGV4dFBhZFgsZi5taW5XaWR0aCksZz1lLmZvbnQuc2l6ZSp1LHY9bC5saW5lQ291bnQoaCksbT1NYXRoLm1heChnKnYsZi5taW5IZWlnaHQpK2YudGV4dE9mZnNldFk7bT1NYXRoLmNlaWwobSksZD1NYXRoLmNlaWwoZCksci53aWR0aHNbYV09ZCxyLmhlaWdodHNbYV09bSxyLmhlaWdodDE9TWF0aC5tYXgoci5oZWlnaHQxLG0pLHIud2lkdGgxPU1hdGgubWF4KHIud2lkdGgxLGQpLGM/KHIudG90YWxXaWR0aD1NYXRoLm1heChyLnRvdGFsV2lkdGgsZCksci5vcGVuV2lkdGg9ci50b3RhbFdpZHRoLHIudG90YWxIZWlnaHQrPW0rZi5nYXBCdXR0b24sci5vcGVuSGVpZ2h0Kz1tK2YuZ2FwQnV0dG9uKTooci50b3RhbFdpZHRoKz1kK2YuZ2FwQnV0dG9uLHIub3BlbldpZHRoKz1kK2YuZ2FwQnV0dG9uLHIudG90YWxIZWlnaHQ9TWF0aC5tYXgoci50b3RhbEhlaWdodCxtKSxyLm9wZW5IZWlnaHQ9ci50b3RhbEhlaWdodCl9KSxjP3IudG90YWxIZWlnaHQtPWYuZ2FwQnV0dG9uOnIudG90YWxXaWR0aC09Zi5nYXBCdXR0b24sci5oZWFkZXJXaWR0aD1yLndpZHRoMStmLmFycm93UGFkWCxyLmhlYWRlckhlaWdodD1yLmhlaWdodDEsImRyb3Bkb3duIj09PWUudHlwZSYmKGM/KHIud2lkdGgxKz1mLmFycm93UGFkWCxyLnRvdGFsSGVpZ2h0PXIuaGVpZ2h0MSk6ci50b3RhbFdpZHRoPXIud2lkdGgxLHIudG90YWxXaWR0aCs9Zi5hcnJvd1BhZFgpLGEucmVtb3ZlKCk7dmFyIGg9ci50b3RhbFdpZHRoK2UucGFkLmwrZS5wYWQucixwPXIudG90YWxIZWlnaHQrZS5wYWQudCtlLnBhZC5iLGQ9dC5fZnVsbExheW91dC5fc2l6ZTtyLmx4PWQubCtkLncqZS54LHIubHk9ZC50K2QuaCooMS1lLnkpO3ZhciBnPSJsZWZ0IjtzLmlzUmlnaHRBbmNob3IoZSkmJihyLmx4LT1oLGc9InJpZ2h0Iikscy5pc0NlbnRlckFuY2hvcihlKSYmKHIubHgtPWgvMixnPSJjZW50ZXIiKTt2YXIgdj0idG9wIjtzLmlzQm90dG9tQW5jaG9yKGUpJiYoci5seS09cCx2PSJib3R0b20iKSxzLmlzTWlkZGxlQW5jaG9yKGUpJiYoci5seS09cC8yLHY9Im1pZGRsZSIpLHIudG90YWxXaWR0aD1NYXRoLmNlaWwoci50b3RhbFdpZHRoKSxyLnRvdGFsSGVpZ2h0PU1hdGguY2VpbChyLnRvdGFsSGVpZ2h0KSxyLmx4PU1hdGgucm91bmQoci5seCksci5seT1NYXRoLnJvdW5kKHIubHkpLGkuYXV0b01hcmdpbih0LEEoZSkse3g6ZS54LHk6ZS55LGw6aCooe3JpZ2h0OjEsY2VudGVyOi41fVtnXXx8MCkscjpoKih7bGVmdDoxLGNlbnRlcjouNX1bZ118fDApLGI6cCooe3RvcDoxLG1pZGRsZTouNX1bdl18fDApLHQ6cCooe2JvdHRvbToxLG1pZGRsZTouNX1bdl18fDApfSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gZi5hdXRvTWFyZ2luSWRSb290K3QuX2luZGV4fWZ1bmN0aW9uIE0odCxlLHIsbil7bj1ufHx7fTt2YXIgaT10LnNlbGVjdCgiLiIrZi5pdGVtUmVjdENsYXNzTmFtZSksYT10LnNlbGVjdCgiLiIrZi5pdGVtVGV4dENsYXNzTmFtZSkscz1lLmJvcmRlcndpZHRoLGM9ci5pbmRleCxoPWUuX2RpbXM7by5zZXRUcmFuc2xhdGUodCxzK3IueCxzK3IueSk7dmFyIHA9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pLGQ9bi5oZWlnaHR8fChwP2guaGVpZ2h0c1tjXTpoLmhlaWdodDEpO2kuYXR0cih7eDowLHk6MCx3aWR0aDpuLndpZHRofHwocD9oLndpZHRoMTpoLndpZHRoc1tjXSksaGVpZ2h0OmR9KTt2YXIgZz1lLmZvbnQuc2l6ZSp1LHY9KGwubGluZUNvdW50KGEpLTEpKmcvMjtsLnBvc2l0aW9uVGV4dChhLGYudGV4dE9mZnNldFgsZC8yLXYrZi50ZXh0T2Zmc2V0WSkscD9yLnkrPWguaGVpZ2h0c1tjXStyLnlQYWQ6ci54Kz1oLndpZHRoc1tjXStyLnhQYWQsci5pbmRleCsrfWZ1bmN0aW9uIFModCxlKXt0LmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSxlfHwiLTEiKS5zZWxlY3RBbGwoImcuIitmLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5yZW1vdmUoKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXMuZmlsdGVyVmlzaWJsZShlW2YubmFtZV0pO2Z1bmN0aW9uIGEoZSl7aS5hdXRvTWFyZ2luKHQsQShlKSl9dmFyIG89ZS5fbWVudWxheWVyLnNlbGVjdEFsbCgiZy4iK2YuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtpZihvLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKSxvLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrZi5oZWFkZXJHcm91cENsYXNzTmFtZSkuZWFjaChhKX0pLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9by5zZWxlY3RBbGwoImcuIitmLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIscCk7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5oZWFkZXJHcm91cENsYXNzTmFtZSwhMCk7Zm9yKHZhciBjPXMuZW5zdXJlU2luZ2xlKG8sImciLGYuZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSksdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgeT1yW3VdO1QodCx5KX12YXIgeD0idXBkYXRlbWVudXMiK2UuX3VpZCxiPW5ldyBoKHQsYyx4KTtsLmVudGVyKCkuc2l6ZSgpJiYoYy5ub2RlKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjLm5vZGUoKSksYy5jYWxsKFMpKSxsLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKHQpe2MuY2FsbChTKSxhKHQpfSkucmVtb3ZlKCksbC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ImRyb3Bkb3duIj09PWUudHlwZT9jOm51bGw7aS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIodCxlLGUuYnV0dG9ucyxmdW5jdGlvbihuKXtnKHQsZSxlLmJ1dHRvbnNbbi5pbmRleF0scixhLGIsbi5pbmRleCwhMCl9KSwiZHJvcGRvd24iPT09ZS50eXBlPyh2KHQscixjLGIsZSksZChjLGUpJiZtKHQscixjLGIsZSkpOm0odCxyLG51bGwsbnVsbCxlKX0pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vY29sb3IiOjU3NywiLi4vZHJhd2luZyI6NTk4LCIuL2NvbnN0YW50cyI6NjY3LCIuL3Njcm9sbGJveCI6NjcxLGQzOjE1NH1dLDY3MDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs2NjRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL2F0dHJpYnV0ZXMiOjY2NiwiLi9jb25zdGFudHMiOjY2NywiLi9kZWZhdWx0cyI6NjY4LCIuL2RyYXciOjY2OSxkdXA6NjY0fV0sNjcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1zO3ZhciBuPXQoImQzIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi4vZHJhd2luZyIpLG89dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5nZD10LHRoaXMuY29udGFpbmVyPWUsdGhpcy5pZD1yLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLnRyYW5zbGF0ZVg9bnVsbCx0aGlzLnRyYW5zbGF0ZVk9bnVsbCx0aGlzLmhiYXI9bnVsbCx0aGlzLnZiYXI9bnVsbCx0aGlzLmJnPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxib3gtYmciKS5kYXRhKFswXSksdGhpcy5iZy5leGl0KCkub24oIi5kcmFnIixudWxsKS5vbigid2hlZWwiLG51bGwpLnJlbW92ZSgpLHRoaXMuYmcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxib3gtYmciLCEwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKHtvcGFjaXR5OjAseDowLHk6MCx3aWR0aDowLGhlaWdodDowfSl9cy5iYXJXaWR0aD0yLHMuYmFyTGVuZ3RoPTIwLHMuYmFyUmFkaXVzPTIscy5iYXJQYWQ9MSxzLmJhckNvbG9yPSIjODA4QkE0IixzLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXRoaXMuZ2QuX2Z1bGxMYXlvdXQsbD1vLndpZHRoLGM9by5oZWlnaHQ7dGhpcy5wb3NpdGlvbj10O3ZhciB1LGYsaCxwLGQ9dGhpcy5wb3NpdGlvbi5sLGc9dGhpcy5wb3NpdGlvbi53LHY9dGhpcy5wb3NpdGlvbi50LG09dGhpcy5wb3NpdGlvbi5oLHk9dGhpcy5wb3NpdGlvbi5kaXJlY3Rpb24seD0iZG93biI9PT15LGI9ImxlZnQiPT09eSxfPSJ1cCI9PT15LHc9ZyxrPW07eHx8Ynx8InJpZ2h0Ij09PXl8fF98fCh0aGlzLnBvc2l0aW9uLmRpcmVjdGlvbj0iZG93biIseD0hMCkseHx8Xz8oZj0odT1kKSt3LHg/KGg9dixrPShwPU1hdGgubWluKGgrayxjKSktaCk6az0ocD12K2spLShoPU1hdGgubWF4KHAtaywwKSkpOihwPShoPXYpK2ssYj93PShmPWQrdyktKHU9TWF0aC5tYXgoZi13LDApKToodT1kLHc9KGY9TWF0aC5taW4odSt3LGwpKS11KSksdGhpcy5fYm94PXtsOnUsdDpoLHc6dyxoOmt9O3ZhciBUPWc+dyxBPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsTT1zLmJhcldpZHRoKzIqcy5iYXJQYWQsUz1kLEU9dittO0UrTT5jJiYoRT1jLU0pO3ZhciBDPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItaG9yaXpvbnRhbCIpLmRhdGEoVD9bMF06W10pO0MuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksQy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci1ob3Jpem9udGFsIiwhMCkuY2FsbChpLmZpbGwscy5iYXJDb2xvciksVD8odGhpcy5oYmFyPUMuYXR0cih7cng6cy5iYXJSYWRpdXMscnk6cy5iYXJSYWRpdXMseDpTLHk6RSx3aWR0aDpBLGhlaWdodDpNfSksdGhpcy5faGJhclhNaW49UytBLzIsdGhpcy5faGJhclRyYW5zbGF0ZU1heD13LUEpOihkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCk7dmFyIEw9bT5rLHo9cy5iYXJXaWR0aCsyKnMuYmFyUGFkLE89cy5iYXJMZW5ndGgrMipzLmJhclBhZCxJPWQrZyxEPXY7SSt6PmwmJihJPWwteik7dmFyIFA9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci12ZXJ0aWNhbCIpLmRhdGEoTD9bMF06W10pO1AuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksUC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci12ZXJ0aWNhbCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLEw/KHRoaXMudmJhcj1QLmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6SSx5OkQsd2lkdGg6eixoZWlnaHQ6T30pLHRoaXMuX3ZiYXJZTWluPUQrTy8yLHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXg9ay1PKTooZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpO3ZhciBSPXRoaXMuaWQsRj11LS41LEI9TD9mK3orLjU6ZisuNSxOPWgtLjUsaj1UP3ArTSsuNTpwKy41LFY9by5fdG9wZGVmcy5zZWxlY3RBbGwoIiMiK1IpLmRhdGEoVHx8TD9bMF06W10pO2lmKFYuZXhpdCgpLnJlbW92ZSgpLFYuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLFIpLmFwcGVuZCgicmVjdCIpLFR8fEw/KHRoaXMuX2NsaXBSZWN0PVYuc2VsZWN0KCJyZWN0IikuYXR0cih7eDpNYXRoLmZsb29yKEYpLHk6TWF0aC5mbG9vcihOKSx3aWR0aDpNYXRoLmNlaWwoQiktTWF0aC5mbG9vcihGKSxoZWlnaHQ6TWF0aC5jZWlsKGopLU1hdGguZmxvb3IoTil9KSx0aGlzLmNvbnRhaW5lci5jYWxsKGEuc2V0Q2xpcFVybCxSLHRoaXMuZ2QpLHRoaXMuYmcuYXR0cih7eDpkLHk6dix3aWR0aDpnLGhlaWdodDptfSkpOih0aGlzLmJnLmF0dHIoe3dpZHRoOjAsaGVpZ2h0OjB9KSx0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChhLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSxUfHxMKXt2YXIgVT1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe24uZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKX0pLm9uKCJkcmFnIix0aGlzLl9vbkJveERyYWcuYmluZCh0aGlzKSk7dGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigid2hlZWwiLHRoaXMuX29uQm94V2hlZWwuYmluZCh0aGlzKSkub24oIi5kcmFnIixudWxsKS5jYWxsKFUpO3ZhciBxPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpLG4uZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZHJhZyIsdGhpcy5fb25CYXJEcmFnLmJpbmQodGhpcykpO1QmJnRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLmNhbGwocSksTCYmdGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChxKX10aGlzLnNldFRyYW5zbGF0ZShlLHIpfSxzLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7KHRoaXMuaGJhcnx8dGhpcy52YmFyKSYmKHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIi5kcmFnIixudWxsKS5jYWxsKGEuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLHRoaXMuaGJhciYmKHRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLHRoaXMuaGJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCksdGhpcy52YmFyJiYodGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCksdGhpcy52YmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX0scy5wcm90b3R5cGUuX29uQm94RHJhZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJih0LT1uLmV2ZW50LmR4KSx0aGlzLnZiYXImJihlLT1uLmV2ZW50LmR5KSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5fb25Cb3hXaGVlbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJih0Kz1uLmV2ZW50LmRlbHRhWSksdGhpcy52YmFyJiYoZSs9bi5ldmVudC5kZWx0YVkpLHRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLl9vbkJhckRyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7aWYodGhpcy5oYmFyKXt2YXIgcj10K3RoaXMuX2hiYXJYTWluLGk9cit0aGlzLl9oYmFyVHJhbnNsYXRlTWF4O3Q9KG8uY29uc3RyYWluKG4uZXZlbnQueCxyLGkpLXIpLyhpLXIpKih0aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94LncpfWlmKHRoaXMudmJhcil7dmFyIGE9ZSt0aGlzLl92YmFyWU1pbixzPWErdGhpcy5fdmJhclRyYW5zbGF0ZU1heDtlPShvLmNvbnN0cmFpbihuLmV2ZW50LnksYSxzKS1hKS8ocy1hKSoodGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oKX10aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94Lncsbj10aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94Lmg7aWYodD1vLmNvbnN0cmFpbih0fHwwLDAsciksZT1vLmNvbnN0cmFpbihlfHwwLDAsbiksdGhpcy50cmFuc2xhdGVYPXQsdGhpcy50cmFuc2xhdGVZPWUsdGhpcy5jb250YWluZXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0aGlzLl9ib3gubC10aGlzLnBvc2l0aW9uLmwtdCx0aGlzLl9ib3gudC10aGlzLnBvc2l0aW9uLnQtZSksdGhpcy5fY2xpcFJlY3QmJnRoaXMuX2NsaXBSZWN0LmF0dHIoe3g6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLmwrdC0uNSkseTpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24udCtlLS41KX0pLHRoaXMuaGJhcil7dmFyIGk9dC9yO3RoaXMuaGJhci5jYWxsKGEuc2V0VHJhbnNsYXRlLHQraSp0aGlzLl9oYmFyVHJhbnNsYXRlTWF4LGUpfWlmKHRoaXMudmJhcil7dmFyIHM9ZS9uO3RoaXMudmJhci5jYWxsKGEuc2V0VHJhbnNsYXRlLHQsZStzKnRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL2NvbG9yIjo1NzcsIi4uL2RyYXdpbmciOjU5OCxkMzoxNTR9XSw2NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtGUk9NX0JMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxGUk9NX1RMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjEsbWlkZGxlOi41LHRvcDowfSxGUk9NX0JSOntsZWZ0OjEsY2VudGVyOi41LHJpZ2h0OjAsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxMSU5FX1NQQUNJTkc6MS4zLENBUF9TSElGVDouNyxNSURfU0hJRlQ6LjM1LE9QUE9TSVRFX1NJREU6e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn19fSx7fV0sNjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q09NUEFSSVNPTl9PUFM6WyI9IiwiIT0iLCI8IiwiPj0iLCI+IiwiPD0iXSxDT01QQVJJU09OX09QUzI6WyI9IiwiPCIsIj49IiwiPiIsIjw9Il0sSU5URVJWQUxfT1BTOlsiW10iLCIoKSIsIlspIiwiKF0iLCJdWyIsIikoIiwiXSgiLCIpWyJdLFNFVF9PUFM6WyJ7fSIsIn17Il0sQ09OU1RSQUlOVF9SRURVQ1RJT046eyI9IjoiPSIsIjwiOiI8IiwiPD0iOiI8IiwiPiI6Ij4iLCI+PSI6Ij4iLCJbXSI6IltdIiwiKCkiOiJbXSIsIlspIjoiW10iLCIoXSI6IltdIiwiXVsiOiJdWyIsIikoIjoiXVsiLCJdKCI6Il1bIiwiKVsiOiJdWyJ9fX0se31dLDY3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NvbGlkOltbXSwwXSxkb3Q6W1suNSwxXSwyMDBdLGRhc2g6W1suNSwxXSw1MF0sbG9uZ2Rhc2g6W1suNSwxXSwxMF0sZGFzaGRvdDpbWy41LC42MjUsLjg3NSwxXSw1MF0sbG9uZ2Rhc2hkb3Q6W1suNSwuNywuOCwxXSwxMF19fSx7fV0sNjc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y2lyY2xlOiJcdTI1Y2YiLCJjaXJjbGUtb3BlbiI6Ilx1MjVjYiIsc3F1YXJlOiJcdTI1YTAiLCJzcXVhcmUtb3BlbiI6Ilx1MjVhMSIsZGlhbW9uZDoiXHUyNWM2IiwiZGlhbW9uZC1vcGVuIjoiXHUyNWM3Iixjcm9zczoiKyIseDoiXHUyNzRjIn19LHt9XSw2NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtTSE9XX1BMQUNFSE9MREVSOjEwMCxISURFX1BMQUNFSE9MREVSOjFlMyxEQkxDTElDS0RFTEFZOjMwMCxERVNFTEVDVERJTTouMn19LHt9XSw2Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCQUROVU06dm9pZCAwLEZQX1NBRkU6TnVtYmVyLk1BWF9WQUxVRS8xZTQsT05FQVZHWUVBUjozMTU1NzZlNSxPTkVBVkdNT05USDoyNjI5OGU1LE9ORURBWTo4NjRlNSxPTkVIT1VSOjM2ZTUsT05FTUlOOjZlNCxPTkVTRUM6MWUzLEVQT0NISkQ6MjQ0MDU4Ny41LEFMTU9TVF9FUVVBTDoxLTFlLTYsTE9HX0NMSVA6MTAsTUlOVVNfU0lHTjoiXHUyMjEyIn19LHt9XSw2Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci54bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLHIuc3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsci54bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsci5zdmdBdHRycz17eG1sbnM6ci5zdmcsInhtbG5zOnhsaW5rIjpyLnhsaW5rfX0se31dLDY3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnZlcnNpb249IjEuNDYuMSIsdCgiZXM2LXByb21pc2UiKS5wb2x5ZmlsbCgpLHQoIi4uL2J1aWxkL3Bsb3Rjc3MiKSx0KCIuL2ZvbnRzL21hdGhqYXhfY29uZmlnIikoKTtmb3IodmFyIG49dCgiLi9yZWdpc3RyeSIpLGk9ci5yZWdpc3Rlcj1uLnJlZ2lzdGVyLGE9dCgiLi9wbG90X2FwaSIpLG89T2JqZWN0LmtleXMoYSkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdOyJfIiE9PWwuY2hhckF0KDApJiYocltsXT1hW2xdKSxpKHttb2R1bGVUeXBlOiJhcGlNZXRob2QiLG5hbWU6bCxmbjphW2xdfSl9aSh0KCIuL3RyYWNlcy9zY2F0dGVyIikpLGkoW3QoIi4vY29tcG9uZW50cy9meCIpLHQoIi4vY29tcG9uZW50cy9sZWdlbmQiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCIpLHQoIi4vY29tcG9uZW50cy9zaGFwZXMiKSx0KCIuL2NvbXBvbmVudHMvaW1hZ2VzIiksdCgiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIiksdCgiLi9jb21wb25lbnRzL3NsaWRlcnMiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXIiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvciIpLHQoIi4vY29tcG9uZW50cy9ncmlkIiksdCgiLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLHQoIi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIildKSxpKFt0KCIuL2xvY2FsZS1lbiIpLHQoIi4vbG9jYWxlLWVuLXVzIildKSxyLkljb25zPXQoIi4uL2J1aWxkL3Bsb3RpY29uIiksci5QbG90cz10KCIuL3Bsb3RzL3Bsb3RzIiksci5GeD10KCIuL2NvbXBvbmVudHMvZngiKSxyLlNuYXBzaG90PXQoIi4vc25hcHNob3QiKSxyLlBsb3RTY2hlbWE9dCgiLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLHIuUXVldWU9dCgiLi9saWIvcXVldWUiKSxyLmQzPXQoImQzIil9LHsiLi4vYnVpbGQvcGxvdGNzcyI6MSwiLi4vYnVpbGQvcGxvdGljb24iOjIsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyI6NTY4LCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCI6NTczLCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NTg5LCIuL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2MDQsIi4vY29tcG9uZW50cy9meCI6NjE2LCIuL2NvbXBvbmVudHMvZ3JpZCI6NjIwLCIuL2NvbXBvbmVudHMvaW1hZ2VzIjo2MjUsIi4vY29tcG9uZW50cy9sZWdlbmQiOjYzMywiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiOjY0NCwiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIjo2NTEsIi4vY29tcG9uZW50cy9zaGFwZXMiOjY1OSwiLi9jb21wb25lbnRzL3NsaWRlcnMiOjY2NCwiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIjo2NzAsIi4vZm9udHMvbWF0aGpheF9jb25maWciOjY4MCwiLi9saWIvcXVldWUiOjcxNSwiLi9sb2NhbGUtZW4iOjcyOSwiLi9sb2NhbGUtZW4tdXMiOjcyOCwiLi9wbG90X2FwaSI6NzMzLCIuL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3MzcsIi4vcGxvdHMvcGxvdHMiOjgxMCwiLi9yZWdpc3RyeSI6ODI5LCIuL3NuYXBzaG90Ijo4MzQsIi4vdHJhY2VzL3NjYXR0ZXIiOjEwNjMsZDM6MTU0LCJlczYtcHJvbWlzZSI6MjEwfV0sNjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgTWF0aEpheCYmKCJsb2NhbCIhPT0od2luZG93LlBsb3RseUNvbmZpZ3x8e30pLk1hdGhKYXhDb25maWcmJihNYXRoSmF4Lkh1Yi5Db25maWcoe21lc3NhZ2VTdHlsZToibm9uZSIsc2tpcFN0YXJ0dXBUeXBlc2V0OiEwLGRpc3BsYXlBbGlnbjoibGVmdCIsdGV4MmpheDp7aW5saW5lTWF0aDpbWyIkIiwiJCJdLFsiXFwoIiwiXFwpIl1dfX0pLE1hdGhKYXguSHViLkNvbmZpZ3VyZWQoKSkpfX0se31dLDY4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzTGVmdEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4ibGVmdCI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54PD0xLzN9LHIuaXNDZW50ZXJBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuImNlbnRlciI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54PjEvMyYmdC54PDIvM30sci5pc1JpZ2h0QW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJyaWdodCI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54Pj0yLzN9LHIuaXNUb3BBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuInRvcCI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55Pj0yLzN9LHIuaXNNaWRkbGVBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIm1pZGRsZSI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55PjEvMyYmdC55PDIvM30sci5pc0JvdHRvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4iYm90dG9tIj09PXQueWFuY2hvcnx8ImF1dG8iPT09dC55YW5jaG9yJiZ0Lnk8PTEvM319LHt9XSw2ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tb2QiKSxpPW4ubW9kLGE9bi5tb2RIYWxmLG89TWF0aC5QSSxzPTIqbztmdW5jdGlvbiBsKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXRbMF0pPnMtMWUtMTR9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBhKGUtdCxzKX1mdW5jdGlvbiB1KHQsZSl7aWYobChlKSlyZXR1cm4hMDt2YXIgcixuO2VbMF08ZVsxXT8ocj1lWzBdLG49ZVsxXSk6KHI9ZVsxXSxuPWVbMF0pLChyPWkocixzKSk+KG49aShuLHMpKSYmKG4rPXMpO3ZhciBhPWkodCxzKSxvPWErcztyZXR1cm4gYT49ciYmYTw9bnx8bz49ciYmbzw9bn1mdW5jdGlvbiBmKHQsZSxyLG4saSxhLGMpe2k9aXx8MCxhPWF8fDA7dmFyIHUsZixoLHAsZCxnPWwoW3Isbl0pO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKStpLGEtdCpNYXRoLnNpbihlKV19Zz8odT0wLGY9byxoPXMpOnI8bj8odT1yLGg9bik6KHU9bixoPXIpLHQ8ZT8ocD10LGQ9ZSk6KHA9ZSxkPXQpO3ZhciBtLHk9TWF0aC5hYnMoaC11KTw9bz8wOjE7ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIkEiK1t0LHRdKyIgIitbMCx5LHJdKyIgIit2KHQsZSl9cmV0dXJuIGc/bT1udWxsPT09cD8iTSIrdihkLHUpK3goZCxmLDApK3goZCxoLDApKyJaIjoiTSIrdihwLHUpK3gocCxmLDApK3gocCxoLDApKyJaTSIrdihkLHUpK3goZCxmLDEpK3goZCxoLDEpKyJaIjpudWxsPT09cD8obT0iTSIrdihkLHUpK3goZCxoLDApLGMmJihtKz0iTDAsMFoiKSk6bT0iTSIrdihwLHUpKyJMIit2KGQsdSkreChkLGgsMCkrIkwiK3YocCxoKSt4KHAsdSwxKSsiWiIsbX1lLmV4cG9ydHM9e2RlZzJyYWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQvMTgwKm99LHJhZDJkZWc6ZnVuY3Rpb24odCl7cmV0dXJuIHQvbyoxODB9LGFuZ2xlRGVsdGE6YyxhbmdsZURpc3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnMoYyh0LGUpKX0saXNGdWxsQ2lyY2xlOmwsaXNBbmdsZUluc2lkZVNlY3Rvcjp1LGlzUHRJbnNpZGVTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuISF1KGUsbikmJihyWzBdPHJbMV0/KGk9clswXSxhPXJbMV0pOihpPXJbMV0sYT1yWzBdKSx0Pj1pJiZ0PD1hKTt2YXIgaSxhfSxwYXRoQXJjOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGYobnVsbCx0LGUscixuLGksMCl9LHBhdGhTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gZihudWxsLHQsZSxyLG4saSwxKX0scGF0aEFubnVsdXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBmKHQsZSxyLG4saSxhLDEpfX19LHsiLi9tb2QiOjcwN31dLDY4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1BcnJheS5pc0FycmF5LGk9InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyOntpc1ZpZXc6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGE9InVuZGVmaW5lZCI9PXR5cGVvZiBEYXRhVmlldz9mdW5jdGlvbigpe306RGF0YVZpZXc7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaS5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIGEpfWZ1bmN0aW9uIHModCl7cmV0dXJuIG4odCl8fG8odCl9ZnVuY3Rpb24gbCh0LGUscil7aWYocyh0KSl7aWYocyh0WzBdKSl7Zm9yKHZhciBuPXIsaT0wO2k8dC5sZW5ndGg7aSsrKW49ZShuLHRbaV0ubGVuZ3RoKTtyZXR1cm4gbn1yZXR1cm4gdC5sZW5ndGh9cmV0dXJuIDB9ci5pc1R5cGVkQXJyYXk9byxyLmlzQXJyYXlPclR5cGVkQXJyYXk9cyxyLmlzQXJyYXkxRD1mdW5jdGlvbih0KXtyZXR1cm4hcyh0WzBdKX0sci5lbnN1cmVBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQpfHwodD1bXSksdC5sZW5ndGg9ZSx0fSxyLmNvbmNhdD1mdW5jdGlvbigpe3ZhciB0LGUscixpLGEsbyxzLGwsYz1bXSx1PSEwLGY9MDtmb3Iocj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspKG89KGk9YXJndW1lbnRzW3JdKS5sZW5ndGgpJiYoZT9jLnB1c2goaSk6KGU9aSxhPW8pLG4oaSk/dD0hMToodT0hMSxmP3QhPT1pLmNvbnN0cnVjdG9yJiYodD0hMSk6dD1pLmNvbnN0cnVjdG9yKSxmKz1vKTtpZighZilyZXR1cm5bXTtpZighYy5sZW5ndGgpcmV0dXJuIGU7aWYodSlyZXR1cm4gZS5jb25jYXQuYXBwbHkoZSxjKTtpZih0KXtmb3IoKHM9bmV3IHQoZikpLnNldChlKSxyPTA7cjxjLmxlbmd0aDtyKyspaT1jW3JdLHMuc2V0KGksYSksYSs9aS5sZW5ndGg7cmV0dXJuIHN9Zm9yKHM9bmV3IEFycmF5KGYpLGw9MDtsPGUubGVuZ3RoO2wrKylzW2xdPWVbbF07Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKyl7Zm9yKGk9Y1tyXSxsPTA7bDxpLmxlbmd0aDtsKyspc1thK2xdPWlbbF07YSs9bH1yZXR1cm4gc30sci5tYXhSb3dMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxNYXRoLm1heCwwKX0sci5taW5Sb3dMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxNYXRoLm1pbiwxLzApfX0se31dLDY4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPS9eWyciJSwkI1xzJ10rfFssIF18WyciJSwkI1xzJ10rJC9nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXQucmVwbGFjZShhLCIiKSksbih0KT9OdW1iZXIodCk6aX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2dsY2FudmFzJiZlLl9nbGNhbnZhcy5zaXplKCkmJmUuX2dsY2FudmFzLmVhY2goZnVuY3Rpb24odCl7dC5yZWdsJiZ0LnJlZ2wuY2xlYXIoe2NvbG9yOiEwLGRlcHRoOiEwfSl9KX19LHt9XSw2ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXImJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSxkZWxldGUgdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcil9fSx7fV0sNjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIikscz10KCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0sbD10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGM9dCgiLi9yZWdleCIpLmNvdW50ZXIsdT10KCIuL21vZCIpLm1vZEhhbGYsZj10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiBoKHQsZSl7dmFyIG49ci52YWxPYmplY3RNZXRhW2UudmFsVHlwZV07aWYoZS5hcnJheU9rJiZmKHQpKXJldHVybiEwO2lmKG4udmFsaWRhdGVGdW5jdGlvbilyZXR1cm4gbi52YWxpZGF0ZUZ1bmN0aW9uKHQsZSk7dmFyIGk9e30sYT1pLG89e3NldDpmdW5jdGlvbih0KXthPXR9fTtyZXR1cm4gbi5jb2VyY2VGdW5jdGlvbih0LG8saSxlKSxhIT09aX1yLnZhbE9iamVjdE1ldGE9e2RhdGFfYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtmKHQpP2Uuc2V0KHQpOnZvaWQgMCE9PXImJmUuc2V0KHIpfX0sZW51bWVyYXRlZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7bi5jb2VyY2VOdW1iZXImJih0PSt0KSwtMT09PW4udmFsdWVzLmluZGV4T2YodCk/ZS5zZXQocik6ZS5zZXQodCl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtlLmNvZXJjZU51bWJlciYmKHQ9K3QpO2Zvcih2YXIgcj1lLnZhbHVlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPVN0cmluZyhyW25dKTtpZigiLyI9PT1pLmNoYXJBdCgwKSYmIi8iPT09aS5jaGFyQXQoaS5sZW5ndGgtMSkpe2lmKG5ldyBSZWdFeHAoaS5zdWJzdHIoMSxpLmxlbmd0aC0yKSkudGVzdCh0KSlyZXR1cm4hMH1lbHNlIGlmKHQ9PT1yW25dKXJldHVybiEwfXJldHVybiExfX0sYm9vbGVhbjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpeyEwPT09dHx8ITE9PT10P2Uuc2V0KHQpOmUuc2V0KHIpfX0sbnVtYmVyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXshbih0KXx8dm9pZCAwIT09aS5taW4mJnQ8aS5taW58fHZvaWQgMCE9PWkubWF4JiZ0PmkubWF4P2Uuc2V0KHIpOmUuc2V0KCt0KX19LGludGVnZXI6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLGkpe3QlMXx8IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxzdHJpbmc6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIGk9Im51bWJlciI9PXR5cGVvZiB0OyEwIT09bi5zdHJpY3QmJmk/ZS5zZXQoU3RyaW5nKHQpKTplLnNldChyKX1lbHNlIG4ubm9CbGFuayYmIXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxjb2xvcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2kodCkuaXNWYWxpZCgpP2Uuc2V0KHQpOmUuc2V0KHIpfX0sY29sb3JsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIGkodCkuaXNWYWxpZCgpfSk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcnNjYWxlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ZS5zZXQoby5nZXQodCxyKSl9fSxhbmdsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpeyJhdXRvIj09PXQ/ZS5zZXQoImF1dG8iKTpuKHQpP2Uuc2V0KHUoK3QsMzYwKSk6ZS5zZXQocil9fSxzdWJwbG90aWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4ucmVnZXh8fGMocik7InN0cmluZyI9PXR5cGVvZiB0JiZpLnRlc3QodCk/ZS5zZXQodCk6ZS5zZXQocil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmRmbHQ7cmV0dXJuIHQ9PT1yfHwic3RyaW5nIj09dHlwZW9mIHQmJiEhYyhyKS50ZXN0KHQpfX0sZmxhZ2xpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdClpZigtMT09PShuLmV4dHJhc3x8W10pLmluZGV4T2YodCkpe2Zvcih2YXIgaT10LnNwbGl0KCIrIiksYT0wO2E8aS5sZW5ndGg7KXt2YXIgbz1pW2FdOy0xPT09bi5mbGFncy5pbmRleE9mKG8pfHxpLmluZGV4T2Yobyk8YT9pLnNwbGljZShhLDEpOmErK31pLmxlbmd0aD9lLnNldChpLmpvaW4oIisiKSk6ZS5zZXQocil9ZWxzZSBlLnNldCh0KTtlbHNlIGUuc2V0KHIpfX0sYW55Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dm9pZCAwPT09dD9lLnNldChyKTplLnNldCh0KX19LGluZm9fYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxuLGkpe2Z1bmN0aW9uIGEodCxlLG4pe3ZhciBpLGE9e3NldDpmdW5jdGlvbih0KXtpPXR9fTtyZXR1cm4gdm9pZCAwPT09biYmKG49ZS5kZmx0KSxyLnZhbE9iamVjdE1ldGFbZS52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbih0LGEsbixlKSxpfXZhciBvPTI9PT1pLmRpbWVuc2lvbnN8fCIxLTIiPT09aS5kaW1lbnNpb25zJiZBcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbMF0pO2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBzLGwsYyx1LGYsaCxwPWkuaXRlbXMsZD1bXSxnPUFycmF5LmlzQXJyYXkocCksdj1nJiZvJiZBcnJheS5pc0FycmF5KHBbMF0pLG09byYmZyYmIXYseT1nJiYhbT9wLmxlbmd0aDp0Lmxlbmd0aDtpZihuPUFycmF5LmlzQXJyYXkobik/bjpbXSxvKWZvcihzPTA7czx5O3MrKylmb3IoZFtzXT1bXSxjPUFycmF5LmlzQXJyYXkodFtzXSk/dFtzXTpbXSxmPW0/cC5sZW5ndGg6Zz9wW3NdLmxlbmd0aDpjLmxlbmd0aCxsPTA7bDxmO2wrKyl1PW0/cFtsXTpnP3Bbc11bbF06cCx2b2lkIDAhPT0oaD1hKGNbbF0sdSwobltzXXx8W10pW2xdKSkmJihkW3NdW2xdPWgpO2Vsc2UgZm9yKHM9MDtzPHk7cysrKXZvaWQgMCE9PShoPWEodFtzXSxnP3Bbc106cCxuW3NdKSkmJihkW3NdPWgpO2Uuc2V0KGQpfWVsc2UgZS5zZXQobil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgcj1lLml0ZW1zLG49QXJyYXkuaXNBcnJheShyKSxpPTI9PT1lLmRpbWVuc2lvbnM7aWYoIWUuZnJlZUxlbmd0aCYmdC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihpKXtpZighQXJyYXkuaXNBcnJheSh0W2FdKXx8IWUuZnJlZUxlbmd0aCYmdFthXS5sZW5ndGghPT1yW2FdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHRbYV0ubGVuZ3RoO28rKylpZighaCh0W2FdW29dLG4/clthXVtvXTpyKSlyZXR1cm4hMX1lbHNlIGlmKCFoKHRbYV0sbj9yW2FdOnIpKXJldHVybiExO3JldHVybiEwfX19LHIuY29lcmNlPWZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89bChuLGkpLmdldCgpLHM9bCh0LGkpLGM9bChlLGkpLHU9cy5nZXQoKSxwPWUuX3RlbXBsYXRlO2lmKHZvaWQgMD09PXUmJnAmJih1PWwocCxpKS5nZXQoKSxwPTApLHZvaWQgMD09PWEmJihhPW8uZGZsdCksby5hcnJheU9rJiZmKHUpKXJldHVybiBjLnNldCh1KSx1O3ZhciBkPXIudmFsT2JqZWN0TWV0YVtvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uO2QodSxjLGEsbyk7dmFyIGc9Yy5nZXQoKTtyZXR1cm4gcCYmZz09PWEmJiFoKHUsbykmJihkKHU9bChwLGkpLmdldCgpLGMsYSxvKSxnPWMuZ2V0KCkpLGd9LHIuY29lcmNlMj1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPWwodCxpKSxzPXIuY29lcmNlKHQsZSxuLGksYSksYz1vLmdldCgpO3JldHVybiBudWxsIT1jJiZzfSxyLmNvZXJjZUZvbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O3JldHVybiByPXJ8fHt9LG4uZmFtaWx5PXQoZSsiLmZhbWlseSIsci5mYW1pbHkpLG4uc2l6ZT10KGUrIi5zaXplIixyLnNpemUpLG4uY29sb3I9dChlKyIuY29sb3IiLHIuY29sb3IpLG59LHIuY29lcmNlSG92ZXJpbmZvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxvPWUuX21vZHVsZS5hdHRyaWJ1dGVzLHM9by5ob3ZlcmluZm8/bzphLGw9cy5ob3ZlcmluZm87aWYoMT09PW4uX2RhdGFMZW5ndGgpe3ZhciBjPSJhbGwiPT09bC5kZmx0P2wuZmxhZ3Muc2xpY2UoKTpsLmRmbHQuc3BsaXQoIisiKTtjLnNwbGljZShjLmluZGV4T2YoIm5hbWUiKSwxKSxpPWMuam9pbigiKyIpfXJldHVybiByLmNvZXJjZSh0LGUscywiaG92ZXJpbmZvIixpKX0sci5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7aWYodC5tYXJrZXIpe3ZhciByLG4saT10Lm1hcmtlci5vcGFjaXR5O2lmKHZvaWQgMCE9PWkpZihpKXx8dC5zZWxlY3RlZHx8dC51bnNlbGVjdGVkfHwocj1pLG49cyppKSxlKCJzZWxlY3RlZC5tYXJrZXIub3BhY2l0eSIsciksZSgidW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSIsbil9fSxyLnZhbGlkYXRlPWh9LHsiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyI6NTkyLCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo2NzYsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi9hcnJheSI6NjgzLCIuL21vZCI6NzA3LCIuL25lc3RlZF9wcm9wZXJ0eSI6NzA4LCIuL3JlZ2V4Ijo3MTYsImZhc3QtaXNudW1lcmljIjoyMjEsdGlueWNvbG9yMjo1MjF9XSw2ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhPXQoImQzIiksbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi9sb2dnZXJzIiksbD10KCIuL21vZCIpLm1vZCxjPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKSx1PWMuQkFETlVNLGY9Yy5PTkVEQVksaD1jLk9ORUhPVVIscD1jLk9ORU1JTixkPWMuT05FU0VDLGc9Yy5FUE9DSEpELHY9dCgiLi4vcmVnaXN0cnkiKSxtPWEudGltZS5mb3JtYXQudXRjLHk9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkKSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkOj9cZFxkKT8pPyk/KT8pP1xzKiQvbSx4PS9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZGk/KSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkOj9cZFxkKT8pPyk/KT8pP1xzKiQvbSxiPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS03MDtmdW5jdGlvbiBfKHQpe3JldHVybiB0JiZ2LmNvbXBvbmVudHNSZWdpc3RyeS5jYWxlbmRhcnMmJiJzdHJpbmciPT10eXBlb2YgdCYmImdyZWdvcmlhbiIhPT10fWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gU3RyaW5nKHQrTWF0aC5wb3coMTAsZSkpLnN1YnN0cigxKX1yLmRhdGVUaWNrMD1mdW5jdGlvbih0LGUpe3JldHVybiBfKHQpP2U/di5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkNBTk9OSUNBTF9TVU5EQVkiKVt0XTp2LmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1RJQ0siKVt0XTplPyIyMDAwLTAxLTAyIjoiMjAwMC0wMS0wMSJ9LHIuZGZsdFJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBfKHQpP3YuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJERkxUUkFOR0UiKVt0XTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl19LHIuaXNKU0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0VGltZX0sci5kYXRlVGltZTJtcz1mdW5jdGlvbih0LGUpe2lmKHIuaXNKU0RhdGUodCkpe3ZhciBhPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpwLG89KHQuZ2V0VVRDTWludXRlcygpLXQuZ2V0TWludXRlcygpKSpwKyh0LmdldFVUQ1NlY29uZHMoKS10LmdldFNlY29uZHMoKSkqZCsodC5nZXRVVENNaWxsaXNlY29uZHMoKS10LmdldE1pbGxpc2Vjb25kcygpKTtpZihvKXt2YXIgcz0zKnA7YT1hLXMvMitsKG8tYStzLzIscyl9cmV0dXJuKHQ9TnVtYmVyKHQpLWEpPj1uJiZ0PD1pP3Q6dX1pZigic3RyaW5nIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gdTt0PVN0cmluZyh0KTt2YXIgYz1fKGUpLG09dC5jaGFyQXQoMCk7IWN8fCJHIiE9PW0mJiJnIiE9PW18fCh0PXQuc3Vic3RyKDEpLGU9IiIpO3ZhciB3PWMmJiJjaGluZXNlIj09PWUuc3Vic3RyKDAsNyksaz10Lm1hdGNoKHc/eDp5KTtpZighaylyZXR1cm4gdTt2YXIgVD1rWzFdLEE9a1szXXx8IjEiLE09TnVtYmVyKGtbNV18fDEpLFM9TnVtYmVyKGtbN118fDApLEU9TnVtYmVyKGtbOV18fDApLEM9TnVtYmVyKGtbMTFdfHwwKTtpZihjKXtpZigyPT09VC5sZW5ndGgpcmV0dXJuIHU7dmFyIEw7VD1OdW1iZXIoVCk7dHJ5e3ZhciB6PXYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKTtpZih3KXt2YXIgTz0iaSI9PT1BLmNoYXJBdChBLmxlbmd0aC0xKTtBPXBhcnNlSW50KEEsMTApLEw9ei5uZXdEYXRlKFQsei50b01vbnRoSW5kZXgoVCxBLE8pLE0pfWVsc2UgTD16Lm5ld0RhdGUoVCxOdW1iZXIoQSksTSl9Y2F0Y2godCl7cmV0dXJuIHV9cmV0dXJuIEw/KEwudG9KRCgpLWcpKmYrUypoK0UqcCtDKmQ6dX1UPTI9PT1ULmxlbmd0aD8oTnVtYmVyKFQpKzJlMy1iKSUxMDArYjpOdW1iZXIoVCksQS09MTt2YXIgST1uZXcgRGF0ZShEYXRlLlVUQygyZTMsQSxNLFMsRSkpO3JldHVybiBJLnNldFVUQ0Z1bGxZZWFyKFQpLEkuZ2V0VVRDTW9udGgoKSE9PUE/dTpJLmdldFVUQ0RhdGUoKSE9PU0/dTpJLmdldFRpbWUoKStDKmR9LG49ci5NSU5fTVM9ci5kYXRlVGltZTJtcygiLTk5OTkiKSxpPXIuTUFYX01TPXIuZGF0ZVRpbWUybXMoIjk5OTktMTItMzEgMjM6NTk6NTkuOTk5OSIpLHIuaXNEYXRlVGltZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmRhdGVUaW1lMm1zKHQsZSkhPT11fTt2YXIgaz05MCpmLFQ9MypoLEE9NSpwO2Z1bmN0aW9uIE0odCxlLHIsbixpKXtpZigoZXx8cnx8bnx8aSkmJih0Kz0iICIrdyhlLDIpKyI6Iit3KHIsMiksKG58fGkpJiYodCs9IjoiK3cobiwyKSxpKSkpe2Zvcih2YXIgYT00O2klMTA9PTA7KWEtPTEsaS89MTA7dCs9Ii4iK3coaSxhKX1yZXR1cm4gdH1yLm1zMkRhdGVUaW1lPWZ1bmN0aW9uKHQsZSxyKXtpZigibnVtYmVyIiE9dHlwZW9mIHR8fCEodD49biYmdDw9aSkpcmV0dXJuIHU7ZXx8KGU9MCk7dmFyIGEsbyxzLGMseSx4LGI9TWF0aC5mbG9vcigxMCpsKHQrLjA1LDEpKSx3PU1hdGgucm91bmQodC1iLzEwKTtpZihfKHIpKXt2YXIgUz1NYXRoLmZsb29yKHcvZikrZyxFPU1hdGguZmxvb3IobCh0LGYpKTt0cnl7YT12LmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikocikuZnJvbUpEKFMpLmZvcm1hdERhdGUoInl5eXktbW0tZGQiKX1jYXRjaCh0KXthPW0oIkclWS0lbS0lZCIpKG5ldyBEYXRlKHcpKX1pZigiLSI9PT1hLmNoYXJBdCgwKSlmb3IoO2EubGVuZ3RoPDExOylhPSItMCIrYS5zdWJzdHIoMSk7ZWxzZSBmb3IoO2EubGVuZ3RoPDEwOylhPSIwIithO289ZTxrP01hdGguZmxvb3IoRS9oKTowLHM9ZTxrP01hdGguZmxvb3IoRSVoL3ApOjAsYz1lPFQ/TWF0aC5mbG9vcihFJXAvZCk6MCx5PWU8QT9FJWQqMTArYjowfWVsc2UgeD1uZXcgRGF0ZSh3KSxhPW0oIiVZLSVtLSVkIikoeCksbz1lPGs/eC5nZXRVVENIb3VycygpOjAscz1lPGs/eC5nZXRVVENNaW51dGVzKCk6MCxjPWU8VD94LmdldFVUQ1NlY29uZHMoKTowLHk9ZTxBPzEwKnguZ2V0VVRDTWlsbGlzZWNvbmRzKCkrYjowO3JldHVybiBNKGEsbyxzLGMseSl9LHIubXMyRGF0ZVRpbWVMb2NhbD1mdW5jdGlvbih0KXtpZighKHQ+PW4rZiYmdDw9aS1mKSlyZXR1cm4gdTt2YXIgZT1NYXRoLmZsb29yKDEwKmwodCsuMDUsMSkpLHI9bmV3IERhdGUoTWF0aC5yb3VuZCh0LWUvMTApKTtyZXR1cm4gTShhLnRpbWUuZm9ybWF0KCIlWS0lbS0lZCIpKHIpLHIuZ2V0SG91cnMoKSxyLmdldE1pbnV0ZXMoKSxyLmdldFNlY29uZHMoKSwxMCpyLmdldFVUQ01pbGxpc2Vjb25kcygpK2UpfSxyLmNsZWFuRGF0ZT1mdW5jdGlvbih0LGUsbil7aWYodD09PXUpcmV0dXJuIGU7aWYoci5pc0pTRGF0ZSh0KXx8Im51bWJlciI9PXR5cGVvZiB0JiZpc0Zpbml0ZSh0KSl7aWYoXyhuKSlyZXR1cm4gcy5lcnJvcigiSlMgRGF0ZXMgYW5kIG1pbGxpc2Vjb25kcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggd29ybGQgY2FsZW5kYXJzIix0KSxlO2lmKCEodD1yLm1zMkRhdGVUaW1lTG9jYWwoK3QpKSYmdm9pZCAwIT09ZSlyZXR1cm4gZX1lbHNlIGlmKCFyLmlzRGF0ZVRpbWUodCxuKSlyZXR1cm4gcy5lcnJvcigidW5yZWNvZ25pemVkIGRhdGUiLHQpLGU7cmV0dXJuIHR9O3ZhciBTPS8lXGQ/Zi9nO2Z1bmN0aW9uIEUodCxlLHIsbil7dD10LnJlcGxhY2UoUyxmdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1pbigrdC5jaGFyQXQoMSl8fDYsNik7cmV0dXJuKGUvMWUzJTErMikudG9GaXhlZChyKS5zdWJzdHIoMikucmVwbGFjZSgvMCskLywiIil8fCIwIn0pO3ZhciBpPW5ldyBEYXRlKE1hdGguZmxvb3IoZSsuMDUpKTtpZihfKG4pKXRyeXt0PXYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJ3b3JsZENhbEZtdCIpKHQsZSxuKX1jYXRjaCh0KXtyZXR1cm4iSW52YWxpZCJ9cmV0dXJuIHIodCkoaSl9dmFyIEM9WzU5LDU5LjksNTkuOTksNTkuOTk5LDU5Ljk5OTldO3IuZm9ybWF0RGF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoaT1fKGkpJiZpLCFlKWlmKCJ5Ij09PXIpZT1hLnllYXI7ZWxzZSBpZigibSI9PT1yKWU9YS5tb250aDtlbHNle2lmKCJkIiE9PXIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bCh0Ky4wNSxmKSxuPXcoTWF0aC5mbG9vcihyL2gpLDIpKyI6Iit3KGwoTWF0aC5mbG9vcihyL3ApLDYwKSwyKTtpZigiTSIhPT1lKXtvKGUpfHwoZT0wKTt2YXIgaT0oMTAwK01hdGgubWluKGwodC9kLDYwKSxDW2VdKSkudG9GaXhlZChlKS5zdWJzdHIoMSk7ZT4wJiYoaT1pLnJlcGxhY2UoLzArJC8sIiIpLnJlcGxhY2UoL1tcLl0kLywiIikpLG4rPSI6IitpfXJldHVybiBufSh0LHIpKyJcbiIrRShhLmRheU1vbnRoWWVhcix0LG4saSk7ZT1hLmRheU1vbnRoKyJcbiIrYS55ZWFyfXJldHVybiBFKGUsdCxuLGkpfTt2YXIgTD0zKmY7ci5pbmNyZW1lbnRNb250aD1mdW5jdGlvbih0LGUscil7cj1fKHIpJiZyO3ZhciBuPWwodCxmKTtpZih0PU1hdGgucm91bmQodC1uKSxyKXRyeXt2YXIgaT1NYXRoLnJvdW5kKHQvZikrZyxhPXYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKSxvPWEuZnJvbUpEKGkpO3JldHVybiBlJTEyP2EuYWRkKG8sZSwibSIpOmEuYWRkKG8sZS8xMiwieSIpLChvLnRvSkQoKS1nKSpmK259Y2F0Y2goZSl7cy5lcnJvcigiaW52YWxpZCBtcyAiK3QrIiBpbiBjYWxlbmRhciAiK3IpfXZhciBjPW5ldyBEYXRlKHQrTCk7cmV0dXJuIGMuc2V0VVRDTW9udGgoYy5nZXRVVENNb250aCgpK2UpK24tTH0sci5maW5kRXhhY3REYXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9MCxhPTAscz0wLGw9MCxjPV8oZSkmJnYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKSx1PTA7dTx0Lmxlbmd0aDt1KyspaWYobj10W3VdLG8obikpe2lmKCEobiVmKSlpZihjKXRyeXsxPT09KHI9Yy5mcm9tSkQobi9mK2cpKS5kYXkoKT8xPT09ci5tb250aCgpP2krKzphKys6cysrfWNhdGNoKHQpe31lbHNlIDE9PT0ocj1uZXcgRGF0ZShuKSkuZ2V0VVRDRGF0ZSgpPzA9PT1yLmdldFVUQ01vbnRoKCk/aSsrOmErKzpzKyt9ZWxzZSBsKys7cys9YSs9aTt2YXIgaD10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmkvaCxleGFjdE1vbnRoczphL2gsZXhhY3REYXlzOnMvaH19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vcmVnaXN0cnkiOjgyOSwiLi9sb2dnZXJzIjo3MDQsIi4vbW9kIjo3MDcsZDM6MTU0LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNjg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixpPXtpbml0OmZ1bmN0aW9uKHQpe2lmKHQuX2V2IGluc3RhbmNlb2YgbilyZXR1cm4gdDt2YXIgZT1uZXcgbixyPW5ldyBuO3JldHVybiB0Ll9ldj1lLHQuX2ludGVybmFsRXY9cix0Lm9uPWUub24uYmluZChlKSx0Lm9uY2U9ZS5vbmNlLmJpbmQoZSksdC5yZW1vdmVMaXN0ZW5lcj1lLnJlbW92ZUxpc3RlbmVyLmJpbmQoZSksdC5yZW1vdmVBbGxMaXN0ZW5lcnM9ZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChlKSx0Ll9pbnRlcm5hbE9uPXIub24uYmluZChyKSx0Ll9pbnRlcm5hbE9uY2U9ci5vbmNlLmJpbmQociksdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcj1yLnJlbW92ZUxpc3RlbmVyLmJpbmQociksdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnM9ci5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChyKSx0LmVtaXQ9ZnVuY3Rpb24obixpKXsidW5kZWZpbmVkIiE9dHlwZW9mIGpRdWVyeSYmalF1ZXJ5KHQpLnRyaWdnZXIobixpKSxlLmVtaXQobixpKSxyLmVtaXQobixpKX0sdH0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJihuPWpRdWVyeSh0KS50cmlnZ2VySGFuZGxlcihlLHIpKTt2YXIgYT10Ll9ldjtpZighYSlyZXR1cm4gbjt2YXIgbyxzPWEuX2V2ZW50c1tlXTtpZighcylyZXR1cm4gbjtmdW5jdGlvbiBsKHQpe3JldHVybiB0Lmxpc3RlbmVyPyhhLnJlbW92ZUxpc3RlbmVyKGUsdC5saXN0ZW5lciksdC5maXJlZD92b2lkIDA6KHQuZmlyZWQ9ITAsdC5saXN0ZW5lci5hcHBseShhLFtyXSkpKTp0LmFwcGx5KGEsW3JdKX1mb3Iocz1BcnJheS5pc0FycmF5KHMpP3M6W3NdLG89MDtvPHMubGVuZ3RoLTE7bysrKWwoc1tvXSk7cmV0dXJuIGk9bChzW29dKSx2b2lkIDAhPT1uP246aX0scHVyZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5vbixkZWxldGUgdC5vbmNlLGRlbGV0ZSB0LnJlbW92ZUxpc3RlbmVyLGRlbGV0ZSB0LnJlbW92ZUFsbExpc3RlbmVycyxkZWxldGUgdC5lbWl0LGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5faW50ZXJuYWxFdixkZWxldGUgdC5faW50ZXJuYWxPbixkZWxldGUgdC5faW50ZXJuYWxPbmNlLGRlbGV0ZSB0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyLGRlbGV0ZSB0Ll9yZW1vdmVBbGxJbnRlcm5hbExpc3RlbmVycyx0fX07ZS5leHBvcnRzPWl9LHtldmVudHM6OTR9XSw2OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pc19wbGFpbl9vYmplY3QuanMiKSxpPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gYSh0LGUscixvKXt2YXIgcyxsLGMsdSxmLGgscD10WzBdLGQ9dC5sZW5ndGg7aWYoMj09PWQmJmkocCkmJmkodFsxXSkmJjA9PT1wLmxlbmd0aCl7aWYoZnVuY3Rpb24odCxlKXt2YXIgcixuO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKG51bGwhPT0obj10W3JdKSYmIm9iamVjdCI9PXR5cGVvZiBuKXJldHVybiExO3ZvaWQgMCE9PW4mJihlW3JdPW4pfXJldHVybiEwfSh0WzFdLHApKXJldHVybiBwO3Auc3BsaWNlKDAscC5sZW5ndGgpfWZvcih2YXIgZz0xO2c8ZDtnKyspZm9yKGwgaW4gcz10W2ddKWM9cFtsXSx1PXNbbF0sbyYmaSh1KT9wW2xdPXU6ZSYmdSYmKG4odSl8fChmPWkodSkpKT8oZj8oZj0hMSxoPWMmJmkoYyk/YzpbXSk6aD1jJiZuKGMpP2M6e30scFtsXT1hKFtoLHVdLGUscixvKSk6KCJ1bmRlZmluZWQiIT10eXBlb2YgdXx8cikmJihwW2xdPXUpO3JldHVybiBwfXIuZXh0ZW5kRmxhdD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMSwhMSwhMSl9LHIuZXh0ZW5kRGVlcD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMSwhMSl9LHIuZXh0ZW5kRGVlcEFsbD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMCwhMSl9LHIuZXh0ZW5kRGVlcE5vQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCExLCEwKX19LHsiLi9pc19wbGFpbl9vYmplY3QuanMiOjcwMX1dLDY5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9W10sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsxIT09ZVthXSYmKGVbYV09MSxyW24rK109YSl9cmV0dXJuIHJ9fSx7fV0sNjkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuITA9PT10LnZpc2libGV9ZnVuY3Rpb24gaSh0KXtyZXR1cm4hMD09PXRbMF0udHJhY2UudmlzaWJsZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9KGU9dCxBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KGVbMF0pJiZlWzBdWzBdJiZlWzBdWzBdLnRyYWNlP2k6biksYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107cihzKSYmYS5wdXNoKHMpfXJldHVybiBhfX0se31dLDY5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb3VudHJ5LXJlZ2V4IiksaT10KCIuLi9saWIiKSxhPU9iamVjdC5rZXlzKG4pLG89eyJJU08tMyI6aS5pZGVudGl0eSwiVVNBLXN0YXRlcyI6aS5pZGVudGl0eSwiY291bnRyeSBuYW1lcyI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciByPWFbZV0sbz1uZXcgUmVnRXhwKG5bcl0pO2lmKG8udGVzdCh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcn1yZXR1cm4gaS5sb2coIlVucmVjb2duaXplZCBjb3VudHJ5IG5hbWU6ICIrdCsiLiIpLCExfX07ci5sb2NhdGlvblRvRmVhdHVyZT1mdW5jdGlvbih0LGUscil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTt2YXIgbj1mdW5jdGlvbih0LGUpe3JldHVybigwLG9bdF0pKGUpfSh0LGUpO2lmKG4pe2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO2lmKHMuaWQ9PT1uKXJldHVybiBzfWkubG9nKFsiTG9jYXRpb24gd2l0aCBpZCIsbiwiZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIHRvcG9qc29uIGZlYXR1cmUgYXQgdGhpcyByZXNvbHV0aW9uLiJdLmpvaW4oIiAiKSl9cmV0dXJuITF9fSx7Ii4uL2xpYiI6NzAwLCJjb3VudHJ5LXJlZ2V4IjoxMjR9XSw2OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLmNhbGNUcmFjZVRvTGluZUNvb3Jkcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXS50cmFjZS5jb25uZWN0Z2FwcyxyPVtdLGk9W10sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdLmxvbmxhdDtvWzBdIT09bj9pLnB1c2gobyk6IWUmJmkubGVuZ3RoPjAmJihyLnB1c2goaSksaT1bXSl9cmV0dXJuIGkubGVuZ3RoPjAmJnIucHVzaChpKSxyfSxyLm1ha2VMaW5lPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnRbMF19Ont0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSxyLm1ha2VQb2x5Z29uPWZ1bmN0aW9uKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dH07Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKWVbcl09W3Rbcl1dO3JldHVybnt0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOmV9fSxyLm1ha2VCbGFuaz1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6W119fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2Nzd9XSw2OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG89dCgiLi9tb2QiKS5tb2Q7ZnVuY3Rpb24gcyh0LGUscixuLGksYSxvLHMpe3ZhciBsPXItdCxjPWktdCx1PW8taSxmPW4tZSxoPWEtZSxwPXMtYSxkPWwqcC11KmY7aWYoMD09PWQpcmV0dXJuIG51bGw7dmFyIGc9KGMqcC11KmgpL2Qsdj0oYypmLWwqaCkvZDtyZXR1cm4gdjwwfHx2PjF8fGc8MHx8Zz4xP251bGw6e3g6dCtsKmcseTplK2YqZ319ZnVuY3Rpb24gbCh0LGUscixuLGkpe3ZhciBhPW4qdCtpKmU7aWYoYTwwKXJldHVybiBuKm4raSppO2lmKGE+cil7dmFyIG89bi10LHM9aS1lO3JldHVybiBvKm8rcypzfXZhciBsPW4qZS1pKnQ7cmV0dXJuIGwqbC9yfXIuc2VnbWVudHNJbnRlcnNlY3Q9cyxyLnNlZ21lbnREaXN0YW5jZT1mdW5jdGlvbih0LGUscixuLGksYSxvLGMpe2lmKHModCxlLHIsbixpLGEsbyxjKSlyZXR1cm4gMDt2YXIgdT1yLXQsZj1uLWUsaD1vLWkscD1jLWEsZD11KnUrZipmLGc9aCpoK3AqcCx2PU1hdGgubWluKGwodSxmLGQsaS10LGEtZSksbCh1LGYsZCxvLXQsYy1lKSxsKGgscCxnLHQtaSxlLWEpLGwoaCxwLGcsci1pLG4tYSkpO3JldHVybiBNYXRoLnNxcnQodil9LHIuZ2V0VGV4dExvY2F0aW9uPWZ1bmN0aW9uKHQsZSxyLHMpe2lmKHQ9PT1pJiZzPT09YXx8KG49e30saT10LGE9cyksbltyXSlyZXR1cm4gbltyXTt2YXIgbD10LmdldFBvaW50QXRMZW5ndGgobyhyLXMvMixlKSksYz10LmdldFBvaW50QXRMZW5ndGgobyhyK3MvMixlKSksdT1NYXRoLmF0YW4oKGMueS1sLnkpLyhjLngtbC54KSksZj10LmdldFBvaW50QXRMZW5ndGgobyhyLGUpKSxoPXt4Oig0KmYueCtsLngrYy54KS82LHk6KDQqZi55K2wueStjLnkpLzYsdGhldGE6dX07cmV0dXJuIG5bcl09aCxofSxyLmNsZWFyTG9jYXRpb25DYWNoZT1mdW5jdGlvbigpe2k9bnVsbH0sci5nZXRWaXNpYmxlU2VnbWVudD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUubGVmdCxvPWUucmlnaHQscz1lLnRvcCxsPWUuYm90dG9tLGM9MCx1PXQuZ2V0VG90YWxMZW5ndGgoKSxmPXU7ZnVuY3Rpb24gaChlKXt2YXIgcj10LmdldFBvaW50QXRMZW5ndGgoZSk7MD09PWU/bj1yOmU9PT11JiYoaT1yKTt2YXIgYz1yLng8YT9hLXIueDpyLng+bz9yLngtbzowLGY9ci55PHM/cy1yLnk6ci55Pmw/ci55LWw6MDtyZXR1cm4gTWF0aC5zcXJ0KGMqYytmKmYpfWZvcih2YXIgcD1oKGMpO3A7KXtpZigoYys9cCtyKT5mKXJldHVybjtwPWgoYyl9Zm9yKHA9aChmKTtwOyl7aWYoYz4oZi09cCtyKSlyZXR1cm47cD1oKGYpfXJldHVybnttaW46YyxtYXg6ZixsZW46Zi1jLHRvdGFsOnUsaXNDbG9zZWQ6MD09PWMmJmY9PT11JiZNYXRoLmFicyhuLngtaS54KTwuMSYmTWF0aC5hYnMobi55LWkueSk8LjF9fSxyLmZpbmRQb2ludE9uUGF0aD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGksYSxvLHM9KG49bnx8e30pLnBhdGhMZW5ndGh8fHQuZ2V0VG90YWxMZW5ndGgoKSxsPW4udG9sZXJhbmNlfHwuMDAxLGM9bi5pdGVyYXRpb25MaW1pdHx8MzAsdT10LmdldFBvaW50QXRMZW5ndGgoMClbcl0+dC5nZXRQb2ludEF0TGVuZ3RoKHMpW3JdPy0xOjEsZj0wLGg9MCxwPXM7ZjxjOyl7aWYoaT0oaCtwKS8yLG89KGE9dC5nZXRQb2ludEF0TGVuZ3RoKGkpKVtyXS1lLE1hdGguYWJzKG8pPGwpcmV0dXJuIGE7dSpvPjA/cD1pOmg9aSxmKyt9cmV0dXJuIGF9fSx7Ii4vbW9kIjo3MDd9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYobnVsbD09PShlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSl0aHJvdyBuZXcgRXJyb3IoIk5vIERPTSBlbGVtZW50IHdpdGggaWQgJyIrdCsiJyBleGlzdHMgb24gdGhlIHBhZ2UuIik7cmV0dXJuIGV9aWYobnVsbD09dCl0aHJvdyBuZXcgRXJyb3IoIkRPTSBlbGVtZW50IHByb3ZpZGVkIGlzIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIHR9fSx7fV0sNjk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCJjb2xvci1ub3JtYWxpemUiKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikuZGVmYXVsdExpbmUsbD10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheSxjPWEocyksdT0xO2Z1bmN0aW9uIGYodCxlKXt2YXIgcj10O3JldHVybiByWzNdKj1lLHJ9ZnVuY3Rpb24gaCh0KXtpZihuKHQpKXJldHVybiBjO3ZhciBlPWEodCk7cmV0dXJuIGUubGVuZ3RoP2U6Y31mdW5jdGlvbiBwKHQpe3JldHVybiBuKHQpP3Q6dX1lLmV4cG9ydHM9e2Zvcm1hdENvbG9yOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLHMsZCxnLHY9dC5jb2xvcixtPWwodikseT1sKGUpLHg9W107aWYobj12b2lkIDAhPT10LmNvbG9yc2NhbGU/by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUodCx7Y0xldHRlcjoiYyJ9KSk6aCxpPW0/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT9jOmEobih0W2VdKSl9Omgscz15P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/dTpwKHRbZV0pfTpwLG18fHkpZm9yKHZhciBiPTA7YjxyO2IrKylkPWkodixiKSxnPXMoZSxiKSx4W2JdPWYoZCxnKTtlbHNlIHg9ZihhKHYpLGUpO3JldHVybiB4fSxwYXJzZUNvbG9yU2NhbGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MSksKHQucmV2ZXJzZXNjYWxlP28uZmxpcFNjYWxlKHQuY29sb3JzY2FsZSk6dC5jb2xvcnNjYWxlKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9dFswXSxuPWkodFsxXSkudG9SZ2IoKTtyZXR1cm57aW5kZXg6cixyZ2I6W24ucixuLmcsbi5iLGVdfX0pfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1NzYsIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NTg5LCIuL2FycmF5Ijo2ODMsImNvbG9yLW5vcm1hbGl6ZSI6MTEwLCJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sNjk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtmdW5jdGlvbiBpKHQpe3JldHVyblt0XX1lLmV4cG9ydHM9e2tleUZ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9LHJlcGVhdDppLGRlc2NlbmQ6bix3cmFwOmksdW53cmFwOmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfX19LHsiLi9pZGVudGl0eSI6Njk5fV0sNjk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LHt9XSw3MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLkZQX1NBRkUscz1hLkJBRE5VTSxsPWUuZXhwb3J0cz17fTtsLm5lc3RlZFByb3BlcnR5PXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksbC5rZXllZENvbnRhaW5lcj10KCIuL2tleWVkX2NvbnRhaW5lciIpLGwucmVsYXRpdmVBdHRyPXQoIi4vcmVsYXRpdmVfYXR0ciIpLGwuaXNQbGFpbk9iamVjdD10KCIuL2lzX3BsYWluX29iamVjdCIpLGwudG9Mb2dSYW5nZT10KCIuL3RvX2xvZ19yYW5nZSIpLGwucmVsaW5rUHJpdmF0ZUtleXM9dCgiLi9yZWxpbmtfcHJpdmF0ZSIpO3ZhciBjPXQoIi4vYXJyYXkiKTtsLmlzVHlwZWRBcnJheT1jLmlzVHlwZWRBcnJheSxsLmlzQXJyYXlPclR5cGVkQXJyYXk9Yy5pc0FycmF5T3JUeXBlZEFycmF5LGwuaXNBcnJheTFEPWMuaXNBcnJheTFELGwuZW5zdXJlQXJyYXk9Yy5lbnN1cmVBcnJheSxsLmNvbmNhdD1jLmNvbmNhdCxsLm1heFJvd0xlbmd0aD1jLm1heFJvd0xlbmd0aCxsLm1pblJvd0xlbmd0aD1jLm1pblJvd0xlbmd0aDt2YXIgdT10KCIuL21vZCIpO2wubW9kPXUubW9kLGwubW9kSGFsZj11Lm1vZEhhbGY7dmFyIGY9dCgiLi9jb2VyY2UiKTtsLnZhbE9iamVjdE1ldGE9Zi52YWxPYmplY3RNZXRhLGwuY29lcmNlPWYuY29lcmNlLGwuY29lcmNlMj1mLmNvZXJjZTIsbC5jb2VyY2VGb250PWYuY29lcmNlRm9udCxsLmNvZXJjZUhvdmVyaW5mbz1mLmNvZXJjZUhvdmVyaW5mbyxsLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHk9Zi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5LGwudmFsaWRhdGU9Zi52YWxpZGF0ZTt2YXIgaD10KCIuL2RhdGVzIik7bC5kYXRlVGltZTJtcz1oLmRhdGVUaW1lMm1zLGwuaXNEYXRlVGltZT1oLmlzRGF0ZVRpbWUsbC5tczJEYXRlVGltZT1oLm1zMkRhdGVUaW1lLGwubXMyRGF0ZVRpbWVMb2NhbD1oLm1zMkRhdGVUaW1lTG9jYWwsbC5jbGVhbkRhdGU9aC5jbGVhbkRhdGUsbC5pc0pTRGF0ZT1oLmlzSlNEYXRlLGwuZm9ybWF0RGF0ZT1oLmZvcm1hdERhdGUsbC5pbmNyZW1lbnRNb250aD1oLmluY3JlbWVudE1vbnRoLGwuZGF0ZVRpY2swPWguZGF0ZVRpY2swLGwuZGZsdFJhbmdlPWguZGZsdFJhbmdlLGwuZmluZEV4YWN0RGF0ZXM9aC5maW5kRXhhY3REYXRlcyxsLk1JTl9NUz1oLk1JTl9NUyxsLk1BWF9NUz1oLk1BWF9NUzt2YXIgcD10KCIuL3NlYXJjaCIpO2wuZmluZEJpbj1wLmZpbmRCaW4sbC5zb3J0ZXJBc2M9cC5zb3J0ZXJBc2MsbC5zb3J0ZXJEZXM9cC5zb3J0ZXJEZXMsbC5kaXN0aW5jdFZhbHM9cC5kaXN0aW5jdFZhbHMsbC5yb3VuZFVwPXAucm91bmRVcCxsLnNvcnQ9cC5zb3J0LGwuZmluZEluZGV4T2ZNaW49cC5maW5kSW5kZXhPZk1pbjt2YXIgZD10KCIuL3N0YXRzIik7bC5hZ2dOdW1zPWQuYWdnTnVtcyxsLmxlbj1kLmxlbixsLm1lYW49ZC5tZWFuLGwubWlkUmFuZ2U9ZC5taWRSYW5nZSxsLnZhcmlhbmNlPWQudmFyaWFuY2UsbC5zdGRldj1kLnN0ZGV2LGwuaW50ZXJwPWQuaW50ZXJwO3ZhciBnPXQoIi4vbWF0cml4Iik7bC5pbml0MmRBcnJheT1nLmluaXQyZEFycmF5LGwudHJhbnNwb3NlUmFnZ2VkPWcudHJhbnNwb3NlUmFnZ2VkLGwuZG90PWcuZG90LGwudHJhbnNsYXRpb25NYXRyaXg9Zy50cmFuc2xhdGlvbk1hdHJpeCxsLnJvdGF0aW9uTWF0cml4PWcucm90YXRpb25NYXRyaXgsbC5yb3RhdGlvblhZTWF0cml4PWcucm90YXRpb25YWU1hdHJpeCxsLmFwcGx5MkRUcmFuc2Zvcm09Zy5hcHBseTJEVHJhbnNmb3JtLGwuYXBwbHkyRFRyYW5zZm9ybTI9Zy5hcHBseTJEVHJhbnNmb3JtMjt2YXIgdj10KCIuL2FuZ2xlcyIpO2wuZGVnMnJhZD12LmRlZzJyYWQsbC5yYWQyZGVnPXYucmFkMmRlZyxsLmFuZ2xlRGVsdGE9di5hbmdsZURlbHRhLGwuYW5nbGVEaXN0PXYuYW5nbGVEaXN0LGwuaXNGdWxsQ2lyY2xlPXYuaXNGdWxsQ2lyY2xlLGwuaXNBbmdsZUluc2lkZVNlY3Rvcj12LmlzQW5nbGVJbnNpZGVTZWN0b3IsbC5pc1B0SW5zaWRlU2VjdG9yPXYuaXNQdEluc2lkZVNlY3RvcixsLnBhdGhBcmM9di5wYXRoQXJjLGwucGF0aFNlY3Rvcj12LnBhdGhTZWN0b3IsbC5wYXRoQW5udWx1cz12LnBhdGhBbm51bHVzO3ZhciBtPXQoIi4vYW5jaG9yX3V0aWxzIik7bC5pc0xlZnRBbmNob3I9bS5pc0xlZnRBbmNob3IsbC5pc0NlbnRlckFuY2hvcj1tLmlzQ2VudGVyQW5jaG9yLGwuaXNSaWdodEFuY2hvcj1tLmlzUmlnaHRBbmNob3IsbC5pc1RvcEFuY2hvcj1tLmlzVG9wQW5jaG9yLGwuaXNNaWRkbGVBbmNob3I9bS5pc01pZGRsZUFuY2hvcixsLmlzQm90dG9tQW5jaG9yPW0uaXNCb3R0b21BbmNob3I7dmFyIHk9dCgiLi9nZW9tZXRyeTJkIik7bC5zZWdtZW50c0ludGVyc2VjdD15LnNlZ21lbnRzSW50ZXJzZWN0LGwuc2VnbWVudERpc3RhbmNlPXkuc2VnbWVudERpc3RhbmNlLGwuZ2V0VGV4dExvY2F0aW9uPXkuZ2V0VGV4dExvY2F0aW9uLGwuY2xlYXJMb2NhdGlvbkNhY2hlPXkuY2xlYXJMb2NhdGlvbkNhY2hlLGwuZ2V0VmlzaWJsZVNlZ21lbnQ9eS5nZXRWaXNpYmxlU2VnbWVudCxsLmZpbmRQb2ludE9uUGF0aD15LmZpbmRQb2ludE9uUGF0aDt2YXIgeD10KCIuL2V4dGVuZCIpO2wuZXh0ZW5kRmxhdD14LmV4dGVuZEZsYXQsbC5leHRlbmREZWVwPXguZXh0ZW5kRGVlcCxsLmV4dGVuZERlZXBBbGw9eC5leHRlbmREZWVwQWxsLGwuZXh0ZW5kRGVlcE5vQXJyYXlzPXguZXh0ZW5kRGVlcE5vQXJyYXlzO3ZhciBiPXQoIi4vbG9nZ2VycyIpO2wubG9nPWIubG9nLGwud2Fybj1iLndhcm4sbC5lcnJvcj1iLmVycm9yO3ZhciBfPXQoIi4vcmVnZXgiKTtsLmNvdW50ZXJSZWdleD1fLmNvdW50ZXI7dmFyIHc9dCgiLi90aHJvdHRsZSIpO2Z1bmN0aW9uIGsodCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpZm9yKHZhciBuPXRbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWVbbltpXV09K3I7cmV0dXJuIGV9bC50aHJvdHRsZT13LnRocm90dGxlLGwudGhyb3R0bGVEb25lPXcuZG9uZSxsLmNsZWFyVGhyb3R0bGU9dy5jbGVhcixsLmdldEdyYXBoRGl2PXQoIi4vZ2V0X2dyYXBoX2RpdiIpLGwuY2xlYXJSZXNwb25zaXZlPXQoIi4vY2xlYXJfcmVzcG9uc2l2ZSIpLGwubWFrZVRyYWNlR3JvdXBzPXQoIi4vbWFrZV90cmFjZV9ncm91cHMiKSxsLl89dCgiLi9sb2NhbGl6ZSIpLGwubm90aWZpZXI9dCgiLi9ub3RpZmllciIpLGwuZmlsdGVyVW5pcXVlPXQoIi4vZmlsdGVyX3VuaXF1ZSIpLGwuZmlsdGVyVmlzaWJsZT10KCIuL2ZpbHRlcl92aXNpYmxlIiksbC5wdXNoVW5pcXVlPXQoIi4vcHVzaF91bmlxdWUiKSxsLmNsZWFuTnVtYmVyPXQoIi4vY2xlYW5fbnVtYmVyIiksbC5lbnN1cmVOdW1iZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/KHQ9TnVtYmVyKHQpKTwtb3x8dD5vP3M6aSh0KT9OdW1iZXIodCk6czpzfSxsLmlzSW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMCE9PWUmJnQ+PWUpJiYoaSh0KSYmdD49MCYmdCUxPT0wKX0sbC5ub29wPXQoIi4vbm9vcCIpLGwuaWRlbnRpdHk9dCgiLi9pZGVudGl0eSIpLGwucmVwZWF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXQ7cmV0dXJuIHJ9LGwuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLHIpKSxzPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLG4pKSxjPW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQoYyl9fSxsLnJhaXNlVG9Ub3A9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpfSxsLmNhbmNlbFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApfSxsLmNvbnN0cmFpbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cj9NYXRoLm1heChyLE1hdGgubWluKGUsdCkpOk1hdGgubWF4KGUsTWF0aC5taW4ocix0KSl9LGwuYkJveEludGVyc2VjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI9cnx8MCx0LmxlZnQ8PWUucmlnaHQrciYmZS5sZWZ0PD10LnJpZ2h0K3ImJnQudG9wPD1lLmJvdHRvbStyJiZlLnRvcDw9dC5ib3R0b20rcn0sbC5zaW1wbGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MDtvPGk7bysrKWFbb109ZSh0W29dLHIsbik7cmV0dXJuIGF9LGwucmFuZHN0cj1mdW5jdGlvbiB0KGUscixuLGkpe2lmKG58fChuPTE2KSx2b2lkIDA9PT1yJiYocj0yNCkscjw9MClyZXR1cm4iMCI7dmFyIGEsbyxzPU1hdGgubG9nKE1hdGgucG93KDIscikpL01hdGgubG9nKG4pLGM9IiI7Zm9yKGE9MjtzPT09MS8wO2EqPTIpcz1NYXRoLmxvZyhNYXRoLnBvdygyLHIvYSkpL01hdGgubG9nKG4pKmE7dmFyIHU9cy1NYXRoLmZsb29yKHMpO2ZvcihhPTA7YTxNYXRoLmZsb29yKHMpO2ErKyljPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpuKS50b1N0cmluZyhuKStjO3UmJihvPU1hdGgucG93KG4sdSksYz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbykudG9TdHJpbmcobikrYyk7dmFyIGY9cGFyc2VJbnQoYyxuKTtyZXR1cm4gZSYmZVtjXXx8ZiE9PTEvMCYmZj49TWF0aC5wb3coMixyKT9pPjEwPyhsLndhcm4oInJhbmRzdHIgZmFpbGVkIHVuaXF1ZW5lc3MiKSxjKTp0KGUscixuLChpfHwwKSsxKTpjfSxsLk9wdGlvbkNvbnRyb2w9ZnVuY3Rpb24odCxlKXt0fHwodD17fSksZXx8KGU9Im9wdCIpO3ZhciByPXtvcHRpb25MaXN0OltdLF9uZXdvcHRpb246ZnVuY3Rpb24obil7bltlXT10LHJbbi5uYW1lXT1uLHIub3B0aW9uTGlzdC5wdXNoKG4pfX07cmV0dXJuIHJbIl8iK2VdPXQscn0sbC5zbW9vdGg9ZnVuY3Rpb24odCxlKXtpZigoZT1NYXRoLnJvdW5kKGUpfHwwKTwyKXJldHVybiB0O3ZhciByLG4saSxhLG89dC5sZW5ndGgscz0yKm8sbD0yKmUtMSxjPW5ldyBBcnJheShsKSx1PW5ldyBBcnJheShvKTtmb3Iocj0wO3I8bDtyKyspY1tyXT0oMS1NYXRoLmNvcyhNYXRoLlBJKihyKzEpL2UpKS8oMiplKTtmb3Iocj0wO3I8bztyKyspe2ZvcihhPTAsbj0wO248bDtuKyspKGk9cituKzEtZSk8LW8/aS09cypNYXRoLnJvdW5kKGkvcyk6aT49cyYmKGktPXMqTWF0aC5mbG9vcihpL3MpKSxpPDA/aT0tMS1pOmk+PW8mJihpPXMtMS1pKSxhKz10W2ldKmNbbl07dVtyXT1hfXJldHVybiB1fSxsLnN5bmNPckFzeW5jPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKCl7cmV0dXJuIGwuc3luY09yQXN5bmModCxlLHIpfWZvcig7dC5sZW5ndGg7KWlmKChuPSgwLHQuc3BsaWNlKDAsMSlbMF0pKGUpKSYmbi50aGVuKXJldHVybiBuLnRoZW4oaSkudGhlbih2b2lkIDAsbC5wcm9taXNlRXJyb3IpO3JldHVybiByJiZyKGUpfSxsLnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LnN1YnN0cigtMSk/dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKTp0fSxsLm5vbmVPckFsbD1mdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG4saT0hMSxhPSEwO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspbnVsbCE9dFtyW25dXT9pPSEwOmE9ITE7aWYoaSYmIWEpZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxsLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSlmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGk9MDtpPG47aSsrKWVbaV1bcl09dFtpXX0sbC5maWxsQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7aWYobj1ufHxsLmlkZW50aXR5LGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSlmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyllW2ldW3JdPW4odFtpXSl9LGwuY2FzdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtuPW58fGwuaWRlbnRpdHk7dmFyIGk9bC5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiBsLmlzQXJyYXlPclR5cGVkQXJyYXkoaSk/QXJyYXkuaXNBcnJheShlKSYmbC5pc0FycmF5T3JUeXBlZEFycmF5KGlbZVswXV0pP24oaVtlWzBdXVtlWzFdXSk6bihpW2VdKTppfSxsLmV4dHJhY3RPcHRpb249ZnVuY3Rpb24odCxlLHIsbil7aWYociBpbiB0KXJldHVybiB0W3JdO3ZhciBpPWwubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQoKTtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT92b2lkIDA6aX0sbC50YWdTZWxlY3RlZD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuc2VsZWN0ZWRwb2ludHMsbz1lLl9pbmRleFRvUG9pbnRzO28mJihuPWsobykpO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3NdO2lmKGwuaXNJbmRleChjKSl7dmFyIHU9bj9uW2NdOmMsZj1yP3JbdV06dTt2b2lkIDAhPT0oaT1mKSYmaTx0Lmxlbmd0aCYmKHRbZl0uc2VsZWN0ZWQ9MSl9fX0sbC5zZWxJbmRpY2VzMnNlbFBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdGVkcG9pbnRzLHI9dC5faW5kZXhUb1BvaW50cztpZihyKXtmb3IodmFyIG49ayhyKSxpPVtdLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXTtpZihsLmlzSW5kZXgobykpe3ZhciBzPW5bb107bC5pc0luZGV4KHMpJiZpLnB1c2gocyl9fXJldHVybiBpfXJldHVybiBlfSxsLmdldFRhcmdldEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50YXJnZXQ7aWYoInN0cmluZyI9PXR5cGVvZiByJiZyKXt2YXIgbj1sLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuISFBcnJheS5pc0FycmF5KG4pJiZufXJldHVybiEhQXJyYXkuaXNBcnJheShyKSYmcn0sbC5taW5FeHRlbmQ9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTsib2JqZWN0IiE9dHlwZW9mIGUmJihlPXt9KTt2YXIgbixpLGEsbz1PYmplY3Qua2V5cyh0KTtmb3Iobj0wO248by5sZW5ndGg7bisrKWE9dFtpPW9bbl1dLCJfIiE9PWkuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgYSYmKCJtb2R1bGUiPT09aT9yW2ldPWE6QXJyYXkuaXNBcnJheShhKT9yW2ldPSJjb2xvcnNjYWxlIj09PWk/YS5zbGljZSgpOmEuc2xpY2UoMCwzKTpyW2ldPWEmJiJvYmplY3QiPT10eXBlb2YgYT9sLm1pbkV4dGVuZCh0W2ldLGVbaV0pOmEpO2ZvcihvPU9iamVjdC5rZXlzKGUpLG49MDtuPG8ubGVuZ3RoO24rKykib2JqZWN0Ij09dHlwZW9mKGE9ZVtpPW9bbl1dKSYmaSBpbiByJiYib2JqZWN0Ij09dHlwZW9mIHJbaV18fChyW2ldPWEpO3JldHVybiByfSxsLnRpdGxlQ2FzZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKX0sbC5jb250YWluc0FueT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKC0xIT09dC5pbmRleE9mKGVbcl0pKXJldHVybiEwO3JldHVybiExfSxsLmlzUGxvdERpdj1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KTtyZXR1cm4gZS5ub2RlKClpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLnNpemUoKSYmZS5jbGFzc2VkKCJqcy1wbG90bHktcGxvdCIpfSxsLnJlbW92ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodCl9LGwuYWRkU3R5bGVSdWxlPWZ1bmN0aW9uKHQsZSl7bC5hZGRSZWxhdGVkU3R5bGVSdWxlKCJnbG9iYWwiLHQsZSl9LGwuYWRkUmVsYXRlZFN0eWxlUnVsZT1mdW5jdGlvbih0LGUscil7dmFyIG49InBsb3RseS5qcy1zdHlsZS0iK3QsaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKTtpfHwoKGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSkuc2V0QXR0cmlidXRlKCJpZCIsbiksaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaSkpO3ZhciBhPWkuc2hlZXQ7YS5pbnNlcnRSdWxlP2EuaW5zZXJ0UnVsZShlKyJ7IityKyJ9IiwwKTphLmFkZFJ1bGU/YS5hZGRSdWxlKGUsciwwKTpsLndhcm4oImFkZFN0eWxlUnVsZSBmYWlsZWQiKX0sbC5kZWxldGVSZWxhdGVkU3R5bGVSdWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSJwbG90bHkuanMtc3R5bGUtIit0LHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7ciYmbC5yZW1vdmVFbGVtZW50KHIpfSxsLmlzSUU9ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYn0sbC5pc0QzU2VsZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jbGFzc2VkfSxsLmVuc3VyZVNpbmdsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlKyhyPyIuIityOiIiKSk7aWYoaS5zaXplKCkpcmV0dXJuIGk7dmFyIGE9dC5hcHBlbmQoZSk7cmV0dXJuIHImJmEuY2xhc3NlZChyLCEwKSxuJiZhLmNhbGwobiksYX0sbC5lbnN1cmVTaW5nbGVCeUlkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0KGUrIiMiK3IpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpLmF0dHIoImlkIixyKTtyZXR1cm4gbiYmYS5jYWxsKG4pLGF9LGwub2JqZWN0RnJvbVBhdGg9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnNwbGl0KCIuIiksaT1yPXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW51bGwsbD1uW2FdLm1hdGNoKC8oLiopXFsoWzAtOV0rKVxdLyk7bD8obz1sWzFdLHM9bFsyXSxyPXJbb109W10sYT09PW4ubGVuZ3RoLTE/cltzXT1lOnJbc109e30scj1yW3NdKTooYT09PW4ubGVuZ3RoLTE/cltvXT1lOnJbb109e30scj1yW29dKX1yZXR1cm4gaX07dmFyIFQ9L14oW15cW1wuXSspXC4oLispPy8sQT0vXihbXlwuXSspXFsoWzAtOV0rKVxdKFwuKT8oLispPy87bC5leHBhbmRPYmplY3RQYXRocz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scztpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpKWZvcihyIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKChlPXIubWF0Y2goVCkpPyhpPXRbcl0sbj1lWzFdLGRlbGV0ZSB0W3JdLHRbbl09bC5leHRlbmREZWVwTm9BcnJheXModFtuXXx8e30sbC5vYmplY3RGcm9tUGF0aChyLGwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpW25dKSk6KGU9ci5tYXRjaChBKSk/KGk9dFtyXSxuPWVbMV0sYT1wYXJzZUludChlWzJdKSxkZWxldGUgdFtyXSx0W25dPXRbbl18fFtdLCIuIj09PWVbM10/KHM9ZVs0XSxvPXRbbl1bYV09dFtuXVthXXx8e30sbC5leHRlbmREZWVwTm9BcnJheXMobyxsLm9iamVjdEZyb21QYXRoKHMsbC5leHBhbmRPYmplY3RQYXRocyhpKSkpKTp0W25dW2FdPWwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpOnRbcl09bC5leHBhbmRPYmplY3RQYXRocyh0W3JdKSk7cmV0dXJuIHR9LGwubnVtU2VwYXJhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHJ8fChyPSExKSwic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNlcGFyYXRvciBzdHJpbmcgcmVxdWlyZWQgZm9yIGZvcm1hdHRpbmchIik7Im51bWJlciI9PXR5cGVvZiB0JiYodD1TdHJpbmcodCkpO3ZhciBuPS8oXGQrKShcZHszfSkvLGk9ZS5jaGFyQXQoMCksYT1lLmNoYXJBdCgxKSxvPXQuc3BsaXQoIi4iKSxzPW9bMF0sbD1vLmxlbmd0aD4xP2krb1sxXToiIjtpZihhJiYoby5sZW5ndGg+MXx8cy5sZW5ndGg+NHx8cikpZm9yKDtuLnRlc3Qocyk7KXM9cy5yZXBsYWNlKG4sIiQxIithKyIkMiIpO3JldHVybiBzK2x9LGwuVEVNUExBVEVfU1RSSU5HX1JFR0VYPS8leyhbXlxzJXt9Ol0qKSg6W159XSopP30vZzt2YXIgTT0vXlx3KiQvO2wudGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyZXR1cm4gdC5yZXBsYWNlKGwuVEVNUExBVEVfU1RSSU5HX1JFR0VYLGZ1bmN0aW9uKHQsbil7cmV0dXJuIE0udGVzdChuKT9lW25dfHwiIjoocltuXT1yW25dfHxsLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0LHJbbl0oKXx8IiIpfSl9O3ZhciBTPS9eOi8sRT0wO2wuaG92ZXJ0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbih0LGUscil7dmFyIGk9YXJndW1lbnRzLGE9e307cmV0dXJuIHQucmVwbGFjZShsLlRFTVBMQVRFX1NUUklOR19SRUdFWCxmdW5jdGlvbih0LG8scyl7dmFyIGMsdSxmO2ZvcihmPTM7ZjxpLmxlbmd0aDtmKyspe2lmKChjPWlbZl0pLmhhc093blByb3BlcnR5KG8pKXt1PWNbb107YnJlYWt9aWYoTS50ZXN0KG8pfHwodT1hW29dfHxsLm5lc3RlZFByb3BlcnR5KGMsbykuZ2V0KCkpJiYoYVtvXT11KSx2b2lkIDAhPT11KWJyZWFrfSh2b2lkIDA9PT11JiYoRTwxMCYmKGwud2FybigiVmFyaWFibGUgJyIrbysiJyBpbiBob3ZlcnRlbXBsYXRlIGNvdWxkIG5vdCBiZSBmb3VuZCEiKSx1PXQpLDEwPT09RSYmbC53YXJuKCJUb28gbWFueSBob3ZlcnRlbXBsYXRlIHdhcm5pbmdzIC0gYWRkaXRpb25hbCB3YXJuaW5ncyB3aWxsIGJlIHN1cHByZXNzZWQiKSxFKyspLHMpP3U9KHI/ci5udW1iZXJGb3JtYXQ6bi5mb3JtYXQpKHMucmVwbGFjZShTLCIiKSkodSk6ZS5oYXNPd25Qcm9wZXJ0eShvKyJMYWJlbCIpJiYodT1lW28rIkxhYmVsIl0pO3JldHVybiB1fSl9O2wuc3VicGxvdFNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpKzEsbj0wLGk9MCxhPTA7YTxyO2ErKyl7dmFyIG89dC5jaGFyQ29kZUF0KGEpfHwwLHM9ZS5jaGFyQ29kZUF0KGEpfHwwLGw9bz49NDgmJm88PTU3LGM9cz49NDgmJnM8PTU3O2lmKGwmJihuPTEwKm4rby00OCksYyYmKGk9MTAqaStzLTQ4KSwhbHx8IWMpe2lmKG4hPT1pKXJldHVybiBuLWk7aWYobyE9PXMpcmV0dXJuIG8tc319cmV0dXJuIGktbn07dmFyIEM9MmU5O2wuc2VlZFBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe0M9MmU5fSxsLnBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe3ZhciB0PUM7cmV0dXJuIEM9KDY5MDY5KkMrMSklNDI5NDk2NzI5NixNYXRoLmFicyhDLXQpPDQyOTQ5NjcyOT9sLnBzZXVkb1JhbmRvbSgpOkMvNDI5NDk2NzI5Nn19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuL2FuY2hvcl91dGlscyI6NjgxLCIuL2FuZ2xlcyI6NjgyLCIuL2FycmF5Ijo2ODMsIi4vY2xlYW5fbnVtYmVyIjo2ODQsIi4vY2xlYXJfcmVzcG9uc2l2ZSI6Njg2LCIuL2NvZXJjZSI6Njg3LCIuL2RhdGVzIjo2ODgsIi4vZXh0ZW5kIjo2OTAsIi4vZmlsdGVyX3VuaXF1ZSI6NjkxLCIuL2ZpbHRlcl92aXNpYmxlIjo2OTIsIi4vZ2VvbWV0cnkyZCI6Njk1LCIuL2dldF9ncmFwaF9kaXYiOjY5NiwiLi9pZGVudGl0eSI6Njk5LCIuL2lzX3BsYWluX29iamVjdCI6NzAxLCIuL2tleWVkX2NvbnRhaW5lciI6NzAyLCIuL2xvY2FsaXplIjo3MDMsIi4vbG9nZ2VycyI6NzA0LCIuL21ha2VfdHJhY2VfZ3JvdXBzIjo3MDUsIi4vbWF0cml4Ijo3MDYsIi4vbW9kIjo3MDcsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3MDgsIi4vbm9vcCI6NzA5LCIuL25vdGlmaWVyIjo3MTAsIi4vcHVzaF91bmlxdWUiOjcxNCwiLi9yZWdleCI6NzE2LCIuL3JlbGF0aXZlX2F0dHIiOjcxNywiLi9yZWxpbmtfcHJpdmF0ZSI6NzE4LCIuL3NlYXJjaCI6NzE5LCIuL3N0YXRzIjo3MjIsIi4vdGhyb3R0bGUiOjcyNSwiLi90b19sb2dfcmFuZ2UiOjcyNixkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw3MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucz8iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KToiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09T2JqZWN0LnByb3RvdHlwZX19LHt9XSw3MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxpPS9eXHcqJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbDtyPXJ8fCJuYW1lIixhPWF8fCJ2YWx1ZSI7dmFyIGM9e307ZSYmZS5sZW5ndGg/KGw9bih0LGUpLHM9bC5nZXQoKSk6cz10LGU9ZXx8IiI7dmFyIHU9e307aWYocylmb3Iobz0wO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV09bzt2YXIgZj1pLnRlc3QoYSksaD17c2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9bnVsbD09PWU/NDowO2lmKCFzKXtpZighbHx8ND09PWkpcmV0dXJuO3M9W10sbC5zZXQocyl9dmFyIG89dVt0XTtpZih2b2lkIDA9PT1vKXtpZig0PT09aSlyZXR1cm47aXw9MyxvPXMubGVuZ3RoLHVbdF09b31lbHNlIGUhPT0oZj9zW29dW2FdOm4oc1tvXSxhKS5nZXQoKSkmJihpfD0yKTt2YXIgcD1zW29dPXNbb118fHt9O3JldHVybiBwW3JdPXQsZj9wW2FdPWU6bihwLGEpLnNldChlKSxudWxsIT09ZSYmKGkmPS01KSxjW29dPWNbb118aSxofSxnZXQ6ZnVuY3Rpb24odCl7aWYocyl7dmFyIGU9dVt0XTtyZXR1cm4gdm9pZCAwPT09ZT92b2lkIDA6Zj9zW2VdW2FdOm4oc1tlXSxhKS5nZXQoKX19LHJlbmFtZTpmdW5jdGlvbih0LGUpe3ZhciBuPXVbdF07cmV0dXJuIHZvaWQgMD09PW4/aDooY1tuXT0xfGNbbl0sdVtlXT1uLGRlbGV0ZSB1W3RdLHNbbl1bcl09ZSxoKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXVbdF07aWYodm9pZCAwPT09ZSlyZXR1cm4gaDt2YXIgaT1zW2VdO2lmKE9iamVjdC5rZXlzKGkpLmxlbmd0aD4yKXJldHVybiBjW2VdPTJ8Y1tlXSxoLnNldCh0LG51bGwpO2lmKGYpe2ZvcihvPWU7bzxzLmxlbmd0aDtvKyspY1tvXT0zfGNbb107Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyl1W3Nbb11bcl1dLS07cy5zcGxpY2UoZSwxKSxkZWxldGUgdVt0XX1lbHNlIG4oaSxhKS5zZXQobnVsbCksY1tlXT02fGNbZV07cmV0dXJuIGh9LGNvbnN0cnVjdFVwZGF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdCxpLG89e30sbD1PYmplY3Qua2V5cyhjKSx1PTA7dTxsLmxlbmd0aDt1KyspaT1sW3VdLHQ9ZSsiWyIraSsiXSIsc1tpXT8oMSZjW2ldJiYob1t0KyIuIityXT1zW2ldW3JdKSwyJmNbaV0mJihvW3QrIi4iK2FdPWY/NCZjW2ldP251bGw6c1tpXVthXTo0JmNbaV0/bnVsbDpuKHNbaV0sYSkuZ2V0KCkpKTpvW3RdPW51bGw7cmV0dXJuIG99fTtyZXR1cm4gaH19LHsiLi9uZXN0ZWRfcHJvcGVydHkiOjcwOH1dLDcwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9jb250ZXh0LmxvY2FsZSxpPTA7aTwyO2krKyl7Zm9yKHZhciBhPXQuX2NvbnRleHQubG9jYWxlcyxvPTA7bzwyO28rKyl7dmFyIHM9KGFbcl18fHt9KS5kaWN0aW9uYXJ5O2lmKHMpe3ZhciBsPXNbZV07aWYobClyZXR1cm4gbH1hPW4ubG9jYWxlUmVnaXN0cnl9dmFyIGM9ci5zcGxpdCgiLSIpWzBdO2lmKGM9PT1yKWJyZWFrO3I9Y31yZXR1cm4gZX19LHsiLi4vcmVnaXN0cnkiOjgyOX1dLDcwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcsaT1lLmV4cG9ydHM9e307ZnVuY3Rpb24gYSh0LGUpe2lmKHQmJnQuYXBwbHkpdHJ5e3JldHVybiB2b2lkIHQuYXBwbHkoY29uc29sZSxlKX1jYXRjaCh0KXt9Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdHJ5e3QoZVtyXSl9Y2F0Y2godCl7Y29uc29sZS5sb2coZVtyXSl9fWkubG9nPWZ1bmN0aW9uKCl7aWYobi5sb2dnaW5nPjEpe2Zvcih2YXIgdD1bIkxPRzoiXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKTthKGNvbnNvbGUudHJhY2V8fGNvbnNvbGUubG9nLHQpfX0saS53YXJuPWZ1bmN0aW9uKCl7aWYobi5sb2dnaW5nPjApe2Zvcih2YXIgdD1bIldBUk46Il0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7YShjb25zb2xlLnRyYWNlfHxjb25zb2xlLmxvZyx0KX19LGkuZXJyb3I9ZnVuY3Rpb24oKXtpZihuLmxvZ2dpbmc+MCl7Zm9yKHZhciB0PVsiRVJST1I6Il0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7YShjb25zb2xlLmVycm9yLHQpfX19LHsiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciOjczNn1dLDcwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuc2VsZWN0QWxsKCJnLiIrci5yZXBsYWNlKC9ccy9nLCIuIikpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KTtyZXR1cm4gbi5leGl0KCkucmVtb3ZlKCksbi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixyKSxuLm9yZGVyKCksbn19LHt9XSw3MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5pbml0MmRBcnJheT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDtuKyspcltuXT1uZXcgQXJyYXkoZSk7cmV0dXJuIHJ9LHIudHJhbnNwb3NlUmFnZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0wLGk9dC5sZW5ndGg7Zm9yKGU9MDtlPGk7ZSsrKW49TWF0aC5tYXgobix0W2VdLmxlbmd0aCk7dmFyIGE9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuO2UrKylmb3IoYVtlXT1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspYVtlXVtyXT10W3JdW2VdO3JldHVybiBhfSxyLmRvdD1mdW5jdGlvbih0LGUpe2lmKCF0Lmxlbmd0aHx8IWUubGVuZ3RofHx0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiBudWxsO3ZhciBuLGksYT10Lmxlbmd0aDtpZih0WzBdLmxlbmd0aClmb3Iobj1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspbltpXT1yLmRvdCh0W2ldLGUpO2Vsc2UgaWYoZVswXS5sZW5ndGgpe3ZhciBvPXIudHJhbnNwb3NlUmFnZ2VkKGUpO2ZvcihuPW5ldyBBcnJheShvLmxlbmd0aCksaT0wO2k8by5sZW5ndGg7aSsrKW5baV09ci5kb3QodCxvW2ldKX1lbHNlIGZvcihuPTAsaT0wO2k8YTtpKyspbis9dFtpXSplW2ldO3JldHVybiBufSxyLnRyYW5zbGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW1sxLDAsdF0sWzAsMSxlXSxbMCwwLDFdXX0sci5yb3RhdGlvbk1hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10Kk1hdGguUEkvMTgwO3JldHVybltbTWF0aC5jb3MoZSksLU1hdGguc2luKGUpLDBdLFtNYXRoLnNpbihlKSxNYXRoLmNvcyhlKSwwXSxbMCwwLDFdXX0sci5yb3RhdGlvblhZTWF0cml4PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5kb3Qoci5kb3Qoci50cmFuc2xhdGlvbk1hdHJpeChlLG4pLHIucm90YXRpb25NYXRyaXgodCkpLHIudHJhbnNsYXRpb25NYXRyaXgoLWUsLW4pKX0sci5hcHBseTJEVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50czszPT09ZS5sZW5ndGgmJihlPWVbMF0pO3ZhciBuPTE9PT1hcmd1bWVudHMubGVuZ3RoP2VbMF06W2VbMF0sZVsxXV07cmV0dXJuIHIuZG90KHQsW25bMF0sblsxXSwxXSkuc2xpY2UoMCwyKX19LHIuYXBwbHkyRFRyYW5zZm9ybTI9ZnVuY3Rpb24odCl7dmFyIGU9ci5hcHBseTJEVHJhbnNmb3JtKHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0LnNsaWNlKDAsMikpLmNvbmNhdChlKHQuc2xpY2UoMiw0KSkpfX19LHt9XSw3MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10JWU7cmV0dXJuIHI8MD9yK2U6cn0sbW9kSGFsZjpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0KT5lLzI/dC1NYXRoLnJvdW5kKHQvZSkqZTp0fX19LHt9XSw3MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKG4oZSkpZT1TdHJpbmcoZSk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGV8fCJbLTFdIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Zvcih2YXIgcixhLG8sbD0wLGM9ZS5zcGxpdCgiLiIpO2w8Yy5sZW5ndGg7KXtpZihyPVN0cmluZyhjW2xdKS5tYXRjaCgvXihbXlxbXF1dKikoKFxbXC0/WzAtOV0qXF0pKykkLykpe2lmKHJbMV0pY1tsXT1yWzFdO2Vsc2V7aWYoMCE9PWwpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7Yy5zcGxpY2UoMCwxKX1mb3IoYT1yWzJdLnN1YnN0cigxLHJbMl0ubGVuZ3RoLTIpLnNwbGl0KCJdWyIpLG89MDtvPGEubGVuZ3RoO28rKylsKyssYy5zcGxpY2UobCwwLE51bWJlcihhW29dKSl9bCsrfXJldHVybiJvYmplY3QiIT10eXBlb2YgdD9mdW5jdGlvbih0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93ImJhZCBjb250YWluZXIifSxnZXQ6ZnVuY3Rpb24oKXt9LGFzdHI6ZSxwYXJ0czpyLG9iajp0fX0odCxlLGMpOntzZXQ6cyh0LGMsZSksZ2V0OmZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbixhLG8scyxsLGM9ZTtmb3Iocz0wO3M8ci5sZW5ndGgtMTtzKyspe2lmKC0xPT09KG49cltzXSkpe2ZvcihhPSEwLG89W10sbD0wO2w8Yy5sZW5ndGg7bCsrKW9bbF09dChjW2xdLHIuc2xpY2UocysxKSkoKSxvW2xdIT09b1swXSYmKGE9ITEpO3JldHVybiBhP29bMF06b31pZigibnVtYmVyIj09dHlwZW9mIG4mJiFpKGMpKXJldHVybjtpZigib2JqZWN0IiE9dHlwZW9mKGM9Y1tuXSl8fG51bGw9PT1jKXJldHVybn1pZigib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiZudWxsIT09KG89Y1tyW3NdXSkpcmV0dXJuIG99fSh0LGMpLGFzdHI6ZSxwYXJ0czpjLG9iajp0fX07dmFyIGE9LyhefFwuKWFyZ3NcWy87ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB2b2lkIDA9PT10fHxudWxsPT09dCYmIWUubWF0Y2goYSl9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBhLHMsZj10LGg9IiIscD1bW3QsaF1dLGQ9byhuLHIpO2ZvcihzPTA7czxlLmxlbmd0aC0xO3MrKyl7aWYoIm51bWJlciI9PXR5cGVvZihhPWVbc10pJiYhaShmKSl0aHJvdyJhcnJheSBpbmRleCBidXQgY29udGFpbmVyIGlzIG5vdCBhbiBhcnJheSI7aWYoLTE9PT1hKXtpZihkPSFjKGYsZS5zbGljZShzKzEpLG4scikpYnJlYWs7cmV0dXJufWlmKCF1KGYsYSxlW3MrMV0sZCkpYnJlYWs7aWYoIm9iamVjdCIhPXR5cGVvZihmPWZbYV0pfHxudWxsPT09Zil0aHJvdyJjb250YWluZXIgaXMgbm90IGFuIG9iamVjdCI7aD1sKGgsYSkscC5wdXNoKFtmLGhdKX1pZihkKXtpZihzPT09ZS5sZW5ndGgtMSYmKGRlbGV0ZSBmW2Vbc11dLEFycmF5LmlzQXJyYXkoZikmJitlW3NdPT1mLmxlbmd0aC0xKSlmb3IoO2YubGVuZ3RoJiZ2b2lkIDA9PT1mW2YubGVuZ3RoLTFdOylmLnBvcCgpfWVsc2UgZltlW3NdXT1ufX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZTtyZXR1cm4gbihlKT9yPSJbIitlKyJdIjp0JiYocj0iLiIrZSksdCtyfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGEsbD1pKHIpLGM9ITAsZj1yLGg9bi5yZXBsYWNlKCItMSIsMCkscD0hbCYmbyhyLGgpLGQ9ZVswXTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWg9bi5yZXBsYWNlKCItMSIsYSksbCYmKHA9byhmPXJbYSVyLmxlbmd0aF0saCkpLHAmJihjPSExKSx1KHQsYSxkLHApJiZzKHRbYV0sZSxuLnJlcGxhY2UoIi0xIixhKSkoZik7cmV0dXJuIGN9ZnVuY3Rpb24gdSh0LGUscixuKXtpZih2b2lkIDA9PT10W2VdKXtpZihuKXJldHVybiExO3RbZV09Im51bWJlciI9PXR5cGVvZiByP1tdOnt9fXJldHVybiEwfX0seyIuL2FycmF5Ijo2ODMsImZhc3QtaXNudW1lcmljIjoyMjF9XSw3MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0se31dLDcxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPVtdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIHI9MWUzO2koZSk/cj1lOiJsb25nIj09PWUmJihyPTNlMyk7dmFyIG89bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCksby5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXBwZW5kKCJidXR0b24iKS5jbGFzc2VkKCJub3RpZmllci1jbG9zZSIsITApLmh0bWwoIiZ0aW1lczsiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuY2FsbChzKX0pO2Zvcih2YXIgaT1lLmFwcGVuZCgicCIpLGE9dC5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxvPTA7bzxhLmxlbmd0aDtvKyspbyYmaS5hcHBlbmQoImJyIiksaS5hcHBlbmQoInNwYW4iKS50ZXh0KGFbb10pO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShyKS5jYWxsKHMpfSl9ZnVuY3Rpb24gcyh0KXt0LmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goImVuZCIsZnVuY3Rpb24odCl7dmFyIGU9YS5pbmRleE9mKHQpOy0xIT09ZSYmYS5zcGxpY2UoZSwxKSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfX19LHtkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw3MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zZXRjdXJzb3IiKSxpPSJkYXRhLXNhdmVkY3Vyc29yIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHIoaSk7aWYoZSl7aWYoIXIpe2Zvcih2YXIgYT0odC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107MD09PXMuaW5kZXhPZigiY3Vyc29yLSIpJiZ0LmF0dHIoaSxzLnN1YnN0cig3KSkuY2xhc3NlZChzLCExKX10LmF0dHIoaSl8fHQuYXR0cihpLCIhISIpfW4odCxlKX1lbHNlIHImJih0LmF0dHIoaSxudWxsKSwiISEiPT09cj9uKHQpOm4odCxyKSl9fSx7Ii4vc2V0Y3Vyc29yIjo3MjB9XSw3MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tYXRyaXgiKS5kb3QsaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9ZS5leHBvcnRzPXt9O2EudGVzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49clswXVswXSxhPW4sbz1yWzBdWzFdLHM9bztmb3Ioci5wdXNoKHJbMF0pLGU9MTtlPHIubGVuZ3RoO2UrKyluPU1hdGgubWluKG4scltlXVswXSksYT1NYXRoLm1heChhLHJbZV1bMF0pLG89TWF0aC5taW4obyxyW2VdWzFdKSxzPU1hdGgubWF4KHMscltlXVsxXSk7dmFyIGwsYz0hMTs1PT09ci5sZW5ndGgmJihyWzBdWzBdPT09clsxXVswXT9yWzJdWzBdPT09clszXVswXSYmclswXVsxXT09PXJbM11bMV0mJnJbMV1bMV09PT1yWzJdWzFdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09clswXVswXX0pOnJbMF1bMV09PT1yWzFdWzFdJiZyWzJdWzFdPT09clszXVsxXSYmclswXVswXT09PXJbM11bMF0mJnJbMV1bMF09PT1yWzJdWzBdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzFdPT09clswXVsxXX0pKTt2YXIgdT0hMCxmPXJbMF07Zm9yKGU9MTtlPHIubGVuZ3RoO2UrKylpZihmWzBdIT09cltlXVswXXx8ZlsxXSE9PXJbZV1bMV0pe3U9ITE7YnJlYWt9cmV0dXJue3htaW46bix4bWF4OmEseW1pbjpvLHltYXg6cyxwdHM6cixjb250YWluczpjP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxjPXRbMV07cmV0dXJuIShyPT09aXx8cjxufHxyPmF8fGM9PT1pfHxjPG98fGM+c3x8ZSYmbCh0KSl9OmZ1bmN0aW9uKHQsZSl7dmFyIGw9dFswXSxjPXRbMV07aWYobD09PWl8fGw8bnx8bD5hfHxjPT09aXx8YzxvfHxjPnMpcmV0dXJuITE7dmFyIHUsZixoLHAsZCxnPXIubGVuZ3RoLHY9clswXVswXSxtPXJbMF1bMV0seT0wO2Zvcih1PTE7dTxnO3UrKylpZihmPXYsaD1tLHY9clt1XVswXSxtPXJbdV1bMV0sIShsPChwPU1hdGgubWluKGYsdikpfHxsPk1hdGgubWF4KGYsdil8fGM+TWF0aC5tYXgoaCxtKSkpaWYoYzxNYXRoLm1pbihoLG0pKWwhPT1wJiZ5Kys7ZWxzZXtpZihjPT09KGQ9dj09PWY/YzpoKyhsLWYpKihtLWgpLyh2LWYpKSlyZXR1cm4gMSE9PXV8fCFlO2M8PWQmJmwhPT1wJiZ5Kyt9cmV0dXJuIHklMj09MX0saXNSZWN0OmMsZGVnZW5lcmF0ZTp1fX07dmFyIG89YS5pc1NlZ21lbnRCZW50PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsPXRbZV0sYz1bdFtyXVswXS1sWzBdLHRbcl1bMV0tbFsxXV0sdT1uKGMsYyksZj1NYXRoLnNxcnQodSksaD1bLWNbMV0vZixjWzBdL2ZdO2ZvcihhPWUrMTthPHI7YSsrKWlmKG89W3RbYV1bMF0tbFswXSx0W2FdWzFdLWxbMV1dLChzPW4obyxjKSk8MHx8cz51fHxNYXRoLmFicyhuKG8saCkpPmkpcmV0dXJuITA7cmV0dXJuITF9O2EuZmlsdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W3RbMF1dLG49MCxpPTA7ZnVuY3Rpb24gYShhKXt0LnB1c2goYSk7dmFyIHM9ci5sZW5ndGgsbD1uO3Iuc3BsaWNlKGkrMSk7Zm9yKHZhciBjPWwrMTtjPHQubGVuZ3RoO2MrKykoYz09PXQubGVuZ3RoLTF8fG8odCxsLGMrMSxlKSkmJihyLnB1c2godFtjXSksci5sZW5ndGg8cy0yJiYobj1jLGk9ci5sZW5ndGgtMSksbD1jKX10Lmxlbmd0aD4xJiZhKHQucG9wKCkpO3JldHVybnthZGRQdDphLHJhdzp0LGZpbHRlcmVkOnJ9fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4vbWF0cml4Ijo3MDZ9XSw3MTM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2hvd19ub193ZWJnbF9tc2ciKSxpPXQoInJlZ2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ITA7cmV0dXJuIGEuX2dsY2FudmFzLmVhY2goZnVuY3Rpb24obil7aWYoIW4ucmVnbCYmKCFuLnBpY2t8fGEuX2hhcygicGFyY29vcmRzIikpKXt0cnl7bi5yZWdsPWkoe2NhbnZhczp0aGlzLGF0dHJpYnV0ZXM6e2FudGlhbGlhczohbi5waWNrLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMH0scGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW98fHIuZGV2aWNlUGl4ZWxSYXRpbyxleHRlbnNpb25zOmV8fFtdfSl9Y2F0Y2godCl7bz0hMX1vJiZ0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZ1bmN0aW9uKGUpe3QmJnQuZW1pdCYmdC5lbWl0KCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdCIse2V2ZW50OmUsbGF5ZXI6bi5rZXl9KX0sITEpfX0pLG98fG4oe2NvbnRhaW5lcjphLl9nbGNvbnRhaW5lci5ub2RlKCl9KSxvfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL3Nob3dfbm9fd2ViZ2xfbXNnIjo3MjEscmVnbDo0ODZ9XSw3MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cCl7Zm9yKHZhciByPWUudG9TdHJpbmcoKSxuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXWluc3RhbmNlb2YgUmVnRXhwJiZ0W25dLnRvU3RyaW5nKCk9PT1yKXJldHVybiB0O3QucHVzaChlKX1lbHNlIWUmJjAhPT1lfHwtMSE9PXQuaW5kZXhPZihlKXx8dC5wdXNoKGUpO3JldHVybiB0fX0se31dLDcxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZzt2YXIgYT17YWRkOmZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG8sczt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHM9dC51bmRvUXVldWUuaW5kZXgsdC5hdXRvcGxheT90LnVuZG9RdWV1ZS5pblNlcXVlbmNlfHwodC5hdXRvcGxheT0hMSk6KCF0LnVuZG9RdWV1ZS5zZXF1ZW5jZXx8dC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT8obz17dW5kbzp7Y2FsbHM6W10sYXJnczpbXX0scmVkbzp7Y2FsbHM6W10sYXJnczpbXX19LHQudW5kb1F1ZXVlLnF1ZXVlLnNwbGljZShzLHQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aC1zLG8pLHQudW5kb1F1ZXVlLmluZGV4Kz0xKTpvPXQudW5kb1F1ZXVlLnF1ZXVlW3MtMV0sdC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT0hMSxvJiYoby51bmRvLmNhbGxzLnVuc2hpZnQoZSksby51bmRvLmFyZ3MudW5zaGlmdChyKSxvLnJlZG8uY2FsbHMucHVzaChuKSxvLnJlZG8uYXJncy5wdXNoKGEpKSx0LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGg+aS5xdWV1ZUxlbmd0aCYmKHQudW5kb1F1ZXVlLnF1ZXVlLnNoaWZ0KCksdC51bmRvUXVldWUuaW5kZXgtLSkpfSxzdGFydFNlcXVlbmNlOmZ1bmN0aW9uKHQpe3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0sdC51bmRvUXVldWUuc2VxdWVuY2U9ITAsdC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT0hMH0sc3RvcFNlcXVlbmNlOmZ1bmN0aW9uKHQpe3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0sdC51bmRvUXVldWUuc2VxdWVuY2U9ITEsdC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT0hMX0sdW5kbzpmdW5jdGlvbih0KXt2YXIgZSxyO2lmKHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXQuZnJhbWV3b3JrLnVuZG8oKTtlbHNlIGlmKCEodm9pZCAwPT09dC51bmRvUXVldWV8fGlzTmFOKHQudW5kb1F1ZXVlLmluZGV4KXx8dC51bmRvUXVldWUuaW5kZXg8PTApKXtmb3IodC51bmRvUXVldWUuaW5kZXgtLSxlPXQudW5kb1F1ZXVlLnF1ZXVlW3QudW5kb1F1ZXVlLmluZGV4XSx0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPGUudW5kby5jYWxscy5sZW5ndGg7cisrKWEucGxvdERvKHQsZS51bmRvLmNhbGxzW3JdLGUudW5kby5hcmdzW3JdKTt0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLHQuYXV0b3BsYXk9ITF9fSxyZWRvOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYodC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXIpdC5mcmFtZXdvcmsucmVkbygpO2Vsc2UgaWYoISh2b2lkIDA9PT10LnVuZG9RdWV1ZXx8aXNOYU4odC51bmRvUXVldWUuaW5kZXgpfHx0LnVuZG9RdWV1ZS5pbmRleD49dC51bmRvUXVldWUucXVldWUubGVuZ3RoKSl7Zm9yKGU9dC51bmRvUXVldWUucXVldWVbdC51bmRvUXVldWUuaW5kZXhdLHQudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITAscj0wO3I8ZS5yZWRvLmNhbGxzLmxlbmd0aDtyKyspYS5wbG90RG8odCxlLnJlZG8uY2FsbHNbcl0sZS5yZWRvLmFyZ3Nbcl0pO3QudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITEsdC5hdXRvcGxheT0hMSx0LnVuZG9RdWV1ZS5pbmRleCsrfX19O2EucGxvdERvPWZ1bmN0aW9uKHQsZSxyKXt0LmF1dG9wbGF5PSEwLHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsaT1bXSxhPTA7YTxlLmxlbmd0aDthKyspcj1lW2FdLGlbYV09cj09PXQ/cjoib2JqZWN0Ij09dHlwZW9mIHI/QXJyYXkuaXNBcnJheShyKT9uLmV4dGVuZERlZXAoW10scik6bi5leHRlbmREZWVwQWxsKHt9LHIpOnI7cmV0dXJuIGl9KHQsciksZS5hcHBseShudWxsLHIpfSxlLmV4cG9ydHM9YX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciOjczNn1dLDcxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmNvdW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9KGV8fCIiKSsocj8iIjoiJCIpLGE9ITE9PT1uPyIiOiJeIjtyZXR1cm4ieHkiPT09dD9uZXcgUmVnRXhwKGErIngoWzItOV18WzEtOV1bMC05XSspP3koWzItOV18WzEtOV1bMC05XSspPyIraSk6bmV3IFJlZ0V4cChhK3QrIihbMi05XXxbMS05XVswLTldKyk/IitpKX19LHt9XSw3MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49L14oLiopKFwuW15cLlxbXF1dK3xcW1xkXF0pJC8saT0vXlteXC5cW1xdXSskLztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IoO2U7KXt2YXIgcj10Lm1hdGNoKG4pO2lmKHIpdD1yWzFdO2Vsc2V7aWYoIXQubWF0Y2goaSkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVsYXRpdmVBdHRyIGNhbGw6IitbdCxlXSk7dD0iIn1pZigiXiIhPT1lLmNoYXJBdCgwKSlicmVhaztlPWUuc2xpY2UoMSl9cmV0dXJuIHQmJiJbIiE9PWUuY2hhckF0KDApP3QrIi4iK2U6dCtlfX0se31dLDcxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheSxpPXQoIi4vaXNfcGxhaW5fb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIGEgaW4gcil7dmFyIG89clthXSxzPWVbYV07aWYocyE9PW8paWYoIl8iPT09YS5jaGFyQXQoMCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBvKXtpZihhIGluIGUpY29udGludWU7ZVthXT1vfWVsc2UgaWYobihvKSYmbihzKSYmaShvWzBdKSl7aWYoImN1c3RvbWRhdGEiPT09YXx8ImlkcyI9PT1hKWNvbnRpbnVlO2Zvcih2YXIgbD1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCksYz0wO2M8bDtjKyspc1tjXSE9PW9bY10mJmkob1tjXSkmJmkoc1tjXSkmJnQoc1tjXSxvW2NdKX1lbHNlIGkobykmJmkocykmJih0KHMsbyksT2JqZWN0LmtleXMocykubGVuZ3RofHxkZWxldGUgZVthXSl9fX0seyIuL2FycmF5Ijo2ODMsIi4vaXNfcGxhaW5fb2JqZWN0Ijo3MDF9XSw3MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vbG9nZ2VycyIpLGE9dCgiLi9pZGVudGl0eSIpO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdDxlfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQ+ZX1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQ+PWV9ci5maW5kQmluPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUuc3RhcnQpKXJldHVybiByP01hdGguY2VpbCgodC1lLnN0YXJ0KS9lLnNpemUtMWUtOSktMTpNYXRoLmZsb29yKCh0LWUuc3RhcnQpL2Uuc2l6ZSsxZS05KTt2YXIgYSx1LGY9MCxoPWUubGVuZ3RoLHA9MCxkPWg+MT8oZVtoLTFdLWVbMF0pLyhoLTEpOjE7Zm9yKHU9ZD49MD9yP286czpyP2M6bCx0Kz0xZS05KmQqKHI/LTE6MSkqKGQ+PTA/MTotMSk7ZjxoJiZwKys8MTAwOyl1KGVbYT1NYXRoLmZsb29yKChmK2gpLzIpXSx0KT9mPWErMTpoPWE7cmV0dXJuIHA+OTAmJmkubG9nKCJMb25nIGJpbmFyeSBzZWFyY2guLi4iKSxmLTF9LHIuc29ydGVyQXNjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0sci5zb3J0ZXJEZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSxyLmRpc3RpbmN0VmFscz1mdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCk7ZS5zb3J0KHIuc29ydGVyQXNjKTtmb3IodmFyIG49ZS5sZW5ndGgtMSxpPWVbbl0tZVswXXx8MSxhPWkvKG58fDEpLzFlNCxvPVtlWzBdXSxzPTA7czxuO3MrKyllW3MrMV0+ZVtzXSthJiYoaT1NYXRoLm1pbihpLGVbcysxXS1lW3NdKSxvLnB1c2goZVtzKzFdKSk7cmV0dXJue3ZhbHM6byxtaW5EaWZmOml9fSxyLnJvdW5kVXA9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPTAsYT1lLmxlbmd0aC0xLG89MCxzPXI/MDoxLGw9cj8xOjAsYz1yP01hdGguY2VpbDpNYXRoLmZsb29yO2k8YSYmbysrPDEwMDspZVtuPWMoKGkrYSkvMildPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfSxyLnNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1lKHRbaV0sdFtpLTFdKTtpZihhPDA/cj0xOmE+MCYmKG49MSksciYmbilyZXR1cm4gdC5zb3J0KGUpfXJldHVybiBuP3Q6dC5yZXZlcnNlKCl9LHIuZmluZEluZGV4T2ZNaW49ZnVuY3Rpb24odCxlKXtlPWV8fGE7Zm9yKHZhciByLG49MS8wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89ZSh0W2ldKTtvPG4mJihuPW8scj1pKX1yZXR1cm4gcn19LHsiLi9pZGVudGl0eSI6Njk5LCIuL2xvZ2dlcnMiOjcwNCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDcyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsodC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoImN1cnNvci0iKSYmdC5jbGFzc2VkKGUsITEpfSksZSYmdC5jbGFzc2VkKCJjdXJzb3ItIitlLCEwKX19LHt9XSw3MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGk9ZnVuY3Rpb24oKXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCkiZnVuY3Rpb24iPT10eXBlb2YgdFtlXSYmKHRbZV09aSk7dC5kZXN0cm95PWZ1bmN0aW9uKCl7dC5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmNvbnRhaW5lcil9O3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuY2xhc3NOYW1lPSJuby13ZWJnbCIsci5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHIuc3R5bGUuZm9udFNpemU9IjI0cHgiLHIuc3R5bGUuY29sb3I9bi5kZWZhdWx0c1swXSxyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS5sZWZ0PXIuc3R5bGUudG9wPSIwcHgiLHIuc3R5bGUud2lkdGg9ci5zdHlsZS5oZWlnaHQ9IjEwMCUiLHIuc3R5bGVbImJhY2tncm91bmQtY29sb3IiXT1uLmxpZ2h0TGluZSxyLnN0eWxlWyJ6LWluZGV4Il09MzA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO3JldHVybiBhLnRleHRDb250ZW50PSJXZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlciAtIHZpc2l0IGh0dHBzOi8vZ2V0LndlYmdsLm9yZyBmb3IgbW9yZSBpbmZvIixhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsYS5zdHlsZS50b3A9IjUwJSIsYS5zdHlsZS5sZWZ0PSI1MCUiLGEuc3R5bGUuaGVpZ2h0PSIzMCUiLGEuc3R5bGUud2lkdGg9IjUwJSIsYS5zdHlsZS5tYXJnaW49Ii0xNSUgMCAwIC0yNSUiLHIuYXBwZW5kQ2hpbGQoYSksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQociksdC5jb250YWluZXIuc3R5bGUuYmFja2dyb3VuZD0iI0ZGRkZGRiIsdC5jb250YWluZXIub25jbGljaz1mdW5jdGlvbigpe3dpbmRvdy5vcGVuKCJodHRwczovL2dldC53ZWJnbC5vcmciKX0sITF9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjU3N31dLDcyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ci5hZ2dOdW1zPWZ1bmN0aW9uKHQsZSxhLG8pe3ZhciBzLGw7aWYoKCFvfHxvPmEubGVuZ3RoKSYmKG89YS5sZW5ndGgpLG4oZSl8fChlPSExKSxpKGFbMF0pKXtmb3IobD1uZXcgQXJyYXkobykscz0wO3M8bztzKyspbFtzXT1yLmFnZ051bXModCxlLGFbc10pO2E9bH1mb3Iocz0wO3M8bztzKyspbihlKT9uKGFbc10pJiYoZT10KCtlLCthW3NdKSk6ZT1hW3NdO3JldHVybiBlfSxyLmxlbj1mdW5jdGlvbih0KXtyZXR1cm4gci5hZ2dOdW1zKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9LDAsdCl9LHIubWVhbj1mdW5jdGlvbih0LGUpe3JldHVybiBlfHwoZT1yLmxlbih0KSksci5hZ2dOdW1zKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0sMCx0KS9lfSxyLm1pZFJhbmdlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQmJjAhPT10Lmxlbmd0aClyZXR1cm4oci5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdCkrci5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCkpLzJ9LHIudmFyaWFuY2U9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBlfHwoZT1yLmxlbih0KSksbihpKXx8KGk9ci5tZWFuKHQsZSkpLHIuYWdnTnVtcyhmdW5jdGlvbih0LGUpe3JldHVybiB0K01hdGgucG93KGUtaSwyKX0sMCx0KS9lfSxyLnN0ZGV2PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5zcXJ0KHIudmFyaWFuY2UodCxlLG4pKX0sci5pbnRlcnA9ZnVuY3Rpb24odCxlKXtpZighbihlKSl0aHJvdyJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXIiO2lmKChlPWUqdC5sZW5ndGgtLjUpPDApcmV0dXJuIHRbMF07aWYoZT50Lmxlbmd0aC0xKXJldHVybiB0W3QubGVuZ3RoLTFdO3ZhciByPWUlMTtyZXR1cm4gcip0W01hdGguY2VpbChlKV0rKDEtcikqdFtNYXRoLmZsb29yKGUpXX19LHsiLi9hcnJheSI6NjgzLCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNzIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpOlswLDAsMCwxXX19LHsiY29sb3Itbm9ybWFsaXplIjoxMTB9XSw3MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2xpYiIpLGE9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxvPXQoIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkc7ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXX12YXIgbD0vKFteJF0qKShbJF0rW14kXSpbJF0rKShbXiRdKikvO3IuY29udmVydFRvVHNwYW5zPWZ1bmN0aW9uKHQsZSxNKXt2YXIgUz10LnRleHQoKSxDPSF0LmF0dHIoImRhdGEtbm90ZXgiKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBNYXRoSmF4JiZTLm1hdGNoKGwpLEw9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSk7aWYoIUwuZW1wdHkoKSl7dmFyIHo9dC5hdHRyKCJjbGFzcyIpP3QuYXR0cigiY2xhc3MiKS5zcGxpdCgiICIpWzBdOiJ0ZXh0IjtyZXR1cm4geis9Ii1tYXRoIixMLnNlbGVjdEFsbCgic3ZnLiIreikucmVtb3ZlKCksTC5zZWxlY3RBbGwoImcuIit6KyItZ3JvdXAiKS5yZW1vdmUoKSx0LnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6UywiZGF0YS1tYXRoIjoiTiJ9KSxDPyhlJiZlLl9wcm9taXNlc3x8W10pLnB1c2gobmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKTt2YXIgcj1wYXJzZUludCh0Lm5vZGUoKS5zdHlsZS5mb250U2l6ZSwxMCksYT17Zm9udFNpemU6cn07IWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHMsbDtNYXRoSmF4Lkh1Yi5RdWV1ZShmdW5jdGlvbigpe3JldHVybiBvPWkuZXh0ZW5kRGVlcEFsbCh7fSxNYXRoSmF4Lkh1Yi5jb25maWcpLHM9TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSx2b2lkIDAhPT1NYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5JiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT0wKSxNYXRoSmF4Lkh1Yi5Db25maWcoe21lc3NhZ2VTdHlsZToibm9uZSIsdGV4MmpheDp7aW5saW5lTWF0aDpbWyIkIiwiJCJdLFsiXFwoIiwiXFwpIl1dfSxkaXNwbGF5QWxpZ246ImxlZnQifSl9LGZ1bmN0aW9uKCl7aWYoIlNWRyIhPT0oYT1NYXRoSmF4Lkh1Yi5jb25maWcubWVudVNldHRpbmdzLnJlbmRlcmVyKSlyZXR1cm4gTWF0aEpheC5IdWIuc2V0UmVuZGVyZXIoIlNWRyIpfSxmdW5jdGlvbigpe3ZhciByPSJtYXRoLW91dHB1dC0iK2kucmFuZHN0cih7fSw2NCk7cmV0dXJuIGw9bi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoe2lkOnJ9KS5zdHlsZSh7dmlzaWJpbGl0eToiaGlkZGVuIixwb3NpdGlvbjoiYWJzb2x1dGUifSkuc3R5bGUoeyJmb250LXNpemUiOmUuZm9udFNpemUrInB4In0pLnRleHQodC5yZXBsYWNlKGMsIlxcbHQgIikucmVwbGFjZSh1LCJcXGd0ICIpKSxNYXRoSmF4Lkh1Yi5UeXBlc2V0KGwubm9kZSgpKX0sZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCgiYm9keSIpLnNlbGVjdCgiI01hdGhKYXhfU1ZHX2dseXBocyIpO2lmKGwuc2VsZWN0KCIuTWF0aEpheF9TVkciKS5lbXB0eSgpfHwhbC5zZWxlY3QoInN2ZyIpLm5vZGUoKSlpLmxvZygiVGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSB0ZXggc3ludGF4LiIsdCkscigpO2Vsc2V7dmFyIG89bC5zZWxlY3QoInN2ZyIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyKGwuc2VsZWN0KCIuTWF0aEpheF9TVkciKSxlLG8pfWlmKGwucmVtb3ZlKCksIlNWRyIhPT1hKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcihhKX0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09cyYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9cyksTWF0aEpheC5IdWIuQ29uZmlnKG8pfSl9KENbMl0sYSxmdW5jdGlvbihuLGksYSl7TC5zZWxlY3RBbGwoInN2Zy4iK3opLnJlbW92ZSgpLEwuc2VsZWN0QWxsKCJnLiIreisiLWdyb3VwIikucmVtb3ZlKCk7dmFyIG89biYmbi5zZWxlY3QoInN2ZyIpO2lmKCFvfHwhby5ub2RlKCkpcmV0dXJuIE8oKSx2b2lkIGUoKTt2YXIgbD1MLmFwcGVuZCgiZyIpLmNsYXNzZWQoeisiLWdyb3VwIiwhMCkuYXR0cih7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsImRhdGEtdW5mb3JtYXR0ZWQiOlMsImRhdGEtbWF0aCI6IlkifSk7bC5ub2RlKCkuYXBwZW5kQ2hpbGQoby5ub2RlKCkpLGkmJmkubm9kZSgpJiZvLm5vZGUoKS5pbnNlcnRCZWZvcmUoaS5ub2RlKCkuY2xvbmVOb2RlKCEwKSxvLm5vZGUoKS5maXJzdENoaWxkKSxvLmF0dHIoe2NsYXNzOnosaGVpZ2h0OmEuaGVpZ2h0LHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIG1lZXQifSkuc3R5bGUoe292ZXJmbG93OiJ2aXNpYmxlIiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBjPXQubm9kZSgpLnN0eWxlLmZpbGx8fCJibGFjayI7by5zZWxlY3QoImciKS5hdHRyKHtmaWxsOmMsc3Ryb2tlOmN9KTt2YXIgdT1zKG8sIndpZHRoIiksZj1zKG8sImhlaWdodCIpLGg9K3QuYXR0cigieCIpLXUqe3N0YXJ0OjAsbWlkZGxlOi41LGVuZDoxfVt0LmF0dHIoInRleHQtYW5jaG9yIil8fCJzdGFydCJdLHA9LShyfHxzKHQsImhlaWdodCIpKS80OyJ5Ij09PXpbMF0/KGwuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitbLTkwLCt0LmF0dHIoIngiKSwrdC5hdHRyKCJ5IildKyIpIHRyYW5zbGF0ZSgiK1stdS8yLHAtZi8yXSsiKSJ9KSxvLmF0dHIoe3g6K3QuYXR0cigieCIpLHk6K3QuYXR0cigieSIpfSkpOiJsIj09PXpbMF0/by5hdHRyKHt4OnQuYXR0cigieCIpLHk6cC1mLzJ9KToiYSI9PT16WzBdJiYwIT09ei5pbmRleE9mKCJhdGl0bGUiKT9vLmF0dHIoe3g6MCx5OnB9KTpvLmF0dHIoe3g6aCx5Oit0LmF0dHIoInkiKStwLWYvMn0pLE0mJk0uY2FsbCh0LGwpLGUobCl9KX0pKTpPKCksdH1mdW5jdGlvbiBPKCl7TC5lbXB0eSgpfHwoej10LmF0dHIoImNsYXNzIikrIi1tYXRoIixMLnNlbGVjdCgic3ZnLiIreikucmVtb3ZlKCkpLHQudGV4dCgiIikuc3R5bGUoIndoaXRlLXNwYWNlIiwicHJlIiksZnVuY3Rpb24odCxlKXtlPWUucmVwbGFjZSh2LCIgIik7dmFyIHIscz0hMSxsPVtdLGM9LTE7ZnVuY3Rpb24gdSgpe2MrKzt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5zdmcsInRzcGFuIik7bi5zZWxlY3QoZSkuYXR0cih7Y2xhc3M6ImxpbmUiLGR5OmMqbysiZW0ifSksdC5hcHBlbmRDaGlsZChlKSxyPWU7dmFyIGk9bDtpZihsPVt7bm9kZTplfV0saS5sZW5ndGg+MSlmb3IodmFyIHM9MTtzPGkubGVuZ3RoO3MrKylNKGlbc10pfWZ1bmN0aW9uIE0odCl7dmFyIGUsaT10LnR5cGUsbz17fTtpZigiYSI9PT1pKXtlPSJhIjt2YXIgcz10LnRhcmdldCxjPXQuaHJlZix1PXQucG9wdXA7YyYmKG89eyJ4bGluazp4bGluazpzaG93IjoiX2JsYW5rIj09PXN8fCJfIiE9PXMuY2hhckF0KDApPyJuZXciOiJyZXBsYWNlIix0YXJnZXQ6cywieGxpbms6eGxpbms6aHJlZiI6Y30sdSYmKG8ub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCwiJyt1KyciKTtyZXR1cm4gZmFsc2U7JykpfWVsc2UgZT0idHNwYW4iO3Quc3R5bGUmJihvLnN0eWxlPXQuc3R5bGUpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLnN2ZyxlKTtpZigic3VwIj09PWl8fCJzdWIiPT09aSl7UyhyLGQpLHIuYXBwZW5kQ2hpbGQoZik7dmFyIGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGEuc3ZnLCJ0c3BhbiIpO1MoZyxkKSxuLnNlbGVjdChnKS5hdHRyKCJkeSIscFtpXSksby5keT1oW2ldLHIuYXBwZW5kQ2hpbGQoZiksci5hcHBlbmRDaGlsZChnKX1lbHNlIHIuYXBwZW5kQ2hpbGQoZik7bi5zZWxlY3QoZikuYXR0cihvKSxyPXQubm9kZT1mLGwucHVzaCh0KX1mdW5jdGlvbiBTKHQsZSl7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZnVuY3Rpb24gQyh0KXtpZigxIT09bC5sZW5ndGgpe3ZhciBuPWwucG9wKCk7dCE9PW4udHlwZSYmaS5sb2coIlN0YXJ0IHRhZyA8IituLnR5cGUrIj4gZG9lc250IG1hdGNoIGVuZCB0YWcgPCIrdCsiPi4gUHJldGVuZGluZyBpdCBkaWQgbWF0Y2guIixlKSxyPWxbbC5sZW5ndGgtMV0ubm9kZX1lbHNlIGkubG9nKCJJZ25vcmluZyB1bmV4cGVjdGVkIGVuZCB0YWcgPC8iK3QrIj4uIixlKX14LnRlc3QoZSk/dSgpOihyPXQsbD1be25vZGU6dH1dKTtmb3IodmFyIEw9ZS5zcGxpdChtKSx6PTA7ejxMLmxlbmd0aDt6Kyspe3ZhciBPPUxbel0sST1PLm1hdGNoKHkpLEQ9SSYmSVsyXS50b0xvd2VyQ2FzZSgpLFA9ZltEXTtpZigiYnIiPT09RCl1KCk7ZWxzZSBpZih2b2lkIDA9PT1QKVMocixFKE8pKTtlbHNlIGlmKElbMV0pQyhEKTtlbHNle3ZhciBSPUlbNF0sRj17dHlwZTpEfSxCPVQoUixiKTtpZihCPyhCPUIucmVwbGFjZShBLCIkMSBmaWxsOiIpLFAmJihCKz0iOyIrUCkpOlAmJihCPVApLEImJihGLnN0eWxlPUIpLCJhIj09PUQpe3M9ITA7dmFyIE49VChSLF8pO2lmKE4pe3ZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtqLmhyZWY9TiwtMSE9PWcuaW5kZXhPZihqLnByb3RvY29sKSYmKEYuaHJlZj1lbmNvZGVVUkkoZGVjb2RlVVJJKE4pKSxGLnRhcmdldD1UKFIsdyl8fCJfYmxhbmsiLEYucG9wdXA9VChSLGspKX19TShGKX19cmV0dXJuIHN9KHQubm9kZSgpLFMpJiZ0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHIucG9zaXRpb25UZXh0KHQpLE0mJk0uY2FsbCh0KX19O3ZhciBjPS8oPHwmbHQ7fCYjNjA7KS9nLHU9Lyg+fCZndDt8JiM2MjspL2c7dmFyIGY9e3N1cDoiZm9udC1zaXplOjcwJSIsc3ViOiJmb250LXNpemU6NzAlIixiOiJmb250LXdlaWdodDpib2xkIixpOiJmb250LXN0eWxlOml0YWxpYyIsYToiY3Vyc29yOnBvaW50ZXIiLHNwYW46IiIsZW06ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQifSxoPXtzdWI6IjAuM2VtIixzdXA6Ii0wLjZlbSJ9LHA9e3N1YjoiLTAuMjFlbSIsc3VwOiIwLjQyZW0ifSxkPSJcdTIwMGIiLGc9WyJodHRwOiIsImh0dHBzOiIsIm1haWx0bzoiLCIiLHZvaWQgMCwiOiJdLHY9LyhcclxuP3xcbikvZyxtPS8oPFtePD5dKj4pLyx5PS88KFwvPykoW14gPl0qKShccysoLiopKT8+L2kseD0vPGJyKFxzKy4qKT8+L2ksYj0vKF58W1xzIiddKXN0eWxlXHMqPVxzKigiKFteIl0qKTs/InwnKFteJ10qKTs/JykvaSxfPS8oXnxbXHMiJ10paHJlZlxzKj1ccyooIihbXiJdKikifCcoW14nXSopJykvaSx3PS8oXnxbXHMiJ10pdGFyZ2V0XHMqPVxzKigiKFteIlxzXSopInwnKFteJ1xzXSopJykvaSxrPS8oXnxbXHMiJ10pcG9wdXBccyo9XHMqKCIoW1x3PSxdKikifCcoW1x3PSxdKiknKS9pO2Z1bmN0aW9uIFQodCxlKXtpZighdClyZXR1cm4gbnVsbDt2YXIgcj10Lm1hdGNoKGUpLG49ciYmKHJbM118fHJbNF0pO3JldHVybiBuJiZFKG4pfXZhciBBPS8oXnw7KVxzKmNvbG9yOi87ci5wbGFpblRleHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dm9pZCAwIT09KGU9ZXx8e30pLmxlbiYmLTEhPT1lLmxlbj9lLmxlbjoxLzAsbj12b2lkIDAhPT1lLmFsbG93ZWRUYWdzP2UuYWxsb3dlZFRhZ3M6WyJiciJdLGk9Ii4uLiIubGVuZ3RoLGE9dC5zcGxpdChtKSxvPVtdLHM9IiIsbD0wLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHU9YVtjXSxmPXUubWF0Y2goeSksaD1mJiZmWzJdLnRvTG93ZXJDYXNlKCk7aWYoaCktMSE9PW4uaW5kZXhPZihoKSYmKG8ucHVzaCh1KSxzPWgpO2Vsc2V7dmFyIHA9dS5sZW5ndGg7aWYobCtwPHIpby5wdXNoKHUpLGwrPXA7ZWxzZSBpZihsPHIpe3ZhciBkPXItbDtzJiYoImJyIiE9PXN8fGQ8PWl8fHA8PWkpJiZvLnBvcCgpLHI+aT9vLnB1c2godS5zdWJzdHIoMCxkLWkpKyIuLi4iKTpvLnB1c2godS5zdWJzdHIoMCxkKSk7YnJlYWt9cz0iIn19cmV0dXJuIG8uam9pbigiIil9O3ZhciBNPXttdToiXHUwM2JjIixhbXA6IiYiLGx0OiI8IixndDoiPiIsbmJzcDoiXHhhMCIsdGltZXM6Ilx4ZDciLHBsdXNtbjoiXHhiMSIsZGVnOiJceGIwIn0sUz0vJigjXGQrfCN4W1xkYS1mQS1GXSt8W2Etel0rKTsvZztmdW5jdGlvbiBFKHQpe3JldHVybiB0LnJlcGxhY2UoUyxmdW5jdGlvbih0LGUpe3JldHVybigiIyI9PT1lLmNoYXJBdCgwKT9mdW5jdGlvbih0KXtpZih0PjExMTQxMTEpcmV0dXJuO3ZhciBlPVN0cmluZy5mcm9tQ29kZVBvaW50O2lmKGUpcmV0dXJuIGUodCk7dmFyIHI9U3RyaW5nLmZyb21DaGFyQ29kZTtyZXR1cm4gdDw9NjU1MzU/cih0KTpyKDU1MjMyKyh0Pj4xMCksdCUxMDI0KzU2MzIwKX0oIngiPT09ZS5jaGFyQXQoMSk/cGFyc2VJbnQoZS5zdWJzdHIoMiksMTYpOnBhcnNlSW50KGUuc3Vic3RyKDEpLDEwKSk6TVtlXSl8fHR9KX1mdW5jdGlvbiBDKHQsZSxyKXt2YXIgbixpLGEsbz1yLmhvcml6b250YWxBbGlnbixzPXIudmVydGljYWxBbGlnbnx8InRvcCIsbD10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBpPSJib3R0b20iPT09cz9mdW5jdGlvbigpe3JldHVybiBsLmJvdHRvbS1uLmhlaWdodH06Im1pZGRsZSI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGwudG9wKyhsLmhlaWdodC1uLmhlaWdodCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gbC50b3B9LGE9InJpZ2h0Ij09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5yaWdodC1uLndpZHRofToiY2VudGVyIj09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5sZWZ0KyhsLndpZHRoLW4ud2lkdGgpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGwubGVmdH0sZnVuY3Rpb24oKXtyZXR1cm4gbj10aGlzLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLnN0eWxlKHt0b3A6aSgpLWMudG9wKyJweCIsbGVmdDphKCktYy5sZWZ0KyJweCIsInotaW5kZXgiOjFlM30pLHRoaXN9fXIuY29udmVydEVudGl0aWVzPUUsci5saW5lQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuc2l6ZSgpfHwxfSxyLnBvc2l0aW9uVGV4dD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2Z1bmN0aW9uIGkoZSxyKXtyZXR1cm4gdm9pZCAwPT09cj9udWxsPT09KHI9dC5hdHRyKGUpKSYmKHQuYXR0cihlLDApLHI9MCk6dC5hdHRyKGUscikscn12YXIgYT1pKCJ4IixlKSxvPWkoInkiLHIpOyJ0ZXh0Ij09PXRoaXMubm9kZU5hbWUmJnQuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuYXR0cih7eDphLHk6b30pfSl9LHIubWFrZUVkaXRhYmxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5nZCxpPWUuZGVsZWdhdGUsYT1uLmRpc3BhdGNoKCJlZGl0IiwiaW5wdXQiLCJjYW5jZWwiKSxvPWl8fHQ7aWYodC5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjppPyJub25lIjoiYWxsIn0pLDEhPT10LnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoImJvbyIpO2Z1bmN0aW9uIHMoKXshZnVuY3Rpb24oKXt2YXIgaT1uLnNlbGVjdChyKS5zZWxlY3QoIi5zdmctY29udGFpbmVyIiksbz1pLmFwcGVuZCgiZGl2Iikscz10Lm5vZGUoKS5zdHlsZSxjPXBhcnNlRmxvYXQocy5mb250U2l6ZXx8MTIpLHU9ZS50ZXh0O3ZvaWQgMD09PXUmJih1PXQuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpKTtvLmNsYXNzZWQoInBsdWdpbi1lZGl0YWJsZSBlZGl0YWJsZSIsITApLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLCJmb250LWZhbWlseSI6cy5mb250RmFtaWx5fHwiQXJpYWwiLCJmb250LXNpemUiOmMsY29sb3I6ZS5maWxsfHxzLmZpbGx8fCJibGFjayIsb3BhY2l0eToxLCJiYWNrZ3JvdW5kLWNvbG9yIjplLmJhY2tncm91bmR8fCJ0cmFuc3BhcmVudCIsb3V0bGluZToiI2ZmZmZmZjMzIDFweCBzb2xpZCIsbWFyZ2luOlstYy84KzEsMCwwLC0xXS5qb2luKCJweCAiKSsicHgiLHBhZGRpbmc6IjAiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9KS5hdHRyKHtjb250ZW50ZWRpdGFibGU6ITB9KS50ZXh0KHUpLmNhbGwoQyh0LGksZSkpLm9uKCJibHVyIixmdW5jdGlvbigpe3IuX2VkaXRpbmc9ITEsdC50ZXh0KHRoaXMudGV4dENvbnRlbnQpLnN0eWxlKHtvcGFjaXR5OjF9KTt2YXIgZSxpPW4uc2VsZWN0KHRoaXMpLmF0dHIoImNsYXNzIik7KGU9aT8iLiIraS5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChlKS5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIG89dGhpcy50ZXh0Q29udGVudDtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkucmVtb3ZlKCksbi5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIixudWxsKSxhLmVkaXQuY2FsbCh0LG8pfSkub24oImZvY3VzIixmdW5jdGlvbigpe3ZhciB0PXRoaXM7ci5fZWRpdGluZz0hMCxuLnNlbGVjdChkb2N1bWVudCkub24oIm1vdXNldXAiLGZ1bmN0aW9uKCl7aWYobi5ldmVudC50YXJnZXQ9PT10KXJldHVybiExO2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vLm5vZGUoKSYmby5ub2RlKCkuYmx1cigpfSl9KS5vbigia2V5dXAiLGZ1bmN0aW9uKCl7Mjc9PT1uLmV2ZW50LndoaWNoPyhyLl9lZGl0aW5nPSExLHQuc3R5bGUoe29wYWNpdHk6MX0pLG4uc2VsZWN0KHRoaXMpLnN0eWxlKHtvcGFjaXR5OjB9KS5vbigiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pLnRyYW5zaXRpb24oKS5yZW1vdmUoKSxhLmNhbmNlbC5jYWxsKHQsdGhpcy50ZXh0Q29udGVudCkpOihhLmlucHV0LmNhbGwodCx0aGlzLnRleHRDb250ZW50KSxuLnNlbGVjdCh0aGlzKS5jYWxsKEModCxpLGUpKSl9KS5vbigia2V5ZG93biIsZnVuY3Rpb24oKXsxMz09PW4uZXZlbnQud2hpY2gmJnRoaXMuYmx1cigpfSkuY2FsbChsKX0oKSx0LnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgaSxzPW8uYXR0cigiY2xhc3MiKTsoaT1zPyIuIitzLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmbi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KGkpLnN0eWxlKHtvcGFjaXR5OjB9KX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQubm9kZSgpLHI9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyLnNlbGVjdE5vZGVDb250ZW50cyhlKTt2YXIgbj13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7bi5yZW1vdmVBbGxSYW5nZXMoKSxuLmFkZFJhbmdlKHIpLGUuZm9jdXMoKX1yZXR1cm4gZS5pbW1lZGlhdGU/cygpOm8ub24oImNsaWNrIixzKSxuLnJlYmluZCh0LGEsIm9uIil9fSx7Ii4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY3MiwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY3OCwiLi4vbGliIjo3MDAsZDM6MTU0fV0sNzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O2Z1bmN0aW9uIGkodCl7dCYmbnVsbCE9PXQudGltZXImJihjbGVhclRpbWVvdXQodC50aW1lciksdC50aW1lcj1udWxsKX1yLnRocm90dGxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1uW3RdLG89RGF0ZS5ub3coKTtpZighYSl7Zm9yKHZhciBzIGluIG4pbltzXS50czxvLTZlNCYmZGVsZXRlIG5bc107YT1uW3RdPXt0czowLHRpbWVyOm51bGx9fWZ1bmN0aW9uIGwoKXtyKCksYS50cz1EYXRlLm5vdygpLGEub25Eb25lJiYoYS5vbkRvbmUoKSxhLm9uRG9uZT1udWxsKX1pKGEpLG8+YS50cytlP2woKTphLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtsKCksYS50aW1lcj1udWxsfSxlKX0sci5kb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07cmV0dXJuIGUmJmUudGltZXI/bmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIHI9ZS5vbkRvbmU7ZS5vbkRvbmU9ZnVuY3Rpb24oKXtyJiZyKCksdCgpLGUub25Eb25lPW51bGx9fSk6UHJvbWlzZS5yZXNvbHZlKCl9LHIuY2xlYXI9ZnVuY3Rpb24odCl7aWYodClpKG5bdF0pLGRlbGV0ZSBuW3RdO2Vsc2UgZm9yKHZhciBlIGluIG4pci5jbGVhcihlKX19LHt9XSw3MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PjApcmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMDt2YXIgcj1NYXRoLmxvZyhNYXRoLm1pbihlWzBdLGVbMV0pKS9NYXRoLkxOMTA7cmV0dXJuIG4ocil8fChyPU1hdGgubG9nKE1hdGgubWF4KGVbMF0sZVsxXSkpL01hdGguTE4xMC02KSxyfX0seyJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17fSxpPXQoIi4uL3Bsb3RzL2dlby9jb25zdGFudHMiKS5sb2NhdGlvbm1vZGVUb0xheWVyLGE9dCgidG9wb2pzb24tY2xpZW50IikuZmVhdHVyZTtuLmdldFRvcG9qc29uTmFtZT1mdW5jdGlvbih0KXtyZXR1cm5bdC5zY29wZS5yZXBsYWNlKC8gL2csIi0iKSwiXyIsdC5yZXNvbHV0aW9uLnRvU3RyaW5nKCksIm0iXS5qb2luKCIiKX0sbi5nZXRUb3BvanNvblBhdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlKyIuanNvbiJ9LG4uZ2V0VG9wb2pzb25GZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPWlbdC5sb2NhdGlvbm1vZGVdLG49ZS5vYmplY3RzW3JdO3JldHVybiBhKGUsbikuZmVhdHVyZXN9fSx7Ii4uL3Bsb3RzL2dlby9jb25zdGFudHMiOjc3NiwidG9wb2pzb24tY2xpZW50Ijo1MjR9XSw3Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJsb2NhbGUiLG5hbWU6ImVuLVVTIixkaWN0aW9uYXJ5OnsiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSI6IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUifSxmb3JtYXQ6e2RhdGU6IiVtLyVkLyVZIn19fSx7fV0sNzI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToibG9jYWxlIixuYW1lOiJlbiIsZGljdGlvbmFyeTp7IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiOiJDbGljayB0byBlbnRlciBDb2xvdXJzY2FsZSB0aXRsZSJ9LGZvcm1hdDp7ZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlZC8lbS8lWSIsdGltZToiJUg6JU06JVMiLGRlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLHllYXI6IiVZIixtb250aDoiJWIgJVkiLGRheU1vbnRoOiIlYiAlLWQiLGRheU1vbnRoWWVhcjoiJWIgJS1kLCAlWSJ9fX0se31dLDczMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGE9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KCJbIilbMF0scz0wO3M8YS5sZW5ndGg7cysrKWlmKChyPXQubWF0Y2goYVtzXSkpJiYwPT09ci5pbmRleCl7ZT1yWzBdO2JyZWFrfWlmKGV8fChlPWlbaS5pbmRleE9mKG8pXSksIWUpcmV0dXJuITE7dmFyIGw9dC5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiBsPyEhKHI9bC5tYXRjaCgvXlxbKDB8WzEtOV1bMC05XSopXF0oXC4oLispKT8kLykpJiZ7YXJyYXk6ZSxpbmRleDpOdW1iZXIoclsxXSkscHJvcGVydHk6clszXXx8IiJ9OnthcnJheTplLGluZGV4OiIiLHByb3BlcnR5OiIifX19LHsiLi4vcmVnaXN0cnkiOjgyOX1dLDczMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uZXh0ZW5kRmxhdCxhPW4uaXNQbGFpbk9iamVjdCxvPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsImNsZWFyQXhpc1R5cGVzIiwicGxvdCIsInN0eWxlIiwibWFya2VyU2l6ZSIsImNvbG9yYmFycyJdfSxzPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsInBsb3QiLCJsZWdlbmQiLCJ0aWNrcyIsImF4cmFuZ2UiLCJsYXlvdXRzdHlsZSIsIm1vZGViYXIiLCJjYW1lcmEiLCJhcnJheWRyYXciXX0sbD1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFsiZnVsbFJlcGxvdCJdKSxjPXMuZmxhZ3Muc2xpY2UoKS5jb25jYXQoImxheW91dFJlcGxvdCIpO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPSExO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuPWkoe30sdCk7Zm9yKHZhciBvIGluIG4pe3ZhciBzPW5bb107YShzKSYmKG5bb109aChzLGUscixvKSl9cmV0dXJuImZyb20tcm9vdCI9PT1yJiYobi5lZGl0VHlwZT1lKSxufWZ1bmN0aW9uIGgodCxlLHIsbil7aWYodC52YWxUeXBlKXt2YXIgYT1pKHt9LHQpO2lmKGEuZWRpdFR5cGU9ZSxBcnJheS5pc0FycmF5KHQuaXRlbXMpKXthLml0ZW1zPW5ldyBBcnJheSh0Lml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzx0Lml0ZW1zLmxlbmd0aDtvKyspYS5pdGVtc1tvXT1oKHQuaXRlbXNbb10sZSwiZnJvbS1yb290Iil9cmV0dXJuIGF9cmV0dXJuIGYodCxlLCJfIj09PW4uY2hhckF0KDApPyJuZXN0ZWQiOiJmcm9tLXJvb3QiKX1lLmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpzLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShsKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyJiYibm9uZSIhPT1yKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9LG92ZXJyaWRlQWxsOmZ9fSx7Ii4uL2xpYiI6NzAwfV0sNzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJnbC1tYXQ0L2Zyb21RdWF0IiksYT10KCIuLi9yZWdpc3RyeSIpLG89dCgiLi4vbGliIikscz10KCIuLi9wbG90cy9wbG90cyIpLGw9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksdT1sLmNsZWFuSWQsZj1sLmdldEZyb21UcmFjZSxoPWEudHJhY2VJcztmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYodFtlXT11KHIsbikpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPXRbZV0saT10LnRpdGxlJiZ0LnRpdGxlW3JdO24mJiFpJiYodC50aXRsZXx8KHQudGl0bGU9e30pLHQudGl0bGVbcl09dFtlXSxkZWxldGUgdFtlXSl9dCYmKCJzdHJpbmciIT10eXBlb2YgdC50aXRsZSYmIm51bWJlciIhPXR5cGVvZiB0LnRpdGxlfHwodC50aXRsZT17dGV4dDp0LnRpdGxlfSksZSgidGl0bGVmb250IiwiZm9udCIpLGUoInRpdGxlcG9zaXRpb24iLCJwb3NpdGlvbiIpLGUoInRpdGxlc2lkZSIsInNpZGUiKSxlKCJ0aXRsZW9mZnNldCIsIm9mZnNldCIpKX1mdW5jdGlvbiBnKHQpe2lmKCFvLmlzUGxhaW5PYmplY3QodCkpcmV0dXJuITE7dmFyIGU9dC5uYW1lO3JldHVybiBkZWxldGUgdC5uYW1lLGRlbGV0ZSB0LnNob3dsZWdlbmQsKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlKSYmU3RyaW5nKGUpfWZ1bmN0aW9uIHYodCxlLHIsbil7aWYociYmIW4pcmV0dXJuIHQ7aWYobiYmIXIpcmV0dXJuIGU7aWYoIXQudHJpbSgpKXJldHVybiBlO2lmKCFlLnRyaW0oKSlyZXR1cm4gdDt2YXIgaSxhPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IoaT0wO2k8YSYmdC5jaGFyQXQoaSk9PT1lLmNoYXJBdChpKTtpKyspO3JldHVybiB0LnN1YnN0cigwLGkpLnRyaW0oKX1mdW5jdGlvbiBtKHQpe3ZhciBlPSJtaWRkbGUiLHI9ImNlbnRlciI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYoLTEhPT10LmluZGV4T2YoInRvcCIpP2U9InRvcCI6LTEhPT10LmluZGV4T2YoImJvdHRvbSIpJiYoZT0iYm90dG9tIiksLTEhPT10LmluZGV4T2YoImxlZnQiKT9yPSJsZWZ0IjotMSE9PXQuaW5kZXhPZigicmlnaHQiKSYmKHI9InJpZ2h0IikpLGUrIiAiK3J9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlIGluIHQmJiJvYmplY3QiPT10eXBlb2YgdFtlXSYmMD09PU9iamVjdC5rZXlzKHRbZV0pLmxlbmd0aH1yLmNsZWFyUHJvbWlzZVF1ZXVlPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpJiZ0Ll9wcm9taXNlcy5sZW5ndGg+MCYmby5sb2coIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuIiksdC5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUsbjt0fHwodD17fSksdC54YXhpczEmJih0LnhheGlzfHwodC54YXhpcz10LnhheGlzMSksZGVsZXRlIHQueGF4aXMxKSx0LnlheGlzMSYmKHQueWF4aXN8fCh0LnlheGlzPXQueWF4aXMxKSxkZWxldGUgdC55YXhpczEpLHQuc2NlbmUxJiYodC5zY2VuZXx8KHQuc2NlbmU9dC5zY2VuZTEpLGRlbGV0ZSB0LnNjZW5lMSk7dmFyIGE9KHMuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW58fHt9KS5hdHRyUmVnZXgsbD0ocy5zdWJwbG90c1JlZ2lzdHJ5LnBvbGFyfHx7fSkuYXR0clJlZ2V4LGY9KHMuc3VicGxvdHNSZWdpc3RyeS50ZXJuYXJ5fHx7fSkuYXR0clJlZ2V4LGg9KHMuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LGc9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIHY9Z1tlXTtpZihhJiZhLnRlc3Qodikpe3ZhciBtPXRbdl07bS5hbmNob3ImJiJmcmVlIiE9PW0uYW5jaG9yJiYobS5hbmNob3I9dShtLmFuY2hvcikpLG0ub3ZlcmxheWluZyYmKG0ub3ZlcmxheWluZz11KG0ub3ZlcmxheWluZykpLG0udHlwZXx8KG0uaXNkYXRlP20udHlwZT0iZGF0ZSI6bS5pc2xvZz9tLnR5cGU9ImxvZyI6ITE9PT1tLmlzZGF0ZSYmITE9PT1tLmlzbG9nJiYobS50eXBlPSJsaW5lYXIiKSksIndpdGh6ZXJvIiE9PW0uYXV0b3JhbmdlJiYidG96ZXJvIiE9PW0uYXV0b3JhbmdlfHwobS5hdXRvcmFuZ2U9ITAsbS5yYW5nZW1vZGU9InRvemVybyIpLGRlbGV0ZSBtLmlzbG9nLGRlbGV0ZSBtLmlzZGF0ZSxkZWxldGUgbS5jYXRlZ29yaWVzLHkobSwiZG9tYWluIikmJmRlbGV0ZSBtLmRvbWFpbix2b2lkIDAhPT1tLmF1dG90aWNrJiYodm9pZCAwPT09bS50aWNrbW9kZSYmKG0udGlja21vZGU9bS5hdXRvdGljaz8iYXV0byI6ImxpbmVhciIpLGRlbGV0ZSBtLmF1dG90aWNrKSxkKG0pfWVsc2UgaWYobCYmbC50ZXN0KHYpKXtkKHRbdl0ucmFkaWFsYXhpcyl9ZWxzZSBpZihmJiZmLnRlc3Qodikpe3ZhciB4PXRbdl07ZCh4LmFheGlzKSxkKHguYmF4aXMpLGQoeC5jYXhpcyl9ZWxzZSBpZihoJiZoLnRlc3Qodikpe3ZhciBiPXRbdl0sXz1iLmNhbWVyYXBvc2l0aW9uO2lmKEFycmF5LmlzQXJyYXkoXykmJjQ9PT1fWzBdLmxlbmd0aCl7dmFyIHc9X1swXSxrPV9bMV0sVD1fWzJdLEE9aShbXSx3KSxNPVtdO2ZvcihuPTA7bjwzOysrbilNW25dPWtbbl0rVCpBWzIrNCpuXTtiLmNhbWVyYT17ZXllOnt4Ok1bMF0seTpNWzFdLHo6TVsyXX0sY2VudGVyOnt4OmtbMF0seTprWzFdLHo6a1syXX0sdXA6e3g6MCx5OjAsejoxfX0sZGVsZXRlIGIuY2FtZXJhcG9zaXRpb259ZChiLnhheGlzKSxkKGIueWF4aXMpLGQoYi56YXhpcyl9fXZhciBTPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8UztlKyspe3ZhciBFPXQuYW5ub3RhdGlvbnNbZV07by5pc1BsYWluT2JqZWN0KEUpJiYoRS5yZWYmJigicGFwZXIiPT09RS5yZWY/KEUueHJlZj0icGFwZXIiLEUueXJlZj0icGFwZXIiKToiZGF0YSI9PT1FLnJlZiYmKEUueHJlZj0ieCIsRS55cmVmPSJ5IiksZGVsZXRlIEUucmVmKSxwKEUsInhyZWYiKSxwKEUsInlyZWYiKSl9dmFyIEM9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPEM7ZSsrKXt2YXIgTD10LnNoYXBlc1tlXTtvLmlzUGxhaW5PYmplY3QoTCkmJihwKEwsInhyZWYiKSxwKEwsInlyZWYiKSl9dmFyIHo9dC5sZWdlbmQ7cmV0dXJuIHomJih6Lng+Mz8oei54PTEuMDIsei54YW5jaG9yPSJsZWZ0Iik6ei54PC0yJiYoei54PS0uMDIsei54YW5jaG9yPSJyaWdodCIpLHoueT4zPyh6Lnk9MS4wMix6LnlhbmNob3I9ImJvdHRvbSIpOnoueTwtMiYmKHoueT0tLjAyLHoueWFuY2hvcj0idG9wIikpLGQodCksInJvdGF0ZSI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT0ib3JiaXQiKSxjLmNsZWFuKHQpLHQudGVtcGxhdGUmJnQudGVtcGxhdGUubGF5b3V0JiZyLmNsZWFuTGF5b3V0KHQudGVtcGxhdGUubGF5b3V0KSx0fSxyLmNsZWFuRGF0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG4saT10W2VdO2lmKCJoaXN0b2dyYW15Ij09PWkudHlwZSYmInhiaW5zImluIGkmJiEoInliaW5zImluIGkpJiYoaS55Ymlucz1pLnhiaW5zLGRlbGV0ZSBpLnhiaW5zKSxpLmVycm9yX3kmJiJvcGFjaXR5ImluIGkuZXJyb3JfeSl7dmFyIGw9Yy5kZWZhdWx0cyxmPWkuZXJyb3JfeS5jb2xvcnx8KGgoaSwiYmFyIik/Yy5kZWZhdWx0TGluZTpsW2UlbC5sZW5ndGhdKTtpLmVycm9yX3kuY29sb3I9Yy5hZGRPcGFjaXR5KGMucmdiKGYpLGMub3BhY2l0eShmKSppLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIGkuZXJyb3JfeS5vcGFjaXR5fWlmKCJiYXJkaXIiaW4gaSYmKCJoIiE9PWkuYmFyZGlyfHwhaChpLCJiYXIiKSYmImhpc3RvZ3JhbSIhPT1pLnR5cGUuc3Vic3RyKDAsOSl8fChpLm9yaWVudGF0aW9uPSJoIixyLnN3YXBYWURhdGEoaSkpLGRlbGV0ZSBpLmJhcmRpciksImhpc3RvZ3JhbXkiPT09aS50eXBlJiZyLnN3YXBYWURhdGEoaSksImhpc3RvZ3JhbXgiIT09aS50eXBlJiYiaGlzdG9ncmFteSIhPT1pLnR5cGV8fChpLnR5cGU9Imhpc3RvZ3JhbSIpLCJzY2wiaW4gaSYmISgiY29sb3JzY2FsZSJpbiBpKSYmKGkuY29sb3JzY2FsZT1pLnNjbCxkZWxldGUgaS5zY2wpLCJyZXZlcnNlc2NsImluIGkmJiEoInJldmVyc2VzY2FsZSJpbiBpKSYmKGkucmV2ZXJzZXNjYWxlPWkucmV2ZXJzZXNjbCxkZWxldGUgaS5yZXZlcnNlc2NsKSxpLnhheGlzJiYoaS54YXhpcz11KGkueGF4aXMsIngiKSksaS55YXhpcyYmKGkueWF4aXM9dShpLnlheGlzLCJ5IikpLGgoaSwiZ2wzZCIpJiZpLnNjZW5lJiYoaS5zY2VuZT1zLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZC5jbGVhbklkKGkuc2NlbmUpKSwhaChpLCJwaWUiKSYmIWgoaSwiYmFyIikmJiJ3YXRlcmZhbGwiIT09aS50eXBlKWlmKEFycmF5LmlzQXJyYXkoaS50ZXh0cG9zaXRpb24pKWZvcihuPTA7bjxpLnRleHRwb3NpdGlvbi5sZW5ndGg7bisrKWkudGV4dHBvc2l0aW9uW25dPW0oaS50ZXh0cG9zaXRpb25bbl0pO2Vsc2UgaS50ZXh0cG9zaXRpb24mJihpLnRleHRwb3NpdGlvbj1tKGkudGV4dHBvc2l0aW9uKSk7dmFyIHA9YS5nZXRNb2R1bGUoaSk7aWYocCYmcC5jb2xvcmJhcil7dmFyIHg9cC5jb2xvcmJhci5jb250YWluZXIsYj14P2lbeF06aTtiJiZiLmNvbG9yc2NhbGUmJigiWUlHbkJ1Ij09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT0iWWxHbkJ1IiksIllJT3JSZCI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9IllsT3JSZCIpKX1pZigic3VyZmFjZSI9PT1pLnR5cGUmJm8uaXNQbGFpbk9iamVjdChpLmNvbnRvdXJzKSl7dmFyIF89WyJ4IiwieSIsInoiXTtmb3Iobj0wO248Xy5sZW5ndGg7bisrKXt2YXIgdz1pLmNvbnRvdXJzW19bbl1dO28uaXNQbGFpbk9iamVjdCh3KSYmKHcuaGlnaGxpZ2h0Q29sb3ImJih3LmhpZ2hsaWdodGNvbG9yPXcuaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHcuaGlnaGxpZ2h0Q29sb3IpLHcuaGlnaGxpZ2h0V2lkdGgmJih3LmhpZ2hsaWdodHdpZHRoPXcuaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHcuaGlnaGxpZ2h0V2lkdGgpKX19aWYoImNhbmRsZXN0aWNrIj09PWkudHlwZXx8Im9obGMiPT09aS50eXBlKXt2YXIgaz0hMSE9PShpLmluY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLFQ9ITEhPT0oaS5kZWNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxBPWcoaS5pbmNyZWFzaW5nKSxNPWcoaS5kZWNyZWFzaW5nKTtpZighMSE9PUEmJiExIT09TSl7dmFyIFM9dihBLE0sayxUKTtTJiYoaS5uYW1lPVMpfWVsc2UhQSYmIU18fGkubmFtZXx8KGkubmFtZT1BfHxNKX1pZihBcnJheS5pc0FycmF5KGkudHJhbnNmb3Jtcykpe3ZhciBFPWkudHJhbnNmb3Jtcztmb3Iobj0wO248RS5sZW5ndGg7bisrKXt2YXIgQz1FW25dO2lmKG8uaXNQbGFpbk9iamVjdChDKSlzd2l0Y2goQy50eXBlKXtjYXNlImZpbHRlciI6Qy5maWx0ZXJzcmMmJihDLnRhcmdldD1DLmZpbHRlcnNyYyxkZWxldGUgQy5maWx0ZXJzcmMpLEMuY2FsZW5kYXImJihDLnZhbHVlY2FsZW5kYXJ8fChDLnZhbHVlY2FsZW5kYXI9Qy5jYWxlbmRhciksZGVsZXRlIEMuY2FsZW5kYXIpO2JyZWFrO2Nhc2UiZ3JvdXBieSI6aWYoQy5zdHlsZXM9Qy5zdHlsZXN8fEMuc3R5bGUsQy5zdHlsZXMmJiFBcnJheS5pc0FycmF5KEMuc3R5bGVzKSl7dmFyIEw9Qy5zdHlsZXMsej1PYmplY3Qua2V5cyhMKTtDLnN0eWxlcz1bXTtmb3IodmFyIE89MDtPPHoubGVuZ3RoO08rKylDLnN0eWxlcy5wdXNoKHt0YXJnZXQ6eltPXSx2YWx1ZTpMW3pbT11dfSl9fX19eShpLCJsaW5lIikmJmRlbGV0ZSBpLmxpbmUsIm1hcmtlciJpbiBpJiYoeShpLm1hcmtlciwibGluZSIpJiZkZWxldGUgaS5tYXJrZXIubGluZSx5KGksIm1hcmtlciIpJiZkZWxldGUgaS5tYXJrZXIpLGMuY2xlYW4oaSksaS5hdXRvYmlueCYmKGRlbGV0ZSBpLmF1dG9iaW54LGRlbGV0ZSBpLnhiaW5zKSxpLmF1dG9iaW55JiYoZGVsZXRlIGkuYXV0b2JpbnksZGVsZXRlIGkueWJpbnMpLGQoaSksaS5jb2xvcmJhciYmZChpLmNvbG9yYmFyKSxpLm1hcmtlciYmaS5tYXJrZXIuY29sb3JiYXImJmQoaS5tYXJrZXIuY29sb3JiYXIpLGkubGluZSYmaS5saW5lLmNvbG9yYmFyJiZkKGkubGluZS5jb2xvcmJhciksaS5hYXhpcyYmZChpLmFheGlzKSxpLmJheGlzJiZkKGkuYmF4aXMpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKG8uc3dhcEF0dHJzKHQsWyI/IiwiPzAiLCJkPyIsIj9iaW5zIiwibmJpbnM/IiwiYXV0b2Jpbj8iLCI/c3JjIiwiZXJyb3JfPyJdKSxBcnJheS5pc0FycmF5KHQueikmJkFycmF5LmlzQXJyYXkodC56WzBdKSYmKHQudHJhbnNwb3NlP2RlbGV0ZSB0LnRyYW5zcG9zZTp0LnRyYW5zcG9zZT0hMCksdC5lcnJvcl94JiZ0LmVycm9yX3kpe3ZhciByPXQuZXJyb3JfeSxuPSJjb3B5X3lzdHlsZSJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnModCxbImVycm9yXz8uY29weV95c3R5bGUiXSksbiYmby5zd2FwQXR0cnModCxbImVycm9yXz8uY29sb3IiLCJlcnJvcl8/LnRoaWNrbmVzcyIsImVycm9yXz8ud2lkdGgiXSl9aWYoInN0cmluZyI9PXR5cGVvZiB0LmhvdmVyaW5mbyl7dmFyIGk9dC5ob3ZlcmluZm8uc3BsaXQoIisiKTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKSJ4Ij09PWlbZV0/aVtlXT0ieSI6InkiPT09aVtlXSYmKGlbZV09IngiKTt0LmhvdmVyaW5mbz1pLmpvaW4oIisiKX19LHIuY29lcmNlVHJhY2VJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSlyZXR1cm5bZV07aWYoIUFycmF5LmlzQXJyYXkoZSl8fCFlLmxlbmd0aClyZXR1cm4gdC5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSk7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPVtdLGk9MDtpPGUubGVuZ3RoO2krKylvLmlzSW5kZXgoZVtpXSx0LmRhdGEubGVuZ3RoKT9yLnB1c2goZVtpXSk6by53YXJuKCJ0cmFjZSBpbmRleCAoIixlW2ldLCIpIGlzIG5vdCBhIG51bWJlciBvciBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHJ9cmV0dXJuIGV9LHIubWFuYWdlQXJyYXlDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Lm9iaixhPXQucGFydHMscz1hLmxlbmd0aCxsPWFbcy0xXSxjPW4obCk7aWYoYyYmbnVsbD09PWUpe3ZhciB1PWEuc2xpY2UoMCxzLTEpLmpvaW4oIi4iKTtvLm5lc3RlZFByb3BlcnR5KGksdSkuZ2V0KCkuc3BsaWNlKGwsMSl9ZWxzZSBjJiZ2b2lkIDA9PT10LmdldCgpPyh2b2lkIDA9PT10LmdldCgpJiYoclt0LmFzdHJdPW51bGwpLHQuc2V0KGUpKTp0LnNldChlKX07dmFyIHg9LyhcLlteXFtcXVwuXSt8XFtbXlxbXF1cLl0rXF0pJC87ZnVuY3Rpb24gYih0KXt2YXIgZT10LnNlYXJjaCh4KTtpZihlPjApcmV0dXJuIHQuc3Vic3RyKDAsZSl9ci5oYXNQYXJlbnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9YihlKTtyOyl7aWYociBpbiB0KXJldHVybiEwO3I9YihyKX1yZXR1cm4hMX07dmFyIF89WyJ4IiwieSIsInoiXTtyLmNsZWFyQXhpc1R5cGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9dC5fZnVsbERhdGFbbl0sYT0wO2E8MzthKyspe3ZhciBzPWYodCxpLF9bYV0pO2lmKHMmJiJsb2ciIT09cy50eXBlKXt2YXIgbD1zLl9uYW1lLGM9cy5faWQuc3Vic3RyKDEpO2lmKCJzY2VuZSI9PT1jLnN1YnN0cigwLDUpKXtpZih2b2lkIDAhPT1yW2NdKWNvbnRpbnVlO2w9YysiLiIrbH12YXIgdT1sKyIudHlwZSI7dm9pZCAwPT09cltsXSYmdm9pZCAwPT09clt1XSYmby5uZXN0ZWRQcm9wZXJ0eSh0LmxheW91dCx1KS5zZXQobnVsbCl9fX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi9saWIiOjcwMCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NTEsIi4uL3Bsb3RzL3Bsb3RzIjo4MTAsIi4uL3JlZ2lzdHJ5Ijo4MjksImZhc3QtaXNudW1lcmljIjoyMjEsImdsLW1hdDQvZnJvbVF1YXQiOjI1OH1dLDczMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Bsb3RfYXBpIik7ci5wbG90PW4ucGxvdCxyLm5ld1Bsb3Q9bi5uZXdQbG90LHIucmVzdHlsZT1uLnJlc3R5bGUsci5yZWxheW91dD1uLnJlbGF5b3V0LHIucmVkcmF3PW4ucmVkcmF3LHIudXBkYXRlPW4udXBkYXRlLHIuX2d1aVJlc3R5bGU9bi5fZ3VpUmVzdHlsZSxyLl9ndWlSZWxheW91dD1uLl9ndWlSZWxheW91dCxyLl9ndWlVcGRhdGU9bi5fZ3VpVXBkYXRlLHIuX3N0b3JlRGlyZWN0R1VJRWRpdD1uLl9zdG9yZURpcmVjdEdVSUVkaXQsci5yZWFjdD1uLnJlYWN0LHIuZXh0ZW5kVHJhY2VzPW4uZXh0ZW5kVHJhY2VzLHIucHJlcGVuZFRyYWNlcz1uLnByZXBlbmRUcmFjZXMsci5hZGRUcmFjZXM9bi5hZGRUcmFjZXMsci5kZWxldGVUcmFjZXM9bi5kZWxldGVUcmFjZXMsci5tb3ZlVHJhY2VzPW4ubW92ZVRyYWNlcyxyLnB1cmdlPW4ucHVyZ2Usci5hZGRGcmFtZXM9bi5hZGRGcmFtZXMsci5kZWxldGVGcmFtZXM9bi5kZWxldGVGcmFtZXMsci5hbmltYXRlPW4uYW5pbWF0ZSxyLnNldFBsb3RDb25maWc9bi5zZXRQbG90Q29uZmlnLHIudG9JbWFnZT10KCIuL3RvX2ltYWdlIiksci52YWxpZGF0ZT10KCIuL3ZhbGlkYXRlIiksci5kb3dubG9hZEltYWdlPXQoIi4uL3NuYXBzaG90L2Rvd25sb2FkIik7dmFyIGk9dCgiLi90ZW1wbGF0ZV9hcGkiKTtyLm1ha2VUZW1wbGF0ZT1pLm1ha2VUZW1wbGF0ZSxyLnZhbGlkYXRlVGVtcGxhdGU9aS52YWxpZGF0ZVRlbXBsYXRlfSx7Ii4uL3NuYXBzaG90L2Rvd25sb2FkIjo4MzEsIi4vcGxvdF9hcGkiOjczNSwiLi90ZW1wbGF0ZV9hcGkiOjc0MCwiLi90b19pbWFnZSI6NzQxLCIuL3ZhbGlkYXRlIjo3NDJ9XSw3MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliL2lzX3BsYWluX29iamVjdCIpLGk9dCgiLi4vbGliL25vb3AiKSxhPXQoIi4uL2xpYi9sb2dnZXJzIiksbz10KCIuLi9saWIvc2VhcmNoIikuc29ydGVyQXNjLHM9dCgiLi4vcmVnaXN0cnkiKTtyLmNvbnRhaW5lckFycmF5TWF0Y2g9dCgiLi9jb250YWluZXJfYXJyYXlfbWF0Y2giKTt2YXIgbD1yLmlzQWRkVmFsPWZ1bmN0aW9uKHQpe3JldHVybiJhZGQiPT09dHx8bih0KX0sYz1yLmlzUmVtb3ZlVmFsPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dHx8InJlbW92ZSI9PT10fTtyLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxyLG4sdSl7dmFyIGY9ZS5hc3RyLGg9cy5nZXRDb21wb25lbnRNZXRob2QoZiwic3VwcGx5TGF5b3V0RGVmYXVsdHMiKSxwPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGYsImRyYXciKSxkPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGYsImRyYXdPbmUiKSxnPW4ucmVwbG90fHxuLnJlY2FsY3x8aD09PWl8fHA9PT1pLHY9dC5sYXlvdXQsbT10Ll9mdWxsTGF5b3V0O2lmKHJbIiJdKXtPYmplY3Qua2V5cyhyKS5sZW5ndGg+MSYmYS53YXJuKCJGdWxsIGFycmF5IGVkaXRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBlZGl0cyIsZik7dmFyIHk9clsiIl1bIiJdO2lmKGMoeSkpZS5zZXQobnVsbCk7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4gYS53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBhcnJheSBlZGl0IHZhbHVlIixmLHkpLCEwO2Uuc2V0KHkpfXJldHVybiFnJiYoaCh2LG0pLHAodCksITApfXZhciB4LGIsXyx3LGssVCxBLE0sUz1PYmplY3Qua2V5cyhyKS5tYXAoTnVtYmVyKS5zb3J0KG8pLEU9ZS5nZXQoKSxDPUV8fFtdLEw9dShtLGYpLmdldCgpLHo9W10sTz0tMSxJPUMubGVuZ3RoO2Zvcih4PTA7eDxTLmxlbmd0aDt4KyspaWYodz1yW189U1t4XV0saz1PYmplY3Qua2V5cyh3KSxUPXdbIiJdLEE9bChUKSxfPDB8fF8+Qy5sZW5ndGgtKEE/MDoxKSlhLndhcm4oImluZGV4IG91dCBvZiByYW5nZSIsZixfKTtlbHNlIGlmKHZvaWQgMCE9PVQpay5sZW5ndGg+MSYmYS53YXJuKCJJbnNlcnRpb24gJiByZW1vdmFsIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlZGl0cyB0byB0aGUgc2FtZSBpbmRleC4iLGYsXyksYyhUKT96LnB1c2goXyk6QT8oImFkZCI9PT1UJiYoVD17fSksQy5zcGxpY2UoXywwLFQpLEwmJkwuc3BsaWNlKF8sMCx7fSkpOmEud2FybigiVW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IGVkaXQgdmFsdWUiLGYsXyxUKSwtMT09PU8mJihPPV8pO2Vsc2UgZm9yKGI9MDtiPGsubGVuZ3RoO2IrKylNPWYrIlsiK18rIl0uIix1KENbX10sa1tiXSxNKS5zZXQod1trW2JdXSk7Zm9yKHg9ei5sZW5ndGgtMTt4Pj0wO3gtLSlDLnNwbGljZSh6W3hdLDEpLEwmJkwuc3BsaWNlKHpbeF0sMSk7aWYoQy5sZW5ndGg/RXx8ZS5zZXQoQyk6ZS5zZXQobnVsbCksZylyZXR1cm4hMTtpZihoKHYsbSksZCE9PWkpe3ZhciBEO2lmKC0xPT09TylEPVM7ZWxzZXtmb3IoST1NYXRoLm1heChDLmxlbmd0aCxJKSxEPVtdLHg9MDt4PFMubGVuZ3RoJiYhKChfPVNbeF0pPj1PKTt4KyspRC5wdXNoKF8pO2Zvcih4PU87eDxJO3grKylELnB1c2goeCl9Zm9yKHg9MDt4PEQubGVuZ3RoO3grKylkKHQsRFt4XSl9ZWxzZSBwKHQpO3JldHVybiEwfX0seyIuLi9saWIvaXNfcGxhaW5fb2JqZWN0Ijo3MDEsIi4uL2xpYi9sb2dnZXJzIjo3MDQsIi4uL2xpYi9ub29wIjo3MDksIi4uL2xpYi9zZWFyY2giOjcxOSwiLi4vcmVnaXN0cnkiOjgyOSwiLi9jb250YWluZXJfYXJyYXlfbWF0Y2giOjczMH1dLDczNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoImhhcy1ob3ZlciIpLG89dCgiLi4vbGliIikscz1vLm5lc3RlZFByb3BlcnR5LGw9dCgiLi4vbGliL2V2ZW50cyIpLGM9dCgiLi4vbGliL3F1ZXVlIiksdT10KCIuLi9yZWdpc3RyeSIpLGY9dCgiLi9wbG90X3NjaGVtYSIpLGg9dCgiLi4vcGxvdHMvcGxvdHMiKSxwPXQoIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeSIpLGQ9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHY9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLG09dCgiLi4vY29tcG9uZW50cy9jb2xvcmJhci9jb25uZWN0IikseT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3QiKS5pbml0SW50ZXJhY3Rpb25zLHg9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxiPXQoIi4uL2xpYi9zdmdfdGV4dF91dGlscyIpLF89dCgiLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LHc9dCgiLi9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcsaz10KCIuL21hbmFnZV9hcnJheXMiKSxUPXQoIi4vaGVscGVycyIpLEE9dCgiLi9zdWJyb3V0aW5lcyIpLE09dCgiLi9lZGl0X3R5cGVzIiksUz10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuQVhfTkFNRV9QQVRURVJOLEU9MDtmdW5jdGlvbiBDKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50LS06dC5lbWl0KCJwbG90bHlfYWZ0ZXJwbG90Iil9ZnVuY3Rpb24gTCh0LGUpe3RyeXt0Ll9mdWxsTGF5b3V0Ll9wYXBlci5zdHlsZSgiYmFja2dyb3VuZCIsZSl9Y2F0Y2godCl7by5lcnJvcih0KX19ZnVuY3Rpb24geih0LGUpe0wodCx2LmNvbWJpbmUoZSwid2hpdGUiKSl9ZnVuY3Rpb24gTyh0LGUpe2lmKCF0Ll9jb250ZXh0KXt0Ll9jb250ZXh0PW8uZXh0ZW5kRGVlcCh7fSx3KTt2YXIgcj1uLnNlbGVjdCgiYmFzZSIpO3QuX2NvbnRleHQuX2Jhc2VVcmw9ci5zaXplKCkmJnIuYXR0cigiaHJlZiIpP3dpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF06IiJ9dmFyIGkscyxsLGM9dC5fY29udGV4dDtpZihlKXtmb3Iocz1PYmplY3Qua2V5cyhlKSxpPTA7aTxzLmxlbmd0aDtpKyspImVkaXRhYmxlIiE9PShsPXNbaV0pJiYiZWRpdHMiIT09bCYmbCBpbiBjJiYoInNldEJhY2tncm91bmQiPT09bCYmIm9wYXF1ZSI9PT1lW2xdP2NbbF09ejpjW2xdPWVbbF0pO2UucGxvdDNkUGl4ZWxSYXRpbyYmIWMucGxvdEdsUGl4ZWxSYXRpbyYmKGMucGxvdEdsUGl4ZWxSYXRpbz1jLnBsb3QzZFBpeGVsUmF0aW8pO3ZhciB1PWUuZWRpdGFibGU7aWYodm9pZCAwIT09dSlmb3IoYy5lZGl0YWJsZT11LHM9T2JqZWN0LmtleXMoYy5lZGl0cyksaT0wO2k8cy5sZW5ndGg7aSsrKWMuZWRpdHNbc1tpXV09dTtpZihlLmVkaXRzKWZvcihzPU9iamVjdC5rZXlzKGUuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKykobD1zW2ldKWluIGMuZWRpdHMmJihjLmVkaXRzW2xdPWUuZWRpdHNbbF0pO2MuX2V4cG9ydGVkUGxvdD1lLl9leHBvcnRlZFBsb3R9Yy5zdGF0aWNQbG90JiYoYy5lZGl0YWJsZT0hMSxjLmVkaXRzPXt9LGMuYXV0b3NpemFibGU9ITEsYy5zY3JvbGxab29tPSExLGMuZG91YmxlQ2xpY2s9ITEsYy5zaG93VGlwcz0hMSxjLnNob3dMaW5rPSExLGMuZGlzcGxheU1vZGVCYXI9ITEpLCJob3ZlciIhPT1jLmRpc3BsYXlNb2RlQmFyfHxhfHwoYy5kaXNwbGF5TW9kZUJhcj0hMCksInRyYW5zcGFyZW50IiE9PWMuc2V0QmFja2dyb3VuZCYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0QmFja2dyb3VuZHx8KGMuc2V0QmFja2dyb3VuZD1MKSxjLl9oYXNaZXJvSGVpZ2h0PWMuX2hhc1plcm9IZWlnaHR8fDA9PT10LmNsaWVudEhlaWdodCxjLl9oYXNaZXJvV2lkdGg9Yy5faGFzWmVyb1dpZHRofHwwPT09dC5jbGllbnRXaWR0aDt2YXIgZj1jLnNjcm9sbFpvb20saD1jLl9zY3JvbGxab29tPXt9O2lmKCEwPT09ZiloLmNhcnRlc2lhbj0xLGguZ2wzZD0xLGguZ2VvPTEsaC5tYXBib3g9MTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZil7dmFyIHA9Zi5zcGxpdCgiKyIpO2ZvcihpPTA7aTxwLmxlbmd0aDtpKyspaFtwW2ldXT0xfWVsc2UhMSE9PWYmJihoLmdsM2Q9MSxoLmdlbz0xLGgubWFwYm94PTEpfWZ1bmN0aW9uIEkodCxlKXt2YXIgcixuLGk9ZSsxLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKykobj10W3JdKTwwP2EucHVzaChpK24pOmEucHVzaChuKTtyZXR1cm4gYX1mdW5jdGlvbiBEKHQsZSxyKXt2YXIgbixpO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe2lmKChpPWVbbl0pIT09cGFyc2VJbnQoaSwxMCkpdGhyb3cgbmV3IEVycm9yKCJhbGwgdmFsdWVzIGluICIrcisiIG11c3QgYmUgaW50ZWdlcnMiKTtpZihpPj10LmRhdGEubGVuZ3RofHxpPC10LmRhdGEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyKyIgbXVzdCBiZSB2YWxpZCBpbmRpY2VzIGZvciBnZC5kYXRhLiIpO2lmKGUuaW5kZXhPZihpLG4rMSk+LTF8fGk+PTAmJmUuaW5kZXhPZigtdC5kYXRhLmxlbmd0aCtpKT4tMXx8aTwwJiZlLmluZGV4T2YodC5kYXRhLmxlbmd0aCtpKT4tMSl0aHJvdyBuZXcgRXJyb3IoImVhY2ggaW5kZXggaW4gIityKyIgbXVzdCBiZSB1bmlxdWUuIil9fWZ1bmN0aW9uIFAodCxlLHIpe2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiY3VycmVudEluZGljZXMgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4iKTtpZihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLEQodCxlLCJjdXJyZW50SW5kaWNlcyIpLCJ1bmRlZmluZWQiPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSwidW5kZWZpbmVkIiE9dHlwZW9mIHImJkQodCxyLCJuZXdJbmRpY2VzIiksInVuZGVmaW5lZCIhPXR5cGVvZiByJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3VycmVudCBhbmQgbmV3IGluZGljZXMgbXVzdCBiZSBvZiBlcXVhbCBsZW5ndGguIil9ZnVuY3Rpb24gUih0LGUscixuLGEpeyFmdW5jdGlvbih0LGUscixuKXt2YXIgaT1vLmlzUGxhaW5PYmplY3Qobik7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpdGhyb3cgbmV3IEVycm9yKCJ1cGRhdGUgbXVzdCBiZSBhIGtleTp2YWx1ZSBvYmplY3QiKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2VycyIpO2Zvcih2YXIgYSBpbiBEKHQsciwiaW5kaWNlcyIpLGUpe2lmKCFBcnJheS5pc0FycmF5KGVbYV0pfHxlW2FdLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlICIrYSsiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoIik7aWYoaSYmKCEoYSBpbiBuKXx8IUFycmF5LmlzQXJyYXkoblthXSl8fG5bYV0ubGVuZ3RoIT09ZVthXS5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdCIpfX0odCxlLHIsbik7Zm9yKHZhciBsPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGwsYyx1LGYsaD1vLmlzUGxhaW5PYmplY3QobikscD1bXTtmb3IodmFyIGQgaW4gQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPUkocix0LmRhdGEubGVuZ3RoLTEpLGUpZm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe2lmKGE9dC5kYXRhW3JbZ11dLGw9KGM9cyhhLGQpKS5nZXQoKSx1PWVbZF1bZ10sIW8uaXNBcnJheU9yVHlwZWRBcnJheSh1KSl0aHJvdyBuZXcgRXJyb3IoImF0dHJpYnV0ZTogIitkKyIgaW5kZXg6ICIrZysiIG11c3QgYmUgYW4gYXJyYXkiKTtpZighby5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGV4dGVuZCBtaXNzaW5nIG9yIG5vbi1hcnJheSBhdHRyaWJ1dGU6ICIrZCk7aWYobC5jb25zdHJ1Y3RvciE9PXUuY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIGFycmF5IHdpdGggYW4gYXJyYXkgb2YgYSBkaWZmZXJlbnQgdHlwZTogIitkKTtmPWg/bltkXVtnXTpuLGkoZil8fChmPS0xKSxwLnB1c2goe3Byb3A6Yyx0YXJnZXQ6bCxpbnNlcnQ6dSxtYXhwOk1hdGguZmxvb3IoZil9KX1yZXR1cm4gcH0odCxlLHIsbiksYz17fSx1PXt9LGY9MDtmPGwubGVuZ3RoO2YrKyl7dmFyIGg9bFtmXS5wcm9wLHA9bFtmXS5tYXhwLGQ9YShsW2ZdLnRhcmdldCxsW2ZdLmluc2VydCxwKTtoLnNldChkWzBdKSxBcnJheS5pc0FycmF5KGNbaC5hc3RyXSl8fChjW2guYXN0cl09W10pLGNbaC5hc3RyXS5wdXNoKGRbMV0pLEFycmF5LmlzQXJyYXkodVtoLmFzdHJdKXx8KHVbaC5hc3RyXT1bXSksdVtoLmFzdHJdLnB1c2gobFtmXS50YXJnZXQubGVuZ3RoKX1yZXR1cm57dXBkYXRlOmMsbWF4UG9pbnRzOnV9fWZ1bmN0aW9uIEYodCxlKXt2YXIgcj1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aCk7cmV0dXJuIHIuc2V0KHQpLHIuc2V0KGUsdC5sZW5ndGgpLHJ9ZnVuY3Rpb24gQih0LGUsbixpKXt0PW8uZ2V0R3JhcGhEaXYodCksVC5jbGVhclByb21pc2VRdWV1ZSh0KTt2YXIgYT17fTtpZigic3RyaW5nIj09dHlwZW9mIGUpYVtlXT1uO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKCJSZXN0eWxlIGZhaWwuIixlLG4saSksUHJvbWlzZS5yZWplY3QoKTthPW8uZXh0ZW5kRmxhdCh7fSxlKSx2b2lkIDA9PT1pJiYoaT1uKX1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBzPVQuY29lcmNlVHJhY2VJbmRpY2VzKHQsaSksbD1VKHQsYSxzKSx1PWwuZmxhZ3M7dS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApLHUuY2xlYXJBeGlzVHlwZXMmJlQuY2xlYXJBeGlzVHlwZXModCxzLHt9KTt2YXIgZj1bXTt1LmZ1bGxSZXBsb3Q/Zi5wdXNoKHIucGxvdCk6KGYucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLGguc3VwcGx5RGVmYXVsdHModCksdS5tYXJrZXJTaXplJiYoaC5kb0NhbGNkYXRhKHQpLFkoZikpLHUuc3R5bGUmJmYucHVzaChBLmRvVHJhY2VTdHlsZSksdS5jb2xvcmJhcnMmJmYucHVzaChBLmRvQ29sb3JCYXJzKSxmLnB1c2goQykpLGYucHVzaChoLnJlaG92ZXIpLGMuYWRkKHQsQixbdCxsLnVuZG9pdCxsLnRyYWNlc10sQixbdCxsLnJlZG9pdCxsLnRyYWNlc10pO3ZhciBwPW8uc3luY09yQXN5bmMoZix0KTtyZXR1cm4gcCYmcC50aGVufHwocD1Qcm9taXNlLnJlc29sdmUoKSkscC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLGwuZXZlbnREYXRhKSx0fSl9ZnVuY3Rpb24gTih0KXtyZXR1cm4gdm9pZCAwPT09dD9udWxsOnR9ZnVuY3Rpb24gaih0LGUpe3JldHVybiBlP2Z1bmN0aW9uKGUscixuKXt2YXIgaT1zKGUsciksYT1pLnNldDtyZXR1cm4gaS5zZXQ9ZnVuY3Rpb24oZSl7Vigobnx8IiIpK3IsaS5nZXQoKSxlLHQpLGEoZSl9LGl9OnN9ZnVuY3Rpb24gVih0LGUscixuKXtpZihBcnJheS5pc0FycmF5KGUpfHxBcnJheS5pc0FycmF5KHIpKWZvcih2YXIgaT1BcnJheS5pc0FycmF5KGUpP2U6W10sYT1BcnJheS5pc0FycmF5KHIpP3I6W10scz1NYXRoLm1heChpLmxlbmd0aCxhLmxlbmd0aCksbD0wO2w8cztsKyspVih0KyJbIitsKyJdIixpW2xdLGFbbF0sbik7ZWxzZSBpZihvLmlzUGxhaW5PYmplY3QoZSl8fG8uaXNQbGFpbk9iamVjdChyKSl7dmFyIGM9by5pc1BsYWluT2JqZWN0KGUpP2U6e30sdT1vLmlzUGxhaW5PYmplY3Qocik/cjp7fSxmPW8uZXh0ZW5kRmxhdCh7fSxjLHUpO2Zvcih2YXIgaCBpbiBmKVYodCsiLiIraCxjW2hdLHVbaF0sbil9ZWxzZSB2b2lkIDA9PT1uW3RdJiYoblt0XT1OKGUpKX1mdW5jdGlvbiBVKHQsZSxyKXt2YXIgbixpPXQuX2Z1bGxMYXlvdXQsYT10Ll9mdWxsRGF0YSxsPXQuZGF0YSxjPWkuX2d1aUVkaXRpbmcscD1qKGkuX3ByZUdVSSxjKSxnPW8uZXh0ZW5kRGVlcEFsbCh7fSxlKTtxKGUpO3ZhciB2LG09TS50cmFjZUZsYWdzKCkseT17fSx4PXt9O2Z1bmN0aW9uIGIoKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBfKHQpe3ZhciBlPWQuaWQybmFtZSh0KTstMT09PXYuaW5kZXhPZihlKSYmdi5wdXNoKGUpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIkxBWU9VVCIrdCsiLmF1dG9yYW5nZSJ9ZnVuY3Rpb24gayh0KXtyZXR1cm4iTEFZT1VUIit0KyIucmFuZ2UifWZ1bmN0aW9uIEEodCl7Zm9yKHZhciBlPXQ7ZTxhLmxlbmd0aDtlKyspaWYoYVtlXS5faW5wdXQ9PT1sW3RdKXJldHVybiBhW2VdfWZ1bmN0aW9uIFMobixhLG8pe2lmKEFycmF5LmlzQXJyYXkobikpbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1ModCxhLG8pfSk7ZWxzZSBpZighKG4gaW4gZXx8VC5oYXNQYXJlbnQoZSxuKSkpe3ZhciBzO2lmKCJMQVlPVVQiPT09bi5zdWJzdHIoMCw2KSlzPXAodC5sYXlvdXQsbi5yZXBsYWNlKCJMQVlPVVQiLCIiKSk7ZWxzZXt2YXIgdT1yW29dO3M9aihpLl90cmFjZVByZUdVSVtBKHUpLl9mdWxsSW5wdXQudWlkXSxjKShsW3VdLG4pfW4gaW4geHx8KHhbbl09YigpKSx2b2lkIDA9PT14W25dW29dJiYoeFtuXVtvXT1OKHMuZ2V0KCkpKSx2b2lkIDAhPT1hJiZzLnNldChhKX19ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV1bdF19fWZ1bmN0aW9uIEModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuITE9PT1lP2FbcltuXV1bdF06bnVsbH19Zm9yKHZhciBMIGluIGUpe2lmKFQuaGFzUGFyZW50KGUsTCkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2V0ICIrTCsiIGFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTt2YXIgeixPLEksRCxQLFIsRj1lW0xdO2lmKCJhdXRvYmlueCIhPT1MJiYiYXV0b2JpbnkiIT09THx8KEw9TC5jaGFyQXQoTC5sZW5ndGgtMSkrImJpbnMiLEY9QXJyYXkuaXNBcnJheShGKT9GLm1hcChDKEwpKTohMT09PUY/ci5tYXAoRShMKSk6bnVsbCkseVtMXT1GLCJMQVlPVVQiIT09TC5zdWJzdHIoMCw2KSl7Zm9yKHhbTF09YigpLG49MDtuPHIubGVuZ3RoO24rKyl7aWYoej1sW3Jbbl1dLE89QShyW25dKSxEPShJPWooaS5fdHJhY2VQcmVHVUlbTy5fZnVsbElucHV0LnVpZF0sYykoeixMKSkuZ2V0KCksdm9pZCAwIT09KFA9QXJyYXkuaXNBcnJheShGKT9GW24lRi5sZW5ndGhdOkYpKXt2YXIgQj1JLnBhcnRzW0kucGFydHMubGVuZ3RoLTFdLFY9TC5zdWJzdHIoMCxMLmxlbmd0aC1CLmxlbmd0aC0xKSxVPVY/VisiLiI6IiIsSD1WP3MoTyxWKS5nZXQoKTpPO2lmKChSPWYuZ2V0VHJhY2VWYWxPYmplY3QoTyxJLnBhcnRzKSkmJlIuaW1wbGllZEVkaXRzJiZudWxsIT09UClmb3IodmFyIEcgaW4gUi5pbXBsaWVkRWRpdHMpUyhvLnJlbGF0aXZlQXR0cihMLEcpLFIuaW1wbGllZEVkaXRzW0ddLG4pO2Vsc2UgaWYoInRoaWNrbmVzc21vZGUiIT09QiYmImxlbm1vZGUiIT09Qnx8RD09PVB8fCJmcmFjdGlvbiIhPT1QJiYicGl4ZWxzIiE9PVB8fCFIKXtpZigidHlwZSI9PT1MJiYicGllIj09PVAhPSgicGllIj09PUQpKXt2YXIgWT0ieCIsVz0ieSI7ImJhciIhPT1QJiYiYmFyIiE9PUR8fCJoIiE9PXoub3JpZW50YXRpb258fChZPSJ5IixXPSJ4Iiksby5zd2FwQXR0cnMoeixbIj8iLCI/c3JjIl0sImxhYmVscyIsWSksby5zd2FwQXR0cnMoeixbImQ/IiwiPzAiXSwibGFiZWwiLFkpLG8uc3dhcEF0dHJzKHosWyI/IiwiP3NyYyJdLCJ2YWx1ZXMiLFcpLCJwaWUiPT09RD8ocyh6LCJtYXJrZXIuY29sb3IiKS5zZXQocyh6LCJtYXJrZXIuY29sb3JzIikuZ2V0KCkpLGkuX3BpZWxheWVyLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpKTp1LnRyYWNlSXMoeiwiY2FydGVzaWFuIikmJnMoeiwibWFya2VyLmNvbG9ycyIpLnNldChzKHosIm1hcmtlci5jb2xvciIpLmdldCgpKX19ZWxzZXt2YXIgWD1pLl9zaXplLFo9SC5vcmllbnQsJD0idG9wIj09PVp8fCJib3R0b20iPT09WjtpZigidGhpY2tuZXNzbW9kZSI9PT1CKXt2YXIgSj0kP1guaDpYLnc7UyhVKyJ0aGlja25lc3MiLEgudGhpY2tuZXNzKigiZnJhY3Rpb24iPT09UD8xL0o6Siksbil9ZWxzZXt2YXIgSz0kP1gudzpYLmg7UyhVKyJsZW4iLEgubGVuKigiZnJhY3Rpb24iPT09UD8xL0s6Syksbil9fXhbTF1bbl09TihEKTtpZigtMSE9PVsic3dhcHh5Iiwic3dhcHh5YXhlcyIsIm9yaWVudGF0aW9uIiwib3JpZW50YXRpb25heGVzIl0uaW5kZXhPZihMKSl7aWYoIm9yaWVudGF0aW9uIj09PUwpe0kuc2V0KFApO3ZhciBRPXoueCYmIXoueT8iaCI6InYiO2lmKChJLmdldCgpfHxRKT09PU8ub3JpZW50YXRpb24pY29udGludWV9ZWxzZSJvcmllbnRhdGlvbmF4ZXMiPT09TCYmKHoub3JpZW50YXRpb249e3Y6ImgiLGg6InYifVtPLm9yaWVudGF0aW9uXSk7VC5zd2FwWFlEYXRhKHopLG0uY2FsYz1tLmNsZWFyQXhpc1R5cGVzPSEwfWVsc2UtMSE9PWguZGF0YUFycmF5Q29udGFpbmVycy5pbmRleE9mKEkucGFydHNbMF0pPyhULm1hbmFnZUFycmF5Q29udGFpbmVycyhJLFAseCksbS5jYWxjPSEwKTooUj9SLmFycmF5T2smJiF1LnRyYWNlSXMoTywicmVnbCIpJiYoby5pc0FycmF5T3JUeXBlZEFycmF5KFApfHxvLmlzQXJyYXlPclR5cGVkQXJyYXkoRCkpP20uY2FsYz0hMDpNLnVwZGF0ZShtLFIpOm0uY2FsYz0hMCxJLnNldChQKSl9fWlmKC0xIT09WyJzd2FweHlheGVzIiwib3JpZW50YXRpb25heGVzIl0uaW5kZXhPZihMKSYmZC5zd2FwKHQsciksIm9yaWVudGF0aW9uYXhlcyI9PT1MKXt2YXIgdHQ9cyh0LmxheW91dCwiaG92ZXJtb2RlIik7IngiPT09dHQuZ2V0KCk/dHQuc2V0KCJ5Iik6InkiPT09dHQuZ2V0KCkmJnR0LnNldCgieCIpfWlmKC0xIT09WyJvcmllbnRhdGlvbiIsInR5cGUiXS5pbmRleE9mKEwpKXtmb3Iodj1bXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBldD1sW3Jbbl1dO3UudHJhY2VJcyhldCwiY2FydGVzaWFuIikmJihfKGV0LnhheGlzfHwieCIpLF8oZXQueWF4aXN8fCJ5IikpfVModi5tYXAodyksITAsMCksUyh2Lm1hcChrKSxbMCwxXSwwKX19ZWxzZSBJPXAodC5sYXlvdXQsTC5yZXBsYWNlKCJMQVlPVVQiLCIiKSkseFtMXT1bTihJLmdldCgpKV0sSS5zZXQoQXJyYXkuaXNBcnJheShGKT9GWzBdOkYpLG0uY2FsYz0hMH1yZXR1cm4obS5jYWxjfHxtLnBsb3QpJiYobS5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6bSx1bmRvaXQ6eCxyZWRvaXQ6eSx0cmFjZXM6cixldmVudERhdGE6by5leHRlbmREZWVwTm9BcnJheXMoW10sW2cscl0pfX1mdW5jdGlvbiBxKHQpe3ZhciBlLHIsbixpPW8uY291bnRlclJlZ2V4KCJheGlzIiwiLnRpdGxlIiwhMSwhMSksYT0vY29sb3JiYXJcLnRpdGxlJC8scz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKXI9c1tlXSxuPXRbcl0sInRpdGxlIiE9PXImJiFpLnRlc3QocikmJiFhLnRlc3Qocil8fCJzdHJpbmciIT10eXBlb2YgbiYmIm51bWJlciIhPXR5cGVvZiBuP3IuaW5kZXhPZigidGl0bGVmb250Iik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVmb250IiwidGl0bGUuZm9udCIpKTpyLmluZGV4T2YoInRpdGxlcG9zaXRpb24iKT4tMT9sKHIsci5yZXBsYWNlKCJ0aXRsZXBvc2l0aW9uIiwidGl0bGUucG9zaXRpb24iKSk6ci5pbmRleE9mKCJ0aXRsZXNpZGUiKT4tMT9sKHIsci5yZXBsYWNlKCJ0aXRsZXNpZGUiLCJ0aXRsZS5zaWRlIikpOnIuaW5kZXhPZigidGl0bGVvZmZzZXQiKT4tMSYmbChyLHIucmVwbGFjZSgidGl0bGVvZmZzZXQiLCJ0aXRsZS5vZmZzZXQiKSk6bChyLHIucmVwbGFjZSgidGl0bGUiLCJ0aXRsZS50ZXh0IikpO2Z1bmN0aW9uIGwoZSxyKXt0W3JdPXRbZV0sZGVsZXRlIHRbZV19fWZ1bmN0aW9uIEgodCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxULmNsZWFyUHJvbWlzZVF1ZXVlKHQpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7dmFyIG49e307aWYoInN0cmluZyI9PXR5cGVvZiBlKW5bZV09cjtlbHNle2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpcmV0dXJuIG8ud2FybigiUmVsYXlvdXQgZmFpbC4iLGUsciksUHJvbWlzZS5yZWplY3QoKTtuPW8uZXh0ZW5kRmxhdCh7fSxlKX1PYmplY3Qua2V5cyhuKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBpPSQodCxuKSxhPWkuZmxhZ3M7YS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApO3ZhciBzPVtoLnByZXZpb3VzUHJvbWlzZXNdO2EubGF5b3V0UmVwbG90P3MucHVzaChBLmxheW91dFJlcGxvdCk6T2JqZWN0LmtleXMobikubGVuZ3RoJiYoRyh0LGEsaSl8fGguc3VwcGx5RGVmYXVsdHModCksYS5sZWdlbmQmJnMucHVzaChBLmRvTGVnZW5kKSxhLmxheW91dHN0eWxlJiZzLnB1c2goQS5sYXlvdXRTdHlsZXMpLGEuYXhyYW5nZSYmWShzLGkucmFuZ2VzQWx0ZXJlZCksYS50aWNrcyYmcy5wdXNoKEEuZG9UaWNrc1JlbGF5b3V0KSxhLm1vZGViYXImJnMucHVzaChBLmRvTW9kZUJhciksYS5jYW1lcmEmJnMucHVzaChBLmRvQ2FtZXJhKSxzLnB1c2goQykpLHMucHVzaChoLnJlaG92ZXIpLGMuYWRkKHQsSCxbdCxpLnVuZG9pdF0sSCxbdCxpLnJlZG9pdF0pO3ZhciBsPW8uc3luY09yQXN5bmMocyx0KTtyZXR1cm4gbCYmbC50aGVufHwobD1Qcm9taXNlLnJlc29sdmUodCkpLGwudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZWxheW91dCIsaS5ldmVudERhdGEpLHR9KX1mdW5jdGlvbiBHKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0O2lmKCFlLmF4cmFuZ2UpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoImF4cmFuZ2UiIT09aSYmZVtpXSlyZXR1cm4hMTtmb3IodmFyIGEgaW4gci5yYW5nZXNBbHRlcmVkKXt2YXIgbz1kLmlkMm5hbWUoYSkscz10LmxheW91dFtvXSxsPW5bb107aWYobC5hdXRvcmFuZ2U9cy5hdXRvcmFuZ2UsbC5yYW5nZT1zLnJhbmdlLnNsaWNlKCksbC5jbGVhblJhbmdlKCksbC5fbWF0Y2hHcm91cClmb3IodmFyIGMgaW4gbC5fbWF0Y2hHcm91cClpZihjIT09YSl7dmFyIHU9bltkLmlkMm5hbWUoYyldO3UuYXV0b3JhbmdlPWwuYXV0b3JhbmdlLHUucmFuZ2U9bC5yYW5nZS5zbGljZSgpLHUuX2lucHV0LnJhbmdlPWwucmFuZ2Uuc2xpY2UoKX19cmV0dXJuITB9ZnVuY3Rpb24gWSh0LGUpe3ZhciByPWU/ZnVuY3Rpb24odCl7dmFyIHI9W10sbj0hMDtmb3IodmFyIGkgaW4gZSl7dmFyIGE9ZC5nZXRGcm9tSWQodCxpKTtpZihyLnB1c2goaSksYS5fbWF0Y2hHcm91cClmb3IodmFyIG8gaW4gYS5fbWF0Y2hHcm91cCllW29dfHxyLnB1c2gobyk7YS5hdXRvbWFyZ2luJiYobj0hMSl9cmV0dXJuIGQuZHJhdyh0LHIse3NraXBUaXRsZTpufSl9OmZ1bmN0aW9uKHQpe3JldHVybiBkLmRyYXcodCwicmVkcmF3Iil9O3QucHVzaChmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXI7ZSYmXyhlKX0sQS5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzLHIsQS5kcmF3RGF0YSxBLmZpbmFsRHJhdyl9ci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBzO2lmKHQ9by5nZXRHcmFwaERpdih0KSxsLmluaXQodCksby5pc1BsYWluT2JqZWN0KGUpKXt2YXIgYz1lO2U9Yy5kYXRhLGk9Yy5sYXlvdXQsYT1jLmNvbmZpZyxzPWMuZnJhbWVzfWlmKCExPT09bC50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlcGxvdCIsW2UsaSxhXSkpcmV0dXJuIFByb21pc2UucmVqZWN0KCk7ZXx8aXx8by5pc1Bsb3REaXYodCl8fG8ud2FybigiQ2FsbGluZyBQbG90bHkucGxvdCBhcyBpZiByZWRyYXdpbmcgYnV0IHRoaXMgY29udGFpbmVyIGRvZXNuJ3QgeWV0IGhhdmUgYSBwbG90LiIsdCksTyh0LGEpLGl8fChpPXt9KSxuLnNlbGVjdCh0KS5jbGFzc2VkKCJqcy1wbG90bHktcGxvdCIsITApLGcubWFrZVRlc3RlcigpLEFycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpfHwodC5fcHJvbWlzZXM9W10pO3ZhciBmPTA9PT0odC5kYXRhfHxbXSkubGVuZ3RoJiZBcnJheS5pc0FycmF5KGUpO2lmKEFycmF5LmlzQXJyYXkoZSkmJihULmNsZWFuRGF0YShlKSxmP3QuZGF0YT1lOnQuZGF0YS5wdXNoLmFwcGx5KHQuZGF0YSxlKSx0LmVtcHR5PSExKSx0LmxheW91dCYmIWZ8fCh0LmxheW91dD1ULmNsZWFuTGF5b3V0KGkpKSx0Ll9kcmFnZ2luZyYmIXQuX3RyYW5zaXRpb25pbmcpcmV0dXJuIHQuX3JlcGxvdFBlbmRpbmc9ITAsUHJvbWlzZS5yZWplY3QoKTt0Ll9yZXBsb3RQZW5kaW5nPSExLGguc3VwcGx5RGVmYXVsdHModCk7dmFyIHY9dC5fZnVsbExheW91dCx4PXYuX2hhcygiY2FydGVzaWFuIik7aWYoIXYuX2hhcygicG9sYXIiKSYmZSYmZVswXSYmZVswXS5yKXJldHVybiBvLmxvZygiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCEiKSxmdW5jdGlvbih0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKS5kYXRhKFswXSk7aS5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIgcGxvdGx5IiwhMCk7dmFyIGE9aS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIikuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLGEuaHRtbCgiIiksZSYmKHQuZGF0YT1lKTtyJiYodC5sYXlvdXQ9cik7cC5tYW5hZ2VyLmZpbGxMYXlvdXQodCksYS5zdHlsZSh7d2lkdGg6dC5fZnVsbExheW91dC53aWR0aCsicHgiLGhlaWdodDp0Ll9mdWxsTGF5b3V0LmhlaWdodCsicHgifSksdC5mcmFtZXdvcms9cC5tYW5hZ2VyLmZyYW1ld29yayh0KSx0LmZyYW1ld29yayh7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSxhLm5vZGUoKSksdC5mcmFtZXdvcmsuc2V0VW5kb1BvaW50KCk7dmFyIHM9dC5mcmFtZXdvcmsuc3ZnKCksbD0xLGM9dC5fZnVsbExheW91dC50aXRsZT90Ll9mdWxsTGF5b3V0LnRpdGxlLnRleHQ6IiI7IiIhPT1jJiZjfHwobD0wKTt2YXIgdT1mdW5jdGlvbigpe3RoaXMuY2FsbChiLmNvbnZlcnRUb1RzcGFucyx0KX0sZj1zLnNlbGVjdCgiLnRpdGxlLWdyb3VwIHRleHQiKS5jYWxsKHUpO2lmKHQuX2NvbnRleHQuZWRpdHMudGl0bGVUZXh0KXt2YXIgZD1vLl8odCwiQ2xpY2sgdG8gZW50ZXIgUGxvdCB0aXRsZSIpO2MmJmMhPT1kfHwobD0uMixmLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpkfSkudGV4dChkKS5zdHlsZSh7b3BhY2l0eTpsfSkub24oIm1vdXNlb3Zlci5vcGFjaXR5IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJvcGFjaXR5IiwxKX0pLm9uKCJtb3VzZW91dC5vcGFjaXR5IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxZTMpLnN0eWxlKCJvcGFjaXR5IiwwKX0pKTt2YXIgZz1mdW5jdGlvbigpe3RoaXMuY2FsbChiLm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKCJlZGl0IixmdW5jdGlvbihlKXt0LmZyYW1ld29yayh7bGF5b3V0Ont0aXRsZTp7dGV4dDplfX19KSx0aGlzLnRleHQoZSkuY2FsbCh1KSx0aGlzLmNhbGwoZyl9KS5vbigiY2FuY2VsIixmdW5jdGlvbigpe3ZhciB0PXRoaXMuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpO3RoaXMudGV4dCh0KS5jYWxsKHUpfSl9O2YuY2FsbChnKX1yZXR1cm4gdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsdC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yKSxoLmFkZExpbmtzKHQpLFByb21pc2UucmVzb2x2ZSgpfSh0LGUsaSk7di5fcmVwbG90dGluZz0hMCxmJiZsdCh0KSx0LmZyYW1ld29yayE9PWx0JiYodC5mcmFtZXdvcms9bHQsbHQodCkpLGcuaW5pdEdyYWRpZW50cyh0KSxmJiZkLnNhdmVTaG93U3Bpa2VJbml0aWFsKHQpO3ZhciBfPSF0LmNhbGNkYXRhfHx0LmNhbGNkYXRhLmxlbmd0aCE9PSh0Ll9mdWxsRGF0YXx8W10pLmxlbmd0aDtfJiZoLmRvQ2FsY2RhdGEodCk7Zm9yKHZhciB3PTA7dzx0LmNhbGNkYXRhLmxlbmd0aDt3KyspdC5jYWxjZGF0YVt3XVswXS50cmFjZT10Ll9mdWxsRGF0YVt3XTt0Ll9jb250ZXh0LnJlc3BvbnNpdmU/dC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcnx8KHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXI9ZnVuY3Rpb24oKXtoLnJlc2l6ZSh0KX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcikpOm8uY2xlYXJSZXNwb25zaXZlKHQpO3ZhciBrPUpTT04uc3RyaW5naWZ5KHYuX3NpemUpLE09MDtmdW5jdGlvbiBTKCl7dmFyIGUscixuLGk9dC5jYWxjZGF0YTtmb3IoaC5jbGVhckF1dG9NYXJnaW5JZHModCksQS5kcmF3TWFyZ2luUHVzaGVycyh0KSxkLmFsbG93QXV0b01hcmdpbih0KSxlPTA7ZTxpLmxlbmd0aDtlKyspe3ZhciBhPShuPShyPWlbZV0pWzBdLnRyYWNlKS5fbW9kdWxlLmNvbG9yYmFyOyEwPT09bi52aXNpYmxlJiZhP20odCxyLGEpOmguYXV0b01hcmdpbih0LCJjYiIrbi51aWQpfXJldHVybiBoLmRvQXV0b01hcmdpbih0KSxoLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gRSgpe3QuX3RyYW5zaXRpb25pbmd8fChBLmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHModCksZiYmZC5zYXZlUmFuZ2VJbml0aWFsKHQpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImNhbGNBdXRvcmFuZ2UiKSh0KSl9dmFyIEw9W2gucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKHMpcmV0dXJuIHIuYWRkRnJhbWVzKHQscyl9LGZ1bmN0aW9uIGUoKXtmb3IodmFyIHI9di5fYmFzZVBsb3RNb2R1bGVzLG49MDtuPHIubGVuZ3RoO24rKylyW25dLmRyYXdGcmFtZXdvcmsmJnJbbl0uZHJhd0ZyYW1ld29yayh0KTtpZighdi5fZ2xjYW52YXMmJnYuX2hhcygiZ2wiKSYmKHYuX2dsY2FudmFzPXYuX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLmRhdGEoW3trZXk6ImNvbnRleHRMYXllciIsY29udGV4dDohMCxwaWNrOiExfSx7a2V5OiJmb2N1c0xheWVyIixjb250ZXh0OiExLHBpY2s6ITF9LHtrZXk6InBpY2tMYXllciIsY29udGV4dDohMSxwaWNrOiEwfV0sZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSksdi5fZ2xjYW52YXMuZW50ZXIoKS5hcHBlbmQoImNhbnZhcyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4iZ2wtY2FudmFzIGdsLWNhbnZhcy0iK3Qua2V5LnJlcGxhY2UoIkxheWVyIiwiIil9KS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsb3ZlcmZsb3c6InZpc2libGUiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSkpLHYuX2dsY2FudmFzKXt2Ll9nbGNhbnZhcy5hdHRyKCJ3aWR0aCIsdi53aWR0aCkuYXR0cigiaGVpZ2h0Iix2LmhlaWdodCk7dmFyIGk9di5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2w7aWYoaSYmKE1hdGguZmxvb3Iodi53aWR0aCkhPT1pLl9nbC5kcmF3aW5nQnVmZmVyV2lkdGh8fE1hdGguZmxvb3Iodi5oZWlnaHQpIT09aS5fZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCkpe3ZhciBhPSJXZWJHTCBjb250ZXh0IGJ1ZmZlciBhbmQgY2FudmFzIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoIGR1ZSB0byBicm93c2VyL1dlYkdMIGJ1Zy4iO2lmKCFNKXJldHVybiBvLmxvZyhhKyIgQ2xlYXJpbmcgZ3JhcGggYW5kIHBsb3R0aW5nIGFnYWluLiIpLGguY2xlYW5QbG90KFtdLHt9LHQuX2Z1bGxEYXRhLHYpLGguc3VwcGx5RGVmYXVsdHModCksdj10Ll9mdWxsTGF5b3V0LGguZG9DYWxjZGF0YSh0KSxNKyssZSgpO28uZXJyb3IoYSl9fXJldHVybiJoIj09PXYubW9kZWJhci5vcmllbnRhdGlvbj92Ll9tb2RlYmFyZGl2LnN0eWxlKCJoZWlnaHQiLG51bGwpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTp2Ll9tb2RlYmFyZGl2LnN0eWxlKCJ3aWR0aCIsbnVsbCkuc3R5bGUoImhlaWdodCIsdi5oZWlnaHQrInB4IiksaC5wcmV2aW91c1Byb21pc2VzKHQpfSxTLGZ1bmN0aW9uKCl7aWYoSlNPTi5zdHJpbmdpZnkodi5fc2l6ZSkhPT1rKXJldHVybiBvLnN5bmNPckFzeW5jKFtTLEEubGF5b3V0U3R5bGVzXSx0KX1dO3gmJkwucHVzaChmdW5jdGlvbigpe2lmKF8pcmV0dXJuIG8uc3luY09yQXN5bmMoW3UuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJjYWxjQXV0b3JhbmdlIiksdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY2FsY0F1dG9yYW5nZSIpLEVdLHQpO0UoKX0pLEwucHVzaChBLmxheW91dFN0eWxlcykseCYmTC5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZHJhdyh0LGY/IiI6InJlZHJhdyIpfSksTC5wdXNoKEEuZHJhd0RhdGEsQS5maW5hbERyYXcseSxoLmFkZExpbmtzLGgucmVob3ZlcixoLmRvQXV0b01hcmdpbixoLnByZXZpb3VzUHJvbWlzZXMpO3ZhciB6PW8uc3luY09yQXN5bmMoTCx0KTtyZXR1cm4geiYmei50aGVufHwoej1Qcm9taXNlLnJlc29sdmUoKSksei50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEModCksdH0pfSxyLnNldFBsb3RDb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZXh0ZW5kRmxhdCh3LHQpfSxyLnJlZHJhdz1mdW5jdGlvbih0KXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QpO3JldHVybiBULmNsZWFuRGF0YSh0LmRhdGEpLFQuY2xlYW5MYXlvdXQodC5sYXlvdXQpLHQuY2FsY2RhdGE9dm9pZCAwLHIucGxvdCh0KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlZHJhdyIpLHR9KX0sci5uZXdQbG90PWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0PW8uZ2V0R3JhcGhEaXYodCksaC5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGF8fFtdLHQuX2Z1bGxMYXlvdXR8fHt9KSxoLnB1cmdlKHQpLHIucGxvdCh0LGUsbixpKX0sci5leHRlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSxhKXt2YXIgcz1SKGU9by5nZXRHcmFwaERpdihlKSxuLGksYSxmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPDApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9Rih0LGUpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCksaS5zZXQoZS5zdWJhcnJheSgwLGwpLHQubGVuZ3RoKX1lbHNle3ZhciBjPXItZS5sZW5ndGgsdT10Lmxlbmd0aC1jO24uc2V0KHQuc3ViYXJyYXkodSkpLG4uc2V0KGUsYyksaS5zZXQodC5zdWJhcnJheSgwLHUpKX1lbHNlIG49dC5jb25jYXQoZSksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKDAsbi5sZW5ndGgtcik6W107cmV0dXJuW24saV19KSxsPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsaSxzLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5wcmVwZW5kVHJhY2VzLHUsdCxhcmd1bWVudHMpLGx9LHIucHJlcGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpLGEpe3ZhciBzPVIoZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKG8uaXNUeXBlZEFycmF5KHQpKWlmKHI8PTApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9RihlLHQpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheSgwLGwpKSxpLnNldChlLnN1YmFycmF5KGwpKSxpLnNldCh0LGwpfWVsc2V7dmFyIGM9ci1lLmxlbmd0aDtuLnNldChlKSxuLnNldCh0LnN1YmFycmF5KDAsYyksZS5sZW5ndGgpLGkuc2V0KHQuc3ViYXJyYXkoYykpfWVsc2Ugbj1lLmNvbmNhdCh0KSxpPXI+PTAmJnI8bi5sZW5ndGg/bi5zcGxpY2UocixuLmxlbmd0aCk6W107cmV0dXJuW24saV19KSxsPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsaSxzLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5leHRlbmRUcmFjZXMsdSx0LGFyZ3VtZW50cyksbH0sci5hZGRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBhLHMsbD1bXSx1PXIuZGVsZXRlVHJhY2VzLGY9dCxoPVtlLGxdLHA9W2Usbl07Zm9yKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigidHJhY2VzIG11c3QgYmUgZGVmaW5lZC4iKTtmb3IoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIm9iamVjdCIhPXR5cGVvZihpPWVbbl0pfHxBcnJheS5pc0FycmF5KGkpfHxudWxsPT09aSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gdHJhY2VzIGFycmF5IG11c3QgYmUgbm9uLWFycmF5IG9iamVjdHMiKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksInVuZGVmaW5lZCIhPXR5cGVvZiByJiZyLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaWYgaW5kaWNlcyBpcyBzcGVjaWZpZWQsIHRyYWNlcy5sZW5ndGggbXVzdCBlcXVhbCBpbmRpY2VzLmxlbmd0aCIpfShlLG4saSksQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxuPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoe30sdCl9KSxULmNsZWFuRGF0YShuKSxhPTA7YTxuLmxlbmd0aDthKyspZS5kYXRhLnB1c2goblthXSk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylsLnB1c2goLW4ubGVuZ3RoK2EpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgaSlyZXR1cm4gcz1yLnJlZHJhdyhlKSxjLmFkZChlLHUsaCxmLHApLHM7QXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKTt0cnl7UChlLGwsaSl9Y2F0Y2godCl7dGhyb3cgZS5kYXRhLnNwbGljZShlLmRhdGEubGVuZ3RoLW4ubGVuZ3RoLG4ubGVuZ3RoKSx0fXJldHVybiBjLnN0YXJ0U2VxdWVuY2UoZSksYy5hZGQoZSx1LGgsZixwKSxzPXIubW92ZVRyYWNlcyhlLGwsaSksYy5zdG9wU2VxdWVuY2UoZSksc30sci5kZWxldGVUcmFjZXM9ZnVuY3Rpb24gdChlLG4pe2U9by5nZXRHcmFwaERpdihlKTt2YXIgaSxhLHM9W10sbD1yLmFkZFRyYWNlcyx1PXQsZj1bZSxzLG5dLGg9W2Usbl07aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnMuIik7Zm9yKEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksRChlLG4sImluZGljZXMiKSwobj1JKG4sZS5kYXRhLmxlbmd0aC0xKSkuc29ydChvLnNvcnRlckRlcyksaT0wO2k8bi5sZW5ndGg7aSs9MSlhPWUuZGF0YS5zcGxpY2UobltpXSwxKVswXSxzLnB1c2goYSk7dmFyIHA9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsbCxmLHUsaCkscH0sci5tb3ZlVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGkpe3ZhciBhLHM9W10sbD1bXSx1PXQsZj10LGg9W2U9by5nZXRHcmFwaERpdihlKSxpLG5dLHA9W2UsbixpXTtpZihQKGUsbixpKSxuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sInVuZGVmaW5lZCI9PXR5cGVvZiBpKWZvcihpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKylpLnB1c2goLW4ubGVuZ3RoK2EpO2ZvcihpPUFycmF5LmlzQXJyYXkoaSk/aTpbaV0sbj1JKG4sZS5kYXRhLmxlbmd0aC0xKSxpPUkoaSxlLmRhdGEubGVuZ3RoLTEpLGE9MDthPGUuZGF0YS5sZW5ndGg7YSsrKS0xPT09bi5pbmRleE9mKGEpJiZzLnB1c2goZS5kYXRhW2FdKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKWwucHVzaCh7bmV3SW5kZXg6aVthXSx0cmFjZTplLmRhdGFbblthXV19KTtmb3IobC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmV3SW5kZXgtZS5uZXdJbmRleH0pLGE9MDthPGwubGVuZ3RoO2ErPTEpcy5zcGxpY2UobFthXS5uZXdJbmRleCwwLGxbYV0udHJhY2UpO2UuZGF0YT1zO3ZhciBkPXIucmVkcmF3KGUpO3JldHVybiBjLmFkZChlLHUsaCxmLHApLGR9LHIucmVzdHlsZT1CLHIuX3N0b3JlRGlyZWN0R1VJRWRpdD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHIpe1YobixzKHQsbikuZ2V0KCkscltuXSxlKX19LHIucmVsYXlvdXQ9SDt2YXIgVz0vXlt4eXpdYXhpc1swLTldKlwucmFuZ2UoXFtbMHwxXVxdKT8kLyxYPS9eW3h5el1heGlzWzAtOV0qXC5hdXRvcmFuZ2UkLyxaPS9eW3h5el1heGlzWzAtOV0qXC5kb21haW4oXFtbMHwxXVxdKT8kLztmdW5jdGlvbiAkKHQsZSl7dmFyIHIsbixpLGE9dC5sYXlvdXQsbD10Ll9mdWxsTGF5b3V0LGM9bC5fZ3VpRWRpdGluZyxoPWoobC5fcHJlR1VJLGMpLHA9T2JqZWN0LmtleXMoZSksZz1kLmxpc3QodCksdj1vLmV4dGVuZERlZXBBbGwoe30sZSksbT17fTtmb3IocShlKSxwPU9iamVjdC5rZXlzKGUpLG49MDtuPHAubGVuZ3RoO24rKylpZigwPT09cFtuXS5pbmRleE9mKCJhbGxheGVzIikpe2ZvcihpPTA7aTxnLmxlbmd0aDtpKyspe3ZhciB5PWdbaV0uX2lkLnN1YnN0cigxKSx4PS0xIT09eS5pbmRleE9mKCJzY2VuZSIpP3krIi4iOiIiLGI9cFtuXS5yZXBsYWNlKCJhbGxheGVzIix4K2dbaV0uX25hbWUpO2VbYl18fChlW2JdPWVbcFtuXV0pfWRlbGV0ZSBlW3Bbbl1dfXZhciBfPU0ubGF5b3V0RmxhZ3MoKSx3PXt9LEE9e307ZnVuY3Rpb24gRSh0LHIpe2lmKEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe0UodCxyKX0pO2Vsc2UgaWYoISh0IGluIGV8fFQuaGFzUGFyZW50KGUsdCkpKXt2YXIgbj1oKGEsdCk7dCBpbiBBfHwoQVt0XT1OKG4uZ2V0KCkpKSx2b2lkIDAhPT1yJiZuLnNldChyKX19dmFyIEMsTD17fTtmdW5jdGlvbiB6KHQpe3ZhciBlPWQubmFtZTJpZCh0LnNwbGl0KCIuIilbMF0pO3JldHVybiBMW2VdPTEsZX1mb3IodmFyIE8gaW4gZSl7aWYoVC5oYXNQYXJlbnQoZSxPKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzZXQgIitPKyIgYW5kIGEgcGFyZW50IGF0dHJpYnV0ZSBzaW11bHRhbmVvdXNseSIpO2Zvcih2YXIgST1oKGEsTyksRD1lW09dLFA9SS5wYXJ0cy5sZW5ndGgtMTtQPjAmJiJzdHJpbmciIT10eXBlb2YgSS5wYXJ0c1tQXTspUC0tO3ZhciBSPUkucGFydHNbUF0sRj1JLnBhcnRzW1AtMV0rIi4iK1IsQj1JLnBhcnRzLnNsaWNlKDAsUCkuam9pbigiLiIpLFY9cyh0LmxheW91dCxCKS5nZXQoKSxVPXMobCxCKS5nZXQoKSxIPUkuZ2V0KCk7aWYodm9pZCAwIT09RCl7d1tPXT1ELEFbT109InJldmVyc2UiPT09Uj9EOk4oSCk7dmFyIEc9Zi5nZXRMYXlvdXRWYWxPYmplY3QobCxJLnBhcnRzKTtpZihHJiZHLmltcGxpZWRFZGl0cyYmbnVsbCE9PUQpZm9yKHZhciBZIGluIEcuaW1wbGllZEVkaXRzKUUoby5yZWxhdGl2ZUF0dHIoTyxZKSxHLmltcGxpZWRFZGl0c1tZXSk7aWYoLTEhPT1bIndpZHRoIiwiaGVpZ2h0Il0uaW5kZXhPZihPKSlpZihEKXtFKCJhdXRvc2l6ZSIsbnVsbCk7dmFyICQ9ImhlaWdodCI9PT1PPyJ3aWR0aCI6ImhlaWdodCI7RSgkLGxbJF0pfWVsc2UgbFtPXT10Ll9pbml0aWFsQXV0b1NpemVbT107ZWxzZSBpZigiYXV0b3NpemUiPT09TylFKCJ3aWR0aCIsRD9udWxsOmwud2lkdGgpLEUoImhlaWdodCIsRD9udWxsOmwuaGVpZ2h0KTtlbHNlIGlmKEYubWF0Y2goVykpeihGKSxzKGwsQisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO2Vsc2UgaWYoRi5tYXRjaChYKSl7eihGKSxzKGwsQisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO3ZhciBLPXMobCxCKS5nZXQoKTtLLl9pbnB1dERvbWFpbiYmKEsuX2lucHV0LmRvbWFpbj1LLl9pbnB1dERvbWFpbi5zbGljZSgpKX1lbHNlIEYubWF0Y2goWikmJnMobCxCKyIuX2lucHV0RG9tYWluIikuc2V0KG51bGwpO2lmKCJ0eXBlIj09PVIpe3ZhciBRPVYsdHQ9ImxpbmVhciI9PT1VLnR5cGUmJiJsb2ciPT09RCxldD0ibG9nIj09PVUudHlwZSYmImxpbmVhciI9PT1EO2lmKHR0fHxldCl7aWYoUSYmUS5yYW5nZSlpZihVLmF1dG9yYW5nZSl0dCYmKFEucmFuZ2U9US5yYW5nZVsxXT5RLnJhbmdlWzBdP1sxLDJdOlsyLDFdKTtlbHNle3ZhciBydD1RLnJhbmdlWzBdLG50PVEucmFuZ2VbMV07dHQ/KHJ0PD0wJiZudDw9MCYmRShCKyIuYXV0b3JhbmdlIiwhMCkscnQ8PTA/cnQ9bnQvMWU2Om50PD0wJiYobnQ9cnQvMWU2KSxFKEIrIi5yYW5nZVswXSIsTWF0aC5sb2cocnQpL01hdGguTE4xMCksRShCKyIucmFuZ2VbMV0iLE1hdGgubG9nKG50KS9NYXRoLkxOMTApKTooRShCKyIucmFuZ2VbMF0iLE1hdGgucG93KDEwLHJ0KSksRShCKyIucmFuZ2VbMV0iLE1hdGgucG93KDEwLG50KSkpfWVsc2UgRShCKyIuYXV0b3JhbmdlIiwhMCk7QXJyYXkuaXNBcnJheShsLl9zdWJwbG90cy5wb2xhcikmJmwuX3N1YnBsb3RzLnBvbGFyLmxlbmd0aCYmbFtJLnBhcnRzWzBdXSYmInJhZGlhbGF4aXMiPT09SS5wYXJ0c1sxXSYmZGVsZXRlIGxbSS5wYXJ0c1swXV0uX3N1YnBsb3Qudmlld0luaXRpYWxbInJhZGlhbGF4aXMucmFuZ2UiXSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjb252ZXJ0Q29vcmRzIikodCxVLEQsRSksdS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImNvbnZlcnRDb29yZHMiKSh0LFUsRCxFKX1lbHNlIEUoQisiLmF1dG9yYW5nZSIsITApLEUoQisiLnJhbmdlIixudWxsKTtzKGwsQisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpfWVsc2UgaWYoUi5tYXRjaChTKSl7dmFyIGl0PXMobCxPKS5nZXQoKSxhdD0oRHx8e30pLnR5cGU7YXQmJiItIiE9PWF0fHwoYXQ9ImxpbmVhciIpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LGl0LGF0LEUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJjb252ZXJ0Q29vcmRzIikodCxpdCxhdCxFKX12YXIgb3Q9ay5jb250YWluZXJBcnJheU1hdGNoKE8pO2lmKG90KXtyPW90LmFycmF5LG49b3QuaW5kZXg7dmFyIHN0PW90LnByb3BlcnR5LGx0PUd8fHtlZGl0VHlwZToiY2FsYyJ9OyIiIT09biYmIiI9PT1zdCYmKGsuaXNBZGRWYWwoRCk/QVtPXT1udWxsOmsuaXNSZW1vdmVWYWwoRCk/QVtPXT0ocyhhLHIpLmdldCgpfHxbXSlbbl06by53YXJuKCJ1bnJlY29nbml6ZWQgZnVsbCBvYmplY3QgdmFsdWUiLGUpKSxNLnVwZGF0ZShfLGx0KSxtW3JdfHwobVtyXT17fSk7dmFyIGN0PW1bcl1bbl07Y3R8fChjdD1tW3JdW25dPXt9KSxjdFtzdF09RCxkZWxldGUgZVtPXX1lbHNlInJldmVyc2UiPT09Uj8oVi5yYW5nZT9WLnJhbmdlLnJldmVyc2UoKTooRShCKyIuYXV0b3JhbmdlIiwhMCksVi5yYW5nZT1bMSwwXSksVS5hdXRvcmFuZ2U/Xy5jYWxjPSEwOl8ucGxvdD0hMCk6KGwuX2hhcygic2NhdHRlci1saWtlIikmJmwuX2hhcygicmVnbCIpJiYiZHJhZ21vZGUiPT09TyYmKCJsYXNzbyI9PT1EfHwic2VsZWN0Ij09PUQpJiYibGFzc28iIT09SCYmInNlbGVjdCIhPT1IP18ucGxvdD0hMDpsLl9oYXMoImdsMmQiKT9fLnBsb3Q9ITA6Rz9NLnVwZGF0ZShfLEcpOl8uY2FsYz0hMCxJLnNldChEKSl9fWZvcihyIGluIG0pe2suYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXModCxoKGEsciksbVtyXSxfLGgpfHwoXy5wbG90PSEwKX12YXIgdXQ9bC5fYXhpc0NvbnN0cmFpbnRHcm91cHN8fFtdO2ZvcihDIGluIEwpZm9yKG49MDtuPHV0Lmxlbmd0aDtuKyspe3ZhciBmdD11dFtuXTtpZihmdFtDXSlmb3IodmFyIGh0IGluIF8uY2FsYz0hMCxmdClMW2h0XXx8KGQuZ2V0RnJvbUlkKHQsaHQpLl9jb25zdHJhaW50U2hyaW5rYWJsZT0hMCl9cmV0dXJuKEoodCl8fGUuaGVpZ2h0fHxlLndpZHRoKSYmKF8ucGxvdD0hMCksKF8ucGxvdHx8Xy5jYWxjKSYmKF8ubGF5b3V0UmVwbG90PSEwKSx7ZmxhZ3M6XyxyYW5nZXNBbHRlcmVkOkwsdW5kb2l0OkEscmVkb2l0OncsZXZlbnREYXRhOnZ9fWZ1bmN0aW9uIEoodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUud2lkdGgsbj1lLmhlaWdodDtyZXR1cm4gdC5sYXlvdXQuYXV0b3NpemUmJmgucGxvdEF1dG9TaXplKHQsdC5sYXlvdXQsZSksZS53aWR0aCE9PXJ8fGUuaGVpZ2h0IT09bn1mdW5jdGlvbiBLKHQsZSxuLGkpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxULmNsZWFyUHJvbWlzZVF1ZXVlKHQpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7by5pc1BsYWluT2JqZWN0KGUpfHwoZT17fSksby5pc1BsYWluT2JqZWN0KG4pfHwobj17fSksT2JqZWN0LmtleXMoZSkubGVuZ3RoJiYodC5jaGFuZ2VkPSEwKSxPYmplY3Qua2V5cyhuKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBhPVQuY29lcmNlVHJhY2VJbmRpY2VzKHQsaSkscz1VKHQsby5leHRlbmRGbGF0KHt9LGUpLGEpLGw9cy5mbGFncyx1PSQodCxvLmV4dGVuZEZsYXQoe30sbikpLGY9dS5mbGFnczsobC5jYWxjfHxmLmNhbGMpJiYodC5jYWxjZGF0YT12b2lkIDApLGwuY2xlYXJBeGlzVHlwZXMmJlQuY2xlYXJBeGlzVHlwZXModCxhLG4pO3ZhciBwPVtdO2lmKGwuZnVsbFJlcGxvdCYmZi5sYXlvdXRSZXBsb3Qpe3ZhciBkPXQuZGF0YSxnPXQubGF5b3V0O3QuZGF0YT12b2lkIDAsdC5sYXlvdXQ9dm9pZCAwLHAucHVzaChmdW5jdGlvbigpe3JldHVybiByLnBsb3QodCxkLGcpfSl9ZWxzZSBsLmZ1bGxSZXBsb3Q/cC5wdXNoKHIucGxvdCk6Zi5sYXlvdXRSZXBsb3Q/cC5wdXNoKEEubGF5b3V0UmVwbG90KToocC5wdXNoKGgucHJldmlvdXNQcm9taXNlcyksRyh0LGYsdSl8fGguc3VwcGx5RGVmYXVsdHModCksbC5zdHlsZSYmcC5wdXNoKEEuZG9UcmFjZVN0eWxlKSxsLmNvbG9yYmFycyYmcC5wdXNoKEEuZG9Db2xvckJhcnMpLGYubGVnZW5kJiZwLnB1c2goQS5kb0xlZ2VuZCksZi5sYXlvdXRzdHlsZSYmcC5wdXNoKEEubGF5b3V0U3R5bGVzKSxmLmF4cmFuZ2UmJlkocCx1LnJhbmdlc0FsdGVyZWQpLGYudGlja3MmJnAucHVzaChBLmRvVGlja3NSZWxheW91dCksZi5tb2RlYmFyJiZwLnB1c2goQS5kb01vZGVCYXIpLGYuY2FtZXJhJiZwLnB1c2goQS5kb0NhbWVyYSkscC5wdXNoKEMpKTtwLnB1c2goaC5yZWhvdmVyKSxjLmFkZCh0LEssW3Qscy51bmRvaXQsdS51bmRvaXQscy50cmFjZXNdLEssW3Qscy5yZWRvaXQsdS5yZWRvaXQscy50cmFjZXNdKTt2YXIgdj1vLnN5bmNPckFzeW5jKHAsdCk7cmV0dXJuIHYmJnYudGhlbnx8KHY9UHJvbWlzZS5yZXNvbHZlKHQpKSx2LnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfdXBkYXRlIix7ZGF0YTpzLmV2ZW50RGF0YSxsYXlvdXQ6dS5ldmVudERhdGF9KSx0fSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMDt2YXIgcj10LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMSxyfX1yLnVwZGF0ZT1LLHIuX2d1aVJlc3R5bGU9UShCKSxyLl9ndWlSZWxheW91dD1RKEgpLHIuX2d1aVVwZGF0ZT1RKEspO3ZhciB0dD1be3BhdHRlcm46L15oaWRkZW5sYWJlbHMvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L14oKHh8eSlheGlzXGQqKVwuKChhdXRvKT9yYW5nZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovYXhpc1xkKlwuc2hvd3NwaWtlcyQvLGF0dHI6Im1vZGViYXIudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi8oaG92ZXJ8ZHJhZyltb2RlJC8sYXR0cjoibW9kZWJhci51aXJldmlzaW9uIn0se3BhdHRlcm46L14oc2NlbmVcZCopXC5jYW1lcmEvfSx7cGF0dGVybjovXihnZW9cZCopXC4ocHJvamVjdGlvbnxjZW50ZXIpL30se3BhdHRlcm46L14odGVybmFyeVxkKlwuW2FiY11heGlzKVwuKG1pbnx0aXRsZVwudGV4dCkkL30se3BhdHRlcm46L14ocG9sYXJcZCpcLnJhZGlhbGF4aXMpXC4oKGF1dG8pP3JhbmdlfGFuZ2xlfHRpdGxlXC50ZXh0KS99LHtwYXR0ZXJuOi9eKHBvbGFyXGQqXC5hbmd1bGFyYXhpcylcLnJvdGF0aW9uL30se3BhdHRlcm46L14obWFwYm94XGQqKVwuKGNlbnRlcnx6b29tfGJlYXJpbmd8cGl0Y2gpL30se3BhdHRlcm46L15sZWdlbmRcLih4fHkpJC8sYXR0cjoiZWRpdHJldmlzaW9uIn0se3BhdHRlcm46L14oc2hhcGVzfGFubm90YXRpb25zKS8sYXR0cjoiZWRpdHJldmlzaW9uIn0se3BhdHRlcm46L150aXRsZVwudGV4dCQvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9XSxldD1be3BhdHRlcm46L15zZWxlY3RlZHBvaW50cyQvLGF0dHI6InNlbGVjdGlvbnJldmlzaW9uIn0se3BhdHRlcm46LyhefHZhbHVlXC4pdmlzaWJsZSQvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L15kaW1lbnNpb25zXFtcZCtcXVwuY29uc3RyYWludHJhbmdlL30se3BhdHRlcm46L15ub2RlXC4oeHx5KS99LHtwYXR0ZXJuOi9ebGV2ZWwkL30se3BhdHRlcm46LyhefHZhbHVlXC4pbmFtZSQvfSx7cGF0dGVybjovY29sb3JiYXJcLnRpdGxlXC50ZXh0JC99LHtwYXR0ZXJuOi9jb2xvcmJhclwuKHh8eSkkLyxhdHRyOiJlZGl0cmV2aXNpb24ifV07ZnVuY3Rpb24gcnQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPXQubWF0Y2gobi5wYXR0ZXJuKTtpZihpKXJldHVybntoZWFkOmlbMV0sYXR0cjpuLmF0dHJ9fX1mdW5jdGlvbiBudCh0LGUpe3ZhciByPXMoZSx0KS5nZXQoKTtpZih2b2lkIDAhPT1yKXJldHVybiByO3ZhciBuPXQuc3BsaXQoIi4iKTtmb3Iobi5wb3AoKTtuLmxlbmd0aD4xOylpZihuLnBvcCgpLHZvaWQgMCE9PShyPXMoZSxuLmpvaW4oIi4iKSsiLnVpcmV2aXNpb24iKS5nZXQoKSkpcmV0dXJuIHI7cmV0dXJuIGUudWlyZXZpc2lvbn1mdW5jdGlvbiBpdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0uX2Z1bGxJbnB1dC51aWQ9PT10KXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGF0KHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLnVpZD09PXQpcmV0dXJuIG47cmV0dXJuIWVbcl18fGVbcl0udWlkPy0xOnJ9ZnVuY3Rpb24gb3QodCxlKXt2YXIgcj1vLmlzUGxhaW5PYmplY3QodCksbj1BcnJheS5pc0FycmF5KHQpO3JldHVybiByfHxuPyhyJiZvLmlzUGxhaW5PYmplY3QoZSl8fG4mJkFycmF5LmlzQXJyYXkoZSkpJiZKU09OLnN0cmluZ2lmeSh0KT09PUpTT04uc3RyaW5naWZ5KGUpOnQ9PT1lfWZ1bmN0aW9uIHN0KHQsZSxyLG4pe3ZhciBpLGEsbCxjPW4uZ2V0VmFsT2JqZWN0LHU9bi5mbGFncyxmPW4uaW1tdXRhYmxlLGg9bi5pbkFycmF5LHA9bi5hcnJheUluZGV4O2Z1bmN0aW9uIGQoKXt2YXIgdD1pLmVkaXRUeXBlO2gmJi0xIT09dC5pbmRleE9mKCJhcnJheWRyYXciKT9vLnB1c2hVbmlxdWUodS5hcnJheXNbaF0scCk6KE0udXBkYXRlKHUsaSksIm5vbmUiIT09dCYmdS5uQ2hhbmdlcysrLG4udHJhbnNpdGlvbiYmaS5hbmltJiZ1Lm5DaGFuZ2VzQW5pbSsrLChXLnRlc3QobCl8fFgudGVzdChsKSkmJih1LnJhbmdlc0FsdGVyZWRbclswXV09MSksWi50ZXN0KGwpJiZzKGUsIl9pbnB1dERvbWFpbiIpLnNldChudWxsKSwiZGF0YXJldmlzaW9uIj09PWEmJih1Lm5ld0RhdGFSZXZpc2lvbj0xKSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4iZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fHQuYXJyYXlPa31mb3IoYSBpbiB0KXtpZih1LmNhbGMmJiFuLnRyYW5zaXRpb24pcmV0dXJuO3ZhciB2PXRbYV0sbT1lW2FdLHk9ci5jb25jYXQoYSk7aWYobD15LmpvaW4oIi4iKSwiXyIhPT1hLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIHYmJnYhPT1tKXtpZigoInRpY2swIj09PWF8fCJkdGljayI9PT1hKSYmImdlbyIhPT1yWzBdKXt2YXIgeD1lLnRpY2ttb2RlO2lmKCJhdXRvIj09PXh8fCJhcnJheSI9PT14fHwheCljb250aW51ZX1pZigoInJhbmdlIiE9PWF8fCFlLmF1dG9yYW5nZSkmJigiem1pbiIhPT1hJiYiem1heCIhPT1hfHwiY29udG91cmNhcnBldCIhPT1lLnR5cGUpJiYoaT1jKHkpKSYmKCFpLl9jb21wYXJlQXNKU09OfHxKU09OLnN0cmluZ2lmeSh2KSE9PUpTT04uc3RyaW5naWZ5KG0pKSl7dmFyIGIsXz1pLnZhbFR5cGUsdz1nKGkpLGs9QXJyYXkuaXNBcnJheSh2KSxUPUFycmF5LmlzQXJyYXkobSk7aWYoayYmVCl7dmFyIEE9Il9pbnB1dF8iK2EsUz10W0FdLEU9ZVtBXTtpZihBcnJheS5pc0FycmF5KFMpJiZTPT09RSljb250aW51ZX1pZih2b2lkIDA9PT1tKXcmJms/dS5jYWxjPSEwOmQoKTtlbHNlIGlmKGkuX2lzTGlua2VkVG9BcnJheSl7dmFyIEM9W10sTD0hMTtofHwodS5hcnJheXNbYV09Qyk7dmFyIHo9TWF0aC5taW4odi5sZW5ndGgsbS5sZW5ndGgpLE89TWF0aC5tYXgodi5sZW5ndGgsbS5sZW5ndGgpO2lmKHohPT1PKXtpZigiYXJyYXlkcmF3IiE9PWkuZWRpdFR5cGUpe2QoKTtjb250aW51ZX1MPSEwfWZvcihiPTA7Yjx6O2IrKylzdCh2W2JdLG1bYl0seS5jb25jYXQoYiksby5leHRlbmRGbGF0KHtpbkFycmF5OmEsYXJyYXlJbmRleDpifSxuKSk7aWYoTClmb3IoYj16O2I8TztiKyspQy5wdXNoKGIpfWVsc2UhXyYmby5pc1BsYWluT2JqZWN0KHYpP3N0KHYsbSx5LG4pOnc/ayYmVD8oZiYmKHUuY2FsYz0hMCksKGZ8fG4ubmV3RGF0YVJldmlzaW9uKSYmZCgpKTprIT09VD91LmNhbGM9ITA6ZCgpOmsmJlQmJnYubGVuZ3RoPT09bS5sZW5ndGgmJlN0cmluZyh2KT09PVN0cmluZyhtKXx8ZCgpfX19Zm9yKGEgaW4gZSlpZighKGEgaW4gdHx8Il8iPT09YS5jaGFyQXQoMCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlW2FdKSl7aWYoZyhpPWMoci5jb25jYXQoYSkpKSYmQXJyYXkuaXNBcnJheShlW2FdKSlyZXR1cm4gdm9pZCh1LmNhbGM9ITApO2QoKX19ZnVuY3Rpb24gbHQodCl7dmFyIGU9bi5zZWxlY3QodCkscj10Ll9mdWxsTGF5b3V0O2lmKHIuX2NvbnRhaW5lcj1lLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikuZGF0YShbMF0pLHIuX2NvbnRhaW5lci5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIiLCEwKS5jbGFzc2VkKCJwbG90bHkiLCEwKSxyLl9wYXBlcmRpdj1yLl9jb250YWluZXIuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9wYXBlcmRpdi5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgic3ZnLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsInJlbGF0aXZlIiksci5fZ2xjb250YWluZXI9ci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIuZ2wtY29udGFpbmVyIikuZGF0YShbe31dKSxyLl9nbGNvbnRhaW5lci5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiZ2wtY29udGFpbmVyIiwhMCksci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5yZW1vdmUoKSxyLl9wYXBlcmRpdi5zZWxlY3QoIi5tb2RlYmFyLWNvbnRhaW5lciIpLnJlbW92ZSgpLHIuX3BhcGVyPXIuX3BhcGVyZGl2Lmluc2VydCgic3ZnIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSxyLl90b3BwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fbW9kZWJhcmRpdj1yLl9wYXBlcmRpdi5hcHBlbmQoImRpdiIpLHIuX2hvdmVycGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLCFyLl91aWQpe3ZhciBpPXt9O24uc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbigpe3RoaXMuaWQmJihpW3RoaXMuaWQuc3BsaXQoIi0iKVsxXV09MSl9KSxyLl91aWQ9by5yYW5kc3RyKGkpfXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuYXR0cih4LnN2Z0F0dHJzKSxyLl9kZWZzPXIuX3BhcGVyLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwiZGVmcy0iK3IuX3VpZCksci5fY2xpcHM9ci5fZGVmcy5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLHIuX3RvcGRlZnM9ci5fdG9wcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJ0b3BkZWZzLSIrci5fdWlkKSxyLl90b3BjbGlwcz1yLl90b3BkZWZzLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCksci5fYmdMYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJiZ2xheWVyIiwhMCksci5fZHJhZ2dlcnM9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZHJhZ2xheWVyIiwhMCk7dmFyIGE9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYmVsb3ciLCEwKTtyLl9pbWFnZUxvd2VyTGF5ZXI9YS5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVMb3dlckxheWVyPWEuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2NhcnRlc2lhbmxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNhcnRlc2lhbmxheWVyIiwhMCksci5fcG9sYXJsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2xhcmxheWVyIiwhMCksci5fdGVybmFyeWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRlcm5hcnlsYXllciIsITApLHIuX2dlb2xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdlb2xheWVyIiwhMCksci5fcGllbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgicGllbGF5ZXIiLCEwKSxyLl9zdW5idXJzdGxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN1bmJ1cnN0bGF5ZXIiLCEwKSxyLl9nbGltYWdlcz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJnbGltYWdlcyIsITApO3ZhciBzPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxheWVyLWFib3ZlIiwhMCk7ci5faW1hZ2VVcHBlckxheWVyPXMuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW1hZ2VsYXllciIsITApLHIuX3NoYXBlVXBwZXJMYXllcj1zLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNoYXBlbGF5ZXIiLCEwKSxyLl9pbmZvbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW5mb2xheWVyIiwhMCksci5fbWVudWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1lbnVsYXllciIsITApLHIuX3pvb21sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ6b29tbGF5ZXIiLCEwKSxyLl9ob3ZlcmxheWVyPXIuX2hvdmVycGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJsYXllciIsITApLHIuX21vZGViYXJkaXYuY2xhc3NlZCgibW9kZWJhci1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJ0b3AiLCIwcHgiKS5zdHlsZSgicmlnaHQiLCIwcHgiKSx0LmVtaXQoInBsb3RseV9mcmFtZXdvcmsiKX1yLnJlYWN0PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhLGw7dmFyIGM9KHQ9by5nZXRHcmFwaERpdih0KSkuX2Z1bGxEYXRhLHA9dC5fZnVsbExheW91dDtpZihvLmlzUGxvdERpdih0KSYmYyYmcCl7aWYoby5pc1BsYWluT2JqZWN0KGUpKXt2YXIgZD1lO2U9ZC5kYXRhLG49ZC5sYXlvdXQsaT1kLmNvbmZpZyxhPWQuZnJhbWVzfXZhciBnPSExO2lmKGkpe3ZhciB2PW8uZXh0ZW5kRGVlcCh7fSx0Ll9jb250ZXh0KTt0Ll9jb250ZXh0PXZvaWQgMCxPKHQsaSksZz1mdW5jdGlvbiB0KGUscil7dmFyIG47Zm9yKG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGk9ZVtuXSxhPXJbbl07aWYoaSE9PWEpaWYoby5pc1BsYWluT2JqZWN0KGkpJiZvLmlzUGxhaW5PYmplY3QoYSkpe2lmKHQoaSxhKSlyZXR1cm4hMH1lbHNle2lmKCFBcnJheS5pc0FycmF5KGkpfHwhQXJyYXkuaXNBcnJheShhKSlyZXR1cm4hMDtpZihpLmxlbmd0aCE9PWEubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWlmKGlbc10hPT1hW3NdKXtpZighby5pc1BsYWluT2JqZWN0KGlbc10pfHwhby5pc1BsYWluT2JqZWN0KGFbc10pKXJldHVybiEwO2lmKHQoaVtzXSxhW3NdKSlyZXR1cm4hMH19fX0odix0Ll9jb250ZXh0KX10LmRhdGE9ZXx8W10sVC5jbGVhbkRhdGEodC5kYXRhKSx0LmxheW91dD1ufHx7fSxULmNsZWFuTGF5b3V0KHQubGF5b3V0KSxmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLGwsYyx1LGYsaCxwLGQ9bi5fcHJlR1VJLGc9W10sdj17fTtmb3IoaSBpbiBkKXtpZih1PXJ0KGksdHQpKXtpZihhPXUuYXR0cnx8dS5oZWFkKyIudWlyZXZpc2lvbiIsKGM9KGw9cyhuLGEpLmdldCgpKSYmbnQoYSxlKSkmJmM9PT1sJiYobnVsbD09PShmPWRbaV0pJiYoZj12b2lkIDApLG90KHA9KGg9cyhlLGkpKS5nZXQoKSxmKSkpe3ZvaWQgMD09PXAmJiJhdXRvcmFuZ2UiPT09aS5zdWJzdHIoaS5sZW5ndGgtOSkmJmcucHVzaChpLnN1YnN0cigwLGkubGVuZ3RoLTEwKSksaC5zZXQoTihzKG4saSkuZ2V0KCkpKTtjb250aW51ZX19ZWxzZSBvLndhcm4oInVucmVjb2duaXplZCBHVUkgZWRpdDogIitpKTtkZWxldGUgZFtpXSwicmFuZ2VbIj09PWkuc3Vic3RyKGkubGVuZ3RoLTgsNikmJih2W2kuc3Vic3RyKDAsaS5sZW5ndGgtOSldPTEpfWZvcih2YXIgbT0wO208Zy5sZW5ndGg7bSsrKXt2YXIgeT1nW21dO2lmKHZbeV0pe3ZhciB4PXMoZSx5KS5nZXQoKTt4JiZkZWxldGUgeC5hdXRvcmFuZ2V9fXZhciBiPW4uX3RyYWNlUHJlR1VJO2Zvcih2YXIgXyBpbiBiKXt2YXIgdyxrPWJbX10sVD1udWxsO2ZvcihpIGluIGspe2lmKCFUKXt2YXIgQT1pdChfLHIpO2lmKEE8MCl7ZGVsZXRlIGJbX107YnJlYWt9dmFyIE09YXQoXyx0LCh3PXJbQV0uX2Z1bGxJbnB1dCkuaW5kZXgpO2lmKE08MCl7ZGVsZXRlIGJbX107YnJlYWt9VD10W01dfWlmKHU9cnQoaSxldCkpe2lmKHUuYXR0cj9jPShsPXMobix1LmF0dHIpLmdldCgpKSYmbnQodS5hdHRyLGUpOihsPXcudWlyZXZpc2lvbix2b2lkIDA9PT0oYz1ULnVpcmV2aXNpb24pJiYoYz1lLnVpcmV2aXNpb24pKSxjJiZjPT09bCYmKG51bGw9PT0oZj1rW2ldKSYmKGY9dm9pZCAwKSxvdChwPShoPXMoVCxpKSkuZ2V0KCksZikpKXtoLnNldChOKHModyxpKS5nZXQoKSkpO2NvbnRpbnVlfX1lbHNlIG8ud2FybigidW5yZWNvZ25pemVkIEdVSSBlZGl0OiAiK2krIiBpbiB0cmFjZSB1aWQgIitfKTtkZWxldGUga1tpXX19fSh0LmRhdGEsdC5sYXlvdXQsYyxwKSxoLnN1cHBseURlZmF1bHRzKHQse3NraXBVcGRhdGVDYWxjOiEwfSk7dmFyIG09dC5fZnVsbERhdGEseT10Ll9mdWxsTGF5b3V0LHg9dm9pZCAwPT09eS5kYXRhcmV2aXNpb24sYj15LnRyYW5zaXRpb24sXz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPU0ubGF5b3V0RmxhZ3MoKTthLmFycmF5cz17fSxhLnJhbmdlc0FsdGVyZWQ9e30sYS5uQ2hhbmdlcz0wLGEubkNoYW5nZXNBbmltPTAsc3QoZSxyLFtdLHtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGYuZ2V0TGF5b3V0VmFsT2JqZWN0KHIsdCl9LGZsYWdzOmEsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjppLGdkOnR9KSwoYS5wbG90fHxhLmNhbGMpJiYoYS5sYXlvdXRSZXBsb3Q9ITApO2kmJmEubkNoYW5nZXMmJmEubkNoYW5nZXNBbmltJiYoYS5hbmltPWEubkNoYW5nZXM9PT1hLm5DaGFuZ2VzQW5pbT8iYWxsIjoic29tZSIpO3JldHVybiBhfSh0LHAseSx4LGIpLHc9Xy5uZXdEYXRhUmV2aXNpb24saz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89ZS5sZW5ndGg9PT1yLmxlbmd0aDtpZighaSYmIW8pcmV0dXJue2Z1bGxSZXBsb3Q6ITAsY2FsYzohMH07dmFyIHMsbCxjPU0udHJhY2VGbGFncygpO2MuYXJyYXlzPXt9LGMubkNoYW5nZXM9MCxjLm5DaGFuZ2VzQW5pbT0wO3ZhciB1PXtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGYuZ2V0VHJhY2VWYWxPYmplY3QobCx0KX0sZmxhZ3M6YyxpbW11dGFibGU6bix0cmFuc2l0aW9uOmksbmV3RGF0YVJldmlzaW9uOmEsZ2Q6dH0scD17fTtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKWlmKHJbc10pe2lmKGw9cltzXS5fZnVsbElucHV0LGguaGFzTWFrZXNEYXRhVHJhbnNmb3JtKGwpJiYobD1yW3NdKSxwW2wudWlkXSljb250aW51ZTtwW2wudWlkXT0xLHN0KGVbc10uX2Z1bGxJbnB1dCxsLFtdLHUpfShjLmNhbGN8fGMucGxvdCkmJihjLmZ1bGxSZXBsb3Q9ITApO2kmJmMubkNoYW5nZXMmJmMubkNoYW5nZXNBbmltJiYoYy5hbmltPWMubkNoYW5nZXM9PT1jLm5DaGFuZ2VzQW5pbSYmbz8iYWxsIjoic29tZSIpO3JldHVybiBjfSh0LGMsbSx4LGIsdyk7Sih0KSYmKF8ubGF5b3V0UmVwbG90PSEwKSxrLmNhbGN8fF8uY2FsYz90LmNhbGNkYXRhPXZvaWQgMDpoLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyh0LmNhbGNkYXRhLG0pO3ZhciBTPVtdO2lmKGEmJih0Ll90cmFuc2l0aW9uRGF0YT17fSxoLmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLFMucHVzaChmdW5jdGlvbigpe3JldHVybiByLmFkZEZyYW1lcyh0LGEpfSkpLHkudHJhbnNpdGlvbiYmIWcmJihrLmFuaW18fF8uYW5pbSkpaC5kb0NhbGNkYXRhKHQpLEEuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxTLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gaC50cmFuc2l0aW9uRnJvbVJlYWN0KHQsayxfLHApfSk7ZWxzZSBpZihrLmZ1bGxSZXBsb3R8fF8ubGF5b3V0UmVwbG90fHxnKXQuX2Z1bGxMYXlvdXQuX3NraXBEZWZhdWx0cz0hMCxTLnB1c2goci5wbG90KTtlbHNle2Zvcih2YXIgRSBpbiBfLmFycmF5cyl7dmFyIEw9Xy5hcnJheXNbRV07aWYoTC5sZW5ndGgpe3ZhciB6PXUuZ2V0Q29tcG9uZW50TWV0aG9kKEUsImRyYXdPbmUiKTtpZih6IT09by5ub29wKWZvcih2YXIgST0wO0k8TC5sZW5ndGg7SSsrKXoodCxMW0ldKTtlbHNle3ZhciBEPXUuZ2V0Q29tcG9uZW50TWV0aG9kKEUsImRyYXciKTtpZihEPT09by5ub29wKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGRyYXcgY29tcG9uZW50czogIitFKTtEKHQpfX19Uy5wdXNoKGgucHJldmlvdXNQcm9taXNlcyksay5zdHlsZSYmUy5wdXNoKEEuZG9UcmFjZVN0eWxlKSxrLmNvbG9yYmFycyYmUy5wdXNoKEEuZG9Db2xvckJhcnMpLF8ubGVnZW5kJiZTLnB1c2goQS5kb0xlZ2VuZCksXy5sYXlvdXRzdHlsZSYmUy5wdXNoKEEubGF5b3V0U3R5bGVzKSxfLmF4cmFuZ2UmJlkoUyksXy50aWNrcyYmUy5wdXNoKEEuZG9UaWNrc1JlbGF5b3V0KSxfLm1vZGViYXImJlMucHVzaChBLmRvTW9kZUJhciksXy5jYW1lcmEmJlMucHVzaChBLmRvQ2FtZXJhKSxTLnB1c2goQyl9Uy5wdXNoKGgucmVob3ZlciksKGw9by5zeW5jT3JBc3luYyhTLHQpKSYmbC50aGVufHwobD1Qcm9taXNlLnJlc29sdmUodCkpfWVsc2UgbD1yLm5ld1Bsb3QodCxlLG4saSk7cmV0dXJuIGwudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZWFjdCIse2RhdGE6ZSxsYXlvdXQ6bn0pLHR9KX0sci5hbmltYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QrIi4gSXQncyBsaWtlbHkgdGhhdCB5b3UndmUgZmFpbGVkIHRvIGNyZWF0ZSBhIHBsb3QgYmVmb3JlIGFuaW1hdGluZyBpdC4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdC5seS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG49dC5fdHJhbnNpdGlvbkRhdGE7bi5fZnJhbWVRdWV1ZXx8KG4uX2ZyYW1lUXVldWU9W10pO3ZhciBpPShyPWguc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHMocikpLnRyYW5zaXRpb24sYT1yLmZyYW1lO2Z1bmN0aW9uIHModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dD49aS5sZW5ndGg/aVswXTppW3RdOml9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT90Pj1hLmxlbmd0aD9hWzBdOmFbdF06YX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9MDtyZXR1cm4gZnVuY3Rpb24oKXtpZih0JiYrK3I9PT1lKXJldHVybiB0KCl9fXJldHVybiB2b2lkIDA9PT1uLl9mcmFtZVdhaXRpbmdDbnQmJihuLl9mcmFtZVdhaXRpbmdDbnQ9MCksbmV3IFByb21pc2UoZnVuY3Rpb24oYSx1KXtmdW5jdGlvbiBmKCl7bi5fY3VycmVudEZyYW1lJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSYmbi5fY3VycmVudEZyYW1lLm9uQ29tcGxldGUoKTt2YXIgZT1uLl9jdXJyZW50RnJhbWU9bi5fZnJhbWVRdWV1ZS5zaGlmdCgpO2lmKGUpe3ZhciByPWUubmFtZT9lLm5hbWUudG9TdHJpbmcoKTpudWxsO3QuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZT1yLG4uX2xhc3RGcmFtZUF0PURhdGUubm93KCksbi5fdGltZVRvTmV4dD1lLmZyYW1lT3B0cy5kdXJhdGlvbixoLnRyYW5zaXRpb24odCxlLmZyYW1lLmRhdGEsZS5mcmFtZS5sYXlvdXQsVC5jb2VyY2VUcmFjZUluZGljZXModCxlLmZyYW1lLnRyYWNlcyksZS5mcmFtZU9wdHMsZS50cmFuc2l0aW9uT3B0cykudGhlbihmdW5jdGlvbigpe2Uub25Db21wbGV0ZSYmZS5vbkNvbXBsZXRlKCl9KSx0LmVtaXQoInBsb3RseV9hbmltYXRpbmdmcmFtZSIse25hbWU6cixmcmFtZTplLmZyYW1lLGFuaW1hdGlvbjp7ZnJhbWU6ZS5mcmFtZU9wdHMsdHJhbnNpdGlvbjplLnRyYW5zaXRpb25PcHRzfX0pfWVsc2UgdC5lbWl0KCJwbG90bHlfYW5pbWF0ZWQiKSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobi5fYW5pbWF0aW9uUmFmKSxuLl9hbmltYXRpb25SYWY9bnVsbH1mdW5jdGlvbiBwKCl7dC5lbWl0KCJwbG90bHlfYW5pbWF0aW5nIiksbi5fbGFzdEZyYW1lQXQ9LTEvMCxuLl90aW1lVG9OZXh0PTAsbi5fcnVubmluZ1RyYW5zaXRpb25zPTAsbi5fY3VycmVudEZyYW1lPW51bGw7dmFyIGU9ZnVuY3Rpb24oKXtuLl9hbmltYXRpb25SYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxEYXRlLm5vdygpLW4uX2xhc3RGcmFtZUF0Pm4uX3RpbWVUb05leHQmJmYoKX07ZSgpfXZhciBkLGcsdj0wO2Z1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dj49aS5sZW5ndGg/dC50cmFuc2l0aW9uT3B0cz1pW3ZdOnQudHJhbnNpdGlvbk9wdHM9aVswXTp0LnRyYW5zaXRpb25PcHRzPWksdisrLHR9dmFyIHk9W10seD1udWxsPT1lLGI9QXJyYXkuaXNBcnJheShlKTtpZigheCYmIWImJm8uaXNQbGFpbk9iamVjdChlKSl5LnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTptKG8uZXh0ZW5kRmxhdCh7fSxlKSl9KTtlbHNlIGlmKHh8fC0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlKSlmb3IoZD0wO2Q8bi5fZnJhbWVzLmxlbmd0aDtkKyspKGc9bi5fZnJhbWVzW2RdKSYmKHh8fFN0cmluZyhnLmdyb3VwKT09PVN0cmluZyhlKSkmJnkucHVzaCh7dHlwZToiYnluYW1lIixuYW1lOlN0cmluZyhnLm5hbWUpLGRhdGE6bSh7bmFtZTpnLm5hbWV9KX0pO2Vsc2UgaWYoYilmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgXz1lW2RdOy0xIT09WyJudW1iZXIiLCJzdHJpbmciXS5pbmRleE9mKHR5cGVvZiBfKT8oXz1TdHJpbmcoXykseS5wdXNoKHt0eXBlOiJieW5hbWUiLG5hbWU6XyxkYXRhOm0oe25hbWU6X30pfSkpOm8uaXNQbGFpbk9iamVjdChfKSYmeS5wdXNoKHt0eXBlOiJvYmplY3QiLGRhdGE6bShvLmV4dGVuZEZsYXQoe30sXykpfSl9Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZigiYnluYW1lIj09PShnPXlbZF0pLnR5cGUmJiFuLl9mcmFtZUhhc2hbZy5kYXRhLm5hbWVdKXJldHVybiBvLndhcm4oJ2FuaW1hdGUgZmFpbHVyZTogZnJhbWUgbm90IGZvdW5kOiAiJytnLmRhdGEubmFtZSsnIicpLHZvaWQgdSgpOy0xIT09WyJuZXh0IiwiaW1tZWRpYXRlIl0uaW5kZXhPZihyLm1vZGUpJiZmdW5jdGlvbigpe2lmKDAhPT1uLl9mcmFtZVF1ZXVlLmxlbmd0aCl7Zm9yKDtuLl9mcmFtZVF1ZXVlLmxlbmd0aDspe3ZhciBlPW4uX2ZyYW1lUXVldWUucG9wKCk7ZS5vbkludGVycnVwdCYmZS5vbkludGVycnVwdCgpfXQuZW1pdCgicGxvdGx5X2FuaW1hdGlvbmludGVycnVwdGVkIixbXSl9fSgpLCJyZXZlcnNlIj09PXIuZGlyZWN0aW9uJiZ5LnJldmVyc2UoKTt2YXIgdz10Ll9mdWxsTGF5b3V0Ll9jdXJyZW50RnJhbWU7aWYodyYmci5mcm9tY3VycmVudCl7dmFyIGs9LTE7Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZigiYnluYW1lIj09PShnPXlbZF0pLnR5cGUmJmcubmFtZT09PXcpe2s9ZDticmVha31pZihrPjAmJms8eS5sZW5ndGgtMSl7dmFyIEE9W107Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylnPXlbZF0sKCJieW5hbWUiIT09eVtkXS50eXBlfHxkPmspJiZBLnB1c2goZyk7eT1BfX15Lmxlbmd0aD4wP2Z1bmN0aW9uKGUpe2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvO289ImJ5bmFtZSI9PT1lW2ldLnR5cGU/aC5jb21wdXRlRnJhbWUodCxlW2ldLm5hbWUpOmVbaV0uZGF0YTt2YXIgZj1sKGkpLGQ9cyhpKTtkLmR1cmF0aW9uPU1hdGgubWluKGQuZHVyYXRpb24sZi5kdXJhdGlvbik7dmFyIGc9e2ZyYW1lOm8sbmFtZTplW2ldLm5hbWUsZnJhbWVPcHRzOmYsdHJhbnNpdGlvbk9wdHM6ZH07aT09PWUubGVuZ3RoLTEmJihnLm9uQ29tcGxldGU9YyhhLDIpLGcub25JbnRlcnJ1cHQ9dSksbi5fZnJhbWVRdWV1ZS5wdXNoKGcpfSJpbW1lZGlhdGUiPT09ci5tb2RlJiYobi5fbGFzdEZyYW1lQXQ9LTEvMCksbi5fYW5pbWF0aW9uUmFmfHxwKCl9fSh5KToodC5lbWl0KCJwbG90bHlfYW5pbWF0ZWQiKSxhKCkpfSl9LHIuYWRkRnJhbWVzPWZ1bmN0aW9uKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksbnVsbD09ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7aWYoIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QrIi4gSXQncyBsaWtlbHkgdGhhdCB5b3UndmUgZmFpbGVkIHRvIGNyZWF0ZSBhIHBsb3QgYmVmb3JlIGFkZGluZyBmcmFtZXMuIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL3Bsb3QubHkvamF2YXNjcmlwdC9hbmltYXRpb25zLyIpO3ZhciBuLGksYSxzLGw9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyx1PXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IEVycm9yKCJhZGRGcmFtZXMgZmFpbHVyZTogZnJhbWVMaXN0IG11c3QgYmUgYW4gQXJyYXkgb2YgZnJhbWUgZGVmaW5pdGlvbnMiK2UpO3ZhciBmPWwubGVuZ3RoKzIqZS5sZW5ndGgscD1bXSxkPXt9O2ZvcihuPWUubGVuZ3RoLTE7bj49MDtuLS0paWYoby5pc1BsYWluT2JqZWN0KGVbbl0pKXt2YXIgZz1lW25dLm5hbWUsdj0odVtnXXx8ZFtnXXx8e30pLm5hbWUsbT1lW25dLm5hbWUseT11W3ZdfHxkW3ZdO3YmJm0mJiJudW1iZXIiPT10eXBlb2YgbSYmeSYmRTw1JiYoRSsrLG8ud2FybignYWRkRnJhbWVzOiBvdmVyd3JpdGluZyBmcmFtZSAiJysodVt2XXx8ZFt2XSkubmFtZSsnIiB3aXRoIGEgZnJhbWUgd2hvc2UgbmFtZSBvZiB0eXBlICJudW1iZXIiIGFsc28gZXF1YXRlcyB0byAiJyt2KyciLiBUaGlzIGlzIHZhbGlkIGJ1dCBtYXkgcG90ZW50aWFsbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIHNpbmNlIGFsbCBwbG90bHkuanMgZnJhbWUgbmFtZXMgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGFzIHN0cmluZ3MuJyksNT09PUUmJm8ud2FybigiYWRkRnJhbWVzOiBUaGlzIEFQSSBjYWxsIGhhcyB5aWVsZGVkIHRvbyBtYW55IG9mIHRoZXNlIHdhcm5pbmdzLiBGb3IgdGhlIHJlc3Qgb2YgdGhpcyBjYWxsLCBmdXJ0aGVyIHdhcm5pbmdzIGFib3V0IG51bWVyaWMgZnJhbWUgbmFtZXMgd2lsbCBiZSBzdXBwcmVzc2VkLiIpKSxkW2ddPXtuYW1lOmd9LHAucHVzaCh7ZnJhbWU6aC5zdXBwbHlGcmFtZURlZmF1bHRzKGVbbl0pLGluZGV4OnImJnZvaWQgMCE9PXJbbl0mJm51bGwhPT1yW25dP3Jbbl06ZitufSl9cC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5kZXg+ZS5pbmRleD8tMTp0LmluZGV4PGUuaW5kZXg/MTowfSk7dmFyIHg9W10sYj1bXSxfPWwubGVuZ3RoO2ZvcihuPXAubGVuZ3RoLTE7bj49MDtuLS0pe2lmKCJudW1iZXIiPT10eXBlb2YoaT1wW25dLmZyYW1lKS5uYW1lJiZvLndhcm4oIldhcm5pbmc6IGFkZEZyYW1lcyBhY2NlcHRzIGZyYW1lcyB3aXRoIG51bWVyaWMgbmFtZXMsIGJ1dCB0aGUgbnVtYmVycyBhcmVpbXBsaWNpdGx5IGNhc3QgdG8gc3RyaW5ncyIpLCFpLm5hbWUpZm9yKDt1W2kubmFtZT0iZnJhbWUgIit0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcisrXTspO2lmKHVbaS5uYW1lXSl7Zm9yKGE9MDthPGwubGVuZ3RoJiYobFthXXx8e30pLm5hbWUhPT1pLm5hbWU7YSsrKTt4LnB1c2goe3R5cGU6InJlcGxhY2UiLGluZGV4OmEsdmFsdWU6aX0pLGIudW5zaGlmdCh7dHlwZToicmVwbGFjZSIsaW5kZXg6YSx2YWx1ZTpsW2FdfSl9ZWxzZSBzPU1hdGgubWF4KDAsTWF0aC5taW4ocFtuXS5pbmRleCxfKSkseC5wdXNoKHt0eXBlOiJpbnNlcnQiLGluZGV4OnMsdmFsdWU6aX0pLGIudW5zaGlmdCh7dHlwZToiZGVsZXRlIixpbmRleDpzfSksXysrfXZhciB3PWgubW9kaWZ5RnJhbWVzLGs9aC5tb2RpZnlGcmFtZXMsVD1bdCxiXSxBPVt0LHhdO3JldHVybiBjJiZjLmFkZCh0LHcsVCxrLEEpLGgubW9kaWZ5RnJhbWVzKHQseCl9LHIuZGVsZXRlRnJhbWVzPWZ1bmN0aW9uKHQsZSl7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KTt2YXIgcixuLGk9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxhPVtdLHM9W107aWYoIWUpZm9yKGU9W10scj0wO3I8aS5sZW5ndGg7cisrKWUucHVzaChyKTtmb3IoKGU9ZS5zbGljZSgwKSkuc29ydCgpLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSluPWVbcl0sYS5wdXNoKHt0eXBlOiJkZWxldGUiLGluZGV4Om59KSxzLnVuc2hpZnQoe3R5cGU6Imluc2VydCIsaW5kZXg6bix2YWx1ZTppW25dfSk7dmFyIGw9aC5tb2RpZnlGcmFtZXMsdT1oLm1vZGlmeUZyYW1lcyxmPVt0LHNdLHA9W3QsYV07cmV0dXJuIGMmJmMuYWRkKHQsbCxmLHUscCksaC5tb2RpZnlGcmFtZXModCxhKX0sci5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT0odD1vLmdldEdyYXBoRGl2KHQpKS5fZnVsbExheW91dHx8e30scj10Ll9mdWxsRGF0YXx8W107cmV0dXJuIGguY2xlYW5QbG90KFtdLHt9LHIsZSksaC5wdXJnZSh0KSxsLnB1cmdlKHQpLGUuX2NvbnRhaW5lciYmZS5fY29udGFpbmVyLnJlbW92ZSgpLGRlbGV0ZSB0Ll9jb250ZXh0LHR9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vY29tcG9uZW50cy9jb2xvcmJhci9jb25uZWN0Ijo1NzksIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6Njc4LCIuLi9saWIiOjcwMCwiLi4vbGliL2V2ZW50cyI6Njg5LCIuLi9saWIvcXVldWUiOjcxNSwiLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjc1NCwiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0Ijo3NTcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiOjc2NSwiLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5Ijo4MTgsIi4uL3JlZ2lzdHJ5Ijo4MjksIi4vZWRpdF90eXBlcyI6NzMxLCIuL2hlbHBlcnMiOjczMiwiLi9tYW5hZ2VfYXJyYXlzIjo3MzQsIi4vcGxvdF9jb25maWciOjczNiwiLi9wbG90X3NjaGVtYSI6NzM3LCIuL3N1YnJvdXRpbmVzIjo3MzksZDM6MTU0LCJmYXN0LWlzbnVtZXJpYyI6MjIxLCJoYXMtaG92ZXIiOjQwMn1dLDczNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17c3RhdGljUGxvdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scGxvdGx5U2VydmVyVVJMOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Imh0dHBzOi8vcGxvdC5seSJ9LGVkaXRhYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxlZGl0czp7YW5ub3RhdGlvblBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxhbm5vdGF0aW9uVGFpbDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYW5ub3RhdGlvblRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGF4aXNUaXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGNvbG9yYmFyUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGNvbG9yYmFyVGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsZWdlbmRQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGVnZW5kVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sc2hhcGVQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sYXV0b3NpemFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHJlc3BvbnNpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGxGcmFtZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZnJhbWVNYXJnaW5zOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxtYXg6LjV9LHNjcm9sbFpvb206e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImNhcnRlc2lhbiIsImdsM2QiLCJnZW8iLCJtYXBib3giXSxleHRyYXM6WyEwLCExXSxkZmx0OiJnbDNkK2dlbyttYXBib3gifSxkb3VibGVDbGljazp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwicmVzZXQiLCJhdXRvc2l6ZSIsInJlc2V0K2F1dG9zaXplIl0sZGZsdDoicmVzZXQrYXV0b3NpemUifSxzaG93QXhpc0RyYWdIYW5kbGVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93QXhpc1JhbmdlRW50cnlCb3hlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd1RpcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dMaW5rOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaW5rVGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJFZGl0IGNoYXJ0Iixub0JsYW5rOiEwfSxzZW5kRGF0YTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd1NvdXJjZXM6e3ZhbFR5cGU6ImFueSIsZGZsdDohMX0sZGlzcGxheU1vZGVCYXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImhvdmVyIiwhMCwhMV0sZGZsdDoiaG92ZXIifSxzaG93U2VuZFRvQ2xvdWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG1vZGVCYXJCdXR0b25zVG9SZW1vdmU6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnNUb0FkZDp7dmFsVHlwZToiYW55IixkZmx0OltdfSxtb2RlQmFyQnV0dG9uczp7dmFsVHlwZToiYW55IixkZmx0OiExfSx0b0ltYWdlQnV0dG9uT3B0aW9uczp7dmFsVHlwZToiYW55IixkZmx0Ont9fSxkaXNwbGF5bG9nbzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sd2F0ZXJtYXJrOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxwbG90R2xQaXhlbFJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MixtaW46MSxtYXg6NH0sc2V0QmFja2dyb3VuZDp7dmFsVHlwZToiYW55IixkZmx0OiJ0cmFuc3BhcmVudCJ9LHRvcG9qc29uVVJMOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsZGZsdDoiaHR0cHM6Ly9jZG4ucGxvdC5seS8ifSxtYXBib3hBY2Nlc3NUb2tlbjp7dmFsVHlwZToic3RyaW5nIixkZmx0Om51bGx9LGxvZ2dpbmc6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6MX0scXVldWVMZW5ndGg6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MH0sZ2xvYmFsVHJhbnNmb3Jtczp7dmFsVHlwZToiYW55IixkZmx0OltdfSxsb2NhbGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiZW4tVVMifSxsb2NhbGVzOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e319fSxpPXt9OyFmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl07aS52YWxUeXBlP3Jbbl09aS5kZmx0OihyW25dfHwocltuXT17fSksdChpLHJbbl0pKX19KG4saSksZS5leHBvcnRzPXtjb25maWdBdHRyaWJ1dGVzOm4sZGZsdENvbmZpZzppfX0se31dLDczNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlcyIpLGw9dCgiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxjPXQoIi4vcGxvdF9jb25maWciKS5jb25maWdBdHRyaWJ1dGVzLHU9dCgiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2FyZWFfYXR0cmlidXRlcyIpLGY9dCgiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2F4aXNfYXR0cmlidXRlcyIpLGg9dCgiLi9lZGl0X3R5cGVzIikscD1pLmV4dGVuZEZsYXQsZD1pLmV4dGVuZERlZXBBbGwsZz1pLmlzUGxhaW5PYmplY3Qsdj0iX2lzU3VicGxvdE9iaiIsbT0iX2lzTGlua2VkVG9BcnJheSIseT1bdixtLCJfYXJyYXlBdHRyUmVnZXhwcyIsIl9kZXByZWNhdGVkIl07ZnVuY3Rpb24geCh0LGUscil7aWYoIXQpcmV0dXJuITE7aWYodC5faXNMaW5rZWRUb0FycmF5KWlmKGIoZVtyXSkpcisrO2Vsc2UgaWYocjxlLmxlbmd0aClyZXR1cm4hMTtmb3IoO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKCFnKG4pKWJyZWFrO2lmKHQ9bixyPT09ZS5sZW5ndGgtMSlicmVhaztpZih0Ll9pc0xpbmtlZFRvQXJyYXkpe2lmKCFiKGVbKytyXSkpcmV0dXJuITF9ZWxzZSBpZigiaW5mb19hcnJheSI9PT10LnZhbFR5cGUpe3ZhciBpPWVbKytyXTtpZighYihpKSlyZXR1cm4hMTt2YXIgYT10Lml0ZW1zO2lmKEFycmF5LmlzQXJyYXkoYSkpe2lmKGk+PWEubGVuZ3RoKXJldHVybiExO2lmKDI9PT10LmRpbWVuc2lvbnMpe2lmKHIrKyxlLmxlbmd0aD09PXIpcmV0dXJuIHQ7dmFyIG89ZVtyXTtpZighYihvKSlyZXR1cm4hMTt0PWFbaV1bb119ZWxzZSB0PWFbaV19ZWxzZSB0PWF9fXJldHVybiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuIHQ9PT1NYXRoLnJvdW5kKHQpJiZ0Pj0wfWZ1bmN0aW9uIF8odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IuY3Jhd2wodCxmdW5jdGlvbih0LGUsbil7ci5pc1ZhbE9iamVjdCh0KT8iZGF0YV9hcnJheSI9PT10LnZhbFR5cGU/KHQucm9sZT0iZGF0YSIsbltlKyJzcmMiXT17dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibm9uZSJ9KTohMD09PXQuYXJyYXlPayYmKG5bZSsic3JjIl09e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifSk6Zyh0KSYmKHQucm9sZT0ib2JqZWN0Iil9KX0odCksZnVuY3Rpb24odCl7ci5jcmF3bCh0LGZ1bmN0aW9uKHQsZSxyKXtpZighdClyZXR1cm47dmFyIG49dFttXTtpZighbilyZXR1cm47ZGVsZXRlIHRbbV0scltlXT17aXRlbXM6e319LHJbZV0uaXRlbXNbbl09dCxyW2VdLnJvbGU9Im9iamVjdCJ9KX0odCksZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHQoZSl7Zm9yKHZhciByIGluIGUpaWYoZyhlW3JdKSl0KGVbcl0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlW3JdKSlmb3IodmFyIG49MDtuPGVbcl0ubGVuZ3RoO24rKyl0KGVbcl1bbl0pO2Vsc2UgZVtyXWluc3RhbmNlb2YgUmVnRXhwJiYoZVtyXT1lW3JdLnRvU3RyaW5nKCkpfSh0KX0odCksdH1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj1pLm5lc3RlZFByb3BlcnR5KHQsciksYT1kKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7YVt2XT0hMCxuLnNldChhKX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj1pLm5lc3RlZFByb3BlcnR5KHQscik7bi5zZXQoZChuLmdldCgpfHx7fSxlKSl9ci5JU19TVUJQTE9UX09CSj12LHIuSVNfTElOS0VEX1RPX0FSUkFZPW0sci5ERVBSRUNBVEVEPSJfZGVwcmVjYXRlZCIsci5VTkRFUlNDT1JFX0FUVFJTPXksci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTtuLmFsbFR5cGVzLmNvbmNhdCgiYXJlYSIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1mdW5jdGlvbih0KXt2YXIgZSxvOyJhcmVhIj09PXQ/KGU9e2F0dHJpYnV0ZXM6dX0sbz17fSk6KGU9bi5tb2R1bGVzW3RdLl9tb2R1bGUsbz1lLmJhc2VQbG90TW9kdWxlKTt2YXIgcz17dHlwZTpudWxsfSxsPWQoe30sYSksYz1kKHt9LGUuYXR0cmlidXRlcyk7ci5jcmF3bChjLGZ1bmN0aW9uKHQsZSxyLG4sYSl7aS5uZXN0ZWRQcm9wZXJ0eShsLGEpLnNldCh2b2lkIDApLHZvaWQgMD09PXQmJmkubmVzdGVkUHJvcGVydHkoYyxhKS5zZXQodm9pZCAwKX0pLGQocyxsKSxkKHMsYyksby5hdHRyaWJ1dGVzJiZkKHMsby5hdHRyaWJ1dGVzKTtzLnR5cGU9dDt2YXIgZj17bWV0YTplLm1ldGF8fHt9LGF0dHJpYnV0ZXM6XyhzKX07aWYoZS5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgaD17fTtkKGgsZS5sYXlvdXRBdHRyaWJ1dGVzKSxmLmxheW91dEF0dHJpYnV0ZXM9XyhoKX1yZXR1cm4gZn0oZSl9KTt2YXIgZSxnPXt9O3JldHVybiBPYmplY3Qua2V5cyhuLnRyYW5zZm9ybXNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbih0KXtnW3RdPWZ1bmN0aW9uKHQpe3ZhciBlPW4udHJhbnNmb3Jtc1JlZ2lzdHJ5W3RdLHI9ZCh7fSxlLmF0dHJpYnV0ZXMpO3JldHVybiBPYmplY3Qua2V5cyhuLmNvbXBvbmVudHNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgaT1uLmNvbXBvbmVudHNSZWdpc3RyeVtlXTtpLnNjaGVtYSYmaS5zY2hlbWEudHJhbnNmb3JtcyYmaS5zY2hlbWEudHJhbnNmb3Jtc1t0XSYmT2JqZWN0LmtleXMoaS5zY2hlbWEudHJhbnNmb3Jtc1t0XSkuZm9yRWFjaChmdW5jdGlvbihlKXtrKHIsaS5zY2hlbWEudHJhbnNmb3Jtc1t0XVtlXSxlKX0pfSkse2F0dHJpYnV0ZXM6XyhyKX19KHQpfSkse2RlZnM6e3ZhbE9iamVjdHM6aS52YWxPYmplY3RNZXRhLG1ldGFLZXlzOnkuY29uY2F0KFsiZGVzY3JpcHRpb24iLCJyb2xlIiwiZWRpdFR5cGUiLCJpbXBsaWVkRWRpdHMiXSksZWRpdFR5cGU6e3RyYWNlczpoLnRyYWNlcyxsYXlvdXQ6aC5sYXlvdXR9LGltcGxpZWRFZGl0czp7fX0sdHJhY2VzOnQsbGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXt9O2Zvcih0IGluIGQocixvKSxuLnN1YnBsb3RzUmVnaXN0cnkpaWYoKGU9bi5zdWJwbG90c1JlZ2lzdHJ5W3RdKS5sYXlvdXRBdHRyaWJ1dGVzKWlmKEFycmF5LmlzQXJyYXkoZS5hdHRyKSlmb3IodmFyIGk9MDtpPGUuYXR0ci5sZW5ndGg7aSsrKXcocixlLGUuYXR0cltpXSk7ZWxzZXt2YXIgYT0ic3VicGxvdCI9PT1lLmF0dHI/ZS5uYW1lOmUuYXR0cjt3KHIsZSxhKX1mb3IodCBpbiByPWZ1bmN0aW9uKHQpe3JldHVybiBwKHQse3JhZGlhbGF4aXM6Zi5yYWRpYWxheGlzLGFuZ3VsYXJheGlzOmYuYW5ndWxhcmF4aXN9KSxwKHQsZi5sYXlvdXQpLHR9KHIpLG4uY29tcG9uZW50c1JlZ2lzdHJ5KXt2YXIgcz0oZT1uLmNvbXBvbmVudHNSZWdpc3RyeVt0XSkuc2NoZW1hO2lmKHMmJihzLnN1YnBsb3RzfHxzLmxheW91dCkpe3ZhciBsPXMuc3VicGxvdHM7aWYobCYmbC54YXhpcyYmIWwueWF4aXMpZm9yKHZhciBjIGluIGwueGF4aXMpZGVsZXRlIHIueWF4aXNbY119ZWxzZSBlLmxheW91dEF0dHJpYnV0ZXMmJmsocixlLmxheW91dEF0dHJpYnV0ZXMsZS5uYW1lKX1yZXR1cm57bGF5b3V0QXR0cmlidXRlczpfKHIpfX0oKSx0cmFuc2Zvcm1zOmcsZnJhbWVzOihlPXtmcmFtZXM6aS5leHRlbmREZWVwQWxsKHt9LHMpfSxfKGUpLGUuZnJhbWVzKSxhbmltYXRpb246XyhsKSxjb25maWc6XyhjKX19LHIuY3Jhd2w9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9bnx8MDtpPWl8fCIiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG89dFtuXTtpZigtMT09PXkuaW5kZXhPZihuKSl7dmFyIHM9KGk/aSsiLiI6IiIpK247ZShvLG4sdCxhLHMpLHIuaXNWYWxPYmplY3Qobyl8fGcobykmJiJpbXBsaWVkRWRpdHMiIT09biYmci5jcmF3bChvLGUsYSsxLHMpfX0pfSxyLmlzVmFsT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ2b2lkIDAhPT10LnZhbFR5cGV9LHIuZmluZEFycmF5QXR0cmlidXRlcz1mdW5jdGlvbih0KXt2YXIgZSxuLG89W10scz1bXSxsPVtdO2Z1bmN0aW9uIGModCxyLGEsYyl7cz1zLnNsaWNlKDAsYykuY29uY2F0KFtyXSksbD1sLnNsaWNlKDAsYykuY29uY2F0KFt0JiZ0Ll9pc0xpbmtlZFRvQXJyYXldKSx0JiYoImRhdGFfYXJyYXkiPT09dC52YWxUeXBlfHwhMD09PXQuYXJyYXlPaykmJiEoImNvbG9yYmFyIj09PXNbYy0xXSYmKCJ0aWNrdGV4dCI9PT1yfHwidGlja3ZhbHMiPT09cikpJiZmdW5jdGlvbiB0KGUscixhKXt2YXIgYz1lW3Nbcl1dO3ZhciB1PWErc1tyXTtpZihyPT09cy5sZW5ndGgtMSlpLmlzQXJyYXlPclR5cGVkQXJyYXkoYykmJm8ucHVzaChuK3UpO2Vsc2UgaWYobFtyXSl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKylpLmlzUGxhaW5PYmplY3QoY1tmXSkmJnQoY1tmXSxyKzEsdSsiWyIrZisiXS4iKX1lbHNlIGkuaXNQbGFpbk9iamVjdChjKSYmdChjLHIrMSx1KyIuIil9KGUsMCwiIil9ZT10LG49IiIsci5jcmF3bChhLGMpLHQuX21vZHVsZSYmdC5fbW9kdWxlLmF0dHJpYnV0ZXMmJnIuY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsYyk7dmFyIHU9dC50cmFuc2Zvcm1zO2lmKHUpZm9yKHZhciBmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBoPXVbZl0scD1oLl9tb2R1bGU7cCYmKG49InRyYW5zZm9ybXNbIitmKyJdLiIsZT1oLHIuY3Jhd2wocC5hdHRyaWJ1dGVzLGMpKX1yZXR1cm4gb30sci5nZXRUcmFjZVZhbE9iamVjdD1mdW5jdGlvbih0LGUpe3ZhciByLGksbz1lWzBdLHM9MTtpZigidHJhbnNmb3JtcyI9PT1vKXtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIGEudHJhbnNmb3Jtczt2YXIgbD10LnRyYW5zZm9ybXM7aWYoIUFycmF5LmlzQXJyYXkobCl8fCFsLmxlbmd0aClyZXR1cm4hMTt2YXIgYz1lWzFdO2lmKCFiKGMpfHxjPj1sLmxlbmd0aClyZXR1cm4hMTtpPShyPShuLnRyYW5zZm9ybXNSZWdpc3RyeVtsW2NdLnR5cGVdfHx7fSkuYXR0cmlidXRlcykmJnJbZVsyXV0scz0zfWVsc2UgaWYoImFyZWEiPT09dC50eXBlKWk9dVtvXTtlbHNle3ZhciBmPXQuX21vZHVsZTtpZihmfHwoZj0obi5tb2R1bGVzW3QudHlwZXx8YS50eXBlLmRmbHRdfHx7fSkuX21vZHVsZSksIWYpcmV0dXJuITE7aWYoIShpPShyPWYuYXR0cmlidXRlcykmJnJbb10pKXt2YXIgaD1mLmJhc2VQbG90TW9kdWxlO2gmJmguYXR0cmlidXRlcyYmKGk9aC5hdHRyaWJ1dGVzW29dKX1pfHwoaT1hW29dKX1yZXR1cm4geChpLGUscyl9LHIuZ2V0TGF5b3V0VmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgoZnVuY3Rpb24odCxlKXt2YXIgcixpLGEscyxsPXQuX2Jhc2VQbG90TW9kdWxlcztpZihsKXt2YXIgYztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKXtpZigoYT1sW3JdKS5hdHRyUmVnZXgmJmEuYXR0clJlZ2V4LnRlc3QoZSkpe2lmKGEubGF5b3V0QXR0ck92ZXJyaWRlcylyZXR1cm4gYS5sYXlvdXRBdHRyT3ZlcnJpZGVzOyFjJiZhLmxheW91dEF0dHJpYnV0ZXMmJihjPWEubGF5b3V0QXR0cmlidXRlcyl9dmFyIHU9YS5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcztpZih1JiZlIGluIHUpcmV0dXJuIHVbZV19aWYoYylyZXR1cm4gY312YXIgaD10Ll9tb2R1bGVzO2lmKGgpZm9yKHI9MDtyPGgubGVuZ3RoO3IrKylpZigocz1oW3JdLmxheW91dEF0dHJpYnV0ZXMpJiZlIGluIHMpcmV0dXJuIHNbZV07Zm9yKGkgaW4gbi5jb21wb25lbnRzUmVnaXN0cnkpaWYoIShhPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2ldKS5zY2hlbWEmJmU9PT1hLm5hbWUpcmV0dXJuIGEubGF5b3V0QXR0cmlidXRlcztpZihlIGluIG8pcmV0dXJuIG9bZV07aWYoInJhZGlhbGF4aXMiPT09ZXx8ImFuZ3VsYXJheGlzIj09PWUpcmV0dXJuIGZbZV07cmV0dXJuIGYubGF5b3V0W2VdfHwhMX0odCxlWzBdKSxlLDEpfX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc0MywiLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzIjo3NzUsIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo4MDEsIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9hcmVhX2F0dHJpYnV0ZXMiOjgxNiwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2F4aXNfYXR0cmlidXRlcyI6ODE3LCIuLi9yZWdpc3RyeSI6ODI5LCIuL2VkaXRfdHlwZXMiOjczMSwiLi9wbG90X2NvbmZpZyI6NzM2fV0sNzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9InRlbXBsYXRlaXRlbW5hbWUiLG89e25hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifX07ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4icyIhPT10LmNoYXJBdChlKSYmbi53YXJuKCJiYWQgYXJndW1lbnQgdG8gYXJyYXlEZWZhdWx0S2V5OiAiK3QpLHQuc3Vic3RyKDAsdC5sZW5ndGgtMSkrImRlZmF1bHRzIn1vW2FdPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sci50ZW1wbGF0ZWRBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiBlLl9pc0xpbmtlZFRvQXJyYXk9dCxlLm5hbWU9by5uYW1lLGVbYV09b1thXSxlfSxyLnRyYWNlVGVtcGxhdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYT17fTtmb3IoZSBpbiB0KXI9dFtlXSxBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aCYmKGFbZV09MCk7cmV0dXJue25ld1RyYWNlOmZ1bmN0aW9uKG8pe3ZhciBzPXt0eXBlOmU9bi5jb2VyY2Uobyx7fSxpLCJ0eXBlIiksX3RlbXBsYXRlOm51bGx9O2lmKGUgaW4gYSl7cj10W2VdO3ZhciBsPWFbZV0lci5sZW5ndGg7YVtlXSsrLHMuX3RlbXBsYXRlPXJbbF19cmV0dXJuIHN9fX0sci5uZXdDb250YWluZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuX3RlbXBsYXRlLGE9aSYmKGlbZV18fHImJmlbcl0pO3JldHVybiBuLmlzUGxhaW5PYmplY3QoYSl8fChhPW51bGwpLHRbZV09e190ZW1wbGF0ZTphfX0sci5hcnJheVRlbXBsYXRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fdGVtcGxhdGUsaT1uJiZuW2woZSldLG89biYmbltlXTtBcnJheS5pc0FycmF5KG8pJiZvLmxlbmd0aHx8KG89W10pO3ZhciBjPXt9O3JldHVybntuZXdJdGVtOmZ1bmN0aW9uKHQpe3ZhciBlPXtuYW1lOnQubmFtZSxfaW5wdXQ6dH0sbj1lW2FdPXRbYV07aWYoIXMobikpcmV0dXJuIGUuX3RlbXBsYXRlPWksZTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIHU9b1tsXTtpZih1Lm5hbWU9PT1uKXJldHVybiBjW25dPTEsZS5fdGVtcGxhdGU9dSxlfXJldHVybiBlW3JdPXRbcl18fCExLGUuX3RlbXBsYXRlPSExLGV9LGRlZmF1bHRJdGVtczpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciByPW9bZV0sbj1yLm5hbWU7aWYocyhuKSYmIWNbbl0pe3ZhciBpPXtfdGVtcGxhdGU6cixuYW1lOm4sX2lucHV0OntfdGVtcGxhdGVpdGVtbmFtZTpufX07aVthXT1yW2FdLHQucHVzaChpKSxjW25dPTF9fXJldHVybiB0fX19LHIuYXJyYXlEZWZhdWx0S2V5PWwsci5hcnJheUVkaXRvcj1mdW5jdGlvbih0LGUscil7dmFyIGk9KG4ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8W10pLmxlbmd0aCxvPXIuX2luZGV4LHM9bz49aSYmKHIuX2lucHV0fHx7fSkuX3RlbXBsYXRlaXRlbW5hbWU7cyYmKG89aSk7dmFyIGwsYz1lKyJbIitvKyJdIjtmdW5jdGlvbiB1KCl7bD17fSxzJiYobFtjXT17fSxsW2NdW2FdPXMpfWZ1bmN0aW9uIGYodCxlKXtzP24ubmVzdGVkUHJvcGVydHkobFtjXSx0KS5zZXQoZSk6bFtjKyIuIit0XT1lfWZ1bmN0aW9uIGgoKXt2YXIgdD1sO3JldHVybiB1KCksdH1yZXR1cm4gdSgpLHttb2RpZnlCYXNlOmZ1bmN0aW9uKHQsZSl7bFt0XT1lfSxtb2RpZnlJdGVtOmYsZ2V0VXBkYXRlT2JqOmgsYXBwbHlVcGRhdGU6ZnVuY3Rpb24oZSxyKXtlJiZmKGUscik7dmFyIGk9aCgpO2Zvcih2YXIgYSBpbiBpKW4ubmVzdGVkUHJvcGVydHkodCxhKS5zZXQoaVthXSl9fX19LHsiLi4vbGliIjo3MDAsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NX1dLDczOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9saWIiKSxzPXQoIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLGw9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi9jb21wb25lbnRzL3RpdGxlcyIpLGY9dCgiLi4vY29tcG9uZW50cy9tb2RlYmFyIiksaD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHA9dCgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGQ9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksZz1kLmVuZm9yY2Usdj1kLmNsZWFuLG09dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLHk9InN0YXJ0Iix4PSJtaWRkbGUiLGI9ImVuZCI7ZnVuY3Rpb24gXyh0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl1bMF0sYT1yW25dWzFdO2lmKCEoaVswXT49dFsxXXx8aVsxXTw9dFswXSkmJihhWzBdPGVbMV0mJmFbMV0+ZVswXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdyh0KXt2YXIgZSxpLGEscyx1LGQsZz10Ll9mdWxsTGF5b3V0LHY9Zy5fc2l6ZSxtPXYucCx5PWgubGlzdCh0LCIiLCEwKTtpZihnLl9wYXBlcmRpdi5zdHlsZSh7d2lkdGg6dC5fY29udGV4dC5yZXNwb25zaXZlJiZnLmF1dG9zaXplJiYhdC5fY29udGV4dC5faGFzWmVyb1dpZHRoJiYhdC5sYXlvdXQud2lkdGg/IjEwMCUiOmcud2lkdGgrInB4IixoZWlnaHQ6dC5fY29udGV4dC5yZXNwb25zaXZlJiZnLmF1dG9zaXplJiYhdC5fY29udGV4dC5faGFzWmVyb0hlaWdodCYmIXQubGF5b3V0LmhlaWdodD8iMTAwJSI6Zy5oZWlnaHQrInB4In0pLnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuY2FsbChjLnNldFNpemUsZy53aWR0aCxnLmhlaWdodCksdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsZy5wYXBlcl9iZ2NvbG9yKSxyLmRyYXdNYWluVGl0bGUodCksZi5tYW5hZ2UodCksIWcuX2hhcygiY2FydGVzaWFuIikpcmV0dXJuIHQuX3Byb21pc2VzLmxlbmd0aCYmUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpO2Z1bmN0aW9uIHgodCxlLHIpe3ZhciBuPXQuX2x3LzI7cmV0dXJuIngiPT09dC5faWQuY2hhckF0KDApP2U/InRvcCI9PT1yP2UuX29mZnNldC1tLW46ZS5fb2Zmc2V0K2UuX2xlbmd0aCttK246di50K3YuaCooMS0odC5wb3NpdGlvbnx8MCkpK24lMTplPyJyaWdodCI9PT1yP2UuX29mZnNldCtlLl9sZW5ndGgrbStuOmUuX29mZnNldC1tLW46di5sK3YudyoodC5wb3NpdGlvbnx8MCkrbiUxfWZvcihlPTA7ZTx5Lmxlbmd0aDtlKyspe3ZhciBiPShzPXlbZV0pLl9hbmNob3JBeGlzO3MuX2xpbmVwb3NpdGlvbnM9e30scy5fbHc9Yy5jcmlzcFJvdW5kKHQscy5saW5ld2lkdGgsMSkscy5fbWFpbkxpbmVQb3NpdGlvbj14KHMsYixzLnNpZGUpLHMuX21haW5NaXJyb3JQb3NpdGlvbj1zLm1pcnJvciYmYj94KHMsYixwLk9QUE9TSVRFX1NJREVbcy5zaWRlXSk6bnVsbH12YXIgdz1bXSxUPVtdLE09W10sUz0xPT09bC5vcGFjaXR5KGcucGFwZXJfYmdjb2xvcikmJjE9PT1sLm9wYWNpdHkoZy5wbG90X2JnY29sb3IpJiZnLnBhcGVyX2JnY29sb3I9PT1nLnBsb3RfYmdjb2xvcjtmb3IoaSBpbiBnLl9wbG90cylpZigoYT1nLl9wbG90c1tpXSkubWFpbnBsb3QpYS5iZyYmYS5iZy5yZW1vdmUoKSxhLmJnPXZvaWQgMDtlbHNle3ZhciBFPWEueGF4aXMuZG9tYWluLEM9YS55YXhpcy5kb21haW4sTD1hLnBsb3Rncm91cDtpZihfKEUsQyxNKSl7dmFyIHo9TC5ub2RlKCksTz1hLmJnPW8uZW5zdXJlU2luZ2xlKEwsInJlY3QiLCJiZyIpO3ouaW5zZXJ0QmVmb3JlKE8ubm9kZSgpLHouY2hpbGROb2Rlc1swXSksVC5wdXNoKGkpfWVsc2UgTC5zZWxlY3QoInJlY3QuYmciKS5yZW1vdmUoKSxNLnB1c2goW0UsQ10pLFN8fCh3LnB1c2goaSksVC5wdXNoKGkpKX12YXIgSSxELFAsUixGLEIsTixqLFYsVSxxLEgsRyxZPWcuX2JnTGF5ZXIuc2VsZWN0QWxsKCIuYmciKS5kYXRhKHcpO2ZvcihZLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiYmciLCEwKSxZLmV4aXQoKS5yZW1vdmUoKSxZLmVhY2goZnVuY3Rpb24odCl7Zy5fcGxvdHNbdF0uYmc9bi5zZWxlY3QodGhpcyl9KSxlPTA7ZTxULmxlbmd0aDtlKyspYT1nLl9wbG90c1tUW2VdXSx1PWEueGF4aXMsZD1hLnlheGlzLGEuYmcmJmEuYmcuY2FsbChjLnNldFJlY3QsdS5fb2Zmc2V0LW0sZC5fb2Zmc2V0LW0sdS5fbGVuZ3RoKzIqbSxkLl9sZW5ndGgrMiptKS5jYWxsKGwuZmlsbCxnLnBsb3RfYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCk7aWYoIWcuX2hhc09ubHlMYXJnZVNwbG9tcylmb3IoaSBpbiBnLl9wbG90cyl7YT1nLl9wbG90c1tpXSx1PWEueGF4aXMsZD1hLnlheGlzO3ZhciBXLFgsWj1hLmNsaXBJZD0iY2xpcCIrZy5fdWlkK2krInBsb3QiLCQ9by5lbnN1cmVTaW5nbGVCeUlkKGcuX2NsaXBzLCJjbGlwUGF0aCIsWixmdW5jdGlvbih0KXt0LmNsYXNzZWQoInBsb3RjbGlwIiwhMCkuYXBwZW5kKCJyZWN0Iil9KTthLmNsaXBSZWN0PSQuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6dS5fbGVuZ3RoLGhlaWdodDpkLl9sZW5ndGh9KSxjLnNldFRyYW5zbGF0ZShhLnBsb3QsdS5fb2Zmc2V0LGQuX29mZnNldCksYS5faGFzQ2xpcE9uQXhpc0ZhbHNlPyhXPW51bGwsWD1aKTooVz1aLFg9bnVsbCksYy5zZXRDbGlwVXJsKGEucGxvdCxXLHQpLGEubGF5ZXJDbGlwSWQ9WH1mdW5jdGlvbiBKKHQpe3JldHVybiJNIitJKyIsIit0KyJIIitEfWZ1bmN0aW9uIEsodCl7cmV0dXJuIk0iK3UuX29mZnNldCsiLCIrdCsiaCIrdS5fbGVuZ3RofWZ1bmN0aW9uIFEodCl7cmV0dXJuIk0iK3QrIiwiK2orIlYiK059ZnVuY3Rpb24gdHQodCl7cmV0dXJuIk0iK3QrIiwiK2QuX29mZnNldCsidiIrZC5fbGVuZ3RofWZ1bmN0aW9uIGV0KHQsZSxyKXtpZighdC5zaG93bGluZXx8aSE9PXQuX21haW5TdWJwbG90KXJldHVybiIiO2lmKCF0Ll9hbmNob3JBeGlzKXJldHVybiByKHQuX21haW5MaW5lUG9zaXRpb24pO3ZhciBuPWUodC5fbWFpbkxpbmVQb3NpdGlvbik7cmV0dXJuIHQubWlycm9yJiYobis9ZSh0Ll9tYWluTWlycm9yUG9zaXRpb24pKSxufWZvcihpIGluIGcuX3Bsb3RzKXthPWcuX3Bsb3RzW2ldLHU9YS54YXhpcyxkPWEueWF4aXM7dmFyIHJ0PSJNMCwwIjtrKHUsaSkmJihGPUEodSwibGVmdCIsZCx5KSxJPXUuX29mZnNldC0oRj9tK0Y6MCksQj1BKHUsInJpZ2h0IixkLHkpLEQ9dS5fb2Zmc2V0K3UuX2xlbmd0aCsoQj9tK0I6MCksUD14KHUsZCwiYm90dG9tIiksUj14KHUsZCwidG9wIiksIShHPSF1Ll9hbmNob3JBeGlzfHxpIT09dS5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09dS5taXJyb3ImJiJhbGwiIT09dS5taXJyb3J8fCh1Ll9saW5lcG9zaXRpb25zW2ldPVtQLFJdKSxydD1ldCh1LEosSyksRyYmdS5zaG93bGluZSYmKCJhbGwiPT09dS5taXJyb3J8fCJhbGx0aWNrcyI9PT11Lm1pcnJvcikmJihydCs9SihQKStKKFIpKSxhLnhsaW5lcy5zdHlsZSgic3Ryb2tlLXdpZHRoIix1Ll9sdysicHgiKS5jYWxsKGwuc3Ryb2tlLHUuc2hvd2xpbmU/dS5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSksYS54bGluZXMuYXR0cigiZCIscnQpO3ZhciBudD0iTTAsMCI7ayhkLGkpJiYocT1BKGQsImJvdHRvbSIsdSx5KSxOPWQuX29mZnNldCtkLl9sZW5ndGgrKHE/bTowKSxIPUEoZCwidG9wIix1LHkpLGo9ZC5fb2Zmc2V0LShIP206MCksVj14KGQsdSwibGVmdCIpLFU9eChkLHUsInJpZ2h0IiksIShHPSFkLl9hbmNob3JBeGlzfHxpIT09ZC5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09ZC5taXJyb3ImJiJhbGwiIT09ZC5taXJyb3J8fChkLl9saW5lcG9zaXRpb25zW2ldPVtWLFVdKSxudD1ldChkLFEsdHQpLEcmJmQuc2hvd2xpbmUmJigiYWxsIj09PWQubWlycm9yfHwiYWxsdGlja3MiPT09ZC5taXJyb3IpJiYobnQrPVEoVikrUShVKSksYS55bGluZXMuc3R5bGUoInN0cm9rZS13aWR0aCIsZC5fbHcrInB4IikuY2FsbChsLnN0cm9rZSxkLnNob3dsaW5lP2QubGluZWNvbG9yOiJyZ2JhKDAsMCwwLDApIikpLGEueWxpbmVzLmF0dHIoImQiLG50KX1yZXR1cm4gaC5tYWtlQ2xpcFBhdGhzKHQpLHQuX3Byb21pc2VzLmxlbmd0aCYmUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4odC50aWNrc3x8dC5zaG93bGluZSkmJihlPT09dC5fbWFpblN1YnBsb3R8fCJhbGwiPT09dC5taXJyb3J8fCJhbGx0aWNrcyI9PT10Lm1pcnJvcil9ZnVuY3Rpb24gVCh0LGUscil7aWYoIXIuc2hvd2xpbmV8fCFyLl9sdylyZXR1cm4hMTtpZigiYWxsIj09PXIubWlycm9yfHwiYWxsdGlja3MiPT09ci5taXJyb3IpcmV0dXJuITA7dmFyIG49ci5fYW5jaG9yQXhpcztpZighbilyZXR1cm4hMTt2YXIgaT1wLkZST01fQkxbZV07cmV0dXJuIHIuc2lkZT09PWU/bi5kb21haW5baV09PT10LmRvbWFpbltpXTpyLm1pcnJvciYmbi5kb21haW5bMS1pXT09PXQuZG9tYWluWzEtaV19ZnVuY3Rpb24gQSh0LGUscixuKXtpZihUKHQsZSxyKSlyZXR1cm4gci5fbHc7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07aWYoYS5fbWFpbkF4aXM9PT1yLl9tYWluQXhpcyYmVCh0LGUsYSkpcmV0dXJuIGEuX2x3fXJldHVybiAwfXIubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBvLnN5bmNPckFzeW5jKFthLmRvQXV0b01hcmdpbix3XSx0KX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9eDtvLmlzUmlnaHRBbmNob3IoZSk/cj1iOm8uaXNMZWZ0QW5jaG9yKGUpJiYocj15KTtyZXR1cm4gcn0oZSksbj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9IjBlbSI7by5pc1RvcEFuY2hvcihlKT9yPXAuQ0FQX1NISUZUKyJlbSI6by5pc01pZGRsZUFuY2hvcihlKSYmKHI9cC5NSURfU0hJRlQrImVtIik7cmV0dXJuIHJ9KGUpO3UuZHJhdyh0LCJndGl0bGUiLHtwcm9wQ29udGFpbmVyOmUscHJvcE5hbWU6InRpdGxlLnRleHQiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS5wbG90LGF0dHJpYnV0ZXM6e3g6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRpdGxlLG49dC5fc2l6ZSxpPTA7ZT09PXk/aT1yLnBhZC5sOmU9PT1iJiYoaT0tci5wYWQucik7c3dpdGNoKHIueHJlZil7Y2FzZSJwYXBlciI6cmV0dXJuIG4ubCtuLncqci54K2k7Y2FzZSJjb250YWluZXIiOmRlZmF1bHQ6cmV0dXJuIHQud2lkdGgqci54K2l9fShlLHIpLHk6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRpdGxlLG49dC5fc2l6ZSxpPTA7IjBlbSIhPT1lJiZlP2U9PT1wLkNBUF9TSElGVCsiZW0iJiYoaT1yLnBhZC50KTppPS1yLnBhZC5iO2lmKCJhdXRvIj09PXIueSlyZXR1cm4gbi50LzI7c3dpdGNoKHIueXJlZil7Y2FzZSJwYXBlciI6cmV0dXJuIG4udCtuLmgtbi5oKnIueStpO2Nhc2UiY29udGFpbmVyIjpkZWZhdWx0OnJldHVybiB0LmhlaWdodC10LmhlaWdodCpyLnkraX19KGUsbiksInRleHQtYW5jaG9yIjpyLGR5Om59fSl9LHIuZG9UcmFjZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5jYWxjZGF0YSxvPVtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBsPW5bZV0sYz1sWzBdfHx7fSx1PWMudHJhY2V8fHt9LGY9dS5fbW9kdWxlfHx7fSxoPWYuYXJyYXlzVG9DYWxjZGF0YTtoJiZoKGwsdSk7dmFyIHA9Zi5lZGl0U3R5bGU7cCYmby5wdXNoKHtmbjpwLGNkMDpjfSl9aWYoby5sZW5ndGgpe2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciBkPW9bZV07ZC5mbih0LGQuY2QwKX1zKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KX1yZXR1cm4gYS5zdHlsZSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NvbG9yQmFycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQuY2FsY2RhdGEubGVuZ3RoO2UrKyl7dmFyIHI9dC5jYWxjZGF0YVtlXVswXTtpZigoci50fHx7fSkuY2Ipe3ZhciBuPXIudHJhY2Usbz1yLnQuY2I7aS50cmFjZUlzKG4sImNvbnRvdXIiKSYmby5saW5lKHt3aWR0aDohMSE9PW4uY29udG91cnMuc2hvd2xpbmVzP24ubGluZS53aWR0aDowLGRhc2g6bi5saW5lLmRhc2gsY29sb3I6ImxpbmUiPT09bi5jb250b3Vycy5jb2xvcmluZz9vLl9vcHRzLmxpbmUuY29sb3I6bi5saW5lLmNvbG9yfSk7dmFyIHM9bi5fbW9kdWxlLmNvbG9yYmFyLmNvbnRhaW5lcixsPShzP25bc106bikuY29sb3JiYXI7by5vcHRpb25zKGwpKCl9fXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LHIubGF5b3V0UmVwbG90PWZ1bmN0aW9uKHQpe3ZhciBlPXQubGF5b3V0O3JldHVybiB0LmxheW91dD12b2lkIDAsaS5jYWxsKCJwbG90Iix0LCIiLGUpfSxyLmRvTGVnZW5kPWZ1bmN0aW9uKHQpe3JldHVybiBpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb1RpY2tzUmVsYXlvdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGguZHJhdyh0LCJyZWRyYXciKSx0Ll9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXMmJihpLnN1YnBsb3RzUmVnaXN0cnkuc3Bsb20udXBkYXRlR3JpZCh0KSxzKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KSksci5kcmF3TWFpblRpdGxlKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb01vZGVCYXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtmLm1hbmFnZSh0KTtmb3IodmFyIHI9MDtyPGUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7cisrKXt2YXIgbj1lLl9iYXNlUGxvdE1vZHVsZXNbcl0udXBkYXRlRng7biYmbih0KX1yZXR1cm4gYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQ2FtZXJhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wzZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWVbcltuXV0sYT1pLl9zY2VuZSxvPWkuY2FtZXJhO2Euc2V0Q2FtZXJhKG8pfX0sci5kcmF3RGF0YT1mdW5jdGlvbih0KXt2YXIgZSxuPXQuX2Z1bGxMYXlvdXQsbz10LmNhbGNkYXRhO2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciBsPW9bZV1bMF0udHJhY2U7ITA9PT1sLnZpc2libGUmJmwuX21vZHVsZS5jb2xvcmJhcnx8bi5faW5mb2xheWVyLnNlbGVjdCgiLmNiIitsLnVpZCkucmVtb3ZlKCl9cyh0KTt2YXIgYz1uLl9iYXNlUGxvdE1vZHVsZXM7Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKyljW2VdLnBsb3QodCk7cmV0dXJuIHIucmVkcmF3UmVnbFRyYWNlcyh0KSxhLnN0eWxlKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLG4uX3JlcGxvdHRpbmc9ITEsYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLnJlZHJhd1JlZ2xUcmFjZXM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZihlLl9oYXMoInJlZ2wiKSl7dmFyIHIsbixpPXQuX2Z1bGxEYXRhLGE9W10scz1bXTtmb3IoZS5faGFzT25seUxhcmdlU3Bsb21zJiZlLl9zcGxvbUdyaWQuZHJhdygpLHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIGw9aVtyXTshMD09PWwudmlzaWJsZSYmKCJzcGxvbSI9PT1sLnR5cGU/ZS5fc3Bsb21TY2VuZXNbbC51aWRdLmRyYXcoKToic2NhdHRlcmdsIj09PWwudHlwZT9vLnB1c2hVbmlxdWUoYSxsLnhheGlzK2wueWF4aXMpOiJzY2F0dGVycG9sYXJnbCI9PT1sLnR5cGUmJm8ucHVzaFVuaXF1ZShzLGwuc3VicGxvdCkpfWZvcihyPTA7cjxhLmxlbmd0aDtyKyspKG49ZS5fcGxvdHNbYVtyXV0pLl9zY2VuZSYmbi5fc2NlbmUuZHJhdygpO2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspKG49ZVtzW3JdXS5fc3VicGxvdCkuX3NjZW5lJiZuLl9zY2VuZS5kcmF3KCl9fSxyLmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5fZnVsbExheW91dCxuPWgubGlzdCh0LCIiLCEwKSxpPXIuX2F4aXNNYXRjaEdyb3Vwc3x8W10sYT0wO2E8bi5sZW5ndGg7YSsrKWU9blthXSx2KHQsZSksbSh0LGUpO2codCk7dDpmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHMsbD1pW29dLGM9bnVsbDtmb3IocyBpbiBsKXtpZighMT09PShlPWguZ2V0RnJvbUlkKHQscykpLmF1dG9yYW5nZSljb250aW51ZSB0O2M/Y1swXTxjWzFdPyhjWzBdPU1hdGgubWluKGNbMF0sZS5yYW5nZVswXSksY1sxXT1NYXRoLm1heChjWzFdLGUucmFuZ2VbMV0pKTooY1swXT1NYXRoLm1heChjWzBdLGUucmFuZ2VbMF0pLGNbMV09TWF0aC5taW4oY1sxXSxlLnJhbmdlWzFdKSk6Yz1lLnJhbmdlfWZvcihzIGluIGwpKGU9aC5nZXRGcm9tSWQodCxzKSkucmFuZ2U9Yy5zbGljZSgpLGUuX2lucHV0LnJhbmdlPWMuc2xpY2UoKSxlLnNldFNjYWxlKCl9fSxyLmZpbmFsRHJhdz1mdW5jdGlvbih0KXtpLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImRyYXciKSh0KX0sci5kcmF3TWFyZ2luUHVzaGVycz1mdW5jdGlvbih0KXtpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJzbGlkZXJzIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJ1cGRhdGVtZW51cyIsImRyYXciKSh0KX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vY29tcG9uZW50cy9tb2RlYmFyIjo2MzYsIi4uL2NvbXBvbmVudHMvdGl0bGVzIjo2NjUsIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY3MiwiLi4vbGliIjo3MDAsIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6Njg1LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3NDcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6NzU1LCIuLi9wbG90cy9wbG90cyI6ODEwLCIuLi9yZWdpc3RyeSI6ODI5LGQzOjE1NH1dLDc0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uaXNQbGFpbk9iamVjdCxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4uL3Bsb3RzL3Bsb3RzIikscz10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuL3Bsb3RfdGVtcGxhdGUiKSxjPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnO2Z1bmN0aW9uIHUodCxlKXt0PW4uZXh0ZW5kRGVlcCh7fSx0KTt2YXIgcixhLG89T2JqZWN0LmtleXModCkuc29ydCgpO2Z1bmN0aW9uIHMoZSxyLG4pe2lmKGkocikmJmkoZSkpdShlLHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheShlKSl7dmFyIG89bC5hcnJheVRlbXBsYXRlcih7X3RlbXBsYXRlOnR9LG4pO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sYz1vLm5ld0l0ZW0ocykuX3RlbXBsYXRlO2MmJnUoYyxzKX12YXIgZj1vLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxmLmxlbmd0aDthKyspci5wdXNoKGZbYV0uX3RlbXBsYXRlKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWRlbGV0ZSByW2FdLnRlbXBsYXRlaXRlbW5hbWV9fWZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBjPW9bcl0saD10W2NdO2lmKGMgaW4gZT9zKGgsZVtjXSxjKTplW2NdPWgsZihjKT09PWMpZm9yKHZhciBwIGluIGUpe3ZhciBkPWYocCk7cD09PWR8fGQhPT1jfHxwIGluIHR8fHMoaCxlW3BdLGMpfX19ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XSskLywiIil9ZnVuY3Rpb24gaCh0LGUscixhLG8pe3ZhciBzPW8mJnIobyk7Zm9yKHZhciBjIGluIHQpe3ZhciB1PXRbY10sZD1wKHQsYyxhKSxnPXAodCxjLG8pLHY9cihnKTtpZighdil7dmFyIG09ZihjKTttIT09YyYmKHY9cihnPXAodCxtLG8pKSl9aWYoKCFzfHxzIT09dikmJiEoIXZ8fHYuX25vVGVtcGxhdGluZ3x8ImRhdGFfYXJyYXkiPT09di52YWxUeXBlfHx2LmFycmF5T2smJkFycmF5LmlzQXJyYXkodSkpKWlmKCF2LnZhbFR5cGUmJmkodSkpaCh1LGUscixkLGcpO2Vsc2UgaWYodi5faXNMaW5rZWRUb0FycmF5JiZBcnJheS5pc0FycmF5KHUpKWZvcih2YXIgeT0hMSx4PTAsYj17fSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PXVbX107aWYoaSh3KSl7dmFyIGs9dy5uYW1lO2lmKGspYltrXXx8KGgodyxlLHIscCh1LHgsZCkscCh1LHgsZykpLHgrKyxiW2tdPTEpO2Vsc2UgaWYoIXkpe3ZhciBUPXAodCxsLmFycmF5RGVmYXVsdEtleShjKSxhKSxBPXAodSx4LGQpO2godyxlLHIsQSxwKHUseCxnKSk7dmFyIE09bi5uZXN0ZWRQcm9wZXJ0eShlLEEpO24ubmVzdGVkUHJvcGVydHkoZSxUKS5zZXQoTS5nZXQoKSksTS5zZXQobnVsbCkseT0hMH19fWVsc2V7bi5uZXN0ZWRQcm9wZXJ0eShlLGQpLnNldCh1KX19fWZ1bmN0aW9uIHAodCxlLHIpe3JldHVybiByP0FycmF5LmlzQXJyYXkodCk/cisiWyIrZSsiXSI6cisiLiIrZTplfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoaSh0W2VdKSlyZXR1cm4hMH1mdW5jdGlvbiBnKHQpe3ZhciBlO3N3aXRjaCh0LmNvZGUpe2Nhc2UiZGF0YSI6ZT0iVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgZGF0YS4iO2JyZWFrO2Nhc2UibGF5b3V0IjplPSJUaGUgdGVtcGxhdGUgaGFzIG5vIGtleSBsYXlvdXQuIjticmVhaztjYXNlIm1pc3NpbmciOmU9dC5wYXRoPyJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciBpdGVtICIrdC5wYXRoKyIgd2l0aCBuYW1lICIrdC50ZW1wbGF0ZWl0ZW1uYW1lOiJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciB0cmFjZSAiK3QuaW5kZXgrIiwgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIuIjticmVhaztjYXNlInVudXNlZCI6ZT10LnBhdGg/IlRoZSB0ZW1wbGF0ZSBpdGVtIGF0ICIrdC5wYXRoKyIgd2FzIG5vdCB1c2VkIGluIGNvbnN0cnVjdGluZyB0aGUgcGxvdC4iOnQuZGF0YUNvdW50PyJTb21lIG9mIHRoZSB0ZW1wbGF0ZXMgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIgd2VyZSBub3QgdXNlZC4gVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcywgdGhlIGRhdGEgb25seSBoYXMgIit0LmRhdGFDb3VudCsiIG9mIHRoaXMgdHlwZS4iOiJUaGUgdGVtcGxhdGUgaGFzICIrdC50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIGJ1dCB0aGVyZSBhcmUgbm9uZSBpbiB0aGUgZGF0YS4iO2JyZWFrO2Nhc2UicmV1c2VkIjplPSJTb21lIG9mIHRoZSB0ZW1wbGF0ZXMgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIgd2VyZSB1c2VkIG1vcmUgdGhhbiBvbmNlLiBUaGUgdGVtcGxhdGUgaGFzICIrdC50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzLCB0aGUgZGF0YSBoYXMgIit0LmRhdGFDb3VudCsiIG9mIHRoaXMgdHlwZS4ifXJldHVybiB0Lm1zZz1lLHR9ci5tYWtlVGVtcGxhdGU9ZnVuY3Rpb24odCl7dD1uLmlzUGxhaW5PYmplY3QodCk/dDpuLmdldEdyYXBoRGl2KHQpLHQ9bi5leHRlbmREZWVwKHtfY29udGV4dDpjfSx7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksby5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgZT10LmRhdGF8fFtdLHI9dC5sYXlvdXR8fHt9O3IuX2Jhc2VQbG90TW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsci5fbW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9tb2R1bGVzO3ZhciBsPXtkYXRhOnt9LGxheW91dDp7fX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2godCxlLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZ2V0VHJhY2VWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX0uYmluZChudWxsLHQpKTt2YXIgcj1uLmNvZXJjZSh0LHt9LHMsInR5cGUiKSxpPWwuZGF0YVtyXTtpfHwoaT1sLmRhdGFbcl09W10pLGkucHVzaChlKX0pLGgocixsLmxheW91dCxmdW5jdGlvbih0LGUpe3JldHVybiBhLmdldExheW91dFZhbE9iamVjdCh0LG4ubmVzdGVkUHJvcGVydHkoe30sZSkucGFydHMpfS5iaW5kKG51bGwscikpLGRlbGV0ZSBsLmxheW91dC50ZW1wbGF0ZTt2YXIgZj1yLnRlbXBsYXRlO2lmKGkoZikpe3ZhciBwLGQsZyx2LG0seSx4PWYubGF5b3V0O2koeCkmJnUoeCxsLmxheW91dCk7dmFyIGI9Zi5kYXRhO2lmKGkoYikpe2ZvcihkIGluIGwuZGF0YSlpZihnPWJbZF0sQXJyYXkuaXNBcnJheShnKSl7Zm9yKHk9KG09bC5kYXRhW2RdKS5sZW5ndGgsdj1nLmxlbmd0aCxwPTA7cDx5O3ArKyl1KGdbcCV2XSxtW3BdKTtmb3IocD15O3A8djtwKyspbS5wdXNoKG4uZXh0ZW5kRGVlcCh7fSxnW3BdKSl9Zm9yKGQgaW4gYilkIGluIGwuZGF0YXx8KGwuZGF0YVtkXT1uLmV4dGVuZERlZXAoW10sYltkXSkpfX1yZXR1cm4gbH0sci52YWxpZGF0ZVRlbXBsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5leHRlbmREZWVwKHt9LHtfY29udGV4dDpjLGRhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0pLGE9ci5sYXlvdXR8fHt9O2koZSl8fChlPWEudGVtcGxhdGV8fHt9KTt2YXIgcz1lLmxheW91dCxsPWUuZGF0YSx1PVtdO3IubGF5b3V0PWEsci5sYXlvdXQudGVtcGxhdGU9ZSxvLnN1cHBseURlZmF1bHRzKHIpO3ZhciBoPXIuX2Z1bGxMYXlvdXQsdj1yLl9mdWxsRGF0YSxtPXt9O2lmKGkocyk/KCFmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoIl8iIT09bi5jaGFyQXQoMCkmJmkoZVtuXSkpe3ZhciBhLG89ZihuKSxzPVtdO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspcy5wdXNoKHAoZSxuLHJbYV0pKSxvIT09biYmcy5wdXNoKHAoZSxvLHJbYV0pKTtmb3IoYT0wO2E8cy5sZW5ndGg7YSsrKW1bc1thXV09MTt0KGVbbl0scyl9fShoLFsibGF5b3V0Il0pLGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigtMT09PW4uaW5kZXhPZigiZGVmYXVsdHMiKSYmaShlW25dKSl7dmFyIGE9cChlLG4scik7bVthXT90KGVbbl0sYSk6dS5wdXNoKHtjb2RlOiJ1bnVzZWQiLHBhdGg6YX0pfX0ocywibGF5b3V0IikpOnUucHVzaCh7Y29kZToibGF5b3V0In0pLGkobCkpe2Zvcih2YXIgeSx4PXt9LGI9MDtiPHYubGVuZ3RoO2IrKyl7dmFyIF89dltiXTt4W3k9Xy50eXBlXT0oeFt5XXx8MCkrMSxfLl9mdWxsSW5wdXQuX3RlbXBsYXRlfHx1LnB1c2goe2NvZGU6Im1pc3NpbmciLGluZGV4Ol8uX2Z1bGxJbnB1dC5pbmRleCx0cmFjZVR5cGU6eX0pfWZvcih5IGluIGwpe3ZhciB3PWxbeV0ubGVuZ3RoLGs9eFt5XXx8MDt3Pms/dS5wdXNoKHtjb2RlOiJ1bnVzZWQiLHRyYWNlVHlwZTp5LHRlbXBsYXRlQ291bnQ6dyxkYXRhQ291bnQ6a30pOms+dyYmdS5wdXNoKHtjb2RlOiJyZXVzZWQiLHRyYWNlVHlwZTp5LHRlbXBsYXRlQ291bnQ6dyxkYXRhQ291bnQ6a30pfX1lbHNlIHUucHVzaCh7Y29kZToiZGF0YSJ9KTtpZihmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoIl8iIT09bi5jaGFyQXQoMCkpe3ZhciBhPWVbbl0sbz1wKGUsbixyKTtpKGEpPyhBcnJheS5pc0FycmF5KGUpJiYhMT09PWEuX3RlbXBsYXRlJiZhLnRlbXBsYXRlaXRlbW5hbWUmJnUucHVzaCh7Y29kZToibWlzc2luZyIscGF0aDpvLHRlbXBsYXRlaXRlbW5hbWU6YS50ZW1wbGF0ZWl0ZW1uYW1lfSksdChhLG8pKTpBcnJheS5pc0FycmF5KGEpJiZkKGEpJiZ0KGEsbyl9fSh7ZGF0YTp2LGxheW91dDpofSwiIiksdS5sZW5ndGgpcmV0dXJuIHUubWFwKGcpfX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi9wbG90cy9wbG90cyI6ODEwLCIuL3Bsb3RfY29uZmlnIjo3MzYsIi4vcGxvdF9zY2hlbWEiOjczNywiLi9wbG90X3RlbXBsYXRlIjo3Mzh9XSw3NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wbG90X2FwaSIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9zbmFwc2hvdC9oZWxwZXJzIiksbz10KCIuLi9zbmFwc2hvdC90b3N2ZyIpLHM9dCgiLi4vc25hcHNob3Qvc3ZndG9pbWciKSxsPXtmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBuZyIsImpwZWciLCJ3ZWJwIiwic3ZnIl0sZGZsdDoicG5nIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSxjPS9eZGF0YTppbWFnZVwvXHcrO2Jhc2U2NCwvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsZjtmdW5jdGlvbiBoKHQpe3JldHVybiEodCBpbiBlKXx8aS52YWxpZGF0ZShlW3RdLGxbdF0pfWlmKGU9ZXx8e30saS5pc1BsYWluT2JqZWN0KHQpPyhyPXQuZGF0YXx8W10sdT10LmxheW91dHx8e30sZj10LmNvbmZpZ3x8e30pOih0PWkuZ2V0R3JhcGhEaXYodCkscj1pLmV4dGVuZERlZXAoW10sdC5kYXRhKSx1PWkuZXh0ZW5kRGVlcCh7fSx0LmxheW91dCksZj10Ll9jb250ZXh0KSwhaCgid2lkdGgiKXx8IWgoImhlaWdodCIpKXRocm93IG5ldyBFcnJvcigiSGVpZ2h0IGFuZCB3aWR0aCBzaG91bGQgYmUgcGl4ZWwgdmFsdWVzLiIpO2lmKCFoKCJmb3JtYXQiKSl0aHJvdyBuZXcgRXJyb3IoIkltYWdlIGZvcm1hdCBpcyBub3QganBlZywgcG5nLCBzdmcgb3Igd2VicC4iKTt2YXIgcD17fTtmdW5jdGlvbiBkKHQscil7cmV0dXJuIGkuY29lcmNlKGUscCxsLHQscil9dmFyIGc9ZCgiZm9ybWF0Iiksdj1kKCJ3aWR0aCIpLG09ZCgiaGVpZ2h0IikseT1kKCJzY2FsZSIpLHg9ZCgic2V0QmFja2dyb3VuZCIpLGI9ZCgiaW1hZ2VEYXRhT25seSIpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Xy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLF8uc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfKTt2YXIgdz1pLmV4dGVuZEZsYXQoe30sdSk7diYmKHcud2lkdGg9diksbSYmKHcuaGVpZ2h0PW0pO3ZhciBrPWkuZXh0ZW5kRmxhdCh7fSxmLHtfZXhwb3J0ZWRQbG90OiEwLHN0YXRpY1Bsb3Q6ITAsc2V0QmFja2dyb3VuZDp4fSksVD1hLmdldFJlZHJhd0Z1bmMoXyk7ZnVuY3Rpb24gQSgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsYS5nZXREZWxheShfLl9mdWxsTGF5b3V0KSl9KX1mdW5jdGlvbiBNKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7dmFyIHI9byhfLGcseSksYT1fLl9mdWxsTGF5b3V0LndpZHRoLGw9Xy5fZnVsbExheW91dC5oZWlnaHQ7aWYobi5wdXJnZShfKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKF8pLCJzdmciPT09ZylyZXR1cm4gdChiP3I6ImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudChyKSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Yy5pZD1pLnJhbmRzdHIoKSxzKHtmb3JtYXQ6Zyx3aWR0aDphLGhlaWdodDpsLHNjYWxlOnksY2FudmFzOmMsc3ZnOnIscHJvbWlzZTohMH0pLnRoZW4odCkuY2F0Y2goZSl9KX1yZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXtuLnBsb3QoXyxyLHcsaykudGhlbihUKS50aGVuKEEpLnRoZW4oTSkudGhlbihmdW5jdGlvbihlKXt0KGZ1bmN0aW9uKHQpe3JldHVybiBiP3QucmVwbGFjZShjLCIiKTp0fShlKSl9KS5jYXRjaChmdW5jdGlvbih0KXtlKHQpfSl9KX19LHsiLi4vbGliIjo3MDAsIi4uL3NuYXBzaG90L2hlbHBlcnMiOjgzMywiLi4vc25hcHNob3Qvc3ZndG9pbWciOjgzNSwiLi4vc25hcHNob3QvdG9zdmciOjgzNywiLi9wbG90X2FwaSI6NzM1fV0sNzQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLHM9bi5pc1BsYWluT2JqZWN0LGw9QXJyYXkuaXNBcnJheSxjPW4uaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiB1KHQsZSxyLGksYSxvKXtvPW98fFtdO2Zvcih2YXIgZj1PYmplY3Qua2V5cyh0KSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciB2PWZbaF07aWYoInRyYW5zZm9ybXMiIT09dil7dmFyIG09by5zbGljZSgpO20ucHVzaCh2KTt2YXIgeT10W3ZdLHg9ZVt2XSxiPWcocix2KSxfPSJpbmZvX2FycmF5Ij09PShifHx7fSkudmFsVHlwZSx3PSJjb2xvcnNjYWxlIj09PShifHx7fSkudmFsVHlwZSxrPShifHx7fSkuaXRlbXM7aWYoZChyLHYpKWlmKHMoeSkmJnMoeCkpdSh5LHgsYixpLGEsbSk7ZWxzZSBpZihfJiZsKHkpKXt5Lmxlbmd0aD54Lmxlbmd0aCYmaS5wdXNoKHAoInVudXNlZCIsYSxtLmNvbmNhdCh4Lmxlbmd0aCkpKTt2YXIgVCxBLE0sUyxFLEM9eC5sZW5ndGgsTD1BcnJheS5pc0FycmF5KGspO2lmKEwmJihDPU1hdGgubWluKEMsay5sZW5ndGgpKSwyPT09Yi5kaW1lbnNpb25zKWZvcihBPTA7QTxDO0ErKylpZihsKHlbQV0pKXt5W0FdLmxlbmd0aD54W0FdLmxlbmd0aCYmaS5wdXNoKHAoInVudXNlZCIsYSxtLmNvbmNhdChBLHhbQV0ubGVuZ3RoKSkpO3ZhciB6PXhbQV0ubGVuZ3RoO2ZvcihUPTA7VDwoTD9NYXRoLm1pbih6LGtbQV0ubGVuZ3RoKTp6KTtUKyspTT1MP2tbQV1bVF06ayxTPXlbQV1bVF0sRT14W0FdW1RdLG4udmFsaWRhdGUoUyxNKT9FIT09UyYmRSE9PStTJiZpLnB1c2gocCgiZHluYW1pYyIsYSxtLmNvbmNhdChBLFQpLFMsRSkpOmkucHVzaChwKCJ2YWx1ZSIsYSxtLmNvbmNhdChBLFQpLFMpKX1lbHNlIGkucHVzaChwKCJhcnJheSIsYSxtLmNvbmNhdChBKSx5W0FdKSk7ZWxzZSBmb3IoQT0wO0E8QztBKyspTT1MP2tbQV06ayxTPXlbQV0sRT14W0FdLG4udmFsaWRhdGUoUyxNKT9FIT09UyYmRSE9PStTJiZpLnB1c2gocCgiZHluYW1pYyIsYSxtLmNvbmNhdChBKSxTLEUpKTppLnB1c2gocCgidmFsdWUiLGEsbS5jb25jYXQoQSksUykpfWVsc2UgaWYoYi5pdGVtcyYmIV8mJmwoeSkpe3ZhciBPLEksRD1rW09iamVjdC5rZXlzKGspWzBdXSxQPVtdO2ZvcihPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciBSPXhbT10uX2luZGV4fHxPO2lmKChJPW0uc2xpY2UoKSkucHVzaChSKSxzKHlbUl0pJiZzKHhbT10pKXtQLnB1c2goUik7dmFyIEY9eVtSXSxCPXhbT107cyhGKSYmITEhPT1GLnZpc2libGUmJiExPT09Qi52aXNpYmxlP2kucHVzaChwKCJpbnZpc2libGUiLGEsSSkpOnUoRixCLEQsaSxhLEkpfX1mb3IoTz0wO088eS5sZW5ndGg7TysrKShJPW0uc2xpY2UoKSkucHVzaChPKSxzKHlbT10pPy0xPT09UC5pbmRleE9mKE8pJiZpLnB1c2gocCgidW51c2VkIixhLEkpKTppLnB1c2gocCgib2JqZWN0IixhLEkseVtPXSkpfWVsc2Uhcyh5KSYmcyh4KT9pLnB1c2gocCgib2JqZWN0IixhLG0seSkpOmMoeSl8fCFjKHgpfHxffHx3P3YgaW4gZT9uLnZhbGlkYXRlKHksYik/ImVudW1lcmF0ZWQiPT09Yi52YWxUeXBlJiYoYi5jb2VyY2VOdW1iZXImJnkhPT0reHx8eSE9PXgpJiZpLnB1c2gocCgiZHluYW1pYyIsYSxtLHkseCkpOmkucHVzaChwKCJ2YWx1ZSIsYSxtLHkpKTppLnB1c2gocCgidW51c2VkIixhLG0seSkpOmkucHVzaChwKCJhcnJheSIsYSxtLHkpKTtlbHNlIGkucHVzaChwKCJzY2hlbWEiLGEsbSkpfX1yZXR1cm4gaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLGY9YS5nZXQoKSxoPVtdLGQ9e19jb250ZXh0Om4uZXh0ZW5kRmxhdCh7fSxvKX07bCh0KT8oZC5kYXRhPW4uZXh0ZW5kRGVlcChbXSx0KSxyPXQpOihkLmRhdGE9W10scj1bXSxoLnB1c2gocCgiYXJyYXkiLCJkYXRhIikpKSxzKGUpPyhkLmxheW91dD1uLmV4dGVuZERlZXAoe30sZSksYz1lKTooZC5sYXlvdXQ9e30sYz17fSxhcmd1bWVudHMubGVuZ3RoPjEmJmgucHVzaChwKCJvYmplY3QiLCJsYXlvdXQiKSkpLGkuc3VwcGx5RGVmYXVsdHMoZCk7Zm9yKHZhciBnPWQuX2Z1bGxEYXRhLHY9ci5sZW5ndGgsbT0wO208djttKyspe3ZhciB5PXJbbV0seD1bImRhdGEiLG1dO2lmKHMoeSkpe3ZhciBiPWdbbV0sXz1iLnR5cGUsdz1mLnRyYWNlc1tfXS5hdHRyaWJ1dGVzO3cudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltfXX0sITE9PT1iLnZpc2libGUmJiExIT09eS52aXNpYmxlJiZoLnB1c2gocCgiaW52aXNpYmxlIix4KSksdSh5LGIsdyxoLHgpO3ZhciBrPXkudHJhbnNmb3JtcyxUPWIudHJhbnNmb3JtcztpZihrKXtsKGspfHxoLnB1c2gocCgiYXJyYXkiLHgsWyJ0cmFuc2Zvcm1zIl0pKSx4LnB1c2goInRyYW5zZm9ybXMiKTtmb3IodmFyIEE9MDtBPGsubGVuZ3RoO0ErKyl7dmFyIE09WyJ0cmFuc2Zvcm1zIixBXSxTPWtbQV0udHlwZTtpZihzKGtbQV0pKXt2YXIgRT1mLnRyYW5zZm9ybXNbU10/Zi50cmFuc2Zvcm1zW1NdLmF0dHJpYnV0ZXM6e307RS50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMoZi50cmFuc2Zvcm1zKX0sdShrW0FdLFRbQV0sRSxoLHgsTSl9ZWxzZSBoLnB1c2gocCgib2JqZWN0Iix4LE0pKX19fWVsc2UgaC5wdXNoKHAoIm9iamVjdCIseCkpfXJldHVybiB1KGMsZC5fZnVsbExheW91dCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPXQudHJhY2VzW2EudHlwZV0scz1vLmxheW91dEF0dHJpYnV0ZXM7cyYmKGEuc3VicGxvdD9uLmV4dGVuZEZsYXQocltvLmF0dHJpYnV0ZXMuc3VicGxvdC5kZmx0XSxzKTpuLmV4dGVuZEZsYXQocixzKSl9cmV0dXJuIHJ9KGYsZyksaCwibGF5b3V0IiksMD09PWgubGVuZ3RoP3ZvaWQgMDpofTt2YXIgZj17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJsYXlvdXQiPT09dCYmIiI9PT1lPyJUaGUgbGF5b3V0IGFyZ3VtZW50IjoiZGF0YSI9PT10WzBdJiYiIj09PWU/IlRyYWNlICIrdFsxXSsiIGluIHRoZSBkYXRhIGFyZ3VtZW50IjpoKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIG9iamVjdCBjb250YWluZXIifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybigiZGF0YSI9PT10PyJUaGUgZGF0YSBhcmd1bWVudCI6aCh0KSsia2V5ICIrZSkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXIifSxzY2hlbWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0KSsia2V5ICIrZSsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBzY2hlbWEifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMocik/ImNvbnRhaW5lciI6ImtleSI7cmV0dXJuIGgodCkrbisiICIrZSsiIGRpZCBub3QgZ2V0IGNvZXJjZWQifSxkeW5hbWljOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybltoKHQpKyJrZXkiLGUsIihzZXQgdG8gJyIrcisiJykiLCJnb3QgcmVzZXQgdG8iLCInIituKyInIiwiZHVyaW5nIGRlZmF1bHRzLiJdLmpvaW4oIiAiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU/aCh0KSsiaXRlbSAiK2U6IlRyYWNlICIrdFsxXSkrIiBnb3QgZGVmYXVsdGVkIHRvIGJlIG5vdCB2aXNpYmxlIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybltoKHQpKyJrZXkgIitlLCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoIityKyIpIl0uam9pbigiICIpfX07ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbCh0KT8iSW4gZGF0YSB0cmFjZSAiK3RbMV0rIiwgIjoiSW4gIit0KyIsICJ9ZnVuY3Rpb24gcCh0LGUscixpLGEpe3ZhciBvLHM7cj1yfHwiIixsKGUpPyhvPWVbMF0scz1lWzFdKToobz1lLHM9bnVsbCk7dmFyIGM9ZnVuY3Rpb24odCl7aWYoIWwodCkpcmV0dXJuIFN0cmluZyh0KTtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyJudW1iZXIiPT10eXBlb2Ygbj9lPWUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrIlsiK24rIl0iOmUrPW4scjx0Lmxlbmd0aC0xJiYoZSs9Ii4iKX1yZXR1cm4gZX0ociksdT1mW3RdKGUsYyxpLGEpO3JldHVybiBuLmxvZyh1KSx7Y29kZTp0LGNvbnRhaW5lcjpvLHRyYWNlOnMscGF0aDpyLGFzdHI6Yyxtc2c6dX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW0oZSksbj1yLmtleU1pbnVzSWQsaT1yLmlkO3JldHVybiEhKG4gaW4gdCYmdFtuXS5faXNTdWJwbG90T2JqJiZpKXx8ZSBpbiB0fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06dFttKGUpLmtleU1pbnVzSWRdfXZhciB2PW4uY291bnRlclJlZ2V4KCIoW2Etel0rKSIpO2Z1bmN0aW9uIG0odCl7dmFyIGU9dC5tYXRjaCh2KTtyZXR1cm57a2V5TWludXNJZDplJiZlWzFdLGlkOmUmJmVbMl19fX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdHMvcGxvdHMiOjgxMCwiLi9wbG90X2NvbmZpZyI6NzM2LCIuL3Bsb3Rfc2NoZW1hIjo3Mzd9XSw3NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhZnRlcmFsbCIsdmFsdWVzOlsiaW1tZWRpYXRlIiwibmV4dCIsImFmdGVyYWxsIl19LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZm9yd2FyZCIsInJldmVyc2UiXSxkZmx0OiJmb3J3YXJkIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0scmVkcmF3Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDAsZWRpdFR5cGU6Im5vbmUifSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImN1YmljLWluLW91dCIsdmFsdWVzOlsibGluZWFyIiwicXVhZCIsImN1YmljIiwic2luIiwiZXhwIiwiY2lyY2xlIiwiZWxhc3RpYyIsImJhY2siLCJib3VuY2UiLCJsaW5lYXItaW4iLCJxdWFkLWluIiwiY3ViaWMtaW4iLCJzaW4taW4iLCJleHAtaW4iLCJjaXJjbGUtaW4iLCJlbGFzdGljLWluIiwiYmFjay1pbiIsImJvdW5jZS1pbiIsImxpbmVhci1vdXQiLCJxdWFkLW91dCIsImN1YmljLW91dCIsInNpbi1vdXQiLCJleHAtb3V0IiwiY2lyY2xlLW91dCIsImVsYXN0aWMtb3V0IiwiYmFjay1vdXQiLCJib3VuY2Utb3V0IiwibGluZWFyLWluLW91dCIsInF1YWQtaW4tb3V0IiwiY3ViaWMtaW4tb3V0Iiwic2luLWluLW91dCIsImV4cC1pbi1vdXQiLCJjaXJjbGUtaW4tb3V0IiwiZWxhc3RpYy1pbi1vdXQiLCJiYWNrLWluLW91dCIsImJvdW5jZS1pbi1vdXQiXSxlZGl0VHlwZToibm9uZSJ9LG9yZGVyaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYXlvdXQgZmlyc3QiLCJ0cmFjZXMgZmlyc3QiXSxkZmx0OiJsYXlvdXQgZmlyc3QiLGVkaXRUeXBlOiJub25lIn19fX0se31dLDc0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scz1yLm5hbWUsbD1yLmluY2x1c2lvbkF0dHJ8fCJ2aXNpYmxlIixjPWVbc10sdT1uLmlzQXJyYXlPclR5cGVkQXJyYXkodFtzXSk/dFtzXTpbXSxmPWVbc109W10saD1pLmFycmF5VGVtcGxhdGVyKGUscyxsKTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKXt2YXIgcD11W2FdO24uaXNQbGFpbk9iamVjdChwKT9vPWgubmV3SXRlbShwKToobz1oLm5ld0l0ZW0oe30pKVtsXT0hMSxvLl9pbmRleD1hLCExIT09b1tsXSYmci5oYW5kbGVJdGVtRGVmYXVsdHMocCxvLGUsciksZi5wdXNoKG8pfXZhciBkPWguZGVmYXVsdEl0ZW1zKCk7Zm9yKGE9MDthPGQubGVuZ3RoO2ErKykobz1kW2FdKS5faW5kZXg9Zi5sZW5ndGgsci5oYW5kbGVJdGVtRGVmYXVsdHMoe30sbyxlLHIse30pLGYucHVzaChvKTtpZihuLmlzQXJyYXlPclR5cGVkQXJyYXkoYykpe3ZhciBnPU1hdGgubWluKGMubGVuZ3RoLGYubGVuZ3RoKTtmb3IoYT0wO2E8ZzthKyspbi5yZWxpbmtQcml2YXRlS2V5cyhmW2FdLGNbYV0pfXJldHVybiBmfX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4fV0sNzQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltdLGRmbHQ6InNjYXR0ZXIiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixfbm9UZW1wbGF0aW5nOiEwfSx2aXNpYmxlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJsZWdlbmRvbmx5Il0sZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InN0eWxlIn0sbGVnZW5kZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToic3R5bGUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxuYW1lOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJzdHlsZSJ9LHVpZDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCIsYW5pbTohMH0saWRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZHBvaW50czp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGhvdmVyaW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsieCIsInkiLCJ6IiwidGV4dCIsIm5hbWUiXSxleHRyYXM6WyJhbGwiLCJub25lIiwic2tpcCJdLGFycmF5T2s6ITAsZGZsdDoiYWxsIixlZGl0VHlwZToibm9uZSJ9LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLHN0cmVhbTp7dG9rZW46e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITAsZWRpdFR5cGU6ImNhbGMifSxtYXhwb2ludHM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjFlNCxkZmx0OjUwMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNmb3Jtczp7X2lzTGlua2VkVG9BcnJheToidHJhbnNmb3JtIixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX19LHsiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2MDd9XSw3NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt4YXhpczp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ4IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHlheGlzOnt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6InkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn19fSx7fV0sNzQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5GUF9TQUZFLG89dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBzKHQsZSl7dmFyIHIsbixhPVtdLG89bChlKSxzPWModCxlKSx1PXMubWluLGY9cy5tYXg7aWYoMD09PXUubGVuZ3RofHwwPT09Zi5sZW5ndGgpcmV0dXJuIGkuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO3ZhciBoPXVbMF0udmFsLHA9ZlswXS52YWw7Zm9yKHI9MTtyPHUubGVuZ3RoJiZoPT09cDtyKyspaD1NYXRoLm1pbihoLHVbcl0udmFsKTtmb3Iocj0xO3I8Zi5sZW5ndGgmJmg9PT1wO3IrKylwPU1hdGgubWF4KHAsZltyXS52YWwpO3ZhciBkPSExO2lmKGUucmFuZ2Upe3ZhciBnPWkuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO2Q9Z1sxXTxnWzBdfSJyZXZlcnNlZCI9PT1lLmF1dG9yYW5nZSYmKGQ9ITAsZS5hdXRvcmFuZ2U9ITApO3ZhciB2LG0seSx4LGIsXyx3PWUucmFuZ2Vtb2RlLGs9InRvemVybyI9PT13LFQ9Im5vbm5lZ2F0aXZlIj09PXcsQT1lLl9sZW5ndGgsTT1BLzEwLFM9MDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWZvcih2PXVbcl0sbj0wO248Zi5sZW5ndGg7bisrKShfPShtPWZbbl0pLnZhbC12LnZhbCk+MCYmKChiPUEtbyh2KS1vKG0pKT5NP18vYj5TJiYoeT12LHg9bSxTPV8vYik6Xy9BPlMmJih5PXt2YWw6di52YWwscGFkOjB9LHg9e3ZhbDptLnZhbCxwYWQ6MH0sUz1fL0EpKTtpZihoPT09cCl7dmFyIEU9aC0xLEM9aCsxO2lmKGspaWYoMD09PWgpYT1bMCwxXTtlbHNle3ZhciBMPShoPjA/Zjp1KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxvKGUpKX0sMCksej1oLygxLU1hdGgubWluKC41LEwvQSkpO2E9aD4wP1swLHpdOlt6LDBdfWVsc2UgYT1UP1tNYXRoLm1heCgwLEUpLE1hdGgubWF4KDEsQyldOltFLENdfWVsc2Ugaz8oeS52YWw+PTAmJih5PXt2YWw6MCxwYWQ6MH0pLHgudmFsPD0wJiYoeD17dmFsOjAscGFkOjB9KSk6VCYmKHkudmFsLVMqbyh5KTwwJiYoeT17dmFsOjAscGFkOjB9KSx4LnZhbDw9MCYmKHg9e3ZhbDoxLHBhZDowfSkpLFM9KHgudmFsLXkudmFsKS8oQS1vKHkpLW8oeCkpLGE9W3kudmFsLVMqbyh5KSx4LnZhbCtTKm8oeCldO3JldHVybiBkJiZhLnJldmVyc2UoKSxpLnNpbXBsZU1hcChhLGUubDJyfHxOdW1iZXIpfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5fbGVuZ3RoLzIwO3JldHVybiJkb21haW4iPT09dC5jb25zdHJhaW4mJnQuX2lucHV0RG9tYWluJiYoZSo9KHQuX2lucHV0RG9tYWluWzFdLXQuX2lucHV0RG9tYWluWzBdKS8odC5kb21haW5bMV0tdC5kb21haW5bMF0pKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wYWQrKHQuZXh0cmFwYWQ/ZTowKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByLG4saSxhPWUuX2lkLG89dC5fZnVsbERhdGEscz10Ll9mdWxsTGF5b3V0LGw9W10sYz1bXTtmdW5jdGlvbiBoKHQsZSl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89dFtlW3JdXSxzPShvLl9leHRyZW1lc3x8e30pW2FdO2lmKCEwPT09by52aXNpYmxlJiZzKXtmb3Iobj0wO248cy5taW4ubGVuZ3RoO24rKylpPXMubWluW25dLHUobCxpLnZhbCxpLnBhZCx7ZXh0cmFwYWQ6aS5leHRyYXBhZH0pO2ZvcihuPTA7bjxzLm1heC5sZW5ndGg7bisrKWk9cy5tYXhbbl0sZihjLGkudmFsLGkucGFkLHtleHRyYXBhZDppLmV4dHJhcGFkfSl9fX1yZXR1cm4gaChvLGUuX3RyYWNlSW5kaWNlcyksaChzLmFubm90YXRpb25zfHxbXSxlLl9hbm5JbmRpY2VzfHxbXSksaChzLnNoYXBlc3x8W10sZS5fc2hhcGVJbmRpY2VzfHxbXSkse21pbjpsLG1heDpjfX1mdW5jdGlvbiB1KHQsZSxyLG4pe2godCxlLHIsbixkKX1mdW5jdGlvbiBmKHQsZSxyLG4pe2godCxlLHIsbixnKX1mdW5jdGlvbiBoKHQsZSxyLG4saSl7Zm9yKHZhciBhPW4udG96ZXJvLG89bi5leHRyYXBhZCxzPSEwLGw9MDtsPHQubGVuZ3RoJiZzO2wrKyl7dmFyIGM9dFtsXTtpZihpKGMudmFsLGUpJiZjLnBhZD49ciYmKGMuZXh0cmFwYWR8fCFvKSl7cz0hMTticmVha31pKGUsYy52YWwpJiZjLnBhZDw9ciYmKG98fCFjLmV4dHJhcGFkKSYmKHQuc3BsaWNlKGwsMSksbC0tKX1pZihzKXt2YXIgdT1hJiYwPT09ZTt0LnB1c2goe3ZhbDplLHBhZDp1PzA6cixleHRyYXBhZDohdSYmb30pfX1mdW5jdGlvbiBwKHQpe3JldHVybiBuKHQpJiZNYXRoLmFicyh0KTxhfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHQ+PWV9ZS5leHBvcnRzPXtnZXRBdXRvUmFuZ2U6cyxtYWtlUGFkRm46bCxkb0F1dG9SYW5nZTpmdW5jdGlvbih0LGUpe2lmKGUuc2V0U2NhbGUoKSxlLmF1dG9yYW5nZSl7ZS5yYW5nZT1zKHQsZSksZS5fcj1lLnJhbmdlLnNsaWNlKCksZS5fcmw9aS5zaW1wbGVNYXAoZS5fcixlLnIybCk7dmFyIHI9ZS5faW5wdXQsbj17fTtuW2UuX2F0dHIrIi5yYW5nZSJdPWUucmFuZ2UsbltlLl9hdHRyKyIuYXV0b3JhbmdlIl09ZS5hdXRvcmFuZ2Usby5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksbiksci5yYW5nZT1lLnJhbmdlLnNsaWNlKCksci5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2V9dmFyIGE9ZS5fYW5jaG9yQXhpcztpZihhJiZhLnJhbmdlc2xpZGVyKXt2YXIgbD1hLnJhbmdlc2xpZGVyW2UuX25hbWVdO2wmJiJhdXRvIj09PWwucmFuZ2Vtb2RlJiYobC5yYW5nZT1zKHQsZSkpLGEuX2lucHV0LnJhbmdlc2xpZGVyW2UuX25hbWVdPWkuZXh0ZW5kRmxhdCh7fSxsKX19LGZpbmRFeHRyZW1lczpmdW5jdGlvbih0LGUscil7cnx8KHI9e30pO3QuX218fHQuc2V0U2NhbGUoKTt2YXIgaSxvLHMsbCxjLGgsZCxnLHYsbT1bXSx5PVtdLHg9ZS5sZW5ndGgsYj1yLnBhZGRlZHx8ITEsXz1yLnRvemVybyYmKCJsaW5lYXIiPT09dC50eXBlfHwiLSI9PT10LnR5cGUpLHc9ImxvZyI9PT10LnR5cGUsaz0hMTtmdW5jdGlvbiBUKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGs9ITAsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KE51bWJlcih0W2VdfHwwKSwwKX07dmFyIGU9TWF0aC5tYXgoTnVtYmVyKHR8fDApLDApO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgQT1UKCh0Ll9tPjA/ci5wcGFkcGx1czpyLnBwYWRtaW51cyl8fHIucHBhZHx8MCksTT1UKCh0Ll9tPjA/ci5wcGFkbWludXM6ci5wcGFkcGx1cyl8fHIucHBhZHx8MCksUz1UKHIudnBhZHBsdXN8fHIudnBhZCksRT1UKHIudnBhZG1pbnVzfHxyLnZwYWQpO2lmKCFrKXtpZihnPTEvMCx2PS0xLzAsdylmb3IoaT0wO2k8eDtpKyspKG89ZVtpXSk8ZyYmbz4wJiYoZz1vKSxvPnYmJm88YSYmKHY9byk7ZWxzZSBmb3IoaT0wO2k8eDtpKyspKG89ZVtpXSk8ZyYmbz4tYSYmKGc9byksbz52JiZvPGEmJih2PW8pO2U9W2csdl0seD0yfXZhciBDPXt0b3plcm86XyxleHRyYXBhZDpifTtmdW5jdGlvbiBMKHIpe3M9ZVtyXSxuKHMpJiYoaD1BKHIpLGQ9TShyKSxnPXMtRShyKSx2PXMrUyhyKSx3JiZnPHYvMTAmJihnPXYvMTApLGw9dC5jMmwoZyksYz10LmMybCh2KSxfJiYobD1NYXRoLm1pbigwLGwpLGM9TWF0aC5tYXgoMCxjKSkscChsKSYmdShtLGwsZCxDKSxwKGMpJiZmKHksYyxoLEMpKX12YXIgej1NYXRoLm1pbig2LHgpO2ZvcihpPTA7aTx6O2krKylMKGkpO2ZvcihpPXgtMTtpPj16O2ktLSlMKGkpO3JldHVybnttaW46bSxtYXg6eSxvcHRzOnJ9fSxjb25jYXRFeHRyZW1lczpjfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNzQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGg9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHA9dCgiLi9jbGVhbl90aWNrcyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGc9ZC5PTkVBVkdZRUFSLHY9ZC5PTkVBVkdNT05USCxtPWQuT05FREFZLHk9ZC5PTkVIT1VSLHg9ZC5PTkVNSU4sYj1kLk9ORVNFQyxfPWQuTUlOVVNfU0lHTix3PWQuQkFETlVNLGs9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxUPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsQT1lLmV4cG9ydHM9e307QS5zZXRDb252ZXJ0PXQoIi4vc2V0X2NvbnZlcnQiKTt2YXIgTT10KCIuL2F4aXNfYXV0b3R5cGUiKSxTPXQoIi4vYXhpc19pZHMiKTtBLmlkMm5hbWU9Uy5pZDJuYW1lLEEubmFtZTJpZD1TLm5hbWUyaWQsQS5jbGVhbklkPVMuY2xlYW5JZCxBLmxpc3Q9Uy5saXN0LEEubGlzdElkcz1TLmxpc3RJZHMsQS5nZXRGcm9tSWQ9Uy5nZXRGcm9tSWQsQS5nZXRGcm9tVHJhY2U9Uy5nZXRGcm9tVHJhY2U7dmFyIEU9dCgiLi9hdXRvcmFuZ2UiKTtBLmdldEF1dG9SYW5nZT1FLmdldEF1dG9SYW5nZSxBLmZpbmRFeHRyZW1lcz1FLmZpbmRFeHRyZW1lcyxBLmNvZXJjZVJlZj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi5jaGFyQXQobi5sZW5ndGgtMSksbD1yLl9mdWxsTGF5b3V0Ll9zdWJwbG90c1tvKyJheGlzIl0sYz1uKyJyZWYiLHU9e307cmV0dXJuIGl8fChpPWxbMF18fGEpLGF8fChhPWkpLHVbY109e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpsLmNvbmNhdChhP1thXTpbXSksZGZsdDppfSxzLmNvZXJjZSh0LGUsdSxjKX0sQS5jb2VyY2VQb3NpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbDtpZigicGFwZXIiPT09bnx8InBpeGVsIj09PW4pbz1zLmVuc3VyZU51bWJlcixsPXIoaSxhKTtlbHNle3ZhciBjPUEuZ2V0RnJvbUlkKGUsbik7bD1yKGksYT1jLmZyYWN0aW9uMnIoYSkpLG89Yy5jbGVhblBvc310W2ldPW8obCl9LEEuY2xlYW5Qb3NpdGlvbj1mdW5jdGlvbih0LGUscil7cmV0dXJuKCJwYXBlciI9PT1yfHwicGl4ZWwiPT09cj9zLmVuc3VyZU51bWJlcjpBLmdldEZyb21JZChlLHIpLmNsZWFuUG9zKSh0KX0sQS5yZWRyYXdDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxBLmxpc3RJZHModCk7dmFyIHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBuKG4saSxhLHMpe2Zvcih2YXIgbD1vLmdldENvbXBvbmVudE1ldGhvZChuLGkpLGM9e30sdT0wO3U8ZS5sZW5ndGg7dSsrKWZvcih2YXIgZj1yW0EuaWQybmFtZShlW3VdKV1bYV0saD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgcD1mW2hdO2lmKCFjW3BdJiYobCh0LHApLGNbcF09MSxzKSlyZXR1cm59fW4oImFubm90YXRpb25zIiwiZHJhd09uZSIsIl9hbm5JbmRpY2VzIiksbigic2hhcGVzIiwiZHJhd09uZSIsIl9zaGFwZUluZGljZXMiKSxuKCJpbWFnZXMiLCJkcmF3IiwiX2ltZ0luZGljZXMiLCEwKX07dmFyIEM9QS5nZXREYXRhQ29udmVyc2lvbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT0ieCI9PT1yfHwieSI9PT1yfHwieiI9PT1yP3I6bjtpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPXt0eXBlOk0obiksX2NhdGVnb3JpZXM6W119LEEuc2V0Q29udmVydChpKSwiY2F0ZWdvcnkiPT09aS50eXBlKWZvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKWkuZDJjKG5bb10pfWVsc2UgaT1BLmdldEZyb21UcmFjZSh0LGUsYSk7cmV0dXJuIGk/e2QyYzppLmQyYyxjMmQ6aS5jMmR9OiJpZHMiPT09YT97ZDJjOnosYzJkOnp9OntkMmM6TCxjMmQ6TH19O2Z1bmN0aW9uIEwodCl7cmV0dXJuK3R9ZnVuY3Rpb24geih0KXtyZXR1cm4gU3RyaW5nKHQpfUEuZ2V0RGF0YVRvQ29vcmRGdW5jPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBDKHQsZSxyLG4pLmQyY30sQS5jb3VudGVyTGV0dGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckF0KDApO3JldHVybiJ4Ij09PWU/InkiOiJ5Ij09PWU/IngiOnZvaWQgMH0sQS5taW5EdGljaz1mdW5jdGlvbih0LGUscixuKXstMT09PVsibG9nIiwiY2F0ZWdvcnkiLCJtdWx0aWNhdGVnb3J5Il0uaW5kZXhPZih0LnR5cGUpJiZuP3ZvaWQgMD09PXQuX21pbkR0aWNrPyh0Ll9taW5EdGljaz1lLHQuX2ZvcmNlVGljazA9cik6dC5fbWluRHRpY2smJigodC5fbWluRHRpY2svZSsxZS02KSUxPDJlLTYmJigoci10Ll9mb3JjZVRpY2swKS9lJTErMS4wMDAwMDEpJTE8MmUtNj8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOigoZS90Ll9taW5EdGljaysxZS02KSUxPjJlLTZ8fCgoci10Ll9mb3JjZVRpY2swKS90Ll9taW5EdGljayUxKzEuMDAwMDAxKSUxPjJlLTYpJiYodC5fbWluRHRpY2s9MCkpOnQuX21pbkR0aWNrPTB9LEEuc2F2ZVJhbmdlSW5pdGlhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1BLmxpc3QodCwiIiwhMCksbj0hMSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz12b2lkIDA9PT1hLl9yYW5nZUluaXRpYWwscz1vfHwhKGEucmFuZ2VbMF09PT1hLl9yYW5nZUluaXRpYWxbMF0mJmEucmFuZ2VbMV09PT1hLl9yYW5nZUluaXRpYWxbMV0pOyhvJiYhMT09PWEuYXV0b3JhbmdlfHxlJiZzKSYmKGEuX3JhbmdlSW5pdGlhbD1hLnJhbmdlLnNsaWNlKCksbj0hMCl9cmV0dXJuIG59LEEuc2F2ZVNob3dTcGlrZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9QS5saXN0KHQsIiIsITApLG49ITEsaT0ib24iLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPXZvaWQgMD09PW8uX3Nob3dTcGlrZUluaXRpYWwsbD1zfHwhKG8uc2hvd3NwaWtlcz09PW8uX3Nob3dzcGlrZXMpOyhzfHxlJiZsKSYmKG8uX3Nob3dTcGlrZUluaXRpYWw9by5zaG93c3Bpa2VzLG49ITApLCJvbiIhPT1pfHxvLnNob3dzcGlrZXN8fChpPSJvZmYiKX1yZXR1cm4gdC5fZnVsbExheW91dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1pLG59LEEuYXV0b0Jpbj1mdW5jdGlvbih0LGUscixuLGEsbyl7dmFyIGwsYz1zLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0KSx1PXMuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQpO2lmKCJjYXRlZ29yeSI9PT1lLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZSlyZXR1cm57c3RhcnQ6Yy0uNSxlbmQ6dSsuNSxzaXplOk1hdGgubWF4KDEsTWF0aC5yb3VuZChvKXx8MSksX2RhdGFTcGFuOnUtY307aWYoYXx8KGE9ZS5jYWxlbmRhciksbD0ibG9nIj09PWUudHlwZT97dHlwZToibGluZWFyIixyYW5nZTpbYyx1XX06e3R5cGU6ZS50eXBlLHJhbmdlOnMuc2ltcGxlTWFwKFtjLHVdLGUuYzJyLDAsYSksY2FsZW5kYXI6YX0sQS5zZXRDb252ZXJ0KGwpLG89byYmcC5kdGljayhvLGwudHlwZSkpbC5kdGljaz1vLGwudGljazA9cC50aWNrMCh2b2lkIDAsbC50eXBlLGEpO2Vsc2V7dmFyIGY7aWYocilmPSh1LWMpL3I7ZWxzZXt2YXIgaD1zLmRpc3RpbmN0VmFscyh0KSxkPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaC5taW5EaWZmKS9NYXRoLkxOMTApKSxnPWQqcy5yb3VuZFVwKGgubWluRGlmZi9kLFsuOSwxLjksNC45LDkuOV0sITApO2Y9TWF0aC5tYXgoZywyKnMuc3RkZXYodCkvTWF0aC5wb3codC5sZW5ndGgsbj8uMjU6LjQpKSxpKGYpfHwoZj0xKX1BLmF1dG9UaWNrcyhsLGYpfXZhciB2LHk9bC5kdGljayx4PUEudGlja0luY3JlbWVudChBLnRpY2tGaXJzdChsKSx5LCJyZXZlcnNlIixhKTtpZigibnVtYmVyIj09dHlwZW9mIHkpdj0oeD1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPTAscz0wLGw9MCxjPTA7ZnVuY3Rpb24gdShlKXtyZXR1cm4oMSsxMDAqKGUtdCkvci5kdGljayklMTAwPDJ9Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspZVtmXSUxPT0wP2wrKzppKGVbZl0pfHxjKyssdShlW2ZdKSYmbysrLHUoZVtmXStyLmR0aWNrLzIpJiZzKys7dmFyIGg9ZS5sZW5ndGgtYztpZihsPT09aCYmImRhdGUiIT09ci50eXBlKXIuZHRpY2s8MT90PW4tLjUqci5kdGljazoodC09LjUpK3IuZHRpY2s8biYmKHQrPXIuZHRpY2spO2Vsc2UgaWYoczwuMSpoJiYobz4uMypofHx1KG4pfHx1KGEpKSl7dmFyIHA9ci5kdGljay8yO3QrPXQrcDxuP3A6LXB9cmV0dXJuIHR9KHgsdCxsLGMsdSkpKygxK01hdGguZmxvb3IoKHUteCkveSkpKnk7ZWxzZSBmb3IoIk0iPT09bC5kdGljay5jaGFyQXQoMCkmJih4PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9cy5maW5kRXhhY3REYXRlcyhlLGkpO2lmKGEuZXhhY3REYXlzPi44KXt2YXIgbz1OdW1iZXIoci5zdWJzdHIoMSkpO2EuZXhhY3RZZWFycz4uOCYmbyUxMj09MD90PUEudGlja0luY3JlbWVudCh0LCJNNiIsInJldmVyc2UiKSsxLjUqbTphLmV4YWN0TW9udGhzPi44P3Q9QS50aWNrSW5jcmVtZW50KHQsIk0xIiwicmV2ZXJzZSIpKzE1LjUqbTp0LT1tLzI7dmFyIGw9QS50aWNrSW5jcmVtZW50KHQscik7aWYobDw9bilyZXR1cm4gbH1yZXR1cm4gdH0oeCx0LHksYyxhKSksdj14LDA7djw9dTspdj1BLnRpY2tJbmNyZW1lbnQodix5LCExLGEpLDA7cmV0dXJue3N0YXJ0OmUuYzJyKHgsMCxhKSxlbmQ6ZS5jMnIodiwwLGEpLHNpemU6eSxfZGF0YVNwYW46dS1jfX0sQS5wcmVwVGlja3M9ZnVuY3Rpb24odCl7dmFyIGU9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoImF1dG8iPT09dC50aWNrbW9kZXx8IXQuZHRpY2spe3ZhciByLG49dC5udGlja3M7bnx8KCJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8ocj10LnRpY2tmb250PzEuMioodC50aWNrZm9udC5zaXplfHwxMik6MTUsbj10Ll9sZW5ndGgvcik6KHI9InkiPT09dC5faWQuY2hhckF0KDApPzQwOjgwLG49cy5jb25zdHJhaW4odC5fbGVuZ3RoL3IsNCw5KSsxKSwicmFkaWFsYXhpcyI9PT10Ll9uYW1lJiYobio9MikpLCJhcnJheSI9PT10LnRpY2ttb2RlJiYobio9MTAwKSxBLmF1dG9UaWNrcyh0LE1hdGguYWJzKGVbMV0tZVswXSkvbiksdC5fbWluRHRpY2s+MCYmdC5kdGljazwyKnQuX21pbkR0aWNrJiYodC5kdGljaz10Ll9taW5EdGljayx0LnRpY2swPXQubDJyKHQuX2ZvcmNlVGljazApKX10LnRpY2swfHwodC50aWNrMD0iZGF0ZSI9PT10LnR5cGU/IjIwMDAtMDEtMDEiOjApLCJkYXRlIj09PXQudHlwZSYmdC5kdGljazwuMSYmKHQuZHRpY2s9LjEpLGoodCl9LEEuY2FsY1RpY2tzPWZ1bmN0aW9uKHQpe0EucHJlcFRpY2tzKHQpO3ZhciBlPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKCJhcnJheSI9PT10LnRpY2ttb2RlKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRpY2t2YWxzLHI9dC50aWNrdGV4dCxuPW5ldyBBcnJheShlLmxlbmd0aCksaT1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxhPTEuMDAwMSppWzBdLTFlLTQqaVsxXSxvPTEuMDAwMSppWzFdLTFlLTQqaVswXSxsPU1hdGgubWluKGEsbyksYz1NYXRoLm1heChhLG8pLHU9MDtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7dmFyIGY9ImNhdGVnb3J5Ij09PXQudHlwZT90LmQybF9ub2FkZDp0LmQybDsibG9nIj09PXQudHlwZSYmIkwiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSYmKHQuZHRpY2s9IkwiK01hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5taW4odC5yYW5nZVswXSx0LnJhbmdlWzFdKSktMSkpO2Zvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgcD1mKGVbaF0pO3A+bCYmcDxjJiYodm9pZCAwPT09cltoXT9uW3VdPUEudGlja1RleHQodCxwKTpuW3VdPVYodCxwLFN0cmluZyhyW2hdKSksdSsrKX11PGUubGVuZ3RoJiZuLnNwbGljZSh1LGUubGVuZ3RoLXUpO3JldHVybiBufSh0KTt0Ll90bWluPUEudGlja0ZpcnN0KHQpO3ZhciByPTEuMDAwMSplWzBdLTFlLTQqZVsxXSxuPTEuMDAwMSplWzFdLTFlLTQqZVswXSxpPWVbMV08ZVswXTtpZih0Ll90bWluPHIhPT1pKXJldHVybltdO3ZhciBhPVtdOyJjYXRlZ29yeSIhPT10LnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PXQudHlwZXx8KG49aT9NYXRoLm1heCgtLjUsbik6TWF0aC5taW4odC5fY2F0ZWdvcmllcy5sZW5ndGgtLjUsbikpO2Zvcih2YXIgbz1udWxsLGw9TWF0aC5tYXgoMWUzLHQuX2xlbmd0aHx8MCksYz10Ll90bWluOyhpP2M+PW46Yzw9bikmJiEoYS5sZW5ndGg+bHx8Yz09PW8pO2M9QS50aWNrSW5jcmVtZW50KGMsdC5kdGljayxpLHQuY2FsZW5kYXIpKW89YyxhLnB1c2goYyk7cnQodCkmJjM2MD09PU1hdGguYWJzKGVbMV0tZVswXSkmJmEucG9wKCksdC5fdG1heD1hW2EubGVuZ3RoLTFdLHQuX3ByZXZEYXRlSGVhZD0iIix0Ll9pbkNhbGNUaWNrcz0hMDtmb3IodmFyIHU9bmV3IEFycmF5KGEubGVuZ3RoKSxmPTA7ZjxhLmxlbmd0aDtmKyspdVtmXT1BLnRpY2tUZXh0KHQsYVtmXSk7cmV0dXJuIHQuX2luQ2FsY1RpY2tzPSExLHV9O3ZhciBPPVsyLDUsMTBdLEk9WzEsMiwzLDYsMTJdLEQ9WzEsMiw1LDEwLDE1LDMwXSxQPVsxLDIsMyw3LDE0XSxSPVstLjA0NiwwLC4zMDEsLjQ3NywuNjAyLC42OTksLjc3OCwuODQ1LC45MDMsLjk1NCwxXSxGPVstLjMwMSwwLC4zMDEsLjY5OSwxXSxCPVsxNSwzMCw0NSw5MCwxODBdO2Z1bmN0aW9uIE4odCxlLHIpe3JldHVybiBlKnMucm91bmRVcCh0L2Uscil9ZnVuY3Rpb24gaih0KXt2YXIgZT10LmR0aWNrO2lmKHQuX3RpY2tleHBvbmVudD0wLGkoZSl8fCJzdHJpbmciPT10eXBlb2YgZXx8KGU9MSksImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwodC5fdGlja3JvdW5kPW51bGwpLCJkYXRlIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZywiIiksYT1uLmxlbmd0aDtpZigiTSI9PT1TdHJpbmcoZSkuY2hhckF0KDApKWE+MTB8fCIwMS0wMSIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9ImQiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/InkiOiJtIjtlbHNlIGlmKGU+PW0mJmE8PTEwfHxlPj0xNSptKXQuX3RpY2tyb3VuZD0iZCI7ZWxzZSBpZihlPj14JiZhPD0xNnx8ZT49eSl0Ll90aWNrcm91bmQ9Ik0iO2Vsc2UgaWYoZT49YiYmYTw9MTl8fGU+PXgpdC5fdGlja3JvdW5kPSJTIjtlbHNle3ZhciBvPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLCIiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGEsbyktMjAsdC5fdGlja3JvdW5kPDAmJih0Ll90aWNrcm91bmQ9NCl9fWVsc2UgaWYoaShlKXx8IkwiPT09ZS5jaGFyQXQoMCkpe3ZhciBzPXQucmFuZ2UubWFwKHQucjJkfHxOdW1iZXIpO2koZSl8fChlPU51bWJlcihlLnN1YnN0cigxKSkpLHQuX3RpY2tyb3VuZD0yLU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKy4wMSk7dmFyIGw9TWF0aC5tYXgoTWF0aC5hYnMoc1swXSksTWF0aC5hYnMoc1sxXSkpLGM9TWF0aC5mbG9vcihNYXRoLmxvZyhsKS9NYXRoLkxOMTArLjAxKTtNYXRoLmFicyhjKT4zJiYocSh0LmV4cG9uZW50Zm9ybWF0KSYmIUgoYyk/dC5fdGlja2V4cG9uZW50PTMqTWF0aC5yb3VuZCgoYy0xKS8zKTp0Ll90aWNrZXhwb25lbnQ9Yyl9ZWxzZSB0Ll90aWNrcm91bmQ9bnVsbH1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgbj10LnRpY2tmb250fHx7fTtyZXR1cm57eDplLGR4OjAsZHk6MCx0ZXh0OnJ8fCIiLGZvbnRTaXplOm4uc2l6ZSxmb250Om4uZmFtaWx5LGZvbnRDb2xvcjpuLmNvbG9yfX1BLmF1dG9UaWNrcz1mdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKX1pZigiZGF0ZSI9PT10LnR5cGUpe3QudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhcik7dmFyIGE9MiplO2E+Zz8oZS89ZyxyPW4oMTApLHQuZHRpY2s9Ik0iKzEyKk4oZSxyLE8pKTphPnY/KGUvPXYsdC5kdGljaz0iTSIrTihlLDEsSSkpOmE+bT8odC5kdGljaz1OKGUsbSxQKSx0LnRpY2swPXMuZGF0ZVRpY2swKHQuY2FsZW5kYXIsITApKTphPnk/dC5kdGljaz1OKGUseSxJKTphPng/dC5kdGljaz1OKGUseCxEKTphPmI/dC5kdGljaz1OKGUsYixEKToocj1uKDEwKSx0LmR0aWNrPU4oZSxyLE8pKX1lbHNlIGlmKCJsb2ciPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIG89cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKG9bMV0tb1swXSk8MSl7dmFyIGw9MS41Kk1hdGguYWJzKChvWzFdLW9bMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsb1sxXSktTWF0aC5wb3coMTAsb1swXSkpL2wscj1uKDEwKSx0LmR0aWNrPSJMIitOKGUscixPKX1lbHNlIHQuZHRpY2s9ZT4uMz8iRDIiOiJEMSJ9ZWxzZSJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8odC50aWNrMD0wLHQuZHRpY2s9TWF0aC5jZWlsKE1hdGgubWF4KGUsMSkpKTpydCh0KT8odC50aWNrMD0wLHI9MSx0LmR0aWNrPU4oZSxyLEIpKToodC50aWNrMD0wLHI9bigxMCksdC5kdGljaz1OKGUscixPKSk7aWYoMD09PXQuZHRpY2smJih0LmR0aWNrPTEpLCFpKHQuZHRpY2spJiYic3RyaW5nIiE9dHlwZW9mIHQuZHRpY2spe3ZhciBjPXQuZHRpY2s7dGhyb3cgdC5kdGljaz0xLCJheC5kdGljayBlcnJvcjogIitTdHJpbmcoYyl9fSxBLnRpY2tJbmNyZW1lbnQ9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89cj8tMToxO2lmKGkoZSkpcmV0dXJuIHQrbyplO3ZhciBsPWUuY2hhckF0KDApLGM9bypOdW1iZXIoZS5zdWJzdHIoMSkpO2lmKCJNIj09PWwpcmV0dXJuIHMuaW5jcmVtZW50TW9udGgodCxjLGEpO2lmKCJMIj09PWwpcmV0dXJuIE1hdGgubG9nKE1hdGgucG93KDEwLHQpK2MpL01hdGguTE4xMDtpZigiRCI9PT1sKXt2YXIgdT0iRDIiPT09ZT9GOlIsZj10Ky4wMSpvLGg9cy5yb3VuZFVwKHMubW9kKGYsMSksdSxyKTtyZXR1cm4gTWF0aC5mbG9vcihmKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLGgpLDEpKS9NYXRoLkxOMTB9dGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKGUpfSxBLnRpY2tGaXJzdD1mdW5jdGlvbih0KXt2YXIgZT10LnIybHx8TnVtYmVyLHI9cy5zaW1wbGVNYXAodC5yYW5nZSxlKSxhPXJbMV08clswXSxvPWE/TWF0aC5mbG9vcjpNYXRoLmNlaWwsbD0xLjAwMDEqclswXS0xZS00KnJbMV0sYz10LmR0aWNrLHU9ZSh0LnRpY2swKTtpZihpKGMpKXt2YXIgZj1vKChsLXUpL2MpKmMrdTtyZXR1cm4iY2F0ZWdvcnkiIT09dC50eXBlJiYibXVsdGljYXRlZ29yeSIhPT10LnR5cGV8fChmPXMuY29uc3RyYWluKGYsMCx0Ll9jYXRlZ29yaWVzLmxlbmd0aC0xKSksZn12YXIgaD1jLmNoYXJBdCgwKSxwPU51bWJlcihjLnN1YnN0cigxKSk7aWYoIk0iPT09aCl7Zm9yKHZhciBkLGcsdixtPTAseT11O208MTA7KXtpZigoKGQ9QS50aWNrSW5jcmVtZW50KHksYyxhLHQuY2FsZW5kYXIpKS1sKSooeS1sKTw9MClyZXR1cm4gYT9NYXRoLm1pbih5LGQpOk1hdGgubWF4KHksZCk7Zz0obC0oeStkKS8yKS8oZC15KSx2PWgrKE1hdGguYWJzKE1hdGgucm91bmQoZykpfHwxKSpwLHk9QS50aWNrSW5jcmVtZW50KHksdixnPDA/IWE6YSx0LmNhbGVuZGFyKSxtKyt9cmV0dXJuIHMuZXJyb3IoInRpY2tGaXJzdCBkaWQgbm90IGNvbnZlcmdlIix0KSx5fWlmKCJMIj09PWgpcmV0dXJuIE1hdGgubG9nKG8oKE1hdGgucG93KDEwLGwpLXUpL3ApKnArdSkvTWF0aC5MTjEwO2lmKCJEIj09PWgpe3ZhciB4PSJEMiI9PT1jP0Y6UixiPXMucm91bmRVcChzLm1vZChsLDEpLHgsYSk7cmV0dXJuIE1hdGguZmxvb3IobCkrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxiKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhjKX0sQS50aWNrVGV4dD1mdW5jdGlvbih0LGUscil7dmFyIG4sYT1WKHQsZSksbz0iYXJyYXkiPT09dC50aWNrbW9kZSxsPXJ8fG8sYz10LnR5cGUsdT0iY2F0ZWdvcnkiPT09Yz90LmQybF9ub2FkZDp0LmQybDtpZihvJiZBcnJheS5pc0FycmF5KHQudGlja3RleHQpKXt2YXIgZj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxoPU1hdGguYWJzKGZbMV0tZlswXSkvMWU0O2ZvcihuPTA7bjx0LnRpY2t0ZXh0Lmxlbmd0aCYmIShNYXRoLmFicyhlLXUodC50aWNrdmFsc1tuXSkpPGgpO24rKyk7aWYobjx0LnRpY2t0ZXh0Lmxlbmd0aClyZXR1cm4gYS50ZXh0PVN0cmluZyh0LnRpY2t0ZXh0W25dKSxhfWZ1bmN0aW9uIHAobil7aWYodm9pZCAwPT09bilyZXR1cm4hMDtpZihyKXJldHVybiJub25lIj09PW47dmFyIGk9e2ZpcnN0OnQuX3RtaW4sbGFzdDp0Ll90bWF4fVtuXTtyZXR1cm4iYWxsIiE9PW4mJmUhPT1pfXZhciBkPXI/Im5ldmVyIjoibm9uZSIhPT10LmV4cG9uZW50Zm9ybWF0JiZwKHQuc2hvd2V4cG9uZW50KT8iaGlkZSI6IiI7aWYoImRhdGUiPT09Yz9mdW5jdGlvbih0LGUscixuKXt2YXIgYT10Ll90aWNrcm91bmQsbz1yJiZ0LmhvdmVyZm9ybWF0fHxBLmdldFRpY2tGb3JtYXQodCk7biYmKGE9aShhKT80Ont5OiJtIixtOiJkIixkOiJNIixNOiJTIixTOjR9W2FdKTt2YXIgbCxjPXMuZm9ybWF0RGF0ZShlLngsbyxhLHQuX2RhdGVGb3JtYXQsdC5jYWxlbmRhcix0Ll9leHRyYUZvcm1hdCksdT1jLmluZGV4T2YoIlxuIik7LTEhPT11JiYobD1jLnN1YnN0cih1KzEpLGM9Yy5zdWJzdHIoMCx1KSk7biYmKCIwMDowMDowMCI9PT1jfHwiMDA6MDAiPT09Yz8oYz1sLGw9IiIpOjg9PT1jLmxlbmd0aCYmKGM9Yy5yZXBsYWNlKC86MDAkLywiIikpKTtsJiYocj8iZCI9PT1hP2MrPSIsICIrbDpjPWwrKGM/IiwgIitjOiIiKTp0Ll9pbkNhbGNUaWNrcyYmbD09PXQuX3ByZXZEYXRlSGVhZHx8KGMrPSI8YnI+IitsLHQuX3ByZXZEYXRlSGVhZD1sKSk7ZS50ZXh0PWN9KHQsYSxyLGwpOiJsb2ciPT09Yz9mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXQuZHRpY2ssbD1lLngsYz10LnRpY2tmb3JtYXQsdT0ic3RyaW5nIj09dHlwZW9mIG8mJm8uY2hhckF0KDApOyJuZXZlciI9PT1hJiYoYT0iIik7biYmIkwiIT09dSYmKG89IkwzIix1PSJMIik7aWYoY3x8IkwiPT09dSllLnRleHQ9RyhNYXRoLnBvdygxMCxsKSx0LGEsbik7ZWxzZSBpZihpKG8pfHwiRCI9PT11JiZzLm1vZChsKy4wMSwxKTwuMSl7dmFyIGY9TWF0aC5yb3VuZChsKSxoPU1hdGguYWJzKGYpLHA9dC5leHBvbmVudGZvcm1hdDsicG93ZXIiPT09cHx8cShwKSYmSChmKT8oZS50ZXh0PTA9PT1mPzE6MT09PWY/IjEwIjoiMTA8c3VwPiIrKGY+MT8iIjpfKStoKyI8L3N1cD4iLGUuZm9udFNpemUqPTEuMjUpOigiZSI9PT1wfHwiRSI9PT1wKSYmaD4yP2UudGV4dD0iMSIrcCsoZj4wPyIrIjpfKStoOihlLnRleHQ9RyhNYXRoLnBvdygxMCxsKSx0LCIiLCJmYWtlaG92ZXIiKSwiRDEiPT09byYmInkiPT09dC5faWQuY2hhckF0KDApJiYoZS5keS09ZS5mb250U2l6ZS82KSl9ZWxzZXtpZigiRCIhPT11KXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhvKTtlLnRleHQ9U3RyaW5nKE1hdGgucm91bmQoTWF0aC5wb3coMTAscy5tb2QobCwxKSkpKSxlLmZvbnRTaXplKj0uNzV9aWYoIkQxIj09PXQuZHRpY2spe3ZhciBkPVN0cmluZyhlLnRleHQpLmNoYXJBdCgwKTsiMCIhPT1kJiYiMSIhPT1kfHwoInkiPT09dC5faWQuY2hhckF0KDApP2UuZHgtPWUuZm9udFNpemUvNDooZS5keSs9ZS5mb250U2l6ZS8yLGUuZHgrPSh0LnJhbmdlWzFdPnQucmFuZ2VbMF0/MTotMSkqZS5mb250U2l6ZSoobDwwPy41Oi4yNSkpKX19KHQsYSwwLGwsZCk6ImNhdGVnb3J5Ij09PWM/ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZS54KV07dm9pZCAwPT09ciYmKHI9IiIpO2UudGV4dD1TdHJpbmcocil9KHQsYSk6Im11bHRpY2F0ZWdvcnkiPT09Yz9mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5yb3VuZChlLngpLGk9dC5fY2F0ZWdvcmllc1tuXXx8W10sYT12b2lkIDA9PT1pWzFdPyIiOlN0cmluZyhpWzFdKSxvPXZvaWQgMD09PWlbMF0/IiI6U3RyaW5nKGlbMF0pO3I/ZS50ZXh0PW8rIiAtICIrYTooZS50ZXh0PWEsZS50ZXh0Mj1vKX0odCxhLHIpOnJ0KHQpP2Z1bmN0aW9uKHQsZSxyLG4saSl7aWYoInJhZGlhbnMiIT09dC50aGV0YXVuaXR8fHIpZS50ZXh0PUcoZS54LHQsaSxuKTtlbHNle3ZhciBhPWUueC8xODA7aWYoMD09PWEpZS50ZXh0PSIwIjtlbHNle3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKTw9MWUtNn12YXIgcj1mdW5jdGlvbih0KXt2YXIgcj0xO2Zvcig7IWUoTWF0aC5yb3VuZCh0KnIpL3IsdCk7KXIqPTEwO3JldHVybiByfSh0KSxuPXQqcixpPU1hdGguYWJzKGZ1bmN0aW9uIHQocixuKXtyZXR1cm4gZShuLDApP3I6dChuLHIlbil9KG4scikpO3JldHVybltNYXRoLnJvdW5kKG4vaSksTWF0aC5yb3VuZChyL2kpXX0oYSk7aWYob1sxXT49MTAwKWUudGV4dD1HKHMuZGVnMnJhZChlLngpLHQsaSxuKTtlbHNle3ZhciBsPWUueDwwOzE9PT1vWzFdPzE9PT1vWzBdP2UudGV4dD0iXHUwM2MwIjplLnRleHQ9b1swXSsiXHUwM2MwIjplLnRleHQ9WyI8c3VwPiIsb1swXSwiPC9zdXA+IiwiXHUyMDQ0IiwiPHN1Yj4iLG9bMV0sIjwvc3ViPiIsIlx1MDNjMCJdLmpvaW4oIiIpLGwmJihlLnRleHQ9XytlLnRleHQpfX19fSh0LGEscixsLGQpOmZ1bmN0aW9uKHQsZSxyLG4saSl7Im5ldmVyIj09PWk/aT0iIjoiYWxsIj09PXQuc2hvd2V4cG9uZW50JiZNYXRoLmFicyhlLngvdC5kdGljayk8MWUtNiYmKGk9ImhpZGUiKTtlLnRleHQ9RyhlLngsdCxpLG4pfSh0LGEsMCxsLGQpLHQudGlja3ByZWZpeCYmIXAodC5zaG93dGlja3ByZWZpeCkmJihhLnRleHQ9dC50aWNrcHJlZml4K2EudGV4dCksdC50aWNrc3VmZml4JiYhcCh0LnNob3d0aWNrc3VmZml4KSYmKGEudGV4dCs9dC50aWNrc3VmZml4KSwiYm91bmRhcmllcyI9PT10LnRpY2tzb258fHQuc2hvd2RpdmlkZXJzKXt2YXIgZz1mdW5jdGlvbihlKXt2YXIgcj10LmwycChlKTtyZXR1cm4gcj49MCYmcjw9dC5fbGVuZ3RoP2U6bnVsbH07YS54Ym5kPVtnKGEueC0uNSksZyhhLngrdC5kdGljay0uNSldfXJldHVybiBhfSxBLmhvdmVyTGFiZWxUZXh0PWZ1bmN0aW9uKHQsZSxyKXtpZihyIT09dyYmciE9PWUpcmV0dXJuIEEuaG92ZXJMYWJlbFRleHQodCxlKSsiIC0gIitBLmhvdmVyTGFiZWxUZXh0KHQscik7dmFyIG49ImxvZyI9PT10LnR5cGUmJmU8PTAsaT1BLnRpY2tUZXh0KHQsdC5jMmwobj8tZTplKSwiaG92ZXIiKS50ZXh0O3JldHVybiBuPzA9PT1lPyIwIjpfK2k6aX07dmFyIFU9WyJmIiwicCIsIm4iLCJcdTAzYmMiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCJdO2Z1bmN0aW9uIHEodCl7cmV0dXJuIlNJIj09PXR8fCJCIj09PXR9ZnVuY3Rpb24gSCh0KXtyZXR1cm4gdD4xNHx8dDwtMTV9ZnVuY3Rpb24gRyh0LGUscixuKXt2YXIgYT10PDAsbz1lLl90aWNrcm91bmQsbD1yfHxlLmV4cG9uZW50Zm9ybWF0fHwiQiIsYz1lLl90aWNrZXhwb25lbnQsdT1BLmdldFRpY2tGb3JtYXQoZSksZj1lLnNlcGFyYXRldGhvdXNhbmRzO2lmKG4pe3ZhciBoPXtleHBvbmVudGZvcm1hdDpsLGR0aWNrOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UuZHRpY2s6aSh0KSYmTWF0aC5hYnModCl8fDEscmFuZ2U6Im5vbmUiPT09ZS5zaG93ZXhwb25lbnQ/ZS5yYW5nZS5tYXAoZS5yMmQpOlswLHR8fDFdfTtqKGgpLG89KE51bWJlcihoLl90aWNrcm91bmQpfHwwKSs0LGM9aC5fdGlja2V4cG9uZW50LGUuaG92ZXJmb3JtYXQmJih1PWUuaG92ZXJmb3JtYXQpfWlmKHUpcmV0dXJuIGUuX251bUZvcm1hdCh1KSh0KS5yZXBsYWNlKC8tL2csXyk7dmFyIHAsZD1NYXRoLnBvdygxMCwtbykvMjtpZigibm9uZSI9PT1sJiYoYz0wKSwodD1NYXRoLmFicyh0KSk8ZCl0PSIwIixhPSExO2Vsc2V7aWYodCs9ZCxjJiYodCo9TWF0aC5wb3coMTAsLWMpLG8rPWMpLDA9PT1vKXQ9U3RyaW5nKE1hdGguZmxvb3IodCkpO2Vsc2UgaWYobzwwKXt0PSh0PVN0cmluZyhNYXRoLnJvdW5kKHQpKSkuc3Vic3RyKDAsdC5sZW5ndGgrbyk7Zm9yKHZhciBnPW87ZzwwO2crKyl0Kz0iMCJ9ZWxzZXt2YXIgdj0odD1TdHJpbmcodCkpLmluZGV4T2YoIi4iKSsxO3YmJih0PXQuc3Vic3RyKDAsditvKS5yZXBsYWNlKC9cLj8wKyQvLCIiKSl9dD1zLm51bVNlcGFyYXRlKHQsZS5fc2VwYXJhdG9ycyxmKX1jJiYiaGlkZSIhPT1sJiYocShsKSYmSChjKSYmKGw9InBvd2VyIikscD1jPDA/XystYzoicG93ZXIiIT09bD8iKyIrYzpTdHJpbmcoYyksImUiPT09bHx8IkUiPT09bD90Kz1sK3A6InBvd2VyIj09PWw/dCs9Ilx4ZDcxMDxzdXA+IitwKyI8L3N1cD4iOiJCIj09PWwmJjk9PT1jP3QrPSJCIjpxKGwpJiYodCs9VVtjLzMrNV0pKTtyZXR1cm4gYT9fK3Q6dH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dC5faWQuY2hhckF0KDApLG49dC5fdGlja0FuZ2xlc1tlXXx8MCxpPXMuZGVnMnJhZChuKSxhPU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSksbD0wLGM9MDtyZXR1cm4gdC5fc2VsZWN0aW9uc1tlXS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9JCh0aGlzKSxlPWYuYkJveCh0Lm5vZGUoKSkscj1lLndpZHRoLG49ZS5oZWlnaHQ7bD1NYXRoLm1heChsLG8qcixhKm4pLGM9TWF0aC5tYXgoYyxhKnIsbypuKX0pLHt4OmMseTpsfVtyXX1mdW5jdGlvbiBXKHQpe3JldHVyblt0LnRleHQsdC54LHQuYXhJbmZvLHQuZm9udCx0LmZvbnRTaXplLHQuZm9udENvbG9yXS5qb2luKCJfIil9ZnVuY3Rpb24gWCh0LGUpe3ZhciByLG49dC5fZnVsbExheW91dC5fc2l6ZSxpPWUuX2lkLmNoYXJBdCgwKSxhPWUuc2lkZTtyZXR1cm4iZnJlZSIhPT1lLmFuY2hvcj9yPVMuZ2V0RnJvbUlkKHQsZS5hbmNob3IpOiJ4Ij09PWk/cj17X29mZnNldDpuLnQrKDEtKGUucG9zaXRpb258fDApKSpuLmgsX2xlbmd0aDowfToieSI9PT1pJiYocj17X29mZnNldDpuLmwrKGUucG9zaXRpb258fDApKm4udyxfbGVuZ3RoOjB9KSwidG9wIj09PWF8fCJsZWZ0Ij09PWE/ci5fb2Zmc2V0OiJib3R0b20iPT09YXx8InJpZ2h0Ij09PWE/ci5fb2Zmc2V0K3IuX2xlbmd0aDp2b2lkIDB9ZnVuY3Rpb24gWih0LGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPjEmJnI8dC5fbGVuZ3RoLTF9ZnVuY3Rpb24gJCh0KXt2YXIgZT1uLnNlbGVjdCh0KSxyPWUuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIik7cmV0dXJuIHIuZW1wdHkoKT9lLnNlbGVjdCgidGV4dCIpOnJ9ZnVuY3Rpb24gSih0KXtyZXR1cm4gdC5faWQrIi5hdXRvbWFyZ2luIn1mdW5jdGlvbiBLKHQpe3JldHVybiB0Ll9pZCsiLnJhbmdlc2xpZGVyIn1mdW5jdGlvbiBRKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspLTE9PT10LmluZGV4T2YoZVtyXSkmJnQucHVzaChlW3JdKX1mdW5jdGlvbiB0dCh0LGUscil7dmFyIG4saSxhPVtdLG89W10sbD10LmxheW91dDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWEucHVzaChBLmdldEZyb21JZCh0LGVbbl0pKTtmb3Iobj0wO248ci5sZW5ndGg7bisrKW8ucHVzaChBLmdldEZyb21JZCh0LHJbbl0pKTt2YXIgYz1PYmplY3Qua2V5cyhoKSx1PVsiYW5jaG9yIiwiZG9tYWluIiwib3ZlcmxheWluZyIsInBvc2l0aW9uIiwic2lkZSIsInRpY2thbmdsZSIsImVkaXRUeXBlIl0sZj1bImxpbmVhciIsImxvZyJdO2ZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBwPWNbbl0sZD1hWzBdW3BdLGc9b1swXVtwXSx2PSEwLG09ITEseT0hMTtpZigiXyIhPT1wLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGQmJi0xPT09dS5pbmRleE9mKHApKXtmb3IoaT0xO2k8YS5sZW5ndGgmJnY7aSsrKXt2YXIgeD1hW2ldW3BdOyJ0eXBlIj09PXAmJi0xIT09Zi5pbmRleE9mKGQpJiYtMSE9PWYuaW5kZXhPZih4KSYmZCE9PXg/bT0hMDp4IT09ZCYmKHY9ITEpfWZvcihpPTE7aTxvLmxlbmd0aCYmdjtpKyspe3ZhciBiPW9baV1bcF07InR5cGUiPT09cCYmLTEhPT1mLmluZGV4T2YoZykmJi0xIT09Zi5pbmRleE9mKGIpJiZnIT09Yj95PSEwOm9baV1bcF0hPT1nJiYodj0hMSl9diYmKG0mJihsW2FbMF0uX25hbWVdLnR5cGU9ImxpbmVhciIpLHkmJihsW29bMF0uX25hbWVdLnR5cGU9ImxpbmVhciIpLGV0KGwscCxhLG8sdC5fZnVsbExheW91dC5fZGZsdFRpdGxlKSl9fWZvcihuPTA7bjx0Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLmxlbmd0aDtuKyspe3ZhciBfPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbbl07LTEhPT1lLmluZGV4T2YoXy54cmVmKSYmLTEhPT1yLmluZGV4T2YoXy55cmVmKSYmcy5zd2FwQXR0cnMobC5hbm5vdGF0aW9uc1tuXSxbIj8iXSl9fWZ1bmN0aW9uIGV0KHQsZSxyLG4saSl7dmFyIGEsbz1zLm5lc3RlZFByb3BlcnR5LGw9byh0W3JbMF0uX25hbWVdLGUpLmdldCgpLGM9byh0W25bMF0uX25hbWVdLGUpLmdldCgpO2ZvcigidGl0bGUiPT09ZSYmKGwmJmwudGV4dD09PWkueCYmKGwudGV4dD1pLnkpLGMmJmMudGV4dD09PWkueSYmKGMudGV4dD1pLngpKSxhPTA7YTxyLmxlbmd0aDthKyspbyh0LHJbYV0uX25hbWUrIi4iK2UpLnNldChjKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKW8odCxuW2FdLl9uYW1lKyIuIitlKS5zZXQobCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuImFuZ3VsYXJheGlzIj09PXQuX2lkfUEuZ2V0VGlja0Zvcm1hdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsO2Z1bmN0aW9uIGModCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0P3Q6TnVtYmVyKHQucmVwbGFjZSgiTSIsIiIpKSp2fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1bIkwiLCJEIl07aWYodHlwZW9mIHQ9PXR5cGVvZiBlKXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQtZTt2YXIgbj1yLmluZGV4T2YodC5jaGFyQXQoMCkpLGk9ci5pbmRleE9mKGUuY2hhckF0KDApKTtyZXR1cm4gbj09PWk/TnVtYmVyKHQucmVwbGFjZSgvKEx8RCkvZywiIikpLU51bWJlcihlLnJlcGxhY2UoLyhMfEQpL2csIiIpKTpuLWl9cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0PzE6LTF9ZnVuY3Rpb24gZih0LGUpe3ZhciByPW51bGw9PT1lWzBdLG49bnVsbD09PWVbMV0saT11KHQsZVswXSk+PTAsYT11KHQsZVsxXSk8PTA7cmV0dXJuKHJ8fGkpJiYobnx8YSl9aWYodC50aWNrZm9ybWF0c3RvcHMmJnQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aD4wKXN3aXRjaCh0LnR5cGUpe2Nhc2UiZGF0ZSI6Y2FzZSJsaW5lYXIiOmZvcihlPTA7ZTx0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg7ZSsrKWlmKChuPXQudGlja2Zvcm1hdHN0b3BzW2VdKS5lbmFibGVkJiYoaT10LmR0aWNrLGE9bi5kdGlja3JhbmdlLG89dm9pZCAwLHZvaWQgMCx2b2lkIDAsbz1jfHxmdW5jdGlvbih0KXtyZXR1cm4gdH0scz1hWzBdLGw9YVsxXSwoIXMmJiJudW1iZXIiIT10eXBlb2Ygc3x8byhzKTw9byhpKSkmJighbCYmIm51bWJlciIhPXR5cGVvZiBsfHxvKGwpPj1vKGkpKSkpe3I9bjticmVha31icmVhaztjYXNlImxvZyI6Zm9yKGU9MDtlPHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDtlKyspaWYoKG49dC50aWNrZm9ybWF0c3RvcHNbZV0pLmVuYWJsZWQmJmYodC5kdGljayxuLmR0aWNrcmFuZ2UpKXtyPW47YnJlYWt9fXJldHVybiByP3IudmFsdWU6dC50aWNrZm9ybWF0fSxBLmdldFN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dC5fc3VicGxvdHMsbj1yLmNhcnRlc2lhbi5jb25jYXQoci5nbDJkfHxbXSksaT1lP0EuZmluZFN1YnBsb3RzV2l0aEF4aXMobixlKTpuO3JldHVybiBpLnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgcj10LnN1YnN0cigxKS5zcGxpdCgieSIpLG49ZS5zdWJzdHIoMSkuc3BsaXQoInkiKTtyZXR1cm4gclswXT09PW5bMF0/K3JbMV0tK25bMV06K3JbMF0tK25bMF19KSxpfSxBLmZpbmRTdWJwbG90c1dpdGhBeGlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBSZWdFeHAoIngiPT09ZS5faWQuY2hhckF0KDApPyJeIitlLl9pZCsieSI6ZS5faWQrIiQiKSxuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTtyLnRlc3QoYSkmJm4ucHVzaChhKX1yZXR1cm4gbn0sQS5tYWtlQ2xpcFBhdGhzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoIWUuX2hhc09ubHlMYXJnZVNwbG9tcyl7dmFyIHIsaSxhPXtfb2Zmc2V0OjAsX2xlbmd0aDplLndpZHRoLF9pZDoiIn0sbz17X29mZnNldDowLF9sZW5ndGg6ZS5oZWlnaHQsX2lkOiIifSxzPUEubGlzdCh0LCJ4IiwhMCksbD1BLmxpc3QodCwieSIsITApLGM9W107Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylmb3IoYy5wdXNoKHt4OnNbcl0seTpvfSksaT0wO2k8bC5sZW5ndGg7aSsrKTA9PT1yJiZjLnB1c2goe3g6YSx5OmxbaV19KSxjLnB1c2goe3g6c1tyXSx5OmxbaV19KTt2YXIgdT1lLl9jbGlwcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLmRhdGEoYyxmdW5jdGlvbih0KXtyZXR1cm4gdC54Ll9pZCt0LnkuX2lkfSk7dS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJheGVzY2xpcCIsITApLmF0dHIoImlkIixmdW5jdGlvbih0KXtyZXR1cm4iY2xpcCIrZS5fdWlkK3QueC5faWQrdC55Ll9pZH0pLmFwcGVuZCgicmVjdCIpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoInJlY3QiKS5hdHRyKHt4OnQueC5fb2Zmc2V0fHwwLHk6dC55Ll9vZmZzZXR8fDAsd2lkdGg6dC54Ll9sZW5ndGh8fDEsaGVpZ2h0OnQueS5fbGVuZ3RofHwxfSl9KX19LEEuZHJhdz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dDsicmVkcmF3Ij09PWUmJm4uX3BhcGVyLnNlbGVjdEFsbCgiZy5zdWJwbG90IikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9bi5fcGxvdHNbZV0saT1yLnhheGlzLGE9ci55YXhpcztyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsidGljayIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJ0aWNrIikucmVtb3ZlKCksci54YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrInRpY2syIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIrYS5faWQrInRpY2syIikucmVtb3ZlKCksci54YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrImRpdmlkZXIiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsiZGl2aWRlciIpLnJlbW92ZSgpLHIuZ3JpZGxheWVyJiZyLmdyaWRsYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxyLnplcm9saW5lbGF5ZXImJnIuemVyb2xpbmVsYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuZy0iK2kuX2lkKyJ0aXRsZSIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoIi5nLSIrYS5faWQrInRpdGxlIikucmVtb3ZlKCl9KTt2YXIgaT1lJiYicmVkcmF3IiE9PWU/ZTpBLmxpc3RJZHModCk7cmV0dXJuIHMuc3luY09yQXN5bmMoaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dmFyIG49QS5nZXRGcm9tSWQodCxlKSxpPUEuZHJhd09uZSh0LG4scik7cmV0dXJuIG4uX3I9bi5yYW5nZS5zbGljZSgpLG4uX3JsPXMuc2ltcGxlTWFwKG4uX3Isbi5yMmwpLGl9fX0pKX0sQS5kcmF3T25lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGw7cj1yfHx7fSxlLnNldFNjYWxlKCk7dmFyIGg9dC5fZnVsbExheW91dCxwPWUuX2lkLGQ9cC5jaGFyQXQoMCksZz1BLmNvdW50ZXJMZXR0ZXIocCksdj1lLl9tYWluU3VicGxvdCxtPWUuX21haW5MaW5lUG9zaXRpb24seT1lLl9tYWluTWlycm9yUG9zaXRpb24seD1oLl9wbG90c1t2XVtkKyJheGlzbGF5ZXIiXSxiPWUuX3N1YnBsb3RzV2l0aCxfPWUuX3ZhbHM9QS5jYWxjVGlja3MoZSksdz1bZS5taXJyb3IsbSx5XS5qb2luKCJfIik7Zm9yKG49MDtuPF8ubGVuZ3RoO24rKylfW25dLmF4SW5mbz13O2lmKGUudmlzaWJsZSl7ZS5fc2VsZWN0aW9ucz17fSxlLl90aWNrQW5nbGVzPXt9O3ZhciBrLE0sUz1BLm1ha2VUcmFuc0ZuKGUpO2lmKCJib3VuZGFyaWVzIj09PWUudGlja3Nvbil7dmFyIEU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdLGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJm4ucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZihlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpKGVbcl0sMCk7aShlW3ItMV0sMSl9cmV0dXJuIG59KDAsXyk7TT1BLmNsaXBFbmRzKGUsRSksaz0iaW5zaWRlIj09PWUudGlja3M/TTpFfWVsc2UgTT1BLmNsaXBFbmRzKGUsXyksaz0iaW5zaWRlIj09PWUudGlja3M/TTpfO3ZhciBDPWUuX2dyaWRWYWxzPU0sTD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXSxhPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54Ym5kW2VdO251bGwhPT1yJiZpLnB1c2gocy5leHRlbmRGbGF0KHt9LHQse3g6cn0pKX07aWYodC5zaG93ZGl2aWRlcnMmJmUubGVuZ3RoKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdO28udGV4dDIhPT1uJiZhKG8sMCksbj1vLnRleHQyfWEoZVtyLTFdLDEpfXJldHVybiBpfShlLF8pO2lmKCFoLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciB6PXt9O2ZvcihuPTA7bjxiLmxlbmd0aDtuKyspe2k9YltuXTt2YXIgTz0obD1oLl9wbG90c1tpXSlbZysiYXhpcyJdLEk9Ty5fbWFpbkF4aXMuX2lkO2lmKCF6W0ldKXt6W0ldPTE7dmFyIEQ9IngiPT09ZD8iTTAsIitPLl9vZmZzZXQrInYiK08uX2xlbmd0aDoiTSIrTy5fb2Zmc2V0KyIsMGgiK08uX2xlbmd0aDtBLmRyYXdHcmlkKHQsZSx7dmFsczpDLGNvdW50ZXJBeGlzOk8sbGF5ZXI6bC5ncmlkbGF5ZXIuc2VsZWN0KCIuIitwKSxwYXRoOkQsdHJhbnNGbjpTfSksQS5kcmF3WmVyb0xpbmUodCxlLHtjb3VudGVyQXhpczpPLGxheWVyOmwuemVyb2xpbmVsYXllcixwYXRoOkQsdHJhbnNGbjpTfSl9fX12YXIgUD1BLmdldFRpY2tTaWducyhlKSxSPVtdO2lmKGUudGlja3Mpe3ZhciBGLEIsTixqPUEubWFrZVRpY2tQYXRoKGUsbSxQWzJdKTtpZihlLl9hbmNob3JBeGlzJiZlLm1pcnJvciYmITAhPT1lLm1pcnJvcj8oRj1BLm1ha2VUaWNrUGF0aChlLHksUFszXSksQj1qK0YpOihGPSIiLEI9aiksZS5zaG93ZGl2aWRlcnMmJiJvdXRzaWRlIj09PWUudGlja3MmJiJib3VuZGFyaWVzIj09PWUudGlja3Nvbil7dmFyIFU9e307Zm9yKG49MDtuPEwubGVuZ3RoO24rKylVW0xbbl0ueF09MTtOPWZ1bmN0aW9uKHQpe3JldHVybiBVW3QueF0/RjpCfX1lbHNlIE49QjtBLmRyYXdUaWNrcyh0LGUse3ZhbHM6ayxsYXllcjp4LHBhdGg6Tix0cmFuc0ZuOlN9KSxSPU9iamVjdC5rZXlzKGUuX2xpbmVwb3NpdGlvbnN8fHt9KX1mb3Iobj0wO248Ui5sZW5ndGg7bisrKXtpPVJbbl0sbD1oLl9wbG90c1tpXTt2YXIgcT1lLl9saW5lcG9zaXRpb25zW2ldfHxbXSxIPUEubWFrZVRpY2tQYXRoKGUscVswXSxQWzBdKStBLm1ha2VUaWNrUGF0aChlLHFbMV0sUFsxXSk7QS5kcmF3VGlja3ModCxlLHt2YWxzOmssbGF5ZXI6bFtkKyJheGlzbGF5ZXIiXSxwYXRoOkgsdHJhbnNGbjpTfSl9dmFyIEc9W107aWYoRy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIEEuZHJhd0xhYmVscyh0LGUse3ZhbHM6XyxsYXllcjp4LHRyYW5zRm46UyxsYWJlbEZuczpBLm1ha2VMYWJlbEZucyhlLG0pfSl9KSwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBaPTAsJD17eDoyLHk6MTB9W2RdLFE9UFsyXSooImluc2lkZSI9PT1lLnRpY2tzPy0xOjEpO0cucHVzaChmdW5jdGlvbigpe3JldHVybiBaKz1ZKGUscCsidGljayIpKyQsWis9ZS5fdGlja0FuZ2xlc1twKyJ0aWNrIl0/ZS50aWNrZm9udC5zaXplKlQ6MCxBLmRyYXdMYWJlbHModCxlLHt2YWxzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO25bYS50ZXh0Ml0/blthLnRleHQyXS5wdXNoKGEueCk6blthLnRleHQyXT1bYS54XX1mb3IodmFyIG8gaW4gbilyLnB1c2goVih0LHMuaW50ZXJwKG5bb10sLjUpLG8pKTtyZXR1cm4gcn0oZSxfKSxsYXllcjp4LGNsczpwKyJ0aWNrMiIscmVwb3NpdGlvbk9uVXBkYXRlOiEwLHNlY29uZGFyeTohMCx0cmFuc0ZuOlMsbGFiZWxGbnM6QS5tYWtlTGFiZWxGbnMoZSxtK1oqUSl9KX0pLEcucHVzaChmdW5jdGlvbigpe3JldHVybiBaKz1ZKGUscCsidGljazIiKSxlLl9sYWJlbExlbmd0aD1aLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLl9pZCsiZGl2aWRlciIsaT1yLnZhbHMsYT1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoaSxXKTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5jYWxsKHUuc3Ryb2tlLGUuZGl2aWRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixmLmNyaXNwUm91bmQodCxlLmRpdmlkZXJ3aWR0aCwxKSsicHgiKSxhLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpfSh0LGUse3ZhbHM6TCxsYXllcjp4LHBhdGg6QS5tYWtlVGlja1BhdGgoZSxtLFEsWiksdHJhbnNGbjpTfSl9KX12YXIgdHQ9by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoZSk7cmV0dXJuIEcucHVzaChmdW5jdGlvbigpe2lmKGUuc2hvd3RpY2tsYWJlbHMpe3ZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj14Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLl9ib3VuZGluZ0JveD17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsbGVmdDpuLmxlZnQtci5sZWZ0LHJpZ2h0Om4ucmlnaHQtci5sZWZ0LHRvcDpuLnRvcC1yLnRvcCxib3R0b206bi5ib3R0b20tci50b3B9fWVsc2V7dmFyIGksYT1oLl9zaXplOyJ4Ij09PWQ/KGk9ImZyZWUiPT09ZS5hbmNob3I/YS50K2EuaCooMS1lLnBvc2l0aW9uKTphLnQrYS5oKigxLWUuX2FuY2hvckF4aXMuZG9tYWluW3tib3R0b206MCx0b3A6MX1bZS5zaWRlXV0pLGUuX2JvdW5kaW5nQm94PXt0b3A6aSxib3R0b206aSxsZWZ0OmUuX29mZnNldCxyaWdodDplLl9vZmZzZXQrZS5fbGVuZ3RoLHdpZHRoOmUuX2xlbmd0aCxoZWlnaHQ6MH0pOihpPSJmcmVlIj09PWUuYW5jaG9yP2EubCthLncqZS5wb3NpdGlvbjphLmwrYS53KmUuX2FuY2hvckF4aXMuZG9tYWluW3tsZWZ0OjAscmlnaHQ6MX1bZS5zaWRlXV0sZS5fYm91bmRpbmdCb3g9e2xlZnQ6aSxyaWdodDppLGJvdHRvbTplLl9vZmZzZXQrZS5fbGVuZ3RoLHRvcDplLl9vZmZzZXQsaGVpZ2h0OmUuX2xlbmd0aCx3aWR0aDowfSl9aWYoYil7Zm9yKHZhciBvPWUuX2NvdW50ZXJTcGFuPVsxLzAsLTEvMF0scz0wO3M8Yi5sZW5ndGg7cysrKXt2YXIgbD1oLl9wbG90c1tiW3NdXVsieCI9PT1kPyJ5YXhpcyI6InhheGlzIl07ZXQobyxbbC5fb2Zmc2V0LGwuX29mZnNldCtsLl9sZW5ndGhdKX0iZnJlZSI9PT1lLmFuY2hvciYmZXQobywieCI9PT1kP1tlLl9ib3VuZGluZ0JveC5ib3R0b20sZS5fYm91bmRpbmdCb3gudG9wXTpbZS5fYm91bmRpbmdCb3gucmlnaHQsZS5fYm91bmRpbmdCb3gubGVmdF0pfX0sZnVuY3Rpb24oKXt2YXIgcixuLGk9ZS5zaWRlLmNoYXJBdCgwKTtpZih0dCYmKG49by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiYXV0b01hcmdpbk9wdHMiKSh0LGUpKSxhLmF1dG9NYXJnaW4odCxLKGUpLG4pLGUuYXV0b21hcmdpbiYmKCF0dHx8ImIiIT09aSkpe3I9e3g6MCx5OjAscjowLGw6MCx0OjAsYjowfTt2YXIgcyxsLGM9ZS5fYm91bmRpbmdCb3gsdT1YKHQsZSk7c3dpdGNoKGQraSl7Y2FzZSJ4YiI6cz0wLGw9Yy50b3AtdSxyW2ldPWMuaGVpZ2h0O2JyZWFrO2Nhc2UieHQiOnM9MSxsPXUtYy5ib3R0b20scltpXT1jLmhlaWdodDticmVhaztjYXNlInlsIjpzPTAsbD11LWMucmlnaHQscltpXT1jLndpZHRoO2JyZWFrO2Nhc2UieXIiOnM9MSxsPWMubGVmdC11LHJbaV09Yy53aWR0aH1pZihyW2ddPSJmcmVlIj09PWUuYW5jaG9yP2UucG9zaXRpb246ZS5fYW5jaG9yQXhpcy5kb21haW5bc10scltpXT4wJiYocltpXSs9bCksZS50aXRsZS50ZXh0IT09aC5fZGZsdFRpdGxlW2RdJiYocltpXSs9ZS50aXRsZS5mb250LnNpemUpLCJ4Ij09PWQmJmMud2lkdGg+MCl7dmFyIGY9Yy5yaWdodC0oZS5fb2Zmc2V0K2UuX2xlbmd0aCk7Zj4wJiYoci54PTEsci5yPWYpO3ZhciBwPWUuX29mZnNldC1jLmxlZnQ7cD4wJiYoci54PTAsci5sPXApfWVsc2UgaWYoInkiPT09ZCYmYy5oZWlnaHQ+MCl7dmFyIHY9Yy5ib3R0b20tKGUuX29mZnNldCtlLl9sZW5ndGgpO3Y+MCYmKHIueT0wLHIuYj12KTt2YXIgbT1lLl9vZmZzZXQtYy50b3A7bT4wJiYoci55PTEsci50PW0pfX1hLmF1dG9NYXJnaW4odCxKKGUpLHIpfSksci5za2lwVGl0bGV8fHR0JiZlLl9ib3VuZGluZ0JveCYmImJvdHRvbSI9PT1lLnNpZGV8fEcucHVzaChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG49dC5fZnVsbExheW91dCxpPWUuX2lkLGE9aS5jaGFyQXQoMCksbz1lLnRpdGxlLmZvbnQuc2l6ZTtpZigibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpcj1lLl9sYWJlbExlbmd0aDtlbHNle3I9MTArMS41Km8rKGUubGluZXdpZHRoP2UubGluZXdpZHRoLTE6MCl9dmFyIHMsbCx1LGgscD1YKHQsZSk7IngiPT09YT8obD1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsdT0idG9wIj09PWUuc2lkZT8tci1vKihlLnNob3d0aWNrbGFiZWxzPzE6MCk6citvKihlLnNob3d0aWNrbGFiZWxzPzEuNTouNSksdSs9cCk6KHU9ZS5fb2Zmc2V0K2UuX2xlbmd0aC8yLGw9InJpZ2h0Ij09PWUuc2lkZT9yK28qKGUuc2hvd3RpY2tsYWJlbHM/MTouNSk6LXItbyooZS5zaG93dGlja2xhYmVscz8uNTowKSxsKz1wLHM9e3JvdGF0ZToiLTkwIixvZmZzZXQ6MH0pO2lmKCJtdWx0aWNhdGVnb3J5IiE9PWUudHlwZSl7dmFyIGQ9ZS5fc2VsZWN0aW9uc1tlLl9pZCsidGljayJdO2lmKGg9e3NlbGVjdGlvbjpkLHNpZGU6ZS5zaWRlfSxkJiZkLm5vZGUoKSYmZC5ub2RlKCkucGFyZW50Tm9kZSl7dmFyIGc9Zi5nZXRUcmFuc2xhdGUoZC5ub2RlKCkucGFyZW50Tm9kZSk7aC5vZmZzZXRMZWZ0PWcueCxoLm9mZnNldFRvcD1nLnl9fXJldHVybiBjLmRyYXcodCxpKyJ0aXRsZSIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZTplLl9uYW1lKyIudGl0bGUudGV4dCIscGxhY2Vob2xkZXI6bi5fZGZsdFRpdGxlW2FdLGF2b2lkOmgsdHJhbnNmb3JtOnMsYXR0cmlidXRlczp7eDpsLHk6dSwidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pfSh0LGUpfSkscy5zeW5jT3JBc3luYyhHKX1mdW5jdGlvbiBldCh0LGUpe3RbMF09TWF0aC5taW4odFswXSxlWzBdKSx0WzFdPU1hdGgubWF4KHRbMV0sZVsxXSl9fSxBLmdldFRpY2tTaWducz1mdW5jdGlvbih0KXt2YXIgZT10Ll9pZC5jaGFyQXQoMCkscj17eDoidG9wIix5OiJyaWdodCJ9W2VdLG49dC5zaWRlPT09cj8xOi0xLGk9Wy0xLDEsbiwtbl07cmV0dXJuImluc2lkZSIhPT10LnRpY2tzPT0oIngiPT09ZSkmJihpPWkubWFwKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpLGl9LEEubWFrZVRyYW5zRm49ZnVuY3Rpb24odCl7dmFyIGU9dC5faWQuY2hhckF0KDApLHI9dC5fb2Zmc2V0O3JldHVybiJ4Ij09PWU/ZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhyK3QubDJwKGUueCkpKyIsMCkifTpmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisocit0LmwycChlLngpKSsiKSJ9fSxBLm1ha2VUaWNrUGF0aD1mdW5jdGlvbih0LGUscixuKXtuPXZvaWQgMCE9PW4/bjp0LnRpY2tsZW47dmFyIGk9dC5faWQuY2hhckF0KDApLGE9KHQubGluZXdpZHRofHwxKS8yO3JldHVybiJ4Ij09PWk/Ik0wLCIrKGUrYSpyKSsidiIrbipyOiJNIisoZSthKnIpKyIsMGgiK24qcn0sQS5tYWtlTGFiZWxGbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2lkLmNoYXJBdCgwKSxhPSJib3VuZGFyaWVzIiE9PXQudGlja3NvbiYmIm91dHNpZGUiPT09dC50aWNrcyxvPTAsbD0wO2lmKGEmJihvKz10LnRpY2tsZW4pLHImJiJvdXRzaWRlIj09PXQudGlja3Mpe3ZhciBjPXMuZGVnMnJhZChyKTtvPXQudGlja2xlbipNYXRoLmNvcyhjKSsxLGw9dC50aWNrbGVuKk1hdGguc2luKGMpfXQuc2hvd3RpY2tsYWJlbHMmJihhfHx0LnNob3dsaW5lKSYmKG8rPS4yKnQudGlja2ZvbnQuc2l6ZSk7dmFyIHUsZixoLHAsZD17bGFiZWxTdGFuZG9mZjpvKz0odC5saW5ld2lkdGh8fDEpLzIsbGFiZWxTaGlmdDpsfTtyZXR1cm4ieCI9PT1uPyhwPSJib3R0b20iPT09dC5zaWRlPzE6LTEsdT1sKnAsZj1lK28qcCxoPSJib3R0b20iPT09dC5zaWRlPzE6LS4yLGQueEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K3V9LGQueUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K2YrdC5mb250U2l6ZSpofSxkLmFuY2hvckZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkoZSkmJjAhPT1lJiYxODAhPT1lP2UqcDwwPyJlbmQiOiJzdGFydCI6Im1pZGRsZSJ9LGQuaGVpZ2h0Rm49ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPC02MHx8cj42MD8tLjUqbjoidG9wIj09PXQuc2lkZT8tbjowfSk6InkiPT09biYmKHA9InJpZ2h0Ij09PXQuc2lkZT8xOi0xLHU9byxmPS1sKnAsaD05MD09PU1hdGguYWJzKHQudGlja2FuZ2xlKT8uNTowLGQueEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K2UrKHUrdC5mb250U2l6ZSpoKSpwfSxkLnlGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keStmK3QuZm9udFNpemUqa30sZC5hbmNob3JGbj1mdW5jdGlvbihlLHIpe3JldHVybiBpKHIpJiY5MD09PU1hdGguYWJzKHIpPyJtaWRkbGUiOiJyaWdodCI9PT10LnNpZGU/InN0YXJ0IjoiZW5kIn0sZC5oZWlnaHRGbj1mdW5jdGlvbihlLHIsbil7cmV0dXJuKHIqPSJsZWZ0Ij09PXQuc2lkZT8xOi0xKTwtMzA/LW46cjwzMD8tLjUqbjowfSksZH0sQS5kcmF3VGlja3M9ZnVuY3Rpb24odCxlLHIpe3I9cnx8e307dmFyIG49ZS5faWQrInRpY2siLGk9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGUudGlja3M/ci52YWxzOltdLFcpO2kuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgidGlja3MiLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLmNhbGwodS5zdHJva2UsZS50aWNrY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGYuY3Jpc3BSb3VuZCh0LGUudGlja3dpZHRoLDEpKyJweCIpLmF0dHIoImQiLHIucGF0aCksaS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbil9LEEuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIpe3I9cnx8e307dmFyIG49ZS5faWQrImdyaWQiLGk9ci52YWxzLGE9ci5jb3VudGVyQXhpcztpZighMT09PWUuc2hvd2dyaWQpaT1bXTtlbHNlIGlmKGEmJkEuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxhKSlmb3IodmFyIG89ImFycmF5Ij09PWUudGlja21vZGUscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLng7aWYobz8hbDpNYXRoLmFicyhsKTxlLmR0aWNrLzEwMCl7aWYoaT1pLnNsaWNlKDAscykuY29uY2F0KGkuc2xpY2UocysxKSksIW8pYnJlYWs7cy0tfX12YXIgYz1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoaSxXKTtjLmV4aXQoKS5yZW1vdmUoKSxjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLGUuX2d3PWYuY3Jpc3BSb3VuZCh0LGUuZ3JpZHdpZHRoLDEpLGMuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pLmF0dHIoImQiLHIucGF0aCkuY2FsbCh1LnN0cm9rZSxlLmdyaWRjb2xvcnx8IiNkZGQiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLl9ndysicHgiKSwiZnVuY3Rpb24iPT10eXBlb2Ygci5wYXRoJiZjLmF0dHIoImQiLHIucGF0aCl9LEEuZHJhd1plcm9MaW5lPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHI7dmFyIG49ZS5faWQrInpsIixpPUEuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxyLmNvdW50ZXJBeGlzKSxhPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShpP1t7eDowLGlkOmUuX2lkfV06W10pO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgiemwiLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLmVhY2goZnVuY3Rpb24oKXtyLmxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gUy5pZFNvcnQodC5pZCxlLmlkKX0pfSksYS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKS5jYWxsKHUuc3Ryb2tlLGUuemVyb2xpbmVjb2xvcnx8dS5kZWZhdWx0TGluZSkuc3R5bGUoInN0cm9rZS13aWR0aCIsZi5jcmlzcFJvdW5kKHQsZS56ZXJvbGluZXdpZHRoLGUuX2d3fHwxKSsicHgiKX0sQS5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBhPWUuX2lkLG89YS5jaGFyQXQoMCksYz1yLmNsc3x8YSsidGljayIsdT1yLnZhbHMsaD1yLmxhYmVsRm5zLHA9ci5zZWNvbmRhcnk/MDplLnRpY2thbmdsZSxkPShlLl90aWNrQW5nbGVzfHx7fSlbY10sZz1yLmxheWVyLnNlbGVjdEFsbCgiZy4iK2MpLmRhdGEoZS5zaG93dGlja2xhYmVscz91OltdLFcpLHY9W107ZnVuY3Rpb24gbSh0LGUpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxvPWEuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIikscz1oLmFuY2hvckZuKHQsZSksYz1yLnRyYW5zRm4uY2FsbChhLm5vZGUoKSx0KSsoaShlKSYmMCE9K2U/IiByb3RhdGUoIitlKyIsIitoLnhGbih0KSsiLCIrKGgueUZuKHQpLXQuZm9udFNpemUvMikrIikiOiIiKSx1PWwubGluZUNvdW50KGEpLHA9VCp0LmZvbnRTaXplLGQ9aC5oZWlnaHRGbih0LGkoZSk/K2U6MCwodS0xKSpwKTtpZihkJiYoYys9IiB0cmFuc2xhdGUoMCwgIitkKyIpIiksby5lbXB0eSgpKWEuc2VsZWN0KCJ0ZXh0IikuYXR0cih7dHJhbnNmb3JtOmMsInRleHQtYW5jaG9yIjpzfSk7ZWxzZXt2YXIgZz1mLmJCb3goby5ub2RlKCkpLndpZHRoKntlbmQ6LS41LHN0YXJ0Oi41fVtzXTtvLmF0dHIoInRyYW5zZm9ybSIsYysoZz8idHJhbnNsYXRlKCIrZysiLDApIjoiIikpfX0pfWcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGMsMSkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9dC5fcHJvbWlzZXMubGVuZ3RoO3IuY2FsbChsLnBvc2l0aW9uVGV4dCxoLnhGbihlKSxoLnlGbihlKSkuY2FsbChmLmZvbnQsZS5mb250LGUuZm9udFNpemUsZS5mb250Q29sb3IpLnRleHQoZS50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLHQuX3Byb21pc2VzW2ldP3YucHVzaCh0Ll9wcm9taXNlcy5wb3AoKS50aGVuKGZ1bmN0aW9uKCl7bShyLHApfSkpOm0ocixwKX0pLGcuZXhpdCgpLnJlbW92ZSgpLHIucmVwb3NpdGlvbk9uVXBkYXRlJiZnLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IikuY2FsbChsLnBvc2l0aW9uVGV4dCxoLnhGbih0KSxoLnlGbih0KSl9KSxtKGcsZHx8cCksZS5fc2VsZWN0aW9ucyYmKGUuX3NlbGVjdGlvbnNbY109Zyk7dmFyIHk9cy5zeW5jT3JBc3luYyhbZnVuY3Rpb24oKXtyZXR1cm4gdi5sZW5ndGgmJlByb21pc2UuYWxsKHYpfSxmdW5jdGlvbigpe20oZyxwKTt2YXIgdD1udWxsO2lmKHUubGVuZ3RoJiYieCI9PT1vJiYhaShwKSYmKCJsb2ciIT09ZS50eXBlfHwiRCIhPT1TdHJpbmcoZS5kdGljaykuY2hhckF0KDApKSl7dD0wO3ZhciBuLGE9MCxsPVtdO2lmKGcuZWFjaChmdW5jdGlvbih0KXthPU1hdGgubWF4KGEsdC5mb250U2l6ZSk7dmFyIHI9ZS5sMnAodC54KSxuPSQodGhpcyksaT1mLmJCb3gobi5ub2RlKCkpO2wucHVzaCh7dG9wOjAsYm90dG9tOjEwLGhlaWdodDoxMCxsZWZ0OnItaS53aWR0aC8yLHJpZ2h0OnIraS53aWR0aC8yKzIsd2lkdGg6aS53aWR0aCsyfSl9KSwiYm91bmRhcmllcyIhPT1lLnRpY2tzb24mJiFlLnNob3dkaXZpZGVyc3x8ci5zZWNvbmRhcnkpe3ZhciBoPXUubGVuZ3RoLGQ9TWF0aC5hYnMoKHVbaC0xXS54LXVbMF0ueCkqZS5fbSkvKGgtMSk8Mi41KmF8fCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZTtmb3Iobj0wO248bC5sZW5ndGgtMTtuKyspaWYocy5iQm94SW50ZXJzZWN0KGxbbl0sbFtuKzFdKSl7dD1kPzkwOjMwO2JyZWFrfX1lbHNle3ZhciB2PTI7Zm9yKGUudGlja3MmJih2Kz1lLnRpY2t3aWR0aC8yKSxuPTA7bjxsLmxlbmd0aDtuKyspe3ZhciB5PXVbbl0ueGJuZCx4PWxbbl07aWYobnVsbCE9PXlbMF0mJngubGVmdC1lLmwycCh5WzBdKTx2fHxudWxsIT09eVsxXSYmZS5sMnAoeVsxXSkteC5yaWdodDx2KXt0PTkwO2JyZWFrfX19dCYmbShnLHQpfWUuX3RpY2tBbmdsZXMmJihlLl90aWNrQW5nbGVzW2NdPW51bGw9PT10P2kocCk/cDowOnQpfV0pO3JldHVybiB5JiZ5LnRoZW4mJnQuX3Byb21pc2VzLnB1c2goeSkseX0sQS5zaG91bGRTaG93WmVyb0xpbmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO3JldHVybiBuWzBdKm5bMV08PTAmJmUuemVyb2xpbmUmJigibGluZWFyIj09PWUudHlwZXx8Ii0iPT09ZS50eXBlKSYmZS5fZ3JpZFZhbHMubGVuZ3RoJiYoWihlLDApfHwhZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5fbWFpbkF4aXM7aWYoIWkpcmV0dXJuO3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1lLl9pZC5jaGFyQXQoMCkscz1BLmNvdW50ZXJMZXR0ZXIoZS5faWQpLGw9ZS5fb2Zmc2V0KyhNYXRoLmFicyhuWzBdKTxNYXRoLmFicyhuWzFdKT09KCJ4Ij09PW8pPzA6ZS5fbGVuZ3RoKTtmdW5jdGlvbiBjKHQpe2lmKCF0LnNob3dsaW5lfHwhdC5saW5ld2lkdGgpcmV0dXJuITE7dmFyIHI9TWF0aC5tYXgoKHQubGluZXdpZHRoK2UuemVyb2xpbmV3aWR0aCkvMiwxKTtmdW5jdGlvbiBuKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmTWF0aC5hYnModC1sKTxyfWlmKG4odC5fbWFpbkxpbmVQb3NpdGlvbil8fG4odC5fbWFpbk1pcnJvclBvc2l0aW9uKSlyZXR1cm4hMDt2YXIgaT10Ll9saW5lcG9zaXRpb25zfHx7fTtmb3IodmFyIGEgaW4gaSlpZihuKGlbYV1bMF0pfHxuKGlbYV1bMV0pKXJldHVybiEwfXZhciB1PWEuX3Bsb3RzW3IuX21haW5TdWJwbG90XTtpZighKHUubWFpbnBsb3RpbmZvfHx1KS5vdmVybGF5cy5sZW5ndGgpcmV0dXJuIGMocik7Zm9yKHZhciBmPUEubGlzdCh0LHMpLGg9MDtoPGYubGVuZ3RoO2grKyl7dmFyIHA9ZltoXTtpZihwLl9tYWluQXhpcz09PWkmJmMocCkpcmV0dXJuITB9fSh0LGUscixuKXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbERhdGEsbj1lLl9tYWluU3VicGxvdCxpPWUuX2lkLmNoYXJBdCgwKSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYoITA9PT1zLnZpc2libGUmJnMueGF4aXMrcy55YXhpcz09PW4pe2lmKChvLnRyYWNlSXMocywiYmFyIil8fCJ3YXRlcmZhbGwiPT09cy50eXBlKSYmcy5vcmllbnRhdGlvbj09PXt4OiJoIix5OiJ2In1baV0pcmV0dXJuITA7aWYocy5maWxsJiZzLmZpbGwuY2hhckF0KHMuZmlsbC5sZW5ndGgtMSk9PT1pKXJldHVybiEwfX1yZXR1cm4hMX0odCxlKSl9LEEuY2xpcEVuZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIFoodCxlLngpfSl9LEEuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BLmxpc3QodCwiIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uYXV0b21hcmdpbiYmYS5hbGxvd0F1dG9NYXJnaW4odCxKKG4pKSxvLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShuKSYmYS5hbGxvd0F1dG9NYXJnaW4odCxLKG4pKX19LEEuc3dhcD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1bXSxvPXQuX2Z1bGxEYXRhW2Vbcl1dLnhheGlzLHM9dC5fZnVsbERhdGFbZVtyXV0ueWF4aXM7aWYobyYmcyl7Zm9yKG49MDtuPGkubGVuZ3RoO24rKyktMT09PWlbbl0ueC5pbmRleE9mKG8pJiYtMT09PWlbbl0ueS5pbmRleE9mKHMpfHxhLnB1c2gobik7aWYoYS5sZW5ndGgpe3ZhciBsLGM9aVthWzBdXTtpZihhLmxlbmd0aD4xKWZvcihuPTE7bjxhLmxlbmd0aDtuKyspbD1pW2Fbbl1dLFEoYy54LGwueCksUShjLnksbC55KTtRKGMueCxbb10pLFEoYy55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfSh0LGUpLG49MDtuPHIubGVuZ3RoO24rKyl0dCh0LHJbbl0ueCxyW25dLnkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NjY1LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NzIsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzI0LCIuLi8uLi9wbG90cy9wbG90cyI6ODEwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2F1dG9yYW5nZSI6NzQ3LCIuL2F4aXNfYXV0b3R5cGUiOjc0OSwiLi9heGlzX2lkcyI6NzUxLCIuL2NsZWFuX3RpY2tzIjo3NTMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MCwiLi9zZXRfY29udmVydCI6NzY2LGQzOjE1NCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDc0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIShyPXJ8fHt9KS5ub011bHRpQ2F0ZWdvcnkmJihvPXQsaS5pc0FycmF5T3JUeXBlZEFycmF5KG9bMF0pJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkob1sxXSkpPyJtdWx0aWNhdGVnb3J5IjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLGE9MCxvPTAscz17fSxsPTA7bDx0Lmxlbmd0aDtsKz1yKXt2YXIgYz10W01hdGgucm91bmQobCldLHU9U3RyaW5nKGMpO3NbdV18fChzW3VdPTEsaS5pc0RhdGVUaW1lKGMsZSkmJihhKz0xKSxuKGMpJiYobys9MSkpfXJldHVybiBhPjIqb30odCxlKT8iZGF0ZSI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU1hdGgubWF4KDEsKHQubGVuZ3RoLTEpLzFlMykscj0wLG49MCxvPXt9LHM9MDtzPHQubGVuZ3RoO3MrPWUpe3ZhciBsPXRbTWF0aC5yb3VuZChzKV0sYz1TdHJpbmcobCk7b1tjXXx8KG9bY109MSwiYm9vbGVhbiI9PXR5cGVvZiBsP24rKzppLmNsZWFuTnVtYmVyKGwpIT09YT9yKys6InN0cmluZyI9PXR5cGVvZiBsJiZuKyspfXJldHVybiBuPjIqcn0odCk/ImNhdGVnb3J5IjpmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZihuKHRbZV0pKXJldHVybiEwO3JldHVybiExfSh0KT8ibGluZWFyIjoiLSI7dmFyIG99fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsImZhc3QtaXNudW1lcmljIjoyMjF9XSw3NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIikscz10KCIuL3RpY2tfbWFya19kZWZhdWx0cyIpLGw9dCgiLi90aWNrX2xhYmVsX2RlZmF1bHRzIiksYz10KCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksdT10KCIuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLGY9dCgiLi9zZXRfY29udmVydCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoLHApe3ZhciBkPWgubGV0dGVyLGc9aC5mb250fHx7fSx2PWguc3Bsb21TdGFzaHx8e30sbT1yKCJ2aXNpYmxlIiwhaC5jaGVhdGVyb25seSkseT1lLnR5cGU7ImRhdGUiPT09eSYmbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIsaC5jYWxlbmRhcik7aWYoZihlLHApLCFyKCJhdXRvcmFuZ2UiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSl8fCJsaW5lYXIiIT09eSYmIi0iIT09eXx8cigicmFuZ2Vtb2RlIikscigicmFuZ2UiKSxlLmNsZWFuUmFuZ2UoKSxjKHQsZSxyLGgpLCJjYXRlZ29yeSI9PT15fHxoLm5vSG92ZXJ8fHIoImhvdmVyZm9ybWF0IiksIW0pcmV0dXJuIGU7dmFyIHg9cigiY29sb3IiKSxiPXghPT1hLmNvbG9yLmRmbHQ/eDpnLmNvbG9yO3IoInRpdGxlLnRleHQiLHYubGFiZWx8fHAuX2RmbHRUaXRsZVtkXSksaS5jb2VyY2VGb250KHIsInRpdGxlLmZvbnQiLHtmYW1pbHk6Zy5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipnLnNpemUpLGNvbG9yOmJ9KSxvKHQsZSxyLHkpLGwodCxlLHIseSxoKSxzKHQsZSxyLGgpLHUodCxlLHIse2RmbHRDb2xvcjp4LGJnQ29sb3I6aC5iZ0NvbG9yLHNob3dHcmlkOmguc2hvd0dyaWQsYXR0cmlidXRlczphfSksKGUuc2hvd2xpbmV8fGUudGlja3MpJiZyKCJtaXJyb3IiKSxoLmF1dG9tYXJnaW4mJnIoImF1dG9tYXJnaW4iKTt2YXIgXyx3PSJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZTtoLm5vVGlja3Nvbnx8ImNhdGVnb3J5IiE9PWUudHlwZSYmIXd8fCFlLnRpY2tzJiYhZS5zaG93Z3JpZHx8KHcmJihfPSJib3VuZGFyaWVzIikscigidGlja3NvbiIsXykpO3cmJihyKCJzaG93ZGl2aWRlcnMiKSYmKHIoImRpdmlkZXJjb2xvciIpLHIoImRpdmlkZXJ3aWR0aCIpKSk7cmV0dXJuIGV9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo3NTIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MCwiLi9saW5lX2dyaWRfZGVmYXVsdHMiOjc2MiwiLi9zZXRfY29udmVydCI6NzY2LCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc2NywiLi90aWNrX21hcmtfZGVmYXVsdHMiOjc2OCwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3Njl9XSw3NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vY29uc3RhbnRzIik7ci5pZDJuYW1lPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5tYXRjaChpLkFYX0lEX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cigxKTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksdC5jaGFyQXQoMCkrImF4aXMiK2V9fSxyLm5hbWUyaWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaChpLkFYX05BTUVfUEFUVEVSTikpe3ZhciBlPXQuc3Vic3RyKDUpO3JldHVybiIxIj09PWUmJihlPSIiKSx0LmNoYXJBdCgwKStlfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQsZSl7aWYodC5tYXRjaChpLkFYX0lEX1BBVFRFUk4pJiYoIWV8fHQuY2hhckF0KDApPT09ZSkpe3ZhciByPXQuc3Vic3RyKDEpLnJlcGxhY2UoL14wKy8sIiIpO3JldHVybiIxIj09PXImJihyPSIiKSx0LmNoYXJBdCgwKStyfX0sci5saXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Ll9mdWxsTGF5b3V0O2lmKCFpKXJldHVybltdO3ZhciBhLG89ci5saXN0SWRzKHQsZSkscz1uZXcgQXJyYXkoby5sZW5ndGgpO2ZvcihhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV07c1thXT1pW2wuY2hhckF0KDApKyJheGlzIitsLnN1YnN0cigxKV19aWYoIW4pe3ZhciBjPWkuX3N1YnBsb3RzLmdsM2R8fFtdO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWlbY1thXV07ZT9zLnB1c2godVtlKyJheGlzIl0pOnMucHVzaCh1LnhheGlzLHUueWF4aXMsdS56YXhpcyl9fXJldHVybiBzfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKCFyKXJldHVybltdO3ZhciBuPXIuX3N1YnBsb3RzO3JldHVybiBlP25bZSsiYXhpcyJdOm4ueGF4aXMuY29uY2F0KG4ueWF4aXMpfSxyLmdldEZyb21JZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtyZXR1cm4ieCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLywiIik6InkiPT09biYmKGU9ZS5yZXBsYWNlKC94WzAtOV0qLywiIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1udWxsO2lmKG4udHJhY2VJcyhlLCJnbDNkIikpe3ZhciBzPWUuc2NlbmU7InNjZW5lIj09PXMuc3Vic3RyKDAsNSkmJihvPWFbc11baSsiYXhpcyJdKX1lbHNlIG89ci5nZXRGcm9tSWQodCxlW2krImF4aXMiXXx8aSk7cmV0dXJuIG99LHIuaWRTb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jaGFyQXQoMCksbj1lLmNoYXJBdCgwKTtyZXR1cm4gciE9PW4/cj5uPzE6LTE6Kyh0LnN1YnN0cigxKXx8MSktKyhlLnN1YnN0cigxKXx8MSl9LHIuZ2V0QXhpc0dyb3VwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2F4aXNNYXRjaEdyb3VwcyxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKHJbbl1bZV0pcmV0dXJuImciK259cmV0dXJuIGV9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vY29uc3RhbnRzIjo3NTR9XSw3NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJjYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBpLGE9dC5jYXRlZ29yeWFycmF5LG89QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MDtvJiYoaT0iYXJyYXkiKTt2YXIgcyxsPXIoImNhdGVnb3J5b3JkZXIiLGkpOyJhcnJheSI9PT1sJiYocz1yKCJjYXRlZ29yeWFycmF5IikpLG98fCJhcnJheSIhPT1sfHwobD1lLmNhdGVnb3J5b3JkZXI9InRyYWNlIiksInRyYWNlIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9W106ImFycmF5Ij09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9cy5zbGljZSgpOihzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9ZS5kYXRhQXR0cnx8dC5faWQuY2hhckF0KDApLG89e307aWYoZS5heERhdGEpcj1lLmF4RGF0YTtlbHNlIGZvcihyPVtdLG49MDtuPGUuZGF0YS5sZW5ndGg7bisrKXt2YXIgcz1lLmRhdGFbbl07c1thKyJheGlzIl09PT10Ll9pZCYmci5wdXNoKHMpfWZvcihuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBsPXJbbl1bYV07Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGM9bFtpXTtudWxsIT1jJiYob1tjXT0xKX19cmV0dXJuIE9iamVjdC5rZXlzKG8pfShlLG4pLnNvcnQoKSwiY2F0ZWdvcnkgYXNjZW5kaW5nIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9czoiY2F0ZWdvcnkgZGVzY2VuZGluZyI9PT1sJiYoZS5faW5pdGlhbENhdGVnb3JpZXM9cy5yZXZlcnNlKCkpKX19fSx7fV0sNzUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVEQVk7ci5kdGljaz1mdW5jdGlvbih0LGUpe3ZhciByPSJsb2ciPT09ZSxpPSJkYXRlIj09PWUsbz0iY2F0ZWdvcnkiPT09ZSxzPWk/YToxO2lmKCF0KXJldHVybiBzO2lmKG4odCkpcmV0dXJuKHQ9TnVtYmVyKHQpKTw9MD9zOm8/TWF0aC5tYXgoMSxNYXRoLnJvdW5kKHQpKTppP01hdGgubWF4KC4xLHQpOnQ7aWYoInN0cmluZyIhPXR5cGVvZiB0fHwhaSYmIXIpcmV0dXJuIHM7dmFyIGw9dC5jaGFyQXQoMCksYz10LnN1YnN0cigxKTtyZXR1cm4oYz1uKGMpP051bWJlcihjKTowKTw9MHx8IShpJiYiTSI9PT1sJiZjPT09TWF0aC5yb3VuZChjKXx8ciYmIkwiPT09bHx8ciYmIkQiPT09bCYmKDE9PT1jfHwyPT09YykpP3M6dH0sci50aWNrMD1mdW5jdGlvbih0LGUscixhKXtyZXR1cm4iZGF0ZSI9PT1lP2kuY2xlYW5EYXRlKHQsaS5kYXRlVGljazAocikpOiJEMSIhPT1hJiYiRDIiIT09YT9uKHQpP051bWJlcih0KTowOnZvaWQgMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDc1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvcmVnZXgiKS5jb3VudGVyO2UuZXhwb3J0cz17aWRSZWdleDp7eDpuKCJ4IikseTpuKCJ5Iil9LGF0dHJSZWdleDpuKCJbeHldYXhpcyIpLHhBeGlzTWF0Y2g6bigieGF4aXMiKSx5QXhpc01hdGNoOm4oInlheGlzIiksQVhfSURfUEFUVEVSTjovXlt4eXpdWzAtOV0qJC8sQVhfTkFNRV9QQVRURVJOOi9eW3h5el1heGlzWzAtOV0qJC8sU1VCUExPVF9QQVRURVJOOi9eeChbMC05XSopeShbMC05XSopJC8sTUlORFJBRzo4LE1JTlNFTEVDVDoxMixNSU5aT09NOjIwLERSQUdHRVJTSVpFOjIwLEJFTkRQWDoxLjUsUkVEUkFXREVMQVk6NTAsU0VMRUNUREVMQVk6MTAwLFNFTEVDVElEOiItc2VsZWN0IixERkxUUkFOR0VYOlstMSw2XSxERkxUUkFOR0VZOlstMSw0XSx0cmFjZUxheWVyQ2xhc3NlczpbImhlYXRtYXBsYXllciIsImNvbnRvdXJjYXJwZXRsYXllciIsImNvbnRvdXJsYXllciIsIndhdGVyZmFsbGxheWVyIiwiYmFybGF5ZXIiLCJjYXJwZXRsYXllciIsInZpb2xpbmxheWVyIiwiYm94bGF5ZXIiLCJvaGxjbGF5ZXIiLCJzY2F0dGVyY2FycGV0bGF5ZXIiLCJzY2F0dGVybGF5ZXIiXSxsYXllclZhbHVlMmxheWVyQ2xhc3M6eyJhYm92ZSB0cmFjZXMiOiJhYm92ZSIsImJlbG93IHRyYWNlcyI6ImJlbG93In19fSx7Ii4uLy4uL2xpYi9yZWdleCI6NzE2fV0sNzU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9heGlzX2lkcyIpLmlkMm5hbWUsYT10KCIuL3NjYWxlX3pvb20iKSxvPXQoIi4vYXV0b3JhbmdlIikubWFrZVBhZEZuLHM9dCgiLi9hdXRvcmFuZ2UiKS5jb25jYXRFeHRyZW1lcyxsPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5BTE1PU1RfRVFVQUwsYz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtmdW5jdGlvbiB1KHQsZSxyLG4sYSl7dmFyIG8scyxsLGMsdT0icmFuZ2UiIT09YSxmPW5baShlKV0udHlwZSxoPVtdO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspaWYoKGw9cltzXSkhPT1lJiYoYz1uW2kobCldKS50eXBlPT09ZilpZihjLmZpeGVkcmFuZ2Upe2lmKHUmJmMuYW5jaG9yKXtuW2koYy5hbmNob3IpXS5maXhlZHJhbmdlJiZoLnB1c2gobCl9fWVsc2UgaC5wdXNoKGwpO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaWYodFtvXVtlXSl7dmFyIHA9dFtvXSxkPVtdO2ZvcihzPTA7czxoLmxlbmd0aDtzKyspcFtsPWhbc11dfHxkLnB1c2gobCk7cmV0dXJue2xpbmthYmxlQXhlczpkLHRoaXNHcm91cDpwfX1yZXR1cm57bGlua2FibGVBeGVzOmgsdGhpc0dyb3VwOm51bGx9fWZ1bmN0aW9uIGYodCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjO251bGw9PT1lPygoZT17fSlbcl09MSxjPXQubGVuZ3RoLHQucHVzaChlKSk6Yz10LmluZGV4T2YoZSk7dmFyIHU9T2JqZWN0LmtleXMoZSk7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylpZihzPXRbYV0sYSE9PWMmJnNbbl0pe3ZhciBmPXNbbl07Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzW2w9dVtvXV09ZippKmVbbF07cmV0dXJuIHZvaWQgdC5zcGxpY2UoYywxKX1pZigxIT09aSlmb3Iobz0wO288dS5sZW5ndGg7bysrKWVbdVtvXV0qPWk7ZVtuXT0xfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj10Ll9pbnB1dERvbWFpbixuPWNbdC5jb25zdHJhaW50b3dhcmRdLGk9clswXSsoclsxXS1yWzBdKSpuO3QuZG9tYWluPXQuX2lucHV0LmRvbWFpbj1baSsoclswXS1pKS9lLGkrKHJbMV0taSkvZV0sdC5zZXRTY2FsZSgpfXIuaGFuZGxlQ29uc3RyYWludERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG8scyxsLGMsaD1hLl9heGlzQ29uc3RyYWludEdyb3VwcyxwPWEuX2F4aXNNYXRjaEdyb3VwcyxkPWUuX2lkLGc9ZC5jaGFyQXQoMCksdj0oKGEuX3NwbG9tQXhlc3x8e30pW2ddfHx7fSlbZF18fHt9LG09ZS5faWQseT1tLmNoYXJBdCgwKSx4PXIoImNvbnN0cmFpbiIpO2lmKG4uY29lcmNlKHQsZSx7Y29uc3RyYWludG93YXJkOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6IngiPT09eT9bImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdOlsiYm90dG9tIiwibWlkZGxlIiwidG9wIl0sZGZsdDoieCI9PT15PyJjZW50ZXIiOiJtaWRkbGUifX0sImNvbnN0cmFpbnRvd2FyZCIpLCF0Lm1hdGNoZXMmJiF2Lm1hdGNoZXN8fGUuZml4ZWRyYW5nZXx8KHM9dShwLG0saSxhKSxvPW4uY29lcmNlKHQsZSx7bWF0Y2hlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMubGlua2FibGVBeGVzfHxbXSxkZmx0OnYubWF0Y2hlc319LCJtYXRjaGVzIikpLG98fCF0LnNjYWxlYW5jaG9yfHxlLmZpeGVkcmFuZ2UmJiJkb21haW4iIT09eHx8KGM9dShoLG0saSxhLHgpLGw9bi5jb2VyY2UodCxlLHtzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmMubGlua2FibGVBeGVzfHxbXX19LCJzY2FsZWFuY2hvciIpKSxvPyhkZWxldGUgZS5jb25zdHJhaW4sZihwLHMudGhpc0dyb3VwLG0sbywxKSk6LTEhPT1pLmluZGV4T2YodC5tYXRjaGVzKSYmbi53YXJuKCJpZ25vcmVkICIrZS5fbmFtZSsnLm1hdGNoZXM6ICInK3QubWF0Y2hlcysnIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciBiZWNhdXNlIHRoZSB0YXJnZXQgYXhpcyBoYXMgZml4ZWQgcmFuZ2UuJyksbCl7dmFyIGI9cigic2NhbGVyYXRpbyIpO2J8fChiPWUuc2NhbGVyYXRpbz0xKSxmKGgsYy50aGlzR3JvdXAsbSxsLGIpfWVsc2UtMSE9PWkuaW5kZXhPZih0LnNjYWxlYW5jaG9yKSYmbi53YXJuKCJpZ25vcmVkICIrZS5fbmFtZSsnLnNjYWxlYW5jaG9yOiAiJyt0LnNjYWxlYW5jaG9yKyciIHRvIGF2b2lkIGVpdGhlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBwb3NzaWJseSBpbmNvbnNpc3RlbnQgc2NhbGVyYXRpb3MsIG9yIGJlY2F1c2UgdGhlIHRhcmdldCBheGlzIGhhcyBmaXhlZCByYW5nZSBvciB0aGlzIGF4aXMgZGVjbGFyZXMgYSAqbWF0Y2hlcyogY29uc3RyYWludC4nKX0sci5lbmZvcmNlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixjLHUsZixwLGQ9dC5fZnVsbExheW91dCxnPWQuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoZT0wO2U8Zy5sZW5ndGg7ZSsrKXt2YXIgdj1nW2VdLG09T2JqZWN0LmtleXModikseT0xLzAseD0wLGI9MS8wLF89e30sdz17fSxrPSExO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspd1tuPW1bcl1dPWM9ZFtpKG4pXSxjLl9pbnB1dERvbWFpbj9jLmRvbWFpbj1jLl9pbnB1dERvbWFpbi5zbGljZSgpOmMuX2lucHV0RG9tYWluPWMuZG9tYWluLnNsaWNlKCksYy5faW5wdXRSYW5nZXx8KGMuX2lucHV0UmFuZ2U9Yy5yYW5nZS5zbGljZSgpKSxjLnNldFNjYWxlKCksX1tuXT11PU1hdGguYWJzKGMuX20pL3Zbbl0seT1NYXRoLm1pbih5LHUpLCJkb21haW4iIT09Yy5jb25zdHJhaW4mJmMuX2NvbnN0cmFpbnRTaHJpbmthYmxlfHwoYj1NYXRoLm1pbihiLHUpKSxkZWxldGUgYy5fY29uc3RyYWludFNocmlua2FibGUseD1NYXRoLm1heCh4LHUpLCJkb21haW4iPT09Yy5jb25zdHJhaW4mJihrPSEwKTtpZighKHk+bCp4KXx8aylmb3Iocj0wO3I8bS5sZW5ndGg7cisrKWlmKHU9X1tuPW1bcl1dLGY9KGM9d1tuXSkuY29uc3RyYWluLHUhPT1ifHwiZG9tYWluIj09PWYpaWYocD11L2IsInJhbmdlIj09PWYpYShjLHApO2Vsc2V7dmFyIFQ9Yy5faW5wdXREb21haW4sQT0oYy5kb21haW5bMV0tYy5kb21haW5bMF0pLyhUWzFdLVRbMF0pLE09KGMucjJsKGMucmFuZ2VbMV0pLWMucjJsKGMucmFuZ2VbMF0pKS8oYy5yMmwoYy5faW5wdXRSYW5nZVsxXSktYy5yMmwoYy5faW5wdXRSYW5nZVswXSkpO2lmKChwLz1BKSpNPDEpe2MuZG9tYWluPWMuX2lucHV0LmRvbWFpbj1ULnNsaWNlKCksYShjLHApO2NvbnRpbnVlfWlmKE08MSYmKGMucmFuZ2U9Yy5faW5wdXQucmFuZ2U9Yy5faW5wdXRSYW5nZS5zbGljZSgpLHAqPU0pLGMuYXV0b3JhbmdlKXt2YXIgUz1jLnIybChjLnJhbmdlWzBdKSxFPWMucjJsKGMucmFuZ2VbMV0pLEM9KFMrRSkvMixMPUMsej1DLE89TWF0aC5hYnMoRS1DKSxJPUMtTypwKjEuMDAwMSxEPUMrTypwKjEuMDAwMSxQPW8oYyk7aChjLHApO3ZhciBSLEYsQj1NYXRoLmFicyhjLl9tKSxOPXModCxjKSxqPU4ubWluLFY9Ti5tYXg7Zm9yKEY9MDtGPGoubGVuZ3RoO0YrKykoUj1qW0ZdLnZhbC1QKGpbRl0pL0IpPkkmJlI8TCYmKEw9Uik7Zm9yKEY9MDtGPFYubGVuZ3RoO0YrKykoUj1WW0ZdLnZhbCtQKFZbRl0pL0IpPEQmJlI+eiYmKHo9Uik7cC89KHotTCkvKDIqTyksTD1jLmwycihMKSx6PWMubDJyKHopLGMucmFuZ2U9Yy5faW5wdXQucmFuZ2U9UzxFP1tMLHpdOlt6LExdfWgoYyxwKX19fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSl7aWYoZS5faW5wdXREb21haW4pe2Zvcih2YXIgcj0hMSxuPWUuX2lkLGk9dC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsYT0wO2E8aS5sZW5ndGg7YSsrKWlmKGlbYV1bbl0pe3I9ITA7YnJlYWt9ciYmImRvbWFpbiI9PT1lLmNvbnN0cmFpbnx8KGUuX2lucHV0LmRvbWFpbj1lLmRvbWFpbj1lLl9pbnB1dERvbWFpbixkZWxldGUgZS5faW5wdXREb21haW4pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuL2F1dG9yYW5nZSI6NzQ3LCIuL2F4aXNfaWRzIjo3NTEsIi4vc2NhbGVfem9vbSI6NzY0fV0sNzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaD10KCIuL2F4ZXMiKSxwPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxkPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxnPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX1RMLHY9dCgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksbT10KCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMseT10KCIuLi9wbG90cyIpLHg9dCgiLi9heGlzX2lkcyIpLmdldEZyb21JZCxiPXQoIi4vc2VsZWN0IikucHJlcFNlbGVjdCxfPXQoIi4vc2VsZWN0IikuY2xlYXJTZWxlY3Qsdz10KCIuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2ssaz10KCIuL3NjYWxlX3pvb20iKSxUPXQoIi4vY29uc3RhbnRzIiksQT1ULk1JTkRSQUcsTT1ULk1JTlpPT00sUz0hMDtmdW5jdGlvbiBFKHQsZSxyLG4pe3ZhciBpPXMuZW5zdXJlU2luZ2xlKHQuZHJhZ2xheWVyLGUscixmdW5jdGlvbihlKXtlLmNsYXNzZWQoImRyYWciLCEwKS5zdHlsZSh7ZmlsbDoidHJhbnNwYXJlbnQiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJkYXRhLXN1YnBsb3QiLHQuaWQpfSk7cmV0dXJuIGkuY2FsbChwLG4pLGkubm9kZSgpfWZ1bmN0aW9uIEModCxlLHIsaSxhLG8scyl7dmFyIGw9RSh0LCJyZWN0IixlLHIpO3JldHVybiBuLnNlbGVjdChsKS5jYWxsKHUuc2V0UmVjdCxpLGEsbyxzKSxsfWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVybiIifWZ1bmN0aW9uIHoodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtpZighby5maXhlZHJhbmdlKXt2YXIgcz1vLl9ybFswXSxsPW8uX3JsWzFdLXM7by5yYW5nZT1bby5sMnIocytsKmUpLG8ubDJyKHMrbCpyKV0sbltvLl9uYW1lKyIucmFuZ2VbMF0iXT1vLnJhbmdlWzBdLG5bby5fbmFtZSsiLnJhbmdlWzFdIl09by5yYW5nZVsxXX19aWYoaSYmaS5sZW5ndGgpe3ZhciBjPShlKygxLXIpKS8yO3ooaSxjLDEtYyxuLFtdKX19ZnVuY3Rpb24gTyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZml4ZWRyYW5nZXx8KG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV0pfX1mdW5jdGlvbiBJKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gRCh0LGUscixuLGkpe3JldHVybiB0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLnN0eWxlKHtmaWxsOmU+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcisiLCAiK24rIikiKS5hdHRyKCJkIixpKyJaIil9ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIHQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5zdHlsZSh7ZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MSxvcGFjaXR5OjB9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlKyIsICIrcisiKSIpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uIFIodCxlLHIsbixpLGEpe3QuYXR0cigiZCIsbisiTSIrci5sKyIsIityLnQrInYiK3IuaCsiaCIrci53KyJ2LSIrci5oKyJoLSIrci53KyJaIiksRih0LGUsaSxhKX1mdW5jdGlvbiBGKHQsZSxyLG4pe3J8fCh0LnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsbj4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxlLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSl9ZnVuY3Rpb24gQih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVycyIpLnJlbW92ZSgpfWZ1bmN0aW9uIE4odCl7UyYmdC5kYXRhJiZ0Ll9jb250ZXh0LnNob3dUaXBzJiYocy5ub3RpZmllcihzLl8odCwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXQiKSwibG9uZyIpLFM9ITEpfWZ1bmN0aW9uIGoodCl7cmV0dXJuImxhc3NvIj09PXR8fCJzZWxlY3QiPT09dH1mdW5jdGlvbiBWKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5taW4odC5iLXQudCx0LnItdC5sLE0pLzIpO3JldHVybiJNIisodC5sLTMuNSkrIiwiKyh0LnQtLjUrZSkrImgzdiIrLWUrImgiK2UrInYtM2gtIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQudC0uNStlKSsiaC0zdiIrLWUrImgiKy1lKyJ2LTNoIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQuYisuNS1lKSsiaC0zdiIrZSsiaCIrLWUrInYzaCIrKGUrMykrIlpNIisodC5sLTMuNSkrIiwiKyh0LmIrLjUtZSkrImgzdiIrZSsiaCIrZSsidjNoLSIrKGUrMykrIloifWZ1bmN0aW9uIFUodCxlLHIsbil7Zm9yKHZhciBpLGEsbyxsLGM9ITEsdT17fSxmPXt9LGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIHA9ZVtoXTtmb3IoaSBpbiByKWlmKHBbaV0pe2ZvcihvIGluIHApKCJ4Ij09PW8uY2hhckF0KDApP3I6bilbb118fCh1W29dPWkpO2ZvcihhIGluIG4pcFthXSYmKGM9ITApfWZvcihhIGluIG4paWYocFthXSlmb3IobCBpbiBwKSgieCI9PT1sLmNoYXJBdCgwKT9yOm4pW2xdfHwoZltsXT1hKX1jJiYocy5leHRlbmRGbGF0KHUsZiksZj17fSk7dmFyIGQ9e30sZz1bXTtmb3IobyBpbiB1KXt2YXIgdj14KHQsbyk7Zy5wdXNoKHYpLGRbdi5faWRdPXZ9dmFyIG09e30seT1bXTtmb3IobCBpbiBmKXt2YXIgYj14KHQsbCk7eS5wdXNoKGIpLG1bYi5faWRdPWJ9cmV0dXJue3hhSGFzaDpkLHlhSGFzaDptLHhheGVzOmcseWF4ZXM6eSx4TGlua3M6dSx5TGlua3M6Zixpc1N1YnBsb3RDb25zdHJhaW5lZDpjfX1mdW5jdGlvbiBxKHQsZSl7aWYoYSl7dmFyIHI9dm9pZCAwIT09dC5vbndoZWVsPyJ3aGVlbCI6Im1vdXNld2hlZWwiO3QuX29ud2hlZWwmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLHQuX29ud2hlZWwpLHQuX29ud2hlZWw9ZSx0LmFkZEV2ZW50TGlzdGVuZXIocixlLHtwYXNzaXZlOiExfSl9ZWxzZSB2b2lkIDAhPT10Lm9ud2hlZWw/dC5vbndoZWVsPWU6dm9pZCAwIT09dC5vbm1vdXNld2hlZWwmJih0Lm9ubW91c2V3aGVlbD1lKX1mdW5jdGlvbiBIKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX1lLmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKHQsZSxyLGEsYyxwLFMsRSl7dmFyIEYsRyxZLFcsWCxaLCQsSixLLFEsdHQsZXQscnQsbnQsaXQsYXQsb3Qsc3QsbHQsY3QsdXQsZnQ9dC5fZnVsbExheW91dC5fem9vbWxheWVyLGh0PVMrRT09PSJuc2V3IixwdD0xPT09KFMrRSkubGVuZ3RoO2Z1bmN0aW9uIGR0KCl7aWYoRj1lLnhheGlzLEc9ZS55YXhpcyxLPUYuX2xlbmd0aCxRPUcuX2xlbmd0aCwkPUYuX29mZnNldCxKPUcuX29mZnNldCwoWT17fSlbRi5faWRdPUYsKFc9e30pW0cuX2lkXT1HLFMmJkUpZm9yKHZhciByPWUub3ZlcmxheXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLnhheGlzO1lbaS5faWRdPWk7dmFyIGE9cltuXS55YXhpcztXW2EuX2lkXT1hfVg9SChZKSxaPUgoVykscnQ9TChYLEUpLG50PUwoWixTKSxpdD0hbnQmJiFydCx0dD1VKHQsdC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsWSxXKSxldD1VKHQsdC5fZnVsbExheW91dC5fYXhpc01hdGNoR3JvdXBzLFksVyksYXQ9RXx8dHQuaXNTdWJwbG90Q29uc3RyYWluZWR8fGV0LmlzU3VicGxvdENvbnN0cmFpbmVkLG90PVN8fHR0LmlzU3VicGxvdENvbnN0cmFpbmVkfHxldC5pc1N1YnBsb3RDb25zdHJhaW5lZDt2YXIgbz10Ll9mdWxsTGF5b3V0O3N0PW8uX2hhcygic2NhdHRlcmdsIiksbHQ9by5faGFzKCJzcGxvbSIpLGN0PW8uX2hhcygic3ZnIil9ZHQoKTt2YXIgZ3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PyJuc2V3Ij09PXQ/cj8iIjoicGFuIj09PWU/Im1vdmUiOiJjcm9zc2hhaXIiOnQudG9Mb3dlckNhc2UoKSsiLXJlc2l6ZSI6InBvaW50ZXIifShudCtydCx0Ll9mdWxsTGF5b3V0LmRyYWdtb2RlLGh0KSx2dD1DKGUsUytFKyJkcmFnIixndCxyLGEsYyxwKTtpZihpdCYmIWh0KXJldHVybiB2dC5vbm1vdXNlZG93bj1udWxsLHZ0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHZ0O3ZhciBtdCx5dCx4dCxidCxfdCx3dCxrdCxUdCxBdCxNdCxTdD17ZWxlbWVudDp2dCxnZDp0LHBsb3RpbmZvOmV9O2Z1bmN0aW9uIEV0KCl7U3QucGxvdGluZm8uc2VsZWN0aW9uPSExLF8oZnQpfWZ1bmN0aW9uIEN0KHIsaSl7dmFyIGE9dC5fZnVsbExheW91dC5jbGlja21vZGU7aWYoQih0KSwyIT09cnx8cHR8fGZ1bmN0aW9uKCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlPXQuX2NvbnRleHQuZG91YmxlQ2xpY2sscj1bXTtydCYmKHI9ci5jb25jYXQoWCkpLG50JiYocj1yLmNvbmNhdChaKSksZXQueGF4ZXMmJihyPXIuY29uY2F0KGV0LnhheGVzKSksZXQueWF4ZXMmJihyPXIuY29uY2F0KGV0LnlheGVzKSk7dmFyIG4saSxhLHM9e307aWYoInJlc2V0K2F1dG9zaXplIj09PWUpZm9yKGU9ImF1dG9zaXplIixpPTA7aTxyLmxlbmd0aDtpKyspaWYoKG49cltpXSkuX3JhbmdlSW5pdGlhbCYmKG4ucmFuZ2VbMF0hPT1uLl9yYW5nZUluaXRpYWxbMF18fG4ucmFuZ2VbMV0hPT1uLl9yYW5nZUluaXRpYWxbMV0pfHwhbi5fcmFuZ2VJbml0aWFsJiYhbi5hdXRvcmFuZ2Upe2U9InJlc2V0IjticmVha31pZigiYXV0b3NpemUiPT09ZSlmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChzW24uX25hbWUrIi5hdXRvcmFuZ2UiXT0hMCk7ZWxzZSBpZigicmVzZXQiPT09ZSlmb3IoKHJ0fHx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCkmJihyPXIuY29uY2F0KHR0LnhheGVzKSksbnQmJiF0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHI9ci5jb25jYXQodHQueWF4ZXMpKSx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHJ0P250fHwocj1yLmNvbmNhdChaKSk6cj1yLmNvbmNhdChYKSksaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChuLl9yYW5nZUluaXRpYWw/KGE9bi5fcmFuZ2VJbml0aWFsLHNbbi5fbmFtZSsiLnJhbmdlWzBdIl09YVswXSxzW24uX25hbWUrIi5yYW5nZVsxXSJdPWFbMV0pOnNbbi5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKTt0LmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQscyl9fSgpLGh0KWEuaW5kZXhPZigic2VsZWN0Iik+LTEmJncoaSx0LFgsWixlLmlkLFN0KSxhLmluZGV4T2YoImV2ZW50Iik+LTEmJmYuY2xpY2sodCxpLGUuaWQpO2Vsc2UgaWYoMT09PXImJnB0KXt2YXIgcz1TP0c6RixjPSJzIj09PVN8fCJ3Ij09PUU/MDoxLHU9cy5fbmFtZSsiLnJhbmdlWyIrYysiXSIsaD1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5yYW5nZVtlXSxhPU1hdGguYWJzKGktdC5yYW5nZVsxLWVdKTtyZXR1cm4iZGF0ZSI9PT10LnR5cGU/aToibG9nIj09PXQudHlwZT8ocj1NYXRoLmNlaWwoTWF0aC5tYXgoMCwtTWF0aC5sb2coYSkvTWF0aC5MTjEwKSkrMyxuLmZvcm1hdCgiLiIrcisiZyIpKE1hdGgucG93KDEwLGkpKSk6KHI9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhpKSkvTWF0aC5MTjEwKS1NYXRoLmZsb29yKE1hdGgubG9nKGEpL01hdGguTE4xMCkrNCxuLmZvcm1hdCgiLiIrU3RyaW5nKHIpKyJnIikoaSkpfShzLGMpLHA9ImxlZnQiLGQ9Im1pZGRsZSI7aWYocy5maXhlZHJhbmdlKXJldHVybjtTPyhkPSJuIj09PVM/InRvcCI6ImJvdHRvbSIsInJpZ2h0Ij09PXMuc2lkZSYmKHA9InJpZ2h0IikpOiJlIj09PUUmJihwPSJyaWdodCIpLHQuX2NvbnRleHQuc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXMmJm4uc2VsZWN0KHZ0KS5jYWxsKGwubWFrZUVkaXRhYmxlLHtnZDp0LGltbWVkaWF0ZTohMCxiYWNrZ3JvdW5kOnQuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcix0ZXh0OlN0cmluZyhoKSxmaWxsOnMudGlja2ZvbnQ/cy50aWNrZm9udC5jb2xvcjoiIzQ0NCIsaG9yaXpvbnRhbEFsaWduOnAsdmVydGljYWxBbGlnbjpkfSkub24oImVkaXQiLGZ1bmN0aW9uKGUpe3ZhciByPXMuZDJyKGUpO3ZvaWQgMCE9PXImJm8uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHUscil9KX19ZnVuY3Rpb24gTHQoZSxyKXtpZih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiExO3ZhciBuPU1hdGgubWF4KDAsTWF0aC5taW4oSyxlK210KSksaT1NYXRoLm1heCgwLE1hdGgubWluKFEscit5dCkpLGE9TWF0aC5hYnMobi1tdCksbz1NYXRoLmFicyhpLXl0KTtmdW5jdGlvbiBzKCl7a3Q9IiIseHQucj14dC5sLHh0LnQ9eHQuYixBdC5hdHRyKCJkIiwiTTAsMFoiKX1pZih4dC5sPU1hdGgubWluKG10LG4pLHh0LnI9TWF0aC5tYXgobXQsbikseHQudD1NYXRoLm1pbih5dCxpKSx4dC5iPU1hdGgubWF4KHl0LGkpLHR0LmlzU3VicGxvdENvbnN0cmFpbmVkKWE+TXx8bz5NPyhrdD0ieHkiLGEvSz5vL1E/KG89YSpRL0sseXQ+aT94dC50PXl0LW86eHQuYj15dCtvKTooYT1vKksvUSxtdD5uP3h0Lmw9bXQtYTp4dC5yPW10K2EpLEF0LmF0dHIoImQiLFYoeHQpKSk6cygpO2Vsc2UgaWYoZXQuaXNTdWJwbG90Q29uc3RyYWluZWQpaWYoYT5NfHxvPk0pe2t0PSJ4eSI7dmFyIGw9TWF0aC5taW4oeHQubC9LLChRLXh0LmIpL1EpLGM9TWF0aC5tYXgoeHQuci9LLChRLXh0LnQpL1EpO3h0Lmw9bCpLLHh0LnI9YypLLHh0LmI9KDEtbCkqUSx4dC50PSgxLWMpKlEsQXQuYXR0cigiZCIsVih4dCkpfWVsc2UgcygpO2Vsc2UhbnR8fG88TWF0aC5taW4oTWF0aC5tYXgoLjYqYSxBKSxNKT9hPEF8fCFydD9zKCk6KHh0LnQ9MCx4dC5iPVEsa3Q9IngiLEF0LmF0dHIoImQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIk0iKyh0LmwtLjUpKyIsIisoZS1NLS41KSsiaC0zdiIrKDIqTSsxKSsiaDNaTSIrKHQucisuNSkrIiwiKyhlLU0tLjUpKyJoM3YiKygyKk0rMSkrImgtM1oifSh4dCx5dCkpKTohcnR8fGE8TWF0aC5taW4oLjYqbyxNKT8oeHQubD0wLHh0LnI9SyxrdD0ieSIsQXQuYXR0cigiZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4iTSIrKGUtTS0uNSkrIiwiKyh0LnQtLjUpKyJ2LTNoIisoMipNKzEpKyJ2M1pNIisoZS1NLS41KSsiLCIrKHQuYisuNSkrInYzaCIrKDIqTSsxKSsidi0zWiJ9KHh0LG10KSkpOihrdD0ieHkiLEF0LmF0dHIoImQiLFYoeHQpKSk7eHQudz14dC5yLXh0LmwseHQuaD14dC5iLXh0LnQsa3QmJihNdD0hMCksdC5fZHJhZ2dlZD1NdCxSKFR0LEF0LHh0LF90LHd0LGJ0KSx3dD0hMH1mdW5jdGlvbiB6dCgpe2lmKHV0PXt9LE1hdGgubWluKHh0LmgseHQudyk8MipBKXJldHVybiBCKHQpOyJ4eSIhPT1rdCYmIngiIT09a3R8fCh6KFgseHQubC9LLHh0LnIvSyx1dCx0dC54YXhlcyksRnQoIngiLHV0KSksInh5IiE9PWt0JiYieSIhPT1rdHx8KHooWiwoUS14dC5iKS9RLChRLXh0LnQpL1EsdXQsdHQueWF4ZXMpLEZ0KCJ5Iix1dCkpLEIodCksTnQoKSxOKHQpfVN0LnByZXBGbj1mdW5jdGlvbihlLHIsbil7dmFyIGE9U3QuZHJhZ21vZGUsbz10Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO28hPT1hJiYoU3QuZHJhZ21vZGU9byksZHQoKSxpdHx8KGh0P2Uuc2hpZnRLZXk/InBhbiI9PT1vP289Inpvb20iOmoobyl8fChvPSJwYW4iKTplLmN0cmxLZXkmJihvPSJwYW4iKTpvPSJwYW4iKSxTdC5taW5EcmFnPSJsYXNzbyI9PT1vPzE6dm9pZCAwLGoobyk/KFN0LnhheGVzPVgsU3QueWF4ZXM9WixiKGUscixuLFN0LG8pKTooU3QuY2xpY2tGbj1DdCxqKGEpJiZFdCgpLGl0fHwoInpvb20iPT09bz8oU3QubW92ZUZuPUx0LFN0LmRvbmVGbj16dCxTdC5taW5EcmFnPTEsZnVuY3Rpb24oZSxyLG4pe3ZhciBhPXZ0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO210PXItYS5sZWZ0LHl0PW4tYS50b3AseHQ9e2w6bXQscjptdCx3OjAsdDp5dCxiOnl0LGg6MH0sYnQ9dC5faG1waXhjb3VudD90Ll9obWx1bWNvdW50L3QuX2htcGl4Y291bnQ6aSh0Ll9mdWxsTGF5b3V0LnBsb3RfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksd3Q9ITEsa3Q9Inh5IixNdD0hMSxUdD1EKGZ0LGJ0LCQsSixfdD0iTTAsMEgiK0srIlYiK1ErIkgwVjAiKSxBdD1QKGZ0LCQsSil9KDAscixuKSk6InBhbiI9PT1vJiYoU3QubW92ZUZuPVJ0LFN0LmRvbmVGbj1OdCkpKX0sZC5pbml0KFN0KTt2YXIgT3Q9WzAsMCxLLFFdLEl0PW51bGwsRHQ9VC5SRURSQVdERUxBWSxQdD1lLm1haW5wbG90P3QuX2Z1bGxMYXlvdXQuX3Bsb3RzW2UubWFpbnBsb3RdOmU7ZnVuY3Rpb24gUnQoZSxyKXtpZighdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbil7aWYodC5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMCwiZXciPT09cnR8fCJucyI9PT1udClyZXR1cm4gcnQmJihPKFgsZSksRnQoIngiKSksbnQmJihPKFosciksRnQoInkiKSksanQoW3J0Py1lOjAsbnQ/LXI6MCxLLFFdKSx2b2lkIEJ0KCk7aWYodHQuaXNTdWJwbG90Q29uc3RyYWluZWQmJnJ0JiZudCl7dmFyIG49InciPT09cnQ9PSgibiI9PT1udCk/MTotMSxpPShlL0srbipyL1EpLzI7ZT1pKksscj1uKmkqUX0idyI9PT1ydD9lPWwoWCwwLGUpOiJlIj09PXJ0P2U9bChYLDEsLWUpOnJ0fHwoZT0wKSwibiI9PT1udD9yPWwoWiwxLHIpOiJzIj09PW50P3I9bChaLDAsLXIpOm50fHwocj0wKTt2YXIgYT0idyI9PT1ydD9lOjAsbz0ibiI9PT1udD9yOjA7aWYodHQuaXNTdWJwbG90Q29uc3RyYWluZWQpe3ZhciBzO2lmKCFydCYmMT09PW50Lmxlbmd0aCl7Zm9yKHM9MDtzPFgubGVuZ3RoO3MrKylYW3NdLnJhbmdlPVhbc10uX3Iuc2xpY2UoKSxrKFhbc10sMS1yL1EpO2E9KGU9cipLL1EpLzJ9aWYoIW50JiYxPT09cnQubGVuZ3RoKXtmb3Iocz0wO3M8Wi5sZW5ndGg7cysrKVpbc10ucmFuZ2U9WltzXS5fci5zbGljZSgpLGsoWltzXSwxLWUvSyk7bz0ocj1lKlEvSykvMn19RnQoIngiKSxGdCgieSIpLGp0KFthLG8sSy1lLFEtcl0pLEJ0KCl9ZnVuY3Rpb24gbCh0LGUscil7Zm9yKHZhciBuLGksYT0xLWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lmKCFzLmZpeGVkcmFuZ2Upe249cyxpPXMuX3JsW2FdKyhzLl9ybFtlXS1zLl9ybFthXSkvSShyL3MuX2xlbmd0aCk7dmFyIGw9cy5sMnIoaSk7ITEhPT1sJiZ2b2lkIDAhPT1sJiYocy5yYW5nZVtlXT1sKX19cmV0dXJuIG4uX2xlbmd0aCoobi5fcmxbZV0taSkvKG4uX3JsW2VdLW4uX3JsW2FdKX19ZnVuY3Rpb24gRnQodCxlKXtmb3IodmFyIHI9ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6Wix5Olh9W3RdOmV0W3QrImF4ZXMiXSxuPWV0LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OlgseTpafVt0XTpbXSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1hLl9pZCxzPWV0LnhMaW5rc1tvXXx8ZXQueUxpbmtzW29dLGw9blswXXx8WVtzXXx8V1tzXTtpZihsKXt2YXIgYz1sLnJhbmdlO2U/KGVbYS5fbmFtZSsiLnJhbmdlWzBdIl09Y1swXSxlW2EuX25hbWUrIi5yYW5nZVsxXSJdPWNbMV0pOmEucmFuZ2U9Y319fWZ1bmN0aW9uIEJ0KCl7dmFyIGUscj1bXTtmdW5jdGlvbiBuKHQpe2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5maXhlZHJhbmdlfHxyLnB1c2godFtlXS5faWQpfWZvcihhdCYmKG4oWCksbih0dC54YXhlcyksbihldC54YXhlcykpLG90JiYobihaKSxuKHR0LnlheGVzKSxuKGV0LnlheGVzKSksdXQ9e30sZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdLGE9eCh0LGkpO2guZHJhd09uZSh0LGEse3NraXBUaXRsZTohMH0pLHV0W2EuX25hbWUrIi5yYW5nZVswXSJdPWEucmFuZ2VbMF0sdXRbYS5fbmFtZSsiLnJhbmdlWzFdIl09YS5yYW5nZVsxXX1oLnJlZHJhd0NvbXBvbmVudHModCxyKX1mdW5jdGlvbiBOdCgpe2p0KFswLDAsSyxRXSkscy5zeW5jT3JBc3luYyhbeS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMSxvLmNhbGwoIl9ndWlSZWxheW91dCIsdCx1dCl9XSx0KX1mdW5jdGlvbiBqdChlKXt2YXIgcixuLGksYSxsPXQuX2Z1bGxMYXlvdXQsYz1sLl9wbG90cyxmPWwuX3N1YnBsb3RzLmNhcnRlc2lhbjtpZihsdCYmby5zdWJwbG90c1JlZ2lzdHJ5LnNwbG9tLmRyYWcodCksc3QpZm9yKHI9MDtyPGYubGVuZ3RoO3IrKylpZihpPShuPWNbZltyXV0pLnhheGlzLGE9bi55YXhpcyxuLl9zY2VuZSl7dmFyIGg9cy5zaW1wbGVNYXAoaS5yYW5nZSxpLnIybCkscD1zLnNpbXBsZU1hcChhLnJhbmdlLGEucjJsKTtuLl9zY2VuZS51cGRhdGUoe3JhbmdlOltoWzBdLHBbMF0saFsxXSxwWzFdXX0pfWlmKChsdHx8c3QpJiYodih0KSxtKHQpKSxjdCl7dmFyIGQ9ZVsyXS9GLl9sZW5ndGgsZz1lWzNdL0cuX2xlbmd0aDtmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKXtpPShuPWNbZltyXV0pLnhheGlzLGE9bi55YXhpczt2YXIgeSx4LGIsXyx3PWF0JiYhaS5maXhlZHJhbmdlJiZZW2kuX2lkXSxrPW90JiYhYS5maXhlZHJhbmdlJiZXW2EuX2lkXTtpZih3Pyh5PWQsYj1FP2VbMF06cXQoaSx5KSk6ZXQueGFIYXNoW2kuX2lkXT8oeT1kLGI9ZVswXSppLl9sZW5ndGgvRi5fbGVuZ3RoKTpldC55YUhhc2hbaS5faWRdPyh5PWcsYj0ibnMiPT09bnQ/LWVbMV0qaS5fbGVuZ3RoL0cuX2xlbmd0aDpxdChpLHkse246InRvcCIsczoiYm90dG9tIn1bbnRdKSk6Yj1VdChpLHk9VnQoaSxkLGcpKSxrPyh4PWcsXz1TP2VbMV06cXQoYSx4KSk6ZXQueWFIYXNoW2EuX2lkXT8oeD1nLF89ZVsxXSphLl9sZW5ndGgvRy5fbGVuZ3RoKTpldC54YUhhc2hbYS5faWRdPyh4PWQsXz0iZXciPT09cnQ/LWVbMF0qYS5fbGVuZ3RoL0YuX2xlbmd0aDpxdChhLHgse2U6InJpZ2h0Iix3OiJsZWZ0In1bcnRdKSk6Xz1VdChhLHg9VnQoYSxkLGcpKSx5fHx4KXt5fHwoeT0xKSx4fHwoeD0xKTt2YXIgVD1pLl9vZmZzZXQtYi95LEE9YS5fb2Zmc2V0LV8veDtuLmNsaXBSZWN0LmNhbGwodS5zZXRUcmFuc2xhdGUsYixfKS5jYWxsKHUuc2V0U2NhbGUseSx4KSxuLnBsb3QuY2FsbCh1LnNldFRyYW5zbGF0ZSxULEEpLmNhbGwodS5zZXRTY2FsZSwxL3ksMS94KSx5PT09bi54U2NhbGVGYWN0b3ImJng9PT1uLnlTY2FsZUZhY3Rvcnx8KHUuc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLHkseCksdS5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQseSx4KSksdS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzKG4uY2xpcE9uQXhpc0ZhbHNlVHJhY2VzLG4pLG4ueFNjYWxlRmFjdG9yPXksbi55U2NhbGVGYWN0b3I9eH19fX1mdW5jdGlvbiBWdCh0LGUscil7cmV0dXJuIHQuZml4ZWRyYW5nZT8wOmF0JiZ0dC54YUhhc2hbdC5faWRdP2U6b3QmJih0dC5pc1N1YnBsb3RDb25zdHJhaW5lZD90dC54YUhhc2g6dHQueWFIYXNoKVt0Ll9pZF0/cjowfWZ1bmN0aW9uIFV0KHQsZSl7cmV0dXJuIGU/KHQucmFuZ2U9dC5fci5zbGljZSgpLGsodCxlKSxxdCh0LGUpKTowfWZ1bmN0aW9uIHF0KHQsZSxyKXtyZXR1cm4gdC5fbGVuZ3RoKigxLWUpKmdbcnx8dC5jb25zdHJhaW50b3dhcmR8fCJtaWRkbGUiXX1yZXR1cm4gUy5sZW5ndGgqRS5sZW5ndGghPTEmJnEodnQsZnVuY3Rpb24oZSl7aWYodC5fY29udGV4dC5fc2Nyb2xsWm9vbS5jYXJ0ZXNpYW58fHQuX2Z1bGxMYXlvdXQuX2VuYWJsZXNjcm9sbHpvb20pe2lmKEV0KCksdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbilyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgZS5zdG9wUHJvcGFnYXRpb24oKTtkdCgpLGNsZWFyVGltZW91dChJdCk7dmFyIHI9LWUuZGVsdGFZO2lmKGlzRmluaXRlKHIpfHwocj1lLndoZWVsRGVsdGEvMTApLGlzRmluaXRlKHIpKXt2YXIgbixpPU1hdGguZXhwKC1NYXRoLm1pbihNYXRoLm1heChyLC0yMCksMjApLzIwMCksYT1QdC5kcmFnbGF5ZXIuc2VsZWN0KCIubnNld2RyYWciKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz0oZS5jbGllbnRYLWEubGVmdCkvYS53aWR0aCxsPShhLmJvdHRvbS1lLmNsaWVudFkpL2EuaGVpZ2h0O2lmKGF0KXtmb3IoRXx8KG89LjUpLG49MDtuPFgubGVuZ3RoO24rKyljKFhbbl0sbyxpKTtGdCgieCIpLE90WzJdKj1pLE90WzBdKz1PdFsyXSpvKigxL2ktMSl9aWYob3Qpe2ZvcihTfHwobD0uNSksbj0wO248Wi5sZW5ndGg7bisrKWMoWltuXSxsLGkpO0Z0KCJ5IiksT3RbM10qPWksT3RbMV0rPU90WzNdKigxLWwpKigxL2ktMSl9anQoT3QpLEJ0KCksSXQ9c2V0VGltZW91dChmdW5jdGlvbigpe090PVswLDAsSyxRXSxOdCgpfSxEdCksZS5wcmV2ZW50RGVmYXVsdCgpfWVsc2Ugcy5sb2coIkRpZCBub3QgZmluZCB3aGVlbCBtb3Rpb24gYXR0cmlidXRlczogIixlKX1mdW5jdGlvbiBjKHQsZSxyKXtpZighdC5maXhlZHJhbmdlKXt2YXIgbj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxpPW5bMF0rKG5bMV0tblswXSkqZTt0LnJhbmdlPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmwycihpKyhlLWkpKnIpfSl9fX0pLHZ0fSxtYWtlRHJhZ2dlcjpFLG1ha2VSZWN0RHJhZ2dlcjpDLG1ha2Vab29tYm94OkQsbWFrZUNvcm5lcnM6UCx1cGRhdGVab29tYm94OlIseHlDb3JuZXJzOlYsdHJhbnNpdGlvblpvb21ib3g6RixyZW1vdmVab29tYm94OkIsc2hvd0RvdWJsZUNsaWNrTm90aWZpZXI6TixhdHRhY2hXaGVlbEV2ZW50SGFuZGxlcjpxfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjU5NSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjo2ODUsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIjo3MzksIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL3Bsb3RzIjo4MTAsIi4vYXhlcyI6NzQ4LCIuL2F4aXNfaWRzIjo3NTEsIi4vY29uc3RhbnRzIjo3NTQsIi4vc2NhbGVfem9vbSI6NzY0LCIuL3NlbGVjdCI6NzY1LGQzOjE1NCwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MDMsdGlueWNvbG9yMjo1MjF9XSw3NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxvPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxzPXQoIi4vZHJhZ2JveCIpLm1ha2VEcmFnQm94LGw9dCgiLi9jb25zdGFudHMiKS5EUkFHR0VSU0laRTtyLmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZih0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpbi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuZHJhZyIpLnJlbW92ZSgpO2Vsc2UgaWYoZS5faGFzKCJjYXJ0ZXNpYW4iKXx8ZS5faGFzKCJzcGxvbSIpKXtPYmplY3Qua2V5cyhlLl9wbG90c3x8e30pLnNvcnQoZnVuY3Rpb24odCxyKXtpZigoZS5fcGxvdHNbdF0ubWFpbnBsb3QmJiEwKT09PShlLl9wbG90c1tyXS5tYWlucGxvdCYmITApKXt2YXIgbj10LnNwbGl0KCJ5IiksaT1yLnNwbGl0KCJ5Iik7cmV0dXJuIG5bMF09PT1pWzBdP051bWJlcihuWzFdfHwxKS1OdW1iZXIoaVsxXXx8MSk6TnVtYmVyKG5bMF18fDEpLU51bWJlcihpWzBdfHwxKX1yZXR1cm4gZS5fcGxvdHNbdF0ubWFpbnBsb3Q/MTotMX0pLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG49ZS5fcGxvdHNbcl0sbz1uLnhheGlzLGM9bi55YXhpcztpZighbi5tYWlucGxvdCl7dmFyIHU9cyh0LG4sby5fb2Zmc2V0LGMuX29mZnNldCxvLl9sZW5ndGgsYy5fbGVuZ3RoLCJucyIsImV3Iik7dS5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmaS5ob3Zlcih0LGUscil9LGkuaG92ZXIodCxlLHIpLHQuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj11LHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSx1Lm9ubW91c2VvdXQ9ZnVuY3Rpb24oZSl7dC5fZHJhZ2dpbmd8fCh0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxhLnVuaG92ZXIodCxlKSl9LHQuX2NvbnRleHQuc2hvd0F4aXNEcmFnSGFuZGxlcyYmKHModCxuLG8uX29mZnNldC1sLGMuX29mZnNldC1sLGwsbCwibiIsInciKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldC1sLGwsbCwibiIsImUiKSxzKHQsbixvLl9vZmZzZXQtbCxjLl9vZmZzZXQrYy5fbGVuZ3RoLGwsbCwicyIsInciKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldCtjLl9sZW5ndGgsbCxsLCJzIiwiZSIpKX1pZih0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMpe2lmKHI9PT1vLl9tYWluU3VicGxvdCl7dmFyIGY9by5fbWFpbkxpbmVQb3NpdGlvbjsidG9wIj09PW8uc2lkZSYmKGYtPWwpLHModCxuLG8uX29mZnNldCsuMSpvLl9sZW5ndGgsZiwuOCpvLl9sZW5ndGgsbCwiIiwiZXciKSxzKHQsbixvLl9vZmZzZXQsZiwuMSpvLl9sZW5ndGgsbCwiIiwidyIpLHModCxuLG8uX29mZnNldCsuOSpvLl9sZW5ndGgsZiwuMSpvLl9sZW5ndGgsbCwiIiwiZSIpfWlmKHI9PT1jLl9tYWluU3VicGxvdCl7dmFyIGg9Yy5fbWFpbkxpbmVQb3NpdGlvbjsicmlnaHQiIT09Yy5zaWRlJiYoaC09bCkscyh0LG4saCxjLl9vZmZzZXQrLjEqYy5fbGVuZ3RoLGwsLjgqYy5fbGVuZ3RoLCJucyIsIiIpLHModCxuLGgsYy5fb2Zmc2V0Ky45KmMuX2xlbmd0aCxsLC4xKmMuX2xlbmd0aCwicyIsIiIpLHModCxuLGgsYy5fb2Zmc2V0LGwsLjEqYy5fbGVuZ3RoLCJuIiwiIil9fX0pO3ZhciBvPWUuX2hvdmVybGF5ZXIubm9kZSgpO28ub25tb3VzZW1vdmU9ZnVuY3Rpb24ocil7ci50YXJnZXQ9dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLGkuaG92ZXIodCxyLGUuX2hvdmVyc3VicGxvdCl9LG8ub25jbGljaz1mdW5jdGlvbihlKXtlLnRhcmdldD10Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIsaS5jbGljayh0LGUpfSxvLm9ubW91c2Vkb3duPWZ1bmN0aW9uKGUpe3QuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlci5vbm1vdXNlZG93bihlKX0sci51cGRhdGVGeCh0KX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPSJwYW4iPT09ZS5kcmFnbW9kZT8ibW92ZSI6ImNyb3NzaGFpciI7byhlLl9kcmFnZ2VycyxyKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NTk1LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi9jb25zdGFudHMiOjc1NCwiLi9kcmFnYm94Ijo3NTYsZDM6MTU0fV0sNzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGE9ZVt0XTtpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgbz1uLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuLHM9by5pZFJlZ2V4LGw9ci5fc3VicGxvdHMsYz1sLnhheGlzLHU9bC55YXhpcyxmPWwuY2FydGVzaWFuLGg9ci5faGFzKCJjYXJ0ZXNpYW4iKXx8ci5faGFzKCJnbDJkIikscD0wO3A8YS5sZW5ndGg7cCsrKXt2YXIgZD1hW3BdO2lmKGkuaXNQbGFpbk9iamVjdChkKSl7dmFyIGc9ZC54cmVmLHY9ZC55cmVmLG09cy54LnRlc3QoZykseT1zLnkudGVzdCh2KTtpZihtfHx5KXtofHxpLnB1c2hVbmlxdWUoci5fYmFzZVBsb3RNb2R1bGVzLG8pO3ZhciB4PSExO20mJi0xPT09Yy5pbmRleE9mKGcpJiYoYy5wdXNoKGcpLHg9ITApLHkmJi0xPT09dS5pbmRleE9mKHYpJiYodS5wdXNoKHYpLHg9ITApLHgmJm0mJnkmJmYucHVzaChnK3YpfX19fX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4Mjl9XSw3NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3Bsb3RzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYz10KCIuL2F4aXNfaWRzIiksdT10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxoPWEuZW5zdXJlU2luZ2xlO2Z1bmN0aW9uIHAodCxlLHIpe3JldHVybiBhLmVuc3VyZVNpbmdsZSh0LGUscixmdW5jdGlvbih0KXt0LmRhdHVtKHIpfSl9ZnVuY3Rpb24gZCh0LGUscixhLG8pe2Zvcih2YXIgYyxmLGgscD11LnRyYWNlTGF5ZXJDbGFzc2VzLGQ9dC5fZnVsbExheW91dCxnPWQuX21vZHVsZXMsdj1bXSxtPVtdLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHg9KGM9Z1t5XSkubmFtZSxiPWkubW9kdWxlc1t4XS5jYXRlZ29yaWVzO2lmKGIuc3ZnKXt2YXIgXz1jLmxheWVyTmFtZXx8eCsibGF5ZXIiLHc9Yy5wbG90O2g9KGY9bChyLHcpKVswXSxyPWZbMV0saC5sZW5ndGgmJnYucHVzaCh7aTpwLmluZGV4T2YoXyksY2xhc3NOYW1lOl8scGxvdE1ldGhvZDp3LGNkTW9kdWxlOmh9KSxiLnpvb21TY2FsZSYmbS5wdXNoKCIuIitfKX19di5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaS1lLml9KTt2YXIgaz1lLnBsb3Quc2VsZWN0QWxsKCJnLm1sYXllciIpLmRhdGEodixmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWV9KTtpZihrLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTmFtZX0pLmNsYXNzZWQoIm1sYXllciIsITApLGsuZXhpdCgpLnJlbW92ZSgpLGsub3JkZXIoKSxrLmVhY2goZnVuY3Rpb24ocil7dmFyIGk9bi5zZWxlY3QodGhpcyksbD1yLmNsYXNzTmFtZTtyLnBsb3RNZXRob2QodCxlLHIuY2RNb2R1bGUsaSxhLG8pLCJzY2F0dGVybGF5ZXIiIT09bCYmImJhcmxheWVyIiE9PWwmJiJ3YXRlcmZhbGxsYXllciIhPT1sJiZzLnNldENsaXBVcmwoaSxlLmxheWVyQ2xpcElkLHQpfSksZC5faGFzKCJzY2F0dGVyZ2wiKSYmKGM9aS5nZXRNb2R1bGUoInNjYXR0ZXJnbCIpLGg9bChyLGMpWzBdLGMucGxvdCh0LGUsaCkpLCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QmJihlLl9oYXNDbGlwT25BeGlzRmFsc2UmJihlLmNsaXBPbkF4aXNGYWxzZVRyYWNlcz1lLnBsb3Quc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLCAuYmFybGF5ZXIsIC53YXRlcmZhbGxsYXllciIpLnNlbGVjdEFsbCgiLnRyYWNlIikpLG0ubGVuZ3RoKSl7dmFyIFQ9ZS5wbG90LnNlbGVjdEFsbChtLmpvaW4oIiwiKSkuc2VsZWN0QWxsKCIudHJhY2UiKTtlLnpvb21TY2FsZVB0cz1ULnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLGUuem9vbVNjYWxlVHh0PVQuc2VsZWN0QWxsKCIudGV4dHBvaW50Iil9fWZ1bmN0aW9uIGcodCxlKXt2YXIgcj1lLnBsb3Rncm91cCxuPWUuaWQsaT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1tlLnhheGlzLmxheWVyXSxhPXUubGF5ZXJWYWx1ZTJsYXllckNsYXNzW2UueWF4aXMubGF5ZXJdLG89dC5fZnVsbExheW91dC5faGFzT25seUxhcmdlU3Bsb21zO2lmKGUubWFpbnBsb3Qpe3ZhciBzPWUubWFpbnBsb3RpbmZvLGw9cy5wbG90Z3JvdXAsZj1uKyIteCIsZD1uKyIteSI7ZS5ncmlkbGF5ZXI9cy5ncmlkbGF5ZXIsZS56ZXJvbGluZWxheWVyPXMuemVyb2xpbmVsYXllcixoKHMub3ZlcmxpbmVzQmVsb3csInBhdGgiLGYpLGgocy5vdmVybGluZXNCZWxvdywicGF0aCIsZCksaChzLm92ZXJheGVzQmVsb3csImciLGYpLGgocy5vdmVyYXhlc0JlbG93LCJnIixkKSxlLnBsb3Q9aChzLm92ZXJwbG90LCJnIixuKSxoKHMub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGYpLGgocy5vdmVybGluZXNBYm92ZSwicGF0aCIsZCksaChzLm92ZXJheGVzQWJvdmUsImciLGYpLGgocy5vdmVyYXhlc0Fib3ZlLCJnIixkKSxlLnhsaW5lcz1sLnNlbGVjdCgiLm92ZXJsaW5lcy0iK2kpLnNlbGVjdCgiLiIrZiksZS55bGluZXM9bC5zZWxlY3QoIi5vdmVybGluZXMtIithKS5zZWxlY3QoIi4iK2QpLGUueGF4aXNsYXllcj1sLnNlbGVjdCgiLm92ZXJheGVzLSIraSkuc2VsZWN0KCIuIitmKSxlLnlheGlzbGF5ZXI9bC5zZWxlY3QoIi5vdmVyYXhlcy0iK2EpLnNlbGVjdCgiLiIrZCl9ZWxzZSBpZihvKWUueGxpbmVzPWgociwicGF0aCIsInhsaW5lcy1hYm92ZSIpLGUueWxpbmVzPWgociwicGF0aCIsInlsaW5lcy1hYm92ZSIpLGUueGF4aXNsYXllcj1oKHIsImciLCJ4YXhpc2xheWVyLWFib3ZlIiksZS55YXhpc2xheWVyPWgociwiZyIsInlheGlzbGF5ZXItYWJvdmUiKTtlbHNle3ZhciBnPWgociwiZyIsImxheWVyLXN1YnBsb3QiKTtlLnNoYXBlbGF5ZXI9aChnLCJnIiwic2hhcGVsYXllciIpLGUuaW1hZ2VsYXllcj1oKGcsImciLCJpbWFnZWxheWVyIiksZS5ncmlkbGF5ZXI9aChyLCJnIiwiZ3JpZGxheWVyIiksZS56ZXJvbGluZWxheWVyPWgociwiZyIsInplcm9saW5lbGF5ZXIiKSxoKHIsInBhdGgiLCJ4bGluZXMtYmVsb3ciKSxoKHIsInBhdGgiLCJ5bGluZXMtYmVsb3ciKSxlLm92ZXJsaW5lc0JlbG93PWgociwiZyIsIm92ZXJsaW5lcy1iZWxvdyIpLGgociwiZyIsInhheGlzbGF5ZXItYmVsb3ciKSxoKHIsImciLCJ5YXhpc2xheWVyLWJlbG93IiksZS5vdmVyYXhlc0JlbG93PWgociwiZyIsIm92ZXJheGVzLWJlbG93IiksZS5wbG90PWgociwiZyIsInBsb3QiKSxlLm92ZXJwbG90PWgociwiZyIsIm92ZXJwbG90IiksZS54bGluZXM9aChyLCJwYXRoIiwieGxpbmVzLWFib3ZlIiksZS55bGluZXM9aChyLCJwYXRoIiwieWxpbmVzLWFib3ZlIiksZS5vdmVybGluZXNBYm92ZT1oKHIsImciLCJvdmVybGluZXMtYWJvdmUiKSxoKHIsImciLCJ4YXhpc2xheWVyLWFib3ZlIiksaChyLCJnIiwieWF4aXNsYXllci1hYm92ZSIpLGUub3ZlcmF4ZXNBYm92ZT1oKHIsImciLCJvdmVyYXhlcy1hYm92ZSIpLGUueGxpbmVzPXIuc2VsZWN0KCIueGxpbmVzLSIraSksZS55bGluZXM9ci5zZWxlY3QoIi55bGluZXMtIithKSxlLnhheGlzbGF5ZXI9ci5zZWxlY3QoIi54YXhpc2xheWVyLSIraSksZS55YXhpc2xheWVyPXIuc2VsZWN0KCIueWF4aXNsYXllci0iK2EpfW98fChwKGUuZ3JpZGxheWVyLCJnIixlLnhheGlzLl9pZCkscChlLmdyaWRsYXllciwiZyIsZS55YXhpcy5faWQpLGUuZ3JpZGxheWVyLnNlbGVjdEFsbCgiZyIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLnNvcnQoYy5pZFNvcnQpKSxlLnhsaW5lcy5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jbGFzc2VkKCJjcmlzcCIsITApLGUueWxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCl9ZnVuY3Rpb24gdih0LGUpe2lmKHQpe3ZhciByPXt9O2Zvcih2YXIgaSBpbiB0LmVhY2goZnVuY3Rpb24odCl7dmFyIGk9dFswXTtuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKSxtKGksZSkscltpXT0hMH0pLGUuX3Bsb3RzKWZvcih2YXIgYT1lLl9wbG90c1tpXS5vdmVybGF5c3x8W10sbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3Jbcy5pZF0mJnMucGxvdC5zZWxlY3RBbGwoIi50cmFjZSIpLnJlbW92ZSgpfX19ZnVuY3Rpb24gbSh0LGUpe2UuX2RyYWdnZXJzLnNlbGVjdEFsbCgiZy4iK3QpLnJlbW92ZSgpLGUuX2RlZnMuc2VsZWN0KCIjY2xpcCIrZS5fdWlkK3QrInBsb3QiKS5yZW1vdmUoKX1yLm5hbWU9ImNhcnRlc2lhbiIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9dS5pZFJlZ2V4LHIuYXR0clJlZ2V4PXUuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnRyYW5zaXRpb25BeGVzPXQoIi4vdHJhbnNpdGlvbl9heGVzIiksci5maW5hbGl6ZVN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLG89ZS5fc3VicGxvdHMscz1vLnhheGlzLGw9by55YXhpcyxmPW8uY2FydGVzaWFuLGg9Zi5jb25jYXQoby5nbDJkfHxbXSkscD17fSxkPXt9O2ZvcihyPTA7cjxoLmxlbmd0aDtyKyspe3ZhciBnPWhbcl0uc3BsaXQoInkiKTtwW2dbMF1dPTEsZFsieSIrZ1sxXV09MX1mb3Iocj0wO3I8cy5sZW5ndGg7cisrKXBbbj1zW3JdXXx8KGk9KHRbYy5pZDJuYW1lKG4pXXx8e30pLmFuY2hvcix1LmlkUmVnZXgueS50ZXN0KGkpfHwoaT0ieSIpLGYucHVzaChuK2kpLGgucHVzaChuK2kpLGRbaV18fChkW2ldPTEsYS5wdXNoVW5pcXVlKGwsaSkpKTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWRbaT1sW3JdXXx8KG49KHRbYy5pZDJuYW1lKGkpXXx8e30pLmFuY2hvcix1LmlkUmVnZXgueC50ZXN0KG4pfHwobj0ieCIpLGYucHVzaChuK2kpLGgucHVzaChuK2kpLHBbbl18fChwW25dPTEsYS5wdXNoVW5pcXVlKHMsbikpKTtpZighaC5sZW5ndGgpe2Zvcih2YXIgdiBpbiBuPSIiLGk9IiIsdCl7aWYodS5hdHRyUmVnZXgudGVzdCh2KSkieCI9PT12LmNoYXJBdCgwKT8oIW58fCt2LnN1YnN0cig1KTwrbi5zdWJzdHIoNSkpJiYobj12KTooIWl8fCt2LnN1YnN0cig1KTwraS5zdWJzdHIoNSkpJiYoaT12KX1uPW4/Yy5uYW1lMmlkKG4pOiJ4IixpPWk/Yy5uYW1lMmlkKGkpOiJ5IixzLnB1c2gobiksbC5wdXNoKGkpLGYucHVzaChuK2kpfX0sci5wbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5fZnVsbExheW91dCxvPWEuX3N1YnBsb3RzLmNhcnRlc2lhbixzPXQuY2FsY2RhdGE7aWYobnVsbCE9PWUpe2lmKCFBcnJheS5pc0FycmF5KGUpKWZvcihlPVtdLGk9MDtpPHMubGVuZ3RoO2krKyllLnB1c2goaSk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7Zm9yKHZhciBsLGM9b1tpXSx1PWEuX3Bsb3RzW2NdLGY9W10saD0wO2g8cy5sZW5ndGg7aCsrKXt2YXIgcD1zW2hdLGc9cFswXS50cmFjZTtnLnhheGlzK2cueWF4aXM9PT1jJiYoKC0xIT09ZS5pbmRleE9mKGcuaW5kZXgpfHxnLmNhcnBldCkmJihsJiZsWzBdLnRyYWNlLnhheGlzK2xbMF0udHJhY2UueWF4aXM9PT1jJiYtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiLCJ0b25leHQiXS5pbmRleE9mKGcuZmlsbCkmJi0xPT09Zi5pbmRleE9mKGwpJiZmLnB1c2gobCksZi5wdXNoKHApKSxsPXApfWQodCx1LGYscixuKX19fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzfHx7fSx1PW4uX3N1YnBsb3RzfHx7fTtpZihuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKG8gaW4gcykoaT1zW29dKS5wbG90Z3JvdXAmJmkucGxvdGdyb3VwLnJlbW92ZSgpO3ZhciBmPW4uX2hhcyYmbi5faGFzKCJnbCIpLGg9ZS5faGFzJiZlLl9oYXMoImdsIik7aWYoZiYmIWgpZm9yKG8gaW4gcykoaT1zW29dKS5fc2NlbmUmJmkuX3NjZW5lLmRlc3Ryb3koKTtpZih1LnhheGlzJiZ1LnlheGlzKXt2YXIgcD1jLmxpc3RJZHMoe19mdWxsTGF5b3V0Om59KTtmb3IoYT0wO2E8cC5sZW5ndGg7YSsrKXt2YXIgZD1wW2FdO2VbYy5pZDJuYW1lKGQpXXx8bi5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmctIitkKyJ0aXRsZSIpLnJlbW92ZSgpfX12YXIgZz1uLl9oYXMmJm4uX2hhcygiY2FydGVzaWFuIikseT1lLl9oYXMmJmUuX2hhcygiY2FydGVzaWFuIik7aWYoZyYmIXkpdihuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90Iiksbiksbi5fZGVmcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLnJlbW92ZSgpLGRlbGV0ZSBuLl9heGlzQ29uc3RyYWludEdyb3VwcztlbHNlIGlmKHUuY2FydGVzaWFuKWZvcihhPTA7YTx1LmNhcnRlc2lhbi5sZW5ndGg7YSsrKXt2YXIgeD11LmNhcnRlc2lhblthXTtpZighbFt4XSl7dmFyIGI9Ii4iK3grIiwuIit4KyIteCwuIit4KyIteSI7bi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKGIpLnJlbW92ZSgpLG0oeCxuKX19fSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzPXQuX2Z1bGxMYXlvdXQsbD1zLl9zdWJwbG90cy5jYXJ0ZXNpYW4sYz1sLmxlbmd0aCx1PVtdLGY9W107Zm9yKGU9MDtlPGM7ZSsrKXtuPWxbZV0saT1zLl9wbG90c1tuXSxhPWkueGF4aXMsbz1pLnlheGlzO3ZhciBoPWEuX21haW5BeGlzLHA9by5fbWFpbkF4aXMsZD1oLl9pZCtwLl9pZCxnPXMuX3Bsb3RzW2RdO2kub3ZlcmxheXM9W10sZCE9PW4mJmc/KGkubWFpbnBsb3Q9ZCxpLm1haW5wbG90aW5mbz1nLGYucHVzaChuKSk6KGkubWFpbnBsb3Q9dm9pZCAwLGkubWFpblBsb3RpbmZvPXZvaWQgMCx1LnB1c2gobikpfWZvcihlPTA7ZTxmLmxlbmd0aDtlKyspbj1mW2VdLChpPXMuX3Bsb3RzW25dKS5tYWlucGxvdGluZm8ub3ZlcmxheXMucHVzaChpKTt2YXIgdj11LmNvbmNhdChmKSxtPW5ldyBBcnJheShjKTtmb3IoZT0wO2U8YztlKyspe249dltlXSxpPXMuX3Bsb3RzW25dLGE9aS54YXhpcyxvPWkueWF4aXM7dmFyIHk9W24sYS5sYXllcixvLmxheWVyLGEub3ZlcmxheWluZ3x8IiIsby5vdmVybGF5aW5nfHwiIl07Zm9yKHI9MDtyPGkub3ZlcmxheXMubGVuZ3RoO3IrKyl5LnB1c2goaS5vdmVybGF5c1tyXS5pZCk7bVtlXT15fXJldHVybiBtfSh0KSxpPWUuX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbCgiLnN1YnBsb3QiKS5kYXRhKHIsU3RyaW5nKTtpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJzdWJwbG90ICIrdFswXX0pLGkub3JkZXIoKSxpLmV4aXQoKS5jYWxsKHYsZSksaS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXJbMF0sYT1lLl9wbG90c1tpXTthLnBsb3Rncm91cD1uLnNlbGVjdCh0aGlzKSxnKHQsYSksYS5kcmFnbGF5ZXI9aChlLl9kcmFnZ2VycywiZyIsaSl9KX0sci5yYW5nZVBsb3Q9ZnVuY3Rpb24odCxlLHIpe2codCxlKSxkKHQsZSxyKSxvLnN0eWxlKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkuc2VsZWN0QWxsKCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXMiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpmLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KX0sci51cGRhdGVGeD10KCIuL2dyYXBoX2ludGVyYWN0IikudXBkYXRlRnh9LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NzgsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9nZXRfZGF0YSI6Nzg0LCIuLi9wbG90cyI6ODEwLCIuL2F0dHJpYnV0ZXMiOjc0NiwiLi9heGlzX2lkcyI6NzUxLCIuL2NvbnN0YW50cyI6NzU0LCIuL2dyYXBoX2ludGVyYWN0Ijo3NTcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MCwiLi9sYXlvdXRfZGVmYXVsdHMiOjc2MSwiLi90cmFuc2l0aW9uX2F4ZXMiOjc3MCxkMzoxNTR9XSw3NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGw9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90In0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InRpY2tzIn0sZm9udDpuKHtlZGl0VHlwZToidGlja3MifSksZWRpdFR5cGU6InRpY2tzIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSIsIm11bHRpY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyIsX25vVGVtcGxhdGluZzohMH0sYXV0b3JhbmdlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGRmbHQ6ITAsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vcm1hbCIsInRvemVybyIsIm5vbm5lZ2F0aXZlIl0sZGZsdDoibm9ybWFsIixlZGl0VHlwZToicGxvdCJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfSxhbmltOiEwfSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9LGFuaW06ITB9XSxlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9LGFuaW06ITB9LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sc2NhbGVyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhbmdlIiwiZG9tYWluIl0sZGZsdDoicmFuZ2UiLGVkaXRUeXBlOiJwbG90In0sY29uc3RyYWludG93YXJkOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxlZGl0VHlwZToicGxvdCJ9LG1hdGNoZXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbbC5pZFJlZ2V4LngudG9TdHJpbmcoKSxsLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHRpY2ttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGluZWFyIiwiYXJyYXkiXSxlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGljazA6dm9pZCAwLGR0aWNrOnZvaWQgMH19LG50aWNrczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2swOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrbW9kZToibGluZWFyIn19LGR0aWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrbW9kZToibGluZWFyIn19LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToidGlja3MifSx0aWNrdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3M6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm91dHNpZGUiLCJpbnNpZGUiLCIiXSxlZGl0VHlwZToidGlja3MifSx0aWNrc29uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYWJlbHMiLCJib3VuZGFyaWVzIl0sZGZsdDoibGFiZWxzIixlZGl0VHlwZToidGlja3MifSxtaXJyb3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInRpY2tzIiwhMSwiYWxsIiwiYWxsdGlja3MiXSxkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcytsYXlvdXRzdHlsZSJ9LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1LGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2t3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGF1dG9tYXJnaW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3NwaWtlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToibW9kZWJhciJ9LHNwaWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om51bGwsZWRpdFR5cGU6Im5vbmUifSxzcGlrZXRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixkZmx0OjMsZWRpdFR5cGU6Im5vbmUifSxzcGlrZWRhc2g6byh7fSxhLHtkZmx0OiJkYXNoIixlZGl0VHlwZToibm9uZSJ9KSxzcGlrZW1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInRvYXhpcyIsImFjcm9zcyIsIm1hcmtlciJdLGRmbHQ6InRvYXhpcyIsZWRpdFR5cGU6Im5vbmUifSxzcGlrZXNuYXA6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRhdGEiLCJjdXJzb3IiXSxkZmx0OiJkYXRhIixlZGl0VHlwZToibm9uZSJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIixlZGl0VHlwZToidGlja3MifSx0aWNrcHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIixlZGl0VHlwZToidGlja3MifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sdGlja2Zvcm1hdHN0b3BzOnMoInRpY2tmb3JtYXRzdG9wIix7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkdGlja3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn1dLGVkaXRUeXBlOiJ0aWNrcyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sZWRpdFR5cGU6InRpY2tzIn0pLGhvdmVyZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUifSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToidGlja3MifSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dkaXZpZGVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkaXZpZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sZGl2aWRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSxhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLGwuaWRSZWdleC54LnRvU3RyaW5nKCksbC5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LG92ZXJsYXlpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLGwuaWRSZWdleC54LnRvU3RyaW5nKCksbC5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWJvdmUgdHJhY2VzIiwiYmVsb3cgdHJhY2VzIl0sZGZsdDoiYWJvdmUgdHJhY2VzIixlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifV0sZGZsdDpbMCwxXSxlZGl0VHlwZToicGxvdCJ9LHBvc2l0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY2F0ZWdvcnkgYXNjZW5kaW5nIiwiY2F0ZWdvcnkgZGVzY2VuZGluZyIsImFycmF5Il0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJjYWxjIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vZm9udF9hdHRyaWJ1dGVzIjo3NzQsIi4vY29uc3RhbnRzIjo3NTR9XSw3NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGw9dCgiLi90eXBlX2RlZmF1bHRzIiksYz10KCIuL2F4aXNfZGVmYXVsdHMiKSx1PXQoIi4vY29uc3RyYWludHMiKS5oYW5kbGVDb25zdHJhaW50RGVmYXVsdHMsZj10KCIuL3Bvc2l0aW9uX2RlZmF1bHRzIiksaD10KCIuL2F4aXNfaWRzIikscD1oLmlkMm5hbWUsZD1oLm5hbWUyaWQsZz10KCIuLi8uLi9yZWdpc3RyeSIpLHY9Zy50cmFjZUlzLG09Zy5nZXRDb21wb25lbnRNZXRob2Q7ZnVuY3Rpb24geSh0LGUscil7QXJyYXkuaXNBcnJheSh0W2VdKT90W2VdLnB1c2gocik6dFtlXT1bcl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaCxnLHg9e30sYj17fSxfPXt9LHc9e30saz17fTtmb3IoaD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgVD1yW2hdO2lmKHYoVCwiY2FydGVzaWFuIil8fHYoVCwiZ2wyZCIpKXt2YXIgQSxNO2lmKFQueGF4aXMpeSh4LEE9cChULnhheGlzKSxUKTtlbHNlIGlmKFQueGF4ZXMpZm9yKGc9MDtnPFQueGF4ZXMubGVuZ3RoO2crKyl5KHgscChULnhheGVzW2ddKSxUKTtpZihULnlheGlzKXkoeCxNPXAoVC55YXhpcyksVCk7ZWxzZSBpZihULnlheGVzKWZvcihnPTA7ZzxULnlheGVzLmxlbmd0aDtnKyspeSh4LHAoVC55YXhlc1tnXSksVCk7aWYodihULCJjYXJwZXQiKSYmKCJjYXJwZXQiIT09VC50eXBlfHxULl9jaGVhdGVyKXx8QSYmKF9bQV09MSksImNhcnBldCI9PT1ULnR5cGUmJlQuX2NoZWF0ZXImJkEmJihiW0FdPTEpLHYoVCwiMmRNYXAiKSYmKHdbQV09MSx3W01dPTEpLHYoVCwib3JpZW50ZWQiKSlrWyJoIj09PVQub3JpZW50YXRpb24/TTpBXT0xfX12YXIgUz1lLl9zdWJwbG90cyxFPVMueGF4aXMsQz1TLnlheGlzLEw9bi5zaW1wbGVNYXAoRSxwKSx6PW4uc2ltcGxlTWFwKEMscCksTz1MLmNvbmNhdCh6KSxJPWkuYmFja2dyb3VuZDtFLmxlbmd0aCYmQy5sZW5ndGgmJihJPW4uY29lcmNlKHQsZSxvLCJwbG90X2JnY29sb3IiKSk7dmFyIEQsUCxSLEYsQj1pLmNvbWJpbmUoSSxlLnBhcGVyX2JnY29sb3IpO2Z1bmN0aW9uIE4odCxlKXtyZXR1cm4gbi5jb2VyY2UoUixGLHMsdCxlKX1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIG4uY29lcmNlMihSLEYscyx0LGUpfWZ1bmN0aW9uIFYodCl7cmV0dXJuIngiPT09dD9DOkV9dmFyIFU9e3g6VigieCIpLHk6VigieSIpfSxxPVUueC5jb25jYXQoVS55KTtmdW5jdGlvbiBIKGUscil7Zm9yKHZhciBuPSJ4Ij09PWU/TDp6LGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdO289PT1yfHwodFtvXXx8e30pLm92ZXJsYXlpbmd8fGkucHVzaChkKG8pKX1yZXR1cm4gaX1mb3IoaD0wO2g8Ty5sZW5ndGg7aCsrKXtQPShEPU9baF0pLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QodFtEXSl8fCh0W0RdPXt9KSxSPXRbRF0sRj1hLm5ld0NvbnRhaW5lcihlLEQsUCsiYXhpcyIpO3ZhciBHPXhbRF18fFtdO0YuX3RyYWNlSW5kaWNlcz1HLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pLEYuX2FubkluZGljZXM9W10sRi5fc2hhcGVJbmRpY2VzPVtdLEYuX2ltZ0luZGljZXM9W10sRi5fc3VicGxvdHNXaXRoPVtdLEYuX2NvdW50ZXJBeGVzPVtdLEYuX25hbWU9Ri5fYXR0cj1EO3ZhciBZPUYuX2lkPWQoRCksVz1IKFAsRCksWD17bGV0dGVyOlAsZm9udDplLmZvbnQsb3V0ZXJUaWNrczp3W0RdLHNob3dHcmlkOiFrW0RdLGRhdGE6RyxiZ0NvbG9yOkIsY2FsZW5kYXI6ZS5jYWxlbmRhcixhdXRvbWFyZ2luOiEwLGNoZWF0ZXJvbmx5OiJ4Ij09PVAmJmJbRF0mJiFfW0RdLHNwbG9tU3Rhc2g6KChlLl9zcGxvbUF4ZXN8fHt9KVtQXXx8e30pW1ldfTtOKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLGwoUixGLE4sWCksYyhSLEYsTixYLGUpO3ZhciBaPWooInNwaWtlY29sb3IiKSwkPWooInNwaWtldGhpY2tuZXNzIiksSj1qKCJzcGlrZWRhc2giKSxLPWooInNwaWtlbW9kZSIpLFE9aigic3Bpa2VzbmFwIik7Tigic2hvd3NwaWtlcyIsISEoWnx8JHx8Snx8S3x8USkpfHwoZGVsZXRlIEYuc3Bpa2Vjb2xvcixkZWxldGUgRi5zcGlrZXRoaWNrbmVzcyxkZWxldGUgRi5zcGlrZWRhc2gsZGVsZXRlIEYuc3Bpa2Vtb2RlLGRlbGV0ZSBGLnNwaWtlc25hcCksZihSLEYsTix7bGV0dGVyOlAsY291bnRlckF4ZXM6VVtQXSxvdmVybGF5YWJsZUF4ZXM6VyxncmlkOmUuZ3JpZH0pLEYuX2lucHV0PVJ9dmFyIHR0PW0oInJhbmdlc2xpZGVyIiwiaGFuZGxlRGVmYXVsdHMiKSxldD1tKCJyYW5nZXNlbGVjdG9yIiwiaGFuZGxlRGVmYXVsdHMiKTtmb3IoaD0wO2g8TC5sZW5ndGg7aCsrKUQ9TFtoXSxSPXRbRF0sRj1lW0RdLHR0KHQsZSxEKSwiZGF0ZSI9PT1GLnR5cGUmJmV0KFIsRixlLHosRi5jYWxlbmRhciksTigiZml4ZWRyYW5nZSIpO2ZvcihoPTA7aDx6Lmxlbmd0aDtoKyspe0Q9eltoXSxSPXRbRF0sRj1lW0RdO3ZhciBydD1lW3AoRi5hbmNob3IpXTtOKCJmaXhlZHJhbmdlIixtKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKHJ0KSl9dmFyIG50PWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdLGl0PWUuX2F4aXNNYXRjaEdyb3Vwcz1bXTtmb3IoaD0wO2g8Ty5sZW5ndGg7aCsrKVA9KEQ9T1toXSkuY2hhckF0KDApLFI9dFtEXSxGPWVbRF0sdShSLEYsTixxLGUpO2ZvcihoPTA7aDxpdC5sZW5ndGg7aCsrKXt2YXIgYXQsb3Q9aXRbaF0sc3Q9bnVsbCxsdD1udWxsO2ZvcihhdCBpbiBvdCkoRj1lW3AoYXQpXSkubWF0Y2hlc3x8KHN0PUYucmFuZ2UsbHQ9Ri5hdXRvcmFuZ2UpO2lmKG51bGw9PT1zdHx8bnVsbD09PWx0KWZvcihhdCBpbiBvdCl7c3Q9KEY9ZVtwKGF0KV0pLnJhbmdlLGx0PUYuYXV0b3JhbmdlO2JyZWFrfWZvcihhdCBpbiBvdCkoRj1lW3AoYXQpXSkubWF0Y2hlcyYmKEYucmFuZ2U9c3Quc2xpY2UoKSxGLmF1dG9yYW5nZT1sdCksRi5fbWF0Y2hHcm91cD1vdDtpZihudC5sZW5ndGgpZm9yKGF0IGluIG90KWZvcihnPTA7ZzxudC5sZW5ndGg7ZysrKXt2YXIgY3Q9bnRbZ107Zm9yKHZhciB1dCBpbiBjdClhdD09PXV0JiYobi53YXJuKCJBeGlzICIrdXQrIiBpcyBzZXQgd2l0aCBib3RoIGEgKnNjYWxlYW5jaG9yKiBhbmQgKm1hdGNoZXMqIGNvbnN0cmFpbnQ7IGlnbm9yaW5nIHRoZSBzY2FsZSBjb25zdHJhaW50LiIpLGRlbGV0ZSBjdFt1dF0sT2JqZWN0LmtleXMoY3QpLmxlbmd0aDwyJiZudC5zcGxpY2UoZywxKSl9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6ODAxLCIuL2F4aXNfZGVmYXVsdHMiOjc1MCwiLi9heGlzX2lkcyI6NzUxLCIuL2NvbnN0cmFpbnRzIjo3NTUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MCwiLi9wb3NpdGlvbl9kZWZhdWx0cyI6NzYzLCIuL3R5cGVfZGVmYXVsdHMiOjc3MX1dLDc2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikubGlnaHRGcmFjdGlvbixhPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz0obz1vfHx7fSkuZGZsdENvbG9yO2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gYS5jb2VyY2UyKHQsZSxvLmF0dHJpYnV0ZXMscixuKX12YXIgYz1sKCJsaW5lY29sb3IiLHMpLHU9bCgibGluZXdpZHRoIik7cigic2hvd2xpbmUiLG8uc2hvd0xpbmV8fCEhY3x8ISF1KXx8KGRlbGV0ZSBlLmxpbmVjb2xvcixkZWxldGUgZS5saW5ld2lkdGgpO3ZhciBmPWwoImdyaWRjb2xvciIsbihzLG8uYmdDb2xvcixvLmJsZW5kfHxpKS50b1JnYlN0cmluZygpKSxoPWwoImdyaWR3aWR0aCIpO2lmKHIoInNob3dncmlkIixvLnNob3dHcmlkfHwhIWZ8fCEhaCl8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKSwhby5ub1plcm9MaW5lKXt2YXIgcD1sKCJ6ZXJvbGluZWNvbG9yIixzKSxkPWwoInplcm9saW5ld2lkdGgiKTtyKCJ6ZXJvbGluZSIsby5zaG93R3JpZHx8ISFwfHwhIWQpfHwoZGVsZXRlIGUuemVyb2xpbmVjb2xvcixkZWxldGUgZS56ZXJvbGluZXdpZHRoKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9saWIiOjcwMCx0aW55Y29sb3IyOjUyMX1dLDc2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbCxjLHU9YS5jb3VudGVyQXhlc3x8W10sZj1hLm92ZXJsYXlhYmxlQXhlc3x8W10saD1hLmxldHRlcixwPWEuZ3JpZDtwJiYocz1wLl9kb21haW5zW2hdW3AuX2F4aXNNYXBbZS5faWRdXSxvPXAuX2FuY2hvcnNbZS5faWRdLHMmJihsPXBbaCsic2lkZSJdLnNwbGl0KCIgIilbMF0sYz1wLmRvbWFpbltoXVsicmlnaHQiPT09bHx8InRvcCI9PT1sPzE6MF0pKSxzPXN8fFswLDFdLG89b3x8KG4odC5wb3NpdGlvbik/ImZyZWUiOnVbMF18fCJmcmVlIiksbD1sfHwoIngiPT09aD8iYm90dG9tIjoibGVmdCIpLGM9Y3x8MCwiZnJlZSI9PT1pLmNvZXJjZSh0LGUse2FuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSJdLmNvbmNhdCh1KSxkZmx0Om99fSwiYW5jaG9yIikmJnIoInBvc2l0aW9uIixjKSxpLmNvZXJjZSh0LGUse3NpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczoieCI9PT1oP1siYm90dG9tIiwidG9wIl06WyJsZWZ0IiwicmlnaHQiXSxkZmx0Omx9fSwic2lkZSIpO3ZhciBkPSExO2lmKGYubGVuZ3RoJiYoZD1pLmNvZXJjZSh0LGUse292ZXJsYXlpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITFdLmNvbmNhdChmKSxkZmx0OiExfX0sIm92ZXJsYXlpbmciKSksIWQpe3ZhciBnPXIoImRvbWFpbiIscyk7Z1swXT5nWzFdLTEvNDA5NiYmKGUuZG9tYWluPXMpLGkubm9uZU9yQWxsKHQuZG9tYWluLGUuZG9tYWluLHMpfXJldHVybiByKCJsYXllciIpLGV9fSx7Ii4uLy4uL2xpYiI6NzAwLCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sNzY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ciYmKHI9blt0LmNvbnN0cmFpbnRvd2FyZHx8ImNlbnRlciJdKTt2YXIgaT1bdC5yMmwodC5yYW5nZVswXSksdC5yMmwodC5yYW5nZVsxXSldLGE9aVswXSsoaVsxXS1pWzBdKSpyO3QucmFuZ2U9dC5faW5wdXQucmFuZ2U9W3QubDJyKGErKGlbMF0tYSkqZSksdC5sMnIoYSsoaVsxXS1hKSplKV19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY3Mn1dLDc2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwb2x5Ym9vbGpzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHM9dCgiLi4vLi4vbGliL3BvbHlnb24iKSxsPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikubWFrZUV2ZW50RGF0YSx1PXQoIi4vYXhpc19pZHMiKS5nZXRGcm9tSWQsZj10KCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSxoPXQoIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIikucmVkcmF3UmVnbFRyYWNlcyxwPXQoIi4vY29uc3RhbnRzIiksZD1wLk1JTlNFTEVDVCxnPXMuZmlsdGVyLHY9cy50ZXN0ZXI7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24geSh0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmLGgscCxkLGcsdj1lLl9ob3ZlcmRhdGEsbT1lLl9mdWxsTGF5b3V0LmNsaWNrbW9kZS5pbmRleE9mKCJldmVudCIpPi0xLHk9W107aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LmlzQXJyYXkodCkmJiEwIT09dFswXS5ob3Zlck9uQm94fSh2KSl7dyh0LGUsYSk7dmFyIHg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPS0xLG89W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0saS5mdWxsRGF0YS5fZXhwYW5kZWRJbmRleD09PXIuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXgpe2lmKCEwPT09aS5ob3Zlck9uQm94KWJyZWFrO3ZvaWQgMCE9PWkucG9pbnROdW1iZXI/YT1pLnBvaW50TnVtYmVyOnZvaWQgMCE9PWkuYmluTnVtYmVyJiYoYT1pLmJpbk51bWJlcixvPWkucG9pbnROdW1iZXJzKTticmVha31yZXR1cm57cG9pbnROdW1iZXI6YSxwb2ludE51bWJlcnM6byxzZWFyY2hJbmZvOnJ9fSh2LHM9VChlLHIsbixpKSk7aWYoeC5wb2ludE51bWJlcnMubGVuZ3RoPjA/ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKShyPXRbaV0pLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzJiZyLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD4wJiZhLnB1c2gocik7aWYoMT09PWEubGVuZ3RoJiZhWzBdPT09ZS5zZWFyY2hJbmZvJiYobj1lLnNlYXJjaEluZm8uY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD09PWUucG9pbnROdW1iZXJzLmxlbmd0aCl7Zm9yKGk9MDtpPGUucG9pbnROdW1iZXJzLmxlbmd0aDtpKyspaWYobi5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGUucG9pbnROdW1iZXJzW2ldKTwwKXJldHVybiExO3JldHVybiEwfXJldHVybiExfShzLHgpOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTA7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPXRbbl0sKHI9ZS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMpe2lmKHIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjEpcmV0dXJuITE7aWYoKGkrPXIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoKT4xKXJldHVybiExfXJldHVybiAxPT09aX0ocykmJihoPU0oeCkpKXtmb3IobyYmby5yZW1vdmUoKSxnPTA7ZzxzLmxlbmd0aDtnKyspKGw9c1tnXSkuX21vZHVsZS5zZWxlY3RQb2ludHMobCwhMSk7UyhlLHMpLGsoYSksbSYmZS5lbWl0KCJwbG90bHlfZGVzZWxlY3QiLG51bGwpfWVsc2V7Zm9yKHA9dC5zaGlmdEtleSYmKHZvaWQgMCE9PWg/aDpNKHgpKSxjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57cG9pbnROdW1iZXI6dCxzZWFyY2hJbmZvOmUsc3VidHJhY3Q6cn19KHgucG9pbnROdW1iZXIseC5zZWFyY2hJbmZvLHApLHU9XyhhLnNlbGVjdGlvbkRlZnMuY29uY2F0KFtjXSkpLGc9MDtnPHMubGVuZ3RoO2crKylpZihmPUUoc1tnXS5fbW9kdWxlLnNlbGVjdFBvaW50cyhzW2ddLHUpLHNbZ10pLHkubGVuZ3RoKWZvcih2YXIgYj0wO2I8Zi5sZW5ndGg7YisrKXkucHVzaChmW2JdKTtlbHNlIHk9ZjtTKGUscyxkPXtwb2ludHM6eX0pLGMmJmEmJmEuc2VsZWN0aW9uRGVmcy5wdXNoKGMpLG8mJkEoYS5tZXJnZWRQb2x5Z29ucyxvKSxtJiZlLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsZCl9fX1mdW5jdGlvbiB4KHQpe3JldHVybiJwb2ludE51bWJlciJpbiB0JiYic2VhcmNoSW5mbyJpbiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJue3htaW46MCx4bWF4OjAseW1pbjowLHltYXg6MCxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4O3JldHVybiBpLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4PT09YSYmbj09PXQucG9pbnROdW1iZXJ9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExLHN1YnRyYWN0OnQuc3VidHJhY3R9fWZ1bmN0aW9uIF8odCl7Zm9yKHZhciBlPVtdLHI9eCh0WzBdKT8wOnRbMF1bMF1bMF0sbj1yLGk9eCh0WzBdKT8wOnRbMF1bMF1bMV0sYT1pLG89MDtvPHQubGVuZ3RoO28rKylpZih4KHRbb10pKWUucHVzaChiKHRbb10pKTtlbHNle3ZhciBsPXMudGVzdGVyKHRbb10pO2wuc3VidHJhY3Q9dFtvXS5zdWJ0cmFjdCxlLnB1c2gobCkscj1NYXRoLm1pbihyLGwueG1pbiksbj1NYXRoLm1heChuLGwueG1heCksaT1NYXRoLm1pbihpLGwueW1pbiksYT1NYXRoLm1heChhLGwueW1heCl9cmV0dXJue3htaW46cix4bWF4Om4seW1pbjppLHltYXg6YSxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24odCxyLG4saSl7Zm9yKHZhciBhPSExLG89MDtvPGUubGVuZ3RoO28rKyllW29dLmNvbnRhaW5zKHQscixuLGkpJiYoYT0hMT09PWVbb10uc3VidHJhY3QpO3JldHVybiBhfSxpc1JlY3Q6ITEsZGVnZW5lcmF0ZTohMX19ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49ZS5fZnVsbExheW91dCxpPW4uX3pvb21sYXllcixhPXIucGxvdGluZm8sbz1uLl9sYXN0U2VsZWN0ZWRTdWJwbG90JiZuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PT09YS5pZCxzPXQuc2hpZnRLZXl8fHQuYWx0S2V5O28mJnMmJmEuc2VsZWN0aW9uJiZhLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzJiYhci5zZWxlY3Rpb25EZWZzPyhyLnNlbGVjdGlvbkRlZnM9YS5zZWxlY3Rpb24uc2VsZWN0aW9uRGVmcyxyLm1lcmdlZFBvbHlnb25zPWEuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zKTpzJiZhLnNlbGVjdGlvbnx8ayhyKSxvfHwoQyhpKSxuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PWEuaWQpfWZ1bmN0aW9uIGsodCl7dmFyIGU9dC5wbG90aW5mbztlLnNlbGVjdGlvbj17fSxlLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzPXQuc2VsZWN0aW9uRGVmcz1bXSxlLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucz10Lm1lcmdlZFBvbHlnb25zPVtdfWZ1bmN0aW9uIFQodCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD1lLm1hcChtKSxjPXIubWFwKG0pO2ZvcihvPTA7bzx0LmNhbGNkYXRhLmxlbmd0aDtvKyspaWYoITA9PT0oYT0oaT10LmNhbGNkYXRhW29dKVswXS50cmFjZSkudmlzaWJsZSYmYS5fbW9kdWxlJiZhLl9tb2R1bGUuc2VsZWN0UG9pbnRzKWlmKCFufHxhLnN1YnBsb3QhPT1uJiZhLmdlbyE9PW4paWYoInNwbG9tIj09PWEudHlwZSYmYS5feGF4ZXNbbFswXV0mJmEuX3lheGVzW2NbMF1dKXt2YXIgZj1oKGEuX21vZHVsZSxpLGVbMF0sclswXSk7Zi5zY2VuZT10Ll9mdWxsTGF5b3V0Ll9zcGxvbVNjZW5lc1thLnVpZF0scy5wdXNoKGYpfWVsc2V7aWYoLTE9PT1sLmluZGV4T2YoYS54YXhpcykpY29udGludWU7aWYoLTE9PT1jLmluZGV4T2YoYS55YXhpcykpY29udGludWU7cy5wdXNoKGgoYS5fbW9kdWxlLGksdSh0LGEueGF4aXMpLHUodCxhLnlheGlzKSkpfWVsc2Ugcy5wdXNoKGgoYS5fbW9kdWxlLGksZVswXSxyWzBdKSk7cmV0dXJuIHM7ZnVuY3Rpb24gaCh0LGUscixuKXtyZXR1cm57X21vZHVsZTp0LGNkOmUseGF4aXM6cix5YXhpczpufX19ZnVuY3Rpb24gQSh0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2kucHVzaChhLmpvaW4oIkwiKSsiTCIrYVswXSl9bj10Lmxlbmd0aD4wPyJNIitpLmpvaW4oIk0iKSsiWiI6Ik0wLDBaIixlLmF0dHIoImQiLG4pfWZ1bmN0aW9uIE0odCl7dmFyIGU9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLHI9dC5wb2ludE51bWJlcixuPXQucG9pbnROdW1iZXJzLGk9bi5sZW5ndGg+MD9uWzBdOnI7cmV0dXJuISFlLnNlbGVjdGVkcG9pbnRzJiZlLnNlbGVjdGVkcG9pbnRzLmluZGV4T2YoaSk+LTF9ZnVuY3Rpb24gUyh0LGUscil7dmFyIG4sYSxvLHM7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGw9ZVtuXS5jZFswXS50cmFjZS5fZnVsbElucHV0LGM9dC5fZnVsbExheW91dC5fdHJhY2VQcmVHVUlbbC51aWRdO3ZvaWQgMD09PWMuc2VsZWN0ZWRwb2ludHMmJihjLnNlbGVjdGVkcG9pbnRzPWwuX2lucHV0LnNlbGVjdGVkcG9pbnRzfHxudWxsKX1pZihyKXt2YXIgdT1yLnBvaW50c3x8W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocz1lW25dLmNkWzBdLnRyYWNlKS5faW5wdXQuc2VsZWN0ZWRwb2ludHM9cy5fZnVsbElucHV0LnNlbGVjdGVkcG9pbnRzPVtdLHMuX2Z1bGxJbnB1dCE9PXMmJihzLnNlbGVjdGVkcG9pbnRzPVtdKTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgcD11W25dLGQ9cC5kYXRhLGc9cC5mdWxsRGF0YTtwLnBvaW50SW5kaWNlcz8oW10ucHVzaC5hcHBseShkLnNlbGVjdGVkcG9pbnRzLHAucG9pbnRJbmRpY2VzKSxzLl9mdWxsSW5wdXQhPT1zJiZbXS5wdXNoLmFwcGx5KGcuc2VsZWN0ZWRwb2ludHMscC5wb2ludEluZGljZXMpKTooZC5zZWxlY3RlZHBvaW50cy5wdXNoKHAucG9pbnRJbmRleCkscy5fZnVsbElucHV0IT09cyYmZy5zZWxlY3RlZHBvaW50cy5wdXNoKHAucG9pbnRJbmRleCkpfX1lbHNlIGZvcihuPTA7bjxlLmxlbmd0aDtuKyspZGVsZXRlKHM9ZVtuXS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMsZGVsZXRlIHMuX2lucHV0LnNlbGVjdGVkcG9pbnRzLHMuX2Z1bGxJbnB1dCE9PXMmJmRlbGV0ZSBzLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM7dmFyIHY9ITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7cz0obz0oYT1lW25dKS5jZClbMF0udHJhY2UsaS50cmFjZUlzKHMsInJlZ2wiKSYmKHY9ITApO3ZhciBtPWEuX21vZHVsZSx5PW0uc3R5bGVPblNlbGVjdHx8bS5zdHlsZTt5JiZ5KHQsbyl9diYmKGYodCksaCh0KSl9ZnVuY3Rpb24gRSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPWUuY2Qsbj1lLmNkWzBdLnRyYWNlLGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldPWModFtpXSxuLHIpO3JldHVybiB0fWZ1bmN0aW9uIEModCl7dC5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZSIpLnJlbW92ZSgpfWUuZXhwb3J0cz17cHJlcFNlbGVjdDpmdW5jdGlvbih0LGUscixpLHMpe3ZhciBjLHUsZixoLG0seCxiLE09aS5nZCxDPU0uX2Z1bGxMYXlvdXQsTD1DLl96b29tbGF5ZXIsej1pLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksTz1pLnBsb3RpbmZvLEk9Ty54YXhpcy5fb2Zmc2V0LEQ9Ty55YXhpcy5fb2Zmc2V0LFA9ZS16LmxlZnQsUj1yLXoudG9wLEY9UCxCPVIsTj0iTSIrUCsiLCIrUixqPWkueGF4ZXNbMF0uX2xlbmd0aCxWPWkueWF4ZXNbMF0uX2xlbmd0aCxVPWkueGF4ZXMuY29uY2F0KGkueWF4ZXMpLHE9dC5hbHRLZXk7dyh0LE0saSksImxhc3NvIj09PXMmJihjPWcoW1tQLFJdXSxwLkJFTkRQWCkpO3ZhciBIPUwuc2VsZWN0QWxsKCJwYXRoLnNlbGVjdC1vdXRsaW5lLSIrTy5pZCkuZGF0YShbMSwyXSk7SC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4ic2VsZWN0LW91dGxpbmUgc2VsZWN0LW91dGxpbmUtIit0KyIgc2VsZWN0LW91dGxpbmUtIitPLmlkfSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSSsiLCAiK0QrIikiKS5hdHRyKCJkIixOKyJaIik7dmFyIEcsWT1MLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuc3R5bGUoe2ZpbGw6YS5iYWNrZ3JvdW5kLHN0cm9rZTphLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOjF9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitJKyIsICIrRCsiKSIpLmF0dHIoImQiLCJNMCwwWiIpLFc9Qy5fdWlkK3AuU0VMRUNUSUQsWD1bXSxaPVQoTSxpLnhheGVzLGkueWF4ZXMsaS5zdWJwbG90KTtmdW5jdGlvbiAkKHQpe3ZhciBlPSJ5Ij09PXQuX2lkLmNoYXJBdCgwKT8xOjA7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LnAyZChyW2VdKX19ZnVuY3Rpb24gSih0LGUpe3JldHVybiB0LWV9Rz1PLmZpbGxSYW5nZUl0ZW1zP08uZmlsbFJhbmdlSXRlbXM6InNlbGVjdCI9PT1zP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3IobT0wO208VS5sZW5ndGg7bSsrKXt2YXIgbj1VW21dLGk9bi5faWQuY2hhckF0KDApO3Jbbi5faWRdPVtuLnAyZChlW2krIm1pbiJdKSxuLnAyZChlW2krIm1heCJdKV0uc29ydChKKX19OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lmxhc3NvUG9pbnRzPXt9O2ZvcihtPTA7bTxVLmxlbmd0aDttKyspe3ZhciBpPVVbbV07bltpLl9pZF09ci5maWx0ZXJlZC5tYXAoJChpKSl9fSxpLm1vdmVGbj1mdW5jdGlvbih0LGUpe0Y9TWF0aC5tYXgoMCxNYXRoLm1pbihqLHQrUCkpLEI9TWF0aC5tYXgoMCxNYXRoLm1pbihWLGUrUikpO3ZhciByPU1hdGguYWJzKEYtUCksYT1NYXRoLmFicyhCLVIpO2lmKCJzZWxlY3QiPT09cyl7dmFyIG89Qy5zZWxlY3RkaXJlY3Rpb247ImgiPT09KG89ImFueSI9PT1DLnNlbGVjdGRpcmVjdGlvbj9hPE1hdGgubWluKC42KnIsZCk/ImgiOnI8TWF0aC5taW4oLjYqYSxkKT8idiI6ImQiOkMuc2VsZWN0ZGlyZWN0aW9uKT8oKGg9W1tQLDBdLFtQLFZdLFtGLFZdLFtGLDBdXSkueG1pbj1NYXRoLm1pbihQLEYpLGgueG1heD1NYXRoLm1heChQLEYpLGgueW1pbj1NYXRoLm1pbigwLFYpLGgueW1heD1NYXRoLm1heCgwLFYpLFkuYXR0cigiZCIsIk0iK2gueG1pbisiLCIrKFItZCkrImgtNHYiKzIqZCsiaDRaTSIrKGgueG1heC0xKSsiLCIrKFItZCkrImg0diIrMipkKyJoLTRaIikpOiJ2Ij09PW8/KChoPVtbMCxSXSxbMCxCXSxbaixCXSxbaixSXV0pLnhtaW49TWF0aC5taW4oMCxqKSxoLnhtYXg9TWF0aC5tYXgoMCxqKSxoLnltaW49TWF0aC5taW4oUixCKSxoLnltYXg9TWF0aC5tYXgoUixCKSxZLmF0dHIoImQiLCJNIisoUC1kKSsiLCIraC55bWluKyJ2LTRoIisyKmQrInY0Wk0iKyhQLWQpKyIsIisoaC55bWF4LTEpKyJ2NGgiKzIqZCsidi00WiIpKToiZCI9PT1vJiYoKGg9W1tQLFJdLFtQLEJdLFtGLEJdLFtGLFJdXSkueG1pbj1NYXRoLm1pbihQLEYpLGgueG1heD1NYXRoLm1heChQLEYpLGgueW1pbj1NYXRoLm1pbihSLEIpLGgueW1heD1NYXRoLm1heChSLEIpLFkuYXR0cigiZCIsIk0wLDBaIikpfWVsc2UibGFzc28iPT09cyYmKGMuYWRkUHQoW0YsQl0pLGg9Yy5maWx0ZXJlZCk7aS5zZWxlY3Rpb25EZWZzJiZpLnNlbGVjdGlvbkRlZnMubGVuZ3RoPyhmPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcj9uLmRpZmZlcmVuY2Uoe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9uczpuLnVuaW9uKHtyZWdpb25zOnQsaW52ZXJ0ZWQ6ITF9LHtyZWdpb25zOltlXSxpbnZlcnRlZDohMX0pLnJlZ2lvbnN9KGkubWVyZ2VkUG9seWdvbnMsaCxxKSxoLnN1YnRyYWN0PXEsdT1fKGkuc2VsZWN0aW9uRGVmcy5jb25jYXQoW2hdKSkpOihmPVtoXSx1PXYoaCkpLEEoZixIKSxsLnRocm90dGxlKFcscC5TRUxFQ1RERUxBWSxmdW5jdGlvbigpe3ZhciB0O1g9W107dmFyIGUscj1bXTtmb3IobT0wO208Wi5sZW5ndGg7bSsrKWlmKGU9KHg9WlttXSkuX21vZHVsZS5zZWxlY3RQb2ludHMoeCx1KSxyLnB1c2goZSksdD1FKGUseCksWC5sZW5ndGgpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspWC5wdXNoKHRbbl0pO2Vsc2UgWD10O1MoTSxaLGI9e3BvaW50czpYfSksRyhiLGgsYyksaS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0aW5nIixiKX0pfSxpLmNsaWNrRm49ZnVuY3Rpb24odCxlKXt2YXIgcj1DLmNsaWNrbW9kZTtZLnJlbW92ZSgpLGwuZG9uZShXKS50aGVuKGZ1bmN0aW9uKCl7aWYobC5jbGVhcihXKSwyPT09dCl7Zm9yKEgucmVtb3ZlKCksbT0wO208Wi5sZW5ndGg7bSsrKSh4PVpbbV0pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHgsITEpO1MoTSxaKSxrKGkpLE0uZW1pdCgicGxvdGx5X2Rlc2VsZWN0IixudWxsKX1lbHNlIHIuaW5kZXhPZigic2VsZWN0Iik+LTEmJnkoZSxNLGkueGF4ZXMsaS55YXhlcyxpLnN1YnBsb3QsaSxIKSwiZXZlbnQiPT09ciYmTS5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLHZvaWQgMCk7by5jbGljayhNLGUpfSl9LGkuZG9uZUZuPWZ1bmN0aW9uKCl7WS5yZW1vdmUoKSxsLmRvbmUoVykudGhlbihmdW5jdGlvbigpe2wuY2xlYXIoVyksaS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLGIpLGgmJmkuc2VsZWN0aW9uRGVmcyYmKGguc3VidHJhY3Q9cSxpLnNlbGVjdGlvbkRlZnMucHVzaChoKSxpLm1lcmdlZFBvbHlnb25zLmxlbmd0aD0wLFtdLnB1c2guYXBwbHkoaS5tZXJnZWRQb2x5Z29ucyxmKSl9KX19LGNsZWFyU2VsZWN0OkMsc2VsZWN0T25DbGljazp5fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2MTIsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6Njg1LCIuLi8uLi9saWIvcG9seWdvbiI6NzEyLCIuLi8uLi9saWIvdGhyb3R0bGUiOjcyNSwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjczOSwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9heGlzX2lkcyI6NzUxLCIuL2NvbnN0YW50cyI6NzU0LHBvbHlib29sanM6NDY1fV0sNzY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz1hLmNsZWFuTnVtYmVyLHM9YS5tczJEYXRlVGltZSxsPWEuZGF0ZVRpbWUybXMsYz1hLmVuc3VyZU51bWJlcix1PWEuaXNBcnJheU9yVHlwZWRBcnJheSxmPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxoPWYuRlBfU0FGRSxwPWYuQkFETlVNLGQ9Zi5MT0dfQ0xJUCxnPXQoIi4vY29uc3RhbnRzIiksdj10KCIuL2F4aXNfaWRzIik7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gTWF0aC5wb3coMTAsdCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbnVsbCE9dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXQuX2lkfHwieCIsZj1yLmNoYXJBdCgwKTtmdW5jdGlvbiB4KGUscil7aWYoZT4wKXJldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMTA7aWYoZTw9MCYmciYmdC5yYW5nZSYmMj09PXQucmFuZ2UubGVuZ3RoKXt2YXIgbj10LnJhbmdlWzBdLGk9dC5yYW5nZVsxXTtyZXR1cm4uNSoobitpLTIqZCpNYXRoLmFicyhuLWkpKX1yZXR1cm4gcH1mdW5jdGlvbiBiKGUscixuKXt2YXIgbz1sKGUsbnx8dC5jYWxlbmRhcik7aWYobz09PXApe2lmKCFpKGUpKXJldHVybiBwO2U9K2U7dmFyIHM9TWF0aC5mbG9vcigxMCphLm1vZChlKy4wNSwxKSksYz1NYXRoLnJvdW5kKGUtcy8xMCk7bz1sKG5ldyBEYXRlKGMpKStzLzEwfXJldHVybiBvfWZ1bmN0aW9uIF8oZSxyLG4pe3JldHVybiBzKGUscixufHx0LmNhbGVuZGFyKX1mdW5jdGlvbiB3KGUpe3JldHVybiB0Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZSldfWZ1bmN0aW9uIGsoZSl7aWYoeShlKSl7aWYodm9pZCAwPT09dC5fY2F0ZWdvcmllc01hcCYmKHQuX2NhdGVnb3JpZXNNYXA9e30pLHZvaWQgMCE9PXQuX2NhdGVnb3JpZXNNYXBbZV0pcmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV07dC5fY2F0ZWdvcmllcy5wdXNoKGUpO3ZhciByPXQuX2NhdGVnb3JpZXMubGVuZ3RoLTE7cmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV09cixyfXJldHVybiBwfWZ1bmN0aW9uIFQoZSl7aWYodC5fY2F0ZWdvcmllc01hcClyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXX1mdW5jdGlvbiBBKHQpe3ZhciBlPVQodCk7cmV0dXJuIHZvaWQgMCE9PWU/ZTppKHQpPyt0OnZvaWQgMH1mdW5jdGlvbiBNKGUpe3JldHVybiBpKGUpP24ucm91bmQodC5fYit0Ll9tKmUsMik6cH1mdW5jdGlvbiBTKGUpe3JldHVybihlLXQuX2IpL3QuX219dC5jMmw9ImxvZyI9PT10LnR5cGU/eDpjLHQubDJjPSJsb2ciPT09dC50eXBlP206Yyx0LmwycD1NLHQucDJsPVMsdC5jMnA9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gTSh4KHQsZSkpfTpNLHQucDJjPSJsb2ciPT09dC50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiBtKFModCkpfTpTLC0xIT09WyJsaW5lYXIiLCItIl0uaW5kZXhPZih0LnR5cGUpPyh0LmQycj10LnIyZD10LmQyYz10LnIyYz10LmQybD10LnIybD1vLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPWMsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKG8oZSkpfSx0LnAyZD10LnAycj1TLHQuY2xlYW5Qb3M9Yyk6ImxvZyI9PT10LnR5cGU/KHQuZDJyPXQuZDJsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgobyh0KSxlKX0sdC5yMmQ9dC5yMmM9ZnVuY3Rpb24odCl7cmV0dXJuIG0obyh0KSl9LHQuZDJjPXQucjJsPW8sdC5jMmQ9dC5sMnI9Yyx0LmMycj14LHQubDJkPW0sdC5kMnA9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5sMnAodC5kMnIoZSxyKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBtKFModCkpfSx0LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobyhlKSl9LHQucDJyPVMsdC5jbGVhblBvcz1jKToiZGF0ZSI9PT10LnR5cGU/KHQuZDJyPXQucjJkPWEuaWRlbnRpdHksdC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9Yix0LmMyZD10LmMycj10LmwyZD10Lmwycj1fLHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5sMnAoYihlLDAsbikpfSx0LnAyZD10LnAycj1mdW5jdGlvbih0LGUscil7cmV0dXJuIF8oUyh0KSxlLHIpfSx0LmNsZWFuUG9zPWZ1bmN0aW9uKGUpe3JldHVybiBhLmNsZWFuRGF0ZShlLHAsdC5jYWxlbmRhcil9KToiY2F0ZWdvcnkiPT09dC50eXBlPyh0LmQyYz10LmQybD1rLHQucjJkPXQuYzJkPXQubDJkPXcsdC5kMnI9dC5kMmxfbm9hZGQ9QSx0LnIyYz1mdW5jdGlvbihlKXt2YXIgcj1BKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5mcmFjdGlvbjJyKC41KX0sdC5sMnI9dC5jMnI9Yyx0LnIybD1BLHQuZDJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycCh0LnIyYyhlKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB3KFModCkpfSx0LnIycD10LmQycCx0LnAycj1TLHQuY2xlYW5Qb3M9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQ/dDpjKHQpfSk6Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlJiYodC5yMmQ9dC5jMmQ9dC5sMmQ9dyx0LmQycj10LmQybF9ub2FkZD1BLHQucjJjPWZ1bmN0aW9uKGUpe3ZhciByPUEoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmZyYWN0aW9uMnIoLjUpfSx0LnIyY19qdXN0X2luZGljZXM9VCx0Lmwycj10LmMycj1jLHQucjJsPUEsdC5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHQucjJjKGUpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHcoUyh0KSl9LHQucjJwPXQuZDJwLHQucDJyPVMsdC5jbGVhblBvcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8InN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQ/dDpjKHQpfSx0LnNldHVwTXVsdGlDYXRlZ29yeT1mdW5jdGlvbihuKXt2YXIgaSxvLHM9dC5fdHJhY2VJbmRpY2VzLGw9ZS5fYXhpc01hdGNoR3JvdXBzO2lmKGwmJmwubGVuZ3RoJiYwPT09dC5fY2F0ZWdvcmllcy5sZW5ndGgpZm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGM9bFtpXTtpZihjW3JdKWZvcih2YXIgaCBpbiBjKWlmKGghPT1yKXt2YXIgcD1lW3YuaWQybmFtZShoKV07cz1zLmNvbmNhdChwLl90cmFjZUluZGljZXMpfX12YXIgZD1bWzAse31dLFswLHt9XV0sZz1bXTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXt2YXIgbT1uW3NbaV1dO2lmKGYgaW4gbSl7dmFyIHg9bVtmXSxiPW0uX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgoeCk7aWYodSh4WzBdKSYmdSh4WzFdKSlmb3Iobz0wO288YjtvKyspe3ZhciBfPXhbMF1bb10sdz14WzFdW29dO3koXykmJnkodykmJihnLnB1c2goW18sd10pLF8gaW4gZFswXVsxXXx8KGRbMF1bMV1bX109ZFswXVswXSsrKSx3IGluIGRbMV1bMV18fChkWzFdWzFdW3ddPWRbMV1bMF0rKykpfX19Zm9yKGcuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPWRbMF1bMV0sbj1yW3RbMF1dLXJbZVswXV07aWYobilyZXR1cm4gbjt2YXIgaT1kWzFdWzFdO3JldHVybiBpW3RbMV1dLWlbZVsxXV19KSxpPTA7aTxnLmxlbmd0aDtpKyspayhnW2ldKX0pLHQuZnJhY3Rpb24ycj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiB0LmwycihyK2UqKG4tcikpfSx0LnIyZnJhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHI9dC5yMmwodC5yYW5nZVswXSksbj10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4odC5yMmwoZSktcikvKG4tcil9LHQuY2xlYW5SYW5nZT1mdW5jdGlvbihlLHIpe3J8fChyPXt9KSxlfHwoZT0icmFuZ2UiKTt2YXIgbixvLHM9YS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpO2lmKG89KG89ImRhdGUiPT09dC50eXBlP2EuZGZsdFJhbmdlKHQuY2FsZW5kYXIpOiJ5Ij09PWY/Zy5ERkxUUkFOR0VZOnIuZGZsdFJhbmdlfHxnLkRGTFRSQU5HRVgpLnNsaWNlKCkscyYmMj09PXMubGVuZ3RoKWZvcigiZGF0ZSI9PT10LnR5cGUmJihzWzBdPWEuY2xlYW5EYXRlKHNbMF0scCx0LmNhbGVuZGFyKSxzWzFdPWEuY2xlYW5EYXRlKHNbMV0scCx0LmNhbGVuZGFyKSksbj0wO248MjtuKyspaWYoImRhdGUiPT09dC50eXBlKXtpZighYS5pc0RhdGVUaW1lKHNbbl0sdC5jYWxlbmRhcikpe3RbZV09bzticmVha31pZih0LnIybChzWzBdKT09PXQucjJsKHNbMV0pKXt2YXIgbD1hLmNvbnN0cmFpbih0LnIybChzWzBdKSxhLk1JTl9NUysxZTMsYS5NQVhfTVMtMWUzKTtzWzBdPXQubDJyKGwtMWUzKSxzWzFdPXQubDJyKGwrMWUzKTticmVha319ZWxzZXtpZighaShzW25dKSl7aWYoIWkoc1sxLW5dKSl7dFtlXT1vO2JyZWFrfXNbbl09c1sxLW5dKihuPzEwOi4xKX1pZihzW25dPC1oP3Nbbl09LWg6c1tuXT5oJiYoc1tuXT1oKSxzWzBdPT09c1sxXSl7dmFyIGM9TWF0aC5tYXgoMSxNYXRoLmFicygxZS02KnNbMF0pKTtzWzBdLT1jLHNbMV0rPWN9fWVsc2UgYS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLnNldChvKX0sdC5zZXRTY2FsZT1mdW5jdGlvbihyKXt2YXIgbj1lLl9zaXplO2lmKHQub3ZlcmxheWluZyl7dmFyIGk9di5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LHQub3ZlcmxheWluZyk7dC5kb21haW49aS5kb21haW59dmFyIGE9ciYmdC5fcj8iX3IiOiJyYW5nZSIsbz10LmNhbGVuZGFyO3QuY2xlYW5SYW5nZShhKTt2YXIgcz10LnIybCh0W2FdWzBdLG8pLGw9dC5yMmwodFthXVsxXSxvKTtpZigieSI9PT1mPyh0Ll9vZmZzZXQ9bi50KygxLXQuZG9tYWluWzFdKSpuLmgsdC5fbGVuZ3RoPW4uaCoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyhzLWwpLHQuX2I9LXQuX20qbCk6KHQuX29mZnNldD1uLmwrdC5kb21haW5bMF0qbi53LHQuX2xlbmd0aD1uLncqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8obC1zKSx0Ll9iPS10Ll9tKnMpLCFpc0Zpbml0ZSh0Ll9tKXx8IWlzRmluaXRlKHQuX2IpfHx0Ll9sZW5ndGg8MCl0aHJvdyBlLl9yZXBsb3R0aW5nPSExLG5ldyBFcnJvcigiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBheGlzIHNjYWxpbmciKX0sdC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpLG8scyxsPXQudHlwZSxjPSJkYXRlIj09PWwmJmVbcisiY2FsZW5kYXIiXTtpZihyIGluIGUpe2lmKG49ZVtyXSxzPWUuX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgobiksYS5pc1R5cGVkQXJyYXkobikmJigibGluZWFyIj09PWx8fCJsb2ciPT09bCkpe2lmKHM9PT1uLmxlbmd0aClyZXR1cm4gbjtpZihuLnN1YmFycmF5KXJldHVybiBuLnN1YmFycmF5KDAscyl9aWYoIm11bHRpY2F0ZWdvcnkiPT09bClyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXt2YXIgaT0odFswXXx8W10pW25dLGE9KHRbMV18fFtdKVtuXTtyW25dPVQoW2ksYV0pfXJldHVybiByfShuLHMpO2ZvcihpPW5ldyBBcnJheShzKSxvPTA7bzxzO28rKylpW29dPXQuZDJjKG5bb10sMCxjKX1lbHNle3ZhciB1PXIrIjAiaW4gZT90LmQyYyhlW3IrIjAiXSwwLGMpOjAsZj1lWyJkIityXT9OdW1iZXIoZVsiZCIrcl0pOjE7Zm9yKG49ZVt7eDoieSIseToieCJ9W3JdXSxzPWUuX2xlbmd0aHx8bi5sZW5ndGgsaT1uZXcgQXJyYXkocyksbz0wO288cztvKyspaVtvXT11K28qZn1yZXR1cm4gaX0sdC5pc1ZhbGlkUmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aCYmaSh0LnIybChlWzBdKSkmJmkodC5yMmwoZVsxXSkpfSx0LmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuYzJsKGVbZl0sbnVsbCxyKSxpPXQucjJsKHQucmFuZ2VbMF0pLGE9dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIGk8YT9pPD1uJiZuPD1hOmE8PW4mJm48PWl9LHQuY2xlYXJDYWxjPWZ1bmN0aW9uKCl7dmFyIG49ZnVuY3Rpb24oKXt0Ll9jYXRlZ29yaWVzPVtdLHQuX2NhdGVnb3JpZXNNYXA9e319LGk9ZS5fYXhpc01hdGNoR3JvdXBzO2lmKGkmJmkubGVuZ3RoKXtmb3IodmFyIGE9ITEsbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO2lmKHNbcl0pe2E9ITA7dmFyIGw9bnVsbCxjPW51bGw7Zm9yKHZhciB1IGluIHMpe3ZhciBmPWVbdi5pZDJuYW1lKHUpXTtpZihmLl9jYXRlZ29yaWVzKXtsPWYuX2NhdGVnb3JpZXMsYz1mLl9jYXRlZ29yaWVzTWFwO2JyZWFrfX1sJiZjPyh0Ll9jYXRlZ29yaWVzPWwsdC5fY2F0ZWdvcmllc01hcD1jKTpuKCk7YnJlYWt9fWF8fG4oKX1lbHNlIG4oKTtpZih0Ll9pbml0aWFsQ2F0ZWdvcmllcylmb3IodmFyIGg9MDtoPHQuX2luaXRpYWxDYXRlZ29yaWVzLmxlbmd0aDtoKyspayh0Ll9pbml0aWFsQ2F0ZWdvcmllc1toXSl9O3ZhciBFPWUuX2QzbG9jYWxlOyJkYXRlIj09PXQudHlwZSYmKHQuX2RhdGVGb3JtYXQ9RT9FLnRpbWVGb3JtYXQudXRjOm4udGltZS5mb3JtYXQudXRjLHQuX2V4dHJhRm9ybWF0PWUuX2V4dHJhRm9ybWF0KSx0Ll9zZXBhcmF0b3JzPWUuc2VwYXJhdG9ycyx0Ll9udW1Gb3JtYXQ9RT9FLm51bWJlckZvcm1hdDpuLmZvcm1hdCxkZWxldGUgdC5fbWluRHRpY2ssZGVsZXRlIHQuX2ZvcmNlVGljazB9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4vYXhpc19pZHMiOjc1MSwiLi9jb25zdGFudHMiOjc1NCxkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw3Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKTtmdW5jdGlvbiBvKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS50aWNrZm9ybWF0c3RvcHMscixhKX1yKCJlbmFibGVkIikmJihyKCJkdGlja3JhbmdlIikscigidmFsdWUiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9WyJzaG93ZXhwb25lbnQiLCJzaG93dGlja3ByZWZpeCIsInNob3d0aWNrc3VmZml4Il0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSk7aWYoZS5ldmVyeShmdW5jdGlvbihyKXtyZXR1cm4gdFtyXT09PXRbZVswXV19KXx8MT09PWUubGVuZ3RoKXJldHVybiB0W2VbMF1dfSh0KTtpZihyKCJ0aWNrcHJlZml4IikmJnIoInNob3d0aWNrcHJlZml4IixjKSxyKCJ0aWNrc3VmZml4IixsLnRpY2tTdWZmaXhEZmx0KSYmcigic2hvd3RpY2tzdWZmaXgiLGMpLHIoInNob3d0aWNrbGFiZWxzIikpe3ZhciB1PWwuZm9udHx8e30sZj1lLmNvbG9yLGg9ZiYmZiE9PWkuY29sb3IuZGZsdD9mOnUuY29sb3I7aWYobi5jb2VyY2VGb250KHIsInRpY2tmb250Iix7ZmFtaWx5OnUuZmFtaWx5LHNpemU6dS5zaXplLGNvbG9yOmh9KSxyKCJ0aWNrYW5nbGUiKSwiY2F0ZWdvcnkiIT09cyl7dmFyIHA9cigidGlja2Zvcm1hdCIpLGQ9dC50aWNrZm9ybWF0c3RvcHM7QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGgmJmEodCxlLHtuYW1lOiJ0aWNrZm9ybWF0c3RvcHMiLGluY2x1c2lvbkF0dHI6ImVuYWJsZWQiLGhhbmRsZUl0ZW1EZWZhdWx0czpvfSkscHx8ImRhdGUiPT09c3x8KHIoInNob3dleHBvbmVudCIsYykscigiZXhwb25lbnRmb3JtYXQiKSxyKCJzZXBhcmF0ZXRob3VzYW5kcyIpKX19fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MH1dLDc2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bi5jb2VyY2UyKHQsZSxpLCJ0aWNrbGVuIikscz1uLmNvZXJjZTIodCxlLGksInRpY2t3aWR0aCIpLGw9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrY29sb3IiLGUuY29sb3IpO3IoInRpY2tzIixhLm91dGVyVGlja3N8fG98fHN8fGw/Im91dHNpZGUiOiIiKXx8KGRlbGV0ZSBlLnRpY2tsZW4sZGVsZXRlIGUudGlja3dpZHRoLGRlbGV0ZSBlLnRpY2tjb2xvcil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3NjB9XSw3Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jbGVhbl90aWNrcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYTsiYXJyYXkiIT09dC50aWNrbW9kZXx8ImxvZyIhPT1pJiYiZGF0ZSIhPT1pP2E9cigidGlja21vZGUiLEFycmF5LmlzQXJyYXkodC50aWNrdmFscyk/ImFycmF5Ijp0LmR0aWNrPyJsaW5lYXIiOiJhdXRvIik6YT1lLnRpY2ttb2RlPSJhdXRvIjtpZigiYXV0byI9PT1hKXIoIm50aWNrcyIpO2Vsc2UgaWYoImxpbmVhciI9PT1hKXt2YXIgbz1lLmR0aWNrPW4uZHRpY2sodC5kdGljayxpKTtlLnRpY2swPW4udGljazAodC50aWNrMCxpLGUuY2FsZW5kYXIsbyl9ZWxzZSBpZigibXVsdGljYXRlZ29yeSIhPT1pKXt2b2lkIDA9PT1yKCJ0aWNrdmFscyIpP2UudGlja21vZGU9ImF1dG8iOnIoInRpY2t0ZXh0Iil9fX0seyIuL2NsZWFuX3RpY2tzIjo3NTN9XSw3NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXt2YXIgbD10Ll9mdWxsTGF5b3V0O2lmKDAhPT1lLmxlbmd0aCl7dmFyIGMsdSxmLGg7cyYmKGM9cygpKTt2YXIgcD1uLmVhc2Uoci5lYXNpbmcpO3JldHVybiB0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGgpLGg9bnVsbCxmdW5jdGlvbigpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl07YS54cjAmJihyW2EucGxvdGluZm8ueGF4aXMuX25hbWUrIi5yYW5nZSJdPWEueHIwLnNsaWNlKCkpLGEueXIwJiYoclthLnBsb3RpbmZvLnlheGlzLl9uYW1lKyIucmFuZ2UiXT1hLnlyMC5zbGljZSgpKX1yZXR1cm4gaS5jYWxsKCJyZWxheW91dCIsdCxyKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZChlW3RdLnBsb3RpbmZvKX0pfSgpfSksdT1EYXRlLm5vdygpLGg9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBuKCl7Zj1EYXRlLm5vdygpO2Zvcih2YXIgYT1NYXRoLm1pbigxLChmLXUpL3IuZHVyYXRpb24pLG89cChhKSxzPTA7czxlLmxlbmd0aDtzKyspZyhlW3NdLG8pO2YtdT5yLmR1cmF0aW9uPyhmdW5jdGlvbigpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl07YS54cjEmJihyW2EucGxvdGluZm8ueGF4aXMuX25hbWUrIi5yYW5nZSJdPWEueHIxLnNsaWNlKCkpLGEueXIxJiYoclthLnBsb3RpbmZvLnlheGlzLl9uYW1lKyIucmFuZ2UiXT1hLnlyMS5zbGljZSgpKX1jJiZjKCksaS5jYWxsKCJyZWxheW91dCIsdCxyKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZChlW3RdLnBsb3RpbmZvKX0pfSgpLGg9d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pKTpoPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSxQcm9taXNlLnJlc29sdmUoKX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQueGF4aXMscj10LnlheGlzO2wuX2RlZnMuc2VsZWN0KCIjIit0LmNsaXBJZCsiPiByZWN0IikuY2FsbChhLnNldFRyYW5zbGF0ZSwwLDApLmNhbGwoYS5zZXRTY2FsZSwxLDEpLHQucGxvdC5jYWxsKGEuc2V0VHJhbnNsYXRlLGUuX29mZnNldCxyLl9vZmZzZXQpLmNhbGwoYS5zZXRTY2FsZSwxLDEpO3ZhciBuPXQucGxvdC5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIgLnRyYWNlIik7bi5zZWxlY3RBbGwoIi5wb2ludCIpLmNhbGwoYS5zZXRQb2ludEdyb3VwU2NhbGUsMSwxKSxuLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpLmNhbGwoYS5zZXRUZXh0UG9pbnRzU2NhbGUsMSwxKSxuLmNhbGwoYS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHQpfWZ1bmN0aW9uIGcoZSxyKXt2YXIgbj1lLnBsb3RpbmZvLGk9bi54YXhpcyxzPW4ueWF4aXMsbD1lLnhyMCxjPWUueHIxLHU9aS5fbGVuZ3RoLGY9ZS55cjAsaD1lLnlyMSxwPXMuX2xlbmd0aCxkPSEhYyxnPSEhaCx2PVtdO2lmKGQpe3ZhciBtPWxbMV0tbFswXSx5PWNbMV0tY1swXTt2WzBdPShsWzBdKigxLXIpK3IqY1swXS1sWzBdKS8obFsxXS1sWzBdKSp1LHZbMl09dSooMS1yK3IqeS9tKSxpLnJhbmdlWzBdPWxbMF0qKDEtcikrcipjWzBdLGkucmFuZ2VbMV09bFsxXSooMS1yKStyKmNbMV19ZWxzZSB2WzBdPTAsdlsyXT11O2lmKGcpe3ZhciB4PWZbMV0tZlswXSxiPWhbMV0taFswXTt2WzFdPShmWzFdKigxLXIpK3IqaFsxXS1mWzFdKS8oZlswXS1mWzFdKSpwLHZbM109cCooMS1yK3IqYi94KSxzLnJhbmdlWzBdPWZbMF0qKDEtcikrcipoWzBdLHMucmFuZ2VbMV09ZlsxXSooMS1yKStyKmhbMV19ZWxzZSB2WzFdPTAsdlszXT1wO28uZHJhd09uZSh0LGkse3NraXBUaXRsZTohMH0pLG8uZHJhd09uZSh0LHMse3NraXBUaXRsZTohMH0pLG8ucmVkcmF3Q29tcG9uZW50cyh0LFtpLl9pZCxzLl9pZF0pO3ZhciBfPWQ/dS92WzJdOjEsdz1nP3AvdlszXToxLGs9ZD92WzBdOjAsVD1nP3ZbMV06MCxBPWQ/dlswXS92WzJdKnU6MCxNPWc/dlsxXS92WzNdKnA6MCxTPWkuX29mZnNldC1BLEU9cy5fb2Zmc2V0LU07bi5jbGlwUmVjdC5jYWxsKGEuc2V0VHJhbnNsYXRlLGssVCkuY2FsbChhLnNldFNjYWxlLDEvXywxL3cpLG4ucGxvdC5jYWxsKGEuc2V0VHJhbnNsYXRlLFMsRSkuY2FsbChhLnNldFNjYWxlLF8sdyksYS5zZXRQb2ludEdyb3VwU2NhbGUobi56b29tU2NhbGVQdHMsMS9fLDEvdyksYS5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQsMS9fLDEvdyl9by5yZWRyYXdDb21wb25lbnRzKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9heGVzIjo3NDgsZDM6MTU0fV0sNzcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxpPXQoIi4vYXhpc19hdXRvdHlwZSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJue3Y6IngiLGg6InkifVt0Lm9yaWVudGF0aW9ufHwidiJdfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1hKHQpLGk9bih0LCJib3gtdmlvbGluIiksbz1uKHQuX2Z1bGxJbnB1dHx8e30sImNhbmRsZXN0aWNrIik7cmV0dXJuIGkmJiFvJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyKyIwIl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpeyItIj09PXIoInR5cGUiLChzLnNwbG9tU3Rhc2h8fHt9KS50eXBlKSYmKCFmdW5jdGlvbih0LGUpe2lmKCItIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQscz1yLmNoYXJBdCgwKTstMSE9PXIuaW5kZXhPZigic2NlbmUiKSYmKHI9cyk7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKCJzcGxvbSI9PT1pLnR5cGUmJmkuX2xlbmd0aD4wJiYoaVsiXyIrcisiYXhlcyJdfHx7fSlbZV0pcmV0dXJuIGk7aWYoKGlbcisiYXhpcyJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyKyIwIl0pcmV0dXJuIGl9fX0oZSxyLHMpO2lmKCFsKXJldHVybjtpZigiaGlzdG9ncmFtIj09PWwudHlwZSYmcz09PXt2OiJ5IixoOiJ4In1bbC5vcmllbnRhdGlvbnx8InYiXSlyZXR1cm4gdm9pZCh0LnR5cGU9ImxpbmVhciIpO3ZhciBjLHU9cysiY2FsZW5kYXIiLGY9bFt1XSxoPXtub011bHRpQ2F0ZWdvcnk6IW4obCwiY2FydGVzaWFuIil8fG4obCwibm9NdWx0aUNhdGVnb3J5Iil9O2lmKG8obCxzKSl7dmFyIHA9YShsKSxkPVtdO2ZvcihjPTA7YzxlLmxlbmd0aDtjKyspe3ZhciBnPWVbY107bihnLCJib3gtdmlvbGluIikmJihnW3MrImF4aXMiXXx8cyk9PT1yJiYodm9pZCAwIT09Z1twXT9kLnB1c2goZ1twXVswXSk6dm9pZCAwIT09Zy5uYW1lP2QucHVzaChnLm5hbWUpOmQucHVzaCgidGV4dCIpLGdbdV0hPT1mJiYoZj12b2lkIDApKX10LnR5cGU9aShkLGYsaCl9ZWxzZSBpZigic3Bsb20iPT09bC50eXBlKXt2YXIgdj1sLmRpbWVuc2lvbnMsbT1sLl9kaWFnO2ZvcihjPTA7Yzx2Lmxlbmd0aDtjKyspe3ZhciB5PXZbY107aWYoeS52aXNpYmxlJiYobVtjXVswXT09PXJ8fG1bY11bMV09PT1yKSl7dC50eXBlPWkoeS52YWx1ZXMsZixoKTticmVha319fWVsc2UgdC50eXBlPWkobFtzXXx8W2xbcysiMCJdXSxmLGgpfShlLHMuZGF0YSksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjp0LnR5cGU9ZS50eXBlKX19LHsiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9heGlzX2F1dG90eXBlIjo3NDl9XSw3NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKSxpPXQoIi4uL2xpYiIpO2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuLGEsbyxzPSExO2lmKCJkYXRhIj09PWUudHlwZSluPXQuX2Z1bGxEYXRhW251bGwhPT1lLnRyYWNlcz9lLnRyYWNlc1swXTowXTtlbHNle2lmKCJsYXlvdXQiIT09ZS50eXBlKXJldHVybiExO249dC5fZnVsbExheW91dH1yZXR1cm4gYT1pLm5lc3RlZFByb3BlcnR5KG4sZS5wcm9wKS5nZXQoKSwobz1yW2UudHlwZV09cltlLnR5cGVdfHx7fSkuaGFzT3duUHJvcGVydHkoZS5wcm9wKSYmb1tlLnByb3BdIT09YSYmKHM9ITApLG9bZS5wcm9wXT1hLHtjaGFuZ2VkOnMsdmFsdWU6YX19ZnVuY3Rpb24gbyh0LGUpe3ZhciByPVtdLG49ZVswXSxhPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgbilhW25dPWVbMV07ZWxzZXtpZighaS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiByO2E9bn1yZXR1cm4gbChhLGZ1bmN0aW9uKHQsZSxuKXtyLnB1c2goe3R5cGU6ImxheW91dCIscHJvcDp0LHZhbHVlOm59KX0sIiIsMCkscn1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbixhLG8scz1bXTtpZihuPWVbMF0sYT1lWzFdLHI9ZVsyXSxvPXt9LCJzdHJpbmciPT10eXBlb2YgbilvW25dPWE7ZWxzZXtpZighaS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiBzO289bix2b2lkIDA9PT1yJiYocj1hKX1yZXR1cm4gdm9pZCAwPT09ciYmKHI9bnVsbCksbChvLGZ1bmN0aW9uKGUsbixpKXt2YXIgYTtpZihBcnJheS5pc0FycmF5KGkpKXt2YXIgbz1NYXRoLm1pbihpLmxlbmd0aCx0LmRhdGEubGVuZ3RoKTtyJiYobz1NYXRoLm1pbihvLHIubGVuZ3RoKSksYT1bXTtmb3IodmFyIGw9MDtsPG87bCsrKWFbbF09cj9yW2xdOmx9ZWxzZSBhPXI/ci5zbGljZSgwKTpudWxsO2lmKG51bGw9PT1hKUFycmF5LmlzQXJyYXkoaSkmJihpPWlbMF0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSl7aWYoIUFycmF5LmlzQXJyYXkoaSkpe3ZhciBjPWk7aT1bXTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKylpW3VdPWN9aS5sZW5ndGg9TWF0aC5taW4oYS5sZW5ndGgsaS5sZW5ndGgpfXMucHVzaCh7dHlwZToiZGF0YSIscHJvcDplLHRyYWNlczphLHZhbHVlOml9KX0sIiIsMCksc31mdW5jdGlvbiBsKHQsZSxyLG4pe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIG89dFthXTtpZigiXyIhPT1hWzBdKXt2YXIgcz1yKyhuPjA/Ii4iOiIiKSthO2kuaXNQbGFpbk9iamVjdChvKT9sKG8sZSxzLG4rMSk6ZShzLGEsbyl9fSl9ci5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9ZnVuY3Rpb24odCxlLG4sbyl7dmFyIHM9e30sbD0hMDtlJiZlLl9jb21tYW5kT2JzZXJ2ZXImJihzPWUuX2NvbW1hbmRPYnNlcnZlcikscy5jYWNoZXx8KHMuY2FjaGU9e30pLHMubG9va3VwVGFibGU9e307dmFyIGM9ci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3ModCxuLHMubG9va3VwVGFibGUpO2lmKGUmJmUuX2NvbW1hbmRPYnNlcnZlcil7aWYoYylyZXR1cm4gcztpZihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKXJldHVybiBlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZS5fY29tbWFuZE9ic2VydmVyPW51bGwsc31pZihjKXthKHQsYyxzLmNhY2hlKSxzLmNoZWNrPWZ1bmN0aW9uKCl7aWYobCl7dmFyIGU9YSh0LGMscy5jYWNoZSk7cmV0dXJuIGUuY2hhbmdlZCYmbyYmdm9pZCAwIT09cy5sb29rdXBUYWJsZVtlLnZhbHVlXSYmKHMuZGlzYWJsZSgpLFByb21pc2UucmVzb2x2ZShvKHt2YWx1ZTplLnZhbHVlLHR5cGU6Yy50eXBlLHByb3A6Yy5wcm9wLHRyYWNlczpjLnRyYWNlcyxpbmRleDpzLmxvb2t1cFRhYmxlW2UudmFsdWVdfSkpLnRoZW4ocy5lbmFibGUscy5lbmFibGUpKSxlLmNoYW5nZWR9fTtmb3IodmFyIHU9WyJwbG90bHlfcmVsYXlvdXQiLCJwbG90bHlfcmVkcmF3IiwicGxvdGx5X3Jlc3R5bGUiLCJwbG90bHlfdXBkYXRlIiwicGxvdGx5X2FuaW1hdGluZ2ZyYW1lIiwicGxvdGx5X2FmdGVycGxvdCJdLGY9MDtmPHUubGVuZ3RoO2YrKyl0Ll9pbnRlcm5hbE9uKHVbZl0scy5jaGVjayk7cy5yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKyl0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyKHVbZV0scy5jaGVjayl9fWVsc2UgaS5sb2coIlVuYWJsZSB0byBhdXRvbWF0aWNhbGx5IGJpbmQgcGxvdCB1cGRhdGVzIHRvIEFQSSBjb21tYW5kIikscy5sb29rdXBUYWJsZT17fSxzLnJlbW92ZT1mdW5jdGlvbigpe307cmV0dXJuIHMuZGlzYWJsZT1mdW5jdGlvbigpe2w9ITF9LHMuZW5hYmxlPWZ1bmN0aW9uKCl7bD0hMH0sZSYmKGUuX2NvbW1hbmRPYnNlcnZlcj1zKSxzfSxyLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbih0LGUsbil7dmFyIGksYSxvPWUubGVuZ3RoO2ZvcihpPTA7aTxvO2krKyl7dmFyIHMsbD1lW2ldLGM9bC5tZXRob2QsdT1sLmFyZ3M7aWYoQXJyYXkuaXNBcnJheSh1KXx8KHU9W10pLCFjKXJldHVybiExO3ZhciBmPXIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyh0LGMsdSk7aWYoMSE9PWYubGVuZ3RoKXJldHVybiExO2lmKGEpe2lmKChzPWZbMF0pLnR5cGUhPT1hLnR5cGUpcmV0dXJuITE7aWYocy5wcm9wIT09YS5wcm9wKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoYS50cmFjZXMpKXtpZighQXJyYXkuaXNBcnJheShzLnRyYWNlcykpcmV0dXJuITE7cy50cmFjZXMuc29ydCgpO2Zvcih2YXIgaD0wO2g8YS50cmFjZXMubGVuZ3RoO2grKylpZihhLnRyYWNlc1toXSE9PXMudHJhY2VzW2hdKXJldHVybiExfWVsc2UgaWYocy5wcm9wIT09YS5wcm9wKXJldHVybiExfWVsc2UgYT1mWzBdLEFycmF5LmlzQXJyYXkoYS50cmFjZXMpJiZhLnRyYWNlcy5zb3J0KCk7dmFyIHA9KHM9ZlswXSkudmFsdWU7aWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMSE9PXAubGVuZ3RoKXJldHVybiExO3A9cFswXX1uJiYobltwXT1pKX1yZXR1cm4gYX0sci5leGVjdXRlQVBJQ29tbWFuZD1mdW5jdGlvbih0LGUscil7aWYoInNraXAiPT09ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGE9bi5hcGlNZXRob2RSZWdpc3RyeVtlXSxvPVt0XTtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspby5wdXNoKHJbc10pO3JldHVybiBhLmFwcGx5KG51bGwsbykuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGkud2FybigiQVBJIGNhbGwgdG8gUGxvdGx5LiIrZSsiIHJlamVjdGVkLiIsdCksUHJvbWlzZS5yZWplY3QodCl9KX0sci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtzd2l0Y2goQXJyYXkuaXNBcnJheShyKXx8KHI9W10pLGUpe2Nhc2UicmVzdHlsZSI6bj1zKHQscik7YnJlYWs7Y2FzZSJyZWxheW91dCI6bj1vKHQscik7YnJlYWs7Y2FzZSJ1cGRhdGUiOm49cyh0LFtyWzBdLHJbMl1dKS5jb25jYXQobyh0LFtyWzFdXSkpO2JyZWFrO2Nhc2UiYW5pbWF0ZSI6bj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGVbMF0pJiYxPT09ZVswXS5sZW5ndGgmJi0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlWzBdWzBdKT9be3R5cGU6ImxheW91dCIscHJvcDoiX2N1cnJlbnRGcmFtZSIsdmFsdWU6ZVswXVswXS50b1N0cmluZygpfV06W119KDAscik7YnJlYWs7ZGVmYXVsdDpuPVtdfXJldHVybiBufX0seyIuLi9saWIiOjcwMCwiLi4vcmVnaXN0cnkiOjgyOX1dLDc3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToodD10fHx7fSkuZWRpdFR5cGUsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9XSxkZmx0OlswLDFdfSxpPSh0Lm5hbWUmJnQubmFtZSx0LnRyYWNlLGUuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb24se3g6bih7fSxyLHt9KSx5Om4oe30scix7fSksZWRpdFR5cGU6dC5lZGl0VHlwZX0pO3JldHVybiB0Lm5vR3JpZENlbGx8fChpLnJvdz17dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9LGkuY29sdW1uPXt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0pLGl9LHIuZGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9biYmbi54fHxbMCwxXSxhPW4mJm4ueXx8WzAsMV0sbz1lLmdyaWQ7aWYobyl7dmFyIHM9cigiZG9tYWluLmNvbHVtbiIpO3ZvaWQgMCE9PXMmJihzPG8uY29sdW1ucz9pPW8uX2RvbWFpbnMueFtzXTpkZWxldGUgdC5kb21haW4uY29sdW1uKTt2YXIgbD1yKCJkb21haW4ucm93Iik7dm9pZCAwIT09bCYmKGw8by5yb3dzP2E9by5fZG9tYWlucy55W2xdOmRlbGV0ZSB0LmRvbWFpbi5yb3cpfXIoImRvbWFpbi54IixpKSxyKCJkb21haW4ueSIsYSl9fSx7Ii4uL2xpYi9leHRlbmQiOjY5MH1dLDc3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lZGl0VHlwZSxyPXQuY29sb3JFZGl0VHlwZTt2b2lkIDA9PT1yJiYocj1lKTt2YXIgbj17ZmFtaWx5Ont2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOmV9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZWRpdFR5cGU6ZX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZTpyfSxlZGl0VHlwZTplfTtyZXR1cm4gdC5hcnJheU9rJiYobi5mYW1pbHkuYXJyYXlPaz0hMCxuLnNpemUuYXJyYXlPaz0hMCxuLmNvbG9yLmFycmF5T2s9ITApLG59fSx7fV0sNzc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToiZnJhbWVzX2VudHJ5Iixncm91cDp7dmFsVHlwZToic3RyaW5nIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIn0sdHJhY2VzOnt2YWxUeXBlOiJhbnkifSxiYXNlZnJhbWU6e3ZhbFR5cGU6InN0cmluZyJ9LGRhdGE6e3ZhbFR5cGU6ImFueSJ9LGxheW91dDp7dmFsVHlwZToiYW55In19fSx7fV0sNzc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IucHJvak5hbWVzPXtlcXVpcmVjdGFuZ3VsYXI6ImVxdWlyZWN0YW5ndWxhciIsbWVyY2F0b3I6Im1lcmNhdG9yIixvcnRob2dyYXBoaWM6Im9ydGhvZ3JhcGhpYyIsIm5hdHVyYWwgZWFydGgiOiJuYXR1cmFsRWFydGgiLGthdnJheXNraXk3OiJrYXZyYXlza2l5NyIsbWlsbGVyOiJtaWxsZXIiLHJvYmluc29uOiJyb2JpbnNvbiIsZWNrZXJ0NDoiZWNrZXJ0NCIsImF6aW11dGhhbCBlcXVhbCBhcmVhIjoiYXppbXV0aGFsRXF1YWxBcmVhIiwiYXppbXV0aGFsIGVxdWlkaXN0YW50IjoiYXppbXV0aGFsRXF1aWRpc3RhbnQiLCJjb25pYyBlcXVhbCBhcmVhIjoiY29uaWNFcXVhbEFyZWEiLCJjb25pYyBjb25mb3JtYWwiOiJjb25pY0NvbmZvcm1hbCIsImNvbmljIGVxdWlkaXN0YW50IjoiY29uaWNFcXVpZGlzdGFudCIsZ25vbW9uaWM6Imdub21vbmljIixzdGVyZW9ncmFwaGljOiJzdGVyZW9ncmFwaGljIixtb2xsd2VpZGU6Im1vbGx3ZWlkZSIsaGFtbWVyOiJoYW1tZXIiLCJ0cmFuc3ZlcnNlIG1lcmNhdG9yIjoidHJhbnN2ZXJzZU1lcmNhdG9yIiwiYWxiZXJzIHVzYSI6ImFsYmVyc1VzYSIsIndpbmtlbCB0cmlwZWwiOiJ3aW5rZWwzIixhaXRvZmY6ImFpdG9mZiIsc2ludXNvaWRhbDoic2ludXNvaWRhbCJ9LHIuYXhlc05hbWVzPVsibG9uYXhpcyIsImxhdGF4aXMiXSxyLmxvbmF4aXNTcGFuPXtvcnRob2dyYXBoaWM6MTgwLCJhemltdXRoYWwgZXF1YWwgYXJlYSI6MzYwLCJhemltdXRoYWwgZXF1aWRpc3RhbnQiOjM2MCwiY29uaWMgY29uZm9ybWFsIjoxODAsZ25vbW9uaWM6MTYwLHN0ZXJlb2dyYXBoaWM6MTgwLCJ0cmFuc3ZlcnNlIG1lcmNhdG9yIjoxODAsIioiOjM2MH0sci5sYXRheGlzU3Bhbj17ImNvbmljIGNvbmZvcm1hbCI6MTUwLHN0ZXJlb2dyYXBoaWM6MTc5LjUsIioiOjE4MH0sci5zY29wZURlZmF1bHRzPXt3b3JsZDp7bG9uYXhpc1JhbmdlOlstMTgwLDE4MF0sbGF0YXhpc1JhbmdlOlstOTAsOTBdLHByb2pUeXBlOiJlcXVpcmVjdGFuZ3VsYXIiLHByb2pSb3RhdGU6WzAsMCwwXX0sdXNhOntsb25heGlzUmFuZ2U6Wy0xODAsLTUwXSxsYXRheGlzUmFuZ2U6WzE1LDgwXSxwcm9qVHlwZToiYWxiZXJzIHVzYSJ9LGV1cm9wZTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbMzAsODVdLHByb2pUeXBlOiJjb25pYyBjb25mb3JtYWwiLHByb2pSb3RhdGU6WzE1LDAsMF0scHJvalBhcmFsbGVsczpbMCw2MF19LGFzaWE6e2xvbmF4aXNSYW5nZTpbMjIsMTYwXSxsYXRheGlzUmFuZ2U6Wy0xNSw1NV0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19LGFmcmljYTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbLTQwLDQwXSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX0sIm5vcnRoIGFtZXJpY2EiOntsb25heGlzUmFuZ2U6Wy0xODAsLTQ1XSxsYXRheGlzUmFuZ2U6WzUsODVdLHByb2pUeXBlOiJjb25pYyBjb25mb3JtYWwiLHByb2pSb3RhdGU6Wy0xMDAsMCwwXSxwcm9qUGFyYWxsZWxzOlsyOS41LDQ1LjVdfSwic291dGggYW1lcmljYSI6e2xvbmF4aXNSYW5nZTpbLTEwMCwtMzBdLGxhdGF4aXNSYW5nZTpbLTYwLDE1XSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX19LHIuY2xpcFBhZD0uMDAxLHIucHJlY2lzaW9uPS4xLHIubGFuZENvbG9yPSIjRjBEQzgyIixyLndhdGVyQ29sb3I9IiMzMzk5RkYiLHIubG9jYXRpb25tb2RlVG9MYXllcj17IklTTy0zIjoiY291bnRyaWVzIiwiVVNBLXN0YXRlcyI6InN1YnVuaXRzIiwiY291bnRyeSBuYW1lcyI6ImNvdW50cmllcyJ9LHIuc3BoZXJlU1ZHPXt0eXBlOiJTcGhlcmUifSxyLmZpbGxMYXllcnM9e29jZWFuOjEsbGFuZDoxLGxha2VzOjF9LHIubGluZUxheWVycz17c3VidW5pdHM6MSxjb3VudHJpZXM6MSxjb2FzdGxpbmVzOjEscml2ZXJzOjEsZnJhbWU6MX0sci5sYXllcnM9WyJiZyIsIm9jZWFuIiwibGFuZCIsImxha2VzIiwic3VidW5pdHMiLCJjb3VudHJpZXMiLCJjb2FzdGxpbmVzIiwicml2ZXJzIiwibGF0YXhpcyIsImxvbmF4aXMiLCJmcmFtZSIsImJhY2twbG90IiwiZnJvbnRwbG90Il0sci5sYXllcnNGb3JDaG9yb3BsZXRoPVsiYmciLCJvY2VhbiIsImxhbmQiLCJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJsYXRheGlzIiwibG9uYXhpcyIsImZyYW1lIiwiYmFja3Bsb3QiLCJyaXZlcnMiLCJsYWtlcyIsImZyb250cGxvdCJdLHIubGF5ZXJOYW1lVG9BZGplY3RpdmU9e29jZWFuOiJvY2VhbiIsbGFuZDoibGFuZCIsbGFrZXM6Imxha2UiLHN1YnVuaXRzOiJzdWJ1bml0Iixjb3VudHJpZXM6ImNvdW50cnkiLGNvYXN0bGluZXM6ImNvYXN0bGluZSIscml2ZXJzOiJyaXZlciIsZnJhbWU6ImZyYW1lIn19LHt9XSw3Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGM9dCgiLi4vcGxvdHMiKSx1PXQoIi4uL2NhcnRlc2lhbi9heGVzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksaD10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCxwPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLGQ9dCgiLi96b29tIiksZz10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIiksbT10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO2Z1bmN0aW9uIHkodCl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRvcG9qc29uVVJMPXQudG9wb2pzb25VUkwsdGhpcy5pc1N0YXRpYz10LnN0YXRpY1Bsb3QsdGhpcy50b3BvanNvbk5hbWU9bnVsbCx0aGlzLnRvcG9qc29uPW51bGwsdGhpcy5wcm9qZWN0aW9uPW51bGwsdGhpcy52aWV3SW5pdGlhbD1udWxsLHRoaXMuZml0U2NhbGU9bnVsbCx0aGlzLmJvdW5kcz1udWxsLHRoaXMubWlkUHQ9bnVsbCx0aGlzLmhhc0Nob3JvcGxldGg9ITEsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e30sdGhpcy5iYXNlUGF0aHM9e30sdGhpcy5kYXRhUGF0aHM9e30sdGhpcy5kYXRhUG9pbnRzPXt9LHRoaXMuY2xpcERlZj1udWxsLHRoaXMuY2xpcFJlY3Q9bnVsbCx0aGlzLmJnUmVjdD1udWxsLHRoaXMubWFrZUZyYW1ld29yaygpfXQoIi4vcHJvamVjdGlvbnMiKShuKTt2YXIgeD15LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB5KHQpfSx4LnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1lW3RoaXMuaWRdLGE9di5nZXRUb3BvanNvbk5hbWUoaSk7bnVsbD09PW4udG9wb2pzb258fGEhPT1uLnRvcG9qc29uTmFtZT8obi50b3BvanNvbk5hbWU9YSx2b2lkIDA9PT1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdP3IucHVzaChuLmZldGNoVG9wb2pzb24oKS50aGVuKGZ1bmN0aW9uKHIpe1Bsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV09cixuLnRvcG9qc29uPXIsbi51cGRhdGUodCxlKX0pKToobi50b3BvanNvbj1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdLG4udXBkYXRlKHQsZSkpKTpuLnVwZGF0ZSh0LGUpfSx4LmZldGNoVG9wb2pzb249ZnVuY3Rpb24oKXt2YXIgdD12LmdldFRvcG9qc29uUGF0aCh0aGlzLnRvcG9qc29uVVJMLHRoaXMudG9wb2pzb25OYW1lKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxyKXtuLmpzb24odCxmdW5jdGlvbihuLGkpe2lmKG4pcmV0dXJuIDQwND09PW4uc3RhdHVzP3IobmV3IEVycm9yKFsicGxvdGx5LmpzIGNvdWxkIG5vdCBmaW5kIHRvcG9qc29uIGZpbGUgYXQiLHQsIi4iLCJNYWtlIHN1cmUgdGhlICp0b3BvanNvblVSTCogcGxvdCBjb25maWcgb3B0aW9uIiwiaXMgc2V0IHByb3Blcmx5LiJdLmpvaW4oIiAiKSkpOnIobmV3IEVycm9yKFsidW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyB0b3BvanNvbiBmaWxlIGF0Iix0XS5qb2luKCIgIikpKTtlKGkpfSl9KX0seC51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO2lmKCF0aGlzLnVwZGF0ZVByb2plY3Rpb24oZSxyKSl7dGhpcy5oYXNDaG9yb3BsZXRoPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKCJjaG9yb3BsZXRoIj09PXRbbl1bMF0udHJhY2UudHlwZSl7dGhpcy5oYXNDaG9yb3BsZXRoPSEwO2JyZWFrfXRoaXMudmlld0luaXRpYWx8fHRoaXMuc2F2ZVZpZXdJbml0aWFsKHIpLHRoaXMudXBkYXRlQmFzZUxheWVycyhlLHIpLHRoaXMudXBkYXRlRGltcyhlLHIpLHRoaXMudXBkYXRlRngoZSxyKSxjLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdyYXBoRGl2LHRoaXMsdCxyKTt2YXIgaT10aGlzLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIik7dGhpcy5kYXRhUG9pbnRzLnBvaW50PWkuc2VsZWN0QWxsKCIucG9pbnQiKSx0aGlzLmRhdGFQb2ludHMudGV4dD1pLnNlbGVjdEFsbCgidGV4dCIpLHRoaXMuZGF0YVBhdGhzLmxpbmU9aS5zZWxlY3RBbGwoIi5qcy1saW5lIik7dmFyIGE9dGhpcy5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7dGhpcy5kYXRhUGF0aHMuY2hvcm9wbGV0aD1hLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMucmVuZGVyKCl9fSx4LnVwZGF0ZVByb2plY3Rpb249ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9zaXplLG89ZS5kb21haW4scz1lLnByb2plY3Rpb24sbD1zLnJvdGF0aW9ufHx7fSxjPWUuY2VudGVyfHx7fSx1PXRoaXMucHJvamVjdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5wcm9qZWN0aW9uLnR5cGUscj1uLmdlb1tnLnByb2pOYW1lc1tlXV0oKSxpPXQuX2lzQ2xpcHBlZD9nLmxvbmF4aXNTcGFuW2VdLzI6bnVsbCxhPVsiY2VudGVyIiwicm90YXRlIiwicGFyYWxsZWxzIiwiY2xpcEV4dGVudCJdLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQ/cjpbXX0scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdOyJmdW5jdGlvbiIhPXR5cGVvZiByW2xdJiYocltsXT1vKX1yLmlzTG9uTGF0T3ZlckVkZ2VzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT1yKHQpKXJldHVybiEwO2lmKGkpe3ZhciBlPXIucm90YXRlKCk7cmV0dXJuIG4uZ2VvLmRpc3RhbmNlKHQsWy1lWzBdLC1lWzFdXSk+aSpNYXRoLlBJLzE4MH1yZXR1cm4hMX0sci5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2VvLnBhdGgoKS5wcm9qZWN0aW9uKHIpfSxyLmdldEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gci5nZXRQYXRoKCkuYm91bmRzKHQpfSxyLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMV1bMF0tdFswXVswXSxpPXRbMV1bMV0tdFswXVsxXSxhPXIuY2xpcEV4dGVudCYmci5jbGlwRXh0ZW50KCk7ci5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksYSYmci5jbGlwRXh0ZW50KG51bGwpO3ZhciBvPXIuZ2V0Qm91bmRzKGUpLHM9TWF0aC5taW4obi8ob1sxXVswXS1vWzBdWzBdKSxpLyhvWzFdWzFdLW9bMF1bMV0pKSxsPSt0WzBdWzBdKyhuLXMqKG9bMV1bMF0rb1swXVswXSkpLzIsYz0rdFswXVsxXSsoaS1zKihvWzFdWzFdK29bMF1bMV0pKS8yO3JldHVybiBhJiZyLmNsaXBFeHRlbnQoYSksci5zY2FsZSgxNTAqcykudHJhbnNsYXRlKFtsLGNdKX0sci5wcmVjaXNpb24oZy5wcmVjaXNpb24pLGkmJnIuY2xpcEFuZ2xlKGktZy5jbGlwUGFkKTtyZXR1cm4gcn0oZSk7dS5jZW50ZXIoW2MubG9uLWwubG9uLGMubGF0LWwubGF0XSkucm90YXRlKFstbC5sb24sLWwubGF0LGwucm9sbF0pLnBhcmFsbGVscyhzLnBhcmFsbGVscyk7dmFyIGY9W1tyLmwrci53Km8ueFswXSxyLnQrci5oKigxLW8ueVsxXSldLFtyLmwrci53Km8ueFsxXSxyLnQrci5oKigxLW8ueVswXSldXSxoPWUubG9uYXhpcyxwPWUubGF0YXhpcyxkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Zy5jbGlwUGFkLG49dFswXStyLGk9dFsxXS1yLGE9ZVswXStyLG89ZVsxXS1yO24+MCYmaTwwJiYoaSs9MzYwKTt2YXIgcz0oaS1uKS80O3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbW1tuLGFdLFtuLG9dLFtuK3Msb10sW24rMipzLG9dLFtuKzMqcyxvXSxbaSxvXSxbaSxhXSxbaS1zLGFdLFtpLTIqcyxhXSxbaS0zKnMsYV0sW24sYV1dXX19KGgucmFuZ2UscC5yYW5nZSk7dS5maXRFeHRlbnQoZixkKTt2YXIgdj10aGlzLmJvdW5kcz11LmdldEJvdW5kcyhkKSxtPXRoaXMuZml0U2NhbGU9dS5zY2FsZSgpLHk9dS50cmFuc2xhdGUoKTtpZighaXNGaW5pdGUodlswXVswXSl8fCFpc0Zpbml0ZSh2WzBdWzFdKXx8IWlzRmluaXRlKHZbMV1bMF0pfHwhaXNGaW5pdGUodlsxXVsxXSl8fGlzTmFOKHlbMF0pfHxpc05hTih5WzBdKSl7Zm9yKHZhciB4PXRoaXMuZ3JhcGhEaXYsYj1bInByb2plY3Rpb24ucm90YXRpb24iLCJjZW50ZXIiLCJsb25heGlzLnJhbmdlIiwibGF0YXhpcy5yYW5nZSJdLF89IkludmFsaWQgZ2VvIHNldHRpbmdzLCByZWxheW91dCdpbmcgdG8gZGVmYXVsdCB2aWV3LiIsdz17fSxrPTA7azxiLmxlbmd0aDtrKyspd1t0aGlzLmlkKyIuIitiW2tdXT1udWxsO3JldHVybiB0aGlzLnZpZXdJbml0aWFsPW51bGwsYS53YXJuKF8pLHguX3Byb21pc2VzLnB1c2goaS5jYWxsKCJyZWxheW91dCIseCx3KSksX312YXIgVD10aGlzLm1pZFB0PVsodlswXVswXSt2WzFdWzBdKS8yLCh2WzBdWzFdK3ZbMV1bMV0pLzJdO2lmKHUuc2NhbGUocy5zY2FsZSptKS50cmFuc2xhdGUoW3lbMF0rKFRbMF0teVswXSkseVsxXSsoVFsxXS15WzFdKV0pLmNsaXBFeHRlbnQodiksZS5faXNBbGJlcnNVc2Epe3ZhciBBPXUoW2MubG9uLGMubGF0XSksTT11LnRyYW5zbGF0ZSgpO3UudHJhbnNsYXRlKFtNWzBdLShBWzBdLU1bMF0pLE1bMV0tKEFbMV0tTVsxXSldKX19LHgudXBkYXRlQmFzZUxheWVycz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsaT1yLnRvcG9qc29uLGE9ci5sYXllcnMsbD1yLmJhc2VQYXRocztmdW5jdGlvbiBjKHQpe3JldHVybiJsb25heGlzIj09PXR8fCJsYXRheGlzIj09PXR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gQm9vbGVhbihnLmxpbmVMYXllcnNbdF0pfWZ1bmN0aW9uIGYodCl7cmV0dXJuIEJvb2xlYW4oZy5maWxsTGF5ZXJzW3RdKX12YXIgaD0odGhpcy5oYXNDaG9yb3BsZXRoP2cubGF5ZXJzRm9yQ2hvcm9wbGV0aDpnLmxheWVycykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfHxmKHQpP2VbInNob3ciK3RdOiFjKHQpfHxlW3RdLnNob3dncmlkfSkscD1yLmZyYW1ld29yay5zZWxlY3RBbGwoIi5sYXllciIpLmRhdGEoaCxTdHJpbmcpO3AuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7ZGVsZXRlIGFbdF0sZGVsZXRlIGxbdF0sbi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSxwLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJsYXllciAiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF09bi5zZWxlY3QodGhpcyk7ImJnIj09PXQ/ci5iZ1JlY3Q9ZS5hcHBlbmQoInJlY3QiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTpjKHQpP2xbdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKToiYmFja3Bsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNob3JvcGxldGhsYXllciIsITApOiJmcm9udHBsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOnUodCk/bFt0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMik6Zih0KSYmKGxbdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpKX0pLHAub3JkZXIoKSxwLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bFt0XSxhPWcubGF5ZXJOYW1lVG9BZGplY3RpdmVbdF07ImZyYW1lIj09PXQ/ci5kYXR1bShnLnNwaGVyZVNWRyk6dSh0KXx8Zih0KT9yLmRhdHVtKG0oaSxpLm9iamVjdHNbdF0pKTpjKHQpJiZyLmRhdHVtKGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0XS5kdGljayxpPWcuc2NvcGVEZWZhdWx0c1tlLnNjb3BlXSxhPWkubG9uYXhpc1JhbmdlLG89aS5sYXRheGlzUmFuZ2Uscz0ibG9uYXhpcyI9PT10P1tyXTpbMCxyXTtyZXR1cm4gbi5nZW8uZ3JhdGljdWxlKCkuZXh0ZW50KFtbYVswXSxvWzBdXSxbYVsxXSxvWzFdXV0pLnN0ZXAocyl9KHQsZSkpLmNhbGwoby5zdHJva2UsZVt0XS5ncmlkY29sb3IpLmNhbGwocy5kYXNoTGluZSwiIixlW3RdLmdyaWR3aWR0aCksdSh0KT9yLmNhbGwoby5zdHJva2UsZVthKyJjb2xvciJdKS5jYWxsKHMuZGFzaExpbmUsIiIsZVthKyJ3aWR0aCJdKTpmKHQpJiZyLmNhbGwoby5maWxsLGVbYSsiY29sb3IiXSl9KX0seC51cGRhdGVEaW1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ib3VuZHMsbj0oZS5mcmFtZXdpZHRofHwwKS8yLGk9clswXVswXS1uLGE9clswXVsxXS1uLGw9clsxXVswXS1pK24sYz1yWzFdWzFdLWErbjtzLnNldFJlY3QodGhpcy5jbGlwUmVjdCxpLGEsbCxjKSx0aGlzLmJnUmVjdC5jYWxsKHMuc2V0UmVjdCxpLGEsbCxjKS5jYWxsKG8uZmlsbCxlLmJnY29sb3IpLHRoaXMueGF4aXMuX29mZnNldD1pLHRoaXMueGF4aXMuX2xlbmd0aD1sLHRoaXMueWF4aXMuX29mZnNldD1hLHRoaXMueWF4aXMuX2xlbmd0aD1jfSx4LnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxhPXIuZ3JhcGhEaXYsbz1yLmJnUmVjdCxzPXQuZHJhZ21vZGUsYz10LmNsaWNrbW9kZTtpZighci5pc1N0YXRpYyl7dmFyIHU7InNlbGVjdCI9PT1zP3U9ZnVuY3Rpb24odCxlKXsodC5yYW5nZT17fSlbci5pZF09W3YoW2UueG1pbixlLnltaW5dKSx2KFtlLnhtYXgsZS55bWF4XSldfToibGFzc28iPT09cyYmKHU9ZnVuY3Rpb24odCxlLG4peyh0Lmxhc3NvUG9pbnRzPXt9KVtyLmlkXT1uLmZpbHRlcmVkLm1hcCh2KX0pO3ZhciBnPXtlbGVtZW50OnIuYmdSZWN0Lm5vZGUoKSxnZDphLHBsb3RpbmZvOntpZDpyLmlkLHhheGlzOnIueGF4aXMseWF4aXM6ci55YXhpcyxmaWxsUmFuZ2VJdGVtczp1fSx4YXhlczpbci54YXhpc10seWF4ZXM6W3IueWF4aXNdLHN1YnBsb3Q6ci5pZCxjbGlja0ZuOmZ1bmN0aW9uKGUpezI9PT1lJiZ0Ll96b29tbGF5ZXIuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX19OyJwYW4iPT09cz8oby5ub2RlKCkub25tb3VzZWRvd249bnVsbCxvLmNhbGwoZChyLGUpKSxvLm9uKCJkYmxjbGljay56b29tIixmdW5jdGlvbigpe3ZhciB0PXIudmlld0luaXRpYWwsZT17fTtmb3IodmFyIG4gaW4gdCllW3IuaWQrIi4iK25dPXRbbl07aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGEsZSksYS5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpfSksYS5fY29udGV4dC5fc2Nyb2xsWm9vbS5nZW98fG8ub24oIndoZWVsLnpvb20iLG51bGwpKToic2VsZWN0IiE9PXMmJiJsYXNzbyIhPT1zfHwoby5vbigiLnpvb20iLG51bGwpLGcucHJlcEZuPWZ1bmN0aW9uKHQsZSxyKXtoKHQsZSxyLGcscyl9LGYuaW5pdChnKSksby5vbigibW91c2Vtb3ZlIixmdW5jdGlvbigpe3ZhciB0PXIucHJvamVjdGlvbi5pbnZlcnQobi5tb3VzZSh0aGlzKSk7aWYoIXR8fGlzTmFOKHRbMF0pfHxpc05hTih0WzFdKSlyZXR1cm4gZi51bmhvdmVyKGEsbi5ldmVudCk7ci54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFswXX0sci55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFsxXX0sbC5ob3ZlcihhLG4uZXZlbnQsci5pZCl9KSxvLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXthLl9kcmFnZ2luZ3x8Zi51bmhvdmVyKGEsbi5ldmVudCl9KSxvLm9uKCJjbGljayIsZnVuY3Rpb24oKXsic2VsZWN0IiE9PXMmJiJsYXNzbyIhPT1zJiYoYy5pbmRleE9mKCJzZWxlY3QiKT4tMSYmcChuLmV2ZW50LGEsW3IueGF4aXNdLFtyLnlheGlzXSxyLmlkLGcpLGMuaW5kZXhPZigiZXZlbnQiKT4tMSYmbC5jbGljayhhLG4uZXZlbnQpKX0pfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHIucHJvamVjdGlvbi5pbnZlcnQoW3RbMF0rci54YXhpcy5fb2Zmc2V0LHRbMV0rci55YXhpcy5fb2Zmc2V0XSl9fSx4Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5ncmFwaERpdixyPWUuX2Z1bGxMYXlvdXQsaT0iY2xpcCIrci5fdWlkK3QuaWQ7dC5jbGlwRGVmPXIuX2NsaXBzLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsaSksdC5jbGlwUmVjdD10LmNsaXBEZWYuYXBwZW5kKCJyZWN0IiksdC5mcmFtZXdvcms9bi5zZWxlY3QodC5jb250YWluZXIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ2VvICIrdC5pZCkuY2FsbChzLnNldENsaXBVcmwsaSxlKSx0LnByb2plY3Q9ZnVuY3Rpb24oZSl7dmFyIHI9dC5wcm9qZWN0aW9uKGUpO3JldHVybiByP1tyWzBdLXQueGF4aXMuX29mZnNldCxyWzFdLXQueWF4aXMuX29mZnNldF06W251bGwsbnVsbF19LHQueGF4aXM9e19pZDoieCIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMF19fSx0LnlheGlzPXtfaWQ6InkiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzFdfX0sdC5tb2NrQXhpcz17dHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIifSx1LnNldENvbnZlcnQodC5tb2NrQXhpcyxyKX0seC5zYXZlVmlld0luaXRpYWw9ZnVuY3Rpb24odCl7dmFyIGU9dC5jZW50ZXJ8fHt9LHI9dC5wcm9qZWN0aW9uLG49ci5yb3RhdGlvbnx8e307dC5faXNTY29wZWQ/dGhpcy52aWV3SW5pdGlhbD17ImNlbnRlci5sb24iOmUubG9uLCJjZW50ZXIubGF0IjplLmxhdCwicHJvamVjdGlvbi5zY2FsZSI6ci5zY2FsZX06dC5faXNDbGlwcGVkP3RoaXMudmlld0luaXRpYWw9eyJwcm9qZWN0aW9uLnNjYWxlIjpyLnNjYWxlLCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6bi5sb24sInByb2plY3Rpb24ucm90YXRpb24ubGF0IjpuLmxhdH06dGhpcy52aWV3SW5pdGlhbD17ImNlbnRlci5sb24iOmUubG9uLCJjZW50ZXIubGF0IjplLmxhdCwicHJvamVjdGlvbi5zY2FsZSI6ci5zY2FsZSwicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOm4ubG9ufX0seC5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMucHJvamVjdGlvbixyPWUuZ2V0UGF0aCgpO2Z1bmN0aW9uIG4odCl7dmFyIHI9ZSh0LmxvbmxhdCk7cmV0dXJuIHI/InRyYW5zbGF0ZSgiK3JbMF0rIiwiK3JbMV0rIikiOm51bGx9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5pc0xvbkxhdE92ZXJFZGdlcyh0LmxvbmxhdCk/Im5vbmUiOm51bGx9Zm9yKHQgaW4gdGhpcy5iYXNlUGF0aHMpdGhpcy5iYXNlUGF0aHNbdF0uYXR0cigiZCIscik7Zm9yKHQgaW4gdGhpcy5kYXRhUGF0aHMpdGhpcy5kYXRhUGF0aHNbdF0uYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIHIodC5nZW9qc29uKX0pO2Zvcih0IGluIHRoaXMuZGF0YVBvaW50cyl0aGlzLmRhdGFQb2ludHNbdF0uYXR0cigiZGlzcGxheSIsaSkuYXR0cigidHJhbnNmb3JtIixuKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo1OTUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjcyNywiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vY2FydGVzaWFuL3NlbGVjdCI6NzY1LCIuLi9wbG90cyI6ODEwLCIuL2NvbnN0YW50cyI6Nzc2LCIuL3Byb2plY3Rpb25zIjo3ODIsIi4vem9vbSI6NzgzLGQzOjE1NCwidG9wb2pzb24tY2xpZW50Ijo1MjR9XSw3Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9nZW8iKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGE9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4LG89ImdlbyI7ci5uYW1lPW8sci5hdHRyPW8sci5pZFJvb3Q9byxyLmlkUmVnZXg9ci5hdHRyUmVnZXg9YShvKSxyLmF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvYXR0cmlidXRlcyIpLHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXQvZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy5nZW87dm9pZCAwPT09d2luZG93LlBsb3RseUdlb0Fzc2V0cyYmKHdpbmRvdy5QbG90bHlHZW9Bc3NldHM9e3RvcG9qc29uOnt9fSk7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1pKHIsbyxsKSx1PWVbbF0uX3N1YnBsb3Q7dXx8KHU9bih7aWQ6bCxncmFwaERpdjp0LGNvbnRhaW5lcjplLl9nZW9sYXllci5ub2RlKCksdG9wb2pzb25VUkw6dC5fY29udGV4dC50b3BvanNvblVSTCxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbbF0uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5nZW98fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLmZyYW1ld29yay5yZW1vdmUoKSxzLmNsaXBEZWYucmVtb3ZlKCkpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdlbyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWVbcltuXV07aS5fc3VicGxvdC51cGRhdGVGeChlLGkpfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3ODQsIi4vZ2VvIjo3NzcsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjc3OSwiLi9sYXlvdXQvZGVmYXVsdHMiOjc4MCwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjc4MX1dLDc3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2dlbzp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJnZW8iLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sNzgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiKSxpPXQoIi4uL2NvbnN0YW50cyIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89aS5heGVzTmFtZXM7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49cigicmVzb2x1dGlvbiIpLGE9cigic2NvcGUiKSxzPWkuc2NvcGVEZWZhdWx0c1thXSxsPXIoInByb2plY3Rpb24udHlwZSIscy5wcm9qVHlwZSksYz1lLl9pc0FsYmVyc1VzYT0iYWxiZXJzIHVzYSI9PT1sO2MmJihhPWUuc2NvcGU9InVzYSIpO3ZhciB1PWUuX2lzU2NvcGVkPSJ3b3JsZCIhPT1hLGY9ZS5faXNDb25pYz0tMSE9PWwuaW5kZXhPZigiY29uaWMiKTtlLl9pc0NsaXBwZWQ9ISFpLmxvbmF4aXNTcGFuW2xdO2Zvcih2YXIgaD0wO2g8by5sZW5ndGg7aCsrKXt2YXIgcCxkPW9baF0sZz1bMzAsMTBdW2hdO2lmKHUpcD1zW2QrIlJhbmdlIl07ZWxzZXt2YXIgdj1pW2QrIlNwYW4iXSxtPSh2W2xdfHx2WyIqIl0pLzIseT1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLiIrZC5zdWJzdHIoMCwzKSxzLnByb2pSb3RhdGVbaF0pO3A9W3ktbSx5K21dfXZhciB4PXIoZCsiLnJhbmdlIixwKTtyKGQrIi50aWNrMCIseFswXSkscihkKyIuZHRpY2siLGcpLHIoZCsiLnNob3dncmlkIikmJihyKGQrIi5ncmlkY29sb3IiKSxyKGQrIi5ncmlkd2lkdGgiKSl9dmFyIGI9ZS5sb25heGlzLnJhbmdlLF89ZS5sYXRheGlzLnJhbmdlLHc9YlswXSxrPWJbMV07dz4wJiZrPDAmJihrKz0zNjApO3ZhciBULEEsTSxTPSh3K2spLzI7aWYoIWMpe3ZhciBFPXU/cy5wcm9qUm90YXRlOltTLDAsMF07VD1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsRVswXSkscigicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiLEVbMV0pLHIoInByb2plY3Rpb24ucm90YXRpb24ucm9sbCIsRVsyXSkscigic2hvd2NvYXN0bGluZXMiLCF1KSYmKHIoImNvYXN0bGluZWNvbG9yIikscigiY29hc3RsaW5ld2lkdGgiKSkscigic2hvd29jZWFuIikmJnIoIm9jZWFuY29sb3IiKX0oYz8oQT0tOTYuNixNPTM4LjcpOihBPXU/UzpULE09KF9bMF0rX1sxXSkvMikscigiY2VudGVyLmxvbiIsQSkscigiY2VudGVyLmxhdCIsTSksZikmJnIoInByb2plY3Rpb24ucGFyYWxsZWxzIixzLnByb2pQYXJhbGxlbHN8fFswLDYwXSk7cigicHJvamVjdGlvbi5zY2FsZSIpLHIoInNob3dsYW5kIikmJnIoImxhbmRjb2xvciIpLHIoInNob3dsYWtlcyIpJiZyKCJsYWtlY29sb3IiKSxyKCJzaG93cml2ZXJzIikmJihyKCJyaXZlcmNvbG9yIikscigicml2ZXJ3aWR0aCIpKSxyKCJzaG93Y291bnRyaWVzIix1JiYidXNhIiE9PWEpJiYocigiY291bnRyeWNvbG9yIikscigiY291bnRyeXdpZHRoIikpLCgidXNhIj09PWF8fCJub3J0aCBhbWVyaWNhIj09PWEmJjUwPT09bikmJihyKCJzaG93c3VidW5pdHMiLCEwKSxyKCJzdWJ1bml0Y29sb3IiKSxyKCJzdWJ1bml0d2lkdGgiKSksdXx8cigic2hvd2ZyYW1lIiwhMCkmJihyKCJmcmFtZWNvbG9yIikscigiZnJhbWV3aWR0aCIpKSxyKCJiZ2NvbG9yIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtuKHQsZSxyLHt0eXBlOiJnZW8iLGF0dHJpYnV0ZXM6YSxoYW5kbGVEZWZhdWx0czpzLHBhcnRpdGlvbjoieSJ9KX19LHsiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyI6ODI0LCIuLi9jb25zdGFudHMiOjc3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NzgxfV0sNzgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9e3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIn0sZHRpY2s6e3ZhbFR5cGU6Im51bWJlciJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5saWdodExpbmV9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9fTsoZS5leHBvcnRzPW8oe2RvbWFpbjppKHtuYW1lOiJnZW8ifSx7fSkscmVzb2x1dGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhhLnNjb3BlRGVmYXVsdHMpLGRmbHQ6IndvcmxkIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGEucHJvak5hbWVzKX0scm90YXRpb246e2xvbjp7dmFsVHlwZToibnVtYmVyIn0sbGF0Ont2YWxUeXBlOiJudW1iZXIifSxyb2xsOnt2YWxUeXBlOiJudW1iZXIifX0scGFyYWxsZWxzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9fSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvYXN0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYW5kY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd2xha2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scml2ZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvdW50cnljb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOiJib29sZWFuIn0sc3VidW5pdGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxmcmFtZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxsb25heGlzOnMsbGF0YXhpczpzfSwicGxvdCIsImZyb20tcm9vdCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1NzYsIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vZG9tYWluIjo3NzMsIi4uL2NvbnN0YW50cyI6Nzc2fV0sNzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6cih0Lmdlb21ldHJ5LGUpfX1mdW5jdGlvbiByKGUsbil7aWYoIWUpcmV0dXJuIG51bGw7aWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGUpcmV0dXJue3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczpvYmplY3QuZ2VvbWV0cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHIodCxuKX0pfTtpZighYy5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpKXJldHVybiBudWxsO3ZhciBpPWNbZS50eXBlXTtyZXR1cm4gdC5nZW8uc3RyZWFtKGUsbihpKSksaS5yZXN1bHQoKX10Lmdlby5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5zdHJlYW07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJub3QgeWV0IHN1cHBvcnRlZCIpO3JldHVybih0JiZuLmhhc093blByb3BlcnR5KHQudHlwZSk/blt0LnR5cGVdOnIpKHQsaSl9O3ZhciBuPXtGZWF0dXJlOmUsRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxyKXtyZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnQuZmVhdHVyZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQscil9KX19fSxpPVtdLGE9W10sbz17cG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2goW3QsZV0pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1pLmxlbmd0aD9pLmxlbmd0aDwyP3t0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6aVswXX06e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOml9Om51bGw7cmV0dXJuIGk9W10sdH19LHM9e2xpbmVTdGFydDp1LHBvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe2kubGVuZ3RoJiYoYS5wdXNoKGkpLGk9W10pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1hLmxlbmd0aD9hLmxlbmd0aDwyP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczphWzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczphfTpudWxsO3JldHVybiBhPVtdLHR9fSxsPXtwb2x5Z29uU3RhcnQ6dSxsaW5lU3RhcnQ6dSxwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD1pLmxlbmd0aDtpZih0KXtkb3tpLnB1c2goaVswXS5zbGljZSgpKX13aGlsZSgrK3Q8NCk7YS5wdXNoKGkpLGk9W119fSxwb2x5Z29uRW5kOnUscmVzdWx0OmZ1bmN0aW9uKCl7aWYoIWEubGVuZ3RoKXJldHVybiBudWxsO3ZhciB0PVtdLGU9W107cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihyKXshZnVuY3Rpb24odCl7aWYoKGU9dC5sZW5ndGgpPDQpcmV0dXJuITE7Zm9yKHZhciBlLHI9MCxuPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrcjxlOyluKz10W3ItMV1bMV0qdFtyXVswXS10W3ItMV1bMF0qdFtyXVsxXTtyZXR1cm4gbjw9MH0ocik/ZS5wdXNoKHIpOnQucHVzaChbcl0pfSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07dC5zb21lKGZ1bmN0aW9uKHQpe2lmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGk9ITEsYT0wLG89dC5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD10W2FdLGM9bFswXSx1PWxbMV0sZj10W3NdLGg9ZlswXSxwPWZbMV07dT5uXnA+biYmcjwoaC1jKSoobi11KS8ocC11KStjJiYoaT0haSl9cmV0dXJuIGl9KHRbMF0scikpcmV0dXJuIHQucHVzaChlKSwhMH0pfHx0LnB1c2goW2VdKX0pLGE9W10sdC5sZW5ndGg/dC5sZW5ndGg+MT97dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fTp7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19LGM9e1BvaW50Om8sTXVsdGlQb2ludDpvLExpbmVTdHJpbmc6cyxNdWx0aUxpbmVTdHJpbmc6cyxQb2x5Z29uOmwsTXVsdGlQb2x5Z29uOmwsU3BoZXJlOmx9O2Z1bmN0aW9uIHUoKXt9dmFyIGY9MWUtNixoPWYqZixwPU1hdGguUEksZD1wLzIsZz0oTWF0aC5zcXJ0KHApLHAvMTgwKSx2PTE4MC9wO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQ+MT9kOnQ8LTE/LWQ6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/cDpNYXRoLmFjb3ModCl9dmFyIHg9dC5nZW8ucHJvamVjdGlvbixiPXQuZ2VvLnByb2plY3Rpb25NdXRhdG9yO2Z1bmN0aW9uIF8odCxlKXt2YXIgcj0oMitkKSpNYXRoLnNpbihlKTtlLz0yO2Zvcih2YXIgbj0wLGk9MS8wO248MTAmJk1hdGguYWJzKGkpPmY7bisrKXt2YXIgYT1NYXRoLmNvcyhlKTtlLT1pPShlK01hdGguc2luKGUpKihhKzIpLXIpLygyKmEqKDErYSkpfXJldHVyblsyL01hdGguc3FydChwKig0K3ApKSp0KigxK01hdGguY29zKGUpKSwyKk1hdGguc3FydChwLyg0K3ApKSpNYXRoLnNpbihlKV19dC5nZW8uaW50ZXJydXB0PWZ1bmN0aW9uKGUpe3ZhciByLG49W1tbWy1wLDBdLFswLGRdLFtwLDBdXV0sW1tbLXAsMF0sWzAsLWRdLFtwLDBdXV1dO2Z1bmN0aW9uIGkodCxyKXtmb3IodmFyIGk9cjwwPy0xOjEsYT1uWysocjwwKV0sbz0wLHM9YS5sZW5ndGgtMTtvPHMmJnQ+YVtvXVsyXVswXTsrK28pO3ZhciBsPWUodC1hW29dWzFdWzBdLHIpO3JldHVybiBsWzBdKz1lKGFbb11bMV1bMF0saSpyPmkqYVtvXVswXVsxXT9hW29dWzBdWzFdOnIpWzBdLGx9ZS5pbnZlcnQmJihpLmludmVydD1mdW5jdGlvbih0LGEpe2Zvcih2YXIgbz1yWysoYTwwKV0scz1uWysoYTwwKV0sYz0wLHU9by5sZW5ndGg7Yzx1OysrYyl7dmFyIGY9b1tjXTtpZihmWzBdWzBdPD10JiZ0PGZbMV1bMF0mJmZbMF1bMV08PWEmJmE8ZlsxXVsxXSl7dmFyIGg9ZS5pbnZlcnQodC1lKHNbY11bMV1bMF0sMClbMF0sYSk7cmV0dXJuIGhbMF0rPXNbY11bMV1bMF0sbChpKGhbMF0saFsxXSksW3QsYV0pP2g6bnVsbH19fSk7dmFyIGE9dC5nZW8ucHJvamVjdGlvbihpKSxvPWEuc3RyZWFtO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHIsbixpLGE9LTEsbz10Lmxlbmd0aCxzPXRbMF0sbD1bXTsrK2E8bzspe249KChyPXRbYV0pWzBdLXNbMF0pL2UsaT0oclsxXS1zWzFdKS9lO2Zvcih2YXIgYz0wO2M8ZTsrK2MpbC5wdXNoKFtzWzBdK2MqbixzWzFdK2MqaV0pO3M9cn1yZXR1cm4gbC5wdXNoKHIpLGx9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF0pPGYmJk1hdGguYWJzKHRbMV0tZVsxXSk8Zn1yZXR1cm4gYS5zdHJlYW09ZnVuY3Rpb24oZSl7dmFyIHI9YS5yb3RhdGUoKSxpPW8oZSksbD0oYS5yb3RhdGUoWzAsMF0pLG8oZSkpO3JldHVybiBhLnJvdGF0ZShyKSxpLnNwaGVyZT1mdW5jdGlvbigpe3QuZ2VvLnN0cmVhbShmdW5jdGlvbigpe2Zvcih2YXIgZT0xZS02LHI9W10saT0wLGE9blswXS5sZW5ndGg7aTxhOysraSl7dmFyIG89blswXVtpXSxsPTE4MCpvWzBdWzBdL3AsYz0xODAqb1swXVsxXS9wLHU9MTgwKm9bMV1bMV0vcCxmPTE4MCpvWzJdWzBdL3AsaD0xODAqb1syXVsxXS9wO3IucHVzaChzKFtbbCtlLGMrZV0sW2wrZSx1LWVdLFtmLWUsdS1lXSxbZi1lLGgrZV1dLDMwKSl9Zm9yKHZhciBpPW5bMV0ubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPW5bMV1baV0sbD0xODAqb1swXVswXS9wLGM9MTgwKm9bMF1bMV0vcCx1PTE4MCpvWzFdWzFdL3AsZj0xODAqb1syXVswXS9wLGg9MTgwKm9bMl1bMV0vcDtyLnB1c2gocyhbW2YtZSxoLWVdLFtmLWUsdStlXSxbbCtlLHUrZV0sW2wrZSxjLWVdXSwzMCkpfXJldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdC5tZXJnZShyKV19fSgpLGwpfSxpfSxhLmxvYmVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bW3RbMF1bMF0qcC8xODAsdFswXVsxXSpwLzE4MF0sW3RbMV1bMF0qcC8xODAsdFsxXVsxXSpwLzE4MF0sW3RbMl1bMF0qcC8xODAsdFsyXVsxXSpwLzE4MF1dfSl9KSxyPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXt2YXIgcixuPWUodFswXVswXSx0WzBdWzFdKVswXSxpPWUodFsyXVswXSx0WzJdWzFdKVswXSxhPWUodFsxXVswXSx0WzBdWzFdKVsxXSxvPWUodFsxXVswXSx0WzFdWzFdKVsxXTtyZXR1cm4gYT5vJiYocj1hLGE9byxvPXIpLFtbbixhXSxbaSxvXV19KX0pLGEpOm4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bWzE4MCp0WzBdWzBdL3AsMTgwKnRbMF1bMV0vcF0sWzE4MCp0WzFdWzBdL3AsMTgwKnRbMV1bMV0vcF0sWzE4MCp0WzJdWzBdL3AsMTgwKnRbMl1bMV0vcF1dfSl9KX0sYX0sXy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0uNSplKk1hdGguc3FydCgoNCtwKS9wKSxuPW0ociksaT1NYXRoLmNvcyhuKTtyZXR1cm5bdC8oMi9NYXRoLnNxcnQocCooNCtwKSkqKDEraSkpLG0oKG4rciooaSsyKSkvKDIrZCkpXX0sKHQuZ2VvLmVja2VydDQ9ZnVuY3Rpb24oKXtyZXR1cm4geChfKX0pLnJhdz1fO3ZhciB3PXQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYS5yYXc7ZnVuY3Rpb24gayh0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCksMT09PWUpcmV0dXJuIHc7aWYoZT09PTEvMClyZXR1cm4gVDtmdW5jdGlvbiByKHIsbil7dmFyIGk9dyhyL2Usbik7cmV0dXJuIGlbMF0qPXQsaX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT13LmludmVydChyL3Qsbik7cmV0dXJuIGlbMF0qPWUsaX0scn1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSkvTWF0aC5jb3MoZS89MiksMipNYXRoLnNpbihlKV19ZnVuY3Rpb24gQSh0LGUpe3JldHVyblszKnQvKDIqcCkqTWF0aC5zcXJ0KHAqcC8zLWUqZSksZV19ZnVuY3Rpb24gTSh0LGUpe3JldHVyblt0LDEuMjUqTWF0aC5sb2coTWF0aC50YW4ocC80Ky40KmUpKV19ZnVuY3Rpb24gUyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsbj10Kk1hdGguc2luKGUpLGk9MzA7ZG97ZS09cj0oZStNYXRoLnNpbihlKS1uKS8oMStNYXRoLmNvcyhlKSl9d2hpbGUoTWF0aC5hYnMocik+ZiYmLS1pPjApO3JldHVybiBlLzJ9fVQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MiptKGUvMik7cmV0dXJuW3QqTWF0aC5jb3Moci8yKS9NYXRoLmNvcyhyKSxyXX0sKHQuZ2VvLmhhbW1lcj1mdW5jdGlvbigpe3ZhciB0PTIsZT1iKGspLHI9ZSh0KTtyZXR1cm4gci5jb2VmZmljaWVudD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHQ9K3IpOnR9LHJ9KS5yYXc9ayxBLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblsyLzMqcCp0L01hdGguc3FydChwKnAvMy1lKmUpLGVdfSwodC5nZW8ua2F2cmF5c2tpeTc9ZnVuY3Rpb24oKXtyZXR1cm4geChBKX0pLnJhdz1BLE0uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMi41Kk1hdGguYXRhbihNYXRoLmV4cCguOCplKSktLjYyNSpwXX0sKHQuZ2VvLm1pbGxlcj1mdW5jdGlvbigpe3JldHVybiB4KE0pfSkucmF3PU0sUyhwKTt2YXIgRT1mdW5jdGlvbih0LGUscil7dmFyIG49UyhyKTtmdW5jdGlvbiBpKHIsaSl7cmV0dXJuW3QqcipNYXRoLmNvcyhpPW4oaSkpLGUqTWF0aC5zaW4oaSldfXJldHVybiBpLmludmVydD1mdW5jdGlvbihuLGkpe3ZhciBhPW0oaS9lKTtyZXR1cm5bbi8odCpNYXRoLmNvcyhhKSksbSgoMiphK01hdGguc2luKDIqYSkpL3IpXX0saX0oTWF0aC5TUVJUMi9kLE1hdGguU1FSVDIscCk7ZnVuY3Rpb24gQyh0LGUpe3ZhciByPWUqZSxuPXIqcjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpyK24qKG4qKC4wMDM5NzEqci0uMDAxNTI5Km4pLS4wMTM3OTEpKSxlKigxLjAwNzIyNityKiguMDE1MDg1K24qKC4wMjg4NzQqci0uMDQ0NDc1LS4wMDU5MTYqbikpKV19KHQuZ2VvLm1vbGx3ZWlkZT1mdW5jdGlvbigpe3JldHVybiB4KEUpfSkucmF3PUUsQy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT0yNTtkb3t2YXIgYT1uKm4sbz1hKmE7bi09cj0obiooMS4wMDcyMjYrYSooLjAxNTA4NStvKiguMDI4ODc0KmEtLjA0NDQ3NS0uMDA1OTE2Km8pKSktZSkvKDEuMDA3MjI2K2EqKC4wNDUyNTUrbyooLjI1OTg2NiphLS4zMTEzMjUtLjAwNTkxNioxMSpvKSkpfXdoaWxlKE1hdGguYWJzKHIpPmYmJi0taT4wKTtyZXR1cm5bdC8oLjg3MDcrKGE9bipuKSooYSooYSphKmEqKC4wMDM5NzEtLjAwMTUyOSphKS0uMDEzNzkxKS0uMTMxOTc5KSksbl19LCh0Lmdlby5uYXR1cmFsRWFydGg9ZnVuY3Rpb24oKXtyZXR1cm4geChDKX0pLnJhdz1DO3ZhciBMPVtbLjk5ODYsLS4wNjJdLFsxLDBdLFsuOTk4NiwuMDYyXSxbLjk5NTQsLjEyNF0sWy45OSwuMTg2XSxbLjk4MjIsLjI0OF0sWy45NzMsLjMxXSxbLjk2LC4zNzJdLFsuOTQyNywuNDM0XSxbLjkyMTYsLjQ5NThdLFsuODk2MiwuNTU3MV0sWy44Njc5LC42MTc2XSxbLjgzNSwuNjc2OV0sWy43OTg2LC43MzQ2XSxbLjc1OTcsLjc5MDNdLFsuNzE4NiwuODQzNV0sWy42NzMyLC44OTM2XSxbLjYyMTMsLjkzOTRdLFsuNTcyMiwuOTc2MV0sWy41MzIyLDFdXTtmdW5jdGlvbiB6KHQsZSl7dmFyIHIsbj1NYXRoLm1pbigxOCwzNipNYXRoLmFicyhlKS9wKSxpPU1hdGguZmxvb3IobiksYT1uLWksbz0ocj1MW2ldKVswXSxzPXJbMV0sbD0ocj1MWysraV0pWzBdLGM9clsxXSx1PShyPUxbTWF0aC5taW4oMTksKytpKV0pWzBdLGY9clsxXTtyZXR1cm5bdCoobCthKih1LW8pLzIrYSphKih1LTIqbCtvKS8yKSwoZT4wP2Q6LWQpKihjK2EqKGYtcykvMithKmEqKGYtMipjK3MpLzIpXX1mdW5jdGlvbiBPKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksZV19ZnVuY3Rpb24gSSh0LGUpe3ZhciByLG49TWF0aC5jb3MoZSksaT0ocj15KG4qTWF0aC5jb3ModC89MikpKT9yL01hdGguc2luKHIpOjE7cmV0dXJuWzIqbipNYXRoLnNpbih0KSppLE1hdGguc2luKGUpKmldfWZ1bmN0aW9uIEQodCxlKXt2YXIgcj1JKHQsZSk7cmV0dXJuWyhyWzBdK3QvZCkvMiwoclsxXStlKS8yXX1MLmZvckVhY2goZnVuY3Rpb24odCl7dFsxXSo9MS4wMTQ0fSksei5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lL2Qsbj05MCpyLGk9TWF0aC5taW4oMTgsTWF0aC5hYnMobi81KSksYT1NYXRoLm1heCgwLE1hdGguZmxvb3IoaSkpO2Rve3ZhciBvPUxbYV1bMV0scz1MW2ErMV1bMV0sbD1MW01hdGgubWluKDE5LGErMildWzFdLGM9bC1vLHU9bC0yKnMrbyxmPTIqKE1hdGguYWJzKHIpLXMpL2MscD11L2MsbT1mKigxLXAqZiooMS0yKnAqZikpO2lmKG0+PTB8fDE9PT1hKXtuPShlPj0wPzU6LTUpKihtK2kpO3ZhciB5LHg9NTA7ZG97bT0oaT1NYXRoLm1pbigxOCxNYXRoLmFicyhuKS81KSktKGE9TWF0aC5mbG9vcihpKSksbz1MW2FdWzFdLHM9TFthKzFdWzFdLGw9TFtNYXRoLm1pbigxOSxhKzIpXVsxXSxuLT0oeT0oZT49MD9kOi1kKSoocyttKihsLW8pLzIrbSptKihsLTIqcytvKS8yKS1lKSp2fXdoaWxlKE1hdGguYWJzKHkpPmgmJi0teD4wKTticmVha319d2hpbGUoLS1hPj0wKTt2YXIgYj1MW2FdWzBdLF89TFthKzFdWzBdLHc9TFtNYXRoLm1pbigxOSxhKzIpXVswXTtyZXR1cm5bdC8oXyttKih3LWIpLzIrbSptKih3LTIqXytiKS8yKSxuKmddfSwodC5nZW8ucm9iaW5zb249ZnVuY3Rpb24oKXtyZXR1cm4geCh6KX0pLnJhdz16LE8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QvTWF0aC5jb3MoZSksZV19LCh0Lmdlby5zaW51c29pZGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHgoTyl9KS5yYXc9TyxJLmludmVydD1mdW5jdGlvbih0LGUpe2lmKCEodCp0KzQqZSplPnAqcCtmKSl7dmFyIHI9dCxuPWUsaT0yNTtkb3t2YXIgYSxvPU1hdGguc2luKHIpLHM9TWF0aC5zaW4oci8yKSxsPU1hdGguY29zKHIvMiksYz1NYXRoLnNpbihuKSx1PU1hdGguY29zKG4pLGg9TWF0aC5zaW4oMipuKSxkPWMqYyxnPXUqdSx2PXMqcyxtPTEtZypsKmwseD1tP3kodSpsKSpNYXRoLnNxcnQoYT0xL20pOmE9MCxiPTIqeCp1KnMtdCxfPXgqYy1lLHc9YSooZyp2K3gqdSpsKmQpLGs9YSooLjUqbypoLTIqeCpjKnMpLFQ9LjI1KmEqKGgqcy14KmMqZypvKSxBPWEqKGQqbCt4KnYqdSksTT1rKlQtQSp3O2lmKCFNKWJyZWFrO3ZhciBTPShfKmstYipBKS9NLEU9KGIqVC1fKncpL007ci09UyxuLT1FfXdoaWxlKChNYXRoLmFicyhTKT5mfHxNYXRoLmFicyhFKT5mKSYmLS1pPjApO3JldHVybltyLG5dfX0sKHQuZ2VvLmFpdG9mZj1mdW5jdGlvbigpe3JldHVybiB4KEkpfSkucmF3PUksRC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ZSxpPTI1O2Rve3ZhciBhLG89TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxsPU1hdGguc2luKDIqbiksYz1zKnMsdT1vKm8saD1NYXRoLnNpbihyKSxwPU1hdGguY29zKHIvMiksZz1NYXRoLnNpbihyLzIpLHY9ZypnLG09MS11KnAqcCx4PW0/eShvKnApKk1hdGguc3FydChhPTEvbSk6YT0wLGI9LjUqKDIqeCpvKmcrci9kKS10LF89LjUqKHgqcytuKS1lLHc9LjUqYSoodSp2K3gqbypwKmMpKy41L2Qsaz1hKihoKmwvNC14KnMqZyksVD0uMTI1KmEqKGwqZy14KnMqdSpoKSxBPS41KmEqKGMqcCt4KnYqbykrLjUsTT1rKlQtQSp3LFM9KF8qay1iKkEpL00sRT0oYipULV8qdykvTTtyLT1TLG4tPUV9d2hpbGUoKE1hdGguYWJzKFMpPmZ8fE1hdGguYWJzKEUpPmYpJiYtLWk+MCk7cmV0dXJuW3Isbl19LCh0Lmdlby53aW5rZWwzPWZ1bmN0aW9uKCl7cmV0dXJuIHgoRCl9KS5yYXc9RH19LHt9XSw3ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPU1hdGguUEkvMTgwLHM9MTgwL01hdGguUEksbD17Y3Vyc29yOiJwb2ludGVyIn0sYz17Y3Vyc29yOiJhdXRvIn07ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBuLmJlaGF2aW9yLnpvb20oKS50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSkuc2NhbGUoZS5zY2FsZSgpKX1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj10LmlkLG89dC5ncmFwaERpdixzPW8ubGF5b3V0LGw9c1tuXSxjPW8uX2Z1bGxMYXlvdXQsdT1jW25dLGY9e30saD17fTtmdW5jdGlvbiBwKHQsZSl7ZltuKyIuIit0XT1pLm5lc3RlZFByb3BlcnR5KGwsdCkuZ2V0KCksYS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixzLGMuX3ByZUdVSSxmKTt2YXIgcj1pLm5lc3RlZFByb3BlcnR5KHUsdCk7ci5nZXQoKSE9PWUmJihyLnNldChlKSxpLm5lc3RlZFByb3BlcnR5KGwsdCkuc2V0KGUpLGhbbisiLiIrdF09ZSl9cihwKSxwKCJwcm9qZWN0aW9uLnNjYWxlIixlLnNjYWxlKCkvdC5maXRTY2FsZSksby5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGgpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj11KDAsZSk7ZnVuY3Rpb24gaShyKXt2YXIgbj1lLmludmVydCh0Lm1pZFB0KTtyKCJjZW50ZXIubG9uIixuWzBdKSxyKCJjZW50ZXIubGF0IixuWzFdKX1yZXR1cm4gci5vbigiem9vbXN0YXJ0IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpfSkub24oInpvb20iLGZ1bmN0aW9uKCl7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKS50cmFuc2xhdGUobi5ldmVudC50cmFuc2xhdGUpLHQucmVuZGVyKCl9KS5vbigiem9vbWVuZCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShjKSxmKHQsZSxpKX0pLHJ9ZnVuY3Rpb24gcCh0LGUpe3ZhciByLGksYSxvLHMsaCxwLGQsZyx2PXUoMCxlKSxtPTI7ZnVuY3Rpb24geSh0KXtyZXR1cm4gZS5pbnZlcnQodCl9ZnVuY3Rpb24geChyKXt2YXIgbj1lLnJvdGF0ZSgpLGk9ZS5pbnZlcnQodC5taWRQdCk7cigicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iLC1uWzBdKSxyKCJjZW50ZXIubG9uIixpWzBdKSxyKCJjZW50ZXIubGF0IixpWzFdKX1yZXR1cm4gdi5vbigiem9vbXN0YXJ0IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpLHI9bi5tb3VzZSh0aGlzKSxpPWUucm90YXRlKCksYT1lLnRyYW5zbGF0ZSgpLG89aSxzPXkocil9KS5vbigiem9vbSIsZnVuY3Rpb24oKXtpZihoPW4ubW91c2UodGhpcyksZnVuY3Rpb24odCl7dmFyIHI9eSh0KTtpZighcilyZXR1cm4hMDt2YXIgbj1lKHIpO3JldHVybiBNYXRoLmFicyhuWzBdLXRbMF0pPm18fE1hdGguYWJzKG5bMV0tdFsxXSk+bX0ocikpcmV0dXJuIHYuc2NhbGUoZS5zY2FsZSgpKSx2b2lkIHYudHJhbnNsYXRlKGUudHJhbnNsYXRlKCkpO2Uuc2NhbGUobi5ldmVudC5zY2FsZSksZS50cmFuc2xhdGUoW2FbMF0sbi5ldmVudC50cmFuc2xhdGVbMV1dKSxzP3koaCkmJihkPXkoaCkscD1bb1swXSsoZFswXS1zWzBdKSxpWzFdLGlbMl1dLGUucm90YXRlKHApLG89cCk6cz15KHI9aCksZz0hMCx0LnJlbmRlcigpfSkub24oInpvb21lbmQiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksZyYmZih0LGUseCl9KSx2fWZ1bmN0aW9uIGQodCxlKXt2YXIgcixpPXtyOmUucm90YXRlKCksazplLnNjYWxlKCl9LGE9dSgwLGUpLGg9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPWFyZ3VtZW50cy5sZW5ndGgsaT1bXTtmb3IoOysrZTxyOylpLnB1c2goYXJndW1lbnRzW2VdKTt2YXIgYT1uLmRpc3BhdGNoLmFwcGx5KG51bGwsaSk7cmV0dXJuIGEub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG87dHJ5e289aS5zb3VyY2VFdmVudD1uLmV2ZW50LGkudGFyZ2V0PXQsbi5ldmVudD1pLGFbaS50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7bi5ldmVudD1vfX19LGF9KGEsInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIikscD0wLGQ9YS5vbjtmdW5jdGlvbiBtKHQpe3ZhciByPWUucm90YXRlKCk7dCgicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iLC1yWzBdKSx0KCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCIsLXJbMV0pfXJldHVybiBhLm9uKCJ6b29tc3RhcnQiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCk7dmFyIHQsYyx1LGYsbSxiLF8sdyxrLFQsQSxNPW4ubW91c2UodGhpcyksUz1lLnJvdGF0ZSgpLEU9UyxDPWUudHJhbnNsYXRlKCksTD0oYz0uNSoodD1TKVswXSpvLHU9LjUqdFsxXSpvLGY9LjUqdFsyXSpvLG09TWF0aC5zaW4oYyksYj1NYXRoLmNvcyhjKSxfPU1hdGguc2luKHUpLHc9TWF0aC5jb3ModSksaz1NYXRoLnNpbihmKSxUPU1hdGguY29zKGYpLFtiKncqVCttKl8qayxtKncqVC1iKl8qayxiKl8qVCttKncqayxiKncqay1tKl8qVF0pO3I9ZyhlLE0pLGQuY2FsbChhLCJ6b29tIixmdW5jdGlvbigpe3ZhciB0LGEsbyxsLGMsdSxmLHAsZCxtLGI9bi5tb3VzZSh0aGlzKTtpZihlLnNjYWxlKGkuaz1uLmV2ZW50LnNjYWxlKSxyKXtpZihnKGUsYikpe2Uucm90YXRlKFMpLnRyYW5zbGF0ZShDKTt2YXIgXz1nKGUsYiksdz1mdW5jdGlvbih0LGUpe2lmKCF0fHwhZSlyZXR1cm47dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfSh0LGUpLG49TWF0aC5zcXJ0KHgocixyKSksaT0uNSpNYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSx4KHQsZSkpKSksYT1NYXRoLnNpbihpKS9uO3JldHVybiBuJiZbTWF0aC5jb3MoaSksclsyXSphLC1yWzFdKmEsclswXSphXX0ocixfKSxrPWZ1bmN0aW9uKHQpe3JldHVybltNYXRoLmF0YW4yKDIqKHRbMF0qdFsxXSt0WzJdKnRbM10pLDEtMioodFsxXSp0WzFdK3RbMl0qdFsyXSkpKnMsTWF0aC5hc2luKE1hdGgubWF4KC0xLE1hdGgubWluKDEsMioodFswXSp0WzJdLXRbM10qdFsxXSkpKSkqcyxNYXRoLmF0YW4yKDIqKHRbMF0qdFszXSt0WzFdKnRbMl0pLDEtMioodFsyXSp0WzJdK3RbM10qdFszXSkpKnNdfSgoYT13LG89KHQ9TClbMF0sbD10WzFdLGM9dFsyXSx1PXRbM10sZj1hWzBdLHA9YVsxXSxkPWFbMl0sbT1hWzNdLFtvKmYtbCpwLWMqZC11Km0sbypwK2wqZitjKm0tdSpkLG8qZC1sKm0rYypmK3UqcCxvKm0rbCpkLWMqcCt1KmZdKSksVD1pLnI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXkoZSwyLHRbMF0pO249eShuLDEsdFsxXSksbj15KG4sMCx0WzJdLXJbMl0pO3ZhciBpLGEsbz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1uWzBdLGY9blsxXSxoPW5bMl0scD1NYXRoLmF0YW4yKGwsbykqcyxkPU1hdGguc3FydChvKm8rbCpsKTtNYXRoLmFicyhmKT5kPyhhPShmPjA/OTA6LTkwKS1wLGk9MCk6KGE9TWF0aC5hc2luKGYvZCkqcy1wLGk9TWF0aC5zcXJ0KGQqZC1mKmYpKTt2YXIgZz0xODAtYS0yKnAsbT0oTWF0aC5hdGFuMihoLHUpLU1hdGguYXRhbjIoYyxpKSkqcyx4PShNYXRoLmF0YW4yKGgsdSktTWF0aC5hdGFuMihjLC1pKSkqcyxiPXYoclswXSxyWzFdLGEsbSksXz12KHJbMF0sclsxXSxnLHgpO3JldHVybiBiPD1fP1thLG0sclsyXV06W2cseCxyWzJdXX0oayxyLEUpO2lzRmluaXRlKFRbMF0pJiZpc0Zpbml0ZShUWzFdKSYmaXNGaW5pdGUoVFsyXSl8fChUPUUpLGUucm90YXRlKFQpLEU9VH19ZWxzZSByPWcoZSxNPWIpO2gub2YodGhpcyxhcmd1bWVudHMpKHt0eXBlOiJ6b29tIn0pfSksQT1oLm9mKHRoaXMsYXJndW1lbnRzKSxwKyt8fEEoe3R5cGU6Inpvb21zdGFydCJ9KX0pLm9uKCJ6b29tZW5kIixmdW5jdGlvbigpe3ZhciByO24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGQuY2FsbChhLCJ6b29tIixudWxsKSxyPWgub2YodGhpcyxhcmd1bWVudHMpLC0tcHx8cih7dHlwZToiem9vbWVuZCJ9KSxmKHQsZSxtKX0pLm9uKCJ6b29tLnJlZHJhdyIsZnVuY3Rpb24oKXt0LnJlbmRlcigpfSksbi5yZWJpbmQoYSxoLCJvbiIpfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj10LmludmVydChlKTtyZXR1cm4gciYmaXNGaW5pdGUoclswXSkmJmlzRmluaXRlKHJbMV0pJiZmdW5jdGlvbih0KXt2YXIgZT10WzBdKm8scj10WzFdKm8sbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX0ocil9ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgaT1tKHItdCksYT1tKG4tZSk7cmV0dXJuIE1hdGguc3FydChpKmkrYSphKX1mdW5jdGlvbiBtKHQpe3JldHVybih0JTM2MCs1NDApJTM2MC0xODB9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49cipvLGk9dC5zbGljZSgpLGE9MD09PWU/MTowLHM9Mj09PWU/MToyLGw9TWF0aC5jb3MobiksYz1NYXRoLnNpbihuKTtyZXR1cm4gaVthXT10W2FdKmwtdFtzXSpjLGlbc109dFtzXSpsK3RbYV0qYyxpfWZ1bmN0aW9uIHgodCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXIrPXRbbl0qZVtuXTtyZXR1cm4gcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnByb2plY3Rpb247cmV0dXJuKGUuX2lzU2NvcGVkP2g6ZS5faXNDbGlwcGVkP2Q6cCkodCxyKX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksZDM6MTU0fV0sNzg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5IiksaT10KCIuL2NhcnRlc2lhbi9jb25zdGFudHMiKS5TVUJQTE9UX1BBVFRFUk47ci5nZXRTdWJwbG90Q2FsY0RhdGE9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uc3VicGxvdHNSZWdpc3RyeVtlXTtpZighaSlyZXR1cm5bXTtmb3IodmFyIGE9aS5hdHRyLG89W10scz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdO2xbMF0udHJhY2VbYV09PT1yJiZvLnB1c2gobCl9cmV0dXJuIG99LHIuZ2V0TW9kdWxlQ2FsY0RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixpPVtdLGE9W107aWYoIShyPSJzdHJpbmciPT10eXBlb2YgZT9uLmdldE1vZHVsZShlKS5wbG90OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZS5wbG90KSlyZXR1cm5baSx0XTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXSxsPXNbMF0udHJhY2U7ITA9PT1sLnZpc2libGUmJihsLl9tb2R1bGUucGxvdD09PXI/aS5wdXNoKHMpOmEucHVzaChzKSl9cmV0dXJuW2ksYV19LHIuZ2V0U3VicGxvdERhdGE9ZnVuY3Rpb24odCxlLHIpe2lmKCFuLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuW107dmFyIGEsbyxzLGw9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdLmF0dHIsYz1bXTtpZigiZ2wyZCI9PT1lKXt2YXIgdT1yLm1hdGNoKGkpO289IngiK3VbMV0scz0ieSIrdVsyXX1mb3IodmFyIGY9MDtmPHQubGVuZ3RoO2YrKylhPXRbZl0sImdsMmQiPT09ZSYmbi50cmFjZUlzKGEsImdsMmQiKT9hW2xbMF1dPT09byYmYVtsWzFdXT09PXMmJmMucHVzaChhKTphW2xdPT09ciYmYy5wdXNoKGEpO3JldHVybiBjfX0seyIuLi9yZWdpc3RyeSI6ODI5LCIuL2NhcnRlc2lhbi9jb25zdGFudHMiOjc1NH1dLDc4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtb3VzZS1jaGFuZ2UiKSxpPXQoIm1vdXNlLXdoZWVsIiksYT10KCJtb3VzZS1ldmVudC1vZmZzZXQiKSxvPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKSxzPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpO2Z1bmN0aW9uIGwodCxlKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLnBsb3Q9ZSx0aGlzLm1vdXNlTGlzdGVuZXI9bnVsbCx0aGlzLndoZWVsTGlzdGVuZXI9bnVsbCx0aGlzLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx0aGlzLmxhc3RQb3M9WzAsMF0sdGhpcy5ib3hFbmFibGVkPSExLHRoaXMuYm94SW5pdGVkPSExLHRoaXMuYm94U3RhcnQ9WzAsMF0sdGhpcy5ib3hFbmQ9WzAsMF0sdGhpcy5kcmFnU3RhcnQ9WzAsMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubW91c2VDb250YWluZXIscj10LmdscGxvdCxjPW5ldyBsKGUscik7ZnVuY3Rpb24gdSgpe3QueGF4aXMuYXV0b3JhbmdlPSExLHQueWF4aXMuYXV0b3JhbmdlPSExfWZ1bmN0aW9uIGYoZSxuLGkpe3ZhciBhLHMsbD10LmNhbGNEYXRhQm94KCksZj1yLnZpZXdCb3gsaD1jLmxhc3RQb3NbMF0scD1jLmxhc3RQb3NbMV0sZD1vLk1JTkRSQUcqci5waXhlbFJhdGlvLGc9by5NSU5aT09NKnIucGl4ZWxSYXRpbztmdW5jdGlvbiB2KGUscixuKXt2YXIgaT1NYXRoLm1pbihyLG4pLGE9TWF0aC5tYXgocixuKTtpIT09YT8obFtlXT1pLGxbZSsyXT1hLGMuZGF0YUJveD1sLHQuc2V0UmFuZ2VzKGwpKToodC5zZWxlY3RCb3guc2VsZWN0Qm94PVswLDAsMSwxXSx0LmdscGxvdC5zZXREaXJ0eSgpKX1zd2l0Y2gobio9ci5waXhlbFJhdGlvLGkqPXIucGl4ZWxSYXRpbyxpPWZbM10tZlsxXS1pLHQuZnVsbExheW91dC5kcmFnbW9kZSl7Y2FzZSJ6b29tIjppZihlKXt2YXIgbT1uLyhmWzJdLWZbMF0pKihsWzJdLWxbMF0pK2xbMF0seT1pLyhmWzNdLWZbMV0pKihsWzNdLWxbMV0pK2xbMV07Yy5ib3hJbml0ZWR8fChjLmJveFN0YXJ0WzBdPW0sYy5ib3hTdGFydFsxXT15LGMuZHJhZ1N0YXJ0WzBdPW4sYy5kcmFnU3RhcnRbMV09aSksYy5ib3hFbmRbMF09bSxjLmJveEVuZFsxXT15LGMuYm94SW5pdGVkPSEwLGMuYm94RW5hYmxlZHx8Yy5ib3hTdGFydFswXT09PWMuYm94RW5kWzBdJiZjLmJveFN0YXJ0WzFdPT09Yy5ib3hFbmRbMV18fChjLmJveEVuYWJsZWQ9ITApO3ZhciB4PU1hdGguYWJzKGMuZHJhZ1N0YXJ0WzBdLW4pPGcsYj1NYXRoLmFicyhjLmRyYWdTdGFydFsxXS1pKTxnO2lmKCFmdW5jdGlvbigpe2Zvcih2YXIgZT10LmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxyPXQueGF4aXMuX2lkLG49dC55YXhpcy5faWQsaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKC0xIT09ZVtpXVtyXSl7aWYoLTEhPT1lW2ldW25dKXJldHVybiEwO2JyZWFrfXJldHVybiExfSgpfHx4JiZiKXgmJihjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKSxiJiYoYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXSk7ZWxzZXthPWMuYm94RW5kWzBdLWMuYm94U3RhcnRbMF0scz1jLmJveEVuZFsxXS1jLmJveFN0YXJ0WzFdO3ZhciBfPShsWzNdLWxbMV0pLyhsWzJdLWxbMF0pO01hdGguYWJzKGEqXyk+TWF0aC5hYnMocyk/KGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rTWF0aC5hYnMoYSkqXyoocz49MD8xOi0xKSxjLmJveEVuZFsxXTxsWzFdPyhjLmJveEVuZFsxXT1sWzFdLGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rKGxbMV0tYy5ib3hTdGFydFsxXSkvTWF0aC5hYnMoXykpOmMuYm94RW5kWzFdPmxbM10mJihjLmJveEVuZFsxXT1sWzNdLGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rKGxbM10tYy5ib3hTdGFydFsxXSkvTWF0aC5hYnMoXykpKTooYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXStNYXRoLmFicyhzKS9fKihhPj0wPzE6LTEpLGMuYm94RW5kWzBdPGxbMF0/KGMuYm94RW5kWzBdPWxbMF0sYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXSsobFswXS1jLmJveFN0YXJ0WzBdKSpNYXRoLmFicyhfKSk6Yy5ib3hFbmRbMF0+bFsyXSYmKGMuYm94RW5kWzBdPWxbMl0sYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXSsobFsyXS1jLmJveFN0YXJ0WzBdKSpNYXRoLmFicyhfKSkpfX1lbHNlIGMuYm94RW5hYmxlZD8oYT1jLmJveFN0YXJ0WzBdIT09Yy5ib3hFbmRbMF0scz1jLmJveFN0YXJ0WzFdIT09Yy5ib3hFbmRbMV0sYXx8cz8oYSYmKHYoMCxjLmJveFN0YXJ0WzBdLGMuYm94RW5kWzBdKSx0LnhheGlzLmF1dG9yYW5nZT0hMSkscyYmKHYoMSxjLmJveFN0YXJ0WzFdLGMuYm94RW5kWzFdKSx0LnlheGlzLmF1dG9yYW5nZT0hMSksdC5yZWxheW91dENhbGxiYWNrKCkpOnQuZ2xwbG90LnNldERpcnR5KCksYy5ib3hFbmFibGVkPSExLGMuYm94SW5pdGVkPSExKTpjLmJveEluaXRlZCYmKGMuYm94SW5pdGVkPSExKTticmVhaztjYXNlInBhbiI6Yy5ib3hFbmFibGVkPSExLGMuYm94SW5pdGVkPSExLGU/KGMucGFubmluZ3x8KGMuZHJhZ1N0YXJ0WzBdPW4sYy5kcmFnU3RhcnRbMV09aSksTWF0aC5hYnMoYy5kcmFnU3RhcnRbMF0tbik8ZCYmKG49Yy5kcmFnU3RhcnRbMF0pLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzFdLWkpPGQmJihpPWMuZHJhZ1N0YXJ0WzFdKSxhPShoLW4pKihsWzJdLWxbMF0pLyhyLnZpZXdCb3hbMl0tci52aWV3Qm94WzBdKSxzPShwLWkpKihsWzNdLWxbMV0pLyhyLnZpZXdCb3hbM10tci52aWV3Qm94WzFdKSxsWzBdKz1hLGxbMl0rPWEsbFsxXSs9cyxsWzNdKz1zLHQuc2V0UmFuZ2VzKGwpLGMucGFubmluZz0hMCxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpKTpjLnBhbm5pbmcmJihjLnBhbm5pbmc9ITEsdC5yZWxheW91dENhbGxiYWNrKCkpfWMubGFzdFBvc1swXT1uLGMubGFzdFBvc1sxXT1pfXJldHVybiBjLm1vdXNlTGlzdGVuZXI9bihlLGYpLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24odCl7dmFyIHI9YSh0LmNoYW5nZWRUb3VjaGVzWzBdLGUpO2YoMCxyWzBdLHJbMV0pLGYoMSxyWzBdLHJbMV0pLHQucHJldmVudERlZmF1bHQoKX0sISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9YSh0LmNoYW5nZWRUb3VjaGVzWzBdLGUpO2YoMSxyWzBdLHJbMV0pLHQucHJldmVudERlZmF1bHQoKX0sISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGZ1bmN0aW9uKHQpe2YoMCxjLmxhc3RQb3NbMF0sYy5sYXN0UG9zWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhcyYme3Bhc3NpdmU6ITF9KSxjLndoZWVsTGlzdGVuZXI9aShlLGZ1bmN0aW9uKGUsbil7aWYoIXQuc2Nyb2xsWm9vbSlyZXR1cm4hMTt2YXIgaT10LmNhbGNEYXRhQm94KCksYT1yLnZpZXdCb3gsbz1jLmxhc3RQb3NbMF0scz1jLmxhc3RQb3NbMV0sbD1NYXRoLmV4cCg1Km4vKGFbM10tYVsxXSkpLGY9by8oYVsyXS1hWzBdKSooaVsyXS1pWzBdKStpWzBdLGg9cy8oYVszXS1hWzFdKSooaVszXS1pWzFdKStpWzFdO3JldHVybiBpWzBdPShpWzBdLWYpKmwrZixpWzJdPShpWzJdLWYpKmwrZixpWzFdPShpWzFdLWgpKmwraCxpWzNdPShpWzNdLWgpKmwraCx0LnNldFJhbmdlcyhpKSxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpLHQucmVsYXlvdXRDYWxsYmFjaygpLCEwfSwhMCksY319LHsiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NzU0LCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQwMywibW91c2UtY2hhbmdlIjo0MjcsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDI4LCJtb3VzZS13aGVlbCI6NDMwfV0sNzg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gYSh0KXt0aGlzLnNjZW5lPXQsdGhpcy5nbD10LmdsLHRoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sdGhpcy5zY3JlZW5Cb3g9WzAsMCwxLDFdLHRoaXMudmlld0JveD1bMCwwLDEsMV0sdGhpcy5kYXRhQm94PVstMSwtMSwxLDFdLHRoaXMuYm9yZGVyTGluZUVuYWJsZT1bITEsITEsITEsITFdLHRoaXMuYm9yZGVyTGluZVdpZHRoPVsxLDEsMSwxXSx0aGlzLmJvcmRlckxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tzPVtbXSxbXV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy50aWNrUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy50aWNrQW5nbGU9WzAsMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxzPVsieCIsInkiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbFNpemU9WzEyLDEyXSx0aGlzLmxhYmVsRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGU9IiIsdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQ2VudGVyPVswLDAsMCwwXSx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMudGl0bGVGb250PSJzYW5zLXNlcmlmIix0aGlzLnRpdGxlU2l6ZT0xOCx0aGlzLmdyaWRMaW5lRW5hYmxlPVshMCwhMF0sdGhpcy5ncmlkTGluZUNvbG9yPVtbMCwwLDAsLjVdLFswLDAsMCwuNV1dLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVsxLDFdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuc3RhdGljPXRoaXMuc2NlbmUuc3RhdGljUGxvdH12YXIgbz1hLnByb3RvdHlwZSxzPVsieGF4aXMiLCJ5YXhpcyJdO28ubWVyZ2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsbyxsLGMsdSxmLGgscDtmb3IodGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1pKHQucGxvdF9iZ2NvbG9yKSxoPTA7aDwyOysraCl7dmFyIGQ9KGU9c1toXSkuY2hhckF0KDApO2ZvcihuPShyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0pLnRpdGxlLnRleHQ9PT10aGlzLnNjZW5lLmZ1bGxMYXlvdXQuX2RmbHRUaXRsZVtkXT8iIjpyLnRpdGxlLnRleHQscD0wO3A8PTI7cCs9Mil0aGlzLmxhYmVsRW5hYmxlW2grcF09ITEsdGhpcy5sYWJlbHNbaCtwXT1uLHRoaXMubGFiZWxDb2xvcltoK3BdPWkoci50aXRsZS5mb250LmNvbG9yKSx0aGlzLmxhYmVsRm9udFtoK3BdPXIudGl0bGUuZm9udC5mYW1pbHksdGhpcy5sYWJlbFNpemVbaCtwXT1yLnRpdGxlLmZvbnQuc2l6ZSx0aGlzLmxhYmVsUGFkW2grcF09dGhpcy5nZXRMYWJlbFBhZChlLHIpLHRoaXMudGlja0VuYWJsZVtoK3BdPSExLHRoaXMudGlja0NvbG9yW2grcF09aSgoci50aWNrZm9udHx8e30pLmNvbG9yKSx0aGlzLnRpY2tBbmdsZVtoK3BdPSJhdXRvIj09PXIudGlja2FuZ2xlPzA6TWF0aC5QSSotci50aWNrYW5nbGUvMTgwLHRoaXMudGlja1BhZFtoK3BdPXRoaXMuZ2V0VGlja1BhZChyKSx0aGlzLnRpY2tNYXJrTGVuZ3RoW2grcF09MCx0aGlzLnRpY2tNYXJrV2lkdGhbaCtwXT1yLnRpY2t3aWR0aHx8MCx0aGlzLnRpY2tNYXJrQ29sb3JbaCtwXT1pKHIudGlja2NvbG9yKSx0aGlzLmJvcmRlckxpbmVFbmFibGVbaCtwXT0hMSx0aGlzLmJvcmRlckxpbmVDb2xvcltoK3BdPWkoci5saW5lY29sb3IpLHRoaXMuYm9yZGVyTGluZVdpZHRoW2grcF09ci5saW5ld2lkdGh8fDA7Yz10aGlzLmhhc1NoYXJlZEF4aXMociksbz10aGlzLmhhc0F4aXNJbkRmbHRQb3MoZSxyKSYmIWMsbD10aGlzLmhhc0F4aXNJbkFsdHJQb3MoZSxyKSYmIWMsYT1yLm1pcnJvcnx8ITEsdT1jPy0xIT09U3RyaW5nKGEpLmluZGV4T2YoImFsbCIpOiEhYSxmPWM/ImFsbHRpY2tzIj09PWE6LTEhPT1TdHJpbmcoYSkuaW5kZXhPZigidGlja3MiKSxvP3RoaXMubGFiZWxFbmFibGVbaF09ITA6bCYmKHRoaXMubGFiZWxFbmFibGVbaCsyXT0hMCksbz90aGlzLnRpY2tFbmFibGVbaF09ci5zaG93dGlja2xhYmVsczpsJiYodGhpcy50aWNrRW5hYmxlW2grMl09ci5zaG93dGlja2xhYmVscyksKG98fHUpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW2hdPXIuc2hvd2xpbmUpLChsfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtoKzJdPXIuc2hvd2xpbmUpLChvfHxmKSYmKHRoaXMudGlja01hcmtMZW5ndGhbaF09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksKGx8fGYpJiYodGhpcy50aWNrTWFya0xlbmd0aFtoKzJdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLHRoaXMuZ3JpZExpbmVFbmFibGVbaF09ci5zaG93Z3JpZCx0aGlzLmdyaWRMaW5lQ29sb3JbaF09aShyLmdyaWRjb2xvciksdGhpcy5ncmlkTGluZVdpZHRoW2hdPXIuZ3JpZHdpZHRoLHRoaXMuemVyb0xpbmVFbmFibGVbaF09ci56ZXJvbGluZSx0aGlzLnplcm9MaW5lQ29sb3JbaF09aShyLnplcm9saW5lY29sb3IpLHRoaXMuemVyb0xpbmVXaWR0aFtoXT1yLnplcm9saW5ld2lkdGh9fSxvLmhhc1NoYXJlZEF4aXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbExheW91dC5fc3VicGxvdHMuZ2wyZDtyZXR1cm4gMCE9PW4uZmluZFN1YnBsb3RzV2l0aEF4aXMocix0KS5pbmRleE9mKGUuaWQpfSxvLmhhc0F4aXNJbkRmbHRQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuInhheGlzIj09PXQ/ImJvdHRvbSI9PT1yOiJ5YXhpcyI9PT10PyJsZWZ0Ij09PXI6dm9pZCAwfSxvLmhhc0F4aXNJbkFsdHJQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1yOiJ5YXhpcyI9PT10PyJyaWdodCI9PT1yOnZvaWQgMH0sby5nZXRMYWJlbFBhZD1mdW5jdGlvbih0LGUpe3ZhciByPWUudGl0bGUuZm9udC5zaXplLG49ZS5zaG93dGlja2xhYmVscztyZXR1cm4ieGF4aXMiPT09dD8idG9wIj09PWUuc2lkZT9yKigxLjUrKG4/MTowKSktMTA6ciooMS41KyhuPy41OjApKS0xMDoieWF4aXMiPT09dD8icmlnaHQiPT09ZS5zaWRlPzEwK3IqKDEuNSsobj8xOi41KSk6MTArciooMS41KyhuPy41OjApKTp2b2lkIDB9LG8uZ2V0VGlja1BhZD1mdW5jdGlvbih0KXtyZXR1cm4ib3V0c2lkZSI9PT10LnRpY2tzPzEwK3QudGlja2xlbjoxNX0sby5nZXRUaWNrTWFya0xlbmd0aD1mdW5jdGlvbih0KXtpZighdC50aWNrcylyZXR1cm4gMDt2YXIgZT10LnRpY2tsZW47cmV0dXJuImluc2lkZSI9PT10LnRpY2tzPy1lOmV9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEodCl9fSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcyMywiLi4vY2FydGVzaWFuL2F4ZXMiOjc0OH1dLDc4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuL3NjZW5lMmQiKSxhPXQoIi4uL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLGw9dCgiLi4vY2FydGVzaWFuIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhO3IubmFtZT0iZ2wyZCIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9cy5pZFJlZ2V4LHIuYXR0clJlZ2V4PXMuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuLi9jYXJ0ZXNpYW4vYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2UuX2hhcygiY2FydGVzaWFuIil8fGwuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSxyLmxheW91dEF0dHJPdmVycmlkZXM9bihsLmxheW91dEF0dHJpYnV0ZXMsInBsb3QiLCJmcm9tLXJvb3QiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe3Bsb3RfYmdjb2xvcjphLnBsb3RfYmdjb2xvcixob3ZlcmxhYmVsOmMuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsMmQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9ZS5fcGxvdHNbb10sbD11KHIsImdsMmQiLG8pLGM9cy5fc2NlbmUyZDt2b2lkIDA9PT1jJiYoYz1uZXcgaSh7aWQ6byxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb30sZSkscy5fc2NlbmUyZD1jKSxjLnBsb3QobCx0LmNhbGNkYXRhLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMuZ2wyZHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bi5fcGxvdHNbb107aWYocy5fc2NlbmUyZCkwPT09dSh0LCJnbDJkIixvKS5sZW5ndGgmJihzLl9zY2VuZTJkLmRlc3Ryb3koKSxkZWxldGUgbi5fcGxvdHNbb10pfWwuY2xlYW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dC5fY29udGV4dC5zdGF0aWNQbG90fHxsLmRyYXdGcmFtZXdvcmsodCl9LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQsYT1pLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcsInhsaW5rOmhyZWYiOmEseDowLHk6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLGkuZGVzdHJveSgpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsMmQsbj0wO248ci5sZW5ndGg7bisrKXtlLl9wbG90c1tyW25dXS5fc2NlbmUyZC51cGRhdGVGeChlLmRyYWdtb2RlKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiOjYxNywiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY3OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi9jYXJ0ZXNpYW4iOjc1OSwiLi4vY2FydGVzaWFuL2F0dHJpYnV0ZXMiOjc0NiwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NzU0LCIuLi9nZXRfZGF0YSI6Nzg0LCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6ODAxLCIuL3NjZW5lMmQiOjc4OH1dLDc4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbD10KCJnbC1wbG90MmQiKSxjPXQoImdsLXNwaWtlczJkIiksdT10KCJnbC1zZWxlY3QtYm94IiksZj10KCJ3ZWJnbC1jb250ZXh0IiksaD10KCIuL2NvbnZlcnQiKSxwPXQoIi4vY2FtZXJhIiksZD10KCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciKSxnPXQoIi4uL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLHY9Zy5lbmZvcmNlLG09Zy5jbGVhbix5PXQoIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5kb0F1dG9SYW5nZSx4PVsieGF4aXMiLCJ5YXhpcyJdLGI9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLlNVQlBMT1RfUEFUVEVSTjtmdW5jdGlvbiBfKHQsZSl7dGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMucGl4ZWxSYXRpbz10LnBsb3RHbFBpeGVsUmF0aW98fHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuaWQ9dC5pZCx0aGlzLnN0YXRpY1Bsb3Q9ISF0LnN0YXRpY1Bsb3QsdGhpcy5zY3JvbGxab29tPXRoaXMuZ3JhcGhEaXYuX2NvbnRleHQuX3Njcm9sbFpvb20uY2FydGVzaWFuLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLnVwZGF0ZVJlZnMoZSksdGhpcy5tYWtlRnJhbWV3b3JrKCksdGhpcy5zdG9wcGVkfHwodGhpcy5nbHBsb3RPcHRpb25zPWgodGhpcyksdGhpcy5nbHBsb3RPcHRpb25zLm1lcmdlKGUpLHRoaXMuZ2xwbG90PWwodGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmNhbWVyYT1wKHRoaXMpLHRoaXMudHJhY2VzPXt9LHRoaXMuc3Bpa2VzPWModGhpcy5nbHBsb3QpLHRoaXMuc2VsZWN0Qm94PXUodGhpcy5nbHBsb3Qse2lubmVyRmlsbDohMSxvdXRlckZpbGw6ITB9KSx0aGlzLmxhc3RCdXR0b25TdGF0ZT0wLHRoaXMucGlja1Jlc3VsdD1udWxsLHRoaXMuaXNNb3VzZU92ZXI9ITAsdGhpcy5zdG9wcGVkPSExLHRoaXMucmVkcmF3PXRoaXMuZHJhdy5iaW5kKHRoaXMpLHRoaXMucmVkcmF3KCkpfWUuZXhwb3J0cz1fO3ZhciB3PV8ucHJvdG90eXBlO3cubWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe2lmKHRoaXMuc3RhdGljUGxvdCl7aWYoIShpfHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxpPWYoe2NhbnZhczpuLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpKSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIHN0YXRpYyBjYW52YXMvY29udGV4dCBmb3IgaW1hZ2Ugc2VydmVyIik7dGhpcy5jYW52YXM9bix0aGlzLmdsPWl9ZWxzZXt2YXIgdD10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuZ2wtY2FudmFzLWZvY3VzIiksZT1mKHtjYW52YXM6dCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwfSk7aWYoIWUpcmV0dXJuIGQodGhpcyksdm9pZCh0aGlzLnN0b3BwZWQ9ITApO3RoaXMuY2FudmFzPXQsdGhpcy5nbD1lfXZhciByPXRoaXMuY2FudmFzO3Iuc3R5bGUud2lkdGg9IjEwMCUiLHIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9IjBweCIsci5zdHlsZS5sZWZ0PSIwcHgiLHIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMudXBkYXRlU2l6ZShyKSxyLmNsYXNzTmFtZSs9IiB1c2VyLXNlbGVjdC1ub25lIjt2YXIgYT10aGlzLnN2Z0NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7YS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9wPWEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLndpZHRoPWEuc3R5bGUuaGVpZ2h0PSIxMDAlIixhLnN0eWxlWyJ6LWluZGV4Il09MjAsYS5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSI7dmFyIG89dGhpcy5tb3VzZUNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0iYXV0byIsdGhpcy5waWNrQ2FudmFzPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5nbC1jYW52YXMtcGljayIpO3ZhciBzPXRoaXMuY29udGFpbmVyO3MuYXBwZW5kQ2hpbGQoYSkscy5hcHBlbmRDaGlsZChvKTt2YXIgbD10aGlzO28uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMSxsLnVuaG92ZXIoKX0pLG8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITB9KX0sdy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5jbGVhckNvbG9yKDEsMSwxLDApLGUuY2xlYXIoZS5DT0xPUl9CVUZGRVJfQklUfGUuREVQVEhfQlVGRkVSX0JJVCksdGhpcy5nbHBsb3Quc2V0RGlydHkoKSx0aGlzLmdscGxvdC5kcmF3KCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKTtmb3IodmFyIG89MCxzPWktMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWFbNCoocipvK2wpK2NdO2FbNCoocipvK2wpK2NdPWFbNCoocipzK2wpK2NdLGFbNCoocipzK2wpK2NdPXV9dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zi53aWR0aD1yLGYuaGVpZ2h0PWk7dmFyIGgscD1mLmdldENvbnRleHQoIjJkIiksZD1wLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChkLmRhdGEuc2V0KGEpLHAucHV0SW1hZ2VEYXRhKGQsMCwwKSx0KXtjYXNlImpwZWciOmg9Zi50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlIndlYnAiOmg9Zi50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztkZWZhdWx0Omg9Zi50b0RhdGFVUkwoImltYWdlL3BuZyIpfXJldHVybiB0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKG4pLGh9LHcudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0fHwodD10aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5waXhlbFJhdGlvLHI9dGhpcy5mdWxsTGF5b3V0LG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9MHxNYXRoLmNlaWwoZSpuKSxvPTB8TWF0aC5jZWlsKGUqaSk7cmV0dXJuIHQud2lkdGg9PT1hJiZ0LmhlaWdodD09PW98fCh0LndpZHRoPWEsdC5oZWlnaHQ9byksdH0sdy5jb21wdXRlVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy54YXhpcy5zZXRTY2FsZSgpLHRoaXMueWF4aXMuc2V0U2NhbGUoKTtmb3IodmFyIHQ9W28uY2FsY1RpY2tzKHRoaXMueGF4aXMpLG8uY2FsY1RpY2tzKHRoaXMueWF4aXMpXSxlPTA7ZTwyOysrZSlmb3IodmFyIHI9MDtyPHRbZV0ubGVuZ3RoOysrcil0W2VdW3JdLnRleHQ9dFtlXVtyXS50ZXh0KyIiO3JldHVybiB0fSx3LnVwZGF0ZVJlZnM9ZnVuY3Rpb24odCl7dGhpcy5mdWxsTGF5b3V0PXQ7dmFyIGU9dGhpcy5pZC5tYXRjaChiKSxyPSJ4YXhpcyIrZVsxXSxuPSJ5YXhpcyIrZVsyXTt0aGlzLnhheGlzPXRoaXMuZnVsbExheW91dFtyXSx0aGlzLnlheGlzPXRoaXMuZnVsbExheW91dFtuXX0sdy5yZWxheW91dENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdixlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49dC5sYXlvdXQsaT17fSxvPWlbZS5fbmFtZSsiLnJhbmdlIl09ZS5yYW5nZS5zbGljZSgpLHM9aVtyLl9uYW1lKyIucmFuZ2UiXT1yLnJhbmdlLnNsaWNlKCk7aVtlLl9uYW1lKyIuYXV0b3JhbmdlIl09ZS5hdXRvcmFuZ2UsaVtyLl9uYW1lKyIuYXV0b3JhbmdlIl09ci5hdXRvcmFuZ2UsYS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksaSk7dmFyIGw9bltlLl9uYW1lXTtsLnJhbmdlPW8sbC5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2U7dmFyIGM9bltyLl9uYW1lXTtjLnJhbmdlPXMsYy5hdXRvcmFuZ2U9ci5hdXRvcmFuZ2UsaS5sYXN0SW5wdXRUaW1lPXRoaXMuY2FtZXJhLmxhc3RJbnB1dFRpbWUsdC5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGkpfSx3LmNhbWVyYUNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNhbWVyYTt0aGlzLmdscGxvdC5zZXREYXRhQm94KHRoaXMuY2FsY0RhdGFCb3goKSk7dmFyIGU9dGhpcy5jb21wdXRlVGlja01hcmtzKCk7KGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwyOysrcil7dmFyIG49dFtyXSxpPWVbcl07aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGE9MDthPG4ubGVuZ3RoOysrYSlpZihuW2FdLnghPT1pW2FdLngpcmV0dXJuITB9cmV0dXJuITF9KShlLHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcykmJih0aGlzLmdscGxvdE9wdGlvbnMudGlja3M9ZSx0aGlzLmdscGxvdE9wdGlvbnMuZGF0YUJveD10LmRhdGFCb3gsdGhpcy5nbHBsb3QudXBkYXRlKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5oYW5kbGVBbm5vdGF0aW9ucygpKX0sdy5oYW5kbGVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy5mdWxsTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLnhyZWY9PT10aGlzLnhheGlzLl9pZCYmbi55cmVmPT09dGhpcy55YXhpcy5faWQmJmEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSh0LHIpfX0sdy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5nbHBsb3Qpe3ZhciB0PXRoaXMudHJhY2VzO3QmJk9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXt0W2VdLmRpc3Bvc2UoKSxkZWxldGUgdFtlXX0pLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLnN2Z0NvbnRhaW5lciksdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5tb3VzZUNvbnRhaW5lciksdGhpcy5mdWxsRGF0YT1udWxsLHRoaXMuZ2xwbG90PW51bGwsdGhpcy5zdG9wcGVkPSEwLHRoaXMuY2FtZXJhLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSx0aGlzLm1vdXNlQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLmNhbWVyYS53aGVlbExpc3RlbmVyKSx0aGlzLmNhbWVyYT1udWxsfX0sdy5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmdscGxvdDt0aGlzLnVwZGF0ZVJlZnMociksdGhpcy54YXhpcy5jbGVhckNhbGMoKSx0aGlzLnlheGlzLmNsZWFyQ2FsYygpLHRoaXMudXBkYXRlVHJhY2VzKHQsZSksdGhpcy51cGRhdGVGeChyLmRyYWdtb2RlKTt2YXIgaT1yLndpZHRoLGE9ci5oZWlnaHQ7dGhpcy51cGRhdGVTaXplKHRoaXMuY2FudmFzKTt2YXIgbz10aGlzLmdscGxvdE9wdGlvbnM7by5tZXJnZShyKSxvLnNjcmVlbkJveD1bMCwwLGksYV07dmFyIHM9e19mdWxsTGF5b3V0OntfYXhpc0NvbnN0cmFpbnRHcm91cHM6dGhpcy5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfX07bShzLHRoaXMueGF4aXMpLG0ocyx0aGlzLnlheGlzKTt2YXIgbCxjLHU9ci5fc2l6ZSxmPXRoaXMueGF4aXMuZG9tYWluLGg9dGhpcy55YXhpcy5kb21haW47Zm9yKG8udmlld0JveD1bdS5sK2ZbMF0qdS53LHUuYitoWzBdKnUuaCxpLXUuci0oMS1mWzFdKSp1LncsYS11LnQtKDEtaFsxXSkqdS5oXSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLndpZHRoPXUudyooZlsxXS1mWzBdKSsicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUuaGVpZ2h0PXUuaCooaFsxXS1oWzBdKSsicHgiLHRoaXMubW91c2VDb250YWluZXIuaGVpZ2h0PXUuaCooaFsxXS1oWzBdKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmxlZnQ9dS5sK2ZbMF0qdS53KyJweCIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS50b3A9dS50KygxLWhbMV0pKnUuaCsicHgiLGM9MDtjPDI7KytjKShsPXRoaXNbeFtjXV0pLl9sZW5ndGg9by52aWV3Qm94W2MrMl0tby52aWV3Qm94W2NdLHkodGhpcy5ncmFwaERpdixsKSxsLnNldFNjYWxlKCk7dihzKSxvLnRpY2tzPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpLG8uZGF0YUJveD10aGlzLmNhbGNEYXRhQm94KCksby5tZXJnZShyKSxuLnVwZGF0ZShvKSx0aGlzLmdscGxvdC5kcmF3KCl9LHcuY2FsY0RhdGFCb3g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnhheGlzLGU9dGhpcy55YXhpcyxyPXQucmFuZ2Usbj1lLnJhbmdlLGk9dC5yMmwsYT1lLnIybDtyZXR1cm5baShyWzBdKSxhKG5bMF0pLGkoclsxXSksYShuWzFdKV19LHcuc2V0UmFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49ZS5sMnIsaT1yLmwycjtlLnJhbmdlPVtuKHRbMF0pLG4odFsyXSldLHIucmFuZ2U9W2kodFsxXSksaSh0WzNdKV19LHcudXBkYXRlVHJhY2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3RoaXMuZnVsbERhdGE9dDt0OmZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBvPWFbcl0scz10aGlzLnRyYWNlc1tvXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKChpPXRbbl0pLnVpZD09PW8mJmkudHlwZT09PXMudHlwZSljb250aW51ZSB0O3MuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1tvXX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpPXRbcl07dmFyIGw9ZVtyXSxjPXRoaXMudHJhY2VzW2kudWlkXTtjP2MudXBkYXRlKGksbCk6KGM9aS5fbW9kdWxlLnBsb3QodGhpcyxpLGwpLHRoaXMudHJhY2VzW2kudWlkXT1jKX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuaW5kZXgtZS5fdHJhY2UuaW5kZXh9KX0sdy51cGRhdGVGeD1mdW5jdGlvbih0KXsibGFzc28iPT09dHx8InNlbGVjdCI9PT10Pyh0aGlzLnBpY2tDYW52YXMuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiKToodGhpcy5waWNrQ2FudmFzLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIiksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5jdXJzb3I9InBhbiI9PT10PyJtb3ZlIjoiem9vbSI9PT10PyJjcm9zc2hhaXIiOm51bGx9LHcuZW1pdFBvaW50QWN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC50cmFjZS51aWQsaT10LnBvaW50SW5kZXgsYT0wO2E8dGhpcy5mdWxsRGF0YS5sZW5ndGg7YSsrKXRoaXMuZnVsbERhdGFbYV0udWlkPT09biYmKHI9dGhpcy5mdWxsRGF0YVthXSk7dmFyIG89e3g6dC50cmFjZUNvb3JkWzBdLHk6dC50cmFjZUNvb3JkWzFdLGN1cnZlTnVtYmVyOnIuaW5kZXgscG9pbnROdW1iZXI6aSxkYXRhOnIuX2lucHV0LGZ1bGxEYXRhOnRoaXMuZnVsbERhdGEseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfTtzLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShvLHIsaSksdGhpcy5ncmFwaERpdi5lbWl0KGUse3BvaW50czpbb119KX0sdy5kcmF3PWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RvcHBlZCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVkcmF3KTt2YXIgdD10aGlzLmdscGxvdCxlPXRoaXMuY2FtZXJhLHI9ZS5tb3VzZUxpc3RlbmVyLG49MT09PXRoaXMubGFzdEJ1dHRvblN0YXRlJiYwPT09ci5idXR0b25zLGk9dGhpcy5mdWxsTGF5b3V0O3RoaXMubGFzdEJ1dHRvblN0YXRlPXIuYnV0dG9ucyx0aGlzLmNhbWVyYUNoYW5nZWQoKTt2YXIgYSxvPXIueCp0LnBpeGVsUmF0aW8sbD10aGlzLmNhbnZhcy5oZWlnaHQtdC5waXhlbFJhdGlvKnIueTtpZihlLmJveEVuYWJsZWQmJiJ6b29tIj09PWkuZHJhZ21vZGUpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITA7Zm9yKHZhciBjPXRoaXMuc2VsZWN0Qm94LnNlbGVjdEJveD1bTWF0aC5taW4oZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5taW4oZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSksTWF0aC5tYXgoZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5tYXgoZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSldLHU9MDt1PDI7dSsrKWUuYm94U3RhcnRbdV09PT1lLmJveEVuZFt1XSYmKGNbdV09dC5kYXRhQm94W3VdLGNbdSsyXT10LmRhdGFCb3hbdSsyXSk7dC5zZXREaXJ0eSgpfWVsc2UgaWYoIWUucGFubmluZyYmdGhpcy5pc01vdXNlT3Zlcil7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMTt2YXIgZj1pLl9zaXplLGg9dGhpcy54YXhpcy5kb21haW4scD10aGlzLnlheGlzLmRvbWFpbixkPShhPXQucGljayhvL3QucGl4ZWxSYXRpbytmLmwraFswXSpmLncsbC90LnBpeGVsUmF0aW8tKGYudCsoMS1wWzFdKSpmLmgpKSkmJmEub2JqZWN0Ll90cmFjZS5oYW5kbGVQaWNrKGEpO2lmKGQmJm4mJnRoaXMuZW1pdFBvaW50QWN0aW9uKGQsInBsb3RseV9jbGljayIpLGEmJiJza2lwIiE9PWEub2JqZWN0Ll90cmFjZS5ob3ZlcmluZm8mJmkuaG92ZXJtb2RlJiZkJiYoIXRoaXMubGFzdFBpY2tSZXN1bHR8fHRoaXMubGFzdFBpY2tSZXN1bHQudHJhY2VVaWQhPT1kLnRyYWNlLnVpZHx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMF0hPT1kLmRhdGFDb29yZFswXXx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMV0hPT1kLmRhdGFDb29yZFsxXSkpe3ZhciBnPWQ7dGhpcy5sYXN0UGlja1Jlc3VsdD17dHJhY2VVaWQ6ZC50cmFjZT9kLnRyYWNlLnVpZDpudWxsLGRhdGFDb29yZDpkLmRhdGFDb29yZC5zbGljZSgpfSx0aGlzLnNwaWtlcy51cGRhdGUoe2NlbnRlcjphLmRhdGFDb29yZH0pLGcuc2NyZWVuQ29vcmQ9WygodC52aWV3Qm94WzJdLXQudmlld0JveFswXSkqKGEuZGF0YUNvb3JkWzBdLXQuZGF0YUJveFswXSkvKHQuZGF0YUJveFsyXS10LmRhdGFCb3hbMF0pK3Qudmlld0JveFswXSkvdC5waXhlbFJhdGlvLCh0aGlzLmNhbnZhcy5oZWlnaHQtKHQudmlld0JveFszXS10LnZpZXdCb3hbMV0pKihhLmRhdGFDb29yZFsxXS10LmRhdGFCb3hbMV0pLyh0LmRhdGFCb3hbM10tdC5kYXRhQm94WzFdKS10LnZpZXdCb3hbMV0pL3QucGl4ZWxSYXRpb10sdGhpcy5lbWl0UG9pbnRBY3Rpb24oZCwicGxvdGx5X2hvdmVyIik7dmFyIHY9dGhpcy5mdWxsRGF0YVtnLnRyYWNlLmluZGV4XXx8e30sbT1nLnBvaW50SW5kZXgseT1zLmNhc3RIb3ZlcmluZm8odixpLG0pO2lmKHkmJiJhbGwiIT09eSl7dmFyIHg9eS5zcGxpdCgiKyIpOy0xPT09eC5pbmRleE9mKCJ4IikmJihnLnRyYWNlQ29vcmRbMF09dm9pZCAwKSwtMT09PXguaW5kZXhPZigieSIpJiYoZy50cmFjZUNvb3JkWzFdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInoiKSYmKGcudHJhY2VDb29yZFsyXT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ0ZXh0IikmJihnLnRleHRMYWJlbD12b2lkIDApLC0xPT09eC5pbmRleE9mKCJuYW1lIikmJihnLm5hbWU9dm9pZCAwKX1zLmxvbmVIb3Zlcih7eDpnLnNjcmVlbkNvb3JkWzBdLHk6Zy5zY3JlZW5Db29yZFsxXSx4TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieGF4aXMiLGcudHJhY2VDb29yZFswXSkseUxhYmVsOnRoaXMuaG92ZXJGb3JtYXR0ZXIoInlheGlzIixnLnRyYWNlQ29vcmRbMV0pLHpMYWJlbDpnLnRyYWNlQ29vcmRbMl0sdGV4dDpnLnRleHRMYWJlbCxuYW1lOmcubmFtZSxjb2xvcjpzLmNhc3RIb3Zlck9wdGlvbih2LG0sImJnY29sb3IiKXx8Zy5jb2xvcixib3JkZXJDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbih2LG0sImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpzLmNhc3RIb3Zlck9wdGlvbih2LG0sImZvbnQuZmFtaWx5IiksZm9udFNpemU6cy5jYXN0SG92ZXJPcHRpb24odixtLCJmb250LnNpemUiKSxmb250Q29sb3I6cy5jYXN0SG92ZXJPcHRpb24odixtLCJmb250LmNvbG9yIil9LHtjb250YWluZXI6dGhpcy5zdmdDb250YWluZXIsZ2Q6dGhpcy5ncmFwaERpdn0pfX1hfHx0aGlzLnVuaG92ZXIoKSx0LmRyYXcoKX19LHcudW5ob3Zlcj1mdW5jdGlvbigpe3RoaXMubGFzdFBpY2tSZXN1bHQmJih0aGlzLnNwaWtlcy51cGRhdGUoe30pLHRoaXMubGFzdFBpY2tSZXN1bHQ9bnVsbCx0aGlzLmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIikscy5sb25lVW5ob3Zlcih0aGlzLnN2Z0NvbnRhaW5lcikpfSx3LmhvdmVyRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZSl7dmFyIHI9dGhpc1t0XTtyZXR1cm4gby50aWNrVGV4dChyLHIuYzJsKGUpLCJob3ZlciIpLnRleHR9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6NzIxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3NDcsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjc1NCwiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo3NTUsIi4vY2FtZXJhIjo3ODUsIi4vY29udmVydCI6Nzg2LCJnbC1wbG90MmQiOjI4MywiZ2wtc2VsZWN0LWJveCI6Mjk1LCJnbC1zcGlrZXMyZCI6MzA0LCJ3ZWJnbC1jb250ZXh0Ijo1NDB9XSw3ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi9zY2VuZSIpLG89dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTtyLm5hbWU9ImdsM2QiLHIuYXR0cj0ic2NlbmUiLHIuaWRSb290PSJzY2VuZSIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PXMuY291bnRlclJlZ2V4KCJzY2VuZSIpLHIuYXR0cmlidXRlcz10KCIuL2xheW91dC9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDNkLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHM9bltpXSxsPW8ociwiZ2wzZCIscyksYz1lW3NdLHU9Yy5jYW1lcmEsZj1jLl9zY2VuZTtmfHwoZj1uZXcgYSh7aWQ6cyxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbyxjYW1lcmE6dX0sZSksYy5fc2NlbmU9ZiksZi52aWV3SW5pdGlhbHx8KGYudmlld0luaXRpYWw9e3VwOnt4OnUudXAueCx5OnUudXAueSx6OnUudXAuen0sZXllOnt4OnUuZXllLngseTp1LmV5ZS55LHo6dS5leWUuen0sY2VudGVyOnt4OnUuY2VudGVyLngseTp1LmNlbnRlci55LHo6dS5jZW50ZXIuen19KSxmLnBsb3QobCxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsM2R8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc2NlbmUmJihuW29dLl9zY2VuZS5kZXN0cm95KCksbi5faW5mb2xheWVyJiZuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK28pLnJlbW92ZSgpKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0sbz1hLmRvbWFpbixzPWEuX3NjZW5lLGM9cy50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLCJ4bGluazpocmVmIjpjLHg6bi5sK24udypvLnhbMF0seTpuLnQrbi5oKigxLW8ueVsxXSksd2lkdGg6bi53KihvLnhbMV0tby54WzBdKSxoZWlnaHQ6bi5oKihvLnlbMV0tby55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHMuZGVzdHJveSgpfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goL15zY2VuZVswLTldKiQvKSl7dmFyIGU9dC5zdWJzdHIoNSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLCJzY2VuZSIrZX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7ZVtyW25dXS5fc2NlbmUudXBkYXRlRngoZS5kcmFnbW9kZSxlLmhvdmVybW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo2MTcsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NzgsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uL2dldF9kYXRhIjo3ODQsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjc5MCwiLi9sYXlvdXQvZGVmYXVsdHMiOjc5NCwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjc5NSwiLi9zY2VuZSI6Nzk5fV0sNzkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2NlbmU6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoic2NlbmUiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn19fSx7fV0sNzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPW8oe3Zpc2libGU6aS52aXNpYmxlLHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtlc2lkZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Mn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc2hvd2JhY2tncm91bmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGJhY2tncm91bmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KSJ9LHNob3dheGVzbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb2xvcjppLmNvbG9yLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRpdGxlOmkudGl0bGUsdHlwZTphKHt9LGkudHlwZSx7dmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdfSksYXV0b3JhbmdlOmkuYXV0b3JhbmdlLHJhbmdlbW9kZTppLnJhbmdlbW9kZSxyYW5nZTphKHt9LGkucmFuZ2Use2l0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fV0sYW5pbTohMX0pLHRpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyxtaXJyb3I6aS5taXJyb3IsdGlja2xlbjppLnRpY2tsZW4sdGlja3dpZHRoOmkudGlja3dpZHRoLHRpY2tjb2xvcjppLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczppLnNob3d0aWNrbGFiZWxzLHRpY2tmb250OmkudGlja2ZvbnQsdGlja2FuZ2xlOmkudGlja2FuZ2xlLHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Omkuc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6aS5zaG93dGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6aS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6aS5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczppLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb3JtYXQ6aS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczppLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkuc2hvd2xpbmUsbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDppLnNob3dncmlkLGdyaWRjb2xvcjphKHt9LGkuZ3JpZGNvbG9yLHtkZmx0OiJyZ2IoMjA0LCAyMDQsIDIwNCkifSksZ3JpZHdpZHRoOmkuZ3JpZHdpZHRoLHplcm9saW5lOmkuemVyb2xpbmUsemVyb2xpbmVjb2xvcjppLnplcm9saW5lY29sb3IsemVyb2xpbmV3aWR0aDppLnplcm9saW5ld2lkdGgsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sInBsb3QiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MH1dLDc5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vLi4vbGliIiksYT10KCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F4aXNfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksYz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsZjtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGkuY29lcmNlKHUsZixvLHQsZSl9Zm9yKHZhciBwPTA7cDxjLmxlbmd0aDtwKyspe3ZhciBkPWNbcF07dT10W2RdfHx7fSwoZj1hLm5ld0NvbnRhaW5lcihlLGQpKS5faWQ9ZFswXStyLnNjZW5lLGYuX25hbWU9ZCxzKHUsZixoLHIpLGwodSxmLGgse2ZvbnQ6ci5mb250LGxldHRlcjpkWzBdLGRhdGE6ci5kYXRhLHNob3dHcmlkOiEwLG5vVGlja3NvbjohMCxiZ0NvbG9yOnIuYmdDb2xvcixjYWxlbmRhcjpyLmNhbGVuZGFyfSxyLmZ1bGxMYXlvdXQpLGgoImdyaWRjb2xvciIsbihmLmNvbG9yLHIuYmdDb2xvciwxMzYwMC8xODcpLnRvUmdiU3RyaW5nKCkpLGgoInRpdGxlLnRleHQiLGRbMF0pLGYuc2V0U2NhbGU9aS5ub29wLGgoInNob3dzcGlrZXMiKSYmKGgoInNwaWtlc2lkZXMiKSxoKCJzcGlrZXRoaWNrbmVzcyIpLGgoInNwaWtlY29sb3IiLGYuY29sb3IpKSxoKCJzaG93YXhlc2xhYmVscyIpLGgoInNob3diYWNrZ3JvdW5kIikmJmgoImJhY2tncm91bmRjb2xvciIpfX19LHsiLi4vLi4vLi4vbGliIjo3MDAsIi4uLy4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjc1MCwiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiOjc3MSwiLi9heGlzX2F0dHJpYnV0ZXMiOjc5MSx0aW55Y29sb3IyOjUyMX1dLDc5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5IiksaT10KCIuLi8uLi8uLi9saWIiKSxhPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gbygpe3RoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzE4LDE4LDE4XSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD1bIk9wZW4gU2FucyIsIk9wZW4gU2FucyIsIk9wZW4gU2FucyJdLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMzAsMzAsMzBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzEwLDEwLDEwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9kZWZhdWx0VGlja1BhZD10aGlzLnRpY2tQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGFiZWxQYWQ9dGhpcy5sYWJlbFBhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aD10aGlzLmxpbmVUaWNrTGVuZ3RoLnNsaWNlKCl9by5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXt2YXIgbz1lW2Fbcl1dO28udmlzaWJsZT8odGhpcy5sYWJlbHNbcl09dC5tZXRhP2kudGVtcGxhdGVTdHJpbmcoby50aXRsZS50ZXh0LHttZXRhOnQubWV0YX0pOm8udGl0bGUudGV4dCwiZm9udCJpbiBvLnRpdGxlJiYoby50aXRsZS5mb250LmNvbG9yJiYodGhpcy5sYWJlbENvbG9yW3JdPW4oby50aXRsZS5mb250LmNvbG9yKSksby50aXRsZS5mb250LmZhbWlseSYmKHRoaXMubGFiZWxGb250W3JdPW8udGl0bGUuZm9udC5mYW1pbHkpLG8udGl0bGUuZm9udC5zaXplJiYodGhpcy5sYWJlbFNpemVbcl09by50aXRsZS5mb250LnNpemUpKSwic2hvd2xpbmUiaW4gbyYmKHRoaXMubGluZUVuYWJsZVtyXT1vLnNob3dsaW5lKSwibGluZWNvbG9yImluIG8mJih0aGlzLmxpbmVDb2xvcltyXT1uKG8ubGluZWNvbG9yKSksImxpbmV3aWR0aCJpbiBvJiYodGhpcy5saW5lV2lkdGhbcl09by5saW5ld2lkdGgpLCJzaG93Z3JpZCJpbiBvJiYodGhpcy5ncmlkRW5hYmxlW3JdPW8uc2hvd2dyaWQpLCJncmlkY29sb3IiaW4gbyYmKHRoaXMuZ3JpZENvbG9yW3JdPW4oby5ncmlkY29sb3IpKSwiZ3JpZHdpZHRoImluIG8mJih0aGlzLmdyaWRXaWR0aFtyXT1vLmdyaWR3aWR0aCksImxvZyI9PT1vLnR5cGU/dGhpcy56ZXJvRW5hYmxlW3JdPSExOiJ6ZXJvbGluZSJpbiBvJiYodGhpcy56ZXJvRW5hYmxlW3JdPW8uemVyb2xpbmUpLCJ6ZXJvbGluZWNvbG9yImluIG8mJih0aGlzLnplcm9MaW5lQ29sb3Jbcl09bihvLnplcm9saW5lY29sb3IpKSwiemVyb2xpbmV3aWR0aCJpbiBvJiYodGhpcy56ZXJvTGluZVdpZHRoW3JdPW8uemVyb2xpbmV3aWR0aCksInRpY2tzImluIG8mJm8udGlja3M/dGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMDp0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLCJ0aWNrbGVuImluIG8mJih0aGlzLmxpbmVUaWNrTGVuZ3RoW3JdPXRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aFtyXT1vLnRpY2tsZW4pLCJ0aWNrY29sb3IiaW4gbyYmKHRoaXMubGluZVRpY2tDb2xvcltyXT1uKG8udGlja2NvbG9yKSksInRpY2t3aWR0aCJpbiBvJiYodGhpcy5saW5lVGlja1dpZHRoW3JdPW8udGlja3dpZHRoKSwidGlja2FuZ2xlImluIG8mJih0aGlzLnRpY2tBbmdsZVtyXT0iYXV0byI9PT1vLnRpY2thbmdsZT8tMzYwMDpNYXRoLlBJKi1vLnRpY2thbmdsZS8xODApLCJzaG93dGlja2xhYmVscyJpbiBvJiYodGhpcy50aWNrRW5hYmxlW3JdPW8uc2hvd3RpY2tsYWJlbHMpLCJ0aWNrZm9udCJpbiBvJiYoby50aWNrZm9udC5jb2xvciYmKHRoaXMudGlja0NvbG9yW3JdPW4oby50aWNrZm9udC5jb2xvcikpLG8udGlja2ZvbnQuZmFtaWx5JiYodGhpcy50aWNrRm9udFtyXT1vLnRpY2tmb250LmZhbWlseSksby50aWNrZm9udC5zaXplJiYodGhpcy50aWNrU2l6ZVtyXT1vLnRpY2tmb250LnNpemUpKSwibWlycm9yImluIG8/LTEhPT1bInRpY2tzIiwiYWxsIiwiYWxsdGlja3MiXS5pbmRleE9mKG8ubWlycm9yKT8odGhpcy5saW5lVGlja01pcnJvcltyXT0hMCx0aGlzLmxpbmVNaXJyb3Jbcl09ITApOiEwPT09by5taXJyb3I/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSEwKToodGhpcy5saW5lVGlja01pcnJvcltyXT0hMSx0aGlzLmxpbmVNaXJyb3Jbcl09ITEpOnRoaXMubGluZU1pcnJvcltyXT0hMSwic2hvd2JhY2tncm91bmQiaW4gbyYmITEhPT1vLnNob3diYWNrZ3JvdW5kPyh0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITAsdGhpcy5iYWNrZ3JvdW5kQ29sb3Jbcl09bihvLmJhY2tncm91bmRjb2xvcikpOnRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSk6KHRoaXMudGlja0VuYWJsZVtyXT0hMSx0aGlzLmxhYmVsRW5hYmxlW3JdPSExLHRoaXMubGluZUVuYWJsZVtyXT0hMSx0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLHRoaXMuZ3JpZEVuYWJsZVtyXT0hMSx0aGlzLnplcm9FbmFibGVbcl09ITEsdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBvO3JldHVybiByLm1lcmdlKHQsZSkscn19LHsiLi4vLi4vLi4vbGliIjo3MDAsIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcyM31dLDc5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIiKSxpPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIikscz10KCIuL2F4aXNfZGVmYXVsdHMiKSxsPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGEsdT0iZ2wzZCI7ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIG89cigiYmdjb2xvciIpLGw9aS5jb21iaW5lKG8sbi5wYXBlcl9iZ2NvbG9yKSxmPVsidXAiLCJjZW50ZXIiLCJleWUiXSxoPTA7aDxmLmxlbmd0aDtoKyspcigiY2FtZXJhLiIrZltoXSsiLngiKSxyKCJjYW1lcmEuIitmW2hdKyIueSIpLHIoImNhbWVyYS4iK2ZbaF0rIi56Iik7cigiY2FtZXJhLnByb2plY3Rpb24udHlwZSIpO3ZhciBwPSEhcigiYXNwZWN0cmF0aW8ueCIpJiYhIXIoImFzcGVjdHJhdGlvLnkiKSYmISFyKCJhc3BlY3RyYXRpby56IiksZD1yKCJhc3BlY3Rtb2RlIixwPyJtYW51YWwiOiJhdXRvIik7cHx8KHQuYXNwZWN0cmF0aW89ZS5hc3BlY3RyYXRpbz17eDoxLHk6MSx6OjF9LCJtYW51YWwiPT09ZCYmKGUuYXNwZWN0bW9kZT0iYXV0byIpLHQuYXNwZWN0bW9kZT1lLmFzcGVjdG1vZGUpO3ZhciBnPWMobi5mdWxsRGF0YSx1LG4uaWQpO3ModCxlLHtmb250Om4uZm9udCxzY2VuZTpuLmlkLGRhdGE6ZyxiZ0NvbG9yOmwsY2FsZW5kYXI6bi5jYWxlbmRhcixmdWxsTGF5b3V0Om4uZnVsbExheW91dH0pLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsbik7dmFyIHY9bi5nZXREZmx0RnJvbUxheW91dCgiZHJhZ21vZGUiKTtpZighMSE9PXYmJiF2KWlmKHY9Im9yYml0Iix0LmNhbWVyYSYmdC5jYW1lcmEudXApe3ZhciBtPXQuY2FtZXJhLnVwLngseT10LmNhbWVyYS51cC55LHg9dC5jYW1lcmEudXAuejswIT09eCYmKG0mJnkmJng/eC9NYXRoLnNxcnQobSptK3kqeSt4KngpPi45OTkmJih2PSJ0dXJudGFibGUiKTp2PSJ0dXJudGFibGUiKX1lbHNlIHY9InR1cm50YWJsZSI7cigiZHJhZ21vZGUiLHYpLHIoImhvdmVybW9kZSIsbi5nZXREZmx0RnJvbUxheW91dCgiaG92ZXJtb2RlIikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aD4xO28odCxlLHIse3R5cGU6dSxhdHRyaWJ1dGVzOmwsaGFuZGxlRGVmYXVsdHM6ZixmdWxsTGF5b3V0OmUsZm9udDplLmZvbnQsZnVsbERhdGE6cixnZXREZmx0RnJvbUxheW91dDpmdW5jdGlvbihlKXtpZighaSlyZXR1cm4gbi52YWxpZGF0ZSh0W2VdLGxbZV0pP3RbZV06dm9pZCAwfSxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixjYWxlbmRhcjplLmNhbGVuZGFyfSl9fSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vLi4vbGliIjo3MDAsIi4uLy4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uLy4uL2dldF9kYXRhIjo3ODQsIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiOjgyNCwiLi9heGlzX2RlZmF1bHRzIjo3OTIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc5NX1dLDc5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vLi4vbGliIikuY291bnRlclJlZ2V4O2Z1bmN0aW9uIHModCxlLHIpe3JldHVybnt4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6dCxlZGl0VHlwZToiY2FtZXJhIn0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0OmUsZWRpdFR5cGU6ImNhbWVyYSJ9LHo6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpyLGVkaXRUeXBlOiJjYW1lcmEifSxlZGl0VHlwZToiY2FtZXJhIn19ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbbygic2NlbmUiLCIuYW5ub3RhdGlvbnMiLCEwKV0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJwbG90In0sY2FtZXJhOnt1cDphKHMoMCwwLDEpLHt9KSxjZW50ZXI6YShzKDAsMCwwKSx7fSksZXllOmEocygxLjI1LDEuMjUsMS4yNSkse30pLHByb2plY3Rpb246e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnNwZWN0aXZlIiwib3J0aG9ncmFwaGljIl0sZGZsdDoicGVyc3BlY3RpdmUiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FtZXJhIn0sZG9tYWluOmkoe25hbWU6InNjZW5lIixlZGl0VHlwZToicGxvdCJ9KSxhc3BlY3Rtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwiY3ViZSIsImRhdGEiLCJtYW51YWwiXSxkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiYXNwZWN0cmF0aW8ueCI6dm9pZCAwLCJhc3BlY3RyYXRpby55Ijp2b2lkIDAsImFzcGVjdHJhdGlvLnoiOnZvaWQgMH19LGFzcGVjdHJhdGlvOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnthc3BlY3Rtb2RlOiJtYW51YWwifX0seGF4aXM6bix5YXhpczpuLHpheGlzOm4sZHJhZ21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm9yYml0IiwidHVybnRhYmxlIiwiem9vbSIsInBhbiIsITFdLGVkaXRUeXBlOiJwbG90In0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9zZXN0IiwhMV0sZGZsdDoiY2xvc2VzdCIsZWRpdFR5cGU6Im1vZGViYXIifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6InBsb3QiLF9kZXByZWNhdGVkOntjYW1lcmFwb3NpdGlvbjp7dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6ImNhbWVyYSJ9fX19LHsiLi4vLi4vLi4vbGliIjo3MDAsIi4uLy4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vZG9tYWluIjo3NzMsIi4vYXhpc19hdHRyaWJ1dGVzIjo3OTF9XSw3OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGk9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtmdW5jdGlvbiBhKCl7dGhpcy5lbmFibGVkPVshMCwhMCwhMF0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMubGluZVdpZHRoPVsxLDEsMV19YS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwzOysrZSl7dmFyIHI9dFtpW2VdXTtyLnZpc2libGU/KHRoaXMuZW5hYmxlZFtlXT1yLnNob3dzcGlrZXMsdGhpcy5jb2xvcnNbZV09bihyLnNwaWtlY29sb3IpLHRoaXMuZHJhd1NpZGVzW2VdPXIuc3Bpa2VzaWRlcyx0aGlzLmxpbmVXaWR0aFtlXT1yLnNwaWtldGhpY2tuZXNzKToodGhpcy5lbmFibGVkW2VdPSExLHRoaXMuZHJhd1NpZGVzW2VdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYTtyZXR1cm4gZS5tZXJnZSh0KSxlfX0seyIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MjN9XSw3OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmF4ZXNPcHRpb25zLHI9dC5nbHBsb3QuYXhlc1BpeGVscyxzPXQuZnVsbFNjZW5lTGF5b3V0LGw9W1tdLFtdLFtdXSxjPTA7YzwzOysrYyl7dmFyIHU9c1thW2NdXTtpZih1Ll9sZW5ndGg9KHJbY10uaGktcltjXS5sbykqcltjXS5waXhlbHNQZXJEYXRhVW5pdC90LmRhdGFTY2FsZVtjXSxNYXRoLmFicyh1Ll9sZW5ndGgpPT09MS8wfHxpc05hTih1Ll9sZW5ndGgpKWxbY109W107ZWxzZXt1Ll9pbnB1dF9yYW5nZT11LnJhbmdlLnNsaWNlKCksdS5yYW5nZVswXT1yW2NdLmxvL3QuZGF0YVNjYWxlW2NdLHUucmFuZ2VbMV09cltjXS5oaS90LmRhdGFTY2FsZVtjXSx1Ll9tPTEvKHQuZGF0YVNjYWxlW2NdKnJbY10ucGl4ZWxzUGVyRGF0YVVuaXQpLHUucmFuZ2VbMF09PT11LnJhbmdlWzFdJiYodS5yYW5nZVswXS09MSx1LnJhbmdlWzFdKz0xKTt2YXIgZj11LnRpY2ttb2RlO2lmKCJhdXRvIj09PXUudGlja21vZGUpe3UudGlja21vZGU9ImxpbmVhciI7dmFyIGg9dS5udGlja3N8fGkuY29uc3RyYWluKHUuX2xlbmd0aC80MCw0LDkpO24uYXV0b1RpY2tzKHUsTWF0aC5hYnModS5yYW5nZVsxXS11LnJhbmdlWzBdKS9oKX1mb3IodmFyIHA9bi5jYWxjVGlja3ModSksZD0wO2Q8cC5sZW5ndGg7KytkKXBbZF0ueD1wW2RdLngqdC5kYXRhU2NhbGVbY10sImRhdGUiPT09dS50eXBlJiYocFtkXS50ZXh0PXBbZF0udGV4dC5yZXBsYWNlKC9cPGJyXD4vZywiICIpKTtsW2NdPXAsdS50aWNrbW9kZT1mfX1lLnRpY2tzPWw7Zm9yKHZhciBjPTA7YzwzOysrYyl7b1tjXT0uNSoodC5nbHBsb3QuYm91bmRzWzBdW2NdK3QuZ2xwbG90LmJvdW5kc1sxXVtjXSk7Zm9yKHZhciBkPTA7ZDwyOysrZCllLmJvdW5kc1tkXVtjXT10LmdscGxvdC5ib3VuZHNbZF1bY119dC5jb250b3VyTGV2ZWxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkoMykscj0wO3I8MzsrK3Ipe2Zvcih2YXIgbj10W3JdLGk9bmV3IEFycmF5KG4ubGVuZ3RoKSxhPTA7YTxuLmxlbmd0aDsrK2EpaVthXT1uW2FdLng7ZVtyXT1pfXJldHVybiBlfShsKX07dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxvPVswLDAsMF19LHsiLi4vLi4vLi4vbGliIjo3MDAsIi4uLy4uL2NhcnRlc2lhbi9heGVzIjo3NDh9XSw3OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByLG4saT1bMCwwLDAsMF07Zm9yKHI9MDtyPDQ7KytyKWZvcihuPTA7bjw0OysrbilpW25dKz10WzQqcituXSplW3JdO3JldHVybiBpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQucHJvamVjdGlvbixuKHQudmlldyxuKHQubW9kZWwsW2VbMF0sZVsxXSxlWzJdLDFdKSkpfX0se31dLDc5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGE9dCgiZ2wtcGxvdDNkIikuY3JlYXRlQ2FtZXJhLG89dCgiZ2wtcGxvdDNkIikuY3JlYXRlU2NlbmUscz10KCJ3ZWJnbC1jb250ZXh0IiksbD10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxjPXQoIi4uLy4uL3JlZ2lzdHJ5IiksdT10KCIuLi8uLi9saWIiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IikscD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksZD10KCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciKSxnPXQoIi4vcHJvamVjdCIpLHY9dCgiLi9sYXlvdXQvY29udmVydCIpLG09dCgiLi9sYXlvdXQvc3Bpa2VzIikseT10KCIuL2xheW91dC90aWNrX21hcmtzIik7ZnVuY3Rpb24geCh0LGUscixhKXtpZih0LmluaXRpYWxpemVHTENhbWVyYSgpLCFmdW5jdGlvbih0LGUscixhLGwpe3ZhciBjPXtjYW52YXM6YSxnbDpsLGNvbnRhaW5lcjp0LmNvbnRhaW5lcixheGVzOnQuYXhlc09wdGlvbnMsc3Bpa2VzOnQuc3Bpa2VPcHRpb25zLHBpY2tSYWRpdXM6MTAsc25hcFRvRGF0YTohMCxhdXRvU2NhbGU6ITAsYXV0b0JvdW5kczohMSxjYW1lcmFPYmplY3Q6ZSxwaXhlbFJhdGlvOnJ9O2lmKHQuc3RhdGljTW9kZSl7aWYoIShpfHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxpPXMoe2NhbnZhczpuLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpKSl0aHJvdyBuZXcgRXJyb3IoImVycm9yIGNyZWF0aW5nIHN0YXRpYyBjYW52YXMvY29udGV4dCBmb3IgaW1hZ2Ugc2VydmVyIik7Yy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyxjLmdsPWksYy5jYW52YXM9bn10cnl7dC5nbHBsb3Q9byhjKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hMH0odCx0LmNhbWVyYSxlLHIsYSkpcmV0dXJuIGQodCk7dmFyIGM9dC5ncmFwaERpdixwPWZ1bmN0aW9uKHQpe2lmKCExIT09dC5mdWxsU2NlbmVMYXlvdXQuZHJhZ21vZGUpe3ZhciBlPXt9O2VbdC5pZCsiLmNhbWVyYSJdPVQodC5jYW1lcmEpLHQuc2F2ZUNhbWVyYShjLmxheW91dCksdC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGUpfX07cmV0dXJuIHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixmdW5jdGlvbigpe3AodCl9KSx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGZ1bmN0aW9uKCl7Yy5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkJiZwKHQpfSwhIWwmJntwYXNzaXZlOiExfSksdC5zdGF0aWNNb2RlfHx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsZnVuY3Rpb24oZSl7YyYmYy5lbWl0JiZjLmVtaXQoInBsb3RseV93ZWJnbGNvbnRleHRsb3N0Iix7ZXZlbnQ6ZSxsYXllcjp0LmlkfSl9LCExKSx0LmdscGxvdC5jYW1lcmE9dC5jYW1lcmEsdC5nbHBsb3Qub25jb250ZXh0bG9zcz1mdW5jdGlvbigpe3QucmVjb3ZlckNvbnRleHQoKX0sdC5nbHBsb3Qub25yZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10LnN2Z0NvbnRhaW5lcixuPXQuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9bi53aWR0aCxhPW4uaGVpZ2h0O3Iuc2V0QXR0cmlidXRlTlMobnVsbCwidmlld0JveCIsIjAgMCAiK2krIiAiK2EpLHIuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLGkpLHIuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixhKSx5KHQpLHQuZ2xwbG90LmF4ZXMudXBkYXRlKHQuYXhlc09wdGlvbnMpO2Zvcih2YXIgbyxzPU9iamVjdC5rZXlzKHQudHJhY2VzKSxsPW51bGwsYz10LmdscGxvdC5zZWxlY3Rpb24scD0wO3A8cy5sZW5ndGg7KytwKSJza2lwIiE9PShlPXQudHJhY2VzW3NbcF1dKS5kYXRhLmhvdmVyaW5mbyYmZS5oYW5kbGVQaWNrKGMpJiYobD1lKSxlLnNldENvbnRvdXJMZXZlbHMmJmUuc2V0Q29udG91ckxldmVscygpO2Z1bmN0aW9uIGQoZSxyKXt2YXIgbj10LmZ1bGxTY2VuZUxheW91dFtlXTtyZXR1cm4gZi50aWNrVGV4dChuLG4uZDJsKHIpLCJob3ZlciIpLnRleHR9aWYobnVsbCE9PWwpe3ZhciB2PWcodC5nbHBsb3QuY2FtZXJhUGFyYW1zLGMuZGF0YUNvb3JkaW5hdGUpO2U9bC5kYXRhO3ZhciBtLHg9Yy5pbmRleCxiPXt4TGFiZWw6ZCgieGF4aXMiLGMudHJhY2VDb29yZGluYXRlWzBdKSx5TGFiZWw6ZCgieWF4aXMiLGMudHJhY2VDb29yZGluYXRlWzFdKSx6TGFiZWw6ZCgiemF4aXMiLGMudHJhY2VDb29yZGluYXRlWzJdKX0sXz1oLmNhc3RIb3ZlcmluZm8oZSx0LmZ1bGxMYXlvdXQseCksdz0oX3x8IiIpLnNwbGl0KCIrIiksaz1fJiYiYWxsIj09PV87ZS5ob3ZlcnRlbXBsYXRlfHxrfHwoLTE9PT13LmluZGV4T2YoIngiKSYmKGIueExhYmVsPXZvaWQgMCksLTE9PT13LmluZGV4T2YoInkiKSYmKGIueUxhYmVsPXZvaWQgMCksLTE9PT13LmluZGV4T2YoInoiKSYmKGIuekxhYmVsPXZvaWQgMCksLTE9PT13LmluZGV4T2YoInRleHQiKSYmKGMudGV4dExhYmVsPXZvaWQgMCksLTE9PT13LmluZGV4T2YoIm5hbWUiKSYmKGwubmFtZT12b2lkIDApKTt2YXIgVD1bXTsiY29uZSI9PT1lLnR5cGV8fCJzdHJlYW10dWJlIj09PWUudHlwZT8oYi51TGFiZWw9ZCgieGF4aXMiLGMudHJhY2VDb29yZGluYXRlWzNdKSwoa3x8LTEhPT13LmluZGV4T2YoInUiKSkmJlQucHVzaCgidTogIitiLnVMYWJlbCksYi52TGFiZWw9ZCgieWF4aXMiLGMudHJhY2VDb29yZGluYXRlWzRdKSwoa3x8LTEhPT13LmluZGV4T2YoInYiKSkmJlQucHVzaCgidjogIitiLnZMYWJlbCksYi53TGFiZWw9ZCgiemF4aXMiLGMudHJhY2VDb29yZGluYXRlWzVdKSwoa3x8LTEhPT13LmluZGV4T2YoInciKSkmJlQucHVzaCgidzogIitiLndMYWJlbCksYi5ub3JtTGFiZWw9Yy50cmFjZUNvb3JkaW5hdGVbNl0udG9QcmVjaXNpb24oMyksKGt8fC0xIT09dy5pbmRleE9mKCJub3JtIikpJiZULnB1c2goIm5vcm06ICIrYi5ub3JtTGFiZWwpLCJzdHJlYW10dWJlIj09PWUudHlwZSYmKGIuZGl2ZXJnZW5jZUxhYmVsPWMudHJhY2VDb29yZGluYXRlWzddLnRvUHJlY2lzaW9uKDMpLChrfHwtMSE9PXcuaW5kZXhPZigiZGl2ZXJnZW5jZSIpKSYmVC5wdXNoKCJkaXZlcmdlbmNlOiAiK2IuZGl2ZXJnZW5jZUxhYmVsKSksYy50ZXh0TGFiZWwmJlQucHVzaChjLnRleHRMYWJlbCksbT1ULmpvaW4oIjxicj4iKSk6Imlzb3N1cmZhY2UiPT09ZS50eXBlPyhiLnZhbHVlTGFiZWw9Zi50aWNrVGV4dCh0Lm1vY2tBeGlzLHQubW9ja0F4aXMuZDJsKGMudHJhY2VDb29yZGluYXRlWzNdKSwiaG92ZXIiKS50ZXh0LFQucHVzaCgidmFsdWU6ICIrYi52YWx1ZUxhYmVsKSxjLnRleHRMYWJlbCYmVC5wdXNoKGMudGV4dExhYmVsKSxtPVQuam9pbigiPGJyPiIpKTptPWMudGV4dExhYmVsO3ZhciBBPXt4OmMudHJhY2VDb29yZGluYXRlWzBdLHk6Yy50cmFjZUNvb3JkaW5hdGVbMV0sejpjLnRyYWNlQ29vcmRpbmF0ZVsyXSxkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmUsY3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcjp4fTtoLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShBLGUseCksZS5fbW9kdWxlLmV2ZW50RGF0YSYmKEE9ZS5fbW9kdWxlLmV2ZW50RGF0YShBLGMsZSx7fSx4KSk7dmFyIE09e3BvaW50czpbQV19O3QuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZSYmaC5sb25lSG92ZXIoe3RyYWNlOmUseDooLjUrLjUqdlswXS92WzNdKSppLHk6KC41LS41KnZbMV0vdlszXSkqYSx4TGFiZWw6Yi54TGFiZWwseUxhYmVsOmIueUxhYmVsLHpMYWJlbDpiLnpMYWJlbCx0ZXh0Om0sbmFtZTpsLm5hbWUsY29sb3I6aC5jYXN0SG92ZXJPcHRpb24oZSx4LCJiZ2NvbG9yIil8fGwuY29sb3IsYm9yZGVyQ29sb3I6aC5jYXN0SG92ZXJPcHRpb24oZSx4LCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6aC5jYXN0SG92ZXJPcHRpb24oZSx4LCJmb250LmZhbWlseSIpLGZvbnRTaXplOmguY2FzdEhvdmVyT3B0aW9uKGUseCwiZm9udC5zaXplIiksZm9udENvbG9yOmguY2FzdEhvdmVyT3B0aW9uKGUseCwiZm9udC5jb2xvciIpLGhvdmVydGVtcGxhdGU6dS5jYXN0T3B0aW9uKGUseCwiaG92ZXJ0ZW1wbGF0ZSIpLGhvdmVydGVtcGxhdGVMYWJlbHM6dS5leHRlbmRGbGF0KHt9LEEsYiksZXZlbnREYXRhOltBXX0se2NvbnRhaW5lcjpyLGdkOnQuZ3JhcGhEaXZ9KSxjLmJ1dHRvbnMmJmMuZGlzdGFuY2U8NT90LmdyYXBoRGl2LmVtaXQoInBsb3RseV9jbGljayIsTSk6dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfaG92ZXIiLE0pLG89TX1lbHNlIGgubG9uZVVuaG92ZXIociksdC5ncmFwaERpdi5lbWl0KCJwbG90bHlfdW5ob3ZlciIsbyk7dC5kcmF3QW5ub3RhdGlvbnModCl9LmJpbmQobnVsbCx0KSx0LnRyYWNlcz17fSx0Lm1ha2U0dGhEaW1lbnNpb24oKSwhMH1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbj10LmNvbnRhaW5lcjt0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXY7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2kuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLnN0eWxlLnRvcD1pLnN0eWxlLmxlZnQ9IjBweCIsaS5zdHlsZS53aWR0aD1pLnN0eWxlLmhlaWdodD0iMTAwJSIsaS5zdHlsZVsiei1pbmRleCJdPTIwLGkuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHIuYXBwZW5kQ2hpbGQoaSksdGhpcy5zdmdDb250YWluZXI9aSxyLmlkPXQuaWQsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPXIuc3R5bGUubGVmdD0iMHB4IixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PSIxMDAlIixuLmFwcGVuZENoaWxkKHIpLHRoaXMuZnVsbExheW91dD1lLHRoaXMuaWQ9dC5pZHx8InNjZW5lIix0aGlzLmZ1bGxTY2VuZUxheW91dD1lW3RoaXMuaWRdLHRoaXMucGxvdEFyZ3M9W1tdLHt9LHt9XSx0aGlzLmF4ZXNPcHRpb25zPXYoZSxlW3RoaXMuaWRdKSx0aGlzLnNwaWtlT3B0aW9ucz1tKGVbdGhpcy5pZF0pLHRoaXMuY29udGFpbmVyPXIsdGhpcy5zdGF0aWNNb2RlPSEhdC5zdGF0aWNQbG90LHRoaXMucGl4ZWxSYXRpbz10aGlzLnBpeGVsUmF0aW98fHQucGxvdEdsUGl4ZWxSYXRpb3x8Mix0aGlzLmRhdGFTY2FsZT1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bW10sW10sW11dLHRoaXMuY29udmVydEFubm90YXRpb25zPWMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiY29udmVydCIpLHRoaXMuZHJhd0Fubm90YXRpb25zPWMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiZHJhdyIpLHgodGhpcyx0aGlzLnBpeGVsUmF0aW8pfXZhciBfPWIucHJvdG90eXBlO18uaW5pdGlhbGl6ZUdMQ2FtZXJhPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mdWxsU2NlbmVMYXlvdXQuY2FtZXJhLGU9Im9ydGhvZ3JhcGhpYyI9PT10LnByb2plY3Rpb24udHlwZTt0aGlzLmNhbWVyYT1hKHRoaXMuY29udGFpbmVyLHtjZW50ZXI6W3QuY2VudGVyLngsdC5jZW50ZXIueSx0LmNlbnRlci56XSxleWU6W3QuZXllLngsdC5leWUueSx0LmV5ZS56XSx1cDpbdC51cC54LHQudXAueSx0LnVwLnpdLF9vcnRobzplLHpvb21NaW46LjAxLHpvb21NYXg6MTAwLG1vZGU6Im9yYml0In0pfSxfLnJlY292ZXJDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuZ2xwbG90LmdsLHI9dGhpcy5nbHBsb3QuY2FudmFzLG49dGhpcy5nbHBsb3QuY2FtZXJhLGk9dGhpcy5nbHBsb3QucGl4ZWxSYXRpbzt0aGlzLmdscGxvdC5kaXNwb3NlKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGEoKXtlLmlzQ29udGV4dExvc3QoKT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYSk6eCh0LG4saSxyKT90LnBsb3QuYXBwbHkodCx0LnBsb3RBcmdzKTp1LmVycm9yKCJDYXRhc3Ryb3BoaWMgYW5kIHVucmVjb3ZlcmFibGUgV2ViR0wgZXJyb3IuIENvbnRleHQgbG9zdC4iKX0pfTt2YXIgdz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2Z1bmN0aW9uIGsodCxlLHIpe2Zvcih2YXIgbj10LmZ1bGxTY2VuZUxheW91dCxpPTA7aTwzO2krKyl7dmFyIGE9d1tpXSxvPWEuY2hhckF0KDApLHM9blthXSxsPWVbb10sYz1lW28rImNhbGVuZGFyIl0sZj1lWyJfIitvKyJsZW5ndGgiXTtpZih1LmlzQXJyYXlPclR5cGVkQXJyYXkobCkpZm9yKHZhciBoLHA9MDtwPChmfHxsLmxlbmd0aCk7cCsrKWlmKHUuaXNBcnJheU9yVHlwZWRBcnJheShsW3BdKSlmb3IodmFyIGQ9MDtkPGxbcF0ubGVuZ3RoOysrZCloPXMuZDJsKGxbcF1bZF0sMCxjKSwhaXNOYU4oaCkmJmlzRmluaXRlKGgpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGgpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxoKSk7ZWxzZSBoPXMuZDJsKGxbcF0sMCxjKSwhaXNOYU4oaCkmJmlzRmluaXRlKGgpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGgpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxoKSk7ZWxzZSByWzBdW2ldPU1hdGgubWluKHJbMF1baV0sMCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGYtMSl9fWZ1bmN0aW9uIFQodCl7cmV0dXJue3VwOnt4OnQudXBbMF0seTp0LnVwWzFdLHo6dC51cFsyXX0sY2VudGVyOnt4OnQuY2VudGVyWzBdLHk6dC5jZW50ZXJbMV0sejp0LmNlbnRlclsyXX0sZXllOnt4OnQuZXllWzBdLHk6dC5leWVbMV0sejp0LmV5ZVsyXX0scHJvamVjdGlvbjp7dHlwZTohMD09PXQuX29ydGhvPyJvcnRob2dyYXBoaWMiOiJwZXJzcGVjdGl2ZSJ9fX1fLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucGxvdEFyZ3M9W3QsZSxyXSwhdGhpcy5nbHBsb3QuY29udGV4dExvc3Qpe3ZhciBuLGksYSxvLHMsbCxjPWVbdGhpcy5pZF0sdT1yW3RoaXMuaWRdO2MuYmdjb2xvcj90aGlzLmdscGxvdC5jbGVhckNvbG9yPXAoYy5iZ2NvbG9yKTp0aGlzLmdscGxvdC5jbGVhckNvbG9yPVswLDAsMCwwXSx0aGlzLmdscGxvdC5zbmFwVG9EYXRhPSEwLHRoaXMuZnVsbExheW91dD1lLHRoaXMuZnVsbFNjZW5lTGF5b3V0PWMsdGhpcy5nbHBsb3RMYXlvdXQ9Yyx0aGlzLmF4ZXNPcHRpb25zLm1lcmdlKGUsYyksdGhpcy5zcGlrZU9wdGlvbnMubWVyZ2UoYyksdGhpcy5zZXRDYW1lcmEoYy5jYW1lcmEpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5jYW1lcmEuZW5hYmxlV2hlZWw9dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkLHRoaXMuZ2xwbG90LnVwZGF0ZSh7fSksdGhpcy5zZXRDb252ZXJ0KHMpLHQ/QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTp0PVtdO3ZhciBmPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihhPTA7YTx0Lmxlbmd0aDsrK2EpITA9PT0obj10W2FdKS52aXNpYmxlJiZrKHRoaXMsbixmKTshZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsbj1yLmFubm90YXRpb25zfHxbXSxpPTA7aTwzO2krKylmb3IodmFyIGE9d1tpXSxvPWEuY2hhckF0KDApLHM9clthXSxsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciBjPW5bbF07aWYoYy52aXNpYmxlKXt2YXIgdT1zLnIybChjW29dKTshaXNOYU4odSkmJmlzRmluaXRlKHUpJiYoZVswXVtpXT1NYXRoLm1pbihlWzBdW2ldLHUpLGVbMV1baV09TWF0aC5tYXgoZVsxXVtpXSx1KSl9fX0odGhpcyxmKTt2YXIgaD1bMSwxLDFdO2ZvcihvPTA7bzwzOysrbylmWzFdW29dPT09ZlswXVtvXT9oW29dPTE6aFtvXT0xLyhmWzFdW29dLWZbMF1bb10pO2Zvcih0aGlzLmRhdGFTY2FsZT1oLHRoaXMuY29udmVydEFubm90YXRpb25zKHRoaXMpLGE9MDthPHQubGVuZ3RoOysrYSkhMD09PShuPXRbYV0pLnZpc2libGUmJigoaT10aGlzLnRyYWNlc1tuLnVpZF0pP2kuZGF0YS50eXBlPT09bi50eXBlP2kudXBkYXRlKG4pOihpLmRpc3Bvc2UoKSxpPW4uX21vZHVsZS5wbG90KHRoaXMsbiksdGhpcy50cmFjZXNbbi51aWRdPWkpOihpPW4uX21vZHVsZS5wbG90KHRoaXMsbiksdGhpcy50cmFjZXNbbi51aWRdPWkpLGkubmFtZT1uLm5hbWUpO3ZhciBkPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0OmZvcihhPTA7YTxkLmxlbmd0aDsrK2Epe2ZvcihvPTA7bzx0Lmxlbmd0aDsrK28paWYodFtvXS51aWQ9PT1kW2FdJiYhMD09PXRbb10udmlzaWJsZSljb250aW51ZSB0OyhpPXRoaXMudHJhY2VzW2RbYV1dKS5kaXNwb3NlKCksZGVsZXRlIHRoaXMudHJhY2VzW2RbYV1dfXRoaXMuZ2xwbG90Lm9iamVjdHMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5kYXRhLmluZGV4LWUuX3RyYWNlLmRhdGEuaW5kZXh9KTt2YXIgZz1bWzAsMCwwXSxbMCwwLDBdXSx2PVtdLG09e307Zm9yKGE9MDthPDM7KythKXtpZigobD0ocz1jW3dbYV1dKS50eXBlKWluIG0/KG1bbF0uYWNjKj1oW2FdLG1bbF0uY291bnQrPTEpOm1bbF09e2FjYzpoW2FdLGNvdW50OjF9LHMuYXV0b3JhbmdlKXtnWzBdW2FdPTEvMCxnWzFdW2FdPS0xLzA7dmFyIHk9dGhpcy5nbHBsb3Qub2JqZWN0cyx4PXRoaXMuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zfHxbXSxiPXMuX25hbWUuY2hhckF0KDApO2ZvcihvPTA7bzx5Lmxlbmd0aDtvKyspe3ZhciBfPXlbb10sVD1fLmJvdW5kcyxBPV8uX3RyYWNlLmRhdGEuX3BhZHx8MDsiRXJyb3JCYXJzIj09PV8uY29uc3RydWN0b3IubmFtZSYmcy5fbG93ZXJMb2dFcnJvckJvdW5kP2dbMF1bYV09TWF0aC5taW4oZ1swXVthXSxzLl9sb3dlckxvZ0Vycm9yQm91bmQpOmdbMF1bYV09TWF0aC5taW4oZ1swXVthXSxUWzBdW2FdL2hbYV0tQSksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLFRbMV1bYV0vaFthXStBKX1mb3Iobz0wO288eC5sZW5ndGg7bysrKXt2YXIgTT14W29dO2lmKE0udmlzaWJsZSl7dmFyIFM9cy5yMmwoTVtiXSk7Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLFMpLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSxTKX19aWYoInJhbmdlbW9kZSJpbiBzJiYidG96ZXJvIj09PXMucmFuZ2Vtb2RlJiYoZ1swXVthXT1NYXRoLm1pbihnWzBdW2FdLDApLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSwwKSksZ1swXVthXT5nWzFdW2FdKWdbMF1bYV09LTEsZ1sxXVthXT0xO2Vsc2V7dmFyIEU9Z1sxXVthXS1nWzBdW2FdO2dbMF1bYV0tPUUvMzIsZ1sxXVthXSs9RS8zMn1pZigicmV2ZXJzZWQiPT09cy5hdXRvcmFuZ2Upe3ZhciBDPWdbMF1bYV07Z1swXVthXT1nWzFdW2FdLGdbMV1bYV09Q319ZWxzZXt2YXIgTD1zLnJhbmdlO2dbMF1bYV09cy5yMmwoTFswXSksZ1sxXVthXT1zLnIybChMWzFdKX1nWzBdW2FdPT09Z1sxXVthXSYmKGdbMF1bYV0tPTEsZ1sxXVthXSs9MSksdlthXT1nWzFdW2FdLWdbMF1bYV0sdGhpcy5nbHBsb3QuYm91bmRzWzBdW2FdPWdbMF1bYV0qaFthXSx0aGlzLmdscGxvdC5ib3VuZHNbMV1bYV09Z1sxXVthXSpoW2FdfXZhciB6PVsxLDEsMV07Zm9yKGE9MDthPDM7KythKXt2YXIgTz1tW2w9KHM9Y1t3W2FdXSkudHlwZV07elthXT1NYXRoLnBvdyhPLmFjYywxL08uY291bnQpL2hbYV19dmFyIEk7aWYoImF1dG8iPT09Yy5hc3BlY3Rtb2RlKUk9TWF0aC5tYXguYXBwbHkobnVsbCx6KS9NYXRoLm1pbi5hcHBseShudWxsLHopPD00P3o6WzEsMSwxXTtlbHNlIGlmKCJjdWJlIj09PWMuYXNwZWN0bW9kZSlJPVsxLDEsMV07ZWxzZSBpZigiZGF0YSI9PT1jLmFzcGVjdG1vZGUpST16O2Vsc2V7aWYoIm1hbnVhbCIhPT1jLmFzcGVjdG1vZGUpdGhyb3cgbmV3IEVycm9yKCJzY2VuZS5qcyBhc3BlY3RSYXRpbyB3YXMgbm90IG9uZSBvZiB0aGUgZW51bWVyYXRlZCB0eXBlcyIpO3ZhciBEPWMuYXNwZWN0cmF0aW87ST1bRC54LEQueSxELnpdfWMuYXNwZWN0cmF0aW8ueD11LmFzcGVjdHJhdGlvLng9SVswXSxjLmFzcGVjdHJhdGlvLnk9dS5hc3BlY3RyYXRpby55PUlbMV0sYy5hc3BlY3RyYXRpby56PXUuYXNwZWN0cmF0aW8uej1JWzJdLHRoaXMuZ2xwbG90LmFzcGVjdD1JO3ZhciBQPWMuZG9tYWlufHxudWxsLFI9ZS5fc2l6ZXx8bnVsbDtpZihQJiZSKXt2YXIgRj10aGlzLmNvbnRhaW5lci5zdHlsZTtGLnBvc2l0aW9uPSJhYnNvbHV0ZSIsRi5sZWZ0PVIubCtQLnhbMF0qUi53KyJweCIsRi50b3A9Ui50KygxLVAueVsxXSkqUi5oKyJweCIsRi53aWR0aD1SLncqKFAueFsxXS1QLnhbMF0pKyJweCIsRi5oZWlnaHQ9Ui5oKihQLnlbMV0tUC55WzBdKSsicHgifXRoaXMuZ2xwbG90LnJlZHJhdygpfX0sXy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5nbHBsb3QmJih0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPXRoaXMuZ2xwbG90LmNhbWVyYT1udWxsLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmdscGxvdD1udWxsKX0sXy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHBsb3QuY2FtZXJhLnZpZXcucmVjYWxjTWF0cml4KHRoaXMuY2FtZXJhLnZpZXcubGFzdFQoKSksVCh0aGlzLmdscGxvdC5jYW1lcmEpfSxfLnNldENhbWVyYT1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLmdscGxvdC5jYW1lcmEubG9va0F0LmFwcGx5KHRoaXMsW1soZT10KS5leWUueCxlLmV5ZS55LGUuZXllLnpdLFtlLmNlbnRlci54LGUuY2VudGVyLnksZS5jZW50ZXIuel0sW2UudXAueCxlLnVwLnksZS51cC56XV0pO3ZhciByPSJvcnRob2dyYXBoaWMiPT09dC5wcm9qZWN0aW9uLnR5cGU7aWYociE9PXRoaXMuZ2xwbG90LmNhbWVyYS5fb3J0aG8pe3RoaXMuZ2xwbG90LnJlZHJhdygpO3ZhciBuPXRoaXMuZ2xwbG90LnBpeGVsUmF0aW8saT10aGlzLmdscGxvdC5jbGVhckNvbG9yO3RoaXMuZ2xwbG90LmdsLmNsZWFyQ29sb3IoaVswXSxpWzFdLGlbMl0saVszXSksdGhpcy5nbHBsb3QuZ2wuY2xlYXIodGhpcy5nbHBsb3QuZ2wuREVQVEhfQlVGRkVSX0JJVHx0aGlzLmdscGxvdC5nbC5DT0xPUl9CVUZGRVJfQklUKSx0aGlzLmdscGxvdC5kaXNwb3NlKCkseCh0aGlzLG4pLHRoaXMuZ2xwbG90LmNhbWVyYS5fb3J0aG89cn19LF8uc2F2ZUNhbWVyYT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1bGxMYXlvdXQscj10aGlzLmdldENhbWVyYSgpLG49dS5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKSxpPW4uZ2V0KCksYT0hMTtmdW5jdGlvbiBvKHQsZSxyLG4pe3ZhciBpPVsidXAiLCJjZW50ZXIiLCJleWUiXSxhPVsieCIsInkiLCJ6Il07cmV0dXJuIGVbaVtyXV0mJnRbaVtyXV1bYVtuXV09PT1lW2lbcl1dW2Fbbl1dfWlmKHZvaWQgMD09PWkpYT0hMDtlbHNle2Zvcih2YXIgcz0wO3M8MztzKyspZm9yKHZhciBsPTA7bDwzO2wrKylpZighbyhyLGkscyxsKSl7YT0hMDticmVha30oIWkucHJvamVjdGlvbnx8ci5wcm9qZWN0aW9uJiZyLnByb2plY3Rpb24udHlwZSE9PWkucHJvamVjdGlvbi50eXBlKSYmKGE9ITApfWlmKGEpe3ZhciBmPXt9O2ZbdGhpcy5pZCsiLmNhbWVyYSJdPWksYy5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LGUuX3ByZUdVSSxmKSxuLnNldChyKSx1Lm5lc3RlZFByb3BlcnR5KGUsdGhpcy5pZCsiLmNhbWVyYSIpLnNldChyKX1yZXR1cm4gYX0sXy51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY2FtZXJhO2lmKHIpaWYoIm9yYml0Ij09PXQpci5tb2RlPSJvcmJpdCIsci5rZXlCaW5kaW5nTW9kZT0icm90YXRlIjtlbHNlIGlmKCJ0dXJudGFibGUiPT09dCl7ci51cD1bMCwwLDFdLHIubW9kZT0idHVybnRhYmxlIixyLmtleUJpbmRpbmdNb2RlPSJyb3RhdGUiO3ZhciBuPXRoaXMuZ3JhcGhEaXYsaT1uLl9mdWxsTGF5b3V0LGE9dGhpcy5mdWxsU2NlbmVMYXlvdXQuY2FtZXJhLG89YS51cC54LHM9YS51cC55LGw9YS51cC56O2lmKGwvTWF0aC5zcXJ0KG8qbytzKnMrbCpsKTwuOTk5KXt2YXIgZj10aGlzLmlkKyIuY2FtZXJhLnVwIixoPXt4OjAseTowLHo6MX0scD17fTtwW2ZdPWg7dmFyIGQ9bi5sYXlvdXQ7Yy5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixkLGkuX3ByZUdVSSxwKSxhLnVwPWgsdS5uZXN0ZWRQcm9wZXJ0eShkLGYpLnNldChoKX19ZWxzZSByLmtleUJpbmRpbmdNb2RlPXQ7dGhpcy5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlPWV9LF8udG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD0icG5nIiksdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLmdscGxvdC5yZWRyYXcoKTt2YXIgZT10aGlzLmdscGxvdC5nbCxyPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGk9ZS5kcmF3aW5nQnVmZmVySGVpZ2h0O2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbnVsbCk7dmFyIGE9bmV3IFVpbnQ4QXJyYXkocippKjQpO2UucmVhZFBpeGVscygwLDAscixpLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsYSk7Zm9yKHZhciBvPTAscz1pLTE7bzxzOysrbywtLXMpZm9yKHZhciBsPTA7bDxyOysrbClmb3IodmFyIGM9MDtjPDQ7KytjKXt2YXIgdT1hWzQqKHIqbytsKStjXTthWzQqKHIqbytsKStjXT1hWzQqKHIqcytsKStjXSxhWzQqKHIqcytsKStjXT11fXZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Yud2lkdGg9cixmLmhlaWdodD1pO3ZhciBoLHA9Zi5nZXRDb250ZXh0KCIyZCIpLGQ9cC5jcmVhdGVJbWFnZURhdGEocixpKTtzd2l0Y2goZC5kYXRhLnNldChhKSxwLnB1dEltYWdlRGF0YShkLDAsMCksdCl7Y2FzZSJqcGVnIjpoPWYudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpoPWYudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpoPWYudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxofSxfLnNldENvbnZlcnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7dCsrKXt2YXIgZT10aGlzLmZ1bGxTY2VuZUxheW91dFt3W3RdXTtmLnNldENvbnZlcnQoZSx0aGlzLmZ1bGxMYXlvdXQpLGUuc2V0U2NhbGU9dS5ub29wfX0sXy5tYWtlNHRoRGltZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdi5fZnVsbExheW91dDt0aGlzLm1vY2tBeGlzPXt0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LGYuc2V0Q29udmVydCh0aGlzLm1vY2tBeGlzLHQpfSxlLmV4cG9ydHM9Yn0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciOjcyMSwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2xheW91dC9jb252ZXJ0Ijo3OTMsIi4vbGF5b3V0L3NwaWtlcyI6Nzk2LCIuL2xheW91dC90aWNrX21hcmtzIjo3OTcsIi4vcHJvamVjdCI6Nzk4LCJnbC1wbG90M2QiOjI4NiwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MDMsIndlYmdsLWNvbnRleHQiOjU0MH1dLDgwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7bj1ufHx0Lmxlbmd0aDtmb3IodmFyIGk9bmV3IEFycmF5KG4pLGE9MDthPG47YSsrKWlbYV09W3RbYV0sZVthXSxyW2FdXTtyZXR1cm4gaX19LHt9XSw4MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuL3BhZF9hdHRyaWJ1dGVzIiksbD10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW4oe2VkaXRUeXBlOiJjYWxjIn0pO2MuZmFtaWx5LmRmbHQ9JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsYy5zaXplLmRmbHQ9MTIsYy5jb2xvci5kZmx0PWEuZGVmYXVsdExpbmUsZS5leHBvcnRzPXtmb250OmMsdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sZm9udDpuKHtlZGl0VHlwZToibGF5b3V0c3R5bGUifSkseHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY29udGFpbmVyIix2YWx1ZXM6WyJjb250YWluZXIiLCJwYXBlciJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImNvbnRhaW5lciIsdmFsdWVzOlsiY29udGFpbmVyIiwicGFwZXIiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjUsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OiJhdXRvIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhdXRvIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiYXV0byIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHBhZDpsKHMoe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KSx7fSksZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sYXV0b3NpemU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6Im5vbmUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MTAsZGZsdDo3MDAsZWRpdFR5cGU6InBsb3QifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NDUwLGVkaXRUeXBlOiJwbG90In0sbWFyZ2luOntsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSxyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSx0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAwLGVkaXRUeXBlOiJwbG90In0sYjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGF1dG9leHBhbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHNlcGFyYXRvcnM6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxoaWRlc291cmNlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJsZWdlbmQifSxjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixkZmx0OmEuZGVmYXVsdHMsZWRpdFR5cGU6ImNhbGMifSxjb2xvcnNjYWxlOm8sZGF0YXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHNlbGVjdGlvbnJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sdGVtcGxhdGU6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxtb2RlYmFyOntvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIixlZGl0VHlwZToibW9kZWJhciJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSxhY3RpdmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJtb2RlYmFyIn0sbWV0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InBsb3QifSx0cmFuc2l0aW9uOmwoe30saS50cmFuc2l0aW9uLHtlZGl0VHlwZToibm9uZSJ9KSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvbGF5b3V0X2F0dHJpYnV0ZXMiOjU5MCwiLi4vbGliL2V4dGVuZCI6NjkwLCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo3NDMsIi4vZm9udF9hdHRyaWJ1dGVzIjo3NzQsIi4vcGFkX2F0dHJpYnV0ZXMiOjgwOX1dLDgwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3JlcXVpcmVkVmVyc2lvbjoiMC40NS4wIixzdHlsZVVybFByZWZpeDoibWFwYm94Oi8vc3R5bGVzL21hcGJveC8iLHN0eWxlVXJsU3VmZml4OiJ2OSIsY29udHJvbENvbnRhaW5lckNsYXNzTmFtZToibWFwYm94Z2wtY29udHJvbC1jb250YWluZXIiLHdyb25nVmVyc2lvbkVycm9yTXNnOlsiWW91ciBjdXN0b20gcGxvdGx5LmpzIGJ1bmRsZSBpcyBub3QgdXNpbmcgdGhlIGNvcnJlY3QgbWFwYm94LWdsIHZlcnNpb24iLCJQbGVhc2UgaW5zdGFsbCBtYXBib3gtZ2xAMC40NS4wLiJdLmpvaW4oIlxuIiksbm9BY2Nlc3NUb2tlbkVycm9yTXNnOlsiTWlzc2luZyBNYXBib3ggYWNjZXNzIHRva2VuLiIsIk1hcGJveCB0cmFjZSB0eXBlIHJlcXVpcmUgYSBNYXBib3ggYWNjZXNzIHRva2VuIHRvIGJlIHJlZ2lzdGVyZWQuIiwiRm9yIGV4YW1wbGU6IiwiICBQbG90bHkucGxvdChnZCwgZGF0YSwgbGF5b3V0LCB7IG1hcGJveEFjY2Vzc1Rva2VuOiAnbXktYWNjZXNzLXRva2VuJyB9KTsiLCJNb3JlIGluZm8gaGVyZTogaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL2RlZmluZS1hY2Nlc3MtdG9rZW4vIl0uam9pbigiXG4iKSxtYXBPbkVycm9yTXNnOiJNYXBib3ggZXJyb3IuIixzdHlsZVJ1bGVzOnttYXA6Im92ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTsiLCJtaXNzaW5nLWNzcyI6ImRpc3BsYXk6bm9uZSJ9fX0se31dLDgwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnNwbGl0KCIgIiksaT1yWzBdLGE9clsxXSxvPW4uaXNBcnJheU9yVHlwZWRBcnJheShlKT9uLm1lYW4oZSk6ZSxzPS41K28vMTAwLGw9MS41K28vMTAwLGM9WyIiLCIiXSx1PVswLDBdO3N3aXRjaChpKXtjYXNlInRvcCI6Y1swXT0idG9wIix1WzFdPS1sO2JyZWFrO2Nhc2UiYm90dG9tIjpjWzBdPSJib3R0b20iLHVbMV09bH1zd2l0Y2goYSl7Y2FzZSJsZWZ0IjpjWzFdPSJyaWdodCIsdVswXT0tczticmVhaztjYXNlInJpZ2h0IjpjWzFdPSJsZWZ0Iix1WzBdPXN9cmV0dXJue2FuY2hvcjpjWzBdJiZjWzFdP2Muam9pbigiLSIpOmNbMF0/Y1swXTpjWzFdP2NbMV06ImNlbnRlciIsb2Zmc2V0OnV9fX0seyIuLi8uLi9saWIiOjcwMH1dLDgwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtYXBib3gtZ2wiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi9tYXBib3giKSxsPXQoIi4vY29uc3RhbnRzIik7Zm9yKHZhciBjIGluIGwuc3R5bGVSdWxlcylpLmFkZFN0eWxlUnVsZSgiLm1hcGJveGdsLSIrYyxsLnN0eWxlUnVsZXNbY10pO3IubmFtZT0ibWFwYm94IixyLmF0dHI9InN1YnBsb3QiLHIuaWRSb290PSJtYXBib3giLHIuaWRSZWdleD1yLmF0dHJSZWdleD1pLmNvdW50ZXJSZWdleCgibWFwYm94Iiksci5hdHRyaWJ1dGVzPXtzdWJwbG90Ont2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6Im1hcGJveCIsZWRpdFR5cGU6ImNhbGMifX0sci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmNhbGNkYXRhLG89ZS5fc3VicGxvdHMubWFwYm94O2lmKG4udmVyc2lvbiE9PWwucmVxdWlyZWRWZXJzaW9uKXRocm93IG5ldyBFcnJvcihsLndyb25nVmVyc2lvbkVycm9yTXNnKTt2YXIgYz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7aWYoIiI9PT10Ll9jb250ZXh0Lm1hcGJveEFjY2Vzc1Rva2VuKXJldHVybiIiO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1yW2Vbbl1dO2lmKGkuYWNjZXNzdG9rZW4pcmV0dXJuIGkuYWNjZXNzdG9rZW59dGhyb3cgbmV3IEVycm9yKGwubm9BY2Nlc3NUb2tlbkVycm9yTXNnKX0odCxvKTtuLmFjY2Vzc1Rva2VuPWM7Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1Kyspe3ZhciBmPW9bdV0saD1hKHIsIm1hcGJveCIsZikscD1lW2ZdLGQ9cC5fc3VicGxvdDtkfHwoZD1zKHtnZDp0LGNvbnRhaW5lcjplLl9nbGNvbnRhaW5lci5ub2RlKCksaWQ6ZixmdWxsTGF5b3V0OmUsc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3R9KSxlW2ZdLl9zdWJwbG90PWQpLGQudmlld0luaXRpYWx8fChkLnZpZXdJbml0aWFsPXtjZW50ZXI6aS5leHRlbmRGbGF0KHt9LHAuY2VudGVyKSx6b29tOnAuem9vbSxiZWFyaW5nOnAuYmVhcmluZyxwaXRjaDpwLnBpdGNofSksZC5wbG90KGgsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5tYXBib3h8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc3VicGxvdCYmbltvXS5fc3VicGxvdC5kZXN0cm95KCl9fSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMubWFwYm94LG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0scz1hLmRvbWFpbixsPWEuX3N1YnBsb3QsYz1sLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcsInhsaW5rOmhyZWYiOmMseDpuLmwrbi53KnMueFswXSx5Om4udCtuLmgqKDEtcy55WzFdKSx3aWR0aDpuLncqKHMueFsxXS1zLnhbMF0pLGhlaWdodDpuLmgqKHMueVsxXS1zLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksbC5kZXN0cm95KCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMubWFwYm94LG49MDtuPHIubGVuZ3RoO24rKyl7ZVtyW25dXS5fc3VicGxvdC51cGRhdGVGeChlKX19fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NzgsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6Nzg0LCIuL2NvbnN0YW50cyI6ODAyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MDYsIi4vbGF5b3V0X2RlZmF1bHRzIjo4MDcsIi4vbWFwYm94Ijo4MDgsIm1hcGJveC1nbCI6NDE4fV0sODA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb252ZXJ0X3RleHRfb3B0cyIpO2Z1bmN0aW9uIGEodCxlKXt0aGlzLm1hcGJveD10LHRoaXMubWFwPXQubWFwLHRoaXMudWlkPXQudWlkKyItbGF5ZXIiK2UsdGhpcy5pZFNvdXJjZT10aGlzLnVpZCsiLXNvdXJjZSIsdGhpcy5pZExheWVyPXRoaXMudWlkKyItbGF5ZXIiLHRoaXMuc291cmNlVHlwZT1udWxsLHRoaXMuc291cmNlPW51bGwsdGhpcy5sYXllclR5cGU9bnVsbCx0aGlzLmJlbG93PW51bGwsdGhpcy52aXNpYmxlPSExfXZhciBvPWEucHJvdG90eXBlO2Z1bmN0aW9uIHModCl7dmFyIGU9dC5zb3VyY2U7cmV0dXJuIHQudmlzaWJsZSYmKG4uaXNQbGFpbk9iamVjdChlKXx8InN0cmluZyI9PXR5cGVvZiBlJiZlLmxlbmd0aD4wKX1mdW5jdGlvbiBsKHQpe3ZhciBlPXt9LHI9e307c3dpdGNoKHQudHlwZSl7Y2FzZSJjaXJjbGUiOm4uZXh0ZW5kRmxhdChyLHsiY2lyY2xlLXJhZGl1cyI6dC5jaXJjbGUucmFkaXVzLCJjaXJjbGUtY29sb3IiOnQuY29sb3IsImNpcmNsZS1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlImxpbmUiOm4uZXh0ZW5kRmxhdChyLHsibGluZS13aWR0aCI6dC5saW5lLndpZHRoLCJsaW5lLWNvbG9yIjp0LmNvbG9yLCJsaW5lLW9wYWNpdHkiOnQub3BhY2l0eSwibGluZS1kYXNoYXJyYXkiOnQubGluZS5kYXNofSk7YnJlYWs7Y2FzZSJmaWxsIjpuLmV4dGVuZEZsYXQocix7ImZpbGwtY29sb3IiOnQuY29sb3IsImZpbGwtb3V0bGluZS1jb2xvciI6dC5maWxsLm91dGxpbmVjb2xvciwiZmlsbC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlInN5bWJvbCI6dmFyIGE9dC5zeW1ib2wsbz1pKGEudGV4dHBvc2l0aW9uLGEuaWNvbnNpemUpO24uZXh0ZW5kRmxhdChlLHsiaWNvbi1pbWFnZSI6YS5pY29uKyItMTUiLCJpY29uLXNpemUiOmEuaWNvbnNpemUvMTAsInRleHQtZmllbGQiOmEudGV4dCwidGV4dC1zaXplIjphLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjpvLmFuY2hvciwidGV4dC1vZmZzZXQiOm8ub2Zmc2V0LCJzeW1ib2wtcGxhY2VtZW50IjphLnBsYWNlbWVudH0pLG4uZXh0ZW5kRmxhdChyLHsiaWNvbi1jb2xvciI6dC5jb2xvciwidGV4dC1jb2xvciI6YS50ZXh0Zm9udC5jb2xvciwidGV4dC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KX1yZXR1cm57bGF5b3V0OmUscGFpbnQ6cn19by51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy52aXNpYmxlP3RoaXMubmVlZHNOZXdTb3VyY2UodCk/KHRoaXMucmVtb3ZlTGF5ZXIoKSx0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKTp0aGlzLm5lZWRzTmV3TGF5ZXIodCk/dGhpcy51cGRhdGVMYXllcih0KTp0aGlzLnVwZGF0ZVN0eWxlKHQpOih0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKSx0aGlzLnZpc2libGU9cyh0KX0sby5uZWVkc05ld1NvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VUeXBlIT09dC5zb3VyY2V0eXBlfHx0aGlzLnNvdXJjZSE9PXQuc291cmNlfHx0aGlzLmxheWVyVHlwZSE9PXQudHlwZX0sby5uZWVkc05ld0xheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyVHlwZSE9PXQudHlwZXx8dGhpcy5iZWxvdyE9PXQuYmVsb3d9LG8udXBkYXRlU291cmNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2lmKGUuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiZlLnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKSx0aGlzLnNvdXJjZVR5cGU9dC5zb3VyY2V0eXBlLHRoaXMuc291cmNlPXQuc291cmNlLHModCkpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsaT17dHlwZTpyfTsiZ2VvanNvbiI9PT1yP2U9ImRhdGEiOiJ2ZWN0b3IiPT09ciYmKGU9InN0cmluZyI9PXR5cGVvZiBuPyJ1cmwiOiJ0aWxlcyIpO3JldHVybiBpW2VdPW4saX0odCk7ZS5hZGRTb3VyY2UodGhpcy5pZFNvdXJjZSxyKX19LG8udXBkYXRlTGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXAscj1sKHQpO3RoaXMucmVtb3ZlTGF5ZXIoKSx0aGlzLmxheWVyVHlwZT10LnR5cGUscyh0KSYmZS5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyLHNvdXJjZTp0aGlzLmlkU291cmNlLCJzb3VyY2UtbGF5ZXIiOnQuc291cmNlbGF5ZXJ8fCIiLHR5cGU6dC50eXBlLG1pbnpvb206dC5taW56b29tLG1heHpvb206dC5tYXh6b29tLGxheW91dDpyLmxheW91dCxwYWludDpyLnBhaW50fSx0LmJlbG93KX0sby51cGRhdGVTdHlsZT1mdW5jdGlvbih0KXtpZihzKHQpKXt2YXIgZT1sKHQpO3RoaXMubWFwYm94LnNldE9wdGlvbnModGhpcy5pZExheWVyLCJzZXRMYXlvdXRQcm9wZXJ0eSIsZS5sYXlvdXQpLHRoaXMubWFwYm94LnNldE9wdGlvbnModGhpcy5pZExheWVyLCJzZXRQYWludFByb3BlcnR5IixlLnBhaW50KX19LG8ucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcDt0LmdldExheWVyKHRoaXMuaWRMYXllcikmJnQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKX0sby5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXA7dC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpLHQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2UpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBhKHQsZSk7cmV0dXJuIG4udXBkYXRlKHIpLG59fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2NvbnZlcnRfdGV4dF9vcHRzIjo4MDN9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuZGVmYXVsdExpbmUsYT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikudGV4dHBvc2l0aW9uLGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LHU9byh7fSk7dS5mYW1pbHkuZGZsdD0iT3BlbiBTYW5zIFJlZ3VsYXIsIEFyaWFsIFVuaWNvZGUgTVMgUmVndWxhciIsKGUuZXhwb3J0cz1sKHtfYXJyYXlBdHRyUmVnZXhwczpbbi5jb3VudGVyUmVnZXgoIm1hcGJveCIsIi5sYXllcnMiLCEwKV0sZG9tYWluOmEoe25hbWU6Im1hcGJveCJ9KSxhY2Nlc3N0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sc3R5bGU6e3ZhbFR5cGU6ImFueSIsdmFsdWVzOlsiYmFzaWMiLCJzdHJlZXRzIiwib3V0ZG9vcnMiLCJsaWdodCIsImRhcmsiLCJzYXRlbGxpdGUiLCJzYXRlbGxpdGUtc3RyZWV0cyJdLGRmbHQ6ImJhc2ljIn0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfX0sem9vbTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LGJlYXJpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxwaXRjaDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGxheWVyczpjKCJsYXllciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNvdXJjZXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImdlb2pzb24iLCJ2ZWN0b3IiXSxkZmx0OiJnZW9qc29uIn0sc291cmNlOnt2YWxUeXBlOiJhbnkifSxzb3VyY2VsYXllcjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJsaW5lIiwiZmlsbCIsInN5bWJvbCJdLGRmbHQ6ImNpcmNsZSJ9LGJlbG93Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sbWluem9vbTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MjQsZGZsdDowfSxtYXh6b29tOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoyNCxkZmx0OjI0fSxjaXJjbGU6e3JhZGl1czp7dmFsVHlwZToibnVtYmVyIixkZmx0OjE1fX0sbGluZTp7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyfSxkYXNoOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGZpbGw6e291dGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX19LHN5bWJvbDp7aWNvbjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJtYXJrZXIifSxpY29uc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LHBsYWNlbWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicG9pbnQiLCJsaW5lIiwibGluZS1jZW50ZXIiXSxkZmx0OiJwb2ludCJ9LHRleHRmb250OnUsdGV4dHBvc2l0aW9uOm4uZXh0ZW5kRmxhdCh7fSxzLHthcnJheU9rOiExfSl9fSl9LCJwbG90IiwiZnJvbS1yb290IikpLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA1MSwiLi4vZG9tYWluIjo3NzMsIi4uL2ZvbnRfYXR0cmlidXRlcyI6Nzc0fV0sODA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLGE9dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXtyKCJhY2Nlc3N0b2tlbiIsbi5hY2Nlc3NUb2tlbikscigic3R5bGUiKSxyKCJjZW50ZXIubG9uIikscigiY2VudGVyLmxhdCIpLHIoInpvb20iKSxyKCJiZWFyaW5nIikscigicGl0Y2giKSxhKHQsZSx7bmFtZToibGF5ZXJzIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pLGUuX2lucHV0PXR9ZnVuY3Rpb24gbCh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8ubGF5ZXJzLHIsaSl9aWYocigidmlzaWJsZSIpKXt2YXIgaT1yKCJzb3VyY2V0eXBlIik7cigic291cmNlIiksInZlY3RvciI9PT1pJiZyKCJzb3VyY2VsYXllciIpO3ZhciBhPXIoInR5cGUiKTtyKCJiZWxvdyIpLHIoImNvbG9yIikscigib3BhY2l0eSIpLHIoIm1pbnpvb20iKSxyKCJtYXh6b29tIiksImNpcmNsZSI9PT1hJiZyKCJjaXJjbGUucmFkaXVzIiksImxpbmUiPT09YSYmKHIoImxpbmUud2lkdGgiKSxyKCJsaW5lLmRhc2giKSksImZpbGwiPT09YSYmcigiZmlsbC5vdXRsaW5lY29sb3IiKSwic3ltYm9sIj09PWEmJihyKCJzeW1ib2wuaWNvbiIpLHIoInN5bWJvbC5pY29uc2l6ZSIpLHIoInN5bWJvbC50ZXh0Iiksbi5jb2VyY2VGb250KHIsInN5bWJvbC50ZXh0Zm9udCIpLHIoInN5bWJvbC50ZXh0cG9zaXRpb24iKSxyKCJzeW1ib2wucGxhY2VtZW50IikpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2kodCxlLHIse3R5cGU6Im1hcGJveCIsYXR0cmlidXRlczpvLGhhbmRsZURlZmF1bHRzOnMscGFydGl0aW9uOiJ5IixhY2Nlc3NUb2tlbjplLl9tYXBib3hBY2Nlc3NUb2tlbn0pfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjgyNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODA2fV0sODA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1hcGJveC1nbCIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGw9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsYz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayx1PXQoIi4vY29uc3RhbnRzIiksZj10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksaD10KCIuL2xheWVycyIpO2Z1bmN0aW9uIHAodCl7dGhpcy5pZD10LmlkLHRoaXMuZ2Q9dC5nZCx0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmlzU3RhdGljPXQuc3RhdGljUGxvdDt2YXIgZT10LmZ1bGxMYXlvdXQ7dGhpcy51aWQ9ZS5fdWlkKyItIit0aGlzLmlkLHRoaXMuZGl2PW51bGwsdGhpcy54YXhpcz1udWxsLHRoaXMueWF4aXM9bnVsbCx0aGlzLmNyZWF0ZUZyYW1ld29yayhlKSx0aGlzLm1hcD1udWxsLHRoaXMuYWNjZXNzVG9rZW49bnVsbCx0aGlzLnN0eWxlT2JqPW51bGwsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllckxpc3Q9W119dmFyIGQ9cC5wcm90b3R5cGU7ZnVuY3Rpb24gZyh0KXt2YXIgZT1mLnN0eWxlLnZhbHVlcyxyPWYuc3R5bGUuZGZsdCxuPXt9O3JldHVybiBhLmlzUGxhaW5PYmplY3QodCk/KG4uaWQ9dC5pZCxuLnN0eWxlPXQpOiJzdHJpbmciPT10eXBlb2YgdD8obi5pZD10LG4uc3R5bGU9LTEhPT1lLmluZGV4T2YodCk/dih0KTp0KToobi5pZD1yLG4uc3R5bGU9dihyKSksbi50cmFuc2l0aW9uPXtkdXJhdGlvbjowLGRlbGF5OjB9LG59ZnVuY3Rpb24gdih0KXtyZXR1cm4gdS5zdHlsZVVybFByZWZpeCt0KyItIit1LnN0eWxlVXJsU3VmZml4fWZ1bmN0aW9uIG0odCl7cmV0dXJuW3QubG9uLHQubGF0XX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKHQpfSxkLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcyxhPWVbaS5pZF07aS5tYXAmJmEuYWNjZXNzdG9rZW4hPT1pLmFjY2Vzc1Rva2VuJiYoaS5tYXAucmVtb3ZlKCksaS5tYXA9bnVsbCxpLnN0eWxlT2JqPW51bGwsaS50cmFjZUhhc2g9W10saS5sYXllckxpc3Q9e30pLG49aS5tYXA/bmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXtpLnVwZGF0ZU1hcCh0LGUscixuKX0pOm5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7aS5jcmVhdGVNYXAodCxlLHIsbil9KSxyLnB1c2gobil9LGQuY3JlYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzPXRoaXMsbD1zLmdkLGY9ZVtzLmlkXSxoPXMuc3R5bGVPYmo9ZyhmLnN0eWxlKTtzLmFjY2Vzc1Rva2VuPWYuYWNjZXNzdG9rZW47dmFyIHA9cy5tYXA9bmV3IG4uTWFwKHtjb250YWluZXI6cy5kaXYsc3R5bGU6aC5zdHlsZSxjZW50ZXI6bShmLmNlbnRlciksem9vbTpmLnpvb20sYmVhcmluZzpmLmJlYXJpbmcscGl0Y2g6Zi5waXRjaCxpbnRlcmFjdGl2ZTohcy5pc1N0YXRpYyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6cy5pc1N0YXRpYyxkb3VibGVDbGlja1pvb206ITEsYm94Wm9vbTohMX0pLGQ9dS5jb250cm9sQ29udGFpbmVyQ2xhc3NOYW1lLHY9cy5kaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShkKVswXTtpZihzLmRpdi5yZW1vdmVDaGlsZCh2KSxwLl9jYW52YXMuc3R5bGUubGVmdD0iMHB4IixwLl9jYW52YXMuc3R5bGUudG9wPSIwcHgiLHMucmVqZWN0T25FcnJvcihhKSxwLm9uY2UoImxvYWQiLGZ1bmN0aW9uKCl7cy51cGRhdGVEYXRhKHQpLHMudXBkYXRlTGF5b3V0KGUpLHMucmVzb2x2ZU9uUmVuZGVyKHIpfSksIXMuaXNTdGF0aWMpe3ZhciB5PSExO3Aub24oIm1vdmVlbmQiLGZ1bmN0aW9uKHQpe2lmKHMubWFwKXtpZih0Lm9yaWdpbmFsRXZlbnR8fHkpe3ZhciBlPWwuX2Z1bGxMYXlvdXRbcy5pZF07by5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixsLmxheW91dCxsLl9mdWxsTGF5b3V0Ll9wcmVHVUkscy5nZXRWaWV3RWRpdHMoZSkpO3ZhciByPXMuZ2V0VmlldygpO2UuX2lucHV0LmNlbnRlcj1lLmNlbnRlcj1yLmNlbnRlcixlLl9pbnB1dC56b29tPWUuem9vbT1yLnpvb20sZS5faW5wdXQuYmVhcmluZz1lLmJlYXJpbmc9ci5iZWFyaW5nLGUuX2lucHV0LnBpdGNoPWUucGl0Y2g9ci5waXRjaCxsLmVtaXQoInBsb3RseV9yZWxheW91dCIscy5nZXRWaWV3RWRpdHMocikpfXk9ITF9fSkscC5vbigid2hlZWwiLGZ1bmN0aW9uKCl7eT0hMH0pLHAub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24odCl7dmFyIGU9cy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jbGllbnRYPXQucG9pbnQueCtlLmxlZnQsdC5jbGllbnRZPXQucG9pbnQueStlLnRvcCx0LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZX0scy54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5sbmdMYXQubG5nfSxzLnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0LmxuZ0xhdC5sYXR9LGkuaG92ZXIobCx0LHMuaWQpfSkscC5vbigiZHJhZ3N0YXJ0Iix4KSxwLm9uKCJ6b29tc3RhcnQiLHgpLHAub24oImRibGNsaWNrIixmdW5jdGlvbigpe3ZhciB0PWwuX2Z1bGxMYXlvdXRbcy5pZF07by5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixsLmxheW91dCxsLl9mdWxsTGF5b3V0Ll9wcmVHVUkscy5nZXRWaWV3RWRpdHModCkpO3ZhciBlPXMudmlld0luaXRpYWw7cC5zZXRDZW50ZXIobShlLmNlbnRlcikpLHAuc2V0Wm9vbShlLnpvb20pLHAuc2V0QmVhcmluZyhlLmJlYXJpbmcpLHAuc2V0UGl0Y2goZS5waXRjaCk7dmFyIHI9cy5nZXRWaWV3KCk7dC5faW5wdXQuY2VudGVyPXQuY2VudGVyPXIuY2VudGVyLHQuX2lucHV0Lnpvb209dC56b29tPXIuem9vbSx0Ll9pbnB1dC5iZWFyaW5nPXQuYmVhcmluZz1yLmJlYXJpbmcsdC5faW5wdXQucGl0Y2g9dC5waXRjaD1yLnBpdGNoLGwuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxsLmVtaXQoInBsb3RseV9yZWxheW91dCIscy5nZXRWaWV3RWRpdHMocikpfSkscy5jbGVhclNlbGVjdD1mdW5jdGlvbigpe2wuX2Z1bGxMYXlvdXQuX3pvb21sYXllci5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZSIpLnJlbW92ZSgpfSxzLm9uQ2xpY2tJblBhbkZuPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1sLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtyLmluZGV4T2YoInNlbGVjdCIpPi0xJiZjKGUub3JpZ2luYWxFdmVudCxsLFtzLnhheGlzXSxbcy55YXhpc10scy5pZCx0KSxyLmluZGV4T2YoImV2ZW50Iik+LTEmJmkuY2xpY2sobCxlLm9yaWdpbmFsRXZlbnQpfX19ZnVuY3Rpb24geCgpe2kubG9uZVVuaG92ZXIoZS5fdG9wcGFwZXIpfX0sZC51cGRhdGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPWkubWFwLG89ZVt0aGlzLmlkXTtpLnJlamVjdE9uRXJyb3Iobik7dmFyIHM9ZyhvLnN0eWxlKTtpLnN0eWxlT2JqLmlkIT09cy5pZD8oaS5zdHlsZU9iaj1zLGEuc2V0U3R5bGUocy5zdHlsZSksYS5vbmNlKCJzdHlsZWRhdGEiLGZ1bmN0aW9uKCl7aS50cmFjZUhhc2g9e30saS51cGRhdGVEYXRhKHQpLGkudXBkYXRlTGF5b3V0KGUpLGkucmVzb2x2ZU9uUmVuZGVyKHIpfSkpOihpLnVwZGF0ZURhdGEodCksaS51cGRhdGVMYXlvdXQoZSksaS5yZXNvbHZlT25SZW5kZXIocikpLHRoaXMuZ2QuX2NvbnRleHQuX3Njcm9sbFpvb20ubWFwYm94P2Euc2Nyb2xsWm9vbS5lbmFibGUoKTphLnNjcm9sbFpvb20uZGlzYWJsZSgpfSxkLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10aGlzLnRyYWNlSGFzaDtmb3Iobj0wO248dC5sZW5ndGg7bisrKXt2YXIgbz10W25dOyhlPWFbKHI9b1swXS50cmFjZSkudWlkXSk/ZS51cGRhdGUobyk6ci5fbW9kdWxlJiYoYVtyLnVpZF09ci5fbW9kdWxlLnBsb3QodGhpcyxvKSl9dmFyIHM9T2JqZWN0LmtleXMoYSk7dDpmb3Iobj0wO248cy5sZW5ndGg7bisrKXt2YXIgbD1zW25dO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYobD09PShyPXRbaV1bMF0udHJhY2UpLnVpZCljb250aW51ZSB0OyhlPWFbbF0pLmRpc3Bvc2UoKSxkZWxldGUgYVtsXX19LGQudXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwLHI9dFt0aGlzLmlkXTtlLnNldENlbnRlcihtKHIuY2VudGVyKSksZS5zZXRab29tKHIuem9vbSksZS5zZXRCZWFyaW5nKHIuYmVhcmluZyksZS5zZXRQaXRjaChyLnBpdGNoKSx0aGlzLnVwZGF0ZUxheWVycyh0KSx0aGlzLnVwZGF0ZUZyYW1ld29yayh0KSx0aGlzLnVwZGF0ZUZ4KHQpLHRoaXMubWFwLnJlc2l6ZSgpfSxkLnJlc29sdmVPblJlbmRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtlLm9uKCJyZW5kZXIiLGZ1bmN0aW9uIHIoKXtlLmxvYWRlZCgpJiYoZS5vZmYoInJlbmRlciIsciksc2V0VGltZW91dCh0LDApKX0pfSxkLnJlamVjdE9uRXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7ZnVuY3Rpb24gcigpe3QobmV3IEVycm9yKHUubWFwT25FcnJvck1zZykpfWUub25jZSgiZXJyb3IiLHIpLGUub25jZSgic3R5bGUuZXJyb3IiLHIpLGUub25jZSgic291cmNlLmVycm9yIixyKSxlLm9uY2UoInRpbGUuZXJyb3IiLHIpLGUub25jZSgibGF5ZXIuZXJyb3IiLHIpfSxkLmNyZWF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5pZD1lLnVpZCxyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5jb250YWluZXIuYXBwZW5kQ2hpbGQociksZS54YXhpcz17X2lkOiJ4IixjMnA6ZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvamVjdCh0KS54fX0sZS55YXhpcz17X2lkOiJ5IixjMnA6ZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvamVjdCh0KS55fX0sZS51cGRhdGVGcmFtZXdvcmsodCl9LGQudXBkYXRlRng9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUubWFwLG49ZS5nZDtpZighZS5pc1N0YXRpYyl7dmFyIGksbz10LmRyYWdtb2RlO2k9InNlbGVjdCI9PT1vP2Z1bmN0aW9uKHQscil7KHQucmFuZ2U9e30pW2UuaWRdPVt1KFtyLnhtaW4sci55bWluXSksdShbci54bWF4LHIueW1heF0pXX06ZnVuY3Rpb24odCxyLG4peyh0Lmxhc3NvUG9pbnRzPXt9KVtlLmlkXT1uLmZpbHRlcmVkLm1hcCh1KX07dmFyIGM9ZS5kcmFnT3B0aW9ucztlLmRyYWdPcHRpb25zPWEuZXh0ZW5kRGVlcChjfHx7fSx7ZWxlbWVudDplLmRpdixnZDpuLHBsb3RpbmZvOntpZDplLmlkLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxmaWxsUmFuZ2VJdGVtczppfSx4YXhlczpbZS54YXhpc10seWF4ZXM6W2UueWF4aXNdLHN1YnBsb3Q6ZS5pZH0pLHIub2ZmKCJjbGljayIsZS5vbkNsaWNrSW5QYW5IYW5kbGVyKSwic2VsZWN0Ij09PW98fCJsYXNzbyI9PT1vPyhyLmRyYWdQYW4uZGlzYWJsZSgpLHIub24oInpvb21zdGFydCIsZS5jbGVhclNlbGVjdCksZS5kcmFnT3B0aW9ucy5wcmVwRm49ZnVuY3Rpb24odCxyLG4pe2wodCxyLG4sZS5kcmFnT3B0aW9ucyxvKX0scy5pbml0KGUuZHJhZ09wdGlvbnMpKTooci5kcmFnUGFuLmVuYWJsZSgpLHIub2ZmKCJ6b29tc3RhcnQiLGUuY2xlYXJTZWxlY3QpLGUuZGl2Lm9ubW91c2Vkb3duPW51bGwsZS5vbkNsaWNrSW5QYW5IYW5kbGVyPWUub25DbGlja0luUGFuRm4oZS5kcmFnT3B0aW9ucyksci5vbigiY2xpY2siLGUub25DbGlja0luUGFuSGFuZGxlcikpfWZ1bmN0aW9uIHUodCl7dmFyIHI9ZS5tYXAudW5wcm9qZWN0KHQpO3JldHVybltyLmxuZyxyLmxhdF19fSxkLnVwZGF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10W3RoaXMuaWRdLmRvbWFpbixyPXQuX3NpemUsbj10aGlzLmRpdi5zdHlsZTtuLndpZHRoPXIudyooZS54WzFdLWUueFswXSkrInB4IixuLmhlaWdodD1yLmgqKGUueVsxXS1lLnlbMF0pKyJweCIsbi5sZWZ0PXIubCtlLnhbMF0qci53KyJweCIsbi50b3A9ci50KygxLWUueVsxXSkqci5oKyJweCIsdGhpcy54YXhpcy5fb2Zmc2V0PXIubCtlLnhbMF0qci53LHRoaXMueGF4aXMuX2xlbmd0aD1yLncqKGUueFsxXS1lLnhbMF0pLHRoaXMueWF4aXMuX29mZnNldD1yLnQrKDEtZS55WzFdKSpyLmgsdGhpcy55YXhpcy5fbGVuZ3RoPXIuaCooZS55WzFdLWUueVswXSl9LGQudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dFt0aGlzLmlkXS5sYXllcnMsbj10aGlzLmxheWVyTGlzdDtpZihyLmxlbmd0aCE9PW4ubGVuZ3RoKXtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0uZGlzcG9zZSgpO2ZvcihuPXRoaXMubGF5ZXJMaXN0PVtdLGU9MDtlPHIubGVuZ3RoO2UrKyluLnB1c2goaCh0aGlzLGUscltlXSkpfWVsc2UgZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyluW2VdLnVwZGF0ZShyW2VdKX0sZC5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLm1hcC5yZW1vdmUoKSx0aGlzLm1hcD1udWxsLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuZGl2KSl9LGQudG9JbWFnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcC5zdG9wKCksdGhpcy5tYXAuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCl9LGQuc2V0T3B0aW9ucz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHIpdGhpcy5tYXBbZV0odCxuLHJbbl0pfSxkLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLnByb2plY3QobmV3IG4uTG5nTGF0KHRbMF0sdFsxXSkpfSxkLmdldFZpZXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcCxlPXQuZ2V0Q2VudGVyKCk7cmV0dXJue2NlbnRlcjp7bG9uOmUubG5nLGxhdDplLmxhdH0sem9vbTp0LmdldFpvb20oKSxiZWFyaW5nOnQuZ2V0QmVhcmluZygpLHBpdGNoOnQuZ2V0UGl0Y2goKX19LGQuZ2V0Vmlld0VkaXRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmlkLHI9WyJjZW50ZXIiLCJ6b29tIiwiYmVhcmluZyIsInBpdGNoIl0sbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07bltlKyIuIithXT10W2FdfXJldHVybiBufX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo1OTUsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjc2NSwiLi9jb25zdGFudHMiOjgwMiwiLi9sYXllcnMiOjgwNSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODA2LCJtYXBib3gtZ2wiOjQxOH1dLDgwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lZGl0VHlwZTtyZXR1cm57dDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0scjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sYjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sZWRpdFR5cGU6ZX19fSx7fV0sODEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vcmVnaXN0cnkiKSxvPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIikscz10KCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbD10KCIuLi9saWIiKSxjPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sZj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxoPXQoIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxwPXQoIi4vZnJhbWVfYXR0cmlidXRlcyIpLGQ9bC5yZWxpbmtQcml2YXRlS2V5cyxnPWwuXyx2PWUuZXhwb3J0cz17fTtsLmV4dGVuZEZsYXQodixhKSx2LmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksdi5hdHRyaWJ1dGVzLnR5cGUudmFsdWVzPXYuYWxsVHlwZXMsdi5mb250QXR0cnM9dCgiLi9mb250X2F0dHJpYnV0ZXMiKSx2LmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHYuZm9udFdlaWdodD0ibm9ybWFsIjt2YXIgbT12LnRyYW5zZm9ybXNSZWdpc3RyeSx5PXQoIi4vY29tbWFuZCIpO3YuZXhlY3V0ZUFQSUNvbW1hbmQ9eS5leGVjdXRlQVBJQ29tbWFuZCx2LmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9eS5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzLHYubWFuYWdlQ29tbWFuZE9ic2VydmVyPXkubWFuYWdlQ29tbWFuZE9ic2VydmVyLHYuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzPXkuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzLHYucmVkcmF3VGV4dD1mdW5jdGlvbih0KXtpZighKCh0PWwuZ2V0R3JhcGhEaXYodCkpLmRhdGEmJnQuZGF0YVswXSYmdC5kYXRhWzBdLnIpKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksKHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pLGUodi5wcmV2aW91c1Byb21pc2VzKHQpKX0sMzAwKX0pfSx2LnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD1sLmdldEdyYXBoRGl2KHQpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5O3JldHVybiFlfHwibm9uZSI9PT1lfXQmJiFuKHQpfHxyKG5ldyBFcnJvcigiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgZGlzcGxheWVkIHBsb3QgZGl2IGVsZW1lbnQuIikpLHQuX3JlZHJhd1RpbWVyJiZjbGVhclRpbWVvdXQodC5fcmVkcmF3VGltZXIpLHQuX3JlZHJhd1RpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZighdC5sYXlvdXR8fHQubGF5b3V0LndpZHRoJiZ0LmxheW91dC5oZWlnaHR8fG4odCkpZSh0KTtlbHNle2RlbGV0ZSB0LmxheW91dC53aWR0aCxkZWxldGUgdC5sYXlvdXQuaGVpZ2h0O3ZhciByPXQuY2hhbmdlZDt0LmF1dG9wbGF5PSEwLGEuY2FsbCgicmVsYXlvdXQiLHQse2F1dG9zaXplOiEwfSkudGhlbihmdW5jdGlvbigpe3QuY2hhbmdlZD1yLGUodCl9KX19LDEwMCl9KX0sdi5wcmV2aW91c1Byb21pc2VzPWZ1bmN0aW9uKHQpe2lmKCh0Ll9wcm9taXNlc3x8W10pLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oKXt0Ll9wcm9taXNlcz1bXX0pfSx2LmFkZExpbmtzPWZ1bmN0aW9uKHQpe2lmKHQuX2NvbnRleHQuc2hvd0xpbmt8fHQuX2NvbnRleHQuc2hvd1NvdXJjZXMpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1sLmVuc3VyZVNpbmdsZShlLl9wYXBlciwidGV4dCIsImpzLXBsb3QtbGluay1jb250YWluZXIiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoeyJmb250LWZhbWlseSI6JyJPcGVuIFNhbnMiLCBBcmlhbCwgc2Fucy1zZXJpZicsImZvbnQtc2l6ZSI6IjEycHgiLGZpbGw6Yy5kZWZhdWx0TGluZSwicG9pbnRlci1ldmVudHMiOiJhbGwifSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pfSksaT1yLm5vZGUoKSxhPXt5OmUuX3BhcGVyLmF0dHIoImhlaWdodCIpLTl9O2RvY3VtZW50LmJvZHkuY29udGFpbnMoaSkmJmkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+PWUud2lkdGgtMjA/KGFbInRleHQtYW5jaG9yIl09InN0YXJ0IixhLng9NSk6KGFbInRleHQtYW5jaG9yIl09ImVuZCIsYS54PWUuX3BhcGVyLmF0dHIoIndpZHRoIiktNyksci5hdHRyKGEpO3ZhciBvPXIuc2VsZWN0KCIuanMtbGluay10by10b29sIikscz1yLnNlbGVjdCgiLmpzLWxpbmstc3BhY2VyIiksdT1yLnNlbGVjdCgiLmpzLXNvdXJjZWxpbmtzIik7dC5fY29udGV4dC5zaG93U291cmNlcyYmdC5fY29udGV4dC5zaG93U291cmNlcyh0KSx0Ll9jb250ZXh0LnNob3dMaW5rJiZmdW5jdGlvbih0LGUpe2UudGV4dCgiIik7dmFyIHI9ZS5hcHBlbmQoImEiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6IiMiLGNsYXNzOiJsaW5rLS1pbXB0IGxpbmstLWVtYmVkdmlldyIsImZvbnQtd2VpZ2h0IjoiYm9sZCJ9KS50ZXh0KHQuX2NvbnRleHQubGlua1RleHQrIiAiK1N0cmluZy5mcm9tQ2hhckNvZGUoMTg3KSk7aWYodC5fY29udGV4dC5zZW5kRGF0YSlyLm9uKCJjbGljayIsZnVuY3Rpb24oKXt2LnNlbmREYXRhVG9DbG91ZCh0KX0pO2Vsc2V7dmFyIG49d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCIvIiksaT13aW5kb3cubG9jYXRpb24uc2VhcmNoO3IuYXR0cih7InhsaW5rOnhsaW5rOnNob3ciOiJuZXciLCJ4bGluazp4bGluazpocmVmIjoiLyIrblsyXS5zcGxpdCgiLiIpWzBdKyIvIituWzFdK2l9KX19KHQsbykscy50ZXh0KG8udGV4dCgpJiZ1LnRleHQoKT8iIC0gIjoiIil9fSx2LnNlbmREYXRhVG9DbG91ZD1mdW5jdGlvbih0KXt0LmVtaXQoInBsb3RseV9iZWZvcmVleHBvcnQiKTt2YXIgZT0od2luZG93LlBMT1RMWUVOVnx8e30pLkJBU0VfVVJMfHx0Ll9jb250ZXh0LnBsb3RseVNlcnZlclVSTCxyPW4uc2VsZWN0KHQpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJoaWRkZW5mb3JtIikuc3R5bGUoImRpc3BsYXkiLCJub25lIiksaT1yLmFwcGVuZCgiZm9ybSIpLmF0dHIoe2FjdGlvbjplKyIvZXh0ZXJuYWwiLG1ldGhvZDoicG9zdCIsdGFyZ2V0OiJfYmxhbmsifSk7cmV0dXJuIGkuYXBwZW5kKCJpbnB1dCIpLmF0dHIoe3R5cGU6InRleHQiLG5hbWU6ImRhdGEifSkubm9kZSgpLnZhbHVlPXYuZ3JhcGhKc29uKHQsITEsImtlZXBkYXRhIiksaS5ub2RlKCkuc3VibWl0KCksci5yZW1vdmUoKSx0LmVtaXQoInBsb3RseV9hZnRlcmV4cG9ydCIpLCExfTt2YXIgeD1bImRheXMiLCJzaG9ydERheXMiLCJtb250aHMiLCJzaG9ydE1vbnRocyIsInBlcmlvZHMiLCJkYXRlVGltZSIsImRhdGUiLCJ0aW1lIiwiZGVjaW1hbCIsInRob3VzYW5kcyIsImdyb3VwaW5nIiwiY3VycmVuY3kiXSxiPVsieWVhciIsIm1vbnRoIiwiZGF5TW9udGgiLCJkYXlNb250aFllYXIiXTtmdW5jdGlvbiBfKHQsZSl7dmFyIHI9dC5fY29udGV4dC5sb2NhbGUsbj0hMSxpPXt9O2Z1bmN0aW9uIG8odCl7Zm9yKHZhciByPSEwLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXTtpW29dfHwodFtvXT9pW29dPXRbb106cj0hMSl9ciYmKG49ITApfWZvcih2YXIgcz0wO3M8MjtzKyspe2Zvcih2YXIgbD10Ll9jb250ZXh0LmxvY2FsZXMsYz0wO2M8MjtjKyspe3ZhciB1PShsW3JdfHx7fSkuZm9ybWF0O2lmKHUmJihvKHUpLG4pKWJyZWFrO2w9YS5sb2NhbGVSZWdpc3RyeX12YXIgZj1yLnNwbGl0KCItIilbMF07aWYobnx8Zj09PXIpYnJlYWs7cj1mfXJldHVybiBufHxvKGEubG9jYWxlUmVnaXN0cnkuZW4uZm9ybWF0KSxpfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj17X2Z1bGxMYXlvdXQ6ZX0sbj0ieCI9PT10Ll9pZC5jaGFyQXQoMCksaT10Ll9tYWluQXhpcy5fYW5jaG9yQXhpcyxhPSIiLG89IiIscz0iIjtpZihpJiYocz1pLl9tYWluQXhpcy5faWQsYT1uP3QuX2lkK3M6cyt0Ll9pZCksIWF8fCFlLl9wbG90c1thXSl7YT0iIjtmb3IodmFyIGw9dC5fY291bnRlckF4ZXMsYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdLGg9bj90Ll9pZCt1OnUrdC5faWQ7b3x8KG89aCk7dmFyIHA9Zi5nZXRGcm9tSWQocix1KTtpZihzJiZwLm92ZXJsYXlpbmc9PT1zKXthPWg7YnJlYWt9fX1yZXR1cm4gYXx8b31mdW5jdGlvbiBrKHQpe3ZhciBlPXQudHJhbnNmb3JtcztpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPW4uX21vZHVsZXx8bVtuLnR5cGVdO2lmKGkmJmkubWFrZXNEYXRhKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFQodCxlLHIsbil7Zm9yKHZhciBpPXQudHJhbnNmb3JtcyxhPVt0XSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sbD1tW3MudHlwZV07bCYmbC50cmFuc2Zvcm0mJihhPWwudHJhbnNmb3JtKGEse3RyYW5zZm9ybTpzLGZ1bGxUcmFjZTp0LGZ1bGxEYXRhOmUsbGF5b3V0OnIsZnVsbExheW91dDpuLHRyYW5zZm9ybUluZGV4Om99KSl9cmV0dXJuIGF9ZnVuY3Rpb24gQSh0KXt2YXIgZT10Lm1hcmdpbjtpZighdC5fc2l6ZSl7dmFyIHI9dC5fc2l6ZT17bDpNYXRoLnJvdW5kKGUubCkscjpNYXRoLnJvdW5kKGUuciksdDpNYXRoLnJvdW5kKGUudCksYjpNYXRoLnJvdW5kKGUuYikscDpNYXRoLnJvdW5kKGUucGFkKX07ci53PU1hdGgucm91bmQodC53aWR0aCktci5sLXIucixyLmg9TWF0aC5yb3VuZCh0LmhlaWdodCktci50LXIuYn10Ll9wdXNobWFyZ2lufHwodC5fcHVzaG1hcmdpbj17fSksdC5fcHVzaG1hcmdpbklkc3x8KHQuX3B1c2htYXJnaW5JZHM9e30pfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPSExO3ZhciBpPVt2LnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZih0Ll90cmFuc2l0aW9uRGF0YSlyZXR1cm4gdC5fdHJhbnNpdGlvbmluZz0hMSxmdW5jdGlvbih0KXt2YXIgZT1Qcm9taXNlLnJlc29sdmUoKTtpZighdClyZXR1cm4gZTtmb3IoO3QubGVuZ3RoOyllPWUudGhlbih0LnNoaWZ0KCkpO3JldHVybiBlfSh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX0sci5wcmVwYXJlRm4sdi5yZWhvdmVyLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbmciLFtdKSxuZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0Ll90cmFuc2l0aW9uaW5nPSEwLGUuZHVyYXRpb24+MCYmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITApLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe249ITB9KSxyLnJlZHJhdyYmdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbCgicmVkcmF3Iix0KX0pLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3QuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbnRlcnJ1cHRlZCIsW10pfSk7dmFyIG89MCxzPTA7ZnVuY3Rpb24gbCgpe3JldHVybiBvKyssZnVuY3Rpb24oKXt2YXIgZTtzKyssbnx8cyE9PW98fChlPWksdC5fdHJhbnNpdGlvbkRhdGEmJihmdW5jdGlvbih0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX0odC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe2lmKHIucmVkcmF3KXJldHVybiBhLmNhbGwoInJlZHJhdyIsdCl9KS50aGVuKGZ1bmN0aW9uKCl7dC5fdHJhbnNpdGlvbmluZz0hMSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSExLHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25lZCIsW10pfSkudGhlbihlKSkpfX1yLnJ1bkZuKGwpLHNldFRpbWVvdXQobCgpKX0pfV0sbz1sLnN5bmNPckFzeW5jKGksdCk7cmV0dXJuIG8mJm8udGhlbnx8KG89UHJvbWlzZS5yZXNvbHZlKCkpLG8udGhlbihmdW5jdGlvbigpe3JldHVybiB0fSl9ZnVuY3Rpb24gUyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uY2xlYXJDYWxjKCksIm11bHRpY2F0ZWdvcnkiPT09bi50eXBlJiZuLnNldHVwTXVsdGlDYXRlZ29yeShlKX19di5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUmJmUuc2tpcFVwZGF0ZUNhbGMsaT10Ll9mdWxsTGF5b3V0fHx7fTtpZihpLl9za2lwRGVmYXVsdHMpZGVsZXRlIGkuX3NraXBEZWZhdWx0cztlbHNle3ZhciBvLHM9dC5fZnVsbExheW91dD17fSxjPXQubGF5b3V0fHx7fSx1PXQuX2Z1bGxEYXRhfHxbXSxmPXQuX2Z1bGxEYXRhPVtdLGg9dC5kYXRhfHxbXSxwPXQuY2FsY2RhdGF8fFtdLG09dC5fY29udGV4dHx8e307dC5fdHJhbnNpdGlvbkRhdGF8fHYuY3JlYXRlVHJhbnNpdGlvbkRhdGEodCkscy5fZGZsdFRpdGxlPXtwbG90OmcodCwiQ2xpY2sgdG8gZW50ZXIgUGxvdCB0aXRsZSIpLHg6Zyh0LCJDbGljayB0byBlbnRlciBYIGF4aXMgdGl0bGUiKSx5OmcodCwiQ2xpY2sgdG8gZW50ZXIgWSBheGlzIHRpdGxlIiksY29sb3JiYXI6Zyh0LCJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlIiksYW5ub3RhdGlvbjpnKHQsIm5ldyB0ZXh0Iil9LHMuX3RyYWNlV29yZD1nKHQsInRyYWNlIik7dmFyIHk9Xyh0LHgpO2lmKHMuX21hcGJveEFjY2Vzc1Rva2VuPW0ubWFwYm94QWNjZXNzVG9rZW4saS5faW5pdGlhbEF1dG9TaXplSXNEb25lKXt2YXIgdz1pLndpZHRoLGs9aS5oZWlnaHQ7di5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyhjLHMseSksYy53aWR0aHx8KHMud2lkdGg9dyksYy5oZWlnaHR8fChzLmhlaWdodD1rKSx2LnNhbml0aXplTWFyZ2lucyhzKX1lbHNle3Yuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxzLHkpO3ZhciBUPSFjLndpZHRofHwhYy5oZWlnaHQsTT1zLmF1dG9zaXplLFM9bS5hdXRvc2l6YWJsZTtUJiYoTXx8Uyk/di5wbG90QXV0b1NpemUodCxjLHMpOlQmJnYuc2FuaXRpemVNYXJnaW5zKHMpLCFNJiZUJiYoYy53aWR0aD1zLndpZHRoLGMuaGVpZ2h0PXMuaGVpZ2h0KX1zLl9kM2xvY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmRlY2ltYWw9ZS5jaGFyQXQoMCksdC50aG91c2FuZHM9ZS5jaGFyQXQoMSksbi5sb2NhbGUodCl9KHkscy5zZXBhcmF0b3JzKSxzLl9leHRyYUZvcm1hdD1fKHQsYikscy5faW5pdGlhbEF1dG9TaXplSXNEb25lPSEwLHMuX2RhdGFMZW5ndGg9aC5sZW5ndGgscy5fbW9kdWxlcz1bXSxzLl92aXNpYmxlTW9kdWxlcz1bXSxzLl9iYXNlUGxvdE1vZHVsZXM9W107dmFyIEU9cy5fc3VicGxvdHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9YS5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcyxuPXt9O2lmKCFyKXtyPVtdO3ZhciBpPWEuc3VicGxvdHNSZWdpc3RyeTtmb3IodmFyIG8gaW4gaSl7dmFyIHM9aVtvXSxjPXMuYXR0cjtpZihjJiYoci5wdXNoKG8pLEFycmF5LmlzQXJyYXkoYykpKWZvcihlPTA7ZTxjLmxlbmd0aDtlKyspbC5wdXNoVW5pcXVlKHIsY1tlXSl9fWZvcih0PTA7dDxyLmxlbmd0aDt0KyspbltyW3RdXT1bXTtyZXR1cm4gbn0oKSxDPXMuX3NwbG9tQXhlcz17eDp7fSx5Ont9fSxMPXMuX3NwbG9tU3VicGxvdHM9e307cy5fc3Bsb21HcmlkRGZsdD17fSxzLl9zY2F0dGVyU3RhY2tPcHRzPXt9LHMuX2ZpcnN0U2NhdHRlcj17fSxzLl9hbGlnbm1lbnRPcHRzPXt9LHMuX3JlcXVlc3RSYW5nZXNsaWRlcj17fSxzLl90cmFjZVVpZHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLl9mdWxsSW5wdXQ7byE9PW4mJmEucHVzaChvKSxuPW99dmFyIHM9YS5sZW5ndGgsYz1uZXcgQXJyYXkoaSksdT17fTtmdW5jdGlvbiBmKHQsZSl7Y1tlXT10LHVbdF09MX1mdW5jdGlvbiBoKHQsZSl7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0JiYhdVt0XSlyZXR1cm4gZih0LGUpLCEwfWZvcihyPTA7cjxpO3IrKyl7dmFyIHA9ZVtyXS51aWQ7Im51bWJlciI9PXR5cGVvZiBwJiYocD1TdHJpbmcocCkpLGgocCxyKXx8KHI8cyYmaChhW3JdLnVpZCxyKXx8ZihsLnJhbmRzdHIodSkscikpfXJldHVybiBjfSh1LGgpLHMuX2dsb2JhbFRyYW5zZm9ybXM9KHQuX2NvbnRleHR8fHt9KS5nbG9iYWxUcmFuc2Zvcm1zLHYuc3VwcGx5RGF0YURlZmF1bHRzKGgsZixjLHMpO3ZhciB6PU9iamVjdC5rZXlzKEMueCksTz1PYmplY3Qua2V5cyhDLnkpO2lmKHoubGVuZ3RoPjEmJk8ubGVuZ3RoPjEpe2ZvcihhLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsInNpemVEZWZhdWx0cyIpKGMscyksbz0wO288ei5sZW5ndGg7bysrKWwucHVzaFVuaXF1ZShFLnhheGlzLHpbb10pO2ZvcihvPTA7bzxPLmxlbmd0aDtvKyspbC5wdXNoVW5pcXVlKEUueWF4aXMsT1tvXSk7Zm9yKHZhciBJIGluIEwpbC5wdXNoVW5pcXVlKEUuY2FydGVzaWFuLEkpfWlmKHMuX2hhcz12Ll9oYXNQbG90VHlwZS5iaW5kKHMpLHUubGVuZ3RoPT09Zi5sZW5ndGgpZm9yKG89MDtvPGYubGVuZ3RoO28rKylkKGZbb10sdVtvXSk7di5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cyhjLHMsZix0Ll90cmFuc2l0aW9uRGF0YSk7dmFyIEQ9cy5fdmlzaWJsZU1vZHVsZXMsUD1bXTtmb3Iobz0wO288RC5sZW5ndGg7bysrKXt2YXIgUj1EW29dLmNyb3NzVHJhY2VEZWZhdWx0cztSJiZsLnB1c2hVbmlxdWUoUCxSKX1mb3Iobz0wO288UC5sZW5ndGg7bysrKVBbb10oZixzKTthLmdldENvbXBvbmVudE1ldGhvZCgiY29sb3JzY2FsZSIsImNyb3NzVHJhY2VEZWZhdWx0cyIpKGYscykscy5faGFzT25seUxhcmdlU3Bsb21zPTE9PT1zLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoJiYic3Bsb20iPT09cy5fYmFzZVBsb3RNb2R1bGVzWzBdLm5hbWUmJnoubGVuZ3RoPjE1JiZPLmxlbmd0aD4xNSYmMD09PXMuc2hhcGVzLmxlbmd0aCYmMD09PXMuaW1hZ2VzLmxlbmd0aCxzLl9oYXNDYXJ0ZXNpYW49cy5faGFzKCJjYXJ0ZXNpYW4iKSxzLl9oYXNHZW89cy5faGFzKCJnZW8iKSxzLl9oYXNHTDNEPXMuX2hhcygiZ2wzZCIpLHMuX2hhc0dMMkQ9cy5faGFzKCJnbDJkIikscy5faGFzVGVybmFyeT1zLl9oYXMoInRlcm5hcnkiKSxzLl9oYXNQaWU9cy5faGFzKCJwaWUiKSx2LmxpbmtTdWJwbG90cyhmLHMsdSxpKSx2LmNsZWFuUGxvdChmLHMsdSxpKSxkKHMsaSkscy5fcHJlR1VJfHwocy5fcHJlR1VJPXt9KSxzLl90cmFjZVByZUdVSXx8KHMuX3RyYWNlUHJlR1VJPXt9KTt2YXIgRixCPXMuX3RyYWNlUHJlR1VJLE49e307Zm9yKEYgaW4gQilOW0ZdPSJvbGQiO2ZvcihvPTA7bzxmLmxlbmd0aDtvKyspTltGPWZbb10uX2Z1bGxJbnB1dC51aWRdfHwoQltGXT17fSksTltGXT0ibmV3Ijtmb3IoRiBpbiBOKSJvbGQiPT09TltGXSYmZGVsZXRlIEJbRl07QShzKSxhLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJtYWtlRGF0YSIpKHMpLHJ8fHAubGVuZ3RoIT09Zi5sZW5ndGh8fHYuc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKHAsZil9fSx2LnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9KHRbcl18fFtdKVswXTtpZihpJiZpLnRyYWNlKXt2YXIgYT1pLnRyYWNlO2lmKGEuX2hhc0NhbGNUcmFuc2Zvcm0pe3ZhciBvLHMsYyx1PWEuX2FycmF5QXR0cnM7Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzPXVbb10sYz1sLm5lc3RlZFByb3BlcnR5KGEscykuZ2V0KCkuc2xpY2UoKSxsLm5lc3RlZFByb3BlcnR5KG4scykuc2V0KGMpfWkudHJhY2U9bn19fSx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhPWZ1bmN0aW9uKHQpe3QuX3RyYW5zaXRpb25EYXRhfHwodC5fdHJhbnNpdGlvbkRhdGE9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXN8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzPVtdKSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNofHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXJ8fCh0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcj0wKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcz1bXSl9LHYuX2hhc1Bsb3RUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKHJbZV0ubmFtZT09PXQpcmV0dXJuITA7dmFyIG49dGhpcy5fbW9kdWxlc3x8W107Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIGk9bltlXS5uYW1lO2lmKGk9PT10KXJldHVybiEwO3ZhciBvPWEubW9kdWxlc1tpXTtpZihvJiZvLmNhdGVnb3JpZXNbdF0pcmV0dXJuITB9cmV0dXJuITF9LHYuY2xlYW5QbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBzPW9baV07cy5jbGVhbiYmcy5jbGVhbih0LGUscixuKX12YXIgbD1uLl9oYXMmJm4uX2hhcygiZ2wiKSxjPWUuX2hhcyYmZS5faGFzKCJnbCIpO2wmJiFjJiZ2b2lkIDAhPT1uLl9nbGNvbnRhaW5lciYmKG4uX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLnJlbW92ZSgpLG4uX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLm5vLXdlYmdsIikucmVtb3ZlKCksbi5fZ2xjYW52YXM9bnVsbCk7dmFyIHU9ISFuLl9pbmZvbGF5ZXI7dDpmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgZj1yW2ldLnVpZDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXtpZihmPT09dFthXS51aWQpY29udGludWUgdH11JiZuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuY2IiK2YpLnJlbW92ZSgpfW4uX3pvb21sYXllciYmbi5fem9vbWxheWVyLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCl9LHYubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9wbG90c3x8e30scz1lLl9wbG90cz17fSxjPWUuX3N1YnBsb3RzLHU9e19mdWxsRGF0YTp0LF9mdWxsTGF5b3V0OmV9LGg9Yy5jYXJ0ZXNpYW4uY29uY2F0KGMuZ2wyZHx8W10pO2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBwLGQ9aFtpXSxnPW9bZF0sdj1mLmdldEZyb21JZCh1LGQsIngiKSxtPWYuZ2V0RnJvbUlkKHUsZCwieSIpO2ZvcihnP3A9c1tkXT1nOihwPXNbZF09e30pLmlkPWQsdi5fY291bnRlckF4ZXMucHVzaChtLl9pZCksbS5fY291bnRlckF4ZXMucHVzaCh2Ll9pZCksdi5fc3VicGxvdHNXaXRoLnB1c2goZCksbS5fc3VicGxvdHNXaXRoLnB1c2goZCkscC54YXhpcz12LHAueWF4aXM9bSxwLl9oYXNDbGlwT25BeGlzRmFsc2U9ITEsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgeT10W2FdO2lmKHkueGF4aXM9PT1wLnhheGlzLl9pZCYmeS55YXhpcz09PXAueWF4aXMuX2lkJiYhMT09PXkuY2xpcG9uYXhpcyl7cC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX19dmFyIHgsYj1mLmxpc3QodSxudWxsLCEwKTtmb3IoaT0wO2k8Yi5sZW5ndGg7aSsrKXt2YXIgXz1udWxsOyh4PWJbaV0pLm92ZXJsYXlpbmcmJihfPWYuZ2V0RnJvbUlkKHUseC5vdmVybGF5aW5nKSkmJl8ub3ZlcmxheWluZyYmKHgub3ZlcmxheWluZz0hMSxfPW51bGwpLHguX21haW5BeGlzPV98fHgsXyYmKHguZG9tYWluPV8uZG9tYWluLnNsaWNlKCkpLHguX2FuY2hvckF4aXM9ImZyZWUiPT09eC5hbmNob3I/bnVsbDpmLmdldEZyb21JZCh1LHguYW5jaG9yKX1mb3IoaT0wO2k8Yi5sZW5ndGg7aSsrKSh4PWJbaV0pLl9jb3VudGVyQXhlcy5zb3J0KGYuaWRTb3J0KSx4Ll9zdWJwbG90c1dpdGguc29ydChsLnN1YnBsb3RTb3J0KSx4Ll9tYWluU3VicGxvdD13KHgsZSl9LHYuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycz1mdW5jdGlvbih0KXt2YXIgZSxyLG47Zm9yKHI9W10sKGU9dC5fbW9kdWxlLl9jb2xvckF0dHJzKXx8KHQuX21vZHVsZS5fY29sb3JBdHRycz1lPVtdLG8uY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsZnVuY3Rpb24odCxuLGksYSl7clthXT1uLHIubGVuZ3RoPWErMSwiY29sb3IiPT09dC52YWxUeXBlJiZ2b2lkIDA9PT10LmRmbHQmJmUucHVzaChyLmpvaW4oIi4iKSl9KSksbj0wO248ZS5sZW5ndGg7bisrKXtsLm5lc3RlZFByb3BlcnR5KHQsIl9pbnB1dC4iK2Vbbl0pLmdldCgpfHxsLm5lc3RlZFByb3BlcnR5KHQsZVtuXSkuc2V0KG51bGwpfX0sdi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksbyxjLHU9bi5fbW9kdWxlcyxmPW4uX3Zpc2libGVNb2R1bGVzLGg9bi5fYmFzZVBsb3RNb2R1bGVzLHA9MCxnPTA7ZnVuY3Rpb24gbSh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJihsLnB1c2hVbmlxdWUodSxyKSwhMD09PXQudmlzaWJsZSYmbC5wdXNoVW5pcXVlKGYsciksbC5wdXNoVW5pcXVlKGgsdC5fbW9kdWxlLmJhc2VQbG90TW9kdWxlKSxwKyssITEhPT10Ll9pbnB1dC52aXNpYmxlJiZnKyspfW4uX3RyYW5zZm9ybU1vZHVsZXM9W107dmFyIHk9e30seD1bXSxiPShyLnRlbXBsYXRlfHx7fSkuZGF0YXx8e30sXz1zLnRyYWNlVGVtcGxhdGVyKGIpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKGM9dFtpXSwobz1fLm5ld1RyYWNlKGMpKS51aWQ9bi5fdHJhY2VVaWRzW2ldLHYuc3VwcGx5VHJhY2VEZWZhdWx0cyhjLG8sZyxuLGkpLG8uaW5kZXg9aSxvLl9pbnB1dD1jLG8uX2V4cGFuZGVkSW5kZXg9cCxvLnRyYW5zZm9ybXMmJm8udHJhbnNmb3Jtcy5sZW5ndGgpZm9yKHZhciB3PSExIT09Yy52aXNpYmxlJiYhMT09PW8udmlzaWJsZSxrPVQobyxlLHIsbiksQT0wO0E8ay5sZW5ndGg7QSsrKXt2YXIgTT1rW0FdLFM9e190ZW1wbGF0ZTpvLl90ZW1wbGF0ZSx0eXBlOm8udHlwZSx1aWQ6by51aWQrQX07dyYmITE9PT1NLnZpc2libGUmJmRlbGV0ZSBNLnZpc2libGUsdi5zdXBwbHlUcmFjZURlZmF1bHRzKE0sUyxwLG4saSksZChTLE0pLFMuaW5kZXg9aSxTLl9pbnB1dD1jLFMuX2Z1bGxJbnB1dD1vLFMuX2V4cGFuZGVkSW5kZXg9cCxTLl9leHBhbmRlZElucHV0PU0sbShTKX1lbHNlIG8uX2Z1bGxJbnB1dD1vLG8uX2V4cGFuZGVkSW5wdXQ9byxtKG8pO2EudHJhY2VJcyhvLCJjYXJwZXRBeGlzIikmJih5W28uY2FycGV0XT1vKSxhLnRyYWNlSXMobywiY2FycGV0RGVwZW5kZW50IikmJngucHVzaChpKX1mb3IoaT0wO2k8eC5sZW5ndGg7aSsrKWlmKChvPWVbeFtpXV0pLnZpc2libGUpe3ZhciBFPXlbby5jYXJwZXRdO28uX2NhcnBldD1FLEUmJkUudmlzaWJsZT8oby54YXhpcz1FLnhheGlzLG8ueWF4aXM9RS55YXhpcyk6by52aXNpYmxlPSExfX0sdi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZTt0PXR8fHt9O3ZhciByPXt9O2Z1bmN0aW9uIG4oZSxuKXtyZXR1cm4gbC5jb2VyY2UodHx8e30scixoLGUsbil9aWYobigibW9kZSIpLG4oImRpcmVjdGlvbiIpLG4oImZyb21jdXJyZW50IiksQXJyYXkuaXNBcnJheSh0LmZyYW1lKSlmb3Ioci5mcmFtZT1bXSxlPTA7ZTx0LmZyYW1lLmxlbmd0aDtlKyspci5mcmFtZVtlXT12LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZVtlXXx8e30pO2Vsc2Ugci5mcmFtZT12LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZXx8e30pO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2l0aW9uKSlmb3Ioci50cmFuc2l0aW9uPVtdLGU9MDtlPHQudHJhbnNpdGlvbi5sZW5ndGg7ZSsrKXIudHJhbnNpdGlvbltlXT12LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb25bZV18fHt9KTtlbHNlIHIudHJhbnNpdGlvbj12LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb258fHt9KTtyZXR1cm4gcn0sdi5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gbC5jb2VyY2UodHx8e30sZSxoLmZyYW1lLHIsbil9cmV0dXJuIHIoImR1cmF0aW9uIikscigicmVkcmF3IiksZX0sdi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBsLmNvZXJjZSh0fHx7fSxlLGgudHJhbnNpdGlvbixyLG4pfXJldHVybiByKCJkdXJhdGlvbiIpLHIoImVhc2luZyIpLGV9LHYuc3VwcGx5RnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGwuY29lcmNlKHQsZSxwLHIsbil9cmV0dXJuIHIoImdyb3VwIikscigibmFtZSIpLHIoInRyYWNlcyIpLHIoImJhc2VmcmFtZSIpLHIoImRhdGEiKSxyKCJsYXlvdXQiKSxlfSx2LnN1cHBseVRyYWNlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxzPW4uY29sb3J3YXl8fGMuZGVmYXVsdHMsdT1zW3Ilcy5sZW5ndGhdO2Z1bmN0aW9uIGYocixuKXtyZXR1cm4gbC5jb2VyY2UodCxlLHYuYXR0cmlidXRlcyxyLG4pfXZhciBoPWYoInZpc2libGUiKTtmKCJ0eXBlIiksZigibmFtZSIsbi5fdHJhY2VXb3JkKyIgIitpKSxmKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pO3ZhciBwLGQsZyxtPXYuZ2V0TW9kdWxlKGUpO2lmKGUuX21vZHVsZT1tLG0pe3ZhciB5PW0uYmFzZVBsb3RNb2R1bGUseD15LmF0dHIsYj15LmF0dHJpYnV0ZXM7aWYoeCYmYil7dmFyIF89bi5fc3VicGxvdHMsdz0iIjtpZigiZ2wyZCIhPT15Lm5hbWV8fGgpe2lmKEFycmF5LmlzQXJyYXkoeCkpZm9yKG89MDtvPHgubGVuZ3RoO28rKyl7dmFyIGs9eFtvXSxUPWwuY29lcmNlKHQsZSxiLGspO19ba10mJmwucHVzaFVuaXF1ZShfW2tdLFQpLHcrPVR9ZWxzZSB3PWwuY29lcmNlKHQsZSxiLHgpO19beS5uYW1lXSYmbC5wdXNoVW5pcXVlKF9beS5uYW1lXSx3KX19fXJldHVybiBoJiYoZigiY3VzdG9tZGF0YSIpLGYoImlkcyIpLGEudHJhY2VJcyhlLCJzaG93TGVnZW5kIik/KGUuX2RmbHRTaG93TGVnZW5kPSEwLGYoInNob3dsZWdlbmQiKSxmKCJsZWdlbmRncm91cCIpKTplLl9kZmx0U2hvd0xlZ2VuZD0hMSxwPSJob3ZlcmxhYmVsIixkPSIiLGc9ZnVuY3Rpb24oKXthLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlEZWZhdWx0cyIpKHQsZSx1LG4pfSxtJiZwIGluIG0uYXR0cmlidXRlcyYmdm9pZCAwPT09bS5hdHRyaWJ1dGVzW3BdfHwoZyYmImZ1bmN0aW9uIj09dHlwZW9mIGc/ZygpOmYocCxkKSksbSYmKG0uc3VwcGx5RGVmYXVsdHModCxlLHUsbiksZS5ob3ZlcnRlbXBsYXRlfHxsLmNvZXJjZUhvdmVyaW5mbyh0LGUsbikpLGEudHJhY2VJcyhlLCJub09wYWNpdHkiKXx8Zigib3BhY2l0eSIpLGEudHJhY2VJcyhlLCJub3RMZWdlbmRJc29sYXRhYmxlIikmJihlLnZpc2libGU9ISFlLnZpc2libGUpLG0mJm0uc2VsZWN0UG9pbnRzJiZmKCJzZWxlY3RlZHBvaW50cyIpLHYuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHModCxlLG4pKSxlfSx2Lmhhc01ha2VzRGF0YVRyYW5zZm9ybT1rLHYuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2lmKGUuX2xlbmd0aHx8ayh0KSl7dmFyIG49ci5fZ2xvYmFsVHJhbnNmb3Jtc3x8W10saT1yLl90cmFuc2Zvcm1Nb2R1bGVzfHxbXTtpZihBcnJheS5pc0FycmF5KHQudHJhbnNmb3Jtcyl8fDAhPT1uLmxlbmd0aClmb3IodmFyIGE9dC50cmFuc2Zvcm1zfHxbXSxvPW4uY29uY2F0KGEpLHM9ZS50cmFuc2Zvcm1zPVtdLGM9MDtjPG8ubGVuZ3RoO2MrKyl7dmFyIHUsZj1vW2NdLGg9Zi50eXBlLHA9bVtoXSxkPSEoZi5fbW9kdWxlJiZmLl9tb2R1bGU9PT1wKSxnPXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBwLnRyYW5zZm9ybTtwfHxsLndhcm4oIlVucmVjb2duaXplZCB0cmFuc2Zvcm0gdHlwZSAiK2grIi4iKSxwJiZwLnN1cHBseURlZmF1bHRzJiYoZHx8Zyk/KCh1PXAuc3VwcGx5RGVmYXVsdHMoZixlLHIsdCkpLnR5cGU9aCx1Ll9tb2R1bGU9cCxsLnB1c2hVbmlxdWUoaSxwKSk6dT1sLmV4dGVuZEZsYXQoe30sZikscy5wdXNoKHUpfX19LHYuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gbC5jb2VyY2UodCxlLHYubGF5b3V0QXR0cmlidXRlcyxyLG4pfXZhciBpPXQudGVtcGxhdGU7bC5pc1BsYWluT2JqZWN0KGkpJiYoZS50ZW1wbGF0ZT1pLGUuX3RlbXBsYXRlPWkubGF5b3V0LGUuX2RhdGFUZW1wbGF0ZT1pLmRhdGEpO3ZhciBvPWwuY29lcmNlRm9udChuLCJmb250Iik7bigidGl0bGUudGV4dCIsZS5fZGZsdFRpdGxlLnBsb3QpLGwuY29lcmNlRm9udChuLCJ0aXRsZS5mb250Iix7ZmFtaWx5Om8uZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjQqby5zaXplKSxjb2xvcjpvLmNvbG9yfSksbigidGl0bGUueHJlZiIpLG4oInRpdGxlLnlyZWYiKSxuKCJ0aXRsZS54IiksbigidGl0bGUueSIpLG4oInRpdGxlLnhhbmNob3IiKSxuKCJ0aXRsZS55YW5jaG9yIiksbigidGl0bGUucGFkLnQiKSxuKCJ0aXRsZS5wYWQuciIpLG4oInRpdGxlLnBhZC5iIiksbigidGl0bGUucGFkLmwiKSxuKCJhdXRvc2l6ZSIsISh0LndpZHRoJiZ0LmhlaWdodCkpLG4oIndpZHRoIiksbigiaGVpZ2h0IiksbigibWFyZ2luLmwiKSxuKCJtYXJnaW4uciIpLG4oIm1hcmdpbi50IiksbigibWFyZ2luLmIiKSxuKCJtYXJnaW4ucGFkIiksbigibWFyZ2luLmF1dG9leHBhbmQiKSx0LndpZHRoJiZ0LmhlaWdodCYmdi5zYW5pdGl6ZU1hcmdpbnMoZSksYS5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJzaXplRGVmYXVsdHMiKSh0LGUpLG4oInBhcGVyX2JnY29sb3IiKSxuKCJzZXBhcmF0b3JzIixyLmRlY2ltYWwrci50aG91c2FuZHMpLG4oImhpZGVzb3VyY2VzIiksbigiY29sb3J3YXkiKSxuKCJkYXRhcmV2aXNpb24iKTt2YXIgcz1uKCJ1aXJldmlzaW9uIik7bigiZWRpdHJldmlzaW9uIixzKSxuKCJzZWxlY3Rpb25yZXZpc2lvbiIscyksbigibW9kZWJhci5vcmllbnRhdGlvbiIpLG4oIm1vZGViYXIuYmdjb2xvciIsYy5hZGRPcGFjaXR5KGUucGFwZXJfYmdjb2xvciwuNSkpO3ZhciB1PWMuY29udHJhc3QoYy5yZ2IoZS5tb2RlYmFyLmJnY29sb3IpKTtuKCJtb2RlYmFyLmNvbG9yIixjLmFkZE9wYWNpdHkodSwuMykpLG4oIm1vZGViYXIuYWN0aXZlY29sb3IiLGMuYWRkT3BhY2l0eSh1LC43KSksbigibW9kZWJhci51aXJldmlzaW9uIixzKSxuKCJtZXRhIiksbC5pc1BsYWluT2JqZWN0KHQudHJhbnNpdGlvbikmJihuKCJ0cmFuc2l0aW9uLmR1cmF0aW9uIiksbigidHJhbnNpdGlvbi5lYXNpbmciKSxuKCJ0cmFuc2l0aW9uLm9yZGVyaW5nIikpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiKSxhLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyIpKHQsZSxuKX0sdi5wbG90QXV0b1NpemU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsbz10Ll9jb250ZXh0fHx7fSxzPW8uZnJhbWVNYXJnaW5zLGM9bC5pc1Bsb3REaXYodCk7aWYoYyYmdC5lbWl0KCJwbG90bHlfYXV0b3NpemUiKSxvLmZpbGxGcmFtZSluPXdpbmRvdy5pbm5lcldpZHRoLGE9d2luZG93LmlubmVySGVpZ2h0LGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7ZWxzZXt2YXIgdT1jP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpOnt9O2lmKG49cGFyc2VGbG9hdCh1LndpZHRoKXx8cGFyc2VGbG9hdCh1Lm1heFdpZHRoKXx8ci53aWR0aCxhPXBhcnNlRmxvYXQodS5oZWlnaHQpfHxwYXJzZUZsb2F0KHUubWF4SGVpZ2h0KXx8ci5oZWlnaHQsaShzKSYmcz4wKXt2YXIgZj0xLTIqcztuPU1hdGgucm91bmQoZipuKSxhPU1hdGgucm91bmQoZiphKX19dmFyIGg9di5sYXlvdXRBdHRyaWJ1dGVzLndpZHRoLm1pbixwPXYubGF5b3V0QXR0cmlidXRlcy5oZWlnaHQubWluO248aCYmKG49aCksYTxwJiYoYT1wKTt2YXIgZD0hZS53aWR0aCYmTWF0aC5hYnMoci53aWR0aC1uKT4xLGc9IWUuaGVpZ2h0JiZNYXRoLmFicyhyLmhlaWdodC1hKT4xOyhnfHxkKSYmKGQmJihyLndpZHRoPW4pLGcmJihyLmhlaWdodD1hKSksdC5faW5pdGlhbEF1dG9TaXplfHwodC5faW5pdGlhbEF1dG9TaXplPXt3aWR0aDpuLGhlaWdodDphfSksdi5zYW5pdGl6ZU1hcmdpbnMocil9LHYuc3VwcGx5TGF5b3V0TW9kdWxlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksbyxzLGM9YS5jb21wb25lbnRzUmVnaXN0cnksdT1lLl9iYXNlUGxvdE1vZHVsZXMsZj1hLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuO2ZvcihpIGluIGMpKHM9Y1tpXSkuaW5jbHVkZUJhc2VQbG90JiZzLmluY2x1ZGVCYXNlUGxvdCh0LGUpO2Zvcih2YXIgaCBpbiB1Lmxlbmd0aHx8dS5wdXNoKGYpLGUuX2hhcygiY2FydGVzaWFuIikmJihhLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsImNvbnRlbnREZWZhdWx0cyIpKHQsZSksZi5maW5hbGl6ZVN1YnBsb3RzKHQsZSkpLGUuX3N1YnBsb3RzKWUuX3N1YnBsb3RzW2hdLnNvcnQobC5zdWJwbG90U29ydCk7Zm9yKG89MDtvPHUubGVuZ3RoO28rKykocz11W29dKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIHA9ZS5fbW9kdWxlcztmb3Iobz0wO288cC5sZW5ndGg7bysrKShzPXBbb10pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgZD1lLl90cmFuc2Zvcm1Nb2R1bGVzO2ZvcihvPTA7bzxkLmxlbmd0aDtvKyspKHM9ZFtvXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIsbik7Zm9yKGkgaW4gYykocz1jW2ldKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscil9LHYucHVyZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dHx8e307dm9pZCAwIT09ZS5fZ2xjb250YWluZXImJihlLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5yZW1vdmUoKSxlLl9nbGNvbnRhaW5lci5yZW1vdmUoKSxlLl9nbGNhbnZhcz1udWxsKSx2b2lkIDAhPT1lLl9nZW9jb250YWluZXImJmUuX2dlb2NvbnRhaW5lci5yZW1vdmUoKSxlLl9tb2RlQmFyJiZlLl9tb2RlQmFyLmRlc3Ryb3koKSx0Ll90cmFuc2l0aW9uRGF0YSYmKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLmxlbmd0aD0wKSx0Ll90cmFuc2l0aW9uRGF0YS5fYW5pbWF0aW9uUmFmJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZikpLGwuY2xlYXJUaHJvdHRsZSgpLGwuY2xlYXJSZXNwb25zaXZlKHQpLGRlbGV0ZSB0LmRhdGEsZGVsZXRlIHQubGF5b3V0LGRlbGV0ZSB0Ll9mdWxsRGF0YSxkZWxldGUgdC5fZnVsbExheW91dCxkZWxldGUgdC5jYWxjZGF0YSxkZWxldGUgdC5mcmFtZXdvcmssZGVsZXRlIHQuZW1wdHksZGVsZXRlIHQuZmlkLGRlbGV0ZSB0LnVuZG9xdWV1ZSxkZWxldGUgdC51bmRvbnVtLGRlbGV0ZSB0LmF1dG9wbGF5LGRlbGV0ZSB0LmNoYW5nZWQsZGVsZXRlIHQuX3Byb21pc2VzLGRlbGV0ZSB0Ll9yZWRyYXdUaW1lcixkZWxldGUgdC5faG1sdW1jb3VudCxkZWxldGUgdC5faG1waXhjb3VudCxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgdC5fZHJhZ2dpbmcsZGVsZXRlIHQuX2RyYWdnZWQsZGVsZXRlIHQuX2hvdmVyZGF0YSxkZWxldGUgdC5fc25hcHNob3RJblByb2dyZXNzLGRlbGV0ZSB0Ll9lZGl0aW5nLGRlbGV0ZSB0Ll9yZXBsb3RQZW5kaW5nLGRlbGV0ZSB0Ll9tb3VzZURvd25UaW1lLGRlbGV0ZSB0Ll9sZWdlbmRNb3VzZURvd25UaW1lLHQucmVtb3ZlQWxsTGlzdGVuZXJzJiZ0LnJlbW92ZUFsbExpc3RlbmVycygpfSx2LnN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5fZnVsbExheW91dC5fdmlzaWJsZU1vZHVsZXMsbj1bXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdO2kuc3R5bGUmJmwucHVzaFVuaXF1ZShuLGkuc3R5bGUpfWZvcihlPTA7ZTxuLmxlbmd0aDtlKyspbltlXSh0KX0sdi5zYW5pdGl6ZU1hcmdpbnM9ZnVuY3Rpb24odCl7aWYodCYmdC5tYXJnaW4pe3ZhciBlLHI9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5tYXJnaW4sYT1yLShpLmwraS5yKSxvPW4tKGkudCtpLmIpO2E8MCYmKGU9KHItMSkvKGkubCtpLnIpLGkubD1NYXRoLmZsb29yKGUqaS5sKSxpLnI9TWF0aC5mbG9vcihlKmkucikpLG88MCYmKGU9KG4tMSkvKGkudCtpLmIpLGkudD1NYXRoLmZsb29yKGUqaS50KSxpLmI9TWF0aC5mbG9vcihlKmkuYikpfX0sdi5jbGVhckF1dG9NYXJnaW5JZHM9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkcz17fX0sdi5hbGxvd0F1dG9NYXJnaW49ZnVuY3Rpb24odCxlKXt0Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2luSWRzW2VdPTF9LHYuYXV0b01hcmdpbj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPW4uX3B1c2htYXJnaW4sYT1uLl9wdXNobWFyZ2luSWRzO2lmKCExIT09bi5tYXJnaW4uYXV0b2V4cGFuZCl7aWYocil7dmFyIG89ci5wYWQ7aWYodm9pZCAwPT09byl7dmFyIHM9bi5tYXJnaW47bz1NYXRoLm1pbigxMixzLmwscy5yLHMudCxzLmIpfXIubCtyLnI+LjUqbi53aWR0aCYmKHIubD1yLnI9MCksci5iK3IudD4uNSpuLmhlaWdodCYmKHIuYj1yLnQ9MCk7dmFyIGw9dm9pZCAwIT09ci54bD9yLnhsOnIueCxjPXZvaWQgMCE9PXIueHI/ci54cjpyLngsdT12b2lkIDAhPT1yLnl0P3IueXQ6ci55LGY9dm9pZCAwIT09ci55Yj9yLnliOnIueTtpW2VdPXtsOnt2YWw6bCxzaXplOnIubCtvfSxyOnt2YWw6YyxzaXplOnIucitvfSxiOnt2YWw6ZixzaXplOnIuYitvfSx0Ont2YWw6dSxzaXplOnIudCtvfX0sYVtlXT0xfWVsc2UgZGVsZXRlIGlbZV0sZGVsZXRlIGFbZV07bi5fcmVwbG90dGluZ3x8di5kb0F1dG9NYXJnaW4odCl9fSx2LmRvQXV0b01hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX3NpemV8fChlLl9zaXplPXt9KSxBKGUpO3ZhciByPWUuX3NpemUsbj1KU09OLnN0cmluZ2lmeShyKSxvPWUubWFyZ2luLHM9by5sLGw9by5yLGM9by50LHU9by5iLGY9ZS53aWR0aCxoPWUuaGVpZ2h0LHA9ZS5fcHVzaG1hcmdpbixkPWUuX3B1c2htYXJnaW5JZHM7aWYoITEhPT1lLm1hcmdpbi5hdXRvZXhwYW5kKXtmb3IodmFyIGcgaW4gcClkW2ddfHxkZWxldGUgcFtnXTtmb3IodmFyIHYgaW4gcC5iYXNlPXtsOnt2YWw6MCxzaXplOnN9LHI6e3ZhbDoxLHNpemU6bH0sdDp7dmFsOjEsc2l6ZTpjfSxiOnt2YWw6MCxzaXplOnV9fSxwKXt2YXIgbT1wW3ZdLmx8fHt9LHk9cFt2XS5ifHx7fSx4PW0udmFsLGI9bS5zaXplLF89eS52YWwsdz15LnNpemU7Zm9yKHZhciBrIGluIHApe2lmKGkoYikmJnBba10ucil7dmFyIFQ9cFtrXS5yLnZhbCxNPXBba10uci5zaXplO2lmKFQ+eCl7dmFyIFM9KGIqVCsoTS1mKSp4KS8oVC14KSxFPShNKigxLXgpKyhiLWYpKigxLVQpKS8oVC14KTtTPj0wJiZFPj0wJiZmLShTK0UpPjAmJlMrRT5zK2wmJihzPVMsbD1FKX19aWYoaSh3KSYmcFtrXS50KXt2YXIgQz1wW2tdLnQudmFsLEw9cFtrXS50LnNpemU7aWYoQz5fKXt2YXIgej0odypDKyhMLWgpKl8pLyhDLV8pLE89KEwqKDEtXykrKHctaCkqKDEtQykpLyhDLV8pO3o+PTAmJk8+PTAmJmgtKE8reik+MCYmeitPPnUrYyYmKHU9eixjPU8pfX19fX1pZihyLmw9TWF0aC5yb3VuZChzKSxyLnI9TWF0aC5yb3VuZChsKSxyLnQ9TWF0aC5yb3VuZChjKSxyLmI9TWF0aC5yb3VuZCh1KSxyLnA9TWF0aC5yb3VuZChvLnBhZCksci53PU1hdGgucm91bmQoZiktci5sLXIucixyLmg9TWF0aC5yb3VuZChoKS1yLnQtci5iLCFlLl9yZXBsb3R0aW5nJiYie30iIT09biYmbiE9PUpTT04uc3RyaW5naWZ5KGUuX3NpemUpKXJldHVybiJfcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCJpbiBlP2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQrKzplLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PTEsYS5jYWxsKCJwbG90Iix0KX0sdi5ncmFwaEpzb249ZnVuY3Rpb24odCxlLHIsbixpKXsoaSYmZSYmIXQuX2Z1bGxEYXRhfHxpJiYhZSYmIXQuX2Z1bGxMYXlvdXQpJiZ2LnN1cHBseURlZmF1bHRzKHQpO3ZhciBhPWk/dC5fZnVsbERhdGE6dC5kYXRhLG89aT90Ll9mdWxsTGF5b3V0OnQubGF5b3V0LHM9KHQuX3RyYW5zaXRpb25EYXRhfHx7fSkuX2ZyYW1lcztmdW5jdGlvbiBjKHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBudWxsO2lmKGwuaXNQbGFpbk9iamVjdCh0KSl7dmFyIGUsbixpPXt9O2ZvcihlIGluIHQpaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbZV0mJi0xPT09WyJfIiwiWyJdLmluZGV4T2YoZS5jaGFyQXQoMCkpKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1lLnN1YnN0cihlLmxlbmd0aC0zKSljb250aW51ZX1lbHNlIGlmKCJrZWVwc3RyZWFtIj09PXIpe2lmKCJzdHJpbmciPT10eXBlb2Yobj10W2UrInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MCYmIWwuaXNQbGFpbk9iamVjdCh0LnN0cmVhbSkpY29udGludWV9ZWxzZSBpZigia2VlcGFsbCIhPT1yJiYic3RyaW5nIj09dHlwZW9mKG49dFtlKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjApY29udGludWU7aVtlXT1jKHRbZV0pfXJldHVybiBpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGMpOmwuaXNUeXBlZEFycmF5KHQpP2wuc2ltcGxlTWFwKHQsbC5pZGVudGl0eSk6bC5pc0pTRGF0ZSh0KT9sLm1zMkRhdGVUaW1lTG9jYWwoK3QpOnR9dmFyIHU9e2RhdGE6KGF8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9Yyh0KTtyZXR1cm4gZSYmZGVsZXRlIHIuZml0LHJ9KX07cmV0dXJuIGV8fCh1LmxheW91dD1jKG8pKSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHU9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpLHMmJih1LmZyYW1lcz1jKHMpKSwib2JqZWN0Ij09PW4/dTpKU09OLnN0cmluZ2lmeSh1KX0sdi5tb2RpZnlGcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXN3aXRjaCgobj1lW3JdKS50eXBlKXtjYXNlInJlcGxhY2UiOmk9bi52YWx1ZTt2YXIgcz0oYVtuLmluZGV4XXx8e30pLm5hbWUsbD1pLm5hbWU7YVtuLmluZGV4XT1vW2xdPWksbCE9PXMmJihkZWxldGUgb1tzXSxvW2xdPWkpO2JyZWFrO2Nhc2UiaW5zZXJ0IjpvWyhpPW4udmFsdWUpLm5hbWVdPWksYS5zcGxpY2Uobi5pbmRleCwwLGkpO2JyZWFrO2Nhc2UiZGVsZXRlIjpkZWxldGUgb1soaT1hW24uaW5kZXhdKS5uYW1lXSxhLnNwbGljZShuLmluZGV4LDEpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdi5jb21wdXRlRnJhbWU9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJjb21wdXRlRnJhbWUgbXVzdCBiZSBnaXZlbiBhIHN0cmluZyBmcmFtZSBuYW1lIik7dmFyIHM9b1tlLnRvU3RyaW5nKCldO2lmKCFzKXJldHVybiExO2Zvcih2YXIgbD1bc10sYz1bcy5uYW1lXTtzLmJhc2VmcmFtZSYmKHM9b1tzLmJhc2VmcmFtZS50b1N0cmluZygpXSkmJi0xPT09Yy5pbmRleE9mKHMubmFtZSk7KWwucHVzaChzKSxjLnB1c2gocy5uYW1lKTtmb3IodmFyIHU9e307cz1sLnBvcCgpOylpZihzLmxheW91dCYmKHUubGF5b3V0PXYuZXh0ZW5kTGF5b3V0KHUubGF5b3V0LHMubGF5b3V0KSkscy5kYXRhKXtpZih1LmRhdGF8fCh1LmRhdGE9W10pLCEobj1zLnRyYWNlcykpZm9yKG49W10scj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbltyXT1yO2Zvcih1LnRyYWNlc3x8KHUudHJhY2VzPVtdKSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyludWxsIT0oaT1uW3JdKSYmKC0xPT09KGE9dS50cmFjZXMuaW5kZXhPZihpKSkmJihhPXUuZGF0YS5sZW5ndGgsdS50cmFjZXNbYV09aSksdS5kYXRhW2FdPXYuZXh0ZW5kVHJhY2UodS5kYXRhW2FdLHMuZGF0YVtyXSkpfXJldHVybiB1fSx2LnJlY29tcHV0ZUZyYW1lSGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSxyPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kmJmkubmFtZSYmKGVbaS5uYW1lXT1pKX19LHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsYyx1LGY9bC5leHRlbmREZWVwTm9BcnJheXMoe30sZXx8e30pLGg9bC5leHBhbmRPYmplY3RQYXRocyhmKSxwPXt9O2lmKHImJnIubGVuZ3RoKWZvcihhPTA7YTxyLmxlbmd0aDthKyspdm9pZCAwPT09KGk9KG49bC5uZXN0ZWRQcm9wZXJ0eShoLHJbYV0pKS5nZXQoKSk/bC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChudWxsKToobi5zZXQobnVsbCksbC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChpKSk7aWYodD1sLmV4dGVuZERlZXBOb0FycmF5cyh0fHx7fSxoKSxyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWlmKGM9bC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLmdldCgpKXtmb3IodT0ocz1sLm5lc3RlZFByb3BlcnR5KHQsclthXSkpLmdldCgpLEFycmF5LmlzQXJyYXkodSl8fCh1PVtdLHMuc2V0KHUpKSxvPTA7bzxjLmxlbmd0aDtvKyspe3ZhciBkPWNbb107dVtvXT1udWxsPT09ZD9udWxsOnYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModVtvXSxkKX1zLnNldCh1KX1yZXR1cm4gdH0sdi5kYXRhQXJyYXlDb250YWluZXJzPVsidHJhbnNmb3JtcyIsImRpbWVuc2lvbnMiXSx2LmxheW91dEFycmF5Q29udGFpbmVycz1hLmxheW91dEFycmF5Q29udGFpbmVycyx2LmV4dGVuZFRyYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLHYuZGF0YUFycmF5Q29udGFpbmVycyl9LHYuZXh0ZW5kTGF5b3V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLHYubGF5b3V0QXJyYXlDb250YWluZXJzKX0sdi50cmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz17cmVkcmF3OmkucmVkcmF3fSxzPVtdLGM9W107cmV0dXJuIG8ucHJlcGFyZUZuPWZ1bmN0aW9uKCl7Zm9yKHZhciBpPUFycmF5LmlzQXJyYXkoZSk/ZS5sZW5ndGg6MCxhPW4uc2xpY2UoMCxpKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciB1PWFbb10sZj10Ll9mdWxsRGF0YVt1XS5fbW9kdWxlO2YmJihmLmFuaW1hdGFibGUmJnMucHVzaCh1KSx0LmRhdGFbYVtvXV09di5leHRlbmRUcmFjZSh0LmRhdGFbYVtvXV0sZVtvXSkpfXZhciBoPWwuZXhwYW5kT2JqZWN0UGF0aHMobC5leHRlbmREZWVwTm9BcnJheXMoe30scikpLHA9L15beHldYXhpc1swLTldKiQvO2Zvcih2YXIgZCBpbiBoKXAudGVzdChkKSYmZGVsZXRlIGhbZF0ucmFuZ2U7di5leHRlbmRMYXlvdXQodC5sYXlvdXQsaCksZGVsZXRlIHQuY2FsY2RhdGEsdi5zdXBwbHlEZWZhdWx0cyh0KSx2LmRvQ2FsY2RhdGEodCk7dmFyIGc9bC5leHBhbmRPYmplY3RQYXRocyhyKTtpZihnKXt2YXIgbT10Ll9mdWxsTGF5b3V0Ll9wbG90cztmb3IodmFyIHkgaW4gbSl7dmFyIHgsYixfLHcsaz1tW3ldLFQ9ay54YXhpcyxBPWsueWF4aXMsTT1ULnJhbmdlLnNsaWNlKCksUz1BLnJhbmdlLnNsaWNlKCk7QXJyYXkuaXNBcnJheShnW1QuX25hbWUrIi5yYW5nZSJdKT94PWdbVC5fbmFtZSsiLnJhbmdlIl0uc2xpY2UoKTpBcnJheS5pc0FycmF5KChnW1QuX25hbWVdfHx7fSkucmFuZ2UpJiYoeD1nW1QuX25hbWVdLnJhbmdlLnNsaWNlKCkpLEFycmF5LmlzQXJyYXkoZ1tBLl9uYW1lKyIucmFuZ2UiXSk/Yj1nW0EuX25hbWUrIi5yYW5nZSJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgoZ1tBLl9uYW1lXXx8e30pLnJhbmdlKSYmKGI9Z1tBLl9uYW1lXS5yYW5nZS5zbGljZSgpKSxNJiZ4JiYoTVswXSE9PXhbMF18fE1bMV0hPT14WzFdKSYmKF89e3hyMDpNLHhyMTp4fSksUyYmYiYmKFNbMF0hPT1iWzBdfHxTWzFdIT09YlsxXSkmJih3PXt5cjA6Uyx5cjE6Yn0pLChffHx3KSYmYy5wdXNoKGwuZXh0ZW5kRmxhdCh7cGxvdGluZm86a30sXyx3KSl9fXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihlKXt2YXIgbixpLG89dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHU9Yy5sZW5ndGg7aWYocilmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV0udHJhbnNpdGlvbkF4ZXMmJm9baV0udHJhbnNpdGlvbkF4ZXModCxjLGEsZSk7Zm9yKHU/KChuPWwuZXh0ZW5kRmxhdCh7fSxhKSkuZHVyYXRpb249MCxzPW51bGwpOm49YSxpPTA7aTxvLmxlbmd0aDtpKyspb1tpXS5wbG90KHQscyxuLGUpfSxNKHQsYSxvKX0sdi50cmFuc2l0aW9uRnJvbVJlYWN0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1pLnRyYW5zaXRpb24sbz17fSxzPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe3ZhciB0PWkuX3Bsb3RzO2Zvcih2YXIgYSBpbiBvLnJlZHJhdz0hMSwic29tZSI9PT1lLmFuaW0mJihvLnJlZHJhdz0hMCksInNvbWUiPT09ci5hbmltJiYoby5yZWRyYXc9ITApLHQpe3ZhciBjLHUsZj10W2FdLGg9Zi54YXhpcyxwPWYueWF4aXMsZD1uW2guX25hbWVdLnJhbmdlLnNsaWNlKCksZz1uW3AuX25hbWVdLnJhbmdlLnNsaWNlKCksdj1oLnJhbmdlLnNsaWNlKCksbT1wLnJhbmdlLnNsaWNlKCk7aC5zZXRTY2FsZSgpLHAuc2V0U2NhbGUoKSxkWzBdPT09dlswXSYmZFsxXT09PXZbMV18fChjPXt4cjA6ZCx4cjE6dn0pLGdbMF09PT1tWzBdJiZnWzFdPT09bVsxXXx8KHU9e3lyMDpnLHlyMTptfSksKGN8fHUpJiZzLnB1c2gobC5leHRlbmRGbGF0KHtwbG90aW5mbzpmfSxjLHUpKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24ocil7Zm9yKHZhciBuLGksbyxjPXQuX2Z1bGxEYXRhLHU9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGY9W10saD0wO2g8Yy5sZW5ndGg7aCsrKWYucHVzaChoKTtmdW5jdGlvbiBwKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdVtlXS50cmFuc2l0aW9uQXhlcyYmdVtlXS50cmFuc2l0aW9uQXhlcyh0LHMsbixyKX1mdW5jdGlvbiBkKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdVtlXS5wbG90KHQsbyxpLHIpfXMubGVuZ3RoJiZlLmFuaW0/InRyYWNlcyBmaXJzdCI9PT1hLm9yZGVyaW5nPyhuPWwuZXh0ZW5kRmxhdCh7fSxhLHtkdXJhdGlvbjowfSksbz1mLGk9YSxkKCksc2V0VGltZW91dChwLGEuZHVyYXRpb24pKToobj1hLG89bnVsbCxpPWwuZXh0ZW5kRmxhdCh7fSxhLHtkdXJhdGlvbjowfSkscCgpLGQoKSk6cy5sZW5ndGg/KG49YSxwKCkpOmUuYW5pbSYmKG89ZixpPWEsZCgpKX0sTSh0LGEsbyl9LHYuZG9DYWxjZGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxzLGM9Zi5saXN0KHQpLGg9dC5fZnVsbERhdGEscD10Ll9mdWxsTGF5b3V0LGQ9bmV3IEFycmF5KGgubGVuZ3RoKSxnPSh0LmNhbGNkYXRhfHxbXSkuc2xpY2UoMCk7Zm9yKHQuY2FsY2RhdGE9ZCxwLl9udW1Cb3hlcz0wLHAuX251bVZpb2xpbnM9MCxwLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sdC5faG1waXhjb3VudD0wLHQuX2htbHVtY291bnQ9MCxwLl9waWVjb2xvcm1hcD17fSxwLl9zdW5idXJzdGNvbG9ybWFwPXt9LGk9MDtpPGgubGVuZ3RoO2krKylBcnJheS5pc0FycmF5KGUpJiYtMT09PWUuaW5kZXhPZihpKSYmKGRbaV09Z1tpXSk7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKykocj1oW2ldKS5fYXJyYXlBdHRycz1vLmZpbmRBcnJheUF0dHJpYnV0ZXMociksci5fZXh0cmVtZXM9e307dmFyIHY9cC5fc3VicGxvdHMucG9sYXJ8fFtdO2ZvcihpPTA7aTx2Lmxlbmd0aDtpKyspYy5wdXNoKHBbdltpXV0ucmFkaWFsYXhpcyxwW3ZbaV1dLmFuZ3VsYXJheGlzKTtTKGMsaCk7dmFyIHk9ITE7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylpZighMD09PShyPWhbaV0pLnZpc2libGUmJnIudHJhbnNmb3Jtcyl7aWYoKG49ci5fbW9kdWxlKSYmbi5jYWxjKXt2YXIgeD1uLmNhbGModCxyKTt4WzBdJiZ4WzBdLnQmJnhbMF0udC5fc2NlbmUmJmRlbGV0ZSB4WzBdLnQuX3NjZW5lLmRpcnR5fWZvcihzPTA7czxyLnRyYW5zZm9ybXMubGVuZ3RoO3MrKyl7dmFyIGI9ci50cmFuc2Zvcm1zW3NdOyhuPW1bYi50eXBlXSkmJm4uY2FsY1RyYW5zZm9ybSYmKHIuX2hhc0NhbGNUcmFuc2Zvcm09ITAseT0hMCxuLmNhbGNUcmFuc2Zvcm0odCxyLGIpKX19ZnVuY3Rpb24gXyhlLGkpe2lmKHI9aFtlXSwhIShuPXIuX21vZHVsZSkuaXNDb250YWluZXI9PT1pKXt2YXIgYT1bXTtpZighMD09PXIudmlzaWJsZSl7ZGVsZXRlIHIuX2luZGV4VG9Qb2ludHM7dmFyIG89ci50cmFuc2Zvcm1zfHxbXTtmb3Iocz1vLmxlbmd0aC0xO3M+PTA7cy0tKWlmKG9bc10uZW5hYmxlZCl7ci5faW5kZXhUb1BvaW50cz1vW3NdLl9pbmRleFRvUG9pbnRzO2JyZWFrfW4mJm4uY2FsYyYmKGE9bi5jYWxjKHQscikpfUFycmF5LmlzQXJyYXkoYSkmJmFbMF18fChhPVt7eDp1LHk6dX1dKSxhWzBdLnR8fChhWzBdLnQ9e30pLGFbMF0udHJhY2U9cixkW2VdPWF9fWZvcih5JiZTKGMsaCksaT0wO2k8aC5sZW5ndGg7aSsrKV8oaSwhMCk7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylfKGksITEpOyFmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Ll9mdWxsTGF5b3V0LGE9aS5fdmlzaWJsZU1vZHVsZXMsbz17fTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgcz1hW3JdLGM9cy5jcm9zc1RyYWNlQ2FsYztpZihjKXt2YXIgdT1zLmJhc2VQbG90TW9kdWxlLm5hbWU7b1t1XT9sLnB1c2hVbmlxdWUob1t1XSxjKTpvW3VdPVtjXX19Zm9yKG4gaW4gbyl7dmFyIGY9b1tuXSxoPWkuX3N1YnBsb3RzW25dO2lmKEFycmF5LmlzQXJyYXkoaCkpZm9yKGU9MDtlPGgubGVuZ3RoO2UrKyl7dmFyIHA9aFtlXSxkPSJjYXJ0ZXNpYW4iPT09bj9pLl9wbG90c1twXTppW3BdO2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspZltyXSh0LGQscCl9ZWxzZSBmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWZbcl0odCl9fSh0KSxhLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJjYWxjIikodCksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsImNhbGMiKSh0KX0sdi5yZWhvdmVyPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXImJnQuX2Z1bGxMYXlvdXQuX3JlaG92ZXIoKX0sdi5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1lLnRyYWNlSGFzaCxvPXt9O2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBzPXJbaV0sYz1zWzBdLnRyYWNlO2MudmlzaWJsZSYmKG9bYy50eXBlXT1vW2MudHlwZV18fFtdLG9bYy50eXBlXS5wdXNoKHMpKX1mb3IodmFyIHUgaW4gYSlpZighb1t1XSl7dmFyIGY9YVt1XVswXTtmWzBdLnRyYWNlLnZpc2libGU9ITEsb1t1XT1bZl19Zm9yKHZhciBoIGluIG8pe3ZhciBwPW9baF07cFswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QodCxlLGwuZmlsdGVyVmlzaWJsZShwKSxuKX1lLnRyYWNlSGFzaD1vfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vbGliIjo3MDAsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3MzcsIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NTEsIi4uL3JlZ2lzdHJ5Ijo4MjksIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc0MywiLi9hdHRyaWJ1dGVzIjo3NDUsIi4vY29tbWFuZCI6NzcyLCIuL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuL2ZyYW1lX2F0dHJpYnV0ZXMiOjc3NSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODAxLGQzOjE1NCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDgxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHI6InN1YnBsb3QiLG5hbWU6InBvbGFyIixheGlzTmFtZXM6WyJhbmd1bGFyYXhpcyIsInJhZGlhbGF4aXMiXSxheGlzTmFtZTJkYXRhQXJyYXk6e2FuZ3VsYXJheGlzOiJ0aGV0YSIscmFkaWFsYXhpczoiciJ9LGxheWVyTmFtZXM6WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImFuZ3VsYXItZ3JpZCIsInJhZGlhbC1ncmlkIiwiZnJvbnRwbG90IiwiYW5ndWxhci1saW5lIiwicmFkaWFsLWxpbmUiLCJhbmd1bGFyLWF4aXMiLCJyYWRpYWwtYXhpcyJdLHJhZGlhbERyYWdCb3hTaXplOjUwLGFuZ3VsYXJEcmFnQm94U2l6ZTozMCxjb3JuZXJMZW46MjUsY29ybmVySGFsZldpZHRoOjIsTUlORFJBRzo4LE1JTlpPT006MjAsT0ZGRURHRToyMH19LHt9XSw4MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcixhPW4uZmluZEluZGV4T2ZNaW4sbz1uLmlzQW5nbGVJbnNpZGVTZWN0b3Iscz1uLmFuZ2xlRGVsdGEsbD1uLmFuZ2xlRGlzdDtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpLGEsbz1uWzBdLHM9blsxXSxsPWYoTWF0aC5zaW4oZSktTWF0aC5zaW4odCkpLGM9ZihNYXRoLmNvcyhlKS1NYXRoLmNvcyh0KSksdT1NYXRoLnRhbihyKSxoPWYoMS91KSxwPWwvYyxkPXMtcCpvO3JldHVybiBoP2wmJmM/YT11KihpPWQvKHUtcCkpOmM/KGk9cypoLGE9cyk6KGk9byxhPW8qdSk6bCYmYz8oaT0wLGE9ZCk6Yz8oaT0wLGE9cyk6aT1hPU5hTixbaSxhXX1mdW5jdGlvbiB1KHQsZSxyLGkpe3JldHVybiBuLmlzRnVsbENpcmNsZShbZSxyXSk/ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4rMSk7Zm9yKHI9MDtyPG47cisrKXt2YXIgYT1lW3JdO2lbcl09W3QqTWF0aC5jb3MoYSksdCpNYXRoLnNpbihhKV19cmV0dXJuIGlbcl09aVswXS5zbGljZSgpLGl9KHQsaSk6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIHMsdSxmPWkubGVuZ3RoLGg9W107ZnVuY3Rpb24gcChlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gYyh0LGUscixwKHQpKX1mdW5jdGlvbiBnKHQpe3JldHVybiBuLm1vZCh0LGYpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG8odCxbZSxyXSl9dmFyIG09YShpLGZ1bmN0aW9uKHQpe3JldHVybiB2KHQpP2wodCxlKToxLzB9KSx5PWQoaVttXSxpW2cobS0xKV0sZSk7Zm9yKGgucHVzaCh5KSxzPW0sdT0wO3U8ZjtzKyssdSsrKXt2YXIgeD1pW2cocyldO2lmKCF2KHgpKWJyZWFrO2gucHVzaChwKHgpKX12YXIgYj1hKGksZnVuY3Rpb24odCl7cmV0dXJuIHYodCk/bCh0LHIpOjEvMH0pLF89ZChpW2JdLGlbZyhiKzEpXSxyKTtyZXR1cm4gaC5wdXNoKF8pLGgucHVzaChbMCwwXSksaC5wdXNoKGhbMF0uc2xpY2UoKSksaH0odCxlLHIsaSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gTWF0aC5hYnModCk+MWUtMTA/dDowfWZ1bmN0aW9uIGgodCxlLHIpe2U9ZXx8MCxyPXJ8fDA7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9MDthPG47YSsrKXt2YXIgbz10W2FdO2lbYV09W2Urb1swXSxyLW9bMV1dfXJldHVybiBpfWUuZXhwb3J0cz17aXNQdEluc2lkZVBvbHlnb246ZnVuY3Rpb24odCxlLHIsbixhKXtpZighbyhlLG4pKXJldHVybiExO3ZhciBzLGw7clswXTxyWzFdPyhzPXJbMF0sbD1yWzFdKToocz1yWzFdLGw9clswXSk7dmFyIGM9aSh1KHMsblswXSxuWzFdLGEpKSxmPWkodShsLG5bMF0sblsxXSxhKSksaD1bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXTtyZXR1cm4gZi5jb250YWlucyhoKSYmIWMuY29udGFpbnMoaCl9LGZpbmRQb2x5Z29uT2Zmc2V0OmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0xLzAsYT0xLzAsbz11KHQsZSxyLG4pLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtpPU1hdGgubWluKGksbFswXSksYT1NYXRoLm1pbihhLC1sWzFdKX1yZXR1cm5baSxhXX0sZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlczpmdW5jdGlvbih0LGUpe3ZhciByPWEoZSxmdW5jdGlvbihlKXt2YXIgcj1zKGUsdCk7cmV0dXJuIHI+MD9yOjEvMH0pLGk9bi5tb2QocisxLGUubGVuZ3RoKTtyZXR1cm5bZVtyXSxlW2ldXX0sZmluZEludGVyc2VjdGlvblhZOmMsZmluZFhZYXRMZW5ndGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9LWUqcixhPWUqZSsxLG89MiooZSppLXIpLHM9aSppK3Iqci10KnQsbD1NYXRoLnNxcnQobypvLTQqYSpzKSxjPSgtbytsKS8oMiphKSx1PSgtby1sKS8oMiphKTtyZXR1cm5bW2MsZSpjK2krbl0sW3UsZSp1K2krbl1dfSxjbGFtcFRpbnk6ZixwYXRoUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIk0iK2godSh0LGUscixuKSxpLGEpLmpvaW4oIkwiKX0scGF0aFBvbHlnb25Bbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw7dDxlPyhzPXQsbD1lKToocz1lLGw9dCk7dmFyIGM9aCh1KHMscixuLGkpLGEsbyk7cmV0dXJuIk0iK2godShsLHIsbixpKSxhLG8pLnJldmVyc2UoKS5qb2luKCJMIikrIk0iK2Muam9pbigiTCIpfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9wb2x5Z29uIjo3MTJ9XSw4MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsaT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsYT10KCIuL3BvbGFyIiksbz10KCIuL2NvbnN0YW50cyIpLHM9by5hdHRyLGw9by5uYW1lLGM9aShsKSx1PXt9O3Vbc109e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpsLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOnMsbmFtZTpsLGlkUm9vdDpsLGlkUmVnZXg6YyxhdHRyUmVnZXg6YyxhdHRyaWJ1dGVzOnUsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzW2xdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPW4ocixsLHMpLHU9ZVtzXS5fc3VicGxvdDt1fHwodT1hKHQscyksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tsXXx8W10sYT1uLl9oYXMmJm4uX2hhcygiZ2wiKSxvPWUuX2hhcyYmZS5faGFzKCJnbCIpLHM9YSYmIW8sYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdLGY9blt1XS5fc3VicGxvdDtpZighZVt1XSYmZilmb3IodmFyIGggaW4gZi5mcmFtZXdvcmsucmVtb3ZlKCksZi5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl0ucmVtb3ZlKCksZi5jbGlwUGF0aHMpZi5jbGlwUGF0aHNbaF0ucmVtb3ZlKCk7cyYmZi5fc2NlbmUmJihmLl9zY2VuZS5kZXN0cm95KCksZi5fc2NlbmU9bnVsbCl9fSx0b1NWRzp0KCIuLi9jYXJ0ZXNpYW4iKS50b1NWR319LHsiLi4vLi4vbGliIjo3MDAsIi4uL2NhcnRlc2lhbiI6NzU5LCIuLi9nZXRfZGF0YSI6Nzg0LCIuL2NvbnN0YW50cyI6ODExLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MTQsIi4vbGF5b3V0X2RlZmF1bHRzIjo4MTUsIi4vcG9sYXIiOjgyMn1dLDgxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1zKHtjb2xvcjppLmNvbG9yLHNob3dsaW5lOm8oe30saS5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjppLmxpbmVjb2xvcixsaW5ld2lkdGg6aS5saW5ld2lkdGgsc2hvd2dyaWQ6byh7fSxpLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOmkuZ3JpZGNvbG9yLGdyaWR3aWR0aDppLmdyaWR3aWR0aH0sInBsb3QiLCJmcm9tLXJvb3QiKSxjPXMoe3RpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyx0aWNrbGVuOmkudGlja2xlbix0aWNrd2lkdGg6aS50aWNrd2lkdGgsdGlja2NvbG9yOmkudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmkuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6aS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDppLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3dleHBvbmVudDppLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDppLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmkuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6aS50aWNrZm9udCx0aWNrYW5nbGU6aS50aWNrYW5nbGUsdGlja2Zvcm1hdDppLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmkudGlja2Zvcm1hdHN0b3BzLGxheWVyOmkubGF5ZXJ9LCJwbG90IiwiZnJvbS1yb290IiksdT17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6byh7fSxpLnR5cGUse3ZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXX0pLGF1dG9yYW5nZTpvKHt9LGkuYXV0b3JhbmdlLHtlZGl0VHlwZToicGxvdCJ9KSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvemVybyIsIm5vbm5lZ2F0aXZlIiwibm9ybWFsIl0sZGZsdDoidG96ZXJvIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOm8oe30saS5yYW5nZSx7aXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToicGxvdCJ9KSxjYXRlZ29yeW9yZGVyOmkuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmkuY2F0ZWdvcnlhcnJheSxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNsb2Nrd2lzZSIsZWRpdFR5cGU6InBsb3QifSx0aXRsZTpzKGkudGl0bGUsInBsb3QiLCJmcm9tLXJvb3QiKSxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX07dS50aXRsZS50ZXh0LmRmbHQ9IiIsbyh1LGwsYyk7dmFyIGY9e3Zpc2libGU6byh7fSxpLnZpc2libGUse2RmbHQ6ITB9KSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyIsX25vVGVtcGxhdGluZzohMH0sY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGhldGF1bml0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYW5zIiwiZGVncmVlcyJdLGRmbHQ6ImRlZ3JlZXMiLGVkaXRUeXBlOiJjYWxjIn0scGVyaW9kOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb3VudGVyY2xvY2t3aXNlIiwiY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifTtvKGYsbCxjKSxlLmV4cG9ydHM9e2RvbWFpbjphKHtuYW1lOiJwb2xhciIsZWRpdFR5cGU6InBsb3QifSksc2VjdG9yOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9XSxkZmx0OlswLDM2MF0sZWRpdFR5cGU6InBsb3QifSxob2xlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCIsZGZsdDpuLmJhY2tncm91bmR9LHJhZGlhbGF4aXM6dSxhbmd1bGFyYXhpczpmLGdyaWRzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY3VsYXIiLCJsaW5lYXIiXSxkZmx0OiJjaXJjdWxhciIsZWRpdFR5cGU6InBsb3QifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU3NiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NjAsIi4uL2RvbWFpbiI6NzczfV0sODE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksYz10KCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGY9dCgiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksaD10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIikscD10KCIuLi9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpLGQ9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGc9dCgiLi9zZXRfY29udmVydCIpLHY9dCgiLi9jb25zdGFudHMiKSxtPXYuYXhpc05hbWVzO2Z1bmN0aW9uIHkodCxlLHIsbyl7dmFyIHA9cigiYmdjb2xvciIpO28uYmdDb2xvcj1pLmNvbWJpbmUocCxvLnBhcGVyX2JnY29sb3IpO3ZhciB5PXIoInNlY3RvciIpO3IoImhvbGUiKTt2YXIgYixfPXMoby5mdWxsRGF0YSx2Lm5hbWUsby5pZCksdz1vLmxheW91dE91dDtmdW5jdGlvbiBrKHQsZSl7cmV0dXJuIHIoYisiLiIrdCxlKX1mb3IodmFyIFQ9MDtUPG0ubGVuZ3RoO1QrKyl7Yj1tW1RdLG4uaXNQbGFpbk9iamVjdCh0W2JdKXx8KHRbYl09e30pO3ZhciBBPXRbYl0sTT1hLm5ld0NvbnRhaW5lcihlLGIpO00uX2lkPU0uX25hbWU9YixNLl9hdHRyPW8uaWQrIi4iK2IsTS5fdHJhY2VJbmRpY2VzPV8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9leHBhbmRlZEluZGV4fSk7dmFyIFM9di5heGlzTmFtZTJkYXRhQXJyYXlbYl0sRT14KEEsTSxrLF8sUyk7ZihBLE0sayx7YXhEYXRhOl8sZGF0YUF0dHI6U30pO3ZhciBDLEwsej1rKCJ2aXNpYmxlIik7c3dpdGNoKGcoTSxlLHcpLGsoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbikseiYmKEw9KEM9aygiY29sb3IiKSk9PT1BLmNvbG9yP0M6by5mb250LmNvbG9yKSxNLl9tPTEsYil7Y2FzZSJyYWRpYWxheGlzIjp2YXIgTz1rKCJhdXRvcmFuZ2UiLCFNLmlzVmFsaWRSYW5nZShBLnJhbmdlKSk7QS5hdXRvcmFuZ2U9TywhT3x8ImxpbmVhciIhPT1FJiYiLSIhPT1FfHxrKCJyYW5nZW1vZGUiKSwicmV2ZXJzZWQiPT09TyYmKE0uX209LTEpLGsoInJhbmdlIiksTS5jbGVhblJhbmdlKCJyYW5nZSIse2RmbHRSYW5nZTpbMCwxXX0pLHomJihrKCJzaWRlIiksaygiYW5nbGUiLHlbMF0pLGsoInRpdGxlLnRleHQiKSxuLmNvZXJjZUZvbnQoaywidGl0bGUuZm9udCIse2ZhbWlseTpvLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqby5mb250LnNpemUpLGNvbG9yOkx9KSk7YnJlYWs7Y2FzZSJhbmd1bGFyYXhpcyI6aWYoImRhdGUiPT09RSl7bi5sb2coIlBvbGFyIHBsb3RzIGRvIG5vdCBzdXBwb3J0IGRhdGUgYW5ndWxhciBheGVzIHlldC4iKTtmb3IodmFyIEk9MDtJPF8ubGVuZ3RoO0krKylfW0ldLnZpc2libGU9ITE7RT1BLnR5cGU9TS50eXBlPSJsaW5lYXIifWsoImxpbmVhciI9PT1FPyJ0aGV0YXVuaXQiOiJwZXJpb2QiKTt2YXIgRD1rKCJkaXJlY3Rpb24iKTtrKCJyb3RhdGlvbiIse2NvdW50ZXJjbG9ja3dpc2U6MCxjbG9ja3dpc2U6OTB9W0RdKX1pZih6KWwoQSxNLGssTS50eXBlKSx1KEEsTSxrLE0udHlwZSx7dGlja1N1ZmZpeERmbHQ6ImRlZ3JlZXMiPT09TS50aGV0YXVuaXQ/Ilx4YjAiOnZvaWQgMH0pLGMoQSxNLGsse291dGVyVGlja3M6ITB9KSxrKCJzaG93dGlja2xhYmVscyIpJiYobi5jb2VyY2VGb250KGssInRpY2tmb250Iix7ZmFtaWx5Om8uZm9udC5mYW1pbHksc2l6ZTpvLmZvbnQuc2l6ZSxjb2xvcjpMfSksaygidGlja2FuZ2xlIiksaygidGlja2Zvcm1hdCIpKSxoKEEsTSxrLHtkZmx0Q29sb3I6QyxiZ0NvbG9yOm8uYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6ZFtiXX0pLGsoImxheWVyIik7ImNhdGVnb3J5IiE9PUUmJmsoImhvdmVyZm9ybWF0IiksTS5faW5wdXQ9QX0iY2F0ZWdvcnkiPT09ZS5hbmd1bGFyYXhpcy50eXBlJiZyKCJncmlkc2hhcGUiKX1mdW5jdGlvbiB4KHQsZSxyLG4saSl7aWYoIi0iPT09cigidHlwZSIpKXtmb3IodmFyIGEsbz0wO288bi5sZW5ndGg7bysrKWlmKG5bb10udmlzaWJsZSl7YT1uW29dO2JyZWFrfWEmJmFbaV0mJihlLnR5cGU9cChhW2ldLCJncmVnb3JpYW4iKSksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjp0LnR5cGU9ZS50eXBlfXJldHVybiBlLnR5cGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOnYubmFtZSxhdHRyaWJ1dGVzOmQsaGFuZGxlRGVmYXVsdHM6eSxmb250OmUuZm9udCxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixmdWxsRGF0YTpyLGxheW91dE91dDplfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiOjc0OSwiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo3NTIsIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiOjc2MiwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc2NywiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6NzY4LCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6NzY5LCIuLi9nZXRfZGF0YSI6Nzg0LCIuLi9zdWJwbG90X2RlZmF1bHRzIjo4MjQsIi4vY29uc3RhbnRzIjo4MTEsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxNCwiLi9zZXRfY29udmVydCI6ODIzfV0sODE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPW4ubWFya2VyLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7WyJBcmVhIHRyYWNlcyBhcmUgZGVwcmVjYXRlZCEiLCJQbGVhc2Ugc3dpdGNoIHRvIHRoZSAqYmFycG9sYXIqIHRyYWNlIHR5cGUuIl0uam9pbigiICIpO2UuZXhwb3J0cz17cjphKHt9LG4ucix7fSksdDphKHt9LG4udCx7fSksbWFya2VyOntjb2xvcjphKHt9LGkuY29sb3Ise30pLHNpemU6YSh7fSxpLnNpemUse30pLHN5bWJvbDphKHt9LGkuc3ltYm9sLHt9KSxvcGFjaXR5OmEoe30saS5vcGFjaXR5LHt9KSxlZGl0VHlwZToiY2FsYyJ9fX0seyIuLi8uLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTF9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPVsiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCEiLCJQbGVhc2Ugc3dpdGNoIHRvICpwb2xhciogc3VicGxvdHMuIl0uam9pbigiICIpLHM9aSh7fSxuLmRvbWFpbix7fSk7ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBpKHt9LGUse3Nob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4ifSx0aWNrb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdfSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowfSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIn0sZW5kcGFkZGluZzp7dmFsVHlwZToibnVtYmVyIixkZXNjcmlwdGlvbjpvfSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn19KX1lLmV4cG9ydHM9YSh7cmFkaWFsYXhpczpsKDAse3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LGRvbWFpbjpzLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJudW1iZXIifX0pLGFuZ3VsYXJheGlzOmwoMCx7cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LHt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MzYwfV19LGRvbWFpbjpzfSksbGF5b3V0OntkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNsb2Nrd2lzZSIsImNvdW50ZXJjbG9ja3dpc2UiXX0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImFuZ2xlIn19fSwicGxvdCIsIm5lc3RlZCIpfSx7Ii4uLy4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2MH1dLDgxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsoZS5leHBvcnRzPXQoIi4vbWljcm9wb2xhciIpKS5tYW5hZ2VyPXQoIi4vbWljcm9wb2xhcl9tYW5hZ2VyIil9LHsiLi9taWNyb3BvbGFyIjo4MTksIi4vbWljcm9wb2xhcl9tYW5hZ2VyIjo4MjB9XSw4MTk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vLi4vbGliIikuZXh0ZW5kRGVlcEFsbCxhPXQoIi4uLy4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5NSURfU0hJRlQsbz1lLmV4cG9ydHM9e3ZlcnNpb246IjAuMi4yIn07by5BeGlzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLHMsbD17ZGF0YTpbXSxsYXlvdXQ6e319LGM9e30sdT17fSxmPW4uZGlzcGF0Y2goImhvdmVyIiksaD17fTtyZXR1cm4gaC5yZW5kZXI9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKGMpe2U9Y3x8ZTt2YXIgZj1sLmRhdGEsaD1sLmxheW91dDsoInN0cmluZyI9PXR5cGVvZiBlfHxlLm5vZGVOYW1lKSYmKGU9bi5zZWxlY3QoZSkpLGUuZGF0dW0oZikuZWFjaChmdW5jdGlvbihlLGwpe3ZhciBjPWUuc2xpY2UoKTt1PXtkYXRhOm8udXRpbC5jbG9uZUpzb24oYyksbGF5b3V0Om8udXRpbC5jbG9uZUpzb24oaCl9O3ZhciBmPTA7Yy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5jb2xvcnx8KHQuY29sb3I9aC5kZWZhdWx0Q29sb3JSYW5nZVtmXSxmPShmKzEpJWguZGVmYXVsdENvbG9yUmFuZ2UubGVuZ3RoKSx0LnN0cm9rZUNvbG9yfHwodC5zdHJva2VDb2xvcj0iTGluZVBsb3QiPT09dC5nZW9tZXRyeT90LmNvbG9yOm4ucmdiKHQuY29sb3IpLmRhcmtlcigpLnRvU3RyaW5nKCkpLHUuZGF0YVtlXS5jb2xvcj10LmNvbG9yLHUuZGF0YVtlXS5zdHJva2VDb2xvcj10LnN0cm9rZUNvbG9yLHUuZGF0YVtlXS5zdHJva2VEYXNoPXQuc3Ryb2tlRGFzaCx1LmRhdGFbZV0uc3Ryb2tlU2l6ZT10LnN0cm9rZVNpemV9KTt2YXIgcD1jLmZpbHRlcihmdW5jdGlvbih0LGUpe3ZhciByPXQudmlzaWJsZTtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHJ8fCEwPT09cn0pLGQ9ITEsZz1wLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBkPWR8fCJ1bmRlZmluZWQiIT10eXBlb2YgdC5ncm91cElkLHR9KTtpZihkKXt2YXIgdj1uLm5lc3QoKS5rZXkoZnVuY3Rpb24odCxlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHQuZ3JvdXBJZD90Lmdyb3VwSWQ6InVuc3RhY2tlZCJ9KS5lbnRyaWVzKGcpLG09W10seT12Lm1hcChmdW5jdGlvbih0LGUpe2lmKCJ1bnN0YWNrZWQiPT09dC5rZXkpcmV0dXJuIHQudmFsdWVzO3ZhciByPXQudmFsdWVzWzBdLnIubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDB9KTtyZXR1cm4gdC52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbih0LGUsbil7dC55U3RhY2s9W3JdLG0ucHVzaChyKSxyPW8udXRpbC5zdW1BcnJheXModC5yLHIpfSksdC52YWx1ZXN9KTtwPW4ubWVyZ2UoeSl9cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC50PUFycmF5LmlzQXJyYXkodC50WzBdKT90LnQ6W3QudF0sdC5yPUFycmF5LmlzQXJyYXkodC5yWzBdKT90LnI6W3Qucl19KTt2YXIgeD1NYXRoLm1pbihoLndpZHRoLWgubWFyZ2luLmxlZnQtaC5tYXJnaW4ucmlnaHQsaC5oZWlnaHQtaC5tYXJnaW4udG9wLWgubWFyZ2luLmJvdHRvbSkvMjt4PU1hdGgubWF4KDEwLHgpO3ZhciBiLF89W2gubWFyZ2luLmxlZnQreCxoLm1hcmdpbi50b3AreF07Yj1kP1swLG4ubWF4KG8udXRpbC5zdW1BcnJheXMoby51dGlsLmFycmF5TGFzdChwKS5yWzBdLG8udXRpbC5hcnJheUxhc3QobSkpKV06bi5leHRlbnQoby51dGlsLmZsYXR0ZW5BcnJheShwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnJ9KSkpLGgucmFkaWFsQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmKGJbMF09MCkscj1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihoLnJhZGlhbEF4aXMuZG9tYWluIT1vLkRBVEFFWFRFTlQmJmgucmFkaWFsQXhpcy5kb21haW4/aC5yYWRpYWxBeGlzLmRvbWFpbjpiKS5yYW5nZShbMCx4XSksdS5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49ci5kb21haW4oKTt2YXIgdyxrPW8udXRpbC5mbGF0dGVuQXJyYXkocC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50fSkpLFQ9InN0cmluZyI9PXR5cGVvZiBrWzBdO1QmJihrPW8udXRpbC5kZWR1cGxpY2F0ZShrKSx3PWsuc2xpY2UoKSxrPW4ucmFuZ2Uoay5sZW5ndGgpLHA9cC5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj10O3JldHVybiB0LnQ9W2tdLGQmJihyLnlTdGFjaz10LnlTdGFjaykscn0pKTt2YXIgQT1wLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiJMaW5lUGxvdCI9PT10Lmdlb21ldHJ5fHwiRG90UGxvdCI9PT10Lmdlb21ldHJ5fSkubGVuZ3RoPT09cC5sZW5ndGgsTT1udWxsPT09aC5uZWVkc0VuZFNwYWNpbmc/VHx8IUE6aC5uZWVkc0VuZFNwYWNpbmcsUz1oLmFuZ3VsYXJBeGlzLmRvbWFpbiYmaC5hbmd1bGFyQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmIVQmJmguYW5ndWxhckF4aXMuZG9tYWluWzBdPj0wP2guYW5ndWxhckF4aXMuZG9tYWluOm4uZXh0ZW50KGspLEU9TWF0aC5hYnMoa1sxXS1rWzBdKTtBJiYhVCYmKEU9MCk7dmFyIEM9Uy5zbGljZSgpO00mJlQmJihDWzFdKz1FKTt2YXIgTD1oLmFuZ3VsYXJBeGlzLnRpY2tzQ291bnR8fDQ7TD44JiYoTD1MLyhMLzgpK0wlOCksaC5hbmd1bGFyQXhpcy50aWNrc1N0ZXAmJihMPShDWzFdLUNbMF0pL0wpO3ZhciB6PWguYW5ndWxhckF4aXMudGlja3NTdGVwfHwoQ1sxXS1DWzBdKS8oTCooaC5taW5vclRpY2tzKzEpKTt3JiYoej1NYXRoLm1heChNYXRoLnJvdW5kKHopLDEpKSxDWzJdfHwoQ1syXT16KTt2YXIgTz1uLnJhbmdlLmFwcGx5KHRoaXMsQyk7aWYoTz1PLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KHQudG9QcmVjaXNpb24oMTIpKX0pLHM9bi5zY2FsZS5saW5lYXIoKS5kb21haW4oQy5zbGljZSgwLDIpKS5yYW5nZSgiY2xvY2t3aXNlIj09PWguZGlyZWN0aW9uP1swLDM2MF06WzM2MCwwXSksdS5sYXlvdXQuYW5ndWxhckF4aXMuZG9tYWluPXMuZG9tYWluKCksdS5sYXlvdXQuYW5ndWxhckF4aXMuZW5kUGFkZGluZz1NP0U6MCwidW5kZWZpbmVkIj09dHlwZW9mKHQ9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJzdmcuY2hhcnQtcm9vdCIpKXx8dC5lbXB0eSgpKXt2YXIgST0obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKCI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgY2xhc3M9J2NoYXJ0LXJvb3QnPicgKyAnPGcgY2xhc3M9J291dGVyLWdyb3VwJz4nICsgJzxnIGNsYXNzPSdjaGFydC1ncm91cCc+JyArICc8Y2lyY2xlIGNsYXNzPSdiYWNrZ3JvdW5kLWNpcmNsZSc+PC9jaXJjbGU+JyArICc8ZyBjbGFzcz0nZ2VvbWV0cnktZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdyYWRpYWwgYXhpcy1ncm91cCc+JyArICc8Y2lyY2xlIGNsYXNzPSdvdXRzaWRlLWNpcmNsZSc+PC9jaXJjbGU+JyArICc8L2c+JyArICc8ZyBjbGFzcz0nYW5ndWxhciBheGlzLWdyb3VwJz48L2c+JyArICc8ZyBjbGFzcz0nZ3VpZGVzLWdyb3VwJz48bGluZT48L2xpbmU+PGNpcmNsZSByPScwJz48L2NpcmNsZT48L2c+JyArICc8L2c+JyArICc8ZyBjbGFzcz0nbGVnZW5kLWdyb3VwJz48L2c+JyArICc8ZyBjbGFzcz0ndG9vbHRpcHMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0aXRsZS1ncm91cCc+PHRleHQ+PC90ZXh0PjwvZz4nICsgJzwvZz4nICsgJzwvc3ZnPiIsImFwcGxpY2F0aW9uL3htbCIpLEQ9dGhpcy5hcHBlbmRDaGlsZCh0aGlzLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShJLmRvY3VtZW50RWxlbWVudCwhMCkpO3Q9bi5zZWxlY3QoRCl9dC5zZWxlY3QoIi5ndWlkZXMtZ3JvdXAiKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KSx0LnNlbGVjdCgiLmFuZ3VsYXIuYXhpcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pLHQuc2VsZWN0KCIucmFkaWFsLmF4aXMtZ3JvdXAiKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTt2YXIgUCxSPXQuc2VsZWN0KCIuY2hhcnQtZ3JvdXAiKSxGPXtmaWxsOiJub25lIixzdHJva2U6aC50aWNrQ29sb3J9LEI9eyJmb250LXNpemUiOmguZm9udC5zaXplLCJmb250LWZhbWlseSI6aC5mb250LmZhbWlseSxmaWxsOmguZm9udC5jb2xvciwidGV4dC1zaGFkb3ciOlsiLTFweCAwcHgiLCIxcHggLTFweCIsIi0xcHggMXB4IiwiMXB4IDFweCJdLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiIgIit0KyIgMCAiK2guZm9udC5vdXRsaW5lQ29sb3J9KS5qb2luKCIsIil9O2lmKGguc2hvd0xlZ2VuZCl7UD10LnNlbGVjdCgiLmxlZ2VuZC1ncm91cCIpLmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW3gsaC5tYXJnaW4udG9wXSsiKSJ9KS5zdHlsZSh7ZGlzcGxheToiYmxvY2sifSk7dmFyIE49cC5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj1vLnV0aWwuY2xvbmVKc29uKHQpO3JldHVybiByLnN5bWJvbD0iRG90UGxvdCI9PT10Lmdlb21ldHJ5P3QuZG90VHlwZXx8ImNpcmNsZSI6IkxpbmVQbG90IiE9dC5nZW9tZXRyeT8ic3F1YXJlIjoibGluZSIsci52aXNpYmxlSW5MZWdlbmQ9InVuZGVmaW5lZCI9PXR5cGVvZiB0LnZpc2libGVJbkxlZ2VuZHx8dC52aXNpYmxlSW5MZWdlbmQsci5jb2xvcj0iTGluZVBsb3QiPT09dC5nZW9tZXRyeT90LnN0cm9rZUNvbG9yOnQuY29sb3Iscn0pO28uTGVnZW5kKCkuY29uZmlnKHtkYXRhOnAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmFtZXx8IkVsZW1lbnQiK2V9KSxsZWdlbmRDb25maWc6aSh7fSxvLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCkubGVnZW5kQ29uZmlnLHtjb250YWluZXI6UCxlbGVtZW50czpOLHJldmVyc2VPcmRlcjpoLmxlZ2VuZC5yZXZlcnNlT3JkZXJ9KX0pKCk7dmFyIGo9UC5ub2RlKCkuZ2V0QkJveCgpO3g9TWF0aC5taW4oaC53aWR0aC1qLndpZHRoLWgubWFyZ2luLmxlZnQtaC5tYXJnaW4ucmlnaHQsaC5oZWlnaHQtaC5tYXJnaW4udG9wLWgubWFyZ2luLmJvdHRvbSkvMix4PU1hdGgubWF4KDEwLHgpLF89W2gubWFyZ2luLmxlZnQreCxoLm1hcmdpbi50b3AreF0sci5yYW5nZShbMCx4XSksdS5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49ci5kb21haW4oKSxQLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1tfWzBdK3gsX1sxXS14XSsiKSIpfWVsc2UgUD10LnNlbGVjdCgiLmxlZ2VuZC1ncm91cCIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pO3QuYXR0cih7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHR9KS5zdHlsZSh7b3BhY2l0eTpoLm9wYWNpdHl9KSxSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK18rIikiKS5zdHlsZSh7Y3Vyc29yOiJjcm9zc2hhaXIifSk7dmFyIFY9WyhoLndpZHRoLShoLm1hcmdpbi5sZWZ0K2gubWFyZ2luLnJpZ2h0KzIqeCsoaj9qLndpZHRoOjApKSkvMiwoaC5oZWlnaHQtKGgubWFyZ2luLnRvcCtoLm1hcmdpbi5ib3R0b20rMip4KSkvMl07aWYoVlswXT1NYXRoLm1heCgwLFZbMF0pLFZbMV09TWF0aC5tYXgoMCxWWzFdKSx0LnNlbGVjdCgiLm91dGVyLWdyb3VwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiKSIpLGgudGl0bGUmJmgudGl0bGUudGV4dCl7dmFyIFU9dC5zZWxlY3QoImcudGl0bGUtZ3JvdXAgdGV4dCIpLnN0eWxlKEIpLnRleHQoaC50aXRsZS50ZXh0KSxxPVUubm9kZSgpLmdldEJCb3goKTtVLmF0dHIoe3g6X1swXS1xLndpZHRoLzIseTpfWzFdLXgtMjB9KX12YXIgSD10LnNlbGVjdCgiLnJhZGlhbC5heGlzLWdyb3VwIik7aWYoaC5yYWRpYWxBeGlzLmdyaWRMaW5lc1Zpc2libGUpe3ZhciBHPUguc2VsZWN0QWxsKCJjaXJjbGUuZ3JpZC1jaXJjbGUiKS5kYXRhKHIudGlja3MoNSkpO0cuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoe2NsYXNzOiJncmlkLWNpcmNsZSJ9KS5zdHlsZShGKSxHLmF0dHIoInIiLHIpLEcuZXhpdCgpLnJlbW92ZSgpfUguc2VsZWN0KCJjaXJjbGUub3V0c2lkZS1jaXJjbGUiKS5hdHRyKHtyOnh9KS5zdHlsZShGKTt2YXIgWT10LnNlbGVjdCgiY2lyY2xlLmJhY2tncm91bmQtY2lyY2xlIikuYXR0cih7cjp4fSkuc3R5bGUoe2ZpbGw6aC5iYWNrZ3JvdW5kQ29sb3Isc3Ryb2tlOmguc3Ryb2tlfSk7ZnVuY3Rpb24gVyh0LGUpe3JldHVybiBzKHQpJTM2MCtoLm9yaWVudGF0aW9ufWlmKGgucmFkaWFsQXhpcy52aXNpYmxlKXt2YXIgWD1uLnN2Zy5heGlzKCkuc2NhbGUocikudGlja3MoNSkudGlja1NpemUoNSk7SC5jYWxsKFgpLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIraC5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKyIpIn0pLEguc2VsZWN0QWxsKCIuZG9tYWluIikuc3R5bGUoRiksSC5zZWxlY3RBbGwoImc+dGV4dCIpLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50ZXh0Q29udGVudCtoLnJhZGlhbEF4aXMudGlja3NTdWZmaXh9KS5zdHlsZShCKS5zdHlsZSh7InRleHQtYW5jaG9yIjoic3RhcnQifSkuYXR0cih7eDowLHk6MCxkeDowLGR5OjAsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuImhvcml6b250YWwiPT09aC5yYWRpYWxBeGlzLnRpY2tPcmllbnRhdGlvbj8icm90YXRlKCIrLWgucmFkaWFsQXhpcy5vcmllbnRhdGlvbisiKSB0cmFuc2xhdGUoIitbMCxCWyJmb250LXNpemUiXV0rIikiOiJ0cmFuc2xhdGUoIitbMCxCWyJmb250LXNpemUiXV0rIikifX0pLEguc2VsZWN0QWxsKCJnPmxpbmUiKS5zdHlsZSh7c3Ryb2tlOiJibGFjayJ9KX12YXIgWj10LnNlbGVjdCgiLmFuZ3VsYXIuYXhpcy1ncm91cCIpLnNlbGVjdEFsbCgiZy5hbmd1bGFyLXRpY2siKS5kYXRhKE8pLCQ9Wi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFuZ3VsYXItdGljayIsITApO1ouYXR0cih7dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInJvdGF0ZSgiK1codCkrIikifX0pLnN0eWxlKHtkaXNwbGF5OmguYW5ndWxhckF4aXMudmlzaWJsZT8iYmxvY2siOiJub25lIn0pLFouZXhpdCgpLnJlbW92ZSgpLCQuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiZ3JpZC1saW5lIiwhMCkuY2xhc3NlZCgibWFqb3IiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGgubWlub3JUaWNrcysxKT09MH0pLmNsYXNzZWQoIm1pbm9yIixmdW5jdGlvbih0LGUpe3JldHVybiEoZSUoaC5taW5vclRpY2tzKzEpPT0wKX0pLnN0eWxlKEYpLCQuc2VsZWN0QWxsKCIubWlub3IiKS5zdHlsZSh7c3Ryb2tlOmgubWlub3JUaWNrQ29sb3J9KSxaLnNlbGVjdCgibGluZS5ncmlkLWxpbmUiKS5hdHRyKHt4MTpoLnRpY2tMZW5ndGg/eC1oLnRpY2tMZW5ndGg6MCx4Mjp4fSkuc3R5bGUoe2Rpc3BsYXk6aC5hbmd1bGFyQXhpcy5ncmlkTGluZXNWaXNpYmxlPyJibG9jayI6Im5vbmUifSksJC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJheGlzLXRleHQiLCEwKS5zdHlsZShCKTt2YXIgSj1aLnNlbGVjdCgidGV4dC5heGlzLXRleHQiKS5hdHRyKHt4OngraC5sYWJlbE9mZnNldCxkeTphKyJlbSIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9Vyh0KSxuPXgraC5sYWJlbE9mZnNldCxpPWguYW5ndWxhckF4aXMudGlja09yaWVudGF0aW9uO3JldHVybiJob3Jpem9udGFsIj09aT8icm90YXRlKCIrLXIrIiAiK24rIiAwKSI6InJhZGlhbCI9PWk/cjwyNzAmJnI+OTA/InJvdGF0ZSgxODAgIituKyIgMCkiOm51bGw6InJvdGF0ZSgiKyhyPD0xODAmJnI+MD8tOTA6OTApKyIgIituKyIgMCkifX0pLnN0eWxlKHsidGV4dC1hbmNob3IiOiJtaWRkbGUiLGRpc3BsYXk6aC5hbmd1bGFyQXhpcy5sYWJlbHNWaXNpYmxlPyJibG9jayI6Im5vbmUifSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBlJShoLm1pbm9yVGlja3MrMSkhPTA/IiI6dz93W3RdK2guYW5ndWxhckF4aXMudGlja3NTdWZmaXg6dCtoLmFuZ3VsYXJBeGlzLnRpY2tzU3VmZml4fSkuc3R5bGUoQik7aC5hbmd1bGFyQXhpcy5yZXdyaXRlVGlja3MmJkoudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBlJShoLm1pbm9yVGlja3MrMSkhPTA/IiI6aC5hbmd1bGFyQXhpcy5yZXdyaXRlVGlja3ModGhpcy50ZXh0Q29udGVudCxlKX0pO3ZhciBLPW4ubWF4KFIuc2VsZWN0QWxsKCIuYW5ndWxhci10aWNrIHRleHQiKVswXS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRDVE0oKS5lK3QuZ2V0QkJveCgpLndpZHRofSkpO1AuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbeCtLLGgubWFyZ2luLnRvcF0rIikifSk7dmFyIFE9dC5zZWxlY3QoImcuZ2VvbWV0cnktZ3JvdXAiKS5zZWxlY3RBbGwoImciKS5zaXplKCk+MCx0dD10LnNlbGVjdCgiZy5nZW9tZXRyeS1ncm91cCIpLnNlbGVjdEFsbCgiZy5nZW9tZXRyeSIpLmRhdGEocCk7aWYodHQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKHtjbGFzczpmdW5jdGlvbih0LGUpe3JldHVybiJnZW9tZXRyeSBnZW9tZXRyeSIrZX19KSx0dC5leGl0KCkucmVtb3ZlKCkscFswXXx8USl7dmFyIGV0PVtdO3AuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPXt9O24ucmFkaWFsU2NhbGU9cixuLmFuZ3VsYXJTY2FsZT1zLG4uY29udGFpbmVyPXR0LmZpbHRlcihmdW5jdGlvbih0LHIpe3JldHVybiByPT1lfSksbi5nZW9tZXRyeT10Lmdlb21ldHJ5LG4ub3JpZW50YXRpb249aC5vcmllbnRhdGlvbixuLmRpcmVjdGlvbj1oLmRpcmVjdGlvbixuLmluZGV4PWUsZXQucHVzaCh7ZGF0YTp0LGdlb21ldHJ5Q29uZmlnOm59KX0pO3ZhciBydD1uLm5lc3QoKS5rZXkoZnVuY3Rpb24odCxlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHQuZGF0YS5ncm91cElkfHwidW5zdGFja2VkIn0pLmVudHJpZXMoZXQpLG50PVtdO3J0LmZvckVhY2goZnVuY3Rpb24odCxlKXsidW5zdGFja2VkIj09PXQua2V5P250PW50LmNvbmNhdCh0LnZhbHVlcy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bdF19KSk6bnQucHVzaCh0LnZhbHVlcyl9KSxudC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI7cj1BcnJheS5pc0FycmF5KHQpP3RbMF0uZ2VvbWV0cnlDb25maWcuZ2VvbWV0cnk6dC5nZW9tZXRyeUNvbmZpZy5nZW9tZXRyeTt2YXIgbj10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBpKG9bcl0uZGVmYXVsdENvbmZpZygpLHQpfSk7b1tyXSgpLmNvbmZpZyhuKSgpfSl9dmFyIGl0LGF0LG90PXQuc2VsZWN0KCIuZ3VpZGVzLWdyb3VwIiksc3Q9dC5zZWxlY3QoIi50b29sdGlwcy1ncm91cCIpLGx0PW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6c3QsZm9udFNpemU6OH0pKCksY3Q9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpzdCxmb250U2l6ZTo4fSkoKSx1dD1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOnN0LGhhc1RpY2s6ITB9KSgpO2lmKCFUKXt2YXIgZnQ9b3Quc2VsZWN0KCJsaW5lIikuYXR0cih7eDE6MCx5MTowLHkyOjB9KS5zdHlsZSh7c3Ryb2tlOiJncmV5IiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pO1Iub24oIm1vdXNlbW92ZS5hbmd1bGFyLWd1aWRlIixmdW5jdGlvbih0LGUpe3ZhciByPW8udXRpbC5nZXRNb3VzZVBvcyhZKS5hbmdsZTtmdC5hdHRyKHt4MjoteCx0cmFuc2Zvcm06InJvdGF0ZSgiK3IrIikifSkuc3R5bGUoe29wYWNpdHk6LjV9KTt2YXIgbj0ocisxODArMzYwLWgub3JpZW50YXRpb24pJTM2MDtpdD1zLmludmVydChuKTt2YXIgaT1vLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKHgrMTIscisxODApO2x0LnRleHQoby51dGlsLnJvdW5kKGl0KSkubW92ZShbaVswXStfWzBdLGlbMV0rX1sxXV0pfSkub24oIm1vdXNlb3V0LmFuZ3VsYXItZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7b3Quc2VsZWN0KCJsaW5lIikuc3R5bGUoe29wYWNpdHk6MH0pfSl9dmFyIGh0PW90LnNlbGVjdCgiY2lyY2xlIikuc3R5bGUoe3N0cm9rZToiZ3JleSIsZmlsbDoibm9uZSJ9KTtSLm9uKCJtb3VzZW1vdmUucmFkaWFsLWd1aWRlIixmdW5jdGlvbih0LGUpe3ZhciBuPW8udXRpbC5nZXRNb3VzZVBvcyhZKS5yYWRpdXM7aHQuYXR0cih7cjpufSkuc3R5bGUoe29wYWNpdHk6LjV9KSxhdD1yLmludmVydChvLnV0aWwuZ2V0TW91c2VQb3MoWSkucmFkaXVzKTt2YXIgaT1vLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKG4saC5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKTtjdC50ZXh0KG8udXRpbC5yb3VuZChhdCkpLm1vdmUoW2lbMF0rX1swXSxpWzFdK19bMV1dKX0pLm9uKCJtb3VzZW91dC5yYWRpYWwtZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7aHQuc3R5bGUoe29wYWNpdHk6MH0pLHV0LmhpZGUoKSxsdC5oaWRlKCksY3QuaGlkZSgpfSksdC5zZWxlY3RBbGwoIi5nZW9tZXRyeS1ncm91cCAubWFyayIpLm9uKCJtb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSxyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXRoaXMuc3R5bGUuZmlsbCxzPSJibGFjayIsbD10aGlzLnN0eWxlLm9wYWNpdHl8fDE7aWYoaS5hdHRyKHsiZGF0YS1vcGFjaXR5IjpsfSksYSYmIm5vbmUiIT09YSl7aS5hdHRyKHsiZGF0YS1maWxsIjphfSkscz1uLmhzbChhKS5kYXJrZXIoKS50b1N0cmluZygpLGkuc3R5bGUoe2ZpbGw6cyxvcGFjaXR5OjF9KTt2YXIgYz17dDpvLnV0aWwucm91bmQoZVswXSkscjpvLnV0aWwucm91bmQoZVsxXSl9O1QmJihjLnQ9d1tlWzBdXSk7dmFyIHU9InQ6ICIrYy50KyIsIHI6ICIrYy5yLGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHA9W2YubGVmdCtmLndpZHRoLzItVlswXS1oLmxlZnQsZi50b3ArZi5oZWlnaHQvMi1WWzFdLWgudG9wXTt1dC5jb25maWcoe2NvbG9yOnN9KS50ZXh0KHUpLHV0Lm1vdmUocCl9ZWxzZSBhPXRoaXMuc3R5bGUuc3Ryb2tlfHwiYmxhY2siLGkuYXR0cih7ImRhdGEtc3Ryb2tlIjphfSkscz1uLmhzbChhKS5kYXJrZXIoKS50b1N0cmluZygpLGkuc3R5bGUoe3N0cm9rZTpzLG9wYWNpdHk6MX0pfSkub24oIm1vdXNlbW92ZS50b29sdGlwIixmdW5jdGlvbih0LGUpe2lmKDAhPW4uZXZlbnQud2hpY2gpcmV0dXJuITE7bi5zZWxlY3QodGhpcykuYXR0cigiZGF0YS1maWxsIikmJnV0LnNob3coKX0pLm9uKCJtb3VzZW91dC50b29sdGlwIixmdW5jdGlvbih0LGUpe3V0LmhpZGUoKTt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXIuYXR0cigiZGF0YS1maWxsIik7aT9yLnN0eWxlKHtmaWxsOmksb3BhY2l0eTpyLmF0dHIoImRhdGEtb3BhY2l0eSIpfSk6ci5zdHlsZSh7c3Ryb2tlOnIuYXR0cigiZGF0YS1zdHJva2UiKSxvcGFjaXR5OnIuYXR0cigiZGF0YS1vcGFjaXR5Iil9KX0pfSl9KGMpLHRoaXN9LGguY29uZmlnPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBsO3ZhciBlPW8udXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIGUuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7bC5kYXRhW2VdfHwobC5kYXRhW2VdPXt9KSxpKGwuZGF0YVtlXSxvLkF4aXMuZGVmYXVsdENvbmZpZygpLmRhdGFbMF0pLGkobC5kYXRhW2VdLHQpfSksaShsLmxheW91dCxvLkF4aXMuZGVmYXVsdENvbmZpZygpLmxheW91dCksaShsLmxheW91dCxlLmxheW91dCksdGhpc30saC5nZXRMaXZlQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LGguZ2V0aW5wdXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gY30saC5yYWRpYWxTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gcn0saC5hbmd1bGFyU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHN9LGguc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucmViaW5kKGgsZiwib24iKSxofSxvLkF4aXMuZGVmYXVsdENvbmZpZz1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOlt7dDpbMSwyLDMsNF0scjpbMTAsMTEsMTIsMTNdLG5hbWU6IkxpbmUxIixnZW9tZXRyeToiTGluZVBsb3QiLGNvbG9yOm51bGwsc3Ryb2tlRGFzaDoic29saWQiLHN0cm9rZUNvbG9yOm51bGwsc3Ryb2tlU2l6ZToiMSIsdmlzaWJsZUluTGVnZW5kOiEwLG9wYWNpdHk6MX1dLGxheW91dDp7ZGVmYXVsdENvbG9yUmFuZ2U6bi5zY2FsZS5jYXRlZ29yeTEwKCkucmFuZ2UoKSx0aXRsZTpudWxsLGhlaWdodDo0NTAsd2lkdGg6NTAwLG1hcmdpbjp7dG9wOjQwLHJpZ2h0OjQwLGJvdHRvbTo0MCxsZWZ0OjQwfSxmb250OntzaXplOjEyLGNvbG9yOiJncmF5IixvdXRsaW5lQ29sb3I6IndoaXRlIixmYW1pbHk6IlRhaG9tYSwgc2Fucy1zZXJpZiJ9LGRpcmVjdGlvbjoiY2xvY2t3aXNlIixvcmllbnRhdGlvbjowLGxhYmVsT2Zmc2V0OjEwLHJhZGlhbEF4aXM6e2RvbWFpbjpudWxsLG9yaWVudGF0aW9uOi00NSx0aWNrc1N1ZmZpeDoiIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOiJob3Jpem9udGFsIixyZXdyaXRlVGlja3M6bnVsbH0sYW5ndWxhckF4aXM6e2RvbWFpbjpbMCwzNjBdLHRpY2tzU3VmZml4OiIiLHZpc2libGU6ITAsZ3JpZExpbmVzVmlzaWJsZTohMCxsYWJlbHNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmV3cml0ZVRpY2tzOm51bGwsdGlja3NDb3VudDpudWxsLHRpY2tzU3RlcDpudWxsfSxtaW5vclRpY2tzOjAsdGlja0xlbmd0aDpudWxsLHRpY2tDb2xvcjoic2lsdmVyIixtaW5vclRpY2tDb2xvcjoiI2VlZSIsYmFja2dyb3VuZENvbG9yOiJub25lIixuZWVkc0VuZFNwYWNpbmc6bnVsbCxzaG93TGVnZW5kOiEwLGxlZ2VuZDp7cmV2ZXJzZU9yZGVyOiExfSxvcGFjaXR5OjF9fX0sby51dGlsPXt9LG8uREFUQUVYVEVOVD0iZGF0YUV4dGVudCIsby5BUkVBPSJBcmVhQ2hhcnQiLG8uTElORT0iTGluZVBsb3QiLG8uRE9UPSJEb3RQbG90IixvLkJBUj0iQmFyQ2hhcnQiLG8udXRpbC5fb3ZlcnJpZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdClyIGluIGUmJihlW3JdPXRbcl0pfSxvLnV0aWwuX2V4dGVuZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sby51dGlsLl9ybmRTbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gMipNYXRoLnJhbmRvbSgpLTErKDIqTWF0aC5yYW5kb20oKS0xKSsoMipNYXRoLnJhbmRvbSgpLTEpfSxvLnV0aWwuZGF0YUZyb21FcXVhdGlvbjI9ZnVuY3Rpb24odCxlKXt2YXIgcj1lfHw2O3JldHVybiBuLnJhbmdlKDAsMzYwK3IscikubWFwKGZ1bmN0aW9uKGUscil7dmFyIG49ZSpNYXRoLlBJLzE4MDtyZXR1cm5bZSx0KG4pXX0pfSxvLnV0aWwuZGF0YUZyb21FcXVhdGlvbj1mdW5jdGlvbih0LGUscil7dmFyIGk9ZXx8NixhPVtdLG89W107bi5yYW5nZSgwLDM2MCtpLGkpLmZvckVhY2goZnVuY3Rpb24oZSxyKXt2YXIgbj1lKk1hdGguUEkvMTgwLGk9dChuKTthLnB1c2goZSksby5wdXNoKGkpfSk7dmFyIHM9e3Q6YSxyOm99O3JldHVybiByJiYocy5uYW1lPXIpLHN9LG8udXRpbC5lbnN1cmVBcnJheT1mdW5jdGlvbih0LGUpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgdClyZXR1cm4gbnVsbDt2YXIgcj1bXS5jb25jYXQodCk7cmV0dXJuIG4ucmFuZ2UoZSkubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbZV18fHJbMF19KX0sby51dGlsLmZpbGxBcnJheXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0W2VdPW8udXRpbC5lbnN1cmVBcnJheSh0W2VdLHIpfSksdH0sby51dGlsLmNsb25lSnNvbj1mdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSl9LG8udXRpbC52YWxpZGF0ZUtleXM9ZnVuY3Rpb24odCxlKXsic3RyaW5nIj09dHlwZW9mIGUmJihlPWUuc3BsaXQoIi4iKSk7dmFyIHI9ZS5zaGlmdCgpO3JldHVybiB0W3JdJiYoIWUubGVuZ3RofHxvYmpIYXNLZXlzKHRbcl0sZSkpfSxvLnV0aWwuc3VtQXJyYXlzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uemlwKHQsZSkubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc3VtKHQpfSl9LG8udXRpbC5hcnJheUxhc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19LG8udXRpbC5hcnJheUVxdWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWF4KHQubGVuZ3RoLGUubGVuZ3RoLDEpO3ItLSA+PTAmJnRbcl09PT1lW3JdOyk7cmV0dXJuLTI9PT1yfSxvLnV0aWwuZmxhdHRlbkFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTshby51dGlsLmFycmF5RXF1YWwoZSx0KTspZT10LHQ9W10uY29uY2F0LmFwcGx5KFtdLHQpO3JldHVybiB0fSxvLnV0aWwuZGVkdXBsaWNhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gci5pbmRleE9mKHQpPT1lfSl9LG8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlKXt2YXIgcj1lKk1hdGguUEkvMTgwO3JldHVyblt0Kk1hdGguY29zKHIpLHQqTWF0aC5zaW4ocildfSxvLnV0aWwucm91bmQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lfHwyLG49TWF0aC5wb3coMTAscik7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufSxvLnV0aWwuZ2V0TW91c2VQb3M9ZnVuY3Rpb24odCl7dmFyIGU9bi5tb3VzZSh0Lm5vZGUoKSkscj1lWzBdLGk9ZVsxXSxhPXt9O3JldHVybiBhLng9cixhLnk9aSxhLnBvcz1lLGEuYW5nbGU9MTgwKihNYXRoLmF0YW4yKGkscikrTWF0aC5QSSkvTWF0aC5QSSxhLnJhZGl1cz1NYXRoLnNxcnQocipyK2kqaSksYX0sby51dGlsLmR1cGxpY2F0ZXNDb3VudD1mdW5jdGlvbih0KXtmb3IodmFyIGUscj17fSxuPXt9LGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspKGU9dFtpXSlpbiByPyhyW2VdKyssbltlXT1yW2VdKTpyW2VdPTE7cmV0dXJuIG59LG8udXRpbC5kdXBsaWNhdGVzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyhvLnV0aWwuZHVwbGljYXRlc0NvdW50KHQpKX0sby51dGlsLnRyYW5zbGF0b3I9ZnVuY3Rpb24odCxlLHIsbil7aWYobil7dmFyIGk9ci5zbGljZSgpO3I9ZSxlPWl9dmFyIGE9ZS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQpcmV0dXJuIHRbZV19LHQpOyJ1bmRlZmluZWQiIT10eXBlb2YgYSYmKGUucmVkdWNlKGZ1bmN0aW9uKHQscixuKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQpcmV0dXJuIG49PT1lLmxlbmd0aC0xJiZkZWxldGUgdFtyXSx0W3JdfSx0KSxyLnJlZHVjZShmdW5jdGlvbih0LGUsbil7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiB0W2VdJiYodFtlXT17fSksbj09PXIubGVuZ3RoLTEmJih0W2VdPWEpLHRbZV19LHQpKX0sby5Qb2x5Q2hhcnQ9ZnVuY3Rpb24oKXt2YXIgdD1bby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpXSxlPW4uZGlzcGF0Y2goImhvdmVyIikscj17c29saWQ6Im5vbmUiLGRhc2g6WzUsMl0sZG90OlsyLDVdfTtmdW5jdGlvbiBhKCl7dmFyIGU9dFswXS5nZW9tZXRyeUNvbmZpZyxpPWUuY29udGFpbmVyOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9bi5zZWxlY3QoaSkpLGkuZGF0dW0odCkuZWFjaChmdW5jdGlvbih0LGkpe3ZhciBhPSEhdFswXS5kYXRhLnlTdGFjayxvPXQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGE/bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0sdC5kYXRhLnlTdGFja1swXSk6bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0pfSkscz1lLmFuZ3VsYXJTY2FsZSxsPWUucmFkaWFsU2NhbGUuZG9tYWluKClbMF0sYz17YmFyOmZ1bmN0aW9uKHIsaSxhKXt2YXIgbz10W2FdLmRhdGEsbD1lLnJhZGlhbFNjYWxlKHJbMV0pLWUucmFkaWFsU2NhbGUoMCksYz1lLnJhZGlhbFNjYWxlKHJbMl18fDApLHU9by5iYXJXaWR0aDtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBiYXIiLGQ6Ik0iK1tbbCtjLC11LzJdLFtsK2MsdS8yXSxbYyx1LzJdLFtjLC11LzJdXS5qb2luKCJMIikrIloiLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVybiJyb3RhdGUoIisoZS5vcmllbnRhdGlvbitzKHRbMF0pKSsiKSJ9fSl9fTtjLmRvdD1mdW5jdGlvbihyLGksYSl7dmFyIG89clsyXT9bclswXSxyWzFdK3JbMl1dOnIscz1uLnN2Zy5zeW1ib2woKS5zaXplKHRbYV0uZGF0YS5kb3RTaXplKS50eXBlKHRbYV0uZGF0YS5kb3RUeXBlKShyLGkpO24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGRvdCIsZDpzLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3ZhciBuLGksYSxzPShuPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5yYWRpYWxTY2FsZSh0WzFdKSxpPShlLmFuZ3VsYXJTY2FsZSh0WzBdKStlLm9yaWVudGF0aW9uKSpNYXRoLlBJLzE4MDtyZXR1cm57cjpuLHQ6aX19KG8pLGk9bi5yKk1hdGguY29zKG4udCksYT1uLnIqTWF0aC5zaW4obi50KSx7eDppLHk6YX0pO3JldHVybiJ0cmFuc2xhdGUoIitbcy54LHMueV0rIikifX0pfTt2YXIgdT1uLnN2Zy5saW5lLnJhZGlhbCgpLmludGVycG9sYXRlKHRbMF0uZGF0YS5saW5lSW50ZXJwb2xhdGlvbikucmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKHRbMV0pfSkuYW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuIGUuYW5ndWxhclNjYWxlKHRbMF0pKk1hdGguUEkvMTgwfSk7Yy5saW5lPWZ1bmN0aW9uKHIsaSxhKXt2YXIgcz1yWzJdP29bYV0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sdFsxXSt0WzJdXX0pOm9bYV07aWYobi5zZWxlY3QodGhpcykuZWFjaChjLmRvdCkuc3R5bGUoe29wYWNpdHk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4rdFthXS5kYXRhLmRvdFZpc2libGV9LGZpbGw6ZC5zdHJva2UocixpLGEpfSkuYXR0cih7Y2xhc3M6Im1hcmsgZG90In0pLCEoaT4wKSl7dmFyIGw9bi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInBhdGgubGluZSIpLmRhdGEoWzBdKTtsLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiksbC5hdHRyKHtjbGFzczoibGluZSIsZDp1KHMpLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVybiJyb3RhdGUoIisoZS5vcmllbnRhdGlvbis5MCkrIikifSwicG9pbnRlci1ldmVudHMiOiJub25lIn0pLnN0eWxlKHtmaWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuZmlsbChyLGksYSl9LCJmaWxsLW9wYWNpdHkiOjAsc3Ryb2tlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuc3Ryb2tlKHIsaSxhKX0sInN0cm9rZS13aWR0aCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZFsic3Ryb2tlLXdpZHRoIl0ocixpLGEpfSwic3Ryb2tlLWRhc2hhcnJheSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZFsic3Ryb2tlLWRhc2hhcnJheSJdKHIsaSxhKX0sb3BhY2l0eTpmdW5jdGlvbih0LGUpe3JldHVybiBkLm9wYWNpdHkocixpLGEpfSxkaXNwbGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuZGlzcGxheShyLGksYSl9fSl9fTt2YXIgZj1lLmFuZ3VsYXJTY2FsZS5yYW5nZSgpLGg9TWF0aC5hYnMoZlsxXS1mWzBdKS9vWzBdLmxlbmd0aCpNYXRoLlBJLzE4MCxwPW4uc3ZnLmFyYygpLnN0YXJ0QW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuLWgvMn0pLmVuZEFuZ2xlKGZ1bmN0aW9uKHQpe3JldHVybiBoLzJ9KS5pbm5lclJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZShsKyh0WzJdfHwwKSl9KS5vdXRlclJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZShsKyh0WzJdfHwwKSkrZS5yYWRpYWxTY2FsZSh0WzFdKX0pO2MuYXJjPWZ1bmN0aW9uKHQscixpKXtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBhcmMiLGQ6cCx0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXtyZXR1cm4icm90YXRlKCIrKGUub3JpZW50YXRpb24rcyh0WzBdKSs5MCkrIikifX0pfTt2YXIgZD17ZmlsbDpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRbbl0uZGF0YS5jb2xvcn0sc3Ryb2tlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLnN0cm9rZUNvbG9yfSwic3Ryb2tlLXdpZHRoIjpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRbbl0uZGF0YS5zdHJva2VTaXplKyJweCJ9LCJzdHJva2UtZGFzaGFycmF5IjpmdW5jdGlvbihlLG4saSl7cmV0dXJuIHJbdFtpXS5kYXRhLnN0cm9rZURhc2hdfSxvcGFjaXR5OmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLm9wYWNpdHl9LGRpc3BsYXk6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgdFtuXS5kYXRhLnZpc2libGV8fHRbbl0uZGF0YS52aXNpYmxlPyJibG9jayI6Im5vbmUifX0sZz1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcubGF5ZXIiKS5kYXRhKG8pO2cuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKHtjbGFzczoibGF5ZXIifSk7dmFyIHY9Zy5zZWxlY3RBbGwoInBhdGgubWFyayIpLmRhdGEoZnVuY3Rpb24odCxlKXtyZXR1cm4gdH0pO3YuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKHtjbGFzczoibWFyayJ9KSx2LnN0eWxlKGQpLmVhY2goY1tlLmdlb21ldHJ5VHlwZV0pLHYuZXhpdCgpLnJlbW92ZSgpLGcuZXhpdCgpLnJlbW92ZSgpfSl9cmV0dXJuIGEuY29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0W3JdfHwodFtyXT17fSksaSh0W3JdLG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWcoKSksaSh0W3JdLGUpfSksdGhpcyk6dH0sYS5nZXRDb2xvclNjYWxlPWZ1bmN0aW9uKCl7fSxuLnJlYmluZChhLGUsIm9uIiksYX0sby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntkYXRhOntuYW1lOiJnZW9tMSIsdDpbWzEsMiwzLDRdXSxyOltbMSwyLDMsNF1dLGRvdFR5cGU6ImNpcmNsZSIsZG90U2l6ZTo2NCxkb3RWaXNpYmxlOiExLGJhcldpZHRoOjIwLGNvbG9yOiIjZmZhNTAwIixzdHJva2VTaXplOjEsc3Ryb2tlQ29sb3I6InNpbHZlciIsc3Ryb2tlRGFzaDoic29saWQiLG9wYWNpdHk6MSxpbmRleDowLHZpc2libGU6ITAsdmlzaWJsZUluTGVnZW5kOiEwfSxnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnk6IkxpbmVQbG90IixnZW9tZXRyeVR5cGU6ImFyYyIsZGlyZWN0aW9uOiJjbG9ja3dpc2UiLG9yaWVudGF0aW9uOjAsY29udGFpbmVyOiJib2R5IixyYWRpYWxTY2FsZTpudWxsLGFuZ3VsYXJTY2FsZTpudWxsLGNvbG9yU2NhbGU6bi5zY2FsZS5jYXRlZ29yeTIwKCl9fX0sby5CYXJDaGFydD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkJhckNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToiYmFyIn19fSxvLkFyZWFDaGFydD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkFyZWFDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImFyYyJ9fX0sby5Eb3RQbG90PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uRG90UGxvdC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImRvdCIsZG90VHlwZToiY2lyY2xlIn19fSxvLkxpbmVQbG90PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uTGluZVBsb3QuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJsaW5lIn19fSxvLkxlZ2VuZD1mdW5jdGlvbigpe3ZhciB0PW8uTGVnZW5kLmRlZmF1bHRDb25maWcoKSxlPW4uZGlzcGF0Y2goImhvdmVyIik7ZnVuY3Rpb24gcigpe3ZhciBlPXQubGVnZW5kQ29uZmlnLGE9dC5kYXRhLm1hcChmdW5jdGlvbih0LHIpe3JldHVybltdLmNvbmNhdCh0KS5tYXAoZnVuY3Rpb24odCxuKXt2YXIgYT1pKHt9LGUuZWxlbWVudHNbcl0pO3JldHVybiBhLm5hbWU9dCxhLmNvbG9yPVtdLmNvbmNhdChlLmVsZW1lbnRzW3JdLmNvbG9yKVtuXSxhfSl9KSxvPW4ubWVyZ2UoYSk7bz1vLmZpbHRlcihmdW5jdGlvbih0LHIpe3JldHVybiBlLmVsZW1lbnRzW3JdJiYoZS5lbGVtZW50c1tyXS52aXNpYmxlSW5MZWdlbmR8fCJ1bmRlZmluZWQiPT10eXBlb2YgZS5lbGVtZW50c1tyXS52aXNpYmxlSW5MZWdlbmQpfSksZS5yZXZlcnNlT3JkZXImJihvPW8ucmV2ZXJzZSgpKTt2YXIgcz1lLmNvbnRhaW5lcjsoInN0cmluZyI9PXR5cGVvZiBzfHxzLm5vZGVOYW1lKSYmKHM9bi5zZWxlY3QocykpO3ZhciBsPW8ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29sb3J9KSxjPWUuZm9udFNpemUsdT1udWxsPT1lLmlzQ29udGludW91cz8ibnVtYmVyIj09dHlwZW9mIG9bMF06ZS5pc0NvbnRpbnVvdXMsZj11P2UuaGVpZ2h0OmMqby5sZW5ndGgsaD1zLmNsYXNzZWQoImxlZ2VuZC1ncm91cCIsITApLnNlbGVjdEFsbCgic3ZnIikuZGF0YShbMF0pLHA9aC5lbnRlcigpLmFwcGVuZCgic3ZnIikuYXR0cih7d2lkdGg6MzAwLGhlaWdodDpmK2MseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix2ZXJzaW9uOiIxLjEifSk7cC5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmQtYXhpcyIsITApLHAuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kLW1hcmtzIiwhMCk7dmFyIGQ9bi5yYW5nZShvLmxlbmd0aCksZz1uLnNjYWxlW3U/ImxpbmVhciI6Im9yZGluYWwiXSgpLmRvbWFpbihkKS5yYW5nZShsKSx2PW4uc2NhbGVbdT8ibGluZWFyIjoib3JkaW5hbCJdKCkuZG9tYWluKGQpW3U/InJhbmdlIjoicmFuZ2VQb2ludHMiXShbMCxmXSk7aWYodSl7dmFyIG09aC5zZWxlY3QoIi5sZWdlbmQtbWFya3MiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cih7aWQ6ImdyYWQxIix4MToiMCUiLHkxOiIwJSIseDI6IjAlIix5MjoiMTAwJSJ9KS5zZWxlY3RBbGwoInN0b3AiKS5kYXRhKGwpO20uZW50ZXIoKS5hcHBlbmQoInN0b3AiKSxtLmF0dHIoe29mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBlLyhsLmxlbmd0aC0xKSoxMDArIiUifX0pLnN0eWxlKHsic3RvcC1jb2xvciI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH19KSxoLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkuYXR0cih7aGVpZ2h0OmUuaGVpZ2h0LHdpZHRoOmUuY29sb3JCYW5kV2lkdGgsZmlsbDoidXJsKCNncmFkMSkifSl9ZWxzZXt2YXIgeT1oLnNlbGVjdCgiLmxlZ2VuZC1tYXJrcyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQtbWFyayIpLmRhdGEobyk7eS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkseS5hdHRyKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4idHJhbnNsYXRlKCIrW2MvMix2KGUpK2MvMl0rIikifSxkOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89dC5zeW1ib2w7cmV0dXJuIGE9MyooaT1jKSwibGluZSI9PT0ocj1vKT8iTSIrW1staS8yLC1pLzEyXSxbaS8yLC1pLzEyXSxbaS8yLGkvMTJdLFstaS8yLGkvMTJdXSsiWiI6LTEhPW4uc3ZnLnN5bWJvbFR5cGVzLmluZGV4T2Yocik/bi5zdmcuc3ltYm9sKCkudHlwZShyKS5zaXplKGEpKCk6bi5zdmcuc3ltYm9sKCkudHlwZSgic3F1YXJlIikuc2l6ZShhKSgpfSxmaWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGcoZSl9fSkseS5leGl0KCkucmVtb3ZlKCl9dmFyIHg9bi5zdmcuYXhpcygpLnNjYWxlKHYpLm9yaWVudCgicmlnaHQiKSxiPWguc2VsZWN0KCJnLmxlZ2VuZC1heGlzIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbdT9lLmNvbG9yQmFuZFdpZHRoOmMsYy8yXSsiKSJ9KS5jYWxsKHgpO3JldHVybiBiLnNlbGVjdEFsbCgiLmRvbWFpbiIpLnN0eWxlKHtmaWxsOiJub25lIixzdHJva2U6Im5vbmUifSksYi5zZWxlY3RBbGwoImxpbmUiKS5zdHlsZSh7ZmlsbDoibm9uZSIsc3Ryb2tlOnU/ZS50ZXh0Q29sb3I6Im5vbmUifSksYi5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSh7ZmlsbDplLnRleHRDb2xvciwiZm9udC1zaXplIjplLmZvbnRTaXplfSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBvW2VdLm5hbWV9KSxyfXJldHVybiByLmNvbmZpZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSh0LGUpLHRoaXMpOnR9LG4ucmViaW5kKHIsZSwib24iKSxyfSxvLkxlZ2VuZC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6WyJhIiwiYiIsImMiXSxsZWdlbmRDb25maWc6e2VsZW1lbnRzOlt7c3ltYm9sOiJsaW5lIixjb2xvcjoicmVkIn0se3N5bWJvbDoic3F1YXJlIixjb2xvcjoieWVsbG93In0se3N5bWJvbDoiZGlhbW9uZCIsY29sb3I6ImxpbWVncmVlbiJ9XSxoZWlnaHQ6MTUwLGNvbG9yQmFuZFdpZHRoOjMwLGZvbnRTaXplOjEyLGNvbnRhaW5lcjoiYm9keSIsaXNDb250aW51b3VzOm51bGwsdGV4dENvbG9yOiJncmV5IixyZXZlcnNlT3JkZXI6ITF9fX0sby50b29sdGlwUGFuZWw9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsYT17Y29udGFpbmVyOm51bGwsaGFzVGljazohMSxmb250U2l6ZToxMixjb2xvcjoid2hpdGUiLHBhZGRpbmc6NX0scz0idG9vbHRpcC0iK28udG9vbHRpcFBhbmVsLnVpZCsrLGw9MTAsYz1mdW5jdGlvbigpe3ZhciBuPSh0PWEuY29udGFpbmVyLnNlbGVjdEFsbCgiZy4iK3MpLmRhdGEoWzBdKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHMsITApLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIixkaXNwbGF5OiJub25lIn0pO3JldHVybiByPW4uYXBwZW5kKCJwYXRoIikuc3R5bGUoe2ZpbGw6IndoaXRlIiwiZmlsbC1vcGFjaXR5IjouOX0pLmF0dHIoe2Q6Ik0wIDAifSksZT1uLmFwcGVuZCgidGV4dCIpLmF0dHIoe2R4OmEucGFkZGluZytsLGR5Oi4zKithLmZvbnRTaXplfSksY307cmV0dXJuIGMudGV4dD1mdW5jdGlvbihpKXt2YXIgbz1uLmhzbChhLmNvbG9yKS5sLHM9bz49LjU/IiNhYWEiOiJ3aGl0ZSIsdT1vPj0uNT8iYmxhY2siOiJ3aGl0ZSIsZj1pfHwiIjtlLnN0eWxlKHtmaWxsOnUsImZvbnQtc2l6ZSI6YS5mb250U2l6ZSsicHgifSkudGV4dChmKTt2YXIgaD1hLnBhZGRpbmcscD1lLm5vZGUoKS5nZXRCQm94KCksZD17ZmlsbDphLmNvbG9yLHN0cm9rZTpzLCJzdHJva2Utd2lkdGgiOiIycHgifSxnPXAud2lkdGgrMipoK2wsdj1wLmhlaWdodCsyKmg7cmV0dXJuIHIuYXR0cih7ZDoiTSIrW1tsLC12LzJdLFtsLC12LzRdLFthLmhhc1RpY2s/MDpsLDBdLFtsLHYvNF0sW2wsdi8yXSxbZyx2LzJdLFtnLC12LzJdXS5qb2luKCJMIikrIloifSkuc3R5bGUoZCksdC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1tsLC12LzIrMipoXSsiKSJ9KSx0LnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxjfSxjLm1vdmU9ZnVuY3Rpb24oZSl7aWYodClyZXR1cm4gdC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1tlWzBdLGVbMV1dKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxjfSxjLmhpZGU9ZnVuY3Rpb24oKXtpZih0KXJldHVybiB0LnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLGN9LGMuc2hvdz1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGN9LGMuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBpKGEsdCksY30sY30sby50b29sdGlwUGFuZWwudWlkPTEsby5hZGFwdGVyPXt9LG8uYWRhcHRlci5wbG90bHk9ZnVuY3Rpb24oKXt2YXIgdD17Y29udmVydDpmdW5jdGlvbih0LGUpe3ZhciByPXt9O2lmKHQuZGF0YSYmKHIuZGF0YT10LmRhdGEubWFwKGZ1bmN0aW9uKHQscil7dmFyIG49aSh7fSx0KTtyZXR1cm5bW24sWyJtYXJrZXIiLCJjb2xvciJdLFsiY29sb3IiXV0sW24sWyJtYXJrZXIiLCJvcGFjaXR5Il0sWyJvcGFjaXR5Il1dLFtuLFsibWFya2VyIiwibGluZSIsImNvbG9yIl0sWyJzdHJva2VDb2xvciJdXSxbbixbIm1hcmtlciIsImxpbmUiLCJkYXNoIl0sWyJzdHJva2VEYXNoIl1dLFtuLFsibWFya2VyIiwibGluZSIsIndpZHRoIl0sWyJzdHJva2VTaXplIl1dLFtuLFsibWFya2VyIiwic3ltYm9sIl0sWyJkb3RUeXBlIl1dLFtuLFsibWFya2VyIiwic2l6ZSJdLFsiZG90U2l6ZSJdXSxbbixbIm1hcmtlciIsImJhcldpZHRoIl0sWyJiYXJXaWR0aCJdXSxbbixbImxpbmUiLCJpbnRlcnBvbGF0aW9uIl0sWyJsaW5lSW50ZXJwb2xhdGlvbiJdXSxbbixbInNob3dsZWdlbmQiXSxbInZpc2libGVJbkxlZ2VuZCJdXV0uZm9yRWFjaChmdW5jdGlvbih0LHIpe28udXRpbC50cmFuc2xhdG9yLmFwcGx5KG51bGwsdC5jb25jYXQoZSkpfSksZXx8ZGVsZXRlIG4ubWFya2VyLGUmJmRlbGV0ZSBuLmdyb3VwSWQsZT8oIkxpbmVQbG90Ij09PW4uZ2VvbWV0cnk/KG4udHlwZT0ic2NhdHRlciIsITA9PT1uLmRvdFZpc2libGU/KGRlbGV0ZSBuLmRvdFZpc2libGUsbi5tb2RlPSJsaW5lcyttYXJrZXJzIik6bi5tb2RlPSJsaW5lcyIpOiJEb3RQbG90Ij09PW4uZ2VvbWV0cnk/KG4udHlwZT0ic2NhdHRlciIsbi5tb2RlPSJtYXJrZXJzIik6IkFyZWFDaGFydCI9PT1uLmdlb21ldHJ5P24udHlwZT0iYXJlYSI6IkJhckNoYXJ0Ij09PW4uZ2VvbWV0cnkmJihuLnR5cGU9ImJhciIpLGRlbGV0ZSBuLmdlb21ldHJ5KTooInNjYXR0ZXIiPT09bi50eXBlPyJsaW5lcyI9PT1uLm1vZGU/bi5nZW9tZXRyeT0iTGluZVBsb3QiOiJtYXJrZXJzIj09PW4ubW9kZT9uLmdlb21ldHJ5PSJEb3RQbG90IjoibGluZXMrbWFya2VycyI9PT1uLm1vZGUmJihuLmdlb21ldHJ5PSJMaW5lUGxvdCIsbi5kb3RWaXNpYmxlPSEwKToiYXJlYSI9PT1uLnR5cGU/bi5nZW9tZXRyeT0iQXJlYUNoYXJ0IjoiYmFyIj09PW4udHlwZSYmKG4uZ2VvbWV0cnk9IkJhckNoYXJ0IiksZGVsZXRlIG4ubW9kZSxkZWxldGUgbi50eXBlKSxufSksIWUmJnQubGF5b3V0JiYic3RhY2siPT09dC5sYXlvdXQuYmFybW9kZSkpe3ZhciBhPW8udXRpbC5kdXBsaWNhdGVzKHIuZGF0YS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZW9tZXRyeX0pKTtyLmRhdGEuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPWEuaW5kZXhPZih0Lmdlb21ldHJ5KTstMSE9biYmKHIuZGF0YVtlXS5ncm91cElkPW4pfSl9aWYodC5sYXlvdXQpe3ZhciBzPWkoe30sdC5sYXlvdXQpO2lmKFtbcyxbInBsb3RfYmdjb2xvciJdLFsiYmFja2dyb3VuZENvbG9yIl1dLFtzLFsic2hvd2xlZ2VuZCJdLFsic2hvd0xlZ2VuZCJdXSxbcyxbInJhZGlhbGF4aXMiXSxbInJhZGlhbEF4aXMiXV0sW3MsWyJhbmd1bGFyYXhpcyJdLFsiYW5ndWxhckF4aXMiXV0sW3MuYW5ndWxhcmF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbcy5hbmd1bGFyYXhpcyxbInNob3d0aWNrbGFiZWxzIl0sWyJsYWJlbHNWaXNpYmxlIl1dLFtzLmFuZ3VsYXJheGlzLFsibnRpY2tzIl0sWyJ0aWNrc0NvdW50Il1dLFtzLmFuZ3VsYXJheGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW3MuYW5ndWxhcmF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbcy5hbmd1bGFyYXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW3MuYW5ndWxhcmF4aXMsWyJlbmRwYWRkaW5nIl0sWyJlbmRQYWRkaW5nIl1dLFtzLnJhZGlhbGF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbcy5yYWRpYWxheGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW3MucmFkaWFsYXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtzLnJhZGlhbGF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtzLmFuZ3VsYXJBeGlzLFsic2hvd2xpbmUiXSxbImdyaWRMaW5lc1Zpc2libGUiXV0sW3MuYW5ndWxhckF4aXMsWyJzaG93dGlja2xhYmVscyJdLFsibGFiZWxzVmlzaWJsZSJdXSxbcy5hbmd1bGFyQXhpcyxbIm50aWNrcyJdLFsidGlja3NDb3VudCJdXSxbcy5hbmd1bGFyQXhpcyxbInRpY2tvcmllbnRhdGlvbiJdLFsidGlja09yaWVudGF0aW9uIl1dLFtzLmFuZ3VsYXJBeGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW3MuYW5ndWxhckF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtzLmFuZ3VsYXJBeGlzLFsiZW5kcGFkZGluZyJdLFsiZW5kUGFkZGluZyJdXSxbcy5yYWRpYWxBeGlzLFsic2hvd2xpbmUiXSxbImdyaWRMaW5lc1Zpc2libGUiXV0sW3MucmFkaWFsQXhpcyxbInRpY2tvcmllbnRhdGlvbiJdLFsidGlja09yaWVudGF0aW9uIl1dLFtzLnJhZGlhbEF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbcy5yYWRpYWxBeGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbcy5mb250LFsib3V0bGluZWNvbG9yIl0sWyJvdXRsaW5lQ29sb3IiXV0sW3MubGVnZW5kLFsidHJhY2VvcmRlciJdLFsicmV2ZXJzZU9yZGVyIl1dLFtzLFsibGFiZWxvZmZzZXQiXSxbImxhYmVsT2Zmc2V0Il1dLFtzLFsiZGVmYXVsdGNvbG9ycmFuZ2UiXSxbImRlZmF1bHRDb2xvclJhbmdlIl1dXS5mb3JFYWNoKGZ1bmN0aW9uKHQscil7by51dGlsLnRyYW5zbGF0b3IuYXBwbHkobnVsbCx0LmNvbmNhdChlKSl9KSxlPygidW5kZWZpbmVkIiE9dHlwZW9mIHMudGlja0xlbmd0aCYmKHMuYW5ndWxhcmF4aXMudGlja2xlbj1zLnRpY2tMZW5ndGgsZGVsZXRlIHMudGlja0xlbmd0aCkscy50aWNrQ29sb3ImJihzLmFuZ3VsYXJheGlzLnRpY2tjb2xvcj1zLnRpY2tDb2xvcixkZWxldGUgcy50aWNrQ29sb3IpKToocy5hbmd1bGFyQXhpcyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzLmFuZ3VsYXJBeGlzLnRpY2tsZW4mJihzLnRpY2tMZW5ndGg9cy5hbmd1bGFyQXhpcy50aWNrbGVuKSxzLmFuZ3VsYXJBeGlzJiYidW5kZWZpbmVkIiE9dHlwZW9mIHMuYW5ndWxhckF4aXMudGlja2NvbG9yJiYocy50aWNrQ29sb3I9cy5hbmd1bGFyQXhpcy50aWNrY29sb3IpKSxzLmxlZ2VuZCYmImJvb2xlYW4iIT10eXBlb2Ygcy5sZWdlbmQucmV2ZXJzZU9yZGVyJiYocy5sZWdlbmQucmV2ZXJzZU9yZGVyPSJub3JtYWwiIT1zLmxlZ2VuZC5yZXZlcnNlT3JkZXIpLHMubGVnZW5kJiYiYm9vbGVhbiI9PXR5cGVvZiBzLmxlZ2VuZC50cmFjZW9yZGVyJiYocy5sZWdlbmQudHJhY2VvcmRlcj1zLmxlZ2VuZC50cmFjZW9yZGVyPyJyZXZlcnNlZCI6Im5vcm1hbCIsZGVsZXRlIHMubGVnZW5kLnJldmVyc2VPcmRlcikscy5tYXJnaW4mJiJ1bmRlZmluZWQiIT10eXBlb2Ygcy5tYXJnaW4udCl7dmFyIGw9WyJ0IiwiciIsImIiLCJsIiwicGFkIl0sYz1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInBhZCJdLHU9e307bi5lbnRyaWVzKHMubWFyZ2luKS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dVtjW2wuaW5kZXhPZih0LmtleSldXT10LnZhbHVlfSkscy5tYXJnaW49dX1lJiYoZGVsZXRlIHMubmVlZHNFbmRTcGFjaW5nLGRlbGV0ZSBzLm1pbm9yVGlja0NvbG9yLGRlbGV0ZSBzLm1pbm9yVGlja3MsZGVsZXRlIHMuYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgcy5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnRpY2tzU3RlcCxkZWxldGUgcy5hbmd1bGFyYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIHMuYW5ndWxhcmF4aXMubnRpY2tzLGRlbGV0ZSBzLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgcy5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMucmFkaWFsYXhpcy50aWNrc1N0ZXAsZGVsZXRlIHMucmFkaWFsYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIHMucmFkaWFsYXhpcy5udGlja3MpLHIubGF5b3V0PXN9cmV0dXJuIHJ9fTtyZXR1cm4gdH19LHsiLi4vLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi8uLi9saWIiOjcwMCxkMzoxNTR9XSw4MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi9taWNyb3BvbGFyIikscz10KCIuL3VuZG9fbWFuYWdlciIpLGw9aS5leHRlbmREZWVwQWxsLGM9ZS5leHBvcnRzPXt9O2MuZnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLHUsZj1uZXcgcztmdW5jdGlvbiBoKHIscyl7cmV0dXJuIHMmJih1PXMpLG4uc2VsZWN0KG4uc2VsZWN0KHUpLm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyPio6bm90KC5jaGFydC1yb290KSIpLnJlbW92ZSgpLGU9ZT9sKGUscik6cixpfHwoaT1vLkF4aXMoKSksYT1vLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChlKSxpLmNvbmZpZyhhKS5yZW5kZXIodSksdC5kYXRhPWUuZGF0YSx0LmxheW91dD1lLmxheW91dCxjLmZpbGxMYXlvdXQodCksZX1yZXR1cm4gaC5pc1BvbGFyPSEwLGguc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc3ZnKCl9LGguZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LGguZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiBvLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChpLmdldExpdmVDb25maWcoKSwhMCl9LGguZ2V0TGl2ZVNjYWxlcz1mdW5jdGlvbigpe3JldHVybnt0OmkuYW5ndWxhclNjYWxlKCkscjppLnJhZGlhbFNjYWxlKCl9fSxoLnNldFVuZG9Qb2ludD1mdW5jdGlvbigpe3ZhciB0LG4saT10aGlzLGE9by51dGlsLmNsb25lSnNvbihlKTt0PWEsbj1yLGYuYWRkKHt1bmRvOmZ1bmN0aW9uKCl7biYmaShuKX0scmVkbzpmdW5jdGlvbigpe2kodCl9fSkscj1vLnV0aWwuY2xvbmVKc29uKGEpfSxoLnVuZG89ZnVuY3Rpb24oKXtmLnVuZG8oKX0saC5yZWRvPWZ1bmN0aW9uKCl7Zi5yZWRvKCl9LGh9LGMuZmlsbExheW91dD1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLHI9ZS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIiksaT10LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuc3ZnJiZ0LmZyYW1ld29yay5zdmcoKSxvPXt3aWR0aDo4MDAsaGVpZ2h0OjYwMCxwYXBlcl9iZ2NvbG9yOmEuYmFja2dyb3VuZCxfY29udGFpbmVyOmUsX3BhcGVyZGl2OnIsX3BhcGVyOml9O3QuX2Z1bGxMYXlvdXQ9bChvLHQubGF5b3V0KX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi8uLi9saWIiOjcwMCwiLi9taWNyb3BvbGFyIjo4MTksIi4vdW5kb19tYW5hZ2VyIjo4MjEsZDM6MTU0fV0sODIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9W10scj0tMSxuPSExO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdD8obj0hMCx0W2VdKCksbj0hMSx0aGlzKTp0aGlzfXJldHVybnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4/dGhpczooZS5zcGxpY2UocisxLGUubGVuZ3RoLXIpLGUucHVzaCh0KSxyPWUubGVuZ3RoLTEsdGhpcyl9LHNldENhbGxiYWNrOmZ1bmN0aW9uKGUpe3Q9ZX0sdW5kbzpmdW5jdGlvbigpe3ZhciBuPWVbcl07cmV0dXJuIG4/KGkobiwidW5kbyIpLHItPTEsdCYmdChuLnVuZG8pLHRoaXMpOnRoaXN9LHJlZG86ZnVuY3Rpb24oKXt2YXIgbj1lW3IrMV07cmV0dXJuIG4/KGkobiwicmVkbyIpLHIrPTEsdCYmdChuLnJlZG8pLHRoaXMpOnRoaXN9LGNsZWFyOmZ1bmN0aW9uKCl7ZT1bXSxyPS0xfSxoYXNVbmRvOmZ1bmN0aW9uKCl7cmV0dXJuLTEhPT1yfSxoYXNSZWRvOmZ1bmN0aW9uKCl7cmV0dXJuIHI8ZS5sZW5ndGgtMX0sZ2V0Q29tbWFuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sZ2V0UHJldmlvdXNDb21tYW5kOmZ1bmN0aW9uKCl7cmV0dXJuIGVbci0xXX0sZ2V0SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gcn19fX0se31dLDgyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi9wbG90cyIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxmPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGg9dCgiLi9zZXRfY29udmVydCIpLHA9dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLGQ9dCgiLi4vY2FydGVzaWFuL2RyYWdib3giKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIikseT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCx4PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLGI9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LF89dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLHc9dCgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksaz10KCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMsVD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULEE9dCgiLi9jb25zdGFudHMiKSxNPXQoIi4vaGVscGVycyIpLFM9by5fLEU9by5tb2QsQz1vLmRlZzJyYWQsTD1vLnJhZDJkZWc7ZnVuY3Rpb24geih0LGUpe3RoaXMuaWQ9ZSx0aGlzLmdkPXQsdGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPW51bGwsdGhpcy52YW5nbGVzPW51bGwsdGhpcy5yYWRpYWxBeGlzQW5nbGU9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fSx0aGlzLmNsaXBQYXRocz17fSx0aGlzLmNsaXBJZHM9e30sdGhpcy52aWV3SW5pdGlhbD17fTt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ImNsaXAiK3IuX3VpZCtlO3RoaXMuY2xpcElkcy5mb3JUcmFjZXM9bisiLWZvci10cmFjZXMiLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcz1yLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHRoaXMuY2xpcElkcy5mb3JUcmFjZXMpLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcy5hcHBlbmQoInBhdGgiKSx0aGlzLmZyYW1ld29yaz1yLl9wb2xhcmxheWVyLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixlKSx0aGlzLnJhZGlhbFRpY2tMYXlvdXQ9bnVsbCx0aGlzLmFuZ3VsYXJUaWNrTGF5b3V0PW51bGx9dmFyIE89ei5wcm90b3R5cGU7ZnVuY3Rpb24gSSh0KXt2YXIgZT10LnRpY2tzK1N0cmluZyh0LnRpY2tsZW4pK1N0cmluZyh0LnNob3d0aWNrbGFiZWxzKTtyZXR1cm4ic2lkZSJpbiB0JiYoZSs9dC5zaWRlKSxlfWZ1bmN0aW9uIEQodCxlKXtyZXR1cm4gZVtvLmZpbmRJbmRleE9mTWluKGUsZnVuY3Rpb24oZSl7cmV0dXJuIG8uYW5nbGVEaXN0KHQsZSl9KV19ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIGU/KHQuYXR0cigiZGlzcGxheSIsbnVsbCksdC5hdHRyKHIpKTp0JiZ0LmF0dHIoImRpc3BsYXkiLCJub25lIiksdH1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuInRyYW5zbGF0ZSgiK3QrIiwiK2UrIikifWZ1bmN0aW9uIEYodCl7cmV0dXJuInJvdGF0ZSgiK3QrIikifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgeih0LGUpfSxPLnBsb3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7aWYoITE9PT10W25dWzBdLnRyYWNlLmNsaXBvbmF4aXMpe3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319dGhpcy51cGRhdGVMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZUxheW91dChlLHIpLGMuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ2QsdGhpcyx0LHIpLHRoaXMudXBkYXRlRngoZSxyKX0sTy51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVycyxpPWUucmFkaWFsYXhpcyxhPWUuYW5ndWxhcmF4aXMsbz1BLmxheWVyTmFtZXMscz1vLmluZGV4T2YoImZyb250cGxvdCIpLGw9by5zbGljZSgwLHMpLGM9ImJlbG93IHRyYWNlcyI9PT1hLmxheWVyLHU9ImJlbG93IHRyYWNlcyI9PT1pLmxheWVyO2MmJmwucHVzaCgiYW5ndWxhci1saW5lIiksdSYmbC5wdXNoKCJyYWRpYWwtbGluZSIpLGMmJmwucHVzaCgiYW5ndWxhci1heGlzIiksdSYmbC5wdXNoKCJyYWRpYWwtYXhpcyIpLGwucHVzaCgiZnJvbnRwbG90IiksY3x8bC5wdXNoKCJhbmd1bGFyLWxpbmUiKSx1fHxsLnB1c2goInJhZGlhbC1saW5lIiksY3x8bC5wdXNoKCJhbmd1bGFyLWF4aXMiKSx1fHxsLnB1c2goInJhZGlhbC1heGlzIik7dmFyIGY9dGhpcy5mcmFtZXdvcmsuc2VsZWN0QWxsKCIucG9sYXJzdWJsYXllciIpLmRhdGEobCxTdHJpbmcpO2YuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInBvbGFyc3VibGF5ZXIgIit0fSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1yW3RdPW4uc2VsZWN0KHRoaXMpO3N3aXRjaCh0KXtjYXNlImZyb250cGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJiYXJsYXllciIsITApLGUuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk7YnJlYWs7Y2FzZSJiYWNrcGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJtYXBsYXllciIsITApO2JyZWFrO2Nhc2UicGxvdGJnIjpyLmJnPWUuYXBwZW5kKCJwYXRoIik7YnJlYWs7Y2FzZSJyYWRpYWwtZ3JpZCI6Y2FzZSJhbmd1bGFyLWdyaWQiOmUuc3R5bGUoImZpbGwiLCJub25lIik7YnJlYWs7Y2FzZSJyYWRpYWwtbGluZSI6ZS5hcHBlbmQoImxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTticmVhaztjYXNlImFuZ3VsYXItbGluZSI6ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX19KSxmLm9yZGVyKCl9LE8udXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnMsbj10Ll9zaXplLGk9ZS5yYWRpYWxheGlzLGE9ZS5hbmd1bGFyYXhpcyxvPWUuZG9tYWluLngsYz1lLmRvbWFpbi55O3RoaXMueE9mZnNldD1uLmwrbi53Km9bMF0sdGhpcy55T2Zmc2V0PW4udCtuLmgqKDEtY1sxXSk7dmFyIHU9dGhpcy54TGVuZ3RoPW4udyoob1sxXS1vWzBdKSxmPXRoaXMueUxlbmd0aD1uLmgqKGNbMV0tY1swXSksaD1lLnNlY3Rvcjt0aGlzLnNlY3RvckluUmFkPWgubWFwKEMpO3ZhciBwLGQsZyx2LG0seT10aGlzLnNlY3RvckJCb3g9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10WzBdLG89dFsxXS1hLHM9RShhLDM2MCksbD1zK28sYz1NYXRoLmNvcyhDKHMpKSx1PU1hdGguc2luKEMocykpLGY9TWF0aC5jb3MoQyhsKSksaD1NYXRoLnNpbihDKGwpKTtpPXM8PTkwJiZsPj05MHx8cz45MCYmbD49NDUwPzE6dTw9MCYmaDw9MD8wOk1hdGgubWF4KHUsaCk7ZT1zPD0xODAmJmw+PTE4MHx8cz4xODAmJmw+PTU0MD8tMTpjPj0wJiZmPj0wPzA6TWF0aC5taW4oYyxmKTtyPXM8PTI3MCYmbD49MjcwfHxzPjI3MCYmbD49NjMwPy0xOnU+PTAmJmg+PTA/MDpNYXRoLm1pbih1LGgpO249bD49MzYwPzE6Yzw9MCYmZjw9MD8wOk1hdGgubWF4KGMsZik7cmV0dXJuW2UscixuLGldfShoKSx4PXlbMl0teVswXSxiPXlbM10teVsxXSxfPWYvdSx3PU1hdGguYWJzKGIveCk7Xz53PyhwPXUsbT0oZi0oZD11KncpKS9uLmgvMixnPVtvWzBdLG9bMV1dLHY9W2NbMF0rbSxjWzFdLW1dKTooZD1mLG09KHUtKHA9Zi93KSkvbi53LzIsZz1bb1swXSttLG9bMV0tbV0sdj1bY1swXSxjWzFdXSksdGhpcy54TGVuZ3RoMj1wLHRoaXMueUxlbmd0aDI9ZCx0aGlzLnhEb21haW4yPWcsdGhpcy55RG9tYWluMj12O3ZhciBrPXRoaXMueE9mZnNldDI9bi5sK24udypnWzBdLFQ9dGhpcy55T2Zmc2V0Mj1uLnQrbi5oKigxLXZbMV0pLEE9dGhpcy5yYWRpdXM9cC94LE09dGhpcy5pbm5lclJhZGl1cz1lLmhvbGUqQSxTPXRoaXMuY3g9ay1BKnlbMF0sTD10aGlzLmN5PVQrQSp5WzNdLHo9dGhpcy5jeHg9Uy1rLE89dGhpcy5jeXk9TC1UO3RoaXMucmFkaWFsQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxpLHtfaWQ6IngiLHNpZGU6e2NvdW50ZXJjbG9ja3dpc2U6InRvcCIsY2xvY2t3aXNlOiJib3R0b20ifVtpLnNpZGVdLGRvbWFpbjpbTS9uLncsQS9uLnddfSksdGhpcy5hbmd1bGFyQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxhLHtzaWRlOiJyaWdodCIsZG9tYWluOlswLE1hdGguUEldLGF1dG9yYW5nZTohMX0pLHRoaXMuZG9BdXRvUmFuZ2UodCxlKSx0aGlzLnVwZGF0ZUFuZ3VsYXJBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzVGl0bGUodCxlKSx0aGlzLnhheGlzPXRoaXMubW9ja0NhcnRlc2lhbkF4aXModCxlLHtfaWQ6IngiLGRvbWFpbjpnfSksdGhpcy55YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOiJ5Iixkb21haW46dn0pO3ZhciBJPXRoaXMucGF0aFN1YnBsb3QoKTt0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsSSkuYXR0cigidHJhbnNmb3JtIixSKHosTykpLHIuZnJvbnRwbG90LmF0dHIoInRyYW5zZm9ybSIsUihrLFQpKS5jYWxsKGwuc2V0Q2xpcFVybCx0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U/bnVsbDp0aGlzLmNsaXBJZHMuZm9yVHJhY2VzLHRoaXMuZ2QpLHIuYmcuYXR0cigiZCIsSSkuYXR0cigidHJhbnNmb3JtIixSKFMsTCkpLmNhbGwocy5maWxsLGUuYmdjb2xvcil9LE8ubW9ja0F4aXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9by5leHRlbmRGbGF0KHthbmNob3I6ImZyZWUiLHBvc2l0aW9uOjB9LHIsbik7cmV0dXJuIGgoaSxlLHQpLGl9LE8ubW9ja0NhcnRlc2lhbkF4aXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1yLl9pZCxhPW8uZXh0ZW5kRmxhdCh7dHlwZToibGluZWFyIn0scik7ZihhLHQpO3ZhciBzPXt4OlswLDJdLHk6WzEsM119O3JldHVybiBhLnNldFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWN0b3JCQm94LHI9c1tpXSxvPW4ucmFkaWFsQXhpcy5fcmwsbD0ob1sxXS1vWzBdKS8oMS1lLmhvbGUpO2EucmFuZ2U9W3RbclswXV0qbCx0W3JbMV1dKmxdfSxhLmlzUHRXaXRoaW5SYW5nZT0ieCI9PT1pP2Z1bmN0aW9uKHQpe3JldHVybiBuLmlzUHRJbnNpZGUodCl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9LGEuc2V0UmFuZ2UoKSxhLnNldFNjYWxlKCksYX0sTy5kb0F1dG9SYW5nZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2Qsbj10aGlzLnJhZGlhbEF4aXMsaT1lLnJhZGlhbGF4aXM7bi5zZXRTY2FsZSgpLHAocixuKTt2YXIgYT1uLnJhbmdlO2kucmFuZ2U9YS5zbGljZSgpLGkuX2lucHV0LnJhbmdlPWEuc2xpY2UoKSxuLl9ybD1bbi5yMmwoYVswXSxudWxsLCJncmVnb3JpYW4iKSxuLnIybChhWzFdLG51bGwsImdyZWdvcmlhbiIpXX0sTy51cGRhdGVSYWRpYWxBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLGw9ci5pbm5lclJhZGl1cyxjPXIuY3gsZj1yLmN5LGg9ZS5yYWRpYWxheGlzLHA9RShlLnNlY3RvclswXSwzNjApLGQ9ci5yYWRpYWxBeGlzLGc9bDxhO3IuZmlsbFZpZXdJbml0aWFsS2V5KCJyYWRpYWxheGlzLmFuZ2xlIixoLmFuZ2xlKSxyLmZpbGxWaWV3SW5pdGlhbEtleSgicmFkaWFsYXhpcy5yYW5nZSIsZC5yYW5nZS5zbGljZSgpKSxkLnNldEdlb21ldHJ5KCksImF1dG8iPT09ZC50aWNrYW5nbGUmJnA+OTAmJnA8PTI3MCYmKGQudGlja2FuZ2xlPTE4MCk7dmFyIHY9ZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiKyhkLmwycCh0LngpK2wpKyIsMCkifSxtPUkoaCk7aWYoci5yYWRpYWxUaWNrTGF5b3V0IT09bSYmKGlbInJhZGlhbC1heGlzIl0uc2VsZWN0QWxsKCIueHRpY2siKS5yZW1vdmUoKSxyLnJhZGlhbFRpY2tMYXlvdXQ9bSksZyl7ZC5zZXRTY2FsZSgpO3ZhciB5PXUuY2FsY1RpY2tzKGQpLHg9dS5jbGlwRW5kcyhkLHkpLGI9dS5nZXRUaWNrU2lnbnMoZClbMl07dS5kcmF3VGlja3MobixkLHt2YWxzOnksbGF5ZXI6aVsicmFkaWFsLWF4aXMiXSxwYXRoOnUubWFrZVRpY2tQYXRoKGQsMCxiKSx0cmFuc0ZuOnYsY3Jpc3A6ITF9KSx1LmRyYXdHcmlkKG4sZCx7dmFsczp4LGxheWVyOmlbInJhZGlhbC1ncmlkIl0scGF0aDpmdW5jdGlvbih0KXtyZXR1cm4gci5wYXRoQXJjKGQucjJwKHQueCkrbCl9LHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksdS5kcmF3TGFiZWxzKG4sZCx7dmFsczp5LGxheWVyOmlbInJhZGlhbC1heGlzIl0sdHJhbnNGbjp2LGxhYmVsRm5zOnUubWFrZUxhYmVsRm5zKGQsMCl9KX12YXIgXz1yLnJhZGlhbEF4aXNBbmdsZT1yLnZhbmdsZXM/TChEKEMoaC5hbmdsZSksci52YW5nbGVzKSk6aC5hbmdsZSx3PVIoYyxmKSxrPXcrRigtXyk7UChpWyJyYWRpYWwtYXhpcyJdLGcmJihoLnNob3d0aWNrbGFiZWxzfHxoLnRpY2tzKSx7dHJhbnNmb3JtOmt9KSxQKGlbInJhZGlhbC1ncmlkIl0sZyYmaC5zaG93Z3JpZCx7dHJhbnNmb3JtOnd9KSxQKGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIiksZyYmaC5zaG93bGluZSx7eDE6bCx5MTowLHgyOmEseTI6MCx0cmFuc2Zvcm06a30pLmF0dHIoInN0cm9rZS13aWR0aCIsaC5saW5ld2lkdGgpLmNhbGwocy5zdHJva2UsaC5saW5lY29sb3IpfSxPLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nZCxpPXRoaXMucmFkaXVzLGE9dGhpcy5jeCxvPXRoaXMuY3kscz1lLnJhZGlhbGF4aXMsYz10aGlzLmlkKyJ0aXRsZSIsdT12b2lkIDAhPT1yP3I6dGhpcy5yYWRpYWxBeGlzQW5nbGUsZj1DKHUpLGg9TWF0aC5jb3MoZikscD1NYXRoLnNpbihmKSxkPTA7aWYocy50aXRsZSl7dmFyIGc9bC5iQm94KHRoaXMubGF5ZXJzWyJyYWRpYWwtYXhpcyJdLm5vZGUoKSkuaGVpZ2h0LHY9cy50aXRsZS5mb250LnNpemU7ZD0iY291bnRlcmNsb2Nrd2lzZSI9PT1zLnNpZGU/LWctLjQqdjpnKy44KnZ9dGhpcy5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl09bS5kcmF3KG4sYyx7cHJvcENvbnRhaW5lcjpzLHByb3BOYW1lOnRoaXMuaWQrIi5yYWRpYWxheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpTKG4sIkNsaWNrIHRvIGVudGVyIHJhZGlhbCBheGlzIHRpdGxlIiksYXR0cmlidXRlczp7eDphK2kvMipoK2QqcCx5Om8taS8yKnArZCpoLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOi11fX0pfSxPLnVwZGF0ZUFuZ3VsYXJBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLGw9ci5pbm5lclJhZGl1cyxjPXIuY3gsZj1yLmN5LGg9ZS5hbmd1bGFyYXhpcyxwPXIuYW5ndWxhckF4aXM7ci5maWxsVmlld0luaXRpYWxLZXkoImFuZ3VsYXJheGlzLnJvdGF0aW9uIixoLnJvdGF0aW9uKSxwLnNldEdlb21ldHJ5KCkscC5zZXRTY2FsZSgpO3ZhciBkPWZ1bmN0aW9uKHQpe3JldHVybiBwLnQyZyh0LngpfTsibGluZWFyIj09PXAudHlwZSYmInJhZGlhbnMiPT09cC50aGV0YXVuaXQmJihwLnRpY2swPUwocC50aWNrMCkscC5kdGljaz1MKHAuZHRpY2spKTt2YXIgZz1mdW5jdGlvbih0KXtyZXR1cm4gUihjK2EqTWF0aC5jb3ModCksZi1hKk1hdGguc2luKHQpKX0sdj11Lm1ha2VMYWJlbEZucyhwLDApLmxhYmVsU3RhbmRvZmYsbT17eEZuOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCk7cmV0dXJuIE1hdGguY29zKGUpKnZ9LHlGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpLHI9TWF0aC5zaW4oZSk+MD8uMjoxO3JldHVybi1NYXRoLnNpbihlKSoodit0LmZvbnRTaXplKnIpK01hdGguYWJzKE1hdGguY29zKGUpKSoodC5mb250U2l6ZSpUKX0sYW5jaG9yRm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0saGVpZ2h0Rm46ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWQodCk7cmV0dXJuLS41KigxK01hdGguc2luKG4pKSpyfX0seT1JKGgpO3IuYW5ndWxhclRpY2tMYXlvdXQhPT15JiYoaVsiYW5ndWxhci1heGlzIl0uc2VsZWN0QWxsKCIuIitwLl9pZCsidGljayIpLnJlbW92ZSgpLHIuYW5ndWxhclRpY2tMYXlvdXQ9eSk7dmFyIHgsYj11LmNhbGNUaWNrcyhwKTtpZigibGluZWFyIj09PWUuZ3JpZHNoYXBlPyh4PWIubWFwKGQpLG8uYW5nbGVEZWx0YSh4WzBdLHhbMV0pPDAmJih4PXguc2xpY2UoKS5yZXZlcnNlKCkpKTp4PW51bGwsci52YW5nbGVzPXgsImNhdGVnb3J5Ij09PXAudHlwZSYmKGI9Yi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG8uaXNBbmdsZUluc2lkZVNlY3RvcihkKHQpLHIuc2VjdG9ySW5SYWQpfSkpLHAudmlzaWJsZSl7dmFyIF89Imluc2lkZSI9PT1wLnRpY2tzPy0xOjEsdz0ocC5saW5ld2lkdGh8fDEpLzI7dS5kcmF3VGlja3MobixwLHt2YWxzOmIsbGF5ZXI6aVsiYW5ndWxhci1heGlzIl0scGF0aDoiTSIrXyp3KyIsMGgiK18qcC50aWNrbGVuLHRyYW5zRm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KTtyZXR1cm4gZyhlKStGKC1MKGUpKX0sY3Jpc3A6ITF9KSx1LmRyYXdHcmlkKG4scCx7dmFsczpiLGxheWVyOmlbImFuZ3VsYXItZ3JpZCJdLHBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPU1hdGguY29zKGUpLG49TWF0aC5zaW4oZSk7cmV0dXJuIk0iK1tjK2wqcixmLWwqbl0rIkwiK1tjK2EqcixmLWEqbl19LHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksdS5kcmF3TGFiZWxzKG4scCx7dmFsczpiLGxheWVyOmlbImFuZ3VsYXItYXhpcyJdLHJlcG9zaXRpb25PblVwZGF0ZTohMCx0cmFuc0ZuOmZ1bmN0aW9uKHQpe3JldHVybiBnKGQodCkpfSxsYWJlbEZuczptfSl9UChpWyJhbmd1bGFyLWxpbmUiXS5zZWxlY3QoInBhdGgiKSxoLnNob3dsaW5lLHtkOnIucGF0aFN1YnBsb3QoKSx0cmFuc2Zvcm06UihjLGYpfSkuYXR0cigic3Ryb2tlLXdpZHRoIixoLmxpbmV3aWR0aCkuY2FsbChzLnN0cm9rZSxoLmxpbmVjb2xvcil9LE8udXBkYXRlRng9ZnVuY3Rpb24odCxlKXt0aGlzLmdkLl9jb250ZXh0LnN0YXRpY1Bsb3R8fCh0aGlzLnVwZGF0ZUFuZ3VsYXJEcmFnKHQpLHRoaXMudXBkYXRlUmFkaWFsRHJhZyh0LGUsMCksdGhpcy51cGRhdGVSYWRpYWxEcmFnKHQsZSwxKSx0aGlzLnVwZGF0ZU1haW5EcmFnKHQpKX0sTy51cGRhdGVNYWluRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxvPWUubGF5ZXJzLHM9dC5fem9vbWxheWVyLGw9QS5NSU5aT09NLGM9QS5PRkZFREdFLHU9ZS5yYWRpdXMsZj1lLmlubmVyUmFkaXVzLGg9ZS5jeCxwPWUuY3ksbT1lLmN4eCxfPWUuY3l5LHc9ZS5zZWN0b3JJblJhZCxrPWUudmFuZ2xlcyxUPWUucmFkaWFsQXhpcyxTPU0uY2xhbXBUaW55LEU9TS5maW5kWFlhdExlbmd0aCxDPU0uZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyxMPUEuY29ybmVySGFsZldpZHRoLHo9QS5jb3JuZXJMZW4vMixPPWQubWFrZURyYWdnZXIobywicGF0aCIsIm1haW5kcmFnIiwiY3Jvc3NoYWlyIik7bi5zZWxlY3QoTykuYXR0cigiZCIsZS5wYXRoU3VicGxvdCgpKS5hdHRyKCJ0cmFuc2Zvcm0iLFIoaCxwKSk7dmFyIEksRCxQLEYsQixOLGosVixVLHE9e2VsZW1lbnQ6TyxnZDpyLHN1YnBsb3Q6ZS5pZCxwbG90aW5mbzp7aWQ6ZS5pZCx4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXN9LHhheGVzOltlLnhheGlzXSx5YXhlczpbZS55YXhpc119O2Z1bmN0aW9uIEgodCxlKXtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpfWZ1bmN0aW9uIEcodCxlKXtyZXR1cm4gSCh0LW0sZS1fKX1mdW5jdGlvbiBZKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIoXy1lLHQtbSl9ZnVuY3Rpb24gVyh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oLWUpXX1mdW5jdGlvbiBYKHQscil7aWYoMD09PXQpcmV0dXJuIGUucGF0aFNlY3RvcigyKkwpO3ZhciBuPXovdCxpPXItbixhPXIrbixvPU1hdGgubWF4KDAsTWF0aC5taW4odCx1KSkscz1vLUwsbD1vK0w7cmV0dXJuIk0iK1cocyxpKSsiQSIrW3Msc10rIiAwLDAsMCAiK1cocyxhKSsiTCIrVyhsLGEpKyJBIitbbCxsXSsiIDAsMCwxICIrVyhsLGkpKyJaIn1mdW5jdGlvbiBaKHQscixuKXtpZigwPT09dClyZXR1cm4gZS5wYXRoU2VjdG9yKDIqTCk7dmFyIGksYSxvPVcodCxyKSxzPVcodCxuKSxsPVMoKG9bMF0rc1swXSkvMiksYz1TKChvWzFdK3NbMV0pLzIpO2lmKGwmJmMpe3ZhciB1PWMvbCxmPS0xL3UsaD1FKEwsdSxsLGMpO2k9RSh6LGYsaFswXVswXSxoWzBdWzFdKSxhPUUoeixmLGhbMV1bMF0saFsxXVsxXSl9ZWxzZXt2YXIgcCxkO2M/KHA9eixkPUwpOihwPUwsZD16KSxpPVtbbC1wLGMtZF0sW2wrcCxjLWRdXSxhPVtbbC1wLGMrZF0sW2wrcCxjK2RdXX1yZXR1cm4iTSIraS5qb2luKCJMIikrIkwiK2EucmV2ZXJzZSgpLmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gJCh0LGUpe3JldHVybiBlPU1hdGgubWF4KE1hdGgubWluKGUsdSksZiksdDxjP3Q9MDp1LXQ8Yz90PXU6ZTxjP2U9MDp1LWU8YyYmKGU9dSksTWF0aC5hYnMoZS10KT5sPyh0PGU/KFA9dCxGPWUpOihQPWUsRj10KSwhMCk6KFA9bnVsbCxGPW51bGwsITEpfWZ1bmN0aW9uIEoodCxlKXt0PXR8fEIsZT1lfHwiTTAsMFoiLFYuYXR0cigiZCIsdCksVS5hdHRyKCJkIixlKSxkLnRyYW5zaXRpb25ab29tYm94KFYsVSxOLGopLE49ITB9ZnVuY3Rpb24gSyh0LHIpe3ZhciBuLGksYT1JK3Qsbz1EK3Iscz1HKEksRCksbD1NYXRoLm1pbihHKGEsbyksdSksYz1ZKEksRCk7JChzLGwpJiYobj1CK2UucGF0aFNlY3RvcihGKSxQJiYobis9ZS5wYXRoU2VjdG9yKFApKSxpPVgoUCxjKStYKEYsYykpLEoobixpKX1mdW5jdGlvbiBRKHQsZSxyLG4pe3ZhciBpPU0uZmluZEludGVyc2VjdGlvblhZKHIsbixyLFt0LW0sXy1lXSk7cmV0dXJuIEgoaVswXSxpWzFdKX1mdW5jdGlvbiB0dCh0LHIpe3ZhciBuLGksYT1JK3Qsbz1EK3Iscz1ZKEksRCksbD1ZKGEsbyksYz1DKHMsayksZj1DKGwsayk7JChRKEksRCxjWzBdLGNbMV0pLE1hdGgubWluKFEoYSxvLGZbMF0sZlsxXSksdSkpJiYobj1CK2UucGF0aFNlY3RvcihGKSxQJiYobis9ZS5wYXRoU2VjdG9yKFApKSxpPVtaKFAsY1swXSxjWzFdKSxaKEYsY1swXSxjWzFdKV0uam9pbigiICIpKSxKKG4saSl9ZnVuY3Rpb24gZXQoKXtpZihkLnJlbW92ZVpvb21ib3gociksbnVsbCE9PVAmJm51bGwhPT1GKXtkLnNob3dEb3VibGVDbGlja05vdGlmaWVyKHIpO3ZhciB0PVQuX3JsLG49KHRbMV0tdFswXSkvKDEtZi91KS91LGk9W3RbMF0rKFAtZikqbix0WzBdKyhGLWYpKm5dO2EuY2FsbCgiX2d1aVJlbGF5b3V0IixyLGUuaWQrIi5yYWRpYWxheGlzLnJhbmdlIixpKX19ZnVuY3Rpb24gcnQodCxuKXt2YXIgaT1yLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtpZihkLnJlbW92ZVpvb21ib3gociksMj09PXQpe3ZhciBvPXt9O2Zvcih2YXIgcyBpbiBlLnZpZXdJbml0aWFsKW9bZS5pZCsiLiIrc109ZS52aWV3SW5pdGlhbFtzXTtyLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHIsbyl9aS5pbmRleE9mKCJzZWxlY3QiKT4tMSYmMT09PXQmJngobixyLFtlLnhheGlzXSxbZS55YXhpc10sZS5pZCxxKSxpLmluZGV4T2YoImV2ZW50Iik+LTEmJnYuY2xpY2socixuLGUuaWQpfXEucHJlcEZuPWZ1bmN0aW9uKHQsbixhKXt2YXIgbz1yLl9mdWxsTGF5b3V0LmRyYWdtb2RlLGw9Ty5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihJPW4tbC5sZWZ0LEQ9YS1sLnRvcCxrKXt2YXIgYz1NLmZpbmRQb2x5Z29uT2Zmc2V0KHUsd1swXSx3WzFdLGspO0krPW0rY1swXSxEKz1fK2NbMV19c3dpdGNoKG8pe2Nhc2Uiem9vbSI6cS5tb3ZlRm49az90dDpLLHEuY2xpY2tGbj1ydCxxLmRvbmVGbj1ldCxmdW5jdGlvbigpe1A9bnVsbCxGPW51bGwsQj1lLnBhdGhTdWJwbG90KCksTj0hMTt2YXIgdD1yLl9mdWxsTGF5b3V0W2UuaWRdO2o9aSh0LmJnY29sb3IpLmdldEx1bWluYW5jZSgpLChWPWQubWFrZVpvb21ib3gocyxqLGgscCxCKSkuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLFU9ZC5tYWtlQ29ybmVycyhzLGgscCksYihzKX0oKTticmVhaztjYXNlInNlbGVjdCI6Y2FzZSJsYXNzbyI6eSh0LG4sYSxxLG8pfX0sTy5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXt2LmhvdmVyKHIsdCxlLmlkKSxyLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9TyxyLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9ZS5pZH0sTy5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3IuX2RyYWdnaW5nfHxnLnVuaG92ZXIocix0KX0sZy5pbml0KHEpfSxPLnVwZGF0ZVJhZGlhbERyYWc9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMscz1pLmdkLGw9aS5sYXllcnMsYz1pLnJhZGl1cyx1PWkuaW5uZXJSYWRpdXMsZj1pLmN4LGg9aS5jeSxwPWkucmFkaWFsQXhpcyx2PUEucmFkaWFsRHJhZ0JveFNpemUsbT12LzI7aWYocC52aXNpYmxlKXt2YXIgeSx4LF8sVD1DKGkucmFkaWFsQXhpc0FuZ2xlKSxNPXAuX3JsLFM9TVswXSxFPU1bMV0sej1NW3JdLE89Ljc1KihNWzFdLU1bMF0pLygxLWUuaG9sZSkvYztyPyh5PWYrKGMrbSkqTWF0aC5jb3MoVCkseD1oLShjK20pKk1hdGguc2luKFQpLF89InJhZGlhbGRyYWciKTooeT1mKyh1LW0pKk1hdGguY29zKFQpLHg9aC0odS1tKSpNYXRoLnNpbihUKSxfPSJyYWRpYWxkcmFnLWlubmVyIik7dmFyIEksQixOLGo9ZC5tYWtlUmVjdERyYWdnZXIobCxfLCJjcm9zc2hhaXIiLC1tLC1tLHYsdiksVj17ZWxlbWVudDpqLGdkOnN9O1Aobi5zZWxlY3QoaikscC52aXNpYmxlJiZ1PGMse3RyYW5zZm9ybTpSKHkseCl9KSxWLnByZXBGbj1mdW5jdGlvbigpe0k9bnVsbCxCPW51bGwsTj1udWxsLFYubW92ZUZuPVUsVi5kb25lRm49cSxiKHQuX3pvb21sYXllcil9LFYuY2xhbXBGbj1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLnNxcnQodCp0K2UqZSk8QS5NSU5EUkFHJiYodD0wLGU9MCksW3QsZV19LGcuaW5pdChWKX1mdW5jdGlvbiBVKHQsZSl7aWYoSSlJKHQsZSk7ZWxzZXt2YXIgcj1bdCwtZV0sbj1bTWF0aC5jb3MoVCksTWF0aC5zaW4oVCldLGk9TWF0aC5hYnMoby5kb3QocixuKS9NYXRoLnNxcnQoby5kb3QocixyKSkpO2lzTmFOKGkpfHwoST1pPC41P0g6Ryl9fWZ1bmN0aW9uIHEoKXtudWxsIT09Qj9hLmNhbGwoIl9ndWlSZWxheW91dCIscyxpLmlkKyIucmFkaWFsYXhpcy5hbmdsZSIsQik6bnVsbCE9PU4mJmEuY2FsbCgiX2d1aVJlbGF5b3V0IixzLGkuaWQrIi5yYWRpYWxheGlzLnJhbmdlWyIrcisiXSIsTil9ZnVuY3Rpb24gSCh0LGUpe2lmKDAhPT1yKXt2YXIgbj15K3QsYT14K2U7Qj1NYXRoLmF0YW4yKGgtYSxuLWYpLGkudmFuZ2xlcyYmKEI9RChCLGkudmFuZ2xlcykpLEI9TChCKTt2YXIgbz1SKGYsaCkrRigtQik7bFsicmFkaWFsLWF4aXMiXS5hdHRyKCJ0cmFuc2Zvcm0iLG8pLGxbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIikuYXR0cigidHJhbnNmb3JtIixvKTt2YXIgcz1pLmdkLl9mdWxsTGF5b3V0LGM9c1tpLmlkXTtpLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZShzLGMsQil9fWZ1bmN0aW9uIEcodCxlKXt2YXIgbj1vLmRvdChbdCwtZV0sW01hdGguY29zKFQpLE1hdGguc2luKFQpXSk7aWYoTj16LU8qbixPPjA9PShyP04+UzpOPEUpKXt2YXIgbD1zLl9mdWxsTGF5b3V0LGM9bFtpLmlkXTtwLnJhbmdlW3JdPU4scC5fcmxbcl09TixpLnVwZGF0ZVJhZGlhbEF4aXMobCxjKSxpLnhheGlzLnNldFJhbmdlKCksaS54YXhpcy5zZXRTY2FsZSgpLGkueWF4aXMuc2V0UmFuZ2UoKSxpLnlheGlzLnNldFNjYWxlKCk7dmFyIHU9ITE7Zm9yKHZhciBmIGluIGkudHJhY2VIYXNoKXt2YXIgaD1pLnRyYWNlSGFzaFtmXSxkPW8uZmlsdGVyVmlzaWJsZShoKTtoWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdChzLGksZCxjKSxhLnRyYWNlSXMoZiwiZ2wiKSYmZC5sZW5ndGgmJih1PSEwKX11JiYodyhzKSxrKHMpKX1lbHNlIE49bnVsbH19LE8udXBkYXRlQW5ndWxhckRyYWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2QsaT1lLmxheWVycyxzPWUucmFkaXVzLGM9ZS5hbmd1bGFyQXhpcyx1PWUuY3gsZj1lLmN5LGg9ZS5jeHgscD1lLmN5eSx2PUEuYW5ndWxhckRyYWdCb3hTaXplLG09ZC5tYWtlRHJhZ2dlcihpLCJwYXRoIiwiYW5ndWxhcmRyYWciLCJtb3ZlIikseT17ZWxlbWVudDptLGdkOnJ9O2Z1bmN0aW9uIHgodCxlKXtyZXR1cm4gTWF0aC5hdGFuMihwK3YtZSx0LWgtdil9bi5zZWxlY3QobSkuYXR0cigiZCIsZS5wYXRoQW5udWx1cyhzLHMrdikpLmF0dHIoInRyYW5zZm9ybSIsUih1LGYpKS5jYWxsKF8sIm1vdmUiKTt2YXIgVCxNLFMsRSxDLHosTz1pLmZyb250cGxvdC5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLEk9Ty5zZWxlY3RBbGwoIi5wb2ludCIpLEQ9Ty5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKTtmdW5jdGlvbiBQKHQscyl7dmFyIGQ9ZS5nZC5fZnVsbExheW91dCxnPWRbZS5pZF0sdj14KFQrdCxNK3MpLG09TCh2LXopO2lmKEU9UyttLGkuZnJvbnRwbG90LmF0dHIoInRyYW5zZm9ybSIsUihlLnhPZmZzZXQyLGUueU9mZnNldDIpK0YoWy1tLGgscF0pKSxlLnZhbmdsZXMpe0M9ZS5yYWRpYWxBeGlzQW5nbGUrbTt2YXIgeT1SKHUsZikrRigtbSksYj1SKHUsZikrRigtQyk7aS5iZy5hdHRyKCJ0cmFuc2Zvcm0iLHkpLGlbInJhZGlhbC1ncmlkIl0uYXR0cigidHJhbnNmb3JtIix5KSxpWyJyYWRpYWwtYXhpcyJdLmF0dHIoInRyYW5zZm9ybSIsYiksaVsicmFkaWFsLWxpbmUiXS5zZWxlY3QoImxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGIpLGUudXBkYXRlUmFkaWFsQXhpc1RpdGxlKGQsZyxDKX1lbHNlIGUuY2xpcFBhdGhzLmZvclRyYWNlcy5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLFIoaCxwKStGKG0pKTtJLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPWwuZ2V0VHJhbnNsYXRlKHQpO3QuYXR0cigidHJhbnNmb3JtIixSKGUueCxlLnkpK0YoW21dKSl9KSxELmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXQuc2VsZWN0KCJ0ZXh0Iikscj1sLmdldFRyYW5zbGF0ZSh0KTt0LmF0dHIoInRyYW5zZm9ybSIsRihbbSxlLmF0dHIoIngiKSxlLmF0dHIoInkiKV0pK1Ioci54LHIueSkpfSksYy5yb3RhdGlvbj1vLm1vZEhhbGYoRSwzNjApLGUudXBkYXRlQW5ndWxhckF4aXMoZCxnKSxlLl9oYXNDbGlwT25BeGlzRmFsc2UmJiFvLmlzRnVsbENpcmNsZShlLnNlY3RvckluUmFkKSYmTy5jYWxsKGwuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxlKTt2YXIgXz0hMTtmb3IodmFyIEEgaW4gZS50cmFjZUhhc2gpaWYoYS50cmFjZUlzKEEsImdsIikpe3ZhciBQPWUudHJhY2VIYXNoW0FdLEI9by5maWx0ZXJWaXNpYmxlKFApO1BbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHIsZSxCLGcpLEIubGVuZ3RoJiYoXz0hMCl9XyYmKHcociksayhyKSl9ZnVuY3Rpb24gQigpe0Quc2VsZWN0KCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgdD17fTt0W2UuaWQrIi5hbmd1bGFyYXhpcy5yb3RhdGlvbiJdPUUsZS52YW5nbGVzJiYodFtlLmlkKyIucmFkaWFsYXhpcy5hbmdsZSJdPUMpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixyLHQpfXkucHJlcEZuPWZ1bmN0aW9uKHIsbixpKXt2YXIgYT10W2UuaWRdO1M9YS5hbmd1bGFyYXhpcy5yb3RhdGlvbjt2YXIgbz1tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1Q9bi1vLmxlZnQsTT1pLW8udG9wLHo9eChULE0pLHkubW92ZUZuPVAseS5kb25lRm49QixiKHQuX3pvb21sYXllcil9LGUudmFuZ2xlcyYmIW8uaXNGdWxsQ2lyY2xlKGUuc2VjdG9ySW5SYWQpJiYoeS5wcmVwRm49by5ub29wLF8obi5zZWxlY3QobSksbnVsbCkpLGcuaW5pdCh5KX0sTy5pc1B0SW5zaWRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VjdG9ySW5SYWQscj10aGlzLnZhbmdsZXMsbj10aGlzLmFuZ3VsYXJBeGlzLmMyZyh0LnRoZXRhKSxpPXRoaXMucmFkaWFsQXhpcyxhPWkuYzJsKHQucikscz1pLl9ybDtyZXR1cm4ocj9NLmlzUHRJbnNpZGVQb2x5Z29uOm8uaXNQdEluc2lkZVNlY3RvcikoYSxuLHMsZSxyKX0sTy5wYXRoQXJjPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VjdG9ySW5SYWQscj10aGlzLnZhbmdsZXM7cmV0dXJuKHI/TS5wYXRoUG9seWdvbjpvLnBhdGhBcmMpKHQsZVswXSxlWzFdLHIpfSxPLnBhdGhTZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcztyZXR1cm4ocj9NLnBhdGhQb2x5Z29uOm8ucGF0aFNlY3RvcikodCxlWzBdLGVbMV0scil9LE8ucGF0aEFubnVsdXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnNlY3RvckluUmFkLG49dGhpcy52YW5nbGVzO3JldHVybihuP00ucGF0aFBvbHlnb25Bbm51bHVzOm8ucGF0aEFubnVsdXMpKHQsZSxyWzBdLHJbMV0sbil9LE8ucGF0aFN1YnBsb3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlubmVyUmFkaXVzLGU9dGhpcy5yYWRpdXM7cmV0dXJuIHQ/dGhpcy5wYXRoQW5udWx1cyh0LGUpOnRoaXMucGF0aFNlY3RvcihlKX0sTy5maWxsVmlld0luaXRpYWxLZXk9ZnVuY3Rpb24odCxlKXt0IGluIHRoaXMudmlld0luaXRpYWx8fCh0aGlzLnZpZXdJbml0aWFsW3RdPWUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjU5NSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiOjY2NSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjo2ODUsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcyMCwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjczOSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSI6NzQ3LCIuLi9jYXJ0ZXNpYW4vZHJhZ2JveCI6NzU2LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo3NjUsIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NzY2LCIuLi9wbG90cyI6ODEwLCIuL2NvbnN0YW50cyI6ODExLCIuL2hlbHBlcnMiOjgxMiwiLi9zZXRfY29udmVydCI6ODIzLGQzOjE1NCx0aW55Y29sb3IyOjUyMX1dLDgyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGE9bi5kZWcycmFkLG89bi5yYWQyZGVnO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGkodCxyKSx0Ll9pZCl7Y2FzZSJ4IjpjYXNlInJhZGlhbGF4aXMiOiFmdW5jdGlvbih0LGUpe3ZhciByPWUuX3N1YnBsb3Q7dC5zZXRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBlPXQuX3JsWzBdLG49dC5fcmxbMV0saT1yLmlubmVyUmFkaXVzLGE9KHIucmFkaXVzLWkpLyhuLWUpLG89aS9hLHM9ZT5uP2Z1bmN0aW9uKHQpe3JldHVybiB0PD0wfTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MH07dC5jMmc9ZnVuY3Rpb24ocil7dmFyIG49dC5jMmwociktZTtyZXR1cm4ocyhuKT9uOjApK299LHQuZzJjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmwyYyhyK2Utbyl9LHQuZzJwPWZ1bmN0aW9uKHQpe3JldHVybiB0KmF9LHQuYzJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmcycCh0LmMyZyhlKSl9fX0odCxlKTticmVhaztjYXNlImFuZ3VsYXJheGlzIjohZnVuY3Rpb24odCxlKXt2YXIgcj10LnR5cGU7aWYoImxpbmVhciI9PT1yKXt2YXIgaT10LmQyYyxzPXQuYzJkO3QuZDJjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuImRlZ3JlZXMiPT09ZT9hKHQpOnR9KGkodCksZSl9LHQuYzJkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMoZnVuY3Rpb24odCxlKXtyZXR1cm4iZGVncmVlcyI9PT1lP28odCk6dH0odCxlKSl9fXQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUsaSl7dmFyIGEsbyxzPWVbaV0sbD1lLl9sZW5ndGgsYz1mdW5jdGlvbihyKXtyZXR1cm4gdC5kMmMocixlLnRoZXRhdW5pdCl9O2lmKHMpe2lmKG4uaXNUeXBlZEFycmF5KHMpJiYibGluZWFyIj09PXIpe2lmKGw9PT1zLmxlbmd0aClyZXR1cm4gcztpZihzLnN1YmFycmF5KXJldHVybiBzLnN1YmFycmF5KDAsbCl9Zm9yKGE9bmV3IEFycmF5KGwpLG89MDtvPGw7bysrKWFbb109YyhzW29dKX1lbHNle3ZhciB1PWkrIjAiLGY9ImQiK2ksaD11IGluIGU/YyhlW3VdKTowLHA9ZVtmXT9jKGVbZl0pOih0LnBlcmlvZHx8MipNYXRoLlBJKS9sO2ZvcihhPW5ldyBBcnJheShsKSxvPTA7bzxsO28rKylhW29dPWgrbypwfXJldHVybiBhfSx0LnNldEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGkscyxsLGMsdT1lLnNlY3RvcixmPXUubWFwKGEpLGg9e2Nsb2Nrd2lzZTotMSxjb3VudGVyY2xvY2t3aXNlOjF9W3QuZGlyZWN0aW9uXSxwPWEodC5yb3RhdGlvbiksZD1mdW5jdGlvbih0KXtyZXR1cm4gaCp0K3B9LGc9ZnVuY3Rpb24odCl7cmV0dXJuKHQtcCkvaH07c3dpdGNoKHIpe2Nhc2UibGluZWFyIjpzPWk9bi5pZGVudGl0eSxjPWEsbD1vLHQucmFuZ2U9bi5pc0Z1bGxDaXJjbGUoZik/W3VbMF0sdVswXSszNjBdOmYubWFwKGcpLm1hcChvKTticmVhaztjYXNlImNhdGVnb3J5Ijp2YXIgdj10Ll9jYXRlZ29yaWVzLmxlbmd0aCxtPXQucGVyaW9kP01hdGgubWF4KHQucGVyaW9kLHYpOnY7cz1jPWZ1bmN0aW9uKHQpe3JldHVybiAyKnQqTWF0aC5QSS9tfSxpPWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQqbS9NYXRoLlBJLzJ9LHQucmFuZ2U9WzAsbV19dC5jMmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQocyh0KSl9LHQuZzJjPWZ1bmN0aW9uKHQpe3JldHVybiBpKGcodCkpfSx0LnQyZz1mdW5jdGlvbih0KXtyZXR1cm4gZChjKHQpKX0sdC5nMnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwoZyh0KSl9fX0odCxlKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjc2Nn1dLDgyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4vZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYz1vLnR5cGUsdT1vLmF0dHJpYnV0ZXMsZj1vLmhhbmRsZURlZmF1bHRzLGg9by5wYXJ0aXRpb258fCJ4IixwPWUuX3N1YnBsb3RzW2NdLGQ9cC5sZW5ndGgsZz1kJiZwWzBdLnJlcGxhY2UoL1xkKyQvLCIiKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCx1LHQsZSl9Zm9yKHZhciBtPTA7bTxkO20rKyl7dmFyIHk9cFttXTtzPXRbeV0/dFt5XTp0W3ldPXt9LGw9aS5uZXdDb250YWluZXIoZSx5LGcpLHYoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbik7dmFyIHg9e307eFtoXT1bbS9kLChtKzEpL2RdLGEobCxlLHYseCksby5pZD15LGYocyxsLHYsbyl9fX0seyIuLi9saWIiOjcwMCwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzM4LCIuL2RvbWFpbiI6NzczfV0sODI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdGVybmFyeSIpLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsYT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXg7ci5uYW1lPSJ0ZXJuYXJ5Ijt2YXIgbz1yLmF0dHI9InN1YnBsb3QiO3IuaWRSb290PSJ0ZXJuYXJ5IixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9YSgidGVybmFyeSIpLChyLmF0dHJpYnV0ZXM9e30pW29dPXt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6InRlcm5hcnkiLGVkaXRUeXBlOiJjYWxjIn0sci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWUuX3N1YnBsb3RzLnRlcm5hcnksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9aShyLCJ0ZXJuYXJ5IixzKSxjPWVbc10uX3N1YnBsb3Q7Y3x8KGM9bmV3IG4oe2lkOnMsZ3JhcGhEaXY6dCxjb250YWluZXI6ZS5fdGVybmFyeWxheWVyLm5vZGUoKX0sZSksZVtzXS5fc3VicGxvdD1jKSxjLnBsb3QobCxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLnRlcm5hcnl8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLnBsb3RDb250YWluZXIucmVtb3ZlKCkscy5jbGlwRGVmLnJlbW92ZSgpLHMuY2xpcERlZlJlbGF0aXZlLnJlbW92ZSgpLHMubGF5ZXJzWyJhLXRpdGxlIl0ucmVtb3ZlKCkscy5sYXllcnNbImItdGl0bGUiXS5yZW1vdmUoKSxzLmxheWVyc1siYy10aXRsZSJdLnJlbW92ZSgpKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6Nzg0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MjYsIi4vbGF5b3V0X2RlZmF1bHRzIjo4MjcsIi4vdGVybmFyeSI6ODI4fV0sODI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD17dGl0bGU6YS50aXRsZSxjb2xvcjphLmNvbG9yLHRpY2ttb2RlOmEudGlja21vZGUsbnRpY2tzOnMoe30sYS5udGlja3Mse2RmbHQ6NixtaW46MX0pLHRpY2swOmEudGljazAsZHRpY2s6YS5kdGljayx0aWNrdmFsczphLnRpY2t2YWxzLHRpY2t0ZXh0OmEudGlja3RleHQsdGlja3M6YS50aWNrcyx0aWNrbGVuOmEudGlja2xlbix0aWNrd2lkdGg6YS50aWNrd2lkdGgsdGlja2NvbG9yOmEudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmEuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6YS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmEudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDphLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6YS50aWNrc3VmZml4LHNob3dleHBvbmVudDphLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDphLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmEuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6YS50aWNrZm9udCx0aWNrYW5nbGU6YS50aWNrYW5nbGUsdGlja2Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmEudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmEuaG92ZXJmb3JtYXQsc2hvd2xpbmU6cyh7fSxhLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmEubGluZWNvbG9yLGxpbmV3aWR0aDphLmxpbmV3aWR0aCxzaG93Z3JpZDpzKHt9LGEuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6YS5ncmlkY29sb3IsZ3JpZHdpZHRoOmEuZ3JpZHdpZHRoLGxheWVyOmEubGF5ZXIsbWluOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH0sX2RlcHJlY2F0ZWQ6e3RpdGxlOmEuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmEuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sYz1lLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6InRlcm5hcnkifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxzdW06e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLG1pbjowfSxhYXhpczpsLGJheGlzOmwsY2F4aXM6bH0sInBsb3QiLCJmcm9tLXJvb3QiKTtjLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxjLmFheGlzLnVpcmV2aXNpb249Yy5iYXhpcy51aXJldmlzaW9uPWMuY2F4aXMudWlyZXZpc2lvbj17dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NjAsIi4uL2RvbWFpbiI6NzczfV0sODI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxjPXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIiksZj10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksaD1bImFheGlzIiwiYmF4aXMiLCJjYXhpcyJdO2Z1bmN0aW9uIHAodCxlLHIsYSl7dmFyIG8scyxsLGM9cigiYmdjb2xvciIpLHU9cigic3VtIik7YS5iZ0NvbG9yPW4uY29tYmluZShjLGEucGFwZXJfYmdjb2xvcik7Zm9yKHZhciBmPTA7ZjxoLmxlbmd0aDtmKyspcz10W289aFtmXV18fHt9LChsPWkubmV3Q29udGFpbmVyKGUsbykpLl9uYW1lPW8sZChzLGwsYSxlKTt2YXIgcD1lLmFheGlzLGc9ZS5iYXhpcyx2PWUuY2F4aXM7cC5taW4rZy5taW4rdi5taW4+PXUmJihwLm1pbj0wLGcubWluPTAsdi5taW49MCx0LmFheGlzJiZkZWxldGUgdC5hYXhpcy5taW4sdC5iYXhpcyYmZGVsZXRlIHQuYmF4aXMubWluLHQuY2F4aXMmJmRlbGV0ZSB0LmNheGlzLm1pbil9ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1mW2UuX25hbWVdO2Z1bmN0aW9uIG8ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGkscixuKX1vKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pLGUudHlwZT0ibGluZWFyIjt2YXIgaD1vKCJjb2xvciIpLHA9aCE9PWkuY29sb3IuZGZsdD9oOnIuZm9udC5jb2xvcixkPWUuX25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCksZz0iQ29tcG9uZW50ICIrZCx2PW8oInRpdGxlLnRleHQiLGcpO2UuX2hvdmVydGl0bGU9dj09PWc/djpkLGEuY29lcmNlRm9udChvLCJ0aXRsZS5mb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipyLmZvbnQuc2l6ZSksY29sb3I6cH0pLG8oIm1pbiIpLGModCxlLG8sImxpbmVhciIpLHModCxlLG8sImxpbmVhciIse30pLGwodCxlLG8se291dGVyVGlja3M6ITB9KSxvKCJzaG93dGlja2xhYmVscyIpJiYoYS5jb2VyY2VGb250KG8sInRpY2tmb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpyLmZvbnQuc2l6ZSxjb2xvcjpwfSksbygidGlja2FuZ2xlIiksbygidGlja2Zvcm1hdCIpKSx1KHQsZSxvLHtkZmx0Q29sb3I6aCxiZ0NvbG9yOnIuYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6aX0pLG8oImhvdmVyZm9ybWF0IiksbygibGF5ZXIiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6InRlcm5hcnkiLGF0dHJpYnV0ZXM6ZixoYW5kbGVEZWZhdWx0czpwLGZvbnQ6ZS5mb250LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6NzYyLCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6NzY3LCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo3NjgsIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3NjksIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjgyNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODI2fV0sODI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz1vLl8sbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSx1PXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi9wbG90cyIpLHA9dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxkPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksbT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCx5PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLHg9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LGI9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIF8odCxlKXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuaW5pdChlKSx0aGlzLm1ha2VGcmFtZXdvcmsoZSksdGhpcy5hVGlja0xheW91dD1udWxsLHRoaXMuYlRpY2tMYXlvdXQ9bnVsbCx0aGlzLmNUaWNrTGF5b3V0PW51bGx9ZS5leHBvcnRzPV87dmFyIHc9Xy5wcm90b3R5cGU7dy5pbml0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGFpbmVyPXQuX3Rlcm5hcnlsYXllcix0aGlzLmRlZnM9dC5fZGVmcyx0aGlzLmxheW91dElkPXQuX3VpZCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fX0sdy5wbG90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0aGlzLmlkXSxuPWUuX3NpemU7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXtpZighMT09PXRbaV1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhyKSx0aGlzLmFkanVzdExheW91dChyLG4pLGguZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ3JhcGhEaXYsdGhpcyx0LHIpLHRoaXMubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5jYWxsKGwuZmlsbCxyLmJnY29sb3IpfSx3Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaERpdixyPXRbdGhpcy5pZF0sbj10aGlzLmNsaXBJZD0iY2xpcCIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkLGk9dGhpcy5jbGlwSWRSZWxhdGl2ZT0iY2xpcC1yZWxhdGl2ZSIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkO3RoaXMuY2xpcERlZj1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsImNsaXBQYXRoIixuLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIil9KSx0aGlzLmNsaXBEZWZSZWxhdGl2ZT1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsImNsaXBQYXRoIixpLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIil9KSx0aGlzLnBsb3RDb250YWluZXI9by5lbnN1cmVTaW5nbGUodGhpcy5jb250YWluZXIsImciLHRoaXMuaWQpLHRoaXMudXBkYXRlTGF5ZXJzKHIpLGMuc2V0Q2xpcFVybCh0aGlzLmxheWVycy5iYWNrcGxvdCxuLGUpLGMuc2V0Q2xpcFVybCh0aGlzLmxheWVycy5ncmlkcyxuLGUpfSx3LnVwZGF0ZUxheWVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheWVycyxyPVsiZHJhZ2xheWVyIiwicGxvdGJnIiwiYmFja3Bsb3QiLCJncmlkcyJdOyJiZWxvdyB0cmFjZXMiPT09dC5hYXhpcy5sYXllciYmci5wdXNoKCJhYXhpcyIsImFsaW5lIiksImJlbG93IHRyYWNlcyI9PT10LmJheGlzLmxheWVyJiZyLnB1c2goImJheGlzIiwiYmxpbmUiKSwiYmVsb3cgdHJhY2VzIj09PXQuY2F4aXMubGF5ZXImJnIucHVzaCgiY2F4aXMiLCJjbGluZSIpLHIucHVzaCgiZnJvbnRwbG90IiksImFib3ZlIHRyYWNlcyI9PT10LmFheGlzLmxheWVyJiZyLnB1c2goImFheGlzIiwiYWxpbmUiKSwiYWJvdmUgdHJhY2VzIj09PXQuYmF4aXMubGF5ZXImJnIucHVzaCgiYmF4aXMiLCJibGluZSIpLCJhYm92ZSB0cmFjZXMiPT09dC5jYXhpcy5sYXllciYmci5wdXNoKCJjYXhpcyIsImNsaW5lIik7dmFyIGk9dGhpcy5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiZy50b3BsZXZlbCIpLmRhdGEocixTdHJpbmcpLGE9WyJhZ3JpZCIsImJncmlkIiwiY2dyaWQiXTtpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJ0b3BsZXZlbCAiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2VbdF09ciwiZnJvbnRwbG90Ij09PXQ/ci5hcHBlbmQoImciKS5jbGFzc2VkKCJzY2F0dGVybGF5ZXIiLCEwKToiYmFja3Bsb3QiPT09dD9yLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1hcGxheWVyIiwhMCk6InBsb3RiZyI9PT10P3IuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIik6ImFsaW5lIj09PXR8fCJibGluZSI9PT10fHwiY2xpbmUiPT09dD9yLmFwcGVuZCgicGF0aCIpOiJncmlkcyI9PT10JiZhLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1yLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdyaWQgIit0LCEwKX0pfSksaS5vcmRlcigpfTt2YXIgaz1NYXRoLnNxcnQoNC8zKTt3LmFkanVzdExheW91dD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxoPXRoaXMscD10LmRvbWFpbixkPShwLnhbMF0rcC54WzFdKS8yLGc9KHAueVswXStwLnlbMV0pLzIsdj1wLnhbMV0tcC54WzBdLG09cC55WzFdLXAueVswXSx5PXYqZS53LHg9bSplLmgsYj10LnN1bSxfPXQuYWF4aXMubWluLHc9dC5iYXhpcy5taW4sVD10LmNheGlzLm1pbjt5PmsqeD9pPShhPXgpKms6YT0oaT15KS9rLG89dippL3kscz1tKmEveCxyPWUubCtlLncqZC1pLzIsbj1lLnQrZS5oKigxLWcpLWEvMixoLngwPXIsaC55MD1uLGgudz1pLGguaD1hLGguc3VtPWIsaC54YXhpcz17dHlwZToibGluZWFyIixyYW5nZTpbXysyKlQtYixiLV8tMip3XSxkb21haW46W2Qtby8yLGQrby8yXSxfaWQ6IngifSx1KGgueGF4aXMsaC5ncmFwaERpdi5fZnVsbExheW91dCksaC54YXhpcy5zZXRTY2FsZSgpLGgueGF4aXMuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmE+PWguYWF4aXMucmFuZ2VbMF0mJnQuYTw9aC5hYXhpcy5yYW5nZVsxXSYmdC5iPj1oLmJheGlzLnJhbmdlWzFdJiZ0LmI8PWguYmF4aXMucmFuZ2VbMF0mJnQuYz49aC5jYXhpcy5yYW5nZVsxXSYmdC5jPD1oLmNheGlzLnJhbmdlWzBdfSxoLnlheGlzPXt0eXBlOiJsaW5lYXIiLHJhbmdlOltfLGItdy1UXSxkb21haW46W2ctcy8yLGcrcy8yXSxfaWQ6InkifSx1KGgueWF4aXMsaC5ncmFwaERpdi5fZnVsbExheW91dCksaC55YXhpcy5zZXRTY2FsZSgpLGgueWF4aXMuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3ZhciBBPWgueWF4aXMuZG9tYWluWzBdLE09aC5hYXhpcz1mKHt9LHQuYWF4aXMse3JhbmdlOltfLGItdy1UXSxzaWRlOiJsZWZ0Iix0aWNrYW5nbGU6KCt0LmFheGlzLnRpY2thbmdsZXx8MCktMzAsZG9tYWluOltBLEErcyprXSxhbmNob3I6ImZyZWUiLHBvc2l0aW9uOjAsX2lkOiJ5IixfbGVuZ3RoOml9KTt1KE0saC5ncmFwaERpdi5fZnVsbExheW91dCksTS5zZXRTY2FsZSgpO3ZhciBTPWguYmF4aXM9Zih7fSx0LmJheGlzLHtyYW5nZTpbYi1fLVQsd10sc2lkZToiYm90dG9tIixkb21haW46aC54YXhpcy5kb21haW4sYW5jaG9yOiJmcmVlIixwb3NpdGlvbjowLF9pZDoieCIsX2xlbmd0aDppfSk7dShTLGguZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLFMuc2V0U2NhbGUoKTt2YXIgRT1oLmNheGlzPWYoe30sdC5jYXhpcyx7cmFuZ2U6W2ItXy13LFRdLHNpZGU6InJpZ2h0Iix0aWNrYW5nbGU6KCt0LmNheGlzLnRpY2thbmdsZXx8MCkrMzAsZG9tYWluOltBLEErcyprXSxhbmNob3I6ImZyZWUiLHBvc2l0aW9uOjAsX2lkOiJ5IixfbGVuZ3RoOml9KTt1KEUsaC5ncmFwaERpdi5fZnVsbExheW91dCksRS5zZXRTY2FsZSgpO3ZhciBDPSJNIityKyIsIisobithKSsiaCIraSsibC0iK2kvMisiLC0iK2ErIloiO2guY2xpcERlZi5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixDKSxoLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQyk7dmFyIEw9Ik0wLCIrYSsiaCIraSsibC0iK2kvMisiLC0iK2ErIloiO2guY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEwpO3ZhciB6PSJ0cmFuc2xhdGUoIityKyIsIituKyIpIjtoLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLC5tYXBsYXllciIpLmF0dHIoInRyYW5zZm9ybSIseiksaC5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgTz0idHJhbnNsYXRlKCIrKHItUy5fb2Zmc2V0KSsiLCIrKG4rYSkrIikiO2gubGF5ZXJzLmJheGlzLmF0dHIoInRyYW5zZm9ybSIsTyksaC5sYXllcnMuYmdyaWQuYXR0cigidHJhbnNmb3JtIixPKTt2YXIgST0idHJhbnNsYXRlKCIrKHIraS8yKSsiLCIrbisiKXJvdGF0ZSgzMCl0cmFuc2xhdGUoMCwiKy1NLl9vZmZzZXQrIikiO2gubGF5ZXJzLmFheGlzLmF0dHIoInRyYW5zZm9ybSIsSSksaC5sYXllcnMuYWdyaWQuYXR0cigidHJhbnNmb3JtIixJKTt2YXIgRD0idHJhbnNsYXRlKCIrKHIraS8yKSsiLCIrbisiKXJvdGF0ZSgtMzApdHJhbnNsYXRlKDAsIistRS5fb2Zmc2V0KyIpIjtoLmxheWVycy5jYXhpcy5hdHRyKCJ0cmFuc2Zvcm0iLEQpLGgubGF5ZXJzLmNncmlkLmF0dHIoInRyYW5zZm9ybSIsRCksaC5kcmF3QXhlcyghMCksaC5sYXllcnMuYWxpbmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsTS5zaG93bGluZT8iTSIrcisiLCIrKG4rYSkrImwiK2kvMisiLC0iK2E6Ik0wLDAiKS5jYWxsKGwuc3Ryb2tlLE0ubGluZWNvbG9yfHwiIzAwMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChNLmxpbmV3aWR0aHx8MCkrInB4IiksaC5sYXllcnMuYmxpbmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsUy5zaG93bGluZT8iTSIrcisiLCIrKG4rYSkrImgiK2k6Ik0wLDAiKS5jYWxsKGwuc3Ryb2tlLFMubGluZWNvbG9yfHwiIzAwMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChTLmxpbmV3aWR0aHx8MCkrInB4IiksaC5sYXllcnMuY2xpbmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsRS5zaG93bGluZT8iTSIrKHIraS8yKSsiLCIrbisibCIraS8yKyIsIithOiJNMCwwIikuY2FsbChsLnN0cm9rZSxFLmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoRS5saW5ld2lkdGh8fDApKyJweCIpLGguZ3JhcGhEaXYuX2NvbnRleHQuc3RhdGljUGxvdHx8aC5pbml0SW50ZXJhY3Rpb25zKCksYy5zZXRDbGlwVXJsKGgubGF5ZXJzLmZyb250cGxvdCxoLl9oYXNDbGlwT25BeGlzRmFsc2U/bnVsbDpoLmNsaXBJZCxoLmdyYXBoRGl2KX0sdy5kcmF3QXhlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoRGl2LHI9dGhpcy5pZC5zdWJzdHIoNykrInRpdGxlIixuPXRoaXMubGF5ZXJzLGk9dGhpcy5hYXhpcyxhPXRoaXMuYmF4aXMsbz10aGlzLmNheGlzO2lmKHRoaXMuZHJhd0F4KGkpLHRoaXMuZHJhd0F4KGEpLHRoaXMuZHJhd0F4KG8pLHQpe3ZhciBsPU1hdGgubWF4KGkuc2hvd3RpY2tsYWJlbHM/aS50aWNrZm9udC5zaXplLzI6MCwoby5zaG93dGlja2xhYmVscz8uNzUqby50aWNrZm9udC5zaXplOjApKygib3V0c2lkZSI9PT1vLnRpY2tzPy44NypvLnRpY2tsZW46MCkpLGM9KGEuc2hvd3RpY2tsYWJlbHM/YS50aWNrZm9udC5zaXplOjApKygib3V0c2lkZSI9PT1hLnRpY2tzP2EudGlja2xlbjowKSszO25bImEtdGl0bGUiXT12LmRyYXcoZSwiYSIrcix7cHJvcENvbnRhaW5lcjppLHByb3BOYW1lOnRoaXMuaWQrIi5hYXhpcy50aXRsZSIscGxhY2Vob2xkZXI6cyhlLCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQSB0aXRsZSIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MCt0aGlzLncvMix5OnRoaXMueTAtaS50aXRsZS5mb250LnNpemUvMy1sLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSksblsiYi10aXRsZSJdPXYuZHJhdyhlLCJiIityLHtwcm9wQ29udGFpbmVyOmEscHJvcE5hbWU6dGhpcy5pZCsiLmJheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpzKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBCIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwLWMseTp0aGlzLnkwK3RoaXMuaCsuODMqYS50aXRsZS5mb250LnNpemUrYywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pLG5bImMtdGl0bGUiXT12LmRyYXcoZSwiYyIrcix7cHJvcENvbnRhaW5lcjpvLHByb3BOYW1lOnRoaXMuaWQrIi5jYXhpcy50aXRsZSIscGxhY2Vob2xkZXI6cyhlLCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQyB0aXRsZSIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MCt0aGlzLncrYyx5OnRoaXMueTArdGhpcy5oKy44MypvLnRpdGxlLmZvbnQuc2l6ZStjLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9fSx3LmRyYXdBeD1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZ3JhcGhEaXYsbj10Ll9uYW1lLGk9bi5jaGFyQXQoMCksYT10Ll9pZCxzPXRoaXMubGF5ZXJzW25dLGw9aSsidGlja0xheW91dCIsYz0oZT10KS50aWNrcytTdHJpbmcoZS50aWNrbGVuKStTdHJpbmcoZS5zaG93dGlja2xhYmVscyk7dGhpc1tsXSE9PWMmJihzLnNlbGVjdEFsbCgiLiIrYSsidGljayIpLnJlbW92ZSgpLHRoaXNbbF09YyksdC5zZXRTY2FsZSgpO3ZhciB1PXAuY2FsY1RpY2tzKHQpLGY9cC5jbGlwRW5kcyh0LHUpLGg9cC5tYWtlVHJhbnNGbih0KSxkPXAuZ2V0VGlja1NpZ25zKHQpWzJdLGc9by5kZWcycmFkKDMwKSx2PWQqKHQubGluZXdpZHRofHwxKS8yLG09ZCp0LnRpY2tsZW4seT10aGlzLncseD10aGlzLmgsYj0iYiI9PT1pPyJNMCwiK3YrImwiK01hdGguc2luKGcpKm0rIiwiK01hdGguY29zKGcpKm06Ik0iK3YrIiwwbCIrTWF0aC5jb3MoZykqbSsiLCIrLU1hdGguc2luKGcpKm0sXz17YToiTTAsMGwiK3grIiwtIit5LzIsYjoiTTAsMGwtIit5LzIrIiwtIit4LGM6Ik0wLDBsLSIreCsiLCIreS8yfVtpXTtwLmRyYXdUaWNrcyhyLHQse3ZhbHM6Imluc2lkZSI9PT10LnRpY2tzP2Y6dSxsYXllcjpzLHBhdGg6Yix0cmFuc0ZuOmgsY3Jpc3A6ITF9KSxwLmRyYXdHcmlkKHIsdCx7dmFsczpmLGxheWVyOnRoaXMubGF5ZXJzW2krImdyaWQiXSxwYXRoOl8sdHJhbnNGbjpoLGNyaXNwOiExfSkscC5kcmF3TGFiZWxzKHIsdCx7dmFsczp1LGxheWVyOnMsdHJhbnNGbjpoLGxhYmVsRm5zOnAubWFrZUxhYmVsRm5zKHQsMCwzMCl9KX07dmFyIFQ9Yi5NSU5aT09NLzIrLjg3LEE9Im0tMC44NywuNWgiK1QrInYzaC0iKyhUKzUuMikrImwiKyhULzIrMi42KSsiLC0iKyguODcqVCs0LjUpKyJsMi42LDEuNWwtIitULzIrIiwiKy44NypUKyJaIixNPSJtMC44NywuNWgtIitUKyJ2M2giKyhUKzUuMikrImwtIisoVC8yKzIuNikrIiwtIisoLjg3KlQrNC41KSsibC0yLjYsMS41bCIrVC8yKyIsIisuODcqVCsiWiIsUz0ibTAsMWwiK1QvMisiLCIrLjg3KlQrImwyLjYsLTEuNWwtIisoVC8yKzIuNikrIiwtIisoLjg3KlQrNC41KSsibC0iKyhULzIrMi42KSsiLCIrKC44NypUKzQuNSkrImwyLjYsMS41bCIrVC8yKyIsLSIrLjg3KlQrIloiLEU9Im0wLjUsMC41aDV2LTJoLTV2LTVoLTJ2NWgtNXYyaDV2NWgyWiIsQz0hMDtmdW5jdGlvbiBMKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzIikucmVtb3ZlKCl9dy5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4sdSxmLGgscCx2LF8sdz10aGlzLFQ9dy5sYXllcnMucGxvdGJnLnNlbGVjdCgicGF0aCIpLm5vZGUoKSx6PXcuZ3JhcGhEaXYsTz16Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsST17ZWxlbWVudDpULGdkOnoscGxvdGluZm86e2lkOncuaWQseGF4aXM6dy54YXhpcyx5YXhpczp3LnlheGlzfSxzdWJwbG90OncuaWQscHJlcEZuOmZ1bmN0aW9uKGEsbyxzKXtJLnhheGVzPVt3LnhheGlzXSxJLnlheGVzPVt3LnlheGlzXTt2YXIgYz16Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO0kubWluRHJhZz0ibGFzc28iPT09Yz8xOnZvaWQgMCwiem9vbSI9PT1jPyhJLm1vdmVGbj1OLEkuY2xpY2tGbj1QLEkuZG9uZUZuPWosZnVuY3Rpb24oYSxvLHMpe3ZhciBjPVQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD1vLWMubGVmdCxlPXMtYy50b3Ascj17YTp3LmFheGlzLnJhbmdlWzBdLGI6dy5iYXhpcy5yYW5nZVsxXSxjOncuY2F4aXMucmFuZ2VbMV19LHU9cixuPXcuYWF4aXMucmFuZ2VbMV0tci5hLGY9aSh3LmdyYXBoRGl2Ll9mdWxsTGF5b3V0W3cuaWRdLmJnY29sb3IpLmdldEx1bWluYW5jZSgpLGg9Ik0wLCIrdy5oKyJMIit3LncvMisiLCAwTCIrdy53KyIsIit3LmgrIloiLHA9ITEsdj1PLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3cueDArIiwgIit3LnkwKyIpIikuc3R5bGUoe2ZpbGw6Zj4uMj8icmdiYSgwLDAsMCwwKSI6InJnYmEoMjU1LDI1NSwyNTUsMCkiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJkIixoKSxfPU8uYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit3LngwKyIsICIrdy55MCsiKSIpLnN0eWxlKHtmaWxsOmwuYmFja2dyb3VuZCxzdHJva2U6bC5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoImQiLCJNMCwwWiIpLHgoTyl9KDAsbyxzKSk6InBhbiI9PT1jPyhJLm1vdmVGbj1WLEkuY2xpY2tGbj1QLEkuZG9uZUZuPVUscj17YTp3LmFheGlzLnJhbmdlWzBdLGI6dy5iYXhpcy5yYW5nZVsxXSxjOncuY2F4aXMucmFuZ2VbMV19LHU9cix4KE8pKToic2VsZWN0IiE9PWMmJiJsYXNzbyIhPT1jfHxtKGEsbyxzLEksYyl9fTtmdW5jdGlvbiBEKHQpe3ZhciBlPXt9O3JldHVybiBlW3cuaWQrIi5hYXhpcy5taW4iXT10LmEsZVt3LmlkKyIuYmF4aXMubWluIl09dC5iLGVbdy5pZCsiLmNheGlzLm1pbiJdPXQuYyxlfWZ1bmN0aW9uIFAodCxlKXt2YXIgcj16Ll9mdWxsTGF5b3V0LmNsaWNrbW9kZTtMKHopLDI9PT10JiYoei5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLGEuY2FsbCgiX2d1aVJlbGF5b3V0Iix6LEQoe2E6MCxiOjAsYzowfSkpKSxyLmluZGV4T2YoInNlbGVjdCIpPi0xJiYxPT09dCYmeShlLHosW3cueGF4aXNdLFt3LnlheGlzXSx3LmlkLEkpLHIuaW5kZXhPZigiZXZlbnQiKT4tMSYmZy5jbGljayh6LGUsdy5pZCl9ZnVuY3Rpb24gUih0LGUpe3JldHVybiAxLWUvdy5ofWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gMS0odCsody5oLWUpL01hdGguc3FydCgzKSkvdy53fWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4odC0ody5oLWUpL01hdGguc3FydCgzKSkvdy53fWZ1bmN0aW9uIE4oaSxhKXt2YXIgbz10K2kscz1lK2EsbD1NYXRoLm1heCgwLE1hdGgubWluKDEsUigwLGUpLFIoMCxzKSkpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLEYodCxlKSxGKG8scykpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxCKHQsZSksQihvLHMpKSksZz0obC8yK2QpKncudyxtPSgxLWwvMi1jKSp3LncseT0oZyttKS8yLHg9bS1nLFQ9KDEtbCkqdy5oLEM9VC14L2s7eDxiLk1JTlpPT00/KHU9cix2LmF0dHIoImQiLGgpLF8uYXR0cigiZCIsIk0wLDBaIikpOih1PXthOnIuYStsKm4sYjpyLmIrYypuLGM6ci5jK2Qqbn0sdi5hdHRyKCJkIixoKyJNIitnKyIsIitUKyJIIittKyJMIit5KyIsIitDKyJMIitnKyIsIitUKyJaIiksXy5hdHRyKCJkIiwiTSIrdCsiLCIrZStFKyJNIitnKyIsIitUK0ErIk0iK20rIiwiK1QrTSsiTSIreSsiLCIrQytTKSkscHx8KHYudHJhbnNpdGlvbigpLnN0eWxlKCJmaWxsIixmPi4yPyJyZ2JhKDAsMCwwLDAuNCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiKS5kdXJhdGlvbigyMDApLF8udHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxKS5kdXJhdGlvbigyMDApLHA9ITApfWZ1bmN0aW9uIGooKXtMKHopLHUhPT1yJiYoYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHosRCh1KSksQyYmei5kYXRhJiZ6Ll9jb250ZXh0LnNob3dUaXBzJiYoby5ub3RpZmllcihzKHosIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSxDPSExKSl9ZnVuY3Rpb24gVih0LGUpe3ZhciBuPXQvdy54YXhpcy5fbSxpPWUvdy55YXhpcy5fbSxhPVsodT17YTpyLmEtaSxiOnIuYisobitpKS8yLGM6ci5jLShuLWkpLzJ9KS5hLHUuYix1LmNdLnNvcnQoKSxvPWEuaW5kZXhPZih1LmEpLHM9YS5pbmRleE9mKHUuYiksbD1hLmluZGV4T2YodS5jKTthWzBdPDAmJihhWzFdK2FbMF0vMjwwPyhhWzJdKz1hWzBdK2FbMV0sYVswXT1hWzFdPTApOihhWzJdKz1hWzBdLzIsYVsxXSs9YVswXS8yLGFbMF09MCksdT17YTphW29dLGI6YVtzXSxjOmFbbF19LGU9KHIuYS11LmEpKncueWF4aXMuX20sdD0oci5jLXUuYy1yLmIrdS5iKSp3LnhheGlzLl9tKTt2YXIgZj0idHJhbnNsYXRlKCIrKHcueDArdCkrIiwiKyh3LnkwK2UpKyIpIjt3LnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLC5tYXBsYXllciIpLmF0dHIoInRyYW5zZm9ybSIsZik7dmFyIGg9InRyYW5zbGF0ZSgiKy10KyIsIistZSsiKSI7dy5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixoKSx3LmFheGlzLnJhbmdlPVt1LmEsdy5zdW0tdS5iLXUuY10sdy5iYXhpcy5yYW5nZT1bdy5zdW0tdS5hLXUuYyx1LmJdLHcuY2F4aXMucmFuZ2U9W3cuc3VtLXUuYS11LmIsdS5jXSx3LmRyYXdBeGVzKCExKSx3Ll9oYXNDbGlwT25BeGlzRmFsc2UmJncucGxvdENvbnRhaW5lci5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLmNhbGwoYy5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHcpfWZ1bmN0aW9uIFUoKXthLmNhbGwoIl9ndWlSZWxheW91dCIseixEKHUpKX1ULm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe2cuaG92ZXIoeix0LHcuaWQpLHouX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj1ULHouX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD13LmlkfSxULm9ubW91c2VvdXQ9ZnVuY3Rpb24odCl7ei5fZHJhZ2dpbmd8fGQudW5ob3Zlcih6LHQpfSxkLmluaXQoSSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NTk1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vY29tcG9uZW50cy9meCI6NjE2LCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NjY1LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NTQsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjc2NSwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo3NjYsIi4uL3Bsb3RzIjo4MTAsZDM6MTU0LHRpbnljb2xvcjI6NTIxfV0sODI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2xvZ2dlcnMiKSxpPXQoIi4vbGliL25vb3AiKSxhPXQoIi4vbGliL3B1c2hfdW5pcXVlIiksbz10KCIuL2xpYi9pc19wbGFpbl9vYmplY3QiKSxzPXQoIi4vbGliL2V4dGVuZCIpLGw9dCgiLi9wbG90cy9hdHRyaWJ1dGVzIiksYz10KCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIiksdT1zLmV4dGVuZEZsYXQsZj1zLmV4dGVuZERlZXBBbGw7ZnVuY3Rpb24gaCh0KXt2YXIgZT10Lm5hbWUsaT10LmNhdGVnb3JpZXMsYT10Lm1ldGE7aWYoci5tb2R1bGVzW2VdKW4ubG9nKCJUeXBlICIrZSsiIGFscmVhZHkgcmVnaXN0ZXJlZCIpO2Vsc2V7ci5zdWJwbG90c1JlZ2lzdHJ5W3QuYmFzZVBsb3RNb2R1bGUubmFtZV18fGZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZTtpZihyLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuIHZvaWQgbi5sb2coIlBsb3QgdHlwZSAiK2UrIiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7Zm9yKHZhciBpIGluIHYodCksci5zdWJwbG90c1JlZ2lzdHJ5W2VdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeChpLHQubmFtZSl9KHQuYmFzZVBsb3RNb2R1bGUpO2Zvcih2YXIgbz17fSxzPTA7czxpLmxlbmd0aDtzKyspb1tpW3NdXT0hMCxyLmFsbENhdGVnb3JpZXNbaVtzXV09ITA7Zm9yKHZhciBsIGluIHIubW9kdWxlc1tlXT17X21vZHVsZTp0LGNhdGVnb3JpZXM6b30sYSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoJiYoci5tb2R1bGVzW2VdLm1ldGE9YSksci5hbGxUeXBlcy5wdXNoKGUpLHIuY29tcG9uZW50c1JlZ2lzdHJ5KW0obCxlKTt0LmxheW91dEF0dHJpYnV0ZXMmJnUoci50cmFjZUxheW91dEF0dHJpYnV0ZXMsdC5sYXlvdXRBdHRyaWJ1dGVzKX19ZnVuY3Rpb24gcCh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbXBvbmVudCBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuIik7dmFyIGU9dC5uYW1lO2Zvcih2YXIgbiBpbiByLmNvbXBvbmVudHNSZWdpc3RyeVtlXT10LHQubGF5b3V0QXR0cmlidXRlcyYmKHQubGF5b3V0QXR0cmlidXRlcy5faXNMaW5rZWRUb0FycmF5JiZhKHIubGF5b3V0QXJyYXlDb250YWluZXJzLGUpLHYodCkpLHIubW9kdWxlcyltKGUsbik7Zm9yKHZhciBpIGluIHIuc3VicGxvdHNSZWdpc3RyeSl4KGUsaSk7Zm9yKHZhciBvIGluIHIudHJhbnNmb3Jtc1JlZ2lzdHJ5KXkoZSxvKTt0LnNjaGVtYSYmdC5zY2hlbWEubGF5b3V0JiZmKGMsdC5zY2hlbWEubGF5b3V0KX1mdW5jdGlvbiBkKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcigiVHJhbnNmb3JtIG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgZT0iVHJhbnNmb3JtIG1vZHVsZSAiK3QubmFtZSxpPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnRyYW5zZm9ybSxhPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGNUcmFuc2Zvcm07aWYoIWkmJiFhKXRocm93IG5ldyBFcnJvcihlKyIgaXMgbWlzc2luZyBhICp0cmFuc2Zvcm0qIG9yICpjYWxjVHJhbnNmb3JtKiBtZXRob2QuIik7Zm9yKHZhciBzIGluIGkmJmEmJm4ubG9nKFtlKyIgaGFzIGJvdGggYSAqdHJhbnNmb3JtKiBhbmQgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIiwiUGxlYXNlIG5vdGUgdGhhdCBhbGwgKnRyYW5zZm9ybSogbWV0aG9kcyBhcmUgZXhlY3V0ZWQiLCJiZWZvcmUgYWxsICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLiJdLmpvaW4oIiAiKSksbyh0LmF0dHJpYnV0ZXMpfHxuLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGFuICphdHRyaWJ1dGVzKiBvYmplY3QuIiksImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3VwcGx5RGVmYXVsdHMmJm4ubG9nKGUrIiByZWdpc3RlcmVkIHdpdGhvdXQgYSAqc3VwcGx5RGVmYXVsdHMqIG1ldGhvZC4iKSxyLnRyYW5zZm9ybXNSZWdpc3RyeVt0Lm5hbWVdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeShzLHQubmFtZSl9ZnVuY3Rpb24gZyh0KXt2YXIgZT10Lm5hbWUsbj1lLnNwbGl0KCItIilbMF0saT10LmRpY3Rpb25hcnksYT10LmZvcm1hdCxvPWkmJk9iamVjdC5rZXlzKGkpLmxlbmd0aCxzPWEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCxsPXIubG9jYWxlUmVnaXN0cnksYz1sW2VdO2lmKGN8fChsW2VdPWM9e30pLG4hPT1lKXt2YXIgdT1sW25dO3V8fChsW25dPXU9e30pLG8mJnUuZGljdGlvbmFyeT09PWMuZGljdGlvbmFyeSYmKHUuZGljdGlvbmFyeT1pKSxzJiZ1LmZvcm1hdD09PWMuZm9ybWF0JiYodS5mb3JtYXQ9YSl9byYmKGMuZGljdGlvbmFyeT1pKSxzJiYoYy5mb3JtYXQ9YSl9ZnVuY3Rpb24gdih0KXtpZih0LmxheW91dEF0dHJpYnV0ZXMpe3ZhciBlPXQubGF5b3V0QXR0cmlidXRlcy5fYXJyYXlBdHRyUmVnZXhwcztpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWEoci5sYXlvdXRBcnJheVJlZ2V4ZXMsZVtuXSl9fWZ1bmN0aW9uIG0odCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi50cmFjZXMpe3ZhciBpPW4udHJhY2VzW2VdO2kmJmYoci5tb2R1bGVzW2VdLl9tb2R1bGUuYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24geSh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYW5zZm9ybXMpe3ZhciBpPW4udHJhbnNmb3Jtc1tlXTtpJiZmKHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W2VdLmF0dHJpYnV0ZXMsaSl9fWZ1bmN0aW9uIHgodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi5zdWJwbG90cyl7dmFyIGk9ci5zdWJwbG90c1JlZ2lzdHJ5W2VdLGE9aS5sYXlvdXRBdHRyaWJ1dGVzLG89InN1YnBsb3QiPT09aS5hdHRyP2kubmFtZTppLmF0dHI7QXJyYXkuaXNBcnJheShvKSYmKG89b1swXSk7dmFyIHM9bi5zdWJwbG90c1tvXTthJiZzJiZmKGEscyl9fWZ1bmN0aW9uIGIodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYodD10LnR5cGUpLHR9ci5tb2R1bGVzPXt9LHIuYWxsQ2F0ZWdvcmllcz17fSxyLmFsbFR5cGVzPVtdLHIuc3VicGxvdHNSZWdpc3RyeT17fSxyLnRyYW5zZm9ybXNSZWdpc3RyeT17fSxyLmNvbXBvbmVudHNSZWdpc3RyeT17fSxyLmxheW91dEFycmF5Q29udGFpbmVycz1bXSxyLmxheW91dEFycmF5UmVnZXhlcz1bXSxyLnRyYWNlTGF5b3V0QXR0cmlidXRlcz17fSxyLmxvY2FsZVJlZ2lzdHJ5PXt9LHIuYXBpTWV0aG9kUmVnaXN0cnk9e30sci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLHIucmVnaXN0ZXI9ZnVuY3Rpb24odCl7aWYoci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLCF0KXRocm93IG5ldyBFcnJvcigiTm8gYXJndW1lbnQgcGFzc2VkIHRvIFBsb3RseS5yZWdpc3Rlci4iKTt0JiYhQXJyYXkuaXNBcnJheSh0KSYmKHQ9W3RdKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCEiKTtzd2l0Y2gobi5tb2R1bGVUeXBlKXtjYXNlInRyYWNlIjpoKG4pO2JyZWFrO2Nhc2UidHJhbnNmb3JtIjpkKG4pO2JyZWFrO2Nhc2UiY29tcG9uZW50IjpwKG4pO2JyZWFrO2Nhc2UibG9jYWxlIjpnKG4pO2JyZWFrO2Nhc2UiYXBpTWV0aG9kIjp2YXIgaT1uLm5hbWU7ci5hcGlNZXRob2RSZWdpc3RyeVtpXT1uLmZuO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIil9fX0sci5nZXRNb2R1bGU9ZnVuY3Rpb24odCl7dmFyIGU9ci5tb2R1bGVzW2IodCldO3JldHVybiEhZSYmZS5fbW9kdWxlfSxyLnRyYWNlSXM9ZnVuY3Rpb24odCxlKXtpZigidmFyaW91cyI9PT0odD1iKHQpKSlyZXR1cm4hMTt2YXIgaT1yLm1vZHVsZXNbdF07cmV0dXJuIGl8fCh0JiYiYXJlYSIhPT10JiZuLmxvZygiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgIit0KyIuIiksaT1yLm1vZHVsZXNbbC50eXBlLmRmbHRdKSwhIWkuY2F0ZWdvcmllc1tlXX0sci5nZXRUcmFuc2Zvcm1JbmRpY2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50cmFuc2Zvcm1zfHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspbltpXS50eXBlPT09ZSYmci5wdXNoKGkpO3JldHVybiByfSxyLmhhc1RyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYW5zZm9ybXN8fFtdLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dLnR5cGU9PT1lKXJldHVybiEwO3JldHVybiExfSxyLmdldENvbXBvbmVudE1ldGhvZD1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdO3JldHVybiBuJiZuW2VdfHxpfSxyLmNhbGw9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gci5hcGlNZXRob2RSZWdpc3RyeVt0XS5hcHBseShudWxsLGUpfX0seyIuL2xpYi9leHRlbmQiOjY5MCwiLi9saWIvaXNfcGxhaW5fb2JqZWN0Ijo3MDEsIi4vbGliL2xvZ2dlcnMiOjcwNCwiLi9saWIvbm9vcCI6NzA5LCIuL2xpYi9wdXNoX3VuaXF1ZSI6NzE0LCIuL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6ODAxfV0sODMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9bi5leHRlbmRGbGF0LGE9bi5leHRlbmREZWVwO2Z1bmN0aW9uIG8odCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2UidGhlbWVzX190aHVtYiI6ZT17YXV0b3NpemU6ITAsd2lkdGg6MTUwLGhlaWdodDoxNTAsdGl0bGU6e3RleHQ6IiJ9LHNob3dsZWdlbmQ6ITEsbWFyZ2luOntsOjUscjo1LHQ6NSxiOjUscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztjYXNlInRodW1ibmFpbCI6ZT17dGl0bGU6e3RleHQ6IiJ9LGhpZGVzb3VyY2VzOiEwLHNob3dsZWdlbmQ6ITEsYm9yZGVyd2lkdGg6MCxib3JkZXJjb2xvcjoiIixtYXJnaW46e2w6MSxyOjEsdDoxLGI6MSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2RlZmF1bHQ6ZT17fX1yZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcjt0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHQ9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpO3ZhciBuLHM9dC5kYXRhLGw9dC5sYXlvdXQsYz1hKFtdLHMpLHU9YSh7fSxsLG8oZS50aWxlQ2xhc3MpKSxmPXQuX2NvbnRleHR8fHt9O2lmKGUud2lkdGgmJih1LndpZHRoPWUud2lkdGgpLGUuaGVpZ2h0JiYodS5oZWlnaHQ9ZS5oZWlnaHQpLCJ0aHVtYm5haWwiPT09ZS50aWxlQ2xhc3N8fCJ0aGVtZXNfX3RodW1iIj09PWUudGlsZUNsYXNzKXt1LmFubm90YXRpb25zPVtdO3ZhciBoPU9iamVjdC5rZXlzKHUpO2ZvcihyPTA7cjxoLmxlbmd0aDtyKyspbj1oW3JdLFsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0uaW5kZXhPZihuLnNsaWNlKDAsNSkpPi0xJiYodVtoW3JdXS50aXRsZT17dGV4dDoiIn0pO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspe3ZhciBwPWNbcl07cC5zaG93c2NhbGU9ITEscC5tYXJrZXImJihwLm1hcmtlci5zaG93c2NhbGU9ITEpLCJwaWUiPT09cC50eXBlJiYocC50ZXh0cG9zaXRpb249Im5vbmUiKX19aWYoQXJyYXkuaXNBcnJheShlLmFubm90YXRpb25zKSlmb3Iocj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKXUuYW5ub3RhdGlvbnMucHVzaChlLmFubm90YXRpb25zW3JdKTt2YXIgZD1PYmplY3Qua2V5cyh1KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goL15zY2VuZVxkKiQvKX0pO2lmKGQubGVuZ3RoKXt2YXIgZz17fTtmb3IoInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzcyYmKGc9e3RpdGxlOnt0ZXh0OiIifSxzaG93YXhlc2xhYmVsczohMSxzaG93dGlja2xhYmVsczohMSxsaW5ldGlja2VuYWJsZTohMX0pLHI9MDtyPGQubGVuZ3RoO3IrKyl7dmFyIHY9dVtkW3JdXTt2LnhheGlzfHwodi54YXhpcz17fSksdi55YXhpc3x8KHYueWF4aXM9e30pLHYuemF4aXN8fCh2LnpheGlzPXt9KSxpKHYueGF4aXMsZyksaSh2LnlheGlzLGcpLGkodi56YXhpcyxnKSx2Ll9zY2VuZT1udWxsfX12YXIgbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnRpbGVDbGFzcyYmKG0uY2xhc3NOYW1lPWUudGlsZUNsYXNzKTt2YXIgeT17Z2Q6bSx0ZDptLGxheW91dDp1LGRhdGE6Yyxjb25maWc6e3N0YXRpY1Bsb3Q6dm9pZCAwPT09ZS5zdGF0aWNQbG90fHxlLnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp2b2lkIDA9PT1lLnBsb3RHbFBpeGVsUmF0aW8/MjplLnBsb3RHbFBpeGVsUmF0aW8sZGlzcGxheWxvZ286ZS5kaXNwbGF5bG9nb3x8ITEsc2hvd0xpbms6ZS5zaG93TGlua3x8ITEsc2hvd1RpcHM6ZS5zaG93VGlwc3x8ITEsbWFwYm94QWNjZXNzVG9rZW46Zi5tYXBib3hBY2Nlc3NUb2tlbn19O3JldHVybiJ0cmFuc3BhcmVudCIhPT1lLnNldEJhY2tncm91bmQmJih5LmNvbmZpZy5zZXRCYWNrZ3JvdW5kPWUuc2V0QmFja2dyb3VuZHx8Im9wYXF1ZSIpLHkuZ2QuZGVmYXVsdExheW91dD1vKGUudGlsZUNsYXNzKSx5fX0seyIuLi9saWIiOjcwMH1dLDgzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90X2FwaS90b19pbWFnZSIpLGk9dCgiLi4vbGliIiksYT10KCIuL2ZpbGVzYXZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBpLmlzUGxhaW5PYmplY3QodCl8fChyPWkuZ2V0R3JhcGhEaXYodCkpLChlPWV8fHt9KS5mb3JtYXQ9ZS5mb3JtYXR8fCJwbmciLG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8scyl7ciYmci5fc25hcHNob3RJblByb2dyZXNzJiZzKG5ldyBFcnJvcigiU25hcHNob3R0aW5nIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIikpLGkuaXNJRSgpJiYic3ZnIiE9PWUuZm9ybWF0JiZzKG5ldyBFcnJvcigiU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuIikpLHImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITApO3ZhciBsPW4odCxlKSxjPWUuZmlsZW5hbWV8fHQuZm58fCJuZXdwbG90IjtjKz0iLiIrZS5mb3JtYXQsbC50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiByJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxhKHQsYyl9KS50aGVuKGZ1bmN0aW9uKHQpe28odCl9KS5jYXRjaChmdW5jdGlvbih0KXtyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxzKHQpfSl9KX19LHsiLi4vbGliIjo3MDAsIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIjo3NDEsIi4vZmlsZXNhdmVyIjo4MzJ9XSw4MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG49ImRvd25sb2FkImluIHIsaT0vVmVyc2lvblwvW1xkXC5dKy4qU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhLG8pe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYvTVNJRSBbMS05XVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZvKG5ldyBFcnJvcigiSUUgPCAxMCB1bnN1cHBvcnRlZCIpKSxpJiYoZG9jdW1lbnQubG9jYXRpb24uaHJlZj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iK3Quc2xpY2UodC5zZWFyY2goL1ssO10vKSksYShlKSksZXx8KGU9ImRvd25sb2FkIiksbiYmKHIuaHJlZj10LHIuZG93bmxvYWQ9ZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLHIuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHIpLGEoZSkpLCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubXNTYXZlQmxvYil7dmFyIHM9dC5zcGxpdCgvXmRhdGE6aW1hZ2VcL3N2Z1wreG1sLC8pWzFdLGw9ZGVjb2RlVVJJQ29tcG9uZW50KHMpO25hdmlnYXRvci5tc1NhdmVCbG9iKG5ldyBCbG9iKFtsXSksZSksYShlKX1vKG5ldyBFcnJvcigiZG93bmxvYWQgZXJyb3IiKSl9KX19LHt9XSw4MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5nZXREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdC5faGFzJiYodC5faGFzKCJnbDNkIil8fHQuX2hhcygiZ2wyZCIpfHx0Ll9oYXMoIm1hcGJveCIpKT81MDA6MH0sci5nZXRSZWRyYXdGdW5jPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXR8fHt9O2lmKCEoIShlLl9oYXMmJmUuX2hhcygicG9sYXIiKSkmJnQuZGF0YSYmdC5kYXRhWzBdJiZ0LmRhdGFbMF0ucikpcmV0dXJuIGZ1bmN0aW9uKCl7KHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pfX19LHt9XSw4MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9oZWxwZXJzIiksaT17Z2V0RGVsYXk6bi5nZXREZWxheSxnZXRSZWRyYXdGdW5jOm4uZ2V0UmVkcmF3RnVuYyxjbG9uZTp0KCIuL2Nsb25lcGxvdCIpLHRvU1ZHOnQoIi4vdG9zdmciKSxzdmdUb0ltZzp0KCIuL3N2Z3RvaW1nIiksdG9JbWFnZTp0KCIuL3RvaW1hZ2UiKSxkb3dubG9hZEltYWdlOnQoIi4vZG93bmxvYWQiKX07ZS5leHBvcnRzPWl9LHsiLi9jbG9uZXBsb3QiOjgzMCwiLi9kb3dubG9hZCI6ODMxLCIuL2hlbHBlcnMiOjgzMywiLi9zdmd0b2ltZyI6ODM1LCIuL3RvaW1hZ2UiOjgzNiwiLi90b3N2ZyI6ODM3fV0sODM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVtaXR0ZXJ8fG5ldyBpLHI9bmV3IFByb21pc2UoZnVuY3Rpb24oaSxhKXt2YXIgbz13aW5kb3cuSW1hZ2Uscz10LnN2ZyxsPXQuZm9ybWF0fHwicG5nIjtpZihuLmlzSUUoKSYmInN2ZyIhPT1sKXt2YXIgYz1uZXcgRXJyb3IoIlNvcnJ5IElFIGRvZXMgbm90IHN1cHBvcnQgZG93bmxvYWRpbmcgZnJvbSBjYW52YXMuIFRyeSB7Zm9ybWF0OidzdmcnfSBpbnN0ZWFkLiIpO3JldHVybiBhKGMpLHQucHJvbWlzZT9yOmUuZW1pdCgiZXJyb3IiLGMpfXZhciB1PXQuY2FudmFzLGY9dC5zY2FsZXx8MSxoPXQud2lkdGh8fDMwMCxwPXQuaGVpZ2h0fHwxNTAsZD1mKmgsZz1mKnAsdj11LmdldENvbnRleHQoIjJkIiksbT1uZXcgbyx5PSJkYXRhOmltYWdlL3N2Zyt4bWwsIitlbmNvZGVVUklDb21wb25lbnQocyk7dS53aWR0aD1kLHUuaGVpZ2h0PWcsbS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgcjtzd2l0Y2goInN2ZyIhPT1sJiZ2LmRyYXdJbWFnZShtLDAsMCxkLGcpLGwpe2Nhc2UianBlZyI6cj11LnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2UicG5nIjpyPXUudG9EYXRhVVJMKCJpbWFnZS9wbmciKTticmVhaztjYXNlIndlYnAiOnI9dS50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztjYXNlInN2ZyI6cj15O2JyZWFrO2RlZmF1bHQ6dmFyIG49IkltYWdlIGZvcm1hdCBpcyBub3QganBlZywgcG5nLCBzdmcgb3Igd2VicC4iO2lmKGEobmV3IEVycm9yKG4pKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoImVycm9yIixuKX1pKHIpLHQucHJvbWlzZXx8ZS5lbWl0KCJzdWNjZXNzIixyKX0sbS5vbmVycm9yPWZ1bmN0aW9uKHIpe2lmKGEociksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KCJlcnJvciIscil9LG0uc3JjPXl9KTtyZXR1cm4gdC5wcm9taXNlP3I6ZX19LHsiLi4vbGliIjo3MDAsZXZlbnRzOjk0fV0sODM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixpPXQoIi4uL3JlZ2lzdHJ5IiksYT10KCIuLi9saWIiKSxvPXQoIi4vaGVscGVycyIpLHM9dCgiLi9jbG9uZXBsb3QiKSxsPXQoIi4vdG9zdmciKSxjPXQoIi4vc3ZndG9pbWciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbix1PXModCx7Zm9ybWF0OiJwbmcifSksZj11LmdkO2Yuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnN0eWxlLmxlZnQ9Ii01MDAwcHgiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZik7dmFyIGg9by5nZXRSZWRyYXdGdW5jKGYpO3JldHVybiBpLmNhbGwoInBsb3QiLGYsdS5kYXRhLHUubGF5b3V0LHUuY29uZmlnKS50aGVuKGgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgdD1vLmdldERlbGF5KGYuX2Z1bGxMYXlvdXQpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1sKGYpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7bi5pZD1hLnJhbmRzdHIoKSwocj1jKHtmb3JtYXQ6ZS5mb3JtYXQsd2lkdGg6Zi5fZnVsbExheW91dC53aWR0aCxoZWlnaHQ6Zi5fZnVsbExheW91dC5oZWlnaHQsY2FudmFzOm4sZW1pdHRlcjpyLHN2Zzp0fSkpLmNsZWFuPWZ1bmN0aW9uKCl7ZiYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChmKX19LHQpfSkuY2F0Y2goZnVuY3Rpb24odCl7ci5lbWl0KCJlcnJvciIsdCl9KSxyfX0seyIuLi9saWIiOjcwMCwiLi4vcmVnaXN0cnkiOjgyOSwiLi9jbG9uZXBsb3QiOjgzMCwiLi9oZWxwZXJzIjo4MzMsIi4vc3ZndG9pbWciOjgzNSwiLi90b3N2ZyI6ODM3LGV2ZW50czo5NH1dLDgzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksbD0vIi9nLGM9bmV3IFJlZ0V4cCgnKCJUT0JFU1RSSVBQRUQpfChUT0JFU1RSSVBQRUQiKScsImciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGY9dC5fZnVsbExheW91dCxoPWYuX3BhcGVyLHA9Zi5fdG9wcGFwZXIsZD1mLndpZHRoLGc9Zi5oZWlnaHQ7aC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5jYWxsKGEuc2V0UmVjdCwwLDAsZCxnKS5jYWxsKG8uZmlsbCxmLnBhcGVyX2JnY29sb3IpO3ZhciB2PWYuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHU9MDt1PHYubGVuZ3RoO3UrKyl7dmFyIG09dlt1XTttLnRvU1ZHJiZtLnRvU1ZHKHQpfWlmKHApe3ZhciB5PXAubm9kZSgpLmNoaWxkTm9kZXMseD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5KTtmb3IodT0wO3U8eC5sZW5ndGg7dSsrKXt2YXIgYj14W3VdO2IuY2hpbGROb2Rlcy5sZW5ndGgmJmgubm9kZSgpLmFwcGVuZENoaWxkKGIpfX1mLl9kcmFnZ2VycyYmZi5fZHJhZ2dlcnMucmVtb3ZlKCksaC5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD0iIixoLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpudWxsLCJkYXRhLW1hdGgiOm51bGx9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7aWYoImhpZGRlbiIhPT10aGlzLnN0eWxlLnZpc2liaWxpdHkmJiJub25lIiE9PXRoaXMuc3R5bGUuZGlzcGxheSl7dC5zdHlsZSh7dmlzaWJpbGl0eTpudWxsLGRpc3BsYXk6bnVsbH0pO3ZhciBlPXRoaXMuc3R5bGUuZm9udEZhbWlseTtlJiYtMSE9PWUuaW5kZXhPZignIicpJiZ0LnN0eWxlKCJmb250LWZhbWlseSIsZS5yZXBsYWNlKGwsIlRPQkVTVFJJUFBFRCIpKX1lbHNlIHQucmVtb3ZlKCl9KSxoLnNlbGVjdEFsbCgiLnBvaW50LCAuc2NhdHRlcnB0cywgLmxlZ2VuZGZpbGw+cGF0aCwgLmxlZ2VuZGxpbmVzPnBhdGgsIC5jYmZpbGwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10aGlzLnN0eWxlLmZpbGw7ZSYmLTEhPT1lLmluZGV4T2YoInVybCgiKSYmdC5zdHlsZSgiZmlsbCIsZS5yZXBsYWNlKGwsIlRPQkVTVFJJUFBFRCIpKTt2YXIgcj10aGlzLnN0eWxlLnN0cm9rZTtyJiYtMSE9PXIuaW5kZXhPZigidXJsKCIpJiZ0LnN0eWxlKCJzdHJva2UiLHIucmVwbGFjZShsLCJUT0JFU1RSSVBQRUQiKSl9KSwicGRmIiE9PWUmJiJlcHMiIT09ZXx8aC5zZWxlY3RBbGwoIiNNYXRoSmF4X1NWR19nbHlwaHMgcGF0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsMCksaC5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucywieG1sbnMiLHMuc3ZnKSxoLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhzLnhtbG5zLCJ4bWxuczp4bGluayIscy54bGluayksInN2ZyI9PT1lJiZyJiYoaC5hdHRyKCJ3aWR0aCIscipkKSxoLmF0dHIoImhlaWdodCIscipnKSxoLmF0dHIoInZpZXdCb3giLCIwIDAgIitkKyIgIitnKSk7dmFyIF89KG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcikuc2VyaWFsaXplVG9TdHJpbmcoaC5ub2RlKCkpO3JldHVybiBfPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5zdHlsZSh7ZGlzcGxheToibm9uZSJ9KS5odG1sKCIiKSxyPXQucmVwbGFjZSgvKCZbXjtdKjspL2dpLGZ1bmN0aW9uKHQpe3JldHVybiImbHQ7Ij09PXQ/IiYjNjA7IjoiJnJ0OyI9PT10PyImIzYyOyI6LTEhPT10LmluZGV4T2YoIjwiKXx8LTEhPT10LmluZGV4T2YoIj4iKT8iIjplLmh0bWwodCkudGV4dCgpfSk7cmV0dXJuIGUucmVtb3ZlKCkscn0oXyksXz0oXz1fLnJlcGxhY2UoLyYoPyFcdys7fFwjWzAtOV0rO3wgXCN4WzAtOUEtRl0rOykvZywiJmFtcDsiKSkucmVwbGFjZShjLCInIiksaS5pc0lFKCkmJihfPShfPShfPV8ucmVwbGFjZSgvIi9naSwiJyIpKS5yZXBsYWNlKC8oXCgnIykoW14nXSopKCdcKSkvZ2ksJygiIyQyIiknKSkucmVwbGFjZSgvKFxcJykvZ2ksJyInKSksX319LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY3OCwiLi4vbGliIjo3MDAsZDM6MTU0fV0sODM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLm1lcmdlQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bihlLnRleHQsdCwidHgiKSxuKGUuaG92ZXJ0ZXh0LHQsImh0eCIpO3ZhciBpPWUubWFya2VyO2lmKGkpe24oaS5vcGFjaXR5LHQsIm1vIiksbihpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2EmJihuKGEuY29sb3IsdCwibWxjIiksbihhLndpZHRoLHQsIm1sdyIpKX19fSx7Ii4uLy4uL2xpYiI6NzAwfV0sODM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMuanMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9cyh7ZWRpdFR5cGU6ImNhbGMiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZToic3R5bGUifSksZj1jKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MH0pLGg9Yyh7d2lkdGg6ZixlZGl0VHlwZToiY2FsYyJ9LGEoIm1hcmtlci5saW5lIikpLHA9Yyh7bGluZTpoLGVkaXRUeXBlOiJjYWxjIn0sYSgibWFya2VyIikse2NvbG9yYmFyOm8sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MSxtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifX0pO2UuZXhwb3J0cz17eDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOmwuZXZlbnREYXRhS2V5c30pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoibm9uZSIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxvdXRzaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxjb25zdHJhaW50ZXh0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYm90aCIsIm5vbmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LGNsaXBvbmF4aXM6Yyh7fSxuLmNsaXBvbmF4aXMse30pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYmFzZTp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOnAsb2Zmc2V0Z3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGFsaWdubWVudGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Om4uc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6bi5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4udW5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6bi51bnNlbGVjdGVkLnRleHRmb250LGVkaXRUeXBlOiJzdHlsZSJ9LHI6bi5yLHQ6bi50LF9kZXByZWNhdGVkOntiYXJkaXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGVkaXRUeXBlOiJjYWxjIix2YWx1ZXM6WyJ2IiwiaCJdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTEsIi4vY29uc3RhbnRzLmpzIjo4NDF9XSw4NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksbz10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGwsYz1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksdT1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1jLm1ha2VDYWxjZGF0YShlLCJ4IiksbD11Lm1ha2VDYWxjZGF0YShlLCJ5IikpOihyPXUubWFrZUNhbGNkYXRhKGUsInkiKSxsPWMubWFrZUNhbGNkYXRhKGUsIngiKSk7Zm9yKHZhciBmPU1hdGgubWluKGwubGVuZ3RoLHIubGVuZ3RoKSxoPW5ldyBBcnJheShmKSxwPTA7cDxmO3ArKyloW3BdPXtwOmxbcF0sczpyW3BdfSxlLmlkcyYmKGhbcF0uaWQ9U3RyaW5nKGUuaWRzW3BdKSk7cmV0dXJuIGkoZSwibWFya2VyIikmJmEodCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLGkoZSwibWFya2VyLmxpbmUiKSYmYSh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlci5saW5lIixjTGV0dGVyOiJjIn0pLG8oaCxlKSxzKGgsZSksaH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU4NSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjU4OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTA1MywiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjgzOH1dLDg0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2V2ZW50RGF0YUtleXM6W119fSx7fV0sODQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0QXhpc0dyb3VwLGM9dCgiLi9zaWV2ZS5qcyIpO2Z1bmN0aW9uIHUodCxlLHIsbyl7aWYoby5sZW5ndGgpe3ZhciB1LGIsXyx3LGs9dC5fZnVsbExheW91dC5iYXJtb2RlO3N3aXRjaChmdW5jdGlvbih0LGUscixhKXt2YXIgbyxzO2ZvcihvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBsLGM9YVtvXSx1PWNbMF0udHJhY2UsZj11LmJhc2UsaD0iaCI9PT11Lm9yaWVudGF0aW9uP3UueGNhbGVuZGFyOnUueWNhbGVuZGFyLHA9ImNhdGVnb3J5Ij09PXIudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP2Z1bmN0aW9uKCl7cmV0dXJuIG51bGx9OnIuZDJjO2lmKGkoZikpe2ZvcihzPTA7czxNYXRoLm1pbihmLmxlbmd0aCxjLmxlbmd0aCk7cysrKWw9cChmW3NdLDAsaCksbihsKT8oY1tzXS5iPStsLGNbc10uaGFzQj0xKTpjW3NdLmI9MDtmb3IoO3M8Yy5sZW5ndGg7cysrKWNbc10uYj0wfWVsc2V7bD1wKGYsMCxoKTt2YXIgZD1uKGwpO2ZvcihsPWQ/bDowLHM9MDtzPGMubGVuZ3RoO3MrKyljW3NdLmI9bCxkJiYoY1tzXS5oYXNCPTEpfX19KDAsMCxyLG8pLGspe2Nhc2Uib3ZlcmxheSI6Zih0LGUscixvKTticmVhaztjYXNlImdyb3VwIjpmb3IodT1bXSxiPVtdLF89MDtfPG8ubGVuZ3RoO18rKyl2b2lkIDA9PT0odz1vW19dKVswXS50cmFjZS5vZmZzZXQ/Yi5wdXNoKHcpOnUucHVzaCh3KTtiLmxlbmd0aCYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dC5iYXJub3JtLG89bmV3IGMobix7c2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFpfSk7KGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dCxpPW4uYmFyZ2FwLGE9bi5iYXJncm91cGdhcHx8MCxvPXIucG9zaXRpb25zLHM9ci5kaXN0aW5jdFBvc2l0aW9ucyxjPXIubWluRGlmZix1PXIudHJhY2VzLGY9dS5sZW5ndGgsaD1vLmxlbmd0aCE9PXMubGVuZ3RoLHY9YyooMS1pKSxtPWwobixlLl9pZCkrdVswXVswXS50cmFjZS5vcmllbnRhdGlvbix5PW4uX2FsaWdubWVudE9wdHNbbV18fHt9LHg9MDt4PGY7eCsrKXt2YXIgYixfLHc9dVt4XSxrPXdbMF0udHJhY2UsVD15W2suYWxpZ25tZW50Z3JvdXBdfHx7fSxBPU9iamVjdC5rZXlzKFQub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLE09KGI9QT92L0E6aD92L2Y6dikqKDEtYSk7Xz1BPygoMiprLl9vZmZzZXRJbmRleCsxLUEpKmItTSkvMjpoPygoMip4KzEtZikqYi1NKS8yOi1NLzI7dmFyIFM9d1swXS50O1MuYmFyd2lkdGg9TSxTLnBvZmZzZXQ9XyxTLmJhcmdyb3Vwd2lkdGg9dixTLmJhcmRlbHRhPWN9ci5iaW5XaWR0aD11WzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAociksZCh0LGUsciksZyh0LGUscixoKX0pKHQsZSxvKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxzPW9bMF0udHJhY2U7aWYodm9pZCAwPT09cy5iYXNlKWZvcih2YXIgbD1uZXcgYyhbb10se3NlcE5lZ1ZhbDohMCxvdmVybGFwTm9NZXJnZTohMH0pLHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGY9b1t1XTtpZihmLnAhPT1hKXt2YXIgaD1sLnB1dChmLnAsZi5iK2Yucyk7aCYmKGYuYj1oKX19fX0oMCwwLG8pLGk/KG0odCxyLG8pLHkodCxyLG8pKTp2KHQscixvKX0odCxlLHIsYiksdS5sZW5ndGgmJmYodCxlLHIsdSk7YnJlYWs7Y2FzZSJzdGFjayI6Y2FzZSJyZWxhdGl2ZSI6Zm9yKHU9W10sYj1bXSxfPTA7XzxvLmxlbmd0aDtfKyspdm9pZCAwPT09KHc9b1tfXSlbMF0udHJhY2UuYmFzZT9iLnB1c2godyk6dS5wdXNoKHcpO2IubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89aS5iYXJtb2RlLGw9aS5iYXJub3JtLHU9bmV3IGMobix7c2VwTmVnVmFsOiJyZWxhdGl2ZSI9PT1vLG92ZXJsYXBOb01lcmdlOiEobHx8InN0YWNrIj09PW98fCJyZWxhdGl2ZSI9PT1vKX0pO2godCxlLHUpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dC5iYXJub3JtLGk9eChlKSxvPXIudHJhY2VzLGw9MDtsPG8ubGVuZ3RoO2wrKyl7Zm9yKHZhciBjPW9bbF0sdT1jWzBdLnRyYWNlLGY9W10saD0wO2g8Yy5sZW5ndGg7aCsrKXt2YXIgcD1jW2hdO2lmKHAucyE9PWEpe3ZhciBkPXIucHV0KHAucCxwLmIrcC5zKSxnPWQrcC5iK3AucztwLmI9ZCxwW2ldPWcsbnx8KGYucHVzaChnKSxwLmhhc0ImJmYucHVzaChkKSl9fW58fCh1Ll9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxmLHt0b3plcm86ITAscGFkZGVkOiEwfSkpfX0odCxyLHUpO2Zvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKWZvcih2YXIgcD1uW2ZdLGQ9MDtkPHAubGVuZ3RoO2QrKyl7dmFyIGc9cFtkXTtpZihnLnMhPT1hKXt2YXIgdj1nLmIrZy5zPT09dS5nZXQoZy5wLGcucyk7diYmKGcuX291dG1vc3Q9ITApfX1sJiZ5KHQscix1KX0odCxlLHIsYiksdS5sZW5ndGgmJmYodCxlLHIsdSl9IWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89eChlKSxzPXt9LGw9MS8wLGM9LTEvMDtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihhPXRbcl0saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgdT1hW2ldLnA7bih1KSYmKGw9TWF0aC5taW4obCx1KSxjPU1hdGgubWF4KGMsdSkpfXZhciBmPTFlNC8oYy1sKSxoPXMucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKGYqKHQtbCkpKX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7KGE9dFtyXSlbMF0udC5leHRlbnRzPXM7dmFyIHA9YVswXS50LnBvZmZzZXQsZD1BcnJheS5pc0FycmF5KHApO2ZvcihpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBnPWFbaV0sdj1nW29dLWcudy8yO2lmKG4odikpe3ZhciBtPWdbb10rZy53LzIseT1oKGcucCk7c1t5XT9zW3ldPVtNYXRoLm1pbih2LHNbeV1bMF0pLE1hdGgubWF4KG0sc1t5XVsxXSldOnNbeV09W3YsbV19Zy5wMD1nLnArKGQ/cFtpXTpwKSxnLnAxPWcucDArZy53LGcuczA9Zy5iLGcuczE9Zy5zMCtnLnN9fX0obyxlKX19ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9dC5fZnVsbExheW91dC5iYXJub3JtLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW5ldyBjKFtvXSx7c2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFpfSk7aCh0LGUscyksaT8obSh0LHIscykseSh0LHIscykpOnYodCxyLHMpfX1mdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dCxpPW4uYmFyZ2FwLGE9bi5iYXJncm91cGdhcHx8MCxvPXIubWluRGlmZixzPXIudHJhY2VzLGw9byooMS1pKSxjPWwqKDEtYSksdT0tYy8yLGY9MDtmPHMubGVuZ3RoO2YrKyl7dmFyIGg9c1tmXVswXS50O2guYmFyd2lkdGg9YyxoLnBvZmZzZXQ9dSxoLmJhcmdyb3Vwd2lkdGg9bCxoLmJhcmRlbHRhPW99ci5iaW5XaWR0aD1zWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAociksZCh0LGUsciksZyh0LGUscil9ZnVuY3Rpb24gcCh0KXt2YXIgZSxyLGE9dC50cmFjZXM7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIG8scz1hW2VdLGw9c1swXSxjPWwudHJhY2UsdT1sLnQsZj1jLl9vZmZzZXR8fGMub2Zmc2V0LGg9dS5wb2Zmc2V0O2lmKGkoZikpe2ZvcihvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGYsMCxzLmxlbmd0aCkscj0wO3I8by5sZW5ndGg7cisrKW4ob1tyXSl8fChvW3JdPWgpO2ZvcihyPW8ubGVuZ3RoO3I8cy5sZW5ndGg7cisrKW8ucHVzaChoKTt1LnBvZmZzZXQ9b31lbHNlIHZvaWQgMCE9PWYmJih1LnBvZmZzZXQ9Zik7dmFyIHA9Yy5fd2lkdGh8fGMud2lkdGgsZD11LmJhcndpZHRoO2lmKGkocCkpe3ZhciBnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHAsMCxzLmxlbmd0aCk7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKyluKGdbcl0pfHwoZ1tyXT1kKTtmb3Iocj1nLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylnLnB1c2goZCk7aWYodS5iYXJ3aWR0aD1nLHZvaWQgMD09PWYpe2ZvcihvPVtdLHI9MDtyPHMubGVuZ3RoO3IrKylvLnB1c2goaCsoZC1nW3JdKS8yKTt1LnBvZmZzZXQ9b319ZWxzZSB2b2lkIDAhPT1wJiYodS5iYXJ3aWR0aD1wLHZvaWQgMD09PWYmJih1LnBvZmZzZXQ9aCsoZC1wKS8yKSl9fWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPXgoZSksYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz1uW2FdLHM9b1swXS50LGw9cy5wb2Zmc2V0LGM9QXJyYXkuaXNBcnJheShsKSx1PXMuYmFyd2lkdGgsZj1BcnJheS5pc0FycmF5KHUpLGg9MDtoPG8ubGVuZ3RoO2grKyl7dmFyIHA9b1toXSxkPXAudz1mP3VbaF06dTtwW2ldPXAucCsoYz9sW2hdOmwpK2QvMn19ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1yLnRyYWNlcyxhPXIubWluRGlmZi8yO3MubWluRHRpY2soZSxyLm1pbkRpZmYsci5kaXN0aW5jdFBvc2l0aW9uc1swXSxuKTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGwsYyx1LGYsaD1pW29dLHA9aFswXSxkPXAudHJhY2UsZz1bXTtmb3IoZj0wO2Y8aC5sZW5ndGg7ZisrKWM9KGw9aFtmXSkucC1hLHU9bC5wK2EsZy5wdXNoKGMsdSk7aWYoZC53aWR0aHx8ZC5vZmZzZXQpe3ZhciB2PXAudCxtPXYucG9mZnNldCx5PXYuYmFyd2lkdGgseD1BcnJheS5pc0FycmF5KG0pLGI9QXJyYXkuaXNBcnJheSh5KTtmb3IoZj0wO2Y8aC5sZW5ndGg7ZisrKXtsPWhbZl07dmFyIF89eD9tW2ZdOm0sdz1iP3lbZl06eTt1PShjPWwucCtfKSt3LGcucHVzaChjLHUpfX1kLl9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxnLHtwYWRkZWQ6ITF9KX19ZnVuY3Rpb24gdih0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9eChlKSxhPTA7YTxuLmxlbmd0aDthKyspe2Zvcih2YXIgbz1uW2FdLGw9b1swXS50cmFjZSxjPVtdLHU9ITAsZj0wO2Y8by5sZW5ndGg7ZisrKXt2YXIgaD1vW2ZdLHA9aC5iLGQ9cCtoLnM7aFtpXT1kLGMucHVzaChkKSxoLmhhc0ImJmMucHVzaChwKSxoLmhhc0ImJmguYj4wJiZoLnM+MHx8KHU9ITEpfWwuX2V4dHJlbWVzW2UuX2lkXT1zLmZpbmRFeHRyZW1lcyhlLGMse3RvemVybzohdSxwYWRkZWQ6ITB9KX19ZnVuY3Rpb24gbSh0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9MDtpPG4ubGVuZ3RoO2krKylmb3IodmFyIG89bltpXSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107bC5zIT09YSYmci5wdXQobC5wLGwuYitsLnMpfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89ci50cmFjZXMsbD14KGUpLGM9ImZyYWN0aW9uIj09PWkuYmFybm9ybT8xOjEwMCx1PWMvMWU5LGY9ZS5sMmMoZS5jMmwoMCkpLGg9InN0YWNrIj09PWkuYmFybW9kZT9jOmY7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbihlLmMybCh0KSkmJih0PGYtdXx8dD5oK3V8fCFuKGYpKX1mb3IodmFyIGQ9MDtkPG8ubGVuZ3RoO2QrKyl7Zm9yKHZhciBnPW9bZF0sdj1nWzBdLnRyYWNlLG09W10seT0hMCxiPSExLF89MDtfPGcubGVuZ3RoO18rKyl7dmFyIHc9Z1tfXTtpZih3LnMhPT1hKXt2YXIgaz1NYXRoLmFicyhjL3IuZ2V0KHcucCx3LnMpKTt3LmIqPWssdy5zKj1rO3ZhciBUPXcuYixBPVQrdy5zO3dbbF09QSxtLnB1c2goQSksYj1ifHxwKEEpLHcuaGFzQiYmKG0ucHVzaChUKSxiPWJ8fHAoVCkpLHcuaGFzQiYmdy5iPjAmJncucz4wfHwoeT0hMSl9fXYuX2V4dHJlbWVzW2UuX2lkXT1zLmZpbmRFeHRyZW1lcyhlLG0se3RvemVybzoheSxwYWRkZWQ6Yn0pfX1mdW5jdGlvbiB4KHQpe3JldHVybiB0Ll9pZC5jaGFyQXQoMCl9ZS5leHBvcnRzPXtjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnhheGlzLG49ZS55YXhpcyxpPXQuX2Z1bGxEYXRhLGE9dC5jYWxjZGF0YSxzPVtdLGw9W10sYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgZj1pW2NdOyEwPT09Zi52aXNpYmxlJiZvLnRyYWNlSXMoZiwiYmFyIikmJmYueGF4aXM9PT1yLl9pZCYmZi55YXhpcz09PW4uX2lkJiYoImgiPT09Zi5vcmllbnRhdGlvbj9zLnB1c2goYVtjXSk6bC5wdXNoKGFbY10pKX11KHQscixuLGwpLHUodCxuLHIscyl9LHNldEdyb3VwUG9zaXRpb25zOnV9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL3NpZXZlLmpzIjo4NTEsImZhc3QtaXNudW1lcmljIjoyMjF9XSw4NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0QXhpc0dyb3VwLGM9dCgiLi9hdHRyaWJ1dGVzIiksdT1uLmNvZXJjZUZvbnQ7ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT1lLm9yaWVudGF0aW9uLGE9ZVt7djoieCIsaDoieSJ9W2ldKyJheGlzIl0sbz1sKHIsYSkraSxzPXIuX2FsaWdubWVudE9wdHN8fHt9LGM9bigiYWxpZ25tZW50Z3JvdXAiKSx1PXNbb107dXx8KHU9c1tvXT17fSk7dmFyIGY9dVtjXTtmP2YudHJhY2VzLnB1c2goZSk6Zj11W2NdPXt0cmFjZXM6W2VdLGFsaWdubWVudEluZGV4Ok9iamVjdC5rZXlzKHUpLmxlbmd0aCxvZmZzZXRHcm91cHM6e319O3ZhciBoPW4oIm9mZnNldGdyb3VwIikscD1mLm9mZnNldEdyb3VwcyxkPXBbaF07aCYmKGR8fChkPXBbaF09e29mZnNldEluZGV4Ok9iamVjdC5rZXlzKHApLmxlbmd0aH0pLGUuX29mZnNldEluZGV4PWQub2Zmc2V0SW5kZXgpfWZ1bmN0aW9uIGgodCxlLHIsaSxhKXt2YXIgbz1pKCJ0ZXh0cG9zaXRpb24iKSxzPUFycmF5LmlzQXJyYXkobyl8fCJhdXRvIj09PW8sbD1zfHwib3V0c2lkZSI9PT1vO2lmKHN8fCJpbnNpZGUiPT09b3x8bCl7dmFyIGM9dShpLCJ0ZXh0Zm9udCIsci5mb250KSxmPW4uZXh0ZW5kRmxhdCh7fSxjKTshKHQudGV4dGZvbnQmJnQudGV4dGZvbnQuY29sb3IpJiZkZWxldGUgZi5jb2xvcix1KGksImluc2lkZXRleHRmb250IixmKSxsJiZ1KGksIm91dHNpZGV0ZXh0Zm9udCIsYyksaSgiY29uc3RyYWludGV4dCIpLGEmJihpKCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpLGkoInVuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSksaSgiY2xpcG9uYXhpcyIpfX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX1pZihvKHQsZSxsLHUpKXt1KCJvcmllbnRhdGlvbiIsZS54JiYhZS55PyJoIjoidiIpLHUoImJhc2UiKSx1KCJvZmZzZXQiKSx1KCJ3aWR0aCIpLHUoInRleHQiKSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIiksaCh0LDAsbCx1LCEwKSxzKHQsZSx1LHIsbCk7dmFyIGY9KGUubWFya2VyLmxpbmV8fHt9KS5jb2xvcixwPWEuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO3AodCxlLGZ8fGkuZGVmYXVsdExpbmUse2F4aXM6InkifSkscCh0LGUsZnx8aS5kZWZhdWx0TGluZSx7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx1KX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5jb2VyY2Uoci5faW5wdXQscixjLHQpfWlmKCJncm91cCI9PT1lLmJhcm1vZGUpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspImJhciI9PT0ocj10W2FdKS50eXBlJiYoci5faW5wdXQsZigwLHIsZSxpKSl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6ZixoYW5kbGVUZXh0Omh9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMDc3LCIuL2F0dHJpYnV0ZXMiOjgzOSwiLi9zdHlsZV9kZWZhdWx0cyI6ODUzfV0sODQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIik7ci5jb2VyY2VTdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoZXx8IXQubm9CbGFuaylyZXR1cm4gZX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZSYmIXQuc3RyaWN0KXJldHVybiBTdHJpbmcoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlTnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUpKXtlPStlO3ZhciBpPXQubWluLGE9dC5tYXg7aWYoISh2b2lkIDAhPT1pJiZlPGl8fHZvaWQgMCE9PWEmJmU+YSkpcmV0dXJuIGV9cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlQ29sb3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpKGUpLmlzVmFsaWQoKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlRW51bWVyYXRlZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuY29lcmNlTnVtYmVyJiYoZT0rZSksLTEhPT10LnZhbHVlcy5pbmRleE9mKGUpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0sci5nZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U8dC5sZW5ndGgmJihyPXRbZV0pOnI9dCxyfX0seyJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sODQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpO2Z1bmN0aW9uIHModCxlLHIsaSl7dmFyIGEscyxsLGMsdSxmLGgscD10LmNkLGQ9cFswXS50cmFjZSxnPXBbMF0udCx2PSJjbG9zZXN0Ij09PWksbT10Lm1heEhvdmVyRGlzdGFuY2UseT10Lm1heFNwaWtlRGlzdGFuY2U7ZnVuY3Rpb24geCh0KXtyZXR1cm4gdFtsXS10LncvMn1mdW5jdGlvbiBiKHQpe3JldHVybiB0W2xdK3Qudy8yfXZhciBfPXY/eDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oeCh0KSx0LnAtZy5iYXJkZWx0YS8yKX0sdz12P2I6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KGIodCksdC5wK2cuYmFyZGVsdGEvMil9O2Z1bmN0aW9uIGsodCxlKXtyZXR1cm4gbi5pbmJveCh0LWEsZS1hLG0rTWF0aC5taW4oMSxNYXRoLmFicyhlLXQpL2gpLTEpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIGsoXyh0KSx3KHQpKX1mdW5jdGlvbiBBKHQpe3JldHVybiBuLmluYm94KHQuYi1zLHRbY10tcyxtKyh0W2NdLXMpLyh0W2NdLXQuYiktMSl9ImgiPT09ZC5vcmllbnRhdGlvbj8oYT1yLHM9ZSxsPSJ5IixjPSJ4Iix1PUEsZj1UKTooYT1lLHM9cixsPSJ4IixjPSJ5IixmPUEsdT1UKTt2YXIgTT10W2wrImEiXSxTPXRbYysiYSJdO2g9TWF0aC5hYnMoTS5yMmMoTS5yYW5nZVsxXSktTS5yMmMoTS5yYW5nZVswXSkpO3ZhciBFPW4uZ2V0RGlzdGFuY2VGdW5jdGlvbihpLHUsZixmdW5jdGlvbih0KXtyZXR1cm4odSh0KStmKHQpKS8yfSk7aWYobi5nZXRDbG9zZXN0KHAsRSx0KSwhMSE9PXQuaW5kZXgpe3Z8fChfPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbih4KHQpLHQucC1nLmJhcmdyb3Vwd2lkdGgvMil9LHc9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KGIodCksdC5wK2cuYmFyZ3JvdXB3aWR0aC8yKX0pO3ZhciBDPXBbdC5pbmRleF0sTD1kLmJhc2U/Qy5iK0MuczpDLnM7dFtjKyIwIl09dFtjKyIxIl09Uy5jMnAoQ1tjXSwhMCksdFtjKyJMYWJlbFZhbCJdPUw7dmFyIHo9Zy5leHRlbnRzW2cuZXh0ZW50cy5yb3VuZChDLnApXTtyZXR1cm4gdFtsKyIwIl09TS5jMnAodj9fKEMpOnpbMF0sITApLHRbbCsiMSJdPU0uYzJwKHY/dyhDKTp6WzFdLCEwKSx0W2wrIkxhYmVsVmFsIl09Qy5wLHQuc3Bpa2VEaXN0YW5jZT0oQShDKStmdW5jdGlvbih0KXtyZXR1cm4gayh4KHQpLGIodCkpfShDKSkvMit5LW0sdFtsKyJTcGlrZSJdPU0uYzJwKEMucCwhMCksbyhDLGQsdCksdC5ob3ZlcnRlbXBsYXRlPWQuaG92ZXJ0ZW1wbGF0ZSx0fX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZS5tY2N8fHQubWFya2VyLmNvbG9yLG49ZS5tbGNjfHx0Lm1hcmtlci5saW5lLmNvbG9yLGk9ZS5tbHd8fHQubWFya2VyLmxpbmUud2lkdGg7cmV0dXJuIGEub3BhY2l0eShyKT9yOmEub3BhY2l0eShuKSYmaT9uOnZvaWQgMH1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXModCxlLHIsbik7aWYoYSl7dmFyIG89YS5jZCxjPW9bMF0udHJhY2UsdT1vW2EuaW5kZXhdO3JldHVybiBhLmNvbG9yPWwoYyx1KSxpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikodSxjLGEpLFthXX19LGhvdmVyT25CYXJzOnMsZ2V0VHJhY2VDb2xvcjpsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTl9XSw4NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4ubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsbi5jcm9zc1RyYWNlRGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4uY3Jvc3NUcmFjZUNhbGM9dCgiLi9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG4uYXJyYXlzVG9DYWxjZGF0YT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImJhciIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzdmciLCJiYXIiLCJvcmllbnRlZCIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInpvb21TY2FsZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwNjksIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo4MzgsIi4vYXR0cmlidXRlcyI6ODM5LCIuL2NhbGMiOjg0MCwiLi9jcm9zc190cmFjZV9jYWxjIjo4NDIsIi4vZGVmYXVsdHMiOjg0MywiLi9ob3ZlciI6ODQ1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDcsIi4vbGF5b3V0X2RlZmF1bHRzIjo4NDgsIi4vcGxvdCI6ODQ5LCIuL3NlbGVjdCI6ODUwLCIuL3N0eWxlIjo4NTJ9XSw4NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsImdyb3VwIiwib3ZlcmxheSIsInJlbGF0aXZlIl0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sYmFybm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwiZnJhY3Rpb24iLCJwZXJjZW50Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGJhcmdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LGJhcmdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDg0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gcyhyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsbyxyLG4pfWZvcih2YXIgbD0hMSxjPSExLHU9ITEsZj17fSxoPXMoImJhcm1vZGUiKSxwPTA7cDxyLmxlbmd0aDtwKyspe3ZhciBkPXJbcF07aWYobi50cmFjZUlzKGQsImJhciIpJiZkLnZpc2libGUpe2lmKGw9ITAsImdyb3VwIj09PWgpe3ZhciBnPWQueGF4aXMrZC55YXhpcztmW2ddJiYodT0hMCksZltnXT0hMH1pZihkLnZpc2libGUmJiJoaXN0b2dyYW0iPT09ZC50eXBlKSJjYXRlZ29yeSIhPT1pLmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6ZX0sZFsidiI9PT1kLm9yaWVudGF0aW9uPyJ4YXhpcyI6InlheGlzIl0pLnR5cGUmJihjPSEwKX19bD8oIm92ZXJsYXkiIT09aCYmcygiYmFybm9ybSIpLHMoImJhcmdhcCIsYyYmIXU/MDouMikscygiYmFyZ3JvdXBnYXAiKSk6ZGVsZXRlIGUuYmFybW9kZX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0N31dLDg0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL3JlZ2lzdHJ5IiksdT10KCIuL2F0dHJpYnV0ZXMiKSxmPXUudGV4dCxoPXUudGV4dHBvc2l0aW9uLHA9dCgiLi9oZWxwZXJzIiksZD10KCIuL3N0eWxlIiksZz0zO2Z1bmN0aW9uIHYodCxlLHIsbixpLGEpe3ZhciBvO3JldHVybiBpPDE/bz0ic2NhbGUoIitpKyIpICI6KGk9MSxvPSIiKSwidHJhbnNsYXRlKCIrKHItaSp0KSsiICIrKG4taSplKSsiKSIrbysoYT8icm90YXRlKCIrYSsiICIrdCsiICIrZSsiKSAiOiIiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7dmFyIG09ZS54YXhpcyx5PWUueWF4aXMseD10Ll9mdWxsTGF5b3V0LGI9YS5tYWtlVHJhY2VHcm91cHModSxyLCJ0cmFjZSBiYXJzIikuZWFjaChmdW5jdGlvbihyKXt2YXIgYyx1PW4uc2VsZWN0KHRoaXMpLGI9clswXSxfPWIudHJhY2Usdz0wOyJ3YXRlcmZhbGwiPT09Xy50eXBlJiZfLmNvbm5lY3Rvci52aXNpYmxlJiYiYmV0d2VlbiI9PT1fLmNvbm5lY3Rvci5tb2RlJiYodz1fLmNvbm5lY3Rvci5saW5lLndpZHRoLzIpO3ZhciBrPSJoIj09PV8ub3JpZW50YXRpb247ZS5pc1JhbmdlUGxvdHx8KGIubm9kZTM9dSk7dmFyIFQ9YS5lbnN1cmVTaW5nbGUodSwiZyIsInBvaW50cyIpLnNlbGVjdEFsbCgiZy5wb2ludCIpLmRhdGEoYS5pZGVudGl0eSk7VC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50IiwhMCksVC5leGl0KCkucmVtb3ZlKCksVC5lYWNoKGZ1bmN0aW9uKHUsYil7dmFyIFQsQSxNLFMsRT1uLnNlbGVjdCh0aGlzKTtrPyhNPXkuYzJwKHUucDAsITApLFM9eS5jMnAodS5wMSwhMCksVD1tLmMycCh1LnMwLCEwKSxBPW0uYzJwKHUuczEsITApLHUuY3Q9W0EsKE0rUykvMl0pOihUPW0uYzJwKHUucDAsITApLEE9bS5jMnAodS5wMSwhMCksTT15LmMycCh1LnMwLCEwKSxTPXkuYzJwKHUuczEsITApLHUuY3Q9WyhUK0EpLzIsU10pO3ZhciBDLEwseixPPXUuaXNCbGFuaz0hKGkoVCkmJmkoQSkmJmkoTSkmJmkoUykmJlQhPT1BJiZNIT09Uyk7aWYodyYmKGs/KFQtPShjPUE8VD8tMToxKSp3LEErPWMqdyk6KE0tPShjPVM8TT8tMToxKSp3LFMrPWMqdykpLCJ3YXRlcmZhbGwiPT09Xy50eXBlKXt2YXIgST1fW3UuZGlyXS5tYXJrZXI7Qz1JLmxpbmUud2lkdGgsTD1JLmNvbG9yLHo9IndhdGVyZmFsbCJ9ZWxzZSBDPSh1Lm1sdysxfHxfLm1hcmtlci5saW5lLndpZHRoKzF8fCh1LnRyYWNlP3UudHJhY2UubWFya2VyLmxpbmUud2lkdGg6MCkrMSktMSxMPXUubWN8fF8ubWFya2VyLmNvbG9yLHo9ImJhciI7dmFyIEQ9bi5yb3VuZChDLzIlMSwyKSxQPXhbeisiZ2FwIl0sUj14W3orImdyb3VwZ2FwIl07ZnVuY3Rpb24gRih0KXtyZXR1cm4gMD09PVAmJjA9PT1SP24ucm91bmQoTWF0aC5yb3VuZCh0KS1ELDIpOnR9aWYoIXQuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIEI9cy5vcGFjaXR5KEwpPDF8fEM+LjAxP0Y6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKT49Mj9GKHQpOnQ+ZT9NYXRoLmNlaWwodCk6TWF0aC5mbG9vcih0KX07VD1CKFQsQSksQT1CKEEsVCksTT1CKE0sUyksUz1CKFMsTSl9YS5lbnN1cmVTaW5nbGUoRSwicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiZCIsTz8iTTAsMFoiOiJNIitUKyIsIitNKyJWIitTKyJIIitBKyJWIitNKyJaIikuY2FsbChsLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KSxmdW5jdGlvbih0LGUscixuLGkscyxjLHUpe3ZhciBtLHk9dC5fZnVsbExheW91dDtmdW5jdGlvbiB4KGUscixuKXt2YXIgaT1hLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IikudGV4dChyKS5hdHRyKHtjbGFzczoiYmFydGV4dCBiYXJ0ZXh0LSIrbSx0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIiwiZGF0YS1ub3RleCI6MX0pLmNhbGwobC5mb250LG4pLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCk7cmV0dXJuIGl9dmFyIGI9clswXS50cmFjZSxfPWIub3JpZW50YXRpb24sdz1mdW5jdGlvbih0LGUpe3ZhciByPXAuZ2V0VmFsdWUodC50ZXh0LGUpO3JldHVybiBwLmNvZXJjZVN0cmluZyhmLHIpfShiLG4pO209ZnVuY3Rpb24odCxlKXt2YXIgcj1wLmdldFZhbHVlKHQudGV4dHBvc2l0aW9uLGUpO3JldHVybiBwLmNvZXJjZUVudW1lcmF0ZWQoaCxyKX0oYixuKTt2YXIgaz0id2F0ZXJmYWxsIj09PWIudHlwZT8id2F0ZXJmYWxsIjoiYmFyIixUPXlbaysibW9kZSJdLEE9InN0YWNrIj09PVR8fCJyZWxhdGl2ZSI9PT1ULE09cltuXSxTPSFBfHxNLl9vdXRtb3N0O2lmKCF3fHwibm9uZSI9PT1tfHxNLmlzQmxhbmsmJigiYXV0byI9PT1tfHwiaW5zaWRlIj09PW0pKXJldHVybiB2b2lkIGUuc2VsZWN0KCJ0ZXh0IikucmVtb3ZlKCk7dmFyIEUsQyxMLHosTyxJLEQ9eS5mb250LFA9ZC5nZXRCYXJDb2xvcihyW25dLGIpLFI9ZC5nZXRJbnNpZGVUZXh0Rm9udChiLG4sRCxQKSxGPWQuZ2V0T3V0c2lkZVRleHRGb250KGIsbixEKSxCPU1hdGguYWJzKHMtaSktMipnLE49TWF0aC5hYnModS1jKS0yKmc7Im91dHNpZGUiPT09bSYmKFN8fE0uaGFzQnx8KG09Imluc2lkZSIpKTtpZigiYXV0byI9PT1tKWlmKFMpe209Imluc2lkZSIsRT14KGUsdyxSKSxDPWwuYkJveChFLm5vZGUoKSksTD1DLndpZHRoLHo9Qy5oZWlnaHQ7dmFyIGo9TD4wJiZ6PjAsVj1MPD1CJiZ6PD1OLFU9TDw9TiYmejw9QixxPSJoIj09PV8/Qj49TCooTi96KTpOPj16KihCL0wpO2omJihWfHxVfHxxKT9tPSJpbnNpZGUiOihtPSJvdXRzaWRlIixFLnJlbW92ZSgpLEU9bnVsbCl9ZWxzZSBtPSJpbnNpZGUiO2lmKCFFJiYoRT14KGUsdywib3V0c2lkZSI9PT1tP0Y6UiksQz1sLmJCb3goRS5ub2RlKCkpLEw9Qy53aWR0aCx6PUMuaGVpZ2h0LEw8PTB8fHo8PTApKXJldHVybiB2b2lkIEUucmVtb3ZlKCk7Im91dHNpZGUiPT09bT8oST0iYm90aCI9PT1iLmNvbnN0cmFpbnRleHR8fCJvdXRzaWRlIj09PWIuY29uc3RyYWludGV4dCxPPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9ImgiPT09YT9NYXRoLmFicyhuLXIpOk1hdGguYWJzKGUtdCk7bD4yKmcmJihzPWcpO3ZhciBjPTE7byYmKGM9ImgiPT09YT9NYXRoLm1pbigxLGwvaS5oZWlnaHQpOk1hdGgubWluKDEsbC9pLndpZHRoKSk7dmFyIHUsZixoLHAsZD0oaS5sZWZ0K2kucmlnaHQpLzIsbT0oaS50b3AraS5ib3R0b20pLzI7dT1jKmkud2lkdGgsZj1jKmkuaGVpZ2h0LCJoIj09PWE/ZTx0PyhoPWUtcy11LzIscD0ocituKS8yKTooaD1lK3MrdS8yLHA9KHIrbikvMik6bj5yPyhoPSh0K2UpLzIscD1uK3MrZi8yKTooaD0odCtlKS8yLHA9bi1zLWYvMik7cmV0dXJuIHYoZCxtLGgscCxjLCExKX0oaSxzLGMsdSxDLF8sSSkpOihJPSJib3RoIj09PWIuY29uc3RyYWludGV4dHx8Imluc2lkZSI9PT1iLmNvbnN0cmFpbnRleHQsTz1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmLGgscCxkPWkud2lkdGgsbT1pLmhlaWdodCx5PShpLmxlZnQraS5yaWdodCkvMix4PShpLnRvcCtpLmJvdHRvbSkvMixiPU1hdGguYWJzKGUtdCksXz1NYXRoLmFicyhuLXIpO2I+MipnJiZfPjIqZz8oYi09MiooZj1nKSxfLT0yKmYpOmY9MDtkPD1iJiZtPD1fPyhoPSExLHA9MSk6ZDw9XyYmbTw9Yj8oaD0hMCxwPTEpOmQ8bT09YjxfPyhoPSExLHA9bz9NYXRoLm1pbihiL2QsXy9tKToxKTooaD0hMCxwPW8/TWF0aC5taW4oXy9kLGIvbSk6MSk7aCYmKGg9OTApO2g/KHM9cCptLGw9cCpkKToocz1wKmQsbD1wKm0pOyJoIj09PWE/ZTx0PyhjPWUrZitzLzIsdT0ocituKS8yKTooYz1lLWYtcy8yLHU9KHIrbikvMik6bj5yPyhjPSh0K2UpLzIsdT1uLWYtbC8yKTooYz0odCtlKS8yLHU9bitmK2wvMik7cmV0dXJuIHYoeSx4LGMsdSxwLGgpfShpLHMsYyx1LEMsXyxJKSk7RS5hdHRyKCJ0cmFuc2Zvcm0iLE8pfSh0LEUscixiLFQsQSxNLFMpLGUubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHUsRS5zZWxlY3QoInRleHQiKSxtLHksXy54Y2FsZW5kYXIsXy55Y2FsZW5kYXIpfSk7dmFyIEE9ITE9PT1iLnRyYWNlLmNsaXBvbmF4aXM7bC5zZXRDbGlwVXJsKHUsQT9udWxsOmUubGF5ZXJDbGlwSWQsdCl9KTtjLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwicGxvdCIpKHQsYixlKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2F0dHJpYnV0ZXMiOjgzOSwiLi9oZWxwZXJzIjo4NDQsIi4vc3R5bGUiOjg1MixkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw4NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LmNkLGk9dC54YXhpcyxhPXQueWF4aXMsbz1bXTtpZighMT09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgcz1uW3JdO2UuY29udGFpbnMocy5jdCwhMSxyLHQpPyhvLnB1c2goe3BvaW50TnVtYmVyOnIseDppLmMyZChzLngpLHk6YS5jMmQocy55KX0pLHMuc2VsZWN0ZWQ9MSk6cy5zZWxlY3RlZD0wfXJldHVybiBvfX0se31dLDg1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9YTt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gYSh0LGUpe3RoaXMudHJhY2VzPXQsdGhpcy5zZXBOZWdWYWw9ZS5zZXBOZWdWYWwsdGhpcy5vdmVybGFwTm9NZXJnZT1lLm92ZXJsYXBOb01lcmdlO2Zvcih2YXIgcj0xLzAsYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe2Zvcih2YXIgcz10W29dLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXTtjLnAhPT1pJiZhLnB1c2goYy5wKX1zWzBdJiZzWzBdLndpZHRoMSYmKHI9TWF0aC5taW4oc1swXS53aWR0aDEscikpfXRoaXMucG9zaXRpb25zPWE7dmFyIHU9bi5kaXN0aW5jdFZhbHMoYSk7dGhpcy5kaXN0aW5jdFBvc2l0aW9ucz11LnZhbHMsMT09PXUudmFscy5sZW5ndGgmJnIhPT0xLzA/dGhpcy5taW5EaWZmPXI6dGhpcy5taW5EaWZmPU1hdGgubWluKHUubWluRGlmZixyKSx0aGlzLmJpbldpZHRoPXRoaXMubWluRGlmZix0aGlzLmJpbnM9e319YS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZXRMYWJlbCh0LGUpLG49dGhpcy5iaW5zW3JdfHwwO3JldHVybiB0aGlzLmJpbnNbcl09bitlLG59LGEucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKTtyZXR1cm4gdGhpcy5iaW5zW3JdfHwwfSxhLnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbih0LGUpe3JldHVybihlPDAmJnRoaXMuc2VwTmVnVmFsPyJ2IjoiXiIpKyh0aGlzLm92ZXJsYXBOb01lcmdlP3Q6TWF0aC5yb3VuZCh0L3RoaXMuYmluV2lkdGgpKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMH1dLDg1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPWwudGV4dGZvbnQsdT1sLmluc2lkZXRleHRmb250LGY9bC5vdXRzaWRldGV4dGZvbnQsaD10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBwKHQsZSxyKXthLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlLHIpLGQodCxlLHIpfWZ1bmN0aW9uIGQodCxlLHIpe3Quc2VsZWN0QWxsKCJ0ZXh0IikuZWFjaChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxvPWcoaSx0LGUscik7YS5mb250KGksbyl9KX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPW4uX2Z1bGxMYXlvdXQuZm9udCxhPXIudGV4dGZvbnQ7aWYodC5jbGFzc2VkKCJiYXJ0ZXh0LWluc2lkZSIpKXt2YXIgbz1iKGUscik7YT1tKHIsZS5pLGksbyl9ZWxzZSB0LmNsYXNzZWQoImJhcnRleHQtb3V0c2lkZSIpJiYoYT15KHIsZS5pLGkpKTtyZXR1cm4gYX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4geChjLHQudGV4dGZvbnQsZSxyKX1mdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBhPXYodCxlLHIpO3JldHVybih2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udHx8dm9pZCAwPT09dC5faW5wdXQudGV4dGZvbnQuY29sb3J8fEFycmF5LmlzQXJyYXkodC50ZXh0Zm9udC5jb2xvcikmJnZvaWQgMD09PXQudGV4dGZvbnQuY29sb3JbZV0pJiYoYT17Y29sb3I6aS5jb250cmFzdChuKSxmYW1pbHk6YS5mYW1pbHksc2l6ZTphLnNpemV9KSx4KHUsdC5pbnNpZGV0ZXh0Zm9udCxlLGEpfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXYodCxlLHIpO3JldHVybiB4KGYsdC5vdXRzaWRldGV4dGZvbnQsZSxuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe2U9ZXx8e307dmFyIGk9aC5nZXRWYWx1ZShlLmZhbWlseSxyKSxhPWguZ2V0VmFsdWUoZS5zaXplLHIpLG89aC5nZXRWYWx1ZShlLmNvbG9yLHIpO3JldHVybntmYW1pbHk6aC5jb2VyY2VTdHJpbmcodC5mYW1pbHksaSxuLmZhbWlseSksc2l6ZTpoLmNvZXJjZU51bWJlcih0LnNpemUsYSxuLnNpemUpLGNvbG9yOmguY29lcmNlQ29sb3IodC5jb2xvcixvLG4uY29sb3IpfX1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuIndhdGVyZmFsbCI9PT1lLnR5cGU/ZVt0LmRpcl0ubWFya2VyLmNvbG9yOnQubWN8fGUubWFya2VyLmNvbG9yfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmJhcmxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIiksaT1yLnNpemUoKSxhPXQuX2Z1bGxMYXlvdXQ7ci5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLmVhY2goZnVuY3Rpb24odCl7KCJzdGFjayI9PT1hLmJhcm1vZGUmJmk+MXx8MD09PWEuYmFyZ2FwJiYwPT09YS5iYXJncm91cGdhcCYmIXRbMF0udHJhY2UubWFya2VyLmxpbmUud2lkdGgpJiZuLnNlbGVjdCh0aGlzKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSxyLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe3Aobi5zZWxlY3QodGhpcyksZVswXS50cmFjZSx0KX0pLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdHlsZSIpKHIpfSxzdHlsZVRleHRQb2ludHM6ZCxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxpPWVbMF0udHJhY2U7aS5zZWxlY3RlZHBvaW50cz9mdW5jdGlvbih0LGUscil7YS5zZWxlY3RlZFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlKSxmdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpLHM9bi5zZWxlY3QodGhpcyk7aWYodC5zZWxlY3RlZCl7aT1vLmV4dGVuZEZsYXQoe30sZyhzLHQsZSxyKSk7dmFyIGw9ZS5zZWxlY3RlZC50ZXh0Zm9udCYmZS5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvcjtsJiYoaS5jb2xvcj1sKSxhLmZvbnQocyxpKX1lbHNlIGEuc2VsZWN0ZWRUZXh0U3R5bGUocyxlKX0pfSh0LnNlbGVjdEFsbCgidGV4dCIpLGUscil9KHIsaSx0KTpwKHIsaSx0KX0sZ2V0SW5zaWRlVGV4dEZvbnQ6bSxnZXRPdXRzaWRlVGV4dEZvbnQ6eSxnZXRCYXJDb2xvcjpifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9hdHRyaWJ1dGVzIjo4MzksIi4vaGVscGVycyI6ODQ0LGQzOjE1NH1dLDg1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtyKCJtYXJrZXIuY29sb3IiLG8pLGkodCwibWFya2VyIikmJmEodCxlLHMscix7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLHIoIm1hcmtlci5saW5lLmNvbG9yIixuLmRlZmF1bHRMaW5lKSxpKHQsIm1hcmtlci5saW5lIikmJmEodCxlLHMscix7cHJlZml4OiJtYXJrZXIubGluZS4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUud2lkdGgiKSxyKCJtYXJrZXIub3BhY2l0eSIpLHIoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo1ODcsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo1ODh9XSw4NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiLi4vc2NhdHRlcnBvbGFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtyOmEucix0aGV0YTphLnRoZXRhLHIwOmEucjAsZHI6YS5kcix0aGV0YTA6YS50aGV0YTAsZHRoZXRhOmEuZHRoZXRhLHRoZXRhdW5pdDphLnRoZXRhdW5pdCxiYXNlOmkoe30sby5iYXNlLHt9KSxvZmZzZXQ6aSh7fSxvLm9mZnNldCx7fSksd2lkdGg6aSh7fSxvLndpZHRoLHt9KSx0ZXh0Omkoe30sby50ZXh0LHt9KSxob3ZlcnRleHQ6aSh7fSxvLmhvdmVydGV4dCx7fSksbWFya2VyOm8ubWFya2VyLGhvdmVyaW5mbzphLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDpvLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6by51bnNlbGVjdGVkfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2Jhci9hdHRyaWJ1dGVzIjo4MzksIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxMTEzfV0sODU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbz10KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldEdyb3VwUG9zaXRpb25zLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzLGM9dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxvPWUuc3VicGxvdCxsPXJbb10ucmFkaWFsYXhpcyxjPXJbb10uYW5ndWxhcmF4aXMsdT1sLm1ha2VDYWxjZGF0YShlLCJyIiksZj1jLm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLGg9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9dSxnPWYsdj0wO3Y8aDt2KyspcFt2XT17cDpnW3ZdLHM6ZFt2XX07ZnVuY3Rpb24gbSh0KXt2YXIgcj1lW3RdO3ZvaWQgMCE9PXImJihlWyJfIit0XT1BcnJheS5pc0FycmF5KHIpP2MubWFrZUNhbGNkYXRhKGUsdCk6Yy5kMmMocixlLnRoZXRhdW5pdCkpfXJldHVybiJsaW5lYXIiPT09Yy50eXBlJiYobSgid2lkdGgiKSxtKCJvZmZzZXQiKSksbihlLCJtYXJrZXIiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbihlLCJtYXJrZXIubGluZSIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSksYShwLGUpLHMocCxlKSxwfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQuY2FsY2RhdGEsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sdT1zWzBdLnRyYWNlOyEwPT09dS52aXNpYmxlJiZsKHUsImJhciIpJiZ1LnN1YnBsb3Q9PT1yJiZpLnB1c2gocyl9dmFyIGY9Yyh7fSxlLnJhZGlhbGF4aXMse19pZDoieCJ9KSxoPWUuYW5ndWxhcmF4aXM7byh7X2Z1bGxMYXlvdXQ6ZX0saCxmLGkpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU4NSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjU4OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiOjgzOCwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjg0MiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTA1M31dLDg1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLGE9dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLHMsbCk/KGwoInRoZXRhdW5pdCIpLGwoImJhc2UiKSxsKCJvZmZzZXQiKSxsKCJ3aWR0aCIpLGwoInRleHQiKSxsKCJob3ZlcnRleHQiKSxsKCJob3ZlcnRlbXBsYXRlIiksYSh0LGUsbCxyLHMpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGwpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiOjg1MywiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIjoxMTE1LCIuL2F0dHJpYnV0ZXMiOjg1NH1dLDg1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2Jhci9ob3ZlciIpLmdldFRyYWNlQ29sb3Isbz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpLHM9dCgiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIikubWFrZUhvdmVyUG9pbnRUZXh0LGw9dCgiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyIpLmlzUHRJbnNpZGVQb2x5Z29uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsZj10LnN1YnBsb3QsaD1mLnJhZGlhbEF4aXMscD1mLmFuZ3VsYXJBeGlzLGQ9Zi52YW5nbGVzLGc9ZD9sOmkuaXNQdEluc2lkZVNlY3Rvcix2PXQubWF4SG92ZXJEaXN0YW5jZSxtPXAuX3BlcmlvZHx8MipNYXRoLlBJLHk9TWF0aC5hYnMoaC5nMnAoTWF0aC5zcXJ0KGUqZStyKnIpKSkseD1NYXRoLmF0YW4yKHIsZSk7aC5yYW5nZVswXT5oLnJhbmdlWzFdJiYoeCs9TWF0aC5QSSk7aWYobi5nZXRDbG9zZXN0KGMsZnVuY3Rpb24odCl7cmV0dXJuIGcoeSx4LFt0LnJwMCx0LnJwMV0sW3QudGhldGFnMCx0LnRoZXRhZzFdLGQpP3YrTWF0aC5taW4oMSxNYXRoLmFicyh0LnRoZXRhZzEtdC50aGV0YWcwKS9tKS0xKyh0LnJwMS15KS8odC5ycDEtdC5ycDApLTE6MS8wfSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBiPWNbdC5pbmRleF07dC54MD10LngxPWIuY3RbMF0sdC55MD10LnkxPWIuY3RbMV07dmFyIF89aS5leHRlbmRGbGF0KHt9LGIse3I6Yi5zLHRoZXRhOmIucH0pO3JldHVybiBvKGIsdSx0KSxzKF8sdSxmLHQpLHQuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsdC5jb2xvcj1hKHUsYiksdC54TGFiZWxWYWw9dC55TGFiZWxWYWw9dm9pZCAwLGIuczwwJiYodC5pZGVhbEFsaWduPSJsZWZ0IiksW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjE2LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyI6ODEyLCIuLi9iYXIvaG92ZXIiOjg0NSwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTksIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciI6MTExNn1dLDg1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJiYXJwb2xhciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvcG9sYXIiKSxjYXRlZ29yaWVzOlsicG9sYXIiLCJiYXIiLCJzaG93TGVnZW5kIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLHN0eWxlOnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vYmFyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo4MTMsIi4uL2Jhci9zZWxlY3QiOjg1MCwiLi4vYmFyL3N0eWxlIjo4NTIsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuL2F0dHJpYnV0ZXMiOjg1NCwiLi9jYWxjIjo4NTUsIi4vZGVmYXVsdHMiOjg1NiwiLi9ob3ZlciI6ODU3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NTksIi4vbGF5b3V0X2RlZmF1bHRzIjo4NjAsIi4vcGxvdCI6ODYxfV0sODU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJvdmVybGF5Il0sZGZsdDoic3RhY2siLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw4NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvPXt9O2Z1bmN0aW9uIHMocixvKXtyZXR1cm4gbi5jb2VyY2UodFthXXx8e30sZVthXSxpLHIsbyl9Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF07ImJhcnBvbGFyIj09PWMudHlwZSYmITA9PT1jLnZpc2libGUmJihvW2E9Yy5zdWJwbG90XXx8KHMoImJhcm1vZGUiKSxzKCJiYXJnYXAiKSxvW2FdPTEpKX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NTl9XSw4NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9dCgiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9ZS54YXhpcyxjPWUueWF4aXMsdT1lLnJhZGlhbEF4aXMsZj1lLmFuZ3VsYXJBeGlzLGg9ZnVuY3Rpb24odCl7dmFyIGU9dC5jeHgscj10LmN5eTtpZih0LnZhbmdsZXMpcmV0dXJuIGZ1bmN0aW9uKG4saSxvLGwpe3ZhciBjLHU7YS5hbmdsZURlbHRhKG8sbCk+MD8oYz1vLHU9bCk6KGM9bCx1PW8pO3ZhciBmPXMuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyhjLHQudmFuZ2xlcylbMF0saD1zLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXModSx0LnZhbmdsZXMpWzFdLHA9W2YsKGMrdSkvMixoXTtyZXR1cm4gcy5wYXRoUG9seWdvbkFubnVsdXMobixpLGMsdSxwLGUscil9O3JldHVybiBmdW5jdGlvbih0LG4saSxvKXtyZXR1cm4gYS5wYXRoQW5udWx1cyh0LG4saSxvLGUscil9fShlKSxwPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuYmFybGF5ZXIiKTthLm1ha2VUcmFjZUdyb3VwcyhwLHIsInRyYWNlIGJhcnMiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBzPXJbMF0ubm9kZTM9bi5zZWxlY3QodGhpcykscD1hLmVuc3VyZVNpbmdsZShzLCJnIiwicG9pbnRzIikuc2VsZWN0QWxsKCJnLnBvaW50IikuZGF0YShhLmlkZW50aXR5KTtwLmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpLmNsYXNzZWQoInBvaW50IiwhMCkscC5leGl0KCkucmVtb3ZlKCkscC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHI9bi5zZWxlY3QodGhpcyksbz10LnJwMD11LmMycCh0LnMwKSxzPXQucnAxPXUuYzJwKHQuczEpLHA9dC50aGV0YWcwPWYuYzJnKHQucDApLGQ9dC50aGV0YWcxPWYuYzJnKHQucDEpO2lmKGkobykmJmkocykmJmkocCkmJmkoZCkmJm8hPT1zJiZwIT09ZCl7dmFyIGc9dS5jMmcodC5zMSksdj0ocCtkKS8yO3QuY3Q9W2wuYzJwKGcqTWF0aC5jb3ModikpLGMuYzJwKGcqTWF0aC5zaW4odikpXSxlPWgobyxzLHAsZCl9ZWxzZSBlPSJNMCwwWiI7YS5lbnN1cmVTaW5nbGUociwicGF0aCIpLmF0dHIoImQiLGUpfSksby5zZXRDbGlwVXJsKHMsZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbCx0KX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnMiOjgxMixkMzoxNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSw4NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD1uLm1hcmtlcixjPWwubGluZTtlLmV4cG9ydHM9e3k6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRleHQ6cyh7fSxuLnRleHQse30pLGhvdmVydGV4dDpzKHt9LG4uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOm8oe30pLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJjYWxjIn0sbm90Y2hlZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxub3RjaHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4yNSxlZGl0VHlwZToiY2FsYyJ9LGJveHBvaW50czp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwib3V0bGllcnMiLCJzdXNwZWN0ZWRvdXRsaWVycyIsITFdLGRmbHQ6Im91dGxpZXJzIixlZGl0VHlwZToiY2FsYyJ9LGJveG1lYW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInNkIiwhMV0sZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGppdHRlcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LHBvaW50cG9zOnt2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MixlZGl0VHlwZToiY2FsYyJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOntvdXRsaWVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsIDAsIDAsIDApIixlZGl0VHlwZToic3R5bGUifSxzeW1ib2w6cyh7fSxsLnN5bWJvbCx7YXJyYXlPazohMSxlZGl0VHlwZToicGxvdCJ9KSxvcGFjaXR5OnMoe30sbC5vcGFjaXR5LHthcnJheU9rOiExLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSksc2l6ZTpzKHt9LGwuc2l6ZSx7YXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9KSxjb2xvcjpzKHt9LGwuY29sb3Ise2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLGxpbmU6e2NvbG9yOnMoe30sYy5jb2xvcix7YXJyYXlPazohMSxkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InN0eWxlIn0pLHdpZHRoOnMoe30sYy53aWR0aCx7YXJyYXlPazohMSxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0pLG91dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LG91dGxpZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGZpbGxjb2xvcjpuLmZpbGxjb2xvcixvZmZzZXRncm91cDppLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOmkuYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6e21hcmtlcjpuLnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6bi51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToic3R5bGUifSxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJib3hlcyIsInBvaW50cyJdLGRmbHQ6ImJveGVzK3BvaW50cyIsZWRpdFR5cGU6InN0eWxlIn19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2Jhci9hdHRyaWJ1dGVzIjo4MzksIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA1MX1dLDg2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLl8sbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuPXt0ZXh0OiJ0eCIsaG92ZXJ0ZXh0OiJodHgifTtmb3IodmFyIGkgaW4gbilBcnJheS5pc0FycmF5KGVbaV0pJiYodFtuW2ldXT1lW2ldW3JdKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQudi1lLnZ9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC52fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsZixoLHAsZD10Ll9mdWxsTGF5b3V0LGc9by5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLHY9by5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLG09W10seT0idmlvbGluIj09PWUudHlwZT8iX251bVZpb2xpbnMiOiJfbnVtQm94ZXMiOyJoIj09PWUub3JpZW50YXRpb24/KHU9ZyxmPSJ4IixoPXYscD0ieSIpOih1PXYsZj0ieSIsaD1nLHA9IngiKTt2YXIgeCxiPXUubWFrZUNhbGNkYXRhKGUsZiksXz1mdW5jdGlvbih0LGUscixhLG8pe2lmKGUgaW4gdClyZXR1cm4gci5tYWtlQ2FsY2RhdGEodCxlKTt2YXIgcztzPWUrIjAiaW4gdD90W2UrIjAiXToibmFtZSJpbiB0JiYoImNhdGVnb3J5Ij09PXIudHlwZXx8bih0Lm5hbWUpJiYtMSE9PVsibGluZWFyIiwibG9nIl0uaW5kZXhPZihyLnR5cGUpfHxpLmlzRGF0ZVRpbWUodC5uYW1lKSYmImRhdGUiPT09ci50eXBlKT90Lm5hbWU6bzt2YXIgbD0ibXVsdGljYXRlZ29yeSI9PT1yLnR5cGU/ci5yMmNfanVzdF9pbmRpY2VzKHMpOnIuZDJjKHMsMCx0W2UrImNhbGVuZGFyIl0pO3JldHVybiBhLm1hcChmdW5jdGlvbigpe3JldHVybiBsfSl9KGUscCxoLGIsZFt5XSksdz1pLmRpc3RpbmN0VmFscyhfKSxrPXcudmFscyxUPXcubWluRGlmZi8yLEE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkocisxKSxpPTA7aTxyO2krKyluW2ldPXRbaV0tZTtyZXR1cm4gbltyXT10W3ItMV0rZSxufShrLFQpLE09ay5sZW5ndGgsUz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09W107cmV0dXJuIGV9KE0pO2ZvcihyPTA7cjxlLl9sZW5ndGg7cisrKXt2YXIgRT1iW3JdO2lmKG4oRSkpe3ZhciBDPWkuZmluZEJpbihfW3JdLEEpO2lmKEM+PTAmJkM8TSl7dmFyIEw9e3Y6RSxpOnJ9O3MoTCxlLHIpLFNbQ10ucHVzaChMKX19fXZhciB6PSJhbGwiPT09KGUuYm94cG9pbnRzfHxlLnBvaW50cyk/aS5pZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdC52PHgubGZ8fHQudj54LnVmfTtmb3Iocj0wO3I8TTtyKyspaWYoU1tyXS5sZW5ndGg+MCl7dmFyIE89U1tyXS5zb3J0KGwpLEk9Ty5tYXAoYyksRD1JLmxlbmd0aDsoeD17fSkucG9zPWtbcl0seC5wdHM9Tyx4Lm1pbj1JWzBdLHgubWF4PUlbRC0xXSx4Lm1lYW49aS5tZWFuKEksRCkseC5zZD1pLnN0ZGV2KEksRCx4Lm1lYW4pLHgucTE9aS5pbnRlcnAoSSwuMjUpLHgubWVkPWkuaW50ZXJwKEksLjUpLHgucTM9aS5pbnRlcnAoSSwuNzUpLHgubGY9TWF0aC5taW4oeC5xMSxJW01hdGgubWluKGkuZmluZEJpbigyLjUqeC5xMS0xLjUqeC5xMyxJLCEwKSsxLEQtMSldKSx4LnVmPU1hdGgubWF4KHgucTMsSVtNYXRoLm1heChpLmZpbmRCaW4oMi41KngucTMtMS41KngucTEsSSksMCldKSx4LmxvPTQqeC5xMS0zKngucTMseC51bz00KngucTMtMyp4LnExO3ZhciBQPTEuNTcqKHgucTMteC5xMSkvTWF0aC5zcXJ0KEQpO3gubG49eC5tZWQtUCx4LnVuPXgubWVkK1AseC5wdHMyPU8uZmlsdGVyKHopLG0ucHVzaCh4KX0hZnVuY3Rpb24odCxlKXtpZihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe2Zvcih2YXIgbj10W3JdLnB0c3x8W10sYT17fSxvPTA7bzxuLmxlbmd0aDtvKyspYVtuW29dLmldPW87aS50YWdTZWxlY3RlZChuLGUsYSl9fShtLGUpO3ZhciBSPW8uZmluZEV4dHJlbWVzKHUsYix7cGFkZGVkOiEwfSk7cmV0dXJuIGUuX2V4dHJlbWVzW3UuX2lkXT1SLG0ubGVuZ3RoPjA/KG1bMF0udD17bnVtOmRbeV0sZFBvczpULHBvc0xldHRlcjpwLHZhbExldHRlcjpmLGxhYmVsczp7bWVkOmEodCwibWVkaWFuOiIpLG1pbjphKHQsIm1pbjoiKSxxMTphKHQsInExOiIpLHEzOmEodCwicTM6IiksbWF4OmEodCwibWF4OiIpLG1lYW46InNkIj09PWUuYm94bWVhbj9hKHQsIm1lYW4gXHhiMSBcdTAzYzM6Iik6YSh0LCJtZWFuOiIpLGxmOmEodCwibG93ZXIgZmVuY2U6IiksdWY6YSh0LCJ1cHBlciBmZW5jZToiKX19LGRbeV0rKyxtKTpbe3Q6e2VtcHR5OiEwfX1dfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDg2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKS5nZXRBeGlzR3JvdXAsbz1bInYiLCJoIl07ZnVuY3Rpb24gcyh0LGUscixvKXt2YXIgcyxsLGMsdT1lLmNhbGNkYXRhLGY9ZS5fZnVsbExheW91dCxoPW8uX2lkLHA9aC5jaGFyQXQoMCksZD1bXSxnPTA7Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKylmb3IoYz11W3Jbc11dLGw9MDtsPGMubGVuZ3RoO2wrKylkLnB1c2goY1tsXS5wb3MpLGcrPShjW2xdLnB0czJ8fFtdKS5sZW5ndGg7aWYoZC5sZW5ndGgpe3ZhciB2PWkuZGlzdGluY3RWYWxzKGQpLG09di5taW5EaWZmLzI7bi5taW5EdGljayhvLHYubWluRGlmZix2LnZhbHNbMF0sITApO3ZhciB5PWZbInZpb2xpbiI9PT10PyJfbnVtVmlvbGlucyI6Il9udW1Cb3hlcyJdLHg9Imdyb3VwIj09PWZbdCsibW9kZSJdJiZ5PjEsYj0xLWZbdCsiZ2FwIl0sXz0xLWZbdCsiZ3JvdXBnYXAiXTtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgdyxrLFQsQSxNLFMsRT0oYz11W3Jbc11dKVswXS50cmFjZSxDPWNbMF0udCxMPUUud2lkdGgsej1FLnNpZGU7aWYoTCl3PWs9QT1MLzIsVD0wO2Vsc2UgaWYodz1tLHgpe3ZhciBPPWEoZixvLl9pZCkrRS5vcmllbnRhdGlvbixJPShmLl9hbGlnbm1lbnRPcHRzW09dfHx7fSlbRS5hbGlnbm1lbnRncm91cF18fHt9LEQ9T2JqZWN0LmtleXMoSS5vZmZzZXRHcm91cHN8fHt9KS5sZW5ndGgsUD1EfHx5O2s9dypiKl8vUCxUPTIqdyooKChEP0UuX29mZnNldEluZGV4OkMubnVtKSsuNSkvUC0uNSkqYixBPXcqYi9QfWVsc2Ugaz13KmIqXyxUPTAsQT13O0MuZFBvcz13LEMuYlBvcz1ULEMuYmRQb3M9ayxDLndIb3Zlcj1BO3ZhciBSLEYsQixOLGosVixVPVQrazsicG9zaXRpdmUiPT09ej8oTT13KihMPzE6LjUpLFI9VSxTPVI9VCk6Im5lZ2F0aXZlIj09PXo/KE09Uj1ULFM9dyooTD8xOi41KSxGPVUpOihNPVM9dyxSPUY9VSk7dmFyIHE9ITE7aWYoKEUuYm94cG9pbnRzfHxFLnBvaW50cykmJmc+MCl7dmFyIEg9RS5wb2ludHBvcyxHPUUuaml0dGVyLFk9RS5tYXJrZXIuc2l6ZS8yLFc9MDtIK0c+PTAmJigoVz1VKihIK0cpKT5NPyhxPSEwLGo9WSxCPVcpOlc+UiYmKGo9WSxCPU0pKSxXPD1NJiYoQj1NKTt2YXIgWD0wO0gtRzw9MCYmKChYPS1VKihILUcpKT5TPyhxPSEwLFY9WSxOPVgpOlg+RiYmKFY9WSxOPVMpKSxYPD1TJiYoTj1TKX1lbHNlIEI9TSxOPVM7dmFyIFo9bmV3IEFycmF5KGMubGVuZ3RoKTtmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKVpbbF09Y1tsXS5wb3M7RS5fZXh0cmVtZXNbaF09bi5maW5kRXh0cmVtZXMobyxaLHtwYWRkZWQ6cSx2cGFkbWludXM6Tix2cGFkcGx1czpCLHBwYWRtaW51czp7eDpWLHk6an1bcF0scHBhZHBsdXM6e3g6aix5OlZ9W3BdfSl9fX1lLmV4cG9ydHM9e2Nyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2FsY2RhdGEsbj1lLnhheGlzLGk9ZS55YXhpcyxhPTA7YTxvLmxlbmd0aDthKyspe2Zvcih2YXIgbD1vW2FdLGM9ImgiPT09bD9pOm4sdT1bXSxmPTA7ZjxyLmxlbmd0aDtmKyspe3ZhciBoPXJbZl0scD1oWzBdLnQsZD1oWzBdLnRyYWNlOyEwIT09ZC52aXNpYmxlfHwiYm94IiE9PWQudHlwZSYmImNhbmRsZXN0aWNrIiE9PWQudHlwZXx8cC5lbXB0eXx8KGQub3JpZW50YXRpb258fCJ2IikhPT1sfHxkLnhheGlzIT09bi5faWR8fGQueWF4aXMhPT1pLl9pZHx8dS5wdXNoKGYpfXMoImJveCIsdCx1LGMpfX0sc2V0UG9zaXRpb25PZmZzZXQ6c319LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxfV0sODY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyLGEpe3ZhciBvLHMsbD1yKCJ5IiksYz1yKCJ4IiksdT1jJiZjLmxlbmd0aDtpZihsJiZsLmxlbmd0aClvPSJ2Iix1P3M9TWF0aC5taW4obi5taW5Sb3dMZW5ndGgoYyksbi5taW5Sb3dMZW5ndGgobCkpOihyKCJ4MCIpLHM9bi5taW5Sb3dMZW5ndGgobCkpO2Vsc2V7aWYoIXUpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTtvPSJoIixyKCJ5MCIpLHM9bi5taW5Sb3dMZW5ndGgoYyl9ZS5fbGVuZ3RoPXMsaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpLHIoIm9yaWVudGF0aW9uIixvKX1mdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWkucHJlZml4LG89bi5jb2VyY2UyKHQsZSxzLCJtYXJrZXIub3V0bGllcmNvbG9yIiksbD1yKCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3IiKSxjPXIoYSsicG9pbnRzIixvfHxsPyJzdXNwZWN0ZWRvdXRsaWVycyI6dm9pZCAwKTtjPyhyKCJqaXR0ZXIiLCJhbGwiPT09Yz8uMzowKSxyKCJwb2ludHBvcyIsImFsbCI9PT1jPy0xLjU6MCkscigibWFya2VyLnN5bWJvbCIpLHIoIm1hcmtlci5vcGFjaXR5IikscigibWFya2VyLnNpemUiKSxyKCJtYXJrZXIuY29sb3IiLGUubGluZS5jb2xvcikscigibWFya2VyLmxpbmUuY29sb3IiKSxyKCJtYXJrZXIubGluZS53aWR0aCIpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT1jJiYocigibWFya2VyLmxpbmUub3V0bGllcmNvbG9yIixlLm1hcmtlci5jb2xvcikscigibWFya2VyLmxpbmUub3V0bGllcndpZHRoIikpLHIoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigic2VsZWN0ZWQubWFya2VyLnNpemUiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplIikscigidGV4dCIpLHIoImhvdmVydGV4dCIpKTpkZWxldGUgZS5tYXJrZXI7dmFyIHU9cigiaG92ZXJvbiIpOyJhbGwiIT09dSYmLTE9PT11LmluZGV4T2YoInBvaW50cyIpfHxyKCJob3ZlcnRlbXBsYXRlIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9bCh0LGUsbyxpKSwhMSE9PWUudmlzaWJsZSYmKG8oImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxvKCJsaW5lLndpZHRoIiksbygiZmlsbGNvbG9yIixhLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLC41KSksbygid2hpc2tlcndpZHRoIiksbygiYm94bWVhbiIpLG8oIndpZHRoIiksbygibm90Y2hlZCIsdm9pZCAwIT09dC5ub3RjaHdpZHRoKSYmbygibm90Y2h3aWR0aCIpLGModCxlLG8se3ByZWZpeDoiYm94In0pKX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaTtmdW5jdGlvbiBhKHQpe3JldHVybiBuLmNvZXJjZShpLl9pbnB1dCxpLHMsdCl9Zm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPShpPXRbbF0pLnR5cGU7ImJveCIhPT1jJiYidmlvbGluIiE9PWN8fChyPWkuX2lucHV0LCJncm91cCI9PT1lW2MrIm1vZGUiXSYmbyhyLGksZSxhKSl9fSxoYW5kbGVTYW1wbGVEZWZhdWx0czpsLGhhbmRsZVBvaW50c0RlZmF1bHRzOmN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL2Jhci9kZWZhdWx0cyI6ODQzLCIuL2F0dHJpYnV0ZXMiOjg2Mn1dLDg2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ob3Zlck9uQm94JiYodC5ob3Zlck9uQm94PWUuaG92ZXJPbkJveCksInhWYWwiaW4gZSYmKHQueD1lLnhWYWwpLCJ5VmFsImluIGUmJih0Lnk9ZS55VmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDg2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpO2Z1bmN0aW9uIGwodCxlLHIscyl7dmFyIGwsYyx1LGYsaCxwLGQsZyx2LG0seSx4LGI9dC5jZCxfPXQueGEsdz10LnlhLGs9YlswXS50cmFjZSxUPWJbMF0udCxBPSJ2aW9saW4iPT09ay50eXBlLE09W10sUz1ULmJkUG9zLEU9VC53SG92ZXIsQz1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3MrVC5iUG9zLXB9O0EmJiJib3RoIiE9PWsuc2lkZT8oInBvc2l0aXZlIj09PWsuc2lkZSYmKHY9ZnVuY3Rpb24odCl7dmFyIGU9Qyh0KTtyZXR1cm4gYS5pbmJveChlLGUrRSxtKX0pLCJuZWdhdGl2ZSI9PT1rLnNpZGUmJih2PWZ1bmN0aW9uKHQpe3ZhciBlPUModCk7cmV0dXJuIGEuaW5ib3goZS1FLGUsbSl9KSk6dj1mdW5jdGlvbih0KXt2YXIgZT1DKHQpO3JldHVybiBhLmluYm94KGUtRSxlK0UsbSl9LHg9QT9mdW5jdGlvbih0KXtyZXR1cm4gYS5pbmJveCh0LnNwYW5bMF0taCx0LnNwYW5bMV0taCxtKX06ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4taCx0Lm1heC1oLG0pfSwiaCI9PT1rLm9yaWVudGF0aW9uPyhoPWUscD1yLGQ9eCxnPXYsbD0ieSIsdT13LGM9IngiLGY9Xyk6KGg9cixwPWUsZD12LGc9eCxsPSJ4Iix1PV8sYz0ieSIsZj13KTt2YXIgTD1NYXRoLm1pbigxLFMvTWF0aC5hYnModS5yMmModS5yYW5nZVsxXSktdS5yMmModS5yYW5nZVswXSkpKTtmdW5jdGlvbiB6KHQpe3JldHVybihkKHQpK2codCkpLzJ9bT10Lm1heEhvdmVyRGlzdGFuY2UtTCx5PXQubWF4U3Bpa2VEaXN0YW5jZS1MO3ZhciBPPWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihzLGQsZyx6KTtpZihhLmdldENsb3Nlc3QoYixPLHQpLCExPT09dC5pbmRleClyZXR1cm5bXTt2YXIgST1iW3QuaW5kZXhdLEQ9ay5saW5lLmNvbG9yLFA9KGsubWFya2VyfHx7fSkuY29sb3I7by5vcGFjaXR5KEQpJiZrLmxpbmUud2lkdGg/dC5jb2xvcj1EOm8ub3BhY2l0eShQKSYmay5ib3hwb2ludHM/dC5jb2xvcj1QOnQuY29sb3I9ay5maWxsY29sb3IsdFtsKyIwIl09dS5jMnAoSS5wb3MrVC5iUG9zLVMsITApLHRbbCsiMSJdPXUuYzJwKEkucG9zK1QuYlBvcytTLCEwKSx0W2wrIkxhYmVsVmFsIl09SS5wb3M7dmFyIFI9bCsiU3Bpa2UiO3Quc3Bpa2VEaXN0YW5jZT16KEkpKnkvbSx0W1JdPXUuYzJwKEkucG9zLCEwKTt2YXIgRj17fSxCPVsibWVkIiwibWluIiwicTEiLCJxMyIsIm1heCJdOyhrLmJveG1lYW58fChrLm1lYW5saW5lfHx7fSkudmlzaWJsZSkmJkIucHVzaCgibWVhbiIpLChrLmJveHBvaW50c3x8ay5wb2ludHMpJiZCLnB1c2goImxmIiwidWYiKTtmb3IodmFyIE49MDtOPEIubGVuZ3RoO04rKyl7dmFyIGo9QltOXTtpZihqIGluIEkmJiEoSVtqXWluIEYpKXtGW0lbal1dPSEwO3ZhciBWPUlbal0sVT1mLmMycChWLCEwKSxxPWkuZXh0ZW5kRmxhdCh7fSx0KTtxW2MrIjAiXT1xW2MrIjEiXT1VLHFbYysiTGFiZWxWYWwiXT1WLHFbYysiTGFiZWwiXT0oVC5sYWJlbHM/VC5sYWJlbHNbal0rIiAiOiIiKStuLmhvdmVyTGFiZWxUZXh0KGYsVikscS5ob3Zlck9uQm94PSEwLCJtZWFuIj09PWomJiJzZCJpbiBJJiYic2QiPT09ay5ib3htZWFuJiYocVtjKyJlcnIiXT1JLnNkKSx0Lm5hbWU9IiIsdC5zcGlrZURpc3RhbmNlPXZvaWQgMCx0W1JdPXZvaWQgMCxxLmhvdmVydGVtcGxhdGU9ITEsTS5wdXNoKHEpfX1yZXR1cm4gTX1mdW5jdGlvbiBjKHQsZSxyKXtmb3IodmFyIG4sbyxsLGM9dC5jZCx1PXQueGEsZj10LnlhLGg9Y1swXS50cmFjZSxwPXUuYzJwKGUpLGQ9Zi5jMnAociksZz1hLnF1YWRyYXR1cmUoZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHUuYzJwKHQueCktcCktZSwxLTMvZSl9LGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhmLmMycCh0LnkpLWQpLWUsMS0zL2UpfSksdj0hMSxtPTA7bTxjLmxlbmd0aDttKyspe289Y1ttXTtmb3IodmFyIHk9MDt5PChvLnB0c3x8W10pLmxlbmd0aDt5Kyspe3ZhciB4PWcobD1vLnB0c1t5XSk7eDw9dC5kaXN0YW5jZSYmKHQuZGlzdGFuY2U9eCx2PVttLHldKX19aWYoIXYpcmV0dXJuITE7bD0obz1jW3ZbMF1dKS5wdHNbdlsxXV07dmFyIGIsXz11LmMycChsLngsITApLHc9Zi5jMnAobC55LCEwKSxrPWwubXJjfHwxO3JldHVybiBuPWkuZXh0ZW5kRmxhdCh7fSx0LHtpbmRleDpsLmksY29sb3I6KGgubWFya2VyfHx7fSkuY29sb3IsbmFtZTpoLm5hbWUseDA6Xy1rLHgxOl8rayx5MDp3LWsseTE6dytrLHNwaWtlRGlzdGFuY2U6dC5kaXN0YW5jZSxob3ZlcnRlbXBsYXRlOmguaG92ZXJ0ZW1wbGF0ZX0pLCJoIj09PWgub3JpZW50YXRpb24/KGI9ZixuLnhMYWJlbFZhbD1sLngsbi55TGFiZWxWYWw9by5wb3MpOihiPXUsbi54TGFiZWxWYWw9by5wb3Msbi55TGFiZWxWYWw9bC55KSxuW2IuX2lkLmNoYXJBdCgwKSsiU3Bpa2UiXT1iLmMycChvLnBvcywhMCkscyhsLGgsbiksbn1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5jZFswXS50cmFjZS5ob3Zlcm9uLG89W107cmV0dXJuLTEhPT1hLmluZGV4T2YoImJveGVzIikmJihvPW8uY29uY2F0KGwodCxlLHIsbikpKSwtMSE9PWEuaW5kZXhPZigicG9pbnRzIikmJihpPWModCxlLHIpKSwiY2xvc2VzdCI9PT1uP2k/W2ldOm86aT8oby5wdXNoKGkpLG8pOm99LGhvdmVyT25Cb3hlczpsLGhvdmVyT25Qb2ludHM6Y319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCI6MTA1OX1dLDg2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KCIuL2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKS5zdXBwbHlMYXlvdXREZWZhdWx0cyxuLmNhbGM9dCgiLi9jYWxjIiksbi5jcm9zc1RyYWNlQ2FsYz10KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxuLnBsb3Q9dCgiLi9wbG90IikucGxvdCxuLnN0eWxlPXQoIi4vc3R5bGUiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImJveCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzdmciLCJzeW1ib2xzIiwib3JpZW50ZWQiLCJib3gtdmlvbGluIiwic2hvd0xlZ2VuZCIsImJveExheW91dCIsInpvb21TY2FsZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi9hdHRyaWJ1dGVzIjo4NjIsIi4vY2FsYyI6ODYzLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjg2NCwiLi9kZWZhdWx0cyI6ODY1LCIuL2V2ZW50X2RhdGEiOjg2NiwiLi9ob3ZlciI6ODY3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NjksIi4vbGF5b3V0X2RlZmF1bHRzIjo4NzAsIi4vcGxvdCI6ODcxLCIuL3NlbGVjdCI6ODcyLCIuL3N0eWxlIjo4NzN9XSw4Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtib3htb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJncm91cCIsIm92ZXJsYXkiXSxkZmx0OiJvdmVybGF5IixlZGl0VHlwZToiY2FsYyJ9LGJveGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zLGVkaXRUeXBlOiJjYWxjIn0sYm94Z3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDg3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbyh0LGUscixpLGEpe2Zvcih2YXIgbz1hKyJMYXlvdXQiLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdO2lmKG4udHJhY2VJcyhjLG8pKXtzPSEwO2JyZWFrfX1zJiYoaShhKyJtb2RlIiksaShhKyJnYXAiKSxpKGErImdyb3VwZ2FwIikpfWUuZXhwb3J0cz17c3VwcGx5TGF5b3V0RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIpe28oMCwwLHIsZnVuY3Rpb24ocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX0sImJveCIpfSxfc3VwcGx5Om99fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4Njl9XSw4NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz01LHM9LjAxO2Z1bmN0aW9uIGwodCxlLHIsYSl7dmFyIG8scyxsPWUucG9zLGM9ZS52YWwsdT1hLmJQb3MsZj1hLndkUG9zfHwwLGg9YS5iUG9zUHhPZmZzZXR8fDAscD1yLndoaXNrZXJ3aWR0aHx8MCxkPXIubm90Y2hlZHx8ITEsZz1kPzEtMipyLm5vdGNod2lkdGg6MTtBcnJheS5pc0FycmF5KGEuYmRQb3MpPyhvPWEuYmRQb3NbMF0scz1hLmJkUG9zWzFdKToobz1hLmJkUG9zLHM9YS5iZFBvcyk7dmFyIHY9dC5zZWxlY3RBbGwoInBhdGguYm94IikuZGF0YSgidmlvbGluIiE9PXIudHlwZXx8ci5ib3gudmlzaWJsZT9pLmlkZW50aXR5OltdKTt2LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJjbGFzcyIsImJveCIpLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaChmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVybiJNMCwwWiI7dmFyIGU9dC5wb3MsYT1sLmMycChlK3UsITApK2gsdj1sLmMycChlK3UtbywhMCkraCxtPWwuYzJwKGUrdStzLCEwKStoLHk9bC5jMnAoZSt1LWYsITApK2gseD1sLmMycChlK3UrZiwhMCkraCxiPWwuYzJwKGUrdS1vKmcsITApK2gsXz1sLmMycChlK3UrcypnLCEwKStoLHc9Yy5jMnAodC5xMSwhMCksaz1jLmMycCh0LnEzLCEwKSxUPWkuY29uc3RyYWluKGMuYzJwKHQubWVkLCEwKSxNYXRoLm1pbih3LGspKzEsTWF0aC5tYXgodyxrKS0xKSxBPXZvaWQgMD09PXQubGZ8fCExPT09ci5ib3hwb2ludHMsTT1jLmMycChBP3QubWluOnQubGYsITApLFM9Yy5jMnAoQT90Lm1heDp0LnVmLCEwKSxFPWMuYzJwKHQubG4sITApLEM9Yy5jMnAodC51biwhMCk7ImgiPT09ci5vcmllbnRhdGlvbj9uLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrVCsiLCIrYisiViIrXysiTSIrdysiLCIrdisiViIrbSsoZD8iSCIrRSsiTCIrVCsiLCIrXysiTCIrQysiLCIrbToiIikrIkgiK2srIlYiK3YrKGQ/IkgiK0MrIkwiK1QrIiwiK2IrIkwiK0UrIiwiK3Y6IiIpKyJaTSIrdysiLCIrYSsiSCIrTSsiTSIraysiLCIrYSsiSCIrUysoMD09PXA/IiI6Ik0iK00rIiwiK3krIlYiK3grIk0iK1MrIiwiK3krIlYiK3gpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrYisiLCIrVCsiSCIrXysiTSIrdisiLCIrdysiSCIrbSsoZD8iViIrRSsiTCIrXysiLCIrVCsiTCIrbSsiLCIrQzoiIikrIlYiK2srIkgiK3YrKGQ/IlYiK0MrIkwiK2IrIiwiK1QrIkwiK3YrIiwiK0U6IiIpKyJaTSIrYSsiLCIrdysiViIrTSsiTSIrYSsiLCIraysiViIrUysoMD09PXA/IiI6Ik0iK3krIiwiK00rIkgiK3grIk0iK3krIiwiK1MrIkgiK3gpKX0pfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGw9ZS54LGM9ZS55LHU9bi5iZFBvcyxmPW4uYlBvcyxoPXIuYm94cG9pbnRzfHxyLnBvaW50cztpLnNlZWRQc2V1ZG9SYW5kb20oKTt2YXIgcD10LnNlbGVjdEFsbCgiZy5wb2ludHMiKS5kYXRhKGg/ZnVuY3Rpb24odCl7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LnQ9bix0LnRyYWNlPXJ9KSx0fTpbXSk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicG9pbnRzIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9cC5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKGZ1bmN0aW9uKHQpe3ZhciBlLG4sYT10LnB0czIsbD1NYXRoLm1heCgodC5tYXgtdC5taW4pLzEwLHQucTMtdC5xMSksYz0xZS05KmwscD1sKnMsZD1bXSxnPTA7aWYoci5qaXR0ZXIpe2lmKDA9PT1sKWZvcihnPTEsZD1uZXcgQXJyYXkoYS5sZW5ndGgpLGU9MDtlPGEubGVuZ3RoO2UrKylkW2VdPTE7ZWxzZSBmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgdj1NYXRoLm1heCgwLGUtbyksbT1hW3ZdLnYseT1NYXRoLm1pbihhLmxlbmd0aC0xLGUrbykseD1hW3ldLnY7ImFsbCIhPT1oJiYoYVtlXS52PHQubGY/eD1NYXRoLm1pbih4LHQubGYpOm09TWF0aC5tYXgobSx0LnVmKSk7dmFyIGI9TWF0aC5zcXJ0KHAqKHktdikvKHgtbStjKSl8fDA7Yj1pLmNvbnN0cmFpbihNYXRoLmFicyhiKSwwLDEpLGQucHVzaChiKSxnPU1hdGgubWF4KGIsZyl9bj0yKnIuaml0dGVyLyhnfHwxKX1mb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgXz1hW2VdLHc9Xy52LGs9ci5qaXR0ZXI/bipkW2VdKihpLnBzZXVkb1JhbmRvbSgpLS41KTowLFQ9dC5wb3MrZit1KihyLnBvaW50cG9zK2spOyJoIj09PXIub3JpZW50YXRpb24/KF8ueT1ULF8ueD13KTooXy54PVQsXy55PXcpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT1oJiZ3PHQudW8mJnc+dC5sbyYmKF8uc289ITApfXJldHVybiBhfSk7ZC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCksZC5leGl0KCkucmVtb3ZlKCksZC5jYWxsKGEudHJhbnNsYXRlUG9pbnRzLGwsYyl9ZnVuY3Rpb24gdSh0LGUscixhKXt2YXIgbyxzLGw9ZS5wb3MsYz1lLnZhbCx1PWEuYlBvcyxmPWEuYlBvc1B4T2Zmc2V0fHwwLGg9ci5ib3htZWFufHwoci5tZWFubGluZXx8e30pLnZpc2libGU7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciBwPXQuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5kYXRhKCJib3giPT09ci50eXBlJiZyLmJveG1lYW58fCJ2aW9saW4iPT09ci50eXBlJiZyLmJveC52aXNpYmxlJiZyLm1lYW5saW5lLnZpc2libGU/aS5pZGVudGl0eTpbXSk7cC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibWVhbiIpLnN0eWxlKHtmaWxsOiJub25lIiwidmVjdG9yLWVmZmVjdCI6Im5vbi1zY2FsaW5nLXN0cm9rZSJ9KSxwLmV4aXQoKS5yZW1vdmUoKSxwLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bC5jMnAodC5wb3MrdSwhMCkrZixpPWwuYzJwKHQucG9zK3UtbywhMCkrZixhPWwuYzJwKHQucG9zK3UrcywhMCkrZixwPWMuYzJwKHQubWVhbiwhMCksZD1jLmMycCh0Lm1lYW4tdC5zZCwhMCksZz1jLmMycCh0Lm1lYW4rdC5zZCwhMCk7ImgiPT09ci5vcmllbnRhdGlvbj9uLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrcCsiLCIraSsiViIrYSsoInNkIj09PWg/Im0wLDBMIitkKyIsIitlKyJMIitwKyIsIitpKyJMIitnKyIsIitlKyJaIjoiIikpOm4uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitpKyIsIitwKyJIIithKygic2QiPT09aD8ibTAsMEwiK2UrIiwiK2QrIkwiK2krIiwiK3ArIkwiK2UrIiwiK2crIloiOiIiKSl9KX1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89ZS54YXhpcyxzPWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBib3hlcyIpLmVhY2goZnVuY3Rpb24odCl7dmFyIHIsaSxhPW4uc2VsZWN0KHRoaXMpLGY9dFswXSxoPWYudCxwPWYudHJhY2U7ZS5pc1JhbmdlUGxvdHx8KGYubm9kZTM9YSksaC53ZFBvcz1oLmJkUG9zKnAud2hpc2tlcndpZHRoLCEwIT09cC52aXNpYmxlfHxoLmVtcHR5P2EucmVtb3ZlKCk6KCJoIj09PXAub3JpZW50YXRpb24/KHI9cyxpPW8pOihyPW8saT1zKSxsKGEse3BvczpyLHZhbDppfSxwLGgpLGMoYSx7eDpvLHk6c30scCxoKSx1KGEse3BvczpyLHZhbDppfSxwLGgpKX0pfSxwbG90Qm94QW5kV2hpc2tlcnM6bCxwbG90UG9pbnRzOmMscGxvdEJveE1lYW46dX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2xpYiI6NzAwLGQzOjE1NH1dLDg3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5jZCxhPXQueGF4aXMsbz10LnlheGlzLHM9W107aWYoITE9PT1lKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKG49MDtuPChpW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspaVtyXS5wdHNbbl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKG49MDtuPChpW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspe3ZhciBsPWlbcl0ucHRzW25dLGM9YS5jMnAobC54KSx1PW8uYzJwKGwueSk7ZS5jb250YWlucyhbYyx1XSxudWxsLGwuaSx0KT8ocy5wdXNoKHtwb2ludE51bWJlcjpsLmkseDphLmMyZChsLngpLHk6by5jMmQobC55KX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBzfX0se31dLDg3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UuYm94ZXMiKTtyLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89ZVswXS50cmFjZSxzPW8ubGluZS53aWR0aDtmdW5jdGlvbiBsKHQsZSxyLG4pe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsZSsicHgiKS5jYWxsKGkuc3Ryb2tlLHIpLmNhbGwoaS5maWxsLG4pfXZhciBjPXIuc2VsZWN0QWxsKCJwYXRoLmJveCIpO2lmKCJjYW5kbGVzdGljayI9PT1vLnR5cGUpYy5lYWNoKGZ1bmN0aW9uKHQpe2lmKCF0LmVtcHR5KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPW9bdC5kaXJdO2woZSxyLmxpbmUud2lkdGgsci5saW5lLmNvbG9yLHIuZmlsbGNvbG9yKSxlLnN0eWxlKCJvcGFjaXR5IixvLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KTtlbHNle2woYyxzLG8ubGluZS5jb2xvcixvLmZpbGxjb2xvciksci5zZWxlY3RBbGwoInBhdGgubWVhbiIpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjpzLCJzdHJva2UtZGFzaGFycmF5IjoyKnMrInB4LCIrcysicHgifSkuY2FsbChpLnN0cm9rZSxvLmxpbmUuY29sb3IpO3ZhciB1PXIuc2VsZWN0QWxsKCJwYXRoLnBvaW50Iik7YS5wb2ludFN0eWxlKHUsbyx0KX19KX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsbj1lWzBdLnRyYWNlLGk9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKTtuLnNlbGVjdGVkcG9pbnRzP2Euc2VsZWN0ZWRQb2ludFN0eWxlKGksbik6YS5wb2ludFN0eWxlKGksbix0KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsZDM6MTU0fV0sODc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsaT10KCIuLi9vaGxjL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbyh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxhLmxpbmUuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOmEubGluZS53aWR0aCxlZGl0VHlwZToic3R5bGUifSxmaWxsY29sb3I6YS5maWxsY29sb3IsZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4OmkueCxvcGVuOmkub3BlbixoaWdoOmkuaGlnaCxsb3c6aS5sb3csY2xvc2U6aS5jbG9zZSxsaW5lOnt3aWR0aDpuKHt9LGEubGluZS53aWR0aCx7fSksZWRpdFR5cGU6InN0eWxlIn0saW5jcmVhc2luZzpvKGkuaW5jcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLGRlY3JlYXNpbmc6byhpLmRlY3JlYXNpbmcubGluZS5jb2xvci5kZmx0KSx0ZXh0OmkudGV4dCxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsd2hpc2tlcndpZHRoOm4oe30sYS53aGlza2Vyd2lkdGgse2RmbHQ6MH0pLGhvdmVybGFiZWw6aS5ob3ZlcmxhYmVsfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vYm94L2F0dHJpYnV0ZXMiOjg2MiwiLi4vb2hsYy9hdHRyaWJ1dGVzIjo5OTl9XSw4NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vb2hsYy9jYWxjIikuY2FsY0NvbW1vbjtmdW5jdGlvbiBvKHQsZSxyLG4pe3JldHVybnttaW46cixxMTpNYXRoLm1pbih0LG4pLG1lZDpuLHEzOk1hdGgubWF4KHQsbiksbWF4OmV9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQscz1pLmdldEZyb21JZCh0LGUueGF4aXMpLGw9aS5nZXRGcm9tSWQodCxlLnlheGlzKSxjPXMubWFrZUNhbGNkYXRhKGUsIngiKSx1PWEodCxlLGMsbCxvKTtyZXR1cm4gdS5sZW5ndGg/KG4uZXh0ZW5kRmxhdCh1WzBdLnQse251bTpyLl9udW1Cb3hlcyxkUG9zOm4uZGlzdGluY3RWYWxzKGMpLm1pbkRpZmYvMixwb3NMZXR0ZXI6IngiLHZhbExldHRlcjoieSJ9KSxyLl9udW1Cb3hlcysrLHUpOlt7dDp7ZW1wdHk6ITB9fV19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9vaGxjL2NhbGMiOjFlM31dLDg3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uL29obGMvb2hsY19kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgYT1yKG4rIi5saW5lLmNvbG9yIik7cihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5maWxsY29sb3IiLGkuYWRkT3BhY2l0eShhLC41KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1hKHQsZSxsLGkpPyhsKCJsaW5lLndpZHRoIikscyh0LGUsbCwiaW5jcmVhc2luZyIpLHModCxlLGwsImRlY3JlYXNpbmciKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgid2hpc2tlcndpZHRoIiksaS5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uL29obGMvb2hsY19kZWZhdWx0cyI6MTAwNCwiLi9hdHRyaWJ1dGVzIjo4NzR9XSw4Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2FuZGxlc3RpY2siLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzaG93TGVnZW5kIiwiY2FuZGxlc3RpY2siLCJib3hMYXlvdXQiXSxtZXRhOnt9LGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIikuc3VwcGx5TGF5b3V0RGVmYXVsdHMsY3Jvc3NUcmFjZUNhbGM6dCgiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4uL2JveC9wbG90IikucGxvdCxsYXllck5hbWU6ImJveGxheWVyIixzdHlsZTp0KCIuLi9ib3gvc3R5bGUiKS5zdHlsZSxob3ZlclBvaW50czp0KCIuLi9vaGxjL2hvdmVyIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4uL29obGMvc2VsZWN0Iil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsYyI6ODY0LCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjg2OSwiLi4vYm94L2xheW91dF9kZWZhdWx0cyI6ODcwLCIuLi9ib3gvcGxvdCI6ODcxLCIuLi9ib3gvc3R5bGUiOjg3MywiLi4vb2hsYy9ob3ZlciI6MTAwMiwiLi4vb2hsYy9zZWxlY3QiOjEwMDYsIi4vYXR0cmlidXRlcyI6ODc0LCIuL2NhbGMiOjg3NSwiLi9kZWZhdWx0cyI6ODc2fV0sODc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXhpc19kZWZhdWx0cyIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe2EoImEiKXx8KGEoImRhIiksYSgiYTAiKSksYSgiYiIpfHwoYSgiZGIiKSxhKCJiMCIpKSxmdW5jdGlvbih0LGUscixhKXtbImFheGlzIiwiYmF4aXMiXS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2hhckF0KDApLGw9dFtvXXx8e30sYz1pLm5ld0NvbnRhaW5lcihlLG8pLHU9e3RpY2tmb250OiJ4IixpZDpzKyJheGlzIixsZXR0ZXI6cyxmb250OmUuZm9udCxuYW1lOm8sZGF0YTp0W3NdLGNhbGVuZGFyOmUuY2FsZW5kYXIsZGZsdENvbG9yOmEsYmdDb2xvcjpyLnBhcGVyX2JnY29sb3IsZnVsbExheW91dDpyfTtuKGwsYyx1KSxjLl9jYXRlZ29yaWVzPWMuX2NhdGVnb3JpZXN8fFtdLHRbb118fCItIj09PWwudHlwZXx8KHRbb109e3R5cGU6bC50eXBlfSl9KX0odCxlLHIsbyl9fSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi9heGlzX2RlZmF1bHRzIjo4ODN9XSw4Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZighbihlKXx8cj49MTApcmV0dXJuIG51bGw7dmFyIGk9MS8wO3ZhciBhPS0xLzA7dmFyIG89ZS5sZW5ndGg7Zm9yKHZhciBzPTA7czxvO3MrKyl7dmFyIGw9ZVtzXTtpZihuKGwpKXt2YXIgYz10KGwscisxKTtjJiYoaT1NYXRoLm1pbihjWzBdLGkpLGE9TWF0aC5tYXgoY1sxXSxhKSl9ZWxzZSBpPU1hdGgubWluKGwsaSksYT1NYXRoLm1heChsLGEpfXJldHVybltpLGFdfSh0LDApfX0seyIuLi8uLi9saWIiOjcwMH1dLDg4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4vYXhpc19hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPW4oe2VkaXRUeXBlOiJjYWxjIn0pO28uZmFtaWx5LmRmbHQ9JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsby5zaXplLmRmbHQ9MTIsby5jb2xvci5kZmx0PWEuZGVmYXVsdExpbmUsZS5leHBvcnRzPXtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxhMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkYTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGIwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGNoZWF0ZXJzbG9wZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhYXhpczppLGJheGlzOmksZm9udDpvLGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sdHJhbnNmb3Jtczp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NCwiLi9heGlzX2F0dHJpYnV0ZXMiOjg4Mn1dLDg4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxnLHYsbSx5PW4ocik/ImEiOiJiIix4PSgiYSI9PT15P3QuYWF4aXM6dC5iYXhpcykuc21vb3RoaW5nLGI9ImEiPT09eT90LmEyaTp0LmIyaixfPSJhIj09PXk/cjppLHc9ImEiPT09eT9pOnIsaz0iYSI9PT15P2UuYS5sZW5ndGg6ZS5iLmxlbmd0aCxUPSJhIj09PXk/ZS5iLmxlbmd0aDplLmEubGVuZ3RoLEE9TWF0aC5mbG9vcigiYSI9PT15P3QuYjJqKHcpOnQuYTJpKHcpKSxNPSJhIj09PXk/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsQSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxBLGUpfTt4JiYocz1NYXRoLm1heCgwLE1hdGgubWluKFQtMixBKSksbD1BLXMsbz0iYSI9PT15P2Z1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxzLHIsbCl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10scyxlLGwscil9KTt2YXIgUz1iKF9bMF0pLEU9YihfWzFdKSxDPVM8RT8xOi0xLEw9MWUtOCooRS1TKSx6PUM+MD9NYXRoLmZsb29yOk1hdGguY2VpbCxPPUM+MD9NYXRoLmNlaWw6TWF0aC5mbG9vcixJPUM+MD9NYXRoLm1pbjpNYXRoLm1heCxEPUM+MD9NYXRoLm1heDpNYXRoLm1pbixQPXooUytMKSxSPU8oRS1MKSxGPVtbZj1NKFMpXV07Zm9yKGE9UDthKkM8UipDO2ErPUMpYz1bXSxnPUQoUyxhKSxtPSh2PUkoRSxhK0MpKS1nLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihrLTIsTWF0aC5mbG9vciguNSooZyt2KSkpKSxoPU0odikseCYmKHA9byh1LGctdSksZD1vKHUsdi11KSxjLnB1c2goW2ZbMF0rcFswXS8zKm0sZlsxXStwWzFdLzMqbV0pLGMucHVzaChbaFswXS1kWzBdLzMqbSxoWzFdLWRbMV0vMyptXSkpLGMucHVzaChoKSxGLnB1c2goYyksZj1oO3JldHVybiBGfX0seyIuLi8uLi9saWIiOjcwMH1dLDg4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPXtjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxtaW46MCxtYXg6MS4zLGVkaXRUeXBlOiJjYWxjIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJkYXRlIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyJ9LGF1dG9yYW5nZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub3JtYWwiLCJ0b3plcm8iLCJub25uZWdhdGl2ZSJdLGRmbHQ6Im5vcm1hbCIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dfSxmaXhlZHJhbmdlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2hlYXRlcnR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGV4IiwidmFsdWUiXSxkZmx0OiJ2YWx1ZSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiYXJyYXkiXSxkZmx0OiJhcnJheSIsZWRpdFR5cGU6ImNhbGMifSxudGlja3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsImVuZCIsImJvdGgiLCJub25lIl0sZGZsdDoic3RhcnQiLGVkaXRUeXBlOiJjYWxjIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGlja2FuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMifSx0aWNrcHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJlIiwiRSIsInBvd2VyIiwiU0kiLCJCIl0sZGZsdDoiQiIsZWRpdFR5cGU6ImNhbGMifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb3JtYXRzdG9wczpvKGEudGlja2Zvcm1hdHN0b3BzLCJjYWxjIiwiZnJvbS1yb290IiksY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVscGFkZGluZzp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJjYWxjIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWlub3JncmlkY291bnQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkdGljazp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhcnJheXRpY2swOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxhcnJheWR0aWNrOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGl0bGVvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9fSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzYwLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NH1dLDg4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5hZGRPcGFjaXR5LGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBoPXIubGV0dGVyLHA9ci5mb250fHx7fSxkPW5baCsiYXhpcyJdO2Z1bmN0aW9uIGcocixuKXtyZXR1cm4gby5jb2VyY2UodCxlLGQscixuKX1mdW5jdGlvbiB2KHIsbil7cmV0dXJuIG8uY29lcmNlMih0LGUsZCxyLG4pfXIubmFtZSYmKGUuX25hbWU9ci5uYW1lLGUuX2lkPXIubmFtZSk7dmFyIG09ZygidHlwZSIpOygiLSI9PT1tJiYoci5kYXRhJiZmdW5jdGlvbih0LGUpe2lmKCItIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQuY2hhckF0KDApLG49dFtyKyJjYWxlbmRhciJdO3QudHlwZT1mKGUsbil9KGUsci5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOm09dC50eXBlPWUudHlwZSksZygic21vb3RoaW5nIiksZygiY2hlYXRlcnR5cGUiKSxnKCJzaG93dGlja2xhYmVscyIpLGcoImxhYmVscHJlZml4IixoKyIgPSAiKSxnKCJsYWJlbHN1ZmZpeCIpLGcoInNob3d0aWNrcHJlZml4IiksZygic2hvd3RpY2tzdWZmaXgiKSxnKCJzZXBhcmF0ZXRob3VzYW5kcyIpLGcoInRpY2tmb3JtYXQiKSxnKCJleHBvbmVudGZvcm1hdCIpLGcoInNob3dleHBvbmVudCIpLGcoImNhdGVnb3J5b3JkZXIiKSxnKCJ0aWNrbW9kZSIpLGcoInRpY2t2YWxzIiksZygidGlja3RleHQiKSxnKCJ0aWNrMCIpLGcoImR0aWNrIiksImFycmF5Ij09PWUudGlja21vZGUmJihnKCJhcnJheXRpY2swIiksZygiYXJyYXlkdGljayIpKSxnKCJsYWJlbHBhZGRpbmciKSxlLl9ob3ZlcnRpdGxlPWgsImRhdGUiPT09bSkmJmEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiLHIuY2FsZW5kYXIpO3UoZSxyLmZ1bGxMYXlvdXQpLGUuYzJwPW8uaWRlbnRpdHk7dmFyIHk9ZygiY29sb3IiLHIuZGZsdENvbG9yKSx4PXk9PT10LmNvbG9yP3k6cC5jb2xvcjtnKCJ0aXRsZS50ZXh0IikmJihvLmNvZXJjZUZvbnQoZywidGl0bGUuZm9udCIse2ZhbWlseTpwLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKnAuc2l6ZSksY29sb3I6eH0pLGcoInRpdGxlLm9mZnNldCIpKSxnKCJ0aWNrYW5nbGUiKSxnKCJhdXRvcmFuZ2UiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSkmJmcoInJhbmdlbW9kZSIpLGcoInJhbmdlIiksZS5jbGVhblJhbmdlKCksZygiZml4ZWRyYW5nZSIpLHModCxlLGcsbSksbCh0LGUsZyxtLHIpLGModCxlLGcse2RhdGE6ci5kYXRhLGRhdGFBdHRyOmh9KTt2YXIgYj12KCJncmlkY29sb3IiLGkoeSwuMykpLF89digiZ3JpZHdpZHRoIiksdz1nKCJzaG93Z3JpZCIpO3d8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgaz12KCJzdGFydGxpbmVjb2xvciIseSksVD12KCJzdGFydGxpbmV3aWR0aCIsXyk7Zygic3RhcnRsaW5lIixlLnNob3dncmlkfHwhIWt8fCEhVCl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIEE9digiZW5kbGluZWNvbG9yIix5KSxNPXYoImVuZGxpbmV3aWR0aCIsXyk7cmV0dXJuIGcoImVuZGxpbmUiLGUuc2hvd2dyaWR8fCEhQXx8ISFNKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLHc/KGcoIm1pbm9yZ3JpZGNvdW50IiksZygibWlub3Jncmlkd2lkdGgiLF8pLGcoIm1pbm9yZ3JpZGNvbG9yIixpKGIsLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLCJub25lIj09PWUuc2hvd3RpY2tsYWJlbHMmJihkZWxldGUgZS50aWNrZm9udCxkZWxldGUgZS50aWNrYW5nbGUsZGVsZXRlIGUuc2hvd2V4cG9uZW50LGRlbGV0ZSBlLmV4cG9uZW50Zm9ybWF0LGRlbGV0ZSBlLnRpY2tmb3JtYXQsZGVsZXRlIGUuc2hvd3RpY2tzdWZmaXgsZGVsZXRlIGUuc2hvd3RpY2twcmVmaXgpLGUuc2hvd3RpY2tzdWZmaXh8fGRlbGV0ZSBlLnRpY2tzdWZmaXgsZS5zaG93dGlja3ByZWZpeHx8ZGVsZXRlIGUudGlja3ByZWZpeCxnKCJ0aWNrbW9kZSIpLGV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo3NDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6NzUyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjc2NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc2NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjc2OSwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9hdHRyaWJ1dGVzIjo4ODB9XSw4ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXkxRCxhPXQoIi4vY2hlYXRlcl9iYXNpcyIpLG89dCgiLi9hcnJheV9taW5tYXgiKSxzPXQoIi4vY2FsY19ncmlkbGluZXMiKSxsPXQoIi4vY2FsY19sYWJlbHMiKSxjPXQoIi4vY2FsY19jbGlwcGF0aCIpLHU9dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSIpLGg9dCgiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiKSxwPXQoIi4vc2V0X2NvbnZlcnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmdldEZyb21JZCh0LGUueGF4aXMpLGQ9bi5nZXRGcm9tSWQodCxlLnlheGlzKSxnPWUuYWF4aXMsdj1lLmJheGlzLG09ZS54LHk9ZS55LHg9W107bSYmaShtKSYmeC5wdXNoKCJ4IikseSYmaSh5KSYmeC5wdXNoKCJ5IikseC5sZW5ndGgmJmgoZSxnLHYsImEiLCJiIix4KTt2YXIgYj1lLl9hPWUuX2F8fGUuYSxfPWUuX2I9ZS5fYnx8ZS5iO209ZS5feHx8ZS54LHk9ZS5feXx8ZS55O3ZhciB3PXt9O2lmKGUuX2NoZWF0ZXIpe3ZhciBrPSJpbmRleCI9PT1nLmNoZWF0ZXJ0eXBlP2IubGVuZ3RoOmIsVD0iaW5kZXgiPT09di5jaGVhdGVydHlwZT9fLmxlbmd0aDpfO209YShrLFQsZS5jaGVhdGVyc2xvcGUpfWUuX3g9bT11KG0pLGUuX3k9eT11KHkpLGYobSxiLF8pLGYoeSxiLF8pLHAoZSksZS5zZXRTY2FsZSgpO3ZhciBBPW8obSksTT1vKHkpLFM9LjUqKEFbMV0tQVswXSksRT0uNSooQVsxXStBWzBdKSxDPS41KihNWzFdLU1bMF0pLEw9LjUqKE1bMV0rTVswXSk7cmV0dXJuIEE9W0UtMS4zKlMsRSsxLjMqU10sTT1bTC0xLjMqQyxMKzEuMypDXSxlLl9leHRyZW1lc1tyLl9pZF09bi5maW5kRXh0cmVtZXMocixBLHtwYWRkZWQ6ITB9KSxlLl9leHRyZW1lc1tkLl9pZF09bi5maW5kRXh0cmVtZXMoZCxNLHtwYWRkZWQ6ITB9KSxzKGUsImEiLCJiIikscyhlLCJiIiwiYSIpLGwoZSxnKSxsKGUsdiksdy5jbGlwc2VnbWVudHM9YyhlLl94Y3RybCxlLl95Y3RybCxnLHYpLHcueD1tLHcueT15LHcuYT1iLHcuYj1fLFt3XX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjk1MCwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjk1MiwiLi9hcnJheV9taW5tYXgiOjg3OSwiLi9jYWxjX2NsaXBwYXRoIjo4ODUsIi4vY2FsY19ncmlkbGluZXMiOjg4NiwiLi9jYWxjX2xhYmVscyI6ODg3LCIuL2NoZWF0ZXJfYmFzaXMiOjg4OSwiLi9zZXRfY29udmVydCI6OTAyLCIuL3Ntb290aF9maWxsXzJkX2FycmF5Ijo5MDN9XSw4ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ISFyLnNtb290aGluZyxjPSEhbi5zbW9vdGhpbmcsdT10WzBdLmxlbmd0aC0xLGY9dC5sZW5ndGgtMTtmb3IoaT0wLGE9W10sbz1bXTtpPD11O2krKylhW2ldPXRbMF1baV0sb1tpXT1lWzBdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT0wLGE9W10sbz1bXTtpPD1mO2krKylhW2ldPXRbaV1bdV0sb1tpXT1lW2ldW3VdO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksaT11LGE9W10sbz1bXTtpPj0wO2ktLSlhW3UtaV09dFtmXVtpXSxvW3UtaV09ZVtmXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9ZixhPVtdLG89W107aT49MDtpLS0pYVtmLWldPXRbaV1bMF0sb1tmLWldPWVbaV1bMF07cmV0dXJuIHMucHVzaCh7eDphLHk6byxiaWN1YmljOmN9KSxzfX0se31dLDg4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxnLHYsbSx5LHg9dFsiXyIrZV0sYj10W2UrImF4aXMiXSxfPWIuX2dyaWRsaW5lcz1bXSx3PWIuX21pbm9yZ3JpZGxpbmVzPVtdLGs9Yi5fYm91bmRhcnlsaW5lcz1bXSxUPXRbIl8iK3JdLEE9dFtyKyJheGlzIl07ImFycmF5Ij09PWIudGlja21vZGUmJihiLnRpY2t2YWxzPXguc2xpY2UoKSk7dmFyIE09dC5feGN0cmwsUz10Ll95Y3RybCxFPU1bMF0ubGVuZ3RoLEM9TS5sZW5ndGgsTD10Ll9hLmxlbmd0aCx6PXQuX2IubGVuZ3RoO24ucHJlcFRpY2tzKGIpLCJhcnJheSI9PT1iLnRpY2ttb2RlJiZkZWxldGUgYi50aWNrdmFsczt2YXIgTz1iLnNtb290aGluZz8zOjE7ZnVuY3Rpb24gSShuKXt2YXIgaSxhLG8scyxsLGMsdSxmLHAsZCxnLHYsbT1bXSx5PVtdLHg9e307aWYoImIiPT09ZSlmb3IoYT10LmIyaihuKSxvPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbih6LTIsYSkpKSxzPWEtbyx4Lmxlbmd0aD16LHguY3Jvc3NMZW5ndGg9TCx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLGEpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLHMpfSxpPTA7aTxMO2krKyljPU1hdGgubWluKEwtMixpKSx1PWktYyxmPXQuZXZhbHh5KFtdLGksYSksQS5zbW9vdGhpbmcmJmk+MCYmKHA9dC5keHlkaShbXSxpLTEsbywwLHMpLG0ucHVzaChsWzBdK3BbMF0vMykseS5wdXNoKGxbMV0rcFsxXS8zKSxkPXQuZHh5ZGkoW10saS0xLG8sMSxzKSxtLnB1c2goZlswXS1kWzBdLzMpLHkucHVzaChmWzFdLWRbMV0vMykpLG0ucHVzaChmWzBdKSx5LnB1c2goZlsxXSksbD1mO2Vsc2UgZm9yKGk9dC5hMmkobiksYz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oTC0yLGkpKSksdT1pLWMseC5sZW5ndGg9TCx4LmNyb3NzTGVuZ3RoPXoseC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10saSxlKX0seC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxjLGUsdSxyKX0sYT0wO2E8ejthKyspbz1NYXRoLm1pbih6LTIsYSkscz1hLW8sZj10LmV2YWx4eShbXSxpLGEpLEEuc21vb3RoaW5nJiZhPjAmJihnPXQuZHh5ZGooW10sYyxhLTEsdSwwKSxtLnB1c2gobFswXStnWzBdLzMpLHkucHVzaChsWzFdK2dbMV0vMyksdj10LmR4eWRqKFtdLGMsYS0xLHUsMSksbS5wdXNoKGZbMF0tdlswXS8zKSx5LnB1c2goZlsxXS12WzFdLzMpKSxtLnB1c2goZlswXSkseS5wdXNoKGZbMV0pLGw9ZjtyZXR1cm4geC5heGlzTGV0dGVyPWUseC5heGlzPWIseC5jcm9zc0F4aXM9QSx4LnZhbHVlPW4seC5jb25zdHZhcj1yLHguaW5kZXg9aCx4Lng9bSx4Lnk9eSx4LnNtb290aGluZz1BLnNtb290aGluZyx4fWZ1bmN0aW9uIEQobil7dmFyIGksYSxvLHMsbCxjPVtdLHU9W10sZj17fTtpZihmLmxlbmd0aD14Lmxlbmd0aCxmLmNyb3NzTGVuZ3RoPVQubGVuZ3RoLCJiIj09PWUpZm9yKG89TWF0aC5tYXgoMCxNYXRoLm1pbih6LTIsbikpLGw9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tbykpLGYueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsbil9LGYuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIsbCl9LGk9MDtpPEU7aSsrKWNbaV09TVtuKk9dW2ldLHVbaV09U1tuKk9dW2ldO2Vsc2UgZm9yKGE9TWF0aC5tYXgoMCxNYXRoLm1pbihMLTIsbikpLHM9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tYSkpLGYueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLG4sZSl9LGYuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sYSxlLHMscil9LGk9MDtpPEM7aSsrKWNbaV09TVtpXVtuKk9dLHVbaV09U1tpXVtuKk9dO3JldHVybiBmLmF4aXNMZXR0ZXI9ZSxmLmF4aXM9YixmLmNyb3NzQXhpcz1BLGYudmFsdWU9eFtuXSxmLmNvbnN0dmFyPXIsZi5pbmRleD1uLGYueD1jLGYueT11LGYuc21vb3RoaW5nPUEuc21vb3RoaW5nLGZ9aWYoImFycmF5Ij09PWIudGlja21vZGUpe2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHgubGVuZ3RoLTEtYi5hcnJheXRpY2swKS9iLmFycmF5ZHRpY2sqKDErbCkpLE1hdGguY2VpbCgtYi5hcnJheXRpY2swL2IuYXJyYXlkdGljay8oMStsKSldLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpWzBdLTEsZj1jWzFdKzEsaD11O2g8ZjtoKyspKG89Yi5hcnJheXRpY2swK2IuYXJyYXlkdGljaypoKTwwfHxvPngubGVuZ3RoLTF8fF8ucHVzaChpKEQobykse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihoPXU7aDxmO2grKylpZihzPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqaCxnPU1hdGgubWluKHMrYi5hcnJheWR0aWNrLHgubGVuZ3RoLTEpLCEoczwwfHxzPngubGVuZ3RoLTF8fGc8MHx8Zz54Lmxlbmd0aC0xKSlmb3Iodj14W3NdLG09eFtnXSxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoeT1nLXMpPD0wfHwoZD12KyhtLXYpKihhKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKihiLmFycmF5ZHRpY2sveSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoSShkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goaShEKDApLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goaShEKHgubGVuZ3RoLTEpLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX1lbHNle2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHhbeC5sZW5ndGgtMV0tYi50aWNrMCkvYi5kdGljayooMStsKSksTWF0aC5jZWlsKCh4WzBdLWIudGljazApL2IuZHRpY2svKDErbCkpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKVswXSxmPWNbMV0saD11O2g8PWY7aCsrKXA9Yi50aWNrMCtiLmR0aWNrKmgsXy5wdXNoKGkoSShwKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGg9dS0xO2g8ZisxO2grKylmb3IocD1iLnRpY2swK2IuZHRpY2sqaCxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoZD1wK2IuZHRpY2sqKGErMSkvKGIubWlub3JncmlkY291bnQrMSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoSShkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goaShJKHhbMF0pLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goaShJKHhbeC5sZW5ndGgtMV0pLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OH1dLDg4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZS5fbGFiZWxzPVtdLGw9ZS5fZ3JpZGxpbmVzO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspbz1sW3JdLC0xIT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSksLTEhPT1bImVuZCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OH1dLDg4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coaSppK2EqYSwuMjUpLGM9TWF0aC5wb3cobypvK3MqcywuMjUpLHU9KGMqYyppLWwqbCpvKSpuLGY9KGMqYyphLWwqbCpzKSpuLGg9YyoobCtjKSozLHA9bCoobCtjKSozO3JldHVybltbZVswXSsoaCYmdS9oKSxlWzFdKyhoJiZmL2gpXSxbZVswXS0ocCYmdS9wKSxlWzFdLShwJiZmL3ApXV19fSx7fV0sODg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLGMsdT1bXSxmPW4odCk/dC5sZW5ndGg6dCxoPW4oZSk/ZS5sZW5ndGg6ZSxwPW4odCk/dDpudWxsLGQ9bihlKT9lOm51bGw7cCYmKG89KHAubGVuZ3RoLTEpLyhwW3AubGVuZ3RoLTFdLXBbMF0pLyhmLTEpKSxkJiYocz0oZC5sZW5ndGgtMSkvKGRbZC5sZW5ndGgtMV0tZFswXSkvKGgtMSkpO3ZhciBnPTEvMCx2PS0xLzA7Zm9yKGE9MDthPGg7YSsrKWZvcih1W2FdPVtdLGw9ZD8oZFthXS1kWzBdKSpzOmEvKGgtMSksaT0wO2k8ZjtpKyspYz0ocD8ocFtpXS1wWzBdKSpvOmkvKGYtMSkpLWwqcixnPU1hdGgubWluKGMsZyksdj1NYXRoLm1heChjLHYpLHVbYV1baV09Yzt2YXIgbT0xLyh2LWcpLHk9LWcqbTtmb3IoYT0wO2E8aDthKyspZm9yKGk9MDtpPGY7aSsrKXVbYV1baV09bSp1W2FdW2ldK3k7cmV0dXJuIHV9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sODkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2F0bXVsbF9yb20iKSxpPXQoIi4uLy4uL2xpYiIpLmVuc3VyZUFycmF5O2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuPS0uNSpyWzBdKzEuNSplWzBdLGk9LS41KnJbMV0rMS41KmVbMV07cmV0dXJuWygyKm4rdFswXSkvMywoMippK3RbMV0pLzNdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsdSxmLGgscCxkLGcsdixtLHkseD1yWzBdLmxlbmd0aCxiPXIubGVuZ3RoLF89cz8zKngtMjp4LHc9bD8zKmItMjpiO2Zvcih0PWkodCx3KSxlPWkoZSx3KSxmPTA7Zjx3O2YrKyl0W2ZdPWkodFtmXSxfKSxlW2ZdPWkoZVtmXSxfKTtmb3IodT0wLGg9MDt1PGI7dSsrLGgrPWw/MzoxKWZvcihwPXRbaF0sZD1lW2hdLGc9clt1XSx2PW9bdV0sYz0wLGY9MDtjPHg7YysrLGYrPXM/MzoxKXBbZl09Z1tjXSxkW2ZdPXZbY107aWYocylmb3IodT0wLGg9MDt1PGI7dSsrLGgrPWw/MzoxKXtmb3IoYz0xLGY9MztjPHgtMTtjKyssZis9MyltPW4oW3JbdV1bYy0xXSxvW3VdW2MtMV1dLFtyW3VdW2NdLG9bdV1bY11dLFtyW3VdW2MrMV0sb1t1XVtjKzFdXSxzKSx0W2hdW2YtMV09bVswXVswXSxlW2hdW2YtMV09bVswXVsxXSx0W2hdW2YrMV09bVsxXVswXSxlW2hdW2YrMV09bVsxXVsxXTt5PWEoW3RbaF1bMF0sZVtoXVswXV0sW3RbaF1bMl0sZVtoXVsyXV0sW3RbaF1bM10sZVtoXVszXV0pLHRbaF1bMV09eVswXSxlW2hdWzFdPXlbMV0seT1hKFt0W2hdW18tMV0sZVtoXVtfLTFdXSxbdFtoXVtfLTNdLGVbaF1bXy0zXV0sW3RbaF1bXy00XSxlW2hdW18tNF1dKSx0W2hdW18tMl09eVswXSxlW2hdW18tMl09eVsxXX1pZihsKWZvcihmPTA7ZjxfO2YrKyl7Zm9yKGg9MztoPHctMztoKz0zKW09bihbdFtoLTNdW2ZdLGVbaC0zXVtmXV0sW3RbaF1bZl0sZVtoXVtmXV0sW3RbaCszXVtmXSxlW2grM11bZl1dLGwpLHRbaC0xXVtmXT1tWzBdWzBdLGVbaC0xXVtmXT1tWzBdWzFdLHRbaCsxXVtmXT1tWzFdWzBdLGVbaCsxXVtmXT1tWzFdWzFdO3k9YShbdFswXVtmXSxlWzBdW2ZdXSxbdFsyXVtmXSxlWzJdW2ZdXSxbdFszXVtmXSxlWzNdW2ZdXSksdFsxXVtmXT15WzBdLGVbMV1bZl09eVsxXSx5PWEoW3Rbdy0xXVtmXSxlW3ctMV1bZl1dLFt0W3ctM11bZl0sZVt3LTNdW2ZdXSxbdFt3LTRdW2ZdLGVbdy00XVtmXV0pLHRbdy0yXVtmXT15WzBdLGVbdy0yXVtmXT15WzFdfWlmKHMmJmwpZm9yKGg9MTtoPHc7aCs9KGgrMSklMz09MD8yOjEpe2ZvcihmPTM7ZjxfLTM7Zis9MyltPW4oW3RbaF1bZi0zXSxlW2hdW2YtM11dLFt0W2hdW2ZdLGVbaF1bZl1dLFt0W2hdW2YrM10sZVtoXVtmKzNdXSxzKSx0W2hdW2YtMV09LjUqKHRbaF1bZi0xXSttWzBdWzBdKSxlW2hdW2YtMV09LjUqKGVbaF1bZi0xXSttWzBdWzFdKSx0W2hdW2YrMV09LjUqKHRbaF1bZisxXSttWzFdWzBdKSxlW2hdW2YrMV09LjUqKGVbaF1bZisxXSttWzFdWzFdKTt5PWEoW3RbaF1bMF0sZVtoXVswXV0sW3RbaF1bMl0sZVtoXVsyXV0sW3RbaF1bM10sZVtoXVszXV0pLHRbaF1bMV09LjUqKHRbaF1bMV0reVswXSksZVtoXVsxXT0uNSooZVtoXVsxXSt5WzFdKSx5PWEoW3RbaF1bXy0xXSxlW2hdW18tMV1dLFt0W2hdW18tM10sZVtoXVtfLTNdXSxbdFtoXVtfLTRdLGVbaF1bXy00XV0pLHRbaF1bXy0yXT0uNSoodFtoXVtfLTJdK3lbMF0pLGVbaF1bXy0yXT0uNSooZVtoXVtfLTJdK3lbMV0pfXJldHVyblt0LGVdfX0seyIuLi8uLi9saWIiOjcwMCwiLi9jYXRtdWxsX3JvbSI6ODg4fV0sODkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U6MWUtNn19LHt9XSw4OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBoPWkqaSxwPTEtaSxkPXAqcCxnPXAqaSoyLHY9LTMqZCxtPTMqKGQtZykseT0zKihnLWgpLHg9MypoLGI9YSphLF89YiphLHc9MS1hLGs9dyp3LFQ9ayp3O2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspbz12Kih1PXRbZl0pW25dW3JdK20qdVtuXVtyKzFdK3kqdVtuXVtyKzJdK3gqdVtuXVtyKzNdLHM9dip1W24rMV1bcl0rbSp1W24rMV1bcisxXSt5KnVbbisxXVtyKzJdK3gqdVtuKzFdW3IrM10sbD12KnVbbisyXVtyXSttKnVbbisyXVtyKzFdK3kqdVtuKzJdW3IrMl0reCp1W24rMl1bciszXSxjPXYqdVtuKzNdW3JdK20qdVtuKzNdW3IrMV0reSp1W24rM11bcisyXSt4KnVbbiszXVtyKzNdLGVbZl09VCpvKzMqKGsqYSpzK3cqYipsKStfKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSkscio9Mzt2YXIgdT1pKmksZj0xLWksaD1mKmYscD1mKmkqMixkPS0zKmgsZz0zKihoLXApLHY9MyoocC11KSxtPTMqdSx5PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZCooYz10W2xdKVtuXVtyXStnKmNbbl1bcisxXSt2KmNbbl1bcisyXSttKmNbbl1bciszXSxzPWQqY1tuKzFdW3JdK2cqY1tuKzFdW3IrMV0rdipjW24rMV1bcisyXSttKmNbbisxXVtyKzNdLGVbbF09eSpvK2EqcztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSksbio9Mzt2YXIgaD1hKmEscD1oKmEsZD0xLWEsZz1kKmQsdj1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShmPXRbdV0pW25dW3IrMV0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbisxXVtyXSxsPWZbbisyXVtyKzFdLWZbbisyXVtyXSxjPWZbbiszXVtyKzFdLWZbbiszXVtyXSxlW3VdPXYqbyszKihnKmEqcytkKmgqbCkrcCpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW25dW3IrMV0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbisxXVtyXSxlW2xdPXUqbythKnM7cmV0dXJuIGV9fX0se31dLDg5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxmO2V8fChlPVtdKSxyKj0zLG4qPTM7dmFyIGg9aSppLHA9aCppLGQ9MS1pLGc9ZCpkLHY9ZypkLG09YSphLHk9MS1hLHg9eSp5LGI9eSphKjIsXz0tMyp4LHc9MyooeC1iKSxrPTMqKGItbSksVD0zKm07Zm9yKGY9MDtmPHQubGVuZ3RoO2YrKylvPV8qKHU9dFtmXSlbbl1bcl0rdyp1W24rMV1bcl0rayp1W24rMl1bcl0rVCp1W24rM11bcl0scz1fKnVbbl1bcisxXSt3KnVbbisxXVtyKzFdK2sqdVtuKzJdW3IrMV0rVCp1W24rM11bcisxXSxsPV8qdVtuXVtyKzJdK3cqdVtuKzFdW3IrMl0rayp1W24rMl1bcisyXStUKnVbbiszXVtyKzJdLGM9Xyp1W25dW3IrM10rdyp1W24rMV1bciszXStrKnVbbisyXVtyKzNdK1QqdVtuKzNdW3IrM10sZVtmXT12Km8rMyooZyppKnMrZCpoKmwpK3AqYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9Mzt2YXIgaD1hKmEscD1oKmEsZD0xLWEsZz1kKmQsdj1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShmPXRbdV0pW24rMV1bcl0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbl1bcisxXSxsPWZbbisxXVtyKzJdLWZbbl1bcisyXSxjPWZbbisxXVtyKzNdLWZbbl1bciszXSxlW3VdPXYqbyszKihnKmEqcytkKmgqbCkrcCpjO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pLG4qPTM7dmFyIHU9MS1pLGY9YSphLGg9MS1hLHA9aCpoLGQ9aCphKjIsZz0tMypwLHY9MyoocC1kKSxtPTMqKGQtZikseT0zKmY7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPWcqKGM9dFtsXSlbbl1bcl0rdipjW24rMV1bcl0rbSpjW24rMl1bcl0reSpjW24rM11bcl0scz1nKmNbbl1bcisxXSt2KmNbbisxXVtyKzFdK20qY1tuKzJdW3IrMV0reSpjW24rM11bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pO3ZhciB1PTEtaTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89KGM9dFtsXSlbbisxXVtyXS1jW25dW3JdLHM9Y1tuKzFdW3IrMV0tY1tuXVtyKzFdLGVbbF09dSpvK2kqcztyZXR1cm4gZX19fSx7fV0sODk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWUtMixvPXItMjtyZXR1cm4gbiYmaT9mdW5jdGlvbihlLHIsbil7dmFyIGkscyxsLGMsdSxmO2V8fChlPVtdKTt2YXIgaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtoKj0zLHAqPTM7dmFyIHY9ZCpkLG09dipkLHk9MS1kLHg9eSp5LGI9eCp5LF89ZypnLHc9XypnLGs9MS1nLFQ9ayprLEE9VCprO2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspaT1iKih1PXRbZl0pW3BdW2hdKzMqKHgqZCp1W3BdW2grMV0reSp2KnVbcF1baCsyXSkrbSp1W3BdW2grM10scz1iKnVbcCsxXVtoXSszKih4KmQqdVtwKzFdW2grMV0reSp2KnVbcCsxXVtoKzJdKSttKnVbcCsxXVtoKzNdLGw9Yip1W3ArMl1baF0rMyooeCpkKnVbcCsyXVtoKzFdK3kqdip1W3ArMl1baCsyXSkrbSp1W3ArMl1baCszXSxjPWIqdVtwKzNdW2hdKzMqKHgqZCp1W3ArM11baCsxXSt5KnYqdVtwKzNdW2grMl0pK20qdVtwKzNdW2grM10sZVtmXT1BKmkrMyooVCpnKnMraypfKmwpK3cqYztyZXR1cm4gZX06bj9mdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHUsZixoPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItaCkpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO2gqPTM7dmFyIHY9ZCpkLG09dipkLHk9MS1kLHg9eSp5LGI9eCp5LF89MS1nO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaT1fKihmPXRbdV0pW3BdW2hdK2cqZltwKzFdW2hdLHM9XypmW3BdW2grMV0rZypmW3ArMV1baCsxXSxsPV8qZltwXVtoKzJdK2cqZltwKzFdW2grMV0sYz1fKmZbcF1baCszXStnKmZbcCsxXVtoKzFdLGVbdV09YippKzMqKHgqZCpzK3kqdipsKSttKmM7cmV0dXJuIGV9Omk/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGYsaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtwKj0zO3ZhciB2PWcqZyxtPXYqZyx5PTEtZyx4PXkqeSxiPXgqeSxfPTEtZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooZj10W3VdKVtwXVtoXStkKmZbcF1baCsxXSxzPV8qZltwKzFdW2hdK2QqZltwKzFdW2grMV0sbD1fKmZbcCsyXVtoXStkKmZbcCsyXVtoKzFdLGM9XypmW3ArM11baF0rZCpmW3ArM11baCsxXSxlW3VdPWIqaSszKih4Kmcqcyt5KnYqbCkrbSpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksaD1NYXRoLm1heCgwLE1hdGgubWluKDEsci11KSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1mKSksZD0xLXAsZz0xLWg7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylpPWcqKGM9dFtsXSlbZl1bdV0raCpjW2ZdW3UrMV0scz1nKmNbZisxXVt1XStoKmNbZisxXVt1KzFdLGVbbF09ZCppK3AqcztyZXR1cm4gZX19fSx7fV0sODk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi94eV9kZWZhdWx0cyIpLGE9dCgiLi9hYl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWUuX2NsaXBQYXRoSWQ9ImNsaXAiK2UudWlkKyJjYXJwZXQiO3ZhciB1PWMoImNvbG9yIixzLmRlZmF1bHRMaW5lKTsobi5jb2VyY2VGb250KGMsImZvbnQiKSxjKCJjYXJwZXQiKSxhKHQsZSxsLGMsdSksZS5hJiZlLmIpPyhlLmEubGVuZ3RoPDMmJihlLmFheGlzLnNtb290aGluZz0wKSxlLmIubGVuZ3RoPDMmJihlLmJheGlzLnNtb290aGluZz0wKSxpKHQsZSxjKXx8KGUudmlzaWJsZT0hMSksZS5fY2hlYXRlciYmYygiY2hlYXRlcnNsb3BlIikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1NzYsIi4uLy4uL2xpYiI6NzAwLCIuL2FiX2RlZmF1bHRzIjo4NzgsIi4vYXR0cmlidXRlcyI6ODgwLCIuL3h5X2RlZmF1bHRzIjo5MDR9XSw4OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5hbmltYXRhYmxlPSEwLG4uaXNDb250YWluZXI9ITAsbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjYXJwZXQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwiY2FycGV0IiwiY2FycGV0QXhpcyIsIm5vdExlZ2VuZElzb2xhdGFibGUiLCJub011bHRpQ2F0ZWdvcnkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4vYXR0cmlidXRlcyI6ODgwLCIuL2NhbGMiOjg4NCwiLi9kZWZhdWx0cyI6ODk1LCIuL3Bsb3QiOjkwMX1dLDg5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Ll9mdWxsRGF0YS5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXQuX2Z1bGxEYXRhW2ldO2lmKGEuaW5kZXghPT1lLmluZGV4JiYoImNhcnBldCI9PT1hLnR5cGUmJihyfHwocj1hKSxhLmNhcnBldD09PWUuY2FycGV0KSkpcmV0dXJuIGF9cmV0dXJuIHJ9fSx7fV0sODk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoMD09PXQubGVuZ3RoKXJldHVybiIiO3ZhciBuLGk9W10sYT1yPzM6MTtmb3Iobj0wO248dC5sZW5ndGg7bis9YSlpLnB1c2godFtuXSsiLCIrZVtuXSksciYmbjx0Lmxlbmd0aC1hJiYoaS5wdXNoKCJDIiksaS5wdXNoKFt0W24rMV0rIiwiK2VbbisxXSx0W24rMl0rIiwiK2VbbisyXSsiICJdLmpvaW4oIiAiKSkpO3JldHVybiBpLmpvaW4ocj8iIjoiTCIpfX0se31dLDg5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk7Zm9yKG4odCk/dC5sZW5ndGg+ZS5sZW5ndGgmJih0PXQuc2xpY2UoMCxlLmxlbmd0aCkpOnQ9W10saT0wO2k8ZS5sZW5ndGg7aSsrKXRbaV09cihlW2ldKTtyZXR1cm4gdH19LHsiLi4vLi4vbGliIjo3MDB9XSw5MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pWzBdKnQuZHBkeChlKSxzPWlbMV0qdC5kcGR5KHIpLGw9MSxjPTE7aWYoYSl7dmFyIHU9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLGY9TWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0pLGg9KGlbMF0qYVswXStpWzFdKmFbMV0pL3UvZjtjPU1hdGgubWF4KDAsaCl9dmFyIHA9MTgwKk1hdGguYXRhbjIocyxvKS9NYXRoLlBJO3JldHVybiBwPC05MD8ocCs9MTgwLGw9LWwpOnA+OTAmJihwLT0xODAsbD0tbCkse2FuZ2xlOnAsZmxpcDpsLHA6dC5jMnAobixlLHIpLG9mZnNldE11bHRwbGllcjpjfX19LHt9XSw5MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi9tYXBfMWRfYXJyYXkiKSxvPXQoIi4vbWFrZXBhdGgiKSxzPXQoIi4vb3JpZW50X3RleHQiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vbGliIiksdT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iik7ZnVuY3Rpb24gZih0LGUscixpLHMsbCl7dmFyIGM9ImNvbnN0LSIrcysiLWxpbmVzIix1PXIuc2VsZWN0QWxsKCIuIitjKS5kYXRhKGwpO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKGMsITApLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIiksdS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXIscz1pLngsbD1pLnksYz1hKFtdLHMsdC5jMnApLHU9YShbXSxsLGUuYzJwKSxmPSJNIitvKGMsdSxpLnNtb290aGluZyk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsZikuc3R5bGUoInN0cm9rZS13aWR0aCIsaS53aWR0aCkuc3R5bGUoInN0cm9rZSIsaS5jb2xvcikuc3R5bGUoImZpbGwiLCJub25lIil9KSx1LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBoKHQsZSxyLGEsbyxjLHUsZil7dmFyIGg9Yy5zZWxlY3RBbGwoInRleHQuIitmKS5kYXRhKHUpO2guZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKGYsITApO3ZhciBwPTAsZD17fTtyZXR1cm4gaC5lYWNoKGZ1bmN0aW9uKG8sYyl7dmFyIHU7aWYoImF1dG8iPT09by5heGlzLnRpY2thbmdsZSl1PXMoYSxlLHIsby54eSxvLmR4eSk7ZWxzZXt2YXIgZj0oby5heGlzLnRpY2thbmdsZSsxODApKk1hdGguUEkvMTgwO3U9cyhhLGUscixvLnh5LFtNYXRoLmNvcyhmKSxNYXRoLnNpbihmKV0pfWN8fChkPXthbmdsZTp1LmFuZ2xlLGZsaXA6dS5mbGlwfSk7dmFyIGg9KG8uZW5kQW5jaG9yPy0xOjEpKnUuZmxpcCxnPW4uc2VsZWN0KHRoaXMpLmF0dHIoeyJ0ZXh0LWFuY2hvciI6aD4wPyJzdGFydCI6ImVuZCIsImRhdGEtbm90ZXgiOjF9KS5jYWxsKGkuZm9udCxvLmZvbnQpLnRleHQoby50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLHY9aS5iQm94KHRoaXMpO2cuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS5wWzBdKyIsIit1LnBbMV0rIikgcm90YXRlKCIrdS5hbmdsZSsiKXRyYW5zbGF0ZSgiK28uYXhpcy5sYWJlbHBhZGRpbmcqaCsiLCIrLjMqdi5oZWlnaHQrIikiKSxwPU1hdGgubWF4KHAsdi53aWR0aCtvLmF4aXMubGFiZWxwYWRkaW5nKX0pLGguZXhpdCgpLnJlbW92ZSgpLGQubWF4RXh0ZW50PXAsZH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGw9ZS54YXhpcyx1PWUueWF4aXMscD10Ll9mdWxsTGF5b3V0Ll9jbGlwcztjLm1ha2VUcmFjZUdyb3VwcyhpLHIsInRyYWNlIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbMF0sZD1pLnRyYWNlLHY9ZC5hYXhpcyxtPWQuYmF4aXMseT1jLmVuc3VyZVNpbmdsZShyLCJnIiwibWlub3JsYXllciIpLHg9Yy5lbnN1cmVTaW5nbGUociwiZyIsIm1ham9ybGF5ZXIiKSxiPWMuZW5zdXJlU2luZ2xlKHIsImciLCJib3VuZGFyeWxheWVyIiksXz1jLmVuc3VyZVNpbmdsZShyLCJnIiwibGFiZWxsYXllciIpO3Iuc3R5bGUoIm9wYWNpdHkiLGQub3BhY2l0eSksZihsLHUseCx2LCJhIix2Ll9ncmlkbGluZXMpLGYobCx1LHgsbSwiYiIsbS5fZ3JpZGxpbmVzKSxmKGwsdSx5LHYsImEiLHYuX21pbm9yZ3JpZGxpbmVzKSxmKGwsdSx5LG0sImIiLG0uX21pbm9yZ3JpZGxpbmVzKSxmKGwsdSxiLHYsImEtYm91bmRhcnkiLHYuX2JvdW5kYXJ5bGluZXMpLGYobCx1LGIsbSwiYi1ib3VuZGFyeSIsbS5fYm91bmRhcnlsaW5lcyk7dmFyIHc9aCh0LGwsdSxkLGksXyx2Ll9sYWJlbHMsImEtbGFiZWwiKSxrPWgodCxsLHUsZCxpLF8sbS5fbGFiZWxzLCJiLWxhYmVsIik7IWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sbCl7dmFyIHUsZixoLHA7dT0uNSooci5hWzBdK3IuYVtyLmEubGVuZ3RoLTFdKSxmPXIuYlswXSxoPXIuYWIyeHkodSxmLCEwKSxwPXIuZHh5ZGFfcm91Z2godSxmKSx2b2lkIDA9PT1vLmFuZ2xlJiZjLmV4dGVuZEZsYXQobyxzKHIsaSxhLGgsci5keHlkYl9yb3VnaCh1LGYpKSk7Zyh0LGUscixuLGgscCxyLmFheGlzLGksYSxvLCJhLXRpdGxlIiksdT1yLmFbMF0sZj0uNSooci5iWzBdK3IuYltyLmIubGVuZ3RoLTFdKSxoPXIuYWIyeHkodSxmLCEwKSxwPXIuZHh5ZGJfcm91Z2godSxmKSx2b2lkIDA9PT1sLmFuZ2xlJiZjLmV4dGVuZEZsYXQobCxzKHIsaSxhLGgsci5keHlkYV9yb3VnaCh1LGYpKSk7Zyh0LGUscixuLGgscCxyLmJheGlzLGksYSxsLCJiLXRpdGxlIil9KHQsXyxkLGksbCx1LHcsayksZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgcyxsLHUsZixoPXIuc2VsZWN0KCIjIit0Ll9jbGlwUGF0aElkKTtoLnNpemUoKXx8KGg9ci5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY2FycGV0Y2xpcCIsITApKTt2YXIgcD1jLmVuc3VyZVNpbmdsZShoLCJwYXRoIiwiY2FycGV0Ym91bmRhcnkiKSxkPWUuY2xpcHNlZ21lbnRzLGc9W107Zm9yKGY9MDtmPGQubGVuZ3RoO2YrKylzPWRbZl0sbD1hKFtdLHMueCxuLmMycCksdT1hKFtdLHMueSxpLmMycCksZy5wdXNoKG8obCx1LHMuYmljdWJpYykpO3ZhciB2PSJNIitnLmpvaW4oIkwiKSsiWiI7aC5hdHRyKCJpZCIsdC5fY2xpcFBhdGhJZCkscC5hdHRyKCJkIix2KX0oZCxpLHAsbCx1KX0pfTt2YXIgcD11LkxJTkVfU1BBQ0lORyxkPSgxLXUuTUlEX1NISUZUKS9wKzE7ZnVuY3Rpb24gZyh0LGUscixhLG8sYyx1LGYsaCxnLHYpe3ZhciBtPVtdO3UudGl0bGUudGV4dCYmbS5wdXNoKHUudGl0bGUudGV4dCk7dmFyIHk9ZS5zZWxlY3RBbGwoInRleHQuIit2KS5kYXRhKG0pLHg9Zy5tYXhFeHRlbnQ7eS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQodiwhMCkseS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9cyhyLGYsaCxvLGMpOy0xPT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKHUuc2hvd3RpY2tsYWJlbHMpJiYoeD0wKTt2YXIgYT11LnRpdGxlLmZvbnQuc2l6ZTt4Kz1hK3UudGl0bGUub2Zmc2V0O3ZhciB2PShnLmFuZ2xlKyhnLmZsaXA8MD8xODA6MCktZS5hbmdsZSs0NTApJTM2MCxtPXY+OTAmJnY8MjcwLHk9bi5zZWxlY3QodGhpcyk7eS50ZXh0KHUudGl0bGUudGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSxtJiYoeD0oLWwubGluZUNvdW50KHkpK2QpKnAqYS14KSx5LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UucFswXSsiLCIrZS5wWzFdKyIpIHJvdGF0ZSgiK2UuYW5nbGUrIikgdHJhbnNsYXRlKDAsIit4KyIpIikuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChpLmZvbnQsdS50aXRsZS5mb250KX0pLHkuZXhpdCgpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjcyLCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MjQsIi4vbWFrZXBhdGgiOjg5OCwiLi9tYXBfMWRfYXJyYXkiOjg5OSwiLi9vcmllbnRfdGV4dCI6OTAwLGQzOjE1NH1dLDkwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vbGliL3NlYXJjaCIpLmZpbmRCaW4sYT10KCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiKSxvPXQoIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiKSxzPXQoIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiKSxsPXQoIi4vY3JlYXRlX2pfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fYSxyPXQuX2IsYz1lLmxlbmd0aCx1PXIubGVuZ3RoLGY9dC5hYXhpcyxoPXQuYmF4aXMscD1lWzBdLGQ9ZVtjLTFdLGc9clswXSx2PXJbdS0xXSxtPWVbZS5sZW5ndGgtMV0tZVswXSx5PXJbci5sZW5ndGgtMV0tclswXSx4PW0qbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRSxiPXkqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRTtwLT14LGQrPXgsZy09Yix2Kz1iLHQuaXNWaXNpYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+cCYmdDxkJiZlPmcmJmU8dn0sdC5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8cHx8dD5kfHxlPGd8fGU+dn0sdC5zZXRTY2FsZT1mdW5jdGlvbigpe3ZhciBlPXQuX3gscj10Ll95LG49YSh0Ll94Y3RybCx0Ll95Y3RybCxlLHIsZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpO3QuX3hjdHJsPW5bMF0sdC5feWN0cmw9blsxXSx0LmV2YWx4eT1vKFt0Ll94Y3RybCx0Ll95Y3RybF0sYyx1LGYuc21vb3RoaW5nLGguc21vb3RoaW5nKSx0LmR4eWRpPXMoW3QuX3hjdHJsLHQuX3ljdHJsXSxmLnNtb290aGluZyxoLnNtb290aGluZyksdC5keHlkaj1sKFt0Ll94Y3RybCx0Ll95Y3RybF0sZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpfSx0LmkyYT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGguZmxvb3IodFswXSksYy0yKSxuPXRbMF0tcjtyZXR1cm4oMS1uKSplW3JdK24qZVtyKzFdfSx0LmoyYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGguZmxvb3IodFsxXSksYy0yKSxuPXRbMV0tZTtyZXR1cm4oMS1uKSpyW2VdK24qcltlKzFdfSx0LmlqMmFiPWZ1bmN0aW9uKGUpe3JldHVyblt0LmkyYShlWzBdKSx0LmoyYihlWzFdKV19LHQuYTJpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LGUpLGMtMikpLG49ZVtyXSxhPWVbcisxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihjLTEscisodC1uKS8oYS1uKSkpfSx0LmIyaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGkodCxyKSx1LTIpKSxuPXJbZV0sYT1yW2UrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odS0xLGUrKHQtbikvKGEtbikpKX0sdC5hYjJpaj1mdW5jdGlvbihlKXtyZXR1cm5bdC5hMmkoZVswXSksdC5iMmooZVsxXSldfSx0LmkyYz1mdW5jdGlvbihlLHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSx0LmFiMnh5PWZ1bmN0aW9uKG4saSxhKXtpZighYSYmKG48ZVswXXx8bj5lW2MtMV18aTxyWzBdfHxpPnJbdS0xXSkpcmV0dXJuWyExLCExXTt2YXIgbz10LmEyaShuKSxzPXQuYjJqKGkpLGw9dC5ldmFseHkoW10sbyxzKTtpZihhKXt2YXIgZixoLHAsZCxnPTAsdj0wLG09W107bjxlWzBdPyhmPTAsaD0wLGc9KG4tZVswXSkvKGVbMV0tZVswXSkpOm4+ZVtjLTFdPyhmPWMtMixoPTEsZz0obi1lW2MtMV0pLyhlW2MtMV0tZVtjLTJdKSk6aD1vLShmPU1hdGgubWF4KDAsTWF0aC5taW4oYy0yLE1hdGguZmxvb3IobykpKSksaTxyWzBdPyhwPTAsZD0wLHY9KGktclswXSkvKHJbMV0tclswXSkpOmk+clt1LTFdPyhwPXUtMixkPTEsdj0oaS1yW3UtMV0pLyhyW3UtMV0tclt1LTJdKSk6ZD1zLShwPU1hdGgubWF4KDAsTWF0aC5taW4odS0yLE1hdGguZmxvb3IocykpKSksZyYmKHQuZHh5ZGkobSxmLHAsaCxkKSxsWzBdKz1tWzBdKmcsbFsxXSs9bVsxXSpnKSx2JiYodC5keHlkaihtLGYscCxoLGQpLGxbMF0rPW1bMF0qdixsWzFdKz1tWzFdKnYpfXJldHVybiBsfSx0LmMycD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UuYzJwKHRbMF0pLHIuYzJwKHRbMV0pXX0sdC5wMng9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLnAyYyh0WzBdKSxyLnAyYyh0WzFdKV19LHQuZGFkaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGUubGVuZ3RoLTIsdCkpO3JldHVybiBlW3IrMV0tZVtyXX0sdC5kYmRqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMix0KSk7cmV0dXJuIHJbZSsxXS1yW2VdfSx0LmR4eWRhPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGkobnVsbCxlLHIsbixpKSxvPXQuZGFkaShlLG4pO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRqKG51bGwsZSxyLG4saSksbz10LmRiZGoocixpKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGFfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW0qKG58fC4xKSxhPXQuYWIyeHkoZStpLHIsITApLG89dC5hYjJ4eShlLWksciwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHh5ZGJfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXkqKG58fC4xKSxhPXQuYWIyeHkoZSxyK2ksITApLG89dC5hYjJ4eShlLHItaSwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHBkeD1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX0sdC5kcGR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfX19LHsiLi4vLi4vbGliL3NlYXJjaCI6NzE5LCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiOjg5MCwiLi9jb25zdGFudHMiOjg5MSwiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciI6ODkyLCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yIjo4OTMsIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiOjg5NH1dLDkwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzPVtdLGw9W10sYz10WzBdLmxlbmd0aCx1PXQubGVuZ3RoO2Z1bmN0aW9uIGYoZSxyKXt2YXIgbixpPTAsYT0wO3JldHVybiBlPjAmJnZvaWQgMCE9PShuPXRbcl1bZS0xXSkmJihhKyssaSs9biksZTxjLTEmJnZvaWQgMCE9PShuPXRbcl1bZSsxXSkmJihhKyssaSs9bikscj4wJiZ2b2lkIDAhPT0obj10W3ItMV1bZV0pJiYoYSsrLGkrPW4pLHI8dS0xJiZ2b2lkIDAhPT0obj10W3IrMV1bZV0pJiYoYSsrLGkrPW4pLGkvTWF0aC5tYXgoMSxhKX12YXIgaCxwLGQsZyx2LG0seSx4LGIsXyx3LGs9MDtmb3IoaT0wO2k8YztpKyspZm9yKGE9MDthPHU7YSsrKXZvaWQgMD09PXRbYV1baV0mJihzLnB1c2goaSksbC5wdXNoKGEpLHRbYV1baV09ZihpLGEpKSxrPU1hdGgubWF4KGssTWF0aC5hYnModFthXVtpXSkpO2lmKCFzLmxlbmd0aClyZXR1cm4gdDt2YXIgVD0wLEE9MCxNPXMubGVuZ3RoO2Rve2ZvcihUPTAsbz0wO288TTtvKyspe2k9c1tvXSxhPWxbb107dmFyIFMsRSxDLEwseixPLEk9MCxEPTA7MD09PWk/KEM9ZVt6PU1hdGgubWluKGMtMSwyKV0sTD1lWzFdLFM9dFthXVt6XSxEKz0oRT10W2FdWzFdKSsoRS1TKSooZVswXS1MKS8oTC1DKSxJKyspOmk9PT1jLTEmJihDPWVbej1NYXRoLm1heCgwLGMtMyldLEw9ZVtjLTJdLFM9dFthXVt6XSxEKz0oRT10W2FdW2MtMl0pKyhFLVMpKihlW2MtMV0tTCkvKEwtQyksSSsrKSwoMD09PWl8fGk9PT1jLTEpJiZhPjAmJmE8dS0xJiYoaD1yW2ErMV0tclthXSxEKz0oKHA9clthXS1yW2EtMV0pKnRbYSsxXVtpXStoKnRbYS0xXVtpXSkvKHAraCksSSsrKSwwPT09YT8oQz1yW089TWF0aC5taW4odS0xLDIpXSxMPXJbMV0sUz10W09dW2ldLEQrPShFPXRbMV1baV0pKyhFLVMpKihyWzBdLUwpLyhMLUMpLEkrKyk6YT09PXUtMSYmKEM9cltPPU1hdGgubWF4KDAsdS0zKV0sTD1yW3UtMl0sUz10W09dW2ldLEQrPShFPXRbdS0yXVtpXSkrKEUtUykqKHJbdS0xXS1MKS8oTC1DKSxJKyspLCgwPT09YXx8YT09PXUtMSkmJmk+MCYmaTxjLTEmJihoPWVbaSsxXS1lW2ldLEQrPSgocD1lW2ldLWVbaS0xXSkqdFthXVtpKzFdK2gqdFthXVtpLTFdKS8ocCtoKSxJKyspLEk/RC89STooZD1lW2krMV0tZVtpXSxnPWVbaV0tZVtpLTFdLHg9KHY9clthKzFdLXJbYV0pKihtPXJbYV0tclthLTFdKSoodittKSxEPSgoeT1kKmcqKGQrZykpKihtKnRbYSsxXVtpXSt2KnRbYS0xXVtpXSkreCooZyp0W2FdW2krMV0rZCp0W2FdW2ktMV0pKS8oeCooZytkKSt5KihtK3YpKSksVCs9KF89KGI9RC10W2FdW2ldKS9rKSpfLHc9ST8wOi44NSx0W2FdW2ldKz1iKigxK3cpfVQ9TWF0aC5zcXJ0KFQpfXdoaWxlKEErKzwxMDAmJlQ+MWUtNSk7cmV0dXJuIG4ubG9nKCJTbW9vdGhlciBjb252ZXJnZWQgdG8iLFQsImFmdGVyIixBLCJpdGVyYXRpb25zIiksdH19LHsiLi4vLi4vbGliIjo3MDB9XSw5MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheTFEO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9cigieCIpLGE9aSYmaS5sZW5ndGgsbz1yKCJ5Iikscz1vJiZvLmxlbmd0aDtpZighYSYmIXMpcmV0dXJuITE7aWYoZS5fY2hlYXRlcj0haSxhJiYhbihpKXx8cyYmIW4obykpZS5fbGVuZ3RoPW51bGw7ZWxzZXt2YXIgbD1hP2kubGVuZ3RoOjEvMDtzJiYobD1NYXRoLm1pbihsLG8ubGVuZ3RoKSksZS5hJiZlLmEubGVuZ3RoJiYobD1NYXRoLm1pbihsLGUuYS5sZW5ndGgpKSxlLmImJmUuYi5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5iLmxlbmd0aCkpLGUuX2xlbmd0aD1sfXJldHVybiEwfX0seyIuLi8uLi9saWIiOjcwMH1dLDkwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPWkubWFya2VyLmxpbmU7ZS5leHBvcnRzPWwoe2xvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsb2NhdGlvbm1vZGU6aS5sb2NhdGlvbm1vZGUsejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Omwoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxpLmhvdmVydGV4dCx7fSksbWFya2VyOntsaW5lOntjb2xvcjpjLmNvbG9yLHdpZHRoOmwoe30sYy53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJjYWxjIn0sc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTppLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMiLGZsYWdzOlsibG9jYXRpb24iLCJ6IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSxhKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1ODQsIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MTUsIi4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEwOTF9XSw5MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLG89dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxzPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5fbGVuZ3RoLGw9bmV3IEFycmF5KHIpLGM9MDtjPHI7YysrKXt2YXIgdT1sW2NdPXt9LGY9ZS5sb2NhdGlvbnNbY10saD1lLnpbY107dS5sb2M9InN0cmluZyI9PXR5cGVvZiBmP2Y6bnVsbCx1Lno9bihoKT9oOml9cmV0dXJuIG8obCxlKSxhKHQsZSx7dmFsczplLnosY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6InoifSkscyhsLGUpLGx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo1ODUsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNTAsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjEwNTMsImZhc3QtaXNudW1lcmljIjoyMjF9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6Iik7bCYmbC5sZW5ndGgmJm4uaXNBcnJheU9yVHlwZWRBcnJheShjKSYmYy5sZW5ndGg/KGUuX2xlbmd0aD1NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCkscygibG9jYXRpb25tb2RlIikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5saW5lLndpZHRoIikscygibWFya2VyLm9wYWNpdHkiKSxpKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHMpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9saWIiOjcwMCwiLi9hdHRyaWJ1dGVzIjo5MDV9XSw5MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9jYXRpb249ZS5sb2NhdGlvbix0Lno9ZS56LHR9fSx7fV0sOTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzLGwsYyx1PXQuY2QsZj11WzBdLnRyYWNlLGg9dC5zdWJwbG90O2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspaWYoYz0hMSwobz11W3NdKS5fcG9seWdvbnMpe2ZvcihsPTA7bDxvLl9wb2x5Z29ucy5sZW5ndGg7bCsrKW8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKFtlLHJdKSYmKGM9IWMpLG8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKFtlKzM2MCxyXSkmJihjPSFjKTtpZihjKWJyZWFrfWlmKGMmJm8pcmV0dXJuIHQueDA9dC54MT10LnhhLmMycChvLmN0KSx0LnkwPXQueTE9dC55YS5jMnAoby5jdCksdC5pbmRleD1vLmluZGV4LHQubG9jYXRpb249by5sb2MsdC56PW8ueix0LmhvdmVydGVtcGxhdGU9by5ob3ZlcnRlbXBsYXRlLGZ1bmN0aW9uKHQsZSxyLG8pe2lmKGUuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIHM9ci5oaXx8ZS5ob3ZlcmluZm8sbD0iYWxsIj09PXM/aS5ob3ZlcmluZm8uZmxhZ3M6cy5zcGxpdCgiKyIpLGM9LTEhPT1sLmluZGV4T2YoIm5hbWUiKSx1PS0xIT09bC5pbmRleE9mKCJsb2NhdGlvbiIpLGY9LTEhPT1sLmluZGV4T2YoInoiKSxoPS0xIT09bC5pbmRleE9mKCJ0ZXh0IikscD1bXTshYyYmdT90Lm5hbWVPdmVycmlkZT1yLmxvYzooYyYmKHQubmFtZU92ZXJyaWRlPWUubmFtZSksdSYmcC5wdXNoKHIubG9jKSk7ZiYmcC5wdXNoKChkPXIueixuLnRpY2tUZXh0KG8sby5jMmwoZCksImhvdmVyIikudGV4dCkpO3ZhciBkO2gmJmEocixlLHApO3QuZXh0cmFUZXh0PXAuam9pbigiPGJyPiIpfSh0LGYsbyxoLm1vY2tBeGlzKSxbdF19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0IjoxMDU5LCIuL2F0dHJpYnV0ZXMiOjkwNX1dLDkxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImNob3JvcGxldGgiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2VvIiksbi5jYXRlZ29yaWVzPVsiZ2VvIiwibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dlbyI6Nzc4LCIuLi9oZWF0bWFwL2NvbG9yYmFyIjo5NTEsIi4vYXR0cmlidXRlcyI6OTA1LCIuL2NhbGMiOjkwNiwiLi9kZWZhdWx0cyI6OTA3LCIuL2V2ZW50X2RhdGEiOjkwOCwiLi9ob3ZlciI6OTA5LCIuL3Bsb3QiOjkxMSwiLi9zZWxlY3QiOjkxMiwiLi9zdHlsZSI6OTEzfV0sOTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi9wb2x5Z29uIiksbz10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKS5nZXRUb3BvanNvbkZlYXR1cmVzLHM9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLmxvY2F0aW9uVG9GZWF0dXJlLGw9dCgiLi9zdHlsZSIpLnN0eWxlO2Z1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9dFswXS50cmFjZSxuPXQubGVuZ3RoLGk9byhyLGUpLGE9MDthPG47YSsrKXt2YXIgbD10W2FdLGM9cyhyLmxvY2F0aW9ubW9kZSxsLmxvYyxpKTtjPyhsLmdlb2pzb249YyxsLmN0PWMucHJvcGVydGllcy5jdCxsLmluZGV4PWEsbC5fcG9seWdvbnM9dShjKSk6bC5nZW9qc29uPW51bGx9fWZ1bmN0aW9uIHUodCl7dmFyIGUscixuLGksbz10Lmdlb21ldHJ5LHM9by5jb29yZGluYXRlcyxsPXQuaWQsYz1bXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgtMTtlKyspaWYodFtlXVswXT4wJiZ0W2UrMV1bMF08MClyZXR1cm4gZTtyZXR1cm4gbnVsbH1zd2l0Y2goZT0iUlVTIj09PWx8fCJGSkkiPT09bD9mdW5jdGlvbih0KXt2YXIgZTtpZihudWxsPT09dSh0KSllPXQ7ZWxzZSBmb3IoZT1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoO2krKyllW2ldPVt0W2ldWzBdPDA/dFtpXVswXSszNjA6dFtpXVswXSx0W2ldWzFdXTtjLnB1c2goYS50ZXN0ZXIoZSkpfToiQVRBIj09PWw/ZnVuY3Rpb24odCl7dmFyIGU9dSh0KTtpZihudWxsPT09ZSlyZXR1cm4gYy5wdXNoKGEudGVzdGVyKHQpKTt2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgrMSksbj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaT5lP3JbbisrXT1bdFtpXVswXSszNjAsdFtpXVsxXV06aT09PWU/KHJbbisrXT10W2ldLHJbbisrXT1bdFtpXVswXSwtOTBdKTpyW24rK109dFtpXTt2YXIgbz1hLnRlc3RlcihyKTtvLnB0cy5wb3AoKSxjLnB1c2gobyl9OmZ1bmN0aW9uKHQpe2MucHVzaChhLnRlc3Rlcih0KSl9LG8udHlwZSl7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihyPTA7cjxzLmxlbmd0aDtyKyspZm9yKG49MDtuPHNbcl0ubGVuZ3RoO24rKyllKHNbcl1bbl0pO2JyZWFrO2Nhc2UiUG9seWdvbiI6Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyllKHNbcl0pfXJldHVybiBjfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspYyhyW2FdLGUudG9wb2pzb24pO3ZhciBvPWUubGF5ZXJzLmJhY2twbG90LnNlbGVjdCgiLmNob3JvcGxldGhsYXllciIpO2kubWFrZVRyYWNlR3JvdXBzKG8sciwidHJhY2UgY2hvcm9wbGV0aCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9KGVbMF0ubm9kZTM9bi5zZWxlY3QodGhpcykpLnNlbGVjdEFsbCgicGF0aC5jaG9yb3BsZXRobG9jYXRpb24iKS5kYXRhKGkuaWRlbnRpdHkpO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJjaG9yb3BsZXRobG9jYXRpb24iLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxsKHQsZSl9KX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjY5MywiLi4vLi4vbGliL3BvbHlnb24iOjcxMiwiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIjo3MjcsIi4vc3R5bGUiOjkxMyxkMzoxNTR9XSw5MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspKGk9KG49c1tyXSkuY3QpJiYoYT1sLmMycChpKSxvPWMuYzJwKGkpLGUuY29udGFpbnMoW2Esb10sbnVsbCxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmlbMF0sbGF0OmlbMV19KSxuLnNlbGVjdGVkPTEpOm4uc2VsZWN0ZWQ9MCk7cmV0dXJuIHV9fSx7fV0sOTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpO2Z1bmN0aW9uIHModCxlKXt2YXIgcj1lWzBdLnRyYWNlLHM9ZVswXS5ub2RlMy5zZWxlY3RBbGwoIi5jaG9yb3BsZXRobG9jYXRpb24iKSxsPXIubWFya2VyfHx7fSxjPWwubGluZXx8e30sdT1vLm1ha2VDb2xvclNjYWxlRnVuYyhvLmV4dHJhY3RTY2FsZShyLHtjTGV0dGVyOiJ6In0pKTtzLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cigiZmlsbCIsdSh0LnopKS5jYWxsKGkuc3Ryb2tlLHQubWxjfHxjLmNvbG9yKS5jYWxsKGEuZGFzaExpbmUsIiIsdC5tbHd8fGMud2lkdGh8fDApLnN0eWxlKCJvcGFjaXR5IixsLm9wYWNpdHkpfSksYS5zZWxlY3RlZFBvaW50U3R5bGUocyxyLHQpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXtlJiZzKHQsZSl9LHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLm5vZGUzLG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzP2Euc2VsZWN0ZWRQb2ludFN0eWxlKHIuc2VsZWN0QWxsKCIuY2hvcm9wbGV0aGxvY2F0aW9uIiksbix0KTpzKHQsZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NTg5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCxkMzoxNTR9XSw5MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx1Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHY6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwiYWJzb2x1dGUiXSxlZGl0VHlwZToiY2FsYyIsZGZsdDoic2NhbGVkIn0sc2l6ZXJlZjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjB9LGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZWRpdFR5cGU6ImNhbGMiLHZhbHVlczpbInRpcCIsInRhaWwiLCJjbSIsImNlbnRlciJdLGRmbHQ6ImNtIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZW1wbGF0ZTphKHtlZGl0VHlwZToiY2FsYyJ9LHtrZXlzOlsibm9ybSJdfSl9O2woYyxuKCIiLHtjb2xvckF0dHI6InUvdi93IG5vcm0iLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7Y29sb3JiYXI6aX0pO1sib3BhY2l0eSIsImxpZ2h0cG9zaXRpb24iLCJsaWdodGluZyJdLmZvckVhY2goZnVuY3Rpb24odCl7Y1t0XT1vW3RdfSksYy5ob3ZlcmluZm89bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMiLGZsYWdzOlsieCIsInkiLCJ6IiwidSIsInYiLCJ3Iiwibm9ybSIsInRleHQiLCJuYW1lIl0sZGZsdDoieCt5K3orbm9ybSt0ZXh0K25hbWUifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjo5OTR9XSw5MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS51LGk9ZS52LGE9ZS53LG89TWF0aC5taW4oZS54Lmxlbmd0aCxlLnkubGVuZ3RoLGUuei5sZW5ndGgsci5sZW5ndGgsaS5sZW5ndGgsYS5sZW5ndGgpLHM9LTEvMCxsPTEvMCxjPTA7YzxvO2MrKyl7dmFyIHU9cltjXSxmPWlbY10saD1hW2NdLHA9TWF0aC5zcXJ0KHUqdStmKmYraCpoKTtzPU1hdGgubWF4KHMscCksbD1NYXRoLm1pbihsLHApfWUuX2xlbj1vLGUuX25vcm1NYXg9cyxuKHQsZSx7dmFsczpbbCxzXSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU4NX1dLDkxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1jb25lM2QiKSxpPXQoImdsLWNvbmUzZCIpLmNyZWF0ZUNvbmVNZXNoLGE9dCgiLi4vLi4vbGliIikuc2ltcGxlTWFwLG89dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpO2Z1bmN0aW9uIGwodCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLm1lc2g9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgYz1sLnByb3RvdHlwZTtjLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLnhbZV0sbj10aGlzLmRhdGEueVtlXSxpPXRoaXMuZGF0YS56W2VdLGE9dGhpcy5kYXRhLnVbZV0sbz10aGlzLmRhdGEudltlXSxzPXRoaXMuZGF0YS53W2VdO3QudHJhY2VDb29yZGluYXRlPVtyLG4saSxhLG8scyxNYXRoLnNxcnQoYSphK28qbytzKnMpXTt2YXIgbD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmdm9pZCAwIT09bFtlXT90LnRleHRMYWJlbD1sW2VdOmwmJih0LnRleHRMYWJlbD1sKSwhMH19O3ZhciB1PXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn0sZj17dGlwOjEsdGFpbDowLGNtOi4yNSxjZW50ZXI6LjV9LGg9e3RpcDoxLHRhaWw6MSxjbTouNzUsY2VudGVyOi41fTtmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxsPXt9O2Z1bmN0aW9uIGModCxlKXt2YXIgbj1yW2VdLG89aVt1W2VdXTtyZXR1cm4gYSh0LGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSl9bC52ZWN0b3JzPXMoYyhlLnUsInhheGlzIiksYyhlLnYsInlheGlzIiksYyhlLncsInpheGlzIiksZS5fbGVuKSxsLnBvc2l0aW9ucz1zKGMoZS54LCJ4YXhpcyIpLGMoZS55LCJ5YXhpcyIpLGMoZS56LCJ6YXhpcyIpLGUuX2xlbiksbC5jb2xvcm1hcD1vKGUpLGwudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtlLmNtaW4vZS5fbm9ybU1heCxlLmNtYXgvZS5fbm9ybU1heF0sbC5jb25lT2Zmc2V0PWZbZS5hbmNob3JdLCJzY2FsZWQiPT09ZS5zaXplbW9kZT9sLmNvbmVTaXplPWUuc2l6ZXJlZnx8LjU6bC5jb25lU2l6ZT1lLnNpemVyZWYmJmUuX25vcm1NYXg/ZS5zaXplcmVmL2UuX25vcm1NYXg6LjU7dmFyIHA9bihsKSxkPWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gcC5saWdodFBvc2l0aW9uPVtkLngsZC55LGQuel0scC5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLHAuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixwLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxwLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLHAub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPWhbZS5hbmNob3JdKnAudmVjdG9yU2NhbGUqcC5jb25lU2NhbGUqZS5fbm9ybU1heCxwfWMudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YT10O3ZhciBlPXAodGhpcy5zY2VuZSx0KTt0aGlzLm1lc2gudXBkYXRlKGUpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxuPXAodCxlKSxhPWkocixuKSxvPW5ldyBsKHQsZS51aWQpO3JldHVybiBvLm1lc2g9YSxvLmRhdGE9ZSxhLl90cmFjZT1vLHQuZ2xwbG90LmFkZChhKSxvfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6Njk3LCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjgwMCwiZ2wtY29uZTNkIjoyMzh9XSw5MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygidSIpLGM9cygidiIpLHU9cygidyIpLGY9cygieCIpLGg9cygieSIpLHA9cygieiIpO2wmJmwubGVuZ3RoJiZjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmYmJmYubGVuZ3RoJiZoJiZoLmxlbmd0aCYmcCYmcC5sZW5ndGg/KHMoInNpemVyZWYiKSxzKCJzaXplbW9kZSIpLHMoImFuY2hvciIpLHMoImxpZ2h0aW5nLmFtYmllbnQiKSxzKCJsaWdodGluZy5kaWZmdXNlIikscygibGlnaHRpbmcuc3BlY3VsYXIiKSxzKCJsaWdodGluZy5yb3VnaG5lc3MiKSxzKCJsaWdodGluZy5mcmVzbmVsIikscygibGlnaHRwb3NpdGlvbi54IikscygibGlnaHRwb3NpdGlvbi55IikscygibGlnaHRwb3NpdGlvbi56IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9saWIiOjcwMCwiLi9hdHRyaWJ1dGVzIjo5MTR9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY29uZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0sY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLGV2ZW50RGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vcm09ZS50cmFjZUNvb3JkaW5hdGVbNl0sdH0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjkxNCwiLi9jYWxjIjo5MTUsIi4vY29udmVydCI6OTE2LCIuL2RlZmF1bHRzIjo5MTd9XSw5MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxsPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGY9dS5DT01QQVJJU09OX09QUzIsaD11LklOVEVSVkFMX09QUyxwPWkubGluZTtlLmV4cG9ydHM9Yyh7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLHh0eXBlOm4ueHR5cGUseXR5cGU6bi55dHlwZSx6aG92ZXJmb3JtYXQ6bi56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LGF1dG9jb250b3VyOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJjb250b3Vycy5zdGFydCI6dm9pZCAwLCJjb250b3Vycy5lbmQiOnZvaWQgMCwiY29udG91cnMuc2l6ZSI6dm9pZCAwfX0sbmNvbnRvdXJzOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjE1LG1pbjoxLGVkaXRUeXBlOiJjYWxjIn0sY29udG91cnM6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxldmVscyIsImNvbnN0cmFpbnQiXSxkZmx0OiJsZXZlbHMiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b2NvbnRvdXIiOiExfX0sZW5kOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b2NvbnRvdXIiOiExfX0sY29sb3Jpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJoZWF0bWFwIiwibGluZXMiLCJub25lIl0sZGZsdDoiZmlsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93bGluZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzaG93bGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250Omwoe2VkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxsYWJlbGZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sb3BlcmF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10uY29uY2F0KGYpLmNvbmNhdChoKSxkZmx0OiI9IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2F1dG9jb250b3VyOiExfX0sbGluZTp7Y29sb3I6Yyh7fSxwLmNvbG9yLHtlZGl0VHlwZToic3R5bGUrY29sb3JiYXJzIn0pLHdpZHRoOmMoe30scC53aWR0aCx7ZWRpdFR5cGU6InN0eWxlK2NvbG9yYmFycyJ9KSxkYXNoOnMsc21vb3RoaW5nOmMoe30scC5zbW9vdGhpbmcse30pLGVkaXRUeXBlOiJwbG90In19LGEoIiIse2NMZXR0ZXI6InoiLGF1dG9Db2xvckRmbHQ6ITEsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7Y29sb3JiYXI6b30pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3LCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NjczLCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjk0OCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sOTIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvY2FsYyIpLGk9dCgiLi9zZXRfY29udG91cnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZSk7cmV0dXJuIGkoZSkscn19LHsiLi4vaGVhdG1hcC9jYWxjIjo5NDksIi4vc2V0X2NvbnRvdXJzIjo5Mzh9XSw5MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPXRbMF0sbD1zLngubGVuZ3RoLGM9cy55Lmxlbmd0aCx1PXMueixmPW4uY29udG91cnMsaD0tMS8wLHA9MS8wO2ZvcihpPTA7aTxjO2krKylwPU1hdGgubWluKHAsdVtpXVswXSkscD1NYXRoLm1pbihwLHVbaV1bbC0xXSksaD1NYXRoLm1heChoLHVbaV1bMF0pLGg9TWF0aC5tYXgoaCx1W2ldW2wtMV0pO2ZvcihpPTE7aTxsLTE7aSsrKXA9TWF0aC5taW4ocCx1WzBdW2ldKSxwPU1hdGgubWluKHAsdVtjLTFdW2ldKSxoPU1hdGgubWF4KGgsdVswXVtpXSksaD1NYXRoLm1heChoLHVbYy0xXVtpXSk7c3dpdGNoKHMucHJlZml4Qm91bmRhcnk9ITEsZSl7Y2FzZSI+IjpmLnZhbHVlPmgmJihzLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIjwiOmYudmFsdWU8cCYmKHMucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiW10iOmE9TWF0aC5taW4uYXBwbHkobnVsbCxmLnZhbHVlKSwoKG89TWF0aC5tYXguYXBwbHkobnVsbCxmLnZhbHVlKSk8cHx8YT5oKSYmKHMucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiXVsiOmE9TWF0aC5taW4uYXBwbHkobnVsbCxmLnZhbHVlKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsZi52YWx1ZSksYTxwJiZvPmgmJihzLnByZWZpeEJvdW5kYXJ5PSEwKX19fSx7fV0sOTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyIpLGk9dCgiLi9tYWtlX2NvbG9yX21hcCIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2Usbz0iY2IiK3IudWlkO2lmKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK28pLnJlbW92ZSgpLHIuc2hvd3NjYWxlKXt2YXIgcz1lWzBdLnQuY2I9bih0LG8pLGw9ci5jb250b3VycyxjPXIubGluZSx1PWwuc2l6ZXx8MSxmPWwuY29sb3JpbmcsaD1pKHIse2lzQ29sb3JiYXI6ITB9KTtzLmZpbGxncmFkaWVudCgiaGVhdG1hcCI9PT1mP3IuY29sb3JzY2FsZToiIikuenJhbmdlKCJoZWF0bWFwIj09PWY/W3Iuem1pbixyLnptYXhdOiIiKS5maWxsY29sb3IoImZpbGwiPT09Zj9oOiIiKS5saW5lKHtjb2xvcjoibGluZXMiPT09Zj9oOmMuY29sb3Isd2lkdGg6ITEhPT1sLnNob3dsaW5lcz9jLndpZHRoOjAsZGFzaDpjLmRhc2h9KS5sZXZlbHMoe3N0YXJ0Omwuc3RhcnQsZW5kOmEobCksc2l6ZTp1fSkub3B0aW9ucyhyLmNvbG9yYmFyKSgpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Ijo1ODIsIi4vZW5kX3BsdXMiOjkzMCwiLi9tYWtlX2NvbG9yX21hcCI6OTM1fV0sOTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Qk9UVE9NU1RBUlQ6WzEsOSwxMywxMDQsNzEzXSxUT1BTVEFSVDpbNCw2LDcsMTA0LDcxM10sTEVGVFNUQVJUOls4LDEyLDE0LDIwOCwxMTE0XSxSSUdIVFNUQVJUOlsyLDMsMTEsMjA4LDExMTRdLE5FV0RFTFRBOltudWxsLFstMSwwXSxbMCwtMV0sWy0xLDBdLFsxLDBdLG51bGwsWzAsLTFdLFstMSwwXSxbMCwxXSxbMCwxXSxudWxsLFswLDFdLFsxLDBdLFsxLDBdLFswLC0xXV0sQ0hPT1NFU0FERExFOnsxMDQ6WzQsMV0sMjA4OlsyLDhdLDcxMzpbNywxM10sMTExNDpbMTEsMTRdfSxTQURETEVSRU1BSU5ERVI6ezE6NCwyOjgsNDoxLDc6MTMsODoyLDExOjE0LDEzOjcsMTQ6MTF9LExBQkVMRElTVEFOQ0U6MixMQUJFTElOQ1JFQVNFOjEwLExBQkVMTUlOOjMsTEFCRUxNQVg6MTAsTEFCRUxPUFRJTUlaRVI6e0VER0VDT1NUOjEsQU5HTEVDT1NUOjEsTkVJR0hCT1JDT1NUOjUsU0FNRUxFVkVMRkFDVE9SOjEwLFNBTUVMRVZFTERJU1RBTkNFOjUsTUFYQ09TVDoxMDAsSU5JVElBTFNFQVJDSFBPSU5UUzoxMCxJVEVSQVRJT05TOjV9fX0se31dLDkyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9sYWJlbF9kZWZhdWx0cyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89YS5hZGRPcGFjaXR5LHM9YS5vcGFjaXR5LGw9dCgiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSxjPWwuQ09OU1RSQUlOVF9SRURVQ1RJT04sdT1sLkNPTVBBUklTT05fT1BTMjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxsLGYpe3ZhciBoLHAsZCxnPWUuY29udG91cnMsdj1yKCJjb250b3Vycy5vcGVyYXRpb24iKTsoZy5fb3BlcmF0aW9uPWNbdl0sZnVuY3Rpb24odCxlKXt2YXIgcjstMT09PXUuaW5kZXhPZihlLm9wZXJhdGlvbik/KHQoImNvbnRvdXJzLnZhbHVlIixbMCwxXSksQXJyYXkuaXNBcnJheShlLnZhbHVlKT9lLnZhbHVlLmxlbmd0aD4yP2UudmFsdWU9ZS52YWx1ZS5zbGljZSgyKTowPT09ZS5sZW5ndGg/ZS52YWx1ZT1bMCwxXTplLmxlbmd0aDwyPyhyPXBhcnNlRmxvYXQoZS52YWx1ZVswXSksZS52YWx1ZT1bcixyKzFdKTplLnZhbHVlPVtwYXJzZUZsb2F0KGUudmFsdWVbMF0pLHBhcnNlRmxvYXQoZS52YWx1ZVsxXSldOm4oZS52YWx1ZSkmJihyPXBhcnNlRmxvYXQoZS52YWx1ZSksZS52YWx1ZT1bcixyKzFdKSk6KHQoImNvbnRvdXJzLnZhbHVlIiwwKSxuKGUudmFsdWUpfHwoQXJyYXkuaXNBcnJheShlLnZhbHVlKT9lLnZhbHVlPXBhcnNlRmxvYXQoZS52YWx1ZVswXSk6ZS52YWx1ZT0wKSl9KHIsZyksIj0iPT09dj9oPWcuc2hvd2xpbmVzPSEwOihoPXIoImNvbnRvdXJzLnNob3dsaW5lcyIpLGQ9cigiZmlsbGNvbG9yIixvKCh0LmxpbmV8fHt9KS5jb2xvcnx8bCwuNSkpKSxoKSYmKHA9cigibGluZS5jb2xvciIsZCYmcyhkKT9vKGUuZmlsbGNvbG9yLDEpOmwpLHIoImxpbmUud2lkdGgiLDIpLHIoImxpbmUuZGFzaCIpKTtyKCJsaW5lLnNtb290aGluZyIpLGkocixhLHAsZil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiOjY3MywiLi9sYWJlbF9kZWZhdWx0cyI6OTM0LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sOTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcixhPUFycmF5LmlzQXJyYXkoZSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaSh0KT8rdDpudWxsfXJldHVybi0xIT09bi5DT01QQVJJU09OX09QUzIuaW5kZXhPZih0KT9yPW8oYT9lWzBdOmUpOi0xIT09bi5JTlRFUlZBTF9PUFMuaW5kZXhPZih0KT9yPWE/W28oZVswXSksbyhlWzFdKV06W28oZSksbyhlKV06LTEhPT1uLlNFVF9PUFMuaW5kZXhPZih0KSYmKHI9YT9lLm1hcChvKTpbbyhlKV0pLHJ9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1hKHQsZSk7dmFyIHI9TWF0aC5taW4oZVswXSxlWzFdKSxuPU1hdGgubWF4KGVbMF0sZVsxXSk7cmV0dXJue3N0YXJ0OnIsZW5kOm4sc2l6ZTpuLXJ9fX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm57c3RhcnQ6ZT1hKHQsZSksZW5kOjEvMCxzaXplOjEvMH19fWUuZXhwb3J0cz17IltdIjpvKCJbXSIpLCJdWyI6bygiXVsiKSwiPiI6cygiPiIpLCI8IjpzKCI8IiksIj0iOnMoIj0iKX19LHsiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiOjY3MywiZmFzdC1pc251bWVyaWMiOjIyMX1dLDkyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bigiY29udG91cnMuc3RhcnQiKSxhPW4oImNvbnRvdXJzLmVuZCIpLG89ITE9PT1pfHwhMT09PWEscz1yKCJjb250b3Vycy5zaXplIik7IShvP2UuYXV0b2NvbnRvdXI9ITA6cigiYXV0b2NvbnRvdXIiLCExKSkmJnN8fHIoIm5jb250b3VycyIpfX0se31dLDkyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuLmV4dGVuZEZsYXQoe30sdCx7ZWRnZXBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LmVkZ2VwYXRocykscGF0aHM6bi5leHRlbmREZWVwKFtdLHQucGF0aHMpfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmV2ZXJzZSgpfSxsPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtzd2l0Y2goZSl7Y2FzZSI9IjpjYXNlIjwiOnJldHVybiB0O2Nhc2UiPiI6Zm9yKDEhPT10Lmxlbmd0aCYmbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IG9wZXJhdGlvbi4iKSxhPXRbMF0scj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtyZXR1cm4gdDtjYXNlIl1bIjp2YXIgYz1zO3M9bCxsPWM7Y2FzZSJbXSI6Zm9yKDIhPT10Lmxlbmd0aCYmbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IHJhbmdlIG9wZXJhdGlvbi4iKSxhPWkodFswXSksbz1pKHRbMV0pLHI9MDtyPGEuZWRnZXBhdGhzLmxlbmd0aDtyKyspYS5lZGdlcGF0aHNbcl09cyhhLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGEucGF0aHMubGVuZ3RoO3IrKylhLnBhdGhzW3JdPXMoYS5wYXRoc1tyXSk7Zm9yKDtvLmVkZ2VwYXRocy5sZW5ndGg7KWEuZWRnZXBhdGhzLnB1c2gobChvLmVkZ2VwYXRocy5zaGlmdCgpKSk7Zm9yKDtvLnBhdGhzLmxlbmd0aDspYS5wYXRocy5wdXNoKGwoby5wYXRocy5zaGlmdCgpKSk7cmV0dXJuW2FdfX19LHsiLi4vLi4vbGliIjo3MDB9XSw5Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyIpLGE9dCgiLi9jb25zdHJhaW50X2RlZmF1bHRzIiksbz10KCIuL2NvbnRvdXJzX2RlZmF1bHRzIikscz10KCIuL3N0eWxlX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfWlmKGkodCxlLHUsYykpe3UoInRleHQiKSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIik7dmFyIGY9ImNvbnN0cmFpbnQiPT09dSgiY29udG91cnMudHlwZSIpO3UoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopKSxmP2EodCxlLHUsYyxyKToobyh0LGUsdSxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxsLHIpfSkscyh0LGUsdSxjKSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyI6OTYyLCIuL2F0dHJpYnV0ZXMiOjkxOSwiLi9jb25zdHJhaW50X2RlZmF1bHRzIjo5MjQsIi4vY29udG91cnNfZGVmYXVsdHMiOjkyNiwiLi9zdHlsZV9kZWZhdWx0cyI6OTQwfV0sOTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb25zdHJhaW50X21hcHBpbmciKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz0iY29uc3RyYWludCI9PT10LnR5cGU/aVt0Ll9vcGVyYXRpb25dKHQudmFsdWUpOnQscz1vLnNpemUsbD1bXSxjPWEobyksdT1yLnRyYWNlLl9jYXJwZXRUcmFjZSxmPXU/e3hheGlzOnUuYWF4aXMseWF4aXM6dS5iYXhpcyx4OnIuYSx5OnIuYn06e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4OnIueCx5OnIueX0saD1vLnN0YXJ0O2g8YztoKz1zKWlmKGwucHVzaChuLmV4dGVuZEZsYXQoe2xldmVsOmgsY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10sejpyLnosc21vb3RoaW5nOnIudHJhY2UubGluZS5zbW9vdGhpbmd9LGYpKSxsLmxlbmd0aD4xZTMpe24ud2FybigiVG9vIG1hbnkgY29udG91cnMsIGNsaXBwaW5nIGF0IDEwMDAiLHQpO2JyZWFrfXJldHVybiBsfX0seyIuLi8uLi9saWIiOjcwMCwiLi9jb25zdHJhaW50X21hcHBpbmciOjkyNSwiLi9lbmRfcGx1cyI6OTMwfV0sOTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5lbmQrdC5zaXplLzFlNn19LHt9XSw5MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8ciYmTWF0aC5hYnModFsxXS1lWzFdKTxufWZ1bmN0aW9uIG8odCxlLHIsbyxsKXt2YXIgYyx1PWUuam9pbigiLCIpLGY9dSxoPXQuY3Jvc3NpbmdzW2ZdLHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTAsYT0wO3Q+MjAmJmU/MjA4PT09dHx8MTExND09PXQ/bj0wPT09clswXT8xOi0xOmE9MD09PXJbMV0/MTotMTotMSE9PWkuQk9UVE9NU1RBUlQuaW5kZXhPZih0KT9hPTE6LTEhPT1pLkxFRlRTVEFSVC5pbmRleE9mKHQpP249MTotMSE9PWkuVE9QU1RBUlQuaW5kZXhPZih0KT9hPS0xOm49LTE7cmV0dXJuW24sYV19KGgscixlKSxkPVtzKHQsZSxbLXBbMF0sLXBbMV1dKV0sZz1wLmpvaW4oIiwiKSx2PXQuei5sZW5ndGgsbT10LnpbMF0ubGVuZ3RoO2ZvcihjPTA7YzwxZTQ7YysrKXtpZihoPjIwPyhoPWkuQ0hPT1NFU0FERExFW2hdWyhwWzBdfHxwWzFdKTwwPzA6MV0sdC5jcm9zc2luZ3NbZl09aS5TQURETEVSRU1BSU5ERVJbaF0pOmRlbGV0ZSB0LmNyb3NzaW5nc1tmXSwhKHA9aS5ORVdERUxUQVtoXSkpe24ubG9nKCJGb3VuZCBiYWQgbWFyY2hpbmcgaW5kZXg6IixoLGUsdC5sZXZlbCk7YnJlYWt9ZC5wdXNoKHModCxlLHApKSxlWzBdKz1wWzBdLGVbMV0rPXBbMV0sYShkW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMl0sbyxsKSYmZC5wb3AoKSxmPWUuam9pbigiLCIpO3ZhciB5PXBbMF0mJihlWzBdPDB8fGVbMF0+bS0yKXx8cFsxXSYmKGVbMV08MHx8ZVsxXT52LTIpO2lmKGY9PT11JiZwLmpvaW4oIiwiKT09PWd8fHImJnkpYnJlYWs7aD10LmNyb3NzaW5nc1tmXX0xZTQ9PT1jJiZuLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpO3ZhciB4LGIsXyx3LGssVCxBLE0sUyxFLEMsTCx6LE8sSSxEPWEoZFswXSxkW2QubGVuZ3RoLTFdLG8sbCksUD0wLFI9LjIqdC5zbW9vdGhpbmcsRj1bXSxCPTA7Zm9yKGM9MTtjPGQubGVuZ3RoO2MrKylMPWRbY10sej1kW2MtMV0sdm9pZCAwLHZvaWQgMCxPPUxbMl0telsyXSxJPUxbM10telszXSxQKz1BPU1hdGguc3FydChPKk8rSSpJKSxGLnB1c2goQSk7dmFyIE49UC9GLmxlbmd0aCpSO2Z1bmN0aW9uIGoodCl7cmV0dXJuIGRbdCVkLmxlbmd0aF19Zm9yKGM9ZC5sZW5ndGgtMjtjPj1CO2MtLSlpZigoeD1GW2NdKTxOKXtmb3IoXz0wLGI9Yy0xO2I+PUImJngrRltiXTxOO2ItLSl4Kz1GW2JdO2lmKEQmJmM9PT1kLmxlbmd0aC0yKWZvcihfPTA7XzxiJiZ4K0ZbX108TjtfKyspeCs9RltfXTtrPWMtYitfKzEsVD1NYXRoLmZsb29yKChjK2IrXysyKS8yKSx3PUR8fGMhPT1kLmxlbmd0aC0yP0R8fC0xIT09Yj9rJTI/aihUKTpbKGooVClbMF0raihUKzEpWzBdKS8yLChqKFQpWzFdK2ooVCsxKVsxXSkvMl06ZFswXTpkW2QubGVuZ3RoLTFdLGQuc3BsaWNlKGIrMSxjLWIrMSx3KSxjPWIrMSxfJiYoQj1fKSxEJiYoYz09PWQubGVuZ3RoLTI/ZFtfXT1kW2QubGVuZ3RoLTFdOjA9PT1jJiYoZFtkLmxlbmd0aC0xXT1kWzBdKSl9Zm9yKGQuc3BsaWNlKDAsQiksYz0wO2M8ZC5sZW5ndGg7YysrKWRbY10ubGVuZ3RoPTI7aWYoIShkLmxlbmd0aDwyKSlpZihEKWQucG9wKCksdC5wYXRocy5wdXNoKGQpO2Vsc2V7cnx8bi5sb2coIlVuY2xvc2VkIGludGVyaW9yIGNvbnRvdXI/Iix0LmxldmVsLHUsZC5qb2luKCJMIikpO3ZhciBWPSExO2ZvcihNPTA7TTx0LmVkZ2VwYXRocy5sZW5ndGg7TSsrKWlmKEU9dC5lZGdlcGF0aHNbTV0sIVYmJmEoRVswXSxkW2QubGVuZ3RoLTFdLG8sbCkpe2QucG9wKCksVj0hMDt2YXIgVT0hMTtmb3IoUz0wO1M8dC5lZGdlcGF0aHMubGVuZ3RoO1MrKylpZihhKChDPXQuZWRnZXBhdGhzW1NdKVtDLmxlbmd0aC0xXSxkWzBdLG8sbCkpe1U9ITAsZC5zaGlmdCgpLHQuZWRnZXBhdGhzLnNwbGljZShNLDEpLFM9PT1NP3QucGF0aHMucHVzaChkLmNvbmNhdChDKSk6KFM+TSYmUy0tLHQuZWRnZXBhdGhzW1NdPUMuY29uY2F0KGQsRSkpO2JyZWFrfVV8fCh0LmVkZ2VwYXRoc1tNXT1kLmNvbmNhdChFKSl9Zm9yKE09MDtNPHQuZWRnZXBhdGhzLmxlbmd0aCYmIVY7TSsrKWEoKEU9dC5lZGdlcGF0aHNbTV0pW0UubGVuZ3RoLTFdLGRbMF0sbyxsKSYmKGQuc2hpZnQoKSx0LmVkZ2VwYXRoc1tNXT1FLmNvbmNhdChkKSxWPSEwKTtWfHx0LmVkZ2VwYXRocy5wdXNoKGQpfX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1lWzBdK01hdGgubWF4KHJbMF0sMCksaT1lWzFdK01hdGgubWF4KHJbMV0sMCksYT10LnpbaV1bbl0sbz10LnhheGlzLHM9dC55YXhpcztpZihyWzFdKXt2YXIgbD0odC5sZXZlbC1hKS8odC56W2ldW24rMV0tYSk7cmV0dXJuW28uYzJwKCgxLWwpKnQueFtuXStsKnQueFtuKzFdLCEwKSxzLmMycCh0LnlbaV0sITApLG4rbCxpXX12YXIgYz0odC5sZXZlbC1hKS8odC56W2krMV1bbl0tYSk7cmV0dXJuW28uYzJwKHQueFtuXSwhMCkscy5jMnAoKDEtYykqdC55W2ldK2MqdC55W2krMV0sITApLG4saStjXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEscyxsO2ZvcihlPWV8fC4wMSxyPXJ8fC4wMSxhPTA7YTx0Lmxlbmd0aDthKyspe2ZvcihzPXRbYV0sbD0wO2w8cy5zdGFydHMubGVuZ3RoO2wrKylvKHMscy5zdGFydHNbbF0sImVkZ2UiLGUscik7Zm9yKGk9MDtPYmplY3Qua2V5cyhzLmNyb3NzaW5ncykubGVuZ3RoJiZpPDFlNDspaSsrLG8ocyxPYmplY3Qua2V5cyhzLmNyb3NzaW5ncylbMF0uc3BsaXQoIiwiKS5tYXAoTnVtYmVyKSx2b2lkIDAsZSxyKTsxZTQ9PT1pJiZuLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpfX19LHsiLi4vLi4vbGliIjo3MDAsIi4vY29uc3RhbnRzIjo5MjN9XSw5MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vaGVhdG1hcC9ob3ZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzPWkodCxlLHIsYSxvLCEwKTtyZXR1cm4gcyYmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2U7ImNvbnN0cmFpbnQiPT09ZS5jb250b3Vycy50eXBlJiYoZS5maWxsY29sb3ImJm4ub3BhY2l0eShlLmZpbGxjb2xvcik/dC5jb2xvcj1uLmFkZE9wYWNpdHkoZS5maWxsY29sb3IsMSk6ZS5jb250b3Vycy5zaG93bGluZXMmJm4ub3BhY2l0eShlLmxpbmUuY29sb3IpJiYodC5jb2xvcj1uLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLDEpKSl9KSxzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uL2hlYXRtYXAvaG92ZXIiOjk1NX1dLDkzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKS5wbG90LG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uY29sb3JiYXI9dCgiLi9jb2xvcmJhciIpLG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iY29udG91ciIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImNvbnRvdXIiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuL2F0dHJpYnV0ZXMiOjkxOSwiLi9jYWxjIjo5MjAsIi4vY29sb3JiYXIiOjkyMiwiLi9kZWZhdWx0cyI6OTI4LCIuL2hvdmVyIjo5MzIsIi4vcGxvdCI6OTM3LCIuL3N0eWxlIjo5Mzl9XSw5MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2lmKGl8fChpPXt9KSx0KCJjb250b3Vycy5zaG93bGFiZWxzIikpe3ZhciBhPWUuZm9udDtuLmNvZXJjZUZvbnQodCwiY29udG91cnMubGFiZWxmb250Iix7ZmFtaWx5OmEuZmFtaWx5LHNpemU6YS5zaXplLGNvbG9yOnJ9KSx0KCJjb250b3Vycy5sYWJlbGZvcm1hdCIpfSExIT09aS5oYXNIb3ZlciYmdCgiemhvdmVyZm9ybWF0Iil9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sOTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250b3VycyxyPWUuc3RhcnQsbz1hKGUpLHM9ZS5zaXplfHwxLGw9TWF0aC5mbG9vcigoby1yKS9zKSsxLGM9ImxpbmVzIj09PWUuY29sb3Jpbmc/MDoxO2lzRmluaXRlKHMpfHwocz0xLGw9MSk7dmFyIHUsZixoPXQucmV2ZXJzZXNjYWxlP2kuZmxpcFNjYWxlKHQuY29sb3JzY2FsZSk6dC5jb2xvcnNjYWxlLHA9aC5sZW5ndGgsZD1uZXcgQXJyYXkocCksZz1uZXcgQXJyYXkocCk7aWYoImhlYXRtYXAiPT09ZS5jb2xvcmluZyl7Zm9yKHQuemF1dG8mJiExPT09dC5hdXRvY29udG91ciYmKHQuem1pbj1yLXMvMix0LnptYXg9dC56bWluK2wqcyksZj0wO2Y8cDtmKyspdT1oW2ZdLGRbZl09dVswXSoodC56bWF4LXQuem1pbikrdC56bWluLGdbZl09dVsxXTt2YXIgdj1uLmV4dGVudChbdC56bWluLHQuem1heCxlLnN0YXJ0LGUuc3RhcnQrcyoobC0xKV0pLG09dlt0LnptaW48dC56bWF4PzA6MV0seT12W3Quem1pbjx0LnptYXg/MTowXTttIT09dC56bWluJiYoZC5zcGxpY2UoMCwwLG0pLGcuc3BsaWNlKDAsMCxSYW5nZVswXSkpLHkhPT10LnptYXgmJihkLnB1c2goeSksZy5wdXNoKGdbZy5sZW5ndGgtMV0pKX1lbHNlIGZvcihmPTA7ZjxwO2YrKyl1PWhbZl0sZFtmXT0odVswXSoobCtjLTEpLWMvMikqcytyLGdbZl09dVsxXTtyZXR1cm4gaS5tYWtlQ29sb3JTY2FsZUZ1bmMoe2RvbWFpbjpkLHJhbmdlOmd9LHtub051bWVyaWNDaGVjazohMH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjU4OSwiLi9lbmRfcGx1cyI6OTMwLGQzOjE1NH1dLDkzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj0oZVswXVswXT50PzA6MSkrKGVbMF1bMV0+dD8wOjIpKyhlWzFdWzFdPnQ/MDo0KSsoZVsxXVswXT50PzA6OCk7cmV0dXJuIDU9PT1yfHwxMD09PXI/dD4oZVswXVswXStlWzBdWzFdK2VbMV1bMF0rZVsxXVsxXSkvND81PT09cj83MTM6MTExNDo1PT09cj8xMDQ6MjA4OjE1PT09cj8wOnJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHMsbCxjLHUsZixoPXRbMF0ueixwPWgubGVuZ3RoLGQ9aFswXS5sZW5ndGgsZz0yPT09cHx8Mj09PWQ7Zm9yKHI9MDtyPHAtMTtyKyspZm9yKG89W10sMD09PXImJihvPW8uY29uY2F0KG4uQk9UVE9NU1RBUlQpKSxyPT09cC0yJiYobz1vLmNvbmNhdChuLlRPUFNUQVJUKSksZT0wO2U8ZC0xO2UrKylmb3IoYT1vLnNsaWNlKCksMD09PWUmJihhPWEuY29uY2F0KG4uTEVGVFNUQVJUKSksZT09PWQtMiYmKGE9YS5jb25jYXQobi5SSUdIVFNUQVJUKSkscz1lKyIsIityLGw9W1toW3JdW2VdLGhbcl1bZSsxXV0sW2hbcisxXVtlXSxoW3IrMV1bZSsxXV1dLGY9MDtmPHQubGVuZ3RoO2YrKykoYz1pKCh1PXRbZl0pLmxldmVsLGwpKSYmKHUuY3Jvc3NpbmdzW3NdPWMsLTEhPT1hLmluZGV4T2YoYykmJih1LnN0YXJ0cy5wdXNoKFtlLHJdKSxnJiYtMSE9PWEuaW5kZXhPZihjLGEuaW5kZXhPZihjKSsxKSYmdS5zdGFydHMucHVzaChbZSxyXSkpKX19LHsiLi9jb25zdGFudHMiOjkyM31dLDkzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGM9dCgiLi4vaGVhdG1hcC9wbG90IiksdT10KCIuL21ha2VfY3Jvc3NpbmdzIiksZj10KCIuL2ZpbmRfYWxsX3BhdGhzIiksaD10KCIuL2VtcHR5X3BhdGhpbmZvIikscD10KCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxkPXQoIi4vY2xvc2VfYm91bmRhcmllcyIpLGc9dCgiLi9jb25zdGFudHMiKSx2PWcuTEFCRUxPUFRJTUlaRVI7ZnVuY3Rpb24gbSh0LGUpe3ZhciByLG4sbyxzLGwsYyx1LGY9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnByZWZpeEJvdW5kYXJ5O2lmKHZvaWQgMD09PXIpe3ZhciBuPU1hdGgubWluKHQuelswXVswXSx0LnpbMF1bMV0pO3I9IXQuZWRnZXBhdGhzLmxlbmd0aCYmbj50LmxldmVsfXJldHVybiByPyJNIitlLmpvaW4oIkwiKSsiWiI6IiJ9KHQsZSksaD0wLHA9dC5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxkPSEwO2Z1bmN0aW9uIGcodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tZVsyXVsxXSk8LjAxfWZ1bmN0aW9uIHYodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXVswXSk8LjAxfWZ1bmN0aW9uIG0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVsyXVswXSk8LjAxfWZvcig7cC5sZW5ndGg7KXtmb3IoYz1hLnNtb290aG9wZW4odC5lZGdlcGF0aHNbaF0sdC5zbW9vdGhpbmcpLGYrPWQ/YzpjLnJlcGxhY2UoL15NLywiTCIpLHAuc3BsaWNlKHAuaW5kZXhPZihoKSwxKSxyPXQuZWRnZXBhdGhzW2hdW3QuZWRnZXBhdGhzW2hdLmxlbmd0aC0xXSxzPS0xLG89MDtvPDQ7bysrKXtpZighcil7aS5sb2coIk1pc3NpbmcgZW5kPyIsaCx0KTticmVha31mb3IodT1yLE1hdGguYWJzKHVbMV0tZVswXVsxXSk8LjAxJiYhbShyKT9uPWVbMV06dihyKT9uPWVbMF06ZyhyKT9uPWVbM106bShyKSYmKG49ZVsyXSksbD0wO2w8dC5lZGdlcGF0aHMubGVuZ3RoO2wrKyl7dmFyIHk9dC5lZGdlcGF0aHNbbF1bMF07TWF0aC5hYnMoclswXS1uWzBdKTwuMDE/TWF0aC5hYnMoclswXS15WzBdKTwuMDEmJih5WzFdLXJbMV0pKihuWzFdLXlbMV0pPj0wJiYobj15LHM9bCk6TWF0aC5hYnMoclsxXS1uWzFdKTwuMDE/TWF0aC5hYnMoclsxXS15WzFdKTwuMDEmJih5WzBdLXJbMF0pKihuWzBdLXlbMF0pPj0wJiYobj15LHM9bCk6aS5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIscixuLHkpfWlmKHI9bixzPj0wKWJyZWFrO2YrPSJMIitufWlmKHM9PT10LmVkZ2VwYXRocy5sZW5ndGgpe2kubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfWg9cywoZD0tMT09PXAuaW5kZXhPZihoKSkmJihoPXBbMF0sZis9IloiKX1mb3IoaD0wO2g8dC5wYXRocy5sZW5ndGg7aCsrKWYrPWEuc21vb3RoY2xvc2VkKHQucGF0aHNbaF0sdC5zbW9vdGhpbmcpO3JldHVybiBmfWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGE9ZS53aWR0aC8yLG89ZS5oZWlnaHQvMixzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLmNvcyhjKSphLGY9TWF0aC5zaW4oYykqYSxoPShzPm4uY2VudGVyP24ucmlnaHQtczpzLW4ubGVmdCkvKHUrTWF0aC5hYnMoTWF0aC5zaW4oYykqbykpLHA9KGw+bi5taWRkbGU/bi5ib3R0b20tbDpsLW4udG9wKS8oTWF0aC5hYnMoZikrTWF0aC5jb3MoYykqbyk7aWYoaDwxfHxwPDEpcmV0dXJuIDEvMDt2YXIgZD12LkVER0VDT1NUKigxLyhoLTEpKzEvKHAtMSkpO2QrPXYuQU5HTEVDT1NUKmMqYztmb3IodmFyIGc9cy11LG09bC1mLHk9cyt1LHg9bCtmLGI9MDtiPHIubGVuZ3RoO2IrKyl7dmFyIF89cltiXSx3PU1hdGguY29zKF8udGhldGEpKl8ud2lkdGgvMixrPU1hdGguc2luKF8udGhldGEpKl8ud2lkdGgvMixUPTIqaS5zZWdtZW50RGlzdGFuY2UoZyxtLHkseCxfLngtdyxfLnktayxfLngrdyxfLnkraykvKGUuaGVpZ2h0K18uaGVpZ2h0KSxBPV8ubGV2ZWw9PT1lLmxldmVsLE09QT92LlNBTUVMRVZFTERJU1RBTkNFOjE7aWYoVDw9TSlyZXR1cm4gMS8wO2QrPXYuTkVJR0hCT1JDT1NUKihBP3YuU0FNRUxFVkVMRkFDVE9SOjEpLyhULU0pfXJldHVybiBkfXIucGxvdD1mdW5jdGlvbih0LGUsbyxzKXt2YXIgbD1lLnhheGlzLHY9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLG8sImNvbnRvdXIiKS5lYWNoKGZ1bmN0aW9uKG8pe3ZhciBzPW4uc2VsZWN0KHRoaXMpLHk9b1swXSx4PXkudHJhY2UsYj15LngsXz15Lnksdz14LmNvbnRvdXJzLGs9aCh3LGUseSksVD1pLmVuc3VyZVNpbmdsZShzLCJnIiwiaGVhdG1hcGNvbG9yaW5nIiksQT1bXTsiaGVhdG1hcCI9PT13LmNvbG9yaW5nJiYoeC56YXV0byYmITE9PT14LmF1dG9jb250b3VyJiYoeC5faW5wdXQuem1pbj14LnptaW49dy5zdGFydC13LnNpemUvMix4Ll9pbnB1dC56bWF4PXguem1heD14LnptaW4ray5sZW5ndGgqdy5zaXplKSxBPVtvXSksYyh0LGUsQSxUKSx1KGspLGYoayk7dmFyIE09bC5jMnAoYlswXSwhMCksUz1sLmMycChiW2IubGVuZ3RoLTFdLCEwKSxFPXYuYzJwKF9bMF0sITApLEM9di5jMnAoX1tfLmxlbmd0aC0xXSwhMCksTD1bW00sQ10sW1MsQ10sW1MsRV0sW00sRV1dLHo9azsiY29uc3RyYWludCI9PT13LnR5cGUmJih6PXAoayx3Ll9vcGVyYXRpb24pLGQoeix3Ll9vcGVyYXRpb24sTCx4KSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyYmciKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIj09PXIuY29sb3Jpbmc/WzBdOltdKTtuLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksbi5leGl0KCkucmVtb3ZlKCksbi5hdHRyKCJkIiwiTSIrZS5qb2luKCJMIikrIloiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfShzLEwsdyksZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1hLmNvbG9yaW5nfHwiY29uc3RyYWludCI9PT1hLnR5cGUmJiI9IiE9PWEuX29wZXJhdGlvbj9lOltdKTtvLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW0odCxyKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX0ocyx6LEwsdyksZnVuY3Rpb24odCxlLG8scyxsLGMpe3ZhciB1PWkuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VybGluZXMiKSxmPSExIT09bC5zaG93bGluZXMsaD1sLnNob3dsYWJlbHMscD1mJiZoLGQ9ci5jcmVhdGVMaW5lcyh1LGZ8fGgsZSksdj1yLmNyZWF0ZUxpbmVDbGlwKHUscCxvLHMudHJhY2UudWlkKSxtPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMiKS5kYXRhKGg/WzBdOltdKTtpZihtLmV4aXQoKS5yZW1vdmUoKSxtLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxhYmVscyIsITApLGgpe3ZhciB5PVtdLHg9W107aS5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgYj1yLmxhYmVsRm9ybWF0dGVyKGwscy50LmNiLG8uX2Z1bGxMYXlvdXQpLF89YS50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChhLmZvbnQsbC5sYWJlbGZvbnQpLHc9ZVswXS54YXhpcyxrPWVbMF0ueWF4aXMsVD13Ll9sZW5ndGgsQT1rLl9sZW5ndGgsTT13LnJhbmdlLFM9ay5yYW5nZSxFPU1hdGgubWF4KGNbMF1bMF0sMCksQz1NYXRoLm1pbihjWzJdWzBdLFQpLEw9TWF0aC5tYXgoY1swXVsxXSwwKSx6PU1hdGgubWluKGNbMl1bMV0sQSksTz17fTtNWzBdPE1bMV0/KE8ubGVmdD1FLE8ucmlnaHQ9Qyk6KE8ubGVmdD1DLE8ucmlnaHQ9RSksU1swXTxTWzFdPyhPLnRvcD1MLE8uYm90dG9tPXopOihPLnRvcD16LE8uYm90dG9tPUwpLE8ubWlkZGxlPShPLnRvcCtPLmJvdHRvbSkvMixPLmNlbnRlcj0oTy5sZWZ0K08ucmlnaHQpLzIseS5wdXNoKFtbTy5sZWZ0LE8udG9wXSxbTy5yaWdodCxPLnRvcF0sW08ucmlnaHQsTy5ib3R0b21dLFtPLmxlZnQsTy5ib3R0b21dXSk7dmFyIEk9TWF0aC5zcXJ0KFQqVCtBKkEpLEQ9Zy5MQUJFTERJU1RBTkNFKkkvTWF0aC5tYXgoMSxlLmxlbmd0aC9nLkxBQkVMSU5DUkVBU0UpO2QuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1yLmNhbGNUZXh0T3B0cyh0LmxldmVsLGIsXyxvKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9aS5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLE8sZS5oZWlnaHQvMik7aWYodCYmISh0LmxlbjwoZS53aWR0aCtlLmhlaWdodCkqZy5MQUJFTE1JTikpZm9yKHZhciBuPU1hdGgubWluKE1hdGguY2VpbCh0Lmxlbi9EKSxnLkxBQkVMTUFYKSxhPTA7YTxuO2ErKyl7dmFyIG89ci5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLHQsZSx4LE8pO2lmKCFvKWJyZWFrO3IuYWRkTGFiZWxEYXRhKG8sZSx4LHkpfX0pfSksXy5yZW1vdmUoKSxyLmRyYXdMYWJlbHMobSx4LG8sdixwP3k6bnVsbCl9aCYmIWYmJmQucmVtb3ZlKCl9KHMsayx0LHksdyxMKSxmdW5jdGlvbih0LGUscixuLG8pe3ZhciBzPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLGw9ImNsaXAiK24udHJhY2UudWlkLGM9cy5zZWxlY3RBbGwoIiMiK2wpLmRhdGEobi50cmFjZS5jb25uZWN0Z2Fwcz9bXTpbMF0pO2lmKGMuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY29udG91cmNsaXAiLCEwKS5hdHRyKCJpZCIsbCksYy5leGl0KCkucmVtb3ZlKCksITE9PT1uLnRyYWNlLmNvbm5lY3RnYXBzKXt2YXIgaD17bGV2ZWw6LjksY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6bi54LHk6bi55LHo6ZnVuY3Rpb24odCl7dmFyIGUscixuPXQudHJhY2UuX2VtcHR5cG9pbnRzLGk9W10sYT10LnoubGVuZ3RoLG89dC56WzBdLmxlbmd0aCxzPVtdO2ZvcihlPTA7ZTxvO2UrKylzLnB1c2goMSk7Zm9yKGU9MDtlPGE7ZSsrKWkucHVzaChzLnNsaWNlKCkpO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspcj1uW2VdLGlbclswXV1bclsxXV09MDtyZXR1cm4gdC56bWFzaz1pLGl9KG4pLHNtb290aGluZzowfTt1KFtoXSksZihbaF0pO3ZhciBwPW0oaCxvKSxkPWkuZW5zdXJlU2luZ2xlKGMsInBhdGgiLCIiKTtkLmF0dHIoImQiLHApfWVsc2UgbD1udWxsO2Euc2V0Q2xpcFVybCh0LGwscil9KHMsZSx0LHksTCl9KX0sci5jcmVhdGVMaW5lcz1mdW5jdGlvbih0LGUscil7dmFyIG49clswXS5zbW9vdGhpbmcsaT10LnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5kYXRhKGU/cjpbXSk7aWYoaS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsZXZlbCIsITApLGUpe3ZhciBvPWkuc2VsZWN0QWxsKCJwYXRoLm9wZW5saW5lIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wZWRnZXBhdGhzfHx0LmVkZ2VwYXRoc30pO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJvcGVubGluZSIsITApLG8uYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIGEuc21vb3Rob3Blbih0LG4pfSkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpO3ZhciBzPWkuc2VsZWN0QWxsKCJwYXRoLmNsb3NlZGxpbmUiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBwYXRoc3x8dC5wYXRoc30pO3MuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJjbG9zZWRsaW5lIiwhMCkscy5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gYS5zbW9vdGhjbG9zZWQodCxuKX0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKX1yZXR1cm4gaX0sci5jcmVhdGVMaW5lQ2xpcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lPyJjbGlwbGluZSIrbjpudWxsLG89ci5fZnVsbExheW91dC5fY2xpcHMuc2VsZWN0QWxsKCIjIitpKS5kYXRhKGU/WzBdOltdKTtyZXR1cm4gby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VybGluZWNsaXAiLCEwKS5hdHRyKCJpZCIsaSksYS5zZXRDbGlwVXJsKHQsaSxyKSxvfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSxyKXtpZih0LmxhYmVsZm9ybWF0KXJldHVybiByLl9kM2xvY2FsZS5udW1iZXJGb3JtYXQodC5sYWJlbGZvcm1hdCk7dmFyIG47aWYoZSluPWUuYXhpcztlbHNle2lmKG49e3R5cGU6ImxpbmVhciIsX2lkOiJ5Y29udG91ciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0sImNvbnN0cmFpbnQiPT09dC50eXBlKXt2YXIgaT10LnZhbHVlO0FycmF5LmlzQXJyYXkoaSk/bi5yYW5nZT1baVswXSxpW2kubGVuZ3RoLTFdXTpuLnJhbmdlPVtpLGldfWVsc2Ugbi5yYW5nZT1bdC5zdGFydCx0LmVuZF0sbi5udGlja3M9KHQuZW5kLXQuc3RhcnQpL3Quc2l6ZTtuLnJhbmdlWzBdPT09bi5yYW5nZVsxXSYmKG4ucmFuZ2VbMV0rPW4ucmFuZ2VbMF18fDEpLG4ubnRpY2tzfHwobi5udGlja3M9MWUzKSxsKG4scikscy5wcmVwVGlja3Mobiksbi5fdG1pbj1udWxsLG4uX3RtYXg9bnVsbH1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHMudGlja1RleHQobix0KS50ZXh0fX0sci5jYWxjVGV4dE9wdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSh0KTtyLnRleHQoaSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyxuKTt2YXIgcz1hLmJCb3goci5ub2RlKCksITApO3JldHVybnt0ZXh0Omksd2lkdGg6cy53aWR0aCxoZWlnaHQ6cy5oZWlnaHQsbGV2ZWw6dCxkeToocy50b3Arcy5ib3R0b20pLzJ9fSxyLmZpbmRCZXN0VGV4dExvY2F0aW9uPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG8scyxsLGMsdSxmPXIud2lkdGg7ZS5pc0Nsb3NlZD8ocz1lLmxlbi92LklOSVRJQUxTRUFSQ0hQT0lOVFMsbz1lLm1pbitzLzIsbD1lLm1heCk6KHM9KGUubGVuLWYpLyh2LklOSVRJQUxTRUFSQ0hQT0lOVFMrMSksbz1lLm1pbitzK2YvMixsPWUubWF4LShzK2YpLzIpO2Zvcih2YXIgaD0xLzAscD0wO3A8di5JVEVSQVRJT05TO3ArKyl7Zm9yKHZhciBkPW87ZDxsO2QrPXMpe3ZhciBnPWkuZ2V0VGV4dExvY2F0aW9uKHQsZS50b3RhbCxkLGYpLG09eShnLHIsbixhKTttPGgmJihoPW0sdT1nLGM9ZCl9aWYoaD4yKnYuTUFYQ09TVClicmVhaztwJiYocy89MiksbD0obz1jLXMvMikrMS41KnN9aWYoaDw9di5NQVhDT1NUKXJldHVybiB1fSxyLmFkZExhYmVsRGF0YT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lLndpZHRoLzIsYT1lLmhlaWdodC8yLG89dC54LHM9dC55LGw9dC50aGV0YSxjPU1hdGguc2luKGwpLHU9TWF0aC5jb3MobCksZj1pKnUsaD1hKmMscD1pKmMsZD0tYSp1LGc9W1tvLWYtaCxzLXAtZF0sW28rZi1oLHMrcC1kXSxbbytmK2gscytwK2RdLFtvLWYraCxzLXArZF1dO3IucHVzaCh7dGV4dDplLnRleHQseDpvLHk6cyxkeTplLmR5LHRoZXRhOmwsbGV2ZWw6ZS5sZXZlbCx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodH0pLG4ucHVzaChnKX0sci5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyLGEscyl7dmFyIGw9dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKGUsZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dCsiLCIrdC54KyIsIit0LnkrIiwiK3QudGhldGF9KTtpZihsLmV4aXQoKS5yZW1vdmUoKSxsLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cih7ImRhdGEtbm90ZXgiOjEsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC54K01hdGguc2luKHQudGhldGEpKnQuZHksaT10LnktTWF0aC5jb3ModC50aGV0YSkqdC5keTtuLnNlbGVjdCh0aGlzKS50ZXh0KHQudGV4dCkuYXR0cih7eDplLHk6aSx0cmFuc2Zvcm06InJvdGF0ZSgiKzE4MCp0LnRoZXRhL01hdGguUEkrIiAiK2UrIiAiK2krIikifSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyxyKX0pLHMpe2Zvcih2YXIgYz0iIix1PTA7dTxzLmxlbmd0aDt1KyspYys9Ik0iK3NbdV0uam9pbigiTCIpKyJaIjtpLmVuc3VyZVNpbmdsZShhLCJwYXRoIiwiIikuYXR0cigiZCIsYyl9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjc2NiwiLi4vaGVhdG1hcC9wbG90Ijo5NTksIi4vY2xvc2VfYm91bmRhcmllcyI6OTIxLCIuL2NvbnN0YW50cyI6OTIzLCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHMiOjkyNywiLi9lbXB0eV9wYXRoaW5mbyI6OTI5LCIuL2ZpbmRfYWxsX3BhdGhzIjo5MzEsIi4vbWFrZV9jcm9zc2luZ3MiOjkzNixkMzoxNTR9XSw5Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBpPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt0LGVdfTtyZXR1cm4gbi5hdXRvVGlja3MoaSwoZS10KS8ocnx8MTUpKSxpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNvbnRvdXJzO2lmKHQuYXV0b2NvbnRvdXIpe3ZhciByPXQuem1pbixvPXQuem1heDt2b2lkIDAhPT1yJiZ2b2lkIDAhPT1vfHwocj1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0Ll96KSxvPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQuX3opKTt2YXIgcz1hKHIsbyx0Lm5jb250b3Vycyk7ZS5zaXplPXMuZHRpY2ssZS5zdGFydD1uLnRpY2tGaXJzdChzKSxzLnJhbmdlLnJldmVyc2UoKSxlLmVuZD1uLnRpY2tGaXJzdChzKSxlLnN0YXJ0PT09ciYmKGUuc3RhcnQrPWUuc2l6ZSksZS5lbmQ9PT1vJiYoZS5lbmQtPWUuc2l6ZSksZS5zdGFydD5lLmVuZCYmKGUuc3RhcnQ9ZS5lbmQ9KGUuc3RhcnQrZS5lbmQpLzIpLHQuX2lucHV0LmNvbnRvdXJzfHwodC5faW5wdXQuY29udG91cnM9e30pLGkuZXh0ZW5kRmxhdCh0Ll9pbnB1dC5jb250b3Vycyx7c3RhcnQ6ZS5zdGFydCxlbmQ6ZS5lbmQsc2l6ZTplLnNpemV9KSx0Ll9pbnB1dC5hdXRvY29udG91cj0hMH1lbHNlIGlmKCJjb25zdHJhaW50IiE9PWUudHlwZSl7dmFyIGwsYz1lLnN0YXJ0LHU9ZS5lbmQsZj10Ll9pbnB1dC5jb250b3VycztpZihjPnUmJihlLnN0YXJ0PWYuc3RhcnQ9dSx1PWUuZW5kPWYuZW5kPWMsYz1lLnN0YXJ0KSwhKGUuc2l6ZT4wKSlsPWM9PT11PzE6YShjLHUsdC5uY29udG91cnMpLmR0aWNrLGYuc2l6ZT1lLnNpemU9bH19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4fV0sOTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGUiKSxvPXQoIi4vbWFrZV9jb2xvcl9tYXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmNvbnRvdXIiKTtlLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksZS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZSxhPXIuY29udG91cnMscz1yLmxpbmUsbD1hLnNpemV8fDEsYz1hLnN0YXJ0LHU9ImNvbnN0cmFpbnQiPT09YS50eXBlLGY9IXUmJiJsaW5lcyI9PT1hLmNvbG9yaW5nLGg9IXUmJiJmaWxsIj09PWEuY29sb3JpbmcscD1mfHxoP28ocik6bnVsbDtlLnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmNhbGwoaS5saW5lR3JvdXBTdHlsZSxzLndpZHRoLGY/cCh0LmxldmVsKTpzLmNvbG9yLHMuZGFzaCl9KTt2YXIgZD1hLmxhYmVsZm9udDtpZihlLnNlbGVjdEFsbCgiZy5jb250b3VybGFiZWxzIHRleHQiKS5lYWNoKGZ1bmN0aW9uKHQpe2kuZm9udChuLnNlbGVjdCh0aGlzKSx7ZmFtaWx5OmQuZmFtaWx5LHNpemU6ZC5zaXplLGNvbG9yOmQuY29sb3J8fChmP3AodC5sZXZlbCk6cy5jb2xvcil9KX0pLHUpZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIixyLmZpbGxjb2xvcik7ZWxzZSBpZihoKXt2YXIgZztlLnNlbGVjdEFsbCgiZy5jb250b3VyZmlsbCBwYXRoIikuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT1nJiYoZz10LmxldmVsKSxwKHQubGV2ZWwrLjUqbCl9KSx2b2lkIDA9PT1nJiYoZz1jKSxlLnNlbGVjdEFsbCgiZy5jb250b3VyYmcgcGF0aCIpLnN0eWxlKCJmaWxsIixwKGctLjUqbCkpfX0pLGEodCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi9oZWF0bWFwL3N0eWxlIjo5NjAsIi4vbWFrZV9jb2xvcl9tYXAiOjkzNSxkMzoxNTR9XSw5NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksaT10KCIuL2xhYmVsX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHMsbD1yKCJjb250b3Vycy5jb2xvcmluZyIpLGM9IiI7ImZpbGwiPT09bCYmKHM9cigiY29udG91cnMuc2hvd2xpbmVzIikpLCExIT09cyYmKCJsaW5lcyIhPT1sJiYoYz1yKCJsaW5lLmNvbG9yIiwiIzAwMCIpKSxyKCJsaW5lLndpZHRoIiwuNSkscigibGluZS5kYXNoIikpLCJub25lIiE9PWwmJighMCE9PXQuc2hvd2xlZ2VuZCYmKGUuc2hvd2xlZ2VuZD0hMSksZS5fZGZsdFNob3dMZWdlbmQ9ITEsbih0LGUsYSxyLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSkscigibGluZS5zbW9vdGhpbmciKSxpKHIsYSxjLG8pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU4NywiLi9sYWJlbF9kZWZhdWx0cyI6OTM0fV0sOTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT1pLmNvbnRvdXJzLG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PW8ubGluZTtlLmV4cG9ydHM9Yyh7Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sejpuLnosYTpuLngsYTA6bi54MCxkYTpuLmR4LGI6bi55LGIwOm4ueTAsZGI6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLGF0eXBlOm4ueHR5cGUsYnR5cGU6bi55dHlwZSxmaWxsY29sb3I6aS5maWxsY29sb3IsYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6e3R5cGU6YS50eXBlLHN0YXJ0OmEuc3RhcnQsZW5kOmEuZW5kLHNpemU6YS5zaXplLGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwibGluZXMiLCJub25lIl0sZGZsdDoiZmlsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93bGluZXM6YS5zaG93bGluZXMsc2hvd2xhYmVsczphLnNob3dsYWJlbHMsbGFiZWxmb250OmEubGFiZWxmb250LGxhYmVsZm9ybWF0OmEubGFiZWxmb3JtYXQsb3BlcmF0aW9uOmEub3BlcmF0aW9uLHZhbHVlOmEudmFsdWUsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpjKHt9LHUuY29sb3Ise30pLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc21vb3RoaW5nOmMoe30sdS5zbW9vdGhpbmcse30pLGVkaXRUeXBlOiJwbG90In0sdHJhbnNmb3Jtczp2b2lkIDB9LHMoIiIse2NMZXR0ZXI6InoiLGF1dG9Db2xvckRmbHQ6ITF9KSx7Y29sb3JiYXI6bH0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2NvbnRvdXIvYXR0cmlidXRlcyI6OTE5LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjk0OCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sOTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6Iiksbz10KCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5Iikscz10KCIuLi9oZWF0bWFwL2ludGVycDJkIiksbD10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGM9dCgiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IiksdT10KCIuL2RlZmF1bHRzIiksZj10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksaD10KCIuLi9jb250b3VyL3NldF9jb250b3VycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWYodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7aWYoIWUuYXx8IWUuYil7dmFyIHA9dC5kYXRhW3IuaW5kZXhdLGQ9dC5kYXRhW2UuaW5kZXhdO2QuYXx8KGQuYT1wLmEpLGQuYnx8KGQuYj1wLmIpLHUoZCxlLGUuX2RlZmF1bHRDb2xvcix0Ll9mdWxsTGF5b3V0KX12YXIgZz1mdW5jdGlvbih0LGUpe3ZhciByLHUsZixoLHAsZCxnLHY9ZS5fY2FycGV0VHJhY2UsbT12LmFheGlzLHk9di5iYXhpczttLl9taW5EdGljaz0wLHkuX21pbkR0aWNrPTAsaS5pc0FycmF5MUQoZS56KSYmYShlLG0seSwiYSIsImIiLFsieiJdKTtyPWUuX2E9ZS5fYXx8ZS5hLGg9ZS5fYj1lLl9ifHxlLmIscj1yP20ubWFrZUNhbGNkYXRhKGUsIl9hIik6W10saD1oP3kubWFrZUNhbGNkYXRhKGUsIl9iIik6W10sdT1lLmEwfHwwLGY9ZS5kYXx8MSxwPWUuYjB8fDAsZD1lLmRifHwxLGc9ZS5fej1vKGUuX3p8fGUueixlLnRyYW5zcG9zZSksZS5fZW1wdHlwb2ludHM9bChnKSxzKGcsZS5fZW1wdHlwb2ludHMpO3ZhciB4PWkubWF4Um93TGVuZ3RoKGcpLGI9InNjYWxlZCI9PT1lLnh0eXBlPyIiOnIsXz1jKGUsYix1LGYseCxtKSx3PSJzY2FsZWQiPT09ZS55dHlwZT8iIjpoLGs9YyhlLHcscCxkLGcubGVuZ3RoLHkpLFQ9e2E6XyxiOmssejpnfTsibGV2ZWxzIj09PWUuY29udG91cnMudHlwZSYmIm5vbmUiIT09ZS5jb250b3Vycy5jb2xvcmluZyYmbih0LGUse3ZhbHM6Zyxjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KTtyZXR1cm5bVF19KHQsZSk7cmV0dXJuIGgoZSksZ319fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo1ODUsIi4uLy4uL2xpYiI6NzAwLCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo4OTcsIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzIjo5MzgsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjk1MCwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjk1MiwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiOjk1NCwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6OTU3LCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXkiOjk1OCwiLi9kZWZhdWx0cyI6OTQzfV0sOTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vY29udG91ci9jb25zdHJhaW50X2RlZmF1bHRzIikscz10KCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIiksbD10KCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pZih1KCJjYXJwZXQiKSx0LmEmJnQuYil7aWYoIWkodCxlLHUsYywiYSIsImIiKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3UoInRleHQiKSwiY29uc3RyYWludCI9PT11KCJjb250b3Vycy50eXBlIik/byh0LGUsdSxjLHIse2hhc0hvdmVyOiExfSk6KHModCxlLHUsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsYSxyKX0pLGwodCxlLHUsYyx7aGFzSG92ZXI6ITF9KSl9ZWxzZSBlLl9kZWZhdWx0Q29sb3I9cixlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3MDAsIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0cyI6OTI0LCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjo5MjYsIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiOjk0MCwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjk2MiwiLi9hdHRyaWJ1dGVzIjo5NDF9XSw5NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vY29udG91ci9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuLi9jb250b3VyL3N0eWxlIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjb250b3VyY2FycGV0IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN2ZyIsImNhcnBldCIsImNvbnRvdXIiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsImhhc0xpbmVzIiwiY2FycGV0RGVwZW5kZW50Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuLi9jb250b3VyL2NvbG9yYmFyIjo5MjIsIi4uL2NvbnRvdXIvc3R5bGUiOjkzOSwiLi9hdHRyaWJ1dGVzIjo5NDEsIi4vY2FsYyI6OTQyLCIuL2RlZmF1bHRzIjo5NDMsIi4vcGxvdCI6OTQ3fV0sOTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGk9dCgiLi4vY2FycGV0L2F4aXNfYWxpZ25lZF9saW5lIiksYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwsYyx1KXt2YXIgZixoLHAsZCxnLHYsbSx5PSIiLHg9ZS5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxiPSEwLF89MWUtNCpNYXRoLmFicyhyWzBdWzBdLXJbMl1bMF0pLHc9MWUtNCpNYXRoLmFicyhyWzBdWzFdLXJbMl1bMV0pO2Z1bmN0aW9uIGsodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclswXVsxXSk8d31mdW5jdGlvbiBUKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMl1bMV0pPHd9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzBdWzBdKTxffWZ1bmN0aW9uIE0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclsyXVswXSk8X31mdW5jdGlvbiBTKHQsZSl7dmFyIHIsbixhLG8sZj0iIjtmb3Ioayh0KSYmIU0odCl8fFQodCkmJiFBKHQpPyhvPXMuYWF4aXMsYT1pKHMsbCxbdFswXSxlWzBdXSwuNSoodFsxXStlWzFdKSkpOihvPXMuYmF4aXMsYT1pKHMsbCwuNSoodFswXStlWzBdKSxbdFsxXSxlWzFdXSkpLHI9MTtyPGEubGVuZ3RoO3IrKylmb3IoZis9by5zbW9vdGhpbmc/IkMiOiJMIixuPTA7bjxhW3JdLmxlbmd0aDtuKyspe3ZhciBoPWFbcl1bbl07Zis9W2MuYzJwKGhbMF0pLHUuYzJwKGhbMV0pXSsiICJ9cmV0dXJuIGZ9Zm9yKGY9MCxoPW51bGw7eC5sZW5ndGg7KXt2YXIgRT1lLmVkZ2VwYXRoc1tmXVswXTtmb3IoaCYmKHkrPVMoaCxFKSksbT1uLnNtb290aG9wZW4oZS5lZGdlcGF0aHNbZl0ubWFwKG8pLGUuc21vb3RoaW5nKSx5Kz1iP206bS5yZXBsYWNlKC9eTS8sIkwiKSx4LnNwbGljZSh4LmluZGV4T2YoZiksMSksaD1lLmVkZ2VwYXRoc1tmXVtlLmVkZ2VwYXRoc1tmXS5sZW5ndGgtMV0sZz0tMSxkPTA7ZDw0O2QrKyl7aWYoIWgpe2EubG9nKCJNaXNzaW5nIGVuZD8iLGYsZSk7YnJlYWt9Zm9yKGsoaCkmJiFNKGgpP3A9clsxXTpBKGgpP3A9clswXTpUKGgpP3A9clszXTpNKGgpJiYocD1yWzJdKSx2PTA7djxlLmVkZ2VwYXRocy5sZW5ndGg7disrKXt2YXIgQz1lLmVkZ2VwYXRoc1t2XVswXTtNYXRoLmFicyhoWzBdLXBbMF0pPF8/TWF0aC5hYnMoaFswXS1DWzBdKTxfJiYoQ1sxXS1oWzFdKSoocFsxXS1DWzFdKT49MCYmKHA9QyxnPXYpOk1hdGguYWJzKGhbMV0tcFsxXSk8dz9NYXRoLmFicyhoWzFdLUNbMV0pPHcmJihDWzBdLWhbMF0pKihwWzBdLUNbMF0pPj0wJiYocD1DLGc9dik6YS5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsaCxwLEMpfWlmKGc+PTApYnJlYWs7eSs9UyhoLHApLGg9cH1pZihnPT09ZS5lZGdlcGF0aHMubGVuZ3RoKXthLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha31mPWcsKGI9LTE9PT14LmluZGV4T2YoZikpJiYoZj14WzBdLHkrPVMoaCxwKSsiWiIsaD1udWxsKX1mb3IoZj0wO2Y8ZS5wYXRocy5sZW5ndGg7ZisrKXkrPW4uc21vb3RoY2xvc2VkKGUucGF0aHNbZl0ubWFwKG8pLGUuc21vb3RoaW5nKTtyZXR1cm4geX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2xpYiI6NzAwLCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiOjg4MX1dLDk0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHU7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7Zm9yKG89KGE9dFtyXSkucGVkZ2VwYXRocz1bXSxzPWEucHBhdGhzPVtdLG49MDtuPGEuZWRnZXBhdGhzLmxlbmd0aDtuKyspe2Zvcih1PWEuZWRnZXBhdGhzW25dLGw9W10saT0wO2k8dS5sZW5ndGg7aSsrKWxbaV09ZSh1W2ldKTtvLnB1c2gobCl9Zm9yKG49MDtuPGEucGF0aHMubGVuZ3RoO24rKyl7Zm9yKHU9YS5wYXRoc1tuXSxjPVtdLGk9MDtpPHUubGVuZ3RoO2krKyljW2ldPWUodVtpXSk7cy5wdXNoKGMpfX19fSx7fV0sOTQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5IiksYT10KCIuLi9jYXJwZXQvbWFrZXBhdGgiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIiksYz10KCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzIiksdT10KCIuLi9jb250b3VyL3Bsb3QiKSxmPXQoIi4uL2NvbnRvdXIvY29uc3RhbnRzIiksaD10KCIuLi9jb250b3VyL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxwPXQoIi4vam9pbl9hbGxfcGF0aHMiKSxkPXQoIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm8iKSxnPXQoIi4vbWFwX3BhdGhpbmZvIiksdj10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksbT10KCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiKTtmdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LmdldFBvaW50QXRMZW5ndGgoZSksaT10LmdldFBvaW50QXRMZW5ndGgociksYT1pLngtbi54LG89aS55LW4ueSxzPU1hdGguc3FydChhKmErbypvKTtyZXR1cm5bYS9zLG8vc119ZnVuY3Rpb24geCh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSk7cmV0dXJuW3RbMF0vZSx0WzFdL2VdfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1NYXRoLmFicyh0WzBdKmVbMF0rdFsxXSplWzFdKTtyZXR1cm4gTWF0aC5zcXJ0KDEtcipyKS9yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixfKXt2YXIgdz1lLnhheGlzLGs9ZS55YXhpcztzLm1ha2VUcmFjZUdyb3VwcyhfLHIsImNvbnRvdXIiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBfPW4uc2VsZWN0KHRoaXMpLFQ9clswXSxBPVQudHJhY2UsTT1BLl9jYXJwZXRUcmFjZT12KHQsQSksUz10LmNhbGNkYXRhW00uaW5kZXhdWzBdO2lmKE0udmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09TS52aXNpYmxlKXt2YXIgRT1ULmEsQz1ULmIsTD1BLmNvbnRvdXJzLHo9ZChMLGUsVCksTz0iY29uc3RyYWludCI9PT1MLnR5cGUsST1MLl9vcGVyYXRpb24sRD1PPyI9Ij09PUk/ImxpbmVzIjoiZmlsbCI6TC5jb2xvcmluZyxQPVtbRVswXSxDW0MubGVuZ3RoLTFdXSxbRVtFLmxlbmd0aC0xXSxDW0MubGVuZ3RoLTFdXSxbRVtFLmxlbmd0aC0xXSxDWzBdXSxbRVswXSxDWzBdXV07bCh6KTt2YXIgUj0xZS04KihFW0UubGVuZ3RoLTFdLUVbMF0pLEY9MWUtOCooQ1tDLmxlbmd0aC0xXS1DWzBdKTtjKHosUixGKTt2YXIgQixOLGosVixVPXo7ImNvbnN0cmFpbnQiPT09TC50eXBlJiYoVT1oKHosSSksbShVLEksUCxBKSksZyh6LEcpO3ZhciBxPVtdO2ZvcihWPVMuY2xpcHNlZ21lbnRzLmxlbmd0aC0xO1Y+PTA7Vi0tKUI9Uy5jbGlwc2VnbWVudHNbVl0sTj1pKFtdLEIueCx3LmMycCksaj1pKFtdLEIueSxrLmMycCksTi5yZXZlcnNlKCksai5yZXZlcnNlKCkscS5wdXNoKGEoTixqLEIuYmljdWJpYykpO3ZhciBIPSJNIitxLmpvaW4oIkwiKSsiWiI7IWZ1bmN0aW9uKHQsZSxyLG4sbyxsKXt2YXIgYyx1LGYsaCxwPXMuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyYmciKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIiE9PWx8fG8/W106WzBdKTtwLmVudGVyKCkuYXBwZW5kKCJwYXRoIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9W107Zm9yKGg9MDtoPGUubGVuZ3RoO2grKyljPWVbaF0sdT1pKFtdLGMueCxyLmMycCksZj1pKFtdLGMueSxuLmMycCksZC5wdXNoKGEodSxmLGMuYmljdWJpYykpO3AuYXR0cigiZCIsIk0iK2Quam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0oXyxTLmNsaXBzZWdtZW50cyx3LGssTyxEKSxmdW5jdGlvbih0LGUscixpLGEsbyxsLGMsdSxmLGgpe3ZhciBkPXMuZW5zdXJlU2luZ2xlKGUsImciLCJjb250b3VyZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiPT09Zj9hOltdKTtkLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksZC5leGl0KCkucmVtb3ZlKCksZC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPXAodCxlLG8sbCxjLHUscixpKTtlLnByZWZpeEJvdW5kYXJ5JiYoYT1oK2EpLGE/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsYSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKTpuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfShBLF8sdyxrLFUsUCxHLE0sUyxELEgpLGZ1bmN0aW9uKHQsZSxyLGksYSxsLGMpe3ZhciBoPXMuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VybGluZXMiKSxwPSExIT09YS5zaG93bGluZXMsZD1hLnNob3dsYWJlbHMsZz1wJiZkLHY9dS5jcmVhdGVMaW5lcyhoLHB8fGQsZSksbT11LmNyZWF0ZUxpbmVDbGlwKGgsZyxyLGkudHJhY2UudWlkKSxfPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMiKS5kYXRhKGQ/WzBdOltdKTtpZihfLmV4aXQoKS5yZW1vdmUoKSxfLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxhYmVscyIsITApLGQpe3ZhciB3PWwueGF4aXMsaz1sLnlheGlzLFQ9dy5fbGVuZ3RoLEE9ay5fbGVuZ3RoLE09W1tbMCwwXSxbVCwwXSxbVCxBXSxbMCxBXV1dLFM9W107cy5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgRT11LmxhYmVsRm9ybWF0dGVyKGEsaS50LmNiLHIuX2Z1bGxMYXlvdXQpLEM9by50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChvLmZvbnQsYS5sYWJlbGZvbnQpLEw9e2xlZnQ6MCxyaWdodDpULGNlbnRlcjpULzIsdG9wOjAsYm90dG9tOkEsbWlkZGxlOkEvMn0sej1NYXRoLnNxcnQoVCpUK0EqQSksTz1mLkxBQkVMRElTVEFOQ0Uqei9NYXRoLm1heCgxLGUubGVuZ3RoL2YuTEFCRUxJTkNSRUFTRSk7di5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXUuY2FsY1RleHRPcHRzKHQubGV2ZWwsRSxDLHIpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goZnVuY3Rpb24ocil7dmFyIG49cy5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLEwsZS5oZWlnaHQvMik7aWYobiYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG8scz0wO3M8ci5wZWRnZXBhdGhzLmxlbmd0aDtzKyspZT09PXIucGVkZ2VwYXRoc1tzXSYmKG89ci5lZGdlcGF0aHNbc10pO2lmKCFvKXJldHVybjt2YXIgbD1pLmFbMF0sYz1pLmFbaS5hLmxlbmd0aC0xXSx1PWkuYlswXSxmPWkuYltpLmIubGVuZ3RoLTFdO2Z1bmN0aW9uIGgodCxlKXt2YXIgcixuPTA7cmV0dXJuKE1hdGguYWJzKHRbMF0tbCk8LjF8fE1hdGguYWJzKHRbMF0tYyk8LjEpJiYocj14KGkuZHh5ZGJfcm91Z2godFswXSx0WzFdLC4xKSksbj1NYXRoLm1heChuLGEqYihlLHIpLzIpKSwoTWF0aC5hYnModFsxXS11KTwuMXx8TWF0aC5hYnModFsxXS1mKTwuMSkmJihyPXgoaS5keHlkYV9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSpiKGUscikvMikpLG59dmFyIHA9eSh0LDAsMSksZD15KHQsbi50b3RhbCxuLnRvdGFsLTEpLGc9aChvWzBdLHApLHY9bi50b3RhbC1oKG9bby5sZW5ndGgtMV0sZCk7bi5taW48ZyYmKG4ubWluPWcpO24ubWF4PnYmJihuLm1heD12KTtuLmxlbj1uLm1heC1uLm1pbn0odGhpcyxyLHQsbixjLGUuaGVpZ2h0KSwhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpmLkxBQkVMTUlOKSkpZm9yKHZhciBpPU1hdGgubWluKE1hdGguY2VpbChuLmxlbi9PKSxmLkxBQkVMTUFYKSxhPTA7YTxpO2ErKyl7dmFyIG89dS5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLG4sZSxTLEwpO2lmKCFvKWJyZWFrO3UuYWRkTGFiZWxEYXRhKG8sZSxTLE0pfX0pfSksQy5yZW1vdmUoKSx1LmRyYXdMYWJlbHMoXyxTLHIsbSxnP006bnVsbCl9ZCYmIXAmJnYucmVtb3ZlKCl9KF8seix0LFQsTCxlLE0pLG8uc2V0Q2xpcFVybChfLE0uX2NsaXBQYXRoSWQsdCl9ZnVuY3Rpb24gRyh0KXt2YXIgZT1NLmFiMnh5KHRbMF0sdFsxXSwhMCk7cmV0dXJuW3cuYzJwKGVbMF0pLGsuYzJwKGVbMV0pXX19KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2xpYiI6NzAwLCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo4OTcsIi4uL2NhcnBldC9tYWtlcGF0aCI6ODk4LCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5Ijo4OTksIi4uL2NvbnRvdXIvY2xvc2VfYm91bmRhcmllcyI6OTIxLCIuLi9jb250b3VyL2NvbnN0YW50cyI6OTIzLCIuLi9jb250b3VyL2NvbnZlcnRfdG9fY29uc3RyYWludHMiOjkyNywiLi4vY29udG91ci9lbXB0eV9wYXRoaW5mbyI6OTI5LCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzIjo5MzEsIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3MiOjkzNiwiLi4vY29udG91ci9wbG90Ijo5MzcsIi4vam9pbl9hbGxfcGF0aHMiOjk0NSwiLi9tYXBfcGF0aGluZm8iOjk0NixkMzoxNTR9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe3o6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seDpzKHt9LG4ueCx7aW1wbGllZEVkaXRzOnt4dHlwZToiYXJyYXkifX0pLHgwOnMoe30sbi54MCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSxkeDpzKHt9LG4uZHgse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseTpzKHt9LG4ueSx7aW1wbGllZEVkaXRzOnt5dHlwZToiYXJyYXkifX0pLHkwOnMoe30sbi55MCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSxkeTpzKHt9LG4uZHkse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSksdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNwb3NlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0seHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFycmF5Iiwic2NhbGVkIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXJyYXkiLCJzY2FsZWQiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHpzbW9vdGg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZhc3QiLCJiZXN0IiwhMV0sZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0seGdhcDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSx5Z2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToicGxvdCJ9LHpob3ZlcmZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJub25lIn0saG92ZXJ0ZW1wbGF0ZTppKCl9LHt0cmFuc2Zvcm1zOnZvaWQgMH0sYSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pLHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1ODQsIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MTUsIi4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sOTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9oaXN0b2dyYW0yZC9jYWxjIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGw9dCgiLi9jb252ZXJ0X2NvbHVtbl94eXoiKSxjPXQoIi4vY2xlYW5fMmRfYXJyYXkiKSx1PXQoIi4vaW50ZXJwMmQiKSxmPXQoIi4vZmluZF9lbXB0aWVzIiksaD10KCIuL21ha2VfYm91bmRfYXJyYXkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixwLGQsZyx2LG0seSx4LGIsXz1hLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4Iiksdz1hLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iiksaz1uLnRyYWNlSXMoZSwiY29udG91ciIpLFQ9bi50cmFjZUlzKGUsImhpc3RvZ3JhbSIpLEE9bi50cmFjZUlzKGUsImdsMmQiKSxNPWs/ImJlc3QiOmUuenNtb290aDtpZihfLl9taW5EdGljaz0wLHcuX21pbkR0aWNrPTAsVClyPShiPW8odCxlKSkueCxwPWIueDAsZD1iLmR4LGc9Yi55LHY9Yi55MCxtPWIuZHkseT1iLno7ZWxzZXt2YXIgUz1lLno7aS5pc0FycmF5MUQoUyk/KGwoZSxfLHcsIngiLCJ5IixbInoiXSkscj1lLl94LGc9ZS5feSxTPWUuX3opOihyPWUueD9fLm1ha2VDYWxjZGF0YShlLCJ4Iik6W10sZz1lLnk/dy5tYWtlQ2FsY2RhdGEoZSwieSIpOltdKSxwPWUueDAsZD1lLmR4LHY9ZS55MCxtPWUuZHkseT1jKFMsZS50cmFuc3Bvc2UpLChrfHxlLmNvbm5lY3RnYXBzKSYmKGUuX2VtcHR5cG9pbnRzPWYoeSksdSh5LGUuX2VtcHR5cG9pbnRzKSl9ZnVuY3Rpb24gRSh0KXtNPWUuX2lucHV0LnpzbW9vdGg9ZS56c21vb3RoPSExLGkud2FybignY2Fubm90IHVzZSB6c21vb3RoOiAiZmFzdCI6ICcrdCl9aWYoImZhc3QiPT09TSlpZigibG9nIj09PV8udHlwZXx8ImxvZyI9PT13LnR5cGUpRSgibG9nIGF4aXMgZm91bmQiKTtlbHNlIGlmKCFUKXtpZihyLmxlbmd0aCl7dmFyIEM9KHJbci5sZW5ndGgtMV0tclswXSkvKHIubGVuZ3RoLTEpLEw9TWF0aC5hYnMoQy8xMDApO2Zvcih4PTA7eDxyLmxlbmd0aC0xO3grKylpZihNYXRoLmFicyhyW3grMV0tclt4XS1DKT5MKXtFKCJ4IHNjYWxlIGlzIG5vdCBsaW5lYXIiKTticmVha319aWYoZy5sZW5ndGgmJiJmYXN0Ij09PU0pe3ZhciB6PShnW2cubGVuZ3RoLTFdLWdbMF0pLyhnLmxlbmd0aC0xKSxPPU1hdGguYWJzKHovMTAwKTtmb3IoeD0wO3g8Zy5sZW5ndGgtMTt4KyspaWYoTWF0aC5hYnMoZ1t4KzFdLWdbeF0teik+Tyl7RSgieSBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fX12YXIgST1pLm1heFJvd0xlbmd0aCh5KSxEPSJzY2FsZWQiPT09ZS54dHlwZT8iIjpyLFA9aChlLEQscCxkLEksXyksUj0ic2NhbGVkIj09PWUueXR5cGU/IiI6ZyxGPWgoZSxSLHYsbSx5Lmxlbmd0aCx3KTtBfHwoZS5fZXh0cmVtZXNbXy5faWRdPWEuZmluZEV4dHJlbWVzKF8sUCksZS5fZXh0cmVtZXNbdy5faWRdPWEuZmluZEV4dHJlbWVzKHcsRikpO3ZhciBCPXt4OlAseTpGLHo6eSx0ZXh0OmUuX3RleHR8fGUudGV4dCxob3ZlcnRleHQ6ZS5faG92ZXJ0ZXh0fHxlLmhvdmVydGV4dH07aWYoRCYmRC5sZW5ndGg9PT1QLmxlbmd0aC0xJiYoQi54Q2VudGVyPUQpLFImJlIubGVuZ3RoPT09Ri5sZW5ndGgtMSYmKEIueUNlbnRlcj1SKSxUJiYoQi54UmFuZ2VzPWIueFJhbmdlcyxCLnlSYW5nZXM9Yi55UmFuZ2VzLEIucHRzPWIucHRzKSxrJiYiY29uc3RyYWludCI9PT1lLmNvbnRvdXJzLnR5cGV8fHModCxlLHt2YWxzOnksY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6InoifSksayYmZS5jb250b3VycyYmImhlYXRtYXAiPT09ZS5jb250b3Vycy5jb2xvcmluZyl7dmFyIE49e3R5cGU6ImNvbnRvdXIiPT09ZS50eXBlPyJoZWF0bWFwIjoiaGlzdG9ncmFtMmQiLHhjYWxlbmRhcjplLnhjYWxlbmRhcix5Y2FsZW5kYXI6ZS55Y2FsZW5kYXJ9O0IueGZpbGw9aChOLEQscCxkLEksXyksQi55ZmlsbD1oKE4sUix2LG0seS5sZW5ndGgsdyl9cmV0dXJuW0JdfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vaGlzdG9ncmFtMmQvY2FsYyI6OTgwLCIuL2NsZWFuXzJkX2FycmF5Ijo5NTAsIi4vY29udmVydF9jb2x1bW5feHl6Ijo5NTIsIi4vZmluZF9lbXB0aWVzIjo5NTQsIi4vaW50ZXJwMmQiOjk1NywiLi9tYWtlX2JvdW5kX2FycmF5Ijo5NTh9XSw5NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzLGw7ZnVuY3Rpb24gYyh0KXtpZihuKHQpKXJldHVybit0fWlmKGUpe2ZvcihyPTAscz0wO3M8dC5sZW5ndGg7cysrKXI9TWF0aC5tYXgocix0W3NdLmxlbmd0aCk7aWYoMD09PXIpcmV0dXJuITE7YT1mdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9LG89ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W3JdW2VdfX1lbHNlIHI9dC5sZW5ndGgsYT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdLmxlbmd0aH0sbz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV1bcl19O3ZhciB1PW5ldyBBcnJheShyKTtmb3Iocz0wO3M8cjtzKyspZm9yKGk9YSh0LHMpLHVbc109bmV3IEFycmF5KGkpLGw9MDtsPGk7bCsrKXVbc11bbF09YyhvKHQscyxsKSk7cmV0dXJuIHV9fSx7ImZhc3QtaXNudW1lcmljIjoyMjF9XSw5NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttaW46InptaW4iLG1heDoiem1heCJ9fSx7fV0sOTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3ZhciBsLGMsdSxmLGg9dC5fbGVuZ3RoLHA9ZS5tYWtlQ2FsY2RhdGEodCxhKSxkPXIubWFrZUNhbGNkYXRhKHQsbyksZz10LnRleHQsdj12b2lkIDAhPT1nJiZuLmlzQXJyYXkxRChnKSxtPXQuaG92ZXJ0ZXh0LHk9dm9pZCAwIT09bSYmbi5pc0FycmF5MUQobSkseD1uLmRpc3RpbmN0VmFscyhwKSxiPXgudmFscyxfPW4uZGlzdGluY3RWYWxzKGQpLHc9Xy52YWxzLGs9W107Zm9yKGw9MDtsPHMubGVuZ3RoO2wrKylrW2xdPW4uaW5pdDJkQXJyYXkody5sZW5ndGgsYi5sZW5ndGgpO2Zvcih2JiYodT1uLmluaXQyZEFycmF5KHcubGVuZ3RoLGIubGVuZ3RoKSkseSYmKGY9bi5pbml0MmRBcnJheSh3Lmxlbmd0aCxiLmxlbmd0aCkpLGw9MDtsPGg7bCsrKWlmKHBbbF0hPT1pJiZkW2xdIT09aSl7dmFyIFQ9bi5maW5kQmluKHBbbF0reC5taW5EaWZmLzIsYiksQT1uLmZpbmRCaW4oZFtsXStfLm1pbkRpZmYvMix3KTtmb3IoYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgTT10W3NbY11dO2tbY11bQV1bVF09TVtsXX12JiYodVtBXVtUXT1nW2xdKSx5JiYoZltBXVtUXT1tW2xdKX1mb3IodFsiXyIrYV09Yix0WyJfIitvXT13LGM9MDtjPHMubGVuZ3RoO2MrKyl0WyJfIitzW2NdXT1rW2NdO3YmJih0Ll90ZXh0PXUpLHkmJih0Ll9ob3ZlcnRleHQ9Zil9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDB9XSw5NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3h5el9kZWZhdWx0cyIpLGE9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWkodCxlLGMsbCk/KGMoInRleHQiKSxjKCJob3ZlcnRleHQiKSxjKCJob3ZlcnRlbXBsYXRlIiksYSh0LGUsYyxsKSxjKCJjb25uZWN0Z2FwcyIsbi5pc0FycmF5MUQoZS56KSYmITEhPT1lLnpzbW9vdGgpLG8odCxlLGwsYyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSkpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo1ODcsIi4uLy4uL2xpYiI6NzAwLCIuL2F0dHJpYnV0ZXMiOjk0OCwiLi9zdHlsZV9kZWZhdWx0cyI6OTYxLCIuL3h5el9kZWZhdWx0cyI6OTYyfV0sOTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLm1heFJvd0xlbmd0aDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxzLGwsYyx1PVtdLGY9e30saD1bXSxwPXRbMF0sZD1bXSxnPVswLDAsMF0sdj1uKHQpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspZm9yKGU9ZCxkPXAscD10W3IrMV18fFtdLGk9MDtpPHY7aSsrKXZvaWQgMD09PWRbaV0mJigocz0odm9pZCAwIT09ZFtpLTFdPzE6MCkrKHZvaWQgMCE9PWRbaSsxXT8xOjApKyh2b2lkIDAhPT1lW2ldPzE6MCkrKHZvaWQgMCE9PXBbaV0/MTowKSk/KDA9PT1yJiZzKyssMD09PWkmJnMrKyxyPT09dC5sZW5ndGgtMSYmcysrLGk9PT1kLmxlbmd0aC0xJiZzKyssczw0JiYoZltbcixpXV09W3IsaSxzXSksdS5wdXNoKFtyLGksc10pKTpoLnB1c2goW3IsaV0pKTtmb3IoO2gubGVuZ3RoOyl7Zm9yKGw9e30sYz0hMSxvPWgubGVuZ3RoLTE7bz49MDtvLS0pKHM9KChmW1socj0oYT1oW29dKVswXSktMSxpPWFbMV1dXXx8ZylbMl0rKGZbW3IrMSxpXV18fGcpWzJdKyhmW1tyLGktMV1dfHxnKVsyXSsoZltbcixpKzFdXXx8ZylbMl0pLzIwKSYmKGxbYV09W3IsaSxzXSxoLnNwbGljZShvLDEpLGM9ITApO2lmKCFjKXRocm93ImZpbmRFbXB0aWVzIGl0ZXJhdGVkIHdpdGggbm8gbmV3IG5laWdoYm9ycyI7Zm9yKGEgaW4gbClmW2FdPWxbYV0sdS5wdXNoKGxbYV0pfXJldHVybiB1LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVsyXS10WzJdfSl9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sOTU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLHUsZixoLHA9dC5jZFswXSxkPXAudHJhY2UsZz10LnhhLHY9dC55YSxtPXAueCx5PXAueSx4PXAueixiPXAueENlbnRlcixfPXAueUNlbnRlcix3PXAuem1hc2ssaz1bZC56bWluLGQuem1heF0sVD1kLnpob3ZlcmZvcm1hdCxBPW0sTT15O2lmKCExIT09dC5pbmRleCl7dHJ5e2Y9TWF0aC5yb3VuZCh0LmluZGV4WzFdKSxoPU1hdGgucm91bmQodC5pbmRleFswXSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgaS5lcnJvcigiRXJyb3IgaG92ZXJpbmcgb24gaGVhdG1hcCwgcG9pbnROdW1iZXIgbXVzdCBiZSBbcm93LGNvbF0sIGZvdW5kOiIsdC5pbmRleCl9aWYoZjwwfHxmPj14WzBdLmxlbmd0aHx8aDwwfHxoPngubGVuZ3RoKXJldHVybn1lbHNle2lmKG4uaW5ib3goZS1tWzBdLGUtbVttLmxlbmd0aC0xXSwwKT4wfHxuLmluYm94KHIteVswXSxyLXlbeS5sZW5ndGgtMV0sMCk+MClyZXR1cm47aWYobCl7dmFyIFM7Zm9yKEE9WzIqbVswXS1tWzFdXSxTPTE7UzxtLmxlbmd0aDtTKyspQS5wdXNoKChtW1NdK21bUy0xXSkvMik7Zm9yKEEucHVzaChbMiptW20ubGVuZ3RoLTFdLW1bbS5sZW5ndGgtMl1dKSxNPVsyKnlbMF0teVsxXV0sUz0xO1M8eS5sZW5ndGg7UysrKU0ucHVzaCgoeVtTXSt5W1MtMV0pLzIpO00ucHVzaChbMip5W3kubGVuZ3RoLTFdLXlbeS5sZW5ndGgtMl1dKX1mPU1hdGgubWF4KDAsTWF0aC5taW4oQS5sZW5ndGgtMixpLmZpbmRCaW4oZSxBKSkpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNLmxlbmd0aC0yLGkuZmluZEJpbihyLE0pKSl9dmFyIEU9Zy5jMnAobVtmXSksQz1nLmMycChtW2YrMV0pLEw9di5jMnAoeVtoXSksej12LmMycCh5W2grMV0pO2w/KEM9RSxjPW1bZl0sej1MLHU9eVtoXSk6KGM9Yj9iW2ZdOihtW2ZdK21bZisxXSkvMix1PV8/X1toXTooeVtoXSt5W2grMV0pLzIsZC56c21vb3RoJiYoRT1DPWcuYzJwKGMpLEw9ej12LmMycCh1KSkpO3ZhciBPLEksRD14W2hdW2ZdO3cmJiF3W2hdW2ZdJiYoRD12b2lkIDApLEFycmF5LmlzQXJyYXkocC5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KHAuaG92ZXJ0ZXh0W2hdKT9PPXAuaG92ZXJ0ZXh0W2hdW2ZdOkFycmF5LmlzQXJyYXkocC50ZXh0KSYmQXJyYXkuaXNBcnJheShwLnRleHRbaF0pJiYoTz1wLnRleHRbaF1bZl0pO3ZhciBQPXt0eXBlOiJsaW5lYXIiLHJhbmdlOmssaG92ZXJmb3JtYXQ6VCxfc2VwYXJhdG9yczpnLl9zZXBhcmF0b3JzLF9udW1Gb3JtYXQ6Zy5fbnVtRm9ybWF0fTtyZXR1cm4gST1hLnRpY2tUZXh0KFAsRCwiaG92ZXIiKS50ZXh0LFtpLmV4dGVuZEZsYXQodCx7aW5kZXg6W2gsZl0sZGlzdGFuY2U6dC5tYXhIb3ZlckRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6dC5tYXhTcGlrZURpc3RhbmNlLHgwOkUseDE6Qyx5MDpMLHkxOnoseExhYmVsVmFsOmMseUxhYmVsVmFsOnUsekxhYmVsVmFsOkQsekxhYmVsOkksdGV4dDpPfSldfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4fV0sOTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uY29sb3JiYXI9dCgiLi9jb2xvcmJhciIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iaGVhdG1hcCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi9hdHRyaWJ1dGVzIjo5NDgsIi4vY2FsYyI6OTQ5LCIuL2NvbG9yYmFyIjo5NTEsIi4vZGVmYXVsdHMiOjk1MywiLi9ob3ZlciI6OTU1LCIuL3Bsb3QiOjk1OSwiLi9zdHlsZSI6OTYwfV0sOTU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9W1stMSwwXSxbMSwwXSxbMCwtMV0sWzAsMV1dO2Z1bmN0aW9uIGEodCl7cmV0dXJuLjUtLjI1Kk1hdGgubWluKDEsLjUqdCl9ZnVuY3Rpb24gbyh0LGUscil7dmFyIG4sYSxvLHMsbCxjLHUsZixoLHAsZCxnLHYsbT0wO2ZvcihzPTA7czxlLmxlbmd0aDtzKyspe2ZvcihhPShuPWVbc10pWzBdLG89blsxXSxkPXRbYV1bb10scD0wLGg9MCxsPTA7bDw0O2wrKykodT10W2ErKGM9aVtsXSlbMF1dKSYmdm9pZCAwIT09KGY9dVtvK2NbMV1dKSYmKDA9PT1wP2c9dj1mOihnPU1hdGgubWluKGcsZiksdj1NYXRoLm1heCh2LGYpKSxoKysscCs9Zik7aWYoMD09PWgpdGhyb3ciaXRlcmF0ZUludGVycDJkIG9yZGVyIGlzIHdyb25nOiBubyBkZWZpbmVkIG5laWdoYm9ycyI7dFthXVtvXT1wL2gsdm9pZCAwPT09ZD9oPDQmJihtPTEpOih0W2FdW29dPSgxK3IpKnRbYV1bb10tcipkLHY+ZyYmKG09TWF0aC5tYXgobSxNYXRoLmFicyh0W2FdW29dLWQpLyh2LWcpKSkpfXJldHVybiBtfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGk9MTtmb3Iobyh0LGUpLHI9MDtyPGUubGVuZ3RoJiYhKGVbcl1bMl08NCk7cisrKTtmb3IoZT1lLnNsaWNlKHIpLHI9MDtyPDEwMCYmaT4uMDE7cisrKWk9byh0LGUsYShpKSk7cmV0dXJuIGk+LjAxJiZuLmxvZygiaW50ZXJwMmQgZGlkbid0IGNvbnZlcmdlIHF1aWNrbHkiLGkpLHR9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sOTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGwsYyx1LGY9W10saD1uLnRyYWNlSXModCwiY29udG91ciIpLHA9bi50cmFjZUlzKHQsImhpc3RvZ3JhbSIpLGQ9bi50cmFjZUlzKHQsImdsMmQiKTtpZihpKGUpJiZlLmxlbmd0aD4xJiYhcCYmImNhdGVnb3J5IiE9PXMudHlwZSl7dmFyIGc9ZS5sZW5ndGg7aWYoIShnPD1vKSlyZXR1cm4gaD9lLnNsaWNlKDAsbyk6ZS5zbGljZSgwLG8rMSk7aWYoaHx8ZClmPWUuc2xpY2UoMCxvKTtlbHNlIGlmKDE9PT1vKWY9W2VbMF0tLjUsZVswXSsuNV07ZWxzZXtmb3IoZj1bMS41KmVbMF0tLjUqZVsxXV0sdT0xO3U8Zzt1KyspZi5wdXNoKC41KihlW3UtMV0rZVt1XSkpO2YucHVzaCgxLjUqZVtnLTFdLS41KmVbZy0yXSl9aWYoZzxvKXt2YXIgdj1mW2YubGVuZ3RoLTFdLG09di1mW2YubGVuZ3RoLTJdO2Zvcih1PWc7dTxvO3UrKyl2Kz1tLGYucHVzaCh2KX19ZWxzZXt2YXIgeT10W3MuX2lkLmNoYXJBdCgwKSsiY2FsZW5kYXIiXTtmb3IobD1pKGUpJiYxPT09ZS5sZW5ndGg/ZVswXTp2b2lkIDA9PT1yPzA6cHx8ImNhdGVnb3J5Ij09PXMudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09cy50eXBlP3MucjJjKHIsMCx5KTpzLmQyYyhyLDAseSksYz1hfHwxLHU9aHx8ZD8wOi0uNTt1PG87dSsrKWYucHVzaChsK2MqdSl9cmV0dXJuIGZ9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5fV0sOTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUubGVuZ3RoLTIsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPWVbbisxXSxzPW8uY29uc3RyYWluKG4rKHQtaSkvKGEtaSktLjUsMCxyKSxsPU1hdGgucm91bmQocyksYz1NYXRoLmFicyhzLWwpO3JldHVybiBzJiZzIT09ciYmYz97YmluMDpsLGZyYWM6YyxiaW4xOk1hdGgucm91bmQobCtjLyhzLWwpKX06e2JpbjA6bCxiaW4xOmwsZnJhYzowfX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9ZS5sZW5ndGgtMSxuPW8uY29uc3RyYWluKG8uZmluZEJpbih0LGUpLDAsciksaT1lW25dLGE9KHQtaSkvKGVbbisxXS1pKXx8MDtyZXR1cm4gYTw9MD97YmluMDpuLGJpbjE6bixmcmFjOjB9OmE8LjU/e2JpbjA6bixiaW4xOm4rMSxmcmFjOmF9OntiaW4wOm4rMSxiaW4xOm4sZnJhYzoxLWF9fWZ1bmN0aW9uIGYodCxlLHIpe3RbZV09clswXSx0W2UrMV09clsxXSx0W2UrMl09clsyXSx0W2UrM109TWF0aC5yb3VuZCgyNTUqclszXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe3ZhciBwPWUueGF4aXMsZD1lLnlheGlzO28ubWFrZVRyYWNlR3JvdXBzKGgsciwiaG0iKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByLGgsZyx2LG0seSx4PW4uc2VsZWN0KHRoaXMpLGI9ZVswXSxfPWIudHJhY2Usdz1iLnosaz1iLngsVD1iLnksQT1iLnhDZW50ZXIsTT1iLnlDZW50ZXIsUz1hLnRyYWNlSXMoXywiY29udG91ciIpLEU9Uz8iYmVzdCI6Xy56c21vb3RoLEM9dy5sZW5ndGgsTD1vLm1heFJvd0xlbmd0aCh3KSx6PSExLE89ITE7Zm9yKHk9MDt2b2lkIDA9PT1yJiZ5PGsubGVuZ3RoLTE7KXI9cC5jMnAoa1t5XSkseSsrO2Zvcih5PWsubGVuZ3RoLTE7dm9pZCAwPT09aCYmeT4wOyloPXAuYzJwKGtbeV0pLHktLTtmb3IoaDxyJiYoZz1oLGg9cixyPWcsej0hMCkseT0wO3ZvaWQgMD09PXYmJnk8VC5sZW5ndGgtMTspdj1kLmMycChUW3ldKSx5Kys7Zm9yKHk9VC5sZW5ndGgtMTt2b2lkIDA9PT1tJiZ5PjA7KW09ZC5jMnAoVFt5XSkseS0tO2lmKG08diYmKGc9dix2PW0sbT1nLE89ITApLFMmJihBPWssTT1ULGs9Yi54ZmlsbCxUPWIueWZpbGwpLCJmYXN0IiE9PUUpe3ZhciBJPSJiZXN0Ij09PUU/MDouNTtyPU1hdGgubWF4KC1JKnAuX2xlbmd0aCxyKSxoPU1hdGgubWluKCgxK0kpKnAuX2xlbmd0aCxoKSx2PU1hdGgubWF4KC1JKmQuX2xlbmd0aCx2KSxtPU1hdGgubWluKCgxK0kpKmQuX2xlbmd0aCxtKX12YXIgRD1NYXRoLnJvdW5kKGgtciksUD1NYXRoLnJvdW5kKG0tdik7aWYoRDw9MHx8UDw9MCl7eC5zZWxlY3RBbGwoImltYWdlIikuZGF0YShbXSkuZXhpdCgpLnJlbW92ZSgpfWVsc2V7dmFyIFIsRjsiZmFzdCI9PT1FPyhSPUwsRj1DKTooUj1ELEY9UCk7dmFyIEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Qi53aWR0aD1SLEIuaGVpZ2h0PUY7dmFyIE4saixWPUIuZ2V0Q29udGV4dCgiMmQiKSxVPXMubWFrZUNvbG9yU2NhbGVGdW5jKHMuZXh0cmFjdFNjYWxlKF8se2NMZXR0ZXI6InoifSkse25vTnVtZXJpY0NoZWNrOiEwLHJldHVybkFycmF5OiEwfSk7ImZhc3QiPT09RT8oTj16P2Z1bmN0aW9uKHQpe3JldHVybiBMLTEtdH06by5pZGVudGl0eSxqPU8/ZnVuY3Rpb24odCl7cmV0dXJuIEMtMS10fTpvLmlkZW50aXR5KTooTj1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChwLmMycChrW3RdKS1yKSwwLEQpfSxqPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNvbnN0cmFpbihNYXRoLnJvdW5kKGQuYzJwKFRbdF0pLXYpLDAsUCl9KTt2YXIgcSxILEcsWSxXLFg9aigwKSxaPVtYLFhdLCQ9ej8wOjEsSj1PPzA6MSxLPTAsUT0wLHR0PTAsZXQ9MDtpZihFKXt2YXIgcnQsbnQ9MDt0cnl7cnQ9bmV3IFVpbnQ4QXJyYXkoRCpQKjQpfWNhdGNoKHQpe3J0PW5ldyBBcnJheShEKlAqNCl9aWYoImJlc3QiPT09RSl7dmFyIGl0LGF0LG90LHN0PUF8fGssbHQ9TXx8VCxjdD1uZXcgQXJyYXkoc3QubGVuZ3RoKSx1dD1uZXcgQXJyYXkobHQubGVuZ3RoKSxmdD1uZXcgQXJyYXkoRCksaHQ9QT91OmMscHQ9TT91OmM7Zm9yKHk9MDt5PHN0Lmxlbmd0aDt5KyspY3RbeV09TWF0aC5yb3VuZChwLmMycChzdFt5XSktcik7Zm9yKHk9MDt5PGx0Lmxlbmd0aDt5KyspdXRbeV09TWF0aC5yb3VuZChkLmMycChsdFt5XSktdik7Zm9yKHk9MDt5PEQ7eSsrKWZ0W3ldPWh0KHksY3QpO2ZvcihIPTA7SDxQO0grKylmb3IoYXQ9d1soaXQ9cHQoSCx1dCkpLmJpbjBdLG90PXdbaXQuYmluMV0seT0wO3k8RDt5KyssbnQrPTQpZihydCxudCxXPVR0KGF0LG90LGZ0W3ldLGl0KSl9ZWxzZSBmb3IoSD0wO0g8QztIKyspZm9yKFk9d1tIXSxaPWooSCkseT0wO3k8RDt5KyspVz1rdChZW3ldLDEpLGYocnQsbnQ9NCooWipEK04oeSkpLFcpO3ZhciBkdD1WLmNyZWF0ZUltYWdlRGF0YShELFApO3RyeXtkdC5kYXRhLnNldChydCl9Y2F0Y2godCl7dmFyIGd0PWR0LmRhdGEsdnQ9Z3QubGVuZ3RoO2ZvcihIPTA7SDx2dDtIKyspZ3RbSF09cnRbSF19Vi5wdXRJbWFnZURhdGEoZHQsMCwwKX1lbHNle3ZhciBtdD1fLnhnYXAseXQ9Xy55Z2FwLHh0PU1hdGguZmxvb3IobXQvMiksYnQ9TWF0aC5mbG9vcih5dC8yKTtmb3IoSD0wO0g8QztIKyspaWYoWT13W0hdLFoucmV2ZXJzZSgpLFpbSl09aihIKzEpLFpbMF0hPT1aWzFdJiZ2b2lkIDAhPT1aWzBdJiZ2b2lkIDAhPT1aWzFdKWZvcihxPVtHPU4oMCksR10seT0wO3k8TDt5KyspcS5yZXZlcnNlKCkscVskXT1OKHkrMSkscVswXSE9PXFbMV0mJnZvaWQgMCE9PXFbMF0mJnZvaWQgMCE9PXFbMV0mJihXPWt0KFlbeV0sKHFbMV0tcVswXSkqKFpbMV0tWlswXSkpLFYuZmlsbFN0eWxlPSJyZ2JhKCIrVy5qb2luKCIsIikrIikiLFYuZmlsbFJlY3QocVswXSt4dCxaWzBdK2J0LHFbMV0tcVswXS1tdCxaWzFdLVpbMF0teXQpKX1RPU1hdGgucm91bmQoUS9LKSx0dD1NYXRoLnJvdW5kKHR0L0spLGV0PU1hdGgucm91bmQoZXQvSyk7dmFyIF90PWkoInJnYigiK1ErIiwiK3R0KyIsIitldCsiKSIpO3QuX2htcGl4Y291bnQ9KHQuX2htcGl4Y291bnR8fDApK0ssdC5faG1sdW1jb3VudD0odC5faG1sdW1jb3VudHx8MCkrSypfdC5nZXRMdW1pbmFuY2UoKTt2YXIgd3Q9eC5zZWxlY3RBbGwoImltYWdlIikuZGF0YShlKTt3dC5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSx3dC5hdHRyKHtoZWlnaHQ6UCx3aWR0aDpELHg6cix5OnYsInhsaW5rOmhyZWYiOkIudG9EYXRhVVJMKCJpbWFnZS9wbmciKX0pfWZ1bmN0aW9uIGt0KHQsZSl7aWYodm9pZCAwIT09dCl7dmFyIHI9VSh0KTtyZXR1cm4gclswXT1NYXRoLnJvdW5kKHJbMF0pLHJbMV09TWF0aC5yb3VuZChyWzFdKSxyWzJdPU1hdGgucm91bmQoclsyXSksSys9ZSxRKz1yWzBdKmUsdHQrPXJbMV0qZSxldCs9clsyXSplLHJ9cmV0dXJuWzAsMCwwLDBdfWZ1bmN0aW9uIFR0KHQsZSxyLG4pe3ZhciBpPXRbci5iaW4wXTtpZih2b2lkIDA9PT1pKXJldHVybiBrdCh2b2lkIDAsMSk7dmFyIGEsbz10W3IuYmluMV0scz1lW3IuYmluMF0sbD1lW3IuYmluMV0sYz1vLWl8fDAsdT1zLWl8fDA7cmV0dXJuIGE9dm9pZCAwPT09bz92b2lkIDA9PT1sPzA6dm9pZCAwPT09cz8yKihsLWkpOjIqKDIqbC1zLWkpLzM6dm9pZCAwPT09bD92b2lkIDA9PT1zPzA6MiooMippLW8tcykvMzp2b2lkIDA9PT1zPzIqKDIqbC1vLWkpLzM6bCtpLW8tcyxrdChpK3IuZnJhYypjK24uZnJhYyoodStyLmZyYWMqYSkpfX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjU4OSwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY3OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksZDM6MTU0LHRpbnljb2xvcjI6NTIxfV0sOTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmhtIGltYWdlIikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KX19LHtkMzoxNTR9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXshMT09PXIoInpzbW9vdGgiKSYmKHIoInhnYXAiKSxyKCJ5Z2FwIikpLHIoInpob3ZlcmZvcm1hdCIpfX0se31dLDk2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1lKHQpO3JldHVybiJzY2FsZWQiPT09KHI/ZSh0KyJ0eXBlIiwiYXJyYXkiKToic2NhbGVkIikmJihlKHQrIjAiKSxlKCJkIit0KSkscn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1LGYsaD1yKCJ6Iik7aWYobD1sfHwieCIsYz1jfHwieSIsdm9pZCAwPT09aHx8IWgubGVuZ3RoKXJldHVybiAwO2lmKGkuaXNBcnJheTFEKHQueikpe3U9cihsKSxmPXIoYyk7dmFyIHA9aS5taW5Sb3dMZW5ndGgodSksZD1pLm1pblJvd0xlbmd0aChmKTtpZigwPT09cHx8MD09PWQpcmV0dXJuIDA7ZS5fbGVuZ3RoPU1hdGgubWluKHAsZCxoLmxlbmd0aCl9ZWxzZXtpZih1PW8obCxyKSxmPW8oYyxyKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9ITAsYT0hMSxvPSExLHM9MDtzPHQubGVuZ3RoO3MrKyl7aWYoZT10W3NdLCFpLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkpe3I9ITE7YnJlYWt9ZS5sZW5ndGg+MCYmKGE9ITApO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKG4oZVtsXSkpe289ITA7YnJlYWt9fXJldHVybiByJiZhJiZvfShoKSlyZXR1cm4gMDtyKCJ0cmFuc3Bvc2UiKSxlLl9sZW5ndGg9bnVsbH1yZXR1cm4gYS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsW2wsY10scyksITB9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sOTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Zvcih2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGw9WyJ6IiwieCIsIngwIiwiZHgiLCJ5IiwieTAiLCJkeSIsInRleHQiLCJ0cmFuc3Bvc2UiLCJ4dHlwZSIsInl0eXBlIl0sYz17fSx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBmPWxbdV07Y1tmXT1uW2ZdfW8oYyxpKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkse2NvbG9yYmFyOmF9KSxlLmV4cG9ydHM9cyhjLCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1ODQsIi4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjk0OH1dLDk2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1oZWF0bWFwMmQiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0iaGVhdG1hcGdsIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuekRhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuaWRUb0luZGV4PVtdLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLm9wdGlvbnM9e3o6W10seDpbXSx5OltdLHNoYXBlOlswLDBdLGNvbG9yTGV2ZWxzOlswXSxjb2xvclZhbHVlczpbMCwwLDAsMV19LHRoaXMuaGVhdG1hcD1uKHQuZ2xwbG90LHRoaXMub3B0aW9ucyksdGhpcy5oZWF0bWFwLl90cmFjZT10aGlzfXZhciBzPW8ucHJvdG90eXBlO3MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLnNoYXBlLG49dC5wb2ludElkLGk9biVyWzBdLGE9TWF0aC5mbG9vcihuL3JbMF0pLG89bjtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDpbZS54W2ldLGUueVthXSxlLnpbb11dLHRleHRMYWJlbDp0aGlzLnRleHRMYWJlbHNbbl0sbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDpbYSxpXSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxzLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhpcy5pbmRleD10LmluZGV4LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm87dmFyIG49ci56O3RoaXMub3B0aW9ucy56PVtdLmNvbmNhdC5hcHBseShbXSxuKTt2YXIgbz1uWzBdLmxlbmd0aCxzPW4ubGVuZ3RoO3RoaXMub3B0aW9ucy5zaGFwZT1bbyxzXSx0aGlzLm9wdGlvbnMueD1yLngsdGhpcy5vcHRpb25zLnk9ci55O3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNvbG9yc2NhbGUscj10LnptaW4sbj10LnptYXgsaT1lLmxlbmd0aCxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheSg0KmkpLGw9MDtsPGk7bCsrKXt2YXIgYz1lW2xdLHU9YShjWzFdKTtvW2xdPXIrY1swXSoobi1yKTtmb3IodmFyIGY9MDtmPDQ7ZisrKXNbNCpsK2ZdPXVbZl19cmV0dXJue2NvbG9yTGV2ZWxzOm8sY29sb3JWYWx1ZXM6c319KHQpO3RoaXMub3B0aW9ucy5jb2xvckxldmVscz1sLmNvbG9yTGV2ZWxzLHRoaXMub3B0aW9ucy5jb2xvclZhbHVlcz1sLmNvbG9yVmFsdWVzLHRoaXMudGV4dExhYmVscz1bXS5jb25jYXQuYXBwbHkoW10sdC50ZXh0KSx0aGlzLmhlYXRtYXAudXBkYXRlKHRoaXMub3B0aW9ucyk7dmFyIGM9dGhpcy5zY2VuZS54YXhpcyx1PXRoaXMuc2NlbmUueWF4aXM7dC5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsci54KSx0Ll9leHRyZW1lc1t1Ll9pZF09aS5maW5kRXh0cmVtZXModSxyLnkpfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmhlYXRtYXAuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBvKHQsZS51aWQpO3JldHVybiBuLnVwZGF0ZShlLHIpLG59fSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiZ2wtaGVhdG1hcDJkIjoyNDd9XSw5NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi4vaGVhdG1hcC9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLG4uY2FsYz10KCIuLi9oZWF0bWFwL2NhbGMiKSxuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoZWF0bWFwZ2wiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLG4uY2F0ZWdvcmllcz1bImdsIiwiZ2wyZCIsIjJkTWFwIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsMmQiOjc4NywiLi4vaGVhdG1hcC9jYWxjIjo5NDksIi4uL2hlYXRtYXAvY29sb3JiYXIiOjk1MSwiLi4vaGVhdG1hcC9kZWZhdWx0cyI6OTUzLCIuL2F0dHJpYnV0ZXMiOjk2MywiLi9jb252ZXJ0Ijo5NjR9XSw5NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksYT10KCIuL2Jpbl9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24saGlzdGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWluIiwibWF4Il0sZGZsdDoiY291bnQiLGVkaXRUeXBlOiJjYWxjIn0saGlzdG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsInBlcmNlbnQiLCJwcm9iYWJpbGl0eSIsImRlbnNpdHkiLCJwcm9iYWJpbGl0eSBkZW5zaXR5Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGN1bXVsYXRpdmU6e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY3JlYXNpbmciLCJkZWNyZWFzaW5nIl0sZGZsdDoiaW5jcmVhc2luZyIsZWRpdFR5cGU6ImNhbGMifSxjdXJyZW50YmluOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmNsdWRlIiwiZXhjbHVkZSIsImhhbGYiXSxkZmx0OiJpbmNsdWRlIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbmJpbnN4Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx4YmluczphKCJ4IiwhMCksbmJpbnN5Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5YmluczphKCJ5IiwhMCksYXV0b2Jpbng6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LGF1dG9iaW55Ont2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmkoe30se2tleXM6by5ldmVudERhdGFLZXlzfSksbWFya2VyOm4ubWFya2VyLG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLF9kZXByZWNhdGVkOntiYXJkaXI6bi5fZGVwcmVjYXRlZC5iYXJkaXJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2Jhci9hdHRyaWJ1dGVzIjo4MzksIi4vYmluX2F0dHJpYnV0ZXMiOjk2OCwiLi9jb25zdGFudHMiOjk3Mn1dLDk2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wLGk9MDtpPHI7aSsrKWVbaV0/KHRbaV0vPWVbaV0sbis9dFtpXSk6dFtpXT1udWxsO3JldHVybiBufX0se31dLDk2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxlbmQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxzaXplOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX19LHt9XSw5Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9e2NvdW50OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gclt0XSsrLDF9LHN1bTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO3JldHVybiBuKGEpPyhhPU51bWJlcihhKSxyW3RdKz1hLGEpOjB9LGF2ZzpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPWlbZV07cmV0dXJuIG4obykmJihvPU51bWJlcihvKSxyW3RdKz1vLGFbdF0rKyksMH0sbWluOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPWlbZV07aWYobihhKSl7aWYoYT1OdW1iZXIoYSksIW4oclt0XSkpcmV0dXJuIHJbdF09YSxhO2lmKHJbdF0+YSl7dmFyIG89YS1yW3RdO3JldHVybiByW3RdPWEsb319cmV0dXJuIDB9LG1heDpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPGEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfX19LHsiZmFzdC1pc251bWVyaWMiOjIyMX1dLDk3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksaT1uLk9ORUFWR1lFQVIsYT1uLk9ORUFWR01PTlRILG89bi5PTkVEQVkscz1uLk9ORUhPVVIsbD1uLk9ORU1JTixjPW4uT05FU0VDLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrSW5jcmVtZW50O2Z1bmN0aW9uIGYodCxlLHIsbil7aWYodCplPD0wKXJldHVybiAxLzA7Zm9yKHZhciBpPU1hdGguYWJzKGUtdCksYT0iZGF0ZSI9PT1yLnR5cGUsbz1oKGksYSkscz0wO3M8MTA7cysrKXt2YXIgbD1oKDgwKm8sYSk7aWYobz09PWwpYnJlYWs7aWYoIXAobCx0LGUsYSxyLG4pKWJyZWFrO289bH1yZXR1cm4gb31mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGUmJnQ+Yz90Pm8/dD4xLjEqaT9pOnQ+MS4xKmE/YTpvOnQ+cz9zOnQ+bD9sOmM6TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMTApKX1mdW5jdGlvbiBwKHQsZSxyLG4sYSxzKXtpZihuJiZ0Pm8pe3ZhciBsPWQoZSxhLHMpLGM9ZChyLGEscyksdT10PT09aT8wOjE7cmV0dXJuIGxbdV0hPT1jW3VdfXJldHVybiBNYXRoLmZsb29yKHIvdCktTWF0aC5mbG9vcihlL3QpPi4xfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPWUuYzJkKHQsaSxyKS5zcGxpdCgiLSIpO3JldHVybiIiPT09blswXSYmKG4udW5zaGlmdCgpLG5bMF09Ii0iK25bMF0pLG59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIHMsbCxjPS0xLjEqZSxoPS0uMSplLHA9dC1oLGQ9clswXSxnPXJbMV0sdj1NYXRoLm1pbihmKGQraCxkK3AsbixhKSxmKGcraCxnK3AsbixhKSksbT1NYXRoLm1pbihmKGQrYyxkK2gsbixhKSxmKGcrYyxnK2gsbixhKSk7aWYodj5tJiZtPE1hdGguYWJzKGctZCkvNGUzPyhzPXYsbD0hMSk6KHM9TWF0aC5taW4odixtKSxsPSEwKSwiZGF0ZSI9PT1uLnR5cGUmJnM+byl7dmFyIHk9cz09PWk/MTo2LHg9cz09PWk/Ik0xMiI6Ik0xIjtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbz1uLmMyZChlLGksYSkscz1vLmluZGV4T2YoIi0iLHkpO3M+MCYmKG89by5zdWJzdHIoMCxzKSk7dmFyIGM9bi5kMmMobywwLGEpO2lmKGM8ZSl7dmFyIGY9dShjLHgsITEsYSk7KGMrZikvMjxlK3QmJihjPWYpfXJldHVybiByJiZsP3UoYyx4LCEwLGEpOmN9fXJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXMqTWF0aC5yb3VuZChlL3MpO3JldHVybiBuK3MvMTA8ZSYmbisuOSpzPGUrdCYmKG4rPXMpLHImJmwmJihuLT1zKSxufX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4fV0sOTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIikscz10KCIuL2Jpbl9mdW5jdGlvbnMiKSxsPXQoIi4vbm9ybV9mdW5jdGlvbnMiKSxjPXQoIi4vYXZlcmFnZSIpLHU9dCgiLi9iaW5fbGFiZWxfdmFscyIpO2Z1bmN0aW9uIGYodCxlLHIsbyxzKXt2YXIgbCxjLHUsaCxwLGQsZyx2PW8rImJpbnMiLG09dC5fZnVsbExheW91dCx5PSJvdmVybGF5Ij09PW0uYmFybW9kZSx4PSJkYXRlIj09PXIudHlwZT9mdW5jdGlvbih0KXtyZXR1cm4gdHx8MD09PXQ/aS5jbGVhbkRhdGUodCxudWxsLHIuY2FsZW5kYXIpOm51bGx9OmZ1bmN0aW9uKHQpe3JldHVybiBuKHQpP051bWJlcih0KTpudWxsfTtmdW5jdGlvbiBiKHQsZSxyKXtlW3QrIkZvdW5kIl0/KGVbdF09eChlW3RdKSxudWxsPT09ZVt0XSYmKGVbdF09clt0XSkpOihkW3RdPWVbdF09clt0XSxpLm5lc3RlZFByb3BlcnR5KGNbMF0sdisiLiIrdCkuc2V0KHJbdF0pKX12YXIgXz1tLl9oaXN0b2dyYW1CaW5PcHRzW2UuX2dyb3VwTmFtZV07aWYoZS5fYXV0b0JpbkZpbmlzaGVkKWRlbGV0ZSBlLl9hdXRvQmluRmluaXNoZWQ7ZWxzZXtjPV8udHJhY2VzO3ZhciB3PV8uc2l6ZUZvdW5kLGs9W107ZD1jWzBdLl9hdXRvQmluPXt9O3ZhciBUPSEwO2ZvcihsPTA7bDxjLmxlbmd0aDtsKyspKHU9Y1tsXSkudmlzaWJsZSYmKHA9dS5fcG9zMD1yLm1ha2VDYWxjZGF0YSh1LG8pLGs9aS5jb25jYXQoayxwKSxkZWxldGUgdS5fYXV0b0JpbkZpbmlzaGVkLCEwPT09ZS52aXNpYmxlJiYoVD9UPSExOihkZWxldGUgdS5fYXV0b0Jpbix1Ll9hdXRvQmluRmluaXNoZWQ9MSkpKTtoPWNbMF1bbysiY2FsZW5kYXIiXTt2YXIgQT1hLmF1dG9CaW4oayxyLF8ubmJpbnMsITEsaCx3JiZfLnNpemUpO2lmKHkmJjA9PT1BLl9kYXRhU3BhbiYmImNhdGVnb3J5IiE9PXIudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09ci50eXBlKXtpZihzKXJldHVybltBLHAsITBdO0E9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT1lLm9yaWVudGF0aW9uLGE9W10sbz10Ll9mdWxsRGF0YSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Imhpc3RvZ3JhbSI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLm9yaWVudGF0aW9uPT09aSYmbC54YXhpcz09PXImJmwueWF4aXM9PT1uJiZhLnB1c2gobCl9cmV0dXJuIGF9KHQsZSksYz0hMSx1PTEvMCxoPVtlXTtmb3Iobz0wO288bC5sZW5ndGg7bysrKWlmKChzPWxbb10pPT09ZSljPSEwO2Vsc2UgaWYoYyl7dmFyIHA9Zih0LHMscixuLCEwKSxkPXBbMF0sZz1wWzJdO3MuX2F1dG9CaW5GaW5pc2hlZD0xLHMuX3BvczA9cFsxXSxnP2gucHVzaChzKTp1PU1hdGgubWluKHUsZC5zaXplKX1lbHNlIHU9TWF0aC5taW4odSxzW2FdLnNpemUpO3ZhciB2PW5ldyBBcnJheShoLmxlbmd0aCk7Zm9yKG89MDtvPGgubGVuZ3RoO28rKylmb3IodmFyIG09aFtvXS5fcG9zMCx5PTA7eTxtLmxlbmd0aDt5KyspaWYodm9pZCAwIT09bVt5XSl7dltvXT1tW3ldO2JyZWFrfWlzRmluaXRlKHUpfHwodT1pLmRpc3RpbmN0VmFscyh2KS5taW5EaWZmKTtmb3Iobz0wO288aC5sZW5ndGg7bysrKXt2YXIgeD0ocz1oW29dKVtuKyJjYWxlbmRhciJdO3MuX2lucHV0W2FdPXNbYV09e3N0YXJ0OnIuYzJyKHZbb10tdS8yLDAseCksZW5kOnIuYzJyKHZbb10rdS8yLDAseCksc2l6ZTp1fX1yZXR1cm4gZVthXX0odCxlLHIsbyx2KX0oZz11LmN1bXVsYXRpdmUpLmVuYWJsZWQmJiJpbmNsdWRlIiE9PWcuY3VycmVudGJpbiYmKCJkZWNyZWFzaW5nIj09PWcuZGlyZWN0aW9uP0Euc3RhcnQ9ci5jMnIoYS50aWNrSW5jcmVtZW50KHIucjJjKEEuc3RhcnQsMCxoKSxBLnNpemUsITAsaCkpOkEuZW5kPXIuYzJyKGEudGlja0luY3JlbWVudChyLnIyYyhBLmVuZCwwLGgpLEEuc2l6ZSwhMSxoKSkpLF8uc2l6ZT1BLnNpemUsd3x8KGQuc2l6ZT1BLnNpemUsaS5uZXN0ZWRQcm9wZXJ0eShjWzBdLHYrIi5zaXplIikuc2V0KEEuc2l6ZSkpLGIoInN0YXJ0IixfLEEpLGIoImVuZCIsXyxBKX1wPWUuX3BvczAsZGVsZXRlIGUuX3BvczA7dmFyIE09ZS5faW5wdXRbdl18fHt9LFM9aS5leHRlbmRGbGF0KHt9LF8pLEU9Xy5zdGFydCxDPXIucjJsKE0uc3RhcnQpLEw9dm9pZCAwIT09QztpZigoXy5zdGFydEZvdW5kfHxMKSYmQyE9PXIucjJsKEUpKXt2YXIgej1MP0M6aS5hZ2dOdW1zKE1hdGgubWluLG51bGwscCksTz17dHlwZToiY2F0ZWdvcnkiPT09ci50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1yLnR5cGU/ImxpbmVhciI6ci50eXBlLHIybDpyLnIybCxkdGljazpfLnNpemUsdGljazA6RSxjYWxlbmRhcjpoLHJhbmdlOlt6LGEudGlja0luY3JlbWVudCh6LF8uc2l6ZSwhMSxoKV0ubWFwKHIubDJyKX0sST1hLnRpY2tGaXJzdChPKTtJPnIucjJsKHopJiYoST1hLnRpY2tJbmNyZW1lbnQoSSxfLnNpemUsITAsaCkpLFMuc3RhcnQ9ci5sMnIoSSksTHx8aS5uZXN0ZWRQcm9wZXJ0eShlLHYrIi5zdGFydCIpLnNldChTLnN0YXJ0KX12YXIgRD1fLmVuZCxQPXIucjJsKE0uZW5kKSxSPXZvaWQgMCE9PVA7aWYoKF8uZW5kRm91bmR8fFIpJiZQIT09ci5yMmwoRCkpe3ZhciBGPVI/UDppLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxwKTtTLmVuZD1yLmwycihGKSxSfHxpLm5lc3RlZFByb3BlcnR5KGUsdisiLnN0YXJ0Iikuc2V0KFMuZW5kKX12YXIgQj0iYXV0b2JpbiIrbztyZXR1cm4hMT09PWUuX2lucHV0W0JdJiYoZS5faW5wdXRbdl09aS5leHRlbmRGbGF0KHt9LGVbdl18fHt9KSxkZWxldGUgZS5faW5wdXRbQl0sZGVsZXRlIGVbQl0pLFtTLHBdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEwPT09ZS52aXNpYmxlKXt2YXIgcixoLHAsZCxnPVtdLHY9W10sbT1hLmdldEZyb21JZCh0LCJoIj09PWUub3JpZW50YXRpb24/ZS55YXhpc3x8InkiOmUueGF4aXN8fCJ4IikseT0iaCI9PT1lLm9yaWVudGF0aW9uPyJ5IjoieCIseD17eDoieSIseToieCJ9W3ldLGI9ZVt5KyJjYWxlbmRhciJdLF89ZS5jdW11bGF0aXZlLHc9Zih0LGUsbSx5KSxrPXdbMF0sVD13WzFdLEE9InN0cmluZyI9PXR5cGVvZiBrLnNpemUsTT1bXSxTPUE/TTprLEU9W10sQz1bXSxMPVtdLHo9MCxPPWUuaGlzdG5vcm0sST1lLmhpc3RmdW5jLEQ9LTEhPT1PLmluZGV4T2YoImRlbnNpdHkiKTtfLmVuYWJsZWQmJkQmJihPPU8ucmVwbGFjZSgvID9kZW5zaXR5JC8sIiIpLEQ9ITEpO3ZhciBQLFI9Im1heCI9PT1JfHwibWluIj09PUk/bnVsbDowLEY9cy5jb3VudCxCPWxbT10sTj0hMSxqPWZ1bmN0aW9uKHQpe3JldHVybiBtLnIyYyh0LDAsYil9O2ZvcihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZVt4XSkmJiJjb3VudCIhPT1JJiYoUD1lW3hdLE49ImF2ZyI9PT1JLEY9c1tJXSkscj1qKGsuc3RhcnQpLHA9aihrLmVuZCkrKHItYS50aWNrSW5jcmVtZW50KHIsay5zaXplLCExLGIpKS8xZTY7cjxwJiZnLmxlbmd0aDwxZTYmJihoPWEudGlja0luY3JlbWVudChyLGsuc2l6ZSwhMSxiKSxnLnB1c2goKHIraCkvMiksdi5wdXNoKFIpLEwucHVzaChbXSksTS5wdXNoKHIpLEQmJkUucHVzaCgxLyhoLXIpKSxOJiZDLnB1c2goMCksIShoPD1yKSk7KXI9aDtNLnB1c2gociksQXx8ImRhdGUiIT09bS50eXBlfHwoUz17c3RhcnQ6aihTLnN0YXJ0KSxlbmQ6aihTLmVuZCksc2l6ZTpTLnNpemV9KTt2YXIgVixVPXYubGVuZ3RoLHE9ITAsSD0xLzAsRz0xLzAsWT17fTtmb3Iocj0wO3I8VC5sZW5ndGg7cisrKXt2YXIgVz1UW3JdOyhkPWkuZmluZEJpbihXLFMpKT49MCYmZDxVJiYoeis9RihkLHIsdixQLEMpLHEmJkxbZF0ubGVuZ3RoJiZXIT09VFtMW2RdWzBdXSYmKHE9ITEpLExbZF0ucHVzaChyKSxZW3JdPWQsSD1NYXRoLm1pbihILFctTVtkXSksRz1NYXRoLm1pbihHLE1bZCsxXS1XKSl9cXx8KFY9dShILEcsTSxtLGIpKSxOJiYoej1jKHYsQykpLEImJkIodix6LEUpLF8uZW5hYmxlZCYmZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKGUpe2E9dFtlXSx0W2VdLz0yfWZ1bmN0aW9uIHMoZSl7aT10W2VdLHRbZV09YStpLzIsYSs9aX1pZigiaGFsZiI9PT1yKWlmKCJpbmNyZWFzaW5nIj09PWUpZm9yKG8oMCksbj0xO248dC5sZW5ndGg7bisrKXMobik7ZWxzZSBmb3Iobyh0Lmxlbmd0aC0xKSxuPXQubGVuZ3RoLTI7bj49MDtuLS0pcyhuKTtlbHNlIGlmKCJpbmNyZWFzaW5nIj09PWUpe2ZvcihuPTE7bjx0Lmxlbmd0aDtuKyspdFtuXSs9dFtuLTFdOyJleGNsdWRlIj09PXImJih0LnVuc2hpZnQoMCksdC5wb3AoKSl9ZWxzZXtmb3Iobj10Lmxlbmd0aC0yO24+PTA7bi0tKXRbbl0rPXRbbisxXTsiZXhjbHVkZSI9PT1yJiYodC5wdXNoKDApLHQuc2hpZnQoKSl9fSh2LF8uZGlyZWN0aW9uLF8uY3VycmVudGJpbik7dmFyIFg9TWF0aC5taW4oZy5sZW5ndGgsdi5sZW5ndGgpLFo9W10sJD0wLEo9WC0xO2ZvcihyPTA7cjxYO3IrKylpZih2W3JdKXskPXI7YnJlYWt9Zm9yKHI9WC0xO3I+PSQ7ci0tKWlmKHZbcl0pe0o9cjticmVha31mb3Iocj0kO3I8PUo7cisrKWlmKG4oZ1tyXSkmJm4odltyXSkpe3ZhciBLPXtwOmdbcl0sczp2W3JdLGI6MH07Xy5lbmFibGVkfHwoSy5wdHM9TFtyXSxxP0sucGgwPUsucGgxPUxbcl0ubGVuZ3RoP1RbTFtyXVswXV06Z1tyXTooSy5waDA9VihNW3JdKSxLLnBoMT1WKE1bcisxXSwhMCkpKSxaLnB1c2goSyl9cmV0dXJuIDE9PT1aLmxlbmd0aCYmKFpbMF0ud2lkdGgxPWEudGlja0luY3JlbWVudChaWzBdLnAsay5zaXplLCExLGIpLVpbMF0ucCksbyhaLGUpLGkuaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSYmaS50YWdTZWxlY3RlZChaLGUsWSksWn19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo4MzgsIi4vYXZlcmFnZSI6OTY3LCIuL2Jpbl9mdW5jdGlvbnMiOjk2OSwiLi9iaW5fbGFiZWxfdmFscyI6OTcwLCIuL25vcm1fZnVuY3Rpb25zIjo5NzgsImZhc3QtaXNudW1lcmljIjoyMjF9XSw5NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOlsiYmluTnVtYmVyIl19fSx7fV0sOTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9bi5uZXN0ZWRQcm9wZXJ0eSxhPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKS5nZXRBeGlzR3JvdXAscz10KCIuL2F0dHJpYnV0ZXMiKSxsPXt4Olt7YVN0cjoieGJpbnMuc3RhcnQiLG5hbWU6InN0YXJ0In0se2FTdHI6InhiaW5zLmVuZCIsbmFtZToiZW5kIn0se2FTdHI6InhiaW5zLnNpemUiLG5hbWU6InNpemUifSx7YVN0cjoibmJpbnN4IixuYW1lOiJuYmlucyJ9XSx5Olt7YVN0cjoieWJpbnMuc3RhcnQiLG5hbWU6InN0YXJ0In0se2FTdHI6InliaW5zLmVuZCIsbmFtZToiZW5kIn0se2FTdHI6InliaW5zLnNpemUiLG5hbWU6InNpemUifSx7YVN0cjoibmJpbnN5IixuYW1lOiJuYmlucyJ9XX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1LGYsaCxwLGQsZz1lLl9oaXN0b2dyYW1CaW5PcHRzPXt9LHY9Im92ZXJsYXkiPT09ZS5iYXJtb2RlO2Z1bmN0aW9uIG0odCl7cmV0dXJuIG4uY29lcmNlKHUuX2lucHV0LHUscyx0KX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKSJoaXN0b2dyYW0iPT09KHU9dFtyXSkudHlwZSYmKGRlbGV0ZSB1Ll9hdXRvQmluRmluaXNoZWQsaD0idiI9PT11Lm9yaWVudGF0aW9uPyJ4IjoieSIsKGQ9Z1twPXUuX2dyb3VwTmFtZT12P3UudWlkOm8oZSx1LnhheGlzKStvKGUsdS55YXhpcykraF0pP2QudHJhY2VzLnB1c2godSk6ZD1nW3BdPXt0cmFjZXM6W3VdLGRpcmVjdGlvbjpofSxhKHUuX2lucHV0LHUsZSxtKSk7Zm9yKHAgaW4gZyl7aD0oZD1nW3BdKS5kaXJlY3Rpb247dmFyIHk9bFtoXTtmb3IoYz0wO2M8eS5sZW5ndGg7YysrKXt2YXIgeD15W2NdLGI9eC5uYW1lO2lmKCJuYmlucyIhPT1ifHwhZC5zaXplRm91bmQpe3ZhciBfPXguYVN0cjtmb3Iocj0wO3I8ZC50cmFjZXMubGVuZ3RoO3IrKyl7aWYoZj0odT1kLnRyYWNlc1tyXSkuX2lucHV0LHZvaWQgMCE9PWkoZixfKS5nZXQoKSl7ZFtiXT1tKF8pLGRbYisiRm91bmQiXT0hMDticmVha312YXIgdz11Ll9hdXRvQmluO3cmJndbYl0mJmkodSxfKS5zZXQod1tiXSl9aWYoInN0YXJ0Ij09PWJ8fCJlbmQiPT09Yilmb3IoO3I8ZC50cmFjZXMubGVuZ3RoO3IrKyltKF8sKCh1PWQudHJhY2VzW3JdKS5fYXV0b0Jpbnx8e30pW2JdKTsibmJpbnMiIT09Ynx8ZC5zaXplRm91bmR8fGQubmJpbnNGb3VuZHx8KHU9ZC50cmFjZXNbMF0sZFtiXT1tKF8pKX19fX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzUxLCIuLi9iYXIvZGVmYXVsdHMiOjg0MywiLi9hdHRyaWJ1dGVzIjo5NjZ9XSw5NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUscyxyLG4pfXZhciB1PWMoIngiKSxmPWMoInkiKTtjKCJjdW11bGF0aXZlLmVuYWJsZWQiKSYmKGMoImN1bXVsYXRpdmUuZGlyZWN0aW9uIiksYygiY3VtdWxhdGl2ZS5jdXJyZW50YmluIikpLGMoInRleHQiKSxjKCJob3ZlcnRleHQiKSxjKCJob3ZlcnRlbXBsYXRlIik7dmFyIGg9Yygib3JpZW50YXRpb24iLGYmJiF1PyJoIjoidiIpLHA9InYiPT09aD8ieCI6InkiLGQ9InYiPT09aD8ieSI6IngiLGc9dSYmZj9NYXRoLm1pbihpLm1pblJvd0xlbmd0aCh1KSYmaS5taW5Sb3dMZW5ndGgoZikpOmkubWluUm93TGVuZ3RoKGVbcF18fFtdKTtpZihnKXtlLl9sZW5ndGg9ZyxuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0sbCksZVtkXSYmYygiaGlzdGZ1bmMiKSxjKCJoaXN0bm9ybSIpLGMoImF1dG9iaW4iK3ApLG8odCxlLGMscixsKSxpLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxjKTt2YXIgdj0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yLG09bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN1cHBseURlZmF1bHRzIik7bSh0LGUsdnx8YS5kZWZhdWx0TGluZSx7YXhpczoieSJ9KSxtKHQsZSx2fHxhLmRlZmF1bHRMaW5lLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiOjg1MywiLi9hdHRyaWJ1dGVzIjo5NjZ9XSw5NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodC54PSJ4VmFsImluIGU/ZS54VmFsOmUueCx0Lnk9InlWYWwiaW4gZT9lLnlWYWw6ZS55LCJ6TGFiZWxWYWwiaW4gZSYmKHQuej1lLnpMYWJlbFZhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksIShyLmN1bXVsYXRpdmV8fHt9KS5lbmFibGVkKXt2YXIgYSxvPUFycmF5LmlzQXJyYXkoaSk/blswXS5wdHNbaVswXV1baVsxXV06bltpXS5wdHM7aWYodC5wb2ludE51bWJlcnM9byx0LmJpbk51bWJlcj10LnBvaW50TnVtYmVyLGRlbGV0ZSB0LnBvaW50TnVtYmVyLGRlbGV0ZSB0LnBvaW50SW5kZXgsci5faW5kZXhUb1BvaW50cyl7YT1bXTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKylhPWEuY29uY2F0KHIuX2luZGV4VG9Qb2ludHNbb1tzXV0pfWVsc2UgYT1vO3QucG9pbnRJbmRpY2VzPWF9cmV0dXJuIHR9fSx7fV0sOTc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9ob3ZlciIpLmhvdmVyUG9pbnRzLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvKXt2YXIgcz0odD1vWzBdKS5jZFt0LmluZGV4XSxsPXQuY2RbMF0udHJhY2U7aWYoIWwuY3VtdWxhdGl2ZS5lbmFibGVkKXt2YXIgYz0iaCI9PT1sLm9yaWVudGF0aW9uPyJ5IjoieCI7dFtjKyJMYWJlbCJdPWkodFtjKyJhIl0scy5waDAscy5waDEpfXJldHVybiBsLmhvdmVybXBsYXRlJiYodC5ob3ZlcnRlbXBsYXRlPWwuaG92ZXJ0ZW1wbGF0ZSksb319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL2Jhci9ob3ZlciI6ODQ1fV0sOTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLmxheW91dEF0dHJpYnV0ZXM9dCgiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jcm9zc1RyYWNlRGVmYXVsdHM9dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi4vYmFyL2xheW91dF9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmNyb3NzVHJhY2VDYWxjPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsbi5wbG90PXQoIi4uL2Jhci9wbG90Iiksbi5sYXllck5hbWU9ImJhcmxheWVyIixuLnN0eWxlPXQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KCIuLi9iYXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuLi9iYXIvc2VsZWN0Iiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoaXN0b2dyYW0iLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwiYmFyIiwiaGlzdG9ncmFtIiwib3JpZW50ZWQiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIjo4NDIsIi4uL2Jhci9sYXlvdXRfYXR0cmlidXRlcyI6ODQ3LCIuLi9iYXIvbGF5b3V0X2RlZmF1bHRzIjo4NDgsIi4uL2Jhci9wbG90Ijo4NDksIi4uL2Jhci9zZWxlY3QiOjg1MCwiLi4vYmFyL3N0eWxlIjo4NTIsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuL2F0dHJpYnV0ZXMiOjk2NiwiLi9jYWxjIjo5NzEsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjk3MywiLi9kZWZhdWx0cyI6OTc0LCIuL2V2ZW50X2RhdGEiOjk3NSwiLi9ob3ZlciI6OTc2fV0sOTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17cGVyY2VudDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTEwMC9lLGk9MDtpPHI7aSsrKXRbaV0qPW59LHByb2JhYmlsaXR5OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MDtuPHI7bisrKXRbbl0vPWV9LGRlbnNpdHk6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7bj1ufHwxO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXSpufSwicHJvYmFiaWxpdHkgZGVuc2l0eSI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7biYmKGUvPW4pO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXS9lfX19LHt9XSw5Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlcyIpLGE9dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWMoe3g6bi54LHk6bi55LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOntjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGhpc3Rub3JtOm4uaGlzdG5vcm0saGlzdGZ1bmM6bi5oaXN0ZnVuYyxuYmluc3g6bi5uYmluc3gseGJpbnM6aSgieCIpLG5iaW5zeTpuLm5iaW5zeSx5YmluczppKCJ5IiksYXV0b2Jpbng6bi5hdXRvYmlueCxhdXRvYmlueTpuLmF1dG9iaW55LHhnYXA6YS54Z2FwLHlnYXA6YS55Z2FwLHpzbW9vdGg6YS56c21vb3RoLHpob3ZlcmZvcm1hdDphLnpob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOm8oe30se2tleXM6InoifSl9LHMoIiIse2NMZXR0ZXI6InoiLGF1dG9Db2xvckRmbHQ6ITF9KSx7Y29sb3JiYXI6bH0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6OTQ4LCIuLi9oaXN0b2dyYW0vYXR0cmlidXRlcyI6OTY2LCIuLi9oaXN0b2dyYW0vYmluX2F0dHJpYnV0ZXMiOjk2OH1dLDk4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9ucyIpLG89dCgiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIikscz10KCIuLi9oaXN0b2dyYW0vYXZlcmFnZSIpLGw9dCgiLi4vaGlzdG9ncmFtL2Jpbl9sYWJlbF92YWxzIik7ZnVuY3Rpb24gYyh0LGUscixhLG8scyxsKXt2YXIgYz1lKyJiaW5zIix1PXRbY107dXx8KHU9dFtjXT17fSk7dmFyIGY9dC5faW5wdXRbY118fHt9LGg9dC5fYXV0b0Jpbj17fTtmLnNpemV8fGRlbGV0ZSB1LnNpemUsdm9pZCAwPT09Zi5zdGFydCYmZGVsZXRlIHUuc3RhcnQsdm9pZCAwPT09Zi5lbmQmJmRlbGV0ZSB1LmVuZDt2YXIgcD0hdS5zaXplLGQ9dm9pZCAwPT09dS5zdGFydCxnPXZvaWQgMD09PXUuZW5kO2lmKHB8fGR8fGcpe3ZhciB2PWkuYXV0b0JpbihyLGEsdFsibmJpbnMiK2VdLCIyZCIsbCx1LnNpemUpOyJoaXN0b2dyYW0yZGNvbnRvdXIiPT09dC50eXBlJiYoZCYmKHYuc3RhcnQ9cyhpLnRpY2tJbmNyZW1lbnQobyh2LnN0YXJ0KSx2LnNpemUsITAsbCkpKSxnJiYodi5lbmQ9cyhpLnRpY2tJbmNyZW1lbnQobyh2LmVuZCksdi5zaXplLCExLGwpKSkpLHAmJih1LnNpemU9aC5zaXplPXYuc2l6ZSksZCYmKHUuc3RhcnQ9aC5zdGFydD12LnN0YXJ0KSxnJiYodS5lbmQ9aC5lbmQ9di5lbmQpfXZhciBtPSJhdXRvYmluIitlOyExPT09dC5faW5wdXRbbV0mJih0Ll9pbnB1dFtjXT1uLmV4dGVuZEZsYXQoe30sdSksZGVsZXRlIHQuX2lucHV0W21dLGRlbGV0ZSB0W21dKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KHQpO2lmKG4pZm9yKGk9MDtpPHQ7aSsrKWFbaV09MS8oZVtpKzFdLWVbaV0pO2Vsc2V7dmFyIG89MS9yO2ZvcihpPTA7aTx0O2krKylhW2ldPW99cmV0dXJuIGF9ZnVuY3Rpb24gZih0LGUpe3JldHVybntzdGFydDp0KGUuc3RhcnQpLGVuZDp0KGUuZW5kKSxzaXplOmUuc2l6ZX19ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIG8scz10Lmxlbmd0aC0xLGM9bmV3IEFycmF5KHMpO2lmKGUpZm9yKG89MDtvPHM7bysrKWNbb109W2Vbb10sZVtvXV07ZWxzZXt2YXIgdT1sKHIsbix0LGksYSk7Zm9yKG89MDtvPHM7bysrKWNbb109W3UodFtvXSksdSh0W28rMV0sITApXX1yZXR1cm4gY31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLHAsZCxnPWkuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSx2PWUueD9nLm1ha2VDYWxjZGF0YShlLCJ4Iik6W10sbT1pLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IikseT1lLnk/bS5tYWtlQ2FsY2RhdGEoZSwieSIpOltdLHg9ZS54Y2FsZW5kYXIsYj1lLnljYWxlbmRhcixfPWZ1bmN0aW9uKHQpe3JldHVybiBnLnIyYyh0LDAseCl9LHc9ZnVuY3Rpb24odCl7cmV0dXJuIG0ucjJjKHQsMCxiKX0saz1mdW5jdGlvbih0KXtyZXR1cm4gZy5jMnIodCwwLHgpfSxUPWZ1bmN0aW9uKHQpe3JldHVybiBtLmMycih0LDAsYil9LEE9ZS5fbGVuZ3RoO3YubGVuZ3RoPkEmJnYuc3BsaWNlKEEsdi5sZW5ndGgtQSkseS5sZW5ndGg+QSYmeS5zcGxpY2UoQSx5Lmxlbmd0aC1BKSxjKGUsIngiLHYsZyxfLGsseCksYyhlLCJ5Iix5LG0sdyxULGIpO3ZhciBNPVtdLFM9W10sRT1bXSxDPSJzdHJpbmciPT10eXBlb2YgZS54Ymlucy5zaXplLEw9InN0cmluZyI9PXR5cGVvZiBlLnliaW5zLnNpemUsej1bXSxPPVtdLEk9Qz96OmUueGJpbnMsRD1MP086ZS55YmlucyxQPTAsUj1bXSxGPVtdLEI9ZS5oaXN0bm9ybSxOPWUuaGlzdGZ1bmMsaj0tMSE9PUIuaW5kZXhPZigiZGVuc2l0eSIpLFY9Im1heCI9PT1OfHwibWluIj09PU4/bnVsbDowLFU9YS5jb3VudCxxPW9bQl0sSD0hMSxHPVtdLFk9W10sVz0ieiJpbiBlP2UuejoibWFya2VyImluIGUmJkFycmF5LmlzQXJyYXkoZS5tYXJrZXIuY29sb3IpP2UubWFya2VyLmNvbG9yOiIiO1cmJiJjb3VudCIhPT1OJiYoSD0iYXZnIj09PU4sVT1hW05dKTt2YXIgWD1lLnhiaW5zLFo9XyhYLnN0YXJ0KSwkPV8oWC5lbmQpKyhaLWkudGlja0luY3JlbWVudChaLFguc2l6ZSwhMSx4KSkvMWU2O2ZvcihyPVo7cjwkO3I9aS50aWNrSW5jcmVtZW50KHIsWC5zaXplLCExLHgpKVMucHVzaChWKSx6LnB1c2gociksSCYmRS5wdXNoKDApO3oucHVzaChyKTt2YXIgSj1TLmxlbmd0aCxLPV8oZS54Ymlucy5zdGFydCksUT0oci1LKS9KLHR0PWsoSytRLzIpO2ZvcihaPXcoKFg9ZS55Ymlucykuc3RhcnQpLCQ9dyhYLmVuZCkrKFotaS50aWNrSW5jcmVtZW50KFosWC5zaXplLCExLGIpKS8xZTYscj1aO3I8JDtyPWkudGlja0luY3JlbWVudChyLFguc2l6ZSwhMSxiKSl7TS5wdXNoKFMuc2xpY2UoKSksTy5wdXNoKHIpO3ZhciBldD1uZXcgQXJyYXkoSik7Zm9yKGw9MDtsPEo7bCsrKWV0W2xdPVtdO0YucHVzaChldCksSCYmUi5wdXNoKEUuc2xpY2UoKSl9Ty5wdXNoKHIpO3ZhciBydD1NLmxlbmd0aCxudD13KGUueWJpbnMuc3RhcnQpLGl0PShyLW50KS9ydCxhdD1UKG50K2l0LzIpO2omJihHPXUoUy5sZW5ndGgsSSxRLEMpLFk9dShNLmxlbmd0aCxELGl0LEwpKSxDfHwiZGF0ZSIhPT1nLnR5cGV8fChJPWYoXyxJKSksTHx8ImRhdGUiIT09bS50eXBlfHwoRD1mKHcsRCkpO3ZhciBvdD0hMCxzdD0hMCxsdD1uZXcgQXJyYXkoSiksY3Q9bmV3IEFycmF5KHJ0KSx1dD0xLzAsZnQ9MS8wLGh0PTEvMCxwdD0xLzA7Zm9yKHI9MDtyPEE7cisrKXt2YXIgZHQ9dltyXSxndD15W3JdO3A9bi5maW5kQmluKGR0LEkpLGQ9bi5maW5kQmluKGd0LEQpLHA+PTAmJnA8SiYmZD49MCYmZDxydCYmKFArPVUocCxyLE1bZF0sVyxSW2RdKSxGW2RdW3BdLnB1c2gociksb3QmJih2b2lkIDA9PT1sdFtwXT9sdFtwXT1kdDpsdFtwXSE9PWR0JiYob3Q9ITEpKSxzdCYmKHZvaWQgMD09PWN0W3BdP2N0W3BdPWd0OmN0W3BdIT09Z3QmJihzdD0hMSkpLHV0PU1hdGgubWluKHV0LGR0LXpbcF0pLGZ0PU1hdGgubWluKGZ0LHpbcCsxXS1kdCksaHQ9TWF0aC5taW4oaHQsZ3QtT1tkXSkscHQ9TWF0aC5taW4ocHQsT1tkKzFdLWd0KSl9aWYoSClmb3IoZD0wO2Q8cnQ7ZCsrKVArPXMoTVtkXSxSW2RdKTtpZihxKWZvcihkPTA7ZDxydDtkKyspcShNW2RdLFAsRyxZW2RdKTtyZXR1cm57eDp2LHhSYW5nZXM6aCh6LG90JiZsdCx1dCxmdCxnLHgpLHgwOnR0LGR4OlEseTp5LHlSYW5nZXM6aChPLHN0JiZjdCxodCxwdCxtLGIpLHkwOmF0LGR5Oml0LHo6TSxwdHM6Rn19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9oaXN0b2dyYW0vYXZlcmFnZSI6OTY3LCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9ucyI6OTY5LCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHMiOjk3MCwiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIjo5Nzh9XSw5ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD1bIngiLCJ5Il07ZnVuY3Rpb24gYyh0LGUscixzKXt2YXIgbD1yW2EuaWQybmFtZSh0W2UrImF4aXMiXSldLnR5cGUsYz1lKyJiaW5zIix1PXRbY10sZj10W2UrImNhbGVuZGFyIl07dXx8KHU9dFtjXT17fSk7dmFyIGg9ImRhdGUiPT09bD9mdW5jdGlvbih0LGUpe3JldHVybiB0fHwwPT09dD9vLmNsZWFuRGF0ZSh0LGksZik6ZX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KT9OdW1iZXIodCk6ZX07dS5zdGFydD1oKHUuc3RhcnQscy5zdGFydCksdS5lbmQ9aCh1LmVuZCxzLmVuZCk7dmFyIHA9cy5zaXplLGQ9dS5zaXplO2lmKG4oZCkpdS5zaXplPWQ+MD9OdW1iZXIoZCk6cDtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZCl1LnNpemU9cDtlbHNle3ZhciBnPWQuY2hhckF0KDApLHY9ZC5zdWJzdHIoMSk7KCh2PW4odik/TnVtYmVyKHYpOjApPD0wfHwiZGF0ZSIhPT1sfHwiTSIhPT1nfHx2IT09TWF0aC5yb3VuZCh2KSkmJih1LnNpemU9cCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhO2Z1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29lcmNlKGkuX2lucHV0LGkscyx0KX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgZj0oaT10W3JdKS50eXBlO2lmKCJoaXN0b2dyYW0yZCI9PT1mfHwiaGlzdG9ncmFtMmRjb250b3VyIj09PWYpZm9yKG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGg9KGE9bFtuXSkrImJpbnMiLHA9KGkuX2F1dG9CaW58fHt9KVthXXx8e307dShoKyIuc3RhcnQiLHAuc3RhcnQpLHUoaCsiLmVuZCIscC5lbmQpLHUoaCsiLnNpemUiLHAuc2l6ZSksYyhpLGEsZSxwKSwoaVtoXXx8e30pLnNpemV8fHUoIm5iaW5zIithKX19fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi9hdHRyaWJ1dGVzIjo5NzksImZhc3QtaXNudW1lcmljIjoyMjF9XSw5ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWkodCxlLGMsbCksITEhPT1lLnZpc2libGUmJihhKHQsZSxjLGwpLG8odCxlLGwsYyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSksYygiaG92ZXJ0ZW1wbGF0ZSIpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo1ODcsIi4uLy4uL2xpYiI6NzAwLCIuLi9oZWF0bWFwL3N0eWxlX2RlZmF1bHRzIjo5NjEsIi4vYXR0cmlidXRlcyI6OTc5LCIuL3NhbXBsZV9kZWZhdWx0cyI6OTg1fV0sOTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvaG92ZXIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD1uKHQsZSxyLGEsbyxzKTtpZihsKXt2YXIgYz0odD1sWzBdKS5pbmRleCx1PWNbMF0sZj1jWzFdLGg9dC5jZFswXSxwPWgueFJhbmdlc1tmXSxkPWgueVJhbmdlc1t1XTtyZXR1cm4gdC54TGFiZWw9aSh0LnhhLHBbMF0scFsxXSksdC55TGFiZWw9aSh0LnlhLGRbMF0sZFsxXSksbH19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL2hlYXRtYXAvaG92ZXIiOjk1NX1dLDk4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jcm9zc1RyYWNlRGVmYXVsdHM9dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLG4uY2FsYz10KCIuLi9oZWF0bWFwL2NhbGMiKSxuLnBsb3Q9dCgiLi4vaGVhdG1hcC9wbG90Iiksbi5sYXllck5hbWU9ImhlYXRtYXBsYXllciIsbi5jb2xvcmJhcj10KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksbi5zdHlsZT10KCIuLi9oZWF0bWFwL3N0eWxlIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGEiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9Imhpc3RvZ3JhbTJkIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwiaGlzdG9ncmFtIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuLi9oZWF0bWFwL2NhbGMiOjk0OSwiLi4vaGVhdG1hcC9jb2xvcmJhciI6OTUxLCIuLi9oZWF0bWFwL3Bsb3QiOjk1OSwiLi4vaGVhdG1hcC9zdHlsZSI6OTYwLCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YSI6OTc1LCIuL2F0dHJpYnV0ZXMiOjk3OSwiLi9jcm9zc190cmFjZV9kZWZhdWx0cyI6OTgxLCIuL2RlZmF1bHRzIjo5ODIsIi4vaG92ZXIiOjk4M31dLDk4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoIngiKSxzPXIoInkiKSxsPWkubWluUm93TGVuZ3RoKG8pLGM9aS5taW5Sb3dMZW5ndGgocyk7bCYmYz8oZS5fbGVuZ3RoPU1hdGgubWluKGwsYyksbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpLChyKCJ6Iil8fHIoIm1hcmtlci5jb2xvciIpKSYmcigiaGlzdGZ1bmMiKSxyKCJoaXN0bm9ybSIpLHIoImF1dG9iaW54IikscigiYXV0b2JpbnkiKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOX1dLDk4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt4Om4ueCx5Om4ueSx6Om4ueixtYXJrZXI6bi5tYXJrZXIsaGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLG5iaW5zeDpuLm5iaW5zeCx4YmluczpuLnhiaW5zLG5iaW5zeTpuLm5iaW5zeSx5YmluczpuLnliaW5zLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSxhdXRvY29udG91cjppLmF1dG9jb250b3VyLG5jb250b3VyczppLm5jb250b3Vycyxjb250b3VyczppLmNvbnRvdXJzLGxpbmU6aS5saW5lLHpob3ZlcmZvcm1hdDpuLnpob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZX0sYSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7Y29sb3JiYXI6b30pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2NvbnRvdXIvYXR0cmlidXRlcyI6OTE5LCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIjo5Nzl9XSw5ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oaXN0b2dyYW0yZC9zYW1wbGVfZGVmYXVsdHMiKSxhPXQoIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHMiKSxvPXQoIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKSwhMSE9PWUudmlzaWJsZSYmKGEodCxlLGMsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUscyxyKX0pLG8odCxlLGMsbCksYygiaG92ZXJ0ZW1wbGF0ZSIpKX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHMiOjkyNiwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyI6OTQwLCIuLi9oaXN0b2dyYW0yZC9zYW1wbGVfZGVmYXVsdHMiOjk4NSwiLi9hdHRyaWJ1dGVzIjo5ODZ9XSw5ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoIi4uL2hpc3RvZ3JhbTJkL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksbi5jYWxjPXQoIi4uL2NvbnRvdXIvY2FsYyIpLG4ucGxvdD10KCIuLi9jb250b3VyL3Bsb3QiKS5wbG90LG4ubGF5ZXJOYW1lPSJjb250b3VybGF5ZXIiLG4uc3R5bGU9dCgiLi4vY29udG91ci9zdHlsZSIpLG4uY29sb3JiYXI9dCgiLi4vY29udG91ci9jb2xvcmJhciIpLG4uaG92ZXJQb2ludHM9dCgiLi4vY29udG91ci9ob3ZlciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iaGlzdG9ncmFtMmRjb250b3VyIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwiY29udG91ciIsImhpc3RvZ3JhbSIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4uL2NvbnRvdXIvY2FsYyI6OTIwLCIuLi9jb250b3VyL2NvbG9yYmFyIjo5MjIsIi4uL2NvbnRvdXIvaG92ZXIiOjkzMiwiLi4vY29udG91ci9wbG90Ijo5MzcsIi4uL2NvbnRvdXIvc3R5bGUiOjkzOSwiLi4vaGlzdG9ncmFtMmQvY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjk4MSwiLi9hdHRyaWJ1dGVzIjo5ODYsIi4vZGVmYXVsdHMiOjk4N31dLDk4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLG89dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO3ZhciB1PWUuZXhwb3J0cz1jKGwoe3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHZhbHVlOnt2YWxUeXBlOiJkYXRhX2FycmF5In0saXNvbWluOnt2YWxUeXBlOiJudW1iZXIifSxpc29tYXg6e3ZhbFR5cGU6Im51bWJlciJ9LHN1cmZhY2U6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGNvdW50Ont2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjIsbWluOjF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxwYXR0ZXJuOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJBIiwiQiIsIkMiLCJEIiwiRSJdLGV4dHJhczpbImFsbCIsIm9kZCIsImV2ZW4iXSxkZmx0OiJhbGwifX0sc3BhY2VmcmFtZTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4xNX19LHNsaWNlczp7eDp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx6OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX19LGNhcHM6e3g6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0seTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx6OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19fSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMH0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMH0saG92ZXJ0ZW1wbGF0ZTphKCl9LG4oIiIse2NvbG9yQXR0cjoiYHZhbHVlYCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjppLG9wYWNpdHk6by5vcGFjaXR5LGxpZ2h0cG9zaXRpb246by5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOm8ubGlnaHRpbmcsZmxhdHNoYWRpbmc6by5mbGF0c2hhZGluZyxjb250b3VyOm8uY29udG91cixob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyl9KSwiY2FsYyIsIm5lc3RlZCIpO3UuZmxhdHNoYWRpbmcuZGZsdD0hMCx1LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbi5kZmx0PTAsdS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9dS52YWx1ZS5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsdS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiOjk5NH1dLDk5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuX2xlbj1NYXRoLm1pbihlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCxlLnZhbHVlLmxlbmd0aCk7Zm9yKHZhciByPTEvMCxpPS0xLzAsYT1lLnZhbHVlLmxlbmd0aCxvPTA7bzxhO28rKyl7dmFyIHM9ZS52YWx1ZVtvXTtyPU1hdGgubWluKHIscyksaT1NYXRoLm1heChpLHMpfWUuX21pblZhbHVlcz1yLGUuX21heFZhbHVlcz1pLGUuX3ZNaW49dm9pZCAwPT09ZS5pc29taW58fG51bGw9PT1lLmlzb21pbj9yOmUuaXNvbWluLGUuX3ZNYXg9dm9pZCAwPT09ZS5pc29tYXh8fG51bGw9PT1lLmlzb21pbj9pOmUuaXNvbWF4LG4odCxlLHt2YWxzOltlLl92TWluLGUuX3ZNYXhdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1fV0sOTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLW1lc2gzZCIpLGk9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxhPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxvPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLHM9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcy5kaXN0aW5jdFZhbHModCkudmFsc31mdW5jdGlvbiBjKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLTE7cj4wO3ItLSl7dmFyIG49TWF0aC5taW4oZVtyXSxlW3ItMV0pLGk9TWF0aC5tYXgoZVtyXSxlW3ItMV0pO2lmKGk+biYmbjx0JiZ0PD1pKXJldHVybntpZDpyLGRpc3RSYXRpbzooaS10KS8oaS1uKX19cmV0dXJue2lkOjAsZGlzdFJhdGlvOjB9fXUuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLl94W2VdLG49dGhpcy5kYXRhLl95W2VdLGk9dGhpcy5kYXRhLl96W2VdLGE9dGhpcy5kYXRhLl9Zcy5sZW5ndGgsbz10aGlzLmRhdGEuX1pzLmxlbmd0aCxzPWYocix0aGlzLmRhdGEuX1hzKS5pZCxsPWYobix0aGlzLmRhdGEuX1lzKS5pZCxjPWYoaSx0aGlzLmRhdGEuX1pzKS5pZCx1PXQuaW5kZXg9YytvKmwrbyphKnM7dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS5feFt1XSx0aGlzLmRhdGEuX3lbdV0sdGhpcy5kYXRhLl96W3VdLHRoaXMuZGF0YS52YWx1ZVt1XV07dmFyIGg9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkoaCkmJnZvaWQgMCE9PWhbdV0/dC50ZXh0TGFiZWw9aFt1XTpoJiYodC50ZXh0TGFiZWw9aCksITB9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7ZnVuY3Rpb24gbih0LGUscixuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSl9dGhpcy5kYXRhPWZ1bmN0aW9uKHQpe3QuX2k9W10sdC5faj1bXSx0Ll9rPVtdO3ZhciBlLHIsbj10LnN1cmZhY2Uuc2hvdyxpPXQuc3BhY2VmcmFtZS5zaG93LGE9dC5zdXJmYWNlLmZpbGwsbz10LnNwYWNlZnJhbWUuZmlsbCxzPSExLGM9ITEsdT0wLGg9bCh0Lnguc2xpY2UoMCx0Ll9sZW4pKSxwPWwodC55LnNsaWNlKDAsdC5fbGVuKSksZD1sKHQuei5zbGljZSgwLHQuX2xlbikpLGc9aC5sZW5ndGgsdj1wLmxlbmd0aCxtPWQubGVuZ3RoO2Z1bmN0aW9uIHkodCxlLHIpe3JldHVybiByK20qZSttKnYqdH12YXIgeCxiLF8sdyxrLFQ9dC5fbWluVmFsdWVzLEE9dC5fbWF4VmFsdWVzLE09dC5fdk1pbixTPXQuX3ZNYXg7ZnVuY3Rpb24gRSh0LGUsbil7Zm9yKHZhciBpPXcubGVuZ3RoLGE9cjthPGk7YSsrKWlmKHQ9PT14W2FdJiZlPT09YlthXSYmbj09PV9bYV0pcmV0dXJuIGE7cmV0dXJuLTF9ZnVuY3Rpb24gQygpe3I9ZX1mdW5jdGlvbiBMKCl7eD1bXSxiPVtdLF89W10sdz1bXSxlPTAsQygpfWZ1bmN0aW9uIHoodCxyLG4saSl7cmV0dXJuIHgucHVzaCh0KSxiLnB1c2gociksXy5wdXNoKG4pLHcucHVzaChpKSwrK2UtMX1mdW5jdGlvbiBPKGUscixuKXtyZXR1cm4gdC5faS5wdXNoKGUpLHQuX2oucHVzaChyKSx0Ll9rLnB1c2gobiksKyt1LTF9ZnVuY3Rpb24gSSh0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyluW2ldPXRbaV0qKDEtcikrciplW2ldO3JldHVybiBufWZ1bmN0aW9uIEQodCl7az10fWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4iYWxsIj09PXR8fG51bGw9PT10fHx0LmluZGV4T2YoZSk+LTF9ZnVuY3Rpb24gUih0LGUpe3JldHVybiBudWxsPT09dD9lOnR9ZnVuY3Rpb24gRih0LGUscil7QygpO3ZhciBuPVtlXSxpPVtyXTtpZihrPj0xKW49W2VdLGk9W3JdO2Vsc2UgaWYoaz4wKXt2YXIgYT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKW5baV09KHRbaV0rZVtpXStyW2ldKS8zO3JldHVybiBufShyLG4saSksbz1NYXRoLnNxcnQoMS1rKSxzPUkoYSxyLG8pLGw9SShhLG4sbyksYz1JKGEsaSxvKSx1PWVbMF0sZj1lWzFdLGg9ZVsyXTtyZXR1cm57eHl6djpbW3IsbixsXSxbbCxzLHJdLFtuLGksY10sW2MsbCxuXSxbaSxyLHNdLFtzLGMsaV1dLGFiYzpbW3UsZiwtMV0sWy0xLC0xLHVdLFtmLGgsLTFdLFstMSwtMSxmXSxbaCx1LC0xXSxbLTEsLTEsaF1dfX0oZSxyKTtuPWEueHl6dixpPWEuYWJjfWZvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXtlPW5bb10scj1pW29dO2Zvcih2YXIgcz1bXSxsPTA7bDwzO2wrKyl7dmFyIGM9ZVtsXVswXSx1PWVbbF1bMV0sZj1lW2xdWzJdLGg9ZVtsXVszXSxwPXJbbF0+LTE/cltsXTpFKGMsdSxmKTtzW2xdPXA+LTE/cDp6KGMsdSxmLFIodCxoKSl9TyhzWzBdLHNbMV0sc1syXSl9fWZ1bmN0aW9uIEIodCxlLHIsbil7dmFyIGk9dFszXTtpPHImJihpPXIpLGk+biYmKGk9bik7Zm9yKHZhciBhPSh0WzNdLWkpLyh0WzNdLWVbM10rMWUtOSksbz1bXSxzPTA7czw0O3MrKylvW3NdPSgxLWEpKnRbc10rYSplW3NdO3JldHVybiBvfWZ1bmN0aW9uIE4odCxlLHIpe3JldHVybiB0Pj1lJiZ0PD1yfWZ1bmN0aW9uIGoodCl7dmFyIGU9LjAwMSooUy1NKTtyZXR1cm4gdD49TS1lJiZ0PD1TK2V9ZnVuY3Rpb24gVihlKXtmb3IodmFyIHI9W10sbj0wO248NDtuKyspe3ZhciBpPWVbbl07ci5wdXNoKFt0LnhbaV0sdC55W2ldLHQueltpXSx0LnZhbHVlW2ldXSl9cmV0dXJuIHJ9dmFyIFU9MztmdW5jdGlvbiBxKHQsZSxyLG4saSxhKXthfHwoYT0xKSxyPVstMSwtMSwtMV07dmFyIG89ITEscz1bTihlWzBdWzNdLG4saSksTihlWzFdWzNdLG4saSksTihlWzJdWzNdLG4saSldO2lmKCFzWzBdJiYhc1sxXSYmIXNbMl0pcmV0dXJuITE7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBqKGVbMF1bM10pJiZqKGVbMV1bM10pJiZqKGVbMl1bM10pPyhGKHQsZSxyKSwhMCk6YTxVJiZxKHQsZSxyLE0sUywrK2EpfTtpZihzWzBdJiZzWzFdJiZzWzJdKXJldHVybiBsKHQsZSxyKXx8bzt2YXIgYz0hMTtyZXR1cm5bWzAsMSwyXSxbMiwwLDFdLFsxLDIsMF1dLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoc1thWzBdXSYmc1thWzFdXSYmIXNbYVsyXV0pe3ZhciB1PWVbYVswXV0sZj1lW2FbMV1dLGg9ZVthWzJdXSxwPUIoaCx1LG4saSksZD1CKGgsZixuLGkpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbYVswXV1dKXx8byxvPWwodCxbdSxmLGRdLFtyW2FbMF1dLHJbYVsxXV0sLTFdKXx8byxjPSEwfX0pLGM/bzooW1swLDEsMl0sWzEsMiwwXSxbMiwwLDFdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKHNbYVswXV0mJiFzW2FbMV1dJiYhc1thWzJdXSl7dmFyIHU9ZVthWzBdXSxmPWVbYVsxXV0saD1lW2FbMl1dLHA9QihmLHUsbixpKSxkPUIoaCx1LG4saSk7bz1sKHQsW2QscCx1XSxbLTEsLTEsclthWzBdXV0pfHxvLGM9ITB9fSksbyl9ZnVuY3Rpb24gSCh0LGUscixuKXt2YXIgaT0hMSxhPVYoZSksbz1bTihhWzBdWzNdLHIsbiksTihhWzFdWzNdLHIsbiksTihhWzJdWzNdLHIsbiksTihhWzNdWzNdLHIsbildO2lmKCEob1swXXx8b1sxXXx8b1syXXx8b1szXSkpcmV0dXJuIGk7aWYob1swXSYmb1sxXSYmb1syXSYmb1szXSlyZXR1cm4gYyYmKGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKG4saSxhKXtGKHQsW2Vbbl0sZVtpXSxlW2FdXSxbcltuXSxyW2ldLHJbYV1dKX07bigwLDEsMiksbigzLDAsMSksbigyLDMsMCksbigxLDIsMyl9KHQsYSxlKXx8aSksaTt2YXIgcz0hMTtyZXR1cm5bWzAsMSwyLDNdLFszLDAsMSwyXSxbMiwzLDAsMV0sWzEsMiwzLDBdXS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJm9bbFsyXV0mJiFvW2xbM11dKXt2YXIgdT1hW2xbMF1dLGY9YVtsWzFdXSxoPWFbbFsyXV0scD1hW2xbM11dO2lmKGMpaT1GKHQsW3UsZixoXSxbZVtsWzBdXSxlW2xbMV1dLGVbbFsyXV1dKXx8aTtlbHNle3ZhciBkPUIocCx1LHIsbiksZz1CKHAsZixyLG4pLHY9QihwLGgscixuKTtpPUYobnVsbCxbZCxnLHZdLFstMSwtMSwtMV0pfHxpfXM9ITB9fSkscz9pOihbWzAsMSwyLDNdLFsxLDIsMywwXSxbMiwzLDAsMV0sWzMsMCwxLDJdLFswLDIsMywxXSxbMSwzLDIsMF1dLmZvckVhY2goZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgdT1hW2xbMF1dLGY9YVtsWzFdXSxoPWFbbFsyXV0scD1hW2xbM11dLGQ9QihoLHUscixuKSxnPUIoaCxmLHIsbiksdj1CKHAsZixyLG4pLG09QihwLHUscixuKTtjPyhpPUYodCxbdSxtLGRdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1GKHQsW2YsZyx2XSxbZVtsWzFdXSwtMSwtMV0pfHxpKTppPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGksYSl7Rih0LFtlW25dLGVbaV0sZVthXV0sW3Jbbl0scltpXSxyW2FdXSl9O24oMCwxLDIpLG4oMiwzLDApfShudWxsLFtkLGcsdixtXSxbLTEsLTEsLTEsLTFdKXx8aSxzPSEwfX0pLHM/aTooW1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXV0uZm9yRWFjaChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiYhb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgdT1hW2xbMF1dLGY9YVtsWzFdXSxoPWFbbFsyXV0scD1hW2xbM11dLGQ9QihmLHUscixuKSxnPUIoaCx1LHIsbiksdj1CKHAsdSxyLG4pO2M/KGk9Rih0LFt1LGQsZ10sW2VbbFswXV0sLTEsLTFdKXx8aSxpPUYodCxbdSxnLHZdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1GKHQsW3UsdixkXSxbZVtsWzBdXSwtMSwtMV0pfHxpKTppPUYobnVsbCxbZCxnLHZdLFstMSwtMSwtMV0pfHxpLHM9ITB9fSksaSkpfWZ1bmN0aW9uIEcodCxlLHIsbixpLGEsbyxsLHUsZixoKXt2YXIgcD0hMTtyZXR1cm4gcyYmKFAodCwiQSIpJiYocD1IKG51bGwsW2UscixuLGFdLGYsaCl8fHApLFAodCwiQiIpJiYocD1IKG51bGwsW3IsbixpLHVdLGYsaCl8fHApLFAodCwiQyIpJiYocD1IKG51bGwsW3IsYSxvLHVdLGYsaCl8fHApLFAodCwiRCIpJiYocD1IKG51bGwsW24sYSxsLHVdLGYsaCl8fHApLFAodCwiRSIpJiYocD1IKG51bGwsW3IsbixhLHVdLGYsaCl8fHApKSxjJiYocD1IKHQsW3IsbixhLHVdLGYsaCl8fHApLHB9ZnVuY3Rpb24gWSh0LGUscixuLGksYSxvLHMpe3JldHVyblshMD09PXNbMF18fHEodCxWKFtlLHIsbl0pLFtlLHIsbl0sYSxvKSwhMD09PXNbMV18fHEodCxWKFtuLGksZV0pLFtuLGksZV0sYSxvKV19ZnVuY3Rpb24gVyh0LGUscixuLGksYSxvLHMsbCl7cmV0dXJuIHM/WSh0LGUscixpLG4sYSxvLGwpOlkodCxyLGksbixlLGEsbyxsKX1mdW5jdGlvbiBYKHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGY9ITEsaD1mdW5jdGlvbigpe2Y9cSh0LFtzLGwsY10sWy0xLC0xLC0xXSxpLGEpfHxmLGY9cSh0LFtjLHUsc10sWy0xLC0xLC0xXSxpLGEpfHxmfSxwPW9bMF0sZD1vWzFdLGc9b1syXTtyZXR1cm4gcCYmKHM9SShWKFt5KGUsci0wLG4tMCldKVswXSxWKFt5KGUtMSxyLTAsbi0wKV0pWzBdLHApLGw9SShWKFt5KGUsci0wLG4tMSldKVswXSxWKFt5KGUtMSxyLTAsbi0xKV0pWzBdLHApLGM9SShWKFt5KGUsci0xLG4tMSldKVswXSxWKFt5KGUtMSxyLTEsbi0xKV0pWzBdLHApLHU9SShWKFt5KGUsci0xLG4tMCldKVswXSxWKFt5KGUtMSxyLTEsbi0wKV0pWzBdLHApLGgoKSksZCYmKHM9SShWKFt5KGUtMCxyLG4tMCldKVswXSxWKFt5KGUtMCxyLTEsbi0wKV0pWzBdLGQpLGw9SShWKFt5KGUtMCxyLG4tMSldKVswXSxWKFt5KGUtMCxyLTEsbi0xKV0pWzBdLGQpLGM9SShWKFt5KGUtMSxyLG4tMSldKVswXSxWKFt5KGUtMSxyLTEsbi0xKV0pWzBdLGQpLHU9SShWKFt5KGUtMSxyLG4tMCldKVswXSxWKFt5KGUtMSxyLTEsbi0wKV0pWzBdLGQpLGgoKSksZyYmKHM9SShWKFt5KGUtMCxyLTAsbildKVswXSxWKFt5KGUtMCxyLTAsbi0xKV0pWzBdLGcpLGw9SShWKFt5KGUtMCxyLTEsbildKVswXSxWKFt5KGUtMCxyLTEsbi0xKV0pWzBdLGcpLGM9SShWKFt5KGUtMSxyLTEsbildKVswXSxWKFt5KGUtMSxyLTEsbi0xKV0pWzBdLGcpLHU9SShWKFt5KGUtMSxyLTAsbildKVswXSxWKFt5KGUtMSxyLTAsbi0xKV0pWzBdLGcpLGgoKSksZn1mdW5jdGlvbiBaKHQsZSxyLG4saSxhLG8sbCxjLHUsZixoKXt2YXIgcD10O3JldHVybiBoPyhzJiYiZXZlbiI9PT10JiYocD1udWxsKSxHKHAsZSxyLG4saSxhLG8sbCxjLHUsZikpOihzJiYib2RkIj09PXQmJihwPW51bGwpLEcocCxjLGwsbyxhLGksbixyLGUsdSxmKSl9ZnVuY3Rpb24gJCh0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPG07YysrKWZvcih2YXIgdT0xO3U8djt1KyspYS5wdXNoKFcodCx5KGwsdS0xLGMtMSkseShsLHUtMSxjKSx5KGwsdSxjLTEpLHkobCx1LGMpLHIsbiwobCt1K2MpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uIEoodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7YzxnO2MrKylmb3IodmFyIHU9MTt1PG07dSsrKWEucHVzaChXKHQseShjLTEsbCx1LTEpLHkoYyxsLHUtMSkseShjLTEsbCx1KSx5KGMsbCx1KSxyLG4sKGMrbCt1KSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBLKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8djtjKyspZm9yKHZhciB1PTE7dTxnO3UrKylhLnB1c2goVyh0LHkodS0xLGMtMSxsKSx5KHUtMSxjLGwpLHkodSxjLTEsbCkseSh1LGMsbCkscixuLCh1K2MrbCklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gUSh0LGUscil7Zm9yKHZhciBuPTE7bjxtO24rKylmb3IodmFyIGk9MTtpPHY7aSsrKWZvcih2YXIgYT0xO2E8ZzthKyspWih0LHkoYS0xLGktMSxuLTEpLHkoYS0xLGktMSxuKSx5KGEtMSxpLG4tMSkseShhLTEsaSxuKSx5KGEsaS0xLG4tMSkseShhLGktMSxuKSx5KGEsaSxuLTEpLHkoYSxpLG4pLGUsciwoYStpK24pJTIpfWZ1bmN0aW9uIHR0KHQsZSxyKXtzPSEwLFEodCxlLHIpLHM9ITF9ZnVuY3Rpb24gZXQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PG07dSsrKWZvcih2YXIgZj0xO2Y8djtmKyspby5wdXNoKFgodCxjLGYsdSxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIHJ0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTxnO3UrKylmb3IodmFyIGY9MTtmPG07ZisrKW8ucHVzaChYKHQsdSxjLGYscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBudCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8djt1KyspZm9yKHZhciBmPTE7ZjxnO2YrKylvLnB1c2goWCh0LGYsdSxjLHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gaXQodCxlKXtmb3IodmFyIHI9W10sbj10O248ZTtuKyspci5wdXNoKG4pO3JldHVybiByfXJldHVybiBmdW5jdGlvbigpe2lmKEwoKSxmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8ZztlKyspZm9yKHZhciByPTA7cjx2O3IrKylmb3IodmFyIG49MDtuPG07bisrKXt2YXIgaT15KGUscixuKTt6KHQueFtpXSx0LnlbaV0sdC56W2ldLHQudmFsdWVbaV0pfX0oKSxpJiZvJiYoRChvKSxjPSEwLFEobnVsbCxNLFMpLGM9ITEpLG4mJmEpe0QoYSk7Zm9yKHZhciBlPXQuc3VyZmFjZS5wYXR0ZXJuLHI9dC5zdXJmYWNlLmNvdW50LHM9MDtzPHI7cysrKXt2YXIgbD0xPT09cj8uNTpzLyhyLTEpLGs9KDEtbCkqTStsKlMsRT1NYXRoLmFicyhrLVQpLEM9TWF0aC5hYnMoay1BKSxPPUU+Qz9bVCxrXTpbayxBXTt0dChlLE9bMF0sT1sxXSl9fXZhciBJPVtbTWF0aC5taW4oTSxBKSxNYXRoLm1heChNLEEpXSxbTWF0aC5taW4oVCxTKSxNYXRoLm1heChULFMpXV07WyJ4IiwieSIsInoiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxJLmxlbmd0aDtuKyspe3ZhciBpPTAsYT1JW25dWzBdLG89SVtuXVsxXSxzPXQuc2xpY2VzW2VdO2lmKHMuc2hvdyYmcy5maWxsKXtEKHMuZmlsbCk7dmFyIGw9W10sYz1bXSx1PVtdO2lmKHMubG9jYXRpb25zLmxlbmd0aClmb3IodmFyIHk9MDt5PHMubG9jYXRpb25zLmxlbmd0aDt5Kyspe3ZhciB4PWYocy5sb2NhdGlvbnNbeV0sIngiPT09ZT9oOiJ5Ij09PWU/cDpkKTswPT09eC5kaXN0UmF0aW8/bC5wdXNoKHguaWQpOnguaWQ+MCYmKGMucHVzaCh4LmlkKSwieCI9PT1lP3UucHVzaChbeC5kaXN0UmF0aW8sMCwwXSk6InkiPT09ZT91LnB1c2goWzAseC5kaXN0UmF0aW8sMF0pOnUucHVzaChbMCwwLHguZGlzdFJhdGlvXSkpfWVsc2UgbD1pdCgxLCJ4Ij09PWU/Zy0xOiJ5Ij09PWU/di0xOm0tMSk7Yy5sZW5ndGg+MCYmKHJbaV09IngiPT09ZT9ldChudWxsLGMsYSxvLHUscltpXSk6InkiPT09ZT9ydChudWxsLGMsYSxvLHUscltpXSk6bnQobnVsbCxjLGEsbyx1LHJbaV0pLGkrKyksbC5sZW5ndGg+MCYmKHJbaV09IngiPT09ZT8kKG51bGwsbCxhLG8scltpXSk6InkiPT09ZT9KKG51bGwsbCxhLG8scltpXSk6SyhudWxsLGwsYSxvLHJbaV0pLGkrKyl9dmFyIGI9dC5jYXBzW2VdO2Iuc2hvdyYmYi5maWxsJiYoRChiLmZpbGwpLHJbaV09IngiPT09ZT8kKG51bGwsWzAsZy0xXSxhLG8scltpXSk6InkiPT09ZT9KKG51bGwsWzAsdi0xXSxhLG8scltpXSk6SyhudWxsLFswLG0tMV0sYSxvLHJbaV0pLGkrKyl9fSksMD09PXUmJkwoKSx0Ll94PXgsdC5feT1iLHQuX3o9Xyx0Ll9pbnRlbnNpdHk9dyx0Ll9Ycz1oLHQuX1lzPXAsdC5fWnM9ZH0oKSx0fSh0KTt2YXIgcz17cG9zaXRpb25zOm8obihyLnhheGlzLHQuX3gsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll95LGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxuKHIuemF4aXMsdC5feixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpLGNlbGxzOm8odC5faSx0Ll9qLHQuX2spLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfTtzLnZlcnRleEludGVuc2l0eT10Ll9pbnRlbnNpdHkscy52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHMuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKHMpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBjKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo2OTcsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcyMywiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4MDAsImdsLW1lc2gzZCI6Mjc2fV0sOTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX12YXIgYz1sKCJpc29taW4iKSx1PWwoImlzb21heCIpO251bGwhPXUmJm51bGwhPWMmJmM+dSYmKGUuaXNvbWluPW51bGwsZS5pc29tYXg9bnVsbCk7dmFyIGY9bCgieCIpLGg9bCgieSIpLHA9bCgieiIpLGQ9bCgidmFsdWUiKTtmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGgmJnAmJnAubGVuZ3RoJiZkJiZkLmxlbmd0aD8obi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxzKSxbIngiLCJ5IiwieiJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ImNhcHMuIit0O2woZSsiLnNob3ciKSYmbChlKyIuZmlsbCIpO3ZhciByPSJzbGljZXMuIit0O2wocisiLnNob3ciKSYmKGwocisiLmZpbGwiKSxsKHIrIi5sb2NhdGlvbnMiKSl9KSxsKCJzcGFjZWZyYW1lLnNob3ciKSYmbCgic3BhY2VmcmFtZS5maWxsIiksbCgic3VyZmFjZS5zaG93IikmJihsKCJzdXJmYWNlLmNvdW50IiksbCgic3VyZmFjZS5maWxsIiksbCgic3VyZmFjZS5wYXR0ZXJuIikpLGwoImNvbnRvdXIuc2hvdyIpJiYobCgiY29udG91ci5jb2xvciIpLGwoImNvbnRvdXIud2lkdGgiKSksWyJ0ZXh0IiwiaG92ZXJ0ZXh0IiwiaG92ZXJ0ZW1wbGF0ZSIsImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJmbGF0c2hhZGluZyIsIm9wYWNpdHkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wodCl9KSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9hdHRyaWJ1dGVzIjo5ODl9XSw5OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmNvbG9yYmFyPXttaW46ImNtaW4iLG1heDoiY21heCJ9LG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9Imlzb3N1cmZhY2UiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLG4uY2F0ZWdvcmllcz1bImdsM2QiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wzZCI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjk4OSwiLi9jYWxjIjo5OTAsIi4vY29udmVydCI6OTkxLCIuL2RlZmF1bHRzIjo5OTJ9XSw5OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3N1cmZhY2UvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWwoe3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sajp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxrOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6ImNhbGMifSksZGVsYXVuYXlheGlzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsInoiXSxkZmx0OiJ6IixlZGl0VHlwZToiY2FsYyJ9LGFscGhhaHVsbDp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi0xLGVkaXRUeXBlOiJjYWxjIn0saW50ZW5zaXR5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx2ZXJ0ZXhjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxmYWNlY29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNmb3Jtczp2b2lkIDB9LG4oIiIse2NvbG9yQXR0cjoiYGludGVuc2l0eWAiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7Y29sb3JiYXI6aSxvcGFjaXR5Om8ub3BhY2l0eSxmbGF0c2hhZGluZzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXI6e3Nob3c6bCh7fSxvLmNvbnRvdXJzLnguc2hvdyx7fSksY29sb3I6by5jb250b3Vycy54LmNvbG9yLHdpZHRoOm8uY29udG91cnMueC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0cG9zaXRpb246e3g6bCh7fSxvLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5Omwoe30sby5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpsKHt9LG8ubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KSxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0aW5nOmwoe3ZlcnRleG5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtMTIsZWRpdFR5cGU6ImNhbGMifSxmYWNlbm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxZS02LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvLmxpZ2h0aW5nKSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMifSl9KX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uL3N1cmZhY2UvYXR0cmlidXRlcyI6MTE0OH1dLDk5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuaW50ZW5zaXR5JiZuKHQsZSx7dmFsczplLmludGVuc2l0eSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU4NX1dLDk5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1tZXNoM2QiKSxpPXQoImRlbGF1bmF5LXRyaWFuZ3VsYXRlIiksYT10KCJhbHBoYS1zaGFwZSIpLG89dCgiY29udmV4LWh1bGwiKSxzPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsbD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksYz10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKTtmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj0iI2ZmZiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgZj11LnByb3RvdHlwZTtmdW5jdGlvbiBoKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWVbbl09bCh0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBwKHQsZSxyLG4pe2Zvcih2YXIgaT1bXSxhPWUubGVuZ3RoLG89MDtvPGE7bysrKWlbb109dC5kMmwoZVtvXSwwLG4pKnI7cmV0dXJuIGl9ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9W10scj10Lmxlbmd0aCxuPTA7bjxyO24rKyllW25dPU1hdGgucm91bmQodFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZih0W25dPD0tLjV8fHRbbl0+PWUtLjUpcmV0dXJuITE7cmV0dXJuITB9Zi5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDt0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLnhbZV0sdGhpcy5kYXRhLnlbZV0sdGhpcy5kYXRhLnpbZV1dO3ZhciByPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KHIpJiZ2b2lkIDAhPT1yW2VdP3QudGV4dExhYmVsPXJbZV06ciYmKHQudGV4dExhYmVsPXIpLCEwfX0sZi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O3RoaXMuZGF0YT10O3ZhciBuLHU9dC54Lmxlbmd0aCxmPWMocChyLnhheGlzLHQueCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhcikscChyLnlheGlzLHQueSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhcikscChyLnpheGlzLHQueixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpO2lmKHQuaSYmdC5qJiZ0Lmspe2lmKHQuaS5sZW5ndGghPT10LmoubGVuZ3RofHx0LmoubGVuZ3RoIT09dC5rLmxlbmd0aHx8IWcodC5pLHUpfHwhZyh0LmosdSl8fCFnKHQuayx1KSlyZXR1cm47bj1jKGQodC5pKSxkKHQuaiksZCh0LmspKX1lbHNlIG49MD09PXQuYWxwaGFodWxsP28oZik6dC5hbHBoYWh1bGw+MD9hKHQuYWxwaGFodWxsLGYpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVsieCIsInkiLCJ6Il0uaW5kZXhPZih0KSxuPVtdLGE9ZS5sZW5ndGgsbz0wO288YTtvKyspbltvXT1bZVtvXVsocisxKSUzXSxlW29dWyhyKzIpJTNdXTtyZXR1cm4gaShuKX0odC5kZWxhdW5heWF4aXMsZik7dmFyIHY9e3Bvc2l0aW9uczpmLGNlbGxzOm4sbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmwodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9O3QuaW50ZW5zaXR5Pyh0aGlzLmNvbG9yPSIjZmZmIix2LnZlcnRleEludGVuc2l0eT10LmludGVuc2l0eSx2LnZlcnRleEludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0sdi5jb2xvcm1hcD1zKHQpKTp0LnZlcnRleGNvbG9yPyh0aGlzLmNvbG9yPXQudmVydGV4Y29sb3JbMF0sdi52ZXJ0ZXhDb2xvcnM9aCh0LnZlcnRleGNvbG9yKSk6dC5mYWNlY29sb3I/KHRoaXMuY29sb3I9dC5mYWNlY29sb3JbMF0sdi5jZWxsQ29sb3JzPWgodC5mYWNlY29sb3IpKToodGhpcy5jb2xvcj10LmNvbG9yLHYubWVzaENvbG9yPWwodC5jb2xvcikpLHRoaXMubWVzaC51cGRhdGUodil9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IHUodCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19LHsiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6Njk3LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MjMsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODAwLCJhbHBoYS1zaGFwZSI6NTQsImNvbnZleC1odWxsIjoxMjAsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNTYsImdsLW1lc2gzZCI6Mjc2fV0sOTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX1mdW5jdGlvbiBjKHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPWwodCk7cmV0dXJuIGUmJmkuaXNBcnJheU9yVHlwZWRBcnJheShlKT9lOm51bGx9KTtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg9PT1lWzBdLmxlbmd0aH0pJiZlfWMoWyJ4IiwieSIsInoiXSk/KGMoWyJpIiwiaiIsImsiXSksKCFlLml8fGUuaiYmZS5rKSYmKCFlLmp8fGUuayYmZS5pKSYmKCFlLmt8fGUuaSYmZS5qKT8obi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxzKSxbImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJjb250b3VyLnNob3ciLCJjb250b3VyLmNvbG9yIiwiY29udG91ci53aWR0aCIsImNvbG9yc2NhbGUiLCJyZXZlcnNlc2NhbGUiLCJmbGF0c2hhZGluZyIsImFscGhhaHVsbCIsImRlbGF1bmF5YXhpcyIsIm9wYWNpdHkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wodCl9KSwiaW50ZW5zaXR5ImluIHQ/KGwoImludGVuc2l0eSIpLGEodCxlLHMsbCx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkpOihlLnNob3dzY2FsZT0hMSwiZmFjZWNvbG9yImluIHQ/bCgiZmFjZWNvbG9yIik6InZlcnRleGNvbG9yImluIHQ/bCgidmVydGV4Y29sb3IiKTpsKCJjb2xvciIscikpLGwoInRleHQiKSxsKCJob3ZlcnRleHQiKSxsKCJob3ZlcnRlbXBsYXRlIiksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU4NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vYXR0cmlidXRlcyI6OTk0fV0sOTk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5jb2xvcmJhcj17bWluOiJjbWluIixtYXg6ImNtYXgifSxuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJtZXNoM2QiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLG4uY2F0ZWdvcmllcz1bImdsM2QiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wzZCI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjk5NCwiLi9jYWxjIjo5OTUsIi4vY29udmVydCI6OTk2LCIuL2RlZmF1bHRzIjo5OTd9XSw5OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLG89dCgiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIikscz1pLmxpbmU7ZnVuY3Rpb24gbCh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxzLmNvbG9yLHtkZmx0OnR9KSx3aWR0aDpzLndpZHRoLGRhc2g6YSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifX1lLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sb3Blbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxoaWdoOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxvdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxjbG9zZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOnt3aWR0aDpuKHt9LHMud2lkdGgse30pLGRhc2g6bih7fSxhLHt9KSxlZGl0VHlwZToic3R5bGUifSxpbmNyZWFzaW5nOmwoIiMzRDk5NzAiKSxkZWNyZWFzaW5nOmwoIiNGRjQxMzYiKSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4Oi41LGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmxhYmVsOm4oe30sby5ob3ZlcmxhYmVsLHtzcGxpdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToic3R5bGUifX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3LCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjYwNywiLi4vLi4vbGliIjo3MDAsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA1MX1dLDEwMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1uLl8sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybntvOnQsaDplLGw6cixjOm59fWZ1bmN0aW9uIGwodCxlLHIscyxsKXtmb3IodmFyIGM9cy5tYWtlQ2FsY2RhdGEoZSwib3BlbiIpLHU9cy5tYWtlQ2FsY2RhdGEoZSwiaGlnaCIpLGY9cy5tYWtlQ2FsY2RhdGEoZSwibG93IiksaD1zLm1ha2VDYWxjZGF0YShlLCJjbG9zZSIpLHA9QXJyYXkuaXNBcnJheShlLnRleHQpLGQ9QXJyYXkuaXNBcnJheShlLmhvdmVydGV4dCksZz0hMCx2PW51bGwsbT1bXSx5PTA7eTxyLmxlbmd0aDt5Kyspe3ZhciB4PXJbeV0sYj1jW3ldLF89dVt5XSx3PWZbeV0saz1oW3ldO2lmKHghPT1vJiZiIT09byYmXyE9PW8mJnchPT1vJiZrIT09byl7az09PWI/bnVsbCE9PXYmJmshPT12JiYoZz1rPnYpOmc9az5iLHY9azt2YXIgVD1sKGIsXyx3LGspO1QucG9zPXgsVC55Yz0oYitrKS8yLFQuaT15LFQuZGlyPWc/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIixwJiYoVC50eD1lLnRleHRbeV0pLGQmJihULmh0eD1lLmhvdmVydGV4dFt5XSksbS5wdXNoKFQpfWVsc2UgbS5wdXNoKHtwb3M6eCxlbXB0eTohMH0pfXJldHVybiBlLl9leHRyZW1lc1tzLl9pZF09YS5maW5kRXh0cmVtZXMocyxuLmNvbmNhdChmLHUpLHtwYWRkZWQ6ITB9KSxtLmxlbmd0aCYmKG1bMF0udD17bGFiZWxzOntvcGVuOmkodCwib3BlbjoiKSsiICIsaGlnaDppKHQsImhpZ2g6IikrIiAiLGxvdzppKHQsImxvdzoiKSsiICIsY2xvc2U6aSh0LCJjbG9zZToiKSsiICJ9fSksbX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hLmdldEZyb21JZCh0LGUueGF4aXMpLGk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxvPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLl9taW5EaWZmO2lmKCFpKXt2YXIgYSxvPXQuX2Z1bGxEYXRhLHM9W107Zm9yKGk9MS8wLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGw9b1thXTtpZigib2hsYyI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLnhheGlzPT09ZS5faWQpe3MucHVzaChsKTt2YXIgYz1lLm1ha2VDYWxjZGF0YShsLCJ4Iik7bC5feGNhbGM9Yzt2YXIgdT1uLmRpc3RpbmN0VmFscyhjKS5taW5EaWZmO3UmJmlzRmluaXRlKHUpJiYoaT1NYXRoLm1pbihpLHUpKX19Zm9yKGk9PT0xLzAmJihpPTEpLGE9MDthPHMubGVuZ3RoO2ErKylzW2FdLl9taW5EaWZmPWl9cmV0dXJuIGkqci50aWNrd2lkdGh9KHQscixlKSxjPWUuX21pbkRpZmY7ZS5fbWluRGlmZj1udWxsO3ZhciB1PWUuX3hjYWxjO2UuX3hjYWxjPW51bGw7dmFyIGY9bCh0LGUsdSxpLHMpO3JldHVybiBlLl9leHRyZW1lc1tyLl9pZF09YS5maW5kRXh0cmVtZXMocix1LHt2cGFkOmMvMn0pLGYubGVuZ3RoPyhuLmV4dGVuZEZsYXQoZlswXS50LHt3SG92ZXI6Yy8yLHRpY2tMZW46b30pLGYpOlt7dDp7ZW1wdHk6ITB9fV19LGNhbGNDb21tb246bH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OH1dLDEwMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL29obGNfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIG8odCxlLHIsbil7cihuKyIubGluZS5jb2xvciIpLHIobisiLmxpbmUud2lkdGgiLGUubGluZS53aWR0aCkscihuKyIubGluZS5kYXNoIixlLmxpbmUuZGFzaCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pKHQsZSxsLHMpPyhsKCJsaW5lLndpZHRoIiksbCgibGluZS5kYXNoIiksbyh0LGUsbCwiaW5jcmVhc2luZyIpLG8odCxlLGwsImRlY3JlYXNpbmciKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgidGlja3dpZHRoIikscy5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2F0dHJpYnV0ZXMiOjk5OSwiLi9vaGxjX2RlZmF1bHRzIjoxMDA0fV0sMTAwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpLGw9e2luY3JlYXNpbmc6Ilx1MjViMiIsZGVjcmVhc2luZzoiXHUyNWJjIn07ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaSxzLGw9dC5jZCxjPXQueGEsdT1sWzBdLnRyYWNlLGY9bFswXS50LGg9dS50eXBlLHA9Im9obGMiPT09aD8ibCI6Im1pbiIsZD0ib2hsYyI9PT1oPyJoIjoibWF4IixnPWYuYlBvc3x8MCx2PWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcytnLWV9LG09Zi5iZFBvc3x8Zi50aWNrTGVuLHk9Zi53SG92ZXIseD1NYXRoLm1pbigxLG0vTWF0aC5hYnMoYy5yMmMoYy5yYW5nZVsxXSktYy5yMmMoYy5yYW5nZVswXSkpKTtmdW5jdGlvbiBiKHQpe3ZhciBlPXYodCk7cmV0dXJuIGEuaW5ib3goZS15LGUreSxpKX1mdW5jdGlvbiBfKHQpe3ZhciBlPXRbcF0sbj10W2RdO3JldHVybiBlPT09bnx8YS5pbmJveChlLXIsbi1yLGkpfWZ1bmN0aW9uIHcodCl7cmV0dXJuKGIodCkrXyh0KSkvMn1pPXQubWF4SG92ZXJEaXN0YW5jZS14LHM9dC5tYXhTcGlrZURpc3RhbmNlLXg7dmFyIGs9YS5nZXREaXN0YW5jZUZ1bmN0aW9uKG4sYixfLHcpO2lmKGEuZ2V0Q2xvc2VzdChsLGssdCksITE9PT10LmluZGV4KXJldHVybiBudWxsO3ZhciBUPWxbdC5pbmRleF07aWYoVC5lbXB0eSlyZXR1cm4gbnVsbDt2YXIgQT11W1QuZGlyXSxNPUEubGluZS5jb2xvcjtyZXR1cm4gby5vcGFjaXR5KE0pJiZBLmxpbmUud2lkdGg/dC5jb2xvcj1NOnQuY29sb3I9QS5maWxsY29sb3IsdC54MD1jLmMycChULnBvcytnLW0sITApLHQueDE9Yy5jMnAoVC5wb3MrZyttLCEwKSx0LnhMYWJlbFZhbD1ULnBvcyx0LnNwaWtlRGlzdGFuY2U9dyhUKSpzL2ksdC54U3Bpa2U9Yy5jMnAoVC5wb3MsITApLHR9ZnVuY3Rpb24gdSh0LGUscixhKXt2YXIgbz10LmNkLHM9dC55YSxsPW9bMF0udHJhY2UsdT1vWzBdLnQsZj1bXSxoPWModCxlLHIsYSk7aWYoIWgpcmV0dXJuW107dmFyIHA9b1toLmluZGV4XS5oaXx8bC5ob3ZlcmluZm8sZD1wLnNwbGl0KCIrIik7aWYoISgiYWxsIj09PXB8fC0xIT09ZC5pbmRleE9mKCJ5IikpKXJldHVybltdO2Zvcih2YXIgZz1bImhpZ2giLCJvcGVuIiwiY2xvc2UiLCJsb3ciXSx2PXt9LG09MDttPGcubGVuZ3RoO20rKyl7dmFyIHkseD1nW21dLGI9bFt4XVtoLmluZGV4XSxfPXMuYzJwKGIsITApO2IgaW4gdj8oeT12W2JdKS55TGFiZWwrPSI8YnI+Iit1LmxhYmVsc1t4XStuLmhvdmVyTGFiZWxUZXh0KHMsYik6KCh5PWkuZXh0ZW5kRmxhdCh7fSxoKSkueTA9eS55MT1fLHkueUxhYmVsVmFsPWIseS55TGFiZWw9dS5sYWJlbHNbeF0rbi5ob3ZlckxhYmVsVGV4dChzLGIpLHkubmFtZT0iIixmLnB1c2goeSksdltiXT15KX1yZXR1cm4gZn1mdW5jdGlvbiBmKHQsZSxyLGkpe3ZhciBhPXQuY2Qsbz10LnlhLHU9YVswXS50cmFjZSxmPWFbMF0udCxoPWModCxlLHIsaSk7aWYoIWgpcmV0dXJuW107dmFyIHA9YVtoLmluZGV4XSxkPWguaW5kZXg9cC5pLGc9cC5kaXI7ZnVuY3Rpb24gdih0KXtyZXR1cm4gZi5sYWJlbHNbdF0rbi5ob3ZlckxhYmVsVGV4dChvLHVbdF1bZF0pfXZhciBtPXAuaGl8fHUuaG92ZXJpbmZvLHk9bS5zcGxpdCgiKyIpLHg9ImFsbCI9PT1tLGI9eHx8LTEhPT15LmluZGV4T2YoInkiKSxfPXh8fC0xIT09eS5pbmRleE9mKCJ0ZXh0Iiksdz1iP1t2KCJvcGVuIiksdigiaGlnaCIpLHYoImxvdyIpLHYoImNsb3NlIikrIiAgIitsW2ddXTpbXTtyZXR1cm4gXyYmcyhwLHUsdyksaC5leHRyYVRleHQ9dy5qb2luKCI8YnI+IiksaC55MD1oLnkxPW8uYzJwKHAueWMsITApLFtoXX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmNkWzBdLnRyYWNlLmhvdmVybGFiZWwuc3BsaXQ/dSh0LGUscixuKTpmKHQsZSxyLG4pfSxob3ZlclNwbGl0OnUsaG92ZXJPblBvaW50czpmfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0IjoxMDU5fV0sMTAwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJvaGxjIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCJdLG1ldGE6e30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4vYXR0cmlidXRlcyI6OTk5LCIuL2NhbGMiOjFlMywiLi9kZWZhdWx0cyI6MTAwMSwiLi9ob3ZlciI6MTAwMiwiLi9wbG90IjoxMDA1LCIuL3NlbGVjdCI6MTAwNiwiLi9zdHlsZSI6MTAwN31dLDEwMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKCJ4Iikscz1yKCJvcGVuIiksbD1yKCJoaWdoIiksYz1yKCJsb3ciKSx1PXIoImNsb3NlIik7aWYocigiaG92ZXJsYWJlbC5zcGxpdCIpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCJdLGEpLHMmJmwmJmMmJnUpe3ZhciBmPU1hdGgubWluKHMubGVuZ3RoLGwubGVuZ3RoLGMubGVuZ3RoLHUubGVuZ3RoKTtyZXR1cm4gbyYmKGY9TWF0aC5taW4oZixpLm1pblJvd0xlbmd0aChvKSkpLGUuX2xlbmd0aD1mLGZ9fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOX1dLDEwMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1lLnhheGlzLHM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIG9obGMiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxsPWEudCxjPWEudHJhY2U7aWYoZS5pc1JhbmdlUGxvdHx8KGEubm9kZTM9ciksITAhPT1jLnZpc2libGV8fGwuZW1wdHkpci5yZW1vdmUoKTtlbHNle3ZhciB1PWwudGlja0xlbixmPXIuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShpLmlkZW50aXR5KTtmLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksZi5leGl0KCkucmVtb3ZlKCksZi5hdHRyKCJkIixmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVybiJNMCwwWiI7dmFyIGU9by5jMnAodC5wb3MsITApLHI9by5jMnAodC5wb3MtdSwhMCksbj1vLmMycCh0LnBvcyt1LCEwKTtyZXR1cm4iTSIrcisiLCIrcy5jMnAodC5vLCEwKSsiSCIrZSsiTSIrZSsiLCIrcy5jMnAodC5oLCEwKSsiViIrcy5jMnAodC5sLCEwKSsiTSIrbisiLCIrcy5jMnAodC5jLCEwKSsiSCIrZX0pfX0pfX0seyIuLi8uLi9saWIiOjcwMCxkMzoxNTR9XSwxMDA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5jZCxpPXQueGF4aXMsYT10LnlheGlzLG89W10scz1uWzBdLnQuYlBvc3x8MDtpZighMT09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbD1uW3JdO2UuY29udGFpbnMoW2kuYzJwKGwucG9zK3MpLGEuYzJwKGwueWMpXSxudWxsLGwuaSx0KT8oby5wdXNoKHtwb2ludE51bWJlcjpsLmkseDppLmMyZChsLnBvcykseTphLmMyZChsLnljKX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBvfX0se31dLDEwMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcub2hsY2xheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7ci5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goZnVuY3Rpb24odCl7aWYoIXQuZW1wdHkpe3ZhciByPWVbdC5kaXJdLmxpbmU7bi5zZWxlY3QodGhpcykuc3R5bGUoImZpbGwiLCJub25lIikuY2FsbChhLnN0cm9rZSxyLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsci5kYXNoLHIud2lkdGgpLnN0eWxlKCJvcGFjaXR5IixlLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LGQzOjE1NH1dLDEwMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxjPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLmxpbmUsdT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxmPW4oe2VkaXRUeXBlOiJjYWxjIn0sbygibGluZSIse2VkaXRUeXBlOiJjYWxjIn0pLHtzaG93c2NhbGU6Yy5zaG93c2NhbGUsY29sb3JiYXI6dSxzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHNwbGluZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx7a2V5czpbImNvdW50IiwicHJvYmFiaWxpdHkiXX0pfSk7ZS5leHBvcnRzPXtkb21haW46bCh7bmFtZToicGFyY2F0cyIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG92ZXJpbmZvOm4oe30saS5ob3ZlcmluZm8se2ZsYWdzOlsiY291bnQiLCJwcm9iYWJpbGl0eSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSksaG92ZXJvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2F0ZWdvcnkiLCJjb2xvciIsImRpbWVuc2lvbiJdLGRmbHQ6ImNhdGVnb3J5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITF9LHtrZXlzOlsiY291bnQiLCJwcm9iYWJpbGl0eSIsImNhdGVnb3J5IiwiY2F0ZWdvcnljb3VudCIsImNvbG9yY291bnQiLCJiYW5kY29sb3Jjb3VudCJdfSksYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnBlbmRpY3VsYXIiLCJmcmVlZm9ybSIsImZpeGVkIl0sZGZsdDoicGVycGVuZGljdWxhciIsZWRpdFR5cGU6InBsb3QifSxidW5kbGVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzb3J0cGF0aHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZvcndhcmQiLCJiYWNrd2FyZCJdLGRmbHQ6ImZvcndhcmQiLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2tmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImRpbWVuc2lvbiIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sZGlzcGxheWluZGV4Ont2YWxUeXBlOiJpbnRlZ2VyIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19LGxpbmU6Zixjb3VudHM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxjdXN0b21kYXRhOnZvaWQgMCxob3ZlcmxhYmVsOnZvaWQgMCxpZHM6dm9pZCAwLGxlZ2VuZGdyb3VwOnZvaWQgMCxvcGFjaXR5OnZvaWQgMCxzZWxlY3RlZHBvaW50czp2b2lkIDAsc2hvd2xlZ2VuZDp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi4vLi4vcGxvdHMvZG9tYWluIjo3NzMsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTF9XSwxMDA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KCIuL3Bsb3QiKTtyLm5hbWU9InBhcmNhdHMiLHIucGxvdD1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQuY2FsY2RhdGEsInBhcmNhdHMiKTtpZihvLmxlbmd0aCl7dmFyIHM9b1swXTtpKHQscyxyLGEpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygicGFyY2F0cyIpLGE9ZS5faGFzJiZlLl9oYXMoInBhcmNhdHMiKTtpJiYhYSYmbi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIucGFyY2F0cyIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9nZXRfZGF0YSI6Nzg0LCIuL3Bsb3QiOjEwMTR9XSwxMDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxvPXQoIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGModCxlLHIpe3QudmFsdWVJbmRzLnB1c2goZSksdC5jb3VudCs9cn1mdW5jdGlvbiB1KHQsZSxyKXt0LnZhbHVlSW5kcy5wdXNoKGUpLHQuY291bnQrPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bC5maWx0ZXJWaXNpYmxlKGUuZGltZW5zaW9ucyk7aWYoMD09PXIubGVuZ3RoKXJldHVybltdO3ZhciBmLGgscCxkPXIubWFwKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJ0cmFjZSI9PT10LmNhdGVnb3J5b3JkZXI/ZT1udWxsOiJhcnJheSI9PT10LmNhdGVnb3J5b3JkZXI/ZT10LmNhdGVnb3J5YXJyYXk6KGU9byh0LnZhbHVlcykuc29ydCgpLCJjYXRlZ29yeSBkZXNjZW5kaW5nIj09PXQuY2F0ZWdvcnlvcmRlciYmKGU9ZS5yZXZlcnNlKCkpKSxmdW5jdGlvbih0LGUpe2U9bnVsbD09ZT9bXTplLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdH0pO3ZhciByPXt9LG49e30saT1bXTtlLmZvckVhY2goZnVuY3Rpb24odCxlKXtyW3RdPTAsblt0XT1lfSk7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvLHM9dFthXTt2b2lkIDA9PT1yW3NdPyhyW3NdPTEsbz1lLnB1c2gocyktMSxuW3NdPW8pOihyW3NdKyssbz1uW3NdKSxpLnB1c2gobyl9dmFyIGw9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHJbdF19KTtyZXR1cm57dW5pcXVlVmFsdWVzOmUsdW5pcXVlQ291bnRzOmwsaW5kczppfX0odC52YWx1ZXMsZSl9KTtmPWwuaXNBcnJheU9yVHlwZWRBcnJheShlLmNvdW50cyk/ZS5jb3VudHM6W2UuY291bnRzXSxmdW5jdGlvbih0KXt2YXIgZTtpZihmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKHRbcl08MHx8dFtyXT49dC5sZW5ndGgpcmV0dXJuITE7aWYodm9pZCAwIT09ZVt0W3JdXSlyZXR1cm4hMTtlW3Rbcl1dPSEwfXJldHVybiEwfSh0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5aW5kZXh9KSkpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLl9kaXNwbGF5aW5kZXg9dFtlXS5kaXNwbGF5aW5kZXg7ZWxzZSBmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uX2Rpc3BsYXlpbmRleD1lfShyKSxyLmZvckVhY2goZnVuY3Rpb24odCxlKXshZnVuY3Rpb24odCxlKXt0Ll9jYXRlZ29yeWFycmF5PWUudW5pcXVlVmFsdWVzLG51bGw9PT10LnRpY2t0ZXh0fHx2b2lkIDA9PT10LnRpY2t0ZXh0P3QuX3RpY2t0ZXh0PVtdOnQuX3RpY2t0ZXh0PXQudGlja3RleHQuc2xpY2UoKTtmb3IodmFyIHI9dC5fdGlja3RleHQubGVuZ3RoO3I8ZS51bmlxdWVWYWx1ZXMubGVuZ3RoO3IrKyl0Ll90aWNrdGV4dC5wdXNoKGUudW5pcXVlVmFsdWVzW3JdKX0odCxkW2VdKX0pO3ZhciBnLHY9ZS5saW5lO3Y/KGkoZSwibGluZSIpJiZhKHQsZSx7dmFsczplLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJsaW5lIixjTGV0dGVyOiJjIn0pLGc9cy50cnlDb2xvcnNjYWxlKHYpKTpnPWwuaWRlbnRpdHk7dmFyIG0seSx4LGIsXz1yWzBdLnZhbHVlcy5sZW5ndGgsdz17fSxrPWQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluZHN9KTtmb3IocD0wLG09MDttPF87bSsrKXt2YXIgVD1bXTtmb3IoeT0wO3k8ay5sZW5ndGg7eSsrKVQucHVzaChrW3ldW21dKTtoPWZbbSVmLmxlbmd0aF0scCs9aDt2YXIgQT0oeD1tLGI9dm9pZCAwLGI9bC5pc0FycmF5T3JUeXBlZEFycmF5KHYuY29sb3IpP3YuY29sb3JbeCV2LmNvbG9yLmxlbmd0aF06di5jb2xvcix7Y29sb3I6ZyhiKSxyYXdDb2xvcjpifSksTT1UKyItIitBLnJhd0NvbG9yO3ZvaWQgMD09PXdbTV0mJih3W01dPXtjYXRlZ29yeUluZHM6VCxjb2xvcjpBLmNvbG9yLHJhd0NvbG9yOkEucmF3Q29sb3IsdmFsdWVJbmRzOltdLGNvdW50OjB9KSx1KHdbTV0sbSxoKX12YXIgUyxFPXIubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHI9ZSxuPXQuX2luZGV4LGk9dC5fZGlzcGxheWluZGV4LGE9dC5sYWJlbCx7ZGltZW5zaW9uSW5kOnIsY29udGFpbmVySW5kOm4sZGlzcGxheUluZDppLGRpbWVuc2lvbkxhYmVsOmEsY291bnQ6cCxjYXRlZ29yaWVzOltdLGRyYWdYOm51bGx9O3ZhciByLG4saSxhfSk7Zm9yKG09MDttPF87bSsrKWZvcihoPWZbbSVmLmxlbmd0aF0seT0wO3k8RS5sZW5ndGg7eSsrKXt2YXIgQz1FW3ldLmNvbnRhaW5lckluZCxMPWRbeV0uaW5kc1ttXSx6PUVbeV0uY2F0ZWdvcmllcztpZih2b2lkIDA9PT16W0xdKXt2YXIgTz1lLmRpbWVuc2lvbnNbQ10uX2NhdGVnb3J5YXJyYXlbTF0sST1lLmRpbWVuc2lvbnNbQ10uX3RpY2t0ZXh0W0xdO3pbTF09e2RpbWVuc2lvbkluZDp5LGNhdGVnb3J5SW5kOlM9TCxjYXRlZ29yeVZhbHVlOk8sZGlzcGxheUluZDpTLGNhdGVnb3J5TGFiZWw6SSx2YWx1ZUluZHM6W10sY291bnQ6MCxkcmFnWTpudWxsfX1jKHpbTF0sbSxoKX1yZXR1cm4gbihmdW5jdGlvbih0LGUscil7dmFyIG49dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5sZW5ndGh9KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlKX0pO3JldHVybntkaW1lbnNpb25zOnQscGF0aHM6ZSx0cmFjZTp2b2lkIDAsbWF4Q2F0czpuLGNvdW50OnJ9fShFLHcscCkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NTg4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzIjo2OTEsIi4uLy4uL2xpYi9ndXAiOjY5OH1dLDEwMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKTtmdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbC5kaW1lbnNpb25zLHIsaSl9dmFyIGk9cigidmFsdWVzIiksYT1yKCJ2aXNpYmxlIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cigibGFiZWwiKSxyKCJkaXNwbGF5aW5kZXgiLGUuX2luZGV4KTt2YXIgbyxzPXQuY2F0ZWdvcnlhcnJheSxjPUFycmF5LmlzQXJyYXkocykmJnMubGVuZ3RoPjA7YyYmKG89ImFycmF5Iik7dmFyIHU9cigiY2F0ZWdvcnlvcmRlciIsbyk7ImFycmF5Ij09PXU/KHIoImNhdGVnb3J5YXJyYXkiKSxyKCJ0aWNrdGV4dCIpKTooZGVsZXRlIHQuY2F0ZWdvcnlhcnJheSxkZWxldGUgdC50aWNrdGV4dCksY3x8ImFycmF5IiE9PXV8fChlLmNhdGVnb3J5b3JkZXI9InRyYWNlIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9dmFyIHA9cyh0LGUse25hbWU6ImRpbWVuc2lvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czp1fSksZD1mdW5jdGlvbih0LGUscixvLHMpe3MoImxpbmUuc2hhcGUiKSxzKCJsaW5lLmhvdmVydGVtcGxhdGUiKTt2YXIgbD1zKCJsaW5lLmNvbG9yIixvLmNvbG9yd2F5WzBdKTtpZihpKHQsImxpbmUiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcygibGluZS5jb2xvcnNjYWxlIiksYSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGYsaCk7byhlLGYsaCksQXJyYXkuaXNBcnJheShwKSYmcC5sZW5ndGh8fChlLnZpc2libGU9ITEpLGMoZSxwLCJ2YWx1ZXMiLGQpLGgoImhvdmVyb24iKSxoKCJob3ZlcnRlbXBsYXRlIiksaCgiYXJyYW5nZW1lbnQiKSxoKCJidW5kbGVjb2xvcnMiKSxoKCJzb3J0cGF0aHMiKSxoKCJjb3VudHMiKTt2YXIgZz17ZmFtaWx5OmYuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGYuZm9udC5zaXplKSxjb2xvcjpmLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChoLCJsYWJlbGZvbnQiLGcpO3ZhciB2PXtmYW1pbHk6Zi5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoZi5mb250LnNpemUvMS4yKSxjb2xvcjpmLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChoLCJ0aWNrZm9udCIsdil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NTg4LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NDQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjoxMDIzLCIuL2F0dHJpYnV0ZXMiOjEwMDh9XSwxMDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uY29sb3JiYXI9e2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InBhcmNhdHMiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMDA4LCIuL2Jhc2VfcGxvdCI6MTAwOSwiLi9jYWxjIjoxMDEwLCIuL2RlZmF1bHRzIjoxMDExLCIuL3Bsb3QiOjEwMTR9XSwxMDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X2FwaSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoInRpbnljb2xvcjIiKSxjPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpO2Z1bmN0aW9uIHUodCxlLHIsaSl7dmFyIGE9dC5tYXAoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9clswXSxhPWUubWFyZ2lufHx7bDo4MCxyOjgwLHQ6MTAwLGI6ODB9LG89aS50cmFjZSxzPW8uZG9tYWluLGw9ZS53aWR0aCxjPWUuaGVpZ2h0LHU9TWF0aC5mbG9vcihsKihzLnhbMV0tcy54WzBdKSksZj1NYXRoLmZsb29yKGMqKHMueVsxXS1zLnlbMF0pKSxoPXMueFswXSpsK2EubCxwPWUuaGVpZ2h0LXMueVsxXSplLmhlaWdodCthLnQsZD1vLmxpbmUuc2hhcGU7bj0iYWxsIj09PW8uaG92ZXJpbmZvP1siY291bnQiLCJwcm9iYWJpbGl0eSJdOihvLmhvdmVyaW5mb3x8IiIpLnNwbGl0KCIrIik7dmFyIGc9e3RyYWNlOm8sa2V5Om8udWlkLG1vZGVsOmkseDpoLHk6cCx3aWR0aDp1LGhlaWdodDpmLGhvdmVyb246by5ob3Zlcm9uLGhvdmVyaW5mb0l0ZW1zOm4sYXJyYW5nZW1lbnQ6by5hcnJhbmdlbWVudCxidW5kbGVjb2xvcnM6by5idW5kbGVjb2xvcnMsc29ydHBhdGhzOm8uc29ydHBhdGhzLGxhYmVsZm9udDpvLmxhYmVsZm9udCxjYXRlZ29yeWxhYmVsZm9udDpvLnRpY2tmb250LHBhdGhTaGFwZTpkLGRyYWdEaW1lbnNpb246bnVsbCxtYXJnaW46YSxwYXRoczpbXSxkaW1lbnNpb25zOltdLGdyYXBoRGl2OnQsdHJhY2VTZWxlY3Rpb246bnVsbCxwYXRoU2VsZWN0aW9uOm51bGwsZGltZW5zaW9uU2VsZWN0aW9uOm51bGx9O2kuZGltZW5zaW9ucyYmKFIoZyksUChnKSk7cmV0dXJuIGd9LmJpbmQoMCxlLHIpKSxsPWkuc2VsZWN0QWxsKCJnLnBhcmNhdHNsYXllciIpLmRhdGEoW251bGxdKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwYXJjYXRzbGF5ZXIiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTt2YXIgdT1sLnNlbGVjdEFsbCgiZy50cmFjZS5wYXJjYXRzIikuZGF0YShhLGYpLHY9dS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgcGFyY2F0cyIpO3UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIsICIrdC55KyIpIn0pLHYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwYXRocyIpO3ZhciB4PXUuc2VsZWN0KCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdGhzfSxmKTt4LmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSk7dmFyIHc9eC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwicGF0aCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7eSh3KSx4LmF0dHIoImQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0R9KSx3LmVtcHR5KCl8fHguc29ydChwKSx4LmV4aXQoKS5yZW1vdmUoKSx4Lm9uKCJtb3VzZW92ZXIiLGQpLm9uKCJtb3VzZW91dCIsZykub24oImNsaWNrIixtKSx2LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGltZW5zaW9ucyIpO3ZhciBrPXUuc2VsZWN0KCJnLmRpbWVuc2lvbnMiKS5zZWxlY3RBbGwoImcuZGltZW5zaW9uIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxmKTtrLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkaW1lbnNpb24iKSxrLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSxrLmV4aXQoKS5yZW1vdmUoKTt2YXIgVD1rLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllc30sZiksQT1ULmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXRlZ29yeSIpO1QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrdC55KyIpIn0pLEEuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJjYXRyZWN0IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksVC5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSxiKEEpO3ZhciB6PVQuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30sZik7ei5lYWNoKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSksei5hdHRyKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pO3ZhciBPPXouZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhbmRyZWN0IikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTt6LmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4iZml4ZWQiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50PyJkZWZhdWx0IjoicGVycGVuZGljdWxhciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/Im5zLXJlc2l6ZSI6Im1vdmUifSksXyhPKSx6LmV4aXQoKS5yZW1vdmUoKSxBLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY2F0bGFiZWwiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKTt2YXIgST1lLl9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3I7VC5zZWxlY3QoInRleHQuY2F0bGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24odCl7cmV0dXJuIGgodCk/InN0YXJ0IjoiZW5kIn0pLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsSSsiIC0xcHggIDFweCAycHgsICIrSSsiIDFweCAgMXB4IDJweCwgIitJKyIgIDFweCAtMXB4IDJweCwgIitJKyIgLTFweCAtMXB4IDJweCIpLnN0eWxlKCJmaWxsIiwicmdiKDAsIDAsIDApIikuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIGgodCk/dC53aWR0aCs1Oi01fSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0LzJ9KS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNhdGVnb3J5TGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe3MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwuY2F0ZWdvcnlsYWJlbGZvbnQpLGMuY29udmVydFRvVHNwYW5zKG4uc2VsZWN0KHRoaXMpLGUpfSksQS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImRpbWxhYmVsIiksVC5zZWxlY3QoInRleHQuZGltbGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImJhc2VsaW5lIikuYXR0cigiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4iZml4ZWQiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50PyJkZWZhdWx0IjoiZXctcmVzaXplIn0pLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoLzJ9KS5hdHRyKCJ5IiwtNSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KG4uc2VsZWN0KHRoaXMpLHQucGFyY2F0c1ZpZXdNb2RlbC5sYWJlbGZvbnQpfSksVC5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5vbigibW91c2VvdmVyIixNKS5vbigibW91c2VvdXQiLFMpLFQuZXhpdCgpLnJlbW92ZSgpLGsuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJue3g6dC54LHk6MH19KS5vbigiZHJhZ3N0YXJ0IixFKS5vbigiZHJhZyIsQykub24oImRyYWdlbmQiLEwpKSx1LmVhY2goZnVuY3Rpb24odCl7dC50cmFjZVNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKSx0LnBhdGhTZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKSx0LmRpbWVuc2lvblNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZGltZW5zaW9ucyIpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb24iKX0pLHUuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQua2V5fWZ1bmN0aW9uIGgodCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLHI9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZS0xXS5tb2RlbC5kaW1lbnNpb25JbmQ7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kPT09cn1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQubW9kZWwucmF3Q29sb3I+ZS5tb2RlbC5yYXdDb2xvcj8xOnQubW9kZWwucmF3Q29sb3I8ZS5tb2RlbC5yYXdDb2xvcj8tMTowfWZ1bmN0aW9uIGQodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpe28ucmFpc2VUb1RvcCh0aGlzKSx4KG4uc2VsZWN0KHRoaXMpKTt2YXIgZT12KHQpO2lmKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5lbWl0KCJwbG90bHlfaG92ZXIiLHtwb2ludHM6ZSxldmVudDpuLmV2ZW50fSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigibm9uZSIpKXt2YXIgcixpLHMsYz1uLm1vdXNlKHRoaXMpWzBdLHU9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGY9dC5wYXJjYXRzVmlld01vZGVsLnRyYWNlLGg9dS5fZnVsbExheW91dCxwPWguX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3Iocz0wO3M8dC5sZWZ0WHMubGVuZ3RoLTE7cysrKWlmKHQubGVmdFhzW3NdK3QuZGltV2lkdGhzW3NdLTI8PWMmJmM8PXQubGVmdFhzW3MrMV0rMil7dmFyIGc9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbc10sbT10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tzKzFdO3I9KGcueCtnLndpZHRoK20ueCkvMixpPSh0LnRvcFlzW3NdK3QudG9wWXNbcysxXSt0LmhlaWdodCkvMjticmVha312YXIgeT10LnBhcmNhdHNWaWV3TW9kZWwueCtyLGI9dC5wYXJjYXRzVmlld01vZGVsLnkraSxfPWwubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pLHc9dC5tb2RlbC5jb3VudCxrPXcvdC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LFQ9e2NvdW50TGFiZWw6dyxwcm9iYWJpbGl0eUxhYmVsOmsudG9GaXhlZCgzKX0sQT1bXTstMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZBLnB1c2goWyJDb3VudDoiLFQuY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiZBLnB1c2goWyJQOiIsVC5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKCIgIikpO3ZhciBNPUEuam9pbigiPGJyPiIpLFM9bi5tb3VzZSh1KVswXTthLmxvbmVIb3Zlcih7dHJhY2U6Zix4OnktcC5sZWZ0K2QubGVmdCx5OmItcC50b3ArZC50b3AsdGV4dDpNLGNvbG9yOnQubW9kZWwuY29sb3IsYm9yZGVyQ29sb3I6ImJsYWNrIixmb250RmFtaWx5OidNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTAsZm9udENvbG9yOl8saWRlYWxBbGlnbjpTPHk/InJpZ2h0IjoibGVmdCIsaG92ZXJ0ZW1wbGF0ZTooZi5saW5lfHx7fSkuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOlQsZXZlbnREYXRhOlt7ZGF0YTpmLl9pbnB1dCxmdWxsRGF0YTpmLGNvdW50OncscHJvYmFiaWxpdHk6a31dfSx7Y29udGFpbmVyOmguX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOmguX3BhcGVyLm5vZGUoKSxnZDp1fSl9fX1mdW5jdGlvbiBnKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmKHkobi5zZWxlY3QodGhpcykpLGEubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSksdC5wYXJjYXRzVmlld01vZGVsLnBhdGhTZWxlY3Rpb24uc29ydChwKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpKXt2YXIgZT12KHQpO3QucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5lbWl0KCJwbG90bHlfdW5ob3ZlciIse3BvaW50czplLGV2ZW50Om4uZXZlbnR9KX19ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9W10scj16KHQucGFyY2F0c1ZpZXdNb2RlbCksbj0wO248dC5tb2RlbC52YWx1ZUluZHMubGVuZ3RoO24rKyl7dmFyIGk9dC5tb2RlbC52YWx1ZUluZHNbbl07ZS5wdXNoKHtjdXJ2ZU51bWJlcjpyLHBvaW50TnVtYmVyOml9KX1yZXR1cm4gZX1mdW5jdGlvbiBtKHQpe2lmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7dmFyIGU9dih0KTt0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2NsaWNrIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudH0pfX1mdW5jdGlvbiB5KHQpe3QuYXR0cigiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY29sb3J9KS5hdHRyKCJmaWxsLW9wYWNpdHkiLC42KS5hdHRyKCJzdHJva2UiLCJsaWdodGdyYXkiKS5hdHRyKCJzdHJva2Utd2lkdGgiLC4yKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSl9ZnVuY3Rpb24geCh0KXt0LmF0dHIoImZpbGwtb3BhY2l0eSIsLjgpLmF0dHIoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIGwubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pfSkuYXR0cigic3Ryb2tlLXdpZHRoIiwuMyl9ZnVuY3Rpb24gYih0KXt0LnNlbGVjdCgicmVjdC5jYXRyZWN0IikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKX1mdW5jdGlvbiBfKHQpe3QuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLC4yKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSkuYXR0cigiZmlsbC1vcGFjaXR5IiwxKX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLHI9dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25JbmQsbj10LmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLmNhdGVnb3J5SW5kO3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5tb2RlbC5jYXRlZ29yeUluZHNbcl09PT1uJiZlLm1vZGVsLmNvbG9yPT09dC5jb2xvcn0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLmRhdHVtKCkucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixhPW4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0Iiksbz1bXTthLmVhY2goZnVuY3Rpb24odCl7dyh0KS5lYWNoKGZ1bmN0aW9uKHQpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG8sdih0KSl9KX0pLGkuZW1pdChlLHtwb2ludHM6byxldmVudDpyfSl9ZnVuY3Rpb24gVCh0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuZGF0dW0oKSxhPWkucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixvPXcoaSkscz1bXTtvLmVhY2goZnVuY3Rpb24odCl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocyx2KHQpKX0pLGEuZW1pdChlLHtwb2ludHM6cyxldmVudDpyfSl9ZnVuY3Rpb24gQSh0LGUpe3ZhciByLGksYT1uLnNlbGVjdChlLnBhcmVudE5vZGUpLnNlbGVjdCgicmVjdC5jYXRyZWN0Iiksbz1hLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWEuZGF0dW0oKSxsPXMucGFyY2F0c1ZpZXdNb2RlbCxjPWwubW9kZWwuZGltZW5zaW9uc1tzLm1vZGVsLmRpbWVuc2lvbkluZF0sdT1sLnRyYWNlLGY9by50b3Arby5oZWlnaHQvMjtsLmRpbWVuc2lvbnMubGVuZ3RoPjEmJmMuZGlzcGxheUluZD09PWwuZGltZW5zaW9ucy5sZW5ndGgtMT8ocj1vLmxlZnQsaT0ibGVmdCIpOihyPW8ubGVmdCtvLndpZHRoLGk9InJpZ2h0Iik7dmFyIGg9cy5tb2RlbC5jb3VudCxwPXMubW9kZWwuY2F0ZWdvcnlMYWJlbCxkPWgvcy5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LGc9e2NvdW50TGFiZWw6aCxjYXRlZ29yeUxhYmVsOnAscHJvYmFiaWxpdHlMYWJlbDpkLnRvRml4ZWQoMyl9LHY9W107LTEhPT1zLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigiY291bnQiKSYmdi5wdXNoKFsiQ291bnQ6IixnLmNvdW50TGFiZWxdLmpvaW4oIiAiKSksLTEhPT1zLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigicHJvYmFiaWxpdHkiKSYmdi5wdXNoKFsiUCgiK2cuY2F0ZWdvcnlMYWJlbCsiKToiLGcucHJvYmFiaWxpdHlMYWJlbF0uam9pbigiICIpKTt2YXIgbT12LmpvaW4oIjxicj4iKTtyZXR1cm57dHJhY2U6dSx4OnItdC5sZWZ0LHk6Zi10LnRvcCx0ZXh0Om0sY29sb3I6ImxpZ2h0Z3JheSIsYm9yZGVyQ29sb3I6ImJsYWNrIixmb250RmFtaWx5OidNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTIsZm9udENvbG9yOiJibGFjayIsaWRlYWxBbGlnbjppLGhvdmVydGVtcGxhdGU6dS5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6ZyxldmVudERhdGE6W3tkYXRhOnUuX2lucHV0LGZ1bGxEYXRhOnUsY291bnQ6aCxjYXRlZ29yeTpwLHByb2JhYmlsaXR5OmR9XX19ZnVuY3Rpb24gTSh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJi0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7aWYobi5tb3VzZSh0aGlzKVsxXTwtMSlyZXR1cm47dmFyIGUscj10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsaT1yLl9mdWxsTGF5b3V0LHM9aS5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb247aWYoImNvbG9yIj09PWM/KCFmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5kYXR1bSgpLHI9dyhlKTt4KHIpLHIuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKX0pLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yPT09ZS5jb2xvcn0pLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyksbi5zZWxlY3QodGhpcykuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSl9KX0odGhpcyksVCh0aGlzLCJwbG90bHlfaG92ZXIiLG4uZXZlbnQpKTooIWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT13KHQpO3goZSksZS5lYWNoKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSl9KSxuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDIuNSl9KHRoaXMpLGsodGhpcywicGxvdGx5X2hvdmVyIixuLmV2ZW50KSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigibm9uZSIpKSJjYXRlZ29yeSI9PT1jP2U9QShzLHRoaXMpOiJjb2xvciI9PT1jP2U9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPW4uc2VsZWN0KGUpLmRhdHVtKCkscz1vLmNhdGVnb3J5Vmlld01vZGVsLGM9cy5wYXJjYXRzVmlld01vZGVsLHU9Yy5tb2RlbC5kaW1lbnNpb25zW3MubW9kZWwuZGltZW5zaW9uSW5kXSxmPWMudHJhY2UsaD1hLnkrYS5oZWlnaHQvMjtjLmRpbWVuc2lvbnMubGVuZ3RoPjEmJnUuZGlzcGxheUluZD09PWMuZGltZW5zaW9ucy5sZW5ndGgtMT8ocj1hLmxlZnQsaT0ibGVmdCIpOihyPWEubGVmdCthLndpZHRoLGk9InJpZ2h0Iik7dmFyIHA9cy5tb2RlbC5jYXRlZ29yeUxhYmVsLGQ9by5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LGc9MDtvLmNhdGVnb3J5Vmlld01vZGVsLmJhbmRzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jb2xvcj09PW8uY29sb3ImJihnKz10LmNvdW50KX0pO3ZhciB2PXMubW9kZWwuY291bnQsbT0wO2MucGF0aFNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKHQpe3QubW9kZWwuY29sb3I9PT1vLmNvbG9yJiYobSs9dC5tb2RlbC5jb3VudCl9KTt2YXIgeT1nL2QseD1nL20sYj1nL3YsXz17Y291bnRMYWJlbDpkLGNhdGVnb3J5TGFiZWw6cCxwcm9iYWJpbGl0eUxhYmVsOnkudG9GaXhlZCgzKX0sdz1bXTstMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZ3LnB1c2goWyJDb3VudDoiLF8uY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiYody5wdXNoKCJQKGNvbG9yIFx1MjIyOSAiK3ArIik6ICIrXy5wcm9iYWJpbGl0eUxhYmVsKSx3LnB1c2goIlAoIitwKyIgfCBjb2xvcik6ICIreC50b0ZpeGVkKDMpKSx3LnB1c2goIlAoY29sb3IgfCAiK3ArIik6ICIrYi50b0ZpeGVkKDMpKSk7dmFyIGs9dy5qb2luKCI8YnI+IiksVD1sLm1vc3RSZWFkYWJsZShvLmNvbG9yLFsiYmxhY2siLCJ3aGl0ZSJdKTtyZXR1cm57dHJhY2U6Zix4OnItdC5sZWZ0LHk6aC10LnRvcCx0ZXh0OmssY29sb3I6by5jb2xvcixib3JkZXJDb2xvcjoiYmxhY2siLGZvbnRGYW1pbHk6J01vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlJyxmb250Q29sb3I6VCxmb250U2l6ZToxMCxpZGVhbEFsaWduOmksaG92ZXJ0ZW1wbGF0ZTpmLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpfLGV2ZW50RGF0YTpbe2RhdGE6Zi5faW5wdXQsZnVsbERhdGE6ZixjYXRlZ29yeTpwLGNvdW50OmQscHJvYmFiaWxpdHk6eSxjYXRlZ29yeWNvdW50OnYsY29sb3Jjb3VudDptLGJhbmRjb2xvcmNvdW50Omd9XX19KHMsdGhpcyk6ImRpbWVuc2lvbiI9PT1jJiYoZT1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBuLnNlbGVjdChlLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJnLmNhdGVnb3J5Iikuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKS5lYWNoKGZ1bmN0aW9uKCl7ci5wdXNoKEEodCx0aGlzKSl9KSxyfShzLHRoaXMpKSxlJiZhLm11bHRpSG92ZXJzKGUse2NvbnRhaW5lcjppLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjppLl9wYXBlci5ub2RlKCksZ2Q6cn0pfX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbDtpZighZS5kcmFnRGltZW5zaW9uJiYoeShlLnBhdGhTZWxlY3Rpb24pLGIoZS5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKCJnLmNhdGVnb3J5IikpLF8oZS5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKCJnLmNhdGVnb3J5Iikuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikpLGEubG9uZVVuaG92ZXIoZS5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLGUucGF0aFNlbGVjdGlvbi5zb3J0KHApLC0xPT09ZS5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpKXsiY29sb3IiPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb24/VCh0aGlzLCJwbG90bHlfdW5ob3ZlciIsbi5ldmVudCk6ayh0aGlzLCJwbG90bHlfdW5ob3ZlciIsbi5ldmVudCl9fWZ1bmN0aW9uIEUodCl7ImZpeGVkIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmKHQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9dC5tb2RlbC5kaXNwbGF5SW5kLHQuaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kcz10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pLHQuZHJhZ0hhc01vdmVkPSExLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1udWxsLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLm1vdXNlKHRoaXMpWzBdLGk9bi5tb3VzZSh0aGlzKVsxXTstMjw9ciYmcjw9ZS53aWR0aCsyJiYtMjw9aSYmaTw9ZS5oZWlnaHQrMiYmKHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1lLm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM9dC5tb2RlbC5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksZS5tb2RlbC5kcmFnWT1lLnksby5yYWlzZVRvVG9wKHRoaXMucGFyZW50Tm9kZSksbi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5lYWNoKGZ1bmN0aW9uKGUpe2UueTxpJiZpPD1lLnkrZS5oZWlnaHQmJih0LnBvdGVudGlhbENsaWNrQmFuZD10aGlzKX0pKX0pLHQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uPXQsYS5sb25lVW5ob3Zlcih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSl9ZnVuY3Rpb24gQyh0KXtpZigiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnSGFzTW92ZWQ9ITAsbnVsbCE9PXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpKXt2YXIgZT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kLHI9ZS0xLGk9ZSsxLGE9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZV07aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIG89YS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF07by5tb2RlbC5kcmFnWSs9bi5ldmVudC5keTt2YXIgcz1vLm1vZGVsLmRyYWdZLGw9by5tb2RlbC5kaXNwbGF5SW5kLGM9YS5jYXRlZ29yaWVzLHU9Y1tsLTFdLGY9Y1tsKzFdO3ZvaWQgMCE9PXUmJnM8dS55K3UuaGVpZ2h0LzImJihvLm1vZGVsLmRpc3BsYXlJbmQ9dS5tb2RlbC5kaXNwbGF5SW5kLHUubW9kZWwuZGlzcGxheUluZD1sKSx2b2lkIDAhPT1mJiZzK28uaGVpZ2h0PmYueStmLmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPWYubW9kZWwuZGlzcGxheUluZCxmLm1vZGVsLmRpc3BsYXlJbmQ9bCksdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW8ubW9kZWwuZGlzcGxheUluZH1pZihudWxsPT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kfHwiZnJlZWZvcm0iPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50KXthLm1vZGVsLmRyYWdYPW4uZXZlbnQueDt2YXIgaD10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tyXSxwPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2ldO3ZvaWQgMCE9PWgmJmEubW9kZWwuZHJhZ1g8aC54K2gud2lkdGgmJihhLm1vZGVsLmRpc3BsYXlJbmQ9aC5tb2RlbC5kaXNwbGF5SW5kLGgubW9kZWwuZGlzcGxheUluZD1lKSx2b2lkIDAhPT1wJiZhLm1vZGVsLmRyYWdYK2Eud2lkdGg+cC54JiYoYS5tb2RlbC5kaXNwbGF5SW5kPXAubW9kZWwuZGlzcGxheUluZCxwLm1vZGVsLmRpc3BsYXlJbmQ9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCksdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1hLm1vZGVsLmRpc3BsYXlJbmR9Uih0LnBhcmNhdHNWaWV3TW9kZWwpLFAodC5wYXJjYXRzVmlld01vZGVsKSxJKHQucGFyY2F0c1ZpZXdNb2RlbCksTyh0LnBhcmNhdHNWaWV3TW9kZWwpfX1mdW5jdGlvbiBMKHQpe2lmKCJmaXhlZCIhPT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQmJm51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJmb250LXdlaWdodCIsIm5vcm1hbCIpO3ZhciBlPXt9LHI9eih0LnBhcmNhdHNWaWV3TW9kZWwpLGE9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSxvPXQuaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kcy5zb21lKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1hW2VdfSk7byYmYS5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7dmFyIGk9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbbl0uY29udGFpbmVySW5kO2VbImRpbWVuc2lvbnNbIitpKyJdLmRpc3BsYXlpbmRleCJdPXJ9KTt2YXIgcz0hMTtpZihudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXt2YXIgbD10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KTtpZihzPXQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzLnNvbWUoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCE9PWxbZV19KSl7dmFyIGM9dC5tb2RlbC5jYXRlZ29yaWVzLnNsaWNlKCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSksdT1jLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeVZhbHVlfSksZj1jLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeUxhYmVsfSk7ZVsiZGltZW5zaW9uc1siK3QubW9kZWwuY29udGFpbmVySW5kKyJdLmNhdGVnb3J5YXJyYXkiXT1bdV0sZVsiZGltZW5zaW9uc1siK3QubW9kZWwuY29udGFpbmVySW5kKyJdLnRpY2t0ZXh0Il09W2ZdLGVbImRpbWVuc2lvbnNbIit0Lm1vZGVsLmNvbnRhaW5lckluZCsiXS5jYXRlZ29yeW9yZGVyIl09ImFycmF5In19aWYoLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpJiYhdC5kcmFnSGFzTW92ZWQmJnQucG90ZW50aWFsQ2xpY2tCYW5kJiYoImNvbG9yIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uP1QodC5wb3RlbnRpYWxDbGlja0JhbmQsInBsb3RseV9jbGljayIsbi5ldmVudC5zb3VyY2VFdmVudCk6ayh0LnBvdGVudGlhbENsaWNrQmFuZCwicGxvdGx5X2NsaWNrIixuLmV2ZW50LnNvdXJjZUV2ZW50KSksdC5tb2RlbC5kcmFnWD1udWxsLG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpdC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZF0uY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdLm1vZGVsLmRyYWdZPW51bGwsdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW51bGw7dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1udWxsLHQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uPW51bGwsdC5kcmFnSGFzTW92ZWQ9bnVsbCx0LnBvdGVudGlhbENsaWNrQmFuZD1udWxsLFIodC5wYXJjYXRzVmlld01vZGVsKSxQKHQucGFyY2F0c1ZpZXdNb2RlbCksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oMzAwKS5lYXNlKCJjdWJpYy1pbi1vdXQiKS5lYWNoKGZ1bmN0aW9uKCl7SSh0LnBhcmNhdHNWaWV3TW9kZWwsITApLE8odC5wYXJjYXRzVmlld01vZGVsLCEwKX0pLmVhY2goImVuZCIsZnVuY3Rpb24oKXsob3x8cykmJmkucmVzdHlsZSh0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsZSxbcl0pfSl9fWZ1bmN0aW9uIHoodCl7Zm9yKHZhciBlLHI9dC5ncmFwaERpdi5fZnVsbERhdGEsbj0wO248ci5sZW5ndGg7bisrKWlmKHQua2V5PT09cltuXS51aWQpe2U9bjticmVha31yZXR1cm4gZX1mdW5jdGlvbiBPKHQsZSl7dmFyIHI7dm9pZCAwPT09ZSYmKGU9ITEpLHQucGF0aFNlbGVjdGlvbi5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdGhzfSxmKSwocj10LnBhdGhTZWxlY3Rpb24sZT9yLnRyYW5zaXRpb24oKTpyKS5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSl9ZnVuY3Rpb24gSSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/dC50cmFuc2l0aW9uKCk6dH12b2lkIDA9PT1lJiYoZT0hMSksdC5kaW1lbnNpb25TZWxlY3Rpb24uZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxmKTt2YXIgaT10LmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXN9LGYpO3IodC5kaW1lbnNpb25TZWxlY3Rpb24pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSxyKGkpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwLCAiK3QueSsiKSJ9KSxpLnNlbGVjdCgiLmRpbWxhYmVsIikudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pLGkuc2VsZWN0KCIuY2F0bGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24odCl7cmV0dXJuIGgodCk/InN0YXJ0IjoiZW5kIn0pLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpP3Qud2lkdGgrNTotNX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscjtoKHQpPyhlPXQud2lkdGgrNSxyPSJzdGFydCIpOihlPS01LHI9ImVuZCIpLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgidHNwYW4iKS5hdHRyKCJ4IixlKS5hdHRyKCJ0ZXh0LWFuY2hvciIscil9KTt2YXIgYT1pLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmFuZHN9LGYpLHM9YS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFuZHJlY3QiKS5hdHRyKCJjdXJzb3IiLCJtb3ZlIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTthLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdC55fSksXyhzKSxhLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSxhLmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBEKHQsZSxyLGksYSl7dmFyIG8scyxsPVtdLGM9W107Zm9yKHM9MDtzPHIubGVuZ3RoLTE7cysrKW89bi5pbnRlcnBvbGF0ZU51bWJlcihyW3NdK3Rbc10sdFtzKzFdKSxsLnB1c2gobyhhKSksYy5wdXNoKG8oMS1hKSk7dmFyIHU9Ik0gIit0WzBdKyIsIitlWzBdO2Zvcih1Kz0ibCIrclswXSsiLDAgIixzPTE7czxyLmxlbmd0aDtzKyspdSs9IkMiK2xbcy0xXSsiLCIrZVtzLTFdKyIgIitjW3MtMV0rIiwiK2Vbc10rIiAiK3Rbc10rIiwiK2Vbc10sdSs9ImwiK3Jbc10rIiwwICI7Zm9yKHUrPSJsMCwiK2krIiAiLHUrPSJsIC0iK3Jbci5sZW5ndGgtMV0rIiwwICIscz1yLmxlbmd0aC0yO3M+PTA7cy0tKXUrPSJDIitjW3NdKyIsIisoZVtzKzFdK2kpKyIgIitsW3NdKyIsIisoZVtzXStpKSsiICIrKHRbc10rcltzXSkrIiwiKyhlW3NdK2kpLHUrPSJsLSIrcltzXSsiLDAgIjtyZXR1cm4gdSs9IloifWZ1bmN0aW9uIFAodCl7dmFyIGU9dC5kaW1lbnNpb25zLHI9dC5tb2RlbCxuPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KX0pLGk9dC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSl9KSxhPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pLG89dC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5kaW1lbnNpb25JbmR9KSxzPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSxsPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSksYz1bXTtmb3IodmFyIHUgaW4gci5wYXRocylyLnBhdGhzLmhhc093blByb3BlcnR5KHUpJiZjLnB1c2goci5wYXRoc1t1XSk7ZnVuY3Rpb24gZih0KXt2YXIgZT10LmNhdGVnb3J5SW5kcy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaVtlXVt0XX0pO3JldHVybiBvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pfWMuc29ydChmdW5jdGlvbihlLHIpe3ZhciBuPWYoZSksaT1mKHIpO3JldHVybiJiYWNrd2FyZCI9PT10LnNvcnRwYXRocyYmKG4ucmV2ZXJzZSgpLGkucmV2ZXJzZSgpKSxuLnB1c2goZS52YWx1ZUluZHNbMF0pLGkucHVzaChyLnZhbHVlSW5kc1swXSksdC5idW5kbGVjb2xvcnMmJihuLnVuc2hpZnQoZS5yYXdDb2xvciksaS51bnNoaWZ0KHIucmF3Q29sb3IpKSxuPGk/LTE6bj5pPzE6MH0pO2Zvcih2YXIgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLHA9ZVswXS5tb2RlbC5jb3VudCxkPWVbMF0uY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIHYsbT1jW2ddO3Y9cD4wP2QqKG0uY291bnQvcCk6MDtmb3IodmFyIHkseD1uZXcgQXJyYXkobi5sZW5ndGgpLGI9MDtiPG0uY2F0ZWdvcnlJbmRzLmxlbmd0aDtiKyspe3ZhciBfPW0uY2F0ZWdvcnlJbmRzW2JdLHc9aVtiXVtfXSxrPWFbYl07eFtrXT1uW2tdW3ddLG5ba11bd10rPXY7dmFyIFQ9dC5kaW1lbnNpb25zW2tdLmNhdGVnb3JpZXNbd10sQT1ULmJhbmRzLmxlbmd0aCxNPVQuYmFuZHNbQS0xXTtpZih2b2lkIDA9PT1NfHxtLnJhd0NvbG9yIT09TS5yYXdDb2xvcil7dmFyIFM9dm9pZCAwPT09TT8wOk0ueStNLmhlaWdodDtULmJhbmRzLnB1c2goe2tleTpTLGNvbG9yOm0uY29sb3IscmF3Q29sb3I6bS5yYXdDb2xvcixoZWlnaHQ6dix3aWR0aDpULndpZHRoLGNvdW50Om0uY291bnQseTpTLGNhdGVnb3J5Vmlld01vZGVsOlQscGFyY2F0c1ZpZXdNb2RlbDp0fSl9ZWxzZXt2YXIgRT1ULmJhbmRzW0EtMV07RS5oZWlnaHQrPXYsRS5jb3VudCs9bS5jb3VudH19eT0iaHNwbGluZSI9PT10LnBhdGhTaGFwZT9EKHMseCxsLHYsLjUpOkQocyx4LGwsdiwwKSxoW2ddPXtrZXk6bS52YWx1ZUluZHNbMF0sbW9kZWw6bSxoZWlnaHQ6dixsZWZ0WHM6cyx0b3BZczp4LGRpbVdpZHRoczpsLHN2Z0Q6eSxwYXJjYXRzVmlld01vZGVsOnR9fXQucGF0aHM9aH1mdW5jdGlvbiBSKHQpe3ZhciBlPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2Rpc3BsYXlJbmQ6dC5kaXNwbGF5SW5kLGRpbWVuc2lvbkluZDp0LmRpbWVuc2lvbkluZH19KTtlLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pO3ZhciByPVtdO2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dLmRpbWVuc2lvbkluZCxhPXQubW9kZWwuZGltZW5zaW9uc1tpXTtyLnB1c2goRih0LGEpKX10LmRpbWVuc2lvbnM9cn1mdW5jdGlvbiBGKHQsZSl7dmFyIHIsbj10Lm1vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLGk9ZS5kaXNwbGF5SW5kO3I9NDArKG4+MT8odC53aWR0aC04MC0xNikvKG4tMSk6MCkqaTt2YXIgYSxvLHMsbCxjLHU9W10sZj10Lm1vZGVsLm1heENhdHMsaD1lLmNhdGVnb3JpZXMubGVuZ3RoLHA9ZS5jb3VudCxkPXQuaGVpZ2h0LTgqKGYtMSksZz04KihmLWgpLzIsdj1lLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5SW5kOnQuZGlzcGxheUluZCxjYXRlZ29yeUluZDp0LmNhdGVnb3J5SW5kfX0pO2Zvcih2LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pLGM9MDtjPGg7YysrKWw9dltjXS5jYXRlZ29yeUluZCxvPWUuY2F0ZWdvcmllc1tsXSxhPXA+MD9vLmNvdW50L3AqZDowLHM9e2tleTpvLnZhbHVlSW5kc1swXSxtb2RlbDpvLHdpZHRoOjE2LGhlaWdodDphLHk6bnVsbCE9PW8uZHJhZ1k/by5kcmFnWTpnLGJhbmRzOltdLHBhcmNhdHNWaWV3TW9kZWw6dH0sZz1nK2ErOCx1LnB1c2gocyk7cmV0dXJue2tleTplLmRpbWVuc2lvbkluZCx4Om51bGwhPT1lLmRyYWdYP2UuZHJhZ1g6cix5OjAsd2lkdGg6MTYsbW9kZWw6ZSxjYXRlZ29yaWVzOnUscGFyY2F0c1ZpZXdNb2RlbDp0LGRyYWdDYXRlZ29yeURpc3BsYXlJbmQ6bnVsbCxkcmFnRGltZW5zaW9uRGlzcGxheUluZDpudWxsLGluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM6bnVsbCxpbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM6bnVsbCxkcmFnSGFzTW92ZWQ6bnVsbCxwb3RlbnRpYWxDbGlja0JhbmQ6bnVsbH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3Uocix0LG4sZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcyNCwiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGkiOjczNSxkMzoxNTQsdGlueWNvbG9yMjo1MjF9XSwxMDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGFyY2F0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YS5fcGFwZXIscz1hLl9zaXplO24odCxvLGUse3dpZHRoOnMudyxoZWlnaHQ6cy5oLG1hcmdpbjp7dDpzLnQscjpzLnIsYjpzLmIsbDpzLmx9fSxyLGkpfX0seyIuL3BhcmNhdHMiOjEwMTN9XSwxMDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPXtkb21haW46cyh7bmFtZToicGFyY29vcmRzIix0cmFjZTohMCxlZGl0VHlwZToiY2FsYyJ9KSxob3ZlcmxhYmVsOnZvaWQgMCxsYWJlbGZvbnQ6byh7ZWRpdFR5cGU6ImNhbGMifSksdGlja2ZvbnQ6byh7ZWRpdFR5cGU6ImNhbGMifSkscmFuZ2Vmb250Om8oe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6YygiZGltZW5zaW9uIix7bGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aWNrdmFsczpsKHt9LGEudGlja3ZhbHMse2VkaXRUeXBlOiJjYWxjIn0pLHRpY2t0ZXh0Omwoe30sYS50aWNrdGV4dCx7ZWRpdFR5cGU6ImNhbGMifSksdGlja2Zvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIzcyIsZWRpdFR5cGU6ImNhbGMifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0sY29uc3RyYWludHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6IjEtMiIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSxtdWx0aXNlbGVjdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9KSxsaW5lOmwobigibGluZSIse2NvbG9yc2NhbGVEZmx0OiJWaXJpZGlzIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOmksZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NjAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc3NH1dLDEwMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoImQzIiksYT10KCIuLi8uLi9saWIvZ3VwIikua2V5RnVuLG89dCgiLi4vLi4vbGliL2d1cCIpLnJlcGVhdCxzPXQoIi4uLy4uL2xpYiIpLnNvcnRlckFzYyxsPW4uYmFyLnNuYXBSYXRpbztmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQqKDEtbCkrZSpsfXZhciB1PW4uYmFyLnNuYXBDbG9zZTtmdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQqKDEtdSkrZSp1fWZ1bmN0aW9uIGgodCxlLHIpe2lmKGQoZSxyKSlyZXR1cm4gZTtmb3IodmFyIG49dFswXSxpPW4sYT0xO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2lmKGU8ZihuLG8pKXJldHVybiBjKG4saSk7aWYoZTxvfHxhPT09dC5sZW5ndGgtMSlyZXR1cm4gYyhvLG4pO2k9bixuPW99fWZ1bmN0aW9uIHAodCxlLHIpe2lmKGQoZSxyKSlyZXR1cm4gZTtmb3IodmFyIG49dFt0Lmxlbmd0aC0xXSxpPW4sYT10Lmxlbmd0aC0yO2E+PTA7YS0tKXt2YXIgbz10W2FdO2lmKGU+ZihuLG8pKXJldHVybiBjKG4saSk7aWYoZT5vfHxhPT09dC5sZW5ndGgtMSlyZXR1cm4gYyhvLG4pO2k9bixuPW99fWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZih0Pj1lW3JdWzBdJiZ0PD1lW3JdWzFdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGcodCl7dC5hdHRyKCJ4Iiwtbi5iYXIuY2FwdHVyZVdpZHRoLzIpLmF0dHIoIndpZHRoIixuLmJhci5jYXB0dXJlV2lkdGgpfWZ1bmN0aW9uIHYodCl7dC5hdHRyKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLmF0dHIoImZpbGwiLCJ5ZWxsb3ciKS5hdHRyKCJvcGFjaXR5IiwwKX1mdW5jdGlvbiBtKHQpe2lmKCF0LmJydXNoLmZpbHRlclNwZWNpZmllZClyZXR1cm4iMCwiK3QuaGVpZ2h0O2Zvcih2YXIgZSxyLG4saT15KHQuYnJ1c2guZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpLHQuaGVpZ2h0KSxhPVswXSxvPWkubGVuZ3RoP2lbMF1bMF06bnVsbCxzPTA7czxpLmxlbmd0aDtzKyspcj0oZT1pW3NdKVsxXS1lWzBdLGEucHVzaChvKSxhLnB1c2gociksKG49cysxKTxpLmxlbmd0aCYmKG89aVtuXVswXS1lWzFdKTtyZXR1cm4gYS5wdXNoKHQuaGVpZ2h0KSxhfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0KmV9KS5zb3J0KHMpfSl9ZnVuY3Rpb24geCgpe2kuc2VsZWN0KGRvY3VtZW50LmJvZHkpLnN0eWxlKCJjdXJzb3IiLG51bGwpfWZ1bmN0aW9uIGIodCl7dC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixtKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9aS5zZWxlY3QodCkuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0LCAuaGlnaGxpZ2h0LXNoYWRvdyIpO2IoZT9yLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLmJhci5zbmFwRHVyYXRpb24pLmVhY2goImVuZCIsZSk6cil9ZnVuY3Rpb24gdyh0LGUpe3ZhciByLGk9dC5icnVzaCxhPU5hTixvPXt9O2lmKGkuZmlsdGVyU3BlY2lmaWVkKXt2YXIgcz10LmhlaWdodCxsPWkuZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpLGM9eShsLHMpLHU9TmFOLGY9TmFOLGg9TmFOO2ZvcihyPTA7cjw9Yy5sZW5ndGg7cisrKXt2YXIgcD1jW3JdO2lmKHAmJnBbMF08PWUmJmU8PXBbMV0pe3U9cjticmVha31pZihmPXI/ci0xOk5hTixwJiZwWzBdPmUpe2g9cjticmVha319aWYoYT11LGlzTmFOKGEpJiYoYT1pc05hTihmKXx8aXNOYU4oaCk/aXNOYU4oZik/aDpmOmUtY1tmXVsxXTxjW2hdWzBdLWU/ZjpoKSwhaXNOYU4oYSkpe3ZhciBkPWNbYV0sZz1mdW5jdGlvbih0LGUpe3ZhciByPW4uYmFyLmhhbmRsZUhlaWdodDtpZighKGU+dFsxXStyfHxlPHRbMF0tcikpcmV0dXJuIGU+PS45KnRbMV0rLjEqdFswXT8ibiI6ZTw9LjkqdFswXSsuMSp0WzFdPyJzIjoibnMifShkLGUpO2cmJihvLmludGVydmFsPWxbYV0sby5pbnRlcnZhbFBpeD1kLG8ucmVnaW9uPWcpfX1pZih0Lm9yZGluYWwmJiFvLnJlZ2lvbil7dmFyIHY9dC51bml0VGlja3ZhbHMsbT10LnVuaXRUb1BhZGRlZFB4LmludmVydChlKTtmb3Iocj0wO3I8di5sZW5ndGg7cisrKXt2YXIgeD1bLjI1KnZbTWF0aC5tYXgoci0xLDApXSsuNzUqdltyXSwuMjUqdltNYXRoLm1pbihyKzEsdi5sZW5ndGgtMSldKy43NSp2W3JdXTtpZihtPj14WzBdJiZtPD14WzFdKXtvLmNsaWNrYWJsZU9yZGluYWxSYW5nZT14O2JyZWFrfX19cmV0dXJuIG99ZnVuY3Rpb24gayh0KXt0Lm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHQpe2lmKGkuZXZlbnQucHJldmVudERlZmF1bHQoKSwhdC5wYXJlbnQuaW5CcnVzaERyYWcpe3ZhciBlPXcodCx0LmhlaWdodC1pLm1vdXNlKHRoaXMpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcpLHI9ImNyb3NzaGFpciI7ZS5jbGlja2FibGVPcmRpbmFsUmFuZ2U/cj0icG9pbnRlciI6ZS5yZWdpb24mJihyPWUucmVnaW9uKyItcmVzaXplIiksaS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoImN1cnNvciIscil9fSkub24oIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKHQpe3QucGFyZW50LmluQnJ1c2hEcmFnfHx4KCl9KS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKHQpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dC5oZWlnaHQtaS5tb3VzZSh0aGlzKVsxXS0yKm4udmVydGljYWxQYWRkaW5nLHI9dC51bml0VG9QYWRkZWRQeC5pbnZlcnQoZSksYT10LmJydXNoLG89dyh0LGUpLHM9by5pbnRlcnZhbCxsPWEuc3ZnQnJ1c2g7aWYobC53YXNEcmFnZ2VkPSExLGwuZ3JhYmJpbmdCYXI9Im5zIj09PW8ucmVnaW9uLGwuZ3JhYmJpbmdCYXIpe3ZhciBjPXMubWFwKHQudW5pdFRvUGFkZGVkUHgpO2wuZ3JhYlBvaW50PWUtY1swXS1uLnZlcnRpY2FsUGFkZGluZyxsLmJhckxlbmd0aD1jWzFdLWNbMF19bC5jbGlja2FibGVPcmRpbmFsUmFuZ2U9by5jbGlja2FibGVPcmRpbmFsUmFuZ2UsbC5zdGF5aW5nSW50ZXJ2YWxzPXQubXVsdGlzZWxlY3QmJmEuZmlsdGVyU3BlY2lmaWVkP2EuZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpOltdLHMmJihsLnN0YXlpbmdJbnRlcnZhbHM9bC5zdGF5aW5nSW50ZXJ2YWxzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdFswXSE9PXNbMF0mJnRbMV0hPT1zWzFdfSkpLGwuc3RhcnRFeHRlbnQ9by5yZWdpb24/c1sicyI9PT1vLnJlZ2lvbj8xOjBdOnIsdC5wYXJlbnQuaW5CcnVzaERyYWc9ITAsbC5icnVzaFN0YXJ0Q2FsbGJhY2soKX0pLm9uKCJkcmFnIixmdW5jdGlvbih0KXtpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBlPXQuaGVpZ2h0LWkubW91c2UodGhpcylbMV0tMipuLnZlcnRpY2FsUGFkZGluZyxyPXQuYnJ1c2guc3ZnQnJ1c2g7ci53YXNEcmFnZ2VkPSEwLHIuZ3JhYmJpbmdCYXI/ci5uZXdFeHRlbnQ9W2Utci5ncmFiUG9pbnQsZStyLmJhckxlbmd0aC1yLmdyYWJQb2ludF0ubWFwKHQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KTpyLm5ld0V4dGVudD1bci5zdGFydEV4dGVudCx0LnVuaXRUb1BhZGRlZFB4LmludmVydChlKV0uc29ydChzKTt2YXIgYT1NYXRoLm1heCgwLC1yLm5ld0V4dGVudFswXSksbz1NYXRoLm1heCgwLHIubmV3RXh0ZW50WzFdLTEpO3IubmV3RXh0ZW50WzBdKz1hLHIubmV3RXh0ZW50WzFdLT1vLHIuZ3JhYmJpbmdCYXImJihyLm5ld0V4dGVudFsxXSs9YSxyLm5ld0V4dGVudFswXS09byksdC5icnVzaC5maWx0ZXJTcGVjaWZpZWQ9ITAsci5leHRlbnQ9ci5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChbci5uZXdFeHRlbnRdKSxyLmJydXNoQ2FsbGJhY2sodCksXyh0aGlzLnBhcmVudE5vZGUpfSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKHQpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dC5icnVzaCxyPWUuZmlsdGVyLG49ZS5zdmdCcnVzaCxhPW4uZ3JhYmJpbmdCYXI7aWYobi5ncmFiYmluZ0Jhcj0hMSxuLmdyYWJMb2NhdGlvbj12b2lkIDAsdC5wYXJlbnQuaW5CcnVzaERyYWc9ITEseCgpLCFuLndhc0RyYWdnZWQpcmV0dXJuIG4ud2FzRHJhZ2dlZD12b2lkIDAsbi5jbGlja2FibGVPcmRpbmFsUmFuZ2U/ZS5maWx0ZXJTcGVjaWZpZWQmJnQubXVsdGlzZWxlY3Q/bi5leHRlbnQucHVzaChuLmNsaWNrYWJsZU9yZGluYWxSYW5nZSk6KG4uZXh0ZW50PVtuLmNsaWNrYWJsZU9yZGluYWxSYW5nZV0sZS5maWx0ZXJTcGVjaWZpZWQ9ITApOmE/KG4uZXh0ZW50PW4uc3RheWluZ0ludGVydmFscywwPT09bi5leHRlbnQubGVuZ3RoJiZBKGUpKTpBKGUpLG4uYnJ1c2hDYWxsYmFjayh0KSxfKHRoaXMucGFyZW50Tm9kZSksdm9pZCBuLmJydXNoRW5kQ2FsbGJhY2soZS5maWx0ZXJTcGVjaWZpZWQ/ci5nZXRDb25zb2xpZGF0ZWQoKTpbXSk7dmFyIG89ZnVuY3Rpb24oKXtyLnNldChyLmdldENvbnNvbGlkYXRlZCgpKX07aWYodC5vcmRpbmFsKXt2YXIgcz10LnVuaXRUaWNrdmFscztzW3MubGVuZ3RoLTFdPHNbMF0mJnMucmV2ZXJzZSgpLG4ubmV3RXh0ZW50PVtoKHMsbi5uZXdFeHRlbnRbMF0sbi5zdGF5aW5nSW50ZXJ2YWxzKSxwKHMsbi5uZXdFeHRlbnRbMV0sbi5zdGF5aW5nSW50ZXJ2YWxzKV07dmFyIGw9bi5uZXdFeHRlbnRbMV0+bi5uZXdFeHRlbnRbMF07bi5leHRlbnQ9bi5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChsP1tuLm5ld0V4dGVudF06W10pLG4uZXh0ZW50Lmxlbmd0aHx8QShlKSxuLmJydXNoQ2FsbGJhY2sodCksbD9fKHRoaXMucGFyZW50Tm9kZSxvKToobygpLF8odGhpcy5wYXJlbnROb2RlKSl9ZWxzZSBvKCk7bi5icnVzaEVuZENhbGxiYWNrKGUuZmlsdGVyU3BlY2lmaWVkP3IuZ2V0Q29uc29saWRhdGVkKCk6W10pfSkpfWZ1bmN0aW9uIFQodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIEEodCl7dC5maWx0ZXJTcGVjaWZpZWQ9ITEsdC5zdmdCcnVzaC5leHRlbnQ9W1swLDFdXX1mdW5jdGlvbiBNKHQpe2Zvcih2YXIgZSxyPXQuc2xpY2UoKSxuPVtdLGk9ci5zaGlmdCgpO2k7KXtmb3IoZT1pLnNsaWNlKCk7KGk9ci5zaGlmdCgpKSYmaVswXTw9ZVsxXTspZVsxXT1NYXRoLm1heChlWzFdLGlbMV0pO24ucHVzaChlKX1yZXR1cm4gbn1lLmV4cG9ydHM9e21ha2VCcnVzaDpmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbD1mdW5jdGlvbigpe3ZhciB0LGUscj1bXTtyZXR1cm57c2V0OmZ1bmN0aW9uKG4pe3I9bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKS5zb3J0KHMpfSkuc29ydChUKSx0PU0ociksZT1yLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybltNYXRoLm1pbih0WzBdLGVbMF0pLE1hdGgubWF4KHRbMV0sZVsxXSldfSxbMS8wLC0xLzBdKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sZ2V0Q29uc29saWRhdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHR9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiBlfX19KCk7cmV0dXJuIGwuc2V0KHIpLHtmaWx0ZXI6bCxmaWx0ZXJTcGVjaWZpZWQ6ZSxzdmdCcnVzaDp7ZXh0ZW50OltdLGJydXNoU3RhcnRDYWxsYmFjazpuLGJydXNoQ2FsbGJhY2s6KG89aSxmdW5jdGlvbih0KXt2YXIgZT10LmJydXNoLHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnQnJ1c2guZXh0ZW50Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSl9KGUpLnNsaWNlKCk7ZS5maWx0ZXIuc2V0KHIpLG8oKX0pLGJydXNoRW5kQ2FsbGJhY2s6YX19fSxlbnN1cmVBeGlzQnJ1c2g6ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uYXhpc0JydXNoKS5kYXRhKG8sYSk7ZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5heGlzQnJ1c2gsITApLGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEobyk7ZS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5jYWxsKGcpLmNhbGwodikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwICIrbi52ZXJ0aWNhbFBhZGRpbmcrIikiKSxlLmNhbGwoaykuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQtbi52ZXJ0aWNhbFBhZGRpbmd9KTt2YXIgcj10LnNlbGVjdEFsbCgiLmhpZ2hsaWdodC1zaGFkb3ciKS5kYXRhKG8pO3IuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJoaWdobGlnaHQtc2hhZG93IiwhMCkuYXR0cigieCIsLW4uYmFyLndpZHRoLzIpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5iYXIud2lkdGgrbi5iYXIuc3Ryb2tlV2lkdGgpLmF0dHIoInN0cm9rZSIsbi5iYXIuc3Ryb2tlQ29sb3IpLmF0dHIoIm9wYWNpdHkiLG4uYmFyLnN0cm9rZU9wYWNpdHkpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwiYnV0dCIpLHIuYXR0cigieTEiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLmNhbGwoYik7dmFyIGk9dC5zZWxlY3RBbGwoIi5oaWdobGlnaHQiKS5kYXRhKG8pO2kuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJoaWdobGlnaHQiLCEwKS5hdHRyKCJ4Iiwtbi5iYXIud2lkdGgvMikuYXR0cigic3Ryb2tlLXdpZHRoIixuLmJhci53aWR0aC1uLmJhci5zdHJva2VXaWR0aCkuYXR0cigic3Ryb2tlIixuLmJhci5maWxsQ29sb3IpLmF0dHIoIm9wYWNpdHkiLG4uYmFyLmZpbGxPcGFjaXR5KS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKSxpLmF0dHIoInkxIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5jYWxsKGIpfShlKX0sY2xlYW5SYW5nZXM6ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHRbMF0pPyh0PXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvcnQocyl9KSx0PWUubXVsdGlzZWxlY3Q/TSh0LnNvcnQoVCkpOlt0WzBdXSk6dD1bdC5zb3J0KHMpXSxlLnRpY2t2YWxzKXt2YXIgcj1lLnRpY2t2YWxzLnNsaWNlKCkuc29ydChzKTtpZighKHQ9dC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9W2gocix0WzBdLFtdKSxwKHIsdFsxXSxbXSldO2lmKGVbMV0+ZVswXSlyZXR1cm4gZX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5sZW5ndGgpcmV0dXJufXJldHVybiB0Lmxlbmd0aD4xP3Q6dFswXX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvZ3VwIjo2OTgsIi4vY29uc3RhbnRzIjoxMDE5LGQzOjE1NH1dLDEwMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ci5uYW1lPSJwYXJjb29yZHMiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsInBhcmNvb3JkcyIpWzBdO2UubGVuZ3RoJiZhKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInBhcmNvb3JkcyIpLGE9ZS5faGFzJiZlLl9oYXMoInBhcmNvb3JkcyIpO2kmJiFhJiYobi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIucGFyY29vcmRzIikucmVtb3ZlKCksbi5fZ2xpbWFnZXMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkuc2VsZWN0QWxsKCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXMiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe24uc2VsZWN0QWxsKCIjZmlsdGVyQmFyUGF0dGVybiIpLmF0dHIoImlkIiwiZmlsdGVyQmFyUGF0dGVybiIpfSw2MCl9fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NzgsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3ODQsIi4vcGxvdCI6MTAyNSxkMzoxNTR9XSwxMDE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwO2Z1bmN0aW9uIHModCl7cmV0dXJuIGEuaXNUeXBlZEFycmF5KHQpP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpOnR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmRpbWVuc2lvbnMubGVuZ3RoO3IrKyllLmRpbWVuc2lvbnNbcl0udmFsdWVzPXMoZS5kaW1lbnNpb25zW3JdLnZhbHVlcyk7ZS5saW5lLmNvbG9yPXMoZS5saW5lLmNvbG9yKTt2YXIgYT0hIWUubGluZS5jb2xvcnNjYWxlJiZBcnJheS5pc0FycmF5KGUubGluZS5jb2xvciksbD1hP2UubGluZS5jb2xvcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09LjU7cmV0dXJuIGV9KGUuX2xlbmd0aCksYz1hP2UubGluZS5jb2xvcnNjYWxlOltbMCxlLmxpbmUuY29sb3JdLFsxLGUubGluZS5jb2xvcl1dO3JldHVybiBuKGUsImxpbmUiKSYmaSh0LGUse3ZhbHM6bCxjb250YWluZXJTdHI6ImxpbmUiLGNMZXR0ZXI6ImMifSksbyh7bGluZUNvbG9yOmwsY3NjYWxlOmN9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU4NSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjU4OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9ndXAiOjY5OH1dLDEwMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSx2ZXJ0aWNhbFBhZGRpbmc6Mix0aWNrRGlzdGFuY2U6NTAsY2FudmFzUGl4ZWxSYXRpbzoxLGJsb2NrTGluZUNvdW50OjVlMyxsYXllcnM6WyJjb250ZXh0TGluZUxheWVyIiwiZm9jdXNMaW5lTGF5ZXIiLCJwaWNrTGluZUxheWVyIl0sYXhpc1RpdGxlT2Zmc2V0OjI4LGF4aXNFeHRlbnRPZmZzZXQ6MTAsYmFyOnt3aWR0aDo0LGNhcHR1cmVXaWR0aDoxMCxmaWxsQ29sb3I6Im1hZ2VudGEiLGZpbGxPcGFjaXR5OjEsc25hcER1cmF0aW9uOjE1MCxzbmFwUmF0aW86LjI1LHNuYXBDbG9zZTouMDEsc3Ryb2tlQ29sb3I6IndoaXRlIixzdHJva2VPcGFjaXR5OjEsc3Ryb2tlV2lkdGg6MSxoYW5kbGVIZWlnaHQ6OCxoYW5kbGVPcGFjaXR5OjEsaGFuZGxlT3ZlcmxhcDowfSxjbjp7YXhpc0V4dGVudFRleHQ6ImF4aXMtZXh0ZW50LXRleHQiLHBhcmNvb3Jkc0xpbmVMYXllcnM6InBhcmNvb3Jkcy1saW5lLWxheWVycyIscGFyY29vcmRzTGluZUxheWVyOiJwYXJjb29yZHMtbGluZXMiLHBhcmNvb3JkczoicGFyY29vcmRzIixwYXJjb29yZHNDb250cm9sVmlldzoicGFyY29vcmRzLWNvbnRyb2wtdmlldyIseUF4aXM6InktYXhpcyIsYXhpc092ZXJsYXlzOiJheGlzLW92ZXJsYXlzIixheGlzOiJheGlzIixheGlzSGVhZGluZzoiYXhpcy1oZWFkaW5nIixheGlzVGl0bGU6ImF4aXMtdGl0bGUiLGF4aXNFeHRlbnQ6ImF4aXMtZXh0ZW50IixheGlzRXh0ZW50VG9wOiJheGlzLWV4dGVudC10b3AiLGF4aXNFeHRlbnRUb3BUZXh0OiJheGlzLWV4dGVudC10b3AtdGV4dCIsYXhpc0V4dGVudEJvdHRvbToiYXhpcy1leHRlbnQtYm90dG9tIixheGlzRXh0ZW50Qm90dG9tVGV4dDoiYXhpcy1leHRlbnQtYm90dG9tLXRleHQiLGF4aXNCcnVzaDoiYXhpcy1icnVzaCJ9LGlkOntmaWx0ZXJCYXJQYXR0ZXJuOiJmaWx0ZXItYmFyLXBhdHRlcm4ifX19LHt9XSwxMDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIiksYz10KCIuL2F4aXNicnVzaCIpLHU9dCgiLi9jb25zdGFudHMiKS5tYXhEaW1lbnNpb25Db3VudCxmPXQoIi4vbWVyZ2VfbGVuZ3RoIik7ZnVuY3Rpb24gaCh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwuZGltZW5zaW9ucyxyLGkpfXZhciBpPXIoInZhbHVlcyIpLGE9cigidmlzaWJsZSIpO2lmKGkmJmkubGVuZ3RofHwoYT1lLnZpc2libGU9ITEpLGEpe3IoImxhYmVsIikscigidGlja3ZhbHMiKSxyKCJ0aWNrdGV4dCIpLHIoInRpY2tmb3JtYXQiKSxyKCJyYW5nZSIpLHIoIm11bHRpc2VsZWN0Iik7dmFyIG89cigiY29uc3RyYWludHJhbmdlIik7byYmKGUuY29uc3RyYWludHJhbmdlPWMuY2xlYW5SYW5nZXMobyxlKSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9dmFyIGQ9dC5kaW1lbnNpb25zO0FycmF5LmlzQXJyYXkoZCkmJmQubGVuZ3RoPnUmJihuLmxvZygicGFyY29vcmRzIHRyYWNlcyBzdXBwb3J0IHVwIHRvICIrdSsiIGRpbWVuc2lvbnMgYXQgdGhlIG1vbWVudCIpLGQuc3BsaWNlKHUpKTt2YXIgZz1zKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmh9KSx2PWZ1bmN0aW9uKHQsZSxyLG8scyl7dmFyIGw9cygibGluZS5jb2xvciIscik7aWYoaSh0LCJsaW5lIikmJm4uaXNBcnJheU9yVHlwZWRBcnJheShsKSl7aWYobC5sZW5ndGgpcmV0dXJuIHMoImxpbmUuY29sb3JzY2FsZSIpLGEodCxlLG8scyx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KSxsLmxlbmd0aDtlLmxpbmUuY29sb3I9cn1yZXR1cm4gMS8wfSh0LGUscixjLHApO28oZSxjLHApLEFycmF5LmlzQXJyYXkoZykmJmcubGVuZ3RofHwoZS52aXNpYmxlPSExKSxmKGUsZywidmFsdWVzIix2KTt2YXIgbT17ZmFtaWx5OmMuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGMuZm9udC5zaXplLzEuMiksY29sb3I6Yy5mb250LmNvbG9yfTtuLmNvZXJjZUZvbnQocCwibGFiZWxmb250IixtKSxuLmNvZXJjZUZvbnQocCwidGlja2ZvbnQiLG0pLG4uY29lcmNlRm9udChwLCJyYW5nZWZvbnQiLG0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU4NywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjU4OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzQ0LCIuLi8uLi9wbG90cy9kb21haW4iOjc3MywiLi9hdHRyaWJ1dGVzIjoxMDE1LCIuL2F4aXNicnVzaCI6MTAxNiwiLi9jb25zdGFudHMiOjEwMTksIi4vbWVyZ2VfbGVuZ3RoIjoxMDIzfV0sMTAyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNvbG9yYmFyPXtjb250YWluZXI6ImxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0sbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJwYXJjb29yZHMiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJnbCIsInJlZ2wiLCJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMDE1LCIuL2Jhc2VfcGxvdCI6MTAxNywiLi9jYWxjIjoxMDE4LCIuL2RlZmF1bHRzIjoxMDIwLCIuL3Bsb3QiOjEwMjV9XSwxMDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCBwMCwgcDEsIHAyLCBwMyxcbiAgICAgICAgICAgICAgIHA0LCBwNSwgcDYsIHA3LFxuICAgICAgICAgICAgICAgcDgsIHA5LCBwYSwgcGIsXG4gICAgICAgICAgICAgICBwYywgcGQsIHBlO1xuXG5hdHRyaWJ1dGUgdmVjNCBwZjtcblxudW5pZm9ybSBtYXQ0IGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCxcbiAgICAgICAgICAgICBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRDtcblxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgdmlld0JveFBvc2l0aW9uLFxuICAgICAgICAgICAgIHZpZXdCb3hTaXplO1xuXG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcbnVuaWZvcm0gZmxvYXQgbWFza0hlaWdodDtcblxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzQgdW5pdF8xID0gdmVjNCgxLCAxLCAxLCAxKTtcblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXRfMSwgdW5pdF8xKTtcbn1cblxuZmxvYXQgYXhpc1koXG4gICAgICAgIGZsb2F0IHgsXG4gICAgICAgIG1hdDQgZFs0XSxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRFxuICAgICkge1xuXG4gICAgZmxvYXQgeTEgPSB2YWwoZFswXSwgZGltMUEpICsgdmFsKGRbMV0sIGRpbTFCKSArIHZhbChkWzJdLCBkaW0xQykgKyB2YWwoZFszXSwgZGltMUQpO1xuICAgIGZsb2F0IHkyID0gdmFsKGRbMF0sIGRpbTJBKSArIHZhbChkWzFdLCBkaW0yQikgKyB2YWwoZFsyXSwgZGltMkMpICsgdmFsKGRbM10sIGRpbTJEKTtcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XG59XG5cbmNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7XG5cbmludCBtb2QyKGludCBhKSB7XG4gICAgcmV0dXJuIGEgLSAyICogKGEgLyAyKTtcbn1cblxuaW50IG1vZDgoaW50IGEpIHtcbiAgICByZXR1cm4gYSAtIDggKiAoYSAvIDgpO1xufVxuXG52ZWM0IHplcm8gPSB2ZWM0KDAsIDAsIDAsIDApO1xudmVjNCB1bml0XzAgPSB2ZWM0KDEsIDEsIDEsIDEpO1xudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xuXG5tYXQ0IG1jbGFtcChtYXQ0IG0sIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMV0sIGxvWzFdLCBoaVsxXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVsyXSwgbG9bMl0sIGhpWzJdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcbn1cblxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWNsYW1wKHAsIGxvLCBoaSkgPT0gcDtcbn1cblxuYm9vbCB3aXRoaW5Cb3VuZGluZ0JveChcbiAgICAgICAgbWF0NCBkWzRdLFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaURcbiAgICApIHtcblxuICAgIHJldHVybiBtc2hvdyhkWzBdLCBsb0EsIGhpQSkgJiZcbiAgICAgICAgICAgbXNob3coZFsxXSwgbG9CLCBoaUIpICYmXG4gICAgICAgICAgIG1zaG93KGRbMl0sIGxvQywgaGlDKSAmJlxuICAgICAgICAgICBtc2hvdyhkWzNdLCBsb0QsIGhpRCk7XG59XG5cbmJvb2wgd2l0aGluUmFzdGVyTWFzayhtYXQ0IGRbNF0sIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBoZWlnaHQpIHtcbiAgICBib29sIHJlc3VsdCA9IHRydWU7XG4gICAgaW50IGJpdEluQnl0ZVN0ZXBwZXI7XG4gICAgZmxvYXQgdmFsWSwgdmFsdWVZLCBzY2FsZVg7XG4gICAgaW50IGhpdCwgYml0bWFzaywgdmFsWDtcbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyBrKyspIHtcbiAgICAgICAgICAgICAgICBiaXRJbkJ5dGVTdGVwcGVyID0gbW9kOChqICogNCArIGspO1xuICAgICAgICAgICAgICAgIHZhbFggPSBpICogMiArIGogLyAyO1xuICAgICAgICAgICAgICAgIHZhbFkgPSBkW2ldW2pdW2tdO1xuICAgICAgICAgICAgICAgIHZhbHVlWSA9IHZhbFkgKiAoaGVpZ2h0IC0gMS4wKSArIDAuNTtcbiAgICAgICAgICAgICAgICBzY2FsZVggPSAoZmxvYXQodmFsWCkgKyAwLjUpIC8gOC4wO1xuICAgICAgICAgICAgICAgIGhpdCA9IGludCh0ZXh0dXJlMkQobWFzaywgdmVjMihzY2FsZVgsICh2YWx1ZVkgKyAwLjUpIC8gaGVpZ2h0KSlbM10gKiAyNTUuMCkgLyBpbnQocG93KDIuMCwgZmxvYXQoYml0SW5CeXRlU3RlcHBlcikpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgbW9kMihoaXQpID09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmVjNCBwb3NpdGlvbihcbiAgICAgICAgZmxvYXQgZGVwdGgsXG4gICAgICAgIHZlYzIgcmVzb2x1dGlvbiwgdmVjMiB2aWV3Qm94UG9zaXRpb24sIHZlYzIgdmlld0JveFNpemUsXG4gICAgICAgIG1hdDQgZGltc1s0XSxcbiAgICAgICAgZmxvYXQgc2lnbnVtLFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJELFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaUQsXG4gICAgICAgIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBtYXNrSGVpZ2h0XG4gICAgKSB7XG5cbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbnVtICsgMC41O1xuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBkaW1zLCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQpO1xuXG4gICAgZmxvYXQgc2hvdyA9IGZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbkJvdW5kaW5nQm94KGRpbXMsIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEKVxuICAgICAgICAgICAgICAgICAgICAgICAgICYmIHdpdGhpblJhc3Rlck1hc2soZGltcywgbWFzaywgbWFza0hlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XG4gICAgZmxvYXQgZGVwdGhPckhpZGUgPSBkZXB0aCArIDIuMCAqICgxLjAgLSBzaG93KTtcblxuICAgIHJldHVybiB2ZWM0KFxuICAgICAgICB4eVByb2plY3Rpb24gKiAoMi4wICogdmlld0JveFhZIC8gcmVzb2x1dGlvbiAtIDEuMCksXG4gICAgICAgIGRlcHRoT3JIaWRlLFxuICAgICAgICAxLjBcbiAgICApO1xufVxuXG52b2lkIG1haW4oKSB7XG5cbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcblxuICAgIG1hdDQgcFs0XTtcbiAgICBwWzBdID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XG4gICAgcFsxXSA9IG1hdDQocDQsIHA1LCBwNiwgcDcpO1xuICAgIHBbMl0gPSBtYXQ0KHA4LCBwOSwgcGEsIHBiKTtcbiAgICBwWzNdID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb24oXG4gICAgICAgIDEuMCAtIHByb21pbmVuY2UsXG4gICAgICAgIHJlc29sdXRpb24sIHZpZXdCb3hQb3NpdGlvbiwgdmlld0JveFNpemUsXG4gICAgICAgIHAsXG4gICAgICAgIHNpZ24ocGZbM10pLFxuICAgICAgICBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXG4gICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlELFxuICAgICAgICBtYXNrLCBtYXNrSGVpZ2h0XG4gICAgKTtcblxuICAgIGZsb2F0IGNsYW1wZWRDb2xvckluZGV4ID0gY2xhbXAoKHByb21pbmVuY2UgLSBjb2xvckNsYW1wWzBdKSAvIChjb2xvckNsYW1wWzFdIC0gY29sb3JDbGFtcFswXSksIDAuMCwgMS4wKTtcbiAgICBmcmFnQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMigoY2xhbXBlZENvbG9ySW5kZXggKiAyNTUuMCArIDAuNSkgLyAyNTYuMCwgMC41KSk7XG59XG4iXSksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgcDAsIHAxLCBwMiwgcDMsXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxuICAgICAgICAgICAgICAgcGMsIHBkLCBwZTtcblxuYXR0cmlidXRlIHZlYzQgcGY7XG5cbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQ7XG5cbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94U2l6ZTtcblxudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcblxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzIgeHlQcm9qZWN0aW9uID0gdmVjMigxLCAxKTtcblxudmVjNCB1bml0ID0gdmVjNCgxLCAxLCAxLCAxKTtcblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXQsIHVuaXQpO1xufVxuXG5mbG9hdCBheGlzWShcbiAgICAgICAgZmxvYXQgeCxcbiAgICAgICAgbWF0NCBkWzRdLFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJEXG4gICAgKSB7XG5cbiAgICBmbG9hdCB5MSA9IHZhbChkWzBdLCBkaW0xQSkgKyB2YWwoZFsxXSwgZGltMUIpICsgdmFsKGRbMl0sIGRpbTFDKSArIHZhbChkWzNdLCBkaW0xRCk7XG4gICAgZmxvYXQgeTIgPSB2YWwoZFswXSwgZGltMkEpICsgdmFsKGRbMV0sIGRpbTJCKSArIHZhbChkWzJdLCBkaW0yQykgKyB2YWwoZFszXSwgZGltMkQpO1xuICAgIHJldHVybiB5MSAqICgxLjAgLSB4KSArIHkyICogeDtcbn1cblxudmVjNCBwb3NpdGlvbihcbiAgICAgICAgZmxvYXQgZGVwdGgsXG4gICAgICAgIHZlYzIgcmVzb2x1dGlvbiwgdmVjMiB2aWV3Qm94UG9zaXRpb24sIHZlYzIgdmlld0JveFNpemUsXG4gICAgICAgIG1hdDQgZGltc1s0XSxcbiAgICAgICAgZmxvYXQgc2lnbnVtLFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJEXG4gICAgKSB7XG5cbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbnVtICsgMC41O1xuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBkaW1zLCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQpO1xuXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XG5cbiAgICByZXR1cm4gdmVjNChcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgMS4wXG4gICAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuXG4gICAgZmxvYXQgcHJvbWluZW5jZSA9IGFicyhwZlszXSk7XG5cbiAgICBtYXQ0IHBbNF07XG4gICAgcFswXSA9IG1hdDQocDAsIHAxLCBwMiwgcDMpO1xuICAgIHBbMV0gPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcbiAgICBwWzJdID0gbWF0NChwOCwgcDksIHBhLCBwYik7XG4gICAgcFszXSA9IG1hdDQocGMsIHBkLCBwZSwgYWJzKHBmKSk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uKFxuICAgICAgICAxLjAgLSBwcm9taW5lbmNlLFxuICAgICAgICByZXNvbHV0aW9uLCB2aWV3Qm94UG9zaXRpb24sIHZpZXdCb3hTaXplLFxuICAgICAgICBwLFxuICAgICAgICBzaWduKHBmWzNdKSxcbiAgICAgICAgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEXG4gICAgKTtcblxuICAgIGZsb2F0IGNsYW1wZWRDb2xvckluZGV4ID0gY2xhbXAoKHByb21pbmVuY2UgLSBjb2xvckNsYW1wWzBdKSAvIChjb2xvckNsYW1wWzFdIC0gY29sb3JDbGFtcFswXSksIDAuMCwgMS4wKTtcbiAgICBmcmFnQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMigoY2xhbXBlZENvbG9ySW5kZXggKiAyNTUuMCArIDAuNSkgLyAyNTYuMCwgMC41KSk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgcDAsIHAxLCBwMiwgcDMsXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxuICAgICAgICAgICAgICAgcGMsIHBkLCBwZTtcblxuYXR0cmlidXRlIHZlYzQgcGY7XG5cbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XG5cbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94U2l6ZTtcblxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcbnVuaWZvcm0gZmxvYXQgbWFza0hlaWdodDtcblxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzQgdW5pdF8xID0gdmVjNCgxLCAxLCAxLCAxKTtcblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXRfMSwgdW5pdF8xKTtcbn1cblxuZmxvYXQgYXhpc1koXG4gICAgICAgIGZsb2F0IHgsXG4gICAgICAgIG1hdDQgZFs0XSxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRFxuICAgICkge1xuXG4gICAgZmxvYXQgeTEgPSB2YWwoZFswXSwgZGltMUEpICsgdmFsKGRbMV0sIGRpbTFCKSArIHZhbChkWzJdLCBkaW0xQykgKyB2YWwoZFszXSwgZGltMUQpO1xuICAgIGZsb2F0IHkyID0gdmFsKGRbMF0sIGRpbTJBKSArIHZhbChkWzFdLCBkaW0yQikgKyB2YWwoZFsyXSwgZGltMkMpICsgdmFsKGRbM10sIGRpbTJEKTtcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XG59XG5cbmNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7XG5cbmludCBtb2QyKGludCBhKSB7XG4gICAgcmV0dXJuIGEgLSAyICogKGEgLyAyKTtcbn1cblxuaW50IG1vZDgoaW50IGEpIHtcbiAgICByZXR1cm4gYSAtIDggKiAoYSAvIDgpO1xufVxuXG52ZWM0IHplcm8gPSB2ZWM0KDAsIDAsIDAsIDApO1xudmVjNCB1bml0XzAgPSB2ZWM0KDEsIDEsIDEsIDEpO1xudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xuXG5tYXQ0IG1jbGFtcChtYXQ0IG0sIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMV0sIGxvWzFdLCBoaVsxXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVsyXSwgbG9bMl0sIGhpWzJdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcbn1cblxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWNsYW1wKHAsIGxvLCBoaSkgPT0gcDtcbn1cblxuYm9vbCB3aXRoaW5Cb3VuZGluZ0JveChcbiAgICAgICAgbWF0NCBkWzRdLFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaURcbiAgICApIHtcblxuICAgIHJldHVybiBtc2hvdyhkWzBdLCBsb0EsIGhpQSkgJiZcbiAgICAgICAgICAgbXNob3coZFsxXSwgbG9CLCBoaUIpICYmXG4gICAgICAgICAgIG1zaG93KGRbMl0sIGxvQywgaGlDKSAmJlxuICAgICAgICAgICBtc2hvdyhkWzNdLCBsb0QsIGhpRCk7XG59XG5cbmJvb2wgd2l0aGluUmFzdGVyTWFzayhtYXQ0IGRbNF0sIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBoZWlnaHQpIHtcbiAgICBib29sIHJlc3VsdCA9IHRydWU7XG4gICAgaW50IGJpdEluQnl0ZVN0ZXBwZXI7XG4gICAgZmxvYXQgdmFsWSwgdmFsdWVZLCBzY2FsZVg7XG4gICAgaW50IGhpdCwgYml0bWFzaywgdmFsWDtcbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyBrKyspIHtcbiAgICAgICAgICAgICAgICBiaXRJbkJ5dGVTdGVwcGVyID0gbW9kOChqICogNCArIGspO1xuICAgICAgICAgICAgICAgIHZhbFggPSBpICogMiArIGogLyAyO1xuICAgICAgICAgICAgICAgIHZhbFkgPSBkW2ldW2pdW2tdO1xuICAgICAgICAgICAgICAgIHZhbHVlWSA9IHZhbFkgKiAoaGVpZ2h0IC0gMS4wKSArIDAuNTtcbiAgICAgICAgICAgICAgICBzY2FsZVggPSAoZmxvYXQodmFsWCkgKyAwLjUpIC8gOC4wO1xuICAgICAgICAgICAgICAgIGhpdCA9IGludCh0ZXh0dXJlMkQobWFzaywgdmVjMihzY2FsZVgsICh2YWx1ZVkgKyAwLjUpIC8gaGVpZ2h0KSlbM10gKiAyNTUuMCkgLyBpbnQocG93KDIuMCwgZmxvYXQoYml0SW5CeXRlU3RlcHBlcikpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgbW9kMihoaXQpID09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmVjNCBwb3NpdGlvbihcbiAgICAgICAgZmxvYXQgZGVwdGgsXG4gICAgICAgIHZlYzIgcmVzb2x1dGlvbiwgdmVjMiB2aWV3Qm94UG9zaXRpb24sIHZlYzIgdmlld0JveFNpemUsXG4gICAgICAgIG1hdDQgZGltc1s0XSxcbiAgICAgICAgZmxvYXQgc2lnbnVtLFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJELFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaUQsXG4gICAgICAgIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBtYXNrSGVpZ2h0XG4gICAgKSB7XG5cbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbnVtICsgMC41O1xuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBkaW1zLCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQpO1xuXG4gICAgZmxvYXQgc2hvdyA9IGZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbkJvdW5kaW5nQm94KGRpbXMsIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEKVxuICAgICAgICAgICAgICAgICAgICAgICAgICYmIHdpdGhpblJhc3Rlck1hc2soZGltcywgbWFzaywgbWFza0hlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XG4gICAgZmxvYXQgZGVwdGhPckhpZGUgPSBkZXB0aCArIDIuMCAqICgxLjAgLSBzaG93KTtcblxuICAgIHJldHVybiB2ZWM0KFxuICAgICAgICB4eVByb2plY3Rpb24gKiAoMi4wICogdmlld0JveFhZIC8gcmVzb2x1dGlvbiAtIDEuMCksXG4gICAgICAgIGRlcHRoT3JIaWRlLFxuICAgICAgICAxLjBcbiAgICApO1xufVxuXG52b2lkIG1haW4oKSB7XG5cbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcblxuICAgIG1hdDQgcFs0XTtcbiAgICBwWzBdID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XG4gICAgcFsxXSA9IG1hdDQocDQsIHA1LCBwNiwgcDcpO1xuICAgIHBbMl0gPSBtYXQ0KHA4LCBwOSwgcGEsIHBiKTtcbiAgICBwWzNdID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb24oXG4gICAgICAgIDEuMCAtIHByb21pbmVuY2UsXG4gICAgICAgIHJlc29sdXRpb24sIHZpZXdCb3hQb3NpdGlvbiwgdmlld0JveFNpemUsXG4gICAgICAgIHAsXG4gICAgICAgIHNpZ24ocGZbM10pLFxuICAgICAgICBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXG4gICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlELFxuICAgICAgICBtYXNrLCBtYXNrSGVpZ2h0XG4gICAgKTtcblxuICAgIGZyYWdDb2xvciA9IHZlYzQocGYucmdiLCAxLjApO1xufVxuIl0pLHM9bihbInByZWNpc2lvbiBsb3dwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJdKSxsPXQoIi4uLy4uL2xpYiIpLGM9MWUtNix1PTFlLTcsZj0yMDQ4LGg9NjQscD0yLGQ9NCxnPTgsdj1oL2csbT1bMTE5LDExOSwxMTldLHk9bmV3IFVpbnQ4QXJyYXkoNCkseD1uZXcgVWludDhBcnJheSg0KSxiPXtzaGFwZTpbMjU2LDFdLGZvcm1hdDoicmdiYSIsdHlwZToidWludDgiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0In07ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPXQuX2dsO2EuZW5hYmxlKGEuU0NJU1NPUl9URVNUKSxhLnNjaXNzb3IoZSxyLG4saSksdC5jbGVhcih7Y29sb3I6WzAsMCwwLDBdLGRlcHRoOjF9KX1mdW5jdGlvbiB3KHQsZSxyLG4saSxhKXt2YXIgbz1hLmtleTtyLmRyYXdDb21wbGV0ZWR8fCghZnVuY3Rpb24odCl7dC5yZWFkKHt4OjAseTowLHdpZHRoOjEsaGVpZ2h0OjEsZGF0YTp5fSl9KHQpLHIuZHJhd0NvbXBsZXRlZD0hMCksZnVuY3Rpb24gcyhsKXt2YXIgYztjPU1hdGgubWluKG4saS1sKm4pLGEub2Zmc2V0PXAqbCpuLGEuY291bnQ9cCpjLDA9PT1sJiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHIuY3VycmVudFJhZnNbb10pLGRlbGV0ZSByLmN1cnJlbnRSYWZzW29dLF8odCxhLnNjaXNzb3JYLGEuc2Npc3NvclksYS5zY2lzc29yV2lkdGgsYS52aWV3Qm94U2l6ZVsxXSkpLHIuY2xlYXJPbmx5fHwoZShhKSxsKm4rYzxpJiYoci5jdXJyZW50UmFmc1tvXT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cyhsKzEpfSkpLHIuZHJhd0NvbXBsZXRlZD0hMSl9KDApfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4odD4+PjgqZSklMjU2LzI1NX1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgbixpLGEsbz1bXTtmb3IoaT0wO2k8dDtpKyspZm9yKGE9MDthPHA7YSsrKWZvcihuPTA7bjxkO24rKylvLnB1c2goZVtpKmgrcipkK25dKSxyKmQrbj09PWgtMSYmYSUyPT0wJiYob1tvLmxlbmd0aC0xXSo9LTEpO3JldHVybiBvfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4scCxkLHksQT1lLmNvbnRleHQsTT1lLnBpY2ssUz1lLnJlZ2wsRT17Y3VycmVudFJhZnM6e30sZHJhd0NvbXBsZXRlZDohMCxjbGVhck9ubHk6ITF9LEM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9MDtyPDE2O3IrKyllWyJwIityLnRvU3RyaW5nKDE2KV09dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pO3JldHVybiBlfShTKSxMPVMudGV4dHVyZShiKTtPKGUpO3ZhciB6PVMoe3Byb2ZpbGU6ITEsYmxlbmQ6e2VuYWJsZTpBLGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOjEsZHN0QWxwaGE6MX0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sY29sb3I6WzAsMCwwLDBdfSxkZXB0aDp7ZW5hYmxlOiFBLG1hc2s6ITAsZnVuYzoibGVzcyIscmFuZ2U6WzAsMV19LGN1bGw6e2VuYWJsZTohMCxmYWNlOiJiYWNrIn0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp7eDpTLnByb3AoInNjaXNzb3JYIikseTpTLnByb3AoInNjaXNzb3JZIiksd2lkdGg6Uy5wcm9wKCJzY2lzc29yV2lkdGgiKSxoZWlnaHQ6Uy5wcm9wKCJzY2lzc29ySGVpZ2h0Iil9fSx2aWV3cG9ydDp7eDpTLnByb3AoInZpZXdwb3J0WCIpLHk6Uy5wcm9wKCJ2aWV3cG9ydFkiKSx3aWR0aDpTLnByb3AoInZpZXdwb3J0V2lkdGgiKSxoZWlnaHQ6Uy5wcm9wKCJ2aWV3cG9ydEhlaWdodCIpfSxkaXRoZXI6ITEsdmVydDpNP286QT9hOmksZnJhZzpzLHByaW1pdGl2ZToibGluZXMiLGxpbmVXaWR0aDoxLGF0dHJpYnV0ZXM6Qyx1bmlmb3Jtczp7cmVzb2x1dGlvbjpTLnByb3AoInJlc29sdXRpb24iKSx2aWV3Qm94UG9zaXRpb246Uy5wcm9wKCJ2aWV3Qm94UG9zaXRpb24iKSx2aWV3Qm94U2l6ZTpTLnByb3AoInZpZXdCb3hTaXplIiksZGltMUE6Uy5wcm9wKCJkaW0xQSIpLGRpbTJBOlMucHJvcCgiZGltMkEiKSxkaW0xQjpTLnByb3AoImRpbTFCIiksZGltMkI6Uy5wcm9wKCJkaW0yQiIpLGRpbTFDOlMucHJvcCgiZGltMUMiKSxkaW0yQzpTLnByb3AoImRpbTJDIiksZGltMUQ6Uy5wcm9wKCJkaW0xRCIpLGRpbTJEOlMucHJvcCgiZGltMkQiKSxsb0E6Uy5wcm9wKCJsb0EiKSxoaUE6Uy5wcm9wKCJoaUEiKSxsb0I6Uy5wcm9wKCJsb0IiKSxoaUI6Uy5wcm9wKCJoaUIiKSxsb0M6Uy5wcm9wKCJsb0MiKSxoaUM6Uy5wcm9wKCJoaUMiKSxsb0Q6Uy5wcm9wKCJsb0QiKSxoaUQ6Uy5wcm9wKCJoaUQiKSxwYWxldHRlOkwsbWFzazpTLnByb3AoIm1hc2tUZXh0dXJlIiksbWFza0hlaWdodDpTLnByb3AoIm1hc2tIZWlnaHQiKSxjb2xvckNsYW1wOlMucHJvcCgiY29sb3JDbGFtcCIpfSxvZmZzZXQ6Uy5wcm9wKCJvZmZzZXQiKSxjb3VudDpTLnByb3AoImNvdW50Iil9KTtmdW5jdGlvbiBPKHQpe3I9dC5tb2RlbCxuPXQudmlld01vZGVsLHA9bi5kaW1lbnNpb25zLnNsaWNlKCksZD1wWzBdP3BbMF0udmFsdWVzLmxlbmd0aDowO3ZhciBlPXIubGluZXMsaT1NP2UuY29sb3IubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIHIvZS5jb2xvci5sZW5ndGh9KTplLmNvbG9yLGE9TWF0aC5tYXgoMS8yNTUsTWF0aC5wb3coMS9pLmxlbmd0aCwxLzMpKSxvPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1lLmxlbmd0aCxhPVtdLG89MDtvPHQ7bysrKWZvcih2YXIgcz0wO3M8aDtzKyspYS5wdXNoKHM8aT9lW3NdLnBhZGRlZFVuaXRWYWx1ZXNbb106cz09PWgtMT8obj1yW29dLE1hdGgubWF4KGMsTWF0aC5taW4oMS1jLG4pKSk6cz49aC00P2sobyxoLTItcyk6LjUpO3JldHVybiBhfShkLHAsaSk7IWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPDE2O24rKyl0WyJwIituLnRvU3RyaW5nKDE2KV0oVChlLHIsbikpfShDLGQsbyksTD1TLnRleHR1cmUobC5leHRlbmRGbGF0KHtkYXRhOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8MjU2O2krKyl7dmFyIGE9dChpLzI1NSk7bi5wdXNoKChlP206YSkuY29uY2F0KHIpKX1yZXR1cm4gbn0oci51bml0VG9Db2xvcixBLE1hdGgucm91bmQoMjU1KihBP2E6MSkpKX0sYikpfXZhciBJPVswLDFdO3ZhciBEPVtdO2Z1bmN0aW9uIFAodCxlLG4saSxhLG8scyxjLHUsZixoKXt2YXIgcCxkLGcsdixtPVt0LGVdLHk9WzAsMV0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuWzAsMSwyLDNdLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KDE2KX0pfSk7Zm9yKHA9MDtwPDI7cCsrKWZvcih2PW1bcF0sZD0wO2Q8NDtkKyspZm9yKGc9MDtnPDE2O2crKyl5W3BdW2RdW2ddPWcrMTYqZD09PXY/MTowO3ZhciB4PXIubGluZXMuY2FudmFzT3ZlcmRyYWcsYj1yLmRvbWFpbixfPXIuY2FudmFzV2lkdGgsdz1yLmNhbnZhc0hlaWdodDtyZXR1cm4gbC5leHRlbmRGbGF0KHtrZXk6cyxyZXNvbHV0aW9uOltfLHddLHZpZXdCb3hQb3NpdGlvbjpbbit4LGldLHZpZXdCb3hTaXplOlthLG9dLGk6dCxpaTplLGRpbTFBOnlbMF1bMF0sZGltMUI6eVswXVsxXSxkaW0xQzp5WzBdWzJdLGRpbTFEOnlbMF1bM10sZGltMkE6eVsxXVswXSxkaW0yQjp5WzFdWzFdLGRpbTJDOnlbMV1bMl0sZGltMkQ6eVsxXVszXSxjb2xvckNsYW1wOkksc2Npc3Nvclg6KGM9PT11PzA6bit4KSsoci5wYWQubC14KStyLmxheW91dFdpZHRoKmIueFswXSxzY2lzc29yV2lkdGg6KGM9PT1mP18tbit4OmErLjUpKyhjPT09dT9uK3g6MCksc2Npc3Nvclk6aStyLnBhZC5iK3IubGF5b3V0SGVpZ2h0KmIueVswXSxzY2lzc29ySGVpZ2h0Om8sdmlld3BvcnRYOnIucGFkLmwteCtyLmxheW91dFdpZHRoKmIueFswXSx2aWV3cG9ydFk6ci5wYWQuYityLmxheW91dEhlaWdodCpiLnlbMF0sdmlld3BvcnRXaWR0aDpfLHZpZXdwb3J0SGVpZ2h0Ond9LGgpfXJldHVybntzZXRDb2xvckRvbWFpbjpmdW5jdGlvbih0KXtJWzBdPXRbMF0sSVsxXT10WzFdfSxyZW5kZXI6ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzPXQubGVuZ3RoLGw9MS8wLGM9LTEvMDtmb3IoaT0wO2k8cztpKyspdFtpXS5kaW0yLmNhbnZhc1g+YyYmKGM9dFtpXS5kaW0yLmNhbnZhc1gsbz1pKSx0W2ldLmRpbTEuY2FudmFzWDxsJiYobD10W2ldLmRpbTEuY2FudmFzWCxhPWkpOzA9PT1zJiZfKFMsMCwwLHIuY2FudmFzV2lkdGgsci5jYW52YXNIZWlnaHQpO3ZhciBoPUE/e306ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj1bMCwxXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bMCwxLDIsM10ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMTYpfSl9KTtmb3IodD0wO3Q8Mjt0KyspZm9yKGU9MDtlPDQ7ZSsrKWZvcihyPTA7cjwxNjtyKyspe3ZhciBpLGE9cisxNiplO2k9YTxwLmxlbmd0aD9wW2FdLmJydXNoLmZpbHRlci5nZXRCb3VuZHMoKVt0XTp0LG5bdF1bZV1bcl09aSsoMip0LTEpKnV9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWYtMTtyZXR1cm5bTWF0aC5tYXgoMCxNYXRoLmZsb29yKGVbMF0qcikpLE1hdGgubWluKHIsTWF0aC5jZWlsKGVbMV0qcikpXX1mb3IodmFyIHM9QXJyYXkuYXBwbHkobnVsbCxuZXcgQXJyYXkoZip2KSkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIDI1NX0pLGw9MDtsPHAubGVuZ3RoO2wrKyl7dmFyIGM9bCVnLGg9KGwtYykvZyxkPU1hdGgucG93KDIsYyksbT1wW2xdLHg9bS5icnVzaC5maWx0ZXIuZ2V0KCk7aWYoISh4Lmxlbmd0aDwyKSlmb3IodmFyIGI9bygwLHhbMF0pWzFdLF89MTtfPHgubGVuZ3RoO18rKyl7Zm9yKHZhciB3PW8oMCx4W19dKSxrPWIrMTtrPHdbMF07aysrKXNbayp2K2hdJj1+ZDtiPU1hdGgubWF4KGIsd1sxXSl9fXZhciBUPXtzaGFwZTpbdixmXSxmb3JtYXQ6ImFscGhhIix0eXBlOiJ1aW50OCIsbWFnOiJuZWFyZXN0IixtaW46Im5lYXJlc3QiLGRhdGE6c307cmV0dXJuIHk/eShUKTp5PVMudGV4dHVyZShUKSx7bWFza1RleHR1cmU6eSxtYXNrSGVpZ2h0OmYsbG9BOm5bMF1bMF0sbG9COm5bMF1bMV0sbG9DOm5bMF1bMl0sbG9EOm5bMF1bM10saGlBOm5bMV1bMF0saGlCOm5bMV1bMV0saGlDOm5bMV1bMl0saGlEOm5bMV1bM119fSgpO2ZvcihpPTA7aTxzO2krKyl7dmFyIG09dFtpXSx4PW0uZGltMSxiPXguY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxrPW0uY2FudmFzWCxUPW0uY2FudmFzWSxNPW0uZGltMi5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LEM9bS5wYW5lbFNpemVYLEw9bS5wYW5lbFNpemVZLE89aytDO2lmKGV8fCFEW2JdfHxEW2JdWzBdIT09a3x8RFtiXVsxXSE9PU8pe0RbYl09W2ssT107dmFyIEk9UChiLE0sayxULEMsTCx4LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsaSxhLG8saCk7RS5jbGVhck9ubHk9bix3KFMseixFLGU/ci5saW5lcy5ibG9ja0xpbmVDb3VudDpkLGQsSSl9fX0scmVhZFBpeGVsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFMucmVhZCh7eDp0LHk6ZSx3aWR0aDoxLGhlaWdodDoxLGRhdGE6eH0pLHh9LHJlYWRQaXhlbHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoNCpyKm4pO3JldHVybiBTLnJlYWQoe3g6dCx5OmUsd2lkdGg6cixoZWlnaHQ6bixkYXRhOml9KSxpfSxkZXN0cm95OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHQuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLEwuZGVzdHJveSgpLHkmJnkuZGVzdHJveSgpLEMpQ1tlXS5kZXN0cm95KCl9LHVwZGF0ZTpPfX19LHsiLi4vLi4vbGliIjo3MDAsZ2xzbGlmeTo0MDF9XSwxMDIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhO2ZvcihufHwobj0xLzApLGk9MDtpPGUubGVuZ3RoO2krKykoYT1lW2ldKS52aXNpYmxlJiYobj1NYXRoLm1pbihuLGFbcl0ubGVuZ3RoKSk7Zm9yKG49PT0xLzAmJihuPTApLHQuX2xlbmd0aD1uLGk9MDtpPGUubGVuZ3RoO2krKykoYT1lW2ldKS52aXNpYmxlJiYoYS5fbGVuZ3RoPW4pO3JldHVybiBufX0se31dLDEwMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uLy4uL2xpYi9ndXAiKSxsPXMua2V5RnVuLGM9cy5yZXBlYXQsdT1zLnVud3JhcCxmPXQoIi4vY29uc3RhbnRzIiksaD10KCIuL2F4aXNicnVzaCIpLHA9dCgiLi9saW5lcyIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuISgidmlzaWJsZSJpbiB0KXx8dC52aXNpYmxlfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5yYW5nZT90LnJhbmdlWzBdOmkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQudmFsdWVzLHQuX2xlbmd0aCkscj10LnJhbmdlP3QucmFuZ2VbMV06aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdC52YWx1ZXMsdC5fbGVuZ3RoKTtyZXR1cm4haXNOYU4oZSkmJmlzRmluaXRlKGUpfHwoZT0wKSwhaXNOYU4ocikmJmlzRmluaXRlKHIpfHwocj0wKSxlPT09ciYmKDA9PT1lPyhlLT0xLHIrPTEpOihlKj0uOSxyKj0xLjEpKSxbZSxyXX1mdW5jdGlvbiB2KHQpe3JldHVybiB0LmRpbWVuc2lvbnMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5icnVzaC5maWx0ZXJTcGVjaWZpZWR9KX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgYT11KGUpLHM9YS50cmFjZSxsPWEubGluZUNvbG9yLGM9cy5saW5lLGg9Yy5yZXZlcnNlc2NhbGU/by5mbGlwU2NhbGUoYS5jc2NhbGUpOmEuY3NjYWxlLHA9cy5kb21haW4sdj1zLmRpbWVuc2lvbnMsbT10LndpZHRoLHk9cy5sYWJlbGZvbnQseD1zLnRpY2tmb250LGI9cy5yYW5nZWZvbnQsXz1pLmV4dGVuZERlZXBOb0FycmF5cyh7fSxjLHtjb2xvcjpsLm1hcChuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihnKHt2YWx1ZXM6bCxyYW5nZTpbYy5jbWluLGMuY21heF0sX2xlbmd0aDpzLl9sZW5ndGh9KSkpLGJsb2NrTGluZUNvdW50OmYuYmxvY2tMaW5lQ291bnQsY2FudmFzT3ZlcmRyYWc6Zi5vdmVyZHJhZypmLmNhbnZhc1BpeGVsUmF0aW99KSx3PU1hdGguZmxvb3IobSoocC54WzFdLXAueFswXSkpLGs9TWF0aC5mbG9vcih0LmhlaWdodCoocC55WzFdLXAueVswXSkpLFQ9dC5tYXJnaW58fHtsOjgwLHI6ODAsdDoxMDAsYjo4MH0sQT13LE09aztyZXR1cm57a2V5OnIsY29sQ291bnQ6di5maWx0ZXIoZCkubGVuZ3RoLGRpbWVuc2lvbnM6dix0aWNrRGlzdGFuY2U6Zi50aWNrRGlzdGFuY2UsdW5pdFRvQ29sb3I6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxyPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnJnYih0WzFdKX0pLGk9InJnYiIuc3BsaXQoIiIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5jbGFtcCghMCkuZG9tYWluKGUpLnJhbmdlKHIubWFwKChpPXQsZnVuY3Rpb24odCl7cmV0dXJuIHRbaV19KSkpO3ZhciBpfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfX0oaCksbGluZXM6XyxsYWJlbEZvbnQ6eSx0aWNrRm9udDp4LHJhbmdlRm9udDpiLGxheW91dFdpZHRoOm0sbGF5b3V0SGVpZ2h0OnQuaGVpZ2h0LGRvbWFpbjpwLHRyYW5zbGF0ZVg6cC54WzBdKm0sdHJhbnNsYXRlWTp0LmhlaWdodC1wLnlbMV0qdC5oZWlnaHQscGFkOlQsY2FudmFzV2lkdGg6QSpmLmNhbnZhc1BpeGVsUmF0aW8rMipfLmNhbnZhc092ZXJkcmFnLGNhbnZhc0hlaWdodDpNKmYuY2FudmFzUGl4ZWxSYXRpbyx3aWR0aDpBLGhlaWdodDpNLGNhbnZhc1BpeGVsUmF0aW86Zi5jYW52YXNQaXhlbFJhdGlvfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgYT1yLndpZHRoLG89ci5oZWlnaHQscz1yLmRpbWVuc2lvbnMsbD1yLmNhbnZhc1BpeGVsUmF0aW8sYz1mdW5jdGlvbih0KXtyZXR1cm4gYSp0L01hdGgubWF4KDEsci5jb2xDb3VudC0xKX0sdT1mLnZlcnRpY2FsUGFkZGluZy9vLHA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5yYW5nZShbZSx0LWVdKX0obyxmLnZlcnRpY2FsUGFkZGluZyksbT17a2V5OnIua2V5LHhTY2FsZTpjLG1vZGVsOnIsaW5CcnVzaERyYWc6ITF9LHk9e307cmV0dXJuIG0uZGltZW5zaW9ucz1zLmZpbHRlcihkKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgZD1mdW5jdGlvbih0LGUpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihnKHQpKS5yYW5nZShbZSwxLWVdKX0oYSx1KSx4PXlbYS5sYWJlbF07eVthLmxhYmVsXT0oeHx8MCkrMTt2YXIgYj1hLmxhYmVsKyh4PyJfXyIreDoiIiksXz1hLmNvbnN0cmFpbnRyYW5nZSx3PV8mJl8ubGVuZ3RoO3cmJiFBcnJheS5pc0FycmF5KF9bMF0pJiYoXz1bX10pO3ZhciBrPXc/Xy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGQpfSk6W1swLDFdXSxUPWEudmFsdWVzO1QubGVuZ3RoPmEuX2xlbmd0aCYmKFQ9VC5zbGljZSgwLGEuX2xlbmd0aCkpO3ZhciBBLE09YS50aWNrdmFscztmdW5jdGlvbiBTKHQsZSl7cmV0dXJue3ZhbDp0LHRleHQ6QVtlXX19ZnVuY3Rpb24gRSh0LGUpe3JldHVybiB0LnZhbC1lLnZhbH1pZihBcnJheS5pc0FycmF5KE0pJiZNLmxlbmd0aCl7QT1hLnRpY2t0ZXh0LEFycmF5LmlzQXJyYXkoQSkmJkEubGVuZ3RoP0EubGVuZ3RoPk0ubGVuZ3RoP0E9QS5zbGljZSgwLE0ubGVuZ3RoKTpNLmxlbmd0aD5BLmxlbmd0aCYmKE09TS5zbGljZSgwLEEubGVuZ3RoKSk6QT1NLm1hcChuLmZvcm1hdChhLnRpY2tmb3JtYXQpKTtmb3IodmFyIEM9MTtDPE0ubGVuZ3RoO0MrKylpZihNW0NdPE1bQy0xXSl7Zm9yKHZhciBMPU0ubWFwKFMpLnNvcnQoRSksej0wO3o8TS5sZW5ndGg7eisrKU1bel09TFt6XS52YWwsQVt6XT1MW3pdLnRleHQ7YnJlYWt9fWVsc2UgTT12b2lkIDA7cmV0dXJue2tleTpiLGxhYmVsOmEubGFiZWwsdGlja0Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja3ZhbHM6TSx0aWNrdGV4dDpBLG9yZGluYWw6ISFNLG11bHRpc2VsZWN0OmEubXVsdGlzZWxlY3QseEluZGV4OnMsY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleDpzLHZpc2libGVJbmRleDphLl9pbmRleCxoZWlnaHQ6byx2YWx1ZXM6VCxwYWRkZWRVbml0VmFsdWVzOlQubWFwKGQpLHVuaXRUaWNrdmFsczpNJiZNLm1hcChkKSx4U2NhbGU6Yyx4OmMocyksY2FudmFzWDpjKHMpKmwsdW5pdFRvUGFkZGVkUHg6cCxkb21haW5TY2FsZTpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvLHMsbD1nKHIpO3JldHVybiBpP24uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihpLm1hcCgobz1uLmZvcm1hdChyLnRpY2tmb3JtYXQpLHM9YSxzP2Z1bmN0aW9uKHQsZSl7dmFyIHI9c1tlXTtyZXR1cm4gbnVsbD09cj9vKHQpOnJ9Om8pKSkucmFuZ2UoaS5tYXAoZnVuY3Rpb24ocil7dmFyIG49KHItbFswXSkvKGxbMV0tbFswXSk7cmV0dXJuIHQtZStuKigyKmUtdCl9KSk6bi5zY2FsZS5saW5lYXIoKS5kb21haW4obCkucmFuZ2UoW3QtZSxlXSl9KG8sZi52ZXJ0aWNhbFBhZGRpbmcsYSxNLEEpLG9yZGluYWxTY2FsZTpmdW5jdGlvbih0KXtpZih0LnRpY2t2YWxzKXt2YXIgZT1nKHQpO3JldHVybiBuLnNjYWxlLm9yZGluYWwoKS5kb21haW4odC50aWNrdmFscykucmFuZ2UodC50aWNrdmFscy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZVswXSkvKGVbMV0tZVswXSl9KSl9fShhKSxwYXJlbnQ6bSxtb2RlbDpyLGJydXNoOmgubWFrZUJydXNoKHQsdyxrLGZ1bmN0aW9uKCl7dC5saW5lUGlja0FjdGl2ZSghMSl9LGZ1bmN0aW9uKCl7dmFyIGU9bTtlLmZvY3VzTGF5ZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMsITApO3ZhciByPXYoZSk7IXQuY29udGV4dFNob3duKCkmJnI/KGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITApLHQuY29udGV4dFNob3duKCEwKSk6dC5jb250ZXh0U2hvd24oKSYmIXImJihlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwLCEwKSx0LmNvbnRleHRTaG93bighMSkpfSxmdW5jdGlvbihyKXt2YXIgbj1tO2lmKG4uZm9jdXNMYXllci5yZW5kZXIobi5wYW5lbHMsITApLG4ucGlja0xheWVyJiZuLnBpY2tMYXllci5yZW5kZXIobi5wYW5lbHMsITApLHQubGluZVBpY2tBY3RpdmUoITApLGUmJmUuZmlsdGVyQ2hhbmdlZCl7dmFyIG89ZC5pbnZlcnQscz1yLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAobykuc29ydChpLnNvcnRlckFzYyl9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pO2UuZmlsdGVyQ2hhbmdlZChuLmtleSxhLl9pbmRleCxzKX19KX19KSxtfWZ1bmN0aW9uIHgodCl7dC5jbGFzc2VkKGYuY24uYXhpc0V4dGVudFRleHQsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImN1cnNvciIsImRlZmF1bHQiKS5zdHlsZSgidXNlci1zZWxlY3QiLCJub25lIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxkKXt2YXIgZyxiLF89KGc9ITAsYj0hMSx7bGluZVBpY2tBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Zz0hIXQ6Z30sY29udGV4dFNob3duOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2I9ISF0OmJ9fSksdz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdSh0KS50cmFjZS52aXNpYmxlfSkubWFwKG0uYmluZCgwLHMpKS5tYXAoeS5iaW5kKDAsXyxkKSk7ci5lYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZXh0ZW5kRmxhdCh0LHdbZV0pfSk7dmFyIGs9ci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5lYWNoKGZ1bmN0aW9uKHQpe3Qudmlld01vZGVsPXdbMF0sdC5tb2RlbD10LnZpZXdNb2RlbD90LnZpZXdNb2RlbC5tb2RlbDpudWxsfSksVD1udWxsO2suZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2t9KS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24odCl7aWYoXy5saW5lUGlja0FjdGl2ZSgpJiZ0LmxpbmVMYXllciYmZCYmZC5ob3Zlcil7dmFyIGU9bi5ldmVudCxyPXRoaXMud2lkdGgsaT10aGlzLmhlaWdodCxhPW4ubW91c2UodGhpcyksbz1hWzBdLHM9YVsxXTtpZihvPDB8fHM8MHx8bz49cnx8cz49aSlyZXR1cm47dmFyIGw9dC5saW5lTGF5ZXIucmVhZFBpeGVsKG8saS0xLXMpLGM9MCE9PWxbM10sdT1jP2xbMl0rMjU2KihsWzFdKzI1NipsWzBdKTpudWxsLGY9e3g6byx5OnMsY2xpZW50WDplLmNsaWVudFgsY2xpZW50WTplLmNsaWVudFksZGF0YUluZGV4OnQubW9kZWwua2V5LGN1cnZlTnVtYmVyOnV9O3UhPT1UJiYoYz9kLmhvdmVyKGYpOmQudW5ob3ZlciYmZC51bmhvdmVyKGYpLFQ9dSl9fSksay5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucGljaz8uMDE6MX0pLGUuc3R5bGUoImJhY2tncm91bmQiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApIik7dmFyIEE9ZS5zZWxlY3RBbGwoIi4iK2YuY24ucGFyY29vcmRzKS5kYXRhKHcsbCk7QS5leGl0KCkucmVtb3ZlKCksQS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jbi5wYXJjb29yZHMsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEEuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5tb2RlbC50cmFuc2xhdGVYKyIsIit0Lm1vZGVsLnRyYW5zbGF0ZVkrIikifSk7dmFyIE09QS5zZWxlY3RBbGwoIi4iK2YuY24ucGFyY29vcmRzQ29udHJvbFZpZXcpLmRhdGEoYyxsKTtNLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3LCEwKSxNLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QubW9kZWwucGFkLmwrIiwiK3QubW9kZWwucGFkLnQrIikifSk7dmFyIFM9TS5zZWxlY3RBbGwoIi4iK2YuY24ueUF4aXMpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30sbCk7ZnVuY3Rpb24gRSh0LGUpe2Zvcih2YXIgcj1lLnBhbmVsc3x8KGUucGFuZWxzPVtdKSxuPXQuZGF0YSgpLGk9bi5sZW5ndGgtMSxhPTA7YTxpO2ErKyl7dmFyIG89clthXXx8KHJbYV09e30pLHM9blthXSxsPW5bYSsxXTtvLmRpbTE9cyxvLmRpbTI9bCxvLmNhbnZhc1g9cy5jYW52YXNYLG8ucGFuZWxTaXplWD1sLmNhbnZhc1gtcy5jYW52YXNYLG8ucGFuZWxTaXplWT1lLm1vZGVsLmNhbnZhc0hlaWdodCxvLnk9MCxvLmNhbnZhc1k9MH19Uy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jbi55QXhpcywhMCksTS5lYWNoKGZ1bmN0aW9uKHQpe0UoUyx0KX0pLGsuZWFjaChmdW5jdGlvbih0KXtpZih0LnZpZXdNb2RlbCl7IXQubGluZUxheWVyfHxkP3QubGluZUxheWVyPXAodGhpcyx0KTp0LmxpbmVMYXllci51cGRhdGUodCksKHQua2V5fHwwPT09dC5rZXkpJiYodC52aWV3TW9kZWxbdC5rZXldPXQubGluZUxheWVyKTt2YXIgZT0hdC5jb250ZXh0fHxkO3QubGluZUxheWVyLnJlbmRlcih0LnZpZXdNb2RlbC5wYW5lbHMsZSl9fSksUy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnhTY2FsZSh0LnhJbmRleCkrIiwgMCkifSksUy5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLm9uKCJkcmFnIixmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudDtfLmxpbmVQaWNrQWN0aXZlKCExKSx0Lng9TWF0aC5tYXgoLWYub3ZlcmRyYWcsTWF0aC5taW4odC5tb2RlbC53aWR0aCtmLm92ZXJkcmFnLG4uZXZlbnQueCkpLHQuY2FudmFzWD10LngqdC5tb2RlbC5jYW52YXNQaXhlbFJhdGlvLFMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSkuZWFjaChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlLnhJbmRleCksZS5jYW52YXNYPWUueCplLm1vZGVsLmNhbnZhc1BpeGVsUmF0aW99KSxFKFMsZSksUy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT1NYXRoLmFicyh0LnhJbmRleC1lLnhJbmRleCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnhTY2FsZSh0LnhJbmRleCkrIiwgMCkifSksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIsIDApIiksUy5lYWNoKGZ1bmN0aW9uKHIsbixpKXtpPT09dC5wYXJlbnQua2V5JiYoZS5kaW1lbnNpb25zW25dPXIpfSksZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMSwhdihlKSksZS5mb2N1c0xheWVyLnJlbmRlciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscyl9KS5vbigiZHJhZ2VuZCIsZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7dC54PXQueFNjYWxlKHQueEluZGV4KSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxFKFMsZSksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIsIDApIn0pLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIXYoZSkpLGUuZm9jdXNMYXllciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscyksZS5waWNrTGF5ZXImJmUucGlja0xheWVyLnJlbmRlcihlLnBhbmVscywhMCksXy5saW5lUGlja0FjdGl2ZSghMCksZCYmZC5heGVzTW92ZWQmJmQuYXhlc01vdmVkKGUua2V5LGUuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleH0pKX0pKSxTLmV4aXQoKS5yZW1vdmUoKTt2YXIgQz1TLnNlbGVjdEFsbCgiLiIrZi5jbi5heGlzT3ZlcmxheXMpLmRhdGEoYyxsKTtDLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmNuLmF4aXNPdmVybGF5cywhMCksQy5zZWxlY3RBbGwoIi4iK2YuY24uYXhpcykucmVtb3ZlKCk7dmFyIEw9Qy5zZWxlY3RBbGwoIi4iK2YuY24uYXhpcykuZGF0YShjLGwpO0wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuY24uYXhpcywhMCksTC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubW9kZWwuaGVpZ2h0L3QubW9kZWwudGlja0Rpc3RhbmNlLHI9dC5kb21haW5TY2FsZSxpPXIuZG9tYWluKCk7bi5zZWxlY3QodGhpcykuY2FsbChuLnN2Zy5heGlzKCkub3JpZW50KCJsZWZ0IikudGlja1NpemUoNCkub3V0ZXJUaWNrU2l6ZSgyKS50aWNrcyhlLHQudGlja0Zvcm1hdCkudGlja1ZhbHVlcyh0Lm9yZGluYWw/aTpudWxsKS50aWNrRm9ybWF0KHQub3JkaW5hbD9mdW5jdGlvbih0KXtyZXR1cm4gdH06bnVsbCkuc2NhbGUocikpLGEuZm9udChMLnNlbGVjdEFsbCgidGV4dCIpLHQubW9kZWwudGlja0ZvbnQpfSksTC5zZWxlY3RBbGwoIi5kb21haW4sIC50aWNrPmxpbmUiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC4yNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IiksTC5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1zaGFkb3ciLCIxcHggMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IDFweCAxcHggI2ZmZiIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iikuc3R5bGUoInVzZXItc2VsZWN0Iiwibm9uZSIpO3ZhciB6PUMuc2VsZWN0QWxsKCIuIitmLmNuLmF4aXNIZWFkaW5nKS5kYXRhKGMsbCk7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jbi5heGlzSGVhZGluZywhMCk7dmFyIE89ei5zZWxlY3RBbGwoIi4iK2YuY24uYXhpc1RpdGxlKS5kYXRhKGMsbCk7Ty5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoZi5jbi5heGlzVGl0bGUsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImN1cnNvciIsImV3LXJlc2l6ZSIpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIiksTy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKy1mLmF4aXNUaXRsZU9mZnNldCsiKSIpLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQubGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe2EuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLmxhYmVsRm9udCl9KTt2YXIgST1DLnNlbGVjdEFsbCgiLiIrZi5jbi5heGlzRXh0ZW50KS5kYXRhKGMsbCk7SS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jbi5heGlzRXh0ZW50LCEwKTt2YXIgRD1JLnNlbGVjdEFsbCgiLiIrZi5jbi5heGlzRXh0ZW50VG9wKS5kYXRhKGMsbCk7RC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jbi5heGlzRXh0ZW50VG9wLCEwKSxELmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrLWYuYXhpc0V4dGVudE9mZnNldCsiKSIpO3ZhciBQPUQuc2VsZWN0QWxsKCIuIitmLmNuLmF4aXNFeHRlbnRUb3BUZXh0KS5kYXRhKGMsbCk7ZnVuY3Rpb24gUih0LGUpe2lmKHQub3JkaW5hbClyZXR1cm4iIjt2YXIgcj10LmRvbWFpblNjYWxlLmRvbWFpbigpO3JldHVybiBuLmZvcm1hdCh0LnRpY2tGb3JtYXQpKHJbZT9yLmxlbmd0aC0xOjBdKX1QLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChmLmNuLmF4aXNFeHRlbnRUb3BUZXh0LCEwKS5jYWxsKHgpLFAudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gUih0LCEwKX0pLmVhY2goZnVuY3Rpb24odCl7YS5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwucmFuZ2VGb250KX0pO3ZhciBGPUkuc2VsZWN0QWxsKCIuIitmLmNuLmF4aXNFeHRlbnRCb3R0b20pLmRhdGEoYyxsKTtGLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmNuLmF4aXNFeHRlbnRCb3R0b20sITApLEYuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodC5tb2RlbC5oZWlnaHQrZi5heGlzRXh0ZW50T2Zmc2V0KSsiKSJ9KTt2YXIgQj1GLnNlbGVjdEFsbCgiLiIrZi5jbi5heGlzRXh0ZW50Qm90dG9tVGV4dCkuZGF0YShjLGwpO0IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKGYuY24uYXhpc0V4dGVudEJvdHRvbVRleHQsITApLmF0dHIoImR5IiwiMC43NWVtIikuY2FsbCh4KSxCLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIFIodCl9KS5lYWNoKGZ1bmN0aW9uKHQpe2EuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLnJhbmdlRm9udCl9KSxoLmVuc3VyZUF4aXNCcnVzaChDKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo1ODksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2d1cCI6Njk4LCIuL2F4aXNicnVzaCI6MTAxNiwiLi9jb25zdGFudHMiOjEwMTksIi4vbGluZXMiOjEwMjIsZDM6MTU0fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNvb3JkcyIpLGk9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsYT1yLl90b3BwYXBlcixvPXIuX3BhcGVyZGl2LHM9ci5fZ2xjb250YWluZXI7aWYoaSh0KSl7dmFyIGw9e30sYz17fSx1PXt9LGY9e30saD1yLl9zaXplO2UuZm9yRWFjaChmdW5jdGlvbihlLHIpe3ZhciBuPWVbMF0udHJhY2U7dVtyXT1uLmluZGV4O3ZhciBpPWZbcl09bi5fZnVsbElucHV0LmluZGV4O2xbcl09dC5kYXRhW2ldLmRpbWVuc2lvbnMsY1tyXT10LmRhdGFbaV0uZGltZW5zaW9ucy5zbGljZSgpfSk7bihvLGEscyxlLHt3aWR0aDpoLncsaGVpZ2h0OmguaCxtYXJnaW46e3Q6aC50LHI6aC5yLGI6aC5iLGw6aC5sfX0se2ZpbHRlckNoYW5nZWQ6ZnVuY3Rpb24oZSxuLGkpe3ZhciBhPWNbZV1bbl0sbz1pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkscz0iZGltZW5zaW9uc1siK24rIl0uY29uc3RyYWludHJhbmdlIixsPXIuX3RyYWNlUHJlR1VJW3QuX2Z1bGxEYXRhW3VbZV1dLl9mdWxsSW5wdXQudWlkXTtpZih2b2lkIDA9PT1sW3NdKXt2YXIgaD1hLmNvbnN0cmFpbnRyYW5nZTtsW3NdPWh8fG51bGx9dmFyIHA9dC5fZnVsbERhdGFbdVtlXV0uZGltZW5zaW9uc1tuXTtvLmxlbmd0aD8oMT09PW8ubGVuZ3RoJiYobz1vWzBdKSxhLmNvbnN0cmFpbnRyYW5nZT1vLHAuY29uc3RyYWludHJhbmdlPW8uc2xpY2UoKSxvPVtvXSk6KGRlbGV0ZSBhLmNvbnN0cmFpbnRyYW5nZSxkZWxldGUgcC5jb25zdHJhaW50cmFuZ2Usbz1udWxsKTt2YXIgZD17fTtkW3NdPW8sdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIsW2QsW2ZbZV1dXSl9LGhvdmVyOmZ1bmN0aW9uKGUpe3QuZW1pdCgicGxvdGx5X2hvdmVyIixlKX0sdW5ob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoInBsb3RseV91bmhvdmVyIixlKX0sYXhlc01vdmVkOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4hKCJ2aXNpYmxlImluIHQpfHx0LnZpc2libGV9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49ZS5pbmRleE9mKHIpLGk9dC5pbmRleE9mKG4pO3JldHVybi0xPT09aSYmKGkrPWUubGVuZ3RoKSxpfXZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBpKHIsdCxlKS1pKHIsdCxuKX19KGNbZV0uZmlsdGVyKG4pKTtsW2VdLnNvcnQoYSksY1tlXS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIW4odCl9KS5zb3J0KGZ1bmN0aW9uKHQpe3JldHVybiBjW2VdLmluZGV4T2YodCl9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbZV0uc3BsaWNlKGxbZV0uaW5kZXhPZih0KSwxKSxsW2VdLnNwbGljZShjW2VdLmluZGV4T2YodCksMCx0KX0pLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLFt7ZGltZW5zaW9uczpbbFtlXV19LFtmW2VdXV0pfX0pfX19LHsiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6NzEzLCIuL3BhcmNvb3JkcyI6MTAyNH1dLDEwMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz1pKHtlZGl0VHlwZToiY2FsYyIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJwbG90In0pO2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVsMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkbGFiZWw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxzY2FsZWdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOmwoe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoiYXV0byIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250Omwoe30sYyx7fSksaW5zaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSxvdXRzaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sZm9udDpsKHt9LGMse30pLHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGRvbWFpbjpzKHtuYW1lOiJwaWUiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGhvbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc29ydDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNvdW50ZXJjbG9ja3dpc2UiLGVkaXRUeXBlOiJjYWxjIn0scm90YXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOi0zNjAsbWF4OjM2MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxwdWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6bCh7fSxjLHt9KSx0aXRsZXBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6ImNhbGMifX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi4vLi4vcGxvdHMvZG9tYWluIjo3NzMsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0fV0sMTAyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPW4uZ2V0TW9kdWxlKCJwaWUiKSxyPWkodC5jYWxjZGF0YSxlKVswXTtlLnBsb3QodCxyKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygicGllIiksYT1lLl9oYXMmJmUuX2hhcygicGllIik7aSYmIWEmJm4uX3BpZWxheWVyLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9nZXRfZGF0YSI6Nzg0LCIuLi8uLi9yZWdpc3RyeSI6ODI5fV0sMTAyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxhPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4vaGVscGVycyIpLGw9e307ZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4hIWUmJighIShlPWEoZSkpLmlzVmFsaWQoKSYmKGU9by5hZGRPcGFjaXR5KGUsZS5nZXRBbHBoYSgpKSx0W3JdfHwodFtyXT1lKSxlKSl9fWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuPUpTT04uc3RyaW5naWZ5KHQpLGk9ZVtuXTtpZighaSl7Zm9yKGk9dC5zbGljZSgpLHI9MDtyPHQubGVuZ3RoO3IrKylpLnB1c2goYSh0W3JdKS5saWdodGVuKDIwKS50b0hleFN0cmluZygpKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWkucHVzaChhKHRbcl0pLmRhcmtlbigyMCkudG9IZXhTdHJpbmcoKSk7ZVtuXT1pfXJldHVybiBpfWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLGEsbyxsLHUsZj1lLnZhbHVlcyxoPWkoZikmJmYubGVuZ3RoLHA9ZS5sYWJlbHMsZD1lLm1hcmtlci5jb2xvcnN8fFtdLGc9W10sdj10Ll9mdWxsTGF5b3V0LG09e30seT0wLHg9di5oaWRkZW5sYWJlbHN8fFtdO2lmKGUuZGxhYmVsKWZvcihwPW5ldyBBcnJheShmLmxlbmd0aCkscj0wO3I8Zi5sZW5ndGg7cisrKXBbcl09U3RyaW5nKGUubGFiZWwwK3IqZS5kbGFiZWwpO3ZhciBiPWModi5fcGllY29sb3JtYXApLF89KGg/ZjpwKS5sZW5ndGg7Zm9yKHI9MDtyPF87cisrKXtpZihoKXtpZihhPWZbcl0sIW4oYSkpY29udGludWU7aWYoKGE9K2EpPDApY29udGludWV9ZWxzZSBhPTE7dm9pZCAwIT09KG89cFtyXSkmJiIiIT09b3x8KG89cik7dmFyIHc9bVtvPVN0cmluZyhvKV07dm9pZCAwPT09dz8obVtvXT1nLmxlbmd0aCwobD0tMSE9PXguaW5kZXhPZihvKSl8fCh5Kz1hKSxnLnB1c2goe3Y6YSxsYWJlbDpvLGNvbG9yOmIoZFtyXSxvKSxpOnIscHRzOltyXSxoaWRkZW46bH0pKTooKHU9Z1t3XSkudis9YSx1LnB0cy5wdXNoKHIpLHUuaGlkZGVufHwoeSs9YSksITE9PT11LmNvbG9yJiZkW3JdJiYodS5jb2xvcj1iKGRbcl0sbykpKX1pZihlLnNvcnQmJmcuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnYtdC52fSksZ1swXSYmKGdbMF0udlRvdGFsPXkpLGUudGV4dGluZm8mJiJub25lIiE9PWUudGV4dGluZm8pe3ZhciBrLFQ9LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoImxhYmVsIiksQT0tMSE9PWUudGV4dGluZm8uaW5kZXhPZigidGV4dCIpLE09LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoInZhbHVlIiksUz0tMSE9PWUudGV4dGluZm8uaW5kZXhPZigicGVyY2VudCIpLEU9di5zZXBhcmF0b3JzO2ZvcihyPTA7cjxnLmxlbmd0aDtyKyspe2lmKHU9Z1tyXSxrPVQ/W3UubGFiZWxdOltdLEEpe3ZhciBDPXMuZ2V0Rmlyc3RGaWxsZWQoZS50ZXh0LHUucHRzKTtDJiZrLnB1c2goQyl9TSYmay5wdXNoKHMuZm9ybWF0UGllVmFsdWUodS52LEUpKSxTJiZrLnB1c2gocy5mb3JtYXRQaWVQZXJjZW50KHUudi95LEUpKSx1LnRleHQ9ay5qb2luKCI8YnI+Iil9fXJldHVybiBnfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxuPWUucGllY29sb3J3YXksaT1lLl9waWVjb2xvcm1hcDtlLmV4dGVuZHBpZWNvbG9ycyYmKG49dShuLGwpKTtmb3IodmFyIGE9MCxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBzPXJbb107aWYoInBpZSI9PT1zWzBdLnRyYWNlLnR5cGUpZm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBmPXNbY107ITE9PT1mLmNvbG9yJiYoaVtmLmxhYmVsXT9mLmNvbG9yPWlbZi5sYWJlbF06KGlbZi5sYWJlbF09Zi5jb2xvcj1uW2Elbi5sZW5ndGhdLGErKykpfX19LG1ha2VQdWxsQ29sb3JGbjpjLGdlbmVyYXRlRXh0ZW5kZWRDb2xvcnM6dX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9saWIiOjcwMCwiLi9oZWxwZXJzIjoxMDMxLCJmYXN0LWlzbnVtZXJpYyI6MjIxLHRpbnljb2xvcjI6NTIxfV0sMTAyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgbCxjPW4uY29lcmNlRm9udCx1PXMoInZhbHVlcyIpLGY9bi5pc0FycmF5T3JUeXBlZEFycmF5KHUpLGg9cygibGFiZWxzIik7aWYoQXJyYXkuaXNBcnJheShoKT8obD1oLmxlbmd0aCxmJiYobD1NYXRoLm1pbihsLHUubGVuZ3RoKSkpOmYmJihsPXUubGVuZ3RoLHMoImxhYmVsMCIpLHMoImRsYWJlbCIpKSxsKXtlLl9sZW5ndGg9bCxzKCJtYXJrZXIubGluZS53aWR0aCIpJiZzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5jb2xvcnMiKSxzKCJzY2FsZWdyb3VwIik7dmFyIHA9cygidGV4dCIpLGQ9cygidGV4dGluZm8iLEFycmF5LmlzQXJyYXkocCk/InRleHQrcGVyY2VudCI6InBlcmNlbnQiKTtpZihzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIiksZCYmIm5vbmUiIT09ZCl7dmFyIGc9cygidGV4dHBvc2l0aW9uIiksdj1BcnJheS5pc0FycmF5KGcpfHwiYXV0byI9PT1nLG09dnx8Imluc2lkZSI9PT1nLHk9dnx8Im91dHNpZGUiPT09ZztpZihtfHx5KXt2YXIgeD1jKHMsInRleHRmb250IixvLmZvbnQpO2lmKG0pe3ZhciBiPW4uZXh0ZW5kRmxhdCh7fSx4KTshKHQudGV4dGZvbnQmJnQudGV4dGZvbnQuY29sb3IpJiZkZWxldGUgYi5jb2xvcixjKHMsImluc2lkZXRleHRmb250IixiKX15JiZjKHMsIm91dHNpZGV0ZXh0Zm9udCIseCl9fWEoZSxvLHMpO3ZhciBfPXMoImhvbGUiKTtpZihzKCJ0aXRsZS50ZXh0Iikpe3ZhciB3PXMoInRpdGxlLnBvc2l0aW9uIixfPyJtaWRkbGUgY2VudGVyIjoidG9wIGNlbnRlciIpO198fCJtaWRkbGUgY2VudGVyIiE9PXd8fChlLnRpdGxlLnBvc2l0aW9uPSJ0b3AgY2VudGVyIiksYyhzLCJ0aXRsZS5mb250IixvLmZvbnQpfXMoInNvcnQiKSxzKCJkaXJlY3Rpb24iKSxzKCJyb3RhdGlvbiIpLHMoInB1bGwiKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuL2F0dHJpYnV0ZXMiOjEwMjZ9XSwxMDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17Y3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcnM6dC5wdHMsZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGxhYmVsOnQubGFiZWwsY29sb3I6dC5jb2xvcix2YWx1ZTp0LnYscGVyY2VudDp0LnBlcmNlbnQsdGV4dDp0LnRleHQsdjp0LnZ9O3JldHVybiAxPT09dC5wdHMubGVuZ3RoJiYoci5wb2ludE51bWJlcj1yLmk9dC5wdHNbMF0pLG4ocixlLHQucHRzKSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjYxMn1dLDEwMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KDEwMCp0KS50b1ByZWNpc2lvbigzKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoIi4iKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKSsiJSJ9LHIuZm9ybWF0UGllVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvUHJlY2lzaW9uKDEwKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoIi4iKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKX0sci5nZXRGaXJzdEZpbGxlZD1mdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXRbZVtyXV07aWYobnx8MD09PW4pcmV0dXJuIG59fSxyLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9yLmdldEZpcnN0RmlsbGVkKHQsZSk6dHx8dm9pZCAwfX0seyIuLi8uLi9saWIiOjcwMH1dLDEwMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxuLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO3ZhciBpPXQoIi4vY2FsYyIpO24uY2FsYz1pLmNhbGMsbi5jcm9zc1RyYWNlQ2FsYz1pLmNyb3NzVHJhY2VDYWxjLG4ucGxvdD10KCIuL3Bsb3QiKS5wbG90LG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uc3R5bGVPbmU9dCgiLi9zdHlsZV9vbmUiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InBpZSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuL2Jhc2VfcGxvdCIpLG4uY2F0ZWdvcmllcz1bInBpZSIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMDI2LCIuL2Jhc2VfcGxvdCI6MTAyNywiLi9jYWxjIjoxMDI4LCIuL2RlZmF1bHRzIjoxMDI5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDMzLCIuL2xheW91dF9kZWZhdWx0cyI6MTAzNCwiLi9wbG90IjoxMDM1LCIuL3N0eWxlIjoxMDM2LCIuL3N0eWxlX29uZSI6MTAzN31dLDEwMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtoaWRkZW5sYWJlbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0scGllY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRwaWVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJoaWRkZW5sYWJlbHMiKSxyKCJwaWVjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kcGllY29sb3JzIil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDMzfV0sMTAzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi9oZWxwZXJzIiksdT10KCIuL2V2ZW50X2RhdGEiKTtmdW5jdGlvbiBmKHQsZSxyKXt2YXIgYT1yWzBdLG89YS50cmFjZSxzPWEuY3gsbD1hLmN5OyJfaGFzSG92ZXJMYWJlbCJpbiBvfHwoby5faGFzSG92ZXJMYWJlbD0hMSksIl9oYXNIb3ZlckV2ZW50ImluIG98fChvLl9oYXNIb3ZlckV2ZW50PSExKSx0Lm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsZj1lLl9mdWxsRGF0YVtvLmluZGV4XTtpZighZS5fZHJhZ2dpbmcmJiExIT09ci5ob3Zlcm1vZGUpe3ZhciBoPWYuaG92ZXJpbmZvO2lmKEFycmF5LmlzQXJyYXkoaCkmJihoPWkuY2FzdEhvdmVyaW5mbyh7aG92ZXJpbmZvOltjLmNhc3RPcHRpb24oaCx0LnB0cyldLF9tb2R1bGU6by5fbW9kdWxlfSxyLDApKSwiYWxsIj09PWgmJihoPSJsYWJlbCt0ZXh0K3ZhbHVlK3BlcmNlbnQrbmFtZSIpLGYuaG92ZXJ0ZW1wbGF0ZXx8Im5vbmUiIT09aCYmInNraXAiIT09aCYmaCl7dmFyIHA9dC5ySW5zY3JpYmVkLGQ9cyt0LnB4bWlkWzBdKigxLXApLGc9bCt0LnB4bWlkWzFdKigxLXApLHY9ci5zZXBhcmF0b3JzLG09W107aWYoaCYmLTEhPT1oLmluZGV4T2YoImxhYmVsIikmJm0ucHVzaCh0LmxhYmVsKSx0LnRleHQ9Yy5jYXN0T3B0aW9uKGYuaG92ZXJ0ZXh0fHxmLnRleHQsdC5wdHMpLGgmJi0xIT09aC5pbmRleE9mKCJ0ZXh0Iikpe3ZhciB5PXQudGV4dDt5JiZtLnB1c2goeSl9dC52YWx1ZT10LnYsdC52YWx1ZUxhYmVsPWMuZm9ybWF0UGllVmFsdWUodC52LHYpLGgmJi0xIT09aC5pbmRleE9mKCJ2YWx1ZSIpJiZtLnB1c2godC52YWx1ZUxhYmVsKSx0LnBlcmNlbnQ9dC52L2EudlRvdGFsLHQucGVyY2VudExhYmVsPWMuZm9ybWF0UGllUGVyY2VudCh0LnBlcmNlbnQsdiksaCYmLTEhPT1oLmluZGV4T2YoInBlcmNlbnQiKSYmbS5wdXNoKHQucGVyY2VudExhYmVsKTt2YXIgeD1vLmhvdmVybGFiZWwsYj14LmZvbnQ7aS5sb25lSG92ZXIoe3gwOmQtcCphLnIseDE6ZCtwKmEucix5OmcsdGV4dDptLmpvaW4oIjxicj4iKSxuYW1lOmYuaG92ZXJ0ZW1wbGF0ZXx8LTEhPT1oLmluZGV4T2YoIm5hbWUiKT9mLm5hbWU6dm9pZCAwLGlkZWFsQWxpZ246dC5weG1pZFswXTwwPyJsZWZ0IjoicmlnaHQiLGNvbG9yOmMuY2FzdE9wdGlvbih4LmJnY29sb3IsdC5wdHMpfHx0LmNvbG9yLGJvcmRlckNvbG9yOmMuY2FzdE9wdGlvbih4LmJvcmRlcmNvbG9yLHQucHRzKSxmb250RmFtaWx5OmMuY2FzdE9wdGlvbihiLmZhbWlseSx0LnB0cyksZm9udFNpemU6Yy5jYXN0T3B0aW9uKGIuc2l6ZSx0LnB0cyksZm9udENvbG9yOmMuY2FzdE9wdGlvbihiLmNvbG9yLHQucHRzKSx0cmFjZTpmLGhvdmVydGVtcGxhdGU6Yy5jYXN0T3B0aW9uKGYuaG92ZXJ0ZW1wbGF0ZSx0LnB0cyksaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LGV2ZW50RGF0YTpbdSh0LGYpXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6ZX0pLG8uX2hhc0hvdmVyTGFiZWw9ITB9by5faGFzSG92ZXJFdmVudD0hMCxlLmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czpbdSh0LGYpXSxldmVudDpuLmV2ZW50fSl9fSksdC5vbigibW91c2VvdXQiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsYT1lLl9mdWxsRGF0YVtvLmluZGV4XSxzPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7by5faGFzSG92ZXJFdmVudCYmKHQub3JpZ2luYWxFdmVudD1uLmV2ZW50LGUuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W3UocyxhKV0sZXZlbnQ6bi5ldmVudH0pLG8uX2hhc0hvdmVyRXZlbnQ9ITEpLG8uX2hhc0hvdmVyTGFiZWwmJihpLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxvLl9oYXNIb3ZlckxhYmVsPSExKX0pLHQub24oImNsaWNrIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGE9ZS5fZnVsbERhdGFbby5pbmRleF07ZS5fZHJhZ2dpbmd8fCExPT09ci5ob3Zlcm1vZGV8fChlLl9ob3ZlcmRhdGE9W3UodCxhKV0saS5jbGljayhlLG4uZXZlbnQpKX0pfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPU1hdGguc3FydCh0LndpZHRoKnQud2lkdGgrdC5oZWlnaHQqdC5oZWlnaHQpLGk9dC53aWR0aC90LmhlaWdodCxhPWUuaGFsZmFuZ2xlLG89ZS5yaW5nLHM9ZS5ySW5zY3JpYmVkLGw9ci5yfHxlLnJweDEsYz17c2NhbGU6cypsKjIvbixyQ2VudGVyOjEtcyxyb3RhdGU6MH07aWYoYy5zY2FsZT49MSlyZXR1cm4gYzt2YXIgdT1pKzEvKDIqTWF0aC50YW4oYSkpLGY9bCpNYXRoLm1pbigxLyhNYXRoLnNxcnQodSp1Ky41KSt1KSxvLyhNYXRoLnNxcnQoaSppK28vMikraSkpLGg9e3NjYWxlOjIqZi90LmhlaWdodCxyQ2VudGVyOk1hdGguY29zKGYvbCktZippL2wscm90YXRlOigxODAvTWF0aC5QSSplLm1pZGFuZ2xlKzcyMCklMTgwLTkwfSxwPTEvaSxkPXArMS8oMipNYXRoLnRhbihhKSksZz1sKk1hdGgubWluKDEvKE1hdGguc3FydChkKmQrLjUpK2QpLG8vKE1hdGguc3FydChwKnArby8yKStwKSksdj17c2NhbGU6MipnL3Qud2lkdGgsckNlbnRlcjpNYXRoLmNvcyhnL2wpLWcvaS9sLHJvdGF0ZTooMTgwL01hdGguUEkqZS5taWRhbmdsZSs4MTApJTE4MC05MH0sbT12LnNjYWxlPmguc2NhbGU/djpoO3JldHVybiBjLnNjYWxlPDEmJm0uc2NhbGU+Yy5zY2FsZT9tOmN9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB0LnYhPT1lLnZUb3RhbHx8ZS50cmFjZS5ob2xlP01hdGgubWluKDEvKDErMS9NYXRoLnNpbih0LmhhbGZhbmdsZSkpLHQucmluZy8yKToxfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj1lLnB4bWlkWzBdLG49ZS5weG1pZFsxXSxpPXQud2lkdGgvMixhPXQuaGVpZ2h0LzI7cmV0dXJuIHI8MCYmKGkqPS0xKSxuPDAmJihhKj0tMSkse3NjYWxlOjEsckNlbnRlcjoxLHJvdGF0ZTowLHg6aStNYXRoLmFicyhhKSooaT4wPzE6LTEpLzIseTphLygxK3Iqci8obipuKSksb3V0c2lkZTohMH19ZnVuY3Rpb24gZyh0LGUpe3ZhciByPXQudHJhY2Usbj1lLmgqKHIuZG9tYWluLnlbMV0tci5kb21haW4ueVswXSk7cmV0dXJuIE1hdGgubWluKHQudGl0bGVCb3guaGVpZ2h0LG4vMil9ZnVuY3Rpb24gdih0KXt2YXIgZSxyPXQucHVsbDtpZihBcnJheS5pc0FycmF5KHIpKWZvcihyPTAsZT0wO2U8dC5wdWxsLmxlbmd0aDtlKyspdC5wdWxsW2VdPnImJihyPXQucHVsbFtlXSk7cmV0dXJuIHJ9ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDshZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPWUuX2Z1bGxMYXlvdXQsYT0wO2E8dC5sZW5ndGg7YSsrKWlmKHI9dFthXVswXSwobj1yLnRyYWNlKS50aXRsZS50ZXh0KXt2YXIgYz1pLm1ldGE/cy50ZW1wbGF0ZVN0cmluZyhuLnRpdGxlLnRleHQse21ldGE6aS5tZXRhfSk6bi50aXRsZS50ZXh0LHU9by50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkudGV4dChjKS5jYWxsKG8uZm9udCxuLnRpdGxlLmZvbnQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsZSksZj1vLmJCb3godS5ub2RlKCksITApO3IudGl0bGVCb3g9e3dpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0fSx1LnJlbW92ZSgpfX0oZSx0KSxmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxmPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspbz10W2ldWzBdLHM9by50cmFjZSxyPWUudyoocy5kb21haW4ueFsxXS1zLmRvbWFpbi54WzBdKSxuPWUuaCoocy5kb21haW4ueVsxXS1zLmRvbWFpbi55WzBdKSxzLnRpdGxlLnRleHQmJiJtaWRkbGUgY2VudGVyIiE9PXMudGl0bGUucG9zaXRpb24mJihuLT1nKG8sZSkpLGw9dihzKSxvLnI9TWF0aC5taW4ocixuKS8oMisyKmwpLG8uY3g9ZS5sK2Uudyoocy5kb21haW4ueFsxXStzLmRvbWFpbi54WzBdKS8yLG8uY3k9ZS50K2UuaCooMS1zLmRvbWFpbi55WzBdKS1uLzIscy50aXRsZS50ZXh0JiYtMSE9PXMudGl0bGUucG9zaXRpb24uaW5kZXhPZigiYm90dG9tIikmJihvLmN5LT1nKG8sZSkpLHMuc2NhbGVncm91cCYmLTE9PT1mLmluZGV4T2Yocy5zY2FsZWdyb3VwKSYmZi5wdXNoKHMuc2NhbGVncm91cCk7Zm9yKGE9MDthPGYubGVuZ3RoO2ErKyl7Zm9yKHU9MS8wLGM9ZlthXSxpPTA7aTx0Lmxlbmd0aDtpKyspKG89dFtpXVswXSkudHJhY2Uuc2NhbGVncm91cD09PWMmJih1PU1hdGgubWluKHUsby5yKm8uci9vLnZUb3RhbCkpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspKG89dFtpXVswXSkudHJhY2Uuc2NhbGVncm91cD09PWMmJihvLnI9TWF0aC5zcXJ0KHUqby52VG90YWwpKX19KGUsci5fc2l6ZSk7dmFyIGk9cy5tYWtlVHJhY2VHcm91cHMoci5fcGllbGF5ZXIsZSwidHJhY2UiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLHU9ZVswXSxtPXUudHJhY2U7IWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRbMF0sYT1pLnRyYWNlLG89YS5yb3RhdGlvbipNYXRoLlBJLzE4MCxzPTIqTWF0aC5QSS9pLnZUb3RhbCxsPSJweDAiLGM9InB4MSI7aWYoImNvdW50ZXJjbG9ja3dpc2UiPT09YS5kaXJlY3Rpb24pe2ZvcihlPTA7ZTx0Lmxlbmd0aCYmdFtlXS5oaWRkZW47ZSsrKTtpZihlPT09dC5sZW5ndGgpcmV0dXJuO28rPXMqdFtlXS52LHMqPS0xLGw9InB4MSIsYz0icHgwIn1mdW5jdGlvbiB1KHQpe3JldHVybltpLnIqTWF0aC5zaW4odCksLWkucipNYXRoLmNvcyh0KV19Zm9yKG49dShvKSxlPTA7ZTx0Lmxlbmd0aDtlKyspKHI9dFtlXSkuaGlkZGVufHwocltsXT1uLG8rPXMqci52LzIsci5weG1pZD11KG8pLHIubWlkYW5nbGU9byxvKz1zKnIudi8yLG49dShvKSxyW2NdPW4sci5sYXJnZUFyYz1yLnY+aS52VG90YWwvMj8xOjAsci5oYWxmYW5nbGU9TWF0aC5QSSpNYXRoLm1pbihyLnYvaS52VG90YWwsLjUpLHIucmluZz0xLWEuaG9sZSxyLnJJbnNjcmliZWQ9cChyLGkpKX0oZSksaS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLGkuZWFjaChmdW5jdGlvbigpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLmRhdGEoZSk7aS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksaS5leGl0KCkucmVtb3ZlKCk7dmFyIHA9W1tbXSxbXV0sW1tdLFtdXV0seT0hMTtpLmVhY2goZnVuY3Rpb24ocil7aWYoci5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle3IucG9pbnROdW1iZXI9ci5pLHIuY3VydmVOdW1iZXI9bS5pbmRleCxwW3IucHhtaWRbMV08MD8wOjFdW3IucHhtaWRbMF08MD8wOjFdLnB1c2gocik7dmFyIGk9dS5jeCxnPXUuY3ksdj1uLnNlbGVjdCh0aGlzKSx4PXYuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5kYXRhKFtyXSk7aWYoeC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInN1cmZhY2UiLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLHYuY2FsbChmLHQsZSksbS5wdWxsKXt2YXIgYj0rYy5jYXN0T3B0aW9uKG0ucHVsbCxyLnB0cyl8fDA7Yj4wJiYoaSs9YipyLnB4bWlkWzBdLGcrPWIqci5weG1pZFsxXSl9ci5jeEZpbmFsPWksci5jeUZpbmFsPWc7dmFyIF89bS5ob2xlO2lmKHIudj09PXUudlRvdGFsKXt2YXIgdz0iTSIrKGkrci5weDBbMF0pKyIsIisoZytyLnB4MFsxXSkrUyhyLnB4MCxyLnB4bWlkLCEwLDEpK1Moci5weG1pZCxyLnB4MCwhMCwxKSsiWiI7Xz94LmF0dHIoImQiLCJNIisoaStfKnIucHgwWzBdKSsiLCIrKGcrXypyLnB4MFsxXSkrUyhyLnB4MCxyLnB4bWlkLCExLF8pK1Moci5weG1pZCxyLnB4MCwhMSxfKSsiWiIrdyk6eC5hdHRyKCJkIix3KX1lbHNle3ZhciBrPVMoci5weDAsci5weDEsITAsMSk7aWYoXyl7dmFyIFQ9MS1fO3guYXR0cigiZCIsIk0iKyhpK18qci5weDFbMF0pKyIsIisoZytfKnIucHgxWzFdKStTKHIucHgxLHIucHgwLCExLF8pKyJsIitUKnIucHgwWzBdKyIsIitUKnIucHgwWzFdK2srIloiKX1lbHNlIHguYXR0cigiZCIsIk0iK2krIiwiK2crImwiK3IucHgwWzBdKyIsIityLnB4MFsxXStrKyJaIil9dmFyIEE9Yy5jYXN0T3B0aW9uKG0udGV4dHBvc2l0aW9uLHIucHRzKSxNPXYuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoci50ZXh0JiYibm9uZSIhPT1BP1swXTpbXSk7TS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLE0uZXhpdCgpLnJlbW92ZSgpLE0uZWFjaChmdW5jdGlvbigpe3ZhciBlPXMuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSk7ZS50ZXh0KHIudGV4dCkuYXR0cih7Y2xhc3M6InNsaWNldGV4dCIsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9KS5jYWxsKG8uZm9udCwib3V0c2lkZSI9PT1BP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuY29sb3IsZS5wdHMpfHxjLmNhc3RPcHRpb24odC50ZXh0Zm9udC5jb2xvcixlLnB0cyl8fHIuY29sb3IsaT1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8Yy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8ci5mYW1pbHksYT1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm4sZmFtaWx5Omksc2l6ZTphfX0obSxyLHQuX2Z1bGxMYXlvdXQuZm9udCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWMuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmNvbG9yLGUucHRzKTshbiYmdC5faW5wdXQudGV4dGZvbnQmJihuPWMuY2FzdE9wdGlvbih0Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcixlLnB0cykpO3ZhciBpPWMuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmZhbWlseSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LmZhbWlseSxlLnB0cyl8fHIuZmFtaWx5LG89Yy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm58fGEuY29udHJhc3QoZS5jb2xvciksZmFtaWx5Omksc2l6ZTpvfX0obSxyLHQuX2Z1bGxMYXlvdXQuZm9udCkpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIGYscD1vLmJCb3goZS5ub2RlKCkpOyJvdXRzaWRlIj09PUE/Zj1kKHAscik6KGY9aChwLHIsdSksImF1dG8iPT09QSYmZi5zY2FsZTwxJiYoZS5jYWxsKG8uZm9udCxtLm91dHNpZGV0ZXh0Zm9udCksbS5vdXRzaWRldGV4dGZvbnQuZmFtaWx5PT09bS5pbnNpZGV0ZXh0Zm9udC5mYW1pbHkmJm0ub3V0c2lkZXRleHRmb250LnNpemU9PT1tLmluc2lkZXRleHRmb250LnNpemV8fChwPW8uYkJveChlLm5vZGUoKSkpLGY9ZChwLHIpKSk7dmFyIHY9aStyLnB4bWlkWzBdKmYuckNlbnRlcisoZi54fHwwKSx4PWcrci5weG1pZFsxXSpmLnJDZW50ZXIrKGYueXx8MCk7Zi5vdXRzaWRlJiYoci55TGFiZWxNaW49eC1wLmhlaWdodC8yLHIueUxhYmVsTWlkPXgsci55TGFiZWxNYXg9eCtwLmhlaWdodC8yLHIubGFiZWxFeHRyYVg9MCxyLmxhYmVsRXh0cmFZPTAseT0hMCksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsIit4KyIpIisoZi5zY2FsZTwxPyJzY2FsZSgiK2Yuc2NhbGUrIikiOiIiKSsoZi5yb3RhdGU/InJvdGF0ZSgiK2Yucm90YXRlKyIpIjoiIikrInRyYW5zbGF0ZSgiKy0ocC5sZWZ0K3AucmlnaHQpLzIrIiwiKy0ocC50b3ArcC5ib3R0b20pLzIrIikiKX0pfWZ1bmN0aW9uIFModCxlLG4saSl7cmV0dXJuImEiK2kqdS5yKyIsIitpKnUucisiIDAgIityLmxhcmdlQXJjKyhuPyIgMSAiOiIgMCAiKStpKihlWzBdLXRbMF0pKyIsIitpKihlWzFdLXRbMV0pfX0pO3ZhciB4PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50aXRsZXRleHQiKS5kYXRhKG0udGl0bGUudGV4dD9bMF06W10pO3guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aXRsZXRleHQiLCEwKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmVhY2goZnVuY3Rpb24oKXt2YXIgZSxpPXMuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSksYT1yLm1ldGE/cy50ZW1wbGF0ZVN0cmluZyhtLnRpdGxlLnRleHQse21ldGE6ci5tZXRhfSk6bS50aXRsZS50ZXh0O2kudGV4dChhKS5hdHRyKHtjbGFzczoidGl0bGV0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwoby5mb250LG0udGl0bGUuZm9udCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSxlPSJtaWRkbGUgY2VudGVyIj09PW0udGl0bGUucG9zaXRpb24/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQudGl0bGVCb3gud2lkdGgqdC50aXRsZUJveC53aWR0aCt0LnRpdGxlQm94LmhlaWdodCp0LnRpdGxlQm94LmhlaWdodCk7cmV0dXJue3g6dC5jeCx5OnQuY3ksc2NhbGU6dC50cmFjZS5ob2xlKnQucioyL2UsdHg6MCx0eTotdC50aXRsZUJveC5oZWlnaHQvMit0LnRyYWNlLnRpdGxlLmZvbnQuc2l6ZX19KHUpOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPTEsYT0xLG89dC50cmFjZSxzPXt4OnQuY3gseTp0LmN5fSxsPXt0eDowLHR5OjB9O3JldHVybiBsLnR5Kz1vLnRpdGxlLmZvbnQuc2l6ZSxuPXYobyksLTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoInRvcCIpPyhzLnktPSgxK24pKnQucixsLnR5LT10LnRpdGxlQm94LmhlaWdodCk6LTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpJiYocy55Kz0oMStuKSp0LnIpLC0xIT09by50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJsZWZ0Iik/KHI9ZS53KihvLmRvbWFpbi54WzFdLW8uZG9tYWluLnhbMF0pLzIrdC5yLHMueC09KDErbikqdC5yLGwudHgrPXQudGl0bGVCb3gud2lkdGgvMik6LTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImNlbnRlciIpP3I9ZS53KihvLmRvbWFpbi54WzFdLW8uZG9tYWluLnhbMF0pOi0xIT09by50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpJiYocj1lLncqKG8uZG9tYWluLnhbMV0tby5kb21haW4ueFswXSkvMit0LnIscy54Kz0oMStuKSp0LnIsbC50eC09dC50aXRsZUJveC53aWR0aC8yKSxpPXIvdC50aXRsZUJveC53aWR0aCxhPWcodCxlKS90LnRpdGxlQm94LmhlaWdodCx7eDpzLngseTpzLnksc2NhbGU6TWF0aC5taW4oaSxhKSx0eDpsLnR4LHR5OmwudHl9fSh1LHIuX3NpemUpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS54KyIsIitlLnkrIikiKyhlLnNjYWxlPDE/InNjYWxlKCIrZS5zY2FsZSsiKSI6IiIpKyJ0cmFuc2xhdGUoIitlLnR4KyIsIitlLnR5KyIpIil9KSx5JiZmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLHUsZixoLHAsZCxnO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm4gdC5weG1pZFsxXS1lLnB4bWlkWzFdfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZS5weG1pZFsxXS10LnB4bWlkWzFdfWZ1bmN0aW9uIHkodCxyKXtyfHwocj17fSk7dmFyIGksdSxmLHAsZCxnLHY9ci5sYWJlbEV4dHJhWSsobj9yLnlMYWJlbE1heDpyLnlMYWJlbE1pbiksbT1uP3QueUxhYmVsTWluOnQueUxhYmVsTWF4LHk9bj90LnlMYWJlbE1heDp0LnlMYWJlbE1pbix4PXQuY3lGaW5hbCtvKHQucHgwWzFdLHQucHgxWzFdKSxiPXYtbTtpZihiKmw+MCYmKHQubGFiZWxFeHRyYVk9YiksQXJyYXkuaXNBcnJheShlLnB1bGwpKWZvcih1PTA7dTxoLmxlbmd0aDt1KyspKGY9aFt1XSk9PT10fHwoYy5jYXN0T3B0aW9uKGUucHVsbCx0LnB0cyl8fDApPj0oYy5jYXN0T3B0aW9uKGUucHVsbCxmLnB0cyl8fDApfHwoKHQucHhtaWRbMV0tZi5weG1pZFsxXSkqbD4wPyhwPWYuY3lGaW5hbCtvKGYucHgwWzFdLGYucHgxWzFdKSwoYj1wLW0tdC5sYWJlbEV4dHJhWSkqbD4wJiYodC5sYWJlbEV4dHJhWSs9YikpOih5K3QubGFiZWxFeHRyYVkteCkqbD4wJiYoaT0zKnMqTWF0aC5hYnModS1oLmluZGV4T2YodCkpLGQ9Zi5jeEZpbmFsK2EoZi5weDBbMF0sZi5weDFbMF0pLChnPWQraS0odC5jeEZpbmFsK3QucHhtaWRbMF0pLXQubGFiZWxFeHRyYVgpKnM+MCYmKHQubGFiZWxFeHRyYVgrPWcpKSl9Zm9yKG49MDtuPDI7bisrKWZvcihpPW4/djptLG89bj9NYXRoLm1heDpNYXRoLm1pbixsPW4/MTotMSxyPTA7cjwyO3IrKyl7Zm9yKGE9cj9NYXRoLm1heDpNYXRoLm1pbixzPXI/MTotMSwodT10W25dW3JdKS5zb3J0KGkpLGY9dFsxLW5dW3JdLGg9Zi5jb25jYXQodSksZD1bXSxwPTA7cDx1Lmxlbmd0aDtwKyspdm9pZCAwIT09dVtwXS55TGFiZWxNaWQmJmQucHVzaCh1W3BdKTtmb3IoZz0hMSxwPTA7biYmcDxmLmxlbmd0aDtwKyspaWYodm9pZCAwIT09ZltwXS55TGFiZWxNaWQpe2c9ZltwXTticmVha31mb3IocD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgeD1wJiZkW3AtMV07ZyYmIXAmJih4PWcpLHkoZFtwXSx4KX19fShwLG0pLGZ1bmN0aW9uKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBpPXIuc2VsZWN0KCJnLnNsaWNldGV4dCB0ZXh0Iik7aS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxhYmVsRXh0cmFYKyIsIit0LmxhYmVsRXh0cmFZKyIpIitpLmF0dHIoInRyYW5zZm9ybSIpKTt2YXIgbz10LmN4RmluYWwrdC5weG1pZFswXSxsPXQuY3lGaW5hbCt0LnB4bWlkWzFdLGM9Ik0iK28rIiwiK2wsdT0odC55TGFiZWxNYXgtdC55TGFiZWxNaW4pKih0LnB4bWlkWzBdPDA/LTE6MSkvNDtpZih0LmxhYmVsRXh0cmFYKXt2YXIgZj10LmxhYmVsRXh0cmFYKnQucHhtaWRbMV0vdC5weG1pZFswXSxoPXQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVktKHQuY3lGaW5hbCt0LnB4bWlkWzFdKTtNYXRoLmFicyhmKT5NYXRoLmFicyhoKT9jKz0ibCIraCp0LnB4bWlkWzBdL3QucHhtaWRbMV0rIiwiK2grIkgiKyhvK3QubGFiZWxFeHRyYVgrdSk6Yys9ImwiK3QubGFiZWxFeHRyYVgrIiwiK2YrInYiKyhoLWYpKyJoIit1fWVsc2UgYys9IlYiKyh0LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZKSsiaCIrdTtzLmVuc3VyZVNpbmdsZShyLCJwYXRoIiwidGV4dGxpbmUiKS5jYWxsKGEuc3Ryb2tlLGUub3V0c2lkZXRleHRmb250LmNvbG9yKS5hdHRyKHsic3Ryb2tlLXdpZHRoIjpNYXRoLm1pbigyLGUub3V0c2lkZXRleHRmb250LnNpemUvOCksZDpjLGZpbGw6Im5vbmUifSl9ZWxzZSByLnNlbGVjdCgicGF0aC50ZXh0bGluZSIpLnJlbW92ZSgpfSl9KGksbSl9KX0pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpLnNlbGVjdEFsbCgidHNwYW4iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hdHRyKCJkeSIpJiZ0LmF0dHIoImR5Iix0LmF0dHIoImR5IikpfSl9LDApfSx0cmFuc2Zvcm1JbnNpZGVUZXh0Omh9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzI0LCIuL2V2ZW50X2RhdGEiOjEwMzAsIi4vaGVscGVycyI6MTAzMSxkMzoxNTR9XSwxMDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuL3N0eWxlX29uZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9waWVsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpO3Iuc3R5bGUoe29wYWNpdHk6ZS5vcGFjaXR5fSksci5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChpLHQsZSl9KX0pfX0seyIuL3N0eWxlX29uZSI6MTAzNyxkMzoxNTR9XSwxMDM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vaGVscGVycyIpLmNhc3RPcHRpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLm1hcmtlci5saW5lLG89aShhLmNvbG9yLGUucHRzKXx8bi5kZWZhdWx0TGluZSxzPWkoYS53aWR0aCxlLnB0cyl8fDA7dC5zdHlsZSh7InN0cm9rZS13aWR0aCI6c30pLmNhbGwobi5maWxsLGUuY29sb3IpLmNhbGwobi5zdHJva2Usbyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi9oZWxwZXJzIjoxMDMxfV0sMTAzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3g6bi54LHk6bi55LHh5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGluZGljZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seGJvdW5kczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx5Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6bi50ZXh0LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsYXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9LGJsZW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSxzaXplbWluOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxtYXg6MixkZmx0Oi41LGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1heDp7dmFsVHlwZToibnVtYmVyIixtaW46LjEsZGZsdDoyMCxlZGl0VHlwZToiY2FsYyJ9LGJvcmRlcjp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sYXJlYXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0cmFuc2Zvcm1zOnZvaWQgMH19LHsiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sMTAzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1wb2ludGNsb3VkMmQiKSxpPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5maW5kRXh0cmVtZXMsbz10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpO2Z1bmN0aW9uIHModCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9InBvaW50Y2xvdWQiLHRoaXMucGlja1hEYXRhPVtdLHRoaXMucGlja1lEYXRhPVtdLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnRleHRMYWJlbHM9W10sdGhpcy5jb2xvcj0icmdiKDAsIDAsIDApIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy5pZFRvSW5kZXg9bmV3IEludDMyQXJyYXkoMCksdGhpcy5ib3VuZHM9WzAsMCwwLDBdLHRoaXMucG9pbnRjbG91ZE9wdGlvbnM9e3Bvc2l0aW9uczpuZXcgRmxvYXQzMkFycmF5KDApLGlkVG9JbmRleDp0aGlzLmlkVG9JbmRleCxzaXplbWluOi41LHNpemVtYXg6MTIsY29sb3I6WzAsMCwwLDFdLGFyZWFSYXRpbzoxLGJvcmRlckNvbG9yOlswLDAsMCwxXX0sdGhpcy5wb2ludGNsb3VkPW4odC5nbHBsb3QsdGhpcy5wb2ludGNsb3VkT3B0aW9ucyksdGhpcy5wb2ludGNsb3VkLl90cmFjZT10aGlzfXZhciBsPXMucHJvdG90eXBlO2wuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkVG9JbmRleFt0LnBvaW50SWRdO3JldHVybnt0cmFjZTp0aGlzLGRhdGFDb29yZDp0LmRhdGFDb29yZCx0cmFjZUNvb3JkOnRoaXMucGlja1hZRGF0YT9bdGhpcy5waWNrWFlEYXRhWzIqZV0sdGhpcy5waWNrWFlEYXRhWzIqZSsxXV06W3RoaXMucGlja1hEYXRhW2VdLHRoaXMucGlja1lEYXRhW2VdXSx0ZXh0TGFiZWw6QXJyYXkuaXNBcnJheSh0aGlzLnRleHRMYWJlbHMpP3RoaXMudGV4dExhYmVsc1tlXTp0aGlzLnRleHRMYWJlbHMsY29sb3I6dGhpcy5jb2xvcixuYW1lOnRoaXMubmFtZSxwb2ludEluZGV4OmUsaG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0sbC51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5pbmRleD10LmluZGV4LHRoaXMudGV4dExhYmVscz10LnRleHQsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmhvdmVyaW5mbz10LmhvdmVyaW5mbyx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMudXBkYXRlRmFzdCh0KSx0aGlzLmNvbG9yPW8odCx7fSl9LGwudXBkYXRlRmFzdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sbyxzLGwsYz10aGlzLnhEYXRhPXRoaXMucGlja1hEYXRhPXQueCx1PXRoaXMueURhdGE9dGhpcy5waWNrWURhdGE9dC55LGY9dGhpcy5waWNrWFlEYXRhPXQueHksaD10Lnhib3VuZHMmJnQueWJvdW5kcyxwPXQuaW5kaWNlcyxkPXRoaXMuYm91bmRzO2lmKGYpe2lmKG49ZixlPWYubGVuZ3RoPj4+MSxoKWRbMF09dC54Ym91bmRzWzBdLGRbMl09dC54Ym91bmRzWzFdLGRbMV09dC55Ym91bmRzWzBdLGRbM109dC55Ym91bmRzWzFdO2Vsc2UgZm9yKGw9MDtsPGU7bCsrKW89blsyKmxdLHM9blsyKmwrMV0sbzxkWzBdJiYoZFswXT1vKSxvPmRbMl0mJihkWzJdPW8pLHM8ZFsxXSYmKGRbMV09cykscz5kWzNdJiYoZFszXT1zKTtpZihwKXI9cDtlbHNlIGZvcihyPW5ldyBJbnQzMkFycmF5KGUpLGw9MDtsPGU7bCsrKXJbbF09bH1lbHNlIGZvcihlPWMubGVuZ3RoLG49bmV3IEZsb2F0MzJBcnJheSgyKmUpLHI9bmV3IEludDMyQXJyYXkoZSksbD0wO2w8ZTtsKyspbz1jW2xdLHM9dVtsXSxyW2xdPWwsblsyKmxdPW8sblsyKmwrMV09cyxvPGRbMF0mJihkWzBdPW8pLG8+ZFsyXSYmKGRbMl09byksczxkWzFdJiYoZFsxXT1zKSxzPmRbM10mJihkWzNdPXMpO3RoaXMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5pZFRvSW5kZXg9cix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnBvc2l0aW9ucz1uO3ZhciBnPWkodC5tYXJrZXIuY29sb3IpLHY9aSh0Lm1hcmtlci5ib3JkZXIuY29sb3IpLG09dC5vcGFjaXR5KnQubWFya2VyLm9wYWNpdHk7Z1szXSo9bSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmNvbG9yPWc7dmFyIHk9dC5tYXJrZXIuYmxlbmQ7aWYobnVsbD09PXkpe3k9Yy5sZW5ndGg8MTAwfHx1Lmxlbmd0aDwxMDB9dGhpcy5wb2ludGNsb3VkT3B0aW9ucy5ibGVuZD15LHZbM10qPW0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5ib3JkZXJDb2xvcj12O3ZhciB4PXQubWFya2VyLnNpemVtaW4sYj1NYXRoLm1heCh0Lm1hcmtlci5zaXplbWF4LHQubWFya2VyLnNpemVtaW4pO3RoaXMucG9pbnRjbG91ZE9wdGlvbnMuc2l6ZU1pbj14LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuc2l6ZU1heD1iLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYXJlYVJhdGlvPXQubWFya2VyLmJvcmRlci5hcmVhcmF0aW8sdGhpcy5wb2ludGNsb3VkLnVwZGF0ZSh0aGlzLnBvaW50Y2xvdWRPcHRpb25zKTt2YXIgXz10aGlzLnNjZW5lLnhheGlzLHc9dGhpcy5zY2VuZS55YXhpcyxrPWIvMnx8LjU7dC5fZXh0cmVtZXNbXy5faWRdPWEoXyxbZFswXSxkWzJdXSx7cHBhZDprfSksdC5fZXh0cmVtZXNbdy5faWRdPWEodyxbZFsxXSxkWzNdXSx7cHBhZDprfSl9LGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucG9pbnRjbG91ZC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBzKHQsZS51aWQpO3JldHVybiByLnVwZGF0ZShlKSxyfX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjc0NywiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjEwNjEsImdsLXBvaW50Y2xvdWQyZCI6Mjg4fV0sMTA0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoIngiKSxhKCJ5IiksYSgieGJvdW5kcyIpLGEoInlib3VuZHMiKSx0Lnh5JiZ0Lnh5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiYoZS54eT10Lnh5KSx0LmluZGljZXMmJnQuaW5kaWNlcyBpbnN0YW5jZW9mIEludDMyQXJyYXkmJihlLmluZGljZXM9dC5pbmRpY2VzKSxhKCJ0ZXh0IiksYSgibWFya2VyLmNvbG9yIixyKSxhKCJtYXJrZXIub3BhY2l0eSIpLGEoIm1hcmtlci5ibGVuZCIpLGEoIm1hcmtlci5zaXplbWluIiksYSgibWFya2VyLnNpemVtYXgiKSxhKCJtYXJrZXIuYm9yZGVyLmNvbG9yIixyKSxhKCJtYXJrZXIuYm9yZGVyLmFyZWFyYXRpbyIpLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9saWIiOjcwMCwiLi9hdHRyaWJ1dGVzIjoxMDM4fV0sMTA0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4uL3NjYXR0ZXIzZC9jYWxjIiksbi5wbG90PXQoIi4vY29udmVydCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0icG9pbnRjbG91ZCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDJkIiksbi5jYXRlZ29yaWVzPVsiZ2wiLCJnbDJkIiwic2hvd0xlZ2VuZCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9nbDJkIjo3ODcsIi4uL3NjYXR0ZXIzZC9jYWxjIjoxMDc5LCIuL2F0dHJpYnV0ZXMiOjEwMzgsIi4vY29udmVydCI6MTAzOSwiLi9kZWZhdWx0cyI6MTA0MH1dLDEwNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHU9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7KGUuZXhwb3J0cz1oKHtob3ZlcmluZm86Zih7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6W10sYXJyYXlPazohMX0pLGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGRvbWFpbjpzKHtuYW1lOiJzYW5rZXkiLHRyYWNlOiEwfSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoiaCJ9LHZhbHVlZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Ii4zcyJ9LHZhbHVlc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGFycmFuZ2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzbmFwIiwicGVycGVuZGljdWxhciIsImZyZWVmb3JtIiwiZml4ZWQiXSxkZmx0OiJzbmFwIn0sdGV4dGZvbnQ6bih7fSksbm9kZTp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGdyb3Vwczp7dmFsVHlwZToiaW5mb19hcnJheSIsaW1wbGllZEVkaXRzOnt4OltdLHk6W119LGRpbWVuc2lvbnM6MixmcmVlTGVuZ3RoOiEwLGRmbHQ6W10saXRlbXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifX0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0Oi41LGFycmF5T2s6ITB9fSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MCxkZmx0OjIwfSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MSxkZmx0OjIwfSxob3ZlcmluZm86e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm5vbmUiLCJza2lwIl0sZGZsdDoiYWxsIn0saG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOlsidmFsdWUiLCJsYWJlbCJdfSl9LGxpbms6e2xhYmVsOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITB9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGFycmF5T2s6ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxhcnJheU9rOiEwfX0sc291cmNlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSx0YXJnZXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHZhbHVlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxob3ZlcmluZm86e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm5vbmUiLCJza2lwIl0sZGZsdDoiYWxsIn0saG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOlsidmFsdWUiLCJsYWJlbCJdfSksY29sb3JzY2FsZXM6dSgiY29uY2VudHJhdGlvbnNjYWxlcyIse2VkaXRUeXBlOiJjYWxjIixsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyIsZGZsdDoiIn0sY21heDp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDoxfSxjbWluOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixkZmx0OjB9LGNvbG9yc2NhbGU6ZihjKCkuY29sb3JzY2FsZSx7ZGZsdDpbWzAsIndoaXRlIl0sWzEsImJsYWNrIl1dfSl9KX19LCJjYWxjIiwibmVzdGVkIikpLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTc2LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjYwNywiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi8uLi9wbG90cy9kb21haW4iOjc3MywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NzR9XSwxMDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiKTtyLm5hbWU9InNhbmtleSIsci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLCJzYW5rZXkiKVswXTthKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInNhbmtleSIpLGE9ZS5faGFzJiZlLl9oYXMoInNhbmtleSIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5zYW5rZXkiKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyI6NjE3LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3ODQsIi4vcGxvdCI6MTA0OH1dLDEwNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzSW5kZXgsbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKTtmdW5jdGlvbiBjKHQpe3ZhciBlLHI9dC5ub2RlLGE9dC5saW5rLGM9W10sdT1vKGEuY29sb3IpLGY9e30saD17fSxwPWEuY29sb3JzY2FsZXMubGVuZ3RoO2ZvcihlPTA7ZTxwO2UrKyl7dmFyIGQ9YS5jb2xvcnNjYWxlc1tlXSxnPWwuZXh0cmFjdFNjYWxlKGQse2NMZXR0ZXI6ImMifSksdj1sLm1ha2VDb2xvclNjYWxlRnVuYyhnKTtoW2QubGFiZWxdPXZ9dmFyIG09MDtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKWEuc291cmNlW2VdPm0mJihtPWEuc291cmNlW2VdKSxhLnRhcmdldFtlXT5tJiYobT1hLnRhcmdldFtlXSk7dmFyIHkseD1tKzEsYj10Lm5vZGUuZ3JvdXBzLF89e307Zm9yKGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIHc9YltlXTtmb3IoeT0wO3k8dy5sZW5ndGg7eSsrKXt2YXIgaz13W3ldLFQ9eCtlO18uaGFzT3duUHJvcGVydHkoayk/aS53YXJuKCJOb2RlICIraysiIGlzIGFscmVhZHkgcGFydCBvZiBhIGdyb3VwLiIpOl9ba109VH19dmFyIEE9e3NvdXJjZTpbXSx0YXJnZXQ6W119O2ZvcihlPTA7ZTxhLnZhbHVlLmxlbmd0aDtlKyspe3ZhciBNPWEudmFsdWVbZV0sUz1hLnNvdXJjZVtlXSxFPWEudGFyZ2V0W2VdO2lmKE0+MCYmcyhTLHgpJiZzKEUseCkmJighXy5oYXNPd25Qcm9wZXJ0eShTKXx8IV8uaGFzT3duUHJvcGVydHkoRSl8fF9bU10hPT1fW0VdKSl7Xy5oYXNPd25Qcm9wZXJ0eShFKSYmKEU9X1tFXSksXy5oYXNPd25Qcm9wZXJ0eShTKSYmKFM9X1tTXSksRT0rRSxmW1M9K1NdPWZbRV09ITA7dmFyIEM9IiI7YS5sYWJlbCYmYS5sYWJlbFtlXSYmKEM9YS5sYWJlbFtlXSk7dmFyIEw9bnVsbDtDJiZoLmhhc093blByb3BlcnR5KEMpJiYoTD1oW0NdKSxjLnB1c2goe3BvaW50TnVtYmVyOmUsbGFiZWw6Qyxjb2xvcjp1P2EuY29sb3JbZV06YS5jb2xvcixjb25jZW50cmF0aW9uc2NhbGU6TCxzb3VyY2U6Uyx0YXJnZXQ6RSx2YWx1ZTorTX0pLEEuc291cmNlLnB1c2goUyksQS50YXJnZXQucHVzaChFKX19dmFyIHo9eCtiLmxlbmd0aCxPPW8oci5jb2xvciksST1bXTtmb3IoZT0wO2U8ejtlKyspaWYoZltlXSl7dmFyIEQ9ci5sYWJlbFtlXTtJLnB1c2goe2dyb3VwOmU+eC0xLGNoaWxkcmVuTm9kZXM6W10scG9pbnROdW1iZXI6ZSxsYWJlbDpELGNvbG9yOk8/ci5jb2xvcltlXTpyLmNvbG9yfSl9dmFyIFA9ITE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9aS5pbml0MmRBcnJheSh0LDApLG89MDtvPE1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKTtvKyspaWYoaS5pc0luZGV4KGVbb10sdCkmJmkuaXNJbmRleChyW29dLHQpKXtpZihlW29dPT09cltvXSlyZXR1cm4hMDthW2Vbb11dLnB1c2gocltvXSl9cmV0dXJuIG4oYSkuY29tcG9uZW50cy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSl9KHosQS5zb3VyY2UsQS50YXJnZXQpJiYoUD0hMCkse2NpcmN1bGFyOlAsbGlua3M6Yyxub2RlczpJLGdyb3VwczpiLGdyb3VwTG9va3VwOl99fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWMoZSk7cmV0dXJuIGEoe2NpcmN1bGFyOnIuY2lyY3VsYXIsX25vZGVzOnIubm9kZXMsX2xpbmtzOnIubGlua3MsX2dyb3VwczpyLmdyb3VwcyxfZ3JvdXBMb29rdXA6ci5ncm91cExvb2t1cH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjU4OSwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9ndXAiOjY5OCwic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiOjUxNH1dLDEwNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtub2RlVGV4dE9mZnNldEhvcml6b250YWw6NCxub2RlVGV4dE9mZnNldFZlcnRpY2FsOjMsbm9kZVBhZEFjcm9zczoxMCxzYW5rZXlJdGVyYXRpb25zOjUwLGZvcmNlSXRlcmF0aW9uczo1LGZvcmNlVGlja3NQZXJGcmFtZToxMCxkdXJhdGlvbjo1MDAsZWFzZToibGluZWFyIixjbjp7c2Fua2V5OiJzYW5rZXkiLHNhbmtleUxpbmtzOiJzYW5rZXktbGlua3MiLHNhbmtleUxpbms6InNhbmtleS1saW5rIixzYW5rZXlOb2RlU2V0OiJzYW5rZXktbm9kZS1zZXQiLHNhbmtleU5vZGU6InNhbmtleS1ub2RlIixub2RlUmVjdDoibm9kZS1yZWN0Iixub2RlQ2FwdHVyZToibm9kZS1jYXB0dXJlIixub2RlQ2VudGVyZWQ6Im5vZGUtZW50ZXJlZCIsbm9kZUxhYmVsR3VpZGU6Im5vZGUtbGFiZWwtZ3VpZGUiLG5vZGVMYWJlbDoibm9kZS1sYWJlbCIsbm9kZUxhYmVsVGV4dFBhdGg6Im5vZGUtbGFiZWwtdGV4dC1wYXRoIn19fSx7fV0sMTA0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgidGlueWNvbG9yMiIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMsbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybGFiZWxfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSx1PXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpO2Z1bmN0aW9uIGYodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLmxpbmsuY29sb3JzY2FsZXMscixhKX1yKCJsYWJlbCIpLHIoImNtaW4iKSxyKCJjbWF4IikscigiY29sb3JzY2FsZSIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGQ9bi5leHRlbmREZWVwKGguaG92ZXJsYWJlbCx0LmhvdmVybGFiZWwpLGc9dC5ub2RlLHY9Yy5uZXdDb250YWluZXIoZSwibm9kZSIpO2Z1bmN0aW9uIG0odCxlKXtyZXR1cm4gbi5jb2VyY2UoZyx2LGkubm9kZSx0LGUpfW0oImxhYmVsIiksbSgiZ3JvdXBzIiksbSgieCIpLG0oInkiKSxtKCJwYWQiKSxtKCJ0aGlja25lc3MiKSxtKCJsaW5lLmNvbG9yIiksbSgibGluZS53aWR0aCIpLG0oImhvdmVyaW5mbyIsdC5ob3ZlcmluZm8pLGwoZyx2LG0sZCksbSgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB5PWguY29sb3J3YXk7bSgiY29sb3IiLHYubGFiZWwubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuYWRkT3BhY2l0eShmdW5jdGlvbih0KXtyZXR1cm4geVt0JXkubGVuZ3RoXX0oZSksLjgpfSkpO3ZhciB4PXQubGlua3x8e30sYj1jLm5ld0NvbnRhaW5lcihlLCJsaW5rIik7ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZSh4LGIsaS5saW5rLHQsZSl9XygibGFiZWwiKSxfKCJzb3VyY2UiKSxfKCJ0YXJnZXQiKSxfKCJ2YWx1ZSIpLF8oImxpbmUuY29sb3IiKSxfKCJsaW5lLndpZHRoIiksXygiaG92ZXJpbmZvIix0LmhvdmVyaW5mbyksbCh4LGIsXyxkKSxfKCJob3ZlcnRlbXBsYXRlIik7dmFyIHcsaz1vKGgucGFwZXJfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCk8LjMzMz8icmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpIjoicmdiYSgwLCAwLCAwLCAwLjIpIjtfKCJjb2xvciIsbi5yZXBlYXQoayxiLnZhbHVlLmxlbmd0aCkpLHUoeCxiLHtuYW1lOiJjb2xvcnNjYWxlcyIsaGFuZGxlSXRlbURlZmF1bHRzOmZ9KSxzKGUsaCxwKSxwKCJvcmllbnRhdGlvbiIpLHAoInZhbHVlZm9ybWF0IikscCgidmFsdWVzdWZmaXgiKSx2LngubGVuZ3RoJiZ2LnkubGVuZ3RoJiYodz0iZnJlZWZvcm0iKSxwKCJhcnJhbmdlbWVudCIsdyksbi5jb2VyY2VGb250KHAsInRleHRmb250IixuLmV4dGVuZEZsYXQoe30saC5mb250KSksZS5fbGVuZ3RoPW51bGx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2MTQsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MzgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzQ0LCIuLi8uLi9wbG90cy9kb21haW4iOjc3MywiLi9hdHRyaWJ1dGVzIjoxMDQyLHRpbnljb2xvcjI6NTIxfV0sMTA0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNhbmtleSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuL2Jhc2VfcGxvdCIpLG4uY2F0ZWdvcmllcz1bIm5vT3BhY2l0eSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuL2F0dHJpYnV0ZXMiOjEwNDIsIi4vYmFzZV9wbG90IjoxMDQzLCIuL2NhbGMiOjEwNDQsIi4vZGVmYXVsdHMiOjEwNDYsIi4vcGxvdCI6MTA0OH1dLDEwNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4vcmVuZGVyIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4vY29uc3RhbnRzIikuY24sYz1zLl87ZnVuY3Rpb24gdSh0KXtyZXR1cm4iIiE9PXR9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXk9PT1lLnRyYWNlSWR9KX1mdW5jdGlvbiBoKHQsZSl7bi5zZWxlY3QodCkuc2VsZWN0KCJwYXRoIikuc3R5bGUoImZpbGwtb3BhY2l0eSIsZSksbi5zZWxlY3QodCkuc2VsZWN0KCJyZWN0Iikuc3R5bGUoImZpbGwtb3BhY2l0eSIsZSl9ZnVuY3Rpb24gcCh0KXtuLnNlbGVjdCh0KS5zZWxlY3QoInRleHQubmFtZSIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKX1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PXQubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKGUubGluayl8fC0xIT09dC5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YoZS5saW5rKX19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLm5vZGUuc291cmNlTGlua3MuaW5kZXhPZih0LmxpbmspfHwtMSE9PWUubm9kZS50YXJnZXRMaW5rcy5pbmRleE9mKHQubGluayl9fWZ1bmN0aW9uIHYodCxlLHIpe2UmJnImJmYocixlKS5zZWxlY3RBbGwoIi4iK2wuc2Fua2V5TGluaykuZmlsdGVyKGQoZSkpLmNhbGwoeS5iaW5kKDAsZSxyLCExKSl9ZnVuY3Rpb24gbSh0LGUscil7ZSYmciYmZihyLGUpLnNlbGVjdEFsbCgiLiIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZChlKSkuY2FsbCh4LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSxpJiZmKGUsdCkuc2VsZWN0QWxsKCIuIitsLnNhbmtleUxpbmspLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe2lmKCF0LmxpbmsuY29uY2VudHJhdGlvbnNjYWxlKXJldHVybi40fSksciYmZihlLHQpLnNlbGVjdEFsbCgiLiIrbC5zYW5rZXlOb2RlKS5maWx0ZXIoZyh0KSkuY2FsbCh2KX1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxpJiZmKGUsdCkuc2VsZWN0QWxsKCIuIitsLnNhbmtleUxpbmspLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksciYmZihlLHQpLnNlbGVjdEFsbChsLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKG0pfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10LmhvdmVybGFiZWx8fHt9LG49cy5uZXN0ZWRQcm9wZXJ0eShyLGUpLmdldCgpO3JldHVybiFBcnJheS5pc0FycmF5KG4pJiZufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQscz1yLl9wYXBlcixmPXIuX3NpemUsZD1jKHQsInNvdXJjZToiKSsiICIsZz1jKHQsInRhcmdldDoiKSsiICIsXz1jKHQsImNvbmNlbnRyYXRpb246IikrIiAiLHc9Yyh0LCJpbmNvbWluZyBmbG93IGNvdW50OiIpKyIgIixrPWModCwib3V0Z29pbmcgZmxvdyBjb3VudDoiKSsiICI7aSh0LHMsZSx7d2lkdGg6Zi53LGhlaWdodDpmLmgsbWFyZ2luOnt0OmYudCxyOmYucixiOmYuYixsOmYubH19LHtsaW5rRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoeS5iaW5kKDAscixpLCEwKSksInNraXAiIT09ci5saW5rLnRyYWNlLmxpbmsuaG92ZXJpbmZvJiYoci5saW5rLmZ1bGxEYXRhPXIubGluay50cmFjZSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltyLmxpbmtdfSkpKX0sZm9sbG93OmZ1bmN0aW9uKGUsaSl7aWYoITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSl7dmFyIHM9aS5saW5rLnRyYWNlLmxpbms7aWYoIm5vbmUiIT09cy5ob3ZlcmluZm8mJiJza2lwIiE9PXMuaG92ZXJpbmZvKXt2YXIgbCxjLGY9dC5fZnVsbExheW91dC5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGkubGluay5jaXJjdWxhcilsPShpLmxpbmsuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQraS5saW5rLmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCkvMitpLnBhcmVudC50cmFuc2xhdGVYLGM9aS5saW5rLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2kucGFyZW50LnRyYW5zbGF0ZVk7ZWxzZXt2YXIgdj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2w9di5sZWZ0K3Yud2lkdGgvMi1mLmxlZnQsYz12LnRvcCt2LmhlaWdodC8yLWYudG9wfXZhciBtPXt2YWx1ZUxhYmVsOm4uZm9ybWF0KGkudmFsdWVGb3JtYXQpKGkubGluay52YWx1ZSkraS52YWx1ZVN1ZmZpeH07aS5saW5rLmZ1bGxEYXRhPWkubGluay50cmFjZTt2YXIgeT1hLmxvbmVIb3Zlcih7eDpsLHk6YyxuYW1lOm0udmFsdWVMYWJlbCx0ZXh0OltpLmxpbmsubGFiZWx8fCIiLGQraS5saW5rLnNvdXJjZS5sYWJlbCxnK2kubGluay50YXJnZXQubGFiZWwsaS5saW5rLmNvbmNlbnRyYXRpb25zY2FsZT9fK24uZm9ybWF0KCIlMC4yZiIpKGkubGluay5mbG93LmxhYmVsQ29uY2VudHJhdGlvbik6IiJdLmZpbHRlcih1KS5qb2luKCI8YnI+IiksY29sb3I6YihzLCJiZ2NvbG9yIil8fG8uYWRkT3BhY2l0eShpLnRpbnlDb2xvckh1ZSwxKSxib3JkZXJDb2xvcjpiKHMsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpiKHMsImZvbnQuZmFtaWx5IiksZm9udFNpemU6YihzLCJmb250LnNpemUiKSxmb250Q29sb3I6YihzLCJmb250LmNvbG9yIiksaWRlYWxBbGlnbjpuLmV2ZW50Lng8bD8icmlnaHQiOiJsZWZ0Iixob3ZlcnRlbXBsYXRlOnMuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOm0sZXZlbnREYXRhOltpLmxpbmtdfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0fSk7aS5saW5rLmNvbmNlbnRyYXRpb25zY2FsZXx8aCh5LC42NSkscCh5KX19fSx1bmhvdmVyOmZ1bmN0aW9uKGUsaSxvKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh4LmJpbmQoMCxpLG8sITApKSwic2tpcCIhPT1pLmxpbmsudHJhY2UubGluay5ob3ZlcmluZm8mJihpLmxpbmsuZnVsbERhdGE9aS5saW5rLnRyYWNlLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5saW5rXX0pKSxhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIpe3ZhciBpPXIubGluaztpLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W2ldLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fSxub2RlRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwodixyLGkpLCJza2lwIiE9PXIubm9kZS50cmFjZS5ub2RlLmhvdmVyaW5mbyYmKHIubm9kZS5mdWxsRGF0YT1yLm5vZGUudHJhY2UsdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5ub2RlXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBvPWkubm9kZS50cmFjZS5ub2RlO2lmKCJub25lIiE9PW8uaG92ZXJpbmZvJiYic2tpcCIhPT1vLmhvdmVyaW5mbyl7dmFyIHM9bi5zZWxlY3QoZSkuc2VsZWN0KCIuIitsLm5vZGVSZWN0KSxjPXQuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9Zi5sZWZ0LTItYy5sZWZ0LGc9Zi5yaWdodCsyLWMubGVmdCx2PWYudG9wK2YuaGVpZ2h0LzQtYy50b3AsbT17dmFsdWVMYWJlbDpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXh9O2kubm9kZS5mdWxsRGF0YT1pLm5vZGUudHJhY2U7dmFyIHk9YS5sb25lSG92ZXIoe3gwOmQseDE6Zyx5OnYsbmFtZTpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5ub2RlLmxhYmVsLHcraS5ub2RlLnRhcmdldExpbmtzLmxlbmd0aCxrK2kubm9kZS5zb3VyY2VMaW5rcy5sZW5ndGhdLmZpbHRlcih1KS5qb2luKCI8YnI+IiksY29sb3I6YihvLCJiZ2NvbG9yIil8fGkudGlueUNvbG9ySHVlLGJvcmRlckNvbG9yOmIobywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmIobywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpiKG8sImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpiKG8sImZvbnQuY29sb3IiKSxpZGVhbEFsaWduOiJsZWZ0Iixob3ZlcnRlbXBsYXRlOm8uaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOm0sZXZlbnREYXRhOltpLm5vZGVdfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0fSk7aCh5LC44NSkscCh5KX19fSx1bmhvdmVyOmZ1bmN0aW9uKGUsaSxvKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbChtLGksbyksInNraXAiIT09aS5ub2RlLnRyYWNlLm5vZGUuaG92ZXJpbmZvJiYoaS5ub2RlLmZ1bGxEYXRhPWkubm9kZS50cmFjZSx0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W2kubm9kZV19KSksYS5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSxyLGkpe3ZhciBvPXIubm9kZTtvLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W29dLG4uc2VsZWN0KGUpLmNhbGwobSxyLGkpLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYxNiwiLi4vLi4vbGliIjo3MDAsIi4vY29uc3RhbnRzIjoxMDQ1LCIuL3JlbmRlciI6MTA0OSxkMzoxNTR9XSwxMDQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJkMyIpLGE9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCJAcGxvdGx5L2QzLXNhbmtleSIpLGM9dCgiZDMtc2Fua2V5LWNpcmN1bGFyIiksdT10KCJkMy1mb3JjZSIpLGY9dCgiLi4vLi4vbGliIiksaD10KCIuLi8uLi9saWIvZ3VwIikscD1oLmtleUZ1bixkPWgucmVwZWF0LGc9aC51bndyYXAsdj10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlTnVtYmVyLG09dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiB5KCl7dmFyIHQ9LjU7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGUubGluay5jaXJjdWxhcilyZXR1cm4gcj1lLmxpbmssbj1yLndpZHRoLzIsaT1yLmNpcmN1bGFyUGF0aERhdGEsInRvcCI9PT1yLmNpcmN1bGFyTGlua1R5cGU/Ik0gIitpLnRhcmdldFgrIiAiKyhpLnRhcmdldFkrbikrIiBMIitpLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhpLnRhcmdldFkrbikrIkEiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrIiAiKyhpLnJpZ2h0U21hbGxBcmNSYWRpdXMrbikrIiAwIDAgMSAiKyhpLnJpZ2h0RnVsbEV4dGVudC1uKSsiICIrKGkudGFyZ2V0WS1pLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyJMIisoaS5yaWdodEZ1bGxFeHRlbnQtbikrIiAiK2kudmVydGljYWxSaWdodElubmVyRXh0ZW50KyJBIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pKyIgIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pKyIgMCAwIDEgIitpLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKSsiTCIraS5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKSsiQSIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pKyIgIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrIiAwIDAgMSAiKyhpLmxlZnRGdWxsRXh0ZW50K24pKyIgIitpLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyJMIisoaS5sZWZ0RnVsbEV4dGVudCtuKSsiICIrKGkuc291cmNlWS1pLmxlZnRTbWFsbEFyY1JhZGl1cykrIkEiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKSsiICIrKGkubGVmdFNtYWxsQXJjUmFkaXVzK24pKyIgMCAwIDEgIitpLmxlZnRJbm5lckV4dGVudCsiICIrKGkuc291cmNlWStuKSsiTCIraS5zb3VyY2VYKyIgIisoaS5zb3VyY2VZK24pKyJMIitpLnNvdXJjZVgrIiAiKyhpLnNvdXJjZVktbikrIkwiK2kubGVmdElubmVyRXh0ZW50KyIgIisoaS5zb3VyY2VZLW4pKyJBIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrIiAiKyhpLmxlZnRTbWFsbEFyY1JhZGl1cy1uKSsiIDAgMCAwICIrKGkubGVmdEZ1bGxFeHRlbnQtbikrIiAiKyhpLnNvdXJjZVktaS5sZWZ0U21hbGxBcmNSYWRpdXMpKyJMIisoaS5sZWZ0RnVsbEV4dGVudC1uKSsiICIraS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiQSIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pKyIgIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrIiAwIDAgMCAiK2kubGVmdElubmVyRXh0ZW50KyIgIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrIkwiK2kucmlnaHRJbm5lckV4dGVudCsiICIrKGkudmVydGljYWxGdWxsRXh0ZW50K24pKyJBIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pKyIgIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pKyIgMCAwIDAgIisoaS5yaWdodEZ1bGxFeHRlbnQrbikrIiAiK2kudmVydGljYWxSaWdodElubmVyRXh0ZW50KyJMIisoaS5yaWdodEZ1bGxFeHRlbnQrbikrIiAiKyhpLnRhcmdldFktaS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiQSIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKSsiICIrKGkucmlnaHRTbWFsbEFyY1JhZGl1cy1uKSsiIDAgMCAwICIraS5yaWdodElubmVyRXh0ZW50KyIgIisoaS50YXJnZXRZLW4pKyJMIitpLnRhcmdldFgrIiAiKyhpLnRhcmdldFktbikrIloiOiJNICIraS50YXJnZXRYKyIgIisoaS50YXJnZXRZLW4pKyIgTCIraS5yaWdodElubmVyRXh0ZW50KyIgIisoaS50YXJnZXRZLW4pKyJBIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pKyIgIisoaS5yaWdodFNtYWxsQXJjUmFkaXVzK24pKyIgMCAwIDAgIisoaS5yaWdodEZ1bGxFeHRlbnQtbikrIiAiKyhpLnRhcmdldFkraS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiTCIrKGkucmlnaHRGdWxsRXh0ZW50LW4pKyIgIitpLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiQSIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cytuKSsiICIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cytuKSsiIDAgMCAwICIraS5yaWdodElubmVyRXh0ZW50KyIgIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrIkwiK2kubGVmdElubmVyRXh0ZW50KyIgIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrIkEiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKSsiICIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pKyIgMCAwIDAgIisoaS5sZWZ0RnVsbEV4dGVudCtuKSsiICIraS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiTCIrKGkubGVmdEZ1bGxFeHRlbnQrbikrIiAiKyhpLnNvdXJjZVkraS5sZWZ0U21hbGxBcmNSYWRpdXMpKyJBIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrIiAiKyhpLmxlZnRTbWFsbEFyY1JhZGl1cytuKSsiIDAgMCAwICIraS5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhpLnNvdXJjZVktbikrIkwiK2kuc291cmNlWCsiICIrKGkuc291cmNlWS1uKSsiTCIraS5zb3VyY2VYKyIgIisoaS5zb3VyY2VZK24pKyJMIitpLmxlZnRJbm5lckV4dGVudCsiICIrKGkuc291cmNlWStuKSsiQSIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pKyIgIisoaS5sZWZ0U21hbGxBcmNSYWRpdXMtbikrIiAwIDAgMSAiKyhpLmxlZnRGdWxsRXh0ZW50LW4pKyIgIisoaS5zb3VyY2VZK2kubGVmdFNtYWxsQXJjUmFkaXVzKSsiTCIrKGkubGVmdEZ1bGxFeHRlbnQtbikrIiAiK2kudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkEiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cy1uKSsiICIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pKyIgMCAwIDEgIitpLmxlZnRJbm5lckV4dGVudCsiICIrKGkudmVydGljYWxGdWxsRXh0ZW50LW4pKyJMIitpLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKSsiQSIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKSsiICIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKSsiIDAgMCAxICIrKGkucmlnaHRGdWxsRXh0ZW50K24pKyIgIitpLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiTCIrKGkucmlnaHRGdWxsRXh0ZW50K24pKyIgIisoaS50YXJnZXRZK2kucmlnaHRTbWFsbEFyY1JhZGl1cykrIkEiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrIiAiKyhpLnJpZ2h0U21hbGxBcmNSYWRpdXMtbikrIiAwIDAgMSAiK2kucmlnaHRJbm5lckV4dGVudCsiICIrKGkudGFyZ2V0WStuKSsiTCIraS50YXJnZXRYKyIgIisoaS50YXJnZXRZK24pKyJaIjt2YXIgcixuLGksYT1lLmxpbmsuc291cmNlLngxLG89ZS5saW5rLnRhcmdldC54MCxzPXYoYSxvKSxsPXModCksYz1zKDEtdCksdT1lLmxpbmsueTAtZS5saW5rLndpZHRoLzIsZj1lLmxpbmsueTArZS5saW5rLndpZHRoLzIsaD1lLmxpbmsueTEtZS5saW5rLndpZHRoLzIscD1lLmxpbmsueTErZS5saW5rLndpZHRoLzI7cmV0dXJuIk0iK2ErIiwiK3UrIkMiK2wrIiwiK3UrIiAiK2MrIiwiK2grIiAiK28rIiwiK2grIkwiK28rIiwiK3ArIkMiK2MrIiwiK3ArIiAiK2wrIiwiK2YrIiAiK2ErIiwiK2YrIloifX1mdW5jdGlvbiB4KHQpe3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5ub2RlLngwLnRvRml4ZWQoMykrIiwgIit0Lm5vZGUueTAudG9GaXhlZCgzKSsiKSJ9KX1mdW5jdGlvbiBiKHQpe3QuY2FsbCh4KX1mdW5jdGlvbiBfKHQsZSl7dC5jYWxsKGIpLGUuYXR0cigiZCIseSgpKX1mdW5jdGlvbiB3KHQpe3QuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGUueDEtdC5ub2RlLngwfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlSGVpZ2h0fSl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdC5saW5rLndpZHRoPjF8fHQubGlua0xpbmVXaWR0aD4wfWZ1bmN0aW9uIFQodCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QudHJhbnNsYXRlWCsiLCIrdC50cmFuc2xhdGVZKyIpIisodC5ob3Jpem9udGFsPyJtYXRyaXgoMSAwIDAgMSAwIDApIjoibWF0cml4KDAgMSAxIDAgMCAwKSIpfWZ1bmN0aW9uIEEodCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Lmhvcml6b250YWw/MDp0LmxhYmVsWSkrIiAiKyh0Lmhvcml6b250YWw/dC5sYWJlbFk6MCkrIikifWZ1bmN0aW9uIE0odCl7cmV0dXJuIGkuc3ZnLmxpbmUoKShbW3QuaG9yaXpvbnRhbD90LmxlZnQ/LXQuc2l6ZUFjcm9zczp0LnZpc2libGVXaWR0aCtuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDpuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXSxbdC5ob3Jpem9udGFsP3QubGVmdD8tbi5ub2RlVGV4dE9mZnNldEhvcml6b250YWw6dC5zaXplQWNyb3NzOnQudmlzaWJsZUhlaWdodC1uLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXV0pfWZ1bmN0aW9uIFModCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8ibWF0cml4KDEgMCAwIDEgMCAwKSI6Im1hdHJpeCgwIDEgMSAwIDAgMCkifWZ1bmN0aW9uIEUodCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8ic2NhbGUoMSAxKSI6InNjYWxlKC0xIDEpIn1mdW5jdGlvbiBDKHQpe3JldHVybiB0LmRhcmtCYWNrZ3JvdW5kJiYhdC5ob3Jpem9udGFsPyJyZ2IoMjU1LDI1NSwyNTUpIjoicmdiKDAsMCwwKSJ9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/IjEwMCUiOiIwJSJ9ZnVuY3Rpb24geih0LGUscil7dC5vbigiLmJhc2ljIixudWxsKS5vbigibW91c2VvdmVyLmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KS5vbigibW91c2Vtb3ZlLmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmZvbGxvdyh0aGlzLHQpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pLm9uKCJtb3VzZW91dC5iYXNpYyIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSl9KS5vbigiY2xpY2suYmFzaWMiLGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksdC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHxyLnNlbGVjdCh0aGlzLHQsZSl9KX1mdW5jdGlvbiBPKHQsZSxyLGEpe3ZhciBvPWkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm57eDp0Lm5vZGUueDArdC52aXNpYmxlV2lkdGgvMix5OnQubm9kZS55MCt0LnZpc2libGVIZWlnaHQvMn19KS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbihpKXtpZigiZml4ZWQiIT09aS5hcnJhbmdlbWVudCYmKGYuZW5zdXJlU2luZ2xlKGEuX2Z1bGxMYXlvdXQuX2luZm9sYXllciwiZyIsImRyYWdjb3ZlciIsZnVuY3Rpb24odCl7YS5fZnVsbExheW91dC5fZHJhZ0NvdmVyPXR9KSxmLnJhaXNlVG9Ub3AodGhpcyksaS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPWkubm9kZSxEKGkubm9kZSksaS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLm5vZGVFdmVudHMudW5ob3Zlci5hcHBseSgwLGkuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkKSxpLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksInNuYXAiPT09aS5hcnJhbmdlbWVudCkpe3ZhciBvPWkudHJhY2VJZCsifCIraS5rZXk7aS5mb3JjZUxheW91dHNbb10/aS5mb3JjZUxheW91dHNbb10uYWxwaGEoMSk6ZnVuY3Rpb24odCxlLHIsaSl7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueT0odFtlXS55MCt0W2VdLnkxKS8yLHRbZV0ueD0odFtlXS54MCt0W2VdLngxKS8yfShyLmdyYXBoLm5vZGVzKTt2YXIgYT1yLmdyYXBoLm5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5vcmlnaW5hbFg9PT1yLm5vZGUub3JpZ2luYWxYfSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LnBhcnRPZkdyb3VwfSk7ci5mb3JjZUxheW91dHNbZV09dS5mb3JjZVNpbXVsYXRpb24oYSkuYWxwaGFEZWNheSgwKS5mb3JjZSgiY29sbGlkZSIsdS5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkvMityLm5vZGVQYWQvMn0pLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMobi5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZSgiY29uc3RyYWluIixmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV07bz09PWkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz8oby54PW8ubGFzdERyYWdnZWRYLG8ueT1vLmxhc3REcmFnZ2VkWSk6KG8udng9KG8ub3JpZ2luYWxYLW8ueCkvbi5mb3JjZVRpY2tzUGVyRnJhbWUsby55PU1hdGgubWluKGkuc2l6ZS1vLmR5LzIsTWF0aC5tYXgoby5keS8yLG8ueSkpKSx0PU1hdGgubWF4KHQsTWF0aC5hYnMoby52eCksTWF0aC5hYnMoby52eSkpfSFpLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3MmJnQ8LjEmJmkuZm9yY2VMYXlvdXRzW2VdLmFscGhhKCk+MCYmaS5mb3JjZUxheW91dHNbZV0uYWxwaGEoMCl9fSgwLGUsYSxyKSkuc3RvcCgpfSgwLG8saSksZnVuY3Rpb24odCxlLHIsaSxhKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIG8oKXt2YXIgcztmb3Iocz0wO3M8bi5mb3JjZVRpY2tzUGVyRnJhbWU7cysrKXIuZm9yY2VMYXlvdXRzW2ldLnRpY2soKTt2YXIgbD1yLmdyYXBoLm5vZGVzO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueTA9dFtlXS55LXRbZV0uZHkvMix0W2VdLnkxPXRbZV0ueTArdFtlXS5keSx0W2VdLngwPXRbZV0ueC10W2VdLmR4LzIsdFtlXS54MT10W2VdLngwK3RbZV0uZHh9KGwpLHIuc2Fua2V5LnVwZGF0ZShyLmdyYXBoKSxfKHQuZmlsdGVyKFAocikpLGUpLHIuZm9yY2VMYXlvdXRzW2ldLmFscGhhKCk+MCl3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG8pO2Vsc2V7dmFyIGM9ci5ub2RlLm9yaWdpbmFsWDtyLm5vZGUueDA9Yy1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1jK3IudmlzaWJsZVdpZHRoLzIsSShyLGEpfX0pfSh0LGUsaSxvLGEpfX0pLm9uKCJkcmFnIixmdW5jdGlvbihyKXtpZigiZml4ZWQiIT09ci5hcnJhbmdlbWVudCl7dmFyIG49aS5ldmVudC54LGE9aS5ldmVudC55OyJzbmFwIj09PXIuYXJyYW5nZW1lbnQ/KHIubm9kZS54MD1uLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPW4rci52aXNpYmxlV2lkdGgvMixyLm5vZGUueTA9YS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9YStyLnZpc2libGVIZWlnaHQvMik6KCJmcmVlZm9ybSI9PT1yLmFycmFuZ2VtZW50JiYoci5ub2RlLngwPW4tci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bityLnZpc2libGVXaWR0aC8yKSxhPU1hdGgubWF4KDAsTWF0aC5taW4oci5zaXplLXIudmlzaWJsZUhlaWdodC8yLGEpKSxyLm5vZGUueTA9YS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9YStyLnZpc2libGVIZWlnaHQvMiksRChyLm5vZGUpLCJzbmFwIiE9PXIuYXJyYW5nZW1lbnQmJihyLnNhbmtleS51cGRhdGUoci5ncmFwaCksXyh0LmZpbHRlcihQKHIpKSxlKSl9fSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKHQpe2lmKCJmaXhlZCIhPT10LmFycmFuZ2VtZW50KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M9ITE7Zm9yKHZhciBlPTA7ZTx0Lm5vZGUuY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7ZSsrKXQubm9kZS5jaGlsZHJlbk5vZGVzW2VdLng9dC5ub2RlLngsdC5ub2RlLmNoaWxkcmVuTm9kZXNbZV0ueT10Lm5vZGUueTsic25hcCIhPT10LmFycmFuZ2VtZW50JiZJKHQsYSl9fSk7dC5vbigiLmRyYWciLG51bGwpLmNhbGwobyl9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGk9MDtpPHQuZ3JhcGgubm9kZXMubGVuZ3RoO2krKyl7dmFyIGE9KHQuZ3JhcGgubm9kZXNbaV0ueDArdC5ncmFwaC5ub2Rlc1tpXS54MSkvMixvPSh0LmdyYXBoLm5vZGVzW2ldLnkwK3QuZ3JhcGgubm9kZXNbaV0ueTEpLzI7ci5wdXNoKGEvdC5maWd1cmUud2lkdGgpLG4ucHVzaChvL3QuZmlndXJlLmhlaWdodCl9bS5jYWxsKCJfZ3VpUmVzdHlsZSIsZSx7Im5vZGUueCI6W3JdLCJub2RlLnkiOltuXX0sdC50cmFjZS5pbmRleCkudGhlbihmdW5jdGlvbigpe2UuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlciYmZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyLnJlbW92ZSgpfSl9ZnVuY3Rpb24gRCh0KXt0Lmxhc3REcmFnZ2VkWD10LngwK3QuZHgvMix0Lmxhc3REcmFnZ2VkWT10LnkwK3QuZHkvMn1mdW5jdGlvbiBQKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlLm9yaWdpbmFsWD09PXQubm9kZS5vcmlnaW5hbFh9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLHUpe3ZhciBoPSExO2YuZW5zdXJlU2luZ2xlKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllciwiZyIsImZpcnN0LXJlbmRlciIsZnVuY3Rpb24oKXtoPSEwfSk7dmFyIHY9dC5fZnVsbExheW91dC5fZHJhZ0NvdmVyLG09ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGcodCkudHJhY2UudmlzaWJsZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIGksYT1nKGUpLG89YS50cmFjZSxzPW8uZG9tYWluLHU9ImgiPT09by5vcmllbnRhdGlvbixoPW8ubm9kZS5wYWQscD1vLm5vZGUudGhpY2tuZXNzLGQ9dC53aWR0aCoocy54WzFdLXMueFswXSksdj10LmhlaWdodCoocy55WzFdLXMueVswXSksbT1hLl9ub2Rlcyx5PWEuX2xpbmtzLHg9YS5jaXJjdWxhcjsoaT14P2Muc2Fua2V5Q2lyY3VsYXIoKS5jaXJjdWxhckxpbmtHYXAoMCk6bC5zYW5rZXkoKSkuaXRlcmF0aW9ucyhuLnNhbmtleUl0ZXJhdGlvbnMpLnNpemUodT9bZCx2XTpbdixkXSkubm9kZVdpZHRoKHApLm5vZGVQYWRkaW5nKGgpLm5vZGVJZChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb2ludE51bWJlcn0pLm5vZGVzKG0pLmxpbmtzKHkpO3ZhciBiLF8sdyxrPWkoKTtmb3IodmFyIFQgaW4gaS5ub2RlUGFkZGluZygpPGgmJmYud2Fybigibm9kZS5wYWQgd2FzIHJlZHVjZWQgdG8gIixpLm5vZGVQYWRkaW5nKCksIiB0byBmaXQgd2l0aGluIHRoZSBmaWd1cmUuIiksYS5fZ3JvdXBMb29rdXApe3ZhciBBLE09cGFyc2VJbnQoYS5fZ3JvdXBMb29rdXBbVF0pO2ZvcihiPTA7YjxrLm5vZGVzLmxlbmd0aDtiKyspaWYoay5ub2Rlc1tiXS5wb2ludE51bWJlcj09PU0pe0E9ay5ub2Rlc1tiXTticmVha31pZihBKXt2YXIgUz17cG9pbnROdW1iZXI6cGFyc2VJbnQoVCkseDA6QS54MCx4MTpBLngxLHkwOkEueTAseTE6QS55MSxwYXJ0T2ZHcm91cDohMCxzb3VyY2VMaW5rczpbXSx0YXJnZXRMaW5rczpbXX07ay5ub2Rlcy51bnNoaWZ0KFMpLEEuY2hpbGRyZW5Ob2Rlcy51bnNoaWZ0KFMpfX1pZihmdW5jdGlvbigpe2ZvcihiPTA7YjxrLm5vZGVzLmxlbmd0aDtiKyspe3ZhciB0LGUscj1rLm5vZGVzW2JdLG49e307Zm9yKF89MDtfPHIudGFyZ2V0TGlua3MubGVuZ3RoO18rKyl0PShlPXIudGFyZ2V0TGlua3NbX10pLnNvdXJjZS5wb2ludE51bWJlcisiOiIrZS50YXJnZXQucG9pbnROdW1iZXIsbi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG5bdF09W10pLG5bdF0ucHVzaChlKTt2YXIgaT1PYmplY3Qua2V5cyhuKTtmb3IoXz0wO188aS5sZW5ndGg7XysrKXt2YXIgYT1uW3Q9aVtfXV0sbz0wLHM9e307Zm9yKHc9MDt3PGEubGVuZ3RoO3crKylzWyhlPWFbd10pLmxhYmVsXXx8KHNbZS5sYWJlbF09MCksc1tlLmxhYmVsXSs9ZS52YWx1ZSxvKz1lLnZhbHVlO2Zvcih3PTA7dzxhLmxlbmd0aDt3KyspKGU9YVt3XSkuZmxvdz17dmFsdWU6byxsYWJlbENvbmNlbnRyYXRpb246c1tlLmxhYmVsXS9vLGNvbmNlbnRyYXRpb246ZS52YWx1ZS9vLGxpbmtzOmF9fXZhciBsPTA7Zm9yKF89MDtfPHIuc291cmNlTGlua3MubGVuZ3RoO18rKylsKz1yLnNvdXJjZUxpbmtzW19dLnZhbHVlO2ZvcihfPTA7XzxyLnNvdXJjZUxpbmtzLmxlbmd0aDtfKyspKGU9ci5zb3VyY2VMaW5rc1tfXSkuY29uY2VudHJhdGlvbk91dD1lLnZhbHVlL2w7dmFyIGM9MDtmb3IoXz0wO188ci50YXJnZXRMaW5rcy5sZW5ndGg7XysrKWMrPXIudGFyZ2V0TGlua3NbX10udmFsdWU7Zm9yKF89MDtfPHIudGFyZ2V0TGlua3MubGVuZ3RoO18rKykoZT1yLnRhcmdldExpbmtzW19dKS5jb25jZW5yYXRpb25Jbj1lLnZhbHVlL2N9fSgpLG8ubm9kZS54Lmxlbmd0aCYmby5ub2RlLnkubGVuZ3RoKXtmb3IoYj0wO2I8TWF0aC5taW4oby5ub2RlLngubGVuZ3RoLG8ubm9kZS55Lmxlbmd0aCxrLm5vZGVzLmxlbmd0aCk7YisrKWlmKG8ubm9kZS54W2JdJiZvLm5vZGUueVtiXSl7dmFyIEU9W28ubm9kZS54W2JdKmQsby5ub2RlLnlbYl0qdl07ay5ub2Rlc1tiXS54MD1FWzBdLXAvMixrLm5vZGVzW2JdLngxPUVbMF0rcC8yO3ZhciBDPWsubm9kZXNbYl0ueTEtay5ub2Rlc1tiXS55MDtrLm5vZGVzW2JdLnkwPUVbMV0tQy8yLGsubm9kZXNbYl0ueTE9RVsxXStDLzJ9InNuYXAiPT09by5hcnJhbmdlbWVudCYmZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTAsYT10Lmxlbmd0aDtmb3IodC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueTAtZS55MH0pLG49MDtuPGE7KytuKShlPXRbbl0pLnkwPj1pfHwocj1pLWUueTApPjFlLTYmJihlLnkwKz1yLGUueTErPXIpLGk9ZS55MStofSl9KGZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybnt4MDp0LngwLGluZGV4OmV9fSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngwLWUueDB9KSxpPVtdLGE9LTEsbz0tMS8wO2ZvcihiPTA7YjxuLmxlbmd0aDtiKyspe3ZhciBzPXRbbltiXS5pbmRleF07cy54MD5vK3AmJihhKz0xLGU9cy54MCksbz1zLngwLGlbYV18fChpW2FdPVtdKSxpW2FdLnB1c2gocykscj1lLXMueDAscy54MCs9cixzLngxKz1yfXJldHVybiBpfShtPWsubm9kZXMpKSxpLnVwZGF0ZShrKX1yZXR1cm57Y2lyY3VsYXI6eCxrZXk6cix0cmFjZTpvLGd1aWQ6Zi5yYW5kc3RyKCksaG9yaXpvbnRhbDp1LHdpZHRoOmQsaGVpZ2h0OnYsbm9kZVBhZDpvLm5vZGUucGFkLG5vZGVMaW5lQ29sb3I6by5ub2RlLmxpbmUuY29sb3Isbm9kZUxpbmVXaWR0aDpvLm5vZGUubGluZS53aWR0aCxsaW5rTGluZUNvbG9yOm8ubGluay5saW5lLmNvbG9yLGxpbmtMaW5lV2lkdGg6by5saW5rLmxpbmUud2lkdGgsdmFsdWVGb3JtYXQ6by52YWx1ZWZvcm1hdCx2YWx1ZVN1ZmZpeDpvLnZhbHVlc3VmZml4LHRleHRGb250Om8udGV4dGZvbnQsdHJhbnNsYXRlWDpzLnhbMF0qdC53aWR0aCt0Lm1hcmdpbi5sLHRyYW5zbGF0ZVk6dC5oZWlnaHQtcy55WzFdKnQuaGVpZ2h0K3QubWFyZ2luLnQsZHJhZ1BhcmFsbGVsOnU/djpkLGRyYWdQZXJwZW5kaWN1bGFyOnU/ZDp2LGFycmFuZ2VtZW50Om8uYXJyYW5nZW1lbnQsc2Fua2V5OmksZ3JhcGg6ayxmb3JjZUxheW91dHM6e30saW50ZXJhY3Rpb25TdGF0ZTp7ZHJhZ0luUHJvZ3Jlc3M6ITEsaG92ZXJlZDohMX19fS5iaW5kKG51bGwsaSkpLGI9ZS5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5KS5kYXRhKG0scCk7Yi5leGl0KCkucmVtb3ZlKCksYi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zYW5rZXksITApLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLmF0dHIoInRyYW5zZm9ybSIsVCksYi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsVCk7dmFyIF89Yi5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5TGlua3MpLmRhdGEoZCxwKTtfLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmtzLCEwKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgST1fLnNlbGVjdEFsbCgiLiIrbi5jbi5zYW5rZXlMaW5rKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdyYXBoLmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIG49YShlLmNvbG9yKTtlLmNvbmNlbnRyYXRpb25zY2FsZSYmKG49YShlLmNvbmNlbnRyYXRpb25zY2FsZShlLmZsb3cubGFiZWxDb25jZW50cmF0aW9uKSkpO3ZhciBpPWUuc291cmNlLmxhYmVsKyJ8IitlLnRhcmdldC5sYWJlbCsiX18iK3I7cmV0dXJuIGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2NpcmN1bGFyOnQuY2lyY3VsYXIsa2V5OmksdHJhY2VJZDp0LmtleSxwb2ludE51bWJlcjplLnBvaW50TnVtYmVyLGxpbms6ZSx0aW55Q29sb3JIdWU6by50aW55UkdCKG4pLHRpbnlDb2xvckFscGhhOm4uZ2V0QWxwaGEoKSxsaW5rUGF0aDp5LGxpbmtMaW5lQ29sb3I6dC5saW5rTGluZUNvbG9yLGxpbmtMaW5lV2lkdGg6dC5saW5rTGluZVdpZHRoLHZhbHVlRm9ybWF0OnQudmFsdWVGb3JtYXQsdmFsdWVTdWZmaXg6dC52YWx1ZVN1ZmZpeCxzYW5rZXk6dC5zYW5rZXkscGFyZW50OnQsaW50ZXJhY3Rpb25TdGF0ZTp0LmludGVyYWN0aW9uU3RhdGUsZmxvdzplLmZsb3d9fS5iaW5kKG51bGwsdCkpfSxwKTtJLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmssITApLmNhbGwoeixiLHUubGlua0V2ZW50cyksSS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbih0KXtyZXR1cm4gayh0KT9vLnRpbnlSR0IoYSh0LmxpbmtMaW5lQ29sb3IpKTp0LnRpbnlDb2xvckh1ZX0pLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIGsodCk/by5vcGFjaXR5KHQubGlua0xpbmVDb2xvcik6dC50aW55Q29sb3JBbHBoYX0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiBrKHQpP3QubGlua0xpbmVXaWR0aDoxfSkuYXR0cigiZCIseSgpKSxJLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fGh8fHY/MTowfSkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSksSS5leGl0KCkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIEQ9Yi5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5Tm9kZVNldCkuZGF0YShkLHApO0QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Fua2V5Tm9kZVNldCwhMCksRC5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbih0KXtzd2l0Y2godC5hcnJhbmdlbWVudCl7Y2FzZSJmaXhlZCI6cmV0dXJuImRlZmF1bHQiO2Nhc2UicGVycGVuZGljdWxhciI6cmV0dXJuIm5zLXJlc2l6ZSI7ZGVmYXVsdDpyZXR1cm4ibW92ZSJ9fSk7dmFyIFA9RC5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5Tm9kZSkuZGF0YShmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoLm5vZGVzO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbFg9KHRbZV0ueDArdFtlXS54MSkvMix0W2VdLm9yaWdpbmFsWT0odFtlXS55MCt0W2VdLnkxKS8yLC0xPT09ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSYmci5wdXNoKHRbZV0ub3JpZ2luYWxYKTtmb3Ioci5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsTGF5ZXJJbmRleD1yLmluZGV4T2YodFtlXS5vcmlnaW5hbFgpLHRbZV0ub3JpZ2luYWxMYXllcj10W2VdLm9yaWdpbmFsTGF5ZXJJbmRleC8oci5sZW5ndGgtMSl9KGUpLGUubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9YShlLmNvbG9yKSxpPW4ubm9kZVBhZEFjcm9zcyxzPXQubm9kZVBhZC8yO2UuZHg9ZS54MS1lLngwLGUuZHk9ZS55MS1lLnkwO3ZhciBsPWUuZHgsYz1NYXRoLm1heCguNSxlLmR5KSx1PSJub2RlXyIrZS5wb2ludE51bWJlcjtyZXR1cm4gZS5ncm91cCYmKHU9Zi5yYW5kc3RyKCkpLGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2luZGV4OmUucG9pbnROdW1iZXIsa2V5OnUscGFydE9mR3JvdXA6ZS5wYXJ0T2ZHcm91cHx8ITEsZ3JvdXA6ZS5ncm91cCx0cmFjZUlkOnQua2V5LHRyYWNlOnQudHJhY2Usbm9kZTplLG5vZGVQYWQ6dC5ub2RlUGFkLG5vZGVMaW5lQ29sb3I6dC5ub2RlTGluZUNvbG9yLG5vZGVMaW5lV2lkdGg6dC5ub2RlTGluZVdpZHRoLHRleHRGb250OnQudGV4dEZvbnQsc2l6ZTp0Lmhvcml6b250YWw/dC5oZWlnaHQ6dC53aWR0aCx2aXNpYmxlV2lkdGg6TWF0aC5jZWlsKGwpLHZpc2libGVIZWlnaHQ6Yyx6b25lWDotaSx6b25lWTotcyx6b25lV2lkdGg6bCsyKmksem9uZUhlaWdodDpjKzIqcyxsYWJlbFk6dC5ob3Jpem9udGFsP2UuZHkvMisxOmUuZHgvMisxLGxlZnQ6MT09PWUub3JpZ2luYWxMYXllcixzaXplQWNyb3NzOnQud2lkdGgsZm9yY2VMYXlvdXRzOnQuZm9yY2VMYXlvdXRzLGhvcml6b250YWw6dC5ob3Jpem9udGFsLGRhcmtCYWNrZ3JvdW5kOnIuZ2V0QnJpZ2h0bmVzcygpPD0xMjgsdGlueUNvbG9ySHVlOm8udGlueVJHQihyKSx0aW55Q29sb3JBbHBoYTpyLmdldEFscGhhKCksdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxncmFwaDp0LmdyYXBoLGFycmFuZ2VtZW50OnQuYXJyYW5nZW1lbnQsdW5pcXVlTm9kZUxhYmVsUGF0aElkOlt0Lmd1aWQsdC5rZXksdV0uam9pbigiXyIpLGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZpZ3VyZTp0fX0uYmluZChudWxsLHQpKX0scCk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zYW5rZXlOb2RlLCEwKS5jYWxsKHgpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbihlKXtyZXR1cm4hdC5fY29udGV4dC5zdGF0aWNQbG90JiYhaHx8ZS5wYXJ0T2ZHcm91cD8wOjF9KSxQLmNhbGwoeixiLHUubm9kZUV2ZW50cykuY2FsbChPLEksdSx0KSxQLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuY2FsbCh4KS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucGFydE9mR3JvdXA/MDoxfSksUC5leGl0KCkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIFI9UC5zZWxlY3RBbGwoIi4iK24uY24ubm9kZVJlY3QpLmRhdGEoZCk7Ui5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5ub2RlUmVjdCwhMCkuY2FsbCh3KSxSLnN0eWxlKCJzdHJva2Utd2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVMaW5lV2lkdGh9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbih0KXtyZXR1cm4gby50aW55UkdCKGEodC5ub2RlTGluZUNvbG9yKSl9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiBvLm9wYWNpdHkodC5ub2RlTGluZUNvbG9yKX0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLFIudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5jYWxsKHcpO3ZhciBGPVAuc2VsZWN0QWxsKCIuIituLmNuLm5vZGVDYXB0dXJlKS5kYXRhKGQpO0YuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24ubm9kZUNhcHR1cmUsITApLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLEYuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVh9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lWX0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lV2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVIZWlnaHR9KTt2YXIgQj1QLnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlQ2VudGVyZWQpLmRhdGEoZCk7Qi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5ub2RlQ2VudGVyZWQsITApLmF0dHIoInRyYW5zZm9ybSIsQSksQi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsQSk7dmFyIE49Qi5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUxhYmVsR3VpZGUpLmRhdGEoZCk7Ti5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxHdWlkZSwhMCkuYXR0cigiaWQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pLmF0dHIoImQiLE0pLmF0dHIoInRyYW5zZm9ybSIsUyksTi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoImQiLE0pLmF0dHIoInRyYW5zZm9ybSIsUyk7dmFyIGo9Qi5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUxhYmVsKS5kYXRhKGQpO2ouZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLEUpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKSxqLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8iLTFweCAxcHggMXB4ICNmZmYsIDFweCAxcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYiOiJub25lIn0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KGosdC50ZXh0Rm9udCl9KSxqLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIixFKTt2YXIgVj1qLnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlTGFiZWxUZXh0UGF0aCkuZGF0YShkKTtWLmVudGVyKCkuYXBwZW5kKCJ0ZXh0UGF0aCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxUZXh0UGF0aCwhMCkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigieGxpbms6aHJlZiIsZnVuY3Rpb24odCl7cmV0dXJuIiMiK3QudW5pcXVlTm9kZUxhYmVsUGF0aElkfSkuYXR0cigic3RhcnRPZmZzZXQiLEwpLnN0eWxlKCJmaWxsIixDKSxWLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbHx8dC5ub2RlLmR5PjU/dC5ub2RlLmxhYmVsOiIifSkuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD8iZW5kIjoic3RhcnQifSksVi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInN0YXJ0T2Zmc2V0IixMKS5zdHlsZSgiZmlsbCIsQyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9saWIvZ3VwIjo2OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vY29uc3RhbnRzIjoxMDQ1LCJAcGxvdGx5L2QzLXNhbmtleSI6NDgsZDM6MTU0LCJkMy1mb3JjZSI6MTQ2LCJkMy1pbnRlcnBvbGF0ZSI6MTQ4LCJkMy1zYW5rZXktY2lyY3VsYXIiOjE1MSx0aW55Y29sb3IyOjUyMX1dLDEwNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LCJ0eCIpLG4ubWVyZ2VBcnJheShlLmhvdmVydGV4dCx0LCJodHgiKSxuLm1lcmdlQXJyYXkoZS5jdXN0b21kYXRhLHQsImRhdGEiKSxuLm1lcmdlQXJyYXkoZS50ZXh0cG9zaXRpb24sdCwidHAiKSxlLnRleHRmb250JiYobi5tZXJnZUFycmF5KGUudGV4dGZvbnQuc2l6ZSx0LCJ0cyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmNvbG9yLHQsInRjIiksbi5tZXJnZUFycmF5KGUudGV4dGZvbnQuZmFtaWx5LHQsInRmIikpO3ZhciBpPWUubWFya2VyO2lmKGkpe24ubWVyZ2VBcnJheShpLnNpemUsdCwibXMiKSxuLm1lcmdlQXJyYXkoaS5vcGFjaXR5LHQsIm1vIiksbi5tZXJnZUFycmF5KGkuc3ltYm9sLHQsIm14Iiksbi5tZXJnZUFycmF5KGkuY29sb3IsdCwibWMiKTt2YXIgYT1pLmxpbmU7aS5saW5lJiYobi5tZXJnZUFycmF5KGEuY29sb3IsdCwibWxjIiksbi5tZXJnZUFycmF5KGEud2lkdGgsdCwibWx3IikpO3ZhciBvPWkuZ3JhZGllbnQ7byYmIm5vbmUiIT09by50eXBlJiYobi5tZXJnZUFycmF5KG8udHlwZSx0LCJtZ3QiKSxuLm1lcmdlQXJyYXkoby5jb2xvcix0LCJtZ2MiKSl9fX0seyIuLi8uLi9saWIiOjcwMH1dLDEwNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0seDA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSxkeDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSx5MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sc3RhY2tncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMifSxncm91cG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzdGFja2dhcHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZmVyIHplcm8iLCJpbnRlcnBvbGF0ZSJdLGRmbHQ6ImluZmVyIHplcm8iLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyIsInRleHQiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6ImNhbGMifSxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJwb2ludHMiLCJmaWxscyJdLGVkaXRUeXBlOiJzdHlsZSJ9LGhvdmVydGVtcGxhdGU6bih7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsInNwbGluZSIsImh2IiwidmgiLCJodmgiLCJ2aHYiXSxkZmx0OiJsaW5lYXIiLGVkaXRUeXBlOiJwbG90In0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLjMsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sZGFzaDp1KHt9LHMse2VkaXRUeXBlOiJzdHlsZSJ9KSxzaW1wbGlmeTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sY29ubmVjdGdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjbGlwb25heGlzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvemVyb3kiLCJ0b3plcm94IiwidG9uZXh0eSIsInRvbmV4dHgiLCJ0b3NlbGYiLCJ0b25leHQiXSxlZGl0VHlwZToiY2FsYyJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sbWFya2VyOnUoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmwuc3ltYm9sTGlzdCxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjYsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1pbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGlhbWV0ZXIiLCJhcmVhIl0sZGZsdDoiZGlhbWV0ZXIiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3JiYXI6YSxsaW5lOnUoe3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIixhbmltOiEwfSxlZGl0VHlwZToiY2FsYyJ9LGkoIm1hcmtlci5saW5lIix7YW5pbTohMH0pKSxncmFkaWVudDp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFkaWFsIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwibm9uZSJdLGFycmF5T2s6ITAsZGZsdDoibm9uZSIsZWRpdFR5cGU6ImNhbGMifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0saSgibWFya2VyIix7YW5pbTohMH0pKSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIGxlZnQiLCJ0b3AgY2VudGVyIiwidG9wIHJpZ2h0IiwibWlkZGxlIGxlZnQiLCJtaWRkbGUgY2VudGVyIiwibWlkZGxlIHJpZ2h0IiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZGZsdDoibWlkZGxlIGNlbnRlciIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250Om8oe2VkaXRUeXBlOiJjYWxjIixjb2xvckVkaXRUeXBlOiJzdHlsZSIsYXJyYXlPazohMH0pLHI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1ODQsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzc0LCIuL2NvbnN0YW50cyI6MTA1NX1dLDEwNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0scz10KCIuL3N1YnR5cGVzIiksbD10KCIuL2NvbG9yc2NhbGVfY2FsYyIpLGM9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSx1PXQoIi4vY2FsY19zZWxlY3Rpb24iKTtmdW5jdGlvbiBmKHQsZSxyLG4saSxvLGwpe3ZhciBjPWUuX2xlbmd0aCx1PXQuX2Z1bGxMYXlvdXQsZj1yLl9pZCxoPW4uX2lkLHA9dS5fZmlyc3RTY2F0dGVyW2QoZSldPT09ZS51aWQsdj0oZyhlLHUscixuKXx8e30pLm9yaWVudGF0aW9uLG09ZS5maWxsO3IuX21pbkR0aWNrPTAsbi5fbWluRHRpY2s9MDt2YXIgeT17cGFkZGVkOiEwfSx4PXtwYWRkZWQ6ITB9O2wmJih5LnBwYWQ9eC5wcGFkPWwpO3ZhciBiPWM8Mnx8aVswXSE9PWlbYy0xXXx8b1swXSE9PW9bYy0xXTtiJiYoInRvemVyb3giPT09bXx8InRvbmV4dHgiPT09bSYmKHB8fCJoIj09PXYpKT95LnRvemVybz0hMDooZS5lcnJvcl95fHx7fSkudmlzaWJsZXx8InRvbmV4dHkiIT09bSYmInRvemVyb3kiIT09bSYmKHMuaGFzTWFya2VycyhlKXx8cy5oYXNUZXh0KGUpKXx8KHkucGFkZGVkPSExLHkucHBhZD0wKSxiJiYoInRvemVyb3kiPT09bXx8InRvbmV4dHkiPT09bSYmKHB8fCJ2Ij09PXYpKT94LnRvemVybz0hMDoidG9uZXh0eCIhPT1tJiYidG96ZXJveCIhPT1tfHwoeC5wYWRkZWQ9ITEpLGYmJihlLl9leHRyZW1lc1tmXT1hLmZpbmRFeHRyZW1lcyhyLGkseSkpLGgmJihlLl9leHRyZW1lc1toXT1hLmZpbmRFeHRyZW1lcyhuLG8seCkpfWZ1bmN0aW9uIGgodCxlKXtpZihzLmhhc01hcmtlcnModCkpe3ZhciByLG49dC5tYXJrZXIsbz0xLjYqKHQubWFya2VyLnNpemVyZWZ8fDEpO2lmKHI9ImFyZWEiPT09dC5tYXJrZXIuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydCgodHx8MCkvbyksMyl9OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgodHx8MCkvbywzKX0saS5pc0FycmF5T3JUeXBlZEFycmF5KG4uc2l6ZSkpe3ZhciBsPXt0eXBlOiJsaW5lYXIifTthLnNldENvbnZlcnQobCk7Zm9yKHZhciBjPWwubWFrZUNhbGNkYXRhKHQubWFya2VyLCJzaXplIiksdT1uZXcgQXJyYXkoZSksZj0wO2Y8ZTtmKyspdVtmXT1yKGNbZl0pO3JldHVybiB1fXJldHVybiByKG4uc2l6ZSl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1kKGUpLG49dC5fZmlyc3RTY2F0dGVyO25bcl18fChuW3JdPWUudWlkKX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQuc3RhY2tncm91cDtyZXR1cm4gdC54YXhpcyt0LnlheGlzK3QudHlwZSsoZT8iLSIrZToiIil9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT10LnN0YWNrZ3JvdXA7aWYoaSl7dmFyIGE9ZS5fc2NhdHRlclN0YWNrT3B0c1tyLl9pZCtuLl9pZF1baV0sbz0idiI9PT1hLm9yaWVudGF0aW9uP246cjtyZXR1cm4ibGluZWFyIj09PW8udHlwZXx8ImxvZyI9PT1vLnR5cGU/YTp2b2lkIDB9fWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLHMsZCx2LG0seSx4PXQuX2Z1bGxMYXlvdXQsYj1hLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksXz1hLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iiksdz1iLm1ha2VDYWxjZGF0YShlLCJ4Iiksaz1fLm1ha2VDYWxjZGF0YShlLCJ5IiksVD1lLl9sZW5ndGgsQT1uZXcgQXJyYXkoVCksTT1lLmlkcyxTPWcoZSx4LGIsXyksRT0hMTtwKHgsZSk7dmFyIEMsTD0ieCIsej0ieSI7Zm9yKFM/KGkucHVzaFVuaXF1ZShTLnRyYWNlSW5kaWNlcyxlLl9leHBhbmRlZEluZGV4KSwocj0idiI9PT1TLm9yaWVudGF0aW9uKT8oej0icyIsQz0ieCIpOihMPSJzIixDPSJ5IiksbT0iaW50ZXJwb2xhdGUiPT09Uy5zdGFja2dhcHMpOmYodCxlLGIsXyx3LGssaChlLFQpKSxzPTA7czxUO3MrKyl7dmFyIE89QVtzXT17fSxJPW4od1tzXSksRD1uKGtbc10pO0kmJkQ/KE9bTF09d1tzXSxPW3pdPWtbc10pOlMmJihyP0k6RCk/KE9bQ109cj93W3NdOmtbc10sTy5nYXA9ITAsbT8oTy5zPW8sRT0hMCk6Ty5zPTApOk9bTF09T1t6XT1vLE0mJihPLmlkPVN0cmluZyhNW3NdKSl9aWYoYyhBLGUpLGwodCxlKSx1KEEsZSksUyl7Zm9yKHM9MDtzPEEubGVuZ3RoOylBW3NdW0NdPT09bz9BLnNwbGljZShzLDEpOnMrKztpZihpLnNvcnQoQSxmdW5jdGlvbih0LGUpe3JldHVybiB0W0NdLWVbQ118fHQuaS1lLml9KSxFKXtmb3Iocz0wO3M8QS5sZW5ndGgtMSYmQVtzXS5nYXA7KXMrKztmb3IoKHk9QVtzXS5zKXx8KHk9QVtzXS5zPTApLGQ9MDtkPHM7ZCsrKUFbZF0ucz15O2Zvcih2PUEubGVuZ3RoLTE7dj5zJiZBW3ZdLmdhcDspdi0tO2Zvcih5PUFbdl0ucyxkPUEubGVuZ3RoLTE7ZD52O2QtLSlBW2RdLnM9eTtmb3IoO3M8djspaWYoQVsrK3NdLmdhcCl7Zm9yKGQ9cysxO0FbZF0uZ2FwOylkKys7Zm9yKHZhciBQPUFbcy0xXVtDXSxSPUFbcy0xXS5zLEY9KEFbZF0ucy1SKS8oQVtkXVtDXS1QKTtzPGQ7KUFbc10ucz1SKyhBW3NdW0NdLVApKkYscysrfX19cmV0dXJuIEF9LGNhbGNNYXJrZXJTaXplOmgsY2FsY0F4aXNFeHBhbnNpb246ZixzZXRGaXJzdFNjYXR0ZXI6cCxnZXRTdGFja09wdHM6Z319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNTAsIi4vY2FsY19zZWxlY3Rpb24iOjEwNTMsIi4vY29sb3JzY2FsZV9jYWxjIjoxMDU0LCIuL3N1YnR5cGVzIjoxMDc1LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sMTA1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJm4udGFnU2VsZWN0ZWQodCxlKX19LHsiLi4vLi4vbGliIjo3MDB9XSwxMDU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YS5oYXNMaW5lcyhlKSYmbihlLCJsaW5lIikmJmkodCxlLHt2YWxzOmUubGluZS5jb2xvcixjb250YWluZXJTdHI6ImxpbmUiLGNMZXR0ZXI6ImMifSksYS5oYXNNYXJrZXJzKGUpJiYobihlLCJtYXJrZXIiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbihlLCJtYXJrZXIubGluZSIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NTg4LCIuL3N1YnR5cGVzIjoxMDc1fV0sMTA1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1BUU19MSU5FU09OTFk6MjAsbWluVG9sZXJhbmNlOi4yLHRvbGVyYW5jZUdyb3d0aDoxMCxtYXhTY3JlZW5zQXdheToyMCxldmVudERhdGFLZXlzOltdfX0se31dLDEwNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jYWxjIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSxvKXtpW25dPSEwO3ZhciBzPXtpOm51bGwsZ2FwOiEwLHM6MH07aWYoc1tvXT1yLHQuc3BsaWNlKGUsMCxzKSxlJiZyPT09dFtlLTFdW29dKXt2YXIgbD10W2UtMV07cy5zPWwucyxzLmk9bC5pLHMuZ2FwPWwuZ2FwfWVsc2UgYSYmKHMucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10W2UtMV0sYT10W2UrMV07cmV0dXJuIGE/aT9pLnMrKGEucy1pLnMpKihyLWlbbl0pLyhhW25dLWlbbl0pOmEuczppLnN9KHQsZSxyLG8pKTtlfHwodFswXS50PXRbMV0udCx0WzBdLnRyYWNlPXRbMV0udHJhY2UsZGVsZXRlIHRbMV0udCxkZWxldGUgdFsxXS50cmFjZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS54YXhpcyxhPWUueWF4aXMsbz1yLl9pZCthLl9pZCxzPXQuX2Z1bGxMYXlvdXQuX3NjYXR0ZXJTdGFja09wdHNbb107aWYocyl7dmFyIGwsYyx1LGYsaCxwLGQsZyx2LG0seSx4LGIsXyx3LGs9dC5jYWxjZGF0YTtmb3IodmFyIFQgaW4gcyl7dmFyIEE9KG09c1tUXSkudHJhY2VJbmRpY2VzO2lmKEEubGVuZ3RoKXtmb3IoeT0iaW50ZXJwb2xhdGUiPT09bS5zdGFja2dhcHMseD1tLmdyb3Vwbm9ybSwidiI9PT1tLm9yaWVudGF0aW9uPyhiPSJ4IixfPSJ5Iik6KGI9InkiLF89IngiKSx3PW5ldyBBcnJheShBLmxlbmd0aCksbD0wO2w8dy5sZW5ndGg7bCsrKXdbbF09ITE7cD1rW0FbMF1dO3ZhciBNPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKGw9MDtsPHAubGVuZ3RoO2wrKylNW2xdPXBbbF1bYl07Zm9yKGw9MTtsPEEubGVuZ3RoO2wrKyl7Zm9yKGg9a1tBW2xdXSxjPXU9MDtjPGgubGVuZ3RoO2MrKyl7Zm9yKGQ9aFtjXVtiXTtkPk1bdV0mJnU8TS5sZW5ndGg7dSsrKWkoaCxjLE1bdV0sbCx3LHksYiksYysrO2lmKGQhPT1NW3VdKXtmb3IoZj0wO2Y8bDtmKyspaShrW0FbZl1dLHUsZCxmLHcseSxiKTtNLnNwbGljZSh1LDAsZCl9dSsrfWZvcig7dTxNLmxlbmd0aDt1KyspaShoLGMsTVt1XSxsLHcseSxiKSxjKyt9dmFyIFM9TS5sZW5ndGg7Zm9yKGM9MDtjPHAubGVuZ3RoO2MrKyl7Zm9yKGc9cFtjXVtfXT1wW2NdLnMsbD0xO2w8QS5sZW5ndGg7bCsrKShoPWtbQVtsXV0pWzBdLnRyYWNlLl9yYXdMZW5ndGg9aFswXS50cmFjZS5fbGVuZ3RoLGhbMF0udHJhY2UuX2xlbmd0aD1TLGcrPWhbY10ucyxoW2NdW19dPWc7aWYoeClmb3Iodj0oImZyYWN0aW9uIj09PXg/ZzpnLzEwMCl8fDEsbD0wO2w8QS5sZW5ndGg7bCsrKXt2YXIgRT1rW0FbbF1dW2NdO0VbX10vPXYsRS5zTm9ybT1FLnMvdn19Zm9yKGw9MDtsPEEubGVuZ3RoO2wrKyl7dmFyIEM9KGg9a1tBW2xdXSlbMF0udHJhY2UsTD1uLmNhbGNNYXJrZXJTaXplKEMsQy5fcmF3TGVuZ3RoKSx6PUFycmF5LmlzQXJyYXkoTCk7aWYoTCYmd1tsXXx8eil7dmFyIE89TDtmb3IoTD1uZXcgQXJyYXkoUyksYz0wO2M8UztjKyspTFtjXT1oW2NdLmdhcD8wOno/T1toW2NdLmldOk99dmFyIEk9bmV3IEFycmF5KFMpLEQ9bmV3IEFycmF5KFMpO2ZvcihjPTA7YzxTO2MrKylJW2NdPWhbY10ueCxEW2NdPWhbY10ueTtuLmNhbGNBeGlzRXhwYW5zaW9uKHQsQyxyLGEsSSxELEwpLGhbMF0udC5vcmllbnRhdGlvbj1tLm9yaWVudGF0aW9ufX19fX19LHsiLi9jYWxjIjoxMDUyfV0sMTA1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07aWYoInNjYXR0ZXIiPT09ci50eXBlKXt2YXIgbj1yLmZpbGw7aWYoIm5vbmUiIT09biYmInRvc2VsZiIhPT1uJiYoci5vcGFjaXR5PXZvaWQgMCwidG9uZXh0eSI9PT1ufHwidG9uZXh0eCI9PT1uKSlmb3IodmFyIGk9ZS0xO2k+PTA7aS0tKXt2YXIgYT10W2ldO2lmKCJzY2F0dGVyIj09PWEudHlwZSYmYS54YXhpcz09PXIueGF4aXMmJmEueWF4aXM9PT1yLnlheGlzKXthLm9wYWNpdHk9dm9pZCAwO2JyZWFrfX19fX19LHt9XSwxMDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKSxzPXQoIi4vc3VidHlwZXMiKSxsPXQoIi4veHlfZGVmYXVsdHMiKSxjPXQoIi4vc3RhY2tfZGVmYXVsdHMiKSx1PXQoIi4vbWFya2VyX2RlZmF1bHRzIiksZj10KCIuL2xpbmVfZGVmYXVsdHMiKSxoPXQoIi4vbGluZV9zaGFwZV9kZWZhdWx0cyIpLHA9dCgiLi90ZXh0X2RlZmF1bHRzIiksZD10KCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixnKXtmdW5jdGlvbiB2KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIG09bCh0LGUsZyx2KTtpZihtfHwoZS52aXNpYmxlPSExKSxlLnZpc2libGUpe3ZhciB5PWModCxlLGcsdikseD0heSYmbTxvLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyI7digidGV4dCIpLHYoImhvdmVydGV4dCIpLHYoIm1vZGUiLHgpLHMuaGFzTGluZXMoZSkmJihmKHQsZSxyLGcsdiksaCh0LGUsdiksdigiY29ubmVjdGdhcHMiKSx2KCJsaW5lLnNpbXBsaWZ5IikpLHMuaGFzTWFya2VycyhlKSYmdSh0LGUscixnLHYse2dyYWRpZW50OiEwfSkscy5oYXNUZXh0KGUpJiZwKHQsZSxnLHYpO3ZhciBiPVtdOyhzLmhhc01hcmtlcnMoZSl8fHMuaGFzVGV4dChlKSkmJih2KCJjbGlwb25heGlzIiksdigibWFya2VyLm1heGRpc3BsYXllZCIpLGIucHVzaCgicG9pbnRzIikpLHYoImZpbGwiLHk/eS5maWxsRGZsdDoibm9uZSIpLCJub25lIiE9PWUuZmlsbCYmKGQodCxlLHIsdikscy5oYXNMaW5lcyhlKXx8aCh0LGUsdikpO3ZhciBfPShlLmxpbmV8fHt9KS5jb2xvcix3PShlLm1hcmtlcnx8e30pLmNvbG9yOyJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8Yi5wdXNoKCJmaWxscyIpLHYoImhvdmVyb24iLGIuam9pbigiKyIpfHwicG9pbnRzIiksImZpbGxzIiE9PWUuaG92ZXJvbiYmdigiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBrPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO2sodCxlLF98fHd8fHIse2F4aXM6InkifSksayh0LGUsX3x8d3x8cix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx2KX19fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2F0dHJpYnV0ZXMiOjEwNTEsIi4vY29uc3RhbnRzIjoxMDU1LCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA2MCwiLi9saW5lX2RlZmF1bHRzIjoxMDY0LCIuL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEwNjYsIi4vbWFya2VyX2RlZmF1bHRzIjoxMDcwLCIuL3N0YWNrX2RlZmF1bHRzIjoxMDczLCIuL3N1YnR5cGVzIjoxMDc1LCIuL3RleHRfZGVmYXVsdHMiOjEwNzYsIi4veHlfZGVmYXVsdHMiOjEwNzd9XSwxMDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHR8fDA9PT10fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9QXJyYXkuaXNBcnJheShyKT9mdW5jdGlvbih0KXtyLnB1c2godCl9OmZ1bmN0aW9uKHQpe3IudGV4dD10fSxvPW4uZXh0cmFjdE9wdGlvbih0LGUsImh0eCIsImhvdmVydGV4dCIpO2lmKGkobykpcmV0dXJuIGEobyk7dmFyIHM9bi5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7cmV0dXJuIGkocyk/YShzKTp2b2lkIDB9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sMTA2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz0hMTtpZihlLm1hcmtlcil7dmFyIHM9ZS5tYXJrZXIuY29sb3IsbD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yO3MmJiFpKHMpP289czpsJiYhaShsKSYmKG89bCl9YSgiZmlsbGNvbG9yIixuLmFkZE9wYWNpdHkoKGUubGluZXx8e30pLmNvbG9yfHxvfHxyLC41KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vbGliIjo3MDB9XSwxMDYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhO2lmKCJsaW5lcyI9PT10Lm1vZGUpcmV0dXJuKHI9dC5saW5lLmNvbG9yKSYmbi5vcGFjaXR5KHIpP3I6dC5maWxsY29sb3I7aWYoIm5vbmUiPT09dC5tb2RlKXJldHVybiB0LmZpbGw/dC5maWxsY29sb3I6IiI7dmFyIG89ZS5tY2N8fCh0Lm1hcmtlcnx8e30pLmNvbG9yLHM9ZS5tbGNjfHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybihhPW8mJm4ub3BhY2l0eShvKT9vOnMmJm4ub3BhY2l0eShzKSYmKGUubWx3fHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9zOiIiKT9uLm9wYWNpdHkoYSk8LjM/bi5hZGRPcGFjaXR5KGEsLjMpOmE6KHI9KHQubGluZXx8e30pLmNvbG9yKSYmbi5vcGFjaXR5KHIpJiZpLmhhc0xpbmVzKHQpJiZ0LmxpbmUud2lkdGg/cjp0LmZpbGxjb2xvcn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuL3N1YnR5cGVzIjoxMDc1fV0sMTA2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuL2dldF90cmFjZV9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi9maWxsX2hvdmVyX3RleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9dC5jZCxmPXVbMF0udHJhY2UsaD10LnhhLHA9dC55YSxkPWguYzJwKGUpLGc9cC5jMnAociksdj1bZCxnXSxtPWYuaG92ZXJvbnx8IiIseT0tMSE9PWYubW9kZS5pbmRleE9mKCJtYXJrZXJzIik/MzouNTtpZigtMSE9PW0uaW5kZXhPZigicG9pbnRzIikpe3ZhciB4PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KHksdC5tcmN8fDApLHI9aC5jMnAodC54KS1kLG49cC5jMnAodC55KS1nO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocipyK24qbiktZSwxLXkvZSl9LGI9aS5nZXREaXN0YW5jZUZ1bmN0aW9uKGMsZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCkscj0xLTEvZSxuPU1hdGguYWJzKGguYzJwKHQueCktZCk7cmV0dXJuIG48ZT9yKm4vZTpuLWUrcn0sZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCkscj0xLTEvZSxuPU1hdGguYWJzKHAuYzJwKHQueSktZyk7cmV0dXJuIG48ZT9yKm4vZTpuLWUrcn0seCk7aWYoaS5nZXRDbG9zZXN0KHUsYix0KSwhMSE9PXQuaW5kZXgpe3ZhciBfPXVbdC5pbmRleF0sdz1oLmMycChfLngsITApLGs9cC5jMnAoXy55LCEwKSxUPV8ubXJjfHwxO3QuaW5kZXg9Xy5pO3ZhciBBPXVbMF0udC5vcmllbnRhdGlvbixNPUEmJihfLnNOb3JtfHxfLnMpLFM9ImgiPT09QT9NOl8ueCxFPSJ2Ij09PUE/TTpfLnk7cmV0dXJuIG4uZXh0ZW5kRmxhdCh0LHtjb2xvcjpvKGYsXykseDA6dy1ULHgxOncrVCx4TGFiZWxWYWw6Uyx5MDprLVQseTE6aytULHlMYWJlbFZhbDpFLHNwaWtlRGlzdGFuY2U6eChfKSxob3ZlcnRlbXBsYXRlOmYuaG92ZXJ0ZW1wbGF0ZX0pLGwoXyxmLHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKShfLGYsdCksW3RdfX1pZigtMSE9PW0uaW5kZXhPZigiZmlsbHMiKSYmZi5fcG9seWdvbnMpe3ZhciBDLEwseixPLEksRCxQLFIsRixCPWYuX3BvbHlnb25zLE49W10saj0hMSxWPTEvMCxVPS0xLzAscT0xLzAsSD0tMS8wO2ZvcihDPTA7QzxCLmxlbmd0aDtDKyspKHo9QltDXSkuY29udGFpbnModikmJihqPSFqLE4ucHVzaCh6KSxxPU1hdGgubWluKHEsei55bWluKSxIPU1hdGgubWF4KEgsei55bWF4KSk7aWYoail7dmFyIEc9KChxPU1hdGgubWF4KHEsMCkpKyhIPU1hdGgubWluKEgscC5fbGVuZ3RoKSkpLzI7Zm9yKEM9MDtDPE4ubGVuZ3RoO0MrKylmb3IoTz1OW0NdLnB0cyxMPTE7TDxPLmxlbmd0aDtMKyspKFI9T1tMLTFdWzFdKT5HIT0oRj1PW0xdWzFdKT49RyYmKEQ9T1tMLTFdWzBdLFA9T1tMXVswXSxGLVImJihJPUQrKFAtRCkqKEctUikvKEYtUiksVj1NYXRoLm1pbihWLEkpLFU9TWF0aC5tYXgoVSxJKSkpO1Y9TWF0aC5tYXgoViwwKSxVPU1hdGgubWluKFUsaC5fbGVuZ3RoKTt2YXIgWT1zLmRlZmF1bHRMaW5lO3JldHVybiBzLm9wYWNpdHkoZi5maWxsY29sb3IpP1k9Zi5maWxsY29sb3I6cy5vcGFjaXR5KChmLmxpbmV8fHt9KS5jb2xvcikmJihZPWYubGluZS5jb2xvciksbi5leHRlbmRGbGF0KHQse2Rpc3RhbmNlOnQubWF4SG92ZXJEaXN0YW5jZSx4MDpWLHgxOlUseTA6Ryx5MTpHLGNvbG9yOlksaG92ZXJ0ZW1wbGF0ZTohMX0pLGRlbGV0ZSB0LmluZGV4LGYudGV4dCYmIUFycmF5LmlzQXJyYXkoZi50ZXh0KT90LnRleHQ9U3RyaW5nKGYudGV4dCk6dC50ZXh0PWYubmFtZSxbdF19fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9yZWdpc3RyeSI6ODI5LCIuL2ZpbGxfaG92ZXJfdGV4dCI6MTA1OSwiLi9nZXRfdHJhY2VfY29sb3IiOjEwNjF9XSwxMDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9LGk9dCgiLi9zdWJ0eXBlcyIpO24uaGFzTGluZXM9aS5oYXNMaW5lcyxuLmhhc01hcmtlcnM9aS5oYXNNYXJrZXJzLG4uaGFzVGV4dD1pLmhhc1RleHQsbi5pc0J1YmJsZT1pLmlzQnViYmxlLG4uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLmNhbGMsbi5jcm9zc1RyYWNlQ2FsYz10KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxuLmFycmF5c1RvQ2FsY2RhdGE9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5jb2xvcmJhcj10KCIuL21hcmtlcl9jb2xvcmJhciIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4uYW5pbWF0YWJsZT0hMCxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXIiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSIsInpvb21TY2FsZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNTAsIi4vYXR0cmlidXRlcyI6MTA1MSwiLi9jYWxjIjoxMDUyLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjEwNTYsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjEwNTcsIi4vZGVmYXVsdHMiOjEwNTgsIi4vaG92ZXIiOjEwNjIsIi4vbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuL3Bsb3QiOjEwNzEsIi4vc2VsZWN0IjoxMDcyLCIuL3N0eWxlIjoxMDc0LCIuL3N1YnR5cGVzIjoxMDc1fV0sMTA2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYz0odC5tYXJrZXJ8fHt9KS5jb2xvcjsocygibGluZS5jb2xvciIsciksaSh0LCJsaW5lIikpP2EodCxlLG8scyx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KTpzKCJsaW5lLmNvbG9yIiwhbihjKSYmY3x8cik7cygibGluZS53aWR0aCIpLChsfHx7fSkubm9EYXNofHxzKCJsaW5lLmRhc2giKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo1ODcsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo1ODgsIi4uLy4uL2xpYiI6NzAwfV0sMTA2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksaT1uLkJBRE5VTSxhPW4uTE9HX0NMSVAsbz1hKy41LHM9YS0uNSxsPXQoIi4uLy4uL2xpYiIpLGM9bC5zZWdtZW50c0ludGVyc2VjdCx1PWwuY29uc3RyYWluLGY9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGEsaCxwLGQsZyx2LG0seSx4LGIsXyx3LGssVCxBLE0sUz1lLnhheGlzLEU9ZS55YXhpcyxDPSJsb2ciPT09Uy50eXBlLEw9ImxvZyI9PT1FLnR5cGUsej1TLl9sZW5ndGgsTz1FLl9sZW5ndGgsST1lLmNvbm5lY3RHYXBzLEQ9ZS5iYXNlVG9sZXJhbmNlLFA9ZS5zaGFwZSxSPSJsaW5lYXIiPT09UCxGPWUuZmlsbCYmIm5vbmUiIT09ZS5maWxsLEI9W10sTj1mLm1pblRvbGVyYW5jZSxqPXQubGVuZ3RoLFY9bmV3IEFycmF5KGopLFU9MDtmdW5jdGlvbiBxKGUpe3ZhciByPXRbZV07aWYoIXIpcmV0dXJuITE7dmFyIG49Uy5jMnAoci54KSxhPUUuYzJwKHIueSk7aWYobj09PWkpe2lmKEMmJihuPVMuYzJwKHIueCwhMCkpLG49PT1pKXJldHVybiExO0wmJmE9PT1pJiYobio9TWF0aC5hYnMoUy5fbSpPKihTLl9tPjA/bzpzKS8oRS5fbSp6KihFLl9tPjA/bzpzKSkpKSxuKj0xZTN9aWYoYT09PWkpe2lmKEwmJihhPUUuYzJwKHIueSwhMCkpLGE9PT1pKXJldHVybiExO2EqPTFlM31yZXR1cm5bbixhXX1mdW5jdGlvbiBIKHQsZSxyLG4pe3ZhciBpPXItdCxhPW4tZSxvPS41LXQscz0uNS1lLGw9aSppK2EqYSxjPWkqbythKnM7aWYoYz4wJiZjPGwpe3ZhciB1PW8qYS1zKmk7aWYodSp1PGwpcmV0dXJuITB9fWZ1bmN0aW9uIEcodCxlKXt2YXIgcj10WzBdL3osbj10WzFdL08saT1NYXRoLm1heCgwLC1yLHItMSwtbixuLTEpO3JldHVybiBpJiZ2b2lkIDAhPT1BJiZIKHIsbixBLE0pJiYoaT0wKSxpJiZlJiZIKHIsbixlWzBdL3osZVsxXS9PKSYmKGk9MCksKDErZi50b2xlcmFuY2VHcm93dGgqaSkqRH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dFswXS1lWzBdLG49dFsxXS1lWzFdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9dmFyIFcsWCxaLCQsSixLLFEsdHQ9Zi5tYXhTY3JlZW5zQXdheSxldD0teip0dCxydD16KigxK3R0KSxudD0tTyp0dCxpdD1PKigxK3R0KSxhdD1bW2V0LG50LHJ0LG50XSxbcnQsbnQscnQsaXRdLFtydCxpdCxldCxpdF0sW2V0LGl0LGV0LG50XV07ZnVuY3Rpb24gb3QodCl7aWYodFswXTxldHx8dFswXT5ydHx8dFsxXTxudHx8dFsxXT5pdClyZXR1cm5bdSh0WzBdLGV0LHJ0KSx1KHRbMV0sbnQsaXQpXX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmKHRbMF09PT1ldHx8dFswXT09PXJ0KXx8KHRbMV09PT1lWzFdJiYodFsxXT09PW50fHx0WzFdPT09aXQpfHx2b2lkIDApfWZ1bmN0aW9uIGx0KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obixpKXt2YXIgYT1vdChuKSxvPW90KGkpLHM9W107aWYoYSYmbyYmc3QoYSxvKSlyZXR1cm4gczthJiZzLnB1c2goYSksbyYmcy5wdXNoKG8pO3ZhciBjPTIqbC5jb25zdHJhaW4oKG5bdF0raVt0XSkvMixlLHIpLSgoYXx8bilbdF0rKG98fGkpW3RdKTtjJiYoKGEmJm8/Yz4wPT1hW3RdPm9bdF0/YTpvOmF8fG8pW3RdKz1jKTtyZXR1cm4gc319ZnVuY3Rpb24gY3QodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1lPT09VltVLTFdWzBdLGk9cj09PVZbVS0xXVsxXTtpZighbnx8IWkpaWYoVT4xKXt2YXIgYT1lPT09VltVLTJdWzBdLG89cj09PVZbVS0yXVsxXTtuJiYoZT09PWV0fHxlPT09cnQpJiZhP28/VS0tOlZbVS0xXT10OmkmJihyPT09bnR8fHI9PT1pdCkmJm8/YT9VLS06VltVLTFdPXQ6VltVKytdPXR9ZWxzZSBWW1UrK109dH1mdW5jdGlvbiB1dCh0KXtWW1UtMV1bMF0hPT10WzBdJiZWW1UtMV1bMV0hPT10WzFdJiZjdChbWiwkXSksY3QodCksSj1udWxsLFo9JD0wfWZ1bmN0aW9uIGZ0KHQpe2lmKEE9dFswXS96LE09dFsxXS9PLFc9dFswXTxldD9ldDp0WzBdPnJ0P3J0OjAsWD10WzFdPG50P250OnRbMV0+aXQ/aXQ6MCxXfHxYKXtpZihVKWlmKEope3ZhciBlPVEoSix0KTtlLmxlbmd0aD4xJiYodXQoZVswXSksVltVKytdPWVbMV0pfWVsc2UgSz1RKFZbVS0xXSx0KVswXSxWW1UrK109SztlbHNlIFZbVSsrXT1bV3x8dFswXSxYfHx0WzFdXTt2YXIgcj1WW1UtMV07VyYmWCYmKHJbMF0hPT1XfHxyWzFdIT09WCk/KEomJihaIT09VyYmJCE9PVg/Y3QoWiYmJD8obj1KLGE9KGk9dClbMF0tblswXSxvPShpWzFdLW5bMV0pL2EsKG5bMV0qaVswXS1pWzFdKm5bMF0pL2E+MD9bbz4wP2V0OnJ0LGl0XTpbbz4wP3J0OmV0LG50XSk6W1p8fFcsJHx8WF0pOlomJiQmJmN0KFtaLCRdKSksY3QoW1csWF0pKTpaLVcmJiQtWCYmY3QoW1d8fFosWHx8JF0pLEo9dCxaPVcsJD1YfWVsc2UgSiYmdXQoUShKLHQpWzBdKSxWW1UrK109dDt2YXIgbixpLGEsb31mb3IoImxpbmVhciI9PT1QfHwic3BsaW5lIj09PVA/UT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTAsaT0wO2k8NDtpKyspe3ZhciBhPWF0W2ldLG89Yyh0WzBdLHRbMV0sZVswXSxlWzFdLGFbMF0sYVsxXSxhWzJdLGFbM10pO28mJighbnx8TWF0aC5hYnMoby54LXJbMF1bMF0pPjF8fE1hdGguYWJzKG8ueS1yWzBdWzFdKT4xKSYmKG89W28ueCxvLnldLG4mJlkobyx0KTxZKHJbMF0sdCk/ci51bnNoaWZ0KG8pOnIucHVzaChvKSxuKyspfXJldHVybiByfToiaHYiPT09UHx8InZoIj09PVA/UT1mdW5jdGlvbih0LGUpe3ZhciByPVtdLG49b3QodCksaT1vdChlKTtyZXR1cm4gbiYmaSYmc3QobixpKT9yOihuJiZyLnB1c2gobiksaSYmci5wdXNoKGkpLHIpfToiaHZoIj09PVA/UT1sdCgwLGV0LHJ0KToidmh2Ij09PVAmJihRPWx0KDEsbnQsaXQpKSxyPTA7cjxqO3IrKylpZihuPXEocikpe2ZvcihVPTAsSj1udWxsLGZ0KG4pLHIrKztyPGo7cisrKXtpZighKGg9cShyKSkpe2lmKEkpY29udGludWU7YnJlYWt9aWYoUiYmZS5zaW1wbGlmeSl7dmFyIGh0PXEocisxKTtpZih5PVkoaCxuKSxGJiYoMD09PVV8fFU9PT1qLTEpfHwhKHk8RyhoLGh0KSpOKSl7Zm9yKHY9WyhoWzBdLW5bMF0pL3ksKGhbMV0tblsxXSkveV0scD1uLHg9eSxiPXc9az0wLGc9ITEsYT1oLHIrKztyPHQubGVuZ3RoO3IrKyl7aWYoZD1odCxodD1xKHIrMSksIWQpe2lmKEkpY29udGludWU7YnJlYWt9aWYoVD0obT1bZFswXS1uWzBdLGRbMV0tblsxXV0pWzBdKnZbMV0tbVsxXSp2WzBdLHc9TWF0aC5taW4odyxUKSwoaz1NYXRoLm1heChrLFQpKS13PkcoZCxodCkpYnJlYWs7YT1kLChfPW1bMF0qdlswXSttWzFdKnZbMV0pPng/KHg9XyxoPWQsZz0hMSk6XzxiJiYoYj1fLHA9ZCxnPSEwKX1pZihnPyhmdChoKSxhIT09cCYmZnQocCkpOihwIT09biYmZnQocCksYSE9PWgmJmZ0KGgpKSxmdChhKSxyPj10Lmxlbmd0aHx8IWQpYnJlYWs7ZnQoZCksbj1kfX1lbHNlIGZ0KGgpfUomJmN0KFtafHxKWzBdLCR8fEpbMV1dKSxCLnB1c2goVi5zbGljZSgwLFUpKX1yZXR1cm4gQn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiLi9jb25zdGFudHMiOjEwNTV9XSwxMDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7InNwbGluZSI9PT1yKCJsaW5lLnNoYXBlIikmJnIoImxpbmUuc21vb3RoaW5nIil9fSx7fV0sMTA2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17dG9uZXh0eDoxLHRvbmV4dHk6MSx0b25leHQ6MX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLGM9e30sdT0hMSxmPS0xLGg9MCxwPS0xO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspKG89KGk9clthXVswXS50cmFjZSkuc3RhY2tncm91cHx8IiIpP28gaW4gYz9sPWNbb106KGw9Y1tvXT1oLGgrKyk6aS5maWxsIGluIG4mJnA+PTA/bD1wOihsPXA9aCxoKyspLGw8ZiYmKHU9ITApLGkuX2dyb3VwSW5kZXg9Zj1sO3ZhciBkPXIuc2xpY2UoKTt1JiZkLnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLnRyYWNlLG49ZVswXS50cmFjZTtyZXR1cm4gci5fZ3JvdXBJbmRleC1uLl9ncm91cEluZGV4fHxyLmluZGV4LW4uaW5kZXh9KTt2YXIgZz17fTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKW89KGk9ZFthXVswXS50cmFjZSkuc3RhY2tncm91cHx8IiIsITA9PT1pLnZpc2libGU/KGkuX25leHR0cmFjZT1udWxsLGkuZmlsbCBpbiBuJiYocz1nW29dLGkuX3ByZXZ0cmFjZT1zfHxudWxsLHMmJihzLl9uZXh0dHJhY2U9aSkpLGkuX293bmZpbGw9aS5maWxsJiYoInRvemVybyI9PT1pLmZpbGwuc3Vic3RyKDAsNil8fCJ0b3NlbGYiPT09aS5maWxsfHwidG8iPT09aS5maWxsLnN1YnN0cigwLDIpJiYhaS5fcHJldnRyYWNlKSxnW29dPWkpOmkuX3ByZXZ0cmFjZT1pLl9uZXh0dHJhY2U9aS5fb3duZmlsbD1udWxsO3JldHVybiBkfX0se31dLDEwNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXJrZXIscj1lLnNpemVyZWZ8fDEsaT1lLnNpemVtaW58fDAsYT0iYXJlYSI9PT1lLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodC9yKX06ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWEodC8yKTtyZXR1cm4gbihlKSYmZT4wP01hdGgubWF4KGUsaSk6MH19fSx7ImZhc3QtaXNudW1lcmljIjoyMjF9XSwxMDY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y29udGFpbmVyOiJtYXJrZXIiLG1pbjoiY21pbiIsbWF4OiJjbWF4In19LHt9XSwxMDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwsYyl7dmFyIHU9by5pc0J1YmJsZSh0KSxmPSh0LmxpbmV8fHt9KS5jb2xvcjsoYz1jfHx7fSxmJiYocj1mKSxsKCJtYXJrZXIuc3ltYm9sIiksbCgibWFya2VyLm9wYWNpdHkiLHU/Ljc6MSksbCgibWFya2VyLnNpemUiKSxsKCJtYXJrZXIuY29sb3IiLHIpLGkodCwibWFya2VyIikmJmEodCxlLHMsbCx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLGMubm9TZWxlY3R8fChsKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxsKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpLGwoInNlbGVjdGVkLm1hcmtlci5zaXplIiksbCgidW5zZWxlY3RlZC5tYXJrZXIuc2l6ZSIpKSxjLm5vTGluZXx8KGwoIm1hcmtlci5saW5lLmNvbG9yIixmJiYhQXJyYXkuaXNBcnJheShmKSYmZS5tYXJrZXIuY29sb3IhPT1mP2Y6dT9uLmJhY2tncm91bmQ6bi5kZWZhdWx0TGluZSksaSh0LCJtYXJrZXIubGluZSIpJiZhKHQsZSxzLGwse3ByZWZpeDoibWFya2VyLmxpbmUuIixjTGV0dGVyOiJjIn0pLGwoIm1hcmtlci5saW5lLndpZHRoIix1PzE6MCkpLHUmJihsKCJtYXJrZXIuc2l6ZXJlZiIpLGwoIm1hcmtlci5zaXplbWluIiksbCgibWFya2VyLnNpemVtb2RlIikpLGMuZ3JhZGllbnQpJiYoIm5vbmUiIT09bCgibWFya2VyLmdyYWRpZW50LnR5cGUiKSYmbCgibWFya2VyLmdyYWRpZW50LmNvbG9yIikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NTg4LCIuL3N1YnR5cGVzIjoxMDc1fV0sMTA3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5lbnN1cmVTaW5nbGUscz1hLmlkZW50aXR5LGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuL3N1YnR5cGVzIiksdT10KCIuL2xpbmVfcG9pbnRzIiksZj10KCIuL2xpbmtfdHJhY2VzIiksaD10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcjtmdW5jdGlvbiBwKHQsZSxyLGYscCxkLGcpe3ZhciB2OyFmdW5jdGlvbih0LGUscixpLG8pe3ZhciBzPXIueGF4aXMsbD1yLnlheGlzLHU9bi5leHRlbnQoYS5zaW1wbGVNYXAocy5yYW5nZSxzLnIyYykpLGY9bi5leHRlbnQoYS5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGg9aVswXS50cmFjZTtpZighYy5oYXNNYXJrZXJzKGgpKXJldHVybjt2YXIgcD1oLm1hcmtlci5tYXhkaXNwbGF5ZWQ7aWYoMD09PXApcmV0dXJuO3ZhciBkPWkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng+PXVbMF0mJnQueDw9dVsxXSYmdC55Pj1mWzBdJiZ0Lnk8PWZbMV19KSxnPU1hdGguY2VpbChkLmxlbmd0aC9wKSx2PTA7by5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dmFyIG49dFswXS50cmFjZTtjLmhhc01hcmtlcnMobikmJm4ubWFya2VyLm1heGRpc3BsYXllZD4wJiZyPGUmJnYrK30pO3ZhciBtPU1hdGgucm91bmQodipnLzMrTWF0aC5mbG9vcih2LzMpKmcvNy4xKTtpLmZvckVhY2goZnVuY3Rpb24odCl7ZGVsZXRlIHQudmlzfSksZC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7MD09PU1hdGgucm91bmQoKGUrbSklZykmJih0LnZpcz0hMCl9KX0oMCxlLHIsZixwKTt2YXIgbT0hIWcmJmcuZHVyYXRpb24+MDtmdW5jdGlvbiB5KHQpe3JldHVybiBtP3QudHJhbnNpdGlvbigpOnR9dmFyIHg9ci54YXhpcyxiPXIueWF4aXMsXz1mWzBdLnRyYWNlLHc9Xy5saW5lLGs9bi5zZWxlY3QoZCksVD1vKGssImciLCJlcnJvcmJhcnMiKSxBPW8oaywiZyIsImxpbmVzIiksTT1vKGssImciLCJwb2ludHMiKSxTPW8oaywiZyIsInRleHQiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwicGxvdCIpKHQsVCxyLGcpLCEwPT09Xy52aXNpYmxlKXt2YXIgRSxDO3koaykuc3R5bGUoIm9wYWNpdHkiLF8ub3BhY2l0eSk7dmFyIEw9Xy5maWxsLmNoYXJBdChfLmZpbGwubGVuZ3RoLTEpOyJ4IiE9PUwmJiJ5IiE9PUwmJihMPSIiKSxyLmlzUmFuZ2VQbG90fHwoZlswXS5ub2RlMz1rKTt2YXIgeixPLEk9IiIsRD1bXSxQPV8uX3ByZXZ0cmFjZTtQJiYoST1QLl9wcmV2UmV2cGF0aHx8IiIsQz1QLl9uZXh0RmlsbCxEPVAuX3BvbHlnb25zKTt2YXIgUixGLEIsTixqLFYsVSxxPSIiLEg9IiIsRz1bXSxZPWEubm9vcDtpZihFPV8uX293bkZpbGwsYy5oYXNMaW5lcyhfKXx8Im5vbmUiIT09Xy5maWxsKXtmb3IoQyYmQy5kYXR1bShmKSwtMSE9PVsiaHYiLCJ2aCIsImh2aCIsInZodiJdLmluZGV4T2Yody5zaGFwZSk/KFI9bC5zdGVwcyh3LnNoYXBlKSxGPWwuc3RlcHMody5zaGFwZS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpKSk6Uj1GPSJzcGxpbmUiPT09dy5zaGFwZT9mdW5jdGlvbih0KXt2YXIgZT10W3QubGVuZ3RoLTFdO3JldHVybiB0Lmxlbmd0aD4xJiZ0WzBdWzBdPT09ZVswXSYmdFswXVsxXT09PWVbMV0/bC5zbW9vdGhjbG9zZWQodC5zbGljZSgxKSx3LnNtb290aGluZyk6bC5zbW9vdGhvcGVuKHQsdy5zbW9vdGhpbmcpfTpmdW5jdGlvbih0KXtyZXR1cm4iTSIrdC5qb2luKCJMIil9LEI9ZnVuY3Rpb24odCl7cmV0dXJuIEYodC5yZXZlcnNlKCkpfSxHPXUoZix7eGF4aXM6eCx5YXhpczpiLGNvbm5lY3RHYXBzOl8uY29ubmVjdGdhcHMsYmFzZVRvbGVyYW5jZTpNYXRoLm1heCh3LndpZHRofHwxLDMpLzQsc2hhcGU6dy5zaGFwZSxzaW1wbGlmeTp3LnNpbXBsaWZ5LGZpbGw6Xy5maWxsfSksVT1fLl9wb2x5Z29ucz1uZXcgQXJyYXkoRy5sZW5ndGgpLHY9MDt2PEcubGVuZ3RoO3YrKylfLl9wb2x5Z29uc1t2XT1oKEdbdl0pO0cubGVuZ3RoJiYoTj1HWzBdWzBdLFY9KGo9R1tHLmxlbmd0aC0xXSlbai5sZW5ndGgtMV0pLFk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHo9UihlKSxPPUIoZSkscT9MPyhxKz0iTCIrei5zdWJzdHIoMSksSD1PKyJMIitILnN1YnN0cigxKSk6KHErPSJaIit6LEg9TysiWiIrSCk6KHE9eixIPU8pLGMuaGFzTGluZXMoXykmJmUubGVuZ3RoPjEpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuZGF0dW0oZiksdCl5KHIuc3R5bGUoIm9wYWNpdHkiLDApLmF0dHIoImQiLHopLmNhbGwobC5saW5lR3JvdXBTdHlsZSkpLnN0eWxlKCJvcGFjaXR5IiwxKTtlbHNle3ZhciBpPXkocik7aS5hdHRyKCJkIix6KSxsLnNpbmdsZUxpbmVTdHlsZShmLGkpfX19fX12YXIgVz1BLnNlbGVjdEFsbCgiLmpzLWxpbmUiKS5kYXRhKEcpO3koVy5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxXLmVhY2goWSghMSkpLFcuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jYWxsKGwubGluZUdyb3VwU3R5bGUpLmVhY2goWSghMCkpLGwuc2V0Q2xpcFVybChXLHIubGF5ZXJDbGlwSWQsdCksRy5sZW5ndGg/KEU/KEUuZGF0dW0oZiksTiYmViYmKEw/KCJ5Ij09PUw/TlsxXT1WWzFdPWIuYzJwKDAsITApOiJ4Ij09PUwmJihOWzBdPVZbMF09eC5jMnAoMCwhMCkpLHkoRSkuYXR0cigiZCIsIk0iK1YrIkwiK04rIkwiK3Euc3Vic3RyKDEpKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSk6eShFKS5hdHRyKCJkIixxKyJaIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpKTpDJiYoInRvbmV4dCI9PT1fLmZpbGwuc3Vic3RyKDAsNikmJnEmJkk/KCJ0b25leHQiPT09Xy5maWxsP3koQykuYXR0cigiZCIscSsiWiIrSSsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpOnkoQykuYXR0cigiZCIscSsiTCIrSS5zdWJzdHIoMSkrIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSxfLl9wb2x5Z29ucz1fLl9wb2x5Z29ucy5jb25jYXQoRCkpOihaKEMpLF8uX3BvbHlnb25zPW51bGwpKSxfLl9wcmV2UmV2cGF0aD1ILF8uX3ByZXZQb2x5Z29ucz1VKTooRT9aKEUpOkMmJlooQyksXy5fcG9seWdvbnM9Xy5fcHJldlJldnBhdGg9Xy5fcHJldlBvbHlnb25zPW51bGwpLE0uZGF0dW0oZiksUy5kYXR1bShmKSxmdW5jdGlvbihlLGksYSl7dmFyIG8sdT1hWzBdLnRyYWNlLGY9Yy5oYXNNYXJrZXJzKHUpLGg9Yy5oYXNUZXh0KHUpLHA9dHQodSksZD1ldCxnPWV0O2lmKGZ8fGgpe3ZhciB2PXMsXz11LnN0YWNrZ3JvdXAsdz1fJiYiaW5mZXIgemVybyI9PT10Ll9mdWxsTGF5b3V0Ll9zY2F0dGVyU3RhY2tPcHRzW3guX2lkK2IuX2lkXVtfXS5zdGFja2dhcHM7dS5tYXJrZXIubWF4ZGlzcGxheWVkfHx1Ll9uZWVkc0N1bGw/dj13P0o6JDpfJiYhdyYmKHY9SyksZiYmKGQ9diksaCYmKGc9dil9dmFyIGssVD0obz1lLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmRhdGEoZCxwKSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApO20mJlQuY2FsbChsLnBvaW50U3R5bGUsdSx0KS5jYWxsKGwudHJhbnNsYXRlUG9pbnRzLHgsYikuc3R5bGUoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSksby5vcmRlcigpLGYmJihrPWwubWFrZVBvaW50U3R5bGVGbnModSkpLG8uZWFjaChmdW5jdGlvbihlKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXkoaSk7bC50cmFuc2xhdGVQb2ludChlLGEseCxiKT8obC5zaW5nbGVQb2ludFN0eWxlKGUsYSx1LGssdCksci5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQoZSxhLHgsYix1LnhjYWxlbmRhcix1LnljYWxlbmRhciksdS5jdXN0b21kYXRhJiZpLmNsYXNzZWQoInBsb3RseS1jdXN0b21kYXRhIixudWxsIT09ZS5kYXRhJiZ2b2lkIDAhPT1lLmRhdGEpKTphLnJlbW92ZSgpfSksbT9vLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpOm8uZXhpdCgpLnJlbW92ZSgpLChvPWkuc2VsZWN0QWxsKCJnIikuZGF0YShnLHApKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHRwb2ludCIsITApLmFwcGVuZCgidGV4dCIpLG8ub3JkZXIoKSxvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcyksaT15KGUuc2VsZWN0KCJ0ZXh0IikpO2wudHJhbnNsYXRlUG9pbnQodCxpLHgsYik/ci5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxlLHgsYix1LnhjYWxlbmRhcix1LnljYWxlbmRhcik6ZS5yZW1vdmUoKX0pLG8uc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChsLnRleHRQb2ludFN0eWxlLHUsdCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT14LmMycCh0LngpLHI9Yi5jMnAodC55KTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKGZ1bmN0aW9uKCl7eShuLnNlbGVjdCh0aGlzKSkuYXR0cih7eDplLHk6cn0pfSl9KSxvLmV4aXQoKS5yZW1vdmUoKX0oTSxTLGYpO3ZhciBYPSExPT09Xy5jbGlwb25heGlzP251bGw6ci5sYXllckNsaXBJZDtsLnNldENsaXBVcmwoTSxYLHQpLGwuc2V0Q2xpcFVybChTLFgsdCl9ZnVuY3Rpb24gWih0KXt5KHQpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uICQodCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmdhcCYmdC52aXN9KX1mdW5jdGlvbiBKKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52aXN9KX1mdW5jdGlvbiBLKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5nYXB9KX1mdW5jdGlvbiBRKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHR0KHQpe2lmKHQuaWRzKXJldHVybiBRfWZ1bmN0aW9uIGV0KCl7cmV0dXJuITF9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsYyl7dmFyIHUsaCxkPSFhLGc9ISFhJiZhLmR1cmF0aW9uPjAsdj1mKHQsZSxyKTsoKHU9aS5zZWxlY3RBbGwoImcudHJhY2UiKS5kYXRhKHYsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFjZSBzY2F0dGVyIHRyYWNlIit0WzBdLnRyYWNlLnVpZH0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMiksdS5vcmRlcigpLGZ1bmN0aW9uKHQsZSxyKXtlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9byhuLnNlbGVjdCh0aGlzKSwiZyIsImZpbGxzIik7bC5zZXRDbGlwVXJsKGksci5sYXllckNsaXBJZCx0KTt2YXIgYT1lWzBdLnRyYWNlLGM9W107YS5fb3duZmlsbCYmYy5wdXNoKCJfb3duRmlsbCIpLGEuX25leHR0cmFjZSYmYy5wdXNoKCJfbmV4dEZpbGwiKTt2YXIgdT1pLnNlbGVjdEFsbCgiZyIpLmRhdGEoYyxzKTt1LmVudGVyKCkuYXBwZW5kKCJnIiksdS5leGl0KCkuZWFjaChmdW5jdGlvbih0KXthW3RdPW51bGx9KS5yZW1vdmUoKSx1Lm9yZGVyKCkuZWFjaChmdW5jdGlvbih0KXthW3RdPW8obi5zZWxlY3QodGhpcyksInBhdGgiLCJqcy1maWxsIil9KX0pfSh0LHUsZSksZyk/KGMmJihoPWMoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS5kdXJhdGlvbikuZWFzZShhLmVhc2luZykuZWFjaCgiZW5kIixmdW5jdGlvbigpe2gmJmgoKX0pLmVhY2goImludGVycnVwdCIsZnVuY3Rpb24oKXtoJiZoKCl9KS5lYWNoKGZ1bmN0aW9uKCl7aS5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKGZ1bmN0aW9uKHIsbil7cCh0LG4sZSxyLHYsdGhpcyxhKX0pfSkpOnUuZWFjaChmdW5jdGlvbihyLG4pe3AodCxuLGUscix2LHRoaXMsYSl9KTtkJiZ1LmV4aXQoKS5yZW1vdmUoKSxpLnNlbGVjdEFsbCgicGF0aDpub3QoW2RdKSIpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9wb2x5Z29uIjo3MTIsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4vbGluZV9wb2ludHMiOjEwNjUsIi4vbGlua190cmFjZXMiOjEwNjcsIi4vc3VidHlwZXMiOjEwNzUsZDM6MTU0fV0sMTA3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scz10LmNkLGw9dC54YXhpcyxjPXQueWF4aXMsdT1bXSxmPXNbMF0udHJhY2U7aWYoIW4uaGFzTWFya2VycyhmKSYmIW4uaGFzVGV4dChmKSlyZXR1cm5bXTtpZighMT09PWUpZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylzW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWk9c1tyXSxhPWwuYzJwKGkueCksbz1jLmMycChpLnkpLG51bGwhPT1pLmkmJmUuY29udGFpbnMoW2Esb10sITEscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjppLmkseDpsLmMyZChpLngpLHk6Yy5jMmQoaS55KX0pLGkuc2VsZWN0ZWQ9MSk6aS5zZWxlY3RlZD0wO3JldHVybiB1fX0seyIuL3N1YnR5cGVzIjoxMDc1fV0sMTA3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1bIm9yaWVudGF0aW9uIiwiZ3JvdXBub3JtIiwic3RhY2tnYXBzIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXIuX3NjYXR0ZXJTdGFja09wdHMsbz1pKCJzdGFja2dyb3VwIik7aWYobyl7dmFyIHM9ZS54YXhpcytlLnlheGlzLGw9YVtzXTtsfHwobD1hW3NdPXt9KTt2YXIgYz1sW29dLHU9ITE7Yz9jLnRyYWNlcy5wdXNoKGUpOihjPWxbb109e3RyYWNlSW5kaWNlczpbXSx0cmFjZXM6W2VdfSx1PSEwKTtmb3IodmFyIGY9e29yaWVudGF0aW9uOmUueCYmIWUueT8iaCI6InYifSxoPTA7aDxuLmxlbmd0aDtoKyspe3ZhciBwPW5baF0sZD1wKyJGb3VuZCI7aWYoIWNbZF0pe3ZhciBnPXZvaWQgMCE9PXRbcF0sdj0ib3JpZW50YXRpb24iPT09cDtpZigoZ3x8dSkmJihjW3BdPWkocCxmW3BdKSx2JiYoYy5maWxsRGZsdD0iaCI9PT1jW3BdPyJ0b25leHR4IjoidG9uZXh0eSIpLGcmJihjW2RdPSEwLCF1JiYoZGVsZXRlIGMudHJhY2VzWzBdW3BdLHYpKSkpZm9yKHZhciBtPTA7bTxjLnRyYWNlcy5sZW5ndGgtMTttKyspe3ZhciB5PWMudHJhY2VzW21dO3kuX2lucHV0LmZpbGwhPT15LmZpbGwmJih5LmZpbGw9Yy5maWxsRGZsdCl9fX1yZXR1cm4gY319fSx7fV0sMTA3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8odCxlLHIpe2kucG9pbnRTdHlsZSh0LnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLGUscil9ZnVuY3Rpb24gcyh0LGUscil7aS50ZXh0UG9pbnRTdHlsZSh0LnNlbGVjdEFsbCgidGV4dCIpLGUscil9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2Uuc2NhdHRlciIpO3Iuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe28obi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pLHIuc2VsZWN0QWxsKCJnLnRleHQiKS5lYWNoKGZ1bmN0aW9uKGUpe3Mobi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pLHIuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtbGluZSIpLmNhbGwoaS5saW5lR3JvdXBTdHlsZSksci5zZWxlY3RBbGwoImcudHJhY2UgcGF0aC5qcy1maWxsIikuY2FsbChpLmZpbGxHcm91cFN0eWxlKSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3R5bGUiKShyKX0sc3R5bGVQb2ludHM6byxzdHlsZVRleHQ6cyxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz8oaS5zZWxlY3RlZFBvaW50U3R5bGUoci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxuKSxpLnNlbGVjdGVkVGV4dFN0eWxlKHIuc2VsZWN0QWxsKCJ0ZXh0IiksbikpOihvKHIsbix0KSxzKHIsbix0KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vcmVnaXN0cnkiOjgyOSxkMzoxNTR9XSwxMDc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJsaW5lcyIpfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJih0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKXx8InNwbG9tIj09PXQudHlwZSl9LGhhc1RleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJ0ZXh0Iil9LGlzQnViYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5tYXJrZXIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkodC5tYXJrZXIuc2l6ZSl9fX0seyIuLi8uLi9saWIiOjcwMH1dLDEwNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7YT1hfHx7fSxpKCJ0ZXh0cG9zaXRpb24iKSxuLmNvZXJjZUZvbnQoaSwidGV4dGZvbnQiLHIuZm9udCksYS5ub1NlbGVjdHx8KGkoInNlbGVjdGVkLnRleHRmb250LmNvbG9yIiksaSgidW5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpKX19LHsiLi4vLi4vbGliIjo3MDB9XSwxMDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scz1hKCJ4IiksbD1hKCJ5Iik7aWYoaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLHIpLHMpe3ZhciBjPW4ubWluUm93TGVuZ3RoKHMpO2w/bz1NYXRoLm1pbihjLG4ubWluUm93TGVuZ3RoKGwpKToobz1jLGEoInkwIiksYSgiZHkiKSl9ZWxzZXtpZighbClyZXR1cm4gMDtvPW4ubWluUm93TGVuZ3RoKGwpLGEoIngwIiksYSgiZHgiKX1yZXR1cm4gZS5fbGVuZ3RoPW8sb319LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4Mjl9XSwxMDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGY9bi5saW5lLGg9bi5tYXJrZXIscD1oLmxpbmUsZD1jKHt3aWR0aDpmLndpZHRoLGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhzKSxkZmx0OiJzb2xpZCJ9fSxpKCJsaW5lIikpO3ZhciBnPWUuZXhwb3J0cz11KHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDpjKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OmMoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6YSgpLG1vZGU6Yyh7fSxuLm1vZGUse2RmbHQ6ImxpbmVzK21hcmtlcnMifSksc3VyZmFjZWF4aXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbLTEsMCwxLDJdLGRmbHQ6LTF9LHN1cmZhY2Vjb2xvcjp7dmFsVHlwZToiY29sb3IifSxwcm9qZWN0aW9uOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0seTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjIvM319LHo6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fX0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxsaW5lOmQsbWFya2VyOmMoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGwpLGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMH0sc2l6ZTpjKHt9LGguc2l6ZSx7ZGZsdDo4fSksc2l6ZXJlZjpoLnNpemVyZWYsc2l6ZW1pbjpoLnNpemVtaW4sc2l6ZW1vZGU6aC5zaXplbW9kZSxvcGFjaXR5OmMoe30saC5vcGFjaXR5LHthcnJheU9rOiExfSksY29sb3JiYXI6aC5jb2xvcmJhcixsaW5lOmMoe3dpZHRoOmMoe30scC53aWR0aCx7YXJyYXlPazohMX0pfSxpKCJtYXJrZXIubGluZSIpKX0saSgibWFya2VyIikpLHRleHRwb3NpdGlvbjpjKHt9LG4udGV4dHBvc2l0aW9uLHtkZmx0OiJ0b3AgY2VudGVyIn0pLHRleHRmb250Ontjb2xvcjpuLnRleHRmb250LmNvbG9yLHNpemU6bi50ZXh0Zm9udC5zaXplLGZhbWlseTpjKHt9LG4udGV4dGZvbnQuZmFtaWx5LHthcnJheU9rOiExfSl9LGhvdmVyaW5mbzpjKHt9LG8uaG92ZXJpbmZvKX0sImNhbGMiLCJuZXN0ZWQiKTtnLnguZWRpdFR5cGU9Zy55LmVkaXRUeXBlPWcuei5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyJ9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIjo2NzQsIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjY3NSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MzEsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sMTA3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLGk9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1be3g6ITEseTohMSx0cmFjZTplLHQ6e319XTtyZXR1cm4gbihyLGUpLGkodCxlKSxyfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTA1MCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwNTR9XSwxMDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gaSh0LGUscixpKXtpZighZXx8IWUudmlzaWJsZSlyZXR1cm4gbnVsbDtmb3IodmFyIGE9bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsIm1ha2VDb21wdXRlRXJyb3IiKShlKSxvPW5ldyBBcnJheSh0Lmxlbmd0aCkscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1hKCt0W3NdLHMpO2lmKCJsb2ciPT09aS50eXBlKXt2YXIgYz1pLmMybCh0W3NdKSx1PXRbc10tbFswXSxmPXRbc10rbFsxXTtpZihvW3NdPVsoaS5jMmwodSwhMCktYykqciwoaS5jMmwoZiwhMCktYykqcl0sdT4wKXt2YXIgaD1pLmMybCh1KTtpLl9sb3dlckxvZ0Vycm9yQm91bmR8fChpLl9sb3dlckxvZ0Vycm9yQm91bmQ9aCksaS5fbG93ZXJFcnJvckJvdW5kPU1hdGgubWluKGkuX2xvd2VyTG9nRXJyb3JCb3VuZCxoKX19ZWxzZSBvW3NdPVstbFswXSpyLGxbMV0qcl19cmV0dXJuIG99ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1baSh0LngsdC5lcnJvcl94LGVbMF0sci54YXhpcyksaSh0LnksdC5lcnJvcl95LGVbMV0sci55YXhpcyksaSh0LnosdC5lcnJvcl96LGVbMl0sci56YXhpcyldLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXSlyZXR1cm4gdFtlXS5sZW5ndGg7cmV0dXJuIDB9KG4pO2lmKDA9PT1hKXJldHVybiBudWxsO2Zvcih2YXIgbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspe2Zvcih2YXIgbD1bWzAsMCwwXSxbMCwwLDBdXSxjPTA7YzwzO2MrKylpZihuW2NdKWZvcih2YXIgdT0wO3U8Mjt1KyspbFt1XVtjXT1uW2NdW3NdW3VdO29bc109bH1yZXR1cm4gb319LHsiLi4vLi4vcmVnaXN0cnkiOjgyOX1dLDEwODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbGluZTNkIiksaT10KCJnbC1zY2F0dGVyM2QiKSxhPXQoImdsLWVycm9yM2QiKSxvPXQoImdsLW1lc2gzZCIpLHM9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLHU9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLmZvcm1hdENvbG9yLGY9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLGQ9dCgiLi9jYWxjX2Vycm9ycyIpO2Z1bmN0aW9uIGcodCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLmxpbmVQbG90PW51bGwsdGhpcy5zY2F0dGVyUGxvdD1udWxsLHRoaXMuZXJyb3JCYXJzPW51bGwsdGhpcy50ZXh0TWFya2Vycz1udWxsLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwsdGhpcy5jb2xvcj1udWxsLHRoaXMubW9kZT0iIix0aGlzLmRhdGFQb2ludHM9W10sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMudGV4dExhYmVscz1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB2PWcucHJvdG90eXBlO2Z1bmN0aW9uIG0odCl7cmV0dXJuIG51bGw9PXQ/MDp0LmluZGV4T2YoImxlZnQiKT4tMT8tMTp0LmluZGV4T2YoInJpZ2h0Iik+LTE/MTowfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG51bGw9PXQ/MDp0LmluZGV4T2YoInRvcCIpPi0xPy0xOnQuaW5kZXhPZigiYm90dG9tIik+LTE/MTowfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gZSg0KnQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHBbdF19ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPW51bGw7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXthPVtdO2Zvcih2YXIgbz0wO288ZTtvKyspdm9pZCAwPT09dFtvXT9hW29dPW46YVtvXT1yKHRbb10saSl9ZWxzZSBhPXIodCxsLmlkZW50aXR5KTtyZXR1cm4gYX1mdW5jdGlvbiB3KHQsZSl7dmFyIHIsbixpLGEsbyxzLGg9W10scD10LmZ1bGxTY2VuZUxheW91dCxnPXQuZGF0YVNjYWxlLHY9cC54YXhpcyx3PXAueWF4aXMsaz1wLnpheGlzLFQ9ZS5tYXJrZXIsQT1lLmxpbmUsTT1lLnh8fFtdLFM9ZS55fHxbXSxFPWUuenx8W10sQz1NLmxlbmd0aCxMPWUueGNhbGVuZGFyLHo9ZS55Y2FsZW5kYXIsTz1lLnpjYWxlbmRhcjtmb3Iobz0wO288QztvKyspcj12LmQybChNW29dLDAsTCkqZ1swXSxuPXcuZDJsKFNbb10sMCx6KSpnWzFdLGk9ay5kMmwoRVtvXSwwLE8pKmdbMl0saFtvXT1bcixuLGldO2lmKEFycmF5LmlzQXJyYXkoZS50ZXh0KSlzPWUudGV4dDtlbHNlIGlmKHZvaWQgMCE9PWUudGV4dClmb3Iocz1uZXcgQXJyYXkoQyksbz0wO288QztvKyspc1tvXT1lLnRleHQ7aWYoYT17cG9zaXRpb246aCxtb2RlOmUubW9kZSx0ZXh0OnN9LCJsaW5lImluIGUmJihhLmxpbmVDb2xvcj11KEEsMSxDKSxhLmxpbmVXaWR0aD1BLndpZHRoLGEubGluZURhc2hlcz1BLmRhc2gpLCJtYXJrZXIiaW4gZSl7dmFyIEk9ZihlKTthLnNjYXR0ZXJDb2xvcj11KFQsMSxDKSxhLnNjYXR0ZXJTaXplPV8oVC5zaXplLEMseCwyMCxJKSxhLnNjYXR0ZXJNYXJrZXI9XyhULnN5bWJvbCxDLGIsIlx1MjVjZiIpLGEuc2NhdHRlckxpbmVXaWR0aD1ULmxpbmUud2lkdGgsYS5zY2F0dGVyTGluZUNvbG9yPXUoVC5saW5lLDEsQyksYS5zY2F0dGVyQW5nbGU9MH0idGV4dHBvc2l0aW9uImluIGUmJihhLnRleHRPZmZzZXQ9ZnVuY3Rpb24odCl7dmFyIGU9WzAsMF07aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPVswLDBdLHRbcl0mJihlW3JdWzBdPW0odFtyXSksZVtyXVsxXT15KHRbcl0pKTtlbHNlIGVbMF09bSh0KSxlWzFdPXkodCk7cmV0dXJuIGV9KGUudGV4dHBvc2l0aW9uKSxhLnRleHRDb2xvcj11KGUudGV4dGZvbnQsMSxDKSxhLnRleHRTaXplPV8oZS50ZXh0Zm9udC5zaXplLEMsbC5pZGVudGl0eSwxMiksYS50ZXh0Rm9udD1lLnRleHRmb250LmZhbWlseSxhLnRleHRBbmdsZT0wKTt2YXIgRD1bIngiLCJ5IiwieiJdO2ZvcihhLnByb2plY3Q9WyExLCExLCExXSxhLnByb2plY3RTY2FsZT1bMSwxLDFdLGEucHJvamVjdE9wYWNpdHk9WzEsMSwxXSxvPTA7bzwzOysrbyl7dmFyIFA9ZS5wcm9qZWN0aW9uW0Rbb11dOyhhLnByb2plY3Rbb109UC5zaG93KSYmKGEucHJvamVjdE9wYWNpdHlbb109UC5vcGFjaXR5LGEucHJvamVjdFNjYWxlW29dPVAuc2NhbGUpfWEuZXJyb3JCb3VuZHM9ZChlLGcscCk7dmFyIFI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVswLDAsMF0scj1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLG49WzEsMSwxXSxpPTA7aTwzO2krKyl7dmFyIGE9dFtpXTthJiYhMSE9PWEuY29weV96c3R5bGUmJiExIT09dFsyXS52aXNpYmxlJiYoYT10WzJdKSxhJiZhLnZpc2libGUmJihlW2ldPWEud2lkdGgvMixyW2ldPWMoYS5jb2xvciksbltpXT1hLnRoaWNrbmVzcyl9cmV0dXJue2NhcFNpemU6ZSxjb2xvcjpyLGxpbmVXaWR0aDpufX0oW2UuZXJyb3JfeCxlLmVycm9yX3ksZS5lcnJvcl96XSk7cmV0dXJuIGEuZXJyb3JDb2xvcj1SLmNvbG9yLGEuZXJyb3JMaW5lV2lkdGg9Ui5saW5lV2lkdGgsYS5lcnJvckNhcFNpemU9Ui5jYXBTaXplLGEuZGVsYXVuYXlBeGlzPWUuc3VyZmFjZWF4aXMsYS5kZWxhdW5heUNvbG9yPWMoZS5zdXJmYWNlY29sb3IpLGF9ZnVuY3Rpb24gayh0KXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgZT10WzBdO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYodD1lKSwicmdiKCIrdC5zbGljZSgwLDMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqdCl9KSsiKSJ9cmV0dXJuIG51bGx9di5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0JiYodC5vYmplY3Q9PT10aGlzLmxpbmVQbG90fHx0Lm9iamVjdD09PXRoaXMuZGVsYXVuYXlNZXNofHx0Lm9iamVjdD09PXRoaXMudGV4dE1hcmtlcnN8fHQub2JqZWN0PT09dGhpcy5zY2F0dGVyUGxvdCkpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0Lm9iamVjdC5oaWdobGlnaHQmJnQub2JqZWN0LmhpZ2hsaWdodChudWxsKSx0aGlzLnNjYXR0ZXJQbG90JiYodC5vYmplY3Q9dGhpcy5zY2F0dGVyUGxvdCx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodCh0LmRhdGEpKSx0LnRleHRMYWJlbD0iIix0aGlzLnRleHRMYWJlbHMmJihBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/KHRoaXMudGV4dExhYmVsc1tlXXx8MD09PXRoaXMudGV4dExhYmVsc1tlXSkmJih0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHNbZV0pOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVscyksdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LHYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHU9dGhpcy5zY2VuZS5nbHBsb3QuZ2wsZj1oLnNvbGlkO3RoaXMuZGF0YT10O3ZhciBwPXcodGhpcy5zY2VuZSx0KTsibW9kZSJpbiBwJiYodGhpcy5tb2RlPXAubW9kZSksImxpbmVEYXNoZXMiaW4gcCYmcC5saW5lRGFzaGVzIGluIGgmJihmPWhbcC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1rKHAuc2NhdHRlckNvbG9yKXx8ayhwLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPXAucG9zaXRpb24sZT17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLmxpbmVDb2xvcixsaW5lV2lkdGg6cC5saW5lV2lkdGh8fDEsZGFzaGVzOmZbMF0sZGFzaFNjYWxlOmZbMV0sb3BhY2l0eTp0Lm9wYWNpdHksY29ubmVjdEdhcHM6dC5jb25uZWN0Z2Fwc30sLTEhPT10aGlzLm1vZGUuaW5kZXhPZigibGluZXMiKT90aGlzLmxpbmVQbG90P3RoaXMubGluZVBsb3QudXBkYXRlKGUpOih0aGlzLmxpbmVQbG90PW4oZSksdGhpcy5saW5lUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5saW5lUGxvdCkpOnRoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCksdGhpcy5saW5lUGxvdD1udWxsKTt2YXIgZD10Lm9wYWNpdHk7aWYodC5tYXJrZXImJnQubWFya2VyLm9wYWNpdHkmJihkKj10Lm1hcmtlci5vcGFjaXR5KSxyPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuc2NhdHRlckNvbG9yLHNpemU6cC5zY2F0dGVyU2l6ZSxnbHlwaDpwLnNjYXR0ZXJNYXJrZXIsb3BhY2l0eTpkLG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6cC5zY2F0dGVyTGluZVdpZHRoLGxpbmVDb2xvcjpwLnNjYXR0ZXJMaW5lQ29sb3IscHJvamVjdDpwLnByb2plY3QscHJvamVjdFNjYWxlOnAucHJvamVjdFNjYWxlLHByb2plY3RPcGFjaXR5OnAucHJvamVjdE9wYWNpdHl9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKT90aGlzLnNjYXR0ZXJQbG90P3RoaXMuc2NhdHRlclBsb3QudXBkYXRlKHIpOih0aGlzLnNjYXR0ZXJQbG90PWkociksdGhpcy5zY2F0dGVyUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodFNjYWxlPTEsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuc2NhdHRlclBsb3QpKTp0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCksYz17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixnbHlwaDpwLnRleHQsY29sb3I6cC50ZXh0Q29sb3Isc2l6ZTpwLnRleHRTaXplLGFuZ2xlOnAudGV4dEFuZ2xlLGFsaWdubWVudDpwLnRleHRPZmZzZXQsZm9udDpwLnRleHRGb250LG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6MCxwcm9qZWN0OiExLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLnRleHRMYWJlbHM9dC5ob3ZlcnRleHR8fHQudGV4dCwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJ0ZXh0Iik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShjKToodGhpcy50ZXh0TWFya2Vycz1pKGMpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLGw9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5lcnJvckNvbG9yLGVycm9yOnAuZXJyb3JCb3VuZHMsbGluZVdpZHRoOnAuZXJyb3JMaW5lV2lkdGgsY2FwU2l6ZTpwLmVycm9yQ2FwU2l6ZSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy5lcnJvckJhcnM/cC5lcnJvckJvdW5kcz90aGlzLmVycm9yQmFycy51cGRhdGUobCk6KHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpLHRoaXMuZXJyb3JCYXJzPW51bGwpOnAuZXJyb3JCb3VuZHMmJih0aGlzLmVycm9yQmFycz1hKGwpLHRoaXMuZXJyb3JCYXJzLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmVycm9yQmFycykpLHAuZGVsYXVuYXlBeGlzPj0wKXt2YXIgZz1mdW5jdGlvbih0LGUscil7dmFyIG4saT0ocisxKSUzLGE9KHIrMiklMyxvPVtdLGw9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGM9dFtuXTshaXNOYU4oY1tpXSkmJmlzRmluaXRlKGNbaV0pJiYhaXNOYU4oY1thXSkmJmlzRmluaXRlKGNbYV0pJiYoby5wdXNoKFtjW2ldLGNbYV1dKSxsLnB1c2gobikpfXZhciB1PXMobyk7Zm9yKG49MDtuPHUubGVuZ3RoOysrbilmb3IodmFyIGY9dVtuXSxoPTA7aDxmLmxlbmd0aDsrK2gpZltoXT1sW2ZbaF1dO3JldHVybntwb3NpdGlvbnM6dCxjZWxsczp1LG1lc2hDb2xvcjplfX0ocC5wb3NpdGlvbixwLmRlbGF1bmF5Q29sb3IscC5kZWxhdW5heUF4aXMpO2cub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKGcpOihnLmdsPXUsdGhpcy5kZWxhdW5heU1lc2g9byhnKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LHYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgZyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIjo2NzQsIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjY3NSwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjY5NywiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzIzLCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTA2OCwiLi9jYWxjX2Vycm9ycyI6MTA4MCwiZGVsYXVuYXktdHJpYW5ndWxhdGUiOjE1NiwiZ2wtZXJyb3IzZCI6MjQzLCJnbC1saW5lM2QiOjI1MSwiZ2wtbWVzaDNkIjoyNzYsImdsLXNjYXR0ZXIzZCI6MjkzfV0sMTA4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBmKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxjLHIsbil9aWYoZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9MCxvPXIoIngiKSxzPXIoInkiKSxsPXIoInoiKTtuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLGkpLG8mJnMmJmwmJihhPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoLGwubGVuZ3RoKSxlLl9sZW5ndGg9ZS5feGxlbmd0aD1lLl95bGVuZ3RoPWUuX3psZW5ndGg9YSk7cmV0dXJuIGF9KHQsZSxmLHUpKXtmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLGYoIm1vZGUiKSxhLmhhc0xpbmVzKGUpJiYoZigiY29ubmVjdGdhcHMiKSxzKHQsZSxyLHUsZikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscix1LGYse25vU2VsZWN0OiEwfSksYS5oYXNUZXh0KGUpJiZsKHQsZSx1LGYse25vU2VsZWN0OiEwfSk7dmFyIGg9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7Zigic3VyZmFjZWF4aXMiKT49MCYmZigic3VyZmFjZWNvbG9yIixofHxwKTtmb3IodmFyIGQ9WyJ4IiwieSIsInoiXSxnPTA7ZzwzOysrZyl7dmFyIHY9InByb2plY3Rpb24uIitkW2ddO2YodisiLnNob3ciKSYmKGYodisiLm9wYWNpdHkiKSxmKHYrIi5zY2FsZSIpKX12YXIgbT1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTttKHQsZSxofHxwfHxyLHtheGlzOiJ6In0pLG0odCxlLGh8fHB8fHIse2F4aXM6InkiLGluaGVyaXQ6InoifSksbSh0LGUsaHx8cHx8cix7YXhpczoieCIsaW5oZXJpdDoieiJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTA2NCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNzAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA3NiwiLi9hdHRyaWJ1dGVzIjoxMDc4fV0sMTA4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4ubWFya2VyU3ltYm9scz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj1be2NvbnRhaW5lcjoibWFya2VyIixtaW46ImNtaW4iLG1heDoiY21heCJ9LHtjb250YWluZXI6ImxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In1dLG4uY2FsYz10KCIuL2NhbGMiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXIzZCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDNkIiksbi5jYXRlZ29yaWVzPVsiZ2wzZCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjY3NSwiLi4vLi4vcGxvdHMvZ2wzZCI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjEwNzgsIi4vY2FsYyI6MTA3OSwiLi9jb252ZXJ0IjoxMDgxLCIuL2RlZmF1bHRzIjoxMDgyfV0sMTA4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW4ubWFya2VyLHU9bi5saW5lLGY9Yy5saW5lO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1vZGU6bCh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30sbi5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aCxkYXNoOnUuZGFzaCxzaGFwZTpsKHt9LHUuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOnUuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsOmwoe30sbi5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6bi5maWxsY29sb3IsbWFya2VyOmwoe3N5bWJvbDpjLnN5bWJvbCxvcGFjaXR5OmMub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6Yy5tYXhkaXNwbGF5ZWQsc2l6ZTpjLnNpemUsc2l6ZXJlZjpjLnNpemVyZWYsc2l6ZW1pbjpjLnNpemVtaW4sc2l6ZW1vZGU6Yy5zaXplbW9kZSxsaW5lOmwoe3dpZHRoOmYud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDpjLmdyYWRpZW50LGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyIikse2NvbG9yYmFyOnN9KSx0ZXh0Zm9udDpuLnRleHRmb250LHRleHRwb3NpdGlvbjpuLnRleHRwb3NpdGlvbixzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246bi5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6YSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA1MX1dLDEwODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbD10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fY2FycGV0VHJhY2U9bCh0LGUpO2lmKHImJnIudmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09ci52aXNpYmxlKXt2YXIgYztlLnhheGlzPXIueGF4aXMsZS55YXhpcz1yLnlheGlzO3ZhciB1LGYsaD1lLl9sZW5ndGgscD1uZXcgQXJyYXkoaCksZD0hMTtmb3IoYz0wO2M8aDtjKyspaWYodT1lLmFbY10sZj1lLmJbY10sbih1KSYmbihmKSl7dmFyIGc9ci5hYjJ4eSgrdSwrZiwhMCksdj1yLmlzVmlzaWJsZSgrdSwrZik7dnx8KGQ9ITApLHBbY109e3g6Z1swXSx5OmdbMV0sYTp1LGI6Zix2aXM6dn19ZWxzZSBwW2NdPXt4OiExLHk6ITF9O3JldHVybiBlLl9uZWVkc0N1bGw9ZCxwWzBdLmNhcnBldD1yLHBbMF0udHJhY2U9ZSxzKGUsaCksaSh0LGUpLGEocCxlKSxvKHAsZSkscH19fSx7Ii4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjg5NywiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNTAsIi4uL3NjYXR0ZXIvY2FsYyI6MTA1MiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTA1MywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSwxMDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGY9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX1wKCJjYXJwZXQiKSxlLnhheGlzPSJ4IixlLnlheGlzPSJ5Ijt2YXIgZD1wKCJhIiksZz1wKCJiIiksdj1NYXRoLm1pbihkLmxlbmd0aCxnLmxlbmd0aCk7aWYodil7ZS5fbGVuZ3RoPXYscCgidGV4dCIpLHAoImhvdmVydGV4dCIpLHAoIm1vZGUiLHY8aS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixoLHApLGwodCxlLHApLHAoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixoLHAse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZjKHQsZSxoLHApO3ZhciBtPVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihwKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksbS5wdXNoKCJwb2ludHMiKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKHUodCxlLHIscCksYS5oYXNMaW5lcyhlKXx8bCh0LGUscCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8bS5wdXNoKCJmaWxscyIpLCJmaWxscyIhPT1wKCJob3Zlcm9uIixtLmpvaW4oIisiKXx8InBvaW50cyIpJiZwKCJob3ZlcnRlbXBsYXRlIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTA1NSwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwNjAsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTA2NCwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMDY2LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA3MCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDc2LCIuL2F0dHJpYnV0ZXMiOjEwODR9XSwxMDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5baV07cmV0dXJuIHQuYT1hLmEsdC5iPWEuYix0Lnk9YS55LHR9fSx7fV0sMTA4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIiksaT10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXt2YXIgbD0xLXMueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLHU9YypsLzIsZj1jLXU7cmV0dXJuIHMueDA9TWF0aC5tYXgoTWF0aC5taW4ocy54MCxmKSx1KSxzLngxPU1hdGgubWF4KE1hdGgubWluKHMueDEsZiksdSksb312YXIgaD1zLmNkW3MuaW5kZXhdO3MuYT1oLmEscy5iPWguYixzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1wLl9jYXJwZXQsZz1kLmFiMmlqKFtoLmEsaC5iXSksdj1NYXRoLmZsb29yKGdbMF0pLG09Z1swXS12LHk9TWF0aC5mbG9vcihnWzFdKSx4PWdbMV0teSxiPWQuZXZhbHh5KFtdLHYseSxtLHgpO3MueUxhYmVsPWJbMV0udG9GaXhlZCgzKSxkZWxldGUgcy50ZXh0O3ZhciBfPVtdO2lmKCFwLmhvdmVydGVtcGxhdGUpe3ZhciB3PShoLmhpfHxwLmhvdmVyaW5mbykuc3BsaXQoIisiKTstMSE9PXcuaW5kZXhPZigiYWxsIikmJih3PVsiYSIsImIiLCJ0ZXh0Il0pLC0xIT09dy5pbmRleE9mKCJhIikmJmsoZC5hYXhpcyxoLmEpLC0xIT09dy5pbmRleE9mKCJiIikmJmsoZC5iYXhpcyxoLmIpLF8ucHVzaCgieTogIitzLnlMYWJlbCksLTEhPT13LmluZGV4T2YoInRleHQiKSYmaShoLHAsXykscy5leHRyYVRleHQ9Xy5qb2luKCI8YnI+Iil9cmV0dXJuIG99ZnVuY3Rpb24gayh0LGUpe3ZhciByO3I9dC5sYWJlbHByZWZpeCYmdC5sYWJlbHByZWZpeC5sZW5ndGg+MD90LmxhYmVscHJlZml4LnJlcGxhY2UoLyA9ICQvLCIiKTp0Ll9ob3ZlcnRpdGxlLF8ucHVzaChyKyI6ICIrZS50b0ZpeGVkKDMpK3QubGFiZWxzdWZmaXgpfX19LHsiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTksIi4uL3NjYXR0ZXIvaG92ZXIiOjEwNjJ9XSwxMDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5zZWxlY3RQb2ludHM9dCgiLi4vc2NhdHRlci9zZWxlY3QiKSxuLmV2ZW50RGF0YT10KCIuL2V2ZW50X2RhdGEiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJjYXJwZXQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsic3ZnIiwiY2FycGV0Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJjYXJwZXREZXBlbmRlbnQiLCJ6b29tU2NhbGUiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NTksIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuLi9zY2F0dGVyL3NlbGVjdCI6MTA3MiwiLi4vc2NhdHRlci9zdHlsZSI6MTA3NCwiLi9hdHRyaWJ1dGVzIjoxMDg0LCIuL2NhbGMiOjEwODUsIi4vZGVmYXVsdHMiOjEwODYsIi4vZXZlbnRfZGF0YSI6MTA4NywiLi9ob3ZlciI6MTA4OCwiLi9wbG90IjoxMDkwfV0sMTA5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3Bsb3QiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbCxjLHU9clswXVswXS5jYXJwZXQsZj17eGF4aXM6aS5nZXRGcm9tSWQodCx1LnhheGlzfHwieCIpLHlheGlzOmkuZ2V0RnJvbUlkKHQsdS55YXhpc3x8InkiKSxwbG90OmUucGxvdH07Zm9yKG4odCxmLHIsbykscz0wO3M8ci5sZW5ndGg7cysrKWw9cltzXVswXS50cmFjZSxjPW8uc2VsZWN0QWxsKCJnLnRyYWNlIitsLnVpZCsiIC5qcy1saW5lIiksYS5zZXRDbGlwVXJsKGMscltzXVswXS5jYXJwZXQuX2NsaXBQYXRoSWQsdCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9zY2F0dGVyL3Bsb3QiOjEwNzF9XSwxMDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCx1PWkubWFya2VyLGY9aS5saW5lLGg9dS5saW5lO2UuZXhwb3J0cz1jKHtsb246e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIklTTy0zIiwiVVNBLXN0YXRlcyIsImNvdW50cnkgbmFtZXMiXSxkZmx0OiJJU08tMyJ9LG1vZGU6bCh7fSxpLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30saS5ob3ZlcnRleHQse30pLHRleHRmb250OmkudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLGxpbmU6e2NvbG9yOmYuY29sb3Isd2lkdGg6Zi53aWR0aCxkYXNoOnN9LGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsbWFya2VyOmwoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpsKHt3aWR0aDpoLndpZHRofSxvKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDp1LmdyYWRpZW50fSxvKCJtYXJrZXIiKSksZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvc2VsZiJdLGRmbHQ6Im5vbmUifSxmaWxsY29sb3I6aS5maWxsY29sb3Isc2VsZWN0ZWQ6aS5zZWxlY3RlZCx1bnNlbGVjdGVkOmkudW5zZWxlY3RlZCxob3ZlcmluZm86bCh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsb24iLCJsYXQiLCJsb2NhdGlvbiIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sImNhbGMiLCJuZXN0ZWQiKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTk3LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTF9XSwxMDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxvPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIikscz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIiksbD10KCIuLi8uLi9saWIiKS5fO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxjPXI/ZS5sb2NhdGlvbnMubGVuZ3RoOmUuX2xlbmd0aCx1PW5ldyBBcnJheShjKSxmPTA7ZjxjO2YrKyl7dmFyIGg9dVtmXT17fTtpZihyKXt2YXIgcD1lLmxvY2F0aW9uc1tmXTtoLmxvYz0ic3RyaW5nIj09dHlwZW9mIHA/cDpudWxsfWVsc2V7dmFyIGQ9ZS5sb25bZl0sZz1lLmxhdFtmXTtuKGQpJiZuKGcpP2gubG9ubGF0PVsrZCwrZ106aC5sb25sYXQ9W2ksaV19fXJldHVybiBvKHUsZSksYSh0LGUpLHModSxlKSxjJiYodVswXS50PXtsYWJlbHM6e2xhdDpsKHQsImxhdDoiKSsiICIsbG9uOmwodCwibG9uOiIpKyIgIn19KSx1fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTA1MCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTA1MywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSwxMDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX0hZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT0wLG89cigibG9jYXRpb25zIik7aWYobylyZXR1cm4gcigibG9jYXRpb25tb2RlIiksYT1vLmxlbmd0aDtyZXR1cm4gbj1yKCJsb24iKXx8W10saT1yKCJsYXQiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCksZS5fbGVuZ3RoPWEsYX0oMCxlLGYpP2UudmlzaWJsZT0hMTooZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJtb2RlIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxmKSxmKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkmJmEodCxlLHIsdSxmLHtncmFkaWVudDohMH0pLGkuaGFzVGV4dChlKSYmcyh0LGUsdSxmKSxmKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGYpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpKX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDYwLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwNjQsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDcwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDc1LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNzYsIi4vYXR0cmlidXRlcyI6MTA5MX1dLDEwOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHQubG9jYXRpb249ZS5sb2M/ZS5sb2M6bnVsbCx0fX0se31dLDEwOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLHM9dCgiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiKSxsPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsZj10LnhhLGg9dC55YSxwPXQuc3VicGxvdCxkPXAucHJvamVjdGlvbi5pc0xvbkxhdE92ZXJFZGdlcyxnPXAucHJvamVjdDtpZihuLmdldENsb3Nlc3QoYyxmdW5jdGlvbih0KXt2YXIgbj10LmxvbmxhdDtpZihuWzBdPT09YSlyZXR1cm4gMS8wO2lmKGQobikpcmV0dXJuIDEvMDt2YXIgaT1nKG4pLG89ZyhbZSxyXSkscz1NYXRoLmFicyhpWzBdLW9bMF0pLGw9TWF0aC5hYnMoaVsxXS1vWzFdKSxjPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocypzK2wqbCktYywxLTMvYyl9LHQpLCExIT09dC5pbmRleCl7dmFyIHY9Y1t0LmluZGV4XSxtPXYubG9ubGF0LHk9W2YuYzJwKG0pLGguYzJwKG0pXSx4PXYubXJjfHwxO3JldHVybiB0LngwPXlbMF0teCx0LngxPXlbMF0reCx0LnkwPXlbMV0teCx0LnkxPXlbMV0reCx0LmxvYz12LmxvYyx0Lmxvbj1tWzBdLHQubGF0PW1bMV0sdC5jb2xvcj1vKHUsdiksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIsbil7aWYodC5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgYT1lLmhpfHx0LmhvdmVyaW5mbyxvPSJhbGwiPT09YT9sLmhvdmVyaW5mby5mbGFnczphLnNwbGl0KCIrIiksYz0tMSE9PW8uaW5kZXhPZigibG9jYXRpb24iKSYmQXJyYXkuaXNBcnJheSh0LmxvY2F0aW9ucyksdT0tMSE9PW8uaW5kZXhPZigibG9uIiksZj0tMSE9PW8uaW5kZXhPZigibGF0IiksaD0tMSE9PW8uaW5kZXhPZigidGV4dCIpLHA9W107ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaS50aWNrVGV4dChyLHIuYzJsKHQpLCJob3ZlciIpLnRleHQrIlx4YjAifWM/cC5wdXNoKGUubG9jKTp1JiZmP3AucHVzaCgiKCIrZChlLmxvbmxhdFswXSkrIiwgIitkKGUubG9ubGF0WzFdKSsiKSIpOnU/cC5wdXNoKG4ubG9uK2QoZS5sb25sYXRbMF0pKTpmJiZwLnB1c2gobi5sYXQrZChlLmxvbmxhdFsxXSkpO2gmJnMoZSx0LHApO3JldHVybiBwLmpvaW4oIjxicj4iKX0odSx2LHAubW9ja0F4aXMsY1swXS50LmxhYmVscyksdC5ob3ZlcnRlbXBsYXRlPXUuaG92ZXJ0ZW1wbGF0ZSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MTYsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTksIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDYxLCIuL2F0dHJpYnV0ZXMiOjEwOTF9XSwxMDk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLnN0eWxlT25TZWxlY3Q9dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJnZW8iLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2VvIiksbi5jYXRlZ29yaWVzPVsiZ2VvIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2VvIjo3NzgsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuLi9zY2F0dGVyL3N0eWxlIjoxMDc0LCIuL2F0dHJpYnV0ZXMiOjEwOTEsIi4vY2FsYyI6MTA5MiwiLi9kZWZhdWx0cyI6MTA5MywiLi9ldmVudF9kYXRhIjoxMDk0LCIuL2hvdmVyIjoxMDk1LCIuL3Bsb3QiOjEwOTcsIi4vc2VsZWN0IjoxMDk4LCIuL3N0eWxlIjoxMDk5fV0sMTA5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIikuZ2V0VG9wb2pzb25GZWF0dXJlcyxzPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKS5sb2NhdGlvblRvRmVhdHVyZSxsPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIiksYz10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksdT10KCIuL3N0eWxlIik7ZnVuY3Rpb24gZih0LGUpe3ZhciByPXRbMF0udHJhY2U7aWYoQXJyYXkuaXNBcnJheShyLmxvY2F0aW9ucykpZm9yKHZhciBuPW8ocixlKSxpPXIubG9jYXRpb25tb2RlLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dFtsXSx1PXMoaSxjLmxvYyxuKTtjLmxvbmxhdD11P3UucHJvcGVydGllcy5jdDpbYSxhXX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylmKHJbb10sZS50b3BvanNvbik7ZnVuY3Rpb24gcyh0LGUpe3QubG9ubGF0WzBdPT09YSYmbi5zZWxlY3QoZSkucmVtb3ZlKCl9dmFyIGg9ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLHA9aS5tYWtlVHJhY2VHcm91cHMoaCxyLCJ0cmFjZSBzY2F0dGVyZ2VvIik7cC5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxwLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS5ub2RlMz1uLnNlbGVjdCh0aGlzKSxhPWVbMF0udHJhY2U7aWYoYy5oYXNMaW5lcyhhKXx8Im5vbmUiIT09YS5maWxsKXt2YXIgbz1sLmNhbGNUcmFjZVRvTGluZUNvb3JkcyhlKSxmPSJub25lIiE9PWEuZmlsbD9sLm1ha2VQb2x5Z29uKG8pOmwubWFrZUxpbmUobyk7ci5zZWxlY3RBbGwoInBhdGguanMtbGluZSIpLmRhdGEoW3tnZW9qc29uOmYsdHJhY2U6YX1dKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpfWMuaGFzTWFya2VycyhhKSYmci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKS5lYWNoKGZ1bmN0aW9uKHQpe3ModCx0aGlzKX0pLGMuaGFzVGV4dChhKSYmci5zZWxlY3RBbGwoImciKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuZWFjaChmdW5jdGlvbih0KXtzKHQsdGhpcyl9KSx1KHQsZSl9KX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NjkzLCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6Njk0LCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjcyNywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiLi9zdHlsZSI6MTA5OSxkMzoxNTR9XSwxMDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHMsbCxjPXQuY2QsdT10LnhheGlzLGY9dC55YXhpcyxoPVtdLHA9Y1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKHApJiYhbi5oYXNUZXh0KHApKXJldHVybltdO2lmKCExPT09ZSlmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKWNbbF0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihsPTA7bDxjLmxlbmd0aDtsKyspKGE9KHI9Y1tsXSkubG9ubGF0KVswXSE9PWkmJihvPXUuYzJwKGEpLHM9Zi5jMnAoYSksZS5jb250YWlucyhbbyxzXSxudWxsLGwsdCk/KGgucHVzaCh7cG9pbnROdW1iZXI6bCxsb246YVswXSxsYXQ6YVsxXX0pLHIuc2VsZWN0ZWQ9MSk6ci5zZWxlY3RlZD0wKTtyZXR1cm4gaH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDc1fV0sMTA5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9zY2F0dGVyL3N0eWxlIikscz1vLnN0eWxlUG9pbnRzLGw9by5zdHlsZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZSYmZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLG89ZVswXS5ub2RlMztvLnN0eWxlKCJvcGFjaXR5IixlWzBdLnRyYWNlLm9wYWNpdHkpLHMobyxyLHQpLGwobyxyLHQpLG8uc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dC50cmFjZSxvPXIubGluZXx8e307ZS5jYWxsKGEuc3Ryb2tlLG8uY29sb3IpLmNhbGwoaS5kYXNoTGluZSxvLmRhc2h8fCIiLG8ud2lkdGh8fDApLCJub25lIiE9PXIuZmlsbCYmZS5jYWxsKGEuZmlsbCxyLmZpbGxjb2xvcil9KX0odCxlKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vc2NhdHRlci9zdHlsZSI6MTA3NCxkMzoxNTR9XSwxMTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGw9dCgiLi9jb25zdGFudHMiKS5EQVNIRVMsYz1pLmxpbmUsdT1pLm1hcmtlcixmPXUubGluZSxoPWUuZXhwb3J0cz1zKHt4OmkueCx4MDppLngwLGR4OmkuZHgseTppLnkseTA6aS55MCxkeTppLmR5LHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6aS50ZXh0Zm9udCxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdfSxsaW5lOntjb2xvcjpjLmNvbG9yLHdpZHRoOmMud2lkdGgsc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImh2IiwidmgiLCJodmgiLCJ2aHYiXSxkZmx0OiJsaW5lYXIiLGVkaXRUeXBlOiJwbG90In0sZGFzaDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGwpLGRmbHQ6InNvbGlkIn19LG1hcmtlcjpvKHt9LGEoIm1hcmtlciIpLHtzeW1ib2w6dS5zeW1ib2wsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxvcGFjaXR5OnUub3BhY2l0eSxjb2xvcmJhcjp1LmNvbG9yYmFyLGxpbmU6byh7fSxhKCJtYXJrZXIubGluZSIpLHt3aWR0aDpmLndpZHRofSl9KSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGZpbGw6byh7fSxpLmZpbGwse2RmbHQ6Im5vbmUifSksZmlsbGNvbG9yOmkuZmlsbGNvbG9yLHNlbGVjdGVkOnttYXJrZXI6aS5zZWxlY3RlZC5tYXJrZXIsdGV4dGZvbnQ6aS5zZWxlY3RlZC50ZXh0Zm9udH0sdW5zZWxlY3RlZDp7bWFya2VyOmkudW5zZWxlY3RlZC5tYXJrZXIsdGV4dGZvbnQ6aS51bnNlbGVjdGVkLnRleHRmb250fSxvcGFjaXR5Om4ub3BhY2l0eX0sImNhbGMiLCJuZXN0ZWQiKTtoLnguZWRpdFR5cGU9aC55LmVkaXRUeXBlPWgueDAuZWRpdFR5cGU9aC55MC5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsaC5ob3ZlcnRlbXBsYXRlPWkuaG92ZXJ0ZW1wbGF0ZX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTEsIi4vY29uc3RhbnRzIjoxMTAxfV0sMTEwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1RPT19NQU5ZX1BPSU5UUzoxZTUsU1lNQk9MX1NERl9TSVpFOjIwMCxTWU1CT0xfU0laRToyMCxTWU1CT0xfU1RST0tFOjEsRE9UX1JFOi8tZG90LyxPUEVOX1JFOi8tb3Blbi8sREFTSEVTOntzb2xpZDpbMV0sZG90OlsxLDFdLGRhc2g6WzQsMV0sbG9uZ2Rhc2g6WzgsMV0sZGFzaGRvdDpbNCwxLDEsMV0sbG9uZ2Rhc2hkb3Q6WzgsMSwxLDFdfX19LHt9XSwxMTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJzdmctcGF0aC1zZGYiKSxhPXQoImNvbG9yLW5vcm1hbGl6ZSIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSx1PXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5mb3JtYXRDb2xvcixmPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxoPXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIikscD10KCIuL2NvbnN0YW50cyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGc9e3N0YXJ0OjEsbGVmdDoxLGVuZDotMSxyaWdodDotMSxtaWRkbGU6MCxjZW50ZXI6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIHYodCl7dmFyIGUscj10Ll9sZW5ndGgsaT10LnRleHRmb250LGE9dC50ZXh0cG9zaXRpb24sbz1BcnJheS5pc0FycmF5KGEpP2E6W2FdLHM9aS5jb2xvcixsPWkuc2l6ZSxjPWkuZmFtaWx5LHU9e307Zm9yKHUudGV4dD10LnRleHQsdS5vcGFjaXR5PXQub3BhY2l0eSx1LmZvbnQ9e30sdS5hbGlnbj1bXSx1LmJhc2VsaW5lPVtdLGU9MDtlPG8ubGVuZ3RoO2UrKyl7dmFyIGY9b1tlXS5zcGxpdCgvXHMrLyk7c3dpdGNoKGZbMV0pe2Nhc2UibGVmdCI6dS5hbGlnbi5wdXNoKCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnUuYWxpZ24ucHVzaCgibGVmdCIpO2JyZWFrO2RlZmF1bHQ6dS5hbGlnbi5wdXNoKGZbMV0pfXN3aXRjaChmWzBdKXtjYXNlInRvcCI6dS5iYXNlbGluZS5wdXNoKCJib3R0b20iKTticmVhaztjYXNlImJvdHRvbSI6dS5iYXNlbGluZS5wdXNoKCJ0b3AiKTticmVhaztkZWZhdWx0OnUuYmFzZWxpbmUucHVzaChmWzBdKX19aWYoQXJyYXkuaXNBcnJheShzKSlmb3IodS5jb2xvcj1uZXcgQXJyYXkociksZT0wO2U8cjtlKyspdS5jb2xvcltlXT1zW2VdO2Vsc2UgdS5jb2xvcj1zO2lmKEFycmF5LmlzQXJyYXkobCl8fEFycmF5LmlzQXJyYXkoYykpZm9yKHUuZm9udD1uZXcgQXJyYXkociksZT0wO2U8cjtlKyspe3ZhciBoPXUuZm9udFtlXT17fTtoLnNpemU9QXJyYXkuaXNBcnJheShsKT9uKGxbZV0pP2xbZV06MDpsLGguZmFtaWx5PUFycmF5LmlzQXJyYXkoYyk/Y1tlXTpjfWVsc2UgdS5mb250PXtzaXplOmwsZmFtaWx5OmN9O3JldHVybiB1fWZ1bmN0aW9uIG0odCl7dmFyIGUscixuPXQuX2xlbmd0aCxpPXQubWFya2VyLG89e30sbD1BcnJheS5pc0FycmF5KGkuc3ltYm9sKSxjPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmNvbG9yKSxmPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmxpbmUuY29sb3IpLGQ9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkub3BhY2l0eSksZz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5zaXplKSx2PXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmxpbmUud2lkdGgpO2lmKGx8fChyPXAuT1BFTl9SRS50ZXN0KGkuc3ltYm9sKSksbHx8Y3x8Znx8ZCl7by5jb2xvcnM9bmV3IEFycmF5KG4pLG8uYm9yZGVyQ29sb3JzPW5ldyBBcnJheShuKTt2YXIgbT11KGksaS5vcGFjaXR5LG4pLHk9dShpLmxpbmUsaS5vcGFjaXR5LG4pO2lmKCFBcnJheS5pc0FycmF5KHlbMF0pKXt2YXIgeD15O2Zvcih5PUFycmF5KG4pLGU9MDtlPG47ZSsrKXlbZV09eH1pZighQXJyYXkuaXNBcnJheShtWzBdKSl7dmFyIGI9bTtmb3IobT1BcnJheShuKSxlPTA7ZTxuO2UrKyltW2VdPWJ9Zm9yKG8uY29sb3JzPW0sby5ib3JkZXJDb2xvcnM9eSxlPTA7ZTxuO2UrKyl7aWYobCl7dmFyIF89aS5zeW1ib2xbZV07cj1wLk9QRU5fUkUudGVzdChfKX1yJiYoeVtlXT1tW2VdLnNsaWNlKCksbVtlXT1tW2VdLnNsaWNlKCksbVtlXVszXT0wKX1vLm9wYWNpdHk9dC5vcGFjaXR5fWVsc2Ugcj8oby5jb2xvcj1hKGkuY29sb3IsInVpbnQ4Iiksby5jb2xvclszXT0wLG8uYm9yZGVyQ29sb3I9YShpLmNvbG9yLCJ1aW50OCIpKTooby5jb2xvcj1hKGkuY29sb3IsInVpbnQ4Iiksby5ib3JkZXJDb2xvcj1hKGkubGluZS5jb2xvciwidWludDgiKSksby5vcGFjaXR5PXQub3BhY2l0eSppLm9wYWNpdHk7aWYobClmb3Ioby5tYXJrZXJzPW5ldyBBcnJheShuKSxlPTA7ZTxuO2UrKylvLm1hcmtlcnNbZV09TShpLnN5bWJvbFtlXSk7ZWxzZSBvLm1hcmtlcj1NKGkuc3ltYm9sKTt2YXIgdyxrPWgodCk7aWYoZ3x8dil7dmFyIFQsQT1vLnNpemVzPW5ldyBBcnJheShuKSxTPW8uYm9yZGVyU2l6ZXM9bmV3IEFycmF5KG4pLEU9MDtpZihnKXtmb3IoZT0wO2U8bjtlKyspQVtlXT1rKGkuc2l6ZVtlXSksRSs9QVtlXTtUPUUvbn1lbHNlIGZvcih3PWsoaS5zaXplKSxlPTA7ZTxuO2UrKylBW2VdPXc7aWYodilmb3IoZT0wO2U8bjtlKyspU1tlXT1pLmxpbmUud2lkdGhbZV0vMjtlbHNlIGZvcih3PWkubGluZS53aWR0aC8yLGU9MDtlPG47ZSsrKVNbZV09dztvLnNpemVBdmc9VH1lbHNlIG8uc2l6ZT1rKGkmJmkuc2l6ZXx8MTApLG8uYm9yZGVyU2l6ZXM9ayhpLmxpbmUud2lkdGgpO3JldHVybiBvfWZ1bmN0aW9uIHkodCxlKXt2YXIgcj10Lm1hcmtlcixuPXt9O3JldHVybiBlPyhlLm1hcmtlciYmZS5tYXJrZXIuc3ltYm9sP249bShzLmV4dGVuZEZsYXQoe30scixlLm1hcmtlcikpOmUubWFya2VyJiYoZS5tYXJrZXIuc2l6ZSYmKG4uc2l6ZT1lLm1hcmtlci5zaXplLzIpLGUubWFya2VyLmNvbG9yJiYobi5jb2xvcnM9ZS5tYXJrZXIuY29sb3IpLHZvaWQgMCE9PWUubWFya2VyLm9wYWNpdHkmJihuLm9wYWNpdHk9ZS5tYXJrZXIub3BhY2l0eSkpLG4pOm59ZnVuY3Rpb24geCh0LGUpe3ZhciByPXt9O2lmKCFlKXJldHVybiByO2lmKGUudGV4dGZvbnQpe3ZhciBuPXtvcGFjaXR5OjEsdGV4dDp0LnRleHQsdGV4dHBvc2l0aW9uOnQudGV4dHBvc2l0aW9uLHRleHRmb250OnMuZXh0ZW5kRmxhdCh7fSx0LnRleHRmb250KX07ZS50ZXh0Zm9udCYmcy5leHRlbmRGbGF0KG4udGV4dGZvbnQsZS50ZXh0Zm9udCkscj12KG4pfXJldHVybiByfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj17Y2FwU2l6ZToyKmUud2lkdGgsbGluZVdpZHRoOmUudGhpY2tuZXNzLGNvbG9yOmUuY29sb3J9O3JldHVybiBlLmNvcHlfeXN0eWxlJiYocj10LmVycm9yX3kpLHJ9dmFyIF89cC5TWU1CT0xfU0RGX1NJWkUsdz1wLlNZTUJPTF9TSVpFLGs9cC5TWU1CT0xfU1RST0tFLFQ9e30sQT1sLnN5bWJvbEZ1bmNzWzBdKC4wNSp3KTtmdW5jdGlvbiBNKHQpe2lmKCJjaXJjbGUiPT09dClyZXR1cm4gbnVsbDt2YXIgZSxyLG49bC5zeW1ib2xOdW1iZXIodCksYT1sLnN5bWJvbEZ1bmNzW24lMTAwXSxvPSEhbC5zeW1ib2xOb0RvdFtuJTEwMF0scz0hIWwuc3ltYm9sTm9GaWxsW24lMTAwXSxjPXAuRE9UX1JFLnRlc3QodCk7cmV0dXJuIFRbdF0/VFt0XTooZT1jJiYhbz9hKDEuMSp3KStBOmEodykscj1pKGUse3c6XyxoOl8sdmlld0JveDpbLXcsLXcsdyx3XSxzdHJva2U6cz9rOi1rfSksVFt0XT1yLHJ8fG51bGwpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXttYXJrZXI6dm9pZCAwLG1hcmtlclNlbDp2b2lkIDAsbWFya2VyVW5zZWw6dm9pZCAwLGxpbmU6dm9pZCAwLGZpbGw6dm9pZCAwLGVycm9yWDp2b2lkIDAsZXJyb3JZOnZvaWQgMCx0ZXh0OnZvaWQgMCx0ZXh0U2VsOnZvaWQgMCx0ZXh0VW5zZWw6dm9pZCAwfTtpZighMCE9PWUudmlzaWJsZSlyZXR1cm4gbjtpZihmLmhhc1RleHQoZSkmJihuLnRleHQ9dihlKSxuLnRleHRTZWw9eChlLGUuc2VsZWN0ZWQpLG4udGV4dFVuc2VsPXgoZSxlLnVuc2VsZWN0ZWQpKSxmLmhhc01hcmtlcnMoZSkmJihuLm1hcmtlcj1tKGUpLG4ubWFya2VyU2VsPXkoZSxlLnNlbGVjdGVkKSxuLm1hcmtlclVuc2VsPXkoZSxlLnVuc2VsZWN0ZWQpLCFlLnVuc2VsZWN0ZWQmJkFycmF5LmlzQXJyYXkoZS5tYXJrZXIub3BhY2l0eSkpKXt2YXIgaT1lLm1hcmtlci5vcGFjaXR5O2ZvcihuLm1hcmtlclVuc2VsLm9wYWNpdHk9bmV3IEFycmF5KGkubGVuZ3RoKSxyPTA7cjxpLmxlbmd0aDtyKyspbi5tYXJrZXJVbnNlbC5vcGFjaXR5W3JdPWQqaVtyXX1pZihmLmhhc0xpbmVzKGUpKXtuLmxpbmU9e292ZXJsYXk6ITAsdGhpY2tuZXNzOmUubGluZS53aWR0aCxjb2xvcjplLmxpbmUuY29sb3Isb3BhY2l0eTplLm9wYWNpdHl9O3ZhciBhPShwLkRBU0hFU1tlLmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8YS5sZW5ndGg7KytyKWFbcl0qPWUubGluZS53aWR0aDtuLmxpbmUuZGFzaGVzPWF9cmV0dXJuIGUuZXJyb3JfeCYmZS5lcnJvcl94LnZpc2libGUmJihuLmVycm9yWD1iKGUsZS5lcnJvcl94KSksZS5lcnJvcl95JiZlLmVycm9yX3kudmlzaWJsZSYmKG4uZXJyb3JZPWIoZSxlLmVycm9yX3kpKSxlLmZpbGwmJiJub25lIiE9PWUuZmlsbCYmKG4uZmlsbD17Y2xvc2VkOiEwLGZpbGw6ZS5maWxsY29sb3IsdGhpY2tuZXNzOjB9KSxufSxtYXJrZXJTdHlsZTptLG1hcmtlclNlbGVjdGlvbjp5LGxpbmVQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPWEvMjtpZihmLmhhc0xpbmVzKGUpJiZvKWlmKCJodiI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOLE5hTixOYU4pOihuLnB1c2goclsyKmldLHJbMippKzFdKSxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippKzJdLHJbMippKzFdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoImh2aCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBzPShyWzIqaV0rclsyKmkrMl0pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxzLHJbMippKzFdLHMsclsyKmkrM10pfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKCJ2aHYiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlmKGlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKXx8aXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSkpaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmldLHJbMippKzFdKSxuLnB1c2goTmFOLE5hTik7ZWxzZXt2YXIgbD0oclsyKmkrMV0rclsyKmkrM10pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxyWzIqaV0sbCxyWzIqaSsyXSxsKX1uLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBpZigidmgiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrM10pKTtuLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBuPXI7dmFyIGM9ITE7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylpZihpc05hTihuW2ldKSl7Yz0hMDticmVha312YXIgdT1jfHxuLmxlbmd0aD5wLlRPT19NQU5ZX1BPSU5UUz8icmVjdCI6Zi5oYXNNYXJrZXJzKGUpPyJyZWN0Ijoicm91bmQiO2lmKGMmJmUuY29ubmVjdGdhcHMpe3ZhciBoPW5bMF0sZD1uWzFdO2ZvcihpPTA7aTxuLmxlbmd0aDtpKz0yKWlzTmFOKG5baV0pfHxpc05hTihuW2krMV0pPyhuW2ldPWgsbltpKzFdPWQpOihoPW5baV0sZD1uW2krMV0pfXJldHVybntqb2luOnUscG9zaXRpb25zOm59fSxlcnJvckJhclBvc2l0aW9uczpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJtYWtlQ29tcHV0ZUVycm9yIiksbD1jLmdldEZyb21JZCh0LGUueGF4aXMpLHU9Yy5nZXRGcm9tSWQodCxlLnlheGlzKSxmPXIubGVuZ3RoLzIsaD17fTtmdW5jdGlvbiBwKHQsaSl7dmFyIGE9aS5faWQuY2hhckF0KDApLG89ZVsiZXJyb3JfIithXTtpZihvJiZvLnZpc2libGUmJigibGluZWFyIj09PWkudHlwZXx8ImxvZyI9PT1pLnR5cGUpKXtmb3IodmFyIGw9cyhvKSxjPXt4OjAseToxfVthXSx1PXt4OlswLDEsMiwzXSx5OlsyLDMsMCwxXX1bYV0scD1uZXcgRmxvYXQ2NEFycmF5KDQqZiksZD0xLzAsZz0tMS8wLHY9MCxtPTA7djxmO3YrKyxtKz00KXt2YXIgeT10W3ZdO2lmKG4oeSkpe3ZhciB4PXJbMip2K2NdLGI9bCh5LHYpLF89YlswXSx3PWJbMV07aWYobihfKSYmbih3KSl7dmFyIGs9eS1fLFQ9eSt3O3BbbSt1WzBdXT14LWkuYzJsKGspLHBbbSt1WzFdXT1pLmMybChUKS14LHBbbSt1WzJdXT0wLHBbbSt1WzNdXT0wLGQ9TWF0aC5taW4oZCx5LV8pLGc9TWF0aC5tYXgoZyx5K3cpfX19aFthXT17cG9zaXRpb25zOnIsZXJyb3JzOnAsX2JuZHM6W2QsZ119fX1yZXR1cm4gcChpLGwpLHAoYSx1KSxofSx0ZXh0UG9zaXRpb246ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1lLl9sZW5ndGgsbz17fTtpZihmLmhhc01hcmtlcnMoZSkpe3ZhciBzPXIuZm9udCxsPXIuYWxpZ24sYz1yLmJhc2VsaW5lO2ZvcihvLm9mZnNldD1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspe3ZhciB1PW4uc2l6ZXM/bi5zaXplc1tpXTpuLnNpemUsaD1BcnJheS5pc0FycmF5KHMpP3NbaV0uc2l6ZTpzLnNpemUscD1BcnJheS5pc0FycmF5KGwpP2wubGVuZ3RoPjE/bFtpXTpsWzBdOmwsZD1BcnJheS5pc0FycmF5KGMpP2MubGVuZ3RoPjE/Y1tpXTpjWzBdOmMsdj1nW3BdLG09Z1tkXSx5PXU/dS8uOCsxOjAseD0tbSp5LS41Km07by5vZmZzZXRbaV09W3YqeS9oLHgvaF19fXJldHVybiBvfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjY3NiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjY5NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NTEsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMDY4LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDc1LCIuL2NvbnN0YW50cyI6MTEwMSwiY29sb3Itbm9ybWFsaXplIjoxMTAsImZhc3QtaXNudW1lcmljIjoyMjEsInN2Zy1wYXRoLXNkZiI6NTE5fV0sMTEwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIikscz10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbD10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksZj10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGg9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgZz0hIXQubWFya2VyJiYvLW9wZW4vLnRlc3QodC5tYXJrZXIuc3ltYm9sKSx2PXMuaXNCdWJibGUodCksbT1sKHQsZSxwLGQpO2lmKG0pe3ZhciB5PW08by5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiO2QoInRleHQiKSxkKCJob3ZlcnRleHQiKSxkKCJob3ZlcnRlbXBsYXRlIiksZCgibW9kZSIseSkscy5oYXNMaW5lcyhlKSYmKGQoImNvbm5lY3RnYXBzIiksdSh0LGUscixwLGQpLGQoImxpbmUuc2hhcGUiKSkscy5oYXNNYXJrZXJzKGUpJiYoYyh0LGUscixwLGQpLGQoIm1hcmtlci5saW5lLndpZHRoIixnfHx2PzE6MCkpLHMuaGFzVGV4dChlKSYmaCh0LGUscCxkKTt2YXIgeD0oZS5saW5lfHx7fSkuY29sb3IsYj0oZS5tYXJrZXJ8fHt9KS5jb2xvcjtkKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZmKHQsZSxyLGQpO3ZhciBfPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO18odCxlLHh8fGJ8fHIse2F4aXM6InkifSksXyh0LGUseHx8Ynx8cix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxkKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDU1LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA2MCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDY0LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA3MCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDc2LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMDc3LCIuL2F0dHJpYnV0ZXMiOjExMDB9XSwxMTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtc2NhdHRlcjJkIiksaT10KCJyZWdsLWxpbmUyZCIpLGE9dCgicmVnbC1lcnJvcjJkIiksbz10KCJwb2ludC1jbHVzdGVyIikscz10KCJhcnJheS1yYW5nZSIpLGw9dCgiZ2wtdGV4dCIpLGM9dCgiLi4vLi4vcmVnaXN0cnkiKSx1PXQoIi4uLy4uL2xpYiIpLGY9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikscD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLGQ9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGc9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLHY9dCgiLi4vc2NhdHRlci9jYWxjIiksbT12LmNhbGNNYXJrZXJTaXplLHk9di5jYWxjQXhpc0V4cGFuc2lvbix4PXYuc2V0Rmlyc3RTY2F0dGVyLGI9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxfPXQoIi4uL3NjYXR0ZXIvbGlua190cmFjZXMiKSx3PXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIiksaz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpLFQ9dCgiLi9jb252ZXJ0IiksQT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLE09dCgiLi9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFMsUz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU07ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49dC5fZXh0cmVtZXNbZS5faWRdLGk9cChlLHIuX2JuZHMse3BhZGRlZDohMH0pO24ubWluPW4ubWluLmNvbmNhdChpLm1pbiksbi5tYXg9bi5tYXguY29uY2F0KGkubWF4KX1mdW5jdGlvbiBDKHQsZSl7dmFyIHI9ZS5fc2NlbmUsbj17Y291bnQ6MCxkaXJ0eTohMCxsaW5lT3B0aW9uczpbXSxmaWxsT3B0aW9uczpbXSxtYXJrZXJPcHRpb25zOltdLG1hcmtlclNlbGVjdGVkT3B0aW9uczpbXSxtYXJrZXJVbnNlbGVjdGVkT3B0aW9uczpbXSxlcnJvclhPcHRpb25zOltdLGVycm9yWU9wdGlvbnM6W10sdGV4dE9wdGlvbnM6W10sdGV4dFNlbGVjdGVkT3B0aW9uczpbXSx0ZXh0VW5zZWxlY3RlZE9wdGlvbnM6W119LGk9e3NlbGVjdEJhdGNoOm51bGwsdW5zZWxlY3RCYXRjaDpudWxsLGZpbGwyZDohMSxzY2F0dGVyMmQ6ITEsZXJyb3IyZDohMSxsaW5lMmQ6ITEsZ2xUZXh0OiExLHNlbGVjdDJkOm51bGx9O3JldHVybiBlLl9zY2VuZXx8KChyPWUuX3NjZW5lPXt9KS5pbml0PWZ1bmN0aW9uKCl7dS5leHRlbmRGbGF0KHIsaSxuKX0sci5pbml0KCksci51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dS5yZXBlYXQodCxyLmNvdW50KTtpZihyLmZpbGwyZCYmci5maWxsMmQudXBkYXRlKGUpLHIuc2NhdHRlcjJkJiZyLnNjYXR0ZXIyZC51cGRhdGUoZSksci5saW5lMmQmJnIubGluZTJkLnVwZGF0ZShlKSxyLmVycm9yMmQmJnIuZXJyb3IyZC51cGRhdGUoZS5jb25jYXQoZSkpLHIuc2VsZWN0MmQmJnIuc2VsZWN0MmQudXBkYXRlKGUpLHIuZ2xUZXh0KWZvcih2YXIgbj0wO248ci5jb3VudDtuKyspci5nbFRleHRbbl0udXBkYXRlKHQpfSxyLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ci5jb3VudCxlPXIuZmlsbDJkLG49ci5lcnJvcjJkLGk9ci5saW5lMmQsYT1yLnNjYXR0ZXIyZCxvPXIuZ2xUZXh0LHM9ci5zZWxlY3QyZCxsPXIuc2VsZWN0QmF0Y2gsYz1yLnVuc2VsZWN0QmF0Y2gsdT0wO3U8dDt1KyspZSYmci5maWxsT3JkZXJbdV0mJmUuZHJhdyhyLmZpbGxPcmRlclt1XSksaSYmci5saW5lT3B0aW9uc1t1XSYmaS5kcmF3KHUpLG4mJihyLmVycm9yWE9wdGlvbnNbdV0mJm4uZHJhdyh1KSxyLmVycm9yWU9wdGlvbnNbdV0mJm4uZHJhdyh1K3QpKSwhYXx8IXIubWFya2VyT3B0aW9uc1t1XXx8bCYmbFt1XXx8YS5kcmF3KHUpLG9bdV0mJnIudGV4dE9wdGlvbnNbdV0mJm9bdV0ucmVuZGVyKCk7YSYmcyYmbCYmKHMuZHJhdyhsKSxhLmRyYXcoYykpLHIuZGlydHk9ITF9LHIuZGVzdHJveT1mdW5jdGlvbigpe3IuZmlsbDJkJiZyLmZpbGwyZC5kZXN0cm95JiZyLmZpbGwyZC5kZXN0cm95KCksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLmRlc3Ryb3kmJnIuc2NhdHRlcjJkLmRlc3Ryb3koKSxyLmVycm9yMmQmJnIuZXJyb3IyZC5kZXN0cm95JiZyLmVycm9yMmQuZGVzdHJveSgpLHIubGluZTJkJiZyLmxpbmUyZC5kZXN0cm95JiZyLmxpbmUyZC5kZXN0cm95KCksci5zZWxlY3QyZCYmci5zZWxlY3QyZC5kZXN0cm95JiZyLnNlbGVjdDJkLmRlc3Ryb3koKSxyLmdsVGV4dCYmci5nbFRleHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSksci5saW5lT3B0aW9ucz1udWxsLHIuZmlsbE9wdGlvbnM9bnVsbCxyLm1hcmtlck9wdGlvbnM9bnVsbCxyLm1hcmtlclNlbGVjdGVkT3B0aW9ucz1udWxsLHIubWFya2VyVW5zZWxlY3RlZE9wdGlvbnM9bnVsbCxyLmVycm9yWE9wdGlvbnM9bnVsbCxyLmVycm9yWU9wdGlvbnM9bnVsbCxyLnRleHRPcHRpb25zPW51bGwsci50ZXh0U2VsZWN0ZWRPcHRpb25zPW51bGwsci50ZXh0VW5zZWxlY3RlZE9wdGlvbnM9bnVsbCxyLnNlbGVjdEJhdGNoPW51bGwsci51bnNlbGVjdEJhdGNoPW51bGwsZS5fc2NlbmU9bnVsbH0pLHIuZGlydHl8fHUuZXh0ZW5kRmxhdChyLG4pLHJ9ZnVuY3Rpb24gTCh0LGUscixuKXt2YXIgaT10LnhhLGE9dC55YSxvPXQuZGlzdGFuY2Uscz10LmR4eSxsPXQuaW5kZXgsZj17cG9pbnROdW1iZXI6bCx4OmVbbF0seTpyW2xdfTtmLnR4PUFycmF5LmlzQXJyYXkobi50ZXh0KT9uLnRleHRbbF06bi50ZXh0LGYuaHR4PUFycmF5LmlzQXJyYXkobi5ob3ZlcnRleHQpP24uaG92ZXJ0ZXh0W2xdOm4uaG92ZXJ0ZXh0LGYuZGF0YT1BcnJheS5pc0FycmF5KG4uY3VzdG9tZGF0YSk/bi5jdXN0b21kYXRhW2xdOm4uY3VzdG9tZGF0YSxmLnRwPUFycmF5LmlzQXJyYXkobi50ZXh0cG9zaXRpb24pP24udGV4dHBvc2l0aW9uW2xdOm4udGV4dHBvc2l0aW9uO3ZhciBoPW4udGV4dGZvbnQ7aCYmKGYudHM9QXJyYXkuaXNBcnJheShoLnNpemUpP2guc2l6ZVtsXTpoLnNpemUsZi50Yz1BcnJheS5pc0FycmF5KGguY29sb3IpP2guY29sb3JbbF06aC5jb2xvcixmLnRmPUFycmF5LmlzQXJyYXkoaC5mYW1pbHkpP2guZmFtaWx5W2xdOmguZmFtaWx5KTt2YXIgcD1uLm1hcmtlcjtwJiYoZi5tcz11LmlzQXJyYXlPclR5cGVkQXJyYXkocC5zaXplKT9wLnNpemVbbF06cC5zaXplLGYubW89dS5pc0FycmF5T3JUeXBlZEFycmF5KHAub3BhY2l0eSk/cC5vcGFjaXR5W2xdOnAub3BhY2l0eSxmLm14PUFycmF5LmlzQXJyYXkocC5zeW1ib2wpP3Auc3ltYm9sW2xdOnAuc3ltYm9sLGYubWM9dS5pc0FycmF5T3JUeXBlZEFycmF5KHAuY29sb3IpP3AuY29sb3JbbF06cC5jb2xvcik7dmFyIGQ9cCYmcC5saW5lO2QmJihmLm1sYz1BcnJheS5pc0FycmF5KGQuY29sb3IpP2QuY29sb3JbbF06ZC5jb2xvcixmLm1sdz11LmlzQXJyYXlPclR5cGVkQXJyYXkoZC53aWR0aCk/ZC53aWR0aFtsXTpkLndpZHRoKTt2YXIgZz1wJiZwLmdyYWRpZW50O2cmJiJub25lIiE9PWcudHlwZSYmKGYubWd0PUFycmF5LmlzQXJyYXkoZy50eXBlKT9nLnR5cGVbbF06Zy50eXBlLGYubWdjPUFycmF5LmlzQXJyYXkoZy5jb2xvcik/Zy5jb2xvcltsXTpnLmNvbG9yKTt2YXIgdj1pLmMycChmLngsITApLG09YS5jMnAoZi55LCEwKSx5PWYubXJjfHwxLHg9bi5ob3ZlcmxhYmVsO3gmJihmLmhiZz1BcnJheS5pc0FycmF5KHguYmdjb2xvcik/eC5iZ2NvbG9yW2xdOnguYmdjb2xvcixmLmhiYz1BcnJheS5pc0FycmF5KHguYm9yZGVyY29sb3IpP3guYm9yZGVyY29sb3JbbF06eC5ib3JkZXJjb2xvcixmLmh0cz1BcnJheS5pc0FycmF5KHguZm9udC5zaXplKT94LmZvbnQuc2l6ZVtsXTp4LmZvbnQuc2l6ZSxmLmh0Yz1BcnJheS5pc0FycmF5KHguZm9udC5jb2xvcik/eC5mb250LmNvbG9yW2xdOnguZm9udC5jb2xvcixmLmh0Zj1BcnJheS5pc0FycmF5KHguZm9udC5mYW1pbHkpP3guZm9udC5mYW1pbHlbbF06eC5mb250LmZhbWlseSxmLmhubD1BcnJheS5pc0FycmF5KHgubmFtZWxlbmd0aCk/eC5uYW1lbGVuZ3RoW2xdOngubmFtZWxlbmd0aCk7dmFyIGI9bi5ob3ZlcmluZm87YiYmKGYuaGk9QXJyYXkuaXNBcnJheShiKT9iW2xdOmIpO3ZhciBfPW4uaG92ZXJ0ZW1wbGF0ZTtfJiYoZi5odD1BcnJheS5pc0FycmF5KF8pP19bbF06Xyk7dmFyIFQ9e307cmV0dXJuIFRbdC5pbmRleF09Zix1LmV4dGVuZEZsYXQodCx7Y29sb3I6dyhuLGYpLHgwOnYteSx4MTp2K3kseExhYmVsVmFsOmYueCx5MDptLXkseTE6bSt5LHlMYWJlbFZhbDpmLnksY2Q6VCxkaXN0YW5jZTpvLHNwaWtlRGlzdGFuY2U6cyxob3ZlcnRlbXBsYXRlOmYuaHR9KSxmLmh0eD90LnRleHQ9Zi5odHg6Zi50eD90LnRleHQ9Zi50eDpuLnRleHQmJih0LnRleHQ9bi50ZXh0KSxrKGYsbix0KSxjLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoZixuLHQpLHR9ZnVuY3Rpb24geih0KXt2YXIgZSxyLG49dFswXSxpPW4udHJhY2UsYT1uLnQsbz1hLl9zY2VuZSxzPWEuaW5kZXgsbD1vLnNlbGVjdEJhdGNoW3NdLGM9by51bnNlbGVjdEJhdGNoW3NdLGY9by50ZXh0T3B0aW9uc1tzXSxoPW8udGV4dFNlbGVjdGVkT3B0aW9uc1tzXXx8e30scD1vLnRleHRVbnNlbGVjdGVkT3B0aW9uc1tzXXx8e30sZz11LmV4dGVuZEZsYXQoe30sZik7aWYobCYmYyl7dmFyIHY9aC5jb2xvcixtPXAuY29sb3IseT1mLmNvbG9yLHg9QXJyYXkuaXNBcnJheSh5KTtmb3IoZy5jb2xvcj1uZXcgQXJyYXkoaS5fbGVuZ3RoKSxlPTA7ZTxsLmxlbmd0aDtlKyspcj1sW2VdLGcuY29sb3Jbcl09dnx8KHg/eVtyXTp5KTtmb3IoZT0wO2U8Yy5sZW5ndGg7ZSsrKXtyPWNbZV07dmFyIGI9eD95W3JdOnk7Zy5jb2xvcltyXT1tfHwodj9iOmQuYWRkT3BhY2l0eShiLFMpKX19by5nbFRleHRbc10udXBkYXRlKGcpfWUuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJnbCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsImNhcnRlc2lhbiIsInN5bWJvbHMiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksY2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPXQuX2Z1bGxMYXlvdXQscz1oLmdldEZyb21JZCh0LGUueGF4aXMpLGw9aC5nZXRGcm9tSWQodCxlLnlheGlzKSxjPWEuX3Bsb3RzW2UueGF4aXMrZS55YXhpc10sZj1lLl9sZW5ndGgscD1mPj1NLGQ9MipmLGc9e30sdj1zLm1ha2VDYWxjZGF0YShlLCJ4IiksXz1sLm1ha2VDYWxjZGF0YShlLCJ5Iiksdz1uZXcgQXJyYXkoZCk7Zm9yKHI9MDtyPGY7cisrKW49dltyXSxpPV9bcl0sd1syKnJdPW49PT1BP05hTjpuLHdbMipyKzFdPWk9PT1BP05hTjppO2lmKCJsb2ciPT09cy50eXBlKWZvcihyPTA7cjxkO3IrPTIpd1tyXT1zLmMybCh3W3JdKTtpZigibG9nIj09PWwudHlwZSlmb3Iocj0xO3I8ZDtyKz0yKXdbcl09bC5jMmwod1tyXSk7aWYocCYmImxvZyIhPT1zLnR5cGUmJiJsb2ciIT09bC50eXBlKWcudHJlZT1vKHcpO2Vsc2V7dmFyIGs9Zy5pZHM9bmV3IEFycmF5KGYpO2ZvcihyPTA7cjxmO3IrKylrW3JdPXJ9Yih0LGUpO3ZhciBTLEw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPVQuc3R5bGUodCxyKTtpZihvLm1hcmtlciYmKG8ubWFya2VyLnBvc2l0aW9ucz1uKSxvLmxpbmUmJm4ubGVuZ3RoPjEmJnUuZXh0ZW5kRmxhdChvLmxpbmUsVC5saW5lUG9zaXRpb25zKHQscixuKSksby5lcnJvclh8fG8uZXJyb3JZKXt2YXIgcz1ULmVycm9yQmFyUG9zaXRpb25zKHQscixuLGksYSk7by5lcnJvclgmJnUuZXh0ZW5kRmxhdChvLmVycm9yWCxzLngpLG8uZXJyb3JZJiZ1LmV4dGVuZEZsYXQoby5lcnJvclkscy55KX1yZXR1cm4gby50ZXh0JiYodS5leHRlbmRGbGF0KG8udGV4dCx7cG9zaXRpb25zOm59LFQudGV4dFBvc2l0aW9uKHQscixvLnRleHQsby5tYXJrZXIpKSx1LmV4dGVuZEZsYXQoby50ZXh0U2VsLHtwb3NpdGlvbnM6bn0sVC50ZXh0UG9zaXRpb24odCxyLG8udGV4dCxvLm1hcmtlclNlbCkpLHUuZXh0ZW5kRmxhdChvLnRleHRVbnNlbCx7cG9zaXRpb25zOm59LFQudGV4dFBvc2l0aW9uKHQscixvLnRleHQsby5tYXJrZXJVbnNlbCkpKSxvfSh0LDAsZSx3LHYsXyksej1DKDAsYyk7cmV0dXJuIHgoYSxlKSxwP0wubWFya2VyJiYoUz0yKihMLm1hcmtlci5zaXplQXZnfHxNYXRoLm1heChMLm1hcmtlci5zaXplLDMpKSk6Uz1tKGUsZikseSh0LGUscyxsLHYsXyxTKSxMLmVycm9yWCYmRShlLHMsTC5lcnJvclgpLEwuZXJyb3JZJiZFKGUsbCxMLmVycm9yWSksTC5maWxsJiYhei5maWxsMmQmJih6LmZpbGwyZD0hMCksTC5tYXJrZXImJiF6LnNjYXR0ZXIyZCYmKHouc2NhdHRlcjJkPSEwKSxMLmxpbmUmJiF6LmxpbmUyZCYmKHoubGluZTJkPSEwKSwhTC5lcnJvclgmJiFMLmVycm9yWXx8ei5lcnJvcjJkfHwoei5lcnJvcjJkPSEwKSxMLnRleHQmJiF6LmdsVGV4dCYmKHouZ2xUZXh0PSEwKSxMLm1hcmtlciYmKEwubWFya2VyLnNuYXA9Zy50cmVlfHxNKSx6LmxpbmVPcHRpb25zLnB1c2goTC5saW5lKSx6LmVycm9yWE9wdGlvbnMucHVzaChMLmVycm9yWCksei5lcnJvcllPcHRpb25zLnB1c2goTC5lcnJvclkpLHouZmlsbE9wdGlvbnMucHVzaChMLmZpbGwpLHoubWFya2VyT3B0aW9ucy5wdXNoKEwubWFya2VyKSx6Lm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKEwubWFya2VyU2VsKSx6Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTC5tYXJrZXJVbnNlbCksei50ZXh0T3B0aW9ucy5wdXNoKEwudGV4dCksei50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goTC50ZXh0U2VsKSx6LnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKEwudGV4dFVuc2VsKSxnLl9zY2VuZT16LGcuaW5kZXg9ei5jb3VudCxnLng9dixnLnk9XyxnLnBvc2l0aW9ucz13LHouY291bnQrKyxbe3g6ITEseTohMSx0OmcsdHJhY2U6ZX1dfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aCl7dmFyIG8scyxjPXQuX2Z1bGxMYXlvdXQsaD1lLl9zY2VuZSxwPWUueGF4aXMsZD1lLnlheGlzO2lmKGgpaWYoZih0LFsiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIsIk9FU19lbGVtZW50X2luZGV4X3VpbnQiXSkpe3ZhciB2PWMuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKF8odCxlLHIpLGguZGlydHkpe2lmKCEwPT09aC5lcnJvcjJkJiYoaC5lcnJvcjJkPWEodikpLCEwPT09aC5saW5lMmQmJihoLmxpbmUyZD1pKHYpKSwhMD09PWguc2NhdHRlcjJkJiYoaC5zY2F0dGVyMmQ9bih2KSksITA9PT1oLmZpbGwyZCYmKGguZmlsbDJkPWkodikpLCEwPT09aC5nbFRleHQpZm9yKGguZ2xUZXh0PW5ldyBBcnJheShoLmNvdW50KSxvPTA7bzxoLmNvdW50O28rKyloLmdsVGV4dFtvXT1uZXcgbCh2KTtpZihoLmdsVGV4dCl7aWYoaC5jb3VudD5oLmdsVGV4dC5sZW5ndGgpe3ZhciBtPWguY291bnQtaC5nbFRleHQubGVuZ3RoO2ZvcihvPTA7bzxtO28rKyloLmdsVGV4dC5wdXNoKG5ldyBsKHYpKX1lbHNlIGlmKGguY291bnQ8aC5nbFRleHQubGVuZ3RoKXt2YXIgeT1oLmdsVGV4dC5sZW5ndGgtaC5jb3VudDtoLmdsVGV4dC5zcGxpY2UoaC5jb3VudCx5KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9Zm9yKG89MDtvPGguY291bnQ7bysrKWguZ2xUZXh0W29dLnVwZGF0ZShoLnRleHRPcHRpb25zW29dKX1pZihoLmxpbmUyZCYmKGgubGluZTJkLnVwZGF0ZShoLmxpbmVPcHRpb25zKSxoLmxpbmVPcHRpb25zPWgubGluZU9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe2lmKHQmJnQucG9zaXRpb25zKXtmb3IodmFyIGU9dC5wb3NpdGlvbnMscj0wO3I8ZS5sZW5ndGgmJihpc05hTihlW3JdKXx8aXNOYU4oZVtyKzFdKSk7KXIrPTI7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj5yJiYoaXNOYU4oZVtuXSl8fGlzTmFOKGVbbisxXSkpOyluLT0yO3QucG9zaXRpb25zPWUuc2xpY2UocixuKzIpfXJldHVybiB0fSksaC5saW5lMmQudXBkYXRlKGgubGluZU9wdGlvbnMpKSxoLmVycm9yMmQpe3ZhciB4PShoLmVycm9yWE9wdGlvbnN8fFtdKS5jb25jYXQoaC5lcnJvcllPcHRpb25zfHxbXSk7aC5lcnJvcjJkLnVwZGF0ZSh4KX1oLnNjYXR0ZXIyZCYmaC5zY2F0dGVyMmQudXBkYXRlKGgubWFya2VyT3B0aW9ucyksaC5maWxsT3JkZXI9dS5yZXBlYXQobnVsbCxoLmNvdW50KSxoLmZpbGwyZCYmKGguZmlsbE9wdGlvbnM9aC5maWxsT3B0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXt2YXIgbj1yW2VdO2lmKHQmJm4mJm5bMF0mJm5bMF0udHJhY2Upe3ZhciBpLGEsbz1uWzBdLHM9by50cmFjZSxsPW8udCxjPWgubGluZU9wdGlvbnNbZV0sdT1bXTtzLl9vd25maWxsJiZ1LnB1c2goZSkscy5fbmV4dHRyYWNlJiZ1LnB1c2goZSsxKSx1Lmxlbmd0aCYmKGguZmlsbE9yZGVyW2VdPXUpO3ZhciBmLHAsZD1bXSxnPWMmJmMucG9zaXRpb25zfHxsLnBvc2l0aW9ucztpZigidG96ZXJveSI9PT1zLmZpbGwpe2ZvcihmPTA7ZjxnLmxlbmd0aCYmaXNOYU4oZ1tmKzFdKTspZis9Mjtmb3IocD1nLmxlbmd0aC0yO3A+ZiYmaXNOYU4oZ1twKzFdKTspcC09MjswIT09Z1tmKzFdJiYoZD1bZ1tmXSwwXSksZD1kLmNvbmNhdChnLnNsaWNlKGYscCsyKSksMCE9PWdbcCsxXSYmKGQ9ZC5jb25jYXQoW2dbcF0sMF0pKX1lbHNlIGlmKCJ0b3plcm94Ij09PXMuZmlsbCl7Zm9yKGY9MDtmPGcubGVuZ3RoJiZpc05hTihnW2ZdKTspZis9Mjtmb3IocD1nLmxlbmd0aC0yO3A+ZiYmaXNOYU4oZ1twXSk7KXAtPTI7MCE9PWdbZl0mJihkPVswLGdbZisxXV0pLGQ9ZC5jb25jYXQoZy5zbGljZShmLHArMikpLDAhPT1nW3BdJiYoZD1kLmNvbmNhdChbMCxnW3ArMV1dKSl9ZWxzZSBpZigidG9zZWxmIj09PXMuZmlsbHx8InRvbmV4dCI9PT1zLmZpbGwpe2ZvcihkPVtdLGk9MCxhPTA7YTxnLmxlbmd0aDthKz0yKShpc05hTihnW2FdKXx8aXNOYU4oZ1thKzFdKSkmJigoZD1kLmNvbmNhdChnLnNsaWNlKGksYSkpKS5wdXNoKGdbaV0sZ1tpKzFdKSxpPWErMik7ZD1kLmNvbmNhdChnLnNsaWNlKGkpKSxpJiZkLnB1c2goZ1tpXSxnW2krMV0pfWVsc2V7dmFyIHY9cy5fbmV4dHRyYWNlO2lmKHYpe3ZhciBtPWgubGluZU9wdGlvbnNbZSsxXTtpZihtKXt2YXIgeT1tLnBvc2l0aW9ucztpZigidG9uZXh0eSI9PT1zLmZpbGwpe2ZvcihkPWcuc2xpY2UoKSxlPU1hdGguZmxvb3IoeS5sZW5ndGgvMik7ZS0tOyl7dmFyIHg9eVsyKmVdLGI9eVsyKmUrMV07aXNOYU4oeCl8fGlzTmFOKGIpfHxkLnB1c2goeCxiKX10LmZpbGw9di5maWxsY29sb3J9fX19aWYocy5fcHJldnRyYWNlJiYidG9uZXh0Ij09PXMuX3ByZXZ0cmFjZS5maWxsKXt2YXIgXz1oLmxpbmVPcHRpb25zW2UtMV0ucG9zaXRpb25zLHc9ZC5sZW5ndGgvMixrPVtpPXddO2ZvcihhPTA7YTxfLmxlbmd0aDthKz0yKShpc05hTihfW2FdKXx8aXNOYU4oX1thKzFdKSkmJihrLnB1c2goYS8yK3crMSksaT1hKzIpO2Q9ZC5jb25jYXQoXyksdC5ob2xlPWt9cmV0dXJuIHQuZmlsbG1vZGU9cy5maWxsLHQub3BhY2l0eT1zLm9wYWNpdHksdC5wb3NpdGlvbnM9ZCx0fX0pLGguZmlsbDJkLnVwZGF0ZShoLmZpbGxPcHRpb25zKSl9aC5zZWxlY3RCYXRjaD1udWxsLGgudW5zZWxlY3RCYXRjaD1udWxsO3ZhciBiPWMuZHJhZ21vZGUsdz0ibGFzc28iPT09Ynx8InNlbGVjdCI9PT1iLGs9Yy5jbGlja21vZGUuaW5kZXhPZigic2VsZWN0Iik+LTE7Zm9yKG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIFQ9cltvXVswXSxBPVQudHJhY2UsTT1ULnQsUz1NLmluZGV4LEU9QS5fbGVuZ3RoLEM9TS54LEw9TS55O2lmKEEuc2VsZWN0ZWRwb2ludHN8fHd8fGspe2lmKHd8fCh3PSEwKSxoLnNlbGVjdEJhdGNofHwoaC5zZWxlY3RCYXRjaD1bXSxoLnVuc2VsZWN0QmF0Y2g9W10pLEEuc2VsZWN0ZWRwb2ludHMpe3ZhciBPPWguc2VsZWN0QmF0Y2hbU109dS5zZWxJbmRpY2VzMnNlbFBvaW50cyhBKSxJPXt9O2ZvcihzPTA7czxPLmxlbmd0aDtzKyspSVtPW3NdXT0xO3ZhciBEPVtdO2ZvcihzPTA7czxFO3MrKylJW3NdfHxELnB1c2gocyk7aC51bnNlbGVjdEJhdGNoW1NdPUR9dmFyIFA9TS54cHg9bmV3IEFycmF5KEUpLFI9TS55cHg9bmV3IEFycmF5KEUpO2ZvcihzPTA7czxFO3MrKylQW3NdPXAuYzJwKENbc10pLFJbc109ZC5jMnAoTFtzXSl9ZWxzZSBNLnhweD1NLnlweD1udWxsfXc/KGguc2VsZWN0MmR8fChoLnNlbGVjdDJkPW4oYy5fZ2xjYW52YXMuZGF0YSgpWzFdLnJlZ2wpKSxoLnNjYXR0ZXIyZCYmaC5zZWxlY3RCYXRjaCYmaC5zZWxlY3RCYXRjaC5sZW5ndGgmJmguc2NhdHRlcjJkLnVwZGF0ZShoLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBoLnNlbGVjdEJhdGNoW2VdP3Q6bnVsbH0pKSxoLnNlbGVjdDJkJiYoaC5zZWxlY3QyZC51cGRhdGUoaC5tYXJrZXJPcHRpb25zKSxoLnNlbGVjdDJkLnVwZGF0ZShoLm1hcmtlclNlbGVjdGVkT3B0aW9ucykpLGguZ2xUZXh0JiZyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9KCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e307Zy5oYXNUZXh0KGUpJiZ6KHQpfSkpOmguc2NhdHRlcjJkJiZoLnNjYXR0ZXIyZC51cGRhdGUoaC5tYXJrZXJPcHRpb25zKTt2YXIgRj17dmlld3BvcnQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX3NpemUsaT10LndpZHRoLGE9dC5oZWlnaHQ7cmV0dXJuW24ubCtlLmRvbWFpblswXSpuLncsbi5iK3IuZG9tYWluWzBdKm4uaCxpLW4uci0oMS1lLmRvbWFpblsxXSkqbi53LGEtbi50LSgxLXIuZG9tYWluWzFdKSpuLmhdfShjLHAsZCkscmFuZ2U6WyhwLl9ybHx8cC5yYW5nZSlbMF0sKGQuX3JsfHxkLnJhbmdlKVswXSwocC5fcmx8fHAucmFuZ2UpWzFdLChkLl9ybHx8ZC5yYW5nZSlbMV1dfSxCPXUucmVwZWF0KEYsaC5jb3VudCk7aC5maWxsMmQmJmguZmlsbDJkLnVwZGF0ZShCKSxoLmxpbmUyZCYmaC5saW5lMmQudXBkYXRlKEIpLGguZXJyb3IyZCYmaC5lcnJvcjJkLnVwZGF0ZShCLmNvbmNhdChCKSksaC5zY2F0dGVyMmQmJmguc2NhdHRlcjJkLnVwZGF0ZShCKSxoLnNlbGVjdDJkJiZoLnNlbGVjdDJkLnVwZGF0ZShCKSxoLmdsVGV4dCYmaC5nbFRleHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwZGF0ZShGKX0pfWVsc2UgaC5pbml0KCl9fSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD10LmNkLGQ9cFswXS50LGc9cFswXS50cmFjZSx2PXQueGEsbT10LnlhLHk9ZC54LHg9ZC55LGI9di5jMnAoZSksXz1tLmMycChyKSx3PXQuZGlzdGFuY2U7aWYoZC50cmVlKXt2YXIgaz12LnAyYyhiLXcpLFQ9di5wMmMoYit3KSxBPW0ucDJjKF8tdyksTT1tLnAyYyhfK3cpO2k9IngiPT09bj9kLnRyZWUucmFuZ2UoTWF0aC5taW4oayxUKSxNYXRoLm1pbihtLl9ybFswXSxtLl9ybFsxXSksTWF0aC5tYXgoayxUKSxNYXRoLm1heChtLl9ybFswXSxtLl9ybFsxXSkpOmQudHJlZS5yYW5nZShNYXRoLm1pbihrLFQpLE1hdGgubWluKEEsTSksTWF0aC5tYXgoayxUKSxNYXRoLm1heChBLE0pKX1lbHNle2lmKCFkLmlkcylyZXR1cm5bdF07aT1kLmlkc312YXIgUz13O2lmKCJ4Ij09PW4pZm9yKGw9MDtsPGkubGVuZ3RoO2wrKylvPXlbaVtsXV0sKGM9TWF0aC5hYnModi5jMnAobyktYikpPFMmJihTPWMsdT1tLmMycCh4W2lbbF1dKS1fLGg9TWF0aC5zcXJ0KGMqYyt1KnUpLGE9aVtsXSk7ZWxzZSBmb3IobD0wO2w8aS5sZW5ndGg7bCsrKW89eVtpW2xdXSxzPXhbaVtsXV0sYz12LmMycChvKS1iLHU9bS5jMnAocyktXywoZj1NYXRoLnNxcnQoYypjK3UqdSkpPFMmJihTPWg9ZixhPWlbbF0pO3JldHVybiB0LmluZGV4PWEsdC5kaXN0YW5jZT1TLHQuZHh5PWgsdm9pZCAwPT09YT9bdF06KEwodCx5LHgsZyksW3RdKX0sc2VsZWN0UG9pbnRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jZCxuPVtdLGk9clswXS50cmFjZSxhPXJbMF0udCxvPWkuX2xlbmd0aCxsPWEueCxjPWEueSx1PWEuX3NjZW5lO2lmKCF1KXJldHVybiBuO3ZhciBmPWcuaGFzVGV4dChpKSxoPWcuaGFzTWFya2VycyhpKSxwPSFoJiYhZjtpZighMCE9PWkudmlzaWJsZXx8cClyZXR1cm4gbjt2YXIgZCx2PW51bGwsbT1udWxsO2lmKCExPT09ZXx8ZS5kZWdlbmVyYXRlKW09cyhvKTtlbHNlIGZvcih2PVtdLG09W10sZD0wO2Q8bztkKyspZS5jb250YWlucyhbYS54cHhbZF0sYS55cHhbZF1dLCExLGQsdCk/KHYucHVzaChkKSxuLnB1c2goe3BvaW50TnVtYmVyOmQseDpsW2RdLHk6Y1tkXX0pKTptLnB1c2goZCk7aWYodS5zZWxlY3RCYXRjaHx8KHUuc2VsZWN0QmF0Y2g9W10sdS51bnNlbGVjdEJhdGNoPVtdKSwhdS5zZWxlY3RCYXRjaFthLmluZGV4XSl7Zm9yKGQ9MDtkPHUuY291bnQ7ZCsrKXUuc2VsZWN0QmF0Y2hbZF09W10sdS51bnNlbGVjdEJhdGNoW2RdPVtdO2gmJnUuc2NhdHRlcjJkLnVwZGF0ZSh1Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zKX1yZXR1cm4gdS5zZWxlY3RCYXRjaFthLmluZGV4XT12LHUudW5zZWxlY3RCYXRjaFthLmluZGV4XT1tLGYmJnoociksbn0sc2NlbmVVcGRhdGU6QyxjYWxjSG92ZXI6TCxtZXRhOnt9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjY3NiwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6NzEzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NzQ3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vc2NhdHRlci9jYWxjIjoxMDUyLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTA1NCwiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0cyI6MTA1NywiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTksIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDYxLCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzIjoxMDY3LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTA2OSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiLi9hdHRyaWJ1dGVzIjoxMTAwLCIuL2NvbnN0YW50cyI6MTEwMSwiLi9jb252ZXJ0IjoxMTAyLCIuL2RlZmF1bHRzIjoxMTAzLCJhcnJheS1yYW5nZSI6NTcsImdsLXRleHQiOjMxMywicG9pbnQtY2x1c3RlciI6NDYxLCJyZWdsLWVycm9yMmQiOjQ4MiwicmVnbC1saW5lMmQiOjQ4MywicmVnbC1zY2F0dGVyMmQiOjQ4NH1dLDExMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyIpLGE9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsZj1pLmxpbmUsaD1pLm1hcmtlcjtlLmV4cG9ydHM9dSh7bG9uOmkubG9uLGxhdDppLmxhdCxtb2RlOmMoe30sYS5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6Yyh7fSxhLnRleHQse30pLGhvdmVydGV4dDpjKHt9LGEuaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpmLmNvbG9yLHdpZHRoOmYud2lkdGh9LGNvbm5lY3RnYXBzOmEuY29ubmVjdGdhcHMsbWFya2VyOntzeW1ib2w6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxvcGFjaXR5Omgub3BhY2l0eSxzaXplOmguc2l6ZSxzaXplcmVmOmguc2l6ZXJlZixzaXplbWluOmguc2l6ZW1pbixzaXplbW9kZTpoLnNpemVtb2RlLGNvbG9yOmguY29sb3IsY29sb3JzY2FsZTpoLmNvbG9yc2NhbGUsY2F1dG86aC5jYXV0byxjbWF4OmguY21heCxjbWluOmguY21pbixjbWlkOmguY21pZCxhdXRvY29sb3JzY2FsZTpoLmF1dG9jb2xvcnNjYWxlLHJldmVyc2VzY2FsZTpoLnJldmVyc2VzY2FsZSxzaG93c2NhbGU6aC5zaG93c2NhbGUsY29sb3JiYXI6bH0sZmlsbDppLmZpbGwsZmlsbGNvbG9yOmEuZmlsbGNvbG9yLHRleHRmb250Om8ubGF5ZXJzLnN5bWJvbC50ZXh0Zm9udCx0ZXh0cG9zaXRpb246by5sYXllcnMuc3ltYm9sLnRleHRwb3NpdGlvbixzZWxlY3RlZDp7bWFya2VyOmEuc2VsZWN0ZWQubWFya2VyfSx1bnNlbGVjdGVkOnttYXJrZXI6YS51bnNlbGVjdGVkLm1hcmtlcn0saG92ZXJpbmZvOmMoe30scy5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTc4LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjczMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzQ1LCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjgwNiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxLCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEwOTF9XSwxMTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIiksdT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksZj10KCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiKTtmdW5jdGlvbiBoKCl7cmV0dXJue2dlb2pzb246by5tYWtlQmxhbmsoKSxsYXlvdXQ6e3Zpc2liaWxpdHk6Im5vbmUifSxwYWludDp7fX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gaS5pc0FycmF5T3JUeXBlZEFycmF5KHQpP2Z1bmN0aW9uKHQpe3JldHVybiB0fTp0P2Z1bmN0aW9uKCl7cmV0dXJuIHR9OmR9ZnVuY3Rpb24gZCgpe3JldHVybiIifWZ1bmN0aW9uIGcodCl7cmV0dXJuIHRbMF09PT1hfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyPXRbMF0udHJhY2UsYT0hMD09PXIudmlzaWJsZSx2PSJub25lIiE9PXIuZmlsbCxtPXUuaGFzTGluZXMocikseT11Lmhhc01hcmtlcnMocikseD11Lmhhc1RleHQociksYj15JiYiY2lyY2xlIj09PXIubWFya2VyLnN5bWJvbCxfPXkmJiJjaXJjbGUiIT09ci5tYXJrZXIuc3ltYm9sLHc9aCgpLGs9aCgpLFQ9aCgpLEE9aCgpLE09e2ZpbGw6dyxsaW5lOmssY2lyY2xlOlQsc3ltYm9sOkF9O2lmKCFhKXJldHVybiBNO2lmKCh2fHxtKSYmKGU9by5jYWxjVHJhY2VUb0xpbmVDb29yZHModCkpLHYmJih3Lmdlb2pzb249by5tYWtlUG9seWdvbihlKSx3LmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixpLmV4dGVuZEZsYXQody5wYWludCx7ImZpbGwtY29sb3IiOnIuZmlsbGNvbG9yfSkpLG0mJihrLmdlb2pzb249by5tYWtlTGluZShlKSxrLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixpLmV4dGVuZEZsYXQoay5wYWludCx7ImxpbmUtd2lkdGgiOnIubGluZS53aWR0aCwibGluZS1jb2xvciI6ci5saW5lLmNvbG9yLCJsaW5lLW9wYWNpdHkiOnIub3BhY2l0eX0pKSxiKXt2YXIgUz1mdW5jdGlvbih0KXt2YXIgZSxyLGEsbyx1PXRbMF0udHJhY2UsZj11Lm1hcmtlcixoPXUuc2VsZWN0ZWRwb2ludHMscD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5jb2xvciksZD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5zaXplKSx2PWkuaXNBcnJheU9yVHlwZWRBcnJheShmLm9wYWNpdHkpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHUub3BhY2l0eSp0fXAmJihyPXMuaGFzQ29sb3JzY2FsZSh1LCJtYXJrZXIiKT9zLm1ha2VDb2xvclNjYWxlRnVuYyhzLmV4dHJhY3RTY2FsZShmLHtjTGV0dGVyOiJjIn0pKTppLmlkZW50aXR5KTtkJiYoYT1jKHUpKTt2JiYobz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpPytpLmNvbnN0cmFpbih0LDAsMSk6MDtyZXR1cm4gbShlKX0pO3ZhciB5LHg9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGI9dFtlXSxfPWIubG9ubGF0O2lmKCFnKF8pKXt2YXIgdz17fTtyJiYody5tY2M9Yi5tY2M9cihiLm1jKSksYSYmKHcubXJjPWIubXJjPWEoYi5tcykpLG8mJih3Lm1vPW8oYi5tbykpLGgmJih3LnNlbGVjdGVkPWIuc2VsZWN0ZWR8fDApLHgucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpffSxwcm9wZXJ0aWVzOnd9KX19aWYoaClmb3IoeT1sLm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnModSksZT0wO2U8eC5sZW5ndGg7ZSsrKXt2YXIgaz14W2VdLnByb3BlcnRpZXM7eS5zZWxlY3RlZE9wYWNpdHlGbiYmKGsubW89bSh5LnNlbGVjdGVkT3BhY2l0eUZuKGspKSkseS5zZWxlY3RlZENvbG9yRm4mJihrLm1jYz15LnNlbGVjdGVkQ29sb3JGbihrKSkseS5zZWxlY3RlZFNpemVGbiYmKGsubXJjPXkuc2VsZWN0ZWRTaXplRm4oaykpfXJldHVybntnZW9qc29uOnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6eH0sbWNjOnB8fHkmJnkuc2VsZWN0ZWRDb2xvckZuP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1jYyJ9OmYuY29sb3IsbXJjOmR8fHkmJnkuc2VsZWN0ZWRTaXplRm4/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibXJjIn06KFQ9Zi5zaXplLFQvMiksbW86dnx8eSYmeS5zZWxlY3RlZE9wYWNpdHlGbj97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9Om0oZi5vcGFjaXR5KX07dmFyIFR9KHQpO1QuZ2VvanNvbj1TLmdlb2pzb24sVC5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaS5leHRlbmRGbGF0KFQucGFpbnQseyJjaXJjbGUtY29sb3IiOlMubWNjLCJjaXJjbGUtcmFkaXVzIjpTLm1yYywiY2lyY2xlLW9wYWNpdHkiOlMubW99KX1pZigoX3x8eCkmJihBLmdlb2pzb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0udHJhY2Uscj0oZS5tYXJrZXJ8fHt9KS5zeW1ib2wsbj1lLnRleHQsaT0iY2lyY2xlIiE9PXI/cChyKTpkLGE9dS5oYXNUZXh0KGUpP3Aobik6ZCxvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtnKGwubG9ubGF0KXx8by5wdXNoKHt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOmwubG9ubGF0fSxwcm9wZXJ0aWVzOntzeW1ib2w6aShsLm14KSx0ZXh0OmEobC50eCl9fSl9cmV0dXJue3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpvfX0odCksaS5leHRlbmRGbGF0KEEubGF5b3V0LHt2aXNpYmlsaXR5OiJ2aXNpYmxlIiwiaWNvbi1pbWFnZSI6IntzeW1ib2x9LTE1IiwidGV4dC1maWVsZCI6Int0ZXh0fSJ9KSxfJiYoaS5leHRlbmRGbGF0KEEubGF5b3V0LHsiaWNvbi1zaXplIjpyLm1hcmtlci5zaXplLzEwfSksaS5leHRlbmRGbGF0KEEucGFpbnQseyJpY29uLW9wYWNpdHkiOnIub3BhY2l0eSpyLm1hcmtlci5vcGFjaXR5LCJpY29uLWNvbG9yIjpyLm1hcmtlci5jb2xvcn0pKSx4KSl7dmFyIEU9KHIubWFya2VyfHx7fSkuc2l6ZSxDPWYoci50ZXh0cG9zaXRpb24sRSk7aS5leHRlbmRGbGF0KEEubGF5b3V0LHsidGV4dC1zaXplIjpyLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjpDLmFuY2hvciwidGV4dC1vZmZzZXQiOkMub2Zmc2V0fSksaS5leHRlbmRGbGF0KEEucGFpbnQseyJ0ZXh0LWNvbG9yIjpyLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOnIub3BhY2l0eX0pfXJldHVybiBNfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjU4OSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo2OTQsIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0cyI6ODAzLCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTA2OCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA3NSwiZmFzdC1pc251bWVyaWMiOjIyMX1dLDExMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWlmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKCJsb24iKXx8W10saT1yKCJsYXQiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCk7cmV0dXJuIGUuX2xlbmd0aD1hLGF9KDAsZSxmKSl7aWYoZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJtb2RlIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxmLHtub0Rhc2g6ITB9KSxmKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkpe2EodCxlLHIsdSxmLHtub0xpbmU6ITB9KTt2YXIgaD1lLm1hcmtlcjsiY2lyY2xlIiE9PWguc3ltYm9sJiYobi5pc0FycmF5T3JUeXBlZEFycmF5KGguc2l6ZSkmJihoLnNpemU9aC5zaXplWzBdKSxuLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5jb2xvcikmJihoLmNvbG9yPWguY29sb3JbMF0pKX1pLmhhc1RleHQoZSkmJnModCxlLHUsZix7bm9TZWxlY3Q6ITB9KSxmKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGYpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwNjAsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTA2NCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNzAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA3NiwiLi9hdHRyaWJ1dGVzIjoxMTA1fV0sMTEwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdH19LHt9XSwxMTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxvPXQoIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0Iikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9dC5jZCxjPWxbMF0udHJhY2UsdT10LnhhLGY9dC55YSxoPXQuc3VicGxvdCxwPTM2MCooZT49MD9NYXRoLmZsb29yKChlKzE4MCkvMzYwKTpNYXRoLmNlaWwoKGUtMTgwKS8zNjApKSxkPWUtcDtpZihuLmdldENsb3Nlc3QobCxmdW5jdGlvbih0KXt2YXIgZT10LmxvbmxhdDtpZihlWzBdPT09cylyZXR1cm4gMS8wO3ZhciBuPWkubW9kSGFsZihlWzBdLDM2MCksYT1lWzFdLG89aC5wcm9qZWN0KFtuLGFdKSxsPW8ueC11LmMycChbZCxhXSksYz1vLnktZi5jMnAoW24scl0pLHA9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChsKmwrYypjKS1wLDEtMy9wKX0sdCksITEhPT10LmluZGV4KXt2YXIgZz1sW3QuaW5kZXhdLHY9Zy5sb25sYXQsbT1baS5tb2RIYWxmKHZbMF0sMzYwKStwLHZbMV1dLHk9dS5jMnAobSkseD1mLmMycChtKSxiPWcubXJjfHwxO3JldHVybiB0LngwPXktYix0LngxPXkrYix0LnkwPXgtYix0LnkxPXgrYix0LmNvbG9yPWEoYyxnKSx0LmV4dHJhVGV4dD1mdW5jdGlvbih0LGUscil7aWYodC5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgbj0oZS5oaXx8dC5ob3ZlcmluZm8pLnNwbGl0KCIrIiksaT0tMSE9PW4uaW5kZXhPZigiYWxsIiksYT0tMSE9PW4uaW5kZXhPZigibG9uIikscz0tMSE9PW4uaW5kZXhPZigibGF0IiksbD1lLmxvbmxhdCxjPVtdO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQrIlx4YjAifWl8fGEmJnM/Yy5wdXNoKCIoIit1KGxbMF0pKyIsICIrdShsWzFdKSsiKSIpOmE/Yy5wdXNoKHIubG9uK3UobFswXSkpOnMmJmMucHVzaChyLmxhdCt1KGxbMV0pKTsoaXx8LTEhPT1uLmluZGV4T2YoInRleHQiKSkmJm8oZSx0LGMpO3JldHVybiBjLmpvaW4oIjxicj4iKX0oYyxnLGxbMF0udC5sYWJlbHMpLHQuaG92ZXJ0ZW1wbGF0ZT1jLmhvdmVydGVtcGxhdGUsW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjE2LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCI6MTA1OSwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjEwNjF9XSwxMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbi5jYWxjPXQoIi4uL3NjYXR0ZXJnZW8vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLmV2ZW50RGF0YT10KCIuL2V2ZW50X2RhdGEiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4uc3R5bGU9ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZShlKX0sbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzY2F0dGVybWFwYm94IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLG4uY2F0ZWdvcmllcz1bIm1hcGJveCIsImdsIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVybGlrZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9tYXBib3giOjgwNCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwNjksIi4uL3NjYXR0ZXJnZW8vY2FsYyI6MTA5MiwiLi9hdHRyaWJ1dGVzIjoxMTA1LCIuL2RlZmF1bHRzIjoxMTA3LCIuL2V2ZW50X2RhdGEiOjExMDgsIi4vaG92ZXIiOjExMDksIi4vcGxvdCI6MTExMSwiLi9zZWxlY3QiOjExMTJ9XSwxMTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29udmVydCIpO2Z1bmN0aW9uIGkodCxlKXt0aGlzLnN1YnBsb3Q9dCx0aGlzLnVpZD1lLHRoaXMuc291cmNlSWRzPXtmaWxsOmUrIi1zb3VyY2UtZmlsbCIsbGluZTplKyItc291cmNlLWxpbmUiLGNpcmNsZTplKyItc291cmNlLWNpcmNsZSIsc3ltYm9sOmUrIi1zb3VyY2Utc3ltYm9sIn0sdGhpcy5sYXllcklkcz17ZmlsbDplKyItbGF5ZXItZmlsbCIsbGluZTplKyItbGF5ZXItbGluZSIsY2lyY2xlOmUrIi1sYXllci1jaXJjbGUiLHN5bWJvbDplKyItbGF5ZXItc3ltYm9sIn0sdGhpcy5vcmRlcj1bImZpbGwiLCJsaW5lIiwiY2lyY2xlIiwic3ltYm9sIl19dmFyIGE9aS5wcm90b3R5cGU7YS5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXt0aGlzLnN1YnBsb3QubWFwLmFkZFNvdXJjZSh0aGlzLnNvdXJjZUlkc1t0XSx7dHlwZToiZ2VvanNvbiIsZGF0YTplLmdlb2pzb259KX0sYS5zZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0pLnNldERhdGEoZS5nZW9qc29uKX0sYS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuYWRkTGF5ZXIoe3R5cGU6dCxpZDp0aGlzLmxheWVySWRzW3RdLHNvdXJjZTp0aGlzLnNvdXJjZUlkc1t0XSxsYXlvdXQ6ZS5sYXlvdXQscGFpbnQ6ZS5wYWludH0pfSxhLnVwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdWJwbG90LHI9bih0KSxpPTA7aTx0aGlzLm9yZGVyLmxlbmd0aDtpKyspe3ZhciBhPXRoaXMub3JkZXJbaV0sbz1yW2FdO2Uuc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW2FdLCJzZXRMYXlvdXRQcm9wZXJ0eSIsby5sYXlvdXQpLCJ2aXNpYmxlIj09PW8ubGF5b3V0LnZpc2liaWxpdHkmJih0aGlzLnNldFNvdXJjZURhdGEoYSxvKSxlLnNldE9wdGlvbnModGhpcy5sYXllcklkc1thXSwic2V0UGFpbnRQcm9wZXJ0eSIsby5wYWludCkpfXRbMF0udHJhY2UuX2dsVHJhY2U9dGhpc30sYS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT0wO2U8dGhpcy5vcmRlci5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLm9yZGVyW2VdO3QucmVtb3ZlTGF5ZXIodGhpcy5sYXllcklkc1tyXSksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZHNbcl0pfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBpKHQsZVswXS50cmFjZS51aWQpLGE9bihlKSxvPTA7bzxyLm9yZGVyLmxlbmd0aDtvKyspe3ZhciBzPXIub3JkZXJbb10sbD1hW3NdO3IuYWRkU291cmNlKHMsbCksci5hZGRMYXllcihzLGwpfXJldHVybiBlWzBdLnRyYWNlLl9nbFRyYWNlPXIscn19LHsiLi9jb252ZXJ0IjoxMTA2fV0sMTExMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbz10LmNkLHM9dC54YXhpcyxsPXQueWF4aXMsYz1bXSx1PW9bMF0udHJhY2U7aWYoIWkuaGFzTWFya2Vycyh1KSlyZXR1cm5bXTtpZighMT09PWUpZm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylvW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8by5sZW5ndGg7cisrKXt2YXIgZj1vW3JdLGg9Zi5sb25sYXQ7aWYoaFswXSE9PWEpe3ZhciBwPVtuLm1vZEhhbGYoaFswXSwzNjApLGhbMV1dLGQ9W3MuYzJwKHApLGwuYzJwKHApXTtlLmNvbnRhaW5zKGQsbnVsbCxyLHQpPyhjLnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmhbMF0sbGF0OmhbMV19KSxmLnNlbGVjdGVkPTEpOmYuc2VsZWN0ZWQ9MH19cmV0dXJuIGN9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzV9XSwxMTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9YS5saW5lO2UuZXhwb3J0cz17bW9kZTphLm1vZGUscjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx0aGV0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxyMDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkcjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSx0aGV0YTA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHRoZXRhOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0sdGhldGF1bml0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYW5zIiwiZGVncmVlcyIsImdyYWRpYW5zIl0sZGZsdDoiZGVncmVlcyIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx0ZXh0OmEudGV4dCxob3ZlcnRleHQ6YS5ob3ZlcnRleHQsbGluZTp7Y29sb3I6cy5jb2xvcix3aWR0aDpzLndpZHRoLGRhc2g6cy5kYXNoLHNoYXBlOmkoe30scy5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6cy5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLG1hcmtlcjphLm1hcmtlcixjbGlwb25heGlzOmkoe30sYS5jbGlwb25heGlzLHtkZmx0OiExfSksdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLHRleHRmb250OmEudGV4dGZvbnQsZmlsbDppKHt9LGEuZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdLGRmbHQ6Im5vbmUifSksZmlsbGNvbG9yOmEuZmlsbGNvbG9yLGhvdmVyaW5mbzppKHt9LG8uaG92ZXJpbmZvLHtmbGFnczpbInIiLCJ0aGV0YSIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOmEuaG92ZXJvbixob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDphLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6YS51bnNlbGVjdGVkfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc0NSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDUxfV0sMTExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHM9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxjPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHU9ZS5zdWJwbG90LGY9clt1XS5yYWRpYWxheGlzLGg9clt1XS5hbmd1bGFyYXhpcyxwPWYubWFrZUNhbGNkYXRhKGUsInIiKSxkPWgubWFrZUNhbGNkYXRhKGUsInRoZXRhIiksZz1lLl9sZW5ndGgsdj1uZXcgQXJyYXkoZyksbT0wO208ZzttKyspe3ZhciB5PXBbbV0seD1kW21dLGI9dlttXT17fTtuKHkpJiZuKHgpPyhiLnI9eSxiLnRoZXRhPXgpOmIucj1pfXZhciBfPWMoZSxnKTtyZXR1cm4gZS5fZXh0cmVtZXMueD1hLmZpbmRFeHRyZW1lcyhmLHAse3BwYWQ6X30pLG8odCxlKSxzKHYsZSksbCh2LGUpLHZ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNTAsIi4uL3NjYXR0ZXIvY2FsYyI6MTA1MiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTA1MywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwNTQsImZhc3QtaXNudW1lcmljIjoyMjF9XSwxMTE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksZj10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpLGE9bigiciIpLG89bigidGhldGEiKTtpZihhKW8/aT1NYXRoLm1pbihhLmxlbmd0aCxvLmxlbmd0aCk6KGk9YS5sZW5ndGgsbigidGhldGEwIiksbigiZHRoZXRhIikpO2Vsc2V7aWYoIW8pcmV0dXJuIDA7aT1lLnRoZXRhLmxlbmd0aCxuKCJyMCIpLG4oImRyIil9cmV0dXJuIGUuX2xlbmd0aD1pLGl9ZS5leHBvcnRzPXtoYW5kbGVSVGhldGFEZWZhdWx0czpoLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX12YXIgZz1oKDAsZSwwLGQpO2lmKGcpe2QoInRoZXRhdW5pdCIpLGQoIm1vZGUiLGc8dT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksZCgidGV4dCIpLGQoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJmQoImhvdmVydGVtcGxhdGUiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscixwLGQpLHModCxlLGQpLGQoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscixwLGQse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiZsKHQsZSxwLGQpO3ZhciB2PVtdOyhpLmhhc01hcmtlcnMoZSl8fGkuaGFzVGV4dChlKSkmJihkKCJjbGlwb25heGlzIiksZCgibWFya2VyLm1heGRpc3BsYXllZCIpLHYucHVzaCgicG9pbnRzIikpLGQoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJihjKHQsZSxyLGQpLGkuaGFzTGluZXMoZSl8fHModCxlLGQpKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHYucHVzaCgiZmlsbHMiKSxkKCJob3Zlcm9uIix2LmpvaW4oIisiKXx8InBvaW50cyIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGQpfWVsc2UgZS52aXNpYmxlPSExfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDU1LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA2MCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDY0LCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEwNjYsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDcwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDc1LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNzYsIi4vYXR0cmlidXRlcyI6MTExM31dLDExMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIG8odCxlLHIsbil7dmFyIG89ci5yYWRpYWxBeGlzLHM9ci5hbmd1bGFyQXhpcztvLl9ob3ZlcnRpdGxlPSJyIixzLl9ob3ZlcnRpdGxlPSJcdTAzYjgiO3ZhciBsPXQuaGl8fGUuaG92ZXJpbmZvLGM9W107ZnVuY3Rpb24gdSh0LGUpe2MucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIraS50aWNrVGV4dCh0LGUsImhvdmVyIikudGV4dCl9aWYoIWUuaG92ZXJ0ZW1wbGF0ZSl7dmFyIGY9bC5zcGxpdCgiKyIpO2lmKC0xIT09Zi5pbmRleE9mKCJhbGwiKSYmKGY9WyJyIiwidGhldGEiLCJ0ZXh0Il0pLC0xIT09Zi5pbmRleE9mKCJyIikmJnUobyxvLmMybCh0LnIpKSwtMSE9PWYuaW5kZXhPZigidGhldGEiKSl7dmFyIGg9dC50aGV0YTt1KHMsImRlZ3JlZXMiPT09cy50aGV0YXVuaXQ/YS5yYWQyZGVnKGgpOmgpfS0xIT09Zi5pbmRleE9mKCJ0ZXh0IikmJm4udGV4dCYmKGMucHVzaChuLnRleHQpLGRlbGV0ZSBuLnRleHQpLG4uZXh0cmFUZXh0PWMuam9pbigiPGJyPiIpfX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxlLHIsaSk7aWYoYSYmITEhPT1hWzBdLmluZGV4KXt2YXIgcz1hWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpcmV0dXJuIGE7dmFyIGw9dC5zdWJwbG90LGM9cy5jZFtzLmluZGV4XSx1PXMudHJhY2U7aWYobC5pc1B0SW5zaWRlKGMpKXJldHVybiBzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwLG8oYyx1LGwscykscy5ob3ZlcnRlbXBsYXRlPXUuaG92ZXJ0ZW1wbGF0ZSxhfX0sbWFrZUhvdmVyUG9pbnRUZXh0Om99fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9zY2F0dGVyL2hvdmVyIjoxMDYyfV0sMTExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVycG9sYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo4MTMsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDY5LCIuLi9zY2F0dGVyL3NlbGVjdCI6MTA3MiwiLi4vc2NhdHRlci9zdHlsZSI6MTA3NCwiLi9hdHRyaWJ1dGVzIjoxMTEzLCIuL2NhbGMiOjExMTQsIi4vZGVmYXVsdHMiOjExMTUsIi4vaG92ZXIiOjExMTYsIi4vcGxvdCI6MTExOH1dLDExMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIiksbz17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6ZS5mcmFtZXdvcmssbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbH0scz1lLnJhZGlhbEF4aXMsbD1lLmFuZ3VsYXJBeGlzLGM9MDtjPHIubGVuZ3RoO2MrKylmb3IodmFyIHU9cltjXSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBoPXVbZl0scD1oLnI7aWYocD09PWkpaC54PWgueT1pO2Vsc2V7dmFyIGQ9cy5jMmcocCksZz1sLmMyZyhoLnRoZXRhKTtoLng9ZCpNYXRoLmNvcyhnKSxoLnk9ZCpNYXRoLnNpbihnKX19bih0LG8scixhKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6Njc3LCIuLi9zY2F0dGVyL3Bsb3QiOjEwNzF9XSwxMTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17bW9kZTpuLm1vZGUscjpuLnIsdGhldGE6bi50aGV0YSxyMDpuLnIwLGRyOm4uZHIsdGhldGEwOm4udGhldGEwLGR0aGV0YTpuLmR0aGV0YSx0aGV0YXVuaXQ6bi50aGV0YXVuaXQsdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlLGxpbmU6aS5saW5lLGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsbWFya2VyOmkubWFya2VyLGZpbGw6aS5maWxsLGZpbGxjb2xvcjppLmZpbGxjb2xvcix0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6aS50ZXh0Zm9udCxob3ZlcmluZm86bi5ob3ZlcmluZm8sc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZH19LHsiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjExMDAsIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxMTEzfV0sMTEyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKS5QVFNfTElORVNPTkxZLGY9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX12YXIgZD1hKHQsZSxoLHApO2Q/KHAoInRoZXRhdW5pdCIpLHAoIm1vZGUiLGQ8dT8ibGluZXMrbWFya2VycyI6ImxpbmVzIikscCgidGV4dCIpLHAoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJnAoImhvdmVydGVtcGxhdGUiKSxpLmhhc0xpbmVzKGUpJiYocyh0LGUscixoLHApLHAoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmbyh0LGUscixoLHApLGkuaGFzVGV4dChlKSYmbCh0LGUsaCxwKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZjKHQsZSxyLHApLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTA1NSwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwNjAsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTA2NCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNzAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA3NiwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIjoxMTE1LCIuL2F0dHJpYnV0ZXMiOjExMTl9XSwxMTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBvaW50LWNsdXN0ZXIiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi9zY2F0dGVyZ2wiKSxvPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIikscz10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxsPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IiksYz10KCIuLi8uLi9saWIiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZj10KCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiKS5tYWtlSG92ZXJQb2ludFRleHQsaD10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJwb2xhcmdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9wb2xhciIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJwb2xhciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUuc3VicGxvdCxpPXJbbl0ucmFkaWFsYXhpcyxhPXJbbl0uYW5ndWxhcmF4aXMsYz1pLm1ha2VDYWxjZGF0YShlLCJyIiksZj1hLm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLHA9ZS5fbGVuZ3RoLGQ9e307cDxjLmxlbmd0aCYmKGM9Yy5zbGljZSgwLHApKSxwPGYubGVuZ3RoJiYoZj1mLnNsaWNlKDAscCkpLGQucj1jLGQudGhldGE9ZixvKHQsZSk7dmFyIGcsdj1kLm9wdHM9bC5zdHlsZSh0LGUpO3JldHVybiBwPGg/Zz1zKGUscCk6di5tYXJrZXImJihnPTIqKHYubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KHYubWFya2VyLnNpemUsMykpKSxlLl9leHRyZW1lcy54PXUuZmluZEV4dHJlbWVzKGksYyx7cHBhZDpnfSksW3t4OiExLHk6ITEsdDpkLHRyYWNlOmV9XX0scGxvdDpmdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciBvPWUucmFkaWFsQXhpcyxzPWUuYW5ndWxhckF4aXMsdT1hLnNjZW5lVXBkYXRlKHQsZSk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihyKXtpZihyJiZyWzBdJiZyWzBdLnRyYWNlKXt2YXIgYSxmPXJbMF0scD1mLnRyYWNlLGQ9Zi50LGc9cC5fbGVuZ3RoLHY9ZC5yLG09ZC50aGV0YSx5PWQub3B0cyx4PXYuc2xpY2UoKSxiPW0uc2xpY2UoKTtmb3IoYT0wO2E8di5sZW5ndGg7YSsrKWUuaXNQdEluc2lkZSh7cjp2W2FdLHRoZXRhOm1bYV19KXx8KHhbYV09TmFOLGJbYV09TmFOKTt2YXIgXz1uZXcgQXJyYXkoMipnKSx3PUFycmF5KGcpLGs9QXJyYXkoZyk7Zm9yKGE9MDthPGc7YSsrKXt2YXIgVCxBLE09eFthXTtpZihpKE0pKXt2YXIgUz1vLmMyZyhNKSxFPXMuYzJnKGJbYV0scC50aGV0YXVuaXQpO1Q9UypNYXRoLmNvcyhFKSxBPVMqTWF0aC5zaW4oRSl9ZWxzZSBUPUE9TmFOO3dbYV09X1syKmFdPVQsa1thXT1fWzIqYSsxXT1BfWQudHJlZT1uKF8pLHkubWFya2VyJiZnPj1oJiYoeS5tYXJrZXIuY2x1c3Rlcj1kLnRyZWUpLHkubWFya2VyJiYoeS5tYXJrZXJTZWwucG9zaXRpb25zPXkubWFya2VyVW5zZWwucG9zaXRpb25zPXkubWFya2VyLnBvc2l0aW9ucz1fKSx5LmxpbmUmJl8ubGVuZ3RoPjEmJmMuZXh0ZW5kRmxhdCh5LmxpbmUsbC5saW5lUG9zaXRpb25zKHQscCxfKSkseS50ZXh0JiYoYy5leHRlbmRGbGF0KHkudGV4dCx7cG9zaXRpb25zOl99LGwudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXIpKSxjLmV4dGVuZEZsYXQoeS50ZXh0U2VsLHtwb3NpdGlvbnM6X30sbC50ZXh0UG9zaXRpb24odCxwLHkudGV4dCx5Lm1hcmtlclNlbCkpLGMuZXh0ZW5kRmxhdCh5LnRleHRVbnNlbCx7cG9zaXRpb25zOl99LGwudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJVbnNlbCkpKSx5LmZpbGwmJiF1LmZpbGwyZCYmKHUuZmlsbDJkPSEwKSx5Lm1hcmtlciYmIXUuc2NhdHRlcjJkJiYodS5zY2F0dGVyMmQ9ITApLHkubGluZSYmIXUubGluZTJkJiYodS5saW5lMmQ9ITApLHkudGV4dCYmIXUuZ2xUZXh0JiYodS5nbFRleHQ9ITApLHUubGluZU9wdGlvbnMucHVzaCh5LmxpbmUpLHUuZmlsbE9wdGlvbnMucHVzaCh5LmZpbGwpLHUubWFya2VyT3B0aW9ucy5wdXNoKHkubWFya2VyKSx1Lm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyU2VsKSx1Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goeS5tYXJrZXJVbnNlbCksdS50ZXh0T3B0aW9ucy5wdXNoKHkudGV4dCksdS50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goeS50ZXh0U2VsKSx1LnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFVuc2VsKSxkLng9dyxkLnk9ayxkLnJhd3g9dyxkLnJhd3k9ayxkLnI9dixkLnRoZXRhPW0sZC5wb3NpdGlvbnM9XyxkLl9zY2VuZT11LGQuaW5kZXg9dS5jb3VudCx1LmNvdW50Kyt9fSksYS5wbG90KHQsZSxyKX19LGhvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuY2RbMF0udCxvPWkucixzPWkudGhldGEsbD1hLmhvdmVyUG9pbnRzKHQsZSxyLG4pO2lmKGwmJiExIT09bFswXS5pbmRleCl7dmFyIGM9bFswXTtpZih2b2lkIDA9PT1jLmluZGV4KXJldHVybiBsO3ZhciB1PXQuc3VicGxvdCxoPWMuY2RbYy5pbmRleF0scD1jLnRyYWNlO2lmKGgucj1vW2MuaW5kZXhdLGgudGhldGE9c1tjLmluZGV4XSx1LmlzUHRJbnNpZGUoaCkpcmV0dXJuIGMueExhYmVsVmFsPXZvaWQgMCxjLnlMYWJlbFZhbD12b2lkIDAsZihoLHAsdSxjKSxsfX0sc2VsZWN0UG9pbnRzOmEuc2VsZWN0UG9pbnRzLG1ldGE6e319fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi8uLi9wbG90cy9wb2xhciI6ODEzLCIuLi9zY2F0dGVyL2NhbGMiOjEwNTIsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMDU0LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTA2OSwiLi4vc2NhdHRlcmdsIjoxMTA0LCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjoxMTAxLCIuLi9zY2F0dGVyZ2wvY29udmVydCI6MTEwMiwiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIjoxMTE2LCIuL2F0dHJpYnV0ZXMiOjExMTksIi4vZGVmYXVsdHMiOjExMjAsImZhc3QtaXNudW1lcmljIjoyMjEsInBvaW50LWNsdXN0ZXIiOjQ2MX1dLDExMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT1pLm1hcmtlcixmPWkubGluZSxoPXUubGluZTtlLmV4cG9ydHM9e2E6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxjOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHN1bTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6ImNhbGMifSxtb2RlOmMoe30saS5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6Yyh7fSxpLnRleHQse30pLGhvdmVydGV4dDpjKHt9LGkuaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpmLmNvbG9yLHdpZHRoOmYud2lkdGgsZGFzaDpsLHNoYXBlOmMoe30sZi5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6Zi5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGNsaXBvbmF4aXM6aS5jbGlwb25heGlzLGZpbGw6Yyh7fSxpLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0pLGZpbGxjb2xvcjppLmZpbGxjb2xvcixtYXJrZXI6Yyh7c3ltYm9sOnUuc3ltYm9sLG9wYWNpdHk6dS5vcGFjaXR5LG1heGRpc3BsYXllZDp1Lm1heGRpc3BsYXllZCxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLGxpbmU6Yyh7d2lkdGg6aC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LG8oIm1hcmtlci5saW5lIikpLGdyYWRpZW50OnUuZ3JhZGllbnQsZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIiKSx7Y29sb3JiYXI6c30pLHRleHRmb250OmkudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHNlbGVjdGVkOmkuc2VsZWN0ZWQsdW5zZWxlY3RlZDppLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsiYSIsImIiLCJjIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246aS5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6bigpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjU5NywiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA1MX1dLDExMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbD1bImEiLCJiIiwiYyJdLGM9e2E6WyJiIiwiYyJdLGI6WyJhIiwiYyJdLGM6WyJhIiwiYiJdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsZz10Ll9mdWxsTGF5b3V0W2Uuc3VicGxvdF0uc3VtLHY9ZS5zdW18fGcsbT17YTplLmEsYjplLmIsYzplLmN9O2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspaWYoIW1bZj1sW3JdXSl7Zm9yKHA9bVtjW2ZdWzBdXSxkPW1bY1tmXVsxXV0saD1uZXcgQXJyYXkocC5sZW5ndGgpLHU9MDt1PHAubGVuZ3RoO3UrKyloW3VdPXYtcFt1XS1kW3VdO21bZl09aH12YXIgeSx4LGIsXyx3LGssVD1lLl9sZW5ndGgsQT1uZXcgQXJyYXkoVCk7Zm9yKHI9MDtyPFQ7cisrKXk9bS5hW3JdLHg9bS5iW3JdLGI9bS5jW3JdLG4oeSkmJm4oeCkmJm4oYik/KDEhPT0oXz1nLygoeT0reSkrKHg9K3gpKyhiPStiKSkpJiYoeSo9Xyx4Kj1fLGIqPV8pLGs9eSx3PWIteCxBW3JdPXt4OncseTprLGE6eSxiOngsYzpifSk6QVtyXT17eDohMSx5OiExfTtyZXR1cm4gcyhlLFQpLGkodCxlKSxhKEEsZSksbyhBLGUpLEF9fSx7Ii4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDUwLCIuLi9zY2F0dGVyL2NhbGMiOjEwNTIsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjEwNTMsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMDU0LCJmYXN0LWlzbnVtZXJpYyI6MjIxfV0sMTEyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxmLHIsaSl9dmFyIGQsZz1wKCJhIiksdj1wKCJiIiksbT1wKCJjIik7aWYoZz8oZD1nLmxlbmd0aCx2PyhkPU1hdGgubWluKGQsdi5sZW5ndGgpLG0mJihkPU1hdGgubWluKGQsbS5sZW5ndGgpKSk6ZD1tP01hdGgubWluKGQsbS5sZW5ndGgpOjApOnYmJm0mJihkPU1hdGgubWluKHYubGVuZ3RoLG0ubGVuZ3RoKSksZCl7ZS5fbGVuZ3RoPWQscCgic3VtIikscCgidGV4dCIpLHAoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJnAoImhvdmVydGVtcGxhdGUiKSxwKCJtb2RlIixkPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsaCxwKSxsKHQsZSxwKSxwKCJjb25uZWN0Z2FwcyIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsaCxwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsaCxwKTt2YXIgeT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocCgiY2xpcG9uYXhpcyIpLHAoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSx5LnB1c2goInBvaW50cyIpKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYodSh0LGUscixwKSxhLmhhc0xpbmVzKGUpfHxsKHQsZSxwKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHx5LnB1c2goImZpbGxzIikscCgiaG92ZXJvbiIseS5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDU1LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA2MCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDY0LCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEwNjYsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDcwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDc1LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNzYsIi4vYXR0cmlidXRlcyI6MTEyMn1dLDExMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksbltpXSl7dmFyIGE9bltpXTt0LmE9YS5hLHQuYj1hLmIsdC5jPWEuY31lbHNlIHQuYT1lLmEsdC5iPWUuYix0LmM9ZS5jO3JldHVybiB0fX0se31dLDExMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvJiYhMSE9PW9bMF0uaW5kZXgpe3ZhciBzPW9bMF07aWYodm9pZCAwPT09cy5pbmRleCl7dmFyIGw9MS1zLnkwL3QueWEuX2xlbmd0aCxjPXQueGEuX2xlbmd0aCx1PWMqbC8yLGY9Yy11O3JldHVybiBzLngwPU1hdGgubWF4KE1hdGgubWluKHMueDAsZiksdSkscy54MT1NYXRoLm1heChNYXRoLm1pbihzLngxLGYpLHUpLG99dmFyIGg9cy5jZFtzLmluZGV4XTtzLmE9aC5hLHMuYj1oLmIscy5jPWguYyxzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1zLnN1YnBsb3QsZz1oLmhpfHxwLmhvdmVyaW5mbyx2PVtdO2lmKCFwLmhvdmVydGVtcGxhdGUpe3ZhciBtPWcuc3BsaXQoIisiKTstMSE9PW0uaW5kZXhPZigiYWxsIikmJihtPVsiYSIsImIiLCJjIl0pLC0xIT09bS5pbmRleE9mKCJhIikmJnkoZC5hYXhpcyxoLmEpLC0xIT09bS5pbmRleE9mKCJiIikmJnkoZC5iYXhpcyxoLmIpLC0xIT09bS5pbmRleE9mKCJjIikmJnkoZC5jYXhpcyxoLmMpfXJldHVybiBzLmV4dHJhVGV4dD12LmpvaW4oIjxicj4iKSxzLmhvdmVydGVtcGxhdGU9cC5ob3ZlcnRlbXBsYXRlLG99ZnVuY3Rpb24geSh0LGUpe3YucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIraS50aWNrVGV4dCh0LGUsImhvdmVyIikudGV4dCl9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzQ4LCIuLi9zY2F0dGVyL2hvdmVyIjoxMDYyfV0sMTEyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsbi5zdHlsZU9uU2VsZWN0PXQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4uc2VsZWN0UG9pbnRzPXQoIi4uL3NjYXR0ZXIvc2VsZWN0Iiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzY2F0dGVydGVybmFyeSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy90ZXJuYXJ5Iiksbi5jYXRlZ29yaWVzPVsidGVybmFyeSIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL3Rlcm5hcnkiOjgyNSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwNjksIi4uL3NjYXR0ZXIvc2VsZWN0IjoxMDcyLCIuLi9zY2F0dGVyL3N0eWxlIjoxMDc0LCIuL2F0dHJpYnV0ZXMiOjExMjIsIi4vY2FsYyI6MTEyMywiLi9kZWZhdWx0cyI6MTEyNCwiLi9ldmVudF9kYXRhIjoxMTI1LCIuL2hvdmVyIjoxMTI2LCIuL3Bsb3QiOjExMjh9XSwxMTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5wbG90Q29udGFpbmVyO2kuc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIGE9e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxwbG90OmksbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkUmVsYXRpdmU6bnVsbH0sbz1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpO24odCxhLHIsbyl9fSx7Ii4uL3NjYXR0ZXIvcGxvdCI6MTA3MX1dLDExMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuaWRSZWdleCxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9bi5tYXJrZXIsZj11LmxpbmUsaD1jKGkoIm1hcmtlci5saW5lIix7ZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7d2lkdGg6Yyh7fSxmLndpZHRoLHtlZGl0VHlwZToiY2FsYyJ9KSxlZGl0VHlwZToiY2FsYyJ9KSxwPWMoaSgibWFya2VyIikse3N5bWJvbDp1LnN5bWJvbCxzaXplOmMoe30sdS5zaXplLHtlZGl0VHlwZToibWFya2VyU2l6ZSJ9KSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLG9wYWNpdHk6dS5vcGFjaXR5LGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpoLGVkaXRUeXBlOiJjYWxjIn0pO2Z1bmN0aW9uIGQodCl7cmV0dXJue3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOnt2YWxUeXBlOiJzdWJwbG90aWQiLHJlZ2V4OnNbdF0sZWRpdFR5cGU6InBsb3QifX19cC5jb2xvci5lZGl0VHlwZT1wLmNtaW4uZWRpdFR5cGU9cC5jbWF4LmVkaXRUeXBlPSJzdHlsZSIsZS5leHBvcnRzPXtkaW1lbnNpb25zOmwoImRpbWVuc2lvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxheGlzOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1hdGNoZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0pLHRleHQ6Yyh7fSxvLnRleHQse30pLGhvdmVydGV4dDpjKHt9LG8uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOmEoKSxtYXJrZXI6cCx4YXhlczpkKCJ4IikseWF4ZXM6ZCgieSIpLGRpYWdvbmFsOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxzaG93dXBwZXJoYWxmOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xvd2VyaGFsZjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6by5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6ImNhbGMifSx1bnNlbGVjdGVkOnttYXJrZXI6by51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6by5vcGFjaXR5fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTg0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyI6NjE1LCIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjczOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzU0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTEsIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIjoxMTAwfV0sMTEzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLWxpbmUyZCIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSxvPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLmdldEZyb21JZCxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuc2hvdWxkU2hvd1plcm9MaW5lLHU9InNwbG9tIjtmdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49ci5tYXRyaXhPcHRpb25zLmRhdGEubGVuZ3RoLGk9ZS5fdmlzaWJsZURpbXMsYT1yLnZpZXdPcHRzLnJhbmdlcz1uZXcgQXJyYXkobiksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGM9YVtvXT1uZXcgQXJyYXkoNCksdT1sKHQsZS5fZGlhZ1tzXVswXSk7dSYmKGNbMF09dS5yMmwodS5yYW5nZVswXSksY1syXT11LnIybCh1LnJhbmdlWzFdKSk7dmFyIGY9bCh0LGUuX2RpYWdbc11bMV0pO2YmJihjWzFdPWYucjJsKGYucmFuZ2VbMF0pLGNbM109Zi5yMmwoZi5yYW5nZVsxXSkpfXIuc2VsZWN0QmF0Y2g/ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0se3JhbmdlczphfSk6ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0pfWZ1bmN0aW9uIGgodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLGk9ZS5fc3Bsb21HcmlkO2l8fChpPWUuX3NwbG9tR3JpZD1uKHIpKSxpLnVwZGF0ZShmdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQsbj1yLl9zaXplLGk9WzAsMCxyLndpZHRoLHIuaGVpZ2h0XSxhPXt9O2Z1bmN0aW9uIG8odCxlLHIsbixvLHMpe3ZhciBsPWVbdCsiY29sb3IiXSxjPWVbdCsid2lkdGgiXSx1PVN0cmluZyhsK2MpO3UgaW4gYT9hW3VdLmRhdGEucHVzaChOYU4sTmFOLHIsbixvLHMpOmFbdV09e2RhdGE6W3IsbixvLHNdLGpvaW46InJlY3QiLHRoaWNrbmVzczpjLGNvbG9yOmwsdmlld3BvcnQ6aSxyYW5nZTppLG92ZXJsYXk6ITF9fWZvcihlIGluIHIuX3NwbG9tU3VicGxvdHMpe3ZhciBzLGwsdT1yLl9wbG90c1tlXSxmPXUueGF4aXMsaD11LnlheGlzLHA9Zi5fdmFscyxkPWguX3ZhbHMsZz1uLmIraC5kb21haW5bMF0qbi5oLHY9LWguX20sbT0tdipoLnIybChoLnJhbmdlWzBdLGguY2FsZW5kYXIpO2lmKGYuc2hvd2dyaWQpZm9yKGU9MDtlPHAubGVuZ3RoO2UrKylzPWYuX29mZnNldCtmLmwycChwW2VdLngpLG8oImdyaWQiLGYscyxnLHMsZytoLl9sZW5ndGgpO2lmKGguc2hvd2dyaWQpZm9yKGU9MDtlPGQubGVuZ3RoO2UrKylsPWcrbSt2KmRbZV0ueCxvKCJncmlkIixoLGYuX29mZnNldCxsLGYuX29mZnNldCtmLl9sZW5ndGgsbCk7Yyh0LGYsaCkmJihzPWYuX29mZnNldCtmLmwycCgwKSxvKCJ6ZXJvbGluZSIsZixzLGcscyxnK2guX2xlbmd0aCkpLGModCxoLGYpJiYobD1nK20rMCxvKCJ6ZXJvbGluZSIsaCxmLl9vZmZzZXQsbCxmLl9vZmZzZXQrZi5fbGVuZ3RoLGwpKX12YXIgeT1bXTtmb3IoZSBpbiBhKXkucHVzaChhW2VdKTtyZXR1cm4geX0odCkpfWUuZXhwb3J0cz17bmFtZTp1LGF0dHI6cy5hdHRyLGF0dHJSZWdleDpzLmF0dHJSZWdleCxsYXlvdXRBdHRyaWJ1dGVzOnMubGF5b3V0QXR0cmlidXRlcyxzdXBwbHlMYXlvdXREZWZhdWx0czpzLnN1cHBseUxheW91dERlZmF1bHRzLGRyYXdGcmFtZXdvcms6cy5kcmF3RnJhbWV3b3JrLHBsb3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0TW9kdWxlKHUpLG49byh0LmNhbGNkYXRhLHIpWzBdO2EodCxbIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiLCJPRVNfZWxlbWVudF9pbmRleF91aW50Il0pJiYoZS5faGFzT25seUxhcmdlU3Bsb21zJiZoKHQpLHIucGxvdCh0LHt9LG4pKX0sZHJhZzpmdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtyLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmgodCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl1bMF0udHJhY2UsYT1yLl9zcGxvbVNjZW5lc1tpLnVpZF07InNwbG9tIj09PWkudHlwZSYmYSYmYS5tYXRyaXgmJmYodCxpLGEpfX0sdXBkYXRlR3JpZDpoLGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9e307aWYobi5fc3Bsb21TY2VuZXMpe2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07InNwbG9tIj09PW8udHlwZSYmKGFbby51aWRdPTEpfWZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBsPXJbaV07aWYoIWFbbC51aWRdKXt2YXIgYz1uLl9zcGxvbVNjZW5lc1tsLnVpZF07YyYmYy5kZXN0cm95JiZjLmRlc3Ryb3koKSxuLl9zcGxvbVNjZW5lc1tsLnVpZF09bnVsbCxkZWxldGUgbi5fc3Bsb21TY2VuZXNbbC51aWRdfX19MD09PU9iamVjdC5rZXlzKG4uX3NwbG9tU2NlbmVzfHx7fSkubGVuZ3RoJiZkZWxldGUgbi5fc3Bsb21TY2VuZXMsbi5fc3Bsb21HcmlkJiYhZS5faGFzT25seUxhcmdlU3Bsb21zJiZuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJihuLl9zcGxvbUdyaWQuZGVzdHJveSgpLG4uX3NwbG9tR3JpZD1udWxsLGRlbGV0ZSBuLl9zcGxvbUdyaWQpLHMuY2xlYW4odCxlLHIsbil9LHVwZGF0ZUZ4OmZ1bmN0aW9uKHQpe3MudXBkYXRlRngodCk7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuZHJhZ21vZGU7aWYoInpvb20iPT09cnx8InBhbiI9PT1yKWZvcih2YXIgbj10LmNhbGNkYXRhLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXVswXS50cmFjZTtpZigic3Bsb20iPT09YS50eXBlKXt2YXIgbz1lLl9zcGxvbVNjZW5lc1thLnVpZF07bnVsbD09PW8uc2VsZWN0QmF0Y2gmJm8ubWF0cml4LnVwZGF0ZShvLm1hdHJpeE9wdGlvbnMsbnVsbCl9fX0sdG9TVkc6cy50b1NWR319LHsiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6NzEzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NTEsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MjksInJlZ2wtbGluZTJkIjo0ODN9XSwxMTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxzPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksbD10KCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIiksYz0vLW9wZW4vO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLmRpbWVuc2lvbnMscixpKX1yKCJsYWJlbCIpO3ZhciBpPXIoInZhbHVlcyIpO2kmJmkubGVuZ3RoP3IoInZpc2libGUiKTplLnZpc2libGU9ITEscigiYXhpcy50eXBlIikscigiYXhpcy5tYXRjaGVzIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgcD1pKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWgoImRpYWdvbmFsLnZpc2libGUiKSxnPWgoInNob3d1cHBlcmhhbGYiKSx2PWgoInNob3dsb3dlcmhhbGYiKTtpZihsKGUscCwidmFsdWVzIikmJihkfHxnfHx2KSl7aCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxzKHQsZSxyLGYsaCk7dmFyIG09Yy50ZXN0KGUubWFya2VyLnN5bWJvbCkseT1vLmlzQnViYmxlKGUpO2goIm1hcmtlci5saW5lLndpZHRoIixtfHx5PzE6MCksZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPWUuZGltZW5zaW9ucyxzPW8ubGVuZ3RoLGw9ZS5zaG93dXBwZXJoYWxmLGM9ZS5zaG93bG93ZXJoYWxmLHU9ZS5kaWFnb25hbC52aXNpYmxlLGY9bmV3IEFycmF5KHMpLGg9bmV3IEFycmF5KHMpO2ZvcihpPTA7aTxzO2krKyl7dmFyIHA9aT9pKzE6IiI7ZltpXT0ieCIrcCxoW2ldPSJ5IitwfXZhciBkPW4oInhheGVzIixmKSxnPW4oInlheGVzIixoKSx2PWUuX2RpYWc9bmV3IEFycmF5KHMpO2UuX3hheGVzPXt9LGUuX3lheGVzPXt9O3ZhciBtPVtdLHk9W107ZnVuY3Rpb24geCh0LG4saSxhKXtpZih0KXt2YXIgbz10LmNoYXJBdCgwKSxzPXIuX3NwbG9tQXhlc1tvXTtpZihlWyJfIitvKyJheGVzIl1bdF09MSxhLnB1c2godCksISh0IGluIHMpKXt2YXIgbD1zW3RdPXt9O2kmJihsLmxhYmVsPWkubGFiZWx8fCIiLGkudmlzaWJsZSYmaS5heGlzJiYoaS5heGlzLnR5cGUmJihsLnR5cGU9aS5heGlzLnR5cGUpLGkuYXhpcy5tYXRjaGVzJiYobC5tYXRjaGVzPW4pKSl9fX12YXIgYj0hdSYmIWMsXz0hdSYmIWw7Zm9yKGk9MDtpPHM7aSsrKXt2YXIgdz1vW2ldLGs9MD09PWksVD1pPT09cy0xLEE9ayYmYnx8VCYmXz92b2lkIDA6ZFtpXSxNPWsmJl98fFQmJmI/dm9pZCAwOmdbaV07eChBLE0sdyxtKSx4KE0sQSx3LHkpLHZbaV09W0EsTV19Zm9yKGk9MDtpPG0ubGVuZ3RoO2krKylmb3IoYT0wO2E8eS5sZW5ndGg7YSsrKXt2YXIgUz1tW2ldK3lbYV07aT5hJiZsP3IuX3NwbG9tU3VicGxvdHNbU109MTppPGEmJmM/ci5fc3Bsb21TdWJwbG90c1tTXT0xOmkhPT1hfHwhdSYmYyYmbHx8KHIuX3NwbG9tU3VicGxvdHNbU109MSl9KCFjfHwhdSYmbCYmYykmJihyLl9zcGxvbUdyaWREZmx0LnhzaWRlPSJib3R0b20iLHIuX3NwbG9tR3JpZERmbHQueXNpZGU9ImxlZnQiKX0oMCxlLGYsaCksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsaCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc0NCwiLi4vcGFyY29vcmRzL21lcmdlX2xlbmd0aCI6MTAyMywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNzAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4vYXR0cmlidXRlcyI6MTEyOX1dLDExMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1zcGxvbSIpLGk9dCgiYXJyYXktcmFuZ2UiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2dyaWQiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksdT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxmPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNBeGlzRXhwYW5zaW9uLGg9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxwPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IikubWFya2VyU2VsZWN0aW9uLGQ9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKS5tYXJrZXJTdHlsZSxnPXQoIi4uL3NjYXR0ZXJnbCIpLmNhbGNIb3Zlcix2PXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbT10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2Z1bmN0aW9uIHkodCxlKXt2YXIgcixpLGEsbyxjLHU9dC5fZnVsbExheW91dCxmPXUuX3NpemUsaD1lLnRyYWNlLHA9ZS50LGQ9dS5fc3Bsb21TY2VuZXNbaC51aWRdLGc9ZC5tYXRyaXhPcHRpb25zLHY9Zy5jZGF0YSxtPXUuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLHk9dS5kcmFnbW9kZTtpZigwIT09di5sZW5ndGgpe2cubG93ZXI9aC5zaG93dXBwZXJoYWxmLGcudXBwZXI9aC5zaG93bG93ZXJoYWxmLGcuZGlhZ29uYWw9aC5kaWFnb25hbC52aXNpYmxlO3ZhciB4PWguX3Zpc2libGVEaW1zLGI9di5sZW5ndGgsXz1kLnZpZXdPcHRzPXt9O2ZvcihfLnJhbmdlcz1uZXcgQXJyYXkoYiksXy5kb21haW5zPW5ldyBBcnJheShiKSxjPTA7Yzx4Lmxlbmd0aDtjKyspe2E9eFtjXTt2YXIgdz1fLnJhbmdlc1tjXT1uZXcgQXJyYXkoNCksaz1fLmRvbWFpbnNbY109bmV3IEFycmF5KDQpOyhyPWwuZ2V0RnJvbUlkKHQsaC5fZGlhZ1thXVswXSkpJiYod1swXT1yLl9ybFswXSx3WzJdPXIuX3JsWzFdLGtbMF09ci5kb21haW5bMF0sa1syXT1yLmRvbWFpblsxXSksKGk9bC5nZXRGcm9tSWQodCxoLl9kaWFnW2FdWzFdKSkmJih3WzFdPWkuX3JsWzBdLHdbM109aS5fcmxbMV0sa1sxXT1pLmRvbWFpblswXSxrWzNdPWkuZG9tYWluWzFdKX1fLnZpZXdwb3J0PVtmLmwsZi5iLGYudytmLmwsZi5oK2YuYl0sITA9PT1kLm1hdHJpeCYmKGQubWF0cml4PW4obSkpO3ZhciBUPXUuY2xpY2ttb2RlLmluZGV4T2YoInNlbGVjdCIpPi0xLEE9Imxhc3NvIj09PXl8fCJzZWxlY3QiPT09eXx8ISFoLnNlbGVjdGVkcG9pbnRzfHxUO2lmKGQuc2VsZWN0QmF0Y2g9bnVsbCxkLnVuc2VsZWN0QmF0Y2g9bnVsbCxBKXt2YXIgTT1oLl9sZW5ndGg7aWYoZC5zZWxlY3RCYXRjaHx8KGQuc2VsZWN0QmF0Y2g9W10sZC51bnNlbGVjdEJhdGNoPVtdKSxoLnNlbGVjdGVkcG9pbnRzKXtkLnNlbGVjdEJhdGNoPWguc2VsZWN0ZWRwb2ludHM7dmFyIFM9aC5zZWxlY3RlZHBvaW50cyxFPXt9O2ZvcihhPTA7YTxTLmxlbmd0aDthKyspRVtTW2FdXT0hMDt2YXIgQz1bXTtmb3IoYT0wO2E8TTthKyspRVthXXx8Qy5wdXNoKGEpO2QudW5zZWxlY3RCYXRjaD1DfXZhciBMPXAueHB4PW5ldyBBcnJheShiKSx6PXAueXB4PW5ldyBBcnJheShiKTtmb3IoYz0wO2M8eC5sZW5ndGg7YysrKXtpZihhPXhbY10scj1sLmdldEZyb21JZCh0LGguX2RpYWdbYV1bMF0pKWZvcihMW2NdPW5ldyBBcnJheShNKSxvPTA7bzxNO28rKylMW2NdW29dPXIuYzJwKHZbY11bb10pO2lmKGk9bC5nZXRGcm9tSWQodCxoLl9kaWFnW2FdWzFdKSlmb3IoeltjXT1uZXcgQXJyYXkoTSksbz0wO288TTtvKyspeltjXVtvXT1pLmMycCh2W2NdW29dKX1kLnNlbGVjdEJhdGNoPyhkLm1hdHJpeC51cGRhdGUoZyxnKSxkLm1hdHJpeC51cGRhdGUoZC51bnNlbGVjdGVkT3B0aW9ucyxkLnNlbGVjdGVkT3B0aW9ucyksZC5tYXRyaXgudXBkYXRlKF8sXykpOmQubWF0cml4LnVwZGF0ZShfLG51bGwpfWVsc2V7dmFyIE89cy5leHRlbmRGbGF0KHt9LGcsXyk7ZC5tYXRyaXgudXBkYXRlKE8sbnVsbCkscC54cHg9cC55cHg9bnVsbH19fWZ1bmN0aW9uIHgodCxlKXtmb3IodmFyIHI9ZS5faWQsbj17eDowLHk6MX1bci5jaGFyQXQoMCldLGk9dC5fdmlzaWJsZURpbXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKHQuX2RpYWdbb11bbl09PT1yKXJldHVybiBhfXJldHVybiExfWUuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNwbG9tIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJjYXJ0ZXNpYW4iLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksY2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8sYyxnPWUuZGltZW5zaW9ucyx5PWUuX2xlbmd0aCx4PXt9LGI9eC5jZGF0YT1bXSxfPXguZGF0YT1bXSx3PWUuX3Zpc2libGVEaW1zPVtdO2Z1bmN0aW9uIGsodCxyKXtmb3IodmFyIG49dC5tYWtlQ2FsY2RhdGEoe3Y6ci52YWx1ZXMsdmNhbGVuZGFyOmUuY2FsZW5kYXJ9LCJ2IiksaT0wO2k8bi5sZW5ndGg7aSsrKW5baV09bltpXT09PXY/TmFOOm5baV07Yi5wdXNoKG4pLF8ucHVzaCgibG9nIj09PXQudHlwZT9zLnNpbXBsZU1hcChuLHQuYzJsKTpuKX1mb3Iocj0wO3I8Zy5sZW5ndGg7cisrKWlmKChpPWdbcl0pLnZpc2libGUpe2lmKGE9bC5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzBdKSxvPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSksYSYmbyYmYS50eXBlIT09by50eXBlKXtzLmxvZygiU2tpcHBpbmcgc3Bsb20gZGltZW5zaW9uICIrcisiIHdpdGggY29uZmxpY3RpbmcgYXhpcyB0eXBlcyIpO2NvbnRpbnVlfWE/KGsoYSxpKSxvJiYiY2F0ZWdvcnkiPT09by50eXBlJiYoby5fY2F0ZWdvcmllcz1hLl9jYXRlZ29yaWVzLnNsaWNlKCkpKTprKG8saSksdy5wdXNoKHIpfWZvcihoKHQsZSkscy5leHRlbmRGbGF0KHgsZChlKSksYz1iLmxlbmd0aCp5Pm0/MiooeC5zaXplQXZnfHxNYXRoLm1heCh4LnNpemUsMykpOnUoZSx5KSxuPTA7bjx3Lmxlbmd0aDtuKyspaT1nW3I9d1tuXV0sYT1sLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pfHx7fSxvPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSl8fHt9LGYodCxlLGEsbyxiW25dLGJbbl0sYyk7dmFyIFQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZS51aWQsaT1yLl9zcGxvbVNjZW5lcztpfHwoaT1yLl9zcGxvbVNjZW5lcz17fSk7dmFyIGE9e2RpcnR5OiEwfSxvPWlbZS51aWRdO3JldHVybiBvfHwoKG89aVtuXT1zLmV4dGVuZEZsYXQoe30sYSx7c2VsZWN0QmF0Y2g6bnVsbCx1bnNlbGVjdEJhdGNoOm51bGwsbWF0cml4OiExLHNlbGVjdDpudWxsfSkpLmRyYXc9ZnVuY3Rpb24oKXtvLm1hdHJpeCYmby5tYXRyaXguZHJhdyYmKG8uc2VsZWN0QmF0Y2g/by5tYXRyaXguZHJhdyhvLnVuc2VsZWN0QmF0Y2gsby5zZWxlY3RCYXRjaCk6by5tYXRyaXguZHJhdygpKSxvLmRpcnR5PSExfSxvLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvLm1hdHJpeCYmby5tYXRyaXguZGVzdHJveSYmby5tYXRyaXguZGVzdHJveSgpLG8ubWF0cml4T3B0aW9ucz1udWxsLG8uc2VsZWN0QmF0Y2g9bnVsbCxvLnVuc2VsZWN0QmF0Y2g9bnVsbCxvPW51bGx9KSxvLmRpcnR5fHxzLmV4dGVuZEZsYXQobyxhKSxvfSh0LGUpO3JldHVybiBULm1hdHJpeHx8KFQubWF0cml4PSEwKSxULm1hdHJpeE9wdGlvbnM9eCxULnNlbGVjdGVkT3B0aW9ucz1wKGUsZS5zZWxlY3RlZCksVC51bnNlbGVjdGVkT3B0aW9ucz1wKGUsZS51bnNlbGVjdGVkKSxbe3g6ITEseTohMSx0Ont9LHRyYWNlOmV9XX0scGxvdDpmdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspeSh0LHJbbl1bMF0pfSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscil7dmFyIG49dC5jZFswXS50cmFjZSxpPXQuc2NlbmUubWF0cml4T3B0aW9ucy5jZGF0YSxhPXQueGEsbz10LnlhLHM9YS5jMnAoZSksbD1vLmMycChyKSxjPXQuZGlzdGFuY2UsdT14KG4sYSksZj14KG4sbyk7aWYoITE9PT11fHwhMT09PWYpcmV0dXJuW3RdO2Zvcih2YXIgaCxwLGQ9aVt1XSx2PWlbZl0sbT1jLHk9MDt5PGQubGVuZ3RoO3krKyl7dmFyIGI9ZFt5XSxfPXZbeV0sdz1hLmMycChiKS1zLGs9by5jMnAoXyktbCxUPU1hdGguc3FydCh3KncrayprKTtUPG0mJihtPXA9VCxoPXkpfXJldHVybiB0LmluZGV4PWgsdC5kaXN0YW5jZT1tLHQuZHh5PXAsdm9pZCAwPT09aD9bdF06KGcodCxkLHYsbiksW3RdKX0sc2VsZWN0UG9pbnRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LmNkLGE9blswXS50cmFjZSxvPW5bMF0udCxzPXQuc2NlbmUsbD1zLm1hdHJpeE9wdGlvbnMuY2RhdGEsdT10LnhheGlzLGY9dC55YXhpcyxoPVtdO2lmKCFzKXJldHVybiBoO3ZhciBwPSFjLmhhc01hcmtlcnMoYSkmJiFjLmhhc1RleHQoYSk7aWYoITAhPT1hLnZpc2libGV8fHApcmV0dXJuIGg7dmFyIGQ9eChhLHUpLGc9eChhLGYpO2lmKCExPT09ZHx8ITE9PT1nKXJldHVybiBoO3ZhciB2PW8ueHB4W2RdLG09by55cHhbZ10seT1sW2RdLGI9bFtnXSxfPW51bGwsdz1udWxsO2lmKCExPT09ZXx8ZS5kZWdlbmVyYXRlKXc9aShvLmNvdW50KTtlbHNlIGZvcihfPVtdLHc9W10scj0wO3I8eS5sZW5ndGg7cisrKWUuY29udGFpbnMoW3Zbcl0sbVtyXV0sbnVsbCxyLHQpPyhfLnB1c2gociksaC5wdXNoKHtwb2ludE51bWJlcjpyLHg6eVtyXSx5OmJbcl19KSk6dy5wdXNoKHIpO2lmKHMuc2VsZWN0QmF0Y2h8fChzLnNlbGVjdEJhdGNoPVtdLHMudW5zZWxlY3RCYXRjaD1bXSksIXMuc2VsZWN0QmF0Y2gpe2ZvcihyPTA7cjxzLmNvdW50O3IrKylzLnNlbGVjdEJhdGNoPVtdLHMudW5zZWxlY3RCYXRjaD1bXTtzLm1hdHJpeC51cGRhdGUocy51bnNlbGVjdGVkT3B0aW9ucyxzLnNlbGVjdGVkT3B0aW9ucyl9cmV0dXJuIHMuc2VsZWN0QmF0Y2g9XyxzLnVuc2VsZWN0QmF0Y2g9dyxofSxlZGl0U3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRyYWNlLG49dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbci51aWRdO2lmKG4pe2godCxyKSxzLmV4dGVuZEZsYXQobi5tYXRyaXhPcHRpb25zLGQocikpO3ZhciBpPXMuZXh0ZW5kRmxhdCh7fSxuLm1hdHJpeE9wdGlvbnMsbi52aWV3T3B0cyk7bi5tYXRyaXgudXBkYXRlKGksbnVsbCl9fSxtZXRhOnt9fSxhLnJlZ2lzdGVyKG8pfSx7Ii4uLy4uL2NvbXBvbmVudHMvZ3JpZCI6NjIwLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc1MSwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vc2NhdHRlci9jYWxjIjoxMDUyLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTA1NCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwNjksIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNzUsIi4uL3NjYXR0ZXJnbCI6MTEwNCwiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6MTEwMSwiLi4vc2NhdHRlcmdsL2NvbnZlcnQiOjExMDIsIi4vYXR0cmlidXRlcyI6MTEyOSwiLi9iYXNlX3Bsb3QiOjExMzAsIi4vZGVmYXVsdHMiOjExMzEsImFycmF5LXJhbmdlIjo1NywicmVnbC1zcGxvbSI6NDg1fV0sMTEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLG89dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx3Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0czp7eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxtYXhkaXNwbGF5ZWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MWUzLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZXJlZjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjAsZGZsdDoxfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6ImNhbGMifSx7a2V5czpbInR1YmV4IiwidHViZXkiLCJ0dWJleiIsInR1YmV1IiwidHViZXYiLCJ0dWJldyIsIm5vcm0iLCJkaXZlcmdlbmNlIl19KX07bChjLG4oIiIse2NvbG9yQXR0cjoidS92L3cgbm9ybSIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjppfSk7WyJvcGFjaXR5IiwibGlnaHRwb3NpdGlvbiIsImxpZ2h0aW5nIl0uZm9yRWFjaChmdW5jdGlvbih0KXtjW3RdPW9bdF19KSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ1IiwidiIsInciLCJub3JtIiwiZGl2ZXJnZW5jZSIsInRleHQiLCJuYW1lIl0sZGZsdDoieCt5K3orbm9ybSt0ZXh0K25hbWUifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU3OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU4NCwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjo5OTR9XSwxMTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scz1lLnUsbD1lLnYsYz1lLncsdT1lLngsZj1lLnksaD1lLnoscD1NYXRoLm1pbih1Lmxlbmd0aCxmLmxlbmd0aCxoLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCxjLmxlbmd0aCksZD0wO2Uuc3RhcnRzJiYoaT1lLnN0YXJ0cy54fHxbXSxhPWUuc3RhcnRzLnl8fFtdLG89ZS5zdGFydHMuenx8W10sZD1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCxvLmxlbmd0aCkpO3ZhciBnPTAsdj0xLzA7Zm9yKHI9MDtyPHA7cisrKXt2YXIgbT1zW3JdLHk9bFtyXSx4PWNbcl0sYj1NYXRoLnNxcnQobSptK3kqeSt4KngpO2c9TWF0aC5tYXgoZyxiKSx2PU1hdGgubWluKHYsYil9bih0LGUse3ZhbHM6W3YsZ10sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSk7dmFyIF89LTEvMCx3PTEvMCxrPS0xLzAsVD0xLzAsQT0tMS8wLE09MS8wO2ZvcihyPTA7cjxwO3IrKyl7dmFyIFM9dVtyXTtfPU1hdGgubWF4KF8sUyksdz1NYXRoLm1pbih3LFMpO3ZhciBFPWZbcl07az1NYXRoLm1heChrLEUpLFQ9TWF0aC5taW4oVCxFKTt2YXIgQz1oW3JdO0E9TWF0aC5tYXgoQSxDKSxNPU1hdGgubWluKE0sQyl9Zm9yKHI9MDtyPGQ7cisrKXt2YXIgTD1pW3JdO189TWF0aC5tYXgoXyxMKSx3PU1hdGgubWluKHcsTCk7dmFyIHo9YVtyXTtrPU1hdGgubWF4KGsseiksVD1NYXRoLm1pbihULHopO3ZhciBPPW9bcl07QT1NYXRoLm1heChBLE8pLE09TWF0aC5taW4oTSxPKX1lLl9sZW49cCxlLl9zbGVuPWQsZS5fbm9ybU1heD1nLGUuX3hibmRzPVt3LF9dLGUuX3libmRzPVtULGtdLGUuX3pibmRzPVtNLEFdfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1fV0sMTEzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdHJlYW10dWJlM2QiKSxpPW4uY3JlYXRlVHViZU1lc2gsYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUscz10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxsPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn07ZnVuY3Rpb24gYyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGEuZGlzdGluY3RWYWxzKHQpLnZhbHN9ZnVuY3Rpb24gaCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT4yP3Quc2xpY2UoMSxlLTEpOjI9PT1lP1sodFswXSt0WzFdKS8yXTp0fWZ1bmN0aW9uIHAodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIDE9PT1lP1suNSwuNV06W3RbMV0tdFswXSx0W2UtMV0tdFtlLTJdXX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxjPWUuX2xlbix1PXt9O2Z1bmN0aW9uIGQodCxlKXt2YXIgbj1yW2VdLG89aVtsW2VdXTtyZXR1cm4gYS5zaW1wbGVNYXAodCxmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pfXUudmVjdG9ycz1zKGQoZS51LCJ4YXhpcyIpLGQoZS52LCJ5YXhpcyIpLGQoZS53LCJ6YXhpcyIpLGMpO3ZhciBnPWYoZS54LnNsaWNlKDAsYykpLHY9ZihlLnkuc2xpY2UoMCxjKSksbT1mKGUuei5zbGljZSgwLGMpKTtpZihnLmxlbmd0aCp2Lmxlbmd0aCptLmxlbmd0aD5jKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O3ZhciB5PWQoZywieGF4aXMiKSx4PWQodiwieWF4aXMiKSxiPWQobSwiemF4aXMiKTtpZih1Lm1lc2hncmlkPVt5LHgsYl0sZS5zdGFydHMpe3ZhciBfPWUuX3NsZW47dS5zdGFydGluZ1Bvc2l0aW9ucz1zKGQoZS5zdGFydHMueC5zbGljZSgwLF8pLCJ4YXhpcyIpLGQoZS5zdGFydHMueS5zbGljZSgwLF8pLCJ5YXhpcyIpLGQoZS5zdGFydHMuei5zbGljZSgwLF8pLCJ6YXhpcyIpKX1lbHNle2Zvcih2YXIgdz14WzBdLGs9aCh5KSxUPWgoYiksQT1uZXcgQXJyYXkoay5sZW5ndGgqVC5sZW5ndGgpLE09MCxTPTA7UzxrLmxlbmd0aDtTKyspZm9yKHZhciBFPTA7RTxULmxlbmd0aDtFKyspQVtNKytdPVtrW1NdLHcsVFtFXV07dS5zdGFydGluZ1Bvc2l0aW9ucz1BfXUuY29sb3JtYXA9byhlKSx1LnR1YmVTaXplPWUuc2l6ZXJlZix1Lm1heExlbmd0aD1lLm1heGRpc3BsYXllZDt2YXIgQz1kKGUuX3hibmRzLCJ4YXhpcyIpLEw9ZChlLl95Ym5kcywieWF4aXMiKSx6PWQoZS5femJuZHMsInpheGlzIiksTz1wKHkpLEk9cCh4KSxEPXAoYiksUD1bW0NbMF0tT1swXSxMWzBdLUlbMF0selswXS1EWzBdXSxbQ1sxXStPWzFdLExbMV0rSVsxXSx6WzFdK0RbMV1dXSxSPW4odSxQKTtSLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZS5jbWluL2UuX25vcm1NYXgsZS5jbWF4L2UuX25vcm1NYXhdO3ZhciBGPWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gUi5saWdodFBvc2l0aW9uPVtGLngsRi55LEYuel0sUi5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxSLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLFIuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixSLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxSLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLFIub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPVIudHViZVNjYWxlKmUuc2l6ZXJlZioyLFJ9dS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LHI9dGhpcy5zY2VuZS5kYXRhU2NhbGU7ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWVbbl0sYT1yW2xbbl1dO3JldHVybiBpLmwyYyh0KS9hfWlmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgaT10LmRhdGEucG9zaXRpb24sYT10LmRhdGEudmVsb2NpdHk7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVtuKGlbMF0sInhheGlzIiksbihpWzFdLCJ5YXhpcyIpLG4oaVsyXSwiemF4aXMiKSxuKGFbMF0sInhheGlzIiksbihhWzFdLCJ5YXhpcyIpLG4oYVsyXSwiemF4aXMiKSx0LmRhdGEuaW50ZW5zaXR5KnRoaXMuZGF0YS5fbm9ybU1heCx0LmRhdGEuZGl2ZXJnZW5jZV0sdC50ZXh0TGFiZWw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQsITB9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1kKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1kKHQsZSksYT1pKHIsbiksbz1uZXcgYyh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjY5NywiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4MDAsImdsLXN0cmVhbXR1YmUzZCI6MzA5fV0sMTEzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKCJ1IiksYz1zKCJ2IiksdT1zKCJ3IiksZj1zKCJ4IiksaD1zKCJ5IikscD1zKCJ6Iik7bCYmbC5sZW5ndGgmJmMmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmZiYmZi5sZW5ndGgmJmgmJmgubGVuZ3RoJiZwJiZwLmxlbmd0aD8ocygic3RhcnRzLngiKSxzKCJzdGFydHMueSIpLHMoInN0YXJ0cy56IikscygibWF4ZGlzcGxheWVkIikscygic2l6ZXJlZiIpLHMoImxpZ2h0aW5nLmFtYmllbnQiKSxzKCJsaWdodGluZy5kaWZmdXNlIikscygibGlnaHRpbmcuc3BlY3VsYXIiKSxzKCJsaWdodGluZy5yb3VnaG5lc3MiKSxzKCJsaWdodGluZy5mcmVzbmVsIikscygibGlnaHRwb3NpdGlvbi54IikscygibGlnaHRwb3NpdGlvbi55IikscygibGlnaHRwb3NpdGlvbi56IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9saWIiOjcwMCwiLi9hdHRyaWJ1dGVzIjoxMTMzfV0sMTEzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzdHJlYW10dWJlIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9jb252ZXJ0IiksZXZlbnREYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHViZXg9dC54LHQudHViZXk9dC55LHQudHViZXo9dC56LHQudHViZXU9ZS50cmFjZUNvb3JkaW5hdGVbM10sdC50dWJldj1lLnRyYWNlQ29vcmRpbmF0ZVs0XSx0LnR1YmV3PWUudHJhY2VDb29yZGluYXRlWzVdLHQubm9ybT1lLnRyYWNlQ29vcmRpbmF0ZVs2XSx0LmRpdmVyZ2VuY2U9ZS50cmFjZUNvb3JkaW5hdGVbN10sZGVsZXRlIHQueCxkZWxldGUgdC55LGRlbGV0ZSB0LnosdH0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjExMzMsIi4vY2FsYyI6MTEzNCwiLi9jb252ZXJ0IjoxMTM1LCIuL2RlZmF1bHRzIjoxMTM2fV0sMTEzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxwYXJlbnRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxicmFuY2h2YWx1ZXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlbWFpbmRlciIsInRvdGFsIl0sZGZsdDoicmVtYWluZGVyIixlZGl0VHlwZToiY2FsYyJ9LGxldmVsOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In0sbWF4ZGVwdGg6e3ZhbFR5cGU6ImludGVnZXIiLGVkaXRUeXBlOiJwbG90IixkZmx0Oi0xfSxtYXJrZXI6e2NvbG9yczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjpzKHt9LG8ubWFya2VyLmxpbmUuY29sb3Ise2RmbHQ6bnVsbH0pLHdpZHRoOnMoe30sby5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGxlYWY6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIixtaW46MCxtYXg6MSxkZmx0Oi43fSxlZGl0VHlwZToicGxvdCJ9LHRleHQ6by50ZXh0LHRleHRpbmZvOnMoe30sby50ZXh0aW5mbyx7ZWRpdFR5cGU6InBsb3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiXX0pLHRleHRmb250Om8udGV4dGZvbnQsaG92ZXJ0ZXh0Om8uaG92ZXJ0ZXh0LGhvdmVyaW5mbzpzKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTppKCksaW5zaWRldGV4dGZvbnQ6by5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6by5vdXRzaWRldGV4dGZvbnQsZG9tYWluOmEoe25hbWU6InN1bmJ1cnN0Iix0cmFjZTohMCxlZGl0VHlwZToiY2FsYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXMiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDUsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuLi9waWUvYXR0cmlidXRlcyI6MTAyNn1dLDExMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT1yLm5hbWU9InN1bmJ1cnN0IjtyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9bi5nZXRNb2R1bGUoYSksbD1pKHQuY2FsY2RhdGEscylbMF07cy5wbG90KHQsbCxyLG8pfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKGEpLG89ZS5faGFzJiZlLl9oYXMoYSk7aSYmIW8mJm4uX3N1bmJ1cnN0bGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCl9fSx7Ii4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4Mjl9XSwxMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLWhpZXJhcmNoeSIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vcGllL2NhbGMiKS5tYWtlUHVsbENvbG9yRm4scz10KCIuLi9waWUvY2FsYyIpLmdlbmVyYXRlRXh0ZW5kZWRDb2xvcnMsbD1hLmlzQXJyYXlPclR5cGVkQXJyYXksYz17fTtyLmNhbGM9ZnVuY3Rpb24odCxlKXt2YXIgcixzLGMsdSxmLGgscD10Ll9mdWxsTGF5b3V0LGQ9ZS5pZHMsZz1sKGQpLHY9ZS5sYWJlbHMsbT1lLnBhcmVudHMseT1lLnZhbHVlcyx4PWwoeSksYj1bXSxfPXt9LHc9e30saz1mdW5jdGlvbih0KXtyZXR1cm4heHx8aSh5W3RdKSYmeVt0XT49MH07Zz8ocj1NYXRoLm1pbihkLmxlbmd0aCxtLmxlbmd0aCkscz1mdW5jdGlvbih0KXtyZXR1cm4gZFt0XSYmayh0KX0sYz1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKGRbdF0pfSk6KHI9TWF0aC5taW4odi5sZW5ndGgsbS5sZW5ndGgpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZbdF0mJmsodCl9LGM9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh2W3RdKX0pLHgmJihyPU1hdGgubWluKHIseS5sZW5ndGgpKTtmb3IodmFyIFQ9MDtUPHI7VCsrKWlmKHMoVCkpe3ZhciBBPWMoVCksTT1tW1RdP1N0cmluZyhtW1RdKToiIixTPXtpOlQsaWQ6QSxwaWQ6TSxsYWJlbDp2W1RdP1N0cmluZyh2W1RdKToiIn07eCYmKFMudj0reVtUXSksYi5wdXNoKFMpLGY9QSxfW3U9TV0/X1t1XS5wdXNoKGYpOl9bdV09W2ZdLHdbZl09MX1pZihfWyIiXSl7aWYoX1siIl0ubGVuZ3RoPjEpe2Zvcih2YXIgRT1hLnJhbmRzdHIoKSxDPTA7QzxiLmxlbmd0aDtDKyspIiI9PT1iW0NdLnBpZCYmKGJbQ10ucGlkPUUpO2IudW5zaGlmdCh7aGFzTXVsdGlwbGVSb290czohMCxpZDpFLHBpZDoiIn0pfX1lbHNle3ZhciBMLHo9W107Zm9yKEwgaW4gXyl3W0xdfHx6LnB1c2goTCk7aWYoMSE9PXoubGVuZ3RoKXJldHVybiBhLndhcm4oIk11bHRpcGxlIGltcGxpZWQgcm9vdHMsIGNhbm5vdCBidWlsZCBzdW5idXJzdCBoaWVyYXJjaHkuIik7TD16WzBdLGIudW5zaGlmdCh7aWQ6TCxwaWQ6IiIsbGFiZWw6TH0pfXRyeXtoPW4uc3RyYXRpZnkoKS5pZChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLnBhcmVudElkKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpZH0pKGIpfWNhdGNoKHQpe3JldHVybiBhLndhcm4oIkZhaWxlZCB0byBidWlsZCBzdW5idXJzdCBoaWVyYXJjaHkuIEVycm9yOiAiK3QubWVzc2FnZSl9dmFyIE89bi5oaWVyYXJjaHkoaCksST0hMTtpZih4KXN3aXRjaChlLmJyYW5jaHZhbHVlcyl7Y2FzZSJyZW1haW5kZXIiOk8uc3VtKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEudn0pO2JyZWFrO2Nhc2UidG90YWwiOk8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmRhdGEuZGF0YS52O2lmKHQuY2hpbGRyZW4mJmU8dC5jaGlsZHJlbi5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLmRhdGEuZGF0YS52fSwwKSlyZXR1cm4gST0hMCxhLndhcm4oWyJUb3RhbCB2YWx1ZSBmb3Igbm9kZSIsdC5kYXRhLmRhdGEuaWQsImlzIHNtYWxsZXIgdGhhbiB0aGUgc3VtIG9mIGl0cyBjaGlsZHJlbi4iXS5qb2luKCIgIikpO3QudmFsdWU9ZX0pfWVsc2UgTy5jb3VudCgpO2lmKCFJKXtPLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS52YWx1ZS10LnZhbHVlfSk7dmFyIEQ9ZS5tYXJrZXIuY29sb3JzfHxbXSxQPW8ocC5fc3VuYnVyc3Rjb2xvcm1hcCk7cmV0dXJuIE8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmRhdGEuZGF0YSxyPWUuaWQ7ZS5jb2xvcj1QKERbZS5pXSxyKX0pLGJbMF0uaGllcmFyY2h5PU8sYn19LHIuY3Jvc3NUcmFjZUNhbGM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsbj1lLnN1bmJ1cnN0Y29sb3J3YXksaT1lLl9zdW5idXJzdGNvbG9ybWFwO2UuZXh0ZW5kc3VuYnVyc3Rjb2xvcnMmJihuPXMobixjKSk7dmFyIGE9MDtmdW5jdGlvbiBvKHQpe3ZhciBlPXQuZGF0YS5kYXRhLHI9ZS5pZDshMT09PWUuY29sb3ImJihpW3JdP2UuY29sb3I9aVtyXTp0LnBhcmVudD90LnBhcmVudC5wYXJlbnQ/ZS5jb2xvcj10LnBhcmVudC5kYXRhLmRhdGEuY29sb3I6KGlbcl09ZS5jb2xvcj1uW2Elbi5sZW5ndGhdLGErKyk6ZS5jb2xvcj0icmdiYSgwLDAsMCwwKSIpfWZvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgdT1yW2xdWzBdOyJzdW5idXJzdCI9PT11LnRyYWNlLnR5cGUmJnUuaGllcmFyY2h5JiZ1LmhpZXJhcmNoeS5lYWNoKG8pfX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL3BpZS9jYWxjIjoxMDI4LCJkMy1oaWVyYXJjaHkiOjE0NywiZmFzdC1pc251bWVyaWMiOjIyMX1dLDExNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDTElDS19UUkFOU0lUSU9OX1RJTUU6NzUwLENMSUNLX1RSQU5TSVRJT05fRUFTSU5HOiJsaW5lYXIifX0se31dLDExNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLG89bi5jb2VyY2VGb250O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGM9bCgibGFiZWxzIiksdT1sKCJwYXJlbnRzIik7aWYoYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoKXt2YXIgZj1sKCJ2YWx1ZXMiKTtmJiZmLmxlbmd0aCYmbCgiYnJhbmNodmFsdWVzIiksbCgibGV2ZWwiKSxsKCJtYXhkZXB0aCIpLGwoIm1hcmtlci5saW5lLndpZHRoIikmJmwoIm1hcmtlci5saW5lLmNvbG9yIixzLnBhcGVyX2JnY29sb3IpLGwoIm1hcmtlci5jb2xvcnMiKSxsKCJsZWFmLm9wYWNpdHkiKTt2YXIgaD1sKCJ0ZXh0Iik7bCgidGV4dGluZm8iLEFycmF5LmlzQXJyYXkoaCk/InRleHQrbGFiZWwiOiJsYWJlbCIpLGwoImhvdmVydGV4dCIpLGwoImhvdmVydGVtcGxhdGUiKTt2YXIgcD1vKGwsInRleHRmb250IixzLmZvbnQpLGQ9bi5leHRlbmRGbGF0KHt9LHApOyEodC50ZXh0Zm9udCYmdC50ZXh0Zm9udC5jb2xvcikmJmRlbGV0ZSBkLmNvbG9yLG8obCwiaW5zaWRldGV4dGZvbnQiLGQpLG8obCwib3V0c2lkZXRleHRmb250IixwKSxhKGUscyxsKSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuL2F0dHJpYnV0ZXMiOjExMzh9XSwxMTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN1bmJ1cnN0IixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjExMzgsIi4vYmFzZV9wbG90IjoxMTM5LCIuL2NhbGMiOjExNDAsIi4vZGVmYXVsdHMiOjExNDIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExNDQsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMTQ1LCIuL3Bsb3QiOjExNDYsIi4vc3R5bGUiOjExNDd9XSwxMTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c3VuYnVyc3Rjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHN1bmJ1cnN0Y29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTE0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigic3VuYnVyc3Rjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kc3VuYnVyc3Rjb2xvcnMiKX19LHsiLi4vLi4vbGliIjo3MDAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExNDR9XSwxMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJkMy1oaWVyYXJjaHkiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vbGliL2V2ZW50cyIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIikscD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUsZD10KCIuLi9waWUvcGxvdCIpLnRyYW5zZm9ybUluc2lkZVRleHQsZz10KCIuLi9waWUvaGVscGVycyIpLmZvcm1hdFBpZVZhbHVlLHY9dCgiLi9zdHlsZSIpLnN0eWxlT25lLG09dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiB5KHQsZSxyLGEpe3ZhciBvPXQuX2Z1bGxMYXlvdXQsdT1hJiZhLmR1cmF0aW9uPjAsaD1uLnNlbGVjdChyKS5zZWxlY3RBbGwoImcuc2xpY2UiKSxwPWVbMF0sbT1wLnRyYWNlLHk9eChwLmhpZXJhcmNoeSxtLmxldmVsKSx3PW0ubWF4ZGVwdGg+PTA/bS5tYXhkZXB0aDoxLzAsTT1vLl9zaXplLFM9bS5kb21haW4sRT1NLncqKFMueFsxXS1TLnhbMF0pLEM9TS5oKihTLnlbMV0tUy55WzBdKSxMPS41Kk1hdGgubWluKEUsQyksej1wLmN4PU0ubCtNLncqKFMueFsxXStTLnhbMF0pLzIsTz1wLmN5PU0udCtNLmgqKDEtUy55WzBdKS1DLzI7aWYoIXkpcmV0dXJuIGgucmVtb3ZlKCk7dmFyIEk9bnVsbCxEPXt9O3UmJmguZWFjaChmdW5jdGlvbih0KXtEW2sodCldPXtycHgwOnQucnB4MCxycHgxOnQucnB4MSx4MDp0LngwLHgxOnQueDEsdHJhbnNmb3JtOnQudHJhbnNmb3JtfSwhSSYmXyh0KSYmKEk9dCl9KTt2YXIgUD1mdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJ0aXRpb24oKS5zaXplKFsyKk1hdGguUEksdC5oZWlnaHQrMV0pKHQpfSh5KS5kZXNjZW5kYW50cygpLFI9eS5oZWlnaHQrMSxGPTAsQj13O3AuaGFzTXVsdGlwbGVSb290cyYmYih5KSYmKFA9UC5zbGljZSgxKSxSLT0xLEY9MSxCKz0xKSxQPVAuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxPD1CfSk7dmFyIE49TWF0aC5taW4oUix3KSxqPWZ1bmN0aW9uKHQpe3JldHVybih0LUYpL04qTH0sVj1mdW5jdGlvbih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLC10Kk1hdGguc2luKGUpXX0sVT1mdW5jdGlvbih0KXtyZXR1cm4gYy5wYXRoQW5udWx1cyh0LnJweDAsdC5ycHgxLHQueDAsdC54MSx6LE8pfSxxPWZ1bmN0aW9uKHQpe3JldHVybiB6K3QucHhtaWRbMF0qdC50cmFuc2Zvcm0uckNlbnRlcisodC50cmFuc2Zvcm0ueHx8MCl9LEg9ZnVuY3Rpb24odCl7cmV0dXJuIE8rdC5weG1pZFsxXSp0LnRyYW5zZm9ybS5yQ2VudGVyKyh0LnRyYW5zZm9ybS55fHwwKX07KGg9aC5kYXRhKFAsZnVuY3Rpb24odCl7cmV0dXJuIGsodCl9KSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLHU/aC5leGl0KCkudHJhbnNpdGlvbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LnNlbGVjdCgicGF0aC5zdXJmYWNlIikudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj1rKHQpLGk9RFtyXSxhPURbayh5KV07aWYoYSl7dmFyIG89dC54MT5hLngxPzIqTWF0aC5QSTowO2U9dC5ycHgxPGEucnB4MT97cnB4MDowLHJweDE6MH06e3gwOm8seDE6b319ZWxzZXt2YXIgcyxsPWsodC5wYXJlbnQpO2guZWFjaChmdW5jdGlvbih0KXtpZihrKHQpPT09bClyZXR1cm4gcz10fSk7dmFyIGMsdT1zLmNoaWxkcmVuO3UuZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKGsodCk9PT1yKXJldHVybiBjPWV9KTt2YXIgZj11Lmxlbmd0aCxwPW4uaW50ZXJwb2xhdGUocy54MCxzLngxKTtlPXtycHgwOkwscnB4MTpMLHgwOnAoYy9mKSx4MTpwKChjKzEpL2YpfX1yZXR1cm4gbi5pbnRlcnBvbGF0ZShpLGUpfSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFUoZSh0KSl9fSksdC5zZWxlY3QoImcuc2xpY2V0ZXh0IikuYXR0cigib3BhY2l0eSIsMCl9KS5yZW1vdmUoKTpoLmV4aXQoKS5yZW1vdmUoKSxoLm9yZGVyKCk7dmFyIEc9bnVsbDtpZih1JiZJKXt2YXIgWT1rKEkpO2guZWFjaChmdW5jdGlvbih0KXtudWxsPT09RyYmayh0KT09PVkmJihHPXQueDEpfSl9dmFyIFc9aDtmdW5jdGlvbiBYKHQpe3ZhciBlPXQucGFyZW50LHI9RFtrKGUpXSxpPXt9O2lmKHIpe3ZhciBhPWUuY2hpbGRyZW4sbz1hLmluZGV4T2YodCkscz1hLmxlbmd0aCxsPW4uaW50ZXJwb2xhdGUoci54MCxyLngxKTtpLngwPWwoby9zKSxpLngxPWwoby9zKX1lbHNlIGkueDA9aS54MT0wO3JldHVybiBpfXUmJihXPVcudHJhbnNpdGlvbigpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtUKG4uc2VsZWN0KHRoaXMpLHQse2lzVHJhbnNpdGlvbmluZzohMX0pfSkpLFcuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPWMuZW5zdXJlU2luZ2xlKGksInBhdGgiLCJzdXJmYWNlIixmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSk7ci5ycHgwPWooci55MCksci5ycHgxPWooci55MSksci54bWlkPShyLngwK3IueDEpLzIsci5weG1pZD1WKHIucnB4MSxyLnhtaWQpLHIubWlkYW5nbGU9LShyLnhtaWQtTWF0aC5QSS8yKSxyLmhhbGZhbmdsZT0uNSpNYXRoLm1pbihjLmFuZ2xlRGVsdGEoci54MCxyLngxKXx8TWF0aC5QSSxNYXRoLlBJKSxyLnJpbmc9MS1yLnJweDAvci5ycHgxLHIuckluc2NyaWJlZD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQucnB4MCYmdC54bWlkPT09TWF0aC5QST8xOk1hdGgubWF4KDAsTWF0aC5taW4oMS8oMSsxL01hdGguc2luKHQuaGFsZmFuZ2xlKSksdC5yaW5nLzIpKX0ociksdT9hLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9RFtrKHQpXSxpPXt4MDp0LngwLHgxOnQueDEscnB4MDp0LnJweDAscnB4MTp0LnJweDF9O2lmKHIpZT1yO2Vsc2UgaWYoSSlpZih0LnBhcmVudClpZihHKXt2YXIgYT10LngxPkc/MipNYXRoLlBJOjA7ZT17eDA6YSx4MTphfX1lbHNlIGU9e3JweDA6TCxycHgxOkx9LGMuZXh0ZW5kRmxhdChlLFgodCkpO2Vsc2UgZT17cnB4MDowLHJweDE6MH07ZWxzZSBlPXt4MDowLHgxOjB9O3JldHVybiBuLmludGVycG9sYXRlKGUsaSl9KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShlKHQpKX19KTphLmF0dHIoImQiLFUpLGkuY2FsbChBLHQsZSkuY2FsbChULHQse2lzVHJhbnNpdGlvbmluZzp0Ll90cmFuc2l0aW9uaW5nfSksYS5jYWxsKHYscixtKTt2YXIgaD1jLmVuc3VyZVNpbmdsZShpLCJnIiwic2xpY2V0ZXh0IikseT1jLmVuc3VyZVNpbmdsZShoLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSk7eS50ZXh0KGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnRleHRpbmZvO2lmKCFufHwibm9uZSI9PT1uKXJldHVybiIiO3ZhciBpPXQuZGF0YS5kYXRhLGE9ci5zZXBhcmF0b3JzLG89bi5zcGxpdCgiKyIpLHM9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1vLmluZGV4T2YodCl9LGw9W107cygibGFiZWwiKSYmaS5sYWJlbCYmbC5wdXNoKGkubGFiZWwpO2kuaGFzT3duUHJvcGVydHkoInYiKSYmcygidmFsdWUiKSYmbC5wdXNoKGcoaS52LGEpKTtpZihzKCJ0ZXh0Iikpe3ZhciB1PWMuY2FzdE9wdGlvbihlLGkuaSwidGV4dCIpO3UmJmwucHVzaCh1KX1yZXR1cm4gbC5qb2luKCI8YnI+Iil9KHIsbSxvKSkuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGwuZm9udCxiKHIpP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YS5pLGk9Yy5jYXN0T3B0aW9uKHQsbiwib3V0c2lkZXRleHRmb250LmNvbG9yIil8fGMuY2FzdE9wdGlvbih0LG4sInRleHRmb250LmNvbG9yIil8fHIuY29sb3IsYT1jLmNhc3RPcHRpb24odCxuLCJvdXRzaWRldGV4dGZvbnQuZmFtaWx5Iil8fGMuY2FzdE9wdGlvbih0LG4sInRleHRmb250LmZhbWlseSIpfHxyLmZhbWlseSxvPWMuY2FzdE9wdGlvbih0LG4sIm91dHNpZGV0ZXh0Zm9udC5zaXplIil8fGMuY2FzdE9wdGlvbih0LG4sInRleHRmb250LnNpemUiKXx8ci5zaXplO3JldHVybntjb2xvcjppLGZhbWlseTphLHNpemU6b319KG0scixvLmZvbnQpOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YSxpPW4uaSxhPWMuY2FzdE9wdGlvbih0LGksImluc2lkZXRleHRmb250LmNvbG9yIik7IWEmJnQuX2lucHV0LnRleHRmb250JiYoYT1jLmNhc3RPcHRpb24odC5faW5wdXQsaSwidGV4dGZvbnQuY29sb3IiKSk7dmFyIG89Yy5jYXN0T3B0aW9uKHQsaSwiaW5zaWRldGV4dGZvbnQuZmFtaWx5Iil8fGMuY2FzdE9wdGlvbih0LGksInRleHRmb250LmZhbWlseSIpfHxyLmZhbWlseSxsPWMuY2FzdE9wdGlvbih0LGksImluc2lkZXRleHRmb250LnNpemUiKXx8Yy5jYXN0T3B0aW9uKHQsaSwidGV4dGZvbnQuc2l6ZSIpfHxyLnNpemU7cmV0dXJue2NvbG9yOmF8fHMuY29udHJhc3Qobi5jb2xvciksZmFtaWx5Om8sc2l6ZTpsfX0obSxyLG8uZm9udCkpLmNhbGwoZi5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHg9bC5iQm94KHkubm9kZSgpKTtyLnRyYW5zZm9ybT1kKHgscixwKSxyLnRyYW5zbGF0ZVg9cShyKSxyLnRyYW5zbGF0ZVk9SChyKTt2YXIgXz1mdW5jdGlvbih0LGUpe3JldHVybiJ0cmFuc2xhdGUoIit0LnRyYW5zbGF0ZVgrIiwiK3QudHJhbnNsYXRlWSsiKSIrKHQudHJhbnNmb3JtLnNjYWxlPDE/InNjYWxlKCIrdC50cmFuc2Zvcm0uc2NhbGUrIikiOiIiKSsodC50cmFuc2Zvcm0ucm90YXRlPyJyb3RhdGUoIit0LnRyYW5zZm9ybS5yb3RhdGUrIikiOiIiKSsidHJhbnNsYXRlKCIrLShlLmxlZnQrZS5yaWdodCkvMisiLCIrLShlLnRvcCtlLmJvdHRvbSkvMisiKSJ9O3U/eS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9RFtrKHQpXSxpPXQudHJhbnNmb3JtO2lmKHIpZT1yO2Vsc2UgaWYoZT17cnB4MTp0LnJweDEsdHJhbnNmb3JtOntzY2FsZTowLHJvdGF0ZTppLnJvdGF0ZSxyQ2VudGVyOmkuckNlbnRlcix4OmkueCx5OmkueX19LEkpaWYodC5wYXJlbnQpaWYoRyl7dmFyIGE9dC54MT5HPzIqTWF0aC5QSTowO2UueDA9ZS54MT1hfWVsc2UgYy5leHRlbmRGbGF0KGUsWCh0KSk7ZWxzZSBlLngwPWUueDE9MDtlbHNlIGUueDA9ZS54MT0wO3ZhciBvPW4uaW50ZXJwb2xhdGUoZS5ycHgxLHQucnB4MSkscz1uLmludGVycG9sYXRlKGUueDAsdC54MCksbD1uLmludGVycG9sYXRlKGUueDEsdC54MSksdT1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnNjYWxlLGkuc2NhbGUpLGY9bi5pbnRlcnBvbGF0ZShlLnRyYW5zZm9ybS5yb3RhdGUsaS5yb3RhdGUpLGg9MD09PWkuckNlbnRlcj8zOjA9PT1lLnRyYW5zZm9ybS5yQ2VudGVyPzEvMzoxLHA9bi5pbnRlcnBvbGF0ZShlLnRyYW5zZm9ybS5yQ2VudGVyLGkuckNlbnRlcik7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPW8odCkscj1zKHQpLG49bCh0KSxhPWZ1bmN0aW9uKHQpe3JldHVybiBwKE1hdGgucG93KHQsaCkpfSh0KSxjPXtweG1pZDpWKGUsKHIrbikvMiksdHJhbnNmb3JtOntyQ2VudGVyOmEseDppLngseTppLnl9fSxkPXtycHgxOm8odCksdHJhbnNsYXRlWDpxKGMpLHRyYW5zbGF0ZVk6SChjKSx0cmFuc2Zvcm06e3NjYWxlOnUodCkscm90YXRlOmYodCksckNlbnRlcjphfX07cmV0dXJuIGR9fSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSx4KX19KTp5LmF0dHIoInRyYW5zZm9ybSIsXyhyLHgpKX0pfWZ1bmN0aW9uIHgodCxlKXt2YXIgcjtyZXR1cm4gZSYmdC5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7aWYoayh0KT09PWUpcmV0dXJuIHI9dC5jb3B5KCl9KSxyfHx0fWZ1bmN0aW9uIGIodCl7cmV0dXJuIiI9PT10LmRhdGEuZGF0YS5waWR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4hdC5wYXJlbnR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4hdC5jaGlsZHJlbn1mdW5jdGlvbiBrKHQpe3JldHVybiB0LmRhdGEuZGF0YS5pZH1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgbj10LmRhdHVtKCksaT0ocnx8e30pLmlzVHJhbnNpdGlvbmluZztoKHQsaXx8dyhuKXx8YihuKT9udWxsOiJwb2ludGVyIil9ZnVuY3Rpb24gQSh0LGUscil7dmFyIGk9clswXSxzPWkudHJhY2U7Il9oYXNIb3ZlckxhYmVsImluIHN8fChzLl9oYXNIb3ZlckxhYmVsPSExKSwiX2hhc0hvdmVyRXZlbnQiaW4gc3x8KHMuX2hhc0hvdmVyRXZlbnQ9ITEpLHQub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dDtpZighZS5fZHJhZ2dpbmcmJiExIT09ci5ob3Zlcm1vZGUpe3ZhciBhPWUuX2Z1bGxEYXRhW3MuaW5kZXhdLGw9dC5kYXRhLmRhdGEsdT1sLmksZj1mdW5jdGlvbih0KXtyZXR1cm4gYy5jYXN0T3B0aW9uKGEsdSx0KX0saD1mKCJob3ZlcnRlbXBsYXRlIikscD1vLmNhc3RIb3ZlcmluZm8oYSxyLHUpLGQ9ci5zZXBhcmF0b3JzO2lmKGh8fHAmJiJub25lIiE9PXAmJiJza2lwIiE9PXApe3ZhciB2PXQuckluc2NyaWJlZCxtPWkuY3grdC5weG1pZFswXSooMS12KSx5PWkuY3krdC5weG1pZFsxXSooMS12KSx4PXt9LGI9W10sXz1bXSx3PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Yi5pbmRleE9mKHQpfTtwJiYoYj0iYWxsIj09PXA/YS5fbW9kdWxlLmF0dHJpYnV0ZXMuaG92ZXJpbmZvLmZsYWdzOnAuc3BsaXQoIisiKSkseC5sYWJlbD1sLmxhYmVsLHcoImxhYmVsIikmJngubGFiZWwmJl8ucHVzaCh4LmxhYmVsKSxsLmhhc093blByb3BlcnR5KCJ2IikmJih4LnZhbHVlPWwudix4LnZhbHVlTGFiZWw9Zyh4LnZhbHVlLGQpLHcoInZhbHVlIikmJl8ucHVzaCh4LnZhbHVlTGFiZWwpKSx4LnRleHQ9ZigiaG92ZXJ0ZXh0Iil8fGYoInRleHQiKSx3KCJ0ZXh0IikmJngudGV4dCYmXy5wdXNoKHgudGV4dCksby5sb25lSG92ZXIoe3gwOm0tdip0LnJweDEseDE6bSt2KnQucnB4MSx5OnksaWRlYWxBbGlnbjp0LnB4bWlkWzBdPDA/ImxlZnQiOiJyaWdodCIsdHJhY2U6YSx0ZXh0Ol8uam9pbigiPGJyPiIpLG5hbWU6aHx8dygibmFtZSIpP2EubmFtZTp2b2lkIDAsY29sb3I6ZigiaG92ZXJsYWJlbC5iZ2NvbG9yIil8fGwuY29sb3IsYm9yZGVyQ29sb3I6ZigiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6ZigiaG92ZXJsYWJlbC5mb250LmZhbWlseSIpLGZvbnRTaXplOmYoImhvdmVybGFiZWwuZm9udC5zaXplIiksZm9udENvbG9yOmYoImhvdmVybGFiZWwuZm9udC5jb2xvciIpLGhvdmVydGVtcGxhdGU6aCxob3ZlcnRlbXBsYXRlTGFiZWxzOngsZXZlbnREYXRhOltNKHQsYSldfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDplfSkscy5faGFzSG92ZXJMYWJlbD0hMH1zLl9oYXNIb3ZlckV2ZW50PSEwLGUuZW1pdCgicGxvdGx5X2hvdmVyIix7cG9pbnRzOltNKHQsYSldLGV2ZW50Om4uZXZlbnR9KX19KSx0Lm9uKCJtb3VzZW91dCIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxpPWUuX2Z1bGxEYXRhW3MuaW5kZXhdLGE9bi5zZWxlY3QodGhpcykuZGF0dW0oKTtzLl9oYXNIb3ZlckV2ZW50JiYodC5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsZS5lbWl0KCJwbG90bHlfdW5ob3ZlciIse3BvaW50czpbTShhLGkpXSxldmVudDpuLmV2ZW50fSkscy5faGFzSG92ZXJFdmVudD0hMSkscy5faGFzSG92ZXJMYWJlbCYmKG8ubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpLHMuX2hhc0hvdmVyTGFiZWw9ITEpfSksdC5vbigiY2xpY2siLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsbD1lLl9mdWxsRGF0YVtzLmluZGV4XTtpZighMT09PXUudHJpZ2dlckhhbmRsZXIoZSwicGxvdGx5X3N1bmJ1cnN0Y2xpY2siLHtwb2ludHM6W00odCxsKV0sZXZlbnQ6bi5ldmVudH0pfHx3KHQpfHxiKHQpKXIuaG92ZXJtb2RlJiYoZS5faG92ZXJkYXRhPVtNKHQsbCldLG8uY2xpY2soZSxuLmV2ZW50KSk7ZWxzZSBpZighZS5fZHJhZ2dpbmcmJiFlLl90cmFuc2l0aW9uaW5nKXthLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLGwsci5fdHJhY2VQcmVHVUlbbC51aWRdLHtsZXZlbDpsLmxldmVsfSk7dmFyIGM9aS5oaWVyYXJjaHksZj1rKHQpLGg9Xyh0KT9mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiB0LmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIG49dC5jaGlsZHJlbnx8W10saT0wO2k8bi5sZW5ndGg7aSsrKWlmKGsobltpXSk9PT1lKXJldHVybiByPXQuY29weSgpfSkscnx8dH0oYyxmKTp4KGMsZikscD17ZGF0YTpbe2xldmVsOmsoaCl9XSx0cmFjZXM6W3MuaW5kZXhdfSxkPXtmcmFtZTp7cmVkcmF3OiExLGR1cmF0aW9uOm0uQ0xJQ0tfVFJBTlNJVElPTl9USU1FfSx0cmFuc2l0aW9uOntkdXJhdGlvbjptLkNMSUNLX1RSQU5TSVRJT05fVElNRSxlYXNpbmc6bS5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30sbW9kZToiaW1tZWRpYXRlIixmcm9tY3VycmVudDohMH07by5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSksYS5jYWxsKCJhbmltYXRlIixlLHAsZCl9fSl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXQuZGF0YS5kYXRhLG49e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6ci5pLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZX07cmV0dXJuIHAobixlLHIuaSksbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzPXQuX2Z1bGxMYXlvdXQuX3N1bmJ1cnN0bGF5ZXIsbD0hcixjPXImJnIuZHVyYXRpb24+MDsoKGE9cy5zZWxlY3RBbGwoImcudHJhY2Uuc3VuYnVyc3QiKS5kYXRhKGUsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidHJhY2UiLCEwKS5jbGFzc2VkKCJzdW5idXJzdCIsITApLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIiksYS5vcmRlcigpLGMpPyhpJiYobz1pKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtvJiZvKCl9KS5lYWNoKCJpbnRlcnJ1cHQiLGZ1bmN0aW9uKCl7byYmbygpfSkuZWFjaChmdW5jdGlvbigpe3Muc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaChmdW5jdGlvbihlKXt5KHQsZSx0aGlzLHIpfSl9KSk6YS5lYWNoKGZ1bmN0aW9uKGUpe3kodCxlLHRoaXMscil9KTtsJiZhLmV4aXQoKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vY29tcG9uZW50cy9meCI6NjE2LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjYxMiwiLi4vLi4vbGliIjo3MDAsIi4uLy4uL2xpYi9ldmVudHMiOjY4OSwiLi4vLi4vbGliL3NldGN1cnNvciI6NzIwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcyNCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi4vcGllL2hlbHBlcnMiOjEwMzEsIi4uL3BpZS9wbG90IjoxMDM1LCIuL2NvbnN0YW50cyI6MTE0MSwiLi9zdHlsZSI6MTE0NyxkMzoxNTQsImQzLWhpZXJhcmNoeSI6MTQ3fV0sMTE0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49ZS5kYXRhLmRhdGEsbz0hZS5jaGlsZHJlbixzPW4uaSxsPWEuY2FzdE9wdGlvbihyLHMsIm1hcmtlci5saW5lLmNvbG9yIil8fGkuZGVmYXVsdExpbmUsYz1hLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS53aWR0aCIpfHwwO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsYykuY2FsbChpLmZpbGwsbi5jb2xvcikuY2FsbChpLnN0cm9rZSxsKS5zdHlsZSgib3BhY2l0eSIsbz9yLmxlYWYub3BhY2l0eTpudWxsKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3N1bmJ1cnN0bGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZTtlLnN0eWxlKCJvcGFjaXR5IixyLm9wYWNpdHkpLGUuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwobyx0LHIpfSl9KX0sc3R5bGVPbmU6b319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9saWIiOjcwMCxkMzoxNTR9XSwxMTQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtmdW5jdGlvbiB1KHQpe3JldHVybntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxwcm9qZWN0Ont4Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx6Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHVzZWNvbG9ybWFwOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfSxoaWdobGlnaHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGhpZ2hsaWdodGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxoaWdobGlnaHR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfX19dmFyIGY9ZS5leHBvcnRzPWMobCh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6bygpLGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGkoIiIse2NvbG9yQXR0cjoieiBvciBzdXJmYWNlY29sb3IiLHNob3dTY2FsZURmbHQ6ITAsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjphLGNvbnRvdXJzOnt4OnUoKSx5OnUoKSx6OnUoKX0saGlkZXN1cmZhY2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxpZ2h0cG9zaXRpb246e3g6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjEwfSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxZTR9LHo6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjB9fSxsaWdodGluZzp7YW1iaWVudDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxkaWZmdXNlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6Ljh9LHNwZWN1bGFyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoyLGRmbHQ6LjA1fSxyb3VnaG5lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNX0sZnJlc25lbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6NSxkZmx0Oi4yfX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LF9kZXByZWNhdGVkOnt6YXV0bzpsKHt9LGkuemF1dG8se30pLHptaW46bCh7fSxpLnptaW4se30pLHptYXg6bCh7fSxpLnptYXgse30pfSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyl9KSwiY2FsYyIsIm5lc3RlZCIpO2YueC5lZGl0VHlwZT1mLnkuZWRpdFR5cGU9Zi56LmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIixmLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1ODQsIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MTUsIi4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NDV9XSwxMTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bih0LGUse3ZhbHM6ZS5zdXJmYWNlY29sb3IsY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSk6bih0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTg1fV0sMTE1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdXJmYWNlM2QiKSxpPXQoIm5kYXJyYXkiKSxhPXQoIm5kYXJyYXktaG9tb2dyYXBoeSIpLG89dCgibmRhcnJheS1maWxsIikscz10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGw9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxjPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSx1PXQoIi4uL2hlYXRtYXAvaW50ZXJwMmQiKSxmPXQoIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIik7ZnVuY3Rpb24gaCh0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5zdXJmYWNlPWUsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj1bITEsITEsITFdLHRoaXMubWluVmFsdWVzPVsxLzAsMS8wLDEvMF0sdGhpcy5tYXhWYWx1ZXM9Wy0xLzAsLTEvMCwtMS8wXSx0aGlzLmRhdGFTY2FsZVg9MSx0aGlzLmRhdGFTY2FsZVk9MSx0aGlzLnJlZmluZURhdGE9ITAsdGhpcy5faW50ZXJwb2xhdGVkWj0hMX12YXIgcD1oLnByb3RvdHlwZTtwLmdldFhhdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1zKHRoaXMuZGF0YS54KT9zKHRoaXMuZGF0YS54WzBdKT90aGlzLmRhdGEueFtlXVt0XTp0aGlzLmRhdGEueFt0XTp0O3JldHVybiB2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmdldFlhdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1zKHRoaXMuZGF0YS55KT9zKHRoaXMuZGF0YS55WzBdKT90aGlzLmRhdGEueVtlXVt0XTp0aGlzLmRhdGEueVtlXTplO3JldHVybiB2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmdldFphdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmRhdGEueltlXVt0XTtyZXR1cm4gbnVsbD09PWkmJnRoaXMuZGF0YS5jb25uZWN0Z2FwcyYmdGhpcy5kYXRhLl9pbnRlcnBvbGF0ZWRaJiYoaT10aGlzLmRhdGEuX2ludGVycG9sYXRlZFpbZV1bdF0pLHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMuc3VyZmFjZSl7dmFyIGU9KHQuZGF0YS5pbmRleFswXS0xKS90aGlzLmRhdGFTY2FsZVgtMSxyPSh0LmRhdGEuaW5kZXhbMV0tMSkvdGhpcy5kYXRhU2NhbGVZLTEsbj1NYXRoLm1heChNYXRoLm1pbihNYXRoLnJvdW5kKGUpLHRoaXMuZGF0YS56WzBdLmxlbmd0aC0xKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKE1hdGgucm91bmQociksdGhpcy5kYXRhLl95bGVuZ3RoLTEpLDApO3QuaW5kZXg9W24saV0sdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZ2V0WGF0KG4saSksdGhpcy5nZXRZYXQobixpKSx0aGlzLmdldFphdChuLGkpXSx0LmRhdGFDb29yZGluYXRlPVt0aGlzLmdldFhhdChuLGksdGhpcy5kYXRhLnhjYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC54YXhpcyksdGhpcy5nZXRZYXQobixpLHRoaXMuZGF0YS55Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQueWF4aXMpLHRoaXMuZ2V0WmF0KG4saSx0aGlzLmRhdGEuemNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnpheGlzKV07Zm9yKHZhciBhPTA7YTwzO2ErKyl7dmFyIG89dC5kYXRhQ29vcmRpbmF0ZVthXTtudWxsIT1vJiYodC5kYXRhQ29vcmRpbmF0ZVthXSo9dGhpcy5zY2VuZS5kYXRhU2NhbGVbYV0pfXZhciBzPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KHMpJiZzW2ldJiZ2b2lkIDAhPT1zW2ldW25dP3QudGV4dExhYmVsPXNbaV1bbl06dC50ZXh0TGFiZWw9c3x8IiIsdC5kYXRhLmRhdGFDb29yZGluYXRlPXQuZGF0YUNvb3JkaW5hdGUuc2xpY2UoKSx0aGlzLnN1cmZhY2UuaGlnaGxpZ2h0KHQuZGF0YSksdGhpcy5zY2VuZS5nbHBsb3Quc3Bpa2VzLnBvc2l0aW9uPXQuZGF0YUNvb3JkaW5hdGUsITB9fTt2YXIgZD1bMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3LDEwMDksMTAxMywxMDE5LDEwMjEsMTAzMSwxMDMzLDEwMzksMTA0OSwxMDUxLDEwNjEsMTA2MywxMDY5LDEwODcsMTA5MSwxMDkzLDEwOTcsMTEwMywxMTA5LDExMTcsMTEyMywxMTI5LDExNTEsMTE1MywxMTYzLDExNzEsMTE4MSwxMTg3LDExOTMsMTIwMSwxMjEzLDEyMTcsMTIyMywxMjI5LDEyMzEsMTIzNywxMjQ5LDEyNTksMTI3NywxMjc5LDEyODMsMTI4OSwxMjkxLDEyOTcsMTMwMSwxMzAzLDEzMDcsMTMxOSwxMzIxLDEzMjcsMTM2MSwxMzY3LDEzNzMsMTM4MSwxMzk5LDE0MDksMTQyMywxNDI3LDE0MjksMTQzMywxNDM5LDE0NDcsMTQ1MSwxNDUzLDE0NTksMTQ3MSwxNDgxLDE0ODMsMTQ4NywxNDg5LDE0OTMsMTQ5OSwxNTExLDE1MjMsMTUzMSwxNTQzLDE1NDksMTU1MywxNTU5LDE1NjcsMTU3MSwxNTc5LDE1ODMsMTU5NywxNjAxLDE2MDcsMTYwOSwxNjEzLDE2MTksMTYyMSwxNjI3LDE2MzcsMTY1NywxNjYzLDE2NjcsMTY2OSwxNjkzLDE2OTcsMTY5OSwxNzA5LDE3MjEsMTcyMywxNzMzLDE3NDEsMTc0NywxNzUzLDE3NTksMTc3NywxNzgzLDE3ODcsMTc4OSwxODAxLDE4MTEsMTgyMywxODMxLDE4NDcsMTg2MSwxODY3LDE4NzEsMTg3MywxODc3LDE4NzksMTg4OSwxOTAxLDE5MDcsMTkxMywxOTMxLDE5MzMsMTk0OSwxOTUxLDE5NzMsMTk3OSwxOTg3LDE5OTMsMTk5NywxOTk5LDIwMDMsMjAxMSwyMDE3LDIwMjcsMjAyOSwyMDM5LDIwNTMsMjA2MywyMDY5LDIwODEsMjA4MywyMDg3LDIwODksMjA5OSwyMTExLDIxMTMsMjEyOSwyMTMxLDIxMzcsMjE0MSwyMTQzLDIxNTMsMjE2MSwyMTc5LDIyMDMsMjIwNywyMjEzLDIyMjEsMjIzNywyMjM5LDIyNDMsMjI1MSwyMjY3LDIyNjksMjI3MywyMjgxLDIyODcsMjI5MywyMjk3LDIzMDksMjMxMSwyMzMzLDIzMzksMjM0MSwyMzQ3LDIzNTEsMjM1NywyMzcxLDIzNzcsMjM4MSwyMzgzLDIzODksMjM5MywyMzk5LDI0MTEsMjQxNywyNDIzLDI0MzcsMjQ0MSwyNDQ3LDI0NTksMjQ2NywyNDczLDI0NzcsMjUwMywyNTIxLDI1MzEsMjUzOSwyNTQzLDI1NDksMjU1MSwyNTU3LDI1NzksMjU5MSwyNTkzLDI2MDksMjYxNywyNjIxLDI2MzMsMjY0NywyNjU3LDI2NTksMjY2MywyNjcxLDI2NzcsMjY4MywyNjg3LDI2ODksMjY5MywyNjk5LDI3MDcsMjcxMSwyNzEzLDI3MTksMjcyOSwyNzMxLDI3NDEsMjc0OSwyNzUzLDI3NjcsMjc3NywyNzg5LDI3OTEsMjc5NywyODAxLDI4MDMsMjgxOSwyODMzLDI4MzcsMjg0MywyODUxLDI4NTcsMjg2MSwyODc5LDI4ODcsMjg5NywyOTAzLDI5MDksMjkxNywyOTI3LDI5MzksMjk1MywyOTU3LDI5NjMsMjk2OSwyOTcxLDI5OTldO2Z1bmN0aW9uIGcodCxlKXtpZih0PGUpcmV0dXJuIDA7Zm9yKHZhciByPTA7MD09PU1hdGguZmxvb3IodCVlKTspdC89ZSxyKys7cmV0dXJuIHJ9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9W10scj0wO3I8ZC5sZW5ndGg7cisrKXt2YXIgbj1kW3JdO2UucHVzaChnKHQsbikpfXJldHVybiBlfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPXYodCkscj10LG49MDtuPGQubGVuZ3RoO24rKylpZihlW25dPjApe3I9ZFtuXTticmVha31yZXR1cm4gcn1mdW5jdGlvbiB5KHQsZSl7aWYoISh0PDF8fGU8MSkpe2Zvcih2YXIgcj12KHQpLG49dihlKSxpPTEsYT0wO2E8ZC5sZW5ndGg7YSsrKWkqPU1hdGgucG93KGRbYV0sTWF0aC5tYXgoclthXSxuW2FdKSk7cmV0dXJuIGl9fXAuY2FsY1hudW1zPWZ1bmN0aW9uKHQpe3ZhciBlLHI9W107Zm9yKGU9MTtlPHQ7ZSsrKXt2YXIgbj10aGlzLmdldFhhdChlLTEsMCksaT10aGlzLmdldFhhdChlLDApO3JbZS0xXT1pIT09biYmbnVsbCE9biYmbnVsbCE9aT9NYXRoLmFicyhpLW4pOjB9dmFyIGE9MDtmb3IoZT0xO2U8dDtlKyspYSs9cltlLTFdO2ZvcihlPTE7ZTx0O2UrKykwPT09cltlLTFdP3JbZS0xXT0xOnJbZS0xXT1NYXRoLnJvdW5kKGEvcltlLTFdKTtyZXR1cm4gcn0scC5jYWxjWW51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WWF0KDAsZS0xKSxpPXRoaXMuZ2V0WWF0KDAsZSk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfTt2YXIgeD1bMSwyLDQsNiwxMiwyNCwzNiw0OCw2MCwxMjAsMTgwLDI0MCwzNjAsNzIwLDg0MCwxMjYwXSxiPXhbOV0sXz14WzEzXTtwLmVzdGltYXRlU2NhbGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MStmdW5jdGlvbih0KXtpZigwIT09dC5sZW5ndGgpe2Zvcih2YXIgZT0xLHI9MDtyPHQubGVuZ3RoO3IrKyllPXkoZSx0W3JdKTtyZXR1cm4gZX19KDA9PT1lP3RoaXMuY2FsY1hudW1zKHQpOnRoaXMuY2FsY1ludW1zKHQpKTtyPGI7KXIqPTI7Zm9yKDtyPl87KXItLSxyLz1tKHIpLCsrcjxiJiYocj1fKTt2YXIgbj1NYXRoLnJvdW5kKHIvdCk7cmV0dXJuIG4+MT9uOjF9LHAucmVmaW5lQ29vcmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGFTY2FsZVgscj10aGlzLmRhdGFTY2FsZVksbj10WzBdLnNoYXBlWzBdLG89dFswXS5zaGFwZVsxXSxzPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzBdKmUrMSksbD0wfE1hdGguZmxvb3IodFswXS5zaGFwZVsxXSpyKzEpLGM9MStuKzEsdT0xK28rMSxmPWkobmV3IEZsb2F0MzJBcnJheShjKnUpLFtjLHVdKSxoPTA7aDx0Lmxlbmd0aDsrK2gpe3RoaXMuc3VyZmFjZS5wYWRGaWVsZChmLHRbaF0pO3ZhciBwPWkobmV3IEZsb2F0MzJBcnJheShzKmwpLFtzLGxdKTthKHAsZixbZSwwLDAsMCxyLDAsMCwwLDFdKSx0W2hdPXB9fSxwLnNldENvbnRvdXJMZXZlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W1tdLFtdLFtdXSxlPSExLHI9MDtyPDM7KytyKXRoaXMuc2hvd0NvbnRvdXJbcl0mJihlPSEwLHRbcl09dGhpcy5zY2VuZS5jb250b3VyTGV2ZWxzW3JdKTtlJiZ0aGlzLnN1cmZhY2UudXBkYXRlKHtsZXZlbHM6dH0pfSxwLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxzPXRoaXMuc2NlbmUsaD1zLmZ1bGxTY2VuZUxheW91dCxwPXRoaXMuc3VyZmFjZSxkPXQub3BhY2l0eSxnPWwodCxkKSx2PXMuZGF0YVNjYWxlLG09dC56WzBdLmxlbmd0aCx5PXQuX3lsZW5ndGgseD1zLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIGI9W107Zm9yKGU9MDtlPDM7ZSsrKWZvcihiW2VdPVtdLHI9MDtyPG07cisrKWJbZV1bcl09W107Zm9yKHI9MDtyPG07cisrKWZvcihuPTA7bjx5O24rKyliWzBdW3JdW25dPXRoaXMuZ2V0WGF0KHIsbix0LnhjYWxlbmRhcixoLnhheGlzKSxiWzFdW3JdW25dPXRoaXMuZ2V0WWF0KHIsbix0LnljYWxlbmRhcixoLnlheGlzKSxiWzJdW3JdW25dPXRoaXMuZ2V0WmF0KHIsbix0LnpjYWxlbmRhcixoLnpheGlzKTtpZih0LmNvbm5lY3RnYXBzKWZvcih0Ll9lbXB0eXBvaW50cz1mKGJbMl0pLHUoYlsyXSx0Ll9lbXB0eXBvaW50cyksdC5faW50ZXJwb2xhdGVkWj1bXSxyPTA7cjxtO3IrKylmb3IodC5faW50ZXJwb2xhdGVkWltyXT1bXSxuPTA7bjx5O24rKyl0Ll9pbnRlcnBvbGF0ZWRaW3JdW25dPWJbMl1bcl1bbl07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248eTtuKyspbnVsbD09KGE9YltlXVtyXVtuXSk/YltlXVtyXVtuXT1OYU46YT1iW2VdW3JdW25dKj12W2VdO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHk7bisrKW51bGwhPShhPWJbZV1bcl1bbl0pJiYodGhpcy5taW5WYWx1ZXNbZV0+YSYmKHRoaXMubWluVmFsdWVzW2VdPWEpLHRoaXMubWF4VmFsdWVzW2VdPGEmJih0aGlzLm1heFZhbHVlc1tlXT1hKSk7Zm9yKGU9MDtlPDM7ZSsrKXQuX29iamVjdE9mZnNldFtlXT0uNSoodGhpcy5taW5WYWx1ZXNbZV0rdGhpcy5tYXhWYWx1ZXNbZV0pO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHk7bisrKW51bGwhPShhPWJbZV1bcl1bbl0pJiYoYltlXVtyXVtuXS09dC5fb2JqZWN0T2Zmc2V0W2VdKTt2YXIgdz1baShuZXcgRmxvYXQzMkFycmF5KG0qeSksW20seV0pLGkobmV3IEZsb2F0MzJBcnJheShtKnkpLFttLHldKSxpKG5ldyBGbG9hdDMyQXJyYXkobSp5KSxbbSx5XSldO28od1swXSxmdW5jdGlvbih0LGUpe3JldHVybiBiWzBdW3RdW2VdfSksbyh3WzFdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJbMV1bdF1bZV19KSxvKHdbMl0sZnVuY3Rpb24odCxlKXtyZXR1cm4gYlsyXVt0XVtlXX0pLGI9W107dmFyIGs9e2NvbG9ybWFwOmcsbGV2ZWxzOltbXSxbXSxbXV0sc2hvd0NvbnRvdXI6WyEwLCEwLCEwXSxzaG93U3VyZmFjZTohdC5oaWRlc3VyZmFjZSxjb250b3VyUHJvamVjdDpbWyExLCExLCExXSxbITEsITEsITFdLFshMSwhMSwhMV1dLGNvbnRvdXJXaWR0aDpbMSwxLDFdLGNvbnRvdXJDb2xvcjpbWzEsMSwxLDFdLFsxLDEsMSwxXSxbMSwxLDEsMV1dLGNvbnRvdXJUaW50OlsxLDEsMV0sZHluYW1pY0NvbG9yOltbMSwxLDEsMV0sWzEsMSwxLDFdLFsxLDEsMSwxXV0sZHluYW1pY1dpZHRoOlsxLDEsMV0sZHluYW1pY1RpbnQ6WzEsMSwxXSxvcGFjaXR5OnQub3BhY2l0eX07aWYoay5pbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHQuc3VyZmFjZWNvbG9yKXt2YXIgVD1pKG5ldyBGbG9hdDMyQXJyYXkobSp5KSxbbSx5XSk7byhULGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc3VyZmFjZWNvbG9yW3JdW2VdfSksdy5wdXNoKFQpfWVsc2Ugay5pbnRlbnNpdHlCb3VuZHNbMF0qPXZbMl0say5pbnRlbnNpdHlCb3VuZHNbMV0qPXZbMl07KF88d1swXS5zaGFwZVswXXx8Xzx3WzBdLnNoYXBlWzFdKSYmKHRoaXMucmVmaW5lRGF0YT0hMSksITA9PT10aGlzLnJlZmluZURhdGEmJih0aGlzLmRhdGFTY2FsZVg9dGhpcy5lc3RpbWF0ZVNjYWxlKHdbMF0uc2hhcGVbMF0sMCksdGhpcy5kYXRhU2NhbGVZPXRoaXMuZXN0aW1hdGVTY2FsZSh3WzBdLnNoYXBlWzFdLDEpLDE9PT10aGlzLmRhdGFTY2FsZVgmJjE9PT10aGlzLmRhdGFTY2FsZVl8fHRoaXMucmVmaW5lQ29vcmRzKHcpKSx0LnN1cmZhY2Vjb2xvciYmKGsuaW50ZW5zaXR5PXcucG9wKCkpO3ZhciBBPVshMCwhMCwhMF0sTT1bIngiLCJ5IiwieiJdO2ZvcihlPTA7ZTwzOysrZSl7dmFyIFM9dC5jb250b3Vyc1tNW2VdXTtBW2VdPVMuaGlnaGxpZ2h0LGsuc2hvd0NvbnRvdXJbZV09Uy5zaG93fHxTLmhpZ2hsaWdodCxrLnNob3dDb250b3VyW2VdJiYoay5jb250b3VyUHJvamVjdFtlXT1bUy5wcm9qZWN0LngsUy5wcm9qZWN0LnksUy5wcm9qZWN0LnpdLFMuc2hvdz8odGhpcy5zaG93Q29udG91cltlXT0hMCxrLmxldmVsc1tlXT14W2VdLHAuaGlnaGxpZ2h0Q29sb3JbZV09ay5jb250b3VyQ29sb3JbZV09YyhTLmNvbG9yKSxTLnVzZWNvbG9ybWFwP3AuaGlnaGxpZ2h0VGludFtlXT1rLmNvbnRvdXJUaW50W2VdPTA6cC5oaWdobGlnaHRUaW50W2VdPWsuY29udG91clRpbnRbZV09MSxrLmNvbnRvdXJXaWR0aFtlXT1TLndpZHRoKTp0aGlzLnNob3dDb250b3VyW2VdPSExLFMuaGlnaGxpZ2h0JiYoay5keW5hbWljQ29sb3JbZV09YyhTLmhpZ2hsaWdodGNvbG9yKSxrLmR5bmFtaWNXaWR0aFtlXT1TLmhpZ2hsaWdodHdpZHRoKSl9KGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0ucmdiLHI9dFt0Lmxlbmd0aC0xXS5yZ2I7cmV0dXJuIGVbMF09PT1yWzBdJiZlWzFdPT09clsxXSYmZVsyXT09PXJbMl0mJmVbM109PT1yWzNdfSkoZykmJihrLnZlcnRleENvbG9yPSEwKSxrLm9iamVjdE9mZnNldD1bdC5fb2JqZWN0T2Zmc2V0WzBdLHQuX29iamVjdE9mZnNldFsxXSx0Ll9vYmplY3RPZmZzZXRbMl1dLGsuY29vcmRzPXcscC51cGRhdGUoaykscC52aXNpYmxlPXQudmlzaWJsZSxwLmVuYWJsZUR5bmFtaWM9QSxwLmVuYWJsZUhpZ2hsaWdodD1BLHAuc25hcFRvRGF0YT0hMCwibGlnaHRpbmciaW4gdCYmKHAuYW1iaWVudExpZ2h0PXQubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2VMaWdodD10LmxpZ2h0aW5nLmRpZmZ1c2UscC5zcGVjdWxhckxpZ2h0PXQubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9dC5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPXQubGlnaHRpbmcuZnJlc25lbCksImxpZ2h0cG9zaXRpb24iaW4gdCYmKHAubGlnaHRQb3NpdGlvbj1bdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdKSxkJiZkPDEmJihwLnN1cHBvcnRzVHJhbnNwYXJlbmN5PSEwKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc3VyZmFjZSksdGhpcy5zdXJmYWNlLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgaCh0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6Njk3LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MjMsIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIjo5NTQsIi4uL2hlYXRtYXAvaW50ZXJwMmQiOjk1NywiZ2wtc3VyZmFjZTNkIjozMTIsbmRhcnJheTo0NDIsIm5kYXJyYXktZmlsbCI6NDMyLCJuZGFycmF5LWhvbW9ncmFwaHkiOjQzNH1dLDExNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyKXtlIGluIHQmJiEociBpbiB0KSYmKHRbcl09dFtlXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjLHU7ZnVuY3Rpb24gZihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbyxyLG4pfXZhciBoPWYoIngiKSxwPWYoInkiKSxkPWYoInoiKTtpZighZHx8IWQubGVuZ3RofHxoJiZoLmxlbmd0aDwxfHxwJiZwLmxlbmd0aDwxKWUudmlzaWJsZT0hMTtlbHNle2UuX3hsZW5ndGg9QXJyYXkuaXNBcnJheShoKSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KGhbMF0pP2QubGVuZ3RoOmRbMF0ubGVuZ3RoLGUuX3lsZW5ndGg9ZC5sZW5ndGgsZS5fb2JqZWN0T2Zmc2V0PVswLDAsMF0sbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxsKSxmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJoaWRlc3VyZmFjZSIsImNvbm5lY3RnYXBzIiwib3BhY2l0eSJdLmZvckVhY2goZnVuY3Rpb24odCl7Zih0KX0pO3ZhciBnPWYoInN1cmZhY2Vjb2xvciIpLHY9WyJ4IiwieSIsInoiXTtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBtPSJjb250b3Vycy4iK3ZbY10seT1mKG0rIi5zaG93IikseD1mKG0rIi5oaWdobGlnaHQiKTtpZih5fHx4KWZvcih1PTA7dTwzOysrdSlmKG0rIi5wcm9qZWN0LiIrdlt1XSk7eSYmKGYobSsiLmNvbG9yIiksZihtKyIud2lkdGgiKSxmKG0rIi51c2Vjb2xvcm1hcCIpKSx4JiYoZihtKyIuaGlnaGxpZ2h0Y29sb3IiKSxmKG0rIi5oaWdobGlnaHR3aWR0aCIpKX1nfHwocyh0LCJ6bWluIiwiY21pbiIpLHModCwiem1heCIsImNtYXgiKSxzKHQsInphdXRvIiwiY2F1dG8iKSksYSh0LGUsbCxmLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxlLl9sZW5ndGg9bnVsbH19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTg3LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcmVnaXN0cnkiOjgyOSwiLi9hdHRyaWJ1dGVzIjoxMTQ4fV0sMTE1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj17bWluOiJjbWluIixtYXg6ImNtYXgifSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vY29udmVydCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic3VyZmFjZSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDNkIiksbi5jYXRlZ29yaWVzPVsiZ2wzZCIsIjJkTWFwIiwibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjc4OSwiLi9hdHRyaWJ1dGVzIjoxMTQ4LCIuL2NhbGMiOjExNDksIi4vY29udmVydCI6MTE1MCwiLi9kZWZhdWx0cyI6MTE1MX1dLDExNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlczsoZS5leHBvcnRzPWEoe2RvbWFpbjpzKHtuYW1lOiJ0YWJsZSIsdHJhY2U6ITB9KSxjb2x1bW53aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sY29sdW1ub3JkZXI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxoZWFkZXI6e3ZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZm9ybWF0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6Mjh9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoiZ3JleSJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoid2hpdGUifX0sZm9udDppKHt9LG8oe2FycmF5T2s6ITB9KSl9LGNlbGxzOnt2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjIwfSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6ImdyZXkifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6IndoaXRlIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfX0sImNhbGMiLCJmcm9tLXJvb3QiKSkudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1NjAsIi4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzMxLCIuLi8uLi9wbG90cy9kb21haW4iOjc3MywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NzR9XSwxMTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KCIuL3Bsb3QiKTtyLm5hbWU9InRhYmxlIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9bih0LmNhbGNkYXRhLCJ0YWJsZSIpWzBdO2UubGVuZ3RoJiZpKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInRhYmxlIiksYT1lLl9oYXMmJmUuX2hhcygidGFibGUiKTtpJiYhYSYmbi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIudGFibGUiKS5yZW1vdmUoKX19LHsiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjc4NCwiLi9wbG90IjoxMTYxfV0sMTE1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih7fSl9fSx7Ii4uLy4uL2xpYi9ndXAiOjY5OH1dLDExNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjZWxsUGFkOjgsY29sdW1uRXh0ZW50T2Zmc2V0OjEwLGNvbHVtblRpdGxlT2Zmc2V0OjI4LGVtcHR5SGVhZGVySGVpZ2h0OjE2LGxhdGV4Q2hlY2s6L15cJC4qXCQkLyxnb2xkZW5SYXRpbzoxLjYxOCxsaW5lQnJlYWtlcjoiPGJyPiIsbWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUscmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbjoxMjAscmVsZWFzZVRyYW5zaXRpb25FYXNlOiJjdWJpYy1vdXQiLHNjcm9sbGJhckNhcHR1cmVXaWR0aDoxOCxzY3JvbGxiYXJIaWRlRGVsYXk6MWUzLHNjcm9sbGJhckhpZGVEdXJhdGlvbjoxZTMsc2Nyb2xsYmFyT2Zmc2V0OjUsc2Nyb2xsYmFyV2lkdGg6OCx0cmFuc2l0aW9uRHVyYXRpb246MTAwLHRyYW5zaXRpb25FYXNlOiJjdWJpYy1vdXQiLHVwbGlmdDo1LHdyYXBTcGFjZXI6IiAiLHdyYXBTcGxpdENoYXJhY3RlcjoiICIsY246e3RhYmxlOiJ0YWJsZSIsdGFibGVDb250cm9sVmlldzoidGFibGUtY29udHJvbC12aWV3IixzY3JvbGxCYWNrZ3JvdW5kOiJzY3JvbGwtYmFja2dyb3VuZCIseUNvbHVtbjoieS1jb2x1bW4iLGNvbHVtbkJsb2NrOiJjb2x1bW4tYmxvY2siLHNjcm9sbEFyZWFDbGlwOiJzY3JvbGwtYXJlYS1jbGlwIixzY3JvbGxBcmVhQ2xpcFJlY3Q6InNjcm9sbC1hcmVhLWNsaXAtcmVjdCIsY29sdW1uQm91bmRhcnk6ImNvbHVtbi1ib3VuZGFyeSIsY29sdW1uQm91bmRhcnlDbGlwcGF0aDoiY29sdW1uLWJvdW5kYXJ5LWNsaXBwYXRoIixjb2x1bW5Cb3VuZGFyeVJlY3Q6ImNvbHVtbi1ib3VuZGFyeS1yZWN0Iixjb2x1bW5DZWxsczoiY29sdW1uLWNlbGxzIixjb2x1bW5DZWxsOiJjb2x1bW4tY2VsbCIsY2VsbFJlY3Q6ImNlbGwtcmVjdCIsY2VsbFRleHQ6ImNlbGwtdGV4dCIsY2VsbFRleHRIb2xkZXI6ImNlbGwtdGV4dC1ob2xkZXIiLHNjcm9sbGJhcktpdDoic2Nyb2xsYmFyLWtpdCIsc2Nyb2xsYmFyOiJzY3JvbGxiYXIiLHNjcm9sbGJhclNsaWRlcjoic2Nyb2xsYmFyLXNsaWRlciIsc2Nyb2xsYmFyR2x5cGg6InNjcm9sbGJhci1nbHlwaCIsc2Nyb2xsYmFyQ2FwdHVyZVpvbmU6InNjcm9sbGJhci1jYXB0dXJlLXpvbmUifX19LHt9XSwxMTU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoImZhc3QtaXNudW1lcmljIik7ZnVuY3Rpb24gbyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLG8odFtyXSkpO3JldHVybiBlfXJldHVybiB0fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdCtlfWZ1bmN0aW9uIGwodCl7dmFyIGUscj10LnNsaWNlKCksbj0xLzAsaT0wO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspQXJyYXkuaXNBcnJheShyW2VdKXx8KHJbZV09W3JbZV1dKSxuPU1hdGgubWluKG4scltlXS5sZW5ndGgpLGk9TWF0aC5tYXgoaSxyW2VdLmxlbmd0aCk7aWYobiE9PWkpZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGE9aS1yW2VdLmxlbmd0aDthJiYocltlXT1yW2VdLmNvbmNhdChjKGEpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09IiI7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5jYWxjZGF0YS5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbihlLHIpe3JldHVybiByLnhJbmRleDx0LnhJbmRleD9lK3IuY29sdW1uV2lkdGg6ZX0sMCl9ZnVuY3Rpb24gZih0LGUpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGkoe30sdFtyXSx7YXV4aWxpYXJ5QmxvY2tzOmV9KX0pfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHIsbj17fSxpPTAsYT0wLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxzPTAsbD0wLGM9MDtjPHQubGVuZ3RoO2MrKylyPXRbY10sby5yb3dzLnB1c2goe3Jvd0luZGV4OmMscm93SGVpZ2h0OnJ9KSwoKGErPXIpPj1lfHxjPT09dC5sZW5ndGgtMSkmJihuW2ldPW8sby5rZXk9bCsrLG8uZmlyc3RSb3dJbmRleD1zLG8ubGFzdFJvd0luZGV4PWMsbz17Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119LGkrPWEscz1jKzEsYT0wKTtyZXR1cm4gbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sKGUuY2VsbHMudmFsdWVzKSxwPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKGUuaGVhZGVyLnZhbHVlcy5sZW5ndGgsdC5sZW5ndGgpfSxkPWwoZS5oZWFkZXIudmFsdWVzKTtkLmxlbmd0aCYmIWRbMF0ubGVuZ3RoJiYoZFswXT1bIiJdLGQ9bChkKSk7dmFyIGc9ZC5jb25jYXQocChyKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gYygoZFswXXx8WyIiXSkubGVuZ3RoKX0pKSx2PWUuZG9tYWluLG09TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLncqKHYueFsxXS12LnhbMF0pKSx5PU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS5oKih2LnlbMV0tdi55WzBdKSkseD1lLmhlYWRlci52YWx1ZXMubGVuZ3RoP2dbMF0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaGVhZGVyLmhlaWdodH0pOltuLmVtcHR5SGVhZGVySGVpZ2h0XSxiPXIubGVuZ3RoP3JbMF0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2VsbHMuaGVpZ2h0fSk6W10sXz14LnJlZHVjZShzLDApLHc9aChiLHktXytuLnVwbGlmdCksaz1mKGgoeCxfKSxbXSksVD1mKHcsayksQT17fSxNPWUuX2Z1bGxJbnB1dC5jb2x1bW5vcmRlci5jb25jYXQocChyLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxTPWcubWFwKGZ1bmN0aW9uKHQscil7dmFyIG49QXJyYXkuaXNBcnJheShlLmNvbHVtbndpZHRoKT9lLmNvbHVtbndpZHRoW01hdGgubWluKHIsZS5jb2x1bW53aWR0aC5sZW5ndGgtMSldOmUuY29sdW1ud2lkdGg7cmV0dXJuIGEobik/TnVtYmVyKG4pOjF9KSxFPVMucmVkdWNlKHMsMCk7Uz1TLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC9FKm19KTt2YXIgQz1NYXRoLm1heChvKGUuaGVhZGVyLmxpbmUud2lkdGgpLG8oZS5jZWxscy5saW5lLndpZHRoKSksTD17a2V5OmUudWlkK3QuX2NvbnRleHQuc3RhdGljUGxvdCx0cmFuc2xhdGVYOnYueFswXSp0Ll9mdWxsTGF5b3V0Ll9zaXplLncsdHJhbnNsYXRlWTp0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKDEtdi55WzFdKSxzaXplOnQuX2Z1bGxMYXlvdXQuX3NpemUsd2lkdGg6bSxtYXhMaW5lV2lkdGg6QyxoZWlnaHQ6eSxjb2x1bW5PcmRlcjpNLGdyb3VwSGVpZ2h0Onkscm93QmxvY2tzOlQsaGVhZGVyUm93QmxvY2tzOmssc2Nyb2xsWTowLGNlbGxzOmkoe30sZS5jZWxscyx7dmFsdWVzOnJ9KSxoZWFkZXJDZWxsczppKHt9LGUuaGVhZGVyLHt2YWx1ZXM6Z30pLGdkQ29sdW1uczpnLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGdkQ29sdW1uc09yaWdpbmFsT3JkZXI6Zy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxwcmV2UGFnZXM6WzAsMF0sc2Nyb2xsYmFyU3RhdGU6e3Njcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M6ITF9LGNvbHVtbnM6Zy5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj1BW3RdO3JldHVybiBBW3RdPShyfHwwKSsxLHtrZXk6dCsiX18iK0FbdF0sbGFiZWw6dCxzcGVjSW5kZXg6ZSx4SW5kZXg6TVtlXSx4U2NhbGU6dSx4OnZvaWQgMCxjYWxjZGF0YTp2b2lkIDAsY29sdW1uV2lkdGg6U1tlXX19KX07cmV0dXJuIEwuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2FsY2RhdGE9TCx0Lng9dSh0KX0pLEx9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY5MCwiLi9jb25zdGFudHMiOjExNTYsImZhc3QtaXNudW1lcmljIjoyMjF9XSwxMTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3Iuc3BsaXRUb1BhbmVscz1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXSxyPW4oe30sdCx7a2V5OiJoZWFkZXIiLHR5cGU6ImhlYWRlciIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITAsdmFsdWVzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5oZWFkZXJSb3dCbG9ja3MsY2FsY2RhdGE6bih7fSx0LmNhbGNkYXRhLHtjZWxsczp0LmNhbGNkYXRhLmhlYWRlckNlbGxzfSl9KTtyZXR1cm5bbih7fSx0LHtrZXk6ImNlbGxzMSIsdHlwZToiY2VsbHMiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSksbih7fSx0LHtrZXk6ImNlbGxzMiIsdHlwZToiY2VsbHMiLHBhZ2U6MSxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSkscl19LHIuc3BsaXRUb0NlbGxzPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzW3QucGFnZV0scj1lP2Uucm93c1swXS5yb3dJbmRleDowLG49ZT9yK2Uucm93cy5sZW5ndGg6MDtyZXR1cm5bcixuXX0odCk7cmV0dXJuKHQudmFsdWVzfHxbXSkuc2xpY2UoZVswXSxlWzFdKS5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm57a2V5V2l0aGluQmxvY2s6bisoInN0cmluZyI9PXR5cGVvZiByJiZyLm1hdGNoKC9bPCQmPiBdLyk/Il9rZXlidXN0ZXJfIitNYXRoLnJhbmRvbSgpOiIiKSxrZXk6ZVswXStuLGNvbHVtbjp0LGNhbGNkYXRhOnQuY2FsY2RhdGEscGFnZTp0LnBhZ2Uscm93QmxvY2tzOnQucm93QmxvY2tzLHZhbHVlOnJ9fSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY5MH1dLDExNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YShlLG8scykscygiY29sdW1ud2lkdGgiKSxzKCJoZWFkZXIudmFsdWVzIikscygiaGVhZGVyLmZvcm1hdCIpLHMoImhlYWRlci5hbGlnbiIpLHMoImhlYWRlci5wcmVmaXgiKSxzKCJoZWFkZXIuc3VmZml4IikscygiaGVhZGVyLmhlaWdodCIpLHMoImhlYWRlci5saW5lLndpZHRoIikscygiaGVhZGVyLmxpbmUuY29sb3IiKSxzKCJoZWFkZXIuZmlsbC5jb2xvciIpLG4uY29lcmNlRm9udChzLCJoZWFkZXIuZm9udCIsbi5leHRlbmRGbGF0KHt9LG8uZm9udCkpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29sdW1ub3JkZXJ8fFtdLG49dC5oZWFkZXIudmFsdWVzLmxlbmd0aCxpPXIuc2xpY2UoMCxuKSxhPWkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLG89aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5kZXhPZih0KX0pLHM9by5sZW5ndGg7czxuO3MrKylvLnB1c2gocyk7ZSgiY29sdW1ub3JkZXIiLG8pfShlLHMpLHMoImNlbGxzLnZhbHVlcyIpLHMoImNlbGxzLmZvcm1hdCIpLHMoImNlbGxzLmFsaWduIikscygiY2VsbHMucHJlZml4IikscygiY2VsbHMuc3VmZml4IikscygiY2VsbHMuaGVpZ2h0IikscygiY2VsbHMubGluZS53aWR0aCIpLHMoImNlbGxzLmxpbmUuY29sb3IiKSxzKCJjZWxscy5maWxsLmNvbG9yIiksbi5jb2VyY2VGb250KHMsImNlbGxzLmZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzczLCIuL2F0dHJpYnV0ZXMiOjExNTN9XSwxMTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0idGFibGUiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMTUzLCIuL2Jhc2VfcGxvdCI6MTE1NCwiLi9jYWxjIjoxMTU1LCIuL2RlZmF1bHRzIjoxMTU5LCIuL3Bsb3QiOjExNjF9XSwxMTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJkMyIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxsPXQoIi4uLy4uL2xpYiIpLnJhaXNlVG9Ub3AsYz10KCIuLi8uLi9saWIiKS5jYW5jZWxUcmFuc2l0aW9uLHU9dCgiLi9kYXRhX3ByZXBhcmF0aW9uX2hlbHBlciIpLGY9dCgiLi9kYXRhX3NwbGl0X2hlbHBlcnMiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtmdW5jdGlvbiBwKHQpe3JldHVybiBNYXRoLmNlaWwodC5jYWxjZGF0YS5tYXhMaW5lV2lkdGgvMil9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrIl9zY3JvbGxBcmVhQm90dG9tQ2xpcF8iK2Uua2V5fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4iY2xpcCIrdC5fZnVsbExheW91dC5fdWlkKyJfY29sdW1uQm91bmRhcnlDbGlwcGF0aF8iK2UuY2FsY2RhdGEua2V5KyJfIitlLnNwZWNJbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybltdLmNvbmNhdC5hcHBseShbXSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX19kYXRhX199KX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbz10LnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJLaXQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO28uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyS2l0LCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIiksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2Nyb2xsYmFyU3RhdGU7ZS50b3RhbEhlaWdodD1mdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2NrcztyZXR1cm4gSShlLGUubGVuZ3RoLTEpKyhlLmxlbmd0aD9EKGVbZS5sZW5ndGgtMV0sMS8wKToxKX0odCksZS5zY3JvbGxhYmxlQXJlYUhlaWdodD10Lmdyb3VwSGVpZ2h0LUEodCksZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0PU1hdGgubWluKGUudG90YWxIZWlnaHQsZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS5yYXRpbz1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQvZS50b3RhbEhlaWdodCxlLmJhckxlbmd0aD1NYXRoLm1heChlLnJhdGlvKmUuY3VycmVudGx5VmlzaWJsZUhlaWdodCxuLmdvbGRlblJhdGlvKm4uc2Nyb2xsYmFyV2lkdGgpLGUuYmFyV2lnZ2xlUm9vbT1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQtZS5iYXJMZW5ndGgsZS53aWdnbGVSb29tPU1hdGgubWF4KDAsZS50b3RhbEhlaWdodC1lLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnRvcFk9MD09PWUuYmFyV2lnZ2xlUm9vbT8wOnQuc2Nyb2xsWS9lLndpZ2dsZVJvb20qZS5iYXJXaWdnbGVSb29tLGUuYm90dG9tWT1lLnRvcFkrZS5iYXJMZW5ndGgsZS5kcmFnTXVsdGlwbGllcj1lLndpZ2dsZVJvb20vZS5iYXJXaWdnbGVSb29tfSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQud2lkdGgrbi5zY3JvbGxiYXJXaWR0aC8yK24uc2Nyb2xsYmFyT2Zmc2V0KSsiICIrQSh0KSsiKSJ9KTt2YXIgcz1vLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXIpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyLCEwKTt2YXIgbD1zLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJTbGlkZXIpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyU2xpZGVyLCEwKSxsLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwICIrKHQuc2Nyb2xsYmFyU3RhdGUudG9wWXx8MCkrIikifSk7dmFyIGM9bC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyR2x5cGgpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2MuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyR2x5cGgsITApLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIixuLnNjcm9sbGJhcldpZHRoKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsInJvdW5kIikuYXR0cigieTEiLG4uc2Nyb2xsYmFyV2lkdGgvMiksYy5hdHRyKCJ5MiIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Nyb2xsYmFyU3RhdGUuYmFyTGVuZ3RoLW4uc2Nyb2xsYmFyV2lkdGgvMn0pLmF0dHIoInN0cm9rZS1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5EcmFnSW5Qcm9ncmVzc3x8IXQuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbXx8cj8wOi40fSksYy50cmFuc2l0aW9uKCkuZGVsYXkoMCkuZHVyYXRpb24oMCksYy50cmFuc2l0aW9uKCkuZGVsYXkobi5zY3JvbGxiYXJIaWRlRGVsYXkpLmR1cmF0aW9uKG4uc2Nyb2xsYmFySGlkZUR1cmF0aW9uKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCk7dmFyIHU9cy5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyQ2FwdHVyZVpvbmUpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3UuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyQ2FwdHVyZVpvbmUsITApLmF0dHIoInN0cm9rZSIsIndoaXRlIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC4wMSkuYXR0cigic3Ryb2tlLXdpZHRoIixuLnNjcm9sbGJhckNhcHR1cmVXaWR0aCkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJidXR0IikuYXR0cigieTEiLDApLm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3ZhciBuPWkuZXZlbnQueSxhPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLnNjcm9sbGJhclN0YXRlLHM9bi1hLnRvcCxsPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLG8uc2Nyb2xsYWJsZUFyZWFIZWlnaHRdKS5yYW5nZShbMCxvLnRvdGFsSGVpZ2h0XSkuY2xhbXAoITApO28udG9wWTw9cyYmczw9by5ib3R0b21ZfHxTKGUsdCxudWxsLGwocy1vLmJhckxlbmd0aC8yKSkocil9KS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0LnNjcm9sbGJhclN0YXRlLnNjcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M9ITAsdH0pLm9uKCJkcmFnIixTKGUsdCkpLm9uKCJkcmFnZW5kIixmdW5jdGlvbigpe30pKSx1LmF0dHIoInkyIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxhYmxlQXJlYUhlaWdodH0pLGUuX2NvbnRleHQuc3RhdGljUGxvdCYmKGMucmVtb3ZlKCksdS5yZW1vdmUoKSl9ZnVuY3Rpb24geSh0LGUscixzKXt2YXIgbD1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5DZWxsKS5kYXRhKGYuc3BsaXRUb0NlbGxzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQ2VsbCwhMCksZS5leGl0KCkucmVtb3ZlKCksZX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbHMpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGxzLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShyKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0LGUpe3ZhciByPXQuY2FsY2RhdGEuY2VsbHMuZm9udCxuPXQuY29sdW1uLnNwZWNJbmRleCxpPXtzaXplOl8oci5zaXplLG4sZSksY29sb3I6XyhyLmNvbG9yLG4sZSksZmFtaWx5Ol8oci5mYW1pbHksbixlKX07dC5yb3dOdW1iZXI9dC5rZXksdC5hbGlnbj1fKHQuY2FsY2RhdGEuY2VsbHMuYWxpZ24sbixlKSx0LmNlbGxCb3JkZXJXaWR0aD1fKHQuY2FsY2RhdGEuY2VsbHMubGluZS53aWR0aCxuLGUpLHQuZm9udD1pfSl9KGwpLGZ1bmN0aW9uKHQpe3QuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbi5jb2x1bW5XaWR0aH0pLmF0dHIoInN0cm9rZS13aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2VsbEJvcmRlcldpZHRofSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKTtoLnN0cm9rZShlLF8odC5jYWxjZGF0YS5jZWxscy5saW5lLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpLGguZmlsbChlLF8odC5jYWxjZGF0YS5jZWxscy5maWxsLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpfSl9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxSZWN0KS5kYXRhKGEucmVwZWF0LGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uY2VsbFJlY3QsITApLGV9KGwpKTt2YXIgYz1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsVGV4dCkuZGF0YShhLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChuLmNuLmNlbGxUZXh0LCEwKS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbigpe3JldHVybiJhdXRvIn0pLm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7aS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLGV9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxUZXh0SG9sZGVyKS5kYXRhKGEucmVwZWF0LGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY2VsbFRleHRIb2xkZXIsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKSxlfShsKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0KXtvLmZvbnQoaS5zZWxlY3QodGhpcyksdC5mb250KX0pfShjKSx4KGMsZSxzLHQpLE8obCl9ZnVuY3Rpb24geCh0LGUscixhKXt0LnRleHQoZnVuY3Rpb24odCl7dmFyIGU9dC5jb2x1bW4uc3BlY0luZGV4LHI9dC5yb3dOdW1iZXIsYT10LnZhbHVlLG89InN0cmluZyI9PXR5cGVvZiBhLHM9byYmYS5tYXRjaCgvPGJyPi9pKSxsPSFvfHxzO3QubWF5SGF2ZU1hcmt1cD1vJiZhLm1hdGNoKC9bPCY+XS8pO3ZhciBjLHU9InN0cmluZyI9PXR5cGVvZihjPWEpJiZjLm1hdGNoKG4ubGF0ZXhDaGVjayk7dC5sYXRleD11O3ZhciBmLGgscD11PyIiOl8odC5jYWxjZGF0YS5jZWxscy5wcmVmaXgsZSxyKXx8IiIsZD11PyIiOl8odC5jYWxjZGF0YS5jZWxscy5zdWZmaXgsZSxyKXx8IiIsZz11P251bGw6Xyh0LmNhbGNkYXRhLmNlbGxzLmZvcm1hdCxlLHIpfHxudWxsLHY9cCsoZz9pLmZvcm1hdChnKSh0LnZhbHVlKTp0LnZhbHVlKStkO2lmKHQud3JhcHBpbmdOZWVkZWQ9IXQud3JhcHBlZCYmIWwmJiF1JiYoZj1iKHYpKSx0LmNlbGxIZWlnaHRNYXlJbmNyZWFzZT1zfHx1fHx0Lm1heUhhdmVNYXJrdXB8fCh2b2lkIDA9PT1mP2Iodik6ZiksdC5uZWVkc0NvbnZlcnRUb1RzcGFucz10Lm1heUhhdmVNYXJrdXB8fHQud3JhcHBpbmdOZWVkZWR8fHQubGF0ZXgsdC53cmFwcGluZ05lZWRlZCl7dmFyIG09KCIgIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP3YucmVwbGFjZSgvPGEgaHJlZj0vZ2ksIjxhX2hyZWY9Iik6dikuc3BsaXQobi53cmFwU3BsaXRDaGFyYWN0ZXIpLHk9IiAiPT09bi53cmFwU3BsaXRDaGFyYWN0ZXI/bS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvPGFfaHJlZj0vZ2ksIjxhIGhyZWY9Iil9KTptO3QuZnJhZ21lbnRzPXkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0ZXh0OnQsd2lkdGg6bnVsbH19KSx0LmZyYWdtZW50cy5wdXNoKHtmcmFnbWVudDpuLndyYXBTcGFjZXIsd2lkdGg6bnVsbH0pLGg9eS5qb2luKG4ubGluZUJyZWFrZXIpK24ubGluZUJyZWFrZXIrbi53cmFwU3BhY2VyfWVsc2UgZGVsZXRlIHQuZnJhZ21lbnRzLGg9djtyZXR1cm4gaH0pLmF0dHIoImR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC5uZWVkc0NvbnZlcnRUb1RzcGFucz8wOiIwLjc1ZW0ifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgbz1pLnNlbGVjdCh0aGlzKSxsPXQud3JhcHBpbmdOZWVkZWQ/QzpMO3QubmVlZHNDb252ZXJ0VG9Uc3BhbnM/cy5jb252ZXJ0VG9Uc3BhbnMobyxhLGwocix0aGlzLGUsYSx0KSk6aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit6KHQpKyIgIituLmNlbGxQYWQrIikifSkuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW9uKHQpe3JldHVybntsZWZ0OiJzdGFydCIsY2VudGVyOiJtaWRkbGUiLHJpZ2h0OiJlbmQifVt0LmFsaWduXX0pfSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZihuLndyYXBTcGxpdENoYXJhY3Rlcil9ZnVuY3Rpb24gXyh0LGUscil7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG49dFtNYXRoLm1pbihlLHQubGVuZ3RoLTEpXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uW01hdGgubWluKHIsbi5sZW5ndGgtMSldOm59cmV0dXJuIHR9ZnVuY3Rpb24gdyh0LGUscil7dC50cmFuc2l0aW9uKCkuZWFzZShuLnJlbGVhc2VUcmFuc2l0aW9uRWFzZSkuZHVyYXRpb24obi5yZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLngrIiAiK3IrIikiKX1mdW5jdGlvbiBrKHQpe3JldHVybiJjZWxscyI9PT10LnR5cGV9ZnVuY3Rpb24gVCh0KXtyZXR1cm4iaGVhZGVyIj09PXQudHlwZX1mdW5jdGlvbiBBKHQpe3JldHVybih0LnJvd0Jsb2Nrcy5sZW5ndGg/dC5yb3dCbG9ja3NbMF0uYXV4aWxpYXJ5QmxvY2tzOltdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtEKGUsMS8wKX0sMCl9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dihlKVswXTtpZih2b2lkIDAhPT1uKXt2YXIgaT1uLnJvd0Jsb2NrcyxhPW4uY2FsY2RhdGEsbz1JKGksaS5sZW5ndGgpLHM9bi5jYWxjZGF0YS5ncm91cEhlaWdodC1BKG4pLGw9YS5zY3JvbGxZPU1hdGgubWF4KDAsTWF0aC5taW4oby1zLGEuc2Nyb2xsWSkpLGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPW8ucm93cyxsPTAsYz0wO2M8cy5sZW5ndGg7YysrKWwrPXNbY10ucm93SGVpZ2h0O28uYWxsUm93c0hlaWdodD1sLGU8aStsJiZlK3I+aSYmbi5wdXNoKGEpLGkrPWx9cmV0dXJuIG59KGksbCxzKTsxPT09Yy5sZW5ndGgmJihjWzBdPT09aS5sZW5ndGgtMT9jLnVuc2hpZnQoY1swXS0xKTpjLnB1c2goY1swXSsxKSksY1swXSUyJiZjLnJldmVyc2UoKSxlLmVhY2goZnVuY3Rpb24odCxlKXt0LnBhZ2U9Y1tlXSx0LnNjcm9sbFk9bH0pLGUuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAgIisoSSh0LnJvd0Jsb2Nrcyx0LnBhZ2UpLXQuc2Nyb2xsWSkrIikifSksdCYmKEUodCxyLGUsYyxuLnByZXZQYWdlcyxuLDApLEUodCxyLGUsYyxuLnByZXZQYWdlcyxuLDEpLG0ocix0KSl9fWZ1bmN0aW9uIFModCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2FsY2RhdGE/by5jYWxjZGF0YTpvLGw9ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHMua2V5PT09dC5rZXl9KSxjPXJ8fHMuc2Nyb2xsYmFyU3RhdGUuZHJhZ011bHRpcGxpZXIsdT1zLnNjcm9sbFk7cy5zY3JvbGxZPXZvaWQgMD09PWE/cy5zY3JvbGxZK2MqaS5ldmVudC5keTphO3ZhciBmPWwuc2VsZWN0QWxsKCIuIituLmNuLnlDb2x1bW4pLnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5CbG9jaykuZmlsdGVyKGspO3JldHVybiBNKHQsZixsKSxzLnNjcm9sbFk9PT11fX1mdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8pe25bb10hPT1pW29dJiYoY2xlYXJUaW1lb3V0KGEuY3VycmVudFJlcGFpbnRbb10pLGEuY3VycmVudFJlcGFpbnRbb109c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPXIuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1vJiZuW2VdIT09aVtlXX0pO3kodCxlLGEsciksaVtvXT1uW29dfSkpfWZ1bmN0aW9uIEModCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89aS5zZWxlY3QoZS5wYXJlbnROb2RlKTtvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5mcmFnbWVudHM7by5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKGZ1bmN0aW9uKHQscil7ZVtyXS53aWR0aD10aGlzLmdldENvbXB1dGVkVGV4dExlbmd0aCgpfSk7dmFyIHIsaSxhPWVbZS5sZW5ndGgtMV0ud2lkdGgscz1lLnNsaWNlKDAsLTEpLGw9W10sYz0wLHU9dC5jb2x1bW4uY29sdW1uV2lkdGgtMipuLmNlbGxQYWQ7Zm9yKHQudmFsdWU9IiI7cy5sZW5ndGg7KWMrKGk9KHI9cy5zaGlmdCgpKS53aWR0aCthKT51JiYodC52YWx1ZSs9bC5qb2luKG4ud3JhcFNwYWNlcikrbi5saW5lQnJlYWtlcixsPVtdLGM9MCksbC5wdXNoKHIudGV4dCksYys9aTtjJiYodC52YWx1ZSs9bC5qb2luKG4ud3JhcFNwYWNlcikpLHQud3JhcHBlZD0hMH0pLG8uc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikucmVtb3ZlKCkseChvLnNlbGVjdCgiLiIrbi5jbi5jZWxsVGV4dCkscix0LGEpLGkuc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5jYWxsKE8pfX1mdW5jdGlvbiBMKHQsZSxyLGEsbyl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW8uc2V0dGxlZFkpe3ZhciBzPWkuc2VsZWN0KGUucGFyZW50Tm9kZSksbD1SKG8pLGM9by5rZXktbC5maXJzdFJvd0luZGV4LHU9bC5yb3dzW2NdLnJvd0hlaWdodCxmPW8uY2VsbEhlaWdodE1heUluY3JlYXNlP2UucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQrMipuLmNlbGxQYWQ6dSxoPU1hdGgubWF4KGYsdSk7aC1sLnJvd3NbY10ucm93SGVpZ2h0JiYobC5yb3dzW2NdLnJvd0hlaWdodD1oLHQuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkNlbGwpLmNhbGwoTyksTShudWxsLHQuZmlsdGVyKGspLDApLG0ocixhLCEwKSkscy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3QoIi4iK24uY24uY2VsbFJlY3QpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSxhPWUudG9wLXQudG9wKyhyP3IubWF0cml4LmY6bi5jZWxsUGFkKTtyZXR1cm4idHJhbnNsYXRlKCIreihvLGkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KCIuIituLmNuLmNlbGxUZXh0SG9sZGVyKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpKyIgIithKyIpIn0pLG8uc2V0dGxlZFk9ITB9fX1mdW5jdGlvbiB6KHQsZSl7c3dpdGNoKHQuYWxpZ24pe2Nhc2UibGVmdCI6cmV0dXJuIG4uY2VsbFBhZDtjYXNlInJpZ2h0IjpyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApLW4uY2VsbFBhZDtjYXNlImNlbnRlciI6cmV0dXJuKHQuY29sdW1uLmNvbHVtbldpZHRoLShlfHwwKSkvMjtkZWZhdWx0OnJldHVybiBuLmNlbGxQYWR9fWZ1bmN0aW9uIE8odCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2Nrcy5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtEKGUsMS8wKX0sMCk7cmV0dXJuInRyYW5zbGF0ZSgwICIrKEQoUih0KSx0LmtleSkrZSkrIikifSkuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxSZWN0KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybihlPVIodCkscj10LmtleSxlLnJvd3Nbci1lLmZpcnN0Um93SW5kZXhdKS5yb3dIZWlnaHQ7dmFyIGUscn0pfWZ1bmN0aW9uIEkodCxlKXtmb3IodmFyIHI9MCxuPWUtMTtuPj0wO24tLSlyKz1QKHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIEQodCxlKXtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoJiZ0LnJvd3Nbbl0ucm93SW5kZXg8ZTtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gcn1mdW5jdGlvbiBQKHQpe3ZhciBlPXQuYWxsUm93c0hlaWdodDtpZih2b2lkIDAhPT1lKXJldHVybiBlO2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGg7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHQuYWxsUm93c0hlaWdodD1yLHJ9ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5yb3dCbG9ja3NbdC5wYWdlXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hdC5fY29udGV4dC5zdGF0aWNQbG90LHM9dC5fZnVsbExheW91dC5fcGFwZXIuc2VsZWN0QWxsKCIuIituLmNuLnRhYmxlKS5kYXRhKGUubWFwKGZ1bmN0aW9uKGUpe3ZhciByPWEudW53cmFwKGUpLnRyYWNlO3JldHVybiB1KHQscil9KSxhLmtleUZ1bik7cy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi50YWJsZSwhMCkuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHMuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoK3Quc2l6ZS5sK3Quc2l6ZS5yfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQrdC5zaXplLnQrdC5zaXplLmJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnRyYW5zbGF0ZVgrIiwiK3QudHJhbnNsYXRlWSsiKSJ9KTt2YXIgaD1zLnNlbGVjdEFsbCgiLiIrbi5jbi50YWJsZUNvbnRyb2xWaWV3KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKSx4PWguZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24udGFibGVDb250cm9sVmlldywhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpO3ImJngub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24oZSl7aC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10fSkuY2FsbChtLHQpfSkub24oIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe2lmKCFlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nKXtlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nPSEwO3ZhciByPWUuc2Nyb2xsWStpLmV2ZW50LmRlbHRhWTtTKHQsaCxudWxsLHIpKGUpfHwoaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSxpLmV2ZW50LnByZXZlbnREZWZhdWx0KCkpLGUuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmc9ITF9fSkuY2FsbChtLHQsITApLGguYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5zaXplLmwrIiAiK3Quc2l6ZS50KyIpIn0pO3ZhciBiPWguc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEJhY2tncm91bmQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2IuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQmFja2dyb3VuZCwhMCkuYXR0cigiZmlsbCIsIm5vbmUiKSxiLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSksaC5lYWNoKGZ1bmN0aW9uKGUpe28uc2V0Q2xpcFVybChpLnNlbGVjdCh0aGlzKSxkKHQsZSksdCl9KTt2YXIgXz1oLnNlbGVjdEFsbCgiLiIrbi5jbi55Q29sdW1uKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbnN9LGEua2V5RnVuKTtfLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnlDb2x1bW4sITApLF8uZXhpdCgpLnJlbW92ZSgpLF8uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIgMCkifSksciYmXy5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbihlKXtyZXR1cm4gdyhpLnNlbGVjdCh0aGlzKSxlLC1uLnVwbGlmdCksbCh0aGlzKSxlLmNhbGNkYXRhLmNvbHVtbkRyYWdJblByb2dyZXNzPSEwLG0oaC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5rZXl9KSx0KSxlfSkub24oImRyYWciLGZ1bmN0aW9uKHQpe3ZhciBlPWkuc2VsZWN0KHRoaXMpLHI9ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9PT1lP2kuZXZlbnQueDplLngpK2UuY29sdW1uV2lkdGgvMn07dC54PU1hdGgubWF4KC1uLm92ZXJkcmFnLE1hdGgubWluKHQuY2FsY2RhdGEud2lkdGgrbi5vdmVyZHJhZy10LmNvbHVtbldpZHRoLGkuZXZlbnQueCkpLHYoXykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNhbGNkYXRhLmtleT09PXQuY2FsY2RhdGEua2V5fSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiByKHQpLXIoZSl9KS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7ZS54SW5kZXg9cixlLng9dD09PWU/ZS54OmUueFNjYWxlKGUpfSksXy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQhPT1lfSkudHJhbnNpdGlvbigpLmVhc2Uobi50cmFuc2l0aW9uRWFzZSkuZHVyYXRpb24obi50cmFuc2l0aW9uRHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiIDApIn0pLGUuY2FsbChjKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LngrIiAtIituLnVwbGlmdCsiICkiKX0pLm9uKCJkcmFnZW5kIixmdW5jdGlvbihlKXt2YXIgcj1pLnNlbGVjdCh0aGlzKSxuPWUuY2FsY2RhdGE7ZS54PWUueFNjYWxlKGUpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITEsdyhyLGUsMCksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjtlLmdkQ29sdW1ucy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbbi5pbmRleE9mKHQpXS1yW24uaW5kZXhPZihlKV19KSxlLmNvbHVtbm9yZGVyPXIsdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIpfSh0LG4sbi5jb2x1bW5zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC54SW5kZXh9KSl9KSksXy5lYWNoKGZ1bmN0aW9uKGUpe28uc2V0Q2xpcFVybChpLnNlbGVjdCh0aGlzKSxnKHQsZSksdCl9KTt2YXIgQT1fLnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5CbG9jaykuZGF0YShmLnNwbGl0VG9QYW5lbHMsYS5rZXlGdW4pO0EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQmxvY2ssITApLmF0dHIoImlkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSxBLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRyYWdIYW5kbGU/ImV3LXJlc2l6ZSI6dC5jYWxjZGF0YS5zY3JvbGxiYXJTdGF0ZS5iYXJXaWdnbGVSb29tPyJucy1yZXNpemUiOiJkZWZhdWx0In0pO3ZhciBFPUEuZmlsdGVyKFQpLEM9QS5maWx0ZXIoayk7ciYmQy5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0fSkub24oImRyYWciLFModCxoLC0xKSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKCl7fSkpLHkodCxoLEUsQSkseSh0LGgsQyxBKTt2YXIgTD1oLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxBcmVhQ2xpcCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7TC5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXAsITApLmF0dHIoImlkIixmdW5jdGlvbihlKXtyZXR1cm4gZCh0LGUpfSk7dmFyIHo9TC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsQXJlYUNsaXBSZWN0KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTt6LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCwhMCkuYXR0cigieCIsLW4ub3ZlcmRyYWcpLmF0dHIoInkiLC1uLnVwbGlmdCkuYXR0cigiZmlsbCIsIm5vbmUiKSx6LmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCsyKm4ub3ZlcmRyYWd9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodCtuLnVwbGlmdH0pLF8uc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJvdW5kYXJ5KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeSwhMCk7dmFyIE89Xy5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7Ty5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCwhMCksTy5hdHRyKCJpZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGcodCxlKX0pO3ZhciBJPU8uc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7SS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeVJlY3QsITApLmF0dHIoImZpbGwiLCJub25lIiksSS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uV2lkdGgrMipwKHQpfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5jYWxjZGF0YS5oZWlnaHQrMipwKHQpK24udXBsaWZ0fSkuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuLXAodCl9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4tcCh0KX0pLE0obnVsbCxDLGgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTk4LCIuLi8uLi9saWIiOjcwMCwiLi4vLi4vbGliL2d1cCI6Njk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcyNCwiLi9jb25zdGFudHMiOjExNTYsIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXIiOjExNTcsIi4vZGF0YV9zcGxpdF9oZWxwZXJzIjoxMTU4LGQzOjE1NH1dLDExNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eTpuLnkseDpuLngseDA6bi54MCx5MDpuLnkwLG5hbWU6aSh7fSxuLm5hbWUse30pLG9yaWVudGF0aW9uOmkoe30sbi5vcmllbnRhdGlvbix7fSksYmFuZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ3aWR0aCIsImNvdW50Il0sZGZsdDoid2lkdGgiLGVkaXRUeXBlOiJjYWxjIn0sc3Bhbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNvZnQiLCJoYXJkIiwibWFudWFsIl0sZGZsdDoic29mdCIsZWRpdFR5cGU6ImNhbGMifSxzcGFuOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHBvaW50czppKHt9LG4uYm94cG9pbnRzLHt9KSxqaXR0ZXI6aSh7fSxuLmppdHRlcix7fSkscG9pbnRwb3M6aSh7fSxuLnBvaW50cG9zLHt9KSx3aWR0aDppKHt9LG4ud2lkdGgse30pLG1hcmtlcjpuLm1hcmtlcix0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsYm94Ont2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMjUsZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sbWVhbmxpbmU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90aCIsInBvc2l0aXZlIiwibmVnYXRpdmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInZpb2xpbnMiLCJwb2ludHMiLCJrZGUiXSxkZmx0OiJ2aW9saW5zK3BvaW50cytrZGUiLGV4dHJhczpbImFsbCJdLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo2OTAsIi4uL2JveC9hdHRyaWJ1dGVzIjo4NjJ9XSwxMTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2JveC9jYWxjIiksbz10KCIuL2hlbHBlcnMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0LGUscil7dmFyIGk9ZS5tYXgtZS5taW47aWYoIWkpcmV0dXJuIHQuYmFuZHdpZHRoP3QuYmFuZHdpZHRoOjA7aWYodC5iYW5kd2lkdGgpcmV0dXJuIE1hdGgubWF4KHQuYmFuZHdpZHRoLGkvMWU0KTt2YXIgYT1yLmxlbmd0aCxvPW4uc3RkZXYocixhLTEsZS5tZWFuKTtyZXR1cm4gTWF0aC5tYXgoZnVuY3Rpb24odCxlLHIpe3JldHVybiAxLjA1OSpNYXRoLm1pbihlLHIvMS4zNDkpKk1hdGgucG93KHQsLS4yKX0oYSxvLGUucTMtZS5xMSksaS8xMDApfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGEsbz10LnNwYW5tb2RlLGw9dC5zcGFufHxbXSxjPVtlLm1pbixlLm1heF0sdT1bZS5taW4tMipuLGUubWF4KzIqbl07ZnVuY3Rpb24gZihuKXt2YXIgaT1sW25dLGE9Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP3IucjJjKGkpOnIuZDJjKGksMCx0W2UudmFsTGV0dGVyKyJjYWxlbmRhciJdKTtyZXR1cm4gYT09PXM/dVtuXTphfXZhciBoPXt0eXBlOiJsaW5lYXIiLHJhbmdlOmE9InNvZnQiPT09bz91OiJoYXJkIj09PW8/YzpbZigwKSxmKDEpXX07cmV0dXJuIGkuc2V0Q29udmVydChoKSxoLmNsZWFuUmFuZ2UoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKTtpZihyWzBdLnQuZW1wdHkpcmV0dXJuIHI7Zm9yKHZhciBzPXQuX2Z1bGxMYXlvdXQsdT1pLmdldEZyb21JZCh0LGVbImgiPT09ZS5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKSxmPTEvMCxoPS0xLzAscD0wLGQ9MCxnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB2PXJbZ10sbT12LnB0cy5tYXAoby5leHRyYWN0VmFsKSx5PXYuYmFuZHdpZHRoPWwoZSx2LG0pLHg9di5zcGFuPWMoZSx2LHUseSk7aWYodi5taW49PT12Lm1heCYmMD09PXkpeD12LnNwYW49W3YubWluLHYubWF4XSx2LmRlbnNpdHk9W3t2OjEsdDp4WzBdfV0sdi5iYW5kd2lkdGg9eSxwPU1hdGgubWF4KHAsMSk7ZWxzZXt2YXIgYj14WzFdLXhbMF0sXz1NYXRoLmNlaWwoYi8oeS8zKSksdz1iL187aWYoIWlzRmluaXRlKHcpfHwhaXNGaW5pdGUoXykpcmV0dXJuIG4uZXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29tcHV0aW5nIHRoZSB2aW9saW4gc3BhbiIpLHJbMF0udC5lbXB0eT0hMCxyO3ZhciBrPW8ubWFrZUtERSh2LGUsbSk7di5kZW5zaXR5PW5ldyBBcnJheShfKTtmb3IodmFyIFQ9MCxBPXhbMF07QTx4WzFdK3cvMjtUKyssQSs9dyl7dmFyIE09ayhBKTt2LmRlbnNpdHlbVF09e3Y6TSx0OkF9LHA9TWF0aC5tYXgocCxNKX19ZD1NYXRoLm1heChkLG0ubGVuZ3RoKSxmPU1hdGgubWluKGYseFswXSksaD1NYXRoLm1heChoLHhbMV0pfXZhciBTPWkuZmluZEV4dHJlbWVzKHUsW2YsaF0se3BhZGRlZDohMH0pO2lmKGUuX2V4dHJlbWVzW3UuX2lkXT1TLGUud2lkdGgpclswXS50Lm1heEtERT1wO2Vsc2V7dmFyIEU9cy5fdmlvbGluU2NhbGVHcm91cFN0YXRzLEM9ZS5zY2FsZWdyb3VwLEw9RVtDXTtMPyhMLm1heEtERT1NYXRoLm1heChMLm1heEtERSxwKSxMLm1heENvdW50PU1hdGgubWF4KEwubWF4Q291bnQsZCkpOkVbQ109e21heEtERTpwLG1heENvdW50OmR9fXJldHVybiByWzBdLnQubGFiZWxzLmtkZT1uLl8odCwia2RlOiIpLHJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL2JveC9jYWxjIjo4NjMsIi4vaGVscGVycyI6MTE2Nn1dLDExNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRQb3NpdGlvbk9mZnNldCxpPVsidiIsImgiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxhPWUueGF4aXMsbz1lLnlheGlzLHM9MDtzPGkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPWlbc10sYz0iaCI9PT1sP286YSx1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGg9cltmXSxwPWhbMF0udCxkPWhbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fCJ2aW9saW4iIT09ZC50eXBlfHxwLmVtcHR5fHxkLm9yaWVudGF0aW9uIT09bHx8ZC54YXhpcyE9PWEuX2lkfHxkLnlheGlzIT09by5faWR8fHUucHVzaChmKX1uKCJ2aW9saW4iLHQsdSxjKX19fSx7Ii4uL2JveC9jcm9zc190cmFjZV9jYWxjIjo4NjR9XSwxMTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vYm94L2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSwhMSE9PWUudmlzaWJsZSl7bCgiYmFuZHdpZHRoIiksbCgic2lkZSIpLGwoIndpZHRoIil8fChsKCJzY2FsZWdyb3VwIixlLm5hbWUpLGwoInNjYWxlbW9kZSIpKTt2YXIgdSxmPWwoInNwYW4iKTtBcnJheS5pc0FycmF5KGYpJiYodT0ibWFudWFsIiksbCgic3Bhbm1vZGUiLHUpO3ZhciBoPWwoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxwPWwoImxpbmUud2lkdGgiKSxkPWwoImZpbGxjb2xvciIsaS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpO2EuaGFuZGxlUG9pbnRzRGVmYXVsdHModCxlLGwse3ByZWZpeDoiIn0pO3ZhciBnPWMoImJveC53aWR0aCIpLHY9YygiYm94LmZpbGxjb2xvciIsZCksbT1jKCJib3gubGluZS5jb2xvciIsaCkseT1jKCJib3gubGluZS53aWR0aCIscCk7bCgiYm94LnZpc2libGUiLEJvb2xlYW4oZ3x8dnx8bXx8eSkpfHwoZS5ib3g9e3Zpc2libGU6ITF9KTt2YXIgeD1jKCJtZWFubGluZS5jb2xvciIsaCksYj1jKCJtZWFubGluZS53aWR0aCIscCk7bCgibWVhbmxpbmUudmlzaWJsZSIsQm9vbGVhbih4fHxiKSl8fChlLm1lYW5saW5lPXt2aXNpYmxlOiExfSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uLy4uL2xpYiI6NzAwLCIuLi9ib3gvZGVmYXVsdHMiOjg2NSwiLi9hdHRyaWJ1dGVzIjoxMTYyfV0sMTE2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGguc3FydCgyKk1hdGguUEkpKk1hdGguZXhwKC0uNSp0KnQpfTtyLm1ha2VLREU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIubGVuZ3RoLGE9aSxvPXQuYmFuZHdpZHRoLHM9MS8obipvKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT0wO2k8bjtpKyspZSs9YSgodC1yW2ldKS9vKTtyZXR1cm4gcyplfX0sci5nZXRQb3NpdGlvbk9uS2RlUGF0aD1mdW5jdGlvbih0LGUscil7dmFyIGksYTsiaCI9PT1lLm9yaWVudGF0aW9uPyhpPSJ5IixhPSJ4Iik6KGk9IngiLGE9InkiKTt2YXIgbz1uLmZpbmRQb2ludE9uUGF0aCh0LnBhdGgscixhLHtwYXRoTGVuZ3RoOnQucGF0aExlbmd0aH0pLHM9dC5wb3NDZW50ZXJQeCxsPW9baV07cmV0dXJuW2wsImJvdGgiPT09ZS5zaWRlPzIqcy1sOnNdfSxyLmdldEtkZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LnB0cy5tYXAoci5leHRyYWN0VmFsKTtyZXR1cm4gci5tYWtlS0RFKHQsZSxpKShuKS90LnBvc0RlbnNpdHlTY2FsZX0sci5leHRyYWN0VmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZ9fSx7Ii4uLy4uL2xpYiI6NzAwfV0sMTE2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9ib3gvaG92ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe3ZhciBjLHUsZj10LmNkLGg9ZlswXS50cmFjZSxwPWguaG92ZXJvbixkPS0xIT09cC5pbmRleE9mKCJ2aW9saW5zIiksZz0tMSE9PXAuaW5kZXhPZigia2RlIiksdj1bXTtpZihkfHxnKXt2YXIgbT1hLmhvdmVyT25Cb3hlcyh0LGUscixzKTtpZihkJiYodj12LmNvbmNhdChtKSksZyYmbS5sZW5ndGg+MCl7dmFyIHkseCxiLF8sdyxrPXQueGEsVD10LnlhOyJoIj09PWgub3JpZW50YXRpb24/KHc9ZSx5PSJ5IixiPVQseD0ieCIsXz1rKToodz1yLHk9IngiLGI9ayx4PSJ5IixfPVQpO3ZhciBBPWZbdC5pbmRleF07aWYodz49QS5zcGFuWzBdJiZ3PD1BLnNwYW5bMV0pe3ZhciBNPW4uZXh0ZW5kRmxhdCh7fSx0KSxTPV8uYzJwKHcsITApLEU9by5nZXRLZGVWYWx1ZShBLGgsdyksQz1vLmdldFBvc2l0aW9uT25LZGVQYXRoKEEsaCxTKSxMPWIuX29mZnNldCx6PWIuX2xlbmd0aDtNW3krIjAiXT1DWzBdLE1beSsiMSJdPUNbMV0sTVt4KyIwIl09TVt4KyIxIl09UyxNW3grIkxhYmVsIl09eCsiOiAiK2kuaG92ZXJMYWJlbFRleHQoXyx3KSsiLCAiK2ZbMF0udC5sYWJlbHMua2RlKyIgIitFLnRvRml4ZWQoMyksTS5zcGlrZURpc3RhbmNlPW1bMF0uc3Bpa2VEaXN0YW5jZTt2YXIgTz15KyJTcGlrZSI7TVtPXT1tWzBdW09dLG1bMF0uc3Bpa2VEaXN0YW5jZT12b2lkIDAsbVswXVtPXT12b2lkIDAsTS5ob3ZlcnRlbXBsYXRlPSExLHYucHVzaChNKSwodT17c3Ryb2tlOnQuY29sb3J9KVt5KyIxIl09bi5jb25zdHJhaW4oTCtDWzBdLEwsTCt6KSx1W3krIjIiXT1uLmNvbnN0cmFpbihMK0NbMV0sTCxMK3opLHVbeCsiMSJdPXVbeCsiMiJdPV8uX29mZnNldCtTfX19LTEhPT1wLmluZGV4T2YoInBvaW50cyIpJiYoYz1hLmhvdmVyT25Qb2ludHModCxlLHIpKTt2YXIgST1sLnNlbGVjdEFsbCgiLnZpb2xpbmxpbmUtIitoLnVpZCkuZGF0YSh1P1swXTpbXSk7cmV0dXJuIEkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJ2aW9saW5saW5lLSIraC51aWQsITApLmF0dHIoInN0cm9rZS13aWR0aCIsMS41KSxJLmV4aXQoKS5yZW1vdmUoKSxJLmF0dHIodSksImNsb3Nlc3QiPT09cz9jP1tjXTp2OmM/KHYucHVzaChjKSx2KTp2fX0seyIuLi8uLi9saWIiOjcwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vYm94L2hvdmVyIjo4NjcsIi4vaGVscGVycyI6MTE2Nn1dLDExNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vYm94L2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vYm94L3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJ2aW9saW4iLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzeW1ib2xzIiwib3JpZW50ZWQiLCJib3gtdmlvbGluIiwic2hvd0xlZ2VuZCIsInZpb2xpbkxheW91dCIsInpvb21TY2FsZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuLi9ib3gvZGVmYXVsdHMiOjg2NSwiLi4vYm94L3NlbGVjdCI6ODcyLCIuLi9zY2F0dGVyL3N0eWxlIjoxMDc0LCIuL2F0dHJpYnV0ZXMiOjExNjIsIi4vY2FsYyI6MTE2MywiLi9jcm9zc190cmFjZV9jYWxjIjoxMTY0LCIuL2RlZmF1bHRzIjoxMTY1LCIuL2hvdmVyIjoxMTY3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTY5LCIuL2xheW91dF9kZWZhdWx0cyI6MTE3MCwiLi9wbG90IjoxMTcxLCIuL3N0eWxlIjoxMTcyfV0sMTE2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt2aW9saW5tb2RlOmkoe30sbi5ib3htb2RlLHt9KSx2aW9saW5nYXA6aSh7fSxuLmJveGdhcCx7fSksdmlvbGluZ3JvdXBnYXA6aSh7fSxuLmJveGdyb3VwZ2FwLHt9KX19LHsiLi4vLi4vbGliIjo3MDAsIi4uL2JveC9sYXlvdXRfYXR0cmlidXRlcyI6ODY5fV0sMTE3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EuX3N1cHBseSh0LGUscixmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSwidmlvbGluIil9fSx7Ii4uLy4uL2xpYiI6NzAwLCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIjo4NzAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExNjl9XSwxMTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vYm94L3Bsb3QiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9wb2ludHMiKSxsPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXt2YXIgdT10Ll9mdWxsTGF5b3V0LGY9ZS54YXhpcyxoPWUueWF4aXM7ZnVuY3Rpb24gcCh0KXt2YXIgZT1zKHQse3hheGlzOmYseWF4aXM6aCxjb25uZWN0R2FwczohMCxiYXNlVG9sZXJhbmNlOi43NSxzaGFwZToic3BsaW5lIixzaW1wbGlmeTohMH0pO3JldHVybiBhLnNtb290aG9wZW4oZVswXSwxKX1pLm1ha2VUcmFjZUdyb3VwcyhjLHIsInRyYWNlIHZpb2xpbnMiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxzPWEudCxjPWEudHJhY2U7aWYoZS5pc1JhbmdlUGxvdHx8KGEubm9kZTM9ciksITAhPT1jLnZpc2libGV8fHMuZW1wdHkpci5yZW1vdmUoKTtlbHNle3ZhciBkPXMuYlBvcyxnPXMuYmRQb3Msdj1lW3MudmFsTGV0dGVyKyJheGlzIl0sbT1lW3MucG9zTGV0dGVyKyJheGlzIl0seT0iYm90aCI9PT1jLnNpZGUseD15fHwicG9zaXRpdmUiPT09Yy5zaWRlLGI9eXx8Im5lZ2F0aXZlIj09PWMuc2lkZSxfPXIuc2VsZWN0QWxsKCJwYXRoLnZpb2xpbiIpLmRhdGEoaS5pZGVudGl0eSk7Xy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiY2xhc3MiLCJ2aW9saW4iKSxfLmV4aXQoKS5yZW1vdmUoKSxfLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxsLGYsaCxfPW4uc2VsZWN0KHRoaXMpLHc9dC5kZW5zaXR5LGs9dy5sZW5ndGgsVD10LnBvcytkLEE9bS5jMnAoVCk7aWYoYy53aWR0aCllPXMubWF4S0RFL2c7ZWxzZXt2YXIgTT11Ll92aW9saW5TY2FsZUdyb3VwU3RhdHNbYy5zY2FsZWdyb3VwXTtlPSJjb3VudCI9PT1jLnNjYWxlbW9kZT9NLm1heEtERS9nKihNLm1heENvdW50L3QucHRzLmxlbmd0aCk6TS5tYXhLREUvZ31pZih4KXtmb3IoZj1uZXcgQXJyYXkoayksbz0wO288aztvKyspKGg9ZltvXT17fSlbcy5wb3NMZXR0ZXJdPVQrd1tvXS52L2UsaFtzLnZhbExldHRlcl09d1tvXS50O3I9cChmKX1pZihiKXtmb3IoZj1uZXcgQXJyYXkoayksbD0wLG89ay0xO2w8aztsKyssby0tKShoPWZbbF09e30pW3MucG9zTGV0dGVyXT1ULXdbb10udi9lLGhbcy52YWxMZXR0ZXJdPXdbb10udDtpPXAoZil9aWYoeSlhPXIrIkwiK2kuc3Vic3RyKDEpKyJaIjtlbHNle3ZhciBTPVtBLHYuYzJwKHdbMF0udCldLEU9W0Esdi5jMnAod1trLTFdLnQpXTsiaCI9PT1jLm9yaWVudGF0aW9uJiYoUy5yZXZlcnNlKCksRS5yZXZlcnNlKCkpLGE9eD8iTSIrUysiTCIrci5zdWJzdHIoMSkrIkwiK0U6Ik0iK0UrIkwiK2kuc3Vic3RyKDEpKyJMIitTfV8uYXR0cigiZCIsYSksdC5wb3NDZW50ZXJQeD1BLHQucG9zRGVuc2l0eVNjYWxlPWUqZyx0LnBhdGg9Xy5ub2RlKCksdC5wYXRoTGVuZ3RoPXQucGF0aC5nZXRUb3RhbExlbmd0aCgpLyh5PzI6MSl9KTt2YXIgdyxrLFQsQT1jLmJveCxNPUEud2lkdGgsUz0oQS5saW5lfHx7fSkud2lkdGg7eT8odz1nKk0saz0wKTp4Pyh3PVswLGcqTS8yXSxrPS1TKToodz1bZypNLzIsMF0saz1TKSxvLnBsb3RCb3hBbmRXaGlza2VycyhyLHtwb3M6bSx2YWw6dn0sYyx7YlBvczpkLGJkUG9zOncsYlBvc1B4T2Zmc2V0Omt9KSxvLnBsb3RCb3hNZWFuKHIse3BvczptLHZhbDp2fSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6a30pLCFjLmJveC52aXNpYmxlJiZjLm1lYW5saW5lLnZpc2libGUmJihUPWkuaWRlbnRpdHkpO3ZhciBFPXIuc2VsZWN0QWxsKCJwYXRoLm1lYW5saW5lIikuZGF0YShUfHxbXSk7RS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibWVhbmxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLEUuZXhpdCgpLnJlbW92ZSgpLEUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT12LmMycCh0Lm1lYW4sITApLHI9bC5nZXRQb3NpdGlvbk9uS2RlUGF0aCh0LGMsZSk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsImgiPT09Yy5vcmllbnRhdGlvbj8iTSIrZSsiLCIrclswXSsiViIrclsxXToiTSIrclswXSsiLCIrZSsiSCIrclsxXSl9KSxvLnBsb3RQb2ludHMocix7eDpmLHk6aH0sYyxzKX19KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1OTgsIi4uLy4uL2xpYiI6NzAwLCIuLi9ib3gvcGxvdCI6ODcxLCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIjoxMDY1LCIuL2hlbHBlcnMiOjExNjYsZDM6MTU0fV0sMTE3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlUG9pbnRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UudmlvbGlucyIpO3Iuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS50cmFjZSxvPW4uc2VsZWN0KHRoaXMpLHM9ci5ib3h8fHt9LGw9cy5saW5lfHx7fSxjPXIubWVhbmxpbmV8fHt9LHU9Yy53aWR0aDtvLnNlbGVjdEFsbCgicGF0aC52aW9saW4iKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLmxpbmUud2lkdGgrInB4IikuY2FsbChpLnN0cm9rZSxyLmxpbmUuY29sb3IpLmNhbGwoaS5maWxsLHIuZmlsbGNvbG9yKSxvLnNlbGVjdEFsbCgicGF0aC5ib3giKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixsLndpZHRoKyJweCIpLmNhbGwoaS5zdHJva2UsbC5jb2xvcikuY2FsbChpLmZpbGwscy5maWxsY29sb3IpO3ZhciBmPXsic3Ryb2tlLXdpZHRoIjp1KyJweCIsInN0cm9rZS1kYXNoYXJyYXkiOjIqdSsicHgsIit1KyJweCJ9O28uc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5zdHlsZShmKS5jYWxsKGkuc3Ryb2tlLGMuY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLm1lYW5saW5lIikuc3R5bGUoZikuY2FsbChpLnN0cm9rZSxjLmNvbG9yKSxhKG8scix0KX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NzcsIi4uL3NjYXR0ZXIvc3R5bGUiOjEwNzQsZDM6MTU0fV0sMTE3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2Z1bmN0aW9uIG8odCl7cmV0dXJue21hcmtlcjp7Y29sb3I6YSh7fSxuLm1hcmtlci5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6YSh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOiJzdHlsZSJ9KSx3aWR0aDphKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fWUuZXhwb3J0cz17bWVhc3VyZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LGJhc2U6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSx4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSx0ZXh0Om4udGV4dCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6bi50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpuLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpuLm91dHNpZGV0ZXh0Zm9udCxjb25zdHJhaW50ZXh0Om4uY29uc3RyYWludGV4dCxjbGlwb25heGlzOm4uY2xpcG9uYXhpcyxvcmllbnRhdGlvbjpuLm9yaWVudGF0aW9uLG9mZnNldDpuLm9mZnNldCx3aWR0aDpuLndpZHRoLGluY3JlYXNpbmc6bygpLGRlY3JlYXNpbmc6bygpLHRvdGFsczpvKCksY29ubmVjdG9yOntsaW5lOntjb2xvcjppLmNvbG9yLHdpZHRoOmkud2lkdGgsZGFzaDppLmRhc2gsZWRpdFR5cGU6InBsb3QifSxtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzcGFubmluZyIsImJldHdlZW4iXSxkZmx0OiJiZXR3ZWVuIixlZGl0VHlwZToicGxvdCJ9LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5vZmZzZXRncm91cH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NjkwLCIuLi9iYXIvYXR0cmlidXRlcyI6ODM5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNTF9XSwxMTc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKS5tZXJnZUFycmF5LGE9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBzKHQpe3JldHVybiJhIj09PXR8fCJhYnNvbHV0ZSI9PT10fWZ1bmN0aW9uIGwodCl7cmV0dXJuInQiPT09dHx8InRvdGFsIj09PXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1PW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxmPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKTsiaCI9PT1lLm9yaWVudGF0aW9uPyhyPXUubWFrZUNhbGNkYXRhKGUsIngiKSxjPWYubWFrZUNhbGNkYXRhKGUsInkiKSk6KHI9Zi5tYWtlQ2FsY2RhdGEoZSwieSIpLGM9dS5tYWtlQ2FsY2RhdGEoZSwieCIpKTtmb3IodmFyIGgscD1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCksZD1uZXcgQXJyYXkocCksZz0wLHY9ITEsbT0wO208cDttKyspe3ZhciB5PXJbbV18fDAseD0hMTsoclttXSE9PW98fGwoZS5tZWFzdXJlW21dKXx8cyhlLm1lYXN1cmVbbV0pKSYmbSsxPHAmJihyW20rMV0hPT1vfHxsKGUubWVhc3VyZVttKzFdKXx8cyhlLm1lYXN1cmVbbSsxXSkpJiYoeD0hMCk7dmFyIGI9ZFttXT17aTptLHA6Y1ttXSxzOnkscmF3Uzp5LGNOZXh0Onh9O3MoZS5tZWFzdXJlW21dKT8oZz1iLnMsYi5pc1N1bT0hMCxiLmRpcj0idG90YWxzIixiLnM9Zyk6bChlLm1lYXN1cmVbbV0pPyhiLmlzU3VtPSEwLGIuZGlyPSJ0b3RhbHMiLGIucz1nKTooYi5pc1N1bT0hMSxiLmRpcj1iLnJhd1M8MD8iZGVjcmVhc2luZyI6ImluY3JlYXNpbmciLGg9Yi5zLGIucz1nK2gsZys9aCksInRvdGFscyI9PT1iLmRpciYmKHY9ITApLGUuaWRzJiYoYi5pZD1TdHJpbmcoZS5pZHNbbV0pKX1yZXR1cm4gZFswXS5oYXNUb3RhbHM9dixpKGUudGV4dCxkLCJ0eCIpLGkoZS5ob3ZlcnRleHQsZCwiaHR4IiksYShkLGUpLGR9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vLi4vbGliIjo3MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjEwNTN9XSwxMTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1lLnhheGlzLGM9ZS55YXhpcyx1PVtdLGY9W10saD1bXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcD1vW2ldOyEwPT09cC52aXNpYmxlJiZwLnhheGlzPT09bC5faWQmJnAueWF4aXM9PT1jLl9pZCYmIndhdGVyZmFsbCI9PT1wLnR5cGUmJihyPXNbaV0sImgiPT09cC5vcmllbnRhdGlvbj9oLnB1c2gocik6Zi5wdXNoKHIpLHUucHVzaChyKSl9dmFyIGQ9e19mdWxsTGF5b3V0OntfYXhpc01hdGNoR3JvdXBzOmEuX2F4aXNNYXRjaEdyb3VwcyxfYWxpZ25tZW50T3B0czphLl9hbGlnbm1lbnRPcHRzLGJhcm1vZGU6YS53YXRlcmZhbGxtb2RlLGJhcmdhcDphLndhdGVyZmFsbGdhcCxiYXJncm91cGdhcDphLndhdGVyZmFsbGdyb3VwZ2FwfX07Zm9yKG4oZCxsLGMsZiksbihkLGMsbCxoKSxpPTA7aTx1Lmxlbmd0aDtpKyspe3I9dVtpXTtmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXTshMT09PXYuaXNTdW0mJih2LnMwKz0wPT09Zz8wOnJbZy0xXS5zKX19fX0seyIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6ODQyfV0sMTE3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsYT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0LG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYz0iIzNEOTk3MCIsdT0iI0ZGNDEzNiIsZj0iIzQ0OTlGRiI7ZnVuY3Rpb24gaCh0LGUscil7dChlKyIubWFya2VyLmNvbG9yIixyKSx0KGUrIi5tYXJrZXIubGluZS5jb2xvciIsbC5kZWZhdWx0TGluZSksdChlKyIubWFya2VyLmxpbmUud2lkdGgiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1vKHQsZSxpLGwpPyhsKCJtZWFzdXJlIiksbCgib3JpZW50YXRpb24iLGUueCYmIWUueT8iaCI6InYiKSxsKCJiYXNlIiksbCgib2Zmc2V0IiksbCgid2lkdGgiKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgiaG92ZXJ0ZW1wbGF0ZSIpLGEodCxlLGksbCwhMSksaChsLCJpbmNyZWFzaW5nIixjKSxoKGwsImRlY3JlYXNpbmciLHUpLGgobCwidG90YWxzIixmKSxsKCJjb25uZWN0b3IudmlzaWJsZSIpJiYobCgiY29ubmVjdG9yLm1vZGUiKSxsKCJjb25uZWN0b3IubGluZS53aWR0aCIpJiYobCgiY29ubmVjdG9yLmxpbmUuY29sb3IiKSxsKCJjb25uZWN0b3IubGluZS5kYXNoIikpKSk6ZS52aXNpYmxlPSExfSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcixhO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG4uY29lcmNlKGEuX2lucHV0LGEscyx0KX1pZigiZ3JvdXAiPT09ZS53YXRlcmZhbGxtb2RlKWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKXI9KGE9dFtsXSkuX2lucHV0LGkocixhLGUsbyl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6aX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9saWIiOjcwMCwiLi4vYmFyL2RlZmF1bHRzIjo4NDMsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjEwNzcsIi4vYXR0cmlidXRlcyI6MTE3M31dLDExNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dCxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5vcGFjaXR5LGE9dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJPbkJhcnMsbz0iXHUyNWIyIixzPSJcdTI1YmMiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz1hKHQsZSxyLGwpO2lmKGMpe3ZhciB1PWMuY2QsZj11WzBdLnRyYWNlLGg9ImgiPT09Zi5vcmllbnRhdGlvbixwPWg/dC54YTp0LnlhLGQ9dVtjLmluZGV4XSxnPWg/IngiOiJ5Iix2PWQuaXNTdW0/ZC5iK2QuczpkLnJhd1M7aWYoZC5pc1N1bSljW2crIkxhYmVsVmFsIl09bSh2KTtlbHNle2lmKHY+MCljLmV4dHJhVGV4dD1tKHYpKyIgIitvO2Vsc2V7aWYoISh2PDApKXJldHVybjtjLmV4dHJhVGV4dD0iKCIrbSgtdikrIikgIitzfWMuZXh0cmFUZXh0Kz0iPGJyPkluaXRpYWw6ICIrbShkLmIrZC5zLXYpfXJldHVybiBjLmNvbG9yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFtlLmRpcl0ubWFya2VyLG49ci5jb2xvcixhPXIubGluZS5jb2xvcixvPXIubGluZS53aWR0aDtpZihpKG4pKXJldHVybiBuO2lmKGkoYSkmJm8pcmV0dXJuIGF9KGYsZCksW2NdfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG4ocCx0KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU3NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vYmFyL2hvdmVyIjo4NDV9XSwxMTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmNyb3NzVHJhY2VDYWxjPXQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKS5zdHlsZSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuLi9iYXIvc2VsZWN0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJ3YXRlcmZhbGwiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwib3JpZW50ZWQiLCJzaG93TGVnZW5kIiwiem9vbVNjYWxlIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzU5LCIuLi9iYXIvc2VsZWN0Ijo4NTAsIi4vYXR0cmlidXRlcyI6MTE3MywiLi9jYWxjIjoxMTc0LCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjExNzUsIi4vZGVmYXVsdHMiOjExNzYsIi4vaG92ZXIiOjExNzcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExNzksIi4vbGF5b3V0X2RlZmF1bHRzIjoxMTgwLCIuL3Bsb3QiOjExODEsIi4vc3R5bGUiOjExODJ9XSwxMTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17d2F0ZXJmYWxsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTE4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPSExO2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1mb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZihsLnZpc2libGUmJiJ3YXRlcmZhbGwiPT09bC50eXBlKXthPSEwO2JyZWFrfX1hJiYobygid2F0ZXJmYWxsbW9kZSIpLG8oIndhdGVyZmFsbGdhcCIsLjIpLG8oIndhdGVyZmFsbGdyb3VwZ2FwIikpfX0seyIuLi8uLi9saWIiOjcwMCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTE3OX1dLDExODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi9iYXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtvKHQsZSxyLHMpLGZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPWUueGF4aXMsbD1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKG8sciwidHJhY2UgYmFycyIpLmVhY2goZnVuY3Rpb24ocil7dmFyIG89bi5zZWxlY3QodGhpcyksYz1yWzBdLHU9Yy50cmFjZSxmPWkuZW5zdXJlU2luZ2xlKG8sImciLCJsaW5lcyIpO2lmKHUuY29ubmVjdG9yJiZ1LmNvbm5lY3Rvci52aXNpYmxlKXt2YXIgaD0iaCI9PT11Lm9yaWVudGF0aW9uLHA9dS5jb25uZWN0b3IubW9kZTtlLmlzUmFuZ2VQbG90fHwoYy5ub2RlMz1vKTt2YXIgZD1mLnNlbGVjdEFsbCgiZy5saW5lIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGluZSIsITApLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciBnPWQuc2l6ZSgpO2QuZWFjaChmdW5jdGlvbihyLG8pe2lmKG89PT1nLTF8fHIuY05leHQpe3ZhciBjLGYsZCx2LG0seSx4LGIsXz1uLnNlbGVjdCh0aGlzKSx3PSIiLGs9MDtvKzE8ZyYmQXJyYXkuaXNBcnJheSh1Lm9mZnNldCkmJihrLT11Lm9mZnNldFtvKzFdLXUub2Zmc2V0W29dKSxoPyhjPXMuYzJwKHIuczEsITApLGY9bC5jMnAoci5wMSwhMCksZD1zLmMycChyLnMwLCEwKSx2PWwuYzJwKHIucDAsITApLG09cy5jMnAoci5zMSwhMCkseT1sLmMycChyLnAxLCEwKSxvKzE8ZyYmKHg9cy5jMnAoci5zMCsxLWssITApLGI9bC5jMnAoci5wMCsxLWssITApKSk6KGM9cy5jMnAoci5wMSwhMCksZj1sLmMycChyLnMxLCEwKSxkPXMuYzJwKHIucDAsITApLHY9bC5jMnAoci5zMCwhMCksbT1zLmMycChyLnAxLCEwKSx5PWwuYzJwKHIuczEsITApLG8rMTxnJiYoeD1zLmMycChyLnAwKzEtaywhMCksYj1sLmMycChyLnMwKzEtaywhMCkpKSwic3Bhbm5pbmciPT09cCYmIXIuaXNTdW0mJm8+MCYmKHcrPWg/Ik0iK2QrIiwiK2YrIlYiK3Y6Ik0iK2MrIiwiK3YrIkgiK2QpLCJiZXR3ZWVuIiE9PXAmJihyLmlzU3VtfHxvPGctMSkmJih3Kz1oPyJNIittKyIsIit2KyJWIit5OiJNIitkKyIsIit5KyJIIittKSx2b2lkIDAhPT14JiZ2b2lkIDAhPT1iJiYodys9aD8iTSIrbSsiLCIreSsiViIrYjoiTSIrbSsiLCIreSsiSCIreCksaS5lbnN1cmVTaW5nbGUoXywicGF0aCIpLmF0dHIoImQiLHcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSl9ZWxzZSBmLnJlbW92ZSgpfSl9KHQsZSxyLHMpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vLi4vbGliIjo3MDAsIi4uL2Jhci9wbG90Ijo4NDksZDM6MTU0fV0sMTE4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9iYXIvc3R5bGUiKS5zdHlsZVRleHRQb2ludHM7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcud2F0ZXJmYWxsbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtyLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLHM9ZVswXS50cmFjZTtyLnNlbGVjdEFsbCgiLnBvaW50ID4gcGF0aCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9c1t0LmRpcl0ubWFya2VyO24uc2VsZWN0KHRoaXMpLmNhbGwoYS5maWxsLGUuY29sb3IpLmNhbGwoYS5zdHJva2UsZS5saW5lLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsZS5saW5lLmRhc2gsZS5saW5lLndpZHRoKS5zdHlsZSgib3BhY2l0eSIscy5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/LjM6MSl9KSxvKHIscyx0KSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9cy5jb25uZWN0b3IubGluZTtpLmxpbmVHcm91cFN0eWxlKHQuc2VsZWN0QWxsKCJwYXRoIiksZS53aWR0aCxlLmNvbG9yLGUuZGFzaCl9KX0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTc3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU5OCwiLi4vYmFyL3N0eWxlIjo4NTIsZDM6MTU0fV0sMTE4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iYWdncmVnYXRlIjt2YXIgbD1yLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxncm91cHM6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LGFnZ3JlZ2F0aW9uczp7X2lzTGlua2VkVG9BcnJheToiYWdncmVnYXRpb24iLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWVkaWFuIiwibW9kZSIsInJtcyIsInN0ZGRldiIsIm1pbiIsIm1heCIsImZpcnN0IiwibGFzdCIsImNoYW5nZSIsInJhbmdlIl0sZGZsdDoiZmlyc3QiLGVkaXRUeXBlOiJjYWxjIn0sZnVuY21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNhbXBsZSIsInBvcHVsYXRpb24iXSxkZmx0OiJzYW1wbGUiLGVkaXRUeXBlOiJjYWxjIn0sZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxjPWwuYWdncmVnYXRpb25zO2Z1bmN0aW9uIHUodCxlLHIsYSl7aWYoYS5lbmFibGVkKXtmb3IodmFyIG89YS50YXJnZXQsbD1pLm5lc3RlZFByb3BlcnR5KGUsbyksYz1sLmdldCgpLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZ1bmMsbj1lLmQyYyxpPWUuYzJkO3N3aXRjaChyKXtjYXNlImNvdW50IjpyZXR1cm4gZjtjYXNlImZpcnN0IjpyZXR1cm4gaDtjYXNlImxhc3QiOnJldHVybiBwO2Nhc2Uic3VtIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPW4odFtlW2FdXSk7byE9PXMmJihyKz1vKX1yZXR1cm4gaShyKX07Y2FzZSJhdmciOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sLGErKyl9cmV0dXJuIGE/aShyL2EpOnN9O2Nhc2UibWluIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89bih0W2VbYV1dKTtvIT09cyYmKHI9TWF0aC5taW4ocixvKSl9cmV0dXJuIHI9PT0xLzA/czppKHIpfTtjYXNlIm1heCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLzAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1zJiYocj1NYXRoLm1heChyLG8pKX1yZXR1cm4gcj09PS0xLzA/czppKHIpfTtjYXNlInJhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGE9LTEvMCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyPU1hdGgubWluKHIsbCksYT1NYXRoLm1heChhLGwpKX1yZXR1cm4gYT09PS0xLzB8fHI9PT0xLzA/czppKGEtcil9O2Nhc2UiY2hhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRbZVswXV0pLGE9bih0W2VbZS5sZW5ndGgtMV1dKTtyZXR1cm4gcj09PXN8fGE9PT1zP3M6aShhLXIpfTtjYXNlIm1lZGlhbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89bih0W2VbYV1dKTtvIT09cyYmci5wdXNoKG8pfWlmKCFyLmxlbmd0aClyZXR1cm4gcztyLnNvcnQoKTt2YXIgbD0oci5sZW5ndGgtMSkvMjtyZXR1cm4gaSgocltNYXRoLmZsb29yKGwpXStyW01hdGguY2VpbChsKV0pLzIpfTtjYXNlIm1vZGUiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxhPTAsbz1zLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9bih0W2VbbF1dKTtpZihjIT09cyl7dmFyIHU9cltjXT0ocltjXXx8MCkrMTt1PmEmJihhPXUsbz1jKX19cmV0dXJuIGE/aShvKTpzfTtjYXNlInJtcyI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsYT0wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHIrPWwqbCxhKyspfXJldHVybiBhP2koTWF0aC5zcXJ0KHIvYSkpOnN9O2Nhc2Uic3RkZGV2IjpyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgaSxhPTAsbz0wLGw9MSxjPXM7Zm9yKGk9MDtpPHIubGVuZ3RoJiZjPT09cztpKyspYz1uKGVbcltpXV0pO2lmKGM9PT1zKXJldHVybiBzO2Zvcig7aTxyLmxlbmd0aDtpKyspe3ZhciB1PW4oZVtyW2ldXSk7aWYodSE9PXMpe3ZhciBmPXUtYzthKz1mLG8rPWYqZixsKyt9fXZhciBoPSJzYW1wbGUiPT09dC5mdW5jbW9kZT9sLTE6bDtyZXR1cm4gaD9NYXRoLnNxcnQoKG8tYSphL2wpL2gpOjB9fX0oYSxuLmdldERhdGFDb252ZXJzaW9ucyh0LGUsbyxjKSksZD1uZXcgQXJyYXkoci5sZW5ndGgpLGc9MDtnPHIubGVuZ3RoO2crKylkW2ddPXUoYyxyW2ddKTtsLnNldChkKSwiY291bnQiPT09YS5mdW5jJiZpLnB1c2hVbmlxdWUoZS5fYXJyYXlBdHRycyxvKX19ZnVuY3Rpb24gZih0LGUpe3JldHVybiBlLmxlbmd0aH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHRbZVswXV19ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB0W2VbZS5sZW5ndGgtMV1dfXIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXt9O2Z1bmN0aW9uIG8oZSxyKXtyZXR1cm4gaS5jb2VyY2UodCxuLGwsZSxyKX1pZighbygiZW5hYmxlZCIpKXJldHVybiBuO3ZhciBzPWEuZmluZEFycmF5QXR0cmlidXRlcyhlKSx1PXt9O2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXT0xO3ZhciBmPW8oImdyb3VwcyIpO2lmKCFBcnJheS5pc0FycmF5KGYpKXtpZighdVtmXSlyZXR1cm4gbi5lbmFibGVkPSExLG47dVtmXT0wfXZhciBoLHA9dC5hZ2dyZWdhdGlvbnN8fFtdLGQ9bi5hZ2dyZWdhdGlvbnM9bmV3IEFycmF5KHAubGVuZ3RoKTtmdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGkuY29lcmNlKHBbcl0saCxjLHQsZSl9Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKyl7aD17X2luZGV4OnJ9O3ZhciB2PWcoInRhcmdldCIpLG09ZygiZnVuYyIpO2coImVuYWJsZWQiKSYmdiYmKHVbdl18fCJjb3VudCI9PT1tJiZ2b2lkIDA9PT11W3ZdKT8oInN0ZGRldiI9PT1tJiZnKCJmdW5jbW9kZSIpLHVbdl09MCxkW3JdPWgpOmRbcl09e2VuYWJsZWQ6ITEsX2luZGV4OnJ9fWZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXSYmZC5wdXNoKHt0YXJnZXQ6c1tyXSxmdW5jOmMuZnVuYy5kZmx0LGVuYWJsZWQ6ITAsX2luZGV4Oi0xfSk7cmV0dXJuIG59LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgbj1yLmdyb3VwcyxhPWkuZ2V0VGFyZ2V0QXJyYXkoZSx7dGFyZ2V0Om59KTtpZihhKXt2YXIgcyxsLGMsZixoPXt9LHA9e30sZD1bXSxnPW8oZS50cmFuc2Zvcm1zLHIpLHY9YS5sZW5ndGg7Zm9yKGUuX2xlbmd0aCYmKHY9TWF0aC5taW4odixlLl9sZW5ndGgpKSxzPTA7czx2O3MrKyl2b2lkIDA9PT0oYz1oW2w9YVtzXV0pPyhoW2xdPWQubGVuZ3RoLGY9W3NdLGQucHVzaChmKSxwW2hbbF1dPWcocykpOihkW2NdLnB1c2gocykscFtoW2xdXT0ocFtoW2xdXXx8W10pLmNvbmNhdChnKHMpKSk7ci5faW5kZXhUb1BvaW50cz1wO3ZhciBtPXIuYWdncmVnYXRpb25zO2ZvcihzPTA7czxtLmxlbmd0aDtzKyspdSh0LGUsZCxtW3NdKTsic3RyaW5nIj09dHlwZW9mIG4mJnUodCxlLGQse3RhcmdldDpuLGZ1bmM6ImZpcnN0IixlbmFibGVkOiEwfSksZS5fbGVuZ3RoPWQubGVuZ3RofX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY3NywiLi4vbGliIjo3MDAsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3MzcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4vaGVscGVycyI6MTE4Nn1dLDExODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9yZWdpc3RyeSIpLGE9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24scz10KCIuLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGw9cy5DT01QQVJJU09OX09QUyxjPXMuSU5URVJWQUxfT1BTLHU9cy5TRVRfT1BTO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImZpbHRlciIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMifSxvcGVyYXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXS5jb25jYXQobCkuY29uY2F0KGMpLmNvbmNhdCh1KSxkZmx0OiI9IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHByZXNlcnZlZ2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBhKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1pZihhKCJlbmFibGVkIikpe2EoInByZXNlcnZlZ2FwcyIpLGEoIm9wZXJhdGlvbiIpLGEoInZhbHVlIiksYSgidGFyZ2V0Iik7dmFyIG89aS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIik7byh0LGUsInZhbHVlY2FsZW5kYXIiLG51bGwpLG8odCxlLCJ0YXJnZXRjYWxlbmRhciIsbnVsbCl9cmV0dXJuIGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgaT1uLmdldFRhcmdldEFycmF5KGUscik7aWYoaSl7dmFyIHM9ci50YXJnZXQsZj1pLmxlbmd0aDtlLl9sZW5ndGgmJihmPU1hdGgubWluKGYsZS5fbGVuZ3RoKSk7dmFyIGg9ci50YXJnZXRjYWxlbmRhcixwPWUuX2FycmF5QXR0cnMsZD1yLnByZXNlcnZlZ2FwcztpZigic3RyaW5nIj09dHlwZW9mIHMpe3ZhciBnPW4ubmVzdGVkUHJvcGVydHkoZSxzKyJjYWxlbmRhciIpLmdldCgpO2cmJihoPWcpfXZhciB2LG0seT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vcGVyYXRpb24saT10LnZhbHVlLGE9QXJyYXkuaXNBcnJheShpKTtmdW5jdGlvbiBvKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4pfXZhciBzLGY9ZnVuY3Rpb24ocil7cmV0dXJuIGUociwwLHQudmFsdWVjYWxlbmRhcil9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCwwLHIpfTtvKGwpP3M9ZihhP2lbMF06aSk6byhjKT9zPWE/W2YoaVswXSksZihpWzFdKV06W2YoaSksZihpKV06byh1KSYmKHM9YT9pLm1hcChmKTpbZihpKV0pO3N3aXRjaChuKXtjYXNlIj0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT09PXN9O2Nhc2UiIT0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KSE9PXN9O2Nhc2UiPCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPHN9O2Nhc2UiPD0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KTw9c307Y2FzZSI+IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCk+c307Y2FzZSI+PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPj1zfTtjYXNlIltdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTw9c1sxXX07Y2FzZSIoKSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU+c1swXSYmZTxzWzFdfTtjYXNlIlspIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTxzWzFdfTtjYXNlIihdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT5zWzBdJiZlPD1zWzFdfTtjYXNlIl1bIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT49c1sxXX07Y2FzZSIpKCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU8c1swXXx8ZT5zWzFdfTtjYXNlIl0oIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT5zWzFdfTtjYXNlIilbIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTxzWzBdfHxlPj1zWzFdfTtjYXNlInt9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1zLmluZGV4T2YoaCh0KSl9O2Nhc2UifXsiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMT09PXMuaW5kZXhPZihoKHQpKX19fShyLGEuZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxzLGkpLGgpLHg9e30sYj17fSxfPTA7ZD8odj1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KG5ldyBBcnJheShmKSl9LG09ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKVtlXT1yfSk6KHY9ZnVuY3Rpb24odCl7eFt0LmFzdHJdPW4uZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChbXSl9LG09ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKS5wdXNoKHIpfSksVCh2KTtmb3IodmFyIHc9byhlLnRyYW5zZm9ybXMsciksaz0wO2s8ZjtrKyspe3koaVtrXSk/KFQobSxrKSxiW18rK109dyhrKSk6ZCYmXysrfXIuX2luZGV4VG9Qb2ludHM9YixlLl9sZW5ndGg9X319ZnVuY3Rpb24gVCh0LHIpe2Zvcih2YXIgaT0wO2k8cC5sZW5ndGg7aSsrKXt0KG4ubmVzdGVkUHJvcGVydHkoZSxwW2ldKSxyKX19fX0seyIuLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NjczLCIuLi9saWIiOjcwMCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc0OCwiLi4vcmVnaXN0cnkiOjgyOSwiLi9oZWxwZXJzIjoxMTg2fV0sMTE4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksYT10KCIuLi9wbG90cy9wbG90cyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxmLGgscCxkLGcsdj1lLnRyYW5zZm9ybSxtPWUudHJhbnNmb3JtSW5kZXgseT10LnRyYW5zZm9ybXNbbV0uZ3JvdXBzLHg9byh0LnRyYW5zZm9ybXMsdik7aWYoIUFycmF5LmlzQXJyYXkoeSl8fDA9PT15Lmxlbmd0aClyZXR1cm5bdF07dmFyIGI9bi5maWx0ZXJVbmlxdWUoeSksXz1uZXcgQXJyYXkoYi5sZW5ndGgpLHc9eS5sZW5ndGgsaz1pLmZpbmRBcnJheUF0dHJpYnV0ZXModCksVD12LnN0eWxlc3x8W10sQT17fTtmb3Iocj0wO3I8VC5sZW5ndGg7cisrKUFbVFtyXS50YXJnZXRdPVRbcl0udmFsdWU7di5zdHlsZXMmJihnPW4ua2V5ZWRDb250YWluZXIodiwic3R5bGVzIiwidGFyZ2V0IiwidmFsdWUubmFtZSIpKTt2YXIgTT17fSxTPXt9O2ZvcihyPTA7cjxiLmxlbmd0aDtyKyspe01bZj1iW3JdXT1yLFNbZl09MCwoaD1fW3JdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHQpKS5fZ3JvdXA9ZixoLnRyYW5zZm9ybXNbbV0uX2luZGV4VG9Qb2ludHM9e307dmFyIEU9bnVsbDtmb3IoZyYmKEU9Zy5nZXQoZikpLGgubmFtZT1FfHwiIj09PUU/RTpuLnRlbXBsYXRlU3RyaW5nKHYubmFtZWZvcm1hdCx7dHJhY2U6dC5uYW1lLGdyb3VwOmZ9KSxwPWgudHJhbnNmb3JtcyxoLnRyYW5zZm9ybXM9W10scz0wO3M8cC5sZW5ndGg7cysrKWgudHJhbnNmb3Jtc1tzXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSxwW3NdKTtmb3Iocz0wO3M8ay5sZW5ndGg7cysrKW4ubmVzdGVkUHJvcGVydHkoaCxrW3NdKS5zZXQoW10pfWZvcihsPTA7bDxrLmxlbmd0aDtsKyspe2ZvcihjPWtbbF0scz0wLGQ9W107czxiLmxlbmd0aDtzKyspZFtzXT1uLm5lc3RlZFByb3BlcnR5KF9bc10sYykuZ2V0KCk7Zm9yKHU9bi5uZXN0ZWRQcm9wZXJ0eSh0LGMpLmdldCgpLHM9MDtzPHc7cysrKWRbTVt5W3NdXV0ucHVzaCh1W3NdKX1mb3Iocz0wO3M8dztzKyspeyhoPV9bTVt5W3NdXV0pLnRyYW5zZm9ybXNbbV0uX2luZGV4VG9Qb2ludHNbU1t5W3NdXV09eChzKSxTW3lbc11dKyt9Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKylmPWJbcl0saD1fW3JdLGEuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycyhoKSxoPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKGgsQVtmXXx8e30pO3JldHVybiBffXIubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9Imdyb3VwYnkiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGdyb3Vwczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LG5hbWVmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxzdHlsZXM6e19pc0xpbmtlZFRvQXJyYXk6InN0eWxlIix0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZTp7dmFsVHlwZToiYW55IixkZmx0Ont9LGVkaXRUeXBlOiJjYWxjIixfY29tcGFyZUFzSlNPTjohMH0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlLGkpe3ZhciBhLG89e307ZnVuY3Rpb24gcyhlLGkpe3JldHVybiBuLmNvZXJjZSh0LG8sci5hdHRyaWJ1dGVzLGUsaSl9aWYoIXMoImVuYWJsZWQiKSlyZXR1cm4gbztzKCJncm91cHMiKSxzKCJuYW1lZm9ybWF0IixpLl9kYXRhTGVuZ3RoPjE/IiV7Z3JvdXB9ICgle3RyYWNlfSkiOiIle2dyb3VwfSIpO3ZhciBsPXQuc3R5bGVzLGM9by5zdHlsZXM9W107aWYobClmb3IoYT0wO2E8bC5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdPXt9O24uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLCJ0YXJnZXQiKTt2YXIgZj1uLmNvZXJjZShsW2FdLGNbYV0sci5hdHRyaWJ1dGVzLnN0eWxlcywidmFsdWUiKTtuLmlzUGxhaW5PYmplY3QoZik/dS52YWx1ZT1uLmV4dGVuZERlZXAoe30sZik6ZiYmZGVsZXRlIHUudmFsdWV9cmV0dXJuIG99LHIudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9W107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylmb3Iocj1zKHRbbl0sZSksaT0wO2k8ci5sZW5ndGg7aSsrKWEucHVzaChyW2ldKTtyZXR1cm4gYX19LHsiLi4vbGliIjo3MDAsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3MzcsIi4uL3Bsb3RzL3Bsb3RzIjo4MTAsIi4vaGVscGVycyI6MTE4Nn1dLDExODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT0wO2k8dC5sZW5ndGgmJihyPXRbaV0pIT09ZTtpKyspci5faW5kZXhUb1BvaW50cyYmITEhPT1yLmVuYWJsZWQmJihuPXIuX2luZGV4VG9Qb2ludHMpO3JldHVybiBuP2Z1bmN0aW9uKHQpe3JldHVybiBuW3RdfTpmdW5jdGlvbih0KXtyZXR1cm5bdF19fX0se31dLDExODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJzb3J0IixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIl0sZGZsdDoiYXNjZW5kaW5nIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1yZXR1cm4gaSgiZW5hYmxlZCIpJiYoaSgidGFyZ2V0IiksaSgib3JkZXIiKSksZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBvPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihvKXt2YXIgcz1yLnRhcmdldCxsPW8ubGVuZ3RoO2UuX2xlbmd0aCYmKGw9TWF0aC5taW4obCxlLl9sZW5ndGgpKTt2YXIgYyx1LGY9ZS5fYXJyYXlBdHRycyxoPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pO2ZvcihpPTA7aTxuO2krKylhW2ldPXt2OmVbaV0saTppfTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQub3JkZXIpe2Nhc2UiYXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnYpLWUoci52KX07Y2FzZSJkZXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZShyLnYpLWUodC52KX19fSh0LHIpKSxpPTA7aTxuO2krKylvW2ldPWFbaV0uaTtyZXR1cm4gb30ocixvLGkuZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxzLG8pLGwpLHA9YShlLnRyYW5zZm9ybXMsciksZD17fTtmb3IoYz0wO2M8Zi5sZW5ndGg7YysrKXt2YXIgZz1uLm5lc3RlZFByb3BlcnR5KGUsZltjXSksdj1nLmdldCgpLG09bmV3IEFycmF5KGwpO2Zvcih1PTA7dTxsO3UrKyltW3VdPXZbaFt1XV07Zy5zZXQobSl9Zm9yKHU9MDt1PGw7dSsrKWRbdV09cChoW3VdKTtyLl9pbmRleFRvUG9pbnRzPWQsZS5fbGVuZ3RoPWx9fX19LHsiLi4vbGliIjo3MDAsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NDgsIi4vaGVscGVycyI6MTE4Nn1dfSx7fSxbMjJdKSgyMil9KTs=\"></script>\n",
       "\t</head>\n",
       "\t<body>\n",
       "\t\t<div id=\"htmlwidget-129abba5869635212b5a\" style=\"width:100%;height:400px;\" class=\"plotly html-widget\"></div>\n",
       "<script type=\"application/json\" data-for=\"htmlwidget-129abba5869635212b5a\">{\"x\":{\"visdat\":{\"47d04e2a5ee9\":[\"function () \",\"plotlyVisDat\"]},\"cur_data\":\"47d04e2a5ee9\",\"attrs\":{\"47d04e2a5ee9\":{\"alpha_stroke\":1,\"sizes\":[10,100],\"spans\":[1,20],\"x\":[-25.0171833347851,-24.9192687229073,-24.8213541110294,-24.7234394991516,-24.6255248872738,-24.5276102753959,-24.4296956635181,-24.3317810516403,-24.2338664397625,-24.1359518278846,-24.0380372160068,-23.940122604129,-23.8422079922511,-23.7442933803733,-23.6463787684955,-23.5484641566177,-23.4505495447398,-23.352634932862,-23.2547203209842,-23.1568057091063,-23.0588910972285,-22.9609764853507,-22.8630618734729,-22.765147261595,-22.6672326497172,-22.5693180378394,-22.4714034259616,-22.3734888140837,-22.2755742022059,-22.1776595903281,-22.0797449784502,-21.9818303665724,-21.8839157546946,-21.7860011428168,-21.6880865309389,-21.5901719190611,-21.4922573071833,-21.3943426953054,-21.2964280834276,-21.1985134715498,-21.100598859672,-21.0026842477941,-20.9047696359163,-20.8068550240385,-20.7089404121606,-20.6110258002828,-20.513111188405,-20.4151965765272,-20.3172819646493,-20.2193673527715,-20.1214527408937,-20.0235381290159,-19.925623517138,-19.8277089052602,-19.7297942933824,-19.6318796815045,-19.5339650696267,-19.4360504577489,-19.3381358458711,-19.2402212339932,-19.1423066221154,-19.0443920102376,-18.9464773983597,-18.8485627864819,-18.7506481746041,-18.6527335627263,-18.5548189508484,-18.4569043389706,-18.3589897270928,-18.2610751152149,-18.1631605033371,-18.0652458914593,-17.9673312795815,-17.8694166677036,-17.7715020558258,-17.673587443948,-17.5756728320702,-17.4777582201923,-17.3798436083145,-17.2819289964367,-17.1840143845588,-17.086099772681,-16.9881851608032,-16.8902705489254,-16.7923559370475,-16.6944413251697,-16.5965267132919,-16.498612101414,-16.4006974895362,-16.3027828776584,-16.2048682657806,-16.1069536539027,-16.0090390420249,-15.9111244301471,-15.8132098182692,-15.7152952063914,-15.6173805945136,-15.5194659826358,-15.4215513707579,-15.3236367588801,-15.2257221470023,-15.1278075351245,-15.0298929232466,-14.9319783113688,-14.834063699491,-14.7361490876131,-14.6382344757353,-14.5403198638575,-14.4424052519797,-14.3444906401018,-14.246576028224,-14.1486614163462,-14.0507468044683,-13.9528321925905,-13.8549175807127,-13.7570029688349,-13.659088356957,-13.5611737450792,-13.4632591332014,-13.3653445213235,-13.2674299094457,-13.1695152975679,-13.0716006856901,-12.9736860738122,-12.8757714619344,-12.7778568500566,-12.6799422381787,-12.5820276263009,-12.4841130144231,-12.3861984025453,-12.2882837906674,-12.1903691787896,-12.0924545669118,-11.994539955034,-11.8966253431561,-11.7987107312783,-11.7007961194005,-11.6028815075226,-11.5049668956448,-11.407052283767,-11.3091376718892,-11.2112230600113,-11.1133084481335,-11.0153938362557,-10.9174792243778,-10.8195646125,-10.7216500006222,-10.6237353887444,-10.5258207768665,-10.4279061649887,-10.3299915531109,-10.232076941233,-10.1341623293552,-10.0362477174774,-9.93833310559956,-9.84041849372174,-9.74250388184391,-9.64458926996608,-9.54667465808825,-9.44876004621042,-9.3508454343326,-9.25293082245477,-9.15501621057694,-9.05710159869911,-8.95918698682128,-8.86127237494346,-8.76335776306563,-8.6654431511878,-8.56752853930997,-8.46961392743214,-8.37169931555432,-8.27378470367649,-8.17587009179866,-8.07795547992083,-7.980040868043,-7.88212625616518,-7.78421164428735,-7.68629703240952,-7.58838242053169,-7.49046780865386,-7.39255319677603,-7.29463858489821,-7.19672397302038,-7.09880936114255,-7.00089474926472,-6.90298013738689,-6.80506552550907,-6.70715091363124,-6.60923630175341,-6.51132168987558,-6.41340707799775,-6.31549246611993,-6.2175778542421,-6.11966324236427,-6.02174863048644,-5.92383401860862,-5.82591940673079,-5.72800479485296,-5.63009018297513,-5.5321755710973,-5.43426095921948,-5.33634634734165,-5.23843173546382,-5.14051712358599,-5.04260251170816,-4.94468789983033,-4.84677328795251,-4.74885867607468,-4.65094406419685,-4.55302945231902,-4.45511484044119,-4.35720022856336,-4.25928561668554,-4.16137100480771,-4.06345639292988,-3.96554178105205,-3.86762716917423,-3.7697125572964,-3.67179794541857,-3.57388333354074,-3.47596872166291,-3.37805410978509,-3.28013949790726,-3.18222488602943,-3.0843102741516,-2.98639566227378,-2.88848105039595,-2.79056643851812,-2.69265182664029,-2.59473721476246,-2.49682260288463,-2.3989079910068,-2.30099337912898,-2.20307876725115,-2.10516415537332,-2.00724954349549,-1.90933493161766,-1.81142031973984,-1.71350570786201,-1.61559109598418,-1.51767648410635,-1.41976187222852,-1.3218472603507,-1.22393264847287,-1.12601803659504,-1.02810342471721,-0.930188812839386,-0.832274200961557,-0.734359589083731,-0.636444977205901,-0.538530365328072,-0.440615753450246,-0.342701141572416,-0.24478652969459,-0.14687191781676,-0.0489573059389343,0.0489573059388952,0.146871917816725,0.244786529694551,0.34270114157238,0.440615753450206,0.538530365328036,0.636444977205862,0.734359589083692,0.832274200961521,0.930188812839347,1.02810342471718,1.126018036595,1.22393264847283,1.32184726035066,1.41976187222849,1.51767648410631,1.61559109598414,1.71350570786197,1.8114203197398,1.90933493161763,2.00724954349545,2.10516415537328,2.20307876725111,2.30099337912894,2.39890799100677,2.4968226028846,2.59473721476243,2.69265182664025,2.79056643851808,2.88848105039591,2.98639566227374,3.08431027415157,3.18222488602939,3.28013949790722,3.37805410978505,3.47596872166288,3.5738833335407,3.67179794541853,3.76971255729636,3.86762716917419,3.96554178105202,4.06345639292984,4.16137100480767,4.2592856166855,4.35720022856333,4.45511484044115,4.55302945231898,4.65094406419681,4.74885867607464,4.84677328795247,4.9446878998303,5.04260251170813,5.14051712358595,5.23843173546378,5.33634634734161,5.43426095921944,5.53217557109727,5.63009018297509,5.72800479485292,5.82591940673075,5.92383401860858,6.02174863048641,6.11966324236423,6.21757785424206,6.31549246611989,6.41340707799772,6.51132168987554,6.60923630175337,6.7071509136312,6.80506552550903,6.90298013738686,7.00089474926469,7.09880936114251,7.19672397302034,7.29463858489817,7.392553196776,7.49046780865383,7.58838242053165,7.68629703240948,7.78421164428731,7.88212625616514,7.98004086804296,8.0779554799208,8.17587009179862,8.27378470367645,8.37169931555428,8.46961392743211,8.56752853930993,8.66544315118776,8.76335776306559,8.86127237494342,8.95918698682124,9.05710159869908,9.1550162105769,9.25293082245473,9.35084543433256,9.44876004621039,9.54667465808821,9.64458926996604,9.74250388184387,9.8404184937217,9.93833310559953,10.0362477174774,10.1341623293552,10.232076941233,10.3299915531108,10.4279061649887,10.5258207768665,10.6237353887443,10.7216500006221,10.8195646125,10.9174792243778,11.0153938362556,11.1133084481335,11.2112230600113,11.3091376718891,11.4070522837669,11.5049668956448,11.6028815075226,11.7007961194004,11.7987107312783,11.8966253431561,11.9945399550339,12.0924545669117,12.1903691787896,12.2882837906674,12.3861984025452,12.4841130144231,12.5820276263009,12.6799422381787,12.7778568500565,12.8757714619344,12.9736860738122,13.07160068569,13.1695152975678,13.2674299094457,13.3653445213235,13.4632591332013,13.5611737450792,13.659088356957,13.7570029688348,13.8549175807126,13.9528321925905,14.0507468044683,14.1486614163461,14.246576028224,14.3444906401018,14.4424052519796,14.5403198638574,14.6382344757353,14.7361490876131,14.8340636994909,14.9319783113688,15.0298929232466,15.1278075351244,15.2257221470022,15.3236367588801,15.4215513707579,15.5194659826357,15.6173805945136,15.7152952063914,15.8132098182692,15.911124430147,16.0090390420249,16.1069536539027,16.2048682657805,16.3027828776584,16.4006974895362,16.498612101414,16.5965267132918,16.6944413251697,16.7923559370475,16.8902705489253,16.9881851608031,17.086099772681,17.1840143845588,17.2819289964366,17.3798436083145,17.4777582201923,17.5756728320701,17.6735874439479,17.7715020558258,17.8694166677036,17.9673312795814,18.0652458914593,18.1631605033371,18.2610751152149,18.3589897270927,18.4569043389706,18.5548189508484,18.6527335627262,18.7506481746041,18.8485627864819,18.9464773983597,19.0443920102375,19.1423066221154,19.2402212339932,19.338135845871,19.4360504577488,19.5339650696267,19.6318796815045,19.7297942933823,19.8277089052602,19.925623517138,20.0235381290158,20.1214527408936,20.2193673527715,20.3172819646493,20.4151965765271,20.513111188405,20.6110258002828,20.7089404121606,20.8068550240384,20.9047696359163,21.0026842477941,21.1005988596719,21.1985134715498,21.2964280834276,21.3943426953054,21.4922573071832,21.5901719190611,21.6880865309389,21.7860011428167,21.8839157546945,21.9818303665724,22.0797449784502,22.177659590328,22.2755742022059,22.3734888140837,22.4714034259615,22.5693180378393,22.6672326497172,22.765147261595,22.8630618734728,22.9609764853507,23.0588910972285,23.1568057091063,23.2547203209841,23.352634932862,23.4505495447398,23.5484641566176,23.6463787684955,23.7442933803733,23.8422079922511,23.9401226041289,24.0380372160068,24.1359518278846,24.2338664397624,24.3317810516402,24.4296956635181,24.5276102753959,24.6255248872737,24.7234394991516,24.8213541110294,24.9192687229072,25.017183334785],\"y\":[2.06955737196011e-005,3.23061247773194e-005,4.91947537060029e-005,7.31222550579724e-005,0.000106719489290462,0.00015290403151679,0.00021342606467635,0.000290351639864336,0.000385163324332867,0.000498424283752057,0.000629454159181415,0.000776061949487869,0.00093438330692436,0.00109886635964528,0.00126244096915672,0.00141586130772811,0.00154871631190228,0.00165347210058645,0.00172348304683875,0.00175421089748478,0.00174367196493334,0.00169262668096046,0.00160449203117779,0.00148499015825231,0.00134157683442967,0.00118271914276957,0.00101726325561469,0.000854585501895104,0.000701334305336774,0.000562152702762914,0.000439964894490095,0.000336093591349104,0.000250496487376131,0.000182073867944786,0.000129001803508947,8.90518184699872e-005,5.98673501139979e-005,3.95679568252937e-005,2.57073473302907e-005,1.62968147926288e-005,1.00736535011971e-005,6.06772599607385e-006,3.55919671435195e-006,2.03197880329948e-006,1.12851183652692e-006,6.09420469475384e-007,3.19875829514764e-007,1.63137126555341e-007,8.33583418119213e-008,4.22039954812142e-008,2.07552060725621e-008,9.90910269779122e-009,4.59087012893134e-009,2.06335407919104e-009,8.99438994912609e-010,3.80206099119251e-010,1.55836567477554e-010,6.19294100478515e-011,2.38623318067994e-011,9.53092523508038e-012,3.80723898433872e-012,1.51142579529024e-012,7.15864947171053e-013,6.99788011339329e-013,1.44957628671527e-012,3.65862065377582e-012,9.24886668208054e-012,2.27091641039741e-011,5.39232357085663e-011,1.23714445006689e-010,2.91151927960235e-010,6.81326735436895e-010,1.54769194601255e-009,3.41338298740281e-009,7.3106488550382e-009,1.52097197196678e-008,3.07492366776575e-008,6.04342419047732e-008,1.15529892257966e-007,2.14950651218858e-007,3.89523634646511e-007,7.07483449219325e-007,1.2620080215861e-006,2.1911867282713e-006,3.70480147500682e-006,6.10289983479479e-006,9.8000936079774e-006,1.53497344123659e-005,2.34647178218689e-005,3.50306819111707e-005,5.11065401068595e-005,7.29067307680796e-005,0.000102536795130304,0.000141052351967504,0.000189477151195222,0.000248688298831659,0.000319096855154546,0.000400498776836296,0.000491955835197254,0.000591725808352608,0.000697258789996874,0.000805271920814461,0.000911908323251251,0.00101197441797543,0.00110125973516906,0.00117635210306145,0.00123461669853079,0.00127455824662633,0.00129599395722541,0.00130012514374062,0.00128950201768339,0.00126788461368129,0.00124001045657778,0.00121128604299055,0.00118858389190032,0.00117763494236229,0.00118309447245815,0.00120867663968399,0.00125686453039771,0.00132878120000918,0.00142416925901733,0.00154148489723924,0.00167810419886089,0.00183063025664422,0.00199527917548621,0.00216880012938695,0.00234699997015468,0.00252788949702933,0.0027106218005473,0.00289538116074759,0.00308317034699965,0.00327547809555748,0.00347387904373496,0.00367962889415686,0.00389332039160227,0.00411465984671168,0.00434281814244112,0.00457469805739361,0.00480775554423905,0.00503957679139882,0.00526822043967031,0.00549246732730916,0.00571193692706976,0.00592706099953357,0.0061389263012408,0.0063490166168249,0.00655890283516904,0.00677012144909459,0.00698324540938608,0.00719814089975069,0.0074140480069787,0.00762974399166686,0.0078437772756494,0.00805472695753846,0.00826143577464723,0.00846316311645326,0.00865960972287881,0.00885072920156837,0.00903587408058361,0.0092145844773497,0.00938446495194821,0.00954133056513521,0.00967906189252601,0.00978977701188496,0.00986433730223844,0.00989315153185352,0.00986719317765414,0.00977910402311226,0.00962327121924465,0.00939346131181693,0.00910046242382706,0.00875191850014144,0.00835797683562895,0.00793020462942509,0.00748045137098149,0.00701981064459313,0.00655780644312978,0.0061018884220809,0.00565727206319903,0.00522741906996239,0.0048150805635678,0.00441924497978426,0.00404012200890061,0.00367818006334522,0.00333432965823236,0.00300992430702565,0.00270661134359841,0.00242608105707311,0.00216977073769905,0.00193858099283448,0.00173325217648952,0.00155429175421573,0.0013976141522347,0.00126075011097858,0.00114091679141068,0.00103530517164856,0.000941351207793856,0.00085696090224246,0.000780667099755034,0.000711704875603403,0.000650002221223173,0.000596360661396367,0.00055244036420409,0.000518889785101089,0.000496996247276379,0.000487940447742048,0.000492757541027249,0.000512365520805772,0.000547653491260924,0.000599615220667455,0.000669508584248347,0.000759019566278399,0.000871304049603565,0.00101104904413271,0.00118068281431567,0.00138522466259862,0.00163070619836308,0.00192433964986035,0.00227475833142264,0.00269232468376207,0.00318948268808046,0.00378111296724416,0.00448483232166776,0.00532762445808041,0.00634242830667116,0.00754632219071464,0.00896717632402742,0.0106329880547668,0.01257068500702,0.0148050053231384,0.0173576381676518,0.0202468108727722,0.0234874953010672,0.0270923744014364,0.0310916106253922,0.0355121427304819,0.0403537885698626,0.0456534318617253,0.0514632236931918,0.0578523768700782,0.0649067792847402,0.0727256896914701,0.0814149274950318,0.0910762275993998,0.101792804337148,0.113665926590848,0.126676107692619,0.140631307744174,0.155310685276851,0.170395828647364,0.185479679423148,0.200086240853808,0.213700014143241,0.22580280867193,0.23591445686237,0.243633133027778,0.248512997927096,0.25041407551533,0.249546307869034,0.246100750940866,0.240372854037536,0.23272894441394,0.223570463757934,0.213300036803983,0.202292744507263,0.190874991573912,0.179312197484724,0.167818260631557,0.156547088879272,0.145571716608854,0.134939110822452,0.124678495582323,0.114810582897277,0.10535397318603,0.0963286981401341,0.0877572052172826,0.0796633151701788,0.0720698219015798,0.0650305964012625,0.0585459112098749,0.0525899202071776,0.047150019402232,0.0422040993249153,0.0377223149316084,0.0336694695357989,0.0300076893827272,0.0266990641752936,0.0237079590295139,0.0210027616502555,0.0185737014744355,0.0163890403599179,0.0144233816630439,0.0126646640226733,0.0111025116099675,0.00972707459359505,0.00852812267618345,0.00749446971105809,0.00661375799727771,0.00587258647723287,0.00525693039587758,0.00476013191621235,0.00436266431968595,0.00405001413856678,0.00381410757402568,0.00364987592559362,0.00355550910183584,0.00353252352909492,0.0035856434763779,0.0037225003359184,0.00395315922620993,0.0042894870042078,0.00475535955534938,0.00535931251576937,0.00610907515946785,0.00701365153297688,0.00807902446698809,0.00930764683994713,0.0106982016094963,0.0122456574817916,0.0139416171453197,0.0157749218975384,0.0177324425207856,0.0198080005198041,0.0219782275535654,0.0242265788278502,0.0265397213342573,0.0289045451939025,0.0313075925155216,0.0337343421894232,0.0361684759622356,0.0385912490694022,0.0409810712470672,0.0433133728009692,0.0455495530356475,0.0476616339616122,0.0496200381862523,0.0513934925219617,0.0529517626955719,0.0542667170481482,0.0553134226308393,0.0560712667480216,0.0565250830869356,0.0566662397750261,0.0564936195393446,0.0559866846903058,0.0551915150440039,0.05414017995587,0.0528675740459741,0.0514142047067249,0.0498243074158752,0.0481437633018325,0.0464179776727052,0.0446898680760837,0.0429980858391737,0.041375558840158,0.0398602870572617,0.0384617957586301,0.0371865669908265,0.0360343171638958,0.0349976612359605,0.034062964941666,0.0332115077355978,0.0324209270900769,0.0316668818458894,0.0309248370676828,0.0301718397284665,0.0293829597180958,0.0285459852931976,0.0276532976073514,0.0267023485878857,0.0256952194710891,0.0246377844405772,0.0235387320956578,0.0224085626477225,0.0212586552804635,0.0201004698256782,0.0189449333110791,0.0178044430770961,0.0166866224333908,0.0155978353606925,0.0145429162688048,0.0135252945878743,0.0125472147406738,0.0116100303428236,0.0107145378026027,0.00986130371774141,0.00905093463897851,0.00828453640512423,0.00756767662568862,0.00689673914030111,0.00627225831815783,0.00569400841929431,0.00516077823037218,0.00467029759842319,0.0042193418036737,0.00380400808735325,0.00342012885637541,0.00306376093151344,0.00273193431981874,0.00242441724378296,0.00213854769260169,0.00187527027371604,0.00163636200527308,0.00142396780540396,0.00124009545265423,0.00108613872261998,0.000962487659314878,0.000868270332081233,0.00080125252072867,0.000758213704125734,0.000735178331022902,0.000724457405674239,0.000720550289453499,0.000718322005265154,0.000713350899511145,0.000702190103807553,0.000682527415779108,0.000653237940982611,0.000614333128734932,0.000566818325806886,0.000512386037017179,0.000453437606315375,0.000393096352908604,0.000333720995750489,0.000277337914221423,0.0002255293709291,0.00017938170985834,0.000139487117686376,0.000105988794854591,7.865708885733e-005,5.69832699820399e-005,4.03899538293604e-005,2.82110136554748e-005,1.92642308793898e-005,1.28531408762407e-005,8.37375823228208e-006,5.32370999716467e-006,3.30086490519412e-006,1.99484796567126e-006,1.1744281637308e-006,6.7322878309622e-007,3.75598351434918e-007,2.0617777468594e-007,1.13267061146247e-007,6.05967939367336e-008,3.15474970972482e-008,1.59728585453211e-008,7.86111586368557e-009,3.75937664108106e-009,1.74707971189942e-009,7.90789376434142e-010,3.53775652097883e-010,1.69331167993552e-010,1.19403715264799e-010,1.75571164717848e-010,3.85291165895869e-010,9.17061528004844e-010,2.16044056161617e-009,4.95272600153615e-009,1.10183358459409e-008,2.3781934151529e-008,4.98125246321773e-008,1.01289599114849e-007,2.00060023523425e-007,3.91529104759401e-007,7.67701991172465e-007,1.46260912683827e-006,2.70842840768869e-006,4.87674912789811e-006,8.54207211440132e-006,1.4562542390502e-005,2.41767684027344e-005,3.91123555021015e-005,6.16976335923892e-005,9.49630963802584e-005,0.000143681640272954,0.000213724364327052,0.000309604328420213,0.000436977283065842,0.000601191569700583,0.000806624619235177,0.00105591574677298,0.00134916648662719,0.00168320233280396,0.00205100520454353,0.00244143181347023,0.00283852594264193,0.00321978440262639,0.00356397637980122,0.00385078087482314,0.00406230403430253,0.00418481271583862,0.00421010615396335,0.00413635931241414,0.00396833304140981,0.00371691914856888,0.00339806713855171,0.00302985832598086,0.0026372792631537,0.00224251993662349,0.00186254867877567,0.00151068998203981,0.00119621828100886,0.000924391978402235,0.000696843935677184,0.000512222555225481,0.000366969675642035,0.000256126774298421,0.000175493412140091,0.00011806740889509,7.75346994660416e-005,4.96693769273646e-005],\"type\":\"scatter\",\"mode\":\"lines\",\"alpha\":0.3,\"fill\":\"tozeroy\",\"name\":\"Post-follow\",\"colors\":\"#FF7F0E\",\"inherit\":true},\"47d04e2a5ee9.1\":{\"alpha_stroke\":1,\"sizes\":[10,100],\"spans\":[1,20],\"x\":[-26.177501706217,-26.0750457308502,-25.9725897554834,-25.8701337801166,-25.7676778047498,-25.665221829383,-25.5627658540162,-25.4603098786494,-25.3578539032826,-25.2553979279158,-25.152941952549,-25.0504859771822,-24.9480300018154,-24.8455740264486,-24.7431180510818,-24.640662075715,-24.5382061003482,-24.4357501249814,-24.3332941496146,-24.2308381742479,-24.1283821988811,-24.0259262235143,-23.9234702481475,-23.8210142727807,-23.7185582974139,-23.6161023220471,-23.5136463466803,-23.4111903713135,-23.3087343959467,-23.2062784205799,-23.1038224452131,-23.0013664698463,-22.8989104944795,-22.7964545191127,-22.6939985437459,-22.5915425683791,-22.4890865930123,-22.3866306176455,-22.2841746422787,-22.1817186669119,-22.0792626915451,-21.9768067161783,-21.8743507408115,-21.7718947654447,-21.6694387900779,-21.5669828147111,-21.4645268393443,-21.3620708639775,-21.2596148886107,-21.1571589132439,-21.0547029378771,-20.9522469625103,-20.8497909871435,-20.7473350117767,-20.6448790364099,-20.5424230610431,-20.4399670856763,-20.3375111103095,-20.2350551349427,-20.1325991595759,-20.0301431842091,-19.9276872088423,-19.8252312334755,-19.7227752581087,-19.6203192827419,-19.5178633073751,-19.4154073320083,-19.3129513566415,-19.2104953812747,-19.1080394059079,-19.0055834305411,-18.9031274551743,-18.8006714798075,-18.6982155044407,-18.5957595290739,-18.4933035537071,-18.3908475783403,-18.2883916029735,-18.1859356276067,-18.0834796522399,-17.9810236768731,-17.8785677015063,-17.7761117261395,-17.6736557507727,-17.5711997754059,-17.4687438000391,-17.3662878246723,-17.2638318493055,-17.1613758739387,-17.058919898572,-16.9564639232052,-16.8540079478384,-16.7515519724716,-16.6490959971048,-16.546640021738,-16.4441840463712,-16.3417280710044,-16.2392720956376,-16.1368161202708,-16.034360144904,-15.9319041695372,-15.8294481941704,-15.7269922188036,-15.6245362434368,-15.52208026807,-15.4196242927032,-15.3171683173364,-15.2147123419696,-15.1122563666028,-15.009800391236,-14.9073444158692,-14.8048884405024,-14.7024324651356,-14.5999764897688,-14.497520514402,-14.3950645390352,-14.2926085636684,-14.1901525883016,-14.0876966129348,-13.985240637568,-13.8827846622012,-13.7803286868344,-13.6778727114676,-13.5754167361008,-13.472960760734,-13.3705047853672,-13.2680488100004,-13.1655928346336,-13.0631368592668,-12.9606808839,-12.8582249085332,-12.7557689331664,-12.6533129577996,-12.5508569824328,-12.448401007066,-12.3459450316992,-12.2434890563324,-12.1410330809656,-12.0385771055988,-11.936121130232,-11.8336651548652,-11.7312091794984,-11.6287532041316,-11.5262972287648,-11.423841253398,-11.3213852780312,-11.2189293026644,-11.1164733272976,-11.0140173519308,-10.911561376564,-10.8091054011972,-10.7066494258304,-10.6041934504636,-10.5017374750968,-10.39928149973,-10.2968255243632,-10.1943695489964,-10.0919135736297,-9.98945759826285,-9.88700162289605,-9.78454564752925,-9.68208967216245,-9.57963369679566,-9.47717772142886,-9.37472174606206,-9.27226577069526,-9.16980979532846,-9.06735381996166,-8.96489784459487,-8.86244186922807,-8.75998589386127,-8.65752991849447,-8.55507394312767,-8.45261796776087,-8.35016199239407,-8.24770601702728,-8.14525004166047,-8.04279406629368,-7.94033809092688,-7.83788211556008,-7.73542614019328,-7.63297016482649,-7.53051418945968,-7.42805821409289,-7.32560223872609,-7.22314626335929,-7.12069028799249,-7.01823431262569,-6.91577833725889,-6.81332236189209,-6.7108663865253,-6.6084104111585,-6.5059544357917,-6.4034984604249,-6.3010424850581,-6.1985865096913,-6.09613053432451,-5.99367455895771,-5.89121858359091,-5.78876260822411,-5.68630663285731,-5.58385065749051,-5.48139468212371,-5.37893870675692,-5.27648273139012,-5.17402675602332,-5.07157078065652,-4.96911480528972,-4.86665882992292,-4.76420285455612,-4.66174687918933,-4.55929090382253,-4.45683492845573,-4.35437895308893,-4.25192297772213,-4.14946700235533,-4.04701102698854,-3.94455505162174,-3.84209907625494,-3.73964310088814,-3.63718712552134,-3.53473115015454,-3.43227517478774,-3.32981919942095,-3.22736322405414,-3.12490724868735,-3.02245127332055,-2.91999529795375,-2.81753932258695,-2.71508334722015,-2.61262737185335,-2.51017139648656,-2.40771542111976,-2.30525944575296,-2.20280347038616,-2.10034749501936,-1.99789151965256,-1.89543554428576,-1.79297956891897,-1.69052359355217,-1.58806761818537,-1.48561164281857,-1.38315566745177,-1.28069969208497,-1.17824371671817,-1.07578774135138,-0.973331765984579,-0.870875790617781,-0.768419815250979,-0.665963839884181,-0.563507864517383,-0.461051889150585,-0.358595913783788,-0.25613993841699,-0.153683963050188,-0.0512279876833901,0.0512279876834079,0.153683963050206,0.256139938417004,0.358595913783805,0.461051889150603,0.563507864517401,0.665963839884199,0.768419815250997,0.870875790617795,0.973331765984597,1.07578774135139,1.17824371671819,1.28069969208499,1.38315566745179,1.48561164281859,1.58806761818539,1.69052359355219,1.79297956891898,1.89543554428578,1.99789151965258,2.10034749501938,2.20280347038618,2.30525944575298,2.40771542111978,2.51017139648657,2.61262737185337,2.71508334722017,2.81753932258697,2.91999529795377,3.02245127332057,3.12490724868736,3.22736322405416,3.32981919942096,3.43227517478776,3.53473115015456,3.63718712552136,3.73964310088816,3.84209907625495,3.94455505162175,4.04701102698855,4.14946700235535,4.25192297772215,4.35437895308895,4.45683492845574,4.55929090382254,4.66174687918934,4.76420285455614,4.86665882992294,4.96911480528974,5.07157078065654,5.17402675602333,5.27648273139014,5.37893870675693,5.48139468212373,5.58385065749053,5.68630663285733,5.78876260822413,5.89121858359093,5.99367455895772,6.09613053432452,6.19858650969132,6.30104248505812,6.40349846042492,6.50595443579171,6.60841041115852,6.71086638652531,6.81332236189211,6.91577833725891,7.01823431262571,7.12069028799251,7.2231462633593,7.32560223872611,7.42805821409291,7.5305141894597,7.6329701648265,7.7354261401933,7.8378821155601,7.94033809092689,8.04279406629369,8.1452500416605,8.24770601702729,8.35016199239409,8.45261796776089,8.55507394312769,8.65752991849449,8.75998589386128,8.86244186922809,8.96489784459488,9.06735381996168,9.16980979532848,9.27226577069528,9.37472174606208,9.47717772142887,9.57963369679567,9.68208967216247,9.78454564752927,9.88700162289607,9.98945759826287,10.0919135736297,10.1943695489965,10.2968255243633,10.3992814997301,10.5017374750969,10.6041934504637,10.7066494258305,10.8091054011973,10.9115613765641,11.0140173519309,11.1164733272977,11.2189293026644,11.3213852780313,11.423841253398,11.5262972287648,11.6287532041316,11.7312091794984,11.8336651548652,11.936121130232,12.0385771055988,12.1410330809656,12.2434890563324,12.3459450316992,12.448401007066,12.5508569824328,12.6533129577996,12.7557689331664,12.8582249085332,12.9606808839,13.0631368592668,13.1655928346336,13.2680488100004,13.3705047853672,13.472960760734,13.5754167361008,13.6778727114676,13.7803286868344,13.8827846622012,13.985240637568,14.0876966129348,14.1901525883016,14.2926085636684,14.3950645390352,14.497520514402,14.5999764897688,14.7024324651356,14.8048884405024,14.9073444158692,15.009800391236,15.1122563666028,15.2147123419696,15.3171683173364,15.4196242927032,15.52208026807,15.6245362434368,15.7269922188036,15.8294481941704,15.9319041695372,16.034360144904,16.1368161202708,16.2392720956376,16.3417280710044,16.4441840463712,16.546640021738,16.6490959971048,16.7515519724716,16.8540079478384,16.9564639232052,17.058919898572,17.1613758739388,17.2638318493056,17.3662878246724,17.4687438000392,17.571199775406,17.6736557507728,17.7761117261396,17.8785677015064,17.9810236768732,18.08347965224,18.1859356276068,18.2883916029735,18.3908475783403,18.4933035537072,18.5957595290739,18.6982155044407,18.8006714798075,18.9031274551743,19.0055834305411,19.1080394059079,19.2104953812747,19.3129513566415,19.4154073320083,19.5178633073751,19.6203192827419,19.7227752581087,19.8252312334755,19.9276872088423,20.0301431842091,20.1325991595759,20.2350551349427,20.3375111103095,20.4399670856763,20.5424230610431,20.6448790364099,20.7473350117767,20.8497909871435,20.9522469625103,21.0547029378771,21.1571589132439,21.2596148886107,21.3620708639775,21.4645268393443,21.5669828147111,21.6694387900779,21.7718947654447,21.8743507408115,21.9768067161783,22.0792626915451,22.1817186669119,22.2841746422787,22.3866306176455,22.4890865930123,22.5915425683791,22.6939985437459,22.7964545191127,22.8989104944795,23.0013664698463,23.1038224452131,23.2062784205799,23.3087343959467,23.4111903713135,23.5136463466803,23.6161023220471,23.7185582974139,23.8210142727807,23.9234702481475,24.0259262235143,24.1283821988811,24.2308381742479,24.3332941496147,24.4357501249815,24.5382061003483,24.6406620757151,24.7431180510819,24.8455740264487,24.9480300018155,25.0504859771823,25.1529419525491,25.2553979279159,25.3578539032827,25.4603098786494,25.5627658540162,25.665221829383,25.7676778047498,25.8701337801166,25.9725897554834,26.0750457308502,26.177501706217],\"y\":[4.96785802168463e-006,6.65706867306402e-006,8.81829379062532e-006,1.16450303780852e-005,1.52494883020379e-005,1.97331742822869e-005,2.52399885505976e-005,3.19199139269272e-005,3.99253631426476e-005,4.94068086075506e-005,6.05875522414219e-005,7.37882543292371e-005,8.88641531499424e-005,0.00010585607432784,0.000124757696165281,0.000145508862846638,0.000167989776833604,0.00019201621021785,0.000217452469452812,0.000243713382157731,0.000270315611122771,0.000296771071408406,0.000322552950754928,0.000347108999260234,0.000369876387558498,0.000390103560455642,0.000406959446098017,0.000420300675782567,0.000429782127618667,0.000435152228231977,0.000436261379773107,0.00043306754760817,0.000425638894601461,0.000413557056521961,0.000397823314504767,0.000378940295578198,0.000357399004542377,0.00033373157654829,0.000308494004368511,0.000282248873159275,0.000255566429103052,0.000229119901903702,0.000203381948460852,0.000178722328222195,0.000155444608965234,0.000133784784751518,0.000113911807047832,9.59338740151786e-005,8.02330582203938e-005,6.64185689618167e-005,5.44076677536873e-005,4.40900046171511e-005,3.53348463216314e-005,2.79978220777278e-005,2.19271358531151e-005,1.70639141129695e-005,1.3188501921068e-005,1.00795293349685e-005,7.61492831610153e-006,5.68507911522843e-006,4.19307833413048e-006,3.05464126474201e-006,2.20219491019531e-006,1.59325763374899e-006,1.1399247489943e-006,8.07469221701569e-007,5.67990277450155e-007,3.99506527364304e-007,2.85130568972517e-007,2.12329668288474e-007,1.75567496211679e-007,1.67121864834663e-007,1.84266207205201e-007,2.28653732747323e-007,3.04437598040694e-007,4.18410270938703e-007,5.80218355949472e-007,8.06076741946996e-007,1.12720685528402e-006,1.55934976831759e-006,2.13226319102184e-006,2.88141945062091e-006,3.84839510661262e-006,5.08116564771205e-006,6.63428942593049e-006,8.63740204316567e-006,1.11399233459764e-005,1.4202270793669e-005,1.79036207447751e-005,2.23238096750263e-005,2.75410537919119e-005,3.36293843968281e-005,4.0716644821104e-005,4.89310847446174e-005,5.8183139717373e-005,6.8477873669511e-005,7.97970928085934e-005,9.20979952756299e-005,0.000105312586057919,0.000119347917888438,0.00013416827312194,0.000149498932870031,0.00016516903599581,0.000181022878199006,0.00019691391504131,0.000212713667685037,0.000228320937153686,0.000243651377535189,0.000258708588065879,0.000273614769100668,0.000288535464434446,0.000303708449587614,0.000319444352880264,0.000336125543296771,0.000354203259604876,0.000374696118161156,0.000397963662304907,0.000424637924117046,0.000455370605656902,0.000490815296428026,0.000531613172277166,0.000578378422982636,0.000632399651993656,0.000694209506194809,0.000763617373789586,0.000840888938440774,0.000926186388677272,0.00101956508825181,0.00112097302965847,0.00123038585802212,0.00134857078546335,0.00147382804123039,0.00160572357705388,0.0017438084460797,0.00188764454912666,0.0020368305940844,0.0021910277816114,0.00235053940881218,0.00251500427122489,0.00268422169887007,0.00285842671513178,0.00303796960746576,0.0032232940196169,0.0034149081154582,0.00361362541203391,0.00382087498143444,0.00403597080154373,0.00425902967857294,0.00448992156871224,0.00472822943176105,0.00497321628392225,0.00522380011746761,0.00547873270630765,0.00573513426244645,0.00599043639071457,0.00624199156517021,0.00648695884781909,0.00672236642252257,0.00694517858482338,0.0071512701706534,0.00733556742462709,0.00749751604528498,0.00763485417926585,0.00774565953139017,0.00782837864303356,0.00788184684633595,0.00790529884053335,0.0078936081015771,0.00785106407514407,0.00777908212604809,0.00767858989460225,0.00755075941121143,0.00739697055220965,0.00721877564360884,0.0070163185421706,0.00679137541891795,0.00654829559600625,0.00628905499620634,0.00601567134540537,0.00573020028093559,0.00543473283019946,0.00513139384276953,0.00482188789840058,0.00450981914332115,0.00419742658979297,0.00388690923747448,0.00358043761451425,0.00328013257696433,0.00298804219730909,0.00270731511087566,0.0024402037335342,0.00218730543943759,0.00194992886079635,0.00172917108230989,0.00152591037213248,0.00134080323501017,0.00117454330275367,0.00103027047394749,0.000904702516757708,0.000797570222485384,0.000708486881948122,0.000636978322419115,0.000582514591214206,0.000544543171975197,0.000524294026977227,0.000520456249499271,0.000531692382808359,0.000557946043949214,0.000599402812078389,0.000656540297014043,0.000730181700430699,0.000822221910061681,0.000937421082934434,0.00107592414689794,0.0012413067292022,0.00143799641353123,0.00167137840484044,0.00194790772386155,0.00227522784759869,0.00267246244048131,0.00314880913310422,0.00371493180341168,0.00438646571904012,0.00518114533935505,0.00611892762124672,0.00722210016574815,0.00852731018025378,0.0100884680720925,0.0119121556211001,0.0140322019340794,0.0164842353473135,0.0193052359311164,0.0225329732853239,0.0262053251580926,0.0304410385162465,0.0352208615974293,0.0405576258404131,0.0464717910768728,0.0529755758919742,0.0600713911733009,0.067750306967567,0.0760271235887487,0.0848659902513662,0.0941394521502365,0.103766062460063,0.11364892313086,0.123676744418886,0.133725337841332,0.143659543054554,0.153253653949471,0.16237172145692,0.170870874165041,0.178612685643365,0.185469546309006,0.191327974397831,0.196091651422933,0.199571223033047,0.201707937933583,0.202599954469227,0.202260957735776,0.200726831675045,0.198053913925197,0.194316845039225,0.189597812912691,0.183889017041581,0.177476351528291,0.170478451637619,0.163013074816092,0.155194739777066,0.147132664803626,0.138929013687265,0.130684171398421,0.12250388606598,0.114456040999754,0.106595928241387,0.0989694133340498,0.0916135281268483,0.0845571549021734,0.0778316725961314,0.0714959169013212,0.0655056250872084,0.0598622879595425,0.0545641531161026,0.049606775872265,0.0449835161513409,0.0406859823201955,0.0367437674056628,0.0331181083761214,0.0297806898460979,0.0267195418683141,0.0239226155101701,0.0213779157361212,0.0190736193974764,0.0170086616869979,0.0151873832527713,0.013568800022517,0.0121432959556931,0.0109019122727799,0.00983638668398104,0.00893918535738992,0.00820352737417863,0.00764576175929024,0.00724163589844852,0.00698214096410337,0.00686406848773829,0.00688480626944698,0.00704225862355054,0.00733475391813313,0.00776996960070846,0.00835255609418485,0.00906581592611852,0.00990811688534308,0.0108773393510651,0.0119707255260152,0.013184735308474,0.0145149103965179,0.0159727575353219,0.017532090121027,0.0191824052120269,0.0209134384343161,0.0227137178996383,0.0245706410295576,0.0264705789730302,0.028399709935809,0.0303375857376221,0.0322657872189093,0.0341685098601387,0.0360302230309514,0.0378358891112839,0.0395711713175427,0.0412220531026808,0.0427568171066164,0.0441804130670033,0.0454842837896687,0.0466612843488244,0.0477056605386664,0.0486130057422392,0.0493801980171657,0.0499900036487997,0.0504463259914537,0.0507608572351484,0.050935204328454,0.0509716431759761,0.0508730556126603,0.0506428793945965,0.0502819827956941,0.049779978563833,0.0491624293827404,0.0484352406754066,0.0476048434246294,0.046678195225889,0.0456627721373062,0.0445665502116809,0.0433903670459684,0.0421508406899009,0.0408613175577275,0.039531201411554,0.0381698515447618,0.036786456237774,0.0353899050635455,0.03398889049222,0.0325936809831902,0.0312114156167349,0.0298477953132003,0.028507649843055,0.027194932606261,0.025912734657391,0.0246633175671026,0.0234532891026277,0.022279550997815,0.0211406708252986,0.0200361494016275,0.0189652470060093,0.0179270802629645,0.0169207121509747,0.0159471609801525,0.0150071001836184,0.0140963723033051,0.0132146972120185,0.0123619892883504,0.0115383406810158,0.0107439970324017,0.00997932650344072,0.00924989661136433,0.0085518212667803,0.00788500038213547,0.00724978729581676,0.00664643384754811,0.00607507363879464,0.00553571052624738,0.00503085126333049,0.00456056596760197,0.00412118709910615,0.00371211589983578,0.0033326613505672,0.00298205051698395,0.0026594376940282,0.00236396117688442,0.00209906347770073,0.00185874980326832,0.0016418915876122,0.00144730450442288,0.00127374873868248,0.00111993044611263,0.000984504578979209,0.000867636978359291,0.000767031904230357,0.00067988129897681,0.000604733673007092,0.000540163558001326,0.000484788820805059,0.000437287762033143,0.000396527844011489,0.000361850412297509,0.000331244482015473,0.000303893776171841,0.000279106672394076,0.000256313802785257,0.000235063242116735,0.000215013416277446,0.000196021491764359,0.000177871909713276,0.000160472917430153,0.000143831492928343,0.000127984013094601,0.000112985086367182,9.8897504235718e-005,8.58258201332359e-005,7.39372696244658e-005,6.31176279700277e-005,5.33732238738107e-005,4.46922922861996e-005,3.7046228096333e-005,3.03914431224225e-005,2.46717515058139e-005,1.9930570297441e-005,1.59884881193655e-005,1.27378465604051e-005,1.01108446284742e-005,8.04728839115896e-006,6.49752573466637e-006,5.42541303111951e-006,4.83986877515053e-006,4.78425263594738e-006,5.25352246574457e-006,6.33481062609939e-006,8.15709380836825e-006,1.08980321604299e-005,1.47914354850867e-005,2.01353360616424e-005,2.7713152161097e-005,3.78913017672741e-005,5.12708178718222e-005,6.86052753132217e-005,9.07629416557085e-005,0.000118727452942936,0.00015359522079223,0.000197357141501757,0.000251988774320563,0.000318018963803388,0.000396813402485767,0.00048967108987451,0.000597768388240731,0.000722098284584393,0.000863405315545395,0.00102520653687587,0.00120406322623278,0.00139900157669052,0.00160850100940845,0.0018304375675851,0.00206207913467275,0.00230009787155233,0.00254023986380422,0.00277644604233494,0.00300358419059562,0.00321659104177731,0.00341046266067788,0.00358040983078924,0.00372201350882331,0.00383075005147663,0.00389760792850726,0.00392635241797538,0.0039163700540965,0.0038680391485722,0.00378270608204503,0.00366263501488287,0.00351093204410089,0.00332888748802629,0.00312398099334181,0.00290297655679398,0.00267093964267527,0.00243284050010453,0.00219342043941915,0.0019570722250749,0.00172814589196028,0.00151190799150208,0.00130957976561934,0.00112281926548717,0.000952704668950253,0.000799777378349221,0.000664094288962896,0.000545287970172547,0.000444661277467751,0.000359328268283639,0.000287279225342184,0.000227159896955252,0.000177598568540505,0.00013724539471831,0.000104805273402763,7.93646441156175e-005,5.99136180575357e-005,4.47107221951502e-005],\"type\":\"scatter\",\"mode\":\"lines\",\"alpha\":0.3,\"fill\":\"tozeroy\",\"name\":\"Pre-follow\",\"colors\":\"#1F77B4\",\"inherit\":true}},\"layout\":{\"margin\":{\"b\":40,\"l\":60,\"t\":25,\"r\":10},\"autosize\":false,\"legend\":{\"x\":0.05,\"y\":0.95},\"xaxis\":{\"domain\":[0,1],\"automargin\":true,\"title\":\"Disposition Effect\"},\"yaxis\":{\"domain\":[0,1],\"automargin\":true,\"title\":\"Density\"},\"hovermode\":\"closest\",\"showlegend\":true},\"source\":\"A\",\"config\":{\"showSendToCloud\":false},\"data\":[{\"fillcolor\":\"rgba(31,119,180,0.3)\",\"x\":[-25.0171833347851,-24.9192687229073,-24.8213541110294,-24.7234394991516,-24.6255248872738,-24.5276102753959,-24.4296956635181,-24.3317810516403,-24.2338664397625,-24.1359518278846,-24.0380372160068,-23.940122604129,-23.8422079922511,-23.7442933803733,-23.6463787684955,-23.5484641566177,-23.4505495447398,-23.352634932862,-23.2547203209842,-23.1568057091063,-23.0588910972285,-22.9609764853507,-22.8630618734729,-22.765147261595,-22.6672326497172,-22.5693180378394,-22.4714034259616,-22.3734888140837,-22.2755742022059,-22.1776595903281,-22.0797449784502,-21.9818303665724,-21.8839157546946,-21.7860011428168,-21.6880865309389,-21.5901719190611,-21.4922573071833,-21.3943426953054,-21.2964280834276,-21.1985134715498,-21.100598859672,-21.0026842477941,-20.9047696359163,-20.8068550240385,-20.7089404121606,-20.6110258002828,-20.513111188405,-20.4151965765272,-20.3172819646493,-20.2193673527715,-20.1214527408937,-20.0235381290159,-19.925623517138,-19.8277089052602,-19.7297942933824,-19.6318796815045,-19.5339650696267,-19.4360504577489,-19.3381358458711,-19.2402212339932,-19.1423066221154,-19.0443920102376,-18.9464773983597,-18.8485627864819,-18.7506481746041,-18.6527335627263,-18.5548189508484,-18.4569043389706,-18.3589897270928,-18.2610751152149,-18.1631605033371,-18.0652458914593,-17.9673312795815,-17.8694166677036,-17.7715020558258,-17.673587443948,-17.5756728320702,-17.4777582201923,-17.3798436083145,-17.2819289964367,-17.1840143845588,-17.086099772681,-16.9881851608032,-16.8902705489254,-16.7923559370475,-16.6944413251697,-16.5965267132919,-16.498612101414,-16.4006974895362,-16.3027828776584,-16.2048682657806,-16.1069536539027,-16.0090390420249,-15.9111244301471,-15.8132098182692,-15.7152952063914,-15.6173805945136,-15.5194659826358,-15.4215513707579,-15.3236367588801,-15.2257221470023,-15.1278075351245,-15.0298929232466,-14.9319783113688,-14.834063699491,-14.7361490876131,-14.6382344757353,-14.5403198638575,-14.4424052519797,-14.3444906401018,-14.246576028224,-14.1486614163462,-14.0507468044683,-13.9528321925905,-13.8549175807127,-13.7570029688349,-13.659088356957,-13.5611737450792,-13.4632591332014,-13.3653445213235,-13.2674299094457,-13.1695152975679,-13.0716006856901,-12.9736860738122,-12.8757714619344,-12.7778568500566,-12.6799422381787,-12.5820276263009,-12.4841130144231,-12.3861984025453,-12.2882837906674,-12.1903691787896,-12.0924545669118,-11.994539955034,-11.8966253431561,-11.7987107312783,-11.7007961194005,-11.6028815075226,-11.5049668956448,-11.407052283767,-11.3091376718892,-11.2112230600113,-11.1133084481335,-11.0153938362557,-10.9174792243778,-10.8195646125,-10.7216500006222,-10.6237353887444,-10.5258207768665,-10.4279061649887,-10.3299915531109,-10.232076941233,-10.1341623293552,-10.0362477174774,-9.93833310559956,-9.84041849372174,-9.74250388184391,-9.64458926996608,-9.54667465808825,-9.44876004621042,-9.3508454343326,-9.25293082245477,-9.15501621057694,-9.05710159869911,-8.95918698682128,-8.86127237494346,-8.76335776306563,-8.6654431511878,-8.56752853930997,-8.46961392743214,-8.37169931555432,-8.27378470367649,-8.17587009179866,-8.07795547992083,-7.980040868043,-7.88212625616518,-7.78421164428735,-7.68629703240952,-7.58838242053169,-7.49046780865386,-7.39255319677603,-7.29463858489821,-7.19672397302038,-7.09880936114255,-7.00089474926472,-6.90298013738689,-6.80506552550907,-6.70715091363124,-6.60923630175341,-6.51132168987558,-6.41340707799775,-6.31549246611993,-6.2175778542421,-6.11966324236427,-6.02174863048644,-5.92383401860862,-5.82591940673079,-5.72800479485296,-5.63009018297513,-5.5321755710973,-5.43426095921948,-5.33634634734165,-5.23843173546382,-5.14051712358599,-5.04260251170816,-4.94468789983033,-4.84677328795251,-4.74885867607468,-4.65094406419685,-4.55302945231902,-4.45511484044119,-4.35720022856336,-4.25928561668554,-4.16137100480771,-4.06345639292988,-3.96554178105205,-3.86762716917423,-3.7697125572964,-3.67179794541857,-3.57388333354074,-3.47596872166291,-3.37805410978509,-3.28013949790726,-3.18222488602943,-3.0843102741516,-2.98639566227378,-2.88848105039595,-2.79056643851812,-2.69265182664029,-2.59473721476246,-2.49682260288463,-2.3989079910068,-2.30099337912898,-2.20307876725115,-2.10516415537332,-2.00724954349549,-1.90933493161766,-1.81142031973984,-1.71350570786201,-1.61559109598418,-1.51767648410635,-1.41976187222852,-1.3218472603507,-1.22393264847287,-1.12601803659504,-1.02810342471721,-0.930188812839386,-0.832274200961557,-0.734359589083731,-0.636444977205901,-0.538530365328072,-0.440615753450246,-0.342701141572416,-0.24478652969459,-0.14687191781676,-0.0489573059389343,0.0489573059388952,0.146871917816725,0.244786529694551,0.34270114157238,0.440615753450206,0.538530365328036,0.636444977205862,0.734359589083692,0.832274200961521,0.930188812839347,1.02810342471718,1.126018036595,1.22393264847283,1.32184726035066,1.41976187222849,1.51767648410631,1.61559109598414,1.71350570786197,1.8114203197398,1.90933493161763,2.00724954349545,2.10516415537328,2.20307876725111,2.30099337912894,2.39890799100677,2.4968226028846,2.59473721476243,2.69265182664025,2.79056643851808,2.88848105039591,2.98639566227374,3.08431027415157,3.18222488602939,3.28013949790722,3.37805410978505,3.47596872166288,3.5738833335407,3.67179794541853,3.76971255729636,3.86762716917419,3.96554178105202,4.06345639292984,4.16137100480767,4.2592856166855,4.35720022856333,4.45511484044115,4.55302945231898,4.65094406419681,4.74885867607464,4.84677328795247,4.9446878998303,5.04260251170813,5.14051712358595,5.23843173546378,5.33634634734161,5.43426095921944,5.53217557109727,5.63009018297509,5.72800479485292,5.82591940673075,5.92383401860858,6.02174863048641,6.11966324236423,6.21757785424206,6.31549246611989,6.41340707799772,6.51132168987554,6.60923630175337,6.7071509136312,6.80506552550903,6.90298013738686,7.00089474926469,7.09880936114251,7.19672397302034,7.29463858489817,7.392553196776,7.49046780865383,7.58838242053165,7.68629703240948,7.78421164428731,7.88212625616514,7.98004086804296,8.0779554799208,8.17587009179862,8.27378470367645,8.37169931555428,8.46961392743211,8.56752853930993,8.66544315118776,8.76335776306559,8.86127237494342,8.95918698682124,9.05710159869908,9.1550162105769,9.25293082245473,9.35084543433256,9.44876004621039,9.54667465808821,9.64458926996604,9.74250388184387,9.8404184937217,9.93833310559953,10.0362477174774,10.1341623293552,10.232076941233,10.3299915531108,10.4279061649887,10.5258207768665,10.6237353887443,10.7216500006221,10.8195646125,10.9174792243778,11.0153938362556,11.1133084481335,11.2112230600113,11.3091376718891,11.4070522837669,11.5049668956448,11.6028815075226,11.7007961194004,11.7987107312783,11.8966253431561,11.9945399550339,12.0924545669117,12.1903691787896,12.2882837906674,12.3861984025452,12.4841130144231,12.5820276263009,12.6799422381787,12.7778568500565,12.8757714619344,12.9736860738122,13.07160068569,13.1695152975678,13.2674299094457,13.3653445213235,13.4632591332013,13.5611737450792,13.659088356957,13.7570029688348,13.8549175807126,13.9528321925905,14.0507468044683,14.1486614163461,14.246576028224,14.3444906401018,14.4424052519796,14.5403198638574,14.6382344757353,14.7361490876131,14.8340636994909,14.9319783113688,15.0298929232466,15.1278075351244,15.2257221470022,15.3236367588801,15.4215513707579,15.5194659826357,15.6173805945136,15.7152952063914,15.8132098182692,15.911124430147,16.0090390420249,16.1069536539027,16.2048682657805,16.3027828776584,16.4006974895362,16.498612101414,16.5965267132918,16.6944413251697,16.7923559370475,16.8902705489253,16.9881851608031,17.086099772681,17.1840143845588,17.2819289964366,17.3798436083145,17.4777582201923,17.5756728320701,17.6735874439479,17.7715020558258,17.8694166677036,17.9673312795814,18.0652458914593,18.1631605033371,18.2610751152149,18.3589897270927,18.4569043389706,18.5548189508484,18.6527335627262,18.7506481746041,18.8485627864819,18.9464773983597,19.0443920102375,19.1423066221154,19.2402212339932,19.338135845871,19.4360504577488,19.5339650696267,19.6318796815045,19.7297942933823,19.8277089052602,19.925623517138,20.0235381290158,20.1214527408936,20.2193673527715,20.3172819646493,20.4151965765271,20.513111188405,20.6110258002828,20.7089404121606,20.8068550240384,20.9047696359163,21.0026842477941,21.1005988596719,21.1985134715498,21.2964280834276,21.3943426953054,21.4922573071832,21.5901719190611,21.6880865309389,21.7860011428167,21.8839157546945,21.9818303665724,22.0797449784502,22.177659590328,22.2755742022059,22.3734888140837,22.4714034259615,22.5693180378393,22.6672326497172,22.765147261595,22.8630618734728,22.9609764853507,23.0588910972285,23.1568057091063,23.2547203209841,23.352634932862,23.4505495447398,23.5484641566176,23.6463787684955,23.7442933803733,23.8422079922511,23.9401226041289,24.0380372160068,24.1359518278846,24.2338664397624,24.3317810516402,24.4296956635181,24.5276102753959,24.6255248872737,24.7234394991516,24.8213541110294,24.9192687229072,25.017183334785],\"y\":[2.06955737196011e-005,3.23061247773194e-005,4.91947537060029e-005,7.31222550579724e-005,0.000106719489290462,0.00015290403151679,0.00021342606467635,0.000290351639864336,0.000385163324332867,0.000498424283752057,0.000629454159181415,0.000776061949487869,0.00093438330692436,0.00109886635964528,0.00126244096915672,0.00141586130772811,0.00154871631190228,0.00165347210058645,0.00172348304683875,0.00175421089748478,0.00174367196493334,0.00169262668096046,0.00160449203117779,0.00148499015825231,0.00134157683442967,0.00118271914276957,0.00101726325561469,0.000854585501895104,0.000701334305336774,0.000562152702762914,0.000439964894490095,0.000336093591349104,0.000250496487376131,0.000182073867944786,0.000129001803508947,8.90518184699872e-005,5.98673501139979e-005,3.95679568252937e-005,2.57073473302907e-005,1.62968147926288e-005,1.00736535011971e-005,6.06772599607385e-006,3.55919671435195e-006,2.03197880329948e-006,1.12851183652692e-006,6.09420469475384e-007,3.19875829514764e-007,1.63137126555341e-007,8.33583418119213e-008,4.22039954812142e-008,2.07552060725621e-008,9.90910269779122e-009,4.59087012893134e-009,2.06335407919104e-009,8.99438994912609e-010,3.80206099119251e-010,1.55836567477554e-010,6.19294100478515e-011,2.38623318067994e-011,9.53092523508038e-012,3.80723898433872e-012,1.51142579529024e-012,7.15864947171053e-013,6.99788011339329e-013,1.44957628671527e-012,3.65862065377582e-012,9.24886668208054e-012,2.27091641039741e-011,5.39232357085663e-011,1.23714445006689e-010,2.91151927960235e-010,6.81326735436895e-010,1.54769194601255e-009,3.41338298740281e-009,7.3106488550382e-009,1.52097197196678e-008,3.07492366776575e-008,6.04342419047732e-008,1.15529892257966e-007,2.14950651218858e-007,3.89523634646511e-007,7.07483449219325e-007,1.2620080215861e-006,2.1911867282713e-006,3.70480147500682e-006,6.10289983479479e-006,9.8000936079774e-006,1.53497344123659e-005,2.34647178218689e-005,3.50306819111707e-005,5.11065401068595e-005,7.29067307680796e-005,0.000102536795130304,0.000141052351967504,0.000189477151195222,0.000248688298831659,0.000319096855154546,0.000400498776836296,0.000491955835197254,0.000591725808352608,0.000697258789996874,0.000805271920814461,0.000911908323251251,0.00101197441797543,0.00110125973516906,0.00117635210306145,0.00123461669853079,0.00127455824662633,0.00129599395722541,0.00130012514374062,0.00128950201768339,0.00126788461368129,0.00124001045657778,0.00121128604299055,0.00118858389190032,0.00117763494236229,0.00118309447245815,0.00120867663968399,0.00125686453039771,0.00132878120000918,0.00142416925901733,0.00154148489723924,0.00167810419886089,0.00183063025664422,0.00199527917548621,0.00216880012938695,0.00234699997015468,0.00252788949702933,0.0027106218005473,0.00289538116074759,0.00308317034699965,0.00327547809555748,0.00347387904373496,0.00367962889415686,0.00389332039160227,0.00411465984671168,0.00434281814244112,0.00457469805739361,0.00480775554423905,0.00503957679139882,0.00526822043967031,0.00549246732730916,0.00571193692706976,0.00592706099953357,0.0061389263012408,0.0063490166168249,0.00655890283516904,0.00677012144909459,0.00698324540938608,0.00719814089975069,0.0074140480069787,0.00762974399166686,0.0078437772756494,0.00805472695753846,0.00826143577464723,0.00846316311645326,0.00865960972287881,0.00885072920156837,0.00903587408058361,0.0092145844773497,0.00938446495194821,0.00954133056513521,0.00967906189252601,0.00978977701188496,0.00986433730223844,0.00989315153185352,0.00986719317765414,0.00977910402311226,0.00962327121924465,0.00939346131181693,0.00910046242382706,0.00875191850014144,0.00835797683562895,0.00793020462942509,0.00748045137098149,0.00701981064459313,0.00655780644312978,0.0061018884220809,0.00565727206319903,0.00522741906996239,0.0048150805635678,0.00441924497978426,0.00404012200890061,0.00367818006334522,0.00333432965823236,0.00300992430702565,0.00270661134359841,0.00242608105707311,0.00216977073769905,0.00193858099283448,0.00173325217648952,0.00155429175421573,0.0013976141522347,0.00126075011097858,0.00114091679141068,0.00103530517164856,0.000941351207793856,0.00085696090224246,0.000780667099755034,0.000711704875603403,0.000650002221223173,0.000596360661396367,0.00055244036420409,0.000518889785101089,0.000496996247276379,0.000487940447742048,0.000492757541027249,0.000512365520805772,0.000547653491260924,0.000599615220667455,0.000669508584248347,0.000759019566278399,0.000871304049603565,0.00101104904413271,0.00118068281431567,0.00138522466259862,0.00163070619836308,0.00192433964986035,0.00227475833142264,0.00269232468376207,0.00318948268808046,0.00378111296724416,0.00448483232166776,0.00532762445808041,0.00634242830667116,0.00754632219071464,0.00896717632402742,0.0106329880547668,0.01257068500702,0.0148050053231384,0.0173576381676518,0.0202468108727722,0.0234874953010672,0.0270923744014364,0.0310916106253922,0.0355121427304819,0.0403537885698626,0.0456534318617253,0.0514632236931918,0.0578523768700782,0.0649067792847402,0.0727256896914701,0.0814149274950318,0.0910762275993998,0.101792804337148,0.113665926590848,0.126676107692619,0.140631307744174,0.155310685276851,0.170395828647364,0.185479679423148,0.200086240853808,0.213700014143241,0.22580280867193,0.23591445686237,0.243633133027778,0.248512997927096,0.25041407551533,0.249546307869034,0.246100750940866,0.240372854037536,0.23272894441394,0.223570463757934,0.213300036803983,0.202292744507263,0.190874991573912,0.179312197484724,0.167818260631557,0.156547088879272,0.145571716608854,0.134939110822452,0.124678495582323,0.114810582897277,0.10535397318603,0.0963286981401341,0.0877572052172826,0.0796633151701788,0.0720698219015798,0.0650305964012625,0.0585459112098749,0.0525899202071776,0.047150019402232,0.0422040993249153,0.0377223149316084,0.0336694695357989,0.0300076893827272,0.0266990641752936,0.0237079590295139,0.0210027616502555,0.0185737014744355,0.0163890403599179,0.0144233816630439,0.0126646640226733,0.0111025116099675,0.00972707459359505,0.00852812267618345,0.00749446971105809,0.00661375799727771,0.00587258647723287,0.00525693039587758,0.00476013191621235,0.00436266431968595,0.00405001413856678,0.00381410757402568,0.00364987592559362,0.00355550910183584,0.00353252352909492,0.0035856434763779,0.0037225003359184,0.00395315922620993,0.0042894870042078,0.00475535955534938,0.00535931251576937,0.00610907515946785,0.00701365153297688,0.00807902446698809,0.00930764683994713,0.0106982016094963,0.0122456574817916,0.0139416171453197,0.0157749218975384,0.0177324425207856,0.0198080005198041,0.0219782275535654,0.0242265788278502,0.0265397213342573,0.0289045451939025,0.0313075925155216,0.0337343421894232,0.0361684759622356,0.0385912490694022,0.0409810712470672,0.0433133728009692,0.0455495530356475,0.0476616339616122,0.0496200381862523,0.0513934925219617,0.0529517626955719,0.0542667170481482,0.0553134226308393,0.0560712667480216,0.0565250830869356,0.0566662397750261,0.0564936195393446,0.0559866846903058,0.0551915150440039,0.05414017995587,0.0528675740459741,0.0514142047067249,0.0498243074158752,0.0481437633018325,0.0464179776727052,0.0446898680760837,0.0429980858391737,0.041375558840158,0.0398602870572617,0.0384617957586301,0.0371865669908265,0.0360343171638958,0.0349976612359605,0.034062964941666,0.0332115077355978,0.0324209270900769,0.0316668818458894,0.0309248370676828,0.0301718397284665,0.0293829597180958,0.0285459852931976,0.0276532976073514,0.0267023485878857,0.0256952194710891,0.0246377844405772,0.0235387320956578,0.0224085626477225,0.0212586552804635,0.0201004698256782,0.0189449333110791,0.0178044430770961,0.0166866224333908,0.0155978353606925,0.0145429162688048,0.0135252945878743,0.0125472147406738,0.0116100303428236,0.0107145378026027,0.00986130371774141,0.00905093463897851,0.00828453640512423,0.00756767662568862,0.00689673914030111,0.00627225831815783,0.00569400841929431,0.00516077823037218,0.00467029759842319,0.0042193418036737,0.00380400808735325,0.00342012885637541,0.00306376093151344,0.00273193431981874,0.00242441724378296,0.00213854769260169,0.00187527027371604,0.00163636200527308,0.00142396780540396,0.00124009545265423,0.00108613872261998,0.000962487659314878,0.000868270332081233,0.00080125252072867,0.000758213704125734,0.000735178331022902,0.000724457405674239,0.000720550289453499,0.000718322005265154,0.000713350899511145,0.000702190103807553,0.000682527415779108,0.000653237940982611,0.000614333128734932,0.000566818325806886,0.000512386037017179,0.000453437606315375,0.000393096352908604,0.000333720995750489,0.000277337914221423,0.0002255293709291,0.00017938170985834,0.000139487117686376,0.000105988794854591,7.865708885733e-005,5.69832699820399e-005,4.03899538293604e-005,2.82110136554748e-005,1.92642308793898e-005,1.28531408762407e-005,8.37375823228208e-006,5.32370999716467e-006,3.30086490519412e-006,1.99484796567126e-006,1.1744281637308e-006,6.7322878309622e-007,3.75598351434918e-007,2.0617777468594e-007,1.13267061146247e-007,6.05967939367336e-008,3.15474970972482e-008,1.59728585453211e-008,7.86111586368557e-009,3.75937664108106e-009,1.74707971189942e-009,7.90789376434142e-010,3.53775652097883e-010,1.69331167993552e-010,1.19403715264799e-010,1.75571164717848e-010,3.85291165895869e-010,9.17061528004844e-010,2.16044056161617e-009,4.95272600153615e-009,1.10183358459409e-008,2.3781934151529e-008,4.98125246321773e-008,1.01289599114849e-007,2.00060023523425e-007,3.91529104759401e-007,7.67701991172465e-007,1.46260912683827e-006,2.70842840768869e-006,4.87674912789811e-006,8.54207211440132e-006,1.4562542390502e-005,2.41767684027344e-005,3.91123555021015e-005,6.16976335923892e-005,9.49630963802584e-005,0.000143681640272954,0.000213724364327052,0.000309604328420213,0.000436977283065842,0.000601191569700583,0.000806624619235177,0.00105591574677298,0.00134916648662719,0.00168320233280396,0.00205100520454353,0.00244143181347023,0.00283852594264193,0.00321978440262639,0.00356397637980122,0.00385078087482314,0.00406230403430253,0.00418481271583862,0.00421010615396335,0.00413635931241414,0.00396833304140981,0.00371691914856888,0.00339806713855171,0.00302985832598086,0.0026372792631537,0.00224251993662349,0.00186254867877567,0.00151068998203981,0.00119621828100886,0.000924391978402235,0.000696843935677184,0.000512222555225481,0.000366969675642035,0.000256126774298421,0.000175493412140091,0.00011806740889509,7.75346994660416e-005,4.96693769273646e-005],\"type\":\"scatter\",\"mode\":\"lines\",\"fill\":\"tozeroy\",\"name\":\"Post-follow\",\"marker\":{\"color\":\"rgba(31,119,180,0.3)\",\"line\":{\"color\":\"rgba(31,119,180,1)\"}},\"error_y\":{\"color\":\"rgba(31,119,180,0.3)\"},\"error_x\":{\"color\":\"rgba(31,119,180,0.3)\"},\"line\":{\"color\":\"rgba(31,119,180,1)\"},\"xaxis\":\"x\",\"yaxis\":\"y\",\"frame\":null},{\"fillcolor\":\"rgba(255,127,14,0.3)\",\"x\":[-26.177501706217,-26.0750457308502,-25.9725897554834,-25.8701337801166,-25.7676778047498,-25.665221829383,-25.5627658540162,-25.4603098786494,-25.3578539032826,-25.2553979279158,-25.152941952549,-25.0504859771822,-24.9480300018154,-24.8455740264486,-24.7431180510818,-24.640662075715,-24.5382061003482,-24.4357501249814,-24.3332941496146,-24.2308381742479,-24.1283821988811,-24.0259262235143,-23.9234702481475,-23.8210142727807,-23.7185582974139,-23.6161023220471,-23.5136463466803,-23.4111903713135,-23.3087343959467,-23.2062784205799,-23.1038224452131,-23.0013664698463,-22.8989104944795,-22.7964545191127,-22.6939985437459,-22.5915425683791,-22.4890865930123,-22.3866306176455,-22.2841746422787,-22.1817186669119,-22.0792626915451,-21.9768067161783,-21.8743507408115,-21.7718947654447,-21.6694387900779,-21.5669828147111,-21.4645268393443,-21.3620708639775,-21.2596148886107,-21.1571589132439,-21.0547029378771,-20.9522469625103,-20.8497909871435,-20.7473350117767,-20.6448790364099,-20.5424230610431,-20.4399670856763,-20.3375111103095,-20.2350551349427,-20.1325991595759,-20.0301431842091,-19.9276872088423,-19.8252312334755,-19.7227752581087,-19.6203192827419,-19.5178633073751,-19.4154073320083,-19.3129513566415,-19.2104953812747,-19.1080394059079,-19.0055834305411,-18.9031274551743,-18.8006714798075,-18.6982155044407,-18.5957595290739,-18.4933035537071,-18.3908475783403,-18.2883916029735,-18.1859356276067,-18.0834796522399,-17.9810236768731,-17.8785677015063,-17.7761117261395,-17.6736557507727,-17.5711997754059,-17.4687438000391,-17.3662878246723,-17.2638318493055,-17.1613758739387,-17.058919898572,-16.9564639232052,-16.8540079478384,-16.7515519724716,-16.6490959971048,-16.546640021738,-16.4441840463712,-16.3417280710044,-16.2392720956376,-16.1368161202708,-16.034360144904,-15.9319041695372,-15.8294481941704,-15.7269922188036,-15.6245362434368,-15.52208026807,-15.4196242927032,-15.3171683173364,-15.2147123419696,-15.1122563666028,-15.009800391236,-14.9073444158692,-14.8048884405024,-14.7024324651356,-14.5999764897688,-14.497520514402,-14.3950645390352,-14.2926085636684,-14.1901525883016,-14.0876966129348,-13.985240637568,-13.8827846622012,-13.7803286868344,-13.6778727114676,-13.5754167361008,-13.472960760734,-13.3705047853672,-13.2680488100004,-13.1655928346336,-13.0631368592668,-12.9606808839,-12.8582249085332,-12.7557689331664,-12.6533129577996,-12.5508569824328,-12.448401007066,-12.3459450316992,-12.2434890563324,-12.1410330809656,-12.0385771055988,-11.936121130232,-11.8336651548652,-11.7312091794984,-11.6287532041316,-11.5262972287648,-11.423841253398,-11.3213852780312,-11.2189293026644,-11.1164733272976,-11.0140173519308,-10.911561376564,-10.8091054011972,-10.7066494258304,-10.6041934504636,-10.5017374750968,-10.39928149973,-10.2968255243632,-10.1943695489964,-10.0919135736297,-9.98945759826285,-9.88700162289605,-9.78454564752925,-9.68208967216245,-9.57963369679566,-9.47717772142886,-9.37472174606206,-9.27226577069526,-9.16980979532846,-9.06735381996166,-8.96489784459487,-8.86244186922807,-8.75998589386127,-8.65752991849447,-8.55507394312767,-8.45261796776087,-8.35016199239407,-8.24770601702728,-8.14525004166047,-8.04279406629368,-7.94033809092688,-7.83788211556008,-7.73542614019328,-7.63297016482649,-7.53051418945968,-7.42805821409289,-7.32560223872609,-7.22314626335929,-7.12069028799249,-7.01823431262569,-6.91577833725889,-6.81332236189209,-6.7108663865253,-6.6084104111585,-6.5059544357917,-6.4034984604249,-6.3010424850581,-6.1985865096913,-6.09613053432451,-5.99367455895771,-5.89121858359091,-5.78876260822411,-5.68630663285731,-5.58385065749051,-5.48139468212371,-5.37893870675692,-5.27648273139012,-5.17402675602332,-5.07157078065652,-4.96911480528972,-4.86665882992292,-4.76420285455612,-4.66174687918933,-4.55929090382253,-4.45683492845573,-4.35437895308893,-4.25192297772213,-4.14946700235533,-4.04701102698854,-3.94455505162174,-3.84209907625494,-3.73964310088814,-3.63718712552134,-3.53473115015454,-3.43227517478774,-3.32981919942095,-3.22736322405414,-3.12490724868735,-3.02245127332055,-2.91999529795375,-2.81753932258695,-2.71508334722015,-2.61262737185335,-2.51017139648656,-2.40771542111976,-2.30525944575296,-2.20280347038616,-2.10034749501936,-1.99789151965256,-1.89543554428576,-1.79297956891897,-1.69052359355217,-1.58806761818537,-1.48561164281857,-1.38315566745177,-1.28069969208497,-1.17824371671817,-1.07578774135138,-0.973331765984579,-0.870875790617781,-0.768419815250979,-0.665963839884181,-0.563507864517383,-0.461051889150585,-0.358595913783788,-0.25613993841699,-0.153683963050188,-0.0512279876833901,0.0512279876834079,0.153683963050206,0.256139938417004,0.358595913783805,0.461051889150603,0.563507864517401,0.665963839884199,0.768419815250997,0.870875790617795,0.973331765984597,1.07578774135139,1.17824371671819,1.28069969208499,1.38315566745179,1.48561164281859,1.58806761818539,1.69052359355219,1.79297956891898,1.89543554428578,1.99789151965258,2.10034749501938,2.20280347038618,2.30525944575298,2.40771542111978,2.51017139648657,2.61262737185337,2.71508334722017,2.81753932258697,2.91999529795377,3.02245127332057,3.12490724868736,3.22736322405416,3.32981919942096,3.43227517478776,3.53473115015456,3.63718712552136,3.73964310088816,3.84209907625495,3.94455505162175,4.04701102698855,4.14946700235535,4.25192297772215,4.35437895308895,4.45683492845574,4.55929090382254,4.66174687918934,4.76420285455614,4.86665882992294,4.96911480528974,5.07157078065654,5.17402675602333,5.27648273139014,5.37893870675693,5.48139468212373,5.58385065749053,5.68630663285733,5.78876260822413,5.89121858359093,5.99367455895772,6.09613053432452,6.19858650969132,6.30104248505812,6.40349846042492,6.50595443579171,6.60841041115852,6.71086638652531,6.81332236189211,6.91577833725891,7.01823431262571,7.12069028799251,7.2231462633593,7.32560223872611,7.42805821409291,7.5305141894597,7.6329701648265,7.7354261401933,7.8378821155601,7.94033809092689,8.04279406629369,8.1452500416605,8.24770601702729,8.35016199239409,8.45261796776089,8.55507394312769,8.65752991849449,8.75998589386128,8.86244186922809,8.96489784459488,9.06735381996168,9.16980979532848,9.27226577069528,9.37472174606208,9.47717772142887,9.57963369679567,9.68208967216247,9.78454564752927,9.88700162289607,9.98945759826287,10.0919135736297,10.1943695489965,10.2968255243633,10.3992814997301,10.5017374750969,10.6041934504637,10.7066494258305,10.8091054011973,10.9115613765641,11.0140173519309,11.1164733272977,11.2189293026644,11.3213852780313,11.423841253398,11.5262972287648,11.6287532041316,11.7312091794984,11.8336651548652,11.936121130232,12.0385771055988,12.1410330809656,12.2434890563324,12.3459450316992,12.448401007066,12.5508569824328,12.6533129577996,12.7557689331664,12.8582249085332,12.9606808839,13.0631368592668,13.1655928346336,13.2680488100004,13.3705047853672,13.472960760734,13.5754167361008,13.6778727114676,13.7803286868344,13.8827846622012,13.985240637568,14.0876966129348,14.1901525883016,14.2926085636684,14.3950645390352,14.497520514402,14.5999764897688,14.7024324651356,14.8048884405024,14.9073444158692,15.009800391236,15.1122563666028,15.2147123419696,15.3171683173364,15.4196242927032,15.52208026807,15.6245362434368,15.7269922188036,15.8294481941704,15.9319041695372,16.034360144904,16.1368161202708,16.2392720956376,16.3417280710044,16.4441840463712,16.546640021738,16.6490959971048,16.7515519724716,16.8540079478384,16.9564639232052,17.058919898572,17.1613758739388,17.2638318493056,17.3662878246724,17.4687438000392,17.571199775406,17.6736557507728,17.7761117261396,17.8785677015064,17.9810236768732,18.08347965224,18.1859356276068,18.2883916029735,18.3908475783403,18.4933035537072,18.5957595290739,18.6982155044407,18.8006714798075,18.9031274551743,19.0055834305411,19.1080394059079,19.2104953812747,19.3129513566415,19.4154073320083,19.5178633073751,19.6203192827419,19.7227752581087,19.8252312334755,19.9276872088423,20.0301431842091,20.1325991595759,20.2350551349427,20.3375111103095,20.4399670856763,20.5424230610431,20.6448790364099,20.7473350117767,20.8497909871435,20.9522469625103,21.0547029378771,21.1571589132439,21.2596148886107,21.3620708639775,21.4645268393443,21.5669828147111,21.6694387900779,21.7718947654447,21.8743507408115,21.9768067161783,22.0792626915451,22.1817186669119,22.2841746422787,22.3866306176455,22.4890865930123,22.5915425683791,22.6939985437459,22.7964545191127,22.8989104944795,23.0013664698463,23.1038224452131,23.2062784205799,23.3087343959467,23.4111903713135,23.5136463466803,23.6161023220471,23.7185582974139,23.8210142727807,23.9234702481475,24.0259262235143,24.1283821988811,24.2308381742479,24.3332941496147,24.4357501249815,24.5382061003483,24.6406620757151,24.7431180510819,24.8455740264487,24.9480300018155,25.0504859771823,25.1529419525491,25.2553979279159,25.3578539032827,25.4603098786494,25.5627658540162,25.665221829383,25.7676778047498,25.8701337801166,25.9725897554834,26.0750457308502,26.177501706217],\"y\":[4.96785802168463e-006,6.65706867306402e-006,8.81829379062532e-006,1.16450303780852e-005,1.52494883020379e-005,1.97331742822869e-005,2.52399885505976e-005,3.19199139269272e-005,3.99253631426476e-005,4.94068086075506e-005,6.05875522414219e-005,7.37882543292371e-005,8.88641531499424e-005,0.00010585607432784,0.000124757696165281,0.000145508862846638,0.000167989776833604,0.00019201621021785,0.000217452469452812,0.000243713382157731,0.000270315611122771,0.000296771071408406,0.000322552950754928,0.000347108999260234,0.000369876387558498,0.000390103560455642,0.000406959446098017,0.000420300675782567,0.000429782127618667,0.000435152228231977,0.000436261379773107,0.00043306754760817,0.000425638894601461,0.000413557056521961,0.000397823314504767,0.000378940295578198,0.000357399004542377,0.00033373157654829,0.000308494004368511,0.000282248873159275,0.000255566429103052,0.000229119901903702,0.000203381948460852,0.000178722328222195,0.000155444608965234,0.000133784784751518,0.000113911807047832,9.59338740151786e-005,8.02330582203938e-005,6.64185689618167e-005,5.44076677536873e-005,4.40900046171511e-005,3.53348463216314e-005,2.79978220777278e-005,2.19271358531151e-005,1.70639141129695e-005,1.3188501921068e-005,1.00795293349685e-005,7.61492831610153e-006,5.68507911522843e-006,4.19307833413048e-006,3.05464126474201e-006,2.20219491019531e-006,1.59325763374899e-006,1.1399247489943e-006,8.07469221701569e-007,5.67990277450155e-007,3.99506527364304e-007,2.85130568972517e-007,2.12329668288474e-007,1.75567496211679e-007,1.67121864834663e-007,1.84266207205201e-007,2.28653732747323e-007,3.04437598040694e-007,4.18410270938703e-007,5.80218355949472e-007,8.06076741946996e-007,1.12720685528402e-006,1.55934976831759e-006,2.13226319102184e-006,2.88141945062091e-006,3.84839510661262e-006,5.08116564771205e-006,6.63428942593049e-006,8.63740204316567e-006,1.11399233459764e-005,1.4202270793669e-005,1.79036207447751e-005,2.23238096750263e-005,2.75410537919119e-005,3.36293843968281e-005,4.0716644821104e-005,4.89310847446174e-005,5.8183139717373e-005,6.8477873669511e-005,7.97970928085934e-005,9.20979952756299e-005,0.000105312586057919,0.000119347917888438,0.00013416827312194,0.000149498932870031,0.00016516903599581,0.000181022878199006,0.00019691391504131,0.000212713667685037,0.000228320937153686,0.000243651377535189,0.000258708588065879,0.000273614769100668,0.000288535464434446,0.000303708449587614,0.000319444352880264,0.000336125543296771,0.000354203259604876,0.000374696118161156,0.000397963662304907,0.000424637924117046,0.000455370605656902,0.000490815296428026,0.000531613172277166,0.000578378422982636,0.000632399651993656,0.000694209506194809,0.000763617373789586,0.000840888938440774,0.000926186388677272,0.00101956508825181,0.00112097302965847,0.00123038585802212,0.00134857078546335,0.00147382804123039,0.00160572357705388,0.0017438084460797,0.00188764454912666,0.0020368305940844,0.0021910277816114,0.00235053940881218,0.00251500427122489,0.00268422169887007,0.00285842671513178,0.00303796960746576,0.0032232940196169,0.0034149081154582,0.00361362541203391,0.00382087498143444,0.00403597080154373,0.00425902967857294,0.00448992156871224,0.00472822943176105,0.00497321628392225,0.00522380011746761,0.00547873270630765,0.00573513426244645,0.00599043639071457,0.00624199156517021,0.00648695884781909,0.00672236642252257,0.00694517858482338,0.0071512701706534,0.00733556742462709,0.00749751604528498,0.00763485417926585,0.00774565953139017,0.00782837864303356,0.00788184684633595,0.00790529884053335,0.0078936081015771,0.00785106407514407,0.00777908212604809,0.00767858989460225,0.00755075941121143,0.00739697055220965,0.00721877564360884,0.0070163185421706,0.00679137541891795,0.00654829559600625,0.00628905499620634,0.00601567134540537,0.00573020028093559,0.00543473283019946,0.00513139384276953,0.00482188789840058,0.00450981914332115,0.00419742658979297,0.00388690923747448,0.00358043761451425,0.00328013257696433,0.00298804219730909,0.00270731511087566,0.0024402037335342,0.00218730543943759,0.00194992886079635,0.00172917108230989,0.00152591037213248,0.00134080323501017,0.00117454330275367,0.00103027047394749,0.000904702516757708,0.000797570222485384,0.000708486881948122,0.000636978322419115,0.000582514591214206,0.000544543171975197,0.000524294026977227,0.000520456249499271,0.000531692382808359,0.000557946043949214,0.000599402812078389,0.000656540297014043,0.000730181700430699,0.000822221910061681,0.000937421082934434,0.00107592414689794,0.0012413067292022,0.00143799641353123,0.00167137840484044,0.00194790772386155,0.00227522784759869,0.00267246244048131,0.00314880913310422,0.00371493180341168,0.00438646571904012,0.00518114533935505,0.00611892762124672,0.00722210016574815,0.00852731018025378,0.0100884680720925,0.0119121556211001,0.0140322019340794,0.0164842353473135,0.0193052359311164,0.0225329732853239,0.0262053251580926,0.0304410385162465,0.0352208615974293,0.0405576258404131,0.0464717910768728,0.0529755758919742,0.0600713911733009,0.067750306967567,0.0760271235887487,0.0848659902513662,0.0941394521502365,0.103766062460063,0.11364892313086,0.123676744418886,0.133725337841332,0.143659543054554,0.153253653949471,0.16237172145692,0.170870874165041,0.178612685643365,0.185469546309006,0.191327974397831,0.196091651422933,0.199571223033047,0.201707937933583,0.202599954469227,0.202260957735776,0.200726831675045,0.198053913925197,0.194316845039225,0.189597812912691,0.183889017041581,0.177476351528291,0.170478451637619,0.163013074816092,0.155194739777066,0.147132664803626,0.138929013687265,0.130684171398421,0.12250388606598,0.114456040999754,0.106595928241387,0.0989694133340498,0.0916135281268483,0.0845571549021734,0.0778316725961314,0.0714959169013212,0.0655056250872084,0.0598622879595425,0.0545641531161026,0.049606775872265,0.0449835161513409,0.0406859823201955,0.0367437674056628,0.0331181083761214,0.0297806898460979,0.0267195418683141,0.0239226155101701,0.0213779157361212,0.0190736193974764,0.0170086616869979,0.0151873832527713,0.013568800022517,0.0121432959556931,0.0109019122727799,0.00983638668398104,0.00893918535738992,0.00820352737417863,0.00764576175929024,0.00724163589844852,0.00698214096410337,0.00686406848773829,0.00688480626944698,0.00704225862355054,0.00733475391813313,0.00776996960070846,0.00835255609418485,0.00906581592611852,0.00990811688534308,0.0108773393510651,0.0119707255260152,0.013184735308474,0.0145149103965179,0.0159727575353219,0.017532090121027,0.0191824052120269,0.0209134384343161,0.0227137178996383,0.0245706410295576,0.0264705789730302,0.028399709935809,0.0303375857376221,0.0322657872189093,0.0341685098601387,0.0360302230309514,0.0378358891112839,0.0395711713175427,0.0412220531026808,0.0427568171066164,0.0441804130670033,0.0454842837896687,0.0466612843488244,0.0477056605386664,0.0486130057422392,0.0493801980171657,0.0499900036487997,0.0504463259914537,0.0507608572351484,0.050935204328454,0.0509716431759761,0.0508730556126603,0.0506428793945965,0.0502819827956941,0.049779978563833,0.0491624293827404,0.0484352406754066,0.0476048434246294,0.046678195225889,0.0456627721373062,0.0445665502116809,0.0433903670459684,0.0421508406899009,0.0408613175577275,0.039531201411554,0.0381698515447618,0.036786456237774,0.0353899050635455,0.03398889049222,0.0325936809831902,0.0312114156167349,0.0298477953132003,0.028507649843055,0.027194932606261,0.025912734657391,0.0246633175671026,0.0234532891026277,0.022279550997815,0.0211406708252986,0.0200361494016275,0.0189652470060093,0.0179270802629645,0.0169207121509747,0.0159471609801525,0.0150071001836184,0.0140963723033051,0.0132146972120185,0.0123619892883504,0.0115383406810158,0.0107439970324017,0.00997932650344072,0.00924989661136433,0.0085518212667803,0.00788500038213547,0.00724978729581676,0.00664643384754811,0.00607507363879464,0.00553571052624738,0.00503085126333049,0.00456056596760197,0.00412118709910615,0.00371211589983578,0.0033326613505672,0.00298205051698395,0.0026594376940282,0.00236396117688442,0.00209906347770073,0.00185874980326832,0.0016418915876122,0.00144730450442288,0.00127374873868248,0.00111993044611263,0.000984504578979209,0.000867636978359291,0.000767031904230357,0.00067988129897681,0.000604733673007092,0.000540163558001326,0.000484788820805059,0.000437287762033143,0.000396527844011489,0.000361850412297509,0.000331244482015473,0.000303893776171841,0.000279106672394076,0.000256313802785257,0.000235063242116735,0.000215013416277446,0.000196021491764359,0.000177871909713276,0.000160472917430153,0.000143831492928343,0.000127984013094601,0.000112985086367182,9.8897504235718e-005,8.58258201332359e-005,7.39372696244658e-005,6.31176279700277e-005,5.33732238738107e-005,4.46922922861996e-005,3.7046228096333e-005,3.03914431224225e-005,2.46717515058139e-005,1.9930570297441e-005,1.59884881193655e-005,1.27378465604051e-005,1.01108446284742e-005,8.04728839115896e-006,6.49752573466637e-006,5.42541303111951e-006,4.83986877515053e-006,4.78425263594738e-006,5.25352246574457e-006,6.33481062609939e-006,8.15709380836825e-006,1.08980321604299e-005,1.47914354850867e-005,2.01353360616424e-005,2.7713152161097e-005,3.78913017672741e-005,5.12708178718222e-005,6.86052753132217e-005,9.07629416557085e-005,0.000118727452942936,0.00015359522079223,0.000197357141501757,0.000251988774320563,0.000318018963803388,0.000396813402485767,0.00048967108987451,0.000597768388240731,0.000722098284584393,0.000863405315545395,0.00102520653687587,0.00120406322623278,0.00139900157669052,0.00160850100940845,0.0018304375675851,0.00206207913467275,0.00230009787155233,0.00254023986380422,0.00277644604233494,0.00300358419059562,0.00321659104177731,0.00341046266067788,0.00358040983078924,0.00372201350882331,0.00383075005147663,0.00389760792850726,0.00392635241797538,0.0039163700540965,0.0038680391485722,0.00378270608204503,0.00366263501488287,0.00351093204410089,0.00332888748802629,0.00312398099334181,0.00290297655679398,0.00267093964267527,0.00243284050010453,0.00219342043941915,0.0019570722250749,0.00172814589196028,0.00151190799150208,0.00130957976561934,0.00112281926548717,0.000952704668950253,0.000799777378349221,0.000664094288962896,0.000545287970172547,0.000444661277467751,0.000359328268283639,0.000287279225342184,0.000227159896955252,0.000177598568540505,0.00013724539471831,0.000104805273402763,7.93646441156175e-005,5.99136180575357e-005,4.47107221951502e-005],\"type\":\"scatter\",\"mode\":\"lines\",\"fill\":\"tozeroy\",\"name\":\"Pre-follow\",\"marker\":{\"color\":\"rgba(255,127,14,0.3)\",\"line\":{\"color\":\"rgba(255,127,14,1)\"}},\"error_y\":{\"color\":\"rgba(255,127,14,0.3)\"},\"error_x\":{\"color\":\"rgba(255,127,14,0.3)\"},\"line\":{\"color\":\"rgba(255,127,14,1)\"},\"xaxis\":\"x\",\"yaxis\":\"y\",\"frame\":null}],\"highlight\":{\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.2,\"selected\":{\"opacity\":1},\"debounce\":0},\"shinyEvents\":[\"plotly_hover\",\"plotly_click\",\"plotly_selected\",\"plotly_relayout\",\"plotly_brushed\",\"plotly_brushing\",\"plotly_clickannotation\",\"plotly_doubleclick\",\"plotly_deselect\",\"plotly_afterplot\"],\"base_url\":\"https://plot.ly\"},\"evals\":[],\"jsHooks\":[]}</script>\n",
       "\t</body>\n",
       "</html>\n"
      ],
      "text/plain": [
       "HTML widgets cannot be represented in plain text (need html)"
      ]
     },
     "metadata": {
      "text/html": {
       "isolated": true
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig5 = plot_ly() %>%\n",
    "    add_trace(x = post_density$x, y = post_density$y, type= 'scatter', mode = \"lines\", alpha=0.3, fill=\"tozeroy\", name = \"Post-follow\", colors='#FF7F0E') %>%\n",
    "    add_trace(x = pre_density$x, y = pre_density$y, type= 'scatter', mode = \"lines\", alpha=0.3, fill=\"tozeroy\", name = \"Pre-follow\", colors='#1F77B4') %>%\n",
    "    plotly::layout(autosize=F, legend=list(x=0.05, y=0.95), xaxis=list(title='Disposition Effect'), yaxis=list(title='Density'))\n",
    "\n",
    "fig5\n",
    "\n",
    "# orca(fig5, '../Figs/Fig4.svg')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Table 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Table 1\n",
    "load(\"sample1.Rdata\")\n",
    "load(\"sample2.Rdata\")\n",
    "full <- sample2[, .(hold.stock = uniqueN(stkcd)), keyby = .(cube.symbol, date)\n",
    "    ]\n",
    "full <- full[, .(hold.stock = mean(hold.stock)), by = .(cube.symbol)]\n",
    "\n",
    "full.stat <- sample2[, .(trade.num = trd.num[.N],\n",
    "              sale.num = .SD[sale == 1, .N],\n",
    "              sale.gain.num = .SD[sale == 1 & gain == 1, .N],\n",
    "              sale.loss.num = .SD[sale == 1 & gain == 0, .N], \n",
    "              ever.stock = uniqueN(stkcd),\n",
    "              life.port = max(date)-min(date),\n",
    "              aver_ret = mean(ret-1, na.rm = T),\n",
    "              fans.num = followers[.N],\n",
    "              followings.num = followings[.N]\n",
    "              ),\n",
    "              by = .(cube.symbol)\n",
    "        ][full, on = .(cube.symbol)]\n",
    "\n",
    "## Mean and standard error\n",
    "aver_sd_full <- full.stat[, as.list(lapply(.SD[, -1], function(x) c(min(x, na.rm = T), mean(x, na.rm = T), median(x, na.rm = T), max(x, na.rm = T), sd(x, na.rm = T))))\n",
    "    ][, cat := c(\"min\", \"mean\", \"median\", \"max\", \"sd\")]\n",
    "aver_sd_full"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<thead><tr><th scope=col>trade.num</th><th scope=col>sale.num</th><th scope=col>sale.gain.num</th><th scope=col>sale.loss.num</th><th scope=col>ever.stock</th><th scope=col>life.port</th><th scope=col>aver_ret</th><th scope=col>fans.num</th><th scope=col>followings.num</th><th scope=col>hold.stock</th><th scope=col>cat</th></tr></thead>\n",
       "<tbody>\n",
       "\t<tr><td>  1.00000    </td><td>  0.00000    </td><td> 0.00000     </td><td> 0.000000    </td><td> 1.00000     </td><td>  0.0000 days</td><td>-10.69727250 </td><td>   0.000000  </td><td>  0.00000    </td><td> 1.000000    </td><td>min          </td></tr>\n",
       "\t<tr><td>114.49757    </td><td> 41.20651    </td><td>30.60791     </td><td>10.598605    </td><td>22.14796     </td><td>348.8780 days</td><td>  0.30166437 </td><td>   8.495667  </td><td> 10.14416    </td><td> 2.755980    </td><td>mean         </td></tr>\n",
       "\t<tr><td>117.00000    </td><td> 39.00000    </td><td>28.00000     </td><td> 8.000000    </td><td>19.00000     </td><td>372.0000 days</td><td>  0.03721644 </td><td>   0.000000  </td><td>  4.00000    </td><td> 2.133803    </td><td>median       </td></tr>\n",
       "\t<tr><td>200.00000    </td><td>104.00000    </td><td>94.00000     </td><td>68.000000    </td><td>96.00000     </td><td>638.0000 days</td><td>102.30965000 </td><td>2083.000000  </td><td>294.00000    </td><td>26.397661    </td><td>max          </td></tr>\n",
       "\t<tr><td> 68.10996    </td><td> 28.09348    </td><td>21.48073     </td><td> 9.864181    </td><td>16.22351     </td><td>176.0914 days</td><td>  2.63045004 </td><td>  70.747902  </td><td> 18.32999    </td><td> 2.010786    </td><td>sd           </td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "\\begin{tabular}{r|lllllllllll}\n",
       " trade.num & sale.num & sale.gain.num & sale.loss.num & ever.stock & life.port & aver\\_ret & fans.num & followings.num & hold.stock & cat\\\\\n",
       "\\hline\n",
       "\t   1.00000     &   0.00000     &  0.00000      &  0.000000     &  1.00000      &   0.0000 days & -10.69727250  &    0.000000   &   0.00000     &  1.000000     & min          \\\\\n",
       "\t 114.49757     &  41.20651     & 30.60791      & 10.598605     & 22.14796      & 348.8780 days &   0.30166437  &    8.495667   &  10.14416     &  2.755980     & mean         \\\\\n",
       "\t 117.00000     &  39.00000     & 28.00000      &  8.000000     & 19.00000      & 372.0000 days &   0.03721644  &    0.000000   &   4.00000     &  2.133803     & median       \\\\\n",
       "\t 200.00000     & 104.00000     & 94.00000      & 68.000000     & 96.00000      & 638.0000 days & 102.30965000  & 2083.000000   & 294.00000     & 26.397661     & max          \\\\\n",
       "\t  68.10996     &  28.09348     & 21.48073      &  9.864181     & 16.22351      & 176.0914 days &   2.63045004  &   70.747902   &  18.32999     &  2.010786     & sd           \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "| trade.num | sale.num | sale.gain.num | sale.loss.num | ever.stock | life.port | aver_ret | fans.num | followings.num | hold.stock | cat |\n",
       "|---|---|---|---|---|---|---|---|---|---|---|\n",
       "|   1.00000     |   0.00000     |  0.00000      |  0.000000     |  1.00000      |   0.0000 days | -10.69727250  |    0.000000   |   0.00000     |  1.000000     | min           |\n",
       "| 114.49757     |  41.20651     | 30.60791      | 10.598605     | 22.14796      | 348.8780 days |   0.30166437  |    8.495667   |  10.14416     |  2.755980     | mean          |\n",
       "| 117.00000     |  39.00000     | 28.00000      |  8.000000     | 19.00000      | 372.0000 days |   0.03721644  |    0.000000   |   4.00000     |  2.133803     | median        |\n",
       "| 200.00000     | 104.00000     | 94.00000      | 68.000000     | 96.00000      | 638.0000 days | 102.30965000  | 2083.000000   | 294.00000     | 26.397661     | max           |\n",
       "|  68.10996     |  28.09348     | 21.48073      |  9.864181     | 16.22351      | 176.0914 days |   2.63045004  |   70.747902   |  18.32999     |  2.010786     | sd            |\n",
       "\n"
      ],
      "text/plain": [
       "  trade.num sale.num  sale.gain.num sale.loss.num ever.stock life.port    \n",
       "1   1.00000   0.00000  0.00000       0.000000      1.00000     0.0000 days\n",
       "2 114.49757  41.20651 30.60791      10.598605     22.14796   348.8780 days\n",
       "3 117.00000  39.00000 28.00000       8.000000     19.00000   372.0000 days\n",
       "4 200.00000 104.00000 94.00000      68.000000     96.00000   638.0000 days\n",
       "5  68.10996  28.09348 21.48073       9.864181     16.22351   176.0914 days\n",
       "  aver_ret     fans.num    followings.num hold.stock cat   \n",
       "1 -10.69727250    0.000000   0.00000       1.000000  min   \n",
       "2   0.30166437    8.495667  10.14416       2.755980  mean  \n",
       "3   0.03721644    0.000000   4.00000       2.133803  median\n",
       "4 102.30965000 2083.000000 294.00000      26.397661  max   \n",
       "5   2.63045004   70.747902  18.32999       2.010786  sd    "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "aver_sd_full"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Table 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Table 2\n",
    "descrp.stat <- sample1[pre.follow == 1 | (post.follow == 1 & date - as.Date(follow.date) <= pre.period), .SD]\n",
    "\n",
    "ttest <- descrp.stat[, .(hold.period = mean(hold.period, na.rm = T),\n",
    "                                    hold.period.gain = .SD[gain == 1, mean(hold.period, na.rm = T)],\n",
    "                                    hold.period.loss = .SD[gain == 0, mean(hold.period, na.rm = T)]\n",
    "                                    ),\n",
    "                                    by = .(cube.symbol, post.follow)\n",
    "                                    ]\n",
    "\n",
    "aver_sd <- ttest[, as.list(lapply(.SD[, -1], function(x) c(mean(x, na.rm = T), sd(x, na.rm = T)))), by = .(post.follow)\n",
    "    ][, cat := c(\"mean\", \"standard error\", \"mean\", \"standard error\")   \n",
    "    ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<thead><tr><th scope=col>post.follow</th><th scope=col>hold.period</th><th scope=col>hold.period.gain</th><th scope=col>hold.period.loss</th><th scope=col>cat</th></tr></thead>\n",
       "<tbody>\n",
       "\t<tr><td>0             </td><td>16.32913      </td><td>15.56587      </td><td>15.42226      </td><td>mean          </td></tr>\n",
       "\t<tr><td>0             </td><td>20.79174      </td><td>20.06736      </td><td>21.35771      </td><td>standard error</td></tr>\n",
       "\t<tr><td>1             </td><td>28.92326      </td><td>26.78286      </td><td>27.11841      </td><td>mean          </td></tr>\n",
       "\t<tr><td>1             </td><td>40.79451      </td><td>39.11657      </td><td>42.12338      </td><td>standard error</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "\\begin{tabular}{r|lllll}\n",
       " post.follow & hold.period & hold.period.gain & hold.period.loss & cat\\\\\n",
       "\\hline\n",
       "\t 0              & 16.32913       & 15.56587       & 15.42226       & mean          \\\\\n",
       "\t 0              & 20.79174       & 20.06736       & 21.35771       & standard error\\\\\n",
       "\t 1              & 28.92326       & 26.78286       & 27.11841       & mean          \\\\\n",
       "\t 1              & 40.79451       & 39.11657       & 42.12338       & standard error\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "| post.follow | hold.period | hold.period.gain | hold.period.loss | cat |\n",
       "|---|---|---|---|---|\n",
       "| 0              | 16.32913       | 15.56587       | 15.42226       | mean           |\n",
       "| 0              | 20.79174       | 20.06736       | 21.35771       | standard error |\n",
       "| 1              | 28.92326       | 26.78286       | 27.11841       | mean           |\n",
       "| 1              | 40.79451       | 39.11657       | 42.12338       | standard error |\n",
       "\n"
      ],
      "text/plain": [
       "  post.follow hold.period hold.period.gain hold.period.loss cat           \n",
       "1 0           16.32913    15.56587         15.42226         mean          \n",
       "2 0           20.79174    20.06736         21.35771         standard error\n",
       "3 1           28.92326    26.78286         27.11841         mean          \n",
       "4 1           40.79451    39.11657         42.12338         standard error"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "aver_sd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Table 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Call:\n",
       "coxph(formula = Surv(hold.period, sale == 1) ~ gain + post.follow + \n",
       "    I(gain * post.follow), data = sample1[pre.follow == 1 | (post.follow == \n",
       "    1 & date - as.Date(follow.date) <= pre.period)])\n",
       "\n",
       "  n= 605700, number of events= 39411 \n",
       "   (1114 observations deleted due to missingness)\n",
       "\n",
       "                          coef exp(coef) se(coef)      z Pr(>|z|)    \n",
       "gain                   0.45087   1.56968  0.01565 28.801  < 2e-16 ***\n",
       "post.follow           -0.12783   0.88000  0.02007 -6.369 1.90e-10 ***\n",
       "I(gain * post.follow) -0.09557   0.90886  0.02323 -4.115 3.88e-05 ***\n",
       "---\n",
       "Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1\n",
       "\n",
       "                      exp(coef) exp(-coef) lower .95 upper .95\n",
       "gain                     1.5697     0.6371    1.5223    1.6186\n",
       "post.follow              0.8800     1.1364    0.8461    0.9153\n",
       "I(gain * post.follow)    0.9089     1.1003    0.8684    0.9512\n",
       "\n",
       "Concordance= 0.568  (se = 0.001 )\n",
       "Rsquare= 0.003   (max possible= 0.814 )\n",
       "Likelihood ratio test= 1694  on 3 df,   p=<2e-16\n",
       "Wald test            = 1641  on 3 df,   p=<2e-16\n",
       "Score (logrank) test = 1670  on 3 df,   p=<2e-16\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Table 3\n",
    "rst.cox.e <- coxph(Surv(hold.period, sale == 1) ~ gain, data = sample1[pre.follow == 1]) %>% summary()\n",
    "rst.cox.l <- coxph(Surv(hold.period, sale == 1) ~ gain, data = sample1[post.follow == 1 & date - as.Date(follow.date) <= pre.period]) %>% summary()\n",
    "rst.cox <- coxph(Surv(hold.period, sale == 1) ~ gain + post.follow + I(gain * post.follow), data = sample1[pre.follow == 1 | (post.follow == 1 & date - as.Date(follow.date) <= pre.period)]) %>% summary()\n",
    "\n",
    "rst.cox"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Table 4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Table 4\n",
    "rst.main.e <- feglm(sale ~ gain | stkcd + cube.symbol + hold.period, sample1[pre.follow == 1], binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "rst.main.l <- feglm(sale ~ gain | stkcd + cube.symbol + hold.period, sample1[post.follow == 1 & date - as.Date(follow.date) <= pre.period], binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "rst.main.t0 <- feglm(sale ~ gain + post.follow + I(gain * post.follow) | stkcd + cube.symbol + hold.period, sample1[pre.follow == 1 | (post.follow == 1 & date - as.Date(follow.date) <= pre.period)], binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "rst.main.t1 <- feglm(sale ~ gain + post.follow + I(gain * post.follow) + mmt | cube.symbol + stkcd + hold.period, sample1[pre.follow == 1 | (post.follow == 1 & date - as.Date(follow.date) <= pre.period)], binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "rst.main.t2 <- feglm(sale ~ gain + post.follow + I(gain * post.follow) + as.numeric(active.day / 365) | cube.symbol + stkcd + hold.period, sample1[pre.follow == 1 | (post.follow == 1 & date - as.Date(follow.date) <= pre.period)], binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "rst.main.t3 <- feglm(sale ~ gain + post.follow + I(gain * post.follow) + as.numeric(trd.num / 1000) | cube.symbol + stkcd + hold.period, sample1[pre.follow == 1 | (post.follow == 1 & date - as.Date(follow.date) <= pre.period)], binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "rst.main.t4 <- feglm(sale ~ gain + post.follow + I(gain * post.follow) + mmt + as.numeric(active.day / 365) + as.numeric(trd.num / 1000) | cube.symbol + stkcd + hold.period, sample1[pre.follow == 1 | (post.follow == 1 & date - as.Date(follow.date) <= pre.period)], binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "rst.main.f1 <- feglm(sale ~ gain + post.follow + I(gain * post.follow) | cube.symbol + stkcd + hold.period, sample1, binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "rst.main.f2 <- feglm(sale ~ gain + post.follow + I(gain * post.follow) + mmt + as.numeric(active.day / 365) + as.numeric(trd.num / 1000) | cube.symbol + stkcd + hold.period, sample1, binomial(\"logit\")) #%>% summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<span style=white-space:pre-wrap>'\\n==========================================================================================================================================================================\\n                          (1)             (2)             (3)             (4)             (5)             (6)             (7)             (8)              (9)            \\n--------------------------------------------------------------------------------------------------------------------------------------------------------------------------\\nGain                           0.903 ***       0.738 ***       0.814 ***       0.814 ***       0.814 ***       0.814 ***       0.815 ***        0.754 ***        0.754 ***\\n                              (0.022)         (0.025)         (0.020)         (0.020)         (0.020)         (0.020)         (0.020)          (0.019)          (0.019)   \\nPost-follow                                                    0.170 ***       0.169 ***       0.159 ***       0.053           0.092 **         0.084 ***        0.016    \\n                                                              (0.026)         (0.026)         (0.028)         (0.028)         (0.029)          (0.020)          (0.021)   \\nGain * Post-follow                                            -0.106 ***      -0.106 ***      -0.107 ***      -0.109 ***      -0.107 ***       -0.104 ***       -0.103 ***\\n                                                              (0.029)         (0.029)         (0.029)         (0.029)         (0.029)          (0.022)          (0.022)   \\nMomentum                                                                       0.623                                           0.659                             1.060 *  \\n                                                                              (0.873)                                         (0.874)                           (0.468)   \\nActive days                                                                                    0.032                          -0.355 ***                        -0.094 ***\\n                                                                                              (0.037)                         (0.049)                           (0.021)   \\nTrade number                                                                                                   2.775 ***       4.496 ***                         1.998 ***\\n                                                                                                              (0.282)         (0.370)                           (0.190)   \\n--------------------------------------------------------------------------------------------------------------------------------------------------------------------------\\nTrader FE                    Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \\nHolding period FE            Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \\nStock FE                     Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \\nDeviance                  103242.224       91232.511      206131.831      206131.323      206131.084      206034.824      205982.312       548095.537       547956.822    \\nNum. obs.                 273004          253302          574726          574724          574724          574724          574724          1709439          1709439        \\nNum. groups: stkcd          2577            2483            2981            2980            2980            2980            2980             3357             3357        \\nNum. groups: cube.symbol    1862            1877            2212            2212            2212            2212            2212             2626             2626        \\nNum. groups: hold.period     237             322             339             339             339             339             339              481              481        \\n==========================================================================================================================================================================\\n*** p &lt; 0.001; ** p &lt; 0.01; * p &lt; 0.05\\n'</span>"
      ],
      "text/latex": [
       "'\\textbackslash{}n==========================================================================================================================================================================\\textbackslash{}n                          (1)             (2)             (3)             (4)             (5)             (6)             (7)             (8)              (9)            \\textbackslash{}n--------------------------------------------------------------------------------------------------------------------------------------------------------------------------\\textbackslash{}nGain                           0.903 ***       0.738 ***       0.814 ***       0.814 ***       0.814 ***       0.814 ***       0.815 ***        0.754 ***        0.754 ***\\textbackslash{}n                              (0.022)         (0.025)         (0.020)         (0.020)         (0.020)         (0.020)         (0.020)          (0.019)          (0.019)   \\textbackslash{}nPost-follow                                                    0.170 ***       0.169 ***       0.159 ***       0.053           0.092 **         0.084 ***        0.016    \\textbackslash{}n                                                              (0.026)         (0.026)         (0.028)         (0.028)         (0.029)          (0.020)          (0.021)   \\textbackslash{}nGain * Post-follow                                            -0.106 ***      -0.106 ***      -0.107 ***      -0.109 ***      -0.107 ***       -0.104 ***       -0.103 ***\\textbackslash{}n                                                              (0.029)         (0.029)         (0.029)         (0.029)         (0.029)          (0.022)          (0.022)   \\textbackslash{}nMomentum                                                                       0.623                                           0.659                             1.060 *  \\textbackslash{}n                                                                              (0.873)                                         (0.874)                           (0.468)   \\textbackslash{}nActive days                                                                                    0.032                          -0.355 ***                        -0.094 ***\\textbackslash{}n                                                                                              (0.037)                         (0.049)                           (0.021)   \\textbackslash{}nTrade number                                                                                                   2.775 ***       4.496 ***                         1.998 ***\\textbackslash{}n                                                                                                              (0.282)         (0.370)                           (0.190)   \\textbackslash{}n--------------------------------------------------------------------------------------------------------------------------------------------------------------------------\\textbackslash{}nTrader FE                    Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \\textbackslash{}nHolding period FE            Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \\textbackslash{}nStock FE                     Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \\textbackslash{}nDeviance                  103242.224       91232.511      206131.831      206131.323      206131.084      206034.824      205982.312       548095.537       547956.822    \\textbackslash{}nNum. obs.                 273004          253302          574726          574724          574724          574724          574724          1709439          1709439        \\textbackslash{}nNum. groups: stkcd          2577            2483            2981            2980            2980            2980            2980             3357             3357        \\textbackslash{}nNum. groups: cube.symbol    1862            1877            2212            2212            2212            2212            2212             2626             2626        \\textbackslash{}nNum. groups: hold.period     237             322             339             339             339             339             339              481              481        \\textbackslash{}n==========================================================================================================================================================================\\textbackslash{}n*** p < 0.001; ** p < 0.01; * p < 0.05\\textbackslash{}n'"
      ],
      "text/markdown": [
       "<span style=white-space:pre-wrap>'\\n==========================================================================================================================================================================\\n                          (1)             (2)             (3)             (4)             (5)             (6)             (7)             (8)              (9)            \\n--------------------------------------------------------------------------------------------------------------------------------------------------------------------------\\nGain                           0.903 ***       0.738 ***       0.814 ***       0.814 ***       0.814 ***       0.814 ***       0.815 ***        0.754 ***        0.754 ***\\n                              (0.022)         (0.025)         (0.020)         (0.020)         (0.020)         (0.020)         (0.020)          (0.019)          (0.019)   \\nPost-follow                                                    0.170 ***       0.169 ***       0.159 ***       0.053           0.092 **         0.084 ***        0.016    \\n                                                              (0.026)         (0.026)         (0.028)         (0.028)         (0.029)          (0.020)          (0.021)   \\nGain * Post-follow                                            -0.106 ***      -0.106 ***      -0.107 ***      -0.109 ***      -0.107 ***       -0.104 ***       -0.103 ***\\n                                                              (0.029)         (0.029)         (0.029)         (0.029)         (0.029)          (0.022)          (0.022)   \\nMomentum                                                                       0.623                                           0.659                             1.060 *  \\n                                                                              (0.873)                                         (0.874)                           (0.468)   \\nActive days                                                                                    0.032                          -0.355 ***                        -0.094 ***\\n                                                                                              (0.037)                         (0.049)                           (0.021)   \\nTrade number                                                                                                   2.775 ***       4.496 ***                         1.998 ***\\n                                                                                                              (0.282)         (0.370)                           (0.190)   \\n--------------------------------------------------------------------------------------------------------------------------------------------------------------------------\\nTrader FE                    Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \\nHolding period FE            Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \\nStock FE                     Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \\nDeviance                  103242.224       91232.511      206131.831      206131.323      206131.084      206034.824      205982.312       548095.537       547956.822    \\nNum. obs.                 273004          253302          574726          574724          574724          574724          574724          1709439          1709439        \\nNum. groups: stkcd          2577            2483            2981            2980            2980            2980            2980             3357             3357        \\nNum. groups: cube.symbol    1862            1877            2212            2212            2212            2212            2212             2626             2626        \\nNum. groups: hold.period     237             322             339             339             339             339             339              481              481        \\n==========================================================================================================================================================================\\n*** p &lt; 0.001; ** p &lt; 0.01; * p &lt; 0.05\\n'</span>"
      ],
      "text/plain": [
       "\n",
       "==========================================================================================================================================================================\n",
       "                          (1)             (2)             (3)             (4)             (5)             (6)             (7)             (8)              (9)            \n",
       "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n",
       "Gain                           0.903 ***       0.738 ***       0.814 ***       0.814 ***       0.814 ***       0.814 ***       0.815 ***        0.754 ***        0.754 ***\n",
       "                              (0.022)         (0.025)         (0.020)         (0.020)         (0.020)         (0.020)         (0.020)          (0.019)          (0.019)   \n",
       "Post-follow                                                    0.170 ***       0.169 ***       0.159 ***       0.053           0.092 **         0.084 ***        0.016    \n",
       "                                                              (0.026)         (0.026)         (0.028)         (0.028)         (0.029)          (0.020)          (0.021)   \n",
       "Gain * Post-follow                                            -0.106 ***      -0.106 ***      -0.107 ***      -0.109 ***      -0.107 ***       -0.104 ***       -0.103 ***\n",
       "                                                              (0.029)         (0.029)         (0.029)         (0.029)         (0.029)          (0.022)          (0.022)   \n",
       "Momentum                                                                       0.623                                           0.659                             1.060 *  \n",
       "                                                                              (0.873)                                         (0.874)                           (0.468)   \n",
       "Active days                                                                                    0.032                          -0.355 ***                        -0.094 ***\n",
       "                                                                                              (0.037)                         (0.049)                           (0.021)   \n",
       "Trade number                                                                                                   2.775 ***       4.496 ***                         1.998 ***\n",
       "                                                                                                              (0.282)         (0.370)                           (0.190)   \n",
       "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n",
       "Trader FE                    Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \n",
       "Holding period FE            Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \n",
       "Stock FE                     Yes             Yes             Yes             Yes             Yes             Yes             Yes              Yes              Yes        \n",
       "Deviance                  103242.224       91232.511      206131.831      206131.323      206131.084      206034.824      205982.312       548095.537       547956.822    \n",
       "Num. obs.                 273004          253302          574726          574724          574724          574724          574724          1709439          1709439        \n",
       "Num. groups: stkcd          2577            2483            2981            2980            2980            2980            2980             3357             3357        \n",
       "Num. groups: cube.symbol    1862            1877            2212            2212            2212            2212            2212             2626             2626        \n",
       "Num. groups: hold.period     237             322             339             339             339             339             339              481              481        \n",
       "==========================================================================================================================================================================\n",
       "*** p < 0.001; ** p < 0.01; * p < 0.05"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "list(rst.main.e, rst.main.l, rst.main.t0, rst.main.t1, rst.main.t2, rst.main.t3, rst.main.t4, rst.main.f1, rst.main.f2) %>%\n",
    "    screenreg(\n",
    "            custom.model.names = c(\"(1)\", \"(2)\", \"(3)\", \"(4)\", \"(5)\", \"(6)\", \"(7)\", \"(8)\", \"(9)\"),\n",
    "            custom.gof.rows = list(\"Trader FE\" = c(\"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\"),\n",
    "                                                 \"Holding period FE\" = c(\"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\"),\n",
    "                                                 \"Stock FE\" = c(\"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\", \"Yes\")),\n",
    "            custom.coef.names = c(\"Gain\", \"Post-follow\", \"Gain * Post-follow\", \"Momentum\", \"Active days\", \"Trade number\"),\n",
    "            reorder.coef = c(1, 2, 3, 4, 5, 6),\n",
    "            no.margin = T,\n",
    "            digits = 3\n",
    "            )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Table 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Table 5\n",
    "load(file = \"sample2.Rdata\")\n",
    "rst.ln.i <- feglm(sale ~ gain + I(log(followers + 1)) + I(gain * (log(followers + 1))) + mmt + as.numeric(active.day / 365) + as.numeric(trd.num / 1000) | stkcd + cube.symbol + hold.period, data = sample2, binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "rst.ln.o <- feglm(sale ~ gain + I(log(followings + 1)) + I(gain * (log(followings + 1))) + mmt + as.numeric(active.day / 365) + as.numeric(trd.num / 1000) | stkcd + cube.symbol + hold.period, data = sample2, binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "rst.ln.lq <- feglm(sale ~ gain + I(cntra * 100) + I(gain * (cntra * 100)) + mmt + as.numeric(active.day / 365) + as.numeric(trd.num / 1000) | stkcd + cube.symbol + hold.period, data = sample2, binomial(\"logit\")) #%>% summary()\n",
    "\n",
    "\n",
    "rst.ln.f <- feglm(sale ~ gain + I(log(followers + 1)) + I(gain * (log(followers + 1))) + I(log(followings + 1)) + I(gain * (log(followings + 1))) + I(cntra * 100) + I(gain * (cntra * 100)) + mmt + as.numeric(active.day / 365) + as.numeric(trd.num / 1000) | stkcd + cube.symbol + hold.period, data = sample2, binomial(\"logit\")) #%>% summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<span style=white-space:pre-wrap>'\\n============================================================================================\\n                          (1)              (2)              (3)              (4)            \\n--------------------------------------------------------------------------------------------\\nGain                            0.631 ***        0.728 ***        0.633 ***        0.747 ***\\n                               (0.007)          (0.012)          (0.008)          (0.013)   \\nIn-degree                       0.009                                              0.003    \\n                               (0.006)                                            (0.006)   \\nGain * In-degree               -0.041 ***                                         -0.033 ***\\n                               (0.005)                                            (0.005)   \\nOut-degree                                       0.048 ***                         0.033 ***\\n                                                (0.010)                           (0.010)   \\nGain * Out-degree                               -0.072 ***                        -0.064 ***\\n                                                (0.006)                           (0.006)   \\nCentrality                                                        0.637 ***        0.613 ***\\n                                                                 (0.080)          (0.082)   \\nGain * Centrality                                                -0.333 ***       -0.259 ***\\n                                                                 (0.078)          (0.079)   \\nMomentum                        2.146 ***        2.123 ***        2.129 ***        2.149 ***\\n                               (0.297)          (0.297)          (0.297)          (0.297)   \\nActive days                    -0.116 ***       -0.124 ***       -0.127 ***       -0.108 ***\\n                               (0.015)          (0.017)          (0.015)          (0.017)   \\nTrade number                    1.101 ***        1.114 ***        1.093 ***        1.114 ***\\n                               (0.102)          (0.102)          (0.102)          (0.102)   \\n--------------------------------------------------------------------------------------------\\nTrader FE                     Yes              Yes              Yes              Yes        \\nHolding period FE             Yes              Yes              Yes              Yes        \\nStock FE                      Yes              Yes              Yes              Yes        \\nDeviance                  1036747.979      1036693.438      1036771.099      1036570.298    \\nNum. obs.                 2753289          2753289          2753289          2753289        \\nNum. groups: stkcd           3488             3488             3488             3488        \\nNum. groups: cube.symbol     4669             4669             4669             4669        \\nNum. groups: hold.period      492              492              492              492        \\n============================================================================================\\n*** p &lt; 0.001; ** p &lt; 0.01; * p &lt; 0.05\\n'</span>"
      ],
      "text/latex": [
       "'\\textbackslash{}n============================================================================================\\textbackslash{}n                          (1)              (2)              (3)              (4)            \\textbackslash{}n--------------------------------------------------------------------------------------------\\textbackslash{}nGain                            0.631 ***        0.728 ***        0.633 ***        0.747 ***\\textbackslash{}n                               (0.007)          (0.012)          (0.008)          (0.013)   \\textbackslash{}nIn-degree                       0.009                                              0.003    \\textbackslash{}n                               (0.006)                                            (0.006)   \\textbackslash{}nGain * In-degree               -0.041 ***                                         -0.033 ***\\textbackslash{}n                               (0.005)                                            (0.005)   \\textbackslash{}nOut-degree                                       0.048 ***                         0.033 ***\\textbackslash{}n                                                (0.010)                           (0.010)   \\textbackslash{}nGain * Out-degree                               -0.072 ***                        -0.064 ***\\textbackslash{}n                                                (0.006)                           (0.006)   \\textbackslash{}nCentrality                                                        0.637 ***        0.613 ***\\textbackslash{}n                                                                 (0.080)          (0.082)   \\textbackslash{}nGain * Centrality                                                -0.333 ***       -0.259 ***\\textbackslash{}n                                                                 (0.078)          (0.079)   \\textbackslash{}nMomentum                        2.146 ***        2.123 ***        2.129 ***        2.149 ***\\textbackslash{}n                               (0.297)          (0.297)          (0.297)          (0.297)   \\textbackslash{}nActive days                    -0.116 ***       -0.124 ***       -0.127 ***       -0.108 ***\\textbackslash{}n                               (0.015)          (0.017)          (0.015)          (0.017)   \\textbackslash{}nTrade number                    1.101 ***        1.114 ***        1.093 ***        1.114 ***\\textbackslash{}n                               (0.102)          (0.102)          (0.102)          (0.102)   \\textbackslash{}n--------------------------------------------------------------------------------------------\\textbackslash{}nTrader FE                     Yes              Yes              Yes              Yes        \\textbackslash{}nHolding period FE             Yes              Yes              Yes              Yes        \\textbackslash{}nStock FE                      Yes              Yes              Yes              Yes        \\textbackslash{}nDeviance                  1036747.979      1036693.438      1036771.099      1036570.298    \\textbackslash{}nNum. obs.                 2753289          2753289          2753289          2753289        \\textbackslash{}nNum. groups: stkcd           3488             3488             3488             3488        \\textbackslash{}nNum. groups: cube.symbol     4669             4669             4669             4669        \\textbackslash{}nNum. groups: hold.period      492              492              492              492        \\textbackslash{}n============================================================================================\\textbackslash{}n*** p < 0.001; ** p < 0.01; * p < 0.05\\textbackslash{}n'"
      ],
      "text/markdown": [
       "<span style=white-space:pre-wrap>'\\n============================================================================================\\n                          (1)              (2)              (3)              (4)            \\n--------------------------------------------------------------------------------------------\\nGain                            0.631 ***        0.728 ***        0.633 ***        0.747 ***\\n                               (0.007)          (0.012)          (0.008)          (0.013)   \\nIn-degree                       0.009                                              0.003    \\n                               (0.006)                                            (0.006)   \\nGain * In-degree               -0.041 ***                                         -0.033 ***\\n                               (0.005)                                            (0.005)   \\nOut-degree                                       0.048 ***                         0.033 ***\\n                                                (0.010)                           (0.010)   \\nGain * Out-degree                               -0.072 ***                        -0.064 ***\\n                                                (0.006)                           (0.006)   \\nCentrality                                                        0.637 ***        0.613 ***\\n                                                                 (0.080)          (0.082)   \\nGain * Centrality                                                -0.333 ***       -0.259 ***\\n                                                                 (0.078)          (0.079)   \\nMomentum                        2.146 ***        2.123 ***        2.129 ***        2.149 ***\\n                               (0.297)          (0.297)          (0.297)          (0.297)   \\nActive days                    -0.116 ***       -0.124 ***       -0.127 ***       -0.108 ***\\n                               (0.015)          (0.017)          (0.015)          (0.017)   \\nTrade number                    1.101 ***        1.114 ***        1.093 ***        1.114 ***\\n                               (0.102)          (0.102)          (0.102)          (0.102)   \\n--------------------------------------------------------------------------------------------\\nTrader FE                     Yes              Yes              Yes              Yes        \\nHolding period FE             Yes              Yes              Yes              Yes        \\nStock FE                      Yes              Yes              Yes              Yes        \\nDeviance                  1036747.979      1036693.438      1036771.099      1036570.298    \\nNum. obs.                 2753289          2753289          2753289          2753289        \\nNum. groups: stkcd           3488             3488             3488             3488        \\nNum. groups: cube.symbol     4669             4669             4669             4669        \\nNum. groups: hold.period      492              492              492              492        \\n============================================================================================\\n*** p &lt; 0.001; ** p &lt; 0.01; * p &lt; 0.05\\n'</span>"
      ],
      "text/plain": [
       "\n",
       "============================================================================================\n",
       "                          (1)              (2)              (3)              (4)            \n",
       "--------------------------------------------------------------------------------------------\n",
       "Gain                            0.631 ***        0.728 ***        0.633 ***        0.747 ***\n",
       "                               (0.007)          (0.012)          (0.008)          (0.013)   \n",
       "In-degree                       0.009                                              0.003    \n",
       "                               (0.006)                                            (0.006)   \n",
       "Gain * In-degree               -0.041 ***                                         -0.033 ***\n",
       "                               (0.005)                                            (0.005)   \n",
       "Out-degree                                       0.048 ***                         0.033 ***\n",
       "                                                (0.010)                           (0.010)   \n",
       "Gain * Out-degree                               -0.072 ***                        -0.064 ***\n",
       "                                                (0.006)                           (0.006)   \n",
       "Centrality                                                        0.637 ***        0.613 ***\n",
       "                                                                 (0.080)          (0.082)   \n",
       "Gain * Centrality                                                -0.333 ***       -0.259 ***\n",
       "                                                                 (0.078)          (0.079)   \n",
       "Momentum                        2.146 ***        2.123 ***        2.129 ***        2.149 ***\n",
       "                               (0.297)          (0.297)          (0.297)          (0.297)   \n",
       "Active days                    -0.116 ***       -0.124 ***       -0.127 ***       -0.108 ***\n",
       "                               (0.015)          (0.017)          (0.015)          (0.017)   \n",
       "Trade number                    1.101 ***        1.114 ***        1.093 ***        1.114 ***\n",
       "                               (0.102)          (0.102)          (0.102)          (0.102)   \n",
       "--------------------------------------------------------------------------------------------\n",
       "Trader FE                     Yes              Yes              Yes              Yes        \n",
       "Holding period FE             Yes              Yes              Yes              Yes        \n",
       "Stock FE                      Yes              Yes              Yes              Yes        \n",
       "Deviance                  1036747.979      1036693.438      1036771.099      1036570.298    \n",
       "Num. obs.                 2753289          2753289          2753289          2753289        \n",
       "Num. groups: stkcd           3488             3488             3488             3488        \n",
       "Num. groups: cube.symbol     4669             4669             4669             4669        \n",
       "Num. groups: hold.period      492              492              492              492        \n",
       "============================================================================================\n",
       "*** p < 0.001; ** p < 0.01; * p < 0.05"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "list(rst.ln.i, rst.ln.o, rst.ln.lq, rst.ln.f) %>%\n",
    "    texreg::screenreg(\n",
    "            custom.model.names = c(\"(1)\", \"(2)\", \"(3)\", \"(4)\"),\n",
    "            custom.gof.rows = list(\"Trader FE\" = c(\"Yes\", \"Yes\", \"Yes\", \"Yes\"),\n",
    "                                                 \"Holding period FE\" = c(\"Yes\", \"Yes\", \"Yes\", \"Yes\"),\n",
    "                                                 \"Stock FE\" = c(\"Yes\", \"Yes\", \"Yes\", \"Yes\")),\n",
    "            custom.coef.names = c(\"Gain\", \"In-degree\", \"Gain * In-degree\", \"Momentum\", \"Active days\", \"Trade number\", \"Out-degree\", \"Gain * Out-degree\", \"Centrality\", \"Gain * Centrality\"),\n",
    "            reorder.coef = c(1, 2, 3, 7, 8, 9, 10, 4, 5, 6),\n",
    "            no.margin = T,\n",
    "            digits = 3\n",
    "            )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "R",
   "language": "R",
   "name": "ir"
  },
  "language_info": {
   "codemirror_mode": "r",
   "file_extension": ".r",
   "mimetype": "text/x-r-source",
   "name": "R",
   "pygments_lexer": "r",
   "version": "3.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
